From d7c1b01a7c35e2c09aadefd624f7280e97e3e404 Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Wed, 5 Aug 2026 14:28:51 +0300 Subject: [PATCH 1/2] remove x86 python folder See: https://github.com/cloudbase/cloudbase-init/issues/213 Signed-off-by: Adrian Vladu --- Python314_4_x86_Template/DLLs/_asyncio.pyd | Bin 68440 -> 0 bytes Python314_4_x86_Template/DLLs/_bz2.pyd | Bin 84312 -> 0 bytes Python314_4_x86_Template/DLLs/_ctypes.pyd | Bin 126808 -> 0 bytes Python314_4_x86_Template/DLLs/_decimal.pyd | Bin 250200 -> 0 bytes .../DLLs/_elementtree.pyd | Bin 124760 -> 0 bytes Python314_4_x86_Template/DLLs/_hashlib.pyd | Bin 55128 -> 0 bytes Python314_4_x86_Template/DLLs/_lzma.pyd | Bin 148824 -> 0 bytes .../DLLs/_multiprocessing.pyd | Bin 33624 -> 0 bytes Python314_4_x86_Template/DLLs/_overlapped.pyd | Bin 47448 -> 0 bytes Python314_4_x86_Template/DLLs/_queue.pyd | Bin 32088 -> 0 bytes .../DLLs/_remote_debugging.pyd | Bin 71000 -> 0 bytes Python314_4_x86_Template/DLLs/_socket.pyd | Bin 77144 -> 0 bytes Python314_4_x86_Template/DLLs/_sqlite3.pyd | Bin 104792 -> 0 bytes Python314_4_x86_Template/DLLs/_ssl.pyd | Bin 164184 -> 0 bytes Python314_4_x86_Template/DLLs/_uuid.pyd | Bin 26456 -> 0 bytes Python314_4_x86_Template/DLLs/_wmi.pyd | Bin 35672 -> 0 bytes Python314_4_x86_Template/DLLs/_zoneinfo.pyd | Bin 45400 -> 0 bytes Python314_4_x86_Template/DLLs/_zstd.pyd | Bin 416600 -> 0 bytes Python314_4_x86_Template/DLLs/libcrypto-3.dll | Bin 3505520 -> 0 bytes Python314_4_x86_Template/DLLs/libffi-8.dll | Bin 35088 -> 0 bytes Python314_4_x86_Template/DLLs/libssl-3.dll | Bin 639856 -> 0 bytes Python314_4_x86_Template/DLLs/py.ico | Bin 75809 -> 0 bytes Python314_4_x86_Template/DLLs/pyc.ico | Bin 78396 -> 0 bytes Python314_4_x86_Template/DLLs/pyd.ico | Bin 83351 -> 0 bytes Python314_4_x86_Template/DLLs/pyexpat.pyd | Bin 193880 -> 0 bytes Python314_4_x86_Template/DLLs/python_lib.cat | Bin 120167 -> 0 bytes Python314_4_x86_Template/DLLs/select.pyd | Bin 30552 -> 0 bytes Python314_4_x86_Template/DLLs/sqlite3.dll | Bin 1297240 -> 0 bytes Python314_4_x86_Template/DLLs/unicodedata.pyd | Bin 749912 -> 0 bytes Python314_4_x86_Template/DLLs/winsound.pyd | Bin 30544 -> 0 bytes Python314_4_x86_Template/LICENSE.txt | 676 - Python314_4_x86_Template/Lib/__future__.py | 147 - Python314_4_x86_Template/Lib/__hello__.py | 16 - .../Lib/__phello__/__init__.py | 7 - .../Lib/__phello__/ham/__init__.py | 0 .../Lib/__phello__/ham/eggs.py | 0 .../Lib/__phello__/spam.py | 7 - .../__pycache__/__future__.cpython-314.pyc | Bin 4850 -> 0 bytes .../Lib/__pycache__/_colorize.cpython-314.pyc | Bin 18589 -> 0 bytes .../_compat_pickle.cpython-314.pyc | Bin 7446 -> 0 bytes .../__pycache__/_markupbase.cpython-314.pyc | Bin 13175 -> 0 bytes .../_opcode_metadata.cpython-314.pyc | Bin 10474 -> 0 bytes .../__pycache__/_py_warnings.cpython-314.pyc | Bin 37052 -> 0 bytes .../__pycache__/_weakrefset.cpython-314.pyc | Bin 9473 -> 0 bytes .../__pycache__/annotationlib.cpython-314.pyc | Bin 47844 -> 0 bytes .../Lib/__pycache__/argparse.cpython-314.pyc | Bin 113283 -> 0 bytes .../Lib/__pycache__/ast.cpython-314.pyc | Bin 31666 -> 0 bytes .../Lib/__pycache__/base64.cpython-314.pyc | Bin 26682 -> 0 bytes .../Lib/__pycache__/bisect.cpython-314.pyc | Bin 3664 -> 0 bytes .../Lib/__pycache__/bz2.cpython-314.pyc | Bin 15353 -> 0 bytes .../Lib/__pycache__/calendar.cpython-314.pyc | Bin 47453 -> 0 bytes .../Lib/__pycache__/codeop.cpython-314.pyc | Bin 7030 -> 0 bytes .../Lib/__pycache__/colorsys.cpython-314.pyc | Bin 5341 -> 0 bytes .../__pycache__/compileall.cpython-314.pyc | Bin 21262 -> 0 bytes .../__pycache__/configparser.cpython-314.pyc | Bin 72970 -> 0 bytes .../__pycache__/contextlib.cpython-314.pyc | Bin 31208 -> 0 bytes .../Lib/__pycache__/copy.cpython-314.pyc | Bin 10184 -> 0 bytes .../Lib/__pycache__/copyreg.cpython-314.pyc | Bin 7988 -> 0 bytes .../Lib/__pycache__/csv.cpython-314.pyc | Bin 21251 -> 0 bytes .../__pycache__/dataclasses.cpython-314.pyc | Bin 54848 -> 0 bytes .../Lib/__pycache__/datetime.cpython-314.pyc | Bin 570 -> 0 bytes .../Lib/__pycache__/decimal.cpython-314.pyc | Bin 3077 -> 0 bytes .../Lib/__pycache__/dis.cpython-314.pyc | Bin 54296 -> 0 bytes .../Lib/__pycache__/enum.cpython-314.pyc | Bin 88098 -> 0 bytes .../Lib/__pycache__/filecmp.cpython-314.pyc | Bin 15381 -> 0 bytes .../Lib/__pycache__/fnmatch.cpython-314.pyc | Bin 7934 -> 0 bytes .../Lib/__pycache__/fractions.cpython-314.pyc | Bin 41941 -> 0 bytes .../Lib/__pycache__/functools.cpython-314.pyc | Bin 48061 -> 0 bytes .../Lib/__pycache__/getpass.cpython-314.pyc | Bin 9842 -> 0 bytes .../Lib/__pycache__/gettext.cpython-314.pyc | Bin 23226 -> 0 bytes .../Lib/__pycache__/glob.cpython-314.pyc | Bin 26178 -> 0 bytes .../Lib/__pycache__/gzip.cpython-314.pyc | Bin 33806 -> 0 bytes .../Lib/__pycache__/hashlib.cpython-314.pyc | Bin 8419 -> 0 bytes .../Lib/__pycache__/heapq.cpython-314.pyc | Bin 18669 -> 0 bytes .../Lib/__pycache__/hmac.cpython-314.pyc | Bin 12271 -> 0 bytes .../Lib/__pycache__/inspect.cpython-314.pyc | Bin 139633 -> 0 bytes .../Lib/__pycache__/ipaddress.cpython-314.pyc | Bin 94089 -> 0 bytes .../Lib/__pycache__/keyword.cpython-314.pyc | Bin 1603 -> 0 bytes .../Lib/__pycache__/linecache.cpython-314.pyc | Bin 9570 -> 0 bytes .../Lib/__pycache__/locale.cpython-314.pyc | Bin 59977 -> 0 bytes .../Lib/__pycache__/lzma.cpython-314.pyc | Bin 16533 -> 0 bytes .../Lib/__pycache__/mimetypes.cpython-314.pyc | Bin 28928 -> 0 bytes .../Lib/__pycache__/numbers.cpython-314.pyc | Bin 14261 -> 0 bytes .../Lib/__pycache__/opcode.cpython-314.pyc | Bin 4560 -> 0 bytes .../Lib/__pycache__/operator.cpython-314.pyc | Bin 19068 -> 0 bytes .../Lib/__pycache__/optparse.cpython-314.pyc | Bin 69059 -> 0 bytes .../Lib/__pycache__/pickle.cpython-314.pyc | Bin 85319 -> 0 bytes .../Lib/__pycache__/pkgutil.cpython-314.pyc | Bin 18083 -> 0 bytes .../Lib/__pycache__/platform.cpython-314.pyc | Bin 48150 -> 0 bytes .../__pycache__/py_compile.cpython-314.pyc | Bin 10302 -> 0 bytes .../Lib/__pycache__/queue.cpython-314.pyc | Bin 17579 -> 0 bytes .../Lib/__pycache__/quopri.cpython-314.pyc | Bin 9885 -> 0 bytes .../Lib/__pycache__/random.cpython-314.pyc | Bin 37849 -> 0 bytes .../Lib/__pycache__/reprlib.cpython-314.pyc | Bin 11752 -> 0 bytes .../Lib/__pycache__/selectors.cpython-314.pyc | Bin 27131 -> 0 bytes .../Lib/__pycache__/shlex.cpython-314.pyc | Bin 15546 -> 0 bytes .../Lib/__pycache__/shutil.cpython-314.pyc | Bin 72276 -> 0 bytes .../Lib/__pycache__/signal.cpython-314.pyc | Bin 4655 -> 0 bytes .../Lib/__pycache__/socket.cpython-314.pyc | Bin 43035 -> 0 bytes .../__pycache__/socketserver.cpython-314.pyc | Bin 35247 -> 0 bytes .../Lib/__pycache__/ssl.cpython-314.pyc | Bin 65970 -> 0 bytes .../__pycache__/stringprep.cpython-314.pyc | Bin 25448 -> 0 bytes .../Lib/__pycache__/struct.cpython-314.pyc | Bin 399 -> 0 bytes .../__pycache__/subprocess.cpython-314.pyc | Bin 85025 -> 0 bytes .../Lib/__pycache__/tarfile.cpython-314.pyc | Bin 133210 -> 0 bytes .../Lib/__pycache__/tempfile.cpython-314.pyc | Bin 42144 -> 0 bytes .../Lib/__pycache__/textwrap.cpython-314.pyc | Bin 18506 -> 0 bytes .../Lib/__pycache__/threading.cpython-314.pyc | Bin 66560 -> 0 bytes .../Lib/__pycache__/token.cpython-314.pyc | Bin 3946 -> 0 bytes .../Lib/__pycache__/tokenize.cpython-314.pyc | Bin 27016 -> 0 bytes .../Lib/__pycache__/traceback.cpython-314.pyc | Bin 78735 -> 0 bytes .../Lib/__pycache__/types.cpython-314.pyc | Bin 15912 -> 0 bytes .../Lib/__pycache__/typing.cpython-314.pyc | Bin 169332 -> 0 bytes .../Lib/__pycache__/uuid.cpython-314.pyc | Bin 41036 -> 0 bytes .../Lib/__pycache__/warnings.cpython-314.pyc | Bin 2568 -> 0 bytes .../Lib/__pycache__/weakref.cpython-314.pyc | Bin 27691 -> 0 bytes Python314_4_x86_Template/Lib/_aix_support.py | 108 - .../Lib/_android_support.py | 192 - .../Lib/_apple_support.py | 66 - Python314_4_x86_Template/Lib/_ast_unparse.py | 1161 - .../Lib/_collections_abc.py | 1167 - Python314_4_x86_Template/Lib/_colorize.py | 355 - .../Lib/_compat_pickle.py | 251 - Python314_4_x86_Template/Lib/_ios_support.py | 71 - Python314_4_x86_Template/Lib/_markupbase.py | 396 - .../Lib/_opcode_metadata.py | 371 - Python314_4_x86_Template/Lib/_osx_support.py | 579 - Python314_4_x86_Template/Lib/_py_abc.py | 147 - Python314_4_x86_Template/Lib/_py_warnings.py | 869 - Python314_4_x86_Template/Lib/_pydatetime.py | 2723 - Python314_4_x86_Template/Lib/_pydecimal.py | 6401 -- Python314_4_x86_Template/Lib/_pyio.py | 2754 - Python314_4_x86_Template/Lib/_pylong.py | 729 - .../Lib/_pyrepl/__init__.py | 19 - .../Lib/_pyrepl/__main__.py | 10 - .../Lib/_pyrepl/_module_completer.py | 426 - .../Lib/_pyrepl/_threading_handler.py | 74 - .../Lib/_pyrepl/base_eventqueue.py | 110 - .../Lib/_pyrepl/commands.py | 505 - .../Lib/_pyrepl/completing_reader.py | 299 - .../Lib/_pyrepl/console.py | 229 - .../Lib/_pyrepl/fancy_termios.py | 82 - .../Lib/_pyrepl/historical_reader.py | 419 - Python314_4_x86_Template/Lib/_pyrepl/input.py | 114 - .../Lib/_pyrepl/keymap.py | 213 - Python314_4_x86_Template/Lib/_pyrepl/main.py | 58 - Python314_4_x86_Template/Lib/_pyrepl/mypy.ini | 25 - Python314_4_x86_Template/Lib/_pyrepl/pager.py | 175 - .../Lib/_pyrepl/reader.py | 772 - .../Lib/_pyrepl/readline.py | 620 - .../Lib/_pyrepl/simple_interact.py | 181 - .../Lib/_pyrepl/terminfo.py | 488 - Python314_4_x86_Template/Lib/_pyrepl/trace.py | 34 - Python314_4_x86_Template/Lib/_pyrepl/types.py | 10 - .../Lib/_pyrepl/unix_console.py | 843 - .../Lib/_pyrepl/unix_eventqueue.py | 77 - Python314_4_x86_Template/Lib/_pyrepl/utils.py | 391 - .../Lib/_pyrepl/windows_console.py | 730 - .../Lib/_pyrepl/windows_eventqueue.py | 42 - Python314_4_x86_Template/Lib/_sitebuiltins.py | 91 - Python314_4_x86_Template/Lib/_strptime.py | 822 - .../Lib/_threading_local.py | 120 - Python314_4_x86_Template/Lib/_weakrefset.py | 147 - Python314_4_x86_Template/Lib/abc.py | 188 - Python314_4_x86_Template/Lib/annotationlib.py | 1165 - Python314_4_x86_Template/Lib/antigravity.py | 17 - Python314_4_x86_Template/Lib/argparse.py | 2786 - Python314_4_x86_Template/Lib/ast.py | 680 - .../Lib/asyncio/__init__.py | 74 - .../Lib/asyncio/__main__.py | 241 - .../Lib/asyncio/base_events.py | 2082 - .../Lib/asyncio/base_futures.py | 67 - .../Lib/asyncio/base_subprocess.py | 319 - .../Lib/asyncio/base_tasks.py | 94 - .../Lib/asyncio/constants.py | 41 - .../Lib/asyncio/coroutines.py | 118 - .../Lib/asyncio/events.py | 878 - .../Lib/asyncio/exceptions.py | 62 - .../Lib/asyncio/format_helpers.py | 84 - .../Lib/asyncio/futures.py | 481 - Python314_4_x86_Template/Lib/asyncio/graph.py | 276 - Python314_4_x86_Template/Lib/asyncio/locks.py | 617 - Python314_4_x86_Template/Lib/asyncio/log.py | 7 - .../Lib/asyncio/mixins.py | 21 - .../Lib/asyncio/proactor_events.py | 896 - .../Lib/asyncio/protocols.py | 216 - .../Lib/asyncio/queues.py | 307 - .../Lib/asyncio/runners.py | 225 - .../Lib/asyncio/selector_events.py | 1326 - .../Lib/asyncio/sslproto.py | 929 - .../Lib/asyncio/staggered.py | 179 - .../Lib/asyncio/streams.py | 787 - .../Lib/asyncio/subprocess.py | 229 - .../Lib/asyncio/taskgroups.py | 280 - Python314_4_x86_Template/Lib/asyncio/tasks.py | 1141 - .../Lib/asyncio/threads.py | 25 - .../Lib/asyncio/timeouts.py | 182 - Python314_4_x86_Template/Lib/asyncio/tools.py | 276 - .../Lib/asyncio/transports.py | 337 - .../Lib/asyncio/trsock.py | 98 - .../Lib/asyncio/unix_events.py | 972 - .../Lib/asyncio/windows_events.py | 903 - .../Lib/asyncio/windows_utils.py | 180 - Python314_4_x86_Template/Lib/base64.py | 618 - Python314_4_x86_Template/Lib/bdb.py | 1206 - Python314_4_x86_Template/Lib/bisect.py | 118 - Python314_4_x86_Template/Lib/bz2.py | 352 - Python314_4_x86_Template/Lib/cProfile.py | 205 - Python314_4_x86_Template/Lib/calendar.py | 926 - Python314_4_x86_Template/Lib/cmd.py | 414 - Python314_4_x86_Template/Lib/code.py | 396 - Python314_4_x86_Template/Lib/codecs.py | 1125 - Python314_4_x86_Template/Lib/codeop.py | 154 - .../Lib/collections/__init__.py | 1609 - .../__pycache__/__init__.cpython-314.pyc | Bin 74831 -> 0 bytes Python314_4_x86_Template/Lib/colorsys.py | 166 - Python314_4_x86_Template/Lib/compileall.py | 472 - .../Lib/compression/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 214 -> 0 bytes .../Lib/compression/_common/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 222 -> 0 bytes .../__pycache__/_streams.cpython-314.pyc | Bin 7875 -> 0 bytes .../Lib/compression/_common/_streams.py | 162 - .../Lib/compression/bz2.py | 5 - .../Lib/compression/gzip.py | 5 - .../Lib/compression/lzma.py | 5 - .../Lib/compression/zlib.py | 5 - .../Lib/compression/zstd/__init__.py | 242 - .../zstd/__pycache__/__init__.cpython-314.pyc | Bin 11793 -> 0 bytes .../__pycache__/_zstdfile.cpython-314.pyc | Bin 15802 -> 0 bytes .../Lib/compression/zstd/_zstdfile.py | 345 - .../Lib/concurrent/__init__.py | 1 - .../Lib/concurrent/futures/__init__.py | 65 - .../Lib/concurrent/futures/_base.py | 674 - .../Lib/concurrent/futures/interpreter.py | 123 - .../Lib/concurrent/futures/process.py | 939 - .../Lib/concurrent/futures/thread.py | 274 - .../Lib/concurrent/interpreters/__init__.py | 247 - .../concurrent/interpreters/_crossinterp.py | 107 - .../Lib/concurrent/interpreters/_queues.py | 289 - Python314_4_x86_Template/Lib/configparser.py | 1415 - Python314_4_x86_Template/Lib/contextlib.py | 814 - Python314_4_x86_Template/Lib/contextvars.py | 8 - Python314_4_x86_Template/Lib/copy.py | 286 - Python314_4_x86_Template/Lib/copyreg.py | 222 - Python314_4_x86_Template/Lib/csv.py | 513 - .../Lib/ctypes/__init__.py | 683 - .../__pycache__/__init__.cpython-314.pyc | Bin 29748 -> 0 bytes .../__pycache__/_endian.cpython-314.pyc | Bin 3754 -> 0 bytes .../__pycache__/_layout.cpython-314.pyc | Bin 8682 -> 0 bytes .../__pycache__/wintypes.cpython-314.pyc | Bin 8988 -> 0 bytes Python314_4_x86_Template/Lib/ctypes/_aix.py | 327 - .../Lib/ctypes/_endian.py | 78 - .../Lib/ctypes/_layout.py | 330 - .../Lib/ctypes/macholib/README.ctypes | 7 - .../Lib/ctypes/macholib/__init__.py | 9 - .../Lib/ctypes/macholib/dyld.py | 165 - .../Lib/ctypes/macholib/dylib.py | 42 - .../Lib/ctypes/macholib/fetch_macholib | 2 - .../Lib/ctypes/macholib/fetch_macholib.bat | 1 - .../Lib/ctypes/macholib/framework.py | 42 - Python314_4_x86_Template/Lib/ctypes/util.py | 544 - .../Lib/ctypes/wintypes.py | 210 - .../Lib/curses/__init__.py | 101 - Python314_4_x86_Template/Lib/curses/ascii.py | 99 - .../Lib/curses/has_key.py | 192 - Python314_4_x86_Template/Lib/curses/panel.py | 6 - .../Lib/curses/textpad.py | 204 - Python314_4_x86_Template/Lib/dataclasses.py | 1804 - Python314_4_x86_Template/Lib/datetime.py | 13 - Python314_4_x86_Template/Lib/dbm/__init__.py | 194 - Python314_4_x86_Template/Lib/dbm/dumb.py | 319 - Python314_4_x86_Template/Lib/dbm/gnu.py | 3 - Python314_4_x86_Template/Lib/dbm/ndbm.py | 3 - Python314_4_x86_Template/Lib/dbm/sqlite3.py | 144 - Python314_4_x86_Template/Lib/decimal.py | 109 - Python314_4_x86_Template/Lib/difflib.py | 2064 - Python314_4_x86_Template/Lib/dis.py | 1157 - Python314_4_x86_Template/Lib/doctest.py | 2921 - .../Lib/email/__init__.py | 61 - .../__pycache__/__init__.cpython-314.pyc | Bin 1941 -> 0 bytes .../_encoded_words.cpython-314.pyc | Bin 8603 -> 0 bytes .../__pycache__/_parseaddr.cpython-314.pyc | Bin 23958 -> 0 bytes .../__pycache__/_policybase.cpython-314.pyc | Bin 18700 -> 0 bytes .../__pycache__/base64mime.cpython-314.pyc | Bin 4076 -> 0 bytes .../email/__pycache__/charset.cpython-314.pyc | Bin 15113 -> 0 bytes .../__pycache__/encoders.cpython-314.pyc | Bin 2161 -> 0 bytes .../email/__pycache__/errors.cpython-314.pyc | Bin 7652 -> 0 bytes .../__pycache__/feedparser.cpython-314.pyc | Bin 21099 -> 0 bytes .../email/__pycache__/header.cpython-314.pyc | Bin 25617 -> 0 bytes .../__pycache__/iterators.cpython-314.pyc | Bin 2968 -> 0 bytes .../email/__pycache__/message.cpython-314.pyc | Bin 52525 -> 0 bytes .../email/__pycache__/parser.cpython-314.pyc | Bin 6670 -> 0 bytes .../__pycache__/quoprimime.cpython-314.pyc | Bin 10425 -> 0 bytes .../email/__pycache__/utils.cpython-314.pyc | Bin 17013 -> 0 bytes .../Lib/email/_encoded_words.py | 233 - .../Lib/email/_header_value_parser.py | 3146 - .../Lib/email/_parseaddr.py | 563 - .../Lib/email/_policybase.py | 392 - .../Lib/email/architecture.rst | 216 - .../Lib/email/base64mime.py | 115 - Python314_4_x86_Template/Lib/email/charset.py | 398 - .../Lib/email/contentmanager.py | 253 - .../Lib/email/encoders.py | 65 - Python314_4_x86_Template/Lib/email/errors.py | 117 - .../Lib/email/feedparser.py | 536 - .../Lib/email/generator.py | 530 - Python314_4_x86_Template/Lib/email/header.py | 582 - .../Lib/email/headerregistry.py | 618 - .../Lib/email/iterators.py | 68 - Python314_4_x86_Template/Lib/email/message.py | 1217 - .../Lib/email/mime/__init__.py | 0 .../Lib/email/mime/application.py | 37 - .../Lib/email/mime/audio.py | 97 - .../Lib/email/mime/base.py | 29 - .../Lib/email/mime/image.py | 152 - .../Lib/email/mime/message.py | 33 - .../Lib/email/mime/multipart.py | 47 - .../Lib/email/mime/nonmultipart.py | 21 - .../Lib/email/mime/text.py | 40 - Python314_4_x86_Template/Lib/email/parser.py | 127 - Python314_4_x86_Template/Lib/email/policy.py | 239 - .../Lib/email/quoprimime.py | 300 - Python314_4_x86_Template/Lib/email/utils.py | 486 - .../Lib/encodings/__init__.py | 182 - .../__pycache__/__init__.cpython-314.pyc | Bin 6810 -> 0 bytes .../_win_cp_codecs.cpython-314.pyc | Bin 3387 -> 0 bytes .../__pycache__/aliases.cpython-314.pyc | Bin 12628 -> 0 bytes .../__pycache__/cp1252.cpython-314.pyc | Bin 3457 -> 0 bytes .../__pycache__/cp437.cpython-314.pyc | Bin 11963 -> 0 bytes .../__pycache__/idna.cpython-314.pyc | Bin 15064 -> 0 bytes .../__pycache__/utf_8.cpython-314.pyc | Bin 2402 -> 0 bytes .../Lib/encodings/_win_cp_codecs.py | 36 - .../Lib/encodings/aliases.py | 560 - .../Lib/encodings/ascii.py | 50 - .../Lib/encodings/base64_codec.py | 55 - .../Lib/encodings/big5.py | 39 - .../Lib/encodings/big5hkscs.py | 39 - .../Lib/encodings/bz2_codec.py | 78 - .../Lib/encodings/charmap.py | 69 - .../Lib/encodings/cp037.py | 307 - .../Lib/encodings/cp1006.py | 307 - .../Lib/encodings/cp1026.py | 307 - .../Lib/encodings/cp1125.py | 698 - .../Lib/encodings/cp1140.py | 307 - .../Lib/encodings/cp1250.py | 307 - .../Lib/encodings/cp1251.py | 307 - .../Lib/encodings/cp1252.py | 307 - .../Lib/encodings/cp1253.py | 307 - .../Lib/encodings/cp1254.py | 307 - .../Lib/encodings/cp1255.py | 307 - .../Lib/encodings/cp1256.py | 307 - .../Lib/encodings/cp1257.py | 307 - .../Lib/encodings/cp1258.py | 307 - .../Lib/encodings/cp273.py | 307 - .../Lib/encodings/cp424.py | 307 - .../Lib/encodings/cp437.py | 698 - .../Lib/encodings/cp500.py | 307 - .../Lib/encodings/cp720.py | 309 - .../Lib/encodings/cp737.py | 698 - .../Lib/encodings/cp775.py | 697 - .../Lib/encodings/cp850.py | 698 - .../Lib/encodings/cp852.py | 698 - .../Lib/encodings/cp855.py | 698 - .../Lib/encodings/cp856.py | 307 - .../Lib/encodings/cp857.py | 694 - .../Lib/encodings/cp858.py | 698 - .../Lib/encodings/cp860.py | 698 - .../Lib/encodings/cp861.py | 698 - .../Lib/encodings/cp862.py | 698 - .../Lib/encodings/cp863.py | 698 - .../Lib/encodings/cp864.py | 690 - .../Lib/encodings/cp865.py | 698 - .../Lib/encodings/cp866.py | 698 - .../Lib/encodings/cp869.py | 689 - .../Lib/encodings/cp874.py | 307 - .../Lib/encodings/cp875.py | 307 - .../Lib/encodings/cp932.py | 39 - .../Lib/encodings/cp949.py | 39 - .../Lib/encodings/cp950.py | 39 - .../Lib/encodings/euc_jis_2004.py | 39 - .../Lib/encodings/euc_jisx0213.py | 39 - .../Lib/encodings/euc_jp.py | 39 - .../Lib/encodings/euc_kr.py | 39 - .../Lib/encodings/gb18030.py | 39 - .../Lib/encodings/gb2312.py | 39 - Python314_4_x86_Template/Lib/encodings/gbk.py | 39 - .../Lib/encodings/hex_codec.py | 55 - .../Lib/encodings/hp_roman8.py | 314 - Python314_4_x86_Template/Lib/encodings/hz.py | 39 - .../Lib/encodings/idna.py | 387 - .../Lib/encodings/iso2022_jp.py | 39 - .../Lib/encodings/iso2022_jp_1.py | 39 - .../Lib/encodings/iso2022_jp_2.py | 39 - .../Lib/encodings/iso2022_jp_2004.py | 39 - .../Lib/encodings/iso2022_jp_3.py | 39 - .../Lib/encodings/iso2022_jp_ext.py | 39 - .../Lib/encodings/iso2022_kr.py | 39 - .../Lib/encodings/iso8859_1.py | 307 - .../Lib/encodings/iso8859_10.py | 307 - .../Lib/encodings/iso8859_11.py | 307 - .../Lib/encodings/iso8859_13.py | 307 - .../Lib/encodings/iso8859_14.py | 307 - .../Lib/encodings/iso8859_15.py | 307 - .../Lib/encodings/iso8859_16.py | 307 - .../Lib/encodings/iso8859_2.py | 307 - .../Lib/encodings/iso8859_3.py | 307 - .../Lib/encodings/iso8859_4.py | 307 - .../Lib/encodings/iso8859_5.py | 307 - .../Lib/encodings/iso8859_6.py | 307 - .../Lib/encodings/iso8859_7.py | 307 - .../Lib/encodings/iso8859_8.py | 307 - .../Lib/encodings/iso8859_9.py | 307 - .../Lib/encodings/johab.py | 39 - .../Lib/encodings/koi8_r.py | 307 - .../Lib/encodings/koi8_t.py | 308 - .../Lib/encodings/koi8_u.py | 307 - .../Lib/encodings/kz1048.py | 307 - .../Lib/encodings/latin_1.py | 50 - .../Lib/encodings/mac_arabic.py | 698 - .../Lib/encodings/mac_croatian.py | 307 - .../Lib/encodings/mac_cyrillic.py | 307 - .../Lib/encodings/mac_farsi.py | 307 - .../Lib/encodings/mac_greek.py | 307 - .../Lib/encodings/mac_iceland.py | 307 - .../Lib/encodings/mac_latin2.py | 312 - .../Lib/encodings/mac_roman.py | 307 - .../Lib/encodings/mac_romanian.py | 307 - .../Lib/encodings/mac_turkish.py | 307 - .../Lib/encodings/mbcs.py | 47 - Python314_4_x86_Template/Lib/encodings/oem.py | 41 - .../Lib/encodings/palmos.py | 308 - .../Lib/encodings/ptcp154.py | 312 - .../Lib/encodings/punycode.py | 253 - .../Lib/encodings/quopri_codec.py | 56 - .../Lib/encodings/raw_unicode_escape.py | 46 - .../Lib/encodings/rot_13.py | 113 - .../Lib/encodings/shift_jis.py | 39 - .../Lib/encodings/shift_jis_2004.py | 39 - .../Lib/encodings/shift_jisx0213.py | 39 - .../Lib/encodings/tis_620.py | 307 - .../Lib/encodings/undefined.py | 49 - .../Lib/encodings/unicode_escape.py | 46 - .../Lib/encodings/utf_16.py | 155 - .../Lib/encodings/utf_16_be.py | 42 - .../Lib/encodings/utf_16_le.py | 42 - .../Lib/encodings/utf_32.py | 150 - .../Lib/encodings/utf_32_be.py | 37 - .../Lib/encodings/utf_32_le.py | 37 - .../Lib/encodings/utf_7.py | 38 - .../Lib/encodings/utf_8.py | 42 - .../Lib/encodings/utf_8_sig.py | 130 - .../Lib/encodings/uu_codec.py | 103 - .../Lib/encodings/zlib_codec.py | 77 - .../Lib/ensurepip/__init__.py | 265 - .../Lib/ensurepip/__main__.py | 5 - .../__pycache__/__init__.cpython-314.pyc | Bin 8817 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 401 -> 0 bytes .../_bundled/pip-26.0.1-py3-none-any.whl | Bin 1787723 -> 0 bytes .../Lib/ensurepip/_uninstall.py | 31 - Python314_4_x86_Template/Lib/enum.py | 2168 - Python314_4_x86_Template/Lib/filecmp.py | 320 - Python314_4_x86_Template/Lib/fileinput.py | 442 - Python314_4_x86_Template/Lib/fnmatch.py | 209 - Python314_4_x86_Template/Lib/fractions.py | 1078 - Python314_4_x86_Template/Lib/ftplib.py | 966 - Python314_4_x86_Template/Lib/functools.py | 1165 - Python314_4_x86_Template/Lib/genericpath.py | 200 - Python314_4_x86_Template/Lib/getopt.py | 232 - Python314_4_x86_Template/Lib/getpass.py | 256 - Python314_4_x86_Template/Lib/gettext.py | 657 - Python314_4_x86_Template/Lib/glob.py | 574 - Python314_4_x86_Template/Lib/graphlib.py | 254 - Python314_4_x86_Template/Lib/gzip.py | 717 - Python314_4_x86_Template/Lib/hashlib.py | 255 - Python314_4_x86_Template/Lib/heapq.py | 611 - Python314_4_x86_Template/Lib/hmac.py | 269 - Python314_4_x86_Template/Lib/html/__init__.py | 132 - .../html/__pycache__/__init__.cpython-314.pyc | Bin 5857 -> 0 bytes .../html/__pycache__/entities.cpython-314.pyc | Bin 97086 -> 0 bytes .../html/__pycache__/parser.cpython-314.pyc | Bin 23077 -> 0 bytes Python314_4_x86_Template/Lib/html/entities.py | 2513 - Python314_4_x86_Template/Lib/html/parser.py | 553 - Python314_4_x86_Template/Lib/http/__init__.py | 213 - .../http/__pycache__/__init__.cpython-314.pyc | Bin 10447 -> 0 bytes .../http/__pycache__/client.cpython-314.pyc | Bin 59996 -> 0 bytes .../__pycache__/cookiejar.cpython-314.pyc | Bin 84678 -> 0 bytes .../http/__pycache__/cookies.cpython-314.pyc | Bin 23532 -> 0 bytes Python314_4_x86_Template/Lib/http/client.py | 1570 - .../Lib/http/cookiejar.py | 2122 - Python314_4_x86_Template/Lib/http/cookies.py | 633 - Python314_4_x86_Template/Lib/http/server.py | 1441 - Python314_4_x86_Template/Lib/imaplib.py | 1967 - .../Lib/importlib/__init__.py | 136 - .../__pycache__/__init__.cpython-314.pyc | Bin 4687 -> 0 bytes .../__pycache__/_abc.cpython-314.pyc | Bin 1739 -> 0 bytes .../importlib/__pycache__/abc.cpython-314.pyc | Bin 10314 -> 0 bytes .../__pycache__/readers.cpython-314.pyc | Bin 531 -> 0 bytes .../Lib/importlib/_abc.py | 39 - .../Lib/importlib/_bootstrap.py | 1570 - .../Lib/importlib/_bootstrap_external.py | 1562 - Python314_4_x86_Template/Lib/importlib/abc.py | 234 - .../Lib/importlib/machinery.py | 50 - .../Lib/importlib/metadata/__init__.py | 1093 - .../__pycache__/__init__.cpython-314.pyc | Bin 60131 -> 0 bytes .../__pycache__/_adapters.cpython-314.pyc | Bin 4204 -> 0 bytes .../__pycache__/_collections.cpython-314.pyc | Bin 2053 -> 0 bytes .../__pycache__/_functools.cpython-314.pyc | Bin 3324 -> 0 bytes .../__pycache__/_itertools.cpython-314.pyc | Bin 2364 -> 0 bytes .../__pycache__/_meta.cpython-314.pyc | Bin 5641 -> 0 bytes .../__pycache__/_text.cpython-314.pyc | Bin 3868 -> 0 bytes .../Lib/importlib/metadata/_adapters.py | 89 - .../Lib/importlib/metadata/_collections.py | 30 - .../Lib/importlib/metadata/_functools.py | 104 - .../Lib/importlib/metadata/_itertools.py | 73 - .../Lib/importlib/metadata/_meta.py | 67 - .../Lib/importlib/metadata/_text.py | 99 - .../Lib/importlib/metadata/diagnose.py | 21 - .../Lib/importlib/readers.py | 12 - .../Lib/importlib/resources/__init__.py | 43 - .../__pycache__/__init__.cpython-314.pyc | Bin 885 -> 0 bytes .../__pycache__/_adapters.cpython-314.pyc | Bin 10016 -> 0 bytes .../__pycache__/_common.cpython-314.pyc | Bin 10177 -> 0 bytes .../__pycache__/_functional.cpython-314.pyc | Bin 3555 -> 0 bytes .../__pycache__/_itertools.cpython-314.pyc | Bin 1546 -> 0 bytes .../resources/__pycache__/abc.cpython-314.pyc | Bin 11488 -> 0 bytes .../__pycache__/readers.cpython-314.pyc | Bin 12916 -> 0 bytes .../Lib/importlib/resources/_adapters.py | 168 - .../Lib/importlib/resources/_common.py | 211 - .../Lib/importlib/resources/_functional.py | 81 - .../Lib/importlib/resources/_itertools.py | 38 - .../Lib/importlib/resources/abc.py | 173 - .../Lib/importlib/resources/readers.py | 203 - .../Lib/importlib/resources/simple.py | 106 - .../Lib/importlib/simple.py | 14 - .../Lib/importlib/util.py | 279 - Python314_4_x86_Template/Lib/inspect.py | 3409 - Python314_4_x86_Template/Lib/io.py | 150 - Python314_4_x86_Template/Lib/ipaddress.py | 2417 - Python314_4_x86_Template/Lib/json/__init__.py | 365 - Python314_4_x86_Template/Lib/json/__main__.py | 20 - .../json/__pycache__/__init__.cpython-314.pyc | Bin 14221 -> 0 bytes .../json/__pycache__/decoder.cpython-314.pyc | Bin 14525 -> 0 bytes .../json/__pycache__/encoder.cpython-314.pyc | Bin 17099 -> 0 bytes .../json/__pycache__/scanner.cpython-314.pyc | Bin 3614 -> 0 bytes Python314_4_x86_Template/Lib/json/decoder.py | 364 - Python314_4_x86_Template/Lib/json/encoder.py | 461 - Python314_4_x86_Template/Lib/json/scanner.py | 73 - Python314_4_x86_Template/Lib/json/tool.py | 121 - Python314_4_x86_Template/Lib/keyword.py | 64 - Python314_4_x86_Template/Lib/linecache.py | 256 - Python314_4_x86_Template/Lib/locale.py | 1783 - .../Lib/logging/__init__.py | 2326 - .../__pycache__/__init__.cpython-314.pyc | Bin 96803 -> 0 bytes .../__pycache__/config.cpython-314.pyc | Bin 46574 -> 0 bytes .../__pycache__/handlers.cpython-314.pyc | Bin 67792 -> 0 bytes .../Lib/logging/config.py | 1077 - .../Lib/logging/handlers.py | 1645 - Python314_4_x86_Template/Lib/lzma.py | 364 - Python314_4_x86_Template/Lib/mailbox.py | 2219 - Python314_4_x86_Template/Lib/mimetypes.py | 747 - Python314_4_x86_Template/Lib/modulefinder.py | 671 - .../Lib/multiprocessing/__init__.py | 37 - .../Lib/multiprocessing/connection.py | 1229 - .../Lib/multiprocessing/context.py | 383 - .../Lib/multiprocessing/dummy/__init__.py | 126 - .../Lib/multiprocessing/dummy/connection.py | 75 - .../Lib/multiprocessing/forkserver.py | 429 - .../Lib/multiprocessing/heap.py | 337 - .../Lib/multiprocessing/managers.py | 1438 - .../Lib/multiprocessing/pool.py | 957 - .../Lib/multiprocessing/popen_fork.py | 90 - .../Lib/multiprocessing/popen_forkserver.py | 74 - .../Lib/multiprocessing/popen_spawn_posix.py | 76 - .../Lib/multiprocessing/popen_spawn_win32.py | 147 - .../Lib/multiprocessing/process.py | 443 - .../Lib/multiprocessing/queues.py | 399 - .../Lib/multiprocessing/reduction.py | 281 - .../Lib/multiprocessing/resource_sharer.py | 154 - .../Lib/multiprocessing/resource_tracker.py | 416 - .../Lib/multiprocessing/shared_memory.py | 544 - .../Lib/multiprocessing/sharedctypes.py | 240 - .../Lib/multiprocessing/spawn.py | 307 - .../Lib/multiprocessing/synchronize.py | 411 - .../Lib/multiprocessing/util.py | 560 - Python314_4_x86_Template/Lib/netrc.py | 199 - Python314_4_x86_Template/Lib/ntpath.py | 870 - Python314_4_x86_Template/Lib/nturl2path.py | 74 - Python314_4_x86_Template/Lib/numbers.py | 427 - Python314_4_x86_Template/Lib/opcode.py | 122 - Python314_4_x86_Template/Lib/operator.py | 475 - Python314_4_x86_Template/Lib/optparse.py | 1671 - Python314_4_x86_Template/Lib/os.py | 1191 - .../Lib/pathlib/__init__.py | 1307 - .../__pycache__/__init__.cpython-314.pyc | Bin 61719 -> 0 bytes .../pathlib/__pycache__/_os.cpython-314.pyc | Bin 22511 -> 0 bytes .../Lib/pathlib/_local.py | 12 - Python314_4_x86_Template/Lib/pathlib/_os.py | 530 - Python314_4_x86_Template/Lib/pathlib/types.py | 430 - Python314_4_x86_Template/Lib/pdb.py | 3678 - Python314_4_x86_Template/Lib/pickle.py | 1931 - Python314_4_x86_Template/Lib/pickletools.py | 2887 - Python314_4_x86_Template/Lib/pkgutil.py | 474 - Python314_4_x86_Template/Lib/platform.py | 1515 - Python314_4_x86_Template/Lib/plistlib.py | 948 - Python314_4_x86_Template/Lib/poplib.py | 477 - Python314_4_x86_Template/Lib/posixpath.py | 592 - Python314_4_x86_Template/Lib/pprint.py | 675 - Python314_4_x86_Template/Lib/profile.py | 615 - Python314_4_x86_Template/Lib/pstats.py | 777 - Python314_4_x86_Template/Lib/pty.py | 182 - Python314_4_x86_Template/Lib/py_compile.py | 212 - Python314_4_x86_Template/Lib/pyclbr.py | 314 - Python314_4_x86_Template/Lib/pydoc.py | 2887 - .../Lib/pydoc_data/__init__.py | 0 .../Lib/pydoc_data/_pydoc.css | 112 - .../Lib/pydoc_data/module_docs.py | 320 - .../Lib/pydoc_data/topics.py | 14506 ---- Python314_4_x86_Template/Lib/queue.py | 383 - Python314_4_x86_Template/Lib/quopri.py | 235 - Python314_4_x86_Template/Lib/random.py | 1078 - Python314_4_x86_Template/Lib/re/__init__.py | 428 - .../re/__pycache__/__init__.cpython-314.pyc | Bin 20037 -> 0 bytes .../re/__pycache__/_casefix.cpython-314.pyc | Bin 1880 -> 0 bytes .../re/__pycache__/_compiler.cpython-314.pyc | Bin 29735 -> 0 bytes .../re/__pycache__/_constants.cpython-314.pyc | Bin 5695 -> 0 bytes .../re/__pycache__/_parser.cpython-314.pyc | Bin 45325 -> 0 bytes Python314_4_x86_Template/Lib/re/_casefix.py | 106 - Python314_4_x86_Template/Lib/re/_compiler.py | 782 - Python314_4_x86_Template/Lib/re/_constants.py | 224 - Python314_4_x86_Template/Lib/re/_parser.py | 1066 - Python314_4_x86_Template/Lib/reprlib.py | 230 - Python314_4_x86_Template/Lib/rlcompleter.py | 221 - Python314_4_x86_Template/Lib/runpy.py | 319 - Python314_4_x86_Template/Lib/sched.py | 167 - Python314_4_x86_Template/Lib/secrets.py | 71 - Python314_4_x86_Template/Lib/selectors.py | 603 - Python314_4_x86_Template/Lib/shelve.py | 250 - Python314_4_x86_Template/Lib/shlex.py | 351 - Python314_4_x86_Template/Lib/shutil.py | 1667 - Python314_4_x86_Template/Lib/signal.py | 94 - .../pip-26.0.1.dist-info/INSTALLER | 1 - .../pip-26.0.1.dist-info/METADATA | 111 - .../site-packages/pip-26.0.1.dist-info/RECORD | 878 - .../pip-26.0.1.dist-info/REQUESTED | 0 .../site-packages/pip-26.0.1.dist-info/WHEEL | 4 - .../pip-26.0.1.dist-info/entry_points.txt | 4 - .../pip-26.0.1.dist-info/licenses/AUTHORS.txt | 860 - .../pip-26.0.1.dist-info/licenses/LICENSE.txt | 20 - .../src/pip/_vendor/cachecontrol/LICENSE.txt | 13 - .../licenses/src/pip/_vendor/certifi/LICENSE | 20 - .../pip/_vendor/dependency_groups/LICENSE.txt | 9 - .../src/pip/_vendor/distlib/LICENSE.txt | 284 - .../licenses/src/pip/_vendor/distro/LICENSE | 202 - .../licenses/src/pip/_vendor/idna/LICENSE.md | 31 - .../licenses/src/pip/_vendor/msgpack/COPYING | 14 - .../src/pip/_vendor/packaging/LICENSE | 3 - .../src/pip/_vendor/packaging/LICENSE.APACHE | 177 - .../src/pip/_vendor/packaging/LICENSE.BSD | 23 - .../src/pip/_vendor/pkg_resources/LICENSE | 17 - .../src/pip/_vendor/platformdirs/LICENSE | 21 - .../licenses/src/pip/_vendor/pygments/LICENSE | 25 - .../src/pip/_vendor/pyproject_hooks/LICENSE | 21 - .../licenses/src/pip/_vendor/requests/LICENSE | 175 - .../src/pip/_vendor/resolvelib/LICENSE | 13 - .../licenses/src/pip/_vendor/rich/LICENSE | 19 - .../licenses/src/pip/_vendor/tomli/LICENSE | 21 - .../licenses/src/pip/_vendor/tomli_w/LICENSE | 21 - .../src/pip/_vendor/truststore/LICENSE | 21 - .../src/pip/_vendor/urllib3/LICENSE.txt | 21 - .../Lib/site-packages/pip/__init__.py | 13 - .../Lib/site-packages/pip/__main__.py | 24 - .../Lib/site-packages/pip/__pip-runner__.py | 50 - .../pip/__pycache__/__init__.cpython-314.pyc | Bin 842 -> 0 bytes .../pip/__pycache__/__main__.cpython-314.pyc | Bin 905 -> 0 bytes .../__pip-runner__.cpython-314.pyc | Bin 2393 -> 0 bytes .../site-packages/pip/_internal/__init__.py | 18 - .../__pycache__/__init__.cpython-314.pyc | Bin 936 -> 0 bytes .../__pycache__/build_env.cpython-314.pyc | Bin 29873 -> 0 bytes .../__pycache__/cache.cpython-314.pyc | Bin 15168 -> 0 bytes .../__pycache__/configuration.cpython-314.pyc | Bin 22130 -> 0 bytes .../__pycache__/exceptions.cpython-314.pyc | Bin 52087 -> 0 bytes .../__pycache__/main.cpython-314.pyc | Bin 821 -> 0 bytes .../__pycache__/pyproject.cpython-314.pyc | Bin 4694 -> 0 bytes .../self_outdated_check.cpython-314.pyc | Bin 11805 -> 0 bytes .../__pycache__/wheel_builder.cpython-314.pyc | Bin 12146 -> 0 bytes .../site-packages/pip/_internal/build_env.py | 606 - .../Lib/site-packages/pip/_internal/cache.py | 291 - .../pip/_internal/cli/__init__.py | 3 - .../cli/__pycache__/__init__.cpython-314.pyc | Bin 319 -> 0 bytes .../autocompletion.cpython-314.pyc | Bin 10510 -> 0 bytes .../__pycache__/base_command.cpython-314.pyc | Bin 13020 -> 0 bytes .../__pycache__/cmdoptions.cpython-314.pyc | Bin 41218 -> 0 bytes .../command_context.cpython-314.pyc | Bin 2524 -> 0 bytes .../__pycache__/index_command.cpython-314.pyc | Bin 9391 -> 0 bytes .../cli/__pycache__/main.cpython-314.pyc | Bin 2459 -> 0 bytes .../__pycache__/main_parser.cpython-314.pyc | Bin 5577 -> 0 bytes .../cli/__pycache__/parser.cpython-314.pyc | Bin 21580 -> 0 bytes .../__pycache__/progress_bars.cpython-314.pyc | Bin 7159 -> 0 bytes .../__pycache__/req_command.cpython-314.pyc | Bin 18061 -> 0 bytes .../cli/__pycache__/spinners.cpython-314.pyc | Bin 14918 -> 0 bytes .../__pycache__/status_codes.cpython-314.pyc | Bin 394 -> 0 bytes .../pip/_internal/cli/autocompletion.py | 184 - .../pip/_internal/cli/base_command.py | 255 - .../pip/_internal/cli/cmdoptions.py | 1267 - .../pip/_internal/cli/command_context.py | 28 - .../pip/_internal/cli/index_command.py | 195 - .../site-packages/pip/_internal/cli/main.py | 85 - .../pip/_internal/cli/main_parser.py | 136 - .../site-packages/pip/_internal/cli/parser.py | 358 - .../pip/_internal/cli/progress_bars.py | 153 - .../pip/_internal/cli/req_command.py | 447 - .../pip/_internal/cli/spinners.py | 235 - .../pip/_internal/cli/status_codes.py | 6 - .../pip/_internal/commands/__init__.py | 139 - .../__pycache__/__init__.cpython-314.pyc | Bin 4512 -> 0 bytes .../__pycache__/cache.cpython-314.pyc | Bin 13861 -> 0 bytes .../__pycache__/check.cpython-314.pyc | Bin 2965 -> 0 bytes .../__pycache__/completion.cpython-314.pyc | Bin 5980 -> 0 bytes .../__pycache__/configuration.cpython-314.pyc | Bin 16090 -> 0 bytes .../__pycache__/debug.cpython-314.pyc | Bin 11917 -> 0 bytes .../__pycache__/download.cpython-314.pyc | Bin 7727 -> 0 bytes .../__pycache__/freeze.cpython-314.pyc | Bin 5085 -> 0 bytes .../commands/__pycache__/hash.cpython-314.pyc | Bin 3576 -> 0 bytes .../commands/__pycache__/help.cpython-314.pyc | Bin 1993 -> 0 bytes .../__pycache__/index.cpython-314.pyc | Bin 8376 -> 0 bytes .../__pycache__/inspect.cpython-314.pyc | Bin 4638 -> 0 bytes .../__pycache__/install.cpython-314.pyc | Bin 32728 -> 0 bytes .../commands/__pycache__/list.cpython-314.pyc | Bin 19793 -> 0 bytes .../commands/__pycache__/lock.cpython-314.pyc | Bin 8489 -> 0 bytes .../__pycache__/search.cpython-314.pyc | Bin 9135 -> 0 bytes .../commands/__pycache__/show.cpython-314.pyc | Bin 12447 -> 0 bytes .../__pycache__/uninstall.cpython-314.pyc | Bin 5207 -> 0 bytes .../__pycache__/wheel.cpython-314.pyc | Bin 8773 -> 0 bytes .../pip/_internal/commands/cache.py | 255 - .../pip/_internal/commands/check.py | 66 - .../pip/_internal/commands/completion.py | 136 - .../pip/_internal/commands/configuration.py | 288 - .../pip/_internal/commands/debug.py | 203 - .../pip/_internal/commands/download.py | 146 - .../pip/_internal/commands/freeze.py | 107 - .../pip/_internal/commands/hash.py | 58 - .../pip/_internal/commands/help.py | 40 - .../pip/_internal/commands/index.py | 166 - .../pip/_internal/commands/inspect.py | 92 - .../pip/_internal/commands/install.py | 810 - .../pip/_internal/commands/list.py | 398 - .../pip/_internal/commands/lock.py | 175 - .../pip/_internal/commands/search.py | 178 - .../pip/_internal/commands/show.py | 231 - .../pip/_internal/commands/uninstall.py | 113 - .../pip/_internal/commands/wheel.py | 171 - .../pip/_internal/configuration.py | 396 - .../pip/_internal/distributions/__init__.py | 21 - .../__pycache__/__init__.cpython-314.pyc | Bin 1170 -> 0 bytes .../__pycache__/base.cpython-314.pyc | Bin 3530 -> 0 bytes .../__pycache__/installed.cpython-314.pyc | Bin 2296 -> 0 bytes .../__pycache__/sdist.cpython-314.pyc | Bin 9897 -> 0 bytes .../__pycache__/wheel.cpython-314.pyc | Bin 2849 -> 0 bytes .../pip/_internal/distributions/base.py | 55 - .../pip/_internal/distributions/installed.py | 33 - .../pip/_internal/distributions/sdist.py | 164 - .../pip/_internal/distributions/wheel.py | 44 - .../site-packages/pip/_internal/exceptions.py | 971 - .../pip/_internal/index/__init__.py | 1 - .../__pycache__/__init__.cpython-314.pyc | Bin 273 -> 0 bytes .../__pycache__/collector.cpython-314.pyc | Bin 25430 -> 0 bytes .../package_finder.cpython-314.pyc | Bin 50323 -> 0 bytes .../index/__pycache__/sources.cpython-314.pyc | Bin 15943 -> 0 bytes .../pip/_internal/index/collector.py | 488 - .../pip/_internal/index/package_finder.py | 1125 - .../pip/_internal/index/sources.py | 287 - .../pip/_internal/locations/__init__.py | 440 - .../__pycache__/__init__.cpython-314.pyc | Bin 18955 -> 0 bytes .../__pycache__/_distutils.cpython-314.pyc | Bin 7628 -> 0 bytes .../__pycache__/_sysconfig.cpython-314.pyc | Bin 9354 -> 0 bytes .../__pycache__/base.cpython-314.pyc | Bin 4349 -> 0 bytes .../pip/_internal/locations/_distutils.py | 173 - .../pip/_internal/locations/_sysconfig.py | 218 - .../pip/_internal/locations/base.py | 82 - .../Lib/site-packages/pip/_internal/main.py | 12 - .../pip/_internal/metadata/__init__.py | 169 - .../__pycache__/__init__.cpython-314.pyc | Bin 7865 -> 0 bytes .../__pycache__/_json.cpython-314.pyc | Bin 3428 -> 0 bytes .../metadata/__pycache__/base.cpython-314.pyc | Bin 41836 -> 0 bytes .../__pycache__/pkg_resources.cpython-314.pyc | Bin 20598 -> 0 bytes .../pip/_internal/metadata/_json.py | 87 - .../pip/_internal/metadata/base.py | 685 - .../_internal/metadata/importlib/__init__.py | 6 - .../__pycache__/__init__.cpython-314.pyc | Bin 402 -> 0 bytes .../__pycache__/_compat.cpython-314.pyc | Bin 5327 -> 0 bytes .../__pycache__/_dists.cpython-314.pyc | Bin 16234 -> 0 bytes .../__pycache__/_envs.cpython-314.pyc | Bin 9636 -> 0 bytes .../_internal/metadata/importlib/_compat.py | 87 - .../_internal/metadata/importlib/_dists.py | 229 - .../pip/_internal/metadata/importlib/_envs.py | 143 - .../pip/_internal/metadata/pkg_resources.py | 298 - .../pip/_internal/models/__init__.py | 1 - .../__pycache__/__init__.cpython-314.pyc | Bin 307 -> 0 bytes .../__pycache__/candidate.cpython-314.pyc | Bin 2275 -> 0 bytes .../__pycache__/direct_url.cpython-314.pyc | Bin 13625 -> 0 bytes .../format_control.cpython-314.pyc | Bin 5170 -> 0 bytes .../models/__pycache__/index.cpython-314.pyc | Bin 2185 -> 0 bytes .../installation_report.cpython-314.pyc | Bin 3031 -> 0 bytes .../models/__pycache__/link.cpython-314.pyc | Bin 33432 -> 0 bytes .../release_control.cpython-314.pyc | Bin 4588 -> 0 bytes .../models/__pycache__/scheme.cpython-314.pyc | Bin 1360 -> 0 bytes .../__pycache__/search_scope.cpython-314.pyc | Bin 6085 -> 0 bytes .../selection_prefs.cpython-314.pyc | Bin 2256 -> 0 bytes .../__pycache__/target_python.cpython-314.pyc | Bin 5326 -> 0 bytes .../models/__pycache__/wheel.cpython-314.pyc | Bin 5387 -> 0 bytes .../pip/_internal/models/candidate.py | 25 - .../pip/_internal/models/direct_url.py | 227 - .../pip/_internal/models/format_control.py | 78 - .../pip/_internal/models/index.py | 28 - .../_internal/models/installation_report.py | 57 - .../pip/_internal/models/link.py | 617 - .../pip/_internal/models/release_control.py | 92 - .../pip/_internal/models/scheme.py | 25 - .../pip/_internal/models/search_scope.py | 126 - .../pip/_internal/models/selection_prefs.py | 56 - .../pip/_internal/models/target_python.py | 122 - .../pip/_internal/models/wheel.py | 80 - .../pip/_internal/network/__init__.py | 1 - .../__pycache__/__init__.cpython-314.pyc | Bin 295 -> 0 bytes .../network/__pycache__/auth.cpython-314.pyc | Bin 26512 -> 0 bytes .../network/__pycache__/cache.cpython-314.pyc | Bin 10261 -> 0 bytes .../__pycache__/download.cpython-314.pyc | Bin 18740 -> 0 bytes .../__pycache__/lazy_wheel.cpython-314.pyc | Bin 14242 -> 0 bytes .../__pycache__/session.cpython-314.pyc | Bin 22435 -> 0 bytes .../network/__pycache__/utils.cpython-314.pyc | Bin 2913 -> 0 bytes .../__pycache__/xmlrpc.cpython-314.pyc | Bin 3451 -> 0 bytes .../pip/_internal/network/auth.py | 568 - .../pip/_internal/network/cache.py | 128 - .../pip/_internal/network/download.py | 341 - .../pip/_internal/network/lazy_wheel.py | 215 - .../pip/_internal/network/session.py | 532 - .../pip/_internal/network/utils.py | 98 - .../pip/_internal/network/xmlrpc.py | 61 - .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 241 -> 0 bytes .../__pycache__/check.cpython-314.pyc | Bin 8214 -> 0 bytes .../__pycache__/freeze.cpython-314.pyc | Bin 11504 -> 0 bytes .../__pycache__/prepare.cpython-314.pyc | Bin 30571 -> 0 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 247 -> 0 bytes .../__pycache__/build_tracker.cpython-314.pyc | Bin 9257 -> 0 bytes .../__pycache__/metadata.cpython-314.pyc | Bin 2125 -> 0 bytes .../metadata_editable.cpython-314.pyc | Bin 2179 -> 0 bytes .../build/__pycache__/wheel.cpython-314.pyc | Bin 1922 -> 0 bytes .../wheel_editable.cpython-314.pyc | Bin 2268 -> 0 bytes .../operations/build/build_tracker.py | 140 - .../_internal/operations/build/metadata.py | 38 - .../operations/build/metadata_editable.py | 41 - .../pip/_internal/operations/build/wheel.py | 38 - .../operations/build/wheel_editable.py | 47 - .../pip/_internal/operations/check.py | 175 - .../pip/_internal/operations/freeze.py | 259 - .../_internal/operations/install/__init__.py | 1 - .../__pycache__/__init__.cpython-314.pyc | Bin 307 -> 0 bytes .../install/__pycache__/wheel.cpython-314.pyc | Bin 40639 -> 0 bytes .../pip/_internal/operations/install/wheel.py | 745 - .../pip/_internal/operations/prepare.py | 747 - .../site-packages/pip/_internal/pyproject.py | 123 - .../pip/_internal/req/__init__.py | 103 - .../req/__pycache__/__init__.cpython-314.pyc | Bin 4519 -> 0 bytes .../__pycache__/constructors.cpython-314.pyc | Bin 25371 -> 0 bytes .../req/__pycache__/pep723.cpython-314.pyc | Bin 3243 -> 0 bytes .../req_dependency_group.cpython-314.pyc | Bin 4959 -> 0 bytes .../req/__pycache__/req_file.cpython-314.pyc | Bin 28177 -> 0 bytes .../__pycache__/req_install.cpython-314.pyc | Bin 41459 -> 0 bytes .../req/__pycache__/req_set.cpython-314.pyc | Bin 7055 -> 0 bytes .../__pycache__/req_uninstall.cpython-314.pyc | Bin 37561 -> 0 bytes .../pip/_internal/req/constructors.py | 568 - .../site-packages/pip/_internal/req/pep723.py | 41 - .../pip/_internal/req/req_dependency_group.py | 75 - .../pip/_internal/req/req_file.py | 631 - .../pip/_internal/req/req_install.py | 828 - .../pip/_internal/req/req_set.py | 81 - .../pip/_internal/req/req_uninstall.py | 639 - .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 241 -> 0 bytes .../__pycache__/base.cpython-314.pyc | Bin 1686 -> 0 bytes .../pip/_internal/resolution/base.py | 20 - .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 248 -> 0 bytes .../__pycache__/resolver.cpython-314.pyc | Bin 25278 -> 0 bytes .../_internal/resolution/legacy/resolver.py | 598 - .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 252 -> 0 bytes .../__pycache__/base.cpython-314.pyc | Bin 11181 -> 0 bytes .../__pycache__/candidates.cpython-314.pyc | Bin 37536 -> 0 bytes .../__pycache__/factory.cpython-314.pyc | Bin 39380 -> 0 bytes .../found_candidates.cpython-314.pyc | Bin 7974 -> 0 bytes .../__pycache__/provider.cpython-314.pyc | Bin 13067 -> 0 bytes .../__pycache__/reporter.cpython-314.pyc | Bin 7406 -> 0 bytes .../__pycache__/requirements.cpython-314.pyc | Bin 21135 -> 0 bytes .../__pycache__/resolver.cpython-314.pyc | Bin 13436 -> 0 bytes .../_internal/resolution/resolvelib/base.py | 142 - .../resolution/resolvelib/candidates.py | 591 - .../resolution/resolvelib/factory.py | 856 - .../resolution/resolvelib/found_candidates.py | 166 - .../resolution/resolvelib/provider.py | 285 - .../resolution/resolvelib/reporter.py | 98 - .../resolution/resolvelib/requirements.py | 251 - .../resolution/resolvelib/resolver.py | 332 - .../pip/_internal/self_outdated_check.py | 255 - .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 236 -> 0 bytes .../__pycache__/_jaraco_text.cpython-314.pyc | Bin 4433 -> 0 bytes .../utils/__pycache__/_log.cpython-314.pyc | Bin 2429 -> 0 bytes .../utils/__pycache__/appdirs.cpython-314.pyc | Bin 3137 -> 0 bytes .../utils/__pycache__/compat.cpython-314.pyc | Bin 3577 -> 0 bytes .../compatibility_tags.cpython-314.pyc | Bin 8147 -> 0 bytes .../__pycache__/datetime.cpython-314.pyc | Bin 1896 -> 0 bytes .../__pycache__/deprecation.cpython-314.pyc | Bin 4759 -> 0 bytes .../direct_url_helpers.cpython-314.pyc | Bin 4217 -> 0 bytes .../__pycache__/egg_link.cpython-314.pyc | Bin 3644 -> 0 bytes .../__pycache__/entrypoints.cpython-314.pyc | Bin 4602 -> 0 bytes .../__pycache__/filesystem.cpython-314.pyc | Bin 12250 -> 0 bytes .../__pycache__/filetypes.cpython-314.pyc | Bin 1784 -> 0 bytes .../utils/__pycache__/glibc.cpython-314.pyc | Bin 2977 -> 0 bytes .../utils/__pycache__/hashes.cpython-314.pyc | Bin 9634 -> 0 bytes .../utils/__pycache__/logging.cpython-314.pyc | Bin 18448 -> 0 bytes .../utils/__pycache__/misc.cpython-314.pyc | Bin 41372 -> 0 bytes .../__pycache__/packaging.cpython-314.pyc | Bin 2164 -> 0 bytes .../utils/__pycache__/pylock.cpython-314.pyc | Bin 5053 -> 0 bytes .../utils/__pycache__/retry.cpython-314.pyc | Bin 2502 -> 0 bytes .../__pycache__/subprocess.cpython-314.pyc | Bin 9739 -> 0 bytes .../__pycache__/temp_dir.cpython-314.pyc | Bin 14526 -> 0 bytes .../__pycache__/unpacking.cpython-314.pyc | Bin 16723 -> 0 bytes .../utils/__pycache__/urls.cpython-314.pyc | Bin 2510 -> 0 bytes .../__pycache__/virtualenv.cpython-314.pyc | Bin 5397 -> 0 bytes .../utils/__pycache__/wheel.cpython-314.pyc | Bin 6951 -> 0 bytes .../pip/_internal/utils/_jaraco_text.py | 109 - .../site-packages/pip/_internal/utils/_log.py | 38 - .../pip/_internal/utils/appdirs.py | 52 - .../pip/_internal/utils/compat.py | 85 - .../pip/_internal/utils/compatibility_tags.py | 201 - .../pip/_internal/utils/datetime.py | 28 - .../pip/_internal/utils/deprecation.py | 126 - .../pip/_internal/utils/direct_url_helpers.py | 87 - .../pip/_internal/utils/egg_link.py | 81 - .../pip/_internal/utils/entrypoints.py | 88 - .../pip/_internal/utils/filesystem.py | 203 - .../pip/_internal/utils/filetypes.py | 24 - .../pip/_internal/utils/glibc.py | 102 - .../pip/_internal/utils/hashes.py | 150 - .../pip/_internal/utils/logging.py | 396 - .../site-packages/pip/_internal/utils/misc.py | 771 - .../pip/_internal/utils/packaging.py | 44 - .../pip/_internal/utils/pylock.py | 116 - .../pip/_internal/utils/retry.py | 45 - .../pip/_internal/utils/subprocess.py | 248 - .../pip/_internal/utils/temp_dir.py | 294 - .../pip/_internal/utils/unpacking.py | 362 - .../site-packages/pip/_internal/utils/urls.py | 55 - .../pip/_internal/utils/virtualenv.py | 105 - .../pip/_internal/utils/wheel.py | 132 - .../pip/_internal/vcs/__init__.py | 15 - .../vcs/__pycache__/__init__.cpython-314.pyc | Bin 575 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-314.pyc | Bin 6421 -> 0 bytes .../vcs/__pycache__/git.cpython-314.pyc | Bin 23023 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-314.pyc | Bin 9248 -> 0 bytes .../__pycache__/subversion.cpython-314.pyc | Bin 14765 -> 0 bytes .../versioncontrol.cpython-314.pyc | Bin 34326 -> 0 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 130 - .../site-packages/pip/_internal/vcs/git.py | 571 - .../pip/_internal/vcs/mercurial.py | 186 - .../pip/_internal/vcs/subversion.py | 335 - .../pip/_internal/vcs/versioncontrol.py | 695 - .../pip/_internal/wheel_builder.py | 261 - .../Lib/site-packages/pip/_vendor/README.rst | 180 - .../Lib/site-packages/pip/_vendor/__init__.py | 117 - .../__pycache__/__init__.cpython-314.pyc | Bin 4681 -> 0 bytes .../pip/_vendor/cachecontrol/LICENSE.txt | 13 - .../pip/_vendor/cachecontrol/__init__.py | 32 - .../__pycache__/__init__.cpython-314.pyc | Bin 957 -> 0 bytes .../__pycache__/_cmd.cpython-314.pyc | Bin 3266 -> 0 bytes .../__pycache__/adapter.cpython-314.pyc | Bin 7576 -> 0 bytes .../__pycache__/cache.cpython-314.pyc | Bin 5431 -> 0 bytes .../__pycache__/controller.cpython-314.pyc | Bin 18831 -> 0 bytes .../__pycache__/filewrapper.cpython-314.pyc | Bin 5391 -> 0 bytes .../__pycache__/heuristics.cpython-314.pyc | Bin 8569 -> 0 bytes .../__pycache__/serialize.cpython-314.pyc | Bin 6178 -> 0 bytes .../__pycache__/wrapper.cpython-314.pyc | Bin 1847 -> 0 bytes .../pip/_vendor/cachecontrol/_cmd.py | 70 - .../pip/_vendor/cachecontrol/adapter.py | 167 - .../pip/_vendor/cachecontrol/cache.py | 75 - .../_vendor/cachecontrol/caches/__init__.py | 8 - .../__pycache__/__init__.cpython-314.pyc | Bin 480 -> 0 bytes .../__pycache__/file_cache.cpython-314.pyc | Bin 9058 -> 0 bytes .../__pycache__/redis_cache.cpython-314.pyc | Bin 3708 -> 0 bytes .../_vendor/cachecontrol/caches/file_cache.py | 145 - .../cachecontrol/caches/redis_cache.py | 48 - .../pip/_vendor/cachecontrol/controller.py | 511 - .../pip/_vendor/cachecontrol/filewrapper.py | 121 - .../pip/_vendor/cachecontrol/heuristics.py | 157 - .../pip/_vendor/cachecontrol/py.typed | 0 .../pip/_vendor/cachecontrol/serialize.py | 146 - .../pip/_vendor/cachecontrol/wrapper.py | 43 - .../site-packages/pip/_vendor/certifi/LICENSE | 20 - .../pip/_vendor/certifi/__init__.py | 4 - .../pip/_vendor/certifi/__main__.py | 12 - .../__pycache__/__init__.cpython-314.pyc | Bin 363 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 704 -> 0 bytes .../certifi/__pycache__/core.cpython-314.pyc | Bin 2789 -> 0 bytes .../pip/_vendor/certifi/cacert.pem | 4468 -- .../site-packages/pip/_vendor/certifi/core.py | 83 - .../pip/_vendor/certifi/py.typed | 0 .../pip/_vendor/dependency_groups/LICENSE.txt | 9 - .../pip/_vendor/dependency_groups/__init__.py | 13 - .../pip/_vendor/dependency_groups/__main__.py | 65 - .../__pycache__/__init__.cpython-314.pyc | Bin 422 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 2986 -> 0 bytes .../_implementation.cpython-314.pyc | Bin 11089 -> 0 bytes .../_lint_dependency_groups.cpython-314.pyc | Bin 3130 -> 0 bytes .../__pycache__/_pip_wrapper.cpython-314.pyc | Bin 3854 -> 0 bytes .../__pycache__/_toml_compat.cpython-314.pyc | Bin 512 -> 0 bytes .../dependency_groups/_implementation.py | 209 - .../_lint_dependency_groups.py | 59 - .../_vendor/dependency_groups/_pip_wrapper.py | 62 - .../_vendor/dependency_groups/_toml_compat.py | 9 - .../pip/_vendor/dependency_groups/py.typed | 0 .../pip/_vendor/distlib/LICENSE.txt | 284 - .../pip/_vendor/distlib/__init__.py | 33 - .../__pycache__/__init__.cpython-314.pyc | Bin 1452 -> 0 bytes .../__pycache__/compat.cpython-314.pyc | Bin 47131 -> 0 bytes .../__pycache__/resources.cpython-314.pyc | Bin 18048 -> 0 bytes .../__pycache__/scripts.cpython-314.pyc | Bin 20860 -> 0 bytes .../distlib/__pycache__/util.cpython-314.pyc | Bin 92768 -> 0 bytes .../pip/_vendor/distlib/compat.py | 1137 - .../pip/_vendor/distlib/resources.py | 358 - .../pip/_vendor/distlib/scripts.py | 447 - .../site-packages/pip/_vendor/distlib/t32.exe | Bin 97792 -> 0 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 182784 -> 0 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 108032 -> 0 bytes .../site-packages/pip/_vendor/distlib/util.py | 1984 - .../site-packages/pip/_vendor/distlib/w32.exe | Bin 91648 -> 0 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 168448 -> 0 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 101888 -> 0 bytes .../site-packages/pip/_vendor/distro/LICENSE | 202 - .../pip/_vendor/distro/__init__.py | 54 - .../pip/_vendor/distro/__main__.py | 4 - .../__pycache__/__init__.cpython-314.pyc | Bin 1005 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 343 -> 0 bytes .../distro/__pycache__/distro.cpython-314.pyc | Bin 61344 -> 0 bytes .../pip/_vendor/distro/distro.py | 1403 - .../site-packages/pip/_vendor/distro/py.typed | 0 .../site-packages/pip/_vendor/idna/LICENSE.md | 31 - .../pip/_vendor/idna/__init__.py | 45 - .../idna/__pycache__/__init__.cpython-314.pyc | Bin 931 -> 0 bytes .../idna/__pycache__/codec.cpython-314.pyc | Bin 6391 -> 0 bytes .../idna/__pycache__/compat.cpython-314.pyc | Bin 1382 -> 0 bytes .../idna/__pycache__/core.cpython-314.pyc | Bin 20422 -> 0 bytes .../idna/__pycache__/idnadata.cpython-314.pyc | Bin 100984 -> 0 bytes .../__pycache__/intranges.cpython-314.pyc | Bin 3458 -> 0 bytes .../__pycache__/package_data.cpython-314.pyc | Bin 262 -> 0 bytes .../__pycache__/uts46data.cpython-314.pyc | Bin 309722 -> 0 bytes .../site-packages/pip/_vendor/idna/codec.py | 122 - .../site-packages/pip/_vendor/idna/compat.py | 15 - .../site-packages/pip/_vendor/idna/core.py | 437 - .../pip/_vendor/idna/idnadata.py | 4309 -- .../pip/_vendor/idna/intranges.py | 57 - .../pip/_vendor/idna/package_data.py | 1 - .../site-packages/pip/_vendor/idna/py.typed | 0 .../pip/_vendor/idna/uts46data.py | 8841 --- .../site-packages/pip/_vendor/msgpack/COPYING | 14 - .../pip/_vendor/msgpack/__init__.py | 55 - .../__pycache__/__init__.cpython-314.pyc | Bin 1761 -> 0 bytes .../__pycache__/exceptions.cpython-314.pyc | Bin 2244 -> 0 bytes .../msgpack/__pycache__/ext.cpython-314.pyc | Bin 8332 -> 0 bytes .../__pycache__/fallback.cpython-314.pyc | Bin 42879 -> 0 bytes .../pip/_vendor/msgpack/exceptions.py | 48 - .../site-packages/pip/_vendor/msgpack/ext.py | 170 - .../pip/_vendor/msgpack/fallback.py | 929 - .../pip/_vendor/packaging/LICENSE | 3 - .../pip/_vendor/packaging/LICENSE.APACHE | 177 - .../pip/_vendor/packaging/LICENSE.BSD | 23 - .../pip/_vendor/packaging/__init__.py | 15 - .../__pycache__/__init__.cpython-314.pyc | Bin 603 -> 0 bytes .../__pycache__/_elffile.cpython-314.pyc | Bin 5666 -> 0 bytes .../__pycache__/_manylinux.cpython-314.pyc | Bin 12103 -> 0 bytes .../__pycache__/_musllinux.cpython-314.pyc | Bin 5198 -> 0 bytes .../__pycache__/_parser.cpython-314.pyc | Bin 17965 -> 0 bytes .../__pycache__/_structures.cpython-314.pyc | Bin 5636 -> 0 bytes .../__pycache__/_tokenizer.cpython-314.pyc | Bin 10048 -> 0 bytes .../__pycache__/markers.cpython-314.pyc | Bin 15918 -> 0 bytes .../__pycache__/metadata.cpython-314.pyc | Bin 37059 -> 0 bytes .../__pycache__/pylock.cpython-314.pyc | Bin 35021 -> 0 bytes .../__pycache__/requirements.cpython-314.pyc | Bin 5599 -> 0 bytes .../__pycache__/specifiers.cpython-314.pyc | Bin 47284 -> 0 bytes .../__pycache__/tags.cpython-314.pyc | Bin 30239 -> 0 bytes .../__pycache__/utils.cpython-314.pyc | Bin 7291 -> 0 bytes .../__pycache__/version.cpython-314.pyc | Bin 34289 -> 0 bytes .../pip/_vendor/packaging/_elffile.py | 108 - .../pip/_vendor/packaging/_manylinux.py | 262 - .../pip/_vendor/packaging/_musllinux.py | 85 - .../pip/_vendor/packaging/_parser.py | 365 - .../pip/_vendor/packaging/_structures.py | 69 - .../pip/_vendor/packaging/_tokenizer.py | 193 - .../_vendor/packaging/licenses/__init__.py | 147 - .../__pycache__/__init__.cpython-314.pyc | Bin 4543 -> 0 bytes .../__pycache__/_spdx.cpython-314.pyc | Bin 54763 -> 0 bytes .../pip/_vendor/packaging/licenses/_spdx.py | 799 - .../pip/_vendor/packaging/markers.py | 388 - .../pip/_vendor/packaging/metadata.py | 978 - .../pip/_vendor/packaging/py.typed | 0 .../pip/_vendor/packaging/pylock.py | 635 - .../pip/_vendor/packaging/requirements.py | 86 - .../pip/_vendor/packaging/specifiers.py | 1068 - .../pip/_vendor/packaging/tags.py | 651 - .../pip/_vendor/packaging/utils.py | 158 - .../pip/_vendor/packaging/version.py | 792 - .../pip/_vendor/pkg_resources/LICENSE | 17 - .../pip/_vendor/pkg_resources/__init__.py | 3676 - .../__pycache__/__init__.cpython-314.pyc | Bin 189619 -> 0 bytes .../pip/_vendor/platformdirs/LICENSE | 21 - .../pip/_vendor/platformdirs/__init__.py | 631 - .../pip/_vendor/platformdirs/__main__.py | 55 - .../__pycache__/__init__.cpython-314.pyc | Bin 23030 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 2129 -> 0 bytes .../__pycache__/android.cpython-314.pyc | Bin 13640 -> 0 bytes .../__pycache__/api.cpython-314.pyc | Bin 18936 -> 0 bytes .../__pycache__/macos.cpython-314.pyc | Bin 11396 -> 0 bytes .../__pycache__/unix.cpython-314.pyc | Bin 18256 -> 0 bytes .../__pycache__/version.cpython-314.pyc | Bin 1380 -> 0 bytes .../__pycache__/windows.cpython-314.pyc | Bin 17040 -> 0 bytes .../pip/_vendor/platformdirs/android.py | 249 - .../pip/_vendor/platformdirs/api.py | 299 - .../pip/_vendor/platformdirs/macos.py | 146 - .../pip/_vendor/platformdirs/py.typed | 0 .../pip/_vendor/platformdirs/unix.py | 272 - .../pip/_vendor/platformdirs/version.py | 34 - .../pip/_vendor/platformdirs/windows.py | 278 - .../pip/_vendor/pygments/LICENSE | 25 - .../pip/_vendor/pygments/__init__.py | 82 - .../pip/_vendor/pygments/__main__.py | 17 - .../__pycache__/__init__.cpython-314.pyc | Bin 3503 -> 0 bytes .../__pycache__/__main__.cpython-314.pyc | Bin 752 -> 0 bytes .../__pycache__/console.cpython-314.pyc | Bin 2855 -> 0 bytes .../__pycache__/filter.cpython-314.pyc | Bin 3353 -> 0 bytes .../__pycache__/formatter.cpython-314.pyc | Bin 4670 -> 0 bytes .../__pycache__/lexer.cpython-314.pyc | Bin 39705 -> 0 bytes .../__pycache__/modeline.cpython-314.pyc | Bin 1648 -> 0 bytes .../__pycache__/plugin.cpython-314.pyc | Bin 2603 -> 0 bytes .../__pycache__/regexopt.cpython-314.pyc | Bin 4414 -> 0 bytes .../__pycache__/scanner.cpython-314.pyc | Bin 4808 -> 0 bytes .../__pycache__/sphinxext.cpython-314.pyc | Bin 12777 -> 0 bytes .../__pycache__/style.cpython-314.pyc | Bin 7335 -> 0 bytes .../__pycache__/token.cpython-314.pyc | Bin 8385 -> 0 bytes .../__pycache__/unistring.cpython-314.pyc | Bin 33266 -> 0 bytes .../pygments/__pycache__/util.cpython-314.pyc | Bin 14578 -> 0 bytes .../pip/_vendor/pygments/console.py | 70 - .../pip/_vendor/pygments/filter.py | 70 - .../pip/_vendor/pygments/filters/__init__.py | 940 - .../__pycache__/__init__.cpython-314.pyc | Bin 38524 -> 0 bytes .../pip/_vendor/pygments/formatter.py | 129 - .../_vendor/pygments/formatters/__init__.py | 157 - .../__pycache__/__init__.cpython-314.pyc | Bin 7171 -> 0 bytes .../__pycache__/_mapping.cpython-314.pyc | Bin 4261 -> 0 bytes .../_vendor/pygments/formatters/_mapping.py | 23 - .../pip/_vendor/pygments/lexer.py | 963 - .../pip/_vendor/pygments/lexers/__init__.py | 362 - .../__pycache__/__init__.cpython-314.pyc | Bin 15279 -> 0 bytes .../__pycache__/_mapping.cpython-314.pyc | Bin 69897 -> 0 bytes .../lexers/__pycache__/python.cpython-314.pyc | Bin 50036 -> 0 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 602 - .../pip/_vendor/pygments/lexers/python.py | 1201 - .../pip/_vendor/pygments/modeline.py | 43 - .../pip/_vendor/pygments/plugin.py | 72 - .../pip/_vendor/pygments/regexopt.py | 91 - .../pip/_vendor/pygments/scanner.py | 104 - .../pip/_vendor/pygments/sphinxext.py | 247 - .../pip/_vendor/pygments/style.py | 203 - .../pip/_vendor/pygments/styles/__init__.py | 61 - .../__pycache__/__init__.cpython-314.pyc | Bin 2796 -> 0 bytes .../__pycache__/_mapping.cpython-314.pyc | Bin 3765 -> 0 bytes .../pip/_vendor/pygments/styles/_mapping.py | 54 - .../pip/_vendor/pygments/token.py | 214 - .../pip/_vendor/pygments/unistring.py | 153 - .../pip/_vendor/pygments/util.py | 324 - .../pip/_vendor/pyproject_hooks/LICENSE | 21 - .../pip/_vendor/pyproject_hooks/__init__.py | 31 - .../__pycache__/__init__.cpython-314.pyc | Bin 805 -> 0 bytes .../__pycache__/_impl.cpython-314.pyc | Bin 21748 -> 0 bytes .../pip/_vendor/pyproject_hooks/_impl.py | 410 - .../pyproject_hooks/_in_process/__init__.py | 21 - .../__pycache__/__init__.cpython-314.pyc | Bin 1128 -> 0 bytes .../__pycache__/_in_process.cpython-314.pyc | Bin 15966 -> 0 bytes .../_in_process/_in_process.py | 389 - .../pip/_vendor/pyproject_hooks/py.typed | 0 .../pip/_vendor/requests/LICENSE | 175 - .../pip/_vendor/requests/__init__.py | 179 - .../__pycache__/__init__.cpython-314.pyc | Bin 5377 -> 0 bytes .../__pycache__/__version__.cpython-314.pyc | Bin 630 -> 0 bytes .../_internal_utils.cpython-314.pyc | Bin 2064 -> 0 bytes .../__pycache__/adapters.cpython-314.pyc | Bin 27456 -> 0 bytes .../requests/__pycache__/api.cpython-314.pyc | Bin 6955 -> 0 bytes .../requests/__pycache__/auth.cpython-314.pyc | Bin 14567 -> 0 bytes .../__pycache__/certs.cpython-314.pyc | Bin 725 -> 0 bytes .../__pycache__/compat.cpython-314.pyc | Bin 2036 -> 0 bytes .../__pycache__/cookies.cpython-314.pyc | Bin 25509 -> 0 bytes .../__pycache__/exceptions.cpython-314.pyc | Bin 8069 -> 0 bytes .../requests/__pycache__/help.cpython-314.pyc | Bin 4398 -> 0 bytes .../__pycache__/hooks.cpython-314.pyc | Bin 1148 -> 0 bytes .../__pycache__/models.cpython-314.pyc | Bin 36585 -> 0 bytes .../__pycache__/packages.cpython-314.pyc | Bin 1407 -> 0 bytes .../__pycache__/sessions.cpython-314.pyc | Bin 27791 -> 0 bytes .../__pycache__/status_codes.cpython-314.pyc | Bin 6060 -> 0 bytes .../__pycache__/structures.cpython-314.pyc | Bin 5781 -> 0 bytes .../__pycache__/utils.cpython-314.pyc | Bin 37066 -> 0 bytes .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 50 - .../pip/_vendor/requests/adapters.py | 696 - .../site-packages/pip/_vendor/requests/api.py | 157 - .../pip/_vendor/requests/auth.py | 314 - .../pip/_vendor/requests/certs.py | 17 - .../pip/_vendor/requests/compat.py | 90 - .../pip/_vendor/requests/cookies.py | 561 - .../pip/_vendor/requests/exceptions.py | 151 - .../pip/_vendor/requests/help.py | 127 - .../pip/_vendor/requests/hooks.py | 33 - .../pip/_vendor/requests/models.py | 1039 - .../pip/_vendor/requests/packages.py | 25 - .../pip/_vendor/requests/sessions.py | 831 - .../pip/_vendor/requests/status_codes.py | 128 - .../pip/_vendor/requests/structures.py | 99 - .../pip/_vendor/requests/utils.py | 1086 - .../pip/_vendor/resolvelib/LICENSE | 13 - .../pip/_vendor/resolvelib/__init__.py | 27 - .../__pycache__/__init__.cpython-314.pyc | Bin 680 -> 0 bytes .../__pycache__/providers.cpython-314.pyc | Bin 10371 -> 0 bytes .../__pycache__/reporters.cpython-314.pyc | Bin 4490 -> 0 bytes .../__pycache__/structs.cpython-314.pyc | Bin 16787 -> 0 bytes .../pip/_vendor/resolvelib/providers.py | 196 - .../pip/_vendor/resolvelib/py.typed | 0 .../pip/_vendor/resolvelib/reporters.py | 55 - .../_vendor/resolvelib/resolvers/__init__.py | 27 - .../__pycache__/__init__.cpython-314.pyc | Bin 780 -> 0 bytes .../__pycache__/abstract.cpython-314.pyc | Bin 2838 -> 0 bytes .../__pycache__/criterion.cpython-314.pyc | Bin 3876 -> 0 bytes .../__pycache__/exceptions.cpython-314.pyc | Bin 5265 -> 0 bytes .../__pycache__/resolution.cpython-314.pyc | Bin 28216 -> 0 bytes .../_vendor/resolvelib/resolvers/abstract.py | 47 - .../_vendor/resolvelib/resolvers/criterion.py | 48 - .../resolvelib/resolvers/exceptions.py | 57 - .../resolvelib/resolvers/resolution.py | 627 - .../pip/_vendor/resolvelib/structs.py | 209 - .../site-packages/pip/_vendor/rich/LICENSE | 19 - .../pip/_vendor/rich/__init__.py | 177 - .../pip/_vendor/rich/__main__.py | 245 - .../rich/__pycache__/__init__.cpython-314.pyc | Bin 8438 -> 0 bytes .../rich/__pycache__/__main__.cpython-314.pyc | Bin 10412 -> 0 bytes .../__pycache__/_cell_widths.cpython-314.pyc | Bin 15893 -> 0 bytes .../__pycache__/_emoji_codes.cpython-314.pyc | Bin 206040 -> 0 bytes .../_emoji_replace.cpython-314.pyc | Bin 2176 -> 0 bytes .../_export_format.cpython-314.pyc | Bin 2395 -> 0 bytes .../__pycache__/_extension.cpython-314.pyc | Bin 726 -> 0 bytes .../rich/__pycache__/_fileno.cpython-314.pyc | Bin 1045 -> 0 bytes .../rich/__pycache__/_inspect.cpython-314.pyc | Bin 14675 -> 0 bytes .../__pycache__/_log_render.cpython-314.pyc | Bin 4931 -> 0 bytes .../rich/__pycache__/_loop.cpython-314.pyc | Bin 2569 -> 0 bytes .../__pycache__/_null_file.cpython-314.pyc | Bin 6664 -> 0 bytes .../__pycache__/_palettes.cpython-314.pyc | Bin 9438 -> 0 bytes .../rich/__pycache__/_pick.cpython-314.pyc | Bin 933 -> 0 bytes .../rich/__pycache__/_ratio.cpython-314.pyc | Bin 7688 -> 0 bytes .../__pycache__/_spinners.cpython-314.pyc | Bin 15761 -> 0 bytes .../rich/__pycache__/_stack.cpython-314.pyc | Bin 1438 -> 0 bytes .../rich/__pycache__/_timer.cpython-314.pyc | Bin 1083 -> 0 bytes .../_win32_console.cpython-314.pyc | Bin 33574 -> 0 bytes .../rich/__pycache__/_windows.cpython-314.pyc | Bin 3136 -> 0 bytes .../_windows_renderer.cpython-314.pyc | Bin 3925 -> 0 bytes .../rich/__pycache__/_wrap.cpython-314.pyc | Bin 3706 -> 0 bytes .../rich/__pycache__/abc.cpython-314.pyc | Bin 1954 -> 0 bytes .../rich/__pycache__/align.cpython-314.pyc | Bin 14985 -> 0 bytes .../rich/__pycache__/ansi.cpython-314.pyc | Bin 10269 -> 0 bytes .../rich/__pycache__/bar.cpython-314.pyc | Bin 5254 -> 0 bytes .../rich/__pycache__/box.cpython-314.pyc | Bin 14412 -> 0 bytes .../rich/__pycache__/cells.cpython-314.pyc | Bin 6489 -> 0 bytes .../rich/__pycache__/color.cpython-314.pyc | Bin 28722 -> 0 bytes .../__pycache__/color_triplet.cpython-314.pyc | Bin 2422 -> 0 bytes .../rich/__pycache__/columns.cpython-314.pyc | Bin 9863 -> 0 bytes .../rich/__pycache__/console.cpython-314.pyc | Bin 137996 -> 0 bytes .../__pycache__/constrain.cpython-314.pyc | Bin 2860 -> 0 bytes .../__pycache__/containers.cpython-314.pyc | Bin 12227 -> 0 bytes .../rich/__pycache__/control.cpython-314.pyc | Bin 13601 -> 0 bytes .../default_styles.cpython-314.pyc | Bin 10946 -> 0 bytes .../rich/__pycache__/diagnose.cpython-314.pyc | Bin 1722 -> 0 bytes .../rich/__pycache__/emoji.cpython-314.pyc | Bin 5011 -> 0 bytes .../rich/__pycache__/errors.cpython-314.pyc | Bin 2066 -> 0 bytes .../__pycache__/file_proxy.cpython-314.pyc | Bin 4725 -> 0 bytes .../rich/__pycache__/filesize.cpython-314.pyc | Bin 3758 -> 0 bytes .../__pycache__/highlighter.cpython-314.pyc | Bin 11237 -> 0 bytes .../rich/__pycache__/json.cpython-314.pyc | Bin 6601 -> 0 bytes .../rich/__pycache__/jupyter.cpython-314.pyc | Bin 6683 -> 0 bytes .../rich/__pycache__/layout.cpython-314.pyc | Bin 25340 -> 0 bytes .../rich/__pycache__/live.cpython-314.pyc | Bin 23604 -> 0 bytes .../__pycache__/live_render.cpython-314.pyc | Bin 5594 -> 0 bytes .../rich/__pycache__/logging.cpython-314.pyc | Bin 15702 -> 0 bytes .../rich/__pycache__/markup.cpython-314.pyc | Bin 11362 -> 0 bytes .../rich/__pycache__/measure.cpython-314.pyc | Bin 7497 -> 0 bytes .../rich/__pycache__/padding.cpython-314.pyc | Bin 8195 -> 0 bytes .../rich/__pycache__/pager.cpython-314.pyc | Bin 2483 -> 0 bytes .../rich/__pycache__/palette.cpython-314.pyc | Bin 6637 -> 0 bytes .../rich/__pycache__/panel.cpython-314.pyc | Bin 14547 -> 0 bytes .../rich/__pycache__/pretty.cpython-314.pyc | Bin 49615 -> 0 bytes .../rich/__pycache__/progress.cpython-314.pyc | Bin 88784 -> 0 bytes .../__pycache__/progress_bar.cpython-314.pyc | Bin 12232 -> 0 bytes .../rich/__pycache__/prompt.cpython-314.pyc | Bin 19836 -> 0 bytes .../rich/__pycache__/protocol.cpython-314.pyc | Bin 2116 -> 0 bytes .../rich/__pycache__/region.cpython-314.pyc | Bin 910 -> 0 bytes .../rich/__pycache__/repr.cpython-314.pyc | Bin 8914 -> 0 bytes .../rich/__pycache__/rule.cpython-314.pyc | Bin 7743 -> 0 bytes .../rich/__pycache__/scope.cpython-314.pyc | Bin 4467 -> 0 bytes .../rich/__pycache__/screen.cpython-314.pyc | Bin 3154 -> 0 bytes .../rich/__pycache__/segment.cpython-314.pyc | Bin 33732 -> 0 bytes .../rich/__pycache__/spinner.cpython-314.pyc | Bin 7083 -> 0 bytes .../rich/__pycache__/status.cpython-314.pyc | Bin 7685 -> 0 bytes .../rich/__pycache__/style.cpython-314.pyc | Bin 42095 -> 0 bytes .../rich/__pycache__/styled.cpython-314.pyc | Bin 2750 -> 0 bytes .../rich/__pycache__/syntax.cpython-314.pyc | Bin 46261 -> 0 bytes .../rich/__pycache__/table.cpython-314.pyc | Bin 51605 -> 0 bytes .../terminal_theme.cpython-314.pyc | Bin 3721 -> 0 bytes .../rich/__pycache__/text.cpython-314.pyc | Bin 73108 -> 0 bytes .../rich/__pycache__/theme.cpython-314.pyc | Bin 7837 -> 0 bytes .../rich/__pycache__/themes.cpython-314.pyc | Bin 360 -> 0 bytes .../__pycache__/traceback.cpython-314.pyc | Bin 42713 -> 0 bytes .../rich/__pycache__/tree.cpython-314.pyc | Bin 13260 -> 0 bytes .../pip/_vendor/rich/_cell_widths.py | 454 - .../pip/_vendor/rich/_emoji_codes.py | 3610 - .../pip/_vendor/rich/_emoji_replace.py | 32 - .../pip/_vendor/rich/_export_format.py | 76 - .../pip/_vendor/rich/_extension.py | 10 - .../site-packages/pip/_vendor/rich/_fileno.py | 24 - .../pip/_vendor/rich/_inspect.py | 268 - .../pip/_vendor/rich/_log_render.py | 94 - .../site-packages/pip/_vendor/rich/_loop.py | 43 - .../pip/_vendor/rich/_null_file.py | 69 - .../pip/_vendor/rich/_palettes.py | 309 - .../site-packages/pip/_vendor/rich/_pick.py | 17 - .../site-packages/pip/_vendor/rich/_ratio.py | 153 - .../pip/_vendor/rich/_spinners.py | 482 - .../site-packages/pip/_vendor/rich/_stack.py | 16 - .../site-packages/pip/_vendor/rich/_timer.py | 19 - .../pip/_vendor/rich/_win32_console.py | 661 - .../pip/_vendor/rich/_windows.py | 71 - .../pip/_vendor/rich/_windows_renderer.py | 56 - .../site-packages/pip/_vendor/rich/_wrap.py | 93 - .../Lib/site-packages/pip/_vendor/rich/abc.py | 33 - .../site-packages/pip/_vendor/rich/align.py | 306 - .../site-packages/pip/_vendor/rich/ansi.py | 241 - .../Lib/site-packages/pip/_vendor/rich/bar.py | 93 - .../Lib/site-packages/pip/_vendor/rich/box.py | 474 - .../site-packages/pip/_vendor/rich/cells.py | 174 - .../site-packages/pip/_vendor/rich/color.py | 621 - .../pip/_vendor/rich/color_triplet.py | 38 - .../site-packages/pip/_vendor/rich/columns.py | 187 - .../site-packages/pip/_vendor/rich/console.py | 2680 - .../pip/_vendor/rich/constrain.py | 37 - .../pip/_vendor/rich/containers.py | 167 - .../site-packages/pip/_vendor/rich/control.py | 219 - .../pip/_vendor/rich/default_styles.py | 193 - .../pip/_vendor/rich/diagnose.py | 39 - .../site-packages/pip/_vendor/rich/emoji.py | 91 - .../site-packages/pip/_vendor/rich/errors.py | 34 - .../pip/_vendor/rich/file_proxy.py | 57 - .../pip/_vendor/rich/filesize.py | 88 - .../pip/_vendor/rich/highlighter.py | 232 - .../site-packages/pip/_vendor/rich/json.py | 139 - .../site-packages/pip/_vendor/rich/jupyter.py | 101 - .../site-packages/pip/_vendor/rich/layout.py | 442 - .../site-packages/pip/_vendor/rich/live.py | 400 - .../pip/_vendor/rich/live_render.py | 106 - .../site-packages/pip/_vendor/rich/logging.py | 297 - .../site-packages/pip/_vendor/rich/markup.py | 251 - .../site-packages/pip/_vendor/rich/measure.py | 151 - .../site-packages/pip/_vendor/rich/padding.py | 141 - .../site-packages/pip/_vendor/rich/pager.py | 34 - .../site-packages/pip/_vendor/rich/palette.py | 100 - .../site-packages/pip/_vendor/rich/panel.py | 317 - .../site-packages/pip/_vendor/rich/pretty.py | 1016 - .../pip/_vendor/rich/progress.py | 1715 - .../pip/_vendor/rich/progress_bar.py | 223 - .../site-packages/pip/_vendor/rich/prompt.py | 400 - .../pip/_vendor/rich/protocol.py | 42 - .../site-packages/pip/_vendor/rich/py.typed | 0 .../site-packages/pip/_vendor/rich/region.py | 10 - .../site-packages/pip/_vendor/rich/repr.py | 149 - .../site-packages/pip/_vendor/rich/rule.py | 130 - .../site-packages/pip/_vendor/rich/scope.py | 86 - .../site-packages/pip/_vendor/rich/screen.py | 54 - .../site-packages/pip/_vendor/rich/segment.py | 752 - .../site-packages/pip/_vendor/rich/spinner.py | 132 - .../site-packages/pip/_vendor/rich/status.py | 131 - .../site-packages/pip/_vendor/rich/style.py | 792 - .../site-packages/pip/_vendor/rich/styled.py | 42 - .../site-packages/pip/_vendor/rich/syntax.py | 985 - .../site-packages/pip/_vendor/rich/table.py | 1006 - .../pip/_vendor/rich/terminal_theme.py | 153 - .../site-packages/pip/_vendor/rich/text.py | 1361 - .../site-packages/pip/_vendor/rich/theme.py | 115 - .../site-packages/pip/_vendor/rich/themes.py | 5 - .../pip/_vendor/rich/traceback.py | 899 - .../site-packages/pip/_vendor/rich/tree.py | 257 - .../site-packages/pip/_vendor/tomli/LICENSE | 21 - .../pip/_vendor/tomli/__init__.py | 8 - .../__pycache__/__init__.cpython-314.pyc | Bin 384 -> 0 bytes .../tomli/__pycache__/_parser.cpython-314.pyc | Bin 35905 -> 0 bytes .../tomli/__pycache__/_re.cpython-314.pyc | Bin 4786 -> 0 bytes .../tomli/__pycache__/_types.cpython-314.pyc | Bin 428 -> 0 bytes .../pip/_vendor/tomli/_parser.py | 777 - .../site-packages/pip/_vendor/tomli/_re.py | 115 - .../site-packages/pip/_vendor/tomli/_types.py | 10 - .../site-packages/pip/_vendor/tomli/py.typed | 1 - .../site-packages/pip/_vendor/tomli_w/LICENSE | 21 - .../pip/_vendor/tomli_w/__init__.py | 4 - .../__pycache__/__init__.cpython-314.pyc | Bin 373 -> 0 bytes .../__pycache__/_writer.cpython-314.pyc | Bin 13183 -> 0 bytes .../pip/_vendor/tomli_w/_writer.py | 229 - .../pip/_vendor/tomli_w/py.typed | 1 - .../pip/_vendor/truststore/LICENSE | 21 - .../pip/_vendor/truststore/__init__.py | 36 - .../__pycache__/__init__.cpython-314.pyc | Bin 1505 -> 0 bytes .../__pycache__/_api.cpython-314.pyc | Bin 24656 -> 0 bytes .../__pycache__/_macos.cpython-314.pyc | Bin 21103 -> 0 bytes .../__pycache__/_openssl.cpython-314.pyc | Bin 2902 -> 0 bytes .../_ssl_constants.cpython-314.pyc | Bin 1580 -> 0 bytes .../__pycache__/_windows.cpython-314.pyc | Bin 17453 -> 0 bytes .../pip/_vendor/truststore/_api.py | 341 - .../pip/_vendor/truststore/_macos.py | 571 - .../pip/_vendor/truststore/_openssl.py | 68 - .../pip/_vendor/truststore/_ssl_constants.py | 31 - .../pip/_vendor/truststore/_windows.py | 567 - .../pip/_vendor/truststore/py.typed | 0 .../pip/_vendor/urllib3/LICENSE.txt | 21 - .../pip/_vendor/urllib3/__init__.py | 102 - .../__pycache__/__init__.cpython-314.pyc | Bin 3418 -> 0 bytes .../__pycache__/_collections.cpython-314.pyc | Bin 16971 -> 0 bytes .../__pycache__/_version.cpython-314.pyc | Bin 264 -> 0 bytes .../__pycache__/connection.cpython-314.pyc | Bin 21167 -> 0 bytes .../connectionpool.cpython-314.pyc | Bin 36923 -> 0 bytes .../__pycache__/exceptions.cpython-314.pyc | Bin 14432 -> 0 bytes .../__pycache__/fields.cpython-314.pyc | Bin 10442 -> 0 bytes .../__pycache__/filepost.cpython-314.pyc | Bin 4078 -> 0 bytes .../__pycache__/poolmanager.cpython-314.pyc | Bin 20397 -> 0 bytes .../__pycache__/request.cpython-314.pyc | Bin 7126 -> 0 bytes .../__pycache__/response.cpython-314.pyc | Bin 35025 -> 0 bytes .../pip/_vendor/urllib3/_collections.py | 355 - .../pip/_vendor/urllib3/_version.py | 2 - .../pip/_vendor/urllib3/connection.py | 572 - .../pip/_vendor/urllib3/connectionpool.py | 1140 - .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 244 -> 0 bytes .../_appengine_environ.cpython-314.pyc | Bin 1949 -> 0 bytes .../__pycache__/appengine.cpython-314.pyc | Bin 12080 -> 0 bytes .../__pycache__/ntlmpool.cpython-314.pyc | Bin 5878 -> 0 bytes .../__pycache__/pyopenssl.cpython-314.pyc | Bin 25213 -> 0 bytes .../securetransport.cpython-314.pyc | Bin 36604 -> 0 bytes .../contrib/__pycache__/socks.cpython-314.pyc | Bin 7996 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 36 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 261 -> 0 bytes .../__pycache__/bindings.cpython-314.pyc | Bin 17486 -> 0 bytes .../__pycache__/low_level.cpython-314.pyc | Bin 15004 -> 0 bytes .../contrib/_securetransport/bindings.py | 519 - .../contrib/_securetransport/low_level.py | 397 - .../pip/_vendor/urllib3/contrib/appengine.py | 314 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 - .../urllib3/contrib/securetransport.py | 920 - .../pip/_vendor/urllib3/contrib/socks.py | 216 - .../pip/_vendor/urllib3/exceptions.py | 323 - .../pip/_vendor/urllib3/fields.py | 274 - .../pip/_vendor/urllib3/filepost.py | 98 - .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 245 -> 0 bytes .../packages/__pycache__/six.cpython-314.pyc | Bin 42934 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 255 -> 0 bytes .../__pycache__/makefile.cpython-314.pyc | Bin 2012 -> 0 bytes .../weakref_finalize.cpython-314.pyc | Bin 7756 -> 0 bytes .../urllib3/packages/backports/makefile.py | 51 - .../packages/backports/weakref_finalize.py | 155 - .../pip/_vendor/urllib3/packages/six.py | 1076 - .../pip/_vendor/urllib3/poolmanager.py | 540 - .../pip/_vendor/urllib3/request.py | 191 - .../pip/_vendor/urllib3/response.py | 879 - .../pip/_vendor/urllib3/util/__init__.py | 49 - .../util/__pycache__/__init__.cpython-314.pyc | Bin 1187 -> 0 bytes .../__pycache__/connection.cpython-314.pyc | Bin 4876 -> 0 bytes .../util/__pycache__/proxy.cpython-314.pyc | Bin 1640 -> 0 bytes .../util/__pycache__/queue.cpython-314.pyc | Bin 1520 -> 0 bytes .../util/__pycache__/request.cpython-314.pyc | Bin 4209 -> 0 bytes .../util/__pycache__/response.cpython-314.pyc | Bin 3111 -> 0 bytes .../util/__pycache__/retry.cpython-314.pyc | Bin 21922 -> 0 bytes .../util/__pycache__/ssl_.cpython-314.pyc | Bin 15801 -> 0 bytes .../ssl_match_hostname.cpython-314.pyc | Bin 5361 -> 0 bytes .../__pycache__/ssltransport.cpython-314.pyc | Bin 11150 -> 0 bytes .../util/__pycache__/timeout.cpython-314.pyc | Bin 10828 -> 0 bytes .../util/__pycache__/url.cpython-314.pyc | Bin 16709 -> 0 bytes .../util/__pycache__/wait.cpython-314.pyc | Bin 4717 -> 0 bytes .../pip/_vendor/urllib3/util/connection.py | 149 - .../pip/_vendor/urllib3/util/proxy.py | 57 - .../pip/_vendor/urllib3/util/queue.py | 22 - .../pip/_vendor/urllib3/util/request.py | 137 - .../pip/_vendor/urllib3/util/response.py | 107 - .../pip/_vendor/urllib3/util/retry.py | 622 - .../pip/_vendor/urllib3/util/ssl_.py | 504 - .../urllib3/util/ssl_match_hostname.py | 159 - .../pip/_vendor/urllib3/util/ssltransport.py | 221 - .../pip/_vendor/urllib3/util/timeout.py | 271 - .../pip/_vendor/urllib3/util/url.py | 435 - .../pip/_vendor/urllib3/util/wait.py | 152 - .../Lib/site-packages/pip/_vendor/vendor.txt | 19 - .../Lib/site-packages/pip/py.typed | 4 - Python314_4_x86_Template/Lib/site.py | 779 - Python314_4_x86_Template/Lib/smtplib.py | 1121 - Python314_4_x86_Template/Lib/socket.py | 988 - Python314_4_x86_Template/Lib/socketserver.py | 863 - .../Lib/sqlite3/__init__.py | 57 - .../Lib/sqlite3/__main__.py | 139 - .../Lib/sqlite3/dbapi2.py | 96 - Python314_4_x86_Template/Lib/sqlite3/dump.py | 113 - Python314_4_x86_Template/Lib/sre_compile.py | 7 - Python314_4_x86_Template/Lib/sre_constants.py | 7 - Python314_4_x86_Template/Lib/sre_parse.py | 7 - Python314_4_x86_Template/Lib/ssl.py | 1529 - Python314_4_x86_Template/Lib/stat.py | 212 - Python314_4_x86_Template/Lib/statistics.py | 1879 - .../Lib/string/__init__.py | 325 - .../__pycache__/__init__.cpython-314.pyc | Bin 12944 -> 0 bytes .../Lib/string/templatelib.py | 33 - Python314_4_x86_Template/Lib/stringprep.py | 272 - Python314_4_x86_Template/Lib/struct.py | 15 - Python314_4_x86_Template/Lib/subprocess.py | 2257 - Python314_4_x86_Template/Lib/symtable.py | 451 - .../Lib/sysconfig/__init__.py | 797 - .../Lib/sysconfig/__main__.py | 276 - .../__pycache__/__init__.cpython-314.pyc | Bin 28668 -> 0 bytes Python314_4_x86_Template/Lib/tabnanny.py | 338 - Python314_4_x86_Template/Lib/tarfile.py | 3157 - Python314_4_x86_Template/Lib/tempfile.py | 977 - Python314_4_x86_Template/Lib/textwrap.py | 475 - Python314_4_x86_Template/Lib/this.py | 28 - Python314_4_x86_Template/Lib/threading.py | 1642 - Python314_4_x86_Template/Lib/timeit.py | 378 - Python314_4_x86_Template/Lib/token.py | 144 - Python314_4_x86_Template/Lib/tokenize.py | 598 - .../Lib/tomllib/__init__.py | 10 - .../__pycache__/__init__.cpython-314.pyc | Bin 377 -> 0 bytes .../__pycache__/_parser.cpython-314.pyc | Bin 34939 -> 0 bytes .../tomllib/__pycache__/_re.cpython-314.pyc | Bin 4589 -> 0 bytes .../Lib/tomllib/_parser.py | 753 - Python314_4_x86_Template/Lib/tomllib/_re.py | 113 - .../Lib/tomllib/_types.py | 10 - Python314_4_x86_Template/Lib/tomllib/mypy.ini | 17 - Python314_4_x86_Template/Lib/trace.py | 751 - Python314_4_x86_Template/Lib/traceback.py | 1745 - Python314_4_x86_Template/Lib/tracemalloc.py | 560 - Python314_4_x86_Template/Lib/tty.py | 73 - Python314_4_x86_Template/Lib/types.py | 344 - Python314_4_x86_Template/Lib/typing.py | 3854 -- .../Lib/unittest/__init__.py | 80 - .../Lib/unittest/__main__.py | 18 - Python314_4_x86_Template/Lib/unittest/_log.py | 86 - .../Lib/unittest/async_case.py | 158 - Python314_4_x86_Template/Lib/unittest/case.py | 1628 - .../Lib/unittest/loader.py | 484 - Python314_4_x86_Template/Lib/unittest/main.py | 280 - Python314_4_x86_Template/Lib/unittest/mock.py | 3204 - .../Lib/unittest/result.py | 259 - .../Lib/unittest/runner.py | 313 - .../Lib/unittest/signals.py | 71 - .../Lib/unittest/suite.py | 379 - Python314_4_x86_Template/Lib/unittest/util.py | 170 - .../Lib/urllib/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 209 -> 0 bytes .../urllib/__pycache__/error.cpython-314.pyc | Bin 3924 -> 0 bytes .../urllib/__pycache__/parse.cpython-314.pyc | Bin 53665 -> 0 bytes .../__pycache__/request.cpython-314.pyc | Bin 91331 -> 0 bytes .../__pycache__/response.cpython-314.pyc | Bin 4770 -> 0 bytes Python314_4_x86_Template/Lib/urllib/error.py | 74 - Python314_4_x86_Template/Lib/urllib/parse.py | 1289 - .../Lib/urllib/request.py | 2163 - .../Lib/urllib/response.py | 84 - .../Lib/urllib/robotparser.py | 288 - Python314_4_x86_Template/Lib/uuid.py | 1007 - Python314_4_x86_Template/Lib/venv/__init__.py | 700 - Python314_4_x86_Template/Lib/venv/__main__.py | 10 - .../Lib/venv/scripts/common/Activate.ps1 | 547 - .../Lib/venv/scripts/common/activate | 76 - .../Lib/venv/scripts/common/activate.fish | 69 - .../Lib/venv/scripts/nt/activate.bat | 34 - .../Lib/venv/scripts/nt/deactivate.bat | 22 - .../Lib/venv/scripts/nt/venvlauncher.exe | Bin 230232 -> 0 bytes .../Lib/venv/scripts/nt/venvwlauncher.exe | Bin 226648 -> 0 bytes .../Lib/venv/scripts/posix/activate.csh | 27 - Python314_4_x86_Template/Lib/warnings.py | 99 - Python314_4_x86_Template/Lib/wave.py | 665 - Python314_4_x86_Template/Lib/weakref.py | 574 - Python314_4_x86_Template/Lib/webbrowser.py | 762 - .../Lib/wsgiref/__init__.py | 25 - .../Lib/wsgiref/handlers.py | 575 - .../Lib/wsgiref/headers.py | 192 - .../Lib/wsgiref/simple_server.py | 161 - Python314_4_x86_Template/Lib/wsgiref/types.py | 54 - Python314_4_x86_Template/Lib/wsgiref/util.py | 159 - .../Lib/wsgiref/validate.py | 438 - Python314_4_x86_Template/Lib/xml/__init__.py | 20 - .../xml/__pycache__/__init__.cpython-314.pyc | Bin 781 -> 0 bytes .../Lib/xml/dom/NodeFilter.py | 27 - .../Lib/xml/dom/__init__.py | 140 - .../Lib/xml/dom/domreg.py | 99 - .../Lib/xml/dom/expatbuilder.py | 962 - .../Lib/xml/dom/minicompat.py | 109 - .../Lib/xml/dom/minidom.py | 2024 - .../Lib/xml/dom/pulldom.py | 336 - .../Lib/xml/dom/xmlbuilder.py | 389 - .../Lib/xml/etree/ElementInclude.py | 186 - .../Lib/xml/etree/ElementPath.py | 423 - .../Lib/xml/etree/ElementTree.py | 2102 - .../Lib/xml/etree/__init__.py | 33 - .../Lib/xml/etree/cElementTree.py | 3 - .../Lib/xml/parsers/__init__.py | 8 - .../__pycache__/__init__.cpython-314.pyc | Bin 391 -> 0 bytes .../parsers/__pycache__/expat.cpython-314.pyc | Bin 485 -> 0 bytes .../Lib/xml/parsers/expat.py | 8 - .../Lib/xml/sax/__init__.py | 100 - .../Lib/xml/sax/_exceptions.py | 127 - .../Lib/xml/sax/expatreader.py | 454 - .../Lib/xml/sax/handler.py | 387 - .../Lib/xml/sax/saxutils.py | 369 - .../Lib/xml/sax/xmlreader.py | 378 - .../Lib/xmlrpc/__init__.py | 1 - .../__pycache__/__init__.cpython-314.pyc | Bin 209 -> 0 bytes .../xmlrpc/__pycache__/client.cpython-314.pyc | Bin 53178 -> 0 bytes Python314_4_x86_Template/Lib/xmlrpc/client.py | 1503 - Python314_4_x86_Template/Lib/xmlrpc/server.py | 1003 - Python314_4_x86_Template/Lib/zipapp.py | 231 - .../Lib/zipfile/__init__.py | 2435 - .../Lib/zipfile/__main__.py | 4 - .../__pycache__/__init__.cpython-314.pyc | Bin 110775 -> 0 bytes .../Lib/zipfile/_path/__init__.py | 452 - .../__pycache__/__init__.cpython-314.pyc | Bin 20693 -> 0 bytes .../_path/__pycache__/glob.cpython-314.pyc | Bin 5918 -> 0 bytes .../Lib/zipfile/_path/glob.py | 113 - Python314_4_x86_Template/Lib/zipimport.py | 822 - .../Lib/zoneinfo/__init__.py | 34 - .../Lib/zoneinfo/_common.py | 172 - .../Lib/zoneinfo/_tzpath.py | 189 - .../Lib/zoneinfo/_zoneinfo.py | 776 - Python314_4_x86_Template/NEWS.txt | 55267 ---------------- Python314_4_x86_Template/Scripts/pip.exe | Bin 98163 -> 0 bytes Python314_4_x86_Template/Scripts/pip3.14.exe | Bin 98163 -> 0 bytes Python314_4_x86_Template/Scripts/pip3.exe | Bin 98163 -> 0 bytes Python314_4_x86_Template/include/Python.h | 155 - Python314_4_x86_Template/include/abstract.h | 915 - Python314_4_x86_Template/include/audit.h | 30 - .../include/bltinmodule.h | 14 - Python314_4_x86_Template/include/boolobject.h | 54 - .../include/bytearrayobject.h | 44 - .../include/bytesobject.h | 66 - Python314_4_x86_Template/include/ceval.h | 145 - Python314_4_x86_Template/include/codecs.h | 176 - Python314_4_x86_Template/include/compile.h | 22 - .../include/complexobject.h | 30 - .../include/cpython/abstract.h | 104 - .../include/cpython/audit.h | 8 - .../include/cpython/bytearrayobject.h | 38 - .../include/cpython/bytesobject.h | 42 - .../include/cpython/cellobject.h | 50 - .../include/cpython/ceval.h | 43 - .../include/cpython/classobject.h | 71 - .../include/cpython/code.h | 340 - .../include/cpython/compile.h | 50 - .../include/cpython/complexobject.h | 33 - .../include/cpython/context.h | 107 - .../include/cpython/critical_section.h | 154 - .../include/cpython/descrobject.h | 62 - .../include/cpython/dictobject.h | 105 - .../include/cpython/fileobject.h | 16 - .../include/cpython/fileutils.h | 16 - .../include/cpython/floatobject.h | 27 - .../include/cpython/frameobject.h | 35 - .../include/cpython/funcobject.h | 185 - .../include/cpython/genobject.h | 56 - .../include/cpython/import.h | 30 - .../include/cpython/initconfig.h | 334 - .../include/cpython/listobject.h | 53 - .../include/cpython/lock.h | 74 - .../include/cpython/longintrepr.h | 184 - .../include/cpython/longobject.h | 89 - .../include/cpython/memoryobject.h | 50 - .../include/cpython/methodobject.h | 66 - .../include/cpython/modsupport.h | 26 - .../include/cpython/monitoring.h | 269 - .../include/cpython/object.h | 493 - .../include/cpython/objimpl.h | 104 - .../include/cpython/odictobject.h | 43 - .../include/cpython/picklebufobject.h | 31 - .../include/cpython/pthread_stubs.h | 105 - .../include/cpython/pyatomic.h | 628 - .../include/cpython/pyatomic_gcc.h | 619 - .../include/cpython/pyatomic_msc.h | 1204 - .../include/cpython/pyatomic_std.h | 1112 - .../include/cpython/pyctype.h | 39 - .../include/cpython/pydebug.h | 38 - .../include/cpython/pyerrors.h | 133 - .../include/cpython/pyfpe.h | 15 - .../include/cpython/pyframe.h | 45 - .../include/cpython/pyhash.h | 54 - .../include/cpython/pylifecycle.h | 89 - .../include/cpython/pymem.h | 84 - .../include/cpython/pystate.h | 277 - .../include/cpython/pystats.h | 194 - .../include/cpython/pythonrun.h | 96 - .../include/cpython/pythread.h | 43 - .../include/cpython/pytime.h | 27 - .../include/cpython/setobject.h | 71 - .../include/cpython/traceback.h | 13 - .../include/cpython/tracemalloc.h | 32 - .../include/cpython/tupleobject.h | 40 - .../include/cpython/unicodeobject.h | 773 - .../include/cpython/warnings.h | 20 - .../include/cpython/weakrefobject.h | 66 - .../include/critical_section.h | 16 - Python314_4_x86_Template/include/datetime.h | 267 - .../include/descrobject.h | 100 - Python314_4_x86_Template/include/dictobject.h | 108 - .../include/dynamic_annotations.h | 499 - Python314_4_x86_Template/include/enumobject.h | 17 - Python314_4_x86_Template/include/errcode.h | 45 - Python314_4_x86_Template/include/exports.h | 105 - Python314_4_x86_Template/include/fileobject.h | 41 - Python314_4_x86_Template/include/fileutils.h | 62 - .../include/floatobject.h | 54 - .../include/frameobject.h | 20 - .../include/genericaliasobject.h | 14 - Python314_4_x86_Template/include/import.h | 103 - .../include/internal/mimalloc/mimalloc.h | 565 - .../internal/mimalloc/mimalloc/atomic.h | 392 - .../internal/mimalloc/mimalloc/internal.h | 969 - .../include/internal/mimalloc/mimalloc/prim.h | 329 - .../internal/mimalloc/mimalloc/track.h | 147 - .../internal/mimalloc/mimalloc/types.h | 721 - .../include/internal/pycore_abstract.h | 61 - .../include/internal/pycore_asdl.h | 112 - .../include/internal/pycore_ast.h | 945 - .../include/internal/pycore_ast_state.h | 271 - .../include/internal/pycore_atexit.h | 31 - .../include/internal/pycore_audit.h | 35 - .../include/internal/pycore_backoff.h | 133 - .../include/internal/pycore_bitutils.h | 186 - .../internal/pycore_blocks_output_buffer.h | 321 - .../include/internal/pycore_brc.h | 73 - .../include/internal/pycore_bytes_methods.h | 82 - .../include/internal/pycore_bytesobject.h | 149 - .../include/internal/pycore_c_array.h | 39 - .../include/internal/pycore_call.h | 214 - .../include/internal/pycore_capsule.h | 17 - .../include/internal/pycore_cell.h | 75 - .../include/internal/pycore_ceval.h | 394 - .../include/internal/pycore_ceval_state.h | 48 - .../include/internal/pycore_code.h | 671 - .../include/internal/pycore_codecs.h | 76 - .../include/internal/pycore_compile.h | 230 - .../include/internal/pycore_complexobject.h | 34 - .../include/internal/pycore_condvar.h | 93 - .../include/internal/pycore_context.h | 59 - .../internal/pycore_critical_section.h | 237 - .../include/internal/pycore_crossinterp.h | 406 - .../pycore_crossinterp_data_registry.h | 41 - .../include/internal/pycore_debug_offsets.h | 379 - .../include/internal/pycore_descrobject.h | 28 - .../include/internal/pycore_dict.h | 412 - .../include/internal/pycore_dict_state.h | 28 - .../include/internal/pycore_dtoa.h | 40 - .../internal/pycore_emscripten_signal.h | 30 - .../internal/pycore_emscripten_trampoline.h | 67 - .../include/internal/pycore_exceptions.h | 40 - .../include/internal/pycore_faulthandler.h | 100 - .../include/internal/pycore_fileutils.h | 320 - .../internal/pycore_fileutils_windows.h | 98 - .../include/internal/pycore_floatobject.h | 49 - .../include/internal/pycore_flowgraph.h | 47 - .../include/internal/pycore_format.h | 27 - .../include/internal/pycore_frame.h | 61 - .../include/internal/pycore_freelist.h | 111 - .../include/internal/pycore_freelist_state.h | 70 - .../include/internal/pycore_function.h | 64 - .../include/internal/pycore_gc.h | 378 - .../include/internal/pycore_genobject.h | 43 - .../include/internal/pycore_getopt.h | 22 - .../include/internal/pycore_gil.h | 66 - .../include/internal/pycore_global_objects.h | 34 - .../pycore_global_objects_fini_generated.h | 1592 - .../include/internal/pycore_global_strings.h | 854 - .../include/internal/pycore_hamt.h | 113 - .../include/internal/pycore_hashtable.h | 150 - .../include/internal/pycore_import.h | 141 - .../include/internal/pycore_importdl.h | 139 - .../include/internal/pycore_index_pool.h | 36 - .../include/internal/pycore_initconfig.h | 197 - .../internal/pycore_instruction_sequence.h | 83 - .../include/internal/pycore_instruments.h | 127 - .../include/internal/pycore_interp.h | 109 - .../include/internal/pycore_interp_structs.h | 980 - .../include/internal/pycore_interpframe.h | 406 - .../internal/pycore_interpframe_structs.h | 95 - .../include/internal/pycore_interpolation.h | 26 - .../include/internal/pycore_intrinsics.h | 51 - .../include/internal/pycore_jit.h | 29 - .../include/internal/pycore_list.h | 81 - .../include/internal/pycore_llist.h | 106 - .../include/internal/pycore_lock.h | 236 - .../include/internal/pycore_long.h | 336 - .../include/internal/pycore_magic_number.h | 305 - .../include/internal/pycore_memoryobject.h | 20 - .../include/internal/pycore_mimalloc.h | 69 - .../include/internal/pycore_modsupport.h | 99 - .../include/internal/pycore_moduleobject.h | 62 - .../include/internal/pycore_namespace.h | 21 - .../include/internal/pycore_object.h | 1032 - .../include/internal/pycore_object_alloc.h | 71 - .../include/internal/pycore_object_deferred.h | 32 - .../include/internal/pycore_object_stack.h | 95 - .../include/internal/pycore_object_state.h | 49 - .../include/internal/pycore_obmalloc.h | 702 - .../include/internal/pycore_obmalloc_init.h | 66 - .../include/internal/pycore_opcode_metadata.h | 2117 - .../include/internal/pycore_opcode_utils.h | 90 - .../include/internal/pycore_optimizer.h | 318 - .../include/internal/pycore_parking_lot.h | 97 - .../include/internal/pycore_parser.h | 78 - .../include/internal/pycore_pathconfig.h | 26 - .../include/internal/pycore_pyarena.h | 68 - .../internal/pycore_pyatomic_ft_wrappers.h | 187 - .../include/internal/pycore_pybuffer.h | 21 - .../include/internal/pycore_pyerrors.h | 213 - .../include/internal/pycore_pyhash.h | 91 - .../include/internal/pycore_pylifecycle.h | 136 - .../include/internal/pycore_pymath.h | 205 - .../include/internal/pycore_pymem.h | 145 - .../include/internal/pycore_pymem_init.h | 103 - .../include/internal/pycore_pystate.h | 339 - .../include/internal/pycore_pystats.h | 21 - .../include/internal/pycore_pythonrun.h | 68 - .../include/internal/pycore_pythread.h | 172 - .../include/internal/pycore_qsbr.h | 173 - .../include/internal/pycore_range.h | 21 - .../include/internal/pycore_runtime.h | 63 - .../include/internal/pycore_runtime_init.h | 239 - .../internal/pycore_runtime_init_generated.h | 1589 - .../include/internal/pycore_runtime_structs.h | 320 - .../include/internal/pycore_semaphore.h | 67 - .../include/internal/pycore_setobject.h | 41 - .../include/internal/pycore_signal.h | 108 - .../include/internal/pycore_sliceobject.h | 20 - .../include/internal/pycore_stackref.h | 838 - .../include/internal/pycore_stats.h | 97 - .../include/internal/pycore_strhex.h | 39 - .../include/internal/pycore_structs.h | 88 - .../include/internal/pycore_structseq.h | 40 - .../include/internal/pycore_symtable.h | 201 - .../include/internal/pycore_sysmodule.h | 32 - .../include/internal/pycore_template.h | 26 - .../include/internal/pycore_time.h | 334 - .../include/internal/pycore_token.h | 110 - .../include/internal/pycore_traceback.h | 111 - .../include/internal/pycore_tracemalloc.h | 167 - .../include/internal/pycore_tstate.h | 93 - .../include/internal/pycore_tuple.h | 75 - .../include/internal/pycore_typedefs.h | 18 - .../include/internal/pycore_typeobject.h | 160 - .../include/internal/pycore_typevarobject.h | 28 - .../include/internal/pycore_ucnhash.h | 36 - .../include/internal/pycore_unicodeobject.h | 308 - .../internal/pycore_unicodeobject_generated.h | 3132 - .../include/internal/pycore_unionobject.h | 26 - .../include/internal/pycore_uniqueid.h | 57 - .../include/internal/pycore_uop_ids.h | 335 - .../include/internal/pycore_uop_metadata.h | 1204 - .../include/internal/pycore_warnings.h | 21 - .../include/internal/pycore_weakref.h | 133 - Python314_4_x86_Template/include/intrcheck.h | 23 - Python314_4_x86_Template/include/iterobject.h | 24 - Python314_4_x86_Template/include/listobject.h | 55 - Python314_4_x86_Template/include/lock.h | 16 - Python314_4_x86_Template/include/longobject.h | 178 - Python314_4_x86_Template/include/marshal.h | 31 - .../include/memoryobject.h | 34 - .../include/methodobject.h | 146 - Python314_4_x86_Template/include/modsupport.h | 146 - .../include/moduleobject.h | 122 - Python314_4_x86_Template/include/monitoring.h | 18 - Python314_4_x86_Template/include/object.h | 828 - Python314_4_x86_Template/include/objimpl.h | 211 - Python314_4_x86_Template/include/opcode.h | 43 - Python314_4_x86_Template/include/opcode_ids.h | 259 - Python314_4_x86_Template/include/osdefs.h | 57 - Python314_4_x86_Template/include/osmodule.h | 17 - Python314_4_x86_Template/include/patchlevel.h | 49 - Python314_4_x86_Template/include/py_curses.h | 117 - Python314_4_x86_Template/include/pyatomic.h | 16 - Python314_4_x86_Template/include/pybuffer.h | 145 - Python314_4_x86_Template/include/pycapsule.h | 58 - Python314_4_x86_Template/include/pyconfig.h | 768 - Python314_4_x86_Template/include/pydtrace.h | 59 - Python314_4_x86_Template/include/pyerrors.h | 335 - Python314_4_x86_Template/include/pyexpat.h | 62 - Python314_4_x86_Template/include/pyframe.h | 26 - Python314_4_x86_Template/include/pyhash.h | 59 - .../include/pylifecycle.h | 80 - .../include/pymacconfig.h | 91 - Python314_4_x86_Template/include/pymacro.h | 249 - Python314_4_x86_Template/include/pymath.h | 65 - Python314_4_x86_Template/include/pymem.h | 110 - Python314_4_x86_Template/include/pyport.h | 710 - Python314_4_x86_Template/include/pystate.h | 132 - Python314_4_x86_Template/include/pystats.h | 28 - Python314_4_x86_Template/include/pystrcmp.h | 23 - Python314_4_x86_Template/include/pystrtod.h | 37 - Python314_4_x86_Template/include/pythonrun.h | 42 - Python314_4_x86_Template/include/pythread.h | 131 - Python314_4_x86_Template/include/pytypedefs.h | 30 - .../include/rangeobject.h | 27 - Python314_4_x86_Template/include/refcount.h | 555 - Python314_4_x86_Template/include/setobject.h | 49 - .../include/sliceobject.h | 69 - .../include/structmember.h | 56 - Python314_4_x86_Template/include/structseq.h | 46 - Python314_4_x86_Template/include/sysmodule.h | 27 - Python314_4_x86_Template/include/traceback.h | 26 - .../include/tupleobject.h | 46 - Python314_4_x86_Template/include/typeslots.h | 96 - .../include/unicodeobject.h | 1029 - Python314_4_x86_Template/include/warnings.h | 45 - .../include/weakrefobject.h | 46 - Python314_4_x86_Template/libs/python3.lib | Bin 202484 -> 0 bytes Python314_4_x86_Template/libs/python314.lib | Bin 412624 -> 0 bytes Python314_4_x86_Template/python.exe | Bin 104272 -> 0 bytes Python314_4_x86_Template/python3.dll | Bin 73560 -> 0 bytes Python314_4_x86_Template/python314.dll | Bin 5888336 -> 0 bytes Python314_4_x86_Template/pythonw.exe | Bin 103256 -> 0 bytes Python314_4_x86_Template/vcruntime140.dll | Bin 90192 -> 0 bytes 1946 files changed, 523508 deletions(-) delete mode 100644 Python314_4_x86_Template/DLLs/_asyncio.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_bz2.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_ctypes.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_decimal.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_elementtree.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_hashlib.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_lzma.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_multiprocessing.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_overlapped.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_queue.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_remote_debugging.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_socket.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_sqlite3.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_ssl.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_uuid.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_wmi.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_zoneinfo.pyd delete mode 100644 Python314_4_x86_Template/DLLs/_zstd.pyd delete mode 100644 Python314_4_x86_Template/DLLs/libcrypto-3.dll delete mode 100644 Python314_4_x86_Template/DLLs/libffi-8.dll delete mode 100644 Python314_4_x86_Template/DLLs/libssl-3.dll delete mode 100644 Python314_4_x86_Template/DLLs/py.ico delete mode 100644 Python314_4_x86_Template/DLLs/pyc.ico delete mode 100644 Python314_4_x86_Template/DLLs/pyd.ico delete mode 100644 Python314_4_x86_Template/DLLs/pyexpat.pyd delete mode 100644 Python314_4_x86_Template/DLLs/python_lib.cat delete mode 100644 Python314_4_x86_Template/DLLs/select.pyd delete mode 100644 Python314_4_x86_Template/DLLs/sqlite3.dll delete mode 100644 Python314_4_x86_Template/DLLs/unicodedata.pyd delete mode 100644 Python314_4_x86_Template/DLLs/winsound.pyd delete mode 100644 Python314_4_x86_Template/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/__future__.py delete mode 100644 Python314_4_x86_Template/Lib/__hello__.py delete mode 100644 Python314_4_x86_Template/Lib/__phello__/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/__phello__/ham/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/__phello__/ham/eggs.py delete mode 100644 Python314_4_x86_Template/Lib/__phello__/spam.py delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/__future__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_colorize.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_compat_pickle.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_markupbase.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_opcode_metadata.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_py_warnings.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/_weakrefset.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/annotationlib.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/argparse.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/ast.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/base64.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/bisect.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/bz2.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/calendar.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/codeop.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/colorsys.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/compileall.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/configparser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/contextlib.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/copy.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/copyreg.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/csv.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/dataclasses.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/datetime.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/decimal.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/dis.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/enum.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/filecmp.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/fnmatch.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/fractions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/functools.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/getpass.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/gettext.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/glob.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/gzip.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/hashlib.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/heapq.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/hmac.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/inspect.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/ipaddress.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/keyword.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/linecache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/locale.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/lzma.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/mimetypes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/numbers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/opcode.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/operator.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/optparse.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/pickle.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/pkgutil.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/platform.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/py_compile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/queue.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/quopri.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/random.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/reprlib.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/selectors.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/shlex.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/shutil.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/signal.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/socket.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/socketserver.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/ssl.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/stringprep.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/struct.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/subprocess.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/tarfile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/tempfile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/textwrap.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/threading.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/token.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/tokenize.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/traceback.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/types.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/typing.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/uuid.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/warnings.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/__pycache__/weakref.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/_aix_support.py delete mode 100644 Python314_4_x86_Template/Lib/_android_support.py delete mode 100644 Python314_4_x86_Template/Lib/_apple_support.py delete mode 100644 Python314_4_x86_Template/Lib/_ast_unparse.py delete mode 100644 Python314_4_x86_Template/Lib/_collections_abc.py delete mode 100644 Python314_4_x86_Template/Lib/_colorize.py delete mode 100644 Python314_4_x86_Template/Lib/_compat_pickle.py delete mode 100644 Python314_4_x86_Template/Lib/_ios_support.py delete mode 100644 Python314_4_x86_Template/Lib/_markupbase.py delete mode 100644 Python314_4_x86_Template/Lib/_opcode_metadata.py delete mode 100644 Python314_4_x86_Template/Lib/_osx_support.py delete mode 100644 Python314_4_x86_Template/Lib/_py_abc.py delete mode 100644 Python314_4_x86_Template/Lib/_py_warnings.py delete mode 100644 Python314_4_x86_Template/Lib/_pydatetime.py delete mode 100644 Python314_4_x86_Template/Lib/_pydecimal.py delete mode 100644 Python314_4_x86_Template/Lib/_pyio.py delete mode 100644 Python314_4_x86_Template/Lib/_pylong.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/_module_completer.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/_threading_handler.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/base_eventqueue.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/commands.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/completing_reader.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/console.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/fancy_termios.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/historical_reader.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/input.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/keymap.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/main.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/mypy.ini delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/pager.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/reader.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/readline.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/simple_interact.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/terminfo.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/trace.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/types.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/unix_console.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/unix_eventqueue.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/utils.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/windows_console.py delete mode 100644 Python314_4_x86_Template/Lib/_pyrepl/windows_eventqueue.py delete mode 100644 Python314_4_x86_Template/Lib/_sitebuiltins.py delete mode 100644 Python314_4_x86_Template/Lib/_strptime.py delete mode 100644 Python314_4_x86_Template/Lib/_threading_local.py delete mode 100644 Python314_4_x86_Template/Lib/_weakrefset.py delete mode 100644 Python314_4_x86_Template/Lib/abc.py delete mode 100644 Python314_4_x86_Template/Lib/annotationlib.py delete mode 100644 Python314_4_x86_Template/Lib/antigravity.py delete mode 100644 Python314_4_x86_Template/Lib/argparse.py delete mode 100644 Python314_4_x86_Template/Lib/ast.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/base_events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/base_futures.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/base_subprocess.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/base_tasks.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/constants.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/coroutines.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/format_helpers.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/futures.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/graph.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/locks.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/log.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/mixins.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/proactor_events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/protocols.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/queues.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/runners.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/selector_events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/sslproto.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/staggered.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/streams.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/subprocess.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/taskgroups.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/tasks.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/threads.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/timeouts.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/tools.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/transports.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/trsock.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/unix_events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/windows_events.py delete mode 100644 Python314_4_x86_Template/Lib/asyncio/windows_utils.py delete mode 100644 Python314_4_x86_Template/Lib/base64.py delete mode 100644 Python314_4_x86_Template/Lib/bdb.py delete mode 100644 Python314_4_x86_Template/Lib/bisect.py delete mode 100644 Python314_4_x86_Template/Lib/bz2.py delete mode 100644 Python314_4_x86_Template/Lib/cProfile.py delete mode 100644 Python314_4_x86_Template/Lib/calendar.py delete mode 100644 Python314_4_x86_Template/Lib/cmd.py delete mode 100644 Python314_4_x86_Template/Lib/code.py delete mode 100644 Python314_4_x86_Template/Lib/codecs.py delete mode 100644 Python314_4_x86_Template/Lib/codeop.py delete mode 100644 Python314_4_x86_Template/Lib/collections/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/collections/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/colorsys.py delete mode 100644 Python314_4_x86_Template/Lib/compileall.py delete mode 100644 Python314_4_x86_Template/Lib/compression/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/compression/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/compression/_common/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/compression/_common/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/compression/_common/__pycache__/_streams.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/compression/_common/_streams.py delete mode 100644 Python314_4_x86_Template/Lib/compression/bz2.py delete mode 100644 Python314_4_x86_Template/Lib/compression/gzip.py delete mode 100644 Python314_4_x86_Template/Lib/compression/lzma.py delete mode 100644 Python314_4_x86_Template/Lib/compression/zlib.py delete mode 100644 Python314_4_x86_Template/Lib/compression/zstd/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/compression/zstd/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/compression/zstd/__pycache__/_zstdfile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/compression/zstd/_zstdfile.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/futures/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/futures/_base.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/futures/interpreter.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/futures/process.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/futures/thread.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/interpreters/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/interpreters/_crossinterp.py delete mode 100644 Python314_4_x86_Template/Lib/concurrent/interpreters/_queues.py delete mode 100644 Python314_4_x86_Template/Lib/configparser.py delete mode 100644 Python314_4_x86_Template/Lib/contextlib.py delete mode 100644 Python314_4_x86_Template/Lib/contextvars.py delete mode 100644 Python314_4_x86_Template/Lib/copy.py delete mode 100644 Python314_4_x86_Template/Lib/copyreg.py delete mode 100644 Python314_4_x86_Template/Lib/csv.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ctypes/__pycache__/_endian.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ctypes/__pycache__/_layout.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ctypes/__pycache__/wintypes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ctypes/_aix.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/_endian.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/_layout.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/README.ctypes delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/dyld.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/dylib.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib.bat delete mode 100644 Python314_4_x86_Template/Lib/ctypes/macholib/framework.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/util.py delete mode 100644 Python314_4_x86_Template/Lib/ctypes/wintypes.py delete mode 100644 Python314_4_x86_Template/Lib/curses/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/curses/ascii.py delete mode 100644 Python314_4_x86_Template/Lib/curses/has_key.py delete mode 100644 Python314_4_x86_Template/Lib/curses/panel.py delete mode 100644 Python314_4_x86_Template/Lib/curses/textpad.py delete mode 100644 Python314_4_x86_Template/Lib/dataclasses.py delete mode 100644 Python314_4_x86_Template/Lib/datetime.py delete mode 100644 Python314_4_x86_Template/Lib/dbm/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/dbm/dumb.py delete mode 100644 Python314_4_x86_Template/Lib/dbm/gnu.py delete mode 100644 Python314_4_x86_Template/Lib/dbm/ndbm.py delete mode 100644 Python314_4_x86_Template/Lib/dbm/sqlite3.py delete mode 100644 Python314_4_x86_Template/Lib/decimal.py delete mode 100644 Python314_4_x86_Template/Lib/difflib.py delete mode 100644 Python314_4_x86_Template/Lib/dis.py delete mode 100644 Python314_4_x86_Template/Lib/doctest.py delete mode 100644 Python314_4_x86_Template/Lib/email/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/_encoded_words.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/_parseaddr.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/_policybase.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/base64mime.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/charset.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/encoders.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/errors.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/feedparser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/header.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/iterators.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/message.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/quoprimime.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/__pycache__/utils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/email/_encoded_words.py delete mode 100644 Python314_4_x86_Template/Lib/email/_header_value_parser.py delete mode 100644 Python314_4_x86_Template/Lib/email/_parseaddr.py delete mode 100644 Python314_4_x86_Template/Lib/email/_policybase.py delete mode 100644 Python314_4_x86_Template/Lib/email/architecture.rst delete mode 100644 Python314_4_x86_Template/Lib/email/base64mime.py delete mode 100644 Python314_4_x86_Template/Lib/email/charset.py delete mode 100644 Python314_4_x86_Template/Lib/email/contentmanager.py delete mode 100644 Python314_4_x86_Template/Lib/email/encoders.py delete mode 100644 Python314_4_x86_Template/Lib/email/errors.py delete mode 100644 Python314_4_x86_Template/Lib/email/feedparser.py delete mode 100644 Python314_4_x86_Template/Lib/email/generator.py delete mode 100644 Python314_4_x86_Template/Lib/email/header.py delete mode 100644 Python314_4_x86_Template/Lib/email/headerregistry.py delete mode 100644 Python314_4_x86_Template/Lib/email/iterators.py delete mode 100644 Python314_4_x86_Template/Lib/email/message.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/application.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/audio.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/base.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/image.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/message.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/multipart.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/nonmultipart.py delete mode 100644 Python314_4_x86_Template/Lib/email/mime/text.py delete mode 100644 Python314_4_x86_Template/Lib/email/parser.py delete mode 100644 Python314_4_x86_Template/Lib/email/policy.py delete mode 100644 Python314_4_x86_Template/Lib/email/quoprimime.py delete mode 100644 Python314_4_x86_Template/Lib/email/utils.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/_win_cp_codecs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/aliases.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/cp1252.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/cp437.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/idna.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/__pycache__/utf_8.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/encodings/_win_cp_codecs.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/aliases.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/ascii.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/base64_codec.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/big5.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/big5hkscs.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/bz2_codec.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/charmap.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp037.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1006.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1026.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1125.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1140.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1250.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1251.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1252.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1253.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1254.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1255.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1256.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1257.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp1258.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp273.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp424.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp437.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp500.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp720.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp737.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp775.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp850.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp852.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp855.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp856.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp857.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp858.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp860.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp861.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp862.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp863.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp864.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp865.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp866.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp869.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp874.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp875.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp932.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp949.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/cp950.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/euc_jis_2004.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/euc_jisx0213.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/euc_jp.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/euc_kr.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/gb18030.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/gb2312.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/gbk.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/hex_codec.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/hp_roman8.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/hz.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/idna.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp_1.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp_2.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp_2004.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp_3.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_jp_ext.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso2022_kr.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_1.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_10.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_11.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_13.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_14.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_15.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_16.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_2.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_3.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_4.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_5.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_6.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_7.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_8.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/iso8859_9.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/johab.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/koi8_r.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/koi8_t.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/koi8_u.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/kz1048.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/latin_1.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_arabic.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_croatian.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_cyrillic.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_farsi.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_greek.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_iceland.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_latin2.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_roman.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_romanian.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mac_turkish.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/mbcs.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/oem.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/palmos.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/ptcp154.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/punycode.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/quopri_codec.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/raw_unicode_escape.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/rot_13.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/shift_jis.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/shift_jis_2004.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/shift_jisx0213.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/tis_620.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/undefined.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/unicode_escape.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_16.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_16_be.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_16_le.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_32.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_32_be.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_32_le.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_7.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_8.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/utf_8_sig.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/uu_codec.py delete mode 100644 Python314_4_x86_Template/Lib/encodings/zlib_codec.py delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/_bundled/pip-26.0.1-py3-none-any.whl delete mode 100644 Python314_4_x86_Template/Lib/ensurepip/_uninstall.py delete mode 100644 Python314_4_x86_Template/Lib/enum.py delete mode 100644 Python314_4_x86_Template/Lib/filecmp.py delete mode 100644 Python314_4_x86_Template/Lib/fileinput.py delete mode 100644 Python314_4_x86_Template/Lib/fnmatch.py delete mode 100644 Python314_4_x86_Template/Lib/fractions.py delete mode 100644 Python314_4_x86_Template/Lib/ftplib.py delete mode 100644 Python314_4_x86_Template/Lib/functools.py delete mode 100644 Python314_4_x86_Template/Lib/genericpath.py delete mode 100644 Python314_4_x86_Template/Lib/getopt.py delete mode 100644 Python314_4_x86_Template/Lib/getpass.py delete mode 100644 Python314_4_x86_Template/Lib/gettext.py delete mode 100644 Python314_4_x86_Template/Lib/glob.py delete mode 100644 Python314_4_x86_Template/Lib/graphlib.py delete mode 100644 Python314_4_x86_Template/Lib/gzip.py delete mode 100644 Python314_4_x86_Template/Lib/hashlib.py delete mode 100644 Python314_4_x86_Template/Lib/heapq.py delete mode 100644 Python314_4_x86_Template/Lib/hmac.py delete mode 100644 Python314_4_x86_Template/Lib/html/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/html/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/html/__pycache__/entities.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/html/__pycache__/parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/html/entities.py delete mode 100644 Python314_4_x86_Template/Lib/html/parser.py delete mode 100644 Python314_4_x86_Template/Lib/http/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/http/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/http/__pycache__/client.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/http/__pycache__/cookiejar.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/http/__pycache__/cookies.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/http/client.py delete mode 100644 Python314_4_x86_Template/Lib/http/cookiejar.py delete mode 100644 Python314_4_x86_Template/Lib/http/cookies.py delete mode 100644 Python314_4_x86_Template/Lib/http/server.py delete mode 100644 Python314_4_x86_Template/Lib/imaplib.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/__pycache__/_abc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/__pycache__/abc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/__pycache__/readers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/_abc.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/_bootstrap.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/_bootstrap_external.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/abc.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/machinery.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_adapters.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_collections.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_functools.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_itertools.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_meta.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_text.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_adapters.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_collections.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_functools.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_itertools.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_meta.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/_text.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/metadata/diagnose.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/readers.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_adapters.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_common.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_functional.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_itertools.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/abc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/__pycache__/readers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/_adapters.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/_common.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/_functional.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/_itertools.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/abc.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/readers.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/resources/simple.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/simple.py delete mode 100644 Python314_4_x86_Template/Lib/importlib/util.py delete mode 100644 Python314_4_x86_Template/Lib/inspect.py delete mode 100644 Python314_4_x86_Template/Lib/io.py delete mode 100644 Python314_4_x86_Template/Lib/ipaddress.py delete mode 100644 Python314_4_x86_Template/Lib/json/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/json/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/json/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/json/__pycache__/decoder.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/json/__pycache__/encoder.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/json/__pycache__/scanner.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/json/decoder.py delete mode 100644 Python314_4_x86_Template/Lib/json/encoder.py delete mode 100644 Python314_4_x86_Template/Lib/json/scanner.py delete mode 100644 Python314_4_x86_Template/Lib/json/tool.py delete mode 100644 Python314_4_x86_Template/Lib/keyword.py delete mode 100644 Python314_4_x86_Template/Lib/linecache.py delete mode 100644 Python314_4_x86_Template/Lib/locale.py delete mode 100644 Python314_4_x86_Template/Lib/logging/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/logging/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/logging/__pycache__/config.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/logging/__pycache__/handlers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/logging/config.py delete mode 100644 Python314_4_x86_Template/Lib/logging/handlers.py delete mode 100644 Python314_4_x86_Template/Lib/lzma.py delete mode 100644 Python314_4_x86_Template/Lib/mailbox.py delete mode 100644 Python314_4_x86_Template/Lib/mimetypes.py delete mode 100644 Python314_4_x86_Template/Lib/modulefinder.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/connection.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/context.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/dummy/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/dummy/connection.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/forkserver.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/heap.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/managers.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/pool.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/popen_fork.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/popen_forkserver.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_posix.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_win32.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/process.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/queues.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/reduction.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/resource_sharer.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/resource_tracker.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/shared_memory.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/sharedctypes.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/spawn.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/synchronize.py delete mode 100644 Python314_4_x86_Template/Lib/multiprocessing/util.py delete mode 100644 Python314_4_x86_Template/Lib/netrc.py delete mode 100644 Python314_4_x86_Template/Lib/ntpath.py delete mode 100644 Python314_4_x86_Template/Lib/nturl2path.py delete mode 100644 Python314_4_x86_Template/Lib/numbers.py delete mode 100644 Python314_4_x86_Template/Lib/opcode.py delete mode 100644 Python314_4_x86_Template/Lib/operator.py delete mode 100644 Python314_4_x86_Template/Lib/optparse.py delete mode 100644 Python314_4_x86_Template/Lib/os.py delete mode 100644 Python314_4_x86_Template/Lib/pathlib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/pathlib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/pathlib/__pycache__/_os.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/pathlib/_local.py delete mode 100644 Python314_4_x86_Template/Lib/pathlib/_os.py delete mode 100644 Python314_4_x86_Template/Lib/pathlib/types.py delete mode 100644 Python314_4_x86_Template/Lib/pdb.py delete mode 100644 Python314_4_x86_Template/Lib/pickle.py delete mode 100644 Python314_4_x86_Template/Lib/pickletools.py delete mode 100644 Python314_4_x86_Template/Lib/pkgutil.py delete mode 100644 Python314_4_x86_Template/Lib/platform.py delete mode 100644 Python314_4_x86_Template/Lib/plistlib.py delete mode 100644 Python314_4_x86_Template/Lib/poplib.py delete mode 100644 Python314_4_x86_Template/Lib/posixpath.py delete mode 100644 Python314_4_x86_Template/Lib/pprint.py delete mode 100644 Python314_4_x86_Template/Lib/profile.py delete mode 100644 Python314_4_x86_Template/Lib/pstats.py delete mode 100644 Python314_4_x86_Template/Lib/pty.py delete mode 100644 Python314_4_x86_Template/Lib/py_compile.py delete mode 100644 Python314_4_x86_Template/Lib/pyclbr.py delete mode 100644 Python314_4_x86_Template/Lib/pydoc.py delete mode 100644 Python314_4_x86_Template/Lib/pydoc_data/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/pydoc_data/_pydoc.css delete mode 100644 Python314_4_x86_Template/Lib/pydoc_data/module_docs.py delete mode 100644 Python314_4_x86_Template/Lib/pydoc_data/topics.py delete mode 100644 Python314_4_x86_Template/Lib/queue.py delete mode 100644 Python314_4_x86_Template/Lib/quopri.py delete mode 100644 Python314_4_x86_Template/Lib/random.py delete mode 100644 Python314_4_x86_Template/Lib/re/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/re/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/re/__pycache__/_casefix.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/re/__pycache__/_compiler.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/re/__pycache__/_constants.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/re/__pycache__/_parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/re/_casefix.py delete mode 100644 Python314_4_x86_Template/Lib/re/_compiler.py delete mode 100644 Python314_4_x86_Template/Lib/re/_constants.py delete mode 100644 Python314_4_x86_Template/Lib/re/_parser.py delete mode 100644 Python314_4_x86_Template/Lib/reprlib.py delete mode 100644 Python314_4_x86_Template/Lib/rlcompleter.py delete mode 100644 Python314_4_x86_Template/Lib/runpy.py delete mode 100644 Python314_4_x86_Template/Lib/sched.py delete mode 100644 Python314_4_x86_Template/Lib/secrets.py delete mode 100644 Python314_4_x86_Template/Lib/selectors.py delete mode 100644 Python314_4_x86_Template/Lib/shelve.py delete mode 100644 Python314_4_x86_Template/Lib/shlex.py delete mode 100644 Python314_4_x86_Template/Lib/shutil.py delete mode 100644 Python314_4_x86_Template/Lib/signal.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/INSTALLER delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/METADATA delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/RECORD delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/REQUESTED delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/WHEEL delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/entry_points.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__pip-runner__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/main.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/build_env.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/autocompletion.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/base_command.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/cmdoptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/command_context.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/index_command.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main_parser.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/parser.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/progress_bars.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/req_command.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/spinners.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/status_codes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/lock.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/check.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/completion.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/configuration.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/debug.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/download.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/freeze.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/hash.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/help.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/index.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/inspect.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/install.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/list.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/lock.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/search.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/show.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/uninstall.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/configuration.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/base.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/installed.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/sdist.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/collector.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/package_finder.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/sources.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_distutils.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_sysconfig.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/base.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/main.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/_json.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/base.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/pkg_resources.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/release_control.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/candidate.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/direct_url.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/format_control.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/index.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/installation_report.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/link.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/release_control.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/scheme.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/search_scope.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/selection_prefs.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/target_python.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/auth.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/download.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/lazy_wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/session.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/utils.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/xmlrpc.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/build_tracker.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/check.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/freeze.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/prepare.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/pyproject.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/pep723.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_dependency_group.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/constructors.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/pep723.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_dependency_group.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_file.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_install.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_set.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_uninstall.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/base.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/self_outdated_check.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/pylock.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/retry.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_jaraco_text.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_log.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/appdirs.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compatibility_tags.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/datetime.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/deprecation.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/egg_link.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/entrypoints.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filesystem.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filetypes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/glibc.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/hashes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/logging.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/misc.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/packaging.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/pylock.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/retry.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/subprocess.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/temp_dir.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/unpacking.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/urls.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/virtualenv.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/wheel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/bazaar.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/git.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/mercurial.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/subversion.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/versioncontrol.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_internal/wheel_builder.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/README.rst delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/controller.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/cacert.pem delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/core.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/resources.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/scripts.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t32.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/util.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w32.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64.exe delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/distro.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/LICENSE.md delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/codec.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/core.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/idnadata.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/intranges.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/package_data.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/uts46data.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/COPYING delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/ext.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/fallback.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/pylock.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_elffile.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_manylinux.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_musllinux.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_parser.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_structures.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/markers.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/metadata.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/pylock.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/requirements.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/specifiers.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/tags.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/utils.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/version.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/android.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/api.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/macos.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/unix.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/version.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/windows.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/console.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexer.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/python.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/modeline.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/plugin.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/regexopt.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/scanner.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/sphinxext.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/style.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/token.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/unistring.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/util.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__version__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/_internal_utils.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/adapters.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/api.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/auth.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/certs.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/compat.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/cookies.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/help.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/hooks.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/models.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/packages.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/sessions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/status_codes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/structures.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/utils.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/providers.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/reporters.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/structs.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_cell_widths.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_export_format.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_extension.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_fileno.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_inspect.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_log_render.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_loop.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_null_file.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_palettes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_pick.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_ratio.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_spinners.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_stack.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_timer.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_win32_console.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_wrap.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/abc.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/align.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/ansi.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/bar.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/box.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/cells.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color_triplet.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/columns.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/console.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/constrain.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/containers.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/control.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/default_styles.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/diagnose.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/emoji.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/errors.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/file_proxy.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/filesize.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/highlighter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/json.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/jupyter.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/layout.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live_render.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/logging.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/markup.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/measure.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/padding.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pager.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/palette.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/panel.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pretty.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress_bar.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/prompt.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/protocol.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/region.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/repr.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/rule.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/scope.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/screen.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/segment.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/spinner.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/status.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/style.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/styled.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/syntax.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/table.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/terminal_theme.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/text.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/theme.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/themes.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/traceback.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/tree.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_parser.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_re.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_types.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/_writer.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/LICENSE delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_api.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_macos.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_openssl.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_windows.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_collections.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_version.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connection.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/fields.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/filepost.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/six.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/request.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/response.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/connection.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/queue.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/request.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/response.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/retry.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/url.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/wait.py delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/_vendor/vendor.txt delete mode 100644 Python314_4_x86_Template/Lib/site-packages/pip/py.typed delete mode 100644 Python314_4_x86_Template/Lib/site.py delete mode 100644 Python314_4_x86_Template/Lib/smtplib.py delete mode 100644 Python314_4_x86_Template/Lib/socket.py delete mode 100644 Python314_4_x86_Template/Lib/socketserver.py delete mode 100644 Python314_4_x86_Template/Lib/sqlite3/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/sqlite3/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/sqlite3/dbapi2.py delete mode 100644 Python314_4_x86_Template/Lib/sqlite3/dump.py delete mode 100644 Python314_4_x86_Template/Lib/sre_compile.py delete mode 100644 Python314_4_x86_Template/Lib/sre_constants.py delete mode 100644 Python314_4_x86_Template/Lib/sre_parse.py delete mode 100644 Python314_4_x86_Template/Lib/ssl.py delete mode 100644 Python314_4_x86_Template/Lib/stat.py delete mode 100644 Python314_4_x86_Template/Lib/statistics.py delete mode 100644 Python314_4_x86_Template/Lib/string/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/string/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/string/templatelib.py delete mode 100644 Python314_4_x86_Template/Lib/stringprep.py delete mode 100644 Python314_4_x86_Template/Lib/struct.py delete mode 100644 Python314_4_x86_Template/Lib/subprocess.py delete mode 100644 Python314_4_x86_Template/Lib/symtable.py delete mode 100644 Python314_4_x86_Template/Lib/sysconfig/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/sysconfig/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/sysconfig/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/tabnanny.py delete mode 100644 Python314_4_x86_Template/Lib/tarfile.py delete mode 100644 Python314_4_x86_Template/Lib/tempfile.py delete mode 100644 Python314_4_x86_Template/Lib/textwrap.py delete mode 100644 Python314_4_x86_Template/Lib/this.py delete mode 100644 Python314_4_x86_Template/Lib/threading.py delete mode 100644 Python314_4_x86_Template/Lib/timeit.py delete mode 100644 Python314_4_x86_Template/Lib/token.py delete mode 100644 Python314_4_x86_Template/Lib/tokenize.py delete mode 100644 Python314_4_x86_Template/Lib/tomllib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/tomllib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/tomllib/__pycache__/_parser.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/tomllib/__pycache__/_re.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/tomllib/_parser.py delete mode 100644 Python314_4_x86_Template/Lib/tomllib/_re.py delete mode 100644 Python314_4_x86_Template/Lib/tomllib/_types.py delete mode 100644 Python314_4_x86_Template/Lib/tomllib/mypy.ini delete mode 100644 Python314_4_x86_Template/Lib/trace.py delete mode 100644 Python314_4_x86_Template/Lib/traceback.py delete mode 100644 Python314_4_x86_Template/Lib/tracemalloc.py delete mode 100644 Python314_4_x86_Template/Lib/tty.py delete mode 100644 Python314_4_x86_Template/Lib/types.py delete mode 100644 Python314_4_x86_Template/Lib/typing.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/_log.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/async_case.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/case.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/loader.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/main.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/mock.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/result.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/runner.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/signals.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/suite.py delete mode 100644 Python314_4_x86_Template/Lib/unittest/util.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/urllib/__pycache__/error.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/urllib/__pycache__/parse.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/urllib/__pycache__/request.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/urllib/__pycache__/response.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/urllib/error.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/parse.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/request.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/response.py delete mode 100644 Python314_4_x86_Template/Lib/urllib/robotparser.py delete mode 100644 Python314_4_x86_Template/Lib/uuid.py delete mode 100644 Python314_4_x86_Template/Lib/venv/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/venv/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/common/Activate.ps1 delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/common/activate delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/common/activate.fish delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/nt/activate.bat delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/nt/deactivate.bat delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/nt/venvlauncher.exe delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/nt/venvwlauncher.exe delete mode 100644 Python314_4_x86_Template/Lib/venv/scripts/posix/activate.csh delete mode 100644 Python314_4_x86_Template/Lib/warnings.py delete mode 100644 Python314_4_x86_Template/Lib/wave.py delete mode 100644 Python314_4_x86_Template/Lib/weakref.py delete mode 100644 Python314_4_x86_Template/Lib/webbrowser.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/handlers.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/headers.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/simple_server.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/types.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/util.py delete mode 100644 Python314_4_x86_Template/Lib/wsgiref/validate.py delete mode 100644 Python314_4_x86_Template/Lib/xml/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xml/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/NodeFilter.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/domreg.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/expatbuilder.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/minicompat.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/minidom.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/pulldom.py delete mode 100644 Python314_4_x86_Template/Lib/xml/dom/xmlbuilder.py delete mode 100644 Python314_4_x86_Template/Lib/xml/etree/ElementInclude.py delete mode 100644 Python314_4_x86_Template/Lib/xml/etree/ElementPath.py delete mode 100644 Python314_4_x86_Template/Lib/xml/etree/ElementTree.py delete mode 100644 Python314_4_x86_Template/Lib/xml/etree/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xml/etree/cElementTree.py delete mode 100644 Python314_4_x86_Template/Lib/xml/parsers/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xml/parsers/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/xml/parsers/__pycache__/expat.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/xml/parsers/expat.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/_exceptions.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/expatreader.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/handler.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/saxutils.py delete mode 100644 Python314_4_x86_Template/Lib/xml/sax/xmlreader.py delete mode 100644 Python314_4_x86_Template/Lib/xmlrpc/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/xmlrpc/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/xmlrpc/__pycache__/client.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/xmlrpc/client.py delete mode 100644 Python314_4_x86_Template/Lib/xmlrpc/server.py delete mode 100644 Python314_4_x86_Template/Lib/zipapp.py delete mode 100644 Python314_4_x86_Template/Lib/zipfile/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/zipfile/__main__.py delete mode 100644 Python314_4_x86_Template/Lib/zipfile/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/zipfile/_path/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/__init__.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/glob.cpython-314.pyc delete mode 100644 Python314_4_x86_Template/Lib/zipfile/_path/glob.py delete mode 100644 Python314_4_x86_Template/Lib/zipimport.py delete mode 100644 Python314_4_x86_Template/Lib/zoneinfo/__init__.py delete mode 100644 Python314_4_x86_Template/Lib/zoneinfo/_common.py delete mode 100644 Python314_4_x86_Template/Lib/zoneinfo/_tzpath.py delete mode 100644 Python314_4_x86_Template/Lib/zoneinfo/_zoneinfo.py delete mode 100644 Python314_4_x86_Template/NEWS.txt delete mode 100644 Python314_4_x86_Template/Scripts/pip.exe delete mode 100644 Python314_4_x86_Template/Scripts/pip3.14.exe delete mode 100644 Python314_4_x86_Template/Scripts/pip3.exe delete mode 100644 Python314_4_x86_Template/include/Python.h delete mode 100644 Python314_4_x86_Template/include/abstract.h delete mode 100644 Python314_4_x86_Template/include/audit.h delete mode 100644 Python314_4_x86_Template/include/bltinmodule.h delete mode 100644 Python314_4_x86_Template/include/boolobject.h delete mode 100644 Python314_4_x86_Template/include/bytearrayobject.h delete mode 100644 Python314_4_x86_Template/include/bytesobject.h delete mode 100644 Python314_4_x86_Template/include/ceval.h delete mode 100644 Python314_4_x86_Template/include/codecs.h delete mode 100644 Python314_4_x86_Template/include/compile.h delete mode 100644 Python314_4_x86_Template/include/complexobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/abstract.h delete mode 100644 Python314_4_x86_Template/include/cpython/audit.h delete mode 100644 Python314_4_x86_Template/include/cpython/bytearrayobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/bytesobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/cellobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/ceval.h delete mode 100644 Python314_4_x86_Template/include/cpython/classobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/code.h delete mode 100644 Python314_4_x86_Template/include/cpython/compile.h delete mode 100644 Python314_4_x86_Template/include/cpython/complexobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/context.h delete mode 100644 Python314_4_x86_Template/include/cpython/critical_section.h delete mode 100644 Python314_4_x86_Template/include/cpython/descrobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/dictobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/fileobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/fileutils.h delete mode 100644 Python314_4_x86_Template/include/cpython/floatobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/frameobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/funcobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/genobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/import.h delete mode 100644 Python314_4_x86_Template/include/cpython/initconfig.h delete mode 100644 Python314_4_x86_Template/include/cpython/listobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/lock.h delete mode 100644 Python314_4_x86_Template/include/cpython/longintrepr.h delete mode 100644 Python314_4_x86_Template/include/cpython/longobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/memoryobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/methodobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/modsupport.h delete mode 100644 Python314_4_x86_Template/include/cpython/monitoring.h delete mode 100644 Python314_4_x86_Template/include/cpython/object.h delete mode 100644 Python314_4_x86_Template/include/cpython/objimpl.h delete mode 100644 Python314_4_x86_Template/include/cpython/odictobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/picklebufobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/pthread_stubs.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyatomic.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyatomic_gcc.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyatomic_msc.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyatomic_std.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyctype.h delete mode 100644 Python314_4_x86_Template/include/cpython/pydebug.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyerrors.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyfpe.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyframe.h delete mode 100644 Python314_4_x86_Template/include/cpython/pyhash.h delete mode 100644 Python314_4_x86_Template/include/cpython/pylifecycle.h delete mode 100644 Python314_4_x86_Template/include/cpython/pymem.h delete mode 100644 Python314_4_x86_Template/include/cpython/pystate.h delete mode 100644 Python314_4_x86_Template/include/cpython/pystats.h delete mode 100644 Python314_4_x86_Template/include/cpython/pythonrun.h delete mode 100644 Python314_4_x86_Template/include/cpython/pythread.h delete mode 100644 Python314_4_x86_Template/include/cpython/pytime.h delete mode 100644 Python314_4_x86_Template/include/cpython/setobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/traceback.h delete mode 100644 Python314_4_x86_Template/include/cpython/tracemalloc.h delete mode 100644 Python314_4_x86_Template/include/cpython/tupleobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/unicodeobject.h delete mode 100644 Python314_4_x86_Template/include/cpython/warnings.h delete mode 100644 Python314_4_x86_Template/include/cpython/weakrefobject.h delete mode 100644 Python314_4_x86_Template/include/critical_section.h delete mode 100644 Python314_4_x86_Template/include/datetime.h delete mode 100644 Python314_4_x86_Template/include/descrobject.h delete mode 100644 Python314_4_x86_Template/include/dictobject.h delete mode 100644 Python314_4_x86_Template/include/dynamic_annotations.h delete mode 100644 Python314_4_x86_Template/include/enumobject.h delete mode 100644 Python314_4_x86_Template/include/errcode.h delete mode 100644 Python314_4_x86_Template/include/exports.h delete mode 100644 Python314_4_x86_Template/include/fileobject.h delete mode 100644 Python314_4_x86_Template/include/fileutils.h delete mode 100644 Python314_4_x86_Template/include/floatobject.h delete mode 100644 Python314_4_x86_Template/include/frameobject.h delete mode 100644 Python314_4_x86_Template/include/genericaliasobject.h delete mode 100644 Python314_4_x86_Template/include/import.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc/atomic.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc/internal.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc/prim.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc/track.h delete mode 100644 Python314_4_x86_Template/include/internal/mimalloc/mimalloc/types.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_abstract.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_asdl.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_ast.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_ast_state.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_atexit.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_audit.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_backoff.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_bitutils.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_blocks_output_buffer.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_brc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_bytes_methods.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_bytesobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_c_array.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_call.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_capsule.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_cell.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_ceval.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_ceval_state.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_code.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_codecs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_compile.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_complexobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_condvar.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_context.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_critical_section.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_crossinterp.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_crossinterp_data_registry.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_debug_offsets.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_descrobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_dict.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_dict_state.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_dtoa.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_emscripten_signal.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_emscripten_trampoline.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_exceptions.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_faulthandler.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_fileutils.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_fileutils_windows.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_floatobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_flowgraph.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_format.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_frame.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_freelist.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_freelist_state.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_function.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_gc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_genobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_getopt.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_gil.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_global_objects.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_global_objects_fini_generated.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_global_strings.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_hamt.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_hashtable.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_import.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_importdl.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_index_pool.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_initconfig.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_instruction_sequence.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_instruments.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_interp.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_interp_structs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_interpframe.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_interpframe_structs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_interpolation.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_intrinsics.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_jit.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_list.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_llist.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_lock.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_long.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_magic_number.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_memoryobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_mimalloc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_modsupport.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_moduleobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_namespace.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_object.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_object_alloc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_object_deferred.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_object_stack.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_object_state.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_obmalloc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_obmalloc_init.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_opcode_metadata.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_opcode_utils.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_optimizer.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_parking_lot.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_parser.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pathconfig.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pyarena.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pyatomic_ft_wrappers.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pybuffer.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pyerrors.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pyhash.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pylifecycle.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pymath.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pymem.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pymem_init.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pystate.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pystats.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pythonrun.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_pythread.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_qsbr.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_range.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_runtime.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_runtime_init.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_runtime_init_generated.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_runtime_structs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_semaphore.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_setobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_signal.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_sliceobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_stackref.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_stats.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_strhex.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_structs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_structseq.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_symtable.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_sysmodule.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_template.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_time.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_token.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_traceback.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_tracemalloc.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_tstate.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_tuple.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_typedefs.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_typeobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_typevarobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_ucnhash.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_unicodeobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_unicodeobject_generated.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_unionobject.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_uniqueid.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_uop_ids.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_uop_metadata.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_warnings.h delete mode 100644 Python314_4_x86_Template/include/internal/pycore_weakref.h delete mode 100644 Python314_4_x86_Template/include/intrcheck.h delete mode 100644 Python314_4_x86_Template/include/iterobject.h delete mode 100644 Python314_4_x86_Template/include/listobject.h delete mode 100644 Python314_4_x86_Template/include/lock.h delete mode 100644 Python314_4_x86_Template/include/longobject.h delete mode 100644 Python314_4_x86_Template/include/marshal.h delete mode 100644 Python314_4_x86_Template/include/memoryobject.h delete mode 100644 Python314_4_x86_Template/include/methodobject.h delete mode 100644 Python314_4_x86_Template/include/modsupport.h delete mode 100644 Python314_4_x86_Template/include/moduleobject.h delete mode 100644 Python314_4_x86_Template/include/monitoring.h delete mode 100644 Python314_4_x86_Template/include/object.h delete mode 100644 Python314_4_x86_Template/include/objimpl.h delete mode 100644 Python314_4_x86_Template/include/opcode.h delete mode 100644 Python314_4_x86_Template/include/opcode_ids.h delete mode 100644 Python314_4_x86_Template/include/osdefs.h delete mode 100644 Python314_4_x86_Template/include/osmodule.h delete mode 100644 Python314_4_x86_Template/include/patchlevel.h delete mode 100644 Python314_4_x86_Template/include/py_curses.h delete mode 100644 Python314_4_x86_Template/include/pyatomic.h delete mode 100644 Python314_4_x86_Template/include/pybuffer.h delete mode 100644 Python314_4_x86_Template/include/pycapsule.h delete mode 100644 Python314_4_x86_Template/include/pyconfig.h delete mode 100644 Python314_4_x86_Template/include/pydtrace.h delete mode 100644 Python314_4_x86_Template/include/pyerrors.h delete mode 100644 Python314_4_x86_Template/include/pyexpat.h delete mode 100644 Python314_4_x86_Template/include/pyframe.h delete mode 100644 Python314_4_x86_Template/include/pyhash.h delete mode 100644 Python314_4_x86_Template/include/pylifecycle.h delete mode 100644 Python314_4_x86_Template/include/pymacconfig.h delete mode 100644 Python314_4_x86_Template/include/pymacro.h delete mode 100644 Python314_4_x86_Template/include/pymath.h delete mode 100644 Python314_4_x86_Template/include/pymem.h delete mode 100644 Python314_4_x86_Template/include/pyport.h delete mode 100644 Python314_4_x86_Template/include/pystate.h delete mode 100644 Python314_4_x86_Template/include/pystats.h delete mode 100644 Python314_4_x86_Template/include/pystrcmp.h delete mode 100644 Python314_4_x86_Template/include/pystrtod.h delete mode 100644 Python314_4_x86_Template/include/pythonrun.h delete mode 100644 Python314_4_x86_Template/include/pythread.h delete mode 100644 Python314_4_x86_Template/include/pytypedefs.h delete mode 100644 Python314_4_x86_Template/include/rangeobject.h delete mode 100644 Python314_4_x86_Template/include/refcount.h delete mode 100644 Python314_4_x86_Template/include/setobject.h delete mode 100644 Python314_4_x86_Template/include/sliceobject.h delete mode 100644 Python314_4_x86_Template/include/structmember.h delete mode 100644 Python314_4_x86_Template/include/structseq.h delete mode 100644 Python314_4_x86_Template/include/sysmodule.h delete mode 100644 Python314_4_x86_Template/include/traceback.h delete mode 100644 Python314_4_x86_Template/include/tupleobject.h delete mode 100644 Python314_4_x86_Template/include/typeslots.h delete mode 100644 Python314_4_x86_Template/include/unicodeobject.h delete mode 100644 Python314_4_x86_Template/include/warnings.h delete mode 100644 Python314_4_x86_Template/include/weakrefobject.h delete mode 100644 Python314_4_x86_Template/libs/python3.lib delete mode 100644 Python314_4_x86_Template/libs/python314.lib delete mode 100644 Python314_4_x86_Template/python.exe delete mode 100644 Python314_4_x86_Template/python3.dll delete mode 100644 Python314_4_x86_Template/python314.dll delete mode 100644 Python314_4_x86_Template/pythonw.exe delete mode 100644 Python314_4_x86_Template/vcruntime140.dll diff --git a/Python314_4_x86_Template/DLLs/_asyncio.pyd b/Python314_4_x86_Template/DLLs/_asyncio.pyd deleted file mode 100644 index a3a6fe5ff9fcc1fb8c159ad46c74992cefa2f033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68440 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 Sm7wQ=3dDtzY(Jil_dfvm&V(BP diff --git a/Python314_4_x86_Template/DLLs/_bz2.pyd b/Python314_4_x86_Template/DLLs/_bz2.pyd deleted file mode 100644 index 6f75125f664e8ee2973200fc69f190a670307325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84312 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

I&4OZ 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 diff --git a/Python314_4_x86_Template/DLLs/_ctypes.pyd b/Python314_4_x86_Template/DLLs/_ctypes.pyd deleted file mode 100644 index 57c0a75b24a368712c953d8b38211757d10fcef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126808 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

GbCFD6`6&=m^|U7Uc*`3M#!uFcQE(_Z#FV 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 #uwcE6NGyL@OK5=TPMkI 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�a zoVpx0&MH;T)LdA$?Cy`k;R)YO#Fn$x#ftla{l7kajQKnx5>LqRHqFW3l&Cc&MIQ>T zI(K-t@Yt2E*Op%T!+4i95{r#4i;? z))C)M6trl#DrN2aj%Y7gG>Od^F~8)&DN}Bun%sKsdv>GK^5pB zJC<>-(bC$2O1zjc73`h2ISOv(IDM^YiF}vq1@Gyc*V8%AQ+B8qI;-e><12KNQuF8) z${M!o&B0^Vj}Lj;Pm?qbo|1Wbg1=x*%fUNaOa-1^(opy5_1>tfZf17$sM+E(pI>&8 z%2wqEThMe;+TR|p&9*4n`R$VI;i;85KC5ld;s;9k+m3(9^UM2kYS9~=roo_O`gLCi zlCF#@epZ~CyTMbFH0_riXdLnEk;C~&ujS8VJbc|EaqsE=g}=f;&StPAO}|Y_xlx51 zt0}Vjp}3)Z*{5cP-n5y%^*=PY{w33UusL}t+8J>~c4paS*+y;u+eqs#IopEVhtv!N zKRmJ}|1bFpo4=Y{3whds-+0jz*^RjU+J-F6_HW<#pR%<7>u>G%mzhC}=cNdHTID~g zk-yFu`p-;JLHz|}=bLDYxC*%IOFvvYG1fI=sXEJ-d9)XE^>kig#-W)bH%f#1b&2)j zn3R$fjUse#vhGqfWjD`+z%z}h4Af@5C>ax7x}93{#bBAINaC5eol`qLSgREHj_L9W z&kV<}Y}r{BAW9T-D%&vdzC$qeP+_NQFY9)jQ?$Rv7?+&C)UEQY&)XC(zKQAAm{2+V z_GsDx-NQZTk0}`zS0+#0TX{+lHO!kRqtVDnRucHa`-V2B^~v|cWxiCUFNP!iR>;`g`aIALk>U5EUirDuaj;l9|bMLKR zp{!cE-S3eUv?kt!4o`~6C1tpGiap2N#3m|)tdep{y=FHPapIDyd;?Qnc%7I^fBnTI z3jg}kOSY};OPw23FiVL*9Lq`$l!yK3s&hEK@5wAnEJpE~c8le8Y}|Qizb!pLR$Ww+`yZ+(KQUN z3PIV|MkfXD z!2Rm%%N@qapZ))V7$|4C030kY5BKUtTqrp%DULbcFX~dO;;lkKHi^$A%fBl1U9hrm+gBRUafp4+KO;X;z7{oyDAl1`f_a*ntFXM``*6DGcuXI%2HTj zs%G$#^fQ(Br=NCR+-j@AgWBk*OV2jDSoNHtbu3%~zn`ap`+aOhTJA0S>1xHHTSr&) zO8eqI49^CqyA>SJeJ}W8*Cu^)^-H`8+hdl#R?Yf8VI=L^*!M=BSR&!aio`Vq(uRua z9-nqywsrbl>2BR4Dsgh@je?(hAD69Fo&GNJ=7-7cBgN}|&mB(i>-G7DztwwZzog4M zvDwHAWd{1)JKj~vKhiR|njFxBCT0tD;G9--p)AHcj&});Z`~T6sI53q>0EtgH5XUN zfr^*puJH$s_q{d>KIi-WoXm&vD30>W3E7Ve!=DIrK9mhP61H*65j}3c=hjUdDVc)H zSiNp{o2y?sxFj4D3eys9d6@eeYox@SwF$~yawTS4^V%BGn5QSP;U_j47_iJf@aDeI z7*$s|_@T2VY4VMm=`>Eb!2GDdd-F%0DQ8?s%_+>@$%^o^#&d0}S(hYtoZ6+=vT{r& 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 diff --git a/Python314_4_x86_Template/DLLs/_hashlib.pyd b/Python314_4_x86_Template/DLLs/_hashlib.pyd deleted file mode 100644 index bd85c598915c41e865b0438880f45990a49be59a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55128 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 cqM~fF<P95k5i~NkWCGa87~7=8K;Nd+;Z0g% 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 M#|7`fy;ueY0MT`tVE_OC diff --git a/Python314_4_x86_Template/DLLs/_multiprocessing.pyd b/Python314_4_x86_Template/DLLs/_multiprocessing.pyd deleted file mode 100644 index 15267ce4b9c586c59178b8c5a922ca86b4b3fee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33624 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 MRR;h7000000B{L2fdBvi diff --git a/Python314_4_x86_Template/DLLs/_overlapped.pyd b/Python314_4_x86_Template/DLLs/_overlapped.pyd deleted file mode 100644 index 59c1790311407a4f455c2001d189553c73415e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47448 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 Gf&3d7`7(_F diff --git a/Python314_4_x86_Template/DLLs/_queue.pyd b/Python314_4_x86_Template/DLLs/_queue.pyd deleted file mode 100644 index 32a55017ac9727f6fe0290ad897345ccf6032bec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32088 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 bI!s|%;`2hI>UPhzt)@z2;)t_k4Ez589Zky6 diff --git a/Python314_4_x86_Template/DLLs/_remote_debugging.pyd b/Python314_4_x86_Template/DLLs/_remote_debugging.pyd deleted file mode 100644 index 1abffb6d78d1dfb556e53eb1d92d4958133b4c4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71000 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 d$M<{W=tDuLK3e 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

H`bjsclE#vD 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 M0hYLLEExj%5BB8O0{{R3 diff --git a/Python314_4_x86_Template/DLLs/_ssl.pyd b/Python314_4_x86_Template/DLLs/_ssl.pyd deleted file mode 100644 index 46f3cd22df3507bffe0b4b4aa4265a96ebf87b14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164184 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 K^Z$G>kN*JS&U?9S}Yp6KFNh=?Ev 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 F{{w-h%k}^O diff --git a/Python314_4_x86_Template/DLLs/_wmi.pyd b/Python314_4_x86_Template/DLLs/_wmi.pyd deleted file mode 100644 index 2f35f8b1136f335675e2f8ab850af90e4ea782cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35672 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 diff --git a/Python314_4_x86_Template/DLLs/_zoneinfo.pyd b/Python314_4_x86_Template/DLLs/_zoneinfo.pyd deleted file mode 100644 index fdc0bbbf5d845472c0e8c412ab3064927b1c91d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45400 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 P)a4o`t$yiZ(a`=4VoE0e diff --git a/Python314_4_x86_Template/DLLs/_zstd.pyd b/Python314_4_x86_Template/DLLs/_zstd.pyd deleted file mode 100644 index 02786fcd4d185c9b67b45c2a1cb2c3b4ac9873e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416600 zcmeFae_T}8wKqJ&8DNyrGsaO#LMn-qmITwD74JZR95rrU-CP9-np%a?6xiAAs zD?~h?9CuD@+oZp4euMt_av2P(jmd@w zXa4btXr3WM(v4}xnF|e1B^wN{X{nKF+*@(K30JzK`y_)Qg?`~LdNmZ`4#0isObQ<7 z0Ak2Ud1F`Y=ZhDU4Xcqlg6oU)I5WkNHJxtsKYNPdfje=(D8;bTW-z>XKH0D?`fQ5p z(BG01=Meooh}N(6_i4}LPkZq2_g~Y;MPntTi2KVl7#{g_^<$5E9yJ&?Z@~i^dkd}} zT;u+7fIgqrvKhi=Jg@==1d#D7^7%epT~qxfJmO=;m<<;ENTSS>e>qfN_2W-|9T{ot z1OvldTxVX9Z^dM(|Nrivfj}u6kxqq~%PNhmE-5RQ!otR+hIv&&l~CliY)-aD=DgOJ zY?by~n|+>JS*e9x$L=#-$R*S>dv7Xnrz4L$lfJav&uh6Iz76XiVt=V{lrTxc<9dCf`KfG%-PP% znI}89&YrFycM&_F)_~a1oSbJ*Z}y2Tdr(1nl_4_cNv#ahGw?w}V$+Lw7Mb%h9#k!1 zAyisD@%v~=%?hTpLs-6MeHbU-Nbj*ODmEMWh@+- zlfxUzlp-y)pNV+QkvZ#-zcb z85}v1IdUXdB^SAKFn#gJaU1hmSc>clu~n1!Q51(CT7fI@V~t5J9F3uenb3pd6i1J4 zw#Fv8RZz=a-RMi*z80Jz)Y>#Ivwm#~u;C*_K3|@ z5&YF+NN$1zVWKpVkl`LY54gqwMMJ>FVcLBBA0k-&sNx!DrD1lcNSy^tK((@Klo0Gy z)Ke0VU@neZKSr|bJr!`N)R2Z{ABhdFQ__fq9b_Q}0QX0{qm|--G2$H$dx}!V+t?W~y)n_o2^+dQ|gW1fM6H63LFZ2yr-7K4hYKy|U8U&s|YrH?MH_ zQmXL9t5jGN@rK+UVp(&3!pC6I8glq}dm3Fvzcv0XjpPBIV!4kMTFM;fWe=E@$DS$9 z%Cp;XlSem;mwIgk>j;N+mzNloNdvaA%IIzaup?d@zzx>G!QCnC&%$h1RT+>ovncY} z$Q+Z_AJnjpt+U&~WHO5I&{CwX+e<(&v!_5dEw#7C29ELe0)&59LL+{f1~tjKtd8?R z3nsTnn<)_8Mti2gGZQstfSaw>lRM&v9Ubpe@#8IL^|t7kqr8jp|PGN4I#Dq8wOW_t45DU5&bQDYBh&Mg*xgP?s?u?c=1Y@D#qOx*# zW?UM0U@#*#jqakY$o>?BjwVAbj`LGa)&`a^TL%wD>D~NK(EBpm)byT2P)}hqR-xbJ zYIJLav;~)>!5BR(1mk7!c0fD1V$GahaP^ z9OS6xR;cQ-r!x)h5MY z2qvq0yG#aRS3?`)~f;)>+`G$%SE?1$Pbn2+c>u}Ch3?8m;J!`sN7@j*AmJ-M~RQS4<;nmQDUWg zC?WBSl=x+LC?TH8DXpP=+EN0MTLShRgCc8H!B-T)3iu<{Q#PyVz>i$VW;ysjTcE6mE zxR?^Bxmyzw=Tjmu^hF@0zKj=}rX#V;-HD8m8VJoD^bAXSj_Un@E?Z8LQWv12k{gjz zz%)`gt(dBem(@lq@-p|4DQbJV>S}c)CDh^BSmqv@s{E~2DbKt83a2v@HyTv5>p5?a z_VyO7w_t-{>#@hPqmSdP6&uzQ`%aX0T;5@29n-T|J;28*EX0=q3{M)C^-vl}x2b^i zPE5Iv<>Ntoo~0}w(2Y;|6l8E>${dz&LyASOnRi$LkB0Q^nto#CD(1bW?0aF28D;YrjCK=7 ztk}DPGo^_n?|p2A1zP0NRc3Dv-7aD&F&#IB&4c~w#y~2c%;`G)aAV$d@AUg)=9uWp zffblavi(?>YNj_*QJ@lqnvZ)w@zN6X%02X>%M?jnKW;wX@St*^)p1GMBIlD+4fHLvrby>AjB>XnL;$ribwj>m6@Bq!#K)90V9YxA!bAaU4gr$pCOL z37Jc+tIC8nx#A#JzOu^(n?*&hTrrB3yhWVlI)cwBn1(DcS4d%F9qf7uwjrbYd3~)2 zdmcAdzzUSrj72rsim`Tg9W0968E3B$n}_gVX@$*G7^#CS;%gbqD>w21-?g=j*!%`^ z1!n?8p9F$?ZUl0BGBmx{cPbI>jt_qed0D;rRpaeGr949}wS~l;)0=!ALh8jD{Vd&J z^H^cmvM8koVZYrsgK96+ejL^e&VcrDPqJKR4Q8;v%%M~6OeUK2eo5+yz)8VMwYh#U+C8d;CK?Y2lfGe15}SMgsD>~v zCyp|%bsCmFV;n--x^d1Ts_G&OEeKF;FxBM7AbH=Fi!0A{Y(@)8R7I*L+>g8mh{8Un zuS#RJ!Y(Rq&ckA|4ko7war08#^4?9B!t`BUimfn9tsDV8sc-H_k)TcLFv>d#6Q!dD z&}u88V%&%(;mIKZ3*a4*YLM9xtdpWH49%9h$4-X8SI8JJX$Z8$I?P!fF&8YQIsZ^L z)6%Dmon1Z`*Sas0L!c~OdR^~cAlC#X(@=iD81B^jB%p|96K<(>a7%DvFUXN{ z2k*t;Wd>MUtgde-m7rY%(p;>&CL;H{RRV7eP&S@TXYicA+jJ|1>K$wW%&ZIK8RT6vdsB)c z1B89>ti}08euSPxyzo)Q2%WjYv7%g-o4wP)8>l-}9G;U&Q$n2-dCV)a0XW${JrRNV z`RT`lpKOfKI?9^{R+}1FX~VsN-DhS;%hc`$Zlj0UvaW#K0Z|CRDjo*|&tt59WH^la z82m$5=$bSLP2nbZma(I+Qw!?P{u+r;|G2hJPc+-qBl<*a=iN6?K88T^P2wU=Ip!Ox z3Hb@^T4vT+F?{r-!4QuR=_TwKRHkzfXfb?HNF^C5W&`jc@zHjwIV0#jCc-S&haupm zPj(pcsD!OdFM`KS_e$w&ok0w+`MB6b>m`C+Nu&;D+f&?P z!IxgNaMmkn!L8dm4LU~YY4@ND>k~EOqZ&9fu68uaNYAWHSPDH!(%yoD$7e3TUpoW7fjtB(f zCzzlixrW4Z$dW2}XO?g*4W{S>P&f_|HifyBumGJmgMSbIibm}nWwmDMO`UnPa^Cg? z+!J%_;B|X*C!|a80m`(&#-6oO*09lgjWhzhWIZLSVH;tlC3xp$HGB#+9H}LTv*$YW zd9M8CYp6;7Su4H+TlV0aCfwlzO4ojhm5xAiU4LPab*jIaPs}juGB$+XLPa{yF#S_X zdD4_)NXhvRBzbu;dpj~mC4Nh44Y|oYXce~18q=b{0sxR z!A3DrupLry;tT-VZD5^pKJc8F8J}^niQFG<6DdM*vp#$dgF`#6QF2j&=j=y?26>g4 zl&V&fd$zr)ICL?d3LPkCq&&S~%p#Obi4RMN3A1=hzuZ8ct|1MUtRp7kG<`!Fp(R$m z8HBTpIC>q4QLx4`>CGX6nYVE1u0^=1o8{cK7}uI<=;BELH@Fx#gSf#2Z0W@lz&_7z zfhXTu1{$3a*)@p7NH3U7a2i~)di!f>g?(e7AYp~gN0Ja4!0Jrs(I{a>3Oc0G;FSZ8 zU-58!T!d9(%vF8_{fEbVkS>suTx6Al1hQC?>^cEm1FN8b>l8g+ZipBnqSS&eqpc)E z^)-&JV7lTufs76;6NY5hsn_X2cBg+hjSc#PX5p9sR4PLWZZv;Z+y-+ zaRj4;wiJ;UVX29w8MtuE8a$LMMgp!74N&8?tZ-B*Rl%1KJmNZ0#O^VxFMNP{v1HZ4 zK$sUjv5;GOE7{42m@B9eSIFra5u0VC!Llz!X4Ow)%l7s@55h>^heT^DT7NdX-5D0Y zJqHD10W3Ng#HI*xm0@KYnX{kp4AwYUki?b&B}*utbROU zNZMdZRX!fqC|hM#+uomgNLy}0Cz)$BCQfvY3vW9+uJ2mVt!}@L*kcpv ziX_4`vgIs>BN0$IJu3M{&BbP>p%K@Q(V#x6ZW!d6eZxzkFHDIE!T-dJD22VMr_ln6z>S@T+j|qpy5wM`3kpXr9`cvtYUol7lZ;i7HVb_Zw9bJM9K*LilSV? zq#)8{yW;AFV1>-Z_-IxZ{sooP4^kk>2qvFZ99ilLd8Rop!Epz*y%(V+(NHAvg3_3t< zXcS^o6H?2;&N(6?RtJdq^tyN?Oa(aN;&qJPA*Fzm)p@anyqU6hWY_`_I4_CKX}Izk zJfYqT9gh?w5-+UcMDPi{&PT~6OLaZ~A2KPbAg0N4&z5xP%#-7emXqB@DrZ zS4$cI6Et4QCsFXGl<>Ak^?S>%(fP|Rf{5}F#eh=+8sW=0s_9#^Hmzd z&iMxnTQ8*7O&4C?LMjZF{5fWzEm*I}zF}rO3_u98cY+yg2Dd$h*;#f>3MbX2!Ab=a zllRjoq!fk`gMos(ka4P=B$e_7EEACY4R!yxHKrS=Wq2vVY*2zM8Ir zx)Rbv+y*S@%UDe&c>j&;zI3)S14c!*(kl4T>nDl#kz|l5g9mYI+H}DspE7mLP`Ri^ z4W1OgG?hII;Y>nXxn|IUy#U57&8Rh{K`SxX$>>g>Gj;I8e*ukkgVr4h1}!21GHBfk zMeT|Z%4{ebtu#s!Y0=?bDY+BlrdDvk1MW2h_n8EDRHMVaoUB#{)Dv(3aJR7zrzXSCG^<1FET+)mvE2+7snCnyt9zZXmoSI&g5-A-e7Mvn; z2g}`9P?i)IsozQ6=+_MW*;($dB+@w<@ILP6WC(U;^E2`^~(%FKw$)tA-s%h zV$>cYR=!V-uo*D8L5| zT_7evk%&5Hx!vz4YUV687PbO`PZiKG?_?c%GE0ru+%ziW^F!+iiYeiyQquqV;&oJ8 zyi)U6yGVb66xX$@>60sFWj$7|eA#-L0T0R&47xW#T^;*77qNU*)Qf)ND2ChgnfML|!hwt`!aXFIl=peK0>Sm`(z zTn;9E>qg|ECCSz%+^|thYn2hxkWyvDx<)N|jw-XsTYreBkP4}-KFE;ZHS*S4L0`ady6hHQQzU4)#WA#7-cuH#b6m1HvPC z_jMBMV!@b<7-i^j@AwicnJEpY$1)bNG*0*sB64i|}F}BNc zE$o=4I3P?ABDv)U$cTor5NNg#LyxMf=#7GCKZK>FgRMhb{lS0oiJ+Kh)XOo`W6wkn zSUcAlMAReBNB;r$b@qi66-^y}8p+N+vH3qJ-DQTB+VoW<#i0U!mNic(|ExUu8V3EoQDfu zLaoc^Qy*+!RL|*zVAS&j_t1*4Bj;u#TWQYj27cKv@Jupq+yOOuMfOMmG-fnL=JmE4lC}rl0%pJa)UG(w^%?}G#|5FL>Tk>#heH5nyNzjrpRXiw3Kme!CX z!+#{4I;PwEvIm!b!|b)e9WUgkBby9afIP2Jo_rhDY%9z)_oA%OP9{A)vWuu1Yw6}L zvFUN56kfOlUd+*D$p#*+zKO&FOfUPbGGh5$Avqrrh3P>%Yp`XHIlp19xrqd7etHQM zpJKHg#Q=&xema^pkjOb8ug}094AdOC9a+?WMGkOE%7m2#Wy&=h^D|I`Kx^7l_$jnw z9f$>=QhEy9+=*B<9iPRf4k}QgV!hyO_bvgAFD)>8rV|jork%!M((OK}e%#QKZx@@M zL)M2_K<~yiI7@mgGy5A(;aR9W4bDgA856CkTV#~QD5#Ey(Ra(Gxo9DG2v+On;hQjz<*eV)rS=`+ z&Wzw3&504xp|PD4i23SDf6S=?**yftM#G62Bx(H>jmPAsND7kxb$OE2zO9HVUt@{I zH(xzMhX`SkJFOwj;2#rCg9-iNw#HQCk6S;-NP|0x|;*?SQD(%UP$EVMB6 zj>atpXDTbn)|9Gz!%FtX*xnb~n~;a)V3mPlI7-0u5<(nE5t%Z?;XmgF2Kb&w^h8PfuVmo-YLQd7M^^rEsx9K7+`dFfd2v z(Pr01yhk+7i^d>@Fr?4xOjKW2bND6N$j?)(!ex;PF*!^XdJh(@Kn z<{H@bg4aMKG%mSw$D$Dr{S***BvTO&8;u740z7{eeNczGP)rr%ANWALkIVoKkj+b$3Mp!C6VOFVFDM7=YCqn@TFub z`$6JTaujjdaw$w^Q!gdW+ES7NixO9vaa74;3~wL>QKQWS)6!)^4YbL&z6cz`BK%{h zb5d-@!w>Yy;hXM$fWvSjXHXUmhEe*p=^%~%{(sRP24ani$3iexnOr*PIL`V=y(zS? zvsj2(<-#L!DI$`FV8u~POQG>F*B~<}tBi8t2`OT(Sz8XbJV?5XHtD!V)h{}LtEGcT zgz31-3=`R@BK2FqJ86G9*#@>g2yyKUybhl)LPf;_zrJx`{!J(caj%$M$Y3bKek8SF z5z;zHXI;V$Nhd|gk6jgF?c5FPTfy_O2Y_!m_{)u2NwoBa2}S*9OtQHZ;?2+xM@c9r zmjc8JF(g&V9fNN{oS%m!Vf{gawm*agF7zTE$*@V>GuRiDE?KIVWB-KY8nPq1GgOx> zbqK+k*=H5oIjJqI{L8rX-hB3X*4=-G;>Ip7T+_i^LyG14{xecrlJtQf^eLtXghA#y zA-oI8F3lvdd(j^eoZfKl4a}t~mOCZixU&;WeV3XYqE_CUuRJv#OcpLk@1^Q3xk8G? zuqwN7WI^B_n1P)B8bqyyFyea_99qTdLqadCm#&b25IB~3E2-jv`K>wAx1P~2>hk_H@FcyDU zVBJE9eV&7E_!&xfosjBBj2@a&!U%mzugTP=)H%o}yLa+Qc)s>Tx|sRw0aiE&(IFd^ z6;yY&>xj?+l+dE@4(SBNifQZs*Jars~b)^*RvF^TMaaZ28MxSbGG0o$*cCjUIo)Poz z9H@RbxJb!0qVx;yC$R+};>}Q28s8wdQ&mcF5ezl|3W-8?BOA9A@MX8lT(y{XP;b4B z>*tQ+ys>X`eBEZ6x6D%ab=Z%^UA~B^k>mF^%e)o+Lw#Xk5H0=*Om3~X_du>RW~s|( zE~`!ithfKY?0#`?cmEK+5M!9@Y@;{^bBpEk5mO7q2G+3Eb6z%jXThAEFE3)=^n4vO zZ*nRnKl>!7*8nPwJuPk>!f?c0jjt6MtPy*2CN8ap;bd!jtBrr#`F9Tget>^_`1gza zdk_CU#lP(zQmJM9`!W8#iGRPyzdQMNh<|4VDdz+HyNQ3l!oN@OZ|ev>&Ent7`1h0i z`#Ju-gMat(@65ka&L{bI3;%wNfA{ilm49bpcS?J!3TEBDySaYxR%8XxIOe?1J57PsXnld#c^cQ>WRd+tc`+WyVaq zXt&yDT{BzHZ@1g*bL?~N^YA;}ey#mFo_@VOBlbLcbA$a8_W7AN-W2^!*9AZUX4DsE zlk}xo?qJc57;EN1BD4~XiL+94t%+-`a+yVW(1hKAQp8k!7gz^kU-N0-Rm!%!yCSf( zgOYr&ld=T{l- zy+0q3TmA2`p8gND%4F-d_Q_}IyD{IkzVKC?7H(Fj|+kXSv<>9UDi zDTKJO-b@@`+)5j>&>%Q*t%a*9Kw466cq!;%*=A7cX6BPp{p; z9=2zYjZ$h)!AdIIk0*8|uZ;G9Y)%5O|{_;{r# zz6fht3Qyqy}FcVr4842?u>+Dl8_ezoA@CkhYhn@V$H$vdS z1W7evwYJf|nD4;OS_-I%TPO??l`Vu#J1e@MQru_ZG6zG0j8Yb_BI_jeL|*s#B>Cab zr%;R1n7QFDa)G+6xp7&93CVxKKb+Kf5*oqXa=BTlGs_z+Qo#Drzf&<@75X5IC@gmCjkHolXSEs&`O5Evuyzp^Zu}XmcA1$U`<8#{2l0X2IN8CRi(4bmrO*tb^QVF6Bwv#F z%GsnJ`A;VaowLt1`Ww+c(#0J;N&b^bpvmS2G}<^uN|(5`nmSN8+WH`JW&2sbmft^= zRHT>~j>3p|M{w4IdI+{#SdMxB^H8KxdNv8=5C;&!7H%F8BR0)Ojp`f($zf5-b6$s> z@CNrPg{Rcz2$MrP{}n1%KaHQP9t(Cv5NC>84{~-e=qwzno=(9vXHZM<^Q`oQv)gkI zdpF?XYfeAb@O~J;+iKFtT5cirJNxagw1=|~$c2MKSgt>!Hir>bg?Jmp9fSq3sfH>p zJ%Og63ZtponTWL^k??zT)(~7nEn29>dbG#}gUg-W-s#A9{c)*1Dfk(fB>nym1;_F1 zHmB=E&2-lHd){d2iLbPU;U0;$Dn?rkCy%3EXXyGahws8M7*wA3HDjCoFOaAMVlhUJ z+m;liFrbO$0+oCiFQ=siI{+A;dR?0()6veYE@q#5>8 zj9+O;!l5&_>23NjIBGMM+WakkwB!p?hiUjduoE2~D8MejR-j0K=K~P8l2KnTzlnfT zf21WPpU>6=p2T-GSL^CxXWIqQ|O7>i1D?gWPb#9aryHQJ%99y z=UnO0^QuW`HA)hxK)WbO+=?N@k;L^hq9{q!?bQd%$zcdJ{Ljdt_HPN~@EFN}e}){s zh8F+lMIYUD6Ttpd+DIfz>kt(t&m$58G6fF!C%ryz;1>g{rp zcmzLml6dFiNa7d*5~A{iqv$F1X1&WgY48(B;;8tOT9^NOq~V9O01Zb;<9BhSA#N>2 zA9&j#^*^cdC|M?w$FDKw|2BEt6W?w;d00P|JZ?faK8`$+u6Q1=@#)JW9?!-732-Mv zQ3LV7)U|#Qd@?2&kSn)K4GRr0&o^W_8*J5cq=q7cx3(%$qU5iJ+1r3D!9T&fN^VVNJ_^#>F@P(;4a~_vDu$oR3ewrrS@>si@jTG-%2At0we+Hv^$%^Jl@hN?zbAkI9&iqvE!WVQ zXhvx$Vr%ROi>ieuBvV;cNIzA+5|$%ZYM!5r`;#FdseyakG*5!XYd}rFyH;`!v=V?&ZJ!-)-)- z!6TodXrV>wvTMOpT;pce>3;Q@JAWqb=$kL@Xq)fe+8u1ZzgWEik6EW`evRz$U{svhcXZTWRnYPV(Nda4U@-zX(ji zMMt}1f^~{J#^#AT0`tm?RWr3&AI7k0&|@gc&NU9a`sK2@(i!rrtrT||+@C?&AG!a4 z#QTfXfq4k0ag93$9p_lP4#!X$hoQLRowTwd^)=++6|!^E8KZYE?}?*}4e(C%edy?M z^cUZ+DwHk6y2V#|Zg5kJ{^1)OAvg8G(Oq1oewChgJI-%#_#FfBcAF>(aeP@Om+t3O z4{N`;ISn+atT>6#em>p~gg6kAkb%NAPR^&!-w*uG_bcW)xbO6*K70gTALi-|xWdnT z&h`y#Mp(0@^HI33^!0b#{Nj+rJJb_%(V*TBXt>Qe5Ioqk z-xg@^()jF(LA7QM0b1{BA`w4;M-E_LKYtpf+!aWT13Y#mhOx!Z8)^)2GVUibR&Tg^ ztw~g#$c9(w=ywEw=zq1L7pNz`;t{RJh*xdYD($39Q+M@OcyvXjKcvJ-zU4io^)#H& z)0(SS`oL6`uB80vDJ$I{Ur%uQKBC#*6ZwLWe8QnBp7Mz;-#Y%n__5c*AB{VUxIq$a^^P!;XooYTTHql<^ z)=Y5S>^4YaE%(jHjjVA%tX&wX%~C&)P7Cl8bj~ibOo=)-Aj4!SxD?=Mh}15Q)Gkt! zcv(cl%`US|S@z^LiDj*FnJrSgEK<8f?Z6|1DN@;tDa-!*Wo6T$fk$fdBDFc{HeNQ9 z%G#$a`vfw``I&N=J-cC*6vzzZuL3j-N#+puGf+gslzZwB6aC{yC~=Z?)zA+3i;)^@V+UulM>&&iMW(Cp!=ENrdeqSYCfh>!QBQou z8Cs2zn)F7k(l1@T(p6Jc>Y&89p4zDewlY(zw@9yb#?@;*H#1@UT37#sMCL&FzxhiS}+LQ(F^Vgp606U%k*OO^${;zVIc?C7`vT4X!V~FVKaf0-+R`WbZhM`;I=f`LMD+BIfyV!W8T28B&%ZqnI(G0 zD3-V7f&0Ve!Fb8M zC}vuNuzws~(2{p&(%PT}E(T1h_5j9;+PBRY}1dlG==(M{&*+s~CcN06wo=1Qy8|cgpMT#A&eRhMO*P zWo_WDta9Czg%~8SiX)nZvk;s)jqTi(1#ROn-Q+s`)xXrb#obp3b#I{=bJ@TGN=FwQ z5O>lKmr?W%iKGXW_PWj$(xtZubL|g4&Yofi?;*L;PD=dNZn~)-K`a?X2eCFB$i(pzGh8Vx zD>is%tzg~G($VVE&cac#iMG%yt02BkIs2;bVTZ7}fZjIK|2R$uJ0(<%NWOH*4}or# z>TL$^OlabgZvq>BwmyM^ti9zEe$`C&zhUbPP?3SQ~D;yjeQaBB5EdDV?EaQ3AXG zBv7;h5W?wfr9;Xx0~}cOmfRmX+T{9E*==iYacN#ZCzi6H8X(N-USWW!pbcKYF2pSz zrIQ{z#Gm-H{X!T=gIqMCVzOTntAUftxbZHq(}>6!q0K)@~sfV z)1z>zb0u_^5GB69r9+qraq~(Df7I-WJ7|WsO++iHh3d?`C7jbM1*t8c_z^{~;gE&4 zmi0y+X?9|R5O??pbZqcj3SPCcW6+SL2}><1*MbxgyE2hngOlQ5wE>p~D{dwCsdBGT z{7sMKPa&&^Uw}sJ^0NcZa19QCDZ3wzR(4b^fH53?NzUD?jM3E3#-&D=%hW#3h=Y9y zF<#={QggYuH=Ii$h=GY#>^3$yyTuiKaF4n=u-$BB*m+bexF|)EYo={zrI*p*_`_Cm zLgHaTn0A0nT7I=AxID3!U>(BEH;5P+z^Oj{A1e1@(P)NK18DKR7|xO&gyN0@sET4R!!g_0hpXhElX_- zkLt8zveBY#6?%abYGVLglh+FeEP7pt#4+#P2o-Qdz={uR^bGs2WxKNn0xv(X0@tvZ z-^0#2`)mKgSHxDF1W{?sD2Od_D0a`g2;=`N=48G>u@s5Bjg{EUm3&_gWSp|X2y^9m zw1az|r4XDK>Ov!*_42z7gUH zQg{PM4~r0L$$M%g!Z?2(8{*{YPBG-w=tmk^1`;|)XI6UEa&qNUZ0ehYy+}Y+bSC0n zpSbrB6pCCN@4kXgRoL7E>~Q#&y70;d@Qrdevgg3isfEE(Y>jJ3U7t(?Kl1vm1lt~j zIkys&9fz|!I0izYarnevc5)#0I@$n4)+4(PiYt5Bh5pkHU;m#G1daX9-V<~{V+c}# zR}2;f)bC`Loz6pI(=v1feB@?FWSDdaP`$YMvq%Fs5VtHR9}@*F>nmV5lk0GV$IyM^ z?y+IQW`tD(+F;N}2o#=N;cerJeIwo zUng6yg_7s$MNwQ1UN|XSTv{Klo>`Z?)HPb0s)Y$bzrh(XyZgm`?W~(Ljf>fXl}>0A z9pV~Sr|g2Vi5S^Vj7(gEZ$COf>L4hh2a3Oajbi!)lrBU)>md194B`AIPqRPx zLC=t{z+~xSlDMUWED_)h`w>U2hf+Wdujr&GlY_9Pid#NQ{Pr6WVeEXH5i~FEN-Ywb zo(IsC!XcIXry@nq6!zj792iCF2A)(mA)TS_Aqg89nJvUTA)FOAB!v8@t-uejk1hM% zBY^#aa6bgnDWQ#|r(C}WIyq?(@CNm;eq!(Mr^gy(Q>U3iqgQz#Yk4 z`&mUN^8!f$=sh5^;4Kuc@eVzsGbe`lR`*q4rm)o(sU5t`5cP<(6!5BECxq~pE{ugv zq^%#+voc$NV|w%<$qO3DC=F!mU1Xbtk_oJw>~;SKLWug@!%Q#GNYIe%jIU?`I!drb z?}pOCifJyx84WlZNz3-OSn#$q#9KQf{xU#Y7o1o@se-aN-FdEN-tE3kCsXh8U+=px zn2iwn=oYXD{v*M?POy#+LdWyfy~W>8xa zyuiRW#n#OAVw~j=@m_mBY$yjOus4p5gThgk@=~3!-Smz>oW!gCnx1lFATujZV@EGS zyKG7>PWHvQVxn}IDDry-REhP8h>SecUBV5tUVgusfQT?!kg(7HVS2>0CDQbLD!|H3 z;x2#0B+HV@x-;r(MFk3Rea{DYSuagzb?WN;ljJD71L&F@QN0k zkW~DTQH&417Ux(^8kkN2nskm;|4pA(@wrnpU`Ab18pp}I@jd!>4kCWHPn0_7>6Tc^ zfGE)>X@w6#%OA~2XT%X=lpjaPZ-@2uOv;y&snlkQ*8E=4+A;(oS}9Hd6E+Q@1?@Hm z@*7FBRt+H+?w8!%CtANX`FzU|*tV8+%MhY>wA|m)ZkODB40}qvKcZs&VpdxW+t3{U z!Lh9u*mg9y@^#uj;XrIj4#F{;&^b)l76T5DQ)*2DAEA&xZrn0XAwv8cdsgxT*iDTV z1~i~ZcNtnK*3dgcTi>jbmPrQB82n^}Zyu}D$kldjrwI9vv6eKJ;1nnID3A{LNJ?#7 zz%uX~$})7l^M1jTLJn0NS`YROOsz4uz6mx&33pMGHFJw;Ya93v$+ADA+tA7J6g)1F zL>ZQ!fC^nR3(3XKUv`-`m!9tAE1R(j?O3TrBcWJG!8(E{M$!p?Y46X~v&$ZtZ$g^8$^#CIb>_mqy97Aw!hICSBrJ~t>#kLefur8-x zH5REGyMgrHNtcY`mOGKGY^GySm2XocII(*j;&?mN7VgL}V+;Ls{&t&T3Ll|WcM~0U zi(@z}tp9ZcVH(tlbHJQlM8`r2r1$ty7_-u{AGrvQN()tvYI%zK9f~VLsDVwoi0x=Q zQJ$aZu?`vYjkvXD_p(l0Gt^Ju;DUy(0f|aR!hgzh{ z)OsxIsSPVi))k>t25ZkoaIs%aWiXE6>;PvcQf=4!a*C+iMaot_^dfaO5ka)%Tsmt7 z?Pd20014p%>Z?tQ!4FHI_CD3w%N4xqyDl7awviZX?(|q%=3V)AZ9wVE?-&sY)gvcd`HuKYTSVNr;u$s(doA5@1!)=<9pAP^!%NtaSx+I-*C%1 z1YCbqJ%oH2dhPL%g;Oi{K>8AP0*7x&r$W$OO4(OT@{@KG8)+OdgLL9{A+9uIhrg_( zgNBr6Op20;n?SP_-{_yA7&dNpF3@bzf3p&+qVz%+EmC+M`FCbK!4JwHzhKjTY^MzB zr7oh|47u5aRK)Mr*_lEaKvd0?gS|kl5cFiDbkS0qu50VyE_kg`<1i%GUn&bKIYaM!|ng;zrHF*5#?c7Y%(Ry_P@ z7-<3#5qALK%HnU!zvH0z9Su_G(HeG+)m@_vdnvC(lxV}hn04DDe?!nlk7)heQ@D{% zhDGc07jdV7Q+%^qEI)-6n_p|XQhdZ$DL#tNQ$B-ui>p`6O5TLr;w{ZP(HJuRB$--; z^%M7ny^t>`GKeCBVit}zt!)?Ay(5+eD#b4!7uWrPE|ua%F#PZV>A%>%HQv=9lpkc1-LsGJQL@GLq-&1p_^&m`cGA z!JslkX$Nk|c>P>5&wJQ&D-l&?Wh`F5lI4~5RtkP(DWxoxeX6*-lWebl;k*6{ndt}O zu1&}{ z?fn=stH(aj0*$!7_wXboQlt(R4B}=pz^fIu2tW5=&&nlL)kOLNRS8iCjC%nel?t%UJHN~~RYDxb^cL=>JLS5?W zQBByl;|#v@Pk&k|PsN5*u6OLZORj$n<~5PxX~-*dTk2** zzBX=b-cLEaDX7L$8-moMZM5$xh5LzNn%elxIOP&u#p8H_WVv{p&B6{< zyzq=31T&O-u{vFMD3$m2Kz66I&tnecX_ado{&o?t{+V0^yDX<7ctM2aZ`g!k5DtmE zi~t&s*NO++#Oezogi0`ZVs${w;ktp)_jDU0JHNJh_PeJzhQxMfY5srxd@cl0VRsnf zxUxIwd?ZLEGen97?@Tt=e~oo2i_alAmBjS7%87~Pn_+3fb5>+xOGt#V{^sLP-?((y z0KAN*0k(R;B--wwsoZ=$?7~?|2R9QEIUUcH~SsJhoxd|K3msj&Os8@ ziy%KJT+mXO2fnscw$_9S?9gs3GWyttbJy@wUfpIwo=mDno`*Y&TxXI3W+`a&{u*0+ z(y2yt*h2ncPXI?PArVJwy=%sx(&g3fT3{}ftxB;`ehQWZGwQ@~jM>;ajnysf$~uQe zGlJ7(m@H|_(83ZZHHXwqMEd;YcI+rd{2awA>i~$VlUjU6I+@Q(N6MvTXAR!zYv|&E z!F+_}oee8*5(g7ZXWuYjR^&#$j%&k)v9sg!g{@?iT(8nGO}Hyj)=xOY8*Nd25TTGL zo|EGYG>isv!?@qn7@>?Czos;ru_nZ_Us;Ct$2d)W*ueoK@<;a}xDFQ8b1QJPA*GsG zyPnjxg3JvjKYBw){JO$sIfafJhn0i&t)Vx}i~UJ-b&co1_~CS^4Lk6LT5LV<$Qw&F ztbM34Lc`d2qf!hCzt|X{peAwmioYxOhqvYVQ=!`83xW+?ujHmG4MuTy(chIE z^R{(;sS|B2MPdG!!kkG5=lpNoB>#iCk*ndQt)ze#?%|3!ErXSeMNrY@ir1VS;%3_P zm))VJgG?{)nJFBOOd%GI_^rJFj zVk>wq=h5o7-`IyFg@w_vN%+BnzPL2WSCYpnh?ad*?s6m*q!!l>P}o8Nj{TOK|%bEUlQkeSuL;(WLIw|Y$> zA=EfQovF#AqFf+G@k`wO+-@2(D%_ofE4L;$SaVkuk!}Bwx)I_Vs$;%ZL3J-`CR;$E zPfdb5B;wr(d-Z^N2koe#vtHy1yvNZ}ORuOPO5yO{`>qD>O2h=BA<}CQ$xL5IkaU7e z_aR95{XiM4y?jcUQSzti{2#1TxyMYheu&@%mmxcV_eo|(`ww{zd$<6CT35Iq!u%d_ zcW-movp6TZ;a^y(k2W9ek=jyX@*nme<$f%&?j4g?OD4Q`$op52I5`{i_3^{sgGJ+# zxI3?YKg2$Wp?-hUanC$W!XN5?AGy;$LZ!0jdnQm>#hw*(-azlh4py;~SWDrafXfG1 zLzMbkDtyf4gJZot28^BWXutqy_-a?<`#;uG^>{Cs@ywDRTXM_U+c5XQ*H8gRFy7Lj z6yYtKVhfp2VW<)}GrG}?RpN6E_|fPGY*e&oRcw%(U4~`kWJ@I<4lcLqwt1~u^SUC{w8-6>m1Te zLRkMA!$`pK3arEF9cefYhYGBecq0N#tz?l!@!wc>3S)|8wlIeHk2o6x=O<=nBy*uz z`GN_CrgCUB1i~;h)M+v6qN59<7^;5@5D>Z}fcb0O+^m6bmDGvt$GT=eA!c#SK0B(| zvvUAv_D4|b;g1DG(Gr<}5I{8FAX+WkB)4VK;4GD?1Xk@Q7tGc;l9=JIE%>3;NP75_xAMPAI{&_&Dw4@fR5P)GrLoGyZo0!pmNP@%?rU9#&gGY8lm@ZjpO(#^8AFsI2i1y zhz1dV(?M4ij!@d!k0nU2xVaMxT4^jz+`5l${A1FXN!fEoZUA=aDg;1 zw-Y%i3YXwx6#arDb_$QITEpXS!5B=7m~HE}?*1S&fx;skIBA1IH{3+X*6e%skK(Q| ziZCivb(R2^9x@l6VEyXPar8HE6c{NSV)Y0rKS9ocj+@boP0ysF;c>}l^n3{{1UNo3 z!ZNnfbz<8AG>PWwhj?@SXSQ{xUFtuhO$FQyD$E`@GW{qZQ9mT^3d5+5gArV6|A%N+ zy_Fhu@kRsEX`BFg0zw{${jFDFq5-dlUM96o_|+s~03kO=FisrNV1x$)?XiqTFhpi+ z+;#v~{5Gv!ZOmcbykfczZ3+nA-W8%|;hj_I6qyt7lD|r}mQw71?F9_|rv+3SF+!VI z+{kc3#EJ>3mQL%@FiaRoLnJgjcParF{*PUuw0C(M03hnEKh+;Z3q<1mXhbcc+M%tK z9zoU8hbCD4OOHrj9W-hK6r1k=+77>k$^O`x9i*8(0!DP%%nruQ>=A6Z{RcDqhah?b zbi>SI#e#Uj6TqM=W_BHB7O>DJ*QQS{Mw|9FGi}}0*&o!VbWmvH5Y;C#hCejyhvOQe z*#w?qDzR{+SH00x2KZD0gX?K3x5I*G+1Y!3de!xO{?3?$chF-#f2h8h&Pp1#VpOeVrKP24@xp1incxSQFSIG9ob1l# zE>I^b0(DYgym<|dUpjKx97d@Vv2e;!957Lzdbq4 z0d$M%n50;pQPd7kqLXx5&}W%+PGAsq>AxiZgwV6*!u#MM)VCyP;|RdZ!LdKNaHVqE zg}2wXnL2htI7c+un|2Y-O5P`M*PO_dsL(;Y1YL@!W*~!lN=1(fdw~N)!d`4`M<&cZ zM}og|K9N7J;lcsJ1q}2fT>JkyoB&aCd~2XqKsbdbh^U8CfD|~*jEI_$B9oBf61enK z6#bPbul~P8(I0(41CH@(L`sPT9-J=y+L4^>2NsXa!CEg*=%L#$(P8?#^qyEQav2+x>Mk|(<-5&Fz$AUUy zmJ00#@PZ16W6>!7?_9*2POG_N1PBVEzypgnRV_gE!DRJC*gy2nU5i#`XSXYsMTm@Y zc5b-dw|;>iQFXkT_?R`W@7d0~GLm4)gk1!O8D4~z>@7z45Cv83?G^XB%(?d>l!!+X zHJ^W-0*yph4_vP+x?xN%KsZox&CJ&!*%8*L+gr3CxlTNcCBagF#h}-mZ2LPb%oG%j zmqcpkI>VA*T`OkYzzy>qqV;An$4f&{A>ph2E4=w}>v5}zK?`paOZSWG+Oft_u?AvR zsPGA?oml4|!PB=U9sK0gjr#W|uzG6fcJ|cFl9n+<;GuQkI*p zCodzSFWY7Hz`BG79BE&ATLGSHT;R-YbM+ReD46wBSW$w1TPnY z^1K;BJI_rdS%R!|^0!$UYe9sWYg9m7US8egt3{EWXI8eDD3qh8h&rT{TGinptt5_V zYN@3y1q1-+0Sb)8biy*c&Cp`x_I(Yi?QmvdS1OiZzhEvqa06q#NxIwUy#X)Cfctg~ z-9sv7z8U5RyEjF9_q9|XGI$muZx*&(dls<5g+Qor)&~H^VDk>Q_C#SrX990Akm}iA z1~wPgdhRBB8#cTZj;JC)$$u)};$s>h^t5V`66#G*;PIYb&Qr(8l8W!0R~rs0B42A14(M+M_4ffHlmWf!qaYH_8Z%&hDzvKs{6_TvKEm^z{@PT9 zHiJ~#=_P77&aE3L5I4v%?%s|Ll4ljAQtF{=oYuI78E8}o8Y{KK6>NdE^mQ`2vWqww zs}PlD6eG|9-s(xv{UV{(7*TMs={>C!*}u{2!p>#5eT5$S2Mx#vDMHu4hn?Jh}+>{Y8L;EeWagP zuD`cSsULc1yNsh2OxXP*m*cI8LpW7%V;09gM;9;g&~^n%xggh=WY}Lzfa(Y{8%GQy zFhq)^A~QKbP*W^_e1&-N07bl^NGOWlaLPjQT4jPZMsIB_49Tl3G0wy#NWLAXF4f-w z-$wndEZ@X%K=BYx+Q3nF@ESLOv)?TQ@Q#eSPtpd&e8e=>2sj5C$KXSuHemi{(i;xi zocWfTX*fLENGII4JM*nP*9IKzOdBorKeQ*c-7UT6E5~*|7_t5*tpdIO=~jUsW$d$6 z3vt%AntF`eq2b{~G>V1ZpO_Y%Q$)4I-kym2Xm7c_5Q30mzIE}Cjmc?Hq(D7y{EmgWk4 z$5edlynP;}<~&+=muO9bg|DqdoMlup@a|G;!zb_(45ivCT2m+{Y8I?x`5|#u4tz|R zpii9Qo81PpM(0BiXGqEJ*EwjM>dO%*}WW}?=lY5M|c6hZntMUY9+WvoV5qM%%Tig>Io-pYQi@8pW|iSy0X;ycqd6!yOo z#K|dYJ$CyM9ttq+yN83?)d6~t5#;9D(WccdmcVv=u+Ayci$Spw@p;-{>$}+2CjCNA zYVc9SuVAltd0u0wUGkG`SpUFdvnQOmYPG1hiHY)NvSDnbt7pl)!4_F!j`0QIl^2Q; zA!BWL8PLTD7he|Gn^

vxSKE@XCb4k?6~;#^Ul*ylAl!sX>PI)f&%5d?M{t`>BY} zx+~#f=!!J)039w5QPKW}YTz)*6IMh|$o3Sf%l zy5$K1J3CfGYc+HklXcv5yF8SSw57Ppb)DqO6TEtP@4R|@{nMaMINxDTsV!ZS;IbD2 z(jmG)cDr~+RlB7-WFDv6C5U{~>^fae=hOd|o7f;vXJulC8}w2Q5yoCWIFAzo)g(4iTE|&XZxi3*Qr9dR9 z_8-t1*2-C+@?1p_v+F}vR@CEZF<&O!If=hm{IdQGqmMVrmI?+vbvO)v3lraovr)g`x^za+1= zTZ{fl5Si@=e>(En5h7nkh{iqKPvnC8t8(|ELU)n-kLBLW^yB^Ly`Gg7A=zGadfs~( zZE_!y=F~5w*xU;tJ2s$HLkE;*)i373WJy3;Nx!JjFIrDIWOdIqiO;tl`yrVmrlJRs zc+fod_2hCwOSU>R|0O7ErY@KD=TxLQCRP7usrtDvQf3{Pad?lukXp+{P$?1v% z?`>-`rwk|27Wa)+34->+CXj7@*VZ*Hg|PhpJ9xa`y;;}A*>z+vr_ zCAUuFp+XI?FS&$+*)oKn?>b^2UNL^~dAYbVWZd^DF03!)R8xqrp09J>LASw+jH^Ap zp~Ky4w)PS)g+;y=s0umP4ElZx&JWB`~+17fobZ zE|Dp@L?-A&LKl`~wN7L=kfk4O=)>$-x;np=3#ratE(D6tYoc6rzNHiS?nM*%VJ?x5 zTq5`AL<)0>NTcHJlYU3in&78%34S7%V6jecPA);>%8JmhAxU(@T(}~fVNH^Xjjjk*^MYJ# zcbhZr`wfLLHp!VnZoB)cYue@lYpUowDZ7$Igo#@ z6ZoS};NgoVuq~Is&vOapy8qk{BC35 zTpEw&($HRkcWk;KjrVmLwHHm}8@V)Ab!aY_xNW}34SW^f6~Dr_&cFI1 z3;Ei7U*>x`&-!>bz;}@EKG95_^56Bz@pKnYf5OEddrv0{OZQ)fa9V5;?cD^Tgm*eT6hnH|PcS60^ zfKsR@(o2LjkLC#&onB5}uqpcsG=@0ISmB9`k}Gm@AQ8Z6>7jZNqSJ5T7w0ACNl{5a zg_k3{#Ai7N9$xAgzrmC0Pet6uW9z4na$)U$jNf$oDXvya|!p?A-$YTt_X`QGe`3z2A%a zE&kd6E*_OFAznnZyI03j_uMWyxnyhWp9qeHNwEYkC-~QSlN9K9S%k zW(uXRXQ^D|`UMPE&G!?p^vyAz@V*50tUWJhH`KI;x%a*4GS3)zFs+Rk1do%(FF_alaOMn`$gI&xmIqbpX@PXrExW z*K>|ni0WvKdw5)kE&h~fHt>>F8_7)Im4t3A?GzT0DpU<}fSQLp6~G72_<^@Rlb5`- zQzU6RiCC{yUx<1FkyU)Qw(UWQB;IS!7g=ZXH5l$DuhvGh`VghOw#cZeEfN)oUc0hL zCqV*C03#CT$eXhgW@}ues1*@wIo_dl?|J=Kcg|jdo(!u!EC>QzSR0vtj|71Q4G;5dhX2HFhRWAF9az;WB)P8N}Eb)Bsjd_JJOSC(F*tD2x{w^H0W3G*4;@a<+(j^#NKrGaiH+loD}i>uWZeI71rn zug%xa8#9FjF3^F;;eav~O{9YuGC@@<}eA?exV%$#lVBm4= z<`RxJPoSb+_?zpbKi=wc2UGBdKuU1+KwWuJi@JeKrwFlL+$vP+fhI>;ehxeryFRMK z31P-P0zz44ap>THxjqs=myoGCnUryjS<^4>UR2J4@Z{^b2$}Z!jDB&s{wkvSz-y`B z=gAnJEJ-H|?8@up^ff+^$@c)y(LiJb=}wTrG34pUfJCsq=bXOG`YyB+_G7(M<(f@L zpVw;W;7jetJTELt?Y-gz49yw(;|Rb%Mq~nsR&unk9&6KDjA%)m0Lcj|4Tw{6P@ig* z`;${p83hx=YbttFigtwR$=V(O$uAi?`39Aq_Cf301DrNUizlXOJxi?S|ByO1@xVKQ z=TpB6nyFjO-*u7fK6*93vtmo0@0p4k*tJDy><$Ea1dS1F<^HnY0<0W}_XXlF-WtIF zne*xs-eA-FGe;w+Oo-JIini(0TOs3#R8iRnDW|C5L_r^Ghzv8q9X|=YsF8Yia@otN z0i%FwhYJQdDJOXf~AC%fji+x~nOLRTHsl!d6Xjx<(deUwX5wVe(0DmP1bYnCnaZBv4;y<=M+h z*;d#ETdILrAqs$BH~Ag|WuSpmrz*YzYxV$_H_ zNP?&`$hJCQ7jBI$Lz|_aaO(_FJHT1=Gz`v{g#}5mUl5oEwHCyXj#FsWtYCt~2X{&x zF*u-vsLisJ&-J&gQ+{SN7BpmA&A(#{`tVVe%9Z!{$$rs-5G9O$^u4|y8WnjM9 zT*_;Yvu+jGiz(n>TFY9c$bxEoL<%mD#{B~KI0!PLG}E!o{D?BX6oVxmGhwv9kJ!st zZ>Zr>iXpF%C%CnksMqd800`NIsF%^Ihw#W&U$_qVA$Ea&X#g*2Y5Urt%(a+T06SUl zNaFm~A0=4=%Qjfgj-|6EaRD7XZryY{?Lf$un`jEGHV7R*M3?!c1!zigF7(>qP|V-_ zajyZ&MfP-&rHOcuxwxE6ZDYcx=*%7aDjmNEL<1T-L)^1Cn>Ym7Fsvm zwqbp-&uIIQ{uUnriL2FA1zOD7$^ItE$S~W`;vO*C_R-3&zKM*>mY8S~kX?0T%vj9TtB^5hY!(vp+&J{~Tx1k-?EXEq zvM~BuY-M<@TZ7j#1+kT)=CU$ktt=G7xx{pqb({$oiN7;e;+w_B@xJZ)c-mT7#B$Xb z!bL?8^`z$I)=e{=S!jguAT-i^i#XC~#@f5kxtxb6Gnso!$}lW1EbGohY05N81kx4|pCe@s-f0yv*kK3kQ?)NzH}UQk(3$a7w>GTFAx#Hm#%cOU%@3h*QBx{y zlw4tczbOCiWzWc2A<3^K`DcXnwrcKlmdK4PK2}Y_Ss*tX^vzw)7v!dhJFDhy=aX`C zOPAkgZI<`WmE2pKMVw$n0y~9iF(z*o%96ciz8qt3?&XHAvo`l}QPwrLx)_W|kGZ;# z&(Z5?#V9?I#kgtbr-;S^`(D}{f^?R?v3GUx`~J_&U4p)j$6s5?g?;~C9y@n^Jm6EN zTtWkbVD!%^HZ1KAGY9U=KMFRNKvC>po3B!=Fwhh|xQ1qJUYoC}%}kgOaMgc3iH!;cFb%zv3qpBvxi2%+;b3AFqyP$GpZ~cHNuvxofsg zC_k{@s_m04S=y6U*LA10O_>Vb=6*yr_u~?e^9kA9(GcsEIMNvs=gyGsA#(%&!~rQ{ z?W;mzpm|HgXm6{i&EMU8MQe+gX>V*M`z)>R^Y*8tY*bR55#2Is*8nf=`=u9Hla(}n zxhai|3F)Hd5tF${5sABB-*-^i1~l-4=VdLT9>tQ(@II9bL;Z5Dd-@MA6s&^BW4 z5{-~#V59~Gh+q_>_QL2*EIK$mx*47&(t1zH2J%~fPBo{zey|Dh+1Ml;uc^z%V)MhG zTjf4d6Q11^6%+NMR}t#%vF@F(Y8?+#hm)xWfsTsZND`|iG-IBWXj;2PzrUAGa>pEg(1nDRmCDQ({2-IyuAWiFIR;P3VMEOi?%W`MhA-p)nZ zyweMpHWRrRr$>?#)8>Fq3&o-3){`rEWj}crzoKPxdRq_`EbT19)`Q=38NpiW`HWDn zT-0lXGNs|u0jXx%oH?5FEbmG%wGO2>ICQK8fh$aJIL-}2!I$1J$Q9AK3d#e0b%bZ` z)xhZ0QSZvu?UOQ77Q-pX@U62ew9WdxXuh-p1p$FK8;R{)DK7w}j< z-Xf=1@UC@f{QW22)-*mYc>@Q4XTHB5CLr}z(3zx*b%;BASqVb0E&nFP43ZG5p=B=D zJ=&-GtS5_gp11M9`IZi}Lce>FcViyAN zNSe+RYAIEemSX%$bMQ%vft;dg2r%@7O*nH**?r}Uvqlj4(KDz)we{ccYT5^us7-1l_jWk`^JRuftbDkL& zS!bx!4Eh(Pb#whZHc)=^ zQlo_tBrB?Ik*1BbS)SEa!A;^ba2!qm&&UW1$BD48M77Q2#WN!IGo3u4DZ4HG$cX5O ztTm7{dJdq=te%!yG~~oPG}gk1wXn$6LE&)fwEZi>9s5Bk9^Q{4vOod-BxPA6tz8je zREhR{#A?%iM|H_89YD3u#5SRUWZPB{9uC1-@qvhM-4#iWwbbGYds#(v@d99UsuvlX z253!X-p$~)?k{BuAOOaUNS-BlhIe{X2oFduO?X&3&DDOt4=nD${&)NCZ?z@!?e7h zx?641w3&%%{m(<6+9C_Qy<57Sl}EiuMH;LJr6X@v4?V(DXYnxQ*ZUlLvocF(c^OPF zcL}}YPfSw}Jtk?XLlS#L_n)JWeeo@+i{-_bYwngJ`ICP>^0Z_zvTpUrlMfTg=@r>X zyHM@2&TV;s3(M@{jivVTtJGG0H5+hn;N+{*_RZ*pqZ)a#PvQ>!g1F{9+JLy_x-r&{ zcN+y=@(Q+Y=^lnfb)D?nLL92<6_)t}eX-m!JLIChgpyf$FNCkMOxX(U_7W<%TIid) zktbz!bEZ>JvO#8^Gd|4w@deA9tFMiE_>V-X+Az88HzRzGaaM}C*Jf?FyD2j~Abza8=?U-Os?cRetVmx#X`LA*ZN zpyo$Zf%<--S_;EIq%Z_bA$|l4AJ&^3A@Ev|PS{@=AH@QCP!#F~XJh_pW5@T;8aoP* zzf&A@vLVx<_88%&t;--TL@WUgJuc}NBeB`&aM+&-Z&4i`e zNkDyx<#%pcD&w+L)fYt(THv)J-?i^qT}rW7zDw53@Djt;YZ!K7S>2im_&#^q>m}k` zO((s;FceF*0MaXDm2?-in|`i#Q;D0Uez3oP{GV76H!!bL|uAZ+AF z>-F2M;d~a07qG{1mjxLdIP2{T^he*ImnH^M94lmlM%AmMmDlv2s>HbCJE3R~r|zZD z61we+xsf4PxP(g9EpwidbFV=b8&pg++>UrODJriooVKs5tI|CC4E$(YFZ;>aj&ptj2`^8ixp*sUSC$$L zA7~Toqeg?qr3PcPE@E$xfx~6R25_nP@3@o2n*WDy)Bj%w{`9XZHmx$g{yZ0T4{-6S zgi7eQXU|ATp#^!aL(<7^$UZORLg@Rm?-OkKqq#79b73&+)~PLgiZH*IFps%mBnf$Q zHWPc#*tpcq>kr(&tASWG%KO;?BSK1R`-40mFlK_s>OSYxa{V`kjfj3AFXaI;t)a5l zLCFG*>Uh~c(daQvYR=Xg?SVgPievo)dfO*@P-oKGRpl5^~l?Xu!ICoT)Hvbg7zqhYpsVN|>3!e6r5Lo6Af zlS8su?LMy4?V_0{AJr~on_5~Ny%C~Lm?qH88EKZejca@32ClJ^E`rqWex{2@;{?$W z9;K!mKUX(mFjoNOC^BDnN$8a&!6}bBPzyx$WiC}3`W?=+D>0$G?hfO@Zdg1o+bzN& z%Q1x(rC6;ZP#OD5X{n0UDzcUHpNoveYL#ErE-ZblU6}o~<>qcJolQ0(TgM4uyJWDW zVPv~d;^QQFdy6zf-4eHzokwZFW1{tE?iM+wUu}{2f|JwsLyG_Rk3z?>uNaYWTe$*Z z?+DA#Wt|91TyQ>-T9#~e`$V-bA~##kY9POksP;O^oY?jj5x3awk^_E4=S`JP!yFO` z&t+uID&-c`E!)`As)LjifT~lMQp{eWi&(ez8&V$0!YH z3?oGUt|s&d7$pzMLtLzEk;g28vD3!p=ZGb+0#EZV(*-z&%0VU>W`6MjjKXli;v@`0 zZn~ckoI=!Kmuiks?hfwVq!6LSk8+2U*m3`)EI#KN_kaUa^2<6O9NSzcw&aHJofHi> z+-wqq6k5u~D!rH^Xuz&@>j>MG))GZY(t|gXCjS>NjbA@R%I5CdNywL+>SEYwN%9YJ znLvDOk!htKk|E&KVPdY2U4jtr=aODRztdR_ttlBJ3=SD2OO}rGWtO?oy#@YqbGIbp zPfoIfO9I`huuWF@%q4d4Z)ABd)XO{lc`ju)DYt(c^a!jYT`W5bRe$tMpe3}Fs>}Rz zj{Y?0^Z!&XJqF5?52fr27%07-%vIfT0u3Vdh=|@h?xD$M< zdRUx6**bCdKo1XcC;pr8FLM;f5O6}tq4N0A^ZkagK*1L=uYKw+wvxkm*lFpL%}Dkj zRX=F%0pzq7uXV_!kl(-~iO0Jg^YcKZs~r&cZJaj3!yRE!PFJzFGe0Y5suz-fCT@Bv zun89(2y~Y?Q2OdHN4e-J<-q~Pg%#l$Cx*jn;V|A1dEWdn>xLkwZsXM=dv9i{c`A?; zKa;2zEwXzv_#gX_(AEuEA_x%DsQ?)BEia-nVt?nu%%>r@%eq#TbKZG`-TnGNDseS- z@S`cT^~#nJa3i1ql$4tKIkfJEAQXS5!mhzYQBfE+W8-9on;f??s%i%VFC+Jl_S|YM zH~`q|q4a_S3?T+=@PPcGw&PzI!eZqkJA&>%K&S;^5zO1chHquXs>giW0Cfin!r1gL z#77tPPP=##9U0 z?D@dVtevz<<*kbOG0;xsi3iCS*5==v_eFowU#Sj6@qJc366;HTo?fM?V(%ruAII0y z{&Iw1SDRfyEYO?Y$1ewOrV$|XdpBny1`cFg=o;CMIMS0T=vLLOpNoGY*qfXXj1!L; zf{wE@k8oP6<2~6`H;ROu_CQ`AuONhSuT=-0IO$-s*j!IFl}eIuj9 zW@}5a=1eE;6wY+?aXMZ+LIQSuvFi2s+eyNPIPX2|GJl4!u=3!*kK_RkmM_2!K>^S^ z>K@h3RHK+7Mth|c2k-RBBA^|TR|wtDc5~S2enOH9p6rJmyt@QP_~;24}@1QmR6HlAzs}5JI2W>^b=R_$NuAhy-GL*3PyIjaWCp zA2kB}@o`!}cNTSc|7U5T8oULV?v~iKMRw4LLEA=}t{{vKD*@#*+GuHxJEiBs?pX-U zhPt9B(9lhMUTBYG(&MLs$?+=mu#AYYX9Tr!-T?pk>C%lEd`vETP&2934^`c>k=C0sh?D&y7=N7FoTbjAiQ>5ad zr|oso9n-@PNwzji^Eo!`5F;4B5b?d9eKu>hYX=^G(b9rL zRwzr$>pDBAiM2%zQ(}0Invpw}A0=3I`*Z#vRI0eN19=667}r0dT|C}(8DrET0t!2i zvbBrA=qh~CB&U0VlqS5+u$9aEJK3ORg4M!shFPc~DyG1a6~mGhIe|*q>q41@vLQsv zMq=+9=0+-s7>FHfp|O2@HE@NYKo+kZ?~TQ%Wzj}9#XA1mn?><3;#^T7DFqqgBOU8H zU4AQ&^VnXt4@H2MP+rq?RzxdaO1e-w+qEmwK%d~_mNsRW0ORBZF1RKJvSTxI`7`_x zBc*IYCf&X+YQUxBeXocWeHlE;!c5=a1SIb8O7W;v^#U61}d47u~<-|Eg` z{I44)q30q8fbT~)$m!G~p&-$dlLGB?AkEy$0@vI!Os3SwUN~OR9jkgZvoBH}c&Pd# ztvxb*mMl^C{eU8Rf-O#C*Gz}Za~{==!eHnZZ-2=1hM0~^JPF_GLPTfw77-FIQ5_u; z9Xzf<=Pz@S4$(a>QzN249aU`+skkR=S{*^?Shr@5MEX3D0$B*%)|SBy1VK8-l?Y0v z?Zb5`N}%mB1p?_nPK=V90DAl*KYmT*OpVzFbX;(@ZcH98-qMx@Io*O0sE!EVQv!7a zM8o`<0?`1MKkql>#3(opxAQd>D0@ASR$sRAqG@^=AB^!qo_`M2IR?Q^LHrcrMYeuO zPMeSbj|VxOcC7-GKZY*D8~&9cvIWDKJTsH!Zdp+Lb+QW!JReeG_MmX$N^(c|*i?XL zw0z2Ntsj+->QX6(DhNP`O;Q9uZWm{*E2VR*g3&xm6U!zlqpy~Yq|Q(<$SWki!-^3Y zUbR&%I-tuYXK9Yp`vsoe8Kvnm5QeXe49PCuL>?R+)GA2624ZOUon+V*3;MTCWl%nb*~9 z{1tNkdDh<)HO~f6m7hNnfYT3<*mRY5 zm5;;~0^Z8c+zd%4@l%N#C56e#z?HatDlUS<0`yaD8fmjkL79Dt_j(qFoid-fjx1{>+ss zyiqcdNA8o5P0T_3sgv?}k_e#G#|GCJs>E>s?G~#Ac=0fd_eahGWX$UJMs>ebgrm~n zr!~||fR%&wNa%NXy2FARMLmymfLs$)FQ8IWA7&iXH8_h%m}MB@AVo!+On{HPj7HXl z+@+2aDsSa`$zAWDBG~dkA!0{t?_#j!mc73^4o$(lE0Lu*2SH};7Bwzk@=9~$inW)r z{>$<|G=z;!mwU1rKV|MdDnaZm@|P$FbPU$8&M{mwJH1B>oTR&Wsx7kqT3UF4*i18T zUXgLxKAXZ(#FxuH4SK#m8h_{EWPcBcT;-dERQ*lrdhr40-ccnboYqc)&Ie z2LR{F%yzT#)@)Z=5-)LcB)%QYvh=zbQD8jTH32ugxl=SgU~1UTxnPiE>gI6*y1zKT z3A-x9uh|`YW$|Zm=@{fPn2saW^gayf!NC_Yld%bd@W2@9EeL*>(c)|?J-{3&+e1QSjQ zo-4I^!?_{ljn~^a53bL$sV3RvhU|_agd+iQk!988LbiAMXa@Q+=Oo#@% zGa=ysK0h05o{)|g$&1YNC3VYC{jc5YJj|F@wOa87lBl+bvau|v4jDFrFw{UlyW%D- zM3VWjjYnPh*OBYT@DJqd`T>kL+%BRT(d>@Wl1Rkm+?=7sxDweuyBEYBMitG%;Oxa> zU3ao5)4nh=dyUWerL-rm2=)T_MEhc|v6XGV>;o0Ug>Txc5%ZAkoxNeX;1jDwujuu6 zFt&6i>#v*+j&JSJdqb@LXcLAL1LE76hQ~vC>R2RjA{Q`kG@#x@jyAoH&sVnd3>k8I zTHhZS1bI7f7{$9-ZBdf-I}+{YS-g-%N%VgQM-m;u5!&h{=K~M`@XI3$11#LZHGUzU z!!!Uy!f35=+b6Y_F>)JtMxuF$VsY}tN`E{X7`zt2*<`dPUo;|Um1DRvdA{tLHL`2Y zN3U8d)riPr`oE8k|5L{-YD`I>s}G`jh#Q(??He^!~)8 zxYW>pdX*5ZEp?x)B0^Sv3`#QGDPkfoe%b4-X-WQ=Od)%RT-tvtV~v2HRpV_P(-qV> zf8*M`>14HR6pigk7H0?6;-Ht@NOMSCW^e8yv5_4@;Mw;{Vk0|*pwq*IF#?0PL(_yy zun?rZFcO3p#$5f^?y`7|dFG0>SF@X=egm52>wlDmku#~mng;g))qYLi6dyib5} z@f?B5=d0VK-WX+h{!ISkdpQ}PZn6i(TiaMV8s!SzF|M%IBdCvJk1OVth0+SO-gcxj zbA@bf0&Yw>g^HCD^DyVe3D&4N^J9abpg4tLyw618kY_oF8qv`Tx zt|pUF#o5d-G~`HiVS}nftt)~$J0)Gb!g>AQX_*^~WkRpNgXKPyybRVp(d-FfQLGWx z!k<`0arG&KT6z1yw_x$cCl{htA}S@_m;+^@*w6@Gf8B1aKoY)RS9^b%hwl+23K{lg`vkoPmzVURGimerJ|pr-qVRTD6Kq=?dGl(w6G`|iHdAg ziO#DSg(y*you)+bRU7=_nf?d|*rPv@jBdOKc@du!y8anrKTc zBVsbT{%4gbD$=6to#$(66bn@T>&+I&caL#5#&5?1*x<>-Otq|_-t`w@-3?dKiDS&i zVYCpwI(bV*o|Ki2`LVyw`Rreyg)f<*iy2bc%=j3#i&dv^YH|wc>kQG%$eO3e8yinj zI6L@-I@|1`$jj>N`)A7&t)%PBf^$>%cgVu5b&rHCe#uoPBV~@Avf~x zba+YFt_&xjs&H@Q3Zb}9w@UNNN9~UynTG%KBrwK;`hh_GQ0)126;Zag`$g*sQI=gC}vs}(42vn#8r6iEnLH3q*qwOm^N{=q@$8O-( z+*QFZ<}gx8H?JR_m)G|s&{=V{ZPXDhI+Jn}J=!~9}pz$oH_MaP5#{a3G>N28HFj`FKCvE47 zxS24Sk4qD901u&_M{flOA=t^;rP-mNAln(On2n@eV-w=w7;V}jlh$XP{ij%#|K%42%4SS?u>UuxJPRm}ac0EZ`^m<)*xHCZOKt zcT0SBWiavQDx~*>gMXkh9(r+kZ5AEaVC+m&;k_jrj!*OeUb~J4G6?%4_m-eX#$)b1 z$X4?nj6T5%ZN3x>b}a;2TTljYJkzr!l$j?Utu;H>Jk@>g_pO~!HX@FEkPvEr*Qc7X z`W|T-r#A%m#W-=m$=OXdZ(m;RaM$m~iJ^n>)2_3Dg7#xK{8p2+1>3xm=~M^D+ob z3MCrD3*NW6YNWL7(KDcFm_9nt3p9GHU=>UJ(OZaTYr$uN`Y9eIy+vLMkO+1Zf2I;3 z4;LNYCdHfiuIAg!SMz^b1%S=E?DYnS&Ml$@zyf<72t|2gVFJ&T{^ZSS%WX{6k?mrM zpxSTe*G!GjsOlB7Z$xm!hg~A4&gql26B;Q32hA-$pp%Q?Vq?;`&?H+N?-xLT|cvPbMEqGqGA&P-$h8Q3aF#$oMH0_G~~ zyv#Zvb%DKT4D6OY(Jm}fKb6MNd-v2WvN5VX{)hBVsY93#$u{YOB9m9!rLhWnP@PZv z%>zCxyQav1$I-Z)ws?Iu>XX`?ak_s>T@4MFywHd3s$J~CAfwt3k-ny>Vq!0kx3&4~ zMC%H?B;`Czj^a7i4$HQ-9>lF&FnGx!HbDJz`W}gKSVjo>S#q^Q8 z7hleyM#~U8SC;&JVudB=;yzVTypu%lW`u|^JP%e8jP&Xc3|Bk?2r#|!b>v9 z_Oci^{-v4}JC&FX=fExs@N!z97V6;vHDYrR#O9Q>jJ>-M+-5;*W|)BA3}F)vyaG^j zENfi`wFgRbbx8bm6VO9yoT{UNxJ;LtX)LZd7xIvrz=aR`qIgBxJNNrzw$vN0626 z7cRxw!2lF(uVul7_F_m+)HB!!KSeMRyJmSdQu^E@K0kavUSPGFpL72MOs|ze0_Z3q z>x$8XuQ8#1a^0T{CFHHhaIdnLW;u@gNBVU%J($cZa%;-3HNDFz?M-2Q&Wg$hVu*D! zoua$lLq#3^sSht6-A%mb%*EfTExojhRB}Cz-YtAzEEWZ6+`eFI5sy$a@EWe6t!28( z8QN02@N#E4szoAQheV3RvP}a7BMHkNy;4eD<~qtlH{h>Ee31wE;&5X0`(;{j?3ei_ zb{e3S(|*KRWzMVgB`(3e^|~Q_@Q0S2uC~^;)AFO%<01_^$Il}84BKtPjD6W99~|O> zozQ+T%SA(7;8n}+=gR(W$a?y?yxWs*8{}U`6hfGGIir=iRo9^Qr`sgb2zP0npgea@ zp++fV;yKB}m%Oa?xm+M5d^)BzJi8$rJ7{eFAt@+Z#!YLF)=|yi3kWqEUM+ph?*%g zy2)Su!eg_KC#G^Rc}PwZCw30#QuE3#9It^2BIfsIika02hl}fjz$u{xCV2eFpj}rm zpCl7I_?fboMR;FZC=Q%t=_b#x^J`5a6sebFsCcf8#HZ3u$%YKU0a_qlmd0$kw2$C_ zB|(sD$(^HfKOcA1kUst!V1X!2_W6A4q(HQ}VTwF5uN*hKS=b2XWgrzLZDPWFi)y@<@j(u*zKr?2gh&Qsr;%BYAyDn$B(L+m{=k%7kc2>jLgF!7AN!$DEUt7Xw+nG7 zlJuE$OnZnLSlY%+wQb;q)h=@E#3G2ng~&A*0Dff8510cK+FU=!mz)u+E^NMv-W2&& zwaC3LU3&8pYm!sFPE#7HCsWu{J8%KckIO#>Gm);vSg`)>GlZMvWnHE+r@-PKI!)1DY+~0yd)oX zZSTsNMN7N069#Y{8DSe$A^qnKMT{NO@i~&&$hx4trG%@I&(|&GaOZE3+IW*GgmMiD zUTh9AzFUuX65VqGVYjixVe`n?RHvN!CUFIUrAmAzlf8D1Xa49}X6}`ql=Bj8jVU*? zxbflS$4!N~9u`zE&f`Mqw$-F7%m`Hl&0gqA)ijmrEHzPxGldK~KYMwwo3xB7k|GmFy%_8@T3S6Du#3 zHqk_ZzzwUOE|G^nDdrdPwv@-7$+ZBZX|q;<(QF;hF4d0*mF@%{>zD@GHf?ph;ek#> zN4&*-prfdB=`H86rEhT#X3x^;kPqYsHK5!=W2MvjKi7TF)FNkQID$t^mO>1h~=b&&? zfvnO4s)7CZl98un=zRo+qaSxf`DOc#&16X1;h6OkAr)DYT=Eudqn`+QZE5=0YSU!3 zIh(m^{X}T=bX$-#rCQccgvRU9R4K&2&wC6ORH3B_c&kkUSb8vLCb$9pXsGBJppO>o#WiHy< z9JuxPQ@WJW2x?f*&-Z`E{1-wfH1f3ch%>-(bL-wN!pSx~)s^gM!tr~zdW54b@tr>q zL@3HGmw;U1z0K_}N3*TRNUo*Q%@1qmyU`Z?4WjT zV=pKbqQ^16Ei2l1P?8wvYEfyCI%rH@P+DRwD4nZhL6dW+!wX8K_T!EapF445MEqj- zTHOCEC>2qQEMuEWpOt){E#1qXQzdE)P=!UZFCoHuMpkJSfd$=GtF-;76wX`e+&@iU z6v7w^fhR%$)h^9T?(Nd%5EgcIWT`45yZG_g8_gi_WF`C9ox!G@u%$ti2I`#0?+E(- z-gS(G=y#AFn!Xgu7Ld!~r6aF+Z$g<%M*6&KG`2Ww&H9p8EF+vjAZS_|{c9TVSB7%% z)~}s&6{HKS*XN?K>obr@;s`X!N!e-3mW~!JmmDRH#s?-5|D)0EU#bO3shwQ4$zo)+ z&5`i0L&|CpqNa6lE?T$xd|1OiLa>pq#OvRLmU_ZFBZ$J;Tr;&sWV28vZe+Dt?AnNV zpAaavPRdRE;;HN;6^y#}2HjGY1EN}lh?xq7d}}B1ChKnwYteJYg=z=5w70TcFS$mI z{1p(AS4yH}G5Ss;#+ z61b)1w8)YYwco)@G(kBD=OTJ0nu?{3sw}mhs@etCr6G_49(6L)MFhR=5{ib<|5Py# z5Ad~N3|nW#bV|m?-%2i`YCIUN&w6Xz3(y!_wme|4RvG{PZsA1`OCA-}# z*_FC9-aD@}b91F}dsCN5hBG9)TMo=4%3GY|rGZlnaF*z{-%2%VhmU<42GrVe7iCMg zi^CcDr1glVU#OG3;oMbik(beQ^gs-dWk;QMhu77rU0R*t1?8J{wu#(Bhh&)fvBEZ4#%CHaZ8!hVk%Wv}S?*2&?-aBNSL7kMp<2@7%1FKS7a_ z$Z-3Yjk2A3%lr8PhKemvK*A1DBRIyGJ;Avosa#!uNRFEV>vXtIy0Jv%6JgP#tz( z5P?|dqR5_X?$oqv;gWp`bxmSWCfKEcy``Zxhb>GX#0}%rjmUow%=%ra>wr2 zHiLg%<73mfYTLKoRAv`3-BCns=Z&2k8gWqVRrenu8QR}x-5GMKZqb&*ZVUi`h%Gww zZ?kSGjhAO@4oT@@EJwt;cKVFiWghh8Rl~3ix|%Ne91D=e64%sNJv-qAGlDt z*)v(SjzIyc41z_kajMQim1mhTeNd{e-}gad;ez{d^!nYlxgCFu+{Uzd$}@a7!RHiiQb`u`|+=*wLS&bqra0=6M=iyYaCYKD6z zD|}65C{`&?JI_6Z@;RNyqr;<*Jckjk+KswC2vZcgc0p-KoPq}QvTd%vThySF--bN- z)|WJ4@%8eDgs4lDD1WS7R^nuV8R03^oczf}c*;Aw@Z^UDj;Lz^^kv z%u*dj#$pHC7#--BiG)Wys8?!%l&c5(9&H0-sCTntqJ@kSA1Z4(QqG^emRxiW%>tTJS@-NtQ>Dini?XiccRU3LqjEv{b$r4NiP_57LZgQz{Z4qj1E zuAU3!FrvO&WK~wc+$|LL(Ow)D=JBpa$z)L}2d%RDP!NxW5H|7d(h|VsN=pr{z@7{tKeL6?G2$ZgfeCl5X!15ggv*OS_?|UbTvCVyl0_Pb_eQd z0(>9hHll6_Md>>K7Lmf54~Z03@HKfB_HPk=0!UO(nLv2y2`sb8KVzCM`mZ;B3Hv=3 zyQ@h*M*3jGFxV(aa(e8BVB$)~UE8E%Zk-}w+huMLI;yFjizpaq{I&H206r_x zm(_U0YJ3qne8g&DNlt_S&%v5JGtJyB`#d96ZRymZ`vq6FpGWWla{7QO0G+5|9FzvY zq|?xL$6^ND@7E0TCTY(-SfGoc8XQrdPWdS9G@*RqFlIo~2Q4Le;PuqOKOJJ}?+!rs z9eYT!07BsgjHy`3AJ_wrF$0U`>3W}o*2YRauqW}?i13p)2%FV7h{|eaDJE3O620F< zUm%p21O1!(8g@*Kf#SzAb7J+`WWIJ7ka-o3`jv$w{IY#hAoFvzs13^p4AGA_jU!3u zdn~WwAZZ`R1V|*>wMWg}B182hz5>OG{|0|$NU!c{Nyr6fI5-gNYaS=iu-)eFLxc-?f5?m{SMu&tki;uEs2uS7H-=UE&$}?R9YDmm-tQQ{sjo@KUU=>Em|Q*+7>HYFq5e!OW-SL~hto8)Y{S9h*W0iCICf7tqt9 z5JjK~a369h4+h0n@3?FH!}#X1HkBxga@aNOfjL|*(wO=I z;YxH{qLR(QQy}HPAtcIIFuDV=c(2iRi4bM@_=tC*FJ?{D-LB{BoKfO?c&X}MCIv!@ zfB;Cm%p~(LAQ7h}GqAwQjwGk(k;kcG!A@Z-%U;gNNw-kKQ?&-`1oz^D#C(B$svTsH zJu$UA@cz_zgaz%>LKg*nSk^7{bL)XsH(#L+v~_7szq7sy{M;7k*`&oBFWbS%%$K5X zb#0;}#~s3K6T@TxFKMHSNM_x4KjXdGz#IL{ea#`r*^yXQ)`kJ2Hhr=ms~2h3fy{h! zMT$ng1}2J;w3LtvEhesf%}kR{0vuo=D#JY9H%cgyB@{L%xo424Hk;@n4XPRU+ z2UZ4TUbFiWYx2Fmj^HG_+AmmE-qUfb&U@VTR^V)Rhk#a%2|I>*^5kEIqGFRXKpvj9 z596&$*Z7$2q{uZu25dnHGWL(+X)go(aPl=VO4P^zz+4E%!(@hwY#=_p=tl9flrk1U z{}-ukqH_RhEzlg*!AyRq9O1Eo_8S}jT~;@Av|GTw@}rA{6^Yx(Li8wX@sgZo2V0DE zJS_BqTc~wxPhswSWglQHEvpU64;-->wMqOuP~3q~0n?y7J_~qqaTromkPMrhQV1-b z*)3e&WC1qSgUjrAY4jBGhT=9f5XAOtO~GoGHc=qMr7kLZ!SbC0kNP5Yoe^d&K=&fo zoyC!})Sea6r}bfYE&#jnlJhJ~L?-<%LC`7NBL*gd06S=yuSe7S@pzA;D)tOev3 zNGz10GgF36qv}ZwObNIfbr?cCp9jvw4vb`jm*vtT$RsZa!Z9m<%qxsmc{|ZO;ScP= z6$IJxyUNPPn5Cm8?^Z&(%FSbnOmW5J9Qip40zZV4VP*Dm@)>p&k@A5&3vBMwITE2tt-fDez<<~}4KJO;LAQ}h`xrs^vlMMV8bd__J z^;aKWcR2NK=vIZw_!xx>>f3sJD`S3i3z72!oQ9!|!ej*pd4ues^~F}(U0hfX-p#K# zvjG?MxjVUzy^;K~jNLSPUl2IOdichAWVw-^(Xy9l++84b@kXCs>ODn?$2=WuxlU3s zHa$xfv=6W-AiF6iAW)q!;|^29*l6;S5x;RI|JNUUH}(cNaaht6L%5*TCJ!W>{L9C9Zol!|LC|k1 zjpwr9;&c{JRWp4y_PkMbKm$-PUt?Kgem3@sQFGcH8HZ7f=o4_jAPWnxYO-vcbemnf zNxdTApG%jGJS{Eiyi+T=BE(5>Clvei20Om#8AQvzr5prrk}&Pq#6ljpVL-G4OmX@q z5~j0trQo0Dbs&Hq2%Y=@;$mW3m)1q*tP2s541`MKmuc_=YD4SxE1i*7Yu%j;Ham!# zY%{cS^K_-V)$LAK^r-vroAcd1jP*8O)+y`MXg}6^Z`_FVxE=y&!GH3($0JcM1anl+ zFBUe=&|VX`BFrPQ!egMj9xyhS5eK#Ufv7)%rl2+6*d8xhWmR+1YvGH9oAiPny;Acp zbAV${)Zksd+_R-EW@pM99cZljfOwB2XD@U9b*bJeN2RGF$$6^2RFrdpvY0uNoaJnr z&q(LQFrraU&ci!VEhR8kjlvZzb?!nj6BRHpUc~`T5EC|I`=WBBaUC2jfhd(MTzC_J z!_<)<#1?7+p6l{5!*nlDP4Lh8ngjqNLDL!6UX$gYD4-3EKgIvcqD;2(sAL=?YQ z-SXx~ig+*^2)?OmyNvBW9>7G+P46h1uCe3pK{o2a8S{P;l2!D53;dOMAD+Ohxq+To z{4t{@{+Rjud{N4iCh{5Ew{F$Tt)s#ZN)%&9#n~A+Cmh0dD?Wr}WcWX&`49flo^vIq z0|jZ-@)+Z1zZmVu`%}jP*3`hOu{R~Dnm1u3QojqBZ|5I;#{^EvtBB z2xL%IuV`IE5f3K5#0=MktaWBoq8LtIwGR}~D-W>qNGm_=IKuhIA5partHwuF@&WRe zaZr04P8F>y>IT9JyKzNU73$I-bY?KNkE`B;Zxy_U`!&(cI-I#e%(dOjyqpRoQ~<_@ zL#y6%m8f}>;#2m4e0%X(nc{FqwGQG zo6;9n{BZzwjO}wiLmiFnTcmZhU#tPOAQeO-kHZq^1T|0BeMU?6;2#Q3+l3(oeK>ef z&T0l=!UM(FIK3!NEzv4FG&)|6s0D*Th!Wz5-S}|*L+bg1-xyN86IzDsdGPW_n3o67 z;7#LLAW%FgtaNh7*ipP3`Lp%ez=2r(V-`u))IVnaAzw8<0p}@|ei!Q|CPSe9XzHDa z3hLIJ5kJa?{Jap3M`if#r8(_6m+L{?C4~}rki)9waTpvZ1F+hxB1|K^QTDbw${dfQ zVRS-9QQGix((6DEFw}xF)Q)4E5I-(M?celJ%h-iqF4)6h6Q&fwf($t`TeR*fU_#(} z8FFP%9(#~B>;5v|%0Kun<4nb$z-?TzpJd0YIZsO_Gbnlg!M6k51-#b%OiTu=8*hMk zGE5V9F@~Pe1N3>aWM_;%4|V_m42hV);IV=hzA~fG)`PW|Q6qy(2{auAc`eq+q-uQ3 zD?CGorW9;jxEU|%!FOQ{6=c;5U5xoXT9y<6og{|)l^jT#p{*-P%X#;OQ z&=fP`S(&ubit715{Znq2ldXzxla@X|>`?-`-V5cZOLfRGYoXhUr_B!jy zGN_i_bFb4(SU8sL^i{ZcM<6H~aZvLy)(~4k=1?InrDPI^QKiNBj&t0JYKj)N42f)S zSm*)Z*UMhF7+si&8Jm`~lb2s(K-UXPX*|L|*>x+Pey|y-tbOyUGz(AA8IRnXj$A2qS z+c@W|-=y=<3)mY800k{a9(#x_JLYD=gu(8~hyBQ#hABX%E|WTKpU0khtSNc2$ZnJ! zQ&^sr!t#^}%d;9PT_lrJ%v3m#PGu$vOlB&27!Ch;Nyo~d>+x>XL`-J$?k<~1));EpXk1C#Lo1pR3_4~lJ%z~dia8Hqm&D>3vKoma<%}Ya6Sv<(pU5|R))(2 zh7B0C*Ao?L;Y|D?%r?8hr3x84Cc=4v&X5X}$FY|e5t9bm1Qid{u<@-aIV%aA0<_cY z37Hvx^0$x%fgBd!N5@y8iq8^B@l3%yOU`505t?QWTF_Q}7Q|PyN7Vg=8FuavB6qKg z*!o?@hV;*0^KZ|a-MU9CSHx@U6*N4e)7ZkGun~HXuSoMu-p-2RdL`I0X{U_%(Gzho z>AA_@dS(M*)?U&v9sRA>le3Nua7!28!^4Q$({TkF8g_FYc<1>U1EUL#ckahdxF>%^ z9j-Q8<^nK0h`N34@V%`a#1-uE)*s|9L>){($n)%085$%1Dpt+dA2eLgctzuUZ#b|` z9%X<}r~WMUnB~n9Ue#_DoU-U)2t7mtC3b6&83R=Z1bm(Il@F*0WM`=W=gbY9kYXfg z(qXkh)Q6#s@=>_X2Agic^$xyzv%$M7RJ;P~BYmP3eTjHuK-D39u7;(GKCea13+!;p zOdVfkO%%)Q8!&Oubn@s}(&GhT2lj*>eqShu-xoR`zc1traE8NZ`xE$mA!l2)CQdbe zA4v*+-{rCTlIGi)sxFA%m)+T)0Z_}I{Im<=XVa7}h~JIabNxTS@q6CG@mn$|*?BmA zPg4auxZwgEzi?jDpMk6;IDQ_#^#2LZ@6M%G{S)fIvIa4<#24!+l@~?Ae@I3q`VetP zNRu1F>Q#{U#P4uP09OOJr-*NbC=H}iBg_MwGP7GBQB^!1P*p{GvxlZB+Bpx>8*n14 zahs}`6N6G8q}Mgn1RD)PpxJms!$Z>pT`a+}v|h{DL6Kjz%t`~0Pf(O`f#eHiZWHZT zu=_&l4HTfx3Ygzn4dxdrdp$EBCr|+F+x2@f5_!8u_Y{kwfcb?oAm{Cczai#J&O6I= zvx<0a0()YhRWHoT*~ez%1=RH`z#yJQ(X=lLUpEwThfES}q1(4+y7O~A$pP*=0#Mmz z8Tu>&MA7a!1_{5qF9r4Sj&WgD!NtX~h47C0c< z|BSI?F(wNbep`*5#xLW2;N^|{+IJWIx!@J8PHnX?I`#(oV)b3kUxSJ& z3o^Ec@uzT$USal3GNx~kN|4@JUaFKNrXw0V1dk9bz%C{|dr^q9iwQL>)UlSQn)<}o z4U|@6ryay;*5ffU*pww55p8x#g6a5E@`se*i+X(`__NW;LOgYY%}gQ6Yi8m}IBnjg zp`=oJD>wnNvFrxle%3GkrApXemk@hdgYyG@Sd8*+7;_}dHsVjA`fA5J86k8?FZfT< z6xK;~nuV1;}9<8wND9k2zP*}luF0t+>JH2Wm^qB6Ki?I*m$QtFL^O4C{z7W z-cjl$GC^yHQfC9p((w{$iFACM{5jpiB{j~}R7Vj;yr4_fhmpXgUU^-TwtGsQPdk&W04Fn^LYxQ zYM+3|;()|OO8cQ4b;;Sy16KVbNaoGI(P8i-qLL3QKS)5e58#kxtFdE6eh}MoM2?L^ zGWzDv1UY7p9)0<(B9;e9vhk3bW}XQ!-Vdu2oEB!Tk#-ZMhJ_sGeq6}EarRdP=6glk z1GE4hSqZ2h7$2~b4^seA0OSlVQxLlUH+$b67*%!cO_&iQjLxWO8?UMG)v+ISXp4qg zaMBte50tkMz&0qhTrOC8FNFkXODthXVBAcbR`6n_x3;CN_m;1hT2NHbBp``EAsEWT zQjM1C!AWm}QVoda`~BA5XU>_)L+~Of^2a3SvCn?2wfFk1z4qE`Pu>%r+&a6GYe~yt zAWf{!RmtkyhP_Svt54JD6YRsUb<)l(vr@ zYGueWO5+2ud2izg+RsWL?~DB#t1$;K2yUWx?=;c8zhK|bZiy9k6v}&7B9u3d)UyLn zAjdn9WoYy59vyyy?Hvo#9Bkfnd-dews1($F>qP&MmI)RVY#p5@=DP}ECZRcwgr1WQ zQ%}ryi8UB+fyW+u3!AiTM%wSb{l))ytPi*!+SX`oroMspO_+Xg$x0g ztH|H_85)QPqjT*fAgxLAsGa0)on)LzLTZ{M%k3mz)k*s6Btk%wGqS$S z&Va%PHpbhhAFR{oSm{jPNAF` z5Edtl<8LJA3GAO>VhOU)|tr53&`&Vwn!1GgRUZax^QJ1=>cq5FINhFo%!yvsq2`U~$O zH7C%rfheI5_%|Zh4|VA4*$NJ#%xP7TV+sDnS~}$4KZS*V8P4*2&wJIQ>V<3H$juHpn{6qc%81B|qKoMJg*?+&D^@y6$=zD&c$yqBQO z!1~wZVdz~1E%D?BU`@gN0*3cyH3Y7BM={|*)TW{am~`RV1l`l~973YxWBsuu1RG6D zXjixnfjRvJEJT$e=aFkeM-UhTGn7?WL4oakWOI1u+@8^qE3wXvDnl7)#WWaw7ju}{ zoU~}^x>#W=7TA_tk2#6xv#MwZ!jkPh4t9Vdr6_DaW*zvVoAQ=p9Rc%pR4Tt&Pt;FT z@m$^QRu4(PQ8mKiQM6Y1%CU67Q^{ec+ZfF#huVwWa1k4trW%oDs0hb1K}l0X(!xDd z={oEZt-wNSg>1h-4R%`NB}Zt0530-IAA@fYUDQ9cZcu`0wBa3v{y5qfu|40BlU7>BQ5Mp@Jh|9Bx!2*e&xP74^0P}mTu zX#)9B7TPk(7oLo&@e~5YQPsX${z~lK!D*|$*hHu!-RZbh-IDO+@_&Cn-ikLD-*)KD zb(r=rHgSwMHr#8?k-RJ6OTk%WSjQVlbN;!{~l}fwY zXB_D|YXcnT3XGXCHumjuj0*1CaWxoIs6>Ou^oSIA(=o^~vBVKC7~1>&OTNI)U%HlO ziEhQ_`5m5jFzNpXTaVFGv;%!EHvApyka_Srx}j=_6}%Jm{*VD@tF3GKrfego+_=Lz zF;U-=*zh*%az3ud8hO#QHwScJn6Ig(LjTWQZ zOkSx*uEJo3$@KzQ2J*LKwT=JxLoQ?2!d2KQ9y*TMP9h?(UJpNyKM)UH;m-uH^HlKX zKG~mnI`L_j?nv)@MniSJos+-^Yq`&;}2BD zb7uYncAg6U6iE8hi9h2d#}5krOpq;(=QRGz!6^~%0e^Dz;Sy&Cf9^PZ8s|UA>n!2V zN=rB6EaJ~U*m^hq95N5ulRY<{~5xQRQhClhQoX4MY z2!AGkou`67Z@kR(rxSnnNRA&A{Mmbm-TR!zpVxUh!+V(j;IlJke|rHzWlxv=&BOMd zrTLF(##zLlQnucWKU2+v_W1KpeA6C(gnp-vKg(WZ!5!M)eh0F&pa00icc1?>eVFiP zKDRtgfafYUHbsk?bR7S}V)X;A>(FUyNwr+mtHP<+2cecooVomJMmX5dz46Z@!vAIj zTn{~m<(^tNBEfmwUvPlO3;Xl2|ABicCI_&b<7wp50_=flT#iBb1~?oop+gQ=onZK! zg@vbwJa5X1(}N1@QHP>sJ3`0wQk3T{wU8x8YOvQC@7BO8#R@8Wv;Q5Dt0bb2XS&E=VB{#t7)7^L9Twq3PYt#ZAZFE(1k<>nze(r<*j zB+tq$dXUz8MgfyMtWzw-dTKO(ng5aFstEfZ;K@>@Hv1oWHd?e2E$2c3oPTiY5Vjg% z^#{I4u%N>(iX9{yJ=>xq*TuYRu|O3n-GizW@FY?A+y}y?fjK?Z-cV74r)WpKyJs)F zqUi&kj=c-~6Hp`9g|-fZw}*dGFBq}0c!bYU(eB|iyz*DPK{_Hp-|!2tdIpOuG9052 zxGVn^W?Sk@Ii$7?eLJCh0P+c;Wxn;&a7~l_2jh)6aO)o__-xMHn;_> zg)JY;Dbcc3Nb8vRSG~K5A2l3jt^czg48}E@LsM^6$J)?5sOxm0%>87zk)$*(7(b%z5a?txaJDYSXsOJ zF{*-L4Uq6)Z3BcT+Zdb0bu4fZ%R2#2{t0Y-;_^(Ry*%@6^dV0fmS=K7ba+#)ij8i& zr<*!QF;rxsqaf%5>t5u; z4*$wV(4|VRxA`l!;s$F-WzFuEl)iZQw|G9N=;+*mSitg>6w$8=Ew5=!&-K7azn^=E zcQQgw5jxx+?6QX^_LeA?UlEl{d&nSm(V+ZgrCU}0QdK7PZ}o6f)zR=fbAQK7OMipm z#)VC`%UUHhUW5JkI4JoCys78jl8m)na>feEL-wdTD4VS?s;V%a=+B7IfceX?ZkZb$ zxisp17}5!L#zCcP{fjC!m%IBb78ouM@s^f=KI&L(_(dR<^~j%45Mo7eG0Ug9iSAjpSBdfi1z@I{yc7$|-3ZPOVXaZ){fy@Z{?_^{Uq>EQ(*NM=o#=mm zX3mp+?O46{@MgS;Aui=`@1WA7bBZY$Cc-<3g|aVQCMDvC5fBLcZ3*QcMRx&}-0k!) zE<-MMr}`GIJLpvLV&*sGIko`#d6^%Vg*zsA$>*dE4zUr@u?s>!%dLSC_D6rgbOm#5M#6(zC{XIhAYGxCN?lVPlrA% z_4$|F&Jl{W)3Ot?gjp|3nAem3RH5q466XIg51>MwNM6GHmjg&z28WN9q$SKTd~B;w z+ciC~Dh-!KoD}m8;sTW|4Ha!cT*sc+OHtb3DJ4q17OK^d^d#fW_Mq%t$1CCxHmU`} zaE_bc9RsQnh|u|3t(8K!J;b51rPBG}da#Gl5JzrNXet*q+pTEM*=G=>32w`SK^QF4 zPk0+w1}3l!DJ#K)y`eN>%HW_-aWI_Gn7Bt|FsO)wh_i~`*%MY`qGP_ctT&wlN+rs)yuWfmqK!LPU=f7e*^)}j=of} z=L4fJ-G!=rSoNjPvF;x#eQBoD*yu}l@TUF@=u4H)vZsHT^ri8v@fp>ZUfRtPPoKVY znVsK9MPK^eE)ej8qc3$Q{oVS~kp}&sy}ne)H|_PM{(O7}^rh)SxKq@Zh9XQRZIdJa z*ZR`UQoN%tJtOz$^`%t%((gcVM_-Z~tuL*VYg=EEn{!fMs@?$toE?3sX!{37U%C-h z`LOCs?`&fiZo$m#!(v~`A+=%075mcXd2=T8r3ufVpbwS46l9IhsJ`@YJxe@&`qE2v zCclr0zEr*y4gTQhOV5)2Zhfi7Jm^4Q;+qciB|bg_`qDrl+$riymp^^l^d%|Y(U`U)ov2F8pEA zmwcqQtuM8)`e#C4`gAo4`cUahN1t*yduG<-7DrEh6B_)%(U*Qs z`n&a|ADRap=u3Rlfxg7YXFy*{7s8#QzVw$TPMf|Y#XI`a47opfeF>3x(sld^#Dsu% z%)AkZ{V;4%T7Y3?86!^uuiXpf6Z6{J7!cR>_{1MNeEiR_ymyd#C*+uZd>!&{E>8=1 z@c*CivsVeRpFXuZH={axQmeBLUTnxIr8Ya8J9=u#{@B#CTyK{gsx~3>@8b7E{C@kS!eGvRMBK8V2H3TL1WD@NdjT(iG_L~s(_tr%WHcKG9}Sd9!I9K%$EWTJbMWjq!eFJdSf>#S)q8ZM(s$YQ+&b z+pXJ<;otsvKPQez`~@dqNW9UB^bxO{aTOzgG{(`MAcHzM@052XLOS%psoDM^BZ7Ht zH=qjhQI(n2XIRXL;CQP=U*sW5M5f9p5AS0ROg#|krl_50NRXBL$iB?MAZgz#p8=UB4I7LBg&>&RwtNd6UhrY; z_B4=bmiDuf-PB-r?Au;`s-7E!uN2~f7YD~gwqAgp%q78@p*qiIxCQP*+}^Q>Wstc6 zat%ro;^cohyjh}^%xq&<+l#Olvk<9_;V{OdqItn7vEe?H z=7XOAn;34v&6Ig}sw>3%!^6+${_!tK?jKpY*2Td|sQo0SF>Y)*_ z{t1@JJev^o@GpbiUvLs$ZDh8v5|2~(ctaIz#O4^iUpz1<0KX{!Wpx z2-cC$C}eurbPWIEw@{;LRjFOWU-1{#+H{X8N!_FIFoT+++f8Q>A#@0zdM?ot2o&Ap zw|N#w$3d_2x&=vWl-Jt%d#9t9wCm{T+SVGT7!jOrcl7C6Q03|_&K7`d#h%R&TS=8G z`8+y$ar^c-T|FszyROcWlhV~Ep(NAQi$!Ejns>5Yy%^o7m;=d(toPE@uYcI?>cwdM zq%H*(SOTGCJE{$(quOZ4QOyx>;$kHN4nEuO5ZuLKZ75u=@`A${KV~I8UyGq^0O2E> zyE}N-R^ma#B#$-xh#47|y{1QolO&o|-Zr;;+uV1oPuq$9#*6X6eweia#wbca=aNV@ z!gKsUy@NsqNB}SfF3(%ztlnckxmQk{0r>#7k7~UlQX=Ro48>)XnU~HGL@xn zG7`<4n%vB}p0>Gd*6V*at$dt$H^e{dv?_kksd2o)sZD&#j0tU`pS%i^1VN9IVGMg> zx-C$0S`~QNPi@8P5uweh0mPq)Lx&;7=1?CS7=m7hSmrh8t{hjHP$FvGD#T*qn}@RU zJ2to#c#&B`ge?e8kJMq9I|7Tt{FVQHw_*M?QzV8t(1ybtS`5dGj6_r(U^qez_o0`T zgj*OdrH77}GC}RNK8Ej!=0jcaQf#LMt~m973_C*LOWZ^o zV;Ac}SL|VPz0pEjg6Q!x9cIB<5xOFB?x}MgZ|&9>c^(K`x-!am6#cid;2i{M`4omr zop^dvU&83b-vP)t2Sm#7FS?B3W{A^p{RZXe^bN+tjTZ-XNzCM`?=40=G5o%Y-@o8D z2fua8(gH_RS|Eu3fytYz9!0|6;P>D7{T@Hech1MFJR|Wc ze-!s5;#E#)_H-P7k}}l9xBQwb{ii!i?}}G>y(|42xOT_4j5G(;;NnQ_am;5W&g4Y( z7z0pZsAs_67qKQeDUD^N#m0GXl?e&e*B^NSGH3AP1CcJY7cmj>A|U5AKrm#5_CAJr zV;i3JiOo9^sz=|aW|jf{DTw!oEx8!qVeip9h)?(cF4}_Yt$UN^gmb)5^cK7-<2+yu zMU`>F39^ZQ*AcyKl4zox=qe|X9TAiikVMzpiH`9?=X9Mj{&k{@?L>Q=M7|j|T=c=2 z5vaST-v3B#&8z7Q7+KF~gHhkV`xpNXjX(>to&;5hsTn%n9VVufW4B`vo=9$ANjBg! z+xqcg)51GhB)*H^$Vbrbv&rQ5R5 z)zIM-y7FVyAQuYF(k7>vFPk-p4fX)@*i-tT3uR!tM&v7?s}6u!hZMdIeefNC4Rd$g z1|oGQaMB>I`o;VydL6o3?tOk5ULQ?kr3!e+LKHX@Bq`V|_6!|} zv>((^&t{=4-h;A>_B)KOdUJVNU=4na_`QH%9KZRf_I3D;$8QRLGx4)+Vzkc{1s+?l z`2y@r$l&>KL$L*_TR5%6n_WG5GoHcP;fhMk^w>;SlpfB{n0*O%Hl`!?a!-U_#(9c8 z5t;r-nz_>@us=29a5Hs8wl@VPN=Qr-dt4P1tJ|^Xu~k)8gUs9@Q@H~dsveW6$tUXa zxx2C3mCxW@Ru7hCe4)(@wE6uFc<8A`OwCa~H8&G+GD9^8EW==zI;Lhl&P8N2?L!_M zcat8?-+@nYP)kt@LPdVn8=c&o{iksL4j$8mU6K2-btWHMtF|y^<`x|@vl%fnk%=nZ zf|!~05;L z!oFeRw=*`>cI#KiFobahFP$dqez`$f1gmUSzO{%FosTf0N3r!os^)zdK^_@YGjQdz zZ$3B3A1y*W%<2l9sCB|$VX@@=Y8*y{EhBMn6&`YXocH4sup_58ItJ7NM4YP#VD!;( z8sQ^RE(35LMVP;W z!^se~sj$q6&r%gmxqFH5uxC6j8d-%ELT~AX2smJKs*sy9#+D;NHkq=!5Y~*=WS+ z!|@BUM-?+B>~_S#OTH(;FZ9M{*;Pf#B6y}}5JC>-CxxIaxgPW3A=oIlMYUo}*o`=9 z!3XPI(UyYYpa{~-?A`>mEd3+aVsJ*DeuEJTP}0156IV{;k3QqI$xz6U#|A6X5H`&J&o{vAqswGsj{5 z=aCNBdwN*R=kSEZCM{pu1YZY1BS};{N+xz@VNQa*m4SB)Fv+NrKJG2z5-sM?#dQW|MgVX%7c!w8zCes7&Q_BGfmvc#njeEf={R_{r2UwRGd)M%w5a@>kCp~D|7cu_DTP^ z2elM}HicU``(fbJxPQztPW}XfCI|HE%WhcVflfO5x>FwliA3lAL^4E(-bs>MB=If%9 zmA{35XX^9v_ng&#U;ZC5*vQ`la`S%3-`?6R*17(BJBvOU`TNJ$5|X?V`FlCDIxl}u zLH_QJlVWE<|CNx8XI1}wnN4pee;fGpJ<8w33{Tm){#z;qo~-<>V^G2K^7q`eKinq_ zHu5(rH}8l1{V9UfcB%hf!lF+`{uVhobs~Q^OW@4&_J@-z6~ zY7zaRyk zto*Hep4B^Ve>i9D4>t&dZTqj>ydUy+7i40W`tNW5jE;6P^0>sT2A8b!K(m{%{KR zhp~Sm#m<8MD;rhLs{P>xHocwv?Zc<vj6zq=3%w@dkZ35z}%`CH-S z)QSAv%mA3@L?KiptzE{L z)G}VdT7CQ6#=;M*{nIDlBHRAyHCVWkr(0{W#|OV34abH5yOX*m8O~!y!5Q*^26M>NcN$c`Y22C!gS6jVO?2hNwEqv5x30zi{wz6PI0ORGFB@KdJa?scK9D$3%RO?CF4u=BNOWhlSi zvoDm7i2Lctt*AMQ)5({^r+S^|g>ca!|B~+9zYEve?bre4K_CcKv<}xOag}wHu`CfM zr(T~=k&VMF9#W0j)r+5jhpwDAvmXb$@Jx@g*3drqT$|Ie;qjaQAaYIr{n;PKNdvLrX*gYk=f3zCuR)tt(eg;y>TV^UQX?P2aVFSJ;W-u_S%q`a zc^-!kCn$vTPxvcG(J{4bk9K}9JE1)AecuvJE4>I6^hZW=YctN&sa0jm)Z_=H-R0Rh z+2bL!`dOTep4@Qwn(hg2o_+C<^3C0lZxr6blOI(3JvjTOISj}2B|nE#F^LO5=T;MaRZ? z2TjItHO*!l{bvw{L-yO~qcut|A3nsS48Lwpjrl8@gAZ^lLhNp#iJt^P_s3~K7!7ch z$6#0n!rW#PCXGQ4CMmz`%!>i(NpuN2bTRvxI-?KDj9*L=jkEr<-VkV6nm@4@vLpJa zvSv5}!*6)i;cRv__=#@^HA3~#k*h%)(7^hGFzV!h$pp7BSKvlFyz3C}x zHTwrZpV%#JYBz!mWZ>wLA~~HTk-W4CM?Qg0C>eBO*P4LtpsBPvL8XzaVxvH-2iapM zubMX*MDPbty$Ai5b|=ZENPGdbl`iInVtb;cd)S|F{*mcZUvy~K*%=|Dd~w8@S;dZZ z(Kzc{5^)9{YY$G4a&5QnkaQzgONfX9Zn{q1ZS5p?Jgz-2i0ApR9^!GGe~519pCZYz z-Jz^O+|Cce?fmngwkkSk+|KtKxAQCHsbF)c);OL+!n}oz0=q&Zo5J-FR=Yz*)t;h_ zINxJ;s79af@e~D3cg7)DkE`%Vp6?<3KVXkz@Y@|TR85a`4(5Dt<0#y@5j7)< zV_Zhz026wjd+2@c8#7KdS~qXi{p&rso);aY@44DeLRdFR;rrq74%-_j#9gpLoXRWV zjt(DmKuOt3c%PRwhgZ0n zxjh4Twq4>i+IY5!cOOYS`}!8N{A}RaaYXogAMotn&F2c99YEAWA<${Sv$rL$j|QIo ztlH4+tl`cX?-a(f2w zEM&^n^RrL#?jwn3_ij2%cy{eZBX&;j{A{yidoIk+E_&kh;n`;;ua5?v?SAZR@j)zKH=F8H2M_r>_0c0Er%JB%W=4 z1T8-s^Rut4e_!zIb;u##<}}+IlhzN-vSG#xDa(davB6Omh0�#D$#8^2fZOO2;-s5R2OV4OOD_)udeNTlzHYG|=Sa9f7Kid4fKjH_8Hl89wg z!qAU8iqTNU@*W1;d1xzQI8Dci&`NPl6v4uWGst)jf*Fku<{&&Y{`w1cN4}fc&7Z#; z@t=mFyd1>K%87YANsEb<886L))tISIh+&}OyY6%T7@uNyR1F@hjLXbKJLqyT8zdTpJL*1G0>!m$JLE7*)}_| zxpWlCEe}XGF((^l!I0a?E`G&~FPm7D0p2(MotZOC9HN9(lqA<`wzutitCZO>R9Ox( zL^c^oAul_R5_XvmKMD#m)Egs#WvZMFsx}N}G92(Q~t5j-0K z?)E|DM<66RF2|@|$cW+67x)*KaFKLGZ~*F)Gy4MN9fVAJAd^8o{EPp>1sH@9L^c^J zr#$8@XRYysJY0aMnTZyFq5dU51@FPsrOD)z*ncG_+dzpkp9#8- zAW1;4fgsWdax8iU$z_vfpo=tH&{X7@rE;o-CT?2bd0)FLtxBQ=-VAG-xu{@ZMmOnFjG&r}xL-Jp0L^3Pn&sJ#Mhx`SbC}{PH~ideUoN9| z;T@VY6?ePy;9$bhg_-YoOA`16-gsdKq z=-C;A@JT=9*pCsl@EQf>UHJ?i%zX2}pi+C)bM!q0Z3yaBT6oK-p-jak=*V$WOP}5E@bOxVhwe;6S3M!ENiHe*u&0{iRE!FAVvxivKqZ1 zymQXQs9{EE8@h5<)E7bg-0}V;>p1KeNI2mU430P%!4cOc^;JZ2?tx!->$~@v0XO8| zaZw)|+Ff$;Dr6ss4|a9k9nM&dS35&8zHY|&%e%AF@>_hw?=k$m_p)Tfd)~Aqxnvz8 z+hdozjTa{!@A(}qa8XVs!UNaHa`3$;khg^cRF3|EM?8bqje!0o?a3U?O- zH0q$v{ZPG098w$*Tvo=ALR{x|F`bY6T6diPO-yG>CjSzJ!3Ch(pF(#=UtYG{uzTDJ zA^X2M4A#K<4Lia0I>9K1>pH_&C^Jb_9y&3&P`fTMF>1+c%C04l*)d%~0u?cA&g56Yzrh%fI3{Rtwqwqrx2%&oK zoA?GR;##r6vl7s_U&XT}7a*og{x)b&{7*c}LnOA3`|}wmw?AS;kFsN>e(}Y$KuuFx zpas7Z_@(3iKk%D~-*@n<#P3J=eeN%5f%{&9-icomeiz{WFn&MB?`iyYx%l0Q-y-~efuD&7m#R-+0agxt74fCJ zA;L8O_CTEJZiq7N#oy#O)9)N*7s^1K=}+Q=Uie*#-zV_1b!7MlAc!bJ-K~lfBK~= zCtmfhewZ9jx})?DBRz6|EEl6EyT}*XY0XM}WplrMc@HGwUC(xvcSGXK)cQH;hqNoN zTjHxu%cGuW;%j$r_kA^<=&0G9eJ?`Bd|&&6)b=jy^n1qNu0gb9oFt`=t65nxDO4+~ zK`IE7jHL6VZldjT|zK6n_6 z`f4d)>+)*7RMgP&MOU{$)Pge6`B`>+{Sjzi_21G0f5EQ@u0MmH?k|z%JP9d`h~*}r zFea(Us2fzjT>e)DQ`PqwJy=cf-mGp<2l@J{y2d7yn!!0!5I&Tk{QyY){<1(Ki+@Gc0Kt! zCnr*tk>;-`XFH%a$GpA6HFM^o{Qlu1vu7i^@iwIF6B|G!GT^BTZG~o=1qxASzA_i~0Hk-?B=x2mzP_jzz8+o?Xx`{-_h-`+=TTmIIpj7cF4HnD}@$ z$LI4u@DA?8C^EA3?O28>l^KV(&gqLl&^=2a@}H?W?1>MB!y8;#@jSrir8DgN*)7N< zHmVH`xn!E^IW3%C+5?7>NNsndz3`r%H>Q`S<*ND+XClW?W*=0M;if&i!rMx|agTT4 zjcIeP#d988krT}fPY%p2#BClO?C>;xjjn)vUmxFyuQQP{H+ltAUd@z9mKph`FHL2Z zTq(Q)V-9}<%0UbhnYfRCnS^EVYjnms_R(%Un+N3ht4p{hd|UGgLPmmkaqR!NrP6b0~3`aimzOTv5Al4+0M9)?{@}h+^ESMiSg;I;TUx!RDx5jXoL!? z(d^j$RN++IWvL%<;NZc)n>VoKNS%j~!{gMlICjvxL->oXngRM{`G>S*w;|2=>^DH^ z0l3N>RGQ&mJc#`p=jMTbI2|g>U)h@v_&Ioc^=8ZyG5>#){eC2eXMeovBfV=xET=yL zSj$;nePy;5G-owo3|JvC-jUh4G2cMW1F_`=!w6yOLAG4<<%@I*^yOSnOU!!}`f?sJ z?>D=r=|1mo=E>u7i6#Qq6>p~m6-^pY>(3GVLke(|2*$I?b$&FChqB)3c>|Wj zyh}igED7+A(kFp|C9pxlg>*Z$av^X(w4c-ef!gRvwus>~^qQQHIBqKTDL^dafJANg ztWk=ck(kM|Yea@;zky=<4MTpAdLpQX?nJi5VG8Z>{=x&S#nssUKr2hki$L+&&w}KA z!mrOAQiY)rIhIyBD12;gZ=@SAI*Rz#dlh?M;Oebf3J1ck&)XOOC#1iOX)mtJrFp{^ z0N^(!0M{FTY@DX4D7gn-T{~_f`(Q~8yF@>0+%d2dqb;%}P^k7+yn*=N;7InfV0u5a zpct%&QA7<(SGffDVW|5QPdx=N?l=zf@HMsuTwMn$jzL;L1Z6KyWn|~?A1macX1U08 zlFEz@M7Dh@+Wd>ZiU?yL61W#G2DO&#|bBBBEFkc`aLb>hY6lc!5EaW zm!rWX6B{!23Y_F6hF%uI2ujU~hUixz=` zsO&&pOq?h-(8iOT1fHN^<_#?9htmYoi6=ERmM5NX05?GW0qQps)u&$9^3?3EE>HUeP|BOo4tBgl9AiC79*J ze4hx{mtL0}?-a=6FF*La7+>Mi(aMPWItdMe`STHB@bHU5rX~6e3cpbJB>?yO1_I6 z1Bc(Fc@A|PfkP5eL8d@Hb=cv9o-BZd3YT8Prc|_*d~z(D)$v_$A`M?{rM@xNr_g~T zTQZS9Ep1eQa_@-LwB8;aMvHEiJ_!VM2VhQ>O5~@8XELZtd3Y*MhcpiqLtJ9 zd%dbIPhmxg3|GF=KLUw~7-SG;S(ufDU-L({;u2R);V$d0MSx6m5Rn{U)|Ck!Ofm<*#Bzj5k3&j#i;eCc^C^Aa z(BKoXn@?chMda1A($}QooD!he=zu2*K*WJ)#i9uy${n{y$LLX5cPuS%8-9!MyC1)` z_{~JMufcB^e&g|*f**ATd;A4u{GmJaeL{3R5JHWfs+O=Pt9d*RIj9F?<6odQ4#$}5 zgQdU&cpjiWA=HaaI)M?Hq4irCEf}w%ts#zAAEXUW4$cxiFY++5)#nGl<(>CU%w1Q$ zokG@3)5Wb@7RnIuS(lQ&4e=2+^|55f15|Bp$f(ex>J#=S&-0=oeue%-ROHqCWJZP_ z8m}tveQMX$?7lq5%KLrR5(zTV^Rl8j_Z4Cr%%a=a<3N}=)l#0TD@T$>3$rly=2=8P zS(8-vHc{c1f6vtVtE_^z(r9n)x|?g%JDz+Nk?8PuKzsLA>H{1wj$S&E7FdAaFYxL5f(?}Y>N~}% zUXHjz<1*AD^1Jb6bxYPLurl*WCJArFaOkJL(-)dOuKKDW-q3#aoghBY^JUU%0p!Sb zf20tdCwBXZr=W7Th42i0BPio8sAi8*w~j}3d}6YY(>j7bS>EPmds|65MpC*p@otz} zs6&s=&E9HV0a8kaYCp3)T!}h4bhN*@I_aCg;tpp{-|o=ZPWM)sJMT?8-3>aO7NNQh zjY;WN=yaFN$V#V7jg9V;{d{8_y(B}{%=&IXox0WhPkQ6ap1uA@dftpKmFdqzSMk&@ z?YT7T(wO%;bfJFiRuDq{qrOFhao-1>X@Crh?fylg@7G2r+2#(6=dbAT+#5ui^A2=< z{C45@CVnn`zr48^RR3AGK#xH7(^2eH%TJG1JjB^UzAsv_8W%Wisji{{7k<=oBKF;` zUxSH2=V?H?0xP7zyR($kB3f~fUrTMH6)kej3P&q=@|CKEO0cPk_pzh+`=y1Tj=ypn z{;KtCV61RTbiI7FUcOo{Uulv^&iXqHeeJNZf;5QKrel|MbOqDu_hvo4V7zBn+g!AW z4YA4?OZ=4!W&Ke4gc|=O&K!TTpE_RicW?PCEofMDg%rMmg?sj~w?tm_`}2fBo_Zw> zLZ|Vf(+pBEVTm+H>B4i$3zalXH!{45#PBbgLn#F|3aJcL$Vq8j0eDMVfTgkTG^rRF zuc3A+u4s%c4Ii8HUA02^AfI>| zOtW-9DHty_VP>2rOk-SU-E8R5us%haE-Z|WsO%Ts#LQ+tgNiBB$W}Zs94;vCtRdm! z{)hzr&|N|35vdjy2_rO%AUDy+gg)M@^G4bxQZw8o}sYS*;JSEu!=^*>sD ze{==gq*^PUE%jmoF+2MWjqjT{n7hrLaO*^?1u>C5!X9idi!}L5dYkSI)lr1R?EcZk z>rWtkL0gQUDV^u8NDW4Hq@nHVV^^b_v7C9oo{dsUe-@P?tYq-26>O7?x~C}U5+kdQ zql$D8eyJ5QqzbZdjAC0sR%8UE_;xtY|8{9! z+xmy_mGxV+NLUu$HTPQ02z4x^+n`pgMiN?vx~mEfI8RMj#BzyW7gG?H%FkYSs^;?M`N@t&P+^Uxf&!YZTF;LAz! z|4|I#NBgPQYW~Ml{xZVO_Kr%I(tTTN3y~LlL;jOF?5V7mku2A#7^|zKEoz07JfOTl zNvm`V!|U1Wjr<1>MJ5}Pkd4x^LNIneGb#+mW<&my>zag+|Lbt$vFTOX>zW z|DDkon;AYr;m>kaX)`51t8DO4*aNDNCi%@V-zC-z29?%rh5=Oz|AOd+xtW-GgyL;l$CwDQ&;De@{w=7F5&O(S#QqZWnI$6jW$^9P zUsCL6F|`)^Qea_L+Qdm}n;r>RX^BeK+a0Fmr){Hvj`NjFk*v&1r#wCn@VR3}Aq5O@RR^vru3Fb2-TYFu>V`9v}t=wC3Ph zzMd+j8v&|tZ>>RNTnIp(2m(mr70YmI5P(CD2*9t10K5kRQ2e+NpwHI?0n}fJ4tg@aGtmBoL639>x znVK>sAemiL0?sJS^dx0Uz#hRVL4LCh2KIb_oxlbIDP2nw&Iecp8w^C?YdI&iO@INE zTNx~|2BbD%K%1wQIx-&+=_uG0T`wYYz0kve0l(vXK!X9RkPHTVpE4hSq?z?R(sec& z=wAK`b}!$gXB1k!v(?O-TwuU@8F_=rfG|VaV!%MuOqQ-&7#3aJzi6&K86a2eIe-lY zoDA?2don-8Td7at-%8}&fr0Qb5xj~m-=1Aq-^-g6D<^Ux!2Oz}_7;p~2{$#-5OQ@9r1F|k<4j_FW zbAUDc0AS!}Y7GX$=z=Wh{se<+B&a#uUF*u_FS4VVE(S2*KnAq{2CP58fB?YC0}k}u zTkBH(E|7p;si`R71q$Rh-w%!+NAM#5>Ro~RYhDcWI^L_E2QeqzHpy+T<9uHq-Lw{k zE14*0Q6G8brl^34+NA_2-aHU_@g{5GO!&&<6khW%s;8d<1lCc!W0a#9`%SObUfZH_ zHIH+VZ)Lw>{>mzLX2C>*LDMjp7L#XC zMJe$*K%?b&Y+Z$>xzLE6!i7dvxHV|R9!NCeS41P;1C3a|8;ySS)sE5VJI?bYG!lDq zdGn;?$q4OH!eZK^9zqd%GQwfXc^W4p?9qBImoypKh{vM;wa5h~BV?PNjF3V0WaKEX z*YmG?GO|J^Rx-_UO-X12H6kQsO2YQbl!Pp@QOKT>tiv;Z#p^O9k&1CL!de))B!(N? zHpRMd5^{*|g}erLs);+IJ982ul2Thnw6?1|wf=(Bk7^P~cUEKGU{}?hoBCMWJj_2- z1GH^x?0&FUE4Jy<_0)K0?%^$eS=$3z@wqP0)@|LkC%$#mTWO_k0u@^=eq~(ghK1Mf zL3;n9d6a6@*JT({U*{-PoOQ5ciGELlC^14rwl--CBIX{##J!w-kWk?oGdGgwVuQLM zRF5f0O+#gC56nGq3-NxC{x1$xAM-L(~rM9D#**u>M3&g>A<_Md=94{oFbD&*5lN4iHW~8(ljyuGV36fQ zEh$0LF;k-f%AScN3{MJ^5e^gUC5Dg&_@pZ_En+>y;O{ofNL&Ue4kdt$C&n?XH4iaB zkyQRiu8X`30~B9@v)$UyJYay@8C}nIcW8jx={7*ITB=11P;Wr!w{d(##CWAA9q&ul60`4#0o?;-D5 zv|HZ)yr={FQ_MVk&-0CCD5bsqsR~b{GXF^u`48f;hX77BA-MOk-r8PsUm+RbE#+%kuMda$Y(7Ke29U3<$c1|)Q~96 z7ATksCu~i8>j)HSqOQM)5~-p3c1@?H{9-fv_nl=rLU0&rBN+Le8Y5b3c~9O#-W$sk zdyQD0SfXut+JkEkCL8=u$sQF^3LMa?pksMr-deLb)%k{Pbz%-~s}m~@tJ5q30ObEl z)<6tTvk=1ABMPYW3o$&cW$~2%t8n2qJn=KNf_bGHp7_j>|7@VzR3)j&uFeckB#yAs zShF1YFC_9;aub#2SF-$PhwV(?{~UudbFZRae~>Xp`QIefS%$wx{_kKWE`6W(kpCK1|`4Oi8Bw+{Z5n7;NWRie_2OM*H3b2t^1`mV} z(x9X%fKJ?QRYF^#$n#V@Aa?~1*5aZoJdlbJ4_FH=19U%jV}r8}!Csn#2mD^}U>z>Z z+OA&1(02Y9zi{w?4YBcnUqoXY@Yjt8V-Xv>Q-RaH{AF!!l0G6ZX$u@$G{^{=NBPzf zIMPHhZ#$w!NxAmg1N)H+52Ptc_Ifr#^nc-x2ynpz76d#X?KB>+n-dS1qkf)>2V3yQ z-~lg*2mG(`fcd%cfcK*RGii!*H`*Lx=~=*vxy3(TPp8@qlmj z(pft^c$fjNJDZ***uxejFFm-~!?zB5gxaaA54sDm`&Jv8kjBXR zHxIxd31idcUxBenPhWRxOBsS+NE&M?UMY>kV)5+N((CxV9)O%Xr&T5JX5s{^8^SGn zWJn3#+*A@$F=?u=JS^*Iv-=x~u}mhsxoxqPq@)&gJ5di9oUrPBFn8{PwNSOGWQTz_-Nc=J!r^Ax;+f7^Nc5(MN?Q1T4hm+oX7^3DXed>_-Oy8X1qBG`_ho19oUyXYaX7rFSV%;l6~o0V1B0p<)dm}Dt-z>-~(Y_diKea zVGk9rvuR)IhgxUKZ+n2gC<%in76hLt3bIZQ8^Ks3+(`8>8@}-XT{cD})Df<3- z`_c!-zH}!#L#KFA`ix8xFX0#lCbqTI8B< z$h7)@V_$mqhK}*(ap!po-iUo^R(t=Y4IJV0U!qBki`m9eNBo-W#7@XPBhEHE`jd?I zs)^}Q@i>qr?L*9jOWLB96(Tp<-J{xxNV{eaV0qS2;vraqk7Su+&u!S^)hO7rD0INr9>EPBbN$oq}d7p72ZdUbOO^ zczl>OkL_Fom+gVF_o5l^)h5!z-iN`Vtu3GWJFa~Efrd(1IJDhuS%Q9V@BdEhzhFzO zw-N5zV3fCWA1En(1xvTrK-@l1eCrt5*-EvZ?J;ZiTy)jGEb>$vHC_8JNGn4YE+7a^ zxH8_tEX@83@<}(=_(0JEN@%uz9bP#uw@tWfw*`YO)mt$3<4VaV^tzR1NoO+qFJx;6 zw_v=CklsqaPu+sS%&`BCTQGDZb^Rr0x^zjV?Ha-@7<&JmBounst5eL;=22pQj5eL? zg%xWeBaC;p1tVceBqcP>JK_@GI$V-kx*L$nC2Yjd`|n74v;S^l^8UM;wJ49qZEamm za(}Wtff8;|*1b#(crvMF`9u0jiu+Ro%BvIiG<0T!pMfKkbbFBs;t0i-*p5(q#dPi0 zKC~kgY5VSuP&<$+;Rq$WFF2(2BKS9cOVD6G0vh53CH3YaI7Nlq35uT??Iy(uibdFq z5>eR+tV9&*xp8MsP$Y&hO|6hJokei=J?y@C9c@=J-egzn{demsPT)@agNN5sUe5la z@f%#R1$UmUDldRtc{jf8uaLbPD>!DjQ*s0T$1*-{U4#~cPw^Y{&JcybOc&}PYHcD_ z5ep+W+S|5%Idj{qzq7{6M?M5yQBq8}cJ4KL+pTIqKm&QE))NeHASrgwUZOq75JF69 zulHi+>K)bC^}J{RdfgqW*6j1UvA?l{Nj~x2N&EdiXd8z=cnHaBDm00-so2@!aCrwDE~d z(k(SUTf`?Jn0tRK5wCOU?u*Ar!$WsTI!tKuIXXu)&ErYVMf&B=!f&8|>P7obj|f11FnB+#kp?ZDexs z$GtyL>Svg8;fxHaB&5i0!Sl z2H)D=T39ll;o2LBCG$TZCbbKldUMHKh{z@Lhwy3pCG*vI+U1hDj9Ua+la`rP^GgtO z!NoI?c1tf=iYOhTLn{K)_uIHFa6hsKFm;D;kny}u$<`#wpZg7$*4WS>cme^;}zRSj|UfCaqJ0RN#Ev_N(KV) zY8mqo&!FfEvd7@nLR=cWVkyKcp?;U{W56pWcHxzF9AlqLol>!5({aq%zG!b8d5~Fj z3|3q4%Jv^-n@mSe-o6Ogdywzk+ZXEvtoVt56?>`LL}J)`*{gW%-oDr&SW!UQV6_k= zcJK<4aP2Rf#ukP&_>pG>E53EqbYYtwVcN;fB@fv|do#Q2U*u-?J*=N` z{ezfib=!dzIiy<(up&VTRzfgQ@0`gL-=*Re_Aeeu>|d1hsrwiCl|7$YiEGZM?puv# zGLljutCaf}IhkSw?D}t%EZqBJk{Uw1dbjl>z zFlRs0y6c_F9DtSHzetLA3|3{oKpuJyMb^CwSdC`t6tI#mlHx)pV_SDIxR8;u?5cY6 z6lPSeEsfIevY#;<7>zR-vur=1I+M<1TeJ1fMNAxoBeo~mmj^)ZmNqMKQWiHdFEH_r zh`5zuz6L~m;z1%Jo6v!gZ#5nh5v8{$oX99|jBeD46B$|EwG$ahZf0tfBrYd1A-})! z1cilQb9S}ce{7xJ(5e_VYD)=fcO^&|))Rqx?4WHEw@w6OnDt z*A_B2%-2@ozqMLE((^SIqvvbvgBm0GObN0kV-xxFkh?Zw`RWPK;S)}a^WMh zitkLCvfbspcc4(N#Gc60XHw#G30lyexE#4@@N2?VbQ5#06G5lJk4=zWlFnp}!%x6( zqg(*|w2VS->=1feoY~#0Cu{6<2K-nG!H-n4Cu=Rdmd!v(zSEK`AdsK9AW&Ns*&|aS zP{t{(iVb*~I%T8K@mCy`DVwx_lQjzuZOmh9?8zEyMEABaL2cf zM3rXhHc*yo95eeT*)kmf$mKsR&Eb4T`XsG}Y>42A@JNh%;y=xT0C%LH_Mevg;6L5W zC-OYifBF#K82@Qr(tn!&wf{8pbNf&8p8nG(enJ9ErtbAEKG5r1tbyBqn)PrYc2Yy= zKh2Ew#xooA*hJfZnr}5H+xbt=MokRhb-^CCsJ(yN9y}#`_|{>MP&?IVCG_f zYg3{gGi;ui63G^AN^FmJ+JHz3ycYxFT70Jsh}ZrYv=mA@21HgscG0ZEh1-D0&raTe z_>iP#BTmAAC}p-YAil-{pD-Zic2lpE-i2rOn za_oo4ue9xl%qPWu_-FI-RPBdV$f^tbA*-h$X*sS^?1v5f))8EQB+VW`(o($AB0PEu z_QU9=d4Volc|uj5-8~i{X<3NoN&G@@=b7f-&r`k|rC5Ctz;&@U6ohp|-F`S4%TVnkG-} zrAEDdWEdcO}QWqQOpmP3}IW7~CMIhmbENCOR*pFJK7JW z14zAKKjckVL`|yw@UD-!=0{BCwjYjky>#0Tzu-J~CQYYcKV%(K@Ja@|S?^kf*PYrA zwHSjuSjS9gKa`d_>s=&zXL!X@PHw$R)2}ltB0FCyUg-|hiDL#koQ+q~0tc@)FfVD1 zZBAsbBwk5}cZVa;c*XB!3MF3(YH1^CYB&OoS0s;(SNuYUBS^xl-9PL?ASNtQ`|)w| z+DYf;LTRIJfXttys@fk?p6c*O$)RI62wt%oNq9vvIr~q^{!_v$ z=I6#M-V?7jRczSw=@ig*#Mh*M4c<>h#& zO^LIX5g*wg$COB_3O=sHMSD{sKkgDAg|Ho)5}7sOk<^qV!qad z^g0?`II+G~&u8Kx*M7bx?_BtJ1)6E>hl}}{p08>9;X*vH=W7da&G}jt{##S!BRyYR zg$JqjLq6*WBNO&R_9D#J_|KlNIrhU_E^*-_vr4faUhBMfpzyr?kcaU^>{T>U_5*D{ z9IUz!unDiWqi9C5fIX+}hyCthbDP;{_k4{H&anOP=h2g4&mm#YLHxC+({A?gt%H9e zhflNp@WfJ5sw4bsK-mWWcHq)_mMK4k_QO{zh(e^KppZBq?!nzTYd?&l!3K{+KRGG; z;U4+u{jwiEeqk5(!=IR!=k14x>c5&j^TTOB{N3U%1l~v0ez+S z0x_&%po>|{5>w#mw;x`c=9(W-(Q(@kFLu3j+YkTIE%A{vX*zE|#3&?QarT|M-o@Gc z2iJa>c6S#7F=3z*rCXbGT>FbTIi#(DZyg0))U6M<{jhlf35=hnQ^)vB1gcApj39X5Wi+bpIxK^JB>MuB^j|x3z4yM&- zf%u2i%ORmHES!gg(rjzM%$$9xcU)Ai6T3ZCQ8gy0<`-ifM9u1Jy$lC(?RipTd9P^! z>gnSH=tzlk>a|N_%)2BSBSh%@&FQ25iq-T7LAx}G?#@EB#VHKOii%^Aar>yC+eblh zY~mEN+=O#!jKBIJW-8wLJeuY=r0awrmuPr`D0@dVCQ!`%VTtoYsrFc3Ld7Y*aCWu$ zPFKqLk32k1Z)Y~gd&yZ2`XEDF%+gF{A&Vr7JCB`}^)lUJa|oK8OT!9;<-8`depUeQ z4%R{O^qpp2=u+--v-PD?lpy(PxZ^>gSa}wL^0?4_v!5huq*&3h=&6)S0yat znN2?d`EA-0mo#G>x|1K)({OC>n(j=d&(KgSSU^W~XBtQQ*n>Np?ou%6uJ=>xzJar) z(Oj%`9A!#b*=rLoTvQk5dB#SkTc1tTOI&MQeIkCX`wN{1d;c!$*c{{rU_%e)(g;23UNfuj8WWh+~U5_1OUw*qZ zw@q&r++~eNgQY`;cg_tOzp5i4o!U884krZblT%AR(c!-1*;RV|U&-D%hs$a(9P>nK z4)&^xbcBjfO`5iLiN~I>dktElL`2#vpl~kb;jlQgBXK?~j_05deRrqQ7Uss|InpcM z@Gt%}#i#5NzzI#0aV+4o|3(%wD~H9D`?5O8x^~Rs(dJy?l>O-}Oj!Iz=}#lFKOLoU zocSx)u%n6RdG;GsN}sIZ*{!;BS2%a z%k&8y;(QVkcMCXn8h3QRF4|LPn00yL09f`DEq@*7&QHE3V7^%w6+eKT26~4__8;!J z-D-ooB9DkQIN#ZPcV!2VF9HdWPaVBZ08}7IOm4VMeq{9;4?4rWHkpNWeE}rAQkc*)01<6L`M{53P}?b;r2l5djnxIib&uO?GRi8E`eS zAl@@82X~}qX4A2hOx(dfH#y|ioJUHq=T`#uY^mN)8X?&88-P9At-*c+u5?d!z@BeY z!CuY+9HDSNntZDof6 zPLPf0{$o(uMt3$`Z|!i0JZ*G;{;)JMi8>J5E}5M)%Cipc|Q|Oe;_JRCb;FBgI*KK;JM#y{7xD={-xeQ zI@E*WS$sc`W5HP-@VuNuS@cc8bG2CS{}u(_Q?EB;s=Vtoeh+DrDC}xC)UY3+i7o^u z#}p8JCI7Ejh`(|)hamV`+?9Mx4-06!91LM`9VC8N^MhCw|E`$Nzr=32)!5C{#O`JI zua8yHvkQl(6pCH&)ZbA&eS5pUu+(*=FPTL6z80b|yN&VgH{yxj84{SD!qna>HWP1U zWtTN}pRdBtjCPg+-7LZhEh7bjhm_3z#lI&v^sYmFzC7@o{lms@9-`8=eiokCUOvll zt+`??ME&&MF*kk-V~F3(M{Oc!LNe_Y{3i9Iz;6~${9cRyCBSb|-2}8Z^QXjq`N^*) zCgZxa_+EiI+{Z|=ji zr|j&Hg5M9}LhqoA%JB=Fvi}FWSpvU{4hncL#6#D7eI>rLV$+aIhse_1;5U=$vsZK= zAsbxWW>Kbbz(r~%Ojan_25(k#cDW*OGr0gan`nGm0o?fqZHHEwqD#A0Y(WwSwMmN( zQG2vAKW7@?XWLwTetS<;g24TYf5v0UE(y4qzX9$o0^BT?z^yB(ft$~4;AWi(+}{T= zZQy2$HSwzw$en-C>dzv(B5u(^LsVg8Sd;ZZsJIZcI3e< zoE2g(ixxp^!W4Y1xz}4*jZ3QNM1WV>Ty0OxI4jdrGI339u+NKaC)^uwn5Our9(4Ru z_dCa-@UWCU$+r#8t@iq+f2xf0gn#PG*w(8RN1WCu8};d*$~4wj{{d+zew-Ss;h&0w zbJ@voHZP88)aVQ?;m)xWtetlfK}aE)1KvcnfW#HGU@5;Q(GG2;Z(hiCy73%6QRq#sArK ztkOH!vDiGPV@<`KbSz@g|Egm}HkqD5bF{WzWkWEN*lPJEc2v<%diX1}eli_TsGp2N zupg4XO)Mx@6Dp~PYpK(<7S3FE*1fgH``oTPB{U8y~paq{Al_bjU zT38&LFvZ@B1e3yAyw~Oq9UC?gAf_;A@4=zG(}5mb5e!D(j$YB(j?sh%auYsn?}2;} zPbvNQ*1^qnOzVnZAYxWWZIGv7neUh$#{D*uIroP)^Gm&g!1JE@A=DGLJULzg1%Q5@ zy5Gja8?!%@m#*`k$EqVXzR7+}ocGN9vEPQ8%FUCJqXsCq%P|YmOXjQuw%lwXlcW{Y zS9HaB2DGusavKrLH7g0&x%&XRn60vqFq%0+e{S{JU3@asXGN7nzqB<$uH4wv=Ua#R z><4yORw+<+L21gez9vjTi=n?zyKVg*DPceU>Ock5VhZJO=g*^t1f6sf62o=C^XJ-s zXSfGl=FP9-JH1rS@yD$;dOX*1Q>a;C(~Dn@joH~73RT9e7RuoF)Jv=a3Is7H|Eo49 zPl5ho>o7W2!9z&#?q=l%q)G%koukCcWlYN7yA9pOIq=h;WM!bB=+vYvnWoH3`OG#c z+flZ5uyE1;MBRU~{khNNhS4U-5{WE#k3^Ph#VxdnD$yp6;>Ktbd`@j*AzpM-_IkmC zcuIYO)pqL>)x6(j1<_QOK0!87pODm|@jChhzi`$I*z=%I@SoNv4)Iel`8wxvi_Kvb zUuZRgU65+TNj!G;ewi40tdcks}dw0ePZBy0@HsDLc+@DV*bD5R1Ua*uE zNbL5-l28jCI7>pjgRUqUr!be#Z01HbF=5Jj0h@d>>jk7in;31Zz$Da0)-K(6F066Z z3#yPlB(o*Kb5fu72KEQq8-!WFa~5w7?AD{*Sugn80l{;u7w}`VUcgHM^Ihicdsr`M zKpuqnwfLX1Ua*?4jJ;t2uL<$<#4qE+F6<2)_8mgJy5?YL?Uwc^-Hf|DpZT*Luy0oz(_t=&>!0=h

jBqN?UE!+7`F8Wq0Yn>=tdRp(Y_qBBU4~#b~n{ZCWQyc8!|qDAD|%=RN0q-#3#< zxOhkS{f5jr^IgvMeV_Mw+W0W)8`j~A&EnbebQUiw!_DGfpUF$+;zFY{Z4~gN?FF`` z!CKGmD|>{^;(udUJYR%Eo9H6Ygs+UZZRON~X%f;@8N7 z8t}i1#ovTx56R+fui+ZpG}v6grAZdgUmYeRO;W8E_QKaH{HXd8l&p9z7B3Gci)W9O zu3tiGc_UbSGi&9DZ;k{*YTH>O^_eW5oy(pAVhUNj%FmR@2Y=_oHGltR1dnr>5cCn> ze2e1mY=O<+*$DD?)oR7xg=~?(^ZnYEkip*{=F?Pm1!jmMe}DDz-5Gi|G+om}GlCg< z{^|_9v_tc2d7(^z8dkPfPk_zex!MMlz$fzMz@uFL4u7AD7Ha;!nm?rTckU3Sc~GKUp-j7#3@KoJ~} zt7fXUFOWIN$*WoH3!+G<#>KEN2yGZPu`Ii-b3@4co!k(7pKV{@%%n8v6o=LM2^Ej-AF=*78S}f52*##Xo@S%v#Tx2}t7KH2VTy zPkt{`HN1V{ovkkUoo~yuFSI)s3~66@Ad5)P6+wQ_g{pFD+V%zMgy#2ic^UcreewnT zeuaF2OCVcAEihaH@4#2Z?>RHW@%uISJuAOA_5}{H;rBAF zrG^xK&-Q}fv*(K6x8oc6J=>w`Gx}IQ3AsJTGG@ zN9?i%Hos>h$nRCFGx$AUrdSa(ak=Grj*6NYTb|Fsdv`tbY^chUlWpkvYbL*E3$-Vv z@Ow3^Y_FaGo8NP_X}f}u6?Ha+!|&%@iYF;~ehn_o;P*B19&Sl>pPoAK`%`(J;`h7{ z{2m;h%>F)<%=S>6-V))Fwh1RkbSLI=JohaBn?*lM>vK`8yx$<~WdP1~FDKjbnY zx{#~ypNo=%E_es^34Ddhgby^urJ?i*O{`X#?gf@OE6La=mhuV(HrO#L7Vcn`SSiFl zK^DR#bu0c3v!oy|yx;Z-jyTs7|2pgG4G7hWnb1BVbBp!FYm(o3j_YX=FV9?0F8c&0 z+HIfsQz;h~yXV*^ZsIezusA;NX<^0Ib8fIKlzpNZ1==S#*sxDmlqDXX;<~+b7cX6&t=x7Eh%8iLy_e zk7f_a;y)esi3wlgwj#1k=Y;R$_6h$NIjL)%Ngd;ge<17s zi0u=1pnV^LeWLvLws<~7{DX7Be*1(;S+M;a@_Xuyi~{x(VV}4Z%^s59e>&_F7k`1< zisD)tzh{Nw_ayTlfPG@?_}v+LlB18xK5-^msQEo%$8Osv-Ymj>pCBS$`(qepyOv>cq zK0FJ@kWdC4bdqBq=W%%h?nL5xWL_$pW=`+A{7E{1sK8C*Yq7=c6>r_45-aD4xm8U0roI<-*oV#|s_!WjZQH&$FI{Ax=HQ*`n)$AbM{qB}8E{7e%rFVmg@6STQno@%Kks$SR3Tq8>PCBxdF)Au?9ip*t<%{2nt_(rqLy@fL0CJ}@9Im4U4# z)pW=Rw)o0gJX=+Es^F&iS6Z)GTP0tGa`Z2|9L^YOAxJt04k=?T5&?F$7bWH!+Eju8 ziAynl;k~B=^VDM6bYrC-@XV0eLCA~F)5LjE6NGjBFdn2%u?aT$V*iDPVN$GKHKSrL zMQ%&aCN(nBB2FnA;$=h9rsdw#*#=CFq|1@XQR6)9wD5V(w8&iQY3ac)ahVobBWhZ< z_?FzrDN*wwPRPpEpO})TA}W-(M)JDPv3<>WhFLbMeX_$;h>6MQWNoqUO#YL7o7JMO z!tL>kM(0es0_So`s9{}~ckzo{WoqCp$xq|M10kqF)+NPSIPE_o17Zs$gTq z$vSc~6_6MsoL_Q3X+Evv2L;7z+zH0u{7h6E8qO0xuvA_iA(I}78H&sQ+F61f3Dl{K z#cJ~4BO$y&5y#lup80-7WUIFMmhxy!Lu|#dPkiVS1y!;lkMvi{XZ8H~|+=P+SmwOCXYA z;mGol4h6QV93+j>XLgvKyKpU7C~vF#HUH1^Jyt7(P>nLjYzwcHOA`5NoFvG~wI1|% z2|b>8o#o9@Bczg*>E$s31M|({1_r%QW0P$E3%3&XrE_eKqW~Tw1AKc zPWmd1Qx5*II`71|locNi*87&g1ri4b&6$mK6h(hbKKd)cF&nHpl;;%vadz_Ox<=b# z_-Cm66zTq>)+9h0?g%-LZ7IGONW*q(NYl#SHKbW9-$D9o7^m@!Vo%Z! zjb}y@&+N4E3^z8n82@sS*?6W66=P80tJ*OL&otvV;u$WXxVYPCJaeDHGo)PRC<5@! z2T&9|vq-)G&#b~1U#tc%&|aE0o{?K4Jxr@$V9Xu3IN5qKo*}O^{3rv)@G6yXrtTHb z;+L6F%fJ{K4A>#U7+&V^OKF*M1Y0j}CcljIsJ`iDE}3gE45vu~en1Jp=c^Z{y5<48LdR`S-# zy@Fi^qK~NIQR66qb{e)Es`FH};ePHjt}Go#B9yWOd8+OiC>gC?`z)ExirdtJf}^ML zueJR>@8*MmS2)y`3$F;(-jeJ*LFQTE6;8SZyuxdVSC-H(p^`;gyH+&BiMn8R8Xrr3#9& z@rra(hD1fFICzC^5WGTaqVNivBY1^Fq%0P|E1YHJ_ei`FI)TIE;1wAm;FYzwDxi3m z8YLUAaG-okX9!+lQ`O8Uyux=Y2pg1`S%X)ac%5{Jc!j-f6p@JQ-^MF^SlzGrzYDMM zP6w~>M;ouO;KnOzykz%lyuwa+M0U~3L*td92S)G;dzd`^cnpjSub8DH&jenn!9{}? z5b%ohRlynQqrxj}tP%qUT`8z#Z}7?;cq#FUifNOj_F8;Bmz|1* z5%#_t$c5WPAs3F^E|CkDq6@h&+C^)2vLhF8m`u>JT&Z7V;o5Me>o~rg`W8{baK2-2 zjUrHaTi>sk7JrqiN4Bcvb^$7URT~LZAiZyd(j|a|;as$YDXsXcVmvfV`AIrV zk(EX9eg!TRn6f~=0H*LKeE_;-Jh3ui3ih)LsN9OnlL7WdUTWA-22kNuDsrvvmE6TI z*CKP60V)iFc^E&FfbuejO-kG3sa85rVefQ99iXy~uTTp@3C>#C(vEroD)KlHdl{Tc|6&WVt6=|!+ zE9}6o@X7-H_J2Jlb0QqP!fP~M;p2y$2wv+nnUcGR zWJ)L={5F4Yic2y^ofK3+UF_uxbn5=6Edef6?_7{P=ig`_5H6|fO|(x9TAlnAepU&t z)XqCN#hhKO_z5vF0}H+#--6AL7z81zErX+mJUebFAWJL zi6^pkA&Dm+&1e{T#m^;)=TCIzYQ@BrYwj z)nPw~l9u9cCQ2gHBuY9`B@jR^?ITr`PuEU#PLXp3mG0vM<#lO*33y4Eg+l)scxfHq zC|iJd>5qgiD(RH>T=gj6r3IEWOz@I$IZ;jx!b?ZWaA~|WUhT4Uv?OB&v?RiV*72-H z1AI%r$rrz+)qb*I6l!AU4Qe9a@+~=&lBDvqlWq|;vEz+`p|~$KYO-V%DegK5J8|rZ zooIScVT)GmtW z!6Mc zC3Hn;N=ciuSgY3Zk)m|UY8GKXNL+cD!?dMAVgM2Kg2F^fDWJ?E%D}b+2T>?%73WPI zDw3}0;ZO*Gk|)ZFHrA?Oy*f_9l3KA@jSRE^LdD+BYZPUj3M7`-(sI>`XBo?tgQpP9 zo0&i4vxl+E99@iwQTwnc_9A&5ELSu*>hmC^PibIk1+JDE;Y*cbmoVyaOo&8EOTTKx zq9{YB@_dq#FuIs?gM1>7_;Ig1+susvs5l-PQ1KPR&JC}1=0=((Pt^lXKqZY($}6QU zC#=E=6WC=kHNv3=lo88O25}Q)Rf-GQOWkL=A3!6PzCT%Q-|QH% z@^)dwBB>a{h{ZL@&8Bt6V&`=kvG~^AH)8Q>w-Jl)RT*o*TxrBwWIf6{27{3tjuybyG5V@?iCE1$Ksm`!p$)rFZbRVwCYQN&t0PpaR(g&^N(XY<&>Nb$9Gn?48jEDMrN(5!tY}D(yE{zeYCi z-F~IUs{;?Wve>U=ZhW&~?b=$949;^@g2Ttwa zNhl74`HQY`;g`M92Q9+u45Vqn_u=eU4fq`-UkiP7$+?v^V!yhB-}cIW#YK?ml2apZ zGLWVgB^RWTU7KdYTFT39NHg*v4QcLUwYo6735%1QrWrCWIc@l13>KcRs&^2i;qrG( zSa+hNAq~R)anXv9gFj;#O@p$qH$N14=5RVeKZo z%we0-AbF~SG<>y+=ubCZ*^q_{!x*pRVyzS6Pza=vCyK7y7_SIv*iB1nGa(JTsUZ!& z64LN5Ak9o=%esTx-ryNN9Uy{gp)2#)R6f{+XINBthO=Sg8ELh2lXyn88>+emxJIUf zZ*u)@JJ!x*>DaX*aMMn5arK8g)#Wpluf^#ik+ zxEgTD5GJmN@e}9PW#Xzum1E+PtuK8VMxmte$&mTeXy4*>ka&jONwaS~fC@LBVcAjI*m$N5 z)x&(xsc*tfp!;qW+kMn=fCZ^?|PQL^z2 z$8~q?TkM^|Gcs1vp&>OjL+EID=Wg1!)OZOQNYl@7Wc2dTcxLEA@C?U=S{doL0xvRTFNkMjQvWetbOrL0l*t#)3Wp{!ZQI-Xh1 zDRO}tS>@WqC2QA)Gw0;+{kDngZrnG>#I*vI1Ty?f>S~*~xFRn=g|Dh5!^FioBaCUo zU*+ncVa$UD#&EigcQp8>tTh@{=As^h6%-A&FGg19XlCRlakssGg$u|$G6MI=y9^J? zux#DQhf1=gtOgbKgF+xLbNHn+N%cTDC10-6r>cJGCOWzqPLnbjXzis2G8_y6GV(;F zebi$^AR{bKYBPZhw}=KZ{7N9hzW_2*31kd{;bS#|`O(0;Xd|EKLNF{U1k=pBjYdYA zEBzyak>1hRs3rh2!B^>&uF%MEB19u2z0nAU1E$;}F&~aT<}kJ*Z9W|Q!p3U+!WRrX zAH3F?4{4Y@RS&Yv3Y(x>uV=;9$4LLgEmUW16KPwFUEC)czkK~&wsjRN9Q*=@obJ!L z?;=pqHzkXBhl;7rx(}5) z3*697IK+$Zv%QNH!&)zI7cGO>yVzw5b}jx@_O8-@zHknH{0ID z!M4N+$dcjCZtpVNz7C7%gW~cBTFFL0|MT{{ z=$_X9aKR8S$*KTeT7a^~OT2u6eK-x*hD-kwSLP$h2Bs4UiUVDmR}lL_)U*hHRnlOh zrfMm1^t8Qe1->eKR|~#rdlxGebh;bgl(otRQ0=G!e!7FdJj%B?_(?h~Bdy$49ebBt zM|&6FqU>F4nBb>d`3zBy0za)oL7m$||Deyva5?raj#xlc$pPt#9y8jz_+V}C;@~;< zF1A-$PL;ijo!5r}iW8%;cQx@k=@wBGJKiWpDQ-%w6;i86>C))Od=dK)LYinFm5i43TWN||RuMjf?OmI1$%3pNb1Gf>qEDl}>k7=tK4R}$|0ek&`eXCO z3{15aKYhyVUH|q5#^hsQ?>dp~NShl6U#-EkXnaKq{E^$cqW@r9$ve~Wm2grWt~I2+ z>s+ktisD2wZz@LNuK(Nvv)oFzr-^X955ipe}}~n+1@ps?MRy# z2hVVLHJ(|Auft9ZuXQGd^QfNse%iZ!(ZjZ`!L!XGLRP;P#o?Ok8^W)`i?Sf_Ho zz00qK@U&AyTWWbP!H`ZU)^DaE~VcEO>JSPjX+UQie^hL0D&9q*fg+SBN(VkLo zFg1VFoTA#<)uM%_Qkb^qwyz8~%X4)4!NYkxbK-fp-5Om)Az{SWW<{b>Iy|0C~r zxBr^mz8~%X4e!rQYyaroz8~ZN9d*CE{q10jyVrlT|4eniyZsLjzCYG;)(q=8YwOHe zPr^-VL_E@G-6g4r-n2@t+x|CevKPq{Lv8W$o6Z)WJoYbzBYYuTn6l~v8-uS|^G6@|)X7a&jK=GDxW%&Q1h)O< zc&OEybWJ?eX~k+$VU_p9D|^LQ6AvYWugx#DDmx^8Cz1a}t0lSdIe>$3r&ZpTC|GQT z+pXM_x5T{`-XA}^G*;O4u*PQhDAii0ic;nANngV)szeBcJe{`&-u ze+7o(J&u2oe#GvNe-12H`^R6_|MeJ(_c;D1>qqSV_%Gh^L5=^!bo$eqNq;~c;^j%9 zKJB1HR!JVSb(Q4DL(PeTJWr@69%>-P=@pU`k2HbX4NaGN-E^rhD_yE}=u(T&r4B=v zlJUxvrc0fmOT|`YyCO+N7#%CzVU@QENova=Ni9N>Iu%JuIwYyn3ile4)cYs(h)Bxf ztn?|WRIliUZ|M>e#&BLR+C1+BE7I;FP}8S_JiP<~6x+jU>OR%N=y*p3J<;Gmw267k zq76Va(>*&9mw1!s;Vri6>}U%l{4G+ljru^)V@S%5wIZotw6@~#lcQ~uEsQ>!w6^OT zP{E~9FHOJph57qAhVMPj-?jP?dpCb4ZQs55yG5?k(0%{>nf*5d!}1>I `ck}nv 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�h3}g*y2KOc@&7INd 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

N80lf`5w>IcA?BKXBQIIm9zXBQ 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ǰ=iNIz#}fztVr&Q*`Q8El+Qau6 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

x z^hCi75KFRxD7eE#!3t0sXykH3BiCSW2^vup9N)9{*BWup!tE=t{_{u-!vN#GuunS- zD+Qe$GB7WXHL;#O)-SDRm%IbbbMZm=!>h*r`VOa<@h={NFaO#6HrHL&Ca1wqfCC+n^}<53rpoSEChoX zxDAIKXXfHu4P_E}eFB3&jxKlKr zg-{Ac!!Pz!{W>Ir!IwB>3={qS)v%=EeIpop zF|im`EkP=Jp5rN#53tuQf-v_YF;I;l!UN=0D5qw6Y1`~>CRyna&qR%&JOGsuVljw8 z+>B8;R}+SUOwq$<`+Nafba|24~crvbIs|6AB?V@5+1 zvZdP*vV%zN!+%9eRyy3tFR0bmdG>uxlSJC zC-Up%r}zen$9EnKw7i2wi5)zJ2l;QcY?#1&Xnp>c=a6UhNo3UQhnI6mW>#|xXd$K# zt!W{~I6)zk*UUV)t*`AKVz(KSh}j{r!Bk#nu|`Q7+X{0|L{4VWure0-CiuEJ~ zlEz#&aMEK^8*(AkSRwN<{6={M?vCAYtG^YmNmxs08^qGxe`+42pMdu4p^k~gWE1#S zw;ymX3PN`Xk`U|AuA^B#z@x9SleO~*FhQ~_XeF*D(#F>;^ za+Mb%S4OVY6&E5Hh(g(_B#ySzDLENuqt@D`uPiLLe!1kGf`aD7OFqT_h3Nx3HV;0C zzk5?ZJMh`e=JV5jc@m8O>GJ?~+ss}F6ggz|hgtPzd?JlB`7I1w$!QQ8xEf7`Yyzxb z#$9os+Rs8=T`cy&Do7qV3f3aIgg|F z;ty&QczgB{>LTT#j!}vD-ONbqC(!06YH!&_I(aCh>9LyTCk1 z9mIhrlt2^-${$KpdB85ydoqm5WH&p#T>t9}s=ZHsRE1;e+7h`#KWpSBd}6v=YZ)^> zlvz|$klGzH(tlO$WT4QP&}Viw$UJDB+4(hcj(*n5=|&5si~kNVW7`)?q|&ZhW>+mS zRkyC_mS2M%HoNN3&w6n(2-oq%XdYC~|nVoD5}+k`w`St||oqHp)9n;aEui zmO)712!n*U1ls{){|3n#zV1`L-WS>yhR}(V{FQJONyz84rD8LHC)&+RT#Xp4{6$YZ zF;epq7f#KQcrQe%QQ~6~I!f0W3vg+IZ!OcKn%Wx7@@|P3jCL=B`nz{Un1!32#!@F~ z^)jGJ-WbaUz?@QbPG!^#She+us9hO(!(rqL@equ=25S&)6(*U#txe94ys&1`? ziDneImM+5?2f53TM>`y_90apa(o+ddmmy1%W%wq`!PTJ@o(;xvvZ`v>N^0pHP~5*a z+06Hl*D(P#dJWP8zzXblt&MRjl)$KQ(oqtX7|u5g@f`&XCZdzPK8?$@{uaf2A6t;7 zP6qMtU4Z@d{DaJv{;=>j3RqnT=eet+Z+knTZVj~hV8UyR)N!RvY7(xljn%ArlZD`; zYdN10)B!v-c*}c`0}n2NFs&XQBW@aZRysSFkAS>zpw0)(tBm&b?{bs_);!oDO0B8@ zo^9BKu`jH8)z*KuUQS#mA*-%Lb(K%j6S6SX9Q<5vxom{sJXHP;<4rP3vgr+CGh`E+ z1T(gCwJ`$83W?KoGO{sgaxTo%arprjR~+{nzsFD2oUXIKRZ6Soi7de;@!t}l{lGOvBA$v;P0MQ$m3s;%$p)e{9gS=Hb@wf1(0acI% z8MQ|){XwM10<2nG5a*vQ^@{@?9grb2YVYH`IbBM(3d3%uhKC z4j*O#946Pi0svMJ0Nx8T+~wmM6-rGIN~__Y0S*Bg0M86|l4DgklKtWp%=3_YIg(uq z;Q;zw^pKDPP??*wefWuD5ec~8`e?)MHjNi3u(!EZ+0U^7SOoS+G+?9kiY|J8%k{|b z?qzi~%3LTMR)6#h+FfL|Y6V(-)}*SCvIpNAbfveyEF(rg?b^6J;ZV=MESY z#~ea!oLG9T=4K?C5z(%AHkzn_T{!{O28TV^HdJdI`K>&-M}wNd~@X^xsOZ zpK6S>6scT2%q^(;dwLMCS3{{$%|E&HS)Cbbc_j#mgezOv`o2Ib`${i@Ri*pKU{#Gg9w!f9iGW%PFEV93ikrcjVR)$fhlobCYToo~$ zi2NBWNbxydj5Q+1t5HkUa{4mjRbC`x|6`K7Pe3r?Ks=V6hSvs-jU|mzP~Eh8DKn-k zabacJ?Q0FK;^d6CtFY;^{3?eaBXcRhDI;KbIvE8*8tubgv0l4P#2Q6bv3wtAsmSU+ zIlibk`0HLaY7 z%1C2A?~<3|uTuVqGk-gOipejQmw&-oAakSQQz{+qZ}{5%7Mh-JU?#_;uX0~9(6aJu zSAPOWf}D>KU9h*K30s(gZh34}(A7;A1`sf8p8N97*js8VQvm5xZ08dAV&p!Z%Y6X3 z#5_@!Iz&lgPjDF0e=$%im3k!X?LMB|r_TaHXMzpa|6Vz|dV?qz3&Su=lvzrc`Li`eFXdQ9*JWFk#xi?k^xs4Y$rvC_%o z1Jn!Q<_Nun>)}2-ohoB-T!!Rod>c6mU_QO176Vts2&RXwqq*Uvk~&7Dk_7S=MCy1j z4vZUgh0DTgjeffhV;g2D&N)HbJQ>qxS`=t3TV-v!n%(DrVCFDLF?xMX) z`4vSb4hygp9Cq;^&x-#m05tb~|B5Xe&|9J&3h<}Iii?0GT!|sisC9=Mj{UJlOSwjS zzn#BEZ3_+DXFILFDnYgq1p)37arp?V9cQL6tYD}3`6Jo{lEQHOTaoUo=Dy-i2%mFs z@PXKbFh9p23U1L)k?Z(L_Aaf)FwLqY?Jb70RmOC^P60APKPR=fNvn#qMB4`C-`_j3&Lxmt?h?}#?bY^hRiSHm{=$uJ8mtoypDT?UYz1Ka{I z*%tUdW<{Z3t|Bmt7=>}f_(?m-CP^r$c83F?-1{;T-=;?r|(jvVgW^Y}HMI#hT^5LUF z!HfmiHG(jb-^HIfYo?3hrd|*UzlJTs#={yr5BXq+$LIRy-d_9WoaXmNtCtI~RqaK4 z?~JtZn!41mzFhg#IV{^$M1G6Qwob>XX>6NW2HtR7Zgm@}jK%rpw?ht4TWtK`6RIvE zkk3I`8qmS&^Oz+}dW)fup;U?L4Cn%rWgF1{AHHgv+i%C=uB^5eaIy3O+`5b?1CmfoJZo<*oa)t!?(yhQD3`O$S>KkO8@8<|Vl9g4=?a z3gk=&rqnJo+a~scG7S#eha9wGD-K$0)sll!U&3=<>A_hXIX?a~?G{N9<)FLHn2CFd z+6dxr9Sk3sn0kA~tj!XK*O!S2I@$hKCgbr9e24YPMm5w47ai$7Zm3XIidK6ya%KCM z^5tb+&(Oj0OP#Liuo)O)RU+2v$K+=qvy8P6OdcCCf6H)W>cQf%$YIqm{zCGM+Ch~U z?1mD|1F|(A%kEF=_N9%#XBH)M7>tlFsdNvE@o<4GfonUjvlTrHe=pYz9n`rnb?iEL z2S9F-xwd&?*t5M<3ct1E?veU!ehna~cN&FD+IAXD9c_x%qv*bF(V=!x>g9PzP3=x? zD=0r!`z)P7-k$$I$))lL4$ZL4;n}B~sQ>(h-W~=rWdZhpB=J&xUZoNXLd`NU zDjpRmP#{y_m4Si9X}jN3s?9Gwr7*^C+)f^55>bE;Bd7v`Eqk~#b20W;BQuNeKNJ-& zObe3I*aKYnuhYmj&nKt3DVi92@4VeBF2K>|k9ra6E0gc%K>!vDUQXv>Kq-y_ zc0+Y6Iqf+r4+ADlOpSD5S>sDR3YW@T=Er3GsE}WqAH1PhBG2mT=lVm~34hD6x)g#1 z>9MHGolumb09vmSIv0wjbBWCJ;%libY;+ydEk++Ac%@Dd4VHH0vOY-yfu+wvRR zfRWmbAp|KKE6Z=JgNOiEKx4HUGN2f(mC3M!mEM5!U7tdC1zk7eKcYH)1RG=bgj&Id z@kiNs=N!S#hVy~JYVrbs`cIyUrD%#Z<$k&*BPvg5?!h6l>Q@;-+9E;SU) zFP85?4ATDDTGK`oZ#f@<4I*gAn7MyKlhqdYBr@}E1rA`1bQ2L9OwT{MtK)J8{NONa zLAe|oaV#zHFR%4Q`6pc`6Eg5UMs%iyEPR?<@JZzG6}22Z$noI z=(sJy)3GhAHaSw=HqnFE+yOM1Vo?XaMGRoi-Q@swAOMS4{5-Jer0}yW8-88ISf-hkR}|tGL!C$+)X! z4i--`G741rDbR1I^7YbuTlNpkLco?2NGg?6)%784ebH4xmfF{9rsWyP9~zJ0Jkc1* z5rvL}?~5dppUe0QGcdWC6^u0yF|IgmzNMdIBt?AmK6n;_n-X_6_B=~auGnDgx;q_= zor+Nf*+F)MF?ka>gDQPM;7tMt3bXtMr%RgAo(-T1ghx#Q+K0R()MqW>Z?%SVbhZ{!Sz56XVtw;-v!!X=`Y2BOBgJjYQ!wxZ$}z zwWsBI6o~5&2L?D%)M5cueKfZ_d0cOMA{u3oYOp?ZT4LM`B6KdSE?+^AMgfcd%m0dT zx%ev1Ksv~|-?y>kU&>IYoO=~)N2Q_~M^R>Qj>-t<2cOctcKobJnE}-jme2VfE%C4HAC;AvJR15r9g%Qr% zg(L3TA04d%8Za@qQ}r{k(fX=-QDM1u{SZ!>|A{i{KN%)cCXkIi8h6s}5vJVw90_RK z3xO!>K|yTISzc9p=?!TC6>Piug1OIf&qGF^^{GCK+fDO-ly9by!5knFsM3<1z)_ z5OKL2Y6;y#7O8qdVT;XTdXzLnWF;4JsJFR8{WJ7dH!$fVS^>Aej#KR$_oB?4K)njd z$RDCr%mJ=a$#h5#AQ0!j8zCWhVZ8&m!h?vnI#aPWPdW_fAsuc-NzMgCUJNfIM5Fnl z4imLlIXg%)pJO5YY`YSvPc2Ma)vIGY@C(#yCNM@Iaq5TXy7O(*9c^sIwkb_D_gO%r zafP#ozcuFn@BB9YL<=4O)lZ8QYs}nm=AvMMTAm};#DI027c&W;BE|!N(U`xG?xWbm z*AjmV1Jpo03j+ydvFu#0)u$nDkm!nLswy}VHZ}mtzcLx6<~`jE3I4x}|!b-d7S$n0KV}5oGS*?F?@h}dK z+Vy->F$Y*g_JP`=tJL2zJ+E(woczwQrYVxh4j2s8bdF2T^Xu`_jT+~*eI6zuuc;UM z#!H_8+0fy(&fu}vFcb_OF@19Jqi)UykzF5xh&{)hlqy3R;EujwOpgDB`<`?Pc)S*;oe5p9*d0%pxzWlr17s|H|BdPC+v#LsDGSC@$|T?gx;+5c6#XERa{cZ!5G!}XD; z5(@ke^ZgI^)EK{x&LC{xrR?e2CCr21(}e8 zcd|+4IFT_lm%-C{_5iBjI3vT8zC{)U}e%qF^sof1-hL!fcFgu0#?laefoZ%KC36(ZV$;+&T{U#j!q4%(6iF^nb zPMCCPKi{-Y>#L7`2v-=O^j6{q!wZxp6>z(xED6a_euFGIz)r!tDDJoZ?l+J9ZH)Z$ zSL`5+x}{W6E+Dgnv0G&c*Ou+g)UBuE%G{1)5v9}++*e#)KE|O+f6FkIn5HqK$z&R` zbHPTMft)Tw1=&Auk9|AW#m`I=#Cpux1?C2KovF+D<@g~q z61l3jf{RQxjJ%FLXcbb1eWGbrW$ZR0bgao#k*2zb%~BikW_xe9XASRzw+K(qwf;F~ z!Jbio724jUzR4nnVcXM|hwvvg)A-e5^$bYF+^ZZWycKIg*3i7D$j~v-$sanfV2rl0jt0GILe>n1R=D>8gdY|s5?@PKc=>fdl=%)8p zV*oCczE8TcL&W6a<15hjmDzUu8&Iv9#sWku5UKXDEbL=I<|o$xnZnM$pnVL;#6z|i zA*~!Z6-`z0DsGg=xPMjMSW)>RQE6Y81FnKF@8;ckGro@YkSpx^KH)PxHZS5T&Z{55 zIb>dajmcAjzE8312J}j$)=f>L0s4OE$?C&Tk!M}22L!LA4n>u{tR-B%_~wJ7en8i? zuiIx$2xtf9IzY+~;7VI31hIMpT)l|bg>x_@27w3~!vEcdG<&AvP3I<8!#37*lB{D0 zlZ{XdV5l4_$H1bV{2O!TXaRW$tku1sm03md;3bMqc^8Jl*4pW?5(Jy(YuUIoszpFA z+Hih-R^QB7-YuzZk4puNf^ya!_886eMdCqT*jY+Hun;#5h424;U4Ek?e8rxkv#y*ySfe}J1fH<2zh6=X-YbuZ$we>(nNqYcMr`myi zS^}BZJ_!W5)fQw6697r+~$NGXxT zhgAJG$_q=03Pc|LTDQXt{5Rg>+G`W~+G!Y*?Vf5Pj1^CaBFW|>O9C^n?tw^KKRC-ld7`sWNdxGH%b;%SE)FhgxKC%4tsN2#@z$Zzzt5&R+b3I-Ui zDoPzpHrW(2bcVO{uFzXcfmMA7j}wW-*V$G}^D!Q>Ne@OamKz?ABNT0vGo23oEhppjhRe6A$iK7!-${|S9m=$^-Rb_?iF&a{jitfN7l_OB9L9k$ zGBns+n5_XT za6UtO#gGv=%m*(5bMROjyZ1)4l0D@hw;g?8@DY~8Y#fH(hb`H%s|Sz7hL&tOnxBF4 z6-%}-NW8`ssO;{oo~l5h-??UhOu$1WhNj=`IGq#`L7m<%>y_20Miuglplk zPK7+RQfCi4sjF^qE2sU->jpOu*&I3ASG}xmaCePCZ+cAgkk6ZsKeD;Ie5X1gqKXsJ z#|$qfbFVkkjKkjmra{JI>6)o|%N^N0@G`?e5k2H^P_#fz%6N-@1KgoNAvXHHHYxxA zQUSsR?-NEdn~N6gm5nS7UDFR+r24jTP?jEn9s<^=i?%a+fd`4mie^Vh|3BFCk^X}m z02_JoZpz7n%sN^QmXbrxi7QwXB!w1Cv+n|-+i&)PA34oh@&W{?Y4))0d;Eh7GFSHt z{1$&V;qQI?{j10VOY&saWH%tGW}E7q7AappfL@lJ zKV5!<1IwmKniH2^D3)1Sy8Uh(@L!BK4bbw?XS}dq+4_u$xPTkO<-D;ES(kaIa0KoT z_rZ4`=RS##}fxbd+ZtEx2 zKf;IHhKoCp87Xjq3sgL)MhFi<%e&-LoBe<4vj0!FVgHGyLy~ML+BO~wZaG{W$WnPV zaG0#Q!Rc(6mXQ(Y%Tl^&JVZwIWIs9LkH(US1{!(4-AkPEkpSUVuFdCObRcKKI z?5)@Ksc(lcO#H*iS+)#gG?rv4b3`%pS(48KcqS<7+6jVGSlDkONBw5dS`aF!?`8<6^kAC#OMOfpImZ@wt&&? zO}L_fB3srVjrVG@VdP(N>)gcm`YYBVDZd!ov0^Na0$j7F9n*uAVpZ4k>!)N29B>}7 z7cViyPDLe;*ip=*;gLOIR7zkD!)RAeCe2LBW#Ig_*T;p2$*->i<*(*4n{VjuNbtiP z-St&31l7*4R!IHS5+bB*9OjnE#LqcgCGHBDw3bTO9Z*;(5c$yc7WNs{vf;l9(ncKJkPDb#CNvy2If|6xb@qck!dr%{-%+~Hz3JB@!9+; zET5edl!t%tVRn04dPAf+3^WyDy43B+`II$&aO>^3DrqH9z}Dq&{<89b#~aVcF8&tY z`OHWmqGy12bXZ?Nm1mGpjYsOpj`@rFrI$Hf5*wilW7ASzKo0*aYlLafnB(cO2y-hu^RI zh8>f)DAh-CLMv2Y6$Xb0TQItBO$yqS>O19YtlCP9bU;+Ddw_AQPk)4fd9Bp|6dP+y zD%mne62?eAR&|n0*&WH9Adj6I$=3ZHsQrEPi=O>~E#&pLbld($?reX=2aj?*Ry3Hd zf-f+4dLtjR6C;Nr)#{Jx(93`SZy5U4{D@N@gS}y4P&zKgy56Yw4`6OcBMQ}w&g_E8 zZFRn=T5{rY@p_UW?Jwi4y86baxM=WW5K2YWtP_{%Zjt?-!r2`hU6*}?X4m1U88XdW z)Y6w=PL9jX|AZAu?tcjRFdJY!vB&Mq(U&EusRSyNRR@8d8mIx!@y^L>912>*IEtXo z#j{5$3J2YZblZToOI)&g*y7=>;t4z7n9QjDQ2?Rn5vY zh~aqByvKK<`bFb_HRW~gFUFUL^4hC0NqK{BpS#s>FMi8CSE#)*1XTz8 z&Q@~n`mHfyN}(#7L9^8Rj;#j9(tIc!j<&<)mE{PC9>Ur(`?|fM3?Us0 zA}A-B-gPE-pbwe*WScT(zr!aIJ={PRbIszmAvc{7oX4ofiHRAC&E1|z<6!|f&gYjo z!yB-wZy0o>U2(hM)hJ|Ny#`JH3%2Cd>!zA*bpEa1aO& zg1sa=p58|@M^(=oChy@a#ne6Atvl7!Wf1p+oVwucT$OX`Gb{8yV+p`1X^PqK47*)n@x zxIyF9@`yaB`|VIqBKi`b6rMlg_+8@D4|yc1ACv+{BmxLZd0q$Zke4+f0jf0gp~ybrUZz!o5-O9@(FJV0CK zf_Cl4L{^evFG>F{bUJH0>YBQwhSK~6&`*mC7`wG@n}eS<&e>5%o9{T9D{=6%;xX!z z&cV;>>;i7BvI{)2ERCjYJK|xo1UzbMQS=ua-q@zZ-ty>=Y&=q(H2dv@j9VWQVMISA{`jEA&M;5<_3U-~_a zkU@l(;xltGHcN|%BVsI?W_J2}R2oRb80V`Ii7@uYy)YJGsN71l@o-*e{Po14&x;HP&_ynt6o^xX=Lc2taRmFRNT@B3u_s%G&hKq zUW!L}^r>Fx%G$nNvgPBNo`c*~VkKv#rr)DA{Y`HAr3Q%b5jGtQc3#}j!dik$#yFx8 zM>|3tOx`wLZ5H`)@k5&zjER3fknp_XoVfQSDC{_}nOuw;XwY%OzB5c=zgUAj6U+sR zE;ze`4vz=p!s+wTz!Y^d9RofQF8bl(*5#n~WyCW+Hq_?>`*~s#4Pj#Le1M9AZNPFM zJF2D{2KhwVaOu`fb#a~ni9~cUI`07j`#K}h9ca6NOWQ`P5gBpE$_M?(e@kmxK zwpdOQ@4+s^!~%dhw?lXr(zO)Df(@6_*i!YlQ=U@rlHIlBu;y50ALVr{X(kaB$79H7C z0?iNl`Y+$WNDLtBZ4+APlOYBo{~7`U=7no;8rAWLFsD*{>rkV38w#Wn9*4mz)XRyy zeLQ%4bZWlnc|R4W!E2A9#-rH@=Eee%Sz*kK8FXN=RMPu%(vp$zwuQ2;o_Pht5Lr(}pfV#V7h`aTPY0Z&;r90F)+7U31&`Sgu?aGHk$mnC}e$rqpe5qS|c z=0+%4CUy(suuy!m;CuJv{jhMZzF!#eTMlt$oj#IX;DO0*MJ8N%kKhojoPaL8c#U`x z&lIot0p=`rDZ8*s`D4UmXCj9SEy^E{I$e1`T)hbi8Nej9!NnVRLkFz2YmhZZ-2uhV zjrUoF^b#M6a?7NBYeSm?-9ra^I9E->8i%4Rw@|0k#O2KK&ft!7nr5-y8?OCINox5y5|H3EC>dHI|yHJ^w6oeZq-q5|44280lq??9u^%spG@p&q|l;uVB9$RhLnfZ_=#)CpCTH^jCO`; zdz5(i4r(BpNXh^m{^b$MgOmlT+7geL`y5HcekerxvyFu1WhjP=EyUlLWvY8{o=Lj1 zs-d#JI_(l?-(p;31df~oXvC2{V#d|rod8QgXPc7AY{wnZt>E2B&N{j^S3PMn>8;?l z8KGL6B``=Ww>|d=QUJw$r~G!U9(y`H=ih_xmLlY++xrZqJx4{I#jk>oy0J|W2K6(P zg;J(@@&U6a^q_7GuB9hu1|E~tzt!z>j-x|J(!|5i*z=(D1iFj;n84t4`C<-4vPAPd ziRPVx9hGD}l~r;)8Ghv`PoOHrVZ{~l`69&1Wmfj*KtqMN<0^^eXuw$|?g0j>#9fg7 zq@eAP2S}4N`GAJ^5FR@2sGS9s(NSJ8`L85)$yuK+rZJ6xk^*jDg}+Os=*5bkE7Fa&_93J>{5s=F zZ6u^LicdiG$^pXaU3e{#QU;wYHiOdGQ->X-_}IcP2QGS9l*s!=S)Xz~V@;jH(i- z%3mw%`3JNY zQ>Lt)9tEGM2jB3D$6)5^%{!ef>$v8PGdHil);z3dq7CHzLz5n3?a6hx5M;I|aDMS+ z+${{v0P2TJi1R6dJRexs_>!#&TU+WmaV0ySH07=kgV1^0@Vyt)W06f2xHU#0C>U{P zcqWF}r!I2jElOQDh|XWZ(UjemaV4r9(e!zR4rh1-GL<05)$gfe)1dltm_MDPK<5YH zl-K9qlUSj3m=txat{p=eg02j|ge7o3oDA?Q(M61n1EpgNjxukCUD#ltgG9E>BxJhZPYQN$3~*u%g&6D^3sEs9W~`>zBct{^3(fc$W5WOe_DS*XU_{&G7( zPHp}eQ5`-JT&=Mk3_&Rd=?rn90b!g0q3J`DnRcfJ;6VUTYxqj5d+^gaa0MvEGO2>b z>m=|rIbJE*yU;i~kSim*wWTkn{sKCxBTX%(gSs-*QVKhTvj$4QW61427Nhd8v|<`bcHwKpqWt53t<_&Q0Eh+(6dYgR|awv!tfHzZ=F|DD@QVT}o zs{pL9%7q0S6vz*K^h4;wBw#ST=WCHFqLM+a+meDOifbVUpi1RigZ<$XtXoL~f?;g# zg(I!Ro+`A0o}xHa>L)OO|I3SN{xfi$;Mv0Z429y-?=!^G`IsrQ$X+`Y^dx7>`w%x! zHaHqLUp)E?A_OQKEM^gpy1l|UhTge;tGcx<`Iv|rYLiPx*(Q#}7x=+mZ>8 zpXLm4fdS{AdLHp2B$wf*S*OFPt|2dtNPCmCfVD`a9pT?YHPResIBUsm0OKGq=0{5a ztV*m$M6FlZMD0zHI`p{=H@%s*d?=sc1@0Gp3X>7{ZCQRxO?TtUCyd=#@jQf~?CQ5h z6Hj5Nzxoqp#6qPw7w{onyvhMn74LFPwY#NC@nYlw-^Y`kWKu6wbJxRE2G>YAs)YSQ zE|2;y73D^K-3(fJ9J&u^rHj?U`ac84zRq^X`0f|l8sjls3*3Kj@4){Dt~MLH+|(Cm zM$W-=A~F33o}2#+hD6;ZNVsfcZL_BYXq)=ryVAkyW-`0IwW;g?k|W>PxWy>A6`LP&%7Mxt}Hd z)nNNz7l&aAKIKNeh(AXJVHJ|rPcv_*_yoG9^4WOIh=`s?l>OB-^G;-%PVGp?m-}f) zfpy50B(}7$b7{DU5OjMfpxjZpbhzG z4jN~}PxAbdu0gBheW8lkrYKoEdqLHD28JO0^}a2Osn`5cS1qG#~XVWP*yAippX_jklYY0ii%-(eoA`FGD%sZRDU z62L?6nj};j@SXvQD{~1R9oHt|4UB{LB|4_TlfJ=(q2NaeF94Sy6zD(?jDel!J3>P{ z#4j${&A=tQz~7(WhKN#2GMK~zM2Z@DKy<$FEGOSrVokA3qtxIDmGiE10!(cJb}>hyyCWXb;g@D}$c ztL^@ff0Xxwg|-rL^-lC*%khtm-GBO-wn8|>*Q7>>PhP^T1M~5p9UVmztO=ro2xJ$q zND&*ft#i$vB^PthEv{(1D^%*Xs$1KY#Txy{g^qtu`6`+~H9CGfn2)(|z0iF8Ewn(; z(`7fv`Phu*4r4y{L!QpgM_8>k9OsMv@DRo~s1xmZXohUh39>zVSIPFwFt?`;c{w^_BW5 z)|;$_;fCPBp)a*04SfZU-O?$zzGBbQC?lhB1EVkyWJdPW_&7k;G0sT08vuUpkoW&x zLxX%FbX2I5$c|IG;a}zRBygw4k&C00oYX~}bdkYH-+Ilg-9Au9t!B3?xlA$} zQEmhV;P0hq0VEXMbAeMK!V0qYl0gn{FaBqU!OVYvW@p_t8gVp?XVk^+A1fo{=u`q) z7Qh#6f68pw1!?T>hyLLy|J66J`4SMb-sJD%2FPkWm%3znSwRy&dmH38OZ`aD7P-zY zlB>D35UT|k`#h*tZnQTW?ael|_Y}nokjetUM`KIzkb z5NjX+Urm7}czNh+>&ixQ{DXj9T1ezOzo8Pi|681l>LofKH_*B2RUnEl26Sx60;cO; zSGQs#P+ipPbB=pu3i>R*7)JnLuZ+g~3OJ#&!md#9kK)Nk}L9#!X6elyJQc-s1P z2#c$I2ACTu&RKykD6h}{(mhKGq=A;U-9&`Z=6S{rkb-0pE=&p&J1oC5($vp7O4UHQI z{8phsH0ryy;CqyaET_j*(Jj{KDv_-<`Xi94vWIMuK~kxmC|j&Kr3T0rW2jkftv&zc zUaoog1n^mj&l-I0#%CiwPvWx;pFiVcu_kq~C3o-My=yo8<3Ia<5gRyWO##73d*hc- z?vz(as<|)&B`Tv(05SNQz41z|Hu#8bi7BiJE%6x~LhNh=^@0DuSP#q+wp+=UNKWXU zxQ3KC0-5FUff4fNL= z-i{8D(1o~113yctj*Wz$t_FVIhY}XU&!cD}PY&Rx-F>^dcEb7()L%l69`~~dmUNo@loC?0JF-$_PyLK>_^r?_xt)NIV8p+t3`d#UySLb;QHb zSW4Z=G9(KP#LZ*B;V+GY-(zh1@DFF-;aLAd!W~qiVPYiQ5z2OQDQzbPn~7iI zZtzOORXqP%s>yJn`^1dJlmHPBm<}{z)otM=dct@l;LQDcm>V+3NF?xAItXI>vCr5{IBb$O1g&TF0pzRDfwlS*MJIJ(RlJU?^}VkJYntdVjD2uPij1E-lw zEx}fB`&7DJhcGk(7j2Fd1Hor_SsdQC&jTk=QUk05c&oobBUs}Pri@4E;Xgx{IDV{| z4RAnBD%R7D<@7)vmeLo(|4h0KEf(}KmeNDz4l9>I9HdR0h&)_(uuqjJW_OIu$Pq2E zb50Yn9mP+!hkW8fW)(CawfF<&Y_00$h(8eAvo_-o&^OYB9AcC#kT^+n`?gs5aG-S9 z4uQl}c7Q)KeNs1f!U$7djHS55QJQV)F2n3ED>xFz`wR zASwo6NNm(L^w|z~cn>^30lODZ>R7igk|6>m+(mT~4(ot+m1~_z2M=J6j8wIb%GrAq z^W$(uh`*a@{&3IIz8X@d`4cjI2qvWPWAGAX%Y2ZHy5lC-*}a1U!mkJV+~l>MJ;fSK z2{j~zwkCyN5B?*&p(Po+XLr&$4Ov@O97+D59hA&xS1MJybnvH&>uCx|Ey@}G7ha$T z`G9_sGDFV=p7|t`1|Rt748M#QVjLzBuiZMsbWDvHfoFDvp3@||^6J}gEJVufA`4a)E#d60C+M^=;HD*w+Swcg?uSA|*84QN`t5N(6 z%^)=w9SLMA4d{M_sMFH}13+mxitC+TNZrPzA%x_4ZnVhZUiKi`lS#4Ppw(0_LS}%G z44T`@rnlJbP=NC(kpv?3z-^Nu-n<>0LhNPz&XrAz`yOj>Nrl)8!$;1)9OYiFk9Zif z>cIKfjx=qZ{#2%9@q6nSJ>~4|R$c^ZejF8x5Lk+GCpw}m*3m5l*gn)gZ7Fl}LLhdT zr;OzGUW1E%xHOTAUJr*wJQrO+DJCvDhg}+(RiX!X$fjynX{I)c??I5V8MBOLTp*jF zDY<8&8QcW0g6En8u*D8HHU2B#H`m{#s|MV@=E;VtAfImpYc;jJxh6aQ`3-rRWKF_Y-ZKd#)q}=z&IGjQcBnoe zDIUu_aq(3=mL05)TQ3I;x-gH6>ziW+vZ5+C$INU*7*Ekz1PBtY_Hpc&;oedtpdJ@E zyN0%;iS;DSw^M@#8x69_2C?avC*EY4L|(FEy$dXH1c*PA*o6GWms}<&LoiZ1%S*BS z1b>}?PUM%N6BiquIQQ9@eU>MjdMA!*Kg3dkF9=DK4fyZFE2Z0idE!wfG9XEVe`Nb1 z1`vD~wV#f4msGJl4*ui>_?_DiA@Rva5khC~9x2tf35bUv-j$6LQ6VupSz$_Ch3{R# zWY`|+d6sG8WrD9wDlviJuORpj8t{J)VHQJJZKvVGcKY{tfSXR>=m<~Q+?qIW!wql{ zXS4%*nAl+yy4xspx-7*0-#qbeOeA8P4UPKdJrnb2q7myr9% znlMrECJQ2t6!0t#0F_~&sr;Kf{4DvP#MvNtX~p1j-kA`%#4GaH=A(3)B$a$M^U0xF zY%)Fpk`pe0{s={+D@I5^4L!+-(u%CNqC9|a@B4a zh#}FlqE`d^|Gon*7I^1jY^WA%x0*`vCtmGX{D zxygJG>oCJGe<+^+W42E^Jl*HeX8Xi*7#J*8Tpw%R>7rL+^MdeM7|kounim(({~_x? zhmGgooC)qK#ut1Q-C$Xo?aJOB3G)r1bWgz(2o1%&d7V`LX*f83Cu#nv_0WrH?;#HL zz$X(Q4|V=y3{=QT_z@v%Qdvh%Pf}H)*QAC16ctaL{Z+K7gkx`-_u}1@O0mpP^q<9< z*QMaV0b0MzLKSXQ@$xLKir}xP)lpi=%<+oLCg)PQjyI%M)R(=J31fd^l-I8;Zw2BFKk;`%Ip z7!4YOi4WGKjUKGGA*dluV}`$kk_7B$f~e3{EI?toi`JsjoxQDG9;JpM&|BUjO}XX{XF>a`I(=$(xxpD_kN_KmY`=$W7TU1I%4&?ZE)j3@7Hz~PO{4Cfla(H05v#CRQ!7EgZSFoH|Q z?QrpCzTSve^a?~S3di_hcUijmNxa7iEMPWXVM7|lqQ3yWl2j)LJboj^jRvfD3|OE4 zo?_8IfB;6IIQ3PFMSuK4YD0Rbt?czoN0jl&;WY} zgUvXXGE*@6a+dH2?kFIGORHlt*WvEKDsBPeICLDl=P+0;W?YYCUp<3TNq?qD_E)Z@ zCyHbTi}`PgDQ~{+#yEdQ^SMjopKAuiKff_H{`rp6Z%P>QnAU7>gcpKCz@Iq-&rk8+AXj~+ApRTTTUmP^ zDC7n`k0^V@G*eE*f+{!&t#X;V9QRX;{~oFNdtL1MlkwjK{SktGn*sfc-x~4XdEy0d z4dzdA@!vgvO{t`##m9daQOkWIvl{Kg%M6i%I{(+=zro6g6So`x{m&i{<%f&^E@g$BLkVDX{XG!>O`}U&^%VL3mv|3Q=J@XnM#)hv325=(n8JV=AMXUA5EuV_GW7v$ z)Exgkglh%?V4&Kh0e$_ejd)W@zKH)GPHu3-f3L$g;=gCnBjUdofvpxYkz*+dc|ylF z{u|1Nl0oEWG05-AhnSOVPPucz?U?=$Z_tVOZ;+c}CwQ&USGd_?U>v+J(J>8P`}z#= z3-HXJ68{Zp*V*`Qv zwbAz~(H(ivcRk+G6dyTuC8|3lKJtNSls^_9*+qs&K7^62pG4u2Zs!ea@PP2h+YWMg zq=GLt#Fvt(nAWn8!y`FXGM!>25gy60k{*hcM0g~}N@h^3B*G&(Rx*=fB@rIUv65L7 zD~a$(j+M-zSV@FOa;)TNij_ooB*#kTQ>-N7i#b-ZAQmfmJ~;|xtYokUEim4X#J}h)r1;i{FVI*J3pECfZ9q2Q zS$NL`r`=7yhzx_%K6xK9YGIUlq7HT=b6T<^IgGL{A&m0#z)6*2I>-kD0mU9+loZQp z8kL&J8IWpihf#8~5k~1kgNQh;UyJWiqKFy|;%I=0uQj?#e8#fbBkl%8E1QXQ2T9q` zMYdS8#ojwh=?9rn~ z*KYX7fA;QiTG;XeWGOzzDJ7RV!9D6opz-$EV%!X6_*Y*V~I1#j}~Ey zYmt6UP&`4<790%$Pw#}>MYLaJlsEy(i@J#Si}=J09ef@tk&&< z_cWD{V3J27Imm-WM<3HNG2in%%Tr8^D#jwgXyCF`6u>@L1o4CG41VyydgcclLXand zJh#cy!PmZL;u>-BbbpC_TKO3aIpLyMr|jqyFJDoaAr4-o;n-P6u0P1-jy8+z`;In? z;0kH-5$0QxQh2k-9Qj?m@85E>NP(5p%e>#n%_6VLZ)3B_Y`fUQ!i0mOF!0$RF$Wsk z1C53GtnO1*0F-hs;6h_d*d$^fOPSKt>)hYI6Z%AM64@KuB=W6wWfN}_*&B4>rf510 z>kr^mFg0kGJgSvAqy=Nip)Mfl+Quf4y|hW>PrONFS6>34Z4#-%%0|zrvJG&5>$n#8 z8n6Qf>}0?Ozt$EB-w;X)nzKC4*+-?WM&1A^Q*AA9Cpc##aaS66uGS z*TaM#Q%DJrJ<-pwPhNq72&`%L$$GDbwZp}WON~j;K`A=BnI+zY_pdYY;w4kkw^Rx>L?@p z^fd7E=-p=gEZ3{)Fkalu|IkHD2h2Me7cu^`U9FXD&zcP%^@g8rqR~MSH`0o@F&K>|Es%w_>d?a?g!pn z0A?;8JcS&x*mMYP&CA3HLe3K34#uz+mxH7x5TkP8mzV`KX(yKCiDBna#l)vV+Y1^) z%iWgX*`ejomvh7)jk4uN*>sdu6oRMmxzDiz87q(I^E4Vp@c1*uwMO}AM)?o!H2K;d z)5}(K;vj5=E&C{qCLqN~^`Z)H>VsvJaPBWKia*n)^ zh7<^iz*oWKju`?0m0CapF0S;7IqPsMcM`%}4Me8Lht*o)w3CmizHPf#5(yO?GSc=R}SLh+=c&!?Cm?F_FZk#hhTV43H4i_3|QwH4EB@jhmYB1qLb zsOJ&Izc9(Ben2PWn!1DhEg|g37emMoS4?N(VbOHGQN9aR#B$Y!@=#?pjqpui5&)X5 zcpsYUN&69;B-N|D+6{Kj!qMUzX$iNY?bbkVLbVvr%CD`NmSKUjRFum35jCb8@jKK# z4_>+PO`9{)y-Gt@wwqEB-(CzmGhbXt6C8G*74I{R_Z~43>8K`4e84(n8iFTA2i)Rq zNJ)tZI-{-mEI7id#8N3{fa5WW%bwz@60h7$y@7-clhzfgDJPVG)^ehGF5w9IBY zyKBq$fIwweP@g+nz88?g;;xzeKQ%R-axEl^y^1$;^+`~byh|f|ycvB^A z!kQ>|(HZW~FO)2#D>?k~^4Lq_DNF?gc+>mm^7V*CVc&;w^} z*jSs53WF(P2$bymb&D50qtS+{-ATLz9pGdyFb?c3y`UFjGsZ*N)E@K~=O$y8LFTv-`j$Rc&V_HW zRDuTP?QyO?07nS9?3|Hvu-0J!BNV22tpL`VKMZHOJe9t0s8)Gp^QLZ@aig& z%c_K}c{hpx92B_lllUnvTJTjA_#g+Cg^?l#gDpse-h?!X6BUTZsbh46#YjZ~A{e(7 zkd2}3o+{BFmSF;J>4>0o0xAv;I^^Zg&msTsu7UJRs7ixaLm>afh}bA6T^t+besF95 z>&N|alyS#1;hXkO(?y3MBMMS$6A{r7G|R*dyjD-}ah7u`%4q3Vayk)?&{9$)%{3)c zIaJdAQasmJAs1+GwqfK!;0R^9VmyAzQ=T9x8X=gK)gU8Qg6K+q$E!w&_&$Fy1r^#}pVb{vx>h8+Y=liC|NuBt>lF0FSR2iB(lQN7#(4|6XQBROGB13 zOpAT$BCq!16oekZ2SSK!T|Qjo8?bq%Gwcn34Q=RpISyBufD^+Z7TY?$EGc+_y1W!y z49)Xsr=zWQe$5gJ;Pvdc_tPg`*186uY^*JN|BgViCisk=iw9!7jI{KbkMHWBm10Q&% ze~POSAB$D{J2t~}2o&CbSxL6xBQ&4p!)C-bo_p~-bnR%1&l&dOr#8pF%+!X*875Oi zU8s-H|A0rptdx`QRPjP@9b2&h@`Q~6YNj*LY0ABf@7A$pxM^iAeyO;?59ZEHT%MJJ zA*tZ&R&wBqQ2*RXr6k}QA9~T%f^iM>K$=;EI0*wQXh)pnq!|)w9W}7u#KW z*JFfo8rQ*u^8H9z0rs?50x4qaJZLETZG+-QDx2oTZ07i1=2@R#Z*JdnvN$F)JRV}Y zk$*dyFZ=VH%+D)AgGIfb{|Fo;hfv6|O^DIkIkp(RorT{_Z@BsHeOO8w!PT;1O!iZF z7gA#cH{$#_f-86GSdS6h<11qXcRdOdklFZ_1XnK!4)k`uMsHJp61~B32>Fl#dg~$S zE&o7Eo_H!Hf!t1#jnc^NiyTP}uS8p%anz6!7=#`689&OmQ&*%pwv= z!UU8<{?ZEW=qgFVzmzbgk+1XBkysm(e6=Ws!~IamjY+GB9t4`%bqt4BO3<3bJXZ$| z$(Tk)3R!C6^f9)8};4EW=JYYTFhZM zPyBuKIqbY~7^>cAbB1$apukp0vjol*E~5u@OqN7yP=X|-03gRnkQ!16XiK+^Np!Ee z5AboTOF6Rwkl4*sfsEQ|gbVcy@wh`rPmTdRm4W-O0OXdlm;`jlJ=o9Xi}ri-H`#O@ z7)&}x-u}R#6}gt+iBzu_wJnsjX^aPzG3S|RRFrE}^eCJo;BFLfg}Ro<)g_Ln0tq@s zEf-)`HAUtYU-i^G;4t7;$!yet)8m0|r`!oZPm2Nl{!B^n%RK3pfKzO}@T(}=&&oX* z+6_ikKcdBQAU?w?PK-f6E6Z!>5$CjTSYiQD+jT!F1 zu1x45y!&IK#v99VM8-|M&vt32u}ra^?WNOLwkF{~mc-LobXnXGaB%6aDz>!JS!9@) z?YqDE{Os&qyb8hohy?AstJJ;$Bk%3%LoPoDGHAUwlxqoe&u+*q#G%y<3CFbIy*+fW zXOJ$mv8knW5v@z5(_?ysme{cLQv{}q&FRztcj#a*Bp-AJl0yf32Zv)_cBuHf9R$wI z$14eR64Iu@Os?_UB0Y|DhFe_$f?^T_sv@*0D0wV|BY4zn! zt2bjqO;Wu%j!XBh+q<}zILlQI((OH9G75jX7EOy7NX_J_b7uZT(l5N_4HO^M)so z67|%lo|57UZF5Z(i^&l~7Hyy#sv*-uP2&2n|Fzz0y~$n>-W5EEl%d=3YNAbj`zCAs z1nZ4S^;4}l8Skt566;MVB{I*@eKX0FREr=0oyEzPOR`;UfWY2Y^=)TyFM2)nH3_Y_ zM-;%mjs@J+%pSU51Lol7i2mL5!CWE-vvvt#i#hX@VR5JupLW&rYWCe!&Z`?*gW|KV zbq-2#J&VsUdTAbl=MygQVUPW&Bf zd&M4i@@Nv&2S8+%n3%BK_6<(Ks#YM6Pu(W}xPI_<=%97ssmdrFDxIUW0cWCIQk! z5j<0JNXqom;=yZ}3EYf%3M4OLty&uv3jA}6R?@%e#xabO2GJv3Zh*M2iw?085L+J6 zUAOTEp9BBS>+eAg$_0A8ReUjx?i(8}9y9=5q-PNhG)=qNez5o(>#17Hu+ohK=|0t5 zfVjH~Tt%6u7pxM$`EGwyOfx_#`Wvw&$i3yI#K9uMFgY3@eeoFiXCr^}-^fqwGSU_p zFoF!jzX<3mH8*N)z?0(o5}%|~Q(VjOc@3Yh@oB*4=bVTCDcCHDp_xxYe8W5_Qwo{t zJa1`+o%HYhQRS9cid#4+#d{XKEEv5qh(qO8{Wb1wJV>LN)sZVI@$egM{|7w58ysNn zSmeevRnAD5fPOF}g?(wH82ft&Co&OhN)7!O4W1=(t*AUqyot?e=1sp|$fQAiz{p-P zgt?7W*JtR)Quj1UCF%8XXbjb9xvpzu1pUyg(#?|)tV7Sp1@4#%U%;&Su%+MwhUd#! zN2^;3oBvd&KT`~+w`iCH=TJ~=*Ln+DRz@wmPsfe0p=FhF`FpT%d~P zPT;yiJyps<3WBt$KW4XTICx?r7uVOQacx+J*e-puN~7K`pZM`x=6K{%x&u>CZ2c@yre?C$3s4PwF~g<6n`EHoZ}~KMR*O=Np#o4;M_@WXZSQcPw^-D zlf2^8YOE|QbmL&jTlazZaNa>`WRfFvttSa|8aR#!a|&Kw(n@Hcm9e@%q6WOT1gfJ8 zGsH(@fO2dAw}pPNE-TA!y=1MAl9xj-@#4r!6s5>{8Wg%BU?{<>LSla%UT~IjgU++6 z#9Acd@^?qxH_JAQvoRZ#?L=f0B`@h@{Q{;Fnmi!?E3s?{V7IX5lGcP?k?Kn$v~oLP zrBMm%C96aZSBWz^(^2G9HtFpM)2Y9V923RS?8rEr@&ZT_jCdAORo4Ej4nv&GwfhxR z{jXDqeA41-3tj87V8PuL#9^OlsHB07ZdAhlAGQcBmM#`@$JxfvFX#2mXr(Cp5>;(N zM^R?AEQ9!>D7ZHHDCii~`mr3^g7aobKGnndw&g_p`1%2H3Xp_Y05^w&#QupSOgQyf z56v)aj_(VsSrN)#CH_Z2I##05cA|{u2^@-Jtgua`oz1bjR`CIV`VqA?M$9Yx_M(UhLsWZ9NrMmLabosc|c6CbbdFDsV+~gq@S#yHrn_scbqu1)2W9svc#U zpm;MVg_ad%u~Etguy1`L)LTzE)sNVn8SG%9BK?)caLoF|Xm+|&igw)h8%b26{Uz%T zsT1+pAM5?OANbY#vltVU8|DlXJJJ$n3P64I3r%bXPmYP%3UL}LV=)WMY1vbV zFu_SDCRte_?6TdO0aY_Qt^=mNcIIc|di{|;`^3ot^izz}{8>h32}RBX9Guqr?R(-K z>UcYA_0&FPuEo+TyY zkKhvvxVjt$)s?IJ)kOq+DOb0as|#~=Z$cHp!TmG1y2Hbd`A1tD3j)|Dyke4u8fQ3! zi5T9yq!&(CFVzwQSGP7=14v0dUQe0R+L%NsKQbc$P6OqwjW$a8`{#^Qq~w3wh?4;= zl-RdeFF2&N(M~B_3Bro$BS zDZB9{QXvX`%0B$$vqhmq{DZLreGrm?e9yc}NC@tWeI?S=0I06yOPtXtQT%O*j+bT) z#ZPi1Jt6cR4aIjeU!#;A8j4qZrla`r7>YL)>7ahCp|~2Hf$2T4T0=2L`cr20faVM@ zgjY(#FkUPHN95ejFztn(DXHk^k#So5I*GSskhhT3ZuLaR1KF-BWiAlvi@pJl30(EX zl*jh*nJewlsKvr9YOGT3-!wRuh0blEEFrs9fB%pCjJDn<>F*ckw)tM;169hsqfGB( zO(0szm^9y+qtl2H?2(7=leX0KE7oD()GW z$>kTa$>PTpKDj>y*>RB8I);(f(nou~LBd4P*JiCZu2m z=tF1)63z?>X9D2FRPW$E7l>^X@rW@RT+V78ZM5bB5)?!$Lx5b8) zH0)OL77*4-ylq^0Px=xL8=-rKNeP;ecx1L55bhfP9A!Fa%O`sNlMs{6ETR(>Ozl$(N)1w%&!ZEb zV|z7df7|rtci^Lx6fX1UB;+rPe>TOm%KTaJ?@iZ>ZQcwjH{R~v?K91W`=Kz!&4$1P ze>!*D9}p8+?IYpS8aS)Ie0oy}MUGjf5Q2WkHVCm9w||I+r@#N5@Z{jtLFk|2rWO#< zGMb(za}MzpLUm))Y8z`y;0>L?sXq7VoBNA3-$-ex0#o@e0JZW-A1SgG)t6&}(r5L=$U8MjW~F z3%yU!)ju={G1km>f0^p9Fx7u9*FV`*|1iDwGhWp=Wvw2?u55_a{_Y1yQak1&)MGmi z0e)3^I0j^$1k%>j*q|XORasD&f)kRruz0dJB{LcULK6We@D#N*CDXtl*~Bv9aG~?d z3m`!pFi=cvv!xs4*8~W!x?RhQuu+`Nt4jE)68R@^h5h0r?R5?sg-K&@&|R?II?X|e zo|~w>mZkz|X7mMRlfHQ0W>W!orm29TA*e6LH0vEKe02_id%_Rf=;kl_=&X!e(0n-zOH-$s7sDHF zexCg2xcvaec?)#;ItAMlamORQwVL??GKaQqg!s5yAug4<=c5xGAGZhH5eFbj48?30 ztEj~IXHyJ;GdvMug(8Za;R5{9$ak7fe9LOqAQ`Byq-`}Jz zpUcs8w{3;aO5wyko}UL4*VlfCqt+O*B{(89W;=1BK(`ml@vfy($(owt5|6z>#LISg z{o=}&b0Z_DAx$N7kjK)}Zv&M9zZw);Jl7ITi!7KMDVakGOk@PTfezDD0*?!_PJLlE zzMj7V|HKvl0Ft%?HB|~D=p7%8vJdLjZ+mTQ4R|XIc(s5Rn?B_+fEwyP=U@?XDBR^!d1T2D zpNsN1f&UfqcXc*AZoGQUT$ph?HNbPRbOy57LYpYnCJG31*3kwR+~)V6+Hod$q!7BYD^iGy z9Nm#Zw_1`KDNI#M(jtXvYDs#eFkLP2L<&7%*O9_ZDB6+2ENK3bLImNDjuehoOY$Ry z`D#f)q_99ODUB53!h^C%VVPR8AX2yhI2junvy-MoFf}x0H~%;@(u-1>3KcYv$e)st z^Z3x>`B3H~rSl_&N~9O1HWkjNJQ5%3elZoi4j7^1I~sX{l;}p$X!(XPPh0*t2j2l# zL9Q8IbGZ#R4P1ob z=Y6U9Q|ZN9#*2xxlXW8}HW-N`koyB>UV!ft4;n9Uh&^7>4pyJI#YpW+;b%CFTr@zr z6L&&tOM-p`11YEN5Ab$YDgOXSe*m*@cUM9}Ivjc^c4QOhzcjaLQdSluPRd~-4B4-^ z38No^7$i=bVTi>h%?@VSTwcwfpZUS z@0;+0D;d<@Z;bZl#N08{Z;xyz<$pVeW_IeY8B}flHeA@>tpC2 z6J)E{fuT{{Cmhv6BiO9=Bk`_o!*3Vs7kMuR=BfpAVd{P(o_-gwzlYfNUn>C*1Yj_R zOEI&*N`m0NgEDaCWGl-&-<5M7imiVcc}Q^UezkLX^;KT@qn6KwUeZ-9nG-3Tqn6K+ z4|5}hbFniK%zo~D)UaIED(HF6eMD*Gxk=l}*wXsaGFVdDF><#ZLJp)4vbOp#{D{hD zgy<)YzB;+Dx;^_ouWQiEeg-)#p{?YN=`HoZS4gNYUx4#E(r_iS^mb)%C<}(q8LpMD)qW(Upev^FNIG*DF9=MOqxdf>4QP3h zT-+hlH+LAxs^GB52r3b|LTPauGA&n`A9P0+%#V~Pkt^o2iW?b0+2ux)6s`Itr!vOn z(H+|Dtw+k0^xkv4J6()r!$H7FbbCyZO)a!XitK8kBU0p03tf>S+$!Ua6uH&H)JRdP zT9_6oN>dBdBSqQ4xMJ(ie@BB!S5}zg3 ztIq%8`3z;fHF&xh51%Bf$^LWYTzV91bH+qo0Z$$aj_O9uJive}pv^oo4muTsA7>Zr zz?3^pys<~GvsBiZhdMFGDT*gWuMw_n-E0`An++-APNQgf%VpAfSlFa7Jh(TO7_Tc^ z%Gxm_GT4k5)P@c;HGCOYL>ZTJY1$b$&YU9pKu`PhXi}@YCNwGZ!V4A%UO%R^}moTFcsdmR9Bd zlO^ZV)%d!ruy%)?21m_U8@Ev(>@Dj%M8IKQYW(tavGi@dvkT>beN;-F)tTiV5b-6| zpbf<6WAbM!cCKskXOsa#lRxVj1k0bRjq>W0x!B;|RV|zoDVn2BnIj+OMvCU<_9D=b z9)+4T=|wVxo^@%0TgJ9>rw_xW+wZjQPYQ-=7gz#UO0SZ>a8!$BW;Uh+KDB&)QwjTB zq@+_|IH={Az9a)-Ma<7-j!dF%{(Z!obD8zhvvQxtgyFB!nee{`^5D1SF^g|2d{uPl zi}4XR!}`F<3^<{!-{$)%1~~qn3wZt9h%SOmf{W`7EDVsX0ZH=`Bu#WgDhD22JkChw zt3cDwr@*4!XBw#_wL~rKQ?E}9VX4S4R#EabGI<%smO%#=ibo;PkaMAtG)D}B7ZpkG z^C;8O#d*R8-h!m9tO`@o*@|lhRlH8Bb4bZhR&Y~p zr%yy0bo_n_B;7hjZ`Mhzr%6`DXnI?!7!LK_sZlC*#$r#d9>7QpID4z(%H1^i0c;Ny`ByxPkH%+(-XglKBCm!qsG}BM2B+ zOH(pcMw)YVla&%1DFf#;5;y=Z8OlXJG$?w>7n&k` znB>tBZ{lZDG9^%hMFDJ&=!iX>NUu0?C>tb>resQ|l#WFU$q%~6?Xuhvw&lR}R53AG zN23J^INK3~1~eW3I6@;O7Tibwfkyh$&`9s8I;?;oQ9~moN;FbVppg?Gq}&C-*av1L z9wo-O{Z&3?)=Zd*Nzs0{u}s0GjB~&Mm2kfyV7@QH@u2Mi2zG&vM!qHZuEa@j_|aLK ze;Z0O04LpcLVpX5Au6#17vri~tX7$c(!r7@fhf~}2{TcC0!RB{h|=CMQ5MsJ4bdl) z=8;-Hp)oW(xY9&iD5uM*&?sqeyyCKJ;)Ag z|2m&P86j}VVj{Q?$9cnBF^%l)W{%+?jy2AYldnqQm6Ysir1C*E$<`A%E}AlUlzTbl zLUu4vN*^T^MCKFAp4LhQd-{a^6dG@Mc_Tb|;P>cMQ<=5N`6hNizyU;Tmgx{S&_tB| zp^(00vGlJA{W(6qKa2mA*q=$PwVC_#3n(bE&w76zdCJtE(XuhrAFBNb`$I*3cv=>7y**l;^P4$$5zWyZ@0MnEt7CM@TPJM7;P6gNO+u9s3*~ zQIM}c%J`9jf`sQ{<5{y`;C(r)5mt*}8!d!EUJE z0k;(1BrQ`c?N(xuRV+3Dj*|dCfEEePAA~9UIESWFz-*()KxVAX03(>U8KTfAHc=LP zNEW*e#g=g~*$PCjgAn+`VNEpaPZM2?(vxNB%eXWzLjyow41hr*Kj}vde-YRx%A15g zY{ww{?FXYV@VAX)qs{oc0NOnF*%>|rfBmqCEk+vvFO&f91wajd3mKfmpFn64R<(5e zS&d@zWU)(SF~VQIsTFPGukl5_7xQK5pEmgezl}n zqHn0!W|XW0Rm+wPktGR(|3;XX=7j_GdD{ChMW!EtTr&`o@Pp?w$A9IwsYu4&7aZn& zahvbASuAliZg4{vF}Q<_KfBMArq`!hhFU2bKbvAnw85cuFgZ9Qc!c>FmJ^gs3dQia zVNGE>_SK9^hg3YZa%oQH{Ou!7o_GH=*@VTo@7<=Kh;73oMSJ$CcX*~KmP@IgXIVTt zz;{g@it8=*1Gq8DVjkeh7Bm&h3pB(wEI&z_ut7I%BsrQE%CiIum8^?#cyj^%i7A+B z%+;OY)5-S70c(*iVg_tRS+XB(>6F_Stbb=bv*4ufLQ+ z=#5spX`4E+Gc#K}g54h4ns0EH->)7kp3`zZSKK zNx~GTeVtPTwK28jmV^QSUw+hj8jzk5peh3$wy9*3^Z~utl@&~?y*aGSq2=z6xTkiu zUugU?kVUxa1Ftg%fQe0x!JVw;*%dmBQ^VNVTL=-3cBT}pM+z*qMX$2SBU__cs+FRI z%}l_AGp-+TOu>QD)j7~K9g5%v;pu?;hIHHfa3(mzqeWJ_8Nw!xXQmF4T0B_J2QQ@# zOUF)ONq(H`YdC6{G?#pkTWb&YA!G8_c2?7xN|@5ywIrL@y&MzL-djP`Mk#X_dmwJ-%Lii==Ln!V>m3==Og`d0H}VMCj*0$JIWdU78$g0FNdwd zgXs)^NW}(Yp3!Mb&M>(JF-+;;3wF$2yLXDX9TjQE9XP}5=>2%MxV+-l-)Ue1$+*I= zWl`=TN3gX5PM}3L@ei;pW+w9D>ej$?5}wPuw*sp?$Jf;^J3qQqc zEko#vz(GDSOwShRCu?RVaGZ1*M;6&(UZOBslx~;OOh`V0 zpUqZSC8qq%VYuMT&rgG|o1b5XMreK>11@HM9{xc5`}?4#nBMbjF3o@+e*jJA`e`1! z-!j!p2cZ({Os4mZ;_~Oft5y)-o~2C3mv{>vNieF5!KgN}9u1YMO(Es?asj}0D5)4B zaRNtL8M9Nn{{?fLB$NwsMV*A!NY^lYOCCB*q%VG?*ZZt=-cZ*PoGNv2=vRKZ^PhH# zQd>#jWFy?Db{hGUNI*n$wt%avV>592AbNo<1k|B3RIfwbMhEWF+kuA6zYvTy6Db_4urA^zllE?-vt>4uH^iB5GE>7*= z7?@}@v2lW&*yAI6mirsm!QJ8$>(Nc#$vRf0!&hiyFfN6(Pk|ZB93G=R07Fc)7V`~T`r%#MbrSim(T7%DZa?d;Sb6FiC*ioIsTphy7*zPx1_h+y}RM+7x+A$m) z4!-pe_?I6Me5Nnfw=>$*mw_ysL{r_pEbS7;OXB}H%m5N<4s|>szO(}8Yyualzy(g( zppDwD?AE%ywZqneLg@4kM>OX#nr-7V_!JJBY3$|@f8EHuyd>}IWp84ub~{=@3_r4M zHy*Dm5VActJSp3gN(bZNC@N4mo$lxMRpJ15@;kEBsSQ-D^;L?kTcHetVW@l1uq?Ey z0xTu^8d?e)Jr%S(T%AHZpwt=xtI$rv8(NG5)+Rghwg!7oi7v8F6<7U%pb`^sSC)t^ z>=Cr#6yo`H0?0__-~jWiXeVm zt~3xo9*5;D%yimT0hZj4b^rEQvZ=P+yZz%B0Q2WG;?LJ|kdrZuxjhAG29?P1`1Wy{ zpHZG)@IqmJ;yjj)=jXnKn4et3J#5xse%^t#q@$dlR9%PjGgjR&SzRaRC-;}B{@FEaP5Zk%QhQyVO7#;G=ImA z#n@}McSDO2HczKFSQQKMdKGUFW5f9^vatz=cA6*#-ap`zx$+2#w+__;7Dd}iSUwZ1 zC)g&yIR75rAbp%)X-ALOtBB#hZMQJJ*V=Dwqx}W4&i32S_~owF-Q6aB`JEkLO!zHL zKg@hQ?+MJuGQxYg;=z}A5=~A^RbTg;?B-T0>JapLnGM2iw(vI%JEK5n2+-| z(R{oTt=8pb`r+o|ibWW6uED`ex)`Ufuc}dlEI3Hux{R#%k5zEVV;p_7)27k;E z!H?0KTnI1_s}UsA3!|y>t~Tj~-|Yc~o9Lw==E=u=RERFDN(PPQiM-TejHdKIg%%?+ zM$X5%$O|oOF~)}TF92X5t9^RL=?Cbqc|HP`oR0*{XM*LCuzcbqIH~k;?)-dow8;bq! zN@0avFe^nVKV5XzM<(8?ZVgjTMYi}BZ42}Z=N>ki|K>W6uhl1`jGhV24AXX z4^T^wz#i}<*aO437F*}-0dCu3%qSCm7Q|xyF#o?NIhmq!R2gs;gT$-lV$ zH2)LZ@0E2PX8vuq1v7md^xhu7rilvEeG!=W*xptDSJ8E1Gfm<@OVP6WhP9 z$6@G$=MQ&v#4T;&m)~s$m>B)mH7x168Nol6#;xMGgaPNh1TU%ER(^;ThvisySWbt& zml_*~IUa(p3&O$|E-R~lyaC@Ykds#Wn_E|{z;E2j>Q7a+&xIm6QXJes4b#@Cno0`r z-qOU`=oe07;e1auP;$u%{Kwk@)Xu+38u)9K1xqtXi;CX@n!idbLpy+*R&f?&6F1`> z$|8~eFc(5E+CpDiopqO>WKFg57E+bZ(5ebCS2n7XQ5Ok=W_pzV!+CIWiq$wVffkJV zp?-C3K@zTvu2NU8rRIb_?6Trum*8Oa*|iO5gL=Q7UcpO8R5^=7x6s!Ty>(;ufG zS!?W{;bSFNHSSGwhUv8Z7rR+}>bE%Bey!$@#I#8rxFBedGu#j*BrIa(uD3qeoFc9 z$$h}T11na9{~^a5|L0-Z-@yNiZQ&odhdanx>AZ0TUIRU8p@#3-K8@kubp-gop7-XN z@c$G?I}rX;t&0bu0+)t=9yFX+|7!!yGbliiM#O^C4%!%zOU+piLFi9Rs1kKp@Zk%L z!p{H|6~6kXiL(DlECT-X)~;5%;d})sYalS$)D`b6EpC0{mo(rJsq|mx4A&Git)jWl zZ&o#6%dh-p@CfE5%pBJI%ETNRkWFJZB8V4Ft0;y3G|tch&M+V4s%JLcK)2q~U(*dV zap~{qHr$F;ST8~6^3@v&kh+!t=e-ul)cpOSWj7XBg08wOvF)MwYM0DM4@0DMhhPC%MP%-4V&?fyo>YU0Ol5tRd&iV}n;#s{aTVm+!;_&T%S zvB6g}LNGeOS5ZaP%8w+zCx%|ySESx^2cZjuT(II{q?WcMhYjBm!Ph=ZLai16mPS+{??eBYR@b?hl{LJ{n zA_Y*}9jImeS%G|Vu~R|;;~E%F#aSc0tAN)nT6-9;R0IRVM=?8^y3uH$U{b_dqc$Ex zv>W(WR@@EUxr}t}ClTt6Wk%ZbQTo`VwQlw0tsfo7!Ch{tKlj{LKLN*e9H2X? zf?xSWJ`;mHTI+DQq?Vf6^UaTh0rU6`mdz1;^ya*WUnC90Tlj%FAWig+M$9K3z~WA) z=I0cMd?_dZ8Ed6SD-XH@P6zX|zQ}s2WN)RRo%;&Z@TwIchoj|4iM*bk{Z?@?^Vpc# zZxDq~-2S&t;-e6)JQnykn9?CW4&nD;J{r$YWI43u{rI1k!}vt--A>}?Wc2G;;O8&B zI>b++{sD{Eu1bvoTVMOCtJhedg+zK_XL#49Bx1NnOG`u~=s#}=>4g4tGTMDi`j0@3 zj^@iD`qMP5vr8R{5dd6}OiE(;&j`y)Bnq!#oi7PGpT>aKG(cj-sd%qL#Y;LCDxOb#gAl7j z=%FoqY(St_oAc|)@NquCbc~Omk==sdCU>^Kk99jH{q+OPVftJ3zsFwDf2@CXYP=tV zm*p6Yw;x~*(|DW8rnWV3f*O9l0ST~>&Ll6FmX4H` zlkq^W=np?F$glmRqV%Wxy`Fe}1yY)dQ33v%Y;@Zc6crmZ;Cm-o_L-V z7|N&t6pQed>OwO8!TlvW1f{%7X-l$+-Khs;htbu#lL5IVZzt~aDO)8SQ)Gbr6lEw* z^2-Nl?+saVsJ%CmkAyLsFPGP~F21x%v)+D;z;0Rj2`x~F241=+d(;D4&#v2gkHca# zY`r9?p&(P}VJA|a$TH*;)g%J7mGZ8*nwSD?OKkGTky?VXKid-a10_C#vTf=%U;P5B zwD+{|zyHJDo4`j|UH#)(1~SUX3>qLxl&FJ50vZigAbTD2DU!~g+B#jVAnt-Cjlinhv9g!zBJ=RVIf3n5@j`}X&LU;Tu+ z&)v^*&pr3tbMM9bVp#1Ktu6CSRHw^;+Kbkyj(c6~i+S3i*$A6InN($SiB&W9#JMg*LO`L)zh9mW}(f zIu-k+qXah0#u4#tuQ#jS&27DpZQi!YUU0)Qvd{Frl_dpW8F!#syGGUrH%rI1*O_uG zDUUD49t+>vF802brk?KK56KTxJ6_$&aAc@kOk)BrqgG4Se-pols0B-w1e@-JN#%X~ zqh{$n(0hndsMozrG~R(T6~KRMCl=ud#R|OL-Eym!iQh!~J(Akb*-QKH>peoN{bSAc zk4kU9RqQ?NNsA6rlGrp#w7zF3GOV01gboQ-;a5$)P9QVedGZw=6C>~mP}KwQT?1RS zc4E9Vxo54381Yx&0qa~EC2@+HzPSI4#5}j5BZ)a0sgc#*B%!(26ETUtF{JxP)y|#_ zj^uq28KEK8j_4C2|J8@}Y{G>mEWyv#Op%RX6LEq6&~Rcl`CIC2vhPmm{jt`i@Sjkz z4Vc;F1qblI%WwRFN^#=^4#dx8Ailos&rz&~x4nU};$(=wk@vF>a{OV&Ouc`c3N7H( zbUq!j#T2BW?idk5{H@T${puy`Bm>U9%o}Fj)=p#_0O$n zR102u4@JI;E6dh;*%-?V^{B1V+u2Y2p@|4sFJs09vt}_qv)6$LxlzXo{NzP(kO@da zFdsqk&AvDQ`u|I&K8UwrsyTA<<4=+Y)=2A zb?79`Re#}TEcmw;@5mrJnyHpUg9_IAKCV)vDSFC=*8Dn_KVGUrn~8| zqIDNHA5yZHOF39yWP3c+)u*9(LpaRhcG`NhSc zNgI&c)do2p%JCFR8j$y6Umx?dRv%?RnzH{)j8u{RI4Tz!2?cw;IW*OGZ%7eTR1|yy z^b}u(U=>1g=?x1}AwSF<3u|?DxoS6<0ZBk9p~4y~sHDHy;2n0gIDUoyv(yo~$AE>S zpT{F{$@YZJar(f^RCKWv!D}=7l9ziSqaB^3Pv87W5<<8?CelN1u{7+!WA(D*a}7d3 z+uqcjXiv_Er^ z?M?WtHvVd~`kP}tMMgECY3$;;tNsE>C3|_%X>#;6Uwt65HhEDs2^@sYUCo5;s}YatjTwMDfNMoJ zKsYmEv3FED2y{${okuWCAOwOgYtdGrx-V+Mz@?$rg5lP`*)VKUpFu4pCvFb+WF9Om zy*@SSdq`FsG;`oZ&}?Iryz~yx^8LYIdkP8K0)fD%-hG&*8582!IeH6t1HoLtUxVNv z^(@jM*KqbL-*~BUL?*iBS(Z6MPLcAc=;(Oqx^ONIxK#&m796D}s;E?%KVzzKgZC1U zcjokx4eEj0zKJhhO?F8h|2AX(mjoz}03olF5ILnr;%ErHvKr8FHE@moARnvNtM$jl z{5S}6IJ3>*$8FHo_`#<<)MvPBgdd#w)Et}^=f|o1coipT_`$m))I4mn@Z(5+T!3{c zKd4d4qKhBAJ3@_sq~OO^u$Ef#nf~B45^DC-`r}=GoB_6Gw%7P^joG&s`EkNSI_3BL z=nC#)wqNrjW264~IX^rr^~Z94WM8j87W3n<8~72LuX^K9GXj^ZQ>C%c1!@%xde(;yjcQ$)kb(upwv;SQh*F~SJy@)#-&cd z^+Oy~SQmG+yL;f7sO>`_BB|Q8B6KqO`zR-AClAma!=}aQ&Z~q;g6+$ z|2(a~J8n%)|1E@5a{UiON+y5*sxkHZig~Hu_ku-}^9R04{T>6}OinNQQ_45|zn-`B z(T~8s0poct7%CTkruW>(M_&87(vY2ysHBu`4yU+t;pl244Z>W?Ah!TOG~P*bSqqCt4Mx3*NW_|!ok z$@CP#&p#uOlrag}w z8OK~l7etTB61B)$ny4z%fQD;AE;iMiy8MC7oTVw9}-yyGF z%^0_f$G7q9^-YM2K4|@LiMn_v%xxK09#cChScUmA$ghC%VccRG2Ko*%wm-wTm;*Zo zz0s%s{DVL2SC~Od)=MV$>Fd@y+!?^>`q~R&@5>z_bxjB$T&Nt}LRHN8WvDAq?ZNsd zZ>^&+Bi7m2f=ZpOKtEiZ+4Dl(;jQ)JcTUs)4boZoTAZ{t6J~fFkIXdvOA^A2=laS zaei^at}yU<6`msu<^}mtX>PRt^HGiA=nc|8eWgU=*kDI2eL&L=m_6?&S9CPY!$^(% zd+m9LN)!KXdmgCgFcwn;rwCc&$J_^qNh|WtmF#n{$jLp8nq(Vod5OU|EU}Sq{-60boBwcDX zv`eg3_hPI~?<~Go;fw+9e}j0zODqA(MSNq^QojR_Uoq*c4{_`ctrb6`9atf%^4+7~ z!CX*`HPz9ok#jUnf=pK1p_a?SK2yC66(7?x_{F^64G?%yY@iQ;TvYF6bNnbUw(w`5 zv5h}izzx8fI93K zzU*&G)-UT^-{iij8E_QD4of}D(>Sn@so~%18r|3b1jwO{fSV+xTSBF^*BEPpi!f;x zwfX{TDO6Y5U_9LH{tL43{-J>|r);7uT__p-YRDy;1hTZh>R{k}AY@5K>|im2Hi47_ zL7qZPk+~S#d8+wJSp9Kh?#Z9ZfG&iq463bC8JK-Z%3ZOGupv^A5t@(=ov}8^J0pvl z6J7k|K~#d1Pjr+yjmGOi=-yy-FSrajC0{_@da=|Tb6Xkmv?w-q1J~$RvAbanOx=2p zOI#(=4mbbzMFC_-@cpN-cX*R*(k3j$y05D^z|?1#CEJe*5M|VR3-QB&hG2gLs~J`g zLYYJ$4`am1fg=CpGL&zQn>AR#(D0GVQ+~xzOfar5u>Bo^ad16ypRyKo$B6Z*>sorq z{sG2gR+yTRheJ)S$11GFMdrQEL4E3};>vzdr%-aJd-N+4f|rQqhHm-P&wl~)P{=zr zvN|6QI0KWWOa%m z-RzXq&pxOJUuw5J)1>~_X6`jzt-+$dgZc@x8ry#TOq2RAZ@+#idw$3Df5HBLvA*5@ zF-_`sw_E=zrYF%OD0O}JLWl79*xrKn+hdxv_sbdW^=B2+liQQJ8ur>=(535Ro${xy z5$SK$VbMR4J~cJn#BUS2{^|75 zd#0QH)9HQoOgHv{%ZuU>7e-hoJ{fjd)dZ}?R%7H(jdmR$Y2!eS2NfNQ=F2$;` zm}k|JU}AnL_f|nkom9;W&?c8`_6KUqIH8nmg+$DU_|Gjv3BOO(J}2{n+R_5aL$8CP zpr;n*ZFPg_qqu7`T&s?IjbaHhscVg29RsT^M)csL!qtA&@=K_c>M>ZO0_x;?9Phmd zbO`35hTsdF`X9Uq-F_A7JU5cz8eaP&b;plc-pfs%=~JOxR6zoVBa9o{BHi;uPo><> zFWKs2?+a>_N0MnZXe2{1(Z@SG@6#FtZM#=sdt&f3ZxAMIqT;l3F@f@?P{&dbUKS5K3Fj=bp=fbP< z2=0X!B=biu_lpZ~Uu#@lTC3^nu5UsSj&6-U`zUu zD%1;3CQ!>8yujN(G<$HJBkWSmXA4F^uPfD)H==GbRP+TlM&1(s$ zV_>cJtD-x=kMCei1UG;SYiDR?90B4bn6Vot+_B!W2%qnrIfImHTf{!J}0ay;e%QqDz!>~S#xN_l=p=oFMZ33&#n z9Tx(=p&V~KP_IFp0gTnuUV^c9@^XPCvM!G8_7)H!jD4~zP*0v8H#5fT2AJy`9~2Nj zJMn-J)d{%(!x`iy^r~UVo?lVAZNZ=AGRNbwjL7r({qa*(otYWizom9|TH=uX?+Z4I zn3}+{4UrN9z$Y-zZQ8u$cQ zH5;rnACg7uLa%X85vv)z6%slpfD6PA9mnoLn1re!k03*9)NA(%v4EbzygvZ^<>vm zG%au3l+3Q@U{}gyRiM>^?uY-H_^9A;0zN_u(bobK0r~1-Y=)Z`DTK}^2;FQD{6GK% zbB%iSUJC(3>7NDovA6;JsKl!-H7nq8WWmA4vB@~NQI`b{C>=Epy28*AP+P7A4vsq? zI8eYr@H$XQqrt!olNhyAjeijh)wn=dpX=~*MGOp#13&-c9)SslmhfrNjZam-xKz3w z8RQ6`V9a(@t976h_Q1E#V>}ie;hx4kL_ae{qK98C(GVkeFc!?b{}ftv6ChQsvl8;T z-n$Y}bS$_XznHLHn1OKG_6hI3_{QdUKD`SbWq5(t3+q7xkp(x6a`h?ZzTiNLgpU!W z@izvWqyAv$OebgHe9=c_xXC(*EkW>oeGQjE>`4pHx`un-MNI%&L*WH?<>$rI$IP> z7qUROgewqT=u>T4_L-3L?oyULLODh(NMKXw(77$mLZpG$;qC#YWu1@kzk z4MS;IN(xGMyBkho7-9|gUe5xmrEHZm@|9ywPwjtgWR_-yJ&|Td6?Z zajhekg9g3EdFkzK64XzhPbKlei zABck*N6|SVFLtTA7Sp_DH16PQ0)2>$S`g@>Sh<>ECuiBoEjszaSRb%7m68l~s-3N; zo$Yp=EeJASzJxu?n@SK=5ws{Q-0vg?F;!wdga85So^qAVx<6bP{y$Ixkftny{~Ny} z>*II{T%0sdkEVH2LB(>&bK!g|93Re+q8voKnR8fh?c5AcFm^uv@w|b%#bKe~U+p3I zH(zCMBnu>)1Ut_EITj_U`DOnK>z8tLva!O$exBa2e&H#>=gD%5Akz2%!&X0xBy(Nr zL@Z?Db92>0P#}ZNRt~@VBhoSZ?!^X^%toY-QI@cJ=<>$Y4xvHqz-$*-Pws} z0kqGk7=%&25u>$d_URj*%;yIxOw|sQMPFQMmXpFgF*eu+5}b(~!}rLM;HS2;K&E@iPjnZPp{>Tf zlEhEF7pL$OHc7xwkK3ibvP&eH)VbDXg2^ zJ3sA$+NohpRB?{3!sMruldI4KxA@7I%ukQoHSy%6##)}P$>b-sP|&vD{8aEi&QGAM z@RLWMd`(#`X@0VDeAOwPGJ!(=ey(i@W|XK@6pwow^55?2iPYuMv&iFaprpZbQqV@D6?tu& z@fE4dH`88`w9(Ou{I(Y*p})izBXd-=!rR7$S){JeOt{WUD2!bl zsp~JX;n`Nh{bT1x>WX#bR3kH5Q5>5TsT-&x&M-1ZMk@y5u$U({oH_v zQa4n`9%W=!Mk|KKdPM5Vbc{=4%CH}gQpN~Jq?v}*hR-p#@X%ZqR-k#t?(k49T_U@( z!X;Qwcj7UWe)!TMo)_s9`9~HO%;lJb@MI8OF%G8rj<4k8wy0vP5;c7vu<3hqt8hj$ z0LSEbKGvt;sJ*LjSm2ak;YjW25-fqJ!hH_AZ?Xz^7}BA_an-<=dU9JXSUKsX?8_&ZSZ-G5s>APQb-UnHc+i zb^aLE1Th5trQGZEMJrrtN)zK8traqqJ3NK6cP#7olmZYfG=k@eb+F`1JZ(%{%I0u4 zbvI1^!C8x3Yf4cAka2mKb%vJuTf$ZUqZ<-rV2{pN$NL4VYj%zE_;HW zNneHd0gyBVfQ|2%FX(A&hRM`8eGqi=Q*eC$By}mv_Or_l(q(VdWwW_=(pjBjmTf@U z+CzM*zJhf*xgH0KPg2LTj!!38eJ|5>jMH^ouiHP$tYZY~C|QqXcrF0QpwkVMo7h2e zA1$Py2R@WgncbKqVS*TCtZS@ncin_R_x$M?Z1Y@d+g$$UsxWqV5`zwp)*&5(4wJ4| zRaXic^MJ;P%5>Maplt*~Zetf+U^oYf1dU&bXGvgRPM_JXbQ)iyqW-mb!tE)n0yrZT z;KJR8`%#g41XF-C^92xNjDlI;0RX*7;-$LvR|1&Gd|!sU{vw2oE{k{2#nxSaEdE6p zbjD5(!s;HMiNfH^D5|mO#QX;;npoTfSSgHNiMMS>pZDx0x>1Pr>y-{Q73g3$^MS|l z#ynU2N++RfeuOnRV5oT%77#kJx}ulRl!rIguH^G~g+7#yUsb^=5<* zs!?5p@?rwv#$Ik@d-f_?2;Dc7aqH<4Sl7M`PvK3(pWz#{GneOB_PSTRg{Y*ZFG#o( zWFZL$!e&GgKDHv2gqx8LM7P~$R<1@bz`(vH7iEljdCL7F7OU|;k`+g3PUN&L14v#s z(HLCYoQ%O+#5|Q(@@3l}fMal6p(aP@Bu$D?Hs5TVtW@~|Cf@60rUL_$QkZzaGeWAYNr?7 zHi$m%0&Srfbq7@NCz1iL6lG%Y&CNF_m*@%6%N%&nN(UVahEmi`q@P%qUzSji^l>LxO0Se-LqGJw*LXd1`Wh<=eCp-~sV&-hm`Mhn zTF^KWGE6jEGs(cCZaP&EFi@wq>X%j9)}ucFEKi*;h7su`clL{oL(8PQ(h*mBM{c&8l8&s$Qic?lj+`C51*x$rtGFL;!RD*CF_A+( z<)k$P$u?)*ky_Kj@AttG%ot9F&z9~&{_e)aZYzH=kmhbzp(jD zV7@k*#Bz5bm$2MJcJ0D)*}8VHT+vQ*WPrkt+L?su{vsw*6V#r;-`T0s!6uzbcH^DV zuc)033e@+Q`GE^S+AtfXqjhO4Y@3VGzuA*TfdwjihBVtM#Vk9@eWEsV<*V9oOTb%);ZLS{A@Ho^6Eknf7Pw)Iu#Q zAg%s7g6)*Pvf#d0m6o}soAAi@+QniSH;@f&-yyHA<=TU3t8uUR2r(MRjnA`hjWY_=R51wXNh>tVcn<#^wBl3ge=EbJPO;P(>D9AElg=%}KY?saxcjWr#qf?KqR!XxpW z*=KYyKRP^?R}=786B);xAZRxsGPZ*+ERh$Vf2q+KoS0kM3N5~vvtdO+0G#~v&ERAR za`JGUqjY%qkQDYk9z`%Yq6lp=fVPVF#(5Z4uknm{WXE~)dbyumyr>O(px%aQ_yK1`>+tY~hirtlxr#2B zSfiYCw6yVP55pF6c-`M)?^#Obo2WHOn)OTp^WexO`0!#enbMQaBRw@M zg9Q7v)fRti)X&7z(qn9=76kVYitJv&cT*er27(Ka$nix}n_V#-qq?n}lRL|Vj?wxC z&kez(@~vPI!f~mbDP@lE$F=bGTO$?&b5x$B)yR4b-MBTvM9;cc7}^!>Y>pjsIK^(_ zbE8n4ke@(a4*|sG8m6eei1DMWSwKYKv$qLq+NL6{77MzmnB@R;q4igzZigMB+Ssnn zn$Mj1CX%$Bxn<8L#!{~6aQs9I(6pnzu~`} zy|eRwU5XzM{K>SPaWIC*?|%!vG3|@}RNvFEh+lx|ytY#Es1?6UGA_Bh`k=p52$M}*0~yT0rjT=+*=N((sP z_y`cS67Ia4gYIdb7HS+lHS$l4!oAeEA^ZAGdy<{lpd>T96y z22{UB=p&aovUedBQ%li%PZs+V?X3hZUIv3ggu!eer8Y-nah-r_hrxJr6C zUX(g?OUkJ)MAa1DC)AmBdARrxvl;Sdg!&r8OLw}*?*yzT1UT;jiemMkVJ?Cl*;|VK z3cawfVRKzqBBJdP*f%le%C|s^LM^WZ_5>u;^(RT&v-BJBS>*e(D2)tq6h50j6( zz792kL|*>!ZmE1VO=Ldqj-#M}32C7-qfRcMk}MO|P^8NVU%eeVrNub4Xr7~C>%uLu zcTD?CZ{u=V`oD^lItL?s_hPj6WM+mHsjO zN@SrcBRn9`SXlrNhzp#c$!)C^V~`qlj_!dAP@>(Hx})q~(qF#%$%TZ{2E+hL*6OTO zoQ}ani0u9ON5H-6T;!*aIr?(Jj+Gf>%xjFtgDurjr)tIK2iVR|6Y2CCunT#CqG!XF zCL4&MT*+HKBO*J58VoEDLU1DIA>ZwB>md@T)AIWb7IHjLVfNO?u8u$HLCX91iS%Nj>8I6 z>NeHr-)!lCemZ%-lsb$Khk8R69!dJ#6TNJGt^oMkL!bLqF@}@)>*NLeIL`8$D`k|( z+zr9Q19yIP?P=&fPSbPv;P4z0F|ULU4PczqIs!GdoyCo?Aa7iJV)jA~k zPoNJDwp>Zn9#5+crpIdZnEvGhYcp!%vvbvTP%R?Zc;(S8-GaPKk1CKs_DFRzlnzvl zfXg1z1G@z)1;5rdo71$;vOp4X{)wPSeVq8AT1zW84yWb1m(#*1=*#u1OR;|TQ>Rp8 zenwE7hC-&iP%idgX)ejHu2FN52fS!(_p7g$3aSBbA?9IkfcPj-S5K1+(8v$1b^F!P zS4mCa-RU!N+UiR@uZ!3&i1n+Z#82Oa^A@d0gWA9UheH6r-qhl8nv1cF!NTTYOy+(= zspYpylW1!q`ZkW;%7^XhG01bju}KY)C=lC&+0&pS}Ow(XIB~AukB=GPV)uZU96_Uc$wA?r|>}&B)Rr)pdJ6g{-jl`(%0#s9Ug94*>AF zKSixr%g}$9cggbt$6>r@!@Y#QW$q^z)&E1L_Ve%)P~EWR=ZJ3#&7xuAg^}`!&9}RN zEput=UQUk_bUJBf*QRWHLJX*N*IO0!tXA_;4fnNC^UP?bxH?V25m$Sb$21tttIZ6k z7EEenL31(o}ZSc%}+GwtDJu1KP)=1e9D2G!*aew_LICgANc(xIFt(Jd{^(a zb9Y2G)~JZApV6?po)*SPT|tJs{(TB>^(1P+3E9d#A7po)>Ve6Q zp+Yqq5)Zx3$JqbdLgaBnAz+q9*A%#uVEyP`BK}vRHX~!6S_{FWS-hTin~LaE4PsuB zU28ugjU0)NGeQx2f0=p|!kqvMES45KM`<&NwZ$#A$qW!SY?><^cP<{$vEcsTQ5C$4zTAvJ0o zmPA^5_5l%BoGgaa8g(cjsZo8-MOVdd4wK(h;R%BIovcQkh=R6GMyXLdLBd*`s$W-P zA}XAXCA1t6l^p+r<8fb2ui_z1mD4x*{N}BQGV0~HCSF#OUmUvTzAE@K7pD?E0dja7 zc1^3*Uoi1S6Iz3QrKK*M>CqOUR`=s`sM)e`yhQYeRUEIZZiP?}uugx~S0)+G zB+DN~p3I!c!U7zEJexyKeP*tF9mb42j(=W^U9HMW!7>VVcPO7488nS7y-N~vY4Pg{ zb}Jg^AeyLtX5(O@`-X#2CA80K^+mNk(k^AUDjeuZF4X~!UG55Bc6ARC1T|_R4A4j^ zgeA)y%GK%~8L3ci-Sq=d-aNZntqMf!5|sMxtaqFP2SN)Y&0gcZ>{lZ($DD2{=RjjT z2fFk7&_JF84fl=g+!Z=rp8*XY5!tyrly9E@JS4I+9&+pRpP?MQYp^bpSLmVo>{p`W zD1ZA$D+;iG(j4k;;&v@OUOMfKp&=GDeBy z%vbLY=9DmGIwG~@-Mw@K^0}Y9*z10BRG;QgoLv+G$60~C62N{c2<%?c16fz?#5gZn zTdLeka`4$W+L6u6ybA`yLFOSaM@{1>crb#;RJABCg17gOAo#pQC%q!uuafj4k{Zt} z%zhb24f1SlDmJZCwLdbki4(O&Ha2(f4jpA<6Q^mrnb!}6quH&aLm!|JWwqHJP7&QG!o!#6`EyhpEZh*O6Xu3y4>tL-FzXWs6jMf!^ zdo6|c)=8u%HbC|6AFO!TW32mI>|L3m|7hs_&V?VuUY4o1TeTVl9|1ipUcmJYcX7oR zz?^*1UhJ3TtQb~?l$89_X0!fii<80UvQ#to8(|f!GdFvuv}lzc_G6V{$)vDpxkVx@ zVpnJ%605V->cp$re+ZM%;VkwZ^m}t@f|ZF}QiG*Q+zL56xjohRTZ6x;_`3vux8iRj z{xX2aQ~8@|TFbH>&g>-n)`1Kr>}H++tITA9ApMqt1A=) z|5C=9}80uNRy`mu-G7F7G^NcRdR#X>t>dH zbJM?`17t-%JgSxE$FHFrR;!|uNYp4qqtOHI_n+f^#-;wg#!Jo0+1!@5bez|CX=%lA zjTMCxea&s2>ZRlQsLgtmLFOHAbk=JzI#f>?ZBi$6XyyrmKS+EIKESCFkgNQ99Y|B& z4>Hu5pzHZ+8wM?Qc=C{aH^BhJU-5O=R z8&L0@s29)qsssu%my=HD;7i8=6#+SWWAtcr^(yjXcbA&B2X7_cz;&%mK6wGvAm|m{ z?FdA38@S0!uS;Q}E|>R^HFbg7f?XPH&70~qtmm*pL})w4HED@a6Hv_}$E3cO5N}*Y z^*Rqr(lfnKueYQtgj=Xy#}n#xJXyVtC#%<(UiVb58(l?OxyHfBc9rXCmnD>IJ<80P zJ2BXvAE*agVy9m+T4V8-W-`~iowy868&M0*^nZQ4{LmUSe+KfPXFz}oy{3t!Q-)g8 z0E;n>faXq3JB_gHj!4AtnmN*h$>T_cQ;TdfvY;x2S0m~AA6C|Rkg?tG(jKvrBe zKA3-CJK-SAUJLv5yU?sNhuaITlVwDLBSI%957b9TSOc|J=5TY2wpJ8?H!^Jb1$Boa zD_`BK_W-rH+K2ggpXgELR+p)DQrApYu*t6AV`gqf=A^i98TSw?SP!eQPxWUJ z$K@8B9)#3#7D>bvFz#v=S#|-7?C6B#X=4jb)D$y$Dv~3stJLclMLzW>B6V( zU~sE6_7eu*7Q8HFaLKXEa4mz6VutXkIS2+9*^S-6ir<1!I4N!=Y*kqmtqeByY<<})}; zsM(FdqLGa4%;4k4Ft`(_P)7=7zGkq8fcpu8MBg!|GtZy!6Lco(dUkpB$E1tqx*ehbS!9uq<^c&`o3B6jWKLy~ufwiHzlgVR|oD}zK#tlLoXNtRJ&_97v>RdtjZy5B6IKP9zMI+eiPZ)e7z~E8_ zhX~5AWiX?Hv2z%_PbhUEgWU@lJB`7UgbEWFEMLUf3I>;-!(b_cCj+xSRg7TpQM>0& z?B$Jso*b5l-oWT<5Uu_!L;oM~ujA@{>B1HUZ|udoK4$RV-Cra44uc;a%-B~M%*to5 zg~5f;QbB(PM~q|eAqLMD3f_%iaFg8|#bzC7HYx5~#(fR$rSPmD#0oB91(zJe;Mokm zDeU5B@GU1}$1r%ZFliZsoAD3ke+EY%!VLWw>?1YwW^mWpjLk(bm~n+Q%sdFGxo9~l zE}wDdAWn7b$08p9dh*@T!b@-BOP#rp3F{b~b^?RXG5CNm?_&%u6*T<{!C;}?*icq{ z5F1Oxjb+?-K$Ln)#7BswvxFcQG5CS7#|#GhpTd@^8KlyS@sA)oRwHxo5PSuv*^SL+ z#kZs4q_{D)MW@__0q9_ z!afzu|I6@y7&w3!P#^8!m^kJruyl^FX-@=$t2q!dxtLf-jz1o}tbSZgF5Z45f`5`J z>PrNJytP&5e2Y2bT@d%aUHS{g#So{y*~xaEX6Z0g6Q6oSO4~V|bC9zcIjPotZ%2C= z{aaS>OA*Icv4ShYGM*T0yPUyu8SFZV!O0R7DSjq{PnI!uB!iVdV(?T3=U@n9J;C7i zt?by*49*Y;dobvc*e(nX6bxlB7!y(P9crhD%0!e;eTFY}W&wlmGI&3Rxlg?=c~bA9 zJAh=fs}g^WNL_hGNIW*GjTw#_XjDJMWa>tR?~9HcYkuOoZR5p#Izhs`#H|2#WIkSlIS9rbN88VW-^6X9#&n}BA>{OT zaawxfMlqeqg8zF$rY_~ww4KCc4lCS*&y|(=kJ-0J9ZQ4+PfyDJe(yG>HYUC?@dnE z-k>Sv^ODoG-%Uz74(lfBckNk!VRE{*wwvXHzFM~j*R5cq3p?G`pE{+ITTr=XCY#$f zYzWR~{zd8eJMAq$`P0Kq0vGMFxd9bBnKi>!S9eS#&O5&1ox-><%#j)P;I>U1otQZz znyDe6MP|<)By|SCU>*bnYPSE>pQS674{WeFJ^ksFbUAOy{^iP+NVR&P*y`Ure`IH7 z*cn;q$O;`2D~#-PhL6QZW*82u@p*ZT^9pNE_Nz6}PGR1P&dY19lubY}idCy@z-ewG z;P}(dobbU?k$VQ5IC;Za52*_8D4{BK8I~-td|~?rzJAD%3S&oKd*b&*tN#}Qt6Aa7 zNIWw#k#2q?i8J<{tjDAFtifV{u?-g1m9f_aXa~HZq5Y%0vUmuqY9x5 zV#i6&o0NG8)vfT|4iYfLqROyR%-*9({ z2UaARJ;p$P0~_I-4ZxVJ`V)+Lg3$xJ6&j2mV+ED~<7}*6^~TwZ7GmQ#sm3AIICVAM z)F+*-YPz7B*dJ2iE!M2@gWyd9U4nbUe}YA?IRgI~k+>r~1siAj9yp^z?V#9hLRuTzV!&skLBujo?E;=sPB;ENM>pvV6)BX#7mHl*rlgHtc$0y+~ zA7H}bUVael`h+KxLtkK?UBOuDhg)MKDkF4QQA^0#c+D=kziHLF7moMDI<0yZKcIt! za#Ys@)R3sW!Sx4nJ~ZZh0s9bf zIZU00#xo-E-8ilA6oymq36i1KCc{zlgbZ{S#>n}qpOArD0K3#yEWc0*5RLP-#1pRy_@RI&#s}qAcXT%+Tv*bCyCrtJ zZ*D4si(;&pBLu{8P>G3Q7Rd>Bk$gQxMn&Sz@FDUIhb9NuP@X-+%=3Cb3kxCEeFRYv z&LvB3k1uePw$?dk$}L*(d(~4_S%0g*C`?shT(J$|KgbxD+pvCqr^t@Xy8gH$W+vdB zfy;ezaEm|F^JW5z*64{Z1OCV3DWosSB zTM_(Yw1|KBN_fDWisO}Y9l?*0R6DoUq2~1^A9|B+M8k!yt~Fy(C*)IdD&r8j|l+%Wa8{%Y!IQyeArUw>5#xfeA{@VS99<5kL|1-RUVYJiOZQ8o}HJ zq^?DvB<}8Ak6)nLwTm4CW%PNyWu773OyT6q95TU_XU*xtDHN#0JQ>fK^8zpwK121V zbxe?Rx((Bh(J#y+HAGJCk4@y9b(|o_9HGyMV4IO^UFrcuId&2Gyo|MnG0w}=2Q6l1 z6TZ~(tzq6PyZ+ZDXnFZlEJj6Ma{P#TnjgSGc;q;H{P4Oof8#s{hEVwM!6$^f!*e`Z z>4oCA++W9r_;R@lv1?>U7KGuhoKPO0Pr|Ib1FT2)LSa3!w=omX5GCIGG+f`YO{2x~ zC)iK^>s4W_jqJ`Q|7C}}R%>Mi(%)Ez_eWgc5oXOpmEIXxreX4Et&~YYx`l5~bUY4` zN|f&Ee}+{^b*DYa;51ydddh24U9S1Bbku07?j%)5lB&a~{0}k$pem%(tt4nSkxto^ zPTB5yxq8{P=60k+$5T+)PXq%@Hu7yByAe8P!F!r*xS`R6a^Vsx3mz;C(AI3O4laf} zQpr}_S7124W2MF`7Jc?lc?snv(|ZZHqkF_(=GKt%unf5G*Mlb z7cixWx??0I5Wvq5ojvSU3^UxKe<{XeupBZfm;+BoE!*F~oC1;jKClH{>h7aiihgf1 z@J!nvF(z#;5iyI^!7%K1oh{Yk1BVVyhWQt5#EuE5jYDafIkL#gdZcAZ8X3Q*0yVsY{X(6NTl;()9zXH}d<`M~I8L0_rWe;9-9d`8A*d5#dqi zA1mzm!+|kR&G8{f@!-cDt~l8)aH!Q~0)X`0y<#~C7b*rc?)qmCjBF3N8x|vAR2C3o zcf%d{@T-r%V~_tn{hN5(n|5j^cf%q{9S_?Zj{|=8K6732+1GM7@xzn!8O9$S!Up*W zS50*z?i-s>n*|@b>J#Y*nGYFLTn%BZw2w$$?Al?sVu_3UlH=Qf)CEN9r8ZK}!?HNR zZ3D4cMx@G>e=X>-Q3hotD^!S8X}ArKl|k+C`uyt3Ap)^aO}a?hq@N2A6NB&eWF+C) zL2P5`g+0vzd?hYlwH*x>pJTO*sA9MwKk+p;2eAC78u9NKh~~gdj7QZSyD;WJgpdni z7=DU@5xkX%xy9<9;zB!tm|idrCx&6+w?Y+|Rmp7^3?{^#fm~UxLf7gf3b}!c(a7R| z6ZV51B^>xs!9T@;(to;_28P?c?~dMw`!e#Ue`kjdgW)sQmEUj5wp##JTdPZACAE6= zclOAmd*o3QbdNe#)9v>EG_0NWdrJGapgrAwwX{DCa%w-?f4#S0WIx)6c^6)EHM$3u zs5l-L>);b4-e)%PmculgAl?kINn0}XTN!x0!Rcn-t~ybDf;e5r2X-B2=sNDfc!V52 zLf4T**i4(SVm`FQe71(>he{Y5zw;osg*!WkdXSVC>hEDIIfjLbjNJ%L8=I++111om zPb}iTn?l^sQTu^hj1jy2ZIGSG?SH1f)7tk*`+c8H7{_XbXq_uxe`|ZC}NiI-_cijFJ`_uj^tobw4ye(fR`NI}cX&l6!l@Z$a zAm>cZ=)><<^tVRJVN|rRsZa=y>UR!i#{Mk<<~k02G`0s+A6Z+%$uYzi3|+VmY5K9u z#+ZTJ$H2Az{VnVri%TCv-g08^@m?nOtlFzMfL~Nt3w{{6+lL=Yric$~09C-|fKPIT`*@Cj5G|N47f>@Qb!-!H)+C+K0bqI{aq!De#+dX;AI| zrwRY(9l;MjofP=>cRTQRN`@cHK9PTVut&CcO298lr3HV%-r(<%4!>D_3jAi={sWwr z(}cgRBlu<6i3M!uke2`YyB+wkLy(YvSltQyda$E(0)F@rBqjhnRM9^DyQjl%R-XdD z8J7mt{(qYAtB&A5IgS4MyB+wk#g>4d+5zW3J=kHkOu#QXrA7b3y}^&&)ztBCR-XdD z8Mprcr{zr5KmLY=rpfAB|IyzX)Fk}}D=DAqdL|&`tuX+gUH#`U6M&AEcd6~qNo)U{ z_S=66YazI-f0)n$+iU-d{b_&IB+-99O{Tw(`p+!(EGYUxy%nP@Gy(vMLPzieY&?FvU6LZZbzys4PCFmS8E{(GL z_i4iaNk{O*zK|mS^mjY(XC%Xq)tbPs2Rrqj6a-v0Dj5OoC_#dNhq|R9AZ)ggjDWMv zxc!4THJ1th#~r~h4gpE>Pk*-qKX$GY^vC*5;Maql`cEqSm>&`h(2f$M;m6TMTL_Q= z!e$#O@SAa|knP`>3I9hO!9O64{`$Ke_{Ejg;(x5)1pZzu4gD`W4gL|y@VBD`Y53jg z@SAO+g2phgl*4KURqXf1U|{=QQ{+ zKP1L~J4%p--<1x(*+vTdW?U*{`}bwS|JRP-KRyk9{oM}yFvcg~$0||a?`guHlLo(7 z^DO$eqXcRAyQIT!wvhtA8Ml8Br{+r4KmJx|gR1o({jEVw(tpIU_R-fm)<3>E*z9{p z`j5u{w)Z-~|MWzsME^K5xl@+?g>%CcY#!M7zaOhK;{U$xf`2F)oPJ!?KL$bn*dpdN z3;pdFVFdjrSRil>$|knL+RY}C(f^?tmx|c^{4(Kxw#(&>o%OD*AADD6b335s{6aLK|!7mo1B>44r zJMf$R(D2g;Px>Eb!mss@1pH#fv*6#G{xJX#$)wCb-@)p>2mEGS3Sj&BVZ#6Cj^Gyy zQWE_7yB+w=erWiyN)!08Ig+G*B;Xe-o(2Ej^p62K>F{I6U=R4sxcvk+g2pH~XRC$I?mQ?`FcU^^XMnV#TxI-<$q10NWy|^v4$19`KuSDS++ghYA0t zj^IBw4SxOI4*X_6H2hel3H;crNYXzN@QW4Cf`4!N#{hU2rNWOLuRY*5mLdD#foRazc>A3fFm9LzqJFu8J7asetwwn z|FI+Zk4~e%{%!|;vmY9MtkMMjt|t6i|46_uRy+&-z3CqVu=|!u|8LrX-;CQ&kW;d0 z|Ez6qLzO7^I$IrZxX&d(d&n-|twe1OBqcb*39P!yM^_Wl| z7NxMeRXg#DlM5~fR#^}&!S}gM`V3^5b~U+hjBJy3&UA8%^HfoBHwkCAD> zi6JX=5KOn+fSl6OIs)8)D}Ug_lJU>p8zK6ZQ85kr$YH^k;d?1P@~L|_60dl}ZJOOg zyBov6lA{X7H20F8=mst;+c42h9|Xc)thz&v1UJB^KX@`yHL$#T2z$cx1p}~W$XZdm zI<`dSv)ZynOr+Zczs{Hb>NA-cTzuJpmWJRD)=bPca&q2otn5Il?3Eq3v8 z6mMGquUKiKGn)usq~_Y`r`y$UK3%$JR{wx3<*;RK){aU?*o7vrQa;QSnU4cFy3$;A zw4Kg-SlcR*E);56`TGgDmkj9PUy=FCaMb)uVZ;OUq3x-C-_-tw14-^OZf};+U;Z?> zUxLVVuciy%DPYJNc$&GFY{N7Y_x|F+v)ptl&Ip&PF^~vB*9uVbJ{wh!R>A9=-kn~? zyEOM+C5yiT+`o-2L0Vt=d;{JJ15xlSOJ-!dCzLmA5xzp*BHIf>u3>yu1jlf;mxVh= zuEIeh|F8@wIr<}(JB;sKhjNDTO}(%a{*LpJrGzyN+w9g9>djZ zqqZBgtwp*V6>--ehWddvxEQ^PNS`_wtGP&1&d(wr=48JZd>g6F+q3mJi&mVc#*0M; zXAdw4!voa^Z(05PqutL6-B0tG`X0KU2^7cYo(EZ!rrc2+9D^!=7q#}Gh6^=i53pf03pLe9yL-y+-mlQEFhW@p zBg~dnU=kywpzT9gc+k(-jd1^G572$-!v<*HZSyc@(&EFedj#V;ruE$G*HnZu~y=)keC zJp6d!bS6ivLZzw{BT92qUrT7JJ4X`@;f&x?qQMk!7s(g_kIRtDRx3_&Z9pO*ZS>hmD~Y>wT9e#aa< z6BGZDTD2B4nLiKus__y)D1eV4e)28%P&_jP?C1I>Or)DcF(%=1_osku+`wZDY0G#2D2ad=)O9!mYSK&gBSAZ>*Sw zlOK5&@*uTCyaTOaBC`q0S0QBhbB&jPzJ|?sI%ymp`3avkxY7$DvjEe(X5XLMJ^BC^ z@C0N1P8M&N`79_nP|7&hLl~~mgvguf_Dm$ei)9Jyw6pRcB~|!CC-~GKVM_rOth9-^ z@dVxtNiinU3bE&%6pN?T1eb40KWtoLBu%o1EV8LT zk8YTg)LXJLOTsaFXROl#?rgiBn`{BM7RK?!OqZGIqUy3jDoGmIp9kEY#no=l2*2BN z1$cBmelNr?!&{KX^qVHRJrCjUx*E6V1N?PEo*no-9=~U&{pC$|drrjPYW!V^zZ=Z( zZ}EHA6u0O1_&XkTe}vy1X4r%81Ef0qUp4C3EPEfjh#+^$V(Xzy#7b$es~ zZ}Dmt=*U+6pI}eTKc7L1u=ZnY{@H}?@qGZU)NmJLD&uVE1;(lOevCA*4L}6ihvFkc z7{vD+8AO7Ulh`1a8So8HEBVbge+$fCulZYO{`NP2i_Kr*LzExHZ=9;cq&I3P82f#E zg81e5D?_K=#iy|FSP%)fH<53_2b0w!*xj=3LOw}N#-Is)&6RpJ%Mn0P^OKA4D) zeJnsna!sZ~@H`(Ly+V)X3k+GlWCTnc+Sr-&Lz1rpVYK_UAcJl`S^p z>yhWNCe)aPnl!7DN5<}1pnWTDB$m2{E+`2#cz#KXjBaaC0!tS!QMhRby;j;s^LC~g(LiWx)87r$%55@{ADHQpMz$A1xUs!b@ zzKT(xf0CFj2dj@oAw8xhp)txrI3j~xanUej;g=z|ai%E?&-9>I^5z+;Do0i2zM9$` z;V@gM^~b|1Rd~1)h@1xXoDTKV@HYv6-U;}pP(6puE;3hM!`AuTSqTRYDsnx# z&bkwQN|$ui&kJWkG#25^V_u{MD+}JQD=Im-?Lm|=x$Wq`klR>E3y#o#luq)0>-Vag z(5%|loJ{YPh?0qtU83;-Ccr1Wzs4^fQpVFC2;lH+J$``q;k>5!0fdCULrLGJ9z94{ zP)jaruI&rF6^QWj2DdM?Ce4A**fMdbo<;G}P`T=b9WP@e5&lMKj&TNvX=J%azXKW$ z1;IsbMTTUC1Cgt7iOU4kJjgc@mwLP@2da&FFX2h2MeDOdi^y8gU<_8mMhggVCo-A@ zxD(rdi&wK`i>%*b?;kLnYyAEcVkR-3+Q%;$Lh##+KpK7@MpOd7v%1UpS%pZTxwbEG zQy|D}AJ2l^WE8K0-HVQM+;o~_j1W=1$>2IUf#ShL@l`g8CkTo)(#Z3hP&CPYIzgQW zA&dk;aaB7g9tJzdzXQc|m2=U`=aO470@Z#s<#Vy}(ZaU{D2nXP3{S-Q&(gK+A1b~W zMzrt+IBty9;=z1HvJ3Y2Vx4^PNqDjbSaRqCrq+4T%n|iX;T^aXVYf3}EO*NE(`9p> zdiuA=d141kLE0bIwR18R-8(A=288D3!aIMy$Zozj!%J>P8#%a{#+c`g&vu~cLa0^I z&N%qY;U^b6v_y92gnRQ+oABY1*UX3`cgSmAhNE*HFz(&3LC){mr?&F~c(iASvhh0{ zz2ikAC!$-h2+y1@r(PH4?hg0B$!+u4wjAJ=iy`pjO{Lr-!D=2$RKsJya`_MI$%02B zo@`{66G2G|c07gbUj7*f6Hz+Z5_))&9v0^IWE}hFvo{KS$Ex*l%h)j~oLHa%F|FMxZ!=`bVh0IsrRUjblI~N9npNiy#<1^gI~~&y%n?gmL37*BE=dD|WED@Iew20~SXp zyJJewCyMB9vP4W?a5piJRDS5^yDzip8vB#az?);emw-FXS>!A;b24FB zlxVZbZD+xUz=H23ZGCc)!o*nxI z%={7T-lT$F1v#O9^NE07o}lz>GxI*7+cQILjVQD-a=45`r76Rvwy&s2lJ03IeU%fD zs&WTbOm3)xaSz6(0TgD>ea~o&U zQ)jAC@jVo2CcrnTuwyx4@{bFf`vK%t85h87}<6&v-myo~M>s(c#lTPmeJ^ z4+xHCL+i(NJ^KA&V?2F9PCyGN<-l8a-DQ_4v>COIv5JRY868<$SW39Bb3^9qK?{N0 zVq}-BN1eFTjeJ1LSv;JD-3`AdA+T9OsLQzjogeBV$LQS+HzEmISjfv&yes&`GAPpOTNsgL z^9qY7Zs=hA%kWn(U=PkrDANg)3;iJ%N<`Y_N4D<{pRCTqzzcqVBi8&r%vQldgw%TY z*8(JSKj&xM%v;S3ml=`OL*>SdF2HQzFraiGSyw_|KM|l0EQW1~jUi-)sC=VU6MdAaT-R4N@#RJcY2(p_@&I9HB$_DxlFp zT)Kky3JGrdjg9G45)8$%u6+_b`df`tA;AZK0OB4c3HW4-#$5$md=n(-fr@MrlnDv` zj;Y77cn4`P?=z5NEG~VKl_l;;ZBffvWils)V7bj3ke!6Tmj@j;KqaIJHmCO_*G0Bgl{J-W@(krrF>o5_GUl&@jvh34)GB zRUjzto|GYl1xk-#sg)P~@u}_)GY6h8lpN|g@M{V|`=r$O9Tr!p?|=_3(9@((&YtwS zM;xo$r_Zl`C-f;7qQDGO#qmYiW)bE$`z8!5+RK>@L#>MA&1sG|FBDXh4qh$U1|k)* za07I5GhwJsAYBU~@=oPREgEr1pnmG|CxFeRBv2;{>FO=)=p_hruc-GHfz)soNFGo3 zr{tcibN@TgkMRTwxY`?0$M&H2LOTA<{J;aY>}q)dN}k#wF4*ZgwE))RY1<<}5R6-z zUO;%m)=)sxDm*?x03`yi=ZiL;QwcEU9Xlb708e6(fxc>H{`xUs^Ae)}evnrSyc(>z z6X@@QivCG{*6{QNJf=VhT`iY}X*U^M$B4Og@4_Gf>N)}SBOD%Um)B;&(W`x4ds$C( z8q`h%)dNs#duTW>h3{+v&S9wKpM+CWZ^H%+@2L!pt3cS}In+)%nsO5mbTlvtQ{QA$)xk>1}@h%&@RFJiQ-m=LC_FV{lZ zHWSh`NF~!(z6Sjm47C)JFN1q*0`#*)Wj`RG3(K4EKX9Pv|GuXGFKt-U=#Q1&Ug)pq zT$BD7et^4-jzE%_6RlTXF#s+}Tx$^Ycu z@?+NE{q!d-9wc6j$8&Ege56rUW;i1|@Zbr%b97 zV3$ZR&e3oE4@F#t%a^glWRm|d-0qtFpo7lPB$D41&B`oB=&3CS6%)8QNf9-DO zC6dn5&1HpMj_Z!6p*3Y7M>l*pM+!Nk-OL>RAoqoWA+%TPRSnQlsCc;=wuZBCkzj46 zU-7{*$e%*twElk8uYgt%Sl`|Cx1uQO#9=6R{r3#}a~s}p*Wbfn7CmY6wI?kuAS(!Y zv?ndx!^`yTb&;##Dtoo$2#bx;l@^g4sa)GPP#ZoM|4!sQ;)CJjZ zwGOi&nBY02!|mx-@eI!^L6lz&gS9f)hy=;$SC`&R4$0+}(=ZasNQlfY%Lo;1t8mfL zH++myHVGRG-PAv@Own4W>fRv`Fijp!3mIT(T03UFC8cs}U*GbC*-b7h6j24DEh1#gW} zR$QAgp*CBvMU&GgG=g4@^&4gR@r|(W)2qQLTU(*7$W@!=SDq~D%P!`e4fk7*8UrH? zbAfhjPffNv7`Hq498OPz73k9dR%rbH*n1PermF0JJSCwG5O_hOM5q`wYN1uDMFm^6 zNNEufQ$i9P*&G>+bwfxH6-(=D3*i~$J321ohATSbHscJ`Ww50{a7UaG95-A>Z>>sa zP$)8z|L2_hUbYq}xcp}R-!C&Y@4dU9d(OG%oO|xMuX7KL5+mkKf(hlwL@{;{W(;bO z#a@ub{IZxaFf70xX+S6iG;kTyoryIjeFfeHcg(I=;2S>Uj^I*rFBZIdR!%W;#Y>tKS&5M91)*6wPLOU|3}arSMvqO0v8gB>RMt_K!{B;R$tqQf1WbtG}tQ<<|C?ieXK>v0BW zU6!bdIqNeMXk_uLF+D&UDvY%y)R^d0{0D9B>+^962S%~B-VLsvHoYX3TgfVK$0hA2 z2n+RX3^Bd_@WGSlbtx9bK(L2&sy+SX1a@KX!Q%CSO6tiK0A`B~2tK0uUBGf6*kJWK zNLEg)&C#>VXn8)T{-p)ICWv>i(FICU>^adZ9ZLUf#a>}o`j^|Wk%8-ygLIC>FOGuB zj@?kI2}HOW@|Z{50hr(qPNe(cz{VErw?#I4L)MD4xYks zQOFk<)P!?Pr6#4W9a(l%@Z>1u)o0{s+Eb~{4^0?d3bkC^^% zF3MXAN}a$iF+g3ZmChg(!37F%6j$os#Ah)P>$!x$sR;-?3k@j=fyjEQi~PiCBdV~5AojI{os6@*xG@%-G zfEL?p>|XKkzYd|zE(+@oH~tFj2`P0huw0K&V9ZS-qK(+F#M%ig5CFj8gK)}3^nuck zeELk2d;d$JV|iT(_0>wJV@%nVJfUF!Iv$8Y-%%N>%r#Y=2ZxqHv^wnIC7G(G6#`;| zn@f`V96AkO)OiJ_>Jw--UQ6UW0^hN@K?}StL43w%n+@2<=UT=0P{o*JakmGrdwZeW zBiea9Rc`dwMY9&eDKt>wGdxbKfnf|tt&~vN7GR0T%BY9`u;`sCeWkIY|9j~I0@8kv z1NoorClF8A|A2hecnaW3rT@D1-#q=dK>sb&e~0P6!}Z@1`h}iTD3p6aEz^nVp9roh znSKa};WwE6=ruI+;2|t{O5~i(0uV55gA=P&>$^;98O@G+RymFw@|4l*k+YB0pjy@|CEoGYU? zxm|p^X2sq0Ud*E;(oy`kI*H9cmgu8)uAd2Pr0I~Hvu$xdnE4v+iU)Tyc3q1pX_0K zTmuOmTb-@#$?Gg%)$MsepCHEGn~{@*v^`;_K`%$B)xfL6{NnErtvn*H4SY3*3pcp<|q7QxFQ zR2=Yw58G+2C^Y^=50*HbP|0a~%!$)a(ed1mvGp4l^zw@^f!!5L zgLiPQkddp-&8A?^_^9ml7>{UsPVY(`pFxrJG|A-YkU;7nGlAcfX&rEOTT=q#(tS;} z-@#D2;F?juU7Kz`Jgq)neF}hWH$}$hMf}!~MICSJfe(nFa5x@uvzT@h0}XzG_1Gb( zT|+_ zc)usFZ7YvEM1I&92<}3)im|ZAgScZASR%1V5*WfKYXR3Dx%LF{t5298#421=B!=Sz z0Ls4i7P^87xERT^EF@RCi*SwmZem;Dx?onL&~;jlXj#e?+i|K~KdlB~2TTlOKPX-p zpJm19%)Ii$AbM)RFG_Cafz$EA7EudY2;K^%t?Ftiinn6G5TjXh?JJ&zDAWax36~2bYjAu_?zf$imF=(S3pd#mV>OnBv$0rJ`5dB%5LvO{r$9@gsvN%YGHNv z6fK9@(ecENK75fYfeJEMGp8%NJEeA@8yYSoZCBw>hN{b`H7$Gw^xwVU&XA87%$>B} zzwoG~6Wcy`TsJ|@+4e1e+yUQ|#B%hiV=(*|qs z2})D0SPJ`%fu{xHRT%gp6=ML=LxL9@`2%9uA_9Z0txv3iV)d9{Ej&@Y4ZICL3RW0= z%E&2-0b>JOvqc}?vv9WFi1a|vzFe{67$kAX$Pqr#^EXr{$U>>37#8YTIGJ@29<(~{ zuRl^TOq__FbKp&+VmM_ROsN!WsobXRh*XqlS@e}+Z>Y@{KJS3|2R3EldbEJ}A?xp< z_&DQCO8rWF(6UBF%Ez@njz_iHgO3jwA3d$N^T&z!NF>BLC$`?mA19f@^ZCQ1wvbvq z*%ZDKM~})Ux8eHa>89{SoHV`d0<{{(LoX%GXd9WC|ZaFQGQ4T0PGcK8RlCwc)1Vu@#n=D@$>!+w+kXSEM+$LO9 zv`}9!f0@iOU9Ok2kjkOCOZ4@!YG-1pt04gLN=R#uk#UT^WR6T`T$afAw9M%7h(_4f zc-^gYHzty4Hc?LyOJ*f(@gNZomP@%(DhtWa7&zgStEIA#W(|C`8swduxnjZ)P{;F+ zRa1+#evPa&rAqw@7*lm&5(ew?q#f5U^4M|4B3eOX64~uoizI6vA1Cv2uo?Bh!ZDZ) zgU;69aJ7a}IIXgG*%iei?oL#8Sfa8lS=mRjvN!)o(}`_dE!K99xIB@6B}hOv{w7u) zG_D7lxnJfVG0h&viRUtXPn?bJ0Wm{1%Mt-eDzvo@nP3tu8oID>|8Euh3jDo-zb*Lt z8h^X+*Xu6DeklHq#$O@+&cNST`~~p0KYZj*&{)23X|BDbtE()+%XNEgRL7zjR2yM_;= zNr^tc#wG*MNB0`|<GVyZ_%vcvL`N`WMd!$h z$Yu{BI4rfIw6#BSRW5mtPy~pHkt4K#75AsoPSIgpdFUWwZD)fTG;=Yo{T)tEI52_S zQzi%>+r=%?;#~h#cx=2#{DQsnEM&PyMQtOrX%-m&my6OwAD>I~@nJAWZ%~t6ocokM z)(dH{kiE|Y2cS4+IJQ^c0iH_CwjIC8-68t;Zb-paPY1rD zFCan7)?UY#DJ0QoUz0!+5F=JngCsEZ)3O7G@jiMLZ+d92g$m&kM+W@7Doa4vkXg%4 zk!7y2i{p9txL4MW5ty{s)Ys$c_1J%|(#&Y9k4NONFlE6t>7On?7JI`u+3Be=iSa7x z+DyXfyV%$|4r{o?g59X4wU&Cza`WN5S2sX=J$Nd+yC576 zVvE8d(UHV=3&+=QU(l;kJgrYJTEEHy1tK!V1Qa|WKBrWhGfwQlIs$749gea_=m-w# zuSnGIr26kCP>se~C=Bnf3>G@wPD zgx-E!$4|XimxE@$3VGs1KCxn!oKVD)LdZOSqACu*$gUjEcMzuQHQj`oe8Rbd>dS?h zl1CZ2%8Gu{*;dw|wCv&*rS2sH79lQgIvI#tBYhC|h`1-|h&zN3*Ne=6cRJ?I;kJ{Q ztCLjZu<$R`>kCYwiP|V%s=dMj8g?+&ONjn&UEKZy#_dlkHLTHy)n5Y(b$xuO*!>r1Gv%bs3t-V`uNnANcJ9dNPYhg5;!afY3CiT0__>$G%v<+A+*p}9UkJKHoS=jky$^8 zBAv$Xnv;<9)18J#VX4=RT^Z*fro6@Ez|{#+3o={-ZLi7^d=Edu^9|FWe(=tPS|G4C z(wTNHkObm>JjwA6sMhy8Vcpn|amqshAAFe@PWm`6T%JhC7-x86$~aA#;|y*~9p`Y= za^T~{YC-2OrGIl(2(M1ji_KG=eWM6$^1OA<4N3hT-grRD$z+(BOd@5F&MMIj$`T)X zA-t+mPXSIOP8>!!;h09p$54z8iU0Br8o##ey0uf+pVcXU5i?N_)vNB<@~O^ zHaXr|DdU~d)p%L$q7mDIcf3uMvL2e3K7Z+>{SJ;)dP2r%9qg5(kM_R#8Kccf8|^04 z@*|BF{{3ax&!o-vzYd`#C5y40j$;|u3QZQgGa4Rjc4H$M7&3sb~tiP;S>B`vHn>CfTekhnYR6M#o+te z;|L9~#`fIx^(H$qBeLOhpB`kgw-q4wZ!>b2ebzYg___c;2_2{Jwn;4v#m5Qts| zheC_`BJ~Mg_u=0C+GUjgx(U(K+VYIcI%YEP=EM74Ld9<5pOsJxgGv^^A z?WvN(Tz_%W%@UCy+nOlEi#X=$^bei8*XfJ2Uo4!<@f%2>@ryxN=>6Je@#H0F|8kD} zgV;gXuPSbvJq-Bf%x^=+T)5KbuOkC`e3xzJX5xJ7}_J16Wl-)I9&#lny=|G9p#;#ZjW&Cx62 ztn0#@BCv*2_!!k}K)dmN@hwOlD9JE-hUZ<}AQfO@{tl0i+~P~{HynSZLcK?J5N^LI z9pvyDwiXzS+(0rHNje3!6m8l*`!X%oEOJr3bLLXNScul>87%^>?D3~%i+z$U=6a&# zE@CCTe8_+O1S`?OOhC3;kDx)}0kz2H9t zKGCRPFxT6NTE0hl6GkZ>yPHQg+%Lw+W)i3la7x+ zQ#+1P7WRjkQdzMGZiDu?JLYF?b(g(*Zt=ZTYxR|hLGy@@N{%>u zIgdDawDHL+<~_%sWb06nPr@ZCSPW;;V(2!qiOaE?VlmY1EG56CGKf~gfzzf%xLNKI zck*&Xs~;U#JCtkQR~J}K;Z441MWNRtE?CRH)R8A?$oizy5GcC+NY4KRlHD+qR?V+}VT!AHwobaW5e<7iR8wl?F>rMiPn%Nr z32h^-B4WTs)7zv8b2lY&%Jw|saV#O&!=eRHTSB9#-&k!aezUrV_NHt#fAs`&Ge&hexrb(|S(NeDx1>#Nka!d+vVQf;28yj@YKjk03HcJV0NqKXoU$9>Vq zSVI#=K>uP5YxE~&#reg`ii(ovkF0&xt2?dAjmyaIqt(jzV^eq9l^d7v7dZYeI=`e@ zSQk|kHQ}r@slNb)B2Um4uz(RfzVN}*qN7|>BlQV# z1A+t>8K^GDEiPIq$%1o%EF7X8dYmMS2=camin#qUuQ8$5t!C^?Vkx@DXIYgaOb7j0 zu`g&;?APMAWQAh4;qNN^^<1ggv+(^^{9b~zL%=yqz2(2G9`e_0>6zWTcTR7s{+)k% z?f)9^zqv$0|1eDfo&Z+~QxG{kQo)@h ztB`c)355DdM&S_=6mILIGpIpLI&(7!J-JHgD0g74OpF%Bdiv3Y`pTAIUjxxobrmf_ zrupn+i=~@?1LC+`Vo5lljS*0%!0f)nf3Ya?F_~I=p6Iqmm(XZ&I#&nzZ`y6& zFtkHwMj6qHH_$C)kc?RMiqul7T(MeEuqPP=TVh-fMu*{1I{nl0bdzat=tIN;0BJdW z;;swO!O4i}hc32bi>fyTTP6%?v(nRtc=CzX$J*m}B1iseZT*`&q4vAzs({?6$Ry0d zQtB6=99={Y05C!mgnZf}Mv|98=VHQKU|6F_!NS&dF$gJ7-EE(JaxHBRXU!cZI-v9f zA19!b5-5Q_+K5W!9c z1g+eZ+b3o&hnWMZ$W8iLf%r2E8aUq={#^oWly%Pl*hh+vpTu4OnO%NBh7NKkaz|ZdP$K+>JqGu5IanqU?h%mn$rf zP%fAN!vnONsn^QN7KGHisT7a-?~v~9Yi_fOm!Tj6^Ig70ldZeO3;G)%j~-||S{@78 z=&-wBMqw=*+Q?`Zj|ZcCmPZLP#?4kl%p-U6MMUpl?2(%ZZi$&^&1HKFF8z7|iP2HG z@e3Y%98um2ZLgIdi_2LWYl32N1u3z_XIG$2Fu*wK17IY`<7N5%9U0b_xlYFNOLSzY&7Y z%xX}ihQ8y4E4i=*Pb~c{-Pokq|FK%JTk&@@{)+JTb+ckW7{4R%dlWqb<4nEezpNhe z7jj>(>|QzgSN+Gj4@CbDO_ugfG5{~|0)(*S5cOfP!20l2*ajgA;fSN7vw%Y2Mi)ZR zdig<~Vv@rG;+hS*9OjR&AS{ZmqW{KM(5y!rXhuC^0_>o$EW{ed;FbO*1uZnu&!}D& zmDHHyfhOQXdu`*jWiLLLRp$>W8xAb^_#9OB9e00@~d zbdf818;wV)8xNMGt|F>8%|8mLJKT%a5Udoa$1!n8e8o22U9i(*#cRPbdl=k9l7XNp zv06_|$Y(oI9iUN-+@sN(;jou_B`g{UqF~bE>K3Yy+;Qt)!6(S8LCL(m zH8Y8Tu?`R8fSpo*J97HH6U1qMplT2blEA1J+RFRw&X#}(@v2Vz$TosaHcH)86jWEq z+UBFSQv<0TV@}-!^O`=}uVCju@8vNlnCv7VWfzB_dTj|I0?}zxXq+qtid8BRq1_`s z9#6#`Z8m-@csfzpW*TP<5&_EM|Eyl>y+29sJ!(0GYKh)U6Xg{TERuB{l=AKO4{(ii zV;$|tkJeEY<{~Kc*PcU(WFr4)?b9N| zoM2FZU5j756X4pgcVuvXkGjs~^NYEElr{h=LnWAzP?`M%mz3uQKv^ZGVfTS?mIGzI zWZ@PUqIKdTzyhrUJcPR0i!U)C8HoUsho$o{ujt3x3$OYl)8%OE)Gaw7J2sAJWunad zMUCU8VvyqJBnP8m-9>5?W{+-ak=mjMMyGv9l z-2Lv6@PUO6@OF|2NSD2?%TYh;h?ZN8jM4HA>oi-rz;f>&apnZibfh<#cG1ZF4nLC52VOO8kXXT@iS?M15+{V z8nA_+xm;}tm4u8ZkGLQ(TLmn&{gj1EsE$>X$aRqIgv3HbPEq6bYvx2&QA3HOVtx%z z_KNH7BES;5olgRpE81`?GI~VGQ<8Ed)4i}oFEP|B#uz0+hX?fBDCicwGfME@1zj$c zD+Zp6@cN4gkt#jWB^{`)_>LGv47X3r&PtOCKbQr`V$!uv5lQr^1+jF~k}H$_GC zfi*kD&0}=p9U+YYb=%O%5vypJO5Nvp#^ennH(`PdxOyRIemD*X0R0im%>EF@bD6KDPctoyITy2nB-lbZX3SnRNo z^8nxh);)(e>2z}mi3qa7=n`r`Lx3=4$!eM=Vi@L^^H-xKcX4d)pn$hhXurp{1ULjF znXKVt3?t_6Z1Esz7LxMk<03S+o0uoN3rXDhDx6nkC-U?N3k*ao0V#E#(y%drXPGHs z0f^+a(Z+Cr@Z7F*3Rz8+oo@ATc|tiN4+F!s7^~Qifh5(sdsAys*U}wo4gz8f9S0fo zD0)fTs{TVM{ytQt#Uw`{TR{F=jL3z|ZtNfSrLI@OXo8-#4dE`lb{ltr+VxYX3IW#~ z@fdoK=Fdtte*`s8i&rdvZT|P>_2v)R((+Zv$(!6RG4*!|U{StE9>B#{bvs)|tfF0z z>hpYJ8d}r%O-=yVWb`(sIy613asoGAARAxJQXr3==28|*GIEVk2Irr!bITi5_@SC$ zQwEMQ=tEZ|nY~YZ@*5r4;bSyjBVa5YheFJpjk52-WXEOO2Ek04p0;QPrxBS03`skp zffx9dLPysQj{8At|A|>KK^E~)S$mw<8ILG_oS-4s%&ug=M(b}PX7xcPzf_q^NF z-CIWbWeJEX$JhB&glQ5jQlkZrEDVLLnLJ z3&{pS%ZfvMHj+7jwz>FQrT$T3Xd0PUaOiXdj@l|WQj|itKCpou;#=t8fVgX_EMi4y zj7YyoxrNTzoQG4oZsO>X^Yijms)E+1=)4Z8&Z}f+2zYqqAbnnS;@u;5{gJ9-t3v@k z#GfI<2dK&^PL+)$a(=Lky=h$PTC2LwDu$v%nkH3!6c1e{)pNfu`g^L`Cw81kH9Oi4 z3M9W3qYk|_iVzroh7C!U(;yhVH-eI|fa(E!c?4#RfEXEgw-c)KaoC4|7ha3(ytFF# zVMn@So@@#M&+xYV*W8F<0~oKjf+aICmaB}$LWO#&?L>0Mc6r3{Y*j!%aHkGJmL%H# zy)=!tK%g7R`i>Qy$^&bqJm{OIr~hYhN!DlJKLh*US(q=Z%vjvCc3g#&tJGhOc>*rF z)VNc*aRy%0>){1*uF8%ASsMSSx3RB49~O9U=KPnHkZo#6w%K9q+>012SCDP!kT+zT z+oi_X`Ym3m!eO6FLIQCYQ2?1ZFS5!V>paQ*3zgTZ5T!n?xaw6Kk z`$oWFzPo^gjY-LJr~EFp+#uFef!5)ZrRd}pGpHQ-O*UDp?BAZ9QXuldRrT z>Eo&o5^wyH2iXYHWrJypSPfAKEda^*;}2H72o?^~lB&@J$DMDa{`!kIYuf_KsP^Iy zW>4`66}*M-ycclni2Jk-(H|XWSny(psCvUHqvyFQd7evfy7@vL;y9mp^7rjOkT{Eos1FVa=T8lDj9q(Y@mmJ9f4T!pI1!*=&dyF=Zw;qdQv(NJ8$0#-jl#wA= z?Pyw+BTBJsO;}84HY-mDQUd61^E&uc7Czq|H-8A+Gw(pCSl8Tl62}p{B%%~L*8M-B zi!vmsI}U2pL2z-iLv88o3(29DFv|{q+S9OX`te*KUc(~AFa-DtE2HB9KE^9}ww7SQ z1I3I%Kq%&01?)hpBNMyP5=z;#!cSpW2X3|>pJ7xwuXCj^pNlpyZCT;rvcd%1yW$ zdRlnOKIm!jWTvM@;5*%;r^00ALs9u&=;=gMolZ|ju~P7J)6*v)dr40r>@U&!boH>k z(o-Cw2JivvQ@@9Q7JB;ZZh};I=;@Ct(bFG_Qt4^wpMDrU9d~y3>FIV*vZSZu(T6>( zPj|yaC+X>RUU>IKPiH48-F$MVN{OD%O;mV;tnf#oCti@rR{sdZ8b8T4R_$9_o9)HI zOY+Uv%8j-73Xz2f-Q>a}FV3Gpf(hUh$I(y=Fj6;g>Tsj$hRjn^S^qBNrxI-TV>`q` z3Xw?}y^d6eGAKb+TykPS{O$q9v5EO#n?FEgrQ)y2bx2z)Wgx^vp=(@lXqT6zDN>%D zvM<3SV;weLyFcEiK-wwe-3HSyjkl;aG2Y`((x<9>;~jLVG2Z9y{|_ARi^LI<^J~_} zJE|rz-ZKjKYrOeEW4te8v4o8KbIfn|I zC*_CT>;J)t{y$VL`+xrld+q;M^Ns$W`Jd2#FF1vS|EB;ftw$dnzt{dBpXh(}y+0}Z zrM@zt1nU8*Ddgz!2*})zE}n@l(ptZ{KAt$QCfPp}7ievC_^iiRUdH$^9_`yCPpb7D z#WR2lyk5A6@)*Y;_vi2#n3(QQ3XSfm0>~@+{wrw?a{m>v7`B4TV*eFS58(+pI{-Ya zt+fA&>oL#|+3TlVP@7?c@QGeN%HXWue(g!(MhGZD59|rSR+N^Oh0n433Hz3ASy;&% zF8babxqo3RHWyXl7{YyIl)_f*z{Do(SyV4eC?Qp-?Zq;LA>tH+CT z2n(ri9+sMM4q+u#D{i@2-(O8u^;dkSe~HEL09OTLb?E#nrEIo?;QU>2K44BRbI^?C z`8&Tne`o)vLg(*3Z6}8a9t?UFYoMOeKb*fS!#atAxT?hrvztg=T%$$$DV2MmQe@Dr5{*EAp6Gwdhj#}pltQ6mZxnmlFhZ~=~qJujG z7jvF7@^W7YtPcih>M25%ocb@HTaUbdGrMnYrc)Lc6B<>AePSEIW@IAL+}z1{&_msm3k*W zkXcWTnGfkvTiEIEgNEZ>^n4-~C2$dm^$7^1Ob(pQSL0Y*K)eSd9UaySu(SEO>}-B6 zJDWdANH1PMdO%qb%G=%inN>WAHw;l(G0E2F19mc>Pbc!)tO52gf8ZLu&tW^xqAE8| z<3u~TmIuhS{3@z!(d4|{;#YXWkl+DKZsn^&enh)_g_z)j`;X`~h z{=^|ZdSRFX_kwj8F4K#Ii?|z71-cxmr(B=_hsYR}A0|8?OhzUw9l3C*jX=04CZlWp zP^4pr0QXMaNbVe-D#Yi0joFHYw(!&~yVNEpe9_;&gOG}LDwk|R#qkwXfAmRW9svR~jY8RoMf=n&?0=m4p2j<&e|7uF8(ix0X_F9GrOl zGQE4DgOMp0IdCST9YP7HvaN^q0Y1`>XRO9pJ7YD*LWrvfFCgc+SK?FnQC-D(aMGE^ z2~h}=ho5}`B~tuz&DcWNXU{h&gl6J34Dbu7K17zsKvtF2$*1*a~!%F)F3L z2DQ>rzA0!GOFznSneecLpUOoTm|Y*32Cl0fFcrXGs_sSr58| zL6LNgObQIrt%*jn3K7)CZ@@^fTAkJE6bK_Fp{X0xwEbj*5EA!BP^ycCC zFLr5G(sqBPxV3>YyIA&Z09gm;kpRTE5Av>B8|+_6+4uPiD7PW|#uf%q2mMP*wZOq+ zqBm1Z((NG2gTrN5HUCzZA-!U1dGtSQi%N$NAVTNM?s5S}U7as`XeZ03^YJ6QN}cBB zrDQJ0K)sgd%Lq2|d>OG9nd(kF72=5`Qw$+-zKqK5<$PHyWXnCAFQeMTOGr;YU$zoo zfFb)hU-r;dJl7yMoG+tZcYVIB3YF2)FVB}v*59Ncpe>|wJQiXe2XMZOXB&0MN=P!_ z!}+r9%v~&<&X*C8sk~TS%){}BM{bl-@_p1do+$31PduYn!RO0(a*Xq3gxBDuw+>*q zfz9K5nK65vrrMZHuGKGoIT-M{nOz{dIA2EJk&!D&3MNZW-l5n>1EYc+ihV2oZo%Jp z{LR7Nok+V8e{+!j|L5~%(*O2z=!Hptr#+mv+MNp+%kx%Fn(XLpG-JkjE24sw^HzU_ zUWvt?rU!USN2>BGXkPbl-m0ITm{=0`a^8xtmCjpbEujiYo-oc^5mHb$QqNociPtkH zPTDidfYD@}w~9%5BkjD^0=-Z`ST1LT27ThZ6=9=s-b&V%cHW9Rh9%jl@_8$Qjz?Sw zR|vhA^1PMNNmy6x;$cV=+L9o0^4d)2t*DsvjH2^avk#-<#(Aq3SPtMJZ>Dj=ONIJ` z|1;_8kZvALWdP~Kc`K^ZD^B*xy5xB)`K|a0?w;Xmh4WTKu<)d!^H#kaln7aX&RfxU z^w}XkV3UY(-f9)A)Fdxtp0|4UbSh2ftqf6!&RbD`>0hjYA&93WidglIV;m{xt^URO z(|@V=YomaxRf>Sn_~>)#?_>Uy{yyu;^!F`)PJf@bGX1^gsq}aIv+3_08TDD8PERj< zKK*?|Mt_!Oe_!^8^!Gb5`s2(<&--I~{>F^{Ov)Jl(;4~OGy1bAqd!g0 zq}T7tfdBCHbar)$0sYAjNU1*oB5&&nklYNpv61~lS00;9qF!-zt1;$HkisS5HqN&1Hp`$_c=mHg-3MNHttC7FVsVc`b?s5n$M0-s8m zbJbk7@EZQ1z0n~}ldOrXM=AcHl;0;dF?TThL*=(Ys6*#=(m#~ilH_Xl&VYmht3;MWr+)tf9OIeXlTUXS?~|#R-}KZ9LxDeVeBrxCh_#a4HhZO>Qg~(3! z0%uQJvv8}pq4_KIj{$*wYKs;22lZ>G_>hNaftN1mq>$w2+7>F~70aN#F+GH@m1YUA zcrSpS<03rJ0($Len@&o+-oy;XO;B5SEKco+Q0GqEi_$0=wG_cD0cSTohd2$}*>b5y zFc~o&iXhn|EU?lzQ2!n+5@l{H4joHt;PMliul198*dC&b&`_fBauj ztwqFGCIK(K)(rnqe6rG(y-k!HMAgHHGmx!CU1{&MUt%Xrvn9OzT)LOvIfj>?%O}3N zNY+GwSA62r{_>5z`w)U*gPq=;X+B8nfHJz9XcK(;j`oSi(&|{I*AYPZrLufdW$FGr zkV(&h`md#d*x1*T>87~Duk9dzh~2X%dc`e=fS!PTdBV+|uu_;xHwATo)OV=f6Ar`b z6T8plWue3?T55UgvLt`E`D=BJyLh)2lP(VN@S_mo8iDbqY0|x6T6fWiI!FGUkMJ%< zivLXcp8Pv!PnW>fV6KilSEq@5YlDehZtd?!gBfN3crOkfVkL zMD;cBn-W)%Y_c94PTff^={tLb4`#tFY%6NQ+q2&sg9uf<<@2OdO!nu-QvB*APGG1~ zwpyAsCAxMehH(Np@IY8$rKke!ebI$P{At#3IQ}#}dBtl}(9M0spMDH^w413<;7MJ@ zpZ)_2Xu3BmELGy+LkV!n52+p7!?VQa9H{Q{^uH6_47xJ zKm7+Axg)iUUSKw~408NwYJ*kJjQG?2Bnv7Gh*G#)z`L{ib7$b=NWHx~nP=$nr>VVw zIC3(hr;M$Pjk1jR(|>}c7if$4(=GEUqv80FLL_^DJ$*LXZ|)<o_|t!5R3l9vAwR;B%V1h;@n?A6#rMBRfl)^M zY4a%ALBDw5`Xqp`AdoZxa@j}x=^V6%rjqfeWs6#}#m@1km!8c{!ZH3t*(7t*J;$GZ z5ZnlDB;!xZHjYcS(PjMUA+j07pI(0*k1WAre|kYl$0^7jQG<}pe~9(P4EEakqb~98+~2m?0W=#CKUtmr=R83TAtEH zM2P)Za2j2!)7OvEHR!>G|_A-iN=Mp5B!4?tD2teOdZD=EEX3u~GnecR{+mJ1$2~rFfnn zet^9DygpbAWeVw@y!&8p&<_|u zo*2fRNRxMu)qA4LyPGF5Z-Kn~*4&>?-d%AegD`piVvq9fjXnu%pSYo?e1bwJ<=r!8 z{z&rf=a4qLEAIxF?PSWkA6aDIi~~-$0I0xC$h%RN_Vy+3W_4Msrq@dH?#M)q#j?f( zy6gx0(Yb2!r?CkVX9~VGj@gj@KIzT$_YLXkm<#Cr+N>F*WrN|4d=Y*}@u;Uqeh1&D ztgINDrL5?|@wt^1XUC0)-TV->3}_ZTq7y6;TLYfe4%h70Q4yj5ht5c;sGD_+YjANT z_SvsZiNA9i)iS@|8HPq!K`ojnP7W7pm&+TPrn9kujFw9QfNJN{nWjFw&KiBlQ%X7k6{ z{s~@RWFk)4)qpmEk#ZM|DBR2j)H&yId~^eO#8ywa?5$ zXk*{wuPO}$L(>E?j!l^)qRHCv4%(SU-}nocw9c< ziF{}1U##Iz@&Qj|4xoQH&@3PDv>s1nH3M+QYfIMPO$jt9{UQ4yc>IF?IQIa^Rued(CU8Qf{&IQr>eQ;fQI#%GhW(!!@Q8`fvLM&SxF}yZkW!RT zhl-Mol!%b|1l_^xz*ocoD)CiDHL9ml*o=CNGFiW;&S-1GT%LseY`42Ia5TJI0{!h!yZmCmi4&CJ~wNscun1 zxg6Fhf4$6KsTcTzED+@>f}3%b{M2NDN0Pb}l>($CvtNClU3EWo_RaD^f7%96(D!4+EW4=Jbsg1(i-CD}Xml%z7HVq=Pf)=( z$I6DgN522{xrnn^)#@3h(4pcL4812$UVQEhanm3Igw(nAY_$TMtsvuNUkcPUO91Z@YEJ896xL=BE+D72*-v0vj0|MeNy^25Vtb!90E`MCfEmC zHF6BgptMR*`9%>nQGi0&8nQ=5&VU&3ins#SA32P^i6R?eEQVv;6Q~qc#s_es2jgHX zBVg#1OJO2>BZYu<@LfB7l!XfT&9n%wm5qRk36~|n=x$T$x0BELM7MJqRyi}Iy@c48 zrHg&?Lu9-=GJYQNyx>xQHll*xA^bjXpRb;@Q}-bPdv|*HqshtxEn1j9%)dIHFSFh~!VC4U$vB(dExi)$r$fQVVjh;)3 z(%#?0EQm{>*&6azoqIDrX*apI&`+KFQ~J5p{Uv_9+THx?*RGyHr+8`Ab!n>zKX63zo66Sh)+2rX8E36CwL=QKCzT z-I_PBAUDxn=!>3Rh;|C0C`7AD5f?Gfzhq%6A-hLbJ&mf8a(mJC5womH-IHK7q)>eV z4u+z*#}lM886Ts8cyvtM{5SI(#jCHe7Qd#b<@D7XH*ew(uPEv%_)z@CHGQM!$IY)5 z;{*9#DfYv+fU|3FXdBdz+O=I6bZ-9NqGPQ2-{a8{JPQS=-;e$V+5 zJRTg*F;khoVWx5s{-&?T?|LQhrivBbu1tJurgF(f`Bz=}C6#HPsZ>wsz|%wpkDbb8 z6hW3N&-n&LCR*vyF?8QWko(GW&_MM;)JTy{U1#5SA<93&qP<;=eQ4!ICs;a|=WyB& zA>bBoQq=1JBkirI?S%ZlA>8Fe2#1@sO~3|c{@dCPlE0-sV;K=WC#!H|9Goq_sO&Is zvaE1x>j)I4*&@gTV3@5^<;E?T*XY=I(RT1?^Bd;1#jTjH)d~x-(R1;MKeQ++MdB)c z6Z3U;+#D;$2Rhx3_?zcJQ*J^RT+y>#_{r5)b0AKK)g7s604g<{8iSw<-Kk?qk5 zrAq(G_UJjKO5V##U_HJ;xf{C-S@QHR{jJD>n-(Sx#eYU_FusmOzRC^wTvVv8E7jJ~ zcl*dK__&4Y=|6S@Am^HWO9E;bWN~cH7(lNentK95p33-mF6yJUHUDewFN#EM&c)`% zj(*V#vrb;U$Qxgjg(A7?S6ShIkYd3zFxg$8?T%Vb*zuwIxdQRhBPRQyu3JunXkr%8 zF|Jl3VO>pP>MO;&m|LDseRC&biKlp*NCc^4DxmE!W$IMu5!22z2sE!dv`8W>*g#=u zFxw8O!vU{fd_NkyJ7hmB6#YttQ(P4T?4zvj?G{= z9_AlN$Q6G>Mhs8e!ID3~ieoHA=G`>gXr`)x5Ho;y9ecn<>0SO zTmr)l7UJP@$tH2lG%0Rw?i{MQYjCK<3oh zWtANbxP9Vv_Glrwe*+pS&EKiU?9q|!99$* zDq`uX3d5h{ZMh}U4g2;3AQ;+j@`-!C-pWtFLuuds2-r+vyMC}gN6zk{w`-!R4|9#oFkLa6{mAeRv{4*|}apvl1* z>h82UZqe)Tqx^lcJQ$MEqfUd|j}H z(Uvk;Orkc0(W2BZZktS*-FtHLSq{@Ekf(Q|^1C`$9@Q%+>^M15@fot>9|b#JeO20< zKi?_wBab5K43Z*?s}U1s^%o26TMDED!P*g+xs>ARe1(LljiccdHIWDoT5*sq@F^rf z1jz%Y6=KaQh>oQY;UqV8sGsCCZ#6$l22P&F{8!%Ea+Kx7?VBeIY;xBuDsvwy?mS(h zk&cOlBKm~{ZdF!Q7Nqs#$XYZMM~ilCjW3?)KC!U|l`V#?sOICEnvZg@v~B!Cd*!W; z?Hi7=oYs2-xQL^4k>fP#5Ot6btKK+^1U)Hc3`0r*!nzb9Y|q*+K%>47Df<`dv3o!kdiWlC+7Gnrc2=UcJ@_A_$=m3BJN>=puj%j0 zGSZj+Ej`_u{_geD^-xURIl0Kq*+dW7oI~pf_+twb&8_S}b2lfOTTbr_sV(payGPuPcT59g zJZvmoU_r`yt2fmf0v4ZvtdGwdO+$o3x^f6}9)zVY@{36ho_pwj^KG~j#$$LOA__2l zK(nXH9EPoojdNYJ-PNZ?Dw1gAc$A^`Dp@>c?=`55wthG_9_oOA{Ce`IaFAG(XC(gzxfgSRo=F$o=<8b!tbL$K~FDYhBrJ3a&PM#og>d4c*t|w}5G`9{WWZ?Z+oQN9+*Gg28 zt6xSNyJ9+9_)nrOWp#mvx+i8P0l#iwLIIB-^z}K)GG<)yNs`ho;%7-|9=6HzMvaqw zx{2gUkpW=E4mTY?cS|${Yk3D-oq*U^ilTPa$LLX1{iqrMZxx|K#lbu_`&$4sRu%Vqh2fsczoKxo>Lq|E|bijpa(@AuVI=H2=GlvKNDeu1kb>Q zFLlr2BgNFX9FW?QgRc%2ckUs2|B%JQ%X9*|mB*`uf z5Y-@!K%@&pCz3F9GB#}iPE3X8xf-;-c(VJn#p`Q6A#rG9TPa$@DHHcw-{HZ%eIwz} zQH~+K|Gp@92>EtEAi@Ee^GLo)vWFiVvXVb6g!Y+`Y+OlvzX_c-@SS)s;W=Rz^I#p{ z7j8)c=z4yZ0IDiX2hcR60l|p}1HoMq!4ZoD(Vqdzbi{V2A$A@R8$9?{M(VUK0I4gy zqGw7Ec78~`kv$M6ruX1|r0G~(;;Z6VBZVIENA9OP1;+cmi0y^(G!_Dc;y7rhhW#9~ zOrS0!)>1}#TN$y_G7zv`U-Hx^U_##BlB3kqZAI`47w0iil2PX@G4h{Vp6HofdS)-g7o6w2>1^2c%G|>c$V8lrr3-aq*N#fbNGW=$FRZc&;ym;zQa0F% zVtG{#Ph{L+o49N@gs-bybl7Xs5XuUFtm^0Vn>DhdqoBBzTO;Ew9xSh;cVf$_#qO;# z`Nbs{V)McEJ}lvV-T1H9?+-*qnS4TG|j}05FxNG+1SgobAFua($i&k+E*^SO>LgFa9>{h>q%@PQxoVI8vI{ z)^Z^&;R@w}V91ACOR z@A1V6)E6JX;y|gG9I?@O#`ksfJPQ3pF+9R>LY^DFQTyZkYE6UKj%=#AkTxevV3Hy@ z1J^#%zwU)B{%evNgYTs4JB!{;e{au7x4)O3KJV}8?{{RRXVz!Rs6P)VpCVK@ZrGIm zK529MduD&PWTZ1cx*gI}3O|CPJ&br#De61!9X6yyhoP&Z6 zrMrjQ6QtM5yrHnAE86i&+PUIeNjuv>JEINSDL7NoPMa0AN!kH3khD{R0zl@`9cDhN zV9?Gn^0Q7mqhZXXqC`3)@NAIIWzfWju%WXIgyXqQ1jcatisQ_xc58Dvw3XX0`5S+$kqLsj!DomnoCBm_cfG)qwajMO0G ziQEn`FggFpcp`3^`(d;m6~cq@&}q`dZsc3uI_w24be{hk8mf(?(OY3Q^91T?dDt|gK~d=xcD&c_0P zqrcmLDC_Kg+P0Vp4{NP2uKSk(?osLU_?{H?mS_+%|Y0_N7b#v6GF|HtY;-K@Q!P zf%*DHR$_DLz(>tzuP2$7e#;cfJXq(d_u z_Vj=o7@Gs{&;6jAM?Di#=-$uw_C1!+2WPVQe6Ix!)0zaPP_oZV} z>uCC$tb^2@RyKbeP!N4-zdj9GHjTtV40RvpQr&e}Z>$`u|2MG<@ov2ZhH6|qBAL6f1ykpIr4Kz|!ppS8F- z)DOM3!}+uLw4_T`N=`|WjgNkmR)6c88@48bnIKDR7|Klw`L>S4K1Axf3L{DCdta#K zsqeF3)=Pa~38g6YeNaaEfk55V^ek9bQ{D-y;lPM9@EZxm3&kS*!a5Y4XQBDRrOsa* zCCMrv4ja!rUgt<%TXXgOFH)Xy-?u4rF&qEv%nYkcRXqaYta7de`az}7Qr z0Q7Lr=&a}3a3-Uao`$#eE!zISA$0y##_L{aC3u5sHN_#W`4hQT^r6EOS{gbfR;q@t=4n;wOs#MAPk8 z1>Kq_dW7;-LFdWW$KekN;;P?XeF!GkD$F1nEC7*0X$-^+Pvx)@;)^#p0fBljZN^>S zRF>=xrEoUWI{eL_o5gC*XN?Tkk+l<@rjS6|qr~5e57?$@P4avgRT(SXWEs^>rRN!@ zQnyD`qCs>$H#*BAN^x|PEv5+@={BtF=rOEAUGH1Fv%)XHMtZbI^h&9xW3W*VSxBEk z9Vq_;xjK&sChuxm$z;5W#NA}%UxoY0F2E(bU;;AU{UGUQ(x#)+3yUc@5&IeMZdkNQ z@_w?G*<*eAEk$2ZzjBA@o=`L%zgYPi&y161=8?lO2uy_AZ;nCIIvsAxz?}kf8z{xR z3zs~)=Dt2{irjqcUhgEn40vy^^1(D?Cz0Y;EPPYqcDj7fAH4*|t4+xe7WvqY23#Q` zJO`JfJ)sV^^nVZ3!I|k3x~#bI)kMXFMQ>x9MOOMNS!rTUy3a#XC#A9D)3o)jaaP8= z=i~JB%^C0Fll1iI>F<~=G)B-@EvoTrLVP)px<=keJ*O5mO=;ot>`o|j8dRO=Jyr{u z>#rY!=fBLrbF4nMr#v8}Z3DcX9RO%>54JrV{Yw)vU{9F7VNdwNsolAgr_qJnVkP9u zIlrvPIY%Y)EA2H2<%ZQ^`(&S7*2Pw z{J>_@-=hiS3J*cOrJiU#^)uiRukqq*;}L_oT?n}qLu#eF4*ZEskIGE&%`6Q~DBcz7 zL$cIi$FqbeGnqetS#LBpG~_D}zsinKCVwV?dAB|65f`HpnTo6fY43x>Xy-VZ(g&}3y`*99K&Qt!03jh44PTxG|;>aa?W_yqcu z-ad+ydcg3Y0w!b3Egn&BrydN0F_M-bT;~9xAs2GS8f>kBH?;)N^j)l{k-Tg~ z3`ybxTM}>AGpBNppZB?O4B^uyP%xADRE9B*V;OKdVgK|1sN%IotOUF{ryss|S0Rqn~lLnG3fMQxVoZDPhICQaAJ z>R*3eB-=}CjUDOdF#r{daIA%D!(6HCAOcNSfg|)fiS6ydUnwh2uF9(7(3jkIe$1;VBt zFRgi9SGAt2*GiJ+*hG!Hc(?P1YAzD98m%HtUTIvK@xH7zJ>8l9&h++Bvq5iD*wVNc zdILMz)BV=7jGc7cZ+#v-r%^TC$6JBQQ3|G2y5Ab!wuc1&{68soT#K<-pxX`(zEGd~ z@pQ;rD7ClSdGEyT`1zIMV=TmaQ|~pQ5QSv}hB*)f8;#|1V|?Sa_=uO|l-qf^O_@f5 z5|o|;A>qA}xUOIB>;7vn6RBT1FdDx98bjf(6N4yZxg_oWYZz=WXuAIzawmxVC%gZe z+P4Kn150}rEhzQNwX^-+{Iy-&e;p7L5KoKeqeF~)ktY$pdsg%7o=QLTvK(<1oIY{= z@>$12teX!;@ILsv`CGmgdv!OB=qV7F`pI%=i+iE}wEM9KfD6g{N1s@w!x-SrxF0(g z4*M7c?#CX_P8R#Re{?knT~<1&bEQQ6uV8msR`@;pCnUXz4ouH9K%kEwN^K%O*QwMO z+_(4oUkIf$?%N~MgS2AYxA$u(c3_6=O`d+=-aT(|hjHKDIPS0^)a>VJfW|w%NasJU zw)FSLFVo)(Gu|If&krlA(-i6(D|0((D6M^A&ZQUP9<4pWgbl#xzf3~_e3!9_>ARQ+ zO_>DtjDq?r+Ov~_ln4?W>LutNXdrEixE@;!^pH~2Xs=UjS=5m$*0L!vHNGsZRb;C> z@&%9zwiaN8`52Sw7k2t^zEum@{Equ1Zc%Hu7)in++;D{_*gm2R#OUVSw zdS#bRzA62a{!rI|yCx*36o072sK(&pd-8|61|5KZEj27I<7erO^b6=|00#W&WEj`; zsiT?xP#Eb@2utbSP_C}Lp>FHa8)~#y?07EOej7i__WuqYEw%kOkVdGDwV;H3`k?wf zc{=4uuDl?R)X7VM(}6xVuKy|>pGyc%Iapn2rpxG7Njg7QdnR2Jqtvg#vs!I8;r5mC zQs|QQ+TnLVmkL?Q28^qGTdD~8#(`pO!9Oh?3g7D4*owxLAQT}dPb;-Uj2Vtpc)6Sb zT~bddl?h~?Bn{;cU`gZ?o2%~L9dfI?vqHVq*W(;}Y?D)sjpX*~lainoGeLGiK|u0LAia)lktC4rW#udZ z(&3al6{O43a?g^ve`JsX+pOqOHk|2$grY%0M|^aOqgmq5+y-IWqc{$Xm*77Jtk?of ziW8o{l`;>pz0X4_orcFML}>mH&%=|T-Y(JHzcrDNf#xq0!!hO|kLKYpl2&WsLCgxkt&|#-x<|Xp_SH*%s`98L7%n63ccLmpf0#tH4O>bGO2TQ)Q|QW}#H^ z%Z)^0RoSqRlg+~^p4(Gd;(c;HSF(twuO}-2A!9xH9iI2f??44(O4W`Y%0fEQ4}u$$ z%Ka{eU0t8SbndqWdoOxI2KPG`M=uPj3m+#`m~MhE5Q`frNvZ9$)LDBT^`y+2k8-EZ z+F#Og%L9lBQu;Aw4G<>&*0VDOjbiI@=9Eczvkr@uf@ug#?ik{4bZ?#kcRDzs!+m@y zViVeHN2IUga86x9o99W0OFp;m&k4Y$L;T7w5(ya)e+O%60^&nOf6#W&L8L-u;mJI7Fqis>x9{#$xu?3Z>hUopZ&{}rRbf;ThxS6 zQX@P{#TX^^yVEG;_-JgToj`jy!0}P1F+M&js1LDQod!K8RI@6R_#Q@b>UC?&rUev)v5t-exlb^4hk zelTx;gw)k*g{2?gn#@U|{_|3(+^hkfKoGsf&PVV7@{N)(_-B9~q8h2s~Wi%aQ z#Gxs;Hn?&A!cqUOvSa`j8+5v0v9lCy7Sz3at;H5^>y4_M%8Hi77OS#iJwzsIux=av zTeItou(`a=0bdlm)~v2S_ze20)NjIn)!jXmn_tI6?aqJEM`nrYO9$8Pq&%U6)$dA` z=#zLvgZ4$a_OsjgSROuykDlQ1VeSfW;DToiQBRwcMK>aEar=Vm{B`CI4y5X!PSVlo zLgl7%(09?h=%|aT1E`MJzSM`z)u64`-T=5NKr0q_bDxEx(uy%9 z19Z;=CZ@KBi{5Q}46Y!XDIZWFGZ(gdk>buMn?!~GCr{`RSvxI?Jqsb75Fy8|^e@Hc z*+>_DUHC1;Zy|n5@mq>t4}Lw3G~iCSNdpL8jHIA-*HGF)w~6nuJP~pw#ul7vq*qNB zhw_$sN-FpV`l6*&ok5>x$azZE$MmTYQL$+if8Z zVpkVfJkTMK*I4oeEF!~@o`+;a?h)At_oZ!?91MEAdE531 zhDvtt@=-Y4;9i$)YO~>i;}hdpgB!gm7W2=TxwIDHMxp%_dnTZo7r{s9ECe{DIbboj z=U-(pZ>FlK2!Kr0p(-wX!&+H%Zhv$ucj~k$5_|*<*xmd2CQ#SJS?D$mp0Y$voEDMB zb&N1|4t~t%#hA}J+^b}Zw}4ThUF%}Y|Ht0D07g|@|KoWqu)xYLy1*(?R#`NaD8WPt zCTM_=1dXr|vO#&aqTWWVsq8{j8lamf%Qb4P);?^tYHMw4tF2$9+A1+9;1jW}D6REX zow!wLwSX`7|M{G`_wH^8FSU>F@Bc+_?%sLNnKS2{Ip@qwZbofl230rS5Bdshsc*n2 z;vS+%Bl+Tv%DH(DlRC!wJWTos02d=w5#8+8xZ5_hc)j;+T3Ipv8-uoVhLtVj|+Poe)kdK~rYijcm z(eE)}3W&B-Sh4p$ln7@j?|oYaKHIjXWuf=JS?Jv31Ca-fpV9eR-+^;O1^NZEbKik4 z0uch{6Y)n}o!!3GXXThrte%$#2IKGScE`K&SD%#|e>5K*@dGyk<$v^EH4cab^9VdD zfj;RAyE1s~=Q+-HSr{J|XH#ev+}9KCv$PGc zpvHS&O$wuR$rSH>-p-fZ13SIWi}0xB{yu<=!&^ zy}%`{dGUAhSG(hnx;nzS@eTQC`88nyviay^c{!LwNaml9jr-=KpWBSWs=#-N&u45T z=^7zEKUwr!+Y=h^g*{3b!1+JYron)!hMA78M4tAyW24pgFvE;y6w-9G(Z;g!p@3*G zegw!vIrw|gsl&sJ=l4V!8%k2@{v9Nf^e?(vArahl&Ze~vKEdt>Zbt#;5|{b(`PZ(= zJv9&V@H)uD6LU|UWXZ#isT6qd!eLc%w;5=R$ci4S-mi=`ysHf9@BTib}cK&Sl; z>T-C%{^nRT$9&KH1nBzSkK&i(EaWEa;i?Rwk}n!Rvr7Zd{tyTZbF(LL)}r=Ju~O{X zRdJ`}Y{Y8Ybro)|@?ssZx)iqs#B&caxR!#Ai#W}IT>eXM{aJd56k{9WI$6>t5 z?)QfFYf%dSnQ}}!I*-j-SHZ3?vp6;oXA`$yk7&}V{M4_R+N@m6X1WrR7gKGlTH;jq zEvJ=RvC;=TctI;#`4id6W5XkDfLCQs)>bF$_a$r7#mLue=lj z`qM4uGViL;YC`DV&`P{y!2y2m!FsI_-#K^}S?^-&U246{tTz?8Ojl{WtE_je^{%tt zVe381dTVjFDkSSsooFS6c-^l6$E1$DUn;TI=h3|ih| zjPfYeaSxE{<4-Wza-5<12X;VWl-rQK`v``BMJ%_vn6W1_^OO)rb&9$N zoI1X~fV{iEuGbouMUp@7hmNYUROhck{?c^*hwo&5o&2QmZTSW=Y%@wR!}zlMAm;li01%?nXxcMAiYVwOuWQ50k4?!7gyiK&6Dx%w(Q zzwvG4?T(VOeBkq56-9Vz8Ta=3u^cn*mV(>p$hN`LXspAhRYQiIqcE&4f+f(3n5_X} zpopq8APlLxkX0XMSItU{KS>S0xfw?-Wfq^I`Gt*SP`db8y7)!NjCv>i-l=!7j#!>u z?`c0FXbZc^JM4aqGj>U(cfrLHVdy8CZn(iQIdiIXIkQj>?B)riu{t(aM=b8Bk-;mK z=E5uujh2;SIa9RBR7dVv>E1U9ZkDn4LjY++dcsBlD#S1FmIr^}6p=A-nBM0;=S0-$ z+UFui27WHM!@zao5GJRBW2M_UAV7b34TEpV%D);@6JWB!lWJPKxQ6@mdynPN#?? z1(?}w*kB~G2pZi&N$yE?IrRE$_xabp-{SM#gy+)Be7?)^bX@B5U4v&W!rXZO3C~M- z8u6Tq=QKP!@w~MhdGH>5xzG0xJdYsnz4)F4+M1J_m+$J+*YEG=mw)d50|t8hhYa%i z2Kx`yLHv8zr(l8qm*u|*0-|4oALP)8x*7ZBo2Co)MN~-mnr{zxApQ}+nt0GoGX3y>r0GrirO6U@HxwJU-A zIniUn>N-?}Z5PAA#s^vS!d%5z5f$dken;ls^IubqbjbKN600kO!)2{!E&U>8Y7pG$ zVO-Qgp6(k_8wOC61q7fQin&Ts$-%gpLfSD3dk)cbY@Jk}h(kY?7p(<2#0HrII1u(( zM*B)OfsozYxxnniH4WU5xo6{g39ti>r335rwEnVQrAFwxXfm->DH7ncyWtYNm)P>@|iFMT|iAZ=fL^EUV= zP{&$p_9G~~ZTVc+!RMe6l4y`!$2(-bKa<1^&1#)G_OAlF^2fYwv}2g#FhfSgA8KO- z(SnG|`wsE39_o>>DW{XeY)PRtnOCyT5=Os0l;{I{Tgxg&ZJ_RrJo$hSFdq1kx|kHNHYVbv=s+z*2Xp`P_GLqsOV}FD3F#1pDbnu=qW>J*@NdcwqsDk>IO_TOSs7}(udNL&9yRt z0z0=3U$=AXXYy}z=xH$C(vlNBg5-3=L|JiYs%loY5Eb_ztkxK0(N~Snpsy!=i})M| z%4X14#_pHC8k=u|wy^nb{JHk~SebzW@{w(z1u8BCH`AYW-|3rxuUJTAkV?C~XT)3m zIk76JiaM%msV$n?zG=nD#&vxyc`3EDLN$XrrQ{`fjX=t5|TQ+em$XiG8Ubn4h*%ZLvMV_s_&?H z%krFPAYwKz53AcH|33k{aO#gB+02=!@7XVkAp6ZJ2W{QtxJS=6c5`oW*$mjbjN z(Xz!m3EaVZxBs!daxX)F;rfT*L?ij}N}^Zxul0K^xVTNH|MN~O{XKh0&+~?JqBPmN z)SwT93JY};tP;$kx1o4Xt96HiF=k;)7HH%{GWYImy{fnDtRnMC=T|d&OV9Zz*I2Zj z1H!}6@HJ8!awN$RP!BD{B^R+VY7IE1;U*8b5rT%6@!!R=2?X|fqDWu$Fq|YU0^3EA z37Hz4OgA~19?+Srg~6JPOhTp(x52~hUIjDMgHSufdG1G-*)kV?CQHq*EB;~b@~>bd z3+gGd1WUFdz+3fP{$?(;W-=^fiD=KGL31z>zJ`8!w5R0KG3p_#Lv>&7cA7O(H;ZBm z`tqKvokVHZwIDHQewSL~l00^DVG2hT-dw=bG3wW7l5sDG^;gh*=wS`$URcAbWSs_3 zVE;DR35K=R$#lPy={0QZLD#Ke{dGnr5qR2ZRmM){tve_Ca&mk*(c>Tu1f3E{><|2CiGuG%hAu{nA)qaL-FjJeZTG4=G89m#PY|N zzmLWw8uT`Xd0lF}(~A#LdD5#2oq&JZtx+A=Yy=1`LZ24GtxZoaf<=9JlMRHooYV_+ z>Wh&2B%K;nau9nnDkl@E}^#FYn{%g`1c4dr{{O3;c z>veK#CN0WH{<%({NWwh9q-}{0LjvFN18j_dRTAV!AiUbM^H<8P5vYb_V-%+ zOC3nVm1J&K%>dl4q4G*kHLI(wiO z$XzE#!C`5vn&9Lc>*Tu?`RZ-@vBb_c2c8)?bK`QXnc97zUZ4YVW^_b-9XfegphO3C zOzHQX_^bW$AL-ncpUg8KH3#jSsHw~sA$1pE{=>=^ihUtmKT|y-Mk5}@>sR+-8Kj%v zfM#@$B%K+=9OlG=hWeQ{Rl0Q0ocX%j@Hs?l68%KJ&`pC2&0#Q1>iGHXZ!dteCem1B zD|$H1%!RyDp)jJ}bqg=E`Xq#>$?m@~zq)b2$dZv%;Eg(fJN>el{$lJ;^Me{in?KWV( zMv2MjYH}DzwwGhB);JNTIxu(_M?3%qmdx<5C`|)^tk|j5Y$wODPLAK{92QyY&^a_# z{o6^=f26|h@BJ-HJ`u+=5}22P0wSlR2@E6+KNfaIkObxrj*xXJbOdPvGxfI?=FMMV zizk1%!Orxelc`E)iUXCv9sL=Zw0N==5mcg4G#P1DidX`C3D`8iyZTf#(3<(Esvaj% z#W8~qH*)R4HOeSDyrB(h$v!~wXtgc9RC}V6L2`=KWT$PkH0de&6YQKvhb-Bp<-zn+ z>e9fluE#+KpBTNdylaVXMtogy{$n5qKYBx^i8-jFx>$r^k}kW=(cdLT02{j^$}Q4> zu=_fj-A~>RyN|BSV)bjVDAObHHvlz>!`QqFx>VE&<+Yi*J1_K=?pU1u&IhDB5JQlB zij({qC;3lxa%)Olrjs-Ee*{1GS7|2yK2bJ%kbmbARrq8qw_Y7cikGPiVA)pUJ^A;q zdrhwScW=eVdrvPbI4`CF@2$i}mfz>)JO%D*ekf zz>T}%-e8nFSWt!Yqk*xvTJ#^TXIOr~8HfJ9Wb@K5SEo1)twTe*XF{B# zTW9;0*s1Ny7ROFD`*8-zeLiTN-842L>RDhPmI?nPG}CU>oGx&s*5SrEcF&E?0E7x- ziG`wrknVVu3b)kZ^5M72-)TKws_3XG&VMAV!Y?~QVD2*5n5|+h2!Q+ibLR^pbdG#_ zbXWPtR`@?%ZNqx8U8CBH8!!QDOXU2?z19>$adWyTlZC9>Uj2*IR+Rr}$Hm1wPPo+U z$9Q$ z++u8c7+jC*ZsCny49^Nw3pgYe=wo1{S)Xq5{s(e#Ho0NVIS_qvuwCnu&;FIxCqEAh zNTxnH2l4Us`_?B*ec5X2O>Mf^JgeB1J&L^(@p~;+pU?38YU@0YK*_d7_TIG1JAOLk z)Oq+3NnBi}P8K5OO4L-KL5DS}??P0?Dg?5>RUlB+XIA6F;Y3X(^`W@Gk&Lhtw%FSE zu0y<6zK_Pj6|DG&K3}{wj0Ns%oR+yYiRy4S<O9E#j@Hckg z>~5|OPr^J953WSJ3S z!|{E^N>q~^Y}p-SZU(Up=0sP#6V%_^{ywHCHf{yY-E@Jar7-?cKGc-*11x~Zus_4e zvI;fs>l!1Q;g(3l$vc~}5q%iqfsyJlDD5>;oNHTE)aZ`|DLPRT76u=o1VIXW5CvXs zEuhR?f#!MJFCvi!eNR+Zfq%hH{m2d(_lPRQ(YZhXV8clfbrmFC6>;iY?9}(*M^fJ_ zx;|6tD=10LhMFwR@!i2Au^TW&E(%MD@xQ7~@@V2XDGa3&2xhhH?~ZN8Dv0I2?9wK>_4`aK?HE8vRx4*_W>I zjjrh7CT#7|!#F9w;znok%X4G>yU)c>uu^Q5jQLU}YO^fWTxgHq+>E_rpetK}u#hj> zH}k#2+rAO+_){sC6Gn66m;3Xui4uWkKTMuewD-m!5o|DTylv-ka`iKALOZ1G^c`Qe zNIeZU06M&(W)UJJuea?`mIqe~bNWI+!0&Clf>GBH_Go$!2a_uq%zx(n>?8Q+R3R&q z&8PNmj(z28nyMTDV*shjw_(mnPo9YCL_Da9Xy0G0MHYs%t!yoG7Bse0Nn{DYUK2{M9sqFp#sGL@fJdLo(sJj zp%tZ%vZvTffOCppzvEb65>)DnH(8&nhxyug;HSs>!cBSDS^P`%j=NO~I9PxF1mkcJ zpt^6l2GzTFYEWIYJ{wfuLOei~xS7yr8{tz;wk>#SkgaJ{{Q>$84$YzLo{lz@ONMBy zUcL8$yMtWt41=O!dfu6J5mBZE3o4{709P|fzRun)4@S!1>HQRqc7hxDDxGu!#F zU`=8~Y)ooNmANFWjzROpr0q@!Mxix+^;M@e&#~DhMB$o+chYF(ZR1S0T{;T!I|t)t z_Jevf%Z~%!rHsV8%z9T??@H@kWxZ>ycb)b2^NqRGmvbRn3CoS2=9^iTXUBt(U@Xs$ z44>1|v|G-7f`_6DRoF@iJ-Lqva2i@Ko;~$w(_*WxX6qfb-YwR9xxCv#EBVI14chD7 z`ng)dB=oBEPkTZlEpdYX@blaH7k`ol@E?BOB0uCOX)6Dz5B|=P;u6wp^>2|`>jNc# zlOB${Ycc5F-VqHM_1-CeS5N5F=F?XCj%j}HU^s~R64gFHYf<^e=yaJ(A@NE%3MDME z=UipW49kg$ZYdb@QK}VeRio~1v_+%tYwro_{uu$?*MF$R1(2%fqIk=!9H7Y=PM&^% zZMTOr3ZBjRl%h=tHETgY?NylvEzI)wf!@FXnR zfnoK)mryqmWNw2)@X^HmQiWZB3L7}qYTz#c^UMZr6{vCVvCkpQMb91tu^-zZ$ZGo^ zg4nmSN)Y=aambZZ=GM)<5c|Zkg!CI=)^=n zb+wb5P9hrL-$To-#Z>q0JK?2fG3Uwd_yr4d6E(BNQLi$30xg!j+hp9!1Ois(D~`|z zq{cbLp3g>oKqSMI(8GQX%7kJJ)|}|k@m=m{L421lI?Uh}25Ep%NWDf2mU&nn?xwZtqrF+1AFjXhyfd*r?ZU$r3v!cb$tWMUg|0!qd8#_{|M%6A^$3G)kf8vXs z-KZ{+pmTL;@m+nqS3ZiQSh1De<%2L1MrPh_76qWU1L<&C%(9EPcN`b2`EcHM{xgCi z{DR^k7*_vyS^}t8!ge~h04Nxx!%Gl~58Sa)8L+fZ-nKcY$@GfiWkZdJHEpOd_%f%u zrY5E@?yf)r^-u6K-L>Tcq_s_=YEmctRZm|J zIK}bmEB8XhR81Aru(XOPqW<_*Av5%X-%u?|CLHAE=Z)k8N4*#KA$F`A)NQ;#i_ z0HIG=?dd+n$g=Nt4?8#O8^Vn{XYKkyqj5G6+UIF(%6)h(z9QbLUF!9x&^+##rv&gY z2w1!vGBlOd4R8*RsKcRQvA5_KE3$3lD&#dzg-*^`cgSd;ng`a^U~EASD05Ey0UHU= zH7awu$P|C^68&0ssg=*mctTTHtnP7&sdS1Nieeh=4b5+UKeHHNX1L*Z09r?G7V|Z# zu~M9+`s+e%mcrahyEVoFa7fkXu#;Czjc)Y-bgqOGMm1Gz+zlXri+I#ewecCjef7}n z;dqNBq&p%4)1;pl)3Xs4gN@gAO?Qbz}R24b`oJ3-kxX;jK-% zG#~iYdHrp091>B-{E>|VIOgl)%JzakJuz2&S|E3yGX(vI_+)wWt~u}BR2KHic{)7)05-W$YI83~ zSEun;-<(6wo1_TMBThnv3=Msnj3%I2yAt>v-q#Y-s1{ zt1#PEQLrDpnh=w5Fy=f)YH@sh2s%KTK!F*0p?0f$rd*zC+FYPf)_Xm}9yj&NiF8GR+T|{D4 zi$-$iGp9Mv^9=$3^t!CIAMxR+V-Lr;(L+#1`r(1-ut|-&Npg;B;Q_Qt*Z<~42Ux$Z z8!eIge~Ag&qyFbL<2}gwFF^gAX~nQo+=!JY%IA;)3PhATKp|v7p^o3We*6vNEE(u<~$SvvsaaJL?KLWAk^Bf&m zvI#o|uh&~X_tGXf5x6=gr6%l7t;kt+6i~vAwdAS~sH9ouUG*ybQE|w{y3SYK10U&i z*N-**QLRUXAS#lB+3fgANMb!DN+fh?FEdRy!s;D?B}PIn=yl=vIibjI>uA&-?Uwwd z*Ap0pf?>3uxVmGvWJ#szOzcq)`RFz%iEZpTL46%lsi%DO=3g@8qqX0(v4>Zf`uS)X zX(C{xxdddS-6Fspyo{vn=Qn;CoQp&4x8NC3&z~>zy3pJjf$2P`zWoTBfh*ieiM?&d zVO>wDnr>mVWadQR|9m(40{RM2`fLNBD!5F-v^AVFu>qEjZ|jLGs$rhWWaQbnU9UF7 zj&9lLy=~O+);A&xU50gMtBe75;zrf62xigKLHUge&g6l1jJh3?9@I(J{E1%2+?X%8 zoKx(QkU&1#id!Jm%J>QzL5LZ{eK7!=Iq4 z8e%@(F(cPI0!D~6xf5|z*$1N^Pv(t&8pgnu8Mq(pnoeZY^fh{c+34z+Mv_1ZakkJ3 z6u)fxsy8%oc%<_U_rUGZ(=pThAg3CG!>E1;22_)Sk&p|Z&*eV3Wj?T=f850wq>lDS zE}ngHHhi8Ss`etFALIyR(xdCKR7C@_2(!>rvzjeE1ei8;7L&LV)$nHQwIW3Z95xC z$SFJnZw_HqduqjC^&yC-aXVxwgBMgLXJRVU!g^B&HO3H(%P94NlYnzSITnGJ;ab9r zXX>${6HybU)o7XzxRQ*OsvkR9%8*5`s0U)Xk)D{_u4ex^SztGguP^MvNL7@iI97hH zCMi0E)I~R2h69FJg}Mt#H87i;jvva^f$=&ad`PYwsP5ktk?!1^jQ~ zJ9AfU@Sqwj3!xc7j-XoqGv>f_RD+!6ecfr^k{8f{SwtVtZ;EShVD=WX(>vvn_HE&a zcghnp06Dd78VkS$!*0;pMkqv%LqsM$0%Ep-Y)!lycD&``w z(?i}X-v4h2w5T97Ah>?J>C{FQyB~B8w2RcxXYTBnmb<2JwUD^KgT(E`lnTMu;crg~ zC_#aiMsQW^4}Pn$hf2fqa6Dg{;5DYjp*ox5ty zL81(?g$RISi5?M&g-2j(a@RY_*(c~xC-^%~l!qK(lcHkv)A?4#atz94mrLh*Exq^r zO3x;kyXoK~RDK!butY*1M2zH5N;o227U^e!}*+v2^&Tven--*Vs;3!{>#5u=cCc z@%Se`M9k9>wTu{}BcM&eAxb<17NmI*9Ao|@ZcTp43hIxV|aHDD!Vu<1M zwlyP6_#?9U&CZE*Nx`u4cmo=k%W&;gjZ8jCJqf9;!{Rv5jcRl{P7Zv8e*kj(n{ZUL z@}}bkARkJDIY}3pNJwwkfOi3ahY+1J{$BAvS~^$nKa~Y#s8MZ6m$DwIGTQY^ncmVa zn!_^7|3bQax)D~F>#{HTDF~0RWF6?&kr=-~`6JQ6mGG$0>(FDD)A4Rk(SE%Z$pJh zfb%0P)CwRW_&HL&A>;wR+$~37T>#0*R2Z~?!2-i-2vjo|u!w4SPzEr7P!JRIQR*Sl zpjqh#eI5g%;nz5KFYqIK_-!b}HaxKp_}v`Og5R7p{C0itC@P8IXJe%PN87zz4D*NrMC@ z!hm$sJ`YIhGA#bk_g11iyi3$eV=>cX^O_T2<%8(nC60m8_$g4SC!Zul17g?Et^UTnRonAOs+erI`v#V?KKc-vMY1_)qXET#|i zY=F>bc|>I&#AF|Kd1#}BZ>=TBiz5MjP^O)pK#~ z4=xsi7wYKD0PeKLs6=0qyigd7!i|~_F)w7D73=jqf0Yirdcym&e(Up_wAoqS?(p?P#WE}ScbeK|y z^-t%gJ2uI}KW7H%{@#c&BxdiUzr54Fm;P?w0*B9o?r#+OrhOg|^*dP?2R?g$b^q>< z$V#ggL&d2hLkfcFsOycnzR}W+gPJsZ4C8gc)84uTpwCL(O&7&fv3j-sU0C2Tj5l}U zewg*M4-SM{9MNCRV=&qJ65LuL^qnZm6 z8CMc}KtP|1hd@D2!|r++DF;Hc=s3Q!C=0&pm`+^?(R-g{{7fxXNl!lmfzkb|0YdzH z`)97+Pya5|vd-tzzYBm9d+i^GbRXkqlbVAYzn@*XpZ=NC$sr0pYySjaAulCrwajA6 zPv)dWi8In-iZfv)e$qm7<3MKWDP3^^Dbm#_oE6q9q0{&>49JI?t85+<$tGzwllgo| z+RiVbGT0(}oB7TW-tSNvh7vr`z9q`-yg2+Yj1}sZ`Q97W#c|}J1Av44q3OZGk&qdr z3|alqXbSxz%mff|vx`R6E^}ffR4xNjW7SJoCqT5yNTTDRkd*lC|FcItIG$Nq<>XjP z6^FV5$dcBd_;_hV0WCBkn5r7FYQ_cZf5BReW*ApIzB6`2 z6Bo;VEG76~y;^Gvg0Z1kYC%w=&cla=!YfT|mA?z0LGv+d8U3Uc_^IHRhJc1=`cfVJ zod%-*PSam2{iuF9UO`Ct&Ol9m*PDS=AN>fpyP_~Uv19T_6MhJoEvv_2`)yn0u>B}r zYeyk)PS@H#^6H3lTk(XqnDBTctaw2Z7UH#*B_ZLR`gNCn9VOW!jrHmjuC8`9Di36$ zom(4+?-==>GH(=AAh70iUF$=2HF)~tnT97Pe=q-Xb$H&sqxTZ4gLC$ld7rs@MCP4; z?Rd1a63=zY>K|mg-e@Lb$l*<2{S%)QFW1FD};S>sO-G;`H&hDX3s@H^n+wPPps*`YKH{ zgYf8I>Tf#3SPl)baTC?V?m5!O2#rXy)%$wd(+FG%Z36%94Xy_oPASE04vk-i1JBxS z(YqRM)R^oFk6hn7~u>An%e^L4_bX;IR!=f>{aKZ^ZT7~ z+oOE)bF`gR|v_Rw%&1@-xa!x4*Uw^daBu>;fTJeOJ$P zb_;a*X}q=apQyfzDQh%i*=8J`54#|zfJ$Ng1-szQKqFWapAo%L0D=RKVK2;RgIzY? zy8QG=>hE-mo%)VveOIx*W1RY~$*ONbW_@W1A+t8Cz8>;{MK3Ee>1F8*b;E503h5;v zCG_%(KNm1%(#vKmQFblqFPX3L*2U$QF4Z*=BxEyW(PI*qxqcG_z!FE8 zA8we$BMfuQNwx3&C^4zl`dl!_d}L2Wq*aBK4@@q{?b~^=lZ~(qoYc}XbvkNEEv-~7 z(4nW6)~X#?R2lVl3h3t%4@31{3r8J#Jc^vr)8ES|2f#KfXZpE4aE z%8U=~86V7y5AGRXoEcxdXM90se8HaaIL0>JK79<0)fe49e`dUY&-{g%@%ql+to%5f zGhKexjdZ&FKxVwY)6~un`9j}5p27bySw1*ZPnOKK5bBoxXYzjZk>JHyoF3l?q`Cv< zpM#q;cI8F;#CN%3(=ej7zy|DS3Dr?F@E9Mj`vRPc|8SPW;L|AHIaKu7J2$6^-rh4P2*-7Ue9A{txkqXu21GCFF^Qm2D=+5T@QL{tl0YQU9osY(!q z1>yGpKX5>ei!o&oLR<(L{9Or&sCF#vNvDtj(5~t-ZW&kTi>SL{;guXQ@gd@cP<{*7 zyHOkXRyPmJFsdq#N9wQJsl9FU8M^CqhAvKr)-tqN(nivuCowcAp_S>-0*0=uWeLZp zL%C5*wNC;jyiZKH%fW=V?#*--dca`g=q$v}WaIvS;%n_};?o7EW$I66QHWbe{mJ5p zIWYcoie7ci=0y5j3~H2{DB&O7y$maVbE1#_uDJL3WxPZSF(DV*ikHpyw*3(Can(0A z3o`j6C}B=(@?n%_5rG2m+c0m@Na5?KPQ`b5mko0AmQsYn@oZ(&YU0F7!LCV6RQ#R(6|I^a%%yRTQTS43~ z6qx?`sH1cDi1-`3tGj=Qen6!obesyGSy1?Fhxv?_jrgTpb!tzw<57N@}@4@c1F5rZ^u{@2> zZ6O{tf+h96As>EVXoQ9pWB7!n7^|-bEyLITNT|(-sBz@tI*TExPsTXInQ=*7fY@Fk zhi!z_i|Hg8*Yp)KNv(BF(EWB2eSaP)sy^xiY08*zmT}WnB)xeyLvNGQl61n~qG2qI z2^Shc(4nxp_D-u^ZJ{R-trPx9C!EcMi;Y4_cmWc|*VhV4>cg3I+Iw|cTvZR9fKe)G z%hQFfcMAQzPFT!@6-JpPJT#r~btmEbI$IOPP|7YL<&;~RP8iEIF1TqV{e@(F>MNh{^Eb&>w^S&@)75s8%x(#oulsGL&> zOl-dRsw|m68O*L|aMd&tj9gqzc$FX}NXredoUK~VE_az-2zKL_c%v*&NBnzc&cCJ> zOa2Af!a&j-FSCauPs6pIfVU6>4qyV70eE}05UTA{oe5}5BB&)udK^~eBCmxHp5dQM6gXNF)w%veuviz~&$-}X_AC|hr zH#2n!wpFbcO^gp>1KqX2%a6uOcsUL{Lz9G`MX5*QwYOpr3IBXdS3aAan0r!T=W!3OnKCXmoXPkgU2lR(P zdb#^982_lJR`aB4j*th=Z|dkcrIzl6=(;(hN{ne!%SzTIhnN#>qg6TBH|BoHmXb}z z+`2+vc*aaM^*V-eQaAD6@d^m-R(Hd?y9<%60s_UlAF?L+#c5b0v=G-J%Ze3JxVP;G7yuwj8GrM77K4gV z5e2Y|wN>LXj~KlaZ7h@Az>ZS*@Rq3`Lp6+$BBBdwibzdxmW__pwLB-nIGv~Hyv@uq zjJ!%5tN}okWBO3>l)vj^?Wjn@X)_oML{iSF5;-@Jn`NL=d@>9$isq-V37IWwi_#r&SnD-!O+<$j+^w14G z-{BZ;j?&;%voD-#_RmlwTi9D4^x0V*7X4bbR;~L4tyMc_j@GK(5(8*6v}&6Wk7?Aq zR!!5RQl}2R|LV=LSkD4KXvvUuBY*Qzt_sdKpaRHjQAAA;v6V~55r_^%)a6&OGVoX2 zaspBZ8vDE{ArW;ZlnAI!R*na}5sH%yB@JwPdHZ z&|1WRqu-5JeFKP3sN`+4Ekt>VvM6H_ScIU>_}Pfxe*E6bXw0k-zJq{GN_@yr2k`LBwmRI1a6ht! zQztV%;?*7E*YYH?S2`J7se1j=EdPMf8pZ<5v7PmRugA?S;N^Y6dDls+_ zO_+f!i{LBmZ3-JaPBE;$o_IHv>>p`@;C3{0BN#n(AxNz;%a5(?7a7fXspqgRLdNE> zaVia;1V_HNbI?M;v~C$D|Gux&_3)2W)9;P zGyv_}4dm;ll&ikTjVT}DvNaVC>FVoM6_R2I3NS8M5neBofc~vzrb6vg>eWc8J+KVP zuujDZ7&w^Xx&qWa-L9L5$>iwj@4cNnw|}TBZWpW%BZI-qz+SUrwa28PevmCTPnL)yVZ z4Gjx1WPdywXBfA9(8Onkn|=@7lU^MX+$w^ z74?#}HGfWoDIqfIJyBYV@mYq+>TJaB?U7%|>g|`ZdfPXnx3%b>US14WCY<>_=CJJV+e)*(EqTeK5`i8)(S@vS#=KGeK)`JI2pT8sZTxv?B_bdI zxG4;+#&2#cYQsC+2#KW_3%DYPJ)$7MJAjBBH3Hj6tOHWKSKmiL0Ti`;leg`s_#J65 zu0$eGh1;J!)`yY{A)k~QYw;1rR`D|R_2tM7&RYOo^l-!%Pzw=)6JQx;F9rdNkoIB} z)W|+Dibvecipf}VWi$wJD(`X>!kuBG)weN8jI|VAMjF4TNR#t@NU=6edREqP0lBCE zLmg0;pMjZzYubg!pt2Z^bOF>;OgZU;Qy~acJ0*TWm-vgDwBE!Ll9oaUxm3z6OkRe| zAk5XbpvOR0+9G)kN)c`feO4s8=sC%AaYh%&&hh&8P%@Pn>UEHB-R2TqLmg@W$ateb z@<{cl6Fp8xpP-|!C1CriPh>R(srx~!g250=c3_zNO>-oz-ZwrOETBQ%dJ&+65x^{< z(12lDj0M%55Xj@}o9Q>XTl^fmCEH4Nj9*aZZKJGK zFSsT+Cdk(aL@ScxMT#I)5>@>?RAdw|2LtUP!WCeZZ2E14YvYzxK#Bqxg+*Ep{J@eY zF2gvjL=6I3j;y&|H3yk3z%vhcly<$EDvKYNxK%=I=u+2!RSI^Vq&@`qG~TDIz|+F@ zXfA+J%|Xy&S>9?NF&Ws^-HIy4yPzTiUQtHTaY|mbvP-ANV>9r zKnaEvL>*w(g-(haoD`cSMH8|5wzH&b5p@BCOTnyqbz!^wbb9x1K?{rp4-9d~*FmH5 zMbQel^|kJ48lBk?q@^g%!?OIy!xtZ1(1;Pl@b}ES*Ythn9$fm1kM1?S-G1B*pl*{{ zn)V%GyBQCCAcnX<(9P9-?i47_GnV{%J>Ce_6nkZD$Po{q=)f83I6Wk1cZJoRGGdf# zhKe@VGONLb@{_@AS-^CK4q(-t+1}$WVaDwC0$$YF6TTkyX}pMfX@=P|ezz>{((zJ0 z@{K`1fmeGBqGkUCFw^`=?4OG;6J25h<+L}1DUcydzF6Q6YI^7b$C~y`1p{Z}Cc#&u z)(k9HE#U20{Nd$qWlX<&zzzTuT_V^WZnfS6+x8SvtLPkFu7wr8w~bdNk}~l8 zhT)>W?wBG&ZccH5sCvvPuwMp}c_r&2<`QvF@x$2A2Q>p4az6&nj(714#}Tk`NC8BG z#KmrNLt?}{oM%piTYyHXQl|?%0$zq$edjuvQ`Xw|%dkxl{*!@VI1Nf2x)7cIvYoh5 zl|wFXP+z{9l^64qX`HeI_*6jx$jqqWE zahA$a_;WXYp;`LgQ<{7VRQ)xCV%i(jTF>QL969w>J-fP8#ZefLLZEKbLOtlWUn_%7 zr4SG|3f>@yyT|O_cl~e4$~3cni+*WhRJ|uLTIyCG3;~9nqDm&?wbZZf0YkEgQAGV2 zaeLME6QKJZKT?mv-X3UkJs3aGlY)bzCqlm}v-!W7v0t?(ebec~K#~Dyhg*o-9-BBa zFjDW=7Mc=MZ1(=c#HNP?+WX?(t1}}?^^3!XT8IG zt3O-`yjvcc4Kife^=!koO^-ckdK?{X_JfK)SU+Rm)VO`yoY=qxYhho_feTut_yFUO zlh0vmhMqr^miEdo>f!b^NRKPDsRzR+>>&_*jkh}7;uLjP2jnEPx)ydDOmR;SR>AR= zOLwX8iKL3n<|=hLbEN(VUezP2uFN54;drzHE?kKV*7x6M-utCPss)T zR{$AOFXH!lEU^s^EzeV9mEn%;nxUFN&{4#mm@M#XG;z0&=I2YZ_<4OqB{}cpy7(ET z(7PQ8nI|yA+B$>8Flu8}Q@(Ndww>FOM^IA&p%{&qSsYP^;LKw^XK}iRCcRb-`zO5z zfIoo0Sy>Et(ZZ32z5QDYCm4axNdM!l4)s4podtU$@CyeH_l95lrf9yd{Wr$L8VibiSz|#2 zJ^+4t=OE#yuVKAIe)`2o20!gU+&=l~T1-#)e;*1dmSSZI98<=S&ywd-Zv*9EA_u9<*!NVBGgwkV69j?AkmW+wX1nBht*BlBh1|?vJ1G z)?kkWaw8TK1iKYF6K@UmNU#N=X6~d!bqL)Gb$3ak!XAmZommnUN}?Y~qM{y&R@;e+ zB+;dksJKU>b0txty14sni7)LDKiP^e?H(`jWjqJeZ+F_;K2qXw*=-qoYy8?3y0s!l zAVSCpRCunmTz*>tt)s7-r`&O~Rd%8m>_nB4=y6F@)uTE0N+R6a+Ran$$YJfK=$fv# z;%mFtNPJyZe5?hR*H+ghzsiexGc)STa>KkVcUE>pwT$L0UY0vMJEn+b%}$Qut-V=g z9ma^cNsj=Em_ax=m*w7%E92rH=EuHT{#NWFtgrjTQ@OE4IE1fH{G+_s9Aqj)XicLk zUP+|n8W!jHo{3A~)Ki#GMip0zeF1eXai0WT7gQJ4iOYH8nWrF)$cfYR)_=^bF0_N2 zNwGcGUd*46o*oYjkm>P0Onsd0m(0wV9zQ@FriVJqsh_^ey8d6aN&TIGHYEP9mocSi zYkA73r>kj}B#WqXP=@l@1vIVDxuZI_wMeXz+&uA5?y>cBU3;T{ux~A%7x3)HGjhma zUo9R3&uTn(;n{*`C!S$L2m8k13FG-Po;aSH@Hj%q|NYo21oV2LAIKoLB+%zo^b=H> zdhij%=;jzvYq?OwFPnnn{i&7@YDq3A{^HOqtOg2aVBwI8xx9nH7PL=brD!LhtbrIu z3j8fpsfAE|bD-=!pWO&|t4knzECMB&4Owe(`F3+R-`<*CD1fddaA7aPW{{W&knk;x z4l3D{|CiA_qo<-cU-EI);>DzD_gYY><5LD>A+jK)#Hzx`lGd0$XPoIYOzCvYaU3!&^_2Ha=mRL7_jmLGnG#=iXW(Qd6TWGoT79X*>7&EcdN@D{myZs# zxI1*bX{r(GOVE3$amy~S$Ct=65kKG=v9HZ z&_&cv&{z=9{Zu72+x@4I&qa{{E$gjyB!NAbHd*0_b52+@#@P1 zK@QdemQ53lb$F>~VFUmzcvMg2A42RD2FF_=^tl>ne&*Eb*;PH>z0}tt^?d-oXuQt) zs&#!|)b%~4>l^#|)z>WbC0Ji(|Ng!_vwxk%8U3^LOuh6d4Zlh#AT|7S`CsT+{x`D9 z|6*qOp9X&E`W8!neuFuY1;3+peHQ%wJ|?3-pRGPa>YK{?GU0d6<(cqXm0923;ivL? z7Sohf%&EGVy-q6ih`UF(kJtIFZhv^9bbGJ)IeriYDF@=G`=ISfhHp`h&oEEJpOs@W z^v44+D+<(MAn_oi8MW^_{fA%z+3D@|X;rqoda`!D{~M+Y=(*~fLt)jUPCr2lt-phz zM2@vEm;y%@r`|!idvWp3!fL`}5B;liTC8o4PU~y!_6?6?tplYN8u27L4Fybvqk!2L z)3WA|txqdXHKPESL=H-yR*OqLqO{{{ye^)hj_^nkdorDj_Lf@hEzs>PJ+Sts^$C0E zb_hr*AJUk&jW!)Fd}xuHhu^DClXGQ@l@F}kSUD7O7I)3a2&q_$%$*xGt(#KB*7GD1 z7~;%nfqM8%wZDltvl@KB+r}-t<7*e{19f&(y7D0P`StO+JT_ytU=i0##p<>`c4b_U z>&o1^vfFfJTg96SD-~M(aB6w~M8A&7x%?R4Z%MKGQZEH;fKN0y!S{3lH)a-q7B)g8 ztz0O|HrQpl?1m^#1u{;~JO2|- zb{BLUxI7KX(==>tQ9x*ztuzZR4|85NiFd;sBc{&t%DqJGQQQ>hx5~w zm_ng;Wa7eFb4nS0jV+(-ix#PC-hLdG&tU} zFvr_Qb(QFHz3tcHr*nxa2WiiuQE(xlNi zhqVCIg}g@n2&91gTNp;})Dj$;BeS2o=eRF6loRXUpze?%;GSAPHxKyZyYkm!uBE(J zU5hz~#V4<%JDZeh3_<~GizUJ*!h4OJpKy~6Q0T|ijUQ-`Z$4IoeA>ipkS{|#fYbe| zRk(Tud?|4`{0=V24y5OOl~iv#-N5VOYLG2K7j2*&*CR;Sb}P-^!jAWP$+XOB*X-wusE z>fs5}OwJeb)?G*yR_B3d0U`XrpL-$4gM0yduKp9^I%>F~3Oj}UNf#-WnTvwp$YDZo zS*r;kCg~j{5Wp`F9B$zN8Xby6n51wnS>~!&^;1}+&r~qLy-x(@O(EkkJADnQWdRd( z1I{6=6Z_&{L7k~(b!t~5&_A)DPHhnrzIJ<>KZlSoYlQYt%T3x7^Tk`jIk5rpmf4^~ zmmt)vU4)6;Mg%tdO%O3;;skDhkDfY#N4iBz)a76r8u%n!8qHt6I8!LO8@^&%DABdz zK8&WkM$3KKd$lOVcjbB8c3>pTnp({35;e*xb+c3I8eQslkqoo?oF1i`Ipz7$V)eI= z?dJT!$v8tYHl2rDp&q%gk+oaH5j$}(sYmNbRvvLtTi$Q@BZp9(<=WM8{L)ILEzh0d#{=qI}*V-^R0*!X+ z{GC(hwO`338w*jV&lU>Gi~auRXFSE4DOP;Kf|O9W7#8=K4+B^WFrT zfISbsN5PV}8=Hm+PQhEVB-KRz8dN_&56H6>^B-bdp*jl4Xm~)`nvT%ecg14LaF(*a zF(}BFtW@jZB$}8E42zwo-U1KRd4f96OymL6u`(TlOif2iOug#&4EqU z9F>*l9dRbd<%QudV;00aT_xM}{Y%H*;79w~wV|Fp%SIUxffO7sjzb@>1FgV@u?# zAbBATgR%2yC<-R$(+C)wEm5IlINn;A6FWn`3X_xKtwlMp3MMQ{o*Zv2%ZZH@bkxKJicTVgvN~JLF($9^^&=tg#v$(Xf4_NyeiS0ia0N!2yiaG0UoyDXBuVTeuyv z3l_-VITFkTrln!9@}wozh^j<9#HO^>$2%hDp5np2E<7*cc^1##@O+48BtTn?ryrgn zcs}Ly{I_QVsI&c5t;y4bQy;$sBqYzoZk^-RTbN>5b7tn3GrX}!0)zlJH4ADDG=ri! zkCmx=om|$eDL}6Dtod7kGixI1*>_~tune@y9fqA-J$f$7h10Lh18U$85<(Pe+!UnW z0baycxWIv5C+_!)w-n$vcl<`0PBX6OBz3Dr73nUIRy(m&Gd41&QWB^IMn;#5(RSVC z1zo1stZ~gq45IyCiG0G<{&@92P6^ezgdt_nJCpHD4 zbp4Uc`VZCh_ZT5sgwWEUI87_O^_=@^0@U%U~PC+G11=Fh>+&({BQ zDSsgLm7epH^0k|H*+DmbywVyN~(=F8~jh{ROxW z9a2$PEd^z^HyIRj4)uO0x04@i-^%}D3G<(lk-v2B`Hfr3;Z(8xbo|Mw$k6B0h+Lp1 zixwtR9^7~O|$18{lr>G?mz$hiqaMLteVk7EE z#6d*pLG&_kUdk5#c1F9UCdPQF;{xO)ekl)~|hw?NVo|68*ex3+#)O4xy} z>%9W;r7$?dI9?X0&n~85hyZ!pqoc{S}ul&cu*qf zS$L0x2kCW&a2hluL$LeX5+NRih@b}?mjI#el@cyagaxssj^kiKvWd$J786^jml$Vr z5=p>x1{5c2xs;HA(_}f39LGh71f0NtvgEN`he$vH11ge3#J7)y4rD+jRNMGSFGEt$ zkH$aDjo}Ehyx4FINHEbCRJwmyO~B}Z>**y3;5Q4(+^nU=3F&d@|GJFBKCc>`hfV z@1xLkrCIh3lGk!qJG<)@5Y7+r96DjJZ#16Cc+SStgy(WRSK;|So?qa}AYK0}e@2|i zr`9$&GY*M$r5r*cXL zzZ)d{uKpY%MJE5+cluMs9F>{griXjjuUCQ!7=^>M{kr-UpfFa(E8tE|n)nGwmEI`H z6cKeS;`d1w9T;kUkT$gG?`-)5>I(Amyz+ z?bqkX;-(jQE2F)*qe1NLb1_KZwUr0f-UGlV66w21GNIn4-uQO@7L%;EO$aNNxVR<+ z)+G;?v^3kSD$5B%jeMdieG_zMA;!#j8No8X>N}uipcR&F`^$$2oq?Ve7c$QdU};gT zc7yBbTx0|~*SW}5Z<|<3btY{fhKG`WCOsMh+^B( zJZg6z@R=-=1@VXQxC#wJFJY}kFQ>7+RqQ2+r*7}BXJ_^@?s0l))&_7|P_a7P$wb!_ zovBr4vJ6SnbSCL#7oh7V)O}GGOyP2l8$MuhfO|$T_423bD`BDgi*87N2ld+D|7Q8B z=X~BbJ^CW_0NM0Q-#>R8=!w?f7D9h(P*)=ZLKW^dC~!k1>zb;l$i-8j{xaQJ>*5%h z8DO`@at{9A?QH5k*a{kL)$Em`kO?HK)pjTa6E)Q5enlPOWTV+!5B~~oC2>@`(~-}h z9ZMn`)!09=@gemxIIwXQD;#LkOf@Ad=MY_^?d*=5?%+NgPSkkRKe2ZNA4MB#EX8g= zb(Z)7xv@kycM`LIj6#_NvmH7M>~yviyNeJ`#cm2JU5IEOqG1rx>S`Sk&F5|JMj)2F zuqZ>b+r156mXwA#?!vY|iBa+)vJY*$>AJkOHVeAqQ0vf3<5R`XGPj2$GU*!SV%&IJ+Je6dmqEtAkfOKS7Q zjuKUKMRKSmw)tWn3DI&JPSHZV;Vu1k^uKGYkoKn1l5Ow_OTqoVFOm{ESO%Fk!sZ+I1 z6bW~7s5!j=;ianB3FjFrdUS383k9}X!*d?`^AH*dxCOf3!)5~vM^QtVz63l}i+cz{ z>b)(1dsNP61(u4|o<11skvz+pO05H*)DteKD=XBM5zRq7cjf6B$0If|P6sa{{%<91 zy|z1&7IvDdRG%6k|8{M1J3%em20-?ZZ2ojsh6(DfTnm)2y7`CNR=3mCX->wpY{L`6 z(y|TrIHhHqh-!F_1Oj4KhV5-?txUO3Z+l~hWqrimP$zM^f!!Vt9T|LZqsL$>|6(d@ z01J=$BZ<}uwM4tciPHu>RhNQ?8rw;_CmK(ZbiY*R5LsZ-FW?GB+6_!PU@RgR@!`B$ zoGQnI)X*4Td_`4G%%j@i&z7jELSxP_D4a=+O&%47W#1Z;XfZlbkeKg6A^!TrQMd?0 zm2D;DuqKHeuFs}qLnF$C*@AIgFrRjsNNQP?I<}J`^ne*ruYUXtdUlju3-$*+%SbrI zVNzfhmq4Jm>l}N*~ilsq9I>Lb4iQnIvikB!CMHc#I{_Dff)ku!yGybFC2VZhZoeCVbIAaZ+KWE z=KAOXqe3Rw_WIji-=8U~>*!FkI*5jN!|GM>@!+`U&F?ab=R;Ssv`U>LjLyBGx(c1h z(RqA2544D_$H{;JtE-N!Hh7l3EV_=aPuIQ+(z+x0f+Irh~ z{1I&SL(Jx~j@mMWh7gJDAu}g=NPJxxNIHI&Z;ze89OLIVM?;eJ?HG@+E}9upAB_ag z(_O|)a;8who176=#wlQ15jAq1;5OjUic*VUF7?kasz>DDoKR@H5mX8~)V_Ug&k)tI=rLN&rl ziFszxhIzs|R09~UQ3o_LlJ;Cu4}fgJ6^?Fc9dP;rfv{!le+REYe}NOxAdr%qAjmp> z)Q$L3%@w#sS?z-L2!PnDZbbVt4FmO%jid!)QsDN5zhDf^#tM$FDB`D=l|Sum`v(Vq zqN}{xg|*Q{UwJhg%U?oRYFSYI6kGrhBaTp3fbSf@9xAV?jg96_9Os_Omf&E#Xh9sR zwqeL(HoMe|kiU@2IyKS**Sny4j51kG8G_?2MozRb5?22HKyM-4Q!!V$6;~)oSnvQI ze-%K1g4D7yc=Z&DL$)4$1O?R{kl>_Yv7v-aL_IEAakmglG^vZtTR+}z-Y9dn3+uR} zn6&~eK^}iZeM|CqOzwGQ9&`^~iw@IM5%l&MVUF$%H8K@>-k6_$OeBk4UHY zO1A!E5yXE|sT9r$a={WsIO3e!_HC`FVFU`mZ@Hbr38=!<%)%iml6xSqrq?Rn_?-f6r(Wfm9agkYH^+lEJZ^veJ; zNm~K%>Pp$?M@d9P0U%Zg(nzqeUIix-<0y?BTAx@_q5dlVNO~r8skgwPvt*H(;A_@` z52WT8c%*^Upn^}Z-b68)l^^stuu&d>FXQ@*dNm5BXRe9hmyK5cf9!n=e3Zr2cLGbY zKwuXLvPzVwD+GxUNrVIfQR4Y9W5`~S~8&$E{#T=jeVe&4IVu+KBk%$YN1&YU@O=FAxk z8MMg@%<~~F>wGrWqC<@^vBv#K@a-r`$NJ`p$yhHGh0BA+Pu@qYn|Pg=I^&NCeIw@e zAW1@07vW(|%*%Lxj8e^4Mycj+-Dx=Cyg}dHk)g&NmWvb!l5;oUN(+WWQp1?E0HxnU z>8H6k;i=-HP)L-DNzl6L7MMqXZOubp`o?^|&{D~FF!GtXQk9P?znZ$ebLC^cA3gc9 zxDi)@A?5;Psb5u!%%ObeQI4ui%zX2o?gIScham$3-X39RI1(93GS{q@%QqyL9;n!FBivu~1>DnyvE+FO86;BDTU^BipUE7p^)owNB~^HpaBI9~My)uzh~ z&gGX^s{^6*QmVEqR)Z_u%V3%h&jF*l!Gkl@2+j@&=^dT|uFVOk&9YSIIO-EJr0fi@4uIAl`r-CrXay4sSJYhnAh7_v8Qk5(Ynljp`we zEfa=`hE$?5!zGb1vD7%X)c9GsadA0p`ZO!M$8K}Q7@rvpspOnV0}+&+Vd!5i%*U&L zfXzciR5xOPrg|GZl!FA(wpL75Gj`qfTPqDQI(*!J5VHJ9+A^W z2RcS_7X(6koysTYCmrA_XY2OIK1;q2KKSG+FM zrg)v75iA5=yFd}U9=`?fq1&7BUM*(FWck4Q$?J0Du7mkW<5ywfC$7E7?`B&%P*=?H zNgXbmVB20xgK6{oJvjVfOe@(fzXLyUAm1gu;U63^eS1;suA+PB_N0#o?_QO+s*o7s zX#$Gy(fAw&WbVk_Sl2&)FX_3!%HNJZ%=!jMeSL_T;hQQ5a-oN5ze9dQG#pLO-S(&5 zU)y1eGN$piI7>cvDnAiuYp>`jA+eMCZ&yfZd(9cJh}pKet#uxmcIv`9o}_i)p@_N# z3?=#IuWX^HzAy-x=4Dsx2JB<1<6#uV_C0mbNq7fE5nobv1tq@Z!PrGat6_Uaqo#`& zqBSkLez6P%Qm4j?VT|C^_!zyIF*T0FUQhDWI9rSr?IKL-@REOk3Z=tK4s)%%6ECjc zEni%RY2MqAhaWl@xEc(kbDKY}bp@Wd)9-4KyX}!y(t4Jpl_KplGheA0&=Kb71|BrG z{07QfCrDl&(nlwy`&x%eI_{2d7$oV8ve;kJs*px64Ax)Onki}dNE0O=Y5A>NL2bsP zbv1m5C+3^l%7Bh^b8t1#94_^H>E*Ca(hHFOL{fS|t9FYhL^|UbNPb*%UD(RYTIlNF zYLMF@=y-wjqBv~rIPeR1R#>Ow=P+_(t5qH*^bZ4ED z5jl=u=ETQF>v3-Q7^w-Dz0Hpw8O5d95wDf7fT!w0=Bc_6Pt`3nPt`389oI03UDbM%E92BCDDFNw^<746n4e-s<_u!THI?*npL~QGmEUcG9#5$ zAI5iRacUk$Tj&KY!~TGF$yihCN6IpiJqT;eT0np`#xf!Arrw!mz2ZQPdR=MtmYVf` z{4DBiLcMhZb)~#`GO?#NNLQ*CS#0dTp%C{uqmTOt{FULa8h<~--zE6F8-G{g?@9c< zj=xs?WrpDEfxpA?cP##n$6pYCA^a`D-_P+^gukosmyy|}tD{?1_5sfBJ$mLG!2f#n zcDdyt>7PD*`{nkxbdCT0-8}^Yw(wSqhuV@kJX<}s!<5SO9~NoM(}=s|=ZxQJelCMm zi2VG-zrjCAtCIH~*Zlm8->31_x0n+We6>-GN^-Vx_xPvhz|`wdW875BxE^)1o_}x3 z`p?oG_^bNre13JU=w%)0Qv&Z37u^@2b*Z0kW)qS!%J-M>-Ky^tY(*v^#d@qib%)O9 zS8g1HOaWt;5O^2a^}PWSrethV7>`LhMN{a&ly@mVCJCQDf9M>az7{^?W*eILe-DxVC@o8|0i(&)$JcDyG2PE@jam~kwg93<7Hq#5y_3*L#dnO2?`&B)CuMBP$ZKDJkEHs) zg#pcmmPW4+#6cKsJN1!W_SaL$r|I&~F*ql=8m+v|{o0bn(!Q5t-PHXR%VxB>JUwkkPj9o(Dy@Y(ay|3JvmQlX{ zTEmg{4S|u}E}d52rB;1QWG}DN_ML3kcQ3f5ef!2F)%OL2a%c7Rwd#9gH}VhWCEdOm z9m_v_x5j(H`p)aSL+A6W7>sf$XxkVHy)Lrr>y9n8l#KG7A*`+X-buCh;d?^9jI`>@ z-F1CE?D}p<7X(t@CpemB)prZLGi+?r`tLcN&#&&Gi>Wi!i|qfw=Cy zuKv2LYIT+cv`a@qI;FkGSy@jLpR-Q+=ODZO;pu`mt^PsPYO6T^Vh~&^uA^x{q5g8c z-Pf<4*ZG9W4}k_*+$@j%@R&p|!Z+=U*fDZ;jchljxB(=mam6O+vf}QLG`%6-?!hVY zs;N2c-FHaZ_d#jz`Kj-|LsQ?I)82iDrGEFNm2Xa~&zD|bdilds;0Zt7C_Sm=&(4Qa z=#$c)=jnWY^_O4na=aXme43w1zfa59eGVZW`gZ z?{{GI^cjqHE;t6&Z{*+v_NJC)>%|el=;}9)E3c{5 z0X0bqGsDwnhT`Tj=^7%<|ZM*KUdapn4NNVVELY z8S_XD{To(oV#aXAjsj9azq&zIT{NB@3O3ADZtNAK`?RgVr2TjcFSv(dm(YV9*WBr7 z%yGGXqsoVynS^5T0}}O;qtz^3HNmn{^*E@5L60cp@nW}S162m(?z=$Yc>d^;%1Oz4!aBdT4)ykAqVGw zAS~X;#lGYppXE(1=R!(>+L{H6-}-{YjI8tF-+akwOXWm4^<;XPpmNF)5jZR- z+LnxGXU`H}$v7z&I?M>Q;Q?UyH96~gNE|(z4AU5zob|o<&q*ZZ7NbvK#XmE^f{~HN zxeUrU%$UIG(rftqoJ2_4cEE-}7~7}L~k&VO*YOVD(RjWNJk=uA(V{wDZ>)oIfovzgS*3#tcYG;#XN znoHjhLNSScH_kmmRsnKn^xfZdbN>5PyZLX9aNc}IU4xv>fk?_Qr@;q72?WPx$1E|p z4}qIZrlEtwXIk?C4-$oH{Kf=*nVq`!~>ac*QZwM&lgoug{GA5#hs2j5ce)2$~Dm_*7OVn4Rj@I?nU{<_JL&VJ2PzxV7C?*o1dL!lsrG>6eOs5Y^9_;+Y7E zezIA5e_8AYEf0yykWHP*U)fD+Cx2O@bNMTgP?O6fBb+9Gh3nhNU&@LRN?{PC%Zd}> zDx8oN2a8k1zRBNJasp(p<*)3ALUxvmU!n2JWqroDBZtS{2=~3LI&+LaGcq8$u1mDJ zOYDuvN5##e7gT&f%k@CKL|&JXN-lZQsc)S;nHO9?WnGz&DjHFr=!UcSIdj@ax5oJas;-=-glX#rKy9y^k z)>L>;^qXf2JgU!*ei_CI*!g9|Z3?e^NP-N=r=T$r%233o#@&OS3S&6bm1>cG51giI zE$!w)an`0i9eU_$Ie3E6FcmubiuG(Qv{CGbhqFW@cQl>}AN-3kC?n%!1@DDI=R+-Y zU8i19guhbNL&utn_u{g%NG*~@lhfFNBY#{M&`n=me;p#fp92T|C6rt^mGKn04R{wK z0CHg@zw7~TGpcV|j(=Q}o-50a^fJzY&w4m3y3B)3yW$sllmk`*MB&UfCNqG0L3CMF zMr4RGeu1DcRd-vhK1H|s;Q_*&bYyIu1F3@F<(q%dOx4wnF zX*uCq%Kk#Z+<3Pus2&^NfD0Rbi_}_m-^bW1p;{ihQFLcGU^#I@6-z6W;Zaqd0m?_= zd>)DzhBB?ZTZtHLhA2f?XOe||;#X&V0}wbV%5_DUBFO;q)EkfO(#> zzbq-JKd+XdVXDxr*lIUfj4`UiI2nU#R$$Q}=ULIyb8FQIaXO|gBwq)zR$q$o%Hc=D z3;gPx$B=y+K63y7R~(CABWRKM`QC+RjgtE+s%6xB-7119roqKTrx@)eR-`e@RGWg6U#HgxfxHA zq0z1a;o-(}a$S?wHD<7A+Z`pmigUv!ZD@y;Okj zUR?WrSmS4im)8G#9!`}z3yf_D+k}qf2x4BW&2TCv+@*002CcWTEBK<}Q2_I+k5{qi zU;hc1+gKQdTD4gu@>7lldi&N<2f$G?bIMV*ATK$lx&FK->8XvcRhPNP^oblKGS#0s zraCjy8v+$#Rm;?Pw}H(fNFz?%6oES8rE9|8Dn4;Ct5FURRNZv7a9xRT))P0g5>MmA ze4sp{u`7c5s%e}%Oge@ujY$<~|H�Lzm{YZe;ae;jnE$^_Pui2TGx}&5`wLwSgL@ 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%0A3*3<NABfQeWak-6!P%Wl%RC3`;qe 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 diff --git a/Python314_4_x86_Template/DLLs/libffi-8.dll b/Python314_4_x86_Template/DLLs/libffi-8.dll deleted file mode 100644 index bc405e2b004627723de675f38a2584006dc79e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35088 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 diff --git a/Python314_4_x86_Template/DLLs/libssl-3.dll b/Python314_4_x86_Template/DLLs/libssl-3.dll deleted file mode 100644 index b7bf15315ebf93d029ae3729a03feddb7af23a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639856 zcmeFa33yaR*6`n*G|+^GZXiI=C=r4piHO7n2xuAuL_ll^bfYXmMT`*?p#!K4Bz8i& zy+qK_QODhJ9XA{?#0?UHgiQq8P;|t-Vg^M~78m;aox0tfMR1vS=KsC_=OcOUy;bL& zI(6!ts#D9YTYdgT%PjF0i^awj4qGghJmoJ--+%pPw^}Uiy1m%WvZD2CCsbNTy>`O5 z{43_9%$j}m<+CrInR4mHS6y|rKjo6kQf3!km2$;ZDcKj~rp&y0+GTy(woOQlu>NRm z{jm=}T$&TTp8TM5&J)DDr<a`fD9`s(&1d)Y#X8<Sz4*LmG`{G(r+H>T_Xy92A1=vR z{iwu?&$~^-OV4{qKd;L%pJh5e_KHjMC9mcs^9;3EMp;`~Uc7MW6;a$SOWX-<tnJb* zKee=2mc?oCFcI7(S1XCTbQlyA`Y-ylRJGPho%C93OPnPOO_4~_#hzv~rNC~vV~oYJ zwoPlx`+}a@+A=4`g!q!ymRV=<oYmUm9|n4Y-O^v^j_^0%XK!Y^*6=<8G2lM_%jWxe zdVeHSkx$Ahm7&pJ3fcCVJ?&!u#ng`{q$rgANuCz1gBWEN)uxY0X2~B6xXNy^4CMJF z&qjY)VESBP5{?}y2y``y$LGJG%j(m&@1@f(r=Cf69_Yjj{dhL|%aVL&&zXHGFs(au zXc1PYACB&_8COI2$OYihsl~%{&@bqQ0R4aBZ?pW>RgAV;>aMvi-ct8dh|ut<ahAG% zYY4p-$F1@y5SQK!?CDKJPtM>r?Z+0Dy8F5l`k}AIQupkuEiH9ZdjY$CAJLX8L5x{U zbcUVV<>v#7I|&AZJJ>9Br5hox`I6}951{K>1?<zgkbL+q86_xSGoOW|>Ucs=Tn62V zn+X*^2<*v|;rD1;q95;ocxE?3JKpEk;~Q>$I>BndEg-(Tjp&ERk#^t%+%B8UZK{;$ zr93iPmjcN(vw=Oio9Ib`=zcS>r=+NA9ntv9V0Gvpki5H;=rkHhol}(a_s)p%{8Z?+ zUPd(Sazevy;`Z#@M0bneU6M%Fp#%nl7XiyZk5EP-w?1>A3yp;&`!z`N;wj8Ub0PVr z8kjEc^-}x_QTqeu0((CNy31cA`d~Vt$=|}I*C%i}@DkXsYq?$V716azK)ik&bOW!3 zuG6E!pa$$+?-N}-0BrGJxjC*OTGpS?x3_Y8Z6(nOcR>8yKxA1ppU{90;a74gh;B}9 zy{`c_bRVHT+abw(is-uQh*l4Q!QC}Phd;or!(wiOley(vxjnZDg^f-?f(`EwvdxBg zwHRfD&=sa|oB9xl{8f;wyOroSbICXTE%La$8=(%z5&HQ(GD<1~o3V@A@w15D=_JMQ z_1vBjR>xe*ZR1*^p07wT@kVZ5L0F}hEcrXp+of`CUx5T4%!2a)11@hA5jy)CZjV1h zbj314-Tq99i|*z&{%xXrE&-8QOLXoy(mpVq=!`c(oD>AM-3I4-q*_#-%I&#cV87D* z#DcdL0z0*oP{LY5pCuC7It`MMyI{3X3~${5Y=)@h_CdfNl+2G?262DM_ivJR^cUO? z=1{h2>j|B6EVqP5k>Ix5NwI7TboK87TlW+sWAZ_~d^)f)X;vT8qt%s*eN`d1KR*t3 z)!#tud=cW)rCELbS4fW0_6QJl_2rf-E%|K`%`LV}7yGuBiuB-xV9P%x-}&1}_QubI zURnpDZWhsLqK)u1gf_M%qwyb;Eae4m6QvRV<#Mp?KL@eoen{p?@n4n-Jb4CO?33X9 z=MSO#=PnR+OQ9<%CwjHCqwB8cR+t9yR;eW?RT1(^+j9Sn+h)<}7k>q@eKyH<OSMfB z;|0V~EPR;I6^o$z?k)1YFAwZM5$G*xZ_8!?GsM?@E`o3S9K<9+blF4b!JD|9|1F55 zp|A>+5M6Z_th(L_)3t3#mUk0~>rN#_sW_u7A!&0Jw|&=waKAxl)Ri!p_YT<ZQa4@` z2avQ7M30xbo&6EF7xK7e-v{TfuOl=fnb7z`=$6NEoA?N~&ey<io0xmXYDijr1JgC* zi2f{G`hP0&-HRB9UL`tU8MjZXxOH2??M88U<6j}PTy%PUSCakZA@Zo+3c?{Z;&RbJ z_fH9Za5b>XABj$rTGHn+GQaZ`U?u&4y)J4x<}c9o6ymCKqG^93^vG2ZTWb(w31gJH z+ok$+PbXB~mC$?<a?WNLOqmYJ6;h5*#i_3DK&ZF4hgTormNJvvMg~CilFW<m1@`18 zM86Q<`SDEQC%T_6rR=zg(5eCu1KJZ!%m5p{nb1YjqFPA(TfPXAO;>?fw~kO7@exmo zI^PjkhgZ3MAWYY%gXs7iqV+LI)_OCrDye3#PbakTa`HH%1qjzggs!h6R1rpS>*d`3 zC0*7#Vw79j5xr9c&+kLBc<~zx2NJzg41cpUp*EG=w!FaYwpEZ=O1X`65v>ppa`VaD zW^9GaJZa}^{>iQFxxnnF0?X)*d{gcQcCZXF#)*+X+(78>SAlKu0HLB*z}kq77K@GC z()^Z)5?7uN_Ce9r`O+ZrClksLMJ$|2+6#-JJGc@tUKf+yDAn<dtH9p>Ds-Eq4R(G9 zm~{=<B@>8#AzF)*+wM$A<_`q6_aj1c9*0ZoCy_M!L|}QM=Mf(eeRwtus&+#%Q6%`h znozZvXVOi=?;)_W#dwo@kz#`QoaYXK_)2O?>(1P6y^`oNJ4rTT5uw|pu@^~~aIBbY z?!)A9aShn_MF;!ixpk-!`54I61*I9Zu0XUYw-Bmh_*a*B1zeU2gApeYeOUb8a&Z(_ zN|PKWOuxAh#Aa!_zMf!j5X4jUkSG_?fOIThxgiN%1Y%krZcAH3oNzYS@xpm(Z?I|I z37xqK;_8cuE|KDQxgJ<QVc%0KLy|Pky%R}xQyHNvek6~z7DD$)<xjYa+gs9(_Iw4& zCUGeH?t{w%hoG|ygW*!;XNwu{c?iTELh@%RYCEZ-7gj<y?k-??1>Ab?;r6}sGoIBT z+DK!1M7-GpZvsnhM|8i8eb$H<D8C)pf!&0jTTKy;zZ2|vUvgV<B^h1)Ik&$H(`Tf) z-2WtWBQprCtAylDaq#~V(>^Nx`5)4K&J<<mt_G3$1h<8ftZNb2>?vTw(zcF~{&MJN zaK2wW@Le)aJX2hAduf9YNDVvbJ75nUPw0Gcr3cy)og>jL!sYSrkv{t+5KI5T?U);2 z)w37a`=2GcX%@G|3n4j8MsuUC2m6KeoZF=w_jCf5|01{CI?B6H##|RZNpzYF7sg2Y z9hd;@dGUYCzaquR9^6_^1pCng++IEi=T_nX#=Z{8;CqPPv7FGKMbasvwbP!1i|rIh zuHHiQ%Y68C`WvA=lOcI&Hu-wb;kIoew;A=&-QEW-ANMEvvv}$|q&{azmAXl~yT_#= zjuYR0&R(JgD+m?JKs`kUy={IV?TONkw!O=3^V{6^i%0+XV{W>={U}4Q@!|kR%MdIi zU1jQ((0x6P=zCAWrBIy0R2ht=`MCW>#wsUV0o^3IT`o=ILDAYN(iU>0OZZzch(4ci zJGm2*ez$^KULlBs;v$EJK+GCJs9ucsx%ij%(q{fHSl<Fd9i(l2AXRFDbX0pK->U?1 za1hZIy}5n;A+R3;z{a=aHsT+ooj4wuKNs&){2-yt%pL2>o(6k^wCTyx<p-tt_3(lH z>3LGTkPmE}j3Ztb#U4{b=x5Q!E;rF9q-@h=m~zcqga%E5_#GLrbm&cqCQDmg|2ffk zsc>iS0$V43_q$VI@V2l&=0T#LO((berRLnFNY+X!Qt_LlT_FDNq%R=Zeh-L0N%fiE zf>1{h_i-uF04Zv=AjZE!^hOc#GY`>Of95vvNw6nM2lRj_=Y4T9!yhNqRfu1chTUs9 zbZ<NdtesT!0aD(Q;Y6JsiGCSJ=wb0b%XIsd7P{^$Qdl1YG3pjVXKf?&k1-%7OA*#f zwaEAo*uBZ*aq_c}tazDFH>rBp$t>aF6Cw6U1G{S#Sg*_n9|#bd(Vo!Cs|ocxo!dv^ zz7AXl@wq!e91`rc9}@lU3vNrlC$|xw!0)nAgj{0P`T{ave1NnMd<SBX^sud_K>YDo z5XX&$Bw1wHyN~EXA?`X8rf+`6t(!EGzwQEd+iRrlTSl_?pMiLo=-?8Wx-Gd1#O?1x z(vKC4y4S{m$Pxb+FCEaU;?mxA5c)zY$f;6oFS?f7_-9Fx(h9_SvH6)YR(?R*n?oFc zA;~Ve2!1o|&>irC$Q3VjlX&!N#g_R(vbqAqd(y+cB?_w=$}MdL$<BO_WMk4mIK-fr zA416OrC^_unzLg&4B{W<w(v}_iK5dL?}O;pg6QAHjePHgi)9P2?Sg$o#@P?NON#WL zK$H!K{kP&QUwM-hIbyef+}d>^dXf~?KMdmgyhLx58un^243>*iHDqG)_C{`}Nke>J zhNi=-xQ&%|)OHM<?^sXtIdQ%>No9CkDq+c1qOY$fl&}W67Q(sjcwpB*Mrhs3gxbph zcciHE@*iPvgH*12WO{g@8_~Z>FaFP5_#IpYUFrl_eYlipf~c;=O6anrp8hC(cgN*$ z8FMO#8>BER#hHI>2T?u-x*Z=A4akV+&@`BCm<QboX=SfZC0ZcO{$c4&Q(hx_mvk{x zWH51BEwF#xNAwG60k?>^{a_3Hl#Ed3ECPGB4@B#4iJrcU6d#Jr31ZM!C2b#(Wv8h4 z^F)$;RL^aaj0NUNMcUp0fqrI9u&)2pgnI0N)$v0}anMUNTYAL%M5h~N$kgd7uzRFN z?7W5OBT|kevGgFx@*UCm><wVcWm4V$5U?IWqFeToEOZ}qFUbt@8Sz}byK;MeF^H+s zH>Qa;T0YNh+f&>I3Fk*|BeY#ayXUWv9GFhpPjZp@cq^gDCCk)7klg1Z^xo&NYO#gT zR#Dv(?}2!`9b&W>59bhmmyZDPpg8GMq<iZB8qqmru=?sbu&t#Yto;HmUvC5Zo;b4G z#3)4~{X}t*-ml<S-G$I*>6nL0^;xr$w68ou+Wcb)UHTKDo3?{!y$HG$6~OL$8U_Wu zLA>=Hp*?qUYa>I`N5%mAMoPX}97-4Q+5M!yJYSrVlF`kj3qkamMD+0kgtFfw)a?Oo z4~bPz7O9p=rQT_S_+{zx-5wY``4J?;Wh^jcF}K~zAnCOkL_pl@)2{*RS`Dm3rcm3& zBmHn1(VpUqt7IZ^rF3ZCSK;!_W}@#u3bu9`*nf;C^x9BvK~YYRiy_%^3B;|XVSg%4 zb*YS5uXB*>EvY%n?&fCP$!(Z)XzgVsYx92Sy4(uvK?Uq78UOV^9WkC;2kiLnL=UE- zp;Vh-SBQMPGN>z*VOigHAg&bibY4N|1kveFr$G0GG~FBi4$1DR<gxxk#ONUg?b8m# z22t$k;u#i6dmABMzQsp`c1eAnD0&$tgR#>>q<vXNxm~1K-NjHpf5PoCS-03bManyp z=$&^GeKU^S^7;`fc#;%veFI{dG|4Na63&%L@Wr2Sd*8$D@*!~UAfx}+E+y1U+VANy zpFUfr83V-OefI`w7k$jFK)75c)iz6rCyH{WKTGB(EFf9>-$0xtO|9R%gzk~XK0#*S zxl;To*O14BuRvF_j@y0Hp-cFjP>V7`MH}E!FBNW|0o}GGB)eOh)$Ov}@v)4rX0|7~ zL;Tt&VxF61=v;Rrw-uMe{!|%get7|iLP?e)E_~CY+&Z7Yt&6zQNn&K*^JMhx<G_x4 z9?m;P5UshH=oT4iJw64JwSyr3`fCsyrR1N9e4Zz`jT9aHC4t*VlekU#f!jO6^yf!O z@tU1zzSN;P!v0>VARAsI5C2U>7mXow(VK+6pA5;?IfSm4zI$Cg;<lI2zgiM{^brvK zBsx=+IN>GOcf5q#SE9*~+`g0Ew9{R%|8gHGhMr7{swuD^DZXU-9S|2k4av*WDV3!I z8&U%7gU^9Y5a(8N1EHs-S)I2U?01vFhPwb8cp;&oqRA?W8l#0DZb`3{AH5ybz)=kx z)xc2=9M!;44II_LQ4Ji`z)=kx)xc2=9M!;44II_LQ4Ji`z)=kx)xc2=9M!=8lN#_E z{#3g!>`zTJ7NjQnylVYt;c#HBqqM3pK5t5mb)kcoXBLZfp`F-aG~^?h-58!&TIEmi zI=fknzWG0sAU`FkmCK_h%xh_ZnX#^PU*Ts{YKJGn%93|DK2g@js8pNb7Iqy1{Vo2s z1y;`(Rpzh=o0^QOUnI>PZ_G$_czwp75=+DW8Ow~xj<h^SVO!$@*S>0N;lzE_afM#P zXD{9E_ZsKhN;edCHqN({Zg7@7hA75)K%6D_NN}DlqbmLzX9+v4EafA@@mrkTvMrWi z*Yfki&L?Z^)yf|D(pva+Y1O=zv#&1Q>Ax~>%H)iyi8cF%CRzPc0_Rx#7nbfUY_o5; zE3WW@@;TP}WTR%4=#G>Wr`>eTkH|1|d%#;@$sMnX-w|cIK>s7~<D$7q1=a#f@s=VI zdB>}1G30H=Ii+D|X-YU8E+1|s--*A_LsWl%^r`J{3=@S9K;ea_`_Q;ob!vk~4oE!+ z`;+rWM=ctjo2W_(wM}b>X=56-)QgO&!`2OvMcZ?Xt#mskX^#<-jj=@ho%XrWT5H4Y zN^{%e*VGvLei-{2+0=)e#L^A^&c?V@F=IO;%aP`GgyM9?Y+fhG&yJDfVWpF1IYL&G z(9{e-vBu@P+yz(adRmYen4WZ~c9;#lTS6^shq+L6xOSLb;<dx5d=`r;^Xp=Vh9yqH ze!W$Qc>W-2dBF_LL@fkRV9B>w9hL&8nybl^5TkMKzipj}d{<Hq2Zg@0nVh4Otf65x zz9Qf+G}_fn#!vW~2AjoX{ET=L8Q%lYAmesT{>NlA<twz-U=5oH=c?ti0+A*zaL6{N zSLr@~YT%NjL*<U|1*!}G#;%<Bb>6X|AucsIL0YnXN{!G2)`v~#Nm1zU&<~YB>m*_> zQx$<9Y;(F$H#(L(*bLVw+cov^<Ra#c**Y|=x!Rtb-BfK)6K|rnzX51a+g+OckEtzI zuwUA<NkI-@_u4cQux)bz<C+Ng!!=T#e@{Tn>hk)U>r?x&H$ER7|1J9562|Ada14E@ zq|!1^q*6FCzZvTsvc(gansg{M-&QMDu!M44Y9y@)i{mBoe#K41^aCrK_#sDNzRgnD z@)vDfS2-WGECV4N<=Lr;9<NVz{4mmK`BSa)9M*Yu*oaGO=art#qa3$s3+HKezbeV$ z`9Js1U+4diTmK0EL|@>Lecpsf0g|KuV`CY(BLx_jnuK~?x**&AJx0X8O`$t13nrA0 zr9Z0H{n1xuf7EWa^lSFtQM#C#V*y<seSw9E7H7%hn9MY7q)Qy;N*m_LtaaY7R4|=s zU}qT#MzsdcNzXj!9R7OoL0sjcxh(=4!u5{$4V7$zwq&k%4p~2DteSeYXhq!ZSgKVb z$%h!DMbx%NJF3m`y7%>W**A=?Ai<E#?D5t0tquK%%cy!GN$ODCKHF(lzi_do)rR8! zty0E{yIJa&?oXm!ggxYT{fdj$`Z2sB{CP$KQYRQzW1F#_K470QR{EnPX)H%@JmSSO zt7khiM>}RG;IAX~?^hav&QHwY&(6Oj+U*u3Dm!0n80)1&-cZ;_If&&?p!3PUG)kim z&1~$X_7T%QU`h?Wd&p`GbA(1GhTP_GuGVe#ZEo$lkJx!Ps4W(1s4p1RbOSBLfQ3!P zy^!pq;-0D|6KgK+1x>^qZi=g2L{#4RT2tcCwf53*Ve8PfHa+;EJdTjtM$>nA7_TPn zj5f_Rzd2ZqmEy<&vwV1sB(G|<U06%a%W5=0e)PR)hP}y<fw4JyI!=bG4B!|%?Z75j zDq}-wmGidhJfr$oJx)_u*!$05W9No&SR`@C$UNDr{<JMB$t0AXgzr6-^4oR!W8%0Y z;(!p>CrOh$sy!PS5ylkqcoDLz7Bb@(LSCpn^o4(HXh{v%!+=De9?{tt=y#=!xezlk zew~lO`@DA}`YLQ;nzxlS<@j}>R?(*1R0B<8GR%+$CeEkBFM9VHI`^jXO8bWY8Pbm- zo84PJI~>19B!WT5>C1xc%IC)Xr;O)iG>1>}%ZTw;{6JKy*n9&s80R~TcV)KWHio+% zvpP##qtnOY{QU+@N=<f_unE>;jJF$WjCuC7b(zC$g>BNdgwA)Q`Rt+b_S)gP?bQy~ zEzz8z%rx{2rJbIk_|G)`<EfFEiT^}BD>=-B#91nHmeQTh(jd>kg4AScqR}cpCF&b| zp`nRt^A%<vHD$6cW@O^BO(rgznYgsn6PGnj<}3-*mo=TQY}+Wdl=;dDGGDp1$$Vu+ z6zMFTPp1%>9z_-RAA0Kc85_$rAOGg-A~OEPsA=kRqD{teI{`F|<KEEJ43nnR$ShVy zG$TUurKN=C+oSH~g}0-%_xOT&dY~_JpdvG)$Q&r6iqQ?p%=TBCr49RgD)(V@qU)C{ zV`u5^!WMdZ$<$UR=IR2nH1-rYeMZYrc513RfjBKZT`rje_Z_c#y&4XC#)BQCZhk|= zP7NGr<t+O<l_H#4`rT-Y%kWB%)r;nkV&JzN@zo(Z_%(Aohlkn5ho(5xt8Ym<o30`C zbio6rxaQ78nOAtioosQfUB>7{(D9>PnbmX0>qNs6)iN_tu1_6eSEDe;YwB5QL4r@s z23CJ!L2IANmr!zn!>6VY;`<AWrM|61FOX=Q)ZMjqxKt8t%;jt(|A?!S>uIhvk+{IN zaUDjD|1r=J?Xj9o)Q#<NGx28j$XXY(hgEka*u(BDd%?8Ft)Aauk2Bu<r9Bp4kNJnO z$F!(DEM_7!d6fv+*dAEn<IAwZ8Dg0o5=s*TY$0UYLz`!{MB`)TSuW8A^K@;-blH{* zEUqF-b2e8F*H|uz%QcJZVy^#~L7Fkb&*Nde<+H5j`pS*=tdb3d2h-Mh#$pYZ8iee0 ze@7hRnEmaQYr^5&@#0$&wHg>#d^oM8#Y<aCQe9v{Hc3=YdX!{C83P%Qv<n=Z=`8(# zN?h({=*ul|V4<^&kAW@DilTI{#YLOjHQwT)-fs$rjo~&Lj&VU!W=?XU-KS2VN3U;_ znUhqAN$%aEt?W~~bhD)cD@@3nlCg8LQ8V$vn$q3=<0wmN^ct^bA{%bl*ddMV!Wv^Z z9lo<<B^Ha)$kU^SHl?FyNU`|*F7?n>ou5%-rdP+C`A6eIH|T{H*x$Iw<vf2>YD$46 zG{P0}0C*!x5*nTuCD-2MBKu$qRm8dEG^EIz5*lJRYP4(@*`jnTVU@5w*up$!hF2}R z6#W_p)KZ>kmM&$uAtQq>9`$$H4Oxg5!e^=8x?8b%)rFc;dUpYLTCa%;!d}%GM1jSt z`e_1JfiJ&`p|MZBcZs%r!9X1^NK!QbBCA>qqHBre?~oOo!J0t548UhD;H0SMb>bwm z7rU@V_-_}ySFPqD+1|&~t5#~dWaB`6obdx{Pw}b>Kqw{M6KbWdLAB9^wBxa4!g!y0 zQ75s(Y7HTux<$tw1y--R+C)WF2A5PZ?bknt!=e6Bs8?O2$!yUIU}k$x)3nj5FeW_D zp)xftR%3jsT{Uv;5G^xo;QK#|$5W6{cR7Iqr&q1LxWSphCtX+^0OmDzsC3PW#Z9yF zl<szx3?^CT)plpe=>*2BHBgSHoCjVJ6S<<4nbb*VX?w|nf1i3+qa9JS<U5L#qUj2r zK6MQyHg@2~YBs~D>QG>9a^OG<XBpq7NQd?$ZLFZRSG9*&+Ga$cf&{NRG_@(n;Z^m3 z#w#DRjL^M0NvsAJfZqgOERd;DF`-3^>J4zlp75FKetKA+nj<!4lx1uUb(V4d&eHA1 z1vckxHKEb8aC>O9-ME0+mV-5D=6o!U=P@ENYIIv|WEH!5Sc_>|MK|^7%lK-~RmXMn zIE(8gE*n=Tu3=o4aLvM_^yc{<R~6xx##&ro<yu^Wc>bAdIoC8U!C5+3J9LPPx3y^5 z%HEpbf8#F!rfs+!ZKK@V>44MKewh;)x^s=^dOLER!LykQKN|fnYQWdv{a&5i;Qe~5 z4aAywzf}NY-ftxly?l^YqvxU0DBlnQud3o9?(cq+L=P3G{OUWM#>La)cP5FvY+=~# zRrBE@-9S)tYtjw;t*UW1&||HRdDU1=8SMtz(R1U)L?9;!kuyybG;{-ROw!$e7WD8h zu^J25EKGZ~DU*YZe$n1ePZSO5XdMOZ!n5q^bCZ43X=sc~Wf2`rBV4Yg_o%B#74g4? zaT9CCvj$iT$fL#!LWyJE?Y|^nQmY{X+9RNS{$t5FQQapa3SQ6H7>Km>s*@lflCiJ; z1lZs;d5Kdn)2oI8AMaHoBt6v0P<QmIgA>IQ?&Xfx%m~-F^W{c3p#H-4xoQU}pV}TF zU~=<6c;DnTi?9f0ks=hvVR%uWdY7I(T8egFb+OKnih+?(wTq!jD|N7zaZ(Gl0LM!S zBjuW@DP6|8-!`XD&4SpY4qasGKr|MYSCbo&>k9!lQmsp6i%@3AD5~8IfvMVVxoQT& z<eIAe5;)cOYmH78z0o2Brv9oycIx-U-_a_(zI;9&mFnbDkC8GOOE&hXJ2WSkaR9rY z#q2c0tIm@wK)HDu?PT1vfmdo4#zdW2YT1i?=2+@?F9t{2qko9ATM^wV&1cJny2OJ; ztU}hF-ZtZ8;nW$m_Nd#<mg!YLfs2~;)x(al!#!o%7;6rj3p!I&yZYfJEoq~M5h1CR zw{2=?1?yij@lEon^_3W8=?;dK*ui)<nehX%6qK{HI)+=K+)~VtN2R_jd}ZnXy#2!$ z$YL}jcL&4vB!A0zrV918cov1qhqTRHH|Hdo^jGd>sUmGn{2ugcH`Zlr-@iZY+srL< z64JiOGuBO^d)KRC@@y!?9|$pmvl&5=o{&9M%xB7$#+)ki0jT=t!{G<A_S;<<YeOZe z(?sl&)LA^3l=zI7Qx_0qE;6k)JN0z2QeaV%MJ5iHncmN*9@Un|DLPBe;bodyIYFx8 zcQvSPk1xbRpvwP;*0`}FG%1z0bk369t@WBw$!9!`Ry{3Yi)FBdFOB^@)l)ty;=j7G zyu6!?^D7Cd`+%`_5)YtmJ4t*h8zW&7$#awNxNkl87g`~nQMO9}Gg4<E^wjcme+uks zm9`!Q%!q$CG%7V85fZ_quwS6S!nDHD+Lhlni_&`4dt@Uu%7KVC^@2<BA$h^zEc-#; zBOPk%T(XjYQN|blQVos`uiQn*SJ0MfmBQHF99)LCinpVXb0KzCv<ZA=b(U~)BjIzc zqXP#!J4?F}8%%L6&eHdgIdI78yx~>?qj@*uyx~Sd#>n`<S9asvR)Lx}NIe6IXCZk~ z;82|NhASX&R&)$}6(=kMHF4D++uLjnjZ5vD`K|MYk&-++wXg9;yy!crWP`J`2e9fo zy9AR6irU`bJ+8AN0p=6RbHagx@y;8nG-!x5Q2n#BVs>2hE_<6j&Wa)N)t?gx93*GH zb0yIbo3rAg7J`-xCY4`!DDWf6i%n!pXT^wCf?N-!z4{{p<>&rPK1md!f8YR==vmmb zF2BeDaYB^1jV4C+{(-8WGpn69a9Wnde91G<X4KW&j7iw7tSiv8YDV)s@zoPp{QQ;) zBf&{lR-6b9VCw8Fy_8Vq7H1h}8d!{#+GzXyT}-2uyB$8ySRBGxRD!o<aQ`#K<AZnP ziVy5Yu_LXkq*`j(m_Qq@;vaOAUgOMOSA0-{&g?Cj>*qR(e+Y-ISTb3>#Lp?t8#r3X z5~%5}&9ytlS@N8ombWQC*Lr?to%05c)3UJkg@|c&&XT`qr2YIXL4}AIThr<^I)%3_ zEy~^2`rbxaFR6D$CDa%(-C)SZjP*%HW3P-JTlia4$|8yJ`invuIDk&(0x)a|Mp02D z*_jB4ze*K<HGfPrxwGVW;Kd7=<3r~xa}lGwtHRXJ;{H-Jf1H7qd}`k+TJ)sUeA->0 zs;!4r%IsW^`s@X1i7d-HOYSB|S(Oz`L1&NZhG&VOiUk#CqP!l}q5*TcU}VX2mgeYD z|I+T6f;me@f&(+CAkL%q;fi(t!c4DmKJgy4az!j3zSXuA#79J+>%F@Hbx7K0M1%rR z#SN%W1l1_j^aj*=P+A1?nbRNwpTz6+4p8$WazD0Oq|kEzIg-euKE(@0{1o5uYfc{Z zdIRtZ6PPYMvgkr|#(G8Nf*AQ?tt{>91_GRJoZESN=-hTUo|_ar*A??dk&2Bs%GIvO zTVU0mNG0ToR}+V{8UwTUr=So1Dp@@=R{B~Dx3IkcWij`3wbTUS3kd+}n~TLy&sEo$ z@Jv<~7R-?;bU~Y3bxDlFRHzbVLq^?Ww1&WeI9xoL#h|wURd0-mdiFA`WP0{jf#KQP zP%d6HzCw(Ve}P3!gtc}AYi)JAsgVWt+`7AYs+(d=IuSLQ6q!u)?w3S0KgOhUBPNeY z;xVzr;g|&Hnu+6O>rA4`B!(%*dDI2Ehe@uRAqkUW39DiW6U>Ahr@+xo5E*6C({d^X zCJF@|JWU7@K6G!0@HxC>F~d_{wt_y!qn>;!9F{i&DblfBNh9;AQPcy}xgct-)73tY zsHRtG)go3ML}qFg_Q{9SEDwSHJ{9+3tQoA7W?-Sm?oVbG)fW1wHtz$aa^PlmvK)9C z(c(a0h#_^iZl)0Rh!NdFwC-8q<cz^M_kbe{1oq<vQD&SS8DX{?7|b{)K(zW9G1IOA z(nlrfB$=#=CC-l}UT!Al7!^tUSS<0dMu~TTRK>BxoPx>G0wT@K7>qMkBGTlU4DSOE zLtl*H_k^O-aA<)=^^GOwOMZ?H5{Ah!*ts!=?SN6d2*Z}d%;G&nD9Z3mVff+bsBSW2 ziMIix0r?SSGeI+DL8Fu$vtv;Y$5L`IMWh_J>y-K5ndMj-OMFVB#L~!Bek?IZYH&mZ z;}|tA2J0SUILu_&+tl>gF^2CGij<@N8g)!8Wye@bhnZ5EP5qDpJ2fy--Kx{$z5D}d z!gn;{af*8T{HP*0BP&vz^}x_#ky)H7V(5ams>YI3KSVP3%h;^mcqSY!UMoY@#$(q% zFbqCQdQ=1dS2Q5gKN%geM@ioBGZVDYsO*tVp`kIhW))h`hxIGh0Sj%jlYQYcX;w*U z(^V}k*0UK}oV?I{Im*hzVfVAa+-5XtB|0wesB&zX8|R1!R#)1_P>#u^S>|X6d2NB~ zY!<e=G60r+Z1#{{4==-U;SshP7&OtN(2LBj0kdth6CrmP36TWWekaeiHQ$_D$<WlI zu75N#zfP24br-xvFK0!+oFSR(W_L3-#=o7mF4QFiCOb7LFEq;*VaROQ9+?f>n@Z6j zlF9$r2L8+%oXnVJpW&=%uV+hctDY*AyW=vyCAanQYeKEkzLl&(^K861vWGmTa(+i{ zn>TBF1s2-kW}j%Z#JWsoT<{OIH<$xuS=+3MSUS)$E-=h?sJS{C1doKo^!C6aTm0-Z zj8<B)nxQMy*=Xgg$g#@wXk)0IM6%-ARENwRih)+~f#J5FSq5eG>PV{5IYjE$LR%ml zKf9074y`yVA}S#eM-fE+Hd_NN<I9Kt%w}J0{Jc>6BUHF%C1_F~(#^^9T-Ma;WjBn& zh>KSIYZ%M=9oBxD`(f%ylr46#>8+T$^)NGQTqO@vQr*DZHU_B<UE4`-H(Ez3(2?jN z9^kfVdQbQ?8k|dAbfxq}=5Dpd$zt}NqgRld+k8qBqc=|2+`f`NujUWf`0#7oq95@w z13aeurmvazJ$kSkmZ-LW;bx-hHTNTCHFzOiK4Y;AW5Y%B>2S?(pi;tdbI<mwbxcKi z%1=LJY-jx0W=&ylUfrGQRb}_<X%3_2VGJB@G8fETnZ>eTHm7AsKN~Z1%<Zez4rN5J zRTg?UlPWSIr~t-@pg#avRk!?2*d{Y1_|3KxD^#O^`F_0(Or&KwqT}uB5Y`-;QwEu4 zK95^6f+B0Kafge?c;m4|9$sU)ESVWaN!)#`U?ekZPgG|R%a>t4O9v~ZsOnU<H$^$R zLOM}k5gVbHoe93SNR|u2<l<8$jO-h0(4S(`V6&u<mLV2*g@Tf?8J`l;l9`c^7H{%I zpDNQUYm|a7X5?kO&9KXYiPci*eBozi@RcyIgq(sa%fbEjv=p&Cu-@W#)|O2ZcMSdo zxrLmX6v9Rd{0|59s;a{*LU_3-T9u0}B5UBi!gKBF)8+IIY8b_8LU&n&j-|Q69X_?> z5nbPYV+sB+`5o6hKfliJ?Pr_i_x*jQTspraWg~NAyUz&d2D4mhjCw`VnJ-8D7kb%z zr?=DgGKM7$2xPPJ=4S=_=5xip*o<Mx0|FBwuz4oTt3GA4>r=x-p2mDHi}2-}n8L@W z<o&*HaKsOkyT1+`$e(vD`$8u8^}diSdEn-_>}mtWr?1<;<JhYGJ8A&g)K5=n-O6yq zVJ>tnI7xe&A}Oa?Cv{z^(HpMiQy0fz&VsZ2NxNwo<b*V(ZuK=Z8+%>OgW>S>Wu3`+ z;~e%=aec+*B7O#!rNzJZXN~(q>Ednw;rd*elH6ocBK@Cnqm<n!E}=HWSB3P`xItjW zl>)Pr{W*SaLTynr{A<lk`{VM(<|@G)%;HsD|E}#7SS1`S{xq+8^e3u{>9fryb?ZG1 z09_{o0O-#0A0>reFbP*kYIRnY?&fNBVsMtjzC>xHGjn|P66{1WSJa`)3j#}_D^OXa z1Fd-bB*Q0GCTu>BItwoop`^}J=Zv5v$lS7EggE6w`v9G8;UE?&fwR9IPnh;L+wI%4 z)B4&rBU)q)aaweQ54qY6zJnhL`co^XuWGvUZL92Wmb|EgNr3XE0HkdlafH~YFoy}6 z<=c6;*<ZM%03M%ugyk7nN=LB+0a<3YS)5Bbd{csUf@?%<{gTMguUL$m#kdS{I>{Ps z^z{+%Uj$s=v)tApQZ01naQJEwaeihmtm$ICuuo+@-Lwxedtsll-l<!zM{PKp{wVU= zs(CNmh?!$<hB_P4=Dl!VV6k4<r>?t8*h(*)C#nrpng-8^8oak5hvxHLqrWrD#Nlnx zoTDX<)OInWS*#YqfK}jR7Vu5t%D_L5Jy(3<v!bK@pI3j`!Fsb$ndmFlNaD0T)@OAU z(M6b2tm};+7IY35X<}2Mx*k=%vM17m=-fOkxSZlsd5=dl^ypxDN7Y5Ux<p+pMr8kX z#W_q}`cHt&`Z)5he0gb0l|??6>Z&D{C6<nXL8+ESZP_MEHFe%wCBkRu`w_D?{dEIc zuj86S-gSS8DCVX?EzJP|OT)Z2t8VO{^!y|`iaKDXkY=%o_U}_~J*HU*;6(u5g7dYr z(IX}GY9=+(e6?2Cj!%vr*0gwvyc+e>9c(aLtcL^N5H!|@ZW6zxM^Fj1i)C~oV<$tC z)GkgUE`PO)lOrLt(T&=7EW@9W9+3HrESD^P+suBAOg!pOunt#fhd7&HL7tY*t4>2Q zpQ?UH1d{#Ozdem=P~dNb^!UJQ_Tzy{Ew_K5uYmm!X#TWZW2J!9$lD^S?}#L#^*y1L zQZh4LUacN|N`Xyt<*H+%2|ga!#8!H|FhGwXoq-i3$W@)`E*g(Eouv-}H=Yy!&&a)3 zu6pg(Nba}6jNC(7tI@2UiDKs+F{?S}M~QEU5|20xF}pa;(QRZ@BPA^8ovY4|ChBD7 zKc!NPI<aPoeBS&U`u(4x>t?W2(1?ky-=>TD&pElX#FW|>|9|D=uG4kd=22_<Ym@%^ zqClhaHxKIZ2i>aKeb?&F2;)S$bGlm7>+11?Iik@%UdJ1}u2<FRX&eHbhCp8RIu4C} z62CRt*u1$imCSVei0)62ZwIndd$BV?W@2>E$v!rt+j)mi*d;H~@ROY!#2K2qUVLT9 zb)PYuNGz_g6jk>&YIr4^T)gds(U%;0<*i#+zrFusK=PgAxBEXc4j5k=)h|ej{T~_Y zjrYjM^`c1?zlCv&yuEe>-mt_Ugrh6)mW40&KgjD?6~C$DR_Bx3x?E9R^p`s<tj@^r zWqsx4)2C10Uq>Xp`iD4UO||OATGKF_xuk8;9d+vew0<L^jU4P&`^h;Cv-k!pM&`e? zuv|T0E5BD((S5axr%4;*k9XZc^ysWuEbk!+c0z*==_}(1q<9KCdDWdHml+Koel2q5 znQ0~Y6gGeBmft2k*P(o8;@=m`J9d1C41K~CyNGxT;&KZ*h0lz<i!}b?U^K`uj<KVD zrM>JiIPq1;vFwwGNTK%tjLElWkvhyOgG0XZC$ENL{qB&izh3nY?w-B?sdBvPY-S=l zQkco4%&U8e(yIB_7pAL>GZ+f}#DYXY=ltYj*mlwj0OO#~kdb#aDa25NUW`EViGwYO zI5%DWbb2&dvYG4~03?%x3rJQ+ESiiiJW2ZTB)Pn5@-4r!AsnH^V*eH#S8WlV4%L<n zn+#!e{U{p6OGZ<B)D`*K>{z2X2N-Jx9gSi!1Da`N6bU0n5RDYA`3tGZ|0(p)g#QDU zD!YrexJsTrxSYX=K3Tu?J>^X+ZPH_neiE@J^FU!+UoI=!Z(&kM6Zz6Mu#SOD;k&%& zi8y^SWX-oPz3}ha^(XQ*5?8NhHIAG8uQ~+_7<<@=B$N4cH7WypJ%oJ=hUZs_ncV=q z`30uA1`@$s<-@E~*cr(V)?DS2Z9(jcw6iO+rSW~*-g>98w|um9*^MoSl~nP)$2VFL zt3?Zx>@<qq^m~vsnS0oxmm5AS+)318DqsX(P6TR20k5x`LEft`M7`>nei7mLjzDC4 zm^k}NsYeeGqQL1Mb*UCHS?ersGGgML<n)v=8V<*6vx%J-jrmVPZhQG;Yu%}gfW(ur znY<fV(KbyX)RLjEuvsN4SUnyw>ikfyx>%wfiC#wZ2zBs(0<KItvC00_%B|g-#`~u> zjo;t1X?#L6`l=pH@ynZ~-*rM$d`>g^V7I3D9hjg|g{tg(T+{fTl&0~l<fidEj&B;D z-;93!u}$$Q&FJ%+$y?cszpI(Ny_)IgzpbzTcKI#M^yO)$ug99%;}7bqphy0vy;`}n z^Xz@9wELzTEejGgzQCp8`qEsOP&nwjdaDFz^M4{`K^IM+!hN*Ik8D8MPYf3#Z~Smj zeCwEH3k@;f{PAVdnovUR5PhsmqndU2RwT)N8DT><+Ma8Sap+E*-m-gSzpP=+Y*}bG zc;hk5=5J$cgarBO_!#J56I7h>`V^!3w<k6Q{TlRfj4nh|eMtY|GX}5(DKBC;+=ji( zGR_*Gv76(UvMk0se8FqOVMOIi$g~$a18dkWW(#~}oAWiVf=;?IVW7P*`Nk2}fjQQ~ z#2ZJ%4a|uvblf;1eqc_#?98ukacos!y_JnFDgG|y7dVWsb&h|V61twxbtZ?pva?x6 zQM^C_!l$ZjktK1;<WLe{v49Fq7P8;7{rMM4*XC;U{?uF0%d7x))#4N?KxF>fOSLAJ zZ$Fs|kY-kZL;NbF*Zg`bQSB#!{n^3$8y1%JLd?mVF}jVGMvfzt(4+%yE{|Sc6xtRh zZSw+%eKM+y)>IdVw#RvnEH)7yh>D@{dQCXIe;Xsx>bh>-tM~1QqV;)68BOs$s#z9} z=7T(T-KQFFq)ke72#5M^{dQD;*{$E2gqnV94y|uGWkX)`yc}a)+8Sd^#+r<cZK^ZY zkuK-3suB74mN6<@le|TSBlFw8<8TZ`e`FRbf$(R%Z`;33Fg+-Z#01)dweB`e);c6V zX9Z*o`)&KT3Q>1dBQZ(bo%)~9Ji&P5Ux82eRA$TK>TSWsyQ;GQ75^zkel^_~>Ijvj zE}@keLtVM>oAgqajwE`GLgAlf3{CR!%vsIQ45HM~iqu;P2`Lj854*Z1^pZFqL$1qC z?PvusmAJ(jxSFwAeiHSPugv%nTp6-d`OhvdNnH-wqo!&Y17YV)L!qqf3zWpCFTdU5 z;+fQYWlLB2$gN~FK^XHxcZ>k?lQqAVF@F7G{E{2^eUGfd%5#Us^+KY_H|b3H)ydYr z{8Y_jP4B2o4Lm;8FfG%w5gx8P;lawfFigr39<@aB`)VEw55wb;1|BmT^GIpTBOp8m zX&wV(Ji5ioa#aJ5li~4#=%&7JevVGiI-0;)a)=i;u|(%IB>E1xv1zp{lI2B+{ZbJT zu~Nipr}zCU-;wtMSoEiK%c{15<?{gsrupo+DC`wj*M<_yFx(O^!`1xy_T>Rt`O4TH zU%h{C7IsOOuLRPnjq_9DYtM_X$q2JkctL9a{d+UEQ$uB6`ygXzGUr=lr>5@T8?9$V zpc|JuiZ2ZI(uf9uUXW4Me`vb%wyJoz5>GZrn?`uRxYXo1ZH)uYXMU8Rus?QtkFB6n zt9QkV<Zu!W$<ER$ge$l0kXoFAQZ{31*;$)13THXA7v1IHA}E|?@37D-bBL)BZH36A z_K$37arWvo74<@vQKiqPbGk}w>p?qvZFKt9INL{JKz9h#1nD3kr9tbR?U$HAKnEJA zBp9g5%B-3Fck&db9-gu&<_V8u5rKEPv<^ecy|wzwB#M+O0T)M36fL0Y0}y@p^`BYp z{z=vqW=X+@BQ<FxdEekDo1f<>o`pOI@tn)E7teY1r;UjwNo<;AP9(|fNRn$JNoJu1 z`9`@Xl8TO<C3hif=3eLGyV#SC>aru^r|tDnHTvs9WT%dbuklL3_!&UNdvFBe)$sXw zMAiIEr6qoyN8Jb<BH3Um#BWBlkVU1b-M^Pzr8%-;eDUMJnI7bn&kv`u^EZAkwBk6t zT4ks!esADwYhhj80wElgnk~c}p10Sz&`MR~$FVFox*friRDOfaQhx4U$&24Mw6IWA zk~)e2Oa9^Wv?xL$=qfk~_w=YJiAXZHM_}DvggBxA%rg5IWRYB6JBVGLfvX{(4X|2( zDX8ovsmox^VNhj{k`;oEGNj)DUIe_{Yu*1(Mq;<7mJkDOydlPhMPl04v>M<+;OKc& zdA3cyy-3#e)2Pnamtp$ua!+{wRua<pb>9k{2DR@!sWf~`0iv!OxbExsz3W_6O&jmO zZ(G8~;HcCzq#HHec~uoTB~N!w<sH_=T(hby&XY@0@0UDBrKXZ!x|!d&)O_uTGk=)V zk|fzoJcp*lGnb};(m|xHxzX02Rhy26SuEq9WIVjzdg+yG64pbK<*cacx9QLZXT^pd z>*<9{q6O|pamg!@u5cWFgHX}OMM#%OC)W`H5)(GwSR+Js!Z1qgS954RonF?yt=+46 zrU^~v3azKvJt621pLB8qK2CR+<GLqE7}PlE6BDZ8o*JfTZibAWV9Dw0G0ZS2FSY!J z_RKKLX{eEU5o@TxwnkttqaLX%+2quhRVH3`{E+3m;V*!ly>8XoGd2c3s+!K^Tg(a= zpAe*qI9*F@!r3`)qtmNBh6ydP-4Vg=Xo5ANCAP;RSk(j@h4M>&I)_T3igA{hIG*a+ z#hGj7bh**Y8LjrWFVVteWv-bm>w<&alzmX<5?xW9i|_xLExM2PpdRb3`h~Dzd&!E_ zJ1B=&-3mfH1U>geFs6qn1w~VsAbJDnE12X_53~O!T-XZ-z%d8YbgCptC4R*Rp}1(i zK_Ah;Px@!bQ$R{{0(nXdx%35{`+MDW^O_b|%O1Ij?9P?p3_EiNl(3%g+2k4=c@d5r zFOI@R6z#yZqIC@DjwVnY1FD)pbqwf%CQyl)p8SE_h602TNh@UG=%&KYiXqN``flX+ zphbCdazPa5Z;t_{F-&ev%Mn~i52DBks(+nu_|lFHn58xN7EZ?NGAO|SOK`$ygLlue zS^2~WkqjS?{vFl8|5Xj(DE0dRXGL7lYQ!<N3A(L(cNZ6Qv%hype9#@w!xnVgj3G>v zz_uXXGU#Ue>X24JH~UP70JIx?#wXa;#1n$<1RiaIZWio^ID&46F@%{Q*tW#m1>Ni_ z9pVhSov~TtkyX$jAF@OQlZREyhm;~7a`3sKNF~CxFoi>A5e_NrJdjC5Yi){#C?Xm% zupd_>62aP<f+4SySjV8-#iK*e%?8*Z?St+PJX}F{$KN4zqvHJUlb>RA3A%ZqGo*9S z-HAu1pu01V#Gtzik7I-GBp$~E-CcQf4Z4rvkrZ_E`ejJBpgWnz@j>@-JdO*xkLQsb zba(q>I%%XHy`LOMD<*2C?TZn`z8F#JA4U`dQw_zym|F~t?Wui4#J<>25@SQLFE*5_ zhYiKP*k0_5?Zv*>UMe287yF_Eu`fCh`=SG}FFNSR1KW#!u)XL9+lzj%z32xWh<?z4 z=m#B$e$avF2i=K&(4FW9-HCqCT{j*l1>Gq;P7JzF;L$Va?#?4M=<dOzN6?+hqkGWZ zlg9}`_lZ1Gg6@-eoEmhq_kBp8p!;MVrv%--d87y3X*|+`ZpKqXdI#O7@Hjc>?!%*3 z(0wY8vx4rvJkAWdPvdb$(A|&6=|Oh}kBp%EbRPYJZg#y7IW6culSkj6`z#*k1l|34 zoE>xz;4wJp9>`-*(4EO6Gw2?~V_?udn8$#i`)nTlgYI+wefu}A3;#}-o>niv$Wx?{ zXW+p6d6%)7vHv}KGvjx6TNroLRPx=qrKVCA9%?F&*Y}h4Jx$-!_5Bom@1yUh>U(c} zpQG>m=s9WU>$}X+_3@6=m)%YVf91NL>k%%+^(5C;u77Y<a;@T8%e9f~eXg&#-sbu^ z5@x4k<j)!nxZ>jCBH{QL%seb7p-oGh%@zg50<PvT2P6&Hwy^{xw%OVV#`*6k{a4ax z{i>G=qvw^S`dF`!6%UK?^m0bS#^NWr%glgf+0)b~U05Z3lYt>eCcex=?Eo;IulV`W zl3`{K_ypD_%gAZ+#K79b8e`SVB<C!Icw>=$A2S8Mn?F%Tf2&eiT(S5QBsUqO)sIkv z`3O9;Sm3-s>!;?&vbxsHY9;{Q!Ri%x@><CYttNSSlobvPXpMV?N%`Xb+{b&=fNO<N z-pZY!dPJG#%XGrz+sWh`Ekj;&zTt{27^&<e&AfK8#N>}s<@nS|COD+QI*-+zBRa}o z3YD41v%rx3CIF(RALlfaJ-Q?Gviad~rHEFSrnQtUdDRY^Dk^HEtn-zNY(t9$t@9ii z%Tv}E%sdC1c}DeB);v#-+D6H>zJyQtV%fNizFH$gR9|~LMa%MVjPGZ_8rk90=6u5y zgJ7f*P3E<WB_@BSzV;&(d4@Dt%f2+0hpbGPvKO0qMD?|4_7U`T5f!d-J;~zN!IaIL zE~%?2{?@tbJ2N9=@nh6LImI$v-3KVLll$5;RF_!3t7G}LHuH_vh1}-(GBHV11+XC? zyGN4LrNVQox$u-8IMBg=V&K3D{uA(Py*O|f3PP@O$9%Smus{{Rp1Ui4WBqXgrX%e| zJgMAqjv&izZW2K3$-L<ygr0kbnv)pS|Bjf9mjOfnQ5m1PrkQT^8NbNaOI^m^9P;VU zj4~y#E6zhWg|)%{66i}{5ZgjHtY;O44y;Yp#)yk$_+c!=?>aWg@a*Op=BjCM@TgIm zkE~B8jrVc(M*TdIjQ8i9B_8nydDLb2n%^))V87y>j-r}tK<|IaAAmp54JBM56(w9D zbzCjOPUyQ<*Lcx#?P9^o-{D@RXx4fck;4~QCGQ0|@q*t`moM2}vSBDbT;U<AMt7hZ z?GQ`uTy&b+)t)Mu)thg8u8&HgwgaO|jshU=E&1wLm7G|k9wvEcvGAuRoTl!Nr7w=9 zzr{=+bye?Q)hIoCYOa(h?-NLUNi20RmU^6-T11!J?`@o#rNnTB<gHQ>LoYA*yW~nU zj(|Hx!7y(TV_qI(zTefP^1B-|$KNDc3X>vg`UXnGtX(WhlfS&^#>eJH{13*>{`<$7 ztYhG7yy02An9Y&JZAbo8Y~)dQQYO|)`#N0~XZx0HqUHB0K=UI8a@Y!ev_^2ApkPwj zd7t>JgTu;66igZ9*RX$Y0$I<{2iwk&>N!K+bS1`WR4oab*QlSI4K*rZwN#t(yi@D* z)pe*aR#hCUr9QkQwWR)huku|Htpy3IbuG=yt3R{ByhFA2WgAix^PV0B7Y<o19`hx! ztV$+-U59hc?xq8AT%pvSsWW1AZ}LPO^aNIbQnkmMR1-0@9cr`oG}v05M@D=ZVP+RN zFx#J{D%z3D3~4FPkg1u|W58%B*#IQBZ*|p<445LhRm>6zCe^4JqNM}8nm<Qf8DsT) zjMZddkpuSN^w?oI&4_R^h4rZoFf@DiMAbFMQI5B$TZNVQk_`fnnlJg%-tDD3uT4~Y z+D1!JC4{#@C}(s&!P8j0nZCWD&ZR`^Tu&J2Y9;Tks8_typa%5vDA6-Zck-rmJOn;x zd){-J6th$ai2`d=IJ~4M)aiVt(GhYj@4}8OoYLd^ltY6s^P*FfHzt{Uxnb%z2Uw%d z@s<M9nmc_;fkDGFXrkuPo)~tdc2tvowZ{Jk8|#08mF^FGM#Q~3OUuM8xTRti-}y$p zuR6_v`O>8l${^BIQV(D#Nse=oN;p%uEL{opNqV?O?e{&9nG3SE%vyh;`n*k))nzeO zJAgIPclSoDw3Efr@-8RJsIaekAjag%7?VFYW%5COtO?fqo5!9XQPWyqk@97c?JwGK zH9+cIt=1?CI&#;k^Qg>*L|u=>4gN4o`$A7fmF#GC`HWJ%FP5XM*707)&5S2i_=cDJ z>6{B};l64h)ezENCS?SX1>yu<KV_hqqNX4i$L0D&J~@)#*yAj5!huK%?-p$YIeWL{ zC$uUD1AWI6)KvY(UGj6@v<Oh8%<cFPi`>ljQMhV(E6Phcm$OWcK=Q~Ii7wKG<apG{ zeOg)$Wv6!2&95(~SSN^f<n=?zJZN$Ji9(r8E!wD2@;;+vlAuZ(`3A3gvH^QG*n*Vu zQoCg4Rkt)?QX`mNCT4yECP6ULjr1jjU7JYf^ev^)vZdsza~sHa0&XHeu1agbz9NZa zr+HsbuIktTmnjY<V%%O};e+#O3)3Prw?}FG($!5(qo<Wp_r*oUoub=_KJ;={jLd_h zNea}u0@W@V-)D|Wo$6e2Gbgr?D!qUfQQz9EWz+>qX5m1Vke$YLzs#(Mn2mHHfJn=# zAFc{w=$!fw)udQ#aQ!wlIu=W>uTfdCSWlDD8315p4z9+lMeO`!-khu60q#}XxYJTo z)nevx1k%-?2q6Dd27Ht@HF9K2iuR=0|37w>W_#7+mrc_ew^uRhG}?gd0?OB4ArSD( zmm~Q=lhvoKXnA{Rw~1mao_c+RjmLx48!fR~P`vAIaHhUr1s2&jMg?(^Rb-hW(!am0 z-P@#^-0?5<WqYxC5*(Fyx%ozG0l8_f>%2);N{o)i#_}tyH(K3#U-D~X#(Gs=1BslU zh}9NwIASVCvkq;*)JZK*DKCpOrnCmk>k&+(0k&_z$XD}JQT^3LIxX$q2Gn0cHHd1y z!rVql%?@Ib$Uy#5b`vrahzvA^%`-8m4>_gfxjYbOMY%7`il4#v7d5sJSSXStN;s+b z$3bYwxnu`T$E!|+jc!0$oas&&EAi6U5$aVxRE=m6HG~yMXc}S=uvp*ZQ;RQw3Dz4# zNi6DJkTA<BfZ1d%UoY&F56@(F8ctzw(C2co-2bw{flsYLaF1GOqx=VCRupF9GKyHf zORC|yv1)iWu;}m*TcoJP7e{NNc?NT&7aR!PFM7e305Su#@-rI^Jz;2-9u}Mfjy|B0 zoGgbw#Nvp(FW>*zMfoEUMcS7uuv*Vh{Rx^|9vv?qpkNmL!HNWQ_reE2D|K(OQhHK# z-DD{U1I5A)1+=i)Qzgm)xjOmy@Jd;+R2MO3$Cydsm9mT(D$~FRnZ03U@oR}=LQ74I ztWc^F3MC%|u>15{J3o}7dF9H_y(Oz6(U81OPwu6zBHU>Dy;8(4PmT|-lo@#ZPUR4M z*QgP4Ys&;Kf3;=Nxws0(ivrE{mRsVW{|>jGe@rxyDghRA*!-AAUc_!wCQdfR^7umc z3Ad2uuIBHjR7-PE4e}R%WFf$c)CNmoma$aSR$G<>Z!woqEITilBb^wSpOjLVU}8i( z69d%N7)p-D8lC5_nDoDjLhm+pm2QdA_XUo@R>~6nEx!WmonvKl6h9<N`=-yLbe&kb zkgsR{GF{h<$VmuIzJrMh9XUU^NY9iG^Nl$*MZa$i1!efGYiW}%5WHPBSy>A?1>#cO zwc4C3t7L`E9$v1i>p%38fh>!~bCT0xrHD#nz7Jt1uq4mSap)hFWAF5?Ls^krMV`h2 z{BMZoA83cmt(?HN`{fU{rZL@P)xAJtIin?%f&~t=^q&zp(BIF`FI-S4TaiS?j!<wp ziA@zpH`;6PGAgtQ)}+Bn)M-NeYMXhI)#37q=2w}5an#O9`u&EuoYOOQ)3c;<C3A67 zi*O^9xIc?-J>KH)#1h6J_A~WouUHb>JY98$v=80BjOv~iOO_nA5*hzON`tecSlYbS zIEjB^uDZ@5N?_G$;b?xFS6!o{_Tu?T78+>bKz@G&h)lCNXT5ai!k*^$MdER?RJKVh zqx47uzkgWf-UT0N*)HH0ji>F)>T7qFwxUuR*1<Nmt2meZfSiM+q4NVD1Ouy+Q5=zP zM1Eb)j17URq`>^2IJ1ObZgZB(>5A?^Rbt>^>jlbLx}GQ<q#lyiy+kCJGyhhFTbK*n zY=z@z3!Npr9*}`zud(WdLoF=B0&DG=d;ioM)ee%*orC8WlLBb8s0p6&YAKX}qzwNQ z%8Y$N%X!U^`<jsZg?wsba@uyrZn2ygr0x(y0kqJc3NT1ph`~f%9YB8fgn<={923m$ zV5b-3^;df}E6m`$X)VfPS^5hgMi*lbpOzz%k)>5x*fG<a;#_hqB$?jSh1qpii)M%Q zGEWG8NxoJ$HafF64HiG@%&uV@;!;_+GKQs_B+l$NVz{l&C4B`KGZY_3nnqgCN*k!~ zI-@KFn;AQdrB71n1Dmpp+miw8uTDYj&g>n=n!x%LGiHo-IkWZK1AaFWBLH3xcYoWM zfon)pTJ0<mla;>5>BKzuRoncDe8%ZhlP=W?k%^fM;-rQpsslfv1apnY84L)R5$N3h z`Eiubr|R{fRgOKsl9zVLHh)hZDR%$yMXR?WC5?o)fgZh#s_yt%o7PbE=a_&p0W3&O zxA@2KBPVlD51YOADcU)Td+wn3eS6emWWWOS<EgADWq*ZPlh{poI$w0cLfR9JBXfsy z$#Bfe?|6Py-$D$gbOBD&iEYNK=BtI2UvmOcXYl{PQ?GA$)pNdZIRCAfTduf+ZeJbq zLkmm(Rh2DW;fnhu{^gIv-)SIPE5Pp$0^HF6lmSDyVzZ$73jMncs80p>D)fQ1S^4iZ zz?HzC0v@hdCc#HY7p{1dilgo#$j?tQfXn}=A;HUnS|AyJ+yGoFz{>?ViBS2l1+pvn z&f{dxde=Cq(OFcSxG6RHyBpG2XiK#%@!}SBik8b!yI5fISG(923F*G%h;KyxXO#rE zWasl)4m;1-C*4iT;4<=dmc51|*y6DKRlUXGr?vc68)MKsW4T`(#X4Sv$(LnOKy8tL z<*x~9Rx{dJ3rw`01LPb)Ra@zV^E*2u-LV=7jFDuVyq-@~{fIGer@_cU3_fMU43UGn zSeUcN(jOa3|HFRF75xTkFA<WPFZXN2jU=hZ^qfMPFw@diTIF&Mo)kx|gx(aWXN=+F zz!1o43iLn|j#7Rj+PNq5)3UJ9rkYqo0Tb2bF@C4QukILnA%+c!zVhNX>E}G<#XIDo z?$CZl5>Kod!0_E!x<&LjDK#<w+^8Jk=k9=3wbuDNLOP~@lUnxccNZ<cUOvVu-&;lJ z-5dQEaR?iX=8erC9cANF&uNu9LIL52hb{dK67|ZyXvr^#lB#EbMJJ<)>QQ11x>QSI z2}Z^eEHo3GgEZJ~Zqo!4V+nF&3C=eYWSI$uHc245)ddVy-ioC1OD7FA?rsf<0yG(l zP0kAi4~HpQ4tc0mBNh?H0&fmAik>_IwZNm)SkWk6p$X-v;E+rb*~xov-W2nf0wz0$ zRhyqg=NCtd8?KN9YS{Pm6bzG?`Gi(!7K<gdSqQU~oX$dBO{OmN^0!rQd&PH{)kFQ` zf`&*_vbaVVb)ueunQ3C0G>Y^%)M8}Wn`pxqUM>jrz3xNJ->oDOW8L_|k&=4AtYk)y za>Q3~30|RegR|rcV*A{Q*?xYeZ*nC-PD?R@yCT?;LaTEF8#(%NVvS5Ok|KGXY)*kq zqcX4>@Vw0XoF(lgW$7*yV%+mScLtR5W4|M1#OWU@_1n49##!Uf>xoKhJ%N&mN_*$Z zEEhlPt1Nn|ZLgPa6Ox2hzHqXJY%7NeAan2R)#S-XnsTySqG-8!YwSNsH0&}Z`(<kl zKdW<IN_Q2bf{W=~a?DaOoeCVHT`u{VBYu!+hGrR2tW=#b>~%E<as7-qJr-VYvL0sn zyBEE%jn07ID0Z$a-cCr;r<>`GJ*H5_qN)O`Q6wJ>cvQP4SY35eC@UxTnr3aQg)$4o zu|H@bikYp)S!OLMu-32R+67+QyR?img9j|Xl`Nbk*AvDHoSG)xa>!{E$*(M!(nRZr z4;rn{NVeZGZHQJ|ftz(&r8UY^z#@+v*k#IkaCC!OV_0hxyR#8i<ZMW{uUUOBh^2YI z8OA934$)<3`N%=4nluINvSWoYir$By{sYE#yb=~wqk!v#cCicyB;^cZ9(Da*8nT8l z=xf5Iamp;6QbrY$vY$@r)+q(nJSBxPf?KKg(#BdqEV|xIT#L8t)mPa6x60zWi0eAS zhQzs6a{Uw77ppC<c2yQvFRm;uFV|IEC0tK%eZrMcZE<bq%2{J^&EUF)t6Po5HJHoC zHIXZiYbn<Xu1#EZT$zjj^10sUI*s(Bxu$a&<oh%EP6GZQ*J}8+;&}qs0P?d~)8o?9 z)8$9_c>KP<R_XQ#Ve5o8j<)Tb&6By>cj%bd325go>FG&bk2yB^xZ}H}q@Mt!dymwf zQSuWda8j?6)6;vW{m({8M^hiwfT;l-k3CTJL*T%9&a!pl94d;6Hs~?(BpzV-wX3bb z2{o+uXs})ylEF@+r6CQQb{Lqvk&MvE=ix95gp%+WDWT#|kBr)NWRz+^iHthqzA!X1 zVfl)+jeFNyT+efD;QD~eL5aTMc@obdTwX4V{SW<FW7KicP`uraGqAV%@6;&1hp>Bn z<wJhf^O$*jd{~sdP1|S1R&5{N1s9&GHq|rYeP1RY7qN<_*8<fmz#1kW&l3wU`QRWR zPVNhN=mGZNuX&4>sLErh^GIFywar|maH)FTMKL1bm!D9$S54e4T=W#9MtNh&u83ut zV`dteU}Tw@%8W#&SM<$|Yg6Pja1c_6MAb6JZ;ps@COxnimYKx@GUrhw4|UdskwK$o z2?aB%P%yipLIB~2hL(BdZjb)u!9<V$RQ33mQ4N*GguM$G8X8JchWLLbhK5XGS-uYZ zkXe}NbXkqX6ClWQwqGpE_)Zt!L9~}ginDzdhi(aySl=l`QwU`7>{~u$U5(RaCTJhw zpm*eu*p&qXcS<xRiQ4n&fh(&o&#dTvi-@+0X23mK&O|Av03t03g+@!C-vlaZ76?pS z(WBa<>X+8p1WrlwS4343uJ{-Dz)iYssw?Uk6Yv>#U@h}_LCBvhLB7J!f!Ctfa$Zy9 zz3A(a+1aHU9D@c9T4#ImUyiaLtKxKxaD+5FsaLaMr5t2rR^L~mr0S4rJYm~MENUF} z0TGk@g&6tkCb{g4!Irg+$Qk-LIOr1RP`g;%MplJIR>3;vuZ<@5s70FIk^gEG#BeP| zjn_2-VI{E$`zlYB7t4Je)O9owT}@Fc6*1=4-Y2IfcGA{MjJYVO*<_*z?aeB935`>a z#`y(g$ZRH>xr4)O0)+G_8+AKIk~LsG7?lIiQo_r(Vj`vV0u6&?U3JW{Y6LY(FVE5v zO_Y^XjZ;3|G^L=EBPlz?Qi|MChZ-T@WMV=!fvq69Tr6F;{Y46MJRf2B-nr3oMj3LZ zT|*&WilJj=jEeG>ma<79qNo=eP}=VIOO>rEJX>A&MGH%4aU^=Gy7TjB9kR5KdQ1Zt z{y^{4NK^r0(JF^nNgj0`ELZ`RnjlNPYJ7}G3wYGOC~_J>odv%Ncnc&0m>)SygM{j@ zmwK4*H<$k;b-l^0R?7sytS)Gf#oI)gGK*bMqrZ)MV0hH!sYO}Q;4jHuJ12@$d!zGb z(|Ht0wJ<D3j-1bs6pH<vs7S1HGV4wCcwxZQPNxEq7%^4Om?(mN_3VunSNtY^tD5J; z*BNUQ&gIJ7Y;pDETKAg8Rm}4fo|kgH22DLzB0W|n*Fj*%Z?U-CTvNHO=lUzx^IY4x zzTj#J{Uy*Y;<|(DOY%yB=M`LIxO#%m;+h5AV(k&v!~BbnJb&w9gP=tVp=#NxF|A#X z&;`=Y*~8Ud0v$T`=#ki|N9Qg{T_wt&jL*$bj~<NEBf%58|93_JN4frQ)<E;~>h=1+ z?EjN3(q8ohEi$t7p7LpQLB3W`v!%tWHX0~<BWf4R3|a%b;s3)G%cZZm=6qJ_S2ZlK z%Yud4{t>RL(R+jkKOtV#K&0OzJS9Zc4Zy9WjJ!usAB!8y&R^4j)vpq+lO#0_K>Z%! zGJsw+awu}V+JMq;3`Pk3x(47{>B`R#;D!d^n<8-vKwcPlRd0&c_<h28Y^I^B`!Br= zpyEjXS$yzO^g4&1LTy=Tskgh*svC9zRAzxvnP=;cG`pZhewJ)_s^AmZENk%wc_D57 z+A3YHN465G&6(QA%BWkP{?8s6TYgcsovr@Q#!!j+uvc4t7P;}##Dt@O-+oDE%JanF zs66!bvWp8=$mLO^V_Ezn_ly{-Y3|4Vf!x_2#5$KnrIEk<R5353S$W}SjCT@Blv46c zl2Y+ZZUHIJ6wxlvR4mPp1ScnRyq-VV#R-|`PG826q>Q!tVFvU3l^fd+bQK;`vfba| z#xd4`9&2H{Ky_T8Dz0RE;irubs`DQ+Jg_b+^XJ*C*_9Uf(J}i`mW+67LVsK%zvC=l zHzxhIHh<|k%=3Fk4l?&YIS`x44r1%q^G0wzVOG97hnH_AG)B5c^~^A{SG`bvWxSoG zg=~v*@hc1;4#Y@hvV_dQr}!KzwO`(#8WUU#7VfKY`LC7VZ7t~RRafe6nK7rcq^%53 z1$?eojcWk!BQp)o_Nu`RVEF`0!1-Sh;Oou?%&Sq%*BaBh0VCf96rU51Fbn$audyJV zzjrjpkE!OgHW8#G!k~a0H$}nzYl_d2mv@C3`)cC+eRQ%GII$RhjEol^i!1D+Q7ye{ zSqyciMp+{$t5+4qP{&469j{ZxacD>sRoIFXKC0xGbl_{MaKZ79*$a=+l=zFjCS~Nz z`H4_YnW#tA|J5JW`DL|<K_c&WS8KU!RBaC3<p<lcnw*V~dpVLvtCYslsN(7&o{V~B z%&adZ2gC%9^cfI}vdR7=*$86^v&wFX=O>ZSUM<1sjH4jVxw2Y5&4H!bO<mVUFSKek z*Gip;Oig0NI$}V}Cxg)j`MQ$)i1K;mHIDuTa9+MT0;^@ZYVnWyKkR)Ce3Zqt_inOD z7FgH?7l{%jNNA%31%e7BVE9U+qAZ5&qI|ZcbenQ5!Y-g95H?@S(?ztjwXL<b+Saz( zQrlucg+P$tH(F~^Y)fyg9b9SgD~5vX`~RPLp509d_;K~#_r7oQ%d^ijXJ*dKoH=u5 z=FH5Q*h9Q=1uM@GED<?MHWoM2TSN>O1yp^~F({yhk4+>Jja-98;6x+WUE3N36|kX^ z<zep#*C_JZ8dt)PY0zbqjo}N;Yk*wEj5VJ`czk3B!(@a<LyfLpt3;#KkqZ#EKu0Ms zqd*0398tRvCbGMTt7EM?0pN$uI<4AHNv{v`VEtj29}g4D+@4w2(?lIp_$wmTi*2C= zf!KD^Euf}KC4%3=6#@0lBoW7rg(wR5_N$5{=(B$H&r3nQ28((Pq@E<v)?kqkWf4Wt zsrl3@hraJAcuzlThuK3Ek!t!&vg`+gZ?3jRLipF#NTJC;w2RTGCU1Rvh<DZjvZ5&X zGYbc7mc9Ej2Lzs|#6{>n(T5n<(tdP%6{D4<PH#=G)de<peG~}%>a(LQ4qJuoL-*Ok z7u8_Dn7zjCkCqpzx2Mq871>TTh%G!52Cr5ZW`^gE75nY;+?!fjO~23?x?z`zIdd>l z=(F+XAo`vL7?*uJXMkm}_Be(wSd*4}q1(#~Gs5?aHS@OeLI_e#_m9Fj+y<nZ53cpG z_~7a!AB;zzW451w+8{kUnW6|g&y$Wpes%cblQ<x)^1=6%T71c8S!vAxDZq!hKY-n( z>IM8%U{nQ)4-_Y`&kN>s!^LXqA29YSy%t)?RWKW&wUCzr7BCM>Beg=cMk<J>onV2! zn)R2fE!XRFH#2bT#!l{1HMVLs7+;Vz=&?35BViyY;HG50aYD9Q<)r-YfPb*bN*5t= z)%TG$H)->RufggkFIu@<Z-r9d1}q>G{`k$EkO!*O&-a^Yuj#A4l8k#R;>IV8orA^f zeu&|LS?~kWI9<m6_#`xMPjowX>wqi`9COF!+vCI3uw?wYWZLHdhQ8f8NB*T^R&8GJ z`&IxJA)rc7hHCXLenAHVW_n4sPEFubb#O7?rUoK!)!Z=%)5#bzxd5XTPFQb;QAM<* zu{aRruH((ra-KOay+W%|p(9uk`>WJwDFz218$1Y1idU(j0;E=D!!h9H=*ovv@m>M* zl+lJ)0XD9-c3p;tTbua`^eXc?!7<>uYV{xpD(aa~uNr%m`kr<MuSqAUGJc=pi30WY z7r+yR<k*>3C{+)b<_Xz(YUQU+&>=r-2CF&AXmgU$t_BREU~$bw@oS-)DYRkxpXQH; zrO~=Dl=sFfPUa90)JtguHgP2JUYW$({<}_WQZ`bv$zm&jW)m-pRi&O`;bb?4ci!yz zb3u$&wHfhs5hqzu)DP2f0zr{FG(ym#RZ6T+m8U)ma?O9=MeZPPa4`bp&0#PhM2?Gl zgCTY<QO`V&68cz)zetv_1+c1=*unOyQ~@z}aLN&kPJBwi(<F81LrslV-@!MU9Qlvu z34{&gY(yR;4`?<*txkn_j~oidMd-RXz9ApH?z+F=EBLULC!cb&Dju=iz)@&)sDB}+ zn9Laax%VlC7(7K-kGEz#{N~9{&k?GRmEM{H_40F8nOiM<>M6i92OeTyICgPC5oR)) z2QM813hMI}YX-!ZpUj1^ui61D0F?`)xy1+Y?Ty;wSE(D432jd%^aV*si_LsBJsIMm zWQd76geBXI3pLZeYz08BAlv4%;tp7_Ds^-pR3zBat+GKVoG>vSn>U{`y>8A0d=wt~ zB*U`5@&+O&9PV|GfW~O(9$amT<5EVw527-ZwG+!&nLAZh<RI*=hc3nrZuI9FxI71Y z5wYF)N!WGUc_=p)u%jDqf@v;yto*p~WYcvSI}dr9dPa6-&W<|~7N*XPKVS&2kEC7$ z-kc_U;xYEkt$%*?gvbf!@(HM{Jgl&UbAPY^OMgc1h4_t5xwHdjSf^cj9D}^b(TwmJ zKbR$+bLa^$1I#yeeYop~Kag~KK7FhR`T}n8ll~mr#kutot&5Xm%#D7!7Y)c=Hvzx6 z$QH23L0aYZxTn5Eok}ov2Dp8qBePY83_kVuXCcNkv%2dz)iqk1=Gs9yA$QYMTWo4Z zRj4O7q&nZuvc+>S8$bFM;>^VG;HnIC_)Rm<vh#)@XOrWs*yN0Bpo2rQnLA-~2jPO> zL4x|g1Z1D~Q_nNea)+@&j_forJpXW&qxog{79x|}_B95^_cL34v5A${KA7s0vD1k9 z7Wm|bOM`a<IRXfNgsN66fjI)>s)w=Z=mr#_03-Y07Ap%?*nzJD#AgQY?HadKdp!!$ z+2T8r`7`rUg)9V;S>S&0J9Wr!0Bep!#cioLtNd8l+t$Eg3IEz;V8So%!};$VO`Ob5 zntvX?0Q@6U4R3KfWdlwYc+7q4Z&S@;?v$^)2btEVAoXZ5vCN64@#Hh8I;>{nG8%W? zS_JW{cL0)s^6F)YWe&eOE^Z7m){IwoJp~qUvcKqO$sV;4Fbu}BaW;f!+Fm|i1eRZ| zB5JTIaLJWP5XUZ@sQhjc9XolKnyizv#zuZMrAxe%OaAd7nqCI7$MJWYqX4Ca#)`K* zh!zEx1FYqizSLm)H%}*t6Dr2(3ph1lK7+D2P?iG%A!%3^hgzXSpe!8ggO)3aVG5=r zyB+gBDz}*SZGae74P>w35X|k3{lysTIx&QVO`C9uay^L}c>@9}c+hGV>ckVNi36_Q zDU=Gq(Fjx&GUG*NP$8}9BTdZ=+Zn(d^p~gyfkk6hNzC^OX3N;kKR;_?zO6InfO-S~ zBm=^fs+uI8H<Ebf0G8w#zxuI-sIoI6@Lxc!5?my5sX8}_>qrupr!%hWEL_JynY7~S zF@Y*f!?y2ntAy_)vF!pZEoUxZLk$$EJAn=TDykMM*VHR~uQU3O$CLk+STcW48{5yd z#`ZJy*#4@>_E$NP4j054$d4F%$$VSwJ&)B!{#`2*Cu|`J<)M&Vl=k4x=OOgQXg#Di zMC!}VW#C3G_o8JBM}5?#2h@eb*vNhj*TOh3)o;aBG{zO9^)V(#sBg0axvV|f18N)h z6khiE-XssZzfhmrqgh$d2&8<vqnos|4(E!&G1pp2OZFW{R$*d`14pZxpgGFc`l9X+ zGWv~+M`N@R-1u9Yr>4wY&q%yzy7hg<)Z-^XH5sx>k$5q(dqg*iio{S3UQ#*L@~78O z%4-aTxHjPouu|;!%1>Q`=hGMCfzxDJ05{h8)$7C2^3gK$PJ8X$f;Mpc|83XaB?%z> z+KknHTVTgv{IYj-Pw9wkmvhG9d3yMOC4|DrjSgGrJUs@A%DG?k-p~{;#4cU)ioEbe z7^5lo9yH*E=#FY~gLQZ*2LNcjoC9Dh%kjt9X3cF$<&J<xA^K+Xj`5G8nbh)_<A}<I z?Gr~haWc-Pw``jy<AxdK!AM6&Xb5f%2%Q`0aD>jn&iN2F58s;uO>3wZTaPiZFtIP* zgP&@GR=64aYbV&acF;3&tUR0*oAsY@NBx17LFmNnA$)-}>_$5>!sjGubjFOtmMLf` zs@EuR21ZZl6Pg;hbIG*Fn7SIV>8>vWtiCIamMSl|rlwZUp(B`ww%GZqoMfGSl#k|3 zvpe4(#y(IDgs>5#GB{otWC&xbO$I6j7{*c~RRB437}bU`Fy?d^>|v-k1$+FnjbiMu z>!n)RVZ#c2=%UDF_RtJ9a5shaTy%InP^{n!_)@(AL$#mK)t&_xs$EhGC<C}b9AI>e zEe`eYt0QPj(gku=3_U-NI_})rfup^dp^@W>B6NYiXg+kF`bDdi7?mzMvAY37Vl-b7 zzYRBRR;-N5K$kb@jmZcNRW~Lh$!U7Y;a7AdPA(5&6CU@QpS)B$Bf3G>eD5fb9BM5X z=fzN5Bx>>#E4;CWO2|)NtYI2oiUN@oLy$fQ66E?sVg)4&th|)N2#&&d#td-ygfI$B zr8$i0`NmEoP|#~v*o6y9DW*UW-gMjy1krEOtbj4SkYS1tCTA<Vk>cm08@RCUkACwv zc&SJ}QryDr|LQdm+^854ZJ;aGuo%D0?dZ0O5s1j_E&<4=u9MuLyK&deXKpISM8(Ws ztl<s#CsvgD)Bq_FHClD02$EQV$Qvc{`x04v&J&-Rv4&0J^VgJ*Q_z+LXIQnB*m4A6 zq75DRH7Y8j4af1Jp4`a{Pt(0zKKK4NFc?4v!oH(F+sc3!b&N}&>B&E%g5Bb%$QV1S z`F0@DjL0pznm6hI18=wiIJESAvzl%3jN+E4%pqb89?&weVwO)0Pv!a=hOAf+{0|FH zVv7U8aQQKQjf!Bjf#N~+mt4aN7&D=B&0t2wV&>YZKdoG2(n3%EwTU0U)>kYE@|>__ z7S~TBKvRPYziMj>DH2M@O<#bBJ6C_E;if15Z~?aYWj41wFuHDTIgt`uI3rpN>4XDW zQ*E;L{80zNA4LHDFAFOK<B-dG)N80<v{q9`-CT*9QU~(D8=DHI;oHysqX$_P5AFj) z#@16<Kt?*pj&#@UB|HPyBU3wItmDiZBM5Fu;EgvBv+_F)uvt=Xuooonx`HOY@dqy# zQn5w#wJeahnX#)~Mh}sWxYxzW0Si1gAxuo)JA<^m#=57FR@1bC9&H*3mkpm>RNx<Y zbp&GPAa)L7-wP08(_jz+@x?Upc^_W<1I}DyJw;G#QY9k%1~6O*fUo=Ug{XWP4^m<v zXkKjHG=9|;>?U{}#UmV4Fd-;k2$UaNw?xBVkU)#IgUe<J#1{gU8S6y)!S0W-ZZktb zm1(TImtVMG$yiUR2iO#29mO1S+>D6)!{=W8#n1ibCnAkO@X`PXIofyzJARW}dvS%D zLMWtt5U=Rh<b|kjSW#hhFz!TsOe4TpNAUwPUVwsi2!Ij_jw5gY315hP954PM(K*IC z3OvN2>f8rRGwEYIxDile9c3Wkvyii~k~6WVmYzK)Dg~HXH^?4eNI<wlC$K=Ww?HG^ z#H6|_WUj`-t`k`J0+u|y_=gNE6f6trG9IL01eP&ohEnHOp9Q%JHKu%xi7#L(N?{5L zrl4S2N2v+yON@0CoA_F3tfMRh8A1#(A7h|wg5#v<XkancQF_8blqfe}NMKAVftBtp z>nJD@ZI!W((ho>_AjVoCj1R{LchMW`C=KB#)p+;<9yVnDnZb3#|4qRx20{z+ska|x z!*|WA-OZrf17UvsFB55>YIZGo$z8WD)$)jtENwkcCRN~|kw!Kcf7r^QFofq_gB^j( zos_Vu-=EOMLAZd>Mjvx;zn<Fy>YA6n3#8j}Kx@P;z&y)?mnTZ4zoTuUOKP?oJv&sY zxBxYDzOl<6TVh|d(Y$<`%BNv_=IQ9s8O{_2!6%H8R;pB1Wd0PSc+uVWCCafiSt6JY zz#qz85PT&WVnkwzQ`JA5Wh;I>nyrU{-`HvFoYyMT;BKa@sl@Qrb^gliMIKKaaqndL zotIn3Bdkc0KQWDk5&Y$m?e{ZBVYezpE~5=}A$ubO%88ousUyf1hx<+h#tGFe^jAX= zl%SSypMYAwjSh!wXs~uSSZQ_l?wbB)GyO-JnLb@Q{U)UBQ%ky}Pk(g}f+o}N`4Q76 zeQ;<Tcy#q?H}Pt>u0Or`R7yKkS0D6o7=IGdxkl2%OYYu9?toN>C#0M3Y4k63A_(aJ z$U`hYU1s@FE|ed?>GY?+x(7j1<(JC%`1F_IGwWZ{r^~E=N&g57pH~0$S3}a%UoVyM z;nQy}!-P}){EU=+M95))s*F1eD)Hv<rP{c^z=v;tpxQ?pO6U^uKqZ@6LE1tO?xY?( z0wIk3mruixg4HQLVZ0c-$-X{gl9)35Lu^t;=FagpU~)H3Ligvd4(^?w!-?0dAfY}L z6odeb@Zo16rdckzY&{Rm%@ZK!4YeJi&7(3d@6h~FtUNLP1bPp5qf7%1e%9`(LiTbc zdq+SR19pIc)ThS(R+CPyXk4W`k!ik~%$mgkH5Y!mrEmBee5mk4^10B<|5C{5K^^>u zw$~&=@n(TSE1*rE`qV7RH`*NuaXC=<t5ky^b^7aDR`yhHZ;@sh?^~rp8qUbCBb#Z7 zO|lXTe_LIGP}p(v8(E<As;!7$U8T-ti5AoP0jcK2<qhw^!>WS%HJsx0Urdt0+LLVl zRD*#ccqhmlJQH*ZZk&gi{~3TmpjQX?0iNjZvGsuc_Y9Q*uzK^?R(STxI{aS&!vrnE zhQ$i6IsjK>cVY1XEG<z>$ej4p4Z4K9OAS?-w7C3I|3sp8H<_#z8Vf19BYuH0n9367 z>TxiFPURMzig_9)EU948c0E2ob+7s@VuJ=}OG2JQt58-onRujh8OhvUtnu_=O?uUE zjpq<HwkIA2$aV-@%M;y+!vB>py<Z{jroKoPwDM#@F36U^?bN!VzJ{7Lcpq)9O5oF{ zE_x7v{ony8$}Uvz|LWx0_$Odh*3l#dM`U;Ip&x>NsEd3yn=17gATgT_RWv3iWA}hs zDHY9TGheFi3SIGZ`_wQv%(I{&AMAn66*Oi;c|xko5$_#PS86yS4NgOSj)gk>BkF@y zZ-k1w{pvOyk+9;!Rca=3jHGkb8o-grtK#jk%tv)I^7v$`U+&h1(oQ6ix*n<OGiF9d zl`4ZeK2U`Xp8?5C9yfe;RUwMj&xPG!!%!}4VZy1l;rxQo=dQAg)Qrujt5UX{SHaD? z<xB=l?;rxhm%@R%;?A1ct$wjJH^g79{sMx)GPk5mRmho;Zif(5+jCp>$9YB@Bd9lj zY2kl8iT|&Fq5YdJ^8iDzM-HevgfH?j^k&?TLqQDe97e6~XTvU|mP>Z&<AJU?_4wd! z2#wTuA+j>h7S1u&3e;$lPV;dflZ8p6iJd;yMY>|r?%;yY*ge609ZrvWNeUx6?)t13 z0MY9$KM1|!w6qH+;~-~(&s=I}Z&?89nv8CrSGsijRJBqIzxo9zcsCPnK{GX!)lP9W zZ9*+a5Mw{uYQ8j2cU=YQfg9gw83;+qHe&Ub&ManDXk|FdJdP-RWQz!BbBH#L5H^nu zwOZW*PqU#GXpemLChES1GqXH)b=cZat#%1c?m(*B0Gi4C7Ch%xzeIdqOyI8jnHB&Z zwUW6+*DpQZvw-?lRXXSqf~wTR!i;R&A(#3G7zZ(m+vB-a>bvkkyIhpaT3wn9$wh8P zOKwm)cl`=TY?MaxHug6>V7BdhfUrtkDQQpxo~07-0wc?L4eUiLfKyZDHc%z*R%avu zw*a79PZnS)?tcG%X+E%4oMLm<7t+sHj{sJ!IuL{vp@vBMPvSR{x&-S}6D=n*--m#t zkB4Qn`ZrR@8V?iF&3M>6>?Nbi-=>Erq)T{f>^u>Y*A<yy!{WnQ&?n02<nVy<fjB-j z2EW$074~y3QC}4*n{$>Ikp%eSL(N&t{Xb6Ko{HOdfS+xC{GmdMu)bfQGME;+HZS+J z@y^^TbxfFy<F$HGTr4gC1HO?04wO*O0+3|sW?|_UbQmm6g-3yC`M|K@R`^t6`DMHI z1E&VTooK5@2lp5F6}bh)iLZ)uWQ7-E?}m1>S@EJ{pDIlOxaQ_lX8}O+IKacpA^WfV zIWaf`7&;D6%^($aH*o`kUsap9^Q%>n4g@lfgE!J0Yx+6ptWw#jR4_V7s8@f+#&TTK zTDOsFVHECKsR@T4lBYxa!BTwZK*XnhB+(!3?DHWQ@DmPlXfE=bhVxKW7x$%I++#bt z*?*+V=>KVVTKl|2T@D&sZ8N)bJF|*>=nRCh9C$Z#fT!YF(05NOKt~MyNnzAc0J+W` zZw?F!(Jn^>ut40;>|D2s0bI!acu!;dKEy^>lV@CH>?%Hh$z4I@paX22kI02%=h`qh zJoppH(0ACgEKd%xp9ice_-jPQfa6IxI5=#9L<Ki~Q9aLMNMm4^K@D&s>@03qvwkWK z0~T_J`2kT^!;MkM(+IA6r@AH`wp<O@K}(LT`h6mdiO^3a4CIBoZXv?NM;JR4vkuNg z4|OJr*UK#4N^d;VSnZ`x`!0JZ$Cye&aPo)~`yt{Vp(ZnfoVRjBjJ1FZ)v+I2h1`@Z z<YB;)#t>hFgM~bx`%f=(<yYBO)-f<^PNKLYiQ;E~p=;@-Cr&>!aeNCnkRL2Yd4}@D zCxpr0QC`3Lx|ABDvo)WG|Csxnp|kGupjSH|6!t%iyxUZ>CQN*qU;O}|7)+KW)BRa8 z-BEz~)guVt3wjoy>Kb%a<x36<4)sS4{A#hrh0V7|{GddE`t^Mj)>q*dv}s2UGD5Ih z`~#_9NYB;7af>+|lzzA4?Nd()2G37z`B(tPAbh1DaA^b-DPOeWx;NAz3z)l(0NJVm z<-myt#wx3EzaF?35<4$)%pM-*uTU51SS1~+o(K09Xd?#8ok9l?2Gd_>wA>lLMosyV zRc*VIWxoV47+?ltj-oFOAmE6S6g<E9K>Qqy4eWP7V9sb5%iN;dgBe~-X|a*MHzgjf za*%TH+)A!GQ-AAuEwY*}L(-b#|8t)pw*xW-Esyr=C_3WV#(IhkzcG@lG?$qp;Jj;m z>IYs_B>FLLBw-H?Q$M~3^gjrNL+~Q-n;vZ40T^%I@~TbvLW`1KUrz0YU8?+Ej2z?y zuNeLHsR{s4+xk4_N7;8`Rm7?D&;6fc(czYX#W4QGnJSdv&rpQP-~p@{DpIfh@Z=J_ z2$<%t=kdi7%%gc#Y-GSd+@&HYR+QhNzvJ9lqZE>^m;CAqVK|5I+Q~CNE61mQOMd~f ze=!i*leYuw{;=ZQp}qq$C6*s=E9Xj=O$~)pv-u@$<;Ml|4`d|x7ko-JB$hk0?pwA0 zfMv*QD~E;#%P!>@;6bal+#C6)J^Z5&L2y04`AXtM!e8ST+(9l`sXKs|A{JX@!^72` za0Q#e2{qSgHn<Idq-<R;dBBVnx6wIUWnXvmmliErge7>O!oSVvHSEdAA@6&KcK$2V z*fnXV8kD&!=2#nZG(@wNn@rQ-LO4`FsTz??>+?FTp#Y@D_vg^{1@ZB#j=Nd<0@R-* zZA^xg3%PvQ?V%1x<vNVXPUD$s@MP?IuQAy*?8!j1+!eby7gIJ5NreSVuTgOv(L6pZ z*Q-Uy40_^RjMj`CKzm0W?!=`kW@4*g0ytMc6~PcBI+d(3C$h$A3tb%KU{EraSm9Dt zLKIhYD!K!A-8z)cnC^;R<$+&fh0~{Q+)WI;IKUHm%v%;|^P-!>ey1L8+#Z9#$k!nl zi%h6|lu^@ujiyI`08;emEhNar8bwUV&6SGFVL$QKEMNhjsQr==M{IT8!@_PWI@B<f zCb8mpTZLw~EeN66?b5ai&2DQ5`b(-jjy6aRutnqdHM>=4cB|0rw#FNYgWZBWmaYk~ zg%U<xi_k$Hbuoea37kS86E=Z+3A_kE*plMsb<Errjt<mxe8w7%;1hN}F$E94k54n2 z1I1GvcQGtkM?EXWEQ6B64B}TW!xtomYQtnr^#UM5%U~lg9l9U-*2u%msx36#h;W@e z_;vhbwn!pAwLyvtgH8;?di(~r+87L&`S^^)uL<_4U+e<UNNl7QZJ;mr&j?<8M;>Om zC52b;4&H^IWC}%A3Jk*(iX{aGloSZYO|6mwfsz70n1bNNw}A@|7&}xPybm9mLce|r zpFZ`lB;biQ=pgR8=eh4DLQm|@!LKoyS4<j_g972N5qVX<`D;X2DL~!dr}lu=w41Eo zKo29riqhUc5pTN1n;%A`1HagaB;Uv7o4-bc)r1{B_>D!50D>J)@=~7nPhc{JX63Fc zl$^4nk-*^KV+dx}%Nx38qYc{AUHAU+L<04U-8K|Krx(Hh_B{;+s1CsDq`Phq$WEcs zNEx0KD%^dDTXt4BRPFaf0>)ODVg<d}3jn3{V)Nnb(u)-m^cSlhQ@z-T?`pAfQZGia zGH-U8V0nnGO4$%TO|U$~hM?l#0g#-g`ClJAe-XgMLu6HDr?7a4Y^mCjk65E-xZmb< z5-bmiVEMj86Tz|^VPT3TC0GKg7QPfLp8}(Cyi@!*%z(Mvn|8)rF=<6EuDUzBE<H;v zGCVqsrJ2~?9dkTpLm%BKSJclIw~Td(PpC&3!@kMeTClDkwaZYZQ+QMVU7XlXREsu3 z*Yo{5F;%Eiby7#@&BEsaSf_zsO#*wv0E;t{=&|%^Ic9+=8yam!bPTPpoJO_mubCj# zrAHm-eLFSkxIldduHbzfbxf2nY9Ii~QHK`}jNTyHTVv(e_{W;xIN0uqW~as-Z4Hz* z;8|?hlNT%h`^a;0yfH?#++n3MO{el(08;(y19V*_K7Q2%hm1F1@N7@_6a3S(Eqal@ zF0AxmXKn=#NEbgI!^-HMvAN;w$V!JTJa(daz02X^1nqrCR%2JVS2lO_sq(4c3B5V! zI0y8`IK9WJKWa-iu>FVei&Q97`SYV;)0V(T)a&c~A!oQ)3p0j#bH)&1v%{vyDS)?x zGl5huR^ieFHBl;p^UINoHbNzQDcmwUtg2Siq3BCa4T}TiinRt3zz~E3%7N!FcK2!- zf$3pSLFA0C*4G443*4#(e+$*K7fc}gOLYyM0hk`byYVGVAb~%C_T71-{jfwmSh7P^ zZ(<mXRcthGQ;`@NLdB$PR#X?m7p)$l`$?8@BapBIZZi9jn@f-Zwnu5qwFgO2qza3+ z__7*dRq+9w1@^c%wZ`(k$Ht#I2NzQnt0|-#2Z*~JvTPg8oE_>7Hoz@b7YW()w8TP_ zEUGo%5KBDNgJu`E6h9sx%8m8ojXp9?ANEXYY>uIMS>`TCiCYF4dpSfe%fcuf%h4gt zpS>;qe1oNq>a!)MX$i=)X%RT_E4DyR#?v34QOkylMVNiv&dNzE6cYpH+uuEbOJxw( zq4r|BLPB(8t<GuALiBh}@#7dVRPF?MT~H=vV55<vzOt(@Oj0HFq4P&B?>>J#QY$$; zP5v~EC6kBWK_+46=rhQnv6p!~nzg#O(SHuIvQ={0A7k?-8CiK_%%HoDmpZX($J;@m zHH$*GL{tx)pHTKt&xpzje-4Lo<HI9IGvkFkhM})NLipV9(D62CO;-PTJWWZh{^NKq zp|9x?IqGmn?gUPe1@l_vmZNRF5DB*ujej3|{a61j{_=2M92DxuRC<q{S>RpuA7*fI zECBwz_A;*{>~Am2vxj}P|GFC(S7*bO5uSt`Ed@K|IzpEsUrWDPyE5N_v_mm!#2Qe` z@9m#Au;sn|t+mj@<X~%vyZ)=xu|o^)bH{McLW0bbs)SGQOV(due~fhklVa|=0Mu^P z>U*0gCm^HTb>#pU4XklvEyo4aE}~8M)+YmvGS0)i+5yY^rpEEPZ=m@>GlHQJu3m}V z4w+=5N_7JYt7Xy}z>;gYE8$3qB^n+%4;iSYzN|2yHUb%Zk?1%zDT!)R64hwHQd-9% zjVqw4B${~{HZ=b?!tKZYm~F>TB(RFHj#<>@vh<PxH66gTCDJWIhJ31H%q7w+9D|8x z$r`C2y4)N|12PV0E0CYqU2mXX(O2c+NCCc7_18^0uI`Bw!<iCVP7H4?0y&!V@Z+Ac z6Nvs3DPb0eIMwoPG&r4{7;sNPPx#+1IdPgquUw2q+dHvjNg(kYhz!dp{b0igLD+X- z{DP&R%KZWLRX}uav84#uq75VPt9}Op;nqt+_@|}|Y9@49KvjwZvlV)S;zerTMyvAL zk`&(sSgOn41{Z7ZK(#J`8ZJnj0kuyTUuzLzTZM|FPmp;(1yt;aQL+#u4L-8eFF>q& zxFU`MO0B=Q4<bKRh_2yRcN_j5F0ZE|rR7`elLq44jUVgM4yaiitQ2y-*V4JDe*&p- z1pXev^VOf>CTp~>ydFztH6=$vj$udQUy{BOy35Ev97}WEgVqv}VK2!D<DO<mWS0Z* zW&ezvI360k-aalP{MpEf_e1BepJ*R9$sRsCa^gfNZ~erKag#E_y>TB&$i04I=D10j zp`3y3k!S4j9$3cC+RhDE!3B^A(uk26m%4WY_~UbFpgeUOK%mzrF}u|CMMBv5qD$SG zj1asyp{{?`FR7pCJfDRRRZx9>>ehcrCkO{R1xIW1!L?n6{!%N=p4v{}<}qE|Y&GgD zao~ciwuJ-1Z(&nyu;msAHxe9m=HgpLga+JMkCp}V$k7<cl)nbS?yw@Ln*mETqh)Zh z8MUwo$hSA@C>T#%tKNXi#igxTUSmnF5yV#5CHclmkNVf&rA(B-k%V)_NSumHI97Z$ zQShj<$nM#;<mMbtJhYA0d*c7G?cSU4TC^>QJjCa3TT8!LwFxG$VtA+^lJJCbBZ>Tw zE0QP+7i}wLurb@}7;NOWS#({nZ3<sQY7-opgwDhp)gH>(wwPeowgr4;ZS&z(d+cuF zy~@2MG6gwF6x8S8wL>yAeusldFWIq@;V;^eOIP6z$<W{(lHl1p*3$2c9e1q4%e6!D zoVA1L)SiGrV(fq99t?Ng4*W(=l&x40nt65P#2|O$Eac3+rNJ>=5>-faYZGD}sseoL zCVp|d;?}$Q#SJD~@8{RW{A%XcFn%#(hX(U&H@^np3(2CaD@KP3Yfr32qA2|dQo&vS z8eCgT!Ayr}D{|{T#`qh*rV(}kUkHgt9l8l`aF4tGH}qXa-$(iN3S)3>5&j6c;@Xf8 zUu%)t1);(C%17LOc$Z<L?y9ZF8M+>!x4wa|`0A}LAd0VGTntd$d}qM$+SVe17i`Vr z>)NeNd|gA&eA|l8hR)>|bg&W}Ts(B^90nM<bu(WVY+cOP5C$sKB}H~ZIa_r-Z@rto zSzGVGEAoE+ijvT%*wjR%!@XiQZcixHlrO-mIT!c-#;<A4<Lk=iCf4PY<`7@wn>X@x zN$vY2;)=6FeItj<LRt8Udz+sk{(;S#$roOP5GHGu#Iu@TfF~wI`Lq*~KO=ArL_<Mh zi6e3GN(gB<imFsUX-Eau+Le=cRrEdI?m1p)_hjO|5Km7$kKu{o*@Wl2cz%fIr+6O1 zvl-8JJWt`V*)w`%_UO^Wfro!t`j!06PJVU&k<&f+6N5TYzKjd(9v7Z7@#N#V0MBSV z(}pqs*%{f{*_n9w=g_a@Z`LY=iQu^n&o(^k@jQ;lX3xsV%F4>b!#_t_xApJOk4XV= zEf-jEEh~DVX>v}zQ-{VreB0*F<#@2Q;d1YyjbnR;TxF46IC$J+>D$ypIUf5Bd^^QS z&kEyXY}i-UFrN=)852vR8OFphDT~bMp)tRniSW;d1{l}mZY^BEWXJYpiaU{Fu9adD zJWi3K<X1^V<MO=p{PwY8zj5l==6%p*qleOlWu&9evfRYz#~49f8)a|kK-cCt^wae? zozl{64oFX<%$4+${LC`x2Yp<Me!Z;x%sDOnfbVoe1g5trEkU}`zh~>=gi)3+lS{Za zL%y|2?yC=;NbSGY`OSkBD;Tg!<~mg;8Xt!!&TfY&)HlnP{zZ_Ru<)g+#Q8@x0HTeG zMK0syv15X}(G8eC_)pB;WQ0=VQg76AC`q+UJ0@oD)L~Gf)?!fdrWHoL23S&Q_-8mU zCW)2XVehUrdM<QL>RNPSKX?TLTF~iwsDENWi6IL{qLYJ1Ei``hHAGckPbTm$%SY7% zhEWguTr7*<A}JK;*)-CyFnfV{tc5w0Eq07sgC{I3epN*L#Yy}L%SR2>_|4tB=XAlZ zY{@9`WR$lelBHsurPtv?p(RVmk-R?*-F2$gQ(u}tQd_oycVCKavj@3f_xy$|P51O6 zu7po&!*qK>y-+{rI8@PiQo9lIvXMl4vkFh*K+(+vINpw}#+H!bAd%E9tW>Oa+G1Bb zL!QK?v2vGhhF>ihB{S61uA1u&Ssr4{jr}4I<DhD_9|Pdnb}znxI&v8%t>Ik1+V+Mu zKJSIw@=(?YT7M4a(nAm=bS^d^#Ts%E$A@!ZV(92EBhBQgzty)irs#O8uPWo57jRxg z+eOuO)N*Tj2S=>N!H`Q5zhlE_2@fzTJg^dNx4{g{@kFnk(F)I@1_-E{Ucs`?0b@Zs z0%qa}yeAblKDVYv(AOy-*35}9GYw<>QiPh*U8s!oP<@T**x=7g*fTNSZA30m<zB7U z@`OjKk+o>TL7)k~1>#6ES3>|p3%iS1_Nsw!$-F{zzOY)sfno{Y8Me?6zB6s%k@bh0 zn}B6&XdF}$Q+Lj{RFx!dTQ;G(iNf8Moew9l=@xPl51oqk9|zt%6NOO6{&*tsgR=Kv zD1SE?n?t`@WYh(ehQY{*>1)D%9-zWTgKO?(VO^0EzGW)_aqgKi+KE-&+mp<7C6p<D zS<66>SmE*N%{8FkKGJU>^o^Q+e+3Nm6YGjN{{xpvKQtU)@l)!ZzmQdDa#3iOmJag( z{gVk*e|R}f;D5wI2cNTq5?YK)RY=;Y?(M07S_$bC%rC({`VKV--+_DBkX5w^E$V)k zM#d9j3w_xid;${968$WxDf&a@0Z8(;Z1~#LV8rw%E@m8V1lg^V1aZy??z5u%)uXG0 zusWRj%R0Io^Gw-jzCL1E89bow11hULOYv=%r(RNEc~)5ExxRCG2A`rlGY~VaJn!g? zcP-E1ThhzZS5kA#Ys-2SWFT4Qx2Au8=#puD&XosFBx<;YpU2jC34#k4Z9HNxAL>ui zBq3@-gH3~5<X+lad_p%?Y>CV<jn4s#LoEhxQPhLAPv6|Yk}y$+0cJ^`P$`>-x5ORB zDA0pDd~d|S0Ty%cUEwiq<N*RWT+s@bkv%_J=`pf#Cw1FI%&ws->~jizvxVPd;dg2L zF5*u|*(ovNM=H^Y9_t|Usqm-ucVmSSWiQ+isg~|aPNJm4|EJvnwR9Dl84izx<{~ey zwO9$76$rLmY{z}WHRF6LM`RB)=&Nz$>k?r?2Y7R|3f_!%@G1q-@T4HR4loEJ^c)oA z*T5A}xxkO5ADnj*8@nznE@uhI5uG6IaNb85tB_uX2ft3kX=DsLX-Jy3{#rzCLb(b8 zYBkHKAOLXO>hS6_u!zZ0L!^$)4ds-Vyu0c!vd87fliCfUJ5{g0ft#^@#hHf}9EB56 zcS7?$WRgQ~eAGj(lOqFLGaHbK|KWt#LmdHoLzuu|eK>L~6Y7Iw+2J1B*m?o=U{Q8T z{qsOyY21QCGR8>vls)J@u#SN1si9MV&lvdcaZhPmgu||Nh-R&Bxa)Xc*O<A{1teua zR%&2zWM!X{nlbMB-taoK31Q)vk5%6uB{eR0{d-6jfC2*QYp_i9ng$eV0IU`NUIU6W zAlF^DTLVUD01SNpS_4KCP*RicuKytb?K=m7NLP#)g6!fOHjEic9QnAK!t%&>*M;E0 zEyY)GW!zoQtNKdzghrIKg)@znF2m;mxwCP(Mf3_dXmtP%PxJ~%eOGje$2ihfCeo>` zj9WTvhj^AGa?BAf6LfWF3Oc>c@u5*3dI^|NH)fvdo`bWb4SCvwJR!~WY;?*XL{t=c z?r19$d4xP6rtQ#ef-c+2(>jfA^+!b)pB6cm5w1Y;B^_ah@vnFfQep<lQgTFcW+s>- zQm5P{b0q{rWq3=l2NJEQlof+HwZ~omAa`TI5=?Xqek<okN5~;9S8MbZ+x+NA({WP! z_}>OVS@YhTS>VFs!Q;h4I<RH;<9-aIXVe*KaTwQt-@<Rvk~20+te#%w-!|p*IiA2q z<GSNUPh+XWxQWKsvg@(cA@mt2FtY2X737EVu=6*&9vZ$-KlWDj*sUIN#;$lna7K2O zMGo7;k7EB!8=1p4w_AyEdWu#XZ$w@_(p-S(>Kng<SelxTjna$U*S8cOSma*Pf_nzs z=R?ytcCO34VK!QRqy;9RF#tcJ&&T7qMU_!D$22$?n#Gm>D&s0oeWfRSrE!(FzS0|> zY+RLFUzr;&F|Nw1ugnV<8&^4v%e8qxEDPt`;<&N|+wccQ%a2r;8<_QW<+k#7STO8d znOrj0wd!_kG~4hZ+94?HHRk5)Vq^2Ud&50|#sZ1$cv1M}#U^{BlU>HMB`>-+ET`WU z2^<meMvgk&>!!dR8NdIy)007%`)i!{x(m;_yB6y8zhL~i_QtHsBae4XbQkt-0nFIt zE?iiUKWwM*EafM+0LN|~W9(!7f>L{8<qnW)uPwIYZlu1*ed0-MZCd0WQ}zVDpK=%O z#0#IRZ>@x0Vv+k_yYSsOO}>}yN7Q96;b(OtE}n<)>RacW<P$P|mUQ*0XhMYPb*wJQ z0n_d#;pumnsaD*H)KW=SY-aTPJHvJp26XA+_7nC($y@HPVOMQ}JYVwGE$79qwhwzT z=GqW*8L^44MD4I%9i4bQcDXn5x;=cDQX%Gw?)*zeZ1VohozW?09gk<nTsr_TrWUkK zIg9%^Y>}OBWIh?qHKrEg(#UzUjlX>yCO$ojf2zLC6whk*KJ>?I-1!`P<_C=L?L$+M z3j}Z|@#px)*r60nxF&6UcWpS!rngCB;9%50#TejgO93<lx4?L3_|%2VWMl#LQeU4r z`^X9j2t!Vo;IBU%&W9=f5$?KSz<^N)7MZa)+N%BBb=bK<Gx8%adp?gDsj?KEa^4r( z&VEU4XWLX(i7h^pCm9P8Tez7a7{oFJ##m=9XPVfb&Q<YZ4sMu8thB*sq#ZC0Dq7Ku ze5&~+Q;*@Udk_HajcCS|dCj6IO^kJhCR9XPu=@`>QZN&jFGsfliEP}>)~%Wy3FROc z-GzMEq!C$@SLU9&KR(U4bGt`28o28w!@o-1_FOX2QA`v_qi188WHf|o52J4TN??y> znm7rlM09NW!5XH)61nR*7mSRvg<;y_JX8z@XFug)k-P3Nvjr?L)Ca?IaDbR)7+!Gg z3J42n`)#NV%|dq9xa)rec<oVcv2lOx+YD2Y3oEBsQ(l9OF~gg`4v+X1k&ZHfWP}Gc zZz5#O__YXY!p>^`CSe6uC{MVm`8S00)1jsUmnVE#^A^Civ675u5~D}?5+l`03=FL~ z?jWd)RPmnxSXD3@XA<f$DZ@5DFq`JOqymE#$*?&Hi*lz}=u>Su|2@dTTFz~v*nb>` zZF4t{%?O=6k?RRZq1}h4r;|x5hQ<!8@DRO`NAvy&bq<;!s+zY^MRDsw_yXBPI=abd z(5xT&r%&yC(d59;e-f=BW<Zk$v_5oUO?_eUfj}{KbQ<NkKede*VGEtVBNyy}H4zN6 zqGvHL(ev?}F9xy-qGL=g3}zfZwY7kc_JMgbv1GY};wjz+m(v!0%kby5?<#ZG^A5kQ zdeH*yzqfAxvR)C-!2%1{AAD;65}x?GaH%PMLO1%<WnTpymdja}{gD&-?z*pl?M>>M z`z^+f3SrBiNnc#J2z*a-`NXH11mFG}fCBn=m=Fr#DzQi51j})E;aUDzFrnVL9?A=7 zcJ2@l=b>ImK{MpX7~FgaszXv>KPHSuVvYfI1!xLGk)d8BNy)CI@5o(S>1dh@K|A%8 zCn)bJ>&M7+D}W(K;ri@4$dMnSO_mN1_bP|7gEGn%uPz;CIyr`qmzNGUos@X-OH0d4 zCuY62cp;-f6xmA0Ve1)jfy@*5E^*gg!grCo?n1naA4f<p0&>d*nS)1@3h?CP$-`4B z^4)k5X3b_6j9!1PaboSUiL0{K9=mS!khRA~@N4Yqv(_H_9KUW_?OuCqc&O*vV;6?t z93OU+PmDhaEJfIUSVudV-0qR(uKOeMw)WVtu)Q2orLy=iju4NKgHPA$@!$-sMPHNX zPaQL8IR-5T?WLEIgY~|(rO><bU~c8qSm}KdsQ~039e<KA!+RfkEUz(%%PLiv0bV{t z0l7C^vA$0o@-Py4Sif`Q+M}S$P<)dv=kN`>^yeFN;mmY>xxIY-UKpVIJ#ZHu`Vx=F z2qI&W7g@&aH^fPN&mlapoE!QfjyKAeF^OJhBGU!vc6tuki^3O#B5?=$<N{+7EK-He zW{ZPoAMr%`p9gbFfP73tjh&H$gF=JbF$o$3JUb(M4-Uq+xZQQUGEah*G8{(sgy)Bb zpy;KM$NxM8<D-Jo`+$=sijht!`Xa1iPIASI>FUMol*V5-Cgmd|c_>;QSk_sx&s`7I zFq8?vGlJt@T<(G|`lFU`&IOY&s2ry75rtgd44@l*4S&mKz`mFI`9EbqH#4%k=+HQX z#t1ol!Hi%o6ftH!>N=cjp;0|RWj5fJ@XhfXB1e0MCqa>4&^7#U<YTmZds&Z2%RUSz zR=AMjv}i5&*T*NTo4*WYPX{**{T7V^hB|7JfQJFlYUnwDLHm;nmV@?ZCR|WMgWK5z zZR_2}dv%Y8&RM?`ED<^rwCq<}66#Z06zZ8|fxih0EW}wKg4jmULhI-8><`vUc3}il z*s6{Mt*o4zO!+?nOQrlWTu51~bQmXHApC#+t@Tl}AJh6M-rr{QLK8Vttkd@}>|<As zaZg`4#<(2Yti!Jdw?lHp9FI~EN*(*u{4b$H*vFm~Gic0_M+qdjpS;n6(3%xyAQURZ zT+_T9E?pt0LRYJ#I8e(UN!MxEdGDrUolZ86X=778lC1V`jFfJ(tqy}13yfh#U!5j2 zm5*`cjh1yKw1Bf*B{z-<Uren}=%SKcp<&RClsx915=Xf*qu08OC0IPxx}&Q-(MhhT z50@sHx+5U=7_B&t;|)K+T{=uCIxNcV2)Q_7d*j-9bAvBhrMgB17qK8N-Fr(}K5cfA z*+p>kC3cUmElZY3Ko`{_1nur1oYoB7+^Xxh6s?bS$36$E;GigE_6Qv9xCIvY(?`d3 zzlSHfj43vE-4pmUml&&H)L!}qEmLx~axE@iZLTX;rTg`SIZ$|K+Txd(tBIYw85MqK zn`?-j{Bq%!!8yP*^d{D_<Rnj=wJ@!?-M9j?d>J0yWK=9{FB{>3_WAXNkOEzn5nlle zOlK}5z5o}P&KeyTw3;i4MdnK4Ip#{@(E9d=xsuqdR}%MQ7FZeAu6R~6R}R5zl}0_S zMi{@P-WTpXqkbdZ4{$O7ccD=+izcCHp(C-+*dKftqXTIQKsP4l`YvYCGt{6j3i}{D z`Yse=C=1a+75bxAa5X>|!fZKiT?k8*6|~AEQ_nQ3A>qgH_{wN()qeFbx&^o+yV*y3 zj6Y!tw7_^`qj3nWAb|FDqpQ8l;|P^w*S|AV#%32DSMp@&A}p_zJmH@52Q;QkYA|om zjRlJ?I5dh)z0oUO(Q7@%OXfmI+eA^eLQ(UN@IA&`#*-*D?(7MDo^R~yGG0eNS8Ze% zH|g}IL~cS#6H1;76{B*Y-I?;9#4uA^s#BX}rbeA66uib0ZIiTWcal!+4<&J!lf$iQ z=vBQKYb-RLGv0+T@NP6-Liws$K97`diU^bmCC?zei7qJ_!|Bp_j2T*|j8&vbF3`yv zg+#c)WxQ!FBcXI`B`Dn=ksi`AUX%o`GyVY)GSkR5R=eIS%e9Tb7RNFk-2x5Y1`W$S z(6yv!cs0+cWCMx?Bw~p!b4BN&PTI<KsmgV!-YYp2{;~0d5eNOgXzhP~3*;#R4QC1s znHV=dmI)chmHZxwfsD_&r#x#_SQio&MXO!W8jtb%NhEwb{6phS<BuTUJmWbK1w%!o zLe4-cEs)(^+2R>gmX*p3t$znwO!9zmMW<wo-y@Y5rAPtMr*a9S2*kUb<O2CXv3Ea! zVu%n8yQ0^7jDMU&u~x|GC!`S7GG3N)JRhnwIWEs0x|pOwNANpz1g9ZYw8|B|&SSi6 zlF9f3uSX1T24k^0e0nGiyt?Ih9l*;ATrMhk8hB6BW};WQqF?qHhs^e3Jd5LA#H%yy z>yls3r<7lh^S_$kmyLJ9DP8l6BS98@U)1#doqNikEhf1_^F3NK_{8suF7+61b)hfT zjlI;far=W8te)#rUw%(^!9ybE2W{ADBVrR`Engj-C-O2S{U`$1ppdhG@tpA2%V;ZC zvi3bVrNnFQF%r-W@Ox&^mDW}~#!{R?K*Pis082>Ko@kAW?Syk~oAHMdWGnnj<B!I3 zL~pjobUuKD$tz3J^-1!9mN2^f9^(d$9?}Kquk>*20lBHsKWp+=+;~Fxi|x<kTS~6% zBwashwoU%h+4h_Hz1ot9*`bpEdai$FybZa2AXL3*Bd(HUdww468B_+<L*q(bq)>8| z{N6p~pB5#qz)h^0&=Y9_qbTb4M3=hA4ML5!Nm|bSp@i)j6QJNQtK!KMF-LtFCK2dN z^L*;{xfpO_?bZb+mL9|9!Qoa|VUic-U|-z<{OF$aLd#P<4Oq1`1l<D%`o=U?VyFFk zEdS)aw-3MhcnVBW)dws8890ApEJyDIEer(1R<8aCzuj=0q;(kAQX|rnepv6x3l*T` z+4Wd>37w7Es-ymWtN`itp#rP`O?*QTMs}9f9(63w@vLgbV6#$e<JIH@z1SFErS+-C z+vZ$+F=mu97axv7PD5kKt!9(SgS{xMaHye}1;&=;M0R`EP8er&gfnByXmfnf+6lJM z*<E7z)qDS73-cNs!E%c_)#}dK(ztNot!MCZfDhGSo~0IoPTUOu;57t(6+q;*w79)W zjX_O7`Gc(ht5EJSB7b2+^0Ta<X$2!V$Hb~pg?mfoXv6h1^;PvTj*r5lv4`m#sQ}JG zM+U!S<w7d(3}hsr-jwWMKQ9Js7+Dvz0`pn(nV|FPs&e&+MCX~}81+7&{a{I7&QH4& zm*93jLBI_-6LiJB8m#S<&d;wyI!JM*`c^N_h%qP#pM(8L5)X&atb~IrS@1cW*Uu>^ z!`WQF4iPP}ELRr%dq(+b&wKuj|9^%85XPPM`^zC`$Z|I(hb~;^hW++-Y_~ks_WY-0 zFPC3!dFVvKy+t38?z7CTkAcoJ>Y6-|2Z(%%-CEc$!;V2c{2NPO>wT2E(!dTb3A8nE z&c(mjT~y?YJQj;hgY?>$59?l^!I?jH7MW<>P9vv>#EG;zB5h8tzCRoN1w~TqE-onT zpp4Q{Ve$l#CqAqrPu`2zJsF#U<7dE*d%%=^?xrswi_y%fCeHW!EPb@Cfs;f2wKZ^p z$UpT0#ErQmHxtScVE-8)TB!GkY+$&IIF9#k5U9fp%Cm0>Y9xcYYBvyh2KqyWUfd}( zkH{hP+^(VPkO79C&?z(zt|9c0WN0%RP6o}<LB-eY$?CwNgPH^fX;2-A+S=W>fva-C zSttwwIME?;gJ1y*3qP8M1UQ%dWZ#B6;CkD=I;#*)+|kr<AKdDWYt8b9&P(kgEaWc2 zI`P4zcnvQI674tyHM+U2SPet3hh8VzPzM~4?yk0mnIK3$i<lGHzzTA9&S`KVvY5=9 z8hpxRd!HiNUo@vByD6FMLMz#xwUR7!A+|0lhdQPFlUb)K@YluX<N}XQPnks11zy=T zWw2nEl-G7jdH5+)KI;@IZ$pbslKTE+%B#Aj3^h`hls9!s`Pb4=u!?X}C4XOhPA+p9 zQbq+sz~n-})Jn^^8@1adnY%kBGwqbgj5$RzFKszFnYAY;v$<0;fAgQJ2A>n3lS{Mo z6v-G;E-XFYjWkQ|4uf^su03^+--t4c`~cB01`*{Vu5i?ftAAfD_sRBy?k!j`j2!K= zjMEZFszb6ybY}n6zWGFg*Jti_uopw{58H(St1|!-wly<3jz)Y8r8DNkn!~Xf<RlKB z&xd_Y^_DoDre%$Af5I+6oPc^>e9(Z_{6V&;<l%CF?SOF=7DwXkD@!me^#b@yjl!tR ztvA>)hR;bKc^edrVVYuisfsD%l)e4N#{=p)xWwuLZkE7-nVWo)E%eB9adZen>pb)j zUj#6ib+*k@6+Ks7aSi%0Sczgh+-8dLaJj_sMoWZMCE_PmNgSZNR1p(PQID0veZx;r zH}e&UPEZe`_<-d|>CD3(C+{T2#6-q3H8v=1YCaFKgwFh%zksa6-~_V`ESG-2r8RMb zOPzSM3$WWVb;h?y<16nD-!DD}zBw9S`vYCF!u-wq`1pR@9lkyv3ZK5!SuSSb?tD*s zP6lq{YPmfJMte_a21K6AgZl*XMiMf*Zcylwt*-!T>{;&_*Ef829d=l*_u0qIu!s9Z zS~4O#GwPlXzltpfSp!=ld$~;`d;UD5b#`m;Rl#+|4Z^m-4!E}9%3fulA0`&&_|)`A zD9$~&IiA)-zK_`(ZM=FA!efTm4D*lVbk_2L`STE_oBiG0R`O|pA|JM*<F^^*%#NG< z>Ql>Q;OI2=Lg_ot1jDA$%jnM0^o+e0qn(8L6!>2InHjM&zB*WpI6Xc}HDA!SPPXqC zA#=HHWz+UUWzbgUqj^wuscyWMyz81F#!oEa`ZG$kqaWwVolbCQ|4Qxu{cijrUa@kR z-OPn-T7^i<%?xDa$U4aiN0jP*G-pi1Pn8wP8rs`w@$IV<e3-G@)SM52PtFHm0|_Nc zKol^BXzTk|%}~?t1H<5QPzWBUQM-?Id^Po0^ef{?R6MXOB6qOYCstRXrl+@OmxZn{ zoWu5ttu3*%6{KJkQ@Gj^?&yY~0#7HF=c><K0TD+25lEHFm?jt5mFHrq3ftPI90jLf zwfkc;Yl@%Rv-86_;J-uy#_WVw`^r@}*xEDcL9&rcxD`c6!oRT1gp*yFhtpP#t{>E} zZVqKua{%98DubZz_?{f$*DJD4L#)Wgdt+lg^f_aVEn>8(L4oj)24|=XK%1!Lgn|a; z(B{ATV4LOFud>9$Yq}fy;Jh-!l;5;0J<(O1C_aF~JB`h(>G%Nj53EjOvo;;YBb(wq z#<)Ya>{%J<uWr9GEnk*!qE`Cxkf$nuyuFW%L+&8@f6muO&OWr{`6Tl97I-X4x9;-y zh5thSKDhqgu<EZy@?ko=*5B_yM6@%|=)bG}%#8F`&tFdZn9lC#GhXuc-(7#n{Ehmc z{M`e>eoX!n`CydKq;^EDC<h_RXQIOj+x6N1g}?4{6tq+Lij%^RK5h5`Cxw6bx2MDZ z_o-d;W1KepLnnoQ?N_J6-*{5^EnUO2e{fdwpf$`UW3@>{Kr@8_uC2J)HTEm6Fw8QB zd(5{E6Z_Rw72J4v%M^2n&MO9K?1z0XuXpmRyWl0&<=(J`9uHBTP^F)^w8jyn#)n&F zzRpdT2P*ZzH;*QIqX?{GfZ)8^BX~)32@k+Rk~iGfhZ_O?YO;kobO1KjB#cA+bJSwE z;+Lx`ykHm|<rs(@VYl>We}bM2>nTp0YoWG9lshPGD#RB!T<jWxk=0@l(68>8EO|jE zaTtBX$G%!j`i~F#@ypqMZbNwmw;-Bxf|bKrO&(n=SHPzlex%1mM^KL0C`fO>#{EEG zIPFgpwWsPGJ{<m0_neHsw@&i|@Kc_n&vU-FZ-_m5(rHE5i<Moeo`7*Z&KaRIdO$j( z-p2JfzZVJ{53n=B*H<{oSQNV&M(ZMv$%z(gzW}dD7$3O>bG=K^<4ac<8m`AQy?lWg z$}b~HmmbNuYU}{5(%nC%qT`W0?_^qAd(6wN6_H~-mOdcT0h>o;>~o%PhPvm+Qu?;? znP5n5c9Lr)riP+bCpHiPC*0Y6K)J8Vr+R9>G4Ui-9jB_A4`PjO{iXe4<?T9uAhs-5 zE?@}0jhV0>fL)?~Tt?n?#g;pGgTkxx=LO$M`Yv;*MtJMnwU*6P*G+<>-SVzdH4-=f zw0(JSuNA&#mMYeXr5BLAz)Szo9D_Zf#glyb)Uk<LdT_xpV_vIRO$qj~{ArK-@MV(m z=n4nMO6TAxkKRAGKD%5lZ+%m0KDq*ja$1Yq`KAq&^pv|Lm$p}H?}c1x?!?{>jL$GQ z#^SxXbdU5##TqIh0;7|>u?-G<#2RLbb4sjXmV8ud%alB9HmNjvMcKU8wn-vb+9pjQ z)3i;h)UQ(gD&y-zWKZn<nE7#;i^n=Y%|IaeIf#!~!)|dRKYQf^`C&u)<nse9C3fZy zS2YvB8+nk~!DUv3t2ux{lGjo#jQy{0VNee{K+?or5cnQk%ySG48mp%m?_=!auA>dM zYQM??)P(#IkVTP|eH?)uoI`~_H+(^Tj%Q~FHr?kg9iiSFkAxjecu_LpzXFDYE&C5} zNy2Dhtve4ovRazZ!`NwbjCW`I)qYeN=3T-u48t~)hc+|VpzZg4GR?v4rsr%7UeQzG zoFZ)eB~G}fcC=@ELSxnS%z~8tYsoAu0IdGN)*@ugJ@v^M)xj~$;#y6L%Oywovt|9X zl}IjB=O>YDN+KBuSaon3WAZ``5Ya6$^XADs=D*{p8RRh=UoN+tbIZGX!|lik#AF_p z{jqsWU-bds9+AuJYaGRgF)Ro=KtL~c_T(Cwk%R9;nGwxo_YR}#y)iLGYsxq4_6*>{ zy7mC<_A?=NK%};}OJy%euk4Y^QF?M^x0j?>_CMfaWw#&VhS`&AyGp%|ETFdKq-FdI z=u6Hua7{0&8Tv%*VOX8Bopl_)3Uzz}b$p~f(-SIH>w&jx9j^imW><6_KPJX*J5}@N zB`^8Fc{apcUd;7dAhy}LF(KppOW6yf)1ckXNjRoa-#*_x<%otc$qUthWRfY4=mD6& z6Gyy1js?yG-~NvnXGOg_S#qZu1?eo67&?n?f$`vnhGn@QD(lnDDk<fEdL0i}`6y7= z2Hg*^RD<p*MW!S<xqf9>mLvS68}tW={IvNcE;B_pgj=Iz$T3jnzk1NAFOt&tvr3Q= zMl;8(V!J%w{f(sU@|O%Qv*Jcc@F`bZv0u)d2M7F^2fr(=mm^Ca8H9c#<n}>-ykEea z`kh5S!Fxc!Pmd?9@Kgn|dOzyy`Q$zh3CMiEl3UYYSHuzbz=$=HtTwNog<U(e9yEEc zK7ZqScQaH}Mw>alTHkk^$JAZUu#fXmceyhI>dP*=%aE%)a>BWEr>UuQy!#s<!4c4Z zqJAg`j%?z{$VDaP$$2~-g!xa8($y`}%2nKM*@H0ti}^>(gqlU?A47@LWlj8$AE)~v z7)wDu4cLBgh8(ySuSfe%M=0k$M>rEq+rBeDl(SQ1(SV%vIj6&_?R(??1eo@|719G2 zRj~WRV5g44gp%0neyH4KoP}hv+FPBWFWl$gha+^|efj*z56x(AwTDK@on_dg_w<KU zKZh=8Z_NnxhYfacM<1ND86@J2Z0f;X44z2hlBKn#*fC|<2U6$c08(GHJG0stfL(Me zIn<IpOf!uqs&O;adiz9<=aBhfPtPscyFAdIZ4dSH;VP9*r+doUvok{8#BwJ*a8&dr zkr0^Vg+Gg!_8hZoM^_8;?`y{m4|^u9#rdS3(E;<t3v;5=?7>LSwT!)FIBMh!DR<uI z3N1!e<AiJ?Je+l5WPbp82a0w-?j2k12#=)X%*CS36JsgFncs5($xAFpQJ@}$1#XTH zQ)814oy}yHwZ6jdWlv3xk+BW)?~S}|H=b?ZX?IVVQ;=W#cbgk~xJR3&fqQGyz~L(6 z>N0fbSC_JkMqiAHob!9_n;q>7f?)=?YjzZ4YGagf6OK=W`u0L$dac6Yy_+2KXGceg zdXmN@^4@z6fu9-D7VR0G1g{U#jFR~`_rKhx&u`Ealk63j8%5l8-(m|uiV++VJ9m91 z4l4FU2swWkci|MHxDduRc{=iuUwqhDGHq<oxBT;{s(f(95IZWc60yS<8hs4fnf(Cy zmaA*8@7UE2tQJ<G>fB?@szXyj5>q34a!Z1~rFZF;acwK=6E$hpCmbWxm&M9;a=3}5 z?PO^``bThx-PTiWyOfzgLk;&1&cbj}{Za!?7B7eX_QOsZp~(0nv^C}rO^A$l9>rI9 zWLp+LFb=b+O{35k&)kjS@|S`^yi^nbbi`S97e}MDaB;9jO*FcE5Y-iV#%1gox)zaf zM^`vA@=O^C0AqtgBuCV{><fD8VH5Ekq^tU0Obq57=EngEJ&5So2Egc{bA$Wp5YmS1 zsQBo#kPbjXO|`Fa+e_pb8&=@%P6phS3OFQ-0j<j!%$EMqX`CKI{RnE5G_tC1z}+V4 zkYXoQWm-@{(>18N`PLH&H4%z}pbu108J9>+wq<pgcFejUP**a1-(>jbg@BG!__i#P zvD>^b17>}P2Smm*1zTGd>z~2h^?nqkYXQ`4BftW$v|$Re5)vY~ms}753|wH>TyQg7 z!UbL9GCeh;oA{GE#V<K+{J!19&+HWc*hQyH|2g<}&3`Lksr)~D+W5D16F<@^{>`V2 zKck!YlRL#PIc@yD-NeuA6#v+Tr!7BxPbxoPY2`m%e8@Bhu0`X8X!vwq-t|&0w0Vad zAxDV5a5yIk!$$j>%)t2dEjMP%#JP2+8qkGFf*Xfscxoslyw;;O6th6xuY*D#<Es4^ z^Z;v?b1cQ=nJ@Edujq_UgG2D2^ncRdL1Zt5;r&aHOs<M!VctFgUGDj-t@};8?^~IF zBduAR3A)BkbcC1z_TVlUuDDA?p^Ns<%F>G{@o`4qsC1M(v5Yb7o?%Z!D^GEKk?42i zyvCVEhI@<9+$4D-BXNbJ6$sd@l7E(d$}@JUV<``(yJ)dV>cBqg{G|?PzaX8H!JpFh z4ZpG;_f-g0j0y(^UM-<Q_m)wWlS=k19b`O_`QorW(E(BTpx2)tUE;9JKtNIpmH1Af z?DWO8L<}y1dmvJRcS2ZTG&ZRS%Dg$as#{<GsjYXkVQPrZdkNKdgM-gn!Ts1P)G?g( z4~vKB&tT1Cc54*&TBJxHJX;{W<zg|C+Q3x;=_KqX(^8)k9VH-~)DGf1jUHXOJXOTB z`j_x9S^^I6sP9Z?p7lxC^kkSHURPmZKz%Vsj>x~<F#cBQfR;oqJ~t*VNgM=nSF~wA z=+Z^%Td|Y&fv+;wa+Ye?4D1F7U4|4utKsU^3((lrV-VI~ftEuH>lXn-W8aS8=(3-I zOABl0r~f9B*V(G>PsWp@2qNU~((!(!<9#z3FO`=M^JUV@$##o_CC?A3rJ{1kZI9qL zD&JB0P7<gKQpU#~>)Jdpi2EB|m>*$v`-YbIa!?i5$<7H4j&yt;+Nh32?)nE12{&zF zL|tQ3%f4eyIWddIAkl>kB#!}eSV{MxAIGrNGZSV%Cmo4&EOR$zVV3XS(o}FOucL_F zy#ZER<-Su)1@#B==bazj@B$(Og!U3`cm>~5e-h{^xcDJ@0C&^b$dV!VkRlfSQeHHn zZj|TEk6xVzAU^n8s1vxlP#gep)5PaQVxwswK&kvrk>4`;t(0G%{7#eK1@gO4erL+> zEcu<o--Z^X+iMDoA)f%jfdRX?Qa}_SR%^r9b-Zl?u6&po-B5_Klx!%#@3QQuysg<3 zF_bjWe?<|6OSFNZl0+e@iLh`!Xhk1Tp~&(wXJN($vNrZUP4pmJE}Wff)gYa(`9pA+ zZlVX2*h1Ylq)l!>_5Y@&XnI8JzI~Xta^GQNozyxqaZfUHq8w+@A*f)CdN;7B7rtR4 zfNe?iE?RFM-)e~d9AVjO03~177-f}E3qwKy{=nDlp1v`=XAqvDc!uE_iRV&0<MB+! zb2*;rc&hQt#`8Hmw;|ql@cb1|2c8pndI7!z@4a}U_zvND8&5XaZXljHc(%a(0-h>- zuffxV$CjU;Z_mhdWM$_#d-Uw(%I^&T{`$B*efyokFK_=d`Rev>KzGpGv$})k=bt?= z?;QA?JE%)D{eRZU{uNEo`QCHJx<Uv8m`+*Gw<WJ=K)@M!G!Gz{D-sUJ0z#l>g$Q35 z?7wU%#P3S&%7kH{i{R!iyj;wfzW}|*e5`&M4Rz=#!K1@{YH%S}&sUsJF-={|+3qbH z*1|XHxYhhx-%ty8ljE!iE+9RTyL9KgsHCr(SM+=N$jj_K^#yok%x$f?S<<djj}#yy ztHcpdzl1|=!B6lYaMj!*VD)nbNm{A62d>EO5jY4o`;%K~SdSJhRwPA{0@Y42H1HRx zVa$qy9TzX$(YZNC=jH(b&~f#b+;FZ*`ntDtjB8*C-O`wYuOd*a!Y&ba9?bA1wy;K2 zJBTS;9<jN%ui7)jN(2)}SS||2t+Ws|dKY6LBFU#7WyHN`;@G=4O2v{9X-rM$ZVg~5 zTCIQ!bqZ}E)EjeKaf1;vR~FqsY$a{WaGe*mFX(X`5x(|7i&0k6w(1Dzk=G=FjRs}_ z_c|Vq7B#!KK$qa2y4PqRf+m-#!6NQYx2Xxg3#S`<dx7sebGwW`oc@S{Sqy3;d7a{g z>iY9Q*D;Ty@_vprPEDQ#fPp;h7g2e$-~xFpML|tJzxq>@f|(qCp&CvE9eaVGIEi48 zM(~VAFd&7Xt$|~K7EgxW<J{Je4=4X1(4mAN?sXRK@Vz?p=I%m&EJDh7gIijTqh5Gl zba{|-Be{Y85I~77oJ^}>pGAo_AyYyPlN-kk29PQ%6UeGX{_x8`H4xrd$w7fk$R6Pf zT#1`&3-zkOMw3B}LbIysK&)XSqWJtZc4hkv_I+be@D5lIiYC<)4JEN9m$|qVxquc? z{Ro&7%U$Yw^7g22@U5?`FGl~U7x=f_&rB?5Rb1bkjbmV&>0U&4NZfbR?U#xuYiqa{ zF8(F96d}865>WcpQ4F6FTShbOn~3<^y_1DqN#K}#VEaxA$n{V)guw5nfOQ1+A@I%= zkhevuqk{naUJ5viz;h{3x8H%RM0Qs~pq`1FBLRv~9Tw^lPz$xg*nTI1X#e7L|0&v` zkI>2KI-^7f%R`xxXnN^jJmrRCbFaki;>o>7`v9jE{Es4`%vArO9aeCx6y4Q?2+M=| zn&XuIzM&4_;7^i;8a+n!Lov}M5Pn}09vb6NN6$@q{4~wOsSd(pa%@duWOqS{q_gxV z!Jj8XY#}Q32*Ly(NCDRp_!9t8VXVQ`C~fdJDSs|-sYXWHVgdbX1>BL{qjB|o`lRw> zwWR+$B4JGF&~qtpOBUu+JdK$qW3@k9lLl%x+jzR016IV(Mtscm(h;Qa8*6RJSgEp$ ze_2Y`K{qhT{Xyw?tQb0cD49d;UYT^)B0fdKp?6W8h$Q}N$Dl6L^IO`*JtyVncxN5w zXvXcFqa_iW8PNE=$&zSyWh%bVv#g7o^fA_UoD!e*KYl9z^!c;kcXmoYu~}s9QQcfS z=UC_OU=lOk7{oghOT20UWK368hWMMe;3Axd;U-A9lkeIgNf2J&*MRvq7yU4b3m34T zGmp_;f~6|2I*u02!9+{wRUIbe75JY7F6wV+sr72$=^Ive`MXzR?_6-RzEB1S@8DE_ zUm+8ru7TK}d0_PnGw2J|kIqJG{~C3@5loMDNB%9q{6Wr<(2s9~1O2!xmJw@^3V3zj zje;7bdkt5hA6jz)>*zNwRDmQmBZ=*Dz!0rB>JR89YIJINGUQd3s8NG-NYn1q039-* z7Tm(Lpc26Gta+`$4Ho9$-4tifp9KMlQwh8%<EL#EK_p{S-_OHhd?RHX>Sm&9K^R@g zZ(5PngMg(5b3bE<Z&{uJwGM7bRx?d*R+9ZKgD`R(9Q=_Lu3D83WH?u}k)o5EnTB8{ zi4AIPjU*rc+8Q}!<zHK43w|B^s^EMAuRNO%t)zTGVqdhPsIBoS0BsxX2ziiS_*1Pn z!vbz28w;_+W*zQw9hu<?dPZe<)ITJ3XS9OnChBl>BcYB06s_>meFxmtRceK1xM(9K z8sTdJ52#<E&OlWHzAb<+hLV6L0lc;{2>>G{)b4s*!W>Xn3s+$j2jiXqCmxcPyuzcZ zR>413;lkteVZZLVxRREW9t7Nsq!TNg>Zp*FiEj8FK<dqNSWj%q4E1;H|EaEVRH;XS zsk)}DD%!|CUi|`2Ac{7!J6Dh8GS2-bMShJq>Olc*HbHj-6l>fFmoI?9QX6=I?12Ot z;1fJ-)m}}RdRF^I8#%0Ch=mA&_LgVfL5_VL&xBb49QuI!J+a10gluc1p2Jp#6sp=9 zspsIgdQ?h>Cck<V!saI)BGxK(wsfEb4>TkpdPZ9Eu_q#d@{5pIbEeTq*;{)n<uI{D z#m%6x#`}Q>p`WutyEi-nn<O~M2<9;B@aHsAl8(aG&lb=)+8P%lK58n_*2rFfe{GGF z*G#9akv#z&>SbNwMw>J=wf;=2)%@NfnOX%HTFnm-{Lm~UX^NbGztSi`c@4YGNwF*Q z2XlCS1kID(0ctJUzy{fk=$H7iBMD#5Xl>UqgiNCYIN|44wUCk2h5?-~$Xn<GDkjYn z0w8>m+UrFP&U^yGeeD2CxNidtHMkyWLmWQ{m(0?r8xt{uJ(8*kwX9vt=aS@dNm?OK z^O@Y=fsy!f?DGQ-^f)edil5WY=xQ(0I~59+U;1m^$2UrxwABabX7mD3?E<hZLc5~1 z3-M(k)XNb(J-{1!soLdEh@ap)lE`qcgW3>N?)8qoG=0qT1ryy{S~B;RJi9dRuD=oP zs^Hr&jw4-R;2JfrKWG8v4J`cO_QmCAfTFY5UA}9DQ9;0}EF(*wg98MOO}4YMVow|F zutFxb$du+Y62uj~i>~PQJMfE*UI?AkR)Si=*So|z(vOH?`GK+c2a6l#7wz^~g+CQh zKLR{O->)G7O<#0MN&2#Ws2__qEe6$_nTbxRr~H?6?~k~VqxP_e0b%O7X&QpXCfaG8 zvJC2DforHn-rb-$tvuir4#T+p(3OyrZ0ZZkDHuDQ+Dt{z?GfDgJ1{>YN@FbdCP|nq z|HQ@cg)(|cr{d}JbBSNE+lx(fAyrs%n}{8eH+W{K3(!@Ws=jc>>{frE3TN!vm0hYF z{od;0MH{jE^*vN(Y`VS5Jp1mx>e+JRs5+pl7zUnR!C<CGasf=)`hx2U$aTN%X|?0G zJkpL~H<a!8b-2uS{J{%mDN@K+vb?oplJyO{*U3s1dU1)5d$uM}+0tJ+3Mz6gQVWrC zS4ECr=gm~)T%F3BtTRNnQ=1bNC5}|^2XHUhM9YI*#8bb9aEhd_MvDJt@%x_mrIy}w z`7C~|)N?3?7yhl(b11rT9@DEXLsQ50^igc_N05X*h@kq2#Kbu!8;=_m!51sl>IAA( za-ZazE@VwQMIO0~6<+l!Fd>2G$aiJ}nJB!vAGq|9C>)2fNlJFVNN*^I)F${^q9KVi z?L(KJ15j>m_o{CKeLC}}(y!6!&*++dQRnnI(#iCzO2Lz-ydRK$a{l>M1Vp~f{*I$> zH3pyvN0~g*fsDGe<{{ePVpZmA-wz;Tvc8&9bK11xb3SIuBaUtaS*He@^55T8R0*0C z|KE#DF_Y2S`|xEUN%`NI^uIgZAL)}nYo=py*T+@eed**+%O6Kt-Q>^g&(Kr3ddd1| zuhXuTrpglpJ}Z|gilqFXO3P(;{x5uh|Gp3K-+xMf-CjAcSA#^VrT5>-`tqJKzO>J# zDIZY2lnx?QI#d54{S(Ky-O!uqr;V?=>L`SMY5rYx6v&$^ax{PWa24zY**Awv82^X8 zH-V3;$lAs`Ne3Ee=tiTq5;bbnC|fkBV1ot>N!%Mlx={pNnKtgw4X6l-ovpb<(NRYo zb<}Z2W^_i}LfnuLBy6L&jkwGVu2Y$agB#1J^!Gfc?!DdF5V!f>|Nnd8m*m!|?bNAL zr>ah!I(0R+qI&au4q#Yc4Mfu*m(M~-<T9DxIRRwBY5#{{!%T%=0TmQOpsqFq9ol2B zcLHb+$^m~))L-6s)ue9Q*dagWMv8Cj6P+r7<smk4aabf$!Y#)c$pd}SiV<wZ?I^4L zlwfj8S9wLpE#0Zu452x6?|^HRgWcxfo@bs_w5Xt6)^AXjrbsDZpa>6OK#@X(^i0*2 zb5pTSev@)3{Pc#01*GzmO`lDuLes~U!dad2|GG<llrQ)9W6MRcKNi<OcBCb*{*!jp zE)*LtH%v&IzR0vs9=sOo6;v~8m^!ZyC^(6S8LtksT74E^X!R|+)u$k2wwmU+?(iE{ zLL<h7L}Cd}ha9S(Bx7aA1dS&c5q{H32ro7uUA&eFAzuuG(NH^$sv=}EEG6K)Mhcre zt+kRc{_D#ANy6^t7v&#ix))amV7cS-Z}F6Di8Yr7$<A5omoW7qK0RJAm8FBWE}jJ~ zj`;>AFSTYh6qn-tUtK`lG|TGp7N*Q6JQ0Z=7Hlo%+QHFUoX5tgrC8_Th@Q{n#EX6E z{i!4ku6ONsrEHA5pPE@7eQr+-s%r)icT7)_5?q(v27cx;C$Usfv$UwcFd8C#;Z4@~ z4ya$?stMXFi*5`RNqVVHin$!j=EBY_u|(j0fxElMqbKsWy>xL0dtGh6_3%Y#Dy%4~ zc3>kvfA(-xgget9Vm4g1x_BoC-+8#f>g8YBsO6~lWf_d!p$iIX{_eI)%sV~UCtYUQ zC%ud2_sB^yzQkpOy7hvci7vLyjEA5Zsz&v~FmbKIFp1ixN`nEzFiF>TrH3G7ic4`Y zqK%!9b!VoP^%^_t7Qm3zv{q6GnORNCsI_*U>+L+x={%-o)RT4|SVpZAQQZTLx+R<m zH2D*r(1)oY>&&Ap<!hv-{L^((y+iqD)j72#sJ;ZfH2?V$jq7m%QVrIe+gi&I|KZS% z@I3(!bE70>CK_J{u(g&^{HI=Zvh{EeNjU$-mWi*M*4m9G0LORs*Q7mlqSjik%li5d zUCe*x(83Yz0+gxS60+)5a{&X*&1;qssa4K+gKF?h8H<Toml=+DuXyc6D7v+nQ@lf6 z1G$E=dl@TGqbIXfm%$ZJYwdY<{Sy(Uj!M0TLKBVO0G-xaCgQ)=S|{|TjBc%UnO~|@ zSSQiQk=9zv3_9s{^GltLks6+5;ht!mgJ!G685rcX^k#r(QH(R3t+fQ}oO8{upug0K z7i-35;fkOng@AG5p>3nk&9$8iFV>9pn(s&AnIC9D8)}~fssXi0cc_e&?>Fjq#bG}# zj`EvgiR(*kkH?G5hunM`e#fiiQnP$_FCDO+lJlV<Xdgy#8qL~hfao$R1L#}4=5+(3 zjLL}!bz4OD`Fm%c+add;p0dmOIcU@i0&5~i7&lYd1J4VuM)o)2Tmn;`$F9K>0hyz& z_D0-z2+N0uu<)KS#Ib09aJH5fPscaz#K;Y}c>4F~A<8eKGTHu=qbcc_&heT)nRqP_ zCdxVBtWH$vo*qa)#3p88UP>Oh59SVrU^Mi+U;)k66`&T@5wIx2lTP>^g?YeJO&S`% zvdH79UXF0=KX^WL4Y2U!jj4nx5MKBnCDCH<ZTEyWdqN+2LR;||=fq)whQ{SchVSZO zb1>3?KfV_ZI}hLZxO<p>3iJXzta(MzF#Ns%4}>BgURAx|Eqt9e3@>ob`n#um|NBr4 zqdgP<f!96T5qIve#Q-o5Qrc;B{0IJK&kfh25}dMRA^k_5JiO;Qb0ccsxyj>|ZzsR; zpy$W_6*CVtULgJr?!xBxG6rv$z9=?#l*@su{tYMl@LV)D)_BUZo%R~dXioT$y^z)^ z*KkF22GrdSNC0T`+@jHYFyVBB&!Z(vE>dcVeLG;bM(-vBFtM1|-i#V{LBX0)^(6DG zqY7SKWK;@0=R%f7JjPsamVf6=OwV4}Z#}D%<8?WoUoy;i72E;?Yu=Ia#q%{6;!1G1 zz^c4V^^yu@fq@t#gjuLIou1N)7MU~g_g3@#I3co&+@1Nq3%|?w;dG#xy3=}&Ewa{g z|Gdmv&t-Exw?{dpG}d#cU`2#^vU`cD_01vmBr{VR7gSG7VtO~0ZkJ+t=r3{Nnr&eg zFZP#EjzgSlL5>8c7<F_oA{&5AZX0OZlMp{#s?Yf-QKI9uOoWpd{7x)gjNho`Ulptc zmyHH3-?kBJzumo1*ol^u&$M?Q0mkai-Wl@31y>$4PoCqcs|4G58Y|t;(LA}P=~<X3 z7v<tstx?&8{1kX@E)xN`fq?h|4MrM(eers(WG!tHAk0}6K;QI3inx4<i!l@mgWze0 z2t>oR0*5u7%f8g&)Kkv|xm6G&;y3GPAdzA`?5X<_{Y+G$HbyFceHgzzv8yrgr^O{; zie#3>+Wl2b=aDll9?d<8{L|u9%$7`P8Wnr$sMXh{UxftRzumYui*6ON07W~KNv$VA z2hm7jaN#{5D}f0zuYaeQBkOGS;u#I!FqRgZWD?7V>F@wnZY)}f-oYHxZyMgus$7kL z$raP&G7KolscM<5?IJ^h>bFzP^<VVBpz0g80(-z*94tmsX9G>%8lI+aB_lg_C|QX{ z`Wy+VftSbt0UO_`{gDLpdL@MQ3M`?o51GTjQ$35su;^xzfDTLqBNhp(Xol6Yuvw(1 zdK~g-?<VaJv3bOY^=cY%+cDL=&R~o!N^F|=G(0ZiCm%m!@N*Y_9>UKm{7ii&&0B@P z^YHgJ{QMa|@8V|=`1cC@BoKE5!sp}rHvC+Q?+5VLk=5y6nhvLDSa6s?Tc4f&_Rey3 zf=IAWUmM!b{>sX7_lNB?!UOjpaL-O-^#9L6S&v}RLVIU77T2_Q=3i?GBJx`ERb^8y zc$yoX%eQ0Ne2^O*FOuqMa~fdS96W>+*yw~1k`39^me{f_T$5u@ajcy!%g&akv++b9 z*>X~|-2rZML`$%lbwiFrEqxqBcaa$4V=X#d{d1dz#esHlZvh4@*6ZS4K?qpL=#lL* ztQ=))e%H5*z!U)u*nM^}hoPAErQK~eGyyWR(SA72Lvz$<U>dJw%LJFnb|LvTE~jf; zOpBKBDY%$J@xQ@W(!bKPmVIw(@2+1@{XHAhb_k|hAk+kdT!->c#C<V{t8DEeRP-+e zYSvZ|d^Jy^PPeayh5-Y?7iof@hma=tw5d2JX{ksA)koMBN&lhuMkF=_)x&2~F!7MO ze^Av=Fy&t4jBT}?il|kK9H*}O#!1Q!3vW3*-3tYW8}H({J)z}+;B?QPSU$<`9Cdn> z0t+rnb$xh$SZ-=KjqUWcLlk}_k@b6#gUfa%sL9F-sm-#wfKJ0xJrZ3VQmX=H3p~|_ z0|2d19-5)vrOF29JkXj&drh4NBwJ!Hi0m&b_f+4EhK5w)LTFfnDqTw8f~DfS7Az<4 zV!<*AnC)W0GD>!*utf3Ha5lv{N%}!dt2BPbG}D#o6;6M9q{tZWFoHf@So8WbqM7lj z&UQR|&vg_&;d+h>s)@8dfSXf)d3H3@I0>)0`pbRMUdBn($YEl<EA|5COh@E!b5Zpq zCZ)tu!qh`&l5Q@&xFR|6-Yep`ywXc8P^JcJFd3(w>eDzM)sa=1mTLRNQVu`$z*pos zcF2wIC!q@gZMc`o4OOP52k^I!oR7mN{7xCq<rVPUqArm_y!MD5qvBtH*}uePiSR0v zs%6}DfPvY~5j_(jFndr{XqKS8m?k6~t8Sh*N&KmlnOLTy0%LXJYL};RY<l8qXMGXu z{Ts)oQB{X;T*u^R9zOFMM8Y7HA5aYw$lp0^+^L}4N&dgh{gcr<-pi=t*4?;Cw(;6G z*^T@*>clabxF>_X5g>8#P-fI|Y{g}Sfk*HS=Pc0E@XM%^wPG!Q8+Fw7;Z7R~SI6aI zyq3R>n_QC8DW&i?dKZ_#2sPE96_ALyP9gGj1in!ex)Md<H)t;z`MaTR1bzn^YUK|s z6_3!8k=^<WT40r6`JWw|4<q=!@oqd^74%k9&fS@4&s6L6ipeO+i{qkP-G_o6e;akV z(B9zI8GajedGgKQ8Z{HC2GnEJaq0ovVX*BJP%Aa>#A^v90w0Sdl}|!U@LMZ^2Ehmq z2@*?3vmLek9Z(e^vp^W(No1i!@^?U;o{TgQIb||5<su8@4t2v#MM#A`$3RFcN{AmR zto|R!j-{w8rW}!CUPT$IKKM6AX@DDePF#AFz5y6U>FXG_SW^52A&gR(kpRY9BwSCZ z`Q;*5T4Z@su}7j&WcKm0WF~J6Q*oBOfyX-g+9hA7OEyg#W?Cg<WiRWKw2HA<pvVLS zF&p`~wU)cOl)ES+5#+z_x3as{d)RR}V^8Zn#DPZIm^5(z^}WY%){J^^Mg!YL90TCb zki;ged%AEG=;y2&=|nEM&W?4wv#k=uuqqdVP=De@65e;IHCa?&dHD}kK<027`6VQ* zh^m0<bt=b$3}~39sVR_*mQwVLQc~I%o9A^z_UEOPxrl_f8$1!H&is^p<7zGTk}8b6 zSRw&|(II4eP=c4W7GszoIGn*oj#ae+Sz%Vk&!zI2&Cf^VlZ#Syzm%PA?YFXms+tm1 zE817+jyBcnoRq?R<5~DetJl@_n^}R(R0+(_;pNGAQ6*17e7GeE<Z4xwN~R)ovwDb` zUQEWXW_%tqtx5tn5V$9RxXKc4O~N-4{`DtFygCWoMBv8+j(AS)>oDAiW`_58p5aFr z{=HCOG%;W=gkMhPzfa<s|CJ>0Ndj*MFt)NN{Av=uo$zaz__ZX^$6_x6(5R&%4BZMg z_l4iEQ!Jq}OpTM`+~L34@J1$AN3ys#lfd%`+zUW`AfW!rczqX%qE)?3YUwbgsangh zzMC|J;b#!W$iw{<pwUO`c(4)(syD}xOJzvsV3m<*%*R}yc6^5H$YOP~gVo>O&gx6~ zd8J?yVA2anRjg%o(xAEusbVXK{D^UDjj#V{e`UN^t>OVjQ2qNfj#VtBqDKZ*;Tcw7 zf9NWLR=^un*A+>?+{IAS-gB#D{{fk8EO-tACC;-(c%qAD#9b}Mg5?70kel);lgl;} zs_mB=mJ)<x+X?XZrItu<0L^*hVlU)_6CBY|v3YI>{Qlwu6bq9~K0Ta<0A13H=!p)% z69Cho`2)DvM<*HbLA{;q4ts1sr~0pE{rPtN7g+V5tzQ^8%|yVtz)^42??Tjq!ZZnU zO{~M|63#ZmJYh;h({sScE<V9<vJ0dthTi$R@av3tlHO$RPV{yPs0+P~N-o+onDhq{ zP+)P6!B=mi@@@?34wsx#Ds3Y9Rlj2Guge<@#hxuhE$}XMK2?J;3LTU(8WWArvo!V~ zg8Cg#OcSqTlo{I_Vw6^J%p6cJkHxOY*rI-m2pGR%8mgzQy%D37DoB*Wu`f>O3pQgf z2(O8r>RVBfVGsp8V^dv=5UR<-ZZT^DHV-dLDQ<u`8($hww@Q6v@I>U?kTN8mY;-y< zEW{+lxqmQJ4UX_LAW1;Y1hgU}fHFpCJOk=TAW84w*)^Nz3<wpgB3%p&H=pK?xjnsL zYf!xhITKQTL}9t%Qzu9oc(|T2=NuzuQg)Q4ENUDsH7=DJODNPVqNIZ;&lGB++=vKn z1-8!Fr!__zgEAlui3gu4m`35}0;a_LNa>%S`;+`)+B<|GKSA7%wKE<%W9|WZz7JPP zah~MAAV_kMu|&wUHL{P<NCw2<?-NuHwMiYcH|bvPus-;(E!Y|&gWN?D-64znccOb4 zcW_GJso4#LPj=x-{&fN6khLJW{t6iEs<ZwnRe&wdgnzhDnJNJQ&nKyH8c5DZ=kwHG z3Mm0G`$hN1_P(DQ_Axqb3s4*aU&aLppchcyUS%aJLl@`YKKDt}Ya+ZIOA7e&`2Idz zH9gsmB)yDE&Tl}*e8gaH$S14cb$UBKpfV8&Ddk2_nNE~CbXc;#fPatoBkl4qFq~~o z|LRyD`|m_!iI9D3bfB?B$i5Z6C};7};M}14^dmvS3ncu_^Y(<hxc33kM9YLQ?5THg z9*xB<g}PBC#V>~;d6g93!yQVt2k7*V&B=zp2BVT|!&F&@c&Y(=>9bmv9$c0K?(nbj z6mO|&ruZ>Uofd1;pPo&fgyfojN!huflkC*-qqS`9BjlT=oH)@odqKw+rpBMxHJ<z2 z)c)sQHzf?8u7&3%HW49Ro)<zw$BX}Nne^vD^E0&tcgvLv6@W&*ITyeaU*-HUXntBG zh&#XL3?G}9mC<lTRy1JDb3slk?+0dIMX#(#52-XeSW@A{%Wm&mJ&DJKTO|P3-RY5v z*!GM_gr&k;FSbA^5e275FE!@5S<EwbzP?NZVTeSm?*5JuASfeHQ@tH=ct}mLYl=#K zP!P#bXLKQp!+=2$Dy`UdXEYNK#<_G-?ll<9)Ircng1vMQM)wlzt%JCkf#BBSymU|X zaOeWy_#HelZQI5vgCKmD_uAEB$QqPC;xF~J+-J2>hM=4#@Uuf1CqVUAl<R_O3g@Xv z0>l#Vb*_$i&+3eU4es0tm}f2tr~v}>8qVA<=33g`1L7fQJpK*J^1tLMd1*q!g1PwC z7Jv7P*-wuaf12N@=Sktm%854r>G+Wy`L%LlGA#BcrO0pGa++OAl3>gaUhS|xxv$e0 zOQtsMS9E)LcxtuBfp6WOS6~tZ)k{yqTI0KrHAt~K%=rvh^l<;XGk&-33cqgJv*<h0 z8-=+V8DJ#%6eg#9jUQEcsrZ&A>5KY|%F%XM^UtZHd*Gk1{@xA$yd=OL_(#gu^L=OA zY7#I>Kclj<ZM7M{D|ze!ADZ&mm%hu6V`2CwqE5~)AnxGW7Mevq<Qx&<hmJZfw(LWS z8tvZ%CSk_di?$Z#yD+b$jd3DoE|e=6RneLHSQe+CpRjv^>ZOt9mMC&aY}p-PRY&wp zod(5@H+3vybaF_Zo=e`>L;?Qc<m6Xp;iP2LvfLjfQSA1^?d?2Ff#dA<J_w9cu*$O9 z+fUl-si|hXAY`^#n>v)D>8~AUHT_7d>1W$bKhtb_iEfAKjkR=F6o8gSIw7*BE+y7P z8k?P@iC`C_yY&bE*8Dzsl;(G=6uB@6d8$8UYZr5MK+oHo5CWg%q<a>=!3bGGa&;dU zv#aR-$))5|jGye%5uWPbBUr8m{Efo~g342U8vteM+jngM=~|9;=D#e^ylALgy^oNw zu?(xrTojd~)H}?8jmw<l0Lw|>ZI-Y8!6aBD`H|rIVHio?GF;dUssXSW%J>5N*ugE3 zWUG1|Uz~=mWO<3I(^X*Yc@I)&`?o~;PFq!+aNr$+pX+^H8Q&=uY&x9W6iB$zWlMI3 z&Hcj>n}kNTXp=tH>75<YW4+rk>=@&~NS(h|q`y{#p4yZT#cfN|eRJ`9%(puccU0tv zq12UPK`?s=Y-jF!H_hART*y?<F;&xcgTEKcw~z2K3FM3PYPxJbBfJD*KQIsZ=HO=r zelEk$cQK;iUrMD!AL?b>{`eL;u`sFW*ZjEdSj~^E&RkC1hGgi6mx_=Yd<3~w=$5%X zpe_^;cNZx$`e*@mFOfT9*fa!0P?J&L{e|0H-h!3!>fAhljD@))`RCT$5%?1_o|C`0 z=`wq+(R%{csji0VTwXjmD-d6p%X=s4SKpv1byRjHmdJgtal-Z7Y?o?y1DDei5?A?D z8Q9sliD`{3iN_>$j--aA8@Bnk;T0`lKtu}GtMSM0OjNBTqAdXOFYN6BADV=BY}EG% zi9CeT(7fXx83T`7m<$tF<*Nx03TP-Fs=?cz=VM8wHzfNRg|66~Jjd)@#Nctq5{bd! zj(%(@&W^F?0(}{V=G_mVIP~3jNN?c}uGcRz3iF#)2F-m^o1^2iZJ5U2o=iM7A3&U# zqT93ZuLx-IUA+#Ua`^(vj-z6Uw8#+E2!(9;8=Bx#@2n3?76XP=;T)Wl{1%_s)attp zYK7mF@zEjbdOPDAcE&4p#%qwVA|<1x_D@G&i3CKwC)nBFwzKE!?DLU*a7y+HTzx!l zj8HzljH^c3f<O(Xc0kLlkzZ>U(he9@HGQ!tKsg^EB=~;^$y3Suo!=xO9&o`eggHbY zK%<w3!Tp+g6@Z1pEg&`OztF0GT1#xcTnHF%XL;1lavWg5`9qy&crs5g{DhS#TnUy` zU%ieo0}BFPR~gnS=P+ofL%jeMI!<zt1T1(;_!%o#P_01@q^APvui!rQBElNwNf<;L z<)wh3e)A0bQOS{wo#3<<-F3l$noem{*Mz!^n|N^{-r;~b5A~U+=;G%jZXPzTmXwpw zIY!-b`3}f8ZE>uF=FyUutA9g$P{eDw62*bEz_|-B>Ue~J^b{-bD{}BgX;Qp4n^QC9 z(}O4=#qEf?c)0Lb(t;q9va^l{e{u6Pd!u~o)9iQUdlM*ulWqCtv|`ldONC1)o9c?> zyGRfzm2WPcjXGYwh}WJb-|V`0E$tLy+jBg1i*Uf;@zyCoJp*eW0T>}JeGz&NA)}6q z)_5)FJfn_RU-g-|`V39OGo`?X?K&C7B$o2hWI%m@7@Sn&8xkm9oV%dzDtyCjpx{WI zM7;JgDK1yO!}2{uzOTY}Y<t?QzO6z6z)(~^{y;4Eg;w;clVo&>$!kL>Y&7HeIX%8C z57}C47vVSm!O?*I^_=--h$oSF?cI`cu^s=2{k6pYqP|v_BO7mgqL#k#WikQO&C%E# zAMR&yCGI~17Eqt!unDW4c<pKw0PgM=uU(0+wjs0&sAC!pFm9@38EYWE>$o)y?`4&g zu^hK~9<qwrXczN3i}^@S_n9GHOMo^5X{~jDuKX8kx)pJb$hqNzt@08}?f^(#jH5C7 zhjhnp+|DxB5Vdbu=FKcq?uqE6i6ty!g1Y7_<S?(AxQ$AdqI0y?4naQtYpu;Uzl@TI zX}nM}Ctgc!j&Y_l&ig5pf#i6j?mS_^u&^M_&%pxx9!o<Uk+h!bOyW`kw+g|kIlg_e z9bV6E&G0U)E)jL5EJxq}nr59NP%oSb;*?V44|ZIh>eYxb>Ue7y&PfmtA0YCbE#I%p zcaD5-l<!>mzDzK=O0c?0z9aZX8}Xa}5=(QCI<Yhxzk|vJ$wGmK>dt0$Fov*aw(k_h z|C`_kP(aoTm{X4yQ3)B)C$?-kdd?BKEVk?$bc!Q#VQd*yBaX;9vO}DhvMDUJHiak3 zsv<HnQOnHMB)`8^Y7|ybuj49|@L{wcXYs3#5joSuDtcDuc4-mTJ7AA%hN(U;VeVSQ z#Y!`TsGhsN{)^0A9+Zjs_6vkC-_yzg3r+U~UVEf<hgbb#JS8U<qMkER+%7rH%47Xi zgOOJ}!SW4o&&kc5a&tWvfZ?+-c4A_~(-@fZ(Pms?8MoT#oK)Iow`UZv4NqiyPP5xH zxI=pm>9IX;4k0aft3Bp^KbvN{tJb5+^H^ntU1bwsnEuVDJeDA2E}4wtaCyTO;ZO|5 zHG^Wx6)B6U^vDcVWfyWA3Te*{sy7a|IyzrnXvbb{S5e-fiqowsrcJ@BxV1P;S*!d| zI0>`N?>}t{faFN3qk%ze8MW2vyeXX%9m5@Q4iZr9%Fm!$J9uZJV2vin$*XJD%<mPO z7j{SXn_RHGb-aVx+G#awrto3j7UZLDSKprzBmBw4q6^dg2!O>m)?YOk=<R}k%<;I_ zLF7>GA?O;T7=oTRHaS*WizzT2FqX|1x!ws~GyfYoyU361J?7^L2k)D(y6*0qG|?1C z`SZ|-({l5IA${Z6Q^!RQmcm1fW*oud3ZSR@RX{wAo`z6bDKBxgFu~^;uke8bMnAzY zln!!%EkB-*@4R|f6(;h;d{13HV^7N+((Xi|BY1Hc&h=)&2=er?*n)ZeYQ`nTTZ2`` zYD5iz)cPBgFC#q%7D^_phu5IyGfMoQ;rWU;2Y;5a!@oNEQK0NB)f@IMGQmW6jl|o& zK`Qw*zH`~0DRTG9J$YJvnifo8qn0U?%?la~5M^8n0eXVI55}LuIE?!dY|>*^)Q9&g zaJ_w?+Gh=h>ysR=y)hixPuW_Smlin&_fyCZY6mQVbZmdbYI)cW7zXppi0A$XAyXcz zb$04K?9|We)GQ9EpGv0g5xH(6h_6xkA(ls)9Kw(EIs7oB7b1D27cX|%Tr26Vi!;0S zXZ9FN=;+Vvi+qX+nu-rs+gm|^k@RO4vHh9-3osDC^k?=yLL$wuU(|-s^k>!tvg!~~ z`$7K9+_CwvUK@~@?N-Y~oH^qqZiX5WGR|b1*>nJF)<pVa0oo*(z~=_8&Fq?OgnrgO zeIMMzQ6R1I$yDINIzCDtK@|=w;ytN;7p0QkkVP(2r&h9-BuO3*tfyENhag@f#x=jc zHF7Gpx4n#Kxi&Ywf2e*3WBg<5>BLYw!Z4`LuWH@`Hk;6Jqx?}%$leQTsHg|Ny^j!S z&Ryi>mc$cGuGRu(7_v(O*#$;z(mTcztd<sr4JgllBL$16rV78SRw?{$_$9Yc<*_zA zZv%ask?!vm^~P2>W2>Bi&HQ(4$2XCo3(}A86+JVy<J-u=3&y2E-x(bj+p#mU*Mf2B z#}}tZkBRL_L|hBTWgK6e5v8Fp%8kc}i@i~cb=auIxKW#;ZF0|~ACQ3wK~ud4K}fcF zmPi||Y+pBn;wJ=Y`QFLX#a{|Q%cQ4^?Sm-%lVdEkdPq6B?~S{1T$5w@6R+Yv!9rW? znX-P2f4n_0rHc50f4mb`f&ZbB*8cH=D=|VNydSccl}42UR%U4%#v*_Ln(80VXQfOu za$}`>NfP+SV<^6iTdZ#U<Mr*7YXb~1A@*BqnT!A662SZtbyg~ce%!anGu)So*K^M! zlZZuHDL5I=eNfkUaR9>y5wh6R-cZ9luYam5n$5SCBmDwufwY7g-(t64d8&E&05fhD zOjUgR>;GHSTc!$;s-ak9EsULv-YjAq3c$;QZZ$|GJEX9?-N`J3^#=^7;kJe|eudkh zGT=%)@#&S?pkjbT!F6MeLhlYJM2|+kEXmP7pxRfE&`x7DUx~!EESJAIGBBY2Eb`77 zpNi+#Q4Z&WUjtMg1Vmjg8v|X#k0U;EgTFiZ4+NRJ@gHat-?psizG}!yt`toFfg-sM zIgDezhiwDLS6SjQCTytkIb~4_7l2}o5=cBoEmh(%3JaBuMSC~i0Kd=_gn7|1T+hHC z;6DNB>JM<8q;q%m2e@T9Mp+?8S*z_2@O{8A51Re}-$uxs2fw$tvgMDABGc2(=@9l> z{>aVjIhcQYl0O~hv$Ji>`c1NDz;pqpfy3E=PL}lt=?0jV_511u$dzi;3;lE_)B2Cd zlksIEFlEJSX;m)+?Yrh$a=;3?<(A|H6lD63OWM>VW6kqw8Sm7}bQtQA%(ln45`qg5 z-G233gaYc47clC!W4vI79j1;$DBMH^@)fXv(JQzk01JhCJ6v3n9gKjrekr4&nGY=w zhg6ZsM6Z9I3kQ$IJYRvJIA0Q*f?~VAAsuSC!liN%fmEoK8BRdz0h9olQV692L*HVI z>qPN+*l$O!fuUiBlt^J9)WouQswok^S|+1j3#IMR<1`Ww2k+{L4&q?%fclM=An|$n zVLB-Zs3oEfRgI`nFn&E=niwj>Y>HIIx>CvhlYL8nBpRtLSBtHom-I(SxT%g^q+<o0 zo{=HHq^z%|NJ~@JS4n<yLkM(jQ!<`faH*_AqGUXk)*YgRCRY8HzroA6NlcMd$^6u& zcT>K(K7gGt{0)`@$9}u?1(Pg~8u{+=p-hg~Q)jrVc<K&!6;D0muHvb0>^?rFKOSu+ zr*_vLrP^jD*`B10Oe(Vpzi9sM6HwngD~yj!?szRv1-fuYvb<76caNW@4^KL}_J@8y z(QA}&SYt#jFl*d`!8Y5C#d;P`e}c-V;bSr(I-&<aF2Is2sEP#Y^|wU(!3UF0(mp{Q z3i*k-`WcLIy@<#5>1l+*8!3Hmx24a+fCVk-^B@BDtWieE16_-V1n;vTy(2NguU2WH z6CdGkIBCcCf6N_(7J8-Z2Rqvcb&l_BBLrHS{ukBLXizm9G!G+1i_^CO!#rsEUwjoI zX%Tnzmj6ZW0y4Sy52(ND6X>p;lEM&n|CZ)S=a!K{+_F=U3&F-zr~e<3u|`I@afQ#{ z8~0@AIoq?0ljNT4Jf~5j)$=Z6ga6X(Xn*6(Y-7a~Jo)FtGnf8Lc~`cCcV(x*y~2v! znXHLV3ctT70yvf5?e)JCorctu?!Dqwu5L$<?vIr6uIo}B>eKwovx=_#t>-%!hT@oc zOh{ebBm+jX=}^t4A$5;Hy?Auf8};FR1q4Gub+N1o^kf6^udaNaTzd>6lXGSULgCfy z<SLtMzgn6yXMT!+HD{t7@QTM7a}N}SU5Q*eli9Dg0Ib<B@m$B*uRmtLOu<o>!d(V= z3O{_`Pko=hJ<GgLFP3OWt0BNT{0UV(JTue0djMeIT~j@?w{90Nr$7M$bAsr8vJ=II zdrHbh`9f8KmH~)4*@^4%axLD4`w>o9fqJRc$4x+J)Oabv8D2gloepw*$8!DVmV))N zZirSjvL>~t(ZX$ojoS@?0k>ai)zP&Gf#w!&-<KpE(hL6tRqLT<>mt{vcTjxQ8FR5F zlBck`I(}T1Yb{5`@nah{gOK?_b<qB>8<{>gu?_yKs9T-qjV;T;tYtmaM_&~5gO^5~ zMQ?NoQqialaFDr&3k4mp?Hb^C)b4|dfG;!$uFf7rJLWO%2|U$Uh&s3##MT*Zh}OZm zsN5It>|b=aay*6pn9GZ(A6ec&)#p!2f0+J7|Aml@fyr<JDjti%%1Ubb7JXEb!08oz zi^~1`@V~4iW$JoRJn38XCT?z^%jw`-REq8DTNJzNt}>xxi+3H;^KFVf%M;)++n(k3 z2$=RPzs4uer?8Oz^a)VJOHJUbdt0Mt6JX#_9y4Mky%8ay2n}(z`>c^OSUq89ebdhR zJIPu>OP2eR`Hb30U>#VCd+I*t?3Y`kGSa<jhF!ql>;f*50>b;~y3b9P5p0!0Fg@XY zkO3AJBQ=zRQypR#_qko%Ub?tJy14$y;&`mKpNIjyu7=F~;Bku-AKUrg01TwqU+4b| zLMAEHQ+Db$JM}|4^#MBdZ&Fg%*{R>NQ(vP~n=T-)PDy>Xo%$s^^{G0wX`gdaGWGOD zze!K`E&xIQg1^J?_gwt!np6Heu`=JM%yXFg<h+FE+1;I&NcxWNd11!I`Q^!vp=VZ7 z#Pjm97V&<-&@<-wWdTB3jCMZ1JW+UMx6b>l_2cYtY^U2(7eY7UG0G2nrF$V;eBj#k z_@o<!=n)|`$Zbj4Y@GCClw)nsC)VU3gGTp{y}%{5BbucemH_t+#Qjo0+PIveKZe#4 z+UCF$Z-|c<;UAtd;vY5iKnUa#Cmc^@<2fQV2_-`yht#5d%=+f{M_!adLq05gjHLmT zYpjZG+6g#RCV23M5KL0u08jj~ad)nN>M>vJ<Fr1K36>Wuix}&&5Wva+m+i`RWz?C^ zL$74VeKL=miCHZRMz9x>o0a?(1Sxn2D+L@CpS%&$aiA<&`cb#99%c7<<FmsCZq`k1 zQL_QiRJk9x>K?rWF!ZQ-oO-@w!L3cGEL)~8D$h*!-hrQw@G}zKa4vrC!jB^@Gd(jS z6aSo<&i@Wu_gD+pOsPMrr62l|FQImS{@qmitt<5;40*FU|EOMrPzIh{bH>)BO-StZ zU|Jt9TnWT*WpcTvwA*8H8^2Us;1GsBrkf!0cDpp}Yw=#`f6`~<Vx7+0X4!o1<*4fA zkv+|)Ue?a|cfoT1+Nqvfmv=MeV-*O7_Jaszc*F5ra3YSRvOKr7#9Gq9;#g^&udetL zIAd;ZF8ss5^F-vxaJDV+&PEjYVJQl!7!K_7)O~$924G<~4K~-|1MHN;Q&MKB!&#)* zULsY&tJ}VSAGz~YX6K3ywX<(|L@N3fD>_;#I<7-ShubMvrKHSK%Mh|F!ezw>s^E#M zx>VQY#YIO?bqU5Q?ch(uUt_k@|Al@zrz~+ChG;IlXl`&i(heN_1*GE$tR(T~84kXB zSI*6aoO!usO~b_8{gE)cBF!^?1<f*Y)ODDIEn~(%#ZG{4m!NcRFKIXxgL?uRy(L(# zz7Q07v{bD!_>E&{lhl2~C!t+!^xzyG&#$-fg-$M4Z$I22;Su4}Yy!N9C`;;+RQbx? zNBX3V-4s5<PIz}RVH=lLXk8B4#XIY`PTnrBy{MA~JD#!Ra>qV3o+n~v3cI&l4c4)G z2O%(3*b%eC!o%$f2kQ#O7L#PkS2J9KS$j_SC_7bVN~$dN?H{EBk=m=CM@+d|$_iGx zuws)6?V<Gl$q%`|eu{kyXN+ZlG(sC74OO500aDmY_4mJRDf|Io=wWl6@eV@5;w{Dv zRB#=Nt}KkLhI;_@q@DRoJM-^#<}$E4R)F`~nWYcE_u^L0S8@Fq?qxG&8sH;9YNvD> zw<Ni^P`nkPhBHzg0D7s!_)NVmY23K1@h&e4_n-{W>*d;9J$dgLP!9>hFd!j_|BTuq zJ92>)Nf7@f8hN!;xlmW4aWp<#YYE^#^#u~Q))L5niN=vkIZlB5)IiSdYN!+ohvN+K zU(fo|&P><@x;xZ6nUDt1P2m2GQU4@B1@GWZ%7U#0n`t`2D>LwD3NQ@?>ky*L03S?2 ze1USc{m<-P^IE?dt)2$Z)EY!^qjia-A-zj+wSTdMC}W0jdN;53-@z;jSPZGi$mA`0 zoQIu3d581N?3#DvZhu&pgF~1mp4OGCJ^+N&h4>v*mq?_WtAi<W?cUhZ{<qHU{k~zd zfA5pVM~;VRc6pZ8K8Rq5MDPY+w0SpVCR_y65^3?9z*&HP6GVou%r;g*okDA>ZYnp+ zHy3|?+XcZ<At8<SLC^vzW>-KT1jm{c^c88Hv#Sa^)hXkloc^l|5~B*D<5k8(m~b*6 z+>cj>{T@U4N$zZCV|A?;R6f9h)_L(j1Td0=YM~aZ*rv<*BA?_eR}U`+mRi3V8D+h< z4!H;uwXmcY`-v67M1i_b3L*zQfooASk{P2f(@!9dEIXmS+riFKLa)bhz#bVMQoYeu zvXhhYVBP_8-WO8afJ{KG6RGXy&FEu_{a?)eSncyWkYgpu(ckts)dw(eEX~*<oYD}| zlQ+bJ{X*C-aph67D|WrD1DVoN7OI#nw61WgTOLI5b95-f*sg9s*gUh0oP#z5A<6JE zHN4<~bVCCwf(8ZDTF?&@4nX^P8gHybY}|R1`L&?73gLR^zOhxV*iPS!=BYUA5h6{C zPjOCOHQtpzrKRFJsj^J@SpQrJgj7ES)E@X1-h?75t{1TC%_R1Hg~V@Jbv{>9Q+{xt zr4mfWL(0qT$Es>nk@9N$EN3e>3=VafRPAdm<_giV3cI@Q2AD2y!x;D(gQplDyHq?D z&4N!W$*7!w!T*)z(`vr-X_n~&%XECzTI{3IH_Slzr@MNrHY|V?Wgp|hHuTcf%cBJ_ zq#Lf*J%Eax)SJEoWHlw92Mm<_69C|)rw|feno5@NG;Tk>*yX8R%+w#^S3^mf<Z9lO z9!MOk?lC!;h8_de<#y>GBWZhnxSiQnqt}ovegK|2cB)I6gZl{V*p60yJI7`#sT!*B zF>j(As`23vpA3{djm54)Sit*RXL?(mF=TSA!m~Do{?@r$(B|y=VwcgYU`@^D_>d+~ zBd$Ao#;=Ahv)*mKM#M5K8vT@i_53v`@ohqscd_em(dTG&?)@OQkL2D9Gl(Yl8GwP@ zj{<X$yBHym8_kocg1d@5SmD%Pjm<08&AyCTN2|T<QVz6Bap_W;bSVy93fUh6u!Rfm zG-UkSeOC3n52CAo88B48R%dKQNJ|dMxBx5LYRt6Nh&3{fFLlj6)qvh$jp3}vs6G+e zaOn-Fe|zL2HQz4%D7*Blb?M7>>6dgYU7c>{7;NV_QRi5#a~#((2RS&eW-}<chn@8p zJF640@-Q#7fso(+#%u`|yQD!dJjzN~;Z@Cum2C!8;5a#pju43Mn&Yi>>ItN>Cz(fd zfm8vTMS{O_>U-gLZg?#6)EB4Wdx(%VR9~E~CJFLx_>#voHadJC5R=G&Dn(g5UN2%# zK48IvDj#rl9DZp`ico4>0e*$B<_NT~L2ewDqdW5)(FoZ&H-1^Jw-tPjGU(7DpMPV@ zfk#V`4ZaVfr-!f{$l{t{WI%lhA&D}$TuMhgH!S`aJvVGcrok`zw|i<n!550pNssnH zWIk<!xSh#YcS&2EykC5_{=||a8}EZJpI2gRnZ78*nDL0A%Olr<@s8s`oY{xWIBdb` zX~&<In>*V#V~~;IX@qgD5pa4M$EPoFdXIMwoRwMP-#ND#LMba0WElsF_#}!o7eI@Y zq#A{V_g+mmH!4b{+xB}vw*-D^x;=%qY3}|Eu;i@Jh7i2KrF5aRZ5auEA6hPXSkGc4 zWdA(Kn3Vom1i1PYe(8E*c0F;xP|q3^0^X}aD7JE>-f5Bf>^{Jrc&^>R>itssU;w^# zA3%J`lTB)pq$KmuxplUh+XYVtDk7fWfG(+cs=I;bzwt}sIT<Ck{TsM(Jj*2e+NQ;s z(E(EGVJNljAlxc5PQp|jbt|?d&hN-xOn|dyX$}CMnr~p2t!}pqo`Zrlq3Z!l61oy0 z<Q<{b5U~!VJ)KcN`Q%P09|JgO*0FE0RehHN+-3o;P6d4VYqa@m{L*bMw^7>+7*Kms z_svHLb?6(TEK5j2-prXg#q;pmY4Nfwks0a{yEt~0Zt1<cxaW0ow@Y!n3@bT)$|>Z3 z%lZ)%;KYe1@}m79#$54{SZ_>&+U3u8Q9xk=$(S;&1xs+ex@$-Watl~M?`{YM)C4d* zm$y6zD-D*Fs|DaSk(-eN;K^;0&Vt?EUr>71)XBDPrv>k?BT}4EmaB1+4ma1QPDXVm zaHs&Og&}aaTi7-fY@d?4ZJ$ozi-BTle4mc-dOc!n{g(S_uThzYonowMr0D7U2>(+~ z$yz03d<`?h1-(nKO5B0eIfHj_-W`(hVlW)r%Nzy`&hgZ(XSCAiU5>i^&g6XR#e904 zy7~^#;Z}Owt+w*03js6dQ>w8>s)xV&Rx3TNDb;vs@H&0Inb9ygt-fgA1d#XwM-+J( z+X@n^dgT<OOAY}xxt>Pn@IZJmDhR4!(1w+ue`2fB{a?@c2+{dST97El8u!rYQXbkd z1X)H}S-$R_%<}Dw_o%{K)r*frd4t+f*aV}J)Jbdz-)Z3wl;M-?eKZ0~B%zswb_(Ht zrcdCXbdG^K{x|&H^gyS&(p*QBb|9SDKW$4P3R3#2?U%QA4A1{n$MA)n!WVZ6pWHEw z^_Ckt7_f}jJf7G${d*iwNdG35&^A0^RMLc;mKQ1ZJ8Ix<7+=}c0>nMm)RX}jW;*kf z>FZmCQM)&6mTh3c8acJ7q0ug`0LO5_o4!!7IaH4$b9f_%Z>z=r>OsIzynSeqtJ*&^ z$1fF0uWtJcrx68eww-moo%Ir()jo#ERZCK`ir5Knuu><U;0rnG5ahw2ZjCX-f330A z<`?fJ@U}egMzt`2HBK;QIWv}r-?PdHsJD@w8%uZGU;)@(9;M#>rPZnrt%T|&z^s)^ z0ICKHFPfUB)QF2HJZbkd_C5my8Wh`^K4bWFqa-c%Y5MedTC6oACfKF7_hVER0iULW zq7a7bCQrl5V>pGMVpqS#uKrA2J#WiY99^dF-12QA{FxPNQet1EiLK1*juQIPLwFUJ zCwEgF;!y3kKtF2}O(<y5&6o!h<47?4vXwl9J^TGaXK!4xplwH~r%;0K{I4xc)I)%Q zOmd<RGJW=Mv*$^s__M44*W*xZx7v=Bf%ZS-6SBdH`5(Gu{XlPIfYE#?Z_tl%z@1Mt z^942qhYa4T|M0pcqF1CwFJm-F$+^y1^J>&<wH=2{eQMT3wunu7%^Eo~_l$3@fsG;N zOV9YV;({o$Vg5@6%TY66(>!-~uY%nrr6B+DxZ*;PeJdWOij0AvajG?tLC_*rFQ0?+ zk45Oi`*{9QF~E`!9{`3vJORjKm+}rmve$2se%tk0g!7G2>Sne6QunN0I?JHtR<7NO zcbFv@j&93HZLsLajFj_>e+sreoL{W9B0HU5l-`WZM(6X30stXPlSdf4(wkX02|gGs z=a@B#t}i8{`Tomh=zF+W%Enu4HJ_k&xz(oDEAiA8gw+00H&&aT8{bGmdjpE4N3OB4 zVHq=pa2+Q{z15CAS%Vwe!1#^)ZQRI3TUB#5IvsYmagW)9$=66msIPBCuXlQlWHVrv zfXh-JA%tFsGFzMgyIZh_e`nsQArrwH&^{x8*GEdzjjNnz1?zEgivS-T83AY2*vWGh zgy%<w;4gnhsDYblN0);Y^dC$7U(bCCMGJReLzH50ZV~ba{uTb>2{c?F`LxT@4kgKa z7F1u0SmKsBPhAIz1q87^{782i*PLFJ2QV<hG01uN>dBv@^fw0c-a$3=CT2jHbS#`L zqPVNKCKT;d8CFX8iKT#OY5OOt=zymcF!8<j6N*ud?>aK8;CoCezDsO;myk_Xr7)dU z82+Z<d%0vV@tvmwT`~#2Cs`?Nd`|`>rPSo7l%IT@;UC0RKhE&@LOq=H;|$X7F12C3 z3V92;2!Fgjurm6mgFjwyp)E;tolI|3na5B2E?DHouxJ>U7@aZO?P*-w<iHp>`L#_g zhP?l0385sqvVJ1YUZZ{!(rVp25ZKq4;KnLt5Ac&aj>pQqaotrt9)y`?%6an*CO$a} z>II*%#Ai?FLoIwp-4MnQojuTyzs3SO-@&E#lCHKaIMI}~7tT%UCW2SEjq<7IK+Awy zg5TVJx^T?-&YT%=<Ci`AGPO6M@Er}k`d$V``Q2Rmy}SqX>eJAfc(>xWx+B1+!}Ocq zL3O);piG-L2o278o=h2x`_!!{0BmQxC}&#g#RXP*Z?HU%deR200YK|Leh-+v00^lq z|C9wlP?dHlE2Rs**C)`!F`R4mK@ILo8SCN;JT|vJ%K@j%bL;WSk2$6~bBeBp#B|B^ zYg4fggU)JT98hljwvPX3X`WUQ4XS-*q~f${-hQy*iqD3S7=m=5IqqU>9>x>&>aTI= zlpeyb@Mu!|R<A{jI{^bR%nMmJBZR|X?CE!VM=$(6)@=-gvNp006t$5(_{$0XR|{Mt zz_7ua*wk>t2yOuI8We+9JI~@KAl0fWNn#kkxLq@kQvaz3vP-ybf6!jKeFB)>bKsS1 zxE?oGZ?tt2yQ~V{Y?QC?RoC_Qs`dY-Q1^8+vUHtD?L`}y%UhAtP(^1`0eZ^KRyTK- zRol1sL%kf8*`|H_X~cF84G15Ag@ER>6EwD_efzNp0S~GLX?0G2%8}k6Gy^I2?Pcm0 znAadyP9dLTEYTPz7k~LApk?L`=Eu`Mux*E9Tn;zv(OfWdKMGZ&DKt<rZYROx1EqL0 zCJ(v!M?MR4^^-jknWX#=`(pp=_22yLNS0oMiZ{w<=tmOfP^MSPsvY8%a%3dGsyP9- zO|cyrvky$<HjEyg-m_my?TS*oQ^GF?*0bWA@)`Q3^c1aV*&BJi`00xuCw_LP1-k!E z{jg*IEv)6xVE^UV{WlLVaGTkGvk>ase*?@H-_34>M;RDnda4(pdmsX|sYV41CtmxU zT<Yr3&6SX7yWh>^1go1*!3o-Kb#qQiH>*F^SS=iExA1Pj&_Z*YeJes}q1l+-q2&)r zBl9oTpKnWT)>(5ps2lGEiJy&@(WwOXe-i@gGf70T?=*T%Z9%r*re*`GJ&tP&H_msg z(=Cn_t~3^uVixt^$luZPt5(s^UDXQyj==%Lp3@g~>wjT{_+L1j{uhog{V(iC{|nis z|Aqeazu?jS7b3j}Esw3nE}7W%w2H8>>-x6|s|tsD_&w2Yx*8S{HKUT~!Zd&8eu1+% z*l|FH2^oS)Wh`c=xf`;eM;wP^sZ-LMH@W&X<0H-d=qrD_IzBh6HvQkAJ}&ot#%;U| zQS+*&dJL<)7N@=5*tIT4v~TQMw<8KyYwekG{llnnU?l_Zowy+O)OMr=hi1WQ*{E@9 zc<h;lL@@+-cElTdhNHr|n1VM$mKz(JKj^(}Bb@){4qARFukOUIo#TjP#jc%;UFx%y zNZmvz6U45)$bmAh4Lc%zW2?QfbvcA$RXY%r#+>+4I?Skwwir9x1IbYA+B}D`(^zG^ zOl44HOzhercxZE5%{M4iw!(vr(;en!83ct13h!P3dCz#HuiBA;&uH)1x-`LHT{=%# zF+2GjQXm8n5nJa32yUkH5;Fp74@{qjR-zazNwx|d(s@H21;TBU@p2?1w$8P+#T7l< zs3DbOP4_W2a!Rb}LHQWFttJbV5;=nk>nvjnp7<e>+`yaLb|e6{xy)evhp6V7sIqjl z_DvF;wVY}+NG(tEz{n999ebLG>W)akwi=&VOXTnlB#=UF5_BlHHMY(hd&wQYCkI($ zFQ2wJ%~Q0~fH6_k8lt;6-Ba}Pw5m0gs9<WmAsdM%Pw8oj@5=Q57a<~#V$1R|T{@!q z>IDj-T81c$V#}zpbVPi?@TMGGB~y>fEC7KN&E!np5~`4;2F4@|S~yd1<CER6jJGH7 zHYCdlshiBH1D=>K#s!6i$EL#=MiQ&6N=W5g&O2XXBd*sCy#Rw$z73^8xv_J;HSa(_ zH4XV_{4aGgz}>q9z%A}p@D$WAbOWYKZ$w^QdYUcs7XxOkp>Y2vwe&?>k4g6)5A25G zrvyJgN4Ee`myvScMDH(?HLd96ub}fPS-m$8joMCq&^%jT{2E}%iEJH0GLdyRIq37F zQ{UC|zv+QK)<gm8@Kj$2qQ{!<kU&k40s4^NJJxg=LDBwOYn>3hX`UL|R>1HS28m_H zq&zgrSF;hXX(Ey3+C4AnR?t(!^K|=?*K-Jnb+4!TF??=o;U*Bzg4mbBFm%(jFaB|o zF5(w7j)^Vf9eT$sU~Sp?rqRwfTVoQNGXm1uiYp{%K%VLs027VGRZaa=Rw7pVd`IMH z^M$~J-o}h04blM19~*gnfSG2lY?WvV?yG)h&Zt8+`Zq=k7N<R31f-e*_~j{Dt;;Z+ zX`>U-eXxDo%bDKCi=iOZpZEc*cTdL3Gvx>%+4(=im)@S@4K4cu5Y&x#gW#Nl^fPM^ znBGy3(zk}E`YrS;Rb8*(@2E$41=v&bBKx|IPD~lI6rq6HUw91fyrg+<{2lY)wI3Q> zWNJ88EZO>nw7ooyFkivjDf5vEJ0m<!FU3&>R)&KSV1l>n=iFfKlwoc*R_(lw<Cc4$ zOKro*Er6A2JJA3x3%v#XoGL{wD6CrRh-V4tZ@dUCHp~sv5=)7$y8e36#AF*=%G5zf z4CgC3tf`K*CzkktNtwz5B&06-*S87SJEDW`T&5ttjn&4AZ66z3jOM2q-1c6^=Rv5; zH&-$7;q73SEoDLV4T7<ig}4AVPL<kN*V$Mf4;TjK2H;ka7gE(5iT2HssVmxvrSxoK z)UhXmWr+<1o53p}`N_)o3P;@ssgJQ7(R8`Vu3;l!<>7y!g7$mL)Ui^u)A+Pz>-@e+ zx_~Oii&HEM(x1mr?g#R&-j6){X2<==H`k!0cXM9&n=QFN1q`$__ah%81R+P^AJhBE zw8$t+@IP;7|G>`vsLuW}yCO?H)G@oYb-5F<vUSmWn7-y72KO*MveWLkhj|XO$9L>u zz+u)_H4o#=+QZathe~*NwyJrldzg>sSXB9!-K>p(B}M-Rgg}*_c@LA?)rmtX;F1to zPe2+B?Px7@AP}Rq&>*t#10)KqM{z4#5YFy-9|K|QTmb!q;egfRtPD(tmf>P|v)lUh zqA{bXn;R!+)7YII6)h_|&96GW{PwEhUDHF&#5D~|!~N;brQtm$FQDq{*R_49kDG`b zo<~9R?`@c!26;9dV|TDRayA<NB<?U*91>oMKk7gL%ERetZnC2f0rXoNjh)cqA>b;{ zsJXfMkv>iDA~85;2wdLcl|!`^A`P<#5**J2o|=P^MXjG@l|ERP-V6ZH9vR-kDz8Qr zPXPkmR@>*m7wffLS`y|{lb)^amNI$6B3o_S1ktvg=dx?qTvXwB`T~5>>pYLWcqs#> z8~Yh2Im@`W@u_;OC5(qDQF#Nky{|FFi5nTyUI7%w7{Jwt;$dM|)pgoKbrA|Mnq#Y- zRo7*U%j%+L2=wqjAOO^6a6`d6!~>GAU@NZU<<2^er!c@Zn+RtIV8pXyuCz@KE<$QO zL`Q68HtyFzRG#_LNycZ;v*ynDOGv%&cg8?}9!)DoJH6^g6dzLVH)IVU?@-)|>#4lU z(Y-D%$<;sK7x^30N3SN*x20L_(}}G`U%l2?QS~0qH0K|RAMQ?*mnsqOuKEw-^x&Yn z9ZO8}slWJy&NdUQFLnKC=?A={X21a>V%<jHxV~<lcJvW5y1dM%*N^>PMR$qb8@B}w z4^PUE@iY#^NjcxRZ+_p^Z$rb_bpPjY*Sb1mMZEXm&rz}u*9NCejl1Fjr>uIp2;%W7 z|Mo~=y+4`fOrLR>(TmCvPoo#*#|Ij{JdK5E{Z^PQjrB^86+3r+m->Ibsb6+FXN)s? zvv9Ac(bfE(FFwHN?P&}EcW=K};(Ietn%?}LtKV83Q<%}O**s#1^>)TeoZmo43~Rxj zG1pB3%FqEj;R?k)Q=}I<$LM2HxSPy&duPgvRh`>BwL_!3$#1uh`QaYo2ez?C1-S4} zVUnv5rZ5_+PM!e~6kd-hdkQ2{c=S5RI6q*RoJ=8CfRId1Edl0AEa9?9O+JWHwMPy> zN`2LV!bYBYO*G1)@mLJ$9BrACqqbvY^E#MM9Iq|A8mKHLD!1FHECDPO?ynuM{Q&{N z1e-;8S`|EA%fVh1hl$tBWE|dyLtKwsnT%+1vJqdu1pQI4V6!?Z!lR1wQNDRp5gn<9 z6P;?JbE%EaL4etwnD*1?1SKUTmhs}$DQAmDzapdJvY<Lc;&I3^f0TOvDyuL)5uwTa zI$$KTZrpl=&^WwFD<5WQprfxW#LM!B<AlWr6$-p=yWpr_h<RLM_MF7*2$i)T=&7hZ z7dMrnms@E`I4dnv{Z3MO4cwuR=BU$cq^fMBP6SMxdAE-*GvDvH>OgK6mD*bv!98tq zP>o5&QDxfYTyK}N?MgPTVlJkz&+&<tF&|UfluGu-&;JFk>vI1cYlE77$;I6qvv54) zK^F{=JYXOG62n4ncj=zn53ry$KK9hjqu!K;RPGSh9zj?LsJAdXlD)I^yFP!v!Yb+S zU_M>a2EgDp7*tx1FQ7t8W_UwMJR#h@*FG}J2>O0B5_x0|Ipvm~b73fQ&<|4+iAfPz z`&7HbiUkwvO5X_<Hc(%K5}3o~4g+*aqcK!4&;Vsw1!_9FRAtx&POuC7>T+RkbL?(L z2=hIu6jb+OLxlpo7`KNDNA&ov<L<Va=;#%nx_^Jttdr@3IsdK0cn>{a2^=w!;EzcD zVhIFUFbs$U)Ks9EbZa#Pp>PiABsYCTI356)?Fw=qX_c?-7?cPUd>r_2aUoC+{NbwY zGOGx=^CLyP16Xq4zlIPxzU?z$!EVdJw2Y^qcJe8xhwa=v;L|K~kK~q-b%&YtDP$$@ zWhb5xxlo|?6SA_$fkyOTb%9;bP`jXsQjqj``=zKfx)-|H`#d`gOS^~&R9E`}z$BWV zm^p_$@Vp40nGwXlD{PO_BYUzd%hZ~`$^wn@zWp%u*`-#y<=&69`vbr#9OYp4f8Yyk zo;;QPrVau3gj5?~5O-OaRi;4++vC)-yDage(g82M8=>WmS1rXxp~G^M)OM8z`AGHS zASllu=!k)ikkEyE621B^d~;g&Vf1@y>d-}D9yl}<JEb23s)-GTc%Ys9QEGVw2=)ni z?LSDRyZUj!z$oU`yFVhNB?NE61{+G8RGp@6z~!VTZlt4OXCPFOUZ(m2*)Wd*q!3Py zlO$&zCr9LjbizviTBsq>BydNTDzfW#AzK?Y??#LQi2j6uTdp1Nwu)7I0|wko7efQ2 z21+m15cXQhf{Cl#syA50x?`B7-n_(W=pL+W4=jRpWx;a85r>VNSu=CK(}0{3E@Nyc zeiiPH!JZD1L=ZFVvJSLrRM!Ir#HvAla9R|hB+-DKtYP6MCSYf6x9L4jXEhf-$6Hz1 zq#wmiKR$C44>{DSt7zXQc9Wa2Q|0ZmJnmTWBVMQRHyc0s_{qUGbEKy_7i0lLjwVC$ z_(YX}=>lqYm{f6Mtmc4@x#}c@!|uO;`A)Lwcno0WVq(#@6BG(kwguERl9RISP}Seg zRbuB#{6eVDMNL~P*}X_m8^Ud%Od+y^&CzZ&4i*^#i)XwugtS<6XBnRv`@arHG!4PD z1-*)S1!C~$v7H{z4TmE^g(v(CHpUYYuW{5YkDiQekgwsYwAg=~bA6B<*c6mvD^r+( z9YDtFhH>BcSL11v=|D+0E^4DWNuyZ{CTYt-$+4XSJvTf+mKhj!W3tDn&o*oE)X*i8 zt|>kCAD3q#?**E*aW~W3tZlo0wWo%1y5JpIUP5q&W2n(nv{6Q4gLBUeg^{=29QR&s z*I(l(!<!puyDy^^wXidDDRX<ZA}VdegtIbQ0_xQTXhVaAKCsI}-xsR+(*eFI1w0z_ z+DPPcsEZhNbEl}&B<f^DL4KW!E-7Wd6d@Cp;o`qx;z<MraC#VKC!MFRm)Wccg1!%= zS#DbpchxBO9zuq42pl9TQn$Y>0ul_BFV0@nXBS&Uud#4Y9{^^Gv$ltkTdlVfU5`X< z=c8oRWW&OC#y{$eb)ao~RNZc;xX4aXuT#`BMVX4&DW)Jr`@8Bw8&Ga%Dc4zQm?cMz zwNs3-QxxbFrZ^ak5F|<XPAi@~qQ1Qd?Yt`ml&}6p(62jy-X!Sm6i`5|1PCR-S^yv5 zfQxW5QfoDG|8EPMA1|(cbO|7c-k<*ALQw8OF28RA$LMMC*MNbK%zpVLLL%X<{V9)+ z)w3|1+r=UR<?H<^IMy4o9){D$8esoy^o+erJqvRi=V`r5^%0?sM2I(?H9~y>vv;W( z7Cw5HD%cDKHk^oGLtjI5?d~o$Nk+Y2J$1RcU#$W!2GnC00I@BQ<JhQ-RPzxEKS#vw zwGq1-FnhmRfdE<&l$7=^3@y#l`_+3To}zt}I@&Jmw{~H<fRXGF?U-1zt<sK?k1qSw z0!SEpzp5WGvCfU~Xa^1i6Hm~UJ9njr>xs7gNbX%{TKTvR?U;{gKhX0Jb)DG38s}SW zZnV+79<UJmuYG*TeB|WMUXov_iPAN)gS`%^Y#OMO>~bEr%Q*%xa|fF*iDd`Nly<&k z|NPuv?4{Hn+3Wb!i+EZ9UD{P(So_x_RroxRC>Lx|k)xS)3IO)zHHd%=o(`MW3Y@QH zQxj}$UXM@**~J{Di`g3hy>s2eD#P5l3dc{zu8J%9-Q2m#ezoH;R6*%2Yu7qh-8&5} ziLfQV&?x*80CPS8LmCK~O#!967{z$-fxlE-B)7F?%~wyL4^_Y}?Q&h(cwL&gUmYW* znfuj8*W3Hm+0y?%$$k}BV$Z5Rll5%p{i^7vCO?PqUa&cYx!$E3P;)>%KUE7OzEv<- z!L79;Jdq?hRyU#&0DE_O4FaG@+gX_6$UJ&?x>TSX=0nt}c7DIkUkE^QjE^)6pl3<; zP&T)w!?-m)LV4}1g*t1dWR-oX!^}s2INT}uI*wyCSBRM0ovxf>HDkOk>uCVYo^7i~ zA@=TcnYlats|ZpT)LmF9ov8&1Iy-BbY*0nAV2?Ud>fs(|kUGz<qg>ZfE_DRk2a{XM z)Vj5@eKk~jt{P#d4d}E-NLp!IE<Qn2bL$!gn}pObfw^GM4F%xOEeg6VAM=?PukFpv zb*4Q-*6|drwHA<Qo;#zNzXQssB=VhjjRh7gf125(08deK2BzN*4e1o$A&&V`e^R-; zn_(<@d%Pd2^)-{9h76hr|6|~xY@X5O23xU+f-r9#&p$X*iOfaS*u+F|2MebuvoFWz z>C+d%>Tt#dF$GJ9^cm;Ctk6kghQ@0%V=H>`bYKVJ<2;Rh1w11ywn7dKKJ%}dF~nFq zcvZ$<{aETo27q&TpGL0g;M61DPj-*-r~_L<t}YOVqwF8xdO)}Dx+cA!!@4@hzEg?& zJ>0F)qdw2jV&A60`Rljoo*G&URPp&?Jj_Q8B2)3SkN&C(mLo}YXl$p`bHfV48gUYG zre#cdre$7vW(LeEW3A49&9P6N7*w7cZj;3O$Pv()xJQ}JQ=nH6HDjKq@xT=D2d;i^ z`M;PEMz7^%d_DM!nl+IU;+8vx@6Sf|$8bGwYB~&H@!_2UtFyBvs0UVZOy#ui2iTT# z&B*2WK-@pkcG<>9_CiBy{AicGJ2y#dlAZkZQ~$$o@bQP};%^Rr<V)^XsiB}sY-P$q z90LPS%k>AZWwknvMl4RWg%`|`pwE*ZZu~Z}4XZ~7)*IZXV_$_YQ8L2v161mVaz;Bm zb@w1Zam5KLi`%Rr>Tl1I9@y2w<_59g_<VH#2<`|q&)Y2TslJv8kQ2N<L$m#*_&l`} z)6dXMe~K{u$F6>#nM{AYF#RdQ^#8<I@V5%nw`RQQ$G);7(|cPip1&R@diu;2H5cN$ z)e!(1n*D$BgILgsH%~aWyQjCzkN&6h`Mnq38vh6x%=HQ<#^Gv42s4V8+BDw&(?a|r zz(QfZ?2XmJ6a-|oK!>2{1sA4^(}g9u@5on2*#&H|3pfNYaPl?)P{N?p5`eEOBZ`+5 z4wR{nr`P#vbI?NKE4z$;0ERNmJD_hOWMhHGx;V>bH8?AcqFNuj6j;55hN&x18G9U2 ziAb%lOf{d&oSfPY2i$GK)r?7!&I>vK)QVD2vqKHn+0A5G>M<lMQ)%buLNVNsIDT%e z93<njp)j+-S!-R*B87hH@z=RLJ$^2I0`k5HCth-g6Qf5)O%QG*T-qwQy_ZqHf#gqv zy#cgEJgLe@x*WC=PA7i>1sQilSzM!xQkRvZ1M;cXdequ`tEqsM1<`+#@d4VGsS`AD zV7%ZoIh<<S5d~XA(t~8F<?}{SQouvWd(vYrj@c3AYTJvb4<47YAPGG+29SV%k|rd< z(9J_e_$X<W(S0<!i+9SL)SOT^i+;|h+`9#Nj4!}|@TjfUgP+kEkO4LKfKAmS6D|Dt z%8=&bdjU%_;q3^a5!1@l9M%filWc{$+|K@#oqd{Qrw)Fyopnr?tnivSnFTw`z=Rd* zTphsoiOOdey3#JRuM`@lO$!Q6w+sFdB<_e4jPLqLVH{-@YF(Mtz%?kW{Rs6rSdvu2 zBo3>;ze|WoPgM8WNjKQ_-U1kCL7f}wU4W3L1^c~Yy(sJ+U6|Z;Sx8OO8Fq<p+9ek1 z5_5EkBkdCR>rx^{{77mnz3A$!XsE#%kIk*gazqE<58jFGjX$u#JyEH%tR}v1*YY-C z!22Lw%c}@!yq^T+I^vBx?h`|5sxTeZwGaxR#jSRkZFZTpx=iz|V4hv(d0omR(m+=` zJdD(2t9^A6A0l!n2u`cX1{OYiCL%Ris+!SgZAfj<RFFhyEE4e(iF|4YNCitE{00=P z&#gaSd2p~mBmfkZRyH_6BlxX(F+Sb_rft#bQ<%21VEBJDto1#U|7_ZOLq0fhRqm0; zO!*KUq80_fSGRKOcbygtH2@?9!}SQE7jWKsb_@CyPXB4y=8PLfbzC;=9So>>!c`ny zu<wynm<HmBNS#j&2Kxlnf%wgSGv^0HAjGLc=7+ktdDRnnzjrU``})`YNzdOt_!q|R z()iT0z=Ne)FKwF!&DH?eD)hyA!@MuAE=0><sfe3}5e$edqj*j`9?7LHNrExzmhhFM z&IS4bweU=lDCXEXR82xSyq+rqUdPp>I|VS1j@L=sD0m^V^Yn4Y0?EzI@}cSgJLd{J zr&s5c;|^NkC!P`=B3{tDLq?#r$IVik&amoTjdX2?>S}Vh07P{@PAIu*AL$a#>W8XF z?F=v3)!h#m5alMf?MsX!WP%Hf2p-ir6<ekDUS-M&l>zz-&COMBVsz0(pr;6%8SXEr zvE)2fF-d27{CS;eDELek6Z$+N*@)LBka$uWnC9Z?aOPBvGNfXn&YPJg>gy$`m(AcB zmfBiWbhfVOWV51`=y0hhazV0^D^e?o{!TTXZc%EB-SEYLq2Z=<yAL5SH(RehMi1a4 zTm3<RF6}6on_QxzTBQS>1&Q`o)U*0qMJdp5w`oor4EIL&iN0?%H*Y`iP=}*(ekLvT z4rz{Uzbv|5?Ldj`cYSZ({-2P6<B9ew(EptVYOcl_sN#}v7=P3h0FwGY1hklF3908P zjj322td6#GU9NK-4nPQRa)|CX$I1m2H{K>dwqQlCkeZDT>D~Fb4nGNjka}Nt3eSaM zvc>-T)#KkLs0v>#F+V^RF65;klJdalTGdBQ8s!zX06b71s;)d04fno;f&M4(qHe|c zfZ2-ra}bcW<EpvF?MrL`h}+#VcB$n1PD4Snv$ec_c(JLUe-DidsDY>;sh|JHDZoc@ zF<N8e^9o?Lets<iz$d7f5{sbD_GCK+Oj$Ha-GXmj*aEw-YQQi?O#S>^NsZEOmXB2Z zJoc7ZuqlJV2bQ#$r+rkasTcJyY#%~vv#ZJg&!U`B%a(A=I<Y)`QN)B3)_Xy9j~?!( z9zMfH=PnzauTBQ7(d9Yqh1j0mxs;?;YOLfF75sK2u$!rtBcxk&yIsWNfI*1Ri0n_2 zSXA&#Y3KVd4YuTX@)6I|IG*;=Jk=indpz~hXwu9nq%OxyWsax!ORZdkbgnl6u*cH| z1T-gdJmn&rjHkn84rhmBJh>1ENxwrNr;MjppmQM4&XI2ZNypRukeAkYI#M0TCM;&d z&(TfDk|vn?^8R)ctid$pNsZW<B6YuGFzNAg>F><(b3YmrP_L9E$Imh9HwcC6S$~19 z|5gC(!2@d;k}#+qkdH2dr&++H<*}+9-@2rcx};M8NRFIwk`zUS<m0<X4z9qVZkHZ8 zmnTQgJNH{7=irC+7e~&8lG-bbvA<eVY~fO>aajg{9yVhzY<$=ebJ+BiOfqbmk-%nu z1@FdYTZ(l4c>tJW<{C*UV`gD$rvJj2fqcfRLJ2;!M^SxpXUl0WNuR;&&ZqbWBH$XQ zHLC;7r6i|{)SvK>mmxU!fM!jV$i&g<%qul5zf;op>n=SgWd28Lp7v(z9Q_YN4ec_$ zrD*?nKgIgrP5MW>rq}%Z>jzBzl-xb1zte`;Vpy99S)k!cEFFQ6TB-#aR(&{!cu5Oc zj&MFzQ<j+RQ;lFmaqJ9Dh|k|1ITThT=iunCT-_(B-36Q52TICYgk`BgC~Dt^XTP8( zqiR;)XDo}ycwZs@%ja0@i9ilq3$rzGJ6&F0F<9KHg>Yj$NBs(nr<a5`^0jZq;zdvZ z@s&k+GfNWW_*Z!r{s9S$*}0ra@a3Rhnre;MvQpIJ@KkfY3$h(wf(ym74i@<P6JKQE zR@<Q_a;n@|1`n{fMTdG@Yk8ZMQAWuKEIoT;hTZ^dvFnB_n&ZmULs&@)RU1mqB{`*g zfZ{)}ypV4}@)d+)D|3Nl!(`f-;TQo6BQNSPU?d=|kMt{7=g6`Y&p((QGDL)#(^!S~ zUjGZquWrU8w`(pFn>(}^;;MQ*2m%$#^pmjWo$WI=s)HdY(Y>>MSO;aR{SZP&a0RqA zGFLn!cn+*Y9=sA2IUu%dHTxraf$`#<{@dx4ac*e7%U`=3U$ah^4*Cn{vXI&d;v{<j z-O;fV(0c=*Q2BhEh&`|^9CPjSh)6ipj#cN)Q#c0M<Mk-eY{r}D{P2(*2Y7rj@Q2cD zDjve@rtLojM0sNr&b5n^aOGk&SA!S^qG>I7XO$3nAJ~iMY{;xJBpY=vnKg19x5*~L zIa+2S8}`SOTgrt(M-?T9;(q05;<LiPw}N8~8h5qeZhHs*H4A%dJQ9?QfZ$HyW)QMZ zxqA1HLOQ-J+_JldhPu5YJGQqlzf*Wb$1ucfyj16r{1VoAl3|@E8P+tl!}XOmO;h_R z8PENpU9FuY8K3MEI}#tscpmreD*wXn<KZs_ejw$l&bT3*P~xXZN1K)4ZZR#5qX)^T z?^-_BcX);lMv~}GOk54MmYhBrK00nn2ehH~U2sSsSdp%B!2}J(rD5KH52#=vLbddG zQjvqV1rSO!@~XBvbu2huo)u}lkKxA<6~2-hyOG$IBpN><@VOHJyebLYLf}IH;(~H` zMiRb=@SB);W)gTSf!7i^D+%=CQ(a8poFvdmV1U4DlE5qi{QxE!bNRUk5N5U4SxLfq z_zJ2kP9)s>eJ>%Tc5tU}9BaviH)8=2i*u3SHWs+#yKC>5{8709&DF8OFO?*q8J>vl zdo{8r*A;L|2Y5Waq3SBeGij!LrQo3RvzP4r#0NNh$-FLdP|X?~JKV5^;k3>;CGjT> zE&OR=+j*s<E7kR_x9h6{Qe>yLk3e!HL3t_oQxp;Z)0kfHm#;4PJ5XN=J<M+=)AiBb zJQ=U$UnQ3Sotq=+&G;of#TTsc*ONMfmT%kGxd7H@dZ38<OurPf@n$L0J1lplot<K& zw1+Q@;pB_cURG?GVlKQixa>pu=!+?dcd#&D8&~EuOv}O5+ymkT4JEnp{P?mQ5Mf&U zUM7v#GAGTo@nm9LkM)}6a}JFEneg~il18U2Ff%f-F)bI9>e*KMYYx_>vHT|_qZDh` zC0QC6(Gbe@uZ@f}?p=+5QN`a7=>;HULHtH0Fsd|K{B3?OAw2$=z%}kH4_OW{YF8r4 zU&Y_^Uzj_<keS(E#rb*Wqeh$={cEGYO2IsZf<Nsi`7vZX!z!sbq);{%5N8YuKHKUl z3pPy3ZMZ7O|8?|W|4Y#U+QXwhscs(~?`PZ~Exdyzv=2cFZ~O$~25I{e#<ct5H}S77 z)r_fP{M1%Sh8i8MQi%RyH}l^QTQhJ;7<M>v9O{-kINRc!9gBfr_-2$S(pV&&I${)N zX`CPGt6xJA3J0h``lXdj9SE5HCXEjP*|$$^Syk%>f{E7J2hjxZD(Y*MIfUP>wH#FW z_-w6x5?}nMm*l~Ctt`oJe-2>v$nC_<rK<gO=R=VUG*3{!8)@P38)Ou8)vo|cDnxH$ ziu<g{p!x;ESocy5kuq(aKZZ~?{a{nzAB2j+zfa~HF8T1L?9`T?Je~eDd?xd4C_Ehd z6LT`;JfI#u4)m8pOkf!qLur5$uw%l<Sn2S{-PJ;Lc->_Vw589qcr7Om_`zPrzp{~p zx^Y^oq(I{|s8v!ixEu4B;1~V|#ih>GUX7kl6S051_7n7))Hk&yoMzz|P_KiG1#5J) zq=k2Pqj^`=V!m<5cI3<&s+x{Pmuw)@-DlOV{s<U4`wlP=RACPwBwQy`14nASz7&XL za+2_Gi1eFqRzTe^r=8lDW@lmDO&2EXAIbU^>&KGTWVR!9{WJqa{Rekb|7EP7ldM($ zLEo=_lON_}+60%i$#2l{CO@>+a(3lEaK<Q;GmZ++vvPnlLg*eWQ{uJEi&O*R%b3Sz z2(mS}g0cK(c3d~q=nCTe#x+5_eghgQIXh6*p3gnU>-pSH&pEnldb>P*XTL*PtR3+# zJtunaG&UOl!hUY1QA-(!cAb`3G6Gnr`7#omfP{kadqs}?S>(t?x8U3`(a7ZL0s1VF zoMx^wkqgCRm+0lp(=q3f$cadBIBg+X<kYPTa$U(o|H3Y#S$0+KJB_zP&~9ywT!SN) zsEzgMX8mhK#t`eXgYjh)jPZLZ6xE+^PGbGZwoX{zsU?%ymqa@?>r7+?%66=N+PfP( zdjhdPM4gbi7^qO8Fcv0tJJLMAS>A2)&HZ@*XN~G}VLLP^nvRnMW2ty4-Wu_Ueyia| zv%rCgrILDsPW>Hc3&h8$WJ$Vu86UA_1UMoi;D$9VIt)5tnJ-xLLGZHOAT&Urqw}ok zzmZ8r8&?~JPJgj8;>BTdi%f(({!NFnn)_ae+Cf^UQfE=YxQX*w{6@NJGTmtny<6&u z3o<6fyQNW2v?d(<0)NzczXn#1S8YKBXtX<C#V3Ee3>ayD)d^|fXwSlDL4;7a#u877 z#t)H2%{&Tx4MWOsofXkq%Lx8!C~;wDcC^UNxIoeD;p#MG3A?FTj9Yos34kRh)?*P8 zS&In;lGcko#*x$GBaItba_Fpvv99=7ry(Wc9d$Jr1`-hX7F7z?OvlzhV&OrfRP!g? zPwZ+Y*cH{1ab4)AfRCo%C-~|@KU&awsSxre{a(}e3v@>X<?!V7d!dc@|FHKifKe6K z|M+fpNfxqj7g%A10E;XdC2BNL6Bjf<2&hyyhHOxttu$^UZ86+MR2~U;LlQ14w6%)$ zS*zb_YZb*N;ZaBkkf4ZwR;gHPD_=WtQSrq?ko|wonR|Bwq6O>EU;n@FH!!pJ&Yd~) zI&<dCnKNgg=+p-RW#ZXiQ76+R+`ULU)~#}<+<+&ASBCws<P;qm&^%e(Z5_9t@cs@m z?EL*NC%j*GeEg<tqGi_r#eZFJ(BaD2R3E{ONT~8sUmkv-F!q$M5D%!`I)2DG0R1qR zUP}htqEoF03o?l-Q)*aNnFeVYRJOcI?dw2}(&A{u7Xq3G#4WS~%4zDK;vj=&DY-ne zkO=N^q%gpeX`lEkj~IZm6W2)h*bmiTNe+2^8D$@TmZ|mYIRwMrL8o&h00a1Xe2@Y7 ztiPx=Phk0QqWF429{QmIx3#-)D$jL&X)$D>lpk&VmuTx(py*_Q6eHL|qPV3zuwh3e zmS=!%o&ks+jzC8A_buTOEI(4q06@4KG(rwMBuT{<H0yA*CVG2P&NeZ5`4{o(P1FOY zJ<dCI@o7C0{p+0BiSKfzf&5M~0@8YM{=?%?6M0=Gj1YO$KJf-_`XFOB(Mc)ED~r$Z zh?}#~?9knV1YCtAZ;m0!djVYyNnTJK{+LW~yU=PGmbO}IWFQc1yc#ea5~g01i_S^I z<%uMomIA%>d%1m2OQ3f`>tK94wbkv^vtchP?~u#FdG3WyY6`h1{F-%j$LRBqA77VT zaKiiX-;bML{5-#05)@A?<BFi&GJ~R~)_mzNX9B}IV(NX2G)xx0(vA<q*HhU_>%y*T z*$8UP*q{+?UAwnB_I#r38cdD$fT_`mOH*7U$Zj@n$bE7cNOTpkqjXSHu6^!D7)Z1Y z0Tr0Y{=1F}z(;j>8f&X1H1MM7wDs#i<1A_~8H7hk89~hB4LloP3M9a&Ll<6an30sM z)j%^m>^EY15F+{~O7ojUX}ZhOoMDuvj7#I?3usF8hu*}DT?!4RJ`()el{K(`UPVgC zASPpWAD8JLu^cjT`yD+tQaz&25L*wk3F1}k0qR^gkgv=rTmUj@9EJ9xgDw^e&of(! zEE33;x)ot)DYE%MEwz@r5G^%@t_=brxl!>O{0#H9VnD0sN3rT|YEh#87mLgU*wzHt zeiG~j2G|+Lfdy;>7sS4E%_6N!q<srvDAI*S+RWq9F28q4imS6bVOadfyatm3g^}Fh z)L2C)iWA<*M2{Kbgh}Epyqzdc*nzNwIAJSZz-)*=Qp5)c=gFR@?8)CE%w$VQSIjFu zs7avxw<3JFa50Z#kp_HD2p_H#nN%1Sf+U3x{W=xKEqYOmM=-Xyq(SlCIaCc_M=o~U zI!Pbi$)aGiQ+S9WefSNbRwwDhvz*Y?aRl1AG?JZihQgK&5_N?>g``0D)w4JySbq;M z8*W28#F^<9Kj&qDqpg<tWRyrwd3pMEFy=MmKtZ+xhGwnOMr|6~s14($AW??-jfi)1 z7@Pjr%B2KrShOvs5lDY}?GqTt+9B_pOGO_PQ+CfsiSBVAj7bvg0zzm1`UsXX!p5My z3@Q+<eF_i)(Z#e%4hZWtG?*DEu1H%<>t{W!o~u!xDy2x2@4>P2Xm(c9w7W7uA+6@n z`i~h1Ur~@I;>yJRT4#PO7eTb9ecm??PdR(q3Z)4i9B>5F7C;yjDZt^l&Az(B?5kV3 zuha@-1@e1LOC=@s4^c0-EhZ9=egL@)p`}7qc&z9Z6e}cQ!LS@w0!voOZ)XO@JpSgv zH$~@V3~VmAI{pGEIL^}XcYpzPbp^^`u<92~2{AJ%wSUBS%uf4$nc^bVQH$t46o~LV zjnjFQGi~aKxUUl;1jSX0c#zWSs$&!)>C-al1V9DSOVS^`E-NRFmSEG@WTi2|sct|P zdMfSfYDc_tx^fXOMY<AVS0xgy8wVs}>&NvEaFD@KP6v%8_OLmeE=^i?d_llCW^}wS zgSpn5fwH9C<G`{n>%?UrM>U`gWN3CS09hJ3ZqBmeqYS__%21O0t4Ds2{HqH7mG=8R z)O6RE6oX-++-cEyL;f?wUa5WaVMd1r`U`R?E6W}$lwb_t#L7A-qKb%TRZ;U|0Y-dw zf|G?PD2rz>2bDQyr`9Ja_MfQmY5r8DW)(dxqe17ti^iZ*^J|1eAEF@|y_XtS!@UYU zajSw27YS^%Ypr$!%>Gb2d{jLjw<_4eD&4AZ){;@y%ST(oH`A>OXV9$*qf^2+(ya;( zx>aGcE&M&x^mgPiWRU-~%xndo#mi@z*z<ejC$XmmVIU(WFOiPwq3~JYZW!Z8aS!c< zV@6Lb#g}XCRCj~0^)m-cPdQk+wJkQOASqBM$H~FJ_J3dB3=W^xO9qF32k2GxCK|J_ z4kRVh$k$y4L1N`+%m!nu<R8}$6M2zB1p+>2fCTfFzciTr$z5D-NRb>J<4NzLXx>mF zV+U%Ph^d*t%q+2eu-O2AN;E(-!Z5XlDl$91z$^eBsV0p8B#n%_&3dMDJ(U^~tLsb) zxFmR^{o90|O>+NMqYbw}3HEPioQ)mZ(dPc`J!tf(##|QmZ|m?DU-bZ@3VjF)$osde z9-;S-sK=7~x2yJ1;88CEXQAb|2ji>uQ{X=lc>MnDs^t{^GDS}A->$lw0@qMra{qRf z3&6zV6gW2t)=q)TDKNQzyNV>4;!Xs@mI6Iqj{<*r|F%RtjaJ1_qj4a`HnJyKK&8K+ zHBaZhWPH)9Sm3jm1U~x44j5gH$CszL$mRV^y00Ml{~P=rwg6;N_Mo;sUN-DGlKXBz zFD=xU5I@v^4T*sDMJwU^U!K=<q20e_PWrGdtlQQ9<ya5fB1+MF2}OgH<hgeIPOD$k zjGy`?o8X^{bc(boSfgSHNE!1^YPYs3qT=+|dF3t}1@k`N0MCO&?zOERh?!$IafBcs zn~;j6Q>$OVLz(`We&mzK+cX+8^cP)4L$^(%;X;2(S#z64qmTaDG#Ya9iAIThqCq5| zXz0o(8r1TM1`hp|E3c)tX?qjlBJt!+q<;coG-rtq2H7q38V$5*pkLR7UPB<)r$ijg zpaJI0*&`0)DKvw40y^O#sd@}yChzVR@8GRO{FAwDTC|c3o`_N_4^mo3tkG+zsCYUv zASPpY%N6QxWN^JkAN3ll7ozkHh%053dQAqwRzH!<8fra67%Y##5_b|1m!r{9(0XoK z5@%h*QK?}$Dj6Z<LI;FmMwK6xh!;_#HPjQV1aqcYUL}&sK&V3)2v+VUkQW9R`N@w; zWDlr1xN;os&CzS9<B;OqP#3eU;(z><;ESc44wvG}C`#lvNEdUrL2Dhr@z<tNMEcYD z${K(<C!{37IM7W2F~$UA$17ELGQj9HgdAMbK4yY|@R}u+AC<^O9F;JIVGlH;#{cMH z*d5&GD58v_L@Y=!b;_yhaD9j5;<U3OkrOjqG&6j8IB(+>ey8w_C)j6?pI~2}=oRe| z1+_IqZwzG#mF~{EI7WiG%k<}n0_m*np#PlckX}!|f9JgZ3w!wYSDt~V?x1G-=g4zs zQq}~9{Z#0c(ohHml|!?Y+KtFvX{fS4gh|a;Q}-b5aXa*Snya<xDEpS(^lWF}!M>Ay z7yEAZJ?v+&?`7Y|ekS`_>}Ru|%YGjF!`UxjzmWZL?2l(Z!2SgGC$c}8{psw_U_ZqE zO!jAyU%q_X11YXuaJ%8$s7pV%xA43d?mf8ua0lRy!lmGw1Fi?07w&AhEVzr|^5Cw3 zD}=imE&vyVn+*2@xDeb=;8eIf;Huy(1I<6H`7kiWW;dR@B*IeD99_GmJG=K#Ts_Ue zUgpEV-fr{p4D(@NpTtw&#FOXDe*H5BoHinVO9>48nXA;cOZ*xC2;<MThk-vT_eg~O z2iRZ9{x<gavVVwu=U)iBGTAR+e<J&{*uVR?^tFzkA7K9}_Sdn$jr}*-|CIf_-&1_Y z8{}uOzwcRk&f@2B?1$K|V*d&D+u1+*48`P|3Z1A!FE|g}1h^aF2EzH^&V$Q_yA*CX z+$gwlaM!|3hbxDh30Da>7j6Mu1a1l3a=3fo9)Nok?g_Z3;hu+E1J?|<1<o?a{Ii-5 zgMdfIbC*O|XFM_kdzlY|db`cXGt7rUeG*T76HgM4=yl+?gd5)k3<>dD4mohM4laX( zm)i6xlb`+U?<4;>uwRZZFPYrS@ppeIK6o>`c(IaK$DpyPO*38tNDf^+pF_1n7b&&0 z&;%6}j{=KlQj8{*{dw$1*k8*2-RwWW{$uPv#s2f`uVa4```g%mmHju_-^>0!_CIC+ zDEoFUypw%5`x)%}*w11=m;K@F7qUN|{R!+(W`73zGuc<!pT~ZL{iW>R&He-IKgRx3 z>_5-`I`*5{Z)bl8`Q^(G{2H_qZYf&G0oMa=FW%kw?FZ+Ddk^o0_`Mn~1@3IPEVzr| z^5FL4`xW>Nzy;xc4mTO@2XG;{pTMbbcfeJ_Er#3G3FdA*zXeCI2+j()hu|KA`yJd$ zxCXd&a2w&;;kLuQ3ipQLjzgyZfEUKZVY8C>IS#w<5<kzpGl`%5C4Me_9QYZa7)^88 zU%`G8`+M29@1U=_>`!EW9{Z26zk_}IPKuMwet`XX>_5T&tL$5LQ5-M(<Jh0UejWQy zvA=`;PucgpLh%dPpUM7m_M6z>%f9nfE*txk*{@@NCHrr)@A@;xVSh6F5%!;A|5f() zvG3-wGn{?TMx<Ku7-%hA7Fy{6{5}d-3HJot({O9xo`-u2ZZF(DaLsUA;I_f-f}0Ds z8*V?`dvF&6)&cw;g-gM+1I`WC56%mBHrxVyGhz0?dj#(Ui{Rwp{R+53xU1m;a6!1q za6f<x!TkhIg}Vc;3hqAuEfYn+dX;t{VDeLm90t2jk~jUrkY`UCj<4+OLyH>h7btiA z72o2QiLF1vHDsYo{<?v`y6Ec$N?E%DTr4=;^Yvw~5?9+Y6dXhx!YfNkxCh@4V<`?5 zAZcu%(%2FRO{T}*P}EsXBpzVKv=@iwGUyo$8cRgwt{DIwTF#-PlEt|ep}2sDHxB3I zlqb*YD-Ds$#v}JY=rK;yFA1q1(iHhQN#*X)Q~deEGZHmCf>Z=@CVuB+o9F)t-mFgW zUf={=vKJ5xcoe^Kcl8%`fDfmI+5tD#CA62pFHeG}wJgBjW}kBwc&y9DnFYK(3Gj9X zc$>ZQt<X_UUYtxm1>f{qTA{9=%dMqv=k{{HNgb7&1d@v=ArFW4N+uu3$(NJA-Dqi< z@^d$@TdAc#=Y=1q+|8lf@p}=f*BWcZG5dodnQmh;9T|zxYiYfT3Ak?{6krg)PDc1O zB4`_Efop+^>vH})Cz-<{e6Fy^8)=;zZ=`4?VhVp|+#+ie+J<eM`lbrnu*iUPJp;fj zIG`>6mEll)q@2j97d45nq!bc(AY&iwm?3FsCFkmtg^Klt4pTfkw2cD~_NFG_yvX8} zelLlQ^o{zmb@)whQ9Z@ihxT#Imy$7G;+QLqn9nC;I{r!>@|$GL-ymivi$kk9l$$k5 zq1haIiy6A$PQCFlKnjYB6}u%63<dam8Gm;}WoeQjS6)3GADSk^g9*bxXa+~i=4imo z1-S+?o)vGj04YOD`MXPg&)JF=dbkDhaJ^+xCp9Mo!0^cN%vgd-{Lg*B89^udLR`>I zZX(%Xa^XC2v@3*Pd$GQ#=o7MFsEUsekT6I39$us_9qu=Qc?#fYMVZJ11iX21J>yJy zVEk>4m+>z&B#&=<d7h6?^N|EGarBh7e6$62C<XDB&t#koeuBHbd(Q-gquT>RD>?L_ zD-o(8G$)?VXISUpn(D|E<AH-Fd3u8*5>`ze>*qL?Z-$x~#wruWg3(C7z&>ZNG6)if z!YdNA?ZHIi!DIak?3Mp8#=-3}Wdao?CVngE*R&7S5$T`>N&Pv2Ae!bPK9X-@qtSy$ zyL@!x(IFqbcqDxl+KI%YOFm}ek@hSR>cb=L>ftdPk7V@;k6C#1%EvrB`s8CS9?4u6 zBDnCFg-7iDlC4XGI1xfLitdam5X*mxO(f`N;aD!6QLd&6+@A&n+ks}zf8IA7G1bc| zhK1h5yQsyNpuCL&`|rDE5YdBlmB#Z@AJr6kY<FXpuHHl~(OPl7Ocp>gbKl-A#^Ft3 zXy;^8lF8&1q{aoPp-+)9bSGV)N(n*sBPdmgupy`fhonF3A@K<Z3(0tWsaS)63bwN! z2wC1DiR_~Y0sfQS$t=ZX2{{m|^eptv)eBrua;!sXqp%Ji5NQsMI2;iRDWZ!bMtlz- zhK&1^jH?F39#jPJCcsVZ9Je_Um#pYvA31`bfOv}QO;C{_Q|TG;(GDem;x!wEFaVF| zJOg6BgkFHJ<2plUAwHM-Rf1mVn;sCwGVVmgo!&Vvb%`wXAsKg8Knz7(#G(8NBjsnp zH-JK=oXO9GZt^oB6Y8-PKmzgSeY5b2tmZ)rvO6_>A?99JP~6ThQvWtKSxo4HZ|fL? zBs!_yit8joT!~L6LI9EKf53<o8&FX!zYps4-7WeOAhJ5)ks08A_@zFo5M5{sj63V* z1jZdtul`?uBYA~(2;#EMXbgy3=dEIK*`eoBaJZ<o3API?t$c@UYttG0+=u;v?4QT} zF!r<9KcD>z*uRkdZ1yi=pX{-=Hs!ECoc$v9$Fd(_|3>y_u>TYGf6D$W_HSjslKt82 z2ic#?ekS=4G`E&7_oD(=z!kz>4Htk5!tI0m7;ZA$58y&@KY>%>?trU;TMV}p?&okT z;2wf|4DNSuZ^NyGYk*q^w-K%#ZadtoaBsl93rBfayyl<PeDFeEW;}OEgmspenSs5` z2XAk;`FI9D^nu^k4Dx!+r&JcZ4ot=Sp#O_V+cXb-Ag-B~oWDRJ4@mlD<;B`M-*Q9& z3+%!V7;ol5pCMjVziyuX@Kf|~uM=t_m|Sx8T4GJ{l&!bGxVi`W!yp_(<JiHe-b%Cw zmvt7l*CXM*ODSO^cGxWX7VYh0+IH)~QMt4us1)w6PlO-Qw%a*8B^j=5@Ijr#f{jrW z3NS6PiDG#Q_7H0+987qDc+rCSY$gbK=zV;b6y{F|Gj|I?fzqZXr?N@dLYWJ)@*-2E zdAJv*2=FjP>Wu_4TAK$S(~Fpo2&~(T%4OlStXq6PkrR=pjtMYR5N|9%bnzQ2rZ3Fx z0Mk}WA@m2bSsI_^5LNhy5B2<ki|k1NqC@er$lYX-??OV-ew#4m%SHAWMb^i{PJ>j% zQ=+xcqdx-Tx8JAu_Gm55M$u=g;CK9#`{PJF-ZpkRwH>+zUGNp%vOPt6`-_uw%XWwM z_Q4aoMQ<!bC80V$wo_UBW*;TPl*qlvR}4hHx-i-?Uz{1Y89hcbPsdfj7_pY302w6Q z@H+A7F*DL&isVD2`e!C0S8Q>6;*G<p*|U&{o1EV04{GSac-SGj%MbOn^Z`viQaqjj zcR7Kp1Gs1{fupYe`E+VLGSQcX$d8J-iO8g4+X0JY@noICi8i0eXoWU!N7m72Ho<3Q zNmMiwurlbJKnLoIB0^134i+4zpfz9#zGuRIr??N_=_NyakI~Sf9ZC(S{|WtMp+ObP z#0p&Er*<f<^9Q9w+$3QmwMQ4=`|hR!9O|WBq8%EnX46p{;G{3=bU`Q13$%Afog<_6 zo`_E$+_ufQ-^t$7_7Vbc-5esgkj6)mqxN1=x1*jQOdx~F0b4tQkv>E*{CuEkj#~u2 zF#CvB(j9c~)%D;Ur2X%ku(w?zZe`?mJ!!Fcp&>@diF`7VeRljJMD>m+L!$5i^Im!t zZ4+9G!3>^oznyy59ZRP!`YXS<bU|0dJwjmkCVS{~CvHTcJCq*cXk=auzzfAM`85Me zj9I1PSLjtB4-Hc7F>Wke^!B>M6tuchvkYLt|4=h>dRR8cnfCrj2L1%2nT#d6OGz<u zv@8vlyUYBjxfpxYY=~vl5SODCrQ$p!6z3<t%*Pjl|3O$M{^&<H5caW(>lBkZozJK> zuNC*&%K{qZ0um@S%&pcEQI#SJy}$!`81N{Fo*XAC&?~aQKfrfq1+efJHfl=9Ar@Sh z)0~gSudpb0H%IN89jI%dqGwRtnuu|JqLxz<VP{srAP~aY);rG3nK^*`jz3~noveO# zTnUdN%E)NGH&IzG4G5?=5%*Dw+Z$eqxK3g*V~Bb&Fe8(0%u~rMW=5c*Z&19(_>aOb zbc?q>H*<T6AnZi(gW~(hA|S5fj7S0!i6OWI)X0Zl=$vo|+Bt*p0Br+JU=|$kgY{|Q z;6&IwpKC|kdCR~h4-aJm{{mtpvSm)X&^M9z<U(HvU-=TYaiKhp;!8$3eyI__ngn$< z7;&0ZC8zxeo&Y3-a|EeeD<97X4yx5Sn!;F<n-^oBLuA?sNeat&K9HgmV+wOjrm%Uf z;Fs$FnDq%j>hWmmB)&UI#`wR;b^LGE|0ykixyj2{$#|t;-WUC8f!ameoMMZG-Xgk7 zcvmWZcnD<DIB=0IetZz9`6i)e2Fd#vHK!pgao}PiUNF9M;vG+7M3U7#A8aS|XMV^V zz0M0wDP)|Du~0>`z0%Wu1s?PGvG58Po*gpyB0SQX6btu@T<Uo`ZiIK#6<*{eicmNC zqQP3rSx~~oP*r=B1fuqfp#P6t0AAm|X8D<Et_|tHd)?|!2@ld*?4)q~A+(Llb!$0- zoJ&TgTs|sAiSWt6?Q0%8E<yh<CveCF>aBpj4b|U3M1!IC>=b#4_3{*)dfL8bB}M6F zM(N!tiY$P7E+TnMI4}WRXh6HNQ&fV6n}t9B%xrQ}l9Eln4`HAN#L>Zez+Sv@o8xpM zre!A0UbMVduO@wENT9XmaR~{woFp()28%`B`=p6npdShiGGXJG-mU`#&n3<N{>RE` zo5rDig?@eK^-Ccg%AJ4%5i@-=XtQZDuG7+aYSd@Bs^7H$tq;D{|A6+cTifCkn<o%C z#1x_40V?bYR21MR1KhTkr&~-h>i2a%_)=jFf_MK?Gop=$BS|5NNmigVFoO4Pj9U~* z&&F4>qw5KXTJ9i+yet-7REPz~jX}zM99a^dz(O@T7COcV{5EI=0NdF{7h8QiIVyOg z)ieqN6?mX=7pUkSBD5?P17$tFruUm@k`d{}$@Z6P#}fSkZVWm<{1~Fp=@e=lI+5}S zek-gxt3@BEA`)U%A`em|kym1Lh7utG2X{!QN<L*^f?Ue88||I&d12fLo?V7!e_qD$ z;d1cgKkAnN1m-jhgQDa;vrB%O?2=DEAslzKjj?0{0?(D0H;LE7oJw7>2FOvpiR#$e zDW}EMN-{6698uorV%db<Lqr&YVsD3$UHDO)7yjM1(UlBC-sf@ub!5*KhMh8U-UmzL zMEPii?x5d%Y)xZv+;wVnj1|{CWAnd(m>b4HZcp>c8^BX`z&vwGr`E+Y*HHU=!GQFp zbB({fmb-(LX$ewES-gSP`yvW?0g>Q%14#qw7jxjB(KiV6V#H<1lVo_ysAt1Gc=D7< zlRV;f9tTcZ({zbWJQf>RCdxSof~_<P`XZKIChq^3y2h^WMsN8<E#89B;Wit#j%{%< z1LX=`jI5aumWeGNVR~xEx&WpRE)m=JgI3;+ZV2U=QA9Js5{v&J%)U~^GH|ijBw00y zjTP3i;`;T}e)Vi#;>6LO=w>{09w|Zb=|4^Mny4=xho&5Afv2@w!lU&fdvzWi!(9mT z2J&dtIN%TdLo0I!@&cI{sLl0w!>RR8(-#?v5W5+|hg48heKYsNw}wssJ|I4S92Af9 zKtczmsyGIAulbgyrU%7NG(CE9DzraQ<r9=jn<gSmyf{8dKMH*lfGsnKhR-1AOv2Rw z(3=HNB3A;JoO?fQz2w|`mWg7SkHNM(gTQXL!L~2KTxPKC*^+H1BJZIA;5FFxA19*( zWR&Unni&uue3(cZk{{^C_JTl(n8-6EaqCx#8$b9mw>}<W32r?o?%}b;dndG_n*j1M zDL`mAk;wmararKTiQqyb_}}lIFF`=l+VxK72)O^Sk(W|=ww{V&IF$w$ZYrzqsnZS2 z*7S|_RxX&9nxYlikA3AibTgv_yxFjmfTPeSz?^y<(38w7T)u*&iGn52ZH{bJFRMCi zt?W{D*bYNZAMQg_hdMC4hjj-9@ct9KRDVYpnpyyvzzY2ZZ^Q~UvmvLtI@-M8TAU<9 zv*5-r<)5=_Nu3kpwd!zOX=qUjH+D)^LC3L<yD?OB;W^9QDN-kxTpzaX*U2i2ewFLw z)(qKRp*^TCn%kSnLOJyajQvd2pPPpe|MvM4<VAJ2jVG&qy0Z@Awk|r1rKIAW%vRvV z#V;QD;^CJJdRa2kUYCmUfV$)5sxEaf!bnj6WuJDc4%?Rr>Ob2HvZX(}kBHYUC9)XJ zZj_5`*kSi}Zl!<A{7PcJd{Or(9Ifku6Mc1Qc*lKws(ndHU7FIE5-1ikM+49VlD{~n z!3IosDw{se6-$AcuWqP4D7q0Ca3F9O5OX{fEw-vX5wk0V9Q9T*sFu@g{+>WzI+y)q z&$55$?8T||&q?rc+Izsq6@-tMCGfErVM%<v3U8h9(TDl?6!B5sXZZWEJhi$?N<jua zXl+Z*`??3JOb|fex@B!Cu+^{C!IuXvL6Xi4@!e=NIzl9a7msowoUyZ__Nvh50HHNs z%!8-pZCfC|DuTqK0Tc@pJ>B6E&Jl}o2~sGJ031bhInd@J%$!HvViw-GV&In0gRQb8 zoL_~dUMHByEoyHGh@bLCo>SwpcGJ1AgdZ890CI>rt8|T`mql~i#Sbx^0~~RAgAu09 zwcC}NzIY0CM@_gOBtzdKYgCWJ4!G83w=heqn32Q_2s29CaS(kRnt{B^M3*Fd;$I~E z|Dx|6GbzC@H{cgxeHrd4ZcAj)53ynohN>7?6Hhx_*y{lz3W;fPKs=oc9ga|-87yza z(Lc54Q$EWnX?cB-OWdA}n1U~|EQhEV=XEa28{E>)`XXcmp;_#oW@TxozoQ4v356cv z;+zY3#0tU6suFn^AEQN1jI)8sY?ct*CXRd*a~n6bdLhc~MY#_oLb?*E&<<H)(Pe%j zw>--20eJM$XANy5Fm**f@f^}6vhB;+x{>X#O>jy??rLzhHJu~>1-KP0@*uLBjJ$~u zZXZXU*g5k3961A#$0j2a`3W86$itG6)v3`UFV)<PsD6*xDB+LUaITYt%JDglc#gP} z(%{52ZZ}b(Ei;$n+x_4k!j3rODcx8%Nd^lWQg_g4ZE^FvW*-z&t57LKNh0hTgvG*Q zR3cyu1<Vi^B?3q)8Y>arM8L%qFiI$ifO9C|B5~}$&5XPh;1%yD0!Yt1rieEa0o@QF zN9uNj0ryj_e6!3JykVqH!$dGXq?(c9mx^Cf(r_YRj$LRJGA9}05Vvw-UmNUp<Ik{2 zS_J+UlLuJRZ*WcP$w=}4$S~%K#fu}EzB_Yv=>-_zYI;C)#h9b@&knNefVsX*zl&CA z@n;EfujhS|Z1Ma)ibTudyXbxx!@#c+S%eo_2!m1e5tEximQAun3rBY&gP-aT?FSrO zVzo!T$*^G8K!-GGFGR1Z0<Fc=;wfLQH1>h9wfulxO&_T>`?SLul^?}C+FUP;{{T)8 z%*HPNI7hgPKjcz-jMcWJ_>au)3F_d9ZNeIwXE|8<mm=zKaG%+UNFnFL`wQfJ7<KxJ zaT{q03F67rwL9b#5Yyw$Ee>Iz0^?6$%bLccX~ZO?H}$o!JA#xGq|6A_pHA0F0D>1* z5@zC#Sik~xjl<%BCw~?3OUmNkVsIGt|MgYGs_D7w^&;%j72pb4d>io_w4@Rt!JK}r zOFOJ85!Na_oT@}_L?9aO%=jE9Zr4VSipO|efNobJBk1G%xJaPLtsQb;uE0A_jguk4 z%b!{2R@32o)Gk=tgBxn5G+ikdjUvR=I&87jxp9R6?t8()g5@L~s4(Cqz~}%FyPT1t zRID1s3w(mpLh*nq{vx+hLjsjjT6qH&cA`vJB&5-cTq9N>Pb_S~p1~$V_<W$+#Q>Ov zi$W*zoQaGV^kn1{wLEdz^>$|IkU}rQ)|+~>zg@j4Hh#o%U|RS_Y|)O?7C0<nGOl(; zvT5qCHj1a7g){>L;>Wn_u{1h-4BFQse#f94{x+}?p802>?_6W4oBV6Jn-)#SelE&5 zF{fFEOoL_tm_-)s{GBU4{sine5!=4|cVdZLt7qMr2Ei-cKfT0tdCzda$S$?ll7RK{ zVk@q}Y);WyQX;#;d(l>1`ZsIsR<HzQz05JK&60|SX<h9AH+ov>l?Yu%vf9n*PBBj< zLNsUfg!z=$DW*x3Q{{4cxSpq*maq?(A&ESYNFt3OlgtA`YBWev&H7YaFlMv}Vc7q< zZkF=r^x>W93Co`+%KendbkKq9`|6_|`J?UOtkB<pyF5cj?PCIHg+P3^Q;c}WB;=93 z2-8M8GV4b>QMu{bu`88jI}k?l3=b@@czKV|sU0g&v;hRzwxuxF4PAfz30eSPD9zTZ zh?Uk4fr`2GG;ntAQ*2^&AygVpC;oLsT3e?7v&#F#4LGq8ngHq>qE(?}L9Rg<O6|qj z3;JNNB7THI_LkVSBsuu?SJFUdIk+ooZ%`TwTX2z6IXJTa(o5_)TlM`|9J=(;&hq?h zbu(t76#omApWq$id&0Ex`rH7|H1W}7T^I0D40z(mWnaX<%TWxZqcUMGh=*<ZNOur) z{I*f(NJrFNr7tEjt<77GQ~J2hb~$d`kw>m2Em!-=2yt~e==gGXaZvmf=6XTLPko6l z`H4I8zlcZeKAQDC;$<MGWb%igWKP}g^N)0g`<il$VtNp&%;*NJq`!8SM*Wh)88qyv zyi<Ev9p{caE}_vW*amc1uv^Ab1GPw-YfJ(-G2ukP9Aa^yS^9G^1q_8T%^$r9{+)JJ za^*De8y-6j|CXuqQW*<Shp!y)O}Q9KVp3k`@tTd?^V;k_d?6`1Gr7bL6b5NtEW;Sn z{CP^`S{iInAkmJUqbwVVmmslL*x0#?bqO#cGZl@LrxEJHm~>exhCyQt9}OF(;pt@? zLT`gwrlBUZ;BuEQU()k(mqFi)t(OOgzPF?Ry-%R;YA*~lpLQ&xawEKH9ZOJDJ-r;G z706$BjXiEdaO}1%sg|OuD=bRnQGBOjPzeoB{Q7V_PDCU_a)jb%ct?G_V3M#Zm`%6= zxymg$yPBww27i-Jyj}h*mzq9`*uT#+D&LQFr<@DyX2zdqsF&)!bGB;lS=BR?M%-E% z9c`y^I?x=aQ@LA6=$VbNS?;GE&26oxOGWY^C8PmcYy^s{bHCF8Tf)cD+)#xFou-YS z{M#JhLiT_Qxs4FeExLeHFz?oy19o|IiTL|ppjV?G5`V)l_if9&DO$WB?9dNR1A{TC zRf|`K)7Os%IP={e&Ru^_;$3MRYhRrP=C9n}f{0a#4{IC<T>UoQ%l#Xb!jEL~)3&;u zq<E+w*J9V(C@Rc@=)1w)il3n1OcE9h!8}@yH;A*>A_`~?aMN8@B(C8obkX`>W%kpI zUi`|T#hF5uhbt_AR!;p!S6R(Nw7VA`Z`djy<qnU;GKOX;h;*?pVrner>Z80PXp1D= z3j_hzd#4|0jcl+WKpE5KZ&{eGkMjBX-iG;wiE`+pGB;QtQel&)N?}{|VcJts3SaiO z%zHz>I!nImoD896G=KZTb=PBeyfP0B1GR)@JXN?4?(W}QK-W<v+wPk@HRYl2#F3oN z^d%ScWjK~9#3n<;a>?I}c3#k*Xtem@Tl7v=JaRD*#(^|xoAPK&AUCHO0hbv8Cohep z_d4<;isdAxgVzGQFUT7vIq~(xW@vMrDe9FF&|!8yP~di}eX8f?QG+q|t)?i-n2%xu zbnR`#07schTc9_zVhc?4-6Ko5pVpLE5R9NAI{o{V@d&9t){M0C(!{-(*JBq}A6p?` z7tyP?`dF2G{V~1v)Q-(U%t`dzMO=#?8a{TqABw~$y2eY~m8|fWcLOW@#a}}toK|sy zvH4-CcpGVu0&=Nvndpy}qw5~k@xjnIu&!ldFt?=>IGkUR5*p88X^F6*W#R+M6ULG3 z7|EWJPz1SxBzmxNS;~+}^1P=+e1<uuOtc}WRMevcL2*Aq(2rh>5ZN#%?~iXg6j_3o zaNIVS)^CN_yQz{aL>*X&?%KRMun=E6>2Vsmaj7eGHSHZgL@gj<#Nr*uPxQ?h5FcL7 z-Ffm^llOBlJ$NB1av^b0v|WI`*IP_UcTh}tg?hyO6>@jZzZ3u6MCS;^o@{yldZBiO zMTJ5l3NiuR;53fz{PPW)xm}kjx7_mZ)g2H&cs22%Kz^XPEQ|P@8SE|<w=u5zfC1fj z)|skp8s17L)zp57K{43{#bdkzbn$mgLKN*AbY8G5bdA{-6%H|S7qEo%q##*2z!&;B z^P8q)l!g1{H%-Q`3PsUDqp88|DB=jB@2yf<)zolZfy$fW$N^>Imv}{FTHvTX%0!iX zB_)zpbjf_Y;tnVHq3LEZf}&+7cL|$HKFvCvfG<NRJHnT)SWDPD^1(_T&s?1lKTfko zGX9;wmE+?#(YX_`2jNNiOD3$$&jcs1r!?e!1+pBh<KwvK{UXX6;~uhiR)Ng~F+2~1 zPTQ1)+aUf(iyd5Rk3)S2)QeCIm(uu*owzGr{AkVKU<yIg8eQf7Kdarqie&n?SMHCc zme)_1>>jPPVa7hIvIS&dZs>k=Of<JYFIsS>39UzBFyvid6Tv5x;7W1(4z#g{mN5?@ zNUm>gL0ED#<R-j<my&8cAm3EpJ1#cL3vSN?+JDohT&Ma6>i~q<AI4E4D2V($Bl2l> z+1Eyw^TRFYv%Jh*(=4Tl8D$$Rm>iVCLzr$eE&7K+HBkMM3(^Cz_Rmy8LQV)F2g;Y2 z4Tp3vy?9`qIRK;Esso$fn3iH)F`TkQUoJO*hv{@y6KOkR;;4S9C&9a=Gra8>zW{zR zc#b5zwu`9I2wpnDi%NLG>X&;Fz(W{ffbpcoi&6CxmT_iEMjWId7fLI8UZ)6@yekY= zg6#QVsT4kNBol!oCnR}cW-w4(ChM{ki$tR?*T}qS2aLOB&0WYHTfma$Q*rQ4)%)63 z|K=a1e$U!rn9qsy`f%yzP&(A>6U{G6(t^tn!s%0+Y*wcQf_GOd-;+tR7S(Sxb!$y? z84lTKFH_w!tG80O2Jz?;e`8W@^zA75q93Bc=R?mDqnLqN)=?_%yc7+RhC}YdL8xV0 zc8Aq{*|n4@SjjB2LvChjV{}M4cZi!hg!PNO=#Z;1fgaZ(WI7h*L4m24s6*(QRX2AC z=YQl9BmZ?59+y9L23HzQ1Izip-Oi}s->pPRyBlz_x)ah7Fk}4!W%F9Z0!@AyhNItN z+#&V=$W62wh@>Af>W<s*sO}5RybH{{rJ$>GmDL@bRN~;2WR+Ri?n9N!80$OXV6w^{ zqskd5r6*ZshnekG&_-@8h<3^RA8I-}DAv7XR(0vQ2&K+oM5NB37ak<^^3752J4q>* zTV!BU6id93o$<VEQGGu;(FyYkjPv*e{^SFu`EHu<uv!&Qf|j9u@OrWWH<2!!xHD7o z7a2jZRpJPDRgxue!W=J9)IoU4$m&L?Jt{ewB;l|#p3?o5kj^unI?-tkI{t!=BiaY4 zRFCV$cv(X55Kby%rsyKe$N?uS<yVKv{f)Kf824LK8Nt&BDy-4pdokg)X&Lb8FS?4J z+Q#rp3B(qer0OjG$w*7Zbm?D^_<|(`GZW)M=RJp<W~K3a7QLYgAj<QvwX5j`+7_R7 zh&Fc$v<2AQxg4|VrEwhRQLr8-b_9k9a0d&d2Q_2uYDO^B!_oyyfj=Nqo};0QG1h)? z$6!Q&^0<a6+#3ExbS;%xmQ<FX0CXJ#tH7D~fXO7vW<Rm`yap5p=!+ij1|o~2`5M#- zw6z{Ahb@qae9z*l)~Ukn!1@E)Q&6DrhST*i(6B4edU)&85|o+JeRcEx+h1h=^gr96 z&mMG;6TK5$%dP(-9=nVrsL5q~FHo7@K&zTBHTlp)lVgZ`6OFcW+7vXBdumsYYy#?x zx6m1HP-iT{Olx+=)|zQ{brX$~Oi2v~<M6NSi|4p6hU|_#dD``r_45x!{a{)4XOM+4 zs}tIfwinadi3mCM-E>`!_$Njdq|SoO%&tT?(IKoS@LMMS@}kYMIs=c<JH22VGS;i$ z%V-9|exj@BQ>EwFxAAMo?|$q|)u(9-j#^Zwo~o_WT*wD^?!@QVOT`Y%c<4?HJrb$9 z+8{f{ZnsbF-IrqLzC)G=5mM^Y0^)7FA|mYv5H>?z)?uYw!%L=#@hB476;?$F=X3T% zXIn#bppI)-B9?8Tm0pzLxp<H0Tf!qrk77eeUzf-ix++8bH_b>`)7oLiKkS&A-VCiy zXR98x>!W7q1=-r$bn4I<F40rul?qpnAazl7wDyGxwVV$(gA<)coah@}OiuLg2m>ct ziP2GUVNeW1ej4B0!jQEuQk#~e+Df62d%ZbZNm}47)0-p(047~Ak{XP*cg0<a4Bks* zP<4C;FPvp$AoXXRt=dB1>1NP~7I2hqOL&l3_CB)giawV1N7YApZ&bZsAM5f9)hYM? zq9|av4nxU9YqKn|Sx$BV@jj0y-WvS{q!RjAH`FpbO3h-tRDZDowN+{Y@M#bPg#{<x zCB6(5FKjX!>2RVB>kx)UdK6gHaT!gmN#o}p)A+d}i|dF!P3!E~8B!uI-wqalxw2VQ zvJ{ai+@Q4jb#!nLtLt<9E$UEFn#eQ-`*3oNFji(t+rk|iX+tuZ>6a|7KaP^IvVNBM z6zBE<T4`*?#8ivvj7K)KkUnZPE7lcx#C`=DXqM|oO*oqe!QpOoT9Xa6rl(TToJi0! zQK;t-W}*uk?x^>K-juaA;r0~s5-|EwrfYcC1l1FB&*hSlWfiq2&5Py!e(EJ7wT&tM z_R3HE?csB^g^q%-k^pF>26T&I34lWYu%jHkfryrH4)oeu>n8hpLere6CLi~~9!4p& z_e~+}T<~c{rD8G~7A+JTL4sP2EN;v~mtb7s=BaR#XxnJE)H#WYuSQsDi1a}_Y{)aG z8S65rYn6n$V>$~84SYBAUTW|9^`8RCn8`A6T!a%4FQ!tjM0bksC&Kol$vd_mjen>6 zO{Y!ZzvBcYr8#?Y-Vc`H+Ay!Ocmog|d~^n5iahW1oH;ovCuc|IGdpq{X299OP&#_) zdXWcG#=}9KtTd)oq}+Eskqw{d%|r=2guJPYG65nC*RM|8<uKG7<{5IBpP?;qrDEHS zbvM*rk~XEYniyC=q$fFnpNhVy1n2^2=ZIO&K&wqeewP73<skn7!XO)+1Kr~(c+@s| zrm<p_q4)AFG9;M89N?j6xq~8n9wDn8BQFPS>NG4WT<xwIXIBST=MljVrydvuMy&UN zNF&)xvo@g;@oCB!2%V;#nt^A`r*{2kL<{v%uAxN!xaE{cHM$ayDHgQ?KN!>{`pAqR z$g>j{Za=phU(sc5o^rGGY637-uX+=~t@_V*5E@`Iraj$ySK{ld^tH{B1!kd%xCg#T z%h_g`K>;W}U)hfLa(c%QHsAR>zn?yGOZmt(8IV)$B6iJ<^X>M0+^C`~jvxn`CVjkS z$uQ36L5>4sG|v*&el-t$B_nM<THumk$O)tcetJa}07|^=kJ@K~Xzo#aDvhNe)GlMQ z>_u#9<AA;727T7>a_mUx8>igBcVv#Dv-g-{|6YHY)@F~rar(90woUSPlll{XM?$V( z8L@4fsATiK*f?B+C*o1$G$omlaE9Ks`mi1NG_MynRfrYorp<Rjt7$2vTaaN1p93Cj zNcDOj;&8ma^j)2$kHIk?s~Q51&d?5ZQ>Vr04pnM9F`MTcV(zZi$GApd=>^&72*`)9 z`7>e|ew3O?=u?7@vZxmt*Rd!yq(^BCV`XU`UJQgJU8&^Kp*o++39Vs-R<F-A%B3t# z<9D;1^S1}Z$Kd6er-tefT>`VVOkB5~r<R;OASHLbggVl4O7=ev_g#jsl)#~1=c?h` zqm&x5XrbTbMK(3pL4B%@Uny7c1`FgymmbL0{(*b4@~`tQyhR^t>}SoJjzQqp$7ZhS zw3W5d+{$_ZTUl4?*PXDH^@6dLwGmrcgRxeQ-<B7$qPDnt)@RONT@Q|RxiDtJXVO3$ z4FchYm}Dt*kmLA`yn?B#)aZ%B|A@zdg?9agx(UAXTRI$d<9%6}7qg1NoDyZt4T=f| zOgbC9D)}au_uZtCdyi!y+C2)2mFv(|ICDUqHJOA>>X4xLF?bKAn+q;(5jOv!@USvS ziGIqVPTBzsWr4Z}#cU)dUZPq3n-;g>^oifD{`p^R#hUxAYO_QVESr_cJwOKrS|$dX zK#d(Q=rQ0ntRh~zQC2@G6Ne$fP#O=xCPPsM3^LGdS&Ii!ztZaXTCmsH^Z8zap<>#5 zg%<A{PTSBA2p8+7#XaG3HuT4{{tzj`F`en7-$ROu%W?D4T#woV9Gcz#V&zAtv$cED z4s6Oq-9&m{gP!E(>|ts-9t*=?64A#>F#}{P6SD^mBA!9;;MQ=Crd*333!kNTYq}W* zRk2VTKkNmq!+o#=7(2e@bDREo%ZGz(pU1jJ$6BLyoFZ7HyP{E=$Es(L-5=-{Iali; z2U7a<adzb5!K0TBq_l$%#u0`)IyT?|;0lnXhxh^qcr?5h;@wN{hwz<IJs_SqliC=4 zphW&bsV3tpNX`uilm${b4urWtpX923hq8vi1x3I?;yow?m7xEg>USOiSE#iHsLr$w z#n>ONw|1w4fHixHOO?V_eK&TV@i_}_vM6jJ1VgWe)7Dd@SPx2>ulmO0<_{DBLvOek zfT?My1;Z97%eQ<gHEuKkf3xBn1>4Zq%F-`T9$*LTyhT37BdR%EYa*RqkioO*TN9ny z!ONNS5>HiXi5SLxf0~<OV>MTlp6WGzBz|KP@#H2gJqjT+Ua=wyp*0tUJc8d?E`<=S zrjT<8`OcycqU98Vy&y}BAro1r5bWqkQ!hUw7J%@Adh2I+*6V5ZhsrH<M9^;2^eUPq z5}L@l3H!K>y}qoEd?xE7_r~y0pg>d*?n<qnKhC9Ijy}sAi??j7NYEg;l%@Z0<!b-o z@Ic5dYN!|;ze2N+w0xd#d<+|R{7ZM6jYq=adNHla`HI5}%{A@WJmsi^XjX^IC>D>u zg7wLEOzzrN^rup|UH>RHhz07!;#>>^p7z7tNK}%A+^_+%-Bqe>hmNuMN25uOieS$Y z;KrAgidQ(0sc)eWgjTc>rn*YUisxi}|Dk!W#Q2V|J?IMU-M_`sz)k>eHm@Kv0H{#> z1a_We$}ZaWf*7vRRU%{~g>VCvb7^xicRQ-LSD_hVH=x~1OXUm7b#<a#c_`2*yg^<^ z#S<QeO4O9fb5^1}yJI~l13LLo{q91bZ0Bs08oKC(4yDlDFeH5lk(O(TaB_O0eQ6u; z#S+U7kxFTa_@u$4ziAr?abta%hL(so5+BBID8L8G2AcCL9zZO;ZUua_M1MJ7D-BkE zo9Y-f(*H{3C$ZG(?Xa9<Ik<)Vup6bwpc3Cl(2Z|g<`s`fAkcmu&6(LzysJ=oPl@>5 zo7AQ#Z#b_M%{0XPzTiUA*F{tHMF=FCi#Q&QZfd2Yf8<_9ul<#CqM~x{VK+*HH??o9 z7fOe&radXWb;uTfYZ%>W1?d@HD*AX%AOqn6rNW9pbNtWijt=$d)}eIHCPpK`*F=x$ zTj-M9C#)=2t+!(O&TOq7Okd<iCA|ah<{pEs@;L67!0!WaPs26C?SeZg;s4*j@1zCf z`sDYD+|O_xH|>XEc_}EK18)H3yG@RA5T0MQ=q*#RTEOfyVpy}qrqmFNt}iC7AE0p8 z>bXt|4(GDm8lD5<rLKd)0b^YQN`WH<Th+dxns#IVtXvyDs;}Cuz~55&DYPVRXbq(T zTgd{`wLD)ERr)6{0UW#}qs$k-Ni$xv`T=YUyp6|-zTz|d06e~q$fEq8hvf!X_k8*c zLSPF1wi;8m*PT6Nd*O^7)?hydEr*FUVn<Ao);ZE12nsnsFK}{Gg;UG5V|`=kvVi$` z@q}|Ew?&5=c$dftvmkp0acg<a)>6<~j`IB6QP@O5D}6><7e+Hdw=R>1sBEQ$P;48h z*BY(k4#XR&b%J8IoFJwlnQ;y6H*XJCy(=>~*k_+LDd=3_Ns}?psO4x6tjp|S`^8&h z`CoH~@2H?yBvXyJ2LvN*f7Tl7I^te>JnPvM{oWna&%4zAdgC@c0e23l-SVJj26Wj{ zd4L+itk5a<uhdWQ(ABkAvS`P^J+B7_6X_KWSr&Z<W^p>v>_iU!*QQPZlRT-lQ#HOM z<;j1B*dVpL{xBVSlH#3I{b6Q~4}jcGghX+Kv>k_eWEr1>s;UC7qBJ^hEzgHMrKhR= z`Vo2?NBCnjMly1?=8yBjBs$1#Egu82uLMSQ@drGrv&jER<r8u}+R5tqzm4Xsj};W3 zU;)o-m~aZDBt`bscH*pzrEp<Oz0?Ui$rfpo7m}4uy}|G*?qo4mykRf8QD}c4HLu=a z>A{?y2m*A1_e1rcwad;|Aiybv^r?Om-s>HZ-&i1?kun_|<fd=cf2T#t!N2t1s<qe< z<?9+j>QAoi)>%L31pUd+cq+xjx?pgW^e2bPsTD2X6CGlIX~(Aym)duvcKE!?k07d% zYLy>>B9L08(rAC_RYWj?-!Ou|u1LpyBY}{E8qHNk$XWAiAg6XG2KM}%12q3b$DohV zH8>on6W!IXB9UC!S)?87TKPA*;?j=U!<pJ)FK831Yeuh4>9QQ4mTP&IaQao6z`-i} z{EuVTf{(mfJJtnKOe3C^<59G|GFlfzJ4b%i9mCprF~!R$T0(u?^1&e6$2AA$)*<ux znm*c4xlIXYLXE^1nz$EoOp>aWh<~sZC{QXTG7-ERbPDJr2G%c#6Q}J<XLue$^ffdx z%JZ+Yt4aaw8PTq>Q7dc$DUp6iO{?Bs_$8q}cJpp?UN8RSrgq`=)gee9%8YDpNoM<Z z+8$~9_jPcO>#!4EXlesaI`kz(d+SN}#HlYKl6-Q+<oJtN{#npT{;A%9B>-ffQ}JW7 zsH5~Hy8!}A&Y}7uUbxhe;uvLwEQ}CV`9gNc$oRl{zbf;lpf*b;jU5EH5lhJOO$45o z2n0+sFd35rPpIZ8zmkOsdpRck3(&*B-|~FtW*Q%Ap91aBd6oMy0ip*XrEKYrysfRe zeKU=(lPilNR}>z{b%OfxIv@$=h5=F?uN))BDdFQRfz-x(q4HyzA&xI9rKdT7&obfM zH7Il9I1`2*>j~*;`irM}plJln3$3Sm%0e-YGd*Y!ZZr-Ioi^aDT*rx|Z=f6w2w<v! zMUEgE*+uOjnT4**EKmbTzUhQ^Fk6Mt0+j9iFCUEgaZh7B;arqFx{+eoYWd2}N%T)S z6{zzPn@{*Up(H7{fT6QVOX@I=n4VBBWBwV>gV~Of;XEe{mcXL@4$McSM1OGi*PT`( zbc1Be$ylUzWh4WYZY>955#F7U-8O^&wX;3~8qZx8YQ%uy`AUC?#$~*Lr`}s!)&EUn zQEd7z;&YsBiz%4?h&ydtOp`tRh5P7hd3PeNLZuu^J@?b5L@Y~ROR@mSe~nNQN5uMo z@$<mK7fuN{!S%tK2_Wmc^}EKQ3^c73;7)9S1fX8}Vm69$*FKC~5_QGgdK*LuE`2?R zzo<V%UrNe~2_A_#L>1eNf?P_yDMYMP%iAejFIZtf9So)SFwXx!jvc2rX~$`&S#_}= zVWlAplmM~k)PWc5Imrdx4P>Uv5KO>~Uw@ei6a?R|f0~*E0uFABw#6h$qrbMrM-xwI zK_iSf3i@kX>_|L06Hl(hlRNR`F`jCg=iF?{Yjo}g+D&jbnK!EUF?Zp*gL+~!AyvBr zyKuww8{OKvhqzGTfhC4;dc4EH@^E@vgg?^K6<32$e^&k)Ba?^E|2c(Bb0B`hU&42N zWMbAeboI5>gt?ZmjRqQ+af{kNT1~uZAX-h_C&^h{BFux#*&3}T%)uu@B>Cw^<I}$^ zm2nnlD$YA75yJ2TtyZN5Oq!*1XDk#m@hNKW9}rcKC9&>8QTH2Q-66udeP%3i2f`9q zHybaEbyFZShbA@{>GPIDiADQ7rE(~lj~ZuH8Z0mz)$+C@y*)bWSbY)BjE$d<-aAtH zy8npUFZ78Cxm0v#XrPtT2pmSbCv?#K3Ptx19!1%(X@>Dvf5EgV^&UwzC$&!f_pWh~ z{4Z_Z;$KkYcl{!crK#~YjNVerw*mBKGv5@vX`2ESb~E4@FtwtK`L>_lQq8x2&>Qq= z>0eO1$~YaUaF_wD9Pm{~D89Cj<$j(XKN@FaIuNo#vc<wyG#=5jaJE?gYxHCR_2kn) zAh~0`5@BV0uQTY!lX#KzLxc8QY3Nx*i`uU=h|!Oz>7i9Ygz+MAYXaDF31BxNEP)o2 zO<+@|5wwz^JX=>KOO=TMPa<F+CPnA7<;%^PV2GRvLTx6{QgP%FCghkRCrMD?KzWYP z|5A0>JNwloFVeDn4Y5D3{Dbs3%CS?Qsf=zf2PQV?)|!psmF4x5!<O`oMfFzy!OA*d zRYqu|nFFwD1+qY4vKXrjjG9uP&jtV5X8*<?rGEFGFOJ58AuH%5w{gw^5}RkDA{Bvp z%yHs?tU662kRNt|9w}6=F%==ej!N4Dp_Q+vxPYjagHYs(n=o*-O(c-Lfv^B3wqQo_ zHf!u^q;Zynh*onxwq~Lpu%?JEB5fKM8fs{$xA__O?bSZa4U&rnL0T8zZC^hKV#8@6 zqV5a@AUt9!B2uI+T()oA9LD_q;!(5*R}8@2Vt~bDZHD08j&8$t+@g;SxvScvesMxK z2Qm{N$XCltXuambA)Ou27)>7WxQD8VEnJxV31284dI;mggR^3xoruMC6w47-X3nqm zcroTz+$m4>FBA7c?}zXSKtRE<06ahRx|urOKpcj+oRc~0*V9}5L&Rq=j`1Gjo@8Vq z%c8p(ncnIjBK9K@`I|TIHZ~sP3_S?Bvg|zOmc+vkVhbz5Aw{32SvScep-zTk@wd$y z7#3>6KhT&fvV?CaA@k~PQlS;YY}D;e{SZ#z1;x+zoBe$jb}-{=hSFHTIyvQj`_*dN zNdL=~pT*KpP88iTTH9>bj&!YTgRT}g+mzOzn3qEE>=;4WV$B2S;}t{$*PBfto<bP3 z;OHa;89P02_$Z=7xHEN1tG1rGN7Z3M6SpS-;E=U}B)3Qab3uYCphow{P5}OmE<3HH zl0Vjwvy`0uYySAL`+4Lhd;eSEkAG_Y_W9%Kyo2I734i<=>X4k0-ue~#_5}WT2f`9l z(pJ0}<Cl)K9>*Ua*+XdNA^v!pWRN9$%vi)HU{9+*PB*gD4}S6BQQ9o?V4Eg2rx|0Q zwQQ#dy$2FOQ-H0Rhi*Xp4fSBMg>{94r}lU5L)CMMbj3`1BL0l91nJt27g=?J$~r&3 zoIObI3}R`0HP(SX{o?5L4*ia!Ia~SQfBq~w@jn+Q{>|m!`>|d`g5{b2RG4_e90jXJ z8R|7!Yl{D`mFrnli(PUeh+efcWQ96|L2Z~2UW7uRdbD^lh~eS{F+>wjqoRenClZ0G zieoDnOKC6~-@7EfH!#6`6EPA%nP@If5KS}D>GsCy$8VZT#5?`K(RlJaqpC-IRS3qB zZ!&vLkHw+sd*p;ohHO0uv4}r_dho0rc1;BnqT&SLHJ=j+n%fH5T<>U+)eO!xf?4=j zYD{KX^1NcH*h&pyOlDVzo%eouGHXRx0wdPpMPkGh7!;QIzQUAiZfhxMu?Kq`>(+AX z<0`kisi^9ZFU@UJ0j2ZA78@KoaYplVl;m`#FXfx0(AjcgL-wfhL?i3dZ~9Y8(L`-6 zZuykyBQZx=8n$7itRG{`r$qe3kWPk%z>#C&amVix<rr4u%^e~-ju;(%CiYN0avw{n z`2yf+5lY!`I0hGh>9r&wfVK++1nm~}0<<e%5<+(6f7Jz~QuXB#^6JY-45>fE0!UTf z5CmC7Er&L8C<uU=+J}MX1%!zN0VigOb%jY(@|&?Il1JkU9Z1LNFG8(=X>QUgqrs~* z<`!Xt2D*NqqNLca8mVHJW^?6d9eeQ}>VjDmyH$69F9i^i0dGYxQ3vqpOIVh-6{4P> zN5BM@=U2MaUIp65Ol)_3jLP$A9ZxHyeIMiCiDA=0Ez@uGYDXXkzLOwbodNMze?84m zT|>!C9XE*BVBz5gu%e@MWi6L?l-K<Dq7lE9ddS~Ce@G0bB0Mmzqh{&Qbls}j^Obpn zF++6APg{5<batujC-}1bZ>Z;xx@1<26u&r#=qu|1K}R)Xwi|8d?f3^I&eO_`^B$g7 z>?bLWFHA+Lr(joyyYrNg>^qEvVzYddHEJOr)mP8}L*w<-n~3~jR_H0aq;)MR(r&<Z z4-AU4OnN4+gyL;2Ac=WCQfYM0{<1<1%#nL7D$Ts^>bb5Jz$F~ED#*aQ9j7+Zi~I*? z{|fEtjx`hR<Fn;dMWb@Px@Ui4JZ9wV(O$wq3VZ#-Z-bMof0%6XLQ(|PQxr4f2}k(* zrnqRL6c-hjKnXK<r92Segj}O0j3oJm(9(|RcoN%x4iXrkN%8kkrIY-8Gs3Xko>P%o zCb}bcX7o^abTY*8d^rTHV*Fl-Tt%>^WrWA-jU=Pt?G(Mou<eO0m5nW8kZmKI=No{y z&`ispyx6UFhwnMgoRbnEjjRKx1g;qQ1A%>*1UO3M69hy18r3^tS6YeBnjqF;Ed;KW zzQP9bco^hcMzStNI~U28OX|fE&x|_#7B@^MeFpVRnFjrH*>P&%=N_j9-rrOM{}Xm* z;>ws0aQsM#Jd56oU4TC5_${FdZ<Bv{BT3fUzggZFTZ$g&^+#fyKr7VB>N{P_K^Vf5 zWa_B%4}fH`y`&e`vA`a2uGQ{LnD?9Qj5iWOir?|PM)K_o;b1K3F7y&DuT0ZU?aaNv zw9~vE7}YNAb1Vb$OERFLfOZ+#sc{zV#YpDUnnrVB!_4f|N7U>J95)@cS7Hp5pkRyv z*rI-4JceRROcB78j-9Y{h&IjHDw{mqA1gbIgM2YB5${uq_as?F#L+DqBJ0ZtO<<1^ zh!C|`*Vi%@TO}SRMh9UT72;3toLGoA#h?W6l<oiyQ}}TZd|Y#7EfXFv7Gze}36qpk zqwqq~+AhaNUb%k^w0q;T-RO(OtBk%-YJP;SMeDeWphNEesPfPLkCd8H+KHp8C=u8% zkBdJnGppSbIm!X@Fv5%@K^?E-5DS%7NtRZraUmr&n-V#jVEiZnqhA8XB!rb<jA4p; za^DGK>^r29|H)Z3t;EO>dtym`QQiWqM|@5A0tWpl-zGc+nL0##+we?xrcfAy=*H*W z@^Lt3=Eg!=BA{pS$p@E3I~vg`wvI-`>7)_iGD#@rUkKpBy|oSdF#w^*zm~*>9d+=u zFTAtU_%$}~IGZLvj)K434Q9fJSYRDNa@C32`sqaWql@W>%Bs}-j=ruZBPYPK2jQ29 zOO7!u13yvo8Uk=+bK5U@glC9GJS1(Fl!)%gMcd@g*#oNsukbVON2KcMbrV1}NpUcv z3o<xjQ+sPi?69AAq>I{BJAy0v><EvqoQPO!T*$@$UWqdHJ+fZv#aPKLEsO62!v=j9 zrM4Eejr(dIyTIm(H>gM;jjmiOhM+X487hKFPl?cBpMdDcf%bYE1r;EONRv2rHx!S# z+6I*-eowgWA|@QOZ(7ctj`u+fF+I9;oN!TU=AlLM@1b^4YR1E-(HXsG9G=joF3=Oc zLJG4OLbMjXq-v(mWuHxY&|bMoXIO}N9`Xy^fp`T7MyJBQ3kaGYN?sEIfVx7Rgn?W) z4_4I+eX|UcI(PrVW}4LLbiKvgfKbrZ#?=^|uD6(g%YabZEcDpfsIRuk2Pw)Rs*`pn ztijA-@D*ODIZio3T?{ehg6|VY0J|#zSrTxa8Co;lj|0Z?S!9piMXW2Km5=fxE|!CK z=xrwsb}Z+X;1jRPQVlP1x}S$uA|vOPSS3J0Y3x?6zP)1+`cH45b|s@!&Hn_Y#H;|I zfwJgG7oX41jlYI%IJ7qoN#t}2-35d|r`BBw5Mg5s<l#AID~pr0Ln%t(3&dCJ=zG-> z5dBg97}s5ibVI}valvQE&oo|j5QV@kG?={%oFL%;Kp>jKw#6@QGxB&9LAq_&2LRfg z5Y!V8FCkIv3~E)JqQ++qE)gS99U5w6*_jg|N#BYBSS?uUi=Z)JOXfb#&J`OV6VFC8 ze2)04@EINB`6vN_5Cd$mI~cVO3m^soz+L7*S<b?w0+&)W$k9XhVMgOw0qtmO1xjT% zK^PYw)?yQ-;>IQDJu-1b%M3ERK_$)ts=@9>nb`g_qob9(UdA^B=LXQ%UfUK-3XS{` zm0CC;^oW^9Q1q(jf=E(C><AKM*eE5k_5wr}kO)hkT(SRyqw&y_NU3kvcMpU494q>W zOB%!|94^}H2$BZ`>MALeb(e_OK4uz(6%vXVooJ6;k2N{7$_LbbB+MNi)yAVs17gcl zT#oux<M4|1%F<f9#C+l!6i?DcPw4(+sV8$@PBy=S%fb)|=$VU6g%03nP(1PuirUFc z*7=Bz<tNr?o{k|<pyqV3K<QfK1zSf(A>WT(K@_eVi}i3&XUy(WaYo|XSw!=kpm}PV zOx_dB^C6q^%T_9>9n{We684Nv)PI;s{m+sks=wZ<31p%PE3WzzDdBEywd*h)p!=!m zhhw3>4v*8O)@SOiY?)|P$5C8^MN=2)3U{1ubM1#q0T~@=xc}ri_kYXw)h)pLpR8*s z%_~%2VZr3pwwUmN{uY#)*I5;SnzdWPV*-IdMYo`sh@r?79j8w*E$DS2AhNc41tr2Y z3h`N)S~Co@Jxc<l__IXYgCfdla5ffdp@jA)D*v3Mn0%UuG-#Ib682e)B05;=(d$VR zL5qU&{9>2dy+CWpgwpB9taJ*wz(IXu-2`8Ed43$}mBwOMIq9mF=ewnXQ#YyL1YOQF zL#Zh`!RN$L;#<isp0`ZQd7o?e6^3R`QdSBA{j}@VQutHAEvC{Yzuf7q=vFMe66%S1 zE+#l>kJN<<-^&#?WiMwMvKP=8Hw$1;d?|o|#wzyo&?c$!Vg@=<Lo4=9qL^FtO6bcf zb=4GnwHLfp9o_H1)-%HfDak-DdQ7oP!dPa`9)FASU@M3#E*DbnilWm{!;I=<L@boT zgNX#t#NDo3ivvy+H5StEz)?!2j*dv_SL3=KrLGGe&Ahti?8%3|x$=+%9ABV7B?y~n z%J&QaAmBq$qrue(w4<NHebJ>(c?NYp^oL?ySm;onYOHGLS`hte#~M1gr?)KeT;2~h zb@#w#`b6vHHySq6H>O1P9A`6K4Xw#Ot@wFOd5C|ix@6seibD#0PG~bot#0$>-_%$z zG3DF&MXx(cwdQ?90(>LhM>{Hf7rD|<HS;o?D+q3R0)A;~S*@N2y;<U_$B>Xuo(<O8 zyZHCd_M;zMmZq7A0Kpk%`ZP?3Y?>xig)rC_6YmVcXxNl7HI#)5WpP6$&z_EHQ(8%= z?Nu6PLs?{WO3S;BbkaF=cLugb#%*ecNCz6e*{W-#*6h#@J1ReE+BU@DirHX|I2Z`6 zKvrd91x>VL?BGdFNo0}Ia7|Z0@7D5nD5BuOQH+o@^DUL$x|nZvdb9Ccaj2ak7IFR_ zrJ;9|<2^2d%PfMu@{{#O5oVEIsZVJbZ#$+m6x!kv#Pz|@Q3hgVAnr+K1N?U_F&oqX zNS3jh0q=soOukihjnY~i+UJ11+JJqPJy0CV8b;My&FNewn1_;Jpj4sVj*V!#<I5H6 z%6EFZpc`Ld2R-BK*J1EZ_y<rw5cgX{3|eRcL%m6YF`<s@4An~o)DBz2LvcfI*c+P5 zDTW@OqE8}4aUk>nVpQ16#D{|^FSiNx<Hcr`Y1pQy-q2GF>J1rgMtd<4jWU*MMA^l~ z;?+IO$OVExlAsvCa|tvdwlR!HIg!VNQJa7Per5TkHrKmwm&4tgYjb^aiOqE-klJER z>GD72&u0I2=*9ovq0st9T6*y4EeAgXM}X;MN-L(9n~4y)ncv7#8gjHRQo=+utW1(B zNO6YFRAz`xHJ~q8oL~jSdI?Stq>G6lK_TH&rbi$}yFr$SixAzwrhpXL{(A0ApEvwl zsDALwg;8H%kG*#KtqG0?*#=Q=H%Kw7uOokj^MAp}A16WzaNXuff#cR%EU5VAOHUx= zJ)4UuEB5TU24ztB0%?r+$_t6XQX2Y2M_XafXK+b$lr<1~YA7ed6$OxnI0y0&=Soe2 zD$c*!2SCd~@pvgMunJt*?j~(_dz&SKf-sEMCsNF?2{<0gY+~yZb~9``g+Yj8X??<B zhE-7*v8%056qsSd7b2{H!k#2f#S9KmFa@+mnr}C<E~Kz3PVP11MF^yq!$9g~5hqeS zk}m-y6(8kRp{GBcK_UPrUx-?NNn`q?-SCxxQXgO~B(T6#59xGVWiLyJNR}acV=<>J zU4$38pt}>8i~UQhvgmALim@hE8qS4C8VkrpZVI7m7)M%Z?k>eNnTdHMD6YrO5Gqkn zVB3t9aRD|YhHbX(267aVQN%*<akwqKJA}|daT^=f%EFux*^HWYl4`?h*-T{p1+xA< zH40~a5w@=VLRoYlg@DpWZ?N+C!PZOdBJc&Fr>F$t!zvy~!z-L2$Kf<+vjuVQK}i7H zn-D*1n{p|;Ac26|XVjT9>;rx0_w<i|+HzjUrb-)H0OM3ybRnYQq_5I&gO!v`cSlF3 zPysv$W_?!$53&fuV$oYuwD(iWU}ZQ%9IA%EI<$j}GabdDiE)oQGdeo1f3Q;&pk2s< zjjtkrlA&N*5nXBMgORT^jIrXH)bt%qnTL+&2r@b|CD)_1eN<N)0pF4WN}$D3^bfR| zKDRae7}^du9}YyNc5*df#RKrqR2oJZ4c79Gqbz;5C`P`h67r>5jY6y@Y<I)~uw+;( z1S8ot5jsSbpi03F7r$6Ym7&csK0XI=$rjo_C||A}L31(l-f$`1#mdwzT9iVl(m~io zLXsb)m^FSK<qn3t=TaT61WZ!W%S8^kkjRK;>Od%l`XF_7g$g-R56;*TI}3NoFM>R( zv`jpVXa?7}e*v^|#Nykja2Z^OVOyeeQf#}Ctvi~Vin?U!+u^(QEwJo{I#Lr60we{6 z;Y&?%#`zNa&qkTD31_ndu=zd_#Q<f>EfXJ|Y0|Uagrs1{Yu=ZK1<^8wWhQ$1%CY$W z!Uw4zcFQZECum|h#pw>czjoNBEcy#N98+ClmcxVOz@tSrf4j11HNKb9%D@vHZR7Fd z#gKsVV>9|O7-~O<&?0lbL<<tqiQDe%j1qe}!jXB@-Hupp$j$>ThIa_42|s`xwS*Gb z!NO0-%imwb_fm25ZImht8QZqxgP~P>g!1_FQxY6VjTgn7HpOaf!j2iseuv@i4ZLD} zSZ-j&@UPYjJ=MOI`_;pCF+IlptCAjLS!y0;C^50oG|~tvo2?xKLEMRQ0P#SJr(pD2 zab3b9(x)u}VGe{ssEb6?7s%3Idwk5WR<O#rU2;EE765`$YRAw?bX_NbV3P9=h#MYK zKp2S1*#NZWM~J|klcjC8l?fmEqa>tqTP;O*File;B-{lr4C$h>=rRTwmLO@x#USZ{ zIv$ju4<baz*bMrYX;Oo&XnM2TF9K+y1{ib}QN<(LhxphC04<OmpTfC2Vk3->|M-qX z#}jW<CUn5V6U_^FGP-{oVj(b3{4gvrU<@!o7r+5`0tcQz9H10;Jg8CDuq{kNyd-?+ zL@7p?eUmFG#rY^N--eSNz-Y*>NJl=|lC<C5!z301sO2%CLOEKgd5IK6Oce*@m>?Tp ze~R@~vFqQDXXyXG41Efenat68<;7zeWL=lKC$s|m8uo~H4Kiw|L?&Z8#5dMR$_n6H z5l`^wJM44e8}JXf2NcesmzhwiPol6FK@x=vCSx}W4T#mgyE6*!x5d!9-o!-hQ1cns zyNq>-vG6)xB_M;L1fca$bU1D-XvZ*J{lQ46ZNbWVj1?Q(jP99ocEoIvAua?$l!Tr~ zP0Pf+b3uc)0PX#)%A#A5mRSIrTlLRqLS!KpG@Gu0O_-fAC<(bo>o1w-m6Qe=79%nL zUXQ7<EPcOtm2unI)Gn9)*=lcMwyO^Z0kCp^QUDR4vXN&Agm!R2dQd?ypQ6CvqahDH zh7nF<ME^{GNsC#-KL-)>#nQ=-7N<~2U@c8q^d~0EKej|C#*2W_S*T&A|F6oT#}QsZ zYxt2UQfX)(XYwS|Ne`4cr_lLIZW&PMfruhmm8Q9$5r<;l=adj#q$I@)<LpX9DkKap zaN%X5j3K&;uF>ANhM%F#sSrtgq4P25cg(QU*!r`FcC-GY2gzv+GdW-Sw@LjZRFn3f zaPvsvCzxWuM&s}w7IGB<*m+rtc0vSSs1D6mD!g;h+p2Gzw#j?2wH?Tz;)FP`cM~BV z&`oLRMvNVcg}{rsq9apiN_ZTfi=(4b0--lCo}yz@a1~7>mKn$_PjX0vL2W5EK78oL z^gyPGeA<x$W!YvRgbF-9qA0Ziz)>2srmL{EjU8_M;MBvLC|L*DPXKN3mWZ7@j~;JJ zDtt+aScgFDTC!~^9AAdW1qq)(LL!W%Vi?K-v?b#XkR_p;p+L>`+Q(QrNNE^rHD)8O z&z})oLe*dx00+D$IPWM7M^>rTwx0k38rg2ZT@gpBkW8IgeS}wQ7vdLWCcF?OIfRlV zp*$#|<QzD$JeAXxh7-zC`8`>Vc4~y##4jJSR^}rbPsWuO;;WVB0bgiGqP8OlemmO3 z4GXpViDf)smJx-;^7e+-^5tdYY_3btz?0#w!E+S97OOqQp8T_&2FiV>Q6+v)+DiBh zOqTKvPelMMSWE>1PiDbJQ=LIGEcqT&)amWKuptg5SP}@$;?>R2*)$!ytB+WrZK^CQ zfIfy2smC%MsCltcn@#Tx+Jpe3W+r}kKIn<yivN$jbAgYlxE_BtyTAg$yJ&={v5guv zN~+PM8VqUzA)ufvgzTaq*p||5q>8YMP?gusgY~*-TeaHyQ`^#C?N6(=)_|`_2oO+f z5p9e0g)MC-#s{s6p(6YLo|(Hh3841<>+k=mE!nyAo-^m1IdkUBnSQY>Hc;&Sprlc$ zv9im$=q=g)X<vhaYB0n<P?gzQ4n+eYGS4rFsrSd!`%-oad)u%ndvxEjkl#I0cB)8W zJ>+Ldukl8yq&T*6H<e^-8Z?z`*DeXX4p7M)sRSlywT#fh^6!F!6?vs66G*}gUMy=b zCWtsaMz+5jt>)9D5ag7Ro*bYQVX;ltd;6gsR{}Uew*n-XSNtjgfgv7xH1?Kk-gUc! zb-SX!c02zZNxR#)%lRY$=>P^YFAz*!nP$Ct_N^M@|4Ps7P+CTN&1Of}(re#(<4A8k zIQYi(eCZ*(*7j`sEnnitv&1T0x+jPKj6*B=OHyM4v7KN7lebqd3AtJZH_QSM6tF@p zglQz=d=%HSNS5^MJ;!3Np{|%O&E%|=xzH;9lVp*#_Y}{6C!&|waO@3@YLCp*{pnr5 z*8Q8*+Yd<9tm+3M#sEfSQ`qnUpj=5Z19bi<FuYkl_64jJ^9eBD_FF8DV^A$j$ZnHq zhkx_!x7!1QH^at@u&-M&PU>f-?RA0ra5%~mpRfK)1I`;!QHG2dQIE`kHpX=Pw^u-W zSajFb#)2&C5JPcPJ;03zcGv!wN4#e>#$aF`^hJN36<;EQYkX4HmyZBzp4$m?aw75p z%0d^koStMrE80p{bNawk9{^gDT6I9GCQa9%3ChTj=2`ToJ{XfG>$5vA6<v<d@Nv@3 zi9$k|jPfcj8}=BwpUyMMwv1&hfOkWpWda)i$dVu>1Yb@QnM~^{2$(%80l(2+Xs+=Y zraltO*D}$~m&-`Z72(W^MHlXJD@4U2O8^>%Rm6xHX%SkVOAS!ZLRw5Lezq%>2-HrF z-3`)V)pCN^p<x+O>u(Ro)|t3NiL*Bp^#YfhA8G)j<!UoLu~%|EJW5h*AQ{`Pv3bW= zq@%qvWmXyCM8Xr1vf6Yed38=#2Jx|v`~CU;(8LM;P>6p6C;CHQ<M(cUKe*5zI)Q)B z^KTp9LAY(!Aoo9C_8|YDL4nL?&u>2y>_1>oP=^NoOV_0TH1^RDFzfX_ZCZaLUPW{C zx*c-z#Bu}8<m5W%3{|301a)6xSgZ^ZK*x5OU{(-3*X%l~^?ttt-I4TBL0T<Ke5ema zS=yaA&Mh;AGGKWL<&q`BQj&RyNQQtaKCqhqo8r;fcwPVLy8fIIugaF&PQx!(n#!$~ z3t^TsWyh0G_3W_*Z$>_}T59}*x7YGAY(@9{Dtl8PBJbyv$iFFdYL0$=Snd~$T?;2j z``<zQ>Q4NCP810X(A^0oeO`Aa$6~r0_pk;@PxU4~Qm1a_o7FT!MIQ~<zct0|w~tzf z%q+GED1@TcigOKbD}sZUFe|M1R?A|bP?de%5p90}#F|%0pe};7ZoXOu^sJWWWW_6D zTPZs~*`ZZqDC(`pxxE*PXgIbR#b!i3@?{2$^AH#{+khfj)$j#wx9_FiB5^eFoNU%I zC*N1t9|R5GLk_^vpKf+iKV<g)dLKd{a|}Mt&%yVk>`ZhZ6Yvpj>5s{=mvk4-G+n4n z)pF^q!1=Y^5!Aa>I#9uJ(R^{&l{?<<9&R;@q5(^S+oM|Yo6Qf`ec^1pY(3^}k@9j; zIW$TxGh?D*(Far|)Tnj3d5p_Fs6wn^41@I!K=zzsYf~(zRN6VZ)p8ct!70^4QSX$B z>~lpr>cwHD1=EL!x)cEvI8xPekGY!k$(sGDNm%=tJ~qsd<u}8D`(%3ZkC}lq$fF|r zWs-^n$r<sFyCfq$w;B%FKVu3U7IjT=*ll`)Ui$?+4dNDSzgpc)KmVQA^kWBRiWOjZ zU<NV=2=5OCu@m|YG+P^um3SG?K1fDf)|gr<jcg}<x?un2dIo@73!j@``-#;9K6?NB zOs4&3U;HSyb!KY4toyRjWUTsD4zj@_eJ)fRC3y^9%IyvL#>0@8MT`9rRT5)Kt!5P1 zn9bp=gmt!-bE{^;2vB{1$J)7Lsy{Tl4*Ny^eIw!zt>xb{gd6x*NVuMV?-TwZ|IQ<< z_;(7pi@kt<$dDm{Aw&B09}pZki11+k<@~L@<p0NVdUeXvr|7v_7nL7XUuPO%R3)_# zLUC-T7B>GhTc#!--ypohYqbPU3CC8yD272VkWd3-#C@W2PmLbYd4n?PpLkfKwV<-I zEr>XSqfVVZfUNk{d~ASDv(vtX9O=7)WGZk@#n$<!U=ux3C{!EB$gdg+ae|1X`~3Vl zX>7(31I^Qik3Zvv_l2bSkX>Hjd?jmvwk{COpmZ!p*6iG<)pBi?yDXr|H|xV#&Q~IY zYX^6$&wmkY4j>@bswcjH$~??U9pQ;IqNA~pj(<?c6L|)a_4%=4Vl`xI)vYAi8^((} zLe>*Zkxs!#Mqpd3t|dueEAPnvUIQ2Ved6de#`r-ytAG%T=X5)3hn6)j`9yes5)Pa7 zvWr#SU<Q05M`MS6h2G_P+71B?#Hm`O)(m4N+<?6LWzQnfPJ9mzqM5bTAP1mW2IdCf z?EthWey-kOj4-P(J3KAkqgxY4=e437h>5P6N@mIhFU-c-b61)3mZ!8r4F#;I<n(57 zr<P+lgcT)lozXF?pKG9cO5nVYQUWu{Ar}8Jq6qefV`V6oqN@MrnGrV7o3#FSMqy#5 z^P*dgPp0$p=j(m?mubc9(_N)4{&75cU_X7WKRh`$Ls$QU&-w9xu_1IJYo^=~F6x0B z&Wn5ud(C?SyS%=<)1a~}WuG*M|HyQM4==WO`qe^ui+*+I%NhNu<{IpNX8<*!N3C9E z7j!9jiuZAB*EbX#FZxwEor-@>&sjUm7W2wE#YvjJWuwlykgR^9V_i*h9eNYd_7%l8 zfD7i(XA%n(QKO)CBK#_&Zw>i(QMw3N7Hg~eA}$;)z07Km%`SR-Ea&;NptGN}3a4QN zE+VsJ<#XnlN@TNXys~HcJC2-vaut({EEo1<(KaPC*!duh7=5VK@FKWqbfP>lB8`he z`IiLx90-cFL(k!&JIYbCU`F}nKc~}rWT^|X5v##?a2<NbyDqh@)V1|BouD!~H_>CO z!XzVBErZhA?0hQI>;ibn&5%)^LYMJXiU?B)*sA3uexg_COBAv<X!{W%Nv5&5Q!ch? zvXw^&ARBb*&<N_W*-Z3xV_{)Aqj<R}HkDey;F-eIf}LNd)TnGu7-Ks6E)(6gWE7sR z@6|POy!j9TtEG-H!Ctkp%czyK{==iEK8hF&HLlS$UQCS)ViZTIGMG`|!6<HG#%?9G z)_%($Wpq>3Eqi1@MM#blWiSFLwgWtSmrofN7i6)6_CBC9<f#PSz0}D<c2>)}aO^JK z>ds4KcsxFmdHM1mNpk<Ib!qDX$Flci%ThQ?dnR|+XbgEEQG7?r>k8TNOC4ikfW>Et zs~xQ4_^nP)G5aKKXLDnZ^=}`2B_?;HSOV+Rw`KrIzc#cPu+OwR0J%XoeVEm9x;}z2 zC*ATy-Oh+UdYMgG;Wc$?l-`NvViDu>8`R$98=%)hYMJ%-vr4m{fAPooyAsfdtFDuv zCo$#|az%X@QJ)7JV)OJ~>xt=t7`b}ii{qL)z0*z##Rv&^>;-}-?~!d%7on#7NEI0^ z6bLh@)2hjA>W{>h(LkN5rvbepZpg#Z%ri98XQV#&F5WUw*c_lQ*6k0Z{ezl~h+@>J z<i_o#r6P9wvLM!nYo*~5m1J@vvAcA`f4o=|nqe72VQY!5ty2}dg|td!lkpuP9ka<T zwA1h^xkb{uVX<54o_}ow1{jX*G;^3=rxvl?kp$c{iz;;I(cdj#(EDWX)?uPFV<K>} z8R2mduq$+kYd?^ppiW(-PZf|$@UlREAkxP4^jRET;dl(J_*e&I|77aZ^ktvxQkSNz zh~u|f=E41ND2hpkaBF&=oh;ESt1;V51AQ3I$D7n^1!O_&T?BT4gF5FTm$q{40s9P1 z{M97kuK)M3{(~Akr}6D6(vv{ry2YPWhffCaZ~P3Rtla911qi7D#9=MeKP!kJOgD<u zg%p;pgLxx3W9{IR#A^9d$-jy2zws<63v_;%wbiglD2J83PMtxsh8kX<Djnc)(gBHC z&Kj{y?LdZ?Yq{bf+i89pC4lq5R^s{2b(**G4Lm=ciHjfZEX-TZC0tybzjD-W`}f`U zrcl>$YJ4~|7`fQn`5G10sf~<=(LxQO(%t%@7MYLn`g)K*mS3zPJ&jJc{zwL?JKau6 zoi$emrL*EEwkPX1da}yxD>4-TT9YxWu2x;4+XQ=;Ox6gUTR*T?-4d0Kp!--dii<Xf za!I#-Xsuf2#hy@~)|qwJYSjp@j=m@T>hqH_qjbC}n@XHFWl?p<y?Va>Jr_5qBVc!b zh3n+q@%TXICD3{C5BH`$M!$A1AXOt6LdL&SLt!^jyBi7v4A_SPFa_R$GDXDdtNL>3 z2`QnFxDtsIbaH<S++Us7YLMdxr@7D|)Jb9WEPw+$oI52d)%;VoL-LqZxq9XPz3H_@ zM0Uz`I`uvBCEap~XVohgFb59^*|d3cu$4IGKsyNL%;Cs;49)DO-*UiGX*I0JjUBjB zq}DwuX@Slk6X7&h(@Mv<OUVP4TMakx8&>6R$8;({Dswxh>cPFW<0-<O(LBodJ4nR@ zBH*;yI}ROnsMYXY86zLZj5>zHH9i`)ES{Zeo{jD;b^mORNGVV(hO2q1-w*b3>;Ae6 zS&^<U%%?WUlGKt%XM^lOF@NeQT=qFfttLlOcZD7{eu?e6dU0X~1Y0TB+0AA#)x4V8 zrPwtTqn_MH<EEZGA@1F6l~&`6>>xY2My<aZ@(HBZ2)(QRY)~8}h0%F272;KuuY#>W znX2+0EvG7$ib|~C>iy|8Vtt{w`a_q+!l#@o&gZBauT!s+Y}i>jam<VCBrqaTE5J43 zWxMrEobia6i4#RJxiprIsp}2pm_%_q0iRIPF?%g+2Fr+}Jw7zGVx>eSCWh7IhjejX z<bE@8wc0!(1Co7S>yHpu7n5CuG~TaI;}1V<8vh@LsvNIyw^#UD;^?|@ml#zYclYl4 z)o$szQhE%7baufmE7WMOqJeNw1A{W+A|7fkHT7r!eAcby1ZvR>ah>Za=1C2i967+1 zo?DcOsQ;!O7BLrid(bfm8ow^Hm?(1#j{B*^3K|s%I=?4F&qBs>%Szm9#L;>=|0*Nu z8>Ui8*i3?+WByE}Oo5(XI)OVMl3*Q`;-&+CrIg_-H??LbG*s^kM`Z6XBaCJH?Sd!w z3;M`4`Rb_p9Z0VCLWy(K@#klz=p+v~!-?w!<<IHt83Z}p9b<nPBNAgI_AUq+RdpIX zaC57%k@+I2sC2jb!x{sT?NqKFJ}=W&zSq`0#Pw?Hz5f=dhUtL4p}>Xe_uM*eq7al@ z2`L<eawmLGD0eF*Q}^#AT}S|^3;l#3zDKKp0wiA8bxaRcmS?DPs(`3@wJ9cCQ`2Wu z?f&jw@sY$5d@qf25rK~~HB2L|o&>>b;2a9qSMtNbyZXvcWW)l8hSx|Gp?diTLiLHm z#a4A<*tCQ1gSi@YmVY3ur6*DP9#*X;5kUcy7U^B06a$r1^G;?lEcHy|26XI364>8` z=_P1K<AVX8yJX*FcF9H3k(Gp*kh0YE+L;T%@skM)BbOtvBGHPDs?*Yo(@;2yZreM= z3}#!8AUu{T+;LnkV@fp?%4r)|);t@83#%N{<JA4DHU35PTk~afvVl%ge@Rr`{hdrd zzwmvppKq{_B{@_VyOr6%GnU3L4Zmke>N?IH|51{OR<Ea38ZFd~e)BR7!`?}R3*ihJ zXLKzNwLlqc{o_R>a-`Fsod7bv;a-R4up5GJ3b3Zj#u^8GiM-_>2#Zaa8$ii%m!{^W zJI^H*KMwNY>pWdPc2l2_X?<l_oj4x!Gu6vy9-r>21WGuYkUys5Z&1NHmT!<%-CN`T z$s+oHs{c2JfG30VmKy&H#tIF^2)62fs!S7j(MMp*e&s#Eyr=xT8qfd2^4=bxr~FSp zw)|T02BjSG^vI{r69p^T!B4GoyZ+_e8D31}yF_XOCBkBBSxbDLa{fy*2d7)Dtd^y_ z^i8qv>QA~n<g-sIQoH^~=MgHEYvOgBuYHcpEWkvq`ZZD9IBqBmQpg(HprvDBYB=nv z?8){Z*;2x?`4eMF{aH_v>|LbNoSvvglUv_bEF$-vnWQC`%W9enwTseEnh`Z}SvdVu z{VHq97CuO9SvXp&7To3XyLfpW8AN&~^IVbz$oN?c#`bcDn99~kWt6BgB_3udSqyG$ zXGEPfMspKIj7YZ|U2gKN)xu3=4n6`u{?Vv!=KI@se#CssmNwUED13t+iSOB+{JK#x zZkhRzT0NSvbTh}y?HI-wQ58LNdpZ##FV9bWYUF()dM+I1G>PCj@@_3<2Aw9^|915^ zv9)3K5=GPV%G~EVw(}*P<@L?8-_s(lnWAbW4Z3);jW{Mj_D%pFL-pf&(ppGkW?baJ z{;elT96ac%-m3DdYBt$j?1-x6ne0pEnSJg@qDRxt40_;aeCiz;^cYF8gX2dKrjWr8 ziX3B#^x((zs5*j<vD^s2GYG<J^HrF~zZ5_A$G5dl(;;;k^xeZBWWnS#?q1zl!IGDV zfbtq|WAeJA>hf^{W09Hjkj8RJ%u3DR#XWIuwyv|9sdJjNbCPA^LQR%-bJt{IY&Ozp zSQY8=A<C4vp2hOH>`QfWiJ&^HZm;wkmt**C2qnkJJ_-l$l>m4(O^I->w**=sXeY+0 z!B5z1uv&myQB{D8yIW=>sdbIATldl%eDB+>%jgQm@F11cHzS;C(ozb;8lWXcYKt$% z!^^a;{;69EDebJ1G3d4(I*@v-@OEm5E#psJI2xWpO1W^B^7M~;JjI=+eyayp!cJs_ z`r<jr)N$E(%h{vZ+(e1<Wa^0e&bI}-<XB*u2qpHpU<sTU@PaJDH(W+C8J4qrgG|=H zh>^I6qW%A*nq~(K8_fl51Q~WN^AP{0X8DAQ^^D{lc&S`$6oYC48J%4b^$dfTvZ9@q z^^|a7QrmVHs!qL=DcG-ywU04m_0+d|<L6qU93$6hG!>`_G7=|Co8EH~)>w;c#H}V- zRyRQqVSz=0w}Kh!yDS;TcaYTJPUQ|+<4;o$NE*GqkKc&1U44sRTW$dJ%*l15nA%F2 zT5+XlruG`*YJ2v-Pzy5)MSPc*>eRNgsg2vPfyOr%m#g!=@^byclpjT$hZ<aYq=H&? zrf#%=YNk_7%4L5zHPfW@EX$4oBb20F`B_7&3#S@#noVwS>S6K-ip2|OyX2Pf@CT;l zf%Yde4f?pfB$oBH0TAfnbk*JvqQoM%1m0YPK*c`0fD*^m$pT#xo1r`Ld-_dwowdJY ztO?nha_jrYa)m8Qz9OBkRmL|URzhs7gqYq1$R?Ce4jo&QtLu?fdwf_qUUZR;E+_iZ zuq^TTvCEg07k_hQjk}kQP=7irGcR&^)xdQpalPPr%B^~0YSl|D2;xmYfG~6CI_OOp zpG$AA-7fSd$oH?MxBdC^U;Djw16@|%hTeMk`8uMUh729#5EL?DIzt47$A}c@5>bGt z9VS)iNfQh!fm@(}s5eLz5-W0SVUSVR_oSwo5_JvBT%EHE`YIHLt48xJxr<dyLP(HP z`4uWk$7f^b5ZXhog$Z@mNMau=+{;&1><us^UQmCgnZDym@}>`U^(}h(x{j{r-Y8h4 z`kC}AAP?Ru`mkJAA65HUMVMPWWnHg_?oMnFhP!-&K&ib>odagLP8yfaimInf5%nXf zW53SSn8t1;saI!ybF=BpZS~_#`l4RxxoV#2Oy^Z>qf@eq@u$os-C;DQNw)}$_egh! zA+)(<1o8K=9O#=bIt#RE4Q(h~M&Biu*~*e}T3CHSU|<MN6PqR?vtF94Kcx^^W9Vwh z3gyTN$fZ)PrbMb0<TrT*CCH2O&m8jF8z!cHT6i~cZlyPQ8COe)nT8{jQk^~*E02|H zVt-Z-Jw#C<BDbj2V%iWMP8%g*bsrgZvdcP%9WR2q>^`WpJgUwD3Q=d5D&|)(XZO<S zYS5YcPtnQspEpzR-Wh$S=-iw3q7;AuYAWx13lpFE*(T>xy>jNNcD|@y-yFMhUFSwJ z{<YNie=ol|Z@%msX!g(?<>*Z=qK`h*(yxN!S#!A@ZZRzyeG7QBTT)$t{*D`j09X?e z9OFjREnk<<pg!?Tw}@U&El2kUlHgGH0X~yWI&ur*43Rk^Mm9;jIWGL`@8hqPGhcNN z&GzuS>xt5W!CeGIe$~Hf(<+pZup&IltFd~nMTA8SwX|A2TE?<*FFLN+9y(*N<4440 zmh*_}{+gzA{on{3McP1qe*|W<e1r6%olVhN5h<fj%;v8(wma1%2Q>bDVeZ}@?X1!V zCpG%u1pAs?H3_`bM<aNkT_p!PIyRRI^+^t_%fAWy*SnqB!Z?b;^@C&g!WwaxW?)P5 zC`?~BYtvUm&iFaR<dRh$fykTYmyO!PFEJ{j3)Ze9V2y1{VHG`@sj6aYDpZ00+T_ej zwZBkG&JZc|Lq<-xP{MyC%y{o*h^+CBSU8HBtPRHJ4*Xw=^cqVe>IYin2xuugeL8d3 z&EV=M#R^VkL3o!4c=QQ!B%G_>;7gPBOrCtY#4C52>hQ|dnsSesaudu#@>9Mds#+J2 zN1x22ybqL-YLN9W5)6QRu)aTkbJT_4AG_SX#d@Wmu1RUXbj*eV<{e0g%W&?X$fT<( zWK=<rcSuCNS1KPYb#!vmeggD<vjfrLA1B~-!li$jP6Z0XLXz|-l%5w*%XAAUZ<dI- z9^#CtpA$e@*MpZ=)ecImQoocgq4dErNP0vsdwCAo?)<FoxmE<xFv_40S(0sh!g)RH zI{@{pEZO2jb1RH`n|1TL<m8^wnD>RH{nfgf-YKRYnF;z3lwZkrlg`%zbOVp+OqIYv z9b>8i&rVU_ECJ8TL9o~Z5Q9OPByphHu?A(9^QBSkqV}-bq1VnpG9b(28`!)vav7(b z(&wtJS_lmt3`Bhf+}Tbwy<)Ugkjtj2sKC5bBcZ6HaZ{aqouC;94%oWuE?}_x5x}Hg zy}u)CjI8oVPyo4XIF^SZkI9-_t*hW2KXJ+`2-d4F63mo8Wxw)SZu!6`lwVs0ELGR_ zJ^UM?Kq?(2@M1Z_6^B+P;Me>ujVvK>{!n@X5|qG*$~9juYfrb_3b&<DkRs|ego<R7 z8xxY4lbD-y%S!U3TN?CVNmbHMp3!K!i4VPwSvR*iZPZ;Rj}N_gqrkFk|3U8ugWjJS z9-M4yVyrKWO$A@lEpLDyYQibt%JFVYNS4Nt#H3qxN#YC^q;$)>5}d4qa;~asbWn5{ zszL|F3RIQoU_gS$>tIlVN9tgX1TBK-OPXGyAgUL2*c8Fb>W-#dQnLbo6$9%%xXgTe z<LlMN{n`SAXO%y`4KP)nHNBAEkb0XXkVU08cy;;({LN99vIRRhzs#zald+Jx|G@H^ zwdB+bp@q~92d3-#v+5`5^ea9heFCXDYKK<M^sojE30+=f=Nz@}VCjA5ztWxUWrAuG zikX!vH)gfOj3mZjqng1oYtU0o*1_u~LyZpJD8ULH6f{*OI;he2cpbc5Vvp3pyCi54 zl=+{>ho1kiJO6hR@%PPt=X<HWy~Se9ikAyP!6S3rhlG|1O81`C9wajPg$#S=7rg(t z`~t1s`GtBuF2BILcYdM2kH`<hFmtvpezvnp1`=keE1axu1&DfuO&sse(OM*ejwZ<> z|8)&k&16aH2pA`;N(fF*B{Dj<lG@&tNW5C0E0LgE$!J}PM3_o)O(in_ZY78Gu0-R- zDY_B~x|Mv01dwc!2vbR(sYI~Btz?Uq5fB(;I2ubjPm|$D(5+;xu0$fJM6NGpF`6a= z`}kooIl0l;%S+HF32bs=V(DoR8bzLpjL@;kOp#OVRt>E933jU<aQtYyRd+hhHLj7m z>6xtHslZtF$LV%%T^z8!^kB|ECnUS;T=h%f>FNPEkOv(4Hcm9XFsQyqQqq=jq!$L% z&3vUF6cD8zmA^?_PwE^UEkjE^D1VKwbTvt;)mjqcdfTW<(k1B!rBwPssWmD+sFZ)I zn(X$561j%K5&x{|<7fW$ATjIdw;K;!PsI|nx?{isM&~reX&DqbJl!HZf<A0zIyuVH zK7Ts~gvsPip4A`<PIm&W2J?uEo<vJO;$pXI46+(z6C~?3ORzlgA-W;f?6X+nVDU(i z3-ra!99fIUfO*L#;aX(Ql^CZ8NSQJZh&CM<X(a8tVrxEk28A(@Nj3>vEZz37ENS$7 z?31&cwv144T+*!D+C3;Nr+k*I=0n`re<UUuf1D#4^nDe?mV6#MNBI?^Q}XamZbsP9 zJp4{AA3}pxgWTfSf4~~aS|n$>MKk&+`Q@}M7b8D$H`Z{ilv;HSIm8u(XuQk>M$*rU zYB`8uSD||Qc;wUvL{1%_Ay4%hadolR=~U-M2ee$5Zds-qm1$M#RJT!SP_}*MAjGJ~ z)2D%{c}CW%%}kEzvGiW8k-~_P*saGGMAdjc?R5igvwt(dzdj}{w{`ms4`J(FqE0zM zV+UavR^nJy=5_sIuj?lehlnkfid~iLYjdbmpQ;zr6<*cd3G5NNsUx=w{cmAr@Ke1S zb`t05>>}!v6;gnEhYx_8wd#NPi@PoE!cX?ix$!z*Rl~Z(p4e<kk9bmdb#k5hJ$(R+ zyGE+7d-cmLGo7v)`qux<^1ax`swvdVk4Sy?27T_N&XuMZE9_Oa(FX`O|479A8|!lS zKMbK(mc>x%iy$=Umy<zcjhJgcBZJb2{H$Qeew2FvBCjI9Mr6UMJ1LQ=O(+^X5*Fg( z{A9@r2Jt>Xd=d6j{iG=mg^ma4y-}!0bsa~3a6bg@7pr%UW%^eN?w{aI&+mwHpZZ1Z zQL;?We%Ddd-G=<7QK=9u%Iz901dl?OMAc0s)v8teWx{e9E4Lm$akKU}z+AX;Fug`Y zY>i$^%4yTUHu=6l%1zS@B)=z3j5O10bnHud-9;H<HEtv}Vv0Cx?iPyNXc8+n&Aj$h z_53k_XS;ysDi1uHh=V%Bn@at-s0uCB@X;4ynio+6%fz|qHS-8XWt9lB{hF>EuOeYd zh77JX6$z7(iaM5f6=lYt$2VJdh-wnKs@kh&1=Vz3h7_RH3$xnQNnX-?uZ5#b3r$4S zpBhzP>}la|fc#%pq^~^RXFqp!0f6hXpZhW~?tboi7BqK1w_FGHer}-->iyhhI;i(^ zm+GM2&(-Om-p`${gL*%AF2UaWxiQs(BLCd|+^hQ3@DulQM&1~4?Sb;ff%|ut+an8H z(s#FBia6PKw=S^FEH8$e=<UuFG9I{F&#d~NfosWbU3Tv%2w3rta%29oxt3gg=ets4 zwpkvP^C@Pb&;D&OG49^rc2+WX|MoQ<)N5&z4r(I3S_d`voTr0&Kws2BE!SMEgTe{b zB!a#7Z?)QTh4~hW{`>ZCwZd?6#Iolm1SjWC5z~YzH}O>$p;1lgT=!6~RKfdfQ6aES zCHp(}4uZ*MksKX+rw$8yaCjw3;zcNNY}x!Lo28qMEt^1?$MCS4b)w*FAlWQaDbmk# z48yTy*Jm=ElgS_)LNfeBXAqh(8II0m5U@&yujvdzNn|)Ito8yj-Gl&}sJLSbZJESZ zGl>FzqN0v1)MgUbXA)&Xh&s!$h3HJ;_cMtyFGL;f*g~9yjt{GqnM9dC_}QV4`cXNj z)`&3m_*^>J^<~GFt*2zKze3|uSe1Y@0?}s4W-?QDa4I&h>$B$5v1NZNqZF&T`UP&m z_m6f9uGY<2jdHM-ip3uli+i=_C|LVkSbLq}#&7eDMHC9~E(u+2F!>C%QNFG*Uu&c$ z^&l~ZL#to1n5NA#^pp;2EMBLB8jBwyXm6-YuhEG71D&7|`F0)Di2OAj)QH?f5S(h3 z)k72!*Xa{H(WYNAYkIq5iv#wVmn56-CEYN7Tqu0J1BJhwl>a3;UH-S|K>qi?v)_6W z#wo&3pZ(TzOhe!O)=|v){!*LFSYMv2r*jj9KWV@9;MIon_T6v&mmB+!oCqV83T#8m zJAxP>re+4PAQZ2n@(ymWam$j^>^%hwhCBVA+hK3^!MFzS)E#ft`I8d@)7v$c?H~F6 z3sPi&)8D#hbFx2@-obT6G7ha6kVPUV%I(!~s#W^H1&f~cm*$!32J5Dt+tKKcQ>7qv zYSoS$GEY_u7Yn$82ID`jwWpsp^7vB;y}y)U=as%_wG6n;QQ}zjwzeIiw%_FqmXB;c zaBD!wf1CaZ+-9v_pVzh{Z}98l6ntDi`3_OS{qBF8v)TC*2?MA$pTuW^;>YPvgEtR; zizWuYKsuK)Lget3zNwpfEl=J@a+{J6P03GBQ%~xqdzzB|^dJ1>Z5(dqIg)jN^CuaF zw04_r4o6@in(Q3B&uMp_9I^4JpW}`tbXB0@<%NS9w_J11(m><7`Q;UVo_`{7T?>zC z+_Lo0Yluta*n84TbFS%UcQ0GeZ|yQ<N7+>2dUDG(zgs%s>}5>J!k36zE1`di@Gkfu z&RoP}$wPC6d=_#Gc7a$)vKFy{8F`~KDOi7A>|OYB`pTdhKMa0&zWKZ=s7CS`RWGxF zm4f};f^z43b9!NsdUrlGZI_x}jL&lYGdp9moC&;;GM;rCB~fZ|kVp68L(*4<(r2o% z!-Z6X^;1j>XR7Uo(_XFlS`buQ_^ef5(d`wfo89UQFlf6wy|6?z{I%`<g8oZ;(=+YG zq`etldl%{UKD1?gCF=Oz?Kw3C&V@xzq{L{(I%+tTKyOyVu;d3iksqx_>8QyyUwP&y z-~1GspJMYP$4C??H$S7yPo@0KO4bx4FDyz%O2CefChUJClj>EMmM862L5{5Wq=;I6 z1#{Y@ab;eCntNr>SCN|8>#IbC`Km8Buxyb6YEZ6#JHJC0m!bUy+R{k<a9u@xwQ8fd zC^>nUHF2`qav1VLehH`Mc{&5W)j97rx9)P)8b0(%=FE02FecaN9{ge+SFUOb)X(&9 zk=n?wb74WUrlfI8{7`#IQC2($VJB!Fw42#JSzSjC!Q~bDw?uuF-})1EixD-_w9?V6 z!NY*Wxz}GeMS4BRiOzwi<XUT9b#9TWtTpFnr>fEw+Y_fdO*4paR$a>9<mge!^D9jj zXLOl!etFWw>pXLkU(FWQk3S#^p4_)!S@QhyOu<pk`IQGN*lX55I*2wQ$om>$IW7n! zS4!uSH%jN+VZ#k`mdlN>r3>X<NPS#F5%<`=?^(CBLjHjLRi0cP=HRqZ-g^or&BBt- zPM;s(n7%JOrCEECYf|9gEunXjzFGAkB!3@!foi5nRe;4AdmC&_$rKhupNR5A>bsQR z9J_TF!{P`*%^V7<JqD`9(B)(qYzq_DODFfO%Vk9r!H^MGvUB?!%#bZ^yWJ|9xGY|? zstMo<q*7E6Fn?>+Lof_kjAy{T`j4DZcxk*mqJE_%jzGosh36<0%Cw3#tJ~_YiKEr^ z)F{?Ug{D=!e`K0{9Uf(x6&t6lx_H8F6~mpZ_}p~MGy-bqp+XsSA%3wNlV&Jk^$ves z9qi)K>N2nK3%$lK>D%}ZzM_ZBp~ofDGtFP-HedRtvuX#>1D4aG&YqP%09ptHmY1i~ zJkOrDymgu|N+1)@*;M7*x9rKZ-Im=o#OdGG9b8%EOHInYZWxHXa%gJNAj;-DO)?4; z(ny9@!*!HpSEl<tSThye8)PTgl}j%5sXTXxi>uUktqc_Bc>}qLIG}ha%?lJ?nVT8N zte%m42ks?+EKSRk1(UkFj<UP^C;FupWp@oNO+PHX$D@K(y{9X?RGWt}@45aCyLFU6 zn=Y53bSy$@D38~oNhqM5Z)%hf#nDu}JZ8Fez1OV|57FHc*Cf)daR=+xAh%n!ypR39 zoX&u~vKhmc|NWY4WNV#Rh`H8$U|sK%O9fc2`a5`QTHC%Ah4G-N&q@GeqDnQ=qCxCC zy<S{pdSPxsM^xKo2LVn4Oi+MB?M3=^ts>k=iA61THVnB;hK=;lU*DE5qA%EN71VLK z;=>tEy>D{F$r3u?&3fOp7e>?!JyH>g(0>ofbm=~?OFN0{MQf*+E-_hh;O5fXAE9XJ zk_(0ST%Zu^1BH)(!E&#`7O%kteH(nd{va?|<~HcV-G<XtfD{cY!?#bRe`U7$CY-%; zw9jcel*Hud>^V-;FhX;ZqvZw5B6+%ZbP)e_g+(hz4|G<&MDwgdN2ObK5K4{yFj7Ax z%z7p}Pn5jR!d@sg!zTX_A*WPRh}y#H^Uxs)#Sk@To-yf0Ui?U)lg!ovdImy2*UW-R z15u|Wn}oSh?9$rF9ZhctqvOADBzZ^op>%dtK)T$tSHgE>5mpPnEHKEWTFO_8ZfdDp z-$$<%|4I4#A)v+cbRwYk=sg#{JZ8_wHiu_rqcOQOW`v`#T0IzM&>fW{CG}rsuAJ?n zCL00*iGobtCzdrXH<pEYXFVdt4w+rcY1%2j;{vHB+1**8rp;hO*cv)6_>Q%tX*(Zt ztY41H(<aX23an5iM%?4L_*7ZIZ)Ni8pcP%$(Il10e;v9y30XsRO%&FZs0&XKd&Hl| z1dl>9A@<W_kC06dAkAjtje$`9qnVhfdWmm5wxF2+^P%)v(;2it;&*y@!beBwmC&o< zf24-?o*KTTYdFW$Fe~#gW$ccg9E)_0d~&G8Qn*|e`MWad>N4Uy#sg@})lcR~cZ%Ka z{QcAWSJwc^21RTLvSnKoOg$)*6;Y3U5gsrA4v@qv33NS<fK00u8W*&N_Gco;<uMU8 zTv=fXhuUVQnZ=>@E<NevDhXx{p{O-$rc>1~X%7-s<x~xvle7;Zs9DKhu>H{e;}tQv z`zSK4*&aEuLgxnIk=B}_&aW%F65{MMRfRr79M!ADkvwvqA15<NijNk_Nd|je=o3AX z8u{5U+|(UXFzS4eW@}QX#S;;=GzmC^8BG413Lcb@b>D6k#O5t%A&c~t1?q&J?5~i( z;}Q-0&>6o}cJgfC>+Xq<#oBNo{#Rn#NcM2=lmW68-iDrob<L@8ZV3QPYmMc!RcuZ4 z!-aL%u*!<9R-+)_oRO3A(O(m?J3>OENrKe+ftH>??D)xiHGW>|lCS(!Q;^!ij^AE~ zpsK!em87syS+u0<2wn<i^0h>lxFXr4n9ii8LDTaKGi$5Wcp6f9s#QSbSk@ZfoMcs@ z2~-l~H4t}-)fN4rgs@P;Ab_Jss6I!WM+p&i&ljXg%KXc9ooi*ktgfbgd8-aHOAdHP z-XT<w7#dMmGEW*5R)c=hWNu+Ka=;+_!{PCM_J_j~gAuf+#w+Ce4AtC^aW0Z^e#sl> zV&Zy@vt7@D=05toyBHJfN<B*=trSMo6Plgz5g+c<<Z01LP;O-xOE~VQ`5QqFtVRVu z6Itp4ElEiB(RQm$RaRo8!QJ${61CxTeX%UW)-(2vOy7h@ZVm{R&DDY=w#GN>C79}# z-WE~A^qffRjrFuUQlkQo%C|lSaO89}Q4#5AS|@1Ff2#3P7gS4+1f{;BaR_9yZkXUI zqF{6FCckvuZrw?D504+__B%ePqbVO$lK<@1X_6&gZ88muS7Z=Y%SHCOVp@13F71J| z*2<^Qns?~#N$HLz;X6`6=T^uHt;+5;p8fcuTw!gJMtKvo;d~@pyE`{=IJ0Oqc99w8 zG9KD#EYm56TaCYz$W`xBz`shEnxk7dTehNBGjP)f5_@SHC#v>3sBV`IFZRht<8S$J znzRh2&5CwVAi}FT^@pd=z$O!EHQ%`-2eF^++L1={?A&@cP4YbmrdP>o%R!E_QIwb+ z;aH%O@@esaFOSDI{+972TW84M`((Ij4LrM5K-dpQStJM}Sj4ZLo^3UZB!FVBy7O^v z@#tr8&|+%{9C1*{-9k3I8_-N;9M}SA;Z)<o7(Fn<dqE0eONqzKB<9S2P#ZgO&I`QM zZ3YK;rX-Xbu^NRbsf8JYwN@TZmm;c2i~fRgklXh%IAk@-QUAeuw!0||(0J|SU647$ zbsPV{M+Bl^Oj+s>u-MsEZ$;FQY^ZNwM5TSQfy<Ru)+IZ2*q1!YzJ!k8uSUHM?PZ8g z<JCfHi(lDwz4{U54P}3k(HjnSCvi}AtrW)UrgNs$*PF8K3yZQve<OA+#qH|LULErK zjj3b0spB@OV^BnW|G+wURC|s~?8(+k$)}F->bcCT=P=@;vFl+ysb&QX!u9wiic;Ia z%Zqx*A#+cu8j@8n==G_nR|hv|Wd^yxtN0P(802mMQGaSg1rF$-`np%@6t7f+DfKf- zbrwP|>MLHRO=RkPO}zbRQnc5-VR!qj=0>ve3ftN>IFGONGQaE9c)F=kHj$m%#Ibd& zV0Kn~gxxw%2ab)XZJA{&e)z18CP}BbycU(2fj^|P-B|=J+!=U*I0h(gt~wV}v0CqC zdY$53FSx)5P6xwAw`$=X5#`S?%s3A`4^PlHxy6))8P`|5N;~P6nfqC~<@(v3*)+@M z7EckvoRV_*fVrSBbM)R~1_o!$a5S(<yKyXTujsbMbvsSMnEXvbZc#Duo~lmQr&BrX z+@@y52WJ+AX<ZYYCRar+`f;38XvU_?N5d)~_#zvaW__(v>xd4s_|t(SJDP;&?_x0Q z^GNII5S(gSvV5(~K?c)%0jhLePfiz*F2rtp_91^L^KUodzglqpPl5lF5ZKLr!zW5w z_8X7LDiR+zCp{qb6FD|?u9Ju<>@KQ8>@KPT>;#>vyku35vqDmcs|<Bi>SGUe%`DBp z$wD*-itWw{(O;x~B7dC=rEGFsS#najDLZRUx-wgG{+0T4*?&ajV$@aBWK|JiaCf{| zY?Qh1@TWdfJI2wAKFDTG%h!vXc}{C48t0E|QdC^a_heOaHg~!jOYzuhksvt;aQVcU z#CZ}V&E~5m^u#PR?R@7-59_sSw7iZ=Efx}+7gq6$BwOA=blANShtdK15cCC48h_yJ zFs)Djx7NRl%pOeD<Z@Cb{Hdd<*cC`Sno7J-nHMT|L*b65QC_4hi1J@Y(|9j5(F=v$ zkQ%~fAbo}!HkG@9O~p)*dn{L95LTxmPJnS}B2ZIIr9|e43+dwy3V=5shXuW7q;FW} zXZfO_$lLMboN!L*md0)I;r%Akye02d*yXVKDtlc?#gp^j;c!E<;*XhgJ>Sd9C~h(d z_AvheY_x*~G?MgnEX#v}grldH%P7$e20AC9r|8=;_e;uhoBUzPnT?0%{hK!F&g2}r zec19g>9;*HD;})0+e#|d&wr<4{ZZ@Q-`-Qo<R4j8$UO*&)$?mF$<2xn0`}KkqCsgd z31uzR-&6FrnGTtUoaqt~{AgIq_zllkCezf@aArI`>2elzV7gqjtU}!#52XT?_BCyV zS@He`==&cn=^8b>p|9l15<q%Dbx)i5kmdC=g1_;6%*WzG<xl^$bC(VXwXe-OEy&-! zaE11@-SXG%srmWj@^9#pJM`bJ2QRPt_w>Pr`}A7b;Hl}LaOQlgp-_73G!#mK(k;$S zg<A>e`{gf5%!_hZLGn&M<g&S>5><&KLhPq`x~mLaD`Kp2!MlW%;wXFSN%n`q`R6+u zt>_keN4FK-=AQ3cp}=)>tbLoUQ1x{oyDdm~D}Lw|zfW34ZF8&z+a->49S%r%j<w{e z(ru;bik~g0a5j!;<1A<X3Gj*X3+CMD&t2ueW>tXGAv7sJo4-rEI?+K=b1ODt^1{J~ zKYwK^Fq{X{n>LWbOdlsR{n#e0;X!ob+DKHKP*&rVLCSU($~#XVbuJeoapZkc(}LW3 zObXSFnjOdnqu~M4xJ$02nHLj-8@FhOQLhY=>hyUVc8I{qJ#tIkq0g*%`XRo+J!-pY zcQ$fcfIemp-&PP4Rtxzn`lX;g;Yu$qRj(sV$HJgeY==nIxrEe9#Cc0gM4h0CNwzSZ z)9HfSv93?Mfs{Tn!}y)kC#iO1xz*4~@3?uPH_#(jiId*M(vhp=nnnC8I1CYp4NrW5 zO<^%}jn68dzV?gD1aZtgJfiY6xpL>;TD4k6eGN}QEG$)Ld!0otbvt`%-_9<cEQGE* zdmpWIG)d$9U)O=EWIJK@*)0NF+MmiP2%)fgQm=~8uhk$X){Z`_;5@6?xa67|Rw=y+ z)$=18E|66yH>>N53|-C(x5RHZhmlW+bnmrM<+FDT7||_lO%5kp-=H;hNl#<H(RoS5 zRhBxrr->(t&olvMg%FJjoI~ZUv8Sbb7s?X@PG!m6KC3}o65JicrMgeQGjPpd?SbEF z{GMd2iGk%-gMRdc14gX@u)70RgZQ_VJyydt5@=mbr%9HpGE>x7fN5AA@xCCDoOoJ| zXA<w8dKMvgXxy@rhY_pp{!<2ngozsr`WA6ukZ3?VA7WpwY%f!xmnmT~WljK}nB>je zyL3i{y&@>|-Fip&EpmNNkv56|uR_3<C2t5n&F%@uX%kbeGShRgFY12WotHCHRePC} z$s<&4@``}k8kKg1bC*JgweD`4d1hUuLc2Xb%~V&q48iV@n-7H*8|VM1bGB>@fB47D z@Uhv<>TIEr(k=QdSDv*k>nf1*+(C4$3^-(QsQY5iq3#Rl?8@{xNeZ_^6epYJfMNsM zgi#P`9ij>{gL;rGpo*9e<fm>ge4bC|oQM7VEKiH(iM-kbh~r{|Av_2YOoTFsF+d|m zqQD?UT#iN2vvmi=X}do@&_#m8v6-X%BkU!YW^-8;=SRTM?mj$z$m7Fh5Ch#PM@5pC z?Nz~x1%ezI<s{CwTeV!2C_{M*Lpwf;eLiXCRrF8eo52V@XQP?OT4I?dQTp>`Rd=(< zmjm+x_jDV!kmUrH%h6O(U23JAIw!C0wyFiN)6`cqrE7}4km5Yil*ME6(VkeYwi8>Y zVs+BJppZ7#ljJb6Oq?|U<2to=hNNkt<_t#C#xwE5IY-W&O!9BFT%nU?+fTCicqoS$ z3zK8SKSBZhBW9HU$)w-EH8~-aIhZF$d|YZwHyX(SddRdN9|~6}ty5z%jpDkx{_PC< ztfqZKJu`@ddQyP8^D5MnyiKZBXe`w|nJ7IOlY_&*kC|kwAcXRf8<^zbGRcR^BoE0@ zdgD*2-JNKw;Ro`;Wa9-+raCduP9JV;$2m&xxNQoc*r#btgZl<y2L6cp8f;8^YIFRo zk)OwP3j*Q@B_>Ykmhpt~tsv*gA*Y+wqIDuMC^XJWMbnLcP6UqI+7&3>_Wt__fG3Xl zGYQ93d}xjPkjc)ELWt`8h&MHIKH#g+Pe|pv2k*iY6Qd|4KF*55%>0`g3pIqY$*<4k zSx<_wPSEp!NrI?X^$1>Lylcb!sYjo|;6BjnjV>#u<WyNnY)#lhoDIa*sf%T=$Fa1% zF<($%MB8YvfO!DHlY{N{60AV;T|R+4Q&8~>YXwuC7RWLro)EJd<&tO$pL<L;sBzqQ zX+a3lO1(@<M6I15F|6EHV>5Zw`EO?MBM<cN<Xwp@b%q!BGM}AeB<@%*?oo+5RpJiu z;&w?Krp#ID&u?Vv>nHVbnv|t}@5S9K`Q8D))HW~fYZCXW;2ic9*Xy2RSW!8<mu<!I z5tY@`@1INguY2W>m3HnVuJp~3MyRryUSxt&+B86TH0(^=MhZLAlUb{tzR-hwL|UGT z?Zf&J)hvUSy)InQ##6CGS3GMqpULlnVNBzblWW!MdIzkh@zca-Y&2>hRHi+C4rD!k zGOqB}_vHI-FI1T*s4@<c?TsqSB?IMs12k6Ds*;|*{gAX;b+0C8nX-mkiLhH`auGG; z{$8y*0W>zI7W997q`sf6`k}{@Jlg0YeN{JB7h54^dqV+>`rpK|&&;swQ%qA17zQ0j zR#q3vLp;afO5bhLM-Sa55tC}wFD}U7TZ4!kz_+a*5}GWU9NJrr-;hYN0E|tJ+skSQ zFnB7r#4pZ2a+5y0El*^)3U_K(oW-I@N}-6u%-blpaCGvN<SK3RaZ4|ok5yU1B_itD zang%iBud#lh{h1ZkEV&@I!X2!?P?6{*NCZN0NYi|&S0oI#fzLLk>^O0ddroxx_+uc zUh3y1wLqmiGj&`j5te$(i#Ue}!+UoS*Gu+2S$8a-gYXiJi;u$7<3x^ZtA$d3t??jW zZ_4KtyTscf9*<(N>$3~{&&Pit@E-{LEf9dqe60QvH8J<|N_Q`RLbMM0*twtfyM#?j z=GE@e#==96ydQ^-S!O~o!%$fL49=n@!uY2>`-{q;f1bSfnS-ZAoeV=ybUNP@{-c#^ zM{|b88HcNXuovweo*3jWsWK|IU9&#Pq1b*vSQ~<|s-wnu_f_P<jzZ$HxP_Bh2J$kJ zyG3FM&TXELOUQ#DQa;OmVl&;tBq6G<sP-87o5TUXB9^>CJRgopLieylh)py)!K39p z@rKnDQg82sA1;!u|B(opo!_REKH6<2(P`d=Sq~Lliw2}Db;BEcmA;6I`y}ME5@+j( zPG>!W+fmo~#;gpSRAsV{PwG<6R{Jeq;?>e^6hArx-|Kv-^L#5ChD$}GE50eU&+n3@ zgiQTAvW7{UJQE4)PZ|X|r=y{E{A+1>Ugm-aF&@_3m=CNV#^vd2*0SubOtZDJ8g}!S zI!d_sDgwnf#rUYlzUF?JNLH%+j&WKU&NcYsqiVZh;#9Kg5h<>7$^LN(U#1G4R(>;n zY-)6Ys8o-vVZNPbD&Cv_$BLgNaypu&R{5{%!Bqajw%-Q)zqX%{!DTHx!M-{$EMCxS zIuF>Pzs#~juEXOY`|2Q?%#LQy)ZvL~GTqD{l~|3hlX3UBA~xdBu)lP84sarm#Bau4 z0Wm`C6^7e;h9wRaJ&By|AsYh^*)}_+@;GV3r==8lHFWu(MH`YBqu&MrFAk4aCC^m9 z`%MNDva#7S3*oPbV<CK(UephYs$(hzy?V~EL+uo{8ZV@m&V*e5gpe~P=-NO`2Af0} zI*;Fs4aC_xe5Fs@K$P&|G>ZhpOdg(Ivx897*g%|_v4OZjY#^AfLX=;}8s}}!%Dd@| z8+QmZozJ~1$sy>lQS2c$8GDE*UOrGEvacgk2)l^*K=PE^`z}rtB-e;>M8}u{0dHEv z+kV2eju1J4jFy>qvRe(}+>~n|Lm5xww*}T1Su}iI2LS8O^bqhSAQAg!qm|2KSwcCr z>a`45r+HvqMjT)@C+AW1<T?9;m1*|H&(VZ<8U4wyg5dH$2dMno!j3Tj#v8%zW@Gly zaH!-37@YyJ&;V%?Go2d*5%tA5XF+g88*kf=+2xGM^^Xbh;>~iQM1KeGyI_jsTfiPB z=cENe-x?_+*q9jL0?FWWzyL*>uvXkJo0_WwxjZdNvu=j@pNp#NGty*Ys&iG0r-sx| zAlVG9ieSF7RxqLAeE!<|23rkP1l&RNYN3&O()JTtvuZV*!N5C<i2?C5mI1jmjAcOg zul+o?^Y+*b?`!-qd86u*voaA4Vxz>~E0$gm<dGo_ZoLKE>;lXkW#`j8Askgv7_#1e zfjLF-Dwt(rl>LM`ub-eEXB%WV=3R8#(8>M8QU7cqlD(t$pH1PshY6?>LtMUKHUBp~ z0*=M(llw8Eq>r}HNbpKA38mZYc2S1sITN}^tY@cFv)S?c#{?#eZZscsFH&DZ;Y0Z% zX3U4=jgVaqD-POMcV{Ke>#B5`dmZQxcMGd2sCQ-ZSoWmANfWw#gLR4F9nG?W${|As z?F(k<mBty<4J`zv=8DaUKn>el3g-Erg}W3DmmVfU74Iz&5-Y>taK%JqU(}P0FUWpP z5b<iPIh6BC24eF)h+Rt@Bp@zI1ZW)<`vXnYd8Hb>QsYc1xz8@8zIH$<ds2^GO{iTB z_3D`H5ue}GVQh1v>VgC6aMy<98qx5oXI{>9zRIg&9dQw3Qq!b>7bZ1P6_AQ(KEqb@ z+jr?T)xcG)JYR<A8Pw3TtGsGY^{V|calph_{6y7*8h?9pTUF(iI@~K&YD$SgjlksE z14>01kW8vN^gKDG7Tc$xQijt<Kfi3bJlm&Gdtc6?w!V}Z{Zg;N^~BN5<7Da>cg_I~ zs&9Fv`m^R361m=#(r?Dm&0mh(f5JPO7f~aKBW5|qUIaKz@~ZlS*MTZimDU+km2*H< z>IkpY%arQ;s@NIz^Wwha)%5<0dMJ%F+Bruu?I6Ms_j@2+=k)@%r@goz5ZAR)%TS5q zD&9+c+Ayt9e3;9o5<{ZOUj>w>7V;{ETvO4)Oh|7?wJ_6%t1?P$vEzXqn;0XQ^o-wY z{1T4}s!Xqq&Yba=?+?oLFZe^5e_g-$kNwPkV)uVO|4kua-ZLJ22KynDExE2`zg#Gh zy`9}^_Br@)Zaz~`UiJW2Ik!lxKGt!xoqcMw9PErxvP5BDhn-yi<bBVR$7zzk{`Eb# zMw0p_iMgDDh<S#3?N^Y0Kz2iaph3g9o+A!+mpP$2`m>taAW+y8BpqzWHczCeU&z*y zB{8?+$@s}MUhGR8hiEl<ihAw?mR*hsSgYL@$;nkV-5(UHY*jhMqj<sH!FVAZ4vnPm zT&wb4u&;P^VNPn59>lB8vt60+vlSoAKhbxGG(X}4$HxQR8Uo2|S}UP+&n`-ODQE2? zxUReK47KN%nQ_W8Z^qe0T(5C{wyZB#339u1Ej45%hU})NL7+N=Hz@OEnXh<if%!Uw z?Z`MSk8Ax{>6>-w!vk3ZIitYWgw;??V|1->L<a_cvLuNQ?OYC6^8`?8Fpw4)Q9Y8- zd1}cdfaCwrc?tk&jc9+ydr#NER3sOG^mBerz^9=yVvmg2jNZ3O;4y1vha3Q8UE*Hw z)iYHe6epE;Fi^emPn3tl_1O}2o{kdr@bShJ^7v(x6=TRr_1O{SoGY*hb~MShLH+|f z3ruUq<T!+{8$FM@n?vbL$lsA*f!%FnQ0BsE*IiIcevtwFxm0FAKaV&-FJ9Q{Pmica zPS>FCx=l^?GLP{xk1?5_qZ@K_Gi5T{Po+ES|9{s!vaANyB2i@YFUtbiKJL3H-{SZB z8os#vZLRDT)uX5Nwoh3t)7MZaCtvcC%LDwPMtZDpgTz0mKppT;o<G`5guYe_I(CfF z>H=(3aw_&&D?~=OAKfL?5Dz)FXte#CFuGl_UJ|a31ro#L*pkQZcG9+Oj+>q(t;3cE z<UhA~;%NI(F*Qna+V<!=+0-o=T<@z@%QW5uYt>UQL&ND#u2rY&{WolnVpqrdv*R6; zSDU%yy>bB!SbD3I>DxrD=}JE+9Td9rZ<4n{WMH+*Dv^qFv915qtfU_I%;~7!1w5$T zEx6qB4FbM)zZmAoz~4_)?Y3p78RC_8v=1&(^8R_jXLKiF1qE8tnUy@PcV+8gC2nOS z_SGgI(>+kr&K5SmOZ^J*ML;f_5_=xi^TA<Q!NTL!lx@(;C}GES$c2Vhs)=*iRHxXY zL$k$>Eygc|jt#4p=frGbhN1BvW@Rno*0<MNpVpe?2^Gtmj9d?wZAz~2rgsQeJYzL? z@oR<7zUxWej|qMDuH^%`G{sfyt9)I9QsdH`RsNCpQY$c`bULhY{1CI->4xtYSL~U8 zgw*;5wF_TMU4xSBnRo8#6z_v`tjjw}u|}PzB)Fcy4&8+(NVE3^trg#uz}egP21D7_ z^*2iu&+x!niTzr)s5erReDIt?iekw$Z@Z|ps&%F7QsXgenzxRaeVeSJt#hpMbDy7M zE!=7qwOe(+vZk)Lik`IUer83me7d~N8k)1BS9apc&wZNgo2|N^V=-k-eafoaXhq0Z z-B4+-3s$tx{}v4wL3za$n-=6IuW7(CZ@~cilbqO4QdzNS{u>&}aDs-CFpuykVd}*O z)wVK@S~W?p*4mKgYbYkj7jg-%;{EtZ95jh<uHlJ+2D^NTVKOHp_W3|MkVOcyvz`N` z4qME4<UdgHQy+nfH=pdGBHhUG<BH#P2hj_=PlIQ=2&vxUq|)Hn9I&bLo1(M%wHGG` ze+KWKCJwx_h^XiEaF|AU*_=T%!bI?f0p0uxdUtF7H<hveow`+9CklMrrsBe(S(sD> ze86g!Tf}B(m5tp>vm6zYkjJ$i;OsQZMRC4!t;U^vM^bBq5o>y|&p`|BG>bjm_=@cd z`j4?U<#oM|Hqi(nlXB3u%w~thL}#VXaB6n>YxW{{jC}_A41ZW8FB<7|RveNz&3EBm zE{mG`q!qft`QH@|>f9iQl`}KDG*7y~kJ6HI-{pHxIz>NUrEdKhSaqpzuJ%9%gRUbE z3|dCx^6dKa8dLM_EvUva%rt&TDlomHp+he%<eNF`5~po?yE@OS?)zSK6}r0mrBc^Q zw=Oo$|4g?%Kp@ajiAJ53tTH4&eV1Krk6V9C?0N={L2mQYTAnjdJebuj^@&Byak`wo z!OKOJGnB(+IgtaGgj^$PG2j=|S_nE>73!$cJ?PuCMr&P9pSvu$loqi!-6ER=H3g8d z%*58wbJIx^{|c7`X|O}zA(vrwcvsBzde*aJIM^t9C`#XzjyjJD0%DaiI+7~8Rxa21 z-%pjjV|^Oy8cdZ3BKt}kUAeIz^OFJA#cm(aO|THWm1n>0OZ<H1tPWc$lmCnk;UJ^# z)qcjm)>yr#m{(%|K4?E~c1>5v$xWSgb9*ZP<?&SjW9~^A$>I=6a#O}aVU4m1V~(=W zZ{5G$c}Py<E8eNEwrbwdosFo~rmx5$LsIk3f8qhAyHhMzl8w?<@*x4aGdA$VA;fhw z$^ZZYFWni5VJ(UbG4xUqgpAZxU#j!(Qm+<CXM(9a#J;O>ozp1lORM^o<M9zGayU|6 zd({7G>Y*J}R+@It-$u?1#*e^Tql<6DpX`NiUHya`oETe9V>&~vdefu}#$n~nRdud> z)P$1#lQV<k;1qV+H~&XS>Mo#@k4wi}laznrX-23vY{};0w606F5{8z=&vt#fP6bbt z?&Fb%;(x)t^`05~`$8_=m>uMz68jH9caLl}ii)(Bc}+)pP5ENoP1!cfl&5=5c~hS$ zZ`D)&flT=adc0BfV+IU~OlQtNqaN7|cavGiJ)6K@-A{xEj)>ZGya$f<q$a9ltKdY& z)79TPYE55);~_+L-0&suF_f05MZ#+pY^&{yW4jPs^VM6jMcVYGTJY?u6AYfUx_D+A zJlp5t*+7^~p1m&W?@m3aaqUG8{w~Vk+mb%`_JfX(!#7m1Kn0kIT-q1kmIP&Gs(5++ zeLd(VM&`*oWISp*^~MC{VuE}I!WR(N3&P(l^dS5XL^!0pf9ic6jj#5SfLPr3hok3M zEupsG1d~IZ{`jx)4PNhxYIgr@yC$&jldeZSEsH|LxiY}<=KMm(M{QCKH4fft`?6Ct z`;t`wP0iBQ%;eBdxNfEITl_WtzP#})FwcqYH>R0=26Yh54X(kcdu~<<e)HIO{6wiZ zCyG^(b55#eXMKs70$+_$64;bHC$+FdjE#04=z3F|L$L4^>GBlECEkqF^;-PFhF-WT zHL$$AHgi_rPSKxU{?^79CBwyiG8p~bWyfaxA>>6PsXOF^U2Ql{@Da{pHJpQVm1-3o z%#Fs|fbk=7fzH8lZ#6C?M=wtS1MPE%SoWt_BG^6ff;>BCvuf9)>HCysC3zHEC9adn z8Xs&P4Cy?KYK%dfbDuaOF&9xqQwYWJ?7|NA!?-mPZ}v!B{7+x3w_3(#CC3D;mOAid zEN<W~@XrBb<_zA7gH2)r_~=}-Ejgjk8QU+}WE_)>#W6{fI3^+YVDjXMFV4*z^w3sT zaspiUQkE$>l@28i;h^tuj>|Z(muDGDhrPc(D^1Bp*}N>@Q^^8rHCGZgkG|8@6R%sD zLs#*^H_Ct2kygu=wQ>q_-g7(pNw$&blB{Ogb{IXQ0j+ac&{jh#)WXUP%zSlRAK9gW z478T?ABh=ioSV;ckIBqT<7(;Sn4o(=l^oFdED@B??YY7m=0Wy(>|w;BHwWv8LF6an z-DITtj#D)EWDOYFrygNb`e0+ATX)x2QGg=rR7TVw&2dF%!E9c6s@s`(RcZ_l!d#aP z`RK7mmP!)La`6e?`A@K&MqfWV(`Xgf<qF&i62I<yQq?1(Mbw!+L;fn;Ie2VFRqL@^ zWQ{(U{kN`2|GVYZP6P1j#ZUF<x42*e5npQDmBdP4bXJME(&Jf`%sj*uHAt6g6{6L8 zE-mQV>xQ7|l800BlH>9Wk}f<~J-3c^C|JrmbeNo&2`5n-iK~s>Lc8_DA}U1Fp4<bI zoyr#YdDw%!VOo1~TyAnwj?+|bR5O=^m4ChPAQ3;pVYRD`O_%s<wLhp_SgF3`wRMcw z)<wjz=JiJg6iw&%G$Ob{mfP5u+{VPp7ZSlNLr}3*+T^2=zawYmET~jLuli!I`aeIR ztG|m(qIIo4NcBOt`jch_F&i#)I7l6*-$6y&%eC4l(gs%08I$t(Y`OU*Pl^_Em&h<& z@cu%cP|f9wGE|aVJDCd&;+Za*@l3}=pn6WsQSY|P4dF+0M*>J_@XFsXsw8ddGltIR z`BJ0kx0#kQZ!D*nu^d5qeQrc8%0F;kMro>;)~@cN705Fm0Lkrw4Coq{@!`59h+ma% z5g4j4a5Gc(Mbmv=qCa5RM}cxE661%}%FC;a{TXRN3qFC;Em-Ws7gKgtHIp$ecvXOt zmb{K}!Z5KW>!I6D@#<l>R?5`H6U&zdr2zMyFKEpScd<9zbBO~pt|zOYVe%+5+!s3^ zBnEdz8;_6(78_nU8RC_{)+?WWT*}v9R{yDpnwTlvwb*0HdA(UO9DmE>S(+vPZsZlg zg{P`VC~jt8rB~&>y2_Z~pLA*Wk#3i|jsqtOI>zbkGCpx+VU+(=rN*tGeoL0=$iwkM z?9NPeV&|d8Q6*pme6zi$WEXx~>Yeug0rUC?uui=T;E^mI%UUBGEutbj%u$;hz$YWY zj+%frDhxuT$(myDv@lr{N{t?Zk7MTsy;*IR2}#}{0z|56NU|n3)olD<X~$q9yF}H0 zVRvNn*!31D^3FDSI_ockzbhZ+yK8+SY_H8?rO!&7%W0fpiv!)LtBTd^N5QIPFxmQr zhSy$11X!LqdHi0UK`D8-_C~3vE8lJnv0=z|ZW)Dek{IGFlV}WaMz43aHf~E)s!*oR zSTpUKYO{$0;R>=I4ii_OwU*13coyIf4<5s3D|)rFs*;KUTgZ<D?O$K9dErp?*duN~ zV>eQ!>wl6ula{mpLb!a?)UTaOg=#SEXYLd82s=}G&Dv=|3p$wBxJ{O}dkdG5QFD2# zdK0HO4Sb54Jo<!$oHE|jZrmn&KX$*on72_JNch``0s+=;CW}?w;ct@#P+bl*@N3Cm z*CoESYAUo|x{dmB*Orj?{XaV0*8O|XQwzTlzp#Z?<0eADr6~P?*oCP|UCSGqV9jO8 z?~@^-L{^4>HXs+@BqflFghh($#Qd=O?#tQoYI}+EK9QsRn_`MhAMd*n&8f>MP>wMd zaQn*VoEMNX1<C5N@^m8Sy0L-e#Ij1~g5b*PvTCPoGR|Pc#b<Td1=Lh6Y`A3Q#Ih-2 zS&%B#b<7yO2&->vVXR1`X}RRtdA6)4zu{FlXP2B@Oy?63Hz2)RIk9j!;ejg$UpF=w zSvkh1V!9TQ;8&eQMl#9ky!jFJBP!7B-dZKc$x%HFZu#{@?_um5zQzmjVz#s=`Zp3S zZ~YDj?Y`6#FPBj2vk^sWd*WJ%ODBR1G@?fJM9cjeUhasftvzv$WYs-;NJrA;C1367 z?miw~(A{0~#b_)KdW)zoFKUY9qq-No7?H4xL@vHO)54O^MATI}T_9DUF3<#HcABC9 zV$xy=LQm;MXf9sd&NrEfUu0B7r2fcF{U}=azZefee5}1b&<dyz*9gIN@s}0)?7N_~ zr8)6W$>qc&?C#1g>oeaWiaUyUIbe_Di~CPs*ZzR-pbS@UbDf%CIK42hpJ;TnJwbY5 zZu$Z7jI2JtP8vZpS*-Wx$(o>3lbfu`IA1vc#BP0@R3$zYI|f#&8D>oOZ0dm)jWx*{ zQsbv%G(a=4tV+{nUitx%Th#lAVY<OZA>CL$>xs)4Ki<=e>B`!PV6GZ`7(C;e!f8HO zUDRr9fuzt2%!PMcif-T#XN^AW+@0WE=dR(-8sR_Yjo~f~4%X;y2J9!aivT!W3~#Ie zRLJ{7YJz$j-s2a20y#;~W71-r^byQOAa#_gW)PYe!U6N`J-+yPG<zOB%FRklb2iEm zsPh8292)WKT0~i&zl)E#{wmzc{A#;iemTp{@#XD%imGQjm3b>?6s2VZT}R@`V3-)z z|AujvZgV!i|3|SFecsS(OsR(`4)MUNoXL64dAW5{q`$4CLxgj~lktIwG^ZhK9@La> zNGnMnRzmuMI$!go&<F+zzQvQ%cz6T~jy(^hht+h-YwxnKNvATzsHc)z5>``b+fA5Z z66TUH9>z3NHz~)L+U=iu>_OJQ9n=<Eok0<GA91zrN*z^uaHhz%2wtGg`zE&2@ptvw z5JIhf?Pt|uuZnxTDlQ`~v)boI)kCI^j1RVn?ZED0*9LxS;XLQb_g_etq(%ph+QKLo z9k-cr&m~kic}jX-ZfblmJuhdny8ck<NP#dVd&9(bv`Vuz=H`LCY82)+&;xS?N%Yzo zPdq5C9Y8Gq1`$SHc+u)3FPOdWHKkj$WZi-60{Ub{MLFYWHFxSh?LTduptn`s4hrB? zTgZh_F^-9m1fA|4{gm_aBf<b=bDZF=x`>PY5D4sJpeit=FpR9R1?M(lPi@tY#Y_WU ztF5LCp}ql*F4&`@qOF4E*z1VD$ZW~6)p->of)YEOZLJVl)@ngFb-qt-G;FrJxM%Pb zk@gaHZ7rj-<Coj5;)o|J{>As(vX=3C35b=Lw*0m9QWRlh_lnfpF}9m7W+g8`{1olG zt+FxCYJQtYd(S}2jzS^o?FT^STLqcL<)RS~Un34oyo<v1r*}5duDFZLHl3P8&rL7? zh=US3<FntUrx#~SPq*vtZ#M~k`XA8!PhQdudX~_W<k-DNWd{>IGNYpF2i_KIEgk$s zE9qQ?TH@4?x!jI((A7+uFFwfWU$Nb4Jcn^D|E;(hSpI>C!B%4o!M0Zg(=r#SCTSN4 z@$s3>?zzs`y>dnBWVu9hsNK33NQkqY)@1@e@s7YHm#Bbk$!y$fULXx!+btd!ti~_# zkpXYNkz>*Ay#lD=c6l0WdNn^f)BH%&{OQgG=mWE=*yL8J*!`JlX!fSzV&a$vqig9* zGZ=Swyta};l(xnqkXy|c$=qJs%_ANkBESRKe9={)W#Gau?CT}S14$D0wW>n^GL_AE zYmdHk7ehomVQ)UR`{924Qpafj04}tPa|3jxV*?#ywO2KJV+j}<>e<3}G-({9Oa*td zEnA+Nw6ESf+-ekeBA!7Umu2S4cavVJV9hi63acStSy(;z6XEB<A7+8YR)f)t%Dzlk z_~}yW7P<dn|GA&FLJZFR+GcWDIc<nVmen#IEUOG?eJq!jxeUHyFa42a!BBE1YQ?k~ zcwYv*+TKxXvOf5c2CoS6^}{;vqLtG2ABw6r0b<A!%Qg*XvpR4F=$prFzrzzJs>dm3 zC}uQ0FcfpYscSG1_32JA=(5(dC;O|fd3h&zdF@_#YdVX_tLnXM^So>`Og3R+^@BQn zl5LEaE#YPRY_Hl*@BB4d6`5fB&*BD_Aut`-NxUE+(cWSXda>N~2Lb#akRmSr6RYvx zYW$YOR`?Q^<8WeGxeuqKV>E+FH@yopv|HtG!NL>O_wLO==FeXLZYB;S7GK*8<1G3& zt7A+aU*<f!L;DDp&mOt?8;1zO&TUt<UVU$Q^^G<41*E=HJ6~sZJPl(_SbYa*AUr?= zXNT1)KD1{FJTm0kA670Lp?qGAAyD4T-8=V~9-?LJyp{S&-|Xs-Jql3FXvP{o&|ndT z7%+N^zv$++#i!#|2A=2)sMu(&*g))vjm{N0$pL<)wS(eEK&+v}nLw|XFyag0cCrZ^ zRToy@hX(XkBylOHnz>`RQeQEnFf{+3(l@2k>Sb7f=-u>NXma8SV+qMQI-VqIovg|D zfR+*FAyYL9?Qn^Hpa2gD;D>-NsRyZ{vl7u*^<$g{Z%_8d{{H{yu^Y8v=j~{p)GI`p zY{!zV^YuO4=s{w;622NcgP2s{7u0KD7gl$WTLcJp(jp&;J7;yfS3|ki&??iAoR@c& z(u|zpa*Zx=QAD)_+#bg#s&}AM_*M+pOh6W=w?RomIcha5gWdLcSv8K0llQHIE|zcl zDSsoXe~zxmdD%F~c$m6W$m`3Oy}o3dzGQTz69-7K{LW9)fNG!+l5R2ctjWiCX|)=D z$&fSX(71&US3g<;P+f38NUWHu-@`BLB4kd+fJ~mzoR*_GmE-B&3gZF}>++oe;Oj8K z3K3K*!|Dd<gjSzsgNUdhO4luK)9TX+L91q?-4T>~SjwJTnCDA;ms6TEap0~;A@kli zg^{Y^Kg>+y&ECKV5?2><C;K>}1)ECWlumye<T0lL84c{GT@9?&{43JXsa~n)Nw)tD ztBL91Csw02SM+JeQ`Yq>8NXiPc!8Z@W|56!<s?^4=kmy#*js*<_T?IKW3dF<(rj$T z<t`h=z0`hor!VoI6V3HMo17H9ZjjZ|#)}cl_6(07vTV=c@qx?saJKey=|aYZws+X) zn-bH$Ej%yUJxuS!%<}swv;1;-nEnitd(np{2HB{ac}P_%jdIH}s}f3Yep|O8k|7gR z&|4*ZSg%t$)NRdok<(T2qISc}y0FB`q~VX4vYw`ze~_7vy^Pmzp2ft$8&9S%yz%P* zt3#I{kTq6V0YqZ0xD3-rdr53?qQH1OAD$Sl4>Mg7S<%lWk@zJ-R9fgYbkS9-hI*|M za9j23Rz>&Sb*$R;-<fWG*URu5;^@}(^g=Y*#d_ZJHN`$9kH5$U_#Ay9`gr@AUA(4s zgz-qKPnyeisT(OzwjxlthC9+P$~$)%ei0{)cy=4u!^>6=P005&k;Cu5;B|(xA-A`6 zrZes`c)9SGQC>E7Oj%vOQX{;GXT5Sqn{sk)3T)4iase;f>t43q-`8Um*mqiz=~W^O z`+HR?e?dLtMchtZouAuHrboOu5p+85eV-XJ^0?K|K~;{HubiWw_YDly2V(akUPrZi zb|D@F^sM@Rv7h#ej9*T~W4$9Tq1cAr5fjPrbgu{mkut9r7tsrYQYR3{+{t4t2qI7M zqlS3dW=Ur!&{?%-b!L=xUePY%D0;godZQHG=4JbW6dgrTkLKK`gYaeJN$(mhx57)+ zZC=4+z4{$fzt(1--c_m+UY^~w)%9yN+lvsH)Ql(6s}Qp6T|UjL#p)Janrv&qpD*;6 z$hrS#cCG&g8|VLY;Xe@g7eD|a4LHlqc8*&bUvsx|^N;Z_e;$#IZCqm5fm^tv)>R(x z5~Jzt+B}ibx<35CJ0EJ``WXDSfeQyn<y+)NPa&Z?j)){ibQL6)6O5GZ=BtvgGQJwu z$(<j`V%^+^YA2t=qLNfj3PCyRxEl)iK|552Xmy(U*`4spH(<T7Uy<Fgr6>L$d+!1t zWpVY7Z;}Nf2|O!AjS^**r3Mo<l8A``4R^fZLd>qd2w1ChjhABF1yO{+Cc)()NUg2f zT5YXuwYA<2@rHyT!8@W>lzM5a?ZkM&8^Ig<|9;Or&+G=lg7xjM{lCSJ+2@&O=FFKh zXU?2CbLI@vYK*zBFA##%D_z~$j8;*`^I%DGCD)FsKg`*BNphl-^2IN>@ZEyHvPC^_ zxT-Z(yl$#E6KN2~dh;)=e)EM}$1v1kFW~|e?SX0>%R#IYD2bg{0e75#0bE*dz0hx% z42=_uzKrPXDe9D82`Y#P7@I+LQ#H7Gk+Be#-USn}uz5E+3U<PR_`19mP+Ti|Ta8!~ z1C=R3ZGB9ZsDq?URLhssg&Eyk2#3ZJI5a+8x)n+#4+S#xxX&>|Bh&*Hek9Bo{zCiX zLU4-OhBgurc9Z%NFG2Nl=pj%L>`myDVg}l1f=b9th)63L7E1=lV9+=iA63zfZVwGX z$LStA5NROaPw<@%^56g5B_EfJ>eHXQCB85O??PG{!H+g2T3MpQl;}1k9_U#j%amwB ziR4PI7nKF1P4`R6m%uEjKEPkM`_DJ9dmH?x_k{i1&s_Wu15|qnO({Ec{|e}dLA4Ta zrTc{?E=8Jfho5V>{h-l6jVoww2sDE(C?AMFmOX1$Dn8D5p>(1_lz4T%V7j+-HVN*B ziu@t_`x+Th%{MWcKJ?w*%{NJe{?svsDt!SL7Rgx%ro41CgZc*$hi+tZUH8%qJdCo( zW}^P%X4zwV&%(nPaLY(=O%=ScCwse!nBP9hYiA`+{QLp56;~Q|&stIM&B*|SST<G& z_?`DYvn_>5(YkU>(r&|bo}nu<uRJjWwlTY{wqGq5RRwbOAyTu{``~{@>F05_5^RVp zUjQm#TbJU2YoTJR;SSBt{*3#UHQ+HL=ILCG-}vV+VllzZ?Y!}bF|hV)8;QM43SncT zt^1>*S73$&d~3;x_}e@-iB=D4_U>P~{*ps6zWmnUD)`9zmYx<EbY)(~X#1M`2*25T z00LP59T`gOCo-nveSg9ya_AN2=qhz_U@Kw=%V+(G18goLm|%zIBkrr5k7x0|@#7xH zK)=y(81MkBa+!!gYjHnt2LvVMp^SKrwy8k2^l==l75p-rr<R~zT3bdVAoly<96kqY zY7Zf4ozY4`a23sz>X$!t$JJb~I}(3{w6u}<YPZYDXCaIFfhoaTm-N{Et}fw<zTcY? zN3g^wQ)0R)ab(XD^Gpd2Z#E}i&Ij4MZV$b53e?lCU|TQ<O>IDv(A0o@y2t&raJYK# zdbgPk28G*^me$OzTis^PBYDlxh+PcxLYXI8Te`YJPfWPSY2y6mt2mb0RNw9m@i#KM zdN*Ii5j7=Pdze&ybXw)3Oy$>^%8%5QyA+#eD(7Mo6&7OTo`sHsK!r!u=hwOD-)tbf zi?lT9cZ`AXARyq-C}{!NLBmx!c3ZLInpdNS%Y=gcRm^zXum*C65~9Ii`_pQi$FiJg zp1;AFc@PCTJ|QnVJ|RE5>uCAZ>VE2z_UQl&I2<x{sfO5188h-SX5<f>!B8{htnfe$ zdt65q+JJrnVwXC5d~-2HI9qwA>#e*9db6In)P<mw^KCZ2>2wr66R}>SGPhuTYc;L{ zwbaIIT|zx&2(=bzX@u(kiQCUVL<yHr*xbSVnVg-U93lPJjsC-f-`=G51p-0!@Xtt) zd<a#aC)%s6YjD?I*hbonZ6sXng`Ld1u+*x!K_rvaNIN)n6v}X(5r;G=7k(B3&J|Fw zW%NdPq23^^7yo~}t?MNDdWQS8PtUK1Lv9pva~DpHUROterRrlu8(KUZwP*A%YRj1H z9X5GeV#3E@A;dlF*Ni|#IE4y%UD)Nr&RQWzY65Ocb#G!I0&>|<&K9n|(8_FZ#A$q- z`}0A186oq?<_RD3NB$p?oU<*ct`$>5A-nfZth151Al{DKAl5NBLIKUJeX&OG8VVid z;O0y6RwU<qoSfsuiLr~prFL(+wR1D`h4{M}vA=4^|7D^NIxEGBZJ*<GCY8wlE*Ad< z>i>VM*h309{%;?o);ILcm>-x=ds@`l*yd2M_2h)dfPIG_vdMldjPY3Dj7J}Tqj~W+ zGMiV)y+=24DH4AxyK4Yum*!QRTbggAHX47+3m|#+plWsQH55!|;IGz8_rain`vOKY zjda^TrkuN=9oXcF<_H7SZ9ftZ63WYl#~_!ggX#dNty0`-xK~T60xTl5e94X-fPuR& zwk~SD2-7TbU)B%_<}|r*+lS+6XD{c)PSF8NM^lR|-3SdTk2{cE{h(3u1-FJ^ks%5t zCJQQ*`_8f_ib8n+D8?}D`CYxR`HrZE7tnbw5P<@8f!!beb0|MsR7N~p3}?4GIMd-> zWxKT_{Su@{t;Q=sO~?2jTbOL2?yXKm+k@(J7}wEUuBc{Js|BK@dmC0q&uAW>%NgnP z$Tln-gKBze)+yIB(j<I6E2v((ng9@Kz=IR_Se=ST3QHE_jQRaqb_dm8<RKe&*YDQ$ z!^aEoQO_VaFR|bh?G{(9Zj)?GIu@A%6tczD>UxukaPX!pe4<s?do2dg=tKYwun+e} zIZeTS_d^lm^SO*fx+6Y6`%v@19&+{nyX>uJqCx7Rchkqy>EPf<22WZ=cw8zHtyEoC zVVV!%oI~xQkrMo<H;|Av#~%g&aXH<|(QrCO!xjwD_}Vi$8ls+1G{5<(Nni>txtf>A zfD<3Bu6>)A6fzyG*erfp@GS;M+ar)di$j23S!*zSd1lCJV3fv?dKwA_qNgI7{Aq}T zvvJ-?b&|nvtj4dZCw@!caqycl(?#%92SIxxE&%XGPl_Y#{{(x<GAK>37|d4Nmb*<p zLxX%53299}=BpsT*rMBPFL8E6jO+3sdx`dDwi+J5-0FBVTTQo9^R3^2I^hI{Cg<1O z=2@NPiC$!@MQ>p*-_!l-pm*bMZHqs~xU};<(Mu5WzZO@0PWXw83dANEr6wCp&()ZY z?TKk~mo$F*3<UmlTR+7`70bh}{ciJ=U@t!hx)%3%aJR7M5ei7DGG^H)WjBw{z@qDs zqNjP3>$B`D`m2|lUGgmGN;KDP3vpCnOr0K7@7;~=0bCj>xbkc9?mHa9s4Qr;jN3P3 zI0aML6h3DTADxNkseH~FJ~|7})qM629}VGCb{e014IkYL&ozARJ$!WUcv~O5hWOft zp=dn<I$WQT5gT+u{B3ND^=RjL@9QoBcJr}<D+Y$A!3~N3;S2=m#I0c%X|`iv>*fxU z(4W~@)qu>ei>wzB{3ql<v0i`>q4=o^sz+qB^J_zt0(z|X`r3@C&c{z=NXSRJ5!qSS z*JirkUQT_hl!Do{nOTqF2&0DkVCr)LJ|nT1U&`S<C|@Av;B161z__@VzU&p>%Yy0% zX)gCT8~y^?baTQZKOKm$p2)$=JlOCXgnPIuS^hU1|B^<X!z%LS^A)Mj9r)~&O<saE z%_TTGGb8o+R(wXWk|2o&`1A#ouMn};@}>9+;aGw%KD#=*a*fqE7fG6v4`-1zAhQpL zaWGXt#)F&lRK4vmmRvsHc^C?0oS%(O6>Zh!-yaGg&TLmxO!k}5V2A&amNrtG)#pSq z7*vym>;0vx0nUXq(S_8<K>86Nb>2;{n2(maTz+BaFPQKblQ3D=^%4@&>N*&8i6Bf> z@HY_@XSRckAR#EI-ns(=WGvkZF+R>ojCH(iXL75i)ye(;Zc6w+RWmxkTZ;SJaJ01h zxi&Spt#j~@wzLcNcJlp@wymiP_jdBVXZdk~Y&nx}KVO8C%dDYm@bFD-Zx0^6rf>W3 zHQU!u>#@*++{~6UG4{HmHTE;5Yf7KUX)9faa+7v?a)kBo3U_woKm5MS`nosmtU?TD zFOV@5`pP@-!6fhPevV&;p!Iws7DI46Ca0}OV}T#!I11qZ?hVXz2(Qw^8w(#YE|A-I z#{#W?!q`+fZ>97VT)KfIgcy2*Ki33kQRF6vM8e77HV2=0lOFAIVL;C-O%|=gZ=m8n z`Bt}Ye0$a0z2PBVSn+Tm7rCrP3sZ9GYCu&e>?n5!c5-b@1lpki6Iw<hBQ_Wsd*7^v zz&4~O#*2T;Mtn+CioEK281hym<W$u+;Yhg!zebr~!e#vD5kiTa35^QgBTM+1jzT`d zfe61GvKNkuk&Z0n@^rt9XjhT=pO0^DVjHub19og0l^~ot>T7>mw0+V0{1hsE7rLq+ z-#j%_)w#bDxTTvbAC~-=EVQ33f*yvB$zK89&$By9L5${LvU>yh^X<VyHb_!l_bWN; z?KL@=L`t9Kz<9p<<(#+SN9{Bg&cRE)<r5F#4JZC=Z_ZeRAzWAVOlf=RGdb%^pG1l7 zmxs^|K7Tapa;mReMwRYP;AXWn2(_VO(#t&1y#arzLloljWJJosTOO29fAhi&`?2^N z{z<@Y>n5v3mNddIEatNx!=UlS-*|m#LB9RiAuq?*`-#x_rC#35nRm#VzMH^K0m+Jt zcrG~Pd3i(Or6*S;4_R-o>-$9MV^^M<w4Vn4#QtfGeW!R3S&cFDg!E@;C+4I7APETy z6fhh}_GtS;Pvz5daLQwPJLpwFp_CWmiK!Bd!J?%7W!CzlPfI^V=r$Z+XtSTl*;e$7 zy{`1j(lu@G56)SCD(IG9`UJ>w!jMl{tZYa(PXd({y~n?aLY||71~Lt^WPEJ^kr$@# zIM#PYw$?l_f~x%U=L`s(U%HxTl_B60aV~=`He?TnSqx!2p<Pz4o3od5ULdcX8($5p zQ5Y>OJ|XKFC>2#)Uig;og(azFwRA=Y7JVXpR`k*2#BlNN&ueeaEwo=NdKnFSxwI{3 zQ!9r{>1&Y5Csl3<TVvMA{fy8EqbEUI%(Gv_Xu$X?upeullPv16ISeL(4TrZ4f1+=j z)iOB)S7)|tpcETex_-!W-5ZCzLh4rHv})ZG0O7}5VfXXUpV6R^R?CxUU)2ekx!Q`h zB!<rf*~U$&uHjGm|5Mf8*qZ<)9mID=yl){5y(;3Dzw9q_9y4}=6Xw(F@iM%S)ffk{ zD==hYSExTNf?D+EG1%}u1#5*!1D@0~NP{B8-I3ZtTuu49s|X<~Y7iT;p6GZ7qDMoF z9WBs~RLc#tGYqu)p3t6n%|Meb-PzQ%ThuV^ixx*Na%)SrT!)oJ>c(TWrCvm4M-$We zZ<m$IwE^mKpr<3X<vj$T9$K1wv+<xJ&^U*Bs=#C$<7>S+YY->#{Ow(IT3k{H*p%{g z(Xy`^2NH4H7p_Pidqowfh^;|i@~&}sf=KiQ!^w?Z`Sv3Df`jDAyX6ZQehM!5V3>eh zURDvZ8pIcwhgYoz?swBxz68G&H@ykeVhi=+G{Vanq~nrzy@M*%mkXhjN<j9=kIbi) zY`^quqKUb%SklESuH$QLc*RZ35j{*jf#Q)b$PqtwORI;GmOAm%=T+&#_@iH-MTqeg ze-uOpj8aXB$|a;gbZGq1TVN0H#0nl@w)pBvTdcNhTRuW8IPYxJyZBsj)5ECVYS@Bj zn*J4j!|LPrdeYo#*nsrJwai;_EvbOb3(5H&bbt3!@(UyPxR@tfwvZ%mFF>q;aN<V3 zByRjz{%(`M+%r<0e`kZRh>AtklgO%@-|7NUk0348{Omuu9E|vLXSA#9O^Jt12^(o? zYl#;(_b7shHqjIL$HzbCBk-MYC4rr6fUPyaj?=*2MnfT2a4SqxPjIyO?cy3W3k7_< zm15l6#2|M@$C46`VEmIRbqij)!fo?>Q|aSKOKZVEw@N9oTLbhzER)ESFb^HYE<<E7 zaF{20aeUQUKFo>O%QxTwAr)uXtDfRhGJ2ZbL=)52DxWvjduvr*c63bXM!EF|M$u!& zRK8UAVXQ=5J|DErE5~s9#L)Iaq=B|S2jto#ag6b0hdU7Z@0&*rquh^Q3heuK)N_3B zpY*Xad8g#%-W^RhAOjR3tqIL&k67IDqwr6*+=ox<fy*7S$v6J%XlhM|xf@cO_;l2B z5b<9+CYmt>pNKfI=!!XdRFzvX-}sLm($NIVhx~)AKQx6ZhluL$mf#!zA+n+KB$e(4 zs)7)-4{v-P==U8cAi18{{`Ml;{^G4(Lc>)>i}KP(PP;wDYmYfc&X~MsXX=ZH-_q{Z zuT4?+zQR6DMZ5ayV9@P9HPsqLQB-xALwLUNUq=&#7XST&)@XR+Q}Es-ye-(4#<<5h zCIgT1ez)OW)Y=<70oN&yY7{~vFgV}-F@S0!lp9j}L%2%p8;E-6hR9(8No-ro0Z4*j z@;2MrBN5$G2nPdF^xWD^M57ROfx7{rFpi~<c~Qg|UdzL3sK_*cf#X^p+8HV5FuTj8 zfa;AjBf>%|_(vILGiShd+CFoJkQ3oXU%AvR`5Tn%T05ha&Fi_A|7!1jHAOcU@-|m} zA4;%n3`LJZ060(dNEKrx5u&%sp!a>Gq0JZ74o4xsx?7qC$GREq|DdOJ-MYWeaKR;8 z>cO7M1EA91eB-}e!qVl>PL-#CQ>*7X<@v^c9ZeK>{I^R;8XrC0bJMHsv25V@vPaLq z%>(jA`wdNE_0<m!0iML@`2x8|W`Gp@?8)<S<`X4iW%xzzXt5dw6eGo?<zg3kH3(^- zWrX@_<OS(x5>ljj8IBUj5H8XuU)wtOf=#2o0BPMDO4n~~%fQW=FU)a)+5p;h+dpXR zSG!;0>2=g+@3Q@^IOK!-?|_`%+eCaSb6~@2ybx`44sBS=&ccgG604yGkFfm)V9tlG zGZAlcEVl7_0E3)@uS?@_COS>5-r7VApk9C)Fb^O4oHJgm#vEi*@5a!~TS&WTFIU}v z9cgL9WZ3f#`DiNvE48auQ|Kc@@ZU+H+H-3!45{voJCum8dO-+&CN~m^xE#5Oukw>P zR^xK$gU&tJ2;q(w6*4spF=$QdiPqI$twhvItilSd#y<cs<;$;07Kax7G%awNn98%= z^ae12u^=B_{rZXiJ$~BCY3x4k&CipiRFQBUg@4XjvsQqgp*dk_=36VhmvV^O%HD*W z+g@UGp)E#_jCjGD5KHq#C4{9sT0pu-IAzEmeA~8x+4CW#ViU2L^w<4{C_6~vJ~80t zbeayE;?OL5zC*9r*$%CuW7H8*xBF%qI{A^7)_t|o<4)i(b|34!WZA659UFmEM-z!g zeH^_jJT6`AoGy;NJyT}@t2o2mVS)QEaVzF+W_p?UTcp)`9w<cK#?7r4;-~gp9aQIU z(&RK8b~0T4<C0wc3YtLu$vYY4qBVqKHJJ6XQzJVz-aU#nQtJjsJ3WtJU1!ySs4F-a zH=1!Z6=`6h*&J6lJ?o6C-I@_}{Z_-H=m_E<vhT!2)MWtOYWywI<Euo6(H@-Yjf+wL z2G&0grxbOkZbTZmsgu14)wCdm0s_rpJJ%CE-5p=2;-J=Eu@fAa(JF^cW5?J{5#+>R zfaY)ko^Wte&xQxqeiuQ(d>|efOih+GMRxb5L91z^)?dh*doFx;!c8#Oc<seh;p$s+ z!TQNqpLO+o@aR<FSCW3rZAjWNw~ECVKtx>Po2ups0lXSVJu&Y%Q8{(%`S0|daE8tx z^BFq@J|8fXdZLr;refp<9>>}B5eo5EX?W~NHDNY-=1ulY-1JO2($F&_Kp-;5;-~k7 zIe-G_v1jpap}*T{zGG}3U}W2qyp>N}l2y98J;PV@L}HQ-1@u*-kp675ucFRdM+f;_ zyRUOUO~&wHb>1BV-pcwyeg4$vNr`lpXV3NGZf*p-J=$v7JN_QRE{xXEZktDER(@DF z*j}HtCef$pLqN_?%=O~xgX~05BLi-0=he9U-3e#tBwe4qV|`h5$4PxSYVXvChfE2x z+dMk!+o;&V$l-@?Ej}={=<N7HZ&uyWb{`?U1RVAy_O<)q+(`z*20W4I&zGvqoVG-7 zVYYamtoTIlmk5rF;48Z(7Wqf?H!m(D$d%p)-LvhzoF3gtNz=Y>7%$kghvjFs??Ib( zjP$DsF8rGoe;8U-E|n9sOYhT#qkSHv^ywOEhs@G$KX+-@UyE-i%Ru<O8~>tcudQv~ zSjD2_JdiFiyktj<Ve-q}+UAQ5vD>iU(bZpmqJ6eP*{F~97ctNerwR7L=-0P6yHd4Z zTW9a?=i-0PkjQ)A+#DeKXnMD>{r~7azU_cI@<oQHz3q)&c6~jzv)nR5KhP>8d)TBN zfE<1%KhWmy3pKV!$8hae4Q1&%v29Q@IudR7`J?`Z&GXXT<ginKIVztT(+un9SedyC zGg+oNuy^*u`oywGv!aV+T1I|{ozZ+1c2CQ<#^XuLE%K3@mD%=EQ53WBoNF%?RdHwF zpKA4kSJX-CvAV@RS2edeitTLsbOI?4+4rA`nTI?)a?v^(H9PP>n5|=IJ$|^m!F>>@ zqj}LhyODW&F;`IiNKZJpc)Axj4EE*K@zn<)UvXrAOc63kH+!qv-pC57{<X4J!^d)H zmq#lf-Xpitay!V)sxpy=Swmv?!|D6v4rkWT%DulG=IwmcE6OtzNgVz_NS+h%fMEga zB&6<96oha|Z2Mbw&K4jZkSvEH3*{tp=+6v9jt!PT<tx_Wz3>%T{Y9^2J<&=gVuMQ` zuPm_|;;3wNe6>IR=>c``qmlyH)Goq=n5P4?0G~4A6YV4Y)z!bdgX-#oOhX75?3<QN z4dEJ-_0kZU368QSWj8+S`0dDD5VXl~OlEXtZEeF1(hN<FPALQ3nyV&v6_+NvM%h7c z<4ab<@%)rtXblUkK_On&+Uz|67?wAWY=gOv$L6t7#rs;~+lL`K5^=_Lu`pmW;-CF& z>+gT}yTgi*zq_;TvrKypHkY#2U_@O~4j?1D+v?APbSRE*FOD9%XnO|EnMDW3w-1OO zu(hEu3OR)9U$Ddl^yt}(wyQ6Z_kU39c$Ce@RO&|q0*O=eMkn?|e1MLL*~sWg%q3y- z?dBCI4?5;2@4p652+~wBzF=yIahht9&vEgAr4i4pkR3bs$4MCV=J#D*nS#F3y5Ap> z23}zRmD-DHl>af|l?ayBIs?`~Rq7^Wim%OeLv{IK|2CjX-JHr6P_S(r+0~*hH5tBR zGSs>mhIjoKl$_*=jx9~DY5=R)GrZVOFP513BOBYIhfD$APBC_$fh6XX8lEtRRmf_X z4l5=uwD8B12h^>_w<-=lxnX!5n1ey;ixb&tiyeQO2<S2X|Ns7?_h*0B{<-YP`f>eu z4F(%GZ9VFkC)w3P&s)J*V3We`j(YOqKx9+jk-;XP#eKP>dT2e0afUDCiaL50g3{ub zYw1D={Z_2iY4Y=-Bac$^&IPNjrC7>=kk_nsKGG1?g^{iwSR-sUV;VHJ=~!3e^2RiA z*zg3uGV~<lZ_4?J8pP-L$yz33Q624gXc-Q0pd~)anWER4@8DqK36h7HU{CWlz8;-N z+hIR3Y;Y>7-P-Pt9tgH$9OBeG9-E4pD33GI{7Ib1FpMS?U=THX8%ZYH%lc@nE9d{* zIWL!`jhqP@2|i?4vH>96Ss+~B`cpiaIFJT7;K+jU@peCM!NeORg0=Wu8sFi>sJ<(V zO&jJ=6+Fi!RGA^v7^GoL@~~6qGZ?ralL$tklsd?iAl90+zEp`?dPSG3aGOvVLsm-t zn=rc8zjJ__Xbqe{^FwxArcJJ4;Z6H7{_5E;&uaJ$lcIqDe0kst5??3oHSq;sc%t)p z`OVx8hF$VN3|un4CV3YnNwqq_HGf5e@yiQ54=h7!>k9mVodQsNb}quRME7A&=mR>% zHHab$iJ8|mh>7z5oNfB(O-;3$A#8^;0MT=a1Ul9?k#pHPdbs#1KScl&vH|YG^F&9W z>jREV!@(Y$FDCosH6DRwaVeby0$di89rvFYZ_jr`*vo063X2$XDeAZ1X+&OIBJ;w{ zxpU(4vE|h~a((oQ_(JS{%td!F08?JaM7mL7$~)kaaczI=Rg-Mdq<vKM6rz7JNh?$p z`jWKX5~P!?h5WxJEcZ6%QRirP6O(hj$zzgpeV}SKWKvurNYXCvUP-j4Ep9CXp6a1h z>HcITNU|FOC*y~XWL5aBK~EJTZ4#d8O2)l+C+Rdi(yOejG>Hsn;jP*^0hR~(QVc41 z)OXIt=DNbGpCcHO330ODotLMsfz3A3$`$+1U?A(f9m5eGY!Se~O5ku<N-|@IYV&i& zm0Tu}`mz1>GsQ46daQ}yDToYwYTU@gr$%J^9$Jk*)_C*;a1ke}iUkF+96;^U_&7pe zMte6e55T}PB{|!RJ$32>@cf0iyH_M9cn$~9QK3@6(B8)2hO8f1!fG>;gaxhT+!PWa zJ`M-SFaEAce}U;4HO&oyD}iCK1`;0k$o54q%HTjflOJL46|$a<$jq#3nbj?VERR0U zEFvcFlzLG2Ot)@03WsO9#M?~b{Q!9!i=@@a2xO?#M_2ExWJ?f)QcIBEnO_zTRr{OL zUB)(<gEWXuc6{ei1V_8e1@4Unh(`V1d+a^3?|eYdL-as3=zS((mW!T;q;l;<tzI;# z)o#WQr7Sa6rDeR`WIU`05fP=Xuv!2_q@IO^YW57bnOU&vbY97(oN3a&VAJV*j&qgd zM3A^7td4WbTg%IlXu9Z`RJtGOb`yP2nwJGugIqOJl6O&;k1Ttwj}H+Hwqmm7F?sq4 z7UDvJJoUHfE+zwr$#xWSAlx8cmvD+a2T)NRIj?LA;<FWNn8_02r5XVe%#Th9tA+B+ zgHg*HSUYG!Cd!6MOIp6*Vx$Cu==0B^^y#D-xUnS=JKe1(+7Ikb2YF8?Hw0@)ypbx3 zu~z!H6tJ#o1M(ES7pq|g`NNEHY!K4W-_V+2w(J_GdYL?a<mvLOkI!^l+?NTK`m0HJ z+;Gi{NOLAzY9@mp6uAUOt|wd^6W9*0cwO(jzK>U6TCSF(7sD!uS9o%sj&?vdvC$$* zJa~fN0im>LZ5h)4uPUE=D$J2z>jzz}vcC2`0Dkr~te)3Lmi%4)Zu5Ye`mF8v^)zjA zDqBqDf&M_Uzz(M?5WeU_XtjZdWQB17PAqr$;tRKVqLVqXdF`C8L&2o}VDcCZWQwyI z|Ly~10WLE~V3~<}3L2k|7TIImqh+aOW^5mHxNic~ym&``<(5l)R1ms;mYTuM%mx|r zZLk60XE(wV8@G7FvV%JxoP&qa9ISj}KG71}pX(G`lHK;zAT!$E&0Y!m!k4!6aapHV zSNg1m+d;teC3-%+*&2~ZWma~_F<LR@U;>3P$1K#_*(E}KYy7%q>_CL3Vxc}59S91} z013x)rT!$2x{rfpC53Na?!flNru-T0SgyymvN_QDrZwksEtlV%%W%&Hj-m04cD(qf zX={qK5h+;9qY2T6@u?@^H3smS%-GKfraAWn0PYF#8!+ciifDeVY=QlnR_`#^75&lb z!(b+vG`ez4-NE*!Sx*$LiS3`j7c?x<KT$r@HCc<T`fF|08vf?{4SX0WkBfgM_Hirz zHtaAH#m2k7d17YebFhzZ%W5lnF1BByw^SDLvbIUy<}n%nxGpx2gKE)dP;wT|p|KzA zCgw5c*1E)$9c_SO?-f^$iUr=fg0Msb$XCCIuSdpl5aPoYxR(ZqZT>4m09f|iZ_pLy zR*d#Wi2&C!xyhr{3<zm}<Bm*KIuPLNjb8?Di+yd-g66wyhi8(R$rHU_831e$@6&^& z?Etw>uXzH_C++?vdaO@+dXM%u2Hj`&HxP<oKk!GP)iQk27~CyA*nT4Gk2uai0}s1w zW@5J2X~FLFn9%><_`X5cp6{(2V{G}^ZGXlv;Fd%Xdpo|I=bX)o%=FEQthCJvFE%T_ z*p1B!@Nc!=MvAP1REpfN7Mjp8>My5ZhQ_iC`~wR6^xb+LP=_JgW|I>Rjxg4yWDh}e zx-LXs^Cb|pG=?3fY3+$p<2bYv5zr%v{JbakE6M;Hz5Dws&Vc0jko}lo@+gcDpE_21 z0BQN3hLPcqe{w&@yTg9W9`@nRH)nt+>4jOr3~4<-b=@WYGGv~7%sTJ@LRa0i0@?s< zOXIbRaYnRM<yAw!d$<zoFLaqFl3xKo_TES{>KxQFfQq~K)?(Ix7GSOXq-&7#5DKeb z+^y|aH0m~NL`~2Md^mnS4T>FRZ7dD3oQmbH@?qcTk@HYb7kt!kj293JYt%FMy1K&n z+Dvps0shagQAH;ChzMk%#*Lp6(u`S&m2}Kd6Q_z;lWwEhct-mw8hswYuCGUpz(;9a zjc!>n-r?TEU|*NrDXoe>N}70LdsV9pFnN5fHv+%=RAuV#u=9fLwLWr&p>i67e9MpQ z&-7}($vb#_m-|h6K78^Ht-pjs^betCHXK4VV72t0G@-JsZcx?-MQw@Ui7~i|EsE(l z_Nq`=1gd&H2(n%|3QY4V*8sva&mj#<P3@Ies0IPPFpZSh6A~qddNcR(rAp}Ww`v>K zX>_U+p@TJl!*B8a)iC6|(wIz-Jsn`<3#-}SO^712?F9NoHbM{3i`8SnY%N~^YO;l} z!|FldbLJczRvBXZgMBeN0KPq}74pq>uu!j^3Ic3676iD3VowOL0cmE`gwz3la0meB zWYPV0*Pk}ka{Z+JK}$DR+*kmwhgk0!&0{mCwTr?aZ7dF}Wd`%(*v4OCuGDQjl5J$M zWJ^B&hSeX1>)A%!9&+Gn=3^WCNJQYSBGrox+d^^hygLe1_v9W88-2SpEb_9OLBm$7 zkPQO`@%~X0|8+F6X8z;FbbIa?>JXwez+pZJwYv9xH3a-f!p@-%OIEs?_NX!>m2M1U z#qH;snAJMA5WLD(9mJ3?X5l`{TfzD;A&SAsULHW_gU8PnnT0<EG++dRQ$u3U#5Ln6 z7Nx;s(xP%&i=#M%{xP(F_3|m8m2V_y^@&Rg^(4~31e;MiSHk=Jp0vVg>&{;w3s(B# z!)LF`XPvMp)suS|j2cyz@c!P1;6@bjAa8SnSlxnh;|0EsgUKM2e97JxUmIAIWDdmW z3L6ZvfS6{(6Ep@A<qJ-oKl+{Y7BD!77@$s?C2^#(coyiAH!!1lO2*QR(G9C(pTa2x zMljqqfeZlt*~xD6WcxvQ{2ipF@%RV>yiK>E7&PYbMLGt4NHSwH1Cs*$jBhv4_BE*9 zh&1<jNJw?w=3+`?jv9E+=SlV$?PGrjIm6A%0<;87399dc`rtHvc^Y5DVx$Jh7=UpJ zAu^CCUWAw}^3)PpNXZADj|X9C-3$lSd7u=~!!^QK{i=hp0D;`Vk#sNaAx8>n^#CCi zxd<m)USQ4_PXb|zO`^8wm8n|<TtT9VnIJIh5>1<!{T^l)HaXHQqi#W38XeyQsYF<I z%~x@gow4S1pT>G-e-zo#3>xXsjGIA4Fa_>;Iv%W=PuZty7UOAwHlDh73LcHEQJg!X zCDRi-tfNU>)9@@33O1M$eBdk!<I7PHV2jpr@U`39>?JIcko@*l?~s)qhb>=Dhhb<8 zTk1P@@7Mti8xe;mm~rfs4BT+MIuo1U4I5)`0<&I&R>#+8AmecLD{PW$a*PE;-M$|q z4dnPc5aFnK{kJYB)M6QBH&Hx;pvP4#@uCPWxj{ZP&A>Uqz&S<3dCh@yt$}k0ZO)If zG>S83xt9DK>9~pX#19>tW^B0f8n7V)cIyc}daKHSeUh;e;gkwJCP39^A>rfd=#$1* zZmNsfS7if){bH6X+Em#Vdu>W`B{7()UeJ;fO?rYllt}TzYScOzO_a?SaPx4p%%I@g z==2&@CnhzD>fjFUejQD8O#~|-^fouB#{yYR-?L2vj@Auu>9X)QE`9s5#NMVvttpY! zv&pBJ5}W?B4*%{rnf?d9w^DakgMO{;7x`dWFQQ|Sbtz>VG1qfa@L^!X|8XKZ|90r` za#N=sT;)iExtRm2=@zHsXF@CUaZ8EUE&4*Lyo#n*NYq%)Os%Z&JF4($Yko*A0&_yN z6brNFgw_69WPu??<v2o=0y687;`=R^J|d#73>C6;epuZhVw*gSO31K+gt~fyi}O85 z(>OOEEloZ?^Q#_sf4iM1>uY<-BnTPAJ;OO)xX?hpd1kgtTleFVLmg%sa-gKre4VfI zOsY2K&1_d|$D=iqs6b@^h;9vTkWaNHtURVQ>1zHi8<mFNP(~;E3Wf||o3E~vAxcuG zV_0WW4TgshLmx4G6`i0l%<GBajGJA0?*@jNKQBiSuICDbJf(Dz5FLz428fAmG%zsP z6!Y^aP=*rjQ<?E)W<JbG`dcb#KO~9n>nE#+U54js(OTKWwI4Wk7TVj#-X!;8lqPWm zA%D&Zm<4^!1;@)70~|rf0^{cids2xD@GDjZT0!7v(G-y9%3lycE>tUc-XOnjrRp9F zQawdd-EBIv6KN=aF2~b|UkaU|+=>f^k2Y2xVcMIB*rWC;E-qaXV1yPqDk<i{pAq&B z3vX!lE~9kag#EusASwrUHj4gK27Flck;#K=YV7L7tcT2+x|2(v+DzOjb^TO${#+_! zo%~QIt7<>Eq@YH<D9p#?X+2ie1qs1*R^mokRevxBvCGvLW(j^kje1{RIDGq|!7_m1 z7U64G&mpg-(nDx%=TVqzA4)C3@8wsv(^-PwhIhw<rTZo!UtDU&5*)jJ<EYE@T!I&< zb5I0*P1mVuy2=@*${(AK2?}5*7CIVRqOR5Ooxa)S0Q)!pAmhLO(E!&{F;_H+0ab=t zMo2ZwaAlv4s?7|kn`O*X79U}?EMd9Y46sB<oon*#6H<QY*B~`=Woyq-2(Lb)(N_^n zAGMRUT==5OFeGgz6K<3agNOLnyFB-xsI1@hE@`}#%Vke=uDfpE%eg)*Cib96v{bfl z^VLH#u-Kw>VfJg2s)gB%c2xreBlmG3&cjg}>51t`htv;$?jrro*5TTo_A@|XPvp8Y zg%5H#maS)sGukDVh|HJO>S#d|^vAO2{^NmP8P|wEHM-Srk!B{hu=?Nz2ft}EVO*2A zd3vE4J2~F^G1wa}emX!N$Wf7;U6x$QJ!|#4%)spCfPEE@YlMRK-OR5Z1OZ?H%18HR zt&6u=S?gy=gl}K-A|75I1s6)s+;FQ0d5hW*`EO3I`06jZddZL$p4z7x;>E9y7KzAS zD6P#z<8rx`kYBA1GNOgfK9HvTt32P6QK}^anxY;!&Tab|)ArvZEv@aJ{4A~QJ-Ft7 z@5QkvotZYCW{5dOn~aVMt5G61*zO}}PMInqlZ1v{s8h6Z4jbBqcxr_lt<{-!wGLBT zWH!6|X6*B6c5FqOX>v$qx=n^%Xtx^K8bAeV5Q=H9qq5R>OE<&Jksn5+7Azl}Ye{b` z1TJ{b<0s8PxP-i%o^w{?-N2^eIx<Hrx8g>wZmou&Bh8tPVmTr8*-zLNUM%(Gnp2%y z$CGfm53bU0jYI=aV*}qaefkp8(i(X1Po+<_!4wPAcCu`XuxzoGOkl2Z>H%DcxfpmW zJ7NpLN&C?FXa7V_kgxR?E#?4go|Lr4t*=<R4bOG|b6%%H)mVP!wLX8!*}m?#+TQM6 z`CM#_E(BIA&-&dL$f@oH;gd}y3)+P`>2_Amx^WdJD1d2MVwn<?`+!N;0GBdxz}I<n z%To<FA4-gC(<oD$DqUh6Z+iO)q*bTvKi50_%{4V?;WoFT^7ZJ^>RJO}k^zuF8mQ@7 zke<J82ME<_Gw7{b#Krzd8L`8{YKh1ZaIMwQjOLSbuaf}`&b1nFJYJF-Q%P_t;Zaze zsEX)5hn{d3c_ew)7W@q(R4nV}I2cgtg}FYghPZWr6<#^kZT&QZ{8LCvV}*TpL_RK- z6;BjMCtGM8(IyqR>$p`}4ZNp{)zL-f-c&O0(bT;eR_BOW4TI2XxDd$@O##eKk4R=| zEyGQc09pf(B>JmCKlLH*Sb<z852poaMA+VNN4wSFM;;eNok`;3`opRym5KK}hSi^C zu`VbuzDQVYNF~q_95@vMr(r3a+9lghQ`xxO39AwaQ|fr$A~+8NxgxYYBiX_M0Q?F? zxQfs0X(46*m>m*;yR6lC1ENf6CPn{Dug!ob7V;N6`Jp_{(3vN3!x!vVCH$uX6>hJc zV|s00q^0%RSt1F{Dbzs9w~!pH{!;Ejm}elofV4CS2ki(!{lOHfHid5LS*TO+-Jx3W zp+^wkEm8U3OuIn=SyREy!rdb|+`frx-w>`vM%Sn+8M7ir;vha1$|*AHIRQp%p>B>b zujhj8z^x&b;}(ie#rEPrNyaJqkFRwFNM%UfDT`&!oJT-MH7^HuEXjt5W=ErFU;PFF z3^Sz6s)#f(djvS{8ZN`2pE|SZ*+?@S7go3b$cV{rywTv$&e0DfV3(tBr|Aa~9zY4J z15C@RC})mzhk5iU4&DoZe{)kY{z3$NPX+^}=sscfJDCAVglzYSn)>0<Xx<jMz}6OM zjiCt%rfng$;cC;i-P0I)GJ(^cG7#AlJr4pu&l5XaCXE3Q82Rc{gI~I?U13s<uH9J% zJd4>4A3#oOR5v3n4b`D8s(Y~KCF`5`qt}54cecI(8~s5fgRta$WFkwhl8Kcpc_Cl# zG_NyU-n-N-ggAEB61e?Db@Le+vsO5}9krQ7PfnQ{Qfsdf9-RhIhlEsLu~M*qutfS& z^jzsIvqX9mXLTY~Tp}H<Dey893<WSl{?O^HJy|04=rArNvTG2vMTM6W7V5VesyQ=V z?#DSOJI<-0`62!Vng#JzPS!YZ;_Oc4*tc>H@4OL-amnRmwi;+4u;Xun76i%B9lsQQ zKUY{Q3+-bf{oPKjQJrX0LgMFO*^S8fSF#E?zz$b$4QKPY-lFcLDew}~3<avy!7B{A z!fjpGR|6;ODQXj34D3DtnGh6laax|lfpbub_7-%`hZk7B@aK?_x<|$}2hSmPAJ~kv zY7$cYO?qF<ZLXl0Xt3jzUmClLp4i2&O2>|6NxgqoX7uR5fAFH$!{!idY~Z3*=b%ft zgLlOs!Da@I@-S%>*A~%tMt!;6<5~Dtbr?DY+_@ocqmVw3-?%A8=+rN)mg<2AI-N#& zbd!u;4iC6ggw+c3Izqcw!y@KtR?#70l_!P)GWxzSFqxOVX6nTp*4gitpx-0x_X<PV z*O6xWJ*0*Sw{rfTwwo)PofFED2lbR!JF#~lGSbgwjFBm#9Q^mlNM~a)ABEJf%xj3R zH%n%IooHW6pjr;Nd!8Z#PL=5^*O39eW&KWSKn8p&`Z8ZqW|B9K1Tj`n27F)h*o#Oo zlnATA&Ht<nNT-apKMW#F%I=WW2${<hJ-P8!3`YiCa0n7ewme~nUSV~)j6so@e?)(g z2bPJP10Ae}b|%Tp9ad9PId6Azo}J2hJ(3WZv*mWwQ@UB*h8`Dzv>=+g53X8&R#yu< z1jTZ25j0BPISy^xTK*6^QtStXK`bHu?2cTk;bwdg-5v8#o;ns~VCuvLK8*={&``&! zqjjB?o96!{tj-rT9KB&RQ0r#9?h|;@u9uKxH{AtXnPCMpU`zc^P&1u1+q`iqa0L2p z85#K^v`u&4zDP6O7gA^0PWMfpHgg8-7#|$&7C8$=x}Fr2;g$azS?JQJyq|7G3#(Qa zpgy*v9nq0mOi}J>cdfvhN=#_vC+vvaU|w=imo_4x!g^C`9!hnFVY5*en6z0;8_TrQ zP1<Ql(``8sX=!b_W~mW(XE^4se}xZII{)tJb1U}^R1pw|y@Om`Lb+GExx;besOC;U z0B^Ft5Db^TtLicR%bk7jMD(lC#ptgWxCzz{NSZ9ANUIKY^0IC)n-Bl{!)grnQ!pFB zP&dTfZ<QVEi^GgQZq!}@JGV1EU~`_kVRH9+0d%?(AU!bxt7N?Oh5oBYJlXC7R6(g! z;L06mMT?}pQb`k-3)0Ce1%-P{kyN_1;><waoXcUUVDzNf_IeH{xMc+3u~9fh7I*nT zo=eM3OW3v8uZWJ9tqvq3#N}Z!9LSVM0!YAGxw<wJ#$SA_Qs*vX3Chj$Axa88(Hys_ zv5fI!Csbk-)-|G8Ww26-j!!n75mMSp$CoLXv#U&@5$ccFx6!2L^~{>o>zU@^2s;!l z>RPDoHksZ;rmpE`!X{PKkMQ+@5AXr8ka%WEz%d+>hISb~!^fWRu){vS?E&sA1X~H3 znQ%g7ssYb+w=OjfX=W6J)p8+~Sy~o+6E%8I+4vjhZ-o#6{{v+?-wC$!hTQ$$YV~7G z<u0oqsY1g*>vO1*`!EIQwogKu_&8RppENn6e+Jgj+3o1KY+>viCsrR5Il}a&T~Sz# z6>%Z+h7BwzUr&>1o%82>#zP%%UN7Vn1fKEDA5@!ZuLF~XRhC;mdiZ31y5g;{S}D3Y zx#uvff6U8)?)r{MsOCbqAptZ5y*l3{pgBBubiPTTBa?3GbflSXu2#QoG{R2W`;EKc zYYXc6*hXCvyTVtax-hOe!{GdVtj~11=ba&B)mm)-uzKf8XW&^4e|5<ErHn-x_#2$0 zw^K=vASqO>D$sU-g$(eOZpDpFhx5Koq#r8j?2~FrASl;}|LE2cJ)R@kH~*!u8Yy~> zjAFek3ajs$Y$t_Pf%$%1dMsVfq3DcvID&a$mnQXx2ti;-U86=exSXXU;XaMey2#TU z^iQgXO~S(l#vMIjY>T_yMX%kjrTIVeQIDt1sEn-6+lC?AJqQ-HKT&*`UaUiS9!?zG zas)+qv0fBbryKmpqGC2FK!h6{9kCX7g9q*2@ip5SA;@a+#CvD9y^)=>J`wU(K4&#< z!e?Br+OR>gSuOd^W0J|<IKNWaZZ$rH#N<kPo^oPKuH1&FpnB|S*9oaiEgb4%cC^9l zVx*Z42&;z{yB#oXCeg!wPcHZ0^H#_Okf_3H$v9<nrLq?9Pb8izQd#SH6tJ>A_Nv|A z{wV&Qw{9QulbunC5E}6|Z+wjxiI=<|-~L6kY-z@^IC&f2{v~|7MrRy5CL?x0eEarj z!P3#0$BxOwHIdtsQ44pj9Xlo~+DE**7;*(z6hJKaF%dRKp`t`4x%eknJ`A#}>oL3| zC%B1rSB<&??ZPycSi<j^iYpUKRx{`2%qhKdvYTC9h_o~stX$;KU^-6slL$4~<ov@^ zE*<mKF$P8uFgm#?v~S|VIdLcJux(01>?F*r_<c5>VqyDQVqt$m;@~#edN9h)>2pkq zKE>(u8JtcZ-bqLLz^LVhz>PopCMxj6E{{LNx^e%Wx*FQMZs^%WasbJ8uG{1qhi(%= zCB4gs2|TfgWu4at1WxRrjzw$&|EVeiF+zx|>7^z_O-LS4OH@rEnHp#^OE5bb1-+04 z!ybIOvHMlO1CiCA4{;Gb(nV7}k2JT0-!0+v%0DxB{{zcvd2{|kXMV^R9k#$e#cS7i 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 a%M<;8qK6H-`QKLDk1m@`OLAs(Wd8#NQUsg; diff --git a/Python314_4_x86_Template/DLLs/py.ico b/Python314_4_x86_Template/DLLs/py.ico deleted file mode 100644 index 1d8a79bfb310c71c30d2d59a975c8bae82775ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75809 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 TCSTJ3+Y&Q=kqw-q4u$>!A5o_i diff --git a/Python314_4_x86_Template/DLLs/pyc.ico b/Python314_4_x86_Template/DLLs/pyc.ico deleted file mode 100644 index 74dde81b649eedaee58db05851f4f8c4af246501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78396 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 a2|up36ZGeS|LJd-L*rL{4|UXWasLa3XY@J% diff --git a/Python314_4_x86_Template/DLLs/pyd.ico b/Python314_4_x86_Template/DLLs/pyd.ico deleted file mode 100644 index 9f6cb601afb65ab1821af0d7418fa6dcfd83e16d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83351 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 BnqL3_ diff --git a/Python314_4_x86_Template/DLLs/pyexpat.pyd b/Python314_4_x86_Template/DLLs/pyexpat.pyd deleted file mode 100644 index 3a42a5e147ad4c2de937b35f9dea01b99ea69beb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193880 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 aY=;SZzEys<X3T9lR>5^(GPoDZzyJV&kbb=Y diff --git a/Python314_4_x86_Template/DLLs/python_lib.cat b/Python314_4_x86_Template/DLLs/python_lib.cat deleted file mode 100644 index 4f777b62b3d66419946d7435361af57f41b85c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120167 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 CXGFCC diff --git a/Python314_4_x86_Template/DLLs/select.pyd b/Python314_4_x86_Template/DLLs/select.pyd deleted file mode 100644 index fcb6037b04900c136e098d64c2e6ee88356c1d3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30552 zcmeIa2S8I#vnYN-LXjdUqJXFoP*Eu-354E+ASeg|ilCGLp$Q452q-9BW5nJoh+<dl zT~QFQW9KIpY!C$-SWwZt*%Lt2U%B7^-TU4Dd+#3H-Lt#1v$M0aGqbxV`h+aP$QXuE zAjo7Gb`(<dxDfH*M=B%?>pAFnPwZfiD}#@cysr!njEfgglli<@K0ApT#pZH(LTV(3 z$`^5|@m#9AZvZuk7tJx(&`>q*K)v|Wz&*EDB!BA+_g_E#b{F#ggQm61Q$a^6Y=1<Q zi`pMT>fKR)d&RVGO_1N!Z(4f|QJ&g<i%63@(uLpTc|MW%kB^E&ef>HzKNg00lN7Nb zJ#WW%*41MQgVjhqO)*_4F_D+9F@RJH0#4+$h<61HQ<7JArC25u08>3zVVDBu0-S<I zs9jeo&r<E7Unot4G!<1xKv$~hrQ>nIuu0bNo{V9-(2o|p2X@x|N$SV^W$u8^=0Ab! zEHW2zQiYJI>jx2{4~-QGL$`+tRGIUm*+Mpk&FTdefD`Kt0r8^S;{siq%fYZo2!|g8 zpcylV(Cu--urhPLfFA{A#8@NXMI8dd+wE~d`1qVe9sr`TBOVa6IdlVpR~HN$^>fMp z<o=@^m>_8$A0QcU6vwnAXD0@US?vs&<ZaF@6)fFc(lhUZ(4dMCZ3)Q{P`YGj<dn(8 zB$3j1+0C2^%IKU*^(+|)=7xV+!fFo>n_T6hB7;ZrJhc2WdH{b;vwFZpiAW`<S{B5R zi6^wj8PhN=vD0`l>%BOmO>8IA*@e2V&8bkytJBQ=1RWK4sEAoA_A^y93tAv6aie^4 zL1M2URFSx;ODvBzQ6$0>T6rHebN8TnB{_9u7qQYrnNB7`R|E9re31!LfH1~|D%N{| z!z4C&GGXtWGK#I1aDXeM_Sg9D0l@y6sArZ839CR!95|OE!z3AP9R-6WES1rS(Bw9; zUwaiogXNT|SAo8i$zDu=sOThg80QY7lHoF)GRVMCI%(>KIHn|01-cNIfhq}EPAySG z7O4hw)r5xulO`kP{WXk)^*%hzg#hZ#-xje?J7TZsz3nWO^pTQEMxEv$7i_#NnIhBi zgpTvd3VcZglhrlduN6=jIjJg`<g>)5J>x-;OebAVn3&a;S0+qi)G=hXVJhivnu9Qz zs9iR_3xm)=qU6^h5TdpK7*Zk8Qa!IM)xb^S^L}&zWp++_mI_v2nUzs4VYPus5X0%1 zpx>Dh9>yr^98AY}p0yp#jleLemJWs$ffCVTRETqpGoc7(LNlmL>~5?jVS!M=OCL## zgryZ!<!(%cX~AMNwcU+zd&LSMOQg(@z1R+g31q(lDD{)+-0Gw@&84Uw-qCa&B+4i- za1K!xm-zEMGRn{x<`exhE=yHmIiL|GkO8NIpG;_MNd%o`1RkxNHkr^MC*9Zv%P^J8 z#r(g;cU)19uK=19<Qh)`{acl5903UuFTa97V|U04K{cYh<SJxxJ>?nc#&#%yWkV59 zG1h{mGj}-%u*BQg01(AN3%`P8#@;Hx$>|92Edmr8_kl$-H&G6#3xKJB4FLvf0iX{6 zA~1Jj<GeD>xhw#)Z`JgDXkV`BTMJ94AB@$M2s*2X@v4Xejdh#UCGN(S&`1|j98v?B zPBm0Z-pX`<axKOMTW@3IAo<dPE>TyS?q?Y{Y@u<%e1b+lP4|m1i-bu5_UU3Ua?kOa z?t#Ws{{TQ~Blb3Sht5o7I_`jyn0uMdB7z8zPt;A04Mj6=5lpyDXD(!60C~A!c!6wN zAXygzRi-naXrTfaO#qu|-VM$9S<qxQ2mpU(0;#~;*kQash{`qsPV47^1OW~c2sZMe zAdIkh|BjyAWSBJ=kCseiUz7_tB_ML%kov*mStqCE#X}$f#_j?MntV@~vW{0j;1qgb zevo7UbuQ8#Fh`I_6D+9(?jdmL`>#YHnoLO>6rzUGM^K37;4<_B@~zsrN}7643<^jf z%XID&1ZV*>s1gmNo$~5niFc?cZKSx!BJ}{-b$KNS2Jo`4M7f(OP!=f#$*!ZCk3#*w zR(U`XqF-9@8OWSZ&@RoAzax^RB6x>2Ha`N$2V!8w!BX3ZgtXI;AY%d#*b}fNT0s&= zw8V41lhYM*zEfuPOQ0l>C&ukUOHHRnJ}MY771RV&r;{bA>JqIWS+WYKL+L7DOHPG) zcvxsTTHGC$stbR>#2}eSMW(YE&`2^sh$W%wFhGeCAXE$TLxxW!uS{es@jyzWTgfnq z2UK(~(UEw7Y80w>w1Q#DyM#pE9WkD6-8mA57_HR5H@<ff#5fAr=K)n7guC{;ftJIl z$YBVP`YRZ9ISg{aus??hXOzkLg!un|0==EHis<c{&A5XgA80|;5)z^!RtkgJF(%ff z439gBqzBD>DO58qfQWz!S$(#^RTf$fcA1#7xI#Z9V$TQ!lyZ9wWS>N&@)xVf7zUjo zfs<lFMvjyuq@t)7iWC`TE={<U3AUq2QK|)r=HarYK{65QPYMeI3vSZN$<V?ymzP0} zpHvg{R&eM!bu2+EZjl|PC0*77>=-8HK-1vdGR@pu&_+51Y{y*I(*vZrp^a6nb~JrC zj?_T#<2CcnL#9d*WdIc>T>zlDWkMh6bEGW_L1d(7Ad16a%yI278fg<ue{e7e_HZdv z4or<}gNnHKsJ4ozl_P{@iP7uieSQb^CPn%nw@&0HjZ_8!dYj{f2?tG-rpaj)_K}Iy z6BJ;e5~k#;Os5&p$?nJ$>-~Vqz!uGUp^Y-pQ|V&_4hvG^^EO(n0T{7hST7gK6O^UB z0PSVqL@DCLJQzR`YMfU#o5Cn-O7<)!P<`|ei=K6GK{^V?HkVZ|7PZS6q9Ec)KchkK zhiQ^(01Ej~P&b`z&@L+h93B;^0Fe^RxB!fHe<#OEjMESxB$dAsC=orAiRz_;3Hl); zJpdgcvO}Qca)NqXEh76SVoip6o=l`^>xc-Rt;{HUasNmEIWm$^HAki(RFs5jHPIjn zKnqQJ0d@Kos6ftcF=XV$i@qV<-cdZit9UcgnWz}hiH7BU6d48hAuRKu96W>$@hXMk z1cUnq6$#K3w7O!Bj4bk$qqh2iT4*INawmvrGM4x>OGx8kt@!AnwF3Xt2_(SPoC@7? z2}jEK_=91;^NLX4R=OZ`KpL?sv;hl<1%aniIKq(R187c$I!UA`%>xPk(brC(9hPPX z2uzrcDUv9(Zu`JXTn`FXCety2S3jAKF(jeofGVrm7-&rBC)1%q5v+Q}1cl%$!;7Wk zVJo8X48=P2C?0Sh#a6W_cDw~~%zPcpA0-;^iQIr1B2m0dBtxo+#H<36bqf{SAd#@J z;$|YH6u*VEfTdF0j`Df;!E#qA+Q2&rBVk3TviQ9prd6dVg%}ZDrPvH_XvJ13wspKE zP$o?+!>TgdA&-`xJTD<MkJwwW4f1E}F^Pr?)T4Zy0S)A>9@w<#0vdWwbDsj%d+?k6 zz&mEWm+5HXh{!euY`<9TG93)EH1wh?e<@%!1Lq6~ptl7+?F?2k1GZ3SFO<vsoEUUw zT!YJr)5r<6zb2&QT@?+LE<?^~HEg4lkNHAnQ%@*W)#x=E!_L-gsa3;*_QSM3T@M!% zWQGxRq1o-7<A|gI6ZIfwP#t;&rGO?kP6c$AOh*Mu%87R=4VG<i`B5z>FF&e_V(A;y zttTZ%#aQe~kv4Yb6d;GXfc?TmiKhd(TJwl&pMvqa<QjNUn)=p++|r~Y8KZ9Nqs~{A zj8Y+=wPmUE)pO37*xwN~61GlquIckc>3&$XAS~4ABBZ2G8$+iOKS~qDzD5XiN-n<D z+}9IS=39DMSa~TatX!HUZvcxQlt7cNGzs#4(zOtSY88^{W#!UkkSQgVgEp@LoVjJe zuqw-?tD!WvOhiBw$lsNvbKs@v6#z>!;7yte5oBOsQayNuj`fHoLaZU5K4_tLETIXY zbPZ%8U1@)S3l0t~mr6ky0R`%DrZ5Jn0V*z+;sh4WTy01ZK?6|ni+&Izxyew$M9P(l zCeVN+ore_XJ3s<NQs`xX@tHiM3hkc2YjD$xQWCM&G98CQ6HG`!d9?Ef-w?bsk|<Id zDW_s6tbRi|CG$~J7>Q<_4I(T<o)wOymo?!z7i3}$M6Xx_Ct^z?Mu1`s2O@TXxKa`I zM*{xCwoFm_6u5dhK_#vYsog2CVmcK3QJ)alAlia$1B)G61cyjkSw~R@o&AZtkEy}3 zi?N*x6Rjn30?9ds>PDXR8!z1t3K5w`;jo-kV=R3zAVl_{l+-jx!fKXaj0;&dfVNC? z*;&b1qy#$v=)V~=G<9JB3b-^g5r2Cy%8ntan$yWT#BEHdl$oK9iFza5nh)S8ods!d zFk<P^K!8C~AXjP=yK6OxkII$d31n$25MM<xz6`@JAoNZGh~Y<&Nl=~Qy!kL7alu>^ zFV98s`b-obN=NajRET5dFW*cg1*?c;y^u)ql8IzXB9ZKlgJj*pymgRBSQK&IGI%LK zFNN?@Mf8g_oy4U*!B3orOjZGF8=@o;D1jD0OciSzZ1Y{JSi6wc6SEG=bSOymyah-& zkLV<x&{Rm#7qHquJ0VRELZbmvB~*do0y-=>>_T~!qC4UrJmmosPiKMzoIsI%t3WSE z;skb1RdTIkiQLVpq}aFeUx1T=VCN!O6#WxyhvVLn#N`=bTG28q)Ftd(w8V+VS_KeB z*26Y}IJ^MW$~f;Q=166tHaKbO5Dhdm*4yY}f>fAFv`l17=_XiZGEpC~lHA@+jB^G% z8;5kK)ETOBDhxoz&&ijk#v~{v<usdADSCGdIzhG5zG>#ZfvE=?7-a<+wTue^nwuo8 zlNX7V#VHiAuZlQGUBarB_&fu?X1$B&a=aw0dMmDwlc-iLVckz4S&im!MQYWP60qRk zo5J3QRXgOZvrN;mOo@aEjT|GC6fmKIV=_u~9Q~BYn6M`lLZS?XWY8ly8h$_|Niv}x z9WRL|ywAyKR~Cmhi$kTF^XC8?5|k%(ky#L0D<+Et6!BOUae%rc^uC1kOdQ%KW;K5* zM~8I64s;4R8MUNzW1^{R2c5sPWj&LihSCJ%Nw%!^^Z|?uz>f}4RMU+i8TTa<-WMUR zN;Lc+&Z$<ASOub&$KT~VMj~2_0K^1<n5g{(^8p@r?o6o7siw#wfk-)I&f_;o$>_>k z7}dzz*w<+0jRknd1x-?onDrLCrU`Hk`4*1Qa_W_guI98UY37Xp0Q;+&d4`Y@WaU(= z$gzVc$gzJcrwY>~8U&HmRD!hQ7)GusLi8Km%c=h+ZveUjD@J8v0@nVXXdLu*ydH|7 zOQUl}SMAS<aQmwwQ=(-KAzLmv^>uRGawMRdyCZ2*lUEWgKCzlHEE5xI4FSdYUET}P z;U|_9!&ER~#P9w2K!0A6D#nGgZ=e~R?B_Hp6?=k|WL+DMVWdyjjR;~t-8FI~NSDV% znFDFMW=`W7c|T&J0-YI@U4RXQ3j|xmDKJ=MSY<;TaPT9B*buQL5hoLIA`!ze3e-ju zaRd=hA>u$Ho&+&i-0uGvWk~go&v8VHjs*HPeM;8ng9=!gP$ld0AxK5untMXqVX5c5 zb>5aG9JQSS!XQ#Ux&SQ1h4SqRFq=ZN?JA(Mpm4FgPzzie$SsxUsGz})E<^^!y;=f( z*U?2pIZ`>};RuK_vbulSry8SbNyQNCEjVG-;KZB_UM9iB6ytI;r2q1;rWY_<|NMM$ z!LTW=80G<C1OzPz-ca@o!bJ#sAgqCq4<QZ$dd4|pm^%bx2<U;Upv;vJct`@^QE|aA zDuiaJzX+ie!UhP7Aml=r0RcVruy1?~LDdPv^dY!I_zvMEggX$9LMVZ-1VSo=s{nf# z!a4{GAk2Ue2Vo+FQ4nwleIa}S(|#X99JHAT0f&H|gP^MAZ~w6vIpxS%XY*r4NgS?F zK&6>6s7WFLaj7ZbOcQaqQ5*p#<ngFUY;GDgCO(lvjphiV`0>d?9$$biJq4UZPL$9D z1R4{@CvkWpVHXBAH71eA7E*b9>Np;k^IJWa$2H?}V%fs@=^R9{92JH|CGrHQfWznW z_^1LN;^q}DS4BX9K$M)!;{&;DK^iwIj?d%rL;|Xpg)f!Ih0YU&@yP)7E3xLPsv|~> zpnCcE`T7UCjtiuY^9}TJV^N_{)t5^Riswf2QUs=eBQcFC;6+X4pdR>L-EpGr5&j9> z_*7FWJ2CP14iKFk>@b#-YD(oN#tVd|)D(G=Do;8X<%qaqO0^iSYG$UY8pMtlQbk;0 zd?IwiK}<{HLGQl~gCL2|VMoJs0E~c_#Gy_F+Nr!4!~z&)U>s`2hglTH@i`o5&^f(m zH1R?XpB<UV5ugUYAs6z{eRc|v!ih%s?No^YP|eJU!Vda=bdTQRxv{Fm`2G?qg&!|O zP{i=Npb+_NF4d5e8pTN##`C!BL~0a|8x62LuA!<|jC?8(Gdc&@RZWF^cs>YdJf9P7 zN=;@91k}l)1Ve-{dLBf4D&n;O_~H8NFi~SpJORV*m}$grf*HKX1Q2JC0-%j5NJ8@* z4{k#&hp!sT6AC$8Y7C#31a%0S%QG2HP2vdSc+v1R0Dyvg5OWs;tOptHm<(R$=q!bC zU9&+IBy*zTW8z^V*woIIL#!t>NP#^}6fC+lm=4vBbp#wVOXdMJRIVr~5(Ws9B}W3H zz-LDxwh^-`;1DRxsZ`)0pn>7CBL%R)Rbf<enL}J6C{Bq7vbmh;2pue6Dy-iQs`(tD zh|i@?XD5n4Y6vPtXkCHW$mNRQFU%O9&k-b}dE>?+k`U@{;-}gre)d!jJ1P!Mv5*}P zlp;WZ2nYiWfp7vvKjHdSI8}vlpiGbq6Y>XS{^ze})$ZC2KJY-RK_uWrcir%pp+)}x z^#OgGX$?jd+BbvY{Rs^!{7-mt0so(&dE2eO&Tl}F4+o!9U~l1M@U4-&Rc9R>hhlvo znAkut{<#hvUb;YI2dH!CsFOqd9>ey5_~e3|NzPmc{eaoRY9ZBy^vnPZy9VJkzzhdG z%OPBc&<-JY2yB)h%!jZL!WRe%L&1xNz=wcF>7ose0JNP##xSE{un~k}{{Z)Z!A%zV zRVvzJPu4bV{=PTL2(i}PZVGz}ZA#>n$awCQlz1+KK1Hso&6A@ep&mVbI|6!#JsURK zEzleFgT5Uhz9TVC;-We@P$IrLF^@+dgBTNgBbZO{0s#)kqhew)>^<ZuDDUPUXgtXc zybcV5)8_7Fuv>?*{#52gz`>byH#jc>j`CBP9|5QGa~T1r{!>{X0jC9J1Z@N@fdm{J zN?~zIKwrmqFCdrlK8d`sAhqK=7mz0`5$Ke|8BgaW3X`HCk7Nd&xptJ#m@y+d5{8YX z+jZg*Mj3m#68*ytwF5UQ3nBW??OqlrhlAazoK8N#1<K*zasXR|`X>l7PK8&j^P3`b zj+{vJZ4siWV?O8zrUuH8{C1QvP}wsm124X_%o3H=fI#kniRyqu%Ypc=ryi2dZ++l2 z8%qTlGmjJqP&F2TVTF(o-}o5gz)8qQz=3>^t}=oKRQ~IO&Q(xZO-I_9&(W8!+s^#2 z^?v<-tZO%T?}WS64UdHZrZo-%!rxh6+pXSZFs2m%0o8YZ0ED2)ANWIpiq7B(d2a}Q z5O6&V3x%}P!!b`zi^lxYytwhg@J_$Y1TF542l3S%2Uc|}>kEEyI+W>lD~p3N*tB3a z-O5I|fWHT2Xudk1WF$#Y_Gix*m;ZNs{Gb4OID>8;od}C^48<=E+|elb<S^U|oD@FS z1ALPJAs;L;hPf(*`=tefO%EqZ<vxKg;oe}a6sU9M$A-JbaiXUB@dSj=#Ri=BU{YCp zez<Q`ln4wvEUUgGC;=}ZJb*o&69^t9I~u!<aEBvT0(uig2{G(LN4o%yu!Dd|)GjqD zd?Ion03~we4-oC#Ip8b7M{id;+5nW?0rX)DqvBx0fki9$rTGxfez<FNw47*vP7G#A z_Dc)s*q4NRumwWwGxXvOj$ZgUP6~z{hjw!4a94o`cxdijn-y$y2R*(4a$+uY^iHrK zAU+n{Pv|+Ut7msk3~)6b#zs?w(E`!YiExk<KAI!MLOO5-rX_a_?I=(di2S2)KX%kq z40G(_zN-LD0%BlPB0DJ=OYZ6cp$ZVPg&gc_=O}=EUP4Y1hCTVgPhbz4!Hx|I5D&ML zKT#y7(*E}zF&#uF>e`<pfDK#c^kK<q;Gc3CG)qE|hG6000%3Hx5JnRo&yC@QgBK*^ z^U}hRiwEC$Vo97NaMLi%3JaHe>)~;1Zge7tZy6rNOG@H#v59W}6UGI4`LJk~xLi7o z0G7|^!lu~<1FZ4jJoA$<+aK@Y9LyC1<q;PSo*q<&BcayA03$ahK32r%gmc*-HYwrY zK~5+7Mp)w6iSaYKsyN)~@v#3xyI17P5dCyOfN-XQauTA=4(#O-<(w#ykQ4q>ML*~d z!C@FXIo>QuU<ST{SrlJr2H*4|huAEUW=1oU59y`i1g?DC(On`7LI$K`*fvF&y1%Tp zSAeN@Lko&4^yBkjQ!T)%6$61G@m!ey&LZp(*-Oxo;qg5<Z1BLLl7oDAY!+p_h{I3w z<M3hQ1l#c_jvEhXgw7p)$L<vk9@>vS<;xZdF>Nvux-<a@84^qRDnW0U6UjYZfS4r* z_KuI_v-xRmuv7)uVlt93Ib#FRa`Qx5U^h_f&WRMo!tSV(%CRi}aV+mn4fSW*`rliI zZu0(jdfcaX#=X-%B0T6FJ)JfZ`Ox*cm=?GP=-`&{b5LF9gTB})?F)WC6eQDsx4o#i z6Sgx&ZK@$?K|v<$86qHP^#dFbaOkTO?tjvMl>-U{^Qgd9wEwVy^k)p{GKX;gek(_F z8}}#haH;((5`ZLOsC*H;WyXMRK*G`SAV0BAu`>tzA?MVjL@I2*1+aT}G^Cm1hEzCp z<DuQOqv3==4>KD>sz3<ZmYoQS%h526BQSJ!(ol7PGY?KuB%D<N0<OT(5H{;}0x+LR zY=K!)d=#H2;Kc~dKt0>B1xe=9X@=+wFFpn|`^4_O0V*oh0j#({=mo0(KZuQCNVJ2N zaM&P%<DImQJd~hw8R&%*?Z=Ow4mLQJBj~E^Ud<x(F$~)qjvo@Ki70k7WDC5w(|J=l zd_$@z-ZcuTN=L&Ou+1Dpi!L+{7JuD|gT+rIIaqX!jcD!w97%>F$H@3Zp!%PO`x7`~ zV+Roq?BwLc_$a`{<Nly)FdUS17;5T7(35O9?fOyMad63rh98P}MLQbK<j`>%&C<%+ zjAmuYG_zzxS(&k|VmM|vZWGPna2U~y7(Ao<xVz)G{(IaED;mQl(w1#z6>ST+V<Mx? zY&i62GdA7Q5~tIxVr&`gzr=0x_qZ+D^ccDghhb*Lh_p4cw6vs|MY3(9%%YjL(UxpW zHj~4!`D@(fw7<tri(y(bqpX=`HaLf7W=Ut*n%P=KMw;0$qVX7JG#<^i{%h<soNCcE z1+;(Y$%cc+ShHz#v&fi82JnbuV+I_vGPAUaiMGPoG%L1kHy$}y{5t0j7C(uHT)?^k z{j+!xYxBoy0`CKzLW3`X4orWn8wXhYv3_h}oNEd?0P9%taYA9TorOimsyFXi_2xj8 zMSzc&1&9~ZqC*}#aT+?og5Wq<{DiSns4f1CfIk^`G$)zEjRr;4x$Yf0ON6c+dg+JQ zcWNpxXdpz34mp~RhR_v*Zb;>_lOW^Msj<vE$TfE(97{7dI4<P#5(S1xPyPARr9GME zIQlb0KhZ*pgU5H}N5#Qeb`)}?91TZ6jVKaU?O0A)Am|uSxJ)Y$Ev6;S(lRP4h87)T zNKIsOV@2#(Ie4eaaj^LF@%<<#I02mcF?vGDZzEemIuQ%N!XakCmsSCo7v_tNgS;2S z9`KHyQ<OK~k=^Ktk+BbCrdDSP+hgJZb3*tR9a$oQduM17fC(`^7LReUSilw!r!^eF z%*A3baJ{i7V7N%Iaqj%H#3G4p^hB&bl)C{;5;!1ifKLNz*pLHf86H2#3&G;?poR*4 z@Bp6>O92QzKv1D49wvgiXebdvuLur3F7QJqQWqWW04u<v2>OzLg8Laiq66WD^Ak+D zTl<Mn#s>^P@G}5{hFL<4_=<dfHGoIs6%w#qpeM20NPh0e9rK1i^b93sK|60~6HBx} z6ePo#5hr6|+^``axbt%v726JDrxV<y!Q0Q+|6^P-hjzdB)*Ukr5Tk%HU!aHsBQpmM zqIvqemNeK|*~0$JtQ&Q1zz2We%|ExJLAy>2XtsTTLiv%m6Tx5K4!$5ML;UTOGnA7{ zi~uM_k{1P>GbcD1P4HPhpMKDu2eKj}>i<g4Py;$K|3Ab3Dh0pFfIGA!!RkV?*-6=t z6@d1BX!Qg_Es}Eq(D}2>!VNA0_@C$hMh?JksSgRmlyMQBkKe{UXk%#sv?SUb+D=*n zO^I$occIUq7t!z1U(>(P6&O7k+Km2;F^n)q6k{sG&N3L>nS+*REUPW=TE4T?vof?A zVdZY+Yc<I#$x39EVfEbVyOkQ#gc-p+&b-RJ#q4iA&w7!yosEml3!B$AA8izE)opcb zX|~q3uC~RtH*6o-Vs?sl1MQ6La67);47=TSN9@kqJ+=F47i~Y?-o`=Xu+X8x;fh18 z!y|_l2RKG@RCny{sOvb;afqX-Bg4_o(bdt@(bqA^G2AiMQQ(;FnB_Rfak1lC$DNKR z94|TEa(wSdc2alJbFy%Xcj7zcI4yKq>r~{l)#-rKF(-598_q4xpkA<(FxN)-L_8gr z;G6Jm_#XTqejG2uEAcwK75{=`wB9rWS}tud?GUY+wv4`;euRFV{(%03{(;^DxHOpI z3Op)gY+;;aR5ETbrdl4i>}{oMH5mBA0GsM;6=)S|HPuRBwcTpJ)d{OgtE*PER!^;( zty-*lGj*AUz%v@SdCp9C<|Jk)b1`!xb1QQ<^8mAqS;_o^`IPyB`G)y{`ISksR<_o# z*0$EO9%OBAjf|HG(B6z2(5STe%tg#q%(qMx>uq+`cDL-B?cUm{+iRh7V?PWH6N|<( z@mzd9jP59mt^%*dFXJ_U<A0w2H#k82wp>90!?UefN<Bv8d**-AASo*pW?M6%h^{~) z(KK-lr5+Lao+J*Lq5waU$EPT%j#MI1NZHm3Bue2p+#B!Ltwa;=K_+2^luZhm7*6}8 zErlv>QH|iex6->Oy<fMsb+XDre(<c!LO<vE8^-kwU2UgXnBD&do~?Kp&n6!%BrA{< z6tn_Y-MD^hvfgq}?X>D%Wph>|oE?;s)PbH9ni}3ii9CU#q^&R^fHn{}Kp9nSoi3-D z>c->4Co#lkl;(+hpn9^l^N;#2*Bkc!@X>*M+e-E4!T(?2#^DR)MI5TD2+oDkZk|fV z={P>Hp9aL1G$zf40jo8npN6HCJPTVsJmkNRuxtgx?o5J7BWEjU!XzuGDrCb4Xa^RL zP|i_`{kCC!eO1|!%?+a{vo%ZV!oS`Qxyvg2nxghLv$Z5C#3wDFwlF_8h()d16!^7j z)0ufyT&vbiIu#b<o{q^|;iVxvy}Gu~$CJa9UyoWl@`KtErDxybwK>}s^IKNsHsv_> ze0FzQZ_mM(G+uoi?R8}B=L=Q+4(IyHj_z7>R}kx!_cZ^MwM)&A{96wXolA;LxV=5~ zq#4ia^Yg?$eZKXny2<Hl{qPd^WZ3Y6Z;@+tOz$W*923(S#gSEa@A${6RG7b?IC6v9 zoXgEy50>m`QoN!Uw8c)1GR$Cc>;|()GmC+z@0C$6QS>e{zKTz;dcrT{Tb)jOye^0L zEU6!FQL7`CFS1!sQ}4CrMBU9c{NnAPxp6-Hn`e?{PpkcQN@LHGXwM^)d1*rrU0J() zaPIXtnsmpRLGxQ#%HHYqVY)r7rc07GTw)4$Dz?=NLg^Ei#jYHpT509DY-QtFcS+{A zvu*E%de8BXN?!*DIVl-Prt0Jm^O~8x^kT47G+OFx^S&w|t?=-{CsW41ITdbmR=Xip zeR+uad6!_5%bLbz&BuGB7_GJ`Ic#vR>NxfAUF+J})_YZ++E1(F3i@ZP=9fOpX9Nom z^~GlTB~|8Y-}_c!o9$?ft%<mId|8>|cvH(=eyg?ToH(GEx!(s@m~wPzPUyiX!J9os z%Y7qEPFvreyhQ<4D5*FQ_s4s}QW&5~BFQKeSZw*YCdzB0ydqA91RsD3dQ$pQ`c%)l zk&ri{|3$r36y;&p{Iq=Iwr#?-lzMdN0v!^<fOVHUSezhtBy4ZOg9g1uvt@32<1W4M zTOPfIyjVf<gqdltv&sKlU%kT#A)!Jy{QX*4gs{iH!2=idO*(J9a7xVFsQ12?Gg^9k zyJ$&B8}Dte-qW(Y|F!jsO<qpI!nn!LCz^5$vS$U{oA`%EzqBQ+3N5CJ|L}g7EJ|8t z-HJD!H*jI8K;yE(n4SA~yxO`riWF_Qjec|%-Q+;5z-;ls`!tf;r_rh<@9vIyH8G;X zRHb;POX*4BF#kDsPS1T{Jx|Pyojc&eh0wz9hj-d#-ql~}(2r^8I&hcI?VJV&n^V5{ zi@@zS4^ztN)7d9Vb<dB~Jy4c;`^fUru<<^I?ah;RNNblJ++zM}$-_q7^ua+7CPaNY zlXPX!jgl0T<f<o=?Ix?-m^`i;TXEoV4s&n5DrbuD<ICn53Btm+V_&~nR=mrvWzMU+ zcJK>`uNgt7pFeGLz4$zO&w=9RNzHj{F26bUvUQ^Fu_=Nzd(Wrz%L%Tt*4O0+ZgIVF z*hp0Dw&r<C`iit8t_5eB?`IZnyq+SO6mF$mKSV!PE#vBtFUqRV*n?|t89Z06WUhX{ zqNY;k`?xE2_ej>)_5DVvTypBx+=lJNJ5GFxwy_VttX^YvTBt`ZIlseu6PuasG@y0l z$(5mXV^i(TKG?sBFp_>~Rx@HQ-@7X2Ou)^VN8`tgSP>Inv8?iaICs~o)VY~TQ#S2? zwF%Ew`i^H)8sz$1n}I3644ff*ta(opHvlsWxnHCP5Bb+r`bd1ZT&4dwC!u<|Q{~DW zzSMIIpt5}3sBW%QP}@jrGjU7Y8n>p~Fswjpqbv>Y$l~cg_l?XSm<ttcC0{-#mdB;_ z2BC)nW$hlLIB@057ebj4J{Xm$YU}$ESBKO9I9w)<qCDUd3O>VtQ_xNz^4|gB*`!U~ znL(&-(n3((q<IS2uqm&RElX*<UqAPh_hrBAFSd26LyyOvewLJ=Ba+r^yq>$mR=MP? zIx~q*ALrS-pOQ^*;okK0`zwa@n%lNMY{dS?;*wOe4Dv(Qg#DTRk&DkvzrFcNKdn7i z&0Fd20TCaHZ%Kk1grT>qd=?wsOK-(SyAF)CoHx!VEjj(E-;znxY7hTPm+;Rul9%>^ zCpJ4a9of`7I(bI<&O_>Bm=)Za%-3sHFQ+Zux2r<Ow0A#S_Nl4Umb@6TQPS8Wr_W%| zl2gWRz8-U1Dw>z~zx1GNnIV01@!A;gK0Q<x56N;J_AbQk`dUrrI@TJBTgc&i3A{7+ z3ud*R8!m3$x%_EaJ4r$5vU+%g`jY;|9v_Vc1uQ#Oj-M}~?g<~(v;ylN^Lo&_-gG<m zx}82jl_w4in>Iywz;O18ejMMek62gZR@O&7dZ)j8&fHO2{gw_qp*Jkud2gge<&>$T zzNd{D>;CRj_^Pmni~08>jJ=0P4?du?x+GzUew1t0*14^r>1x|&Yu{ZRQ9;_aBj?Q- zx$4YT&;w(tgR8@=%hja<oFM(AOqDZn2UI(RVudrh{3A9AQ&Itqsi>$-CM)&t(4Fk; zO$8@ZOP0)y&RYDwkd?jk+hblg&3j2OL(_W6r3X<9-l*iqAKClb#eO3`2q8D3=;D1d z`*1dnznT{}+hQJT?v4jrX(tA1U}1PH0vJSzz{Bt<g&~EL@+Wqjho+>Y{BjnWJT;z| zEU<{;Ct7s*L__GfmpeqAiwIub0w98ggkD`C!s+JF1kc*iIV2K^lC=uYT8>9|mf#Bc zlm4+=SVMw;y<;J6*3}Cse{e@Ha0$eV5+wgJKvaasAcjyW;dm%MUP--!_1-xdBogk5 zJ9pwzAoXSZ6UFX;&%&RRj6MwE@zc!Xgh{xHl2UAzI=IE%mv5&9bZGD4_<7`Fvht%x zPrUm+*}KzYz3N!irF)$H?AAnXuVe31NpilG^X{?2q3tvHEqw>H^Z1^Yt4<`}$VoaQ zt|-wn4NWd+E$VOd@sn3tlh)q;V_IbVrwp3)vU_G>qgL<qAHTFEeDX}6##84E&yH{K zT=?ozPMn5+6)&N^lr`T!l9hinX8!!CUVE-;7A`+BJA1S3)tE6_+x>f_(iaBX*B4Dw z9it`7@Y^_Q%An+3_wTNATUs4|efDJCB>^v$hMjw@-)NHa$K17Hw;LPu9@ExboH(<` zGSA!RsIgns$>~$<ch{L55*shtI3dYmYgi9m|JxOfZGMbP2`8q?dgSY$9^f@)7{%l8 z$%x^Lo65#kdbISl+{3xEe~a7mMX&T1@0zu6%dqP*{o#kcc!l4%;-7WnMv|yLg;J-- z%scTt;Cpb6j+xg(^~5llTGf&{PCXBl9ax`t;oGClv%b)KZ_54Pw^ooDsMc&Xud&AF zi_M|_7a!BSP6VVHZi;4>6$Oh1&OYYpyJ%b7I-3pa2TU+4*mPmBn(iUt<xEYxJWH#} z;pzzu<K~x$>SnZj9&(qlL3dgXB~U;fBTM-fJapN;`0B4aNAF42KJ?_P>chM%%Zs;1 z)Q#8c(^PVOM=ATu>oL`bT}X;IGwSp;M!!4g<u~Mevb$9GOpiOaukSr>WAK^3{M5Gz zzSEZI^v1K5Lts}ks>=dmnBvzNQ|Q|4N1?<<Q}Gw6!J~e*LjSa>fh#MJZrId}>{`G- zTR`{-ii*DCfol`09~eT|z|aU&NCVpklEk1{F*;3QXZF9;4FA&}<%a(1bZ7da&1F(* zUC7tLtMuIp`+YV4mhy)Vcg&V#msj_&{m+i+HG0qMwd(A)>n-Y|P9%@sqO3e_-}K_m zq%T=7nz>2BsuK&Gra!*b<GRfTl?u~7^c7FdJzrGCjpn81zj_o<gtKH%gvKQUofHNP z9G&%XpXJoR?eq2oY#TKxa_Xs?oY>KuMotNzy!6h8BO_)cy}vY5I_r-C`>*U@s%Os1 zir+tfWnpN1Oi<*~N|D8ms4G;B;!!6<4yJ_mp}&4Nph;!>i~tSCn)}KN&YN!WvUYxx z^J$Z2)cvLnt6W2lPPx>$Rz&|2BJ}iI<!s*PGV4s+YC8vuX?Luy_T3t|zolf#hexe~ zF?rUbY<#B|D&_UY=X@kzEqL1FwpUhkuiZRr=NT*d1k;#ClzT=;4I8Kn4<_$>TzY1| zqd<FqTxyX?RlxhZ+s4@WTU*7N6s?Q6G){PFOy3<k%_b%HcsBZxx*R-i_n>RVwWZ5< zYDW~s>#bQoY1gWCOAqUWo6tF%sk<W+6fR|sox#~G+~fP9z{B)_@e_|NJ6m&2AMj;C zOO{c_2KG{}k>w_>D{wqIK9Cw29P~$yOncdq^V@_8=Uj)CNYf8DP4PA+y&P9;uD%VI zT#o)8`+V=oqA4w39~dn&pL$4P=TW15+h=aZt&)}=!lp51zVfnN@5tRba^1m9m(RC# zo2z$s8rq&{*ZQ+*g?-BJ`;H$Ql|QwHfpX>VgOA0%lqg^au>TCDuh+Hx>7zhVAE*j< z10uLVa>HEl-l#)jC#8Zb!A=V8jk??HKU{~GYHCI$zKOs4;mYt0n>`co20R%x8bpc5 zV{uMlR3SS*{GUwGKiX_q_+Y9#mOi|};)fV5f4TAA(`opS@h-x%HsDE}C1AYS|JeUO z8}GlR;9s`lKOg=O`%9Kr#H|$HeouOizWO12*8qQU`0%A$t_^UGa&jp-<@@@iK?6t2 zDAK2Jcy7v;8NCnn4jJ~DJ>T4I=eNbp-zKpZpVOE>@233?_bT@nxn`Mh4f|>ZnqKF| zZksTndeEv{rpYa$N$HbMa@|KMX<c7Tz7-(EpVnN7J#=N?=Lx$9jO`y=R5QWDwnZar z=<9NKe#>a@q=(@+J;jIetngf^SL(H;2iJUfdA8`IqZ#w2tDSS+4ht32_CJ=L*qAx> z+*=uY*dM_vlMg(bce>BUNtI1aQQxH89VEVA>$y4G`)~Mc^X}*_N&B_=iqQ*?=k7WE z$SYexjh=cSzmL^~(OLHtHzrP=d^lXuv4(vAQT|?Ty>}4zkXysaATOG`zeeE|)l<gl ziNf^x8D;ZK1A9)Xzj38<p!uTpUry)qGtZ8jzfic<V7_^Y!k*LLb?5h-!5cnGdFxQh z70$qfI{xsP-m{;L9P-R*qj?nN%)ae67dUu-n%?u}#%t1&LnFuUlPJl;Lz2=nI1d!Q z`KsQy^lhuU`E}`qXUp-;y4z@V4|*Itrdi<TL3zTWc`2Qq{7K<TrplwK1vjRDW8{py zv#Kp|MWpZ#_4;+Iwl_<2v)@H}DkmN9;gY-4HKE~o-vJkUXO*n=dcP$0`i3Ls*0EOu zmQ~s&k`5Z~<&<1&6>FceR@~R%x-9u}yXf@m8;xLHH-L4`?`B<<=M-BO&)l*A?Jv>o z#?Mmo-*+;HHlJW|aT<8fR&*RJE(7gFAxlHqe~;P!C)2zCZP{MExh78@1kUjGN{m;T z(Bq)LY{r<jvrR)xKE?J+8Sc}xyyer5!;#Cg#mrr=$Tt_oU;IE;)kvOxk#e}%Ma6Yp zX3A5C@Wz<(%{fObSBDSYTp`ncn|fU9O|U>EjojQ5JK&di^Yq*kFEU?LF!tpuw-0@O zXBh5Qc)a0|P0&rh+}n8e$&6jm&ff<)Uf1j~oqnm@>-Ohei)tr6OW`t$|4?p?4ld28 z(jHNa4Gd|mA9znt?Rd?UGj6r^(Z##_^3Uq+G_gzjY&~?yY;V@5k54D)+w`|#vaeno zeX__WAo3V(PQ$=~%6E#_24s)vP0!!IBlCs9lM4r4=D)Ll{BHP@j3n{G*_$Mx0b{S7 z*H5Ly)%4wcawD_!_{Z$+EXCRn`{ul~{bo6e_enXgvd`O#?HM*p?yl~&mc+Vp+c$Q$ zIB2FV{e|ajzRI%+53}`L2G#5pmp{&xEsq~O@jmm+RLgNfuVedVxdAG!d+l~t=F_zk zhaTmZ9`K>nv*%VF2$*bpb?vU%8%8Xb96qyFuaW+K#9KGhnPcCEM{L}7_0r6*LzDU^ z_IkRT%Xj78cvPsS@W9%|E_t%Q$E|d3`-FZ&O2^fz<AGeo-EUUAEnVLtDLt~0wb@{T zO|OmCk}LO;9>orb*fDFm{>M$qPTQ`|tEYN4wzUOL$$m@<^ZT|+Vc6KiUxHZr)}5x; z3QRBUUoyRaYSjMiruVl)%<gvgPmeLPa^;3M1D}bf6{Zx5@&*5B_<r3icYM7A#<lw; z0%XxO0wmoo5+K)gl>qPPPi~CMJ54V##)t8&19(<eXAxLq(LWOPyEXpbChI@LLeCyD zV#D`aJ6}GCQLPIy@;)AxxajHR{K>W%Rhlaz`(L$Ka5l)-E$ef`_uDq&#?{R=y`CR6 z-*oUC^K`mFBX;Mm=>XN;Hx&|v!xK+bzHo64`?h@++y?nA)@fxu<}Y|RoicSs-<G`5 zZ6%{Kb9)(K{j2>KeKak8T)ZMx{q54mZ`#XtGdBdh9e?86_&)A=6BQ1ZUH+OePRHkw zMmTA;;+uv(A3a{)E?xXb=68DCRxge5vmUPOf4FVt=wkPt4a$)w;j4V+h$smSmON7* zciu+dD23jAhJ4i6^v74bz{iK)8-;B>xZ`L^)&iZ9d57uPo%im`Bq26i@k3W^RP^t9 zwM%MW&REmxdEVB>b|-G=emBv-{q~Z4%~wZ{mX#KN8OzlB8pwaNQO`SwRugz;?SQ>w z@*EDFy?(}G=lU7@{WgwP+I&!b%x!Z^eB}A0(tcr!^w#?v)G0L4RNe92fpPXx-{Q#h zho`ST6xSp&PWe)A99GI=j&H>)s4E}F8uV44;a@S3HEhC!0RL)*nwiBn@4^j^{;+%0 zO6@D-bVoe2!0+QqvAbPpkA-RhPOHa-9jpFeXgA>5tNHjRvD@r7CjAriR@tQ42M&C6 z)`>Cm@yH$r2EQcTzCCuOli~e&AsQ94<~=SR6#XF1EZ8n0Xs+=X<D+dFj(c*~+bpoy zZQ!)E@zUdjcb<D<Y1#S>c((o%xKG5V{a0=)75?gUx!VP1Vb*>e9QTeZ#2#dtde`wB zTxi1W;g9Q0HCj(N<NJ}<!7Y9?q|gj0)cqTTJ5}5IglKMhVsg>=o5$@z2FDnm9~T<F zWnUQZz{eFX8-Fxcr`h1lLOj#_moKBbf3ZV_`+GXZfbWfH@by*<e6=*Z2wkOi^I+gm zn37G(>}_)RO!|1-Z2Yo2dGl3bPWzUyvz$Eqzn2_1Gs5@Cf%|?<%@Z6RY2ObhO?sfU zD|D#KxhLz(TTev%F^rja&G0KFaoP%h)uY#D?make^^!g>@6rOxZt70Ct2OUM^YiJ^ z6E3yBr<xkZUD#K;pk%#!$mWRZ)q<;njZT86)%?PTd}A}0vDbHf**j9?R#&rj&4PU6 zEXPcf0TPDM6`#*@#L0G(PHc4bAzvN$@#4;%_Y(4M-n$Z^J@tIgl)^iy7^~7*S@WVj zW1#!xxVAYZ+V}0uBsKb~W45d*bjBkluMVHQo}zW&$t%hE*Of&HcdCZao7{FD$T51Y zpIsWBx#IC{ZLZp7{9^A-1{c#W`6fOg&FF~@Hn6%mneMz)ZFgG_dhxAy0}T!>`$~G3 za(ZQTtGO1|uVM7nwoy;C9aaRz&38O^C|SvG<nA$Ey|&Nfv0Hj+p7c4tG|cDgin<R$ zmHLhPCO!KVomsJE$I~EZPm7X^YP}UNZo5<wM|ru#;MJRgg-ZIL?oKSq*6oF7>uPjO zFqurEW%v7rXZQQuB_-%Cz28eHYEU4Nf4@u5CPgZ#bxNWZT&HJ~#>3qDz<IwHES3(` zxxuPr(w|(Wp9>pft+D*&(9&c6?Mb}tN5{T(Wi&h;|HP~Dy-Tlc4W|^8;?KpbQz_Hc z1`|WvdB9z@H4Qgs+Sr8PluQNE`@*cpo3kF`S#>|3H)-R&z#_t}2mHSaf;c!dLbn`R zgf9R$AIkomX!uoA^grIU55bKP8Z~W$AIDOzNpQy=#isfu!~e8E{3xF`3?Cu~8^{fa zi{~UpQv(Cw$|hi(ovRg&o8eY0+|1q9(wc^j(urd((;xW!h)-6j{sFF3^g|sg{A4UC z869(Vnb^W?&B3ro$c8;aLbpAF;`3{ovKaFVbBH~{Zzpj7y`L4(Xf#_o&Y&}BXpdke z&%(Ffv=I32`d|9q0d^X4o(=y?p23Isa+b*t266EF{{91k4e5>kQQzv%Z&b{PI;3P+ zY%uU{<4VSLZN*a@kI^ZM&xR)RX7AtWwo-jek-tGgVci#T-n<2F2IjpKD_dMr@2ZiF zzlYwml|&TkzFWt8IMMiMX><CexxIH*Mm)XcPWsM1mg>2fGG?ZbcA%ngtIs?G^~PR% zZ|vKazCOV=cd1pC?K6+Fz9)7(Qcqc(nly3h6qPZbqc=Y@DY8=Q%d`BjUN17x!F<D$ zXW^6hgE`d-r5kq@TYv8L`16Qktd06nCY$e_Q9kdy<(}T+6@EPUUSa7bN}NK-x)~pz z>=@DK+C;PZz%h-2FPlE!N+(Adk{yk$y&k_BG1oGtp?v9FcQeYq^&cjM-l|+*nYC`< z!BP9nr`q2yIurZUct*o=4a(rO?e#WpO2g*)MbApxpkV29{}9*w6t!l;v+W-T_{V)n zAI~0i!68DQvCCuSh6>5U(E*x1L0_{U4UXE=&$9KnWQbC!r`fwJ3oF9ywd)r&Yn&Xn z>dMZQl6fPy=9av?KK<#Udwrg*N@9<BzDnuEdEL5?w|1slCt)LE9v&NBxuI-SO01E4 z(TPvb?tZCwn76BEaleN)Z=Q}mY4UJV>7rPH!wThWe%fR2$$Zz0yO|>lq`5&S1J*f) zG~IU|?~puyY~kjd%hW8pSA&CVTTSXtMlCB<4o-T0YcSTAer3Re3b!-9{$~`&r|b?p z)wx6H50cXFU)mu|jW@Bgvha*@xi+(Quh$EwKOE}@<Nq}~1Z@y|xPDW|RXbg1vI;W% z9XCI}o!I@KyKPw3IY6{+n1g5K{{Ldz(9L7%yax-PJH2XF(xDI?QKNTi+?R2WYu#55 z(b;lzpQY{I7xu5IGe1;Ftls2b(S7q|dDPIhb!ptpe!JF%Wa*9`Rhw6Gu$VqJV1;2@ zX$k*G+-a}0`;4S|R&(qAoJ~soKRnJ|e`|Z}3hy`BS58f-z4`gt;K8leXWn}gXrwuJ zR;%Mmyg?9kSgYnM{<(>7wSLr$OB(}{M7vH5G2PkoZRi@ME9(pkqCXd1%|Gc_)l=Lf zs=(^F-qVK-XY-ErY86gSztnK$UP|7pwI}l!hm2sUChR&=ak~6j;Phc9Gm;O@-+5&1 zjeNtR)P$g^5q(Q84yb>^_g&a>y_OncLH%CaKR<d%OyRBBq7mcO^x}?qp7?NMfvVm% zn|o{Vg+p&jByp}~XXcff2(3;U)CGO6Y`sxF{Gk7sw&Jx4$>$BmnlIJ*{+brvD}3}E zS@zi8i}%OBo+mjsDQ9ilta1<Ww{cVW(+9Ipzi}w`wtlu+BXM28(wxElS_<RS-uLe} z`rQlnsgXl>E{KTVOa2nw@b=L13w5a%?@x06_;UV3N6nkTtwAQ*C5u9M4!#P59uL&z z9N3N*3)O}d$F=%A^{<?glI>SHRC&O)MKVl1`NOb?owA)#N1tY2z5C+JLLWgx9JR;r z@nz28alPrD%Gd{s!F6$-qzb=nS-A_uqefnzv2Jhhg;_)LYZG;6mc(J9lfeqF1S>qd zn-!ioYvKAyDhpmj5LS3%cRv?>-1l!VcIZsbiiXn}blj3@h3qYz30Zna_Wy3*=pRk} z!7Urte%*4DD@&>1@XCjM*U<9+dTD#X@&jhCjLtI;2JYIzj9a}l=YFr7Z;$o*tp6Ba z)&KUSGLr!QzD=i+53UrqR(fVmbuck~51VW8RAaB5L7Q!_WyWl)_H;VT?)@<~WYLm( z!HI(04U*6AR+-CgjrqQEN&WrLOU|DeP@6Y}WZ+-!m%3JK#*~6#i(h1%-5tt4Rhpg< zH|ucT+P>q?JBKm*r<!K;QXIlfJA6F)Uewrc)I*<7>@YN}{=QxMUf{#Lygp>tK+)`! zFL!Rz-hI|wWVIpLe^ZIi64#G94vn)9Z<#e!qvgoGr;|Q?$g=5ifV*vYuUp1kBmGlu zbU(|YwZl|SlOBu`9=>@(dttfLq9vaWHiqPWUAXPCX&kjs)Q-Ci==p)Zp*e7GB1!jv z->~I1TiS~%qm7oIa!Xif_@QRW!<({v%||U8wp30E39@7E+3<08^5${*j8w+T<5dIt z-;3Lk+_vdy+onHOg$>`%F?Ro|vOQkMB=M1Yp)~x_CQI6=*2biWHfz%vD|GKH?6J-4 z@{IEF{;GHOnhxhbN*>D^9uP2ZUO?Y9?;h4#?;BAvJILOB)r}VmP8J32W`EtQH|yij zP5hCe>n)#^_PD;_(`Mo3Pb+#pcdu&5SnhC25NXZQ9cKBhw_UMElDT!8uqfR(_wKdG zt$947ySj;j_&i3FL(2Bf!$8s{*pgIr`zYn~VMfb|ox$G+dK@r(bIEaZTYzWCPZwN& zYUvY^O&&zy;88fcFuX7{fAT*bY5j7}CU^JY)C?Sch>^?R>Apg?^Kwgmo|e|lE+*kq z@%YX>oTY{SW5>UprTxdd7XI>OP+!6oL7!Fr?2Y{T#n8X!6BUJDlq_+H)|0$Vv7+?V z@r5n-nkNnWrm}I~BigZ*o40S6`FYOi(%Fw$%!=N$Rl8T2?xf6K&KhJgI6i4{`kKns zjtb*O=j-~h9Kua5?U}862Vb&gKKo<Xs}SRDf)<vt#%JlGp_keFQni@9qW5_`Yr3Vj zdgk`pxJS<Cu1C*JF>N91r|6tLQ21`5!Jg;h$ENR%XT6xWHjOpwKIQeQ4M9gfthg|A zg_?p?d5NxRrQ>p{>L=yr_A=Kuf>--hR#QKXX?|=oU*EZLo-1=u)4?aR4aY2w?k$YH zN#3;XL_zf1(iw#<r}1M}1t+JCT&KD1prk1=YUH@yiqk5F3?5cGS$Itct|p#mNk3@n zFWZn%+v^Y78Tt}~%n>@#tB;3&&Rw{7SpV}*{WV;A89%Prv&^=~sFedITGX$WH5de} z%EhDh?M^$8{rz59<Vw-)Z_d5M1CP61o^*<SeR99)qRAueGD|m{x0y6&liH}rbt6Aa z+E+2>ApPo@@ncRKn=H9Aed#1~U85y)Z?5vf<_Da3BT1<k_;CG+>VB>Z_Jw9tCNI0X z*Ijql?i*zDgjHjf)n53#`9(pLo_d0l?vq^`Hl_@WeYGaE_r>++KRva+)O>u>;$<<} zdP8>~evLn!@AcsD@{x0DLLF~=X860ctDU@U@c8C(WrdN_-5OU9lvkMYsdF1Md=l%X z_sG9;PVLC2&<Uhov}|QJFwf5Dh%WWtV0O_-9sKh1ckAE%q%NDX4h|xI9FQnz(iFfc z(C<24fzvyUZuP|RUDwH;B25$7a`dgI{M;ktx8u7_2|IH>aBEA%bC(!;Wz{S+Ei9^| zI<KE|<q#?1z94uEo^`AndIbww)^<Fr1kWnQvkEEH!|IG7KAWGuU7jMgu??FMR&P9~ z$tU%}#+4rz_$ZO#%ZGHFvl%qqfBA;}&zYG`4(m>QZ(24P4wlGXMcHH)q^@B5hokAv zCiN)#f8ZEslaVS6R#{1LWKXh!K3NBo2|f+i8L=ohGb~Jn?!JCC_amiOA$)o9Z<(_0 zI#^8+1F?QJJNON5sH@p^R)@oXMPMD$RbT^7DJsB)xZRI~K?;dxijTlmI}o7HOq3x~ zQ0Tp^^JTWYHghKr)iS%aRiK&RL%UA6(J`Y!p(?I|+LM)ws70Ocr2N8P=p|>9;P=5i zpL0gOBL}aU8*Ft}`%1>UYU6|B>x)ATsvhz83(oCPYW`3(Vv>gT#}f^E``tBeT6yQ* zo(Z9*N(y76SPn%2dk+8M=vt6tU^!jsyke8&;M(G|4l9oiY&<(}$fJG&#w+Q!+3VuB zrLmgS9>n-~1`gk=Y%p0o=;^S+_V?cX;wtN(_h;_b7CPrKs?zNncb45;8D}`5?Pcjy z)*R#c`s*sy-aWdx&th0xyXN!ne&^=w8YS2=Yq9VV|EuNMN9EJ|#J=qHEpNv@FVDKL zmxudbbM-p5JoP?>S)_i85j~Qu5Y&>m;GSCRgb6uI+y*{7#5uZVB$=F<cJQIiz1AyH z7kOjV{!r=86XH-_0UP1)f^|OS(eh7JpMs_DjIJlw7lt*YOgc%o6A2s_8#J6*P0r%a zn6;|UNzUG3NxH-AM-MpRuQKSmbB$MBT)9Wx1T8LQ{Vw&#$!q+T4g5yfpLM@gGi`&; zf$Q%qpO5J4rQPtVPUKkcYgvBtc-`vn&)a-V?%5CdLyK~xv2ktc>(8`PH>T}2>^&n& z*d`>;8}vzCVx(hPY<g+ID!XGJ!eSHO-MjYYhT>qQI^{X^MfG=&&c3~AR>oSs%d7Kh zHl7O<c{E+l3B{v!eOv0h+SaU`x@*9<T?afa@B8ZEAWa%!jTJZ4C(gXk7<Hj({Oj#U zjB+ifMKLGo3qSSr+9k=lEBMfJrSh8s(^=EX$H)#C$BxvX7^T*d(s)<CYrdk3%=JW- zx}N96W35(+dW#t!f+rr!8b73$d1Ansh;JXpH;A*AZ|^_t>z$~z10%k9oh~drbu^&R ze8u9S`d%$}cdYSUnd~~xZe6U{<J3^cxmz`oa;9sS%^P9Vqpn%CPP1jk%Dsva;g(ab zQPo~-y{~<Dqy9$LFrODwduy59?>kp9#4l7uInlCsyUOOAC)q6rby`+6-84@>H1>Y< z=?bR@gM5s5SmWbaqw_tU283X97FiyqXBp>Z2$#G{)6CxIF=vt1!F78crSgsI6uyi) lMv)k_Zq2aYJ?hTfnfxAW)%K4lOwga(<hyk&v5Up9{{?UNs9*p9 diff --git a/Python314_4_x86_Template/DLLs/sqlite3.dll b/Python314_4_x86_Template/DLLs/sqlite3.dll deleted file mode 100644 index 28310f4154d839d9b94b20c3b635ed4c3d3a0502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1297240 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%0A1KE<T!6VJzbrzCvA>2PX<p7Gvn?mf#q{ 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 diff --git a/Python314_4_x86_Template/DLLs/unicodedata.pyd b/Python314_4_x86_Template/DLLs/unicodedata.pyd deleted file mode 100644 index 65e60f805261e452ca46f83c4b940d3e5ee7da1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749912 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 L^GjYV4EDbO3o{EG diff --git a/Python314_4_x86_Template/DLLs/winsound.pyd b/Python314_4_x86_Template/DLLs/winsound.pyd deleted file mode 100644 index 88c9a70c38008827ba12a989c61c6760b44f1443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30544 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 diff --git a/Python314_4_x86_Template/LICENSE.txt b/Python314_4_x86_Template/LICENSE.txt deleted file mode 100644 index 4059c1609..000000000 --- a/Python314_4_x86_Template/LICENSE.txt +++ /dev/null @@ -1,676 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see https://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations, which became -Zope Corporation. In 2001, the Python Software Foundation (PSF, see -https://www.python.org/psf/) was formed, a non-profit organization -created specifically to own Python-related Intellectual Property. -Zope Corporation was a sponsoring member of the PSF. - -All Python releases are Open Source (see https://opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2 and above 2.1.1 2001-now PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -Python software and documentation are licensed under the -Python Software Foundation License Version 2. - -Starting with Python 3.8.6, examples, recipes, and other code in -the documentation are dual licensed under the PSF License Version 2 -and the Zero-Clause BSD license. - -Some software incorporated into Python is under different licenses. -The licenses are listed with code falling under that license. - - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved" -are retained in Python alone or in any derivative version prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION ----------------------------------------------------------------------- - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - - -Additional Conditions for this Windows binary build ---------------------------------------------------- - -This program is linked with and uses Microsoft Distributable Code, -copyrighted by Microsoft Corporation. The Microsoft Distributable Code -is embedded in each .exe, .dll and .pyd file as a result of running -the code through a linker. - -If you further distribute programs that include the Microsoft -Distributable Code, you must comply with the restrictions on -distribution specified by Microsoft. In particular, you must require -distributors and external end users to agree to terms that protect the -Microsoft Distributable Code at least as much as Microsoft's own -requirements for the Distributable Code. See Microsoft's documentation -(included in its developer tools and on its website at microsoft.com) -for specific details. - -Redistribution of the Windows binary build of the Python interpreter -complies with this agreement, provided that you do not: - -- alter any copyright, trademark or patent notice in Microsoft's -Distributable Code; - -- use Microsoft's trademarks in your programs' names or in a way that -suggests your programs come from or are endorsed by Microsoft; - -- distribute Microsoft's Distributable Code to run on a platform other -than Microsoft operating systems, run-time technologies or application -platforms; or - -- include Microsoft Distributable Code in malicious, deceptive or -unlawful programs. - -These restrictions apply only to the Microsoft Distributable Code as -defined above, not to Python itself or any programs running on the -Python interpreter. The redistribution of the Python interpreter and -libraries is governed by the Python Software License included with this -file, or by other licenses as marked. - - - --------------------------------------------------------------------------- - -This program, "bzip2", the associated library "libbzip2", and all -documentation, are copyright (C) 1996-2019 Julian R Seward. All -rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - -4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Julian Seward, jseward@acm.org -bzip2/libbzip2 version 1.0.8 of 13 July 2019 - --------------------------------------------------------------------------- - -libffi - Copyright (c) 1996-2022 Anthony Green, Red Hat, Inc and others. -See source files for details. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -``Software''), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -BSD License - -For Zstandard software - -Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook, nor Meta, nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState -Corporation and other parties. The following terms apply to all files -associated with the software unless explicitly disclaimed in -individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7014 (b) (3) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. - -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState -Corporation, Apple Inc. and other parties. The following terms apply to -all files associated with the software unless explicitly disclaimed in -individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (b) (3) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. - diff --git a/Python314_4_x86_Template/Lib/__future__.py b/Python314_4_x86_Template/Lib/__future__.py deleted file mode 100644 index 39720a5e4..000000000 --- a/Python314_4_x86_Template/Lib/__future__.py +++ /dev/null @@ -1,147 +0,0 @@ -"""Record of phased-in incompatible language changes. - -Each line is of the form: - - FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," - CompilerFlag ")" - -where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples -of the same form as sys.version_info: - - (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int - PY_MINOR_VERSION, # the 1; an int - PY_MICRO_VERSION, # the 0; an int - PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string - PY_RELEASE_SERIAL # the 3; an int - ) - -OptionalRelease records the first release in which - - from __future__ import FeatureName - -was accepted. - -In the case of MandatoryReleases that have not yet occurred, -MandatoryRelease predicts the release in which the feature will become part -of the language. - -Else MandatoryRelease records when the feature became part of the language; -in releases at or after that, modules no longer need - - from __future__ import FeatureName - -to use the feature in question, but may continue to use such imports. - -MandatoryRelease may also be None, meaning that a planned feature got -dropped or that the release version is undetermined. - -Instances of class _Feature have two corresponding methods, -.getOptionalRelease() and .getMandatoryRelease(). - -CompilerFlag is the (bitfield) flag that should be passed in the fourth -argument to the builtin function compile() to enable the feature in -dynamically compiled code. This flag is stored in the .compiler_flag -attribute on _Future instances. These values must match the appropriate -#defines of CO_xxx flags in Include/cpython/compile.h. - -No feature line is ever to be deleted from this file. -""" - -all_feature_names = [ - "nested_scopes", - "generators", - "division", - "absolute_import", - "with_statement", - "print_function", - "unicode_literals", - "barry_as_FLUFL", - "generator_stop", - "annotations", -] - -__all__ = ["all_feature_names"] + all_feature_names - -# The CO_xxx symbols are defined here under the same names defined in -# code.h and used by compile.h, so that an editor search will find them here. -# However, they're not exported in __all__, because they don't really belong to -# this module. -CO_NESTED = 0x0010 # nested_scopes -CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) -CO_FUTURE_DIVISION = 0x20000 # division -CO_FUTURE_ABSOLUTE_IMPORT = 0x40000 # perform absolute imports by default -CO_FUTURE_WITH_STATEMENT = 0x80000 # with statement -CO_FUTURE_PRINT_FUNCTION = 0x100000 # print function -CO_FUTURE_UNICODE_LITERALS = 0x200000 # unicode string literals -CO_FUTURE_BARRY_AS_BDFL = 0x400000 -CO_FUTURE_GENERATOR_STOP = 0x800000 # StopIteration becomes RuntimeError in generators -CO_FUTURE_ANNOTATIONS = 0x1000000 # annotations become strings at runtime - - -class _Feature: - - def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): - self.optional = optionalRelease - self.mandatory = mandatoryRelease - self.compiler_flag = compiler_flag - - def getOptionalRelease(self): - """Return first release in which this feature was recognized. - - This is a 5-tuple, of the same form as sys.version_info. - """ - return self.optional - - def getMandatoryRelease(self): - """Return release in which this feature will become mandatory. - - This is a 5-tuple, of the same form as sys.version_info, or, if - the feature was dropped, or the release date is undetermined, is None. - """ - return self.mandatory - - def __repr__(self): - return "_Feature" + repr((self.optional, - self.mandatory, - self.compiler_flag)) - - -nested_scopes = _Feature((2, 1, 0, "beta", 1), - (2, 2, 0, "alpha", 0), - CO_NESTED) - -generators = _Feature((2, 2, 0, "alpha", 1), - (2, 3, 0, "final", 0), - CO_GENERATOR_ALLOWED) - -division = _Feature((2, 2, 0, "alpha", 2), - (3, 0, 0, "alpha", 0), - CO_FUTURE_DIVISION) - -absolute_import = _Feature((2, 5, 0, "alpha", 1), - (3, 0, 0, "alpha", 0), - CO_FUTURE_ABSOLUTE_IMPORT) - -with_statement = _Feature((2, 5, 0, "alpha", 1), - (2, 6, 0, "alpha", 0), - CO_FUTURE_WITH_STATEMENT) - -print_function = _Feature((2, 6, 0, "alpha", 2), - (3, 0, 0, "alpha", 0), - CO_FUTURE_PRINT_FUNCTION) - -unicode_literals = _Feature((2, 6, 0, "alpha", 2), - (3, 0, 0, "alpha", 0), - CO_FUTURE_UNICODE_LITERALS) - -barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2), - (4, 0, 0, "alpha", 0), - CO_FUTURE_BARRY_AS_BDFL) - -generator_stop = _Feature((3, 5, 0, "beta", 1), - (3, 7, 0, "alpha", 0), - CO_FUTURE_GENERATOR_STOP) - -annotations = _Feature((3, 7, 0, "beta", 1), - None, - CO_FUTURE_ANNOTATIONS) diff --git a/Python314_4_x86_Template/Lib/__hello__.py b/Python314_4_x86_Template/Lib/__hello__.py deleted file mode 100644 index c09d6a4f5..000000000 --- a/Python314_4_x86_Template/Lib/__hello__.py +++ /dev/null @@ -1,16 +0,0 @@ -initialized = True - -class TestFrozenUtf8_1: - """\u00b6""" - -class TestFrozenUtf8_2: - """\u03c0""" - -class TestFrozenUtf8_4: - """\U0001f600""" - -def main(): - print("Hello world!") - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/__phello__/__init__.py b/Python314_4_x86_Template/Lib/__phello__/__init__.py deleted file mode 100644 index d37bd2766..000000000 --- a/Python314_4_x86_Template/Lib/__phello__/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -initialized = True - -def main(): - print("Hello world!") - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/__phello__/ham/__init__.py b/Python314_4_x86_Template/Lib/__phello__/ham/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/__phello__/ham/eggs.py b/Python314_4_x86_Template/Lib/__phello__/ham/eggs.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/__phello__/spam.py b/Python314_4_x86_Template/Lib/__phello__/spam.py deleted file mode 100644 index d37bd2766..000000000 --- a/Python314_4_x86_Template/Lib/__phello__/spam.py +++ /dev/null @@ -1,7 +0,0 @@ -initialized = True - -def main(): - print("Hello world!") - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/__pycache__/__future__.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/__future__.cpython-314.pyc deleted file mode 100644 index 32f570b2d7e9cf83cb624319b998a489108d6069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4850 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 K|KW@>?|%Vo!Zqgr diff --git a/Python314_4_x86_Template/Lib/__pycache__/_colorize.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_colorize.cpython-314.pyc deleted file mode 100644 index ecf88994128cc6965f69adfe64d003d280f20804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18589 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 S>>w2u0e@c@_?!uE>;DFO4KK6+ diff --git a/Python314_4_x86_Template/Lib/__pycache__/_compat_pickle.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_compat_pickle.cpython-314.pyc deleted file mode 100644 index 9299ced962c84868fa9cd4f2bc1093bb9d01e56a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7446 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 GK>r6dzW*Qq diff --git a/Python314_4_x86_Template/Lib/__pycache__/_markupbase.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_markupbase.cpython-314.pyc deleted file mode 100644 index 5a59965e9899cca3709ea97208843443b978a433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13175 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 BQtto& diff --git a/Python314_4_x86_Template/Lib/__pycache__/_opcode_metadata.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_opcode_metadata.cpython-314.pyc deleted file mode 100644 index f7a690c08d2f94efe72322e34d42ed6c5ae904e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10474 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 Ap#T5? diff --git a/Python314_4_x86_Template/Lib/__pycache__/_py_warnings.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_py_warnings.cpython-314.pyc deleted file mode 100644 index c30b37fd647730a4d3d1e37bd343f01ac98fea4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37052 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/_weakrefset.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/_weakrefset.cpython-314.pyc deleted file mode 100644 index b9eab25d8c36ff784c1cb2c2908dea8beaa5b575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9473 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 GhW`S~+PlC2 diff --git a/Python314_4_x86_Template/Lib/__pycache__/annotationlib.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/annotationlib.cpython-314.pyc deleted file mode 100644 index 6a246cb51eaf3c89914c75f3b959474a30463611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47844 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/argparse.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/argparse.cpython-314.pyc deleted file mode 100644 index 72302ed9d628bdf71648ebdb987d716332356979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113283 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/ast.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/ast.cpython-314.pyc deleted file mode 100644 index a2c5c828ed6bca896367ba084ad6c2c657eaa8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31666 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 U6@B?lgZcLl-_di13O4`$ADlD7Q2+n{ diff --git a/Python314_4_x86_Template/Lib/__pycache__/base64.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/base64.cpython-314.pyc deleted file mode 100644 index 0f057fe7d1c4c6f713dab990ea0f2e5d95f0cc09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26682 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/bisect.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/bisect.cpython-314.pyc deleted file mode 100644 index e49e4336fdf96058657fbbc2b44e04ab25062c04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3664 zcmdT`&2JM&6rb6(9ovbW1QG~eVnR@gOOg^2!Z#AoRs<+eliCNISQ~pB53F~W*>y<5 zp)RW0R8T2UMY6;tM{+7sul*yC0LiR!sMKD1GonZpr@q<sM@%B+f(ne}+1dBzea!g% z-f#DZLqP;%-us+A4<YoYc&QFgW$~&2ivo%w3q}1=DT+VCQF$v;B^6t^Ch=4xQcdEm zNaUKtSCM#jpa~Rh8ucEMcB660Y8uCuKZ<)0LE}CjN<-wGXgAu0F19jsT;7Ekjs)g9 z&oGmwET(HjQKxjytZdF4xMa&W=xnN*EQVbD@RJepyy8ycF;6Be943U$8F3u%8Ln6u z(pMd;G@fo0!^4%G@t&9`DjoK^R)!QqSHSPvBi=nMxw73z93mnsJ>XzeGby(SvuKXY z5T+58nHEv{h@z#*4N47A5mV<DO%ug5^EswX5rr_bA{+<?M>E3GgyV9mq-TW_uxC}r z#L|hCrG&GotVQ%p{UxVEs2T8Z*%0@os6^pYCQ)^=FHJK_UbV=9h?7W`)kP}R_9>AF znbh-;B6tp(Doat}SrM@&DKV+SQ(2k@*QZG;Z(4c|&N53fdCmQ2Qi|s6%NvHu;ACLt zZew%Q$xob^=sZpNK=9Hs=HluilHD@t{JBZzEVj=*<FePrij8M%N!4vB%bd-o_&a)G z?6v9HV~KCzmd%6${sxa8J&?Gi^BW0+>(`-D%tT7n^XW;&r2R}|7EGq4s4C_CgNZA% zR#w-B28WZw$(bV~$uXKURK=o6D`zAwvdM&-(10;(w}2gF?dHY-CP>tdISf+)l{=8X z`OfW?(6(atlJqq6$xqT>VqLtt)c!EG6n(t;S?JKbRPuO#JonwX`REUqUx6KJC|GeK zr(pL&-4swvnm|W3A(U=uEZb<UFta!&XIyQqAY-UnwuTHPe@NKIdmKM~?iwDoF(LI; zidKjWZ@ew$?b}{cyYV5fooLK!$QODMig_pSY7d5VVGyAmkZn&j4!nz)t9Px5)6tFM z4Uwu@JDJua?q4_J2uLAbL{ff*tBO)9&o!s4n3kq9<W`n)C^Nl|ku~63A8BI(My|JM zMa@&f93bXXS@5m^Y*m$j5b$^H7#k;9WtzhKiIZf;#dB33RIagOHT@~TAR$*F9RcJj ziWS2E6q&-CK(A;E;AFrp`F*U9%tXj7rm8_#LaqbMh?21=clJ97aRFX)34S>J;Nkve zD>R^-I1O|XP1pK0I;B`_nl4LrFea}33(j?J%g~6HeO$D09uSk@DBdh4QM0z3V`<X| zE2j$(-Xb&tL(bF*3-dlqfX(g5ADln^{q#z>>&do*Ps2k`{6nRtz@533P}@TL-PpWT z_Brq^h1>2;l{R-S9xmQo9GE{_YHeG%x;S!guGHD}K>DMzt2nqAe;}2cQR^1)+7d2| zmP4queT~u3!p+6$Uyk4Vw$ZTE94d@*prJ<KzkjCc{$H6&rI{L0iS@_AQ(QEBV5#N` zONrdMs6gHXQ=O5VQnZ^ZeBtcsf(=K-rV3qbsnA7NvAxKjhI$2Ei1pbe{P4@AGmqtG zq2UI)SX(tB8HX-<-ydBxwD1_N)73gO(T`jbd7CZ{ZcG<3_#RuIE;ficREc@`!y=3g z_yYLkT@l74&FF#)1;f;k_K^_=Z-Ywb?PBT>5PG}kZxtFbofq17(DQ$uE@G$WyX_wO z{zg6jMeC-8!Nrlgw~JppJ%5#9z2`@;jX#Y@e?yk&QY2tEC6j4Al}tL{k}h+JHsKrv zlx~x;n@4j7e0I8==&K0DmoW&Jk<%93e&aup)6;pCp5lAJ3-knJPQp}{F~%>@j+eeL z?szoz8o}e`o^Bi#Yk0gohg(7M`D+9ZR{?8Kl+R-s2Ua}W%0U#|Qt*`mop*fy0{8hh e|AR0Nyzuyi@4y>VFz+Mp5c;j@r2IQRDgOs;BASZ; diff --git a/Python314_4_x86_Template/Lib/__pycache__/bz2.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/bz2.cpython-314.pyc deleted file mode 100644 index ee040849865ad420d590b21f580bec05eaa73ffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15353 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 H%troSVSwc+ diff --git a/Python314_4_x86_Template/Lib/__pycache__/calendar.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/calendar.cpython-314.pyc deleted file mode 100644 index 9427c2dda512dac98bb456ac718acebc29ce84c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47453 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/codeop.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/codeop.cpython-314.pyc deleted file mode 100644 index 63ff9dbb9455ec0eb6405eb9cacba58c6ad4acb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7030 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/colorsys.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/colorsys.cpython-314.pyc deleted file mode 100644 index 26d39a8bb8e181010580f759d622c60d3ef496fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5341 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 JmEK0i`8T8*E?WQq diff --git a/Python314_4_x86_Template/Lib/__pycache__/compileall.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/compileall.cpython-314.pyc deleted file mode 100644 index c7e9e1863e318c25810483c38f64cd15fd675ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21262 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 V>iKrh)H8SV<@XGnzJhi0e*;Mr6ITEL diff --git a/Python314_4_x86_Template/Lib/__pycache__/configparser.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/configparser.cpython-314.pyc deleted file mode 100644 index f1a6755f0eef97e5dbe245222b7b639922321638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72970 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/contextlib.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/contextlib.cpython-314.pyc deleted file mode 100644 index 87f52dc673e007467d14e34c76a0dce872e0e435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31208 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 J!zY{C{|7Bdx5oeg diff --git a/Python314_4_x86_Template/Lib/__pycache__/copy.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/copy.cpython-314.pyc deleted file mode 100644 index fe1e55817aad3125f78054ebfc857a866016e7ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10184 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/copyreg.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/copyreg.cpython-314.pyc deleted file mode 100644 index 2b78ba6138a0ba8b9b0bab7fb30e1be28d34a096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7988 zcmb_BTWlLwc6S~mN1PF<m#qgyYh=oDXiG|LDQij2W3!eYv1M6d6uQ~cAt-VrF{Vgj zW@K3cwqddRA;;TVK^HK+-G#kCfVIDp-2&~R=tqI3`RErVF%~_mHYzs#*q=hS{1N0Q zJ?G90Nh{nS3-p3>=gz(7+<Wf1=bjgjdg|Q-%8KK&B-=&EAMnF2POGu|ztG5$5Yfp1 z33)FuI`cfy*-%4>Z6zs2=R#a7(fJS$wc`rcO|CevIIcK{I1|5%gd8y9q9X!~)?IP; zx$H#<8Dh-#71t13#&80LNHL@<VpYEj`s+iDy5|a=Y4Sj29=m1Fr#FNIfNl)cLERK` zL){z_p>6@{_rbFtp4N~AJ#C?SsM|vxs5?STfCQVCKRl<TvWhC}89A$Ft|b$StX$WX zw3eJsrjq)SJd;u7Y%+c|r3|>;Q*%j8hF>O~T9OwuWo99Tn6X5{f|0d_Y&N6n6wR6_ zla}?RtfI*YWhR+c5^^%_KGi3uGbU6rt?99J9L6&<IH%fg!^KlEO;fZ1_e9)cGTl73 z@!3_O%8`i0SVF>#&6L9wkdRr4kWLaQV~5JeFvo<M2ycOrFzJP6m{mL!zI<$9)}9fL z7Z^sF#xD1$N@5|dCt+tZ3u)TW<oN|nm!}mu9!sTS(<x;l$Qy$FVbo0l3r?$QMm0Q% zq?V28@wupuaE2Jq01H%@Frx-J!<CtiBEJl;$@ZwdgyE?IjAo`a+*WUIuQ79KH1ZZO zPK(46ih68h<b}v$M!gz=1ASMC>sln9$}A+NW17;ROeb}yfa9qYaQawea!H@dqz8`; zMTer-hrbt{Qs%R%n65<i`D|o7IUR{-vP-HmJCI#6oF+l42<rl4i8c&Xj%<m|tCu## zo^`Qj%hOtDdu7A(YC(9lbfEty6RRiIc;Ajdg#GKT?k%Btb>g8Ac+3&u;4a{jc=_z$ zqkOKf&}pmAwR~#d<y@^Z@>emd*5R-!uBW011R2AbnWn5ldU{n<7AoomTJ491hBwgM z>X}W^w=VkVR!?krh6}<lY)I-<ktN@{As9DHm`qwa!0y2}^p*v((m%)!vH|jdnLyEq zXW(>{>jtkXv6R6l=VP-#JQLR{bQ>N^Y%ExHAI#MWkJbSdZlP)QjoaZ5!udDuhVO(6 zEj<OXr@;4o3;92!i0^>(zfQ6YeKT1$%+?||%uLz}6|n3ATNCVd<!x>)$o>(#CV~#b z338uI&l*AoR8kDCgW;N0^rWuL8;-ZqaNP_c8jY#5S~LpW;NZ;EHb7O|p)zlSEYrg? zB#Q|Ph^6A;bt6mwsvP;8_m#wEIL0;6m!G+tx|6zp>Z9=o;|2dnK^!UYBj3UcOEzI1 zv;6r-sWt#6knaFhsi;PMG^&GErMfN}#SLmoY6dpQsD1#fK3RKH6j8;!;C;~WaPeFl zRtGnmd)AtJ?!|wd`c<mXG*}P^3;dwD8<cjtpqSzJ?teg)1HBosN62}S0G5KzEcZ-S zV_Lo8@{P=LVJ-kO)PlOq+9nO4m|D_OwF=U-rwlI=l4wF|0Nb%=5I!#-x99I7NQK2& z6_hwJT+wJ+Su{C{S`RqN8(ci489Zu2V80G(&g3z!4T{u~9ZytMs+5O%1V#to(Jn!i zBPEyk(`!Het1VB<t@Mp_{>=?f_X@Y;CXzRIe#b?;&9_oFQu)CRPwxs>61}%xzVY%e z&fL9p=TcETT9O)WUA%EIA1F$PN}?xs-aMOXWq`Jap3M)S#<O{c9R?oE!dEAGgMi&4 zlK`@}(EC_Dj|I>`&b&)VmW!167v@5Y%{N=0CS=NGuGZa+ly7cdmA1AqO}e_s#qWo? zNz|KrN|uk*+g)Kkf=5HkUJA^4F8l?kL4Fc%$et4B&RaaV0Q-UUggSD7M1V79K{>2^ zffU1;c9IaAbzD4r`8a(0@H>Lakd_b!`U^Gto-)cxB*Y)*Y`YKq23N02-W`_%VaFhs zb^1_Yqx#uXvaSfMWtIwFEyxPJwMKzva8-e3R0Fhx!Nm-*w!>+kK*IEKDm!yl(eCOd zLl$;cm=el3b#&%~))0AnZV>KIr2IYQM57~<2x?ARoFwrU;&fHfGgX@&z<HL_Q-7M% zt|>+$$9bFL5Ie{E$P}5Bt!1lTS;0@nr}xn0GHHTyhEW(-ljJ1lCrQSB2ZcZ4tuX4M z(V0{XEyu*NCmu_q_i5S)dD$hK)*peiR7MA&<%yU~RkEzl#dOPa)#UQHyqE;PX~7x+ zn*~E)s;EwhM!^T93xGFhu8~-tvDO%s|9>Z@grMuLXX2TZ9Bjf(*v15O;Jlgv9q5{i zX)#?_)qax~=T5&iIraABY4s3(yOWyjgabBeP4quilm@Cxsgs13DIJ?vU^c0GuLe(@ zRW#JNg5h}$>g4o-Zh5<amPp1y{Zc&|tTTADZ-#@CtfD}w&mj>Utg8mG#iNBc1e=`( zkN6r$Ea+(2ET)lngQ5mMT!|{z)z@J7C3v)(prk-agEc(%Q?TVND<dVh=hncDf!wK5 zL-TF%XW|NvKG0C!w<#W47Z2S}e3X8W{+FfAfpf)ybC0CPlBWq(_zJfr?puxjVg$g7 z02cVD??K=1dOkby3cx%TNn__z4{6xH!dnKR)X;Lnu`POUp4@8k<<s}y{3!Auvex&~ z@6HxF$2OWy7o^jV8d_GT{?5JPC`sPcg@WkMjqR|Fj*e1ut7*Acgr{w!zHznX=J`!2 zuqFjQyta9GbnWoyhBUe*HLs54kKWTarM`8k4;I-WjQ<R?OPJ=f47BUdGXL#uy}7)? zf9?{uy#Bmi@CFM)@C&mUC<uWspB^Ss$5T@0XtQ{5FR>{eT^El&OY;ulUhdy<l7Yed zXLnqj|HWOxHGdB}Uiv-*-}O)nTwNQ`ef#APUVeY<OIYqHVQA0Iu^kRtU+px)Dqm@6 zJ^#%sjlD`fdG+L(1Khu#l+M(#pVrl%>2Q3ypMjoF+Zk+k@X&t7e+Cs!;DVD~oC8c@ zO~Z%Ec>sdBOU#STZo(7G4S2v%*$%R%h@so2p(5x#V#^K+I^25@%rWSnMF6x1C_A28 zC*ME0suje8`Kb-@V1YmQO&<#FDcEFw7hQwzLfrEZU;cnW0)x!*BE)M6d3wp#LFEfP z)Cb|QrYo@ohQri{p+wR!JC({TnraE6Wz<0KtI86DdWn7-ki)%Mm{-!ehQJlwBgZo; zcr<!yX~3<X0&0U?g(-&f>LT7ZJD4=N15T;M9pySO=qw<C)g>C5q8x#EPV(9;>dQ~9 zi+%UPYhqu4@B60bj0Z^hbPd@5r}$LMdjv1V@;9<@yb8>LeqaDxu`E;N&47*nhA#mt zb&`v_ATTvz5%7rq03Hz=!UzV4+gnDU!}3Nz9%{pc*glM=tODK@YA0I23vt`+y>yvA zNthdC&|3jI{vPPy!+gkrYbNLpFMu@%52)-j*>e#RD*Ggdt<J<8<q1FOtw7nWZ$i($ zL7~}N-qmEYjaPYx%2qk+2s_GaQa=j(@v^^BjS+T?f;|uOSXX?gE^+}p`Pw+)@+tuJ z{&#}<B_ZhhUHBjK?IV{P(wLH<1tmlVFU3!$pk?|3L1*ke5T%f!FQ{obCa02+se#*t zwq8b?rqOg&OrA|%Q_|)Ivy)wEMM=>61gWb8#i-=5;QH!wknq7Yl^lcNBwRfVF0?*b z%gBq08~lL7x~wH3YG0C7bA3dq_z`F`skI!C<;#khL|TlcuF8qbV%m+c7Zva{5^_k< zGN}ccbGoELnujh3VM-jLm^3_;l*+uYJtY>ObDPA?WEOxtm`zn+o#$v84~PbBp_TPX zB7?NfXA;R7y04__u1r@Z6IIK6Qd5<zs%W5VaMGk|F(x(x5mgmWlA7Df<qZVg80jL% zDZ@djpx!iCa3`23Xz5Y>5~I;YC3aO+F#eUyJ`Vf<^%#t*FJLu@a2%w|3^zDis;;3L zGz2A`pe^-99CxMwAel9sv1}Gb)YqXi=%h-|aM1PD7KC$9Z_nVd%Md6|7LFU0hUsb8 zwxUe8dKt#D@MseCGj_mSH{2S(F}^8vu1THw=!VpvJ6&=~>#nwvw`D~Fn_2J8oknXr zm>10~*|vb)P5W;9e&$<wt>o><$L_v+=iP_i=Spqucinf~_fCG+_WY{ji)Mdb`S8un z=HPmBu;f3OKeu}N_nqCVW81C1Lf2@qb@Wl2yxs1<+jXbwe#>V2z<T?@$NE40=r=$5 z*Qw1D=hsi1F9mvjJ^HKB&A`xFVCdsFHv%Jh;d5W0)Y*M^{O9ApJ@?OvLh#hX&arLm zxHEpg<zeT*cANjMbVs^3^|0;8ZaeWGd|XeO{5wZDM?K&bg?3c`jk)nJcU%l~3DUOM zkQ@I>!}QlDN1bDX<dZ>mY?yl{XIr)ce@od`mD?+4ShMUq%oMx8o@9qX7!nY5Lj1;H zdlsTb(B}-q9-t%50$Lwt!ZOEPW(HZ%!MyoR$Rw_|r-aMeGt3S{l$iii22n~mwylX% zUL(v=9IBy1nD3}sjp}YQQmatMhdI=NAxDL(Fjs9esD>=-K8P~e3N1BfbcR_vqpJcJ ze#Q#bn6b=}FxLzG0IJLT4YSyTdkG55zK}8tI*}?BJN*y2?RX}k3?#q)`s??W8?h~8 zzypd!jiqOmiLZEYKIG+Y{68R;f`nuORh&5w_%?Vi=?wC+gCZ~csv(nU%=J^fi_<{z zk4vU?!yS&L7Ocpj8T@+sPedjSjy_JTE~yuRYNIKdOkYz}T}hM&9`J?}bk_o8wINQ0 zAOhDkIG9^QE>yBR_3&p!Wny(227e2W_K#5I$QPn#MZY<c8!L&@D*q51KsQudp0+}J z--f5ZAoQ2S#ubPqwglg%(6uIX-QzZdp8I@J=-U!HHiZLg!hyVwU0hK(`bhAUT<)T$ zyXflvPfy$LJN(72;~x)hcAWqpxnl%eckd{8?scQvF0tq>Lmeo}$3Gt0l!p;&6roNc z)XD9xK#_0Fb8CEOsq0{o-@mGF@K)lvEPJpIRABJU@BSCvlyyI#ZI)Wz)-(45to1Cl z^A+i>iBo+)Fjogk74B5|_JtsKLS+^_t-aD&$^3;mfmGHBvjX^B6*;AM0X(YeyNWO< zxm0@j<rm&c+j0j+aj*Q!@)`ICOII`<qjdC>2h_KL56gZOM@$3Q$j=BZq@z`&kqVr8 z1zUd!mC;a<ooE~ktfIaH-FsxLK~?56*Dx-%<X2Sy=o17?L6sxhe~u8Dg7b47h2ani zLoW(L?-znEf2ttJAa?m7ctaRk^mY|pU0Yy>rq-o{_&1AeI^?iuxnLB8!eRw3m4m2t z#CGxs{{FHfD=^jxKsOxmloC@P5W0eCDEHB>%C;>IB>}tukA~Sl$W-$!n|#L_-|^6r zU0^l(Z{|NPcp)jfAe95H2B?w*Xb$=?rJKmaF`WVb0;E#lLtqeAg^NC^+K3h8pon?` zs~=)DfmHx28LJ~$9mnbrR=7!;K%kKzjdrM=HwA#6J?@z5iYn5;`>x)+@RF&2UQzLk z(Ku=U02Q1X!#rkrhJPY4;_FP#g|@#X=XuHtOwW@RmKlKo=Fnp&VO+VzRnI+Fkv#W= zXPME*0(AYgzH(|c@Hemj_`SSTB!`~x3^QcHF07=A#P>vSG2Wdf$QtD89!U+W&9{9Y z_%<YeuI`C&7#0Y_@_{E#p6P!g9b+1It}~>yy+E2v`&tX6snoo$KpLJ14FJ>QW&%&! K7{*Ue^#1^eERnGQ diff --git a/Python314_4_x86_Template/Lib/__pycache__/csv.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/csv.cpython-314.pyc deleted file mode 100644 index f2f52977abe9600716751f4d053c39bc106451a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21251 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 W61<OIk$iHPf5OB!uX2>K`TTF4veWGV diff --git a/Python314_4_x86_Template/Lib/__pycache__/dataclasses.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/dataclasses.cpython-314.pyc deleted file mode 100644 index 994802ceb5e0c428a38a17af253c7df8bdcb9847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54848 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/datetime.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/datetime.cpython-314.pyc deleted file mode 100644 index 820312628d751ecf93747855f9d133b90e616105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmX|8&ubGw6n>N4G@BpwpuIIo7rYo{Hx0I8s}xG@AyA8KQmC*xY<DNk*xj9FW`ZUl zh<NbgU*KQhALL~aFa86OdJs>}thVp)@jbrxz7O8JcVo2yx;|FF(o+QR!!%cA|0kDw zn!JMmB&@?r2+$C1S2iH9q#aalg9|SzE0ELy+OY9Yw~XF_qni{SSskFLXD{B43KG)^ zjol=Yq%Ubk+$c|6PEy?`uACP{_>IPh5O*qNA$I$HJsJ5l$|Ilg^K!*ou$+j#TzDzX zFZ`*@Qg_05qqH+x>G@<dHYt%S*o?=<wucnDd)%ul+oUVUpxIG&iFJbsNoAxQLyePK zkqeqnn5sP;9zQ?a4>Z|7Es1q9KIm0d4daBx7^^zI_G=Eaf^m7sIpeB{i}|&pr=v8* z_zPT`!>aRx-S9*ZF2X1we6X{#8NO!xA}lz2MPez!IAycsEE2?{Ih7iO)CPomgYem0 zPFa3`u!Xnqn}-kZm}G@HBbHea9?`S#D%CIM%6XizWR{XWzNT~amqB<MmKH+jXT?VL uvSp#}H+y~Qpyr+TwcpDcIJbTQLf!9n$BcFVh?d^?P+f&jt+w?UwXMH80j#qC diff --git a/Python314_4_x86_Template/Lib/__pycache__/decimal.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/decimal.cpython-314.pyc deleted file mode 100644 index eed0fa4ff80475e78736ddc6d7545cd421784f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3077 zcmbtWTW=dh6yA-UG~J3K5Em6%b=1<@o79{2Ew)pLR9cIgqEeOcLLFA)-LXAny|c`W zllZMj2zca;-@vcnPZX(gK|JsWO3MS{i8Fg~yloPSSS9P(Ip=)mobQ~ute$?!(BS!Q z@n^bsO4EK<AL)}%22a0%!F}znCbhS<&$YXHN3SoOSEGfFese*_;~b20GIw6Po4=?b zZ9BiDc^5V9tQKkJJBxA=Eb^TtxwNfqF9xX>7;i7#IX(NF4Yrpr!}wf;N42ZDa~jpn zMf~KXrrjVe9bq5!=|1sFA)|prIPg&4XIRo;kWO(bha)1XYZ=DYkO~BUI6!n1`eZ}` z3Cb)$tdG1D@F)P(!-9B-1%@0F^Z^M72mfgt*Jh5;Cm}%fsT)CW7zTo8C}p^@wkAU2 z6DB#^C6>!ZYl&0!ixq%1lq26TR3e>ryN!f|A?6-x)@!A5tJ%oHk-*xcJ2WI7#TMg( zHTAWoES=QAFwzK9W>8Gl5DOqLppu}FL%>4uum>?9%zIRFh{vBGAM*i0JvI(J5itnb zV;(X=6lYQqI%3|~CyH0ekQj#{<4}qNI>rLZf%<qveTunpLAXQ4{2?0)ashELRR!^s zG2Ug=LxPPGaDpVK?#={p0wIdDS_TzjtgM7!F2xdx62;x40p^og2gG?=2yH>RLhSBf z$ONJ!Py{gZ{fPk~^vBRcj4LW|pr#QHLq92=KuQAtE(;{tmjdk#2`32bxIja^OAN9P zXmJ+-0Yj`(CkTF+=YhK7^U%0ZQQ^`+RoEq03>qA+cLkL#+eVj=ZI#i0?n2(SWw)|V zJpv-wGoUCSzM8gWv7oFACfFx!P%HotOmHH{JWwGM6z4#^v{jUjvNECKH&wnWrKl`q zAFG7}y!3$tRaa%7baB!N(4w20o2bv(XeNQ>rn+J!k_aLbK8x*rNdk{}*JFOoNS;P& zn{xpbva$l?a3ED5%4cd>C|P#7Qk_>RK}zw|yduoh>g)4J(ZsWGpk~$TB-U;;=W)xH zvS_cyvL>*WjihW<Ar7>95F1!D<`F8^`tw#5t6IyNRjnqNq0$^s)2d}?C{?UV3gyuO zdT*v%j-v`WY?DPLTAPWgrfJv^Wb#DO4-P71T55LysB$wBy#PcCRm~b$;!7@z;H^A2 zpH{4D9*C_*wPM%prroHoH=B({rFEzQT3JEBx@pv`X1(01G@5p+vEFR0*D8(nYCR5@ z2K@{TbBRNHsaA*+0zK2{1kr{#iRJ?`$QqZ*=26zMu4$Aq2r+VkvkFTTT-?UD=e#De zl~{I|bzCb5HG`a~4{X(;xOao@MqBv%lg|ie+p1u5j%F}h9J{0kn;|NWn2@jyxUj7v z7q&y#>xDEo;JC6ZEAvj)x0Us=f%bt9JMy9$Bw547m{!+{<LU&v*r(pdA)J=#s8x~0 zHZeV})%Wp0+<Q(Bx-y2gJV?zW#k5sy^UADwZD^--z5v`NtM54H^Ryh}JXSkW;lE~) zCVPA?rt!b(^DKuO$evXw4d6(&Uo_$4xXl*!-*U~ag(Im>HVnhmr}_%KPC3pl9KX;@ zjsu^sIgU?zqY#?(VE(pwa(cpXJmxyiblFK7nCIX&$<>{9da4thNNvs;pBhd$NmQme zF%i=f@tsD1sT1H4ahxBur|MQZ?O)&MeyUFYF7^m7w_0|0kMW&u$k`Wg4-j3~XJb#@ z6ie!E1ur<@eV_1BxqD|Khb*X;YfjDCZ>~FA1kO^pzBqCec0Z!MZW4nPPNvK6#vyF- zm%*(L|Dp}A$2ncs|5)hhdj9dv+_GNyCI8m1`FDQHm;QQq;?+O3yk2;efBjMZ^usgg v{)Z3pZ#+DE`Tq59Z+&&^`{f7uGmlS#!rwyOw7-7kP3?zE*R<SEI=ub?K+LN0 diff --git a/Python314_4_x86_Template/Lib/__pycache__/dis.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/dis.cpython-314.pyc deleted file mode 100644 index a56a98a624f0d95e13a9591f61ac65eb739f8579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54296 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 E0bi#}H2?qr diff --git a/Python314_4_x86_Template/Lib/__pycache__/enum.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/enum.cpython-314.pyc deleted file mode 100644 index 69f6615d77eaa3385e62970a52b87cbbeb62696a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88098 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 Omj`W?pG#*fvi}b}T1F%Q diff --git a/Python314_4_x86_Template/Lib/__pycache__/filecmp.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/filecmp.cpython-314.pyc deleted file mode 100644 index 1bbdc5b2fa3558f1f8b2c5b7d4808da9c0861ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15381 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 Kb3#4C@c#l@;mOAU diff --git a/Python314_4_x86_Template/Lib/__pycache__/fnmatch.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/fnmatch.cpython-314.pyc deleted file mode 100644 index 29a99a8c239ce177d6d9e180d2001381f9aa2a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7934 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 M?#HGEN@tA!0}hv5L;wH) diff --git a/Python314_4_x86_Template/Lib/__pycache__/fractions.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/fractions.cpython-314.pyc deleted file mode 100644 index fa6f5e559e2c1c1f255e4c4ec5b53ff2f32896d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41941 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 AEdT%j diff --git a/Python314_4_x86_Template/Lib/__pycache__/functools.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/functools.cpython-314.pyc deleted file mode 100644 index ce34ddd58771db268c24ca78d9f79e70fc983eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48061 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 X>~1{F$G90mBtN^G6!S4jMj#0Q*y!RG diff --git a/Python314_4_x86_Template/Lib/__pycache__/getpass.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/getpass.cpython-314.pyc deleted file mode 100644 index dbd0343d974e47d55b1b46f8ba9745c17703c74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9842 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 S+x&rzf$|3~2Fq>^%KrxhBm=Af diff --git a/Python314_4_x86_Template/Lib/__pycache__/gettext.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/gettext.cpython-314.pyc deleted file mode 100644 index 4687de57e25757ec1d23f1fbceca8df93755d4a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23226 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%0DEs_zJLf2S%<(`01`Qw!;kae<LoG7CU^Djq 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/glob.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/glob.cpython-314.pyc deleted file mode 100644 index 45634ecc1119284a68399293e9d465f50f8ee532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26178 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/gzip.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/gzip.cpython-314.pyc deleted file mode 100644 index a3bd16fec93eaed4174ede41e56bc3a2c6f538e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33806 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/hashlib.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/hashlib.cpython-314.pyc deleted file mode 100644 index d1e9a7d9b8477d47d372291bbae804ae0cc119cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8419 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/heapq.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/heapq.cpython-314.pyc deleted file mode 100644 index fde48f03ba97619385db383c7a60df640eedd541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18669 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/hmac.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/hmac.cpython-314.pyc deleted file mode 100644 index ab6670908e74e912517b1b711e87f3993dd4a8e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12271 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%0Ak*>1Z#zUs`?i1;ivPDeo32-^cUbx`7(&KUE9J zi^+4g@~;|KLarr9bG@9l4qNlll(cQlm%ShwV+*nKM~v7)x+HA6j`FX~*7)}UHQzE+ z#KJQT46+)FyaIqvUobdRnqnhG93U8JavfuDjD@{M+1RD=3)|5CHQ<>1&lqp~0#5Pu zm~Wq+JCp5;&Y}Rm{fqiR2eW7%i*I79K_~aP=SuPZkbBq9pi;A4DEh8xvfri>0#r;6 zA%lNBF9SK*oJDQUu0?k3Jh02PXu~&7kAyVE^?L+^G65*0{51-Q5LO27wk%e5PM><@ zslIw<`k4On*jGJgpZnh3(4ue8^vTDiu9@y1T$&9&EUkOw-8|R4=-ra_ZeQ?jU-Y)Z zt?Vkh7Q7OiJvo<IbZws=Sh6{Pbo$Ru&-!mPTyMB_X|ba1p)L5ul@DzJqeI|E{q_2v zZh2@Em)yQ<eOLOf9x|Q@%H+xq2IM#K12dc$G@e&!v2M<F@-LF*7V6_QqSVSnw5w;I z&foCz8Sn9ocM)VdMDf~FCbLenY?^7T9bt-bi66Rl{70z0k+LSrxVph_fFCT8m8P8& zN#q=Tn(cE)p1~*4tnv@Yz&`{5rh;Hwb~%KuPi)Pw3N~%c2KFoj_Dm1rxx;K&`&jgK zk|ALgDn7CKK6Btn#R485zjC+xz1MLki|#$sjz@0ahPq`3EB8;kpO(0U+Gn+4i_q{H zqkQ#kTZORwX<L)9Z}o)W5o$kQ28KBNtIR6&!LL1i8ZSAfPyW_+aJdvUe^{>Kje<}C s&;R$2(YnFcwqgrEwDotg_iaZV?4!<#qju|kn?Sk4d9=!U-!CBlZ-9u^egFUf diff --git a/Python314_4_x86_Template/Lib/__pycache__/inspect.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/inspect.cpython-314.pyc deleted file mode 100644 index 3499a648ddc848a16913d6b8c1caba542a11ddf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139633 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%0Af(Z<eWTa)G|Js9BAN1R+!w~%H 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 bMRDNkEc3I=+Wfb5>7U$-4N&J|6s!LS^YGTk diff --git a/Python314_4_x86_Template/Lib/__pycache__/ipaddress.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/ipaddress.cpython-314.pyc deleted file mode 100644 index 57a215f37122493dbc13e9e171e188645ae1a17b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94089 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/keyword.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/keyword.cpython-314.pyc deleted file mode 100644 index 5fd1310751c59e7716912fc9accef987c7fa2be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1603 zcmaKrTW{Mo6vri7@<p~2_m(zolQLH)Y2q}ObxnHNvTkjG6=@K74+C5Xv_!|8B~hd3 zrP@<4>|u|4+!xrxK2A{#-S{-1UqDU2z|L`;?PVB&Klvkh4iArbbbGAk7|?#Qf9Ky? zhVc$3=Pf^i52pYp#-X8%rg6CN!c-=V=DvBD1LZ*$$OaWaMNkP;205S#s0ylq#z5ns zI_LuEBIpw6GUy6u0(2F04KxY54!Qxl37P^;gKmKcXa+P3n%g&34(_uE_sYMtW{j7) zZS(Br2gBUX(>WVeVQ7>8Uz_6L{G74epg+PvU$XRANIxM<T`58``&7~}q;fq@RZm3C zBbd%EJ5H;|6Vl}YBQVl|5+POGqd}08BNj1974z?tIAAnk#1~ORk#OMk30Gtg&w#&x z(FZG{dW<A#*bzZOcm&hY!K<X<`3<7P&_aor_*^ni37Hbnb<pkXP9zZn>A^vgF+wAs z$U(I0I0V|k*R5wS_7C=2&mOh}1Xz#RkvqDdkR$&svKA89U{SMwmOLPO58Hp_f4)V| z_gbRQqU4|D=e)B%I;k0_j<XjiCL{Ph-?1QFC8-z?k4AV+(g<mv5sAUqMlOw}qwOa& zNSL<vMFf3I4w%kEW;#a`U7$(Aq|!D`(#V71m~xnPB%^(8djV|gk|!d?BXsjw7rQ`P zEZ|-2;ot&$<*``lVwXqwW;)*$Qd{`qx^NVT4h?h;tP4Dh1;onn2n4YM8g_iDOOc2I z0ne@Tk$`P<jxn$;DaZ3AQv(_4yppN5k9$xj+B)W{r|p!pz~5iCbeSikjCGACiRh~H zX`z1{@I+~6xHx36H(hOcP)*u~QuBJ+QfbVVOS<T~zVKWZ0djF&*?`iQOVH^uWb{2e z4O6=6y7*Bjj}kChK$Au2eltEmZ|Lsh-S$`TU6VHTncUdfxzmQ<px=(A_y&qDX?uYf z_#KG9#v`tvOB6(7a&4o1F#I*PHn!bu_tm|-Zi|I+0Hy7!Fm6LJwEryzU3w4-e-N-o zavQ?pkDL4oeU>*(^L?&nTBp-SWzRe*X4bru`@^bac^Ln)oXmzXD;RbqD<YK)+sVpE zj$xOx3R2auYgr9x%&@E3I8q(y0@6jKOGuZIt{_bq_IP#`=^CCliF6(52GUK8Hia~e zbPI`Kj2Wa^!ye1#kmk{20cjEK8c0iMw~Vxc_q&a>ifd~~O<Y??x`VWVw28Z0NZWX; zkC5)-$sZ%#L%SWMU5s%b=>g{P5a|*6euDI=i7tC4@@K%+?D3F42d-pa4Ef1${VDQE y;q<v_kL6CB_hUwF;^*$0>eSon%IoUNN%_zE<S#34>I-k{o3HDeKh)$VJlEg6o6{Ho diff --git a/Python314_4_x86_Template/Lib/__pycache__/linecache.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/linecache.cpython-314.pyc deleted file mode 100644 index ae5866ca4be908a6cfeee106b03a42544f83eebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9570 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 G>;Es0t+AZ| diff --git a/Python314_4_x86_Template/Lib/__pycache__/locale.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/locale.cpython-314.pyc deleted file mode 100644 index 3eae95264b525d4e045511985ed47b6eb2321f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59977 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/lzma.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/lzma.cpython-314.pyc deleted file mode 100644 index be1dcd40e66d84b368d6a803bc91ab41c20b985b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16533 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/mimetypes.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/mimetypes.cpython-314.pyc deleted file mode 100644 index 493faa241d4bf28b3ba0d19f43792a07e3c09d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28928 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 btPtMLFX${Yyj`jzv!bALv*GPcI+*_tdghx5 diff --git a/Python314_4_x86_Template/Lib/__pycache__/numbers.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/numbers.cpython-314.pyc deleted file mode 100644 index c73ed870c92b2658b5e0a720b387fad50e10d3b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14261 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 JlQzn%{x9?weOUki diff --git a/Python314_4_x86_Template/Lib/__pycache__/opcode.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/opcode.cpython-314.pyc deleted file mode 100644 index dc23767acec96ac0f80679726159fabd2594b28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4560 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/operator.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/operator.cpython-314.pyc deleted file mode 100644 index ce14bc533c01ec4671049df98f536b26f7387877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19068 zcmdUXeNbFicISKDuc7H~Xb=blLht|q-3WmY=v$yKBumJ~(vyrl7OkF!en87jH@@$o z58_OEli6KldB#jKGsY7q@=PYX(q>X)?_}4Ls@<LS)Fw4a{s^)>E2c+V>&-`PC0n(N z#klPFul&w^AKf$!Mpday?Je$kr{BBxp8Ij`Ip>~xFFQ(#Jp#h4>!-1ob_&8@(+?|1 zCbE3hDF`V+5p<zLP{ct|aUePoB}5lu0b(Jd8?gw{gXl%{Ar>Q+Ao>wY5z7!aA(kUn zAZ|viM65#Gf>@1MgSZv37I7P59b!GAjM#wKh}eX<9kCg)1+f(|fEYw<L)?Mbj<^%C z1F;iv7h)IUZp3cH9>hI}dlB~`?ngW@DC*)BK{<HFaoVX%^@4J!O3+=(VZZ{V7qC$2 z19U4#0E?8PfF9)-pjSB#=u=Jr7AyULCCW)azj6w&RCx-}shkEZQ_cWxQU(Cam9u~q z%F}?GL!0$V<r!dA${^qt<ypXL<s4v*avpH2q5#$^7XY^@7Xj;(=K$-KAwXHV1lXWF z57?-D0kBDV0dTu=8L(Ly25eD6fUU|Ez<?443@X=@FIEY0QEyWs_`PGZ&>$!yRe~b* zI1C=p+xfduylb-G?d0#Gc(=oT*P*B=p;H+H+@*{Ib}18pyOkJVw{jJ*M|lx&j}iym zt4sp!Qxbstl_cN+WeV`1@)F=7g#jMkDquXcGrfBp^@QnXdQXEF>xGa@KN2d?kA@2M zV<ESGJXEBg2zm7WkXJt$a_Xl-W%^U0P5SB34*g81TptKk=x5QxPlqb?XF^r_U}%f} zY^Yj47pl?EhqmfUs8+ua+NNI&)#=ZL>h+<JtX~Q>=+B25^)G~)^cO<g^~<3aeK^#r zheAR9N~lv0hj!^-40Y*|&~AMs)UA((dh}>$kFJLH>SLjO`gmx+J`p;g$3h47tD!^s zi=o4MT$yeXWFgd7AVe|8YSEHy!qek1;gEBi5EFyfBbq1(o@b|27SWSTK9kT@HWnFG zJ)VmbF-@LKMyKPdtlpSPGF_7+vZm^Ca!ekZPK@fYWI~filZ>g_R5B5bCB|hvDeDue z982gdme69Oo}^i_M!C-2)F+aO4p}}0QtFM!<WyX3m#rink!Un<qg}okltEd2X*zZ- z5?2$t$1D_;03{7n<r_P0qLhoEWK~2?L?%^Kkg2FZQd8w=O^wQ9prcKxqp?WbGpXW3 zR68VJi?CQEf!17);mx!z$JGe0d?XQ-bry-msU@x9a4Rn^64#RQ6iZ%<Mb)T>N*qll zuBnNbniy3(%zi?Jsohi4pl`HNj#29-QU3^a6g8hx7#-T-NjoDW8bCCfmOwY0_C$1@ zjjKBPKP`<$;_-9==!{16v>Q)7g6>QgjwYuQ`m<x{!l)XL>FQ+Kp}v%MkHwQo7L8p? zJI2*?A<8g5jq7PC#tERg(R5+VEUzeLXDE!twTal6j*pWOeR4XE9H=2d;I3FAs@}ji zdVs1kmbjKK08p8ZA4ya+HkG`N1k5PK8Pme}rG*p8go>1e=xML<G+s(EZF(f_p&FWv zb;oozty1-+*bS8Fh^uKY#(i9$2v2~K(gkK69dY1hHGRftQa_=;oK$BgRoMZ$&V)Li zmOwe2b|x9XR1!T+6)iC9SqLuXedMId6k7CMK=g^U6SWA6jKtBXDU-NlA{^RDS|&A? z5-y4R@uo=#iZdk_z<hFq=Eq@qq~o4&&yf}*X>mlOJS{Eh@e>D!pVL&P4M(CX>pE~? z*YNcudvO?SbyXeJwc*itaymK^(bS!>L`(<Jbl$X`UBd=Db$9iId%`#N?+ss6!B`Pp z4eOIr!%xRXhVA(?b(6J$9tT^2EEn;Le(3ex+LL;E89zR+LCDS<<j-nQFIvP7BQNU( zFk8fq(u-CL)C0+)wm0<*JC0YM(|xB`Q|n!anwO{%Xd<Mazy^qnuO`y44v|hOmH=<t zMu~iHHIcq`h!hhM0y_xVD3LFlM6$T8Z|$-1Q_%!?i;mGR-dhm&b|9Q{bSaROFvJ^8 zU)yr{8k0$m7+i2qWPM0MYC~u-*q{q2Bd~`)m`vv{eHBc%4$T@Q&ZZefO=@BDH3^CX zOz50xQ&fGLCFF|`4{~e_lZ&J*ezeP{Ae2=(34zM4$27I$;wghe2dDyBH9LUci~vQA zdLt$L@A8V-o&~9Xz8PR04s!F<m&AcpQv%gkb4t)mU<CMNu_xf{`cuNDh1Nr!lxL<N zXi?{{Nw0zE5jcjZ8IlPTe)iykw0U*slQ`l7ZX_H+ck|{sW;U%LISBdPF_^zkWt71P zoJ7=o04V_!=cL&K3sS|#Xi_sBGnFf7QZv`1+XzaGz?qeF`)7L>q%EuIqMb%tw*W~A z!^9Rm3<*6Zo+Il<v_K@-5fsx>7|NODG81(k*9y-9(MS-bgun6n=fvClQiJO-(k7nr zlGu)?6*%RriM(U&5vF!90v8Z7LiQ{6?4o*Efp9*+Hc`9TtEETF+C(Lk!w6g=geY&M zfmt=l=~}t7b8TY8LyW*>#H<$Db0(_|g5APKBqsTBF8eFqQRp!q#>~yISw}d`ZJBU5 zz{k1B{=I6jiD?*tFrrohz`6XjL$?my&d+aD4c_&}WF8U%26?Z=<zF%-=qg$y2^oP= zM63P2;@RD)GaKo3;tez8_WEHmN7hi@LF8csCI}fKa2z1N&bHa907=Y{%froU)53CJ zU<BfXY?Pf`CLug>X|=6QtAj`om?C7Ow20TukW1_6+O)X-CZHo`(aL7YReTZ5;ftMX z@x?AGl)w!_ULdf65h_GFGvv19<+WR~8(A2EmkG)A+PW>-<Kh%-4&Sj>OS-900x3c^ z+7g;bX5e(PtkSl17=R`}Bk*NHHp<wfs?Cr~tZyANi%cFyV3v@L5+n6%hTJjQx%L?C zLl#EhRYEdjL?Y1&gs)Tpq^Qi0OKTmOydPN@fjL4pN{fWJ8FFb|S-V{ak%bZXIwARK z(fs7?qCs7$%@xsd36afCVLZT1Nyo4)8Z$co9F>$4+OwqElw;VQK|>D9QkW1|>2K#u zvnAOhGW2&l_clai@*<4DPx8_<IS90lv^N|!*W}^wXAP~*TC1EKp=F;u8cDRmwo}QY zfR(<QK#bm#(uETdjoblgNxwOzrrqH%c{jr0bkRlpKFL^;-E(p?oE<?^u=Lf&HEL^1 zi_DJV$*2h&d<%$1lYwlNO><pylMlVy-}i1`Eb02A{vVe8;Hif_{r7wNe_GN%>wHvF zHSfHgSa8=adVQZ`Ul<1DrBX7i`A`R}&KQCBM~=t=*mJ7PR5%OB6T=s&iKrG_OC8Z< zX9T`YNI!v9!j77VC@r4`l7fG3$}uFA3a6?e?46go2840U;#%QS*Z$|h1V~vcoGlfE zA;%T5ot9f>m~x!O^0-K-!xvunUUQ{E4w}UD<cP}1T|*uM&1lT^iP-1_d4u4sVzTiI z100FBTU;HKvc|*3{WNJYrV+DYP|Q&w8N&$tKBCqJ0HeZJoI3gQ;*wbroql`o-1%<~ zE&9sl&VOa#m6IR2gcAQ!f#55%R#JJVx;Yl2o3EZ=SeIF20XLBxxjYiGZ246yc*@EM z{2|qdxCS+H7ri2_?)=q~r3T5(z`L>7BFjmxVRn!y#R$BEs8MHd!|E$Nsk5tT+5>)t zr^{!<WB4ls;W}!^n$}<e7%xMPX*hJ7_@HN`0wjm2-zG$KTSFEbjKQa+WANemB3>|< zx?^U$HLpAPr@)QiLHPz>p@HeGZ$U@8NCh8}PgPBOh9dE4W71|b3DeP}w0Jd#MZn4e zBk&&(H8Nu`aZ9V`8@}ngC1vwSdBrQI!5?MYe&H7U)eF@}9+Vtia33}LkowIEb{|rw z!)+xGi7mirp`FbtG-h(IJZiE^Fk8Neqo#B*7yNsXpAq=ah?y}=MSi1y^%zP>gE~md z4vf(X$t@1s?7W5q7l&;daL693b6L_FW%H0D!HKPS$d=$+g<)G4X7mBM$A?Mo@R02$ ze@3$0<j85)<D$KKJeQ^Ito&2XXUb6?bu|wt549z?`$ciuu?-xUDf6PULCBOgCGniu zHCZF)MQIp9%?Ja6;WoL5(ag*ar1-p^b!4?jvSz`P^z6kf-FQ*DBJ9U3i=y3d;W(i~ z%dHx&Ob4EmA~l$F9&@fm60)l4<b8%e$8eG7k-*TG9ma+P{2}n{k4?w9wxtb$*bKSr zO&>Xw4aBpWkVmFtaqiR~W64SAWRm7AG7=|`{TYLfsf4xZDPwa3KIcHNoqOp~>~vhm z20=Vd>KR)Vqk4z@tmSWNM``k8<fbPH?Y5It!ZZX0+iACC<R+1fuo3vSBMd(#$#LJo zcPw(sjwC#Aa;xLeIdB>7>hR2T=9mcF|HJoGRE7q_MBuJwG|9*}gRP1ze|b18PfkO2 zq26YKb}pcrwVCZX2?Ie{!wyJ13O&tTZB&Dx2kv=|d!S*zkkemheAzaMA!P}Gv=ijg z{+z<nCC6a0#73rdL)fKD29x?3YZF9`vYW^nbipS-a+NkP#v<rqHbv!0+|TdCc8^B$ zj1;D+F$4I?2)u`=JqAb#zt|-BD(A-E)E;`9-uE^w`j0;Hm(M+Q`&S?OoA3LZKX!_x zEwj$Qv5lD}$>}P7<li*cef!3&|I<g_ieCt#tN3Sb-;xv0&z1_Dt|}_x#O<38{ek=b zz%2=>swq{~qQCN$5=vKPr2AP3l@q(=w93g&@nNCo)x?9sT4b6ndF0(ZH~MDxLvQ{2 z-ugxVew#wWeSZU0vN5}oi-n%q^IyKcSkgmw*p~V7+sOs@wncAAYCxmq#g9D4Ji>b( z@3Ae;_o_sKwVRLa7T()keB9yuu_zKOa3A*zKlT?NuXp~qP6Qk!?M9IT^(;J~(lRD0 zdT|IFuR~%dG~;nmGEBH_mj1>F1==EPTx*xx+Fra)m}$2`Eqoc-v1f&M=>p>$R}PJB z?S|<|(wPzXdqmA3_P@L(bJBvhe!k$ox88QU;=3KJS}q^Os|e~B5_A#A0327AbZ4cI zguc=xr2w1b4s6pFC{DmaMFMmyF2Evu^9<3(cp+qrn^9{ceJIryG_bbgagqR*^{r1t zba_nGM<=jxNT%O-4BL7#8Qz?W16ok#(j$hwLeqZj@EjY1Ad$zQDl;2)fmX85TTS6X zbmXxB3!1Y^lUWCSxAKnX%iAuuMj-=Nlrf%NM!+bf9feWCpjFyLp3*wF_0ozmIo)_f z(^nKckyWtAEZE3H#oKv6gL{K4T|$Ej6Vbigf_{xi5f`|~(TbN8#?O%K&*-3`^|U)Q zC(_zFRk3yIgg7L2i$g-fwqS<DbG9}&C=tw9Zb{dWs~g8eaHznIMZm5^rc|j39FEc) z?U{_=`%Kxx_M%{z_6B&!=vKHEsl_?LvQ#XcnUsbk&<8)}qaSq5)Y}Zj_o!{*9FaBJ zBp*+U9ekczbg2HMJ(qU@92Qf;1qW<gXx1q))4P}KHSZK(;_$@`X7N375dLf01175W zY^5Phy9jEAB`2r&WKB!7f1Ym0urha%#`JKw<8V9)PS*N5C<#dstrivfG$s7JwqdUS zQBA{JO%H0?fAhpgPGMW)hgCIm9>exSN;^ovcw4RlIV{q=9=1Oo63;tezf>9aQ3pl_ z{U}gBUJy%d7w#!=!l2_UdWG7!r=W@CR^F7>h|pSOMUPS~x)GOm^I9~*8cV_QIt4C# zsjLD0YvsHlq+IpFS@bp0QqZ4!oH3EThHQK_6Lh8>9lO#6#?CdDge$wV=<v9jpmPd+ z>7LK+(@YQBxr(Tp(ILX8e}^hA)E;@~`rV=Vp|?)lxjcXQ2iO0BFBX2IqDs6crd|3p z4j2R-hCrqvhhWn9{_L1By6m^8;^b6uQ@PDR{vjp&&#Kz5Pk%r~Kd3$O`t(BSkvaS4 zgQ_F=&Bt*tSj4`B9BC)m)KL2cVQQ0>c4<>MeUNsANz$=5d7{b46qmWdg0!Tm@iAx! zq)oec4x=K!gM{oi0W_Lcjg4*c(W3?z!ofk?-f(b~=jpZ2C=1ygRC#~Jqw;O@(eIvk zSRQ!4Jn*QpenCF=pz`=a>G8#__4BQ>{jZ)~tl0AUz}E)mwcmPn_T<M7XYtl0w@_2} z)qxKw#akzTr;}1Ws@(eKiSK&u_J9BEy|WK$_dlpSF#FWU4zc*C_+j<7uMT8ZGM4-^ zS5off?WhcC(0p4DnRQB&z&QsSrr$>Tdk*${co<AWB{nwNji-KG)p+Bj4<ol+%IPio z%U_$hH8bCI`_~rSb*m>EE#px|_ws+@$x%H#bHh2SF<BoDias#=8tJ91geJ<<L*$+# ze?d+dwuSXD)rSX^jH#9zas??b)wvrJ{GP<Vg4Ag-@R_4sPK&`{VH#UCqtIg-y2%p` z8>eW1`@&&z!;oadFX?JBmSEqZyb@EV7`p=${ZAdAwJl5zHTt}&%Z-<Qnk?j3O9_j0 zjdv1nBp%l7`=D;0{o}v~bqDB2?2Xv>oZstzd;7aP-r4aW(D&c#jx4zxrN_i2!BKQf zTs=b6_k4s%5OD^=GdG~O@{Cb8JXM^XFyViIEWBy#hrqHMhOS|1bb6FJWAlosWWBB+ ze%g#|XdL+IOSir>uiyEVH-2To-?rdx<5dO)>Nn1{gZF%l+x>q;Z^$P>c0V^Sa7s!| zBtfV!9F8VOfnbcZcv8n0v42C!|A4?B6CjREZ^maj3^mHd2sg24ILpkDjmAdxQI#eF zgj;deOJqZ(1w&SFA;ZBE-f6V=^69@uV?J^exZF!6LfQ7zna5J8tM2i3(N+H#ru{MT z6OZWHu>@;=hcP6`V+Sgk!YaEH_NHNXI$(De!R{oBvw&Nih1}wFD+S!{EHv#-H}sB& zZAV$LDwI0&lP9)3$>I2UMkl2)M15fQ+V<w<-66|9Bx^G}Q@gyUUGC1#nqy`nFRZ}J zdpPV41y|aDU|+)qOaY0A5eL~PwhhR2`31v*!*?T)4QA+dZl75_&X0Le+6yb}vqNP4 zSy_doW5|KrqHSHR$Q^X9(DO8HxV2FUge<2a;eyz{!b_Q@%T2{8QRf(^nzFQJx*^kN zYnVihsES4g<foWQRW<WH-?+I@DzBdOl2xl;strWr#%&;S+Z`5d8;IML7aT(?`pL9| zpmx@>gV^gRhPyCVTS4p%d`tIyZU^SEe*)B}S@uu&z31+V^B3MKyEF8yp+9)ew0|nA zMfTgEVc9+|K7^|+pT9twRw{9&<%2>W)OM5Q(@mC-@$*4dH-7Wc8^r0of-o<W%RqQ- zNrA9GC-9d9$gbk1SmVf5nH{B9B=FMZdD>i06`&QoVZGQ!3RxNr+|c;2sr9YayC;9Y zbHUd|hRJ+0ee3xrHA2`us^q@|;N4`}9$Z4_)Y>pRcA(bm4=K-afEBZh)H+vU|G%3V z?E7d*u+UJaT)%Nm_aCX%-y!fWf%^n<^ek6uIsInX4jnYw>)8%_KB(LCOSc{Jw#m@Z zD>&FP8oG%a{tI;kaRa8^x2>KTWDA7;h`^r!WNT_tg<Kz!I?UG85;V2P)YKkm>Mg$% zO-)XL*j`j^=C3|SQ`3~l_7E9ok7XR{Uc)n#eK>hzz9F1PGCfPAuk+-${6n<Mob2sd zOMiO|_f5cXCRvGd{5YhM;O}rRr+{Ebs5GN*GkatCmjlC;mj}yyw{<^EeE4+iB|)}N z=aQVT^R4jEVAleBP_<@<k`=$oJu-+DrHk)>^W`Y}T~IfcqpmP_LKcQi52Y!lzeWje z5qJf_5Yx7El8foh+5Ky4_anrm9moQ8zPb8U&m({J{PsI-Z?t`P^r64)eSh1dO<Nag z4?fs*Xu)@gr&z4o_En!DAj$NgNWq231>_fjWN&y~Dm`bV!51r79Z7DDe1{X@qRs1w zGTgStnm}T6D31M{z#{_xgFt?9pWAvv;Gd$_Hz8L_c;v5~)9wtsG4O%E^=`%YYwp!7 z`1{}1-+lR=m+$-g7u@C^A2Qg1Mx8hLD&A%{IsanD^0#z|Q}FklqYldn89o}ezo0C8 zcg%h%SlwrpSr4CIz7oj-MG2(6a>6+>;&MWd`8(r>$|_$t2dgPJoP)KL8;pfAsOC#g zp7ET((>oOBIa;9Qgp6N-r;=!)9CWSF%o4J28;{QI*cKk@#dpUy4T(G_e6|N2K4G`h zwDM37ZslPvlD7++*J7`6^cU_!GV{{ni)rzi>F6@e9d6<Ua^{h#0&T~k?bdpln5!B^ zaj#bSsry|g?^WC_`|X#$)9}-Z?GL(68iw7kZ>bUa%AdWBwCo)M{~jRdHB>RNce+5m zfrBzpLqlhHo!ezUpd2eTIh57!(OVJ-hLvx&fYzny+__-1;0#sw2EJo1lvd1LeEo&5 zz3`w^Uhp@}N{epaYu;Plub+5RnvdSO`o`4<6~PbOZRYFy<)_}Rc(?YQ+J{{y?suK| zpzGv=@>3tUPuZ@66@G*)Ti~wryGimLbdu|!bG6ZB%as4is|A+AGdI|x7^~u1V)i`J z25*T?ass*B^EtaoM_PeA5V#R1o{>(wrbL=%Tw-mUhJ#BotGKKuNwWO(iDuC8ca)ag z+EWpx<0@CMz>sfzxNVu2F5-8=lF7Kn{tsm^N1pH%BhL+;s#UyexJ}N}*k3>v!$0!! zYcJ2fyjWiKdf(Uj-s=Ci1K%EatM~1mcMraE@TX0^3+25FzTUs}1%FnK<=>sYH~Q}O zeE;CRgW!T6R{W^;k86SaMEXn5pLrI_l?9)|hZU15!?jfTLA<dWVKgkSIYnc^2$0R9 z?F3>vK3p)Td_q|VIX+x4r%FWEN%3((fvfYAQkUxjyio)Vp2{9A!XdP!Wm+!NeWn#> zq%b1rdvPY~(B+PGuC$Q!V+1avcFQF1aI8mi{mWCSV>s88I=vC{SyFN;5BZjL$d?g$ z0$&7q_W$VDaex(vnThXtduM^HR8s$JM+mc2joC!!OpCScierRmA{lK=j;uOI$R?;& zF#=Z!BmoSeY#sU|jlu}1#32WOJlUbYCmb%AkXEpVt2EP=&dznls~kBQfytHZ^3)Ts z3vrtn^3gwhcpdr`$jCS#ep#kptN3O0{GbY(!KRosKbqGeNOO!4xV|=nt|mx>X@-0R z+twjSUKHGD#)0l9AxKlm4EYEiU56mqER4XvcoKp%24=`d@a1&~)*>Gx@UNbPV3uiR z6U^e;w)OgS8&M>1`$;I$sGA`l#lH1!3f3VbBQQr4H_E3p>}IejX7TCHbvm^P`51w3 zJV_I`Smfx|#cIW|o+M}{f&{+xBm~KrG($duSJr7^3-U1ncUBODeId35MfM)PU=N-B zJ)Xfy{*!h%j2${R9V^puHj3W^W9O-;HUeaN@w=(~?kK<8$uD2>Ymxj0BEJ;K8YrDi zppgL7k#Wt6Uw`8Fjrc_%wv|2v36P@a*I5{>I^#MBzo)^kQ}AmJ{Q3dE7r+nf^ON+( z0dQI_@$<&~h%Y~N%g>hbvzz=_6+ftB?5S+0#N5c>x}0lNu2D$p8M2ZKF)mp6Wakr* z&k4?^oOSqcQtx6n$hw%E_Tm^A{(k^JxDMB9I8Ix=^rU?%Jk^(sXTtnFZapa-Iv*$C z3<THmOe7jL5!{^*8-7ge1zH!|@#=Z11M=d!I#Oa|%(%C1;Kq$|qXg_Fn#eS5!qV;{ zzY1@>#9eYAs3UHY^Sa<NxrJN@LOX8!^1Ja8_sN0a#J_o`+<1!%<wjEDoIh~X)jY9C zr6Ij}p&zA@nx{AB9d&%B?Qz`Ww=ilkB{1*v;|F%j>^uGDH@k(D*=QoicpE8mb|Z0> z-z*%r<jn%?R#7&iS*WyiSKmy|8)h8zCiTgVQr+E$jqTY!M&3~T37QJq3y0`L@gs*v zl$N#>diT%nSrYJ=YvzynO8$7OmOt)Z<Bzv*@W+3x;g6qufj<_#6-!QJT&%1yp0zE; zGth24JN6mR1HH!c$Vub*)HD3~A@aMB|HH}#<Jr`1JduyTKY&eK`hM&w{#?TG`|_ni zyaBek&cfto3v2DPu&%upw!hE9j*4eQ19#&X|56c^;}*(mEv&A^!UB6NY+tX19XTsn z=rg#1V&ERZw`s{s1$l&uEf!YOYGJ`H3+vuzVF$1&ZDu(kp11J};`1i%quLcyp+2F! z%EGGaEKF{(u)t0W>+G?xy@xEU_oQf`C4z7BlAj7J5vpn}tgh9<g1ani_dbrL3P0W? zhz*ZD4zcX9+aYes1Iixz%&)TjwUV&S1ghz4IbpnjOexj$t_0)fDNYqUmdvs<i8xkb zXXIFhe0DmY3uTw^0t$eYVxxw#l|FVCh{r_!`xowJ(f?Qx9ise+uUXvjkpS??pty}t zfKU2l@q+k~K=AQ^=tKz~4hn#kW_~^awuEXmK9aV6>=s;&U@wm^Rj^p(T?2SZQiY4? z2@B9quRrBp^jD>PxO<W+GQJj<r#y=sWD;k777>knA4)c-yjcbCLixK4;M6$a?@Fsv z#fu!v`M`_Mq~jPb&+Gqn_oquSQE->zl&)CxGs#WjrRXz$-t@m6ah(bXe;Oz}wcGip IT_WH=0_%t{;{X5v diff --git a/Python314_4_x86_Template/Lib/__pycache__/optparse.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/optparse.cpython-314.pyc deleted file mode 100644 index c8935410438f8668e95157b5ed1e11daba0a2359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69059 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/pickle.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/pickle.cpython-314.pyc deleted file mode 100644 index b0da31c8dc9d90718ac7643356aab11adecaf2ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85319 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 UbiLUi(fQW=HJPp-XGl2zKfTNv1ONa4 diff --git a/Python314_4_x86_Template/Lib/__pycache__/pkgutil.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/pkgutil.cpython-314.pyc deleted file mode 100644 index 82f9281c826ee77c3c57c7160398818dec0b2f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18083 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 QdxxB7PFmkPA>jOf0jn{z@&Et; diff --git a/Python314_4_x86_Template/Lib/__pycache__/platform.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/platform.cpython-314.pyc deleted file mode 100644 index bd3dbba478d65698eedcc499d62bb15078acb43f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48150 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/py_compile.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/py_compile.cpython-314.pyc deleted file mode 100644 index 1489678c1d886cac5b21492244b98cca019e4c44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10302 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 H9sB)1dGql| diff --git a/Python314_4_x86_Template/Lib/__pycache__/queue.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/queue.cpython-314.pyc deleted file mode 100644 index 68298504b1af1c4a9ea7182dd121ed9b6ac5ea94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17579 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/quopri.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/quopri.cpython-314.pyc deleted file mode 100644 index 1ac12990dce4b0f2d4ad2123787d1500a058b57c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9885 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 GApd{7NQ-d* diff --git a/Python314_4_x86_Template/Lib/__pycache__/random.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/random.cpython-314.pyc deleted file mode 100644 index 2f7958de8992a8a3ecd6c0d412cb190058a750e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37849 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%0AHIZs0AJF! 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 M{*SGKjqiy4|LFPyGynhq diff --git a/Python314_4_x86_Template/Lib/__pycache__/reprlib.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/reprlib.cpython-314.pyc deleted file mode 100644 index c5814f075c4df86cef1c428ff9cba2d432effa48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11752 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/selectors.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/selectors.cpython-314.pyc deleted file mode 100644 index 2add510cb6f913561bfaf62c6b3e461121d03956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27131 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%0DxSK%&NFtSG8rS^7}$-; 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 QR+Ml3%+T9ZiLK%P2h4o?!2kdN diff --git a/Python314_4_x86_Template/Lib/__pycache__/shlex.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/shlex.cpython-314.pyc deleted file mode 100644 index 9d7b5b510b54327d2e1cf3754b76652df6b60d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15546 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 NR_(u94g2f!{vQZrLp=Zh diff --git a/Python314_4_x86_Template/Lib/__pycache__/shutil.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/shutil.cpython-314.pyc deleted file mode 100644 index d823f4366952be5d96c530aaf3e32b0534295e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72276 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%0D8nd%)m)DP#D1VzGvja&v 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 IT)!IsFWET<L;wH) diff --git a/Python314_4_x86_Template/Lib/__pycache__/signal.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/signal.cpython-314.pyc deleted file mode 100644 index f0c1aee977f8549e0ad9c79e8f4cb0c2ddfbaa11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4655 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 EAG20gSO5S3 diff --git a/Python314_4_x86_Template/Lib/__pycache__/socket.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/socket.cpython-314.pyc deleted file mode 100644 index 260ac7f91ab26d954e24e9671ff4d704fdd73c10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43035 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/socketserver.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/socketserver.cpython-314.pyc deleted file mode 100644 index abd8b9846d0bad552979022e7f05074c5cad45b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35247 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 Wgg>htUfW^YV$-&NlIVs3;r{?F|1t;w diff --git a/Python314_4_x86_Template/Lib/__pycache__/ssl.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/ssl.cpython-314.pyc deleted file mode 100644 index 9904f447e549c8e9e8bc9023e98a1db51f819bd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65970 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%0Do}gr=#Mu>b}6uipS6hiH1*hRy6LPJb@q_rwro@^ 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 BAOrva diff --git a/Python314_4_x86_Template/Lib/__pycache__/stringprep.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/stringprep.cpython-314.pyc deleted file mode 100644 index ef73a81196994ec7ff106bd2d00226d39f22ffd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25448 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/struct.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/struct.cpython-314.pyc deleted file mode 100644 index 460ac2657cd18edf0def2f7763c6e3834083c3e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmXw#%}N6?6or%dYwe(j3l&^+;cC>D7OPkhH*PG5O4VI3q?t&^&P;|o8MLmt^i_Ny zHvw_s3yAdr%(V3`zMR|x=fK@vS*{^7ukL%ahY|WJKmTJb#I$9^1T|6Ly}}CJqdxB8 z1FK#ttB21mHP^P$wzBJ}?`)&M(^bx5o<}btz#8uu_>{+j0cU(z?kbdql2dvaRH5wB zPR961FO{TGs-*Ucbhh&6FMR-+Xg^W{=)&=C6ck)(R{%%|oHCTfF{MW2GYcFO4X(i( zni?W4&W_1lE+8i?6wvN=TjWW?h-4ri1y?!Yu`I#?%S9tfBV~{)lPRFlCf8#%l<9uE zLp${O=#buuB#W66R3#a?hz4X{+RVnfdXmVnh{Y+anO1XLly4Y(+Zf{?tLA%?%I_w^ N>mR88iMC+Xcz;&RbFTmZ diff --git a/Python314_4_x86_Template/Lib/__pycache__/subprocess.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/subprocess.cpython-314.pyc deleted file mode 100644 index c7153554feda4f5af50cb8b1938f50aa15f7777b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85025 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 I$<@IAf8>J8NB{r; diff --git a/Python314_4_x86_Template/Lib/__pycache__/tarfile.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/tarfile.cpython-314.pyc deleted file mode 100644 index f4ad494c78a17e7d09f2e177d78fe0ac2c9a663f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133210 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/tempfile.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/tempfile.cpython-314.pyc deleted file mode 100644 index 3fd019d927f15aa043e16f928e6336b51fccef0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42144 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/textwrap.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/textwrap.cpython-314.pyc deleted file mode 100644 index 39b2fa732d5564e4f68662a2d29a5e4aae2e73ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18506 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 RZ<62liTycX&aOsJ{y)Ijeyacg diff --git a/Python314_4_x86_Template/Lib/__pycache__/threading.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/threading.cpython-314.pyc deleted file mode 100644 index a55eba7dc29483a39e9a0d0c3f880fe96493501c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66560 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/token.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/token.cpython-314.pyc deleted file mode 100644 index 567776b88d7c912c0d3a6a483761781a389499f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3946 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/tokenize.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/tokenize.cpython-314.pyc deleted file mode 100644 index d3b156052831a547a75589cf68c21051ae0d0120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27016 zcmcJ12~b?;o#%UfpLBEI@VIFt5D1;<3X(v=NQksBvLjGW3mViBbhlqWEU6V|NoFR4 zoH#-|_PDj9tno~yj5pr3vXj~<TeB5Ao7p&1dw>AbdS=G*PO7$2TU#qx%Ea-^Zua;8 z-q8)lPHLy-Nxc5vcOU=ne}CVWEVqNhGh<!}zj=n^{+2$pho#`-QKN<9ra3<+aeiLn z{RYW!j`JIPjK@uqxspTJ)MGhrm8{2Yl8t?vd+d@O@#Y?f<iM|`$9dc(xzsebl*Q6K zl860zB`<!hJ=r@AEQhTp`*@C&qvp<)a)&+rjasMDzg3*yj+CZ!j27BqP(o6{r<Qd5 zhLVM>XW3HraCU#IR&V;Zh4UXe#cxeVa8glcc0PwbxeGbJbJ*U$JtI*KBGu{7(t5YU zs6<O8eorAMmHNGSm-(~tF8Ak175-eQa=2o+45jjhD>B>K!7C**<A%$txZ%ppQY68j zFID*qq-uYmRO2s_YW>Ah-Eb-LR}a?=*ACb1FsVJM_m@Zwl;SV-mudZEH8*TpbECg} zxFNF_l8@EfIPB9(OHHi4is2@IWoAx2eG4nGWw>d$UZ0VzegU)4JnZNnQl~EC$6r;* z?NGm^ZLD;2l^#>YnK-G{UoExyYozV|TB+S%C+%RlTK)BzJs58Fuj{+sqn&E*#tpfB zncsTuT`c!*%%-P5meEZ$IJ_4rIsPX9mfb2;Y9(1uJE*jO>u`q_EA3<TZ5`e>ylc2h zUzz>G!tnmg_N4=AFPk%CS#2%;Jgv5MX|4Wk>%OVw*3I*3<)wqH#<t<g;hp;G90F7l z^c)(dULHg*&B|aiYnMK^jgvZuGgijSb+>bzba=RJxO4chza=wwJt`R9&f;4?5#P?@ z*R37Pzk|iETSJQP-N|uwu7c}4JbWY#7t+ynUtJq|2HYog4|n_5wT|y~y=*sN40*_T zZ1`yZ4RwJteuj@}yQGrqEl_%aI@a|N-|I$_QD@h0TW9an>Il0#kDaqgJq+(`2i|cF zKcTNuFN<wQ><)c3PxyCYU!C;t!n@DE8}C#8J$Re^d-3k~ci{bb|L6Ss3b_eh^85GW z`?SB)e}H`t3_s~VxaTR38wF)3<A(j|*{uYwuVH__!@(#J+d%YUC=yNtrEoMNTnJ6X zgt4e7^k0!K;5#Np$Hm}eyv5;=lzgE^F%%q~2uDIbAsiQi!gweW5`z-TNEd>Va30AQ zDLyVCG$};Kg!5OVP+SN{q^Lu!memz+5riH|7!8d?N0BaF2&p-PBO_69G#nWhq^Qu} z)!*E@eOEj6$}t*}LgHjNLTT~nlsFO+#=;XJArwI!h(tG0Bg%(j67@mrYV$<+Vn~<_ zVN9dKr3>Ma3)J_K;KW2|6q#b7pcERNxI*oXha~EXBNDnS2{cR^K{yhdl7vQ#@qBeP zo1d;z-9DxN>i98&oz2ozYyyExVd(-@5)U~hLzCx2V!XrQ5b)3#+1Lf?N-QKa#zX3N zOYDkoLykr^g&0&iAua_)iN@Y2MlWp@Mxql_lMyUKWHda2X3^1f11P>->5no1DW0w; zgaZHgTB2fjJRAv5D6`av^=6%=6~N?TNyFn2OfTkiGALojsc)B};zep&?P?}CgcBiA z2we`2NE27KB0y{CU?3Hi2o6W5XpBcrojlpqH=xX7oGryjbaFBjq4kc83gh8tk&Dgl zseYD>MRr7E3WyTOb&igP3DyyhcJNkLWFj0#9c+q~1q?=nuD&Cuj`s8&Q?fV|$dN)5 z6LH~6bV`LJ4fuph!MHFLSB9)WH5;=6{>pY}aU@E5gU$Uk2Tx=1_s0<W+{D<WmZ&&> zFcCZUtbeP}bsDdM@TAaB;2uZ#LUa;!pNUQ>-`ye_IVuJ(hPDc)FNR~n$!J6hMuK8= ztKbh_nT%p0j)x=ym5_+yBBn>^3r)nMk*&f>Kz}eaA#_Kv$$Y$Q!sJAJ2H7$Zjb5CJ z$+p9%P6nPF=-$(ZME3x;LC>i(Vlaj&e4Us1Cd6iUJ=J++ATV&Mx2rEO@N|FI={TYD zb7zGiX=rS?sivjrkg_4qb{rU{*x{zev&}=7T86jy;y}0Qtc`~{&ejZxLy_Sx)%s*R zLq<K3v8e1|!7fpZiX$0_n^Q?M_h=VlgJ5=tIWW2$7~O4>v4D$$@g+1lZ1x*6m=BBJ zC|L(N$>ulJa6YqWN8u5bH)FLET{Lo>?a>SZ#6b^o{VZYqYe;MUQ_{DVr1Q5Mwp!9( zG2YLkPL=+q<2h~+eEM#UPs}KRjv5ozx>2FAF78Y0(Wj=7p!+}_;6mAQ2kNlK3~pHn zo16U-?n1yvOH3tvM$wICWg8GsAQGGm$+iGc-$ZaEgw;32Lla|iRxlEYN`wppR3uKL ztrz6+BOOCe#sP{$!O@V|ws&vq5N+fk?8+~OMx^-A$V7B%^n5TLY6fnW@IrThTgB$K zA!UoVx9te*2wdK?D=-k6M4M75AWg=GPK3`7p*uu>LO_A&5p_un1mqljxGh>7G57Jk zcujMu;_A84*TS!czgKjp_J_V7_*UAEF4T3c6nD*JrMyq1ym>FXZ@A|U&bpVp+kau? zv)dnVynV+b6kfmVG(fiOw^+TuY0();Z6=b6oGL3$b!yL$zI@cr(IU#3j@!IUCdkx$ z3Ru-}uk(FAld^z@Q~k0<S$ffiW?tt-FMi?#LiJ(}-m-(?QMQJ1UV0|ev0%KoILSTJ z+<m9#`rd1MZyCOEC@H;i_2$*(mP5;xht_gy=LTLo`|8=1+_nW*+x^_am-pV-yWlDl z^HJ<|uFq$u<sv}BaybHlNnq#+3cCV<XQqM^YKkWi7z>MWiNG-u#aiZ42W<cyAQb6} zSW2JyfdC*z3XcSW63EDT;JG+z$_@lZCW7%e$eT0*tQ!ab1GzIIQH)0YIW}sxso85A z;^Gx}ee?$y;D-jIdB+0>XUTeKFqz9A84>zB3bBzSN*J+F=2J!g*g}k`twTJt+*bTO z`W#+_A^d!QCI&$)J%gOaS!Qy_enaLL?QEHEl=&~oJlmgNjD{l^nswwtlqfkHRFkrl z=5aAP6%$)f^?v-t3BgQr$s=<$uQk5fIKO+Tx_zar{r1R8+1`cxy=+LEce|Pu9MZcy z2oczXVXW_%NDvH&qV_~e%Iu3V7`Y<0A@Tqv5YSC?x9a8!Z*H4EvQn~bA$Qw9x_w|P z{*Xvp{S&R5CxchOOOZf%Fr)phx!pHU&13v+3;AuzlG;FW#)#-7>@{c4G3wHkunr9k ziHC+F3FFYEEs4U`vzMP52K5OXI@{X3H`qMZ+1x$s+mi6Mo;`n9OK78*?AEi<Q(8>( zZi=cz!B$qd)z|c;vu(|L_4K{Nz9wIy<ZP&G_-yl*VOIOP#DtF;To*OeLS%4btnW}F zcc|qP(TVI&M&*AZ>g*Sv7*3ezy$%{kQ3QO)J*og4Omk3<7*6pqfO0Dz19^hbl;F6S zAuY@I>jV#_)TfFYG-yDM62mBA%qU^f@}+-K!sz9mG));=xG4h(X3rcQH1*SV+VE)V zf_6inK@-fT3^5bID%z?+TjoK&pXm372iwuPAqt;^X04~%F9g0iMJVeHsJ~xQeh2v) z^sW+rF;kdr(epCrvx&rM$h;`?Q!+m$^O9^hFUp27{7ItE0^An{TP8)L6LHxEq&7K4 zs4N<Z%T|SLm1Of2u}`uwI65kBL2W2i5O_8?5grBJBeppZ6GLO+%b~bz5kv8*2}!mn zG2%Yf_=rdZB~F`@<Oo4fkV9SoWOic};&J49lCpmVFW^5LSJA^Sm`d(vd1nTuyWh)c zoUyEBm#$_v-py{DFL*b*b*A&Ng)0zN^BeBwH@sc7<U9Iy)t%4J2j3ijef&G&@3g#K zwdgy#oZmIer@RF(J8n3V+h5szbN5`^A9uX#tp`Re=;j|;xtz9#MlRR)z{R<8rceIr zLo?UZ#m9-|`S&G<9j<i@7eNVw#1pKO8St|?#BmupHi0lraIWFRLR1L+Y7j#}sL{z7 z1Vq{TWM2<h`7UCHLYHG=Cb6^y)Ldd8N{-?$PE|~EKXbaTcRb%QJ9_KzD^J{fV#(RC zU}{h>OySvc4MRiVY7cb`VUH>wzNUr*5~?#3*oUvFI#HJ{p%nU3L*t>Uh6bN6UAm!x zvT5bjY}LqCT}|1vx~i)a#s=gyRwGo_01Ovd*BSMbx>Ht7salP!tLi8EG=SN#ilJx0 z*o6{i1v!>}Ms+gZkSP6(3T3`J;ZU*cmxdDS5RXQ79ufDS!L<L0WQ3;L<Tnsa6bU_v z<#_dhM<)U<R?<tLR~5am|CJ1E85FY53eoFN@E0f8_!{@e1D~WsdKZo&%R0&7&oU(k zk{cwm--x%xZ^GN^H{)&dTky8~t&#(Bgwt<BhwZZSNoX|`{#9HD-UP$|Z`-3UAV7$A zkc%LsJm-LFBU*Q$mB*J3^du!jXk)O)Z@?D~N%^8QU4rlfUHObZr+WIt-FO45SXgi3 z#9xJ;4M0nvhM+2t?JSPC9W_WSnQYU<SCKf2_4^_~+&uWOyo^zT9amysqwK^XfE_O= znlXLDnJOyAk6ZgGF2`3^s<@Q>6qU`GzUfw0MIS6m69>yCY61h9hA?yqsbb9;p&tnw zpFQAi$E%2|{*-i5d3Cb%*3Bpvl^+EI1Fk$hjofB*=u8c`^^MKr8?l+aS955}Uya6G zz(Q?CqXu~`M<sV=(;jXmKvtiaY0%W5hDSlOnADMxuI1||xo*P)Ffwh`$H?hSDb#=1 zYRYy?Y*DlwjaQ%Bdi6OUlq{i<5UJt_P{PrvIP_|eK9y9N7y5iw5fjXbP-;TP7z|EK zg_wXYTcDhSl1DB9feV}uj$Dj`ZNC7#8i5XCicv!mdRtDmkRBm2irr1zqikj!kc|YW zMuJfXUV-S?SUe;#x=~-R)4D9G8yXmh1~JI2a!Dpou1|Xtb;rMk7eF(&=$dWDm~v*l zTz;c`*;z4H^Je+$<;&H(?zI1;{O$7PeSK>=Weep`ykAj!b8PPPy!7UCuRnKZ^oNr_ zm|Utj@yN*M_VExN-F^Ihn`_n9uxM+TH!s^-Qu#%%9JqO4CBJdT@xC)Z<?>$dz1F+x zs#tVYB;#{mSgG9huB#RF&{goMK<|3=Z&aW^$7PCvF~jEIy$(2xgT`|l6G*Xr%D}=g z;c*k-+)U@-*BLk+z?51HCwadSfVU}_Z?;kVCJm%xX1{qepdZpfw%>&{+3-|xLs?o> zKLN#tXNcrQ_GGYf>L~S=E$A<p%8gGy(eVw>pv7+)G`YC#hCyTI1|dwQJzBkF*96AZ zd(AMeHSuQW=%}DWIn=OeC>Nkx6QRNcNfpA1Iu@`kT!8j292tQ+8tOp@sfVG;V_NH} z2=bCPFepSqmzchpp>Sxj2QH9)9ZEYCh4KZ;Nz$M~HI8ixCHG_$Wl52m-V?(45H=!I z%A`uyc43R7FJW*yWZnVE$L(O0Lgt5jZe=f@#h{4@jK-;3U_Xf=jWI4&JVa@B33^7f z0WQjjG}#)CD;v<JvJRtcYm1}E%rFD61g)bOqSqKz;lLcIyIQuY!<0>o{1`69<0J;K zjjpn_OyMWjZ`|Mdh}PkiAE0pjU*a{*f$#L>&33+U0sB2;ccz^A$?R_&y64KdUnacL zce8J`tbGw8bN6c5zPn}nZq&b(H)BnCa<6~++Lu>7wTqtGxu=#qEi<N++jITQwKFe% zVKv`(H{bV0&6`_Z-}1f7Z<+r5%S-v)OYUPchLp{9-FeNqYAac^l_a;%RnMK7>zT{C zU9uwVTPfYQY}?PM;bw%7gcU~ko@Y3q1!9*Ug47@nG3RxNIY9n?p6zciL_qyUeW#k( zen;Mu*@K2nbrAZVtmIIOfz>iWrH0U=@(_bFgqoD6pCpS74{VO6ej?8so<W1(?l=1# zZN^NTr7_@M-M*{sA_#2ebL(`W3f>y`uyGmuj?8-emOYn1q_OKU=HEEFlLo&PbM_na z^?pYY@%*+;g+v`2f}?VF%lvaPfAtgWTs!9BQ9WMOTqU4wfa?a}#`tsmWo{bI6}^y2 z$(Tt<Vy7|8`wZeBGWRil78+JVORH=m^q^{06$#G1pX^7FNDj&^nE)S(j|5|(z<D5( zi=c%q`zN9>SH%yu==qmXc^n!>?&k#hoVhmVp}|;FkgR>F^AU%@uNW)*RZliAPEtQ) zzHfkS{-6KfU;p~oKgZv%eHONBv9G5l*=84G$SGR_fzUJ1)G3mxN~sxE0)5u;n_L3K zhk~I1@KAUnKn63dzp`D=C%YqQjsU7H0yJf_D-+<^FjBenGp6CMP&oc0yg=CV3uhdu zx~2tN^?St?Gd(F!QS!*Lr}F*W=2Y9R#k`jLc@?X9b&Gj*bK&K@RxNo=sCh_pwN|}# zwR+dx>RqX#vR9lp!Mj$^ZJ*mUC(i9!DQbFb#soexBHts<T$MBH25QNxnrmCht)1tW zbA9t)xMTR&=kCOpn-8bb&8+0L-f!Evkk^uO6|B0-7hUDa@Vl<Yhc#SD<%3$zn{)lr zwM(;!B~LXv{Yj>PW`-ezQEba;E<;nNbB!_RPhv)(3Dcm#%XJyLQ6y$gZ|XFOJg01W z=xQ0)n86962z$=>wJlo-c<$m){`H{w67q@T;<cD#(2~|$GxP!I2G<=+3nRVYvyn?D z?kpF2UZ&Lc?~tYwPL>7&O=zqi+kWFSXw{Gf_7R{JWp!47m919G>dZj822EoGRA(pI z0R&s`6T*aM+0%QI)k`~uJwqh#u&3QX$`zV*VxwZFlka8l-C$eSA>UKVx8ItHv|`Rd z+c`cnCSy&U+SvB|1zG{0!B(V9Z9L;=)0xprS7spZK|MBegaj8SpTpdd<jkHSK@D)N z$`~=X7^7j(N+TWza>tiZ`5J{bjP<NWE0g|BuTRW6Xzi~}r)Z(HgTaQGaVe`J{>`AP zU!!1JA^fJ<$4^Pu^>>&!{fT+b{LP>zGp5}Tvx5or=~?u^piP^9KnU0W+s=CiM1D40 zVZJ{drmB=V-N$dno&sVrB)2I;8g3cesYC9W--(dTg*|8HBBViKPnV$=_=3?KOaC@4 zHvPN#Xtmh@sk3zth*yzcOyHF;T)mnwJog-<5#sM6##bbpNVO>&Cqfa~LRvD&cs9)_ zE|Nx0ws-X%J=y8+?efc(p1z~7%_}s;a<q#+WMeEE%a9taeO+fx^z?PfhQ1SuNSM`q zdcY4Gd*Ecx(W582<g9^p-{RM)6-PWa5oR`|xNIIF&Q}a0Ui<>Rh=o;%l~*BFHtKco zJUCWESOUWu872P!+0LX*VmlSBDzk)=K1BQ))j<5JYy>APK1(5sQcSi(l$8RSu4GgR zS&<EF=!EP9)f0mOM%S4|L}g@|k~XcVb)d(po=7gpByj2Y5721*9mWf;xwB^*zkUwv zWe%~XdBrpKwd~xP&NWZYY}?nL1vh(@Oq|Xe&SdAZw_5h*r&`+<UClGclTXg)r96eV z_AGm9QbOH}?t9)M`rf<jsikZP?ppR#rM!hNXWht3PAz-uC`Wejt-<B&8j41xFS=9P zwl8|O&YE6yC#74@sX4~KEhdMTvzt<7!VUZT*(I-BN)-!pIo~RswLr>FX1}!OR(x*P zA75S0ZA#@8z1(}FcQvnmF|U5^+2y>Jwc3Vx%b)hn9)0m-s;ugUotlii5m_idu$+A$ zm0OUkdvX6<`+VKE_oMpNvew12*4z0@WxHp)FpO29^{&vmBy7LEeMQ(c+mmYC0=hnX zJXO8rwQa9%yIs3fz59;uhueOz?VZ}Cj#Deur)GOor8V<cSL!+zO7_hjx$p9>x+)i4 zm2>80SN(cfeQMcNm)g>@=xUrf`i+yx9k&k9EFJr{KY3u;)5uK8|J*&7z2dEY$(<6a zXi`$;b>HYql~-Nwd-!>t%gKA-=QZjsy?ph?)g@2Of~`iO@YtdHLsS^wwnt^4HKY^- z>$<6yX)_%YXg<GQO^{~a)3jQlWe~;rnB^Q7vkvJDe7{Z=_5N_M%kV8ctU0Pc4W5GU z29=8025m4|>J*aWm{#sz4B9u)bcHLJi;xJ%o?cLD<kG445ZR;Iqf%M)0#wG~H)i5K z@Ei6aU4Um4U*TLV8p%)`*+8otnOHyO@S9>52mu%^YS1xb8Y8Q854aSqTGwOTnDt}{ zO6j8<(rJTQO6e<=%1|VL0@~9Qb{%Jvxz_5a2OS!|1!r@c&5fWYDaso~&@uMcXtC+v zG-uQMUsy>%jq+?<Z<Tj3#mpy<4x05jD`lfj3yw-#u%!(e{g%wtP4^KqX+Bwv5$ZI4 zs9tMTofWJo;}bTcwfbnWq7FafGDi2S`L${?e)XO<eR`htJsotg8CUvX)yuP$`XqE< z96D5`p+kkl-D;a?d*hQ)N{0@$6kvpneq#}Q_iwWPeq(xW2WjT@8G;6QHci*N_}(9? zv>fi4KHJZ!{_c*xpVQ9l6MqNqfj&l+4^m8;Z2Jl_)GvQTNiWljscy_5OW}xkgCd6T zl1+V`C%a@z-;*Z~6TMalt?bq)@ach0{{VcxR06DgI<-^~dfBO^;Y0jGs`o{Dy+p4h zy})F1jAS#?>~kurAVyzrQ4(otWG850JfNt8#aAfCK`Lj(6e{P3BY`p1EE*L9k{WG9 zA!gr*Oii+1*iYlcBh{x#u3`|Hr5bZGsjR}fctKp_^NhkOgtegL<%>5it`;;d7BtQ{ zL1&XyFCG7O;TzR+?!~<38G9<f1Tv;jwO}j%S#J4iZq41?nz<+Ej?F){n!9V}NUEI3 z-<fNDGu<gq{;eV+tU^7bx%cs1`)y0IV%gIGlWDT%CHJi5fraxH+$vx~YB?3&^{t`V zZqSh%j{D`+vkofM{6_gg@$O~M?v%G~9z>^U(OZ|wF1*$IM(IN7&gJZ#TKodyk)LYQ zsQI(Y-g-u>iO6R&BG0I~8mEx7?8Y?xzUM7X9-BM-t=?rXVi{E~yw&$c-vTsO+51w( z<*UWbi^a|JV@t(5)$S)tz*)?j-gLg{oOj+a{m}UX=Ua#WgXf)H%X>b*I(RWvT$X(H zTV>i<>%ZN+P~5ugX}vx0{d3<v_n$4x{bv`B4K42+Qu&uvZ}p<Ldaixh+wg&_FlkwK zRi?^ouJ=89n&<L%GYSeN1;H*;Eh?<uQ}oF=KL}?q6}mPx6~ZlnQ<%gN3K1JAzD6$s z55<s3I8Lm?i<!MtFQNg8q}QKO0wFoYi^ya#mw)KBncF_h^O#FMtj;&reAv=#uKndX zzTI5=fWwRRmz7<oJR-D!KhvXcB9JNA@4z=baJ}F+Lmp{gqL=|Wbo8&3qIXC^M~2Nb z^P88@&=G1Rn=2oD68L053`XK)!_oX|N!JRsGx=XDj^L`dHMwfHkcY1rlBUE6`B*FN zt<m%32?)Pk^2COB>QtPR+N6lq#0ABHd@HG|758gOWUgVV18zL@%oK{l;d)9UckA=y zkFEL!Ivia=lnPCR$kkVE9nDZ4RHO0x!sJvO1w-f-D=KJpGM&2s_w)&<;NjqXDXP^4 zH%cut5DWZ^m>aQD8W?6OL|)!wj%bA3!%>W-VBBIzh`}{2G`f}bK=In3F{{0Y?mh+& zTc*bkp~K|VL4MKWQ!o%f>5tB1cC`UAbv;F-U8NPD^LSM8fu>PH-$u52^3z8}6VZ4a z&gP2SGknA%qs^qbSGtCtO~FaH1xAEWx=8^jcOp!l;%qc%9;wPunG+m2P%EDb&J}`j zv>p;j-%mq3ACfMGLJ=iTTxf&<1P64CGtNA!<34o%3YkFQciiHDzara9Y|}CFV^N?3 zhJK<2vSCV+jhL=DHV52H6`vMmk5ZX#Lf0J#OmmORI7j~1%cl>g9Iorl*P4^IB}dit zk(AZ`2Uovx^{%xdm6d({i`TxG%z35sX6aH^9kcjNKcTSTs7HTj51~2Jqh$o9p%Cz| zQ`>B&P1knmW;@hx0D&ihjE8oy-$d-mI1~b468KFmZ@NN5XI{`BsA1rkjPi<N=CjJ{ z>WmHLEoA@0j<zRu_e_S#i5I{Yk^&Jj%|bm3M@{T#p&tt9kho0)JaHQx`2bY4jI@B; zaA6$K6bEF!`D62xG}gQ)VPQYbA3MVFX!D*uJNGuX`QVofAKq}JxlQ~rN+g_=rp6%A zrUsjp1f@`O!j+M$86G<3iRdM07vO@zypSQ})A<Hwhl0M`M&}CxfEbd=N7gCLy@3q_ z6aNamI7{$Ca0Yd_g>&Z4w!hH4>L_1ylrK3dR~-$Dj)r;T{OKh}8$pg^X8iZQoXmZt z;%3FXZMC@VZgJZ^PXXc=vUV+7cOmcxU;fIM7YaI8t%vVg58v~YrkuIcr#=IsS^)<^ zE@%tdr@2z@^lvTLMeTk=)CR_zEU)nQXa^MG6pszUp&em3pCD`+wBgG@PAK>?4;s@7 zH;6u#&G3I(^wV&@4l%H}0^+Pu8?2$WOhF)K@!Qb{UF;f%$O=e?+PNLnV$ci*)}qx$ z@UGVgMHcdb!95ey_5&E)f)<|2rIo~+xhkY<)M^_~*LFUmwtA(ubz_G*^0zESeb<$G z>-w&Un$-94OyLsF8tTrbkqlZ}3~UZQnNJs=k*{9MCuCUHEZnGt<_FFfeAHgfo%mIl z+h;82U?g$`-$x@1P1E6~5s4t4on>nD31d@{5q2yK=stb0gmN*=t>wfAC|evh<%v-T zh+jG@(PEId^)#GLOesf~L{Qu?NE7G*vWep`=0rflwNq1D9l#e1{}b-G1k?^QwoWqO zvX3t6r@xe=SC_&#PebRb^h(hDWbkr$a*7=VlP<x(859?UM&TgV4}^N|XhbVPL7_lC zmNf`(Y*203y5WG#JhMT3CPHJdg2xs91Baj_W@V?o1I;PDQD#)>vp!j4Viar+s2W6$ zIAYlWub{xNoNyj#IOT<-KU#ixq(m=<F+DgN6bp@n$HJi8n3q^6#?GZN_5kH@;tRYG ziqqJFpw&t#ViQ<9(pCrD+J(_@JUA|fXbyzaS8!_QGV`Fpi6hJz)=mtDF$YSe)Jd%y zT7`gwU<B*JoJX0r0bFIUWK?W@m8hdHDv>h)fCIh=nL|V^W5h9Rbu=j09cQ%~h^bH( zg%}4%&zKMam!v`?CF<j6ERO;jqoJ`NaW+^RrK*PXP#B9yb@g?N{}Fh31b_NNgqW;3 zkM`iTpI1<38mZNA*g$$_Y#@e+D!Fpb4<e^;A6^j=a4O)m6pi(e+LtyAeCgqxpd3?V zy#2IdY;;j%077LPx#hYIJ1%Wx&CK>?A}iJC%159p2BW?3UT*0hb}YEcKU(vYJ?40O zp`2Urz=+?E<3v7x*W%!wcNQCye6evvMIdY-7=be4?;$`VCM`d+JfRp&^E#X2*X?~5 z_)@Z27+LvsuS`!ezmd%r%_w^?TXibBF~kg~jUlG@fid5z<w*YyAYDUq@cY*LFrb^n zFYx+oo5g>Hl8L$uVE~(*jtmiRDnZvEM5YLi>A+{AL4#6ks7W}D5C^G)6VAs?fDxv} z>PtAUKF5ygU9A$I^O<C4#>S8>%1Jts=fi}~j<VyTY}1J6(Hn4?q^?)=8^+1_xNIW? zN9+zWfI~T;E<Us&p^=Mn#iy=1OaDDu?sKRS%YEPJnl*i6?^;gzLPgh7PWOVV`+>n? zuTd4qN!z=wDnLQiW6p%goPAIUcna@A^IlN1TF|su&@|tE+qP7&ch-n1k|Rqw)eElb z2X<usI1bGz_fmEvH@~g3(6~-q)ZrwFuIx8JU_@5s*%T6V-@Z(uHV&8piN{_UqWaha zhIA7MIHyC~X3kq0^Q#kmLn${zS{J289ZF)x(`mgU3YBpKV2zn8M=gDwwu}KjiOq$L zG8>L!n^=KQr&$ZrP`1{_fbPt4fk&N|b$VmN0N4v)3fg$=0qi$ZJC)QT)B5^RDwC|E z{T#nx^Y#Jt>W+<lN)PnCVC_rfOhqn6qL<RNqC-fOZ;aCcyF<A897BVNLVXwDd;qLe zlN}26Nu;-jnvhXgVa83(z|`<Nwkz}nr{!cEi^1ty#sMp*c9t;_BB2b~d4e73Om7x( z3DNM+VmoGy@)2y2MGd=5e3!y@(69g_4&o}l73VB6WKFBv$T<eX7;Ile-{jg)-Aoy| zW@$_P7?oj5t$B-I_T2EynU=hDGv@a_dG~S)*PvDFdad`>-rM}2_N~_LU98=^RJ(5} zcmIs-fx&LCS<5R)?peyKo$2~z9_Jz>RuUSr>ifB+(8r}p+HV}WU$TF-<j7*lk++U7 zm7JVCvQ|(vSF==5zu<+jCogGPaaGJ5N4Xi#M~~|`Z|P&sYOlFZd$lr!UHa5Y!Ok1T z`vp5!3-&J-?7#C=sz`w6XJPfM@n;zu*MmX|j(^+XJe<S*C};N(yK$i7=QP=UeIMI( zTI#dX**H2<3GZnW;UYP!Q#;wFEXPk!MkJIi+s;n}BNwrhBCUweA^tZ?Vhdwc$*Z_P zQ7L-e$4fRdy$MbM0vW<y`93AE)q)<J8>7|2^SRHd9yS}+Nc^9aiPoeMua801s*UEN zRBq{NZtY@j?P{)XG1rHww{Y17)9|awoj#t*%AY>=3!IrN{DsS5uKBy7Vsp{MU7Wl4 z>wVK*DXVMMTDWK}yk%RpR^7E$!TJZ?sW*T2{7d#3b1J8N#`?a~oAMMS4Kr64Y$YFf zN|HO5JXO=j-?w`1+1xXsWm^TUYT<%MSg;9e&fMz<uN_R*tvZFfPC?C4P8C=eJe3Q! z$`8=;x#{lro!OfuqWWEMvPoC}LL_-%+17w2<_eOP3!cUWTjK{N`%K*nEy;#uQ+3Lj zlkA>7wcxB-Fx7nY_^g3*m4LF-q!d1H18p}KeH<r*^!o)z&D@X8?xXp}ALsFSuS4A6 z@fF<y!8*`3W><Mg%b+6`kn{}akWICE8nRVf;Xeg!>u4X2Aw*2ra|Wo*Z``di3^9`* zUWDlr1B1{p2tbVk{AO~PhUzQ13z~FdPV}FGzqSxmu2}$mXZ$r&AK|<wi5i-kPseEr zv@zWryRTuLNYmoLxt#NK@Fa^Y>Vfl9V`I$!RU|eL+s2Kk@B~x~0Xmk>K$YzWI-nf7 zC=xA`P1H1y7BpZXc#;#~%NC_36`xVvaU6Swab9sFr~RN92ME85^!h370CF9GddbFR zl_vMh4J^5vra|Iu=B%|6-+cX>+g{(cRMK(HGh<8HvdGbMw(}cVVEdATcSe^zN8low zSBTRMc5IRv=SL3=26Gl=bX{}d;DgQmF|$v6^FXJId)t-US-Bouh!)q7D(XW76raLO zkXZ)=Iq8Gvo2h{z+8Ty*+MWq+I@rOnG*n5H5lSW_v!MY<7(M3G;FA{Ak;{gEX6?cl z#m8|7g1Pd*k4tyk*5Y8J<oy=ERRh0Vcp7~Xtz71(4JXVF5`RIht=tI<^N+L#zk)<2 z`fA#!Oo0-h_Sw>@qDgk7RlX#5lGlfzD5F(PGf3&PVeNvExS|DvoG^wn1gbpi&_o3^ zuig;?afZPmj<PGDuT)9*M=(V+6LCp@3lU9|(jAHft_ijzQxhDLXr$<JAwn|F7?pHR zpbHVOzt4u~77DEc4sg?o`dS~0R=a=#xcP*%ZsW@R6ze3O4t9HpR*!H%pzYH*d4+i4 ztwMu%zQKo+JIqHjAP6-=*X1D2;VZJQ+85GND<Tv5o<nV{U+khBV}zbylN(MjW6BLD zY%bEu<bCw5==@b#exH!OlB6*XmvG!#01dKFnIO7*gUQ!dG>k%y^AM)#NC;_}FI@;h zn5GF=8aW@r?IYw?&*Bu3WL*;>)&wXdYXUO!r#1oUWz#0eD}F-*4yGeVCzPe7Zjm`7 z-7UHVgt1RpWtv5nPq7q`3{8^~yKp5Q#saf6NZOQbQ$q+-3Ir#hc>&}ATK`EdBw-SC zpZK@f#f&{={$B%-pk0b<6PxWgyqQV%V=o+uB^E;Q7=D97WY|)U-;=Fbu7ZA+T?&L- z9>{_d50KI&Frs|XMKA2?0CE@(Kz>W}J2us&cogRlCa4lcgwv2WySsv279sv0w38wX z{zU}H1Nw122b5j3RJ?uBR4{#f&0V<aF2Cz8PhNP#H2>7?_)_D(CHMa6?v&MY*GjtF z*{jRW>idOY4A-*2y394sci-;5b9gE1&|TZ1HJB_5zF+y>%C{O9o*rKIoLe=WTQ;5h zRh-;ezS_C9b2tBX3*WiZ^!7F@!t2-oqESF>rblH6Y-9s))rTr!Kvi!{e1AZ-aA9w# zQZ;Qt+5)Q5PEp}O|EGw*>RzG?nb`RdI$1)%#}Hd*e-A@xYMqTf?H(OuAtexwoLt5p zQ%{mKY1_RCXh+4IKxwL84*EA0kJ1*1OXwACR0V-K2E<=ta6VrA6@JA3idW{zLC=Qe z7k`Zmk7>1tiNadpfN=BtQ*RwzcJ?fodOoRBR}TepkN&{~ow}P;C4RmK78W|38Fl+h z2Hnt%;{?NmZGvaEQB3&8$8YkRwR=^dOE+$6jRCm=nX~&HyU`Loa1z}-r_=B9yZu>y zkKemn6{%TXo$M;*>78M>g(UzA9Nh^kou@$!j`lF3ylEZ?p=nXu<j>ZK`940tPZ_3+ z0sX86oWOO`Jfw@(gXYanRB4Qb_6waq?xq2Us?K30ce25sgSJUM$DXu1On-qEm;T+X z4a|M62Iw)%Qx=?Qc@7pbavp|lYvTiVGp=8Ev`MGxbEMb<to^j3Hasz#KM%F)F3;&? z#0u#zEtIJWSa&~<eW*suGidMN{rPS#?F2Qr&PsyR0ynG){q<Uj^lyiO(za)~{q+8` z^uZ8;+rnw18V4dM<HERbpd3&~|4zK5SOuWaXw+(iLgOgqi#Y}yo86$f-tF99m}$*n z^21*Y7^=8WDZB2};Zvrk|DxTHh61Qs`IzI7gATMPp)fzBPapbq;J5GBKS57gGG>Tb za4<t`q)(Z&eZthmpBzJLM#(&N46LNKBR-|v_Kb2~DhJ6+hZ%p-`qEImX#y38xx&7o zH9YOcsjA`uM<(Q@%U#gtSywZaGK$-`j=<19WvcV9A^-xTb!+o8o4Wc>&z6CoFakY# zGpEx{ab||($xcKX#0gZ=2aB#Teg!vJ#3kGkCCcVYBK$Jwjsd7*Vf6@Qk_ZcI&bZnO zH~&mRZJgG;E75ezSDZE%6h=1Zb;mWws;y|zR+KDUwpFc<$$QsUp%4%ieX;S-pxG3W zPK$Kyg9dHejbh123TlVns}9Y`MTXbRZ)h}O>cd4~#?2S&WJ8Ae6LbwaPUIitJ9rnC zagd|mOf+!P!|H>9ck}u_dm*a0w4N4n6g2)mQzEx6-cdJ7{{=Ri9YS3^Vb?zrc0INa z{F?y;m~OuaOAwmP_)sKg8=Wj8J-lp!2{0~Nh)&b|kzbvrI#(7eZ^L4-SQD+)DdhiX zntR`wo60Mj-8WaXf<sbg=AT%BpWIQLyj;j_oZqpMyKTkQ`o23K5r2B&-&z-P_pG?~ ze&EVMfx?yC#$}g}*4FmCZ8rOxPPV9|DS&oz0*78n%op47N<agtDEM(@SfYWrABuoj zphyPbFZbd4L1vc%a})*31cnNB1rww|+{J=>^2TvD3nabZvq4cdkpo1+&>Tuwo157U zS+ZIAfj<IH(*`7QDwJr1;SOF3s!Ni<%nO;?54yLIT{{Tp77tCd1reB3F^4Ale^Ixs z`&ma0GS(^KsvF%}H`>hJ9kOA2t88f7*};wsivJzi``|7?XM@G57_MV;B=V-{m>`%p zXjb%P^%?s5e5JAtBZ`q<2egc;6<2ZdkX>{z9;wW-3olE`MBi~`I{!BsqJy|#_K2ZY zIB~|(F<`;*e9RoXbxh2qaloONQ_l6iN+r!P99@<~QUr*_6yfb*M=cmQb<zG7om7mp zl1%k1TTh*4@p5)==*szMP#o>i28oj-?9N9_nlDQ!S44$fc;Pl2=C-2rntXy3r`NAh zql%EJTy{pDrJ+aw9#-Qxu8et7&vGaNo&wv{UAk64e^foGnL)QmO3{D7Uz`VE1E$|I z<$h=}m@9v2vzhZA6mVGutM1xGckTR+1$XU|yA>jZ$+2oGTr?FXzc3$93C*eU?gwVh zT=bYTn2+<&qne#+x+xi+AHOq^DnItX$TINe9{#>Fd(~OC=qyVPEIF&Ek3KL}o3rRv zwgcA>%p6D+mcIPljprbxWLG3F&*!aXw=8G3+^$+HF28kQ?wQvTuO^l%wl5X8&su(I z<Z`wxWVfKjqAC=~-?iq=ec67)u6SAA&U<X+3wF<RKXPydWiwr=;)+*FZkEhEL1&*6 z*Ap{|RC)DkdGlg<^Q<FP(m3DsX7B60ck0;vdRuY9*U_2YHCOg~xfS2G&6lhSI~If; zw?p5b_}&CGq`61=zr!sFUHl^_D*t6JdV-$*{bPZ1!ANQ_?@SezynOk_<vISPt8?uu zg$>tSGbU2rj$FTR?ZWIcFI<HFZFKJ3s%^(z+m63qbLMX>^_vP5kjA#0RXMw7)mC=b zR)%VFC^lDV$nm@bF=VqfSFWMy=&G$^&6!6HW!<x7EqLnYjVqol%eJl1-TnOoGon9^ z|30AQZDD)YUa0#kyXwt9YCGJHkH4&UcI~qNWt)w{d!0S|jQ`2B=a|9x6N3xkpLlqB zd)tm%jqg|~=AAr>c_-g~yw><mEsJSmG23lDobjg|#r)LG-eool*HP+E>%Bd@j6dCF zMtB_y0MJxqOyZ_-86D^ivm}ECLZ=5U8*>FSCVrCk>|{s-+8Tuv3%VP`5glua5cE`? zmMVO*-2{B9=qT3Zj0=-=)j%vfa*=#6p_?E?td@iB3(B3Sa4Cda4HQpDTwqE(0P`o@ z&=vSiKs1H>Df5E71f&p$MurZXh0lj^?CT0{P4(fRl&S!u`rzm|5o&&B3JwmVsz?lN z3UUM|5=FS1m$WvM@Jk5e=3l7b6lW6UBsS0NT$#K`7ErwE{~CY+S!}}Y-$zsp%poQh zXMb(DU~k#F_nyaxi$pZH!c2a{f}G$hOpg*MtLSnE`7z)`*!7X5Jex6Ca5^%ibpklj zU-TREgKx=D@f#sv;%>EWh))pNOnO^ZEtLKp)Gevd=JGg?QkE&0q}|29t`1PoAyn$( z=Ya0En9j$nyJ!)%UYs|&U`UIg1Ln=N!y2O-v!t!NPlx(RrLy5cd7AqT4}=qfdpy({ zom4qw4(r|tOs8y0ocaINsAN!cMtJFF;|z%JQ#2k1W?>LNLMMDq*{*A}aB4!;x`^b3 z!jxe$QIv}zM)?#XN|43CkC8-NxeMToL}iO|;|<Io7DWk^ZbbYRTEa0*x)PTUDWFSB zs~&n#Y#NMW)2oZ1_Ky%Cjo5wCbQP|-iC*1x*Uk+tyN_Kn{4D+b&d{>^3p0iX2CMnt zdwB&jN7r&nU*2|O+g$BZPQ$XR0r$G)7k>0JCorqYd~nU_ndQH}`^AgP&Z<;SZZZ!p zFl$+5$<M#?<jp6SvTA0GYgt8bsJwjh@_hE2MXwhvfGlOT-^p9B9r$}VJ(v&v1M{Z; z>dwRa_&Y*p3HNr90l~LRoQL-q->&P-I^1sjQM(x*KiXqN0_g}zIDn4Os<0=dMp9Id zuThAsUd)uEFc^jS1VhyA8<eeqz-V*?wpZLs8l1vyD|Dr-6BmcVCps+A)uJ}l%oJBD zV2lt>xWWt`XSQ?2H0uQ4Fae$mJPD4EGF3dg=Fbq0DyAqq;T(4LpP~(Yf^~^jnOGB% z^giNN`s_tWHg}#r($gcpN3s8dBG6B|zz_W-hH{i$AFd3Gq+52?CcE!acAQCHd}KYM zTzHN1w&QT_4dGM|8JO+ILzfi~cG-S79MOWOMkFl=*BLDcu1gKtx-Q3nt|OA{=*KOj z(%3|l9rC>#Q$o&eicm8<dM1P8YS_}p+~wJAgE%BBP6bBbq8}3bXkf0>K+%!$es-%N z4jLhh)3}zS(J4BWYgNA6Wvdd=E?Wi|Mn_IoPBu;kW3olL8iF>32t1EsWFQDm$mZ^; zNaPASJOS`v`%X41KbV_{ggRtbe>^lb8ttOfxpCR4e5rY$)(35Y2%z4&2(dLJ$!;=b z;sRTRsK{=G#;Bj{z%aXmQ9QyHP70onlOnsC7MJn2K$+?RlfR-6(~vW!nn5jbm5i_` z8dFkNF>=JD9K}v=+pk=qdr-W9%=pj6p9hTrbH(!y4SBrj!B#G-Y1#oZqqlO}`3noj zZ+V}qd5_C^kMsUDSN0xP@g8S?k8`YXxqnUZ-utes>rXuY#6n@`TibuK=j}a9t`pPt zlya-#LP6{8>hCvxw{gk2Z`$^^oGaz<kZb*i9AA2Z{{_c8Pw>;$`zHHilanu>b*_5r z?|SR!t}g88U-EwbF^9+xOE|tm=C;XP+XGloi>DnaN5Ql;WzW4al5Cnwtdz7Z6>MLz zZ~yL-cXt2zxfT17X-mrLo;KZg)uSJ-N_q+OYMHj*b7jx^l26auZ|_}l9iVPDPTTIe zAvqpO<@(@_k+tPs^Y+_&z7xQG&RGYh9rvA;bB!y`CgjS>oqb}?wv^?YcCr#%=Fi^Q zz0!Pm$$eznanGJLlSuBHw=dbZPg_2;xcQt16`aAj%I7Wec@GUd-v~r!$bUeghYrr0 z567*gf~||5=4lsLX-Dm}<-WZJFUNLF2)(GvFC{}Oo|?I#+g&Sldzb7T)0Ph?cA?_H ziU%i%OO*in?Km`TdFbMt-W$2I{+FM=@${>fg@!$E)h-Lima>m8I(kqan9&PK>yk~F zHh<vGncbD#Iafaq;bI%6)Rr|{vSKTpHa~<@yLZ;LP<dd*d*B}2D@KwXOWu0A-n!ww zw`|k+M`k1D(fZJaVa*QX<l5kpXUDWFl~r_e=UmzRv$v=2jK3u<m7ZA1Ix+3UCCN@V zy5p&N*Hbrr3@5RskIfvL9eLs8qN!xVS7kj*3%zh^(Nva7e=V8H9@;r?J?b*M&~A3# zADX9e3_X|q*vsFwS59}PvOKdjFO1JVlWc$K(vrJ!hELh@S8c_MHXOlw*H(sW)3Sv7 z$W-@2IGLS%@>|7A?wXC6uxeSg53QU-ptda2&)j!7r>#HZs%DFqxvF1U&KdaHha9~> zJZ#S4Js&pN`MeJceuqayx6#dKeOOTfMf!((Ec_GvWA6b(e3`fLp2vA^{@??FGr49G T%f{k+Ci~Zpp+lw;wpafjm+QrU diff --git a/Python314_4_x86_Template/Lib/__pycache__/traceback.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/traceback.cpython-314.pyc deleted file mode 100644 index 035fe780ca82c37d9229a3bd0ada81228f5ddf83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78735 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 U5(;U>E;xPuh`feNWgYx~07etwUH||9 diff --git a/Python314_4_x86_Template/Lib/__pycache__/types.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/types.cpython-314.pyc deleted file mode 100644 index 6309772f14f9904089a7dd3b6cc8f30e0f98b484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15912 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 Uf8J(8&CfdrJMi&e%Lw%U18QM?`2YX_ diff --git a/Python314_4_x86_Template/Lib/__pycache__/typing.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/typing.cpython-314.pyc deleted file mode 100644 index f5e0b484b702dbf9d51600d688918fc2c6fac50a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169332 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 diff --git a/Python314_4_x86_Template/Lib/__pycache__/uuid.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/uuid.cpython-314.pyc deleted file mode 100644 index 4c76481513cb564cb86e8132bfb05e343b22b23f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41036 zcmdtL33OZ8c_#QC@URd72@u?Oa1lvJ+;>t-Ng}mS5-Ao$QMQL73=*IS7fH|$pcYnK z#j=x_s&Z14%hjSMl`cAQ+N`lXQPMdRrMJZGbdP(P9I!wZS+LHr&cuB(mC4Mgq>Alv zPM@0Zzi+_<2&z=>nUizoNxXRXzPm5~cK`d|Ls^*?4$q2VI~ZHzxW6Wk@)+coCrtv! zEpr|&!cA}<evpsw>{l1jv0r^ek6+!OaMlnpoHa&_6`V&OF<sS-IFzgszn->Uc>G3= zE9E@K!+azoVj1e(C$6dIGiqFO#NshVGKMNxndXT3s(B<ok+1Sr$#uxD5!+RpC!^;q z$3-&m)=uRj4@)Ey`D9(qsFUOQ(N5IGig0rztBLb;T;y+{#SweN5y_4?ujWK@ujWPa zuNo`4tA-9<N|wh}avoa&=gI8QNg-;v1rz+la)VyZ9zPR&1M6ieBvR<<j1+mgBE_EW zNQtK>QtIiAlzI9h<(|Wl3eS;<i{+h#yzNTfkxGxFfQwXlvf);HoN#MAIdBhna^co` z^5E8a^5NEd3gEgug>Vmgir^k9k;bhd(r~pAZD{Zmd-x8yevziD4I>kYx+-sx7CCN- zCT^>z6#2D#%HVc*%HeiiwW$5b#`J3a)w(8Kq-*HdK4WTNV``#4zgl<Ief3b29<l58 zi7l|$7>!b{i9@`c)Nw<49^oeBRZqEHJ=kQ3bY0~~=9QKtemxZ|HybOvy@|it)sXne zMS6zH_etl{r0YnNPIt8{(&OR7y`D<+Ngv)0dyaal3b<K5a>P@Ou%n(DxW_yP;68`% z$ML<EeLn%;$q6pp@2SJL0Z%>LQ=VfUH~V_pa}fSBS1U2w4k>dla+diURR19JH>&<~ z%-^K?&oh6s>c7DJEvkR$>aeGkwGs0a<8mgkim;aXYWC;iuC^IDe<sDC&`1ORny{8y z@Y`C(o#HPzg4|(!85iW;&-vcM5MRDLIN%CRejzXw3A^eS=Y!V+V%Rr3d&`CQFD?dL zL4ROA5}Xbq*zNL7O@%~%aQ>Pr5^{M?_q#e;+uE9YJG<JNESAxkVAwSm@-NN?Tnl38 zI#PyR!MVA`h;I@>$t6wA`odurhFs_UuIa`3sYoz1A9hWLM9a0nd_eR?s31xfcA;1? z5MBt)D~0=9;f25y>NO>0Ow~qmmoKb*2>4yWc}r3y8(e{=YfTNV#l@h%wcbrdC8utc zzO|?O*4|*DiiSh3&^%f@9Et>7kr`hkIfphEI>8^94Ng)60_exkTrd(rWl*zVguaFr zBVqIn5(ix2sn9~e5}IZn)D;;IPP@?mu3Mo+*A3r1OW{)nV{o8>eF)El7H9p`%aiEa zTdpZep|lE(qSuakcax@;%GWs`qKD>?bS@aCfeK#tP2F;ZgY#1u?1*bh44~d&mrrWf zRA@fp3(jLCEL2}gxfltEbz#?hAaWxlzToot{TP~XlS?U8lZA*L3(c{dXoB2Y2%@I0 z#jx*MpwD7);W>8f80N@ANQ|)LQed@f&i6t<sluc$jPAqOQUzv0;fM=UmWE<#5t9Nv z6ba4+)Xb=zO-f@?K()&snnHsjeXc{7&JT{Th%~9{>wG;ey**Q{zQ*aEu0UgJtKZi+ z>4&$arM0!KqoZRo&>E<7r>oK;y6YP1;2Ij}bj|p}GcF9F&o%Fx!zA^gBiUr9I!b|i zYu8@SDmr{(=+vc=6aA;W1H+dZTy+b#A~Tp?A@Ldtrv8y?+BNO#=<E&n8UukIUt{}} zucNW2w<FN#pX}}qw05<$cXsZrsiyPymXFy%**~RsTDzwGZQU(hjXjgT>Bf%s_Q}Sc zwg8-|?rERj*VEDM_dT_DT$j$CXl(t}x~KC~bx%)ES9@!FptZ4m65Z3;-rd&NJK5XP z*fQ1Y3j|twdjp;R^i`e4GQb#xBO(nb25}~E)8!9d3lcP(6fu-o2^hwiTMIJ*0H@%! z`H&d!OJhTG_onM8o48HVK)u+4$<xx-(%#t8(bC!2($&)4*n(-+*y3xMY?*5Dw**?I zzm%v8mKPvbM49S<s{2$XIFCxACO#3cG9=EaBZ{im-<0Z8_bi3iDf9VS04oP8O7z`u zwRX8CZ_%okArUo3E#YPp`^Nl}b>lZ%TJYD3zc&1}<F5mMo%rj*UpM}G#v|kN_?^Vx z)VK&YfWK+AWbNXX2cWg9kqVIqLM@uD5!SP;3P<ItXqUz_wOL)nN~4E^vutT4moz+h zfdxooiJaL3c+i5ml;n_)p2SEhIS=`6rpbBe#Ah@)Ps>ju{iZm|H{?9**2RTW^NVwF zn>P#~IUDc>;9Dv=?`s^P`TE&Fz;$E+Z^xGa;BGZd`Hsa6H-hu+ZE+)J3f@k~4YR@d z#hasX{fWWPJR!=skGV}#8oG*;DQ50T6+)M}t6YQ!FQJ>5Aig0YfLAbpf-rh?5fjlG zZXs^I<eLsqKMlXbeef|Jw>fV1dI<u0y>W}zD-i;Cw|Tu^T=dP#U+iA*bWjXOP^-Xv z2%m*8GKw1)=h?4masGw*(2e<cp4W@{9tlo)eGx3qNg$oD*DHcB<epH?<5T^8<Cnw0 z`r|%-K*Snv87Fi!4#dWYnenOF(4wDkM<dWz1P=0>oehYMt>YsM%C@(5cssl|d%C=% z0dy{~o;NbLFn%F8InL(Y!Y$E?l9)r}cQ_l)Z*mW<w&j7{O#AZb-7M#?pAm_}VR4dr zRF6=4p8ON^txwyhVnm<Mg@`&6JXPq|YLD)!aU@HMu63Jvj{pi&2MX1EHN#^lNbpVI zvp{oNJtnv|j~Q;JCj)Ml#{$>xvBGr_?-R-PWWsfNz^g=ZJa)Lbj8Dm9d`kY+0^(Fu zzNip>@GPpo2!3!cs=pY1@G+{t1b%Qds=pL|@HVQy41RDqs=pk5@H?u%0{&u+-vxh( z#$O3P_!%{R75w0ARDU)6;Bi!c4g3`v{{i@28h@>)GEz529GD)nxF#;p4EFssNa{hF z9w32|K%h&aQpLamC>)|RC^`^AGL5Mc!c7+Xu2R!J5d@V&{x&c?NQ7_$Lnxquh$u!@ z{vacKec~<G3xQkVCQHAB6BvcTN+e=iMGH5Akr@J$z~8rmfmuK55}FG{W+*z41VMC$ zAL?4$+B-VCx_cVwCB>oeUf<+Y9jLZZq+s<1E<(PGQxOo5AoK$Zk+5YN{D5mA6b=We zwv=(WkLnVf3(oq)WW0%WI2D`&eJA111{dYyiYx+d5rrEL-b4i>folQL1$KgJUe6lS z-qtu7j5GiVCI9wFUik;O&(gu(UDtiHix?<k2*9?WhO@W8L=d8O`NV6Bb2L%}Zv3t~ zsh~Q!E)trj%BToWssfSE)N?8ILw`;NuQdk1bs%qWJ^@iK$dXzR!%xZO5Hd|Ehm8(_ zKa?g00_a}W4=86AOu}p+T~T}5#ESCH2ISH#M2li@THB=FQQDBcL-4f@q_{MZXM7l4 z)Cqh5sD6KAXdb*o0^Z6bIxCNeMLg61Hd!clHev~^?W#{O3oIf=oFP3aspKlPOSD|m z!&H*o%@UQOH1(5<W;2Nx0q<<+MgwCBymLW+!=4HdHOJ!31icE=xTpX3R79>WYlA$e z6<R6Hyw*@rdn<5bCO9>NLB-;q1vBZp?!!`&VS$vFKM39#C{r^O>6>vQ1XdFa9C4Q_ zmTba`4q-$SA*`_ZP-Jf=vp0OVXd%r8t`n<Ca0V-Z4Y1rdVR;g0$B^DfF%jxmKOU@0 zEs9MeZKg^;w_@g{W~62Yd_DDoHyrpPWr#tln-BQ|PtQATW@v;`cULRRsq1OQQX4d- zFb18LL7Mu9U62oSr7e^y+^s1_nTe^bO#p!QHoz8e8JfAG=FC!K_NGfcAGjG|VCAWa zHIrM(go^&e#Ofe;DF>ejxEG-e)Wkje*E*3FOHe8G8Pn2OYm%t1R4yb%5m!f=f|L47 zO`>_B)LkuvM%a=EhM!wdg+A9?o3D56U7nic>=j6ivXM~_jZ8{5-D)+|4oJy^(zkZ7 zYG8UV21wEZIvx@tX*m$jsXP=n0bqd|r)GR$Lm_e@)>K8YGA3h11EeacQ{i(mN{~uh z6zBJee%Uj;FKxqwd{PFQX^|*T39Jvz1B6TREJjdZ0)<_kQ<qM8#!d}*hx;$>?Q+Py zyd+3$NW>c&?Dt%}bn)~k!`y1})0amtdrryRoB~y-HEOphfl~jv>Ra(i3@u)parHE~ z<^n#FWKA#5LYy>vOC30+KW>1>XIUw&fwWGkoLp!y>?KBpr8qI~B7O{1186u&T8SJ` z6=}+_VT5qVH5ov*vPcu48d6E6K;_p5QQs|;3~3^YWCf6Ha&B=p5(Gm7vQ!c{EiBBk zl0d07xUL6%dom)%#j6zMWpIRYt8a%aFm947KRgA&FMEjZ!=3=A=Q!JwCA=+jSDaTm z#tcn{5rrp|Vlo%|407m%&~pR(K1@zOj?~iQ(J9|&_%TBO;icRu-O!iD_`n>!kMSeQ zj+K%GzaG6uP<Bz$em5k(FYw4isl7H2qf&C(98B6A#xs<JV~O^-H0>d-k3Al<lIsjV z4yn5IjPVl=rM?RWv@df^A9$16r^#8bq?~Z1%{fE)j-2gk&iZk6KTav3PX2fe+-E8G zJU5<`h^^$I@IUBv{e<4bdkS0i4aG`4jzg#c;VGfoofX6|O&FdY!(-9rsZG708z;t` zJtKL_TjF<2ofqgYerRz_7x-*Sf2lF{=`X9&)};Q@eX9Oa%SiOsr>b|+m~e^@pnXXr zEhsgcFs2=8oAMo_Biz6m6K^kA#DBGrIl+yZ7j=hqJ$+b7X3Eu5)Z^s1Ymfz$azlIt zH=dY@nTcGGE+Zvf@xJM@lG0h8Ih{Qzoi!z0$-d<|lG53pIbC*Ay3CYxrTdoWOr#sL zPMEcOx?{Em4WwAe8Z%FPKIwbL#E90fjXh?WIKJ<<tcjL=zh!E3SukL%3~E~>XsPaq z)3~P{>l{s+jDeFh8z%TsqnZz!D--5@)8}f^8^#Njb=aVhF)bLz44%A(T;&_bEf}th zO<YK7SJKyU6`qWgB~mGGW1J^{%%JR8W9EKR?1C{<A~usLmifL0<j~KypTJu(?8&6V z0Z2T6QdJ2Es0$F!T53oZI9Rk%RL&a+n5cs~#!G_Imn8%c!)U}8N^Hv>R*-T1L>477 zA>KPFA131<s)smUnZt#2LlSIA+$Q5nB?(7@Ib{sAOq?=;TiV2Iut=P|N>6Ht@dj7w zH<q(Zo)Q^N5(>6grwBhZRb>*H{pAI$i6kLV#T$?hT_K`K+gF+`5)dobz<$m*&|Vyv zCTYi{!6I*$NTM!`B?wE1(54{)lK5WGUkkL`>zhRZr%@}Awj|#M<4)2DOW-C++-O4= zVg_)eOwz?hAPl(<n;YOuX^Pa>y_hWMN{GDZP5DM!E>d(QWWQfEBIx8kBB%P4n34=F zef~-+Hpz}+lcW`!BkkB2>BOc;cTe5H4!L|qqCs)Gd!+9aPl->zQh1%~PzrgsC)-3a zxfr<+Nm_BVz6IGzLcj)>^iIFj0?AKqdxsLH#C6NLU?Ln%<e+>_{RLfo>LwTzjJ{0z z*I|M{HYG1O<wX)$DRYvM^>sAWK;(uamdSuLkz{#folM3jmKo#A<vDZM6`WS)9ZgwG z6(W?eMa_W5jUZ+W6KxTTtdR1=p)1Tm7+YUyRT&yAA;b}bl9mCoX0zM%=~@IafWjqU zeL!%?m;_8|NM)EB0Ldv8agDOC&9*1N7@`9PBY+`{qkxd}*%%6}&r}A&@=Oc_+q>M4 zVHjRIqv7T-stwXEq5OjpZIC6oY&bERDyV@X2!<7$kJN)p0<ESvw`5=|YDxFvm*RZm zQq82#k9k94W%P^|qO*aNnA|0)P?Sb<0AegO7J!uaVi|z{iw}Six#8iZGPb(*i?&pt z2pyGdx*8eeUOLD=Kw1RV3<BfWIlmTg)z1fLynt*N>&~RkZY6G8`nWQLPmbIEDdKjd zjXN(x{p5T*KSkWGv~d-&hLSH0Av!s2Hz@LDIc`2yS>PIkl**!#IPSmGGI(Y#u1A(4 z5d$LePqTWNU=X+<hh4`HXy@_opgSf%X3lMo8>T{w^O1N4)I|cPL@^}BP1u2%#a?{e zKvQBNuAdFe$1P*D4Io7jPzrV(gFtQ4Hcs3q0ou4gn>TR_5fWY&6wmZt9vmL^qB&md z%EpVl3Wx9Qzi{e==k$dWXD;E(rSoy4q!$&pVlOg)&B%!8^`d@4I50aM*JHZI4N{h7 zsjyk>V@gv@tVDz2Cb?@^`{QOsCMdr_z8AN%u!OKKo|_Km$1@Y5!1i&0(0n{Y4Ga?l zSt~s?vPeNJpc-IDmNq}J&6-Ios!8$wF+PU>4`@X$bB~VmT&82qyipysHtkqDHmx1^ zMq}2#`@Svfa}S&)k2t>U=o605Ifl2)V-KxauRiy_&9R&5c-6b>%)5K&&Y`vG^~spi zz2j`%bhh5ByWbXb9$V?BkM29}wShO9cbx7`r+cG%LyS4wR{9^<ovZDy-CS$?+Di}e zUD3)jvHY`9$JqzY{MGQ<$u}Bb?cdGJdpEO^;`O}trFGqwy^2NbkL3?U9Rm+?%GPGS zXWYqYemAE%YJ2Waa_`Oj^YWPOxoA%FZeH2i)Y`T6wzX^9d9@pb_p0wr-LJZLaNB)! zJMSp_x?a6Lx%P$aJon%0`TT>s4ITG9-@icby(_1F>de2}e5ZN+K+IWB)o{L>Sx(jH zd~IpXvt_Sf)i@r@KM{4DplSrZJ+_n6@NP~+)Ykhw|Gm!dz7VtZMspg_mZW@gVwn|` zPuFWNuKARF`eONqqmIK5`;LF8=QDd&KC@o2n^}3UW;Z8y&HP?Y!}=LGti+*M{&3VW z{L~Nj_j1}dy5Xdxh!!@ym(zXE2q)#sTIPE>EgSi8Qa=dq<<zg6;3R!0YP^@dUDS4O zZo9C5WpFpQbY1u6@cPYrZGZ66c23uBZuPpjolCu%duX?*`+nQ^L-hXK?uk?MdzxSA ze`t5C_P=MZf9oim2hP%H*<j3hE^0fsYjwVBEvNRO)SC5HIIQU2SbksB(f811-^yv& zwlyFNn?0ISziq2$uWOTU9^JONFsIB}JLcj|bMacodftY9%iN$1DcU&mp1Ff<)lbQ~ zz*qqsN5Bdo$@b(iUY4PQJIbqEmc*@5EcP&N3$ho9Glv{T0cDVCDg2g3uAsuSbkeFZ zPDugDNg}2ymr}}v<VNR##4EumePV3gxT?oIqRM0v`6Y51(_sf(zto$C;R1aEc*-_v z4>D+fu*o%u01@;$l=mRth48eA!8ium+$OOZMTm{$w8Dv-pa~MV0ey`&3SwFm#7w&N zasAY6IBsCMitPvrQ#aPux+Hj&;bnjtrN^@*fTj4YKosGthzp2i<Q&<nr{1$4eCsNl zsJZ)l1NZX2dp>6Fj@l1Cu;;!0((RYlregN06+t@*@-_@x<|b`O(f7{oG#uG%II?9v zx@*r_u}U*UmT{smHalpBn4f%|mF?lixDoat*=gn>ndC;ab4!k(88MQyraVky1oQ~m zXxh{xMA@V~W4wp2Mc5c=;^;KPU`V_t`dmDPsE9_L9q0XFs-n`}P|bnb5-=uIU%c^b z8AT+5a;ejgAi**RP`Em9_w1dsQCryxziYL>e&qI%w|aI;4sDhk+Oi(Ppp?4aKJv{Y zJ0*>qC5<a5R)V)L?AjeG=Dn+q+Qj<wKeDXH;Y!blx~7y6w30)gLmNpedrZvYr>7l- zmJO{RcAlY#dU;$WPpB7@@{~tCk+%mc<mscA9M`Q+^#8D1U@IYY0m$P3I);>N*;v#{ zQy*giA|rJy5<#Uj7SE$!mO1Sd#-!c|eBZWZ?)<3+0v0_iuiNO{DsTBn&z07!pW1M5 z*L1{6I)A3uWt`=I+I4KF>-1*V>7N<MyLW&HB(VXSW#x^l3u25PSEqQYfZDH2V@jR! zKxm&Pln#ENi`8XO&Ar19zaxl;kXpoWajZY%Sx~heB<TPtb_D$ID18_L?<Xepq0#FN zd=WF*D$iu{RHO1w>X8}x&6>9wcx!aWTJ^5AYB#6gZqJ>bwZ*q@ee>34PJPr?|G-`r zHJAP4bqBgOxjRG}Z_z`}D4f)`&Jtm#w3R%EKB29Fw}amdZsycQZFT?HZT<C6+16{? zwvwj>Z53(x|Kp9<!B5!+=x=Jq3!YAD1I|zVBevmtpRx_tv~3_yUveAZQy+rn42(43 zWtr1}k+ir@p^2(FHt$LKl~n5)5O{}|s0GSi2AJS&=rg)h;cX=EbBGhBZ8R)+dya&( zUVBMh*xCxxJF6fusLT7HcDXvJK_y~|GjPI`P_70@9b!JA=c;m8@SQ}AFws50oc5g8 zZ{EJSVwWZ=B~>1o{4_ryl48H|(-9SYybWkkgUnQdvQLLEe49X|L7cCT^KKAb8D1~b zWCTG*djN4g*yueCL4Ojjtm#k5dy1M;!Ya61Qt|e&ZywtzY1=Ak`;-3r!v8cFwI7R` zk4a6V@m3yn>}mT!JN6#6sx!QsUn-_vORqBN=EVa@47AE<7lBmz7&Rl)jM4xw3>$aI zov-rgXQ|fISj>W~f@on!EUPnW?%X>DL@u*Au*@Q-C+}$6Ihh2ZUPhQsOG3zDNn5XS zn2;u(Avvrq17l|F8x|{2kztWGS^C)f2SmpY_lZmR`G6)i-e075BB}BIYxFaW-Xiux zrSxtlQF@rA7<0`mWxn&&NhgsCv()Bz{p{_tAnlwvt0&()uv)OjuT`!M{BGS^(R$_j ziS@uAoL%qRcz)xH_wv4fbK?v5`TLdk`~P+A{lcjIWYm0eZ^x=LpobNZzGKr-eAr!= z7YRCqXHAvKTu4qrk`yO(_KKY-B+lf&(rJZ@)HITTEOQT~1-N5(ZQ5Py&X~O>YOdK^ zUv)7`lz#g9(nMf8?D~`)cAo99r-TyRQy!$F9rmZjNS;pG)aVJ}0|9vri{)^cFbxoi zS}l(_d)JP+*oBWWY*ge^m#9|;5sqGQ<leR1v8)(&9eJx$tJl`rR<FI8wVt;g-e}(t z*O#^{+qNBT_b%UWzaRdKw)=hCou{`Qrz!H}n;GEevx^}Q$|%{}k3`O~1@$T`Cw)I6 zR3#)4O@0tcZA^I(s*;F_PY5MGBIQ9SE$Eb|-KgLcqe#4f*hkJ`a*mL5l$>Maq(FDE z8-X&3B}w)^OFc-*r5?<@lerdo`%B;a(uRMh>Eve9$z4b8j>Em_aBp<%96Gvr=;-~( zpWphkTaWa-;~Y;tc21_Z<tdJwIF7o4b(ut`q7f`O*}>+uMnFJI<Acv5hB!-3YQ3qI z^4Ke4#|f&rgcs!%vDWrm>G7gkADTk@;U#RIYw81LO4B0LPWJ&d0!Kskt0Hxxwu+F4 zP9lpZq(35cuKA96?Ih-8?Y6x>YOdcq)t;@M$3LN-$5Ej8+vKF}N}49|T!vp#q_xwi zuDD7GX-|Jj)BePWKD7sXv^AUfIHd>q4+wImuM|z&coD0VDhAf<5`Q6mN7iiHYoq4c zU$wd|pHSVFeXC0gEbdIHE=1Y$)Pr{^*`6L$(Z^pP&c1Wd$c{vh?Jqz{UN!p(X`t+} z?_6Hc0d$vY6(g`d1=Km^nXqZ&Xw^W*bXs5aK6K`UWJ&=@eLrDP@`_{mqyeH&ZOcAF zs+3-$7AL8=?9*b`v$hz}fI#>MA7iHi^c<Vll?Y&fSRwFC^74vHFS8+u&U4AKL4iKU zGt`ABVqS!Q519a1NaCoq)-7x4!~EjAGk0dztKOVnIkQ_(a`)z)o9k_FzO<3Qo!^X* zoMMt0uMd1@=vzbgJli$h+c`b=;hc=xPVQ!Azdn9@eC_$I%<_k_d_a8jSkzYe$i@|x zre>8?($n(YJG)iL^%>THeIWjGT8NOM+>{o9CeJfqi06<!2!sTdOGOkEL6)_ufaEu* zXC+kh(3!vEJhbUNwBg@&w%z;Uc6JZLa8;X*Dk1`^38keWrquR54WoggMoG#;7>#WO ze*7~1GwlQU2u;hgfVRP2rMf~jl4gNK=dCsUH=&Dk6e$tb^e9w>juBgo-rj?GDQ?`% zW+`?Ef19d@T?4s#OShLuI32TBM9md@X9YnOMhDcg6yWgG{z+^Zq>zRDQiiIj0%|#o zl&N)!>k&h)6W+eA?Xu#xF0JSO&SyUnG5m<tDE&N5#{H_oDwOXaa8)7HesB*&ui8qE zOG!;V!k&Fo>z|TZB^x1DGbeI#3qgzrC%O<cs|tkS5t6++&Mk@5<2F?T9SZDmv$A6x zcdFs4!g}1UhDqA$dq%?~tE9*h1KCICM8l_1iNr)cvSY8`!ai9}MbuWYo1J&J@J`{{ z_)hl0t?Yvja!OV%?g={(wH^3rPF2)a^_0nVofVRPC=<iQ5Nl0}%sf5fyP!p$6L#%@ zBse*y<EQ)J0tz1n#Q$UbihoE>B{?&2G*T6YA(Z}+l;XZc{X;uUYy$|~D%*e9vQ|IH z$zK!RHh<H+e)4y-HmbJ^8e=(4QCri8dd?<6CU$BVWwMfrkp=DO-w60#fJz#6^o_&p zal4stM5N7hk?3TRzzS_;!GHufX9!Wkv!Mu`LRL4l#N!mj%7iO)2s7jtX$Zx0<P4Jo z(u5N~M-Ck!7JcOS$qAA(M^1#CHgaBq6E{QQe*rcDZb?9<i#`w=vOnjtPG1R-OFRrg zAo088uuf*kmWb+jwk!ss6Q@&w*;%xmhdP8L8=^q85WUPDXFC#-1fGfE5f=U*@Z}d@ zMel#8J8UpNTH?9vw&lSOg)6+F^I_G&ovOCYs<yv3koS?O<BZuK>WqfmCwja+qPNEm zqapjT!(ceeKhDw{${#z(v7|UW!i>D3keuhp>3VF`8T$E0X3m)Pp^i5kpd7Ov(Hpj$ zC`@lCk;Cxz$il*OhI70eNUv(@ay50ioSHYd)iC!{!|K#{b!xo5VGdMQj!3VMYUKLV z$bmXTjar*@CA-v8Tu&**Y^avw;q6hb+z-tx>}TkaX14s<2qv*5qz_GhPi6p?X}=q` z!ng&=Mi{?9Hp2Kp-Gab=^$Ug)oE%8UWslGTNO?Ru#I>aa!mDf(jnKMEd60q@TFRrq zj0NMEafEPZ%0uTxnp9o>3T{kDcjn+q+Pp_dB$V=usb@z#hHe>MEttkk(?G@0$>)JQ zXce$0eSfGmHhYX?W{-)`H-v*3Y<Cxk2L!#T36i6We5Y}N8`6)N+W7@;%rHV?)s$z9 z!b?*E;YDb9nozUH+$~7q3mIdo#k6Z`-N!OU2=1jk3Pp1R?G?W}rW>hFi2(1IMQK+x z=i<g|lo+Fi5o%z{)2@T%DIim_JXOYeO|>*-`GDdM$Ays-qi2^4&Ed)5{8C2qVpwFa z07AloFESJ7`{Tw7{oWH7E<k2&3`hLXLu0>C$&Bj*^VdP&P|vt?<GNrdt_y|nb!IUV zoQ+$;i<9y}skjL-gJNhtuE$Px+~f~Tv)m0~9G-%oJmJ7X+=zpeIN1$@8FU~wE_@*r zoR13x2IGbiKwx-A21icCO#`RKhA&^Z05BiIY5sXSfE9?FPLjQp!HaRz#Y>V7n*EYm z1s348#Z8m~il=b_TIXT$e@5L!BBaFsK+b=J6VIUPc>OpN9*5R*U`jHUCH{N*CQysS zzofYT4o;X>SM5RN%$UL#<<K6!S1t)sUg|aRA);;oVu$T;mbsq@2X=%5kAxya?rv`W z-E()&-5tI&yxz6Z_J@7%^u=<!c5;tw<{r84`SZ{H+2>-pXIC<I&DlHV!cBAGTHX5L zXi@W)xn(!6<nH*L@%6etwfvFgPwjtX|BH-R%emF@Sl;;+%dR!=U2EC<IRzh?IqbT$ z-R-;67t1PN(eD<Ptms$H-p&M*w%Yl%qq_x_(R}y%z-GSt_L+wTm8)}L%Irlu_KHn= z#ky&?uJt=Ff9qxZ?9}yc*7fez)IBnB4%ZV-?{KdOKR0uZT$Hj~RJK#(-Yjy*iVoe* zS~2e0vtI{sy;d8uS4Pd1zj$EFS^eBjUh`&NbJW`M5yu;H<Mtd#;S9OI3|F9YzJ8J) z$mjlT-iZ?Y{II<W?qB8?47BS1vW1761T_gJU_Eh9XaSNaB0a%-5c~lcU37Rt&yh1T z;^Q4YuAlQwX($}vT__2w_SVGzf>iIZ0b^zCI&xNTylLOEx}t(hqU8j9P#z*?Q6u5W zyKHz9Y{C^@fwv37n2>;A9v&w?1P6B-bOD2_)Si?_feGnO(5c@Dd!#(dw*^z;{9EGW z63%&0kKj>$Q42q6VZL%xy8$w$BblWHx6V5`u7tZ1uH?ql6L{LV3mKZzcp2$1OX6G@ z&Lqk(U2|&BqB%vULb*CtOPs|*8v(I#R;q%dziOP}Im|0xr5aXnqm~83`Du>J;L5r4 z-<N*V#UuOy=$R{L&W-0QZ^;nz{MR_>#LBk$^uDj4(=G*k;uOw9xO`-HjQ|PEu3>e< z0vkKU>~jsB=vVBo;cPb)qJ3mT1a@%zP(nZDgPj4gvqLJ)6bAEE((zU~4`}*M`Ivni z7&i$AB}*Evuv98DGX;xxQ0tdY^Gd4la`t5I?J~^qp};v`WNM}X=UXFQDg?Wsew=4U z-og3np%(&v3l8MN?i&onu}ZkunI2Nxr>Y?xogZOGJEVkiX)IS1g2N$zi}K-+S>N2G z-{%VUxmu7HS-?Z7EG@GsB;_v~ij#5&Y=`xcM7p4>5o+GaX{pw9JY_1Ns{N~-ILy|b z+r|JYY$=6q1jM)z20WmKEdCWnGHzhX;$l7CB?g0VBMcy6XuJcbE({K_r7gNy=pglt zgdMEnk15Fm3O6gg8qZ4ZMh5)jcGfx=wt(?GFThA#pvD1l(U`{hU|gU#@u$d&?KzVs zaFQBuK5Q<{`za~Z@_eFKE>3(xg=3<HxA3yeedOe_D%T5Qna!|mWXk;VOYhrrAWmDp z_+v-@iU7F}Z5X{_+i_HHI;vxi13QjGn~p;<N8^g&L3aK(!fTyxEWMXqwQ^$Dp8H!j z*LvQwS3lBaW*^-xajlo%<73!SDrsLGcu-un=6`$ko3r2RyBCg?AHMI26(3*iN9lzJ z)-UZ8xZf>s?^aa3W!bIm+^Ibhtvzx-=j#`rRB+Df4-H&)0cdJl36yxE)~YpsRH*vJ zM+IC_^|#MO3z|Oyw^8)i#^n_~%Ea3*!vG}Q4;q^KvxOgKXZP2det3X~n*`knuIlmk z<Zsav1l`k}d`|Gi3KU!5HQVp12B>@n6#2=NqY*i?M}Z%HaD)(x5Cmt>Vg7mjInEEd zhS}`Y6@YSds1}V*1LvzLS+3_ndza(P^iVcI9*;1T3A>{ysgyb@DHGJ7$B>qGhczi} zsY?0<-O$j!HHGadZJKASX-X=kq-U*ZLf3XdSHfwqfGz>u8N8*ffA;K4m72x35MelJ zE|4&&9e+<g52p&0>@qjXovs14;wSh7mQB=xX$v3ZxCDOiW5j7BCv-gsAJP#9xydaX zD!B823~bDR5jyp-z^W7fR}?dheO!Vb@95&XrWPWF#fWwvH=c2X4)o(h+_89>7hl5x zTFFgE7(56cYf?Ykfat=gERIzyb5UpSA9ZeYthT<TUmN(HjGdg?t(@BR=kdFlQ~S?5 z|L?GXh+l4K;!lt6l@+P|Fn~yEKLB%mF+1Jrn1GhDf@S5l7Rqgf4kc@={sY3oPq4(e z7U(JfY<>X;gv6i2uWhXOO9Y7j04IwYL)1QNOwsW_J8-Y&?StPuxc>Zxuv6R^EpGgm z2joVSyZEG0q?WN!Jcbvw_TVJ3W~l<~NsJ*z>MW;>5d<YEWAtAUeOUY%+^5vmLA6Dj z<*x5|C$R4SM*C{yjox+spB(#cK(1*?8SgeTydnNAWk}<W6DWi$E)ETjUh?7u%D~|8 z8Sm##c`ly16xZYMqxdextR#n!2;^9gDV2fEleiH=X7pp2AQ*tYq)Tc^OcT+77XMfL zh5rOGAUn(Au*q@m_PK8?#cWl}ryiIrE1h3iT7CZ4Uw+@5^%IjTW^(=9!Z~tY3vbd4 ziaC2<55FFMRrT%Id*8M9zHf8xX6KSXa+8K8R&+d;ef+lZZ|qJ=hvvte9ZEXMw`1>k z*WQsxw|3x-iWTD{2rKODV8mM6YcEI5<-dTECXws*xH*f+b-M(^e^_AcujYPOZS8N< z|FD&ZJ4G#49-6Q43s1g>mTI+)H1x23OrM~K$MjE=^Z&{eumFjPFp{BEEAgwffB;(D zII0H~jJ=-))2QiJF3nuRefBp}=wemMGOAjbSg?#*q?Vt@UiLUiHQ6(|m-0nFmV&aC zsa~UG!Q(tI7N}k0d5AG-ZHyWjgtaL7><3{%^{Vn9ZJhHEbE=fC&ZozaT?mC<V3wa< z$u#XE=p`a*XJDO7HgLC>76z$13UX2+0Y8D>)e^UiaAf4CMb5v;b%jVOoX%w5*jZyn z9ZICBd<a}q8Au%@i#`zx6^xWH>jl~tXFfr*A_TU^LZGN|bdeF!w_LMmDJWl9H`dVZ z0a*PTc4tULrkPB!QEuY@h8~uQOjZH5{>A^DLTObq!qTm!BTaJEB$>hAA!6J%6`Ea~ zo0q6^@&BZ>{}(xr$RR+IL^dk21qqB4B*;cK5MCvFI*d_75N`(=fNso6LpS0W#>=-~ zj@ey1_PR}bUCi#@u{Uqpn`8FY<+HTxb9W0W?!I*ArS)sEf~FN4q@o2S8dB4G$NEO5 zN@}hckR&5-H>Yqrr*>t4gbYP%xsreZC(;hTZ_9mPEnLglv6ev$v73|sDvlHtZ$Ztw zyz<qHAC?f=SPrr=Dir_XqdLx(pCl6ahmRbbqZmOMd2w4Vz)nWqFT>Sn+n;BjY~y~= zW$qVr|F+HA&+C84@#G5D{v5*(ojlwrL{lFV-t+{AM(~3B7=#7RW57y>GM^Urc=#(0 zqS-nGDJ4`4bjcLZc}NDw80}Ck;UltFX<X_&Bl9~r{OZ5K&eBWPx9J%1<$0X1pM>SI z#d)%FgeeCDOw++@O>wjGnuI0^Ap<FLPlz`q!WWkyNcCYZY2z~jMV4TQA0k*Q!7v|@ z_^M;^YOhiN$)admRzsc0kp^hKm|00bYW>mkf7Q;Y4xEz+6Nx-?gUpDB363)ZN-U;q zS-g+Mn4KjrupiL`OS(qilD^S*9aVe+KZ0qtGj2+n&=>^{vss$R*?a0I=3)vzM^$P; zMCnY?(dDy0c2wfbP*%<Q=kDeHpe&YkaYg?VYu4>{HlaQ=aoJTLnmL<8BAAd+eW(p= z;QR2RML;-!qVwpRm?>9vxY5_jaQl&p^gXIEQP>bSf2tu~Xo4tofiZ+Hgb5-8aJ<mW zy71GDwMc?OHqxR4Z<=uyv*8Ej8C=+Za4%>ExAI3P{;FCUTrr0-{cBW<<tLAZRg;xi zj2MHIx{`I=M@G(Cxt_az{a)tA%Rk7BS%#PUe`2!i+MO$w_pP!DHDam{%_!FK66R++ z7u<q;3raGNmXHJ~ouA-~fVb1yl|pD5Y~CRkuW&Co#h0nnh;}DNxpek?E4fj1*8&rQ z?D;C|Uq7l>>Lg8wQLOi0Ay4pe|8L~!F^%dPXiCeE(oWPGwuYZxf-LX)MC!nuvDETu zrn*mDXc~@Z0>01{0F$>!8yxhpxIl1VK54RJN=bl?ngA%wlU!B;Wi(7rndRkPWVrt{ zCn*4fQOn%s^OyFrP5AtDi24buOsqiFeN+gTeAGPpyeE2T^u6aL4sA)OKM-~&wRCTR zx?~XU=0)OP_HQyP@){K>!R9sJI{#0nSku6%{0M2W#{$Egw3CAK6?6z*EJZEjR(T|t zR{r}`1_9!@c^b0BDKbMNNLw9M6xjseLEu}0%{1$Y(vX0&P21;U9il%^)%o{`w9NgD zkoUlfW7BKT?N|@JYdr*slteo?3wNBgo6g$x>(V|!tnP5kd1S@(k%a&VPQ~5R{i*ej zt@qEwS_Y!cr+)BjG0SKIlt^G^Z>%rHESL9>b^0%^Y#+H0YZ;0*55J#V`9#lKtC#zK zZsg2X1wb+4A}5Ks_$5<M`ll8B0>|hEJ);}+Q)r+1sOX~#L7#*^Fq;ia9iL|H%=+fT zQ@;78xJiDaH4|hK00guoO)2!hcJWNmrUozmIYRfJMDZ%Gobmo^XMqNlMt+(557}&f zN!Y<gIYY9*NwdL`nv+QCBy*IQwr)Xe8aZ3lx_jgDy({+y|Lnz>^?Xz~FD*rUS09xl zBywSIk18iO(KzAL^(C%7p+lPJOZja{XoQv2unFaykcct#7g5Mke`%X0r%*acY^GS$ zG$O;Krd6-^ZcN|%Ld<$1Dx6@=iaYn(bHqspSSFH=ZYND70U0rL2p)@?4Oe<p^wLW7 zMnasahF7z28h!RCD2{CqYek&^r`>X_5e<q^(t(bF$cO%LxcuZNPEzS271|B(l4TgM zP1uuV7x_r{2Q-Plft*1l#%Y_AT?zy%{bc4jOxFgK(h)GaC;;}8y+})zQrSDvpppU$ z$$)SaDuc3TDdW7CNt_h;lS#X9H`Otr#{CA32|5Zr_&28Fn5lTD;&80u@PmSbv4V!% zwv`MVEL(GL*=u&}?oGQpYIZ{~?K-k)D&9L0)e%`@`K1|==6yz_GX01wB%S;E6r*wK zX`^uk9A@Z77{~jGb$H5vU~+fKLt^zNW}!$lf~Lp$xP|pNJ9(m|{_I{{OW}v|5%32a zrNc=08g)2fF6waSS6<vHXpa@NKge^vadpK)o&7oJ!R^=^H|>p4b0a#tu;Y~%_x82A z=qFS9I-RiR=|{UOxd~M*L?M5$?Mtg%elWvzOL^3%J~9|Y_Z(4sa5+(vYUYL$aGV+A z$catlFm!5KlwzlX2fJ4aS38CdGTxz%aUm_B1Nc|_>&I>%d#md0ga19`puf`?v(|5% z*|v5>1<AGrgn}WMpo{C~BS}y}?U$dioDy>|fc5|yAXIulbfQ4%N%T)s5?=^*7QkTv z8?<9w;u5m3CKp-Q1X1dQCR8=7;iNJ>I%d)lu&R_he~`9&6Sa`UPY{@6qLIMqdBB`> zW;7Bhlo3*()(r1rYAENgKr}C1cc%9dakcLffNaO7SVN*tq|H#p3PzHEiGUB*2lh9? zXNMc;$}GB4Yu1Mg%wX0X!X5}_p&^1D#n3g;H`m~j48Fst(X5~BoPBXINEh8;D-qk9 z@?~Ejt8fJgtd&7p6q=+9x7ZTg!{txIRy;BcSf*w|%*MMi^A!7k%&N4D8N(;zXMy0g z8C(}Z2C#85l5%e)Q-;{<#C|fAU$8riqM**oE^=$KEH$J|LfkST1|m=zh9nF7xxQJz zXlA^l&-LP$#A?hGfM$c2CO(V}ojEl+ddhQ2q?rp-NHFW=i$K<I#8QX#5G@oiDXaes zqW&A2<X=QynB-2*ocXS)@PR#d#r9KY@mry2S<{ZQDe7!u!s3j)_j8NiIJ<HRWI(2K z%T~62;(K}T)%4w~+o|b$kW={Tg~xjCz~K+ATuw7Y-G+;N)Omczd1ljj=06)^&f%Ca zywdrLM;Vf&=a-Dm{sYsAcHIx!btifZNycG_AjbR@p7fx8T3i}vqgne|W-10-cUWDe z+;ly;L)h#Ys!41zDD#nF(Q3?b<R?92s)67IA)z*LrN*OERM4;%RVFH(VqIeGkulE+ ze}lSm$)vKD4OlRatJ`4#sIo!cpb25-XYn0yK#i3w2_l7&uxX5+1}y_qq*#rEW>Sz# zr<^yT8l1&h8>2@c>P>kT%wxt0msVNWV@Ud*f$vF&j6BAq?-ra(NjfF9U`2>oo8v^% znTZA47&i@G3T*>4k{)GDfJar<{>tq!%a#8$#<d$Kc#kPD0xpdK5QwmIDJK{=ReL%e z1+*ZPaToqp6>yt<ItF(n+64fDjs{3d5Rhw2x7jsdbtc(`mkehT7S`Tz*F<*%%GV+Q z{*Wm=Ccb9M7qkSiS`iKlJxuJJ29Q`}k(vZ~>eLe-b(Bud3$Q}TL>73bRPL~aS>Cuo z*9WSoFTH(x$_bzfEMXHavyv2=i!lt6$+zRWy0bS{Gyjej1s(a&%g6A37k<R<#t%~j zhm5-&eJH72(;k?Jfsl!fb-c+3hUUX@JGh5%gpqk53g@8YC*f4at<o!9xgZkEac4@( z(oAid>@dU~L{ZM(QprreWVX#Z@0&*hAWDU<MFv5Cma{lSH6oQI&0*4`<UIl>OmYTQ z2_wPlGV_P6q6cZ;BcPX$7XUp6XD)fyR7*!j2V#c?9@O^6Y7cLkt5-5e>RtCBzdTye z9LsN6IRmig$R*N~4zt69LrM)_Z+N3=`8>3RvrE^)+m5Q}f$nWb_wwKaQ~tZAs`Xoc za&fD!{{gIX`L=WGpxKvSv3zmY<N%cYu{m!yw|FPFb~CqjU5w=(#8-RaTHm()!1CE$ zN70(+P5XM+w%rY1fouKbn=fzFZs)fkd2ZRdu$^18JhWSSU?cl?hjBcpq%A5G?wYJ$ z{<R18{MT+lj%u~TtlY)j!iM{!kf|5;^Sc*@KGO5Hi*yhcp!pXcHOgXlYT{0Q?Ph-M zt7l03UMDflzi;h7%>D3i$v~0*FAI6NN$^>vYRCkImc@Ijl^To;paG?257czkt!r%Z zgDx4=lQ=$|*bk~9f|4%rJC;Npk@!!69}9X71Xl%wnw0u<s%r{-QfL}d<V&ctB^hz1 zFQBHRC&`$zkWe^FtMaTGEe92ASUPb=X04LI6M>&+yx+3vmxjg2bYsu(X=pmy2>=24 zW6>;%!N@IWPaQ%PrK3rmcw>^J8C;PHrAU8gf<DHjb-`;`ULwilwT2nTKvWD~9QL+* znRP~q%{YxnZbLkS1W@eKP4Nbmas`ti&d<OYB&>2U7Nnht?AU6QWDIN-wu^Ki`X6W& zib%K2{nV7bTJx5E$5i^RsTB0b>gZZ`%wD}B{8(`An(eP!Z(COf?_RufaoxY2d+`3L z6>H3Va{0sqY=f8IDPQNmWB!);_bsvPL(AuOg{&>-p=}}g73+b>_qBsD>w&0n;3@3O zAF~Q2$lG6ueNn9_s1peUdqSHhX(G`VmDos{NSZy|bdxo4EDaNhUn<Z{Bnk2|bk_t? zVkHfZ$_0tX(E0n0bH|=>20N*aXNQ)MWMkPO(#dfn@JN_IFve0ElyB?4WBEPHM%(Xa z#j=|})v%}-9@(jIhHQ%b{}0Z91|yU#Kk8)p{~GETm-;o6B|#Js)OqHMW1GZLjLGn6 z@iKm3I^{*QVt5a{kzj%lp7FJ6rXg8!*mnkY?wNrG@xP-4DvS|{%Gb=w&a_abQ@n;~ znKU!6qi&xJWo)-?tDn8=z2jYvZ08-ie|g0gGxzU-G8^rGV2@?D{K`|BC@%ad`s4Dh z8KFJx#FwXphS7iyO$wutwBG<$MvxP6GNYjh(J&fntQ1BAlP-+I=Nd)>r;u>+MJ3dg z+#y=fG8zI7-)rK4{XwrQ57-wWg%JTWlfrtKRYrlfUf81`Vw}`5Cf^jXka6X1%KZ>T zk;)Igt|cFzPlBi!S5}kjm;7}sBcU~u{3XGjjbtljC4R?LeIGz#qwh25fJ^c%jbQux z=zjIS&l5gu{k#jesX{6dfUb&c5t}p#p!tFjKW=ZFp2o{OEV?rr;<$Jgm$~D^z)5JY zKm{2n9TJft+=I-trojfx-ct0qeS7cQV&a12d!;}eFuZWRwSg5utN(fz6M0BlJh<&^ zj##5G?pvli-su)Hc3T=%G>i)>Q5_Z&2FOFRq?HZP3SFRti@GFZ-O`~^S3T3=kpw!S zd3Pc@DN0auF)$}xZ;tyDSrN)*>>&}iK$F4K)C<I*sv{1fcg25(&KHSS34RPN0_r>K z6hJnW;?5L4#CyF<Vi<-gA@LvS$eXS`K*yqCQdsV!eJMUq4)Gre`_W)+=(<DkZBzlr zj-;#fG|;JwDF-At5)C2LC6X165&}{0A@wrpgBTpUFkt)?&Z6jD(}4~5R`=l6!NCW) zwHw(WiNHJ*RYisT{do(Chln2R+s^L;6OmQ0R=b_$T0WzB)9?@AXq=VnC%3a}8Jq(% z(zq>D?0JtCxwoC}ZNa^K?qP!NdRAhKd-65b=>JAyOI4*)@h3>C6j?`-g&eX(l6>-g zL3hR3&h||{AX1FUkeMk2lX#8>{3slpixY^hqLXE?k&d$n0)&OLO#4&aP%U9(Z#T)2 zaV(5Q^V0mFm|_IE^wU_=v0yTZnWYgadw!=WW_2$Qz>>nM_*+YB-tDZ0<ui0}>(I8f z47VOzohwJd<voRTCE18pR`v-91-%5Rx(4Y$WkW>{0qhMzR;3B)`38>XNU|zb60d-1 zNyawxLQ;HiM{;~M*A$e)CrILyFF=QoQd5ZqQa$ip!^NSd`_;jnAf`t&DbVBW(ExIX z5|;SI&V$OGsk2EBgq4icgfZPjxfbcMD}9pXZAP>pS;A%-(?h1F%K0G2*N+J)$jyA^ zH=lys%vZjOc})a_{3IbM^Odh8`^U`taH!@_;84|rUpUsvgDB92g)y>_XIlDlTDlQ} zHPU}m1vGTl36~Vl0zEO=4Z8_c=1B;Z0EIEM)2$jGoDTRP=?(z%K(ZFXIZq%uCQ3(6 zIOdedtH}~Pe$uX4p>{1U`1s@J*n$Nax{fZ|4<U53r5LCEZb+<@b$Y#9L!r`k5o46n zA&c%b$bzs#+@^MccP=c71UiUe!hRfWbHaYXT$r>%CAcsbp2WdZ#Wxd7yw8R-=%YKX zr~7yaE|D-xdNeqsTU<sF7YMF6@dA<7L5*l?H>Z5vy`6Jt`NB_4Kpd6p<69l4w+@_s zP}m+T?7W@1Vp`38Xf4<(ZrHLmJSb_r$8VRku3Y%3vugeMZD;L@32<lCyJf9;Xe(Sh zu?+*%7ao*$$4Yx|53QV89fcSyx8UxvJIB6V^__#icW~qR--iW=mX(2r*=12z%QhpE zCF?xP7ZA2?WEkaPcH!D#_6E&UL&nPaZJ_{=FS}$-+|I6KSY}<f?X21ss`h%eh5Te} zW665G>2}jvam-S)+z-T6TuX?spgbz%?pm{!&q)wdvucR^mPqi^tiwQlCZy}MD$^>c zPqe5I0dVn|QmEI@0psYNDaA3h3|%UYN`Vx@l@rNO=_znSxN<U?2v33&#BHh&I{8b& zK6E-ZU`&OTfDHzwOr91zu=}<lO$YHf=b9w?h#<g0SDlZ^zKIl6NKZyUPR%UNzn~m_ zWZY?e2)D3ePpze~(|wpyPO2&Cs@_)VmKZ6W61S_dTZ%iS#$~tJcBPAqo7y{ZO{Yb^ za7&__AwVZNKizZ=LO9^Z&VXwn99Z;+8f9Rn#=9m9@o@HYI02BDfg8!B5=q!$(S}K` zi4aW(R(ke;6+@i&#rerNKPAze2|-Mc%<|SMsuWBZ(<6Qrd4G*y!JC-l(5=OuUdESi zk+9k3+_9B!+RE2N96o`qQIq-8g*$Vi`LzHE8*SU!jci%2F232j?%Z}(Zwu8dAew(@ zTb8|j8gh_OBC0Gr*?>zrg9(Drqf2b~c=U;B>JbuC(_=`G5gua#{d-IaZm!t`ZSa}} z=ujpI08d6jwCk}XP^HJ3K#$D=v(RB1v@)=O4ZPF`z(OO!QNDUIJy{-mH`+rFiILOY z+~;w4vLV>6kYZ_Fg|LE1+v&;amPO{w-bR@=p7id?_2hZ-VdX;iw7f3zo&ryyVzFZ1 zyox-<o)S-~Qulr1m3hiN72__YHrTv#c`CbQwIr6RTKSgvRoaCc4-F$ViE!mjD-MI~ zAg#3vY=0U?u;rWjV2d+tp7I?8HyI&ms*{uXA+rF1YgYW%T+A<wki0zQ@l>VH83u-{ z+tkhE3hoNql#+73Qm1XpkY&74$uw~)AE)-AfFwOAfkf{qkAe=M_>qfwlri3}L>Mzx za#wCDC;yaqP}~42W2fkB*u;MJ+@S@Rn!7Sqn!K@*tK{uIuvFt&lyoIXw4of6mrlJy zU>p#qacxu++i+v@ekLepGC9WeGO~rit0m#Me?ANs_ZY$r1^r8g<2O57T85WeQxQr+ zM+%~k0I-6eNi$p|W1(9On?}K>*(LP{R6(+@6u0^V;VB#&rx<j{)oe(_F^0t@V`C%L zeW^@IPHGwoEN3zbLO;mSgq_qNu7YMJO?<fV4))OlvkS;%e#zR{sP2O-nd#I%C0e>n zIkz{Hi_5}rYfGO?+JI&kw&6fNtUxusFb_kVB+7xM6n12Zp*wk}7;S^3M9rJMVQ=<p z0P*5)!$Il8)C7vL#O_N>E{?*b9cgSP(~(8OsdDQSO*7U$UdgV1$<)}$DAKro`0~(F zq1qSlVdFdyo?(p(L-WK0qgy^0Py-u`%fiIpQfpN)2qk0@dM*+9rgbV-x%v~v3zjZI z@&ipA<c1zeG!J~T>~C_>%&J?s1%2~*SK}PJDbLk7Q^!m%%#rjfI4_Mc4LSOR_LJDu zau+|tgo|empBOrIY2-xzDeu7WC9U_e=YrOIac}^4V5pHlgGm`Tqb=yoa3G#_LcY*+ zguG(BOz{r{rfHId&ti_8W~w+OFR)=;p>Ta|kuKAS3$O$bW*kS{!m^`J;kZB(CL!;R z8(@G3y-Aoy{D2&Snou?qvBcaKS<{cEZ#bSyNxf=^dZkc{8W0xA&|TcfN)sjX2a;|k z#Y~hbb|G3?hC?8Mo%n5h{%3kb`CstD&hKP6zLAH0x~Djg>}IEN`5fqx(k4hT9-6bh zk-4jJ?B6JVlwqJKPoO%Ki%ZCMGHW(7Yjz7=JB7zK3y<yQLR961J({coPdFjVxO^J+ z#thaSp<q)eSQFM}c3lU*WB-;t=4#z_)$NuYK~zKGN1WbpjF^l>#JSzdLs8f9jW7IR z=$%lk={dYV(&@?@9vN7C!O)nJF$|uS!<v|$ebyNUc<>mS{DSxL{?(-)RqmE`%Tahk zFJge)vX*XIOJmk@2yYz4Z})z)ciVAbd5~;5WZlWa3-%;?Z})=nF<HNQ>y=y4-1;q3 z{ZH(L-w{Bpy?z0A_&8eWs+8V4y{m_?ZC`#Iwa{fB=ReX5nOUf1Q}<Tm!0Ng8a^3&A z=0~^wQ!|ufv-4LYcbD!+wjdtZvT+F<uK8+s&(`=v4<ioX*PI2ZG2S@zo{g-tIi;gR zOEq1SzV6AM)|SRzzt7*;+Ujp@>}i?oXl!YjYU!BvceJ-m^{BC0pD9+`GsWt7daM@t zK}A|xQXJ*mQq8pdG}3R1qkN;=`DiYCy~hMvPr?mfI4IJqNVFF0LCr}BBQOsIX2XTx z{Nl~H>BPKW1a^YjdO3hsKqSdL$<tw&lF%Q_Nd+f^B%@!-Q<(;mg(ymXOEpQ!hJsUK zC>)xOq$Ezxe0q^dMi_#CY9uhpFF*eHW2`*(*r201D-&HTzzqA>DFMdR0CQ@9B{jg7 z8jzJ5;DDMCZa&b%exv)Mcpqg;Dz^GCpxQdTae?k$B^7&41h62xEMDItAUa)zV8)%2 z5rW`x!FyuxGjXH$!r<^_{312fF(H~!B6y_`>C8TlW{dwL<@kr>+#~0Y$f+dfAUUMu zAd&{2q_RX5(7rp3tun*)Im-6)<OIn10y#Iy`7${S^gg6~{tG#D)J8f3%nlmlQWQE# z$Bxgi6BF!g0W>oS9LGu9lAYXXN1S-c({$#E&=PwoniY30g~SN6RwI&Dyhxhbl5VHf zd-0O0?RkSLGeF<^$)Vj1@d7!d=9Efx1u2X+9K`G7+#n}H4hfJLCB{Iz_;vEWLC!bG zc@qxEfx!!LJudB(40S>}tUWnmJ|Z0%I41rJM8<zE{P!4ms1x!0hq@kKc!F|x%a1wy zxBd-R4fvRKXxV}v!SvN5uN;Zy9NE$z+08AA3PsBUx4U)?=C6*wGQN6c%TNl#&@hQ( zb-Xh0*Fp}RTYmZLFUJb%NxB20Wu2S$dcap0^{wvSw0AF`eu(In-O|b^SM(FT307Lc znYwDCLfK<M_uMeQ$sJy{t;|FV4{lrpUNBpih24y-W#flNPM5XfkMTJ_*XjA3M;si0 zL|rblz~HrUxSC_?&BC?k-^^Ohd{}x6**`4nh6}j=iSEyhVS#V{5NB}s=Et)crF`z= zar8{(W3!8|eteoQ;_Z)nD*2Mf7kD%8c${m5<0yvHqvtR1Fx1JP<R4{a@C82>9Pbxb zt{;fHakoLNcpxei>{i$BR1a)c<K6YXvuN$Wdg(?479f_-KXwTG!N)d%Z+dLA^PN9$ z;RFlBfl*g$)Y<mRd8Lm(vt_`c?V9!3XvaX*c`EUNI{%?F_m%TMF=XuKR7agPubh8~ zh%ekbLf!+N7~Y)j<?|2qhOc(N(!FwROP{yvC|h}Xy=2?o@XFa;gXybRUb(U={JMA7 zQ4z)cABVT?O|P7NXfIwq`_OD#Har$`V3+Yx1LT#<_K$>WcpjhQGx*xa`35*>aqXi* zF26X+IX@Dr;K61L^Wn0}DCc-A82O^d&ZE5jqvN^)B<SenD?a=+SVzr^<{geXjx1-s z@5oK}iU|2fV%bNRvv8)^WQ|%|W5%{+{rg6X^7>G3U0K@F7rif-fAciV+2ZW_BcGKs x<9wOG7vRR0<x{)G5HV8!qvx?@_m%UHGVn>ZnNd*#jg=qq_OrSAALa0H{~wU7ee(bS diff --git a/Python314_4_x86_Template/Lib/__pycache__/warnings.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/warnings.cpython-314.pyc deleted file mode 100644 index 6e5e4697bea9cda489b7025616d01ef102b64a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2568 zcmb7FNpBog5Pm(=vw1e}yFFeKC*v)4G6`8wgyon#D~qkcgv&Tjou2l%Nqc(oUJbTy zz7YgsIl*7ZKi~+;A3!LPk_HJRPTZUr<cJehJ&SFSkZ5VX>8e*%ulAlwC0iIik3-Mx zwkTu25z%<``pdz$8e@CxKFe#%4A?BoM^`k^kPa*dco2eI2c3r?#KREg5s2_8M0pHi zyaif#9O66y37&)`PeF>OA<bK%mA63~Z-;i?0Uf*(I(Zj#@ownmJ<!8@p_lhTAMb~L zJ^%xJ5C-`W4Dn$Y<{8NF5g6g4Fv`bZjE}=OKLw}wX*kU%V1l24GyE)^<ypw`NtonQ zFvX`~n$N%tpM}{B8=y#n%jftU%<*~DBu~$y^aZ%!TO=z@>AViPE;h>Yp&phG=K{5y zz{T~8qbyfX5Ol5gkFs^PT5hE7=zsn4bpH{R!%WhXVe7rVhOE)Y@t92RO#PsQwHajV zgGYB}*g|e$Ft3fX5w?CQ%!*->$gq3_azpI)vdyjqhnTHpW51J)yV+?k^?@PFcDZ!N zQpzY<URvB(TFoylF03ux5O?0Y=_SNU1#GvxB&938xG;)Ev0*!45mB@%(lQOOie77- ztHf3nd`|yAIl^(xhho!mj!S=JNrmRU4zc0NEd#b|{s>pvB`<Z1xur@cgpd~YR>eUN zOBM*zErYcKb*ko}@>=N3Fe!lA2{~JG<*wH$Y()-QWn;?{;0pE7u6SL<wb7C+8&31s zYd^`BsN#kEaL{Vm+HT(7iPR1V{M9Y^qG?f)u8A3T{ZuMcQpa45`_z_OtU4BYj7K#& zEC#+;E12dDqw0Y2+JxG4w@;)9P1RYHpd*1}>8UEK>0qBAZBZ>7+lGyG!vpD7!7f{< zTQ{tl(kV=rx!L4<$+{=?jJ6!Bf25J}RPCi<%S)c9tCw)grX{VCtpKZ#lop2Al#MrH z!H)D2ipp!%%y~Kqc}YS{Z^f}q8?rGkDGc*b)s|MR8mUIEY97iMwmHh2yi-Wau?$QK z^`jg^5jjCHLokc5W+F77`gpQ~X=E9=^wt?@c?N;|D-i5vF0Q~H26{e#7|I7Be2+mS zuaC2A2%F?K-eEROkWJbaLB^s7v;y{6p?TKW92s_xjk71(-K-|hp-fiubY(dkiX<nz z(&E*^`wFL~U=%Gmf91+tVcV4t3)o^GS|+H1>A2P61B`FRF57^hz;GN(&de89cVW{l zUzpE{oY=X1Nvv6zVVnp7Tb06X`$3^miP_4o7ZbvwNe}`Xk;0g5GFH(OmGJ%lInnpo z%8QPk$F~lUX8#H`^53E6F;sa86*1WJ^cRqC;h(1)vZNH{YGP7eCQcM@-?0I`Nj1Ik z=`}o6cnu~Ko%wu4Uc>h%xZR?p<Bzw%u@bcbL;ZvhkE(`KKS>LmbE&|=87R9#$SbHW zuOr|#5STl#O<@2?`#}{fh5Btmn2w=T(Kf-f97hN&QSulQ)u>kQ_>N1es}C#qqB;@Y ze2l)n4g_MohfysyxX%!LuYIw1v$3OAlvAXAmVoxYq#l%$1mgs!5wcgkpxRYlL<p?2 zA75p+IkOUbjY*v#M1Y?JCMjDIKOf8=5J{hV87H8c$|OOGAWhIp&_>Ws&_O^^$S#6z zf*yiif<6N3Y&k$MNH9b&OpqZMAs8j_N6(Mr6p<86Z4&)Z{h+hN^W*gs;fLRxQ*6;j z!}^mV=SX^<fO-kncH_9Q7L=c1FTT80aV6BgX^~oED7ip7aZ;)8Y55MBqIRmc;M+CP z>yie5O02#^*bi!&_7iJ)t+&Jjdy&K587*+g{x2Mm#{PY6K+7D4TSDPOhVUoBelP1E z{z30P)We~{SB#*QCEGu}xwrHx!L-EV#V>Asa_gJu^Tg;gHujRGzYKnz{wn>9jr<bn zd#QIk)4P7vyFI<*&3+GycKpFKE%Typ_(#2)JkR{4sIK2nWEYd{X)?Ch7kt{QA^r^$ C!Mec! diff --git a/Python314_4_x86_Template/Lib/__pycache__/weakref.cpython-314.pyc b/Python314_4_x86_Template/Lib/__pycache__/weakref.cpython-314.pyc deleted file mode 100644 index 76965b6a0a9d02749e30e6a47b43f7ca15f7c256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27691 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 diff --git a/Python314_4_x86_Template/Lib/_aix_support.py b/Python314_4_x86_Template/Lib/_aix_support.py deleted file mode 100644 index dadc75c2b..000000000 --- a/Python314_4_x86_Template/Lib/_aix_support.py +++ /dev/null @@ -1,108 +0,0 @@ -"""Shared AIX support functions.""" - -import sys -import sysconfig - - -# Taken from _osx_support _read_output function -def _read_cmd_output(commandstring, capture_stderr=False): - """Output from successful command execution or None""" - # Similar to os.popen(commandstring, "r").read(), - # but without actually using os.popen because that - # function is not usable during python bootstrap. - import os - import contextlib - fp = open("/tmp/_aix_support.%s"%( - os.getpid(),), "w+b") - - with contextlib.closing(fp) as fp: - if capture_stderr: - cmd = "%s >'%s' 2>&1" % (commandstring, fp.name) - else: - cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name) - return fp.read() if not os.system(cmd) else None - - -def _aix_tag(vrtl, bd): - # type: (List[int], int) -> str - # Infer the ABI bitwidth from maxsize (assuming 64 bit as the default) - _sz = 32 if sys.maxsize == (2**31-1) else 64 - _bd = bd if bd != 0 else 9988 - # vrtl[version, release, technology_level] - return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], _bd, _sz) - - -# extract version, release and technology level from a VRMF string -def _aix_vrtl(vrmf): - # type: (str) -> List[int] - v, r, tl = vrmf.split(".")[:3] - return [int(v[-1]), int(r), int(tl)] - - -def _aix_bos_rte(): - # type: () -> Tuple[str, int] - """ - Return a Tuple[str, int] e.g., ['7.1.4.34', 1806] - The fileset bos.rte represents the current AIX run-time level. It's VRMF and - builddate reflect the current ABI levels of the runtime environment. - If no builddate is found give a value that will satisfy pep425 related queries - """ - # All AIX systems to have lslpp installed in this location - # subprocess may not be available during python bootstrap - try: - import subprocess - out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"]) - except ImportError: - out = _read_cmd_output("/usr/bin/lslpp -Lqc bos.rte") - out = out.decode("utf-8") - out = out.strip().split(":") # type: ignore - _bd = int(out[-1]) if out[-1] != '' else 9988 - return (str(out[2]), _bd) - - -def aix_platform(): - # type: () -> str - """ - AIX filesets are identified by four decimal values: V.R.M.F. - V (version) and R (release) can be retrieved using ``uname`` - Since 2007, starting with AIX 5.3 TL7, the M value has been - included with the fileset bos.rte and represents the Technology - Level (TL) of AIX. The F (Fix) value also increases, but is not - relevant for comparing releases and binary compatibility. - For binary compatibility the so-called builddate is needed. - Again, the builddate of an AIX release is associated with bos.rte. - AIX ABI compatibility is described as guaranteed at: https://www.ibm.com/\ - support/knowledgecenter/en/ssw_aix_72/install/binary_compatability.html - - For pep425 purposes the AIX platform tag becomes: - "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(v, r, tl, builddate, bitsize) - e.g., "aix-6107-1415-32" for AIX 6.1 TL7 bd 1415, 32-bit - and, "aix-6107-1415-64" for AIX 6.1 TL7 bd 1415, 64-bit - """ - vrmf, bd = _aix_bos_rte() - return _aix_tag(_aix_vrtl(vrmf), bd) - - -# extract vrtl from the BUILD_GNU_TYPE as an int -def _aix_bgt(): - # type: () -> List[int] - gnu_type = sysconfig.get_config_var("BUILD_GNU_TYPE") - if not gnu_type: - raise ValueError("BUILD_GNU_TYPE is not defined") - return _aix_vrtl(vrmf=gnu_type) - - -def aix_buildtag(): - # type: () -> str - """ - Return the platform_tag of the system Python was built on. - """ - # AIX_BUILDDATE is defined by configure with: - # lslpp -Lcq bos.rte | awk -F: '{ print $NF }' - build_date = sysconfig.get_config_var("AIX_BUILDDATE") - try: - build_date = int(build_date) - except (ValueError, TypeError): - raise ValueError(f"AIX_BUILDDATE is not defined or invalid: " - f"{build_date!r}") - return _aix_tag(_aix_bgt(), build_date) diff --git a/Python314_4_x86_Template/Lib/_android_support.py b/Python314_4_x86_Template/Lib/_android_support.py deleted file mode 100644 index 320dab52a..000000000 --- a/Python314_4_x86_Template/Lib/_android_support.py +++ /dev/null @@ -1,192 +0,0 @@ -import io -import sys -from threading import RLock -from time import sleep, time - -# The maximum length of a log message in bytes, including the level marker and -# tag, is defined as LOGGER_ENTRY_MAX_PAYLOAD at -# https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:system/logging/liblog/include/log/log.h;l=71. -# Messages longer than this will be truncated by logcat. This limit has already -# been reduced at least once in the history of Android (from 4076 to 4068 between -# API level 23 and 26), so leave some headroom. -MAX_BYTES_PER_WRITE = 4000 - -# UTF-8 uses a maximum of 4 bytes per character, so limiting text writes to this -# size ensures that we can always avoid exceeding MAX_BYTES_PER_WRITE. -# However, if the actual number of bytes per character is smaller than that, -# then we may still join multiple consecutive text writes into binary -# writes containing a larger number of characters. -MAX_CHARS_PER_WRITE = MAX_BYTES_PER_WRITE // 4 - - -# When embedded in an app on current versions of Android, there's no easy way to -# monitor the C-level stdout and stderr. The testbed comes with a .c file to -# redirect them to the system log using a pipe, but that wouldn't be convenient -# or appropriate for all apps. So we redirect at the Python level instead. -def init_streams(android_log_write, stdout_prio, stderr_prio): - if sys.executable: - return # Not embedded in an app. - - global logcat - logcat = Logcat(android_log_write) - sys.stdout = TextLogStream(stdout_prio, "python.stdout", sys.stdout) - sys.stderr = TextLogStream(stderr_prio, "python.stderr", sys.stderr) - - -class TextLogStream(io.TextIOWrapper): - def __init__(self, prio, tag, original=None, **kwargs): - # Respect the -u option. - if original: - kwargs.setdefault("write_through", original.write_through) - fileno = original.fileno() - else: - fileno = None - - # The default is surrogateescape for stdout and backslashreplace for - # stderr, but in the context of an Android log, readability is more - # important than reversibility. - kwargs.setdefault("encoding", "UTF-8") - kwargs.setdefault("errors", "backslashreplace") - - super().__init__(BinaryLogStream(prio, tag, fileno), **kwargs) - self._lock = RLock() - self._pending_bytes = [] - self._pending_bytes_count = 0 - - def __repr__(self): - return f"<TextLogStream {self.buffer.tag!r}>" - - def write(self, s): - if not isinstance(s, str): - raise TypeError( - f"write() argument must be str, not {type(s).__name__}") - - # In case `s` is a str subclass that writes itself to stdout or stderr - # when we call its methods, convert it to an actual str. - s = str.__str__(s) - - # We want to emit one log message per line wherever possible, so split - # the string into lines first. Note that "".splitlines() == [], so - # nothing will be logged for an empty string. - with self._lock: - for line in s.splitlines(keepends=True): - while line: - chunk = line[:MAX_CHARS_PER_WRITE] - line = line[MAX_CHARS_PER_WRITE:] - self._write_chunk(chunk) - - return len(s) - - # The size and behavior of TextIOWrapper's buffer is not part of its public - # API, so we handle buffering ourselves to avoid truncation. - def _write_chunk(self, s): - b = s.encode(self.encoding, self.errors) - if self._pending_bytes_count + len(b) > MAX_BYTES_PER_WRITE: - self.flush() - - self._pending_bytes.append(b) - self._pending_bytes_count += len(b) - if ( - self.write_through - or b.endswith(b"\n") - or self._pending_bytes_count > MAX_BYTES_PER_WRITE - ): - self.flush() - - def flush(self): - with self._lock: - self.buffer.write(b"".join(self._pending_bytes)) - self._pending_bytes.clear() - self._pending_bytes_count = 0 - - # Since this is a line-based logging system, line buffering cannot be turned - # off, i.e. a newline always causes a flush. - @property - def line_buffering(self): - return True - - -class BinaryLogStream(io.RawIOBase): - def __init__(self, prio, tag, fileno=None): - self.prio = prio - self.tag = tag - self._fileno = fileno - - def __repr__(self): - return f"<BinaryLogStream {self.tag!r}>" - - def writable(self): - return True - - def write(self, b): - if type(b) is not bytes: - try: - b = bytes(memoryview(b)) - except TypeError: - raise TypeError( - f"write() argument must be bytes-like, not {type(b).__name__}" - ) from None - - # Writing an empty string to the stream should have no effect. - if b: - logcat.write(self.prio, self.tag, b) - return len(b) - - # This is needed by the test suite --timeout option, which uses faulthandler. - def fileno(self): - if self._fileno is None: - raise io.UnsupportedOperation("fileno") - return self._fileno - - -# When a large volume of data is written to logcat at once, e.g. when a test -# module fails in --verbose3 mode, there's a risk of overflowing logcat's own -# buffer and losing messages. We avoid this by imposing a rate limit using the -# token bucket algorithm, based on a conservative estimate of how fast `adb -# logcat` can consume data. -MAX_BYTES_PER_SECOND = 1024 * 1024 - -# The logcat buffer size of a device can be determined by running `logcat -g`. -# We set the token bucket size to half of the buffer size of our current minimum -# API level, because other things on the system will be producing messages as -# well. -BUCKET_SIZE = 128 * 1024 - -# https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:system/logging/liblog/include/log/log_read.h;l=39 -PER_MESSAGE_OVERHEAD = 28 - - -class Logcat: - def __init__(self, android_log_write): - self.android_log_write = android_log_write - self._lock = RLock() - self._bucket_level = 0 - self._prev_write_time = time() - - def write(self, prio, tag, message): - # Encode null bytes using "modified UTF-8" to avoid them truncating the - # message. - message = message.replace(b"\x00", b"\xc0\x80") - - # On API level 30 and higher, Logcat will strip any number of leading - # newlines. This is visible in all `logcat` modes, even --binary. Work - # around this by adding a leading space, which shouldn't make any - # difference to the log's usability. - if message.startswith(b"\n"): - message = b" " + message - - with self._lock: - now = time() - self._bucket_level += ( - (now - self._prev_write_time) * MAX_BYTES_PER_SECOND) - - # If the bucket level is still below zero, the clock must have gone - # backwards, so reset it to zero and continue. - self._bucket_level = max(0, min(self._bucket_level, BUCKET_SIZE)) - self._prev_write_time = now - - self._bucket_level -= PER_MESSAGE_OVERHEAD + len(tag) + len(message) - if self._bucket_level < 0: - sleep(-self._bucket_level / MAX_BYTES_PER_SECOND) - - self.android_log_write(prio, tag, message) diff --git a/Python314_4_x86_Template/Lib/_apple_support.py b/Python314_4_x86_Template/Lib/_apple_support.py deleted file mode 100644 index 92febdcf5..000000000 --- a/Python314_4_x86_Template/Lib/_apple_support.py +++ /dev/null @@ -1,66 +0,0 @@ -import io -import sys - - -def init_streams(log_write, stdout_level, stderr_level): - # Redirect stdout and stderr to the Apple system log. This method is - # invoked by init_apple_streams() (initconfig.c) if config->use_system_logger - # is enabled. - sys.stdout = SystemLog(log_write, stdout_level, errors=sys.stderr.errors) - sys.stderr = SystemLog(log_write, stderr_level, errors=sys.stderr.errors) - - -class SystemLog(io.TextIOWrapper): - def __init__(self, log_write, level, **kwargs): - kwargs.setdefault("encoding", "UTF-8") - kwargs.setdefault("line_buffering", True) - super().__init__(LogStream(log_write, level), **kwargs) - - def __repr__(self): - return f"<SystemLog (level {self.buffer.level})>" - - def write(self, s): - if not isinstance(s, str): - raise TypeError( - f"write() argument must be str, not {type(s).__name__}") - - # In case `s` is a str subclass that writes itself to stdout or stderr - # when we call its methods, convert it to an actual str. - s = str.__str__(s) - - # We want to emit one log message per line, so split - # the string before sending it to the superclass. - for line in s.splitlines(keepends=True): - super().write(line) - - return len(s) - - -class LogStream(io.RawIOBase): - def __init__(self, log_write, level): - self.log_write = log_write - self.level = level - - def __repr__(self): - return f"<LogStream (level {self.level!r})>" - - def writable(self): - return True - - def write(self, b): - if type(b) is not bytes: - try: - b = bytes(memoryview(b)) - except TypeError: - raise TypeError( - f"write() argument must be bytes-like, not {type(b).__name__}" - ) from None - - # Writing an empty string to the stream should have no effect. - if b: - # Encode null bytes using "modified UTF-8" to avoid truncating the - # message. This should not affect the return value, as the caller - # may be expecting it to match the length of the input. - self.log_write(self.level, b.replace(b"\x00", b"\xc0\x80")) - - return len(b) diff --git a/Python314_4_x86_Template/Lib/_ast_unparse.py b/Python314_4_x86_Template/Lib/_ast_unparse.py deleted file mode 100644 index 1c8741b5a..000000000 --- a/Python314_4_x86_Template/Lib/_ast_unparse.py +++ /dev/null @@ -1,1161 +0,0 @@ -# This module contains ``ast.unparse()``, defined here -# to improve the import time for the ``ast`` module. -import sys -from _ast import * -from ast import NodeVisitor -from contextlib import contextmanager, nullcontext -from enum import IntEnum, auto, _simple_enum - -# Large float and imaginary literals get turned into infinities in the AST. -# We unparse those infinities to INFSTR. -_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) - -@_simple_enum(IntEnum) -class _Precedence: - """Precedence table that originated from python grammar.""" - - NAMED_EXPR = auto() # <target> := <expr1> - TUPLE = auto() # <expr1>, <expr2> - YIELD = auto() # 'yield', 'yield from' - TEST = auto() # 'if'-'else', 'lambda' - OR = auto() # 'or' - AND = auto() # 'and' - NOT = auto() # 'not' - CMP = auto() # '<', '>', '==', '>=', '<=', '!=', - # 'in', 'not in', 'is', 'is not' - EXPR = auto() - BOR = EXPR # '|' - BXOR = auto() # '^' - BAND = auto() # '&' - SHIFT = auto() # '<<', '>>' - ARITH = auto() # '+', '-' - TERM = auto() # '*', '@', '/', '%', '//' - FACTOR = auto() # unary '+', '-', '~' - POWER = auto() # '**' - AWAIT = auto() # 'await' - ATOM = auto() - - def next(self): - try: - return self.__class__(self + 1) - except ValueError: - return self - - -_SINGLE_QUOTES = ("'", '"') -_MULTI_QUOTES = ('"""', "'''") -_ALL_QUOTES = (*_SINGLE_QUOTES, *_MULTI_QUOTES) - -class Unparser(NodeVisitor): - """Methods in this class recursively traverse an AST and - output source code for the abstract syntax; original formatting - is disregarded.""" - - def __init__(self): - self._source = [] - self._precedences = {} - self._type_ignores = {} - self._indent = 0 - self._in_try_star = False - self._in_interactive = False - - def interleave(self, inter, f, seq): - """Call f on each item in seq, calling inter() in between.""" - seq = iter(seq) - try: - f(next(seq)) - except StopIteration: - pass - else: - for x in seq: - inter() - f(x) - - def items_view(self, traverser, items): - """Traverse and separate the given *items* with a comma and append it to - the buffer. If *items* is a single item sequence, a trailing comma - will be added.""" - if len(items) == 1: - traverser(items[0]) - self.write(",") - else: - self.interleave(lambda: self.write(", "), traverser, items) - - def maybe_newline(self): - """Adds a newline if it isn't the start of generated source""" - if self._source: - self.write("\n") - - def maybe_semicolon(self): - """Adds a "; " delimiter if it isn't the start of generated source""" - if self._source: - self.write("; ") - - def fill(self, text="", *, allow_semicolon=True): - """Indent a piece of text and append it, according to the current - indentation level, or only delineate with semicolon if applicable""" - if self._in_interactive and not self._indent and allow_semicolon: - self.maybe_semicolon() - self.write(text) - else: - self.maybe_newline() - self.write(" " * self._indent + text) - - def write(self, *text): - """Add new source parts""" - self._source.extend(text) - - @contextmanager - def buffered(self, buffer = None): - if buffer is None: - buffer = [] - - original_source = self._source - self._source = buffer - yield buffer - self._source = original_source - - @contextmanager - def block(self, *, extra = None): - """A context manager for preparing the source for blocks. It adds - the character':', increases the indentation on enter and decreases - the indentation on exit. If *extra* is given, it will be directly - appended after the colon character. - """ - self.write(":") - if extra: - self.write(extra) - self._indent += 1 - yield - self._indent -= 1 - - @contextmanager - def delimit(self, start, end): - """A context manager for preparing the source for expressions. It adds - *start* to the buffer and enters, after exit it adds *end*.""" - - self.write(start) - yield - self.write(end) - - def delimit_if(self, start, end, condition): - if condition: - return self.delimit(start, end) - else: - return nullcontext() - - def require_parens(self, precedence, node): - """Shortcut to adding precedence related parens""" - return self.delimit_if("(", ")", self.get_precedence(node) > precedence) - - def get_precedence(self, node): - return self._precedences.get(node, _Precedence.TEST) - - def set_precedence(self, precedence, *nodes): - for node in nodes: - self._precedences[node] = precedence - - def get_raw_docstring(self, node): - """If a docstring node is found in the body of the *node* parameter, - return that docstring node, None otherwise. - - Logic mirrored from ``_PyAST_GetDocString``.""" - if not isinstance( - node, (AsyncFunctionDef, FunctionDef, ClassDef, Module) - ) or len(node.body) < 1: - return None - node = node.body[0] - if not isinstance(node, Expr): - return None - node = node.value - if isinstance(node, Constant) and isinstance(node.value, str): - return node - - def get_type_comment(self, node): - comment = self._type_ignores.get(node.lineno) or node.type_comment - if comment is not None: - return f" # type: {comment}" - - def traverse(self, node): - if isinstance(node, list): - for item in node: - self.traverse(item) - else: - super().visit(node) - - # Note: as visit() resets the output text, do NOT rely on - # NodeVisitor.generic_visit to handle any nodes (as it calls back in to - # the subclass visit() method, which resets self._source to an empty list) - def visit(self, node): - """Outputs a source code string that, if converted back to an ast - (using ast.parse) will generate an AST equivalent to *node*""" - self._source = [] - self.traverse(node) - return "".join(self._source) - - def _write_docstring_and_traverse_body(self, node): - if (docstring := self.get_raw_docstring(node)): - self._write_docstring(docstring) - self.traverse(node.body[1:]) - else: - self.traverse(node.body) - - def visit_Module(self, node): - self._type_ignores = { - ignore.lineno: f"ignore{ignore.tag}" - for ignore in node.type_ignores - } - try: - self._write_docstring_and_traverse_body(node) - finally: - self._type_ignores.clear() - - def visit_Interactive(self, node): - self._in_interactive = True - try: - self._write_docstring_and_traverse_body(node) - finally: - self._in_interactive = False - - def visit_FunctionType(self, node): - with self.delimit("(", ")"): - self.interleave( - lambda: self.write(", "), self.traverse, node.argtypes - ) - - self.write(" -> ") - self.traverse(node.returns) - - def visit_Expr(self, node): - self.fill() - self.set_precedence(_Precedence.YIELD, node.value) - self.traverse(node.value) - - def visit_NamedExpr(self, node): - with self.require_parens(_Precedence.NAMED_EXPR, node): - self.set_precedence(_Precedence.ATOM, node.target, node.value) - self.traverse(node.target) - self.write(" := ") - self.traverse(node.value) - - def visit_Import(self, node): - self.fill("import ") - self.interleave(lambda: self.write(", "), self.traverse, node.names) - - def visit_ImportFrom(self, node): - self.fill("from ") - self.write("." * (node.level or 0)) - if node.module: - self.write(node.module) - self.write(" import ") - self.interleave(lambda: self.write(", "), self.traverse, node.names) - - def visit_Assign(self, node): - self.fill() - for target in node.targets: - self.set_precedence(_Precedence.TUPLE, target) - self.traverse(target) - self.write(" = ") - self.traverse(node.value) - if type_comment := self.get_type_comment(node): - self.write(type_comment) - - def visit_AugAssign(self, node): - self.fill() - self.traverse(node.target) - self.write(" " + self.binop[node.op.__class__.__name__] + "= ") - self.traverse(node.value) - - def visit_AnnAssign(self, node): - self.fill() - with self.delimit_if("(", ")", not node.simple and isinstance(node.target, Name)): - self.traverse(node.target) - self.write(": ") - self.traverse(node.annotation) - if node.value: - self.write(" = ") - self.traverse(node.value) - - def visit_Return(self, node): - self.fill("return") - if node.value: - self.write(" ") - self.traverse(node.value) - - def visit_Pass(self, node): - self.fill("pass") - - def visit_Break(self, node): - self.fill("break") - - def visit_Continue(self, node): - self.fill("continue") - - def visit_Delete(self, node): - self.fill("del ") - self.interleave(lambda: self.write(", "), self.traverse, node.targets) - - def visit_Assert(self, node): - self.fill("assert ") - self.traverse(node.test) - if node.msg: - self.write(", ") - self.traverse(node.msg) - - def visit_Global(self, node): - self.fill("global ") - self.interleave(lambda: self.write(", "), self.write, node.names) - - def visit_Nonlocal(self, node): - self.fill("nonlocal ") - self.interleave(lambda: self.write(", "), self.write, node.names) - - def visit_Await(self, node): - with self.require_parens(_Precedence.AWAIT, node): - self.write("await") - if node.value: - self.write(" ") - self.set_precedence(_Precedence.ATOM, node.value) - self.traverse(node.value) - - def visit_Yield(self, node): - with self.require_parens(_Precedence.YIELD, node): - self.write("yield") - if node.value: - self.write(" ") - self.set_precedence(_Precedence.ATOM, node.value) - self.traverse(node.value) - - def visit_YieldFrom(self, node): - with self.require_parens(_Precedence.YIELD, node): - self.write("yield from ") - if not node.value: - raise ValueError("Node can't be used without a value attribute.") - self.set_precedence(_Precedence.ATOM, node.value) - self.traverse(node.value) - - def visit_Raise(self, node): - self.fill("raise") - if not node.exc: - if node.cause: - raise ValueError(f"Node can't use cause without an exception.") - return - self.write(" ") - self.traverse(node.exc) - if node.cause: - self.write(" from ") - self.traverse(node.cause) - - def do_visit_try(self, node): - self.fill("try", allow_semicolon=False) - with self.block(): - self.traverse(node.body) - for ex in node.handlers: - self.traverse(ex) - if node.orelse: - self.fill("else", allow_semicolon=False) - with self.block(): - self.traverse(node.orelse) - if node.finalbody: - self.fill("finally", allow_semicolon=False) - with self.block(): - self.traverse(node.finalbody) - - def visit_Try(self, node): - prev_in_try_star = self._in_try_star - try: - self._in_try_star = False - self.do_visit_try(node) - finally: - self._in_try_star = prev_in_try_star - - def visit_TryStar(self, node): - prev_in_try_star = self._in_try_star - try: - self._in_try_star = True - self.do_visit_try(node) - finally: - self._in_try_star = prev_in_try_star - - def visit_ExceptHandler(self, node): - self.fill("except*" if self._in_try_star else "except", allow_semicolon=False) - if node.type: - self.write(" ") - self.traverse(node.type) - if node.name: - self.write(" as ") - self.write(node.name) - with self.block(): - self.traverse(node.body) - - def visit_ClassDef(self, node): - self.maybe_newline() - for deco in node.decorator_list: - self.fill("@", allow_semicolon=False) - self.traverse(deco) - self.fill("class " + node.name, allow_semicolon=False) - if hasattr(node, "type_params"): - self._type_params_helper(node.type_params) - with self.delimit_if("(", ")", condition = node.bases or node.keywords): - comma = False - for e in node.bases: - if comma: - self.write(", ") - else: - comma = True - self.traverse(e) - for e in node.keywords: - if comma: - self.write(", ") - else: - comma = True - self.traverse(e) - - with self.block(): - self._write_docstring_and_traverse_body(node) - - def visit_FunctionDef(self, node): - self._function_helper(node, "def") - - def visit_AsyncFunctionDef(self, node): - self._function_helper(node, "async def") - - def _function_helper(self, node, fill_suffix): - self.maybe_newline() - for deco in node.decorator_list: - self.fill("@", allow_semicolon=False) - self.traverse(deco) - def_str = fill_suffix + " " + node.name - self.fill(def_str, allow_semicolon=False) - if hasattr(node, "type_params"): - self._type_params_helper(node.type_params) - with self.delimit("(", ")"): - self.traverse(node.args) - if node.returns: - self.write(" -> ") - self.traverse(node.returns) - with self.block(extra=self.get_type_comment(node)): - self._write_docstring_and_traverse_body(node) - - def _type_params_helper(self, type_params): - if type_params is not None and len(type_params) > 0: - with self.delimit("[", "]"): - self.interleave(lambda: self.write(", "), self.traverse, type_params) - - def visit_TypeVar(self, node): - self.write(node.name) - if node.bound: - self.write(": ") - self.traverse(node.bound) - if node.default_value: - self.write(" = ") - self.traverse(node.default_value) - - def visit_TypeVarTuple(self, node): - self.write("*" + node.name) - if node.default_value: - self.write(" = ") - self.traverse(node.default_value) - - def visit_ParamSpec(self, node): - self.write("**" + node.name) - if node.default_value: - self.write(" = ") - self.traverse(node.default_value) - - def visit_TypeAlias(self, node): - self.fill("type ") - self.traverse(node.name) - self._type_params_helper(node.type_params) - self.write(" = ") - self.traverse(node.value) - - def visit_For(self, node): - self._for_helper("for ", node) - - def visit_AsyncFor(self, node): - self._for_helper("async for ", node) - - def _for_helper(self, fill, node): - self.fill(fill, allow_semicolon=False) - self.set_precedence(_Precedence.TUPLE, node.target) - self.traverse(node.target) - self.write(" in ") - self.traverse(node.iter) - with self.block(extra=self.get_type_comment(node)): - self.traverse(node.body) - if node.orelse: - self.fill("else", allow_semicolon=False) - with self.block(): - self.traverse(node.orelse) - - def visit_If(self, node): - self.fill("if ", allow_semicolon=False) - self.traverse(node.test) - with self.block(): - self.traverse(node.body) - # collapse nested ifs into equivalent elifs. - while node.orelse and len(node.orelse) == 1 and isinstance(node.orelse[0], If): - node = node.orelse[0] - self.fill("elif ", allow_semicolon=False) - self.traverse(node.test) - with self.block(): - self.traverse(node.body) - # final else - if node.orelse: - self.fill("else", allow_semicolon=False) - with self.block(): - self.traverse(node.orelse) - - def visit_While(self, node): - self.fill("while ", allow_semicolon=False) - self.traverse(node.test) - with self.block(): - self.traverse(node.body) - if node.orelse: - self.fill("else", allow_semicolon=False) - with self.block(): - self.traverse(node.orelse) - - def visit_With(self, node): - self.fill("with ", allow_semicolon=False) - self.interleave(lambda: self.write(", "), self.traverse, node.items) - with self.block(extra=self.get_type_comment(node)): - self.traverse(node.body) - - def visit_AsyncWith(self, node): - self.fill("async with ", allow_semicolon=False) - self.interleave(lambda: self.write(", "), self.traverse, node.items) - with self.block(extra=self.get_type_comment(node)): - self.traverse(node.body) - - def _str_literal_helper( - self, string, *, quote_types=_ALL_QUOTES, escape_special_whitespace=False - ): - """Helper for writing string literals, minimizing escapes. - Returns the tuple (string literal to write, possible quote types). - """ - def escape_char(c): - # \n and \t are non-printable, but we only escape them if - # escape_special_whitespace is True - if not escape_special_whitespace and c in "\n\t": - return c - # Always escape backslashes and other non-printable characters - if c == "\\" or not c.isprintable(): - return c.encode("unicode_escape").decode("ascii") - return c - - escaped_string = "".join(map(escape_char, string)) - possible_quotes = quote_types - if "\n" in escaped_string: - possible_quotes = [q for q in possible_quotes if q in _MULTI_QUOTES] - possible_quotes = [q for q in possible_quotes if q not in escaped_string] - if not possible_quotes: - # If there aren't any possible_quotes, fallback to using repr - # on the original string. Try to use a quote from quote_types, - # e.g., so that we use triple quotes for docstrings. - string = repr(string) - quote = next((q for q in quote_types if string[0] in q), string[0]) - return string[1:-1], [quote] - if escaped_string: - # Sort so that we prefer '''"''' over """\"""" - possible_quotes.sort(key=lambda q: q[0] == escaped_string[-1]) - # If we're using triple quotes and we'd need to escape a final - # quote, escape it - if possible_quotes[0][0] == escaped_string[-1]: - assert len(possible_quotes[0]) == 3 - escaped_string = escaped_string[:-1] + "\\" + escaped_string[-1] - return escaped_string, possible_quotes - - def _write_str_avoiding_backslashes(self, string, *, quote_types=_ALL_QUOTES): - """Write string literal value with a best effort attempt to avoid backslashes.""" - string, quote_types = self._str_literal_helper(string, quote_types=quote_types) - quote_type = quote_types[0] - self.write(f"{quote_type}{string}{quote_type}") - - def _ftstring_helper(self, parts): - new_parts = [] - quote_types = list(_ALL_QUOTES) - fallback_to_repr = False - for value, is_constant in parts: - if is_constant: - value, new_quote_types = self._str_literal_helper( - value, - quote_types=quote_types, - escape_special_whitespace=True, - ) - if set(new_quote_types).isdisjoint(quote_types): - fallback_to_repr = True - break - quote_types = new_quote_types - else: - if "\n" in value: - quote_types = [q for q in quote_types if q in _MULTI_QUOTES] - assert quote_types - - new_quote_types = [q for q in quote_types if q not in value] - if new_quote_types: - quote_types = new_quote_types - new_parts.append(value) - - if fallback_to_repr: - # If we weren't able to find a quote type that works for all parts - # of the JoinedStr, fallback to using repr and triple single quotes. - quote_types = ["'''"] - new_parts.clear() - for value, is_constant in parts: - if is_constant: - value = repr('"' + value) # force repr to use single quotes - expected_prefix = "'\"" - assert value.startswith(expected_prefix), repr(value) - value = value[len(expected_prefix):-1] - new_parts.append(value) - - value = "".join(new_parts) - quote_type = quote_types[0] - self.write(f"{quote_type}{value}{quote_type}") - - def _write_ftstring(self, values, prefix): - self.write(prefix) - fstring_parts = [] - for value in values: - with self.buffered() as buffer: - self._write_ftstring_inner(value) - fstring_parts.append( - ("".join(buffer), isinstance(value, Constant)) - ) - self._ftstring_helper(fstring_parts) - - def visit_JoinedStr(self, node): - self._write_ftstring(node.values, "f") - - def visit_TemplateStr(self, node): - self._write_ftstring(node.values, "t") - - def _write_ftstring_inner(self, node, is_format_spec=False): - if isinstance(node, JoinedStr): - # for both the f-string itself, and format_spec - for value in node.values: - self._write_ftstring_inner(value, is_format_spec=is_format_spec) - elif isinstance(node, Constant) and isinstance(node.value, str): - value = node.value.replace("{", "{{").replace("}", "}}") - - if is_format_spec: - value = value.replace("\\", "\\\\") - value = value.replace("'", "\\'") - value = value.replace('"', '\\"') - value = value.replace("\n", "\\n") - self.write(value) - elif isinstance(node, FormattedValue): - self.visit_FormattedValue(node) - elif isinstance(node, Interpolation): - self.visit_Interpolation(node) - else: - raise ValueError(f"Unexpected node inside JoinedStr, {node!r}") - - def _unparse_interpolation_value(self, inner): - unparser = type(self)() - unparser.set_precedence(_Precedence.TEST.next(), inner) - return unparser.visit(inner) - - def _write_interpolation(self, node, use_str_attr=False): - with self.delimit("{", "}"): - if use_str_attr: - expr = node.str - else: - expr = self._unparse_interpolation_value(node.value) - if expr.startswith("{"): - # Separate pair of opening brackets as "{ {" - self.write(" ") - self.write(expr) - if node.conversion != -1: - self.write(f"!{chr(node.conversion)}") - if node.format_spec: - self.write(":") - self._write_ftstring_inner(node.format_spec, is_format_spec=True) - - def visit_FormattedValue(self, node): - self._write_interpolation(node) - - def visit_Interpolation(self, node): - # If `str` is set to `None`, use the `value` to generate the source code. - self._write_interpolation(node, use_str_attr=node.str is not None) - - def visit_Name(self, node): - self.write(node.id) - - def _write_docstring(self, node): - self.fill(allow_semicolon=False) - if node.kind == "u": - self.write("u") - self._write_str_avoiding_backslashes(node.value, quote_types=_MULTI_QUOTES) - - def _write_constant(self, value): - if isinstance(value, (float, complex)): - # Substitute overflowing decimal literal for AST infinities, - # and inf - inf for NaNs. - self.write( - repr(value) - .replace("inf", _INFSTR) - .replace("nan", f"({_INFSTR}-{_INFSTR})") - ) - else: - self.write(repr(value)) - - def visit_Constant(self, node): - value = node.value - if isinstance(value, tuple): - with self.delimit("(", ")"): - self.items_view(self._write_constant, value) - elif value is ...: - self.write("...") - else: - if node.kind == "u": - self.write("u") - self._write_constant(node.value) - - def visit_List(self, node): - with self.delimit("[", "]"): - self.interleave(lambda: self.write(", "), self.traverse, node.elts) - - def visit_ListComp(self, node): - with self.delimit("[", "]"): - self.traverse(node.elt) - for gen in node.generators: - self.traverse(gen) - - def visit_GeneratorExp(self, node): - with self.delimit("(", ")"): - self.traverse(node.elt) - for gen in node.generators: - self.traverse(gen) - - def visit_SetComp(self, node): - with self.delimit("{", "}"): - self.traverse(node.elt) - for gen in node.generators: - self.traverse(gen) - - def visit_DictComp(self, node): - with self.delimit("{", "}"): - self.traverse(node.key) - self.write(": ") - self.traverse(node.value) - for gen in node.generators: - self.traverse(gen) - - def visit_comprehension(self, node): - if node.is_async: - self.write(" async for ") - else: - self.write(" for ") - self.set_precedence(_Precedence.TUPLE, node.target) - self.traverse(node.target) - self.write(" in ") - self.set_precedence(_Precedence.TEST.next(), node.iter, *node.ifs) - self.traverse(node.iter) - for if_clause in node.ifs: - self.write(" if ") - self.traverse(if_clause) - - def visit_IfExp(self, node): - with self.require_parens(_Precedence.TEST, node): - self.set_precedence(_Precedence.TEST.next(), node.body, node.test) - self.traverse(node.body) - self.write(" if ") - self.traverse(node.test) - self.write(" else ") - self.set_precedence(_Precedence.TEST, node.orelse) - self.traverse(node.orelse) - - def visit_Set(self, node): - if node.elts: - with self.delimit("{", "}"): - self.interleave(lambda: self.write(", "), self.traverse, node.elts) - else: - # `{}` would be interpreted as a dictionary literal, and - # `set` might be shadowed. Thus: - self.write('{*()}') - - def visit_Dict(self, node): - def write_key_value_pair(k, v): - self.traverse(k) - self.write(": ") - self.traverse(v) - - def write_item(item): - k, v = item - if k is None: - # for dictionary unpacking operator in dicts {**{'y': 2}} - # see PEP 448 for details - self.write("**") - self.set_precedence(_Precedence.EXPR, v) - self.traverse(v) - else: - write_key_value_pair(k, v) - - with self.delimit("{", "}"): - self.interleave( - lambda: self.write(", "), write_item, zip(node.keys, node.values) - ) - - def visit_Tuple(self, node): - with self.delimit_if( - "(", - ")", - len(node.elts) == 0 or self.get_precedence(node) > _Precedence.TUPLE - ): - self.items_view(self.traverse, node.elts) - - unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"} - unop_precedence = { - "not": _Precedence.NOT, - "~": _Precedence.FACTOR, - "+": _Precedence.FACTOR, - "-": _Precedence.FACTOR, - } - - def visit_UnaryOp(self, node): - operator = self.unop[node.op.__class__.__name__] - operator_precedence = self.unop_precedence[operator] - with self.require_parens(operator_precedence, node): - self.write(operator) - # factor prefixes (+, -, ~) shouldn't be separated - # from the value they belong, (e.g: +1 instead of + 1) - if operator_precedence is not _Precedence.FACTOR: - self.write(" ") - self.set_precedence(operator_precedence, node.operand) - self.traverse(node.operand) - - binop = { - "Add": "+", - "Sub": "-", - "Mult": "*", - "MatMult": "@", - "Div": "/", - "Mod": "%", - "LShift": "<<", - "RShift": ">>", - "BitOr": "|", - "BitXor": "^", - "BitAnd": "&", - "FloorDiv": "//", - "Pow": "**", - } - - binop_precedence = { - "+": _Precedence.ARITH, - "-": _Precedence.ARITH, - "*": _Precedence.TERM, - "@": _Precedence.TERM, - "/": _Precedence.TERM, - "%": _Precedence.TERM, - "<<": _Precedence.SHIFT, - ">>": _Precedence.SHIFT, - "|": _Precedence.BOR, - "^": _Precedence.BXOR, - "&": _Precedence.BAND, - "//": _Precedence.TERM, - "**": _Precedence.POWER, - } - - binop_rassoc = frozenset(("**",)) - def visit_BinOp(self, node): - operator = self.binop[node.op.__class__.__name__] - operator_precedence = self.binop_precedence[operator] - with self.require_parens(operator_precedence, node): - if operator in self.binop_rassoc: - left_precedence = operator_precedence.next() - right_precedence = operator_precedence - else: - left_precedence = operator_precedence - right_precedence = operator_precedence.next() - - self.set_precedence(left_precedence, node.left) - self.traverse(node.left) - self.write(f" {operator} ") - self.set_precedence(right_precedence, node.right) - self.traverse(node.right) - - cmpops = { - "Eq": "==", - "NotEq": "!=", - "Lt": "<", - "LtE": "<=", - "Gt": ">", - "GtE": ">=", - "Is": "is", - "IsNot": "is not", - "In": "in", - "NotIn": "not in", - } - - def visit_Compare(self, node): - with self.require_parens(_Precedence.CMP, node): - self.set_precedence(_Precedence.CMP.next(), node.left, *node.comparators) - self.traverse(node.left) - for o, e in zip(node.ops, node.comparators): - self.write(" " + self.cmpops[o.__class__.__name__] + " ") - self.traverse(e) - - boolops = {"And": "and", "Or": "or"} - boolop_precedence = {"and": _Precedence.AND, "or": _Precedence.OR} - - def visit_BoolOp(self, node): - operator = self.boolops[node.op.__class__.__name__] - operator_precedence = self.boolop_precedence[operator] - - def increasing_level_traverse(node): - nonlocal operator_precedence - operator_precedence = operator_precedence.next() - self.set_precedence(operator_precedence, node) - self.traverse(node) - - with self.require_parens(operator_precedence, node): - s = f" {operator} " - self.interleave(lambda: self.write(s), increasing_level_traverse, node.values) - - def visit_Attribute(self, node): - self.set_precedence(_Precedence.ATOM, node.value) - self.traverse(node.value) - # Special case: 3.__abs__() is a syntax error, so if node.value - # is an integer literal then we need to either parenthesize - # it or add an extra space to get 3 .__abs__(). - if isinstance(node.value, Constant) and isinstance(node.value.value, int): - self.write(" ") - self.write(".") - self.write(node.attr) - - def visit_Call(self, node): - self.set_precedence(_Precedence.ATOM, node.func) - self.traverse(node.func) - with self.delimit("(", ")"): - comma = False - for e in node.args: - if comma: - self.write(", ") - else: - comma = True - self.traverse(e) - for e in node.keywords: - if comma: - self.write(", ") - else: - comma = True - self.traverse(e) - - def visit_Subscript(self, node): - def is_non_empty_tuple(slice_value): - return ( - isinstance(slice_value, Tuple) - and slice_value.elts - ) - - self.set_precedence(_Precedence.ATOM, node.value) - self.traverse(node.value) - with self.delimit("[", "]"): - if is_non_empty_tuple(node.slice): - # parentheses can be omitted if the tuple isn't empty - self.items_view(self.traverse, node.slice.elts) - else: - self.traverse(node.slice) - - def visit_Starred(self, node): - self.write("*") - self.set_precedence(_Precedence.EXPR, node.value) - self.traverse(node.value) - - def visit_Ellipsis(self, node): - self.write("...") - - def visit_Slice(self, node): - if node.lower: - self.traverse(node.lower) - self.write(":") - if node.upper: - self.traverse(node.upper) - if node.step: - self.write(":") - self.traverse(node.step) - - def visit_Match(self, node): - self.fill("match ", allow_semicolon=False) - self.traverse(node.subject) - with self.block(): - for case in node.cases: - self.traverse(case) - - def visit_arg(self, node): - self.write(node.arg) - if node.annotation: - self.write(": ") - self.traverse(node.annotation) - - def visit_arguments(self, node): - first = True - # normal arguments - all_args = node.posonlyargs + node.args - defaults = [None] * (len(all_args) - len(node.defaults)) + node.defaults - for index, elements in enumerate(zip(all_args, defaults), 1): - a, d = elements - if first: - first = False - else: - self.write(", ") - self.traverse(a) - if d: - self.write("=") - self.traverse(d) - if index == len(node.posonlyargs): - self.write(", /") - - # varargs, or bare '*' if no varargs but keyword-only arguments present - if node.vararg or node.kwonlyargs: - if first: - first = False - else: - self.write(", ") - self.write("*") - if node.vararg: - self.write(node.vararg.arg) - if node.vararg.annotation: - self.write(": ") - self.traverse(node.vararg.annotation) - - # keyword-only arguments - if node.kwonlyargs: - for a, d in zip(node.kwonlyargs, node.kw_defaults): - self.write(", ") - self.traverse(a) - if d: - self.write("=") - self.traverse(d) - - # kwargs - if node.kwarg: - if first: - first = False - else: - self.write(", ") - self.write("**" + node.kwarg.arg) - if node.kwarg.annotation: - self.write(": ") - self.traverse(node.kwarg.annotation) - - def visit_keyword(self, node): - if node.arg is None: - self.write("**") - else: - self.write(node.arg) - self.write("=") - self.traverse(node.value) - - def visit_Lambda(self, node): - with self.require_parens(_Precedence.TEST, node): - self.write("lambda") - with self.buffered() as buffer: - self.traverse(node.args) - if buffer: - self.write(" ", *buffer) - self.write(": ") - self.set_precedence(_Precedence.TEST, node.body) - self.traverse(node.body) - - def visit_alias(self, node): - self.write(node.name) - if node.asname: - self.write(" as " + node.asname) - - def visit_withitem(self, node): - self.traverse(node.context_expr) - if node.optional_vars: - self.write(" as ") - self.traverse(node.optional_vars) - - def visit_match_case(self, node): - self.fill("case ", allow_semicolon=False) - self.traverse(node.pattern) - if node.guard: - self.write(" if ") - self.traverse(node.guard) - with self.block(): - self.traverse(node.body) - - def visit_MatchValue(self, node): - self.traverse(node.value) - - def visit_MatchSingleton(self, node): - self._write_constant(node.value) - - def visit_MatchSequence(self, node): - with self.delimit("[", "]"): - self.interleave( - lambda: self.write(", "), self.traverse, node.patterns - ) - - def visit_MatchStar(self, node): - name = node.name - if name is None: - name = "_" - self.write(f"*{name}") - - def visit_MatchMapping(self, node): - def write_key_pattern_pair(pair): - k, p = pair - self.traverse(k) - self.write(": ") - self.traverse(p) - - with self.delimit("{", "}"): - keys = node.keys - self.interleave( - lambda: self.write(", "), - write_key_pattern_pair, - zip(keys, node.patterns, strict=True), - ) - rest = node.rest - if rest is not None: - if keys: - self.write(", ") - self.write(f"**{rest}") - - def visit_MatchClass(self, node): - self.set_precedence(_Precedence.ATOM, node.cls) - self.traverse(node.cls) - with self.delimit("(", ")"): - patterns = node.patterns - self.interleave( - lambda: self.write(", "), self.traverse, patterns - ) - attrs = node.kwd_attrs - if attrs: - def write_attr_pattern(pair): - attr, pattern = pair - self.write(f"{attr}=") - self.traverse(pattern) - - if patterns: - self.write(", ") - self.interleave( - lambda: self.write(", "), - write_attr_pattern, - zip(attrs, node.kwd_patterns, strict=True), - ) - - def visit_MatchAs(self, node): - name = node.name - pattern = node.pattern - if name is None: - self.write("_") - elif pattern is None: - self.write(node.name) - else: - with self.require_parens(_Precedence.TEST, node): - self.set_precedence(_Precedence.BOR, node.pattern) - self.traverse(node.pattern) - self.write(f" as {node.name}") - - def visit_MatchOr(self, node): - with self.require_parens(_Precedence.BOR, node): - self.set_precedence(_Precedence.BOR.next(), *node.patterns) - self.interleave(lambda: self.write(" | "), self.traverse, node.patterns) diff --git a/Python314_4_x86_Template/Lib/_collections_abc.py b/Python314_4_x86_Template/Lib/_collections_abc.py deleted file mode 100644 index 241d40d57..000000000 --- a/Python314_4_x86_Template/Lib/_collections_abc.py +++ /dev/null @@ -1,1167 +0,0 @@ -# Copyright 2007 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Abstract Base Classes (ABCs) for collections, according to PEP 3119. - -Unit tests are in test_collections. -""" - -############ Maintenance notes ######################################### -# -# ABCs are different from other standard library modules in that they -# specify compliance tests. In general, once an ABC has been published, -# new methods (either abstract or concrete) cannot be added. -# -# Though classes that inherit from an ABC would automatically receive a -# new mixin method, registered classes would become non-compliant and -# violate the contract promised by ``isinstance(someobj, SomeABC)``. -# -# Though irritating, the correct procedure for adding new abstract or -# mixin methods is to create a new ABC as a subclass of the previous -# ABC. For example, union(), intersection(), and difference() cannot -# be added to Set but could go into a new ABC that extends Set. -# -# Because they are so hard to change, new ABCs should have their APIs -# carefully thought through prior to publication. -# -# Since ABCMeta only checks for the presence of methods, it is possible -# to alter the signature of a method by adding optional arguments -# or changing parameters names. This is still a bit dubious but at -# least it won't cause isinstance() to return an incorrect result. -# -# -####################################################################### - -from abc import ABCMeta, abstractmethod -import sys - -GenericAlias = type(list[int]) -EllipsisType = type(...) -def _f(): pass -FunctionType = type(_f) -del _f - -__all__ = ["Awaitable", "Coroutine", - "AsyncIterable", "AsyncIterator", "AsyncGenerator", - "Hashable", "Iterable", "Iterator", "Generator", "Reversible", - "Sized", "Container", "Callable", "Collection", - "Set", "MutableSet", - "Mapping", "MutableMapping", - "MappingView", "KeysView", "ItemsView", "ValuesView", - "Sequence", "MutableSequence", - "ByteString", "Buffer", - ] - -# This module has been renamed from collections.abc to _collections_abc to -# speed up interpreter startup. Some of the types such as MutableMapping are -# required early but collections module imports a lot of other modules. -# See issue #19218 -__name__ = "collections.abc" - -# Private list of types that we want to register with the various ABCs -# so that they will pass tests like: -# it = iter(somebytearray) -# assert isinstance(it, Iterable) -# Note: in other implementations, these types might not be distinct -# and they may have their own implementation specific types that -# are not included on this list. -bytes_iterator = type(iter(b'')) -bytearray_iterator = type(iter(bytearray())) -#callable_iterator = ??? -dict_keyiterator = type(iter({}.keys())) -dict_valueiterator = type(iter({}.values())) -dict_itemiterator = type(iter({}.items())) -list_iterator = type(iter([])) -list_reverseiterator = type(iter(reversed([]))) -range_iterator = type(iter(range(0))) -longrange_iterator = type(iter(range(1 << 1000))) -set_iterator = type(iter(set())) -str_iterator = type(iter("")) -tuple_iterator = type(iter(())) -zip_iterator = type(iter(zip())) -## views ## -dict_keys = type({}.keys()) -dict_values = type({}.values()) -dict_items = type({}.items()) -## misc ## -mappingproxy = type(type.__dict__) -def _get_framelocalsproxy(): - return type(sys._getframe().f_locals) -framelocalsproxy = _get_framelocalsproxy() -del _get_framelocalsproxy -generator = type((lambda: (yield))()) -## coroutine ## -async def _coro(): pass -_coro = _coro() -coroutine = type(_coro) -_coro.close() # Prevent ResourceWarning -del _coro -## asynchronous generator ## -async def _ag(): yield -_ag = _ag() -async_generator = type(_ag) -del _ag - - -### ONE-TRICK PONIES ### - -def _check_methods(C, *methods): - mro = C.__mro__ - for method in methods: - for B in mro: - if method in B.__dict__: - if B.__dict__[method] is None: - return NotImplemented - break - else: - return NotImplemented - return True - -class Hashable(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __hash__(self): - return 0 - - @classmethod - def __subclasshook__(cls, C): - if cls is Hashable: - return _check_methods(C, "__hash__") - return NotImplemented - - -class Awaitable(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __await__(self): - yield - - @classmethod - def __subclasshook__(cls, C): - if cls is Awaitable: - return _check_methods(C, "__await__") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -class Coroutine(Awaitable): - - __slots__ = () - - @abstractmethod - def send(self, value): - """Send a value into the coroutine. - Return next yielded value or raise StopIteration. - """ - raise StopIteration - - @abstractmethod - def throw(self, typ, val=None, tb=None): - """Raise an exception in the coroutine. - Return next yielded value or raise StopIteration. - """ - if val is None: - if tb is None: - raise typ - val = typ() - if tb is not None: - val = val.with_traceback(tb) - raise val - - def close(self): - """Raise GeneratorExit inside coroutine. - """ - try: - self.throw(GeneratorExit) - except (GeneratorExit, StopIteration): - pass - else: - raise RuntimeError("coroutine ignored GeneratorExit") - - @classmethod - def __subclasshook__(cls, C): - if cls is Coroutine: - return _check_methods(C, '__await__', 'send', 'throw', 'close') - return NotImplemented - - -Coroutine.register(coroutine) - - -class AsyncIterable(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __aiter__(self): - return AsyncIterator() - - @classmethod - def __subclasshook__(cls, C): - if cls is AsyncIterable: - return _check_methods(C, "__aiter__") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -class AsyncIterator(AsyncIterable): - - __slots__ = () - - @abstractmethod - async def __anext__(self): - """Return the next item or raise StopAsyncIteration when exhausted.""" - raise StopAsyncIteration - - def __aiter__(self): - return self - - @classmethod - def __subclasshook__(cls, C): - if cls is AsyncIterator: - return _check_methods(C, "__anext__", "__aiter__") - return NotImplemented - - -class AsyncGenerator(AsyncIterator): - - __slots__ = () - - async def __anext__(self): - """Return the next item from the asynchronous generator. - When exhausted, raise StopAsyncIteration. - """ - return await self.asend(None) - - @abstractmethod - async def asend(self, value): - """Send a value into the asynchronous generator. - Return next yielded value or raise StopAsyncIteration. - """ - raise StopAsyncIteration - - @abstractmethod - async def athrow(self, typ, val=None, tb=None): - """Raise an exception in the asynchronous generator. - Return next yielded value or raise StopAsyncIteration. - """ - if val is None: - if tb is None: - raise typ - val = typ() - if tb is not None: - val = val.with_traceback(tb) - raise val - - async def aclose(self): - """Raise GeneratorExit inside coroutine. - """ - try: - await self.athrow(GeneratorExit) - except (GeneratorExit, StopAsyncIteration): - pass - else: - raise RuntimeError("asynchronous generator ignored GeneratorExit") - - @classmethod - def __subclasshook__(cls, C): - if cls is AsyncGenerator: - return _check_methods(C, '__aiter__', '__anext__', - 'asend', 'athrow', 'aclose') - return NotImplemented - - -AsyncGenerator.register(async_generator) - - -class Iterable(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __iter__(self): - while False: - yield None - - @classmethod - def __subclasshook__(cls, C): - if cls is Iterable: - return _check_methods(C, "__iter__") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -class Iterator(Iterable): - - __slots__ = () - - @abstractmethod - def __next__(self): - 'Return the next item from the iterator. When exhausted, raise StopIteration' - raise StopIteration - - def __iter__(self): - return self - - @classmethod - def __subclasshook__(cls, C): - if cls is Iterator: - return _check_methods(C, '__iter__', '__next__') - return NotImplemented - - -Iterator.register(bytes_iterator) -Iterator.register(bytearray_iterator) -#Iterator.register(callable_iterator) -Iterator.register(dict_keyiterator) -Iterator.register(dict_valueiterator) -Iterator.register(dict_itemiterator) -Iterator.register(list_iterator) -Iterator.register(list_reverseiterator) -Iterator.register(range_iterator) -Iterator.register(longrange_iterator) -Iterator.register(set_iterator) -Iterator.register(str_iterator) -Iterator.register(tuple_iterator) -Iterator.register(zip_iterator) - - -class Reversible(Iterable): - - __slots__ = () - - @abstractmethod - def __reversed__(self): - while False: - yield None - - @classmethod - def __subclasshook__(cls, C): - if cls is Reversible: - return _check_methods(C, "__reversed__", "__iter__") - return NotImplemented - - -class Generator(Iterator): - - __slots__ = () - - def __next__(self): - """Return the next item from the generator. - When exhausted, raise StopIteration. - """ - return self.send(None) - - @abstractmethod - def send(self, value): - """Send a value into the generator. - Return next yielded value or raise StopIteration. - """ - raise StopIteration - - @abstractmethod - def throw(self, typ, val=None, tb=None): - """Raise an exception in the generator. - Return next yielded value or raise StopIteration. - """ - if val is None: - if tb is None: - raise typ - val = typ() - if tb is not None: - val = val.with_traceback(tb) - raise val - - def close(self): - """Raise GeneratorExit inside generator. - """ - try: - self.throw(GeneratorExit) - except (GeneratorExit, StopIteration): - pass - else: - raise RuntimeError("generator ignored GeneratorExit") - - @classmethod - def __subclasshook__(cls, C): - if cls is Generator: - return _check_methods(C, '__iter__', '__next__', - 'send', 'throw', 'close') - return NotImplemented - - -Generator.register(generator) - - -class Sized(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __len__(self): - return 0 - - @classmethod - def __subclasshook__(cls, C): - if cls is Sized: - return _check_methods(C, "__len__") - return NotImplemented - - -class Container(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __contains__(self, x): - return False - - @classmethod - def __subclasshook__(cls, C): - if cls is Container: - return _check_methods(C, "__contains__") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -class Collection(Sized, Iterable, Container): - - __slots__ = () - - @classmethod - def __subclasshook__(cls, C): - if cls is Collection: - return _check_methods(C, "__len__", "__iter__", "__contains__") - return NotImplemented - - -class Buffer(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __buffer__(self, flags: int, /) -> memoryview: - raise NotImplementedError - - @classmethod - def __subclasshook__(cls, C): - if cls is Buffer: - return _check_methods(C, "__buffer__") - return NotImplemented - - -class _CallableGenericAlias(GenericAlias): - """ Represent `Callable[argtypes, resulttype]`. - - This sets ``__args__`` to a tuple containing the flattened ``argtypes`` - followed by ``resulttype``. - - Example: ``Callable[[int, str], float]`` sets ``__args__`` to - ``(int, str, float)``. - """ - - __slots__ = () - - def __new__(cls, origin, args): - if not (isinstance(args, tuple) and len(args) == 2): - raise TypeError( - "Callable must be used as Callable[[arg, ...], result].") - t_args, t_result = args - if isinstance(t_args, (tuple, list)): - args = (*t_args, t_result) - elif not _is_param_expr(t_args): - raise TypeError(f"Expected a list of types, an ellipsis, " - f"ParamSpec, or Concatenate. Got {t_args}") - return super().__new__(cls, origin, args) - - def __repr__(self): - if len(self.__args__) == 2 and _is_param_expr(self.__args__[0]): - return super().__repr__() - from annotationlib import type_repr - return (f'collections.abc.Callable' - f'[[{", ".join([type_repr(a) for a in self.__args__[:-1]])}], ' - f'{type_repr(self.__args__[-1])}]') - - def __reduce__(self): - args = self.__args__ - if not (len(args) == 2 and _is_param_expr(args[0])): - args = list(args[:-1]), args[-1] - return _CallableGenericAlias, (Callable, args) - - def __getitem__(self, item): - # Called during TypeVar substitution, returns the custom subclass - # rather than the default types.GenericAlias object. Most of the - # code is copied from typing's _GenericAlias and the builtin - # types.GenericAlias. - if not isinstance(item, tuple): - item = (item,) - - new_args = super().__getitem__(item).__args__ - - # args[0] occurs due to things like Z[[int, str, bool]] from PEP 612 - if not isinstance(new_args[0], (tuple, list)): - t_result = new_args[-1] - t_args = new_args[:-1] - new_args = (t_args, t_result) - return _CallableGenericAlias(Callable, tuple(new_args)) - -def _is_param_expr(obj): - """Checks if obj matches either a list of types, ``...``, ``ParamSpec`` or - ``_ConcatenateGenericAlias`` from typing.py - """ - if obj is Ellipsis: - return True - if isinstance(obj, list): - return True - obj = type(obj) - names = ('ParamSpec', '_ConcatenateGenericAlias') - return obj.__module__ == 'typing' and any(obj.__name__ == name for name in names) - - -class Callable(metaclass=ABCMeta): - - __slots__ = () - - @abstractmethod - def __call__(self, *args, **kwds): - return False - - @classmethod - def __subclasshook__(cls, C): - if cls is Callable: - return _check_methods(C, "__call__") - return NotImplemented - - __class_getitem__ = classmethod(_CallableGenericAlias) - - -### SETS ### - - -class Set(Collection): - """A set is a finite, iterable container. - - This class provides concrete generic implementations of all - methods except for __contains__, __iter__ and __len__. - - To override the comparisons (presumably for speed, as the - semantics are fixed), redefine __le__ and __ge__, - then the other operations will automatically follow suit. - """ - - __slots__ = () - - def __le__(self, other): - if not isinstance(other, Set): - return NotImplemented - if len(self) > len(other): - return False - for elem in self: - if elem not in other: - return False - return True - - def __lt__(self, other): - if not isinstance(other, Set): - return NotImplemented - return len(self) < len(other) and self.__le__(other) - - def __gt__(self, other): - if not isinstance(other, Set): - return NotImplemented - return len(self) > len(other) and self.__ge__(other) - - def __ge__(self, other): - if not isinstance(other, Set): - return NotImplemented - if len(self) < len(other): - return False - for elem in other: - if elem not in self: - return False - return True - - def __eq__(self, other): - if not isinstance(other, Set): - return NotImplemented - return len(self) == len(other) and self.__le__(other) - - @classmethod - def _from_iterable(cls, it): - '''Construct an instance of the class from any iterable input. - - Must override this method if the class constructor signature - does not accept an iterable for an input. - ''' - return cls(it) - - def __and__(self, other): - if not isinstance(other, Iterable): - return NotImplemented - return self._from_iterable(value for value in other if value in self) - - __rand__ = __and__ - - def isdisjoint(self, other): - 'Return True if two sets have a null intersection.' - for value in other: - if value in self: - return False - return True - - def __or__(self, other): - if not isinstance(other, Iterable): - return NotImplemented - chain = (e for s in (self, other) for e in s) - return self._from_iterable(chain) - - __ror__ = __or__ - - def __sub__(self, other): - if not isinstance(other, Set): - if not isinstance(other, Iterable): - return NotImplemented - other = self._from_iterable(other) - return self._from_iterable(value for value in self - if value not in other) - - def __rsub__(self, other): - if not isinstance(other, Set): - if not isinstance(other, Iterable): - return NotImplemented - other = self._from_iterable(other) - return self._from_iterable(value for value in other - if value not in self) - - def __xor__(self, other): - if not isinstance(other, Set): - if not isinstance(other, Iterable): - return NotImplemented - other = self._from_iterable(other) - return (self - other) | (other - self) - - __rxor__ = __xor__ - - def _hash(self): - """Compute the hash value of a set. - - Note that we don't define __hash__: not all sets are hashable. - But if you define a hashable set type, its __hash__ should - call this function. - - This must be compatible __eq__. - - All sets ought to compare equal if they contain the same - elements, regardless of how they are implemented, and - regardless of the order of the elements; so there's not much - freedom for __eq__ or __hash__. We match the algorithm used - by the built-in frozenset type. - """ - MAX = sys.maxsize - MASK = 2 * MAX + 1 - n = len(self) - h = 1927868237 * (n + 1) - h &= MASK - for x in self: - hx = hash(x) - h ^= (hx ^ (hx << 16) ^ 89869747) * 3644798167 - h &= MASK - h ^= (h >> 11) ^ (h >> 25) - h = h * 69069 + 907133923 - h &= MASK - if h > MAX: - h -= MASK + 1 - if h == -1: - h = 590923713 - return h - - -Set.register(frozenset) - - -class MutableSet(Set): - """A mutable set is a finite, iterable container. - - This class provides concrete generic implementations of all - methods except for __contains__, __iter__, __len__, - add(), and discard(). - - To override the comparisons (presumably for speed, as the - semantics are fixed), all you have to do is redefine __le__ and - then the other operations will automatically follow suit. - """ - - __slots__ = () - - @abstractmethod - def add(self, value): - """Add an element.""" - raise NotImplementedError - - @abstractmethod - def discard(self, value): - """Remove an element. Do not raise an exception if absent.""" - raise NotImplementedError - - def remove(self, value): - """Remove an element. If not a member, raise a KeyError.""" - if value not in self: - raise KeyError(value) - self.discard(value) - - def pop(self): - """Return the popped value. Raise KeyError if empty.""" - it = iter(self) - try: - value = next(it) - except StopIteration: - raise KeyError from None - self.discard(value) - return value - - def clear(self): - """This is slow (creates N new iterators!) but effective.""" - try: - while True: - self.pop() - except KeyError: - pass - - def __ior__(self, it): - for value in it: - self.add(value) - return self - - def __iand__(self, it): - for value in (self - it): - self.discard(value) - return self - - def __ixor__(self, it): - if it is self: - self.clear() - else: - if not isinstance(it, Set): - it = self._from_iterable(it) - for value in it: - if value in self: - self.discard(value) - else: - self.add(value) - return self - - def __isub__(self, it): - if it is self: - self.clear() - else: - for value in it: - self.discard(value) - return self - - -MutableSet.register(set) - - -### MAPPINGS ### - -class Mapping(Collection): - """A Mapping is a generic container for associating key/value - pairs. - - This class provides concrete generic implementations of all - methods except for __getitem__, __iter__, and __len__. - """ - - __slots__ = () - - # Tell ABCMeta.__new__ that this class should have TPFLAGS_MAPPING set. - __abc_tpflags__ = 1 << 6 # Py_TPFLAGS_MAPPING - - @abstractmethod - def __getitem__(self, key): - raise KeyError - - def get(self, key, default=None): - 'D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.' - try: - return self[key] - except KeyError: - return default - - def __contains__(self, key): - try: - self[key] - except KeyError: - return False - else: - return True - - def keys(self): - "D.keys() -> a set-like object providing a view on D's keys" - return KeysView(self) - - def items(self): - "D.items() -> a set-like object providing a view on D's items" - return ItemsView(self) - - def values(self): - "D.values() -> an object providing a view on D's values" - return ValuesView(self) - - def __eq__(self, other): - if not isinstance(other, Mapping): - return NotImplemented - return dict(self.items()) == dict(other.items()) - - __reversed__ = None - -Mapping.register(mappingproxy) -Mapping.register(framelocalsproxy) - - -class MappingView(Sized): - - __slots__ = '_mapping', - - def __init__(self, mapping): - self._mapping = mapping - - def __len__(self): - return len(self._mapping) - - def __repr__(self): - return '{0.__class__.__name__}({0._mapping!r})'.format(self) - - __class_getitem__ = classmethod(GenericAlias) - - -class KeysView(MappingView, Set): - - __slots__ = () - - @classmethod - def _from_iterable(cls, it): - return set(it) - - def __contains__(self, key): - return key in self._mapping - - def __iter__(self): - yield from self._mapping - - -KeysView.register(dict_keys) - - -class ItemsView(MappingView, Set): - - __slots__ = () - - @classmethod - def _from_iterable(cls, it): - return set(it) - - def __contains__(self, item): - key, value = item - try: - v = self._mapping[key] - except KeyError: - return False - else: - return v is value or v == value - - def __iter__(self): - for key in self._mapping: - yield (key, self._mapping[key]) - - -ItemsView.register(dict_items) - - -class ValuesView(MappingView, Collection): - - __slots__ = () - - def __contains__(self, value): - for key in self._mapping: - v = self._mapping[key] - if v is value or v == value: - return True - return False - - def __iter__(self): - for key in self._mapping: - yield self._mapping[key] - - -ValuesView.register(dict_values) - - -class MutableMapping(Mapping): - """A MutableMapping is a generic container for associating - key/value pairs. - - This class provides concrete generic implementations of all - methods except for __getitem__, __setitem__, __delitem__, - __iter__, and __len__. - """ - - __slots__ = () - - @abstractmethod - def __setitem__(self, key, value): - raise KeyError - - @abstractmethod - def __delitem__(self, key): - raise KeyError - - __marker = object() - - def pop(self, key, default=__marker): - '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - ''' - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def popitem(self): - '''D.popitem() -> (k, v), remove and return some (key, value) pair - as a 2-tuple; but raise KeyError if D is empty. - ''' - try: - key = next(iter(self)) - except StopIteration: - raise KeyError from None - value = self[key] - del self[key] - return key, value - - def clear(self): - 'D.clear() -> None. Remove all items from D.' - try: - while True: - self.popitem() - except KeyError: - pass - - def update(self, other=(), /, **kwds): - ''' D.update([E, ]**F) -> None. Update D from mapping/iterable E and F. - If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k] - If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v - In either case, this is followed by: for k, v in F.items(): D[k] = v - ''' - if isinstance(other, Mapping): - for key in other: - self[key] = other[key] - elif hasattr(other, "keys"): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - def setdefault(self, key, default=None): - 'D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D' - try: - return self[key] - except KeyError: - self[key] = default - return default - - -MutableMapping.register(dict) - - -### SEQUENCES ### - -class Sequence(Reversible, Collection): - """All the operations on a read-only sequence. - - Concrete subclasses must override __new__ or __init__, - __getitem__, and __len__. - """ - - __slots__ = () - - # Tell ABCMeta.__new__ that this class should have TPFLAGS_SEQUENCE set. - __abc_tpflags__ = 1 << 5 # Py_TPFLAGS_SEQUENCE - - @abstractmethod - def __getitem__(self, index): - raise IndexError - - def __iter__(self): - i = 0 - try: - while True: - v = self[i] - yield v - i += 1 - except IndexError: - return - - def __contains__(self, value): - for v in self: - if v is value or v == value: - return True - return False - - def __reversed__(self): - for i in reversed(range(len(self))): - yield self[i] - - def index(self, value, start=0, stop=None): - '''S.index(value, [start, [stop]]) -> integer -- return first index of value. - Raises ValueError if the value is not present. - - Supporting start and stop arguments is optional, but - recommended. - ''' - if start is not None and start < 0: - start = max(len(self) + start, 0) - if stop is not None and stop < 0: - stop += len(self) - - i = start - while stop is None or i < stop: - try: - v = self[i] - except IndexError: - break - if v is value or v == value: - return i - i += 1 - raise ValueError - - def count(self, value): - 'S.count(value) -> integer -- return number of occurrences of value' - return sum(1 for v in self if v is value or v == value) - -Sequence.register(tuple) -Sequence.register(str) -Sequence.register(bytes) -Sequence.register(range) -Sequence.register(memoryview) - -class _DeprecateByteStringMeta(ABCMeta): - def __new__(cls, name, bases, namespace, **kwargs): - if name != "ByteString": - import warnings - - warnings._deprecated( - "collections.abc.ByteString", - remove=(3, 17), - ) - return super().__new__(cls, name, bases, namespace, **kwargs) - - def __instancecheck__(cls, instance): - import warnings - - warnings._deprecated( - "collections.abc.ByteString", - remove=(3, 17), - ) - return super().__instancecheck__(instance) - -class ByteString(Sequence, metaclass=_DeprecateByteStringMeta): - """Deprecated ABC serving as a common supertype of ``bytes`` and ``bytearray``. - - This ABC is scheduled for removal in Python 3.17. - Use ``isinstance(obj, collections.abc.Buffer)`` to test if ``obj`` - implements the buffer protocol at runtime. For use in type annotations, - either use ``Buffer`` or a union that explicitly specifies the types your - code supports (e.g., ``bytes | bytearray | memoryview``). - """ - - __slots__ = () - -ByteString.register(bytes) -ByteString.register(bytearray) - - -class MutableSequence(Sequence): - """All the operations on a read-write sequence. - - Concrete subclasses must provide __new__ or __init__, - __getitem__, __setitem__, __delitem__, __len__, and insert(). - """ - - __slots__ = () - - @abstractmethod - def __setitem__(self, index, value): - raise IndexError - - @abstractmethod - def __delitem__(self, index): - raise IndexError - - @abstractmethod - def insert(self, index, value): - 'S.insert(index, value) -- insert value before index' - raise IndexError - - def append(self, value): - 'S.append(value) -- append value to the end of the sequence' - self.insert(len(self), value) - - def clear(self): - 'S.clear() -> None -- remove all items from S' - try: - while True: - self.pop() - except IndexError: - pass - - def reverse(self): - 'S.reverse() -- reverse *IN PLACE*' - n = len(self) - for i in range(n//2): - self[i], self[n-i-1] = self[n-i-1], self[i] - - def extend(self, values): - 'S.extend(iterable) -- extend sequence by appending elements from the iterable' - if values is self: - values = list(values) - for v in values: - self.append(v) - - def pop(self, index=-1): - '''S.pop([index]) -> item -- remove and return item at index (default last). - Raise IndexError if list is empty or index is out of range. - ''' - v = self[index] - del self[index] - return v - - def remove(self, value): - '''S.remove(value) -- remove first occurrence of value. - Raise ValueError if the value is not present. - ''' - del self[self.index(value)] - - def __iadd__(self, values): - self.extend(values) - return self - - -MutableSequence.register(list) -MutableSequence.register(bytearray) diff --git a/Python314_4_x86_Template/Lib/_colorize.py b/Python314_4_x86_Template/Lib/_colorize.py deleted file mode 100644 index d6673f669..000000000 --- a/Python314_4_x86_Template/Lib/_colorize.py +++ /dev/null @@ -1,355 +0,0 @@ -import os -import sys - -from collections.abc import Callable, Iterator, Mapping -from dataclasses import dataclass, field, Field - -COLORIZE = True - - -# types -if False: - from typing import IO, Self, ClassVar - _theme: Theme - - -class ANSIColors: - RESET = "\x1b[0m" - - BLACK = "\x1b[30m" - BLUE = "\x1b[34m" - CYAN = "\x1b[36m" - GREEN = "\x1b[32m" - GREY = "\x1b[90m" - MAGENTA = "\x1b[35m" - RED = "\x1b[31m" - WHITE = "\x1b[37m" # more like LIGHT GRAY - YELLOW = "\x1b[33m" - - BOLD = "\x1b[1m" - BOLD_BLACK = "\x1b[1;30m" # DARK GRAY - BOLD_BLUE = "\x1b[1;34m" - BOLD_CYAN = "\x1b[1;36m" - BOLD_GREEN = "\x1b[1;32m" - BOLD_MAGENTA = "\x1b[1;35m" - BOLD_RED = "\x1b[1;31m" - BOLD_WHITE = "\x1b[1;37m" # actual WHITE - BOLD_YELLOW = "\x1b[1;33m" - - # intense = like bold but without being bold - INTENSE_BLACK = "\x1b[90m" - INTENSE_BLUE = "\x1b[94m" - INTENSE_CYAN = "\x1b[96m" - INTENSE_GREEN = "\x1b[92m" - INTENSE_MAGENTA = "\x1b[95m" - INTENSE_RED = "\x1b[91m" - INTENSE_WHITE = "\x1b[97m" - INTENSE_YELLOW = "\x1b[93m" - - BACKGROUND_BLACK = "\x1b[40m" - BACKGROUND_BLUE = "\x1b[44m" - BACKGROUND_CYAN = "\x1b[46m" - BACKGROUND_GREEN = "\x1b[42m" - BACKGROUND_MAGENTA = "\x1b[45m" - BACKGROUND_RED = "\x1b[41m" - BACKGROUND_WHITE = "\x1b[47m" - BACKGROUND_YELLOW = "\x1b[43m" - - INTENSE_BACKGROUND_BLACK = "\x1b[100m" - INTENSE_BACKGROUND_BLUE = "\x1b[104m" - INTENSE_BACKGROUND_CYAN = "\x1b[106m" - INTENSE_BACKGROUND_GREEN = "\x1b[102m" - INTENSE_BACKGROUND_MAGENTA = "\x1b[105m" - INTENSE_BACKGROUND_RED = "\x1b[101m" - INTENSE_BACKGROUND_WHITE = "\x1b[107m" - INTENSE_BACKGROUND_YELLOW = "\x1b[103m" - - -ColorCodes = set() -NoColors = ANSIColors() - -for attr, code in ANSIColors.__dict__.items(): - if not attr.startswith("__"): - ColorCodes.add(code) - setattr(NoColors, attr, "") - - -# -# Experimental theming support (see gh-133346) -# - -# - Create a theme by copying an existing `Theme` with one or more sections -# replaced, using `default_theme.copy_with()`; -# - create a theme section by copying an existing `ThemeSection` with one or -# more colors replaced, using for example `default_theme.syntax.copy_with()`; -# - create a theme from scratch by instantiating a `Theme` data class with -# the required sections (which are also dataclass instances). -# -# Then call `_colorize.set_theme(your_theme)` to set it. -# -# Put your theme configuration in $PYTHONSTARTUP for the interactive shell, -# or sitecustomize.py in your virtual environment or Python installation for -# other uses. Your applications can call `_colorize.set_theme()` too. -# -# Note that thanks to the dataclasses providing default values for all fields, -# creating a new theme or theme section from scratch is possible without -# specifying all keys. -# -# For example, here's a theme that makes punctuation and operators less prominent: -# -# try: -# from _colorize import set_theme, default_theme, Syntax, ANSIColors -# except ImportError: -# pass -# else: -# theme_with_dim_operators = default_theme.copy_with( -# syntax=Syntax(op=ANSIColors.INTENSE_BLACK), -# ) -# set_theme(theme_with_dim_operators) -# del set_theme, default_theme, Syntax, ANSIColors, theme_with_dim_operators -# -# Guarding the import ensures that your .pythonstartup file will still work in -# Python 3.13 and older. Deleting the variables ensures they don't remain in your -# interactive shell's global scope. - -class ThemeSection(Mapping[str, str]): - """A mixin/base class for theme sections. - - It enables dictionary access to a section, as well as implements convenience - methods. - """ - - # The two types below are just that: types to inform the type checker that the - # mixin will work in context of those fields existing - __dataclass_fields__: ClassVar[dict[str, Field[str]]] - _name_to_value: Callable[[str], str] - - def __post_init__(self) -> None: - name_to_value = {} - for color_name in self.__dataclass_fields__: - name_to_value[color_name] = getattr(self, color_name) - super().__setattr__('_name_to_value', name_to_value.__getitem__) - - def copy_with(self, **kwargs: str) -> Self: - color_state: dict[str, str] = {} - for color_name in self.__dataclass_fields__: - color_state[color_name] = getattr(self, color_name) - color_state.update(kwargs) - return type(self)(**color_state) - - @classmethod - def no_colors(cls) -> Self: - color_state: dict[str, str] = {} - for color_name in cls.__dataclass_fields__: - color_state[color_name] = "" - return cls(**color_state) - - def __getitem__(self, key: str) -> str: - return self._name_to_value(key) - - def __len__(self) -> int: - return len(self.__dataclass_fields__) - - def __iter__(self) -> Iterator[str]: - return iter(self.__dataclass_fields__) - - -@dataclass(frozen=True, kw_only=True) -class Argparse(ThemeSection): - usage: str = ANSIColors.BOLD_BLUE - prog: str = ANSIColors.BOLD_MAGENTA - prog_extra: str = ANSIColors.MAGENTA - heading: str = ANSIColors.BOLD_BLUE - summary_long_option: str = ANSIColors.CYAN - summary_short_option: str = ANSIColors.GREEN - summary_label: str = ANSIColors.YELLOW - summary_action: str = ANSIColors.GREEN - long_option: str = ANSIColors.BOLD_CYAN - short_option: str = ANSIColors.BOLD_GREEN - label: str = ANSIColors.BOLD_YELLOW - action: str = ANSIColors.BOLD_GREEN - reset: str = ANSIColors.RESET - - -@dataclass(frozen=True) -class Syntax(ThemeSection): - prompt: str = ANSIColors.BOLD_MAGENTA - keyword: str = ANSIColors.BOLD_BLUE - keyword_constant: str = ANSIColors.BOLD_BLUE - builtin: str = ANSIColors.CYAN - comment: str = ANSIColors.RED - string: str = ANSIColors.GREEN - number: str = ANSIColors.YELLOW - op: str = ANSIColors.RESET - definition: str = ANSIColors.BOLD - soft_keyword: str = ANSIColors.BOLD_BLUE - reset: str = ANSIColors.RESET - - -@dataclass(frozen=True) -class Traceback(ThemeSection): - type: str = ANSIColors.BOLD_MAGENTA - message: str = ANSIColors.MAGENTA - filename: str = ANSIColors.MAGENTA - line_no: str = ANSIColors.MAGENTA - frame: str = ANSIColors.MAGENTA - error_highlight: str = ANSIColors.BOLD_RED - error_range: str = ANSIColors.RED - reset: str = ANSIColors.RESET - - -@dataclass(frozen=True) -class Unittest(ThemeSection): - passed: str = ANSIColors.GREEN - warn: str = ANSIColors.YELLOW - fail: str = ANSIColors.RED - fail_info: str = ANSIColors.BOLD_RED - reset: str = ANSIColors.RESET - - -@dataclass(frozen=True) -class Theme: - """A suite of themes for all sections of Python. - - When adding a new one, remember to also modify `copy_with` and `no_colors` - below. - """ - argparse: Argparse = field(default_factory=Argparse) - syntax: Syntax = field(default_factory=Syntax) - traceback: Traceback = field(default_factory=Traceback) - unittest: Unittest = field(default_factory=Unittest) - - def copy_with( - self, - *, - argparse: Argparse | None = None, - syntax: Syntax | None = None, - traceback: Traceback | None = None, - unittest: Unittest | None = None, - ) -> Self: - """Return a new Theme based on this instance with some sections replaced. - - Themes are immutable to protect against accidental modifications that - could lead to invalid terminal states. - """ - return type(self)( - argparse=argparse or self.argparse, - syntax=syntax or self.syntax, - traceback=traceback or self.traceback, - unittest=unittest or self.unittest, - ) - - @classmethod - def no_colors(cls) -> Self: - """Return a new Theme where colors in all sections are empty strings. - - This allows writing user code as if colors are always used. The color - fields will be ANSI color code strings when colorization is desired - and possible, and empty strings otherwise. - """ - return cls( - argparse=Argparse.no_colors(), - syntax=Syntax.no_colors(), - traceback=Traceback.no_colors(), - unittest=Unittest.no_colors(), - ) - - -def get_colors( - colorize: bool = False, *, file: IO[str] | IO[bytes] | None = None -) -> ANSIColors: - if colorize or can_colorize(file=file): - return ANSIColors() - else: - return NoColors - - -def decolor(text: str) -> str: - """Remove ANSI color codes from a string.""" - for code in ColorCodes: - text = text.replace(code, "") - return text - - -def can_colorize(*, file: IO[str] | IO[bytes] | None = None) -> bool: - - def _safe_getenv(k: str, fallback: str | None = None) -> str | None: - """Exception-safe environment retrieval. See gh-128636.""" - try: - return os.environ.get(k, fallback) - except Exception: - return fallback - - if file is None: - file = sys.stdout - - if not sys.flags.ignore_environment: - if _safe_getenv("PYTHON_COLORS") == "0": - return False - if _safe_getenv("PYTHON_COLORS") == "1": - return True - if _safe_getenv("NO_COLOR"): - return False - if not COLORIZE: - return False - if _safe_getenv("FORCE_COLOR"): - return True - if _safe_getenv("TERM") == "dumb": - return False - - if not hasattr(file, "fileno"): - return False - - if sys.platform == "win32": - try: - import nt - - if not nt._supports_virtual_terminal(): - return False - except (ImportError, AttributeError): - return False - - try: - return os.isatty(file.fileno()) - except OSError: - return hasattr(file, "isatty") and file.isatty() - - -default_theme = Theme() -theme_no_color = default_theme.no_colors() - - -def get_theme( - *, - tty_file: IO[str] | IO[bytes] | None = None, - force_color: bool = False, - force_no_color: bool = False, -) -> Theme: - """Returns the currently set theme, potentially in a zero-color variant. - - In cases where colorizing is not possible (see `can_colorize`), the returned - theme contains all empty strings in all color definitions. - See `Theme.no_colors()` for more information. - - It is recommended not to cache the result of this function for extended - periods of time because the user might influence theme selection by - the interactive shell, a debugger, or application-specific code. The - environment (including environment variable state and console configuration - on Windows) can also change in the course of the application life cycle. - """ - if force_color or (not force_no_color and - can_colorize(file=tty_file)): - return _theme - return theme_no_color - - -def set_theme(t: Theme) -> None: - global _theme - - if not isinstance(t, Theme): - raise ValueError(f"Expected Theme object, found {t}") - - _theme = t - - -set_theme(default_theme) diff --git a/Python314_4_x86_Template/Lib/_compat_pickle.py b/Python314_4_x86_Template/Lib/_compat_pickle.py deleted file mode 100644 index 439f8c02f..000000000 --- a/Python314_4_x86_Template/Lib/_compat_pickle.py +++ /dev/null @@ -1,251 +0,0 @@ -# This module is used to map the old Python 2 names to the new names used in -# Python 3 for the pickle module. This needed to make pickle streams -# generated with Python 2 loadable by Python 3. - -# This is a copy of lib2to3.fixes.fix_imports.MAPPING. We cannot import -# lib2to3 and use the mapping defined there, because lib2to3 uses pickle. -# Thus, this could cause the module to be imported recursively. -IMPORT_MAPPING = { - '__builtin__' : 'builtins', - 'copy_reg': 'copyreg', - 'Queue': 'queue', - 'SocketServer': 'socketserver', - 'ConfigParser': 'configparser', - 'repr': 'reprlib', - 'tkFileDialog': 'tkinter.filedialog', - 'tkSimpleDialog': 'tkinter.simpledialog', - 'tkColorChooser': 'tkinter.colorchooser', - 'tkCommonDialog': 'tkinter.commondialog', - 'Dialog': 'tkinter.dialog', - 'Tkdnd': 'tkinter.dnd', - 'tkFont': 'tkinter.font', - 'tkMessageBox': 'tkinter.messagebox', - 'ScrolledText': 'tkinter.scrolledtext', - 'Tkconstants': 'tkinter.constants', - 'ttk': 'tkinter.ttk', - 'Tkinter': 'tkinter', - 'markupbase': '_markupbase', - '_winreg': 'winreg', - 'thread': '_thread', - 'dummy_thread': '_dummy_thread', - 'dbhash': 'dbm.bsd', - 'dumbdbm': 'dbm.dumb', - 'dbm': 'dbm.ndbm', - 'gdbm': 'dbm.gnu', - 'xmlrpclib': 'xmlrpc.client', - 'SimpleXMLRPCServer': 'xmlrpc.server', - 'httplib': 'http.client', - 'htmlentitydefs' : 'html.entities', - 'HTMLParser' : 'html.parser', - 'Cookie': 'http.cookies', - 'cookielib': 'http.cookiejar', - 'BaseHTTPServer': 'http.server', - 'test.test_support': 'test.support', - 'commands': 'subprocess', - 'urlparse' : 'urllib.parse', - 'robotparser' : 'urllib.robotparser', - 'urllib2': 'urllib.request', - 'anydbm': 'dbm', - '_abcoll' : 'collections.abc', -} - - -# This contains rename rules that are easy to handle. We ignore the more -# complex stuff (e.g. mapping the names in the urllib and types modules). -# These rules should be run before import names are fixed. -NAME_MAPPING = { - ('__builtin__', 'xrange'): ('builtins', 'range'), - ('__builtin__', 'reduce'): ('functools', 'reduce'), - ('__builtin__', 'intern'): ('sys', 'intern'), - ('__builtin__', 'unichr'): ('builtins', 'chr'), - ('__builtin__', 'unicode'): ('builtins', 'str'), - ('__builtin__', 'long'): ('builtins', 'int'), - ('itertools', 'izip'): ('builtins', 'zip'), - ('itertools', 'imap'): ('builtins', 'map'), - ('itertools', 'ifilter'): ('builtins', 'filter'), - ('itertools', 'ifilterfalse'): ('itertools', 'filterfalse'), - ('itertools', 'izip_longest'): ('itertools', 'zip_longest'), - ('UserDict', 'IterableUserDict'): ('collections', 'UserDict'), - ('UserList', 'UserList'): ('collections', 'UserList'), - ('UserString', 'UserString'): ('collections', 'UserString'), - ('whichdb', 'whichdb'): ('dbm', 'whichdb'), - ('_socket', 'fromfd'): ('socket', 'fromfd'), - ('_multiprocessing', 'Connection'): ('multiprocessing.connection', 'Connection'), - ('multiprocessing.process', 'Process'): ('multiprocessing.context', 'Process'), - ('multiprocessing.forking', 'Popen'): ('multiprocessing.popen_fork', 'Popen'), - ('urllib', 'ContentTooShortError'): ('urllib.error', 'ContentTooShortError'), - ('urllib', 'getproxies'): ('urllib.request', 'getproxies'), - ('urllib', 'pathname2url'): ('urllib.request', 'pathname2url'), - ('urllib', 'quote_plus'): ('urllib.parse', 'quote_plus'), - ('urllib', 'quote'): ('urllib.parse', 'quote'), - ('urllib', 'unquote_plus'): ('urllib.parse', 'unquote_plus'), - ('urllib', 'unquote'): ('urllib.parse', 'unquote'), - ('urllib', 'url2pathname'): ('urllib.request', 'url2pathname'), - ('urllib', 'urlcleanup'): ('urllib.request', 'urlcleanup'), - ('urllib', 'urlencode'): ('urllib.parse', 'urlencode'), - ('urllib', 'urlopen'): ('urllib.request', 'urlopen'), - ('urllib', 'urlretrieve'): ('urllib.request', 'urlretrieve'), - ('urllib2', 'HTTPError'): ('urllib.error', 'HTTPError'), - ('urllib2', 'URLError'): ('urllib.error', 'URLError'), -} - -PYTHON2_EXCEPTIONS = ( - "ArithmeticError", - "AssertionError", - "AttributeError", - "BaseException", - "BufferError", - "BytesWarning", - "DeprecationWarning", - "EOFError", - "EnvironmentError", - "Exception", - "FloatingPointError", - "FutureWarning", - "GeneratorExit", - "IOError", - "ImportError", - "ImportWarning", - "IndentationError", - "IndexError", - "KeyError", - "KeyboardInterrupt", - "LookupError", - "MemoryError", - "NameError", - "NotImplementedError", - "OSError", - "OverflowError", - "PendingDeprecationWarning", - "ReferenceError", - "RuntimeError", - "RuntimeWarning", - # StandardError is gone in Python 3, so we map it to Exception - "StopIteration", - "SyntaxError", - "SyntaxWarning", - "SystemError", - "SystemExit", - "TabError", - "TypeError", - "UnboundLocalError", - "UnicodeDecodeError", - "UnicodeEncodeError", - "UnicodeError", - "UnicodeTranslateError", - "UnicodeWarning", - "UserWarning", - "ValueError", - "Warning", - "ZeroDivisionError", -) - -try: - WindowsError -except NameError: - pass -else: - PYTHON2_EXCEPTIONS += ("WindowsError",) - -for excname in PYTHON2_EXCEPTIONS: - NAME_MAPPING[("exceptions", excname)] = ("builtins", excname) - -MULTIPROCESSING_EXCEPTIONS = ( - 'AuthenticationError', - 'BufferTooShort', - 'ProcessError', - 'TimeoutError', -) - -for excname in MULTIPROCESSING_EXCEPTIONS: - NAME_MAPPING[("multiprocessing", excname)] = ("multiprocessing.context", excname) - -# Same, but for 3.x to 2.x -REVERSE_IMPORT_MAPPING = dict((v, k) for (k, v) in IMPORT_MAPPING.items()) -assert len(REVERSE_IMPORT_MAPPING) == len(IMPORT_MAPPING) -REVERSE_NAME_MAPPING = dict((v, k) for (k, v) in NAME_MAPPING.items()) -assert len(REVERSE_NAME_MAPPING) == len(NAME_MAPPING) - -# Non-mutual mappings. - -IMPORT_MAPPING.update({ - 'cPickle': 'pickle', - '_elementtree': 'xml.etree.ElementTree', - 'FileDialog': 'tkinter.filedialog', - 'SimpleDialog': 'tkinter.simpledialog', - 'DocXMLRPCServer': 'xmlrpc.server', - 'SimpleHTTPServer': 'http.server', - 'CGIHTTPServer': 'http.server', - # For compatibility with broken pickles saved in old Python 3 versions - 'UserDict': 'collections', - 'UserList': 'collections', - 'UserString': 'collections', - 'whichdb': 'dbm', - 'StringIO': 'io', - 'cStringIO': 'io', -}) - -REVERSE_IMPORT_MAPPING.update({ - '_bz2': 'bz2', - '_dbm': 'dbm', - '_functools': 'functools', - '_gdbm': 'gdbm', - '_pickle': 'pickle', -}) - -NAME_MAPPING.update({ - ('__builtin__', 'basestring'): ('builtins', 'str'), - ('exceptions', 'StandardError'): ('builtins', 'Exception'), - ('UserDict', 'UserDict'): ('collections', 'UserDict'), - ('socket', '_socketobject'): ('socket', 'SocketType'), -}) - -REVERSE_NAME_MAPPING.update({ - ('_functools', 'reduce'): ('__builtin__', 'reduce'), - ('tkinter.filedialog', 'FileDialog'): ('FileDialog', 'FileDialog'), - ('tkinter.filedialog', 'LoadFileDialog'): ('FileDialog', 'LoadFileDialog'), - ('tkinter.filedialog', 'SaveFileDialog'): ('FileDialog', 'SaveFileDialog'), - ('tkinter.simpledialog', 'SimpleDialog'): ('SimpleDialog', 'SimpleDialog'), - ('xmlrpc.server', 'ServerHTMLDoc'): ('DocXMLRPCServer', 'ServerHTMLDoc'), - ('xmlrpc.server', 'XMLRPCDocGenerator'): - ('DocXMLRPCServer', 'XMLRPCDocGenerator'), - ('xmlrpc.server', 'DocXMLRPCRequestHandler'): - ('DocXMLRPCServer', 'DocXMLRPCRequestHandler'), - ('xmlrpc.server', 'DocXMLRPCServer'): - ('DocXMLRPCServer', 'DocXMLRPCServer'), - ('xmlrpc.server', 'DocCGIXMLRPCRequestHandler'): - ('DocXMLRPCServer', 'DocCGIXMLRPCRequestHandler'), - ('http.server', 'SimpleHTTPRequestHandler'): - ('SimpleHTTPServer', 'SimpleHTTPRequestHandler'), - ('http.server', 'CGIHTTPRequestHandler'): - ('CGIHTTPServer', 'CGIHTTPRequestHandler'), - ('_socket', 'socket'): ('socket', '_socketobject'), -}) - -PYTHON3_OSERROR_EXCEPTIONS = ( - 'BrokenPipeError', - 'ChildProcessError', - 'ConnectionAbortedError', - 'ConnectionError', - 'ConnectionRefusedError', - 'ConnectionResetError', - 'FileExistsError', - 'FileNotFoundError', - 'InterruptedError', - 'IsADirectoryError', - 'NotADirectoryError', - 'PermissionError', - 'ProcessLookupError', - 'TimeoutError', -) - -for excname in PYTHON3_OSERROR_EXCEPTIONS: - REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError') - -PYTHON3_IMPORTERROR_EXCEPTIONS = ( - 'ModuleNotFoundError', -) - -for excname in PYTHON3_IMPORTERROR_EXCEPTIONS: - REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'ImportError') -del excname diff --git a/Python314_4_x86_Template/Lib/_ios_support.py b/Python314_4_x86_Template/Lib/_ios_support.py deleted file mode 100644 index 20467a7c2..000000000 --- a/Python314_4_x86_Template/Lib/_ios_support.py +++ /dev/null @@ -1,71 +0,0 @@ -import sys -try: - from ctypes import cdll, c_void_p, c_char_p, util -except ImportError: - # ctypes is an optional module. If it's not present, we're limited in what - # we can tell about the system, but we don't want to prevent the module - # from working. - print("ctypes isn't available; iOS system calls will not be available", file=sys.stderr) - objc = None -else: - # ctypes is available. Load the ObjC library, and wrap the objc_getClass, - # sel_registerName methods - lib = util.find_library("objc") - if lib is None: - # Failed to load the objc library - raise ImportError("ObjC runtime library couldn't be loaded") - - objc = cdll.LoadLibrary(lib) - objc.objc_getClass.restype = c_void_p - objc.objc_getClass.argtypes = [c_char_p] - objc.sel_registerName.restype = c_void_p - objc.sel_registerName.argtypes = [c_char_p] - - -def get_platform_ios(): - # Determine if this is a simulator using the multiarch value - is_simulator = sys.implementation._multiarch.endswith("simulator") - - # We can't use ctypes; abort - if not objc: - return None - - # Most of the methods return ObjC objects - objc.objc_msgSend.restype = c_void_p - # All the methods used have no arguments. - objc.objc_msgSend.argtypes = [c_void_p, c_void_p] - - # Equivalent of: - # device = [UIDevice currentDevice] - UIDevice = objc.objc_getClass(b"UIDevice") - SEL_currentDevice = objc.sel_registerName(b"currentDevice") - device = objc.objc_msgSend(UIDevice, SEL_currentDevice) - - # Equivalent of: - # device_systemVersion = [device systemVersion] - SEL_systemVersion = objc.sel_registerName(b"systemVersion") - device_systemVersion = objc.objc_msgSend(device, SEL_systemVersion) - - # Equivalent of: - # device_systemName = [device systemName] - SEL_systemName = objc.sel_registerName(b"systemName") - device_systemName = objc.objc_msgSend(device, SEL_systemName) - - # Equivalent of: - # device_model = [device model] - SEL_model = objc.sel_registerName(b"model") - device_model = objc.objc_msgSend(device, SEL_model) - - # UTF8String returns a const char*; - SEL_UTF8String = objc.sel_registerName(b"UTF8String") - objc.objc_msgSend.restype = c_char_p - - # Equivalent of: - # system = [device_systemName UTF8String] - # release = [device_systemVersion UTF8String] - # model = [device_model UTF8String] - system = objc.objc_msgSend(device_systemName, SEL_UTF8String).decode() - release = objc.objc_msgSend(device_systemVersion, SEL_UTF8String).decode() - model = objc.objc_msgSend(device_model, SEL_UTF8String).decode() - - return system, release, model, is_simulator diff --git a/Python314_4_x86_Template/Lib/_markupbase.py b/Python314_4_x86_Template/Lib/_markupbase.py deleted file mode 100644 index 614f0cd16..000000000 --- a/Python314_4_x86_Template/Lib/_markupbase.py +++ /dev/null @@ -1,396 +0,0 @@ -"""Shared support for scanning document type declarations in HTML and XHTML. - -This module is used as a foundation for the html.parser module. It has no -documented public API and should not be used directly. - -""" - -import re - -_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9]*\s*').match -_declstringlit_match = re.compile(r'(\'[^\']*\'|"[^"]*")\s*').match -_commentclose = re.compile(r'--\s*>') -_markedsectionclose = re.compile(r']\s*]\s*>') - -# An analysis of the MS-Word extensions is available at -# http://web.archive.org/web/20060321153828/http://www.planetpublish.com/xmlarena/xap/Thursday/WordtoXML.pdf - -_msmarkedsectionclose = re.compile(r']\s*>') - -del re - - -class ParserBase: - """Parser base class which provides some common support methods used - by the SGML/HTML and XHTML parsers.""" - - def __init__(self): - if self.__class__ is ParserBase: - raise RuntimeError( - "_markupbase.ParserBase must be subclassed") - - def reset(self): - self.lineno = 1 - self.offset = 0 - - def getpos(self): - """Return current line number and offset.""" - return self.lineno, self.offset - - # Internal -- update line number and offset. This should be - # called for each piece of data exactly once, in order -- in other - # words the concatenation of all the input strings to this - # function should be exactly the entire input. - def updatepos(self, i, j): - if i >= j: - return j - rawdata = self.rawdata - nlines = rawdata.count("\n", i, j) - if nlines: - self.lineno = self.lineno + nlines - pos = rawdata.rindex("\n", i, j) # Should not fail - self.offset = j-(pos+1) - else: - self.offset = self.offset + j-i - return j - - _decl_otherchars = '' - - # Internal -- parse declaration (for use by subclasses). - def parse_declaration(self, i): - # This is some sort of declaration; in "HTML as - # deployed," this should only be the document type - # declaration ("<!DOCTYPE html...>"). - # ISO 8879:1986, however, has more complex - # declaration syntax for elements in <!...>, including: - # --comment-- - # [marked section] - # name in the following list: ENTITY, DOCTYPE, ELEMENT, - # ATTLIST, NOTATION, SHORTREF, USEMAP, - # LINKTYPE, LINK, IDLINK, USELINK, SYSTEM - rawdata = self.rawdata - j = i + 2 - assert rawdata[i:j] == "<!", "unexpected call to parse_declaration" - if rawdata[j:j+1] == ">": - # the empty comment <!> - return j + 1 - if rawdata[j:j+1] in ("-", ""): - # Start of comment followed by buffer boundary, - # or just a buffer boundary. - return -1 - # A simple, practical version could look like: ((name|stringlit) S*) + '>' - n = len(rawdata) - if rawdata[j:j+2] == '--': #comment - # Locate --.*-- as the body of the comment - return self.parse_comment(i) - elif rawdata[j] == '[': #marked section - # Locate [statusWord [...arbitrary SGML...]] as the body of the marked section - # Where statusWord is one of TEMP, CDATA, IGNORE, INCLUDE, RCDATA - # Note that this is extended by Microsoft Office "Save as Web" function - # to include [if...] and [endif]. - return self.parse_marked_section(i) - else: #all other declaration elements - decltype, j = self._scan_name(j, i) - if j < 0: - return j - if decltype == "doctype": - self._decl_otherchars = '' - while j < n: - c = rawdata[j] - if c == ">": - # end of declaration syntax - data = rawdata[i+2:j] - if decltype == "doctype": - self.handle_decl(data) - else: - # According to the HTML5 specs sections "8.2.4.44 Bogus - # comment state" and "8.2.4.45 Markup declaration open - # state", a comment token should be emitted. - # Calling unknown_decl provides more flexibility though. - self.unknown_decl(data) - return j + 1 - if c in "\"'": - m = _declstringlit_match(rawdata, j) - if not m: - return -1 # incomplete - j = m.end() - elif c in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ": - name, j = self._scan_name(j, i) - elif c in self._decl_otherchars: - j = j + 1 - elif c == "[": - # this could be handled in a separate doctype parser - if decltype == "doctype": - j = self._parse_doctype_subset(j + 1, i) - elif decltype in {"attlist", "linktype", "link", "element"}: - # must tolerate []'d groups in a content model in an element declaration - # also in data attribute specifications of attlist declaration - # also link type declaration subsets in linktype declarations - # also link attribute specification lists in link declarations - raise AssertionError("unsupported '[' char in %s declaration" % decltype) - else: - raise AssertionError("unexpected '[' char in declaration") - else: - raise AssertionError("unexpected %r char in declaration" % rawdata[j]) - if j < 0: - return j - return -1 # incomplete - - # Internal -- parse a marked section - # Override this to handle MS-word extension syntax <![if word]>content<![endif]> - def parse_marked_section(self, i, report=1): - rawdata= self.rawdata - assert rawdata[i:i+3] == '<![', "unexpected call to parse_marked_section()" - sectName, j = self._scan_name( i+3, i ) - if j < 0: - return j - if sectName in {"temp", "cdata", "ignore", "include", "rcdata"}: - # look for standard ]]> ending - match= _markedsectionclose.search(rawdata, i+3) - elif sectName in {"if", "else", "endif"}: - # look for MS Office ]> ending - match= _msmarkedsectionclose.search(rawdata, i+3) - else: - raise AssertionError( - 'unknown status keyword %r in marked section' % rawdata[i+3:j] - ) - if not match: - return -1 - if report: - j = match.start(0) - self.unknown_decl(rawdata[i+3: j]) - return match.end(0) - - # Internal -- parse comment, return length or -1 if not terminated - def parse_comment(self, i, report=1): - rawdata = self.rawdata - if rawdata[i:i+4] != '<!--': - raise AssertionError('unexpected call to parse_comment()') - match = _commentclose.search(rawdata, i+4) - if not match: - return -1 - if report: - j = match.start(0) - self.handle_comment(rawdata[i+4: j]) - return match.end(0) - - # Internal -- scan past the internal subset in a <!DOCTYPE declaration, - # returning the index just past any whitespace following the trailing ']'. - def _parse_doctype_subset(self, i, declstartpos): - rawdata = self.rawdata - n = len(rawdata) - j = i - while j < n: - c = rawdata[j] - if c == "<": - s = rawdata[j:j+2] - if s == "<": - # end of buffer; incomplete - return -1 - if s != "<!": - self.updatepos(declstartpos, j + 1) - raise AssertionError( - "unexpected char in internal subset (in %r)" % s - ) - if (j + 2) == n: - # end of buffer; incomplete - return -1 - if (j + 4) > n: - # end of buffer; incomplete - return -1 - if rawdata[j:j+4] == "<!--": - j = self.parse_comment(j, report=0) - if j < 0: - return j - continue - name, j = self._scan_name(j + 2, declstartpos) - if j == -1: - return -1 - if name not in {"attlist", "element", "entity", "notation"}: - self.updatepos(declstartpos, j + 2) - raise AssertionError( - "unknown declaration %r in internal subset" % name - ) - # handle the individual names - meth = getattr(self, "_parse_doctype_" + name) - j = meth(j, declstartpos) - if j < 0: - return j - elif c == "%": - # parameter entity reference - if (j + 1) == n: - # end of buffer; incomplete - return -1 - s, j = self._scan_name(j + 1, declstartpos) - if j < 0: - return j - if rawdata[j] == ";": - j = j + 1 - elif c == "]": - j = j + 1 - while j < n and rawdata[j].isspace(): - j = j + 1 - if j < n: - if rawdata[j] == ">": - return j - self.updatepos(declstartpos, j) - raise AssertionError("unexpected char after internal subset") - else: - return -1 - elif c.isspace(): - j = j + 1 - else: - self.updatepos(declstartpos, j) - raise AssertionError("unexpected char %r in internal subset" % c) - # end of buffer reached - return -1 - - # Internal -- scan past <!ELEMENT declarations - def _parse_doctype_element(self, i, declstartpos): - name, j = self._scan_name(i, declstartpos) - if j == -1: - return -1 - # style content model; just skip until '>' - rawdata = self.rawdata - if '>' in rawdata[j:]: - return rawdata.find(">", j) + 1 - return -1 - - # Internal -- scan past <!ATTLIST declarations - def _parse_doctype_attlist(self, i, declstartpos): - rawdata = self.rawdata - name, j = self._scan_name(i, declstartpos) - c = rawdata[j:j+1] - if c == "": - return -1 - if c == ">": - return j + 1 - while 1: - # scan a series of attribute descriptions; simplified: - # name type [value] [#constraint] - name, j = self._scan_name(j, declstartpos) - if j < 0: - return j - c = rawdata[j:j+1] - if c == "": - return -1 - if c == "(": - # an enumerated type; look for ')' - if ")" in rawdata[j:]: - j = rawdata.find(")", j) + 1 - else: - return -1 - while rawdata[j:j+1].isspace(): - j = j + 1 - if not rawdata[j:]: - # end of buffer, incomplete - return -1 - else: - name, j = self._scan_name(j, declstartpos) - c = rawdata[j:j+1] - if not c: - return -1 - if c in "'\"": - m = _declstringlit_match(rawdata, j) - if m: - j = m.end() - else: - return -1 - c = rawdata[j:j+1] - if not c: - return -1 - if c == "#": - if rawdata[j:] == "#": - # end of buffer - return -1 - name, j = self._scan_name(j + 1, declstartpos) - if j < 0: - return j - c = rawdata[j:j+1] - if not c: - return -1 - if c == '>': - # all done - return j + 1 - - # Internal -- scan past <!NOTATION declarations - def _parse_doctype_notation(self, i, declstartpos): - name, j = self._scan_name(i, declstartpos) - if j < 0: - return j - rawdata = self.rawdata - while 1: - c = rawdata[j:j+1] - if not c: - # end of buffer; incomplete - return -1 - if c == '>': - return j + 1 - if c in "'\"": - m = _declstringlit_match(rawdata, j) - if not m: - return -1 - j = m.end() - else: - name, j = self._scan_name(j, declstartpos) - if j < 0: - return j - - # Internal -- scan past <!ENTITY declarations - def _parse_doctype_entity(self, i, declstartpos): - rawdata = self.rawdata - if rawdata[i:i+1] == "%": - j = i + 1 - while 1: - c = rawdata[j:j+1] - if not c: - return -1 - if c.isspace(): - j = j + 1 - else: - break - else: - j = i - name, j = self._scan_name(j, declstartpos) - if j < 0: - return j - while 1: - c = self.rawdata[j:j+1] - if not c: - return -1 - if c in "'\"": - m = _declstringlit_match(rawdata, j) - if m: - j = m.end() - else: - return -1 # incomplete - elif c == ">": - return j + 1 - else: - name, j = self._scan_name(j, declstartpos) - if j < 0: - return j - - # Internal -- scan a name token and the new position and the token, or - # return -1 if we've reached the end of the buffer. - def _scan_name(self, i, declstartpos): - rawdata = self.rawdata - n = len(rawdata) - if i == n: - return None, -1 - m = _declname_match(rawdata, i) - if m: - s = m.group() - name = s.strip() - if (i + len(s)) == n: - return None, -1 # end of buffer - return name.lower(), m.end() - else: - self.updatepos(declstartpos, i) - raise AssertionError( - "expected name token at %r" % rawdata[declstartpos:declstartpos+20] - ) - - # To be overridden -- handlers for unknown objects - def unknown_decl(self, data): - pass diff --git a/Python314_4_x86_Template/Lib/_opcode_metadata.py b/Python314_4_x86_Template/Lib/_opcode_metadata.py deleted file mode 100644 index b9304ec3c..000000000 --- a/Python314_4_x86_Template/Lib/_opcode_metadata.py +++ /dev/null @@ -1,371 +0,0 @@ -# This file is generated by Tools/cases_generator/py_metadata_generator.py -# from: -# Python/bytecodes.c -# Do not edit! -_specializations = { - "RESUME": [ - "RESUME_CHECK", - ], - "LOAD_CONST": [ - "LOAD_CONST_MORTAL", - "LOAD_CONST_IMMORTAL", - ], - "TO_BOOL": [ - "TO_BOOL_ALWAYS_TRUE", - "TO_BOOL_BOOL", - "TO_BOOL_INT", - "TO_BOOL_LIST", - "TO_BOOL_NONE", - "TO_BOOL_STR", - ], - "BINARY_OP": [ - "BINARY_OP_MULTIPLY_INT", - "BINARY_OP_ADD_INT", - "BINARY_OP_SUBTRACT_INT", - "BINARY_OP_MULTIPLY_FLOAT", - "BINARY_OP_ADD_FLOAT", - "BINARY_OP_SUBTRACT_FLOAT", - "BINARY_OP_ADD_UNICODE", - "BINARY_OP_SUBSCR_LIST_INT", - "BINARY_OP_SUBSCR_LIST_SLICE", - "BINARY_OP_SUBSCR_TUPLE_INT", - "BINARY_OP_SUBSCR_STR_INT", - "BINARY_OP_SUBSCR_DICT", - "BINARY_OP_SUBSCR_GETITEM", - "BINARY_OP_EXTEND", - "BINARY_OP_INPLACE_ADD_UNICODE", - ], - "STORE_SUBSCR": [ - "STORE_SUBSCR_DICT", - "STORE_SUBSCR_LIST_INT", - ], - "SEND": [ - "SEND_GEN", - ], - "UNPACK_SEQUENCE": [ - "UNPACK_SEQUENCE_TWO_TUPLE", - "UNPACK_SEQUENCE_TUPLE", - "UNPACK_SEQUENCE_LIST", - ], - "STORE_ATTR": [ - "STORE_ATTR_INSTANCE_VALUE", - "STORE_ATTR_SLOT", - "STORE_ATTR_WITH_HINT", - ], - "LOAD_GLOBAL": [ - "LOAD_GLOBAL_MODULE", - "LOAD_GLOBAL_BUILTIN", - ], - "LOAD_SUPER_ATTR": [ - "LOAD_SUPER_ATTR_ATTR", - "LOAD_SUPER_ATTR_METHOD", - ], - "LOAD_ATTR": [ - "LOAD_ATTR_INSTANCE_VALUE", - "LOAD_ATTR_MODULE", - "LOAD_ATTR_WITH_HINT", - "LOAD_ATTR_SLOT", - "LOAD_ATTR_CLASS", - "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK", - "LOAD_ATTR_PROPERTY", - "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", - "LOAD_ATTR_METHOD_WITH_VALUES", - "LOAD_ATTR_METHOD_NO_DICT", - "LOAD_ATTR_METHOD_LAZY_DICT", - "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", - "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", - ], - "COMPARE_OP": [ - "COMPARE_OP_FLOAT", - "COMPARE_OP_INT", - "COMPARE_OP_STR", - ], - "CONTAINS_OP": [ - "CONTAINS_OP_SET", - "CONTAINS_OP_DICT", - ], - "JUMP_BACKWARD": [ - "JUMP_BACKWARD_NO_JIT", - "JUMP_BACKWARD_JIT", - ], - "FOR_ITER": [ - "FOR_ITER_LIST", - "FOR_ITER_TUPLE", - "FOR_ITER_RANGE", - "FOR_ITER_GEN", - ], - "CALL": [ - "CALL_BOUND_METHOD_EXACT_ARGS", - "CALL_PY_EXACT_ARGS", - "CALL_TYPE_1", - "CALL_STR_1", - "CALL_TUPLE_1", - "CALL_BUILTIN_CLASS", - "CALL_BUILTIN_O", - "CALL_BUILTIN_FAST", - "CALL_BUILTIN_FAST_WITH_KEYWORDS", - "CALL_LEN", - "CALL_ISINSTANCE", - "CALL_LIST_APPEND", - "CALL_METHOD_DESCRIPTOR_O", - "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - "CALL_METHOD_DESCRIPTOR_NOARGS", - "CALL_METHOD_DESCRIPTOR_FAST", - "CALL_ALLOC_AND_ENTER_INIT", - "CALL_PY_GENERAL", - "CALL_BOUND_METHOD_GENERAL", - "CALL_NON_PY_GENERAL", - ], - "CALL_KW": [ - "CALL_KW_BOUND_METHOD", - "CALL_KW_PY", - "CALL_KW_NON_PY", - ], -} - -_specialized_opmap = { - 'BINARY_OP_ADD_FLOAT': 129, - 'BINARY_OP_ADD_INT': 130, - 'BINARY_OP_ADD_UNICODE': 131, - 'BINARY_OP_EXTEND': 132, - 'BINARY_OP_INPLACE_ADD_UNICODE': 3, - 'BINARY_OP_MULTIPLY_FLOAT': 133, - 'BINARY_OP_MULTIPLY_INT': 134, - 'BINARY_OP_SUBSCR_DICT': 135, - 'BINARY_OP_SUBSCR_GETITEM': 136, - 'BINARY_OP_SUBSCR_LIST_INT': 137, - 'BINARY_OP_SUBSCR_LIST_SLICE': 138, - 'BINARY_OP_SUBSCR_STR_INT': 139, - 'BINARY_OP_SUBSCR_TUPLE_INT': 140, - 'BINARY_OP_SUBTRACT_FLOAT': 141, - 'BINARY_OP_SUBTRACT_INT': 142, - 'CALL_ALLOC_AND_ENTER_INIT': 143, - 'CALL_BOUND_METHOD_EXACT_ARGS': 144, - 'CALL_BOUND_METHOD_GENERAL': 145, - 'CALL_BUILTIN_CLASS': 146, - 'CALL_BUILTIN_FAST': 147, - 'CALL_BUILTIN_FAST_WITH_KEYWORDS': 148, - 'CALL_BUILTIN_O': 149, - 'CALL_ISINSTANCE': 150, - 'CALL_KW_BOUND_METHOD': 151, - 'CALL_KW_NON_PY': 152, - 'CALL_KW_PY': 153, - 'CALL_LEN': 154, - 'CALL_LIST_APPEND': 155, - 'CALL_METHOD_DESCRIPTOR_FAST': 156, - 'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 157, - 'CALL_METHOD_DESCRIPTOR_NOARGS': 158, - 'CALL_METHOD_DESCRIPTOR_O': 159, - 'CALL_NON_PY_GENERAL': 160, - 'CALL_PY_EXACT_ARGS': 161, - 'CALL_PY_GENERAL': 162, - 'CALL_STR_1': 163, - 'CALL_TUPLE_1': 164, - 'CALL_TYPE_1': 165, - 'COMPARE_OP_FLOAT': 166, - 'COMPARE_OP_INT': 167, - 'COMPARE_OP_STR': 168, - 'CONTAINS_OP_DICT': 169, - 'CONTAINS_OP_SET': 170, - 'FOR_ITER_GEN': 171, - 'FOR_ITER_LIST': 172, - 'FOR_ITER_RANGE': 173, - 'FOR_ITER_TUPLE': 174, - 'JUMP_BACKWARD_JIT': 175, - 'JUMP_BACKWARD_NO_JIT': 176, - 'LOAD_ATTR_CLASS': 177, - 'LOAD_ATTR_CLASS_WITH_METACLASS_CHECK': 178, - 'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 179, - 'LOAD_ATTR_INSTANCE_VALUE': 180, - 'LOAD_ATTR_METHOD_LAZY_DICT': 181, - 'LOAD_ATTR_METHOD_NO_DICT': 182, - 'LOAD_ATTR_METHOD_WITH_VALUES': 183, - 'LOAD_ATTR_MODULE': 184, - 'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 185, - 'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 186, - 'LOAD_ATTR_PROPERTY': 187, - 'LOAD_ATTR_SLOT': 188, - 'LOAD_ATTR_WITH_HINT': 189, - 'LOAD_CONST_IMMORTAL': 190, - 'LOAD_CONST_MORTAL': 191, - 'LOAD_GLOBAL_BUILTIN': 192, - 'LOAD_GLOBAL_MODULE': 193, - 'LOAD_SUPER_ATTR_ATTR': 194, - 'LOAD_SUPER_ATTR_METHOD': 195, - 'RESUME_CHECK': 196, - 'SEND_GEN': 197, - 'STORE_ATTR_INSTANCE_VALUE': 198, - 'STORE_ATTR_SLOT': 199, - 'STORE_ATTR_WITH_HINT': 200, - 'STORE_SUBSCR_DICT': 201, - 'STORE_SUBSCR_LIST_INT': 202, - 'TO_BOOL_ALWAYS_TRUE': 203, - 'TO_BOOL_BOOL': 204, - 'TO_BOOL_INT': 205, - 'TO_BOOL_LIST': 206, - 'TO_BOOL_NONE': 207, - 'TO_BOOL_STR': 208, - 'UNPACK_SEQUENCE_LIST': 209, - 'UNPACK_SEQUENCE_TUPLE': 210, - 'UNPACK_SEQUENCE_TWO_TUPLE': 211, -} - -opmap = { - 'CACHE': 0, - 'RESERVED': 17, - 'RESUME': 128, - 'INSTRUMENTED_LINE': 254, - 'ENTER_EXECUTOR': 255, - 'BINARY_SLICE': 1, - 'BUILD_TEMPLATE': 2, - 'CALL_FUNCTION_EX': 4, - 'CHECK_EG_MATCH': 5, - 'CHECK_EXC_MATCH': 6, - 'CLEANUP_THROW': 7, - 'DELETE_SUBSCR': 8, - 'END_FOR': 9, - 'END_SEND': 10, - 'EXIT_INIT_CHECK': 11, - 'FORMAT_SIMPLE': 12, - 'FORMAT_WITH_SPEC': 13, - 'GET_AITER': 14, - 'GET_ANEXT': 15, - 'GET_ITER': 16, - 'GET_LEN': 18, - 'GET_YIELD_FROM_ITER': 19, - 'INTERPRETER_EXIT': 20, - 'LOAD_BUILD_CLASS': 21, - 'LOAD_LOCALS': 22, - 'MAKE_FUNCTION': 23, - 'MATCH_KEYS': 24, - 'MATCH_MAPPING': 25, - 'MATCH_SEQUENCE': 26, - 'NOP': 27, - 'NOT_TAKEN': 28, - 'POP_EXCEPT': 29, - 'POP_ITER': 30, - 'POP_TOP': 31, - 'PUSH_EXC_INFO': 32, - 'PUSH_NULL': 33, - 'RETURN_GENERATOR': 34, - 'RETURN_VALUE': 35, - 'SETUP_ANNOTATIONS': 36, - 'STORE_SLICE': 37, - 'STORE_SUBSCR': 38, - 'TO_BOOL': 39, - 'UNARY_INVERT': 40, - 'UNARY_NEGATIVE': 41, - 'UNARY_NOT': 42, - 'WITH_EXCEPT_START': 43, - 'BINARY_OP': 44, - 'BUILD_INTERPOLATION': 45, - 'BUILD_LIST': 46, - 'BUILD_MAP': 47, - 'BUILD_SET': 48, - 'BUILD_SLICE': 49, - 'BUILD_STRING': 50, - 'BUILD_TUPLE': 51, - 'CALL': 52, - 'CALL_INTRINSIC_1': 53, - 'CALL_INTRINSIC_2': 54, - 'CALL_KW': 55, - 'COMPARE_OP': 56, - 'CONTAINS_OP': 57, - 'CONVERT_VALUE': 58, - 'COPY': 59, - 'COPY_FREE_VARS': 60, - 'DELETE_ATTR': 61, - 'DELETE_DEREF': 62, - 'DELETE_FAST': 63, - 'DELETE_GLOBAL': 64, - 'DELETE_NAME': 65, - 'DICT_MERGE': 66, - 'DICT_UPDATE': 67, - 'END_ASYNC_FOR': 68, - 'EXTENDED_ARG': 69, - 'FOR_ITER': 70, - 'GET_AWAITABLE': 71, - 'IMPORT_FROM': 72, - 'IMPORT_NAME': 73, - 'IS_OP': 74, - 'JUMP_BACKWARD': 75, - 'JUMP_BACKWARD_NO_INTERRUPT': 76, - 'JUMP_FORWARD': 77, - 'LIST_APPEND': 78, - 'LIST_EXTEND': 79, - 'LOAD_ATTR': 80, - 'LOAD_COMMON_CONSTANT': 81, - 'LOAD_CONST': 82, - 'LOAD_DEREF': 83, - 'LOAD_FAST': 84, - 'LOAD_FAST_AND_CLEAR': 85, - 'LOAD_FAST_BORROW': 86, - 'LOAD_FAST_BORROW_LOAD_FAST_BORROW': 87, - 'LOAD_FAST_CHECK': 88, - 'LOAD_FAST_LOAD_FAST': 89, - 'LOAD_FROM_DICT_OR_DEREF': 90, - 'LOAD_FROM_DICT_OR_GLOBALS': 91, - 'LOAD_GLOBAL': 92, - 'LOAD_NAME': 93, - 'LOAD_SMALL_INT': 94, - 'LOAD_SPECIAL': 95, - 'LOAD_SUPER_ATTR': 96, - 'MAKE_CELL': 97, - 'MAP_ADD': 98, - 'MATCH_CLASS': 99, - 'POP_JUMP_IF_FALSE': 100, - 'POP_JUMP_IF_NONE': 101, - 'POP_JUMP_IF_NOT_NONE': 102, - 'POP_JUMP_IF_TRUE': 103, - 'RAISE_VARARGS': 104, - 'RERAISE': 105, - 'SEND': 106, - 'SET_ADD': 107, - 'SET_FUNCTION_ATTRIBUTE': 108, - 'SET_UPDATE': 109, - 'STORE_ATTR': 110, - 'STORE_DEREF': 111, - 'STORE_FAST': 112, - 'STORE_FAST_LOAD_FAST': 113, - 'STORE_FAST_STORE_FAST': 114, - 'STORE_GLOBAL': 115, - 'STORE_NAME': 116, - 'SWAP': 117, - 'UNPACK_EX': 118, - 'UNPACK_SEQUENCE': 119, - 'YIELD_VALUE': 120, - 'INSTRUMENTED_END_FOR': 234, - 'INSTRUMENTED_POP_ITER': 235, - 'INSTRUMENTED_END_SEND': 236, - 'INSTRUMENTED_FOR_ITER': 237, - 'INSTRUMENTED_INSTRUCTION': 238, - 'INSTRUMENTED_JUMP_FORWARD': 239, - 'INSTRUMENTED_NOT_TAKEN': 240, - 'INSTRUMENTED_POP_JUMP_IF_TRUE': 241, - 'INSTRUMENTED_POP_JUMP_IF_FALSE': 242, - 'INSTRUMENTED_POP_JUMP_IF_NONE': 243, - 'INSTRUMENTED_POP_JUMP_IF_NOT_NONE': 244, - 'INSTRUMENTED_RESUME': 245, - 'INSTRUMENTED_RETURN_VALUE': 246, - 'INSTRUMENTED_YIELD_VALUE': 247, - 'INSTRUMENTED_END_ASYNC_FOR': 248, - 'INSTRUMENTED_LOAD_SUPER_ATTR': 249, - 'INSTRUMENTED_CALL': 250, - 'INSTRUMENTED_CALL_KW': 251, - 'INSTRUMENTED_CALL_FUNCTION_EX': 252, - 'INSTRUMENTED_JUMP_BACKWARD': 253, - 'ANNOTATIONS_PLACEHOLDER': 256, - 'JUMP': 257, - 'JUMP_IF_FALSE': 258, - 'JUMP_IF_TRUE': 259, - 'JUMP_NO_INTERRUPT': 260, - 'LOAD_CLOSURE': 261, - 'POP_BLOCK': 262, - 'SETUP_CLEANUP': 263, - 'SETUP_FINALLY': 264, - 'SETUP_WITH': 265, - 'STORE_FAST_MAYBE_NULL': 266, -} - -HAVE_ARGUMENT = 43 -MIN_INSTRUMENTED_OPCODE = 234 diff --git a/Python314_4_x86_Template/Lib/_osx_support.py b/Python314_4_x86_Template/Lib/_osx_support.py deleted file mode 100644 index 0cb064fcd..000000000 --- a/Python314_4_x86_Template/Lib/_osx_support.py +++ /dev/null @@ -1,579 +0,0 @@ -"""Shared OS X support functions.""" - -import os -import re -import sys - -__all__ = [ - 'compiler_fixup', - 'customize_config_vars', - 'customize_compiler', - 'get_platform_osx', -] - -# configuration variables that may contain universal build flags, -# like "-arch" or "-isdkroot", that may need customization for -# the user environment -_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS', - 'BLDSHARED', 'LDSHARED', 'CC', 'CXX', - 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS', - 'PY_CORE_CFLAGS', 'PY_CORE_LDFLAGS') - -# configuration variables that may contain compiler calls -_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'CC', 'CXX') - -# prefix added to original configuration variable names -_INITPRE = '_OSX_SUPPORT_INITIAL_' - - -def _find_executable(executable, path=None): - """Tries to find 'executable' in the directories listed in 'path'. - - A string listing directories separated by 'os.pathsep'; defaults to - os.environ['PATH']. Returns the complete filename or None if not found. - """ - if path is None: - path = os.environ['PATH'] - - paths = path.split(os.pathsep) - base, ext = os.path.splitext(executable) - - if (sys.platform == 'win32') and (ext != '.exe'): - executable = executable + '.exe' - - if not os.path.isfile(executable): - for p in paths: - f = os.path.join(p, executable) - if os.path.isfile(f): - # the file exists, we have a shot at spawn working - return f - return None - else: - return executable - - -def _read_output(commandstring, capture_stderr=False): - """Output from successful command execution or None""" - # Similar to os.popen(commandstring, "r").read(), - # but without actually using os.popen because that - # function is not usable during python bootstrap. - # tempfile is also not available then. - import contextlib - try: - import tempfile - fp = tempfile.NamedTemporaryFile() - except ImportError: - fp = open("/tmp/_osx_support.%s"%( - os.getpid(),), "w+b") - - with contextlib.closing(fp) as fp: - if capture_stderr: - cmd = "%s >'%s' 2>&1" % (commandstring, fp.name) - else: - cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name) - return fp.read().decode('utf-8').strip() if not os.system(cmd) else None - - -def _find_build_tool(toolname): - """Find a build tool on current path or using xcrun""" - return (_find_executable(toolname) - or _read_output("/usr/bin/xcrun -find %s" % (toolname,)) - or '' - ) - -_SYSTEM_VERSION = None - -def _get_system_version(): - """Return the OS X system version as a string""" - # Reading this plist is a documented way to get the system - # version (see the documentation for the Gestalt Manager) - # We avoid using platform.mac_ver to avoid possible bootstrap issues during - # the build of Python itself (distutils is used to build standard library - # extensions). - - global _SYSTEM_VERSION - - if _SYSTEM_VERSION is None: - _SYSTEM_VERSION = '' - try: - f = open('/System/Library/CoreServices/SystemVersion.plist', encoding="utf-8") - except OSError: - # We're on a plain darwin box, fall back to the default - # behaviour. - pass - else: - try: - m = re.search(r'<key>ProductUserVisibleVersion</key>\s*' - r'<string>(.*?)</string>', f.read()) - finally: - f.close() - if m is not None: - _SYSTEM_VERSION = '.'.join(m.group(1).split('.')[:2]) - # else: fall back to the default behaviour - - return _SYSTEM_VERSION - -_SYSTEM_VERSION_TUPLE = None -def _get_system_version_tuple(): - """ - Return the macOS system version as a tuple - - The return value is safe to use to compare - two version numbers. - """ - global _SYSTEM_VERSION_TUPLE - if _SYSTEM_VERSION_TUPLE is None: - osx_version = _get_system_version() - if osx_version: - try: - _SYSTEM_VERSION_TUPLE = tuple(int(i) for i in osx_version.split('.')) - except ValueError: - _SYSTEM_VERSION_TUPLE = () - - return _SYSTEM_VERSION_TUPLE - - -def _remove_original_values(_config_vars): - """Remove original unmodified values for testing""" - # This is needed for higher-level cross-platform tests of get_platform. - for k in list(_config_vars): - if k.startswith(_INITPRE): - del _config_vars[k] - -def _save_modified_value(_config_vars, cv, newvalue): - """Save modified and original unmodified value of configuration var""" - - oldvalue = _config_vars.get(cv, '') - if (oldvalue != newvalue) and (_INITPRE + cv not in _config_vars): - _config_vars[_INITPRE + cv] = oldvalue - _config_vars[cv] = newvalue - - -_cache_default_sysroot = None -def _default_sysroot(cc): - """ Returns the root of the default SDK for this system, or '/' """ - global _cache_default_sysroot - - if _cache_default_sysroot is not None: - return _cache_default_sysroot - - contents = _read_output('%s -c -E -v - </dev/null' % (cc,), True) - in_incdirs = False - for line in contents.splitlines(): - if line.startswith("#include <...>"): - in_incdirs = True - elif line.startswith("End of search list"): - in_incdirs = False - elif in_incdirs: - line = line.strip() - if line == '/usr/include': - _cache_default_sysroot = '/' - elif line.endswith(".sdk/usr/include"): - _cache_default_sysroot = line[:-12] - if _cache_default_sysroot is None: - _cache_default_sysroot = '/' - - return _cache_default_sysroot - -def _supports_universal_builds(): - """Returns True if universal builds are supported on this system""" - # As an approximation, we assume that if we are running on 10.4 or above, - # then we are running with an Xcode environment that supports universal - # builds, in particular -isysroot and -arch arguments to the compiler. This - # is in support of allowing 10.4 universal builds to run on 10.3.x systems. - - osx_version = _get_system_version_tuple() - return bool(osx_version >= (10, 4)) if osx_version else False - -def _supports_arm64_builds(): - """Returns True if arm64 builds are supported on this system""" - # There are two sets of systems supporting macOS/arm64 builds: - # 1. macOS 11 and later, unconditionally - # 2. macOS 10.15 with Xcode 12.2 or later - # For now the second category is ignored. - osx_version = _get_system_version_tuple() - return osx_version >= (11, 0) if osx_version else False - - -def _find_appropriate_compiler(_config_vars): - """Find appropriate C compiler for extension module builds""" - - # Issue #13590: - # The OSX location for the compiler varies between OSX - # (or rather Xcode) releases. With older releases (up-to 10.5) - # the compiler is in /usr/bin, with newer releases the compiler - # can only be found inside Xcode.app if the "Command Line Tools" - # are not installed. - # - # Furthermore, the compiler that can be used varies between - # Xcode releases. Up to Xcode 4 it was possible to use 'gcc-4.2' - # as the compiler, after that 'clang' should be used because - # gcc-4.2 is either not present, or a copy of 'llvm-gcc' that - # miscompiles Python. - - # skip checks if the compiler was overridden with a CC env variable - if 'CC' in os.environ: - return _config_vars - - # The CC config var might contain additional arguments. - # Ignore them while searching. - cc = oldcc = _config_vars['CC'].split()[0] - if not _find_executable(cc): - # Compiler is not found on the shell search PATH. - # Now search for clang, first on PATH (if the Command LIne - # Tools have been installed in / or if the user has provided - # another location via CC). If not found, try using xcrun - # to find an uninstalled clang (within a selected Xcode). - - # NOTE: Cannot use subprocess here because of bootstrap - # issues when building Python itself (and os.popen is - # implemented on top of subprocess and is therefore not - # usable as well) - - cc = _find_build_tool('clang') - - elif os.path.basename(cc).startswith('gcc'): - # Compiler is GCC, check if it is LLVM-GCC - data = _read_output("'%s' --version" - % (cc.replace("'", "'\"'\"'"),)) - if data and 'llvm-gcc' in data: - # Found LLVM-GCC, fall back to clang - cc = _find_build_tool('clang') - - if not cc: - raise SystemError( - "Cannot locate working compiler") - - if cc != oldcc: - # Found a replacement compiler. - # Modify config vars using new compiler, if not already explicitly - # overridden by an env variable, preserving additional arguments. - for cv in _COMPILER_CONFIG_VARS: - if cv in _config_vars and cv not in os.environ: - cv_split = _config_vars[cv].split() - cv_split[0] = cc if cv != 'CXX' else cc + '++' - _save_modified_value(_config_vars, cv, ' '.join(cv_split)) - - return _config_vars - - -def _remove_universal_flags(_config_vars): - """Remove all universal build arguments from config vars""" - - for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overridden by env var - if cv in _config_vars and cv not in os.environ: - flags = _config_vars[cv] - flags = re.sub(r'-arch\s+\w+\s', ' ', flags, flags=re.ASCII) - flags = re.sub(r'-isysroot\s*\S+', ' ', flags) - _save_modified_value(_config_vars, cv, flags) - - return _config_vars - - -def _remove_unsupported_archs(_config_vars): - """Remove any unsupported archs from config vars""" - # Different Xcode releases support different sets for '-arch' - # flags. In particular, Xcode 4.x no longer supports the - # PPC architectures. - # - # This code automatically removes '-arch ppc' and '-arch ppc64' - # when these are not supported. That makes it possible to - # build extensions on OSX 10.7 and later with the prebuilt - # 32-bit installer on the python.org website. - - # skip checks if the compiler was overridden with a CC env variable - if 'CC' in os.environ: - return _config_vars - - if re.search(r'-arch\s+ppc', _config_vars['CFLAGS']) is not None: - # NOTE: Cannot use subprocess here because of bootstrap - # issues when building Python itself - status = os.system( - """echo 'int main{};' | """ - """'%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/null""" - %(_config_vars['CC'].replace("'", "'\"'\"'"),)) - if status: - # The compile failed for some reason. Because of differences - # across Xcode and compiler versions, there is no reliable way - # to be sure why it failed. Assume here it was due to lack of - # PPC support and remove the related '-arch' flags from each - # config variables not explicitly overridden by an environment - # variable. If the error was for some other reason, we hope the - # failure will show up again when trying to compile an extension - # module. - for cv in _UNIVERSAL_CONFIG_VARS: - if cv in _config_vars and cv not in os.environ: - flags = _config_vars[cv] - flags = re.sub(r'-arch\s+ppc\w*\s', ' ', flags) - _save_modified_value(_config_vars, cv, flags) - - return _config_vars - - -def _override_all_archs(_config_vars): - """Allow override of all archs with ARCHFLAGS env var""" - # NOTE: This name was introduced by Apple in OSX 10.5 and - # is used by several scripting languages distributed with - # that OS release. - if 'ARCHFLAGS' in os.environ: - arch = os.environ['ARCHFLAGS'] - for cv in _UNIVERSAL_CONFIG_VARS: - if cv in _config_vars and '-arch' in _config_vars[cv]: - flags = _config_vars[cv] - flags = re.sub(r'-arch\s+\w+\s', ' ', flags) - flags = flags + ' ' + arch - _save_modified_value(_config_vars, cv, flags) - - return _config_vars - - -def _check_for_unavailable_sdk(_config_vars): - """Remove references to any SDKs not available""" - # If we're on OSX 10.5 or later and the user tries to - # compile an extension using an SDK that is not present - # on the current machine it is better to not use an SDK - # than to fail. This is particularly important with - # the standalone Command Line Tools alternative to a - # full-blown Xcode install since the CLT packages do not - # provide SDKs. If the SDK is not present, it is assumed - # that the header files and dev libs have been installed - # to /usr and /System/Library by either a standalone CLT - # package or the CLT component within Xcode. - cflags = _config_vars.get('CFLAGS', '') - m = re.search(r'-isysroot\s*(\S+)', cflags) - if m is not None: - sdk = m.group(1) - if not os.path.exists(sdk): - for cv in _UNIVERSAL_CONFIG_VARS: - # Do not alter a config var explicitly overridden by env var - if cv in _config_vars and cv not in os.environ: - flags = _config_vars[cv] - flags = re.sub(r'-isysroot\s*\S+(?:\s|$)', ' ', flags) - _save_modified_value(_config_vars, cv, flags) - - return _config_vars - - -def compiler_fixup(compiler_so, cc_args): - """ - This function will strip '-isysroot PATH' and '-arch ARCH' from the - compile flags if the user has specified one them in extra_compile_flags. - - This is needed because '-arch ARCH' adds another architecture to the - build, without a way to remove an architecture. Furthermore GCC will - barf if multiple '-isysroot' arguments are present. - """ - stripArch = stripSysroot = False - - compiler_so = list(compiler_so) - - if not _supports_universal_builds(): - # OSX before 10.4.0, these don't support -arch and -isysroot at - # all. - stripArch = stripSysroot = True - else: - stripArch = '-arch' in cc_args - stripSysroot = any(arg for arg in cc_args if arg.startswith('-isysroot')) - - if stripArch or 'ARCHFLAGS' in os.environ: - while True: - try: - index = compiler_so.index('-arch') - # Strip this argument and the next one: - del compiler_so[index:index+2] - except ValueError: - break - - elif not _supports_arm64_builds(): - # Look for "-arch arm64" and drop that - for idx in reversed(range(len(compiler_so))): - if compiler_so[idx] == '-arch' and compiler_so[idx+1] == "arm64": - del compiler_so[idx:idx+2] - - if 'ARCHFLAGS' in os.environ and not stripArch: - # User specified different -arch flags in the environ, - # see also distutils.sysconfig - compiler_so = compiler_so + os.environ['ARCHFLAGS'].split() - - if stripSysroot: - while True: - indices = [i for i,x in enumerate(compiler_so) if x.startswith('-isysroot')] - if not indices: - break - index = indices[0] - if compiler_so[index] == '-isysroot': - # Strip this argument and the next one: - del compiler_so[index:index+2] - else: - # It's '-isysroot/some/path' in one arg - del compiler_so[index:index+1] - - # Check if the SDK that is used during compilation actually exists, - # the universal build requires the usage of a universal SDK and not all - # users have that installed by default. - sysroot = None - argvar = cc_args - indices = [i for i,x in enumerate(cc_args) if x.startswith('-isysroot')] - if not indices: - argvar = compiler_so - indices = [i for i,x in enumerate(compiler_so) if x.startswith('-isysroot')] - - for idx in indices: - if argvar[idx] == '-isysroot': - sysroot = argvar[idx+1] - break - else: - sysroot = argvar[idx][len('-isysroot'):] - break - - if sysroot and not os.path.isdir(sysroot): - sys.stderr.write(f"Compiling with an SDK that doesn't seem to exist: {sysroot}\n") - sys.stderr.write("Please check your Xcode installation\n") - sys.stderr.flush() - - return compiler_so - - -def customize_config_vars(_config_vars): - """Customize Python build configuration variables. - - Called internally from sysconfig with a mutable mapping - containing name/value pairs parsed from the configured - makefile used to build this interpreter. Returns - the mapping updated as needed to reflect the environment - in which the interpreter is running; in the case of - a Python from a binary installer, the installed - environment may be very different from the build - environment, i.e. different OS levels, different - built tools, different available CPU architectures. - - This customization is performed whenever - distutils.sysconfig.get_config_vars() is first - called. It may be used in environments where no - compilers are present, i.e. when installing pure - Python dists. Customization of compiler paths - and detection of unavailable archs is deferred - until the first extension module build is - requested (in distutils.sysconfig.customize_compiler). - - Currently called from distutils.sysconfig - """ - - if not _supports_universal_builds(): - # On Mac OS X before 10.4, check if -arch and -isysroot - # are in CFLAGS or LDFLAGS and remove them if they are. - # This is needed when building extensions on a 10.3 system - # using a universal build of python. - _remove_universal_flags(_config_vars) - - # Allow user to override all archs with ARCHFLAGS env var - _override_all_archs(_config_vars) - - # Remove references to sdks that are not found - _check_for_unavailable_sdk(_config_vars) - - return _config_vars - - -def customize_compiler(_config_vars): - """Customize compiler path and configuration variables. - - This customization is performed when the first - extension module build is requested - in distutils.sysconfig.customize_compiler. - """ - - # Find a compiler to use for extension module builds - _find_appropriate_compiler(_config_vars) - - # Remove ppc arch flags if not supported here - _remove_unsupported_archs(_config_vars) - - # Allow user to override all archs with ARCHFLAGS env var - _override_all_archs(_config_vars) - - return _config_vars - - -def get_platform_osx(_config_vars, osname, release, machine): - """Filter values for get_platform()""" - # called from get_platform() in sysconfig and distutils.util - # - # For our purposes, we'll assume that the system version from - # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set - # to. This makes the compatibility story a bit more sane because the - # machine is going to compile and link as if it were - # MACOSX_DEPLOYMENT_TARGET. - - macver = _config_vars.get('MACOSX_DEPLOYMENT_TARGET', '') - if macver and '.' not in macver: - # Ensure that the version includes at least a major - # and minor version, even if MACOSX_DEPLOYMENT_TARGET - # is set to a single-label version like "14". - macver += '.0' - macrelease = _get_system_version() or macver - macver = macver or macrelease - - if macver: - release = macver - osname = "macosx" - - # Use the original CFLAGS value, if available, so that we - # return the same machine type for the platform string. - # Otherwise, distutils may consider this a cross-compiling - # case and disallow installs. - cflags = _config_vars.get(_INITPRE+'CFLAGS', - _config_vars.get('CFLAGS', '')) - if macrelease: - try: - macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) - except ValueError: - macrelease = (10, 3) - else: - # assume no universal support - macrelease = (10, 3) - - if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): - # The universal build will build fat binaries, but not on - # systems before 10.4 - - machine = 'fat' - - archs = re.findall(r'-arch\s+(\S+)', cflags) - archs = tuple(sorted(set(archs))) - - if len(archs) == 1: - machine = archs[0] - elif archs == ('arm64', 'x86_64'): - machine = 'universal2' - elif archs == ('i386', 'ppc'): - machine = 'fat' - elif archs == ('i386', 'x86_64'): - machine = 'intel' - elif archs == ('i386', 'ppc', 'x86_64'): - machine = 'fat3' - elif archs == ('ppc64', 'x86_64'): - machine = 'fat64' - elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): - machine = 'universal' - else: - raise ValueError( - "Don't know machine value for archs=%r" % (archs,)) - - elif machine == 'i386': - # On OSX the machine type returned by uname is always the - # 32-bit variant, even if the executable architecture is - # the 64-bit variant - if sys.maxsize >= 2**32: - machine = 'x86_64' - - elif machine in ('PowerPC', 'Power_Macintosh'): - # Pick a sane name for the PPC architecture. - # See 'i386' case - if sys.maxsize >= 2**32: - machine = 'ppc64' - else: - machine = 'ppc' - - return (osname, release, machine) diff --git a/Python314_4_x86_Template/Lib/_py_abc.py b/Python314_4_x86_Template/Lib/_py_abc.py deleted file mode 100644 index c870ae904..000000000 --- a/Python314_4_x86_Template/Lib/_py_abc.py +++ /dev/null @@ -1,147 +0,0 @@ -from _weakrefset import WeakSet - - -def get_cache_token(): - """Returns the current ABC cache token. - - The token is an opaque object (supporting equality testing) identifying the - current version of the ABC cache for virtual subclasses. The token changes - with every call to ``register()`` on any ABC. - """ - return ABCMeta._abc_invalidation_counter - - -class ABCMeta(type): - """Metaclass for defining Abstract Base Classes (ABCs). - - Use this metaclass to create an ABC. An ABC can be subclassed - directly, and then acts as a mix-in class. You can also register - unrelated concrete classes (even built-in classes) and unrelated - ABCs as 'virtual subclasses' -- these and their descendants will - be considered subclasses of the registering ABC by the built-in - issubclass() function, but the registering ABC won't show up in - their MRO (Method Resolution Order) nor will method - implementations defined by the registering ABC be callable (not - even via super()). - """ - - # A global counter that is incremented each time a class is - # registered as a virtual subclass of anything. It forces the - # negative cache to be cleared before its next use. - # Note: this counter is private. Use `abc.get_cache_token()` for - # external code. - _abc_invalidation_counter = 0 - - def __new__(mcls, name, bases, namespace, /, **kwargs): - cls = super().__new__(mcls, name, bases, namespace, **kwargs) - # Compute set of abstract method names - abstracts = {name - for name, value in namespace.items() - if getattr(value, "__isabstractmethod__", False)} - for base in bases: - for name in getattr(base, "__abstractmethods__", set()): - value = getattr(cls, name, None) - if getattr(value, "__isabstractmethod__", False): - abstracts.add(name) - cls.__abstractmethods__ = frozenset(abstracts) - # Set up inheritance registry - cls._abc_registry = WeakSet() - cls._abc_cache = WeakSet() - cls._abc_negative_cache = WeakSet() - cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter - return cls - - def register(cls, subclass): - """Register a virtual subclass of an ABC. - - Returns the subclass, to allow usage as a class decorator. - """ - if not isinstance(subclass, type): - raise TypeError("Can only register classes") - if issubclass(subclass, cls): - return subclass # Already a subclass - # Subtle: test for cycles *after* testing for "already a subclass"; - # this means we allow X.register(X) and interpret it as a no-op. - if issubclass(cls, subclass): - # This would create a cycle, which is bad for the algorithm below - raise RuntimeError("Refusing to create an inheritance cycle") - cls._abc_registry.add(subclass) - ABCMeta._abc_invalidation_counter += 1 # Invalidate negative cache - return subclass - - def _dump_registry(cls, file=None): - """Debug helper to print the ABC registry.""" - print(f"Class: {cls.__module__}.{cls.__qualname__}", file=file) - print(f"Inv. counter: {get_cache_token()}", file=file) - for name in cls.__dict__: - if name.startswith("_abc_"): - value = getattr(cls, name) - if isinstance(value, WeakSet): - value = set(value) - print(f"{name}: {value!r}", file=file) - - def _abc_registry_clear(cls): - """Clear the registry (for debugging or testing).""" - cls._abc_registry.clear() - - def _abc_caches_clear(cls): - """Clear the caches (for debugging or testing).""" - cls._abc_cache.clear() - cls._abc_negative_cache.clear() - - def __instancecheck__(cls, instance): - """Override for isinstance(instance, cls).""" - # Inline the cache checking - subclass = instance.__class__ - if subclass in cls._abc_cache: - return True - subtype = type(instance) - if subtype is subclass: - if (cls._abc_negative_cache_version == - ABCMeta._abc_invalidation_counter and - subclass in cls._abc_negative_cache): - return False - # Fall back to the subclass check. - return cls.__subclasscheck__(subclass) - return any(cls.__subclasscheck__(c) for c in (subclass, subtype)) - - def __subclasscheck__(cls, subclass): - """Override for issubclass(subclass, cls).""" - if not isinstance(subclass, type): - raise TypeError('issubclass() arg 1 must be a class') - # Check cache - if subclass in cls._abc_cache: - return True - # Check negative cache; may have to invalidate - if cls._abc_negative_cache_version < ABCMeta._abc_invalidation_counter: - # Invalidate the negative cache - cls._abc_negative_cache = WeakSet() - cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter - elif subclass in cls._abc_negative_cache: - return False - # Check the subclass hook - ok = cls.__subclasshook__(subclass) - if ok is not NotImplemented: - assert isinstance(ok, bool) - if ok: - cls._abc_cache.add(subclass) - else: - cls._abc_negative_cache.add(subclass) - return ok - # Check if it's a direct subclass - if cls in getattr(subclass, '__mro__', ()): - cls._abc_cache.add(subclass) - return True - # Check if it's a subclass of a registered class (recursive) - for rcls in cls._abc_registry: - if issubclass(subclass, rcls): - cls._abc_cache.add(subclass) - return True - # Check if it's a subclass of a subclass (recursive) - for scls in cls.__subclasses__(): - if issubclass(subclass, scls): - cls._abc_cache.add(subclass) - return True - # No dice; update negative cache - cls._abc_negative_cache.add(subclass) - return False diff --git a/Python314_4_x86_Template/Lib/_py_warnings.py b/Python314_4_x86_Template/Lib/_py_warnings.py deleted file mode 100644 index 36513ba2e..000000000 --- a/Python314_4_x86_Template/Lib/_py_warnings.py +++ /dev/null @@ -1,869 +0,0 @@ -"""Python part of the warnings subsystem.""" - -import sys -import _contextvars -import _thread - - -__all__ = ["warn", "warn_explicit", "showwarning", - "formatwarning", "filterwarnings", "simplefilter", - "resetwarnings", "catch_warnings", "deprecated"] - - -# Normally '_wm' is sys.modules['warnings'] but for unit tests it can be -# a different module. User code is allowed to reassign global attributes -# of the 'warnings' module, commonly 'filters' or 'showwarning'. So we -# need to lookup these global attributes dynamically on the '_wm' object, -# rather than binding them earlier. The code in this module consistently uses -# '_wm.<something>' rather than using the globals of this module. If the -# '_warnings' C extension is in use, some globals are replaced by functions -# and variables defined in that extension. -_wm = None - - -def _set_module(module): - global _wm - _wm = module - - -# filters contains a sequence of filter 5-tuples -# The components of the 5-tuple are: -# - an action: error, ignore, always, all, default, module, or once -# - a compiled regex that must match the warning message -# - a class representing the warning category -# - a compiled regex that must match the module that is being warned -# - a line number for the line being warning, or 0 to mean any line -# If either if the compiled regexs are None, match anything. -filters = [] - - -defaultaction = "default" -onceregistry = {} -_lock = _thread.RLock() -_filters_version = 1 - - -# If true, catch_warnings() will use a context var to hold the modified -# filters list. Otherwise, catch_warnings() will operate on the 'filters' -# global of the warnings module. -_use_context = sys.flags.context_aware_warnings - - -class _Context: - def __init__(self, filters): - self._filters = filters - self.log = None # if set to a list, logging is enabled - - def copy(self): - context = _Context(self._filters[:]) - if self.log is not None: - context.log = self.log - return context - - def _record_warning(self, msg): - self.log.append(msg) - - -class _GlobalContext(_Context): - def __init__(self): - self.log = None - - @property - def _filters(self): - # Since there is quite a lot of code that assigns to - # warnings.filters, this needs to return the current value of - # the module global. - try: - return _wm.filters - except AttributeError: - # 'filters' global was deleted. Do we need to actually handle this case? - return [] - - -_global_context = _GlobalContext() - - -_warnings_context = _contextvars.ContextVar('warnings_context') - - -def _get_context(): - if not _use_context: - return _global_context - try: - return _wm._warnings_context.get() - except LookupError: - return _global_context - - -def _set_context(context): - assert _use_context - _wm._warnings_context.set(context) - - -def _new_context(): - assert _use_context - old_context = _wm._get_context() - new_context = old_context.copy() - _wm._set_context(new_context) - return old_context, new_context - - -def _get_filters(): - """Return the current list of filters. This is a non-public API used by - module functions and by the unit tests.""" - return _wm._get_context()._filters - - -def _filters_mutated_lock_held(): - _wm._filters_version += 1 - - -def showwarning(message, category, filename, lineno, file=None, line=None): - """Hook to write a warning to a file; replace if you like.""" - msg = _wm.WarningMessage(message, category, filename, lineno, file, line) - _wm._showwarnmsg_impl(msg) - - -def formatwarning(message, category, filename, lineno, line=None): - """Function to format a warning the standard way.""" - msg = _wm.WarningMessage(message, category, filename, lineno, None, line) - return _wm._formatwarnmsg_impl(msg) - - -def _showwarnmsg_impl(msg): - context = _wm._get_context() - if context.log is not None: - context._record_warning(msg) - return - file = msg.file - if file is None: - file = sys.stderr - if file is None: - # sys.stderr is None when run with pythonw.exe: - # warnings get lost - return - text = _wm._formatwarnmsg(msg) - try: - file.write(text) - except OSError: - # the file (probably stderr) is invalid - this warning gets lost. - pass - - -def _formatwarnmsg_impl(msg): - category = msg.category.__name__ - s = f"{msg.filename}:{msg.lineno}: {category}: {msg.message}\n" - - if msg.line is None: - try: - import linecache - line = linecache.getline(msg.filename, msg.lineno) - except Exception: - # When a warning is logged during Python shutdown, linecache - # and the import machinery don't work anymore - line = None - linecache = None - else: - line = msg.line - if line: - line = line.strip() - s += " %s\n" % line - - if msg.source is not None: - try: - import tracemalloc - # Logging a warning should not raise a new exception: - # catch Exception, not only ImportError and RecursionError. - except Exception: - # don't suggest to enable tracemalloc if it's not available - suggest_tracemalloc = False - tb = None - else: - try: - suggest_tracemalloc = not tracemalloc.is_tracing() - tb = tracemalloc.get_object_traceback(msg.source) - except Exception: - # When a warning is logged during Python shutdown, tracemalloc - # and the import machinery don't work anymore - suggest_tracemalloc = False - tb = None - - if tb is not None: - s += 'Object allocated at (most recent call last):\n' - for frame in tb: - s += (' File "%s", lineno %s\n' - % (frame.filename, frame.lineno)) - - try: - if linecache is not None: - line = linecache.getline(frame.filename, frame.lineno) - else: - line = None - except Exception: - line = None - if line: - line = line.strip() - s += ' %s\n' % line - elif suggest_tracemalloc: - s += (f'{category}: Enable tracemalloc to get the object ' - f'allocation traceback\n') - return s - - -# Keep a reference to check if the function was replaced -_showwarning_orig = showwarning - - -def _showwarnmsg(msg): - """Hook to write a warning to a file; replace if you like.""" - try: - sw = _wm.showwarning - except AttributeError: - pass - else: - if sw is not _showwarning_orig: - # warnings.showwarning() was replaced - if not callable(sw): - raise TypeError("warnings.showwarning() must be set to a " - "function or method") - - sw(msg.message, msg.category, msg.filename, msg.lineno, - msg.file, msg.line) - return - _wm._showwarnmsg_impl(msg) - - -# Keep a reference to check if the function was replaced -_formatwarning_orig = formatwarning - - -def _formatwarnmsg(msg): - """Function to format a warning the standard way.""" - try: - fw = _wm.formatwarning - except AttributeError: - pass - else: - if fw is not _formatwarning_orig: - # warnings.formatwarning() was replaced - return fw(msg.message, msg.category, - msg.filename, msg.lineno, msg.line) - return _wm._formatwarnmsg_impl(msg) - - -def filterwarnings(action, message="", category=Warning, module="", lineno=0, - append=False): - """Insert an entry into the list of warnings filters (at the front). - - 'action' -- one of "error", "ignore", "always", "all", "default", "module", - or "once" - 'message' -- a regex that the warning message must match - 'category' -- a class that the warning must be a subclass of - 'module' -- a regex that the module name must match - 'lineno' -- an integer line number, 0 matches all warnings - 'append' -- if true, append to the list of filters - """ - if action not in {"error", "ignore", "always", "all", "default", "module", "once"}: - raise ValueError(f"invalid action: {action!r}") - if not isinstance(message, str): - raise TypeError("message must be a string") - if not isinstance(category, type) or not issubclass(category, Warning): - raise TypeError("category must be a Warning subclass") - if not isinstance(module, str): - raise TypeError("module must be a string") - if not isinstance(lineno, int): - raise TypeError("lineno must be an int") - if lineno < 0: - raise ValueError("lineno must be an int >= 0") - - if message or module: - import re - - if message: - message = re.compile(message, re.I) - else: - message = None - if module: - module = re.compile(module) - else: - module = None - - _wm._add_filter(action, message, category, module, lineno, append=append) - - -def simplefilter(action, category=Warning, lineno=0, append=False): - """Insert a simple entry into the list of warnings filters (at the front). - - A simple filter matches all modules and messages. - 'action' -- one of "error", "ignore", "always", "all", "default", "module", - or "once" - 'category' -- a class that the warning must be a subclass of - 'lineno' -- an integer line number, 0 matches all warnings - 'append' -- if true, append to the list of filters - """ - if action not in {"error", "ignore", "always", "all", "default", "module", "once"}: - raise ValueError(f"invalid action: {action!r}") - if not isinstance(lineno, int): - raise TypeError("lineno must be an int") - if lineno < 0: - raise ValueError("lineno must be an int >= 0") - _wm._add_filter(action, None, category, None, lineno, append=append) - - -def _filters_mutated(): - # Even though this function is not part of the public API, it's used by - # a fair amount of user code. - with _wm._lock: - _wm._filters_mutated_lock_held() - - -def _add_filter(*item, append): - with _wm._lock: - filters = _wm._get_filters() - if not append: - # Remove possible duplicate filters, so new one will be placed - # in correct place. If append=True and duplicate exists, do nothing. - try: - filters.remove(item) - except ValueError: - pass - filters.insert(0, item) - else: - if item not in filters: - filters.append(item) - _wm._filters_mutated_lock_held() - - -def resetwarnings(): - """Clear the list of warning filters, so that no filters are active.""" - with _wm._lock: - del _wm._get_filters()[:] - _wm._filters_mutated_lock_held() - - -class _OptionError(Exception): - """Exception used by option processing helpers.""" - pass - - -# Helper to process -W options passed via sys.warnoptions -def _processoptions(args): - for arg in args: - try: - _wm._setoption(arg) - except _wm._OptionError as msg: - print("Invalid -W option ignored:", msg, file=sys.stderr) - - -# Helper for _processoptions() -def _setoption(arg): - parts = arg.split(':') - if len(parts) > 5: - raise _wm._OptionError("too many fields (max 5): %r" % (arg,)) - while len(parts) < 5: - parts.append('') - action, message, category, module, lineno = [s.strip() - for s in parts] - action = _wm._getaction(action) - category = _wm._getcategory(category) - if message or module: - import re - if message: - message = re.escape(message) - if module: - module = re.escape(module) + r'\z' - if lineno: - try: - lineno = int(lineno) - if lineno < 0: - raise ValueError - except (ValueError, OverflowError): - raise _wm._OptionError("invalid lineno %r" % (lineno,)) from None - else: - lineno = 0 - _wm.filterwarnings(action, message, category, module, lineno) - - -# Helper for _setoption() -def _getaction(action): - if not action: - return "default" - for a in ('default', 'always', 'all', 'ignore', 'module', 'once', 'error'): - if a.startswith(action): - return a - raise _wm._OptionError("invalid action: %r" % (action,)) - - -# Helper for _setoption() -def _getcategory(category): - if not category: - return Warning - if '.' not in category: - import builtins as m - klass = category - else: - module, _, klass = category.rpartition('.') - try: - m = __import__(module, None, None, [klass]) - except ImportError: - raise _wm._OptionError("invalid module name: %r" % (module,)) from None - try: - cat = getattr(m, klass) - except AttributeError: - raise _wm._OptionError("unknown warning category: %r" % (category,)) from None - if not issubclass(cat, Warning): - raise _wm._OptionError("invalid warning category: %r" % (category,)) - return cat - - -def _is_internal_filename(filename): - return 'importlib' in filename and '_bootstrap' in filename - - -def _is_filename_to_skip(filename, skip_file_prefixes): - return any(filename.startswith(prefix) for prefix in skip_file_prefixes) - - -def _is_internal_frame(frame): - """Signal whether the frame is an internal CPython implementation detail.""" - return _is_internal_filename(frame.f_code.co_filename) - - -def _next_external_frame(frame, skip_file_prefixes): - """Find the next frame that doesn't involve Python or user internals.""" - frame = frame.f_back - while frame is not None and ( - _is_internal_filename(filename := frame.f_code.co_filename) or - _is_filename_to_skip(filename, skip_file_prefixes)): - frame = frame.f_back - return frame - - -# Code typically replaced by _warnings -def warn(message, category=None, stacklevel=1, source=None, - *, skip_file_prefixes=()): - """Issue a warning, or maybe ignore it or raise an exception.""" - # Check if message is already a Warning object - if isinstance(message, Warning): - category = message.__class__ - # Check category argument - if category is None: - category = UserWarning - if not (isinstance(category, type) and issubclass(category, Warning)): - raise TypeError("category must be a Warning subclass, " - "not '{:s}'".format(type(category).__name__)) - if not isinstance(skip_file_prefixes, tuple): - # The C version demands a tuple for implementation performance. - raise TypeError('skip_file_prefixes must be a tuple of strs.') - if skip_file_prefixes: - stacklevel = max(2, stacklevel) - # Get context information - try: - if stacklevel <= 1 or _is_internal_frame(sys._getframe(1)): - # If frame is too small to care or if the warning originated in - # internal code, then do not try to hide any frames. - frame = sys._getframe(stacklevel) - else: - frame = sys._getframe(1) - # Look for one frame less since the above line starts us off. - for x in range(stacklevel-1): - frame = _next_external_frame(frame, skip_file_prefixes) - if frame is None: - raise ValueError - except ValueError: - globals = sys.__dict__ - filename = "<sys>" - lineno = 0 - else: - globals = frame.f_globals - filename = frame.f_code.co_filename - lineno = frame.f_lineno - if '__name__' in globals: - module = globals['__name__'] - else: - module = "<string>" - registry = globals.setdefault("__warningregistry__", {}) - _wm.warn_explicit( - message, - category, - filename, - lineno, - module, - registry, - globals, - source=source, - ) - - -def warn_explicit(message, category, filename, lineno, - module=None, registry=None, module_globals=None, - source=None): - lineno = int(lineno) - if module is None: - module = filename or "<unknown>" - if module[-3:].lower() == ".py": - module = module[:-3] # XXX What about leading pathname? - if isinstance(message, Warning): - text = str(message) - category = message.__class__ - else: - text = message - message = category(message) - key = (text, category, lineno) - with _wm._lock: - if registry is None: - registry = {} - if registry.get('version', 0) != _wm._filters_version: - registry.clear() - registry['version'] = _wm._filters_version - # Quick test for common case - if registry.get(key): - return - # Search the filters - for item in _wm._get_filters(): - action, msg, cat, mod, ln = item - if ((msg is None or msg.match(text)) and - issubclass(category, cat) and - (mod is None or mod.match(module)) and - (ln == 0 or lineno == ln)): - break - else: - action = _wm.defaultaction - # Early exit actions - if action == "ignore": - return - - if action == "error": - raise message - # Other actions - if action == "once": - registry[key] = 1 - oncekey = (text, category) - if _wm.onceregistry.get(oncekey): - return - _wm.onceregistry[oncekey] = 1 - elif action in {"always", "all"}: - pass - elif action == "module": - registry[key] = 1 - altkey = (text, category, 0) - if registry.get(altkey): - return - registry[altkey] = 1 - elif action == "default": - registry[key] = 1 - else: - # Unrecognized actions are errors - raise RuntimeError( - "Unrecognized action (%r) in warnings.filters:\n %s" % - (action, item)) - - # Prime the linecache for formatting, in case the - # "file" is actually in a zipfile or something. - import linecache - linecache.getlines(filename, module_globals) - - # Print message and context - msg = _wm.WarningMessage(message, category, filename, lineno, source=source) - _wm._showwarnmsg(msg) - - -class WarningMessage(object): - - _WARNING_DETAILS = ("message", "category", "filename", "lineno", "file", - "line", "source") - - def __init__(self, message, category, filename, lineno, file=None, - line=None, source=None): - self.message = message - self.category = category - self.filename = filename - self.lineno = lineno - self.file = file - self.line = line - self.source = source - self._category_name = category.__name__ if category else None - - def __str__(self): - return ("{message : %r, category : %r, filename : %r, lineno : %s, " - "line : %r}" % (self.message, self._category_name, - self.filename, self.lineno, self.line)) - - def __repr__(self): - return f'<{type(self).__qualname__} {self}>' - - -class catch_warnings(object): - - """A context manager that copies and restores the warnings filter upon - exiting the context. - - The 'record' argument specifies whether warnings should be captured by a - custom implementation of warnings.showwarning() and be appended to a list - returned by the context manager. Otherwise None is returned by the context - manager. The objects appended to the list are arguments whose attributes - mirror the arguments to showwarning(). - - The 'module' argument is to specify an alternative module to the module - named 'warnings' and imported under that name. This argument is only useful - when testing the warnings module itself. - - If the 'action' argument is not None, the remaining arguments are passed - to warnings.simplefilter() as if it were called immediately on entering the - context. - """ - - def __init__(self, *, record=False, module=None, - action=None, category=Warning, lineno=0, append=False): - """Specify whether to record warnings and if an alternative module - should be used other than sys.modules['warnings']. - - """ - self._record = record - self._module = sys.modules['warnings'] if module is None else module - self._entered = False - if action is None: - self._filter = None - else: - self._filter = (action, category, lineno, append) - - def __repr__(self): - args = [] - if self._record: - args.append("record=True") - if self._module is not sys.modules['warnings']: - args.append("module=%r" % self._module) - name = type(self).__name__ - return "%s(%s)" % (name, ", ".join(args)) - - def __enter__(self): - if self._entered: - raise RuntimeError("Cannot enter %r twice" % self) - self._entered = True - with _wm._lock: - if _use_context: - self._saved_context, context = self._module._new_context() - else: - context = None - self._filters = self._module.filters - self._module.filters = self._filters[:] - self._showwarnmsg_impl = self._module._showwarnmsg_impl - self._showwarning = self._module.showwarning - self._module._filters_mutated_lock_held() - if self._record: - if _use_context: - context.log = log = [] - else: - log = [] - self._module._showwarnmsg_impl = log.append - # Reset showwarning() to the default implementation to make sure - # that _showwarnmsg() calls _showwarnmsg_impl() - self._module.showwarning = self._module._showwarning_orig - else: - log = None - if self._filter is not None: - self._module.simplefilter(*self._filter) - return log - - def __exit__(self, *exc_info): - if not self._entered: - raise RuntimeError("Cannot exit %r without entering first" % self) - with _wm._lock: - if _use_context: - self._module._warnings_context.set(self._saved_context) - else: - self._module.filters = self._filters - self._module._showwarnmsg_impl = self._showwarnmsg_impl - self._module.showwarning = self._showwarning - self._module._filters_mutated_lock_held() - - -class deprecated: - """Indicate that a class, function or overload is deprecated. - - When this decorator is applied to an object, the type checker - will generate a diagnostic on usage of the deprecated object. - - Usage: - - @deprecated("Use B instead") - class A: - pass - - @deprecated("Use g instead") - def f(): - pass - - @overload - @deprecated("int support is deprecated") - def g(x: int) -> int: ... - @overload - def g(x: str) -> int: ... - - The warning specified by *category* will be emitted at runtime - on use of deprecated objects. For functions, that happens on calls; - for classes, on instantiation and on creation of subclasses. - If the *category* is ``None``, no warning is emitted at runtime. - The *stacklevel* determines where the - warning is emitted. If it is ``1`` (the default), the warning - is emitted at the direct caller of the deprecated object; if it - is higher, it is emitted further up the stack. - Static type checker behavior is not affected by the *category* - and *stacklevel* arguments. - - The deprecation message passed to the decorator is saved in the - ``__deprecated__`` attribute on the decorated object. - If applied to an overload, the decorator - must be after the ``@overload`` decorator for the attribute to - exist on the overload as returned by ``get_overloads()``. - - See PEP 702 for details. - - """ - def __init__( - self, - message: str, - /, - *, - category: type[Warning] | None = DeprecationWarning, - stacklevel: int = 1, - ) -> None: - if not isinstance(message, str): - raise TypeError( - f"Expected an object of type str for 'message', not {type(message).__name__!r}" - ) - self.message = message - self.category = category - self.stacklevel = stacklevel - - def __call__(self, arg, /): - # Make sure the inner functions created below don't - # retain a reference to self. - msg = self.message - category = self.category - stacklevel = self.stacklevel - if category is None: - arg.__deprecated__ = msg - return arg - elif isinstance(arg, type): - import functools - from types import MethodType - - original_new = arg.__new__ - - @functools.wraps(original_new) - def __new__(cls, /, *args, **kwargs): - if cls is arg: - _wm.warn(msg, category=category, stacklevel=stacklevel + 1) - if original_new is not object.__new__: - return original_new(cls, *args, **kwargs) - # Mirrors a similar check in object.__new__. - elif cls.__init__ is object.__init__ and (args or kwargs): - raise TypeError(f"{cls.__name__}() takes no arguments") - else: - return original_new(cls) - - arg.__new__ = staticmethod(__new__) - - if "__init_subclass__" in arg.__dict__: - # __init_subclass__ is directly present on the decorated class. - # Synthesize a wrapper that calls this method directly. - original_init_subclass = arg.__init_subclass__ - # We need slightly different behavior if __init_subclass__ - # is a bound method (likely if it was implemented in Python). - # Otherwise, it likely means it's a builtin such as - # object's implementation of __init_subclass__. - if isinstance(original_init_subclass, MethodType): - original_init_subclass = original_init_subclass.__func__ - - @functools.wraps(original_init_subclass) - def __init_subclass__(*args, **kwargs): - _wm.warn(msg, category=category, stacklevel=stacklevel + 1) - return original_init_subclass(*args, **kwargs) - else: - def __init_subclass__(cls, *args, **kwargs): - _wm.warn(msg, category=category, stacklevel=stacklevel + 1) - return super(arg, cls).__init_subclass__(*args, **kwargs) - - arg.__init_subclass__ = classmethod(__init_subclass__) - - arg.__deprecated__ = __new__.__deprecated__ = msg - __init_subclass__.__deprecated__ = msg - return arg - elif callable(arg): - import functools - import inspect - - @functools.wraps(arg) - def wrapper(*args, **kwargs): - _wm.warn(msg, category=category, stacklevel=stacklevel + 1) - return arg(*args, **kwargs) - - if inspect.iscoroutinefunction(arg): - wrapper = inspect.markcoroutinefunction(wrapper) - - arg.__deprecated__ = wrapper.__deprecated__ = msg - return wrapper - else: - raise TypeError( - "@deprecated decorator with non-None category must be applied to " - f"a class or callable, not {arg!r}" - ) - - -_DEPRECATED_MSG = "{name!r} is deprecated and slated for removal in Python {remove}" - - -def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info): - """Warn that *name* is deprecated or should be removed. - - RuntimeError is raised if *remove* specifies a major/minor tuple older than - the current Python version or the same version but past the alpha. - - The *message* argument is formatted with *name* and *remove* as a Python - version tuple (e.g. (3, 11)). - - """ - remove_formatted = f"{remove[0]}.{remove[1]}" - if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"): - msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha" - raise RuntimeError(msg) - else: - msg = message.format(name=name, remove=remove_formatted) - _wm.warn(msg, DeprecationWarning, stacklevel=3) - - -# Private utility function called by _PyErr_WarnUnawaitedCoroutine -def _warn_unawaited_coroutine(coro): - msg_lines = [ - f"coroutine '{coro.__qualname__}' was never awaited\n" - ] - if coro.cr_origin is not None: - import linecache, traceback - def extract(): - for filename, lineno, funcname in reversed(coro.cr_origin): - line = linecache.getline(filename, lineno) - yield (filename, lineno, funcname, line) - msg_lines.append("Coroutine created at (most recent call last)\n") - msg_lines += traceback.format_list(list(extract())) - msg = "".join(msg_lines).rstrip("\n") - # Passing source= here means that if the user happens to have tracemalloc - # enabled and tracking where the coroutine was created, the warning will - # contain that traceback. This does mean that if they have *both* - # coroutine origin tracking *and* tracemalloc enabled, they'll get two - # partially-redundant tracebacks. If we wanted to be clever we could - # probably detect this case and avoid it, but for now we don't bother. - _wm.warn( - msg, category=RuntimeWarning, stacklevel=2, source=coro - ) - - -def _setup_defaults(): - # Several warning categories are ignored by default in regular builds - if hasattr(sys, 'gettotalrefcount'): - return - _wm.filterwarnings("default", category=DeprecationWarning, module="__main__", append=1) - _wm.simplefilter("ignore", category=DeprecationWarning, append=1) - _wm.simplefilter("ignore", category=PendingDeprecationWarning, append=1) - _wm.simplefilter("ignore", category=ImportWarning, append=1) - _wm.simplefilter("ignore", category=ResourceWarning, append=1) diff --git a/Python314_4_x86_Template/Lib/_pydatetime.py b/Python314_4_x86_Template/Lib/_pydatetime.py deleted file mode 100644 index 70251dbb6..000000000 --- a/Python314_4_x86_Template/Lib/_pydatetime.py +++ /dev/null @@ -1,2723 +0,0 @@ -"""Pure Python implementation of the datetime module.""" - -__all__ = ("date", "datetime", "time", "timedelta", "timezone", "tzinfo", - "MINYEAR", "MAXYEAR", "UTC") - -__name__ = "datetime" - - -import time as _time -import math as _math -import sys -from operator import index as _index - -def _cmp(x, y): - return 0 if x == y else 1 if x > y else -1 - -def _get_class_module(self): - module_name = self.__class__.__module__ - if module_name == 'datetime': - return 'datetime.' - else: - return '' - -MINYEAR = 1 -MAXYEAR = 9999 -_MAXORDINAL = 3652059 # date.max.toordinal() - -# Utility functions, adapted from Python's Demo/classes/Dates.py, which -# also assumes the current Gregorian calendar indefinitely extended in -# both directions. Difference: Dates.py calls January 1 of year 0 day -# number 1. The code here calls January 1 of year 1 day number 1. This is -# to match the definition of the "proleptic Gregorian" calendar in Dershowitz -# and Reingold's "Calendrical Calculations", where it's the base calendar -# for all computations. See the book for algorithms for converting between -# proleptic Gregorian ordinals and many other calendar systems. - -# -1 is a placeholder for indexing purposes. -_DAYS_IN_MONTH = [-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] - -_DAYS_BEFORE_MONTH = [-1] # -1 is a placeholder for indexing purposes. -dbm = 0 -for dim in _DAYS_IN_MONTH[1:]: - _DAYS_BEFORE_MONTH.append(dbm) - dbm += dim -del dbm, dim - -def _is_leap(year): - "year -> 1 if leap year, else 0." - return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) - -def _days_before_year(year): - "year -> number of days before January 1st of year." - y = year - 1 - return y*365 + y//4 - y//100 + y//400 - -def _days_in_month(year, month): - "year, month -> number of days in that month in that year." - assert 1 <= month <= 12, month - if month == 2 and _is_leap(year): - return 29 - return _DAYS_IN_MONTH[month] - -def _days_before_month(year, month): - "year, month -> number of days in year preceding first day of month." - assert 1 <= month <= 12, f"month must be in 1..12, not {month}" - return _DAYS_BEFORE_MONTH[month] + (month > 2 and _is_leap(year)) - -def _ymd2ord(year, month, day): - "year, month, day -> ordinal, considering 01-Jan-0001 as day 1." - assert 1 <= month <= 12, f"month must be in 1..12, not {month}" - dim = _days_in_month(year, month) - assert 1 <= day <= dim, f"day must be in 1..{dim}, not {day}" - return (_days_before_year(year) + - _days_before_month(year, month) + - day) - -_DI400Y = _days_before_year(401) # number of days in 400 years -_DI100Y = _days_before_year(101) # " " " " 100 " -_DI4Y = _days_before_year(5) # " " " " 4 " - -# A 4-year cycle has an extra leap day over what we'd get from pasting -# together 4 single years. -assert _DI4Y == 4 * 365 + 1 - -# Similarly, a 400-year cycle has an extra leap day over what we'd get from -# pasting together 4 100-year cycles. -assert _DI400Y == 4 * _DI100Y + 1 - -# OTOH, a 100-year cycle has one fewer leap day than we'd get from -# pasting together 25 4-year cycles. -assert _DI100Y == 25 * _DI4Y - 1 - -def _ord2ymd(n): - "ordinal -> (year, month, day), considering 01-Jan-0001 as day 1." - - # n is a 1-based index, starting at 1-Jan-1. The pattern of leap years - # repeats exactly every 400 years. The basic strategy is to find the - # closest 400-year boundary at or before n, then work with the offset - # from that boundary to n. Life is much clearer if we subtract 1 from - # n first -- then the values of n at 400-year boundaries are exactly - # those divisible by _DI400Y: - # - # D M Y n n-1 - # -- --- ---- ---------- ---------------- - # 31 Dec -400 -_DI400Y -_DI400Y -1 - # 1 Jan -399 -_DI400Y +1 -_DI400Y 400-year boundary - # ... - # 30 Dec 000 -1 -2 - # 31 Dec 000 0 -1 - # 1 Jan 001 1 0 400-year boundary - # 2 Jan 001 2 1 - # 3 Jan 001 3 2 - # ... - # 31 Dec 400 _DI400Y _DI400Y -1 - # 1 Jan 401 _DI400Y +1 _DI400Y 400-year boundary - n -= 1 - n400, n = divmod(n, _DI400Y) - year = n400 * 400 + 1 # ..., -399, 1, 401, ... - - # Now n is the (non-negative) offset, in days, from January 1 of year, to - # the desired date. Now compute how many 100-year cycles precede n. - # Note that it's possible for n100 to equal 4! In that case 4 full - # 100-year cycles precede the desired day, which implies the desired - # day is December 31 at the end of a 400-year cycle. - n100, n = divmod(n, _DI100Y) - - # Now compute how many 4-year cycles precede it. - n4, n = divmod(n, _DI4Y) - - # And now how many single years. Again n1 can be 4, and again meaning - # that the desired day is December 31 at the end of the 4-year cycle. - n1, n = divmod(n, 365) - - year += n100 * 100 + n4 * 4 + n1 - if n1 == 4 or n100 == 4: - assert n == 0 - return year-1, 12, 31 - - # Now the year is correct, and n is the offset from January 1. We find - # the month via an estimate that's either exact or one too large. - leapyear = n1 == 3 and (n4 != 24 or n100 == 3) - assert leapyear == _is_leap(year) - month = (n + 50) >> 5 - preceding = _DAYS_BEFORE_MONTH[month] + (month > 2 and leapyear) - if preceding > n: # estimate is too large - month -= 1 - preceding -= _DAYS_IN_MONTH[month] + (month == 2 and leapyear) - n -= preceding - assert 0 <= n < _days_in_month(year, month) - - # Now the year and month are correct, and n is the offset from the - # start of that month: we're done! - return year, month, n+1 - -# Month and day names. For localized versions, see the calendar module. -_MONTHNAMES = [None, "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -_DAYNAMES = [None, "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] - - -def _build_struct_time(y, m, d, hh, mm, ss, dstflag): - wday = (_ymd2ord(y, m, d) + 6) % 7 - dnum = _days_before_month(y, m) + d - return _time.struct_time((y, m, d, hh, mm, ss, wday, dnum, dstflag)) - -def _format_time(hh, mm, ss, us, timespec='auto'): - specs = { - 'hours': '{:02d}', - 'minutes': '{:02d}:{:02d}', - 'seconds': '{:02d}:{:02d}:{:02d}', - 'milliseconds': '{:02d}:{:02d}:{:02d}.{:03d}', - 'microseconds': '{:02d}:{:02d}:{:02d}.{:06d}' - } - - if timespec == 'auto': - # Skip trailing microseconds when us==0. - timespec = 'microseconds' if us else 'seconds' - elif timespec == 'milliseconds': - us //= 1000 - try: - fmt = specs[timespec] - except KeyError: - raise ValueError('Unknown timespec value') - else: - return fmt.format(hh, mm, ss, us) - -def _format_offset(off, sep=':'): - s = '' - if off is not None: - if off.days < 0: - sign = "-" - off = -off - else: - sign = "+" - hh, mm = divmod(off, timedelta(hours=1)) - mm, ss = divmod(mm, timedelta(minutes=1)) - s += "%s%02d%s%02d" % (sign, hh, sep, mm) - if ss or ss.microseconds: - s += "%s%02d" % (sep, ss.seconds) - - if ss.microseconds: - s += '.%06d' % ss.microseconds - return s - -_normalize_century = None -def _need_normalize_century(): - global _normalize_century - if _normalize_century is None: - try: - _normalize_century = ( - _time.strftime("%Y", (99, 1, 1, 0, 0, 0, 0, 1, 0)) != "0099") - except ValueError: - _normalize_century = True - return _normalize_century - -# Correctly substitute for %z and %Z escapes in strftime formats. -def _wrap_strftime(object, format, timetuple): - # Don't call utcoffset() or tzname() unless actually needed. - freplace = None # the string to use for %f - zreplace = None # the string to use for %z - colonzreplace = None # the string to use for %:z - Zreplace = None # the string to use for %Z - - # Scan format for %z, %:z and %Z escapes, replacing as needed. - newformat = [] - push = newformat.append - i, n = 0, len(format) - while i < n: - ch = format[i] - i += 1 - if ch == '%': - if i < n: - ch = format[i] - i += 1 - if ch == 'f': - if freplace is None: - freplace = '%06d' % getattr(object, - 'microsecond', 0) - newformat.append(freplace) - elif ch == 'z': - if zreplace is None: - if hasattr(object, "utcoffset"): - zreplace = _format_offset(object.utcoffset(), sep="") - else: - zreplace = "" - assert '%' not in zreplace - newformat.append(zreplace) - elif ch == ':': - if i < n: - ch2 = format[i] - i += 1 - if ch2 == 'z': - if colonzreplace is None: - if hasattr(object, "utcoffset"): - colonzreplace = _format_offset(object.utcoffset(), sep=":") - else: - colonzreplace = "" - assert '%' not in colonzreplace - newformat.append(colonzreplace) - else: - push('%') - push(ch) - push(ch2) - elif ch == 'Z': - if Zreplace is None: - Zreplace = "" - if hasattr(object, "tzname"): - s = object.tzname() - if s is not None: - # strftime is going to have at this: escape % - Zreplace = s.replace('%', '%%') - newformat.append(Zreplace) - # Note that datetime(1000, 1, 1).strftime('%G') == '1000' so - # year 1000 for %G can go on the fast path. - elif ((ch in 'YG' or ch in 'FC') and - object.year < 1000 and _need_normalize_century()): - if ch == 'G': - year = int(_time.strftime("%G", timetuple)) - else: - year = object.year - if ch == 'C': - push('{:02}'.format(year // 100)) - else: - push('{:04}'.format(year)) - if ch == 'F': - push('-{:02}-{:02}'.format(*timetuple[1:3])) - else: - push('%') - push(ch) - else: - push('%') - else: - push(ch) - newformat = "".join(newformat) - return _time.strftime(newformat, timetuple) - -# Helpers for parsing the result of isoformat() -def _is_ascii_digit(c): - return c in "0123456789" - -def _find_isoformat_datetime_separator(dtstr): - # See the comment in _datetimemodule.c:_find_isoformat_datetime_separator - len_dtstr = len(dtstr) - if len_dtstr == 7: - return 7 - - assert len_dtstr > 7 - date_separator = "-" - week_indicator = "W" - - if dtstr[4] == date_separator: - if dtstr[5] == week_indicator: - if len_dtstr < 8: - raise ValueError("Invalid ISO string") - if len_dtstr > 8 and dtstr[8] == date_separator: - if len_dtstr == 9: - raise ValueError("Invalid ISO string") - if len_dtstr > 10 and _is_ascii_digit(dtstr[10]): - # This is as far as we need to resolve the ambiguity for - # the moment - if we have YYYY-Www-##, the separator is - # either a hyphen at 8 or a number at 10. - # - # We'll assume it's a hyphen at 8 because it's way more - # likely that someone will use a hyphen as a separator than - # a number, but at this point it's really best effort - # because this is an extension of the spec anyway. - # TODO(pganssle): Document this - return 8 - return 10 - else: - # YYYY-Www (8) - return 8 - else: - # YYYY-MM-DD (10) - return 10 - else: - if dtstr[4] == week_indicator: - # YYYYWww (7) or YYYYWwwd (8) - idx = 7 - while idx < len_dtstr: - if not _is_ascii_digit(dtstr[idx]): - break - idx += 1 - - if idx < 9: - return idx - - if idx % 2 == 0: - # If the index of the last number is even, it's YYYYWwwd - return 7 - else: - return 8 - else: - # YYYYMMDD (8) - return 8 - - -def _parse_isoformat_date(dtstr): - # It is assumed that this is an ASCII-only string of lengths 7, 8 or 10, - # see the comment on Modules/_datetimemodule.c:_find_isoformat_datetime_separator - assert len(dtstr) in (7, 8, 10) - year = int(dtstr[0:4]) - has_sep = dtstr[4] == '-' - - pos = 4 + has_sep - if dtstr[pos:pos + 1] == "W": - # YYYY-?Www-?D? - pos += 1 - weekno = int(dtstr[pos:pos + 2]) - pos += 2 - - dayno = 1 - if len(dtstr) > pos: - if (dtstr[pos:pos + 1] == '-') != has_sep: - raise ValueError("Inconsistent use of dash separator") - - pos += has_sep - - dayno = int(dtstr[pos:pos + 1]) - - return list(_isoweek_to_gregorian(year, weekno, dayno)) - else: - month = int(dtstr[pos:pos + 2]) - pos += 2 - if (dtstr[pos:pos + 1] == "-") != has_sep: - raise ValueError("Inconsistent use of dash separator") - - pos += has_sep - day = int(dtstr[pos:pos + 2]) - - return [year, month, day] - - -_FRACTION_CORRECTION = [100000, 10000, 1000, 100, 10] - - -def _parse_hh_mm_ss_ff(tstr): - # Parses things of the form HH[:?MM[:?SS[{.,}fff[fff]]]] - len_str = len(tstr) - - time_comps = [0, 0, 0, 0] - pos = 0 - for comp in range(0, 3): - if (len_str - pos) < 2: - raise ValueError("Incomplete time component") - - time_comps[comp] = int(tstr[pos:pos+2]) - - pos += 2 - next_char = tstr[pos:pos+1] - - if comp == 0: - has_sep = next_char == ':' - - if not next_char or comp >= 2: - break - - if has_sep and next_char != ':': - raise ValueError("Invalid time separator: %c" % next_char) - - pos += has_sep - - if pos < len_str: - if tstr[pos] not in '.,': - raise ValueError("Invalid microsecond separator") - else: - pos += 1 - if not all(map(_is_ascii_digit, tstr[pos:])): - raise ValueError("Non-digit values in fraction") - - len_remainder = len_str - pos - - if len_remainder >= 6: - to_parse = 6 - else: - to_parse = len_remainder - - time_comps[3] = int(tstr[pos:(pos+to_parse)]) - if to_parse < 6: - time_comps[3] *= _FRACTION_CORRECTION[to_parse-1] - - return time_comps - -def _parse_isoformat_time(tstr): - # Format supported is HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]] - len_str = len(tstr) - if len_str < 2: - raise ValueError("Isoformat time too short") - - # This is equivalent to re.search('[+-Z]', tstr), but faster - tz_pos = (tstr.find('-') + 1 or tstr.find('+') + 1 or tstr.find('Z') + 1) - timestr = tstr[:tz_pos-1] if tz_pos > 0 else tstr - - time_comps = _parse_hh_mm_ss_ff(timestr) - - hour, minute, second, microsecond = time_comps - became_next_day = False - error_from_components = False - if (hour == 24): - if all(time_comp == 0 for time_comp in time_comps[1:]): - hour = 0 - time_comps[0] = hour - became_next_day = True - else: - error_from_components = True - - tzi = None - if tz_pos == len_str and tstr[-1] == 'Z': - tzi = timezone.utc - elif tz_pos > 0: - tzstr = tstr[tz_pos:] - - # Valid time zone strings are: - # HH len: 2 - # HHMM len: 4 - # HH:MM len: 5 - # HHMMSS len: 6 - # HHMMSS.f+ len: 7+ - # HH:MM:SS len: 8 - # HH:MM:SS.f+ len: 10+ - - if len(tzstr) in (0, 1, 3) or tstr[tz_pos-1] == 'Z': - raise ValueError("Malformed time zone string") - - tz_comps = _parse_hh_mm_ss_ff(tzstr) - - if all(x == 0 for x in tz_comps): - tzi = timezone.utc - else: - tzsign = -1 if tstr[tz_pos - 1] == '-' else 1 - - td = timedelta(hours=tz_comps[0], minutes=tz_comps[1], - seconds=tz_comps[2], microseconds=tz_comps[3]) - - tzi = timezone(tzsign * td) - - time_comps.append(tzi) - - return time_comps, became_next_day, error_from_components - -# tuple[int, int, int] -> tuple[int, int, int] version of date.fromisocalendar -def _isoweek_to_gregorian(year, week, day): - # Year is bounded this way because 9999-12-31 is (9999, 52, 5) - if not MINYEAR <= year <= MAXYEAR: - raise ValueError(f"year must be in {MINYEAR}..{MAXYEAR}, not {year}") - - if not 0 < week < 53: - out_of_range = True - - if week == 53: - # ISO years have 53 weeks in them on years starting with a - # Thursday and leap years starting on a Wednesday - first_weekday = _ymd2ord(year, 1, 1) % 7 - if (first_weekday == 4 or (first_weekday == 3 and - _is_leap(year))): - out_of_range = False - - if out_of_range: - raise ValueError(f"Invalid week: {week}") - - if not 0 < day < 8: - raise ValueError(f"Invalid weekday: {day} (range is [1, 7])") - - # Now compute the offset from (Y, 1, 1) in days: - day_offset = (week - 1) * 7 + (day - 1) - - # Calculate the ordinal day for monday, week 1 - day_1 = _isoweek1monday(year) - ord_day = day_1 + day_offset - - return _ord2ymd(ord_day) - - -# Just raise TypeError if the arg isn't None or a string. -def _check_tzname(name): - if name is not None and not isinstance(name, str): - raise TypeError("tzinfo.tzname() must return None or string, " - f"not {type(name).__name__!r}") - -# name is the offset-producing method, "utcoffset" or "dst". -# offset is what it returned. -# If offset isn't None or timedelta, raises TypeError. -# If offset is None, returns None. -# Else offset is checked for being in range. -# If it is, its integer value is returned. Else ValueError is raised. -def _check_utc_offset(name, offset): - assert name in ("utcoffset", "dst") - if offset is None: - return - if not isinstance(offset, timedelta): - raise TypeError(f"tzinfo.{name}() must return None " - f"or timedelta, not {type(offset).__name__!r}") - if not -timedelta(1) < offset < timedelta(1): - raise ValueError("offset must be a timedelta " - "strictly between -timedelta(hours=24) and " - f"timedelta(hours=24), not {offset!r}") - -def _check_date_fields(year, month, day): - year = _index(year) - month = _index(month) - day = _index(day) - if not MINYEAR <= year <= MAXYEAR: - raise ValueError(f"year must be in {MINYEAR}..{MAXYEAR}, not {year}") - if not 1 <= month <= 12: - raise ValueError(f"month must be in 1..12, not {month}") - dim = _days_in_month(year, month) - if not 1 <= day <= dim: - raise ValueError(f"day {day} must be in range 1..{dim} for month {month} in year {year}") - return year, month, day - -def _check_time_fields(hour, minute, second, microsecond, fold): - hour = _index(hour) - minute = _index(minute) - second = _index(second) - microsecond = _index(microsecond) - if not 0 <= hour <= 23: - raise ValueError(f"hour must be in 0..23, not {hour}") - if not 0 <= minute <= 59: - raise ValueError(f"minute must be in 0..59, not {minute}") - if not 0 <= second <= 59: - raise ValueError(f"second must be in 0..59, not {second}") - if not 0 <= microsecond <= 999999: - raise ValueError(f"microsecond must be in 0..999999, not {microsecond}") - if fold not in (0, 1): - raise ValueError(f"fold must be either 0 or 1, not {fold}") - return hour, minute, second, microsecond, fold - -def _check_tzinfo_arg(tz): - if tz is not None and not isinstance(tz, tzinfo): - raise TypeError( - "tzinfo argument must be None or of a tzinfo subclass, " - f"not {type(tz).__name__!r}" - ) - -def _divide_and_round(a, b): - """divide a by b and round result to the nearest integer - - When the ratio is exactly half-way between two integers, - the even integer is returned. - """ - # Based on the reference implementation for divmod_near - # in Objects/longobject.c. - q, r = divmod(a, b) - # round up if either r / b > 0.5, or r / b == 0.5 and q is odd. - # The expression r / b > 0.5 is equivalent to 2 * r > b if b is - # positive, 2 * r < b if b negative. - r *= 2 - greater_than_half = r > b if b > 0 else r < b - if greater_than_half or r == b and q % 2 == 1: - q += 1 - - return q - - -class timedelta: - """Represent the difference between two datetime objects. - - Supported operators: - - - add, subtract timedelta - - unary plus, minus, abs - - compare to timedelta - - multiply, divide by int - - In addition, datetime supports subtraction of two datetime objects - returning a timedelta, and addition or subtraction of a datetime - and a timedelta giving a datetime. - - Representation: (days, seconds, microseconds). - """ - # The representation of (days, seconds, microseconds) was chosen - # arbitrarily; the exact rationale originally specified in the docstring - # was "Because I felt like it." - - __slots__ = '_days', '_seconds', '_microseconds', '_hashcode' - - def __new__(cls, days=0, seconds=0, microseconds=0, - milliseconds=0, minutes=0, hours=0, weeks=0): - # Doing this efficiently and accurately in C is going to be difficult - # and error-prone, due to ubiquitous overflow possibilities, and that - # C double doesn't have enough bits of precision to represent - # microseconds over 10K years faithfully. The code here tries to make - # explicit where go-fast assumptions can be relied on, in order to - # guide the C implementation; it's way more convoluted than speed- - # ignoring auto-overflow-to-long idiomatic Python could be. - - for name, value in ( - ("days", days), - ("seconds", seconds), - ("microseconds", microseconds), - ("milliseconds", milliseconds), - ("minutes", minutes), - ("hours", hours), - ("weeks", weeks) - ): - if not isinstance(value, (int, float)): - raise TypeError( - f"unsupported type for timedelta {name} component: {type(value).__name__}" - ) - - # Final values, all integer. - # s and us fit in 32-bit signed ints; d isn't bounded. - d = s = us = 0 - - # Normalize everything to days, seconds, microseconds. - days += weeks*7 - seconds += minutes*60 + hours*3600 - microseconds += milliseconds*1000 - - # Get rid of all fractions, and normalize s and us. - # Take a deep breath <wink>. - if isinstance(days, float): - dayfrac, days = _math.modf(days) - daysecondsfrac, daysecondswhole = _math.modf(dayfrac * (24.*3600.)) - assert daysecondswhole == int(daysecondswhole) # can't overflow - s = int(daysecondswhole) - assert days == int(days) - d = int(days) - else: - daysecondsfrac = 0.0 - d = days - assert isinstance(daysecondsfrac, float) - assert abs(daysecondsfrac) <= 1.0 - assert isinstance(d, int) - assert abs(s) <= 24 * 3600 - # days isn't referenced again before redefinition - - if isinstance(seconds, float): - secondsfrac, seconds = _math.modf(seconds) - assert seconds == int(seconds) - seconds = int(seconds) - secondsfrac += daysecondsfrac - assert abs(secondsfrac) <= 2.0 - else: - secondsfrac = daysecondsfrac - # daysecondsfrac isn't referenced again - assert isinstance(secondsfrac, float) - assert abs(secondsfrac) <= 2.0 - - assert isinstance(seconds, int) - days, seconds = divmod(seconds, 24*3600) - d += days - s += int(seconds) # can't overflow - assert isinstance(s, int) - assert abs(s) <= 2 * 24 * 3600 - # seconds isn't referenced again before redefinition - - usdouble = secondsfrac * 1e6 - assert abs(usdouble) < 2.1e6 # exact value not critical - # secondsfrac isn't referenced again - - if isinstance(microseconds, float): - microseconds = round(microseconds + usdouble) - seconds, microseconds = divmod(microseconds, 1000000) - days, seconds = divmod(seconds, 24*3600) - d += days - s += seconds - else: - microseconds = int(microseconds) - seconds, microseconds = divmod(microseconds, 1000000) - days, seconds = divmod(seconds, 24*3600) - d += days - s += seconds - microseconds = round(microseconds + usdouble) - assert isinstance(s, int) - assert isinstance(microseconds, int) - assert abs(s) <= 3 * 24 * 3600 - assert abs(microseconds) < 3.1e6 - - # Just a little bit of carrying possible for microseconds and seconds. - seconds, us = divmod(microseconds, 1000000) - s += seconds - days, s = divmod(s, 24*3600) - d += days - - assert isinstance(d, int) - assert isinstance(s, int) and 0 <= s < 24*3600 - assert isinstance(us, int) and 0 <= us < 1000000 - - if abs(d) > 999999999: - raise OverflowError("timedelta # of days is too large: %d" % d) - - self = object.__new__(cls) - self._days = d - self._seconds = s - self._microseconds = us - self._hashcode = -1 - return self - - def __repr__(self): - args = [] - if self._days: - args.append("days=%d" % self._days) - if self._seconds: - args.append("seconds=%d" % self._seconds) - if self._microseconds: - args.append("microseconds=%d" % self._microseconds) - if not args: - args.append('0') - return "%s%s(%s)" % (_get_class_module(self), - self.__class__.__qualname__, - ', '.join(args)) - - def __str__(self): - mm, ss = divmod(self._seconds, 60) - hh, mm = divmod(mm, 60) - s = "%d:%02d:%02d" % (hh, mm, ss) - if self._days: - def plural(n): - return n, abs(n) != 1 and "s" or "" - s = ("%d day%s, " % plural(self._days)) + s - if self._microseconds: - s = s + ".%06d" % self._microseconds - return s - - def total_seconds(self): - """Total seconds in the duration.""" - return ((self.days * 86400 + self.seconds) * 10**6 + - self.microseconds) / 10**6 - - # Read-only field accessors - @property - def days(self): - """days""" - return self._days - - @property - def seconds(self): - """seconds""" - return self._seconds - - @property - def microseconds(self): - """microseconds""" - return self._microseconds - - def __add__(self, other): - if isinstance(other, timedelta): - # for CPython compatibility, we cannot use - # our __class__ here, but need a real timedelta - return timedelta(self._days + other._days, - self._seconds + other._seconds, - self._microseconds + other._microseconds) - return NotImplemented - - __radd__ = __add__ - - def __sub__(self, other): - if isinstance(other, timedelta): - # for CPython compatibility, we cannot use - # our __class__ here, but need a real timedelta - return timedelta(self._days - other._days, - self._seconds - other._seconds, - self._microseconds - other._microseconds) - return NotImplemented - - def __rsub__(self, other): - if isinstance(other, timedelta): - return -self + other - return NotImplemented - - def __neg__(self): - # for CPython compatibility, we cannot use - # our __class__ here, but need a real timedelta - return timedelta(-self._days, - -self._seconds, - -self._microseconds) - - def __pos__(self): - return self - - def __abs__(self): - if self._days < 0: - return -self - else: - return self - - def __mul__(self, other): - if isinstance(other, int): - # for CPython compatibility, we cannot use - # our __class__ here, but need a real timedelta - return timedelta(self._days * other, - self._seconds * other, - self._microseconds * other) - if isinstance(other, float): - usec = self._to_microseconds() - a, b = other.as_integer_ratio() - return timedelta(0, 0, _divide_and_round(usec * a, b)) - return NotImplemented - - __rmul__ = __mul__ - - def _to_microseconds(self): - return ((self._days * (24*3600) + self._seconds) * 1000000 + - self._microseconds) - - def __floordiv__(self, other): - if not isinstance(other, (int, timedelta)): - return NotImplemented - usec = self._to_microseconds() - if isinstance(other, timedelta): - return usec // other._to_microseconds() - if isinstance(other, int): - return timedelta(0, 0, usec // other) - - def __truediv__(self, other): - if not isinstance(other, (int, float, timedelta)): - return NotImplemented - usec = self._to_microseconds() - if isinstance(other, timedelta): - return usec / other._to_microseconds() - if isinstance(other, int): - return timedelta(0, 0, _divide_and_round(usec, other)) - if isinstance(other, float): - a, b = other.as_integer_ratio() - return timedelta(0, 0, _divide_and_round(b * usec, a)) - - def __mod__(self, other): - if isinstance(other, timedelta): - r = self._to_microseconds() % other._to_microseconds() - return timedelta(0, 0, r) - return NotImplemented - - def __divmod__(self, other): - if isinstance(other, timedelta): - q, r = divmod(self._to_microseconds(), - other._to_microseconds()) - return q, timedelta(0, 0, r) - return NotImplemented - - # Comparisons of timedelta objects with other. - - def __eq__(self, other): - if isinstance(other, timedelta): - return self._cmp(other) == 0 - else: - return NotImplemented - - def __le__(self, other): - if isinstance(other, timedelta): - return self._cmp(other) <= 0 - else: - return NotImplemented - - def __lt__(self, other): - if isinstance(other, timedelta): - return self._cmp(other) < 0 - else: - return NotImplemented - - def __ge__(self, other): - if isinstance(other, timedelta): - return self._cmp(other) >= 0 - else: - return NotImplemented - - def __gt__(self, other): - if isinstance(other, timedelta): - return self._cmp(other) > 0 - else: - return NotImplemented - - def _cmp(self, other): - assert isinstance(other, timedelta) - return _cmp(self._getstate(), other._getstate()) - - def __hash__(self): - if self._hashcode == -1: - self._hashcode = hash(self._getstate()) - return self._hashcode - - def __bool__(self): - return (self._days != 0 or - self._seconds != 0 or - self._microseconds != 0) - - # Pickle support. - - def _getstate(self): - return (self._days, self._seconds, self._microseconds) - - def __reduce__(self): - return (self.__class__, self._getstate()) - -timedelta.min = timedelta(-999999999) -timedelta.max = timedelta(days=999999999, hours=23, minutes=59, seconds=59, - microseconds=999999) -timedelta.resolution = timedelta(microseconds=1) - -class date: - """Concrete date type. - - Constructors: - - __new__() - fromtimestamp() - today() - fromordinal() - strptime() - - Operators: - - __repr__, __str__ - __eq__, __le__, __lt__, __ge__, __gt__, __hash__ - __add__, __radd__, __sub__ (add/radd only with timedelta arg) - - Methods: - - timetuple() - toordinal() - weekday() - isoweekday(), isocalendar(), isoformat() - ctime() - strftime() - - Properties (readonly): - year, month, day - """ - __slots__ = '_year', '_month', '_day', '_hashcode' - - def __new__(cls, year, month=None, day=None): - """Constructor. - - Arguments: - - year, month, day (required, base 1) - """ - if (month is None and - isinstance(year, (bytes, str)) and len(year) == 4 and - 1 <= ord(year[2:3]) <= 12): - # Pickle support - if isinstance(year, str): - try: - year = year.encode('latin1') - except UnicodeEncodeError: - # More informative error message. - raise ValueError( - "Failed to encode latin1 string when unpickling " - "a date object. " - "pickle.load(data, encoding='latin1') is assumed.") - self = object.__new__(cls) - self.__setstate(year) - self._hashcode = -1 - return self - year, month, day = _check_date_fields(year, month, day) - self = object.__new__(cls) - self._year = year - self._month = month - self._day = day - self._hashcode = -1 - return self - - # Additional constructors - - @classmethod - def fromtimestamp(cls, t): - "Construct a date from a POSIX timestamp (like time.time())." - if t is None: - raise TypeError("'NoneType' object cannot be interpreted as an integer") - y, m, d, hh, mm, ss, weekday, jday, dst = _time.localtime(t) - return cls(y, m, d) - - @classmethod - def today(cls): - "Construct a date from time.time()." - t = _time.time() - return cls.fromtimestamp(t) - - @classmethod - def fromordinal(cls, n): - """Construct a date from a proleptic Gregorian ordinal. - - January 1 of year 1 is day 1. Only the year, month and day are - non-zero in the result. - """ - y, m, d = _ord2ymd(n) - return cls(y, m, d) - - @classmethod - def fromisoformat(cls, date_string): - """Construct a date from a string in ISO 8601 format.""" - - if not isinstance(date_string, str): - raise TypeError('Argument must be a str') - - if not date_string.isascii(): - raise ValueError('Argument must be an ASCII str') - - if len(date_string) not in (7, 8, 10): - raise ValueError(f'Invalid isoformat string: {date_string!r}') - - try: - return cls(*_parse_isoformat_date(date_string)) - except Exception: - raise ValueError(f'Invalid isoformat string: {date_string!r}') - - @classmethod - def fromisocalendar(cls, year, week, day): - """Construct a date from the ISO year, week number and weekday. - - This is the inverse of the date.isocalendar() function""" - return cls(*_isoweek_to_gregorian(year, week, day)) - - @classmethod - def strptime(cls, date_string, format): - """Parse a date string according to the given format (like time.strptime()).""" - import _strptime - return _strptime._strptime_datetime_date(cls, date_string, format) - - # Conversions to string - - def __repr__(self): - """Convert to formal string, for repr(). - - >>> d = date(2010, 1, 1) - >>> repr(d) - 'datetime.date(2010, 1, 1)' - """ - return "%s%s(%d, %d, %d)" % (_get_class_module(self), - self.__class__.__qualname__, - self._year, - self._month, - self._day) - # XXX These shouldn't depend on time.localtime(), because that - # clips the usable dates to [1970 .. 2038). At least ctime() is - # easily done without using strftime() -- that's better too because - # strftime("%c", ...) is locale specific. - - - def ctime(self): - "Return ctime() style string." - weekday = self.toordinal() % 7 or 7 - return "%s %s %2d 00:00:00 %04d" % ( - _DAYNAMES[weekday], - _MONTHNAMES[self._month], - self._day, self._year) - - def strftime(self, format): - """ - Format using strftime(). - - Example: "%d/%m/%Y, %H:%M:%S" - """ - return _wrap_strftime(self, format, self.timetuple()) - - def __format__(self, fmt): - if not isinstance(fmt, str): - raise TypeError("must be str, not %s" % type(fmt).__name__) - if len(fmt) != 0: - return self.strftime(fmt) - return str(self) - - def isoformat(self): - """Return the date formatted according to ISO. - - This is 'YYYY-MM-DD'. - - References: - - https://www.w3.org/TR/NOTE-datetime - - https://www.cl.cam.ac.uk/~mgk25/iso-time.html - """ - return "%04d-%02d-%02d" % (self._year, self._month, self._day) - - __str__ = isoformat - - # Read-only field accessors - @property - def year(self): - """year (1-9999)""" - return self._year - - @property - def month(self): - """month (1-12)""" - return self._month - - @property - def day(self): - """day (1-31)""" - return self._day - - # Standard conversions, __eq__, __le__, __lt__, __ge__, __gt__, - # __hash__ (and helpers) - - def timetuple(self): - "Return local time tuple compatible with time.localtime()." - return _build_struct_time(self._year, self._month, self._day, - 0, 0, 0, -1) - - def toordinal(self): - """Return proleptic Gregorian ordinal for the year, month and day. - - January 1 of year 1 is day 1. Only the year, month and day values - contribute to the result. - """ - return _ymd2ord(self._year, self._month, self._day) - - def replace(self, year=None, month=None, day=None): - """Return a new date with new values for the specified fields.""" - if year is None: - year = self._year - if month is None: - month = self._month - if day is None: - day = self._day - return type(self)(year, month, day) - - __replace__ = replace - - # Comparisons of date objects with other. - - def __eq__(self, other): - if isinstance(other, date) and not isinstance(other, datetime): - return self._cmp(other) == 0 - return NotImplemented - - def __le__(self, other): - if isinstance(other, date) and not isinstance(other, datetime): - return self._cmp(other) <= 0 - return NotImplemented - - def __lt__(self, other): - if isinstance(other, date) and not isinstance(other, datetime): - return self._cmp(other) < 0 - return NotImplemented - - def __ge__(self, other): - if isinstance(other, date) and not isinstance(other, datetime): - return self._cmp(other) >= 0 - return NotImplemented - - def __gt__(self, other): - if isinstance(other, date) and not isinstance(other, datetime): - return self._cmp(other) > 0 - return NotImplemented - - def _cmp(self, other): - assert isinstance(other, date) - assert not isinstance(other, datetime) - y, m, d = self._year, self._month, self._day - y2, m2, d2 = other._year, other._month, other._day - return _cmp((y, m, d), (y2, m2, d2)) - - def __hash__(self): - "Hash." - if self._hashcode == -1: - self._hashcode = hash(self._getstate()) - return self._hashcode - - # Computations - - def __add__(self, other): - "Add a date to a timedelta." - if isinstance(other, timedelta): - o = self.toordinal() + other.days - if 0 < o <= _MAXORDINAL: - return type(self).fromordinal(o) - raise OverflowError("result out of range") - return NotImplemented - - __radd__ = __add__ - - def __sub__(self, other): - """Subtract two dates, or a date and a timedelta.""" - if isinstance(other, timedelta): - return self + timedelta(-other.days) - if isinstance(other, date): - days1 = self.toordinal() - days2 = other.toordinal() - return timedelta(days1 - days2) - return NotImplemented - - def weekday(self): - "Return day of the week, where Monday == 0 ... Sunday == 6." - return (self.toordinal() + 6) % 7 - - # Day-of-the-week and week-of-the-year, according to ISO - - def isoweekday(self): - "Return day of the week, where Monday == 1 ... Sunday == 7." - # 1-Jan-0001 is a Monday - return self.toordinal() % 7 or 7 - - def isocalendar(self): - """Return a named tuple containing ISO year, week number, and weekday. - - The first ISO week of the year is the (Mon-Sun) week - containing the year's first Thursday; everything else derives - from that. - - The first week is 1; Monday is 1 ... Sunday is 7. - - ISO calendar algorithm taken from - https://www.phys.uu.nl/~vgent/calendar/isocalendar.htm - (used with permission) - """ - year = self._year - week1monday = _isoweek1monday(year) - today = _ymd2ord(self._year, self._month, self._day) - # Internally, week and day have origin 0 - week, day = divmod(today - week1monday, 7) - if week < 0: - year -= 1 - week1monday = _isoweek1monday(year) - week, day = divmod(today - week1monday, 7) - elif week >= 52: - if today >= _isoweek1monday(year+1): - year += 1 - week = 0 - return _IsoCalendarDate(year, week+1, day+1) - - # Pickle support. - - def _getstate(self): - yhi, ylo = divmod(self._year, 256) - return bytes([yhi, ylo, self._month, self._day]), - - def __setstate(self, string): - yhi, ylo, self._month, self._day = string - self._year = yhi * 256 + ylo - - def __reduce__(self): - return (self.__class__, self._getstate()) - -_date_class = date # so functions w/ args named "date" can get at the class - -date.min = date(1, 1, 1) -date.max = date(9999, 12, 31) -date.resolution = timedelta(days=1) - - -class tzinfo: - """Abstract base class for time zone info classes. - - Subclasses must override the tzname(), utcoffset() and dst() methods. - """ - __slots__ = () - - def tzname(self, dt): - "datetime -> string name of time zone." - raise NotImplementedError("tzinfo subclass must override tzname()") - - def utcoffset(self, dt): - "datetime -> timedelta, positive for east of UTC, negative for west of UTC" - raise NotImplementedError("tzinfo subclass must override utcoffset()") - - def dst(self, dt): - """datetime -> DST offset as timedelta, positive for east of UTC. - - Return 0 if DST not in effect. utcoffset() must include the DST - offset. - """ - raise NotImplementedError("tzinfo subclass must override dst()") - - def fromutc(self, dt): - "datetime in UTC -> datetime in local time." - - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - dtoff = dt.utcoffset() - if dtoff is None: - raise ValueError("fromutc() requires a non-None utcoffset() " - "result") - - # See the long comment block at the end of this file for an - # explanation of this algorithm. - dtdst = dt.dst() - if dtdst is None: - raise ValueError("fromutc() requires a non-None dst() result") - delta = dtoff - dtdst - if delta: - dt += delta - dtdst = dt.dst() - if dtdst is None: - raise ValueError("fromutc(): dt.dst gave inconsistent " - "results; cannot convert") - return dt + dtdst - - # Pickle support. - - def __reduce__(self): - getinitargs = getattr(self, "__getinitargs__", None) - if getinitargs: - args = getinitargs() - else: - args = () - return (self.__class__, args, self.__getstate__()) - - -class IsoCalendarDate(tuple): - - def __new__(cls, year, week, weekday, /): - return super().__new__(cls, (year, week, weekday)) - - @property - def year(self): - return self[0] - - @property - def week(self): - return self[1] - - @property - def weekday(self): - return self[2] - - def __reduce__(self): - # This code is intended to pickle the object without making the - # class public. See https://bugs.python.org/msg352381 - return (tuple, (tuple(self),)) - - def __repr__(self): - return (f'{self.__class__.__name__}' - f'(year={self[0]}, week={self[1]}, weekday={self[2]})') - - -_IsoCalendarDate = IsoCalendarDate -del IsoCalendarDate -_tzinfo_class = tzinfo - -class time: - """Time with time zone. - - Constructors: - - __new__() - strptime() - - Operators: - - __repr__, __str__ - __eq__, __le__, __lt__, __ge__, __gt__, __hash__ - - Methods: - - strftime() - isoformat() - utcoffset() - tzname() - dst() - - Properties (readonly): - hour, minute, second, microsecond, tzinfo, fold - """ - __slots__ = '_hour', '_minute', '_second', '_microsecond', '_tzinfo', '_hashcode', '_fold' - - def __new__(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0): - """Constructor. - - Arguments: - - hour, minute (required) - second, microsecond (default to zero) - tzinfo (default to None) - fold (keyword only, default to zero) - """ - if (isinstance(hour, (bytes, str)) and len(hour) == 6 and - ord(hour[0:1])&0x7F < 24): - # Pickle support - if isinstance(hour, str): - try: - hour = hour.encode('latin1') - except UnicodeEncodeError: - # More informative error message. - raise ValueError( - "Failed to encode latin1 string when unpickling " - "a time object. " - "pickle.load(data, encoding='latin1') is assumed.") - self = object.__new__(cls) - self.__setstate(hour, minute or None) - self._hashcode = -1 - return self - hour, minute, second, microsecond, fold = _check_time_fields( - hour, minute, second, microsecond, fold) - _check_tzinfo_arg(tzinfo) - self = object.__new__(cls) - self._hour = hour - self._minute = minute - self._second = second - self._microsecond = microsecond - self._tzinfo = tzinfo - self._hashcode = -1 - self._fold = fold - return self - - @classmethod - def strptime(cls, date_string, format): - """string, format -> new time parsed from a string (like time.strptime()).""" - import _strptime - return _strptime._strptime_datetime_time(cls, date_string, format) - - # Read-only field accessors - @property - def hour(self): - """hour (0-23)""" - return self._hour - - @property - def minute(self): - """minute (0-59)""" - return self._minute - - @property - def second(self): - """second (0-59)""" - return self._second - - @property - def microsecond(self): - """microsecond (0-999999)""" - return self._microsecond - - @property - def tzinfo(self): - """timezone info object""" - return self._tzinfo - - @property - def fold(self): - return self._fold - - # Standard conversions, __hash__ (and helpers) - - # Comparisons of time objects with other. - - def __eq__(self, other): - if isinstance(other, time): - return self._cmp(other, allow_mixed=True) == 0 - else: - return NotImplemented - - def __le__(self, other): - if isinstance(other, time): - return self._cmp(other) <= 0 - else: - return NotImplemented - - def __lt__(self, other): - if isinstance(other, time): - return self._cmp(other) < 0 - else: - return NotImplemented - - def __ge__(self, other): - if isinstance(other, time): - return self._cmp(other) >= 0 - else: - return NotImplemented - - def __gt__(self, other): - if isinstance(other, time): - return self._cmp(other) > 0 - else: - return NotImplemented - - def _cmp(self, other, allow_mixed=False): - assert isinstance(other, time) - mytz = self._tzinfo - ottz = other._tzinfo - myoff = otoff = None - - if mytz is ottz: - base_compare = True - else: - myoff = self.utcoffset() - otoff = other.utcoffset() - base_compare = myoff == otoff - - if base_compare: - return _cmp((self._hour, self._minute, self._second, - self._microsecond), - (other._hour, other._minute, other._second, - other._microsecond)) - if myoff is None or otoff is None: - if allow_mixed: - return 2 # arbitrary non-zero value - else: - raise TypeError("cannot compare naive and aware times") - myhhmm = self._hour * 60 + self._minute - myoff//timedelta(minutes=1) - othhmm = other._hour * 60 + other._minute - otoff//timedelta(minutes=1) - return _cmp((myhhmm, self._second, self._microsecond), - (othhmm, other._second, other._microsecond)) - - def __hash__(self): - """Hash.""" - if self._hashcode == -1: - if self.fold: - t = self.replace(fold=0) - else: - t = self - tzoff = t.utcoffset() - if not tzoff: # zero or None - self._hashcode = hash(t._getstate()[0]) - else: - h, m = divmod(timedelta(hours=self.hour, minutes=self.minute) - tzoff, - timedelta(hours=1)) - assert not m % timedelta(minutes=1), "whole minute" - m //= timedelta(minutes=1) - if 0 <= h < 24: - self._hashcode = hash(time(h, m, self.second, self.microsecond)) - else: - self._hashcode = hash((h, m, self.second, self.microsecond)) - return self._hashcode - - # Conversion to string - - def _tzstr(self): - """Return formatted timezone offset (+xx:xx) or an empty string.""" - off = self.utcoffset() - return _format_offset(off) - - def __repr__(self): - """Convert to formal string, for repr().""" - if self._microsecond != 0: - s = ", %d, %d" % (self._second, self._microsecond) - elif self._second != 0: - s = ", %d" % self._second - else: - s = "" - s = "%s%s(%d, %d%s)" % (_get_class_module(self), - self.__class__.__qualname__, - self._hour, self._minute, s) - if self._tzinfo is not None: - assert s[-1:] == ")" - s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")" - if self._fold: - assert s[-1:] == ")" - s = s[:-1] + ", fold=1)" - return s - - def isoformat(self, timespec='auto'): - """Return the time formatted according to ISO. - - The full format is 'HH:MM:SS.mmmmmm+zz:zz'. By default, the fractional - part is omitted if self.microsecond == 0. - - The optional argument timespec specifies the number of additional - terms of the time to include. Valid options are 'auto', 'hours', - 'minutes', 'seconds', 'milliseconds' and 'microseconds'. - """ - s = _format_time(self._hour, self._minute, self._second, - self._microsecond, timespec) - tz = self._tzstr() - if tz: - s += tz - return s - - __str__ = isoformat - - @classmethod - def fromisoformat(cls, time_string): - """Construct a time from a string in one of the ISO 8601 formats.""" - if not isinstance(time_string, str): - raise TypeError('fromisoformat: argument must be str') - - # The spec actually requires that time-only ISO 8601 strings start with - # T, but the extended format allows this to be omitted as long as there - # is no ambiguity with date strings. - time_string = time_string.removeprefix('T') - - try: - return cls(*_parse_isoformat_time(time_string)[0]) - except Exception: - raise ValueError(f'Invalid isoformat string: {time_string!r}') - - def strftime(self, format): - """Format using strftime(). The date part of the timestamp passed - to underlying strftime should not be used. - """ - # The year must be >= 1000 else Python's strftime implementation - # can raise a bogus exception. - timetuple = (1900, 1, 1, - self._hour, self._minute, self._second, - 0, 1, -1) - return _wrap_strftime(self, format, timetuple) - - def __format__(self, fmt): - if not isinstance(fmt, str): - raise TypeError("must be str, not %s" % type(fmt).__name__) - if len(fmt) != 0: - return self.strftime(fmt) - return str(self) - - # Timezone functions - - def utcoffset(self): - """Return the timezone offset as timedelta, positive east of UTC - (negative west of UTC).""" - if self._tzinfo is None: - return None - offset = self._tzinfo.utcoffset(None) - _check_utc_offset("utcoffset", offset) - return offset - - def tzname(self): - """Return the timezone name. - - Note that the name is 100% informational -- there's no requirement that - it mean anything in particular. For example, "GMT", "UTC", "-500", - "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. - """ - if self._tzinfo is None: - return None - name = self._tzinfo.tzname(None) - _check_tzname(name) - return name - - def dst(self): - """Return 0 if DST is not in effect, or the DST offset (as timedelta - positive eastward) if DST is in effect. - - This is purely informational; the DST offset has already been added to - the UTC offset returned by utcoffset() if applicable, so there's no - need to consult dst() unless you're interested in displaying the DST - info. - """ - if self._tzinfo is None: - return None - offset = self._tzinfo.dst(None) - _check_utc_offset("dst", offset) - return offset - - def replace(self, hour=None, minute=None, second=None, microsecond=None, - tzinfo=True, *, fold=None): - """Return a new time with new values for the specified fields.""" - if hour is None: - hour = self.hour - if minute is None: - minute = self.minute - if second is None: - second = self.second - if microsecond is None: - microsecond = self.microsecond - if tzinfo is True: - tzinfo = self.tzinfo - if fold is None: - fold = self._fold - return type(self)(hour, minute, second, microsecond, tzinfo, fold=fold) - - __replace__ = replace - - # Pickle support. - - def _getstate(self, protocol=3): - us2, us3 = divmod(self._microsecond, 256) - us1, us2 = divmod(us2, 256) - h = self._hour - if self._fold and protocol > 3: - h += 128 - basestate = bytes([h, self._minute, self._second, - us1, us2, us3]) - if self._tzinfo is None: - return (basestate,) - else: - return (basestate, self._tzinfo) - - def __setstate(self, string, tzinfo): - if tzinfo is not None and not isinstance(tzinfo, _tzinfo_class): - raise TypeError("bad tzinfo state arg") - h, self._minute, self._second, us1, us2, us3 = string - if h > 127: - self._fold = 1 - self._hour = h - 128 - else: - self._fold = 0 - self._hour = h - self._microsecond = (((us1 << 8) | us2) << 8) | us3 - self._tzinfo = tzinfo - - def __reduce_ex__(self, protocol): - return (self.__class__, self._getstate(protocol)) - - def __reduce__(self): - return self.__reduce_ex__(2) - -_time_class = time # so functions w/ args named "time" can get at the class - -time.min = time(0, 0, 0) -time.max = time(23, 59, 59, 999999) -time.resolution = timedelta(microseconds=1) - - -class datetime(date): - """datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) - - The year, month and day arguments are required. tzinfo may be None, or an - instance of a tzinfo subclass. The remaining arguments may be ints. - """ - __slots__ = time.__slots__ - - def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0, - microsecond=0, tzinfo=None, *, fold=0): - if (isinstance(year, (bytes, str)) and len(year) == 10 and - 1 <= ord(year[2:3])&0x7F <= 12): - # Pickle support - if isinstance(year, str): - try: - year = bytes(year, 'latin1') - except UnicodeEncodeError: - # More informative error message. - raise ValueError( - "Failed to encode latin1 string when unpickling " - "a datetime object. " - "pickle.load(data, encoding='latin1') is assumed.") - self = object.__new__(cls) - self.__setstate(year, month) - self._hashcode = -1 - return self - year, month, day = _check_date_fields(year, month, day) - hour, minute, second, microsecond, fold = _check_time_fields( - hour, minute, second, microsecond, fold) - _check_tzinfo_arg(tzinfo) - self = object.__new__(cls) - self._year = year - self._month = month - self._day = day - self._hour = hour - self._minute = minute - self._second = second - self._microsecond = microsecond - self._tzinfo = tzinfo - self._hashcode = -1 - self._fold = fold - return self - - # Read-only field accessors - @property - def hour(self): - """hour (0-23)""" - return self._hour - - @property - def minute(self): - """minute (0-59)""" - return self._minute - - @property - def second(self): - """second (0-59)""" - return self._second - - @property - def microsecond(self): - """microsecond (0-999999)""" - return self._microsecond - - @property - def tzinfo(self): - """timezone info object""" - return self._tzinfo - - @property - def fold(self): - return self._fold - - @classmethod - def _fromtimestamp(cls, t, utc, tz): - """Construct a datetime from a POSIX timestamp (like time.time()). - - A timezone info object may be passed in as well. - """ - frac, t = _math.modf(t) - us = round(frac * 1e6) - if us >= 1000000: - t += 1 - us -= 1000000 - elif us < 0: - t -= 1 - us += 1000000 - - converter = _time.gmtime if utc else _time.localtime - y, m, d, hh, mm, ss, weekday, jday, dst = converter(t) - ss = min(ss, 59) # clamp out leap seconds if the platform has them - result = cls(y, m, d, hh, mm, ss, us, tz) - if tz is None and not utc: - # As of version 2015f max fold in IANA database is - # 23 hours at 1969-09-30 13:00:00 in Kwajalein. - # Let's probe 24 hours in the past to detect a transition: - max_fold_seconds = 24 * 3600 - - # On Windows localtime_s throws an OSError for negative values, - # thus we can't perform fold detection for values of time less - # than the max time fold. See comments in _datetimemodule's - # version of this method for more details. - if t < max_fold_seconds and sys.platform.startswith("win"): - return result - - y, m, d, hh, mm, ss = converter(t - max_fold_seconds)[:6] - probe1 = cls(y, m, d, hh, mm, ss, us, tz) - trans = result - probe1 - timedelta(0, max_fold_seconds) - if trans.days < 0: - y, m, d, hh, mm, ss = converter(t + trans // timedelta(0, 1))[:6] - probe2 = cls(y, m, d, hh, mm, ss, us, tz) - if probe2 == result: - result._fold = 1 - elif tz is not None: - result = tz.fromutc(result) - return result - - @classmethod - def fromtimestamp(cls, timestamp, tz=None): - """Construct a datetime from a POSIX timestamp (like time.time()). - - A timezone info object may be passed in as well. - """ - _check_tzinfo_arg(tz) - - return cls._fromtimestamp(timestamp, tz is not None, tz) - - @classmethod - def utcfromtimestamp(cls, t): - """Construct a naive UTC datetime from a POSIX timestamp.""" - import warnings - warnings.warn("datetime.datetime.utcfromtimestamp() is deprecated and scheduled " - "for removal in a future version. Use timezone-aware " - "objects to represent datetimes in UTC: " - "datetime.datetime.fromtimestamp(t, datetime.UTC).", - DeprecationWarning, - stacklevel=2) - return cls._fromtimestamp(t, True, None) - - @classmethod - def now(cls, tz=None): - "Construct a datetime from time.time() and optional time zone info." - t = _time.time() - return cls.fromtimestamp(t, tz) - - @classmethod - def utcnow(cls): - "Construct a UTC datetime from time.time()." - import warnings - warnings.warn("datetime.datetime.utcnow() is deprecated and scheduled for " - "removal in a future version. Use timezone-aware " - "objects to represent datetimes in UTC: " - "datetime.datetime.now(datetime.UTC).", - DeprecationWarning, - stacklevel=2) - t = _time.time() - return cls._fromtimestamp(t, True, None) - - @classmethod - def combine(cls, date, time, tzinfo=True): - "Construct a datetime from a given date and a given time." - if not isinstance(date, _date_class): - raise TypeError("date argument must be a date instance") - if not isinstance(time, _time_class): - raise TypeError("time argument must be a time instance") - if tzinfo is True: - tzinfo = time.tzinfo - return cls(date.year, date.month, date.day, - time.hour, time.minute, time.second, time.microsecond, - tzinfo, fold=time.fold) - - @classmethod - def fromisoformat(cls, date_string): - """Construct a datetime from a string in one of the ISO 8601 formats.""" - if not isinstance(date_string, str): - raise TypeError('fromisoformat: argument must be str') - - if len(date_string) < 7: - raise ValueError(f'Invalid isoformat string: {date_string!r}') - - # Split this at the separator - try: - separator_location = _find_isoformat_datetime_separator(date_string) - dstr = date_string[0:separator_location] - tstr = date_string[(separator_location+1):] - - date_components = _parse_isoformat_date(dstr) - except ValueError: - raise ValueError( - f'Invalid isoformat string: {date_string!r}') from None - - if tstr: - try: - time_components, became_next_day, error_from_components = _parse_isoformat_time(tstr) - except ValueError: - raise ValueError( - f'Invalid isoformat string: {date_string!r}') from None - else: - if error_from_components: - raise ValueError("minute, second, and microsecond must be 0 when hour is 24") - - if became_next_day: - year, month, day = date_components - # Only wrap day/month when it was previously valid - if month <= 12 and day <= (days_in_month := _days_in_month(year, month)): - # Calculate midnight of the next day - day += 1 - if day > days_in_month: - day = 1 - month += 1 - if month > 12: - month = 1 - year += 1 - date_components = [year, month, day] - else: - time_components = [0, 0, 0, 0, None] - - return cls(*(date_components + time_components)) - - def timetuple(self): - "Return local time tuple compatible with time.localtime()." - dst = self.dst() - if dst is None: - dst = -1 - elif dst: - dst = 1 - else: - dst = 0 - return _build_struct_time(self.year, self.month, self.day, - self.hour, self.minute, self.second, - dst) - - def _mktime(self): - """Return integer POSIX timestamp.""" - epoch = datetime(1970, 1, 1) - max_fold_seconds = 24 * 3600 - t = (self - epoch) // timedelta(0, 1) - def local(u): - y, m, d, hh, mm, ss = _time.localtime(u)[:6] - return (datetime(y, m, d, hh, mm, ss) - epoch) // timedelta(0, 1) - - # Our goal is to solve t = local(u) for u. - a = local(t) - t - u1 = t - a - t1 = local(u1) - if t1 == t: - # We found one solution, but it may not be the one we need. - # Look for an earlier solution (if `fold` is 0), or a - # later one (if `fold` is 1). - u2 = u1 + (-max_fold_seconds, max_fold_seconds)[self.fold] - b = local(u2) - u2 - if a == b: - return u1 - else: - b = t1 - u1 - assert a != b - u2 = t - b - t2 = local(u2) - if t2 == t: - return u2 - if t1 == t: - return u1 - # We have found both offsets a and b, but neither t - a nor t - b is - # a solution. This means t is in the gap. - return (max, min)[self.fold](u1, u2) - - - def timestamp(self): - "Return POSIX timestamp as float" - if self._tzinfo is None: - s = self._mktime() - return s + self.microsecond / 1e6 - else: - return (self - _EPOCH).total_seconds() - - def utctimetuple(self): - "Return UTC time tuple compatible with time.gmtime()." - offset = self.utcoffset() - if offset: - self -= offset - y, m, d = self.year, self.month, self.day - hh, mm, ss = self.hour, self.minute, self.second - return _build_struct_time(y, m, d, hh, mm, ss, 0) - - def date(self): - "Return the date part." - return date(self._year, self._month, self._day) - - def time(self): - "Return the time part, with tzinfo None." - return time(self.hour, self.minute, self.second, self.microsecond, fold=self.fold) - - def timetz(self): - "Return the time part, with same tzinfo." - return time(self.hour, self.minute, self.second, self.microsecond, - self._tzinfo, fold=self.fold) - - def replace(self, year=None, month=None, day=None, hour=None, - minute=None, second=None, microsecond=None, tzinfo=True, - *, fold=None): - """Return a new datetime with new values for the specified fields.""" - if year is None: - year = self.year - if month is None: - month = self.month - if day is None: - day = self.day - if hour is None: - hour = self.hour - if minute is None: - minute = self.minute - if second is None: - second = self.second - if microsecond is None: - microsecond = self.microsecond - if tzinfo is True: - tzinfo = self.tzinfo - if fold is None: - fold = self.fold - return type(self)(year, month, day, hour, minute, second, - microsecond, tzinfo, fold=fold) - - __replace__ = replace - - def _local_timezone(self): - if self.tzinfo is None: - ts = self._mktime() - # Detect gap - ts2 = self.replace(fold=1-self.fold)._mktime() - if ts2 != ts: # This happens in a gap or a fold - if (ts2 > ts) == self.fold: - ts = ts2 - else: - ts = (self - _EPOCH) // timedelta(seconds=1) - localtm = _time.localtime(ts) - local = datetime(*localtm[:6]) - # Extract TZ data - gmtoff = localtm.tm_gmtoff - zone = localtm.tm_zone - return timezone(timedelta(seconds=gmtoff), zone) - - def astimezone(self, tz=None): - if tz is None: - tz = self._local_timezone() - elif not isinstance(tz, tzinfo): - raise TypeError("tz argument must be an instance of tzinfo") - - mytz = self.tzinfo - if mytz is None: - mytz = self._local_timezone() - myoffset = mytz.utcoffset(self) - else: - myoffset = mytz.utcoffset(self) - if myoffset is None: - mytz = self.replace(tzinfo=None)._local_timezone() - myoffset = mytz.utcoffset(self) - - if tz is mytz: - return self - - # Convert self to UTC, and attach the new time zone object. - utc = (self - myoffset).replace(tzinfo=tz) - - # Convert from UTC to tz's local time. - return tz.fromutc(utc) - - # Ways to produce a string. - - def ctime(self): - "Return ctime() style string." - weekday = self.toordinal() % 7 or 7 - return "%s %s %2d %02d:%02d:%02d %04d" % ( - _DAYNAMES[weekday], - _MONTHNAMES[self._month], - self._day, - self._hour, self._minute, self._second, - self._year) - - def isoformat(self, sep='T', timespec='auto'): - """Return the time formatted according to ISO. - - The full format looks like 'YYYY-MM-DD HH:MM:SS.mmmmmm'. - By default, the fractional part is omitted if self.microsecond == 0. - - If self.tzinfo is not None, the UTC offset is also attached, giving - a full format of 'YYYY-MM-DD HH:MM:SS.mmmmmm+HH:MM'. - - Optional argument sep specifies the separator between date and - time, default 'T'. - - The optional argument timespec specifies the number of additional - terms of the time to include. Valid options are 'auto', 'hours', - 'minutes', 'seconds', 'milliseconds' and 'microseconds'. - """ - s = ("%04d-%02d-%02d%c" % (self._year, self._month, self._day, sep) + - _format_time(self._hour, self._minute, self._second, - self._microsecond, timespec)) - - off = self.utcoffset() - tz = _format_offset(off) - if tz: - s += tz - - return s - - def __repr__(self): - """Convert to formal string, for repr().""" - L = [self._year, self._month, self._day, # These are never zero - self._hour, self._minute, self._second, self._microsecond] - if L[-1] == 0: - del L[-1] - if L[-1] == 0: - del L[-1] - s = "%s%s(%s)" % (_get_class_module(self), - self.__class__.__qualname__, - ", ".join(map(str, L))) - if self._tzinfo is not None: - assert s[-1:] == ")" - s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")" - if self._fold: - assert s[-1:] == ")" - s = s[:-1] + ", fold=1)" - return s - - def __str__(self): - "Convert to string, for str()." - return self.isoformat(sep=' ') - - @classmethod - def strptime(cls, date_string, format): - 'string, format -> new datetime parsed from a string (like time.strptime()).' - import _strptime - return _strptime._strptime_datetime_datetime(cls, date_string, format) - - def utcoffset(self): - """Return the timezone offset as timedelta positive east of UTC (negative west of - UTC).""" - if self._tzinfo is None: - return None - offset = self._tzinfo.utcoffset(self) - _check_utc_offset("utcoffset", offset) - return offset - - def tzname(self): - """Return the timezone name. - - Note that the name is 100% informational -- there's no requirement that - it mean anything in particular. For example, "GMT", "UTC", "-500", - "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. - """ - if self._tzinfo is None: - return None - name = self._tzinfo.tzname(self) - _check_tzname(name) - return name - - def dst(self): - """Return 0 if DST is not in effect, or the DST offset (as timedelta - positive eastward) if DST is in effect. - - This is purely informational; the DST offset has already been added to - the UTC offset returned by utcoffset() if applicable, so there's no - need to consult dst() unless you're interested in displaying the DST - info. - """ - if self._tzinfo is None: - return None - offset = self._tzinfo.dst(self) - _check_utc_offset("dst", offset) - return offset - - # Comparisons of datetime objects with other. - - def __eq__(self, other): - if isinstance(other, datetime): - return self._cmp(other, allow_mixed=True) == 0 - else: - return NotImplemented - - def __le__(self, other): - if isinstance(other, datetime): - return self._cmp(other) <= 0 - else: - return NotImplemented - - def __lt__(self, other): - if isinstance(other, datetime): - return self._cmp(other) < 0 - else: - return NotImplemented - - def __ge__(self, other): - if isinstance(other, datetime): - return self._cmp(other) >= 0 - else: - return NotImplemented - - def __gt__(self, other): - if isinstance(other, datetime): - return self._cmp(other) > 0 - else: - return NotImplemented - - def _cmp(self, other, allow_mixed=False): - assert isinstance(other, datetime) - mytz = self._tzinfo - ottz = other._tzinfo - myoff = otoff = None - - if mytz is ottz: - base_compare = True - else: - myoff = self.utcoffset() - otoff = other.utcoffset() - # Assume that allow_mixed means that we are called from __eq__ - if allow_mixed: - if myoff != self.replace(fold=not self.fold).utcoffset(): - return 2 - if otoff != other.replace(fold=not other.fold).utcoffset(): - return 2 - base_compare = myoff == otoff - - if base_compare: - return _cmp((self._year, self._month, self._day, - self._hour, self._minute, self._second, - self._microsecond), - (other._year, other._month, other._day, - other._hour, other._minute, other._second, - other._microsecond)) - if myoff is None or otoff is None: - if allow_mixed: - return 2 # arbitrary non-zero value - else: - raise TypeError("cannot compare naive and aware datetimes") - # XXX What follows could be done more efficiently... - diff = self - other # this will take offsets into account - if diff.days < 0: - return -1 - return diff and 1 or 0 - - def __add__(self, other): - "Add a datetime and a timedelta." - if not isinstance(other, timedelta): - return NotImplemented - delta = timedelta(self.toordinal(), - hours=self._hour, - minutes=self._minute, - seconds=self._second, - microseconds=self._microsecond) - delta += other - hour, rem = divmod(delta.seconds, 3600) - minute, second = divmod(rem, 60) - if 0 < delta.days <= _MAXORDINAL: - return type(self).combine(date.fromordinal(delta.days), - time(hour, minute, second, - delta.microseconds, - tzinfo=self._tzinfo)) - raise OverflowError("result out of range") - - __radd__ = __add__ - - def __sub__(self, other): - "Subtract two datetimes, or a datetime and a timedelta." - if not isinstance(other, datetime): - if isinstance(other, timedelta): - return self + -other - return NotImplemented - - days1 = self.toordinal() - days2 = other.toordinal() - secs1 = self._second + self._minute * 60 + self._hour * 3600 - secs2 = other._second + other._minute * 60 + other._hour * 3600 - base = timedelta(days1 - days2, - secs1 - secs2, - self._microsecond - other._microsecond) - if self._tzinfo is other._tzinfo: - return base - myoff = self.utcoffset() - otoff = other.utcoffset() - if myoff == otoff: - return base - if myoff is None or otoff is None: - raise TypeError("cannot mix naive and timezone-aware time") - return base + otoff - myoff - - def __hash__(self): - if self._hashcode == -1: - if self.fold: - t = self.replace(fold=0) - else: - t = self - tzoff = t.utcoffset() - if tzoff is None: - self._hashcode = hash(t._getstate()[0]) - else: - days = _ymd2ord(self.year, self.month, self.day) - seconds = self.hour * 3600 + self.minute * 60 + self.second - self._hashcode = hash(timedelta(days, seconds, self.microsecond) - tzoff) - return self._hashcode - - # Pickle support. - - def _getstate(self, protocol=3): - yhi, ylo = divmod(self._year, 256) - us2, us3 = divmod(self._microsecond, 256) - us1, us2 = divmod(us2, 256) - m = self._month - if self._fold and protocol > 3: - m += 128 - basestate = bytes([yhi, ylo, m, self._day, - self._hour, self._minute, self._second, - us1, us2, us3]) - if self._tzinfo is None: - return (basestate,) - else: - return (basestate, self._tzinfo) - - def __setstate(self, string, tzinfo): - if tzinfo is not None and not isinstance(tzinfo, _tzinfo_class): - raise TypeError("bad tzinfo state arg") - (yhi, ylo, m, self._day, self._hour, - self._minute, self._second, us1, us2, us3) = string - if m > 127: - self._fold = 1 - self._month = m - 128 - else: - self._fold = 0 - self._month = m - self._year = yhi * 256 + ylo - self._microsecond = (((us1 << 8) | us2) << 8) | us3 - self._tzinfo = tzinfo - - def __reduce_ex__(self, protocol): - return (self.__class__, self._getstate(protocol)) - - def __reduce__(self): - return self.__reduce_ex__(2) - - -datetime.min = datetime(1, 1, 1) -datetime.max = datetime(9999, 12, 31, 23, 59, 59, 999999) -datetime.resolution = timedelta(microseconds=1) - - -def _isoweek1monday(year): - # Helper to calculate the day number of the Monday starting week 1 - THURSDAY = 3 - firstday = _ymd2ord(year, 1, 1) - firstweekday = (firstday + 6) % 7 # See weekday() above - week1monday = firstday - firstweekday - if firstweekday > THURSDAY: - week1monday += 7 - return week1monday - - -class timezone(tzinfo): - __slots__ = '_offset', '_name' - - # Sentinel value to disallow None - _Omitted = object() - def __new__(cls, offset, name=_Omitted): - if not isinstance(offset, timedelta): - raise TypeError("offset must be a timedelta") - if name is cls._Omitted: - if not offset: - return cls.utc - name = None - elif not isinstance(name, str): - raise TypeError("name must be a string") - if not cls._minoffset <= offset <= cls._maxoffset: - raise ValueError("offset must be a timedelta " - "strictly between -timedelta(hours=24) and " - f"timedelta(hours=24), not {offset!r}") - return cls._create(offset, name) - - def __init_subclass__(cls): - raise TypeError("type 'datetime.timezone' is not an acceptable base type") - - @classmethod - def _create(cls, offset, name=None): - self = tzinfo.__new__(cls) - self._offset = offset - self._name = name - return self - - def __getinitargs__(self): - """pickle support""" - if self._name is None: - return (self._offset,) - return (self._offset, self._name) - - def __eq__(self, other): - if isinstance(other, timezone): - return self._offset == other._offset - return NotImplemented - - def __hash__(self): - return hash(self._offset) - - def __repr__(self): - """Convert to formal string, for repr(). - - >>> tz = timezone.utc - >>> repr(tz) - 'datetime.timezone.utc' - >>> tz = timezone(timedelta(hours=-5), 'EST') - >>> repr(tz) - "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')" - """ - if self is self.utc: - return 'datetime.timezone.utc' - if self._name is None: - return "%s%s(%r)" % (_get_class_module(self), - self.__class__.__qualname__, - self._offset) - return "%s%s(%r, %r)" % (_get_class_module(self), - self.__class__.__qualname__, - self._offset, self._name) - - def __str__(self): - return self.tzname(None) - - def utcoffset(self, dt): - if isinstance(dt, datetime) or dt is None: - return self._offset - raise TypeError("utcoffset() argument must be a datetime instance" - " or None") - - def tzname(self, dt): - if isinstance(dt, datetime) or dt is None: - if self._name is None: - return self._name_from_offset(self._offset) - return self._name - raise TypeError("tzname() argument must be a datetime instance" - " or None") - - def dst(self, dt): - if isinstance(dt, datetime) or dt is None: - return None - raise TypeError("dst() argument must be a datetime instance" - " or None") - - def fromutc(self, dt): - if isinstance(dt, datetime): - if dt.tzinfo is not self: - raise ValueError("fromutc: dt.tzinfo " - "is not self") - return dt + self._offset - raise TypeError("fromutc() argument must be a datetime instance" - " or None") - - _maxoffset = timedelta(hours=24, microseconds=-1) - _minoffset = -_maxoffset - - @staticmethod - def _name_from_offset(delta): - if not delta: - return 'UTC' - if delta < timedelta(0): - sign = '-' - delta = -delta - else: - sign = '+' - hours, rest = divmod(delta, timedelta(hours=1)) - minutes, rest = divmod(rest, timedelta(minutes=1)) - seconds = rest.seconds - microseconds = rest.microseconds - if microseconds: - return (f'UTC{sign}{hours:02d}:{minutes:02d}:{seconds:02d}' - f'.{microseconds:06d}') - if seconds: - return f'UTC{sign}{hours:02d}:{minutes:02d}:{seconds:02d}' - return f'UTC{sign}{hours:02d}:{minutes:02d}' - -UTC = timezone.utc = timezone._create(timedelta(0)) - -# bpo-37642: These attributes are rounded to the nearest minute for backwards -# compatibility, even though the constructor will accept a wider range of -# values. This may change in the future. -timezone.min = timezone._create(-timedelta(hours=23, minutes=59)) -timezone.max = timezone._create(timedelta(hours=23, minutes=59)) -_EPOCH = datetime(1970, 1, 1, tzinfo=timezone.utc) - -# Some time zone algebra. For a datetime x, let -# x.n = x stripped of its timezone -- its naive time. -# x.o = x.utcoffset(), and assuming that doesn't raise an exception or -# return None -# x.d = x.dst(), and assuming that doesn't raise an exception or -# return None -# x.s = x's standard offset, x.o - x.d -# -# Now some derived rules, where k is a duration (timedelta). -# -# 1. x.o = x.s + x.d -# This follows from the definition of x.s. -# -# 2. If x and y have the same tzinfo member, x.s = y.s. -# This is actually a requirement, an assumption we need to make about -# sane tzinfo classes. -# -# 3. The naive UTC time corresponding to x is x.n - x.o. -# This is again a requirement for a sane tzinfo class. -# -# 4. (x+k).s = x.s -# This follows from #2, and that datetime.timetz+timedelta preserves tzinfo. -# -# 5. (x+k).n = x.n + k -# Again follows from how arithmetic is defined. -# -# Now we can explain tz.fromutc(x). Let's assume it's an interesting case -# (meaning that the various tzinfo methods exist, and don't blow up or return -# None when called). -# -# The function wants to return a datetime y with timezone tz, equivalent to x. -# x is already in UTC. -# -# By #3, we want -# -# y.n - y.o = x.n [1] -# -# The algorithm starts by attaching tz to x.n, and calling that y. So -# x.n = y.n at the start. Then it wants to add a duration k to y, so that [1] -# becomes true; in effect, we want to solve [2] for k: -# -# (y+k).n - (y+k).o = x.n [2] -# -# By #1, this is the same as -# -# (y+k).n - ((y+k).s + (y+k).d) = x.n [3] -# -# By #5, (y+k).n = y.n + k, which equals x.n + k because x.n=y.n at the start. -# Substituting that into [3], -# -# x.n + k - (y+k).s - (y+k).d = x.n; the x.n terms cancel, leaving -# k - (y+k).s - (y+k).d = 0; rearranging, -# k = (y+k).s - (y+k).d; by #4, (y+k).s == y.s, so -# k = y.s - (y+k).d -# -# On the RHS, (y+k).d can't be computed directly, but y.s can be, and we -# approximate k by ignoring the (y+k).d term at first. Note that k can't be -# very large, since all offset-returning methods return a duration of magnitude -# less than 24 hours. For that reason, if y is firmly in std time, (y+k).d must -# be 0, so ignoring it has no consequence then. -# -# In any case, the new value is -# -# z = y + y.s [4] -# -# It's helpful to step back at look at [4] from a higher level: it's simply -# mapping from UTC to tz's standard time. -# -# At this point, if -# -# z.n - z.o = x.n [5] -# -# we have an equivalent time, and are almost done. The insecurity here is -# at the start of daylight time. Picture US Eastern for concreteness. The wall -# time jumps from 1:59 to 3:00, and wall hours of the form 2:MM don't make good -# sense then. The docs ask that an Eastern tzinfo class consider such a time to -# be EDT (because it's "after 2"), which is a redundant spelling of 1:MM EST -# on the day DST starts. We want to return the 1:MM EST spelling because that's -# the only spelling that makes sense on the local wall clock. -# -# In fact, if [5] holds at this point, we do have the standard-time spelling, -# but that takes a bit of proof. We first prove a stronger result. What's the -# difference between the LHS and RHS of [5]? Let -# -# diff = x.n - (z.n - z.o) [6] -# -# Now -# z.n = by [4] -# (y + y.s).n = by #5 -# y.n + y.s = since y.n = x.n -# x.n + y.s = since z and y are have the same tzinfo member, -# y.s = z.s by #2 -# x.n + z.s -# -# Plugging that back into [6] gives -# -# diff = -# x.n - ((x.n + z.s) - z.o) = expanding -# x.n - x.n - z.s + z.o = cancelling -# - z.s + z.o = by #2 -# z.d -# -# So diff = z.d. -# -# If [5] is true now, diff = 0, so z.d = 0 too, and we have the standard-time -# spelling we wanted in the endcase described above. We're done. Contrarily, -# if z.d = 0, then we have a UTC equivalent, and are also done. -# -# If [5] is not true now, diff = z.d != 0, and z.d is the offset we need to -# add to z (in effect, z is in tz's standard time, and we need to shift the -# local clock into tz's daylight time). -# -# Let -# -# z' = z + z.d = z + diff [7] -# -# and we can again ask whether -# -# z'.n - z'.o = x.n [8] -# -# If so, we're done. If not, the tzinfo class is insane, according to the -# assumptions we've made. This also requires a bit of proof. As before, let's -# compute the difference between the LHS and RHS of [8] (and skipping some of -# the justifications for the kinds of substitutions we've done several times -# already): -# -# diff' = x.n - (z'.n - z'.o) = replacing z'.n via [7] -# x.n - (z.n + diff - z'.o) = replacing diff via [6] -# x.n - (z.n + x.n - (z.n - z.o) - z'.o) = -# x.n - z.n - x.n + z.n - z.o + z'.o = cancel x.n -# - z.n + z.n - z.o + z'.o = cancel z.n -# - z.o + z'.o = #1 twice -# -z.s - z.d + z'.s + z'.d = z and z' have same tzinfo -# z'.d - z.d -# -# So z' is UTC-equivalent to x iff z'.d = z.d at this point. If they are equal, -# we've found the UTC-equivalent so are done. In fact, we stop with [7] and -# return z', not bothering to compute z'.d. -# -# How could z.d and z'd differ? z' = z + z.d [7], so merely moving z' by -# a dst() offset, and starting *from* a time already in DST (we know z.d != 0), -# would have to change the result dst() returns: we start in DST, and moving -# a little further into it takes us out of DST. -# -# There isn't a sane case where this can happen. The closest it gets is at -# the end of DST, where there's an hour in UTC with no spelling in a hybrid -# tzinfo class. In US Eastern, that's 5:MM UTC = 0:MM EST = 1:MM EDT. During -# that hour, on an Eastern clock 1:MM is taken as being in standard time (6:MM -# UTC) because the docs insist on that, but 0:MM is taken as being in daylight -# time (4:MM UTC). There is no local time mapping to 5:MM UTC. The local -# clock jumps from 1:59 back to 1:00 again, and repeats the 1:MM hour in -# standard time. Since that's what the local clock *does*, we want to map both -# UTC hours 5:MM and 6:MM to 1:MM Eastern. The result is ambiguous -# in local time, but so it goes -- it's the way the local clock works. -# -# When x = 5:MM UTC is the input to this algorithm, x.o=0, y.o=-5 and y.d=0, -# so z=0:MM. z.d=60 (minutes) then, so [5] doesn't hold and we keep going. -# z' = z + z.d = 1:MM then, and z'.d=0, and z'.d - z.d = -60 != 0 so [8] -# (correctly) concludes that z' is not UTC-equivalent to x. -# -# Because we know z.d said z was in daylight time (else [5] would have held and -# we would have stopped then), and we know z.d != z'.d (else [8] would have held -# and we have stopped then), and there are only 2 possible values dst() can -# return in Eastern, it follows that z'.d must be 0 (which it is in the example, -# but the reasoning doesn't depend on the example -- it depends on there being -# two possible dst() outcomes, one zero and the other non-zero). Therefore -# z' must be in standard time, and is the spelling we want in this case. -# -# Note again that z' is not UTC-equivalent as far as the hybrid tzinfo class is -# concerned (because it takes z' as being in standard time rather than the -# daylight time we intend here), but returning it gives the real-life "local -# clock repeats an hour" behavior when mapping the "unspellable" UTC hour into -# tz. -# -# When the input is 6:MM, z=1:MM and z.d=0, and we stop at once, again with -# the 1:MM standard time spelling we want. -# -# So how can this break? One of the assumptions must be violated. Two -# possibilities: -# -# 1) [2] effectively says that y.s is invariant across all y belong to a given -# time zone. This isn't true if, for political reasons or continental drift, -# a region decides to change its base offset from UTC. -# -# 2) There may be versions of "double daylight" time where the tail end of -# the analysis gives up a step too early. I haven't thought about that -# enough to say. -# -# In any case, it's clear that the default fromutc() is strong enough to handle -# "almost all" time zones: so long as the standard offset is invariant, it -# doesn't matter if daylight time transition points change from year to year, or -# if daylight time is skipped in some years; it doesn't matter how large or -# small dst() may get within its bounds; and it doesn't even matter if some -# perverse time zone returns a negative dst()). So a breaking case must be -# pretty bizarre, and a tzinfo subclass can override fromutc() if it is. diff --git a/Python314_4_x86_Template/Lib/_pydecimal.py b/Python314_4_x86_Template/Lib/_pydecimal.py deleted file mode 100644 index 97a629fe9..000000000 --- a/Python314_4_x86_Template/Lib/_pydecimal.py +++ /dev/null @@ -1,6401 +0,0 @@ -# Copyright (c) 2004 Python Software Foundation. -# All rights reserved. - -# Written by Eric Price <eprice at tjhsst.edu> -# and Facundo Batista <facundo at taniquetil.com.ar> -# and Raymond Hettinger <python at rcn.com> -# and Aahz <aahz at pobox.com> -# and Tim Peters - -# This module should be kept in sync with the latest updates of the -# IBM specification as it evolves. Those updates will be treated -# as bug fixes (deviation from the spec is a compatibility, usability -# bug) and will be backported. At this point the spec is stabilizing -# and the updates are becoming fewer, smaller, and less significant. - -"""Python decimal arithmetic module""" - -__all__ = [ - # Two major classes - 'Decimal', 'Context', - - # Named tuple representation - 'DecimalTuple', - - # Contexts - 'DefaultContext', 'BasicContext', 'ExtendedContext', - - # Exceptions - 'DecimalException', 'Clamped', 'InvalidOperation', 'DivisionByZero', - 'Inexact', 'Rounded', 'Subnormal', 'Overflow', 'Underflow', - 'FloatOperation', - - # Exceptional conditions that trigger InvalidOperation - 'DivisionImpossible', 'InvalidContext', 'ConversionSyntax', 'DivisionUndefined', - - # Constants for use in setting up contexts - 'ROUND_DOWN', 'ROUND_HALF_UP', 'ROUND_HALF_EVEN', 'ROUND_CEILING', - 'ROUND_FLOOR', 'ROUND_UP', 'ROUND_HALF_DOWN', 'ROUND_05UP', - - # Functions for manipulating contexts - 'setcontext', 'getcontext', 'localcontext', 'IEEEContext', - - # Limits for the C version for compatibility - 'MAX_PREC', 'MAX_EMAX', 'MIN_EMIN', 'MIN_ETINY', 'IEEE_CONTEXT_MAX_BITS', - - # C version: compile time choice that enables the thread local context (deprecated, now always true) - 'HAVE_THREADS', - - # C version: compile time choice that enables the coroutine local context - 'HAVE_CONTEXTVAR' -] - -__xname__ = __name__ # sys.modules lookup (--without-threads) -__name__ = 'decimal' # For pickling -__version__ = '1.70' # Highest version of the spec this complies with - # See http://speleotrove.com/decimal/ -__libmpdec_version__ = "2.4.2" # compatible libmpdec version - -import math as _math -import numbers as _numbers -import sys - -try: - from collections import namedtuple as _namedtuple - DecimalTuple = _namedtuple('DecimalTuple', 'sign digits exponent', module='decimal') -except ImportError: - DecimalTuple = lambda *args: args - -# Rounding -ROUND_DOWN = 'ROUND_DOWN' -ROUND_HALF_UP = 'ROUND_HALF_UP' -ROUND_HALF_EVEN = 'ROUND_HALF_EVEN' -ROUND_CEILING = 'ROUND_CEILING' -ROUND_FLOOR = 'ROUND_FLOOR' -ROUND_UP = 'ROUND_UP' -ROUND_HALF_DOWN = 'ROUND_HALF_DOWN' -ROUND_05UP = 'ROUND_05UP' - -# Compatibility with the C version -HAVE_THREADS = True -HAVE_CONTEXTVAR = True -if sys.maxsize == 2**63-1: - MAX_PREC = 999999999999999999 - MAX_EMAX = 999999999999999999 - MIN_EMIN = -999999999999999999 - IEEE_CONTEXT_MAX_BITS = 512 -else: - MAX_PREC = 425000000 - MAX_EMAX = 425000000 - MIN_EMIN = -425000000 - IEEE_CONTEXT_MAX_BITS = 256 - -MIN_ETINY = MIN_EMIN - (MAX_PREC-1) - -# Errors - -class DecimalException(ArithmeticError): - """Base exception class. - - Used exceptions derive from this. - If an exception derives from another exception besides this (such as - Underflow (Inexact, Rounded, Subnormal)) that indicates that it is only - called if the others are present. This isn't actually used for - anything, though. - - handle -- Called when context._raise_error is called and the - trap_enabler is not set. First argument is self, second is the - context. More arguments can be given, those being after - the explanation in _raise_error (For example, - context._raise_error(NewError, '(-x)!', self._sign) would - call NewError().handle(context, self._sign).) - - To define a new exception, it should be sufficient to have it derive - from DecimalException. - """ - def handle(self, context, *args): - pass - - -class Clamped(DecimalException): - """Exponent of a 0 changed to fit bounds. - - This occurs and signals clamped if the exponent of a result has been - altered in order to fit the constraints of a specific concrete - representation. This may occur when the exponent of a zero result would - be outside the bounds of a representation, or when a large normal - number would have an encoded exponent that cannot be represented. In - this latter case, the exponent is reduced to fit and the corresponding - number of zero digits are appended to the coefficient ("fold-down"). - """ - -class InvalidOperation(DecimalException): - """An invalid operation was performed. - - Various bad things cause this: - - Something creates a signaling NaN - -INF + INF - 0 * (+-)INF - (+-)INF / (+-)INF - x % 0 - (+-)INF % x - x._rescale( non-integer ) - sqrt(-x) , x > 0 - 0 ** 0 - x ** (non-integer) - x ** (+-)INF - An operand is invalid - - The result of the operation after this is a quiet positive NaN, - except when the cause is a signaling NaN, in which case the result is - also a quiet NaN, but with the original sign, and an optional - diagnostic information. - """ - def handle(self, context, *args): - if args: - ans = _dec_from_triple(args[0]._sign, args[0]._int, 'n', True) - return ans._fix_nan(context) - return _NaN - -class ConversionSyntax(InvalidOperation): - """Trying to convert badly formed string. - - This occurs and signals invalid-operation if a string is being - converted to a number and it does not conform to the numeric string - syntax. The result is [0,qNaN]. - """ - def handle(self, context, *args): - return _NaN - -class DivisionByZero(DecimalException, ZeroDivisionError): - """Division by 0. - - This occurs and signals division-by-zero if division of a finite number - by zero was attempted (during a divide-integer or divide operation, or a - power operation with negative right-hand operand), and the dividend was - not zero. - - The result of the operation is [sign,inf], where sign is the exclusive - or of the signs of the operands for divide, or is 1 for an odd power of - -0, for power. - """ - - def handle(self, context, sign, *args): - return _SignedInfinity[sign] - -class DivisionImpossible(InvalidOperation): - """Cannot perform the division adequately. - - This occurs and signals invalid-operation if the integer result of a - divide-integer or remainder operation had too many digits (would be - longer than precision). The result is [0,qNaN]. - """ - - def handle(self, context, *args): - return _NaN - -class DivisionUndefined(InvalidOperation, ZeroDivisionError): - """Undefined result of division. - - This occurs and signals invalid-operation if division by zero was - attempted (during a divide-integer, divide, or remainder operation), and - the dividend is also zero. The result is [0,qNaN]. - """ - - def handle(self, context, *args): - return _NaN - -class Inexact(DecimalException): - """Had to round, losing information. - - This occurs and signals inexact whenever the result of an operation is - not exact (that is, it needed to be rounded and any discarded digits - were non-zero), or if an overflow or underflow condition occurs. The - result in all cases is unchanged. - - The inexact signal may be tested (or trapped) to determine if a given - operation (or sequence of operations) was inexact. - """ - -class InvalidContext(InvalidOperation): - """Invalid context. Unknown rounding, for example. - - This occurs and signals invalid-operation if an invalid context was - detected during an operation. This can occur if contexts are not checked - on creation and either the precision exceeds the capability of the - underlying concrete representation or an unknown or unsupported rounding - was specified. These aspects of the context need only be checked when - the values are required to be used. The result is [0,qNaN]. - """ - - def handle(self, context, *args): - return _NaN - -class Rounded(DecimalException): - """Number got rounded (not necessarily changed during rounding). - - This occurs and signals rounded whenever the result of an operation is - rounded (that is, some zero or non-zero digits were discarded from the - coefficient), or if an overflow or underflow condition occurs. The - result in all cases is unchanged. - - The rounded signal may be tested (or trapped) to determine if a given - operation (or sequence of operations) caused a loss of precision. - """ - -class Subnormal(DecimalException): - """Exponent < Emin before rounding. - - This occurs and signals subnormal whenever the result of a conversion or - operation is subnormal (that is, its adjusted exponent is less than - Emin, before any rounding). The result in all cases is unchanged. - - The subnormal signal may be tested (or trapped) to determine if a given - or operation (or sequence of operations) yielded a subnormal result. - """ - -class Overflow(Inexact, Rounded): - """Numerical overflow. - - This occurs and signals overflow if the adjusted exponent of a result - (from a conversion or from an operation that is not an attempt to divide - by zero), after rounding, would be greater than the largest value that - can be handled by the implementation (the value Emax). - - The result depends on the rounding mode: - - For round-half-up and round-half-even (and for round-half-down and - round-up, if implemented), the result of the operation is [sign,inf], - where sign is the sign of the intermediate result. For round-down, the - result is the largest finite number that can be represented in the - current precision, with the sign of the intermediate result. For - round-ceiling, the result is the same as for round-down if the sign of - the intermediate result is 1, or is [0,inf] otherwise. For round-floor, - the result is the same as for round-down if the sign of the intermediate - result is 0, or is [1,inf] otherwise. In all cases, Inexact and Rounded - will also be raised. - """ - - def handle(self, context, sign, *args): - if context.rounding in (ROUND_HALF_UP, ROUND_HALF_EVEN, - ROUND_HALF_DOWN, ROUND_UP): - return _SignedInfinity[sign] - if sign == 0: - if context.rounding == ROUND_CEILING: - return _SignedInfinity[sign] - return _dec_from_triple(sign, '9'*context.prec, - context.Emax-context.prec+1) - if sign == 1: - if context.rounding == ROUND_FLOOR: - return _SignedInfinity[sign] - return _dec_from_triple(sign, '9'*context.prec, - context.Emax-context.prec+1) - - -class Underflow(Inexact, Rounded, Subnormal): - """Numerical underflow with result rounded to 0. - - This occurs and signals underflow if a result is inexact and the - adjusted exponent of the result would be smaller (more negative) than - the smallest value that can be handled by the implementation (the value - Emin). That is, the result is both inexact and subnormal. - - The result after an underflow will be a subnormal number rounded, if - necessary, so that its exponent is not less than Etiny. This may result - in 0 with the sign of the intermediate result and an exponent of Etiny. - - In all cases, Inexact, Rounded, and Subnormal will also be raised. - """ - -class FloatOperation(DecimalException, TypeError): - """Enable stricter semantics for mixing floats and Decimals. - - If the signal is not trapped (default), mixing floats and Decimals is - permitted in the Decimal() constructor, context.create_decimal() and - all comparison operators. Both conversion and comparisons are exact. - Any occurrence of a mixed operation is silently recorded by setting - FloatOperation in the context flags. Explicit conversions with - Decimal.from_float() or context.create_decimal_from_float() do not - set the flag. - - Otherwise (the signal is trapped), only equality comparisons and explicit - conversions are silent. All other mixed operations raise FloatOperation. - """ - -# List of public traps and flags -_signals = [Clamped, DivisionByZero, Inexact, Overflow, Rounded, - Underflow, InvalidOperation, Subnormal, FloatOperation] - -# Map conditions (per the spec) to signals -_condition_map = {ConversionSyntax:InvalidOperation, - DivisionImpossible:InvalidOperation, - DivisionUndefined:InvalidOperation, - InvalidContext:InvalidOperation} - -# Valid rounding modes -_rounding_modes = (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_CEILING, - ROUND_FLOOR, ROUND_UP, ROUND_HALF_DOWN, ROUND_05UP) - -##### Context Functions ################################################## - -# The getcontext() and setcontext() function manage access to a thread-local -# current context. - -import contextvars - -_current_context_var = contextvars.ContextVar('decimal_context') - -_context_attributes = frozenset( - ['prec', 'Emin', 'Emax', 'capitals', 'clamp', 'rounding', 'flags', 'traps'] -) - -def getcontext(): - """Returns this thread's context. - - If this thread does not yet have a context, returns - a new context and sets this thread's context. - New contexts are copies of DefaultContext. - """ - try: - return _current_context_var.get() - except LookupError: - context = Context() - _current_context_var.set(context) - return context - -def setcontext(context): - """Set this thread's context to context.""" - if context in (DefaultContext, BasicContext, ExtendedContext): - context = context.copy() - context.clear_flags() - _current_context_var.set(context) - -del contextvars # Don't contaminate the namespace - -def localcontext(ctx=None, **kwargs): - """Return a context manager for a copy of the supplied context - - Uses a copy of the current context if no context is specified - The returned context manager creates a local decimal context - in a with statement: - def sin(x): - with localcontext() as ctx: - ctx.prec += 2 - # Rest of sin calculation algorithm - # uses a precision 2 greater than normal - return +s # Convert result to normal precision - - def sin(x): - with localcontext(ExtendedContext): - # Rest of sin calculation algorithm - # uses the Extended Context from the - # General Decimal Arithmetic Specification - return +s # Convert result to normal context - - >>> setcontext(DefaultContext) - >>> print(getcontext().prec) - 28 - >>> with localcontext(): - ... ctx = getcontext() - ... ctx.prec += 2 - ... print(ctx.prec) - ... - 30 - >>> with localcontext(ExtendedContext): - ... print(getcontext().prec) - ... - 9 - >>> print(getcontext().prec) - 28 - """ - if ctx is None: - ctx = getcontext() - ctx_manager = _ContextManager(ctx) - for key, value in kwargs.items(): - if key not in _context_attributes: - raise TypeError(f"'{key}' is an invalid keyword argument for this function") - setattr(ctx_manager.new_context, key, value) - return ctx_manager - - -def IEEEContext(bits, /): - """ - Return a context object initialized to the proper values for one of the - IEEE interchange formats. The argument must be a multiple of 32 and less - than IEEE_CONTEXT_MAX_BITS. - """ - if bits <= 0 or bits > IEEE_CONTEXT_MAX_BITS or bits % 32: - raise ValueError("argument must be a multiple of 32, " - f"with a maximum of {IEEE_CONTEXT_MAX_BITS}") - - ctx = Context() - ctx.prec = 9 * (bits//32) - 2 - ctx.Emax = 3 * (1 << (bits//16 + 3)) - ctx.Emin = 1 - ctx.Emax - ctx.rounding = ROUND_HALF_EVEN - ctx.clamp = 1 - ctx.traps = dict.fromkeys(_signals, False) - - return ctx - - -##### Decimal class ####################################################### - -# Do not subclass Decimal from numbers.Real and do not register it as such -# (because Decimals are not interoperable with floats). See the notes in -# numbers.py for more detail. - -class Decimal(object): - """Floating-point class for decimal arithmetic.""" - - __slots__ = ('_exp','_int','_sign', '_is_special') - # Generally, the value of the Decimal instance is given by - # (-1)**_sign * _int * 10**_exp - # Special values are signified by _is_special == True - - # We're immutable, so use __new__ not __init__ - def __new__(cls, value="0", context=None): - """Create a decimal point instance. - - >>> Decimal('3.14') # string input - Decimal('3.14') - >>> Decimal((0, (3, 1, 4), -2)) # tuple (sign, digit_tuple, exponent) - Decimal('3.14') - >>> Decimal(314) # int - Decimal('314') - >>> Decimal(Decimal(314)) # another decimal instance - Decimal('314') - >>> Decimal(' 3.14 \\n') # leading and trailing whitespace okay - Decimal('3.14') - """ - - # Note that the coefficient, self._int, is actually stored as - # a string rather than as a tuple of digits. This speeds up - # the "digits to integer" and "integer to digits" conversions - # that are used in almost every arithmetic operation on - # Decimals. This is an internal detail: the as_tuple function - # and the Decimal constructor still deal with tuples of - # digits. - - self = object.__new__(cls) - - # From a string - # REs insist on real strings, so we can too. - if isinstance(value, str): - m = _parser(value.strip().replace("_", "")) - if m is None: - if context is None: - context = getcontext() - return context._raise_error(ConversionSyntax, - "Invalid literal for Decimal: %r" % value) - - if m.group('sign') == "-": - self._sign = 1 - else: - self._sign = 0 - intpart = m.group('int') - if intpart is not None: - # finite number - fracpart = m.group('frac') or '' - exp = int(m.group('exp') or '0') - self._int = str(int(intpart+fracpart)) - self._exp = exp - len(fracpart) - self._is_special = False - else: - diag = m.group('diag') - if diag is not None: - # NaN - self._int = str(int(diag or '0')).lstrip('0') - if m.group('signal'): - self._exp = 'N' - else: - self._exp = 'n' - else: - # infinity - self._int = '0' - self._exp = 'F' - self._is_special = True - return self - - # From an integer - if isinstance(value, int): - if value >= 0: - self._sign = 0 - else: - self._sign = 1 - self._exp = 0 - self._int = str(abs(value)) - self._is_special = False - return self - - # From another decimal - if isinstance(value, Decimal): - self._exp = value._exp - self._sign = value._sign - self._int = value._int - self._is_special = value._is_special - return self - - # From an internal working value - if isinstance(value, _WorkRep): - self._sign = value.sign - self._int = str(value.int) - self._exp = int(value.exp) - self._is_special = False - return self - - # tuple/list conversion (possibly from as_tuple()) - if isinstance(value, (list,tuple)): - if len(value) != 3: - raise ValueError('Invalid tuple size in creation of Decimal ' - 'from list or tuple. The list or tuple ' - 'should have exactly three elements.') - # process sign. The isinstance test rejects floats - if not (isinstance(value[0], int) and value[0] in (0,1)): - raise ValueError("Invalid sign. The first value in the tuple " - "should be an integer; either 0 for a " - "positive number or 1 for a negative number.") - self._sign = value[0] - if value[2] == 'F': - # infinity: value[1] is ignored - self._int = '0' - self._exp = value[2] - self._is_special = True - else: - # process and validate the digits in value[1] - digits = [] - for digit in value[1]: - if isinstance(digit, int) and 0 <= digit <= 9: - # skip leading zeros - if digits or digit != 0: - digits.append(digit) - else: - raise ValueError("The second value in the tuple must " - "be composed of integers in the range " - "0 through 9.") - if value[2] in ('n', 'N'): - # NaN: digits form the diagnostic - self._int = ''.join(map(str, digits)) - self._exp = value[2] - self._is_special = True - elif isinstance(value[2], int): - # finite number: digits give the coefficient - self._int = ''.join(map(str, digits or [0])) - self._exp = value[2] - self._is_special = False - else: - raise ValueError("The third value in the tuple must " - "be an integer, or one of the " - "strings 'F', 'n', 'N'.") - return self - - if isinstance(value, float): - if context is None: - context = getcontext() - context._raise_error(FloatOperation, - "strict semantics for mixing floats and Decimals are " - "enabled") - value = Decimal.from_float(value) - self._exp = value._exp - self._sign = value._sign - self._int = value._int - self._is_special = value._is_special - return self - - raise TypeError("Cannot convert %r to Decimal" % value) - - @classmethod - def from_number(cls, number): - """Converts a real number to a decimal number, exactly. - - >>> Decimal.from_number(314) # int - Decimal('314') - >>> Decimal.from_number(0.1) # float - Decimal('0.1000000000000000055511151231257827021181583404541015625') - >>> Decimal.from_number(Decimal('3.14')) # another decimal instance - Decimal('3.14') - """ - if isinstance(number, (int, Decimal, float)): - return cls(number) - raise TypeError("Cannot convert %r to Decimal" % number) - - @classmethod - def from_float(cls, f): - """Converts a float to a decimal number, exactly. - - Note that Decimal.from_float(0.1) is not the same as Decimal('0.1'). - Since 0.1 is not exactly representable in binary floating point, the - value is stored as the nearest representable value which is - 0x1.999999999999ap-4. The exact equivalent of the value in decimal - is 0.1000000000000000055511151231257827021181583404541015625. - - >>> Decimal.from_float(0.1) - Decimal('0.1000000000000000055511151231257827021181583404541015625') - >>> Decimal.from_float(float('nan')) - Decimal('NaN') - >>> Decimal.from_float(float('inf')) - Decimal('Infinity') - >>> Decimal.from_float(-float('inf')) - Decimal('-Infinity') - >>> Decimal.from_float(-0.0) - Decimal('-0') - - """ - if isinstance(f, int): # handle integer inputs - sign = 0 if f >= 0 else 1 - k = 0 - coeff = str(abs(f)) - elif isinstance(f, float): - if _math.isinf(f) or _math.isnan(f): - return cls(repr(f)) - if _math.copysign(1.0, f) == 1.0: - sign = 0 - else: - sign = 1 - n, d = abs(f).as_integer_ratio() - k = d.bit_length() - 1 - coeff = str(n*5**k) - else: - raise TypeError("argument must be int or float.") - - result = _dec_from_triple(sign, coeff, -k) - if cls is Decimal: - return result - else: - return cls(result) - - def _isnan(self): - """Returns whether the number is not actually one. - - 0 if a number - 1 if NaN - 2 if sNaN - """ - if self._is_special: - exp = self._exp - if exp == 'n': - return 1 - elif exp == 'N': - return 2 - return 0 - - def _isinfinity(self): - """Returns whether the number is infinite - - 0 if finite or not a number - 1 if +INF - -1 if -INF - """ - if self._exp == 'F': - if self._sign: - return -1 - return 1 - return 0 - - def _check_nans(self, other=None, context=None): - """Returns whether the number is not actually one. - - if self, other are sNaN, signal - if self, other are NaN return nan - return 0 - - Done before operations. - """ - - self_is_nan = self._isnan() - if other is None: - other_is_nan = False - else: - other_is_nan = other._isnan() - - if self_is_nan or other_is_nan: - if context is None: - context = getcontext() - - if self_is_nan == 2: - return context._raise_error(InvalidOperation, 'sNaN', - self) - if other_is_nan == 2: - return context._raise_error(InvalidOperation, 'sNaN', - other) - if self_is_nan: - return self._fix_nan(context) - - return other._fix_nan(context) - return 0 - - def _compare_check_nans(self, other, context): - """Version of _check_nans used for the signaling comparisons - compare_signal, __le__, __lt__, __ge__, __gt__. - - Signal InvalidOperation if either self or other is a (quiet - or signaling) NaN. Signaling NaNs take precedence over quiet - NaNs. - - Return 0 if neither operand is a NaN. - - """ - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - if self.is_snan(): - return context._raise_error(InvalidOperation, - 'comparison involving sNaN', - self) - elif other.is_snan(): - return context._raise_error(InvalidOperation, - 'comparison involving sNaN', - other) - elif self.is_qnan(): - return context._raise_error(InvalidOperation, - 'comparison involving NaN', - self) - elif other.is_qnan(): - return context._raise_error(InvalidOperation, - 'comparison involving NaN', - other) - return 0 - - def __bool__(self): - """Return True if self is nonzero; otherwise return False. - - NaNs and infinities are considered nonzero. - """ - return self._is_special or self._int != '0' - - def _cmp(self, other): - """Compare the two non-NaN decimal instances self and other. - - Returns -1 if self < other, 0 if self == other and 1 - if self > other. This routine is for internal use only.""" - - if self._is_special or other._is_special: - self_inf = self._isinfinity() - other_inf = other._isinfinity() - if self_inf == other_inf: - return 0 - elif self_inf < other_inf: - return -1 - else: - return 1 - - # check for zeros; Decimal('0') == Decimal('-0') - if not self: - if not other: - return 0 - else: - return -((-1)**other._sign) - if not other: - return (-1)**self._sign - - # If different signs, neg one is less - if other._sign < self._sign: - return -1 - if self._sign < other._sign: - return 1 - - self_adjusted = self.adjusted() - other_adjusted = other.adjusted() - if self_adjusted == other_adjusted: - self_padded = self._int + '0'*(self._exp - other._exp) - other_padded = other._int + '0'*(other._exp - self._exp) - if self_padded == other_padded: - return 0 - elif self_padded < other_padded: - return -(-1)**self._sign - else: - return (-1)**self._sign - elif self_adjusted > other_adjusted: - return (-1)**self._sign - else: # self_adjusted < other_adjusted - return -((-1)**self._sign) - - # Note: The Decimal standard doesn't cover rich comparisons for - # Decimals. In particular, the specification is silent on the - # subject of what should happen for a comparison involving a NaN. - # We take the following approach: - # - # == comparisons involving a quiet NaN always return False - # != comparisons involving a quiet NaN always return True - # == or != comparisons involving a signaling NaN signal - # InvalidOperation, and return False or True as above if the - # InvalidOperation is not trapped. - # <, >, <= and >= comparisons involving a (quiet or signaling) - # NaN signal InvalidOperation, and return False if the - # InvalidOperation is not trapped. - # - # This behavior is designed to conform as closely as possible to - # that specified by IEEE 754. - - def __eq__(self, other, context=None): - self, other = _convert_for_comparison(self, other, equality_op=True) - if other is NotImplemented: - return other - if self._check_nans(other, context): - return False - return self._cmp(other) == 0 - - def __lt__(self, other, context=None): - self, other = _convert_for_comparison(self, other) - if other is NotImplemented: - return other - ans = self._compare_check_nans(other, context) - if ans: - return False - return self._cmp(other) < 0 - - def __le__(self, other, context=None): - self, other = _convert_for_comparison(self, other) - if other is NotImplemented: - return other - ans = self._compare_check_nans(other, context) - if ans: - return False - return self._cmp(other) <= 0 - - def __gt__(self, other, context=None): - self, other = _convert_for_comparison(self, other) - if other is NotImplemented: - return other - ans = self._compare_check_nans(other, context) - if ans: - return False - return self._cmp(other) > 0 - - def __ge__(self, other, context=None): - self, other = _convert_for_comparison(self, other) - if other is NotImplemented: - return other - ans = self._compare_check_nans(other, context) - if ans: - return False - return self._cmp(other) >= 0 - - def compare(self, other, context=None): - """Compare self to other. Return a decimal value: - - a or b is a NaN ==> Decimal('NaN') - a < b ==> Decimal('-1') - a == b ==> Decimal('0') - a > b ==> Decimal('1') - """ - other = _convert_other(other, raiseit=True) - - # Compare(NaN, NaN) = NaN - if (self._is_special or other and other._is_special): - ans = self._check_nans(other, context) - if ans: - return ans - - return Decimal(self._cmp(other)) - - def __hash__(self): - """x.__hash__() <==> hash(x)""" - - # In order to make sure that the hash of a Decimal instance - # agrees with the hash of a numerically equal integer, float - # or Fraction, we follow the rules for numeric hashes outlined - # in the documentation. (See library docs, 'Built-in Types'). - if self._is_special: - if self.is_snan(): - raise TypeError('Cannot hash a signaling NaN value.') - elif self.is_nan(): - return object.__hash__(self) - else: - if self._sign: - return -_PyHASH_INF - else: - return _PyHASH_INF - - if self._exp >= 0: - exp_hash = pow(10, self._exp, _PyHASH_MODULUS) - else: - exp_hash = pow(_PyHASH_10INV, -self._exp, _PyHASH_MODULUS) - hash_ = int(self._int) * exp_hash % _PyHASH_MODULUS - ans = hash_ if self >= 0 else -hash_ - return -2 if ans == -1 else ans - - def as_tuple(self): - """Represents the number as a triple tuple. - - To show the internals exactly as they are. - """ - return DecimalTuple(self._sign, tuple(map(int, self._int)), self._exp) - - def as_integer_ratio(self): - """Express a finite Decimal instance in the form n / d. - - Returns a pair (n, d) of integers. When called on an infinity - or NaN, raises OverflowError or ValueError respectively. - - >>> Decimal('3.14').as_integer_ratio() - (157, 50) - >>> Decimal('-123e5').as_integer_ratio() - (-12300000, 1) - >>> Decimal('0.00').as_integer_ratio() - (0, 1) - - """ - if self._is_special: - if self.is_nan(): - raise ValueError("cannot convert NaN to integer ratio") - else: - raise OverflowError("cannot convert Infinity to integer ratio") - - if not self: - return 0, 1 - - # Find n, d in lowest terms such that abs(self) == n / d; - # we'll deal with the sign later. - n = int(self._int) - if self._exp >= 0: - # self is an integer. - n, d = n * 10**self._exp, 1 - else: - # Find d2, d5 such that abs(self) = n / (2**d2 * 5**d5). - d5 = -self._exp - while d5 > 0 and n % 5 == 0: - n //= 5 - d5 -= 1 - - # (n & -n).bit_length() - 1 counts trailing zeros in binary - # representation of n (provided n is nonzero). - d2 = -self._exp - shift2 = min((n & -n).bit_length() - 1, d2) - if shift2: - n >>= shift2 - d2 -= shift2 - - d = 5**d5 << d2 - - if self._sign: - n = -n - return n, d - - def __repr__(self): - """Represents the number as an instance of Decimal.""" - # Invariant: eval(repr(d)) == d - return "Decimal('%s')" % str(self) - - def __str__(self, eng=False, context=None): - """Return string representation of the number in scientific notation. - - Captures all of the information in the underlying representation. - """ - - sign = ['', '-'][self._sign] - if self._is_special: - if self._exp == 'F': - return sign + 'Infinity' - elif self._exp == 'n': - return sign + 'NaN' + self._int - else: # self._exp == 'N' - return sign + 'sNaN' + self._int - - # number of digits of self._int to left of decimal point - leftdigits = self._exp + len(self._int) - - # dotplace is number of digits of self._int to the left of the - # decimal point in the mantissa of the output string (that is, - # after adjusting the exponent) - if self._exp <= 0 and leftdigits > -6: - # no exponent required - dotplace = leftdigits - elif not eng: - # usual scientific notation: 1 digit on left of the point - dotplace = 1 - elif self._int == '0': - # engineering notation, zero - dotplace = (leftdigits + 1) % 3 - 1 - else: - # engineering notation, nonzero - dotplace = (leftdigits - 1) % 3 + 1 - - if dotplace <= 0: - intpart = '0' - fracpart = '.' + '0'*(-dotplace) + self._int - elif dotplace >= len(self._int): - intpart = self._int+'0'*(dotplace-len(self._int)) - fracpart = '' - else: - intpart = self._int[:dotplace] - fracpart = '.' + self._int[dotplace:] - if leftdigits == dotplace: - exp = '' - else: - if context is None: - context = getcontext() - exp = ['e', 'E'][context.capitals] + "%+d" % (leftdigits-dotplace) - - return sign + intpart + fracpart + exp - - def to_eng_string(self, context=None): - """Convert to a string, using engineering notation if an exponent is needed. - - Engineering notation has an exponent which is a multiple of 3. This - can leave up to 3 digits to the left of the decimal place and may - require the addition of either one or two trailing zeros. - """ - return self.__str__(eng=True, context=context) - - def __neg__(self, context=None): - """Returns a copy with the sign switched. - - Rounds, if it has reason. - """ - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - - if context is None: - context = getcontext() - - if not self and context.rounding != ROUND_FLOOR: - # -Decimal('0') is Decimal('0'), not Decimal('-0'), except - # in ROUND_FLOOR rounding mode. - ans = self.copy_abs() - else: - ans = self.copy_negate() - - return ans._fix(context) - - def __pos__(self, context=None): - """Returns a copy, unless it is a sNaN. - - Rounds the number (if more than precision digits) - """ - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - - if context is None: - context = getcontext() - - if not self and context.rounding != ROUND_FLOOR: - # + (-0) = 0, except in ROUND_FLOOR rounding mode. - ans = self.copy_abs() - else: - ans = Decimal(self) - - return ans._fix(context) - - def __abs__(self, round=True, context=None): - """Returns the absolute value of self. - - If the keyword argument 'round' is false, do not round. The - expression self.__abs__(round=False) is equivalent to - self.copy_abs(). - """ - if not round: - return self.copy_abs() - - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - - if self._sign: - ans = self.__neg__(context=context) - else: - ans = self.__pos__(context=context) - - return ans - - def __add__(self, other, context=None): - """Returns self + other. - - -INF + INF (or the reverse) cause InvalidOperation errors. - """ - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - ans = self._check_nans(other, context) - if ans: - return ans - - if self._isinfinity(): - # If both INF, same sign => same as both, opposite => error. - if self._sign != other._sign and other._isinfinity(): - return context._raise_error(InvalidOperation, '-INF + INF') - return Decimal(self) - if other._isinfinity(): - return Decimal(other) # Can't both be infinity here - - exp = min(self._exp, other._exp) - negativezero = 0 - if context.rounding == ROUND_FLOOR and self._sign != other._sign: - # If the answer is 0, the sign should be negative, in this case. - negativezero = 1 - - if not self and not other: - sign = min(self._sign, other._sign) - if negativezero: - sign = 1 - ans = _dec_from_triple(sign, '0', exp) - ans = ans._fix(context) - return ans - if not self: - exp = max(exp, other._exp - context.prec-1) - ans = other._rescale(exp, context.rounding) - ans = ans._fix(context) - return ans - if not other: - exp = max(exp, self._exp - context.prec-1) - ans = self._rescale(exp, context.rounding) - ans = ans._fix(context) - return ans - - op1 = _WorkRep(self) - op2 = _WorkRep(other) - op1, op2 = _normalize(op1, op2, context.prec) - - result = _WorkRep() - if op1.sign != op2.sign: - # Equal and opposite - if op1.int == op2.int: - ans = _dec_from_triple(negativezero, '0', exp) - ans = ans._fix(context) - return ans - if op1.int < op2.int: - op1, op2 = op2, op1 - # OK, now abs(op1) > abs(op2) - if op1.sign == 1: - result.sign = 1 - op1.sign, op2.sign = op2.sign, op1.sign - else: - result.sign = 0 - # So we know the sign, and op1 > 0. - elif op1.sign == 1: - result.sign = 1 - op1.sign, op2.sign = (0, 0) - else: - result.sign = 0 - # Now, op1 > abs(op2) > 0 - - if op2.sign == 0: - result.int = op1.int + op2.int - else: - result.int = op1.int - op2.int - - result.exp = op1.exp - ans = Decimal(result) - ans = ans._fix(context) - return ans - - __radd__ = __add__ - - def __sub__(self, other, context=None): - """Return self - other""" - other = _convert_other(other) - if other is NotImplemented: - return other - - if self._is_special or other._is_special: - ans = self._check_nans(other, context=context) - if ans: - return ans - - # self - other is computed as self + other.copy_negate() - return self.__add__(other.copy_negate(), context=context) - - def __rsub__(self, other, context=None): - """Return other - self""" - other = _convert_other(other) - if other is NotImplemented: - return other - - return other.__sub__(self, context=context) - - def __mul__(self, other, context=None): - """Return self * other. - - (+-) INF * 0 (or its reverse) raise InvalidOperation. - """ - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - resultsign = self._sign ^ other._sign - - if self._is_special or other._is_special: - ans = self._check_nans(other, context) - if ans: - return ans - - if self._isinfinity(): - if not other: - return context._raise_error(InvalidOperation, '(+-)INF * 0') - return _SignedInfinity[resultsign] - - if other._isinfinity(): - if not self: - return context._raise_error(InvalidOperation, '0 * (+-)INF') - return _SignedInfinity[resultsign] - - resultexp = self._exp + other._exp - - # Special case for multiplying by zero - if not self or not other: - ans = _dec_from_triple(resultsign, '0', resultexp) - # Fixing in case the exponent is out of bounds - ans = ans._fix(context) - return ans - - # Special case for multiplying by power of 10 - if self._int == '1': - ans = _dec_from_triple(resultsign, other._int, resultexp) - ans = ans._fix(context) - return ans - if other._int == '1': - ans = _dec_from_triple(resultsign, self._int, resultexp) - ans = ans._fix(context) - return ans - - op1 = _WorkRep(self) - op2 = _WorkRep(other) - - ans = _dec_from_triple(resultsign, str(op1.int * op2.int), resultexp) - ans = ans._fix(context) - - return ans - __rmul__ = __mul__ - - def __truediv__(self, other, context=None): - """Return self / other.""" - other = _convert_other(other) - if other is NotImplemented: - return NotImplemented - - if context is None: - context = getcontext() - - sign = self._sign ^ other._sign - - if self._is_special or other._is_special: - ans = self._check_nans(other, context) - if ans: - return ans - - if self._isinfinity() and other._isinfinity(): - return context._raise_error(InvalidOperation, '(+-)INF/(+-)INF') - - if self._isinfinity(): - return _SignedInfinity[sign] - - if other._isinfinity(): - context._raise_error(Clamped, 'Division by infinity') - return _dec_from_triple(sign, '0', context.Etiny()) - - # Special cases for zeroes - if not other: - if not self: - return context._raise_error(DivisionUndefined, '0 / 0') - return context._raise_error(DivisionByZero, 'x / 0', sign) - - if not self: - exp = self._exp - other._exp - coeff = 0 - else: - # OK, so neither = 0, INF or NaN - shift = len(other._int) - len(self._int) + context.prec + 1 - exp = self._exp - other._exp - shift - op1 = _WorkRep(self) - op2 = _WorkRep(other) - if shift >= 0: - coeff, remainder = divmod(op1.int * 10**shift, op2.int) - else: - coeff, remainder = divmod(op1.int, op2.int * 10**-shift) - if remainder: - # result is not exact; adjust to ensure correct rounding - if coeff % 5 == 0: - coeff += 1 - else: - # result is exact; get as close to ideal exponent as possible - ideal_exp = self._exp - other._exp - while exp < ideal_exp and coeff % 10 == 0: - coeff //= 10 - exp += 1 - - ans = _dec_from_triple(sign, str(coeff), exp) - return ans._fix(context) - - def _divide(self, other, context): - """Return (self // other, self % other), to context.prec precision. - - Assumes that neither self nor other is a NaN, that self is not - infinite and that other is nonzero. - """ - sign = self._sign ^ other._sign - if other._isinfinity(): - ideal_exp = self._exp - else: - ideal_exp = min(self._exp, other._exp) - - expdiff = self.adjusted() - other.adjusted() - if not self or other._isinfinity() or expdiff <= -2: - return (_dec_from_triple(sign, '0', 0), - self._rescale(ideal_exp, context.rounding)) - if expdiff <= context.prec: - op1 = _WorkRep(self) - op2 = _WorkRep(other) - if op1.exp >= op2.exp: - op1.int *= 10**(op1.exp - op2.exp) - else: - op2.int *= 10**(op2.exp - op1.exp) - q, r = divmod(op1.int, op2.int) - if q < 10**context.prec: - return (_dec_from_triple(sign, str(q), 0), - _dec_from_triple(self._sign, str(r), ideal_exp)) - - # Here the quotient is too large to be representable - ans = context._raise_error(DivisionImpossible, - 'quotient too large in //, % or divmod') - return ans, ans - - def __rtruediv__(self, other, context=None): - """Swaps self/other and returns __truediv__.""" - other = _convert_other(other) - if other is NotImplemented: - return other - return other.__truediv__(self, context=context) - - def __divmod__(self, other, context=None): - """ - Return (self // other, self % other) - """ - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - ans = self._check_nans(other, context) - if ans: - return (ans, ans) - - sign = self._sign ^ other._sign - if self._isinfinity(): - if other._isinfinity(): - ans = context._raise_error(InvalidOperation, 'divmod(INF, INF)') - return ans, ans - else: - return (_SignedInfinity[sign], - context._raise_error(InvalidOperation, 'INF % x')) - - if not other: - if not self: - ans = context._raise_error(DivisionUndefined, 'divmod(0, 0)') - return ans, ans - else: - return (context._raise_error(DivisionByZero, 'x // 0', sign), - context._raise_error(InvalidOperation, 'x % 0')) - - quotient, remainder = self._divide(other, context) - remainder = remainder._fix(context) - return quotient, remainder - - def __rdivmod__(self, other, context=None): - """Swaps self/other and returns __divmod__.""" - other = _convert_other(other) - if other is NotImplemented: - return other - return other.__divmod__(self, context=context) - - def __mod__(self, other, context=None): - """ - self % other - """ - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - ans = self._check_nans(other, context) - if ans: - return ans - - if self._isinfinity(): - return context._raise_error(InvalidOperation, 'INF % x') - elif not other: - if self: - return context._raise_error(InvalidOperation, 'x % 0') - else: - return context._raise_error(DivisionUndefined, '0 % 0') - - remainder = self._divide(other, context)[1] - remainder = remainder._fix(context) - return remainder - - def __rmod__(self, other, context=None): - """Swaps self/other and returns __mod__.""" - other = _convert_other(other) - if other is NotImplemented: - return other - return other.__mod__(self, context=context) - - def remainder_near(self, other, context=None): - """ - Remainder nearest to 0- abs(remainder-near) <= other/2 - """ - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - ans = self._check_nans(other, context) - if ans: - return ans - - # self == +/-infinity -> InvalidOperation - if self._isinfinity(): - return context._raise_error(InvalidOperation, - 'remainder_near(infinity, x)') - - # other == 0 -> either InvalidOperation or DivisionUndefined - if not other: - if self: - return context._raise_error(InvalidOperation, - 'remainder_near(x, 0)') - else: - return context._raise_error(DivisionUndefined, - 'remainder_near(0, 0)') - - # other = +/-infinity -> remainder = self - if other._isinfinity(): - ans = Decimal(self) - return ans._fix(context) - - # self = 0 -> remainder = self, with ideal exponent - ideal_exponent = min(self._exp, other._exp) - if not self: - ans = _dec_from_triple(self._sign, '0', ideal_exponent) - return ans._fix(context) - - # catch most cases of large or small quotient - expdiff = self.adjusted() - other.adjusted() - if expdiff >= context.prec + 1: - # expdiff >= prec+1 => abs(self/other) > 10**prec - return context._raise_error(DivisionImpossible) - if expdiff <= -2: - # expdiff <= -2 => abs(self/other) < 0.1 - ans = self._rescale(ideal_exponent, context.rounding) - return ans._fix(context) - - # adjust both arguments to have the same exponent, then divide - op1 = _WorkRep(self) - op2 = _WorkRep(other) - if op1.exp >= op2.exp: - op1.int *= 10**(op1.exp - op2.exp) - else: - op2.int *= 10**(op2.exp - op1.exp) - q, r = divmod(op1.int, op2.int) - # remainder is r*10**ideal_exponent; other is +/-op2.int * - # 10**ideal_exponent. Apply correction to ensure that - # abs(remainder) <= abs(other)/2 - if 2*r + (q&1) > op2.int: - r -= op2.int - q += 1 - - if q >= 10**context.prec: - return context._raise_error(DivisionImpossible) - - # result has same sign as self unless r is negative - sign = self._sign - if r < 0: - sign = 1-sign - r = -r - - ans = _dec_from_triple(sign, str(r), ideal_exponent) - return ans._fix(context) - - def __floordiv__(self, other, context=None): - """self // other""" - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - ans = self._check_nans(other, context) - if ans: - return ans - - if self._isinfinity(): - if other._isinfinity(): - return context._raise_error(InvalidOperation, 'INF // INF') - else: - return _SignedInfinity[self._sign ^ other._sign] - - if not other: - if self: - return context._raise_error(DivisionByZero, 'x // 0', - self._sign ^ other._sign) - else: - return context._raise_error(DivisionUndefined, '0 // 0') - - return self._divide(other, context)[0] - - def __rfloordiv__(self, other, context=None): - """Swaps self/other and returns __floordiv__.""" - other = _convert_other(other) - if other is NotImplemented: - return other - return other.__floordiv__(self, context=context) - - def __float__(self): - """Float representation.""" - if self._isnan(): - if self.is_snan(): - raise ValueError("Cannot convert signaling NaN to float") - s = "-nan" if self._sign else "nan" - else: - s = str(self) - return float(s) - - def __int__(self): - """Converts self to an int, truncating if necessary.""" - if self._is_special: - if self._isnan(): - raise ValueError("Cannot convert NaN to integer") - elif self._isinfinity(): - raise OverflowError("Cannot convert infinity to integer") - s = (-1)**self._sign - if self._exp >= 0: - return s*int(self._int)*10**self._exp - else: - return s*int(self._int[:self._exp] or '0') - - __trunc__ = __int__ - - @property - def real(self): - return self - - @property - def imag(self): - return Decimal(0) - - def conjugate(self): - return self - - def __complex__(self): - return complex(float(self)) - - def _fix_nan(self, context): - """Decapitate the payload of a NaN to fit the context""" - payload = self._int - - # maximum length of payload is precision if clamp=0, - # precision-1 if clamp=1. - max_payload_len = context.prec - context.clamp - if len(payload) > max_payload_len: - payload = payload[len(payload)-max_payload_len:].lstrip('0') - return _dec_from_triple(self._sign, payload, self._exp, True) - return Decimal(self) - - def _fix(self, context): - """Round if it is necessary to keep self within prec precision. - - Rounds and fixes the exponent. Does not raise on a sNaN. - - Arguments: - self - Decimal instance - context - context used. - """ - - if self._is_special: - if self._isnan(): - # decapitate payload if necessary - return self._fix_nan(context) - else: - # self is +/-Infinity; return unaltered - return Decimal(self) - - # if self is zero then exponent should be between Etiny and - # Emax if clamp==0, and between Etiny and Etop if clamp==1. - Etiny = context.Etiny() - Etop = context.Etop() - if not self: - exp_max = [context.Emax, Etop][context.clamp] - new_exp = min(max(self._exp, Etiny), exp_max) - if new_exp != self._exp: - context._raise_error(Clamped) - return _dec_from_triple(self._sign, '0', new_exp) - else: - return Decimal(self) - - # exp_min is the smallest allowable exponent of the result, - # equal to max(self.adjusted()-context.prec+1, Etiny) - exp_min = len(self._int) + self._exp - context.prec - if exp_min > Etop: - # overflow: exp_min > Etop iff self.adjusted() > Emax - ans = context._raise_error(Overflow, 'above Emax', self._sign) - context._raise_error(Inexact) - context._raise_error(Rounded) - return ans - - self_is_subnormal = exp_min < Etiny - if self_is_subnormal: - exp_min = Etiny - - # round if self has too many digits - if self._exp < exp_min: - digits = len(self._int) + self._exp - exp_min - if digits < 0: - self = _dec_from_triple(self._sign, '1', exp_min-1) - digits = 0 - rounding_method = self._pick_rounding_function[context.rounding] - changed = rounding_method(self, digits) - coeff = self._int[:digits] or '0' - if changed > 0: - coeff = str(int(coeff)+1) - if len(coeff) > context.prec: - coeff = coeff[:-1] - exp_min += 1 - - # check whether the rounding pushed the exponent out of range - if exp_min > Etop: - ans = context._raise_error(Overflow, 'above Emax', self._sign) - else: - ans = _dec_from_triple(self._sign, coeff, exp_min) - - # raise the appropriate signals, taking care to respect - # the precedence described in the specification - if changed and self_is_subnormal: - context._raise_error(Underflow) - if self_is_subnormal: - context._raise_error(Subnormal) - if changed: - context._raise_error(Inexact) - context._raise_error(Rounded) - if not ans: - # raise Clamped on underflow to 0 - context._raise_error(Clamped) - return ans - - if self_is_subnormal: - context._raise_error(Subnormal) - - # fold down if clamp == 1 and self has too few digits - if context.clamp == 1 and self._exp > Etop: - context._raise_error(Clamped) - self_padded = self._int + '0'*(self._exp - Etop) - return _dec_from_triple(self._sign, self_padded, Etop) - - # here self was representable to begin with; return unchanged - return Decimal(self) - - # for each of the rounding functions below: - # self is a finite, nonzero Decimal - # prec is an integer satisfying 0 <= prec < len(self._int) - # - # each function returns either -1, 0, or 1, as follows: - # 1 indicates that self should be rounded up (away from zero) - # 0 indicates that self should be truncated, and that all the - # digits to be truncated are zeros (so the value is unchanged) - # -1 indicates that there are nonzero digits to be truncated - - def _round_down(self, prec): - """Also known as round-towards-0, truncate.""" - if _all_zeros(self._int, prec): - return 0 - else: - return -1 - - def _round_up(self, prec): - """Rounds away from 0.""" - return -self._round_down(prec) - - def _round_half_up(self, prec): - """Rounds 5 up (away from 0)""" - if self._int[prec] in '56789': - return 1 - elif _all_zeros(self._int, prec): - return 0 - else: - return -1 - - def _round_half_down(self, prec): - """Round 5 down""" - if _exact_half(self._int, prec): - return -1 - else: - return self._round_half_up(prec) - - def _round_half_even(self, prec): - """Round 5 to even, rest to nearest.""" - if _exact_half(self._int, prec) and \ - (prec == 0 or self._int[prec-1] in '02468'): - return -1 - else: - return self._round_half_up(prec) - - def _round_ceiling(self, prec): - """Rounds up (not away from 0 if negative.)""" - if self._sign: - return self._round_down(prec) - else: - return -self._round_down(prec) - - def _round_floor(self, prec): - """Rounds down (not towards 0 if negative)""" - if not self._sign: - return self._round_down(prec) - else: - return -self._round_down(prec) - - def _round_05up(self, prec): - """Round down unless digit prec-1 is 0 or 5.""" - if prec and self._int[prec-1] not in '05': - return self._round_down(prec) - else: - return -self._round_down(prec) - - _pick_rounding_function = dict( - ROUND_DOWN = _round_down, - ROUND_UP = _round_up, - ROUND_HALF_UP = _round_half_up, - ROUND_HALF_DOWN = _round_half_down, - ROUND_HALF_EVEN = _round_half_even, - ROUND_CEILING = _round_ceiling, - ROUND_FLOOR = _round_floor, - ROUND_05UP = _round_05up, - ) - - def __round__(self, n=None): - """Round self to the nearest integer, or to a given precision. - - If only one argument is supplied, round a finite Decimal - instance self to the nearest integer. If self is infinite or - a NaN then a Python exception is raised. If self is finite - and lies exactly halfway between two integers then it is - rounded to the integer with even last digit. - - >>> round(Decimal('123.456')) - 123 - >>> round(Decimal('-456.789')) - -457 - >>> round(Decimal('-3.0')) - -3 - >>> round(Decimal('2.5')) - 2 - >>> round(Decimal('3.5')) - 4 - >>> round(Decimal('Inf')) - Traceback (most recent call last): - ... - OverflowError: cannot round an infinity - >>> round(Decimal('NaN')) - Traceback (most recent call last): - ... - ValueError: cannot round a NaN - - If a second argument n is supplied, self is rounded to n - decimal places using the rounding mode for the current - context. - - For an integer n, round(self, -n) is exactly equivalent to - self.quantize(Decimal('1En')). - - >>> round(Decimal('123.456'), 0) - Decimal('123') - >>> round(Decimal('123.456'), 2) - Decimal('123.46') - >>> round(Decimal('123.456'), -2) - Decimal('1E+2') - >>> round(Decimal('-Infinity'), 37) - Decimal('NaN') - >>> round(Decimal('sNaN123'), 0) - Decimal('NaN123') - - """ - if n is not None: - # two-argument form: use the equivalent quantize call - if not isinstance(n, int): - raise TypeError('Second argument to round should be integral') - exp = _dec_from_triple(0, '1', -n) - return self.quantize(exp) - - # one-argument form - if self._is_special: - if self.is_nan(): - raise ValueError("cannot round a NaN") - else: - raise OverflowError("cannot round an infinity") - return int(self._rescale(0, ROUND_HALF_EVEN)) - - def __floor__(self): - """Return the floor of self, as an integer. - - For a finite Decimal instance self, return the greatest - integer n such that n <= self. If self is infinite or a NaN - then a Python exception is raised. - - """ - if self._is_special: - if self.is_nan(): - raise ValueError("cannot round a NaN") - else: - raise OverflowError("cannot round an infinity") - return int(self._rescale(0, ROUND_FLOOR)) - - def __ceil__(self): - """Return the ceiling of self, as an integer. - - For a finite Decimal instance self, return the least integer n - such that n >= self. If self is infinite or a NaN then a - Python exception is raised. - - """ - if self._is_special: - if self.is_nan(): - raise ValueError("cannot round a NaN") - else: - raise OverflowError("cannot round an infinity") - return int(self._rescale(0, ROUND_CEILING)) - - def fma(self, other, third, context=None): - """Fused multiply-add. - - Returns self*other+third with no rounding of the intermediate - product self*other. - - self and other are multiplied together, with no rounding of - the result. The third operand is then added to the result, - and a single final rounding is performed. - """ - - other = _convert_other(other, raiseit=True) - third = _convert_other(third, raiseit=True) - - # compute product; raise InvalidOperation if either operand is - # a signaling NaN or if the product is zero times infinity. - if self._is_special or other._is_special: - if context is None: - context = getcontext() - if self._exp == 'N': - return context._raise_error(InvalidOperation, 'sNaN', self) - if other._exp == 'N': - return context._raise_error(InvalidOperation, 'sNaN', other) - if self._exp == 'n': - product = self - elif other._exp == 'n': - product = other - elif self._exp == 'F': - if not other: - return context._raise_error(InvalidOperation, - 'INF * 0 in fma') - product = _SignedInfinity[self._sign ^ other._sign] - elif other._exp == 'F': - if not self: - return context._raise_error(InvalidOperation, - '0 * INF in fma') - product = _SignedInfinity[self._sign ^ other._sign] - else: - product = _dec_from_triple(self._sign ^ other._sign, - str(int(self._int) * int(other._int)), - self._exp + other._exp) - - return product.__add__(third, context) - - def _power_modulo(self, other, modulo, context=None): - """Three argument version of __pow__""" - - other = _convert_other(other) - if other is NotImplemented: - return other - modulo = _convert_other(modulo) - if modulo is NotImplemented: - return modulo - - if context is None: - context = getcontext() - - # deal with NaNs: if there are any sNaNs then first one wins, - # (i.e. behaviour for NaNs is identical to that of fma) - self_is_nan = self._isnan() - other_is_nan = other._isnan() - modulo_is_nan = modulo._isnan() - if self_is_nan or other_is_nan or modulo_is_nan: - if self_is_nan == 2: - return context._raise_error(InvalidOperation, 'sNaN', - self) - if other_is_nan == 2: - return context._raise_error(InvalidOperation, 'sNaN', - other) - if modulo_is_nan == 2: - return context._raise_error(InvalidOperation, 'sNaN', - modulo) - if self_is_nan: - return self._fix_nan(context) - if other_is_nan: - return other._fix_nan(context) - return modulo._fix_nan(context) - - # check inputs: we apply same restrictions as Python's pow() - if not (self._isinteger() and - other._isinteger() and - modulo._isinteger()): - return context._raise_error(InvalidOperation, - 'pow() 3rd argument not allowed ' - 'unless all arguments are integers') - if other < 0: - return context._raise_error(InvalidOperation, - 'pow() 2nd argument cannot be ' - 'negative when 3rd argument specified') - if not modulo: - return context._raise_error(InvalidOperation, - 'pow() 3rd argument cannot be 0') - - # additional restriction for decimal: the modulus must be less - # than 10**prec in absolute value - if modulo.adjusted() >= context.prec: - return context._raise_error(InvalidOperation, - 'insufficient precision: pow() 3rd ' - 'argument must not have more than ' - 'precision digits') - - # define 0**0 == NaN, for consistency with two-argument pow - # (even though it hurts!) - if not other and not self: - return context._raise_error(InvalidOperation, - 'at least one of pow() 1st argument ' - 'and 2nd argument must be nonzero; ' - '0**0 is not defined') - - # compute sign of result - if other._iseven(): - sign = 0 - else: - sign = self._sign - - # convert modulo to a Python integer, and self and other to - # Decimal integers (i.e. force their exponents to be >= 0) - modulo = abs(int(modulo)) - base = _WorkRep(self.to_integral_value()) - exponent = _WorkRep(other.to_integral_value()) - - # compute result using integer pow() - base = (base.int % modulo * pow(10, base.exp, modulo)) % modulo - for i in range(exponent.exp): - base = pow(base, 10, modulo) - base = pow(base, exponent.int, modulo) - - return _dec_from_triple(sign, str(base), 0) - - def _power_exact(self, other, p): - """Attempt to compute self**other exactly. - - Given Decimals self and other and an integer p, attempt to - compute an exact result for the power self**other, with p - digits of precision. Return None if self**other is not - exactly representable in p digits. - - Assumes that elimination of special cases has already been - performed: self and other must both be nonspecial; self must - be positive and not numerically equal to 1; other must be - nonzero. For efficiency, other._exp should not be too large, - so that 10**abs(other._exp) is a feasible calculation.""" - - # In the comments below, we write x for the value of self and y for the - # value of other. Write x = xc*10**xe and abs(y) = yc*10**ye, with xc - # and yc positive integers not divisible by 10. - - # The main purpose of this method is to identify the *failure* - # of x**y to be exactly representable with as little effort as - # possible. So we look for cheap and easy tests that - # eliminate the possibility of x**y being exact. Only if all - # these tests are passed do we go on to actually compute x**y. - - # Here's the main idea. Express y as a rational number m/n, with m and - # n relatively prime and n>0. Then for x**y to be exactly - # representable (at *any* precision), xc must be the nth power of a - # positive integer and xe must be divisible by n. If y is negative - # then additionally xc must be a power of either 2 or 5, hence a power - # of 2**n or 5**n. - # - # There's a limit to how small |y| can be: if y=m/n as above - # then: - # - # (1) if xc != 1 then for the result to be representable we - # need xc**(1/n) >= 2, and hence also xc**|y| >= 2. So - # if |y| <= 1/nbits(xc) then xc < 2**nbits(xc) <= - # 2**(1/|y|), hence xc**|y| < 2 and the result is not - # representable. - # - # (2) if xe != 0, |xe|*(1/n) >= 1, so |xe|*|y| >= 1. Hence if - # |y| < 1/|xe| then the result is not representable. - # - # Note that since x is not equal to 1, at least one of (1) and - # (2) must apply. Now |y| < 1/nbits(xc) iff |yc|*nbits(xc) < - # 10**-ye iff len(str(|yc|*nbits(xc)) <= -ye. - # - # There's also a limit to how large y can be, at least if it's - # positive: the normalized result will have coefficient xc**y, - # so if it's representable then xc**y < 10**p, and y < - # p/log10(xc). Hence if y*log10(xc) >= p then the result is - # not exactly representable. - - # if len(str(abs(yc*xe)) <= -ye then abs(yc*xe) < 10**-ye, - # so |y| < 1/xe and the result is not representable. - # Similarly, len(str(abs(yc)*xc_bits)) <= -ye implies |y| - # < 1/nbits(xc). - - x = _WorkRep(self) - xc, xe = x.int, x.exp - while xc % 10 == 0: - xc //= 10 - xe += 1 - - y = _WorkRep(other) - yc, ye = y.int, y.exp - while yc % 10 == 0: - yc //= 10 - ye += 1 - - # case where xc == 1: result is 10**(xe*y), with xe*y - # required to be an integer - if xc == 1: - xe *= yc - # result is now 10**(xe * 10**ye); xe * 10**ye must be integral - while xe % 10 == 0: - xe //= 10 - ye += 1 - if ye < 0: - return None - exponent = xe * 10**ye - if y.sign == 1: - exponent = -exponent - # if other is a nonnegative integer, use ideal exponent - if other._isinteger() and other._sign == 0: - ideal_exponent = self._exp*int(other) - zeros = min(exponent-ideal_exponent, p-1) - else: - zeros = 0 - return _dec_from_triple(0, '1' + '0'*zeros, exponent-zeros) - - # case where y is negative: xc must be either a power - # of 2 or a power of 5. - if y.sign == 1: - last_digit = xc % 10 - if last_digit in (2,4,6,8): - # quick test for power of 2 - if xc & -xc != xc: - return None - # now xc is a power of 2; e is its exponent - e = _nbits(xc)-1 - - # We now have: - # - # x = 2**e * 10**xe, e > 0, and y < 0. - # - # The exact result is: - # - # x**y = 5**(-e*y) * 10**(e*y + xe*y) - # - # provided that both e*y and xe*y are integers. Note that if - # 5**(-e*y) >= 10**p, then the result can't be expressed - # exactly with p digits of precision. - # - # Using the above, we can guard against large values of ye. - # 93/65 is an upper bound for log(10)/log(5), so if - # - # ye >= len(str(93*p//65)) - # - # then - # - # -e*y >= -y >= 10**ye > 93*p/65 > p*log(10)/log(5), - # - # so 5**(-e*y) >= 10**p, and the coefficient of the result - # can't be expressed in p digits. - - # emax >= largest e such that 5**e < 10**p. - emax = p*93//65 - if ye >= len(str(emax)): - return None - - # Find -e*y and -xe*y; both must be integers - e = _decimal_lshift_exact(e * yc, ye) - xe = _decimal_lshift_exact(xe * yc, ye) - if e is None or xe is None: - return None - - if e > emax: - return None - xc = 5**e - - elif last_digit == 5: - # e >= log_5(xc) if xc is a power of 5; we have - # equality all the way up to xc=5**2658 - e = _nbits(xc)*28//65 - xc, remainder = divmod(5**e, xc) - if remainder: - return None - while xc % 5 == 0: - xc //= 5 - e -= 1 - - # Guard against large values of ye, using the same logic as in - # the 'xc is a power of 2' branch. 10/3 is an upper bound for - # log(10)/log(2). - emax = p*10//3 - if ye >= len(str(emax)): - return None - - e = _decimal_lshift_exact(e * yc, ye) - xe = _decimal_lshift_exact(xe * yc, ye) - if e is None or xe is None: - return None - - if e > emax: - return None - xc = 2**e - else: - return None - - # An exact power of 10 is representable, but can convert to a - # string of any length. But an exact power of 10 shouldn't be - # possible at this point. - assert xc > 1, self - assert xc % 10 != 0, self - strxc = str(xc) - if len(strxc) > p: - return None - xe = -e-xe - return _dec_from_triple(0, strxc, xe) - - # now y is positive; find m and n such that y = m/n - if ye >= 0: - m, n = yc*10**ye, 1 - else: - if xe != 0 and len(str(abs(yc*xe))) <= -ye: - return None - xc_bits = _nbits(xc) - if len(str(abs(yc)*xc_bits)) <= -ye: - return None - m, n = yc, 10**(-ye) - while m % 2 == n % 2 == 0: - m //= 2 - n //= 2 - while m % 5 == n % 5 == 0: - m //= 5 - n //= 5 - - # compute nth root of xc*10**xe - if n > 1: - # if 1 < xc < 2**n then xc isn't an nth power - if xc_bits <= n: - return None - - xe, rem = divmod(xe, n) - if rem != 0: - return None - - # compute nth root of xc using Newton's method - a = 1 << -(-_nbits(xc)//n) # initial estimate - while True: - q, r = divmod(xc, a**(n-1)) - if a <= q: - break - else: - a = (a*(n-1) + q)//n - if not (a == q and r == 0): - return None - xc = a - - # now xc*10**xe is the nth root of the original xc*10**xe - # compute mth power of xc*10**xe - - # if m > p*100//_log10_lb(xc) then m > p/log10(xc), hence xc**m > - # 10**p and the result is not representable. - if xc > 1 and m > p*100//_log10_lb(xc): - return None - xc = xc**m - xe *= m - # An exact power of 10 is representable, but can convert to a string - # of any length. But an exact power of 10 shouldn't be possible at - # this point. - assert xc > 1, self - assert xc % 10 != 0, self - str_xc = str(xc) - if len(str_xc) > p: - return None - - # by this point the result *is* exactly representable - # adjust the exponent to get as close as possible to the ideal - # exponent, if necessary - if other._isinteger() and other._sign == 0: - ideal_exponent = self._exp*int(other) - zeros = min(xe-ideal_exponent, p-len(str_xc)) - else: - zeros = 0 - return _dec_from_triple(0, str_xc+'0'*zeros, xe-zeros) - - def __pow__(self, other, modulo=None, context=None): - """Return self ** other [ % modulo]. - - With two arguments, compute self**other. - - With three arguments, compute (self**other) % modulo. For the - three argument form, the following restrictions on the - arguments hold: - - - all three arguments must be integral - - other must be nonnegative - - either self or other (or both) must be nonzero - - modulo must be nonzero and must have at most p digits, - where p is the context precision. - - If any of these restrictions is violated the InvalidOperation - flag is raised. - - The result of pow(self, other, modulo) is identical to the - result that would be obtained by computing (self**other) % - modulo with unbounded precision, but is computed more - efficiently. It is always exact. - """ - - if modulo is not None: - return self._power_modulo(other, modulo, context) - - other = _convert_other(other) - if other is NotImplemented: - return other - - if context is None: - context = getcontext() - - # either argument is a NaN => result is NaN - ans = self._check_nans(other, context) - if ans: - return ans - - # 0**0 = NaN (!), x**0 = 1 for nonzero x (including +/-Infinity) - if not other: - if not self: - return context._raise_error(InvalidOperation, '0 ** 0') - else: - return _One - - # result has sign 1 iff self._sign is 1 and other is an odd integer - result_sign = 0 - if self._sign == 1: - if other._isinteger(): - if not other._iseven(): - result_sign = 1 - else: - # -ve**noninteger = NaN - # (-0)**noninteger = 0**noninteger - if self: - return context._raise_error(InvalidOperation, - 'x ** y with x negative and y not an integer') - # negate self, without doing any unwanted rounding - self = self.copy_negate() - - # 0**(+ve or Inf)= 0; 0**(-ve or -Inf) = Infinity - if not self: - if other._sign == 0: - return _dec_from_triple(result_sign, '0', 0) - else: - return _SignedInfinity[result_sign] - - # Inf**(+ve or Inf) = Inf; Inf**(-ve or -Inf) = 0 - if self._isinfinity(): - if other._sign == 0: - return _SignedInfinity[result_sign] - else: - return _dec_from_triple(result_sign, '0', 0) - - # 1**other = 1, but the choice of exponent and the flags - # depend on the exponent of self, and on whether other is a - # positive integer, a negative integer, or neither - if self == _One: - if other._isinteger(): - # exp = max(self._exp*max(int(other), 0), - # 1-context.prec) but evaluating int(other) directly - # is dangerous until we know other is small (other - # could be 1e999999999) - if other._sign == 1: - multiplier = 0 - elif other > context.prec: - multiplier = context.prec - else: - multiplier = int(other) - - exp = self._exp * multiplier - if exp < 1-context.prec: - exp = 1-context.prec - context._raise_error(Rounded) - else: - context._raise_error(Inexact) - context._raise_error(Rounded) - exp = 1-context.prec - - return _dec_from_triple(result_sign, '1'+'0'*-exp, exp) - - # compute adjusted exponent of self - self_adj = self.adjusted() - - # self ** infinity is infinity if self > 1, 0 if self < 1 - # self ** -infinity is infinity if self < 1, 0 if self > 1 - if other._isinfinity(): - if (other._sign == 0) == (self_adj < 0): - return _dec_from_triple(result_sign, '0', 0) - else: - return _SignedInfinity[result_sign] - - # from here on, the result always goes through the call - # to _fix at the end of this function. - ans = None - exact = False - - # crude test to catch cases of extreme overflow/underflow. If - # log10(self)*other >= 10**bound and bound >= len(str(Emax)) - # then 10**bound >= 10**len(str(Emax)) >= Emax+1 and hence - # self**other >= 10**(Emax+1), so overflow occurs. The test - # for underflow is similar. - bound = self._log10_exp_bound() + other.adjusted() - if (self_adj >= 0) == (other._sign == 0): - # self > 1 and other +ve, or self < 1 and other -ve - # possibility of overflow - if bound >= len(str(context.Emax)): - ans = _dec_from_triple(result_sign, '1', context.Emax+1) - else: - # self > 1 and other -ve, or self < 1 and other +ve - # possibility of underflow to 0 - Etiny = context.Etiny() - if bound >= len(str(-Etiny)): - ans = _dec_from_triple(result_sign, '1', Etiny-1) - - # try for an exact result with precision +1 - if ans is None: - ans = self._power_exact(other, context.prec + 1) - if ans is not None: - if result_sign == 1: - ans = _dec_from_triple(1, ans._int, ans._exp) - exact = True - - # usual case: inexact result, x**y computed directly as exp(y*log(x)) - if ans is None: - p = context.prec - x = _WorkRep(self) - xc, xe = x.int, x.exp - y = _WorkRep(other) - yc, ye = y.int, y.exp - if y.sign == 1: - yc = -yc - - # compute correctly rounded result: start with precision +3, - # then increase precision until result is unambiguously roundable - extra = 3 - while True: - coeff, exp = _dpower(xc, xe, yc, ye, p+extra) - if coeff % (5*10**(len(str(coeff))-p-1)): - break - extra += 3 - - ans = _dec_from_triple(result_sign, str(coeff), exp) - - # unlike exp, ln and log10, the power function respects the - # rounding mode; no need to switch to ROUND_HALF_EVEN here - - # There's a difficulty here when 'other' is not an integer and - # the result is exact. In this case, the specification - # requires that the Inexact flag be raised (in spite of - # exactness), but since the result is exact _fix won't do this - # for us. (Correspondingly, the Underflow signal should also - # be raised for subnormal results.) We can't directly raise - # these signals either before or after calling _fix, since - # that would violate the precedence for signals. So we wrap - # the ._fix call in a temporary context, and reraise - # afterwards. - if exact and not other._isinteger(): - # pad with zeros up to length context.prec+1 if necessary; this - # ensures that the Rounded signal will be raised. - if len(ans._int) <= context.prec: - expdiff = context.prec + 1 - len(ans._int) - ans = _dec_from_triple(ans._sign, ans._int+'0'*expdiff, - ans._exp-expdiff) - - # create a copy of the current context, with cleared flags/traps - newcontext = context.copy() - newcontext.clear_flags() - for exception in _signals: - newcontext.traps[exception] = 0 - - # round in the new context - ans = ans._fix(newcontext) - - # raise Inexact, and if necessary, Underflow - newcontext._raise_error(Inexact) - if newcontext.flags[Subnormal]: - newcontext._raise_error(Underflow) - - # propagate signals to the original context; _fix could - # have raised any of Overflow, Underflow, Subnormal, - # Inexact, Rounded, Clamped. Overflow needs the correct - # arguments. Note that the order of the exceptions is - # important here. - if newcontext.flags[Overflow]: - context._raise_error(Overflow, 'above Emax', ans._sign) - for exception in Underflow, Subnormal, Inexact, Rounded, Clamped: - if newcontext.flags[exception]: - context._raise_error(exception) - - else: - ans = ans._fix(context) - - return ans - - def __rpow__(self, other, modulo=None, context=None): - """Swaps self/other and returns __pow__.""" - other = _convert_other(other) - if other is NotImplemented: - return other - return other.__pow__(self, modulo, context=context) - - def normalize(self, context=None): - """Normalize- strip trailing 0s, change anything equal to 0 to 0e0""" - - if context is None: - context = getcontext() - - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - - dup = self._fix(context) - if dup._isinfinity(): - return dup - - if not dup: - return _dec_from_triple(dup._sign, '0', 0) - exp_max = [context.Emax, context.Etop()][context.clamp] - end = len(dup._int) - exp = dup._exp - while dup._int[end-1] == '0' and exp < exp_max: - exp += 1 - end -= 1 - return _dec_from_triple(dup._sign, dup._int[:end], exp) - - def quantize(self, exp, rounding=None, context=None): - """Quantize self so its exponent is the same as that of exp. - - Similar to self._rescale(exp._exp) but with error checking. - """ - exp = _convert_other(exp, raiseit=True) - - if context is None: - context = getcontext() - if rounding is None: - rounding = context.rounding - - if self._is_special or exp._is_special: - ans = self._check_nans(exp, context) - if ans: - return ans - - if exp._isinfinity() or self._isinfinity(): - if exp._isinfinity() and self._isinfinity(): - return Decimal(self) # if both are inf, it is OK - return context._raise_error(InvalidOperation, - 'quantize with one INF') - - # exp._exp should be between Etiny and Emax - if not (context.Etiny() <= exp._exp <= context.Emax): - return context._raise_error(InvalidOperation, - 'target exponent out of bounds in quantize') - - if not self: - ans = _dec_from_triple(self._sign, '0', exp._exp) - return ans._fix(context) - - self_adjusted = self.adjusted() - if self_adjusted > context.Emax: - return context._raise_error(InvalidOperation, - 'exponent of quantize result too large for current context') - if self_adjusted - exp._exp + 1 > context.prec: - return context._raise_error(InvalidOperation, - 'quantize result has too many digits for current context') - - ans = self._rescale(exp._exp, rounding) - if ans.adjusted() > context.Emax: - return context._raise_error(InvalidOperation, - 'exponent of quantize result too large for current context') - if len(ans._int) > context.prec: - return context._raise_error(InvalidOperation, - 'quantize result has too many digits for current context') - - # raise appropriate flags - if ans and ans.adjusted() < context.Emin: - context._raise_error(Subnormal) - if ans._exp > self._exp: - if ans != self: - context._raise_error(Inexact) - context._raise_error(Rounded) - - # call to fix takes care of any necessary folddown, and - # signals Clamped if necessary - ans = ans._fix(context) - return ans - - def same_quantum(self, other, context=None): - """Return True if self and other have the same exponent; otherwise - return False. - - If either operand is a special value, the following rules are used: - * return True if both operands are infinities - * return True if both operands are NaNs - * otherwise, return False. - """ - other = _convert_other(other, raiseit=True) - if self._is_special or other._is_special: - return (self.is_nan() and other.is_nan() or - self.is_infinite() and other.is_infinite()) - return self._exp == other._exp - - def _rescale(self, exp, rounding): - """Rescale self so that the exponent is exp, either by padding with zeros - or by truncating digits, using the given rounding mode. - - Specials are returned without change. This operation is - quiet: it raises no flags, and uses no information from the - context. - - exp = exp to scale to (an integer) - rounding = rounding mode - """ - if self._is_special: - return Decimal(self) - if not self: - return _dec_from_triple(self._sign, '0', exp) - - if self._exp >= exp: - # pad answer with zeros if necessary - return _dec_from_triple(self._sign, - self._int + '0'*(self._exp - exp), exp) - - # too many digits; round and lose data. If self.adjusted() < - # exp-1, replace self by 10**(exp-1) before rounding - digits = len(self._int) + self._exp - exp - if digits < 0: - self = _dec_from_triple(self._sign, '1', exp-1) - digits = 0 - this_function = self._pick_rounding_function[rounding] - changed = this_function(self, digits) - coeff = self._int[:digits] or '0' - if changed == 1: - coeff = str(int(coeff)+1) - return _dec_from_triple(self._sign, coeff, exp) - - def _round(self, places, rounding): - """Round a nonzero, nonspecial Decimal to a fixed number of - significant figures, using the given rounding mode. - - Infinities, NaNs and zeros are returned unaltered. - - This operation is quiet: it raises no flags, and uses no - information from the context. - - """ - if places <= 0: - raise ValueError("argument should be at least 1 in _round") - if self._is_special or not self: - return Decimal(self) - ans = self._rescale(self.adjusted()+1-places, rounding) - # it can happen that the rescale alters the adjusted exponent; - # for example when rounding 99.97 to 3 significant figures. - # When this happens we end up with an extra 0 at the end of - # the number; a second rescale fixes this. - if ans.adjusted() != self.adjusted(): - ans = ans._rescale(ans.adjusted()+1-places, rounding) - return ans - - def to_integral_exact(self, rounding=None, context=None): - """Rounds to a nearby integer. - - If no rounding mode is specified, take the rounding mode from - the context. This method raises the Rounded and Inexact flags - when appropriate. - - See also: to_integral_value, which does exactly the same as - this method except that it doesn't raise Inexact or Rounded. - """ - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - return Decimal(self) - if self._exp >= 0: - return Decimal(self) - if not self: - return _dec_from_triple(self._sign, '0', 0) - if context is None: - context = getcontext() - if rounding is None: - rounding = context.rounding - ans = self._rescale(0, rounding) - if ans != self: - context._raise_error(Inexact) - context._raise_error(Rounded) - return ans - - def to_integral_value(self, rounding=None, context=None): - """Rounds to the nearest integer, without raising inexact, rounded.""" - if context is None: - context = getcontext() - if rounding is None: - rounding = context.rounding - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - return Decimal(self) - if self._exp >= 0: - return Decimal(self) - else: - return self._rescale(0, rounding) - - # the method name changed, but we provide also the old one, for compatibility - to_integral = to_integral_value - - def sqrt(self, context=None): - """Return the square root of self.""" - if context is None: - context = getcontext() - - if self._is_special: - ans = self._check_nans(context=context) - if ans: - return ans - - if self._isinfinity() and self._sign == 0: - return Decimal(self) - - if not self: - # exponent = self._exp // 2. sqrt(-0) = -0 - ans = _dec_from_triple(self._sign, '0', self._exp // 2) - return ans._fix(context) - - if self._sign == 1: - return context._raise_error(InvalidOperation, 'sqrt(-x), x > 0') - - # At this point self represents a positive number. Let p be - # the desired precision and express self in the form c*100**e - # with c a positive real number and e an integer, c and e - # being chosen so that 100**(p-1) <= c < 100**p. Then the - # (exact) square root of self is sqrt(c)*10**e, and 10**(p-1) - # <= sqrt(c) < 10**p, so the closest representable Decimal at - # precision p is n*10**e where n = round_half_even(sqrt(c)), - # the closest integer to sqrt(c) with the even integer chosen - # in the case of a tie. - # - # To ensure correct rounding in all cases, we use the - # following trick: we compute the square root to an extra - # place (precision p+1 instead of precision p), rounding down. - # Then, if the result is inexact and its last digit is 0 or 5, - # we increase the last digit to 1 or 6 respectively; if it's - # exact we leave the last digit alone. Now the final round to - # p places (or fewer in the case of underflow) will round - # correctly and raise the appropriate flags. - - # use an extra digit of precision - prec = context.prec+1 - - # write argument in the form c*100**e where e = self._exp//2 - # is the 'ideal' exponent, to be used if the square root is - # exactly representable. l is the number of 'digits' of c in - # base 100, so that 100**(l-1) <= c < 100**l. - op = _WorkRep(self) - e = op.exp >> 1 - if op.exp & 1: - c = op.int * 10 - l = (len(self._int) >> 1) + 1 - else: - c = op.int - l = len(self._int)+1 >> 1 - - # rescale so that c has exactly prec base 100 'digits' - shift = prec-l - if shift >= 0: - c *= 100**shift - exact = True - else: - c, remainder = divmod(c, 100**-shift) - exact = not remainder - e -= shift - - # find n = floor(sqrt(c)) using Newton's method - n = 10**prec - while True: - q = c//n - if n <= q: - break - else: - n = n + q >> 1 - exact = exact and n*n == c - - if exact: - # result is exact; rescale to use ideal exponent e - if shift >= 0: - # assert n % 10**shift == 0 - n //= 10**shift - else: - n *= 10**-shift - e += shift - else: - # result is not exact; fix last digit as described above - if n % 5 == 0: - n += 1 - - ans = _dec_from_triple(0, str(n), e) - - # round, and fit to current context - context = context._shallow_copy() - rounding = context._set_rounding(ROUND_HALF_EVEN) - ans = ans._fix(context) - context.rounding = rounding - - return ans - - def max(self, other, context=None): - """Returns the larger value. - - Like max(self, other) except if one is not a number, returns - NaN (and signals if one is sNaN). Also rounds. - """ - other = _convert_other(other, raiseit=True) - - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - # If one operand is a quiet NaN and the other is number, then the - # number is always returned - sn = self._isnan() - on = other._isnan() - if sn or on: - if on == 1 and sn == 0: - return self._fix(context) - if sn == 1 and on == 0: - return other._fix(context) - return self._check_nans(other, context) - - c = self._cmp(other) - if c == 0: - # If both operands are finite and equal in numerical value - # then an ordering is applied: - # - # If the signs differ then max returns the operand with the - # positive sign and min returns the operand with the negative sign - # - # If the signs are the same then the exponent is used to select - # the result. This is exactly the ordering used in compare_total. - c = self.compare_total(other) - - if c == -1: - ans = other - else: - ans = self - - return ans._fix(context) - - def min(self, other, context=None): - """Returns the smaller value. - - Like min(self, other) except if one is not a number, returns - NaN (and signals if one is sNaN). Also rounds. - """ - other = _convert_other(other, raiseit=True) - - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - # If one operand is a quiet NaN and the other is number, then the - # number is always returned - sn = self._isnan() - on = other._isnan() - if sn or on: - if on == 1 and sn == 0: - return self._fix(context) - if sn == 1 and on == 0: - return other._fix(context) - return self._check_nans(other, context) - - c = self._cmp(other) - if c == 0: - c = self.compare_total(other) - - if c == -1: - ans = self - else: - ans = other - - return ans._fix(context) - - def _isinteger(self): - """Returns whether self is an integer""" - if self._is_special: - return False - if self._exp >= 0: - return True - rest = self._int[self._exp:] - return rest == '0'*len(rest) - - def _iseven(self): - """Returns True if self is even. Assumes self is an integer.""" - if not self or self._exp > 0: - return True - return self._int[-1+self._exp] in '02468' - - def adjusted(self): - """Return the adjusted exponent of self""" - try: - return self._exp + len(self._int) - 1 - # If NaN or Infinity, self._exp is string - except TypeError: - return 0 - - def canonical(self): - """Returns the same Decimal object. - - As we do not have different encodings for the same number, the - received object already is in its canonical form. - """ - return self - - def compare_signal(self, other, context=None): - """Compares self to the other operand numerically. - - It's pretty much like compare(), but all NaNs signal, with signaling - NaNs taking precedence over quiet NaNs. - """ - other = _convert_other(other, raiseit = True) - ans = self._compare_check_nans(other, context) - if ans: - return ans - return self.compare(other, context=context) - - def compare_total(self, other, context=None): - """Compares self to other using the abstract representations. - - This is not like the standard compare, which use their numerical - value. Note that a total ordering is defined for all possible abstract - representations. - """ - other = _convert_other(other, raiseit=True) - - # if one is negative and the other is positive, it's easy - if self._sign and not other._sign: - return _NegativeOne - if not self._sign and other._sign: - return _One - sign = self._sign - - # let's handle both NaN types - self_nan = self._isnan() - other_nan = other._isnan() - if self_nan or other_nan: - if self_nan == other_nan: - # compare payloads as though they're integers - self_key = len(self._int), self._int - other_key = len(other._int), other._int - if self_key < other_key: - if sign: - return _One - else: - return _NegativeOne - if self_key > other_key: - if sign: - return _NegativeOne - else: - return _One - return _Zero - - if sign: - if self_nan == 1: - return _NegativeOne - if other_nan == 1: - return _One - if self_nan == 2: - return _NegativeOne - if other_nan == 2: - return _One - else: - if self_nan == 1: - return _One - if other_nan == 1: - return _NegativeOne - if self_nan == 2: - return _One - if other_nan == 2: - return _NegativeOne - - if self < other: - return _NegativeOne - if self > other: - return _One - - if self._exp < other._exp: - if sign: - return _One - else: - return _NegativeOne - if self._exp > other._exp: - if sign: - return _NegativeOne - else: - return _One - return _Zero - - - def compare_total_mag(self, other, context=None): - """Compares self to other using abstract repr., ignoring sign. - - Like compare_total, but with operand's sign ignored and assumed to be 0. - """ - other = _convert_other(other, raiseit=True) - - s = self.copy_abs() - o = other.copy_abs() - return s.compare_total(o) - - def copy_abs(self): - """Returns a copy with the sign set to 0. """ - return _dec_from_triple(0, self._int, self._exp, self._is_special) - - def copy_negate(self): - """Returns a copy with the sign inverted.""" - if self._sign: - return _dec_from_triple(0, self._int, self._exp, self._is_special) - else: - return _dec_from_triple(1, self._int, self._exp, self._is_special) - - def copy_sign(self, other, context=None): - """Returns self with the sign of other.""" - other = _convert_other(other, raiseit=True) - return _dec_from_triple(other._sign, self._int, - self._exp, self._is_special) - - def exp(self, context=None): - """Returns e ** self.""" - - if context is None: - context = getcontext() - - # exp(NaN) = NaN - ans = self._check_nans(context=context) - if ans: - return ans - - # exp(-Infinity) = 0 - if self._isinfinity() == -1: - return _Zero - - # exp(0) = 1 - if not self: - return _One - - # exp(Infinity) = Infinity - if self._isinfinity() == 1: - return Decimal(self) - - # the result is now guaranteed to be inexact (the true - # mathematical result is transcendental). There's no need to - # raise Rounded and Inexact here---they'll always be raised as - # a result of the call to _fix. - p = context.prec - adj = self.adjusted() - - # we only need to do any computation for quite a small range - # of adjusted exponents---for example, -29 <= adj <= 10 for - # the default context. For smaller exponent the result is - # indistinguishable from 1 at the given precision, while for - # larger exponent the result either overflows or underflows. - if self._sign == 0 and adj > len(str((context.Emax+1)*3)): - # overflow - ans = _dec_from_triple(0, '1', context.Emax+1) - elif self._sign == 1 and adj > len(str((-context.Etiny()+1)*3)): - # underflow to 0 - ans = _dec_from_triple(0, '1', context.Etiny()-1) - elif self._sign == 0 and adj < -p: - # p+1 digits; final round will raise correct flags - ans = _dec_from_triple(0, '1' + '0'*(p-1) + '1', -p) - elif self._sign == 1 and adj < -p-1: - # p+1 digits; final round will raise correct flags - ans = _dec_from_triple(0, '9'*(p+1), -p-1) - # general case - else: - op = _WorkRep(self) - c, e = op.int, op.exp - if op.sign == 1: - c = -c - - # compute correctly rounded result: increase precision by - # 3 digits at a time until we get an unambiguously - # roundable result - extra = 3 - while True: - coeff, exp = _dexp(c, e, p+extra) - if coeff % (5*10**(len(str(coeff))-p-1)): - break - extra += 3 - - ans = _dec_from_triple(0, str(coeff), exp) - - # at this stage, ans should round correctly with *any* - # rounding mode, not just with ROUND_HALF_EVEN - context = context._shallow_copy() - rounding = context._set_rounding(ROUND_HALF_EVEN) - ans = ans._fix(context) - context.rounding = rounding - - return ans - - def is_canonical(self): - """Return True if self is canonical; otherwise return False. - - Currently, the encoding of a Decimal instance is always - canonical, so this method returns True for any Decimal. - """ - return True - - def is_finite(self): - """Return True if self is finite; otherwise return False. - - A Decimal instance is considered finite if it is neither - infinite nor a NaN. - """ - return not self._is_special - - def is_infinite(self): - """Return True if self is infinite; otherwise return False.""" - return self._exp == 'F' - - def is_nan(self): - """Return True if self is a qNaN or sNaN; otherwise return False.""" - return self._exp in ('n', 'N') - - def is_normal(self, context=None): - """Return True if self is a normal number; otherwise return False.""" - if self._is_special or not self: - return False - if context is None: - context = getcontext() - return context.Emin <= self.adjusted() - - def is_qnan(self): - """Return True if self is a quiet NaN; otherwise return False.""" - return self._exp == 'n' - - def is_signed(self): - """Return True if self is negative; otherwise return False.""" - return self._sign == 1 - - def is_snan(self): - """Return True if self is a signaling NaN; otherwise return False.""" - return self._exp == 'N' - - def is_subnormal(self, context=None): - """Return True if self is subnormal; otherwise return False.""" - if self._is_special or not self: - return False - if context is None: - context = getcontext() - return self.adjusted() < context.Emin - - def is_zero(self): - """Return True if self is a zero; otherwise return False.""" - return not self._is_special and self._int == '0' - - def _ln_exp_bound(self): - """Compute a lower bound for the adjusted exponent of self.ln(). - In other words, compute r such that self.ln() >= 10**r. Assumes - that self is finite and positive and that self != 1. - """ - - # for 0.1 <= x <= 10 we use the inequalities 1-1/x <= ln(x) <= x-1 - adj = self._exp + len(self._int) - 1 - if adj >= 1: - # argument >= 10; we use 23/10 = 2.3 as a lower bound for ln(10) - return len(str(adj*23//10)) - 1 - if adj <= -2: - # argument <= 0.1 - return len(str((-1-adj)*23//10)) - 1 - op = _WorkRep(self) - c, e = op.int, op.exp - if adj == 0: - # 1 < self < 10 - num = str(c-10**-e) - den = str(c) - return len(num) - len(den) - (num < den) - # adj == -1, 0.1 <= self < 1 - return e + len(str(10**-e - c)) - 1 - - - def ln(self, context=None): - """Returns the natural (base e) logarithm of self.""" - - if context is None: - context = getcontext() - - # ln(NaN) = NaN - ans = self._check_nans(context=context) - if ans: - return ans - - # ln(0.0) == -Infinity - if not self: - return _NegativeInfinity - - # ln(Infinity) = Infinity - if self._isinfinity() == 1: - return _Infinity - - # ln(1.0) == 0.0 - if self == _One: - return _Zero - - # ln(negative) raises InvalidOperation - if self._sign == 1: - return context._raise_error(InvalidOperation, - 'ln of a negative value') - - # result is irrational, so necessarily inexact - op = _WorkRep(self) - c, e = op.int, op.exp - p = context.prec - - # correctly rounded result: repeatedly increase precision by 3 - # until we get an unambiguously roundable result - places = p - self._ln_exp_bound() + 2 # at least p+3 places - while True: - coeff = _dlog(c, e, places) - # assert len(str(abs(coeff)))-p >= 1 - if coeff % (5*10**(len(str(abs(coeff)))-p-1)): - break - places += 3 - ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places) - - context = context._shallow_copy() - rounding = context._set_rounding(ROUND_HALF_EVEN) - ans = ans._fix(context) - context.rounding = rounding - return ans - - def _log10_exp_bound(self): - """Compute a lower bound for the adjusted exponent of self.log10(). - In other words, find r such that self.log10() >= 10**r. - Assumes that self is finite and positive and that self != 1. - """ - - # For x >= 10 or x < 0.1 we only need a bound on the integer - # part of log10(self), and this comes directly from the - # exponent of x. For 0.1 <= x <= 10 we use the inequalities - # 1-1/x <= log(x) <= x-1. If x > 1 we have |log10(x)| > - # (1-1/x)/2.31 > 0. If x < 1 then |log10(x)| > (1-x)/2.31 > 0 - - adj = self._exp + len(self._int) - 1 - if adj >= 1: - # self >= 10 - return len(str(adj))-1 - if adj <= -2: - # self < 0.1 - return len(str(-1-adj))-1 - op = _WorkRep(self) - c, e = op.int, op.exp - if adj == 0: - # 1 < self < 10 - num = str(c-10**-e) - den = str(231*c) - return len(num) - len(den) - (num < den) + 2 - # adj == -1, 0.1 <= self < 1 - num = str(10**-e-c) - return len(num) + e - (num < "231") - 1 - - def log10(self, context=None): - """Returns the base 10 logarithm of self.""" - - if context is None: - context = getcontext() - - # log10(NaN) = NaN - ans = self._check_nans(context=context) - if ans: - return ans - - # log10(0.0) == -Infinity - if not self: - return _NegativeInfinity - - # log10(Infinity) = Infinity - if self._isinfinity() == 1: - return _Infinity - - # log10(negative or -Infinity) raises InvalidOperation - if self._sign == 1: - return context._raise_error(InvalidOperation, - 'log10 of a negative value') - - # log10(10**n) = n - if self._int[0] == '1' and self._int[1:] == '0'*(len(self._int) - 1): - # answer may need rounding - ans = Decimal(self._exp + len(self._int) - 1) - else: - # result is irrational, so necessarily inexact - op = _WorkRep(self) - c, e = op.int, op.exp - p = context.prec - - # correctly rounded result: repeatedly increase precision - # until result is unambiguously roundable - places = p-self._log10_exp_bound()+2 - while True: - coeff = _dlog10(c, e, places) - # assert len(str(abs(coeff)))-p >= 1 - if coeff % (5*10**(len(str(abs(coeff)))-p-1)): - break - places += 3 - ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places) - - context = context._shallow_copy() - rounding = context._set_rounding(ROUND_HALF_EVEN) - ans = ans._fix(context) - context.rounding = rounding - return ans - - def logb(self, context=None): - """ Returns the exponent of the magnitude of self's MSD. - - The result is the integer which is the exponent of the magnitude - of the most significant digit of self (as though it were truncated - to a single digit while maintaining the value of that digit and - without limiting the resulting exponent). - """ - # logb(NaN) = NaN - ans = self._check_nans(context=context) - if ans: - return ans - - if context is None: - context = getcontext() - - # logb(+/-Inf) = +Inf - if self._isinfinity(): - return _Infinity - - # logb(0) = -Inf, DivisionByZero - if not self: - return context._raise_error(DivisionByZero, 'logb(0)', 1) - - # otherwise, simply return the adjusted exponent of self, as a - # Decimal. Note that no attempt is made to fit the result - # into the current context. - ans = Decimal(self.adjusted()) - return ans._fix(context) - - def _islogical(self): - """Return True if self is a logical operand. - - For being logical, it must be a finite number with a sign of 0, - an exponent of 0, and a coefficient whose digits must all be - either 0 or 1. - """ - if self._sign != 0 or self._exp != 0: - return False - for dig in self._int: - if dig not in '01': - return False - return True - - def _fill_logical(self, context, opa, opb): - dif = context.prec - len(opa) - if dif > 0: - opa = '0'*dif + opa - elif dif < 0: - opa = opa[-context.prec:] - dif = context.prec - len(opb) - if dif > 0: - opb = '0'*dif + opb - elif dif < 0: - opb = opb[-context.prec:] - return opa, opb - - def logical_and(self, other, context=None): - """Applies an 'and' operation between self and other's digits. - - Both self and other must be logical numbers. - """ - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - if not self._islogical() or not other._islogical(): - return context._raise_error(InvalidOperation) - - # fill to context.prec - (opa, opb) = self._fill_logical(context, self._int, other._int) - - # make the operation, and clean starting zeroes - result = "".join([str(int(a)&int(b)) for a,b in zip(opa,opb)]) - return _dec_from_triple(0, result.lstrip('0') or '0', 0) - - def logical_invert(self, context=None): - """Invert all its digits. - - The self must be logical number. - """ - if context is None: - context = getcontext() - return self.logical_xor(_dec_from_triple(0,'1'*context.prec,0), - context) - - def logical_or(self, other, context=None): - """Applies an 'or' operation between self and other's digits. - - Both self and other must be logical numbers. - """ - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - if not self._islogical() or not other._islogical(): - return context._raise_error(InvalidOperation) - - # fill to context.prec - (opa, opb) = self._fill_logical(context, self._int, other._int) - - # make the operation, and clean starting zeroes - result = "".join([str(int(a)|int(b)) for a,b in zip(opa,opb)]) - return _dec_from_triple(0, result.lstrip('0') or '0', 0) - - def logical_xor(self, other, context=None): - """Applies an 'xor' operation between self and other's digits. - - Both self and other must be logical numbers. - """ - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - if not self._islogical() or not other._islogical(): - return context._raise_error(InvalidOperation) - - # fill to context.prec - (opa, opb) = self._fill_logical(context, self._int, other._int) - - # make the operation, and clean starting zeroes - result = "".join([str(int(a)^int(b)) for a,b in zip(opa,opb)]) - return _dec_from_triple(0, result.lstrip('0') or '0', 0) - - def max_mag(self, other, context=None): - """Compares the values numerically with their sign ignored.""" - other = _convert_other(other, raiseit=True) - - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - # If one operand is a quiet NaN and the other is number, then the - # number is always returned - sn = self._isnan() - on = other._isnan() - if sn or on: - if on == 1 and sn == 0: - return self._fix(context) - if sn == 1 and on == 0: - return other._fix(context) - return self._check_nans(other, context) - - c = self.copy_abs()._cmp(other.copy_abs()) - if c == 0: - c = self.compare_total(other) - - if c == -1: - ans = other - else: - ans = self - - return ans._fix(context) - - def min_mag(self, other, context=None): - """Compares the values numerically with their sign ignored.""" - other = _convert_other(other, raiseit=True) - - if context is None: - context = getcontext() - - if self._is_special or other._is_special: - # If one operand is a quiet NaN and the other is number, then the - # number is always returned - sn = self._isnan() - on = other._isnan() - if sn or on: - if on == 1 and sn == 0: - return self._fix(context) - if sn == 1 and on == 0: - return other._fix(context) - return self._check_nans(other, context) - - c = self.copy_abs()._cmp(other.copy_abs()) - if c == 0: - c = self.compare_total(other) - - if c == -1: - ans = self - else: - ans = other - - return ans._fix(context) - - def next_minus(self, context=None): - """Returns the largest representable number smaller than itself.""" - if context is None: - context = getcontext() - - ans = self._check_nans(context=context) - if ans: - return ans - - if self._isinfinity() == -1: - return _NegativeInfinity - if self._isinfinity() == 1: - return _dec_from_triple(0, '9'*context.prec, context.Etop()) - - context = context.copy() - context._set_rounding(ROUND_FLOOR) - context._ignore_all_flags() - new_self = self._fix(context) - if new_self != self: - return new_self - return self.__sub__(_dec_from_triple(0, '1', context.Etiny()-1), - context) - - def next_plus(self, context=None): - """Returns the smallest representable number larger than itself.""" - if context is None: - context = getcontext() - - ans = self._check_nans(context=context) - if ans: - return ans - - if self._isinfinity() == 1: - return _Infinity - if self._isinfinity() == -1: - return _dec_from_triple(1, '9'*context.prec, context.Etop()) - - context = context.copy() - context._set_rounding(ROUND_CEILING) - context._ignore_all_flags() - new_self = self._fix(context) - if new_self != self: - return new_self - return self.__add__(_dec_from_triple(0, '1', context.Etiny()-1), - context) - - def next_toward(self, other, context=None): - """Returns the number closest to self, in the direction towards other. - - The result is the closest representable number to self - (excluding self) that is in the direction towards other, - unless both have the same value. If the two operands are - numerically equal, then the result is a copy of self with the - sign set to be the same as the sign of other. - """ - other = _convert_other(other, raiseit=True) - - if context is None: - context = getcontext() - - ans = self._check_nans(other, context) - if ans: - return ans - - comparison = self._cmp(other) - if comparison == 0: - return self.copy_sign(other) - - if comparison == -1: - ans = self.next_plus(context) - else: # comparison == 1 - ans = self.next_minus(context) - - # decide which flags to raise using value of ans - if ans._isinfinity(): - context._raise_error(Overflow, - 'Infinite result from next_toward', - ans._sign) - context._raise_error(Inexact) - context._raise_error(Rounded) - elif ans.adjusted() < context.Emin: - context._raise_error(Underflow) - context._raise_error(Subnormal) - context._raise_error(Inexact) - context._raise_error(Rounded) - # if precision == 1 then we don't raise Clamped for a - # result 0E-Etiny. - if not ans: - context._raise_error(Clamped) - - return ans - - def number_class(self, context=None): - """Returns an indication of the class of self. - - The class is one of the following strings: - sNaN - NaN - -Infinity - -Normal - -Subnormal - -Zero - +Zero - +Subnormal - +Normal - +Infinity - """ - if self.is_snan(): - return "sNaN" - if self.is_qnan(): - return "NaN" - inf = self._isinfinity() - if inf == 1: - return "+Infinity" - if inf == -1: - return "-Infinity" - if self.is_zero(): - if self._sign: - return "-Zero" - else: - return "+Zero" - if context is None: - context = getcontext() - if self.is_subnormal(context=context): - if self._sign: - return "-Subnormal" - else: - return "+Subnormal" - # just a normal, regular, boring number, :) - if self._sign: - return "-Normal" - else: - return "+Normal" - - def radix(self): - """Just returns 10, as this is Decimal, :)""" - return Decimal(10) - - def rotate(self, other, context=None): - """Returns a rotated copy of self, value-of-other times.""" - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - ans = self._check_nans(other, context) - if ans: - return ans - - if other._exp != 0: - return context._raise_error(InvalidOperation) - if not (-context.prec <= int(other) <= context.prec): - return context._raise_error(InvalidOperation) - - if self._isinfinity(): - return Decimal(self) - - # get values, pad if necessary - torot = int(other) - rotdig = self._int - topad = context.prec - len(rotdig) - if topad > 0: - rotdig = '0'*topad + rotdig - elif topad < 0: - rotdig = rotdig[-topad:] - - # let's rotate! - rotated = rotdig[torot:] + rotdig[:torot] - return _dec_from_triple(self._sign, - rotated.lstrip('0') or '0', self._exp) - - def scaleb(self, other, context=None): - """Returns self operand after adding the second value to its exp.""" - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - ans = self._check_nans(other, context) - if ans: - return ans - - if other._exp != 0: - return context._raise_error(InvalidOperation) - liminf = -2 * (context.Emax + context.prec) - limsup = 2 * (context.Emax + context.prec) - if not (liminf <= int(other) <= limsup): - return context._raise_error(InvalidOperation) - - if self._isinfinity(): - return Decimal(self) - - d = _dec_from_triple(self._sign, self._int, self._exp + int(other)) - d = d._fix(context) - return d - - def shift(self, other, context=None): - """Returns a shifted copy of self, value-of-other times.""" - if context is None: - context = getcontext() - - other = _convert_other(other, raiseit=True) - - ans = self._check_nans(other, context) - if ans: - return ans - - if other._exp != 0: - return context._raise_error(InvalidOperation) - if not (-context.prec <= int(other) <= context.prec): - return context._raise_error(InvalidOperation) - - if self._isinfinity(): - return Decimal(self) - - # get values, pad if necessary - torot = int(other) - rotdig = self._int - topad = context.prec - len(rotdig) - if topad > 0: - rotdig = '0'*topad + rotdig - elif topad < 0: - rotdig = rotdig[-topad:] - - # let's shift! - if torot < 0: - shifted = rotdig[:torot] - else: - shifted = rotdig + '0'*torot - shifted = shifted[-context.prec:] - - return _dec_from_triple(self._sign, - shifted.lstrip('0') or '0', self._exp) - - # Support for pickling, copy, and deepcopy - def __reduce__(self): - return (self.__class__, (str(self),)) - - def __copy__(self): - if type(self) is Decimal: - return self # I'm immutable; therefore I am my own clone - return self.__class__(str(self)) - - def __deepcopy__(self, memo): - if type(self) is Decimal: - return self # My components are also immutable - return self.__class__(str(self)) - - # PEP 3101 support. the _localeconv keyword argument should be - # considered private: it's provided for ease of testing only. - def __format__(self, specifier, context=None, _localeconv=None): - """Format a Decimal instance according to the given specifier. - - The specifier should be a standard format specifier, with the - form described in PEP 3101. Formatting types 'e', 'E', 'f', - 'F', 'g', 'G', 'n' and '%' are supported. If the formatting - type is omitted it defaults to 'g' or 'G', depending on the - value of context.capitals. - """ - - # Note: PEP 3101 says that if the type is not present then - # there should be at least one digit after the decimal point. - # We take the liberty of ignoring this requirement for - # Decimal---it's presumably there to make sure that - # format(float, '') behaves similarly to str(float). - if context is None: - context = getcontext() - - spec = _parse_format_specifier(specifier, _localeconv=_localeconv) - - # special values don't care about the type or precision - if self._is_special: - sign = _format_sign(self._sign, spec) - body = str(self.copy_abs()) - if spec['type'] == '%': - body += '%' - return _format_align(sign, body, spec) - - # a type of None defaults to 'g' or 'G', depending on context - if spec['type'] is None: - spec['type'] = ['g', 'G'][context.capitals] - - # if type is '%', adjust exponent of self accordingly - if spec['type'] == '%': - self = _dec_from_triple(self._sign, self._int, self._exp+2) - - # round if necessary, taking rounding mode from the context - rounding = context.rounding - precision = spec['precision'] - if precision is not None: - if spec['type'] in 'eE': - self = self._round(precision+1, rounding) - elif spec['type'] in 'fF%': - self = self._rescale(-precision, rounding) - elif spec['type'] in 'gG' and len(self._int) > precision: - self = self._round(precision, rounding) - # special case: zeros with a positive exponent can't be - # represented in fixed point; rescale them to 0e0. - if not self and self._exp > 0 and spec['type'] in 'fF%': - self = self._rescale(0, rounding) - if not self and spec['no_neg_0'] and self._sign: - adjusted_sign = 0 - else: - adjusted_sign = self._sign - - # figure out placement of the decimal point - leftdigits = self._exp + len(self._int) - if spec['type'] in 'eE': - if not self and precision is not None: - dotplace = 1 - precision - else: - dotplace = 1 - elif spec['type'] in 'fF%': - dotplace = leftdigits - elif spec['type'] in 'gG': - if self._exp <= 0 and leftdigits > -6: - dotplace = leftdigits - else: - dotplace = 1 - - # find digits before and after decimal point, and get exponent - if dotplace < 0: - intpart = '0' - fracpart = '0'*(-dotplace) + self._int - elif dotplace > len(self._int): - intpart = self._int + '0'*(dotplace-len(self._int)) - fracpart = '' - else: - intpart = self._int[:dotplace] or '0' - fracpart = self._int[dotplace:] - exp = leftdigits-dotplace - - # done with the decimal-specific stuff; hand over the rest - # of the formatting to the _format_number function - return _format_number(adjusted_sign, intpart, fracpart, exp, spec) - -def _dec_from_triple(sign, coefficient, exponent, special=False): - """Create a decimal instance directly, without any validation, - normalization (e.g. removal of leading zeros) or argument - conversion. - - This function is for *internal use only*. - """ - - self = object.__new__(Decimal) - self._sign = sign - self._int = coefficient - self._exp = exponent - self._is_special = special - - return self - -# Register Decimal as a kind of Number (an abstract base class). -# However, do not register it as Real (because Decimals are not -# interoperable with floats). -_numbers.Number.register(Decimal) - - -##### Context class ####################################################### - -class _ContextManager(object): - """Context manager class to support localcontext(). - - Sets a copy of the supplied context in __enter__() and restores - the previous decimal context in __exit__() - """ - def __init__(self, new_context): - self.new_context = new_context.copy() - def __enter__(self): - self.saved_context = getcontext() - setcontext(self.new_context) - return self.new_context - def __exit__(self, t, v, tb): - setcontext(self.saved_context) - -class Context(object): - """Contains the context for a Decimal instance. - - Contains: - prec - precision (for use in rounding, division, square roots..) - rounding - rounding type (how you round) - traps - If traps[exception] = 1, then the exception is - raised when it is caused. Otherwise, a value is - substituted in. - flags - When an exception is caused, flags[exception] is set. - (Whether or not the trap_enabler is set) - Should be reset by user of Decimal instance. - Emin - Minimum exponent - Emax - Maximum exponent - capitals - If 1, 1*10^1 is printed as 1E+1. - If 0, printed as 1e1 - clamp - If 1, change exponents if too high (Default 0) - """ - - def __init__(self, prec=None, rounding=None, Emin=None, Emax=None, - capitals=None, clamp=None, flags=None, traps=None, - _ignored_flags=None): - # Set defaults; for everything except flags and _ignored_flags, - # inherit from DefaultContext. - try: - dc = DefaultContext - except NameError: - pass - - self.prec = prec if prec is not None else dc.prec - self.rounding = rounding if rounding is not None else dc.rounding - self.Emin = Emin if Emin is not None else dc.Emin - self.Emax = Emax if Emax is not None else dc.Emax - self.capitals = capitals if capitals is not None else dc.capitals - self.clamp = clamp if clamp is not None else dc.clamp - - if _ignored_flags is None: - self._ignored_flags = [] - else: - self._ignored_flags = _ignored_flags - - if traps is None: - self.traps = dc.traps.copy() - elif not isinstance(traps, dict): - self.traps = dict((s, int(s in traps)) for s in _signals + traps) - else: - self.traps = traps - - if flags is None: - self.flags = dict.fromkeys(_signals, 0) - elif not isinstance(flags, dict): - self.flags = dict((s, int(s in flags)) for s in _signals + flags) - else: - self.flags = flags - - def _set_integer_check(self, name, value, vmin, vmax): - if not isinstance(value, int): - raise TypeError("%s must be an integer" % name) - if vmin == '-inf': - if value > vmax: - raise ValueError("%s must be in [%s, %d]. got: %s" % (name, vmin, vmax, value)) - elif vmax == 'inf': - if value < vmin: - raise ValueError("%s must be in [%d, %s]. got: %s" % (name, vmin, vmax, value)) - else: - if value < vmin or value > vmax: - raise ValueError("%s must be in [%d, %d]. got %s" % (name, vmin, vmax, value)) - return object.__setattr__(self, name, value) - - def _set_signal_dict(self, name, d): - if not isinstance(d, dict): - raise TypeError("%s must be a signal dict" % d) - for key in d: - if not key in _signals: - raise KeyError("%s is not a valid signal dict" % d) - for key in _signals: - if not key in d: - raise KeyError("%s is not a valid signal dict" % d) - return object.__setattr__(self, name, d) - - def __setattr__(self, name, value): - if name == 'prec': - return self._set_integer_check(name, value, 1, 'inf') - elif name == 'Emin': - return self._set_integer_check(name, value, '-inf', 0) - elif name == 'Emax': - return self._set_integer_check(name, value, 0, 'inf') - elif name == 'capitals': - return self._set_integer_check(name, value, 0, 1) - elif name == 'clamp': - return self._set_integer_check(name, value, 0, 1) - elif name == 'rounding': - if not value in _rounding_modes: - # raise TypeError even for strings to have consistency - # among various implementations. - raise TypeError("%s: invalid rounding mode" % value) - return object.__setattr__(self, name, value) - elif name == 'flags' or name == 'traps': - return self._set_signal_dict(name, value) - elif name == '_ignored_flags': - return object.__setattr__(self, name, value) - else: - raise AttributeError( - "'decimal.Context' object has no attribute '%s'" % name) - - def __delattr__(self, name): - raise AttributeError("%s cannot be deleted" % name) - - # Support for pickling, copy, and deepcopy - def __reduce__(self): - flags = [sig for sig, v in self.flags.items() if v] - traps = [sig for sig, v in self.traps.items() if v] - return (self.__class__, - (self.prec, self.rounding, self.Emin, self.Emax, - self.capitals, self.clamp, flags, traps)) - - def __repr__(self): - """Show the current context.""" - s = [] - s.append('Context(prec=%(prec)d, rounding=%(rounding)s, ' - 'Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, ' - 'clamp=%(clamp)d' - % vars(self)) - names = [f.__name__ for f, v in self.flags.items() if v] - s.append('flags=[' + ', '.join(names) + ']') - names = [t.__name__ for t, v in self.traps.items() if v] - s.append('traps=[' + ', '.join(names) + ']') - return ', '.join(s) + ')' - - def clear_flags(self): - """Reset all flags to zero""" - for flag in self.flags: - self.flags[flag] = 0 - - def clear_traps(self): - """Reset all traps to zero""" - for flag in self.traps: - self.traps[flag] = 0 - - def _shallow_copy(self): - """Returns a shallow copy from self.""" - nc = Context(self.prec, self.rounding, self.Emin, self.Emax, - self.capitals, self.clamp, self.flags, self.traps, - self._ignored_flags) - return nc - - def copy(self): - """Returns a deep copy from self.""" - nc = Context(self.prec, self.rounding, self.Emin, self.Emax, - self.capitals, self.clamp, - self.flags.copy(), self.traps.copy(), - self._ignored_flags) - return nc - __copy__ = copy - - def _raise_error(self, condition, explanation = None, *args): - """Handles an error - - If the flag is in _ignored_flags, returns the default response. - Otherwise, it sets the flag, then, if the corresponding - trap_enabler is set, it reraises the exception. Otherwise, it returns - the default value after setting the flag. - """ - error = _condition_map.get(condition, condition) - if error in self._ignored_flags: - # Don't touch the flag - return error().handle(self, *args) - - self.flags[error] = 1 - if not self.traps[error]: - # The errors define how to handle themselves. - return condition().handle(self, *args) - - # Errors should only be risked on copies of the context - # self._ignored_flags = [] - raise error(explanation) - - def _ignore_all_flags(self): - """Ignore all flags, if they are raised""" - return self._ignore_flags(*_signals) - - def _ignore_flags(self, *flags): - """Ignore the flags, if they are raised""" - # Do not mutate-- This way, copies of a context leave the original - # alone. - self._ignored_flags = (self._ignored_flags + list(flags)) - return list(flags) - - def _regard_flags(self, *flags): - """Stop ignoring the flags, if they are raised""" - if flags and isinstance(flags[0], (tuple,list)): - flags = flags[0] - for flag in flags: - self._ignored_flags.remove(flag) - - # We inherit object.__hash__, so we must deny this explicitly - __hash__ = None - - def Etiny(self): - """Returns Etiny (= Emin - prec + 1)""" - return int(self.Emin - self.prec + 1) - - def Etop(self): - """Returns maximum exponent (= Emax - prec + 1)""" - return int(self.Emax - self.prec + 1) - - def _set_rounding(self, type): - """Sets the rounding type. - - Sets the rounding type, and returns the current (previous) - rounding type. Often used like: - - context = context.copy() - # so you don't change the calling context - # if an error occurs in the middle. - rounding = context._set_rounding(ROUND_UP) - val = self.__sub__(other, context=context) - context._set_rounding(rounding) - - This will make it round up for that operation. - """ - rounding = self.rounding - self.rounding = type - return rounding - - def create_decimal(self, num='0'): - """Creates a new Decimal instance but using self as context. - - This method implements the to-number operation of the - IBM Decimal specification.""" - - if isinstance(num, str) and (num != num.strip() or '_' in num): - return self._raise_error(ConversionSyntax, - "trailing or leading whitespace and " - "underscores are not permitted.") - - d = Decimal(num, context=self) - if d._isnan() and len(d._int) > self.prec - self.clamp: - return self._raise_error(ConversionSyntax, - "diagnostic info too long in NaN") - return d._fix(self) - - def create_decimal_from_float(self, f): - """Creates a new Decimal instance from a float but rounding using self - as the context. - - >>> context = Context(prec=5, rounding=ROUND_DOWN) - >>> context.create_decimal_from_float(3.1415926535897932) - Decimal('3.1415') - >>> context = Context(prec=5, traps=[Inexact]) - >>> context.create_decimal_from_float(3.1415926535897932) - Traceback (most recent call last): - ... - decimal.Inexact: None - - """ - d = Decimal.from_float(f) # An exact conversion - return d._fix(self) # Apply the context rounding - - # Methods - def abs(self, a): - """Returns the absolute value of the operand. - - If the operand is negative, the result is the same as using the minus - operation on the operand. Otherwise, the result is the same as using - the plus operation on the operand. - - >>> ExtendedContext.abs(Decimal('2.1')) - Decimal('2.1') - >>> ExtendedContext.abs(Decimal('-100')) - Decimal('100') - >>> ExtendedContext.abs(Decimal('101.5')) - Decimal('101.5') - >>> ExtendedContext.abs(Decimal('-101.5')) - Decimal('101.5') - >>> ExtendedContext.abs(-1) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return a.__abs__(context=self) - - def add(self, a, b): - """Return the sum of the two operands. - - >>> ExtendedContext.add(Decimal('12'), Decimal('7.00')) - Decimal('19.00') - >>> ExtendedContext.add(Decimal('1E+2'), Decimal('1.01E+4')) - Decimal('1.02E+4') - >>> ExtendedContext.add(1, Decimal(2)) - Decimal('3') - >>> ExtendedContext.add(Decimal(8), 5) - Decimal('13') - >>> ExtendedContext.add(5, 5) - Decimal('10') - """ - a = _convert_other(a, raiseit=True) - r = a.__add__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def _apply(self, a): - return str(a._fix(self)) - - def canonical(self, a): - """Returns the same Decimal object. - - As we do not have different encodings for the same number, the - received object already is in its canonical form. - - >>> ExtendedContext.canonical(Decimal('2.50')) - Decimal('2.50') - """ - if not isinstance(a, Decimal): - raise TypeError("canonical requires a Decimal as an argument.") - return a.canonical() - - def compare(self, a, b): - """Compares values numerically. - - If the signs of the operands differ, a value representing each operand - ('-1' if the operand is less than zero, '0' if the operand is zero or - negative zero, or '1' if the operand is greater than zero) is used in - place of that operand for the comparison instead of the actual - operand. - - The comparison is then effected by subtracting the second operand from - the first and then returning a value according to the result of the - subtraction: '-1' if the result is less than zero, '0' if the result is - zero or negative zero, or '1' if the result is greater than zero. - - >>> ExtendedContext.compare(Decimal('2.1'), Decimal('3')) - Decimal('-1') - >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.1')) - Decimal('0') - >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.10')) - Decimal('0') - >>> ExtendedContext.compare(Decimal('3'), Decimal('2.1')) - Decimal('1') - >>> ExtendedContext.compare(Decimal('2.1'), Decimal('-3')) - Decimal('1') - >>> ExtendedContext.compare(Decimal('-3'), Decimal('2.1')) - Decimal('-1') - >>> ExtendedContext.compare(1, 2) - Decimal('-1') - >>> ExtendedContext.compare(Decimal(1), 2) - Decimal('-1') - >>> ExtendedContext.compare(1, Decimal(2)) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.compare(b, context=self) - - def compare_signal(self, a, b): - """Compares the values of the two operands numerically. - - It's pretty much like compare(), but all NaNs signal, with signaling - NaNs taking precedence over quiet NaNs. - - >>> c = ExtendedContext - >>> c.compare_signal(Decimal('2.1'), Decimal('3')) - Decimal('-1') - >>> c.compare_signal(Decimal('2.1'), Decimal('2.1')) - Decimal('0') - >>> c.flags[InvalidOperation] = 0 - >>> print(c.flags[InvalidOperation]) - 0 - >>> c.compare_signal(Decimal('NaN'), Decimal('2.1')) - Decimal('NaN') - >>> print(c.flags[InvalidOperation]) - 1 - >>> c.flags[InvalidOperation] = 0 - >>> print(c.flags[InvalidOperation]) - 0 - >>> c.compare_signal(Decimal('sNaN'), Decimal('2.1')) - Decimal('NaN') - >>> print(c.flags[InvalidOperation]) - 1 - >>> c.compare_signal(-1, 2) - Decimal('-1') - >>> c.compare_signal(Decimal(-1), 2) - Decimal('-1') - >>> c.compare_signal(-1, Decimal(2)) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.compare_signal(b, context=self) - - def compare_total(self, a, b): - """Compares two operands using their abstract representation. - - This is not like the standard compare, which use their numerical - value. Note that a total ordering is defined for all possible abstract - representations. - - >>> ExtendedContext.compare_total(Decimal('12.73'), Decimal('127.9')) - Decimal('-1') - >>> ExtendedContext.compare_total(Decimal('-127'), Decimal('12')) - Decimal('-1') - >>> ExtendedContext.compare_total(Decimal('12.30'), Decimal('12.3')) - Decimal('-1') - >>> ExtendedContext.compare_total(Decimal('12.30'), Decimal('12.30')) - Decimal('0') - >>> ExtendedContext.compare_total(Decimal('12.3'), Decimal('12.300')) - Decimal('1') - >>> ExtendedContext.compare_total(Decimal('12.3'), Decimal('NaN')) - Decimal('-1') - >>> ExtendedContext.compare_total(1, 2) - Decimal('-1') - >>> ExtendedContext.compare_total(Decimal(1), 2) - Decimal('-1') - >>> ExtendedContext.compare_total(1, Decimal(2)) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.compare_total(b) - - def compare_total_mag(self, a, b): - """Compares two operands using their abstract representation ignoring sign. - - Like compare_total, but with operand's sign ignored and assumed to be 0. - """ - a = _convert_other(a, raiseit=True) - return a.compare_total_mag(b) - - def copy_abs(self, a): - """Returns a copy of the operand with the sign set to 0. - - >>> ExtendedContext.copy_abs(Decimal('2.1')) - Decimal('2.1') - >>> ExtendedContext.copy_abs(Decimal('-100')) - Decimal('100') - >>> ExtendedContext.copy_abs(-1) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return a.copy_abs() - - def copy_decimal(self, a): - """Returns a copy of the decimal object. - - >>> ExtendedContext.copy_decimal(Decimal('2.1')) - Decimal('2.1') - >>> ExtendedContext.copy_decimal(Decimal('-1.00')) - Decimal('-1.00') - >>> ExtendedContext.copy_decimal(1) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return Decimal(a) - - def copy_negate(self, a): - """Returns a copy of the operand with the sign inverted. - - >>> ExtendedContext.copy_negate(Decimal('101.5')) - Decimal('-101.5') - >>> ExtendedContext.copy_negate(Decimal('-101.5')) - Decimal('101.5') - >>> ExtendedContext.copy_negate(1) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.copy_negate() - - def copy_sign(self, a, b): - """Copies the second operand's sign to the first one. - - In detail, it returns a copy of the first operand with the sign - equal to the sign of the second operand. - - >>> ExtendedContext.copy_sign(Decimal( '1.50'), Decimal('7.33')) - Decimal('1.50') - >>> ExtendedContext.copy_sign(Decimal('-1.50'), Decimal('7.33')) - Decimal('1.50') - >>> ExtendedContext.copy_sign(Decimal( '1.50'), Decimal('-7.33')) - Decimal('-1.50') - >>> ExtendedContext.copy_sign(Decimal('-1.50'), Decimal('-7.33')) - Decimal('-1.50') - >>> ExtendedContext.copy_sign(1, -2) - Decimal('-1') - >>> ExtendedContext.copy_sign(Decimal(1), -2) - Decimal('-1') - >>> ExtendedContext.copy_sign(1, Decimal(-2)) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.copy_sign(b) - - def divide(self, a, b): - """Decimal division in a specified context. - - >>> ExtendedContext.divide(Decimal('1'), Decimal('3')) - Decimal('0.333333333') - >>> ExtendedContext.divide(Decimal('2'), Decimal('3')) - Decimal('0.666666667') - >>> ExtendedContext.divide(Decimal('5'), Decimal('2')) - Decimal('2.5') - >>> ExtendedContext.divide(Decimal('1'), Decimal('10')) - Decimal('0.1') - >>> ExtendedContext.divide(Decimal('12'), Decimal('12')) - Decimal('1') - >>> ExtendedContext.divide(Decimal('8.00'), Decimal('2')) - Decimal('4.00') - >>> ExtendedContext.divide(Decimal('2.400'), Decimal('2.0')) - Decimal('1.20') - >>> ExtendedContext.divide(Decimal('1000'), Decimal('100')) - Decimal('10') - >>> ExtendedContext.divide(Decimal('1000'), Decimal('1')) - Decimal('1000') - >>> ExtendedContext.divide(Decimal('2.40E+6'), Decimal('2')) - Decimal('1.20E+6') - >>> ExtendedContext.divide(5, 5) - Decimal('1') - >>> ExtendedContext.divide(Decimal(5), 5) - Decimal('1') - >>> ExtendedContext.divide(5, Decimal(5)) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - r = a.__truediv__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def divide_int(self, a, b): - """Divides two numbers and returns the integer part of the result. - - >>> ExtendedContext.divide_int(Decimal('2'), Decimal('3')) - Decimal('0') - >>> ExtendedContext.divide_int(Decimal('10'), Decimal('3')) - Decimal('3') - >>> ExtendedContext.divide_int(Decimal('1'), Decimal('0.3')) - Decimal('3') - >>> ExtendedContext.divide_int(10, 3) - Decimal('3') - >>> ExtendedContext.divide_int(Decimal(10), 3) - Decimal('3') - >>> ExtendedContext.divide_int(10, Decimal(3)) - Decimal('3') - """ - a = _convert_other(a, raiseit=True) - r = a.__floordiv__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def divmod(self, a, b): - """Return (a // b, a % b). - - >>> ExtendedContext.divmod(Decimal(8), Decimal(3)) - (Decimal('2'), Decimal('2')) - >>> ExtendedContext.divmod(Decimal(8), Decimal(4)) - (Decimal('2'), Decimal('0')) - >>> ExtendedContext.divmod(8, 4) - (Decimal('2'), Decimal('0')) - >>> ExtendedContext.divmod(Decimal(8), 4) - (Decimal('2'), Decimal('0')) - >>> ExtendedContext.divmod(8, Decimal(4)) - (Decimal('2'), Decimal('0')) - """ - a = _convert_other(a, raiseit=True) - r = a.__divmod__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def exp(self, a): - """Returns e ** a. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.exp(Decimal('-Infinity')) - Decimal('0') - >>> c.exp(Decimal('-1')) - Decimal('0.367879441') - >>> c.exp(Decimal('0')) - Decimal('1') - >>> c.exp(Decimal('1')) - Decimal('2.71828183') - >>> c.exp(Decimal('0.693147181')) - Decimal('2.00000000') - >>> c.exp(Decimal('+Infinity')) - Decimal('Infinity') - >>> c.exp(10) - Decimal('22026.4658') - """ - a =_convert_other(a, raiseit=True) - return a.exp(context=self) - - def fma(self, a, b, c): - """Returns a multiplied by b, plus c. - - The first two operands are multiplied together, using multiply, - the third operand is then added to the result of that - multiplication, using add, all with only one final rounding. - - >>> ExtendedContext.fma(Decimal('3'), Decimal('5'), Decimal('7')) - Decimal('22') - >>> ExtendedContext.fma(Decimal('3'), Decimal('-5'), Decimal('7')) - Decimal('-8') - >>> ExtendedContext.fma(Decimal('888565290'), Decimal('1557.96930'), Decimal('-86087.7578')) - Decimal('1.38435736E+12') - >>> ExtendedContext.fma(1, 3, 4) - Decimal('7') - >>> ExtendedContext.fma(1, Decimal(3), 4) - Decimal('7') - >>> ExtendedContext.fma(1, 3, Decimal(4)) - Decimal('7') - """ - a = _convert_other(a, raiseit=True) - return a.fma(b, c, context=self) - - def is_canonical(self, a): - """Return True if the operand is canonical; otherwise return False. - - Currently, the encoding of a Decimal instance is always - canonical, so this method returns True for any Decimal. - - >>> ExtendedContext.is_canonical(Decimal('2.50')) - True - """ - if not isinstance(a, Decimal): - raise TypeError("is_canonical requires a Decimal as an argument.") - return a.is_canonical() - - def is_finite(self, a): - """Return True if the operand is finite; otherwise return False. - - A Decimal instance is considered finite if it is neither - infinite nor a NaN. - - >>> ExtendedContext.is_finite(Decimal('2.50')) - True - >>> ExtendedContext.is_finite(Decimal('-0.3')) - True - >>> ExtendedContext.is_finite(Decimal('0')) - True - >>> ExtendedContext.is_finite(Decimal('Inf')) - False - >>> ExtendedContext.is_finite(Decimal('NaN')) - False - >>> ExtendedContext.is_finite(1) - True - """ - a = _convert_other(a, raiseit=True) - return a.is_finite() - - def is_infinite(self, a): - """Return True if the operand is infinite; otherwise return False. - - >>> ExtendedContext.is_infinite(Decimal('2.50')) - False - >>> ExtendedContext.is_infinite(Decimal('-Inf')) - True - >>> ExtendedContext.is_infinite(Decimal('NaN')) - False - >>> ExtendedContext.is_infinite(1) - False - """ - a = _convert_other(a, raiseit=True) - return a.is_infinite() - - def is_nan(self, a): - """Return True if the operand is a qNaN or sNaN; - otherwise return False. - - >>> ExtendedContext.is_nan(Decimal('2.50')) - False - >>> ExtendedContext.is_nan(Decimal('NaN')) - True - >>> ExtendedContext.is_nan(Decimal('-sNaN')) - True - >>> ExtendedContext.is_nan(1) - False - """ - a = _convert_other(a, raiseit=True) - return a.is_nan() - - def is_normal(self, a): - """Return True if the operand is a normal number; - otherwise return False. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.is_normal(Decimal('2.50')) - True - >>> c.is_normal(Decimal('0.1E-999')) - False - >>> c.is_normal(Decimal('0.00')) - False - >>> c.is_normal(Decimal('-Inf')) - False - >>> c.is_normal(Decimal('NaN')) - False - >>> c.is_normal(1) - True - """ - a = _convert_other(a, raiseit=True) - return a.is_normal(context=self) - - def is_qnan(self, a): - """Return True if the operand is a quiet NaN; otherwise return False. - - >>> ExtendedContext.is_qnan(Decimal('2.50')) - False - >>> ExtendedContext.is_qnan(Decimal('NaN')) - True - >>> ExtendedContext.is_qnan(Decimal('sNaN')) - False - >>> ExtendedContext.is_qnan(1) - False - """ - a = _convert_other(a, raiseit=True) - return a.is_qnan() - - def is_signed(self, a): - """Return True if the operand is negative; otherwise return False. - - >>> ExtendedContext.is_signed(Decimal('2.50')) - False - >>> ExtendedContext.is_signed(Decimal('-12')) - True - >>> ExtendedContext.is_signed(Decimal('-0')) - True - >>> ExtendedContext.is_signed(8) - False - >>> ExtendedContext.is_signed(-8) - True - """ - a = _convert_other(a, raiseit=True) - return a.is_signed() - - def is_snan(self, a): - """Return True if the operand is a signaling NaN; - otherwise return False. - - >>> ExtendedContext.is_snan(Decimal('2.50')) - False - >>> ExtendedContext.is_snan(Decimal('NaN')) - False - >>> ExtendedContext.is_snan(Decimal('sNaN')) - True - >>> ExtendedContext.is_snan(1) - False - """ - a = _convert_other(a, raiseit=True) - return a.is_snan() - - def is_subnormal(self, a): - """Return True if the operand is subnormal; otherwise return False. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.is_subnormal(Decimal('2.50')) - False - >>> c.is_subnormal(Decimal('0.1E-999')) - True - >>> c.is_subnormal(Decimal('0.00')) - False - >>> c.is_subnormal(Decimal('-Inf')) - False - >>> c.is_subnormal(Decimal('NaN')) - False - >>> c.is_subnormal(1) - False - """ - a = _convert_other(a, raiseit=True) - return a.is_subnormal(context=self) - - def is_zero(self, a): - """Return True if the operand is a zero; otherwise return False. - - >>> ExtendedContext.is_zero(Decimal('0')) - True - >>> ExtendedContext.is_zero(Decimal('2.50')) - False - >>> ExtendedContext.is_zero(Decimal('-0E+2')) - True - >>> ExtendedContext.is_zero(1) - False - >>> ExtendedContext.is_zero(0) - True - """ - a = _convert_other(a, raiseit=True) - return a.is_zero() - - def ln(self, a): - """Returns the natural (base e) logarithm of the operand. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.ln(Decimal('0')) - Decimal('-Infinity') - >>> c.ln(Decimal('1.000')) - Decimal('0') - >>> c.ln(Decimal('2.71828183')) - Decimal('1.00000000') - >>> c.ln(Decimal('10')) - Decimal('2.30258509') - >>> c.ln(Decimal('+Infinity')) - Decimal('Infinity') - >>> c.ln(1) - Decimal('0') - """ - a = _convert_other(a, raiseit=True) - return a.ln(context=self) - - def log10(self, a): - """Returns the base 10 logarithm of the operand. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.log10(Decimal('0')) - Decimal('-Infinity') - >>> c.log10(Decimal('0.001')) - Decimal('-3') - >>> c.log10(Decimal('1.000')) - Decimal('0') - >>> c.log10(Decimal('2')) - Decimal('0.301029996') - >>> c.log10(Decimal('10')) - Decimal('1') - >>> c.log10(Decimal('70')) - Decimal('1.84509804') - >>> c.log10(Decimal('+Infinity')) - Decimal('Infinity') - >>> c.log10(0) - Decimal('-Infinity') - >>> c.log10(1) - Decimal('0') - """ - a = _convert_other(a, raiseit=True) - return a.log10(context=self) - - def logb(self, a): - """ Returns the exponent of the magnitude of the operand's MSD. - - The result is the integer which is the exponent of the magnitude - of the most significant digit of the operand (as though the - operand were truncated to a single digit while maintaining the - value of that digit and without limiting the resulting exponent). - - >>> ExtendedContext.logb(Decimal('250')) - Decimal('2') - >>> ExtendedContext.logb(Decimal('2.50')) - Decimal('0') - >>> ExtendedContext.logb(Decimal('0.03')) - Decimal('-2') - >>> ExtendedContext.logb(Decimal('0')) - Decimal('-Infinity') - >>> ExtendedContext.logb(1) - Decimal('0') - >>> ExtendedContext.logb(10) - Decimal('1') - >>> ExtendedContext.logb(100) - Decimal('2') - """ - a = _convert_other(a, raiseit=True) - return a.logb(context=self) - - def logical_and(self, a, b): - """Applies the logical operation 'and' between each operand's digits. - - The operands must be both logical numbers. - - >>> ExtendedContext.logical_and(Decimal('0'), Decimal('0')) - Decimal('0') - >>> ExtendedContext.logical_and(Decimal('0'), Decimal('1')) - Decimal('0') - >>> ExtendedContext.logical_and(Decimal('1'), Decimal('0')) - Decimal('0') - >>> ExtendedContext.logical_and(Decimal('1'), Decimal('1')) - Decimal('1') - >>> ExtendedContext.logical_and(Decimal('1100'), Decimal('1010')) - Decimal('1000') - >>> ExtendedContext.logical_and(Decimal('1111'), Decimal('10')) - Decimal('10') - >>> ExtendedContext.logical_and(110, 1101) - Decimal('100') - >>> ExtendedContext.logical_and(Decimal(110), 1101) - Decimal('100') - >>> ExtendedContext.logical_and(110, Decimal(1101)) - Decimal('100') - """ - a = _convert_other(a, raiseit=True) - return a.logical_and(b, context=self) - - def logical_invert(self, a): - """Invert all the digits in the operand. - - The operand must be a logical number. - - >>> ExtendedContext.logical_invert(Decimal('0')) - Decimal('111111111') - >>> ExtendedContext.logical_invert(Decimal('1')) - Decimal('111111110') - >>> ExtendedContext.logical_invert(Decimal('111111111')) - Decimal('0') - >>> ExtendedContext.logical_invert(Decimal('101010101')) - Decimal('10101010') - >>> ExtendedContext.logical_invert(1101) - Decimal('111110010') - """ - a = _convert_other(a, raiseit=True) - return a.logical_invert(context=self) - - def logical_or(self, a, b): - """Applies the logical operation 'or' between each operand's digits. - - The operands must be both logical numbers. - - >>> ExtendedContext.logical_or(Decimal('0'), Decimal('0')) - Decimal('0') - >>> ExtendedContext.logical_or(Decimal('0'), Decimal('1')) - Decimal('1') - >>> ExtendedContext.logical_or(Decimal('1'), Decimal('0')) - Decimal('1') - >>> ExtendedContext.logical_or(Decimal('1'), Decimal('1')) - Decimal('1') - >>> ExtendedContext.logical_or(Decimal('1100'), Decimal('1010')) - Decimal('1110') - >>> ExtendedContext.logical_or(Decimal('1110'), Decimal('10')) - Decimal('1110') - >>> ExtendedContext.logical_or(110, 1101) - Decimal('1111') - >>> ExtendedContext.logical_or(Decimal(110), 1101) - Decimal('1111') - >>> ExtendedContext.logical_or(110, Decimal(1101)) - Decimal('1111') - """ - a = _convert_other(a, raiseit=True) - return a.logical_or(b, context=self) - - def logical_xor(self, a, b): - """Applies the logical operation 'xor' between each operand's digits. - - The operands must be both logical numbers. - - >>> ExtendedContext.logical_xor(Decimal('0'), Decimal('0')) - Decimal('0') - >>> ExtendedContext.logical_xor(Decimal('0'), Decimal('1')) - Decimal('1') - >>> ExtendedContext.logical_xor(Decimal('1'), Decimal('0')) - Decimal('1') - >>> ExtendedContext.logical_xor(Decimal('1'), Decimal('1')) - Decimal('0') - >>> ExtendedContext.logical_xor(Decimal('1100'), Decimal('1010')) - Decimal('110') - >>> ExtendedContext.logical_xor(Decimal('1111'), Decimal('10')) - Decimal('1101') - >>> ExtendedContext.logical_xor(110, 1101) - Decimal('1011') - >>> ExtendedContext.logical_xor(Decimal(110), 1101) - Decimal('1011') - >>> ExtendedContext.logical_xor(110, Decimal(1101)) - Decimal('1011') - """ - a = _convert_other(a, raiseit=True) - return a.logical_xor(b, context=self) - - def max(self, a, b): - """max compares two values numerically and returns the maximum. - - If either operand is a NaN then the general rules apply. - Otherwise, the operands are compared as though by the compare - operation. If they are numerically equal then the left-hand operand - is chosen as the result. Otherwise the maximum (closer to positive - infinity) of the two operands is chosen as the result. - - >>> ExtendedContext.max(Decimal('3'), Decimal('2')) - Decimal('3') - >>> ExtendedContext.max(Decimal('-10'), Decimal('3')) - Decimal('3') - >>> ExtendedContext.max(Decimal('1.0'), Decimal('1')) - Decimal('1') - >>> ExtendedContext.max(Decimal('7'), Decimal('NaN')) - Decimal('7') - >>> ExtendedContext.max(1, 2) - Decimal('2') - >>> ExtendedContext.max(Decimal(1), 2) - Decimal('2') - >>> ExtendedContext.max(1, Decimal(2)) - Decimal('2') - """ - a = _convert_other(a, raiseit=True) - return a.max(b, context=self) - - def max_mag(self, a, b): - """Compares the values numerically with their sign ignored. - - >>> ExtendedContext.max_mag(Decimal('7'), Decimal('NaN')) - Decimal('7') - >>> ExtendedContext.max_mag(Decimal('7'), Decimal('-10')) - Decimal('-10') - >>> ExtendedContext.max_mag(1, -2) - Decimal('-2') - >>> ExtendedContext.max_mag(Decimal(1), -2) - Decimal('-2') - >>> ExtendedContext.max_mag(1, Decimal(-2)) - Decimal('-2') - """ - a = _convert_other(a, raiseit=True) - return a.max_mag(b, context=self) - - def min(self, a, b): - """min compares two values numerically and returns the minimum. - - If either operand is a NaN then the general rules apply. - Otherwise, the operands are compared as though by the compare - operation. If they are numerically equal then the left-hand operand - is chosen as the result. Otherwise the minimum (closer to negative - infinity) of the two operands is chosen as the result. - - >>> ExtendedContext.min(Decimal('3'), Decimal('2')) - Decimal('2') - >>> ExtendedContext.min(Decimal('-10'), Decimal('3')) - Decimal('-10') - >>> ExtendedContext.min(Decimal('1.0'), Decimal('1')) - Decimal('1.0') - >>> ExtendedContext.min(Decimal('7'), Decimal('NaN')) - Decimal('7') - >>> ExtendedContext.min(1, 2) - Decimal('1') - >>> ExtendedContext.min(Decimal(1), 2) - Decimal('1') - >>> ExtendedContext.min(1, Decimal(29)) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return a.min(b, context=self) - - def min_mag(self, a, b): - """Compares the values numerically with their sign ignored. - - >>> ExtendedContext.min_mag(Decimal('3'), Decimal('-2')) - Decimal('-2') - >>> ExtendedContext.min_mag(Decimal('-3'), Decimal('NaN')) - Decimal('-3') - >>> ExtendedContext.min_mag(1, -2) - Decimal('1') - >>> ExtendedContext.min_mag(Decimal(1), -2) - Decimal('1') - >>> ExtendedContext.min_mag(1, Decimal(-2)) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return a.min_mag(b, context=self) - - def minus(self, a): - """Minus corresponds to unary prefix minus in Python. - - The operation is evaluated using the same rules as subtract; the - operation minus(a) is calculated as subtract('0', a) where the '0' - has the same exponent as the operand. - - >>> ExtendedContext.minus(Decimal('1.3')) - Decimal('-1.3') - >>> ExtendedContext.minus(Decimal('-1.3')) - Decimal('1.3') - >>> ExtendedContext.minus(1) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.__neg__(context=self) - - def multiply(self, a, b): - """multiply multiplies two operands. - - If either operand is a special value then the general rules apply. - Otherwise, the operands are multiplied together - ('long multiplication'), resulting in a number which may be as long as - the sum of the lengths of the two operands. - - >>> ExtendedContext.multiply(Decimal('1.20'), Decimal('3')) - Decimal('3.60') - >>> ExtendedContext.multiply(Decimal('7'), Decimal('3')) - Decimal('21') - >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('0.8')) - Decimal('0.72') - >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('-0')) - Decimal('-0.0') - >>> ExtendedContext.multiply(Decimal('654321'), Decimal('654321')) - Decimal('4.28135971E+11') - >>> ExtendedContext.multiply(7, 7) - Decimal('49') - >>> ExtendedContext.multiply(Decimal(7), 7) - Decimal('49') - >>> ExtendedContext.multiply(7, Decimal(7)) - Decimal('49') - """ - a = _convert_other(a, raiseit=True) - r = a.__mul__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def next_minus(self, a): - """Returns the largest representable number smaller than a. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> ExtendedContext.next_minus(Decimal('1')) - Decimal('0.999999999') - >>> c.next_minus(Decimal('1E-1007')) - Decimal('0E-1007') - >>> ExtendedContext.next_minus(Decimal('-1.00000003')) - Decimal('-1.00000004') - >>> c.next_minus(Decimal('Infinity')) - Decimal('9.99999999E+999') - >>> c.next_minus(1) - Decimal('0.999999999') - """ - a = _convert_other(a, raiseit=True) - return a.next_minus(context=self) - - def next_plus(self, a): - """Returns the smallest representable number larger than a. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> ExtendedContext.next_plus(Decimal('1')) - Decimal('1.00000001') - >>> c.next_plus(Decimal('-1E-1007')) - Decimal('-0E-1007') - >>> ExtendedContext.next_plus(Decimal('-1.00000003')) - Decimal('-1.00000002') - >>> c.next_plus(Decimal('-Infinity')) - Decimal('-9.99999999E+999') - >>> c.next_plus(1) - Decimal('1.00000001') - """ - a = _convert_other(a, raiseit=True) - return a.next_plus(context=self) - - def next_toward(self, a, b): - """Returns the number closest to a, in direction towards b. - - The result is the closest representable number from the first - operand (but not the first operand) that is in the direction - towards the second operand, unless the operands have the same - value. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.next_toward(Decimal('1'), Decimal('2')) - Decimal('1.00000001') - >>> c.next_toward(Decimal('-1E-1007'), Decimal('1')) - Decimal('-0E-1007') - >>> c.next_toward(Decimal('-1.00000003'), Decimal('0')) - Decimal('-1.00000002') - >>> c.next_toward(Decimal('1'), Decimal('0')) - Decimal('0.999999999') - >>> c.next_toward(Decimal('1E-1007'), Decimal('-100')) - Decimal('0E-1007') - >>> c.next_toward(Decimal('-1.00000003'), Decimal('-10')) - Decimal('-1.00000004') - >>> c.next_toward(Decimal('0.00'), Decimal('-0.0000')) - Decimal('-0.00') - >>> c.next_toward(0, 1) - Decimal('1E-1007') - >>> c.next_toward(Decimal(0), 1) - Decimal('1E-1007') - >>> c.next_toward(0, Decimal(1)) - Decimal('1E-1007') - """ - a = _convert_other(a, raiseit=True) - return a.next_toward(b, context=self) - - def normalize(self, a): - """normalize reduces an operand to its simplest form. - - Essentially a plus operation with all trailing zeros removed from the - result. - - >>> ExtendedContext.normalize(Decimal('2.1')) - Decimal('2.1') - >>> ExtendedContext.normalize(Decimal('-2.0')) - Decimal('-2') - >>> ExtendedContext.normalize(Decimal('1.200')) - Decimal('1.2') - >>> ExtendedContext.normalize(Decimal('-120')) - Decimal('-1.2E+2') - >>> ExtendedContext.normalize(Decimal('120.00')) - Decimal('1.2E+2') - >>> ExtendedContext.normalize(Decimal('0.00')) - Decimal('0') - >>> ExtendedContext.normalize(6) - Decimal('6') - """ - a = _convert_other(a, raiseit=True) - return a.normalize(context=self) - - def number_class(self, a): - """Returns an indication of the class of the operand. - - The class is one of the following strings: - -sNaN - -NaN - -Infinity - -Normal - -Subnormal - -Zero - +Zero - +Subnormal - +Normal - +Infinity - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.number_class(Decimal('Infinity')) - '+Infinity' - >>> c.number_class(Decimal('1E-10')) - '+Normal' - >>> c.number_class(Decimal('2.50')) - '+Normal' - >>> c.number_class(Decimal('0.1E-999')) - '+Subnormal' - >>> c.number_class(Decimal('0')) - '+Zero' - >>> c.number_class(Decimal('-0')) - '-Zero' - >>> c.number_class(Decimal('-0.1E-999')) - '-Subnormal' - >>> c.number_class(Decimal('-1E-10')) - '-Normal' - >>> c.number_class(Decimal('-2.50')) - '-Normal' - >>> c.number_class(Decimal('-Infinity')) - '-Infinity' - >>> c.number_class(Decimal('NaN')) - 'NaN' - >>> c.number_class(Decimal('-NaN')) - 'NaN' - >>> c.number_class(Decimal('sNaN')) - 'sNaN' - >>> c.number_class(123) - '+Normal' - """ - a = _convert_other(a, raiseit=True) - return a.number_class(context=self) - - def plus(self, a): - """Plus corresponds to unary prefix plus in Python. - - The operation is evaluated using the same rules as add; the - operation plus(a) is calculated as add('0', a) where the '0' - has the same exponent as the operand. - - >>> ExtendedContext.plus(Decimal('1.3')) - Decimal('1.3') - >>> ExtendedContext.plus(Decimal('-1.3')) - Decimal('-1.3') - >>> ExtendedContext.plus(-1) - Decimal('-1') - """ - a = _convert_other(a, raiseit=True) - return a.__pos__(context=self) - - def power(self, a, b, modulo=None): - """Raises a to the power of b, to modulo if given. - - With two arguments, compute a**b. If a is negative then b - must be integral. The result will be inexact unless b is - integral and the result is finite and can be expressed exactly - in 'precision' digits. - - With three arguments, compute (a**b) % modulo. For the - three argument form, the following restrictions on the - arguments hold: - - - all three arguments must be integral - - b must be nonnegative - - at least one of a or b must be nonzero - - modulo must be nonzero and have at most 'precision' digits - - The result of pow(a, b, modulo) is identical to the result - that would be obtained by computing (a**b) % modulo with - unbounded precision, but is computed more efficiently. It is - always exact. - - >>> c = ExtendedContext.copy() - >>> c.Emin = -999 - >>> c.Emax = 999 - >>> c.power(Decimal('2'), Decimal('3')) - Decimal('8') - >>> c.power(Decimal('-2'), Decimal('3')) - Decimal('-8') - >>> c.power(Decimal('2'), Decimal('-3')) - Decimal('0.125') - >>> c.power(Decimal('1.7'), Decimal('8')) - Decimal('69.7575744') - >>> c.power(Decimal('10'), Decimal('0.301029996')) - Decimal('2.00000000') - >>> c.power(Decimal('Infinity'), Decimal('-1')) - Decimal('0') - >>> c.power(Decimal('Infinity'), Decimal('0')) - Decimal('1') - >>> c.power(Decimal('Infinity'), Decimal('1')) - Decimal('Infinity') - >>> c.power(Decimal('-Infinity'), Decimal('-1')) - Decimal('-0') - >>> c.power(Decimal('-Infinity'), Decimal('0')) - Decimal('1') - >>> c.power(Decimal('-Infinity'), Decimal('1')) - Decimal('-Infinity') - >>> c.power(Decimal('-Infinity'), Decimal('2')) - Decimal('Infinity') - >>> c.power(Decimal('0'), Decimal('0')) - Decimal('NaN') - - >>> c.power(Decimal('3'), Decimal('7'), Decimal('16')) - Decimal('11') - >>> c.power(Decimal('-3'), Decimal('7'), Decimal('16')) - Decimal('-11') - >>> c.power(Decimal('-3'), Decimal('8'), Decimal('16')) - Decimal('1') - >>> c.power(Decimal('3'), Decimal('7'), Decimal('-16')) - Decimal('11') - >>> c.power(Decimal('23E12345'), Decimal('67E189'), Decimal('123456789')) - Decimal('11729830') - >>> c.power(Decimal('-0'), Decimal('17'), Decimal('1729')) - Decimal('-0') - >>> c.power(Decimal('-23'), Decimal('0'), Decimal('65537')) - Decimal('1') - >>> ExtendedContext.power(7, 7) - Decimal('823543') - >>> ExtendedContext.power(Decimal(7), 7) - Decimal('823543') - >>> ExtendedContext.power(7, Decimal(7), 2) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - r = a.__pow__(b, modulo, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def quantize(self, a, b): - """Returns a value equal to 'a' (rounded), having the exponent of 'b'. - - The coefficient of the result is derived from that of the left-hand - operand. It may be rounded using the current rounding setting (if the - exponent is being increased), multiplied by a positive power of ten (if - the exponent is being decreased), or is unchanged (if the exponent is - already equal to that of the right-hand operand). - - Unlike other operations, if the length of the coefficient after the - quantize operation would be greater than precision then an Invalid - operation condition is raised. This guarantees that, unless there is - an error condition, the exponent of the result of a quantize is always - equal to that of the right-hand operand. - - Also unlike other operations, quantize will never raise Underflow, even - if the result is subnormal and inexact. - - >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.001')) - Decimal('2.170') - >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.01')) - Decimal('2.17') - >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.1')) - Decimal('2.2') - >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+0')) - Decimal('2') - >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+1')) - Decimal('0E+1') - >>> ExtendedContext.quantize(Decimal('-Inf'), Decimal('Infinity')) - Decimal('-Infinity') - >>> ExtendedContext.quantize(Decimal('2'), Decimal('Infinity')) - Decimal('NaN') - >>> ExtendedContext.quantize(Decimal('-0.1'), Decimal('1')) - Decimal('-0') - >>> ExtendedContext.quantize(Decimal('-0'), Decimal('1e+5')) - Decimal('-0E+5') - >>> ExtendedContext.quantize(Decimal('+35236450.6'), Decimal('1e-2')) - Decimal('NaN') - >>> ExtendedContext.quantize(Decimal('-35236450.6'), Decimal('1e-2')) - Decimal('NaN') - >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-1')) - Decimal('217.0') - >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-0')) - Decimal('217') - >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+1')) - Decimal('2.2E+2') - >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+2')) - Decimal('2E+2') - >>> ExtendedContext.quantize(1, 2) - Decimal('1') - >>> ExtendedContext.quantize(Decimal(1), 2) - Decimal('1') - >>> ExtendedContext.quantize(1, Decimal(2)) - Decimal('1') - """ - a = _convert_other(a, raiseit=True) - return a.quantize(b, context=self) - - def radix(self): - """Just returns 10, as this is Decimal, :) - - >>> ExtendedContext.radix() - Decimal('10') - """ - return Decimal(10) - - def remainder(self, a, b): - """Returns the remainder from integer division. - - The result is the residue of the dividend after the operation of - calculating integer division as described for divide-integer, rounded - to precision digits if necessary. The sign of the result, if - non-zero, is the same as that of the original dividend. - - This operation will fail under the same conditions as integer division - (that is, if integer division on the same two operands would fail, the - remainder cannot be calculated). - - >>> ExtendedContext.remainder(Decimal('2.1'), Decimal('3')) - Decimal('2.1') - >>> ExtendedContext.remainder(Decimal('10'), Decimal('3')) - Decimal('1') - >>> ExtendedContext.remainder(Decimal('-10'), Decimal('3')) - Decimal('-1') - >>> ExtendedContext.remainder(Decimal('10.2'), Decimal('1')) - Decimal('0.2') - >>> ExtendedContext.remainder(Decimal('10'), Decimal('0.3')) - Decimal('0.1') - >>> ExtendedContext.remainder(Decimal('3.6'), Decimal('1.3')) - Decimal('1.0') - >>> ExtendedContext.remainder(22, 6) - Decimal('4') - >>> ExtendedContext.remainder(Decimal(22), 6) - Decimal('4') - >>> ExtendedContext.remainder(22, Decimal(6)) - Decimal('4') - """ - a = _convert_other(a, raiseit=True) - r = a.__mod__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def remainder_near(self, a, b): - """Returns to be "a - b * n", where n is the integer nearest the exact - value of "x / b" (if two integers are equally near then the even one - is chosen). If the result is equal to 0 then its sign will be the - sign of a. - - This operation will fail under the same conditions as integer division - (that is, if integer division on the same two operands would fail, the - remainder cannot be calculated). - - >>> ExtendedContext.remainder_near(Decimal('2.1'), Decimal('3')) - Decimal('-0.9') - >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('6')) - Decimal('-2') - >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('3')) - Decimal('1') - >>> ExtendedContext.remainder_near(Decimal('-10'), Decimal('3')) - Decimal('-1') - >>> ExtendedContext.remainder_near(Decimal('10.2'), Decimal('1')) - Decimal('0.2') - >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('0.3')) - Decimal('0.1') - >>> ExtendedContext.remainder_near(Decimal('3.6'), Decimal('1.3')) - Decimal('-0.3') - >>> ExtendedContext.remainder_near(3, 11) - Decimal('3') - >>> ExtendedContext.remainder_near(Decimal(3), 11) - Decimal('3') - >>> ExtendedContext.remainder_near(3, Decimal(11)) - Decimal('3') - """ - a = _convert_other(a, raiseit=True) - return a.remainder_near(b, context=self) - - def rotate(self, a, b): - """Returns a rotated copy of a, b times. - - The coefficient of the result is a rotated copy of the digits in - the coefficient of the first operand. The number of places of - rotation is taken from the absolute value of the second operand, - with the rotation being to the left if the second operand is - positive or to the right otherwise. - - >>> ExtendedContext.rotate(Decimal('34'), Decimal('8')) - Decimal('400000003') - >>> ExtendedContext.rotate(Decimal('12'), Decimal('9')) - Decimal('12') - >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('-2')) - Decimal('891234567') - >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('0')) - Decimal('123456789') - >>> ExtendedContext.rotate(Decimal('123456789'), Decimal('+2')) - Decimal('345678912') - >>> ExtendedContext.rotate(1333333, 1) - Decimal('13333330') - >>> ExtendedContext.rotate(Decimal(1333333), 1) - Decimal('13333330') - >>> ExtendedContext.rotate(1333333, Decimal(1)) - Decimal('13333330') - """ - a = _convert_other(a, raiseit=True) - return a.rotate(b, context=self) - - def same_quantum(self, a, b): - """Returns True if the two operands have the same exponent. - - The result is never affected by either the sign or the coefficient of - either operand. - - >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.001')) - False - >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.01')) - True - >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('1')) - False - >>> ExtendedContext.same_quantum(Decimal('Inf'), Decimal('-Inf')) - True - >>> ExtendedContext.same_quantum(10000, -1) - True - >>> ExtendedContext.same_quantum(Decimal(10000), -1) - True - >>> ExtendedContext.same_quantum(10000, Decimal(-1)) - True - """ - a = _convert_other(a, raiseit=True) - return a.same_quantum(b) - - def scaleb (self, a, b): - """Returns the first operand after adding the second value its exp. - - >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('-2')) - Decimal('0.0750') - >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('0')) - Decimal('7.50') - >>> ExtendedContext.scaleb(Decimal('7.50'), Decimal('3')) - Decimal('7.50E+3') - >>> ExtendedContext.scaleb(1, 4) - Decimal('1E+4') - >>> ExtendedContext.scaleb(Decimal(1), 4) - Decimal('1E+4') - >>> ExtendedContext.scaleb(1, Decimal(4)) - Decimal('1E+4') - """ - a = _convert_other(a, raiseit=True) - return a.scaleb(b, context=self) - - def shift(self, a, b): - """Returns a shifted copy of a, b times. - - The coefficient of the result is a shifted copy of the digits - in the coefficient of the first operand. The number of places - to shift is taken from the absolute value of the second operand, - with the shift being to the left if the second operand is - positive or to the right otherwise. Digits shifted into the - coefficient are zeros. - - >>> ExtendedContext.shift(Decimal('34'), Decimal('8')) - Decimal('400000000') - >>> ExtendedContext.shift(Decimal('12'), Decimal('9')) - Decimal('0') - >>> ExtendedContext.shift(Decimal('123456789'), Decimal('-2')) - Decimal('1234567') - >>> ExtendedContext.shift(Decimal('123456789'), Decimal('0')) - Decimal('123456789') - >>> ExtendedContext.shift(Decimal('123456789'), Decimal('+2')) - Decimal('345678900') - >>> ExtendedContext.shift(88888888, 2) - Decimal('888888800') - >>> ExtendedContext.shift(Decimal(88888888), 2) - Decimal('888888800') - >>> ExtendedContext.shift(88888888, Decimal(2)) - Decimal('888888800') - """ - a = _convert_other(a, raiseit=True) - return a.shift(b, context=self) - - def sqrt(self, a): - """Square root of a non-negative number to context precision. - - If the result must be inexact, it is rounded using the round-half-even - algorithm. - - >>> ExtendedContext.sqrt(Decimal('0')) - Decimal('0') - >>> ExtendedContext.sqrt(Decimal('-0')) - Decimal('-0') - >>> ExtendedContext.sqrt(Decimal('0.39')) - Decimal('0.624499800') - >>> ExtendedContext.sqrt(Decimal('100')) - Decimal('10') - >>> ExtendedContext.sqrt(Decimal('1')) - Decimal('1') - >>> ExtendedContext.sqrt(Decimal('1.0')) - Decimal('1.0') - >>> ExtendedContext.sqrt(Decimal('1.00')) - Decimal('1.0') - >>> ExtendedContext.sqrt(Decimal('7')) - Decimal('2.64575131') - >>> ExtendedContext.sqrt(Decimal('10')) - Decimal('3.16227766') - >>> ExtendedContext.sqrt(2) - Decimal('1.41421356') - >>> ExtendedContext.prec - 9 - """ - a = _convert_other(a, raiseit=True) - return a.sqrt(context=self) - - def subtract(self, a, b): - """Return the difference between the two operands. - - >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.07')) - Decimal('0.23') - >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.30')) - Decimal('0.00') - >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('2.07')) - Decimal('-0.77') - >>> ExtendedContext.subtract(8, 5) - Decimal('3') - >>> ExtendedContext.subtract(Decimal(8), 5) - Decimal('3') - >>> ExtendedContext.subtract(8, Decimal(5)) - Decimal('3') - """ - a = _convert_other(a, raiseit=True) - r = a.__sub__(b, context=self) - if r is NotImplemented: - raise TypeError("Unable to convert %s to Decimal" % b) - else: - return r - - def to_eng_string(self, a): - """Convert to a string, using engineering notation if an exponent is needed. - - Engineering notation has an exponent which is a multiple of 3. This - can leave up to 3 digits to the left of the decimal place and may - require the addition of either one or two trailing zeros. - - The operation is not affected by the context. - - >>> ExtendedContext.to_eng_string(Decimal('123E+1')) - '1.23E+3' - >>> ExtendedContext.to_eng_string(Decimal('123E+3')) - '123E+3' - >>> ExtendedContext.to_eng_string(Decimal('123E-10')) - '12.3E-9' - >>> ExtendedContext.to_eng_string(Decimal('-123E-12')) - '-123E-12' - >>> ExtendedContext.to_eng_string(Decimal('7E-7')) - '700E-9' - >>> ExtendedContext.to_eng_string(Decimal('7E+1')) - '70' - >>> ExtendedContext.to_eng_string(Decimal('0E+1')) - '0.00E+3' - - """ - a = _convert_other(a, raiseit=True) - return a.to_eng_string(context=self) - - def to_sci_string(self, a): - """Converts a number to a string, using scientific notation. - - The operation is not affected by the context. - """ - a = _convert_other(a, raiseit=True) - return a.__str__(context=self) - - def to_integral_exact(self, a): - """Rounds to an integer. - - When the operand has a negative exponent, the result is the same - as using the quantize() operation using the given operand as the - left-hand-operand, 1E+0 as the right-hand-operand, and the precision - of the operand as the precision setting; Inexact and Rounded flags - are allowed in this operation. The rounding mode is taken from the - context. - - >>> ExtendedContext.to_integral_exact(Decimal('2.1')) - Decimal('2') - >>> ExtendedContext.to_integral_exact(Decimal('100')) - Decimal('100') - >>> ExtendedContext.to_integral_exact(Decimal('100.0')) - Decimal('100') - >>> ExtendedContext.to_integral_exact(Decimal('101.5')) - Decimal('102') - >>> ExtendedContext.to_integral_exact(Decimal('-101.5')) - Decimal('-102') - >>> ExtendedContext.to_integral_exact(Decimal('10E+5')) - Decimal('1.0E+6') - >>> ExtendedContext.to_integral_exact(Decimal('7.89E+77')) - Decimal('7.89E+77') - >>> ExtendedContext.to_integral_exact(Decimal('-Inf')) - Decimal('-Infinity') - """ - a = _convert_other(a, raiseit=True) - return a.to_integral_exact(context=self) - - def to_integral_value(self, a): - """Rounds to an integer. - - When the operand has a negative exponent, the result is the same - as using the quantize() operation using the given operand as the - left-hand-operand, 1E+0 as the right-hand-operand, and the precision - of the operand as the precision setting, except that no flags will - be set. The rounding mode is taken from the context. - - >>> ExtendedContext.to_integral_value(Decimal('2.1')) - Decimal('2') - >>> ExtendedContext.to_integral_value(Decimal('100')) - Decimal('100') - >>> ExtendedContext.to_integral_value(Decimal('100.0')) - Decimal('100') - >>> ExtendedContext.to_integral_value(Decimal('101.5')) - Decimal('102') - >>> ExtendedContext.to_integral_value(Decimal('-101.5')) - Decimal('-102') - >>> ExtendedContext.to_integral_value(Decimal('10E+5')) - Decimal('1.0E+6') - >>> ExtendedContext.to_integral_value(Decimal('7.89E+77')) - Decimal('7.89E+77') - >>> ExtendedContext.to_integral_value(Decimal('-Inf')) - Decimal('-Infinity') - """ - a = _convert_other(a, raiseit=True) - return a.to_integral_value(context=self) - - # the method name changed, but we provide also the old one, for compatibility - to_integral = to_integral_value - -class _WorkRep(object): - __slots__ = ('sign','int','exp') - # sign: 0 or 1 - # int: int - # exp: None, int, or string - - def __init__(self, value=None): - if value is None: - self.sign = None - self.int = 0 - self.exp = None - elif isinstance(value, Decimal): - self.sign = value._sign - self.int = int(value._int) - self.exp = value._exp - else: - # assert isinstance(value, tuple) - self.sign = value[0] - self.int = value[1] - self.exp = value[2] - - def __repr__(self): - return "(%r, %r, %r)" % (self.sign, self.int, self.exp) - - - -def _normalize(op1, op2, prec = 0): - """Normalizes op1, op2 to have the same exp and length of coefficient. - - Done during addition. - """ - if op1.exp < op2.exp: - tmp = op2 - other = op1 - else: - tmp = op1 - other = op2 - - # Let exp = min(tmp.exp - 1, tmp.adjusted() - precision - 1). - # Then adding 10**exp to tmp has the same effect (after rounding) - # as adding any positive quantity smaller than 10**exp; similarly - # for subtraction. So if other is smaller than 10**exp we replace - # it with 10**exp. This avoids tmp.exp - other.exp getting too large. - tmp_len = len(str(tmp.int)) - other_len = len(str(other.int)) - exp = tmp.exp + min(-1, tmp_len - prec - 2) - if other_len + other.exp - 1 < exp: - other.int = 1 - other.exp = exp - - tmp.int *= 10 ** (tmp.exp - other.exp) - tmp.exp = other.exp - return op1, op2 - -##### Integer arithmetic functions used by ln, log10, exp and __pow__ ##### - -_nbits = int.bit_length - -def _decimal_lshift_exact(n, e): - """ Given integers n and e, return n * 10**e if it's an integer, else None. - - The computation is designed to avoid computing large powers of 10 - unnecessarily. - - >>> _decimal_lshift_exact(3, 4) - 30000 - >>> _decimal_lshift_exact(300, -999999999) # returns None - - """ - if n == 0: - return 0 - elif e >= 0: - return n * 10**e - else: - # val_n = largest power of 10 dividing n. - str_n = str(abs(n)) - val_n = len(str_n) - len(str_n.rstrip('0')) - return None if val_n < -e else n // 10**-e - -def _sqrt_nearest(n, a): - """Closest integer to the square root of the positive integer n. a is - an initial approximation to the square root. Any positive integer - will do for a, but the closer a is to the square root of n the - faster convergence will be. - - """ - if n <= 0 or a <= 0: - raise ValueError("Both arguments to _sqrt_nearest should be positive.") - - b=0 - while a != b: - b, a = a, a--n//a>>1 - return a - -def _rshift_nearest(x, shift): - """Given an integer x and a nonnegative integer shift, return closest - integer to x / 2**shift; use round-to-even in case of a tie. - - """ - b, q = 1 << shift, x >> shift - return q + (2*(x & (b-1)) + (q&1) > b) - -def _div_nearest(a, b): - """Closest integer to a/b, a and b positive integers; rounds to even - in the case of a tie. - - """ - q, r = divmod(a, b) - return q + (2*r + (q&1) > b) - -def _ilog(x, M, L = 8): - """Integer approximation to M*log(x/M), with absolute error boundable - in terms only of x/M. - - Given positive integers x and M, return an integer approximation to - M * log(x/M). For L = 8 and 0.1 <= x/M <= 10 the difference - between the approximation and the exact result is at most 22. For - L = 8 and 1.0 <= x/M <= 10.0 the difference is at most 15. In - both cases these are upper bounds on the error; it will usually be - much smaller.""" - - # The basic algorithm is the following: let log1p be the function - # log1p(x) = log(1+x). Then log(x/M) = log1p((x-M)/M). We use - # the reduction - # - # log1p(y) = 2*log1p(y/(1+sqrt(1+y))) - # - # repeatedly until the argument to log1p is small (< 2**-L in - # absolute value). For small y we can use the Taylor series - # expansion - # - # log1p(y) ~ y - y**2/2 + y**3/3 - ... - (-y)**T/T - # - # truncating at T such that y**T is small enough. The whole - # computation is carried out in a form of fixed-point arithmetic, - # with a real number z being represented by an integer - # approximation to z*M. To avoid loss of precision, the y below - # is actually an integer approximation to 2**R*y*M, where R is the - # number of reductions performed so far. - - y = x-M - # argument reduction; R = number of reductions performed - R = 0 - while (R <= L and abs(y) << L-R >= M or - R > L and abs(y) >> R-L >= M): - y = _div_nearest((M*y) << 1, - M + _sqrt_nearest(M*(M+_rshift_nearest(y, R)), M)) - R += 1 - - # Taylor series with T terms - T = -int(-10*len(str(M))//(3*L)) - yshift = _rshift_nearest(y, R) - w = _div_nearest(M, T) - for k in range(T-1, 0, -1): - w = _div_nearest(M, k) - _div_nearest(yshift*w, M) - - return _div_nearest(w*y, M) - -def _dlog10(c, e, p): - """Given integers c, e and p with c > 0, p >= 0, compute an integer - approximation to 10**p * log10(c*10**e), with an absolute error of - at most 1. Assumes that c*10**e is not exactly 1.""" - - # increase precision by 2; compensate for this by dividing - # final result by 100 - p += 2 - - # write c*10**e as d*10**f with either: - # f >= 0 and 1 <= d <= 10, or - # f <= 0 and 0.1 <= d <= 1. - # Thus for c*10**e close to 1, f = 0 - l = len(str(c)) - f = e+l - (e+l >= 1) - - if p > 0: - M = 10**p - k = e+p-f - if k >= 0: - c *= 10**k - else: - c = _div_nearest(c, 10**-k) - - log_d = _ilog(c, M) # error < 5 + 22 = 27 - log_10 = _log10_digits(p) # error < 1 - log_d = _div_nearest(log_d*M, log_10) - log_tenpower = f*M # exact - else: - log_d = 0 # error < 2.31 - log_tenpower = _div_nearest(f, 10**-p) # error < 0.5 - - return _div_nearest(log_tenpower+log_d, 100) - -def _dlog(c, e, p): - """Given integers c, e and p with c > 0, compute an integer - approximation to 10**p * log(c*10**e), with an absolute error of - at most 1. Assumes that c*10**e is not exactly 1.""" - - # Increase precision by 2. The precision increase is compensated - # for at the end with a division by 100. - p += 2 - - # rewrite c*10**e as d*10**f with either f >= 0 and 1 <= d <= 10, - # or f <= 0 and 0.1 <= d <= 1. Then we can compute 10**p * log(c*10**e) - # as 10**p * log(d) + 10**p*f * log(10). - l = len(str(c)) - f = e+l - (e+l >= 1) - - # compute approximation to 10**p*log(d), with error < 27 - if p > 0: - k = e+p-f - if k >= 0: - c *= 10**k - else: - c = _div_nearest(c, 10**-k) # error of <= 0.5 in c - - # _ilog magnifies existing error in c by a factor of at most 10 - log_d = _ilog(c, 10**p) # error < 5 + 22 = 27 - else: - # p <= 0: just approximate the whole thing by 0; error < 2.31 - log_d = 0 - - # compute approximation to f*10**p*log(10), with error < 11. - if f: - extra = len(str(abs(f)))-1 - if p + extra >= 0: - # error in f * _log10_digits(p+extra) < |f| * 1 = |f| - # after division, error < |f|/10**extra + 0.5 < 10 + 0.5 < 11 - f_log_ten = _div_nearest(f*_log10_digits(p+extra), 10**extra) - else: - f_log_ten = 0 - else: - f_log_ten = 0 - - # error in sum < 11+27 = 38; error after division < 0.38 + 0.5 < 1 - return _div_nearest(f_log_ten + log_d, 100) - -class _Log10Memoize(object): - """Class to compute, store, and allow retrieval of, digits of the - constant log(10) = 2.302585.... This constant is needed by - Decimal.ln, Decimal.log10, Decimal.exp and Decimal.__pow__.""" - def __init__(self): - self.digits = "23025850929940456840179914546843642076011014886" - - def getdigits(self, p): - """Given an integer p >= 0, return floor(10**p)*log(10). - - For example, self.getdigits(3) returns 2302. - """ - # digits are stored as a string, for quick conversion to - # integer in the case that we've already computed enough - # digits; the stored digits should always be correct - # (truncated, not rounded to nearest). - if p < 0: - raise ValueError("p should be nonnegative") - - if p >= len(self.digits): - # compute p+3, p+6, p+9, ... digits; continue until at - # least one of the extra digits is nonzero - extra = 3 - while True: - # compute p+extra digits, correct to within 1ulp - M = 10**(p+extra+2) - digits = str(_div_nearest(_ilog(10*M, M), 100)) - if digits[-extra:] != '0'*extra: - break - extra += 3 - # keep all reliable digits so far; remove trailing zeros - # and next nonzero digit - self.digits = digits.rstrip('0')[:-1] - return int(self.digits[:p+1]) - -_log10_digits = _Log10Memoize().getdigits - -def _iexp(x, M, L=8): - """Given integers x and M, M > 0, such that x/M is small in absolute - value, compute an integer approximation to M*exp(x/M). For 0 <= - x/M <= 2.4, the absolute error in the result is bounded by 60 (and - is usually much smaller).""" - - # Algorithm: to compute exp(z) for a real number z, first divide z - # by a suitable power R of 2 so that |z/2**R| < 2**-L. Then - # compute expm1(z/2**R) = exp(z/2**R) - 1 using the usual Taylor - # series - # - # expm1(x) = x + x**2/2! + x**3/3! + ... - # - # Now use the identity - # - # expm1(2x) = expm1(x)*(expm1(x)+2) - # - # R times to compute the sequence expm1(z/2**R), - # expm1(z/2**(R-1)), ... , exp(z/2), exp(z). - - # Find R such that x/2**R/M <= 2**-L - R = _nbits((x<<L)//M) - - # Taylor series. (2**L)**T > M - T = -int(-10*len(str(M))//(3*L)) - y = _div_nearest(x, T) - Mshift = M<<R - for i in range(T-1, 0, -1): - y = _div_nearest(x*(Mshift + y), Mshift * i) - - # Expansion - for k in range(R-1, -1, -1): - Mshift = M<<(k+2) - y = _div_nearest(y*(y+Mshift), Mshift) - - return M+y - -def _dexp(c, e, p): - """Compute an approximation to exp(c*10**e), with p decimal places of - precision. - - Returns integers d, f such that: - - 10**(p-1) <= d <= 10**p, and - (d-1)*10**f < exp(c*10**e) < (d+1)*10**f - - In other words, d*10**f is an approximation to exp(c*10**e) with p - digits of precision, and with an error in d of at most 1. This is - almost, but not quite, the same as the error being < 1ulp: when d - = 10**(p-1) the error could be up to 10 ulp.""" - - # we'll call iexp with M = 10**(p+2), giving p+3 digits of precision - p += 2 - - # compute log(10) with extra precision = adjusted exponent of c*10**e - extra = max(0, e + len(str(c)) - 1) - q = p + extra - - # compute quotient c*10**e/(log(10)) = c*10**(e+q)/(log(10)*10**q), - # rounding down - shift = e+q - if shift >= 0: - cshift = c*10**shift - else: - cshift = c//10**-shift - quot, rem = divmod(cshift, _log10_digits(q)) - - # reduce remainder back to original precision - rem = _div_nearest(rem, 10**extra) - - # error in result of _iexp < 120; error after division < 0.62 - return _div_nearest(_iexp(rem, 10**p), 1000), quot - p + 3 - -def _dpower(xc, xe, yc, ye, p): - """Given integers xc, xe, yc and ye representing Decimals x = xc*10**xe and - y = yc*10**ye, compute x**y. Returns a pair of integers (c, e) such that: - - 10**(p-1) <= c <= 10**p, and - (c-1)*10**e < x**y < (c+1)*10**e - - in other words, c*10**e is an approximation to x**y with p digits - of precision, and with an error in c of at most 1. (This is - almost, but not quite, the same as the error being < 1ulp: when c - == 10**(p-1) we can only guarantee error < 10ulp.) - - We assume that: x is positive and not equal to 1, and y is nonzero. - """ - - # Find b such that 10**(b-1) <= |y| <= 10**b - b = len(str(abs(yc))) + ye - - # log(x) = lxc*10**(-p-b-1), to p+b+1 places after the decimal point - lxc = _dlog(xc, xe, p+b+1) - - # compute product y*log(x) = yc*lxc*10**(-p-b-1+ye) = pc*10**(-p-1) - shift = ye-b - if shift >= 0: - pc = lxc*yc*10**shift - else: - pc = _div_nearest(lxc*yc, 10**-shift) - - if pc == 0: - # we prefer a result that isn't exactly 1; this makes it - # easier to compute a correctly rounded result in __pow__ - if ((len(str(xc)) + xe >= 1) == (yc > 0)): # if x**y > 1: - coeff, exp = 10**(p-1)+1, 1-p - else: - coeff, exp = 10**p-1, -p - else: - coeff, exp = _dexp(pc, -(p+1), p+1) - coeff = _div_nearest(coeff, 10) - exp += 1 - - return coeff, exp - -def _log10_lb(c, correction = { - '1': 100, '2': 70, '3': 53, '4': 40, '5': 31, - '6': 23, '7': 16, '8': 10, '9': 5}): - """Compute a lower bound for 100*log10(c) for a positive integer c.""" - if c <= 0: - raise ValueError("The argument to _log10_lb should be nonnegative.") - str_c = str(c) - return 100*len(str_c) - correction[str_c[0]] - -##### Helper Functions #################################################### - -def _convert_other(other, raiseit=False, allow_float=False): - """Convert other to Decimal. - - Verifies that it's ok to use in an implicit construction. - If allow_float is true, allow conversion from float; this - is used in the comparison methods (__eq__ and friends). - - """ - if isinstance(other, Decimal): - return other - if isinstance(other, int): - return Decimal(other) - if allow_float and isinstance(other, float): - return Decimal.from_float(other) - - if raiseit: - raise TypeError("Unable to convert %s to Decimal" % other) - return NotImplemented - -def _convert_for_comparison(self, other, equality_op=False): - """Given a Decimal instance self and a Python object other, return - a pair (s, o) of Decimal instances such that "s op o" is - equivalent to "self op other" for any of the 6 comparison - operators "op". - - """ - if isinstance(other, Decimal): - return self, other - - # Comparison with a Rational instance (also includes integers): - # self op n/d <=> self*d op n (for n and d integers, d positive). - # A NaN or infinity can be left unchanged without affecting the - # comparison result. - if isinstance(other, _numbers.Rational): - if not self._is_special: - self = _dec_from_triple(self._sign, - str(int(self._int) * other.denominator), - self._exp) - return self, Decimal(other.numerator) - - # Comparisons with float and complex types. == and != comparisons - # with complex numbers should succeed, returning either True or False - # as appropriate. Other comparisons return NotImplemented. - if equality_op and isinstance(other, _numbers.Complex) and other.imag == 0: - other = other.real - if isinstance(other, float): - context = getcontext() - if equality_op: - context.flags[FloatOperation] = 1 - else: - context._raise_error(FloatOperation, - "strict semantics for mixing floats and Decimals are enabled") - return self, Decimal.from_float(other) - return NotImplemented, NotImplemented - - -##### Setup Specific Contexts ############################################ - -# The default context prototype used by Context() -# Is mutable, so that new contexts can have different default values - -DefaultContext = Context( - prec=28, rounding=ROUND_HALF_EVEN, - traps=[DivisionByZero, Overflow, InvalidOperation], - flags=[], - Emax=999999, - Emin=-999999, - capitals=1, - clamp=0 -) - -# Pre-made alternate contexts offered by the specification -# Don't change these; the user should be able to select these -# contexts and be able to reproduce results from other implementations -# of the spec. - -BasicContext = Context( - prec=9, rounding=ROUND_HALF_UP, - traps=[DivisionByZero, Overflow, InvalidOperation, Clamped, Underflow], - flags=[], -) - -ExtendedContext = Context( - prec=9, rounding=ROUND_HALF_EVEN, - traps=[], - flags=[], -) - - -##### crud for parsing strings ############################################# -# -# Regular expression used for parsing numeric strings. Additional -# comments: -# -# 1. Uncomment the two '\s*' lines to allow leading and/or trailing -# whitespace. But note that the specification disallows whitespace in -# a numeric string. -# -# 2. For finite numbers (not infinities and NaNs) the body of the -# number between the optional sign and the optional exponent must have -# at least one decimal digit, possibly after the decimal point. The -# lookahead expression '(?=\d|\.\d)' checks this. - -import re -_parser = re.compile(r""" # A numeric string consists of: -# \s* - (?P<sign>[-+])? # an optional sign, followed by either... - ( - (?=\d|\.\d) # ...a number (with at least one digit) - (?P<int>\d*) # having a (possibly empty) integer part - (\.(?P<frac>\d*))? # followed by an optional fractional part - (E(?P<exp>[-+]?\d+))? # followed by an optional exponent, or... - | - Inf(inity)? # ...an infinity, or... - | - (?P<signal>s)? # ...an (optionally signaling) - NaN # NaN - (?P<diag>\d*) # with (possibly empty) diagnostic info. - ) -# \s* - \z -""", re.VERBOSE | re.IGNORECASE).match - -_all_zeros = re.compile('0*$').match -_exact_half = re.compile('50*$').match - -##### PEP3101 support functions ############################################## -# The functions in this section have little to do with the Decimal -# class, and could potentially be reused or adapted for other pure -# Python numeric classes that want to implement __format__ -# -# A format specifier for Decimal looks like: -# -# [[fill]align][sign][z][#][0][minimumwidth][,][.precision][type] - -_parse_format_specifier_regex = re.compile(r"""\A -(?: - (?P<fill>.)? - (?P<align>[<>=^]) -)? -(?P<sign>[-+ ])? -(?P<no_neg_0>z)? -(?P<alt>\#)? -(?P<zeropad>0)? -(?P<minimumwidth>\d+)? -(?P<thousands_sep>[,_])? -(?:\. - (?=[\d,_]) # lookahead for digit or separator - (?P<precision>\d+)? - (?P<frac_separators>[,_])? -)? -(?P<type>[eEfFgGn%])? -\z -""", re.VERBOSE|re.DOTALL) - -del re - -# The locale module is only needed for the 'n' format specifier. The -# rest of the PEP 3101 code functions quite happily without it, so we -# don't care too much if locale isn't present. -try: - import locale as _locale -except ImportError: - pass - -def _parse_format_specifier(format_spec, _localeconv=None): - """Parse and validate a format specifier. - - Turns a standard numeric format specifier into a dict, with the - following entries: - - fill: fill character to pad field to minimum width - align: alignment type, either '<', '>', '=' or '^' - sign: either '+', '-' or ' ' - minimumwidth: nonnegative integer giving minimum width - zeropad: boolean, indicating whether to pad with zeros - thousands_sep: string to use as thousands separator, or '' - grouping: grouping for thousands separators, in format - used by localeconv - decimal_point: string to use for decimal point - precision: nonnegative integer giving precision, or None - type: one of the characters 'eEfFgG%', or None - - """ - m = _parse_format_specifier_regex.match(format_spec) - if m is None: - raise ValueError("Invalid format specifier: " + format_spec) - - # get the dictionary - format_dict = m.groupdict() - - # zeropad; defaults for fill and alignment. If zero padding - # is requested, the fill and align fields should be absent. - fill = format_dict['fill'] - align = format_dict['align'] - format_dict['zeropad'] = (format_dict['zeropad'] is not None) - if format_dict['zeropad']: - if fill is not None: - raise ValueError("Fill character conflicts with '0'" - " in format specifier: " + format_spec) - if align is not None: - raise ValueError("Alignment conflicts with '0' in " - "format specifier: " + format_spec) - format_dict['fill'] = fill or ' ' - # PEP 3101 originally specified that the default alignment should - # be left; it was later agreed that right-aligned makes more sense - # for numeric types. See http://bugs.python.org/issue6857. - format_dict['align'] = align or '>' - - # default sign handling: '-' for negative, '' for positive - if format_dict['sign'] is None: - format_dict['sign'] = '-' - - # minimumwidth defaults to 0; precision remains None if not given - format_dict['minimumwidth'] = int(format_dict['minimumwidth'] or '0') - if format_dict['precision'] is not None: - format_dict['precision'] = int(format_dict['precision']) - - # if format type is 'g' or 'G' then a precision of 0 makes little - # sense; convert it to 1. Same if format type is unspecified. - if format_dict['precision'] == 0: - if format_dict['type'] is None or format_dict['type'] in 'gGn': - format_dict['precision'] = 1 - - # determine thousands separator, grouping, and decimal separator, and - # add appropriate entries to format_dict - if format_dict['type'] == 'n': - # apart from separators, 'n' behaves just like 'g' - format_dict['type'] = 'g' - if _localeconv is None: - _localeconv = _locale.localeconv() - if format_dict['thousands_sep'] is not None: - raise ValueError("Explicit thousands separator conflicts with " - "'n' type in format specifier: " + format_spec) - format_dict['thousands_sep'] = _localeconv['thousands_sep'] - format_dict['grouping'] = _localeconv['grouping'] - format_dict['decimal_point'] = _localeconv['decimal_point'] - else: - if format_dict['thousands_sep'] is None: - format_dict['thousands_sep'] = '' - format_dict['grouping'] = [3, 0] - format_dict['decimal_point'] = '.' - - if format_dict['frac_separators'] is None: - format_dict['frac_separators'] = '' - - return format_dict - -def _format_align(sign, body, spec): - """Given an unpadded, non-aligned numeric string 'body' and sign - string 'sign', add padding and alignment conforming to the given - format specifier dictionary 'spec' (as produced by - parse_format_specifier). - - """ - # how much extra space do we have to play with? - minimumwidth = spec['minimumwidth'] - fill = spec['fill'] - padding = fill*(minimumwidth - len(sign) - len(body)) - - align = spec['align'] - if align == '<': - result = sign + body + padding - elif align == '>': - result = padding + sign + body - elif align == '=': - result = sign + padding + body - elif align == '^': - half = len(padding)//2 - result = padding[:half] + sign + body + padding[half:] - else: - raise ValueError('Unrecognised alignment field') - - return result - -def _group_lengths(grouping): - """Convert a localeconv-style grouping into a (possibly infinite) - iterable of integers representing group lengths. - - """ - # The result from localeconv()['grouping'], and the input to this - # function, should be a list of integers in one of the - # following three forms: - # - # (1) an empty list, or - # (2) nonempty list of positive integers + [0] - # (3) list of positive integers + [locale.CHAR_MAX], or - - from itertools import chain, repeat - if not grouping: - return [] - elif grouping[-1] == 0 and len(grouping) >= 2: - return chain(grouping[:-1], repeat(grouping[-2])) - elif grouping[-1] == _locale.CHAR_MAX: - return grouping[:-1] - else: - raise ValueError('unrecognised format for grouping') - -def _insert_thousands_sep(digits, spec, min_width=1): - """Insert thousands separators into a digit string. - - spec is a dictionary whose keys should include 'thousands_sep' and - 'grouping'; typically it's the result of parsing the format - specifier using _parse_format_specifier. - - The min_width keyword argument gives the minimum length of the - result, which will be padded on the left with zeros if necessary. - - If necessary, the zero padding adds an extra '0' on the left to - avoid a leading thousands separator. For example, inserting - commas every three digits in '123456', with min_width=8, gives - '0,123,456', even though that has length 9. - - """ - - sep = spec['thousands_sep'] - grouping = spec['grouping'] - - groups = [] - for l in _group_lengths(grouping): - if l <= 0: - raise ValueError("group length should be positive") - # max(..., 1) forces at least 1 digit to the left of a separator - l = min(max(len(digits), min_width, 1), l) - groups.append('0'*(l - len(digits)) + digits[-l:]) - digits = digits[:-l] - min_width -= l - if not digits and min_width <= 0: - break - min_width -= len(sep) - else: - l = max(len(digits), min_width, 1) - groups.append('0'*(l - len(digits)) + digits[-l:]) - return sep.join(reversed(groups)) - -def _format_sign(is_negative, spec): - """Determine sign character.""" - - if is_negative: - return '-' - elif spec['sign'] in ' +': - return spec['sign'] - else: - return '' - -def _format_number(is_negative, intpart, fracpart, exp, spec): - """Format a number, given the following data: - - is_negative: true if the number is negative, else false - intpart: string of digits that must appear before the decimal point - fracpart: string of digits that must come after the point - exp: exponent, as an integer - spec: dictionary resulting from parsing the format specifier - - This function uses the information in spec to: - insert separators (decimal separator and thousands separators) - format the sign - format the exponent - add trailing '%' for the '%' type - zero-pad if necessary - fill and align if necessary - """ - - sign = _format_sign(is_negative, spec) - - frac_sep = spec['frac_separators'] - if fracpart and frac_sep: - fracpart = frac_sep.join(fracpart[pos:pos + 3] - for pos in range(0, len(fracpart), 3)) - - if fracpart or spec['alt']: - fracpart = spec['decimal_point'] + fracpart - - if exp != 0 or spec['type'] in 'eE': - echar = {'E': 'E', 'e': 'e', 'G': 'E', 'g': 'e'}[spec['type']] - fracpart += "{0}{1:+}".format(echar, exp) - if spec['type'] == '%': - fracpart += '%' - - if spec['zeropad']: - min_width = spec['minimumwidth'] - len(fracpart) - len(sign) - else: - min_width = 0 - intpart = _insert_thousands_sep(intpart, spec, min_width) - - return _format_align(sign, intpart+fracpart, spec) - - -##### Useful Constants (internal use only) ################################ - -# Reusable defaults -_Infinity = Decimal('Inf') -_NegativeInfinity = Decimal('-Inf') -_NaN = Decimal('NaN') -_Zero = Decimal(0) -_One = Decimal(1) -_NegativeOne = Decimal(-1) - -# _SignedInfinity[sign] is infinity w/ that sign -_SignedInfinity = (_Infinity, _NegativeInfinity) - -# Constants related to the hash implementation; hash(x) is based -# on the reduction of x modulo _PyHASH_MODULUS -_PyHASH_MODULUS = sys.hash_info.modulus -# hash values to use for positive and negative infinities, and nans -_PyHASH_INF = sys.hash_info.inf -_PyHASH_NAN = sys.hash_info.nan - -# _PyHASH_10INV is the inverse of 10 modulo the prime _PyHASH_MODULUS -_PyHASH_10INV = pow(10, _PyHASH_MODULUS - 2, _PyHASH_MODULUS) -del sys diff --git a/Python314_4_x86_Template/Lib/_pyio.py b/Python314_4_x86_Template/Lib/_pyio.py deleted file mode 100644 index 116ce4f37..000000000 --- a/Python314_4_x86_Template/Lib/_pyio.py +++ /dev/null @@ -1,2754 +0,0 @@ -""" -Python implementation of the io module. -""" - -import os -import abc -import codecs -import errno -import stat -import sys -# Import _thread instead of threading to reduce startup cost -from _thread import allocate_lock as Lock -if sys.platform in {'win32', 'cygwin'}: - from msvcrt import setmode as _setmode -else: - _setmode = None - -import io -from io import (__all__, SEEK_SET, SEEK_CUR, SEEK_END, Reader, Writer) # noqa: F401 - -valid_seek_flags = {0, 1, 2} # Hardwired values -if hasattr(os, 'SEEK_HOLE') : - valid_seek_flags.add(os.SEEK_HOLE) - valid_seek_flags.add(os.SEEK_DATA) - -# open() uses max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) -# when the device block size is available. -DEFAULT_BUFFER_SIZE = 128 * 1024 # bytes - -# NOTE: Base classes defined here are registered with the "official" ABCs -# defined in io.py. We don't use real inheritance though, because we don't want -# to inherit the C implementations. - -# Rebind for compatibility -BlockingIOError = BlockingIOError - -# Does open() check its 'errors' argument? -_CHECK_ERRORS = (hasattr(sys, "gettotalrefcount") or sys.flags.dev_mode) - - -def text_encoding(encoding, stacklevel=2): - """ - A helper function to choose the text encoding. - - When encoding is not None, this function returns it. - Otherwise, this function returns the default text encoding - (i.e. "locale" or "utf-8" depends on UTF-8 mode). - - This function emits an EncodingWarning if *encoding* is None and - sys.flags.warn_default_encoding is true. - - This can be used in APIs with an encoding=None parameter - that pass it to TextIOWrapper or open. - However, please consider using encoding="utf-8" for new APIs. - """ - if encoding is None: - if sys.flags.utf8_mode: - encoding = "utf-8" - else: - encoding = "locale" - if sys.flags.warn_default_encoding: - import warnings - warnings.warn("'encoding' argument not specified.", - EncodingWarning, stacklevel + 1) - return encoding - - -# Wrapper for builtins.open -# -# Trick so that open() won't become a bound method when stored -# as a class variable (as dbm.dumb does). -# -# See init_set_builtins_open() in Python/pylifecycle.c. -@staticmethod -def open(file, mode="r", buffering=-1, encoding=None, errors=None, - newline=None, closefd=True, opener=None): - - r"""Open file and return a stream. Raise OSError upon failure. - - file is either a text or byte string giving the name (and the path - if the file isn't in the current working directory) of the file to - be opened or an integer file descriptor of the file to be - wrapped. (If a file descriptor is given, it is closed when the - returned I/O object is closed, unless closefd is set to False.) - - mode is an optional string that specifies the mode in which the file is - opened. It defaults to 'r' which means open for reading in text mode. Other - common values are 'w' for writing (truncating the file if it already - exists), 'x' for exclusive creation of a new file, and 'a' for appending - (which on some Unix systems, means that all writes append to the end of the - file regardless of the current seek position). In text mode, if encoding is - not specified the encoding used is platform dependent. (For reading and - writing raw bytes use binary mode and leave encoding unspecified.) The - available modes are: - - ========= =============================================================== - Character Meaning - --------- --------------------------------------------------------------- - 'r' open for reading (default) - 'w' open for writing, truncating the file first - 'x' create a new file and open it for writing - 'a' open for writing, appending to the end of the file if it exists - 'b' binary mode - 't' text mode (default) - '+' open a disk file for updating (reading and writing) - ========= =============================================================== - - The default mode is 'rt' (open for reading text). For binary random - access, the mode 'w+b' opens and truncates the file to 0 bytes, while - 'r+b' opens the file without truncation. The 'x' mode implies 'w' and - raises an `FileExistsError` if the file already exists. - - Python distinguishes between files opened in binary and text modes, - even when the underlying operating system doesn't. Files opened in - binary mode (appending 'b' to the mode argument) return contents as - bytes objects without any decoding. In text mode (the default, or when - 't' is appended to the mode argument), the contents of the file are - returned as strings, the bytes having been first decoded using a - platform-dependent encoding or using the specified encoding if given. - - buffering is an optional integer used to set the buffering policy. - Pass 0 to switch buffering off (only allowed in binary mode), 1 to select - line buffering (only usable in text mode), and an integer > 1 to indicate - the size of a fixed-size chunk buffer. When no buffering argument is - given, the default buffering policy works as follows: - - * Binary files are buffered in fixed-size chunks; the size of the buffer - is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) - when the device block size is available. - On most systems, the buffer will typically be 128 kilobytes long. - - * "Interactive" text files (files for which isatty() returns True) - use line buffering. Other text files use the policy described above - for binary files. - - encoding is the str name of the encoding used to decode or encode the - file. This should only be used in text mode. The default encoding is - platform dependent, but any encoding supported by Python can be - passed. See the codecs module for the list of supported encodings. - - errors is an optional string that specifies how encoding errors are to - be handled---this argument should not be used in binary mode. Pass - 'strict' to raise a ValueError exception if there is an encoding error - (the default of None has the same effect), or pass 'ignore' to ignore - errors. (Note that ignoring encoding errors can lead to data loss.) - See the documentation for codecs.register for a list of the permitted - encoding error strings. - - newline is a string controlling how universal newlines works (it only - applies to text mode). It can be None, '', '\n', '\r', and '\r\n'. It works - as follows: - - * On input, if newline is None, universal newlines mode is - enabled. Lines in the input can end in '\n', '\r', or '\r\n', and - these are translated into '\n' before being returned to the - caller. If it is '', universal newline mode is enabled, but line - endings are returned to the caller untranslated. If it has any of - the other legal values, input lines are only terminated by the given - string, and the line ending is returned to the caller untranslated. - - * On output, if newline is None, any '\n' characters written are - translated to the system default line separator, os.linesep. If - newline is '', no translation takes place. If newline is any of the - other legal values, any '\n' characters written are translated to - the given string. - - closedfd is a bool. If closefd is False, the underlying file descriptor will - be kept open when the file is closed. This does not work when a file name is - given and must be True in that case. - - The newly created file is non-inheritable. - - A custom opener can be used by passing a callable as *opener*. The - underlying file descriptor for the file object is then obtained by calling - *opener* with (*file*, *flags*). *opener* must return an open file - descriptor (passing os.open as *opener* results in functionality similar to - passing None). - - open() returns a file object whose type depends on the mode, and - through which the standard file operations such as reading and writing - are performed. When open() is used to open a file in a text mode ('w', - 'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open - a file in a binary mode, the returned class varies: in read binary - mode, it returns a BufferedReader; in write binary and append binary - modes, it returns a BufferedWriter, and in read/write mode, it returns - a BufferedRandom. - - It is also possible to use a string or bytearray as a file for both - reading and writing. For strings StringIO can be used like a file - opened in a text mode, and for bytes a BytesIO can be used like a file - opened in a binary mode. - """ - if not isinstance(file, int): - file = os.fspath(file) - if not isinstance(file, (str, bytes, int)): - raise TypeError("invalid file: %r" % file) - if not isinstance(mode, str): - raise TypeError("invalid mode: %r" % mode) - if not isinstance(buffering, int): - raise TypeError("invalid buffering: %r" % buffering) - if encoding is not None and not isinstance(encoding, str): - raise TypeError("invalid encoding: %r" % encoding) - if errors is not None and not isinstance(errors, str): - raise TypeError("invalid errors: %r" % errors) - modes = set(mode) - if modes - set("axrwb+t") or len(mode) > len(modes): - raise ValueError("invalid mode: %r" % mode) - creating = "x" in modes - reading = "r" in modes - writing = "w" in modes - appending = "a" in modes - updating = "+" in modes - text = "t" in modes - binary = "b" in modes - if text and binary: - raise ValueError("can't have text and binary mode at once") - if creating + reading + writing + appending > 1: - raise ValueError("can't have read/write/append mode at once") - if not (creating or reading or writing or appending): - raise ValueError("must have exactly one of read/write/append mode") - if binary and encoding is not None: - raise ValueError("binary mode doesn't take an encoding argument") - if binary and errors is not None: - raise ValueError("binary mode doesn't take an errors argument") - if binary and newline is not None: - raise ValueError("binary mode doesn't take a newline argument") - if binary and buffering == 1: - import warnings - warnings.warn("line buffering (buffering=1) isn't supported in binary " - "mode, the default buffer size will be used", - RuntimeWarning, 2) - raw = FileIO(file, - (creating and "x" or "") + - (reading and "r" or "") + - (writing and "w" or "") + - (appending and "a" or "") + - (updating and "+" or ""), - closefd, opener=opener) - result = raw - try: - line_buffering = False - if buffering == 1 or buffering < 0 and raw._isatty_open_only(): - buffering = -1 - line_buffering = True - if buffering < 0: - buffering = max(min(raw._blksize, 8192 * 1024), DEFAULT_BUFFER_SIZE) - if buffering < 0: - raise ValueError("invalid buffering size") - if buffering == 0: - if binary: - return result - raise ValueError("can't have unbuffered text I/O") - if updating: - buffer = BufferedRandom(raw, buffering) - elif creating or writing or appending: - buffer = BufferedWriter(raw, buffering) - elif reading: - buffer = BufferedReader(raw, buffering) - else: - raise ValueError("unknown mode: %r" % mode) - result = buffer - if binary: - return result - encoding = text_encoding(encoding) - text = TextIOWrapper(buffer, encoding, errors, newline, line_buffering) - result = text - text.mode = mode - return result - except: - result.close() - raise - -# Define a default pure-Python implementation for open_code() -# that does not allow hooks. Warn on first use. Defined for tests. -def _open_code_with_warning(path): - """Opens the provided file with mode ``'rb'``. This function - should be used when the intent is to treat the contents as - executable code. - - ``path`` should be an absolute path. - - When supported by the runtime, this function can be hooked - in order to allow embedders more control over code files. - This functionality is not supported on the current runtime. - """ - import warnings - warnings.warn("_pyio.open_code() may not be using hooks", - RuntimeWarning, 2) - return open(path, "rb") - -try: - open_code = io.open_code -except AttributeError: - open_code = _open_code_with_warning - - -# In normal operation, both `UnsupportedOperation`s should be bound to the -# same object. -try: - UnsupportedOperation = io.UnsupportedOperation -except AttributeError: - class UnsupportedOperation(OSError, ValueError): - pass - - -class IOBase(metaclass=abc.ABCMeta): - - """The abstract base class for all I/O classes. - - This class provides dummy implementations for many methods that - derived classes can override selectively; the default implementations - represent a file that cannot be read, written or seeked. - - Even though IOBase does not declare read or write because - their signatures will vary, implementations and clients should - consider those methods part of the interface. Also, implementations - may raise UnsupportedOperation when operations they do not support are - called. - - The basic type used for binary data read from or written to a file is - bytes. Other bytes-like objects are accepted as method arguments too. - Text I/O classes work with str data. - - Note that calling any method (even inquiries) on a closed stream is - undefined. Implementations may raise OSError in this case. - - IOBase (and its subclasses) support the iterator protocol, meaning - that an IOBase object can be iterated over yielding the lines in a - stream. - - IOBase also supports the :keyword:`with` statement. In this example, - fp is closed after the suite of the with statement is complete: - - with open('spam.txt', 'r') as fp: - fp.write('Spam and eggs!') - """ - - ### Internal ### - - def _unsupported(self, name): - """Internal: raise an OSError exception for unsupported operations.""" - raise UnsupportedOperation("%s.%s() not supported" % - (self.__class__.__name__, name)) - - ### Positioning ### - - def seek(self, pos, whence=0): - """Change stream position. - - Change the stream position to byte offset pos. Argument pos is - interpreted relative to the position indicated by whence. Values - for whence are ints: - - * 0 -- start of stream (the default); offset should be zero or positive - * 1 -- current stream position; offset may be negative - * 2 -- end of stream; offset is usually negative - Some operating systems / file systems could provide additional values. - - Return an int indicating the new absolute position. - """ - self._unsupported("seek") - - def tell(self): - """Return an int indicating the current stream position.""" - return self.seek(0, 1) - - def truncate(self, pos=None): - """Truncate file to size bytes. - - Size defaults to the current IO position as reported by tell(). Return - the new size. - """ - self._unsupported("truncate") - - ### Flush and close ### - - def flush(self): - """Flush write buffers, if applicable. - - This is not implemented for read-only and non-blocking streams. - """ - self._checkClosed() - # XXX Should this return the number of bytes written??? - - __closed = False - - def close(self): - """Flush and close the IO object. - - This method has no effect if the file is already closed. - """ - if not self.__closed: - try: - self.flush() - finally: - self.__closed = True - - def __del__(self): - """Destructor. Calls close().""" - try: - closed = self.closed - except AttributeError: - # If getting closed fails, then the object is probably - # in an unusable state, so ignore. - return - - if closed: - return - - if dealloc_warn := getattr(self, "_dealloc_warn", None): - dealloc_warn(self) - - # If close() fails, the caller logs the exception with - # sys.unraisablehook. close() must be called at the end at __del__(). - self.close() - - ### Inquiries ### - - def seekable(self): - """Return a bool indicating whether object supports random access. - - If False, seek(), tell() and truncate() will raise OSError. - This method may need to do a test seek(). - """ - return False - - def _checkSeekable(self, msg=None): - """Internal: raise UnsupportedOperation if file is not seekable - """ - if not self.seekable(): - raise UnsupportedOperation("File or stream is not seekable." - if msg is None else msg) - - def readable(self): - """Return a bool indicating whether object was opened for reading. - - If False, read() will raise OSError. - """ - return False - - def _checkReadable(self, msg=None): - """Internal: raise UnsupportedOperation if file is not readable - """ - if not self.readable(): - raise UnsupportedOperation("File or stream is not readable." - if msg is None else msg) - - def writable(self): - """Return a bool indicating whether object was opened for writing. - - If False, write() and truncate() will raise OSError. - """ - return False - - def _checkWritable(self, msg=None): - """Internal: raise UnsupportedOperation if file is not writable - """ - if not self.writable(): - raise UnsupportedOperation("File or stream is not writable." - if msg is None else msg) - - @property - def closed(self): - """closed: bool. True iff the file has been closed. - - For backwards compatibility, this is a property, not a predicate. - """ - return self.__closed - - def _checkClosed(self, msg=None): - """Internal: raise a ValueError if file is closed - """ - if self.closed: - raise ValueError("I/O operation on closed file." - if msg is None else msg) - - ### Context manager ### - - def __enter__(self): # That's a forward reference - """Context management protocol. Returns self (an instance of IOBase).""" - self._checkClosed() - return self - - def __exit__(self, *args): - """Context management protocol. Calls close()""" - self.close() - - ### Lower-level APIs ### - - # XXX Should these be present even if unimplemented? - - def fileno(self): - """Returns underlying file descriptor (an int) if one exists. - - An OSError is raised if the IO object does not use a file descriptor. - """ - self._unsupported("fileno") - - def isatty(self): - """Return a bool indicating whether this is an 'interactive' stream. - - Return False if it can't be determined. - """ - self._checkClosed() - return False - - ### Readline[s] and writelines ### - - def readline(self, size=-1): - r"""Read and return a line of bytes from the stream. - - If size is specified, at most size bytes will be read. - Size should be an int. - - The line terminator is always b'\n' for binary files; for text - files, the newlines argument to open can be used to select the line - terminator(s) recognized. - """ - # For backwards compatibility, a (slowish) readline(). - if hasattr(self, "peek"): - def nreadahead(): - readahead = self.peek(1) - if not readahead: - return 1 - n = (readahead.find(b"\n") + 1) or len(readahead) - if size >= 0: - n = min(n, size) - return n - else: - def nreadahead(): - return 1 - if size is None: - size = -1 - else: - try: - size_index = size.__index__ - except AttributeError: - raise TypeError(f"{size!r} is not an integer") - else: - size = size_index() - res = bytearray() - while size < 0 or len(res) < size: - b = self.read(nreadahead()) - if not b: - break - res += b - if res.endswith(b"\n"): - break - return bytes(res) - - def __iter__(self): - self._checkClosed() - return self - - def __next__(self): - line = self.readline() - if not line: - raise StopIteration - return line - - def readlines(self, hint=None): - """Return a list of lines from the stream. - - hint can be specified to control the number of lines read: no more - lines will be read if the total size (in bytes/characters) of all - lines so far exceeds hint. - """ - if hint is None or hint <= 0: - return list(self) - n = 0 - lines = [] - for line in self: - lines.append(line) - n += len(line) - if n >= hint: - break - return lines - - def writelines(self, lines): - """Write a list of lines to the stream. - - Line separators are not added, so it is usual for each of the lines - provided to have a line separator at the end. - """ - self._checkClosed() - for line in lines: - self.write(line) - -io.IOBase.register(IOBase) - - -class RawIOBase(IOBase): - - """Base class for raw binary I/O.""" - - # The read() method is implemented by calling readinto(); derived - # classes that want to support read() only need to implement - # readinto() as a primitive operation. In general, readinto() can be - # more efficient than read(). - - # (It would be tempting to also provide an implementation of - # readinto() in terms of read(), in case the latter is a more suitable - # primitive operation, but that would lead to nasty recursion in case - # a subclass doesn't implement either.) - - def read(self, size=-1): - """Read and return up to size bytes, where size is an int. - - Returns an empty bytes object on EOF, or None if the object is - set not to block and has no data to read. - """ - if size is None: - size = -1 - if size < 0: - return self.readall() - b = bytearray(size.__index__()) - n = self.readinto(b) - if n is None: - return None - if n < 0 or n > len(b): - raise ValueError(f"readinto returned {n} outside buffer size {len(b)}") - del b[n:] - return bytes(b) - - def readall(self): - """Read until EOF, using multiple read() call.""" - res = bytearray() - while data := self.read(DEFAULT_BUFFER_SIZE): - res += data - if res: - return bytes(res) - else: - # b'' or None - return data - - def readinto(self, b): - """Read bytes into a pre-allocated bytes-like object b. - - Returns an int representing the number of bytes read (0 for EOF), or - None if the object is set not to block and has no data to read. - """ - self._unsupported("readinto") - - def write(self, b): - """Write the given buffer to the IO stream. - - Returns the number of bytes written, which may be less than the - length of b in bytes. - """ - self._unsupported("write") - -io.RawIOBase.register(RawIOBase) - - -class BufferedIOBase(IOBase): - - """Base class for buffered IO objects. - - The main difference with RawIOBase is that the read() method - supports omitting the size argument, and does not have a default - implementation that defers to readinto(). - - In addition, read(), readinto() and write() may raise - BlockingIOError if the underlying raw stream is in non-blocking - mode and not ready; unlike their raw counterparts, they will never - return None. - - A typical implementation should not inherit from a RawIOBase - implementation, but wrap one. - """ - - def read(self, size=-1): - """Read and return up to size bytes, where size is an int. - - If the argument is omitted, None, or negative, reads and - returns all data until EOF. - - If the argument is positive, and the underlying raw stream is - not 'interactive', multiple raw reads may be issued to satisfy - the byte count (unless EOF is reached first). But for - interactive raw streams (XXX and for pipes?), at most one raw - read will be issued, and a short result does not imply that - EOF is imminent. - - Returns an empty bytes array on EOF. - - Raises BlockingIOError if the underlying raw stream has no - data at the moment. - """ - self._unsupported("read") - - def read1(self, size=-1): - """Read up to size bytes with at most one read() system call, - where size is an int. - """ - self._unsupported("read1") - - def readinto(self, b): - """Read bytes into a pre-allocated bytes-like object b. - - Like read(), this may issue multiple reads to the underlying raw - stream, unless the latter is 'interactive'. - - Returns an int representing the number of bytes read (0 for EOF). - - Raises BlockingIOError if the underlying raw stream has no - data at the moment. - """ - - return self._readinto(b, read1=False) - - def readinto1(self, b): - """Read bytes into buffer *b*, using at most one system call - - Returns an int representing the number of bytes read (0 for EOF). - - Raises BlockingIOError if the underlying raw stream has no - data at the moment. - """ - - return self._readinto(b, read1=True) - - def _readinto(self, b, read1): - if not isinstance(b, memoryview): - b = memoryview(b) - b = b.cast('B') - - if read1: - data = self.read1(len(b)) - else: - data = self.read(len(b)) - n = len(data) - - b[:n] = data - - return n - - def write(self, b): - """Write the given bytes buffer to the IO stream. - - Return the number of bytes written, which is always the length of b - in bytes. - - Raises BlockingIOError if the buffer is full and the - underlying raw stream cannot accept more data at the moment. - """ - self._unsupported("write") - - def detach(self): - """ - Separate the underlying raw stream from the buffer and return it. - - After the raw stream has been detached, the buffer is in an unusable - state. - """ - self._unsupported("detach") - -io.BufferedIOBase.register(BufferedIOBase) - - -class _BufferedIOMixin(BufferedIOBase): - - """A mixin implementation of BufferedIOBase with an underlying raw stream. - - This passes most requests on to the underlying raw stream. It - does *not* provide implementations of read(), readinto() or - write(). - """ - - def __init__(self, raw): - self._raw = raw - - ### Positioning ### - - def seek(self, pos, whence=0): - new_position = self.raw.seek(pos, whence) - if new_position < 0: - raise OSError("seek() returned an invalid position") - return new_position - - def tell(self): - pos = self.raw.tell() - if pos < 0: - raise OSError("tell() returned an invalid position") - return pos - - def truncate(self, pos=None): - self._checkClosed() - self._checkWritable() - - # Flush the stream. We're mixing buffered I/O with lower-level I/O, - # and a flush may be necessary to synch both views of the current - # file state. - self.flush() - - if pos is None: - pos = self.tell() - # XXX: Should seek() be used, instead of passing the position - # XXX directly to truncate? - return self.raw.truncate(pos) - - ### Flush and close ### - - def flush(self): - if self.closed: - raise ValueError("flush on closed file") - self.raw.flush() - - def close(self): - if self.raw is not None and not self.closed: - try: - # may raise BlockingIOError or BrokenPipeError etc - self.flush() - finally: - self.raw.close() - - def detach(self): - if self.raw is None: - raise ValueError("raw stream already detached") - self.flush() - raw = self._raw - self._raw = None - return raw - - ### Inquiries ### - - def seekable(self): - return self.raw.seekable() - - @property - def raw(self): - return self._raw - - @property - def closed(self): - return self.raw.closed - - @property - def name(self): - return self.raw.name - - @property - def mode(self): - return self.raw.mode - - def __getstate__(self): - raise TypeError(f"cannot pickle {self.__class__.__name__!r} object") - - def __repr__(self): - modname = self.__class__.__module__ - clsname = self.__class__.__qualname__ - try: - name = self.name - except AttributeError: - return "<{}.{}>".format(modname, clsname) - else: - return "<{}.{} name={!r}>".format(modname, clsname, name) - - def _dealloc_warn(self, source): - if dealloc_warn := getattr(self.raw, "_dealloc_warn", None): - dealloc_warn(source) - - ### Lower-level APIs ### - - def fileno(self): - return self.raw.fileno() - - def isatty(self): - return self.raw.isatty() - - -class BytesIO(BufferedIOBase): - - """Buffered I/O implementation using an in-memory bytes buffer.""" - - # Initialize _buffer as soon as possible since it's used by __del__() - # which calls close() - _buffer = None - - def __init__(self, initial_bytes=None): - buf = bytearray() - if initial_bytes is not None: - buf += initial_bytes - self._buffer = buf - self._pos = 0 - - def __getstate__(self): - if self.closed: - raise ValueError("__getstate__ on closed file") - return self.__dict__.copy() - - def getvalue(self): - """Return the bytes value (contents) of the buffer - """ - if self.closed: - raise ValueError("getvalue on closed file") - return bytes(self._buffer) - - def getbuffer(self): - """Return a readable and writable view of the buffer. - """ - if self.closed: - raise ValueError("getbuffer on closed file") - return memoryview(self._buffer) - - def close(self): - if self._buffer is not None: - self._buffer.clear() - super().close() - - def read(self, size=-1): - if self.closed: - raise ValueError("read from closed file") - if size is None: - size = -1 - else: - try: - size_index = size.__index__ - except AttributeError: - raise TypeError(f"{size!r} is not an integer") - else: - size = size_index() - if size < 0: - size = len(self._buffer) - if len(self._buffer) <= self._pos: - return b"" - newpos = min(len(self._buffer), self._pos + size) - b = self._buffer[self._pos : newpos] - self._pos = newpos - return bytes(b) - - def read1(self, size=-1): - """This is the same as read. - """ - return self.read(size) - - def write(self, b): - if isinstance(b, str): - raise TypeError("can't write str to binary stream") - with memoryview(b) as view: - if self.closed: - raise ValueError("write to closed file") - - n = view.nbytes # Size of any bytes-like object - if n == 0: - return 0 - - pos = self._pos - if pos > len(self._buffer): - # Pad buffer to pos with null bytes. - self._buffer.resize(pos) - self._buffer[pos:pos + n] = view - self._pos += n - return n - - def seek(self, pos, whence=0): - if self.closed: - raise ValueError("seek on closed file") - try: - pos_index = pos.__index__ - except AttributeError: - raise TypeError(f"{pos!r} is not an integer") - else: - pos = pos_index() - if whence == 0: - if pos < 0: - raise ValueError("negative seek position %r" % (pos,)) - self._pos = pos - elif whence == 1: - self._pos = max(0, self._pos + pos) - elif whence == 2: - self._pos = max(0, len(self._buffer) + pos) - else: - raise ValueError("unsupported whence value") - return self._pos - - def tell(self): - if self.closed: - raise ValueError("tell on closed file") - return self._pos - - def truncate(self, pos=None): - if self.closed: - raise ValueError("truncate on closed file") - if pos is None: - pos = self._pos - else: - try: - pos_index = pos.__index__ - except AttributeError: - raise TypeError(f"{pos!r} is not an integer") - else: - pos = pos_index() - if pos < 0: - raise ValueError("negative truncate position %r" % (pos,)) - del self._buffer[pos:] - return pos - - def readable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return True - - def writable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return True - - def seekable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return True - - -class BufferedReader(_BufferedIOMixin): - - """BufferedReader(raw[, buffer_size]) - - A buffer for a readable, sequential BaseRawIO object. - - The constructor creates a BufferedReader for the given readable raw - stream and buffer_size. If buffer_size is omitted, DEFAULT_BUFFER_SIZE - is used. - """ - - def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE): - """Create a new buffered reader using the given readable raw IO object. - """ - if not raw.readable(): - raise OSError('"raw" argument must be readable.') - - _BufferedIOMixin.__init__(self, raw) - if buffer_size <= 0: - raise ValueError("invalid buffer size") - self.buffer_size = buffer_size - self._reset_read_buf() - self._read_lock = Lock() - - def readable(self): - return self.raw.readable() - - def _reset_read_buf(self): - self._read_buf = b"" - self._read_pos = 0 - - def read(self, size=None): - """Read size bytes. - - Returns exactly size bytes of data unless the underlying raw IO - stream reaches EOF or if the call would block in non-blocking - mode. If size is negative, read until EOF or until read() would - block. - """ - if size is not None and size < -1: - raise ValueError("invalid number of bytes to read") - with self._read_lock: - return self._read_unlocked(size) - - def _read_unlocked(self, n=None): - nodata_val = b"" - empty_values = (b"", None) - buf = self._read_buf - pos = self._read_pos - - # Special case for when the number of bytes to read is unspecified. - if n is None or n == -1: - self._reset_read_buf() - if hasattr(self.raw, 'readall'): - chunk = self.raw.readall() - if chunk is None: - return buf[pos:] or None - else: - return buf[pos:] + chunk - chunks = [buf[pos:]] # Strip the consumed bytes. - current_size = 0 - while True: - # Read until EOF or until read() would block. - chunk = self.raw.read() - if chunk in empty_values: - nodata_val = chunk - break - current_size += len(chunk) - chunks.append(chunk) - return b"".join(chunks) or nodata_val - - # The number of bytes to read is specified, return at most n bytes. - avail = len(buf) - pos # Length of the available buffered data. - if n <= avail: - # Fast path: the data to read is fully buffered. - self._read_pos += n - return buf[pos:pos+n] - # Slow path: read from the stream until enough bytes are read, - # or until an EOF occurs or until read() would block. - chunks = [buf[pos:]] - wanted = max(self.buffer_size, n) - while avail < n: - chunk = self.raw.read(wanted) - if chunk in empty_values: - nodata_val = chunk - break - avail += len(chunk) - chunks.append(chunk) - # n is more than avail only when an EOF occurred or when - # read() would have blocked. - n = min(n, avail) - out = b"".join(chunks) - self._read_buf = out[n:] # Save the extra data in the buffer. - self._read_pos = 0 - return out[:n] if out else nodata_val - - def peek(self, size=0): - """Returns buffered bytes without advancing the position. - - The argument indicates a desired minimal number of bytes; we - do at most one raw read to satisfy it. We never return more - than self.buffer_size. - """ - self._checkClosed("peek of closed file") - with self._read_lock: - return self._peek_unlocked(size) - - def _peek_unlocked(self, n=0): - want = min(n, self.buffer_size) - have = len(self._read_buf) - self._read_pos - if have < want or have <= 0: - to_read = self.buffer_size - have - current = self.raw.read(to_read) - if current: - self._read_buf = self._read_buf[self._read_pos:] + current - self._read_pos = 0 - return self._read_buf[self._read_pos:] - - def read1(self, size=-1): - """Reads up to size bytes, with at most one read() system call.""" - # Returns up to size bytes. If at least one byte is buffered, we - # only return buffered bytes. Otherwise, we do one raw read. - self._checkClosed("read of closed file") - if size < 0: - size = self.buffer_size - if size == 0: - return b"" - with self._read_lock: - self._peek_unlocked(1) - return self._read_unlocked( - min(size, len(self._read_buf) - self._read_pos)) - - # Implementing readinto() and readinto1() is not strictly necessary (we - # could rely on the base class that provides an implementation in terms of - # read() and read1()). We do it anyway to keep the _pyio implementation - # similar to the io implementation (which implements the methods for - # performance reasons). - def _readinto(self, buf, read1): - """Read data into *buf* with at most one system call.""" - - self._checkClosed("readinto of closed file") - - # Need to create a memoryview object of type 'b', otherwise - # we may not be able to assign bytes to it, and slicing it - # would create a new object. - if not isinstance(buf, memoryview): - buf = memoryview(buf) - if buf.nbytes == 0: - return 0 - buf = buf.cast('B') - - written = 0 - with self._read_lock: - while written < len(buf): - - # First try to read from internal buffer - avail = min(len(self._read_buf) - self._read_pos, len(buf)) - if avail: - buf[written:written+avail] = \ - self._read_buf[self._read_pos:self._read_pos+avail] - self._read_pos += avail - written += avail - if written == len(buf): - break - - # If remaining space in callers buffer is larger than - # internal buffer, read directly into callers buffer - if len(buf) - written > self.buffer_size: - n = self.raw.readinto(buf[written:]) - if not n: - break # eof - written += n - - # Otherwise refill internal buffer - unless we're - # in read1 mode and already got some data - elif not (read1 and written): - if not self._peek_unlocked(1): - break # eof - - # In readinto1 mode, return as soon as we have some data - if read1 and written: - break - - return written - - def tell(self): - # GH-95782: Keep return value non-negative - return max(_BufferedIOMixin.tell(self) - len(self._read_buf) + self._read_pos, 0) - - def seek(self, pos, whence=0): - if whence not in valid_seek_flags: - raise ValueError("invalid whence value") - self._checkClosed("seek of closed file") - with self._read_lock: - if whence == 1: - pos -= len(self._read_buf) - self._read_pos - pos = _BufferedIOMixin.seek(self, pos, whence) - self._reset_read_buf() - return pos - -class BufferedWriter(_BufferedIOMixin): - - """A buffer for a writeable sequential RawIO object. - - The constructor creates a BufferedWriter for the given writeable raw - stream. If the buffer_size is not given, it defaults to - DEFAULT_BUFFER_SIZE. - """ - - def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE): - if not raw.writable(): - raise OSError('"raw" argument must be writable.') - - _BufferedIOMixin.__init__(self, raw) - if buffer_size <= 0: - raise ValueError("invalid buffer size") - self.buffer_size = buffer_size - self._write_buf = bytearray() - self._write_lock = Lock() - - def writable(self): - return self.raw.writable() - - def write(self, b): - if isinstance(b, str): - raise TypeError("can't write str to binary stream") - with self._write_lock: - if self.closed: - raise ValueError("write to closed file") - # XXX we can implement some more tricks to try and avoid - # partial writes - if len(self._write_buf) > self.buffer_size: - # We're full, so let's pre-flush the buffer. (This may - # raise BlockingIOError with characters_written == 0.) - self._flush_unlocked() - before = len(self._write_buf) - self._write_buf.extend(b) - written = len(self._write_buf) - before - if len(self._write_buf) > self.buffer_size: - try: - self._flush_unlocked() - except BlockingIOError as e: - if len(self._write_buf) > self.buffer_size: - # We've hit the buffer_size. We have to accept a partial - # write and cut back our buffer. - overage = len(self._write_buf) - self.buffer_size - written -= overage - self._write_buf = self._write_buf[:self.buffer_size] - raise BlockingIOError(e.errno, e.strerror, written) - return written - - def truncate(self, pos=None): - with self._write_lock: - self._flush_unlocked() - if pos is None: - pos = self.raw.tell() - return self.raw.truncate(pos) - - def flush(self): - with self._write_lock: - self._flush_unlocked() - - def _flush_unlocked(self): - if self.closed: - raise ValueError("flush on closed file") - while self._write_buf: - try: - n = self.raw.write(self._write_buf) - except BlockingIOError: - raise RuntimeError("self.raw should implement RawIOBase: it " - "should not raise BlockingIOError") - if n is None: - raise BlockingIOError( - errno.EAGAIN, - "write could not complete without blocking", 0) - if n > len(self._write_buf) or n < 0: - raise OSError("write() returned incorrect number of bytes") - del self._write_buf[:n] - - def tell(self): - return _BufferedIOMixin.tell(self) + len(self._write_buf) - - def seek(self, pos, whence=0): - if whence not in valid_seek_flags: - raise ValueError("invalid whence value") - with self._write_lock: - self._flush_unlocked() - return _BufferedIOMixin.seek(self, pos, whence) - - def close(self): - with self._write_lock: - if self.raw is None or self.closed: - return - # We have to release the lock and call self.flush() (which will - # probably just re-take the lock) in case flush has been overridden in - # a subclass or the user set self.flush to something. This is the same - # behavior as the C implementation. - try: - # may raise BlockingIOError or BrokenPipeError etc - self.flush() - finally: - with self._write_lock: - self.raw.close() - - -class BufferedRWPair(BufferedIOBase): - - """A buffered reader and writer object together. - - A buffered reader object and buffered writer object put together to - form a sequential IO object that can read and write. This is typically - used with a socket or two-way pipe. - - reader and writer are RawIOBase objects that are readable and - writeable respectively. If the buffer_size is omitted it defaults to - DEFAULT_BUFFER_SIZE. - """ - - # XXX The usefulness of this (compared to having two separate IO - # objects) is questionable. - - def __init__(self, reader, writer, buffer_size=DEFAULT_BUFFER_SIZE): - """Constructor. - - The arguments are two RawIO instances. - """ - if not reader.readable(): - raise OSError('"reader" argument must be readable.') - - if not writer.writable(): - raise OSError('"writer" argument must be writable.') - - self.reader = BufferedReader(reader, buffer_size) - self.writer = BufferedWriter(writer, buffer_size) - - def read(self, size=-1): - if size is None: - size = -1 - return self.reader.read(size) - - def readinto(self, b): - return self.reader.readinto(b) - - def write(self, b): - return self.writer.write(b) - - def peek(self, size=0): - return self.reader.peek(size) - - def read1(self, size=-1): - return self.reader.read1(size) - - def readinto1(self, b): - return self.reader.readinto1(b) - - def readable(self): - return self.reader.readable() - - def writable(self): - return self.writer.writable() - - def flush(self): - return self.writer.flush() - - def close(self): - try: - self.writer.close() - finally: - self.reader.close() - - def isatty(self): - return self.reader.isatty() or self.writer.isatty() - - @property - def closed(self): - return self.writer.closed - - -class BufferedRandom(BufferedWriter, BufferedReader): - - """A buffered interface to random access streams. - - The constructor creates a reader and writer for a seekable stream, - raw, given in the first argument. If the buffer_size is omitted it - defaults to DEFAULT_BUFFER_SIZE. - """ - - def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE): - raw._checkSeekable() - BufferedReader.__init__(self, raw, buffer_size) - BufferedWriter.__init__(self, raw, buffer_size) - - def seek(self, pos, whence=0): - if whence not in valid_seek_flags: - raise ValueError("invalid whence value") - self.flush() - if self._read_buf: - # Undo read ahead. - with self._read_lock: - self.raw.seek(self._read_pos - len(self._read_buf), 1) - # First do the raw seek, then empty the read buffer, so that - # if the raw seek fails, we don't lose buffered data forever. - pos = self.raw.seek(pos, whence) - with self._read_lock: - self._reset_read_buf() - if pos < 0: - raise OSError("seek() returned invalid position") - return pos - - def tell(self): - if self._write_buf: - return BufferedWriter.tell(self) - else: - return BufferedReader.tell(self) - - def truncate(self, pos=None): - if pos is None: - pos = self.tell() - # Use seek to flush the read buffer. - return BufferedWriter.truncate(self, pos) - - def read(self, size=None): - if size is None: - size = -1 - self.flush() - return BufferedReader.read(self, size) - - def readinto(self, b): - self.flush() - return BufferedReader.readinto(self, b) - - def peek(self, size=0): - self.flush() - return BufferedReader.peek(self, size) - - def read1(self, size=-1): - self.flush() - return BufferedReader.read1(self, size) - - def readinto1(self, b): - self.flush() - return BufferedReader.readinto1(self, b) - - def write(self, b): - if self._read_buf: - # Undo readahead - with self._read_lock: - self.raw.seek(self._read_pos - len(self._read_buf), 1) - self._reset_read_buf() - return BufferedWriter.write(self, b) - - -def _new_buffersize(bytes_read): - # Parallels _io/fileio.c new_buffersize - if bytes_read > 65536: - addend = bytes_read >> 3 - else: - addend = 256 + bytes_read - if addend < DEFAULT_BUFFER_SIZE: - addend = DEFAULT_BUFFER_SIZE - return bytes_read + addend - - -class FileIO(RawIOBase): - _fd = -1 - _created = False - _readable = False - _writable = False - _appending = False - _seekable = None - _closefd = True - - def __init__(self, file, mode='r', closefd=True, opener=None): - """Open a file. The mode can be 'r' (default), 'w', 'x' or 'a' for reading, - writing, exclusive creation or appending. The file will be created if it - doesn't exist when opened for writing or appending; it will be truncated - when opened for writing. A FileExistsError will be raised if it already - exists when opened for creating. Opening a file for creating implies - writing so this mode behaves in a similar way to 'w'. Add a '+' to the mode - to allow simultaneous reading and writing. A custom opener can be used by - passing a callable as *opener*. The underlying file descriptor for the file - object is then obtained by calling opener with (*name*, *flags*). - *opener* must return an open file descriptor (passing os.open as *opener* - results in functionality similar to passing None). - """ - if self._fd >= 0: - # Have to close the existing file first. - self._stat_atopen = None - try: - if self._closefd: - os.close(self._fd) - finally: - self._fd = -1 - - if isinstance(file, float): - raise TypeError('integer argument expected, got float') - if isinstance(file, int): - if isinstance(file, bool): - import warnings - warnings.warn("bool is used as a file descriptor", - RuntimeWarning, stacklevel=2) - file = int(file) - fd = file - if fd < 0: - raise ValueError('negative file descriptor') - else: - fd = -1 - - if not isinstance(mode, str): - raise TypeError('invalid mode: %s' % (mode,)) - if not set(mode) <= set('xrwab+'): - raise ValueError('invalid mode: %s' % (mode,)) - if sum(c in 'rwax' for c in mode) != 1 or mode.count('+') > 1: - raise ValueError('Must have exactly one of create/read/write/append ' - 'mode and at most one plus') - - if 'x' in mode: - self._created = True - self._writable = True - flags = os.O_EXCL | os.O_CREAT - elif 'r' in mode: - self._readable = True - flags = 0 - elif 'w' in mode: - self._writable = True - flags = os.O_CREAT | os.O_TRUNC - elif 'a' in mode: - self._writable = True - self._appending = True - flags = os.O_APPEND | os.O_CREAT - - if '+' in mode: - self._readable = True - self._writable = True - - if self._readable and self._writable: - flags |= os.O_RDWR - elif self._readable: - flags |= os.O_RDONLY - else: - flags |= os.O_WRONLY - - flags |= getattr(os, 'O_BINARY', 0) - - noinherit_flag = (getattr(os, 'O_NOINHERIT', 0) or - getattr(os, 'O_CLOEXEC', 0)) - flags |= noinherit_flag - - owned_fd = None - try: - if fd < 0: - if not closefd: - raise ValueError('Cannot use closefd=False with file name') - if opener is None: - fd = os.open(file, flags, 0o666) - else: - fd = opener(file, flags) - if not isinstance(fd, int): - raise TypeError('expected integer from opener') - if fd < 0: - # bpo-27066: Raise a ValueError for bad value. - raise ValueError(f'opener returned {fd}') - owned_fd = fd - if not noinherit_flag: - os.set_inheritable(fd, False) - - self._closefd = closefd - self._stat_atopen = os.fstat(fd) - try: - if stat.S_ISDIR(self._stat_atopen.st_mode): - raise IsADirectoryError(errno.EISDIR, - os.strerror(errno.EISDIR), file) - except AttributeError: - # Ignore the AttributeError if stat.S_ISDIR or errno.EISDIR - # don't exist. - pass - - if _setmode: - # don't translate newlines (\r\n <=> \n) - _setmode(fd, os.O_BINARY) - - self.name = file - if self._appending: - # For consistent behaviour, we explicitly seek to the - # end of file (otherwise, it might be done only on the - # first write()). - try: - os.lseek(fd, 0, SEEK_END) - except OSError as e: - if e.errno != errno.ESPIPE: - raise - except: - self._stat_atopen = None - if owned_fd is not None: - os.close(owned_fd) - raise - self._fd = fd - - def _dealloc_warn(self, source): - if self._fd >= 0 and self._closefd and not self.closed: - import warnings - warnings.warn(f'unclosed file {source!r}', ResourceWarning, - stacklevel=2, source=self) - - def __getstate__(self): - raise TypeError(f"cannot pickle {self.__class__.__name__!r} object") - - def __repr__(self): - class_name = '%s.%s' % (self.__class__.__module__, - self.__class__.__qualname__) - if self.closed: - return '<%s [closed]>' % class_name - try: - name = self.name - except AttributeError: - return ('<%s fd=%d mode=%r closefd=%r>' % - (class_name, self._fd, self.mode, self._closefd)) - else: - return ('<%s name=%r mode=%r closefd=%r>' % - (class_name, name, self.mode, self._closefd)) - - @property - def _blksize(self): - if self._stat_atopen is None: - return DEFAULT_BUFFER_SIZE - - blksize = getattr(self._stat_atopen, "st_blksize", 0) - # WASI sets blsize to 0 - if not blksize: - return DEFAULT_BUFFER_SIZE - return blksize - - def _checkReadable(self): - if not self._readable: - raise UnsupportedOperation('File not open for reading') - - def _checkWritable(self, msg=None): - if not self._writable: - raise UnsupportedOperation('File not open for writing') - - def read(self, size=None): - """Read at most size bytes, returned as bytes. - - If size is less than 0, read all bytes in the file making - multiple read calls. See ``FileIO.readall``. - - Attempts to make only one system call, retrying only per - PEP 475 (EINTR). This means less data may be returned than - requested. - - In non-blocking mode, returns None if no data is available. - Return an empty bytes object at EOF. - """ - self._checkClosed() - self._checkReadable() - if size is None or size < 0: - return self.readall() - try: - return os.read(self._fd, size) - except BlockingIOError: - return None - - def readall(self): - """Read all data from the file, returned as bytes. - - Reads until either there is an error or read() returns size 0 - (indicates EOF). If the file is already at EOF, returns an - empty bytes object. - - In non-blocking mode, returns as much data as could be read - before EAGAIN. If no data is available (EAGAIN is returned - before bytes are read) returns None. - """ - self._checkClosed() - self._checkReadable() - if self._stat_atopen is None or self._stat_atopen.st_size <= 0: - bufsize = DEFAULT_BUFFER_SIZE - else: - # In order to detect end of file, need a read() of at least 1 - # byte which returns size 0. Oversize the buffer by 1 byte so the - # I/O can be completed with two read() calls (one for all data, one - # for EOF) without needing to resize the buffer. - bufsize = self._stat_atopen.st_size + 1 - - if self._stat_atopen.st_size > 65536: - try: - pos = os.lseek(self._fd, 0, SEEK_CUR) - if self._stat_atopen.st_size >= pos: - bufsize = self._stat_atopen.st_size - pos + 1 - except OSError: - pass - - result = bytearray(bufsize) - bytes_read = 0 - try: - while n := os.readinto(self._fd, memoryview(result)[bytes_read:]): - bytes_read += n - if bytes_read >= len(result): - result.resize(_new_buffersize(bytes_read)) - except BlockingIOError: - if not bytes_read: - return None - - assert len(result) - bytes_read >= 1, \ - "os.readinto buffer size 0 will result in erroneous EOF / returns 0" - result.resize(bytes_read) - return bytes(result) - - def readinto(self, buffer): - """Same as RawIOBase.readinto().""" - self._checkClosed() - self._checkReadable() - try: - return os.readinto(self._fd, buffer) - except BlockingIOError: - return None - - def write(self, b): - """Write bytes b to file, return number written. - - Only makes one system call, so not all of the data may be written. - The number of bytes actually written is returned. In non-blocking mode, - returns None if the write would block. - """ - self._checkClosed() - self._checkWritable() - try: - return os.write(self._fd, b) - except BlockingIOError: - return None - - def seek(self, pos, whence=SEEK_SET): - """Move to new file position. - - Argument offset is a byte count. Optional argument whence defaults to - SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values - are SEEK_CUR or 1 (move relative to current position, positive or negative), - and SEEK_END or 2 (move relative to end of file, usually negative, although - many platforms allow seeking beyond the end of a file). - - Note that not all file objects are seekable. - """ - if isinstance(pos, float): - raise TypeError('an integer is required') - self._checkClosed() - return os.lseek(self._fd, pos, whence) - - def tell(self): - """tell() -> int. Current file position. - - Can raise OSError for non seekable files.""" - self._checkClosed() - return os.lseek(self._fd, 0, SEEK_CUR) - - def truncate(self, size=None): - """Truncate the file to at most size bytes. - - Size defaults to the current file position, as returned by tell(). - The current file position is changed to the value of size. - """ - self._checkClosed() - self._checkWritable() - if size is None: - size = self.tell() - os.ftruncate(self._fd, size) - self._stat_atopen = None - return size - - def close(self): - """Close the file. - - A closed file cannot be used for further I/O operations. close() may be - called more than once without error. - """ - if not self.closed: - self._stat_atopen = None - try: - if self._closefd and self._fd >= 0: - os.close(self._fd) - finally: - super().close() - - def seekable(self): - """True if file supports random-access.""" - self._checkClosed() - if self._seekable is None: - try: - self.tell() - except OSError: - self._seekable = False - else: - self._seekable = True - return self._seekable - - def readable(self): - """True if file was opened in a read mode.""" - self._checkClosed() - return self._readable - - def writable(self): - """True if file was opened in a write mode.""" - self._checkClosed() - return self._writable - - def fileno(self): - """Return the underlying file descriptor (an integer).""" - self._checkClosed() - return self._fd - - def isatty(self): - """True if the file is connected to a TTY device.""" - self._checkClosed() - return os.isatty(self._fd) - - def _isatty_open_only(self): - """Checks whether the file is a TTY using an open-only optimization. - - TTYs are always character devices. If the interpreter knows a file is - not a character device when it would call ``isatty``, can skip that - call. Inside ``open()`` there is a fresh stat result that contains that - information. Use the stat result to skip a system call. Outside of that - context TOCTOU issues (the fd could be arbitrarily modified by - surrounding code). - """ - if (self._stat_atopen is not None - and not stat.S_ISCHR(self._stat_atopen.st_mode)): - return False - return os.isatty(self._fd) - - @property - def closefd(self): - """True if the file descriptor will be closed by close().""" - return self._closefd - - @property - def mode(self): - """String giving the file mode""" - if self._created: - if self._readable: - return 'xb+' - else: - return 'xb' - elif self._appending: - if self._readable: - return 'ab+' - else: - return 'ab' - elif self._readable: - if self._writable: - return 'rb+' - else: - return 'rb' - else: - return 'wb' - - -class TextIOBase(IOBase): - - """Base class for text I/O. - - This class provides a character and line based interface to stream - I/O. - """ - - def read(self, size=-1): - """Read at most size characters from stream, where size is an int. - - Read from underlying buffer until we have size characters or we hit EOF. - If size is negative or omitted, read until EOF. - - Returns a string. - """ - self._unsupported("read") - - def write(self, s): - """Write string s to stream and returning an int.""" - self._unsupported("write") - - def truncate(self, pos=None): - """Truncate size to pos, where pos is an int.""" - self._unsupported("truncate") - - def readline(self): - """Read until newline or EOF. - - Returns an empty string if EOF is hit immediately. - """ - self._unsupported("readline") - - def detach(self): - """ - Separate the underlying buffer from the TextIOBase and return it. - - After the underlying buffer has been detached, the TextIO is in an - unusable state. - """ - self._unsupported("detach") - - @property - def encoding(self): - """Subclasses should override.""" - return None - - @property - def newlines(self): - """Line endings translated so far. - - Only line endings translated during reading are considered. - - Subclasses should override. - """ - return None - - @property - def errors(self): - """Error setting of the decoder or encoder. - - Subclasses should override.""" - return None - -io.TextIOBase.register(TextIOBase) - - -class IncrementalNewlineDecoder(codecs.IncrementalDecoder): - r"""Codec used when reading a file in universal newlines mode. It wraps - another incremental decoder, translating \r\n and \r into \n. It also - records the types of newlines encountered. When used with - translate=False, it ensures that the newline sequence is returned in - one piece. - """ - def __init__(self, decoder, translate, errors='strict'): - codecs.IncrementalDecoder.__init__(self, errors=errors) - self.translate = translate - self.decoder = decoder - self.seennl = 0 - self.pendingcr = False - - def decode(self, input, final=False): - # decode input (with the eventual \r from a previous pass) - if self.decoder is None: - output = input - else: - output = self.decoder.decode(input, final=final) - if self.pendingcr and (output or final): - output = "\r" + output - self.pendingcr = False - - # retain last \r even when not translating data: - # then readline() is sure to get \r\n in one pass - if output.endswith("\r") and not final: - output = output[:-1] - self.pendingcr = True - - # Record which newlines are read - crlf = output.count('\r\n') - cr = output.count('\r') - crlf - lf = output.count('\n') - crlf - self.seennl |= (lf and self._LF) | (cr and self._CR) \ - | (crlf and self._CRLF) - - if self.translate: - if crlf: - output = output.replace("\r\n", "\n") - if cr: - output = output.replace("\r", "\n") - - return output - - def getstate(self): - if self.decoder is None: - buf = b"" - flag = 0 - else: - buf, flag = self.decoder.getstate() - flag <<= 1 - if self.pendingcr: - flag |= 1 - return buf, flag - - def setstate(self, state): - buf, flag = state - self.pendingcr = bool(flag & 1) - if self.decoder is not None: - self.decoder.setstate((buf, flag >> 1)) - - def reset(self): - self.seennl = 0 - self.pendingcr = False - if self.decoder is not None: - self.decoder.reset() - - _LF = 1 - _CR = 2 - _CRLF = 4 - - @property - def newlines(self): - return (None, - "\n", - "\r", - ("\r", "\n"), - "\r\n", - ("\n", "\r\n"), - ("\r", "\r\n"), - ("\r", "\n", "\r\n") - )[self.seennl] - - -class TextIOWrapper(TextIOBase): - - r"""Character and line based layer over a BufferedIOBase object, buffer. - - encoding gives the name of the encoding that the stream will be - decoded or encoded with. It defaults to locale.getencoding(). - - errors determines the strictness of encoding and decoding (see the - codecs.register) and defaults to "strict". - - newline can be None, '', '\n', '\r', or '\r\n'. It controls the - handling of line endings. If it is None, universal newlines is - enabled. With this enabled, on input, the lines endings '\n', '\r', - or '\r\n' are translated to '\n' before being returned to the - caller. Conversely, on output, '\n' is translated to the system - default line separator, os.linesep. If newline is any other of its - legal values, that newline becomes the newline when the file is read - and it is returned untranslated. On output, '\n' is converted to the - newline. - - If line_buffering is True, a call to flush is implied when a call to - write contains a newline character. - """ - - _CHUNK_SIZE = 2048 - - # Initialize _buffer as soon as possible since it's used by __del__() - # which calls close() - _buffer = None - - # The write_through argument has no effect here since this - # implementation always writes through. The argument is present only - # so that the signature can match the signature of the C version. - def __init__(self, buffer, encoding=None, errors=None, newline=None, - line_buffering=False, write_through=False): - self._check_newline(newline) - encoding = text_encoding(encoding) - - if encoding == "locale": - encoding = self._get_locale_encoding() - - if not isinstance(encoding, str): - raise ValueError("invalid encoding: %r" % encoding) - - if not codecs.lookup(encoding)._is_text_encoding: - msg = "%r is not a text encoding" - raise LookupError(msg % encoding) - - if errors is None: - errors = "strict" - else: - if not isinstance(errors, str): - raise ValueError("invalid errors: %r" % errors) - if _CHECK_ERRORS: - codecs.lookup_error(errors) - - self._buffer = buffer - self._decoded_chars = '' # buffer for text returned from decoder - self._decoded_chars_used = 0 # offset into _decoded_chars for read() - self._snapshot = None # info for reconstructing decoder state - self._seekable = self._telling = self.buffer.seekable() - self._has_read1 = hasattr(self.buffer, 'read1') - self._configure(encoding, errors, newline, - line_buffering, write_through) - - def _check_newline(self, newline): - if newline is not None and not isinstance(newline, str): - raise TypeError("illegal newline type: %r" % (type(newline),)) - if newline not in (None, "", "\n", "\r", "\r\n"): - raise ValueError("illegal newline value: %r" % (newline,)) - - def _configure(self, encoding=None, errors=None, newline=None, - line_buffering=False, write_through=False): - self._encoding = encoding - self._errors = errors - self._encoder = None - self._decoder = None - self._b2cratio = 0.0 - - self._readuniversal = not newline - self._readtranslate = newline is None - self._readnl = newline - self._writetranslate = newline != '' - self._writenl = newline or os.linesep - - self._line_buffering = line_buffering - self._write_through = write_through - - # don't write a BOM in the middle of a file - if self._seekable and self.writable(): - position = self.buffer.tell() - if position != 0: - try: - self._get_encoder().setstate(0) - except LookupError: - # Sometimes the encoder doesn't exist - pass - - # self._snapshot is either None, or a tuple (dec_flags, next_input) - # where dec_flags is the second (integer) item of the decoder state - # and next_input is the chunk of input bytes that comes next after the - # snapshot point. We use this to reconstruct decoder states in tell(). - - # Naming convention: - # - "bytes_..." for integer variables that count input bytes - # - "chars_..." for integer variables that count decoded characters - - def __repr__(self): - result = "<{}.{}".format(self.__class__.__module__, - self.__class__.__qualname__) - try: - name = self.name - except AttributeError: - pass - else: - result += " name={0!r}".format(name) - try: - mode = self.mode - except AttributeError: - pass - else: - result += " mode={0!r}".format(mode) - return result + " encoding={0!r}>".format(self.encoding) - - @property - def encoding(self): - return self._encoding - - @property - def errors(self): - return self._errors - - @property - def line_buffering(self): - return self._line_buffering - - @property - def write_through(self): - return self._write_through - - @property - def buffer(self): - return self._buffer - - def reconfigure(self, *, - encoding=None, errors=None, newline=Ellipsis, - line_buffering=None, write_through=None): - """Reconfigure the text stream with new parameters. - - This also flushes the stream. - """ - if (self._decoder is not None - and (encoding is not None or errors is not None - or newline is not Ellipsis)): - raise UnsupportedOperation( - "It is not possible to set the encoding or newline of stream " - "after the first read") - - if errors is None: - if encoding is None: - errors = self._errors - else: - errors = 'strict' - elif not isinstance(errors, str): - raise TypeError("invalid errors: %r" % errors) - - if encoding is None: - encoding = self._encoding - else: - if not isinstance(encoding, str): - raise TypeError("invalid encoding: %r" % encoding) - if encoding == "locale": - encoding = self._get_locale_encoding() - - if newline is Ellipsis: - newline = self._readnl - self._check_newline(newline) - - if line_buffering is None: - line_buffering = self.line_buffering - if write_through is None: - write_through = self.write_through - - self.flush() - self._configure(encoding, errors, newline, - line_buffering, write_through) - - def seekable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return self._seekable - - def readable(self): - return self.buffer.readable() - - def writable(self): - return self.buffer.writable() - - def flush(self): - self.buffer.flush() - self._telling = self._seekable - - def close(self): - if self.buffer is not None and not self.closed: - try: - self.flush() - finally: - self.buffer.close() - - @property - def closed(self): - return self.buffer.closed - - @property - def name(self): - return self.buffer.name - - def fileno(self): - return self.buffer.fileno() - - def isatty(self): - return self.buffer.isatty() - - def write(self, s): - 'Write data, where s is a str' - if self.closed: - raise ValueError("write to closed file") - if not isinstance(s, str): - raise TypeError("can't write %s to text stream" % - s.__class__.__name__) - length = len(s) - haslf = (self._writetranslate or self._line_buffering) and "\n" in s - if haslf and self._writetranslate and self._writenl != "\n": - s = s.replace("\n", self._writenl) - encoder = self._encoder or self._get_encoder() - # XXX What if we were just reading? - b = encoder.encode(s) - self.buffer.write(b) - if self._line_buffering and (haslf or "\r" in s): - self.flush() - if self._snapshot is not None: - self._set_decoded_chars('') - self._snapshot = None - if self._decoder: - self._decoder.reset() - return length - - def _get_encoder(self): - make_encoder = codecs.getincrementalencoder(self._encoding) - self._encoder = make_encoder(self._errors) - return self._encoder - - def _get_decoder(self): - make_decoder = codecs.getincrementaldecoder(self._encoding) - decoder = make_decoder(self._errors) - if self._readuniversal: - decoder = IncrementalNewlineDecoder(decoder, self._readtranslate) - self._decoder = decoder - return decoder - - # The following three methods implement an ADT for _decoded_chars. - # Text returned from the decoder is buffered here until the client - # requests it by calling our read() or readline() method. - def _set_decoded_chars(self, chars): - """Set the _decoded_chars buffer.""" - self._decoded_chars = chars - self._decoded_chars_used = 0 - - def _get_decoded_chars(self, n=None): - """Advance into the _decoded_chars buffer.""" - offset = self._decoded_chars_used - if n is None: - chars = self._decoded_chars[offset:] - else: - chars = self._decoded_chars[offset:offset + n] - self._decoded_chars_used += len(chars) - return chars - - def _get_locale_encoding(self): - try: - import locale - except ImportError: - # Importing locale may fail if Python is being built - return "utf-8" - else: - return locale.getencoding() - - def _rewind_decoded_chars(self, n): - """Rewind the _decoded_chars buffer.""" - if self._decoded_chars_used < n: - raise AssertionError("rewind decoded_chars out of bounds") - self._decoded_chars_used -= n - - def _read_chunk(self): - """ - Read and decode the next chunk of data from the BufferedReader. - """ - - # The return value is True unless EOF was reached. The decoded - # string is placed in self._decoded_chars (replacing its previous - # value). The entire input chunk is sent to the decoder, though - # some of it may remain buffered in the decoder, yet to be - # converted. - - if self._decoder is None: - raise ValueError("no decoder") - - if self._telling: - # To prepare for tell(), we need to snapshot a point in the - # file where the decoder's input buffer is empty. - - dec_buffer, dec_flags = self._decoder.getstate() - # Given this, we know there was a valid snapshot point - # len(dec_buffer) bytes ago with decoder state (b'', dec_flags). - - # Read a chunk, decode it, and put the result in self._decoded_chars. - if self._has_read1: - input_chunk = self.buffer.read1(self._CHUNK_SIZE) - else: - input_chunk = self.buffer.read(self._CHUNK_SIZE) - eof = not input_chunk - decoded_chars = self._decoder.decode(input_chunk, eof) - self._set_decoded_chars(decoded_chars) - if decoded_chars: - self._b2cratio = len(input_chunk) / len(self._decoded_chars) - else: - self._b2cratio = 0.0 - - if self._telling: - # At the snapshot point, len(dec_buffer) bytes before the read, - # the next input to be decoded is dec_buffer + input_chunk. - self._snapshot = (dec_flags, dec_buffer + input_chunk) - - return not eof - - def _pack_cookie(self, position, dec_flags=0, - bytes_to_feed=0, need_eof=False, chars_to_skip=0): - # The meaning of a tell() cookie is: seek to position, set the - # decoder flags to dec_flags, read bytes_to_feed bytes, feed them - # into the decoder with need_eof as the EOF flag, then skip - # chars_to_skip characters of the decoded result. For most simple - # decoders, tell() will often just give a byte offset in the file. - return (position | (dec_flags<<64) | (bytes_to_feed<<128) | - (chars_to_skip<<192) | bool(need_eof)<<256) - - def _unpack_cookie(self, bigint): - rest, position = divmod(bigint, 1<<64) - rest, dec_flags = divmod(rest, 1<<64) - rest, bytes_to_feed = divmod(rest, 1<<64) - need_eof, chars_to_skip = divmod(rest, 1<<64) - return position, dec_flags, bytes_to_feed, bool(need_eof), chars_to_skip - - def tell(self): - if not self._seekable: - raise UnsupportedOperation("underlying stream is not seekable") - if not self._telling: - raise OSError("telling position disabled by next() call") - self.flush() - position = self.buffer.tell() - decoder = self._decoder - if decoder is None or self._snapshot is None: - if self._decoded_chars: - # This should never happen. - raise AssertionError("pending decoded text") - return position - - # Skip backward to the snapshot point (see _read_chunk). - dec_flags, next_input = self._snapshot - position -= len(next_input) - - # How many decoded characters have been used up since the snapshot? - chars_to_skip = self._decoded_chars_used - if chars_to_skip == 0: - # We haven't moved from the snapshot point. - return self._pack_cookie(position, dec_flags) - - # Starting from the snapshot position, we will walk the decoder - # forward until it gives us enough decoded characters. - saved_state = decoder.getstate() - try: - # Fast search for an acceptable start point, close to our - # current pos. - # Rationale: calling decoder.decode() has a large overhead - # regardless of chunk size; we want the number of such calls to - # be O(1) in most situations (common decoders, sensible input). - # Actually, it will be exactly 1 for fixed-size codecs (all - # 8-bit codecs, also UTF-16 and UTF-32). - skip_bytes = int(self._b2cratio * chars_to_skip) - skip_back = 1 - assert skip_bytes <= len(next_input) - while skip_bytes > 0: - decoder.setstate((b'', dec_flags)) - # Decode up to temptative start point - n = len(decoder.decode(next_input[:skip_bytes])) - if n <= chars_to_skip: - b, d = decoder.getstate() - if not b: - # Before pos and no bytes buffered in decoder => OK - dec_flags = d - chars_to_skip -= n - break - # Skip back by buffered amount and reset heuristic - skip_bytes -= len(b) - skip_back = 1 - else: - # We're too far ahead, skip back a bit - skip_bytes -= skip_back - skip_back = skip_back * 2 - else: - skip_bytes = 0 - decoder.setstate((b'', dec_flags)) - - # Note our initial start point. - start_pos = position + skip_bytes - start_flags = dec_flags - if chars_to_skip == 0: - # We haven't moved from the start point. - return self._pack_cookie(start_pos, start_flags) - - # Feed the decoder one byte at a time. As we go, note the - # nearest "safe start point" before the current location - # (a point where the decoder has nothing buffered, so seek() - # can safely start from there and advance to this location). - bytes_fed = 0 - need_eof = False - # Chars decoded since `start_pos` - chars_decoded = 0 - for i in range(skip_bytes, len(next_input)): - bytes_fed += 1 - chars_decoded += len(decoder.decode(next_input[i:i+1])) - dec_buffer, dec_flags = decoder.getstate() - if not dec_buffer and chars_decoded <= chars_to_skip: - # Decoder buffer is empty, so this is a safe start point. - start_pos += bytes_fed - chars_to_skip -= chars_decoded - start_flags, bytes_fed, chars_decoded = dec_flags, 0, 0 - if chars_decoded >= chars_to_skip: - break - else: - # We didn't get enough decoded data; signal EOF to get more. - chars_decoded += len(decoder.decode(b'', final=True)) - need_eof = True - if chars_decoded < chars_to_skip: - raise OSError("can't reconstruct logical file position") - - # The returned cookie corresponds to the last safe start point. - return self._pack_cookie( - start_pos, start_flags, bytes_fed, need_eof, chars_to_skip) - finally: - decoder.setstate(saved_state) - - def truncate(self, pos=None): - self.flush() - if pos is None: - pos = self.tell() - return self.buffer.truncate(pos) - - def detach(self): - if self.buffer is None: - raise ValueError("buffer is already detached") - self.flush() - buffer = self._buffer - self._buffer = None - return buffer - - def seek(self, cookie, whence=0): - def _reset_encoder(position): - """Reset the encoder (merely useful for proper BOM handling)""" - try: - encoder = self._encoder or self._get_encoder() - except LookupError: - # Sometimes the encoder doesn't exist - pass - else: - if position != 0: - encoder.setstate(0) - else: - encoder.reset() - - if self.closed: - raise ValueError("tell on closed file") - if not self._seekable: - raise UnsupportedOperation("underlying stream is not seekable") - if whence == SEEK_CUR: - if cookie != 0: - raise UnsupportedOperation("can't do nonzero cur-relative seeks") - # Seeking to the current position should attempt to - # sync the underlying buffer with the current position. - whence = 0 - cookie = self.tell() - elif whence == SEEK_END: - if cookie != 0: - raise UnsupportedOperation("can't do nonzero end-relative seeks") - self.flush() - position = self.buffer.seek(0, whence) - self._set_decoded_chars('') - self._snapshot = None - if self._decoder: - self._decoder.reset() - _reset_encoder(position) - return position - if whence != 0: - raise ValueError("unsupported whence (%r)" % (whence,)) - if cookie < 0: - raise ValueError("negative seek position %r" % (cookie,)) - self.flush() - - # The strategy of seek() is to go back to the safe start point - # and replay the effect of read(chars_to_skip) from there. - start_pos, dec_flags, bytes_to_feed, need_eof, chars_to_skip = \ - self._unpack_cookie(cookie) - - # Seek back to the safe start point. - self.buffer.seek(start_pos) - self._set_decoded_chars('') - self._snapshot = None - - # Restore the decoder to its state from the safe start point. - if cookie == 0 and self._decoder: - self._decoder.reset() - elif self._decoder or dec_flags or chars_to_skip: - self._decoder = self._decoder or self._get_decoder() - self._decoder.setstate((b'', dec_flags)) - self._snapshot = (dec_flags, b'') - - if chars_to_skip: - # Just like _read_chunk, feed the decoder and save a snapshot. - input_chunk = self.buffer.read(bytes_to_feed) - self._set_decoded_chars( - self._decoder.decode(input_chunk, need_eof)) - self._snapshot = (dec_flags, input_chunk) - - # Skip chars_to_skip of the decoded characters. - if len(self._decoded_chars) < chars_to_skip: - raise OSError("can't restore logical file position") - self._decoded_chars_used = chars_to_skip - - _reset_encoder(cookie) - return cookie - - def read(self, size=None): - self._checkReadable() - if size is None: - size = -1 - else: - try: - size_index = size.__index__ - except AttributeError: - raise TypeError(f"{size!r} is not an integer") - else: - size = size_index() - decoder = self._decoder or self._get_decoder() - if size < 0: - chunk = self.buffer.read() - if chunk is None: - raise BlockingIOError("Read returned None.") - # Read everything. - result = (self._get_decoded_chars() + - decoder.decode(chunk, final=True)) - if self._snapshot is not None: - self._set_decoded_chars('') - self._snapshot = None - return result - else: - # Keep reading chunks until we have size characters to return. - eof = False - result = self._get_decoded_chars(size) - while len(result) < size and not eof: - eof = not self._read_chunk() - result += self._get_decoded_chars(size - len(result)) - return result - - def __next__(self): - self._telling = False - line = self.readline() - if not line: - self._snapshot = None - self._telling = self._seekable - raise StopIteration - return line - - def readline(self, size=None): - if self.closed: - raise ValueError("read from closed file") - if size is None: - size = -1 - else: - try: - size_index = size.__index__ - except AttributeError: - raise TypeError(f"{size!r} is not an integer") - else: - size = size_index() - - # Grab all the decoded text (we will rewind any extra bits later). - line = self._get_decoded_chars() - - start = 0 - # Make the decoder if it doesn't already exist. - if not self._decoder: - self._get_decoder() - - pos = endpos = None - while True: - if self._readtranslate: - # Newlines are already translated, only search for \n - pos = line.find('\n', start) - if pos >= 0: - endpos = pos + 1 - break - else: - start = len(line) - - elif self._readuniversal: - # Universal newline search. Find any of \r, \r\n, \n - # The decoder ensures that \r\n are not split in two pieces - - # In C we'd look for these in parallel of course. - nlpos = line.find("\n", start) - crpos = line.find("\r", start) - if crpos == -1: - if nlpos == -1: - # Nothing found - start = len(line) - else: - # Found \n - endpos = nlpos + 1 - break - elif nlpos == -1: - # Found lone \r - endpos = crpos + 1 - break - elif nlpos < crpos: - # Found \n - endpos = nlpos + 1 - break - elif nlpos == crpos + 1: - # Found \r\n - endpos = crpos + 2 - break - else: - # Found \r - endpos = crpos + 1 - break - else: - # non-universal - pos = line.find(self._readnl) - if pos >= 0: - endpos = pos + len(self._readnl) - break - - if size >= 0 and len(line) >= size: - endpos = size # reached length size - break - - # No line ending seen yet - get more data' - while self._read_chunk(): - if self._decoded_chars: - break - if self._decoded_chars: - line += self._get_decoded_chars() - else: - # end of file - self._set_decoded_chars('') - self._snapshot = None - return line - - if size >= 0 and endpos > size: - endpos = size # don't exceed size - - # Rewind _decoded_chars to just after the line ending we found. - self._rewind_decoded_chars(len(line) - endpos) - return line[:endpos] - - @property - def newlines(self): - return self._decoder.newlines if self._decoder else None - - def _dealloc_warn(self, source): - if dealloc_warn := getattr(self.buffer, "_dealloc_warn", None): - dealloc_warn(source) - - -class StringIO(TextIOWrapper): - """Text I/O implementation using an in-memory buffer. - - The initial_value argument sets the value of object. The newline - argument is like the one of TextIOWrapper's constructor. - """ - - def __init__(self, initial_value="", newline="\n"): - super(StringIO, self).__init__(BytesIO(), - encoding="utf-8", - errors="surrogatepass", - newline=newline) - # Issue #5645: make universal newlines semantics the same as in the - # C version, even under Windows. - if newline is None: - self._writetranslate = False - if initial_value is not None: - if not isinstance(initial_value, str): - raise TypeError("initial_value must be str or None, not {0}" - .format(type(initial_value).__name__)) - self.write(initial_value) - self.seek(0) - - def getvalue(self): - self.flush() - decoder = self._decoder or self._get_decoder() - old_state = decoder.getstate() - decoder.reset() - try: - return decoder.decode(self.buffer.getvalue(), final=True) - finally: - decoder.setstate(old_state) - - def __repr__(self): - # TextIOWrapper tells the encoding in its repr. In StringIO, - # that's an implementation detail. - return object.__repr__(self) - - @property - def errors(self): - return None - - @property - def encoding(self): - return None - - def detach(self): - # This doesn't make sense on StringIO. - self._unsupported("detach") diff --git a/Python314_4_x86_Template/Lib/_pylong.py b/Python314_4_x86_Template/Lib/_pylong.py deleted file mode 100644 index be1acd17c..000000000 --- a/Python314_4_x86_Template/Lib/_pylong.py +++ /dev/null @@ -1,729 +0,0 @@ -"""Python implementations of some algorithms for use by longobject.c. -The goal is to provide asymptotically faster algorithms that can be -used for operations on integers with many digits. In those cases, the -performance overhead of the Python implementation is not significant -since the asymptotic behavior is what dominates runtime. Functions -provided by this module should be considered private and not part of any -public API. - -Note: for ease of maintainability, please prefer clear code and avoid -"micro-optimizations". This module will only be imported and used for -integers with a huge number of digits. Saving a few microseconds with -tricky or non-obvious code is not worth it. For people looking for -maximum performance, they should use something like gmpy2.""" - -import re -import decimal -try: - import _decimal -except ImportError: - _decimal = None - -# A number of functions have this form, where `w` is a desired number of -# digits in base `base`: -# -# def inner(...w...): -# if w <= LIMIT: -# return something -# lo = w >> 1 -# hi = w - lo -# something involving base**lo, inner(...lo...), j, and inner(...hi...) -# figure out largest w needed -# result = inner(w) -# -# They all had some on-the-fly scheme to cache `base**lo` results for reuse. -# Power is costly. -# -# This routine aims to compute all amd only the needed powers in advance, as -# efficiently as reasonably possible. This isn't trivial, and all the -# on-the-fly methods did needless work in many cases. The driving code above -# changes to: -# -# figure out largest w needed -# mycache = compute_powers(w, base, LIMIT) -# result = inner(w) -# -# and `mycache[lo]` replaces `base**lo` in the inner function. -# -# If an algorithm wants the powers of ceiling(w/2) instead of the floor, -# pass keyword argument `need_hi=True`. -# -# While this does give minor speedups (a few percent at best), the -# primary intent is to simplify the functions using this, by eliminating -# the need for them to craft their own ad-hoc caching schemes. -# -# See code near end of file for a block of code that can be enabled to -# run millions of tests. -def compute_powers(w, base, more_than, *, need_hi=False, show=False): - seen = set() - need = set() - ws = {w} - while ws: - w = ws.pop() # any element is fine to use next - if w in seen or w <= more_than: - continue - seen.add(w) - lo = w >> 1 - hi = w - lo - # only _need_ one here; the other may, or may not, be needed - which = hi if need_hi else lo - need.add(which) - ws.add(which) - if lo != hi: - ws.add(w - which) - - # `need` is the set of exponents needed. To compute them all - # efficiently, possibly add other exponents to `extra`. The goal is - # to ensure that each exponent can be gotten from a smaller one via - # multiplying by the base, squaring it, or squaring and then - # multiplying by the base. - # - # If need_hi is False, this is already the case (w can always be - # gotten from w >> 1 via one of the squaring strategies). But we do - # the work anyway, just in case ;-) - # - # Note that speed is irrelevant. These loops are working on little - # ints (exponents) and go around O(log w) times. The total cost is - # insignificant compared to just one of the bigint multiplies. - cands = need.copy() - extra = set() - while cands: - w = max(cands) - cands.remove(w) - lo = w >> 1 - if lo > more_than and w-1 not in cands and lo not in cands: - extra.add(lo) - cands.add(lo) - assert need_hi or not extra - - d = {} - for n in sorted(need | extra): - lo = n >> 1 - hi = n - lo - if n-1 in d: - if show: - print("* base", end="") - result = d[n-1] * base # cheap! - elif lo in d: - # Multiplying a bigint by itself is about twice as fast - # in CPython provided it's the same object. - if show: - print("square", end="") - result = d[lo] * d[lo] # same object - if hi != lo: - if show: - print(" * base", end="") - assert 2 * lo + 1 == n - result *= base - else: # rare - if show: - print("pow", end='') - result = base ** n - if show: - print(" at", n, "needed" if n in need else "extra") - d[n] = result - - assert need <= d.keys() - if excess := d.keys() - need: - assert need_hi - for n in excess: - del d[n] - return d - -_unbounded_dec_context = decimal.getcontext().copy() -_unbounded_dec_context.prec = decimal.MAX_PREC -_unbounded_dec_context.Emax = decimal.MAX_EMAX -_unbounded_dec_context.Emin = decimal.MIN_EMIN -_unbounded_dec_context.traps[decimal.Inexact] = 1 # sanity check - -def int_to_decimal(n): - """Asymptotically fast conversion of an 'int' to Decimal.""" - - # Function due to Tim Peters. See GH issue #90716 for details. - # https://github.com/python/cpython/issues/90716 - # - # The implementation in longobject.c of base conversion algorithms - # between power-of-2 and non-power-of-2 bases are quadratic time. - # This function implements a divide-and-conquer algorithm that is - # faster for large numbers. Builds an equal decimal.Decimal in a - # "clever" recursive way. If we want a string representation, we - # apply str to _that_. - - from decimal import Decimal as D - BITLIM = 200 - - # Don't bother caching the "lo" mask in this; the time to compute it is - # tiny compared to the multiply. - def inner(n, w): - if w <= BITLIM: - return D(n) - w2 = w >> 1 - hi = n >> w2 - lo = n & ((1 << w2) - 1) - return inner(lo, w2) + inner(hi, w - w2) * w2pow[w2] - - with decimal.localcontext(_unbounded_dec_context): - nbits = n.bit_length() - w2pow = compute_powers(nbits, D(2), BITLIM) - if n < 0: - negate = True - n = -n - else: - negate = False - result = inner(n, nbits) - if negate: - result = -result - return result - -def int_to_decimal_string(n): - """Asymptotically fast conversion of an 'int' to a decimal string.""" - w = n.bit_length() - if w > 450_000 and _decimal is not None: - # It is only usable with the C decimal implementation. - # _pydecimal.py calls str() on very large integers, which in its - # turn calls int_to_decimal_string(), causing very deep recursion. - return str(int_to_decimal(n)) - - # Fallback algorithm for the case when the C decimal module isn't - # available. This algorithm is asymptotically worse than the algorithm - # using the decimal module, but better than the quadratic time - # implementation in longobject.c. - - DIGLIM = 1000 - def inner(n, w): - if w <= DIGLIM: - return str(n) - w2 = w >> 1 - hi, lo = divmod(n, pow10[w2]) - return inner(hi, w - w2) + inner(lo, w2).zfill(w2) - - # The estimation of the number of decimal digits. - # There is no harm in small error. If we guess too large, there may - # be leading 0's that need to be stripped. If we guess too small, we - # may need to call str() recursively for the remaining highest digits, - # which can still potentially be a large integer. This is manifested - # only if the number has way more than 10**15 digits, that exceeds - # the 52-bit physical address limit in both Intel64 and AMD64. - w = int(w * 0.3010299956639812 + 1) # log10(2) - pow10 = compute_powers(w, 5, DIGLIM) - for k, v in pow10.items(): - pow10[k] = v << k # 5**k << k == 5**k * 2**k == 10**k - if n < 0: - n = -n - sign = '-' - else: - sign = '' - s = inner(n, w) - if s[0] == '0' and n: - # If our guess of w is too large, there may be leading 0's that - # need to be stripped. - s = s.lstrip('0') - return sign + s - -def _str_to_int_inner(s): - """Asymptotically fast conversion of a 'str' to an 'int'.""" - - # Function due to Bjorn Martinsson. See GH issue #90716 for details. - # https://github.com/python/cpython/issues/90716 - # - # The implementation in longobject.c of base conversion algorithms - # between power-of-2 and non-power-of-2 bases are quadratic time. - # This function implements a divide-and-conquer algorithm making use - # of Python's built in big int multiplication. Since Python uses the - # Karatsuba algorithm for multiplication, the time complexity - # of this function is O(len(s)**1.58). - - DIGLIM = 2048 - - def inner(a, b): - if b - a <= DIGLIM: - return int(s[a:b]) - mid = (a + b + 1) >> 1 - return (inner(mid, b) - + ((inner(a, mid) * w5pow[b - mid]) - << (b - mid))) - - w5pow = compute_powers(len(s), 5, DIGLIM) - return inner(0, len(s)) - - -# Asymptotically faster version, using the C decimal module. See -# comments at the end of the file. This uses decimal arithmetic to -# convert from base 10 to base 256. The latter is just a string of -# bytes, which CPython can convert very efficiently to a Python int. - -# log of 10 to base 256 with best-possible 53-bit precision. Obtained -# via: -# from mpmath import mp -# mp.prec = 1000 -# print(float(mp.log(10, 256)).hex()) -_LOG_10_BASE_256 = float.fromhex('0x1.a934f0979a371p-2') # about 0.415 - -# _spread is for internal testing. It maps a key to the number of times -# that condition obtained in _dec_str_to_int_inner: -# key 0 - quotient guess was right -# key 1 - quotient had to be boosted by 1, one time -# key 999 - one adjustment wasn't enough, so fell back to divmod -from collections import defaultdict -_spread = defaultdict(int) -del defaultdict - -def _dec_str_to_int_inner(s, *, GUARD=8): - # Yes, BYTELIM is "large". Large enough that CPython will usually - # use the Karatsuba _str_to_int_inner to convert the string. This - # allowed reducing the cutoff for calling _this_ function from 3.5M - # to 2M digits. We could almost certainly do even better by - # fine-tuning this and/or using a larger output base than 256. - BYTELIM = 100_000 - D = decimal.Decimal - result = bytearray() - # See notes at end of file for discussion of GUARD. - assert GUARD > 0 # if 0, `decimal` can blow up - .prec 0 not allowed - - def inner(n, w): - #assert n < D256 ** w # required, but too expensive to check - if w <= BYTELIM: - # XXX Stefan Pochmann discovered that, for 1024-bit ints, - # `int(Decimal)` took 2.5x longer than `int(str(Decimal))`. - # Worse, `int(Decimal) is still quadratic-time for much - # larger ints. So unless/until all that is repaired, the - # seemingly redundant `str(Decimal)` is crucial to speed. - result.extend(int(str(n)).to_bytes(w)) # big-endian default - return - w1 = w >> 1 - w2 = w - w1 - if 0: - # This is maximally clear, but "too slow". `decimal` - # division is asymptotically fast, but we have no way to - # tell it to reuse the high-precision reciprocal it computes - # for pow256[w2], so it has to recompute it over & over & - # over again :-( - hi, lo = divmod(n, pow256[w2][0]) - else: - p256, recip = pow256[w2] - # The integer part will have a number of digits about equal - # to the difference between the log10s of `n` and `pow256` - # (which, since these are integers, is roughly approximated - # by `.adjusted()`). That's the working precision we need, - ctx.prec = max(n.adjusted() - p256.adjusted(), 0) + GUARD - hi = +n * +recip # unary `+` chops back to ctx.prec digits - ctx.prec = decimal.MAX_PREC - hi = hi.to_integral_value() # lose the fractional digits - lo = n - hi * p256 - # Because we've been uniformly rounding down, `hi` is a - # lower bound on the correct quotient. - assert lo >= 0 - # Adjust quotient up if needed. It usually isn't. In random - # testing on inputs through 5 billion digit strings, the - # test triggered once in about 200 thousand tries. - count = 0 - if lo >= p256: - count = 1 - lo -= p256 - hi += 1 - if lo >= p256: - # Complete correction via an exact computation. I - # believe it's not possible to get here provided - # GUARD >= 3. It's tested by reducing GUARD below - # that. - count = 999 - hi2, lo = divmod(lo, p256) - hi += hi2 - _spread[count] += 1 - # The assert should always succeed, but way too slow to keep - # enabled. - #assert hi, lo == divmod(n, pow256[w2][0]) - inner(hi, w1) - del hi # at top levels, can free a lot of RAM "early" - inner(lo, w2) - - # How many base 256 digits are needed?. Mathematically, exactly - # floor(log256(int(s))) + 1. There is no cheap way to compute this. - # But we can get an upper bound, and that's necessary for our error - # analysis to make sense. int(s) < 10**len(s), so the log needed is - # < log256(10**len(s)) = len(s) * log256(10). However, using - # finite-precision floating point for this, it's possible that the - # computed value is a little less than the true value. If the true - # value is at - or a little higher than - an integer, we can get an - # off-by-1 error too low. So we add 2 instead of 1 if chopping lost - # a fraction > 0.9. - - # The "WASI" test platform can complain about `len(s)` if it's too - # large to fit in its idea of "an index-sized integer". - lenS = s.__len__() - log_ub = lenS * _LOG_10_BASE_256 - log_ub_as_int = int(log_ub) - w = log_ub_as_int + 1 + (log_ub - log_ub_as_int > 0.9) - # And what if we've plain exhausted the limits of HW floats? We - # could compute the log to any desired precision using `decimal`, - # but it's not plausible that anyone will pass a string requiring - # trillions of bytes (unless they're just trying to "break things"). - if w.bit_length() >= 46: - # "Only" had < 53 - 46 = 7 bits to spare in IEEE-754 double. - raise ValueError(f"cannot convert string of len {lenS} to int") - with decimal.localcontext(_unbounded_dec_context) as ctx: - D256 = D(256) - pow256 = compute_powers(w, D256, BYTELIM, need_hi=True) - rpow256 = compute_powers(w, 1 / D256, BYTELIM, need_hi=True) - # We're going to do inexact, chopped arithmetic, multiplying by - # an approximation to the reciprocal of 256**i. We chop to get a - # lower bound on the true integer quotient. Our approximation is - # a lower bound, the multiplication is chopped too, and - # to_integral_value() is also chopped. - ctx.traps[decimal.Inexact] = 0 - ctx.rounding = decimal.ROUND_DOWN - for k, v in pow256.items(): - # No need to save much more precision in the reciprocal than - # the power of 256 has, plus some guard digits to absorb - # most relevant rounding errors. This is highly significant: - # 1/2**i has the same number of significant decimal digits - # as 5**i, generally over twice the number in 2**i, - ctx.prec = v.adjusted() + GUARD + 1 - # The unary "+" chops the reciprocal back to that precision. - pow256[k] = v, +rpow256[k] - del rpow256 # exact reciprocals no longer needed - ctx.prec = decimal.MAX_PREC - inner(D(s), w) - return int.from_bytes(result) - -def int_from_string(s): - """Asymptotically fast version of PyLong_FromString(), conversion - of a string of decimal digits into an 'int'.""" - # PyLong_FromString() has already removed leading +/-, checked for invalid - # use of underscore characters, checked that string consists of only digits - # and underscores, and stripped leading whitespace. The input can still - # contain underscores and have trailing whitespace. - s = s.rstrip().replace('_', '') - func = _str_to_int_inner - if len(s) >= 2_000_000 and _decimal is not None: - func = _dec_str_to_int_inner - return func(s) - -def str_to_int(s): - """Asymptotically fast version of decimal string to 'int' conversion.""" - # FIXME: this doesn't support the full syntax that int() supports. - m = re.match(r'\s*([+-]?)([0-9_]+)\s*', s) - if not m: - raise ValueError('invalid literal for int() with base 10') - v = int_from_string(m.group(2)) - if m.group(1) == '-': - v = -v - return v - - -# Fast integer division, based on code from Mark Dickinson, fast_div.py -# GH-47701. Additional refinements and optimizations by Bjorn Martinsson. The -# algorithm is due to Burnikel and Ziegler, in their paper "Fast Recursive -# Division". - -_DIV_LIMIT = 4000 - - -def _div2n1n(a, b, n): - """Divide a 2n-bit nonnegative integer a by an n-bit positive integer - b, using a recursive divide-and-conquer algorithm. - - Inputs: - n is a positive integer - b is a positive integer with exactly n bits - a is a nonnegative integer such that a < 2**n * b - - Output: - (q, r) such that a = b*q+r and 0 <= r < b. - - """ - if a.bit_length() - n <= _DIV_LIMIT: - return divmod(a, b) - pad = n & 1 - if pad: - a <<= 1 - b <<= 1 - n += 1 - half_n = n >> 1 - mask = (1 << half_n) - 1 - b1, b2 = b >> half_n, b & mask - q1, r = _div3n2n(a >> n, (a >> half_n) & mask, b, b1, b2, half_n) - q2, r = _div3n2n(r, a & mask, b, b1, b2, half_n) - if pad: - r >>= 1 - return q1 << half_n | q2, r - - -def _div3n2n(a12, a3, b, b1, b2, n): - """Helper function for _div2n1n; not intended to be called directly.""" - if a12 >> n == b1: - q, r = (1 << n) - 1, a12 - (b1 << n) + b1 - else: - q, r = _div2n1n(a12, b1, n) - r = (r << n | a3) - q * b2 - while r < 0: - q -= 1 - r += b - return q, r - - -def _int2digits(a, n): - """Decompose non-negative int a into base 2**n - - Input: - a is a non-negative integer - - Output: - List of the digits of a in base 2**n in little-endian order, - meaning the most significant digit is last. The most - significant digit is guaranteed to be non-zero. - If a is 0 then the output is an empty list. - - """ - a_digits = [0] * ((a.bit_length() + n - 1) // n) - - def inner(x, L, R): - if L + 1 == R: - a_digits[L] = x - return - mid = (L + R) >> 1 - shift = (mid - L) * n - upper = x >> shift - lower = x ^ (upper << shift) - inner(lower, L, mid) - inner(upper, mid, R) - - if a: - inner(a, 0, len(a_digits)) - return a_digits - - -def _digits2int(digits, n): - """Combine base-2**n digits into an int. This function is the - inverse of `_int2digits`. For more details, see _int2digits. - """ - - def inner(L, R): - if L + 1 == R: - return digits[L] - mid = (L + R) >> 1 - shift = (mid - L) * n - return (inner(mid, R) << shift) + inner(L, mid) - - return inner(0, len(digits)) if digits else 0 - - -def _divmod_pos(a, b): - """Divide a non-negative integer a by a positive integer b, giving - quotient and remainder.""" - # Use grade-school algorithm in base 2**n, n = nbits(b) - n = b.bit_length() - a_digits = _int2digits(a, n) - - r = 0 - q_digits = [] - for a_digit in reversed(a_digits): - q_digit, r = _div2n1n((r << n) + a_digit, b, n) - q_digits.append(q_digit) - q_digits.reverse() - q = _digits2int(q_digits, n) - return q, r - - -def int_divmod(a, b): - """Asymptotically fast replacement for divmod, for 'int'. - Its time complexity is O(n**1.58), where n = #bits(a) + #bits(b). - """ - if b == 0: - raise ZeroDivisionError('division by zero') - elif b < 0: - q, r = int_divmod(-a, -b) - return q, -r - elif a < 0: - q, r = int_divmod(~a, b) - return ~q, b + ~r - else: - return _divmod_pos(a, b) - - -# Notes on _dec_str_to_int_inner: -# -# Stefan Pochmann worked up a str->int function that used the decimal -# module to, in effect, convert from base 10 to base 256. This is -# "unnatural", in that it requires multiplying and dividing by large -# powers of 2, which `decimal` isn't naturally suited to. But -# `decimal`'s `*` and `/` are asymptotically superior to CPython's, so -# at _some_ point it could be expected to win. -# -# Alas, the crossover point was too high to be of much real interest. I -# (Tim) then worked on ways to replace its division with multiplication -# by a cached reciprocal approximation instead, fixing up errors -# afterwards. This reduced the crossover point significantly, -# -# I revisited the code, and found ways to improve and simplify it. The -# crossover point is at about 3.4 million digits now. -# -# About .adjusted() -# ----------------- -# Restrict to Decimal values x > 0. We don't use negative numbers in the -# code, and I don't want to have to keep typing, e.g., "absolute value". -# -# For convenience, I'll use `x.a` to mean `x.adjusted()`. x.a doesn't -# look at the digits of x, but instead returns an integer giving x's -# order of magnitude. These are equivalent: -# -# - x.a is the power-of-10 exponent of x's most significant digit. -# - x.a = the infinitely precise floor(log10(x)) -# - x can be written in this form, where f is a real with 1 <= f < 10: -# x = f * 10**x.a -# -# Observation; if x is an integer, len(str(x)) = x.a + 1. -# -# Lemma 1: (x * y).a = x.a + y.a, or one larger -# -# Proof: Write x = f * 10**x.a and y = g * 10**y.a, where f and g are in -# [1, 10). Then x*y = f*g * 10**(x.a + y.a), where 1 <= f*g < 100. If -# f*g < 10, (x*y).a is x.a+y.a. Else divide f*g by 10 to bring it back -# into [1, 10], and add 1 to the exponent to compensate. Then (x*y).a is -# x.a+y.a+1. -# -# Lemma 2: ceiling(log10(x/y)) <= x.a - y.a + 1 -# -# Proof: Express x and y as in Lemma 1. Then x/y = f/g * 10**(x.a - -# y.a), where 1/10 < f/g < 10. If 1 <= f/g, (x/y).a is x.a-y.a. Else -# multiply f/g by 10 to bring it back into [1, 10], and subtract 1 from -# the exponent to compensate. Then (x/y).a is x.a-y.a-1. So the largest -# (x/y).a can be is x.a-y.a. Since that's the floor of log10(x/y). the -# ceiling is at most 1 larger (with equality iff f/g = 1 exactly). -# -# GUARD digits -# ------------ -# We only want the integer part of divisions, so don't need to build -# the full multiplication tree. But using _just_ the number of -# digits expected in the integer part ignores too much. What's left -# out can have a very significant effect on the quotient. So we use -# GUARD additional digits. -# -# The default 8 is more than enough so no more than 1 correction step -# was ever needed for all inputs tried through 2.5 billion digits. In -# fact, I believe 3 guard digits are always enough - but the proof is -# very involved, so better safe than sorry. -# -# Short course: -# -# If prec is the decimal precision in effect, and we're rounding down, -# the result of an operation is exactly equal to the infinitely precise -# result times 1-e for some real e with 0 <= e < 10**(1-prec). In -# -# ctx.prec = max(n.adjusted() - p256.adjusted(), 0) + GUARD -# hi = +n * +recip # unary `+` chops to ctx.prec digits -# -# we have 3 visible chopped operations, but there's also a 4th: -# precomputing a truncated `recip` as part of setup. -# -# So the computed product is exactly equal to the true product times -# (1-e1)*(1-e2)*(1-e3)*(1-e4); since the e's are all very small, an -# excellent approximation to the second factor is 1-(e1+e2+e3+e4) (the -# 2nd and higher order terms in the expanded product are too tiny to -# matter). If they're all as large as possible, that's -# -# 1 - 4*10**(1-prec). This, BTW, is all bog-standard FP error analysis. -# -# That implies the computed product is within 1 of the true product -# provided prec >= log10(true_product) + 1.602. -# -# Here are telegraphic details, rephrasing the initial condition in -# equivalent ways, step by step: -# -# prod - prod * (1 - 4*10**(1-prec)) <= 1 -# prod - prod + prod * 4*10**(1-prec)) <= 1 -# prod * 4*10**(1-prec)) <= 1 -# 10**(log10(prod)) * 4*10**(1-prec)) <= 1 -# 4*10**(1-prec+log10(prod))) <= 1 -# 10**(1-prec+log10(prod))) <= 1/4 -# 1-prec+log10(prod) <= log10(1/4) = -0.602 -# -prec <= -1.602 - log10(prod) -# prec >= log10(prod) + 1.602 -# -# The true product is the same as the true ratio n/p256. By Lemma 2 -# above, n.a - p256.a + 1 is an upper bound on the ceiling of -# log10(prod). Then 2 is the ceiling of 1.602. so n.a - p256.a + 3 is an -# upper bound on the right hand side of the inequality. Any prec >= that -# will work. -# -# But since this is just a sketch of a proof ;-), the code uses the -# empirically tested 8 instead of 3. 5 digits more or less makes no -# practical difference to speed - these ints are huge. And while -# increasing GUARD above 3 may not be necessary, every increase cuts the -# percentage of cases that need a correction at all. -# -# On Computing Reciprocals -# ------------------------ -# In general, the exact reciprocals we compute have over twice as many -# significant digits as needed. 1/256**i has the same number of -# significant decimal digits as 5**i. It's a significant waste of RAM -# to store all those unneeded digits. -# -# So we cut exact reciprocals back to the least precision that can -# be needed so that the error analysis above is valid, -# -# [Note: turns out it's very significantly faster to do it this way than -# to compute 1 / 256**i directly to the desired precision, because the -# power method doesn't require division. It's also faster than computing -# (1/256)**i directly to the desired precision - no material division -# there, but `compute_powers()` is much smarter about _how_ to compute -# all the powers needed than repeated applications of `**` - that -# function invokes `**` for at most the few smallest powers needed.] -# -# The hard part is that chopping back to a shorter width occurs -# _outside_ of `inner`. We can't know then what `prec` `inner()` will -# need. We have to pick, for each value of `w2`, the largest possible -# value `prec` can become when `inner()` is working on `w2`. -# -# This is the `prec` inner() uses: -# max(n.a - p256.a, 0) + GUARD -# and what setup uses (renaming its `v` to `p256` - same thing): -# p256.a + GUARD + 1 -# -# We need that the second is always at least as large as the first, -# which is the same as requiring -# -# n.a - 2 * p256.a <= 1 -# -# What's the largest n can be? n < 255**w = 256**(w2 + (w - w2)). The -# worst case in this context is when w ix even. and then w = 2*w2, so -# n < 256**(2*w2) = (256**w2)**2 = p256**2. By Lemma 1, then, n.a -# is at most p256.a + p256.a + 1. -# -# So the most n.a - 2 * p256.a can be is -# p256.a + p256.a + 1 - 2 * p256.a = 1. QED -# -# Note: an earlier version of the code split on floor(e/2) instead of on -# the ceiling. The worst case then is odd `w`, and a more involved proof -# was needed to show that adding 4 (instead of 1) may be necessary. -# Basically because, in that case, n may be up to 256 times larger than -# p256**2. Curiously enough, by splitting on the ceiling instead, -# nothing in any proof here actually depends on the output base (256). - -# Enable for brute-force testing of compute_powers(). This takes about a -# minute, because it tries millions of cases. -if 0: - def consumer(w, limit, need_hi): - seen = set() - need = set() - def inner(w): - if w <= limit: - return - if w in seen: - return - seen.add(w) - lo = w >> 1 - hi = w - lo - need.add(hi if need_hi else lo) - inner(lo) - inner(hi) - inner(w) - exp = compute_powers(w, 1, limit, need_hi=need_hi) - assert exp.keys() == need - - from itertools import chain - for need_hi in (False, True): - for limit in (0, 1, 10, 100, 1_000, 10_000, 100_000): - for w in chain(range(1, 100_000), - (10**i for i in range(5, 30))): - consumer(w, limit, need_hi) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/__init__.py b/Python314_4_x86_Template/Lib/_pyrepl/__init__.py deleted file mode 100644 index 1693cbd0b..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com> -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/_pyrepl/__main__.py b/Python314_4_x86_Template/Lib/_pyrepl/__main__.py deleted file mode 100644 index 9c66812e1..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/__main__.py +++ /dev/null @@ -1,10 +0,0 @@ -# Important: don't add things to this module, as they will end up in the REPL's -# default globals. Use _pyrepl.main instead. - -# Avoid caching this file by linecache and incorrectly report tracebacks. -# See https://github.com/python/cpython/issues/129098. -__spec__ = __loader__ = None - -if __name__ == "__main__": - from .main import interactive_console as __pyrepl_interactive_console - __pyrepl_interactive_console() diff --git a/Python314_4_x86_Template/Lib/_pyrepl/_module_completer.py b/Python314_4_x86_Template/Lib/_pyrepl/_module_completer.py deleted file mode 100644 index 2098d0a54..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/_module_completer.py +++ /dev/null @@ -1,426 +0,0 @@ -from __future__ import annotations - -import importlib -import os -import pkgutil -import sys -import token -import tokenize -from importlib.machinery import FileFinder -from io import StringIO -from contextlib import contextmanager -from dataclasses import dataclass -from itertools import chain -from tokenize import TokenInfo - -TYPE_CHECKING = False - -if TYPE_CHECKING: - from typing import Any, Iterable, Iterator, Mapping - - -HARDCODED_SUBMODULES = { - # Standard library submodules that are not detected by pkgutil.iter_modules - # but can be imported, so should be proposed in completion - "collections": ["abc"], - "os": ["path"], - "xml.parsers.expat": ["errors", "model"], -} - - -def make_default_module_completer() -> ModuleCompleter: - # Inside pyrepl, __package__ is set to None by default - return ModuleCompleter(namespace={'__package__': None}) - - -class ModuleCompleter: - """A completer for Python import statements. - - Examples: - - import <tab> - - import foo<tab> - - import foo.<tab> - - import foo as bar, baz<tab> - - - from <tab> - - from foo<tab> - - from foo import <tab> - - from foo import bar<tab> - - from foo import (bar as baz, qux<tab> - """ - - def __init__(self, namespace: Mapping[str, Any] | None = None) -> None: - self.namespace = namespace or {} - self._global_cache: list[pkgutil.ModuleInfo] = [] - self._curr_sys_path: list[str] = sys.path[:] - self._stdlib_path = os.path.dirname(importlib.__path__[0]) - - def get_completions(self, line: str) -> list[str] | None: - """Return the next possible import completions for 'line'.""" - result = ImportParser(line).parse() - if not result: - return None - try: - return self.complete(*result) - except Exception: - # Some unexpected error occurred, make it look like - # no completions are available - return [] - - def complete(self, from_name: str | None, name: str | None) -> list[str]: - if from_name is None: - # import x.y.z<tab> - assert name is not None - path, prefix = self.get_path_and_prefix(name) - modules = self.find_modules(path, prefix) - return [self.format_completion(path, module) for module in modules] - - if name is None: - # from x.y.z<tab> - path, prefix = self.get_path_and_prefix(from_name) - modules = self.find_modules(path, prefix) - return [self.format_completion(path, module) for module in modules] - - # from x.y import z<tab> - return self.find_modules(from_name, name) - - def find_modules(self, path: str, prefix: str) -> list[str]: - """Find all modules under 'path' that start with 'prefix'.""" - modules = self._find_modules(path, prefix) - # Filter out invalid module names - # (for example those containing dashes that cannot be imported with 'import') - return [mod for mod in modules if mod.isidentifier()] - - def _find_modules(self, path: str, prefix: str) -> list[str]: - if not path: - # Top-level import (e.g. `import foo<tab>`` or `from foo<tab>`)` - builtin_modules = [name for name in sys.builtin_module_names - if self.is_suggestion_match(name, prefix)] - third_party_modules = [module.name for module in self.global_cache - if self.is_suggestion_match(module.name, prefix)] - return sorted(builtin_modules + third_party_modules) - - if path.startswith('.'): - # Convert relative path to absolute path - package = self.namespace.get('__package__', '') - path = self.resolve_relative_name(path, package) # type: ignore[assignment] - if path is None: - return [] - - modules: Iterable[pkgutil.ModuleInfo] = self.global_cache - imported_module = sys.modules.get(path.split('.')[0]) - if imported_module: - # Filter modules to those who name and specs match the - # imported module to avoid invalid suggestions - spec = imported_module.__spec__ - if spec: - modules = [mod for mod in modules - if mod.name == spec.name - and mod.module_finder.find_spec(mod.name, None) == spec] - else: - modules = [] - - is_stdlib_import: bool | None = None - for segment in path.split('.'): - modules = [mod_info for mod_info in modules - if mod_info.ispkg and mod_info.name == segment] - if is_stdlib_import is None: - # Top-level import decide if we import from stdlib or not - is_stdlib_import = all( - self._is_stdlib_module(mod_info) for mod_info in modules - ) - modules = self.iter_submodules(modules) - - module_names = [module.name for module in modules] - if is_stdlib_import: - module_names.extend(HARDCODED_SUBMODULES.get(path, ())) - return [module_name for module_name in module_names - if self.is_suggestion_match(module_name, prefix)] - - def _is_stdlib_module(self, module_info: pkgutil.ModuleInfo) -> bool: - return (isinstance(module_info.module_finder, FileFinder) - and module_info.module_finder.path == self._stdlib_path) - - def is_suggestion_match(self, module_name: str, prefix: str) -> bool: - if prefix: - return module_name.startswith(prefix) - # For consistency with attribute completion, which - # does not suggest private attributes unless requested. - return not module_name.startswith("_") - - def iter_submodules(self, parent_modules: list[pkgutil.ModuleInfo]) -> Iterator[pkgutil.ModuleInfo]: - """Iterate over all submodules of the given parent modules.""" - specs = [info.module_finder.find_spec(info.name, None) - for info in parent_modules if info.ispkg] - search_locations = set(chain.from_iterable( - getattr(spec, 'submodule_search_locations', []) - for spec in specs if spec - )) - return pkgutil.iter_modules(search_locations) - - def get_path_and_prefix(self, dotted_name: str) -> tuple[str, str]: - """ - Split a dotted name into an import path and a - final prefix that is to be completed. - - Examples: - 'foo.bar' -> 'foo', 'bar' - 'foo.' -> 'foo', '' - '.foo' -> '.', 'foo' - """ - if '.' not in dotted_name: - return '', dotted_name - if dotted_name.startswith('.'): - stripped = dotted_name.lstrip('.') - dots = '.' * (len(dotted_name) - len(stripped)) - if '.' not in stripped: - return dots, stripped - path, prefix = stripped.rsplit('.', 1) - return dots + path, prefix - path, prefix = dotted_name.rsplit('.', 1) - return path, prefix - - def format_completion(self, path: str, module: str) -> str: - if path == '' or path.endswith('.'): - return f'{path}{module}' - return f'{path}.{module}' - - def resolve_relative_name(self, name: str, package: str) -> str | None: - """Resolve a relative module name to an absolute name. - - Example: resolve_relative_name('.foo', 'bar') -> 'bar.foo' - """ - # taken from importlib._bootstrap - level = 0 - for character in name: - if character != '.': - break - level += 1 - bits = package.rsplit('.', level - 1) - if len(bits) < level: - return None - base = bits[0] - name = name[level:] - return f'{base}.{name}' if name else base - - @property - def global_cache(self) -> list[pkgutil.ModuleInfo]: - """Global module cache""" - if not self._global_cache or self._curr_sys_path != sys.path: - self._curr_sys_path = sys.path[:] - self._global_cache = list(pkgutil.iter_modules()) - return self._global_cache - - -class ImportParser: - """ - Parses incomplete import statements that are - suitable for autocomplete suggestions. - - Examples: - - import foo -> Result(from_name=None, name='foo') - - import foo. -> Result(from_name=None, name='foo.') - - from foo -> Result(from_name='foo', name=None) - - from foo import bar -> Result(from_name='foo', name='bar') - - from .foo import ( -> Result(from_name='.foo', name='') - - Note that the parser works in reverse order, starting from the - last token in the input string. This makes the parser more robust - when parsing multiple statements. - """ - _ignored_tokens = { - token.INDENT, token.DEDENT, token.COMMENT, - token.NL, token.NEWLINE, token.ENDMARKER - } - _keywords = {'import', 'from', 'as'} - - def __init__(self, code: str) -> None: - self.code = code - tokens = [] - try: - for t in tokenize.generate_tokens(StringIO(code).readline): - if t.type not in self._ignored_tokens: - tokens.append(t) - except tokenize.TokenError as e: - if 'unexpected EOF' not in str(e): - # unexpected EOF is fine, since we're parsing an - # incomplete statement, but other errors are not - # because we may not have all the tokens so it's - # safer to bail out - tokens = [] - except SyntaxError: - tokens = [] - self.tokens = TokenQueue(tokens[::-1]) - - def parse(self) -> tuple[str | None, str | None] | None: - if not (res := self._parse()): - return None - return res.from_name, res.name - - def _parse(self) -> Result | None: - with self.tokens.save_state(): - return self.parse_from_import() - with self.tokens.save_state(): - return self.parse_import() - - def parse_import(self) -> Result: - if self.code.rstrip().endswith('import') and self.code.endswith(' '): - return Result(name='') - if self.tokens.peek_string(','): - name = '' - else: - if self.code.endswith(' '): - raise ParseError('parse_import') - name = self.parse_dotted_name() - if name.startswith('.'): - raise ParseError('parse_import') - while self.tokens.peek_string(','): - self.tokens.pop() - self.parse_dotted_as_name() - if self.tokens.peek_string('import'): - return Result(name=name) - raise ParseError('parse_import') - - def parse_from_import(self) -> Result: - stripped = self.code.rstrip() - if stripped.endswith('import') and self.code.endswith(' '): - return Result(from_name=self.parse_empty_from_import(), name='') - if stripped.endswith('from') and self.code.endswith(' '): - return Result(from_name='') - if self.tokens.peek_string('(') or self.tokens.peek_string(','): - return Result(from_name=self.parse_empty_from_import(), name='') - if self.code.endswith(' '): - raise ParseError('parse_from_import') - name = self.parse_dotted_name() - if '.' in name: - self.tokens.pop_string('from') - return Result(from_name=name) - if self.tokens.peek_string('from'): - return Result(from_name=name) - from_name = self.parse_empty_from_import() - return Result(from_name=from_name, name=name) - - def parse_empty_from_import(self) -> str: - if self.tokens.peek_string(','): - self.tokens.pop() - self.parse_as_names() - if self.tokens.peek_string('('): - self.tokens.pop() - self.tokens.pop_string('import') - return self.parse_from() - - def parse_from(self) -> str: - from_name = self.parse_dotted_name() - self.tokens.pop_string('from') - return from_name - - def parse_dotted_as_name(self) -> str: - self.tokens.pop_name() - if self.tokens.peek_string('as'): - self.tokens.pop() - with self.tokens.save_state(): - return self.parse_dotted_name() - - def parse_dotted_name(self) -> str: - name = [] - if self.tokens.peek_string('.'): - name.append('.') - self.tokens.pop() - if (self.tokens.peek_name() - and (tok := self.tokens.peek()) - and tok.string not in self._keywords): - name.append(self.tokens.pop_name()) - if not name: - raise ParseError('parse_dotted_name') - while self.tokens.peek_string('.'): - name.append('.') - self.tokens.pop() - if (self.tokens.peek_name() - and (tok := self.tokens.peek()) - and tok.string not in self._keywords): - name.append(self.tokens.pop_name()) - else: - break - - while self.tokens.peek_string('.'): - name.append('.') - self.tokens.pop() - return ''.join(name[::-1]) - - def parse_as_names(self) -> None: - self.parse_as_name() - while self.tokens.peek_string(','): - self.tokens.pop() - self.parse_as_name() - - def parse_as_name(self) -> None: - self.tokens.pop_name() - if self.tokens.peek_string('as'): - self.tokens.pop() - self.tokens.pop_name() - - -class ParseError(Exception): - pass - - -@dataclass(frozen=True) -class Result: - from_name: str | None = None - name: str | None = None - - -class TokenQueue: - """Provides helper functions for working with a sequence of tokens.""" - - def __init__(self, tokens: list[TokenInfo]) -> None: - self.tokens: list[TokenInfo] = tokens - self.index: int = 0 - self.stack: list[int] = [] - - @contextmanager - def save_state(self) -> Any: - try: - self.stack.append(self.index) - yield - except ParseError: - self.index = self.stack.pop() - else: - self.stack.pop() - - def __bool__(self) -> bool: - return self.index < len(self.tokens) - - def peek(self) -> TokenInfo | None: - if not self: - return None - return self.tokens[self.index] - - def peek_name(self) -> bool: - if not (tok := self.peek()): - return False - return tok.type == token.NAME - - def pop_name(self) -> str: - tok = self.pop() - if tok.type != token.NAME: - raise ParseError('pop_name') - return tok.string - - def peek_string(self, string: str) -> bool: - if not (tok := self.peek()): - return False - return tok.string == string - - def pop_string(self, string: str) -> str: - tok = self.pop() - if tok.string != string: - raise ParseError('pop_string') - return tok.string - - def pop(self) -> TokenInfo: - if not self: - raise ParseError('pop') - tok = self.tokens[self.index] - self.index += 1 - return tok diff --git a/Python314_4_x86_Template/Lib/_pyrepl/_threading_handler.py b/Python314_4_x86_Template/Lib/_pyrepl/_threading_handler.py deleted file mode 100644 index 82f5e8650..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/_threading_handler.py +++ /dev/null @@ -1,74 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass, field -import traceback - - -TYPE_CHECKING = False -if TYPE_CHECKING: - from threading import Thread - from types import TracebackType - from typing import Protocol - - class ExceptHookArgs(Protocol): - @property - def exc_type(self) -> type[BaseException]: ... - @property - def exc_value(self) -> BaseException | None: ... - @property - def exc_traceback(self) -> TracebackType | None: ... - @property - def thread(self) -> Thread | None: ... - - class ShowExceptions(Protocol): - def __call__(self) -> int: ... - def add(self, s: str) -> None: ... - - from .reader import Reader - - -def install_threading_hook(reader: Reader) -> None: - import threading - - @dataclass - class ExceptHookHandler: - lock: threading.Lock = field(default_factory=threading.Lock) - messages: list[str] = field(default_factory=list) - - def show(self) -> int: - count = 0 - with self.lock: - if not self.messages: - return 0 - reader.restore() - for tb in self.messages: - count += 1 - if tb: - print(tb) - self.messages.clear() - reader.scheduled_commands.append("ctrl-c") - reader.prepare() - return count - - def add(self, s: str) -> None: - with self.lock: - self.messages.append(s) - - def exception(self, args: ExceptHookArgs) -> None: - lines = traceback.format_exception( - args.exc_type, - args.exc_value, - args.exc_traceback, - colorize=reader.can_colorize, - ) # type: ignore[call-overload] - pre = f"\nException in {args.thread.name}:\n" if args.thread else "\n" - tb = pre + "".join(lines) - self.add(tb) - - def __call__(self) -> int: - return self.show() - - - handler = ExceptHookHandler() - reader.threading_hook = handler - threading.excepthook = handler.exception diff --git a/Python314_4_x86_Template/Lib/_pyrepl/base_eventqueue.py b/Python314_4_x86_Template/Lib/_pyrepl/base_eventqueue.py deleted file mode 100644 index 0589a0f43..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/base_eventqueue.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com> -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -OS-independent base for an event and VT sequence scanner - -See unix_eventqueue and windows_eventqueue for subclasses. -""" - -from collections import deque - -from . import keymap -from .console import Event -from .trace import trace - -class BaseEventQueue: - def __init__(self, encoding: str, keymap_dict: dict[bytes, str]) -> None: - self.compiled_keymap = keymap.compile_keymap(keymap_dict) - self.keymap = self.compiled_keymap - trace("keymap {k!r}", k=self.keymap) - self.encoding = encoding - self.events: deque[Event] = deque() - self.buf = bytearray() - - def get(self) -> Event | None: - """ - Retrieves the next event from the queue. - """ - if self.events: - return self.events.popleft() - else: - return None - - def empty(self) -> bool: - """ - Checks if the queue is empty. - """ - return not self.events - - def flush_buf(self) -> bytearray: - """ - Flushes the buffer and returns its contents. - """ - old = self.buf - self.buf = bytearray() - return old - - def insert(self, event: Event) -> None: - """ - Inserts an event into the queue. - """ - trace('added event {event}', event=event) - self.events.append(event) - - def push(self, char: int | bytes) -> None: - """ - Processes a character by updating the buffer and handling special key mappings. - """ - assert isinstance(char, (int, bytes)) - ord_char = char if isinstance(char, int) else ord(char) - char = ord_char.to_bytes() - self.buf.append(ord_char) - - if char in self.keymap: - if self.keymap is self.compiled_keymap: - # sanity check, buffer is empty when a special key comes - assert len(self.buf) == 1 - k = self.keymap[char] - trace('found map {k!r}', k=k) - if isinstance(k, dict): - self.keymap = k - else: - self.insert(Event('key', k, bytes(self.flush_buf()))) - self.keymap = self.compiled_keymap - - elif self.buf and self.buf[0] == 27: # escape - # escape sequence not recognized by our keymap: propagate it - # outside so that i can be recognized as an M-... key (see also - # the docstring in keymap.py - trace('unrecognized escape sequence, propagating...') - self.keymap = self.compiled_keymap - self.insert(Event('key', '\033', b'\033')) - for _c in self.flush_buf()[1:]: - self.push(_c) - - else: - try: - decoded = bytes(self.buf).decode(self.encoding) - except UnicodeError: - return - else: - self.insert(Event('key', decoded, bytes(self.flush_buf()))) - self.keymap = self.compiled_keymap diff --git a/Python314_4_x86_Template/Lib/_pyrepl/commands.py b/Python314_4_x86_Template/Lib/_pyrepl/commands.py deleted file mode 100644 index 10127e588..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/commands.py +++ /dev/null @@ -1,505 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Antonio Cuni -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations -import os -import time - -# Categories of actions: -# killing -# yanking -# motion -# editing -# history -# finishing -# [completion] - -from .trace import trace - -# types -if False: - from .historical_reader import HistoricalReader - - -class Command: - finish: bool = False - kills_digit_arg: bool = True - - def __init__( - self, reader: HistoricalReader, event_name: str, event: list[str] - ) -> None: - # Reader should really be "any reader" but there's too much usage of - # HistoricalReader methods and fields in the code below for us to - # refactor at the moment. - - self.reader = reader - self.event = event - self.event_name = event_name - - def do(self) -> None: - pass - - -class KillCommand(Command): - def kill_range(self, start: int, end: int) -> None: - if start == end: - return - r = self.reader - b = r.buffer - text = b[start:end] - del b[start:end] - if is_kill(r.last_command): - if start < r.pos: - r.kill_ring[-1] = text + r.kill_ring[-1] - else: - r.kill_ring[-1] = r.kill_ring[-1] + text - else: - r.kill_ring.append(text) - r.pos = start - r.dirty = True - - -class YankCommand(Command): - pass - - -class MotionCommand(Command): - pass - - -class EditCommand(Command): - pass - - -class FinishCommand(Command): - finish = True - pass - - -def is_kill(command: type[Command] | None) -> bool: - return command is not None and issubclass(command, KillCommand) - - -def is_yank(command: type[Command] | None) -> bool: - return command is not None and issubclass(command, YankCommand) - - -# etc - - -class digit_arg(Command): - kills_digit_arg = False - - def do(self) -> None: - r = self.reader - c = self.event[-1] - if c == "-": - if r.arg is not None: - r.arg = -r.arg - else: - r.arg = -1 - else: - d = int(c) - if r.arg is None: - r.arg = d - else: - if r.arg < 0: - r.arg = 10 * r.arg - d - else: - r.arg = 10 * r.arg + d - r.dirty = True - - -class clear_screen(Command): - def do(self) -> None: - r = self.reader - r.console.clear() - r.dirty = True - - -class refresh(Command): - def do(self) -> None: - self.reader.dirty = True - - -class repaint(Command): - def do(self) -> None: - self.reader.dirty = True - self.reader.console.repaint() - - -class kill_line(KillCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - eol = r.eol() - for c in b[r.pos : eol]: - if not c.isspace(): - self.kill_range(r.pos, eol) - return - else: - self.kill_range(r.pos, eol + 1) - - -class unix_line_discard(KillCommand): - def do(self) -> None: - r = self.reader - self.kill_range(r.bol(), r.pos) - - -class unix_word_rubout(KillCommand): - def do(self) -> None: - r = self.reader - for i in range(r.get_arg()): - self.kill_range(r.bow(), r.pos) - - -class kill_word(KillCommand): - def do(self) -> None: - r = self.reader - for i in range(r.get_arg()): - self.kill_range(r.pos, r.eow()) - - -class backward_kill_word(KillCommand): - def do(self) -> None: - r = self.reader - for i in range(r.get_arg()): - self.kill_range(r.bow(), r.pos) - - -class yank(YankCommand): - def do(self) -> None: - r = self.reader - if not r.kill_ring: - r.error("nothing to yank") - return - r.insert(r.kill_ring[-1]) - - -class yank_pop(YankCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - if not r.kill_ring: - r.error("nothing to yank") - return - if not is_yank(r.last_command): - r.error("previous command was not a yank") - return - repl = len(r.kill_ring[-1]) - r.kill_ring.insert(0, r.kill_ring.pop()) - t = r.kill_ring[-1] - b[r.pos - repl : r.pos] = t - r.pos = r.pos - repl + len(t) - r.dirty = True - - -class interrupt(FinishCommand): - def do(self) -> None: - import signal - - self.reader.console.finish() - self.reader.finish() - os.kill(os.getpid(), signal.SIGINT) - - -class ctrl_c(Command): - def do(self) -> None: - self.reader.console.finish() - self.reader.finish() - raise KeyboardInterrupt - - -class suspend(Command): - def do(self) -> None: - import signal - - r = self.reader - p = r.pos - r.console.finish() - os.kill(os.getpid(), signal.SIGSTOP) - ## this should probably be done - ## in a handler for SIGCONT? - r.console.prepare() - r.pos = p - # r.posxy = 0, 0 # XXX this is invalid - r.dirty = True - r.console.screen = [] - - -class up(MotionCommand): - def do(self) -> None: - r = self.reader - for _ in range(r.get_arg()): - x, y = r.pos2xy() - new_y = y - 1 - - if r.bol() == 0: - if r.historyi > 0: - r.select_item(r.historyi - 1) - return - r.pos = 0 - r.error("start of buffer") - return - - if ( - x - > ( - new_x := r.max_column(new_y) - ) # we're past the end of the previous line - or x == r.max_column(y) - and any( - not i.isspace() for i in r.buffer[r.bol() :] - ) # move between eols - ): - x = new_x - - r.setpos_from_xy(x, new_y) - - -class down(MotionCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - for _ in range(r.get_arg()): - x, y = r.pos2xy() - new_y = y + 1 - - if r.eol() == len(b): - if r.historyi < len(r.history): - r.select_item(r.historyi + 1) - r.pos = r.eol(0) - return - r.pos = len(b) - r.error("end of buffer") - return - - if ( - x - > ( - new_x := r.max_column(new_y) - ) # we're past the end of the previous line - or x == r.max_column(y) - and any( - not i.isspace() for i in r.buffer[r.bol() :] - ) # move between eols - ): - x = new_x - - r.setpos_from_xy(x, new_y) - - -class left(MotionCommand): - def do(self) -> None: - r = self.reader - for _ in range(r.get_arg()): - p = r.pos - 1 - if p >= 0: - r.pos = p - else: - self.reader.error("start of buffer") - - -class right(MotionCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - for _ in range(r.get_arg()): - p = r.pos + 1 - if p <= len(b): - r.pos = p - else: - self.reader.error("end of buffer") - - -class beginning_of_line(MotionCommand): - def do(self) -> None: - self.reader.pos = self.reader.bol() - - -class end_of_line(MotionCommand): - def do(self) -> None: - self.reader.pos = self.reader.eol() - - -class home(MotionCommand): - def do(self) -> None: - self.reader.pos = 0 - - -class end(MotionCommand): - def do(self) -> None: - self.reader.pos = len(self.reader.buffer) - - -class forward_word(MotionCommand): - def do(self) -> None: - r = self.reader - for i in range(r.get_arg()): - r.pos = r.eow() - - -class backward_word(MotionCommand): - def do(self) -> None: - r = self.reader - for i in range(r.get_arg()): - r.pos = r.bow() - - -class self_insert(EditCommand): - def do(self) -> None: - r = self.reader - text = self.event * r.get_arg() - r.insert(text) - if r.paste_mode: - data = "" - ev = r.console.getpending() - data += ev.data - if data: - r.insert(data) - r.last_refresh_cache.invalidated = True - - -class insert_nl(EditCommand): - def do(self) -> None: - r = self.reader - r.insert("\n" * r.get_arg()) - - -class transpose_characters(EditCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - s = r.pos - 1 - if s < 0: - r.error("cannot transpose at start of buffer") - else: - if s == len(b): - s -= 1 - t = min(s + r.get_arg(), len(b) - 1) - c = b[s] - del b[s] - b.insert(t, c) - r.pos = t - r.dirty = True - - -class backspace(EditCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - for i in range(r.get_arg()): - if r.pos > 0: - r.pos -= 1 - del b[r.pos] - r.dirty = True - else: - self.reader.error("can't backspace at start") - - -class delete(EditCommand): - def do(self) -> None: - r = self.reader - b = r.buffer - if self.event[-1] == "\004": - if b and b[-1].endswith("\n"): - self.finish = True - elif ( - r.pos == 0 - and len(b) == 0 # this is something of a hack - ): - r.update_screen() - r.console.finish() - raise EOFError - - for i in range(r.get_arg()): - if r.pos != len(b): - del b[r.pos] - r.dirty = True - else: - self.reader.error("end of buffer") - - -class accept(FinishCommand): - def do(self) -> None: - pass - - -class help(Command): - def do(self) -> None: - import _sitebuiltins - - with self.reader.suspend(): - self.reader.msg = _sitebuiltins._Helper()() # type: ignore[assignment] - - -class invalid_key(Command): - def do(self) -> None: - pending = self.reader.console.getpending() - s = "".join(self.event) + pending.data - self.reader.error("`%r' not bound" % s) - - -class invalid_command(Command): - def do(self) -> None: - s = self.event_name - self.reader.error("command `%s' not known" % s) - - -class show_history(Command): - def do(self) -> None: - from .pager import get_pager - from site import gethistoryfile - - history = os.linesep.join(self.reader.history[:]) - self.reader.console.restore() - pager = get_pager() - pager(history, gethistoryfile()) - self.reader.console.prepare() - - # We need to copy over the state so that it's consistent between - # console and reader, and console does not overwrite/append stuff - self.reader.console.screen = self.reader.screen.copy() - self.reader.console.posxy = self.reader.cxy - - -class paste_mode(Command): - def do(self) -> None: - self.reader.paste_mode = not self.reader.paste_mode - self.reader.dirty = True - - -class perform_bracketed_paste(Command): - def do(self) -> None: - done = "\x1b[201~" - data = "" - start = time.time() - while done not in data: - ev = self.reader.console.getpending() - data += ev.data - trace( - "bracketed pasting of {l} chars done in {s:.2f}s", - l=len(data), - s=time.time() - start, - ) - self.reader.insert(data.replace(done, "")) - self.reader.last_refresh_cache.invalidated = True diff --git a/Python314_4_x86_Template/Lib/_pyrepl/completing_reader.py b/Python314_4_x86_Template/Lib/_pyrepl/completing_reader.py deleted file mode 100644 index 9d2d43be5..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/completing_reader.py +++ /dev/null @@ -1,299 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Antonio Cuni -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -from dataclasses import dataclass, field - -import re -from . import commands, console, reader -from .reader import Reader - - -# types -Command = commands.Command -if False: - from .types import KeySpec, CommandName - - -def prefix(wordlist: list[str], j: int = 0) -> str: - d = {} - i = j - try: - while 1: - for word in wordlist: - d[word[i]] = 1 - if len(d) > 1: - return wordlist[0][j:i] - i += 1 - d = {} - except IndexError: - return wordlist[0][j:i] - return "" - - -STRIPCOLOR_REGEX = re.compile(r"\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[m|K]") - -def stripcolor(s: str) -> str: - return STRIPCOLOR_REGEX.sub('', s) - - -def real_len(s: str) -> int: - return len(stripcolor(s)) - - -def left_align(s: str, maxlen: int) -> str: - stripped = stripcolor(s) - if len(stripped) > maxlen: - # too bad, we remove the color - return stripped[:maxlen] - padding = maxlen - len(stripped) - return s + ' '*padding - - -def build_menu( - cons: console.Console, - wordlist: list[str], - start: int, - use_brackets: bool, - sort_in_column: bool, -) -> tuple[list[str], int]: - if use_brackets: - item = "[ %s ]" - padding = 4 - else: - item = "%s " - padding = 2 - maxlen = min(max(map(real_len, wordlist)), cons.width - padding) - cols = int(cons.width / (maxlen + padding)) - rows = int((len(wordlist) - 1)/cols + 1) - - if sort_in_column: - # sort_in_column=False (default) sort_in_column=True - # A B C A D G - # D E F B E - # G C F - # - # "fill" the table with empty words, so we always have the same amount - # of rows for each column - missing = cols*rows - len(wordlist) - wordlist = wordlist + ['']*missing - indexes = [(i % cols) * rows + i // cols for i in range(len(wordlist))] - wordlist = [wordlist[i] for i in indexes] - menu = [] - i = start - for r in range(rows): - row = [] - for col in range(cols): - row.append(item % left_align(wordlist[i], maxlen)) - i += 1 - if i >= len(wordlist): - break - menu.append(''.join(row)) - if i >= len(wordlist): - i = 0 - break - if r + 5 > cons.height: - menu.append(" %d more... " % (len(wordlist) - i)) - break - return menu, i - -# this gets somewhat user interface-y, and as a result the logic gets -# very convoluted. -# -# To summarise the summary of the summary:- people are a problem. -# -- The Hitch-Hikers Guide to the Galaxy, Episode 12 - -#### Desired behaviour of the completions commands. -# the considerations are: -# (1) how many completions are possible -# (2) whether the last command was a completion -# (3) if we can assume that the completer is going to return the same set of -# completions: this is controlled by the ``assume_immutable_completions`` -# variable on the reader, which is True by default to match the historical -# behaviour of pyrepl, but e.g. False in the ReadlineAlikeReader to match -# more closely readline's semantics (this is needed e.g. by -# fancycompleter) -# -# if there's no possible completion, beep at the user and point this out. -# this is easy. -# -# if there's only one possible completion, stick it in. if the last thing -# user did was a completion, point out that he isn't getting anywhere, but -# only if the ``assume_immutable_completions`` is True. -# -# now it gets complicated. -# -# for the first press of a completion key: -# if there's a common prefix, stick it in. - -# irrespective of whether anything got stuck in, if the word is now -# complete, show the "complete but not unique" message - -# if there's no common prefix and if the word is not now complete, -# beep. - -# common prefix -> yes no -# word complete \/ -# yes "cbnu" "cbnu" -# no - beep - -# for the second bang on the completion key -# there will necessarily be no common prefix -# show a menu of the choices. - -# for subsequent bangs, rotate the menu around (if there are sufficient -# choices). - - -class complete(commands.Command): - def do(self) -> None: - r: CompletingReader - r = self.reader # type: ignore[assignment] - last_is_completer = r.last_command_is(self.__class__) - immutable_completions = r.assume_immutable_completions - completions_unchangable = last_is_completer and immutable_completions - stem = r.get_stem() - if not completions_unchangable: - r.cmpltn_menu_choices = r.get_completions(stem) - - completions = r.cmpltn_menu_choices - if not completions: - r.error("no matches") - elif len(completions) == 1: - if completions_unchangable and len(completions[0]) == len(stem): - r.msg = "[ sole completion ]" - r.dirty = True - r.insert(completions[0][len(stem):]) - else: - p = prefix(completions, len(stem)) - if p: - r.insert(p) - if last_is_completer: - r.cmpltn_menu_visible = True - r.cmpltn_message_visible = False - r.cmpltn_menu, r.cmpltn_menu_end = build_menu( - r.console, completions, r.cmpltn_menu_end, - r.use_brackets, r.sort_in_column) - r.dirty = True - elif not r.cmpltn_menu_visible: - r.cmpltn_message_visible = True - if stem + p in completions: - r.msg = "[ complete but not unique ]" - r.dirty = True - else: - r.msg = "[ not unique ]" - r.dirty = True - - -class self_insert(commands.self_insert): - def do(self) -> None: - r: CompletingReader - r = self.reader # type: ignore[assignment] - - commands.self_insert.do(self) - if r.cmpltn_menu_visible: - stem = r.get_stem() - if len(stem) < 1: - r.cmpltn_reset() - else: - completions = [w for w in r.cmpltn_menu_choices - if w.startswith(stem)] - if completions: - r.cmpltn_menu, r.cmpltn_menu_end = build_menu( - r.console, completions, 0, - r.use_brackets, r.sort_in_column) - else: - r.cmpltn_reset() - - -@dataclass -class CompletingReader(Reader): - """Adds completion support""" - - ### Class variables - # see the comment for the complete command - assume_immutable_completions = True - use_brackets = True # display completions inside [] - sort_in_column = False - - ### Instance variables - cmpltn_menu: list[str] = field(init=False) - cmpltn_menu_visible: bool = field(init=False) - cmpltn_message_visible: bool = field(init=False) - cmpltn_menu_end: int = field(init=False) - cmpltn_menu_choices: list[str] = field(init=False) - - def __post_init__(self) -> None: - super().__post_init__() - self.cmpltn_reset() - for c in (complete, self_insert): - self.commands[c.__name__] = c - self.commands[c.__name__.replace('_', '-')] = c - - def collect_keymap(self) -> tuple[tuple[KeySpec, CommandName], ...]: - return super().collect_keymap() + ( - (r'\t', 'complete'),) - - def after_command(self, cmd: Command) -> None: - super().after_command(cmd) - if not isinstance(cmd, (complete, self_insert)): - self.cmpltn_reset() - - def calc_screen(self) -> list[str]: - screen = super().calc_screen() - if self.cmpltn_menu_visible: - # We display the completions menu below the current prompt - ly = self.lxy[1] + 1 - screen[ly:ly] = self.cmpltn_menu - # If we're not in the middle of multiline edit, don't append to screeninfo - # since that screws up the position calculation in pos2xy function. - # This is a hack to prevent the cursor jumping - # into the completions menu when pressing left or down arrow. - if self.pos != len(self.buffer): - self.screeninfo[ly:ly] = [(0, [])]*len(self.cmpltn_menu) - return screen - - def finish(self) -> None: - super().finish() - self.cmpltn_reset() - - def cmpltn_reset(self) -> None: - self.cmpltn_menu = [] - self.cmpltn_menu_visible = False - self.cmpltn_message_visible = False - self.cmpltn_menu_end = 0 - self.cmpltn_menu_choices = [] - - def get_stem(self) -> str: - st = self.syntax_table - SW = reader.SYNTAX_WORD - b = self.buffer - p = self.pos - 1 - while p >= 0 and st.get(b[p], SW) == SW: - p -= 1 - return ''.join(b[p+1:self.pos]) - - def get_completions(self, stem: str) -> list[str]: - return [] - - def get_line(self) -> str: - """Return the current line until the cursor position.""" - return ''.join(self.buffer[:self.pos]) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/console.py b/Python314_4_x86_Template/Lib/_pyrepl/console.py deleted file mode 100644 index 8956fb124..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/console.py +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2000-2004 Michael Hudson-Doyle <micahel@gmail.com> -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -import _colorize - -from abc import ABC, abstractmethod -import ast -import code -import linecache -from dataclasses import dataclass, field -import os.path -import sys - - -TYPE_CHECKING = False - -if TYPE_CHECKING: - from typing import IO - from typing import Callable - - -@dataclass -class Event: - evt: str - data: str - raw: bytes = b"" - - -@dataclass -class Console(ABC): - posxy: tuple[int, int] - screen: list[str] = field(default_factory=list) - height: int = 25 - width: int = 80 - - def __init__( - self, - f_in: IO[bytes] | int = 0, - f_out: IO[bytes] | int = 1, - term: str = "", - encoding: str = "", - ): - self.encoding = encoding or sys.getdefaultencoding() - - if isinstance(f_in, int): - self.input_fd = f_in - else: - self.input_fd = f_in.fileno() - - if isinstance(f_out, int): - self.output_fd = f_out - else: - self.output_fd = f_out.fileno() - - @abstractmethod - def refresh(self, screen: list[str], xy: tuple[int, int]) -> None: ... - - @abstractmethod - def prepare(self) -> None: ... - - @abstractmethod - def restore(self) -> None: ... - - @abstractmethod - def move_cursor(self, x: int, y: int) -> None: ... - - @abstractmethod - def set_cursor_vis(self, visible: bool) -> None: ... - - @abstractmethod - def getheightwidth(self) -> tuple[int, int]: - """Return (height, width) where height and width are the height - and width of the terminal window in characters.""" - ... - - @abstractmethod - def get_event(self, block: bool = True) -> Event | None: - """Return an Event instance. Returns None if |block| is false - and there is no event pending, otherwise waits for the - completion of an event.""" - ... - - @abstractmethod - def push_char(self, char: int | bytes) -> None: - """ - Push a character to the console event queue. - """ - ... - - @abstractmethod - def beep(self) -> None: ... - - @abstractmethod - def clear(self) -> None: - """Wipe the screen""" - ... - - @abstractmethod - def finish(self) -> None: - """Move the cursor to the end of the display and otherwise get - ready for end. XXX could be merged with restore? Hmm.""" - ... - - @abstractmethod - def flushoutput(self) -> None: - """Flush all output to the screen (assuming there's some - buffering going on somewhere).""" - ... - - @abstractmethod - def forgetinput(self) -> None: - """Forget all pending, but not yet processed input.""" - ... - - @abstractmethod - def getpending(self) -> Event: - """Return the characters that have been typed but not yet - processed.""" - ... - - @abstractmethod - def wait(self, timeout: float | None) -> bool: - """Wait for an event. The return value is True if an event is - available, False if the timeout has been reached. If timeout is - None, wait forever. The timeout is in milliseconds.""" - ... - - @property - def input_hook(self) -> Callable[[], int] | None: - """Returns the current input hook.""" - ... - - @abstractmethod - def repaint(self) -> None: ... - - -class InteractiveColoredConsole(code.InteractiveConsole): - STATEMENT_FAILED = object() - - def __init__( - self, - locals: dict[str, object] | None = None, - filename: str = "<console>", - *, - local_exit: bool = False, - ) -> None: - super().__init__(locals=locals, filename=filename, local_exit=local_exit) - self.can_colorize = _colorize.can_colorize() - - def showsyntaxerror(self, filename=None, **kwargs): - super().showsyntaxerror(filename=filename, **kwargs) - - def _excepthook(self, typ, value, tb): - import traceback - lines = traceback.format_exception( - typ, value, tb, - colorize=self.can_colorize, - limit=traceback.BUILTIN_EXCEPTION_LIMIT) - self.write(''.join(lines)) - - def runcode(self, code): - try: - exec(code, self.locals) - except SystemExit: - raise - except BaseException: - self.showtraceback() - return self.STATEMENT_FAILED - return None - - def runsource(self, source, filename="<input>", symbol="single"): - try: - tree = self.compile.compiler( - source, - filename, - "exec", - ast.PyCF_ONLY_AST, - incomplete_input=False, - ) - except (SyntaxError, OverflowError, ValueError): - self.showsyntaxerror(filename, source=source) - return False - if tree.body: - *_, last_stmt = tree.body - for stmt in tree.body: - wrapper = ast.Interactive if stmt is last_stmt else ast.Module - the_symbol = symbol if stmt is last_stmt else "exec" - item = wrapper([stmt]) - try: - code = self.compile.compiler(item, filename, the_symbol) - linecache._register_code(code, source, filename) - except SyntaxError as e: - if e.args[0] == "'await' outside function": - python = os.path.basename(sys.executable) - e.add_note( - f"Try the asyncio REPL ({python} -m asyncio) to use" - f" top-level 'await' and run background asyncio tasks." - ) - self.showsyntaxerror(filename, source=source) - return False - except (OverflowError, ValueError): - self.showsyntaxerror(filename, source=source) - return False - - if code is None: - return True - - result = self.runcode(code) - if result is self.STATEMENT_FAILED: - break - return False diff --git a/Python314_4_x86_Template/Lib/_pyrepl/fancy_termios.py b/Python314_4_x86_Template/Lib/_pyrepl/fancy_termios.py deleted file mode 100644 index 8d5bd183f..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/fancy_termios.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright 2000-2004 Michael Hudson-Doyle <micahel@gmail.com> -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -import termios - - -TYPE_CHECKING = False - -if TYPE_CHECKING: - from typing import cast -else: - cast = lambda typ, val: val - - -class TermState: - def __init__(self, attrs: list[int | list[bytes]]) -> None: - self.iflag = cast(int, attrs[0]) - self.oflag = cast(int, attrs[1]) - self.cflag = cast(int, attrs[2]) - self.lflag = cast(int, attrs[3]) - self.ispeed = cast(int, attrs[4]) - self.ospeed = cast(int, attrs[5]) - self.cc = cast(list[bytes], attrs[6]) - - def as_list(self) -> list[int | list[bytes]]: - return [ - self.iflag, - self.oflag, - self.cflag, - self.lflag, - self.ispeed, - self.ospeed, - # Always return a copy of the control characters list to ensure - # there are not any additional references to self.cc - self.cc[:], - ] - - def copy(self) -> "TermState": - return self.__class__(self.as_list()) - - -def tcgetattr(fd: int) -> TermState: - return TermState(termios.tcgetattr(fd)) - - -def tcsetattr(fd: int, when: int, attrs: TermState) -> None: - termios.tcsetattr(fd, when, attrs.as_list()) - - -class Term(TermState): - TS__init__ = TermState.__init__ - - def __init__(self, fd: int = 0) -> None: - self.TS__init__(termios.tcgetattr(fd)) - self.fd = fd - self.stack: list[list[int | list[bytes]]] = [] - - def save(self) -> None: - self.stack.append(self.as_list()) - - def set(self, when: int = termios.TCSANOW) -> None: - termios.tcsetattr(self.fd, when, self.as_list()) - - def restore(self) -> None: - self.TS__init__(self.stack.pop()) - self.set() diff --git a/Python314_4_x86_Template/Lib/_pyrepl/historical_reader.py b/Python314_4_x86_Template/Lib/_pyrepl/historical_reader.py deleted file mode 100644 index c4b95fa2e..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/historical_reader.py +++ /dev/null @@ -1,419 +0,0 @@ -# Copyright 2000-2004 Michael Hudson-Doyle <micahel@gmail.com> -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -from contextlib import contextmanager -from dataclasses import dataclass, field - -from . import commands, input -from .reader import Reader - - -if False: - from .types import SimpleContextManager, KeySpec, CommandName - - -isearch_keymap: tuple[tuple[KeySpec, CommandName], ...] = tuple( - [("\\%03o" % c, "isearch-end") for c in range(256) if chr(c) != "\\"] - + [(c, "isearch-add-character") for c in map(chr, range(32, 127)) if c != "\\"] - + [ - ("\\%03o" % c, "isearch-add-character") - for c in range(256) - if chr(c).isalpha() and chr(c) != "\\" - ] - + [ - ("\\\\", "self-insert"), - (r"\C-r", "isearch-backwards"), - (r"\C-s", "isearch-forwards"), - (r"\C-c", "isearch-cancel"), - (r"\C-g", "isearch-cancel"), - (r"\<backspace>", "isearch-backspace"), - ] -) - -ISEARCH_DIRECTION_NONE = "" -ISEARCH_DIRECTION_BACKWARDS = "r" -ISEARCH_DIRECTION_FORWARDS = "f" - - -class next_history(commands.Command): - def do(self) -> None: - r = self.reader - if r.historyi == len(r.history): - r.error("end of history list") - return - r.select_item(r.historyi + 1) - - -class previous_history(commands.Command): - def do(self) -> None: - r = self.reader - if r.historyi == 0: - r.error("start of history list") - return - r.select_item(r.historyi - 1) - - -class history_search_backward(commands.Command): - def do(self) -> None: - r = self.reader - r.search_next(forwards=False) - - -class history_search_forward(commands.Command): - def do(self) -> None: - r = self.reader - r.search_next(forwards=True) - - -class restore_history(commands.Command): - def do(self) -> None: - r = self.reader - if r.historyi != len(r.history): - if r.get_unicode() != r.history[r.historyi]: - r.buffer = list(r.history[r.historyi]) - r.pos = len(r.buffer) - r.dirty = True - - -class first_history(commands.Command): - def do(self) -> None: - self.reader.select_item(0) - - -class last_history(commands.Command): - def do(self) -> None: - self.reader.select_item(len(self.reader.history)) - - -class operate_and_get_next(commands.FinishCommand): - def do(self) -> None: - self.reader.next_history = self.reader.historyi + 1 - - -class yank_arg(commands.Command): - def do(self) -> None: - r = self.reader - if r.last_command is self.__class__: - r.yank_arg_i += 1 - else: - r.yank_arg_i = 0 - if r.historyi < r.yank_arg_i: - r.error("beginning of history list") - return - a = r.get_arg(-1) - # XXX how to split? - words = r.get_item(r.historyi - r.yank_arg_i - 1).split() - if a < -len(words) or a >= len(words): - r.error("no such arg") - return - w = words[a] - b = r.buffer - if r.yank_arg_i > 0: - o = len(r.yank_arg_yanked) - else: - o = 0 - b[r.pos - o : r.pos] = list(w) - r.yank_arg_yanked = w - r.pos += len(w) - o - r.dirty = True - - -class forward_history_isearch(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_FORWARDS - r.isearch_start = r.historyi, r.pos - r.isearch_term = "" - r.dirty = True - r.push_input_trans(r.isearch_trans) - - -class reverse_history_isearch(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_BACKWARDS - r.dirty = True - r.isearch_term = "" - r.push_input_trans(r.isearch_trans) - r.isearch_start = r.historyi, r.pos - - -class isearch_cancel(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_NONE - r.pop_input_trans() - r.select_item(r.isearch_start[0]) - r.pos = r.isearch_start[1] - r.dirty = True - - -class isearch_add_character(commands.Command): - def do(self) -> None: - r = self.reader - b = r.buffer - r.isearch_term += self.event[-1] - r.dirty = True - p = r.pos + len(r.isearch_term) - 1 - if b[p : p + 1] != [r.isearch_term[-1]]: - r.isearch_next() - - -class isearch_backspace(commands.Command): - def do(self) -> None: - r = self.reader - if len(r.isearch_term) > 0: - r.isearch_term = r.isearch_term[:-1] - r.dirty = True - else: - r.error("nothing to rubout") - - -class isearch_forwards(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_FORWARDS - r.isearch_next() - - -class isearch_backwards(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_BACKWARDS - r.isearch_next() - - -class isearch_end(commands.Command): - def do(self) -> None: - r = self.reader - r.isearch_direction = ISEARCH_DIRECTION_NONE - r.console.forgetinput() - r.pop_input_trans() - r.dirty = True - - -@dataclass -class HistoricalReader(Reader): - """Adds history support (with incremental history searching) to the - Reader class. - """ - - history: list[str] = field(default_factory=list) - historyi: int = 0 - next_history: int | None = None - transient_history: dict[int, str] = field(default_factory=dict) - isearch_term: str = "" - isearch_direction: str = ISEARCH_DIRECTION_NONE - isearch_start: tuple[int, int] = field(init=False) - isearch_trans: input.KeymapTranslator = field(init=False) - yank_arg_i: int = 0 - yank_arg_yanked: str = "" - - def __post_init__(self) -> None: - super().__post_init__() - for c in [ - next_history, - previous_history, - restore_history, - first_history, - last_history, - yank_arg, - forward_history_isearch, - reverse_history_isearch, - isearch_end, - isearch_add_character, - isearch_cancel, - isearch_add_character, - isearch_backspace, - isearch_forwards, - isearch_backwards, - operate_and_get_next, - history_search_backward, - history_search_forward, - ]: - self.commands[c.__name__] = c - self.commands[c.__name__.replace("_", "-")] = c - self.isearch_start = self.historyi, self.pos - self.isearch_trans = input.KeymapTranslator( - isearch_keymap, invalid_cls=isearch_end, character_cls=isearch_add_character - ) - - def collect_keymap(self) -> tuple[tuple[KeySpec, CommandName], ...]: - return super().collect_keymap() + ( - (r"\C-n", "next-history"), - (r"\C-p", "previous-history"), - (r"\C-o", "operate-and-get-next"), - (r"\C-r", "reverse-history-isearch"), - (r"\C-s", "forward-history-isearch"), - (r"\M-r", "restore-history"), - (r"\M-.", "yank-arg"), - (r"\<page down>", "history-search-forward"), - (r"\x1b[6~", "history-search-forward"), - (r"\<page up>", "history-search-backward"), - (r"\x1b[5~", "history-search-backward"), - ) - - def select_item(self, i: int) -> None: - self.transient_history[self.historyi] = self.get_unicode() - buf = self.transient_history.get(i) - if buf is None: - buf = self.history[i].rstrip() - self.buffer = list(buf) - self.historyi = i - self.pos = len(self.buffer) - self.dirty = True - self.last_refresh_cache.invalidated = True - - def get_item(self, i: int) -> str: - if i != len(self.history): - return self.transient_history.get(i, self.history[i]) - else: - return self.transient_history.get(i, self.get_unicode()) - - @contextmanager - def suspend(self) -> SimpleContextManager: - with super().suspend(), self.suspend_history(): - yield - - @contextmanager - def suspend_history(self) -> SimpleContextManager: - try: - old_history = self.history[:] - del self.history[:] - yield - finally: - self.history[:] = old_history - - def prepare(self) -> None: - super().prepare() - try: - self.transient_history = {} - if self.next_history is not None and self.next_history < len(self.history): - self.historyi = self.next_history - self.buffer[:] = list(self.history[self.next_history]) - self.pos = len(self.buffer) - self.transient_history[len(self.history)] = "" - else: - self.historyi = len(self.history) - self.next_history = None - except: - self.restore() - raise - - def get_prompt(self, lineno: int, cursor_on_line: bool) -> str: - if cursor_on_line and self.isearch_direction != ISEARCH_DIRECTION_NONE: - d = "rf"[self.isearch_direction == ISEARCH_DIRECTION_FORWARDS] - return "(%s-search `%s') " % (d, self.isearch_term) - else: - return super().get_prompt(lineno, cursor_on_line) - - def search_next(self, *, forwards: bool) -> None: - """Search history for the current line contents up to the cursor. - - Selects the first item found. If nothing is under the cursor, any next - item in history is selected. - """ - pos = self.pos - s = self.get_unicode() - history_index = self.historyi - - # In multiline contexts, we're only interested in the current line. - nl_index = s.rfind('\n', 0, pos) - prefix = s[nl_index + 1:pos] - pos = len(prefix) - - match_prefix = len(prefix) - len_item = 0 - if history_index < len(self.history): - len_item = len(self.get_item(history_index)) - if len_item and pos == len_item: - match_prefix = False - elif not pos: - match_prefix = False - - while 1: - if forwards: - out_of_bounds = history_index >= len(self.history) - 1 - else: - out_of_bounds = history_index == 0 - if out_of_bounds: - if forwards and not match_prefix: - self.pos = 0 - self.buffer = [] - self.dirty = True - else: - self.error("not found") - return - - history_index += 1 if forwards else -1 - s = self.get_item(history_index) - - if not match_prefix: - self.select_item(history_index) - return - - len_acc = 0 - for i, line in enumerate(s.splitlines(keepends=True)): - if line.startswith(prefix): - self.select_item(history_index) - self.pos = pos + len_acc - return - len_acc += len(line) - - def isearch_next(self) -> None: - st = self.isearch_term - p = self.pos - i = self.historyi - s = self.get_unicode() - forwards = self.isearch_direction == ISEARCH_DIRECTION_FORWARDS - while 1: - if forwards: - p = s.find(st, p + 1) - else: - p = s.rfind(st, 0, p + len(st) - 1) - if p != -1: - self.select_item(i) - self.pos = p - return - elif (forwards and i >= len(self.history) - 1) or (not forwards and i == 0): - self.error("not found") - return - else: - if forwards: - i += 1 - s = self.get_item(i) - p = -1 - else: - i -= 1 - s = self.get_item(i) - p = len(s) - - def finish(self) -> None: - super().finish() - ret = self.get_unicode() - for i, t in self.transient_history.items(): - if i < len(self.history) and i != self.historyi: - self.history[i] = t - if ret and should_auto_add_history: - self.history.append(ret) - - -should_auto_add_history = True diff --git a/Python314_4_x86_Template/Lib/_pyrepl/input.py b/Python314_4_x86_Template/Lib/_pyrepl/input.py deleted file mode 100644 index 21c24eb5c..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/input.py +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright 2000-2004 Michael Hudson-Doyle <micahel@gmail.com> -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# (naming modules after builtin functions is not such a hot idea...) - -# an KeyTrans instance translates Event objects into Command objects - -# hmm, at what level do we want [C-i] and [tab] to be equivalent? -# [meta-a] and [esc a]? obviously, these are going to be equivalent -# for the UnixConsole, but should they be for PygameConsole? - -# it would in any situation seem to be a bad idea to bind, say, [tab] -# and [C-i] to *different* things... but should binding one bind the -# other? - -# executive, temporary decision: [tab] and [C-i] are distinct, but -# [meta-key] is identified with [esc key]. We demand that any console -# class does quite a lot towards emulating a unix terminal. - -from __future__ import annotations - -from abc import ABC, abstractmethod -import unicodedata -from collections import deque - - -# types -if False: - from .types import EventTuple - - -class InputTranslator(ABC): - @abstractmethod - def push(self, evt: EventTuple) -> None: - pass - - @abstractmethod - def get(self) -> EventTuple | None: - return None - - @abstractmethod - def empty(self) -> bool: - return True - - -class KeymapTranslator(InputTranslator): - def __init__(self, keymap, verbose=False, invalid_cls=None, character_cls=None): - self.verbose = verbose - from .keymap import compile_keymap, parse_keys - - self.keymap = keymap - self.invalid_cls = invalid_cls - self.character_cls = character_cls - d = {} - for keyspec, command in keymap: - keyseq = tuple(parse_keys(keyspec)) - d[keyseq] = command - if self.verbose: - print(d) - self.k = self.ck = compile_keymap(d, ()) - self.results = deque() - self.stack = [] - - def push(self, evt): - if self.verbose: - print("pushed", evt.data, end="") - key = evt.data - d = self.k.get(key) - if isinstance(d, dict): - if self.verbose: - print("transition") - self.stack.append(key) - self.k = d - else: - if d is None: - if self.verbose: - print("invalid") - if self.stack or len(key) > 1 or unicodedata.category(key) == "C": - self.results.append((self.invalid_cls, self.stack + [key])) - else: - # small optimization: - self.k[key] = self.character_cls - self.results.append((self.character_cls, [key])) - else: - if self.verbose: - print("matched", d) - self.results.append((d, self.stack + [key])) - self.stack = [] - self.k = self.ck - - def get(self): - if self.results: - return self.results.popleft() - else: - return None - - def empty(self) -> bool: - return not self.results diff --git a/Python314_4_x86_Template/Lib/_pyrepl/keymap.py b/Python314_4_x86_Template/Lib/_pyrepl/keymap.py deleted file mode 100644 index d11df4b51..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/keymap.py +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com> -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -Keymap contains functions for parsing keyspecs and turning keyspecs into -appropriate sequences. - -A keyspec is a string representing a sequence of key presses that can -be bound to a command. All characters other than the backslash represent -themselves. In the traditional manner, a backslash introduces an escape -sequence. - -pyrepl uses its own keyspec format that is meant to be a strict superset of -readline's KEYSEQ format. This means that if a spec is found that readline -accepts that this doesn't, it should be logged as a bug. Note that this means -we're using the '\\C-o' style of readline's keyspec, not the 'Control-o' sort. - -The extension to readline is that the sequence \\<KEY> denotes the -sequence of characters produced by hitting KEY. - -Examples: -'a' - what you get when you hit the 'a' key -'\\EOA' - Escape - O - A (up, on my terminal) -'\\<UP>' - the up arrow key -'\\<up>' - ditto (keynames are case-insensitive) -'\\C-o', '\\c-o' - control-o -'\\M-.' - meta-period -'\\E.' - ditto (that's how meta works for pyrepl) -'\\<tab>', '\\<TAB>', '\\t', '\\011', '\\x09', '\\X09', '\\C-i', '\\C-I' - - all of these are the tab character. -""" - -_escapes = { - "\\": "\\", - "'": "'", - '"': '"', - "a": "\a", - "b": "\b", - "e": "\033", - "f": "\f", - "n": "\n", - "r": "\r", - "t": "\t", - "v": "\v", -} - -_keynames = { - "backspace": "backspace", - "delete": "delete", - "down": "down", - "end": "end", - "enter": "\r", - "escape": "\033", - "f1": "f1", - "f2": "f2", - "f3": "f3", - "f4": "f4", - "f5": "f5", - "f6": "f6", - "f7": "f7", - "f8": "f8", - "f9": "f9", - "f10": "f10", - "f11": "f11", - "f12": "f12", - "f13": "f13", - "f14": "f14", - "f15": "f15", - "f16": "f16", - "f17": "f17", - "f18": "f18", - "f19": "f19", - "f20": "f20", - "home": "home", - "insert": "insert", - "left": "left", - "page down": "page down", - "page up": "page up", - "return": "\r", - "right": "right", - "space": " ", - "tab": "\t", - "up": "up", -} - - -class KeySpecError(Exception): - pass - - -def parse_keys(keys: str) -> list[str]: - """Parse keys in keyspec format to a sequence of keys.""" - s = 0 - r: list[str] = [] - while s < len(keys): - k, s = _parse_single_key_sequence(keys, s) - r.extend(k) - return r - - -def _parse_single_key_sequence(key: str, s: int) -> tuple[list[str], int]: - ctrl = 0 - meta = 0 - ret = "" - while not ret and s < len(key): - if key[s] == "\\": - c = key[s + 1].lower() - if c in _escapes: - ret = _escapes[c] - s += 2 - elif c == "c": - if key[s + 2] != "-": - raise KeySpecError( - "\\C must be followed by `-' (char %d of %s)" - % (s + 2, repr(key)) - ) - if ctrl: - raise KeySpecError( - "doubled \\C- (char %d of %s)" % (s + 1, repr(key)) - ) - ctrl = 1 - s += 3 - elif c == "m": - if key[s + 2] != "-": - raise KeySpecError( - "\\M must be followed by `-' (char %d of %s)" - % (s + 2, repr(key)) - ) - if meta: - raise KeySpecError( - "doubled \\M- (char %d of %s)" % (s + 1, repr(key)) - ) - meta = 1 - s += 3 - elif c.isdigit(): - n = key[s + 1 : s + 4] - ret = chr(int(n, 8)) - s += 4 - elif c == "x": - n = key[s + 2 : s + 4] - ret = chr(int(n, 16)) - s += 4 - elif c == "<": - t = key.find(">", s) - if t == -1: - raise KeySpecError( - "unterminated \\< starting at char %d of %s" - % (s + 1, repr(key)) - ) - ret = key[s + 2 : t].lower() - if ret not in _keynames: - raise KeySpecError( - "unrecognised keyname `%s' at char %d of %s" - % (ret, s + 2, repr(key)) - ) - ret = _keynames[ret] - s = t + 1 - else: - raise KeySpecError( - "unknown backslash escape %s at char %d of %s" - % (repr(c), s + 2, repr(key)) - ) - else: - ret = key[s] - s += 1 - if ctrl: - if len(ret) == 1: - ret = chr(ord(ret) & 0x1F) # curses.ascii.ctrl() - elif ret in {"left", "right"}: - ret = f"ctrl {ret}" - else: - raise KeySpecError("\\C- followed by invalid key") - - result = [ret], s - if meta: - result[0].insert(0, "\033") - return result - - -def compile_keymap(keymap, empty=b""): - r = {} - for key, value in keymap.items(): - if isinstance(key, bytes): - first = key[:1] - else: - first = key[0] - r.setdefault(first, {})[key[1:]] = value - for key, value in r.items(): - if empty in value: - if len(value) != 1: - raise KeySpecError("key definitions for %s clash" % (value.values(),)) - else: - r[key] = value[empty] - else: - r[key] = compile_keymap(value, empty) - return r diff --git a/Python314_4_x86_Template/Lib/_pyrepl/main.py b/Python314_4_x86_Template/Lib/_pyrepl/main.py deleted file mode 100644 index 447eb1e55..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/main.py +++ /dev/null @@ -1,58 +0,0 @@ -import errno -import os -import sys -import types - - -CAN_USE_PYREPL: bool -FAIL_REASON: str -try: - if sys.platform == "win32" and sys.getwindowsversion().build < 10586: - raise RuntimeError("Windows 10 TH2 or later required") - if not os.isatty(sys.stdin.fileno()): - raise OSError(errno.ENOTTY, "tty required", "stdin") - from .simple_interact import check - if err := check(): - raise RuntimeError(err) -except Exception as e: - CAN_USE_PYREPL = False - FAIL_REASON = f"warning: can't use pyrepl: {e}" -else: - CAN_USE_PYREPL = True - FAIL_REASON = "" - - -def interactive_console(mainmodule=None, quiet=False, pythonstartup=False): - if not CAN_USE_PYREPL: - if not os.getenv('PYTHON_BASIC_REPL') and FAIL_REASON: - from .trace import trace - trace(FAIL_REASON) - print(FAIL_REASON, file=sys.stderr) - return sys._baserepl() - - if not mainmodule: - mainmodule = types.ModuleType("__main__") - - namespace = mainmodule.__dict__ - - # sys._baserepl() above does this internally, we do it here - startup_path = os.getenv("PYTHONSTARTUP") - if pythonstartup and startup_path: - sys.audit("cpython.run_startup", startup_path) - - import tokenize - with tokenize.open(startup_path) as f: - startup_code = compile(f.read(), startup_path, "exec") - exec(startup_code, namespace) - - # set sys.{ps1,ps2} just before invoking the interactive interpreter. This - # mimics what CPython does in pythonrun.c - if not hasattr(sys, "ps1"): - sys.ps1 = ">>> " - if not hasattr(sys, "ps2"): - sys.ps2 = "... " - - from .console import InteractiveColoredConsole - from .simple_interact import run_multiline_interactive_console - console = InteractiveColoredConsole(namespace, filename="<stdin>") - run_multiline_interactive_console(console) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/mypy.ini b/Python314_4_x86_Template/Lib/_pyrepl/mypy.ini deleted file mode 100644 index 9375a55b5..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/mypy.ini +++ /dev/null @@ -1,25 +0,0 @@ -# Config file for running mypy on _pyrepl. -# Run mypy by invoking `mypy --config-file Lib/_pyrepl/mypy.ini` -# on the command-line from the repo root - -[mypy] -files = Lib/_pyrepl -mypy_path = $MYPY_CONFIG_FILE_DIR/../../Misc/mypy -explicit_package_bases = True -python_version = 3.13 -platform = linux -pretty = True - -# Enable most stricter settings -enable_error_code = ignore-without-code,redundant-expr -strict = True - -# Various stricter settings that we can't yet enable -# Try to enable these in the following order: -disallow_untyped_calls = False -disallow_untyped_defs = False -check_untyped_defs = False - -# Various internal modules that typeshed deliberately doesn't have stubs for: -[mypy-_abc.*,_opcode.*,_overlapped.*,_testcapi.*,_testinternalcapi.*,test.*] -ignore_missing_imports = True diff --git a/Python314_4_x86_Template/Lib/_pyrepl/pager.py b/Python314_4_x86_Template/Lib/_pyrepl/pager.py deleted file mode 100644 index 1fddc63e3..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/pager.py +++ /dev/null @@ -1,175 +0,0 @@ -from __future__ import annotations - -import io -import os -import re -import sys - - -# types -if False: - from typing import Protocol - class Pager(Protocol): - def __call__(self, text: str, title: str = "") -> None: - ... - - -def get_pager() -> Pager: - """Decide what method to use for paging through text.""" - if not hasattr(sys.stdin, "isatty"): - return plain_pager - if not hasattr(sys.stdout, "isatty"): - return plain_pager - if not sys.stdin.isatty() or not sys.stdout.isatty(): - return plain_pager - if sys.platform == "emscripten": - return plain_pager - use_pager = os.environ.get('MANPAGER') or os.environ.get('PAGER') - if use_pager: - if sys.platform == 'win32': # pipes completely broken in Windows - return lambda text, title='': tempfile_pager(plain(text), use_pager) - elif os.environ.get('TERM') in ('dumb', 'emacs'): - return lambda text, title='': pipe_pager(plain(text), use_pager, title) - else: - return lambda text, title='': pipe_pager(text, use_pager, title) - if os.environ.get('TERM') in ('dumb', 'emacs'): - return plain_pager - if sys.platform == 'win32': - return lambda text, title='': tempfile_pager(plain(text), 'more <') - if hasattr(os, 'system') and os.system('(pager) 2>/dev/null') == 0: - return lambda text, title='': pipe_pager(text, 'pager', title) - if hasattr(os, 'system') and os.system('(less) 2>/dev/null') == 0: - return lambda text, title='': pipe_pager(text, 'less', title) - - import tempfile - (fd, filename) = tempfile.mkstemp() - os.close(fd) - try: - if hasattr(os, 'system') and os.system('more "%s"' % filename) == 0: - return lambda text, title='': pipe_pager(text, 'more', title) - else: - return tty_pager - finally: - os.unlink(filename) - - -def escape_stdout(text: str) -> str: - # Escape non-encodable characters to avoid encoding errors later - encoding = getattr(sys.stdout, 'encoding', None) or 'utf-8' - return text.encode(encoding, 'backslashreplace').decode(encoding) - - -def escape_less(s: str) -> str: - return re.sub(r'([?:.%\\])', r'\\\1', s) - - -def plain(text: str) -> str: - """Remove boldface formatting from text.""" - return re.sub('.\b', '', text) - - -def tty_pager(text: str, title: str = '') -> None: - """Page through text on a text terminal.""" - lines = plain(escape_stdout(text)).split('\n') - has_tty = False - try: - import tty - import termios - fd = sys.stdin.fileno() - old = termios.tcgetattr(fd) - tty.setcbreak(fd) - has_tty = True - - def getchar() -> str: - return sys.stdin.read(1) - - except (ImportError, AttributeError, io.UnsupportedOperation): - def getchar() -> str: - return sys.stdin.readline()[:-1][:1] - - try: - try: - h = int(os.environ.get('LINES', 0)) - except ValueError: - h = 0 - if h <= 1: - h = 25 - r = inc = h - 1 - sys.stdout.write('\n'.join(lines[:inc]) + '\n') - while lines[r:]: - sys.stdout.write('-- more --') - sys.stdout.flush() - c = getchar() - - if c in ('q', 'Q'): - sys.stdout.write('\r \r') - break - elif c in ('\r', '\n'): - sys.stdout.write('\r \r' + lines[r] + '\n') - r = r + 1 - continue - if c in ('b', 'B', '\x1b'): - r = r - inc - inc - if r < 0: r = 0 - sys.stdout.write('\n' + '\n'.join(lines[r:r+inc]) + '\n') - r = r + inc - - finally: - if has_tty: - termios.tcsetattr(fd, termios.TCSAFLUSH, old) - - -def plain_pager(text: str, title: str = '') -> None: - """Simply print unformatted text. This is the ultimate fallback.""" - sys.stdout.write(plain(escape_stdout(text))) - - -def pipe_pager(text: str, cmd: str, title: str = '') -> None: - """Page through text by feeding it to another program.""" - import subprocess - env = os.environ.copy() - if title: - title += ' ' - esc_title = escape_less(title) - prompt_string = ( - f' {esc_title}' + - '?ltline %lt?L/%L.' - ':byte %bB?s/%s.' - '.' - '?e (END):?pB %pB\\%..' - ' (press h for help or q to quit)') - env['LESS'] = '-RmPm{0}$PM{0}$'.format(prompt_string) - proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, - errors='backslashreplace', env=env) - assert proc.stdin is not None - try: - with proc.stdin as pipe: - try: - pipe.write(text) - except KeyboardInterrupt: - # We've hereby abandoned whatever text hasn't been written, - # but the pager is still in control of the terminal. - pass - except OSError: - pass # Ignore broken pipes caused by quitting the pager program. - while True: - try: - proc.wait() - break - except KeyboardInterrupt: - # Ignore ctl-c like the pager itself does. Otherwise the pager is - # left running and the terminal is in raw mode and unusable. - pass - - -def tempfile_pager(text: str, cmd: str, title: str = '') -> None: - """Page through text by invoking a program on a temporary file.""" - import tempfile - with tempfile.TemporaryDirectory() as tempdir: - filename = os.path.join(tempdir, 'pydoc.out') - with open(filename, 'w', errors='backslashreplace', - encoding=os.device_encoding(0) if - sys.platform == 'win32' else None - ) as file: - file.write(text) - os.system(cmd + ' "' + filename + '"') diff --git a/Python314_4_x86_Template/Lib/_pyrepl/reader.py b/Python314_4_x86_Template/Lib/_pyrepl/reader.py deleted file mode 100644 index 9ab92f64d..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/reader.py +++ /dev/null @@ -1,772 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Antonio Cuni -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -import sys -import _colorize - -from contextlib import contextmanager -from dataclasses import dataclass, field, fields - -from . import commands, console, input -from .utils import wlen, unbracket, disp_str, gen_colors, THEME -from .trace import trace - - -# types -Command = commands.Command -from .types import Callback, SimpleContextManager, KeySpec, CommandName - - -# syntax classes -SYNTAX_WHITESPACE, SYNTAX_WORD, SYNTAX_SYMBOL = range(3) - - -def make_default_syntax_table() -> dict[str, int]: - # XXX perhaps should use some unicodedata here? - st: dict[str, int] = {} - for c in map(chr, range(256)): - st[c] = SYNTAX_SYMBOL - for c in [a for a in map(chr, range(256)) if a.isalnum()]: - st[c] = SYNTAX_WORD - st["\n"] = st[" "] = SYNTAX_WHITESPACE - return st - - -def make_default_commands() -> dict[CommandName, type[Command]]: - result: dict[CommandName, type[Command]] = {} - for v in vars(commands).values(): - if isinstance(v, type) and issubclass(v, Command) and v.__name__[0].islower(): - result[v.__name__] = v - result[v.__name__.replace("_", "-")] = v - return result - - -default_keymap: tuple[tuple[KeySpec, CommandName], ...] = tuple( - [ - (r"\C-a", "beginning-of-line"), - (r"\C-b", "left"), - (r"\C-c", "interrupt"), - (r"\C-d", "delete"), - (r"\C-e", "end-of-line"), - (r"\C-f", "right"), - (r"\C-g", "cancel"), - (r"\C-h", "backspace"), - (r"\C-j", "accept"), - (r"\<return>", "accept"), - (r"\C-k", "kill-line"), - (r"\C-l", "clear-screen"), - (r"\C-m", "accept"), - (r"\C-t", "transpose-characters"), - (r"\C-u", "unix-line-discard"), - (r"\C-w", "unix-word-rubout"), - (r"\C-x\C-u", "upcase-region"), - (r"\C-y", "yank"), - *(() if sys.platform == "win32" else ((r"\C-z", "suspend"), )), - (r"\M-b", "backward-word"), - (r"\M-c", "capitalize-word"), - (r"\M-d", "kill-word"), - (r"\M-f", "forward-word"), - (r"\M-l", "downcase-word"), - (r"\M-t", "transpose-words"), - (r"\M-u", "upcase-word"), - (r"\M-y", "yank-pop"), - (r"\M--", "digit-arg"), - (r"\M-0", "digit-arg"), - (r"\M-1", "digit-arg"), - (r"\M-2", "digit-arg"), - (r"\M-3", "digit-arg"), - (r"\M-4", "digit-arg"), - (r"\M-5", "digit-arg"), - (r"\M-6", "digit-arg"), - (r"\M-7", "digit-arg"), - (r"\M-8", "digit-arg"), - (r"\M-9", "digit-arg"), - (r"\M-\n", "accept"), - ("\\\\", "self-insert"), - (r"\x1b[200~", "perform-bracketed-paste"), - (r"\x03", "ctrl-c"), - ] - + [(c, "self-insert") for c in map(chr, range(32, 127)) if c != "\\"] - + [(c, "self-insert") for c in map(chr, range(128, 256)) if c.isalpha()] - + [ - (r"\<up>", "up"), - (r"\<down>", "down"), - (r"\<left>", "left"), - (r"\C-\<left>", "backward-word"), - (r"\<right>", "right"), - (r"\C-\<right>", "forward-word"), - (r"\<delete>", "delete"), - (r"\x1b[3~", "delete"), - (r"\<backspace>", "backspace"), - (r"\M-\<backspace>", "backward-kill-word"), - (r"\<end>", "end-of-line"), # was 'end' - (r"\<home>", "beginning-of-line"), # was 'home' - (r"\<f1>", "help"), - (r"\<f2>", "show-history"), - (r"\<f3>", "paste-mode"), - (r"\EOF", "end"), # the entries in the terminfo database for xterms - (r"\EOH", "home"), # seem to be wrong. this is a less than ideal - # workaround - ] -) - - -@dataclass(slots=True) -class Reader: - """The Reader class implements the bare bones of a command reader, - handling such details as editing and cursor motion. What it does - not support are such things as completion or history support - - these are implemented elsewhere. - - Instance variables of note include: - - * buffer: - A per-character list containing all the characters that have been - entered. Does not include color information. - * console: - Hopefully encapsulates the OS dependent stuff. - * pos: - A 0-based index into 'buffer' for where the insertion point - is. - * screeninfo: - A list of screen position tuples. Each list element is a tuple - representing information on visible line length for a given line. - Allows for efficient skipping of color escape sequences. - * cxy, lxy: - the position of the insertion point in screen ... - * syntax_table: - Dictionary mapping characters to 'syntax class'; read the - emacs docs to see what this means :-) - * commands: - Dictionary mapping command names to command classes. - * arg: - The emacs-style prefix argument. It will be None if no such - argument has been provided. - * dirty: - True if we need to refresh the display. - * kill_ring: - The emacs-style kill-ring; manipulated with yank & yank-pop - * ps1, ps2, ps3, ps4: - prompts. ps1 is the prompt for a one-line input; for a - multiline input it looks like: - ps2> first line of input goes here - ps3> second and further - ps3> lines get ps3 - ... - ps4> and the last one gets ps4 - As with the usual top-level, you can set these to instances if - you like; str() will be called on them (once) at the beginning - of each command. Don't put really long or newline containing - strings here, please! - This is just the default policy; you can change it freely by - overriding get_prompt() (and indeed some standard subclasses - do). - * finished: - handle1 will set this to a true value if a command signals - that we're done. - """ - - console: console.Console - - ## state - buffer: list[str] = field(default_factory=list) - pos: int = 0 - ps1: str = "->> " - ps2: str = "/>> " - ps3: str = "|.. " - ps4: str = R"\__ " - kill_ring: list[list[str]] = field(default_factory=list) - msg: str = "" - arg: int | None = None - dirty: bool = False - finished: bool = False - paste_mode: bool = False - commands: dict[str, type[Command]] = field(default_factory=make_default_commands) - last_command: type[Command] | None = None - syntax_table: dict[str, int] = field(default_factory=make_default_syntax_table) - keymap: tuple[tuple[str, str], ...] = () - input_trans: input.KeymapTranslator = field(init=False) - input_trans_stack: list[input.KeymapTranslator] = field(default_factory=list) - screen: list[str] = field(default_factory=list) - screeninfo: list[tuple[int, list[int]]] = field(init=False) - cxy: tuple[int, int] = field(init=False) - lxy: tuple[int, int] = field(init=False) - scheduled_commands: list[str] = field(default_factory=list) - can_colorize: bool = False - threading_hook: Callback | None = None - - ## cached metadata to speed up screen refreshes - @dataclass - class RefreshCache: - screen: list[str] = field(default_factory=list) - screeninfo: list[tuple[int, list[int]]] = field(init=False) - line_end_offsets: list[int] = field(default_factory=list) - pos: int = field(init=False) - cxy: tuple[int, int] = field(init=False) - dimensions: tuple[int, int] = field(init=False) - invalidated: bool = False - - def update_cache(self, - reader: Reader, - screen: list[str], - screeninfo: list[tuple[int, list[int]]], - ) -> None: - self.screen = screen.copy() - self.screeninfo = screeninfo.copy() - self.pos = reader.pos - self.cxy = reader.cxy - self.dimensions = reader.console.width, reader.console.height - self.invalidated = False - - def valid(self, reader: Reader) -> bool: - if self.invalidated: - return False - dimensions = reader.console.width, reader.console.height - dimensions_changed = dimensions != self.dimensions - return not dimensions_changed - - def get_cached_location(self, reader: Reader) -> tuple[int, int]: - if self.invalidated: - raise ValueError("Cache is invalidated") - offset = 0 - earliest_common_pos = min(reader.pos, self.pos) - num_common_lines = len(self.line_end_offsets) - while num_common_lines > 0: - offset = self.line_end_offsets[num_common_lines - 1] - if earliest_common_pos > offset: - break - num_common_lines -= 1 - else: - offset = 0 - return offset, num_common_lines - - last_refresh_cache: RefreshCache = field(default_factory=RefreshCache) - - def __post_init__(self) -> None: - # Enable the use of `insert` without a `prepare` call - necessary to - # facilitate the tab completion hack implemented for - # <https://bugs.python.org/issue25660>. - self.keymap = self.collect_keymap() - self.input_trans = input.KeymapTranslator( - self.keymap, invalid_cls="invalid-key", character_cls="self-insert" - ) - self.screeninfo = [(0, [])] - self.cxy = self.pos2xy() - self.lxy = (self.pos, 0) - self.can_colorize = _colorize.can_colorize() - - self.last_refresh_cache.screeninfo = self.screeninfo - self.last_refresh_cache.pos = self.pos - self.last_refresh_cache.cxy = self.cxy - self.last_refresh_cache.dimensions = (0, 0) - - def collect_keymap(self) -> tuple[tuple[KeySpec, CommandName], ...]: - return default_keymap - - def calc_screen(self) -> list[str]: - """Translate changes in self.buffer into changes in self.console.screen.""" - # Since the last call to calc_screen: - # screen and screeninfo may differ due to a completion menu being shown - # pos and cxy may differ due to edits, cursor movements, or completion menus - - # Lines that are above both the old and new cursor position can't have changed, - # unless the terminal has been resized (which might cause reflowing) or we've - # entered or left paste mode (which changes prompts, causing reflowing). - num_common_lines = 0 - offset = 0 - if self.last_refresh_cache.valid(self): - offset, num_common_lines = self.last_refresh_cache.get_cached_location(self) - - screen = self.last_refresh_cache.screen - del screen[num_common_lines:] - - screeninfo = self.last_refresh_cache.screeninfo - del screeninfo[num_common_lines:] - - last_refresh_line_end_offsets = self.last_refresh_cache.line_end_offsets - del last_refresh_line_end_offsets[num_common_lines:] - - pos = self.pos - pos -= offset - - prompt_from_cache = (offset and self.buffer[offset - 1] != "\n") - - if self.can_colorize: - colors = list(gen_colors(self.get_unicode())) - else: - colors = None - trace("colors = {colors}", colors=colors) - lines = "".join(self.buffer[offset:]).split("\n") - cursor_found = False - lines_beyond_cursor = 0 - for ln, line in enumerate(lines, num_common_lines): - line_len = len(line) - if 0 <= pos <= line_len: - self.lxy = pos, ln - cursor_found = True - elif cursor_found: - lines_beyond_cursor += 1 - if lines_beyond_cursor > self.console.height: - # No need to keep formatting lines. - # The console can't show them. - break - if prompt_from_cache: - # Only the first line's prompt can come from the cache - prompt_from_cache = False - prompt = "" - else: - prompt = self.get_prompt(ln, line_len >= pos >= 0) - while "\n" in prompt: - pre_prompt, _, prompt = prompt.partition("\n") - last_refresh_line_end_offsets.append(offset) - screen.append(pre_prompt) - screeninfo.append((0, [])) - pos -= line_len + 1 - prompt, prompt_len = self.process_prompt(prompt) - chars, char_widths = disp_str(line, colors, offset) - wrapcount = (sum(char_widths) + prompt_len) // self.console.width - if wrapcount == 0 or not char_widths: - offset += line_len + 1 # Takes all of the line plus the newline - last_refresh_line_end_offsets.append(offset) - screen.append(prompt + "".join(chars)) - screeninfo.append((prompt_len, char_widths)) - else: - pre = prompt - prelen = prompt_len - for wrap in range(wrapcount + 1): - index_to_wrap_before = 0 - column = 0 - for char_width in char_widths: - if column + char_width + prelen >= self.console.width: - break - index_to_wrap_before += 1 - column += char_width - if len(chars) > index_to_wrap_before: - offset += index_to_wrap_before - post = "\\" - after = [1] - else: - offset += index_to_wrap_before + 1 # Takes the newline - post = "" - after = [] - last_refresh_line_end_offsets.append(offset) - render = pre + "".join(chars[:index_to_wrap_before]) + post - render_widths = char_widths[:index_to_wrap_before] + after - screen.append(render) - screeninfo.append((prelen, render_widths)) - chars = chars[index_to_wrap_before:] - char_widths = char_widths[index_to_wrap_before:] - pre = "" - prelen = 0 - self.screeninfo = screeninfo - self.cxy = self.pos2xy() - if self.msg: - for mline in self.msg.split("\n"): - screen.append(mline) - screeninfo.append((0, [])) - - self.last_refresh_cache.update_cache(self, screen, screeninfo) - return screen - - @staticmethod - def process_prompt(prompt: str) -> tuple[str, int]: - r"""Return a tuple with the prompt string and its visible length. - - The prompt string has the zero-width brackets recognized by shells - (\x01 and \x02) removed. The length ignores anything between those - brackets as well as any ANSI escape sequences. - """ - out_prompt = unbracket(prompt, including_content=False) - visible_prompt = unbracket(prompt, including_content=True) - return out_prompt, wlen(visible_prompt) - - def bow(self, p: int | None = None) -> int: - """Return the 0-based index of the word break preceding p most - immediately. - - p defaults to self.pos; word boundaries are determined using - self.syntax_table.""" - if p is None: - p = self.pos - st = self.syntax_table - b = self.buffer - p -= 1 - while p >= 0 and st.get(b[p], SYNTAX_WORD) != SYNTAX_WORD: - p -= 1 - while p >= 0 and st.get(b[p], SYNTAX_WORD) == SYNTAX_WORD: - p -= 1 - return p + 1 - - def eow(self, p: int | None = None) -> int: - """Return the 0-based index of the word break following p most - immediately. - - p defaults to self.pos; word boundaries are determined using - self.syntax_table.""" - if p is None: - p = self.pos - st = self.syntax_table - b = self.buffer - while p < len(b) and st.get(b[p], SYNTAX_WORD) != SYNTAX_WORD: - p += 1 - while p < len(b) and st.get(b[p], SYNTAX_WORD) == SYNTAX_WORD: - p += 1 - return p - - def bol(self, p: int | None = None) -> int: - """Return the 0-based index of the line break preceding p most - immediately. - - p defaults to self.pos.""" - if p is None: - p = self.pos - b = self.buffer - p -= 1 - while p >= 0 and b[p] != "\n": - p -= 1 - return p + 1 - - def eol(self, p: int | None = None) -> int: - """Return the 0-based index of the line break following p most - immediately. - - p defaults to self.pos.""" - if p is None: - p = self.pos - b = self.buffer - while p < len(b) and b[p] != "\n": - p += 1 - return p - - def max_column(self, y: int) -> int: - """Return the last x-offset for line y""" - return self.screeninfo[y][0] + sum(self.screeninfo[y][1]) - - def max_row(self) -> int: - return len(self.screeninfo) - 1 - - def get_arg(self, default: int = 1) -> int: - """Return any prefix argument that the user has supplied, - returning 'default' if there is None. Defaults to 1. - """ - if self.arg is None: - return default - return self.arg - - def get_prompt(self, lineno: int, cursor_on_line: bool) -> str: - """Return what should be in the left-hand margin for line - 'lineno'.""" - if self.arg is not None and cursor_on_line: - prompt = f"(arg: {self.arg}) " - elif self.paste_mode: - prompt = "(paste) " - elif "\n" in self.buffer: - if lineno == 0: - prompt = self.ps2 - elif self.ps4 and lineno == self.buffer.count("\n"): - prompt = self.ps4 - else: - prompt = self.ps3 - else: - prompt = self.ps1 - - if self.can_colorize: - t = THEME() - prompt = f"{t.prompt}{prompt}{t.reset}" - return prompt - - def push_input_trans(self, itrans: input.KeymapTranslator) -> None: - self.input_trans_stack.append(self.input_trans) - self.input_trans = itrans - - def pop_input_trans(self) -> None: - self.input_trans = self.input_trans_stack.pop() - - def setpos_from_xy(self, x: int, y: int) -> None: - """Set pos according to coordinates x, y""" - pos = 0 - i = 0 - while i < y: - prompt_len, char_widths = self.screeninfo[i] - offset = len(char_widths) - in_wrapped_line = prompt_len + sum(char_widths) >= self.console.width - if in_wrapped_line: - pos += offset - 1 # -1 cause backslash is not in buffer - else: - pos += offset + 1 # +1 cause newline is in buffer - i += 1 - - j = 0 - cur_x = self.screeninfo[i][0] - while cur_x < x: - if self.screeninfo[i][1][j] == 0: - j += 1 # prevent potential future infinite loop - continue - cur_x += self.screeninfo[i][1][j] - j += 1 - pos += 1 - - self.pos = pos - - def pos2xy(self) -> tuple[int, int]: - """Return the x, y coordinates of position 'pos'.""" - - prompt_len, y = 0, 0 - char_widths: list[int] = [] - pos = self.pos - assert 0 <= pos <= len(self.buffer) - - # optimize for the common case: typing at the end of the buffer - if pos == len(self.buffer) and len(self.screeninfo) > 0: - y = len(self.screeninfo) - 1 - prompt_len, char_widths = self.screeninfo[y] - return prompt_len + sum(char_widths), y - - for prompt_len, char_widths in self.screeninfo: - offset = len(char_widths) - in_wrapped_line = prompt_len + sum(char_widths) >= self.console.width - if in_wrapped_line: - offset -= 1 # need to remove line-wrapping backslash - - if offset >= pos: - break - - if not in_wrapped_line: - offset += 1 # there's a newline in buffer - - pos -= offset - y += 1 - return prompt_len + sum(char_widths[:pos]), y - - def insert(self, text: str | list[str]) -> None: - """Insert 'text' at the insertion point.""" - self.buffer[self.pos : self.pos] = list(text) - self.pos += len(text) - self.dirty = True - - def update_cursor(self) -> None: - """Move the cursor to reflect changes in self.pos""" - self.cxy = self.pos2xy() - trace("update_cursor({pos}) = {cxy}", pos=self.pos, cxy=self.cxy) - self.console.move_cursor(*self.cxy) - - def after_command(self, cmd: Command) -> None: - """This function is called to allow post command cleanup.""" - if getattr(cmd, "kills_digit_arg", True): - if self.arg is not None: - self.dirty = True - self.arg = None - - def prepare(self) -> None: - """Get ready to run. Call restore when finished. You must not - write to the console in between the calls to prepare and - restore.""" - try: - self.console.prepare() - self.arg = None - self.finished = False - del self.buffer[:] - self.pos = 0 - self.dirty = True - self.last_command = None - self.calc_screen() - except BaseException: - self.restore() - raise - - while self.scheduled_commands: - cmd = self.scheduled_commands.pop() - self.do_cmd((cmd, [])) - - def last_command_is(self, cls: type) -> bool: - if not self.last_command: - return False - return issubclass(cls, self.last_command) - - def restore(self) -> None: - """Clean up after a run.""" - self.console.restore() - - @contextmanager - def suspend(self) -> SimpleContextManager: - """A context manager to delegate to another reader.""" - prev_state = {f.name: getattr(self, f.name) for f in fields(self)} - try: - self.restore() - yield - finally: - for arg in ("msg", "ps1", "ps2", "ps3", "ps4", "paste_mode"): - setattr(self, arg, prev_state[arg]) - self.prepare() - - @contextmanager - def suspend_colorization(self) -> SimpleContextManager: - try: - old_can_colorize = self.can_colorize - self.can_colorize = False - yield - finally: - self.can_colorize = old_can_colorize - - - def finish(self) -> None: - """Called when a command signals that we're finished.""" - pass - - def error(self, msg: str = "none") -> None: - self.msg = "! " + msg + " " - self.dirty = True - self.console.beep() - - def update_screen(self) -> None: - if self.dirty: - self.refresh() - - def refresh(self) -> None: - """Recalculate and refresh the screen.""" - # this call sets up self.cxy, so call it first. - self.screen = self.calc_screen() - self.console.refresh(self.screen, self.cxy) - self.dirty = False - - def do_cmd(self, cmd: tuple[str, list[str]]) -> None: - """`cmd` is a tuple of "event_name" and "event", which in the current - implementation is always just the "buffer" which happens to be a list - of single-character strings.""" - - trace("received command {cmd}", cmd=cmd) - if isinstance(cmd[0], str): - command_type = self.commands.get(cmd[0], commands.invalid_command) - elif isinstance(cmd[0], type): - command_type = cmd[0] - else: - return # nothing to do - - command = command_type(self, *cmd) # type: ignore[arg-type] - command.do() - - self.after_command(command) - - if self.dirty: - self.refresh() - else: - self.update_cursor() - - if not isinstance(cmd, commands.digit_arg): - self.last_command = command_type - - self.finished = bool(command.finish) - if self.finished: - self.console.finish() - self.finish() - - def run_hooks(self) -> None: - threading_hook = self.threading_hook - if threading_hook is None and 'threading' in sys.modules: - from ._threading_handler import install_threading_hook - install_threading_hook(self) - if threading_hook is not None: - try: - threading_hook() - except Exception: - pass - - input_hook = self.console.input_hook - if input_hook: - try: - input_hook() - except Exception: - pass - - def handle1(self, block: bool = True) -> bool: - """Handle a single event. Wait as long as it takes if block - is true (the default), otherwise return False if no event is - pending.""" - - if self.msg: - self.msg = "" - self.dirty = True - - while True: - # We use the same timeout as in readline.c: 100ms - self.run_hooks() - self.console.wait(100) - event = self.console.get_event(block=False) - if not event: - if block: - continue - return False - - translate = True - - if event.evt == "key": - self.input_trans.push(event) - elif event.evt == "scroll": - self.refresh() - elif event.evt == "resize": - self.refresh() - else: - translate = False - - if translate: - cmd = self.input_trans.get() - else: - cmd = [event.evt, event.data] - - if cmd is None: - if block: - continue - return False - - self.do_cmd(cmd) - return True - - def push_char(self, char: int | bytes) -> None: - self.console.push_char(char) - self.handle1(block=False) - - def readline(self, startup_hook: Callback | None = None) -> str: - """Read a line. The implementation of this method also shows - how to drive Reader if you want more control over the event - loop.""" - self.prepare() - try: - if startup_hook is not None: - startup_hook() - self.refresh() - while not self.finished: - self.handle1() - return self.get_unicode() - - finally: - self.restore() - - def bind(self, spec: KeySpec, command: CommandName) -> None: - self.keymap = self.keymap + ((spec, command),) - self.input_trans = input.KeymapTranslator( - self.keymap, invalid_cls="invalid-key", character_cls="self-insert" - ) - - def get_unicode(self) -> str: - """Return the current buffer as a unicode string.""" - return "".join(self.buffer) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/readline.py b/Python314_4_x86_Template/Lib/_pyrepl/readline.py deleted file mode 100644 index 23b8fa6b9..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/readline.py +++ /dev/null @@ -1,620 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Alex Gaynor -# Antonio Cuni -# Armin Rigo -# Holger Krekel -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -"""A compatibility wrapper reimplementing the 'readline' standard module -on top of pyrepl. Not all functionalities are supported. Contains -extensions for multiline input. -""" - -from __future__ import annotations - -import warnings -from dataclasses import dataclass, field - -import os -from site import gethistoryfile -import sys -from rlcompleter import Completer as RLCompleter - -from . import commands, historical_reader -from .completing_reader import CompletingReader -from .console import Console as ConsoleType -from ._module_completer import ModuleCompleter, make_default_module_completer - -Console: type[ConsoleType] -_error: tuple[type[Exception], ...] | type[Exception] - -if os.name == "nt": - from .windows_console import WindowsConsole as Console, _error -else: - from .unix_console import UnixConsole as Console, _error - -ENCODING = sys.getdefaultencoding() or "latin1" - - -# types -Command = commands.Command -from collections.abc import Callable, Collection -from .types import Callback, Completer, KeySpec, CommandName - -TYPE_CHECKING = False - -if TYPE_CHECKING: - from typing import Any, Mapping - - -MoreLinesCallable = Callable[[str], bool] - - -__all__ = [ - "add_history", - "clear_history", - "get_begidx", - "get_completer", - "get_completer_delims", - "get_current_history_length", - "get_endidx", - "get_history_item", - "get_history_length", - "get_line_buffer", - "insert_text", - "parse_and_bind", - "read_history_file", - # "read_init_file", - # "redisplay", - "remove_history_item", - "replace_history_item", - "set_auto_history", - "set_completer", - "set_completer_delims", - "set_history_length", - # "set_pre_input_hook", - "set_startup_hook", - "write_history_file", - "append_history_file", - # ---- multiline extensions ---- - "multiline_input", -] - -# ____________________________________________________________ - -@dataclass -class ReadlineConfig: - readline_completer: Completer | None = None - completer_delims: frozenset[str] = frozenset(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?") - module_completer: ModuleCompleter = field(default_factory=make_default_module_completer) - -@dataclass(kw_only=True) -class ReadlineAlikeReader(historical_reader.HistoricalReader, CompletingReader): - # Class fields - assume_immutable_completions = False - use_brackets = False - sort_in_column = True - - # Instance fields - config: ReadlineConfig - more_lines: MoreLinesCallable | None = None - last_used_indentation: str | None = None - - def __post_init__(self) -> None: - super().__post_init__() - self.commands["maybe_accept"] = maybe_accept - self.commands["maybe-accept"] = maybe_accept - self.commands["backspace_dedent"] = backspace_dedent - self.commands["backspace-dedent"] = backspace_dedent - - def error(self, msg: str = "none") -> None: - pass # don't show error messages by default - - def get_stem(self) -> str: - b = self.buffer - p = self.pos - 1 - completer_delims = self.config.completer_delims - while p >= 0 and b[p] not in completer_delims: - p -= 1 - return "".join(b[p + 1 : self.pos]) - - def get_completions(self, stem: str) -> list[str]: - module_completions = self.get_module_completions() - if module_completions is not None: - return module_completions - if len(stem) == 0 and self.more_lines is not None: - b = self.buffer - p = self.pos - while p > 0 and b[p - 1] != "\n": - p -= 1 - num_spaces = 4 - ((self.pos - p) % 4) - return [" " * num_spaces] - result = [] - function = self.config.readline_completer - if function is not None: - try: - stem = str(stem) # rlcompleter.py seems to not like unicode - except UnicodeEncodeError: - pass # but feed unicode anyway if we have no choice - state = 0 - while True: - try: - next = function(stem, state) - except Exception: - break - if not isinstance(next, str): - break - result.append(next) - state += 1 - # emulate the behavior of the standard readline that sorts - # the completions before displaying them. - result.sort() - return result - - def get_module_completions(self) -> list[str] | None: - line = self.get_line() - return self.config.module_completer.get_completions(line) - - def get_trimmed_history(self, maxlength: int) -> list[str]: - if maxlength >= 0: - cut = len(self.history) - maxlength - if cut < 0: - cut = 0 - else: - cut = 0 - return self.history[cut:] - - def update_last_used_indentation(self) -> None: - indentation = _get_first_indentation(self.buffer) - if indentation is not None: - self.last_used_indentation = indentation - - # --- simplified support for reading multiline Python statements --- - - def collect_keymap(self) -> tuple[tuple[KeySpec, CommandName], ...]: - return super().collect_keymap() + ( - (r"\n", "maybe-accept"), - (r"\<backspace>", "backspace-dedent"), - ) - - def after_command(self, cmd: Command) -> None: - super().after_command(cmd) - if self.more_lines is None: - # Force single-line input if we are in raw_input() mode. - # Although there is no direct way to add a \n in this mode, - # multiline buffers can still show up using various - # commands, e.g. navigating the history. - try: - index = self.buffer.index("\n") - except ValueError: - pass - else: - self.buffer = self.buffer[:index] - if self.pos > len(self.buffer): - self.pos = len(self.buffer) - - -def set_auto_history(_should_auto_add_history: bool) -> None: - """Enable or disable automatic history""" - historical_reader.should_auto_add_history = bool(_should_auto_add_history) - - -def _get_this_line_indent(buffer: list[str], pos: int) -> int: - indent = 0 - while pos > 0 and buffer[pos - 1] in " \t": - indent += 1 - pos -= 1 - if pos > 0 and buffer[pos - 1] == "\n": - return indent - return 0 - - -def _get_previous_line_indent(buffer: list[str], pos: int) -> tuple[int, int | None]: - prevlinestart = pos - while prevlinestart > 0 and buffer[prevlinestart - 1] != "\n": - prevlinestart -= 1 - prevlinetext = prevlinestart - while prevlinetext < pos and buffer[prevlinetext] in " \t": - prevlinetext += 1 - if prevlinetext == pos: - indent = None - else: - indent = prevlinetext - prevlinestart - return prevlinestart, indent - - -def _get_first_indentation(buffer: list[str]) -> str | None: - indented_line_start = None - for i in range(len(buffer)): - if (i < len(buffer) - 1 - and buffer[i] == "\n" - and buffer[i + 1] in " \t" - ): - indented_line_start = i + 1 - elif indented_line_start is not None and buffer[i] not in " \t\n": - return ''.join(buffer[indented_line_start : i]) - return None - - -def _should_auto_indent(buffer: list[str], pos: int) -> bool: - # check if last character before "pos" is a colon, ignoring - # whitespaces and comments. - last_char = None - while pos > 0: - pos -= 1 - if last_char is None: - if buffer[pos] not in " \t\n#": # ignore whitespaces and comments - last_char = buffer[pos] - else: - # even if we found a non-whitespace character before - # original pos, we keep going back until newline is reached - # to make sure we ignore comments - if buffer[pos] == "\n": - break - if buffer[pos] == "#": - last_char = None - return last_char == ":" - - -class maybe_accept(commands.Command): - def do(self) -> None: - r: ReadlineAlikeReader - r = self.reader # type: ignore[assignment] - r.dirty = True # this is needed to hide the completion menu, if visible - - # if there are already several lines and the cursor - # is not on the last one, always insert a new \n. - text = r.get_unicode() - - if "\n" in r.buffer[r.pos :] or ( - r.more_lines is not None and r.more_lines(text) - ): - def _newline_before_pos(): - before_idx = r.pos - 1 - while before_idx > 0 and text[before_idx].isspace(): - before_idx -= 1 - return text[before_idx : r.pos].count("\n") > 0 - - # if there's already a new line before the cursor then - # even if the cursor is followed by whitespace, we assume - # the user is trying to terminate the block - if _newline_before_pos() and text[r.pos:].isspace(): - self.finish = True - return - - # auto-indent the next line like the previous line - prevlinestart, indent = _get_previous_line_indent(r.buffer, r.pos) - r.insert("\n") - if not self.reader.paste_mode: - if indent: - for i in range(prevlinestart, prevlinestart + indent): - r.insert(r.buffer[i]) - r.update_last_used_indentation() - if _should_auto_indent(r.buffer, r.pos): - if r.last_used_indentation is not None: - indentation = r.last_used_indentation - else: - # default - indentation = " " * 4 - r.insert(indentation) - elif not self.reader.paste_mode: - self.finish = True - else: - r.insert("\n") - - -class backspace_dedent(commands.Command): - def do(self) -> None: - r = self.reader - b = r.buffer - if r.pos > 0: - repeat = 1 - if b[r.pos - 1] != "\n": - indent = _get_this_line_indent(b, r.pos) - if indent > 0: - ls = r.pos - indent - while ls > 0: - ls, pi = _get_previous_line_indent(b, ls - 1) - if pi is not None and pi < indent: - repeat = indent - pi - break - r.pos -= repeat - del b[r.pos : r.pos + repeat] - r.dirty = True - else: - self.reader.error("can't backspace at start") - - -# ____________________________________________________________ - - -@dataclass(slots=True) -class _ReadlineWrapper: - f_in: int = -1 - f_out: int = -1 - reader: ReadlineAlikeReader | None = field(default=None, repr=False) - saved_history_length: int = -1 - startup_hook: Callback | None = None - config: ReadlineConfig = field(default_factory=ReadlineConfig, repr=False) - - def __post_init__(self) -> None: - if self.f_in == -1: - self.f_in = os.dup(0) - if self.f_out == -1: - self.f_out = os.dup(1) - - def get_reader(self) -> ReadlineAlikeReader: - if self.reader is None: - console = Console(self.f_in, self.f_out, encoding=ENCODING) - self.reader = ReadlineAlikeReader(console=console, config=self.config) - return self.reader - - def input(self, prompt: object = "") -> str: - try: - reader = self.get_reader() - except _error: - assert raw_input is not None - return raw_input(prompt) - prompt_str = str(prompt) - reader.ps1 = prompt_str - sys.audit("builtins.input", prompt_str) - result = reader.readline(startup_hook=self.startup_hook) - sys.audit("builtins.input/result", result) - return result - - def multiline_input(self, more_lines: MoreLinesCallable, ps1: str, ps2: str) -> str: - """Read an input on possibly multiple lines, asking for more - lines as long as 'more_lines(unicodetext)' returns an object whose - boolean value is true. - """ - reader = self.get_reader() - saved = reader.more_lines - try: - reader.more_lines = more_lines - reader.ps1 = ps1 - reader.ps2 = ps1 - reader.ps3 = ps2 - reader.ps4 = "" - with warnings.catch_warnings(action="ignore"): - return reader.readline() - finally: - reader.more_lines = saved - reader.paste_mode = False - - def parse_and_bind(self, string: str) -> None: - pass # XXX we don't support parsing GNU-readline-style init files - - def set_completer(self, function: Completer | None = None) -> None: - self.config.readline_completer = function - - def get_completer(self) -> Completer | None: - return self.config.readline_completer - - def set_completer_delims(self, delimiters: Collection[str]) -> None: - self.config.completer_delims = frozenset(delimiters) - - def get_completer_delims(self) -> str: - return "".join(sorted(self.config.completer_delims)) - - def _histline(self, line: str) -> str: - line = line.rstrip("\n") - return line - - def get_history_length(self) -> int: - return self.saved_history_length - - def set_history_length(self, length: int) -> None: - self.saved_history_length = length - - def get_current_history_length(self) -> int: - return len(self.get_reader().history) - - def read_history_file(self, filename: str = gethistoryfile()) -> None: - # multiline extension (really a hack) for the end of lines that - # are actually continuations inside a single multiline_input() - # history item: we use \r\n instead of just \n. If the history - # file is passed to GNU readline, the extra \r are just ignored. - history = self.get_reader().history - - with open(os.path.expanduser(filename), 'rb') as f: - is_editline = f.readline().startswith(b"_HiStOrY_V2_") - if is_editline: - encoding = "unicode-escape" - else: - f.seek(0) - encoding = "utf-8" - - lines = [line.decode(encoding, errors='replace') for line in f.read().split(b'\n')] - buffer = [] - for line in lines: - if line.endswith("\r"): - buffer.append(line+'\n') - else: - line = self._histline(line) - if buffer: - line = self._histline("".join(buffer).replace("\r", "") + line) - del buffer[:] - if line: - history.append(line) - self.set_history_length(self.get_current_history_length()) - - def write_history_file(self, filename: str = gethistoryfile()) -> None: - maxlength = self.saved_history_length - history = self.get_reader().get_trimmed_history(maxlength) - f = open(os.path.expanduser(filename), "w", - encoding="utf-8", newline="\n") - with f: - for entry in history: - entry = entry.replace("\n", "\r\n") # multiline history support - f.write(entry + "\n") - - def append_history_file(self, filename: str = gethistoryfile()) -> None: - reader = self.get_reader() - saved_length = self.get_history_length() - length = self.get_current_history_length() - saved_length - history = reader.get_trimmed_history(length) - f = open(os.path.expanduser(filename), "a", - encoding="utf-8", newline="\n") - with f: - for entry in history: - entry = entry.replace("\n", "\r\n") # multiline history support - f.write(entry + "\n") - self.set_history_length(saved_length + length) - - def clear_history(self) -> None: - del self.get_reader().history[:] - - def get_history_item(self, index: int) -> str | None: - history = self.get_reader().history - if 1 <= index <= len(history): - return history[index - 1] - else: - return None # like readline.c - - def remove_history_item(self, index: int) -> None: - history = self.get_reader().history - if 0 <= index < len(history): - del history[index] - else: - raise ValueError("No history item at position %d" % index) - # like readline.c - - def replace_history_item(self, index: int, line: str) -> None: - history = self.get_reader().history - if 0 <= index < len(history): - history[index] = self._histline(line) - else: - raise ValueError("No history item at position %d" % index) - # like readline.c - - def add_history(self, line: str) -> None: - self.get_reader().history.append(self._histline(line)) - - def set_startup_hook(self, function: Callback | None = None) -> None: - self.startup_hook = function - - def get_line_buffer(self) -> str: - return self.get_reader().get_unicode() - - def _get_idxs(self) -> tuple[int, int]: - start = cursor = self.get_reader().pos - buf = self.get_line_buffer() - for i in range(cursor - 1, -1, -1): - if buf[i] in self.get_completer_delims(): - break - start = i - return start, cursor - - def get_begidx(self) -> int: - return self._get_idxs()[0] - - def get_endidx(self) -> int: - return self._get_idxs()[1] - - def insert_text(self, text: str) -> None: - self.get_reader().insert(text) - - -_wrapper = _ReadlineWrapper() - -# ____________________________________________________________ -# Public API - -parse_and_bind = _wrapper.parse_and_bind -set_completer = _wrapper.set_completer -get_completer = _wrapper.get_completer -set_completer_delims = _wrapper.set_completer_delims -get_completer_delims = _wrapper.get_completer_delims -get_history_length = _wrapper.get_history_length -set_history_length = _wrapper.set_history_length -get_current_history_length = _wrapper.get_current_history_length -read_history_file = _wrapper.read_history_file -write_history_file = _wrapper.write_history_file -append_history_file = _wrapper.append_history_file -clear_history = _wrapper.clear_history -get_history_item = _wrapper.get_history_item -remove_history_item = _wrapper.remove_history_item -replace_history_item = _wrapper.replace_history_item -add_history = _wrapper.add_history -set_startup_hook = _wrapper.set_startup_hook -get_line_buffer = _wrapper.get_line_buffer -get_begidx = _wrapper.get_begidx -get_endidx = _wrapper.get_endidx -insert_text = _wrapper.insert_text - -# Extension -multiline_input = _wrapper.multiline_input - -# Internal hook -_get_reader = _wrapper.get_reader - -# ____________________________________________________________ -# Stubs - - -def _make_stub(_name: str, _ret: object) -> None: - def stub(*args: object, **kwds: object) -> None: - import warnings - - warnings.warn("readline.%s() not implemented" % _name, stacklevel=2) - - stub.__name__ = _name - globals()[_name] = stub - - -for _name, _ret in [ - ("read_init_file", None), - ("redisplay", None), - ("set_pre_input_hook", None), -]: - assert _name not in globals(), _name - _make_stub(_name, _ret) - -# ____________________________________________________________ - - -def _setup(namespace: Mapping[str, Any]) -> None: - global raw_input - if raw_input is not None: - return # don't run _setup twice - - try: - f_in = sys.stdin.fileno() - f_out = sys.stdout.fileno() - except (AttributeError, ValueError): - return - if not os.isatty(f_in) or not os.isatty(f_out): - return - - _wrapper.f_in = f_in - _wrapper.f_out = f_out - - # set up namespace in rlcompleter, which requires it to be a bona fide dict - if not isinstance(namespace, dict): - namespace = dict(namespace) - _wrapper.config.module_completer = ModuleCompleter(namespace) - _wrapper.config.readline_completer = RLCompleter(namespace).complete - - # this is not really what readline.c does. Better than nothing I guess - import builtins - raw_input = builtins.input - builtins.input = _wrapper.input - - -raw_input: Callable[[object], str] | None = None diff --git a/Python314_4_x86_Template/Lib/_pyrepl/simple_interact.py b/Python314_4_x86_Template/Lib/_pyrepl/simple_interact.py deleted file mode 100644 index 6508f0233..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/simple_interact.py +++ /dev/null @@ -1,181 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -"""This is an alternative to python_reader which tries to emulate -the CPython prompt as closely as possible, with the exception of -allowing multiline input and multiline history entries. -""" - -from __future__ import annotations - -import _sitebuiltins -import functools -import os -import sys -import code -import warnings -import errno - -from .readline import _get_reader, multiline_input, append_history_file - - -_error: tuple[type[Exception], ...] | type[Exception] -try: - from .unix_console import _error -except ModuleNotFoundError: - from .windows_console import _error - -def check() -> str: - """Returns the error message if there is a problem initializing the state.""" - try: - _get_reader() - except _error as e: - if term := os.environ.get("TERM", ""): - term = f"; TERM={term}" - return str(str(e) or repr(e) or "unknown error") + term - return "" - - -def _strip_final_indent(text: str) -> str: - # kill spaces and tabs at the end, but only if they follow '\n'. - # meant to remove the auto-indentation only (although it would of - # course also remove explicitly-added indentation). - short = text.rstrip(" \t") - n = len(short) - if n > 0 and text[n - 1] == "\n": - return short - return text - - -def _clear_screen(): - reader = _get_reader() - reader.scheduled_commands.append("clear_screen") - - -REPL_COMMANDS = { - "exit": _sitebuiltins.Quitter('exit', ''), - "quit": _sitebuiltins.Quitter('quit' ,''), - "copyright": _sitebuiltins._Printer('copyright', sys.copyright), - "help": _sitebuiltins._Helper(), - "clear": _clear_screen, - "\x1a": _sitebuiltins.Quitter('\x1a', ''), -} - - -def _more_lines(console: code.InteractiveConsole, unicodetext: str) -> bool: - # ooh, look at the hack: - src = _strip_final_indent(unicodetext) - try: - code = console.compile(src, "<stdin>", "single") - except (OverflowError, SyntaxError, ValueError): - lines = src.splitlines(keepends=True) - if len(lines) == 1: - return False - - last_line = lines[-1] - was_indented = last_line.startswith((" ", "\t")) - not_empty = last_line.strip() != "" - incomplete = not last_line.endswith("\n") - return (was_indented or not_empty) and incomplete - else: - return code is None - - -def run_multiline_interactive_console( - console: code.InteractiveConsole, - *, - future_flags: int = 0, -) -> None: - from .readline import _setup - _setup(console.locals) - if future_flags: - console.compile.compiler.flags |= future_flags - - more_lines = functools.partial(_more_lines, console) - input_n = 0 - - _is_x_showrefcount_set = sys._xoptions.get("showrefcount") - _is_pydebug_build = hasattr(sys, "gettotalrefcount") - show_ref_count = _is_x_showrefcount_set and _is_pydebug_build - - def maybe_run_command(statement: str) -> bool: - statement = statement.strip() - if statement in console.locals or statement not in REPL_COMMANDS: - return False - - reader = _get_reader() - reader.history.pop() # skip internal commands in history - command = REPL_COMMANDS[statement] - if callable(command): - # Make sure that history does not change because of commands - with reader.suspend_history(), reader.suspend_colorization(): - command() - return True - return False - - while True: - try: - try: - sys.stdout.flush() - except Exception: - pass - - ps1 = getattr(sys, "ps1", ">>> ") - ps2 = getattr(sys, "ps2", "... ") - try: - statement = multiline_input(more_lines, ps1, ps2) - except EOFError: - break - - if maybe_run_command(statement): - continue - - input_name = f"<python-input-{input_n}>" - more = console.push(_strip_final_indent(statement), filename=input_name, _symbol="single") # type: ignore[call-arg] - assert not more - try: - append_history_file() - except (FileNotFoundError, PermissionError, OSError) as e: - warnings.warn(f"failed to open the history file for writing: {e}") - - input_n += 1 - except KeyboardInterrupt: - r = _get_reader() - r.cmpltn_reset() - if r.input_trans is r.isearch_trans: - r.do_cmd(("isearch-end", [""])) - r.pos = len(r.get_unicode()) - r.dirty = True - r.refresh() - console.write("\nKeyboardInterrupt\n") - console.resetbuffer() - except MemoryError: - console.write("\nMemoryError\n") - console.resetbuffer() - except SystemExit: - raise - except: - console.showtraceback() - console.resetbuffer() - if show_ref_count: - console.write( - f"[{sys.gettotalrefcount()} refs," - f" {sys.getallocatedblocks()} blocks]\n" - ) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/terminfo.py b/Python314_4_x86_Template/Lib/_pyrepl/terminfo.py deleted file mode 100644 index d02ef69cc..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/terminfo.py +++ /dev/null @@ -1,488 +0,0 @@ -"""Pure Python curses-like terminal capability queries.""" - -from dataclasses import dataclass, field -import errno -import os -from pathlib import Path -import re -import struct - - -# Terminfo constants -MAGIC16 = 0o432 # Magic number for 16-bit terminfo format -MAGIC32 = 0o1036 # Magic number for 32-bit terminfo format - -# Special values for absent/cancelled capabilities -ABSENT_BOOLEAN = -1 -ABSENT_NUMERIC = -1 -CANCELLED_NUMERIC = -2 -ABSENT_STRING = None -CANCELLED_STRING = None - - -# Standard string capability names from ncurses Caps file -# This matches the order used by ncurses when compiling terminfo -# fmt: off -_STRING_NAMES: tuple[str, ...] = ( - "cbt", "bel", "cr", "csr", "tbc", "clear", "el", "ed", "hpa", "cmdch", - "cup", "cud1", "home", "civis", "cub1", "mrcup", "cnorm", "cuf1", "ll", - "cuu1", "cvvis", "dch1", "dl1", "dsl", "hd", "smacs", "blink", "bold", - "smcup", "smdc", "dim", "smir", "invis", "prot", "rev", "smso", "smul", - "ech", "rmacs", "sgr0", "rmcup", "rmdc", "rmir", "rmso", "rmul", "flash", - "ff", "fsl", "is1", "is2", "is3", "if", "ich1", "il1", "ip", "kbs", "ktbc", - "kclr", "kctab", "kdch1", "kdl1", "kcud1", "krmir", "kel", "ked", "kf0", - "kf1", "kf10", "kf2", "kf3", "kf4", "kf5", "kf6", "kf7", "kf8", "kf9", - "khome", "kich1", "kil1", "kcub1", "kll", "knp", "kpp", "kcuf1", "kind", - "kri", "khts", "kcuu1", "rmkx", "smkx", "lf0", "lf1", "lf10", "lf2", "lf3", - "lf4", "lf5", "lf6", "lf7", "lf8", "lf9", "rmm", "smm", "nel", "pad", "dch", - "dl", "cud", "ich", "indn", "il", "cub", "cuf", "rin", "cuu", "pfkey", - "pfloc", "pfx", "mc0", "mc4", "mc5", "rep", "rs1", "rs2", "rs3", "rf", "rc", - "vpa", "sc", "ind", "ri", "sgr", "hts", "wind", "ht", "tsl", "uc", "hu", - "iprog", "ka1", "ka3", "kb2", "kc1", "kc3", "mc5p", "rmp", "acsc", "pln", - "kcbt", "smxon", "rmxon", "smam", "rmam", "xonc", "xoffc", "enacs", "smln", - "rmln", "kbeg", "kcan", "kclo", "kcmd", "kcpy", "kcrt", "kend", "kent", - "kext", "kfnd", "khlp", "kmrk", "kmsg", "kmov", "knxt", "kopn", "kopt", - "kprv", "kprt", "krdo", "kref", "krfr", "krpl", "krst", "kres", "ksav", - "kspd", "kund", "kBEG", "kCAN", "kCMD", "kCPY", "kCRT", "kDC", "kDL", - "kslt", "kEND", "kEOL", "kEXT", "kFND", "kHLP", "kHOM", "kIC", "kLFT", - "kMSG", "kMOV", "kNXT", "kOPT", "kPRV", "kPRT", "kRDO", "kRPL", "kRIT", - "kRES", "kSAV", "kSPD", "kUND", "rfi", "kf11", "kf12", "kf13", "kf14", - "kf15", "kf16", "kf17", "kf18", "kf19", "kf20", "kf21", "kf22", "kf23", - "kf24", "kf25", "kf26", "kf27", "kf28", "kf29", "kf30", "kf31", "kf32", - "kf33", "kf34", "kf35", "kf36", "kf37", "kf38", "kf39", "kf40", "kf41", - "kf42", "kf43", "kf44", "kf45", "kf46", "kf47", "kf48", "kf49", "kf50", - "kf51", "kf52", "kf53", "kf54", "kf55", "kf56", "kf57", "kf58", "kf59", - "kf60", "kf61", "kf62", "kf63", "el1", "mgc", "smgl", "smgr", "fln", "sclk", - "dclk", "rmclk", "cwin", "wingo", "hup","dial", "qdial", "tone", "pulse", - "hook", "pause", "wait", "u0", "u1", "u2", "u3", "u4", "u5", "u6", "u7", - "u8", "u9", "op", "oc", "initc", "initp", "scp", "setf", "setb", "cpi", - "lpi", "chr", "cvr", "defc", "swidm", "sdrfq", "sitm", "slm", "smicm", - "snlq", "snrmq", "sshm", "ssubm", "ssupm", "sum", "rwidm", "ritm", "rlm", - "rmicm", "rshm", "rsubm", "rsupm", "rum", "mhpa", "mcud1", "mcub1", "mcuf1", - "mvpa", "mcuu1", "porder", "mcud", "mcub", "mcuf", "mcuu", "scs", "smgb", - "smgbp", "smglp", "smgrp", "smgt", "smgtp", "sbim", "scsd", "rbim", "rcsd", - "subcs", "supcs", "docr", "zerom", "csnm", "kmous", "minfo", "reqmp", - "getm", "setaf", "setab", "pfxl", "devt", "csin", "s0ds", "s1ds", "s2ds", - "s3ds", "smglr", "smgtb", "birep", "binel", "bicr", "colornm", "defbi", - "endbi", "setcolor", "slines", "dispc", "smpch", "rmpch", "smsc", "rmsc", - "pctrm", "scesc", "scesa", "ehhlm", "elhlm", "elohlm", "erhlm", "ethlm", - "evhlm", "sgr1", "slength", "OTi2", "OTrs", "OTnl", "OTbc", "OTko", "OTma", - "OTG2", "OTG3", "OTG1", "OTG4", "OTGR", "OTGL", "OTGU", "OTGD", "OTGH", - "OTGV", "OTGC","meml", "memu", "box1" -) -# fmt: on - - -def _get_terminfo_dirs() -> list[Path]: - """Get list of directories to search for terminfo files. - - Based on ncurses behavior in: - - ncurses/tinfo/db_iterator.c:_nc_next_db() - - ncurses/tinfo/read_entry.c:_nc_read_entry() - """ - dirs = [] - - terminfo = os.environ.get("TERMINFO") - if terminfo: - dirs.append(terminfo) - - try: - home = Path.home() - dirs.append(str(home / ".terminfo")) - except RuntimeError: - pass - - # Check TERMINFO_DIRS - terminfo_dirs = os.environ.get("TERMINFO_DIRS", "") - if terminfo_dirs: - for d in terminfo_dirs.split(":"): - if d: - dirs.append(d) - - dirs.extend( - [ - "/etc/terminfo", - "/lib/terminfo", - "/usr/lib/terminfo", - "/usr/share/terminfo", - "/usr/share/lib/terminfo", - "/usr/share/misc/terminfo", - "/usr/local/lib/terminfo", - "/usr/local/share/terminfo", - ] - ) - - return [Path(d) for d in dirs if Path(d).is_dir()] - - -def _validate_terminal_name_or_raise(terminal_name: str) -> None: - if not isinstance(terminal_name, str): - raise TypeError("`terminal_name` must be a string") - - if not terminal_name: - raise ValueError("`terminal_name` cannot be empty") - - if "\x00" in terminal_name: - raise ValueError("NUL character found in `terminal_name`") - - t = Path(terminal_name) - if len(t.parts) > 1: - raise ValueError("`terminal_name` cannot contain path separators") - - -def _read_terminfo_file(terminal_name: str) -> bytes: - """Find and read terminfo file for given terminal name. - - Terminfo files are stored in directories using the first character - of the terminal name as a subdirectory. - """ - _validate_terminal_name_or_raise(terminal_name) - first_char = terminal_name[0].lower() - filename = terminal_name - - for directory in _get_terminfo_dirs(): - path = directory / first_char / filename - if path.is_file(): - return path.read_bytes() - - # Try with hex encoding of first char (for special chars) - hex_dir = "%02x" % ord(first_char) - path = directory / hex_dir / filename - if path.is_file(): - return path.read_bytes() - - raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), filename) - - -# Hard-coded terminal capabilities for common terminals -# This is a minimal subset needed by PyREPL -_TERMINAL_CAPABILITIES = { - # ANSI/xterm-compatible terminals - "ansi": { - # Bell - "bel": b"\x07", - # Cursor movement - "cub": b"\x1b[%p1%dD", # Move cursor left N columns - "cud": b"\x1b[%p1%dB", # Move cursor down N rows - "cuf": b"\x1b[%p1%dC", # Move cursor right N columns - "cuu": b"\x1b[%p1%dA", # Move cursor up N rows - "cub1": b"\x08", # Move cursor left 1 column - "cud1": b"\n", # Move cursor down 1 row - "cuf1": b"\x1b[C", # Move cursor right 1 column - "cuu1": b"\x1b[A", # Move cursor up 1 row - "cup": b"\x1b[%i%p1%d;%p2%dH", # Move cursor to row, column - "hpa": b"\x1b[%i%p1%dG", # Move cursor to column - # Clear operations - "clear": b"\x1b[H\x1b[2J", # Clear screen and home cursor - "el": b"\x1b[K", # Clear to end of line - # Insert/delete - "dch": b"\x1b[%p1%dP", # Delete N characters - "dch1": b"\x1b[P", # Delete 1 character - "ich": b"\x1b[%p1%d@", # Insert N characters - "ich1": b"", # Insert 1 character - # Cursor visibility - "civis": b"\x1b[?25l", # Make cursor invisible - "cnorm": b"\x1b[?12l\x1b[?25h", # Make cursor normal (visible) - # Scrolling - "ind": b"\n", # Scroll up one line - "ri": b"\x1bM", # Scroll down one line - # Keypad mode - "smkx": b"\x1b[?1h\x1b=", # Enable keypad mode - "rmkx": b"\x1b[?1l\x1b>", # Disable keypad mode - # Padding (not used in modern terminals) - "pad": b"", - # Function keys and special keys - "kdch1": b"\x1b[3~", # Delete key - "kcud1": b"\x1bOB", # Down arrow - "kend": b"\x1bOF", # End key - "kent": b"\x1bOM", # Enter key - "khome": b"\x1bOH", # Home key - "kich1": b"\x1b[2~", # Insert key - "kcub1": b"\x1bOD", # Left arrow - "knp": b"\x1b[6~", # Page down - "kpp": b"\x1b[5~", # Page up - "kcuf1": b"\x1bOC", # Right arrow - "kcuu1": b"\x1bOA", # Up arrow - # Function keys F1-F20 - "kf1": b"\x1bOP", - "kf2": b"\x1bOQ", - "kf3": b"\x1bOR", - "kf4": b"\x1bOS", - "kf5": b"\x1b[15~", - "kf6": b"\x1b[17~", - "kf7": b"\x1b[18~", - "kf8": b"\x1b[19~", - "kf9": b"\x1b[20~", - "kf10": b"\x1b[21~", - "kf11": b"\x1b[23~", - "kf12": b"\x1b[24~", - "kf13": b"\x1b[1;2P", - "kf14": b"\x1b[1;2Q", - "kf15": b"\x1b[1;2R", - "kf16": b"\x1b[1;2S", - "kf17": b"\x1b[15;2~", - "kf18": b"\x1b[17;2~", - "kf19": b"\x1b[18;2~", - "kf20": b"\x1b[19;2~", - }, - # Dumb terminal - minimal capabilities - "dumb": { - "bel": b"\x07", # Bell - "cud1": b"\n", # Move down 1 row (newline) - "ind": b"\n", # Scroll up one line (newline) - }, - # Linux console - "linux": { - # Bell - "bel": b"\x07", - # Cursor movement - "cub": b"\x1b[%p1%dD", # Move cursor left N columns - "cud": b"\x1b[%p1%dB", # Move cursor down N rows - "cuf": b"\x1b[%p1%dC", # Move cursor right N columns - "cuu": b"\x1b[%p1%dA", # Move cursor up N rows - "cub1": b"\x08", # Move cursor left 1 column (backspace) - "cud1": b"\n", # Move cursor down 1 row (newline) - "cuf1": b"\x1b[C", # Move cursor right 1 column - "cuu1": b"\x1b[A", # Move cursor up 1 row - "cup": b"\x1b[%i%p1%d;%p2%dH", # Move cursor to row, column - "hpa": b"\x1b[%i%p1%dG", # Move cursor to column - # Clear operations - "clear": b"\x1b[H\x1b[J", # Clear screen and home cursor (different from ansi!) - "el": b"\x1b[K", # Clear to end of line - # Insert/delete - "dch": b"\x1b[%p1%dP", # Delete N characters - "dch1": b"\x1b[P", # Delete 1 character - "ich": b"\x1b[%p1%d@", # Insert N characters - "ich1": b"\x1b[@", # Insert 1 character - # Cursor visibility - "civis": b"\x1b[?25l\x1b[?1c", # Make cursor invisible - "cnorm": b"\x1b[?25h\x1b[?0c", # Make cursor normal - # Scrolling - "ind": b"\n", # Scroll up one line - "ri": b"\x1bM", # Scroll down one line - # Keypad mode - "smkx": b"\x1b[?1h\x1b=", # Enable keypad mode - "rmkx": b"\x1b[?1l\x1b>", # Disable keypad mode - # Function keys and special keys - "kdch1": b"\x1b[3~", # Delete key - "kcud1": b"\x1b[B", # Down arrow - "kend": b"\x1b[4~", # End key (different from ansi!) - "khome": b"\x1b[1~", # Home key (different from ansi!) - "kich1": b"\x1b[2~", # Insert key - "kcub1": b"\x1b[D", # Left arrow - "knp": b"\x1b[6~", # Page down - "kpp": b"\x1b[5~", # Page up - "kcuf1": b"\x1b[C", # Right arrow - "kcuu1": b"\x1b[A", # Up arrow - # Function keys - "kf1": b"\x1b[[A", - "kf2": b"\x1b[[B", - "kf3": b"\x1b[[C", - "kf4": b"\x1b[[D", - "kf5": b"\x1b[[E", - "kf6": b"\x1b[17~", - "kf7": b"\x1b[18~", - "kf8": b"\x1b[19~", - "kf9": b"\x1b[20~", - "kf10": b"\x1b[21~", - "kf11": b"\x1b[23~", - "kf12": b"\x1b[24~", - "kf13": b"\x1b[25~", - "kf14": b"\x1b[26~", - "kf15": b"\x1b[28~", - "kf16": b"\x1b[29~", - "kf17": b"\x1b[31~", - "kf18": b"\x1b[32~", - "kf19": b"\x1b[33~", - "kf20": b"\x1b[34~", - }, -} - -# Map common TERM values to capability sets -_TERM_ALIASES = { - "xterm": "ansi", - "xterm-color": "ansi", - "xterm-256color": "ansi", - "screen": "ansi", - "screen-256color": "ansi", - "tmux": "ansi", - "tmux-256color": "ansi", - "vt100": "ansi", - "vt220": "ansi", - "rxvt": "ansi", - "rxvt-unicode": "ansi", - "rxvt-unicode-256color": "ansi", - "unknown": "dumb", -} - - -@dataclass -class TermInfo: - terminal_name: str | bytes | None - fallback: bool = True - - _capabilities: dict[str, bytes] = field(default_factory=dict) - - def __post_init__(self) -> None: - """Initialize terminal capabilities for the given terminal type. - - Based on ncurses implementation in: - - ncurses/tinfo/lib_setup.c:setupterm() and _nc_setupterm() - - ncurses/tinfo/lib_setup.c:TINFO_SETUP_TERM() - - This version first attempts to read terminfo database files like ncurses, - then, if `fallback` is True, falls back to hardcoded capabilities for - common terminal types. - """ - # If termstr is None or empty, try to get from environment - if not self.terminal_name: - self.terminal_name = os.environ.get("TERM") or "ANSI" - - if isinstance(self.terminal_name, bytes): - self.terminal_name = self.terminal_name.decode("ascii") - - try: - self._parse_terminfo_file(self.terminal_name) - except (OSError, ValueError): - if not self.fallback: - raise - - term_type = _TERM_ALIASES.get( - self.terminal_name, self.terminal_name - ) - if term_type not in _TERMINAL_CAPABILITIES: - term_type = "dumb" - self._capabilities = _TERMINAL_CAPABILITIES[term_type].copy() - - def _parse_terminfo_file(self, terminal_name: str) -> None: - """Parse a terminfo file. - - Populate the _capabilities dict for easy retrieval - - Based on ncurses implementation in: - - ncurses/tinfo/read_entry.c:_nc_read_termtype() - - ncurses/tinfo/read_entry.c:_nc_read_file_entry() - - ncurses/tinfo/lib_ti.c:tigetstr() - """ - data = _read_terminfo_file(terminal_name) - too_short = f"TermInfo file for {terminal_name!r} too short" - offset = 12 - if len(data) < offset: - raise ValueError(too_short) - - magic, name_size, bool_count, num_count, str_count, str_size = ( - struct.unpack("<Hhhhhh", data[:offset]) - ) - - if magic == MAGIC16: - number_size = 2 - elif magic == MAGIC32: - number_size = 4 - else: - raise ValueError( - f"TermInfo file for {terminal_name!r} uses unknown magic" - ) - - # Skip data than PyREPL doesn't need: - # - names (`|`-separated ASCII strings) - # - boolean capabilities (bytes with value 0 or 1) - # - numbers (little-endian integers, `number_size` bytes each) - offset += name_size - offset += bool_count - if offset % 2: - # Align to even byte boundary for numbers - offset += 1 - offset += num_count * number_size - if offset > len(data): - raise ValueError(too_short) - - # Read string offsets - end_offset = offset + 2 * str_count - if offset > len(data): - raise ValueError(too_short) - string_offset_data = data[offset:end_offset] - string_offsets = [ - off for [off] in struct.iter_unpack("<h", string_offset_data) - ] - offset = end_offset - - # Read string table - if offset + str_size > len(data): - raise ValueError(too_short) - string_table = data[offset : offset + str_size] - - # Extract strings from string table - capabilities = {} - for cap, off in zip(_STRING_NAMES, string_offsets): - if off < 0: - # CANCELLED_STRING; we do not store those - continue - elif off < len(string_table): - # Find null terminator - end = string_table.find(0, off) - if end >= 0: - capabilities[cap] = string_table[off:end] - # in other cases this is ABSENT_STRING; we don't store those. - - # Note: we don't support extended capabilities since PyREPL doesn't - # need them. - - self._capabilities = capabilities - - def get(self, cap: str) -> bytes | None: - """Get terminal capability string by name. - """ - if not isinstance(cap, str): - raise TypeError(f"`cap` must be a string, not {type(cap)}") - - return self._capabilities.get(cap) - - -def tparm(cap_bytes: bytes, *params: int) -> bytes: - """Parameterize a terminal capability string. - - Based on ncurses implementation in: - - ncurses/tinfo/lib_tparm.c:tparm() - - ncurses/tinfo/lib_tparm.c:tparam_internal() - - The ncurses version implements a full stack-based interpreter for - terminfo parameter strings. This pure Python version implements only - the subset of parameter substitution operations needed by PyREPL: - - %i (increment parameters for 1-based indexing) - - %p[1-9]%d (parameter substitution) - - %p[1-9]%{n}%+%d (parameter plus constant) - """ - if not isinstance(cap_bytes, bytes): - raise TypeError(f"`cap` must be bytes, not {type(cap_bytes)}") - - result = cap_bytes - - # %i - increment parameters (1-based instead of 0-based) - increment = b"%i" in result - if increment: - result = result.replace(b"%i", b"") - - # Replace %p1%d, %p2%d, etc. with actual parameter values - for i in range(len(params)): - pattern = b"%%p%d%%d" % (i + 1) - if pattern in result: - value = params[i] - if increment: - value += 1 - result = result.replace(pattern, str(value).encode("ascii")) - - # Handle %p1%{1}%+%d (parameter plus constant) - # Used in some cursor positioning sequences - pattern_re = re.compile(rb"%p(\d)%\{(\d+)\}%\+%d") - matches = list(pattern_re.finditer(result)) - for match in reversed(matches): # reversed to maintain positions - param_idx = int(match.group(1)) - constant = int(match.group(2)) - value = params[param_idx] + constant - result = ( - result[: match.start()] - + str(value).encode("ascii") - + result[match.end() :] - ) - - return result diff --git a/Python314_4_x86_Template/Lib/_pyrepl/trace.py b/Python314_4_x86_Template/Lib/_pyrepl/trace.py deleted file mode 100644 index 943ee12f9..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/trace.py +++ /dev/null @@ -1,34 +0,0 @@ -from __future__ import annotations - -import os -import sys - -# types -if False: - from typing import IO - - -trace_file: IO[str] | None = None -if trace_filename := os.environ.get("PYREPL_TRACE"): - trace_file = open(trace_filename, "a") - - - -if sys.platform == "emscripten": - from posix import _emscripten_log - - def trace(line: str, *k: object, **kw: object) -> None: - if "PYREPL_TRACE" not in os.environ: - return - if k or kw: - line = line.format(*k, **kw) - _emscripten_log(line) - -else: - def trace(line: str, *k: object, **kw: object) -> None: - if trace_file is None: - return - if k or kw: - line = line.format(*k, **kw) - trace_file.write(line + "\n") - trace_file.flush() diff --git a/Python314_4_x86_Template/Lib/_pyrepl/types.py b/Python314_4_x86_Template/Lib/_pyrepl/types.py deleted file mode 100644 index c5b7ebc1a..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/types.py +++ /dev/null @@ -1,10 +0,0 @@ -from collections.abc import Callable, Iterator - -type Callback = Callable[[], object] -type SimpleContextManager = Iterator[None] -type KeySpec = str # like r"\C-c" -type CommandName = str # like "interrupt" -type EventTuple = tuple[CommandName, str] -type Completer = Callable[[str, int], str | None] -type CharBuffer = list[str] -type CharWidths = list[int] diff --git a/Python314_4_x86_Template/Lib/_pyrepl/unix_console.py b/Python314_4_x86_Template/Lib/_pyrepl/unix_console.py deleted file mode 100644 index 937b5df6f..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/unix_console.py +++ /dev/null @@ -1,843 +0,0 @@ -# Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com> -# Antonio Cuni -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -import errno -import os -import re -import select -import signal -import struct -import termios -import time -import types -import platform -from fcntl import ioctl - -from . import terminfo -from .console import Console, Event -from .fancy_termios import tcgetattr, tcsetattr, TermState -from .trace import trace -from .unix_eventqueue import EventQueue -from .utils import wlen - -# declare posix optional to allow None assignment on other platforms -posix: types.ModuleType | None -try: - import posix -except ImportError: - posix = None - -TYPE_CHECKING = False - -# types -if TYPE_CHECKING: - from typing import AbstractSet, IO, Literal, overload, cast -else: - overload = lambda func: None - cast = lambda typ, val: val - - -class InvalidTerminal(RuntimeError): - def __init__(self, message: str) -> None: - super().__init__(errno.EIO, message) - - -_error = (termios.error, InvalidTerminal) -_error_codes_to_ignore = frozenset([errno.EIO, errno.ENXIO, errno.EPERM]) - -SIGWINCH_EVENT = "repaint" - -FIONREAD = getattr(termios, "FIONREAD", None) -TIOCGWINSZ = getattr(termios, "TIOCGWINSZ", None) - -# ------------ start of baudrate definitions ------------ - -# Add (possibly) missing baudrates (check termios man page) to termios - - -def add_baudrate_if_supported(dictionary: dict[int, int], rate: int) -> None: - baudrate_name = "B%d" % rate - if hasattr(termios, baudrate_name): - dictionary[getattr(termios, baudrate_name)] = rate - - -# Check the termios man page (Line speed) to know where these -# values come from. -potential_baudrates = [ - 0, - 110, - 115200, - 1200, - 134, - 150, - 1800, - 19200, - 200, - 230400, - 2400, - 300, - 38400, - 460800, - 4800, - 50, - 57600, - 600, - 75, - 9600, -] - -ratedict: dict[int, int] = {} -for rate in potential_baudrates: - add_baudrate_if_supported(ratedict, rate) - -# Clean up variables to avoid unintended usage -del rate, add_baudrate_if_supported - -# ------------ end of baudrate definitions ------------ - -delayprog = re.compile(b"\\$<([0-9]+)((?:/|\\*){0,2})>") - -try: - poll: type[select.poll] = select.poll -except AttributeError: - # this is exactly the minimum necessary to support what we - # do with poll objects - class MinimalPoll: - def __init__(self): - pass - - def register(self, fd, flag): - self.fd = fd - - # note: The 'timeout' argument is received as *milliseconds* - def poll(self, timeout: float | None = None) -> list[int]: - if timeout is None: - r, w, e = select.select([self.fd], [], []) - else: - r, w, e = select.select([self.fd], [], [], timeout / 1000) - return r - - poll = MinimalPoll # type: ignore[assignment] - - -class UnixConsole(Console): - def __init__( - self, - f_in: IO[bytes] | int = 0, - f_out: IO[bytes] | int = 1, - term: str = "", - encoding: str = "", - ): - """ - Initialize the UnixConsole. - - Parameters: - - f_in (int or file-like object): Input file descriptor or object. - - f_out (int or file-like object): Output file descriptor or object. - - term (str): Terminal name. - - encoding (str): Encoding to use for I/O operations. - """ - super().__init__(f_in, f_out, term, encoding) - - self.pollob = poll() - self.pollob.register(self.input_fd, select.POLLIN) - self.terminfo = terminfo.TermInfo(term or None) - self.term = term - self.is_apple_terminal = ( - platform.system() == "Darwin" - and os.getenv("TERM_PROGRAM") == "Apple_Terminal" - ) - - try: - self.__input_fd_set(tcgetattr(self.input_fd), ignore=frozenset()) - except _error as e: - raise RuntimeError(f"termios failure ({e.args[1]})") - - @overload - def _my_getstr( - cap: str, optional: Literal[False] = False - ) -> bytes: ... - - @overload - def _my_getstr(cap: str, optional: bool) -> bytes | None: ... - - def _my_getstr(cap: str, optional: bool = False) -> bytes | None: - r = self.terminfo.get(cap) - if not optional and r is None: - raise InvalidTerminal( - f"terminal doesn't have the required {cap} capability" - ) - return r - - self._bel = _my_getstr("bel") - self._civis = _my_getstr("civis", optional=True) - self._clear = _my_getstr("clear") - self._cnorm = _my_getstr("cnorm", optional=True) - self._cub = _my_getstr("cub", optional=True) - self._cub1 = _my_getstr("cub1", optional=True) - self._cud = _my_getstr("cud", optional=True) - self._cud1 = _my_getstr("cud1", optional=True) - self._cuf = _my_getstr("cuf", optional=True) - self._cuf1 = _my_getstr("cuf1", optional=True) - self._cup = _my_getstr("cup") - self._cuu = _my_getstr("cuu", optional=True) - self._cuu1 = _my_getstr("cuu1", optional=True) - self._dch1 = _my_getstr("dch1", optional=True) - self._dch = _my_getstr("dch", optional=True) - self._el = _my_getstr("el") - self._hpa = _my_getstr("hpa", optional=True) - self._ich = _my_getstr("ich", optional=True) - self._ich1 = _my_getstr("ich1", optional=True) - self._ind = _my_getstr("ind", optional=True) - self._pad = _my_getstr("pad", optional=True) - self._ri = _my_getstr("ri", optional=True) - self._rmkx = _my_getstr("rmkx", optional=True) - self._smkx = _my_getstr("smkx", optional=True) - - self.__setup_movement() - - self.event_queue = EventQueue( - self.input_fd, self.encoding, self.terminfo - ) - self.cursor_visible = 1 - - signal.signal(signal.SIGCONT, self._sigcont_handler) - - def _sigcont_handler(self, signum, frame): - self.restore() - self.prepare() - - def __read(self, n: int) -> bytes: - return os.read(self.input_fd, n) - - def change_encoding(self, encoding: str) -> None: - """ - Change the encoding used for I/O operations. - - Parameters: - - encoding (str): New encoding to use. - """ - self.encoding = encoding - - def refresh(self, screen, c_xy): - """ - Refresh the console screen. - - Parameters: - - screen (list): List of strings representing the screen contents. - - c_xy (tuple): Cursor position (x, y) on the screen. - """ - cx, cy = c_xy - if not self.__gone_tall: - while len(self.screen) < min(len(screen), self.height): - self.__hide_cursor() - if self.screen: - self.__move(0, len(self.screen) - 1) - self.__write("\n") - self.posxy = 0, len(self.screen) - self.screen.append("") - else: - while len(self.screen) < len(screen): - self.screen.append("") - - if len(screen) > self.height: - self.__gone_tall = 1 - self.__move = self.__move_tall - - px, py = self.posxy - old_offset = offset = self.__offset - height = self.height - - # we make sure the cursor is on the screen, and that we're - # using all of the screen if we can - if cy < offset: - offset = cy - elif cy >= offset + height: - offset = cy - height + 1 - elif offset > 0 and len(screen) < offset + height: - offset = max(len(screen) - height, 0) - screen.append("") - - oldscr = self.screen[old_offset : old_offset + height] - newscr = screen[offset : offset + height] - - # use hardware scrolling if we have it. - if old_offset > offset and self._ri: - self.__hide_cursor() - self.__write_code(self._cup, 0, 0) - self.posxy = 0, old_offset - for i in range(old_offset - offset): - self.__write_code(self._ri) - oldscr.pop(-1) - oldscr.insert(0, "") - elif old_offset < offset and self._ind: - self.__hide_cursor() - self.__write_code(self._cup, self.height - 1, 0) - self.posxy = 0, old_offset + self.height - 1 - for i in range(offset - old_offset): - self.__write_code(self._ind) - oldscr.pop(0) - oldscr.append("") - - self.__offset = offset - - for ( - y, - oldline, - newline, - ) in zip(range(offset, offset + height), oldscr, newscr): - if oldline != newline: - self.__write_changed_line(y, oldline, newline, px) - - y = len(newscr) - while y < len(oldscr): - self.__hide_cursor() - self.__move(0, y) - self.posxy = 0, y - self.__write_code(self._el) - y += 1 - - self.__show_cursor() - - self.screen = screen.copy() - self.move_cursor(cx, cy) - self.flushoutput() - - def move_cursor(self, x, y): - """ - Move the cursor to the specified position on the screen. - - Parameters: - - x (int): X coordinate. - - y (int): Y coordinate. - """ - if y < self.__offset or y >= self.__offset + self.height: - self.event_queue.insert(Event("scroll", None)) - else: - self.__move(x, y) - self.posxy = x, y - self.flushoutput() - - def prepare(self): - """ - Prepare the console for input/output operations. - """ - self.__buffer = [] - - self.__svtermstate = tcgetattr(self.input_fd) - raw = self.__svtermstate.copy() - raw.iflag &= ~(termios.INPCK | termios.ISTRIP | termios.IXON) - raw.oflag &= ~(termios.OPOST) - raw.cflag &= ~(termios.CSIZE | termios.PARENB) - raw.cflag |= termios.CS8 - raw.iflag |= termios.BRKINT - raw.lflag &= ~(termios.ICANON | termios.ECHO | termios.IEXTEN) - raw.lflag |= termios.ISIG - raw.cc[termios.VMIN] = 1 - raw.cc[termios.VTIME] = 0 - self.__input_fd_set(raw) - - # In macOS terminal we need to deactivate line wrap via ANSI escape code - if self.is_apple_terminal: - os.write(self.output_fd, b"\033[?7l") - - self.screen = [] - self.height, self.width = self.getheightwidth() - - self.posxy = 0, 0 - self.__gone_tall = 0 - self.__move = self.__move_short - self.__offset = 0 - - self.__maybe_write_code(self._smkx) - - try: - self.old_sigwinch = signal.signal(signal.SIGWINCH, self.__sigwinch) - except ValueError: - pass - - self.__enable_bracketed_paste() - - def restore(self): - """ - Restore the console to the default state - """ - self.__disable_bracketed_paste() - self.__maybe_write_code(self._rmkx) - self.flushoutput() - self.__input_fd_set(self.__svtermstate) - - if self.is_apple_terminal: - os.write(self.output_fd, b"\033[?7h") - - if hasattr(self, "old_sigwinch"): - try: - signal.signal(signal.SIGWINCH, self.old_sigwinch) - except ValueError as e: - import threading - if threading.current_thread() is threading.main_thread(): - raise e - del self.old_sigwinch - - def push_char(self, char: int | bytes) -> None: - """ - Push a character to the console event queue. - """ - trace("push char {char!r}", char=char) - self.event_queue.push(char) - - def get_event(self, block: bool = True) -> Event | None: - """ - Get an event from the console event queue. - - Parameters: - - block (bool): Whether to block until an event is available. - - Returns: - - Event: Event object from the event queue. - """ - if not block and not self.wait(timeout=0): - return None - - while self.event_queue.empty(): - while True: - try: - self.push_char(self.__read(1)) - except OSError as err: - if err.errno == errno.EINTR: - if not self.event_queue.empty(): - return self.event_queue.get() - else: - continue - elif err.errno == errno.EIO: - raise SystemExit(errno.EIO) - else: - raise - else: - break - return self.event_queue.get() - - def wait(self, timeout: float | None = None) -> bool: - """ - Wait for events on the console. - """ - return ( - not self.event_queue.empty() - or bool(self.pollob.poll(timeout)) - ) - - def set_cursor_vis(self, visible): - """ - Set the visibility of the cursor. - - Parameters: - - visible (bool): Visibility flag. - """ - if visible: - self.__show_cursor() - else: - self.__hide_cursor() - - if TIOCGWINSZ: - - def getheightwidth(self): - """ - Get the height and width of the console. - - Returns: - - tuple: Height and width of the console. - """ - try: - return int(os.environ["LINES"]), int(os.environ["COLUMNS"]) - except (KeyError, TypeError, ValueError): - try: - size = ioctl(self.input_fd, TIOCGWINSZ, b"\000" * 8) - except OSError: - return 25, 80 - height, width = struct.unpack("hhhh", size)[0:2] - if not height: - return 25, 80 - return height, width - - else: - - def getheightwidth(self): - """ - Get the height and width of the console. - - Returns: - - tuple: Height and width of the console. - """ - try: - return int(os.environ["LINES"]), int(os.environ["COLUMNS"]) - except (KeyError, TypeError, ValueError): - return 25, 80 - - def forgetinput(self): - """ - Discard any pending input on the console. - """ - termios.tcflush(self.input_fd, termios.TCIFLUSH) - - def flushoutput(self): - """ - Flush the output buffer. - """ - for text, iscode in self.__buffer: - if iscode: - self.__tputs(text) - else: - os.write(self.output_fd, text.encode(self.encoding, "replace")) - del self.__buffer[:] - - def finish(self): - """ - Finish console operations and flush the output buffer. - """ - y = len(self.screen) - 1 - while y >= 0 and not self.screen[y]: - y -= 1 - self.__move(0, min(y, self.height + self.__offset - 1)) - self.__write("\n\r") - self.flushoutput() - - def beep(self): - """ - Emit a beep sound. - """ - self.__maybe_write_code(self._bel) - self.flushoutput() - - if FIONREAD: - - def getpending(self): - """ - Get pending events from the console event queue. - - Returns: - - Event: Pending event from the event queue. - """ - e = Event("key", "", b"") - - while not self.event_queue.empty(): - e2 = self.event_queue.get() - e.data += e2.data - e.raw += e.raw - - amount = struct.unpack("i", ioctl(self.input_fd, FIONREAD, b"\0\0\0\0"))[0] - trace("getpending({a})", a=amount) - raw = self.__read(amount) - data = str(raw, self.encoding, "replace") - e.data += data - e.raw += raw - return e - - else: - - def getpending(self): - """ - Get pending events from the console event queue. - - Returns: - - Event: Pending event from the event queue. - """ - e = Event("key", "", b"") - - while not self.event_queue.empty(): - e2 = self.event_queue.get() - e.data += e2.data - e.raw += e.raw - - amount = 10000 - raw = self.__read(amount) - data = str(raw, self.encoding, "replace") - e.data += data - e.raw += raw - return e - - def clear(self): - """ - Clear the console screen. - """ - self.__write_code(self._clear) - self.__gone_tall = 1 - self.__move = self.__move_tall - self.posxy = 0, 0 - self.screen = [] - - @property - def input_hook(self): - # avoid inline imports here so the repl doesn't get flooded - # with import logging from -X importtime=2 - if posix is not None and posix._is_inputhook_installed(): - return posix._inputhook - - def __enable_bracketed_paste(self) -> None: - os.write(self.output_fd, b"\x1b[?2004h") - - def __disable_bracketed_paste(self) -> None: - os.write(self.output_fd, b"\x1b[?2004l") - - def __setup_movement(self): - """ - Set up the movement functions based on the terminal capabilities. - """ - if 0 and self._hpa: # hpa don't work in windows telnet :-( - self.__move_x = self.__move_x_hpa - elif self._cub and self._cuf: - self.__move_x = self.__move_x_cub_cuf - elif self._cub1 and self._cuf1: - self.__move_x = self.__move_x_cub1_cuf1 - else: - raise RuntimeError("insufficient terminal (horizontal)") - - if self._cuu and self._cud: - self.__move_y = self.__move_y_cuu_cud - elif self._cuu1 and self._cud1: - self.__move_y = self.__move_y_cuu1_cud1 - else: - raise RuntimeError("insufficient terminal (vertical)") - - if self._dch1: - self.dch1 = self._dch1 - elif self._dch: - self.dch1 = terminfo.tparm(self._dch, 1) - else: - self.dch1 = None - - if self._ich1: - self.ich1 = self._ich1 - elif self._ich: - self.ich1 = terminfo.tparm(self._ich, 1) - else: - self.ich1 = None - - self.__move = self.__move_short - - def __write_changed_line(self, y, oldline, newline, px_coord): - # this is frustrating; there's no reason to test (say) - # self.dch1 inside the loop -- but alternative ways of - # structuring this function are equally painful (I'm trying to - # avoid writing code generators these days...) - minlen = min(wlen(oldline), wlen(newline)) - x_pos = 0 - x_coord = 0 - - px_pos = 0 - j = 0 - for c in oldline: - if j >= px_coord: - break - j += wlen(c) - px_pos += 1 - - # reuse the oldline as much as possible, but stop as soon as we - # encounter an ESCAPE, because it might be the start of an escape - # sequence - while ( - x_coord < minlen - and oldline[x_pos] == newline[x_pos] - and newline[x_pos] != "\x1b" - ): - x_coord += wlen(newline[x_pos]) - x_pos += 1 - - # if we need to insert a single character right after the first detected change - if oldline[x_pos:] == newline[x_pos + 1 :] and self.ich1: - if ( - y == self.posxy[1] - and x_coord > self.posxy[0] - and oldline[px_pos:x_pos] == newline[px_pos + 1 : x_pos + 1] - ): - x_pos = px_pos - x_coord = px_coord - character_width = wlen(newline[x_pos]) - self.__move(x_coord, y) - self.__write_code(self.ich1) - self.__write(newline[x_pos]) - self.posxy = x_coord + character_width, y - - # if it's a single character change in the middle of the line - elif ( - x_coord < minlen - and oldline[x_pos + 1 :] == newline[x_pos + 1 :] - and wlen(oldline[x_pos]) == wlen(newline[x_pos]) - ): - character_width = wlen(newline[x_pos]) - self.__move(x_coord, y) - self.__write(newline[x_pos]) - self.posxy = x_coord + character_width, y - - # if this is the last character to fit in the line and we edit in the middle of the line - elif ( - self.dch1 - and self.ich1 - and wlen(newline) == self.width - and x_coord < wlen(newline) - 2 - and newline[x_pos + 1 : -1] == oldline[x_pos:-2] - ): - self.__hide_cursor() - self.__move(self.width - 2, y) - self.posxy = self.width - 2, y - self.__write_code(self.dch1) - - character_width = wlen(newline[x_pos]) - self.__move(x_coord, y) - self.__write_code(self.ich1) - self.__write(newline[x_pos]) - self.posxy = character_width + 1, y - - else: - self.__hide_cursor() - self.__move(x_coord, y) - if wlen(oldline) > wlen(newline): - self.__write_code(self._el) - self.__write(newline[x_pos:]) - self.posxy = wlen(newline), y - - if "\x1b" in newline: - # ANSI escape characters are present, so we can't assume - # anything about the position of the cursor. Moving the cursor - # to the left margin should work to get to a known position. - self.move_cursor(0, y) - - def __write(self, text): - self.__buffer.append((text, 0)) - - def __write_code(self, fmt, *args): - self.__buffer.append((terminfo.tparm(fmt, *args), 1)) - - def __maybe_write_code(self, fmt, *args): - if fmt: - self.__write_code(fmt, *args) - - def __move_y_cuu1_cud1(self, y): - assert self._cud1 is not None - assert self._cuu1 is not None - dy = y - self.posxy[1] - if dy > 0: - self.__write_code(dy * self._cud1) - elif dy < 0: - self.__write_code((-dy) * self._cuu1) - - def __move_y_cuu_cud(self, y): - dy = y - self.posxy[1] - if dy > 0: - self.__write_code(self._cud, dy) - elif dy < 0: - self.__write_code(self._cuu, -dy) - - def __move_x_hpa(self, x: int) -> None: - if x != self.posxy[0]: - self.__write_code(self._hpa, x) - - def __move_x_cub1_cuf1(self, x: int) -> None: - assert self._cuf1 is not None - assert self._cub1 is not None - dx = x - self.posxy[0] - if dx > 0: - self.__write_code(self._cuf1 * dx) - elif dx < 0: - self.__write_code(self._cub1 * (-dx)) - - def __move_x_cub_cuf(self, x: int) -> None: - dx = x - self.posxy[0] - if dx > 0: - self.__write_code(self._cuf, dx) - elif dx < 0: - self.__write_code(self._cub, -dx) - - def __move_short(self, x, y): - self.__move_x(x) - self.__move_y(y) - - def __move_tall(self, x, y): - assert 0 <= y - self.__offset < self.height, y - self.__offset - self.__write_code(self._cup, y - self.__offset, x) - - def __sigwinch(self, signum, frame): - self.height, self.width = self.getheightwidth() - self.event_queue.insert(Event("resize", None)) - - def __hide_cursor(self): - if self.cursor_visible: - self.__maybe_write_code(self._civis) - self.cursor_visible = 0 - - def __show_cursor(self): - if not self.cursor_visible: - self.__maybe_write_code(self._cnorm) - self.cursor_visible = 1 - - def repaint(self): - if not self.__gone_tall: - self.posxy = 0, self.posxy[1] - self.__write("\r") - ns = len(self.screen) * ["\000" * self.width] - self.screen = ns - else: - self.posxy = 0, self.__offset - self.__move(0, self.__offset) - ns = self.height * ["\000" * self.width] - self.screen = ns - - def __tputs(self, fmt, prog=delayprog): - """A Python implementation of the curses tputs function; the - curses one can't really be wrapped in a sane manner. - - I have the strong suspicion that this is complexity that - will never do anyone any good.""" - # using .get() means that things will blow up - # only if the bps is actually needed (which I'm - # betting is pretty unlikely) - bps = ratedict.get(self.__svtermstate.ospeed) - while True: - m = prog.search(fmt) - if not m: - os.write(self.output_fd, fmt) - break - x, y = m.span() - os.write(self.output_fd, fmt[:x]) - fmt = fmt[y:] - delay = int(m.group(1)) - if b"*" in m.group(2): - delay *= self.height - if self._pad and bps is not None: - nchars = (bps * delay) / 1000 - os.write(self.output_fd, self._pad * nchars) - else: - time.sleep(float(delay) / 1000.0) - - def __input_fd_set( - self, - state: TermState, - ignore: AbstractSet[int] = _error_codes_to_ignore, - ) -> bool: - try: - tcsetattr(self.input_fd, termios.TCSADRAIN, state) - except termios.error as te: - if te.args[0] not in ignore: - raise - return False - else: - return True diff --git a/Python314_4_x86_Template/Lib/_pyrepl/unix_eventqueue.py b/Python314_4_x86_Template/Lib/_pyrepl/unix_eventqueue.py deleted file mode 100644 index 2a9cca59e..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/unix_eventqueue.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com> -# Armin Rigo -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from .terminfo import TermInfo -from .trace import trace -from .base_eventqueue import BaseEventQueue -from termios import tcgetattr, VERASE -import os - - -# Mapping of human-readable key names to their terminal-specific codes -TERMINAL_KEYNAMES = { - "delete": "kdch1", - "down": "kcud1", - "end": "kend", - "enter": "kent", - "home": "khome", - "insert": "kich1", - "left": "kcub1", - "page down": "knp", - "page up": "kpp", - "right": "kcuf1", - "up": "kcuu1", -} - - -# Function keys F1-F20 mapping -TERMINAL_KEYNAMES.update(("f%d" % i, "kf%d" % i) for i in range(1, 21)) - -# Known CTRL-arrow keycodes -CTRL_ARROW_KEYCODES= { - # for xterm, gnome-terminal, xfce terminal, etc. - b'\033[1;5D': 'ctrl left', - b'\033[1;5C': 'ctrl right', - # for rxvt - b'\033Od': 'ctrl left', - b'\033Oc': 'ctrl right', -} - -def get_terminal_keycodes(ti: TermInfo) -> dict[bytes, str]: - """ - Generates a dictionary mapping terminal keycodes to human-readable names. - """ - keycodes = {} - for key, terminal_code in TERMINAL_KEYNAMES.items(): - keycode = ti.get(terminal_code) - trace('key {key} tiname {terminal_code} keycode {keycode!r}', **locals()) - if keycode: - keycodes[keycode] = key - keycodes.update(CTRL_ARROW_KEYCODES) - return keycodes - - -class EventQueue(BaseEventQueue): - def __init__(self, fd: int, encoding: str, ti: TermInfo) -> None: - keycodes = get_terminal_keycodes(ti) - if os.isatty(fd): - backspace = tcgetattr(fd)[6][VERASE] - keycodes[backspace] = "backspace" - BaseEventQueue.__init__(self, encoding, keycodes) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/utils.py b/Python314_4_x86_Template/Lib/_pyrepl/utils.py deleted file mode 100644 index 06cddef85..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/utils.py +++ /dev/null @@ -1,391 +0,0 @@ -from __future__ import annotations -import builtins -import functools -import keyword -import re -import token as T -import tokenize -import unicodedata -import _colorize - -from collections import deque -from io import StringIO -from tokenize import TokenInfo as TI -from typing import Iterable, Iterator, Match, NamedTuple, Self - -from .types import CharBuffer, CharWidths -from .trace import trace - -ANSI_ESCAPE_SEQUENCE = re.compile(r"\x1b\[[ -@]*[A-~]") -ZERO_WIDTH_BRACKET = re.compile(r"\x01.*?\x02") -ZERO_WIDTH_TRANS = str.maketrans({"\x01": "", "\x02": ""}) -IDENTIFIERS_AFTER = {"def", "class"} -KEYWORD_CONSTANTS = {"True", "False", "None"} -BUILTINS = {str(name) for name in dir(builtins) if not name.startswith('_')} - - -def THEME(**kwargs): - # Not cached: the user can modify the theme inside the interactive session. - return _colorize.get_theme(**kwargs).syntax - - -class Span(NamedTuple): - """Span indexing that's inclusive on both ends.""" - - start: int - end: int - - @classmethod - def from_re(cls, m: Match[str], group: int | str) -> Self: - re_span = m.span(group) - return cls(re_span[0], re_span[1] - 1) - - @classmethod - def from_token(cls, token: TI, line_len: list[int]) -> Self: - end_offset = -1 - if (token.type in {T.FSTRING_MIDDLE, T.TSTRING_MIDDLE} - and token.string.endswith(("{", "}"))): - # gh-134158: a visible trailing brace comes from a double brace in input - end_offset += 1 - - return cls( - line_len[token.start[0] - 1] + token.start[1], - line_len[token.end[0] - 1] + token.end[1] + end_offset, - ) - - -class ColorSpan(NamedTuple): - span: Span - tag: str - - -@functools.cache -def str_width(c: str) -> int: - if ord(c) < 128: - return 1 - # gh-139246 for zero-width joiner and combining characters - if unicodedata.combining(c): - return 0 - category = unicodedata.category(c) - if category == "Cf" and c != "\u00ad": - return 0 - w = unicodedata.east_asian_width(c) - if w in ("N", "Na", "H", "A"): - return 1 - return 2 - - -def wlen(s: str) -> int: - if len(s) == 1 and s != "\x1a": - return str_width(s) - length = sum(str_width(i) for i in s) - # remove lengths of any escape sequences - sequence = ANSI_ESCAPE_SEQUENCE.findall(s) - ctrl_z_cnt = s.count("\x1a") - return length - sum(len(i) for i in sequence) + ctrl_z_cnt - - -def unbracket(s: str, including_content: bool = False) -> str: - r"""Return `s` with \001 and \002 characters removed. - - If `including_content` is True, content between \001 and \002 is also - stripped. - """ - if including_content: - return ZERO_WIDTH_BRACKET.sub("", s) - return s.translate(ZERO_WIDTH_TRANS) - - -def gen_colors(buffer: str) -> Iterator[ColorSpan]: - """Returns a list of index spans to color using the given color tag. - - The input `buffer` should be a valid start of a Python code block, i.e. - it cannot be a block starting in the middle of a multiline string. - """ - sio = StringIO(buffer) - line_lengths = [0] + [len(line) for line in sio.readlines()] - # make line_lengths cumulative - for i in range(1, len(line_lengths)): - line_lengths[i] += line_lengths[i-1] - - sio.seek(0) - gen = tokenize.generate_tokens(sio.readline) - last_emitted: ColorSpan | None = None - try: - for color in gen_colors_from_token_stream(gen, line_lengths): - yield color - last_emitted = color - except SyntaxError: - return - except tokenize.TokenError as te: - yield from recover_unterminated_string( - te, line_lengths, last_emitted, buffer - ) - - -def recover_unterminated_string( - exc: tokenize.TokenError, - line_lengths: list[int], - last_emitted: ColorSpan | None, - buffer: str, -) -> Iterator[ColorSpan]: - msg, loc = exc.args - if loc is None: - return - - line_no, column = loc - - if msg.startswith( - ( - "unterminated string literal", - "unterminated f-string literal", - "unterminated t-string literal", - "EOF in multi-line string", - "unterminated triple-quoted f-string literal", - "unterminated triple-quoted t-string literal", - ) - ): - start = line_lengths[line_no - 1] + column - 1 - end = line_lengths[-1] - 1 - - # in case FSTRING_START was already emitted - if last_emitted and start <= last_emitted.span.start: - trace("before last emitted = {s}", s=start) - start = last_emitted.span.end + 1 - - span = Span(start, end) - trace("yielding span {a} -> {b}", a=span.start, b=span.end) - yield ColorSpan(span, "string") - else: - trace( - "unhandled token error({buffer}) = {te}", - buffer=repr(buffer), - te=str(exc), - ) - - -def gen_colors_from_token_stream( - token_generator: Iterator[TI], - line_lengths: list[int], -) -> Iterator[ColorSpan]: - token_window = prev_next_window(token_generator) - - is_def_name = False - bracket_level = 0 - for prev_token, token, next_token in token_window: - assert token is not None - if token.start == token.end: - continue - - match token.type: - case ( - T.STRING - | T.FSTRING_START | T.FSTRING_MIDDLE | T.FSTRING_END - | T.TSTRING_START | T.TSTRING_MIDDLE | T.TSTRING_END - ): - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "string") - case T.COMMENT: - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "comment") - case T.NUMBER: - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "number") - case T.OP: - if token.string in "([{": - bracket_level += 1 - elif token.string in ")]}": - bracket_level -= 1 - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "op") - case T.NAME: - if is_def_name: - is_def_name = False - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "definition") - elif keyword.iskeyword(token.string): - span_cls = "keyword" - if token.string in KEYWORD_CONSTANTS: - span_cls = "keyword_constant" - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, span_cls) - if token.string in IDENTIFIERS_AFTER: - is_def_name = True - elif ( - keyword.issoftkeyword(token.string) - and bracket_level == 0 - and is_soft_keyword_used(prev_token, token, next_token) - ): - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "soft_keyword") - elif ( - token.string in BUILTINS - and not (prev_token and prev_token.exact_type == T.DOT) - ): - span = Span.from_token(token, line_lengths) - yield ColorSpan(span, "builtin") - - -keyword_first_sets_match = {"False", "None", "True", "await", "lambda", "not"} -keyword_first_sets_case = {"False", "None", "True"} - - -def is_soft_keyword_used(*tokens: TI | None) -> bool: - """Returns True if the current token is a keyword in this context. - - For the `*tokens` to match anything, they have to be a three-tuple of - (previous, current, next). - """ - trace("is_soft_keyword_used{t}", t=tokens) - match tokens: - case ( - None | TI(T.NEWLINE) | TI(T.INDENT) | TI(string=":"), - TI(string="match"), - TI(T.NUMBER | T.STRING | T.FSTRING_START | T.TSTRING_START) - | TI(T.OP, string="(" | "*" | "[" | "{" | "~" | "...") - ): - return True - case ( - None | TI(T.NEWLINE) | TI(T.INDENT) | TI(string=":"), - TI(string="match"), - TI(T.NAME, string=s) - ): - if keyword.iskeyword(s): - return s in keyword_first_sets_match - return True - case ( - None | TI(T.NEWLINE) | TI(T.INDENT) | TI(T.DEDENT) | TI(string=":"), - TI(string="case"), - TI(T.NUMBER | T.STRING | T.FSTRING_START | T.TSTRING_START) - | TI(T.OP, string="(" | "*" | "-" | "[" | "{") - ): - return True - case ( - None | TI(T.NEWLINE) | TI(T.INDENT) | TI(T.DEDENT) | TI(string=":"), - TI(string="case"), - TI(T.NAME, string=s) - ): - if keyword.iskeyword(s): - return s in keyword_first_sets_case - return True - case (TI(string="case"), TI(string="_"), TI(string=":")): - return True - case ( - None | TI(T.NEWLINE) | TI(T.INDENT) | TI(T.DEDENT) | TI(string=":"), - TI(string="type"), - TI(T.NAME, string=s) - ): - return not keyword.iskeyword(s) - case _: - return False - - -def disp_str( - buffer: str, - colors: list[ColorSpan] | None = None, - start_index: int = 0, - force_color: bool = False, -) -> tuple[CharBuffer, CharWidths]: - r"""Decompose the input buffer into a printable variant with applied colors. - - Returns a tuple of two lists: - - the first list is the input buffer, character by character, with color - escape codes added (while those codes contain multiple ASCII characters, - each code is considered atomic *and is attached for the corresponding - visible character*); - - the second list is the visible width of each character in the input - buffer. - - Note on colors: - - The `colors` list, if provided, is partially consumed within. We're using - a list and not a generator since we need to hold onto the current - unfinished span between calls to disp_str in case of multiline strings. - - The `colors` list is computed from the start of the input block. `buffer` - is only a subset of that input block, a single line within. This is why - we need `start_index` to inform us which position is the start of `buffer` - actually within user input. This allows us to match color spans correctly. - - Examples: - >>> utils.disp_str("a = 9") - (['a', ' ', '=', ' ', '9'], [1, 1, 1, 1, 1]) - - >>> line = "while 1:" - >>> colors = list(utils.gen_colors(line)) - >>> utils.disp_str(line, colors=colors) - (['\x1b[1;34mw', 'h', 'i', 'l', 'e\x1b[0m', ' ', '1', ':'], [1, 1, 1, 1, 1, 1, 1, 1]) - - """ - chars: CharBuffer = [] - char_widths: CharWidths = [] - - if not buffer: - return chars, char_widths - - while colors and colors[0].span.end < start_index: - # move past irrelevant spans - colors.pop(0) - - theme = THEME(force_color=force_color) - pre_color = "" - post_color = "" - if colors and colors[0].span.start < start_index: - # looks like we're continuing a previous color (e.g. a multiline str) - pre_color = theme[colors[0].tag] - - for i, c in enumerate(buffer, start_index): - if colors and colors[0].span.start == i: # new color starts now - pre_color = theme[colors[0].tag] - - if c == "\x1a": # CTRL-Z on Windows - chars.append(c) - char_widths.append(2) - elif ord(c) < 128: - chars.append(c) - char_widths.append(1) - elif unicodedata.category(c).startswith("C"): - c = r"\u%04x" % ord(c) - chars.append(c) - char_widths.append(len(c)) - else: - chars.append(c) - char_widths.append(str_width(c)) - - if colors and colors[0].span.end == i: # current color ends now - post_color = theme.reset - colors.pop(0) - - chars[-1] = pre_color + chars[-1] + post_color - pre_color = "" - post_color = "" - - if colors and colors[0].span.start < i and colors[0].span.end > i: - # even though the current color should be continued, reset it for now. - # the next call to `disp_str()` will revive it. - chars[-1] += theme.reset - - return chars, char_widths - - -def prev_next_window[T]( - iterable: Iterable[T] -) -> Iterator[tuple[T | None, ...]]: - """Generates three-tuples of (previous, current, next) items. - - On the first iteration previous is None. On the last iteration next - is None. In case of exception next is None and the exception is re-raised - on a subsequent next() call. - - Inspired by `sliding_window` from `itertools` recipes. - """ - - iterator = iter(iterable) - window = deque((None, next(iterator)), maxlen=3) - try: - for x in iterator: - window.append(x) - yield tuple(window) - except Exception: - raise - finally: - window.append(None) - yield tuple(window) diff --git a/Python314_4_x86_Template/Lib/_pyrepl/windows_console.py b/Python314_4_x86_Template/Lib/_pyrepl/windows_console.py deleted file mode 100644 index 46c603074..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/windows_console.py +++ /dev/null @@ -1,730 +0,0 @@ -# Copyright 2000-2004 Michael Hudson-Doyle <micahel@gmail.com> -# -# All Rights Reserved -# -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose is hereby granted without fee, -# provided that the above copyright notice appear in all copies and -# that both that copyright notice and this permission notice appear in -# supporting documentation. -# -# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO -# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import annotations - -import io -import os -import sys - -import ctypes -import types -from ctypes.wintypes import ( - _COORD, - WORD, - SMALL_RECT, - BOOL, - HANDLE, - CHAR, - DWORD, - WCHAR, - SHORT, -) -from ctypes import Structure, POINTER, Union -from .console import Event, Console -from .trace import trace -from .utils import wlen -from .windows_eventqueue import EventQueue - -try: - from ctypes import get_last_error, GetLastError, WinDLL, windll, WinError # type: ignore[attr-defined] -except: - # Keep MyPy happy off Windows - from ctypes import CDLL as WinDLL, cdll as windll - - def GetLastError() -> int: - return 42 - - def get_last_error() -> int: - return 42 - - class WinError(OSError): # type: ignore[no-redef] - def __init__(self, err: int | None, descr: str | None = None) -> None: - self.err = err - self.descr = descr - -# declare nt optional to allow None assignment on other platforms -nt: types.ModuleType | None -try: - import nt -except ImportError: - nt = None - -TYPE_CHECKING = False - -if TYPE_CHECKING: - from typing import IO - -# Virtual-Key Codes: https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes -VK_MAP: dict[int, str] = { - 0x23: "end", # VK_END - 0x24: "home", # VK_HOME - 0x25: "left", # VK_LEFT - 0x26: "up", # VK_UP - 0x27: "right", # VK_RIGHT - 0x28: "down", # VK_DOWN - 0x2E: "delete", # VK_DELETE - 0x70: "f1", # VK_F1 - 0x71: "f2", # VK_F2 - 0x72: "f3", # VK_F3 - 0x73: "f4", # VK_F4 - 0x74: "f5", # VK_F5 - 0x75: "f6", # VK_F6 - 0x76: "f7", # VK_F7 - 0x77: "f8", # VK_F8 - 0x78: "f9", # VK_F9 - 0x79: "f10", # VK_F10 - 0x7A: "f11", # VK_F11 - 0x7B: "f12", # VK_F12 - 0x7C: "f13", # VK_F13 - 0x7D: "f14", # VK_F14 - 0x7E: "f15", # VK_F15 - 0x7F: "f16", # VK_F16 - 0x80: "f17", # VK_F17 - 0x81: "f18", # VK_F18 - 0x82: "f19", # VK_F19 - 0x83: "f20", # VK_F20 -} - -# Virtual terminal output sequences -# Reference: https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#output-sequences -# Check `windows_eventqueue.py` for input sequences -ERASE_IN_LINE = "\x1b[K" -MOVE_LEFT = "\x1b[{}D" -MOVE_RIGHT = "\x1b[{}C" -MOVE_UP = "\x1b[{}A" -MOVE_DOWN = "\x1b[{}B" -CLEAR = "\x1b[H\x1b[J" - -# State of control keys: https://learn.microsoft.com/en-us/windows/console/key-event-record-str -ALT_ACTIVE = 0x01 | 0x02 -CTRL_ACTIVE = 0x04 | 0x08 - -WAIT_TIMEOUT = 0x102 -WAIT_FAILED = 0xFFFFFFFF - -# from winbase.h -INFINITE = 0xFFFFFFFF - - -class _error(Exception): - pass - -def _supports_vt(): - try: - return nt._supports_virtual_terminal() - except AttributeError: - return False - -class WindowsConsole(Console): - def __init__( - self, - f_in: IO[bytes] | int = 0, - f_out: IO[bytes] | int = 1, - term: str = "", - encoding: str = "", - ): - super().__init__(f_in, f_out, term, encoding) - - self.__vt_support = _supports_vt() - - if self.__vt_support: - trace('console supports virtual terminal') - - # Save original console modes so we can recover on cleanup. - original_input_mode = DWORD() - GetConsoleMode(InHandle, original_input_mode) - trace(f'saved original input mode 0x{original_input_mode.value:x}') - self.__original_input_mode = original_input_mode.value - - SetConsoleMode( - OutHandle, - ENABLE_WRAP_AT_EOL_OUTPUT - | ENABLE_PROCESSED_OUTPUT - | ENABLE_VIRTUAL_TERMINAL_PROCESSING, - ) - - self.screen: list[str] = [] - self.width = 80 - self.height = 25 - self.__offset = 0 - self.event_queue = EventQueue(encoding) - try: - self.out = io._WindowsConsoleIO(self.output_fd, "w") # type: ignore[attr-defined] - except ValueError: - # Console I/O is redirected, fallback... - self.out = None - - def refresh(self, screen: list[str], c_xy: tuple[int, int]) -> None: - """ - Refresh the console screen. - - Parameters: - - screen (list): List of strings representing the screen contents. - - c_xy (tuple): Cursor position (x, y) on the screen. - """ - cx, cy = c_xy - - while len(self.screen) < min(len(screen), self.height): - self._hide_cursor() - if self.screen: - self._move_relative(0, len(self.screen) - 1) - self.__write("\n") - self.posxy = 0, len(self.screen) - self.screen.append("") - - px, py = self.posxy - old_offset = offset = self.__offset - height = self.height - - # we make sure the cursor is on the screen, and that we're - # using all of the screen if we can - if cy < offset: - offset = cy - elif cy >= offset + height: - offset = cy - height + 1 - scroll_lines = offset - old_offset - - # Scrolling the buffer as the current input is greater than the visible - # portion of the window. We need to scroll the visible portion and the - # entire history - self._scroll(scroll_lines, self._getscrollbacksize()) - self.posxy = self.posxy[0], self.posxy[1] + scroll_lines - self.__offset += scroll_lines - - for i in range(scroll_lines): - self.screen.append("") - elif offset > 0 and len(screen) < offset + height: - offset = max(len(screen) - height, 0) - screen.append("") - - oldscr = self.screen[old_offset : old_offset + height] - newscr = screen[offset : offset + height] - - self.__offset = offset - - self._hide_cursor() - for ( - y, - oldline, - newline, - ) in zip(range(offset, offset + height), oldscr, newscr): - if oldline != newline: - self.__write_changed_line(y, oldline, newline, px) - - y = len(newscr) - while y < len(oldscr): - self._move_relative(0, y) - self.posxy = 0, y - self._erase_to_end() - y += 1 - - self._show_cursor() - - self.screen = screen - self.move_cursor(cx, cy) - - @property - def input_hook(self): - # avoid inline imports here so the repl doesn't get flooded - # with import logging from -X importtime=2 - if nt is not None and nt._is_inputhook_installed(): - return nt._inputhook - - def __write_changed_line( - self, y: int, oldline: str, newline: str, px_coord: int - ) -> None: - # this is frustrating; there's no reason to test (say) - # self.dch1 inside the loop -- but alternative ways of - # structuring this function are equally painful (I'm trying to - # avoid writing code generators these days...) - minlen = min(wlen(oldline), wlen(newline)) - x_pos = 0 - x_coord = 0 - - px_pos = 0 - j = 0 - for c in oldline: - if j >= px_coord: - break - j += wlen(c) - px_pos += 1 - - # reuse the oldline as much as possible, but stop as soon as we - # encounter an ESCAPE, because it might be the start of an escape - # sequence - while ( - x_coord < minlen - and oldline[x_pos] == newline[x_pos] - and newline[x_pos] != "\x1b" - ): - x_coord += wlen(newline[x_pos]) - x_pos += 1 - - self._hide_cursor() - self._move_relative(x_coord, y) - if wlen(oldline) > wlen(newline): - self._erase_to_end() - - self.__write(newline[x_pos:]) - self.posxy = min(wlen(newline), self.width - 1), y - - if "\x1b" in newline or y != self.posxy[1] or '\x1a' in newline: - # ANSI escape characters are present, so we can't assume - # anything about the position of the cursor. Moving the cursor - # to the left margin should work to get to a known position. - self.move_cursor(0, y) - - def _scroll( - self, top: int, bottom: int, left: int | None = None, right: int | None = None - ) -> None: - scroll_rect = SMALL_RECT() - scroll_rect.Top = SHORT(top) - scroll_rect.Bottom = SHORT(bottom) - scroll_rect.Left = SHORT(0 if left is None else left) - scroll_rect.Right = SHORT( - self.getheightwidth()[1] - 1 if right is None else right - ) - destination_origin = _COORD() - fill_info = CHAR_INFO() - fill_info.UnicodeChar = " " - - if not ScrollConsoleScreenBuffer( - OutHandle, scroll_rect, None, destination_origin, fill_info - ): - raise WinError(GetLastError()) - - def _hide_cursor(self): - self.__write("\x1b[?25l") - - def _show_cursor(self): - self.__write("\x1b[?25h") - - def _enable_blinking(self): - self.__write("\x1b[?12h") - - def _disable_blinking(self): - self.__write("\x1b[?12l") - - def _enable_bracketed_paste(self) -> None: - self.__write("\x1b[?2004h") - - def _disable_bracketed_paste(self) -> None: - self.__write("\x1b[?2004l") - - def __write(self, text: str) -> None: - if "\x1a" in text: - text = ''.join(["^Z" if x == '\x1a' else x for x in text]) - - if self.out is not None: - self.out.write(text.encode(self.encoding, "replace")) - self.out.flush() - else: - os.write(self.output_fd, text.encode(self.encoding, "replace")) - - @property - def screen_xy(self) -> tuple[int, int]: - info = CONSOLE_SCREEN_BUFFER_INFO() - if not GetConsoleScreenBufferInfo(OutHandle, info): - raise WinError(GetLastError()) - return info.dwCursorPosition.X, info.dwCursorPosition.Y - - def _erase_to_end(self) -> None: - self.__write(ERASE_IN_LINE) - - def prepare(self) -> None: - trace("prepare") - self.screen = [] - self.height, self.width = self.getheightwidth() - - self.posxy = 0, 0 - self.__gone_tall = 0 - self.__offset = 0 - - if self.__vt_support: - SetConsoleMode(InHandle, self.__original_input_mode | ENABLE_VIRTUAL_TERMINAL_INPUT) - self._enable_bracketed_paste() - - def restore(self) -> None: - if self.__vt_support: - # Recover to original mode before running REPL - self._disable_bracketed_paste() - SetConsoleMode(InHandle, self.__original_input_mode) - - def _move_relative(self, x: int, y: int) -> None: - """Moves relative to the current posxy""" - dx = x - self.posxy[0] - dy = y - self.posxy[1] - if dx < 0: - self.__write(MOVE_LEFT.format(-dx)) - elif dx > 0: - self.__write(MOVE_RIGHT.format(dx)) - - if dy < 0: - self.__write(MOVE_UP.format(-dy)) - elif dy > 0: - self.__write(MOVE_DOWN.format(dy)) - - def move_cursor(self, x: int, y: int) -> None: - if x < 0 or y < 0: - raise ValueError(f"Bad cursor position {x}, {y}") - - if y < self.__offset or y >= self.__offset + self.height: - self.event_queue.insert(Event("scroll", "")) - else: - self._move_relative(x, y) - self.posxy = x, y - - def set_cursor_vis(self, visible: bool) -> None: - if visible: - self._show_cursor() - else: - self._hide_cursor() - - def getheightwidth(self) -> tuple[int, int]: - """Return (height, width) where height and width are the height - and width of the terminal window in characters.""" - info = CONSOLE_SCREEN_BUFFER_INFO() - if not GetConsoleScreenBufferInfo(OutHandle, info): - raise WinError(GetLastError()) - return ( - info.srWindow.Bottom - info.srWindow.Top + 1, - info.srWindow.Right - info.srWindow.Left + 1, - ) - - def _getscrollbacksize(self) -> int: - info = CONSOLE_SCREEN_BUFFER_INFO() - if not GetConsoleScreenBufferInfo(OutHandle, info): - raise WinError(GetLastError()) - - return info.srWindow.Bottom # type: ignore[no-any-return] - - def _read_input(self) -> INPUT_RECORD | None: - rec = INPUT_RECORD() - read = DWORD() - if not ReadConsoleInput(InHandle, rec, 1, read): - raise WinError(GetLastError()) - - return rec - - def _read_input_bulk( - self, n: int - ) -> tuple[ctypes.Array[INPUT_RECORD], int]: - rec = (n * INPUT_RECORD)() - read = DWORD() - if not ReadConsoleInput(InHandle, rec, n, read): - raise WinError(GetLastError()) - - return rec, read.value - - def get_event(self, block: bool = True) -> Event | None: - """Return an Event instance. Returns None if |block| is false - and there is no event pending, otherwise waits for the - completion of an event.""" - - if not block and not self.wait(timeout=0): - return None - - while self.event_queue.empty(): - rec = self._read_input() - if rec is None: - return None - - if rec.EventType == WINDOW_BUFFER_SIZE_EVENT: - return Event("resize", "") - - if rec.EventType != KEY_EVENT or not rec.Event.KeyEvent.bKeyDown: - # Only process keys and keydown events - if block: - continue - return None - - key_event = rec.Event.KeyEvent - raw_key = key = key_event.uChar.UnicodeChar - - if key == "\r": - # Make enter unix-like - return Event(evt="key", data="\n") - elif key_event.wVirtualKeyCode == 8: - # Turn backspace directly into the command - key = "backspace" - elif key == "\x00": - # Handle special keys like arrow keys and translate them into the appropriate command - key = VK_MAP.get(key_event.wVirtualKeyCode) - if key: - if key_event.dwControlKeyState & CTRL_ACTIVE: - key = f"ctrl {key}" - elif key_event.dwControlKeyState & ALT_ACTIVE: - # queue the key, return the meta command - self.event_queue.insert(Event(evt="key", data=key)) - return Event(evt="key", data="\033") # keymap.py uses this for meta - return Event(evt="key", data=key) - if block: - continue - - return None - elif self.__vt_support: - # If virtual terminal is enabled, scanning VT sequences - for char in raw_key.encode(self.event_queue.encoding, "replace"): - self.event_queue.push(char) - continue - - if key_event.dwControlKeyState & ALT_ACTIVE: - # Do not swallow characters that have been entered via AltGr: - # Windows internally converts AltGr to CTRL+ALT, see - # https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-vkkeyscanw - if not key_event.dwControlKeyState & CTRL_ACTIVE: - # queue the key, return the meta command - self.event_queue.insert(Event(evt="key", data=key)) - return Event(evt="key", data="\033") # keymap.py uses this for meta - - return Event(evt="key", data=key) - return self.event_queue.get() - - def push_char(self, char: int | bytes) -> None: - """ - Push a character to the console event queue. - """ - raise NotImplementedError("push_char not supported on Windows") - - def beep(self) -> None: - self.__write("\x07") - - def clear(self) -> None: - """Wipe the screen""" - self.__write(CLEAR) - self.posxy = 0, 0 - self.screen = [] - - def finish(self) -> None: - """Move the cursor to the end of the display and otherwise get - ready for end. XXX could be merged with restore? Hmm.""" - y = len(self.screen) - 1 - while y >= 0 and not self.screen[y]: - y -= 1 - self._move_relative(0, min(y, self.height + self.__offset - 1)) - self.__write("\r\n") - - def flushoutput(self) -> None: - """Flush all output to the screen (assuming there's some - buffering going on somewhere). - - All output on Windows is unbuffered so this is a nop""" - pass - - def forgetinput(self) -> None: - """Forget all pending, but not yet processed input.""" - if not FlushConsoleInputBuffer(InHandle): - raise WinError(GetLastError()) - - def getpending(self) -> Event: - """Return the characters that have been typed but not yet - processed.""" - e = Event("key", "", b"") - - while not self.event_queue.empty(): - e2 = self.event_queue.get() - if e2: - e.data += e2.data - - recs, rec_count = self._read_input_bulk(1024) - for i in range(rec_count): - rec = recs[i] - # In case of a legacy console, we do not only receive a keydown - # event, but also a keyup event - and for uppercase letters - # an additional SHIFT_PRESSED event. - if rec and rec.EventType == KEY_EVENT: - key_event = rec.Event.KeyEvent - if not key_event.bKeyDown: - continue - ch = key_event.uChar.UnicodeChar - if ch == "\x00": - # ignore SHIFT_PRESSED and special keys - continue - if ch == "\r": - ch += "\n" - e.data += ch - return e - - def wait_for_event(self, timeout: float | None) -> bool: - """Wait for an event.""" - if timeout is None: - timeout = INFINITE - else: - timeout = int(timeout) - ret = WaitForSingleObject(InHandle, timeout) - if ret == WAIT_FAILED: - raise WinError(get_last_error()) - elif ret == WAIT_TIMEOUT: - return False - return True - - def wait(self, timeout: float | None) -> bool: - """ - Wait for events on the console. - """ - return ( - not self.event_queue.empty() - or self.wait_for_event(timeout) - ) - - def repaint(self) -> None: - raise NotImplementedError("No repaint support") - - -# Windows interop -class CONSOLE_SCREEN_BUFFER_INFO(Structure): - _fields_ = [ - ("dwSize", _COORD), - ("dwCursorPosition", _COORD), - ("wAttributes", WORD), - ("srWindow", SMALL_RECT), - ("dwMaximumWindowSize", _COORD), - ] - - -class CONSOLE_CURSOR_INFO(Structure): - _fields_ = [ - ("dwSize", DWORD), - ("bVisible", BOOL), - ] - - -class CHAR_INFO(Structure): - _fields_ = [ - ("UnicodeChar", WCHAR), - ("Attributes", WORD), - ] - - -class Char(Union): - _fields_ = [ - ("UnicodeChar", WCHAR), - ("Char", CHAR), - ] - - -class KeyEvent(ctypes.Structure): - _fields_ = [ - ("bKeyDown", BOOL), - ("wRepeatCount", WORD), - ("wVirtualKeyCode", WORD), - ("wVirtualScanCode", WORD), - ("uChar", Char), - ("dwControlKeyState", DWORD), - ] - - -class WindowsBufferSizeEvent(ctypes.Structure): - _fields_ = [("dwSize", _COORD)] - - -class ConsoleEvent(ctypes.Union): - _fields_ = [ - ("KeyEvent", KeyEvent), - ("WindowsBufferSizeEvent", WindowsBufferSizeEvent), - ] - - -class INPUT_RECORD(Structure): - _fields_ = [("EventType", WORD), ("Event", ConsoleEvent)] - - -KEY_EVENT = 0x01 -FOCUS_EVENT = 0x10 -MENU_EVENT = 0x08 -MOUSE_EVENT = 0x02 -WINDOW_BUFFER_SIZE_EVENT = 0x04 - -ENABLE_PROCESSED_INPUT = 0x0001 -ENABLE_LINE_INPUT = 0x0002 -ENABLE_ECHO_INPUT = 0x0004 -ENABLE_MOUSE_INPUT = 0x0010 -ENABLE_INSERT_MODE = 0x0020 -ENABLE_VIRTUAL_TERMINAL_INPUT = 0x0200 - -ENABLE_PROCESSED_OUTPUT = 0x01 -ENABLE_WRAP_AT_EOL_OUTPUT = 0x02 -ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x04 - -STD_INPUT_HANDLE = -10 -STD_OUTPUT_HANDLE = -11 - -if sys.platform == "win32": - _KERNEL32 = WinDLL("kernel32", use_last_error=True) - - GetStdHandle = windll.kernel32.GetStdHandle - GetStdHandle.argtypes = [DWORD] - GetStdHandle.restype = HANDLE - - GetConsoleScreenBufferInfo = _KERNEL32.GetConsoleScreenBufferInfo - GetConsoleScreenBufferInfo.argtypes = [ - HANDLE, - ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO), - ] - GetConsoleScreenBufferInfo.restype = BOOL - - ScrollConsoleScreenBuffer = _KERNEL32.ScrollConsoleScreenBufferW - ScrollConsoleScreenBuffer.argtypes = [ - HANDLE, - POINTER(SMALL_RECT), - POINTER(SMALL_RECT), - _COORD, - POINTER(CHAR_INFO), - ] - ScrollConsoleScreenBuffer.restype = BOOL - - GetConsoleMode = _KERNEL32.GetConsoleMode - GetConsoleMode.argtypes = [HANDLE, POINTER(DWORD)] - GetConsoleMode.restype = BOOL - - SetConsoleMode = _KERNEL32.SetConsoleMode - SetConsoleMode.argtypes = [HANDLE, DWORD] - SetConsoleMode.restype = BOOL - - ReadConsoleInput = _KERNEL32.ReadConsoleInputW - ReadConsoleInput.argtypes = [HANDLE, POINTER(INPUT_RECORD), DWORD, POINTER(DWORD)] - ReadConsoleInput.restype = BOOL - - - FlushConsoleInputBuffer = _KERNEL32.FlushConsoleInputBuffer - FlushConsoleInputBuffer.argtypes = [HANDLE] - FlushConsoleInputBuffer.restype = BOOL - - WaitForSingleObject = _KERNEL32.WaitForSingleObject - WaitForSingleObject.argtypes = [HANDLE, DWORD] - WaitForSingleObject.restype = DWORD - - OutHandle = GetStdHandle(STD_OUTPUT_HANDLE) - InHandle = GetStdHandle(STD_INPUT_HANDLE) -else: - - def _win_only(*args, **kwargs): - raise NotImplementedError("Windows only") - - GetStdHandle = _win_only - GetConsoleScreenBufferInfo = _win_only - ScrollConsoleScreenBuffer = _win_only - GetConsoleMode = _win_only - SetConsoleMode = _win_only - ReadConsoleInput = _win_only - FlushConsoleInputBuffer = _win_only - WaitForSingleObject = _win_only - OutHandle = 0 - InHandle = 0 diff --git a/Python314_4_x86_Template/Lib/_pyrepl/windows_eventqueue.py b/Python314_4_x86_Template/Lib/_pyrepl/windows_eventqueue.py deleted file mode 100644 index d99722f9a..000000000 --- a/Python314_4_x86_Template/Lib/_pyrepl/windows_eventqueue.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Windows event and VT sequence scanner -""" - -from .base_eventqueue import BaseEventQueue - - -# Reference: https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#input-sequences -VT_MAP: dict[bytes, str] = { - b'\x1b[A': 'up', - b'\x1b[B': 'down', - b'\x1b[C': 'right', - b'\x1b[D': 'left', - b'\x1b[1;5D': 'ctrl left', - b'\x1b[1;5C': 'ctrl right', - - b'\x1b[H': 'home', - b'\x1b[F': 'end', - - b'\x7f': 'backspace', - b'\x1b[2~': 'insert', - b'\x1b[3~': 'delete', - b'\x1b[5~': 'page up', - b'\x1b[6~': 'page down', - - b'\x1bOP': 'f1', - b'\x1bOQ': 'f2', - b'\x1bOR': 'f3', - b'\x1bOS': 'f4', - b'\x1b[15~': 'f5', - b'\x1b[17~': 'f6', - b'\x1b[18~': 'f7', - b'\x1b[19~': 'f8', - b'\x1b[20~': 'f9', - b'\x1b[21~': 'f10', - b'\x1b[23~': 'f11', - b'\x1b[24~': 'f12', -} - -class EventQueue(BaseEventQueue): - def __init__(self, encoding: str) -> None: - BaseEventQueue.__init__(self, encoding, VT_MAP) diff --git a/Python314_4_x86_Template/Lib/_sitebuiltins.py b/Python314_4_x86_Template/Lib/_sitebuiltins.py deleted file mode 100644 index 81b36efc6..000000000 --- a/Python314_4_x86_Template/Lib/_sitebuiltins.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -The objects used by the site module to add custom builtins. -""" - -# Those objects are almost immortal and they keep a reference to their module -# globals. Defining them in the site module would keep too many references -# alive. -# Note this means this module should also avoid keep things alive in its -# globals. - -import sys - -class Quitter(object): - def __init__(self, name, eof): - self.name = name - self.eof = eof - def __repr__(self): - return 'Use %s() or %s to exit' % (self.name, self.eof) - def __call__(self, code=None): - # Shells like IDLE catch the SystemExit, but listen when their - # stdin wrapper is closed. - try: - sys.stdin.close() - except: - pass - raise SystemExit(code) - - -class _Printer(object): - """interactive prompt objects for printing the license text, a list of - contributors and the copyright notice.""" - - MAXLINES = 23 - - def __init__(self, name, data, files=(), dirs=()): - import os - self.__name = name - self.__data = data - self.__lines = [] - self.__filenames = [os.path.join(dir, filename) - for dir in dirs - for filename in files] - - def __setup(self): - if self.__lines: - return - data = None - for filename in self.__filenames: - try: - with open(filename, encoding='utf-8') as fp: - data = fp.read() - break - except OSError: - pass - if not data: - data = self.__data - self.__lines = data.split('\n') - self.__linecnt = len(self.__lines) - - def __repr__(self): - self.__setup() - if len(self.__lines) <= self.MAXLINES: - return "\n".join(self.__lines) - else: - return "Type %s() to see the full %s text" % ((self.__name,)*2) - - def __call__(self): - from _pyrepl.pager import get_pager - self.__setup() - - pager = get_pager() - text = "\n".join(self.__lines) - pager(text, title=self.__name) - - -class _Helper(object): - """Define the builtin 'help'. - - This is a wrapper around pydoc.help that provides a helpful message - when 'help' is typed at the Python interactive prompt. - - Calling help() at the Python prompt starts an interactive help session. - Calling help(thing) prints help for the python object 'thing'. - """ - - def __repr__(self): - return "Type help() for interactive help, " \ - "or help(object) for help about object." - def __call__(self, *args, **kwds): - import pydoc - return pydoc.help(*args, **kwds) diff --git a/Python314_4_x86_Template/Lib/_strptime.py b/Python314_4_x86_Template/Lib/_strptime.py deleted file mode 100644 index fc7e369c3..000000000 --- a/Python314_4_x86_Template/Lib/_strptime.py +++ /dev/null @@ -1,822 +0,0 @@ -"""Strptime-related classes and functions. - -CLASSES: - LocaleTime -- Discovers and stores locale-specific time information - TimeRE -- Creates regexes for pattern matching a string of text containing - time information - -FUNCTIONS: - _getlang -- Figure out what language is being used for the locale - strptime -- Calculates the time struct represented by the passed-in string - -""" -import os -import time -import locale -import calendar -import re -from re import compile as re_compile -from re import sub as re_sub -from re import IGNORECASE -from re import escape as re_escape -from datetime import (date as datetime_date, - timedelta as datetime_timedelta, - timezone as datetime_timezone) -from _thread import allocate_lock as _thread_allocate_lock - -__all__ = [] - -def _getlang(): - # Figure out what the current language is set to. - return locale.getlocale(locale.LC_TIME) - -def _findall(haystack, needle): - # Find all positions of needle in haystack. - if not needle: - return - i = 0 - while True: - i = haystack.find(needle, i) - if i < 0: - break - yield i - i += len(needle) - -def _fixmonths(months): - yield from months - # The lower case of 'İ' ('\u0130') is 'i\u0307'. - # The re module only supports 1-to-1 character matching in - # case-insensitive mode. - for s in months: - if 'i\u0307' in s: - yield s.replace('i\u0307', '\u0130') - -lzh_TW_alt_digits = ( - # 〇:一:二:三:四:五:六:七:八:九 - '\u3007', '\u4e00', '\u4e8c', '\u4e09', '\u56db', - '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', - # 十:十一:十二:十三:十四:十五:十六:十七:十八:十九 - '\u5341', '\u5341\u4e00', '\u5341\u4e8c', '\u5341\u4e09', '\u5341\u56db', - '\u5341\u4e94', '\u5341\u516d', '\u5341\u4e03', '\u5341\u516b', '\u5341\u4e5d', - # 廿:廿一:廿二:廿三:廿四:廿五:廿六:廿七:廿八:廿九 - '\u5eff', '\u5eff\u4e00', '\u5eff\u4e8c', '\u5eff\u4e09', '\u5eff\u56db', - '\u5eff\u4e94', '\u5eff\u516d', '\u5eff\u4e03', '\u5eff\u516b', '\u5eff\u4e5d', - # 卅:卅一 - '\u5345', '\u5345\u4e00') - - -class LocaleTime(object): - """Stores and handles locale-specific information related to time. - - ATTRIBUTES: - f_weekday -- full weekday names (7-item list) - a_weekday -- abbreviated weekday names (7-item list) - f_month -- full month names (13-item list; dummy value in [0], which - is added by code) - a_month -- abbreviated month names (13-item list, dummy value in - [0], which is added by code) - am_pm -- AM/PM representation (2-item list) - LC_date_time -- format string for date/time representation (string) - LC_date -- format string for date representation (string) - LC_time -- format string for time representation (string) - timezone -- daylight- and non-daylight-savings timezone representation - (2-item list of sets) - lang -- Language used by instance (2-item tuple) - """ - - def __init__(self): - """Set all attributes. - - Order of methods called matters for dependency reasons. - - The locale language is set at the offset and then checked again before - exiting. This is to make sure that the attributes were not set with a - mix of information from more than one locale. This would most likely - happen when using threads where one thread calls a locale-dependent - function while another thread changes the locale while the function in - the other thread is still running. Proper coding would call for - locks to prevent changing the locale while locale-dependent code is - running. The check here is done in case someone does not think about - doing this. - - Only other possible issue is if someone changed the timezone and did - not call tz.tzset . That is an issue for the programmer, though, - since changing the timezone is worthless without that call. - - """ - self.lang = _getlang() - self.__calc_weekday() - self.__calc_month() - self.__calc_am_pm() - self.__calc_alt_digits() - self.__calc_timezone() - self.__calc_date_time() - if _getlang() != self.lang: - raise ValueError("locale changed during initialization") - if time.tzname != self.tzname or time.daylight != self.daylight: - raise ValueError("timezone changed during initialization") - - def __calc_weekday(self): - # Set self.a_weekday and self.f_weekday using the calendar - # module. - a_weekday = [calendar.day_abbr[i].lower() for i in range(7)] - f_weekday = [calendar.day_name[i].lower() for i in range(7)] - self.a_weekday = a_weekday - self.f_weekday = f_weekday - - def __calc_month(self): - # Set self.f_month and self.a_month using the calendar module. - a_month = [calendar.month_abbr[i].lower() for i in range(13)] - f_month = [calendar.month_name[i].lower() for i in range(13)] - self.a_month = a_month - self.f_month = f_month - - def __calc_am_pm(self): - # Set self.am_pm by using time.strftime(). - - # The magic date (1999,3,17,hour,44,55,2,76,0) is not really that - # magical; just happened to have used it everywhere else where a - # static date was needed. - am_pm = [] - for hour in (1, 22): - time_tuple = time.struct_time((1999,3,17,hour,44,55,2,76,0)) - # br_FR has AM/PM info (' ',' '). - am_pm.append(time.strftime("%p", time_tuple).lower().strip()) - self.am_pm = am_pm - - def __calc_alt_digits(self): - # Set self.LC_alt_digits by using time.strftime(). - - # The magic data should contain all decimal digits. - time_tuple = time.struct_time((1998, 1, 27, 10, 43, 56, 1, 27, 0)) - s = time.strftime("%x%X", time_tuple) - if s.isascii(): - # Fast path -- all digits are ASCII. - self.LC_alt_digits = () - return - - digits = ''.join(sorted(set(re.findall(r'\d', s)))) - if len(digits) == 10 and ord(digits[-1]) == ord(digits[0]) + 9: - # All 10 decimal digits from the same set. - if digits.isascii(): - # All digits are ASCII. - self.LC_alt_digits = () - return - - self.LC_alt_digits = [a + b for a in digits for b in digits] - # Test whether the numbers contain leading zero. - time_tuple2 = time.struct_time((2000, 1, 1, 1, 1, 1, 5, 1, 0)) - if self.LC_alt_digits[1] not in time.strftime("%x %X", time_tuple2): - self.LC_alt_digits[:10] = digits - return - - # Either non-Gregorian calendar or non-decimal numbers. - if {'\u4e00', '\u4e03', '\u4e5d', '\u5341', '\u5eff'}.issubset(s): - # lzh_TW - self.LC_alt_digits = lzh_TW_alt_digits - return - - self.LC_alt_digits = None - - def __calc_date_time(self): - # Set self.LC_date_time, self.LC_date, self.LC_time and - # self.LC_time_ampm by using time.strftime(). - - # Use (1999,3,17,22,44,55,2,76,0) for magic date because the amount of - # overloaded numbers is minimized. The order in which searches for - # values within the format string is very important; it eliminates - # possible ambiguity for what something represents. - time_tuple = time.struct_time((1999,3,17,22,44,55,2,76,0)) - time_tuple2 = time.struct_time((1999,1,3,1,1,1,6,3,0)) - replacement_pairs = [] - - # Non-ASCII digits - if self.LC_alt_digits or self.LC_alt_digits is None: - for n, d in [(19, '%OC'), (99, '%Oy'), (22, '%OH'), - (44, '%OM'), (55, '%OS'), (17, '%Od'), - (3, '%Om'), (2, '%Ow'), (10, '%OI')]: - if self.LC_alt_digits is None: - s = chr(0x660 + n // 10) + chr(0x660 + n % 10) - replacement_pairs.append((s, d)) - if n < 10: - replacement_pairs.append((s[1], d)) - elif len(self.LC_alt_digits) > n: - replacement_pairs.append((self.LC_alt_digits[n], d)) - else: - replacement_pairs.append((time.strftime(d, time_tuple), d)) - replacement_pairs += [ - ('1999', '%Y'), ('99', '%y'), ('22', '%H'), - ('44', '%M'), ('55', '%S'), ('76', '%j'), - ('17', '%d'), ('03', '%m'), ('3', '%m'), - # '3' needed for when no leading zero. - ('2', '%w'), ('10', '%I'), - ] - - date_time = [] - for directive in ('%c', '%x', '%X', '%r'): - current_format = time.strftime(directive, time_tuple).lower() - current_format = current_format.replace('%', '%%') - # The month and the day of the week formats are treated specially - # because of a possible ambiguity in some locales where the full - # and abbreviated names are equal or names of different types - # are equal. See doc of __find_month_format for more details. - lst, fmt = self.__find_weekday_format(directive) - if lst: - current_format = current_format.replace(lst[2], fmt, 1) - lst, fmt = self.__find_month_format(directive) - if lst: - current_format = current_format.replace(lst[3], fmt, 1) - if self.am_pm[1]: - # Must deal with possible lack of locale info - # manifesting itself as the empty string (e.g., Swedish's - # lack of AM/PM info) or a platform returning a tuple of empty - # strings (e.g., MacOS 9 having timezone as ('','')). - current_format = current_format.replace(self.am_pm[1], '%p') - for tz_values in self.timezone: - for tz in tz_values: - if tz: - current_format = current_format.replace(tz, "%Z") - # Transform all non-ASCII digits to digits in range U+0660 to U+0669. - if not current_format.isascii() and self.LC_alt_digits is None: - current_format = re_sub(r'\d(?<![0-9])', - lambda m: chr(0x0660 + int(m[0])), - current_format) - for old, new in replacement_pairs: - current_format = current_format.replace(old, new) - # If %W is used, then Sunday, 2005-01-03 will fall on week 0 since - # 2005-01-03 occurs before the first Monday of the year. Otherwise - # %U is used. - if '00' in time.strftime(directive, time_tuple2): - U_W = '%W' - else: - U_W = '%U' - current_format = current_format.replace('11', U_W) - date_time.append(current_format) - self.LC_date_time = date_time[0] - self.LC_date = date_time[1] - self.LC_time = date_time[2] - self.LC_time_ampm = date_time[3] - - def __find_month_format(self, directive): - """Find the month format appropriate for the current locale. - - In some locales (for example French and Hebrew), the default month - used in __calc_date_time has the same name in full and abbreviated - form. Also, the month name can by accident match other part of the - representation: the day of the week name (for example in Morisyen) - or the month number (for example in Japanese). Thus, cycle months - of the year and find all positions that match the month name for - each month, If no common positions are found, the representation - does not use the month name. - """ - full_indices = abbr_indices = None - for m in range(1, 13): - time_tuple = time.struct_time((1999, m, 17, 22, 44, 55, 2, 76, 0)) - datetime = time.strftime(directive, time_tuple).lower() - indices = set(_findall(datetime, self.f_month[m])) - if full_indices is None: - full_indices = indices - else: - full_indices &= indices - indices = set(_findall(datetime, self.a_month[m])) - if abbr_indices is None: - abbr_indices = set(indices) - else: - abbr_indices &= indices - if not full_indices and not abbr_indices: - return None, None - if full_indices: - return self.f_month, '%B' - if abbr_indices: - return self.a_month, '%b' - return None, None - - def __find_weekday_format(self, directive): - """Find the day of the week format appropriate for the current locale. - - Similar to __find_month_format(). - """ - full_indices = abbr_indices = None - for wd in range(7): - time_tuple = time.struct_time((1999, 3, 17, 22, 44, 55, wd, 76, 0)) - datetime = time.strftime(directive, time_tuple).lower() - indices = set(_findall(datetime, self.f_weekday[wd])) - if full_indices is None: - full_indices = indices - else: - full_indices &= indices - if self.f_weekday[wd] != self.a_weekday[wd]: - indices = set(_findall(datetime, self.a_weekday[wd])) - if abbr_indices is None: - abbr_indices = set(indices) - else: - abbr_indices &= indices - if not full_indices and not abbr_indices: - return None, None - if full_indices: - return self.f_weekday, '%A' - if abbr_indices: - return self.a_weekday, '%a' - return None, None - - def __calc_timezone(self): - # Set self.timezone by using time.tzname. - # Do not worry about possibility of time.tzname[0] == time.tzname[1] - # and time.daylight; handle that in strptime. - try: - time.tzset() - except AttributeError: - pass - self.tzname = time.tzname - self.daylight = time.daylight - no_saving = frozenset({"utc", "gmt", self.tzname[0].lower()}) - if self.daylight: - has_saving = frozenset({self.tzname[1].lower()}) - else: - has_saving = frozenset() - self.timezone = (no_saving, has_saving) - - -class TimeRE(dict): - """Handle conversion from format directives to regexes.""" - - def __init__(self, locale_time=None): - """Create keys/values. - - Order of execution is important for dependency reasons. - - """ - if locale_time: - self.locale_time = locale_time - else: - self.locale_time = LocaleTime() - base = super() - mapping = { - # The " [1-9]" part of the regex is to make %c from ANSI C work - 'd': r"(?P<d>3[0-1]|[1-2]\d|0[1-9]|[1-9]| [1-9])", - 'f': r"(?P<f>[0-9]{1,6})", - 'H': r"(?P<H>2[0-3]|[0-1]\d|\d| \d)", - 'k': r"(?P<H>2[0-3]|[0-1]\d|\d| \d)", - 'I': r"(?P<I>1[0-2]|0[1-9]|[1-9]| [1-9])", - 'l': r"(?P<I>1[0-2]|0[1-9]|[1-9]| [1-9])", - 'G': r"(?P<G>\d\d\d\d)", - 'j': r"(?P<j>36[0-6]|3[0-5]\d|[1-2]\d\d|0[1-9]\d|00[1-9]|[1-9]\d|0[1-9]|[1-9])", - 'm': r"(?P<m>1[0-2]|0[1-9]|[1-9])", - 'M': r"(?P<M>[0-5]\d|\d)", - 'S': r"(?P<S>6[0-1]|[0-5]\d|\d)", - 'U': r"(?P<U>5[0-3]|[0-4]\d|\d)", - 'w': r"(?P<w>[0-6])", - 'u': r"(?P<u>[1-7])", - 'V': r"(?P<V>5[0-3]|0[1-9]|[1-4]\d|\d)", - # W is set below by using 'U' - 'y': r"(?P<y>\d\d)", - 'Y': r"(?P<Y>\d\d\d\d)", - 'z': r"(?P<z>[+-]\d\d:?[0-5]\d(:?[0-5]\d(\.\d{1,6})?)?|(?-i:Z))", - 'A': self.__seqToRE(self.locale_time.f_weekday, 'A'), - 'a': self.__seqToRE(self.locale_time.a_weekday, 'a'), - 'B': self.__seqToRE(_fixmonths(self.locale_time.f_month[1:]), 'B'), - 'b': self.__seqToRE(_fixmonths(self.locale_time.a_month[1:]), 'b'), - 'p': self.__seqToRE(self.locale_time.am_pm, 'p'), - 'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone - for tz in tz_names), - 'Z'), - '%': '%'} - if self.locale_time.LC_alt_digits is None: - for d in 'dmyCHIMS': - mapping['O' + d] = r'(?P<%s>\d\d|\d| \d)' % d - mapping['Ow'] = r'(?P<w>\d)' - else: - mapping.update({ - 'Od': self.__seqToRE(self.locale_time.LC_alt_digits[1:32], 'd', - '3[0-1]|[1-2][0-9]|0[1-9]|[1-9]'), - 'Om': self.__seqToRE(self.locale_time.LC_alt_digits[1:13], 'm', - '1[0-2]|0[1-9]|[1-9]'), - 'Ow': self.__seqToRE(self.locale_time.LC_alt_digits[:7], 'w', - '[0-6]'), - 'Oy': self.__seqToRE(self.locale_time.LC_alt_digits, 'y', - '[0-9][0-9]'), - 'OC': self.__seqToRE(self.locale_time.LC_alt_digits, 'C', - '[0-9][0-9]'), - 'OH': self.__seqToRE(self.locale_time.LC_alt_digits[:24], 'H', - '2[0-3]|[0-1][0-9]|[0-9]'), - 'OI': self.__seqToRE(self.locale_time.LC_alt_digits[1:13], 'I', - '1[0-2]|0[1-9]|[1-9]'), - 'OM': self.__seqToRE(self.locale_time.LC_alt_digits[:60], 'M', - '[0-5][0-9]|[0-9]'), - 'OS': self.__seqToRE(self.locale_time.LC_alt_digits[:62], 'S', - '6[0-1]|[0-5][0-9]|[0-9]'), - }) - mapping.update({ - 'e': mapping['d'], - 'Oe': mapping['Od'], - 'P': mapping['p'], - 'Op': mapping['p'], - 'W': mapping['U'].replace('U', 'W'), - }) - mapping['W'] = mapping['U'].replace('U', 'W') - - base.__init__(mapping) - base.__setitem__('T', self.pattern('%H:%M:%S')) - base.__setitem__('R', self.pattern('%H:%M')) - base.__setitem__('r', self.pattern(self.locale_time.LC_time_ampm)) - base.__setitem__('X', self.pattern(self.locale_time.LC_time)) - base.__setitem__('x', self.pattern(self.locale_time.LC_date)) - base.__setitem__('c', self.pattern(self.locale_time.LC_date_time)) - - def __seqToRE(self, to_convert, directive, altregex=None): - """Convert a list to a regex string for matching a directive. - - Want possible matching values to be from longest to shortest. This - prevents the possibility of a match occurring for a value that also - a substring of a larger value that should have matched (e.g., 'abc' - matching when 'abcdef' should have been the match). - - """ - to_convert = sorted(to_convert, key=len, reverse=True) - for value in to_convert: - if value != '': - break - else: - return '' - regex = '|'.join(re_escape(stuff) for stuff in to_convert) - if altregex is not None: - regex += '|' + altregex - return '(?P<%s>%s)' % (directive, regex) - - def pattern(self, format): - """Return regex pattern for the format string. - - Need to make sure that any characters that might be interpreted as - regex syntax are escaped. - - """ - # The sub() call escapes all characters that might be misconstrued - # as regex syntax. Cannot use re.escape since we have to deal with - # format directives (%m, etc.). - format = re_sub(r"([\\.^$*+?\(\){}\[\]|])", r"\\\1", format) - format = re_sub(r'\s+', r'\\s+', format) - format = re_sub(r"'", "['\u02bc]", format) # needed for br_FR - year_in_format = False - day_of_month_in_format = False - def repl(m): - format_char = m[1] - match format_char: - case 'Y' | 'y' | 'G': - nonlocal year_in_format - year_in_format = True - case 'd': - nonlocal day_of_month_in_format - day_of_month_in_format = True - return self[format_char] - format = re_sub(r'%[-_0^#]*[0-9]*([OE]?\\?.?)', repl, format) - if day_of_month_in_format and not year_in_format: - import warnings - warnings.warn("""\ -Parsing dates involving a day of month without a year specified is ambiguous -and fails to parse leap day. The default behavior will change in Python 3.15 -to either always raise an exception or to use a different default year (TBD). -To avoid trouble, add a specific year to the input & format. -See https://github.com/python/cpython/issues/70647.""", - DeprecationWarning, - skip_file_prefixes=(os.path.dirname(__file__),)) - return format - - def compile(self, format): - """Return a compiled re object for the format string.""" - return re_compile(self.pattern(format), IGNORECASE) - -_cache_lock = _thread_allocate_lock() -# DO NOT modify _TimeRE_cache or _regex_cache without acquiring the cache lock -# first! -_TimeRE_cache = TimeRE() -_CACHE_MAX_SIZE = 5 # Max number of regexes stored in _regex_cache -_regex_cache = {} - -def _calc_julian_from_U_or_W(year, week_of_year, day_of_week, week_starts_Mon): - """Calculate the Julian day based on the year, week of the year, and day of - the week, with week_start_day representing whether the week of the year - assumes the week starts on Sunday or Monday (6 or 0).""" - first_weekday = datetime_date(year, 1, 1).weekday() - # If we are dealing with the %U directive (week starts on Sunday), it's - # easier to just shift the view to Sunday being the first day of the - # week. - if not week_starts_Mon: - first_weekday = (first_weekday + 1) % 7 - day_of_week = (day_of_week + 1) % 7 - # Need to watch out for a week 0 (when the first day of the year is not - # the same as that specified by %U or %W). - week_0_length = (7 - first_weekday) % 7 - if week_of_year == 0: - return 1 + day_of_week - first_weekday - else: - days_to_week = week_0_length + (7 * (week_of_year - 1)) - return 1 + days_to_week + day_of_week - - -def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): - """Return a 2-tuple consisting of a time struct and an int containing - the number of microseconds based on the input string and the - format string.""" - - for index, arg in enumerate([data_string, format]): - if not isinstance(arg, str): - msg = "strptime() argument {} must be str, not {}" - raise TypeError(msg.format(index, type(arg))) - - global _TimeRE_cache, _regex_cache - with _cache_lock: - locale_time = _TimeRE_cache.locale_time - if (_getlang() != locale_time.lang or - time.tzname != locale_time.tzname or - time.daylight != locale_time.daylight): - _TimeRE_cache = TimeRE() - _regex_cache.clear() - locale_time = _TimeRE_cache.locale_time - if len(_regex_cache) > _CACHE_MAX_SIZE: - _regex_cache.clear() - format_regex = _regex_cache.get(format) - if not format_regex: - try: - format_regex = _TimeRE_cache.compile(format) - # KeyError raised when a bad format is found; can be specified as - # \\, in which case it was a stray % but with a space after it - except KeyError as err: - bad_directive = err.args[0] - del err - bad_directive = bad_directive.replace('\\s', '') - if not bad_directive: - raise ValueError("stray %% in format '%s'" % format) from None - bad_directive = bad_directive.replace('\\', '', 1) - raise ValueError("'%s' is a bad directive in format '%s'" % - (bad_directive, format)) from None - _regex_cache[format] = format_regex - found = format_regex.match(data_string) - if not found: - raise ValueError("time data %r does not match format %r" % - (data_string, format)) - if len(data_string) != found.end(): - raise ValueError("unconverted data remains: %s" % - data_string[found.end():]) - - iso_year = year = None - month = day = 1 - hour = minute = second = fraction = 0 - tz = -1 - gmtoff = None - gmtoff_fraction = 0 - iso_week = week_of_year = None - week_of_year_start = None - # weekday and julian defaulted to None so as to signal need to calculate - # values - weekday = julian = None - found_dict = found.groupdict() - if locale_time.LC_alt_digits: - def parse_int(s): - try: - return locale_time.LC_alt_digits.index(s) - except ValueError: - return int(s) - else: - parse_int = int - - for group_key in found_dict.keys(): - # Directives not explicitly handled below: - # c, x, X - # handled by making out of other directives - # U, W - # worthless without day of the week - if group_key == 'y': - year = parse_int(found_dict['y']) - if 'C' in found_dict: - century = parse_int(found_dict['C']) - year += century * 100 - else: - # Open Group specification for strptime() states that a %y - #value in the range of [00, 68] is in the century 2000, while - #[69,99] is in the century 1900 - if year <= 68: - year += 2000 - else: - year += 1900 - elif group_key == 'Y': - year = int(found_dict['Y']) - elif group_key == 'G': - iso_year = int(found_dict['G']) - elif group_key == 'm': - month = parse_int(found_dict['m']) - elif group_key == 'B': - month = locale_time.f_month.index(found_dict['B'].lower()) - elif group_key == 'b': - month = locale_time.a_month.index(found_dict['b'].lower()) - elif group_key == 'd': - day = parse_int(found_dict['d']) - elif group_key == 'H': - hour = parse_int(found_dict['H']) - elif group_key == 'I': - hour = parse_int(found_dict['I']) - ampm = found_dict.get('p', '').lower() - # If there was no AM/PM indicator, we'll treat this like AM - if ampm in ('', locale_time.am_pm[0]): - # We're in AM so the hour is correct unless we're - # looking at 12 midnight. - # 12 midnight == 12 AM == hour 0 - if hour == 12: - hour = 0 - elif ampm == locale_time.am_pm[1]: - # We're in PM so we need to add 12 to the hour unless - # we're looking at 12 noon. - # 12 noon == 12 PM == hour 12 - if hour != 12: - hour += 12 - elif group_key == 'M': - minute = parse_int(found_dict['M']) - elif group_key == 'S': - second = parse_int(found_dict['S']) - elif group_key == 'f': - s = found_dict['f'] - # Pad to always return microseconds. - s += "0" * (6 - len(s)) - fraction = int(s) - elif group_key == 'A': - weekday = locale_time.f_weekday.index(found_dict['A'].lower()) - elif group_key == 'a': - weekday = locale_time.a_weekday.index(found_dict['a'].lower()) - elif group_key == 'w': - weekday = int(found_dict['w']) - if weekday == 0: - weekday = 6 - else: - weekday -= 1 - elif group_key == 'u': - weekday = int(found_dict['u']) - weekday -= 1 - elif group_key == 'j': - julian = int(found_dict['j']) - elif group_key in ('U', 'W'): - week_of_year = int(found_dict[group_key]) - if group_key == 'U': - # U starts week on Sunday. - week_of_year_start = 6 - else: - # W starts week on Monday. - week_of_year_start = 0 - elif group_key == 'V': - iso_week = int(found_dict['V']) - elif group_key == 'z': - z = found_dict['z'] - if z == 'Z': - gmtoff = 0 - else: - if z[3] == ':': - z = z[:3] + z[4:] - if len(z) > 5: - if z[5] != ':': - msg = f"Inconsistent use of : in {found_dict['z']}" - raise ValueError(msg) - z = z[:5] + z[6:] - hours = int(z[1:3]) - minutes = int(z[3:5]) - seconds = int(z[5:7] or 0) - gmtoff = (hours * 60 * 60) + (minutes * 60) + seconds - gmtoff_remainder = z[8:] - # Pad to always return microseconds. - gmtoff_remainder_padding = "0" * (6 - len(gmtoff_remainder)) - gmtoff_fraction = int(gmtoff_remainder + gmtoff_remainder_padding) - if z.startswith("-"): - gmtoff = -gmtoff - gmtoff_fraction = -gmtoff_fraction - elif group_key == 'Z': - # Since -1 is default value only need to worry about setting tz if - # it can be something other than -1. - found_zone = found_dict['Z'].lower() - for value, tz_values in enumerate(locale_time.timezone): - if found_zone in tz_values: - # Deal with bad locale setup where timezone names are the - # same and yet time.daylight is true; too ambiguous to - # be able to tell what timezone has daylight savings - if (time.tzname[0] == time.tzname[1] and - time.daylight and found_zone not in ("utc", "gmt")): - break - else: - tz = value - break - - # Deal with the cases where ambiguities arise - # don't assume default values for ISO week/year - if iso_year is not None: - if julian is not None: - raise ValueError("Day of the year directive '%j' is not " - "compatible with ISO year directive '%G'. " - "Use '%Y' instead.") - elif iso_week is None or weekday is None: - raise ValueError("ISO year directive '%G' must be used with " - "the ISO week directive '%V' and a weekday " - "directive ('%A', '%a', '%w', or '%u').") - elif iso_week is not None: - if year is None or weekday is None: - raise ValueError("ISO week directive '%V' must be used with " - "the ISO year directive '%G' and a weekday " - "directive ('%A', '%a', '%w', or '%u').") - else: - raise ValueError("ISO week directive '%V' is incompatible with " - "the year directive '%Y'. Use the ISO year '%G' " - "instead.") - - leap_year_fix = False - if year is None: - if month == 2 and day == 29: - year = 1904 # 1904 is first leap year of 20th century - leap_year_fix = True - else: - year = 1900 - - # If we know the week of the year and what day of that week, we can figure - # out the Julian day of the year. - if julian is None and weekday is not None: - if week_of_year is not None: - week_starts_Mon = True if week_of_year_start == 0 else False - julian = _calc_julian_from_U_or_W(year, week_of_year, weekday, - week_starts_Mon) - elif iso_year is not None and iso_week is not None: - datetime_result = datetime_date.fromisocalendar(iso_year, iso_week, weekday + 1) - year = datetime_result.year - month = datetime_result.month - day = datetime_result.day - if julian is not None and julian <= 0: - year -= 1 - yday = 366 if calendar.isleap(year) else 365 - julian += yday - - if julian is None: - # Cannot pre-calculate datetime_date() since can change in Julian - # calculation and thus could have different value for the day of - # the week calculation. - # Need to add 1 to result since first day of the year is 1, not 0. - julian = datetime_date(year, month, day).toordinal() - \ - datetime_date(year, 1, 1).toordinal() + 1 - else: # Assume that if they bothered to include Julian day (or if it was - # calculated above with year/week/weekday) it will be accurate. - datetime_result = datetime_date.fromordinal( - (julian - 1) + - datetime_date(year, 1, 1).toordinal()) - year = datetime_result.year - month = datetime_result.month - day = datetime_result.day - if weekday is None: - weekday = datetime_date(year, month, day).weekday() - # Add timezone info - tzname = found_dict.get("Z") - - if leap_year_fix: - # the caller didn't supply a year but asked for Feb 29th. We couldn't - # use the default of 1900 for computations. We set it back to ensure - # that February 29th is smaller than March 1st. - year = 1900 - - return (year, month, day, - hour, minute, second, - weekday, julian, tz, tzname, gmtoff), fraction, gmtoff_fraction - -def _strptime_time(data_string, format="%a %b %d %H:%M:%S %Y"): - """Return a time struct based on the input string and the - format string.""" - tt = _strptime(data_string, format)[0] - return time.struct_time(tt[:time._STRUCT_TM_ITEMS]) - -def _strptime_datetime_date(cls, data_string, format="%a %b %d %Y"): - """Return a date instance based on the input string and the - format string.""" - tt, _, _ = _strptime(data_string, format) - args = tt[:3] - return cls(*args) - -def _parse_tz(tzname, gmtoff, gmtoff_fraction): - tzdelta = datetime_timedelta(seconds=gmtoff, microseconds=gmtoff_fraction) - if tzname: - return datetime_timezone(tzdelta, tzname) - else: - return datetime_timezone(tzdelta) - -def _strptime_datetime_time(cls, data_string, format="%H:%M:%S"): - """Return a time instance based on the input string and the - format string.""" - tt, fraction, gmtoff_fraction = _strptime(data_string, format) - tzname, gmtoff = tt[-2:] - args = tt[3:6] + (fraction,) - if gmtoff is None: - return cls(*args) - else: - tz = _parse_tz(tzname, gmtoff, gmtoff_fraction) - return cls(*args, tz) - -def _strptime_datetime_datetime(cls, data_string, format="%a %b %d %H:%M:%S %Y"): - """Return a datetime instance based on the input string and the - format string.""" - tt, fraction, gmtoff_fraction = _strptime(data_string, format) - tzname, gmtoff = tt[-2:] - args = tt[:6] + (fraction,) - if gmtoff is None: - return cls(*args) - else: - tz = _parse_tz(tzname, gmtoff, gmtoff_fraction) - return cls(*args, tz) diff --git a/Python314_4_x86_Template/Lib/_threading_local.py b/Python314_4_x86_Template/Lib/_threading_local.py deleted file mode 100644 index 0b9e5d3bb..000000000 --- a/Python314_4_x86_Template/Lib/_threading_local.py +++ /dev/null @@ -1,120 +0,0 @@ -"""Thread-local objects. - -(Note that this module provides a Python version of the threading.local - class. Depending on the version of Python you're using, there may be a - faster one available. You should always import the `local` class from - `threading`.) -""" - -from weakref import ref -from contextlib import contextmanager - -__all__ = ["local"] - -# We need to use objects from the threading module, but the threading -# module may also want to use our `local` class, if support for locals -# isn't compiled in to the `thread` module. This creates potential problems -# with circular imports. For that reason, we don't import `threading` -# until the bottom of this file (a hack sufficient to worm around the -# potential problems). Note that all platforms on CPython do have support -# for locals in the `thread` module, and there is no circular import problem -# then, so problems introduced by fiddling the order of imports here won't -# manifest. - -class _localimpl: - """A class managing thread-local dicts""" - __slots__ = 'key', 'dicts', 'localargs', 'locallock', '__weakref__' - - def __init__(self): - # The key used in the Thread objects' attribute dicts. - # We keep it a string for speed but make it unlikely to clash with - # a "real" attribute. - self.key = '_threading_local._localimpl.' + str(id(self)) - # { id(Thread) -> (ref(Thread), thread-local dict) } - self.dicts = {} - - def get_dict(self): - """Return the dict for the current thread. Raises KeyError if none - defined.""" - thread = current_thread() - return self.dicts[id(thread)][1] - - def create_dict(self): - """Create a new dict for the current thread, and return it.""" - localdict = {} - key = self.key - thread = current_thread() - idt = id(thread) - def local_deleted(_, key=key): - # When the localimpl is deleted, remove the thread attribute. - thread = wrthread() - if thread is not None: - del thread.__dict__[key] - def thread_deleted(_, idt=idt): - # When the thread is deleted, remove the local dict. - # Note that this is suboptimal if the thread object gets - # caught in a reference loop. We would like to be called - # as soon as the OS-level thread ends instead. - local = wrlocal() - if local is not None: - dct = local.dicts.pop(idt) - wrlocal = ref(self, local_deleted) - wrthread = ref(thread, thread_deleted) - thread.__dict__[key] = wrlocal - self.dicts[idt] = wrthread, localdict - return localdict - - -@contextmanager -def _patch(self): - impl = object.__getattribute__(self, '_local__impl') - try: - dct = impl.get_dict() - except KeyError: - dct = impl.create_dict() - args, kw = impl.localargs - self.__init__(*args, **kw) - with impl.locallock: - object.__setattr__(self, '__dict__', dct) - yield - - -class local: - __slots__ = '_local__impl', '__dict__' - - def __new__(cls, /, *args, **kw): - if (args or kw) and (cls.__init__ is object.__init__): - raise TypeError("Initialization arguments are not supported") - self = object.__new__(cls) - impl = _localimpl() - impl.localargs = (args, kw) - impl.locallock = RLock() - object.__setattr__(self, '_local__impl', impl) - # We need to create the thread dict in anticipation of - # __init__ being called, to make sure we don't call it - # again ourselves. - impl.create_dict() - return self - - def __getattribute__(self, name): - with _patch(self): - return object.__getattribute__(self, name) - - def __setattr__(self, name, value): - if name == '__dict__': - raise AttributeError( - "%r object attribute '__dict__' is read-only" - % self.__class__.__name__) - with _patch(self): - return object.__setattr__(self, name, value) - - def __delattr__(self, name): - if name == '__dict__': - raise AttributeError( - "%r object attribute '__dict__' is read-only" - % self.__class__.__name__) - with _patch(self): - return object.__delattr__(self, name) - - -from threading import current_thread, RLock diff --git a/Python314_4_x86_Template/Lib/_weakrefset.py b/Python314_4_x86_Template/Lib/_weakrefset.py deleted file mode 100644 index d1c7fcaee..000000000 --- a/Python314_4_x86_Template/Lib/_weakrefset.py +++ /dev/null @@ -1,147 +0,0 @@ -# Access WeakSet through the weakref module. -# This code is separated-out because it is needed -# by abc.py to load everything else at startup. - -from _weakref import ref -from types import GenericAlias - -__all__ = ['WeakSet'] - - -class WeakSet: - def __init__(self, data=None): - self.data = set() - - def _remove(item, selfref=ref(self)): - self = selfref() - if self is not None: - self.data.discard(item) - - self._remove = _remove - if data is not None: - self.update(data) - - def __iter__(self): - for itemref in self.data.copy(): - item = itemref() - if item is not None: - # Caveat: the iterator will keep a strong reference to - # `item` until it is resumed or closed. - yield item - - def __len__(self): - return len(self.data) - - def __contains__(self, item): - try: - wr = ref(item) - except TypeError: - return False - return wr in self.data - - def __reduce__(self): - return self.__class__, (list(self),), self.__getstate__() - - def add(self, item): - self.data.add(ref(item, self._remove)) - - def clear(self): - self.data.clear() - - def copy(self): - return self.__class__(self) - - def pop(self): - while True: - try: - itemref = self.data.pop() - except KeyError: - raise KeyError('pop from empty WeakSet') from None - item = itemref() - if item is not None: - return item - - def remove(self, item): - self.data.remove(ref(item)) - - def discard(self, item): - self.data.discard(ref(item)) - - def update(self, other): - for element in other: - self.add(element) - - def __ior__(self, other): - self.update(other) - return self - - def difference(self, other): - newset = self.copy() - newset.difference_update(other) - return newset - __sub__ = difference - - def difference_update(self, other): - self.__isub__(other) - def __isub__(self, other): - if self is other: - self.data.clear() - else: - self.data.difference_update(ref(item) for item in other) - return self - - def intersection(self, other): - return self.__class__(item for item in other if item in self) - __and__ = intersection - - def intersection_update(self, other): - self.__iand__(other) - def __iand__(self, other): - self.data.intersection_update(ref(item) for item in other) - return self - - def issubset(self, other): - return self.data.issubset(ref(item) for item in other) - __le__ = issubset - - def __lt__(self, other): - return self.data < set(map(ref, other)) - - def issuperset(self, other): - return self.data.issuperset(ref(item) for item in other) - __ge__ = issuperset - - def __gt__(self, other): - return self.data > set(map(ref, other)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return self.data == set(map(ref, other)) - - def symmetric_difference(self, other): - newset = self.copy() - newset.symmetric_difference_update(other) - return newset - __xor__ = symmetric_difference - - def symmetric_difference_update(self, other): - self.__ixor__(other) - def __ixor__(self, other): - if self is other: - self.data.clear() - else: - self.data.symmetric_difference_update(ref(item, self._remove) for item in other) - return self - - def union(self, other): - return self.__class__(e for s in (self, other) for e in s) - __or__ = union - - def isdisjoint(self, other): - return len(self.intersection(other)) == 0 - - def __repr__(self): - return repr(self.data) - - __class_getitem__ = classmethod(GenericAlias) diff --git a/Python314_4_x86_Template/Lib/abc.py b/Python314_4_x86_Template/Lib/abc.py deleted file mode 100644 index f8a4e11ce..000000000 --- a/Python314_4_x86_Template/Lib/abc.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright 2007 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Abstract Base Classes (ABCs) according to PEP 3119.""" - - -def abstractmethod(funcobj): - """A decorator indicating abstract methods. - - Requires that the metaclass is ABCMeta or derived from it. A - class that has a metaclass derived from ABCMeta cannot be - instantiated unless all of its abstract methods are overridden. - The abstract methods can be called using any of the normal - 'super' call mechanisms. abstractmethod() may be used to declare - abstract methods for properties and descriptors. - - Usage: - - class C(metaclass=ABCMeta): - @abstractmethod - def my_abstract_method(self, arg1, arg2, argN): - ... - """ - funcobj.__isabstractmethod__ = True - return funcobj - - -class abstractclassmethod(classmethod): - """A decorator indicating abstract classmethods. - - Deprecated, use 'classmethod' with 'abstractmethod' instead: - - class C(ABC): - @classmethod - @abstractmethod - def my_abstract_classmethod(cls, ...): - ... - - """ - - __isabstractmethod__ = True - - def __init__(self, callable): - callable.__isabstractmethod__ = True - super().__init__(callable) - - -class abstractstaticmethod(staticmethod): - """A decorator indicating abstract staticmethods. - - Deprecated, use 'staticmethod' with 'abstractmethod' instead: - - class C(ABC): - @staticmethod - @abstractmethod - def my_abstract_staticmethod(...): - ... - - """ - - __isabstractmethod__ = True - - def __init__(self, callable): - callable.__isabstractmethod__ = True - super().__init__(callable) - - -class abstractproperty(property): - """A decorator indicating abstract properties. - - Deprecated, use 'property' with 'abstractmethod' instead: - - class C(ABC): - @property - @abstractmethod - def my_abstract_property(self): - ... - - """ - - __isabstractmethod__ = True - - -try: - from _abc import (get_cache_token, _abc_init, _abc_register, - _abc_instancecheck, _abc_subclasscheck, _get_dump, - _reset_registry, _reset_caches) -except ImportError: - from _py_abc import ABCMeta, get_cache_token - ABCMeta.__module__ = 'abc' -else: - class ABCMeta(type): - """Metaclass for defining Abstract Base Classes (ABCs). - - Use this metaclass to create an ABC. An ABC can be subclassed - directly, and then acts as a mix-in class. You can also register - unrelated concrete classes (even built-in classes) and unrelated - ABCs as 'virtual subclasses' -- these and their descendants will - be considered subclasses of the registering ABC by the built-in - issubclass() function, but the registering ABC won't show up in - their MRO (Method Resolution Order) nor will method - implementations defined by the registering ABC be callable (not - even via super()). - """ - def __new__(mcls, name, bases, namespace, /, **kwargs): - cls = super().__new__(mcls, name, bases, namespace, **kwargs) - _abc_init(cls) - return cls - - def register(cls, subclass): - """Register a virtual subclass of an ABC. - - Returns the subclass, to allow usage as a class decorator. - """ - return _abc_register(cls, subclass) - - def __instancecheck__(cls, instance): - """Override for isinstance(instance, cls).""" - return _abc_instancecheck(cls, instance) - - def __subclasscheck__(cls, subclass): - """Override for issubclass(subclass, cls).""" - return _abc_subclasscheck(cls, subclass) - - def _dump_registry(cls, file=None): - """Debug helper to print the ABC registry.""" - print(f"Class: {cls.__module__}.{cls.__qualname__}", file=file) - print(f"Inv. counter: {get_cache_token()}", file=file) - (_abc_registry, _abc_cache, _abc_negative_cache, - _abc_negative_cache_version) = _get_dump(cls) - print(f"_abc_registry: {_abc_registry!r}", file=file) - print(f"_abc_cache: {_abc_cache!r}", file=file) - print(f"_abc_negative_cache: {_abc_negative_cache!r}", file=file) - print(f"_abc_negative_cache_version: {_abc_negative_cache_version!r}", - file=file) - - def _abc_registry_clear(cls): - """Clear the registry (for debugging or testing).""" - _reset_registry(cls) - - def _abc_caches_clear(cls): - """Clear the caches (for debugging or testing).""" - _reset_caches(cls) - - -def update_abstractmethods(cls): - """Recalculate the set of abstract methods of an abstract class. - - If a class has had one of its abstract methods implemented after the - class was created, the method will not be considered implemented until - this function is called. Alternatively, if a new abstract method has been - added to the class, it will only be considered an abstract method of the - class after this function is called. - - This function should be called before any use is made of the class, - usually in class decorators that add methods to the subject class. - - Returns cls, to allow usage as a class decorator. - - If cls is not an instance of ABCMeta, does nothing. - """ - if not hasattr(cls, '__abstractmethods__'): - # We check for __abstractmethods__ here because cls might by a C - # implementation or a python implementation (especially during - # testing), and we want to handle both cases. - return cls - - abstracts = set() - # Check the existing abstract methods of the parents, keep only the ones - # that are not implemented. - for scls in cls.__bases__: - for name in getattr(scls, '__abstractmethods__', ()): - value = getattr(cls, name, None) - if getattr(value, "__isabstractmethod__", False): - abstracts.add(name) - # Also add any other newly added abstract methods. - for name, value in cls.__dict__.items(): - if getattr(value, "__isabstractmethod__", False): - abstracts.add(name) - cls.__abstractmethods__ = frozenset(abstracts) - return cls - - -class ABC(metaclass=ABCMeta): - """Helper class that provides a standard way to create an ABC using - inheritance. - """ - __slots__ = () diff --git a/Python314_4_x86_Template/Lib/annotationlib.py b/Python314_4_x86_Template/Lib/annotationlib.py deleted file mode 100644 index 9fee25641..000000000 --- a/Python314_4_x86_Template/Lib/annotationlib.py +++ /dev/null @@ -1,1165 +0,0 @@ -"""Helpers for introspecting and wrapping annotations.""" - -import ast -import builtins -import enum -import keyword -import sys -import types - -__all__ = [ - "Format", - "ForwardRef", - "call_annotate_function", - "call_evaluate_function", - "get_annotate_from_class_namespace", - "get_annotations", - "annotations_to_string", - "type_repr", -] - - -class Format(enum.IntEnum): - VALUE = 1 - VALUE_WITH_FAKE_GLOBALS = 2 - FORWARDREF = 3 - STRING = 4 - - -_sentinel = object() -# Following `NAME_ERROR_MSG` in `ceval_macros.h`: -_NAME_ERROR_MSG = "name '{name:.200}' is not defined" - - -# Slots shared by ForwardRef and _Stringifier. The __forward__ names must be -# preserved for compatibility with the old typing.ForwardRef class. The remaining -# names are private. -_SLOTS = ( - "__forward_is_argument__", - "__forward_is_class__", - "__forward_module__", - "__weakref__", - "__arg__", - "__globals__", - "__extra_names__", - "__code__", - "__ast_node__", - "__cell__", - "__owner__", - "__stringifier_dict__", -) - - -class ForwardRef: - """Wrapper that holds a forward reference. - - Constructor arguments: - * arg: a string representing the code to be evaluated. - * module: the module where the forward reference was created. - Must be a string, not a module object. - * owner: The owning object (module, class, or function). - * is_argument: Does nothing, retained for compatibility. - * is_class: True if the forward reference was created in class scope. - - """ - - __slots__ = _SLOTS - - def __init__( - self, - arg, - *, - module=None, - owner=None, - is_argument=True, - is_class=False, - ): - if not isinstance(arg, str): - raise TypeError(f"Forward reference must be a string -- got {arg!r}") - - self.__arg__ = arg - self.__forward_is_argument__ = is_argument - self.__forward_is_class__ = is_class - self.__forward_module__ = module - self.__owner__ = owner - # These are always set to None here but may be non-None if a ForwardRef - # is created through __class__ assignment on a _Stringifier object. - self.__globals__ = None - # This may be either a cell object (for a ForwardRef referring to a single name) - # or a dict mapping cell names to cell objects (for a ForwardRef containing references - # to multiple names). - self.__cell__ = None - self.__extra_names__ = None - # These are initially None but serve as a cache and may be set to a non-None - # value later. - self.__code__ = None - self.__ast_node__ = None - - def __init_subclass__(cls, /, *args, **kwds): - raise TypeError("Cannot subclass ForwardRef") - - def evaluate( - self, - *, - globals=None, - locals=None, - type_params=None, - owner=None, - format=Format.VALUE, - ): - """Evaluate the forward reference and return the value. - - If the forward reference cannot be evaluated, raise an exception. - """ - match format: - case Format.STRING: - return self.__forward_arg__ - case Format.VALUE: - is_forwardref_format = False - case Format.FORWARDREF: - is_forwardref_format = True - case _: - raise NotImplementedError(format) - if isinstance(self.__cell__, types.CellType): - try: - return self.__cell__.cell_contents - except ValueError: - pass - if owner is None: - owner = self.__owner__ - - if globals is None and self.__forward_module__ is not None: - globals = getattr( - sys.modules.get(self.__forward_module__, None), "__dict__", None - ) - if globals is None: - globals = self.__globals__ - if globals is None: - if isinstance(owner, type): - module_name = getattr(owner, "__module__", None) - if module_name: - module = sys.modules.get(module_name, None) - if module: - globals = getattr(module, "__dict__", None) - elif isinstance(owner, types.ModuleType): - globals = getattr(owner, "__dict__", None) - elif callable(owner): - globals = getattr(owner, "__globals__", None) - - # If we pass None to eval() below, the globals of this module are used. - if globals is None: - globals = {} - - if type_params is None and owner is not None: - type_params = getattr(owner, "__type_params__", None) - - if locals is None: - locals = {} - if isinstance(owner, type): - locals.update(vars(owner)) - elif ( - type_params is not None - or isinstance(self.__cell__, dict) - or self.__extra_names__ - ): - # Create a new locals dict if necessary, - # to avoid mutating the argument. - locals = dict(locals) - - # "Inject" type parameters into the local namespace - # (unless they are shadowed by assignments *in* the local namespace), - # as a way of emulating annotation scopes when calling `eval()` - if type_params is not None: - for param in type_params: - locals.setdefault(param.__name__, param) - - # Similar logic can be used for nonlocals, which should not - # override locals. - if isinstance(self.__cell__, dict): - for cell_name, cell in self.__cell__.items(): - try: - cell_value = cell.cell_contents - except ValueError: - pass - else: - locals.setdefault(cell_name, cell_value) - - if self.__extra_names__: - locals.update(self.__extra_names__) - - arg = self.__forward_arg__ - if arg.isidentifier() and not keyword.iskeyword(arg): - if arg in locals: - return locals[arg] - elif arg in globals: - return globals[arg] - elif hasattr(builtins, arg): - return getattr(builtins, arg) - elif is_forwardref_format: - return self - else: - raise NameError(_NAME_ERROR_MSG.format(name=arg), name=arg) - else: - code = self.__forward_code__ - try: - return eval(code, globals=globals, locals=locals) - except Exception: - if not is_forwardref_format: - raise - - # All variables, in scoping order, should be checked before - # triggering __missing__ to create a _Stringifier. - new_locals = _StringifierDict( - {**builtins.__dict__, **globals, **locals}, - globals=globals, - owner=owner, - is_class=self.__forward_is_class__, - format=format, - ) - try: - result = eval(code, globals=globals, locals=new_locals) - except Exception: - return self - else: - new_locals.transmogrify(self.__cell__) - return result - - def _evaluate(self, globalns, localns, type_params=_sentinel, *, recursive_guard): - import typing - import warnings - - if type_params is _sentinel: - typing._deprecation_warning_for_no_type_params_passed( - "typing.ForwardRef._evaluate" - ) - type_params = () - warnings._deprecated( - "ForwardRef._evaluate", - "{name} is a private API and is retained for compatibility, but will be removed" - " in Python 3.16. Use ForwardRef.evaluate() or typing.evaluate_forward_ref() instead.", - remove=(3, 16), - ) - return typing.evaluate_forward_ref( - self, - globals=globalns, - locals=localns, - type_params=type_params, - _recursive_guard=recursive_guard, - ) - - @property - def __forward_arg__(self): - if self.__arg__ is not None: - return self.__arg__ - if self.__ast_node__ is not None: - self.__arg__ = ast.unparse(self.__ast_node__) - return self.__arg__ - raise AssertionError( - "Attempted to access '__forward_arg__' on an uninitialized ForwardRef" - ) - - @property - def __forward_code__(self): - if self.__code__ is not None: - return self.__code__ - arg = self.__forward_arg__ - try: - self.__code__ = compile(_rewrite_star_unpack(arg), "<string>", "eval") - except SyntaxError: - raise SyntaxError(f"Forward reference must be an expression -- got {arg!r}") - return self.__code__ - - def __eq__(self, other): - if not isinstance(other, ForwardRef): - return NotImplemented - return ( - self.__forward_arg__ == other.__forward_arg__ - and self.__forward_module__ == other.__forward_module__ - # Use "is" here because we use id() for this in __hash__ - # because dictionaries are not hashable. - and self.__globals__ is other.__globals__ - and self.__forward_is_class__ == other.__forward_is_class__ - # Two separate cells are always considered unequal in forward refs. - and ( - {name: id(cell) for name, cell in self.__cell__.items()} - == {name: id(cell) for name, cell in other.__cell__.items()} - if isinstance(self.__cell__, dict) and isinstance(other.__cell__, dict) - else self.__cell__ is other.__cell__ - ) - and self.__owner__ == other.__owner__ - and ( - (tuple(sorted(self.__extra_names__.items())) if self.__extra_names__ else None) == - (tuple(sorted(other.__extra_names__.items())) if other.__extra_names__ else None) - ) - ) - - def __hash__(self): - return hash(( - self.__forward_arg__, - self.__forward_module__, - id(self.__globals__), # dictionaries are not hashable, so hash by identity - self.__forward_is_class__, - ( # cells are not hashable as well - tuple(sorted([(name, id(cell)) for name, cell in self.__cell__.items()])) - if isinstance(self.__cell__, dict) else id(self.__cell__), - ), - self.__owner__, - tuple(sorted(self.__extra_names__.items())) if self.__extra_names__ else None, - )) - - def __or__(self, other): - return types.UnionType[self, other] - - def __ror__(self, other): - return types.UnionType[other, self] - - def __repr__(self): - extra = [] - if self.__forward_module__ is not None: - extra.append(f", module={self.__forward_module__!r}") - if self.__forward_is_class__: - extra.append(", is_class=True") - if self.__owner__ is not None: - extra.append(f", owner={self.__owner__!r}") - return f"ForwardRef({self.__forward_arg__!r}{''.join(extra)})" - - -_Template = type(t"") - - -class _Stringifier: - # Must match the slots on ForwardRef, so we can turn an instance of one into an - # instance of the other in place. - __slots__ = _SLOTS - - def __init__( - self, - node, - globals=None, - owner=None, - is_class=False, - cell=None, - *, - stringifier_dict, - extra_names=None, - ): - # Either an AST node or a simple str (for the common case where a ForwardRef - # represent a single name). - assert isinstance(node, (ast.AST, str)) - self.__arg__ = None - self.__forward_is_argument__ = False - self.__forward_is_class__ = is_class - self.__forward_module__ = None - self.__code__ = None - self.__ast_node__ = node - self.__globals__ = globals - self.__extra_names__ = extra_names - self.__cell__ = cell - self.__owner__ = owner - self.__stringifier_dict__ = stringifier_dict - - def __convert_to_ast(self, other): - if isinstance(other, _Stringifier): - if isinstance(other.__ast_node__, str): - return ast.Name(id=other.__ast_node__), other.__extra_names__ - return other.__ast_node__, other.__extra_names__ - elif type(other) is _Template: - return _template_to_ast(other), None - elif ( - # In STRING format we don't bother with the create_unique_name() dance; - # it's better to emit the repr() of the object instead of an opaque name. - self.__stringifier_dict__.format == Format.STRING - or other is None - or type(other) in (str, int, float, bool, complex) - ): - return ast.Constant(value=other), None - elif type(other) is dict: - extra_names = {} - keys = [] - values = [] - for key, value in other.items(): - new_key, new_extra_names = self.__convert_to_ast(key) - if new_extra_names is not None: - extra_names.update(new_extra_names) - keys.append(new_key) - new_value, new_extra_names = self.__convert_to_ast(value) - if new_extra_names is not None: - extra_names.update(new_extra_names) - values.append(new_value) - return ast.Dict(keys, values), extra_names - elif type(other) in (list, tuple, set): - extra_names = {} - elts = [] - for elt in other: - new_elt, new_extra_names = self.__convert_to_ast(elt) - if new_extra_names is not None: - extra_names.update(new_extra_names) - elts.append(new_elt) - ast_class = {list: ast.List, tuple: ast.Tuple, set: ast.Set}[type(other)] - return ast_class(elts), extra_names - else: - name = self.__stringifier_dict__.create_unique_name() - return ast.Name(id=name), {name: other} - - def __convert_to_ast_getitem(self, other): - if isinstance(other, slice): - extra_names = {} - - def conv(obj): - if obj is None: - return None - new_obj, new_extra_names = self.__convert_to_ast(obj) - if new_extra_names is not None: - extra_names.update(new_extra_names) - return new_obj - - return ast.Slice( - lower=conv(other.start), - upper=conv(other.stop), - step=conv(other.step), - ), extra_names - else: - return self.__convert_to_ast(other) - - def __get_ast(self): - node = self.__ast_node__ - if isinstance(node, str): - return ast.Name(id=node) - return node - - def __make_new(self, node, extra_names=None): - new_extra_names = {} - if self.__extra_names__ is not None: - new_extra_names.update(self.__extra_names__) - if extra_names is not None: - new_extra_names.update(extra_names) - stringifier = _Stringifier( - node, - self.__globals__, - self.__owner__, - self.__forward_is_class__, - stringifier_dict=self.__stringifier_dict__, - extra_names=new_extra_names or None, - ) - self.__stringifier_dict__.stringifiers.append(stringifier) - return stringifier - - # Must implement this since we set __eq__. We hash by identity so that - # stringifiers in dict keys are kept separate. - def __hash__(self): - return id(self) - - def __getitem__(self, other): - # Special case, to avoid stringifying references to class-scoped variables - # as '__classdict__["x"]'. - if self.__ast_node__ == "__classdict__": - raise KeyError - if isinstance(other, tuple): - extra_names = {} - elts = [] - for elt in other: - new_elt, new_extra_names = self.__convert_to_ast_getitem(elt) - if new_extra_names is not None: - extra_names.update(new_extra_names) - elts.append(new_elt) - other = ast.Tuple(elts) - else: - other, extra_names = self.__convert_to_ast_getitem(other) - assert isinstance(other, ast.AST), repr(other) - return self.__make_new(ast.Subscript(self.__get_ast(), other), extra_names) - - def __getattr__(self, attr): - return self.__make_new(ast.Attribute(self.__get_ast(), attr)) - - def __call__(self, *args, **kwargs): - extra_names = {} - ast_args = [] - for arg in args: - new_arg, new_extra_names = self.__convert_to_ast(arg) - if new_extra_names is not None: - extra_names.update(new_extra_names) - ast_args.append(new_arg) - ast_kwargs = [] - for key, value in kwargs.items(): - new_value, new_extra_names = self.__convert_to_ast(value) - if new_extra_names is not None: - extra_names.update(new_extra_names) - ast_kwargs.append(ast.keyword(key, new_value)) - return self.__make_new(ast.Call(self.__get_ast(), ast_args, ast_kwargs), extra_names) - - def __iter__(self): - yield self.__make_new(ast.Starred(self.__get_ast())) - - def __repr__(self): - if isinstance(self.__ast_node__, str): - return self.__ast_node__ - return ast.unparse(self.__ast_node__) - - def __format__(self, format_spec): - raise TypeError("Cannot stringify annotation containing string formatting") - - def _make_binop(op: ast.AST): - def binop(self, other): - rhs, extra_names = self.__convert_to_ast(other) - return self.__make_new( - ast.BinOp(self.__get_ast(), op, rhs), extra_names - ) - - return binop - - __add__ = _make_binop(ast.Add()) - __sub__ = _make_binop(ast.Sub()) - __mul__ = _make_binop(ast.Mult()) - __matmul__ = _make_binop(ast.MatMult()) - __truediv__ = _make_binop(ast.Div()) - __mod__ = _make_binop(ast.Mod()) - __lshift__ = _make_binop(ast.LShift()) - __rshift__ = _make_binop(ast.RShift()) - __or__ = _make_binop(ast.BitOr()) - __xor__ = _make_binop(ast.BitXor()) - __and__ = _make_binop(ast.BitAnd()) - __floordiv__ = _make_binop(ast.FloorDiv()) - __pow__ = _make_binop(ast.Pow()) - - del _make_binop - - def _make_rbinop(op: ast.AST): - def rbinop(self, other): - new_other, extra_names = self.__convert_to_ast(other) - return self.__make_new( - ast.BinOp(new_other, op, self.__get_ast()), extra_names - ) - - return rbinop - - __radd__ = _make_rbinop(ast.Add()) - __rsub__ = _make_rbinop(ast.Sub()) - __rmul__ = _make_rbinop(ast.Mult()) - __rmatmul__ = _make_rbinop(ast.MatMult()) - __rtruediv__ = _make_rbinop(ast.Div()) - __rmod__ = _make_rbinop(ast.Mod()) - __rlshift__ = _make_rbinop(ast.LShift()) - __rrshift__ = _make_rbinop(ast.RShift()) - __ror__ = _make_rbinop(ast.BitOr()) - __rxor__ = _make_rbinop(ast.BitXor()) - __rand__ = _make_rbinop(ast.BitAnd()) - __rfloordiv__ = _make_rbinop(ast.FloorDiv()) - __rpow__ = _make_rbinop(ast.Pow()) - - del _make_rbinop - - def _make_compare(op): - def compare(self, other): - rhs, extra_names = self.__convert_to_ast(other) - return self.__make_new( - ast.Compare( - left=self.__get_ast(), - ops=[op], - comparators=[rhs], - ), - extra_names, - ) - - return compare - - __lt__ = _make_compare(ast.Lt()) - __le__ = _make_compare(ast.LtE()) - __eq__ = _make_compare(ast.Eq()) - __ne__ = _make_compare(ast.NotEq()) - __gt__ = _make_compare(ast.Gt()) - __ge__ = _make_compare(ast.GtE()) - - del _make_compare - - def _make_unary_op(op): - def unary_op(self): - return self.__make_new(ast.UnaryOp(op, self.__get_ast())) - - return unary_op - - __invert__ = _make_unary_op(ast.Invert()) - __pos__ = _make_unary_op(ast.UAdd()) - __neg__ = _make_unary_op(ast.USub()) - - del _make_unary_op - - -def _template_to_ast_constructor(template): - """Convert a `template` instance to a non-literal AST.""" - args = [] - for part in template: - match part: - case str(): - args.append(ast.Constant(value=part)) - case _: - interp = ast.Call( - func=ast.Name(id="Interpolation"), - args=[ - ast.Constant(value=part.value), - ast.Constant(value=part.expression), - ast.Constant(value=part.conversion), - ast.Constant(value=part.format_spec), - ] - ) - args.append(interp) - return ast.Call(func=ast.Name(id="Template"), args=args, keywords=[]) - - -def _template_to_ast_literal(template, parsed): - """Convert a `template` instance to a t-string literal AST.""" - values = [] - interp_count = 0 - for part in template: - match part: - case str(): - values.append(ast.Constant(value=part)) - case _: - interp = ast.Interpolation( - str=part.expression, - value=parsed[interp_count], - conversion=ord(part.conversion) if part.conversion else -1, - format_spec=ast.Constant(value=part.format_spec) - if part.format_spec - else None, - ) - values.append(interp) - interp_count += 1 - return ast.TemplateStr(values=values) - - -def _template_to_ast(template): - """Make a best-effort conversion of a `template` instance to an AST.""" - # gh-138558: Not all Template instances can be represented as t-string - # literals. Return the most accurate AST we can. See issue for details. - - # If any expr is empty or whitespace only, we cannot convert to a literal. - if any(part.expression.strip() == "" for part in template.interpolations): - return _template_to_ast_constructor(template) - - try: - # Wrap in parens to allow whitespace inside interpolation curly braces - parsed = tuple( - ast.parse(f"({part.expression})", mode="eval").body - for part in template.interpolations - ) - except SyntaxError: - return _template_to_ast_constructor(template) - - return _template_to_ast_literal(template, parsed) - - -class _StringifierDict(dict): - def __init__(self, namespace, *, globals=None, owner=None, is_class=False, format): - super().__init__(namespace) - self.namespace = namespace - self.globals = globals - self.owner = owner - self.is_class = is_class - self.stringifiers = [] - self.next_id = 1 - self.format = format - - def __missing__(self, key): - fwdref = _Stringifier( - key, - globals=self.globals, - owner=self.owner, - is_class=self.is_class, - stringifier_dict=self, - ) - self.stringifiers.append(fwdref) - return fwdref - - def transmogrify(self, cell_dict): - for obj in self.stringifiers: - obj.__class__ = ForwardRef - obj.__stringifier_dict__ = None # not needed for ForwardRef - if isinstance(obj.__ast_node__, str): - obj.__arg__ = obj.__ast_node__ - obj.__ast_node__ = None - if cell_dict is not None and obj.__cell__ is None: - obj.__cell__ = cell_dict - - def create_unique_name(self): - name = f"__annotationlib_name_{self.next_id}__" - self.next_id += 1 - return name - - -def call_evaluate_function(evaluate, format, *, owner=None): - """Call an evaluate function. Evaluate functions are normally generated for - the value of type aliases and the bounds, constraints, and defaults of - type parameter objects. - """ - return call_annotate_function(evaluate, format, owner=owner, _is_evaluate=True) - - -def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False): - """Call an __annotate__ function. __annotate__ functions are normally - generated by the compiler to defer the evaluation of annotations. They - can be called with any of the format arguments in the Format enum, but - compiler-generated __annotate__ functions only support the VALUE format. - This function provides additional functionality to call __annotate__ - functions with the FORWARDREF and STRING formats. - - *annotate* must be an __annotate__ function, which takes a single argument - and returns a dict of annotations. - - *format* must be a member of the Format enum or one of the corresponding - integer values. - - *owner* can be the object that owns the annotations (i.e., the module, - class, or function that the __annotate__ function derives from). With the - FORWARDREF format, it is used to provide better evaluation capabilities - on the generated ForwardRef objects. - - """ - if format == Format.VALUE_WITH_FAKE_GLOBALS: - raise ValueError("The VALUE_WITH_FAKE_GLOBALS format is for internal use only") - try: - return annotate(format) - except NotImplementedError: - pass - if format == Format.STRING: - # STRING is implemented by calling the annotate function in a special - # environment where every name lookup results in an instance of _Stringifier. - # _Stringifier supports every dunder operation and returns a new _Stringifier. - # At the end, we get a dictionary that mostly contains _Stringifier objects (or - # possibly constants if the annotate function uses them directly). We then - # convert each of those into a string to get an approximation of the - # original source. - - # Attempt to call with VALUE_WITH_FAKE_GLOBALS to check if it is implemented - # See: https://github.com/python/cpython/issues/138764 - # Only fail on NotImplementedError - try: - annotate(Format.VALUE_WITH_FAKE_GLOBALS) - except NotImplementedError: - # Both STRING and VALUE_WITH_FAKE_GLOBALS are not implemented: fallback to VALUE - return annotations_to_string(annotate(Format.VALUE)) - except Exception: - pass - - globals = _StringifierDict({}, format=format) - is_class = isinstance(owner, type) - closure, _ = _build_closure( - annotate, owner, is_class, globals, allow_evaluation=False - ) - func = types.FunctionType( - annotate.__code__, - globals, - closure=closure, - argdefs=annotate.__defaults__, - kwdefaults=annotate.__kwdefaults__, - ) - annos = func(Format.VALUE_WITH_FAKE_GLOBALS) - if _is_evaluate: - return _stringify_single(annos) - return { - key: _stringify_single(val) - for key, val in annos.items() - } - elif format == Format.FORWARDREF: - # FORWARDREF is implemented similarly to STRING, but there are two changes, - # at the beginning and the end of the process. - # First, while STRING uses an empty dictionary as the namespace, so that all - # name lookups result in _Stringifier objects, FORWARDREF uses the globals - # and builtins, so that defined names map to their real values. - # Second, instead of returning strings, we want to return either real values - # or ForwardRef objects. To do this, we keep track of all _Stringifier objects - # created while the annotation is being evaluated, and at the end we convert - # them all to ForwardRef objects by assigning to __class__. To make this - # technique work, we have to ensure that the _Stringifier and ForwardRef - # classes share the same attributes. - # We use this technique because while the annotations are being evaluated, - # we want to support all operations that the language allows, including even - # __getattr__ and __eq__, and return new _Stringifier objects so we can accurately - # reconstruct the source. But in the dictionary that we eventually return, we - # want to return objects with more user-friendly behavior, such as an __eq__ - # that returns a bool and an defined set of attributes. - namespace = {**annotate.__builtins__, **annotate.__globals__} - is_class = isinstance(owner, type) - globals = _StringifierDict( - namespace, - globals=annotate.__globals__, - owner=owner, - is_class=is_class, - format=format, - ) - closure, cell_dict = _build_closure( - annotate, owner, is_class, globals, allow_evaluation=True - ) - func = types.FunctionType( - annotate.__code__, - globals, - closure=closure, - argdefs=annotate.__defaults__, - kwdefaults=annotate.__kwdefaults__, - ) - try: - result = func(Format.VALUE_WITH_FAKE_GLOBALS) - except NotImplementedError: - # FORWARDREF and VALUE_WITH_FAKE_GLOBALS not supported, fall back to VALUE - return annotate(Format.VALUE) - except Exception: - pass - else: - globals.transmogrify(cell_dict) - return result - - # Try again, but do not provide any globals. This allows us to return - # a value in certain cases where an exception gets raised during evaluation. - globals = _StringifierDict( - {}, - globals=annotate.__globals__, - owner=owner, - is_class=is_class, - format=format, - ) - closure, cell_dict = _build_closure( - annotate, owner, is_class, globals, allow_evaluation=False - ) - func = types.FunctionType( - annotate.__code__, - globals, - closure=closure, - argdefs=annotate.__defaults__, - kwdefaults=annotate.__kwdefaults__, - ) - result = func(Format.VALUE_WITH_FAKE_GLOBALS) - globals.transmogrify(cell_dict) - if _is_evaluate: - if isinstance(result, ForwardRef): - return result.evaluate(format=Format.FORWARDREF) - else: - return result - else: - return { - key: ( - val.evaluate(format=Format.FORWARDREF) - if isinstance(val, ForwardRef) - else val - ) - for key, val in result.items() - } - elif format == Format.VALUE: - # Should be impossible because __annotate__ functions must not raise - # NotImplementedError for this format. - raise RuntimeError("annotate function does not support VALUE format") - else: - raise ValueError(f"Invalid format: {format!r}") - - -def _build_closure(annotate, owner, is_class, stringifier_dict, *, allow_evaluation): - if not annotate.__closure__: - return None, None - new_closure = [] - cell_dict = {} - for name, cell in zip(annotate.__code__.co_freevars, annotate.__closure__, strict=True): - cell_dict[name] = cell - new_cell = None - if allow_evaluation: - try: - cell.cell_contents - except ValueError: - pass - else: - new_cell = cell - if new_cell is None: - fwdref = _Stringifier( - name, - cell=cell, - owner=owner, - globals=annotate.__globals__, - is_class=is_class, - stringifier_dict=stringifier_dict, - ) - stringifier_dict.stringifiers.append(fwdref) - new_cell = types.CellType(fwdref) - new_closure.append(new_cell) - return tuple(new_closure), cell_dict - - -def _stringify_single(anno): - if anno is ...: - return "..." - # We have to handle str specially to support PEP 563 stringified annotations. - elif isinstance(anno, str): - return anno - elif isinstance(anno, _Template): - return ast.unparse(_template_to_ast(anno)) - else: - return repr(anno) - - -def get_annotate_from_class_namespace(obj): - """Retrieve the annotate function from a class namespace dictionary. - - Return None if the namespace does not contain an annotate function. - This is useful in metaclass ``__new__`` methods to retrieve the annotate function. - """ - try: - return obj["__annotate__"] - except KeyError: - return obj.get("__annotate_func__", None) - - -def get_annotations( - obj, *, globals=None, locals=None, eval_str=False, format=Format.VALUE -): - """Compute the annotations dict for an object. - - obj may be a callable, class, module, or other object with - __annotate__ or __annotations__ attributes. - Passing any other object raises TypeError. - - The *format* parameter controls the format in which annotations are returned, - and must be a member of the Format enum or its integer equivalent. - For the VALUE format, the __annotations__ is tried first; if it - does not exist, the __annotate__ function is called. The - FORWARDREF format uses __annotations__ if it exists and can be - evaluated, and otherwise falls back to calling the __annotate__ function. - The STRING format tries __annotate__ first, and falls back to - using __annotations__, stringified using annotations_to_string(). - - This function handles several details for you: - - * If eval_str is true, values of type str will - be un-stringized using eval(). This is intended - for use with stringized annotations - ("from __future__ import annotations"). - * If obj doesn't have an annotations dict, returns an - empty dict. (Functions and methods always have an - annotations dict; classes, modules, and other types of - callables may not.) - * Ignores inherited annotations on classes. If a class - doesn't have its own annotations dict, returns an empty dict. - * All accesses to object members and dict values are done - using getattr() and dict.get() for safety. - * Always, always, always returns a freshly-created dict. - - eval_str controls whether or not values of type str are replaced - with the result of calling eval() on those values: - - * If eval_str is true, eval() is called on values of type str. - * If eval_str is false (the default), values of type str are unchanged. - - globals and locals are passed in to eval(); see the documentation - for eval() for more information. If either globals or locals is - None, this function may replace that value with a context-specific - default, contingent on type(obj): - - * If obj is a module, globals defaults to obj.__dict__. - * If obj is a class, globals defaults to - sys.modules[obj.__module__].__dict__ and locals - defaults to the obj class namespace. - * If obj is a callable, globals defaults to obj.__globals__, - although if obj is a wrapped function (using - functools.update_wrapper()) it is first unwrapped. - """ - if eval_str and format != Format.VALUE: - raise ValueError("eval_str=True is only supported with format=Format.VALUE") - - match format: - case Format.VALUE: - # For VALUE, we first look at __annotations__ - ann = _get_dunder_annotations(obj) - - # If it's not there, try __annotate__ instead - if ann is None: - ann = _get_and_call_annotate(obj, format) - case Format.FORWARDREF: - # For FORWARDREF, we use __annotations__ if it exists - try: - ann = _get_dunder_annotations(obj) - except Exception: - pass - else: - if ann is not None: - return dict(ann) - - # But if __annotations__ threw a NameError, we try calling __annotate__ - ann = _get_and_call_annotate(obj, format) - if ann is None: - # If that didn't work either, we have a very weird object: evaluating - # __annotations__ threw NameError and there is no __annotate__. In that case, - # we fall back to trying __annotations__ again. - ann = _get_dunder_annotations(obj) - case Format.STRING: - # For STRING, we try to call __annotate__ - ann = _get_and_call_annotate(obj, format) - if ann is not None: - return dict(ann) - # But if we didn't get it, we use __annotations__ instead. - ann = _get_dunder_annotations(obj) - if ann is not None: - return annotations_to_string(ann) - case Format.VALUE_WITH_FAKE_GLOBALS: - raise ValueError("The VALUE_WITH_FAKE_GLOBALS format is for internal use only") - case _: - raise ValueError(f"Unsupported format {format!r}") - - if ann is None: - if isinstance(obj, type) or callable(obj): - return {} - raise TypeError(f"{obj!r} does not have annotations") - - if not ann: - return {} - - if not eval_str: - return dict(ann) - - if globals is None or locals is None: - if isinstance(obj, type): - # class - obj_globals = None - module_name = getattr(obj, "__module__", None) - if module_name: - module = sys.modules.get(module_name, None) - if module: - obj_globals = getattr(module, "__dict__", None) - obj_locals = dict(vars(obj)) - unwrap = obj - elif isinstance(obj, types.ModuleType): - # module - obj_globals = getattr(obj, "__dict__") - obj_locals = None - unwrap = None - elif callable(obj): - # this includes types.Function, types.BuiltinFunctionType, - # types.BuiltinMethodType, functools.partial, functools.singledispatch, - # "class funclike" from Lib/test/test_inspect... on and on it goes. - obj_globals = getattr(obj, "__globals__", None) - obj_locals = None - unwrap = obj - else: - obj_globals = obj_locals = unwrap = None - - if unwrap is not None: - # Use an id-based visited set to detect cycles in the __wrapped__ - # and functools.partial.func chain (e.g. f.__wrapped__ = f). - # On cycle detection we stop and use whatever __globals__ we have - # found so far, mirroring the approach of inspect.unwrap(). - _seen_ids = {id(unwrap)} - while True: - if hasattr(unwrap, "__wrapped__"): - candidate = unwrap.__wrapped__ - if id(candidate) in _seen_ids: - break - _seen_ids.add(id(candidate)) - unwrap = candidate - continue - if functools := sys.modules.get("functools"): - if isinstance(unwrap, functools.partial): - candidate = unwrap.func - if id(candidate) in _seen_ids: - break - _seen_ids.add(id(candidate)) - unwrap = candidate - continue - break - if hasattr(unwrap, "__globals__"): - obj_globals = unwrap.__globals__ - - if globals is None: - globals = obj_globals - if locals is None: - locals = obj_locals - - # "Inject" type parameters into the local namespace - # (unless they are shadowed by assignments *in* the local namespace), - # as a way of emulating annotation scopes when calling `eval()` - if type_params := getattr(obj, "__type_params__", ()): - if locals is None: - locals = {} - locals = {param.__name__: param for param in type_params} | locals - - return_value = { - key: value if not isinstance(value, str) - else eval(_rewrite_star_unpack(value), globals, locals) - for key, value in ann.items() - } - return return_value - - -def type_repr(value): - """Convert a Python value to a format suitable for use with the STRING format. - - This is intended as a helper for tools that support the STRING format but do - not have access to the code that originally produced the annotations. It uses - repr() for most objects. - - """ - if isinstance(value, (type, types.FunctionType, types.BuiltinFunctionType)): - if value.__module__ == "builtins": - return value.__qualname__ - return f"{value.__module__}.{value.__qualname__}" - elif isinstance(value, _Template): - tree = _template_to_ast(value) - return ast.unparse(tree) - if value is ...: - return "..." - return repr(value) - - -def annotations_to_string(annotations): - """Convert an annotation dict containing values to approximately the STRING format. - - Always returns a fresh a dictionary. - """ - return { - n: t if isinstance(t, str) else type_repr(t) - for n, t in annotations.items() - } - - -def _rewrite_star_unpack(arg): - """If the given argument annotation expression is a star unpack e.g. `'*Ts'` - rewrite it to a valid expression. - """ - if arg.lstrip().startswith("*"): - return f"({arg},)[0]" # E.g. (*Ts,)[0] or (*tuple[int, int],)[0] - else: - return arg - - -def _get_and_call_annotate(obj, format): - """Get the __annotate__ function and call it. - - May not return a fresh dictionary. - """ - annotate = getattr(obj, "__annotate__", None) - if annotate is not None: - ann = call_annotate_function(annotate, format, owner=obj) - if not isinstance(ann, dict): - raise ValueError(f"{obj!r}.__annotate__ returned a non-dict") - return ann - return None - - -_BASE_GET_ANNOTATIONS = type.__dict__["__annotations__"].__get__ - - -def _get_dunder_annotations(obj): - """Return the annotations for an object, checking that it is a dictionary. - - Does not return a fresh dictionary. - """ - # This special case is needed to support types defined under - # from __future__ import annotations, where accessing the __annotations__ - # attribute directly might return annotations for the wrong class. - if isinstance(obj, type): - try: - ann = _BASE_GET_ANNOTATIONS(obj) - except AttributeError: - # For static types, the descriptor raises AttributeError. - return None - else: - ann = getattr(obj, "__annotations__", None) - if ann is None: - return None - - if not isinstance(ann, dict): - raise ValueError(f"{obj!r}.__annotations__ is neither a dict nor None") - return ann diff --git a/Python314_4_x86_Template/Lib/antigravity.py b/Python314_4_x86_Template/Lib/antigravity.py deleted file mode 100644 index 6dc520733..000000000 --- a/Python314_4_x86_Template/Lib/antigravity.py +++ /dev/null @@ -1,17 +0,0 @@ - -import webbrowser -import hashlib - -webbrowser.open("https://xkcd.com/353/") - -def geohash(latitude, longitude, datedow): - '''Compute geohash() using the Munroe algorithm. - - >>> geohash(37.421542, -122.085589, b'2005-05-26-10458.68') - 37.857713 -122.544543 - - ''' - # https://xkcd.com/426/ - h = hashlib.md5(datedow, usedforsecurity=False).hexdigest() - p, q = [('%f' % float.fromhex('0.' + x)) for x in (h[:16], h[16:32])] - print('%d%s %d%s' % (latitude, p[1:], longitude, q[1:])) diff --git a/Python314_4_x86_Template/Lib/argparse.py b/Python314_4_x86_Template/Lib/argparse.py deleted file mode 100644 index 8cf856943..000000000 --- a/Python314_4_x86_Template/Lib/argparse.py +++ /dev/null @@ -1,2786 +0,0 @@ -# Author: Steven J. Bethard <steven.bethard@gmail.com>. -# New maintainer as of 29 August 2019: Raymond Hettinger <raymond.hettinger@gmail.com> - -"""Command-line parsing library - -This module is an optparse-inspired command-line parsing library that: - - - handles both optional and positional arguments - - produces highly informative usage messages - - supports parsers that dispatch to sub-parsers - -The following is a simple usage example that sums integers from the -command-line and writes the result to a file:: - - parser = argparse.ArgumentParser( - description='sum the integers at the command line') - parser.add_argument( - 'integers', metavar='int', nargs='+', type=int, - help='an integer to be summed') - parser.add_argument( - '--log', - help='the file where the sum should be written') - args = parser.parse_args() - with (open(args.log, 'w') if args.log is not None - else contextlib.nullcontext(sys.stdout)) as log: - log.write('%s' % sum(args.integers)) - -The module contains the following public classes: - - - ArgumentParser -- The main entry point for command-line parsing. As the - example above shows, the add_argument() method is used to populate - the parser with actions for optional and positional arguments. Then - the parse_args() method is invoked to convert the args at the - command-line into an object with attributes. - - - ArgumentError -- The exception raised by ArgumentParser objects when - there are errors with the parser's actions. Errors raised while - parsing the command-line are caught by ArgumentParser and emitted - as command-line messages. - - - FileType -- A factory for defining types of files to be created. As the - example above shows, instances of FileType are typically passed as - the type= argument of add_argument() calls. Deprecated since - Python 3.14. - - - Action -- The base class for parser actions. Typically actions are - selected by passing strings like 'store_true' or 'append_const' to - the action= argument of add_argument(). However, for greater - customization of ArgumentParser actions, subclasses of Action may - be defined and passed as the action= argument. - - - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, - ArgumentDefaultsHelpFormatter -- Formatter classes which - may be passed as the formatter_class= argument to the - ArgumentParser constructor. HelpFormatter is the default, - RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser - not to change the formatting for help text, and - ArgumentDefaultsHelpFormatter adds information about argument defaults - to the help. - -All other classes in this module are considered implementation details. -(Also note that HelpFormatter and RawDescriptionHelpFormatter are only -considered public as object names -- the API of the formatter objects is -still considered an implementation detail.) -""" - -__version__ = '1.1' -__all__ = [ - 'ArgumentParser', - 'ArgumentError', - 'ArgumentTypeError', - 'BooleanOptionalAction', - 'FileType', - 'HelpFormatter', - 'ArgumentDefaultsHelpFormatter', - 'RawDescriptionHelpFormatter', - 'RawTextHelpFormatter', - 'MetavarTypeHelpFormatter', - 'Namespace', - 'Action', - 'ONE_OR_MORE', - 'OPTIONAL', - 'PARSER', - 'REMAINDER', - 'SUPPRESS', - 'ZERO_OR_MORE', -] - - -import os as _os -import re as _re -import sys as _sys - -from gettext import gettext as _, ngettext - -SUPPRESS = '==SUPPRESS==' - -OPTIONAL = '?' -ZERO_OR_MORE = '*' -ONE_OR_MORE = '+' -PARSER = 'A...' -REMAINDER = '...' -_UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' - -# ============================= -# Utility functions and classes -# ============================= - -class _AttributeHolder(object): - """Abstract base class that provides __repr__. - - The __repr__ method returns a string in the format:: - ClassName(attr=name, attr=name, ...) - The attributes are determined either by a class-level attribute, - '_kwarg_names', or by inspecting the instance __dict__. - """ - - def __repr__(self): - type_name = type(self).__name__ - arg_strings = [] - star_args = {} - for arg in self._get_args(): - arg_strings.append(repr(arg)) - for name, value in self._get_kwargs(): - if name.isidentifier(): - arg_strings.append('%s=%r' % (name, value)) - else: - star_args[name] = value - if star_args: - arg_strings.append('**%s' % repr(star_args)) - return '%s(%s)' % (type_name, ', '.join(arg_strings)) - - def _get_kwargs(self): - return list(self.__dict__.items()) - - def _get_args(self): - return [] - - -def _copy_items(items): - if items is None: - return [] - # The copy module is used only in the 'append' and 'append_const' - # actions, and it is needed only when the default value isn't a list. - # Delay its import for speeding up the common case. - if type(items) is list: - return items[:] - import copy - return copy.copy(items) - - -def _identity(value): - return value - - -# =============== -# Formatting Help -# =============== - - -class HelpFormatter(object): - """Formatter for generating usage messages and argument help strings. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def __init__( - self, - prog, - indent_increment=2, - max_help_position=24, - width=None, - color=True, - ): - # default setting for width - if width is None: - import shutil - width = shutil.get_terminal_size().columns - width -= 2 - - self._set_color(color) - self._prog = prog - self._indent_increment = indent_increment - self._max_help_position = min(max_help_position, - max(width - 20, indent_increment * 2)) - self._width = width - - self._current_indent = 0 - self._level = 0 - self._action_max_length = 0 - - self._root_section = self._Section(self, None) - self._current_section = self._root_section - - self._whitespace_matcher = _re.compile(r'\s+', _re.ASCII) - self._long_break_matcher = _re.compile(r'\n\n\n+') - - def _set_color(self, color): - from _colorize import can_colorize, decolor, get_theme - - if color and can_colorize(): - self._theme = get_theme(force_color=True).argparse - self._decolor = decolor - else: - self._theme = get_theme(force_no_color=True).argparse - self._decolor = _identity - - # =============================== - # Section and indentation methods - # =============================== - - def _indent(self): - self._current_indent += self._indent_increment - self._level += 1 - - def _dedent(self): - self._current_indent -= self._indent_increment - assert self._current_indent >= 0, 'Indent decreased below 0.' - self._level -= 1 - - class _Section(object): - - def __init__(self, formatter, parent, heading=None): - self.formatter = formatter - self.parent = parent - self.heading = heading - self.items = [] - - def format_help(self): - # format the indented section - if self.parent is not None: - self.formatter._indent() - join = self.formatter._join_parts - item_help = join([func(*args) for func, args in self.items]) - if self.parent is not None: - self.formatter._dedent() - - # return nothing if the section was empty - if not item_help: - return '' - - # add the heading if the section was non-empty - if self.heading is not SUPPRESS and self.heading is not None: - current_indent = self.formatter._current_indent - heading_text = _('%(heading)s:') % dict(heading=self.heading) - t = self.formatter._theme - heading = ( - f'{" " * current_indent}' - f'{t.heading}{heading_text}{t.reset}\n' - ) - else: - heading = '' - - # join the section-initial newline, the heading and the help - return join(['\n', heading, item_help, '\n']) - - def _add_item(self, func, args): - self._current_section.items.append((func, args)) - - # ======================== - # Message building methods - # ======================== - - def start_section(self, heading): - self._indent() - section = self._Section(self, self._current_section, heading) - self._add_item(section.format_help, []) - self._current_section = section - - def end_section(self): - self._current_section = self._current_section.parent - self._dedent() - - def add_text(self, text): - if text is not SUPPRESS and text is not None: - self._add_item(self._format_text, [text]) - - def add_usage(self, usage, actions, groups, prefix=None): - if usage is not SUPPRESS: - args = usage, actions, groups, prefix - self._add_item(self._format_usage, args) - - def add_argument(self, action): - if action.help is not SUPPRESS: - - # find all invocations - get_invocation = lambda x: self._decolor(self._format_action_invocation(x)) - invocation_lengths = [len(get_invocation(action)) + self._current_indent] - for subaction in self._iter_indented_subactions(action): - invocation_lengths.append(len(get_invocation(subaction)) + self._current_indent) - - # update the maximum item length - action_length = max(invocation_lengths) - self._action_max_length = max(self._action_max_length, - action_length) - - # add the item to the list - self._add_item(self._format_action, [action]) - - def add_arguments(self, actions): - for action in actions: - self.add_argument(action) - - # ======================= - # Help-formatting methods - # ======================= - - def format_help(self): - help = self._root_section.format_help() - if help: - help = self._long_break_matcher.sub('\n\n', help) - help = help.strip('\n') + '\n' - return help - - def _join_parts(self, part_strings): - return ''.join([part - for part in part_strings - if part and part is not SUPPRESS]) - - def _format_usage(self, usage, actions, groups, prefix): - t = self._theme - - if prefix is None: - prefix = _('usage: ') - - # if usage is specified, use that - if usage is not None: - usage = ( - t.prog_extra - + usage - % {"prog": f"{t.prog}{self._prog}{t.reset}{t.prog_extra}"} - + t.reset - ) - - # if no optionals or positionals are available, usage is just prog - elif usage is None and not actions: - usage = f"{t.prog}{self._prog}{t.reset}" - - # if optionals and positionals are available, calculate usage - elif usage is None: - prog = '%(prog)s' % dict(prog=self._prog) - - parts, pos_start = self._get_actions_usage_parts(actions, groups) - # build full usage string - usage = ' '.join(filter(None, [prog, *parts])) - - # wrap the usage parts if it's too long - text_width = self._width - self._current_indent - if len(prefix) + len(self._decolor(usage)) > text_width: - - # break usage into wrappable parts - opt_parts = parts[:pos_start] - pos_parts = parts[pos_start:] - - # helper for wrapping lines - def get_lines(parts, indent, prefix=None): - lines = [] - line = [] - indent_length = len(indent) - if prefix is not None: - line_len = len(prefix) - 1 - else: - line_len = indent_length - 1 - for part in parts: - part_len = len(self._decolor(part)) - if line_len + 1 + part_len > text_width and line: - lines.append(indent + ' '.join(line)) - line = [] - line_len = indent_length - 1 - line.append(part) - line_len += part_len + 1 - if line: - lines.append(indent + ' '.join(line)) - if prefix is not None: - lines[0] = lines[0][indent_length:] - return lines - - # if prog is short, follow it with optionals or positionals - prog_len = len(self._decolor(prog)) - if len(prefix) + prog_len <= 0.75 * text_width: - indent = ' ' * (len(prefix) + prog_len + 1) - if opt_parts: - lines = get_lines([prog] + opt_parts, indent, prefix) - lines.extend(get_lines(pos_parts, indent)) - elif pos_parts: - lines = get_lines([prog] + pos_parts, indent, prefix) - else: - lines = [prog] - - # if prog is long, put it on its own line - else: - indent = ' ' * len(prefix) - parts = opt_parts + pos_parts - lines = get_lines(parts, indent) - if len(lines) > 1: - lines = [] - lines.extend(get_lines(opt_parts, indent)) - lines.extend(get_lines(pos_parts, indent)) - lines = [prog] + lines - - # join lines into usage - usage = '\n'.join(lines) - - usage = usage.removeprefix(prog) - usage = f"{t.prog}{prog}{t.reset}{usage}" - - # prefix with 'usage:' - return f'{t.usage}{prefix}{t.reset}{usage}\n\n' - - def _is_long_option(self, string): - return len(string) > 2 - - def _get_actions_usage_parts(self, actions, groups): - """Get usage parts with split index for optionals/positionals. - - Returns (parts, pos_start) where pos_start is the index in parts - where positionals begin. - This preserves mutually exclusive group formatting across the - optionals/positionals boundary (gh-75949). - """ - actions = [action for action in actions if action.help is not SUPPRESS] - # group actions by mutually exclusive groups - action_groups = dict.fromkeys(actions) - for group in groups: - for action in group._group_actions: - if action in action_groups: - action_groups[action] = group - # positional arguments keep their position - positionals = [] - for action in actions: - if not action.option_strings: - group = action_groups.pop(action) - if group: - group_actions = [ - action2 for action2 in group._group_actions - if action2.option_strings and - action_groups.pop(action2, None) - ] + [action] - positionals.append((group.required, group_actions)) - else: - positionals.append((None, [action])) - # the remaining optional arguments are sorted by the position of - # the first option in the group - optionals = [] - for action in actions: - if action.option_strings and action in action_groups: - group = action_groups.pop(action) - if group: - group_actions = [action] + [ - action2 for action2 in group._group_actions - if action2.option_strings and - action_groups.pop(action2, None) - ] - optionals.append((group.required, group_actions)) - else: - optionals.append((None, [action])) - - # collect all actions format strings - parts = [] - t = self._theme - pos_start = None - for i, (required, group) in enumerate(optionals + positionals): - start = len(parts) - if i == len(optionals): - pos_start = start - in_group = len(group) > 1 - for action in group: - # produce all arg strings - if not action.option_strings: - default = self._get_default_metavar_for_positional(action) - part = self._format_args(action, default) - # if it's in a group, strip the outer [] - if in_group: - if part[0] == '[' and part[-1] == ']': - part = part[1:-1] - part = t.summary_action + part + t.reset - - # produce the first way to invoke the option in brackets - else: - option_string = action.option_strings[0] - if self._is_long_option(option_string): - option_color = t.summary_long_option - else: - option_color = t.summary_short_option - - # if the Optional doesn't take a value, format is: - # -s or --long - if action.nargs == 0: - part = action.format_usage() - part = f"{option_color}{part}{t.reset}" - - # if the Optional takes a value, format is: - # -s ARGS or --long ARGS - else: - default = self._get_default_metavar_for_optional(action) - args_string = self._format_args(action, default) - part = ( - f"{option_color}{option_string} " - f"{t.summary_label}{args_string}{t.reset}" - ) - - # make it look optional if it's not required or in a group - if not (action.required or required or in_group): - part = '[%s]' % part - - # add the action string to the list - parts.append(part) - - if in_group: - parts[start] = ('(' if required else '[') + parts[start] - for i in range(start, len(parts) - 1): - parts[i] += ' |' - parts[-1] += ')' if required else ']' - - if pos_start is None: - pos_start = len(parts) - return parts, pos_start - - def _format_text(self, text): - if '%(prog)' in text: - text = text % dict(prog=self._prog) - text_width = max(self._width - self._current_indent, 11) - indent = ' ' * self._current_indent - return self._fill_text(text, text_width, indent) + '\n\n' - - def _format_action(self, action): - # determine the required width and the entry label - help_position = min(self._action_max_length + 2, - self._max_help_position) - help_width = max(self._width - help_position, 11) - action_width = help_position - self._current_indent - 2 - action_header = self._format_action_invocation(action) - action_header_no_color = self._decolor(action_header) - - # no help; start on same line and add a final newline - if not action.help: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - - # short action name; start on the same line and pad two spaces - elif len(action_header_no_color) <= action_width: - # calculate widths without color codes - action_header_color = action_header - tup = self._current_indent, '', action_width, action_header_no_color - action_header = '%*s%-*s ' % tup - # swap in the colored header - action_header = action_header.replace( - action_header_no_color, action_header_color - ) - indent_first = 0 - - # long action name; start on the next line - else: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - indent_first = help_position - - # collect the pieces of the action help - parts = [action_header] - - # if there was help for the action, add lines of help text - if action.help and action.help.strip(): - help_text = self._expand_help(action) - if help_text: - help_lines = self._split_lines(help_text, help_width) - parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) - for line in help_lines[1:]: - parts.append('%*s%s\n' % (help_position, '', line)) - - # or add a newline if the description doesn't end with one - elif not action_header.endswith('\n'): - parts.append('\n') - - # if there are any sub-actions, add their help as well - for subaction in self._iter_indented_subactions(action): - parts.append(self._format_action(subaction)) - - # return a single string - return self._join_parts(parts) - - def _format_action_invocation(self, action): - t = self._theme - - if not action.option_strings: - default = self._get_default_metavar_for_positional(action) - return ( - t.action - + ' '.join(self._metavar_formatter(action, default)(1)) - + t.reset - ) - - else: - - def color_option_strings(strings): - parts = [] - for s in strings: - if self._is_long_option(s): - parts.append(f"{t.long_option}{s}{t.reset}") - else: - parts.append(f"{t.short_option}{s}{t.reset}") - return parts - - # if the Optional doesn't take a value, format is: - # -s, --long - if action.nargs == 0: - option_strings = color_option_strings(action.option_strings) - return ', '.join(option_strings) - - # if the Optional takes a value, format is: - # -s, --long ARGS - else: - default = self._get_default_metavar_for_optional(action) - option_strings = color_option_strings(action.option_strings) - args_string = ( - f"{t.label}{self._format_args(action, default)}{t.reset}" - ) - return ', '.join(option_strings) + ' ' + args_string - - def _metavar_formatter(self, action, default_metavar): - if action.metavar is not None: - result = action.metavar - elif action.choices is not None: - result = '{%s}' % ','.join(map(str, action.choices)) - else: - result = default_metavar - - def format(tuple_size): - if isinstance(result, tuple): - return result - else: - return (result, ) * tuple_size - return format - - def _format_args(self, action, default_metavar): - get_metavar = self._metavar_formatter(action, default_metavar) - if action.nargs is None: - result = '%s' % get_metavar(1) - elif action.nargs == OPTIONAL: - result = '[%s]' % get_metavar(1) - elif action.nargs == ZERO_OR_MORE: - metavar = get_metavar(1) - if len(metavar) == 2: - result = '[%s [%s ...]]' % metavar - else: - result = '[%s ...]' % metavar - elif action.nargs == ONE_OR_MORE: - result = '%s [%s ...]' % get_metavar(2) - elif action.nargs == REMAINDER: - result = '...' - elif action.nargs == PARSER: - result = '%s ...' % get_metavar(1) - elif action.nargs == SUPPRESS: - result = '' - else: - try: - formats = ['%s' for _ in range(action.nargs)] - except TypeError: - raise ValueError("invalid nargs value") from None - result = ' '.join(formats) % get_metavar(action.nargs) - return result - - def _expand_help(self, action): - help_string = self._get_help_string(action) - if '%' not in help_string: - return help_string - params = dict(vars(action), prog=self._prog) - for name in list(params): - value = params[name] - if value is SUPPRESS: - del params[name] - elif hasattr(value, '__name__'): - params[name] = value.__name__ - if params.get('choices') is not None: - params['choices'] = ', '.join(map(str, params['choices'])) - return help_string % params - - def _iter_indented_subactions(self, action): - try: - get_subactions = action._get_subactions - except AttributeError: - pass - else: - self._indent() - yield from get_subactions() - self._dedent() - - def _split_lines(self, text, width): - text = self._whitespace_matcher.sub(' ', text).strip() - # The textwrap module is used only for formatting help. - # Delay its import for speeding up the common usage of argparse. - import textwrap - return textwrap.wrap(text, width) - - def _fill_text(self, text, width, indent): - text = self._whitespace_matcher.sub(' ', text).strip() - import textwrap - return textwrap.fill(text, width, - initial_indent=indent, - subsequent_indent=indent) - - def _get_help_string(self, action): - return action.help - - def _get_default_metavar_for_optional(self, action): - return action.dest.upper() - - def _get_default_metavar_for_positional(self, action): - return action.dest - - -class RawDescriptionHelpFormatter(HelpFormatter): - """Help message formatter which retains any formatting in descriptions. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _fill_text(self, text, width, indent): - return ''.join(indent + line for line in text.splitlines(keepends=True)) - - -class RawTextHelpFormatter(RawDescriptionHelpFormatter): - """Help message formatter which retains formatting of all help text. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _split_lines(self, text, width): - return text.splitlines() - - -class ArgumentDefaultsHelpFormatter(HelpFormatter): - """Help message formatter which adds default values to argument help. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _get_help_string(self, action): - help = action.help - if help is None: - help = '' - - if ( - '%(default)' not in help - and action.default is not SUPPRESS - and not action.required - ): - defaulting_nargs = (OPTIONAL, ZERO_OR_MORE) - if action.option_strings or action.nargs in defaulting_nargs: - help += _(' (default: %(default)s)') - return help - - - -class MetavarTypeHelpFormatter(HelpFormatter): - """Help message formatter which uses the argument 'type' as the default - metavar value (instead of the argument 'dest') - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _get_default_metavar_for_optional(self, action): - return action.type.__name__ - - def _get_default_metavar_for_positional(self, action): - return action.type.__name__ - - -# ===================== -# Options and Arguments -# ===================== - -def _get_action_name(argument): - if argument is None: - return None - elif argument.option_strings: - return '/'.join(argument.option_strings) - elif argument.metavar not in (None, SUPPRESS): - metavar = argument.metavar - if not isinstance(metavar, tuple): - return metavar - if argument.nargs == ZERO_OR_MORE and len(metavar) == 2: - return '%s[, %s]' % metavar - elif argument.nargs == ONE_OR_MORE: - return '%s[, %s]' % metavar - else: - return ', '.join(metavar) - elif argument.dest not in (None, SUPPRESS): - return argument.dest - elif argument.choices: - return '{%s}' % ','.join(map(str, argument.choices)) - else: - return None - - -class ArgumentError(Exception): - """An error from creating or using an argument (optional or positional). - - The string value of this exception is the message, augmented with - information about the argument that caused it. - """ - - def __init__(self, argument, message): - self.argument_name = _get_action_name(argument) - self.message = message - - def __str__(self): - if self.argument_name is None: - format = '%(message)s' - else: - format = _('argument %(argument_name)s: %(message)s') - return format % dict(message=self.message, - argument_name=self.argument_name) - - -class ArgumentTypeError(Exception): - """An error from trying to convert a command line string to a type.""" - pass - - -# ============== -# Action classes -# ============== - -class Action(_AttributeHolder): - """Information about how to convert command line strings to Python objects. - - Action objects are used by an ArgumentParser to represent the information - needed to parse a single argument from one or more strings from the - command line. The keyword arguments to the Action constructor are also - all attributes of Action instances. - - Keyword Arguments: - - - option_strings -- A list of command-line option strings which - should be associated with this action. - - - dest -- The name of the attribute to hold the created object(s) - - - nargs -- The number of command-line arguments that should be - consumed. By default, one argument will be consumed and a single - value will be produced. Other values include: - - N (an integer) consumes N arguments (and produces a list) - - '?' consumes zero or one arguments - - '*' consumes zero or more arguments (and produces a list) - - '+' consumes one or more arguments (and produces a list) - Note that the difference between the default and nargs=1 is that - with the default, a single value will be produced, while with - nargs=1, a list containing a single value will be produced. - - - const -- The value to be produced if the option is specified and the - option uses an action that takes no values. - - - default -- The value to be produced if the option is not specified. - - - type -- A callable that accepts a single string argument, and - returns the converted value. The standard Python types str, int, - float, and complex are useful examples of such callables. If None, - str is used. - - - choices -- A container of values that should be allowed. If not None, - after a command-line argument has been converted to the appropriate - type, an exception will be raised if it is not a member of this - collection. - - - required -- True if the action must always be specified at the - command line. This is only meaningful for optional command-line - arguments. - - - help -- The help string describing the argument. - - - metavar -- The name to be used for the option's argument with the - help string. If None, the 'dest' value will be used as the name. - """ - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None, - deprecated=False): - self.option_strings = option_strings - self.dest = dest - self.nargs = nargs - self.const = const - self.default = default - self.type = type - self.choices = choices - self.required = required - self.help = help - self.metavar = metavar - self.deprecated = deprecated - - def _get_kwargs(self): - names = [ - 'option_strings', - 'dest', - 'nargs', - 'const', - 'default', - 'type', - 'choices', - 'required', - 'help', - 'metavar', - 'deprecated', - ] - return [(name, getattr(self, name)) for name in names] - - def format_usage(self): - return self.option_strings[0] - - def __call__(self, parser, namespace, values, option_string=None): - raise NotImplementedError('.__call__() not defined') - - -class BooleanOptionalAction(Action): - def __init__(self, - option_strings, - dest, - default=None, - required=False, - help=None, - deprecated=False): - - _option_strings = [] - for option_string in option_strings: - _option_strings.append(option_string) - - if option_string.startswith('--'): - if option_string.startswith('--no-'): - raise ValueError(f'invalid option name {option_string!r} ' - f'for BooleanOptionalAction') - option_string = '--no-' + option_string[2:] - _option_strings.append(option_string) - - super().__init__( - option_strings=_option_strings, - dest=dest, - nargs=0, - default=default, - required=required, - help=help, - deprecated=deprecated) - - - def __call__(self, parser, namespace, values, option_string=None): - if option_string in self.option_strings: - setattr(namespace, self.dest, not option_string.startswith('--no-')) - - def format_usage(self): - return ' | '.join(self.option_strings) - - -class _StoreAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None, - deprecated=False): - if nargs == 0: - raise ValueError('nargs for store actions must be != 0; if you ' - 'have nothing to store, actions such as store ' - 'true or store const may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_StoreAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, values) - - -class _StoreConstAction(Action): - - def __init__(self, - option_strings, - dest, - const=None, - default=None, - required=False, - help=None, - metavar=None, - deprecated=False): - super(_StoreConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, self.const) - - -class _StoreTrueAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=False, - required=False, - help=None, - deprecated=False): - super(_StoreTrueAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=True, - deprecated=deprecated, - required=required, - help=help, - default=default) - - -class _StoreFalseAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=True, - required=False, - help=None, - deprecated=False): - super(_StoreFalseAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=False, - default=default, - required=required, - help=help, - deprecated=deprecated) - - -class _AppendAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None, - deprecated=False): - if nargs == 0: - raise ValueError('nargs for append actions must be != 0; if arg ' - 'strings are not supplying the value to append, ' - 'the append const action may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_AppendAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - items = getattr(namespace, self.dest, None) - items = _copy_items(items) - items.append(values) - setattr(namespace, self.dest, items) - - -class _AppendConstAction(Action): - - def __init__(self, - option_strings, - dest, - const=None, - default=None, - required=False, - help=None, - metavar=None, - deprecated=False): - super(_AppendConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help, - metavar=metavar, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - items = getattr(namespace, self.dest, None) - items = _copy_items(items) - items.append(self.const) - setattr(namespace, self.dest, items) - - -class _CountAction(Action): - - def __init__(self, - option_strings, - dest, - default=None, - required=False, - help=None, - deprecated=False): - super(_CountAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - default=default, - required=required, - help=help, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - count = getattr(namespace, self.dest, None) - if count is None: - count = 0 - setattr(namespace, self.dest, count + 1) - - -class _HelpAction(Action): - - def __init__(self, - option_strings, - dest=SUPPRESS, - default=SUPPRESS, - help=None, - deprecated=False): - super(_HelpAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help, - deprecated=deprecated) - - def __call__(self, parser, namespace, values, option_string=None): - parser.print_help() - parser.exit() - - -class _VersionAction(Action): - - def __init__(self, - option_strings, - version=None, - dest=SUPPRESS, - default=SUPPRESS, - help=None, - deprecated=False): - if help is None: - help = _("show program's version number and exit") - super(_VersionAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help) - self.version = version - - def __call__(self, parser, namespace, values, option_string=None): - version = self.version - if version is None: - version = parser.version - formatter = parser._get_formatter() - formatter.add_text(version) - parser._print_message(formatter.format_help(), _sys.stdout) - parser.exit() - - -class _SubParsersAction(Action): - - class _ChoicesPseudoAction(Action): - - def __init__(self, name, aliases, help): - metavar = dest = name - if aliases: - metavar += ' (%s)' % ', '.join(aliases) - sup = super(_SubParsersAction._ChoicesPseudoAction, self) - sup.__init__(option_strings=[], dest=dest, help=help, - metavar=metavar) - - def __init__(self, - option_strings, - prog, - parser_class, - dest=SUPPRESS, - required=False, - help=None, - metavar=None): - - self._prog_prefix = prog - self._parser_class = parser_class - self._name_parser_map = {} - self._choices_actions = [] - self._deprecated = set() - self._color = True - - super(_SubParsersAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=PARSER, - choices=self._name_parser_map, - required=required, - help=help, - metavar=metavar) - - def add_parser(self, name, *, deprecated=False, **kwargs): - # set prog from the existing prefix - if kwargs.get('prog') is None: - kwargs['prog'] = '%s %s' % (self._prog_prefix, name) - - # set color - if kwargs.get('color') is None: - kwargs['color'] = self._color - - aliases = kwargs.pop('aliases', ()) - - if name in self._name_parser_map: - raise ValueError(f'conflicting subparser: {name}') - for alias in aliases: - if alias in self._name_parser_map: - raise ValueError(f'conflicting subparser alias: {alias}') - - # create a pseudo-action to hold the choice help - if 'help' in kwargs: - help = kwargs.pop('help') - choice_action = self._ChoicesPseudoAction(name, aliases, help) - self._choices_actions.append(choice_action) - else: - choice_action = None - - # create the parser and add it to the map - parser = self._parser_class(**kwargs) - if choice_action is not None: - parser._check_help(choice_action) - self._name_parser_map[name] = parser - - # make parser available under aliases also - for alias in aliases: - self._name_parser_map[alias] = parser - - if deprecated: - self._deprecated.add(name) - self._deprecated.update(aliases) - - return parser - - def _get_subactions(self): - return self._choices_actions - - def __call__(self, parser, namespace, values, option_string=None): - parser_name = values[0] - arg_strings = values[1:] - - # set the parser name if requested - if self.dest is not SUPPRESS: - setattr(namespace, self.dest, parser_name) - - # select the parser - try: - subparser = self._name_parser_map[parser_name] - except KeyError: - args = {'parser_name': parser_name, - 'choices': ', '.join(self._name_parser_map)} - msg = _('unknown parser %(parser_name)r (choices: %(choices)s)') % args - raise ArgumentError(self, msg) - - if parser_name in self._deprecated: - parser._warning(_("command '%(parser_name)s' is deprecated") % - {'parser_name': parser_name}) - - # parse all the remaining options into the namespace - # store any unrecognized options on the object, so that the top - # level parser can decide what to do with them - - # In case this subparser defines new defaults, we parse them - # in a new namespace object and then update the original - # namespace for the relevant parts. - subnamespace, arg_strings = subparser.parse_known_args(arg_strings, None) - for key, value in vars(subnamespace).items(): - setattr(namespace, key, value) - - if arg_strings: - if not hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): - setattr(namespace, _UNRECOGNIZED_ARGS_ATTR, []) - getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings) - -class _ExtendAction(_AppendAction): - def __call__(self, parser, namespace, values, option_string=None): - items = getattr(namespace, self.dest, None) - items = _copy_items(items) - items.extend(values) - setattr(namespace, self.dest, items) - -# ============== -# Type classes -# ============== - -class FileType(object): - """Deprecated factory for creating file object types - - Instances of FileType are typically passed as type= arguments to the - ArgumentParser add_argument() method. - - Keyword Arguments: - - mode -- A string indicating how the file is to be opened. Accepts the - same values as the builtin open() function. - - bufsize -- The file's desired buffer size. Accepts the same values as - the builtin open() function. - - encoding -- The file's encoding. Accepts the same values as the - builtin open() function. - - errors -- A string indicating how encoding and decoding errors are to - be handled. Accepts the same value as the builtin open() function. - """ - - def __init__(self, mode='r', bufsize=-1, encoding=None, errors=None): - import warnings - warnings.warn( - "FileType is deprecated. Simply open files after parsing arguments.", - category=PendingDeprecationWarning, - stacklevel=2 - ) - self._mode = mode - self._bufsize = bufsize - self._encoding = encoding - self._errors = errors - - def __call__(self, string): - # the special argument "-" means sys.std{in,out} - if string == '-': - if 'r' in self._mode: - return _sys.stdin.buffer if 'b' in self._mode else _sys.stdin - elif any(c in self._mode for c in 'wax'): - return _sys.stdout.buffer if 'b' in self._mode else _sys.stdout - else: - msg = _('argument "-" with mode %r') % self._mode - raise ValueError(msg) - - # all other arguments are used as file names - try: - return open(string, self._mode, self._bufsize, self._encoding, - self._errors) - except OSError as e: - args = {'filename': string, 'error': e} - message = _("can't open '%(filename)s': %(error)s") - raise ArgumentTypeError(message % args) - - def __repr__(self): - args = self._mode, self._bufsize - kwargs = [('encoding', self._encoding), ('errors', self._errors)] - args_str = ', '.join([repr(arg) for arg in args if arg != -1] + - ['%s=%r' % (kw, arg) for kw, arg in kwargs - if arg is not None]) - return '%s(%s)' % (type(self).__name__, args_str) - -# =========================== -# Optional and Positional Parsing -# =========================== - -class Namespace(_AttributeHolder): - """Simple object for storing attributes. - - Implements equality by attribute names and values, and provides a simple - string representation. - """ - - def __init__(self, **kwargs): - for name in kwargs: - setattr(self, name, kwargs[name]) - - def __eq__(self, other): - if not isinstance(other, Namespace): - return NotImplemented - return vars(self) == vars(other) - - def __contains__(self, key): - return key in self.__dict__ - - -class _ActionsContainer(object): - - def __init__(self, - description, - prefix_chars, - argument_default, - conflict_handler): - super(_ActionsContainer, self).__init__() - - self.description = description - self.argument_default = argument_default - self.prefix_chars = prefix_chars - self.conflict_handler = conflict_handler - - # set up registries - self._registries = {} - - # register actions - self.register('action', None, _StoreAction) - self.register('action', 'store', _StoreAction) - self.register('action', 'store_const', _StoreConstAction) - self.register('action', 'store_true', _StoreTrueAction) - self.register('action', 'store_false', _StoreFalseAction) - self.register('action', 'append', _AppendAction) - self.register('action', 'append_const', _AppendConstAction) - self.register('action', 'count', _CountAction) - self.register('action', 'help', _HelpAction) - self.register('action', 'version', _VersionAction) - self.register('action', 'parsers', _SubParsersAction) - self.register('action', 'extend', _ExtendAction) - - # raise an exception if the conflict handler is invalid - self._get_handler() - - # action storage - self._actions = [] - self._option_string_actions = {} - - # groups - self._action_groups = [] - self._mutually_exclusive_groups = [] - - # defaults storage - self._defaults = {} - - # determines whether an "option" looks like a negative number - self._negative_number_matcher = _re.compile(r'-\.?\d') - - # whether or not there are any optionals that look like negative - # numbers -- uses a list so it can be shared and edited - self._has_negative_number_optionals = [] - - # ==================== - # Registration methods - # ==================== - - def register(self, registry_name, value, object): - registry = self._registries.setdefault(registry_name, {}) - registry[value] = object - - def _registry_get(self, registry_name, value, default=None): - return self._registries[registry_name].get(value, default) - - # ================================== - # Namespace default accessor methods - # ================================== - - def set_defaults(self, **kwargs): - self._defaults.update(kwargs) - - # if these defaults match any existing arguments, replace - # the previous default on the object with the new one - for action in self._actions: - if action.dest in kwargs: - action.default = kwargs[action.dest] - - def get_default(self, dest): - for action in self._actions: - if action.dest == dest and action.default is not None: - return action.default - return self._defaults.get(dest, None) - - - # ======================= - # Adding argument actions - # ======================= - - def add_argument(self, *args, **kwargs): - """ - add_argument(dest, ..., name=value, ...) - add_argument(option_string, option_string, ..., name=value, ...) - """ - - # if no positional args are supplied or only one is supplied and - # it doesn't look like an option string, parse a positional - # argument - chars = self.prefix_chars - if not args or len(args) == 1 and args[0][0] not in chars: - if args and 'dest' in kwargs: - raise TypeError('dest supplied twice for positional argument,' - ' did you mean metavar?') - kwargs = self._get_positional_kwargs(*args, **kwargs) - - # otherwise, we're adding an optional argument - else: - kwargs = self._get_optional_kwargs(*args, **kwargs) - - # if no default was supplied, use the parser-level default - if 'default' not in kwargs: - dest = kwargs['dest'] - if dest in self._defaults: - kwargs['default'] = self._defaults[dest] - elif self.argument_default is not None: - kwargs['default'] = self.argument_default - - # create the action object, and add it to the parser - action_name = kwargs.get('action') - action_class = self._pop_action_class(kwargs) - if not callable(action_class): - raise ValueError(f'unknown action {action_class!r}') - action = action_class(**kwargs) - - # raise an error if action for positional argument does not - # consume arguments - if not action.option_strings and action.nargs == 0: - raise ValueError(f'action {action_name!r} is not valid for positional arguments') - - # raise an error if the action type is not callable - type_func = self._registry_get('type', action.type, action.type) - if not callable(type_func): - raise TypeError(f'{type_func!r} is not callable') - - if type_func is FileType: - raise TypeError(f'{type_func!r} is a FileType class object, ' - f'instance of it must be passed') - - # raise an error if the metavar does not match the type - if hasattr(self, "_get_validation_formatter"): - formatter = self._get_validation_formatter() - try: - formatter._format_args(action, None) - except TypeError: - raise ValueError("length of metavar tuple does not match nargs") - self._check_help(action) - return self._add_action(action) - - def add_argument_group(self, *args, **kwargs): - group = _ArgumentGroup(self, *args, **kwargs) - self._action_groups.append(group) - return group - - def add_mutually_exclusive_group(self, **kwargs): - group = _MutuallyExclusiveGroup(self, **kwargs) - self._mutually_exclusive_groups.append(group) - return group - - def _add_action(self, action): - # resolve any conflicts - self._check_conflict(action) - - # add to actions list - self._actions.append(action) - action.container = self - - # index the action by any option strings it has - for option_string in action.option_strings: - self._option_string_actions[option_string] = action - - # set the flag if any option strings look like negative numbers - for option_string in action.option_strings: - if self._negative_number_matcher.match(option_string): - if not self._has_negative_number_optionals: - self._has_negative_number_optionals.append(True) - - # return the created action - return action - - def _remove_action(self, action): - self._actions.remove(action) - - def _add_container_actions(self, container): - # collect groups by titles - title_group_map = {} - for group in self._action_groups: - if group.title in title_group_map: - # This branch could happen if a derived class added - # groups with duplicated titles in __init__ - msg = f'cannot merge actions - two groups are named {group.title!r}' - raise ValueError(msg) - title_group_map[group.title] = group - - # map each action to its group - group_map = {} - for group in container._action_groups: - - # if a group with the title exists, use that, otherwise - # create a new group matching the container's group - if group.title not in title_group_map: - title_group_map[group.title] = self.add_argument_group( - title=group.title, - description=group.description, - conflict_handler=group.conflict_handler) - - # map the actions to their new group - for action in group._group_actions: - group_map[action] = title_group_map[group.title] - - # add container's mutually exclusive groups - # NOTE: if add_mutually_exclusive_group ever gains title= and - # description= then this code will need to be expanded as above - for group in container._mutually_exclusive_groups: - if group._container is container: - cont = self - else: - cont = title_group_map[group._container.title] - mutex_group = cont.add_mutually_exclusive_group( - required=group.required) - - # map the actions to their new mutex group - for action in group._group_actions: - group_map[action] = mutex_group - - # add all actions to this container or their group - for action in container._actions: - group_map.get(action, self)._add_action(action) - - def _get_positional_kwargs(self, dest, **kwargs): - # make sure required is not specified - if 'required' in kwargs: - msg = "'required' is an invalid argument for positionals" - raise TypeError(msg) - - # mark positional arguments as required if at least one is - # always required - nargs = kwargs.get('nargs') - if nargs == 0: - raise ValueError('nargs for positionals must be != 0') - if nargs not in [OPTIONAL, ZERO_OR_MORE, REMAINDER, SUPPRESS]: - kwargs['required'] = True - - # return the keyword arguments with no option strings - return dict(kwargs, dest=dest, option_strings=[]) - - def _get_optional_kwargs(self, *args, **kwargs): - # determine short and long option strings - option_strings = [] - long_option_strings = [] - for option_string in args: - # error on strings that don't start with an appropriate prefix - if not option_string[0] in self.prefix_chars: - raise ValueError( - f'invalid option string {option_string!r}: ' - f'must start with a character {self.prefix_chars!r}') - - # strings starting with two prefix characters are long options - option_strings.append(option_string) - if len(option_string) > 1 and option_string[1] in self.prefix_chars: - long_option_strings.append(option_string) - - # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' - dest = kwargs.pop('dest', None) - if dest is None: - if long_option_strings: - dest_option_string = long_option_strings[0] - else: - dest_option_string = option_strings[0] - dest = dest_option_string.lstrip(self.prefix_chars) - if not dest: - msg = f'dest= is required for options like {option_string!r}' - raise TypeError(msg) - dest = dest.replace('-', '_') - - # return the updated keyword arguments - return dict(kwargs, dest=dest, option_strings=option_strings) - - def _pop_action_class(self, kwargs, default=None): - action = kwargs.pop('action', default) - return self._registry_get('action', action, action) - - def _get_handler(self): - # determine function from conflict handler string - handler_func_name = '_handle_conflict_%s' % self.conflict_handler - try: - return getattr(self, handler_func_name) - except AttributeError: - msg = f'invalid conflict_resolution value: {self.conflict_handler!r}' - raise ValueError(msg) - - def _check_conflict(self, action): - - # find all options that conflict with this option - confl_optionals = [] - for option_string in action.option_strings: - if option_string in self._option_string_actions: - confl_optional = self._option_string_actions[option_string] - confl_optionals.append((option_string, confl_optional)) - - # resolve any conflicts - if confl_optionals: - conflict_handler = self._get_handler() - conflict_handler(action, confl_optionals) - - def _handle_conflict_error(self, action, conflicting_actions): - message = ngettext('conflicting option string: %s', - 'conflicting option strings: %s', - len(conflicting_actions)) - conflict_string = ', '.join([option_string - for option_string, action - in conflicting_actions]) - raise ArgumentError(action, message % conflict_string) - - def _handle_conflict_resolve(self, action, conflicting_actions): - - # remove all conflicting options - for option_string, action in conflicting_actions: - - # remove the conflicting option - action.option_strings.remove(option_string) - self._option_string_actions.pop(option_string, None) - - # if the option now has no option string, remove it from the - # container holding it - if not action.option_strings: - action.container._remove_action(action) - - def _check_help(self, action): - if action.help and hasattr(self, "_get_validation_formatter"): - formatter = self._get_validation_formatter() - try: - formatter._expand_help(action) - except (ValueError, TypeError, KeyError) as exc: - raise ValueError('badly formed help string') from exc - - -class _ArgumentGroup(_ActionsContainer): - - def __init__(self, container, title=None, description=None, **kwargs): - if 'prefix_chars' in kwargs: - import warnings - depr_msg = ( - "The use of the undocumented 'prefix_chars' parameter in " - "ArgumentParser.add_argument_group() is deprecated." - ) - warnings.warn(depr_msg, DeprecationWarning, stacklevel=3) - - # add any missing keyword arguments by checking the container - update = kwargs.setdefault - update('conflict_handler', container.conflict_handler) - update('prefix_chars', container.prefix_chars) - update('argument_default', container.argument_default) - super_init = super(_ArgumentGroup, self).__init__ - super_init(description=description, **kwargs) - - # group attributes - self.title = title - self._group_actions = [] - - # share most attributes with the container - self._registries = container._registries - self._actions = container._actions - self._option_string_actions = container._option_string_actions - self._defaults = container._defaults - self._has_negative_number_optionals = \ - container._has_negative_number_optionals - self._mutually_exclusive_groups = container._mutually_exclusive_groups - - def _add_action(self, action): - action = super(_ArgumentGroup, self)._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - super(_ArgumentGroup, self)._remove_action(action) - self._group_actions.remove(action) - - def add_argument_group(self, *args, **kwargs): - raise ValueError('argument groups cannot be nested') - -class _MutuallyExclusiveGroup(_ArgumentGroup): - - def __init__(self, container, required=False): - super(_MutuallyExclusiveGroup, self).__init__(container) - self.required = required - self._container = container - - def _add_action(self, action): - if action.required: - msg = 'mutually exclusive arguments must be optional' - raise ValueError(msg) - action = self._container._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - self._container._remove_action(action) - self._group_actions.remove(action) - - def add_mutually_exclusive_group(self, **kwargs): - raise ValueError('mutually exclusive groups cannot be nested') - -def _prog_name(prog=None): - if prog is not None: - return prog - arg0 = _sys.argv[0] - try: - modspec = _sys.modules['__main__'].__spec__ - except (KeyError, AttributeError): - # possibly PYTHONSTARTUP or -X presite or other weird edge case - # no good answer here, so fall back to the default - modspec = None - if modspec is None: - # simple script - return _os.path.basename(arg0) - py = _os.path.basename(_sys.executable) - if modspec.name != '__main__': - # imported module or package - modname = modspec.name.removesuffix('.__main__') - return f'{py} -m {modname}' - # directory or ZIP file - return f'{py} {arg0}' - - -class ArgumentParser(_AttributeHolder, _ActionsContainer): - """Object for parsing command line strings into Python objects. - - Keyword Arguments: - - prog -- The name of the program (default: - ``os.path.basename(sys.argv[0])``) - - usage -- A usage message (default: auto-generated from arguments) - - description -- A description of what the program does - - epilog -- Text following the argument descriptions - - parents -- Parsers whose arguments should be copied into this one - - formatter_class -- HelpFormatter class for printing help messages - - prefix_chars -- Characters that prefix optional arguments - - fromfile_prefix_chars -- Characters that prefix files containing - additional arguments - - argument_default -- The default value for all arguments - - conflict_handler -- String indicating how to handle conflicts - - add_help -- Add a -h/-help option - - allow_abbrev -- Allow long options to be abbreviated unambiguously - - exit_on_error -- Determines whether or not ArgumentParser exits with - error info when an error occurs - - suggest_on_error - Enables suggestions for mistyped argument choices - and subparser names (default: ``False``) - - color - Allow color output in help messages (default: ``False``) - """ - - def __init__(self, - prog=None, - usage=None, - description=None, - epilog=None, - parents=[], - formatter_class=HelpFormatter, - prefix_chars='-', - fromfile_prefix_chars=None, - argument_default=None, - conflict_handler='error', - add_help=True, - allow_abbrev=True, - exit_on_error=True, - *, - suggest_on_error=False, - color=True, - ): - superinit = super(ArgumentParser, self).__init__ - superinit(description=description, - prefix_chars=prefix_chars, - argument_default=argument_default, - conflict_handler=conflict_handler) - - self.prog = _prog_name(prog) - self.usage = usage - self.epilog = epilog - self.formatter_class = formatter_class - self.fromfile_prefix_chars = fromfile_prefix_chars - self.add_help = add_help - self.allow_abbrev = allow_abbrev - self.exit_on_error = exit_on_error - self.suggest_on_error = suggest_on_error - self.color = color - - # Cached formatter for validation (avoids repeated _set_color calls) - self._cached_formatter = None - - add_group = self.add_argument_group - self._positionals = add_group(_('positional arguments')) - self._optionals = add_group(_('options')) - self._subparsers = None - - # register types - self.register('type', None, _identity) - - # add help argument if necessary - # (using explicit default to override global argument_default) - default_prefix = '-' if '-' in prefix_chars else prefix_chars[0] - if self.add_help: - self.add_argument( - default_prefix+'h', default_prefix*2+'help', - action='help', default=SUPPRESS, - help=_('show this help message and exit')) - - # add parent arguments and defaults - for parent in parents: - if not isinstance(parent, ArgumentParser): - raise TypeError('parents must be a list of ArgumentParser') - self._add_container_actions(parent) - defaults = parent._defaults - self._defaults.update(defaults) - - # ======================= - # Pretty __repr__ methods - # ======================= - - def _get_kwargs(self): - names = [ - 'prog', - 'usage', - 'description', - 'formatter_class', - 'conflict_handler', - 'add_help', - ] - return [(name, getattr(self, name)) for name in names] - - # ================================== - # Optional/Positional adding methods - # ================================== - - def add_subparsers(self, **kwargs): - if self._subparsers is not None: - raise ValueError('cannot have multiple subparser arguments') - - # add the parser class to the arguments if it's not present - kwargs.setdefault('parser_class', type(self)) - - if 'title' in kwargs or 'description' in kwargs: - title = kwargs.pop('title', _('subcommands')) - description = kwargs.pop('description', None) - self._subparsers = self.add_argument_group(title, description) - else: - self._subparsers = self._positionals - - # prog defaults to the usage message of this parser, skipping - # optional arguments and with no "usage:" prefix - if kwargs.get('prog') is None: - # Create formatter without color to avoid storing ANSI codes in prog - formatter = self.formatter_class(prog=self.prog) - formatter._set_color(False) - positionals = self._get_positional_actions() - groups = self._mutually_exclusive_groups - formatter.add_usage(None, positionals, groups, '') - kwargs['prog'] = formatter.format_help().strip() - - # create the parsers action and add it to the positionals list - parsers_class = self._pop_action_class(kwargs, 'parsers') - action = parsers_class(option_strings=[], **kwargs) - action._color = self.color - self._check_help(action) - self._subparsers._add_action(action) - - # return the created parsers action - return action - - def _add_action(self, action): - if action.option_strings: - self._optionals._add_action(action) - else: - self._positionals._add_action(action) - return action - - def _get_optional_actions(self): - return [action - for action in self._actions - if action.option_strings] - - def _get_positional_actions(self): - return [action - for action in self._actions - if not action.option_strings] - - # ===================================== - # Command line argument parsing methods - # ===================================== - - def parse_args(self, args=None, namespace=None): - args, argv = self.parse_known_args(args, namespace) - if argv: - msg = _('unrecognized arguments: %s') % ' '.join(argv) - if self.exit_on_error: - self.error(msg) - else: - raise ArgumentError(None, msg) - return args - - def parse_known_args(self, args=None, namespace=None): - return self._parse_known_args2(args, namespace, intermixed=False) - - def _parse_known_args2(self, args, namespace, intermixed): - if args is None: - # args default to the system args - args = _sys.argv[1:] - else: - # make sure that args are mutable - args = list(args) - - # default Namespace built from parser defaults - if namespace is None: - namespace = Namespace() - - # add any action defaults that aren't present - for action in self._actions: - if action.dest is not SUPPRESS: - if not hasattr(namespace, action.dest): - if action.default is not SUPPRESS: - setattr(namespace, action.dest, action.default) - - # add any parser defaults that aren't present - for dest in self._defaults: - if not hasattr(namespace, dest): - setattr(namespace, dest, self._defaults[dest]) - - # parse the arguments and exit if there are any errors - if self.exit_on_error: - try: - namespace, args = self._parse_known_args(args, namespace, intermixed) - except ArgumentError as err: - self.error(str(err)) - else: - namespace, args = self._parse_known_args(args, namespace, intermixed) - - if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): - args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) - delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) - return namespace, args - - def _parse_known_args(self, arg_strings, namespace, intermixed): - # replace arg strings that are file references - if self.fromfile_prefix_chars is not None: - arg_strings = self._read_args_from_files(arg_strings) - - # map all mutually exclusive arguments to the other arguments - # they can't occur with - action_conflicts = {} - for mutex_group in self._mutually_exclusive_groups: - group_actions = mutex_group._group_actions - for i, mutex_action in enumerate(mutex_group._group_actions): - conflicts = action_conflicts.setdefault(mutex_action, []) - conflicts.extend(group_actions[:i]) - conflicts.extend(group_actions[i + 1:]) - - # find all option indices, and determine the arg_string_pattern - # which has an 'O' if there is an option at an index, - # an 'A' if there is an argument, or a '-' if there is a '--' - option_string_indices = {} - arg_string_pattern_parts = [] - arg_strings_iter = iter(arg_strings) - for i, arg_string in enumerate(arg_strings_iter): - - # all args after -- are non-options - if arg_string == '--': - arg_string_pattern_parts.append('-') - for arg_string in arg_strings_iter: - arg_string_pattern_parts.append('A') - - # otherwise, add the arg to the arg strings - # and note the index if it was an option - else: - option_tuples = self._parse_optional(arg_string) - if option_tuples is None: - pattern = 'A' - else: - option_string_indices[i] = option_tuples - pattern = 'O' - arg_string_pattern_parts.append(pattern) - - # join the pieces together to form the pattern - arg_strings_pattern = ''.join(arg_string_pattern_parts) - - # converts arg strings to the appropriate and then takes the action - seen_actions = set() - seen_non_default_actions = set() - warned = set() - - def take_action(action, argument_strings, option_string=None): - seen_actions.add(action) - argument_values = self._get_values(action, argument_strings) - - # error if this argument is not allowed with other previously - # seen arguments - if action.option_strings or argument_strings: - seen_non_default_actions.add(action) - for conflict_action in action_conflicts.get(action, []): - if conflict_action in seen_non_default_actions: - msg = _('not allowed with argument %s') - action_name = _get_action_name(conflict_action) - raise ArgumentError(action, msg % action_name) - - # take the action if we didn't receive a SUPPRESS value - # (e.g. from a default) - if argument_values is not SUPPRESS: - action(self, namespace, argument_values, option_string) - - # function to convert arg_strings into an optional action - def consume_optional(start_index): - - # get the optional identified at this index - option_tuples = option_string_indices[start_index] - # if multiple actions match, the option string was ambiguous - if len(option_tuples) > 1: - options = ', '.join([option_string - for action, option_string, sep, explicit_arg in option_tuples]) - args = {'option': arg_strings[start_index], 'matches': options} - msg = _('ambiguous option: %(option)s could match %(matches)s') - raise ArgumentError(None, msg % args) - - action, option_string, sep, explicit_arg = option_tuples[0] - - # identify additional optionals in the same arg string - # (e.g. -xyz is the same as -x -y -z if no args are required) - match_argument = self._match_argument - action_tuples = [] - while True: - - # if we found no optional action, skip it - if action is None: - extras.append(arg_strings[start_index]) - extras_pattern.append('O') - return start_index + 1 - - # if there is an explicit argument, try to match the - # optional's string arguments to only this - if explicit_arg is not None: - arg_count = match_argument(action, 'A') - - # if the action is a single-dash option and takes no - # arguments, try to parse more single-dash options out - # of the tail of the option string - chars = self.prefix_chars - if ( - arg_count == 0 - and option_string[1] not in chars - and explicit_arg != '' - ): - if sep or explicit_arg[0] in chars: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - action_tuples.append((action, [], option_string)) - char = option_string[0] - option_string = char + explicit_arg[0] - optionals_map = self._option_string_actions - if option_string in optionals_map: - action = optionals_map[option_string] - explicit_arg = explicit_arg[1:] - if not explicit_arg: - sep = explicit_arg = None - elif explicit_arg[0] == '=': - sep = '=' - explicit_arg = explicit_arg[1:] - else: - sep = '' - else: - extras.append(char + explicit_arg) - extras_pattern.append('O') - stop = start_index + 1 - break - # if the action expect exactly one argument, we've - # successfully matched the option; exit the loop - elif arg_count == 1: - stop = start_index + 1 - args = [explicit_arg] - action_tuples.append((action, args, option_string)) - break - - # error if a double-dash option did not use the - # explicit argument - else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - - # if there is no explicit argument, try to match the - # optional's string arguments with the following strings - # if successful, exit the loop - else: - start = start_index + 1 - selected_patterns = arg_strings_pattern[start:] - arg_count = match_argument(action, selected_patterns) - stop = start + arg_count - args = arg_strings[start:stop] - action_tuples.append((action, args, option_string)) - break - - # add the Optional to the list and return the index at which - # the Optional's string args stopped - assert action_tuples - for action, args, option_string in action_tuples: - if action.deprecated and option_string not in warned: - self._warning(_("option '%(option)s' is deprecated") % - {'option': option_string}) - warned.add(option_string) - take_action(action, args, option_string) - return stop - - # the list of Positionals left to be parsed; this is modified - # by consume_positionals() - positionals = self._get_positional_actions() - - # function to convert arg_strings into positional actions - def consume_positionals(start_index): - # match as many Positionals as possible - match_partial = self._match_arguments_partial - selected_pattern = arg_strings_pattern[start_index:] - arg_counts = match_partial(positionals, selected_pattern) - - # slice off the appropriate arg strings for each Positional - # and add the Positional and its args to the list - for action, arg_count in zip(positionals, arg_counts): - args = arg_strings[start_index: start_index + arg_count] - # Strip out the first '--' if it is not in REMAINDER arg. - if action.nargs == PARSER: - if arg_strings_pattern[start_index] == '-': - assert args[0] == '--' - args.remove('--') - elif action.nargs != REMAINDER: - if (arg_strings_pattern.find('-', start_index, - start_index + arg_count) >= 0): - args.remove('--') - start_index += arg_count - if args and action.deprecated and action.dest not in warned: - self._warning(_("argument '%(argument_name)s' is deprecated") % - {'argument_name': action.dest}) - warned.add(action.dest) - take_action(action, args) - - # slice off the Positionals that we just parsed and return the - # index at which the Positionals' string args stopped - positionals[:] = positionals[len(arg_counts):] - return start_index - - # consume Positionals and Optionals alternately, until we have - # passed the last option string - extras = [] - extras_pattern = [] - start_index = 0 - if option_string_indices: - max_option_string_index = max(option_string_indices) - else: - max_option_string_index = -1 - while start_index <= max_option_string_index: - - # consume any Positionals preceding the next option - next_option_string_index = start_index - while next_option_string_index <= max_option_string_index: - if next_option_string_index in option_string_indices: - break - next_option_string_index += 1 - if not intermixed and start_index != next_option_string_index: - positionals_end_index = consume_positionals(start_index) - - # only try to parse the next optional if we didn't consume - # the option string during the positionals parsing - if positionals_end_index > start_index: - start_index = positionals_end_index - continue - else: - start_index = positionals_end_index - - # if we consumed all the positionals we could and we're not - # at the index of an option string, there were extra arguments - if start_index not in option_string_indices: - strings = arg_strings[start_index:next_option_string_index] - extras.extend(strings) - extras_pattern.extend(arg_strings_pattern[start_index:next_option_string_index]) - start_index = next_option_string_index - - # consume the next optional and any arguments for it - start_index = consume_optional(start_index) - - if not intermixed: - # consume any positionals following the last Optional - stop_index = consume_positionals(start_index) - - # if we didn't consume all the argument strings, there were extras - extras.extend(arg_strings[stop_index:]) - else: - extras.extend(arg_strings[start_index:]) - extras_pattern.extend(arg_strings_pattern[start_index:]) - extras_pattern = ''.join(extras_pattern) - assert len(extras_pattern) == len(extras) - # consume all positionals - arg_strings = [s for s, c in zip(extras, extras_pattern) if c != 'O'] - arg_strings_pattern = extras_pattern.replace('O', '') - stop_index = consume_positionals(0) - # leave unknown optionals and non-consumed positionals in extras - for i, c in enumerate(extras_pattern): - if not stop_index: - break - if c != 'O': - stop_index -= 1 - extras[i] = None - extras = [s for s in extras if s is not None] - - # make sure all required actions were present and also convert - # action defaults which were not given as arguments - required_actions = [] - for action in self._actions: - if action not in seen_actions: - if action.required: - required_actions.append(_get_action_name(action)) - else: - # Convert action default now instead of doing it before - # parsing arguments to avoid calling convert functions - # twice (which may fail) if the argument was given, but - # only if it was defined already in the namespace - if (action.default is not None and - isinstance(action.default, str) and - hasattr(namespace, action.dest) and - action.default is getattr(namespace, action.dest)): - setattr(namespace, action.dest, - self._get_value(action, action.default)) - - if required_actions: - raise ArgumentError(None, _('the following arguments are required: %s') % - ', '.join(required_actions)) - - # make sure all required groups had one option present - for group in self._mutually_exclusive_groups: - if group.required: - for action in group._group_actions: - if action in seen_non_default_actions: - break - - # if no actions were used, report the error - else: - names = [_get_action_name(action) - for action in group._group_actions - if action.help is not SUPPRESS] - msg = _('one of the arguments %s is required') - raise ArgumentError(None, msg % ' '.join(names)) - - # return the updated namespace and the extra arguments - return namespace, extras - - def _read_args_from_files(self, arg_strings): - # expand arguments referencing files - new_arg_strings = [] - for arg_string in arg_strings: - - # for regular arguments, just add them back into the list - if not arg_string or arg_string[0] not in self.fromfile_prefix_chars: - new_arg_strings.append(arg_string) - - # replace arguments referencing files with the file content - else: - try: - with open(arg_string[1:], - encoding=_sys.getfilesystemencoding(), - errors=_sys.getfilesystemencodeerrors()) as args_file: - arg_strings = [] - for arg_line in args_file.read().splitlines(): - for arg in self.convert_arg_line_to_args(arg_line): - arg_strings.append(arg) - arg_strings = self._read_args_from_files(arg_strings) - new_arg_strings.extend(arg_strings) - except OSError as err: - raise ArgumentError(None, str(err)) - - # return the modified argument list - return new_arg_strings - - def convert_arg_line_to_args(self, arg_line): - return [arg_line] - - def _match_argument(self, action, arg_strings_pattern): - # match the pattern for this action to the arg strings - nargs_pattern = self._get_nargs_pattern(action) - match = _re.match(nargs_pattern, arg_strings_pattern) - - # raise an exception if we weren't able to find a match - if match is None: - nargs_errors = { - None: _('expected one argument'), - OPTIONAL: _('expected at most one argument'), - ONE_OR_MORE: _('expected at least one argument'), - } - msg = nargs_errors.get(action.nargs) - if msg is None: - msg = ngettext('expected %s argument', - 'expected %s arguments', - action.nargs) % action.nargs - raise ArgumentError(action, msg) - - # return the number of arguments matched - return len(match.group(1)) - - def _match_arguments_partial(self, actions, arg_strings_pattern): - # progressively shorten the actions list by slicing off the - # final actions until we find a match - for i in range(len(actions), 0, -1): - actions_slice = actions[:i] - pattern = ''.join([self._get_nargs_pattern(action) - for action in actions_slice]) - match = _re.match(pattern, arg_strings_pattern) - if match is not None: - result = [len(string) for string in match.groups()] - if (match.end() < len(arg_strings_pattern) - and arg_strings_pattern[match.end()] == 'O'): - while result and not result[-1]: - del result[-1] - return result - return [] - - def _parse_optional(self, arg_string): - # if it's an empty string, it was meant to be a positional - if not arg_string: - return None - - # if it doesn't start with a prefix, it was meant to be positional - if not arg_string[0] in self.prefix_chars: - return None - - # if the option string is present in the parser, return the action - if arg_string in self._option_string_actions: - action = self._option_string_actions[arg_string] - return [(action, arg_string, None, None)] - - # if it's just a single character, it was meant to be positional - if len(arg_string) == 1: - return None - - # if the option string before the "=" is present, return the action - option_string, sep, explicit_arg = arg_string.partition('=') - if sep and option_string in self._option_string_actions: - action = self._option_string_actions[option_string] - return [(action, option_string, sep, explicit_arg)] - - # search through all possible prefixes of the option string - # and all actions in the parser for possible interpretations - option_tuples = self._get_option_tuples(arg_string) - - if option_tuples: - return option_tuples - - # if it was not found as an option, but it looks like a negative - # number, it was meant to be positional - # unless there are negative-number-like options - if self._negative_number_matcher.match(arg_string): - if not self._has_negative_number_optionals: - return None - - # if it contains a space, it was meant to be a positional - if ' ' in arg_string: - return None - - # it was meant to be an optional but there is no such option - # in this parser (though it might be a valid option in a subparser) - return [(None, arg_string, None, None)] - - def _get_option_tuples(self, option_string): - result = [] - - # option strings starting with two prefix characters are only - # split at the '=' - chars = self.prefix_chars - if option_string[0] in chars and option_string[1] in chars: - if self.allow_abbrev: - option_prefix, sep, explicit_arg = option_string.partition('=') - if not sep: - sep = explicit_arg = None - for option_string in self._option_string_actions: - if option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, sep, explicit_arg - result.append(tup) - - # single character options can be concatenated with their arguments - # but multiple character options always have to have their argument - # separate - elif option_string[0] in chars and option_string[1] not in chars: - option_prefix, sep, explicit_arg = option_string.partition('=') - if not sep: - sep = explicit_arg = None - short_option_prefix = option_string[:2] - short_explicit_arg = option_string[2:] - - for option_string in self._option_string_actions: - if option_string == short_option_prefix: - action = self._option_string_actions[option_string] - tup = action, option_string, '', short_explicit_arg - result.append(tup) - elif self.allow_abbrev and option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, sep, explicit_arg - result.append(tup) - - # shouldn't ever get here - else: - raise ArgumentError(None, _('unexpected option string: %s') % option_string) - - # return the collected option tuples - return result - - def _get_nargs_pattern(self, action): - # in all examples below, we have to allow for '--' args - # which are represented as '-' in the pattern - nargs = action.nargs - # if this is an optional action, -- is not allowed - option = action.option_strings - - # the default (None) is assumed to be a single argument - if nargs is None: - nargs_pattern = '([A])' if option else '(-*A-*)' - - # allow zero or one arguments - elif nargs == OPTIONAL: - nargs_pattern = '(A?)' if option else '(-*A?-*)' - - # allow zero or more arguments - elif nargs == ZERO_OR_MORE: - nargs_pattern = '(A*)' if option else '(-*[A-]*)' - - # allow one or more arguments - elif nargs == ONE_OR_MORE: - nargs_pattern = '(A+)' if option else '(-*A[A-]*)' - - # allow any number of options or arguments - elif nargs == REMAINDER: - nargs_pattern = '([AO]*)' if option else '(.*)' - - # allow one argument followed by any number of options or arguments - elif nargs == PARSER: - nargs_pattern = '(A[AO]*)' if option else '(-*A[-AO]*)' - - # suppress action, like nargs=0 - elif nargs == SUPPRESS: - nargs_pattern = '()' if option else '(-*)' - - # all others should be integers - else: - nargs_pattern = '([AO]{%d})' % nargs if option else '((?:-*A){%d}-*)' % nargs - - # return the pattern - return nargs_pattern - - # ======================== - # Alt command line argument parsing, allowing free intermix - # ======================== - - def parse_intermixed_args(self, args=None, namespace=None): - args, argv = self.parse_known_intermixed_args(args, namespace) - if argv: - msg = _('unrecognized arguments: %s') % ' '.join(argv) - if self.exit_on_error: - self.error(msg) - else: - raise ArgumentError(None, msg) - return args - - def parse_known_intermixed_args(self, args=None, namespace=None): - # returns a namespace and list of extras - # - # positional can be freely intermixed with optionals. optionals are - # first parsed with all positional arguments deactivated. The 'extras' - # are then parsed. If the parser definition is incompatible with the - # intermixed assumptions (e.g. use of REMAINDER, subparsers) a - # TypeError is raised. - - positionals = self._get_positional_actions() - a = [action for action in positionals - if action.nargs in [PARSER, REMAINDER]] - if a: - raise TypeError('parse_intermixed_args: positional arg' - ' with nargs=%s'%a[0].nargs) - - return self._parse_known_args2(args, namespace, intermixed=True) - - # ======================== - # Value conversion methods - # ======================== - - def _get_values(self, action, arg_strings): - # optional argument produces a default when not present - if not arg_strings and action.nargs == OPTIONAL: - if action.option_strings: - value = action.const - else: - value = action.default - if isinstance(value, str) and value is not SUPPRESS: - value = self._get_value(action, value) - - # when nargs='*' on a positional, if there were no command-line - # args, use the default if it is anything other than None - elif (not arg_strings and action.nargs == ZERO_OR_MORE and - not action.option_strings): - if action.default is not None: - value = action.default - else: - value = [] - - # single argument or optional argument produces a single value - elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: - arg_string, = arg_strings - value = self._get_value(action, arg_string) - self._check_value(action, value) - - # REMAINDER arguments convert all values, checking none - elif action.nargs == REMAINDER: - value = [self._get_value(action, v) for v in arg_strings] - - # PARSER arguments convert all values, but check only the first - elif action.nargs == PARSER: - value = [self._get_value(action, v) for v in arg_strings] - self._check_value(action, value[0]) - - # SUPPRESS argument does not put anything in the namespace - elif action.nargs == SUPPRESS: - value = SUPPRESS - - # all other types of nargs produce a list - else: - value = [self._get_value(action, v) for v in arg_strings] - for v in value: - self._check_value(action, v) - - # return the converted value - return value - - def _get_value(self, action, arg_string): - type_func = self._registry_get('type', action.type, action.type) - if not callable(type_func): - raise TypeError(f'{type_func!r} is not callable') - - # convert the value to the appropriate type - try: - result = type_func(arg_string) - - # ArgumentTypeErrors indicate errors - except ArgumentTypeError as err: - msg = str(err) - raise ArgumentError(action, msg) - - # TypeErrors or ValueErrors also indicate errors - except (TypeError, ValueError): - name = getattr(action.type, '__name__', repr(action.type)) - args = {'type': name, 'value': arg_string} - msg = _('invalid %(type)s value: %(value)r') - raise ArgumentError(action, msg % args) - - # return the converted value - return result - - def _check_value(self, action, value): - # converted value must be one of the choices (if specified) - choices = action.choices - if choices is None: - return - - if isinstance(choices, str): - choices = iter(choices) - - if value not in choices: - args = {'value': str(value), - 'choices': ', '.join(map(str, action.choices))} - msg = _('invalid choice: %(value)r (choose from %(choices)s)') - - if self.suggest_on_error and isinstance(value, str): - if all(isinstance(choice, str) for choice in action.choices): - import difflib - suggestions = difflib.get_close_matches(value, action.choices, 1) - if suggestions: - args['closest'] = suggestions[0] - msg = _('invalid choice: %(value)r, maybe you meant %(closest)r? ' - '(choose from %(choices)s)') - - raise ArgumentError(action, msg % args) - - # ======================= - # Help-formatting methods - # ======================= - - def format_usage(self): - formatter = self._get_formatter() - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - return formatter.format_help() - - def format_help(self): - formatter = self._get_formatter() - - # usage - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - - # description - formatter.add_text(self.description) - - # positionals, optionals and user-defined groups - for action_group in self._action_groups: - formatter.start_section(action_group.title) - formatter.add_text(action_group.description) - formatter.add_arguments(action_group._group_actions) - formatter.end_section() - - # epilog - formatter.add_text(self.epilog) - - # determine help from format above - return formatter.format_help() - - def _get_formatter(self): - formatter = self.formatter_class(prog=self.prog) - formatter._set_color(self.color) - return formatter - - def _get_validation_formatter(self): - # Return cached formatter for read-only validation operations - # (_expand_help and _format_args). Avoids repeated slow _set_color calls. - if self._cached_formatter is None: - self._cached_formatter = self._get_formatter() - return self._cached_formatter - - # ===================== - # Help-printing methods - # ===================== - - def print_usage(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_usage(), file) - - def print_help(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_help(), file) - - def _print_message(self, message, file=None): - if message: - file = file or _sys.stderr - try: - file.write(message) - except (AttributeError, OSError): - pass - - # =============== - # Exiting methods - # =============== - - def exit(self, status=0, message=None): - if message: - self._print_message(message, _sys.stderr) - _sys.exit(status) - - def error(self, message): - """error(message: string) - - Prints a usage message incorporating the message to stderr and - exits. - - If you override this in a subclass, it should not return -- it - should either exit or raise an exception. - """ - self.print_usage(_sys.stderr) - args = {'prog': self.prog, 'message': message} - self.exit(2, _('%(prog)s: error: %(message)s\n') % args) - - def _warning(self, message): - args = {'prog': self.prog, 'message': message} - self._print_message(_('%(prog)s: warning: %(message)s\n') % args, _sys.stderr) diff --git a/Python314_4_x86_Template/Lib/ast.py b/Python314_4_x86_Template/Lib/ast.py deleted file mode 100644 index 2f11683ec..000000000 --- a/Python314_4_x86_Template/Lib/ast.py +++ /dev/null @@ -1,680 +0,0 @@ -""" -The `ast` module helps Python applications to process trees of the Python -abstract syntax grammar. The abstract syntax itself might change with -each Python release; this module helps to find out programmatically what -the current grammar looks like and allows modifications of it. - -An abstract syntax tree can be generated by passing `ast.PyCF_ONLY_AST` as -a flag to the `compile()` builtin function or by using the `parse()` -function from this module. The result will be a tree of objects whose -classes all inherit from `ast.AST`. - -A modified abstract syntax tree can be compiled into a Python code object -using the built-in `compile()` function. - -Additionally various helper functions are provided that make working with -the trees simpler. The main intention of the helper functions and this -module in general is to provide an easy to use interface for libraries -that work tightly with the python syntax (template engines for example). - -:copyright: Copyright 2008 by Armin Ronacher. -:license: Python License. -""" -from _ast import * - - -def parse(source, filename='<unknown>', mode='exec', *, - type_comments=False, feature_version=None, optimize=-1): - """ - Parse the source into an AST node. - Equivalent to compile(source, filename, mode, PyCF_ONLY_AST). - Pass type_comments=True to get back type comments where the syntax allows. - """ - flags = PyCF_ONLY_AST - if optimize > 0: - flags |= PyCF_OPTIMIZED_AST - if type_comments: - flags |= PyCF_TYPE_COMMENTS - if feature_version is None: - feature_version = -1 - elif isinstance(feature_version, tuple): - major, minor = feature_version # Should be a 2-tuple. - if major != 3: - raise ValueError(f"Unsupported major version: {major}") - feature_version = minor - # Else it should be an int giving the minor version for 3.x. - return compile(source, filename, mode, flags, - _feature_version=feature_version, optimize=optimize) - - -def literal_eval(node_or_string): - """ - Evaluate an expression node or a string containing only a Python - expression. The string or node provided may only consist of the following - Python literal structures: strings, bytes, numbers, tuples, lists, dicts, - sets, booleans, and None. - - Caution: A complex expression can overflow the C stack and cause a crash. - """ - if isinstance(node_or_string, str): - node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval') - if isinstance(node_or_string, Expression): - node_or_string = node_or_string.body - def _raise_malformed_node(node): - msg = "malformed node or string" - if lno := getattr(node, 'lineno', None): - msg += f' on line {lno}' - raise ValueError(msg + f': {node!r}') - def _convert_num(node): - if not isinstance(node, Constant) or type(node.value) not in (int, float, complex): - _raise_malformed_node(node) - return node.value - def _convert_signed_num(node): - if isinstance(node, UnaryOp) and isinstance(node.op, (UAdd, USub)): - operand = _convert_num(node.operand) - if isinstance(node.op, UAdd): - return + operand - else: - return - operand - return _convert_num(node) - def _convert(node): - if isinstance(node, Constant): - return node.value - elif isinstance(node, Tuple): - return tuple(map(_convert, node.elts)) - elif isinstance(node, List): - return list(map(_convert, node.elts)) - elif isinstance(node, Set): - return set(map(_convert, node.elts)) - elif (isinstance(node, Call) and isinstance(node.func, Name) and - node.func.id == 'set' and node.args == node.keywords == []): - return set() - elif isinstance(node, Dict): - if len(node.keys) != len(node.values): - _raise_malformed_node(node) - return dict(zip(map(_convert, node.keys), - map(_convert, node.values))) - elif isinstance(node, BinOp) and isinstance(node.op, (Add, Sub)): - left = _convert_signed_num(node.left) - right = _convert_num(node.right) - if isinstance(left, (int, float)) and isinstance(right, complex): - if isinstance(node.op, Add): - return left + right - else: - return left - right - return _convert_signed_num(node) - return _convert(node_or_string) - - -def dump( - node, annotate_fields=True, include_attributes=False, - *, - indent=None, show_empty=False, -): - """ - Return a formatted dump of the tree in node. This is mainly useful for - debugging purposes. If annotate_fields is true (by default), - the returned string will show the names and the values for fields. - If annotate_fields is false, the result string will be more compact by - omitting unambiguous field names. Attributes such as line - numbers and column offsets are not dumped by default. If this is wanted, - include_attributes can be set to true. If indent is a non-negative - integer or string, then the tree will be pretty-printed with that indent - level. None (the default) selects the single line representation. - If show_empty is False, then empty lists and fields that are None - will be omitted from the output for better readability. - """ - def _format(node, level=0): - if indent is not None: - level += 1 - prefix = '\n' + indent * level - sep = ',\n' + indent * level - else: - prefix = '' - sep = ', ' - if isinstance(node, AST): - cls = type(node) - args = [] - args_buffer = [] - allsimple = True - keywords = annotate_fields - for name in node._fields: - try: - value = getattr(node, name) - except AttributeError: - keywords = True - continue - if value is None and getattr(cls, name, ...) is None: - keywords = True - continue - if not show_empty: - if value == []: - field_type = cls._field_types.get(name, object) - if getattr(field_type, '__origin__', ...) is list: - if not keywords: - args_buffer.append(repr(value)) - continue - if not keywords: - args.extend(args_buffer) - args_buffer = [] - value, simple = _format(value, level) - allsimple = allsimple and simple - if keywords: - args.append('%s=%s' % (name, value)) - else: - args.append(value) - if include_attributes and node._attributes: - for name in node._attributes: - try: - value = getattr(node, name) - except AttributeError: - continue - if value is None and getattr(cls, name, ...) is None: - continue - value, simple = _format(value, level) - allsimple = allsimple and simple - args.append('%s=%s' % (name, value)) - if allsimple and len(args) <= 3: - return '%s(%s)' % (node.__class__.__name__, ', '.join(args)), not args - return '%s(%s%s)' % (node.__class__.__name__, prefix, sep.join(args)), False - elif isinstance(node, list): - if not node: - return '[]', True - return '[%s%s]' % (prefix, sep.join(_format(x, level)[0] for x in node)), False - return repr(node), True - - if not isinstance(node, AST): - raise TypeError('expected AST, got %r' % node.__class__.__name__) - if indent is not None and not isinstance(indent, str): - indent = ' ' * indent - return _format(node)[0] - - -def copy_location(new_node, old_node): - """ - Copy source location (`lineno`, `col_offset`, `end_lineno`, and `end_col_offset` - attributes) from *old_node* to *new_node* if possible, and return *new_node*. - """ - for attr in 'lineno', 'col_offset', 'end_lineno', 'end_col_offset': - if attr in old_node._attributes and attr in new_node._attributes: - value = getattr(old_node, attr, None) - # end_lineno and end_col_offset are optional attributes, and they - # should be copied whether the value is None or not. - if value is not None or ( - hasattr(old_node, attr) and attr.startswith("end_") - ): - setattr(new_node, attr, value) - return new_node - - -def fix_missing_locations(node): - """ - When you compile a node tree with compile(), the compiler expects lineno and - col_offset attributes for every node that supports them. This is rather - tedious to fill in for generated nodes, so this helper adds these attributes - recursively where not already set, by setting them to the values of the - parent node. It works recursively starting at *node*. - """ - def _fix(node, lineno, col_offset, end_lineno, end_col_offset): - if 'lineno' in node._attributes: - if not hasattr(node, 'lineno'): - node.lineno = lineno - else: - lineno = node.lineno - if 'end_lineno' in node._attributes: - if getattr(node, 'end_lineno', None) is None: - node.end_lineno = end_lineno - else: - end_lineno = node.end_lineno - if 'col_offset' in node._attributes: - if not hasattr(node, 'col_offset'): - node.col_offset = col_offset - else: - col_offset = node.col_offset - if 'end_col_offset' in node._attributes: - if getattr(node, 'end_col_offset', None) is None: - node.end_col_offset = end_col_offset - else: - end_col_offset = node.end_col_offset - for child in iter_child_nodes(node): - _fix(child, lineno, col_offset, end_lineno, end_col_offset) - _fix(node, 1, 0, 1, 0) - return node - - -def increment_lineno(node, n=1): - """ - Increment the line number and end line number of each node in the tree - starting at *node* by *n*. This is useful to "move code" to a different - location in a file. - """ - for child in walk(node): - # TypeIgnore is a special case where lineno is not an attribute - # but rather a field of the node itself. - if isinstance(child, TypeIgnore): - child.lineno = getattr(child, 'lineno', 0) + n - continue - - if 'lineno' in child._attributes: - child.lineno = getattr(child, 'lineno', 0) + n - if ( - "end_lineno" in child._attributes - and (end_lineno := getattr(child, "end_lineno", 0)) is not None - ): - child.end_lineno = end_lineno + n - return node - - -def iter_fields(node): - """ - Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields`` - that is present on *node*. - """ - for field in node._fields: - try: - yield field, getattr(node, field) - except AttributeError: - pass - - -def iter_child_nodes(node): - """ - Yield all direct child nodes of *node*, that is, all fields that are nodes - and all items of fields that are lists of nodes. - """ - for name, field in iter_fields(node): - if isinstance(field, AST): - yield field - elif isinstance(field, list): - for item in field: - if isinstance(item, AST): - yield item - - -def get_docstring(node, clean=True): - """ - Return the docstring for the given node or None if no docstring can - be found. If the node provided does not have docstrings a TypeError - will be raised. - - If *clean* is `True`, all tabs are expanded to spaces and any whitespace - that can be uniformly removed from the second line onwards is removed. - """ - if not isinstance(node, (AsyncFunctionDef, FunctionDef, ClassDef, Module)): - raise TypeError("%r can't have docstrings" % node.__class__.__name__) - if not(node.body and isinstance(node.body[0], Expr)): - return None - node = node.body[0].value - if isinstance(node, Constant) and isinstance(node.value, str): - text = node.value - else: - return None - if clean: - import inspect - text = inspect.cleandoc(text) - return text - - -_line_pattern = None -def _splitlines_no_ff(source, maxlines=None): - """Split a string into lines ignoring form feed and other chars. - - This mimics how the Python parser splits source code. - """ - global _line_pattern - if _line_pattern is None: - # lazily computed to speedup import time of `ast` - import re - _line_pattern = re.compile(r"(.*?(?:\r\n|\n|\r|$))") - - lines = [] - for lineno, match in enumerate(_line_pattern.finditer(source), 1): - if maxlines is not None and lineno > maxlines: - break - lines.append(match[0]) - return lines - - -def _pad_whitespace(source): - r"""Replace all chars except '\f\t' in a line with spaces.""" - result = '' - for c in source: - if c in '\f\t': - result += c - else: - result += ' ' - return result - - -def get_source_segment(source, node, *, padded=False): - """Get source code segment of the *source* that generated *node*. - - If some location information (`lineno`, `end_lineno`, `col_offset`, - or `end_col_offset`) is missing, return None. - - If *padded* is `True`, the first line of a multi-line statement will - be padded with spaces to match its original position. - """ - try: - if node.end_lineno is None or node.end_col_offset is None: - return None - lineno = node.lineno - 1 - end_lineno = node.end_lineno - 1 - col_offset = node.col_offset - end_col_offset = node.end_col_offset - except AttributeError: - return None - - lines = _splitlines_no_ff(source, maxlines=end_lineno+1) - if end_lineno == lineno: - return lines[lineno].encode()[col_offset:end_col_offset].decode() - - if padded: - padding = _pad_whitespace(lines[lineno].encode()[:col_offset].decode()) - else: - padding = '' - - first = padding + lines[lineno].encode()[col_offset:].decode() - last = lines[end_lineno].encode()[:end_col_offset].decode() - lines = lines[lineno+1:end_lineno] - - lines.insert(0, first) - lines.append(last) - return ''.join(lines) - - -def walk(node): - """ - Recursively yield all descendant nodes in the tree starting at *node* - (including *node* itself), in no specified order. This is useful if you - only want to modify nodes in place and don't care about the context. - """ - from collections import deque - todo = deque([node]) - while todo: - node = todo.popleft() - todo.extend(iter_child_nodes(node)) - yield node - - -def compare( - a, - b, - /, - *, - compare_attributes=False, -): - """Recursively compares two ASTs. - - compare_attributes affects whether AST attributes are considered - in the comparison. If compare_attributes is False (default), then - attributes are ignored. Otherwise they must all be equal. This - option is useful to check whether the ASTs are structurally equal but - might differ in whitespace or similar details. - """ - - sentinel = object() # handle the possibility of a missing attribute/field - - def _compare(a, b): - # Compare two fields on an AST object, which may themselves be - # AST objects, lists of AST objects, or primitive ASDL types - # like identifiers and constants. - if isinstance(a, AST): - return compare( - a, - b, - compare_attributes=compare_attributes, - ) - elif isinstance(a, list): - # If a field is repeated, then both objects will represent - # the value as a list. - if len(a) != len(b): - return False - for a_item, b_item in zip(a, b): - if not _compare(a_item, b_item): - return False - else: - return True - else: - return type(a) is type(b) and a == b - - def _compare_fields(a, b): - if a._fields != b._fields: - return False - for field in a._fields: - a_field = getattr(a, field, sentinel) - b_field = getattr(b, field, sentinel) - if a_field is sentinel and b_field is sentinel: - # both nodes are missing a field at runtime - continue - if a_field is sentinel or b_field is sentinel: - # one of the node is missing a field - return False - if not _compare(a_field, b_field): - return False - else: - return True - - def _compare_attributes(a, b): - if a._attributes != b._attributes: - return False - # Attributes are always ints. - for attr in a._attributes: - a_attr = getattr(a, attr, sentinel) - b_attr = getattr(b, attr, sentinel) - if a_attr is sentinel and b_attr is sentinel: - # both nodes are missing an attribute at runtime - continue - if a_attr != b_attr: - return False - else: - return True - - if type(a) is not type(b): - return False - if not _compare_fields(a, b): - return False - if compare_attributes and not _compare_attributes(a, b): - return False - return True - - -class NodeVisitor(object): - """ - A node visitor base class that walks the abstract syntax tree and calls a - visitor function for every node found. This function may return a value - which is forwarded by the `visit` method. - - This class is meant to be subclassed, with the subclass adding visitor - methods. - - Per default the visitor functions for the nodes are ``'visit_'`` + - class name of the node. So a `TryFinally` node visit function would - be `visit_TryFinally`. This behavior can be changed by overriding - the `visit` method. If no visitor function exists for a node - (return value `None`) the `generic_visit` visitor is used instead. - - Don't use the `NodeVisitor` if you want to apply changes to nodes during - traversing. For this a special visitor exists (`NodeTransformer`) that - allows modifications. - """ - - def visit(self, node): - """Visit a node.""" - method = 'visit_' + node.__class__.__name__ - visitor = getattr(self, method, self.generic_visit) - return visitor(node) - - def generic_visit(self, node): - """Called if no explicit visitor function exists for a node.""" - for field, value in iter_fields(node): - if isinstance(value, list): - for item in value: - if isinstance(item, AST): - self.visit(item) - elif isinstance(value, AST): - self.visit(value) - - -class NodeTransformer(NodeVisitor): - """ - A :class:`NodeVisitor` subclass that walks the abstract syntax tree and - allows modification of nodes. - - The `NodeTransformer` will walk the AST and use the return value of the - visitor methods to replace or remove the old node. If the return value of - the visitor method is ``None``, the node will be removed from its location, - otherwise it is replaced with the return value. The return value may be the - original node in which case no replacement takes place. - - Here is an example transformer that rewrites all occurrences of name lookups - (``foo``) to ``data['foo']``:: - - class RewriteName(NodeTransformer): - - def visit_Name(self, node): - return Subscript( - value=Name(id='data', ctx=Load()), - slice=Constant(value=node.id), - ctx=node.ctx - ) - - Keep in mind that if the node you're operating on has child nodes you must - either transform the child nodes yourself or call the :meth:`generic_visit` - method for the node first. - - For nodes that were part of a collection of statements (that applies to all - statement nodes), the visitor may also return a list of nodes rather than - just a single node. - - Usually you use the transformer like this:: - - node = YourTransformer().visit(node) - """ - - def generic_visit(self, node): - for field, old_value in iter_fields(node): - if isinstance(old_value, list): - new_values = [] - for value in old_value: - if isinstance(value, AST): - value = self.visit(value) - if value is None: - continue - elif not isinstance(value, AST): - new_values.extend(value) - continue - new_values.append(value) - old_value[:] = new_values - elif isinstance(old_value, AST): - new_node = self.visit(old_value) - if new_node is None: - delattr(node, field) - else: - setattr(node, field, new_node) - return node - -class slice(AST): - """Deprecated AST node class.""" - -class Index(slice): - """Deprecated AST node class. Use the index value directly instead.""" - def __new__(cls, value, **kwargs): - return value - -class ExtSlice(slice): - """Deprecated AST node class. Use ast.Tuple instead.""" - def __new__(cls, dims=(), **kwargs): - return Tuple(list(dims), Load(), **kwargs) - -# If the ast module is loaded more than once, only add deprecated methods once -if not hasattr(Tuple, 'dims'): - # The following code is for backward compatibility. - # It will be removed in future. - - def _dims_getter(self): - """Deprecated. Use elts instead.""" - return self.elts - - def _dims_setter(self, value): - self.elts = value - - Tuple.dims = property(_dims_getter, _dims_setter) - -class Suite(mod): - """Deprecated AST node class. Unused in Python 3.""" - -class AugLoad(expr_context): - """Deprecated AST node class. Unused in Python 3.""" - -class AugStore(expr_context): - """Deprecated AST node class. Unused in Python 3.""" - -class Param(expr_context): - """Deprecated AST node class. Unused in Python 3.""" - - -def unparse(ast_obj): - global _Unparser - try: - unparser = _Unparser() - except NameError: - from _ast_unparse import Unparser as _Unparser - unparser = _Unparser() - return unparser.visit(ast_obj) - - -def main(args=None): - import argparse - import sys - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('infile', nargs='?', default='-', - help='the file to parse; defaults to stdin') - parser.add_argument('-m', '--mode', default='exec', - choices=('exec', 'single', 'eval', 'func_type'), - help='specify what kind of code must be parsed') - parser.add_argument('--no-type-comments', default=True, action='store_false', - help="don't add information about type comments") - parser.add_argument('-a', '--include-attributes', action='store_true', - help='include attributes such as line numbers and ' - 'column offsets') - parser.add_argument('-i', '--indent', type=int, default=3, - help='indentation of nodes (number of spaces)') - parser.add_argument('--feature-version', - type=str, default=None, metavar='VERSION', - help='Python version in the format 3.x ' - '(for example, 3.10)') - parser.add_argument('-O', '--optimize', - type=int, default=-1, metavar='LEVEL', - help='optimization level for parser (default -1)') - parser.add_argument('--show-empty', default=False, action='store_true', - help='show empty lists and fields in dump output') - args = parser.parse_args(args) - - if args.infile == '-': - name = '<stdin>' - source = sys.stdin.buffer.read() - else: - name = args.infile - with open(args.infile, 'rb') as infile: - source = infile.read() - - # Process feature_version - feature_version = None - if args.feature_version: - try: - major, minor = map(int, args.feature_version.split('.', 1)) - except ValueError: - parser.error('Invalid format for --feature-version; ' - 'expected format 3.x (for example, 3.10)') - - feature_version = (major, minor) - - tree = parse(source, name, args.mode, type_comments=args.no_type_comments, - feature_version=feature_version, optimize=args.optimize) - print(dump(tree, include_attributes=args.include_attributes, - indent=args.indent, show_empty=args.show_empty)) - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/asyncio/__init__.py b/Python314_4_x86_Template/Lib/asyncio/__init__.py deleted file mode 100644 index 32a5dbae0..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/__init__.py +++ /dev/null @@ -1,74 +0,0 @@ -"""The asyncio package, tracking PEP 3156.""" - -# flake8: noqa - -import sys - -# This relies on each of the submodules having an __all__ variable. -from .base_events import * -from .coroutines import * -from .events import * -from .exceptions import * -from .futures import * -from .graph import * -from .locks import * -from .protocols import * -from .runners import * -from .queues import * -from .streams import * -from .subprocess import * -from .tasks import * -from .taskgroups import * -from .timeouts import * -from .threads import * -from .transports import * - -__all__ = (base_events.__all__ + - coroutines.__all__ + - events.__all__ + - exceptions.__all__ + - futures.__all__ + - graph.__all__ + - locks.__all__ + - protocols.__all__ + - runners.__all__ + - queues.__all__ + - streams.__all__ + - subprocess.__all__ + - tasks.__all__ + - taskgroups.__all__ + - threads.__all__ + - timeouts.__all__ + - transports.__all__) - -if sys.platform == 'win32': # pragma: no cover - from .windows_events import * - __all__ += windows_events.__all__ -else: - from .unix_events import * # pragma: no cover - __all__ += unix_events.__all__ - -def __getattr__(name: str): - import warnings - - match name: - case "AbstractEventLoopPolicy": - warnings._deprecated(f"asyncio.{name}", remove=(3, 16)) - return events._AbstractEventLoopPolicy - case "DefaultEventLoopPolicy": - warnings._deprecated(f"asyncio.{name}", remove=(3, 16)) - if sys.platform == 'win32': - return windows_events._DefaultEventLoopPolicy - return unix_events._DefaultEventLoopPolicy - case "WindowsSelectorEventLoopPolicy": - if sys.platform == 'win32': - warnings._deprecated(f"asyncio.{name}", remove=(3, 16)) - return windows_events._WindowsSelectorEventLoopPolicy - # Else fall through to the AttributeError below. - case "WindowsProactorEventLoopPolicy": - if sys.platform == 'win32': - warnings._deprecated(f"asyncio.{name}", remove=(3, 16)) - return windows_events._WindowsProactorEventLoopPolicy - # Else fall through to the AttributeError below. - - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/Python314_4_x86_Template/Lib/asyncio/__main__.py b/Python314_4_x86_Template/Lib/asyncio/__main__.py deleted file mode 100644 index 0e1003580..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/__main__.py +++ /dev/null @@ -1,241 +0,0 @@ -import argparse -import ast -import asyncio -import asyncio.tools -import concurrent.futures -import contextvars -import inspect -import os -import site -import sys -import threading -import types -import warnings - -from _colorize import get_theme -from _pyrepl.console import InteractiveColoredConsole - -from . import futures - - -class AsyncIOInteractiveConsole(InteractiveColoredConsole): - - def __init__(self, locals, loop): - super().__init__(locals, filename="<stdin>") - self.compile.compiler.flags |= ast.PyCF_ALLOW_TOP_LEVEL_AWAIT - - self.loop = loop - self.context = contextvars.copy_context() - - def runcode(self, code): - global return_code - future = concurrent.futures.Future() - - def callback(): - global return_code - global repl_future - global keyboard_interrupted - - repl_future = None - keyboard_interrupted = False - - func = types.FunctionType(code, self.locals) - try: - coro = func() - except SystemExit as se: - return_code = se.code - self.loop.stop() - return - except KeyboardInterrupt as ex: - keyboard_interrupted = True - future.set_exception(ex) - return - except BaseException as ex: - future.set_exception(ex) - return - - if not inspect.iscoroutine(coro): - future.set_result(coro) - return - - try: - repl_future = self.loop.create_task(coro, context=self.context) - futures._chain_future(repl_future, future) - except BaseException as exc: - future.set_exception(exc) - - self.loop.call_soon_threadsafe(callback, context=self.context) - - try: - return future.result() - except SystemExit as se: - return_code = se.code - self.loop.stop() - return - except BaseException: - if keyboard_interrupted: - if not CAN_USE_PYREPL: - self.write("\nKeyboardInterrupt\n") - else: - self.showtraceback() - return self.STATEMENT_FAILED - -class REPLThread(threading.Thread): - - def run(self): - global return_code - - try: - if not sys.flags.quiet: - banner = ( - f'asyncio REPL {sys.version} on {sys.platform}\n' - f'Use "await" directly instead of "asyncio.run()".\n' - f'Type "help", "copyright", "credits" or "license" ' - f'for more information.\n' - ) - - console.write(banner) - - if not sys.flags.isolated and (startup_path := os.getenv("PYTHONSTARTUP")): - sys.audit("cpython.run_startup", startup_path) - - import tokenize - with tokenize.open(startup_path) as f: - startup_code = compile(f.read(), startup_path, "exec") - exec(startup_code, console.locals) - - ps1 = getattr(sys, "ps1", ">>> ") - if CAN_USE_PYREPL: - theme = get_theme().syntax - ps1 = f"{theme.prompt}{ps1}{theme.reset}" - console.write(f"{ps1}import asyncio\n") - - if CAN_USE_PYREPL: - from _pyrepl.simple_interact import ( - run_multiline_interactive_console, - ) - try: - run_multiline_interactive_console(console) - except SystemExit: - # expected via the `exit` and `quit` commands - pass - except BaseException: - # unexpected issue - console.showtraceback() - console.write("Internal error, ") - return_code = 1 - else: - console.interact(banner="", exitmsg="") - finally: - warnings.filterwarnings( - 'ignore', - message=r'^coroutine .* was never awaited$', - category=RuntimeWarning) - - loop.call_soon_threadsafe(loop.stop) - - def interrupt(self) -> None: - if not CAN_USE_PYREPL: - return - - from _pyrepl.simple_interact import _get_reader - r = _get_reader() - if r.threading_hook is not None: - r.threading_hook.add("") # type: ignore - - -if __name__ == '__main__': - parser = argparse.ArgumentParser( - prog="python3 -m asyncio", - description="Interactive asyncio shell and CLI tools", - color=True, - ) - subparsers = parser.add_subparsers(help="sub-commands", dest="command") - ps = subparsers.add_parser( - "ps", help="Display a table of all pending tasks in a process" - ) - ps.add_argument("pid", type=int, help="Process ID to inspect") - pstree = subparsers.add_parser( - "pstree", help="Display a tree of all pending tasks in a process" - ) - pstree.add_argument("pid", type=int, help="Process ID to inspect") - args = parser.parse_args() - match args.command: - case "ps": - asyncio.tools.display_awaited_by_tasks_table(args.pid) - sys.exit(0) - case "pstree": - asyncio.tools.display_awaited_by_tasks_tree(args.pid) - sys.exit(0) - case None: - pass # continue to the interactive shell - case _: - # shouldn't happen as an invalid command-line wouldn't parse - # but let's keep it for the next person adding a command - print(f"error: unhandled command {args.command}", file=sys.stderr) - parser.print_usage(file=sys.stderr) - sys.exit(1) - - sys.audit("cpython.run_stdin") - - if os.getenv('PYTHON_BASIC_REPL'): - CAN_USE_PYREPL = False - else: - from _pyrepl.main import CAN_USE_PYREPL - - return_code = 0 - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - repl_locals = {'asyncio': asyncio} - for key in {'__name__', '__package__', - '__loader__', '__spec__', - '__builtins__', '__file__'}: - repl_locals[key] = locals()[key] - - console = AsyncIOInteractiveConsole(repl_locals, loop) - - repl_future = None - keyboard_interrupted = False - - try: - import readline # NoQA - except ImportError: - readline = None - - interactive_hook = getattr(sys, "__interactivehook__", None) - - if interactive_hook is not None: - sys.audit("cpython.run_interactivehook", interactive_hook) - interactive_hook() - - if interactive_hook is site.register_readline: - # Fix the completer function to use the interactive console locals - try: - import rlcompleter - except: - pass - else: - if readline is not None: - completer = rlcompleter.Completer(console.locals) - readline.set_completer(completer.complete) - - repl_thread = REPLThread(name="Interactive thread") - repl_thread.daemon = True - repl_thread.start() - - while True: - try: - loop.run_forever() - except KeyboardInterrupt: - keyboard_interrupted = True - if repl_future and not repl_future.done(): - repl_future.cancel() - repl_thread.interrupt() - continue - else: - break - - console.write('exiting asyncio REPL...\n') - loop.close() - sys.exit(return_code) diff --git a/Python314_4_x86_Template/Lib/asyncio/base_events.py b/Python314_4_x86_Template/Lib/asyncio/base_events.py deleted file mode 100644 index b83b84181..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/base_events.py +++ /dev/null @@ -1,2082 +0,0 @@ -"""Base implementation of event loop. - -The event loop can be broken up into a multiplexer (the part -responsible for notifying us of I/O events) and the event loop proper, -which wraps a multiplexer with functionality for scheduling callbacks, -immediately or at a given time in the future. - -Whenever a public API takes a callback, subsequent positional -arguments will be passed to the callback if/when it is called. This -avoids the proliferation of trivial lambdas implementing closures. -Keyword arguments for the callback are not supported; this is a -conscious design decision, leaving the door open for keyword arguments -to modify the meaning of the API call itself. -""" - -import collections -import collections.abc -import concurrent.futures -import errno -import heapq -import itertools -import os -import socket -import stat -import subprocess -import threading -import time -import traceback -import sys -import warnings -import weakref - -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -from . import constants -from . import coroutines -from . import events -from . import exceptions -from . import futures -from . import protocols -from . import sslproto -from . import staggered -from . import tasks -from . import timeouts -from . import transports -from . import trsock -from .log import logger - - -__all__ = 'BaseEventLoop','Server', - - -# Minimum number of _scheduled timer handles before cleanup of -# cancelled handles is performed. -_MIN_SCHEDULED_TIMER_HANDLES = 100 - -# Minimum fraction of _scheduled timer handles that are cancelled -# before cleanup of cancelled handles is performed. -_MIN_CANCELLED_TIMER_HANDLES_FRACTION = 0.5 - - -_HAS_IPv6 = hasattr(socket, 'AF_INET6') - -# Maximum timeout passed to select to avoid OS limitations -MAXIMUM_SELECT_TIMEOUT = 24 * 3600 - - -def _format_handle(handle): - cb = handle._callback - if isinstance(getattr(cb, '__self__', None), tasks.Task): - # format the task - return repr(cb.__self__) - else: - return str(handle) - - -def _format_pipe(fd): - if fd == subprocess.PIPE: - return '<pipe>' - elif fd == subprocess.STDOUT: - return '<stdout>' - else: - return repr(fd) - - -def _set_reuseport(sock): - if not hasattr(socket, 'SO_REUSEPORT'): - raise ValueError('reuse_port not supported by socket module') - else: - try: - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - except OSError: - raise ValueError('reuse_port not supported by socket module, ' - 'SO_REUSEPORT defined but not implemented.') - - -def _ipaddr_info(host, port, family, type, proto, flowinfo=0, scopeid=0): - # Try to skip getaddrinfo if "host" is already an IP. Users might have - # handled name resolution in their own code and pass in resolved IPs. - if not hasattr(socket, 'inet_pton'): - return - - if proto not in {0, socket.IPPROTO_TCP, socket.IPPROTO_UDP} or \ - host is None: - return None - - if type == socket.SOCK_STREAM: - proto = socket.IPPROTO_TCP - elif type == socket.SOCK_DGRAM: - proto = socket.IPPROTO_UDP - else: - return None - - if port is None: - port = 0 - elif isinstance(port, bytes) and port == b'': - port = 0 - elif isinstance(port, str) and port == '': - port = 0 - else: - # If port's a service name like "http", don't skip getaddrinfo. - try: - port = int(port) - except (TypeError, ValueError): - return None - - if family == socket.AF_UNSPEC: - afs = [socket.AF_INET] - if _HAS_IPv6: - afs.append(socket.AF_INET6) - else: - afs = [family] - - if isinstance(host, bytes): - host = host.decode('idna') - if '%' in host: - # Linux's inet_pton doesn't accept an IPv6 zone index after host, - # like '::1%lo0'. - return None - - for af in afs: - try: - socket.inet_pton(af, host) - # The host has already been resolved. - if _HAS_IPv6 and af == socket.AF_INET6: - return af, type, proto, '', (host, port, flowinfo, scopeid) - else: - return af, type, proto, '', (host, port) - except OSError: - pass - - # "host" is not an IP address. - return None - - -def _interleave_addrinfos(addrinfos, first_address_family_count=1): - """Interleave list of addrinfo tuples by family.""" - # Group addresses by family - addrinfos_by_family = collections.OrderedDict() - for addr in addrinfos: - family = addr[0] - if family not in addrinfos_by_family: - addrinfos_by_family[family] = [] - addrinfos_by_family[family].append(addr) - addrinfos_lists = list(addrinfos_by_family.values()) - - reordered = [] - if first_address_family_count > 1: - reordered.extend(addrinfos_lists[0][:first_address_family_count - 1]) - del addrinfos_lists[0][:first_address_family_count - 1] - reordered.extend( - a for a in itertools.chain.from_iterable( - itertools.zip_longest(*addrinfos_lists) - ) if a is not None) - return reordered - - -def _run_until_complete_cb(fut): - if not fut.cancelled(): - exc = fut.exception() - if isinstance(exc, (SystemExit, KeyboardInterrupt)): - # Issue #22429: run_forever() already finished, no need to - # stop it. - return - futures._get_loop(fut).stop() - - -if hasattr(socket, 'TCP_NODELAY'): - def _set_nodelay(sock): - if (sock.family in {socket.AF_INET, socket.AF_INET6} and - sock.type == socket.SOCK_STREAM and - sock.proto == socket.IPPROTO_TCP): - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) -else: - def _set_nodelay(sock): - pass - - -def _check_ssl_socket(sock): - if ssl is not None and isinstance(sock, ssl.SSLSocket): - raise TypeError("Socket cannot be of type SSLSocket") - - -class _SendfileFallbackProtocol(protocols.Protocol): - def __init__(self, transp): - if not isinstance(transp, transports._FlowControlMixin): - raise TypeError("transport should be _FlowControlMixin instance") - self._transport = transp - self._proto = transp.get_protocol() - self._should_resume_reading = transp.is_reading() - self._should_resume_writing = transp._protocol_paused - transp.pause_reading() - transp.set_protocol(self) - if self._should_resume_writing: - self._write_ready_fut = self._transport._loop.create_future() - else: - self._write_ready_fut = None - - async def drain(self): - if self._transport.is_closing(): - raise ConnectionError("Connection closed by peer") - fut = self._write_ready_fut - if fut is None: - return - await fut - - def connection_made(self, transport): - raise RuntimeError("Invalid state: " - "connection should have been established already.") - - def connection_lost(self, exc): - if self._write_ready_fut is not None: - # Never happens if peer disconnects after sending the whole content - # Thus disconnection is always an exception from user perspective - if exc is None: - self._write_ready_fut.set_exception( - ConnectionError("Connection is closed by peer")) - else: - self._write_ready_fut.set_exception(exc) - self._proto.connection_lost(exc) - - def pause_writing(self): - if self._write_ready_fut is not None: - return - self._write_ready_fut = self._transport._loop.create_future() - - def resume_writing(self): - if self._write_ready_fut is None: - return - self._write_ready_fut.set_result(False) - self._write_ready_fut = None - - def data_received(self, data): - raise RuntimeError("Invalid state: reading should be paused") - - def eof_received(self): - raise RuntimeError("Invalid state: reading should be paused") - - async def restore(self): - self._transport.set_protocol(self._proto) - if self._should_resume_reading: - self._transport.resume_reading() - if self._write_ready_fut is not None: - # Cancel the future. - # Basically it has no effect because protocol is switched back, - # no code should wait for it anymore. - self._write_ready_fut.cancel() - if self._should_resume_writing: - self._proto.resume_writing() - - -class Server(events.AbstractServer): - - def __init__(self, loop, sockets, protocol_factory, ssl_context, backlog, - ssl_handshake_timeout, ssl_shutdown_timeout=None): - self._loop = loop - self._sockets = sockets - # Weak references so we don't break Transport's ability to - # detect abandoned transports - self._clients = weakref.WeakSet() - self._waiters = [] - self._protocol_factory = protocol_factory - self._backlog = backlog - self._ssl_context = ssl_context - self._ssl_handshake_timeout = ssl_handshake_timeout - self._ssl_shutdown_timeout = ssl_shutdown_timeout - self._serving = False - self._serving_forever_fut = None - - def __repr__(self): - return f'<{self.__class__.__name__} sockets={self.sockets!r}>' - - def _attach(self, transport): - assert self._sockets is not None - self._clients.add(transport) - - def _detach(self, transport): - self._clients.discard(transport) - if len(self._clients) == 0 and self._sockets is None: - self._wakeup() - - def _wakeup(self): - waiters = self._waiters - self._waiters = None - for waiter in waiters: - if not waiter.done(): - waiter.set_result(None) - - def _start_serving(self): - if self._serving: - return - self._serving = True - for sock in self._sockets: - sock.listen(self._backlog) - self._loop._start_serving( - self._protocol_factory, sock, self._ssl_context, - self, self._backlog, self._ssl_handshake_timeout, - self._ssl_shutdown_timeout) - - def get_loop(self): - return self._loop - - def is_serving(self): - return self._serving - - @property - def sockets(self): - if self._sockets is None: - return () - return tuple(trsock.TransportSocket(s) for s in self._sockets) - - def close(self): - sockets = self._sockets - if sockets is None: - return - self._sockets = None - - for sock in sockets: - self._loop._stop_serving(sock) - - self._serving = False - - if (self._serving_forever_fut is not None and - not self._serving_forever_fut.done()): - self._serving_forever_fut.cancel() - self._serving_forever_fut = None - - if len(self._clients) == 0: - self._wakeup() - - def close_clients(self): - for transport in self._clients.copy(): - transport.close() - - def abort_clients(self): - for transport in self._clients.copy(): - transport.abort() - - async def start_serving(self): - self._start_serving() - # Skip one loop iteration so that all 'loop.add_reader' - # go through. - await tasks.sleep(0) - - async def serve_forever(self): - if self._serving_forever_fut is not None: - raise RuntimeError( - f'server {self!r} is already being awaited on serve_forever()') - if self._sockets is None: - raise RuntimeError(f'server {self!r} is closed') - - self._start_serving() - self._serving_forever_fut = self._loop.create_future() - - try: - await self._serving_forever_fut - except exceptions.CancelledError: - try: - self.close() - await self.wait_closed() - finally: - raise - finally: - self._serving_forever_fut = None - - async def wait_closed(self): - """Wait until server is closed and all connections are dropped. - - - If the server is not closed, wait. - - If it is closed, but there are still active connections, wait. - - Anyone waiting here will be unblocked once both conditions - (server is closed and all connections have been dropped) - have become true, in either order. - - Historical note: In 3.11 and before, this was broken, returning - immediately if the server was already closed, even if there - were still active connections. An attempted fix in 3.12.0 was - still broken, returning immediately if the server was still - open and there were no active connections. Hopefully in 3.12.1 - we have it right. - """ - # Waiters are unblocked by self._wakeup(), which is called - # from two places: self.close() and self._detach(), but only - # when both conditions have become true. To signal that this - # has happened, self._wakeup() sets self._waiters to None. - if self._waiters is None: - return - waiter = self._loop.create_future() - self._waiters.append(waiter) - await waiter - - -class BaseEventLoop(events.AbstractEventLoop): - - def __init__(self): - self._timer_cancelled_count = 0 - self._closed = False - self._stopping = False - self._ready = collections.deque() - self._scheduled = [] - self._default_executor = None - self._internal_fds = 0 - # Identifier of the thread running the event loop, or None if the - # event loop is not running - self._thread_id = None - self._clock_resolution = time.get_clock_info('monotonic').resolution - self._exception_handler = None - self.set_debug(coroutines._is_debug_mode()) - # The preserved state of async generator hooks. - self._old_agen_hooks = None - # In debug mode, if the execution of a callback or a step of a task - # exceed this duration in seconds, the slow callback/task is logged. - self.slow_callback_duration = 0.1 - self._current_handle = None - self._task_factory = None - self._coroutine_origin_tracking_enabled = False - self._coroutine_origin_tracking_saved_depth = None - - # A weak set of all asynchronous generators that are - # being iterated by the loop. - self._asyncgens = weakref.WeakSet() - # Set to True when `loop.shutdown_asyncgens` is called. - self._asyncgens_shutdown_called = False - # Set to True when `loop.shutdown_default_executor` is called. - self._executor_shutdown_called = False - - def __repr__(self): - return ( - f'<{self.__class__.__name__} running={self.is_running()} ' - f'closed={self.is_closed()} debug={self.get_debug()}>' - ) - - def create_future(self): - """Create a Future object attached to the loop.""" - return futures.Future(loop=self) - - def create_task(self, coro, **kwargs): - """Schedule or begin executing a coroutine object. - - Return a task object. - """ - self._check_closed() - if self._task_factory is not None: - return self._task_factory(self, coro, **kwargs) - - task = tasks.Task(coro, loop=self, **kwargs) - if task._source_traceback: - del task._source_traceback[-1] - try: - return task - finally: - # gh-128552: prevent a refcycle of - # task.exception().__traceback__->BaseEventLoop.create_task->task - del task - - def set_task_factory(self, factory): - """Set a task factory that will be used by loop.create_task(). - - If factory is None the default task factory will be set. - - If factory is a callable, it should have a signature matching - '(loop, coro, **kwargs)', where 'loop' will be a reference to the active - event loop, 'coro' will be a coroutine object, and **kwargs will be - arbitrary keyword arguments that should be passed on to Task. - The callable must return a Task. - """ - if factory is not None and not callable(factory): - raise TypeError('task factory must be a callable or None') - self._task_factory = factory - - def get_task_factory(self): - """Return a task factory, or None if the default one is in use.""" - return self._task_factory - - def _make_socket_transport(self, sock, protocol, waiter=None, *, - extra=None, server=None): - """Create socket transport.""" - raise NotImplementedError - - def _make_ssl_transport( - self, rawsock, protocol, sslcontext, waiter=None, - *, server_side=False, server_hostname=None, - extra=None, server=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - call_connection_made=True): - """Create SSL transport.""" - raise NotImplementedError - - def _make_datagram_transport(self, sock, protocol, - address=None, waiter=None, extra=None): - """Create datagram transport.""" - raise NotImplementedError - - def _make_read_pipe_transport(self, pipe, protocol, waiter=None, - extra=None): - """Create read pipe transport.""" - raise NotImplementedError - - def _make_write_pipe_transport(self, pipe, protocol, waiter=None, - extra=None): - """Create write pipe transport.""" - raise NotImplementedError - - async def _make_subprocess_transport(self, protocol, args, shell, - stdin, stdout, stderr, bufsize, - extra=None, **kwargs): - """Create subprocess transport.""" - raise NotImplementedError - - def _write_to_self(self): - """Write a byte to self-pipe, to wake up the event loop. - - This may be called from a different thread. - - The subclass is responsible for implementing the self-pipe. - """ - raise NotImplementedError - - def _process_events(self, event_list): - """Process selector events.""" - raise NotImplementedError - - def _check_closed(self): - if self._closed: - raise RuntimeError('Event loop is closed') - - def _check_default_executor(self): - if self._executor_shutdown_called: - raise RuntimeError('Executor shutdown has been called') - - def _asyncgen_finalizer_hook(self, agen): - self._asyncgens.discard(agen) - if not self.is_closed(): - self.call_soon_threadsafe(self.create_task, agen.aclose()) - - def _asyncgen_firstiter_hook(self, agen): - if self._asyncgens_shutdown_called: - warnings.warn( - f"asynchronous generator {agen!r} was scheduled after " - f"loop.shutdown_asyncgens() call", - ResourceWarning, source=self) - - self._asyncgens.add(agen) - - async def shutdown_asyncgens(self): - """Shutdown all active asynchronous generators.""" - self._asyncgens_shutdown_called = True - - if not len(self._asyncgens): - # If Python version is <3.6 or we don't have any asynchronous - # generators alive. - return - - closing_agens = list(self._asyncgens) - self._asyncgens.clear() - - results = await tasks.gather( - *[ag.aclose() for ag in closing_agens], - return_exceptions=True) - - for result, agen in zip(results, closing_agens): - if isinstance(result, Exception): - self.call_exception_handler({ - 'message': f'an error occurred during closing of ' - f'asynchronous generator {agen!r}', - 'exception': result, - 'asyncgen': agen - }) - - async def shutdown_default_executor(self, timeout=None): - """Schedule the shutdown of the default executor. - - The timeout parameter specifies the amount of time the executor will - be given to finish joining. The default value is None, which means - that the executor will be given an unlimited amount of time. - """ - self._executor_shutdown_called = True - if self._default_executor is None: - return - future = self.create_future() - thread = threading.Thread(target=self._do_shutdown, args=(future,)) - thread.start() - try: - async with timeouts.timeout(timeout): - await future - except TimeoutError: - warnings.warn("The executor did not finishing joining " - f"its threads within {timeout} seconds.", - RuntimeWarning, stacklevel=2) - self._default_executor.shutdown(wait=False) - else: - thread.join() - - def _do_shutdown(self, future): - try: - self._default_executor.shutdown(wait=True) - if not self.is_closed(): - self.call_soon_threadsafe(futures._set_result_unless_cancelled, - future, None) - except Exception as ex: - if not self.is_closed() and not future.cancelled(): - self.call_soon_threadsafe(future.set_exception, ex) - - def _check_running(self): - if self.is_running(): - raise RuntimeError('This event loop is already running') - if events._get_running_loop() is not None: - raise RuntimeError( - 'Cannot run the event loop while another loop is running') - - def _run_forever_setup(self): - """Prepare the run loop to process events. - - This method exists so that custom event loop subclasses (e.g., event loops - that integrate a GUI event loop with Python's event loop) have access to all the - loop setup logic. - """ - self._check_closed() - self._check_running() - self._set_coroutine_origin_tracking(self._debug) - - self._old_agen_hooks = sys.get_asyncgen_hooks() - self._thread_id = threading.get_ident() - sys.set_asyncgen_hooks( - firstiter=self._asyncgen_firstiter_hook, - finalizer=self._asyncgen_finalizer_hook - ) - - events._set_running_loop(self) - - def _run_forever_cleanup(self): - """Clean up after an event loop finishes the looping over events. - - This method exists so that custom event loop subclasses (e.g., event loops - that integrate a GUI event loop with Python's event loop) have access to all the - loop cleanup logic. - """ - self._stopping = False - self._thread_id = None - events._set_running_loop(None) - self._set_coroutine_origin_tracking(False) - # Restore any pre-existing async generator hooks. - if self._old_agen_hooks is not None: - sys.set_asyncgen_hooks(*self._old_agen_hooks) - self._old_agen_hooks = None - - def run_forever(self): - """Run until stop() is called.""" - self._run_forever_setup() - try: - while True: - self._run_once() - if self._stopping: - break - finally: - self._run_forever_cleanup() - - def run_until_complete(self, future): - """Run until the Future is done. - - If the argument is a coroutine, it is wrapped in a Task. - - WARNING: It would be disastrous to call run_until_complete() - with the same coroutine twice -- it would wrap it in two - different Tasks and that can't be good. - - Return the Future's result, or raise its exception. - """ - self._check_closed() - self._check_running() - - new_task = not futures.isfuture(future) - future = tasks.ensure_future(future, loop=self) - if new_task: - # An exception is raised if the future didn't complete, so there - # is no need to log the "destroy pending task" message - future._log_destroy_pending = False - - future.add_done_callback(_run_until_complete_cb) - try: - self.run_forever() - except: - if new_task and future.done() and not future.cancelled(): - # The coroutine raised a BaseException. Consume the exception - # to not log a warning, the caller doesn't have access to the - # local task. - future.exception() - raise - finally: - future.remove_done_callback(_run_until_complete_cb) - if not future.done(): - raise RuntimeError('Event loop stopped before Future completed.') - - return future.result() - - def stop(self): - """Stop running the event loop. - - Every callback already scheduled will still run. This simply informs - run_forever to stop looping after a complete iteration. - """ - self._stopping = True - - def close(self): - """Close the event loop. - - This clears the queues and shuts down the executor, - but does not wait for the executor to finish. - - The event loop must not be running. - """ - if self.is_running(): - raise RuntimeError("Cannot close a running event loop") - if self._closed: - return - if self._debug: - logger.debug("Close %r", self) - self._closed = True - self._ready.clear() - self._scheduled.clear() - self._executor_shutdown_called = True - executor = self._default_executor - if executor is not None: - self._default_executor = None - executor.shutdown(wait=False) - - def is_closed(self): - """Returns True if the event loop was closed.""" - return self._closed - - def __del__(self, _warn=warnings.warn): - if not self.is_closed(): - _warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) - if not self.is_running(): - self.close() - - def is_running(self): - """Returns True if the event loop is running.""" - return (self._thread_id is not None) - - def time(self): - """Return the time according to the event loop's clock. - - This is a float expressed in seconds since an epoch, but the - epoch, precision, accuracy and drift are unspecified and may - differ per event loop. - """ - return time.monotonic() - - def call_later(self, delay, callback, *args, context=None): - """Arrange for a callback to be called at a given time. - - Return a Handle: an opaque object with a cancel() method that - can be used to cancel the call. - - The delay can be an int or float, expressed in seconds. It is - always relative to the current time. - - Each callback will be called exactly once. If two callbacks - are scheduled for exactly the same time, it is undefined which - will be called first. - - Any positional arguments after the callback will be passed to - the callback when it is called. - """ - if delay is None: - raise TypeError('delay must not be None') - timer = self.call_at(self.time() + delay, callback, *args, - context=context) - if timer._source_traceback: - del timer._source_traceback[-1] - return timer - - def call_at(self, when, callback, *args, context=None): - """Like call_later(), but uses an absolute time. - - Absolute time corresponds to the event loop's time() method. - """ - if when is None: - raise TypeError("when cannot be None") - self._check_closed() - if self._debug: - self._check_thread() - self._check_callback(callback, 'call_at') - timer = events.TimerHandle(when, callback, args, self, context) - if timer._source_traceback: - del timer._source_traceback[-1] - heapq.heappush(self._scheduled, timer) - timer._scheduled = True - return timer - - def call_soon(self, callback, *args, context=None): - """Arrange for a callback to be called as soon as possible. - - This operates as a FIFO queue: callbacks are called in the - order in which they are registered. Each callback will be - called exactly once. - - Any positional arguments after the callback will be passed to - the callback when it is called. - """ - self._check_closed() - if self._debug: - self._check_thread() - self._check_callback(callback, 'call_soon') - handle = self._call_soon(callback, args, context) - if handle._source_traceback: - del handle._source_traceback[-1] - return handle - - def _check_callback(self, callback, method): - if (coroutines.iscoroutine(callback) or - coroutines._iscoroutinefunction(callback)): - raise TypeError( - f"coroutines cannot be used with {method}()") - if not callable(callback): - raise TypeError( - f'a callable object was expected by {method}(), ' - f'got {callback!r}') - - def _call_soon(self, callback, args, context): - handle = events.Handle(callback, args, self, context) - if handle._source_traceback: - del handle._source_traceback[-1] - self._ready.append(handle) - return handle - - def _check_thread(self): - """Check that the current thread is the thread running the event loop. - - Non-thread-safe methods of this class make this assumption and will - likely behave incorrectly when the assumption is violated. - - Should only be called when (self._debug == True). The caller is - responsible for checking this condition for performance reasons. - """ - if self._thread_id is None: - return - thread_id = threading.get_ident() - if thread_id != self._thread_id: - raise RuntimeError( - "Non-thread-safe operation invoked on an event loop other " - "than the current one") - - def call_soon_threadsafe(self, callback, *args, context=None): - """Like call_soon(), but thread-safe.""" - self._check_closed() - if self._debug: - self._check_callback(callback, 'call_soon_threadsafe') - handle = events._ThreadSafeHandle(callback, args, self, context) - self._ready.append(handle) - if handle._source_traceback: - del handle._source_traceback[-1] - if handle._source_traceback: - del handle._source_traceback[-1] - self._write_to_self() - return handle - - def run_in_executor(self, executor, func, *args): - self._check_closed() - if self._debug: - self._check_callback(func, 'run_in_executor') - if executor is None: - executor = self._default_executor - # Only check when the default executor is being used - self._check_default_executor() - if executor is None: - executor = concurrent.futures.ThreadPoolExecutor( - thread_name_prefix='asyncio' - ) - self._default_executor = executor - return futures.wrap_future( - executor.submit(func, *args), loop=self) - - def set_default_executor(self, executor): - if not isinstance(executor, concurrent.futures.ThreadPoolExecutor): - raise TypeError('executor must be ThreadPoolExecutor instance') - self._default_executor = executor - - def _getaddrinfo_debug(self, host, port, family, type, proto, flags): - msg = [f"{host}:{port!r}"] - if family: - msg.append(f'family={family!r}') - if type: - msg.append(f'type={type!r}') - if proto: - msg.append(f'proto={proto!r}') - if flags: - msg.append(f'flags={flags!r}') - msg = ', '.join(msg) - logger.debug('Get address info %s', msg) - - t0 = self.time() - addrinfo = socket.getaddrinfo(host, port, family, type, proto, flags) - dt = self.time() - t0 - - msg = f'Getting address info {msg} took {dt * 1e3:.3f}ms: {addrinfo!r}' - if dt >= self.slow_callback_duration: - logger.info(msg) - else: - logger.debug(msg) - return addrinfo - - async def getaddrinfo(self, host, port, *, - family=0, type=0, proto=0, flags=0): - if self._debug: - getaddr_func = self._getaddrinfo_debug - else: - getaddr_func = socket.getaddrinfo - - return await self.run_in_executor( - None, getaddr_func, host, port, family, type, proto, flags) - - async def getnameinfo(self, sockaddr, flags=0): - return await self.run_in_executor( - None, socket.getnameinfo, sockaddr, flags) - - async def sock_sendfile(self, sock, file, offset=0, count=None, - *, fallback=True): - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - _check_ssl_socket(sock) - self._check_sendfile_params(sock, file, offset, count) - try: - return await self._sock_sendfile_native(sock, file, - offset, count) - except exceptions.SendfileNotAvailableError as exc: - if not fallback: - raise - return await self._sock_sendfile_fallback(sock, file, - offset, count) - - async def _sock_sendfile_native(self, sock, file, offset, count): - # NB: sendfile syscall is not supported for SSL sockets and - # non-mmap files even if sendfile is supported by OS - raise exceptions.SendfileNotAvailableError( - f"syscall sendfile is not available for socket {sock!r} " - f"and file {file!r} combination") - - async def _sock_sendfile_fallback(self, sock, file, offset, count): - if offset: - file.seek(offset) - blocksize = ( - min(count, constants.SENDFILE_FALLBACK_READBUFFER_SIZE) - if count else constants.SENDFILE_FALLBACK_READBUFFER_SIZE - ) - buf = bytearray(blocksize) - total_sent = 0 - try: - while True: - if count: - blocksize = min(count - total_sent, blocksize) - if blocksize <= 0: - break - view = memoryview(buf)[:blocksize] - read = await self.run_in_executor(None, file.readinto, view) - if not read: - break # EOF - await self.sock_sendall(sock, view[:read]) - total_sent += read - return total_sent - finally: - if total_sent > 0 and hasattr(file, 'seek'): - file.seek(offset + total_sent) - - def _check_sendfile_params(self, sock, file, offset, count): - if 'b' not in getattr(file, 'mode', 'b'): - raise ValueError("file should be opened in binary mode") - if not sock.type == socket.SOCK_STREAM: - raise ValueError("only SOCK_STREAM type sockets are supported") - if count is not None: - if not isinstance(count, int): - raise TypeError( - "count must be a positive integer (got {!r})".format(count)) - if count <= 0: - raise ValueError( - "count must be a positive integer (got {!r})".format(count)) - if not isinstance(offset, int): - raise TypeError( - "offset must be a non-negative integer (got {!r})".format( - offset)) - if offset < 0: - raise ValueError( - "offset must be a non-negative integer (got {!r})".format( - offset)) - - async def _connect_sock(self, exceptions, addr_info, local_addr_infos=None): - """Create, bind and connect one socket.""" - my_exceptions = [] - exceptions.append(my_exceptions) - family, type_, proto, _, address = addr_info - sock = None - try: - try: - sock = socket.socket(family=family, type=type_, proto=proto) - sock.setblocking(False) - if local_addr_infos is not None: - for lfamily, _, _, _, laddr in local_addr_infos: - # skip local addresses of different family - if lfamily != family: - continue - try: - sock.bind(laddr) - break - except OSError as exc: - msg = ( - f'error while attempting to bind on ' - f'address {laddr!r}: {str(exc).lower()}' - ) - exc = OSError(exc.errno, msg) - my_exceptions.append(exc) - else: # all bind attempts failed - if my_exceptions: - raise my_exceptions.pop() - else: - raise OSError(f"no matching local address with {family=} found") - await self.sock_connect(sock, address) - return sock - except OSError as exc: - my_exceptions.append(exc) - raise - except: - if sock is not None: - try: - sock.close() - except OSError: - # An error when closing a newly created socket is - # not important, but it can overwrite more important - # non-OSError error. So ignore it. - pass - raise - finally: - exceptions = my_exceptions = None - - async def create_connection( - self, protocol_factory, host=None, port=None, - *, ssl=None, family=0, - proto=0, flags=0, sock=None, - local_addr=None, server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - happy_eyeballs_delay=None, interleave=None, - all_errors=False): - """Connect to a TCP server. - - Create a streaming transport connection to a given internet host and - port: socket family AF_INET or socket.AF_INET6 depending on host (or - family if specified), socket type SOCK_STREAM. protocol_factory must be - a callable returning a protocol instance. - - This method is a coroutine which will try to establish the connection - in the background. When successful, the coroutine returns a - (transport, protocol) pair. - """ - if server_hostname is not None and not ssl: - raise ValueError('server_hostname is only meaningful with ssl') - - if server_hostname is None and ssl: - # Use host as default for server_hostname. It is an error - # if host is empty or not set, e.g. when an - # already-connected socket was passed or when only a port - # is given. To avoid this error, you can pass - # server_hostname='' -- this will bypass the hostname - # check. (This also means that if host is a numeric - # IP/IPv6 address, we will attempt to verify that exact - # address; this will probably fail, but it is possible to - # create a certificate for a specific IP address, so we - # don't judge it here.) - if not host: - raise ValueError('You must set server_hostname ' - 'when using ssl without a host') - server_hostname = host - - if ssl_handshake_timeout is not None and not ssl: - raise ValueError( - 'ssl_handshake_timeout is only meaningful with ssl') - - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - - if sock is not None: - _check_ssl_socket(sock) - - if happy_eyeballs_delay is not None and interleave is None: - # If using happy eyeballs, default to interleave addresses by family - interleave = 1 - - if host is not None or port is not None: - if sock is not None: - raise ValueError( - 'host/port and sock can not be specified at the same time') - - infos = await self._ensure_resolved( - (host, port), family=family, - type=socket.SOCK_STREAM, proto=proto, flags=flags, loop=self) - if not infos: - raise OSError('getaddrinfo() returned empty list') - - if local_addr is not None: - laddr_infos = await self._ensure_resolved( - local_addr, family=family, - type=socket.SOCK_STREAM, proto=proto, - flags=flags, loop=self) - if not laddr_infos: - raise OSError('getaddrinfo() returned empty list') - else: - laddr_infos = None - - if interleave: - infos = _interleave_addrinfos(infos, interleave) - - exceptions = [] - if happy_eyeballs_delay is None: - # not using happy eyeballs - for addrinfo in infos: - try: - sock = await self._connect_sock( - exceptions, addrinfo, laddr_infos) - break - except OSError: - continue - else: # using happy eyeballs - sock = (await staggered.staggered_race( - ( - # can't use functools.partial as it keeps a reference - # to exceptions - lambda addrinfo=addrinfo: self._connect_sock( - exceptions, addrinfo, laddr_infos - ) - for addrinfo in infos - ), - happy_eyeballs_delay, - loop=self, - ))[0] # can't use sock, _, _ as it keeks a reference to exceptions - - if sock is None: - exceptions = [exc for sub in exceptions for exc in sub] - try: - if all_errors: - raise ExceptionGroup("create_connection failed", exceptions) - if len(exceptions) == 1: - raise exceptions[0] - elif exceptions: - # If they all have the same str(), raise one. - model = str(exceptions[0]) - if all(str(exc) == model for exc in exceptions): - raise exceptions[0] - # Raise a combined exception so the user can see all - # the various error messages. - raise OSError('Multiple exceptions: {}'.format( - ', '.join(str(exc) for exc in exceptions))) - else: - # No exceptions were collected, raise a timeout error - raise TimeoutError('create_connection failed') - finally: - exceptions = None - - else: - if sock is None: - raise ValueError( - 'host and port was not specified and no sock specified') - if sock.type != socket.SOCK_STREAM: - # We allow AF_INET, AF_INET6, AF_UNIX as long as they - # are SOCK_STREAM. - # We support passing AF_UNIX sockets even though we have - # a dedicated API for that: create_unix_connection. - # Disallowing AF_UNIX in this method, breaks backwards - # compatibility. - raise ValueError( - f'A Stream Socket was expected, got {sock!r}') - - transport, protocol = await self._create_connection_transport( - sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - if self._debug: - # Get the socket from the transport because SSL transport closes - # the old socket and creates a new SSL socket - sock = transport.get_extra_info('socket') - logger.debug("%r connected to %s:%r: (%r, %r)", - sock, host, port, transport, protocol) - return transport, protocol - - async def _create_connection_transport( - self, sock, protocol_factory, ssl, - server_hostname, server_side=False, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - - sock.setblocking(False) - - protocol = protocol_factory() - waiter = self.create_future() - if ssl: - sslcontext = None if isinstance(ssl, bool) else ssl - transport = self._make_ssl_transport( - sock, protocol, sslcontext, waiter, - server_side=server_side, server_hostname=server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - else: - transport = self._make_socket_transport(sock, protocol, waiter) - - try: - await waiter - except: - transport.close() - raise - - return transport, protocol - - async def sendfile(self, transport, file, offset=0, count=None, - *, fallback=True): - """Send a file to transport. - - Return the total number of bytes which were sent. - - The method uses high-performance os.sendfile if available. - - file must be a regular file object opened in binary mode. - - offset tells from where to start reading the file. If specified, - count is the total number of bytes to transmit as opposed to - sending the file until EOF is reached. File position is updated on - return or also in case of error in which case file.tell() - can be used to figure out the number of bytes - which were sent. - - fallback set to True makes asyncio to manually read and send - the file when the platform does not support the sendfile syscall - (e.g. Windows or SSL socket on Unix). - - Raise SendfileNotAvailableError if the system does not support - sendfile syscall and fallback is False. - """ - if transport.is_closing(): - raise RuntimeError("Transport is closing") - mode = getattr(transport, '_sendfile_compatible', - constants._SendfileMode.UNSUPPORTED) - if mode is constants._SendfileMode.UNSUPPORTED: - raise RuntimeError( - f"sendfile is not supported for transport {transport!r}") - if mode is constants._SendfileMode.TRY_NATIVE: - try: - return await self._sendfile_native(transport, file, - offset, count) - except exceptions.SendfileNotAvailableError as exc: - if not fallback: - raise - - if not fallback: - raise RuntimeError( - f"fallback is disabled and native sendfile is not " - f"supported for transport {transport!r}") - - return await self._sendfile_fallback(transport, file, - offset, count) - - async def _sendfile_native(self, transp, file, offset, count): - raise exceptions.SendfileNotAvailableError( - "sendfile syscall is not supported") - - async def _sendfile_fallback(self, transp, file, offset, count): - if offset: - file.seek(offset) - blocksize = min(count, 16384) if count else 16384 - buf = bytearray(blocksize) - total_sent = 0 - proto = _SendfileFallbackProtocol(transp) - try: - while True: - if count: - blocksize = min(count - total_sent, blocksize) - if blocksize <= 0: - return total_sent - view = memoryview(buf)[:blocksize] - read = await self.run_in_executor(None, file.readinto, view) - if not read: - return total_sent # EOF - transp.write(view[:read]) - await proto.drain() - total_sent += read - finally: - if total_sent > 0 and hasattr(file, 'seek'): - file.seek(offset + total_sent) - await proto.restore() - - async def start_tls(self, transport, protocol, sslcontext, *, - server_side=False, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - """Upgrade transport to TLS. - - Return a new transport that *protocol* should start using - immediately. - """ - if ssl is None: - raise RuntimeError('Python ssl module is not available') - - if not isinstance(sslcontext, ssl.SSLContext): - raise TypeError( - f'sslcontext is expected to be an instance of ssl.SSLContext, ' - f'got {sslcontext!r}') - - if not getattr(transport, '_start_tls_compatible', False): - raise TypeError( - f'transport {transport!r} is not supported by start_tls()') - - waiter = self.create_future() - ssl_protocol = sslproto.SSLProtocol( - self, protocol, sslcontext, waiter, - server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout, - call_connection_made=False) - - # Pause early so that "ssl_protocol.data_received()" doesn't - # have a chance to get called before "ssl_protocol.connection_made()". - transport.pause_reading() - - # gh-142352: move buffered StreamReader data to SSLProtocol - if server_side: - from .streams import StreamReaderProtocol - if isinstance(protocol, StreamReaderProtocol): - stream_reader = getattr(protocol, '_stream_reader', None) - if stream_reader is not None: - buffer = stream_reader._buffer - if buffer: - ssl_protocol._incoming.write(buffer) - buffer.clear() - - transport.set_protocol(ssl_protocol) - conmade_cb = self.call_soon(ssl_protocol.connection_made, transport) - resume_cb = self.call_soon(transport.resume_reading) - - try: - await waiter - except BaseException: - transport.close() - conmade_cb.cancel() - resume_cb.cancel() - raise - - return ssl_protocol._app_transport - - async def create_datagram_endpoint(self, protocol_factory, - local_addr=None, remote_addr=None, *, - family=0, proto=0, flags=0, - reuse_port=None, - allow_broadcast=None, sock=None): - """Create datagram connection.""" - if sock is not None: - if sock.type == socket.SOCK_STREAM: - raise ValueError( - f'A datagram socket was expected, got {sock!r}') - if (local_addr or remote_addr or - family or proto or flags or - reuse_port or allow_broadcast): - # show the problematic kwargs in exception msg - opts = dict(local_addr=local_addr, remote_addr=remote_addr, - family=family, proto=proto, flags=flags, - reuse_port=reuse_port, - allow_broadcast=allow_broadcast) - problems = ', '.join(f'{k}={v}' for k, v in opts.items() if v) - raise ValueError( - f'socket modifier keyword arguments can not be used ' - f'when sock is specified. ({problems})') - sock.setblocking(False) - r_addr = None - else: - if not (local_addr or remote_addr): - if family == 0: - raise ValueError('unexpected address family') - addr_pairs_info = (((family, proto), (None, None)),) - elif hasattr(socket, 'AF_UNIX') and family == socket.AF_UNIX: - for addr in (local_addr, remote_addr): - if addr is not None and not isinstance(addr, str): - raise TypeError('string is expected') - - if local_addr and local_addr[0] not in (0, '\x00'): - try: - if stat.S_ISSOCK(os.stat(local_addr).st_mode): - os.remove(local_addr) - except FileNotFoundError: - pass - except OSError as err: - # Directory may have permissions only to create socket. - logger.error('Unable to check or remove stale UNIX ' - 'socket %r: %r', - local_addr, err) - - addr_pairs_info = (((family, proto), - (local_addr, remote_addr)), ) - else: - # join address by (family, protocol) - addr_infos = {} # Using order preserving dict - for idx, addr in ((0, local_addr), (1, remote_addr)): - if addr is not None: - if not (isinstance(addr, tuple) and len(addr) == 2): - raise TypeError('2-tuple is expected') - - infos = await self._ensure_resolved( - addr, family=family, type=socket.SOCK_DGRAM, - proto=proto, flags=flags, loop=self) - if not infos: - raise OSError('getaddrinfo() returned empty list') - - for fam, _, pro, _, address in infos: - key = (fam, pro) - if key not in addr_infos: - addr_infos[key] = [None, None] - addr_infos[key][idx] = address - - # each addr has to have info for each (family, proto) pair - addr_pairs_info = [ - (key, addr_pair) for key, addr_pair in addr_infos.items() - if not ((local_addr and addr_pair[0] is None) or - (remote_addr and addr_pair[1] is None))] - - if not addr_pairs_info: - raise ValueError('can not get address information') - - exceptions = [] - - for ((family, proto), - (local_address, remote_address)) in addr_pairs_info: - sock = None - r_addr = None - try: - sock = socket.socket( - family=family, type=socket.SOCK_DGRAM, proto=proto) - if reuse_port: - _set_reuseport(sock) - if allow_broadcast: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_BROADCAST, 1) - sock.setblocking(False) - - if local_addr: - sock.bind(local_address) - if remote_addr: - if not allow_broadcast: - await self.sock_connect(sock, remote_address) - r_addr = remote_address - except OSError as exc: - if sock is not None: - sock.close() - exceptions.append(exc) - except: - if sock is not None: - sock.close() - raise - else: - break - else: - raise exceptions[0] - - protocol = protocol_factory() - waiter = self.create_future() - transport = self._make_datagram_transport( - sock, protocol, r_addr, waiter) - if self._debug: - if local_addr: - logger.info("Datagram endpoint local_addr=%r remote_addr=%r " - "created: (%r, %r)", - local_addr, remote_addr, transport, protocol) - else: - logger.debug("Datagram endpoint remote_addr=%r created: " - "(%r, %r)", - remote_addr, transport, protocol) - - try: - await waiter - except: - transport.close() - raise - - return transport, protocol - - async def _ensure_resolved(self, address, *, - family=0, type=socket.SOCK_STREAM, - proto=0, flags=0, loop): - host, port = address[:2] - info = _ipaddr_info(host, port, family, type, proto, *address[2:]) - if info is not None: - # "host" is already a resolved IP. - return [info] - else: - return await loop.getaddrinfo(host, port, family=family, type=type, - proto=proto, flags=flags) - - async def _create_server_getaddrinfo(self, host, port, family, flags): - infos = await self._ensure_resolved((host, port), family=family, - type=socket.SOCK_STREAM, - flags=flags, loop=self) - if not infos: - raise OSError(f'getaddrinfo({host!r}) returned empty list') - return infos - - async def create_server( - self, protocol_factory, host=None, port=None, - *, - family=socket.AF_UNSPEC, - flags=socket.AI_PASSIVE, - sock=None, - backlog=100, - ssl=None, - reuse_address=None, - reuse_port=None, - keep_alive=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - start_serving=True): - """Create a TCP server. - - The host parameter can be a string, in that case the TCP server is - bound to host and port. - - The host parameter can also be a sequence of strings and in that case - the TCP server is bound to all hosts of the sequence. If a host - appears multiple times (possibly indirectly e.g. when hostnames - resolve to the same IP address), the server is only bound once to that - host. - - Return a Server object which can be used to stop the service. - - This method is a coroutine. - """ - if isinstance(ssl, bool): - raise TypeError('ssl argument must be an SSLContext or None') - - if ssl_handshake_timeout is not None and ssl is None: - raise ValueError( - 'ssl_handshake_timeout is only meaningful with ssl') - - if ssl_shutdown_timeout is not None and ssl is None: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - - if sock is not None: - _check_ssl_socket(sock) - - if host is not None or port is not None: - if sock is not None: - raise ValueError( - 'host/port and sock can not be specified at the same time') - - if reuse_address is None: - reuse_address = os.name == "posix" and sys.platform != "cygwin" - sockets = [] - if host == '': - hosts = [None] - elif (isinstance(host, str) or - not isinstance(host, collections.abc.Iterable)): - hosts = [host] - else: - hosts = host - - fs = [self._create_server_getaddrinfo(host, port, family=family, - flags=flags) - for host in hosts] - infos = await tasks.gather(*fs) - infos = set(itertools.chain.from_iterable(infos)) - - completed = False - try: - for res in infos: - af, socktype, proto, canonname, sa = res - try: - sock = socket.socket(af, socktype, proto) - except socket.error: - # Assume it's a bad family/type/protocol combination. - if self._debug: - logger.warning('create_server() failed to create ' - 'socket.socket(%r, %r, %r)', - af, socktype, proto, exc_info=True) - continue - sockets.append(sock) - if reuse_address: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_REUSEADDR, True) - # Since Linux 6.12.9, SO_REUSEPORT is not allowed - # on other address families than AF_INET/AF_INET6. - if reuse_port and af in (socket.AF_INET, socket.AF_INET6): - _set_reuseport(sock) - if keep_alive: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_KEEPALIVE, True) - # Disable IPv4/IPv6 dual stack support (enabled by - # default on Linux) which makes a single socket - # listen on both address families. - if (_HAS_IPv6 and - af == socket.AF_INET6 and - hasattr(socket, 'IPPROTO_IPV6')): - sock.setsockopt(socket.IPPROTO_IPV6, - socket.IPV6_V6ONLY, - True) - try: - sock.bind(sa) - except OSError as err: - msg = ('error while attempting ' - 'to bind on address %r: %s' - % (sa, str(err).lower())) - if err.errno == errno.EADDRNOTAVAIL: - # Assume the family is not enabled (bpo-30945) - sockets.pop() - sock.close() - if self._debug: - logger.warning(msg) - continue - raise OSError(err.errno, msg) from None - - if not sockets: - raise OSError('could not bind on any address out of %r' - % ([info[4] for info in infos],)) - - completed = True - finally: - if not completed: - for sock in sockets: - sock.close() - else: - if sock is None: - raise ValueError('Neither host/port nor sock were specified') - if sock.type != socket.SOCK_STREAM: - raise ValueError(f'A Stream Socket was expected, got {sock!r}') - sockets = [sock] - - for sock in sockets: - sock.setblocking(False) - - server = Server(self, sockets, protocol_factory, - ssl, backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) - if start_serving: - server._start_serving() - # Skip one loop iteration so that all 'loop.add_reader' - # go through. - await tasks.sleep(0) - - if self._debug: - logger.info("%r is serving", server) - return server - - async def connect_accepted_socket( - self, protocol_factory, sock, - *, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - if sock.type != socket.SOCK_STREAM: - raise ValueError(f'A Stream Socket was expected, got {sock!r}') - - if ssl_handshake_timeout is not None and not ssl: - raise ValueError( - 'ssl_handshake_timeout is only meaningful with ssl') - - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - - _check_ssl_socket(sock) - - transport, protocol = await self._create_connection_transport( - sock, protocol_factory, ssl, '', server_side=True, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - if self._debug: - # Get the socket from the transport because SSL transport closes - # the old socket and creates a new SSL socket - sock = transport.get_extra_info('socket') - logger.debug("%r handled: (%r, %r)", sock, transport, protocol) - return transport, protocol - - async def connect_read_pipe(self, protocol_factory, pipe): - protocol = protocol_factory() - waiter = self.create_future() - transport = self._make_read_pipe_transport(pipe, protocol, waiter) - - try: - await waiter - except: - transport.close() - raise - - if self._debug: - logger.debug('Read pipe %r connected: (%r, %r)', - pipe.fileno(), transport, protocol) - return transport, protocol - - async def connect_write_pipe(self, protocol_factory, pipe): - protocol = protocol_factory() - waiter = self.create_future() - transport = self._make_write_pipe_transport(pipe, protocol, waiter) - - try: - await waiter - except: - transport.close() - raise - - if self._debug: - logger.debug('Write pipe %r connected: (%r, %r)', - pipe.fileno(), transport, protocol) - return transport, protocol - - def _log_subprocess(self, msg, stdin, stdout, stderr): - info = [msg] - if stdin is not None: - info.append(f'stdin={_format_pipe(stdin)}') - if stdout is not None and stderr == subprocess.STDOUT: - info.append(f'stdout=stderr={_format_pipe(stdout)}') - else: - if stdout is not None: - info.append(f'stdout={_format_pipe(stdout)}') - if stderr is not None: - info.append(f'stderr={_format_pipe(stderr)}') - logger.debug(' '.join(info)) - - async def subprocess_shell(self, protocol_factory, cmd, *, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - universal_newlines=False, - shell=True, bufsize=0, - encoding=None, errors=None, text=None, - **kwargs): - if not isinstance(cmd, (bytes, str)): - raise ValueError("cmd must be a string") - if universal_newlines: - raise ValueError("universal_newlines must be False") - if not shell: - raise ValueError("shell must be True") - if bufsize != 0: - raise ValueError("bufsize must be 0") - if text: - raise ValueError("text must be False") - if encoding is not None: - raise ValueError("encoding must be None") - if errors is not None: - raise ValueError("errors must be None") - - protocol = protocol_factory() - debug_log = None - if self._debug: - # don't log parameters: they may contain sensitive information - # (password) and may be too long - debug_log = 'run shell command %r' % cmd - self._log_subprocess(debug_log, stdin, stdout, stderr) - transport = await self._make_subprocess_transport( - protocol, cmd, True, stdin, stdout, stderr, bufsize, **kwargs) - if self._debug and debug_log is not None: - logger.info('%s: %r', debug_log, transport) - return transport, protocol - - async def subprocess_exec(self, protocol_factory, program, *args, - stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, universal_newlines=False, - shell=False, bufsize=0, - encoding=None, errors=None, text=None, - **kwargs): - if universal_newlines: - raise ValueError("universal_newlines must be False") - if shell: - raise ValueError("shell must be False") - if bufsize != 0: - raise ValueError("bufsize must be 0") - if text: - raise ValueError("text must be False") - if encoding is not None: - raise ValueError("encoding must be None") - if errors is not None: - raise ValueError("errors must be None") - - popen_args = (program,) + args - protocol = protocol_factory() - debug_log = None - if self._debug: - # don't log parameters: they may contain sensitive information - # (password) and may be too long - debug_log = f'execute program {program!r}' - self._log_subprocess(debug_log, stdin, stdout, stderr) - transport = await self._make_subprocess_transport( - protocol, popen_args, False, stdin, stdout, stderr, - bufsize, **kwargs) - if self._debug and debug_log is not None: - logger.info('%s: %r', debug_log, transport) - return transport, protocol - - def get_exception_handler(self): - """Return an exception handler, or None if the default one is in use. - """ - return self._exception_handler - - def set_exception_handler(self, handler): - """Set handler as the new event loop exception handler. - - If handler is None, the default exception handler will - be set. - - If handler is a callable object, it should have a - signature matching '(loop, context)', where 'loop' - will be a reference to the active event loop, 'context' - will be a dict object (see `call_exception_handler()` - documentation for details about context). - """ - if handler is not None and not callable(handler): - raise TypeError(f'A callable object or None is expected, ' - f'got {handler!r}') - self._exception_handler = handler - - def default_exception_handler(self, context): - """Default exception handler. - - This is called when an exception occurs and no exception - handler is set, and can be called by a custom exception - handler that wants to defer to the default behavior. - - This default handler logs the error message and other - context-dependent information. In debug mode, a truncated - stack trace is also appended showing where the given object - (e.g. a handle or future or task) was created, if any. - - The context parameter has the same meaning as in - `call_exception_handler()`. - """ - message = context.get('message') - if not message: - message = 'Unhandled exception in event loop' - - exception = context.get('exception') - if exception is not None: - exc_info = (type(exception), exception, exception.__traceback__) - else: - exc_info = False - - if ('source_traceback' not in context and - self._current_handle is not None and - self._current_handle._source_traceback): - context['handle_traceback'] = \ - self._current_handle._source_traceback - - log_lines = [message] - for key in sorted(context): - if key in {'message', 'exception'}: - continue - value = context[key] - if key == 'source_traceback': - tb = ''.join(traceback.format_list(value)) - value = 'Object created at (most recent call last):\n' - value += tb.rstrip() - elif key == 'handle_traceback': - tb = ''.join(traceback.format_list(value)) - value = 'Handle created at (most recent call last):\n' - value += tb.rstrip() - else: - value = repr(value) - log_lines.append(f'{key}: {value}') - - logger.error('\n'.join(log_lines), exc_info=exc_info) - - def call_exception_handler(self, context): - """Call the current event loop's exception handler. - - The context argument is a dict containing the following keys: - - - 'message': Error message; - - 'exception' (optional): Exception object; - - 'future' (optional): Future instance; - - 'task' (optional): Task instance; - - 'handle' (optional): Handle instance; - - 'protocol' (optional): Protocol instance; - - 'transport' (optional): Transport instance; - - 'socket' (optional): Socket instance; - - 'source_traceback' (optional): Traceback of the source; - - 'handle_traceback' (optional): Traceback of the handle; - - 'asyncgen' (optional): Asynchronous generator that caused - the exception. - - New keys maybe introduced in the future. - - Note: do not overload this method in an event loop subclass. - For custom exception handling, use the - `set_exception_handler()` method. - """ - if self._exception_handler is None: - try: - self.default_exception_handler(context) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException: - # Second protection layer for unexpected errors - # in the default implementation, as well as for subclassed - # event loops with overloaded "default_exception_handler". - logger.error('Exception in default exception handler', - exc_info=True) - else: - try: - ctx = None - thing = context.get("task") - if thing is None: - # Even though Futures don't have a context, - # Task is a subclass of Future, - # and sometimes the 'future' key holds a Task. - thing = context.get("future") - if thing is None: - # Handles also have a context. - thing = context.get("handle") - if thing is not None and hasattr(thing, "get_context"): - ctx = thing.get_context() - if ctx is not None and hasattr(ctx, "run"): - ctx.run(self._exception_handler, self, context) - else: - self._exception_handler(self, context) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - # Exception in the user set custom exception handler. - try: - # Let's try default handler. - self.default_exception_handler({ - 'message': 'Unhandled error in exception handler', - 'exception': exc, - 'context': context, - }) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException: - # Guard 'default_exception_handler' in case it is - # overloaded. - logger.error('Exception in default exception handler ' - 'while handling an unexpected error ' - 'in custom exception handler', - exc_info=True) - - def _add_callback(self, handle): - """Add a Handle to _ready.""" - if not handle._cancelled: - self._ready.append(handle) - - def _add_callback_signalsafe(self, handle): - """Like _add_callback() but called from a signal handler.""" - self._add_callback(handle) - self._write_to_self() - - def _timer_handle_cancelled(self, handle): - """Notification that a TimerHandle has been cancelled.""" - if handle._scheduled: - self._timer_cancelled_count += 1 - - def _run_once(self): - """Run one full iteration of the event loop. - - This calls all currently ready callbacks, polls for I/O, - schedules the resulting callbacks, and finally schedules - 'call_later' callbacks. - """ - - sched_count = len(self._scheduled) - if (sched_count > _MIN_SCHEDULED_TIMER_HANDLES and - self._timer_cancelled_count / sched_count > - _MIN_CANCELLED_TIMER_HANDLES_FRACTION): - # Remove delayed calls that were cancelled if their number - # is too high - new_scheduled = [] - for handle in self._scheduled: - if handle._cancelled: - handle._scheduled = False - else: - new_scheduled.append(handle) - - heapq.heapify(new_scheduled) - self._scheduled = new_scheduled - self._timer_cancelled_count = 0 - else: - # Remove delayed calls that were cancelled from head of queue. - while self._scheduled and self._scheduled[0]._cancelled: - self._timer_cancelled_count -= 1 - handle = heapq.heappop(self._scheduled) - handle._scheduled = False - - timeout = None - if self._ready or self._stopping: - timeout = 0 - elif self._scheduled: - # Compute the desired timeout. - timeout = self._scheduled[0]._when - self.time() - if timeout > MAXIMUM_SELECT_TIMEOUT: - timeout = MAXIMUM_SELECT_TIMEOUT - elif timeout < 0: - timeout = 0 - - event_list = self._selector.select(timeout) - self._process_events(event_list) - # Needed to break cycles when an exception occurs. - event_list = None - - # Handle 'later' callbacks that are ready. - end_time = self.time() + self._clock_resolution - while self._scheduled: - handle = self._scheduled[0] - if handle._when >= end_time: - break - handle = heapq.heappop(self._scheduled) - handle._scheduled = False - self._ready.append(handle) - - # This is the only place where callbacks are actually *called*. - # All other places just add them to ready. - # Note: We run all currently scheduled callbacks, but not any - # callbacks scheduled by callbacks run this time around -- - # they will be run the next time (after another I/O poll). - # Use an idiom that is thread-safe without using locks. - ntodo = len(self._ready) - for i in range(ntodo): - handle = self._ready.popleft() - if handle._cancelled: - continue - if self._debug: - try: - self._current_handle = handle - t0 = self.time() - handle._run() - dt = self.time() - t0 - if dt >= self.slow_callback_duration: - logger.warning('Executing %s took %.3f seconds', - _format_handle(handle), dt) - finally: - self._current_handle = None - else: - handle._run() - handle = None # Needed to break cycles when an exception occurs. - - def _set_coroutine_origin_tracking(self, enabled): - if bool(enabled) == bool(self._coroutine_origin_tracking_enabled): - return - - if enabled: - self._coroutine_origin_tracking_saved_depth = ( - sys.get_coroutine_origin_tracking_depth()) - sys.set_coroutine_origin_tracking_depth( - constants.DEBUG_STACK_DEPTH) - else: - sys.set_coroutine_origin_tracking_depth( - self._coroutine_origin_tracking_saved_depth) - - self._coroutine_origin_tracking_enabled = enabled - - def get_debug(self): - return self._debug - - def set_debug(self, enabled): - self._debug = enabled - - if self.is_running(): - self.call_soon_threadsafe(self._set_coroutine_origin_tracking, enabled) diff --git a/Python314_4_x86_Template/Lib/asyncio/base_futures.py b/Python314_4_x86_Template/Lib/asyncio/base_futures.py deleted file mode 100644 index 7987963bd..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/base_futures.py +++ /dev/null @@ -1,67 +0,0 @@ -__all__ = () - -import reprlib - -from . import format_helpers - -# States for Future. -_PENDING = 'PENDING' -_CANCELLED = 'CANCELLED' -_FINISHED = 'FINISHED' - - -def isfuture(obj): - """Check for a Future. - - This returns True when obj is a Future instance or is advertising - itself as duck-type compatible by setting _asyncio_future_blocking. - See comment in Future for more details. - """ - return (hasattr(obj.__class__, '_asyncio_future_blocking') and - obj._asyncio_future_blocking is not None) - - -def _format_callbacks(cb): - """helper function for Future.__repr__""" - size = len(cb) - if not size: - cb = '' - - def format_cb(callback): - return format_helpers._format_callback_source(callback, ()) - - if size == 1: - cb = format_cb(cb[0][0]) - elif size == 2: - cb = '{}, {}'.format(format_cb(cb[0][0]), format_cb(cb[1][0])) - elif size > 2: - cb = '{}, <{} more>, {}'.format(format_cb(cb[0][0]), - size - 2, - format_cb(cb[-1][0])) - return f'cb=[{cb}]' - - -def _future_repr_info(future): - # (Future) -> str - """helper function for Future.__repr__""" - info = [future._state.lower()] - if future._state == _FINISHED: - if future._exception is not None: - info.append(f'exception={future._exception!r}') - else: - # use reprlib to limit the length of the output, especially - # for very long strings - result = reprlib.repr(future._result) - info.append(f'result={result}') - if future._callbacks: - info.append(_format_callbacks(future._callbacks)) - if future._source_traceback: - frame = future._source_traceback[-1] - info.append(f'created at {frame[0]}:{frame[1]}') - return info - - -@reprlib.recursive_repr() -def _future_repr(future): - info = ' '.join(_future_repr_info(future)) - return f'<{future.__class__.__name__} {info}>' diff --git a/Python314_4_x86_Template/Lib/asyncio/base_subprocess.py b/Python314_4_x86_Template/Lib/asyncio/base_subprocess.py deleted file mode 100644 index 224b18838..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/base_subprocess.py +++ /dev/null @@ -1,319 +0,0 @@ -import collections -import subprocess -import warnings -import os -import signal -import sys - -from . import protocols -from . import transports -from .log import logger - - -class BaseSubprocessTransport(transports.SubprocessTransport): - - def __init__(self, loop, protocol, args, shell, - stdin, stdout, stderr, bufsize, - waiter=None, extra=None, **kwargs): - super().__init__(extra) - self._closed = False - self._protocol = protocol - self._loop = loop - self._proc = None - self._pid = None - self._returncode = None - self._exit_waiters = [] - self._pending_calls = collections.deque() - self._pipes = {} - self._finished = False - self._pipes_connected = False - - if stdin == subprocess.PIPE: - self._pipes[0] = None - if stdout == subprocess.PIPE: - self._pipes[1] = None - if stderr == subprocess.PIPE: - self._pipes[2] = None - - # Create the child process: set the _proc attribute - try: - self._start(args=args, shell=shell, stdin=stdin, stdout=stdout, - stderr=stderr, bufsize=bufsize, **kwargs) - except: - self.close() - raise - - self._pid = self._proc.pid - self._extra['subprocess'] = self._proc - - if self._loop.get_debug(): - if isinstance(args, (bytes, str)): - program = args - else: - program = args[0] - logger.debug('process %r created: pid %s', - program, self._pid) - - self._loop.create_task(self._connect_pipes(waiter)) - - def __repr__(self): - info = [self.__class__.__name__] - if self._closed: - info.append('closed') - if self._pid is not None: - info.append(f'pid={self._pid}') - if self._returncode is not None: - info.append(f'returncode={self._returncode}') - elif self._pid is not None: - info.append('running') - else: - info.append('not started') - - stdin = self._pipes.get(0) - if stdin is not None: - info.append(f'stdin={stdin.pipe}') - - stdout = self._pipes.get(1) - stderr = self._pipes.get(2) - if stdout is not None and stderr is stdout: - info.append(f'stdout=stderr={stdout.pipe}') - else: - if stdout is not None: - info.append(f'stdout={stdout.pipe}') - if stderr is not None: - info.append(f'stderr={stderr.pipe}') - - return '<{}>'.format(' '.join(info)) - - def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs): - raise NotImplementedError - - def set_protocol(self, protocol): - self._protocol = protocol - - def get_protocol(self): - return self._protocol - - def is_closing(self): - return self._closed - - def close(self): - if self._closed: - return - self._closed = True - - for proto in self._pipes.values(): - if proto is None: - continue - # See gh-114177 - # skip closing the pipe if loop is already closed - # this can happen e.g. when loop is closed immediately after - # process is killed - if self._loop and not self._loop.is_closed(): - proto.pipe.close() - - if (self._proc is not None and - # has the child process finished? - self._returncode is None and - # the child process has finished, but the - # transport hasn't been notified yet? - self._proc.poll() is None): - - if self._loop.get_debug(): - logger.warning('Close running child process: kill %r', self) - - try: - self._proc.kill() - except (ProcessLookupError, PermissionError): - # the process may have already exited or may be running setuid - pass - - # Don't clear the _proc reference yet: _post_init() may still run - - def __del__(self, _warn=warnings.warn): - if not self._closed: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self.close() - - def get_pid(self): - return self._pid - - def get_returncode(self): - return self._returncode - - def get_pipe_transport(self, fd): - if fd in self._pipes: - return self._pipes[fd].pipe - else: - return None - - def _check_proc(self): - if self._proc is None: - raise ProcessLookupError() - - if sys.platform == 'win32': - def send_signal(self, signal): - self._check_proc() - self._proc.send_signal(signal) - - def terminate(self): - self._check_proc() - self._proc.terminate() - - def kill(self): - self._check_proc() - self._proc.kill() - else: - def send_signal(self, signal): - self._check_proc() - try: - os.kill(self._proc.pid, signal) - except ProcessLookupError: - pass - - def terminate(self): - self.send_signal(signal.SIGTERM) - - def kill(self): - self.send_signal(signal.SIGKILL) - - async def _connect_pipes(self, waiter): - try: - proc = self._proc - loop = self._loop - - if proc.stdin is not None: - _, pipe = await loop.connect_write_pipe( - lambda: WriteSubprocessPipeProto(self, 0), - proc.stdin) - self._pipes[0] = pipe - - if proc.stdout is not None: - _, pipe = await loop.connect_read_pipe( - lambda: ReadSubprocessPipeProto(self, 1), - proc.stdout) - self._pipes[1] = pipe - - if proc.stderr is not None: - _, pipe = await loop.connect_read_pipe( - lambda: ReadSubprocessPipeProto(self, 2), - proc.stderr) - self._pipes[2] = pipe - - assert self._pending_calls is not None - - loop.call_soon(self._protocol.connection_made, self) - for callback, data in self._pending_calls: - loop.call_soon(callback, *data) - self._pending_calls = None - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - if waiter is not None and not waiter.cancelled(): - waiter.set_exception(exc) - else: - if waiter is not None and not waiter.cancelled(): - waiter.set_result(None) - self._pipes_connected = True - - def _call(self, cb, *data): - if self._pending_calls is not None: - self._pending_calls.append((cb, data)) - else: - self._loop.call_soon(cb, *data) - - def _pipe_connection_lost(self, fd, exc): - self._call(self._protocol.pipe_connection_lost, fd, exc) - self._try_finish() - - def _pipe_data_received(self, fd, data): - self._call(self._protocol.pipe_data_received, fd, data) - - def _process_exited(self, returncode): - assert returncode is not None, returncode - assert self._returncode is None, self._returncode - if self._loop.get_debug(): - logger.info('%r exited with return code %r', self, returncode) - self._returncode = returncode - if self._proc.returncode is None: - # asyncio uses a child watcher: copy the status into the Popen - # object. On Python 3.6, it is required to avoid a ResourceWarning. - self._proc.returncode = returncode - self._call(self._protocol.process_exited) - - self._try_finish() - - async def _wait(self): - """Wait until the process exit and return the process return code. - - This method is a coroutine.""" - if self._returncode is not None: - return self._returncode - - waiter = self._loop.create_future() - self._exit_waiters.append(waiter) - return await waiter - - def _try_finish(self): - assert not self._finished - if self._returncode is None: - return - if not self._pipes_connected: - # self._pipes_connected can be False if not all pipes were connected - # because either the process failed to start or the self._connect_pipes task - # got cancelled. In this broken state we consider all pipes disconnected and - # to avoid hanging forever in self._wait as otherwise _exit_waiters - # would never be woken up, we wake them up here. - for waiter in self._exit_waiters: - if not waiter.done(): - waiter.set_result(self._returncode) - if all(p is not None and p.disconnected - for p in self._pipes.values()): - self._finished = True - self._call(self._call_connection_lost, None) - - def _call_connection_lost(self, exc): - try: - self._protocol.connection_lost(exc) - finally: - # wake up futures waiting for wait() - for waiter in self._exit_waiters: - if not waiter.done(): - waiter.set_result(self._returncode) - self._exit_waiters = None - self._loop = None - self._proc = None - self._protocol = None - - -class WriteSubprocessPipeProto(protocols.BaseProtocol): - - def __init__(self, proc, fd): - self.proc = proc - self.fd = fd - self.pipe = None - self.disconnected = False - - def connection_made(self, transport): - self.pipe = transport - - def __repr__(self): - return f'<{self.__class__.__name__} fd={self.fd} pipe={self.pipe!r}>' - - def connection_lost(self, exc): - self.disconnected = True - self.proc._pipe_connection_lost(self.fd, exc) - self.proc = None - - def pause_writing(self): - self.proc._protocol.pause_writing() - - def resume_writing(self): - self.proc._protocol.resume_writing() - - -class ReadSubprocessPipeProto(WriteSubprocessPipeProto, - protocols.Protocol): - - def data_received(self, data): - self.proc._pipe_data_received(self.fd, data) diff --git a/Python314_4_x86_Template/Lib/asyncio/base_tasks.py b/Python314_4_x86_Template/Lib/asyncio/base_tasks.py deleted file mode 100644 index c907b6834..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/base_tasks.py +++ /dev/null @@ -1,94 +0,0 @@ -import linecache -import reprlib -import traceback - -from . import base_futures -from . import coroutines - - -def _task_repr_info(task): - info = base_futures._future_repr_info(task) - - if task.cancelling() and not task.done(): - # replace status - info[0] = 'cancelling' - - info.insert(1, 'name=%r' % task.get_name()) - - if task._fut_waiter is not None: - info.insert(2, f'wait_for={task._fut_waiter!r}') - - if task._coro: - coro = coroutines._format_coroutine(task._coro) - info.insert(2, f'coro=<{coro}>') - - return info - - -@reprlib.recursive_repr() -def _task_repr(task): - info = ' '.join(_task_repr_info(task)) - return f'<{task.__class__.__name__} {info}>' - - -def _task_get_stack(task, limit): - frames = [] - if hasattr(task._coro, 'cr_frame'): - # case 1: 'async def' coroutines - f = task._coro.cr_frame - elif hasattr(task._coro, 'gi_frame'): - # case 2: legacy coroutines - f = task._coro.gi_frame - elif hasattr(task._coro, 'ag_frame'): - # case 3: async generators - f = task._coro.ag_frame - else: - # case 4: unknown objects - f = None - if f is not None: - while f is not None: - if limit is not None: - if limit <= 0: - break - limit -= 1 - frames.append(f) - f = f.f_back - frames.reverse() - elif task._exception is not None: - tb = task._exception.__traceback__ - while tb is not None: - if limit is not None: - if limit <= 0: - break - limit -= 1 - frames.append(tb.tb_frame) - tb = tb.tb_next - return frames - - -def _task_print_stack(task, limit, file): - extracted_list = [] - checked = set() - for f in task.get_stack(limit=limit): - lineno = f.f_lineno - co = f.f_code - filename = co.co_filename - name = co.co_name - if filename not in checked: - checked.add(filename) - linecache.checkcache(filename) - line = linecache.getline(filename, lineno, f.f_globals) - extracted_list.append((filename, lineno, name, line)) - - exc = task._exception - if not extracted_list: - print(f'No stack for {task!r}', file=file) - elif exc is not None: - print(f'Traceback for {task!r} (most recent call last):', file=file) - else: - print(f'Stack for {task!r} (most recent call last):', file=file) - - traceback.print_list(extracted_list, file=file) - if exc is not None: - for line in traceback.format_exception_only(exc.__class__, exc): - print(line, file=file, end='') diff --git a/Python314_4_x86_Template/Lib/asyncio/constants.py b/Python314_4_x86_Template/Lib/asyncio/constants.py deleted file mode 100644 index b60c1e423..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/constants.py +++ /dev/null @@ -1,41 +0,0 @@ -# Contains code from https://github.com/MagicStack/uvloop/tree/v0.16.0 -# SPDX-License-Identifier: PSF-2.0 AND (MIT OR Apache-2.0) -# SPDX-FileCopyrightText: Copyright (c) 2015-2021 MagicStack Inc. http://magic.io - -import enum - -# After the connection is lost, log warnings after this many write()s. -LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5 - -# Seconds to wait before retrying accept(). -ACCEPT_RETRY_DELAY = 1 - -# Number of stack entries to capture in debug mode. -# The larger the number, the slower the operation in debug mode -# (see extract_stack() in format_helpers.py). -DEBUG_STACK_DEPTH = 10 - -# Number of seconds to wait for SSL handshake to complete -# The default timeout matches that of Nginx. -SSL_HANDSHAKE_TIMEOUT = 60.0 - -# Number of seconds to wait for SSL shutdown to complete -# The default timeout mimics lingering_time -SSL_SHUTDOWN_TIMEOUT = 30.0 - -# Used in sendfile fallback code. We use fallback for platforms -# that don't support sendfile, or for TLS connections. -SENDFILE_FALLBACK_READBUFFER_SIZE = 1024 * 256 - -FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB -FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB - -# Default timeout for joining the threads in the threadpool -THREAD_JOIN_TIMEOUT = 300 - -# The enum should be here to break circular dependencies between -# base_events and sslproto -class _SendfileMode(enum.Enum): - UNSUPPORTED = enum.auto() - TRY_NATIVE = enum.auto() - FALLBACK = enum.auto() diff --git a/Python314_4_x86_Template/Lib/asyncio/coroutines.py b/Python314_4_x86_Template/Lib/asyncio/coroutines.py deleted file mode 100644 index a51319cb7..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/coroutines.py +++ /dev/null @@ -1,118 +0,0 @@ -__all__ = 'iscoroutinefunction', 'iscoroutine' - -import collections.abc -import inspect -import os -import sys -import types - - -def _is_debug_mode(): - # See: https://docs.python.org/3/library/asyncio-dev.html#asyncio-debug-mode. - return sys.flags.dev_mode or (not sys.flags.ignore_environment and - bool(os.environ.get('PYTHONASYNCIODEBUG'))) - - -# A marker for iscoroutinefunction. -_is_coroutine = object() - - -def iscoroutinefunction(func): - import warnings - """Return True if func is a decorated coroutine function.""" - warnings._deprecated("asyncio.iscoroutinefunction", - f"{warnings._DEPRECATED_MSG}; " - "use inspect.iscoroutinefunction() instead", - remove=(3,16)) - return _iscoroutinefunction(func) - - -def _iscoroutinefunction(func): - return (inspect.iscoroutinefunction(func) or - getattr(func, '_is_coroutine', None) is _is_coroutine) - - -# Prioritize native coroutine check to speed-up -# asyncio.iscoroutine. -_COROUTINE_TYPES = (types.CoroutineType, collections.abc.Coroutine) -_iscoroutine_typecache = set() - - -def iscoroutine(obj): - """Return True if obj is a coroutine object.""" - if type(obj) in _iscoroutine_typecache: - return True - - if isinstance(obj, _COROUTINE_TYPES): - # Just in case we don't want to cache more than 100 - # positive types. That shouldn't ever happen, unless - # someone stressing the system on purpose. - if len(_iscoroutine_typecache) < 100: - _iscoroutine_typecache.add(type(obj)) - return True - else: - return False - - -def _format_coroutine(coro): - assert iscoroutine(coro) - - def get_name(coro): - # Coroutines compiled with Cython sometimes don't have - # proper __qualname__ or __name__. While that is a bug - # in Cython, asyncio shouldn't crash with an AttributeError - # in its __repr__ functions. - if hasattr(coro, '__qualname__') and coro.__qualname__: - coro_name = coro.__qualname__ - elif hasattr(coro, '__name__') and coro.__name__: - coro_name = coro.__name__ - else: - # Stop masking Cython bugs, expose them in a friendly way. - coro_name = f'<{type(coro).__name__} without __name__>' - return f'{coro_name}()' - - def is_running(coro): - try: - return coro.cr_running - except AttributeError: - try: - return coro.gi_running - except AttributeError: - return False - - coro_code = None - if hasattr(coro, 'cr_code') and coro.cr_code: - coro_code = coro.cr_code - elif hasattr(coro, 'gi_code') and coro.gi_code: - coro_code = coro.gi_code - - coro_name = get_name(coro) - - if not coro_code: - # Built-in types might not have __qualname__ or __name__. - if is_running(coro): - return f'{coro_name} running' - else: - return coro_name - - coro_frame = None - if hasattr(coro, 'gi_frame') and coro.gi_frame: - coro_frame = coro.gi_frame - elif hasattr(coro, 'cr_frame') and coro.cr_frame: - coro_frame = coro.cr_frame - - # If Cython's coroutine has a fake code object without proper - # co_filename -- expose that. - filename = coro_code.co_filename or '<empty co_filename>' - - lineno = 0 - - if coro_frame is not None: - lineno = coro_frame.f_lineno - coro_repr = f'{coro_name} running at {filename}:{lineno}' - - else: - lineno = coro_code.co_firstlineno - coro_repr = f'{coro_name} done, defined at {filename}:{lineno}' - - return coro_repr diff --git a/Python314_4_x86_Template/Lib/asyncio/events.py b/Python314_4_x86_Template/Lib/asyncio/events.py deleted file mode 100644 index a7fb55982..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/events.py +++ /dev/null @@ -1,878 +0,0 @@ -"""Event loop and event loop policy.""" - -# Contains code from https://github.com/MagicStack/uvloop/tree/v0.16.0 -# SPDX-License-Identifier: PSF-2.0 AND (MIT OR Apache-2.0) -# SPDX-FileCopyrightText: Copyright (c) 2015-2021 MagicStack Inc. http://magic.io - -__all__ = ( - "AbstractEventLoop", - "AbstractServer", - "Handle", - "TimerHandle", - "get_event_loop_policy", - "set_event_loop_policy", - "get_event_loop", - "set_event_loop", - "new_event_loop", - "_set_running_loop", - "get_running_loop", - "_get_running_loop", -) - -import contextvars -import os -import signal -import socket -import subprocess -import sys -import threading -import warnings - -from . import format_helpers - - -class Handle: - """Object returned by callback registration methods.""" - - __slots__ = ('_callback', '_args', '_cancelled', '_loop', - '_source_traceback', '_repr', '__weakref__', - '_context') - - def __init__(self, callback, args, loop, context=None): - if context is None: - context = contextvars.copy_context() - self._context = context - self._loop = loop - self._callback = callback - self._args = args - self._cancelled = False - self._repr = None - if self._loop.get_debug(): - self._source_traceback = format_helpers.extract_stack( - sys._getframe(1)) - else: - self._source_traceback = None - - def _repr_info(self): - info = [self.__class__.__name__] - if self._cancelled: - info.append('cancelled') - if self._callback is not None: - info.append(format_helpers._format_callback_source( - self._callback, self._args, - debug=self._loop.get_debug())) - if self._source_traceback: - frame = self._source_traceback[-1] - info.append(f'created at {frame[0]}:{frame[1]}') - return info - - def __repr__(self): - if self._repr is not None: - return self._repr - info = self._repr_info() - return '<{}>'.format(' '.join(info)) - - def get_context(self): - return self._context - - def cancel(self): - if not self._cancelled: - self._cancelled = True - if self._loop.get_debug(): - # Keep a representation in debug mode to keep callback and - # parameters. For example, to log the warning - # "Executing <Handle...> took 2.5 second" - self._repr = repr(self) - self._callback = None - self._args = None - - def cancelled(self): - return self._cancelled - - def _run(self): - try: - self._context.run(self._callback, *self._args) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - cb = format_helpers._format_callback_source( - self._callback, self._args, - debug=self._loop.get_debug()) - msg = f'Exception in callback {cb}' - context = { - 'message': msg, - 'exception': exc, - 'handle': self, - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - self = None # Needed to break cycles when an exception occurs. - -# _ThreadSafeHandle is used for callbacks scheduled with call_soon_threadsafe -# and is thread safe unlike Handle which is not thread safe. -class _ThreadSafeHandle(Handle): - - __slots__ = ('_lock',) - - def __init__(self, callback, args, loop, context=None): - super().__init__(callback, args, loop, context) - self._lock = threading.RLock() - - def cancel(self): - with self._lock: - return super().cancel() - - def cancelled(self): - with self._lock: - return super().cancelled() - - def _run(self): - # The event loop checks for cancellation without holding the lock - # It is possible that the handle is cancelled after the check - # but before the callback is called so check it again after acquiring - # the lock and return without calling the callback if it is cancelled. - with self._lock: - if self._cancelled: - return - return super()._run() - - -class TimerHandle(Handle): - """Object returned by timed callback registration methods.""" - - __slots__ = ['_scheduled', '_when'] - - def __init__(self, when, callback, args, loop, context=None): - super().__init__(callback, args, loop, context) - if self._source_traceback: - del self._source_traceback[-1] - self._when = when - self._scheduled = False - - def _repr_info(self): - info = super()._repr_info() - pos = 2 if self._cancelled else 1 - info.insert(pos, f'when={self._when}') - return info - - def __hash__(self): - return hash(self._when) - - def __lt__(self, other): - if isinstance(other, TimerHandle): - return self._when < other._when - return NotImplemented - - def __le__(self, other): - if isinstance(other, TimerHandle): - return self._when < other._when or self.__eq__(other) - return NotImplemented - - def __gt__(self, other): - if isinstance(other, TimerHandle): - return self._when > other._when - return NotImplemented - - def __ge__(self, other): - if isinstance(other, TimerHandle): - return self._when > other._when or self.__eq__(other) - return NotImplemented - - def __eq__(self, other): - if isinstance(other, TimerHandle): - return (self._when == other._when and - self._callback == other._callback and - self._args == other._args and - self._cancelled == other._cancelled) - return NotImplemented - - def cancel(self): - if not self._cancelled: - self._loop._timer_handle_cancelled(self) - super().cancel() - - def when(self): - """Return a scheduled callback time. - - The time is an absolute timestamp, using the same time - reference as loop.time(). - """ - return self._when - - -class AbstractServer: - """Abstract server returned by create_server().""" - - def close(self): - """Stop serving. This leaves existing connections open.""" - raise NotImplementedError - - def close_clients(self): - """Close all active connections.""" - raise NotImplementedError - - def abort_clients(self): - """Close all active connections immediately.""" - raise NotImplementedError - - def get_loop(self): - """Get the event loop the Server object is attached to.""" - raise NotImplementedError - - def is_serving(self): - """Return True if the server is accepting connections.""" - raise NotImplementedError - - async def start_serving(self): - """Start accepting connections. - - This method is idempotent, so it can be called when - the server is already being serving. - """ - raise NotImplementedError - - async def serve_forever(self): - """Start accepting connections until the coroutine is cancelled. - - The server is closed when the coroutine is cancelled. - """ - raise NotImplementedError - - async def wait_closed(self): - """Coroutine to wait until service is closed.""" - raise NotImplementedError - - async def __aenter__(self): - return self - - async def __aexit__(self, *exc): - self.close() - await self.wait_closed() - - -class AbstractEventLoop: - """Abstract event loop.""" - - # Running and stopping the event loop. - - def run_forever(self): - """Run the event loop until stop() is called.""" - raise NotImplementedError - - def run_until_complete(self, future): - """Run the event loop until a Future is done. - - Return the Future's result, or raise its exception. - """ - raise NotImplementedError - - def stop(self): - """Stop the event loop as soon as reasonable. - - Exactly how soon that is may depend on the implementation, but - no more I/O callbacks should be scheduled. - """ - raise NotImplementedError - - def is_running(self): - """Return whether the event loop is currently running.""" - raise NotImplementedError - - def is_closed(self): - """Returns True if the event loop was closed.""" - raise NotImplementedError - - def close(self): - """Close the loop. - - The loop should not be running. - - This is idempotent and irreversible. - - No other methods should be called after this one. - """ - raise NotImplementedError - - async def shutdown_asyncgens(self): - """Shutdown all active asynchronous generators.""" - raise NotImplementedError - - async def shutdown_default_executor(self): - """Schedule the shutdown of the default executor.""" - raise NotImplementedError - - # Methods scheduling callbacks. All these return Handles. - - def _timer_handle_cancelled(self, handle): - """Notification that a TimerHandle has been cancelled.""" - raise NotImplementedError - - def call_soon(self, callback, *args, context=None): - return self.call_later(0, callback, *args, context=context) - - def call_later(self, delay, callback, *args, context=None): - raise NotImplementedError - - def call_at(self, when, callback, *args, context=None): - raise NotImplementedError - - def time(self): - raise NotImplementedError - - def create_future(self): - raise NotImplementedError - - # Method scheduling a coroutine object: create a task. - - def create_task(self, coro, **kwargs): - raise NotImplementedError - - # Methods for interacting with threads. - - def call_soon_threadsafe(self, callback, *args, context=None): - raise NotImplementedError - - def run_in_executor(self, executor, func, *args): - raise NotImplementedError - - def set_default_executor(self, executor): - raise NotImplementedError - - # Network I/O methods returning Futures. - - async def getaddrinfo(self, host, port, *, - family=0, type=0, proto=0, flags=0): - raise NotImplementedError - - async def getnameinfo(self, sockaddr, flags=0): - raise NotImplementedError - - async def create_connection( - self, protocol_factory, host=None, port=None, - *, ssl=None, family=0, proto=0, - flags=0, sock=None, local_addr=None, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - happy_eyeballs_delay=None, interleave=None): - raise NotImplementedError - - async def create_server( - self, protocol_factory, host=None, port=None, - *, family=socket.AF_UNSPEC, - flags=socket.AI_PASSIVE, sock=None, backlog=100, - ssl=None, reuse_address=None, reuse_port=None, - keep_alive=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - start_serving=True): - """A coroutine which creates a TCP server bound to host and port. - - The return value is a Server object which can be used to stop - the service. - - If host is an empty string or None all interfaces are assumed - and a list of multiple sockets will be returned (most likely - one for IPv4 and another one for IPv6). The host parameter can also be - a sequence (e.g. list) of hosts to bind to. - - family can be set to either AF_INET or AF_INET6 to force the - socket to use IPv4 or IPv6. If not set it will be determined - from host (defaults to AF_UNSPEC). - - flags is a bitmask for getaddrinfo(). - - sock can optionally be specified in order to use a preexisting - socket object. - - backlog is the maximum number of queued connections passed to - listen() (defaults to 100). - - ssl can be set to an SSLContext to enable SSL over the - accepted connections. - - reuse_address tells the kernel to reuse a local socket in - TIME_WAIT state, without waiting for its natural timeout to - expire. If not specified will automatically be set to True on - UNIX. - - reuse_port tells the kernel to allow this endpoint to be bound to - the same port as other existing endpoints are bound to, so long as - they all set this flag when being created. This option is not - supported on Windows. - - keep_alive set to True keeps connections active by enabling the - periodic transmission of messages. - - ssl_handshake_timeout is the time in seconds that an SSL server - will wait for completion of the SSL handshake before aborting the - connection. Default is 60s. - - ssl_shutdown_timeout is the time in seconds that an SSL server - will wait for completion of the SSL shutdown procedure - before aborting the connection. Default is 30s. - - start_serving set to True (default) causes the created server - to start accepting connections immediately. When set to False, - the user should await Server.start_serving() or Server.serve_forever() - to make the server to start accepting connections. - """ - raise NotImplementedError - - async def sendfile(self, transport, file, offset=0, count=None, - *, fallback=True): - """Send a file through a transport. - - Return an amount of sent bytes. - """ - raise NotImplementedError - - async def start_tls(self, transport, protocol, sslcontext, *, - server_side=False, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - """Upgrade a transport to TLS. - - Return a new transport that *protocol* should start using - immediately. - """ - raise NotImplementedError - - async def create_unix_connection( - self, protocol_factory, path=None, *, - ssl=None, sock=None, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - raise NotImplementedError - - async def create_unix_server( - self, protocol_factory, path=None, *, - sock=None, backlog=100, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - start_serving=True): - """A coroutine which creates a UNIX Domain Socket server. - - The return value is a Server object, which can be used to stop - the service. - - path is a str, representing a file system path to bind the - server socket to. - - sock can optionally be specified in order to use a preexisting - socket object. - - backlog is the maximum number of queued connections passed to - listen() (defaults to 100). - - ssl can be set to an SSLContext to enable SSL over the - accepted connections. - - ssl_handshake_timeout is the time in seconds that an SSL server - will wait for the SSL handshake to complete (defaults to 60s). - - ssl_shutdown_timeout is the time in seconds that an SSL server - will wait for the SSL shutdown to finish (defaults to 30s). - - start_serving set to True (default) causes the created server - to start accepting connections immediately. When set to False, - the user should await Server.start_serving() or Server.serve_forever() - to make the server to start accepting connections. - """ - raise NotImplementedError - - async def connect_accepted_socket( - self, protocol_factory, sock, - *, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - """Handle an accepted connection. - - This is used by servers that accept connections outside of - asyncio, but use asyncio to handle connections. - - This method is a coroutine. When completed, the coroutine - returns a (transport, protocol) pair. - """ - raise NotImplementedError - - async def create_datagram_endpoint(self, protocol_factory, - local_addr=None, remote_addr=None, *, - family=0, proto=0, flags=0, - reuse_address=None, reuse_port=None, - allow_broadcast=None, sock=None): - """A coroutine which creates a datagram endpoint. - - This method will try to establish the endpoint in the background. - When successful, the coroutine returns a (transport, protocol) pair. - - protocol_factory must be a callable returning a protocol instance. - - socket family AF_INET, socket.AF_INET6 or socket.AF_UNIX depending on - host (or family if specified), socket type SOCK_DGRAM. - - reuse_address tells the kernel to reuse a local socket in - TIME_WAIT state, without waiting for its natural timeout to - expire. If not specified it will automatically be set to True on - UNIX. - - reuse_port tells the kernel to allow this endpoint to be bound to - the same port as other existing endpoints are bound to, so long as - they all set this flag when being created. This option is not - supported on Windows and some UNIX's. If the - :py:data:`~socket.SO_REUSEPORT` constant is not defined then this - capability is unsupported. - - allow_broadcast tells the kernel to allow this endpoint to send - messages to the broadcast address. - - sock can optionally be specified in order to use a preexisting - socket object. - """ - raise NotImplementedError - - # Pipes and subprocesses. - - async def connect_read_pipe(self, protocol_factory, pipe): - """Register read pipe in event loop. Set the pipe to non-blocking mode. - - protocol_factory should instantiate object with Protocol interface. - pipe is a file-like object. - Return pair (transport, protocol), where transport supports the - ReadTransport interface.""" - # The reason to accept file-like object instead of just file descriptor - # is: we need to own pipe and close it at transport finishing - # Can got complicated errors if pass f.fileno(), - # close fd in pipe transport then close f and vice versa. - raise NotImplementedError - - async def connect_write_pipe(self, protocol_factory, pipe): - """Register write pipe in event loop. - - protocol_factory should instantiate object with BaseProtocol interface. - Pipe is file-like object already switched to nonblocking. - Return pair (transport, protocol), where transport support - WriteTransport interface.""" - # The reason to accept file-like object instead of just file descriptor - # is: we need to own pipe and close it at transport finishing - # Can got complicated errors if pass f.fileno(), - # close fd in pipe transport then close f and vice versa. - raise NotImplementedError - - async def subprocess_shell(self, protocol_factory, cmd, *, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - **kwargs): - raise NotImplementedError - - async def subprocess_exec(self, protocol_factory, *args, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - **kwargs): - raise NotImplementedError - - # Ready-based callback registration methods. - # The add_*() methods return None. - # The remove_*() methods return True if something was removed, - # False if there was nothing to delete. - - def add_reader(self, fd, callback, *args): - raise NotImplementedError - - def remove_reader(self, fd): - raise NotImplementedError - - def add_writer(self, fd, callback, *args): - raise NotImplementedError - - def remove_writer(self, fd): - raise NotImplementedError - - # Completion based I/O methods returning Futures. - - async def sock_recv(self, sock, nbytes): - raise NotImplementedError - - async def sock_recv_into(self, sock, buf): - raise NotImplementedError - - async def sock_recvfrom(self, sock, bufsize): - raise NotImplementedError - - async def sock_recvfrom_into(self, sock, buf, nbytes=0): - raise NotImplementedError - - async def sock_sendall(self, sock, data): - raise NotImplementedError - - async def sock_sendto(self, sock, data, address): - raise NotImplementedError - - async def sock_connect(self, sock, address): - raise NotImplementedError - - async def sock_accept(self, sock): - raise NotImplementedError - - async def sock_sendfile(self, sock, file, offset=0, count=None, - *, fallback=None): - raise NotImplementedError - - # Signal handling. - - def add_signal_handler(self, sig, callback, *args): - raise NotImplementedError - - def remove_signal_handler(self, sig): - raise NotImplementedError - - # Task factory. - - def set_task_factory(self, factory): - raise NotImplementedError - - def get_task_factory(self): - raise NotImplementedError - - # Error handlers. - - def get_exception_handler(self): - raise NotImplementedError - - def set_exception_handler(self, handler): - raise NotImplementedError - - def default_exception_handler(self, context): - raise NotImplementedError - - def call_exception_handler(self, context): - raise NotImplementedError - - # Debug flag management. - - def get_debug(self): - raise NotImplementedError - - def set_debug(self, enabled): - raise NotImplementedError - - -class _AbstractEventLoopPolicy: - """Abstract policy for accessing the event loop.""" - - def get_event_loop(self): - """Get the event loop for the current context. - - Returns an event loop object implementing the AbstractEventLoop interface, - or raises an exception in case no event loop has been set for the - current context and the current policy does not specify to create one. - - It should never return None.""" - raise NotImplementedError - - def set_event_loop(self, loop): - """Set the event loop for the current context to loop.""" - raise NotImplementedError - - def new_event_loop(self): - """Create and return a new event loop object according to this - policy's rules. If there's need to set this loop as the event loop for - the current context, set_event_loop must be called explicitly.""" - raise NotImplementedError - -class _BaseDefaultEventLoopPolicy(_AbstractEventLoopPolicy): - """Default policy implementation for accessing the event loop. - - In this policy, each thread has its own event loop. However, we - only automatically create an event loop by default for the main - thread; other threads by default have no event loop. - - Other policies may have different rules (e.g. a single global - event loop, or automatically creating an event loop per thread, or - using some other notion of context to which an event loop is - associated). - """ - - _loop_factory = None - - class _Local(threading.local): - _loop = None - - def __init__(self): - self._local = self._Local() - - def get_event_loop(self): - """Get the event loop for the current context. - - Returns an instance of EventLoop or raises an exception. - """ - if self._local._loop is None: - raise RuntimeError('There is no current event loop in thread %r.' - % threading.current_thread().name) - - return self._local._loop - - def set_event_loop(self, loop): - """Set the event loop.""" - if loop is not None and not isinstance(loop, AbstractEventLoop): - raise TypeError(f"loop must be an instance of AbstractEventLoop or None, not '{type(loop).__name__}'") - self._local._loop = loop - - def new_event_loop(self): - """Create a new event loop. - - You must call set_event_loop() to make this the current event - loop. - """ - return self._loop_factory() - - -# Event loop policy. The policy itself is always global, even if the -# policy's rules say that there is an event loop per thread (or other -# notion of context). The default policy is installed by the first -# call to get_event_loop_policy(). -_event_loop_policy = None - -# Lock for protecting the on-the-fly creation of the event loop policy. -_lock = threading.Lock() - - -# A TLS for the running event loop, used by _get_running_loop. -class _RunningLoop(threading.local): - loop_pid = (None, None) - - -_running_loop = _RunningLoop() - - -def get_running_loop(): - """Return the running event loop. Raise a RuntimeError if there is none. - - This function is thread-specific. - """ - # NOTE: this function is implemented in C (see _asynciomodule.c) - loop = _get_running_loop() - if loop is None: - raise RuntimeError('no running event loop') - return loop - - -def _get_running_loop(): - """Return the running event loop or None. - - This is a low-level function intended to be used by event loops. - This function is thread-specific. - """ - # NOTE: this function is implemented in C (see _asynciomodule.c) - running_loop, pid = _running_loop.loop_pid - if running_loop is not None and pid == os.getpid(): - return running_loop - - -def _set_running_loop(loop): - """Set the running event loop. - - This is a low-level function intended to be used by event loops. - This function is thread-specific. - """ - # NOTE: this function is implemented in C (see _asynciomodule.c) - _running_loop.loop_pid = (loop, os.getpid()) - - -def _init_event_loop_policy(): - global _event_loop_policy - with _lock: - if _event_loop_policy is None: # pragma: no branch - if sys.platform == 'win32': - from .windows_events import _DefaultEventLoopPolicy - else: - from .unix_events import _DefaultEventLoopPolicy - _event_loop_policy = _DefaultEventLoopPolicy() - - -def _get_event_loop_policy(): - """Get the current event loop policy.""" - if _event_loop_policy is None: - _init_event_loop_policy() - return _event_loop_policy - -def get_event_loop_policy(): - warnings._deprecated('asyncio.get_event_loop_policy', remove=(3, 16)) - return _get_event_loop_policy() - -def _set_event_loop_policy(policy): - """Set the current event loop policy. - - If policy is None, the default policy is restored.""" - global _event_loop_policy - if policy is not None and not isinstance(policy, _AbstractEventLoopPolicy): - raise TypeError(f"policy must be an instance of AbstractEventLoopPolicy or None, not '{type(policy).__name__}'") - _event_loop_policy = policy - -def set_event_loop_policy(policy): - warnings._deprecated('asyncio.set_event_loop_policy', remove=(3,16)) - _set_event_loop_policy(policy) - -def get_event_loop(): - """Return an asyncio event loop. - - When called from a coroutine or a callback (e.g. scheduled with call_soon - or similar API), this function will always return the running event loop. - - If there is no running event loop set, the function will return - the result of `get_event_loop_policy().get_event_loop()` call. - """ - # NOTE: this function is implemented in C (see _asynciomodule.c) - current_loop = _get_running_loop() - if current_loop is not None: - return current_loop - return _get_event_loop_policy().get_event_loop() - - -def set_event_loop(loop): - """Equivalent to calling get_event_loop_policy().set_event_loop(loop).""" - _get_event_loop_policy().set_event_loop(loop) - - -def new_event_loop(): - """Equivalent to calling get_event_loop_policy().new_event_loop().""" - return _get_event_loop_policy().new_event_loop() - - -# Alias pure-Python implementations for testing purposes. -_py__get_running_loop = _get_running_loop -_py__set_running_loop = _set_running_loop -_py_get_running_loop = get_running_loop -_py_get_event_loop = get_event_loop - - -try: - # get_event_loop() is one of the most frequently called - # functions in asyncio. Pure Python implementation is - # about 4 times slower than C-accelerated. - from _asyncio import (_get_running_loop, _set_running_loop, - get_running_loop, get_event_loop) -except ImportError: - pass -else: - # Alias C implementations for testing purposes. - _c__get_running_loop = _get_running_loop - _c__set_running_loop = _set_running_loop - _c_get_running_loop = get_running_loop - _c_get_event_loop = get_event_loop - - -if hasattr(os, 'fork'): - def on_fork(): - # Reset the loop and wakeupfd in the forked child process. - if _event_loop_policy is not None: - _event_loop_policy._local = _BaseDefaultEventLoopPolicy._Local() - _set_running_loop(None) - signal.set_wakeup_fd(-1) - - os.register_at_fork(after_in_child=on_fork) diff --git a/Python314_4_x86_Template/Lib/asyncio/exceptions.py b/Python314_4_x86_Template/Lib/asyncio/exceptions.py deleted file mode 100644 index 5ece595aa..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/exceptions.py +++ /dev/null @@ -1,62 +0,0 @@ -"""asyncio exceptions.""" - - -__all__ = ('BrokenBarrierError', - 'CancelledError', 'InvalidStateError', 'TimeoutError', - 'IncompleteReadError', 'LimitOverrunError', - 'SendfileNotAvailableError') - - -class CancelledError(BaseException): - """The Future or Task was cancelled.""" - - -TimeoutError = TimeoutError # make local alias for the standard exception - - -class InvalidStateError(Exception): - """The operation is not allowed in this state.""" - - -class SendfileNotAvailableError(RuntimeError): - """Sendfile syscall is not available. - - Raised if OS does not support sendfile syscall for given socket or - file type. - """ - - -class IncompleteReadError(EOFError): - """ - Incomplete read error. Attributes: - - - partial: read bytes string before the end of stream was reached - - expected: total number of expected bytes (or None if unknown) - """ - def __init__(self, partial, expected): - r_expected = 'undefined' if expected is None else repr(expected) - super().__init__(f'{len(partial)} bytes read on a total of ' - f'{r_expected} expected bytes') - self.partial = partial - self.expected = expected - - def __reduce__(self): - return type(self), (self.partial, self.expected) - - -class LimitOverrunError(Exception): - """Reached the buffer limit while looking for a separator. - - Attributes: - - consumed: total number of to be consumed bytes. - """ - def __init__(self, message, consumed): - super().__init__(message) - self.consumed = consumed - - def __reduce__(self): - return type(self), (self.args[0], self.consumed) - - -class BrokenBarrierError(RuntimeError): - """Barrier is broken by barrier.abort() call.""" diff --git a/Python314_4_x86_Template/Lib/asyncio/format_helpers.py b/Python314_4_x86_Template/Lib/asyncio/format_helpers.py deleted file mode 100644 index 93737b770..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/format_helpers.py +++ /dev/null @@ -1,84 +0,0 @@ -import functools -import inspect -import reprlib -import sys -import traceback - -from . import constants - - -def _get_function_source(func): - func = inspect.unwrap(func) - if inspect.isfunction(func): - code = func.__code__ - return (code.co_filename, code.co_firstlineno) - if isinstance(func, functools.partial): - return _get_function_source(func.func) - if isinstance(func, functools.partialmethod): - return _get_function_source(func.func) - return None - - -def _format_callback_source(func, args, *, debug=False): - func_repr = _format_callback(func, args, None, debug=debug) - source = _get_function_source(func) - if source: - func_repr += f' at {source[0]}:{source[1]}' - return func_repr - - -def _format_args_and_kwargs(args, kwargs, *, debug=False): - """Format function arguments and keyword arguments. - - Special case for a single parameter: ('hello',) is formatted as ('hello'). - - Note that this function only returns argument details when - debug=True is specified, as arguments may contain sensitive - information. - """ - if not debug: - return '()' - - # use reprlib to limit the length of the output - items = [] - if args: - items.extend(reprlib.repr(arg) for arg in args) - if kwargs: - items.extend(f'{k}={reprlib.repr(v)}' for k, v in kwargs.items()) - return '({})'.format(', '.join(items)) - - -def _format_callback(func, args, kwargs, *, debug=False, suffix=''): - if isinstance(func, functools.partial): - suffix = _format_args_and_kwargs(args, kwargs, debug=debug) + suffix - return _format_callback(func.func, func.args, func.keywords, - debug=debug, suffix=suffix) - - if hasattr(func, '__qualname__') and func.__qualname__: - func_repr = func.__qualname__ - elif hasattr(func, '__name__') and func.__name__: - func_repr = func.__name__ - else: - func_repr = repr(func) - - func_repr += _format_args_and_kwargs(args, kwargs, debug=debug) - if suffix: - func_repr += suffix - return func_repr - - -def extract_stack(f=None, limit=None): - """Replacement for traceback.extract_stack() that only does the - necessary work for asyncio debug mode. - """ - if f is None: - f = sys._getframe().f_back - if limit is None: - # Limit the amount of work to a reasonable amount, as extract_stack() - # can be called for each coroutine and future in debug mode. - limit = constants.DEBUG_STACK_DEPTH - stack = traceback.StackSummary.extract(traceback.walk_stack(f), - limit=limit, - lookup_lines=False) - stack.reverse() - return stack diff --git a/Python314_4_x86_Template/Lib/asyncio/futures.py b/Python314_4_x86_Template/Lib/asyncio/futures.py deleted file mode 100644 index e8a99556b..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/futures.py +++ /dev/null @@ -1,481 +0,0 @@ -"""A Future class similar to the one in PEP 3148.""" - -__all__ = ( - 'Future', 'wrap_future', 'isfuture', - 'future_add_to_awaited_by', 'future_discard_from_awaited_by', -) - -import concurrent.futures -import contextvars -import logging -import sys -from types import GenericAlias - -from . import base_futures -from . import events -from . import exceptions -from . import format_helpers - - -isfuture = base_futures.isfuture - - -_PENDING = base_futures._PENDING -_CANCELLED = base_futures._CANCELLED -_FINISHED = base_futures._FINISHED - - -STACK_DEBUG = logging.DEBUG - 1 # heavy-duty debugging - - -class Future: - """This class is *almost* compatible with concurrent.futures.Future. - - Differences: - - - This class is not thread-safe. - - - result() and exception() do not take a timeout argument and - raise an exception when the future isn't done yet. - - - Callbacks registered with add_done_callback() are always called - via the event loop's call_soon(). - - - This class is not compatible with the wait() and as_completed() - methods in the concurrent.futures package. - - """ - - # Class variables serving as defaults for instance variables. - _state = _PENDING - _result = None - _exception = None - _loop = None - _source_traceback = None - _cancel_message = None - # A saved CancelledError for later chaining as an exception context. - _cancelled_exc = None - - # This field is used for a dual purpose: - # - Its presence is a marker to declare that a class implements - # the Future protocol (i.e. is intended to be duck-type compatible). - # The value must also be not-None, to enable a subclass to declare - # that it is not compatible by setting this to None. - # - It is set by __iter__() below so that Task.__step() can tell - # the difference between - # `await Future()` or `yield from Future()` (correct) vs. - # `yield Future()` (incorrect). - _asyncio_future_blocking = False - - # Used by the capture_call_stack() API. - __asyncio_awaited_by = None - - __log_traceback = False - - def __init__(self, *, loop=None): - """Initialize the future. - - The optional event_loop argument allows explicitly setting the event - loop object used by the future. If it's not provided, the future uses - the default event loop. - """ - if loop is None: - self._loop = events.get_event_loop() - else: - self._loop = loop - self._callbacks = [] - if self._loop.get_debug(): - self._source_traceback = format_helpers.extract_stack( - sys._getframe(1)) - - def __repr__(self): - return base_futures._future_repr(self) - - def __del__(self): - if not self.__log_traceback: - # set_exception() was not called, or result() or exception() - # has consumed the exception - return - exc = self._exception - context = { - 'message': - f'{self.__class__.__name__} exception was never retrieved', - 'exception': exc, - 'future': self, - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - - __class_getitem__ = classmethod(GenericAlias) - - @property - def _log_traceback(self): - return self.__log_traceback - - @_log_traceback.setter - def _log_traceback(self, val): - if val: - raise ValueError('_log_traceback can only be set to False') - self.__log_traceback = False - - @property - def _asyncio_awaited_by(self): - if self.__asyncio_awaited_by is None: - return None - return frozenset(self.__asyncio_awaited_by) - - def get_loop(self): - """Return the event loop the Future is bound to.""" - loop = self._loop - if loop is None: - raise RuntimeError("Future object is not initialized.") - return loop - - def _make_cancelled_error(self): - """Create the CancelledError to raise if the Future is cancelled. - - This should only be called once when handling a cancellation since - it erases the saved context exception value. - """ - if self._cancelled_exc is not None: - exc = self._cancelled_exc - self._cancelled_exc = None - return exc - - if self._cancel_message is None: - exc = exceptions.CancelledError() - else: - exc = exceptions.CancelledError(self._cancel_message) - return exc - - def cancel(self, msg=None): - """Cancel the future and schedule callbacks. - - If the future is already done or cancelled, return False. Otherwise, - change the future's state to cancelled, schedule the callbacks and - return True. - """ - self.__log_traceback = False - if self._state != _PENDING: - return False - self._state = _CANCELLED - self._cancel_message = msg - self.__schedule_callbacks() - return True - - def __schedule_callbacks(self): - """Internal: Ask the event loop to call all callbacks. - - The callbacks are scheduled to be called as soon as possible. Also - clears the callback list. - """ - callbacks = self._callbacks[:] - if not callbacks: - return - - self._callbacks[:] = [] - for callback, ctx in callbacks: - self._loop.call_soon(callback, self, context=ctx) - - def cancelled(self): - """Return True if the future was cancelled.""" - return self._state == _CANCELLED - - # Don't implement running(); see http://bugs.python.org/issue18699 - - def done(self): - """Return True if the future is done. - - Done means either that a result / exception are available, or that the - future was cancelled. - """ - return self._state != _PENDING - - def result(self): - """Return the result this future represents. - - If the future has been cancelled, raises CancelledError. If the - future's result isn't yet available, raises InvalidStateError. If - the future is done and has an exception set, this exception is raised. - """ - if self._state == _CANCELLED: - raise self._make_cancelled_error() - if self._state != _FINISHED: - raise exceptions.InvalidStateError('Result is not ready.') - self.__log_traceback = False - if self._exception is not None: - raise self._exception.with_traceback(self._exception_tb) - return self._result - - def exception(self): - """Return the exception that was set on this future. - - The exception (or None if no exception was set) is returned only if - the future is done. If the future has been cancelled, raises - CancelledError. If the future isn't done yet, raises - InvalidStateError. - """ - if self._state == _CANCELLED: - raise self._make_cancelled_error() - if self._state != _FINISHED: - raise exceptions.InvalidStateError('Exception is not set.') - self.__log_traceback = False - return self._exception - - def add_done_callback(self, fn, *, context=None): - """Add a callback to be run when the future becomes done. - - The callback is called with a single argument - the future object. If - the future is already done when this is called, the callback is - scheduled with call_soon. - """ - if self._state != _PENDING: - self._loop.call_soon(fn, self, context=context) - else: - if context is None: - context = contextvars.copy_context() - self._callbacks.append((fn, context)) - - # New method not in PEP 3148. - - def remove_done_callback(self, fn): - """Remove all instances of a callback from the "call when done" list. - - Returns the number of callbacks removed. - """ - filtered_callbacks = [(f, ctx) - for (f, ctx) in self._callbacks - if f != fn] - removed_count = len(self._callbacks) - len(filtered_callbacks) - if removed_count: - self._callbacks[:] = filtered_callbacks - return removed_count - - # So-called internal methods (note: no set_running_or_notify_cancel()). - - def set_result(self, result): - """Mark the future done and set its result. - - If the future is already done when this method is called, raises - InvalidStateError. - """ - if self._state != _PENDING: - raise exceptions.InvalidStateError(f'{self._state}: {self!r}') - self._result = result - self._state = _FINISHED - self.__schedule_callbacks() - - def set_exception(self, exception): - """Mark the future done and set an exception. - - If the future is already done when this method is called, raises - InvalidStateError. - """ - if self._state != _PENDING: - raise exceptions.InvalidStateError(f'{self._state}: {self!r}') - if isinstance(exception, type): - exception = exception() - if isinstance(exception, StopIteration): - new_exc = RuntimeError("StopIteration interacts badly with " - "generators and cannot be raised into a " - "Future") - new_exc.__cause__ = exception - new_exc.__context__ = exception - exception = new_exc - self._exception = exception - self._exception_tb = exception.__traceback__ - self._state = _FINISHED - self.__schedule_callbacks() - self.__log_traceback = True - - def __await__(self): - if not self.done(): - self._asyncio_future_blocking = True - yield self # This tells Task to wait for completion. - if not self.done(): - raise RuntimeError("await wasn't used with future") - return self.result() # May raise too. - - __iter__ = __await__ # make compatible with 'yield from'. - - -# Needed for testing purposes. -_PyFuture = Future - - -def _get_loop(fut): - # Tries to call Future.get_loop() if it's available. - # Otherwise fallbacks to using the old '_loop' property. - try: - get_loop = fut.get_loop - except AttributeError: - pass - else: - return get_loop() - return fut._loop - - -def _set_result_unless_cancelled(fut, result): - """Helper setting the result only if the future was not cancelled.""" - if fut.cancelled(): - return - fut.set_result(result) - - -def _convert_future_exc(exc): - exc_class = type(exc) - if exc_class is concurrent.futures.CancelledError: - return exceptions.CancelledError(*exc.args).with_traceback(exc.__traceback__) - elif exc_class is concurrent.futures.InvalidStateError: - return exceptions.InvalidStateError(*exc.args).with_traceback(exc.__traceback__) - else: - return exc - - -def _set_concurrent_future_state(concurrent, source): - """Copy state from a future to a concurrent.futures.Future.""" - assert source.done() - if source.cancelled(): - concurrent.cancel() - if not concurrent.set_running_or_notify_cancel(): - return - exception = source.exception() - if exception is not None: - concurrent.set_exception(_convert_future_exc(exception)) - else: - result = source.result() - concurrent.set_result(result) - - -def _copy_future_state(source, dest): - """Internal helper to copy state from another Future. - - The other Future may be a concurrent.futures.Future. - """ - assert source.done() - if dest.cancelled(): - return - assert not dest.done() - if source.cancelled(): - dest.cancel() - else: - exception = source.exception() - if exception is not None: - dest.set_exception(_convert_future_exc(exception)) - else: - result = source.result() - dest.set_result(result) - - -def _chain_future(source, destination): - """Chain two futures so that when one completes, so does the other. - - The result (or exception) of source will be copied to destination. - If destination is cancelled, source gets cancelled too. - Compatible with both asyncio.Future and concurrent.futures.Future. - """ - if not isfuture(source) and not isinstance(source, - concurrent.futures.Future): - raise TypeError('A future is required for source argument') - if not isfuture(destination) and not isinstance(destination, - concurrent.futures.Future): - raise TypeError('A future is required for destination argument') - source_loop = _get_loop(source) if isfuture(source) else None - dest_loop = _get_loop(destination) if isfuture(destination) else None - - def _set_state(future, other): - if isfuture(future): - _copy_future_state(other, future) - else: - _set_concurrent_future_state(future, other) - - def _call_check_cancel(destination): - if destination.cancelled(): - if source_loop is None or source_loop is events._get_running_loop(): - source.cancel() - else: - source_loop.call_soon_threadsafe(source.cancel) - - def _call_set_state(source): - if (destination.cancelled() and - dest_loop is not None and dest_loop.is_closed()): - return - if dest_loop is None or dest_loop is events._get_running_loop(): - _set_state(destination, source) - else: - if dest_loop.is_closed(): - return - dest_loop.call_soon_threadsafe(_set_state, destination, source) - - destination.add_done_callback(_call_check_cancel) - source.add_done_callback(_call_set_state) - - -def wrap_future(future, *, loop=None): - """Wrap concurrent.futures.Future object.""" - if isfuture(future): - return future - assert isinstance(future, concurrent.futures.Future), \ - f'concurrent.futures.Future is expected, got {future!r}' - if loop is None: - loop = events.get_event_loop() - new_future = loop.create_future() - _chain_future(future, new_future) - return new_future - - -def future_add_to_awaited_by(fut, waiter, /): - """Record that `fut` is awaited on by `waiter`.""" - # For the sake of keeping the implementation minimal and assuming - # that most of asyncio users use the built-in Futures and Tasks - # (or their subclasses), we only support native Future objects - # and their subclasses. - # - # Longer version: tracking requires storing the caller-callee - # dependency somewhere. One obvious choice is to store that - # information right in the future itself in a dedicated attribute. - # This means that we'd have to require all duck-type compatible - # futures to implement a specific attribute used by asyncio for - # the book keeping. Another solution would be to store that in - # a global dictionary. The downside here is that that would create - # strong references and any scenario where the "add" call isn't - # followed by a "discard" call would lead to a memory leak. - # Using WeakDict would resolve that issue, but would complicate - # the C code (_asynciomodule.c). The bottom line here is that - # it's not clear that all this work would be worth the effort. - # - # Note that there's an accelerated version of this function - # shadowing this implementation later in this file. - if isinstance(fut, _PyFuture) and isinstance(waiter, _PyFuture): - if fut._Future__asyncio_awaited_by is None: - fut._Future__asyncio_awaited_by = set() - fut._Future__asyncio_awaited_by.add(waiter) - - -def future_discard_from_awaited_by(fut, waiter, /): - """Record that `fut` is no longer awaited on by `waiter`.""" - # See the comment in "future_add_to_awaited_by()" body for - # details on implementation. - # - # Note that there's an accelerated version of this function - # shadowing this implementation later in this file. - if isinstance(fut, _PyFuture) and isinstance(waiter, _PyFuture): - if fut._Future__asyncio_awaited_by is not None: - fut._Future__asyncio_awaited_by.discard(waiter) - - -_py_future_add_to_awaited_by = future_add_to_awaited_by -_py_future_discard_from_awaited_by = future_discard_from_awaited_by - -try: - import _asyncio -except ImportError: - pass -else: - # _CFuture is needed for tests. - Future = _CFuture = _asyncio.Future - future_add_to_awaited_by = _asyncio.future_add_to_awaited_by - future_discard_from_awaited_by = _asyncio.future_discard_from_awaited_by - _c_future_add_to_awaited_by = future_add_to_awaited_by - _c_future_discard_from_awaited_by = future_discard_from_awaited_by diff --git a/Python314_4_x86_Template/Lib/asyncio/graph.py b/Python314_4_x86_Template/Lib/asyncio/graph.py deleted file mode 100644 index b5bfeb163..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/graph.py +++ /dev/null @@ -1,276 +0,0 @@ -"""Introspection utils for tasks call graphs.""" - -import dataclasses -import io -import sys -import types - -from . import events -from . import futures -from . import tasks - -__all__ = ( - 'capture_call_graph', - 'format_call_graph', - 'print_call_graph', - 'FrameCallGraphEntry', - 'FutureCallGraph', -) - -# Sadly, we can't re-use the traceback module's datastructures as those -# are tailored for error reporting, whereas we need to represent an -# async call graph. -# -# Going with pretty verbose names as we'd like to export them to the -# top level asyncio namespace, and want to avoid future name clashes. - - -@dataclasses.dataclass(frozen=True, slots=True) -class FrameCallGraphEntry: - frame: types.FrameType - - -@dataclasses.dataclass(frozen=True, slots=True) -class FutureCallGraph: - future: futures.Future - call_stack: tuple["FrameCallGraphEntry", ...] - awaited_by: tuple["FutureCallGraph", ...] - - -def _build_graph_for_future( - future: futures.Future, - *, - limit: int | None = None, -) -> FutureCallGraph: - if not isinstance(future, futures.Future): - raise TypeError( - f"{future!r} object does not appear to be compatible " - f"with asyncio.Future" - ) - - coro = None - if get_coro := getattr(future, 'get_coro', None): - coro = get_coro() if limit != 0 else None - - st: list[FrameCallGraphEntry] = [] - awaited_by: list[FutureCallGraph] = [] - - while coro is not None: - if hasattr(coro, 'cr_await'): - # A native coroutine or duck-type compatible iterator - st.append(FrameCallGraphEntry(coro.cr_frame)) - coro = coro.cr_await - elif hasattr(coro, 'ag_await'): - # A native async generator or duck-type compatible iterator - st.append(FrameCallGraphEntry(coro.cr_frame)) - coro = coro.ag_await - else: - break - - if future._asyncio_awaited_by: - for parent in future._asyncio_awaited_by: - awaited_by.append(_build_graph_for_future(parent, limit=limit)) - - if limit is not None: - if limit > 0: - st = st[:limit] - elif limit < 0: - st = st[limit:] - st.reverse() - return FutureCallGraph(future, tuple(st), tuple(awaited_by)) - - -def capture_call_graph( - future: futures.Future | None = None, - /, - *, - depth: int = 1, - limit: int | None = None, -) -> FutureCallGraph | None: - """Capture the async call graph for the current task or the provided Future. - - The graph is represented with three data structures: - - * FutureCallGraph(future, call_stack, awaited_by) - - Where 'future' is an instance of asyncio.Future or asyncio.Task. - - 'call_stack' is a tuple of FrameGraphEntry objects. - - 'awaited_by' is a tuple of FutureCallGraph objects. - - * FrameCallGraphEntry(frame) - - Where 'frame' is a frame object of a regular Python function - in the call stack. - - Receives an optional 'future' argument. If not passed, - the current task will be used. If there's no current task, the function - returns None. - - If "capture_call_graph()" is introspecting *the current task*, the - optional keyword-only 'depth' argument can be used to skip the specified - number of frames from top of the stack. - - If the optional keyword-only 'limit' argument is provided, each call stack - in the resulting graph is truncated to include at most ``abs(limit)`` - entries. If 'limit' is positive, the entries left are the closest to - the invocation point. If 'limit' is negative, the topmost entries are - left. If 'limit' is omitted or None, all entries are present. - If 'limit' is 0, the call stack is not captured at all, only - "awaited by" information is present. - """ - - loop = events._get_running_loop() - - if future is not None: - # Check if we're in a context of a running event loop; - # if yes - check if the passed future is the currently - # running task or not. - if loop is None or future is not tasks.current_task(loop=loop): - return _build_graph_for_future(future, limit=limit) - # else: future is the current task, move on. - else: - if loop is None: - raise RuntimeError( - 'capture_call_graph() is called outside of a running ' - 'event loop and no *future* to introspect was provided') - future = tasks.current_task(loop=loop) - - if future is None: - # This isn't a generic call stack introspection utility. If we - # can't determine the current task and none was provided, we - # just return. - return None - - if not isinstance(future, futures.Future): - raise TypeError( - f"{future!r} object does not appear to be compatible " - f"with asyncio.Future" - ) - - call_stack: list[FrameCallGraphEntry] = [] - - f = sys._getframe(depth) if limit != 0 else None - try: - while f is not None: - is_async = f.f_generator is not None - call_stack.append(FrameCallGraphEntry(f)) - - if is_async: - if f.f_back is not None and f.f_back.f_generator is None: - # We've reached the bottom of the coroutine stack, which - # must be the Task that runs it. - break - - f = f.f_back - finally: - del f - - awaited_by = [] - if future._asyncio_awaited_by: - for parent in future._asyncio_awaited_by: - awaited_by.append(_build_graph_for_future(parent, limit=limit)) - - if limit is not None: - limit *= -1 - if limit > 0: - call_stack = call_stack[:limit] - elif limit < 0: - call_stack = call_stack[limit:] - - return FutureCallGraph(future, tuple(call_stack), tuple(awaited_by)) - - -def format_call_graph( - future: futures.Future | None = None, - /, - *, - depth: int = 1, - limit: int | None = None, -) -> str: - """Return the async call graph as a string for `future`. - - If `future` is not provided, format the call graph for the current task. - """ - - def render_level(st: FutureCallGraph, buf: list[str], level: int) -> None: - def add_line(line: str) -> None: - buf.append(level * ' ' + line) - - if isinstance(st.future, tasks.Task): - add_line( - f'* Task(name={st.future.get_name()!r}, id={id(st.future):#x})' - ) - else: - add_line( - f'* Future(id={id(st.future):#x})' - ) - - if st.call_stack: - add_line( - f' + Call stack:' - ) - for ste in st.call_stack: - f = ste.frame - - if f.f_generator is None: - f = ste.frame - add_line( - f' | File {f.f_code.co_filename!r},' - f' line {f.f_lineno}, in' - f' {f.f_code.co_qualname}()' - ) - else: - c = f.f_generator - - try: - f = c.cr_frame - code = c.cr_code - tag = 'async' - except AttributeError: - try: - f = c.ag_frame - code = c.ag_code - tag = 'async generator' - except AttributeError: - f = c.gi_frame - code = c.gi_code - tag = 'generator' - - add_line( - f' | File {f.f_code.co_filename!r},' - f' line {f.f_lineno}, in' - f' {tag} {code.co_qualname}()' - ) - - if st.awaited_by: - add_line( - f' + Awaited by:' - ) - for fut in st.awaited_by: - render_level(fut, buf, level + 1) - - graph = capture_call_graph(future, depth=depth + 1, limit=limit) - if graph is None: - return "" - - buf: list[str] = [] - try: - render_level(graph, buf, 0) - finally: - # 'graph' has references to frames so we should - # make sure it's GC'ed as soon as we don't need it. - del graph - return '\n'.join(buf) - -def print_call_graph( - future: futures.Future | None = None, - /, - *, - file: io.Writer[str] | None = None, - depth: int = 1, - limit: int | None = None, -) -> None: - """Print the async call graph for the current task or the provided Future.""" - print(format_call_graph(future, depth=depth, limit=limit), file=file) diff --git a/Python314_4_x86_Template/Lib/asyncio/locks.py b/Python314_4_x86_Template/Lib/asyncio/locks.py deleted file mode 100644 index fa3a94764..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/locks.py +++ /dev/null @@ -1,617 +0,0 @@ -"""Synchronization primitives.""" - -__all__ = ('Lock', 'Event', 'Condition', 'Semaphore', - 'BoundedSemaphore', 'Barrier') - -import collections -import enum - -from . import exceptions -from . import mixins - -class _ContextManagerMixin: - async def __aenter__(self): - await self.acquire() - # We have no use for the "as ..." clause in the with - # statement for locks. - return None - - async def __aexit__(self, exc_type, exc, tb): - self.release() - - -class Lock(_ContextManagerMixin, mixins._LoopBoundMixin): - """Primitive lock objects. - - A primitive lock is a synchronization primitive that is not owned - by a particular task when locked. A primitive lock is in one - of two states, 'locked' or 'unlocked'. - - It is created in the unlocked state. It has two basic methods, - acquire() and release(). When the state is unlocked, acquire() - changes the state to locked and returns immediately. When the - state is locked, acquire() blocks until a call to release() in - another task changes it to unlocked, then the acquire() call - resets it to locked and returns. The release() method should only - be called in the locked state; it changes the state to unlocked - and returns immediately. If an attempt is made to release an - unlocked lock, a RuntimeError will be raised. - - When more than one task is blocked in acquire() waiting for - the state to turn to unlocked, only one task proceeds when a - release() call resets the state to unlocked; successive release() - calls will unblock tasks in FIFO order. - - Locks also support the asynchronous context management protocol. - 'async with lock' statement should be used. - - Usage: - - lock = Lock() - ... - await lock.acquire() - try: - ... - finally: - lock.release() - - Context manager usage: - - lock = Lock() - ... - async with lock: - ... - - Lock objects can be tested for locking state: - - if not lock.locked(): - await lock.acquire() - else: - # lock is acquired - ... - - """ - - def __init__(self): - self._waiters = None - self._locked = False - - def __repr__(self): - res = super().__repr__() - extra = 'locked' if self._locked else 'unlocked' - if self._waiters: - extra = f'{extra}, waiters:{len(self._waiters)}' - return f'<{res[1:-1]} [{extra}]>' - - def locked(self): - """Return True if lock is acquired.""" - return self._locked - - async def acquire(self): - """Acquire a lock. - - This method blocks until the lock is unlocked, then sets it to - locked and returns True. - """ - # Implement fair scheduling, where thread always waits - # its turn. Jumping the queue if all are cancelled is an optimization. - if (not self._locked and (self._waiters is None or - all(w.cancelled() for w in self._waiters))): - self._locked = True - return True - - if self._waiters is None: - self._waiters = collections.deque() - fut = self._get_loop().create_future() - self._waiters.append(fut) - - try: - try: - await fut - finally: - self._waiters.remove(fut) - except exceptions.CancelledError: - # Currently the only exception designed be able to occur here. - - # Ensure the lock invariant: If lock is not claimed (or about - # to be claimed by us) and there is a Task in waiters, - # ensure that the Task at the head will run. - if not self._locked: - self._wake_up_first() - raise - - # assert self._locked is False - self._locked = True - return True - - def release(self): - """Release a lock. - - When the lock is locked, reset it to unlocked, and return. - If any other tasks are blocked waiting for the lock to become - unlocked, allow exactly one of them to proceed. - - When invoked on an unlocked lock, a RuntimeError is raised. - - There is no return value. - """ - if self._locked: - self._locked = False - self._wake_up_first() - else: - raise RuntimeError('Lock is not acquired.') - - def _wake_up_first(self): - """Ensure that the first waiter will wake up.""" - if not self._waiters: - return - try: - fut = next(iter(self._waiters)) - except StopIteration: - return - - # .done() means that the waiter is already set to wake up. - if not fut.done(): - fut.set_result(True) - - -class Event(mixins._LoopBoundMixin): - """Asynchronous equivalent to threading.Event. - - Class implementing event objects. An event manages a flag that can be set - to true with the set() method and reset to false with the clear() method. - The wait() method blocks until the flag is true. The flag is initially - false. - """ - - def __init__(self): - self._waiters = collections.deque() - self._value = False - - def __repr__(self): - res = super().__repr__() - extra = 'set' if self._value else 'unset' - if self._waiters: - extra = f'{extra}, waiters:{len(self._waiters)}' - return f'<{res[1:-1]} [{extra}]>' - - def is_set(self): - """Return True if and only if the internal flag is true.""" - return self._value - - def set(self): - """Set the internal flag to true. All tasks waiting for it to - become true are awakened. Tasks that call wait() once the flag is - true will not block at all. - """ - if not self._value: - self._value = True - - for fut in self._waiters: - if not fut.done(): - fut.set_result(True) - - def clear(self): - """Reset the internal flag to false. Subsequently, tasks calling - wait() will block until set() is called to set the internal flag - to true again.""" - self._value = False - - async def wait(self): - """Block until the internal flag is true. - - If the internal flag is true on entry, return True - immediately. Otherwise, block until another task calls - set() to set the flag to true, then return True. - """ - if self._value: - return True - - fut = self._get_loop().create_future() - self._waiters.append(fut) - try: - await fut - return True - finally: - self._waiters.remove(fut) - - -class Condition(_ContextManagerMixin, mixins._LoopBoundMixin): - """Asynchronous equivalent to threading.Condition. - - This class implements condition variable objects. A condition variable - allows one or more tasks to wait until they are notified by another - task. - - A new Lock object is created and used as the underlying lock. - """ - - def __init__(self, lock=None): - if lock is None: - lock = Lock() - - self._lock = lock - # Export the lock's locked(), acquire() and release() methods. - self.locked = lock.locked - self.acquire = lock.acquire - self.release = lock.release - - self._waiters = collections.deque() - - def __repr__(self): - res = super().__repr__() - extra = 'locked' if self.locked() else 'unlocked' - if self._waiters: - extra = f'{extra}, waiters:{len(self._waiters)}' - return f'<{res[1:-1]} [{extra}]>' - - async def wait(self): - """Wait until notified. - - If the calling task has not acquired the lock when this - method is called, a RuntimeError is raised. - - This method releases the underlying lock, and then blocks - until it is awakened by a notify() or notify_all() call for - the same condition variable in another task. Once - awakened, it re-acquires the lock and returns True. - - This method may return spuriously, - which is why the caller should always - re-check the state and be prepared to wait() again. - """ - if not self.locked(): - raise RuntimeError('cannot wait on un-acquired lock') - - fut = self._get_loop().create_future() - self.release() - try: - try: - self._waiters.append(fut) - try: - await fut - return True - finally: - self._waiters.remove(fut) - - finally: - # Must re-acquire lock even if wait is cancelled. - # We only catch CancelledError here, since we don't want any - # other (fatal) errors with the future to cause us to spin. - err = None - while True: - try: - await self.acquire() - break - except exceptions.CancelledError as e: - err = e - - if err is not None: - try: - raise err # Re-raise most recent exception instance. - finally: - err = None # Break reference cycles. - except BaseException: - # Any error raised out of here _may_ have occurred after this Task - # believed to have been successfully notified. - # Make sure to notify another Task instead. This may result - # in a "spurious wakeup", which is allowed as part of the - # Condition Variable protocol. - self._notify(1) - raise - - async def wait_for(self, predicate): - """Wait until a predicate becomes true. - - The predicate should be a callable whose result will be - interpreted as a boolean value. The method will repeatedly - wait() until it evaluates to true. The final predicate value is - the return value. - """ - result = predicate() - while not result: - await self.wait() - result = predicate() - return result - - def notify(self, n=1): - """By default, wake up one task waiting on this condition, if any. - If the calling task has not acquired the lock when this method - is called, a RuntimeError is raised. - - This method wakes up n of the tasks waiting for the condition - variable; if fewer than n are waiting, they are all awoken. - - Note: an awakened task does not actually return from its - wait() call until it can reacquire the lock. Since notify() does - not release the lock, its caller should. - """ - if not self.locked(): - raise RuntimeError('cannot notify on un-acquired lock') - self._notify(n) - - def _notify(self, n): - idx = 0 - for fut in self._waiters: - if idx >= n: - break - - if not fut.done(): - idx += 1 - fut.set_result(False) - - def notify_all(self): - """Wake up all tasks waiting on this condition. This method acts - like notify(), but wakes up all waiting tasks instead of one. If the - calling task has not acquired the lock when this method is called, - a RuntimeError is raised. - """ - self.notify(len(self._waiters)) - - -class Semaphore(_ContextManagerMixin, mixins._LoopBoundMixin): - """A Semaphore implementation. - - A semaphore manages an internal counter which is decremented by each - acquire() call and incremented by each release() call. The counter - can never go below zero; when acquire() finds that it is zero, it blocks, - waiting until some other thread calls release(). - - Semaphores also support the context management protocol. - - The optional argument gives the initial value for the internal - counter; it defaults to 1. If the value given is less than 0, - ValueError is raised. - """ - - def __init__(self, value=1): - if value < 0: - raise ValueError("Semaphore initial value must be >= 0") - self._waiters = None - self._value = value - - def __repr__(self): - res = super().__repr__() - extra = 'locked' if self.locked() else f'unlocked, value:{self._value}' - if self._waiters: - extra = f'{extra}, waiters:{len(self._waiters)}' - return f'<{res[1:-1]} [{extra}]>' - - def locked(self): - """Returns True if semaphore cannot be acquired immediately.""" - # Due to state, or FIFO rules (must allow others to run first). - return self._value == 0 or ( - any(not w.cancelled() for w in (self._waiters or ()))) - - async def acquire(self): - """Acquire a semaphore. - - If the internal counter is larger than zero on entry, - decrement it by one and return True immediately. If it is - zero on entry, block, waiting until some other task has - called release() to make it larger than 0, and then return - True. - """ - if not self.locked(): - # Maintain FIFO, wait for others to start even if _value > 0. - self._value -= 1 - return True - - if self._waiters is None: - self._waiters = collections.deque() - fut = self._get_loop().create_future() - self._waiters.append(fut) - - try: - try: - await fut - finally: - self._waiters.remove(fut) - except exceptions.CancelledError: - # Currently the only exception designed be able to occur here. - if fut.done() and not fut.cancelled(): - # Our Future was successfully set to True via _wake_up_next(), - # but we are not about to successfully acquire(). Therefore we - # must undo the bookkeeping already done and attempt to wake - # up someone else. - self._value += 1 - raise - - finally: - # New waiters may have arrived but had to wait due to FIFO. - # Wake up as many as are allowed. - while self._value > 0: - if not self._wake_up_next(): - break # There was no-one to wake up. - return True - - def release(self): - """Release a semaphore, incrementing the internal counter by one. - - When it was zero on entry and another task is waiting for it to - become larger than zero again, wake up that task. - """ - self._value += 1 - self._wake_up_next() - - def _wake_up_next(self): - """Wake up the first waiter that isn't done.""" - if not self._waiters: - return False - - for fut in self._waiters: - if not fut.done(): - self._value -= 1 - fut.set_result(True) - # `fut` is now `done()` and not `cancelled()`. - return True - return False - - -class BoundedSemaphore(Semaphore): - """A bounded semaphore implementation. - - This raises ValueError in release() if it would increase the value - above the initial value. - """ - - def __init__(self, value=1): - self._bound_value = value - super().__init__(value) - - def release(self): - if self._value >= self._bound_value: - raise ValueError('BoundedSemaphore released too many times') - super().release() - - - -class _BarrierState(enum.Enum): - FILLING = 'filling' - DRAINING = 'draining' - RESETTING = 'resetting' - BROKEN = 'broken' - - -class Barrier(mixins._LoopBoundMixin): - """Asyncio equivalent to threading.Barrier - - Implements a Barrier primitive. - Useful for synchronizing a fixed number of tasks at known synchronization - points. Tasks block on 'wait()' and are simultaneously awoken once they - have all made their call. - """ - - def __init__(self, parties): - """Create a barrier, initialised to 'parties' tasks.""" - if parties < 1: - raise ValueError('parties must be >= 1') - - self._cond = Condition() # notify all tasks when state changes - - self._parties = parties - self._state = _BarrierState.FILLING - self._count = 0 # count tasks in Barrier - - def __repr__(self): - res = super().__repr__() - extra = f'{self._state.value}' - if not self.broken: - extra += f', waiters:{self.n_waiting}/{self.parties}' - return f'<{res[1:-1]} [{extra}]>' - - async def __aenter__(self): - # wait for the barrier reaches the parties number - # when start draining release and return index of waited task - return await self.wait() - - async def __aexit__(self, *args): - pass - - async def wait(self): - """Wait for the barrier. - - When the specified number of tasks have started waiting, they are all - simultaneously awoken. - Returns an unique and individual index number from 0 to 'parties-1'. - """ - async with self._cond: - await self._block() # Block while the barrier drains or resets. - try: - index = self._count - self._count += 1 - if index + 1 == self._parties: - # We release the barrier - await self._release() - else: - await self._wait() - return index - finally: - self._count -= 1 - # Wake up any tasks waiting for barrier to drain. - self._exit() - - async def _block(self): - # Block until the barrier is ready for us, - # or raise an exception if it is broken. - # - # It is draining or resetting, wait until done - # unless a CancelledError occurs - await self._cond.wait_for( - lambda: self._state not in ( - _BarrierState.DRAINING, _BarrierState.RESETTING - ) - ) - - # see if the barrier is in a broken state - if self._state is _BarrierState.BROKEN: - raise exceptions.BrokenBarrierError("Barrier aborted") - - async def _release(self): - # Release the tasks waiting in the barrier. - - # Enter draining state. - # Next waiting tasks will be blocked until the end of draining. - self._state = _BarrierState.DRAINING - self._cond.notify_all() - - async def _wait(self): - # Wait in the barrier until we are released. Raise an exception - # if the barrier is reset or broken. - - # wait for end of filling - # unless a CancelledError occurs - await self._cond.wait_for(lambda: self._state is not _BarrierState.FILLING) - - if self._state in (_BarrierState.BROKEN, _BarrierState.RESETTING): - raise exceptions.BrokenBarrierError("Abort or reset of barrier") - - def _exit(self): - # If we are the last tasks to exit the barrier, signal any tasks - # waiting for the barrier to drain. - if self._count == 0: - if self._state in (_BarrierState.RESETTING, _BarrierState.DRAINING): - self._state = _BarrierState.FILLING - self._cond.notify_all() - - async def reset(self): - """Reset the barrier to the initial state. - - Any tasks currently waiting will get the BrokenBarrier exception - raised. - """ - async with self._cond: - if self._count > 0: - if self._state is not _BarrierState.RESETTING: - #reset the barrier, waking up tasks - self._state = _BarrierState.RESETTING - else: - self._state = _BarrierState.FILLING - self._cond.notify_all() - - async def abort(self): - """Place the barrier into a 'broken' state. - - Useful in case of error. Any currently waiting tasks and tasks - attempting to 'wait()' will have BrokenBarrierError raised. - """ - async with self._cond: - self._state = _BarrierState.BROKEN - self._cond.notify_all() - - @property - def parties(self): - """Return the number of tasks required to trip the barrier.""" - return self._parties - - @property - def n_waiting(self): - """Return the number of tasks currently waiting at the barrier.""" - if self._state is _BarrierState.FILLING: - return self._count - return 0 - - @property - def broken(self): - """Return True if the barrier is in a broken state.""" - return self._state is _BarrierState.BROKEN diff --git a/Python314_4_x86_Template/Lib/asyncio/log.py b/Python314_4_x86_Template/Lib/asyncio/log.py deleted file mode 100644 index 23a7074af..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/log.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Logging configuration.""" - -import logging - - -# Name the logger after the package. -logger = logging.getLogger(__package__) diff --git a/Python314_4_x86_Template/Lib/asyncio/mixins.py b/Python314_4_x86_Template/Lib/asyncio/mixins.py deleted file mode 100644 index c6bf97329..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/mixins.py +++ /dev/null @@ -1,21 +0,0 @@ -"""Event loop mixins.""" - -import threading -from . import events - -_global_lock = threading.Lock() - - -class _LoopBoundMixin: - _loop = None - - def _get_loop(self): - loop = events._get_running_loop() - - if self._loop is None: - with _global_lock: - if self._loop is None: - self._loop = loop - if loop is not self._loop: - raise RuntimeError(f'{self!r} is bound to a different event loop') - return loop diff --git a/Python314_4_x86_Template/Lib/asyncio/proactor_events.py b/Python314_4_x86_Template/Lib/asyncio/proactor_events.py deleted file mode 100644 index f404273c3..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/proactor_events.py +++ /dev/null @@ -1,896 +0,0 @@ -"""Event loop using a proactor and related classes. - -A proactor is a "notify-on-completion" multiplexer. Currently a -proactor is only implemented on Windows with IOCP. -""" - -__all__ = 'BaseProactorEventLoop', - -import io -import os -import socket -import warnings -import signal -import threading -import collections - -from . import base_events -from . import constants -from . import futures -from . import exceptions -from . import protocols -from . import sslproto -from . import transports -from . import trsock -from .log import logger - - -def _set_socket_extra(transport, sock): - transport._extra['socket'] = trsock.TransportSocket(sock) - - try: - transport._extra['sockname'] = sock.getsockname() - except socket.error: - if transport._loop.get_debug(): - logger.warning( - "getsockname() failed on %r", sock, exc_info=True) - - if 'peername' not in transport._extra: - try: - transport._extra['peername'] = sock.getpeername() - except socket.error: - # UDP sockets may not have a peer name - transport._extra['peername'] = None - - -class _ProactorBasePipeTransport(transports._FlowControlMixin, - transports.BaseTransport): - """Base class for pipe and socket transports.""" - - def __init__(self, loop, sock, protocol, waiter=None, - extra=None, server=None): - super().__init__(extra, loop) - self._set_extra(sock) - self._sock = sock - self.set_protocol(protocol) - self._server = server - self._buffer = None # None or bytearray. - self._read_fut = None - self._write_fut = None - self._pending_write = 0 - self._conn_lost = 0 - self._closing = False # Set when close() called. - self._called_connection_lost = False - self._eof_written = False - if self._server is not None: - self._server._attach(self) - self._loop.call_soon(self._protocol.connection_made, self) - if waiter is not None: - # only wake up the waiter when connection_made() has been called - self._loop.call_soon(futures._set_result_unless_cancelled, - waiter, None) - - def __repr__(self): - info = [self.__class__.__name__] - if self._sock is None: - info.append('closed') - elif self._closing: - info.append('closing') - if self._sock is not None: - info.append(f'fd={self._sock.fileno()}') - if self._read_fut is not None: - info.append(f'read={self._read_fut!r}') - if self._write_fut is not None: - info.append(f'write={self._write_fut!r}') - if self._buffer: - info.append(f'write_bufsize={len(self._buffer)}') - if self._eof_written: - info.append('EOF written') - return '<{}>'.format(' '.join(info)) - - def _set_extra(self, sock): - self._extra['pipe'] = sock - - def set_protocol(self, protocol): - self._protocol = protocol - - def get_protocol(self): - return self._protocol - - def is_closing(self): - return self._closing - - def close(self): - if self._closing: - return - self._closing = True - self._conn_lost += 1 - if not self._buffer and self._write_fut is None: - self._loop.call_soon(self._call_connection_lost, None) - if self._read_fut is not None: - self._read_fut.cancel() - self._read_fut = None - - def __del__(self, _warn=warnings.warn): - if self._sock is not None: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self._sock.close() - - def _fatal_error(self, exc, message='Fatal error on pipe transport'): - try: - if isinstance(exc, OSError): - if self._loop.get_debug(): - logger.debug("%r: %s", self, message, exc_info=True) - else: - self._loop.call_exception_handler({ - 'message': message, - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - finally: - self._force_close(exc) - - def _force_close(self, exc): - if self._empty_waiter is not None and not self._empty_waiter.done(): - if exc is None: - self._empty_waiter.set_result(None) - else: - self._empty_waiter.set_exception(exc) - if self._closing and self._called_connection_lost: - return - self._closing = True - self._conn_lost += 1 - if self._write_fut: - self._write_fut.cancel() - self._write_fut = None - if self._read_fut: - self._read_fut.cancel() - self._read_fut = None - self._pending_write = 0 - self._buffer = None - self._loop.call_soon(self._call_connection_lost, exc) - - def _call_connection_lost(self, exc): - if self._called_connection_lost: - return - try: - self._protocol.connection_lost(exc) - finally: - # XXX If there is a pending overlapped read on the other - # end then it may fail with ERROR_NETNAME_DELETED if we - # just close our end. First calling shutdown() seems to - # cure it, but maybe using DisconnectEx() would be better. - if hasattr(self._sock, 'shutdown') and self._sock.fileno() != -1: - self._sock.shutdown(socket.SHUT_RDWR) - self._sock.close() - self._sock = None - server = self._server - if server is not None: - server._detach(self) - self._server = None - self._called_connection_lost = True - - def get_write_buffer_size(self): - size = self._pending_write - if self._buffer is not None: - size += len(self._buffer) - return size - - -class _ProactorReadPipeTransport(_ProactorBasePipeTransport, - transports.ReadTransport): - """Transport for read pipes.""" - - def __init__(self, loop, sock, protocol, waiter=None, - extra=None, server=None, buffer_size=65536): - self._pending_data_length = -1 - self._paused = True - super().__init__(loop, sock, protocol, waiter, extra, server) - - self._data = bytearray(buffer_size) - self._loop.call_soon(self._loop_reading) - self._paused = False - - def is_reading(self): - return not self._paused and not self._closing - - def pause_reading(self): - if self._closing or self._paused: - return - self._paused = True - - # bpo-33694: Don't cancel self._read_fut because cancelling an - # overlapped WSASend() loss silently data with the current proactor - # implementation. - # - # If CancelIoEx() fails with ERROR_NOT_FOUND, it means that WSASend() - # completed (even if HasOverlappedIoCompleted() returns 0), but - # Overlapped.cancel() currently silently ignores the ERROR_NOT_FOUND - # error. Once the overlapped is ignored, the IOCP loop will ignores the - # completion I/O event and so not read the result of the overlapped - # WSARecv(). - - if self._loop.get_debug(): - logger.debug("%r pauses reading", self) - - def resume_reading(self): - if self._closing or not self._paused: - return - - self._paused = False - if self._read_fut is None: - self._loop.call_soon(self._loop_reading, None) - - length = self._pending_data_length - self._pending_data_length = -1 - if length > -1: - # Call the protocol method after calling _loop_reading(), - # since the protocol can decide to pause reading again. - self._loop.call_soon(self._data_received, self._data[:length], length) - - if self._loop.get_debug(): - logger.debug("%r resumes reading", self) - - def _eof_received(self): - if self._loop.get_debug(): - logger.debug("%r received EOF", self) - - try: - keep_open = self._protocol.eof_received() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal error: protocol.eof_received() call failed.') - return - - if not keep_open: - self.close() - - def _data_received(self, data, length): - if self._paused: - # Don't call any protocol method while reading is paused. - # The protocol will be called on resume_reading(). - assert self._pending_data_length == -1 - self._pending_data_length = length - return - - if length == 0: - self._eof_received() - return - - if isinstance(self._protocol, protocols.BufferedProtocol): - try: - protocols._feed_data_to_buffered_proto(self._protocol, data) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error(exc, - 'Fatal error: protocol.buffer_updated() ' - 'call failed.') - return - else: - self._protocol.data_received(data) - - def _loop_reading(self, fut=None): - length = -1 - data = None - try: - if fut is not None: - assert self._read_fut is fut or (self._read_fut is None and - self._closing) - self._read_fut = None - if fut.done(): - # deliver data later in "finally" clause - length = fut.result() - if length == 0: - # we got end-of-file so no need to reschedule a new read - return - - # It's a new slice so make it immutable so protocols upstream don't have problems - data = bytes(memoryview(self._data)[:length]) - else: - # the future will be replaced by next proactor.recv call - fut.cancel() - - if self._closing: - # since close() has been called we ignore any read data - return - - # bpo-33694: buffer_updated() has currently no fast path because of - # a data loss issue caused by overlapped WSASend() cancellation. - - if not self._paused: - # reschedule a new read - self._read_fut = self._loop._proactor.recv_into(self._sock, self._data) - except ConnectionAbortedError as exc: - if not self._closing: - self._fatal_error(exc, 'Fatal read error on pipe transport') - elif self._loop.get_debug(): - logger.debug("Read error on pipe transport while closing", - exc_info=True) - except ConnectionResetError as exc: - self._force_close(exc) - except OSError as exc: - self._fatal_error(exc, 'Fatal read error on pipe transport') - except exceptions.CancelledError: - if not self._closing: - raise - else: - if not self._paused: - self._read_fut.add_done_callback(self._loop_reading) - finally: - if length > -1: - self._data_received(data, length) - - -class _ProactorBaseWritePipeTransport(_ProactorBasePipeTransport, - transports.WriteTransport): - """Transport for write pipes.""" - - _start_tls_compatible = True - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - self._empty_waiter = None - - def write(self, data): - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError( - f"data argument must be a bytes-like object, " - f"not {type(data).__name__}") - if self._eof_written: - raise RuntimeError('write_eof() already called') - if self._empty_waiter is not None: - raise RuntimeError('unable to write; sendfile is in progress') - - if not data: - return - - if self._conn_lost: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('socket.send() raised exception.') - self._conn_lost += 1 - return - - # Observable states: - # 1. IDLE: _write_fut and _buffer both None - # 2. WRITING: _write_fut set; _buffer None - # 3. BACKED UP: _write_fut set; _buffer a bytearray - # We always copy the data, so the caller can't modify it - # while we're still waiting for the I/O to happen. - if self._write_fut is None: # IDLE -> WRITING - assert self._buffer is None - # Pass a copy, except if it's already immutable. - self._loop_writing(data=bytes(data)) - elif not self._buffer: # WRITING -> BACKED UP - # Make a mutable copy which we can extend. - self._buffer = bytearray(data) - self._maybe_pause_protocol() - else: # BACKED UP - # Append to buffer (also copies). - self._buffer.extend(data) - self._maybe_pause_protocol() - - def _loop_writing(self, f=None, data=None): - try: - if f is not None and self._write_fut is None and self._closing: - # XXX most likely self._force_close() has been called, and - # it has set self._write_fut to None. - return - assert f is self._write_fut - self._write_fut = None - self._pending_write = 0 - if f: - f.result() - if data is None: - data = self._buffer - self._buffer = None - if not data: - if self._closing: - self._loop.call_soon(self._call_connection_lost, None) - if self._eof_written: - self._sock.shutdown(socket.SHUT_WR) - # Now that we've reduced the buffer size, tell the - # protocol to resume writing if it was paused. Note that - # we do this last since the callback is called immediately - # and it may add more data to the buffer (even causing the - # protocol to be paused again). - self._maybe_resume_protocol() - else: - self._write_fut = self._loop._proactor.send(self._sock, data) - if not self._write_fut.done(): - assert self._pending_write == 0 - self._pending_write = len(data) - self._write_fut.add_done_callback(self._loop_writing) - self._maybe_pause_protocol() - else: - self._write_fut.add_done_callback(self._loop_writing) - if self._empty_waiter is not None and self._write_fut is None: - self._empty_waiter.set_result(None) - except ConnectionResetError as exc: - self._force_close(exc) - except OSError as exc: - self._fatal_error(exc, 'Fatal write error on pipe transport') - - def can_write_eof(self): - return True - - def write_eof(self): - self.close() - - def abort(self): - self._force_close(None) - - def _make_empty_waiter(self): - if self._empty_waiter is not None: - raise RuntimeError("Empty waiter is already set") - self._empty_waiter = self._loop.create_future() - if self._write_fut is None: - self._empty_waiter.set_result(None) - return self._empty_waiter - - def _reset_empty_waiter(self): - self._empty_waiter = None - - -class _ProactorWritePipeTransport(_ProactorBaseWritePipeTransport): - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - self._read_fut = self._loop._proactor.recv(self._sock, 16) - self._read_fut.add_done_callback(self._pipe_closed) - - def _pipe_closed(self, fut): - if fut.cancelled(): - # the transport has been closed - return - assert fut.result() == b'' - if self._closing: - assert self._read_fut is None - return - assert fut is self._read_fut, (fut, self._read_fut) - self._read_fut = None - if self._write_fut is not None: - self._force_close(BrokenPipeError()) - else: - self.close() - - -class _ProactorDatagramTransport(_ProactorBasePipeTransport, - transports.DatagramTransport): - max_size = 256 * 1024 - _header_size = 8 - - def __init__(self, loop, sock, protocol, address=None, - waiter=None, extra=None): - self._address = address - self._empty_waiter = None - self._buffer_size = 0 - # We don't need to call _protocol.connection_made() since our base - # constructor does it for us. - super().__init__(loop, sock, protocol, waiter=waiter, extra=extra) - - # The base constructor sets _buffer = None, so we set it here - self._buffer = collections.deque() - self._loop.call_soon(self._loop_reading) - - def _set_extra(self, sock): - _set_socket_extra(self, sock) - - def get_write_buffer_size(self): - return self._buffer_size - - def abort(self): - self._force_close(None) - - def sendto(self, data, addr=None): - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError('data argument must be bytes-like object (%r)', - type(data)) - - if self._address is not None and addr not in (None, self._address): - raise ValueError( - f'Invalid address: must be None or {self._address}') - - if self._conn_lost and self._address: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('socket.sendto() raised exception.') - self._conn_lost += 1 - return - - # Ensure that what we buffer is immutable. - self._buffer.append((bytes(data), addr)) - self._buffer_size += len(data) + self._header_size - - if self._write_fut is None: - # No current write operations are active, kick one off - self._loop_writing() - # else: A write operation is already kicked off - - self._maybe_pause_protocol() - - def _loop_writing(self, fut=None): - try: - if self._conn_lost: - return - - assert fut is self._write_fut - self._write_fut = None - if fut: - # We are in a _loop_writing() done callback, get the result - fut.result() - - if not self._buffer or (self._conn_lost and self._address): - # The connection has been closed - if self._closing: - self._loop.call_soon(self._call_connection_lost, None) - return - - data, addr = self._buffer.popleft() - self._buffer_size -= len(data) + self._header_size - if self._address is not None: - self._write_fut = self._loop._proactor.send(self._sock, - data) - else: - self._write_fut = self._loop._proactor.sendto(self._sock, - data, - addr=addr) - except OSError as exc: - self._protocol.error_received(exc) - except Exception as exc: - self._fatal_error(exc, 'Fatal write error on datagram transport') - else: - self._write_fut.add_done_callback(self._loop_writing) - self._maybe_resume_protocol() - - def _loop_reading(self, fut=None): - data = None - try: - if self._conn_lost: - return - - assert self._read_fut is fut or (self._read_fut is None and - self._closing) - - self._read_fut = None - if fut is not None: - res = fut.result() - - if self._closing: - # since close() has been called we ignore any read data - data = None - return - - if self._address is not None: - data, addr = res, self._address - else: - data, addr = res - - if self._conn_lost: - return - if self._address is not None: - self._read_fut = self._loop._proactor.recv(self._sock, - self.max_size) - else: - self._read_fut = self._loop._proactor.recvfrom(self._sock, - self.max_size) - except OSError as exc: - self._protocol.error_received(exc) - except exceptions.CancelledError: - if not self._closing: - raise - else: - if self._read_fut is not None: - self._read_fut.add_done_callback(self._loop_reading) - finally: - if data: - self._protocol.datagram_received(data, addr) - - -class _ProactorDuplexPipeTransport(_ProactorReadPipeTransport, - _ProactorBaseWritePipeTransport, - transports.Transport): - """Transport for duplex pipes.""" - - def can_write_eof(self): - return False - - def write_eof(self): - raise NotImplementedError - - -class _ProactorSocketTransport(_ProactorReadPipeTransport, - _ProactorBaseWritePipeTransport, - transports.Transport): - """Transport for connected sockets.""" - - _sendfile_compatible = constants._SendfileMode.TRY_NATIVE - - def __init__(self, loop, sock, protocol, waiter=None, - extra=None, server=None): - super().__init__(loop, sock, protocol, waiter, extra, server) - base_events._set_nodelay(sock) - - def _set_extra(self, sock): - _set_socket_extra(self, sock) - - def can_write_eof(self): - return True - - def write_eof(self): - if self._closing or self._eof_written: - return - self._eof_written = True - if self._write_fut is None: - self._sock.shutdown(socket.SHUT_WR) - - -class BaseProactorEventLoop(base_events.BaseEventLoop): - - def __init__(self, proactor): - super().__init__() - logger.debug('Using proactor: %s', proactor.__class__.__name__) - self._proactor = proactor - self._selector = proactor # convenient alias - self._self_reading_future = None - self._accept_futures = {} # socket file descriptor => Future - proactor.set_loop(self) - self._make_self_pipe() - if threading.current_thread() is threading.main_thread(): - # wakeup fd can only be installed to a file descriptor from the main thread - signal.set_wakeup_fd(self._csock.fileno()) - - def _make_socket_transport(self, sock, protocol, waiter=None, - extra=None, server=None): - return _ProactorSocketTransport(self, sock, protocol, waiter, - extra, server) - - def _make_ssl_transport( - self, rawsock, protocol, sslcontext, waiter=None, - *, server_side=False, server_hostname=None, - extra=None, server=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - ssl_protocol = sslproto.SSLProtocol( - self, protocol, sslcontext, waiter, - server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - _ProactorSocketTransport(self, rawsock, ssl_protocol, - extra=extra, server=server) - return ssl_protocol._app_transport - - def _make_datagram_transport(self, sock, protocol, - address=None, waiter=None, extra=None): - return _ProactorDatagramTransport(self, sock, protocol, address, - waiter, extra) - - def _make_duplex_pipe_transport(self, sock, protocol, waiter=None, - extra=None): - return _ProactorDuplexPipeTransport(self, - sock, protocol, waiter, extra) - - def _make_read_pipe_transport(self, sock, protocol, waiter=None, - extra=None): - return _ProactorReadPipeTransport(self, sock, protocol, waiter, extra) - - def _make_write_pipe_transport(self, sock, protocol, waiter=None, - extra=None): - # We want connection_lost() to be called when other end closes - return _ProactorWritePipeTransport(self, - sock, protocol, waiter, extra) - - def close(self): - if self.is_running(): - raise RuntimeError("Cannot close a running event loop") - if self.is_closed(): - return - - if threading.current_thread() is threading.main_thread(): - signal.set_wakeup_fd(-1) - # Call these methods before closing the event loop (before calling - # BaseEventLoop.close), because they can schedule callbacks with - # call_soon(), which is forbidden when the event loop is closed. - self._stop_accept_futures() - self._close_self_pipe() - self._proactor.close() - self._proactor = None - self._selector = None - - # Close the event loop - super().close() - - async def sock_recv(self, sock, n): - return await self._proactor.recv(sock, n) - - async def sock_recv_into(self, sock, buf): - return await self._proactor.recv_into(sock, buf) - - async def sock_recvfrom(self, sock, bufsize): - return await self._proactor.recvfrom(sock, bufsize) - - async def sock_recvfrom_into(self, sock, buf, nbytes=0): - if not nbytes: - nbytes = len(buf) - - return await self._proactor.recvfrom_into(sock, buf, nbytes) - - async def sock_sendall(self, sock, data): - return await self._proactor.send(sock, data) - - async def sock_sendto(self, sock, data, address): - return await self._proactor.sendto(sock, data, 0, address) - - async def sock_connect(self, sock, address): - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - return await self._proactor.connect(sock, address) - - async def sock_accept(self, sock): - return await self._proactor.accept(sock) - - async def _sock_sendfile_native(self, sock, file, offset, count): - try: - fileno = file.fileno() - except (AttributeError, io.UnsupportedOperation) as err: - raise exceptions.SendfileNotAvailableError("not a regular file") - try: - fsize = os.fstat(fileno).st_size - except OSError: - raise exceptions.SendfileNotAvailableError("not a regular file") - blocksize = count if count else fsize - if not blocksize: - return 0 # empty file - - blocksize = min(blocksize, 0xffff_ffff) - end_pos = min(offset + count, fsize) if count else fsize - offset = min(offset, fsize) - total_sent = 0 - try: - while True: - blocksize = min(end_pos - offset, blocksize) - if blocksize <= 0: - return total_sent - await self._proactor.sendfile(sock, file, offset, blocksize) - offset += blocksize - total_sent += blocksize - finally: - if total_sent > 0: - file.seek(offset) - - async def _sendfile_native(self, transp, file, offset, count): - resume_reading = transp.is_reading() - transp.pause_reading() - await transp._make_empty_waiter() - try: - return await self.sock_sendfile(transp._sock, file, offset, count, - fallback=False) - finally: - transp._reset_empty_waiter() - if resume_reading: - transp.resume_reading() - - def _close_self_pipe(self): - if self._self_reading_future is not None: - self._self_reading_future.cancel() - self._self_reading_future = None - self._ssock.close() - self._ssock = None - self._csock.close() - self._csock = None - self._internal_fds -= 1 - - def _make_self_pipe(self): - # A self-socket, really. :-) - self._ssock, self._csock = socket.socketpair() - self._ssock.setblocking(False) - self._csock.setblocking(False) - self._internal_fds += 1 - - def _loop_self_reading(self, f=None): - try: - if f is not None: - f.result() # may raise - if self._self_reading_future is not f: - # When we scheduled this Future, we assigned it to - # _self_reading_future. If it's not there now, something has - # tried to cancel the loop while this callback was still in the - # queue (see windows_events.ProactorEventLoop.run_forever). In - # that case stop here instead of continuing to schedule a new - # iteration. - return - f = self._proactor.recv(self._ssock, 4096) - except exceptions.CancelledError: - # _close_self_pipe() has been called, stop waiting for data - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self.call_exception_handler({ - 'message': 'Error on reading from the event loop self pipe', - 'exception': exc, - 'loop': self, - }) - else: - self._self_reading_future = f - f.add_done_callback(self._loop_self_reading) - - def _write_to_self(self): - # This may be called from a different thread, possibly after - # _close_self_pipe() has been called or even while it is - # running. Guard for self._csock being None or closed. When - # a socket is closed, send() raises OSError (with errno set to - # EBADF, but let's not rely on the exact error code). - csock = self._csock - if csock is None: - return - - try: - csock.send(b'\0') - except OSError: - if self._debug: - logger.debug("Fail to write a null byte into the " - "self-pipe socket", - exc_info=True) - - def _start_serving(self, protocol_factory, sock, - sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - - def loop(f=None): - try: - if f is not None: - conn, addr = f.result() - if self._debug: - logger.debug("%r got a new connection from %r: %r", - server, addr, conn) - protocol = protocol_factory() - if sslcontext is not None: - self._make_ssl_transport( - conn, protocol, sslcontext, server_side=True, - extra={'peername': addr}, server=server, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - else: - self._make_socket_transport( - conn, protocol, - extra={'peername': addr}, server=server) - if self.is_closed(): - return - f = self._proactor.accept(sock) - except OSError as exc: - if sock.fileno() != -1: - self.call_exception_handler({ - 'message': 'Accept failed on a socket', - 'exception': exc, - 'socket': trsock.TransportSocket(sock), - }) - sock.close() - elif self._debug: - logger.debug("Accept failed on socket %r", - sock, exc_info=True) - except exceptions.CancelledError: - sock.close() - else: - self._accept_futures[sock.fileno()] = f - f.add_done_callback(loop) - - self.call_soon(loop) - - def _process_events(self, event_list): - # Events are processed in the IocpProactor._poll() method - pass - - def _stop_accept_futures(self): - for future in self._accept_futures.values(): - future.cancel() - self._accept_futures.clear() - - def _stop_serving(self, sock): - future = self._accept_futures.pop(sock.fileno(), None) - if future: - future.cancel() - self._proactor._stop_serving(sock) - sock.close() diff --git a/Python314_4_x86_Template/Lib/asyncio/protocols.py b/Python314_4_x86_Template/Lib/asyncio/protocols.py deleted file mode 100644 index 09987b164..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/protocols.py +++ /dev/null @@ -1,216 +0,0 @@ -"""Abstract Protocol base classes.""" - -__all__ = ( - 'BaseProtocol', 'Protocol', 'DatagramProtocol', - 'SubprocessProtocol', 'BufferedProtocol', -) - - -class BaseProtocol: - """Common base class for protocol interfaces. - - Usually user implements protocols that derived from BaseProtocol - like Protocol or ProcessProtocol. - - The only case when BaseProtocol should be implemented directly is - write-only transport like write pipe - """ - - __slots__ = () - - def connection_made(self, transport): - """Called when a connection is made. - - The argument is the transport representing the pipe connection. - To receive data, wait for data_received() calls. - When the connection is closed, connection_lost() is called. - """ - - def connection_lost(self, exc): - """Called when the connection is lost or closed. - - The argument is an exception object or None (the latter - meaning a regular EOF is received or the connection was - aborted or closed). - """ - - def pause_writing(self): - """Called when the transport's buffer goes over the high-water mark. - - Pause and resume calls are paired -- pause_writing() is called - once when the buffer goes strictly over the high-water mark - (even if subsequent writes increases the buffer size even - more), and eventually resume_writing() is called once when the - buffer size reaches the low-water mark. - - Note that if the buffer size equals the high-water mark, - pause_writing() is not called -- it must go strictly over. - Conversely, resume_writing() is called when the buffer size is - equal or lower than the low-water mark. These end conditions - are important to ensure that things go as expected when either - mark is zero. - - NOTE: This is the only Protocol callback that is not called - through EventLoop.call_soon() -- if it were, it would have no - effect when it's most needed (when the app keeps writing - without yielding until pause_writing() is called). - """ - - def resume_writing(self): - """Called when the transport's buffer drains below the low-water mark. - - See pause_writing() for details. - """ - - -class Protocol(BaseProtocol): - """Interface for stream protocol. - - The user should implement this interface. They can inherit from - this class but don't need to. The implementations here do - nothing (they don't raise exceptions). - - When the user wants to requests a transport, they pass a protocol - factory to a utility function (e.g., EventLoop.create_connection()). - - When the connection is made successfully, connection_made() is - called with a suitable transport object. Then data_received() - will be called 0 or more times with data (bytes) received from the - transport; finally, connection_lost() will be called exactly once - with either an exception object or None as an argument. - - State machine of calls: - - start -> CM [-> DR*] [-> ER?] -> CL -> end - - * CM: connection_made() - * DR: data_received() - * ER: eof_received() - * CL: connection_lost() - """ - - __slots__ = () - - def data_received(self, data): - """Called when some data is received. - - The argument is a bytes object. - """ - - def eof_received(self): - """Called when the other end calls write_eof() or equivalent. - - If this returns a false value (including None), the transport - will close itself. If it returns a true value, closing the - transport is up to the protocol. - """ - - -class BufferedProtocol(BaseProtocol): - """Interface for stream protocol with manual buffer control. - - Event methods, such as `create_server` and `create_connection`, - accept factories that return protocols that implement this interface. - - The idea of BufferedProtocol is that it allows to manually allocate - and control the receive buffer. Event loops can then use the buffer - provided by the protocol to avoid unnecessary data copies. This - can result in noticeable performance improvement for protocols that - receive big amounts of data. Sophisticated protocols can allocate - the buffer only once at creation time. - - State machine of calls: - - start -> CM [-> GB [-> BU?]]* [-> ER?] -> CL -> end - - * CM: connection_made() - * GB: get_buffer() - * BU: buffer_updated() - * ER: eof_received() - * CL: connection_lost() - """ - - __slots__ = () - - def get_buffer(self, sizehint): - """Called to allocate a new receive buffer. - - *sizehint* is a recommended minimal size for the returned - buffer. When set to -1, the buffer size can be arbitrary. - - Must return an object that implements the - :ref:`buffer protocol <bufferobjects>`. - It is an error to return a zero-sized buffer. - """ - - def buffer_updated(self, nbytes): - """Called when the buffer was updated with the received data. - - *nbytes* is the total number of bytes that were written to - the buffer. - """ - - def eof_received(self): - """Called when the other end calls write_eof() or equivalent. - - If this returns a false value (including None), the transport - will close itself. If it returns a true value, closing the - transport is up to the protocol. - """ - - -class DatagramProtocol(BaseProtocol): - """Interface for datagram protocol.""" - - __slots__ = () - - def datagram_received(self, data, addr): - """Called when some datagram is received.""" - - def error_received(self, exc): - """Called when a send or receive operation raises an OSError. - - (Other than BlockingIOError or InterruptedError.) - """ - - -class SubprocessProtocol(BaseProtocol): - """Interface for protocol for subprocess calls.""" - - __slots__ = () - - def pipe_data_received(self, fd, data): - """Called when the subprocess writes data into stdout/stderr pipe. - - fd is int file descriptor. - data is bytes object. - """ - - def pipe_connection_lost(self, fd, exc): - """Called when a file descriptor associated with the child process is - closed. - - fd is the int file descriptor that was closed. - """ - - def process_exited(self): - """Called when subprocess has exited.""" - - -def _feed_data_to_buffered_proto(proto, data): - data_len = len(data) - while data_len: - buf = proto.get_buffer(data_len) - buf_len = len(buf) - if not buf_len: - raise RuntimeError('get_buffer() returned an empty buffer') - - if buf_len >= data_len: - buf[:data_len] = data - proto.buffer_updated(data_len) - return - else: - buf[:buf_len] = data[:buf_len] - proto.buffer_updated(buf_len) - data = data[buf_len:] - data_len = len(data) diff --git a/Python314_4_x86_Template/Lib/asyncio/queues.py b/Python314_4_x86_Template/Lib/asyncio/queues.py deleted file mode 100644 index 756216fac..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/queues.py +++ /dev/null @@ -1,307 +0,0 @@ -__all__ = ( - 'Queue', - 'PriorityQueue', - 'LifoQueue', - 'QueueFull', - 'QueueEmpty', - 'QueueShutDown', -) - -import collections -import heapq -from types import GenericAlias - -from . import locks -from . import mixins - - -class QueueEmpty(Exception): - """Raised when Queue.get_nowait() is called on an empty Queue.""" - pass - - -class QueueFull(Exception): - """Raised when the Queue.put_nowait() method is called on a full Queue.""" - pass - - -class QueueShutDown(Exception): - """Raised when putting on to or getting from a shut-down Queue.""" - pass - - -class Queue(mixins._LoopBoundMixin): - """A queue, useful for coordinating producer and consumer coroutines. - - If maxsize is less than or equal to zero, the queue size is infinite. If it - is an integer greater than 0, then "await put()" will block when the - queue reaches maxsize, until an item is removed by get(). - - Unlike queue.Queue, you can reliably know this Queue's size - with qsize(), since your single-threaded asyncio application won't be - interrupted between calling qsize() and doing an operation on the Queue. - """ - - def __init__(self, maxsize=0): - self._maxsize = maxsize - - # Futures. - self._getters = collections.deque() - # Futures. - self._putters = collections.deque() - self._unfinished_tasks = 0 - self._finished = locks.Event() - self._finished.set() - self._init(maxsize) - self._is_shutdown = False - - # These three are overridable in subclasses. - - def _init(self, maxsize): - self._queue = collections.deque() - - def _get(self): - return self._queue.popleft() - - def _put(self, item): - self._queue.append(item) - - # End of the overridable methods. - - def _wakeup_next(self, waiters): - # Wake up the next waiter (if any) that isn't cancelled. - while waiters: - waiter = waiters.popleft() - if not waiter.done(): - waiter.set_result(None) - break - - def __repr__(self): - return f'<{type(self).__name__} at {id(self):#x} {self._format()}>' - - def __str__(self): - return f'<{type(self).__name__} {self._format()}>' - - __class_getitem__ = classmethod(GenericAlias) - - def _format(self): - result = f'maxsize={self._maxsize!r}' - if getattr(self, '_queue', None): - result += f' _queue={list(self._queue)!r}' - if self._getters: - result += f' _getters[{len(self._getters)}]' - if self._putters: - result += f' _putters[{len(self._putters)}]' - if self._unfinished_tasks: - result += f' tasks={self._unfinished_tasks}' - if self._is_shutdown: - result += ' shutdown' - return result - - def qsize(self): - """Number of items in the queue.""" - return len(self._queue) - - @property - def maxsize(self): - """Number of items allowed in the queue.""" - return self._maxsize - - def empty(self): - """Return True if the queue is empty, False otherwise.""" - return not self._queue - - def full(self): - """Return True if there are maxsize items in the queue. - - Note: if the Queue was initialized with maxsize=0 (the default), - then full() is never True. - """ - if self._maxsize <= 0: - return False - else: - return self.qsize() >= self._maxsize - - async def put(self, item): - """Put an item into the queue. - - Put an item into the queue. If the queue is full, wait until a free - slot is available before adding item. - - Raises QueueShutDown if the queue has been shut down. - """ - while self.full(): - if self._is_shutdown: - raise QueueShutDown - putter = self._get_loop().create_future() - self._putters.append(putter) - try: - await putter - except: - putter.cancel() # Just in case putter is not done yet. - try: - # Clean self._putters from canceled putters. - self._putters.remove(putter) - except ValueError: - # The putter could be removed from self._putters by a - # previous get_nowait call or a shutdown call. - pass - if not self.full() and not putter.cancelled(): - # We were woken up by get_nowait(), but can't take - # the call. Wake up the next in line. - self._wakeup_next(self._putters) - raise - return self.put_nowait(item) - - def put_nowait(self, item): - """Put an item into the queue without blocking. - - If no free slot is immediately available, raise QueueFull. - - Raises QueueShutDown if the queue has been shut down. - """ - if self._is_shutdown: - raise QueueShutDown - if self.full(): - raise QueueFull - self._put(item) - self._unfinished_tasks += 1 - self._finished.clear() - self._wakeup_next(self._getters) - - async def get(self): - """Remove and return an item from the queue. - - If queue is empty, wait until an item is available. - - Raises QueueShutDown if the queue has been shut down and is empty, or - if the queue has been shut down immediately. - """ - while self.empty(): - if self._is_shutdown and self.empty(): - raise QueueShutDown - getter = self._get_loop().create_future() - self._getters.append(getter) - try: - await getter - except: - getter.cancel() # Just in case getter is not done yet. - try: - # Clean self._getters from canceled getters. - self._getters.remove(getter) - except ValueError: - # The getter could be removed from self._getters by a - # previous put_nowait call, or a shutdown call. - pass - if not self.empty() and not getter.cancelled(): - # We were woken up by put_nowait(), but can't take - # the call. Wake up the next in line. - self._wakeup_next(self._getters) - raise - return self.get_nowait() - - def get_nowait(self): - """Remove and return an item from the queue. - - Return an item if one is immediately available, else raise QueueEmpty. - - Raises QueueShutDown if the queue has been shut down and is empty, or - if the queue has been shut down immediately. - """ - if self.empty(): - if self._is_shutdown: - raise QueueShutDown - raise QueueEmpty - item = self._get() - self._wakeup_next(self._putters) - return item - - def task_done(self): - """Indicate that a formerly enqueued task is complete. - - Used by queue consumers. For each get() used to fetch a task, - a subsequent call to task_done() tells the queue that the processing - on the task is complete. - - If a join() is currently blocking, it will resume when all items have - been processed (meaning that a task_done() call was received for every - item that had been put() into the queue). - - Raises ValueError if called more times than there were items placed in - the queue. - """ - if self._unfinished_tasks <= 0: - raise ValueError('task_done() called too many times') - self._unfinished_tasks -= 1 - if self._unfinished_tasks == 0: - self._finished.set() - - async def join(self): - """Block until all items in the queue have been gotten and processed. - - The count of unfinished tasks goes up whenever an item is added to the - queue. The count goes down whenever a consumer calls task_done() to - indicate that the item was retrieved and all work on it is complete. - When the count of unfinished tasks drops to zero, join() unblocks. - """ - if self._unfinished_tasks > 0: - await self._finished.wait() - - def shutdown(self, immediate=False): - """Shut-down the queue, making queue gets and puts raise QueueShutDown. - - By default, gets will only raise once the queue is empty. Set - 'immediate' to True to make gets raise immediately instead. - - All blocked callers of put() and get() will be unblocked. - - If 'immediate', the queue is drained and unfinished tasks - is reduced by the number of drained tasks. If unfinished tasks - is reduced to zero, callers of Queue.join are unblocked. - """ - self._is_shutdown = True - if immediate: - while not self.empty(): - self._get() - if self._unfinished_tasks > 0: - self._unfinished_tasks -= 1 - if self._unfinished_tasks == 0: - self._finished.set() - # All getters need to re-check queue-empty to raise ShutDown - while self._getters: - getter = self._getters.popleft() - if not getter.done(): - getter.set_result(None) - while self._putters: - putter = self._putters.popleft() - if not putter.done(): - putter.set_result(None) - - -class PriorityQueue(Queue): - """A subclass of Queue; retrieves entries in priority order (lowest first). - - Entries are typically tuples of the form: (priority number, data). - """ - - def _init(self, maxsize): - self._queue = [] - - def _put(self, item, heappush=heapq.heappush): - heappush(self._queue, item) - - def _get(self, heappop=heapq.heappop): - return heappop(self._queue) - - -class LifoQueue(Queue): - """A subclass of Queue that retrieves most recently added entries first.""" - - def _init(self, maxsize): - self._queue = [] - - def _put(self, item): - self._queue.append(item) - - def _get(self): - return self._queue.pop() diff --git a/Python314_4_x86_Template/Lib/asyncio/runners.py b/Python314_4_x86_Template/Lib/asyncio/runners.py deleted file mode 100644 index ba37e003a..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/runners.py +++ /dev/null @@ -1,225 +0,0 @@ -__all__ = ('Runner', 'run') - -import contextvars -import enum -import functools -import inspect -import threading -import signal -from . import coroutines -from . import events -from . import exceptions -from . import tasks -from . import constants - -class _State(enum.Enum): - CREATED = "created" - INITIALIZED = "initialized" - CLOSED = "closed" - - -class Runner: - """A context manager that controls event loop life cycle. - - The context manager always creates a new event loop, - allows to run async functions inside it, - and properly finalizes the loop at the context manager exit. - - If debug is True, the event loop will be run in debug mode. - If loop_factory is passed, it is used for new event loop creation. - - asyncio.run(main(), debug=True) - - is a shortcut for - - with asyncio.Runner(debug=True) as runner: - runner.run(main()) - - The run() method can be called multiple times within the runner's context. - - This can be useful for interactive console (e.g. IPython), - unittest runners, console tools, -- everywhere when async code - is called from existing sync framework and where the preferred single - asyncio.run() call doesn't work. - - """ - - # Note: the class is final, it is not intended for inheritance. - - def __init__(self, *, debug=None, loop_factory=None): - self._state = _State.CREATED - self._debug = debug - self._loop_factory = loop_factory - self._loop = None - self._context = None - self._interrupt_count = 0 - self._set_event_loop = False - - def __enter__(self): - self._lazy_init() - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - - def close(self): - """Shutdown and close event loop.""" - if self._state is not _State.INITIALIZED: - return - try: - loop = self._loop - _cancel_all_tasks(loop) - loop.run_until_complete(loop.shutdown_asyncgens()) - loop.run_until_complete( - loop.shutdown_default_executor(constants.THREAD_JOIN_TIMEOUT)) - finally: - if self._set_event_loop: - events.set_event_loop(None) - loop.close() - self._loop = None - self._state = _State.CLOSED - - def get_loop(self): - """Return embedded event loop.""" - self._lazy_init() - return self._loop - - def run(self, coro, *, context=None): - """Run code in the embedded event loop.""" - if events._get_running_loop() is not None: - # fail fast with short traceback - raise RuntimeError( - "Runner.run() cannot be called from a running event loop") - - self._lazy_init() - - if not coroutines.iscoroutine(coro): - if inspect.isawaitable(coro): - async def _wrap_awaitable(awaitable): - return await awaitable - - coro = _wrap_awaitable(coro) - else: - raise TypeError('An asyncio.Future, a coroutine or an ' - 'awaitable is required') - - if context is None: - context = self._context - - task = self._loop.create_task(coro, context=context) - - if (threading.current_thread() is threading.main_thread() - and signal.getsignal(signal.SIGINT) is signal.default_int_handler - ): - sigint_handler = functools.partial(self._on_sigint, main_task=task) - try: - signal.signal(signal.SIGINT, sigint_handler) - except ValueError: - # `signal.signal` may throw if `threading.main_thread` does - # not support signals (e.g. embedded interpreter with signals - # not registered - see gh-91880) - sigint_handler = None - else: - sigint_handler = None - - self._interrupt_count = 0 - try: - return self._loop.run_until_complete(task) - except exceptions.CancelledError: - if self._interrupt_count > 0: - uncancel = getattr(task, "uncancel", None) - if uncancel is not None and uncancel() == 0: - raise KeyboardInterrupt() - raise # CancelledError - finally: - if (sigint_handler is not None - and signal.getsignal(signal.SIGINT) is sigint_handler - ): - signal.signal(signal.SIGINT, signal.default_int_handler) - - def _lazy_init(self): - if self._state is _State.CLOSED: - raise RuntimeError("Runner is closed") - if self._state is _State.INITIALIZED: - return - if self._loop_factory is None: - self._loop = events.new_event_loop() - if not self._set_event_loop: - # Call set_event_loop only once to avoid calling - # attach_loop multiple times on child watchers - events.set_event_loop(self._loop) - self._set_event_loop = True - else: - self._loop = self._loop_factory() - if self._debug is not None: - self._loop.set_debug(self._debug) - self._context = contextvars.copy_context() - self._state = _State.INITIALIZED - - def _on_sigint(self, signum, frame, main_task): - self._interrupt_count += 1 - if self._interrupt_count == 1 and not main_task.done(): - main_task.cancel() - # wakeup loop if it is blocked by select() with long timeout - self._loop.call_soon_threadsafe(lambda: None) - return - raise KeyboardInterrupt() - - -def run(main, *, debug=None, loop_factory=None): - """Execute the coroutine and return the result. - - This function runs the passed coroutine, taking care of - managing the asyncio event loop, finalizing asynchronous - generators and closing the default executor. - - This function cannot be called when another asyncio event loop is - running in the same thread. - - If debug is True, the event loop will be run in debug mode. - If loop_factory is passed, it is used for new event loop creation. - - This function always creates a new event loop and closes it at the end. - It should be used as a main entry point for asyncio programs, and should - ideally only be called once. - - The executor is given a timeout duration of 5 minutes to shutdown. - If the executor hasn't finished within that duration, a warning is - emitted and the executor is closed. - - Example: - - async def main(): - await asyncio.sleep(1) - print('hello') - - asyncio.run(main()) - """ - if events._get_running_loop() is not None: - # fail fast with short traceback - raise RuntimeError( - "asyncio.run() cannot be called from a running event loop") - - with Runner(debug=debug, loop_factory=loop_factory) as runner: - return runner.run(main) - - -def _cancel_all_tasks(loop): - to_cancel = tasks.all_tasks(loop) - if not to_cancel: - return - - for task in to_cancel: - task.cancel() - - loop.run_until_complete(tasks.gather(*to_cancel, return_exceptions=True)) - - for task in to_cancel: - if task.cancelled(): - continue - if task.exception() is not None: - loop.call_exception_handler({ - 'message': 'unhandled exception during asyncio.run() shutdown', - 'exception': task.exception(), - 'task': task, - }) diff --git a/Python314_4_x86_Template/Lib/asyncio/selector_events.py b/Python314_4_x86_Template/Lib/asyncio/selector_events.py deleted file mode 100644 index ff7e16df3..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/selector_events.py +++ /dev/null @@ -1,1326 +0,0 @@ -"""Event loop using a selector and related classes. - -A selector is a "notify-when-ready" multiplexer. For a subclass which -also includes support for signal handling, see the unix_events sub-module. -""" - -__all__ = 'BaseSelectorEventLoop', - -import collections -import errno -import functools -import itertools -import os -import selectors -import socket -import warnings -import weakref -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -from . import base_events -from . import constants -from . import events -from . import futures -from . import protocols -from . import sslproto -from . import transports -from . import trsock -from .log import logger - -_HAS_SENDMSG = hasattr(socket.socket, 'sendmsg') - -if _HAS_SENDMSG: - try: - SC_IOV_MAX = os.sysconf('SC_IOV_MAX') - except OSError: - # Fallback to send - _HAS_SENDMSG = False - -def _test_selector_event(selector, fd, event): - # Test if the selector is monitoring 'event' events - # for the file descriptor 'fd'. - try: - key = selector.get_key(fd) - except KeyError: - return False - else: - return bool(key.events & event) - - -class BaseSelectorEventLoop(base_events.BaseEventLoop): - """Selector event loop. - - See events.EventLoop for API specification. - """ - - def __init__(self, selector=None): - super().__init__() - - if selector is None: - selector = selectors.DefaultSelector() - logger.debug('Using selector: %s', selector.__class__.__name__) - self._selector = selector - self._make_self_pipe() - self._transports = weakref.WeakValueDictionary() - - def _make_socket_transport(self, sock, protocol, waiter=None, *, - extra=None, server=None): - self._ensure_fd_no_transport(sock) - return _SelectorSocketTransport(self, sock, protocol, waiter, - extra, server) - - def _make_ssl_transport( - self, rawsock, protocol, sslcontext, waiter=None, - *, server_side=False, server_hostname=None, - extra=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT, - ): - self._ensure_fd_no_transport(rawsock) - ssl_protocol = sslproto.SSLProtocol( - self, protocol, sslcontext, waiter, - server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout - ) - _SelectorSocketTransport(self, rawsock, ssl_protocol, - extra=extra, server=server) - return ssl_protocol._app_transport - - def _make_datagram_transport(self, sock, protocol, - address=None, waiter=None, extra=None): - self._ensure_fd_no_transport(sock) - return _SelectorDatagramTransport(self, sock, protocol, - address, waiter, extra) - - def close(self): - if self.is_running(): - raise RuntimeError("Cannot close a running event loop") - if self.is_closed(): - return - self._close_self_pipe() - super().close() - if self._selector is not None: - self._selector.close() - self._selector = None - - def _close_self_pipe(self): - self._remove_reader(self._ssock.fileno()) - self._ssock.close() - self._ssock = None - self._csock.close() - self._csock = None - self._internal_fds -= 1 - - def _make_self_pipe(self): - # A self-socket, really. :-) - self._ssock, self._csock = socket.socketpair() - self._ssock.setblocking(False) - self._csock.setblocking(False) - self._internal_fds += 1 - self._add_reader(self._ssock.fileno(), self._read_from_self) - - def _process_self_data(self, data): - pass - - def _read_from_self(self): - while True: - try: - data = self._ssock.recv(4096) - if not data: - break - self._process_self_data(data) - except InterruptedError: - continue - except BlockingIOError: - break - - def _write_to_self(self): - # This may be called from a different thread, possibly after - # _close_self_pipe() has been called or even while it is - # running. Guard for self._csock being None or closed. When - # a socket is closed, send() raises OSError (with errno set to - # EBADF, but let's not rely on the exact error code). - csock = self._csock - if csock is None: - return - - try: - csock.send(b'\0') - except OSError: - if self._debug: - logger.debug("Fail to write a null byte into the " - "self-pipe socket", - exc_info=True) - - def _start_serving(self, protocol_factory, sock, - sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): - self._add_reader(sock.fileno(), self._accept_connection, - protocol_factory, sock, sslcontext, server, backlog, - ssl_handshake_timeout, ssl_shutdown_timeout) - - def _accept_connection( - self, protocol_factory, sock, - sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): - # This method is only called once for each event loop tick where the - # listening socket has triggered an EVENT_READ. There may be multiple - # connections waiting for an .accept() so it is called in a loop. - # See https://bugs.python.org/issue27906 for more details. - for _ in range(backlog + 1): - try: - conn, addr = sock.accept() - if self._debug: - logger.debug("%r got a new connection from %r: %r", - server, addr, conn) - conn.setblocking(False) - except ConnectionAbortedError: - # Discard connections that were aborted before accept(). - continue - except (BlockingIOError, InterruptedError): - # Early exit because of a signal or - # the socket accept buffer is empty. - return - except OSError as exc: - # There's nowhere to send the error, so just log it. - if exc.errno in (errno.EMFILE, errno.ENFILE, - errno.ENOBUFS, errno.ENOMEM): - # Some platforms (e.g. Linux keep reporting the FD as - # ready, so we remove the read handler temporarily. - # We'll try again in a while. - self.call_exception_handler({ - 'message': 'socket.accept() out of system resource', - 'exception': exc, - 'socket': trsock.TransportSocket(sock), - }) - self._remove_reader(sock.fileno()) - self.call_later(constants.ACCEPT_RETRY_DELAY, - self._start_serving, - protocol_factory, sock, sslcontext, server, - backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) - else: - raise # The event loop will catch, log and ignore it. - else: - extra = {'peername': addr} - accept = self._accept_connection2( - protocol_factory, conn, extra, sslcontext, server, - ssl_handshake_timeout, ssl_shutdown_timeout) - self.create_task(accept) - - async def _accept_connection2( - self, protocol_factory, conn, extra, - sslcontext=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): - protocol = None - transport = None - try: - protocol = protocol_factory() - waiter = self.create_future() - if sslcontext: - transport = self._make_ssl_transport( - conn, protocol, sslcontext, waiter=waiter, - server_side=True, extra=extra, server=server, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - else: - transport = self._make_socket_transport( - conn, protocol, waiter=waiter, extra=extra, - server=server) - - try: - await waiter - except BaseException: - transport.close() - # gh-109534: When an exception is raised by the SSLProtocol object the - # exception set in this future can keep the protocol object alive and - # cause a reference cycle. - waiter = None - raise - # It's now up to the protocol to handle the connection. - - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - if self._debug: - context = { - 'message': - 'Error on transport creation for incoming connection', - 'exception': exc, - } - if protocol is not None: - context['protocol'] = protocol - if transport is not None: - context['transport'] = transport - self.call_exception_handler(context) - - def _ensure_fd_no_transport(self, fd): - fileno = fd - if not isinstance(fileno, int): - try: - fileno = int(fileno.fileno()) - except (AttributeError, TypeError, ValueError): - # This code matches selectors._fileobj_to_fd function. - raise ValueError(f"Invalid file object: {fd!r}") from None - transport = self._transports.get(fileno) - if transport and not transport.is_closing(): - raise RuntimeError( - f'File descriptor {fd!r} is used by transport ' - f'{transport!r}') - - def _add_reader(self, fd, callback, *args): - self._check_closed() - handle = events.Handle(callback, args, self, None) - key = self._selector.get_map().get(fd) - if key is None: - self._selector.register(fd, selectors.EVENT_READ, - (handle, None)) - else: - mask, (reader, writer) = key.events, key.data - self._selector.modify(fd, mask | selectors.EVENT_READ, - (handle, writer)) - if reader is not None: - reader.cancel() - return handle - - def _remove_reader(self, fd): - if self.is_closed(): - return False - key = self._selector.get_map().get(fd) - if key is None: - return False - mask, (reader, writer) = key.events, key.data - mask &= ~selectors.EVENT_READ - if not mask: - self._selector.unregister(fd) - else: - self._selector.modify(fd, mask, (None, writer)) - - if reader is not None: - reader.cancel() - return True - else: - return False - - def _add_writer(self, fd, callback, *args): - self._check_closed() - handle = events.Handle(callback, args, self, None) - key = self._selector.get_map().get(fd) - if key is None: - self._selector.register(fd, selectors.EVENT_WRITE, - (None, handle)) - else: - mask, (reader, writer) = key.events, key.data - self._selector.modify(fd, mask | selectors.EVENT_WRITE, - (reader, handle)) - if writer is not None: - writer.cancel() - return handle - - def _remove_writer(self, fd): - """Remove a writer callback.""" - if self.is_closed(): - return False - key = self._selector.get_map().get(fd) - if key is None: - return False - mask, (reader, writer) = key.events, key.data - # Remove both writer and connector. - mask &= ~selectors.EVENT_WRITE - if not mask: - self._selector.unregister(fd) - else: - self._selector.modify(fd, mask, (reader, None)) - - if writer is not None: - writer.cancel() - return True - else: - return False - - def add_reader(self, fd, callback, *args): - """Add a reader callback.""" - self._ensure_fd_no_transport(fd) - self._add_reader(fd, callback, *args) - - def remove_reader(self, fd): - """Remove a reader callback.""" - self._ensure_fd_no_transport(fd) - return self._remove_reader(fd) - - def add_writer(self, fd, callback, *args): - """Add a writer callback..""" - self._ensure_fd_no_transport(fd) - self._add_writer(fd, callback, *args) - - def remove_writer(self, fd): - """Remove a writer callback.""" - self._ensure_fd_no_transport(fd) - return self._remove_writer(fd) - - async def sock_recv(self, sock, n): - """Receive data from the socket. - - The return value is a bytes object representing the data received. - The maximum amount of data to be received at once is specified by - nbytes. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - try: - return sock.recv(n) - except (BlockingIOError, InterruptedError): - pass - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - handle = self._add_reader(fd, self._sock_recv, fut, sock, n) - fut.add_done_callback( - functools.partial(self._sock_read_done, fd, handle=handle)) - return await fut - - def _sock_read_done(self, fd, fut, handle=None): - if handle is None or not handle.cancelled(): - self.remove_reader(fd) - - def _sock_recv(self, fut, sock, n): - # _sock_recv() can add itself as an I/O callback if the operation can't - # be done immediately. Don't use it directly, call sock_recv(). - if fut.done(): - return - try: - data = sock.recv(n) - except (BlockingIOError, InterruptedError): - return # try again next time - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(data) - - async def sock_recv_into(self, sock, buf): - """Receive data from the socket. - - The received data is written into *buf* (a writable buffer). - The return value is the number of bytes written. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - try: - return sock.recv_into(buf) - except (BlockingIOError, InterruptedError): - pass - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - handle = self._add_reader(fd, self._sock_recv_into, fut, sock, buf) - fut.add_done_callback( - functools.partial(self._sock_read_done, fd, handle=handle)) - return await fut - - def _sock_recv_into(self, fut, sock, buf): - # _sock_recv_into() can add itself as an I/O callback if the operation - # can't be done immediately. Don't use it directly, call - # sock_recv_into(). - if fut.done(): - return - try: - nbytes = sock.recv_into(buf) - except (BlockingIOError, InterruptedError): - return # try again next time - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(nbytes) - - async def sock_recvfrom(self, sock, bufsize): - """Receive a datagram from a datagram socket. - - The return value is a tuple of (bytes, address) representing the - datagram received and the address it came from. - The maximum amount of data to be received at once is specified by - nbytes. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - try: - return sock.recvfrom(bufsize) - except (BlockingIOError, InterruptedError): - pass - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - handle = self._add_reader(fd, self._sock_recvfrom, fut, sock, bufsize) - fut.add_done_callback( - functools.partial(self._sock_read_done, fd, handle=handle)) - return await fut - - def _sock_recvfrom(self, fut, sock, bufsize): - # _sock_recvfrom() can add itself as an I/O callback if the operation - # can't be done immediately. Don't use it directly, call - # sock_recvfrom(). - if fut.done(): - return - try: - result = sock.recvfrom(bufsize) - except (BlockingIOError, InterruptedError): - return # try again next time - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(result) - - async def sock_recvfrom_into(self, sock, buf, nbytes=0): - """Receive data from the socket. - - The received data is written into *buf* (a writable buffer). - The return value is a tuple of (number of bytes written, address). - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - if not nbytes: - nbytes = len(buf) - - try: - return sock.recvfrom_into(buf, nbytes) - except (BlockingIOError, InterruptedError): - pass - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - handle = self._add_reader(fd, self._sock_recvfrom_into, fut, sock, buf, - nbytes) - fut.add_done_callback( - functools.partial(self._sock_read_done, fd, handle=handle)) - return await fut - - def _sock_recvfrom_into(self, fut, sock, buf, bufsize): - # _sock_recv_into() can add itself as an I/O callback if the operation - # can't be done immediately. Don't use it directly, call - # sock_recv_into(). - if fut.done(): - return - try: - result = sock.recvfrom_into(buf, bufsize) - except (BlockingIOError, InterruptedError): - return # try again next time - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(result) - - async def sock_sendall(self, sock, data): - """Send data to the socket. - - The socket must be connected to a remote socket. This method continues - to send data from data until either all data has been sent or an - error occurs. None is returned on success. On error, an exception is - raised, and there is no way to determine how much data, if any, was - successfully processed by the receiving end of the connection. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - try: - n = sock.send(data) - except (BlockingIOError, InterruptedError): - n = 0 - - if n == len(data): - # all data sent - return - - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - # use a trick with a list in closure to store a mutable state - handle = self._add_writer(fd, self._sock_sendall, fut, sock, - memoryview(data), [n]) - fut.add_done_callback( - functools.partial(self._sock_write_done, fd, handle=handle)) - return await fut - - def _sock_sendall(self, fut, sock, view, pos): - if fut.done(): - # Future cancellation can be scheduled on previous loop iteration - return - start = pos[0] - try: - n = sock.send(view[start:]) - except (BlockingIOError, InterruptedError): - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - return - - start += n - - if start == len(view): - fut.set_result(None) - else: - pos[0] = start - - async def sock_sendto(self, sock, data, address): - """Send data to the socket. - - The socket must be connected to a remote socket. This method continues - to send data from data until either all data has been sent or an - error occurs. None is returned on success. On error, an exception is - raised, and there is no way to determine how much data, if any, was - successfully processed by the receiving end of the connection. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - try: - return sock.sendto(data, address) - except (BlockingIOError, InterruptedError): - pass - - fut = self.create_future() - fd = sock.fileno() - self._ensure_fd_no_transport(fd) - # use a trick with a list in closure to store a mutable state - handle = self._add_writer(fd, self._sock_sendto, fut, sock, data, - address) - fut.add_done_callback( - functools.partial(self._sock_write_done, fd, handle=handle)) - return await fut - - def _sock_sendto(self, fut, sock, data, address): - if fut.done(): - # Future cancellation can be scheduled on previous loop iteration - return - try: - n = sock.sendto(data, 0, address) - except (BlockingIOError, InterruptedError): - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(n) - - async def sock_connect(self, sock, address): - """Connect to a remote socket at address. - - This method is a coroutine. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - - if sock.family == socket.AF_INET or ( - base_events._HAS_IPv6 and sock.family == socket.AF_INET6): - resolved = await self._ensure_resolved( - address, family=sock.family, type=sock.type, proto=sock.proto, - loop=self, - ) - _, _, _, _, address = resolved[0] - - fut = self.create_future() - self._sock_connect(fut, sock, address) - try: - return await fut - finally: - # Needed to break cycles when an exception occurs. - fut = None - - def _sock_connect(self, fut, sock, address): - fd = sock.fileno() - try: - sock.connect(address) - except (BlockingIOError, InterruptedError): - # Issue #23618: When the C function connect() fails with EINTR, the - # connection runs in background. We have to wait until the socket - # becomes writable to be notified when the connection succeed or - # fails. - self._ensure_fd_no_transport(fd) - handle = self._add_writer( - fd, self._sock_connect_cb, fut, sock, address) - fut.add_done_callback( - functools.partial(self._sock_write_done, fd, handle=handle)) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(None) - finally: - fut = None - - def _sock_write_done(self, fd, fut, handle=None): - if handle is None or not handle.cancelled(): - self.remove_writer(fd) - - def _sock_connect_cb(self, fut, sock, address): - if fut.done(): - return - - try: - err = sock.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR) - if err != 0: - # Jump to any except clause below. - raise OSError(err, f'Connect call failed {address}') - except (BlockingIOError, InterruptedError): - # socket is still registered, the callback will be retried later - pass - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result(None) - finally: - fut = None - - async def sock_accept(self, sock): - """Accept a connection. - - The socket must be bound to an address and listening for connections. - The return value is a pair (conn, address) where conn is a new socket - object usable to send and receive data on the connection, and address - is the address bound to the socket on the other end of the connection. - """ - base_events._check_ssl_socket(sock) - if self._debug and sock.gettimeout() != 0: - raise ValueError("the socket must be non-blocking") - fut = self.create_future() - self._sock_accept(fut, sock) - return await fut - - def _sock_accept(self, fut, sock): - fd = sock.fileno() - try: - conn, address = sock.accept() - conn.setblocking(False) - except (BlockingIOError, InterruptedError): - self._ensure_fd_no_transport(fd) - handle = self._add_reader(fd, self._sock_accept, fut, sock) - fut.add_done_callback( - functools.partial(self._sock_read_done, fd, handle=handle)) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - fut.set_exception(exc) - else: - fut.set_result((conn, address)) - - async def _sendfile_native(self, transp, file, offset, count): - del self._transports[transp._sock_fd] - resume_reading = transp.is_reading() - transp.pause_reading() - await transp._make_empty_waiter() - try: - return await self.sock_sendfile(transp._sock, file, offset, count, - fallback=False) - finally: - transp._reset_empty_waiter() - if resume_reading: - transp.resume_reading() - self._transports[transp._sock_fd] = transp - - def _process_events(self, event_list): - for key, mask in event_list: - fileobj, (reader, writer) = key.fileobj, key.data - if mask & selectors.EVENT_READ and reader is not None: - if reader._cancelled: - self._remove_reader(fileobj) - else: - self._add_callback(reader) - if mask & selectors.EVENT_WRITE and writer is not None: - if writer._cancelled: - self._remove_writer(fileobj) - else: - self._add_callback(writer) - - def _stop_serving(self, sock): - self._remove_reader(sock.fileno()) - sock.close() - - -class _SelectorTransport(transports._FlowControlMixin, - transports.Transport): - - max_size = 256 * 1024 # Buffer size passed to recv(). - - # Attribute used in the destructor: it must be set even if the constructor - # is not called (see _SelectorSslTransport which may start by raising an - # exception) - _sock = None - - def __init__(self, loop, sock, protocol, extra=None, server=None): - super().__init__(extra, loop) - self._extra['socket'] = trsock.TransportSocket(sock) - try: - self._extra['sockname'] = sock.getsockname() - except OSError: - self._extra['sockname'] = None - if 'peername' not in self._extra: - try: - self._extra['peername'] = sock.getpeername() - except socket.error: - self._extra['peername'] = None - self._sock = sock - self._sock_fd = sock.fileno() - - self._protocol_connected = False - self.set_protocol(protocol) - - self._server = server - self._buffer = collections.deque() - self._conn_lost = 0 # Set when call to connection_lost scheduled. - self._closing = False # Set when close() called. - self._paused = False # Set when pause_reading() called - - if self._server is not None: - self._server._attach(self) - loop._transports[self._sock_fd] = self - - def __repr__(self): - info = [self.__class__.__name__] - if self._sock is None: - info.append('closed') - elif self._closing: - info.append('closing') - info.append(f'fd={self._sock_fd}') - # test if the transport was closed - if self._loop is not None and not self._loop.is_closed(): - polling = _test_selector_event(self._loop._selector, - self._sock_fd, selectors.EVENT_READ) - if polling: - info.append('read=polling') - else: - info.append('read=idle') - - polling = _test_selector_event(self._loop._selector, - self._sock_fd, - selectors.EVENT_WRITE) - if polling: - state = 'polling' - else: - state = 'idle' - - bufsize = self.get_write_buffer_size() - info.append(f'write=<{state}, bufsize={bufsize}>') - return '<{}>'.format(' '.join(info)) - - def abort(self): - self._force_close(None) - - def set_protocol(self, protocol): - self._protocol = protocol - self._protocol_connected = True - - def get_protocol(self): - return self._protocol - - def is_closing(self): - return self._closing - - def is_reading(self): - return not self.is_closing() and not self._paused - - def pause_reading(self): - if not self.is_reading(): - return - self._paused = True - self._loop._remove_reader(self._sock_fd) - if self._loop.get_debug(): - logger.debug("%r pauses reading", self) - - def resume_reading(self): - if self._closing or not self._paused: - return - self._paused = False - self._add_reader(self._sock_fd, self._read_ready) - if self._loop.get_debug(): - logger.debug("%r resumes reading", self) - - def close(self): - if self._closing: - return - self._closing = True - self._loop._remove_reader(self._sock_fd) - if not self._buffer: - self._conn_lost += 1 - self._loop._remove_writer(self._sock_fd) - self._loop.call_soon(self._call_connection_lost, None) - - def __del__(self, _warn=warnings.warn): - if self._sock is not None: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self._sock.close() - if self._server is not None: - self._server._detach(self) - - def _fatal_error(self, exc, message='Fatal error on transport'): - # Should be called from exception handler only. - if isinstance(exc, OSError): - if self._loop.get_debug(): - logger.debug("%r: %s", self, message, exc_info=True) - else: - self._loop.call_exception_handler({ - 'message': message, - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - self._force_close(exc) - - def _force_close(self, exc): - if self._conn_lost: - return - if self._buffer: - self._buffer.clear() - self._loop._remove_writer(self._sock_fd) - if not self._closing: - self._closing = True - self._loop._remove_reader(self._sock_fd) - self._conn_lost += 1 - self._loop.call_soon(self._call_connection_lost, exc) - - def _call_connection_lost(self, exc): - try: - if self._protocol_connected: - self._protocol.connection_lost(exc) - finally: - self._sock.close() - self._sock = None - self._protocol = None - self._loop = None - server = self._server - if server is not None: - server._detach(self) - self._server = None - - def get_write_buffer_size(self): - return sum(map(len, self._buffer)) - - def _add_reader(self, fd, callback, *args): - if not self.is_reading(): - return - self._loop._add_reader(fd, callback, *args) - - -class _SelectorSocketTransport(_SelectorTransport): - - _start_tls_compatible = True - _sendfile_compatible = constants._SendfileMode.TRY_NATIVE - - def __init__(self, loop, sock, protocol, waiter=None, - extra=None, server=None): - - self._read_ready_cb = None - super().__init__(loop, sock, protocol, extra, server) - self._eof = False - self._empty_waiter = None - if _HAS_SENDMSG: - self._write_ready = self._write_sendmsg - else: - self._write_ready = self._write_send - # Disable the Nagle algorithm -- small writes will be - # sent without waiting for the TCP ACK. This generally - # decreases the latency (in some cases significantly.) - base_events._set_nodelay(self._sock) - - self._loop.call_soon(self._protocol.connection_made, self) - # only start reading when connection_made() has been called - self._loop.call_soon(self._add_reader, - self._sock_fd, self._read_ready) - if waiter is not None: - # only wake up the waiter when connection_made() has been called - self._loop.call_soon(futures._set_result_unless_cancelled, - waiter, None) - - def set_protocol(self, protocol): - if isinstance(protocol, protocols.BufferedProtocol): - self._read_ready_cb = self._read_ready__get_buffer - else: - self._read_ready_cb = self._read_ready__data_received - - super().set_protocol(protocol) - - def _read_ready(self): - self._read_ready_cb() - - def _read_ready__get_buffer(self): - if self._conn_lost: - return - - try: - buf = self._protocol.get_buffer(-1) - if not len(buf): - raise RuntimeError('get_buffer() returned an empty buffer') - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal error: protocol.get_buffer() call failed.') - return - - try: - nbytes = self._sock.recv_into(buf) - except (BlockingIOError, InterruptedError): - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error(exc, 'Fatal read error on socket transport') - return - - if not nbytes: - self._read_ready__on_eof() - return - - try: - self._protocol.buffer_updated(nbytes) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal error: protocol.buffer_updated() call failed.') - - def _read_ready__data_received(self): - if self._conn_lost: - return - try: - data = self._sock.recv(self.max_size) - except (BlockingIOError, InterruptedError): - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error(exc, 'Fatal read error on socket transport') - return - - if not data: - self._read_ready__on_eof() - return - - try: - self._protocol.data_received(data) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal error: protocol.data_received() call failed.') - - def _read_ready__on_eof(self): - if self._loop.get_debug(): - logger.debug("%r received EOF", self) - - try: - keep_open = self._protocol.eof_received() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal error: protocol.eof_received() call failed.') - return - - if keep_open: - # We're keeping the connection open so the - # protocol can write more, but we still can't - # receive more, so remove the reader callback. - self._loop._remove_reader(self._sock_fd) - else: - self.close() - - def write(self, data): - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError(f'data argument must be a bytes, bytearray, or memoryview ' - f'object, not {type(data).__name__!r}') - if self._eof: - raise RuntimeError('Cannot call write() after write_eof()') - if self._empty_waiter is not None: - raise RuntimeError('unable to write; sendfile is in progress') - if not data: - return - - if self._conn_lost: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('socket.send() raised exception.') - self._conn_lost += 1 - return - - if not self._buffer: - # Optimization: try to send now. - try: - n = self._sock.send(data) - except (BlockingIOError, InterruptedError): - pass - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error(exc, 'Fatal write error on socket transport') - return - else: - data = memoryview(data)[n:] - if not data: - return - # Not all was written; register write handler. - self._loop._add_writer(self._sock_fd, self._write_ready) - - # Add it to the buffer. - self._buffer.append(data) - self._maybe_pause_protocol() - - def _get_sendmsg_buffer(self): - return itertools.islice(self._buffer, SC_IOV_MAX) - - def _write_sendmsg(self): - assert self._buffer, 'Data should not be empty' - if self._conn_lost: - return - try: - nbytes = self._sock.sendmsg(self._get_sendmsg_buffer()) - self._adjust_leftover_buffer(nbytes) - except (BlockingIOError, InterruptedError): - pass - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._loop._remove_writer(self._sock_fd) - self._buffer.clear() - self._fatal_error(exc, 'Fatal write error on socket transport') - if self._empty_waiter is not None: - self._empty_waiter.set_exception(exc) - else: - self._maybe_resume_protocol() # May append to buffer. - if not self._buffer: - self._loop._remove_writer(self._sock_fd) - if self._empty_waiter is not None: - self._empty_waiter.set_result(None) - if self._closing: - self._call_connection_lost(None) - elif self._eof: - self._sock.shutdown(socket.SHUT_WR) - - def _adjust_leftover_buffer(self, nbytes: int) -> None: - buffer = self._buffer - while nbytes: - b = buffer.popleft() - b_len = len(b) - if b_len <= nbytes: - nbytes -= b_len - else: - buffer.appendleft(b[nbytes:]) - break - - def _write_send(self): - assert self._buffer, 'Data should not be empty' - if self._conn_lost: - return - try: - buffer = self._buffer.popleft() - n = self._sock.send(buffer) - if n != len(buffer): - # Not all data was written - self._buffer.appendleft(buffer[n:]) - except (BlockingIOError, InterruptedError): - pass - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._loop._remove_writer(self._sock_fd) - self._buffer.clear() - self._fatal_error(exc, 'Fatal write error on socket transport') - if self._empty_waiter is not None: - self._empty_waiter.set_exception(exc) - else: - self._maybe_resume_protocol() # May append to buffer. - if not self._buffer: - self._loop._remove_writer(self._sock_fd) - if self._empty_waiter is not None: - self._empty_waiter.set_result(None) - if self._closing: - self._call_connection_lost(None) - elif self._eof: - self._sock.shutdown(socket.SHUT_WR) - - def write_eof(self): - if self._closing or self._eof: - return - self._eof = True - if not self._buffer: - self._sock.shutdown(socket.SHUT_WR) - - def writelines(self, list_of_data): - if self._eof: - raise RuntimeError('Cannot call writelines() after write_eof()') - if self._empty_waiter is not None: - raise RuntimeError('unable to writelines; sendfile is in progress') - if not list_of_data: - return - - if self._conn_lost: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('socket.send() raised exception.') - self._conn_lost += 1 - return - - self._buffer.extend([memoryview(data) for data in list_of_data]) - self._write_ready() - # If the entire buffer couldn't be written, register a write handler - if self._buffer: - self._loop._add_writer(self._sock_fd, self._write_ready) - self._maybe_pause_protocol() - - def can_write_eof(self): - return True - - def _call_connection_lost(self, exc): - try: - super()._call_connection_lost(exc) - finally: - self._write_ready = None - if self._empty_waiter is not None: - self._empty_waiter.set_exception( - ConnectionError("Connection is closed by peer")) - - def _make_empty_waiter(self): - if self._empty_waiter is not None: - raise RuntimeError("Empty waiter is already set") - self._empty_waiter = self._loop.create_future() - if not self._buffer: - self._empty_waiter.set_result(None) - return self._empty_waiter - - def _reset_empty_waiter(self): - self._empty_waiter = None - - def close(self): - self._read_ready_cb = None - super().close() - - -class _SelectorDatagramTransport(_SelectorTransport, transports.DatagramTransport): - - _buffer_factory = collections.deque - _header_size = 8 - - def __init__(self, loop, sock, protocol, address=None, - waiter=None, extra=None): - super().__init__(loop, sock, protocol, extra) - self._address = address - self._buffer_size = 0 - self._loop.call_soon(self._protocol.connection_made, self) - # only start reading when connection_made() has been called - self._loop.call_soon(self._add_reader, - self._sock_fd, self._read_ready) - if waiter is not None: - # only wake up the waiter when connection_made() has been called - self._loop.call_soon(futures._set_result_unless_cancelled, - waiter, None) - - def get_write_buffer_size(self): - return self._buffer_size - - def _read_ready(self): - if self._conn_lost: - return - try: - data, addr = self._sock.recvfrom(self.max_size) - except (BlockingIOError, InterruptedError): - pass - except OSError as exc: - self._protocol.error_received(exc) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error(exc, 'Fatal read error on datagram transport') - else: - self._protocol.datagram_received(data, addr) - - def sendto(self, data, addr=None): - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError(f'data argument must be a bytes-like object, ' - f'not {type(data).__name__!r}') - - if self._address: - if addr not in (None, self._address): - raise ValueError( - f'Invalid address: must be None or {self._address}') - addr = self._address - - if self._conn_lost and self._address: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('socket.send() raised exception.') - self._conn_lost += 1 - return - - if not self._buffer: - # Attempt to send it right away first. - try: - if self._extra['peername']: - self._sock.send(data) - else: - self._sock.sendto(data, addr) - return - except (BlockingIOError, InterruptedError): - self._loop._add_writer(self._sock_fd, self._sendto_ready) - except OSError as exc: - self._protocol.error_received(exc) - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal write error on datagram transport') - return - - # Ensure that what we buffer is immutable. - self._buffer.append((bytes(data), addr)) - self._buffer_size += len(data) + self._header_size - self._maybe_pause_protocol() - - def _sendto_ready(self): - while self._buffer: - data, addr = self._buffer.popleft() - self._buffer_size -= len(data) + self._header_size - try: - if self._extra['peername']: - self._sock.send(data) - else: - self._sock.sendto(data, addr) - except (BlockingIOError, InterruptedError): - self._buffer.appendleft((data, addr)) # Try again later. - self._buffer_size += len(data) + self._header_size - break - except OSError as exc: - self._protocol.error_received(exc) - return - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._fatal_error( - exc, 'Fatal write error on datagram transport') - return - - self._maybe_resume_protocol() # May append to buffer. - if not self._buffer: - self._loop._remove_writer(self._sock_fd) - if self._closing: - self._call_connection_lost(None) diff --git a/Python314_4_x86_Template/Lib/asyncio/sslproto.py b/Python314_4_x86_Template/Lib/asyncio/sslproto.py deleted file mode 100644 index 74c5f0d5c..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/sslproto.py +++ /dev/null @@ -1,929 +0,0 @@ -# Contains code from https://github.com/MagicStack/uvloop/tree/v0.16.0 -# SPDX-License-Identifier: PSF-2.0 AND (MIT OR Apache-2.0) -# SPDX-FileCopyrightText: Copyright (c) 2015-2021 MagicStack Inc. http://magic.io - -import collections -import enum -import warnings -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -from . import constants -from . import exceptions -from . import protocols -from . import transports -from .log import logger - -if ssl is not None: - SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError) - - -class SSLProtocolState(enum.Enum): - UNWRAPPED = "UNWRAPPED" - DO_HANDSHAKE = "DO_HANDSHAKE" - WRAPPED = "WRAPPED" - FLUSHING = "FLUSHING" - SHUTDOWN = "SHUTDOWN" - - -class AppProtocolState(enum.Enum): - # This tracks the state of app protocol (https://git.io/fj59P): - # - # INIT -cm-> CON_MADE [-dr*->] [-er-> EOF?] -cl-> CON_LOST - # - # * cm: connection_made() - # * dr: data_received() - # * er: eof_received() - # * cl: connection_lost() - - STATE_INIT = "STATE_INIT" - STATE_CON_MADE = "STATE_CON_MADE" - STATE_EOF = "STATE_EOF" - STATE_CON_LOST = "STATE_CON_LOST" - - -def _create_transport_context(server_side, server_hostname): - if server_side: - raise ValueError('Server side SSL needs a valid SSLContext') - - # Client side may pass ssl=True to use a default - # context; in that case the sslcontext passed is None. - # The default is secure for client connections. - # Python 3.4+: use up-to-date strong settings. - sslcontext = ssl.create_default_context() - if not server_hostname: - sslcontext.check_hostname = False - return sslcontext - - -def add_flowcontrol_defaults(high, low, kb): - if high is None: - if low is None: - hi = kb * 1024 - else: - lo = low - hi = 4 * lo - else: - hi = high - if low is None: - lo = hi // 4 - else: - lo = low - - if not hi >= lo >= 0: - raise ValueError('high (%r) must be >= low (%r) must be >= 0' % - (hi, lo)) - - return hi, lo - - -class _SSLProtocolTransport(transports._FlowControlMixin, - transports.Transport): - - _start_tls_compatible = True - _sendfile_compatible = constants._SendfileMode.FALLBACK - - def __init__(self, loop, ssl_protocol): - self._loop = loop - self._ssl_protocol = ssl_protocol - self._closed = False - - def get_extra_info(self, name, default=None): - """Get optional transport information.""" - return self._ssl_protocol._get_extra_info(name, default) - - def set_protocol(self, protocol): - self._ssl_protocol._set_app_protocol(protocol) - - def get_protocol(self): - return self._ssl_protocol._app_protocol - - def is_closing(self): - return self._closed or self._ssl_protocol._is_transport_closing() - - def close(self): - """Close the transport. - - Buffered data will be flushed asynchronously. No more data - will be received. After all buffered data is flushed, the - protocol's connection_lost() method will (eventually) called - with None as its argument. - """ - if not self._closed: - self._closed = True - self._ssl_protocol._start_shutdown() - else: - self._ssl_protocol = None - - def __del__(self, _warnings=warnings): - if not self._closed: - self._closed = True - _warnings.warn( - "unclosed transport <asyncio._SSLProtocolTransport " - "object>", ResourceWarning) - - def is_reading(self): - return not self._ssl_protocol._app_reading_paused - - def pause_reading(self): - """Pause the receiving end. - - No data will be passed to the protocol's data_received() - method until resume_reading() is called. - """ - self._ssl_protocol._pause_reading() - - def resume_reading(self): - """Resume the receiving end. - - Data received will once again be passed to the protocol's - data_received() method. - """ - self._ssl_protocol._resume_reading() - - def set_write_buffer_limits(self, high=None, low=None): - """Set the high- and low-water limits for write flow control. - - These two values control when to call the protocol's - pause_writing() and resume_writing() methods. If specified, - the low-water limit must be less than or equal to the - high-water limit. Neither value can be negative. - - The defaults are implementation-specific. If only the - high-water limit is given, the low-water limit defaults to an - implementation-specific value less than or equal to the - high-water limit. Setting high to zero forces low to zero as - well, and causes pause_writing() to be called whenever the - buffer becomes non-empty. Setting low to zero causes - resume_writing() to be called only once the buffer is empty. - Use of zero for either limit is generally sub-optimal as it - reduces opportunities for doing I/O and computation - concurrently. - """ - self._ssl_protocol._set_write_buffer_limits(high, low) - self._ssl_protocol._control_app_writing() - - def get_write_buffer_limits(self): - return (self._ssl_protocol._outgoing_low_water, - self._ssl_protocol._outgoing_high_water) - - def get_write_buffer_size(self): - """Return the current size of the write buffers.""" - return self._ssl_protocol._get_write_buffer_size() - - def set_read_buffer_limits(self, high=None, low=None): - """Set the high- and low-water limits for read flow control. - - These two values control when to call the upstream transport's - pause_reading() and resume_reading() methods. If specified, - the low-water limit must be less than or equal to the - high-water limit. Neither value can be negative. - - The defaults are implementation-specific. If only the - high-water limit is given, the low-water limit defaults to an - implementation-specific value less than or equal to the - high-water limit. Setting high to zero forces low to zero as - well, and causes pause_reading() to be called whenever the - buffer becomes non-empty. Setting low to zero causes - resume_reading() to be called only once the buffer is empty. - Use of zero for either limit is generally sub-optimal as it - reduces opportunities for doing I/O and computation - concurrently. - """ - self._ssl_protocol._set_read_buffer_limits(high, low) - self._ssl_protocol._control_ssl_reading() - - def get_read_buffer_limits(self): - return (self._ssl_protocol._incoming_low_water, - self._ssl_protocol._incoming_high_water) - - def get_read_buffer_size(self): - """Return the current size of the read buffer.""" - return self._ssl_protocol._get_read_buffer_size() - - @property - def _protocol_paused(self): - # Required for sendfile fallback pause_writing/resume_writing logic - return self._ssl_protocol._app_writing_paused - - def write(self, data): - """Write some data bytes to the transport. - - This does not block; it buffers the data and arranges for it - to be sent out asynchronously. - """ - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError(f"data: expecting a bytes-like instance, " - f"got {type(data).__name__}") - if not data: - return - self._ssl_protocol._write_appdata((data,)) - - def writelines(self, list_of_data): - """Write a list (or any iterable) of data bytes to the transport. - - The default implementation concatenates the arguments and - calls write() on the result. - """ - self._ssl_protocol._write_appdata(list_of_data) - - def write_eof(self): - """Close the write end after flushing buffered data. - - This raises :exc:`NotImplementedError` right now. - """ - raise NotImplementedError - - def can_write_eof(self): - """Return True if this transport supports write_eof(), False if not.""" - return False - - def abort(self): - """Close the transport immediately. - - Buffered data will be lost. No more data will be received. - The protocol's connection_lost() method will (eventually) be - called with None as its argument. - """ - self._force_close(None) - - def _force_close(self, exc): - self._closed = True - if self._ssl_protocol is not None: - self._ssl_protocol._abort(exc) - - def _test__append_write_backlog(self, data): - # for test only - self._ssl_protocol._write_backlog.append(data) - self._ssl_protocol._write_buffer_size += len(data) - - -class SSLProtocol(protocols.BufferedProtocol): - max_size = 256 * 1024 # Buffer size passed to read() - - _handshake_start_time = None - _handshake_timeout_handle = None - _shutdown_timeout_handle = None - - def __init__(self, loop, app_protocol, sslcontext, waiter, - server_side=False, server_hostname=None, - call_connection_made=True, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - if ssl is None: - raise RuntimeError("stdlib ssl module not available") - - self._ssl_buffer = bytearray(self.max_size) - self._ssl_buffer_view = memoryview(self._ssl_buffer) - - if ssl_handshake_timeout is None: - ssl_handshake_timeout = constants.SSL_HANDSHAKE_TIMEOUT - elif ssl_handshake_timeout <= 0: - raise ValueError( - f"ssl_handshake_timeout should be a positive number, " - f"got {ssl_handshake_timeout}") - if ssl_shutdown_timeout is None: - ssl_shutdown_timeout = constants.SSL_SHUTDOWN_TIMEOUT - elif ssl_shutdown_timeout <= 0: - raise ValueError( - f"ssl_shutdown_timeout should be a positive number, " - f"got {ssl_shutdown_timeout}") - - if not sslcontext: - sslcontext = _create_transport_context( - server_side, server_hostname) - - self._server_side = server_side - if server_hostname and not server_side: - self._server_hostname = server_hostname - else: - self._server_hostname = None - self._sslcontext = sslcontext - # SSL-specific extra info. More info are set when the handshake - # completes. - self._extra = dict(sslcontext=sslcontext) - - # App data write buffering - self._write_backlog = collections.deque() - self._write_buffer_size = 0 - - self._waiter = waiter - self._loop = loop - self._set_app_protocol(app_protocol) - self._app_transport = None - self._app_transport_created = False - # transport, ex: SelectorSocketTransport - self._transport = None - self._ssl_handshake_timeout = ssl_handshake_timeout - self._ssl_shutdown_timeout = ssl_shutdown_timeout - # SSL and state machine - self._incoming = ssl.MemoryBIO() - self._outgoing = ssl.MemoryBIO() - self._state = SSLProtocolState.UNWRAPPED - self._conn_lost = 0 # Set when connection_lost called - if call_connection_made: - self._app_state = AppProtocolState.STATE_INIT - else: - self._app_state = AppProtocolState.STATE_CON_MADE - self._sslobj = self._sslcontext.wrap_bio( - self._incoming, self._outgoing, - server_side=self._server_side, - server_hostname=self._server_hostname) - - # Flow Control - - self._ssl_writing_paused = False - - self._app_reading_paused = False - - self._ssl_reading_paused = False - self._incoming_high_water = 0 - self._incoming_low_water = 0 - self._set_read_buffer_limits() - self._eof_received = False - - self._app_writing_paused = False - self._outgoing_high_water = 0 - self._outgoing_low_water = 0 - self._set_write_buffer_limits() - self._get_app_transport() - - def _set_app_protocol(self, app_protocol): - self._app_protocol = app_protocol - # Make fast hasattr check first - if (hasattr(app_protocol, 'get_buffer') and - isinstance(app_protocol, protocols.BufferedProtocol)): - self._app_protocol_get_buffer = app_protocol.get_buffer - self._app_protocol_buffer_updated = app_protocol.buffer_updated - self._app_protocol_is_buffer = True - else: - self._app_protocol_is_buffer = False - - def _wakeup_waiter(self, exc=None): - if self._waiter is None: - return - if not self._waiter.cancelled(): - if exc is not None: - self._waiter.set_exception(exc) - else: - self._waiter.set_result(None) - self._waiter = None - - def _get_app_transport(self): - if self._app_transport is None: - if self._app_transport_created: - raise RuntimeError('Creating _SSLProtocolTransport twice') - self._app_transport = _SSLProtocolTransport(self._loop, self) - self._app_transport_created = True - return self._app_transport - - def _is_transport_closing(self): - return self._transport is not None and self._transport.is_closing() - - def connection_made(self, transport): - """Called when the low-level connection is made. - - Start the SSL handshake. - """ - self._transport = transport - self._start_handshake() - - def connection_lost(self, exc): - """Called when the low-level connection is lost or closed. - - The argument is an exception object or None (the latter - meaning a regular EOF is received or the connection was - aborted or closed). - """ - self._write_backlog.clear() - self._outgoing.read() - self._conn_lost += 1 - - # Just mark the app transport as closed so that its __dealloc__ - # doesn't complain. - if self._app_transport is not None: - self._app_transport._closed = True - - if self._state != SSLProtocolState.DO_HANDSHAKE: - if ( - self._app_state == AppProtocolState.STATE_CON_MADE or - self._app_state == AppProtocolState.STATE_EOF - ): - self._app_state = AppProtocolState.STATE_CON_LOST - self._loop.call_soon(self._app_protocol.connection_lost, exc) - self._set_state(SSLProtocolState.UNWRAPPED) - self._transport = None - self._app_transport = None - self._app_protocol = None - self._wakeup_waiter(exc) - - if self._shutdown_timeout_handle: - self._shutdown_timeout_handle.cancel() - self._shutdown_timeout_handle = None - if self._handshake_timeout_handle: - self._handshake_timeout_handle.cancel() - self._handshake_timeout_handle = None - - def get_buffer(self, n): - want = n - if want <= 0 or want > self.max_size: - want = self.max_size - if len(self._ssl_buffer) < want: - self._ssl_buffer = bytearray(want) - self._ssl_buffer_view = memoryview(self._ssl_buffer) - return self._ssl_buffer_view - - def buffer_updated(self, nbytes): - self._incoming.write(self._ssl_buffer_view[:nbytes]) - - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._do_handshake() - - elif self._state == SSLProtocolState.WRAPPED: - self._do_read() - - elif self._state == SSLProtocolState.FLUSHING: - self._do_flush() - - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() - - def eof_received(self): - """Called when the other end of the low-level stream - is half-closed. - - If this returns a false value (including None), the transport - will close itself. If it returns a true value, closing the - transport is up to the protocol. - """ - self._eof_received = True - try: - if self._loop.get_debug(): - logger.debug("%r received EOF", self) - - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._on_handshake_complete(ConnectionResetError) - - elif self._state == SSLProtocolState.WRAPPED: - self._set_state(SSLProtocolState.FLUSHING) - if self._app_reading_paused: - return True - else: - self._do_flush() - - elif self._state == SSLProtocolState.FLUSHING: - self._do_write() - self._set_state(SSLProtocolState.SHUTDOWN) - self._do_shutdown() - - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() - - except Exception: - self._transport.close() - raise - - def _get_extra_info(self, name, default=None): - if name in self._extra: - return self._extra[name] - elif self._transport is not None: - return self._transport.get_extra_info(name, default) - else: - return default - - def _set_state(self, new_state): - allowed = False - - if new_state == SSLProtocolState.UNWRAPPED: - allowed = True - - elif ( - self._state == SSLProtocolState.UNWRAPPED and - new_state == SSLProtocolState.DO_HANDSHAKE - ): - allowed = True - - elif ( - self._state == SSLProtocolState.DO_HANDSHAKE and - new_state == SSLProtocolState.WRAPPED - ): - allowed = True - - elif ( - self._state == SSLProtocolState.WRAPPED and - new_state == SSLProtocolState.FLUSHING - ): - allowed = True - - elif ( - self._state == SSLProtocolState.FLUSHING and - new_state == SSLProtocolState.SHUTDOWN - ): - allowed = True - - if allowed: - self._state = new_state - - else: - raise RuntimeError( - 'cannot switch state from {} to {}'.format( - self._state, new_state)) - - # Handshake flow - - def _start_handshake(self): - if self._loop.get_debug(): - logger.debug("%r starts SSL handshake", self) - self._handshake_start_time = self._loop.time() - else: - self._handshake_start_time = None - - self._set_state(SSLProtocolState.DO_HANDSHAKE) - - # start handshake timeout count down - self._handshake_timeout_handle = \ - self._loop.call_later(self._ssl_handshake_timeout, - self._check_handshake_timeout) - - self._do_handshake() - - def _check_handshake_timeout(self): - if self._state == SSLProtocolState.DO_HANDSHAKE: - msg = ( - f"SSL handshake is taking longer than " - f"{self._ssl_handshake_timeout} seconds: " - f"aborting the connection" - ) - self._fatal_error(ConnectionAbortedError(msg)) - - def _do_handshake(self): - try: - self._sslobj.do_handshake() - except SSLAgainErrors: - self._process_outgoing() - except ssl.SSLError as exc: - self._on_handshake_complete(exc) - else: - self._on_handshake_complete(None) - - def _on_handshake_complete(self, handshake_exc): - if self._handshake_timeout_handle is not None: - self._handshake_timeout_handle.cancel() - self._handshake_timeout_handle = None - - sslobj = self._sslobj - try: - if handshake_exc is None: - self._set_state(SSLProtocolState.WRAPPED) - else: - raise handshake_exc - - peercert = sslobj.getpeercert() - except Exception as exc: - handshake_exc = None - self._set_state(SSLProtocolState.UNWRAPPED) - if isinstance(exc, ssl.CertificateError): - msg = 'SSL handshake failed on verifying the certificate' - else: - msg = 'SSL handshake failed' - self._fatal_error(exc, msg) - self._wakeup_waiter(exc) - return - - if self._loop.get_debug(): - dt = self._loop.time() - self._handshake_start_time - logger.debug("%r: SSL handshake took %.1f ms", self, dt * 1e3) - - # Add extra info that becomes available after handshake. - self._extra.update(peercert=peercert, - cipher=sslobj.cipher(), - compression=sslobj.compression(), - ssl_object=sslobj) - if self._app_state == AppProtocolState.STATE_INIT: - self._app_state = AppProtocolState.STATE_CON_MADE - self._app_protocol.connection_made(self._get_app_transport()) - self._wakeup_waiter() - self._do_read() - - # Shutdown flow - - def _start_shutdown(self): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN, - SSLProtocolState.UNWRAPPED - ) - ): - return - if self._app_transport is not None: - self._app_transport._closed = True - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._abort(None) - else: - self._set_state(SSLProtocolState.FLUSHING) - self._shutdown_timeout_handle = self._loop.call_later( - self._ssl_shutdown_timeout, - self._check_shutdown_timeout - ) - self._do_flush() - - def _check_shutdown_timeout(self): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN - ) - ): - self._transport._force_close( - exceptions.TimeoutError('SSL shutdown timed out')) - - def _do_flush(self): - self._do_read() - self._set_state(SSLProtocolState.SHUTDOWN) - self._do_shutdown() - - def _do_shutdown(self): - try: - if not self._eof_received: - self._sslobj.unwrap() - except SSLAgainErrors: - self._process_outgoing() - except ssl.SSLError as exc: - self._on_shutdown_complete(exc) - else: - self._process_outgoing() - self._call_eof_received() - self._on_shutdown_complete(None) - - def _on_shutdown_complete(self, shutdown_exc): - if self._shutdown_timeout_handle is not None: - self._shutdown_timeout_handle.cancel() - self._shutdown_timeout_handle = None - - if shutdown_exc: - self._fatal_error(shutdown_exc) - else: - self._loop.call_soon(self._transport.close) - - def _abort(self, exc): - self._set_state(SSLProtocolState.UNWRAPPED) - if self._transport is not None: - self._transport._force_close(exc) - - # Outgoing flow - - def _write_appdata(self, list_of_data): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN, - SSLProtocolState.UNWRAPPED - ) - ): - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('SSL connection is closed') - self._conn_lost += 1 - return - - for data in list_of_data: - self._write_backlog.append(data) - self._write_buffer_size += len(data) - - try: - if self._state == SSLProtocolState.WRAPPED: - self._do_write() - - except Exception as ex: - self._fatal_error(ex, 'Fatal error on SSL protocol') - - def _do_write(self): - try: - while self._write_backlog: - data = self._write_backlog[0] - count = self._sslobj.write(data) - data_len = len(data) - if count < data_len: - self._write_backlog[0] = data[count:] - self._write_buffer_size -= count - else: - del self._write_backlog[0] - self._write_buffer_size -= data_len - except SSLAgainErrors: - pass - self._process_outgoing() - - def _process_outgoing(self): - if not self._ssl_writing_paused: - data = self._outgoing.read() - if len(data): - self._transport.write(data) - self._control_app_writing() - - # Incoming flow - - def _do_read(self): - if ( - self._state not in ( - SSLProtocolState.WRAPPED, - SSLProtocolState.FLUSHING, - ) - ): - return - try: - if not self._app_reading_paused: - if self._app_protocol_is_buffer: - self._do_read__buffered() - else: - self._do_read__copied() - if self._write_backlog: - self._do_write() - else: - self._process_outgoing() - self._control_ssl_reading() - except Exception as ex: - self._fatal_error(ex, 'Fatal error on SSL protocol') - - def _do_read__buffered(self): - offset = 0 - count = 1 - - buf = self._app_protocol_get_buffer(self._get_read_buffer_size()) - wants = len(buf) - - try: - count = self._sslobj.read(wants, buf) - - if count > 0: - offset = count - while offset < wants: - count = self._sslobj.read(wants - offset, buf[offset:]) - if count > 0: - offset += count - else: - break - else: - self._loop.call_soon(self._do_read) - except SSLAgainErrors: - pass - if offset > 0: - self._app_protocol_buffer_updated(offset) - if not count: - # close_notify - self._call_eof_received() - self._start_shutdown() - - def _do_read__copied(self): - chunk = b'1' - zero = True - one = False - - try: - while True: - chunk = self._sslobj.read(self.max_size) - if not chunk: - break - if zero: - zero = False - one = True - first = chunk - elif one: - one = False - data = [first, chunk] - else: - data.append(chunk) - except SSLAgainErrors: - pass - if one: - self._app_protocol.data_received(first) - elif not zero: - self._app_protocol.data_received(b''.join(data)) - if not chunk: - # close_notify - self._call_eof_received() - self._start_shutdown() - - def _call_eof_received(self): - try: - if self._app_state == AppProtocolState.STATE_CON_MADE: - self._app_state = AppProtocolState.STATE_EOF - keep_open = self._app_protocol.eof_received() - if keep_open: - logger.warning('returning true from eof_received() ' - 'has no effect when using ssl') - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as ex: - self._fatal_error(ex, 'Error calling eof_received()') - - # Flow control for writes from APP socket - - def _control_app_writing(self): - size = self._get_write_buffer_size() - if size >= self._outgoing_high_water and not self._app_writing_paused: - self._app_writing_paused = True - try: - self._app_protocol.pause_writing() - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.pause_writing() failed', - 'exception': exc, - 'transport': self._app_transport, - 'protocol': self, - }) - elif size <= self._outgoing_low_water and self._app_writing_paused: - self._app_writing_paused = False - try: - self._app_protocol.resume_writing() - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.resume_writing() failed', - 'exception': exc, - 'transport': self._app_transport, - 'protocol': self, - }) - - def _get_write_buffer_size(self): - return self._outgoing.pending + self._write_buffer_size - - def _set_write_buffer_limits(self, high=None, low=None): - high, low = add_flowcontrol_defaults( - high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_WRITE) - self._outgoing_high_water = high - self._outgoing_low_water = low - - # Flow control for reads to APP socket - - def _pause_reading(self): - self._app_reading_paused = True - - def _resume_reading(self): - if self._app_reading_paused: - self._app_reading_paused = False - - def resume(): - if self._state == SSLProtocolState.WRAPPED: - self._do_read() - elif self._state == SSLProtocolState.FLUSHING: - self._do_flush() - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() - self._loop.call_soon(resume) - - # Flow control for reads from SSL socket - - def _control_ssl_reading(self): - size = self._get_read_buffer_size() - if size >= self._incoming_high_water and not self._ssl_reading_paused: - self._ssl_reading_paused = True - self._transport.pause_reading() - elif size <= self._incoming_low_water and self._ssl_reading_paused: - self._ssl_reading_paused = False - self._transport.resume_reading() - - def _set_read_buffer_limits(self, high=None, low=None): - high, low = add_flowcontrol_defaults( - high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_READ) - self._incoming_high_water = high - self._incoming_low_water = low - - def _get_read_buffer_size(self): - return self._incoming.pending - - # Flow control for writes to SSL socket - - def pause_writing(self): - """Called when the low-level transport's buffer goes over - the high-water mark. - """ - assert not self._ssl_writing_paused - self._ssl_writing_paused = True - - def resume_writing(self): - """Called when the low-level transport's buffer drains below - the low-water mark. - """ - assert self._ssl_writing_paused - self._ssl_writing_paused = False - self._process_outgoing() - - def _fatal_error(self, exc, message='Fatal error on transport'): - if self._transport: - self._transport._force_close(exc) - - if isinstance(exc, OSError): - if self._loop.get_debug(): - logger.debug("%r: %s", self, message, exc_info=True) - elif not isinstance(exc, exceptions.CancelledError): - self._loop.call_exception_handler({ - 'message': message, - 'exception': exc, - 'transport': self._transport, - 'protocol': self, - }) diff --git a/Python314_4_x86_Template/Lib/asyncio/staggered.py b/Python314_4_x86_Template/Lib/asyncio/staggered.py deleted file mode 100644 index 2ad65d864..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/staggered.py +++ /dev/null @@ -1,179 +0,0 @@ -"""Support for running coroutines in parallel with staggered start times.""" - -__all__ = 'staggered_race', - -import contextlib - -from . import events -from . import exceptions as exceptions_mod -from . import locks -from . import tasks -from . import futures - - -async def staggered_race(coro_fns, delay, *, loop=None): - """Run coroutines with staggered start times and take the first to finish. - - This method takes an iterable of coroutine functions. The first one is - started immediately. From then on, whenever the immediately preceding one - fails (raises an exception), or when *delay* seconds has passed, the next - coroutine is started. This continues until one of the coroutines complete - successfully, in which case all others are cancelled, or until all - coroutines fail. - - The coroutines provided should be well-behaved in the following way: - - * They should only ``return`` if completed successfully. - - * They should always raise an exception if they did not complete - successfully. In particular, if they handle cancellation, they should - probably reraise, like this:: - - try: - # do work - except asyncio.CancelledError: - # undo partially completed work - raise - - Args: - coro_fns: an iterable of coroutine functions, i.e. callables that - return a coroutine object when called. Use ``functools.partial`` or - lambdas to pass arguments. - - delay: amount of time, in seconds, between starting coroutines. If - ``None``, the coroutines will run sequentially. - - loop: the event loop to use. - - Returns: - tuple *(winner_result, winner_index, exceptions)* where - - - *winner_result*: the result of the winning coroutine, or ``None`` - if no coroutines won. - - - *winner_index*: the index of the winning coroutine in - ``coro_fns``, or ``None`` if no coroutines won. If the winning - coroutine may return None on success, *winner_index* can be used - to definitively determine whether any coroutine won. - - - *exceptions*: list of exceptions returned by the coroutines. - ``len(exceptions)`` is equal to the number of coroutines actually - started, and the order is the same as in ``coro_fns``. The winning - coroutine's entry is ``None``. - - """ - # TODO: when we have aiter() and anext(), allow async iterables in coro_fns. - loop = loop or events.get_running_loop() - parent_task = tasks.current_task(loop) - enum_coro_fns = enumerate(coro_fns) - winner_result = None - winner_index = None - unhandled_exceptions = [] - exceptions = [] - running_tasks = set() - on_completed_fut = None - - def task_done(task): - running_tasks.discard(task) - futures.future_discard_from_awaited_by(task, parent_task) - if ( - on_completed_fut is not None - and not on_completed_fut.done() - and not running_tasks - ): - on_completed_fut.set_result(None) - - if task.cancelled(): - return - - exc = task.exception() - if exc is None: - return - unhandled_exceptions.append(exc) - - async def run_one_coro(ok_to_start, previous_failed) -> None: - # in eager tasks this waits for the calling task to append this task - # to running_tasks, in regular tasks this wait is a no-op that does - # not yield a future. See gh-124309. - await ok_to_start.wait() - # Wait for the previous task to finish, or for delay seconds - if previous_failed is not None: - with contextlib.suppress(exceptions_mod.TimeoutError): - # Use asyncio.wait_for() instead of asyncio.wait() here, so - # that if we get cancelled at this point, Event.wait() is also - # cancelled, otherwise there will be a "Task destroyed but it is - # pending" later. - await tasks.wait_for(previous_failed.wait(), delay) - # Get the next coroutine to run - try: - this_index, coro_fn = next(enum_coro_fns) - except StopIteration: - return - # Start task that will run the next coroutine - this_failed = locks.Event() - next_ok_to_start = locks.Event() - next_task = loop.create_task(run_one_coro(next_ok_to_start, this_failed)) - futures.future_add_to_awaited_by(next_task, parent_task) - running_tasks.add(next_task) - next_task.add_done_callback(task_done) - # next_task has been appended to running_tasks so next_task is ok to - # start. - next_ok_to_start.set() - # Prepare place to put this coroutine's exceptions if not won - exceptions.append(None) - assert len(exceptions) == this_index + 1 - - try: - result = await coro_fn() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as e: - exceptions[this_index] = e - this_failed.set() # Kickstart the next coroutine - else: - # Store winner's results - nonlocal winner_index, winner_result - assert winner_index is None - winner_index = this_index - winner_result = result - # Cancel all other tasks. We take care to not cancel the current - # task as well. If we do so, then since there is no `await` after - # here and CancelledError are usually thrown at one, we will - # encounter a curious corner case where the current task will end - # up as done() == True, cancelled() == False, exception() == - # asyncio.CancelledError. This behavior is specified in - # https://bugs.python.org/issue30048 - current_task = tasks.current_task(loop) - for t in running_tasks: - if t is not current_task: - t.cancel() - - propagate_cancellation_error = None - try: - ok_to_start = locks.Event() - first_task = loop.create_task(run_one_coro(ok_to_start, None)) - futures.future_add_to_awaited_by(first_task, parent_task) - running_tasks.add(first_task) - first_task.add_done_callback(task_done) - # first_task has been appended to running_tasks so first_task is ok to start. - ok_to_start.set() - propagate_cancellation_error = None - # Make sure no tasks are left running if we leave this function - while running_tasks: - on_completed_fut = loop.create_future() - try: - await on_completed_fut - except exceptions_mod.CancelledError as ex: - propagate_cancellation_error = ex - for task in running_tasks: - task.cancel(*ex.args) - on_completed_fut = None - if __debug__ and unhandled_exceptions: - # If run_one_coro raises an unhandled exception, it's probably a - # programming error, and I want to see it. - raise ExceptionGroup("staggered race failed", unhandled_exceptions) - if propagate_cancellation_error is not None: - raise propagate_cancellation_error - return winner_result, winner_index, exceptions - finally: - del exceptions, propagate_cancellation_error, unhandled_exceptions, parent_task diff --git a/Python314_4_x86_Template/Lib/asyncio/streams.py b/Python314_4_x86_Template/Lib/asyncio/streams.py deleted file mode 100644 index 64aac4cc5..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/streams.py +++ /dev/null @@ -1,787 +0,0 @@ -__all__ = ( - 'StreamReader', 'StreamWriter', 'StreamReaderProtocol', - 'open_connection', 'start_server') - -import collections -import socket -import sys -import warnings -import weakref - -if hasattr(socket, 'AF_UNIX'): - __all__ += ('open_unix_connection', 'start_unix_server') - -from . import coroutines -from . import events -from . import exceptions -from . import format_helpers -from . import protocols -from .log import logger -from .tasks import sleep - - -_DEFAULT_LIMIT = 2 ** 16 # 64 KiB - - -async def open_connection(host=None, port=None, *, - limit=_DEFAULT_LIMIT, **kwds): - """A wrapper for create_connection() returning a (reader, writer) pair. - - The reader returned is a StreamReader instance; the writer is a - StreamWriter instance. - - The arguments are all the usual arguments to create_connection() - except protocol_factory; most common are positional host and port, - with various optional keyword arguments following. - - Additional optional keyword arguments are loop (to set the event loop - instance to use) and limit (to set the buffer limit passed to the - StreamReader). - - (If you want to customize the StreamReader and/or - StreamReaderProtocol classes, just copy the code -- there's - really nothing special here except some convenience.) - """ - loop = events.get_running_loop() - reader = StreamReader(limit=limit, loop=loop) - protocol = StreamReaderProtocol(reader, loop=loop) - transport, _ = await loop.create_connection( - lambda: protocol, host, port, **kwds) - writer = StreamWriter(transport, protocol, reader, loop) - return reader, writer - - -async def start_server(client_connected_cb, host=None, port=None, *, - limit=_DEFAULT_LIMIT, **kwds): - """Start a socket server, call back for each client connected. - - The first parameter, `client_connected_cb`, takes two parameters: - client_reader, client_writer. client_reader is a StreamReader - object, while client_writer is a StreamWriter object. This - parameter can either be a plain callback function or a coroutine; - if it is a coroutine, it will be automatically converted into a - Task. - - The rest of the arguments are all the usual arguments to - loop.create_server() except protocol_factory; most common are - positional host and port, with various optional keyword arguments - following. The return value is the same as loop.create_server(). - - Additional optional keyword argument is limit (to set the buffer - limit passed to the StreamReader). - - The return value is the same as loop.create_server(), i.e. a - Server object which can be used to stop the service. - """ - loop = events.get_running_loop() - - def factory(): - reader = StreamReader(limit=limit, loop=loop) - protocol = StreamReaderProtocol(reader, client_connected_cb, - loop=loop) - return protocol - - return await loop.create_server(factory, host, port, **kwds) - - -if hasattr(socket, 'AF_UNIX'): - # UNIX Domain Sockets are supported on this platform - - async def open_unix_connection(path=None, *, - limit=_DEFAULT_LIMIT, **kwds): - """Similar to `open_connection` but works with UNIX Domain Sockets.""" - loop = events.get_running_loop() - - reader = StreamReader(limit=limit, loop=loop) - protocol = StreamReaderProtocol(reader, loop=loop) - transport, _ = await loop.create_unix_connection( - lambda: protocol, path, **kwds) - writer = StreamWriter(transport, protocol, reader, loop) - return reader, writer - - async def start_unix_server(client_connected_cb, path=None, *, - limit=_DEFAULT_LIMIT, **kwds): - """Similar to `start_server` but works with UNIX Domain Sockets.""" - loop = events.get_running_loop() - - def factory(): - reader = StreamReader(limit=limit, loop=loop) - protocol = StreamReaderProtocol(reader, client_connected_cb, - loop=loop) - return protocol - - return await loop.create_unix_server(factory, path, **kwds) - - -class FlowControlMixin(protocols.Protocol): - """Reusable flow control logic for StreamWriter.drain(). - - This implements the protocol methods pause_writing(), - resume_writing() and connection_lost(). If the subclass overrides - these it must call the super methods. - - StreamWriter.drain() must wait for _drain_helper() coroutine. - """ - - def __init__(self, loop=None): - if loop is None: - self._loop = events.get_event_loop() - else: - self._loop = loop - self._paused = False - self._drain_waiters = collections.deque() - self._connection_lost = False - - def pause_writing(self): - assert not self._paused - self._paused = True - if self._loop.get_debug(): - logger.debug("%r pauses writing", self) - - def resume_writing(self): - assert self._paused - self._paused = False - if self._loop.get_debug(): - logger.debug("%r resumes writing", self) - - for waiter in self._drain_waiters: - if not waiter.done(): - waiter.set_result(None) - - def connection_lost(self, exc): - self._connection_lost = True - # Wake up the writer(s) if currently paused. - if not self._paused: - return - - for waiter in self._drain_waiters: - if not waiter.done(): - if exc is None: - waiter.set_result(None) - else: - waiter.set_exception(exc) - - async def _drain_helper(self): - if self._connection_lost: - raise ConnectionResetError('Connection lost') - if not self._paused: - return - waiter = self._loop.create_future() - self._drain_waiters.append(waiter) - try: - await waiter - finally: - self._drain_waiters.remove(waiter) - - def _get_close_waiter(self, stream): - raise NotImplementedError - - -class StreamReaderProtocol(FlowControlMixin, protocols.Protocol): - """Helper class to adapt between Protocol and StreamReader. - - (This is a helper class instead of making StreamReader itself a - Protocol subclass, because the StreamReader has other potential - uses, and to prevent the user of the StreamReader to accidentally - call inappropriate methods of the protocol.) - """ - - _source_traceback = None - - def __init__(self, stream_reader, client_connected_cb=None, loop=None): - super().__init__(loop=loop) - if stream_reader is not None: - self._stream_reader_wr = weakref.ref(stream_reader) - self._source_traceback = stream_reader._source_traceback - else: - self._stream_reader_wr = None - if client_connected_cb is not None: - # This is a stream created by the `create_server()` function. - # Keep a strong reference to the reader until a connection - # is established. - self._strong_reader = stream_reader - self._reject_connection = False - self._task = None - self._transport = None - self._client_connected_cb = client_connected_cb - self._over_ssl = False - self._closed = self._loop.create_future() - - @property - def _stream_reader(self): - if self._stream_reader_wr is None: - return None - return self._stream_reader_wr() - - def _replace_transport(self, transport): - loop = self._loop - self._transport = transport - self._over_ssl = transport.get_extra_info('sslcontext') is not None - - def connection_made(self, transport): - if self._reject_connection: - context = { - 'message': ('An open stream was garbage collected prior to ' - 'establishing network connection; ' - 'call "stream.close()" explicitly.') - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - transport.abort() - return - self._transport = transport - reader = self._stream_reader - if reader is not None: - reader.set_transport(transport) - self._over_ssl = transport.get_extra_info('sslcontext') is not None - if self._client_connected_cb is not None: - writer = StreamWriter(transport, self, reader, self._loop) - res = self._client_connected_cb(reader, writer) - if coroutines.iscoroutine(res): - def callback(task): - if task.cancelled(): - transport.close() - return - exc = task.exception() - if exc is not None: - self._loop.call_exception_handler({ - 'message': 'Unhandled exception in client_connected_cb', - 'exception': exc, - 'transport': transport, - }) - transport.close() - - self._task = self._loop.create_task(res) - self._task.add_done_callback(callback) - - self._strong_reader = None - - def connection_lost(self, exc): - reader = self._stream_reader - if reader is not None: - if exc is None: - reader.feed_eof() - else: - reader.set_exception(exc) - if not self._closed.done(): - if exc is None: - self._closed.set_result(None) - else: - self._closed.set_exception(exc) - super().connection_lost(exc) - self._stream_reader_wr = None - self._stream_writer = None - self._task = None - self._transport = None - - def data_received(self, data): - reader = self._stream_reader - if reader is not None: - reader.feed_data(data) - - def eof_received(self): - reader = self._stream_reader - if reader is not None: - reader.feed_eof() - if self._over_ssl: - # Prevent a warning in SSLProtocol.eof_received: - # "returning true from eof_received() - # has no effect when using ssl" - return False - return True - - def _get_close_waiter(self, stream): - return self._closed - - def __del__(self): - # Prevent reports about unhandled exceptions. - # Better than self._closed._log_traceback = False hack - try: - closed = self._closed - except AttributeError: - pass # failed constructor - else: - if closed.done() and not closed.cancelled(): - closed.exception() - - -class StreamWriter: - """Wraps a Transport. - - This exposes write(), writelines(), [can_]write_eof(), - get_extra_info() and close(). It adds drain() which returns an - optional Future on which you can wait for flow control. It also - adds a transport property which references the Transport - directly. - """ - - def __init__(self, transport, protocol, reader, loop): - self._transport = transport - self._protocol = protocol - # drain() expects that the reader has an exception() method - assert reader is None or isinstance(reader, StreamReader) - self._reader = reader - self._loop = loop - self._complete_fut = self._loop.create_future() - self._complete_fut.set_result(None) - - def __repr__(self): - info = [self.__class__.__name__, f'transport={self._transport!r}'] - if self._reader is not None: - info.append(f'reader={self._reader!r}') - return '<{}>'.format(' '.join(info)) - - @property - def transport(self): - return self._transport - - def write(self, data): - self._transport.write(data) - - def writelines(self, data): - self._transport.writelines(data) - - def write_eof(self): - return self._transport.write_eof() - - def can_write_eof(self): - return self._transport.can_write_eof() - - def close(self): - return self._transport.close() - - def is_closing(self): - return self._transport.is_closing() - - async def wait_closed(self): - await self._protocol._get_close_waiter(self) - - def get_extra_info(self, name, default=None): - return self._transport.get_extra_info(name, default) - - async def drain(self): - """Flush the write buffer. - - The intended use is to write - - w.write(data) - await w.drain() - """ - if self._reader is not None: - exc = self._reader.exception() - if exc is not None: - raise exc - if self._transport.is_closing(): - # Wait for protocol.connection_lost() call - # Raise connection closing error if any, - # ConnectionResetError otherwise - # Yield to the event loop so connection_lost() may be - # called. Without this, _drain_helper() would return - # immediately, and code that calls - # write(...); await drain() - # in a loop would never call connection_lost(), so it - # would not see an error when the socket is closed. - await sleep(0) - await self._protocol._drain_helper() - - async def start_tls(self, sslcontext, *, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - """Upgrade an existing stream-based connection to TLS.""" - server_side = self._protocol._client_connected_cb is not None - protocol = self._protocol - await self.drain() - new_transport = await self._loop.start_tls( # type: ignore - self._transport, protocol, sslcontext, - server_side=server_side, server_hostname=server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - self._transport = new_transport - protocol._replace_transport(new_transport) - - def __del__(self, warnings=warnings): - if not self._transport.is_closing(): - if self._loop.is_closed(): - warnings.warn("loop is closed", ResourceWarning) - else: - self.close() - warnings.warn(f"unclosed {self!r}", ResourceWarning) - -class StreamReader: - - _source_traceback = None - - def __init__(self, limit=_DEFAULT_LIMIT, loop=None): - # The line length limit is a security feature; - # it also doubles as half the buffer limit. - - if limit <= 0: - raise ValueError('Limit cannot be <= 0') - - self._limit = limit - if loop is None: - self._loop = events.get_event_loop() - else: - self._loop = loop - self._buffer = bytearray() - self._eof = False # Whether we're done. - self._waiter = None # A future used by _wait_for_data() - self._exception = None - self._transport = None - self._paused = False - if self._loop.get_debug(): - self._source_traceback = format_helpers.extract_stack( - sys._getframe(1)) - - def __repr__(self): - info = ['StreamReader'] - if self._buffer: - info.append(f'{len(self._buffer)} bytes') - if self._eof: - info.append('eof') - if self._limit != _DEFAULT_LIMIT: - info.append(f'limit={self._limit}') - if self._waiter: - info.append(f'waiter={self._waiter!r}') - if self._exception: - info.append(f'exception={self._exception!r}') - if self._transport: - info.append(f'transport={self._transport!r}') - if self._paused: - info.append('paused') - return '<{}>'.format(' '.join(info)) - - def exception(self): - return self._exception - - def set_exception(self, exc): - self._exception = exc - - waiter = self._waiter - if waiter is not None: - self._waiter = None - if not waiter.cancelled(): - waiter.set_exception(exc) - - def _wakeup_waiter(self): - """Wakeup read*() functions waiting for data or EOF.""" - waiter = self._waiter - if waiter is not None: - self._waiter = None - if not waiter.cancelled(): - waiter.set_result(None) - - def set_transport(self, transport): - assert self._transport is None, 'Transport already set' - self._transport = transport - - def _maybe_resume_transport(self): - if self._paused and len(self._buffer) <= self._limit: - self._paused = False - self._transport.resume_reading() - - def feed_eof(self): - self._eof = True - self._wakeup_waiter() - - def at_eof(self): - """Return True if the buffer is empty and 'feed_eof' was called.""" - return self._eof and not self._buffer - - def feed_data(self, data): - assert not self._eof, 'feed_data after feed_eof' - - if not data: - return - - self._buffer.extend(data) - self._wakeup_waiter() - - if (self._transport is not None and - not self._paused and - len(self._buffer) > 2 * self._limit): - try: - self._transport.pause_reading() - except NotImplementedError: - # The transport can't be paused. - # We'll just have to buffer all data. - # Forget the transport so we don't keep trying. - self._transport = None - else: - self._paused = True - - async def _wait_for_data(self, func_name): - """Wait until feed_data() or feed_eof() is called. - - If stream was paused, automatically resume it. - """ - # StreamReader uses a future to link the protocol feed_data() method - # to a read coroutine. Running two read coroutines at the same time - # would have an unexpected behaviour. It would not possible to know - # which coroutine would get the next data. - if self._waiter is not None: - raise RuntimeError( - f'{func_name}() called while another coroutine is ' - f'already waiting for incoming data') - - assert not self._eof, '_wait_for_data after EOF' - - # Waiting for data while paused will make deadlock, so prevent it. - # This is essential for readexactly(n) for case when n > self._limit. - if self._paused: - self._paused = False - self._transport.resume_reading() - - self._waiter = self._loop.create_future() - try: - await self._waiter - finally: - self._waiter = None - - async def readline(self): - """Read chunk of data from the stream until newline (b'\n') is found. - - On success, return chunk that ends with newline. If only partial - line can be read due to EOF, return incomplete line without - terminating newline. When EOF was reached while no bytes read, empty - bytes object is returned. - - If limit is reached, ValueError will be raised. In that case, if - newline was found, complete line including newline will be removed - from internal buffer. Else, internal buffer will be cleared. Limit is - compared against part of the line without newline. - - If stream was paused, this function will automatically resume it if - needed. - """ - sep = b'\n' - seplen = len(sep) - try: - line = await self.readuntil(sep) - except exceptions.IncompleteReadError as e: - return e.partial - except exceptions.LimitOverrunError as e: - if self._buffer.startswith(sep, e.consumed): - del self._buffer[:e.consumed + seplen] - else: - self._buffer.clear() - self._maybe_resume_transport() - raise ValueError(e.args[0]) - return line - - async def readuntil(self, separator=b'\n'): - """Read data from the stream until ``separator`` is found. - - On success, the data and separator will be removed from the - internal buffer (consumed). Returned data will include the - separator at the end. - - Configured stream limit is used to check result. Limit sets the - maximal length of data that can be returned, not counting the - separator. - - If an EOF occurs and the complete separator is still not found, - an IncompleteReadError exception will be raised, and the internal - buffer will be reset. The IncompleteReadError.partial attribute - may contain the separator partially. - - If the data cannot be read because of over limit, a - LimitOverrunError exception will be raised, and the data - will be left in the internal buffer, so it can be read again. - - The ``separator`` may also be a tuple of separators. In this - case the return value will be the shortest possible that has any - separator as the suffix. For the purposes of LimitOverrunError, - the shortest possible separator is considered to be the one that - matched. - """ - if isinstance(separator, tuple): - # Makes sure shortest matches wins - separator = sorted(separator, key=len) - else: - separator = [separator] - if not separator: - raise ValueError('Separator should contain at least one element') - min_seplen = len(separator[0]) - max_seplen = len(separator[-1]) - if min_seplen == 0: - raise ValueError('Separator should be at least one-byte string') - - if self._exception is not None: - raise self._exception - - # Consume whole buffer except last bytes, which length is - # one less than max_seplen. Let's check corner cases with - # separator[-1]='SEPARATOR': - # * we have received almost complete separator (without last - # byte). i.e buffer='some textSEPARATO'. In this case we - # can safely consume max_seplen - 1 bytes. - # * last byte of buffer is first byte of separator, i.e. - # buffer='abcdefghijklmnopqrS'. We may safely consume - # everything except that last byte, but this require to - # analyze bytes of buffer that match partial separator. - # This is slow and/or require FSM. For this case our - # implementation is not optimal, since require rescanning - # of data that is known to not belong to separator. In - # real world, separator will not be so long to notice - # performance problems. Even when reading MIME-encoded - # messages :) - - # `offset` is the number of bytes from the beginning of the buffer - # where there is no occurrence of any `separator`. - offset = 0 - - # Loop until we find a `separator` in the buffer, exceed the buffer size, - # or an EOF has happened. - while True: - buflen = len(self._buffer) - - # Check if we now have enough data in the buffer for shortest - # separator to fit. - if buflen - offset >= min_seplen: - match_start = None - match_end = None - for sep in separator: - isep = self._buffer.find(sep, offset) - - if isep != -1: - # `separator` is in the buffer. `match_start` and - # `match_end` will be used later to retrieve the - # data. - end = isep + len(sep) - if match_end is None or end < match_end: - match_end = end - match_start = isep - if match_end is not None: - break - - # see upper comment for explanation. - offset = max(0, buflen + 1 - max_seplen) - if offset > self._limit: - raise exceptions.LimitOverrunError( - 'Separator is not found, and chunk exceed the limit', - offset) - - # Complete message (with full separator) may be present in buffer - # even when EOF flag is set. This may happen when the last chunk - # adds data which makes separator be found. That's why we check for - # EOF *after* inspecting the buffer. - if self._eof: - chunk = bytes(self._buffer) - self._buffer.clear() - raise exceptions.IncompleteReadError(chunk, None) - - # _wait_for_data() will resume reading if stream was paused. - await self._wait_for_data('readuntil') - - if match_start > self._limit: - raise exceptions.LimitOverrunError( - 'Separator is found, but chunk is longer than limit', match_start) - - chunk = self._buffer[:match_end] - del self._buffer[:match_end] - self._maybe_resume_transport() - return bytes(chunk) - - async def read(self, n=-1): - """Read up to `n` bytes from the stream. - - If `n` is not provided or set to -1, - read until EOF, then return all read bytes. - If EOF was received and the internal buffer is empty, - return an empty bytes object. - - If `n` is 0, return an empty bytes object immediately. - - If `n` is positive, return at most `n` available bytes - as soon as at least 1 byte is available in the internal buffer. - If EOF is received before any byte is read, return an empty - bytes object. - - Returned value is not limited with limit, configured at stream - creation. - - If stream was paused, this function will automatically resume it if - needed. - """ - - if self._exception is not None: - raise self._exception - - if n == 0: - return b'' - - if n < 0: - # This used to just loop creating a new waiter hoping to - # collect everything in self._buffer, but that would - # deadlock if the subprocess sends more than self.limit - # bytes. So just call self.read(self._limit) until EOF. - blocks = [] - while True: - block = await self.read(self._limit) - if not block: - break - blocks.append(block) - return b''.join(blocks) - - if not self._buffer and not self._eof: - await self._wait_for_data('read') - - # This will work right even if buffer is less than n bytes - data = bytes(memoryview(self._buffer)[:n]) - del self._buffer[:n] - - self._maybe_resume_transport() - return data - - async def readexactly(self, n): - """Read exactly `n` bytes. - - Raise an IncompleteReadError if EOF is reached before `n` bytes can be - read. The IncompleteReadError.partial attribute of the exception will - contain the partial read bytes. - - if n is zero, return empty bytes object. - - Returned value is not limited with limit, configured at stream - creation. - - If stream was paused, this function will automatically resume it if - needed. - """ - if n < 0: - raise ValueError('readexactly size can not be less than zero') - - if self._exception is not None: - raise self._exception - - if n == 0: - return b'' - - while len(self._buffer) < n: - if self._eof: - incomplete = bytes(self._buffer) - self._buffer.clear() - raise exceptions.IncompleteReadError(incomplete, n) - - await self._wait_for_data('readexactly') - - if len(self._buffer) == n: - data = bytes(self._buffer) - self._buffer.clear() - else: - data = bytes(memoryview(self._buffer)[:n]) - del self._buffer[:n] - self._maybe_resume_transport() - return data - - def __aiter__(self): - return self - - async def __anext__(self): - val = await self.readline() - if val == b'': - raise StopAsyncIteration - return val diff --git a/Python314_4_x86_Template/Lib/asyncio/subprocess.py b/Python314_4_x86_Template/Lib/asyncio/subprocess.py deleted file mode 100644 index 043359bbd..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/subprocess.py +++ /dev/null @@ -1,229 +0,0 @@ -__all__ = 'create_subprocess_exec', 'create_subprocess_shell' - -import subprocess - -from . import events -from . import protocols -from . import streams -from . import tasks -from .log import logger - - -PIPE = subprocess.PIPE -STDOUT = subprocess.STDOUT -DEVNULL = subprocess.DEVNULL - - -class SubprocessStreamProtocol(streams.FlowControlMixin, - protocols.SubprocessProtocol): - """Like StreamReaderProtocol, but for a subprocess.""" - - def __init__(self, limit, loop): - super().__init__(loop=loop) - self._limit = limit - self.stdin = self.stdout = self.stderr = None - self._transport = None - self._process_exited = False - self._pipe_fds = [] - self._stdin_closed = self._loop.create_future() - - def __repr__(self): - info = [self.__class__.__name__] - if self.stdin is not None: - info.append(f'stdin={self.stdin!r}') - if self.stdout is not None: - info.append(f'stdout={self.stdout!r}') - if self.stderr is not None: - info.append(f'stderr={self.stderr!r}') - return '<{}>'.format(' '.join(info)) - - def connection_made(self, transport): - self._transport = transport - - stdout_transport = transport.get_pipe_transport(1) - if stdout_transport is not None: - self.stdout = streams.StreamReader(limit=self._limit, - loop=self._loop) - self.stdout.set_transport(stdout_transport) - self._pipe_fds.append(1) - - stderr_transport = transport.get_pipe_transport(2) - if stderr_transport is not None: - self.stderr = streams.StreamReader(limit=self._limit, - loop=self._loop) - self.stderr.set_transport(stderr_transport) - self._pipe_fds.append(2) - - stdin_transport = transport.get_pipe_transport(0) - if stdin_transport is not None: - self.stdin = streams.StreamWriter(stdin_transport, - protocol=self, - reader=None, - loop=self._loop) - - def pipe_data_received(self, fd, data): - if fd == 1: - reader = self.stdout - elif fd == 2: - reader = self.stderr - else: - reader = None - if reader is not None: - reader.feed_data(data) - - def pipe_connection_lost(self, fd, exc): - if fd == 0: - pipe = self.stdin - if pipe is not None: - pipe.close() - self.connection_lost(exc) - if exc is None: - self._stdin_closed.set_result(None) - else: - self._stdin_closed.set_exception(exc) - # Since calling `wait_closed()` is not mandatory, - # we shouldn't log the traceback if this is not awaited. - self._stdin_closed._log_traceback = False - return - if fd == 1: - reader = self.stdout - elif fd == 2: - reader = self.stderr - else: - reader = None - if reader is not None: - if exc is None: - reader.feed_eof() - else: - reader.set_exception(exc) - - if fd in self._pipe_fds: - self._pipe_fds.remove(fd) - self._maybe_close_transport() - - def process_exited(self): - self._process_exited = True - self._maybe_close_transport() - - def _maybe_close_transport(self): - if len(self._pipe_fds) == 0 and self._process_exited: - self._transport.close() - self._transport = None - - def _get_close_waiter(self, stream): - if stream is self.stdin: - return self._stdin_closed - - -class Process: - def __init__(self, transport, protocol, loop): - self._transport = transport - self._protocol = protocol - self._loop = loop - self.stdin = protocol.stdin - self.stdout = protocol.stdout - self.stderr = protocol.stderr - self.pid = transport.get_pid() - - def __repr__(self): - return f'<{self.__class__.__name__} {self.pid}>' - - @property - def returncode(self): - return self._transport.get_returncode() - - async def wait(self): - """Wait until the process exit and return the process return code.""" - return await self._transport._wait() - - def send_signal(self, signal): - self._transport.send_signal(signal) - - def terminate(self): - self._transport.terminate() - - def kill(self): - self._transport.kill() - - async def _feed_stdin(self, input): - debug = self._loop.get_debug() - try: - if input is not None: - self.stdin.write(input) - if debug: - logger.debug( - '%r communicate: feed stdin (%s bytes)', self, len(input)) - - await self.stdin.drain() - except (BrokenPipeError, ConnectionResetError) as exc: - # communicate() ignores BrokenPipeError and ConnectionResetError. - # write() and drain() can raise these exceptions. - if debug: - logger.debug('%r communicate: stdin got %r', self, exc) - - if debug: - logger.debug('%r communicate: close stdin', self) - self.stdin.close() - - async def _noop(self): - return None - - async def _read_stream(self, fd): - transport = self._transport.get_pipe_transport(fd) - if fd == 2: - stream = self.stderr - else: - assert fd == 1 - stream = self.stdout - if self._loop.get_debug(): - name = 'stdout' if fd == 1 else 'stderr' - logger.debug('%r communicate: read %s', self, name) - output = await stream.read() - if self._loop.get_debug(): - name = 'stdout' if fd == 1 else 'stderr' - logger.debug('%r communicate: close %s', self, name) - transport.close() - return output - - async def communicate(self, input=None): - if self.stdin is not None: - stdin = self._feed_stdin(input) - else: - stdin = self._noop() - if self.stdout is not None: - stdout = self._read_stream(1) - else: - stdout = self._noop() - if self.stderr is not None: - stderr = self._read_stream(2) - else: - stderr = self._noop() - stdin, stdout, stderr = await tasks.gather(stdin, stdout, stderr) - await self.wait() - return (stdout, stderr) - - -async def create_subprocess_shell(cmd, stdin=None, stdout=None, stderr=None, - limit=streams._DEFAULT_LIMIT, **kwds): - loop = events.get_running_loop() - protocol_factory = lambda: SubprocessStreamProtocol(limit=limit, - loop=loop) - transport, protocol = await loop.subprocess_shell( - protocol_factory, - cmd, stdin=stdin, stdout=stdout, - stderr=stderr, **kwds) - return Process(transport, protocol, loop) - - -async def create_subprocess_exec(program, *args, stdin=None, stdout=None, - stderr=None, limit=streams._DEFAULT_LIMIT, - **kwds): - loop = events.get_running_loop() - protocol_factory = lambda: SubprocessStreamProtocol(limit=limit, - loop=loop) - transport, protocol = await loop.subprocess_exec( - protocol_factory, - program, *args, - stdin=stdin, stdout=stdout, - stderr=stderr, **kwds) - return Process(transport, protocol, loop) diff --git a/Python314_4_x86_Template/Lib/asyncio/taskgroups.py b/Python314_4_x86_Template/Lib/asyncio/taskgroups.py deleted file mode 100644 index 00e8f6d5d..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/taskgroups.py +++ /dev/null @@ -1,280 +0,0 @@ -# Adapted with permission from the EdgeDB project; -# license: PSFL. - - -__all__ = ("TaskGroup",) - -from . import events -from . import exceptions -from . import futures -from . import tasks - - -class TaskGroup: - """Asynchronous context manager for managing groups of tasks. - - Example use: - - async with asyncio.TaskGroup() as group: - task1 = group.create_task(some_coroutine(...)) - task2 = group.create_task(other_coroutine(...)) - print("Both tasks have completed now.") - - All tasks are awaited when the context manager exits. - - Any exceptions other than `asyncio.CancelledError` raised within - a task will cancel all remaining tasks and wait for them to exit. - The exceptions are then combined and raised as an `ExceptionGroup`. - """ - def __init__(self): - self._entered = False - self._exiting = False - self._aborting = False - self._loop = None - self._parent_task = None - self._parent_cancel_requested = False - self._tasks = set() - self._errors = [] - self._base_error = None - self._on_completed_fut = None - - def __repr__(self): - info = [''] - if self._tasks: - info.append(f'tasks={len(self._tasks)}') - if self._errors: - info.append(f'errors={len(self._errors)}') - if self._aborting: - info.append('cancelling') - elif self._entered: - info.append('entered') - - info_str = ' '.join(info) - return f'<TaskGroup{info_str}>' - - async def __aenter__(self): - if self._entered: - raise RuntimeError( - f"TaskGroup {self!r} has already been entered") - if self._loop is None: - self._loop = events.get_running_loop() - self._parent_task = tasks.current_task(self._loop) - if self._parent_task is None: - raise RuntimeError( - f'TaskGroup {self!r} cannot determine the parent task') - self._entered = True - - return self - - async def __aexit__(self, et, exc, tb): - tb = None - try: - return await self._aexit(et, exc) - finally: - # Exceptions are heavy objects that can have object - # cycles (bad for GC); let's not keep a reference to - # a bunch of them. It would be nicer to use a try/finally - # in __aexit__ directly but that introduced some diff noise - self._parent_task = None - self._errors = None - self._base_error = None - exc = None - - async def _aexit(self, et, exc): - self._exiting = True - - if (exc is not None and - self._is_base_error(exc) and - self._base_error is None): - self._base_error = exc - - if et is not None and issubclass(et, exceptions.CancelledError): - propagate_cancellation_error = exc - else: - propagate_cancellation_error = None - - if et is not None: - if not self._aborting: - # Our parent task is being cancelled: - # - # async with TaskGroup() as g: - # g.create_task(...) - # await ... # <- CancelledError - # - # or there's an exception in "async with": - # - # async with TaskGroup() as g: - # g.create_task(...) - # 1 / 0 - # - self._abort() - - # We use while-loop here because "self._on_completed_fut" - # can be cancelled multiple times if our parent task - # is being cancelled repeatedly (or even once, when - # our own cancellation is already in progress) - while self._tasks: - if self._on_completed_fut is None: - self._on_completed_fut = self._loop.create_future() - - try: - await self._on_completed_fut - except exceptions.CancelledError as ex: - if not self._aborting: - # Our parent task is being cancelled: - # - # async def wrapper(): - # async with TaskGroup() as g: - # g.create_task(foo) - # - # "wrapper" is being cancelled while "foo" is - # still running. - propagate_cancellation_error = ex - self._abort() - - self._on_completed_fut = None - - assert not self._tasks - - if self._base_error is not None: - try: - raise self._base_error - finally: - exc = None - - if self._parent_cancel_requested: - # If this flag is set we *must* call uncancel(). - if self._parent_task.uncancel() == 0: - # If there are no pending cancellations left, - # don't propagate CancelledError. - propagate_cancellation_error = None - - # Propagate CancelledError if there is one, except if there - # are other errors -- those have priority. - try: - if propagate_cancellation_error is not None and not self._errors: - try: - raise propagate_cancellation_error - finally: - exc = None - finally: - propagate_cancellation_error = None - - if et is not None and not issubclass(et, exceptions.CancelledError): - self._errors.append(exc) - - if self._errors: - # If the parent task is being cancelled from the outside - # of the taskgroup, un-cancel and re-cancel the parent task, - # which will keep the cancel count stable. - if self._parent_task.cancelling(): - self._parent_task.uncancel() - self._parent_task.cancel() - try: - raise BaseExceptionGroup( - 'unhandled errors in a TaskGroup', - self._errors, - ) from None - finally: - exc = None - - - def create_task(self, coro, **kwargs): - """Create a new task in this group and return it. - - Similar to `asyncio.create_task`. - """ - if not self._entered: - coro.close() - raise RuntimeError(f"TaskGroup {self!r} has not been entered") - if self._exiting and not self._tasks: - coro.close() - raise RuntimeError(f"TaskGroup {self!r} is finished") - if self._aborting: - coro.close() - raise RuntimeError(f"TaskGroup {self!r} is shutting down") - task = self._loop.create_task(coro, **kwargs) - - futures.future_add_to_awaited_by(task, self._parent_task) - - # Always schedule the done callback even if the task is - # already done (e.g. if the coro was able to complete eagerly), - # otherwise if the task completes with an exception then it will cancel - # the current task too early. gh-128550, gh-128588 - self._tasks.add(task) - task.add_done_callback(self._on_task_done) - try: - return task - finally: - # gh-128552: prevent a refcycle of - # task.exception().__traceback__->TaskGroup.create_task->task - del task - - # Since Python 3.8 Tasks propagate all exceptions correctly, - # except for KeyboardInterrupt and SystemExit which are - # still considered special. - - def _is_base_error(self, exc: BaseException) -> bool: - assert isinstance(exc, BaseException) - return isinstance(exc, (SystemExit, KeyboardInterrupt)) - - def _abort(self): - self._aborting = True - - for t in self._tasks: - if not t.done(): - t.cancel() - - def _on_task_done(self, task): - self._tasks.discard(task) - - futures.future_discard_from_awaited_by(task, self._parent_task) - - if self._on_completed_fut is not None and not self._tasks: - if not self._on_completed_fut.done(): - self._on_completed_fut.set_result(True) - - if task.cancelled(): - return - - exc = task.exception() - if exc is None: - return - - self._errors.append(exc) - if self._is_base_error(exc) and self._base_error is None: - self._base_error = exc - - if self._parent_task.done(): - # Not sure if this case is possible, but we want to handle - # it anyways. - self._loop.call_exception_handler({ - 'message': f'Task {task!r} has errored out but its parent ' - f'task {self._parent_task} is already completed', - 'exception': exc, - 'task': task, - }) - return - - if not self._aborting and not self._parent_cancel_requested: - # If parent task *is not* being cancelled, it means that we want - # to manually cancel it to abort whatever is being run right now - # in the TaskGroup. But we want to mark parent task as - # "not cancelled" later in __aexit__. Example situation that - # we need to handle: - # - # async def foo(): - # try: - # async with TaskGroup() as g: - # g.create_task(crash_soon()) - # await something # <- this needs to be canceled - # # by the TaskGroup, e.g. - # # foo() needs to be cancelled - # except Exception: - # # Ignore any exceptions raised in the TaskGroup - # pass - # await something_else # this line has to be called - # # after TaskGroup is finished. - self._abort() - self._parent_cancel_requested = True - self._parent_task.cancel() diff --git a/Python314_4_x86_Template/Lib/asyncio/tasks.py b/Python314_4_x86_Template/Lib/asyncio/tasks.py deleted file mode 100644 index fbd5c39a7..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/tasks.py +++ /dev/null @@ -1,1141 +0,0 @@ -"""Support for tasks, coroutines and the scheduler.""" - -__all__ = ( - 'Task', 'create_task', - 'FIRST_COMPLETED', 'FIRST_EXCEPTION', 'ALL_COMPLETED', - 'wait', 'wait_for', 'as_completed', 'sleep', - 'gather', 'shield', 'ensure_future', 'run_coroutine_threadsafe', - 'current_task', 'all_tasks', - 'create_eager_task_factory', 'eager_task_factory', - '_register_task', '_unregister_task', '_enter_task', '_leave_task', -) - -import concurrent.futures -import contextvars -import functools -import inspect -import itertools -import math -import types -import weakref -from types import GenericAlias - -from . import base_tasks -from . import coroutines -from . import events -from . import exceptions -from . import futures -from . import queues -from . import timeouts - -# Helper to generate new task names -# This uses itertools.count() instead of a "+= 1" operation because the latter -# is not thread safe. See bpo-11866 for a longer explanation. -_task_name_counter = itertools.count(1).__next__ - - -def current_task(loop=None): - """Return a currently executed task.""" - if loop is None: - loop = events.get_running_loop() - return _current_tasks.get(loop) - - -def all_tasks(loop=None): - """Return a set of all tasks for the loop.""" - if loop is None: - loop = events.get_running_loop() - # capturing the set of eager tasks first, so if an eager task "graduates" - # to a regular task in another thread, we don't risk missing it. - eager_tasks = list(_eager_tasks) - - return {t for t in itertools.chain(_scheduled_tasks, eager_tasks) - if futures._get_loop(t) is loop and not t.done()} - - -class Task(futures._PyFuture): # Inherit Python Task implementation - # from a Python Future implementation. - - """A coroutine wrapped in a Future.""" - - # An important invariant maintained while a Task not done: - # _fut_waiter is either None or a Future. The Future - # can be either done() or not done(). - # The task can be in any of 3 states: - # - # - 1: _fut_waiter is not None and not _fut_waiter.done(): - # __step() is *not* scheduled and the Task is waiting for _fut_waiter. - # - 2: (_fut_waiter is None or _fut_waiter.done()) and __step() is scheduled: - # the Task is waiting for __step() to be executed. - # - 3: _fut_waiter is None and __step() is *not* scheduled: - # the Task is currently executing (in __step()). - # - # * In state 1, one of the callbacks of __fut_waiter must be __wakeup(). - # * The transition from 1 to 2 happens when _fut_waiter becomes done(), - # as it schedules __wakeup() to be called (which calls __step() so - # we way that __step() is scheduled). - # * It transitions from 2 to 3 when __step() is executed, and it clears - # _fut_waiter to None. - - # If False, don't log a message if the task is destroyed while its - # status is still pending - _log_destroy_pending = True - - def __init__(self, coro, *, loop=None, name=None, context=None, - eager_start=False): - super().__init__(loop=loop) - if self._source_traceback: - del self._source_traceback[-1] - if not coroutines.iscoroutine(coro): - # raise after Future.__init__(), attrs are required for __del__ - # prevent logging for pending task in __del__ - self._log_destroy_pending = False - raise TypeError(f"a coroutine was expected, got {coro!r}") - - if name is None: - self._name = f'Task-{_task_name_counter()}' - else: - self._name = str(name) - - self._num_cancels_requested = 0 - self._must_cancel = False - self._fut_waiter = None - self._coro = coro - if context is None: - self._context = contextvars.copy_context() - else: - self._context = context - - if eager_start and self._loop.is_running(): - self.__eager_start() - else: - self._loop.call_soon(self.__step, context=self._context) - _py_register_task(self) - - def __del__(self): - if self._state == futures._PENDING and self._log_destroy_pending: - context = { - 'task': self, - 'message': 'Task was destroyed but it is pending!', - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - super().__del__() - - __class_getitem__ = classmethod(GenericAlias) - - def __repr__(self): - return base_tasks._task_repr(self) - - def get_coro(self): - return self._coro - - def get_context(self): - return self._context - - def get_name(self): - return self._name - - def set_name(self, value): - self._name = str(value) - - def set_result(self, result): - raise RuntimeError('Task does not support set_result operation') - - def set_exception(self, exception): - raise RuntimeError('Task does not support set_exception operation') - - def get_stack(self, *, limit=None): - """Return the list of stack frames for this task's coroutine. - - If the coroutine is not done, this returns the stack where it is - suspended. If the coroutine has completed successfully or was - cancelled, this returns an empty list. If the coroutine was - terminated by an exception, this returns the list of traceback - frames. - - The frames are always ordered from oldest to newest. - - The optional limit gives the maximum number of frames to - return; by default all available frames are returned. Its - meaning differs depending on whether a stack or a traceback is - returned: the newest frames of a stack are returned, but the - oldest frames of a traceback are returned. (This matches the - behavior of the traceback module.) - - For reasons beyond our control, only one stack frame is - returned for a suspended coroutine. - """ - return base_tasks._task_get_stack(self, limit) - - def print_stack(self, *, limit=None, file=None): - """Print the stack or traceback for this task's coroutine. - - This produces output similar to that of the traceback module, - for the frames retrieved by get_stack(). The limit argument - is passed to get_stack(). The file argument is an I/O stream - to which the output is written; by default output is written - to sys.stderr. - """ - return base_tasks._task_print_stack(self, limit, file) - - def cancel(self, msg=None): - """Request that this task cancel itself. - - This arranges for a CancelledError to be thrown into the - wrapped coroutine on the next cycle through the event loop. - The coroutine then has a chance to clean up or even deny - the request using try/except/finally. - - Unlike Future.cancel, this does not guarantee that the - task will be cancelled: the exception might be caught and - acted upon, delaying cancellation of the task or preventing - cancellation completely. The task may also return a value or - raise a different exception. - - Immediately after this method is called, Task.cancelled() will - not return True (unless the task was already cancelled). A - task will be marked as cancelled when the wrapped coroutine - terminates with a CancelledError exception (even if cancel() - was not called). - - This also increases the task's count of cancellation requests. - """ - self._log_traceback = False - if self.done(): - return False - self._num_cancels_requested += 1 - # These two lines are controversial. See discussion starting at - # https://github.com/python/cpython/pull/31394#issuecomment-1053545331 - # Also remember that this is duplicated in _asynciomodule.c. - # if self._num_cancels_requested > 1: - # return False - if self._fut_waiter is not None: - if self._fut_waiter.cancel(msg=msg): - # Leave self._fut_waiter; it may be a Task that - # catches and ignores the cancellation so we may have - # to cancel it again later. - return True - # It must be the case that self.__step is already scheduled. - self._must_cancel = True - self._cancel_message = msg - return True - - def cancelling(self): - """Return the count of the task's cancellation requests. - - This count is incremented when .cancel() is called - and may be decremented using .uncancel(). - """ - return self._num_cancels_requested - - def uncancel(self): - """Decrement the task's count of cancellation requests. - - This should be called by the party that called `cancel()` on the task - beforehand. - - Returns the remaining number of cancellation requests. - """ - if self._num_cancels_requested > 0: - self._num_cancels_requested -= 1 - if self._num_cancels_requested == 0: - self._must_cancel = False - return self._num_cancels_requested - - def __eager_start(self): - prev_task = _py_swap_current_task(self._loop, self) - try: - _py_register_eager_task(self) - try: - self._context.run(self.__step_run_and_handle_result, None) - finally: - _py_unregister_eager_task(self) - finally: - try: - curtask = _py_swap_current_task(self._loop, prev_task) - assert curtask is self - finally: - if self.done(): - self._coro = None - self = None # Needed to break cycles when an exception occurs. - else: - _py_register_task(self) - - def __step(self, exc=None): - if self.done(): - raise exceptions.InvalidStateError( - f'__step(): already done: {self!r}, {exc!r}') - if self._must_cancel: - if not isinstance(exc, exceptions.CancelledError): - exc = self._make_cancelled_error() - self._must_cancel = False - self._fut_waiter = None - - _py_enter_task(self._loop, self) - try: - self.__step_run_and_handle_result(exc) - finally: - _py_leave_task(self._loop, self) - self = None # Needed to break cycles when an exception occurs. - - def __step_run_and_handle_result(self, exc): - coro = self._coro - try: - if exc is None: - # We use the `send` method directly, because coroutines - # don't have `__iter__` and `__next__` methods. - result = coro.send(None) - else: - result = coro.throw(exc) - except StopIteration as exc: - if self._must_cancel: - # Task is cancelled right before coro stops. - self._must_cancel = False - super().cancel(msg=self._cancel_message) - else: - super().set_result(exc.value) - except exceptions.CancelledError as exc: - # Save the original exception so we can chain it later. - self._cancelled_exc = exc - super().cancel() # I.e., Future.cancel(self). - except (KeyboardInterrupt, SystemExit) as exc: - super().set_exception(exc) - raise - except BaseException as exc: - super().set_exception(exc) - else: - blocking = getattr(result, '_asyncio_future_blocking', None) - if blocking is not None: - # Yielded Future must come from Future.__iter__(). - if futures._get_loop(result) is not self._loop: - new_exc = RuntimeError( - f'Task {self!r} got Future ' - f'{result!r} attached to a different loop') - self._loop.call_soon( - self.__step, new_exc, context=self._context) - elif blocking: - if result is self: - new_exc = RuntimeError( - f'Task cannot await on itself: {self!r}') - self._loop.call_soon( - self.__step, new_exc, context=self._context) - else: - futures.future_add_to_awaited_by(result, self) - result._asyncio_future_blocking = False - result.add_done_callback( - self.__wakeup, context=self._context) - self._fut_waiter = result - if self._must_cancel: - if self._fut_waiter.cancel( - msg=self._cancel_message): - self._must_cancel = False - else: - new_exc = RuntimeError( - f'yield was used instead of yield from ' - f'in task {self!r} with {result!r}') - self._loop.call_soon( - self.__step, new_exc, context=self._context) - - elif result is None: - # Bare yield relinquishes control for one event loop iteration. - self._loop.call_soon(self.__step, context=self._context) - elif inspect.isgenerator(result): - # Yielding a generator is just wrong. - new_exc = RuntimeError( - f'yield was used instead of yield from for ' - f'generator in task {self!r} with {result!r}') - self._loop.call_soon( - self.__step, new_exc, context=self._context) - else: - # Yielding something else is an error. - new_exc = RuntimeError(f'Task got bad yield: {result!r}') - self._loop.call_soon( - self.__step, new_exc, context=self._context) - finally: - self = None # Needed to break cycles when an exception occurs. - - def __wakeup(self, future): - futures.future_discard_from_awaited_by(future, self) - try: - future.result() - except BaseException as exc: - # This may also be a cancellation. - self.__step(exc) - else: - # Don't pass the value of `future.result()` explicitly, - # as `Future.__iter__` and `Future.__await__` don't need it. - # If we call `__step(value, None)` instead of `__step()`, - # Python eval loop would use `.send(value)` method call, - # instead of `__next__()`, which is slower for futures - # that return non-generator iterators from their `__iter__`. - self.__step() - self = None # Needed to break cycles when an exception occurs. - - -_PyTask = Task - - -try: - import _asyncio -except ImportError: - pass -else: - # _CTask is needed for tests. - Task = _CTask = _asyncio.Task - - -def create_task(coro, **kwargs): - """Schedule the execution of a coroutine object in a spawn task. - - Return a Task object. - """ - loop = events.get_running_loop() - return loop.create_task(coro, **kwargs) - - -# wait() and as_completed() similar to those in PEP 3148. - -FIRST_COMPLETED = concurrent.futures.FIRST_COMPLETED -FIRST_EXCEPTION = concurrent.futures.FIRST_EXCEPTION -ALL_COMPLETED = concurrent.futures.ALL_COMPLETED - - -async def wait(fs, *, timeout=None, return_when=ALL_COMPLETED): - """Wait for the Futures or Tasks given by fs to complete. - - The fs iterable must not be empty. - - Returns two sets of Future: (done, pending). - - Usage: - - done, pending = await asyncio.wait(fs) - - Note: This does not raise TimeoutError! Futures that aren't done - when the timeout occurs are returned in the second set. - """ - if futures.isfuture(fs) or coroutines.iscoroutine(fs): - raise TypeError(f"expect a list of futures, not {type(fs).__name__}") - if not fs: - raise ValueError('Set of Tasks/Futures is empty.') - if return_when not in (FIRST_COMPLETED, FIRST_EXCEPTION, ALL_COMPLETED): - raise ValueError(f'Invalid return_when value: {return_when}') - - fs = set(fs) - - if any(coroutines.iscoroutine(f) for f in fs): - raise TypeError("Passing coroutines is forbidden, use tasks explicitly.") - - loop = events.get_running_loop() - return await _wait(fs, timeout, return_when, loop) - - -def _release_waiter(waiter, *args): - if not waiter.done(): - waiter.set_result(None) - - -async def wait_for(fut, timeout): - """Wait for the single Future or coroutine to complete, with timeout. - - Coroutine will be wrapped in Task. - - Returns result of the Future or coroutine. When a timeout occurs, - it cancels the task and raises TimeoutError. To avoid the task - cancellation, wrap it in shield(). - - If the wait is cancelled, the task is also cancelled. - - If the task suppresses the cancellation and returns a value instead, - that value is returned. - - This function is a coroutine. - """ - # The special case for timeout <= 0 is for the following case: - # - # async def test_waitfor(): - # func_started = False - # - # async def func(): - # nonlocal func_started - # func_started = True - # - # try: - # await asyncio.wait_for(func(), 0) - # except asyncio.TimeoutError: - # assert not func_started - # else: - # assert False - # - # asyncio.run(test_waitfor()) - - - if timeout is not None and timeout <= 0: - fut = ensure_future(fut) - - if fut.done(): - return fut.result() - - await _cancel_and_wait(fut) - try: - return fut.result() - except exceptions.CancelledError as exc: - raise TimeoutError from exc - - async with timeouts.timeout(timeout): - return await fut - -async def _wait(fs, timeout, return_when, loop): - """Internal helper for wait(). - - The fs argument must be a collection of Futures. - """ - assert fs, 'Set of Futures is empty.' - waiter = loop.create_future() - timeout_handle = None - if timeout is not None: - timeout_handle = loop.call_later(timeout, _release_waiter, waiter) - counter = len(fs) - cur_task = current_task() - - def _on_completion(f): - nonlocal counter - counter -= 1 - if (counter <= 0 or - return_when == FIRST_COMPLETED or - return_when == FIRST_EXCEPTION and (not f.cancelled() and - f.exception() is not None)): - if timeout_handle is not None: - timeout_handle.cancel() - if not waiter.done(): - waiter.set_result(None) - futures.future_discard_from_awaited_by(f, cur_task) - - for f in fs: - f.add_done_callback(_on_completion) - futures.future_add_to_awaited_by(f, cur_task) - - try: - await waiter - finally: - if timeout_handle is not None: - timeout_handle.cancel() - for f in fs: - f.remove_done_callback(_on_completion) - - done, pending = set(), set() - for f in fs: - if f.done(): - done.add(f) - else: - pending.add(f) - return done, pending - - -async def _cancel_and_wait(fut): - """Cancel the *fut* future or task and wait until it completes.""" - - loop = events.get_running_loop() - waiter = loop.create_future() - cb = functools.partial(_release_waiter, waiter) - fut.add_done_callback(cb) - - try: - fut.cancel() - # We cannot wait on *fut* directly to make - # sure _cancel_and_wait itself is reliably cancellable. - await waiter - finally: - fut.remove_done_callback(cb) - - -class _AsCompletedIterator: - """Iterator of awaitables representing tasks of asyncio.as_completed. - - As an asynchronous iterator, iteration yields futures as they finish. As a - plain iterator, new coroutines are yielded that will return or raise the - result of the next underlying future to complete. - """ - def __init__(self, aws, timeout): - self._done = queues.Queue() - self._timeout_handle = None - - loop = events.get_event_loop() - todo = {ensure_future(aw, loop=loop) for aw in set(aws)} - for f in todo: - f.add_done_callback(self._handle_completion) - if todo and timeout is not None: - self._timeout_handle = ( - loop.call_later(timeout, self._handle_timeout) - ) - self._todo = todo - self._todo_left = len(todo) - - def __aiter__(self): - return self - - def __iter__(self): - return self - - async def __anext__(self): - if not self._todo_left: - raise StopAsyncIteration - assert self._todo_left > 0 - self._todo_left -= 1 - return await self._wait_for_one() - - def __next__(self): - if not self._todo_left: - raise StopIteration - assert self._todo_left > 0 - self._todo_left -= 1 - return self._wait_for_one(resolve=True) - - def _handle_timeout(self): - for f in self._todo: - f.remove_done_callback(self._handle_completion) - self._done.put_nowait(None) # Sentinel for _wait_for_one(). - self._todo.clear() # Can't do todo.remove(f) in the loop. - - def _handle_completion(self, f): - if not self._todo: - return # _handle_timeout() was here first. - self._todo.remove(f) - self._done.put_nowait(f) - if not self._todo and self._timeout_handle is not None: - self._timeout_handle.cancel() - - async def _wait_for_one(self, resolve=False): - # Wait for the next future to be done and return it unless resolve is - # set, in which case return either the result of the future or raise - # an exception. - f = await self._done.get() - if f is None: - # Dummy value from _handle_timeout(). - raise exceptions.TimeoutError - return f.result() if resolve else f - - -def as_completed(fs, *, timeout=None): - """Create an iterator of awaitables or their results in completion order. - - Run the supplied awaitables concurrently. The returned object can be - iterated to obtain the results of the awaitables as they finish. - - The object returned can be iterated as an asynchronous iterator or a plain - iterator. When asynchronous iteration is used, the originally-supplied - awaitables are yielded if they are tasks or futures. This makes it easy to - correlate previously-scheduled tasks with their results: - - ipv4_connect = create_task(open_connection("127.0.0.1", 80)) - ipv6_connect = create_task(open_connection("::1", 80)) - tasks = [ipv4_connect, ipv6_connect] - - async for earliest_connect in as_completed(tasks): - # earliest_connect is done. The result can be obtained by - # awaiting it or calling earliest_connect.result() - reader, writer = await earliest_connect - - if earliest_connect is ipv6_connect: - print("IPv6 connection established.") - else: - print("IPv4 connection established.") - - During asynchronous iteration, implicitly-created tasks will be yielded for - supplied awaitables that aren't tasks or futures. - - When used as a plain iterator, each iteration yields a new coroutine that - returns the result or raises the exception of the next completed awaitable. - This pattern is compatible with Python versions older than 3.13: - - ipv4_connect = create_task(open_connection("127.0.0.1", 80)) - ipv6_connect = create_task(open_connection("::1", 80)) - tasks = [ipv4_connect, ipv6_connect] - - for next_connect in as_completed(tasks): - # next_connect is not one of the original task objects. It must be - # awaited to obtain the result value or raise the exception of the - # awaitable that finishes next. - reader, writer = await next_connect - - A TimeoutError is raised if the timeout occurs before all awaitables are - done. This is raised by the async for loop during asynchronous iteration or - by the coroutines yielded during plain iteration. - """ - if inspect.isawaitable(fs): - raise TypeError( - f"expects an iterable of awaitables, not {type(fs).__name__}" - ) - - return _AsCompletedIterator(fs, timeout) - - -@types.coroutine -def __sleep0(): - """Skip one event loop run cycle. - - This is a private helper for 'asyncio.sleep()', used - when the 'delay' is set to 0. It uses a bare 'yield' - expression (which Task.__step knows how to handle) - instead of creating a Future object. - """ - yield - - -async def sleep(delay, result=None): - """Coroutine that completes after a given time (in seconds).""" - if delay <= 0: - await __sleep0() - return result - - if math.isnan(delay): - raise ValueError("Invalid delay: NaN (not a number)") - - loop = events.get_running_loop() - future = loop.create_future() - h = loop.call_later(delay, - futures._set_result_unless_cancelled, - future, result) - try: - return await future - finally: - h.cancel() - - -def ensure_future(coro_or_future, *, loop=None): - """Wrap a coroutine or an awaitable in a future. - - If the argument is a Future, it is returned directly. - """ - if futures.isfuture(coro_or_future): - if loop is not None and loop is not futures._get_loop(coro_or_future): - raise ValueError('The future belongs to a different loop than ' - 'the one specified as the loop argument') - return coro_or_future - should_close = True - if not coroutines.iscoroutine(coro_or_future): - if inspect.isawaitable(coro_or_future): - async def _wrap_awaitable(awaitable): - return await awaitable - - coro_or_future = _wrap_awaitable(coro_or_future) - should_close = False - else: - raise TypeError('An asyncio.Future, a coroutine or an awaitable ' - 'is required') - - if loop is None: - loop = events.get_event_loop() - try: - return loop.create_task(coro_or_future) - except RuntimeError: - if should_close: - coro_or_future.close() - raise - - -class _GatheringFuture(futures.Future): - """Helper for gather(). - - This overrides cancel() to cancel all the children and act more - like Task.cancel(), which doesn't immediately mark itself as - cancelled. - """ - - def __init__(self, children, *, loop): - assert loop is not None - super().__init__(loop=loop) - self._children = children - self._cancel_requested = False - - def cancel(self, msg=None): - if self.done(): - return False - ret = False - for child in self._children: - if child.cancel(msg=msg): - ret = True - if ret: - # If any child tasks were actually cancelled, we should - # propagate the cancellation request regardless of - # *return_exceptions* argument. See issue 32684. - self._cancel_requested = True - return ret - - -def gather(*coros_or_futures, return_exceptions=False): - """Return a future aggregating results from the given coroutines/futures. - - Coroutines will be wrapped in a future and scheduled in the event - loop. They will not necessarily be scheduled in the same order as - passed in. - - All futures must share the same event loop. If all the tasks are - done successfully, the returned future's result is the list of - results (in the order of the original sequence, not necessarily - the order of results arrival). If *return_exceptions* is True, - exceptions in the tasks are treated the same as successful - results, and gathered in the result list; otherwise, the first - raised exception will be immediately propagated to the returned - future. - - Cancellation: if the outer Future is cancelled, all children (that - have not completed yet) are also cancelled. If any child is - cancelled, this is treated as if it raised CancelledError -- - the outer Future is *not* cancelled in this case. (This is to - prevent the cancellation of one child to cause other children to - be cancelled.) - - If *return_exceptions* is False, cancelling gather() after it - has been marked done won't cancel any submitted awaitables. - For instance, gather can be marked done after propagating an - exception to the caller, therefore, calling ``gather.cancel()`` - after catching an exception (raised by one of the awaitables) from - gather won't cancel any other awaitables. - """ - if not coros_or_futures: - loop = events.get_event_loop() - outer = loop.create_future() - outer.set_result([]) - return outer - - loop = events._get_running_loop() - if loop is not None: - cur_task = current_task(loop) - else: - cur_task = None - - def _done_callback(fut, cur_task=cur_task): - nonlocal nfinished - nfinished += 1 - - if cur_task is not None: - futures.future_discard_from_awaited_by(fut, cur_task) - - if outer is None or outer.done(): - if not fut.cancelled(): - # Mark exception retrieved. - fut.exception() - return - - if not return_exceptions: - if fut.cancelled(): - # Check if 'fut' is cancelled first, as - # 'fut.exception()' will *raise* a CancelledError - # instead of returning it. - exc = fut._make_cancelled_error() - outer.set_exception(exc) - return - else: - exc = fut.exception() - if exc is not None: - outer.set_exception(exc) - return - - if nfinished == nfuts: - # All futures are done; create a list of results - # and set it to the 'outer' future. - results = [] - - for fut in children: - if fut.cancelled(): - # Check if 'fut' is cancelled first, as 'fut.exception()' - # will *raise* a CancelledError instead of returning it. - # Also, since we're adding the exception return value - # to 'results' instead of raising it, don't bother - # setting __context__. This also lets us preserve - # calling '_make_cancelled_error()' at most once. - res = exceptions.CancelledError( - '' if fut._cancel_message is None else - fut._cancel_message) - else: - res = fut.exception() - if res is None: - res = fut.result() - results.append(res) - - if outer._cancel_requested: - # If gather is being cancelled we must propagate the - # cancellation regardless of *return_exceptions* argument. - # See issue 32684. - exc = fut._make_cancelled_error() - outer.set_exception(exc) - else: - outer.set_result(results) - - arg_to_fut = {} - children = [] - nfuts = 0 - nfinished = 0 - done_futs = [] - outer = None # bpo-46672 - for arg in coros_or_futures: - if arg not in arg_to_fut: - fut = ensure_future(arg, loop=loop) - if loop is None: - loop = futures._get_loop(fut) - if fut is not arg: - # 'arg' was not a Future, therefore, 'fut' is a new - # Future created specifically for 'arg'. Since the caller - # can't control it, disable the "destroy pending task" - # warning. - fut._log_destroy_pending = False - nfuts += 1 - arg_to_fut[arg] = fut - if fut.done(): - done_futs.append(fut) - else: - if cur_task is not None: - futures.future_add_to_awaited_by(fut, cur_task) - fut.add_done_callback(_done_callback) - - else: - # There's a duplicate Future object in coros_or_futures. - fut = arg_to_fut[arg] - - children.append(fut) - - outer = _GatheringFuture(children, loop=loop) - # Run done callbacks after GatheringFuture created so any post-processing - # can be performed at this point - # optimization: in the special case that *all* futures finished eagerly, - # this will effectively complete the gather eagerly, with the last - # callback setting the result (or exception) on outer before returning it - for fut in done_futs: - _done_callback(fut) - return outer - - -def _log_on_exception(fut): - if fut.cancelled(): - return - - exc = fut.exception() - if exc is None: - return - - context = { - 'message': - f'{exc.__class__.__name__} exception in shielded future', - 'exception': exc, - 'future': fut, - } - if fut._source_traceback: - context['source_traceback'] = fut._source_traceback - fut._loop.call_exception_handler(context) - - -def shield(arg): - """Wait for a future, shielding it from cancellation. - - The statement - - task = asyncio.create_task(something()) - res = await shield(task) - - is exactly equivalent to the statement - - res = await something() - - *except* that if the coroutine containing it is cancelled, the - task running in something() is not cancelled. From the POV of - something(), the cancellation did not happen. But its caller is - still cancelled, so the yield-from expression still raises - CancelledError. Note: If something() is cancelled by other means - this will still cancel shield(). - - If you want to completely ignore cancellation (not recommended) - you can combine shield() with a try/except clause, as follows: - - task = asyncio.create_task(something()) - try: - res = await shield(task) - except CancelledError: - res = None - - Save a reference to tasks passed to this function, to avoid - a task disappearing mid-execution. The event loop only keeps - weak references to tasks. A task that isn't referenced elsewhere - may get garbage collected at any time, even before it's done. - """ - inner = ensure_future(arg) - if inner.done(): - # Shortcut. - return inner - loop = futures._get_loop(inner) - outer = loop.create_future() - - if loop is not None and (cur_task := current_task(loop)) is not None: - futures.future_add_to_awaited_by(inner, cur_task) - else: - cur_task = None - - def _clear_awaited_by_callback(inner): - futures.future_discard_from_awaited_by(inner, cur_task) - - def _inner_done_callback(inner): - if outer.cancelled(): - return - - if inner.cancelled(): - outer.cancel() - else: - exc = inner.exception() - if exc is not None: - outer.set_exception(exc) - else: - outer.set_result(inner.result()) - - def _outer_done_callback(outer): - if not inner.done(): - inner.remove_done_callback(_inner_done_callback) - # Keep only one callback to log on cancel - inner.remove_done_callback(_log_on_exception) - inner.add_done_callback(_log_on_exception) - - if cur_task is not None: - inner.add_done_callback(_clear_awaited_by_callback) - - - inner.add_done_callback(_inner_done_callback) - outer.add_done_callback(_outer_done_callback) - return outer - - -def run_coroutine_threadsafe(coro, loop): - """Submit a coroutine object to a given event loop. - - Return a concurrent.futures.Future to access the result. - """ - if not coroutines.iscoroutine(coro): - raise TypeError('A coroutine object is required') - future = concurrent.futures.Future() - - def callback(): - try: - futures._chain_future(ensure_future(coro, loop=loop), future) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - if future.set_running_or_notify_cancel(): - future.set_exception(exc) - raise - - loop.call_soon_threadsafe(callback) - return future - - -def create_eager_task_factory(custom_task_constructor): - """Create a function suitable for use as a task factory on an event-loop. - - Example usage: - - loop.set_task_factory( - asyncio.create_eager_task_factory(my_task_constructor)) - - Now, tasks created will be started immediately (rather than being first - scheduled to an event loop). The constructor argument can be any callable - that returns a Task-compatible object and has a signature compatible - with `Task.__init__`; it must have the `eager_start` keyword argument. - - Most applications will use `Task` for `custom_task_constructor` and in - this case there's no need to call `create_eager_task_factory()` - directly. Instead the global `eager_task_factory` instance can be - used. E.g. `loop.set_task_factory(asyncio.eager_task_factory)`. - """ - - def factory(loop, coro, *, eager_start=True, **kwargs): - return custom_task_constructor( - coro, loop=loop, eager_start=eager_start, **kwargs) - - return factory - - -eager_task_factory = create_eager_task_factory(Task) - - -# Collectively these two sets hold references to the complete set of active -# tasks. Eagerly executed tasks use a faster regular set as an optimization -# but may graduate to a WeakSet if the task blocks on IO. -_scheduled_tasks = weakref.WeakSet() -_eager_tasks = set() - -# Dictionary containing tasks that are currently active in -# all running event loops. {EventLoop: Task} -_current_tasks = {} - - -def _register_task(task): - """Register an asyncio Task scheduled to run on an event loop.""" - _scheduled_tasks.add(task) - - -def _register_eager_task(task): - """Register an asyncio Task about to be eagerly executed.""" - _eager_tasks.add(task) - - -def _enter_task(loop, task): - current_task = _current_tasks.get(loop) - if current_task is not None: - raise RuntimeError(f"Cannot enter into task {task!r} while another " - f"task {current_task!r} is being executed.") - _current_tasks[loop] = task - - -def _leave_task(loop, task): - current_task = _current_tasks.get(loop) - if current_task is not task: - raise RuntimeError(f"Leaving task {task!r} does not match " - f"the current task {current_task!r}.") - del _current_tasks[loop] - - -def _swap_current_task(loop, task): - prev_task = _current_tasks.get(loop) - if task is None: - del _current_tasks[loop] - else: - _current_tasks[loop] = task - return prev_task - - -def _unregister_task(task): - """Unregister a completed, scheduled Task.""" - _scheduled_tasks.discard(task) - - -def _unregister_eager_task(task): - """Unregister a task which finished its first eager step.""" - _eager_tasks.discard(task) - - -_py_current_task = current_task -_py_register_task = _register_task -_py_register_eager_task = _register_eager_task -_py_unregister_task = _unregister_task -_py_unregister_eager_task = _unregister_eager_task -_py_enter_task = _enter_task -_py_leave_task = _leave_task -_py_swap_current_task = _swap_current_task -_py_all_tasks = all_tasks - -try: - from _asyncio import (_register_task, _register_eager_task, - _unregister_task, _unregister_eager_task, - _enter_task, _leave_task, _swap_current_task, - current_task, all_tasks) -except ImportError: - pass -else: - _c_current_task = current_task - _c_register_task = _register_task - _c_register_eager_task = _register_eager_task - _c_unregister_task = _unregister_task - _c_unregister_eager_task = _unregister_eager_task - _c_enter_task = _enter_task - _c_leave_task = _leave_task - _c_swap_current_task = _swap_current_task - _c_all_tasks = all_tasks diff --git a/Python314_4_x86_Template/Lib/asyncio/threads.py b/Python314_4_x86_Template/Lib/asyncio/threads.py deleted file mode 100644 index db048a823..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/threads.py +++ /dev/null @@ -1,25 +0,0 @@ -"""High-level support for working with threads in asyncio""" - -import functools -import contextvars - -from . import events - - -__all__ = "to_thread", - - -async def to_thread(func, /, *args, **kwargs): - """Asynchronously run function *func* in a separate thread. - - Any *args and **kwargs supplied for this function are directly passed - to *func*. Also, the current :class:`contextvars.Context` is propagated, - allowing context variables from the main thread to be accessed in the - separate thread. - - Return a coroutine that can be awaited to get the eventual result of *func*. - """ - loop = events.get_running_loop() - ctx = contextvars.copy_context() - func_call = functools.partial(ctx.run, func, *args, **kwargs) - return await loop.run_in_executor(None, func_call) diff --git a/Python314_4_x86_Template/Lib/asyncio/timeouts.py b/Python314_4_x86_Template/Lib/asyncio/timeouts.py deleted file mode 100644 index 09342dc7c..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/timeouts.py +++ /dev/null @@ -1,182 +0,0 @@ -import enum - -from types import TracebackType - -from . import events -from . import exceptions -from . import tasks - - -__all__ = ( - "Timeout", - "timeout", - "timeout_at", -) - - -class _State(enum.Enum): - CREATED = "created" - ENTERED = "active" - EXPIRING = "expiring" - EXPIRED = "expired" - EXITED = "finished" - - -class Timeout: - """Asynchronous context manager for cancelling overdue coroutines. - - Use `timeout()` or `timeout_at()` rather than instantiating this class directly. - """ - - def __init__(self, when: float | None) -> None: - """Schedule a timeout that will trigger at a given loop time. - - - If `when` is `None`, the timeout will never trigger. - - If `when < loop.time()`, the timeout will trigger on the next - iteration of the event loop. - """ - self._state = _State.CREATED - - self._timeout_handler: events.TimerHandle | None = None - self._task: tasks.Task | None = None - self._when = when - - def when(self) -> float | None: - """Return the current deadline.""" - return self._when - - def reschedule(self, when: float | None) -> None: - """Reschedule the timeout.""" - if self._state is not _State.ENTERED: - if self._state is _State.CREATED: - raise RuntimeError("Timeout has not been entered") - raise RuntimeError( - f"Cannot change state of {self._state.value} Timeout", - ) - - self._when = when - - if self._timeout_handler is not None: - self._timeout_handler.cancel() - - if when is None: - self._timeout_handler = None - else: - loop = events.get_running_loop() - if when <= loop.time(): - self._timeout_handler = loop.call_soon(self._on_timeout) - else: - self._timeout_handler = loop.call_at(when, self._on_timeout) - - def expired(self) -> bool: - """Is timeout expired during execution?""" - return self._state in (_State.EXPIRING, _State.EXPIRED) - - def __repr__(self) -> str: - info = [''] - if self._state is _State.ENTERED: - when = round(self._when, 3) if self._when is not None else None - info.append(f"when={when}") - info_str = ' '.join(info) - return f"<Timeout [{self._state.value}]{info_str}>" - - async def __aenter__(self) -> "Timeout": - if self._state is not _State.CREATED: - raise RuntimeError("Timeout has already been entered") - task = tasks.current_task() - if task is None: - raise RuntimeError("Timeout should be used inside a task") - self._state = _State.ENTERED - self._task = task - self._cancelling = self._task.cancelling() - self.reschedule(self._when) - return self - - async def __aexit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> bool | None: - assert self._state in (_State.ENTERED, _State.EXPIRING) - - if self._timeout_handler is not None: - self._timeout_handler.cancel() - self._timeout_handler = None - - if self._state is _State.EXPIRING: - self._state = _State.EXPIRED - - if self._task.uncancel() <= self._cancelling and exc_type is not None: - # Since there are no new cancel requests, we're - # handling this. - if issubclass(exc_type, exceptions.CancelledError): - raise TimeoutError from exc_val - elif exc_val is not None: - self._insert_timeout_error(exc_val) - if isinstance(exc_val, ExceptionGroup): - for exc in exc_val.exceptions: - self._insert_timeout_error(exc) - elif self._state is _State.ENTERED: - self._state = _State.EXITED - - return None - - def _on_timeout(self) -> None: - assert self._state is _State.ENTERED - self._task.cancel() - self._state = _State.EXPIRING - # drop the reference early - self._timeout_handler = None - - @staticmethod - def _insert_timeout_error(exc_val: BaseException) -> None: - while exc_val.__context__ is not None: - if isinstance(exc_val.__context__, exceptions.CancelledError): - te = TimeoutError() - te.__context__ = te.__cause__ = exc_val.__context__ - exc_val.__context__ = te - break - exc_val = exc_val.__context__ - - -def timeout(delay: float | None) -> Timeout: - """Timeout async context manager. - - Useful in cases when you want to apply timeout logic around block - of code or in cases when asyncio.wait_for is not suitable. For example: - - >>> async with asyncio.timeout(10): # 10 seconds timeout - ... await long_running_task() - - - delay - value in seconds or None to disable timeout logic - - long_running_task() is interrupted by raising asyncio.CancelledError, - the top-most affected timeout() context manager converts CancelledError - into TimeoutError. - """ - loop = events.get_running_loop() - return Timeout(loop.time() + delay if delay is not None else None) - - -def timeout_at(when: float | None) -> Timeout: - """Schedule the timeout at absolute time. - - Like timeout() but argument gives absolute time in the same clock system - as loop.time(). - - Please note: it is not POSIX time but a time with - undefined starting base, e.g. the time of the system power on. - - >>> async with asyncio.timeout_at(loop.time() + 10): - ... await long_running_task() - - - when - a deadline when timeout occurs or None to disable timeout logic - - long_running_task() is interrupted by raising asyncio.CancelledError, - the top-most affected timeout() context manager converts CancelledError - into TimeoutError. - """ - return Timeout(when) diff --git a/Python314_4_x86_Template/Lib/asyncio/tools.py b/Python314_4_x86_Template/Lib/asyncio/tools.py deleted file mode 100644 index f39e11fdd..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/tools.py +++ /dev/null @@ -1,276 +0,0 @@ -"""Tools to analyze tasks running in asyncio programs.""" - -from collections import defaultdict, namedtuple -from itertools import count -from enum import Enum -import sys -from _remote_debugging import RemoteUnwinder, FrameInfo - -class NodeType(Enum): - COROUTINE = 1 - TASK = 2 - - -class CycleFoundException(Exception): - """Raised when there is a cycle when drawing the call tree.""" - def __init__( - self, - cycles: list[list[int]], - id2name: dict[int, str], - ) -> None: - super().__init__(cycles, id2name) - self.cycles = cycles - self.id2name = id2name - - - -# ─── indexing helpers ─────────────────────────────────────────── -def _format_stack_entry(elem: str|FrameInfo) -> str: - if not isinstance(elem, str): - if elem.lineno == 0 and elem.filename == "": - return f"{elem.funcname}" - else: - return f"{elem.funcname} {elem.filename}:{elem.lineno}" - return elem - - -def _index(result): - id2name, awaits, task_stacks = {}, [], {} - for awaited_info in result: - for task_info in awaited_info.awaited_by: - task_id = task_info.task_id - task_name = task_info.task_name - id2name[task_id] = task_name - - # Store the internal coroutine stack for this task - if task_info.coroutine_stack: - for coro_info in task_info.coroutine_stack: - call_stack = coro_info.call_stack - internal_stack = [_format_stack_entry(frame) for frame in call_stack] - task_stacks[task_id] = internal_stack - - # Add the awaited_by relationships (external dependencies) - if task_info.awaited_by: - for coro_info in task_info.awaited_by: - call_stack = coro_info.call_stack - parent_task_id = coro_info.task_name - stack = [_format_stack_entry(frame) for frame in call_stack] - awaits.append((parent_task_id, stack, task_id)) - return id2name, awaits, task_stacks - - -def _build_tree(id2name, awaits, task_stacks): - id2label = {(NodeType.TASK, tid): name for tid, name in id2name.items()} - children = defaultdict(list) - cor_nodes = defaultdict(dict) # Maps parent -> {frame_name: node_key} - next_cor_id = count(1) - - def get_or_create_cor_node(parent, frame): - """Get existing coroutine node or create new one under parent""" - if frame in cor_nodes[parent]: - return cor_nodes[parent][frame] - - node_key = (NodeType.COROUTINE, f"c{next(next_cor_id)}") - id2label[node_key] = frame - children[parent].append(node_key) - cor_nodes[parent][frame] = node_key - return node_key - - # Build task dependency tree with coroutine frames - for parent_id, stack, child_id in awaits: - cur = (NodeType.TASK, parent_id) - for frame in reversed(stack): - cur = get_or_create_cor_node(cur, frame) - - child_key = (NodeType.TASK, child_id) - if child_key not in children[cur]: - children[cur].append(child_key) - - # Add coroutine stacks for leaf tasks - awaiting_tasks = {parent_id for parent_id, _, _ in awaits} - for task_id in id2name: - if task_id not in awaiting_tasks and task_id in task_stacks: - cur = (NodeType.TASK, task_id) - for frame in reversed(task_stacks[task_id]): - cur = get_or_create_cor_node(cur, frame) - - return id2label, children - - -def _roots(id2label, children): - all_children = {c for kids in children.values() for c in kids} - return [n for n in id2label if n not in all_children] - -# ─── detect cycles in the task-to-task graph ─────────────────────── -def _task_graph(awaits): - """Return {parent_task_id: {child_task_id, …}, …}.""" - g = defaultdict(set) - for parent_id, _stack, child_id in awaits: - g[parent_id].add(child_id) - return g - - -def _find_cycles(graph): - """ - Depth-first search for back-edges. - - Returns a list of cycles (each cycle is a list of task-ids) or an - empty list if the graph is acyclic. - """ - WHITE, GREY, BLACK = 0, 1, 2 - color = defaultdict(lambda: WHITE) - path, cycles = [], [] - - def dfs(v): - color[v] = GREY - path.append(v) - for w in graph.get(v, ()): - if color[w] == WHITE: - dfs(w) - elif color[w] == GREY: # back-edge → cycle! - i = path.index(w) - cycles.append(path[i:] + [w]) # make a copy - color[v] = BLACK - path.pop() - - for v in list(graph): - if color[v] == WHITE: - dfs(v) - return cycles - - -# ─── PRINT TREE FUNCTION ─────────────────────────────────────── -def get_all_awaited_by(pid): - unwinder = RemoteUnwinder(pid) - return unwinder.get_all_awaited_by() - - -def build_async_tree(result, task_emoji="(T)", cor_emoji=""): - """ - Build a list of strings for pretty-print an async call tree. - - The call tree is produced by `get_all_async_stacks()`, prefixing tasks - with `task_emoji` and coroutine frames with `cor_emoji`. - """ - id2name, awaits, task_stacks = _index(result) - g = _task_graph(awaits) - cycles = _find_cycles(g) - if cycles: - raise CycleFoundException(cycles, id2name) - labels, children = _build_tree(id2name, awaits, task_stacks) - - def pretty(node): - flag = task_emoji if node[0] == NodeType.TASK else cor_emoji - return f"{flag} {labels[node]}" - - def render(node, prefix="", last=True, buf=None): - if buf is None: - buf = [] - buf.append(f"{prefix}{'└── ' if last else '├── '}{pretty(node)}") - new_pref = prefix + (" " if last else "│ ") - kids = children.get(node, []) - for i, kid in enumerate(kids): - render(kid, new_pref, i == len(kids) - 1, buf) - return buf - - return [render(root) for root in _roots(labels, children)] - - -def build_task_table(result): - id2name, _, _ = _index(result) - table = [] - - for awaited_info in result: - thread_id = awaited_info.thread_id - for task_info in awaited_info.awaited_by: - # Get task info - task_id = task_info.task_id - task_name = task_info.task_name - - # Build coroutine stack string - frames = [frame for coro in task_info.coroutine_stack - for frame in coro.call_stack] - coro_stack = " -> ".join(_format_stack_entry(x).split(" ")[0] - for x in frames) - - # Handle tasks with no awaiters - if not task_info.awaited_by: - table.append([thread_id, hex(task_id), task_name, coro_stack, - "", "", "0x0"]) - continue - - # Handle tasks with awaiters - for coro_info in task_info.awaited_by: - parent_id = coro_info.task_name - awaiter_frames = [_format_stack_entry(x).split(" ")[0] - for x in coro_info.call_stack] - awaiter_chain = " -> ".join(awaiter_frames) - awaiter_name = id2name.get(parent_id, "Unknown") - parent_id_str = (hex(parent_id) if isinstance(parent_id, int) - else str(parent_id)) - - table.append([thread_id, hex(task_id), task_name, coro_stack, - awaiter_chain, awaiter_name, parent_id_str]) - - return table - -def _print_cycle_exception(exception: CycleFoundException): - print("ERROR: await-graph contains cycles - cannot print a tree!", file=sys.stderr) - print("", file=sys.stderr) - for c in exception.cycles: - inames = " → ".join(exception.id2name.get(tid, hex(tid)) for tid in c) - print(f"cycle: {inames}", file=sys.stderr) - - -def exit_with_permission_help_text(): - """ - Prints a message pointing to platform-specific permission help text and exits the program. - This function is called when a PermissionError is encountered while trying - to attach to a process. - """ - print( - "Error: The specified process cannot be attached to due to insufficient permissions.\n" - "See the Python documentation for details on required privileges and troubleshooting:\n" - "https://docs.python.org/3.14/howto/remote_debugging.html#permission-requirements\n" - ) - sys.exit(1) - - -def _get_awaited_by_tasks(pid: int) -> list: - try: - return get_all_awaited_by(pid) - except RuntimeError as e: - while e.__context__ is not None: - e = e.__context__ - print(f"Error retrieving tasks: {e}") - sys.exit(1) - except PermissionError as e: - exit_with_permission_help_text() - - -def display_awaited_by_tasks_table(pid: int) -> None: - """Build and print a table of all pending tasks under `pid`.""" - - tasks = _get_awaited_by_tasks(pid) - table = build_task_table(tasks) - # Print the table in a simple tabular format - print( - f"{'tid':<10} {'task id':<20} {'task name':<20} {'coroutine stack':<50} {'awaiter chain':<50} {'awaiter name':<15} {'awaiter id':<15}" - ) - print("-" * 180) - for row in table: - print(f"{row[0]:<10} {row[1]:<20} {row[2]:<20} {row[3]:<50} {row[4]:<50} {row[5]:<15} {row[6]:<15}") - - -def display_awaited_by_tasks_tree(pid: int) -> None: - """Build and print a tree of all pending tasks under `pid`.""" - - tasks = _get_awaited_by_tasks(pid) - try: - result = build_async_tree(tasks) - except CycleFoundException as e: - _print_cycle_exception(e) - sys.exit(1) - - for tree in result: - print("\n".join(tree)) diff --git a/Python314_4_x86_Template/Lib/asyncio/transports.py b/Python314_4_x86_Template/Lib/asyncio/transports.py deleted file mode 100644 index 34c7ad44f..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/transports.py +++ /dev/null @@ -1,337 +0,0 @@ -"""Abstract Transport class.""" - -__all__ = ( - 'BaseTransport', 'ReadTransport', 'WriteTransport', - 'Transport', 'DatagramTransport', 'SubprocessTransport', -) - - -class BaseTransport: - """Base class for transports.""" - - __slots__ = ('_extra',) - - def __init__(self, extra=None): - if extra is None: - extra = {} - self._extra = extra - - def get_extra_info(self, name, default=None): - """Get optional transport information.""" - return self._extra.get(name, default) - - def is_closing(self): - """Return True if the transport is closing or closed.""" - raise NotImplementedError - - def close(self): - """Close the transport. - - Buffered data will be flushed asynchronously. No more data - will be received. After all buffered data is flushed, the - protocol's connection_lost() method will (eventually) be - called with None as its argument. - """ - raise NotImplementedError - - def set_protocol(self, protocol): - """Set a new protocol.""" - raise NotImplementedError - - def get_protocol(self): - """Return the current protocol.""" - raise NotImplementedError - - -class ReadTransport(BaseTransport): - """Interface for read-only transports.""" - - __slots__ = () - - def is_reading(self): - """Return True if the transport is receiving.""" - raise NotImplementedError - - def pause_reading(self): - """Pause the receiving end. - - No data will be passed to the protocol's data_received() - method until resume_reading() is called. - """ - raise NotImplementedError - - def resume_reading(self): - """Resume the receiving end. - - Data received will once again be passed to the protocol's - data_received() method. - """ - raise NotImplementedError - - -class WriteTransport(BaseTransport): - """Interface for write-only transports.""" - - __slots__ = () - - def set_write_buffer_limits(self, high=None, low=None): - """Set the high- and low-water limits for write flow control. - - These two values control when to call the protocol's - pause_writing() and resume_writing() methods. If specified, - the low-water limit must be less than or equal to the - high-water limit. Neither value can be negative. - - The defaults are implementation-specific. If only the - high-water limit is given, the low-water limit defaults to an - implementation-specific value less than or equal to the - high-water limit. Setting high to zero forces low to zero as - well, and causes pause_writing() to be called whenever the - buffer becomes non-empty. Setting low to zero causes - resume_writing() to be called only once the buffer is empty. - Use of zero for either limit is generally sub-optimal as it - reduces opportunities for doing I/O and computation - concurrently. - """ - raise NotImplementedError - - def get_write_buffer_size(self): - """Return the current size of the write buffer.""" - raise NotImplementedError - - def get_write_buffer_limits(self): - """Get the high and low watermarks for write flow control. - Return a tuple (low, high) where low and high are - positive number of bytes.""" - raise NotImplementedError - - def write(self, data): - """Write some data bytes to the transport. - - This does not block; it buffers the data and arranges for it - to be sent out asynchronously. - """ - raise NotImplementedError - - def writelines(self, list_of_data): - """Write a list (or any iterable) of data bytes to the transport. - - The default implementation concatenates the arguments and - calls write() on the result. - """ - data = b''.join(list_of_data) - self.write(data) - - def write_eof(self): - """Close the write end after flushing buffered data. - - (This is like typing ^D into a UNIX program reading from stdin.) - - Data may still be received. - """ - raise NotImplementedError - - def can_write_eof(self): - """Return True if this transport supports write_eof(), False if not.""" - raise NotImplementedError - - def abort(self): - """Close the transport immediately. - - Buffered data will be lost. No more data will be received. - The protocol's connection_lost() method will (eventually) be - called with None as its argument. - """ - raise NotImplementedError - - -class Transport(ReadTransport, WriteTransport): - """Interface representing a bidirectional transport. - - There may be several implementations, but typically, the user does - not implement new transports; rather, the platform provides some - useful transports that are implemented using the platform's best - practices. - - The user never instantiates a transport directly; they call a - utility function, passing it a protocol factory and other - information necessary to create the transport and protocol. (E.g. - EventLoop.create_connection() or EventLoop.create_server().) - - The utility function will asynchronously create a transport and a - protocol and hook them up by calling the protocol's - connection_made() method, passing it the transport. - - The implementation here raises NotImplemented for every method - except writelines(), which calls write() in a loop. - """ - - __slots__ = () - - -class DatagramTransport(BaseTransport): - """Interface for datagram (UDP) transports.""" - - __slots__ = () - - def sendto(self, data, addr=None): - """Send data to the transport. - - This does not block; it buffers the data and arranges for it - to be sent out asynchronously. - addr is target socket address. - If addr is None use target address pointed on transport creation. - If data is an empty bytes object a zero-length datagram will be - sent. - """ - raise NotImplementedError - - def abort(self): - """Close the transport immediately. - - Buffered data will be lost. No more data will be received. - The protocol's connection_lost() method will (eventually) be - called with None as its argument. - """ - raise NotImplementedError - - -class SubprocessTransport(BaseTransport): - - __slots__ = () - - def get_pid(self): - """Get subprocess id.""" - raise NotImplementedError - - def get_returncode(self): - """Get subprocess returncode. - - See also - http://docs.python.org/3/library/subprocess#subprocess.Popen.returncode - """ - raise NotImplementedError - - def get_pipe_transport(self, fd): - """Get transport for pipe with number fd.""" - raise NotImplementedError - - def send_signal(self, signal): - """Send signal to subprocess. - - See also: - docs.python.org/3/library/subprocess#subprocess.Popen.send_signal - """ - raise NotImplementedError - - def terminate(self): - """Stop the subprocess. - - Alias for close() method. - - On Posix OSs the method sends SIGTERM to the subprocess. - On Windows the Win32 API function TerminateProcess() - is called to stop the subprocess. - - See also: - http://docs.python.org/3/library/subprocess#subprocess.Popen.terminate - """ - raise NotImplementedError - - def kill(self): - """Kill the subprocess. - - On Posix OSs the function sends SIGKILL to the subprocess. - On Windows kill() is an alias for terminate(). - - See also: - http://docs.python.org/3/library/subprocess#subprocess.Popen.kill - """ - raise NotImplementedError - - -class _FlowControlMixin(Transport): - """All the logic for (write) flow control in a mix-in base class. - - The subclass must implement get_write_buffer_size(). It must call - _maybe_pause_protocol() whenever the write buffer size increases, - and _maybe_resume_protocol() whenever it decreases. It may also - override set_write_buffer_limits() (e.g. to specify different - defaults). - - The subclass constructor must call super().__init__(extra). This - will call set_write_buffer_limits(). - - The user may call set_write_buffer_limits() and - get_write_buffer_size(), and their protocol's pause_writing() and - resume_writing() may be called. - """ - - __slots__ = ('_loop', '_protocol_paused', '_high_water', '_low_water') - - def __init__(self, extra=None, loop=None): - super().__init__(extra) - assert loop is not None - self._loop = loop - self._protocol_paused = False - self._set_write_buffer_limits() - - def _maybe_pause_protocol(self): - size = self.get_write_buffer_size() - if size <= self._high_water: - return - if not self._protocol_paused: - self._protocol_paused = True - try: - self._protocol.pause_writing() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.pause_writing() failed', - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - - def _maybe_resume_protocol(self): - if (self._protocol_paused and - self.get_write_buffer_size() <= self._low_water): - self._protocol_paused = False - try: - self._protocol.resume_writing() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.resume_writing() failed', - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - - def get_write_buffer_limits(self): - return (self._low_water, self._high_water) - - def _set_write_buffer_limits(self, high=None, low=None): - if high is None: - if low is None: - high = 64 * 1024 - else: - high = 4 * low - if low is None: - low = high // 4 - - if not high >= low >= 0: - raise ValueError( - f'high ({high!r}) must be >= low ({low!r}) must be >= 0') - - self._high_water = high - self._low_water = low - - def set_write_buffer_limits(self, high=None, low=None): - self._set_write_buffer_limits(high=high, low=low) - self._maybe_pause_protocol() - - def get_write_buffer_size(self): - raise NotImplementedError diff --git a/Python314_4_x86_Template/Lib/asyncio/trsock.py b/Python314_4_x86_Template/Lib/asyncio/trsock.py deleted file mode 100644 index c1f20473b..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/trsock.py +++ /dev/null @@ -1,98 +0,0 @@ -import socket - - -class TransportSocket: - - """A socket-like wrapper for exposing real transport sockets. - - These objects can be safely returned by APIs like - `transport.get_extra_info('socket')`. All potentially disruptive - operations (like "socket.close()") are banned. - """ - - __slots__ = ('_sock',) - - def __init__(self, sock: socket.socket): - self._sock = sock - - @property - def family(self): - return self._sock.family - - @property - def type(self): - return self._sock.type - - @property - def proto(self): - return self._sock.proto - - def __repr__(self): - s = ( - f"<asyncio.TransportSocket fd={self.fileno()}, " - f"family={self.family!s}, type={self.type!s}, " - f"proto={self.proto}" - ) - - if self.fileno() != -1: - try: - laddr = self.getsockname() - if laddr: - s = f"{s}, laddr={laddr}" - except socket.error: - pass - try: - raddr = self.getpeername() - if raddr: - s = f"{s}, raddr={raddr}" - except socket.error: - pass - - return f"{s}>" - - def __getstate__(self): - raise TypeError("Cannot serialize asyncio.TransportSocket object") - - def fileno(self): - return self._sock.fileno() - - def dup(self): - return self._sock.dup() - - def get_inheritable(self): - return self._sock.get_inheritable() - - def shutdown(self, how): - # asyncio doesn't currently provide a high-level transport API - # to shutdown the connection. - self._sock.shutdown(how) - - def getsockopt(self, *args, **kwargs): - return self._sock.getsockopt(*args, **kwargs) - - def setsockopt(self, *args, **kwargs): - self._sock.setsockopt(*args, **kwargs) - - def getpeername(self): - return self._sock.getpeername() - - def getsockname(self): - return self._sock.getsockname() - - def getsockbyname(self): - return self._sock.getsockbyname() - - def settimeout(self, value): - if value == 0: - return - raise ValueError( - 'settimeout(): only 0 timeout is allowed on transport sockets') - - def gettimeout(self): - return 0 - - def setblocking(self, flag): - if not flag: - return - raise ValueError( - 'setblocking(): transport sockets cannot be blocking') diff --git a/Python314_4_x86_Template/Lib/asyncio/unix_events.py b/Python314_4_x86_Template/Lib/asyncio/unix_events.py deleted file mode 100644 index 1c1458127..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/unix_events.py +++ /dev/null @@ -1,972 +0,0 @@ -"""Selector event loop for Unix with signal handling.""" - -import errno -import io -import itertools -import os -import selectors -import signal -import socket -import stat -import subprocess -import sys -import threading -import warnings - -from . import base_events -from . import base_subprocess -from . import constants -from . import coroutines -from . import events -from . import exceptions -from . import futures -from . import selector_events -from . import tasks -from . import transports -from .log import logger - - -__all__ = ( - 'SelectorEventLoop', - 'EventLoop', -) - - -if sys.platform == 'win32': # pragma: no cover - raise ImportError('Signals are not really supported on Windows') - - -def _sighandler_noop(signum, frame): - """Dummy signal handler.""" - pass - - -def waitstatus_to_exitcode(status): - try: - return os.waitstatus_to_exitcode(status) - except ValueError: - # The child exited, but we don't understand its status. - # This shouldn't happen, but if it does, let's just - # return that status; perhaps that helps debug it. - return status - - -class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): - """Unix event loop. - - Adds signal handling and UNIX Domain Socket support to SelectorEventLoop. - """ - - def __init__(self, selector=None): - super().__init__(selector) - self._signal_handlers = {} - self._unix_server_sockets = {} - if can_use_pidfd(): - self._watcher = _PidfdChildWatcher() - else: - self._watcher = _ThreadedChildWatcher() - - def close(self): - super().close() - if not sys.is_finalizing(): - for sig in list(self._signal_handlers): - self.remove_signal_handler(sig) - else: - if self._signal_handlers: - warnings.warn(f"Closing the loop {self!r} " - f"on interpreter shutdown " - f"stage, skipping signal handlers removal", - ResourceWarning, - source=self) - self._signal_handlers.clear() - - def _process_self_data(self, data): - for signum in data: - if not signum: - # ignore null bytes written by _write_to_self() - continue - self._handle_signal(signum) - - def add_signal_handler(self, sig, callback, *args): - """Add a handler for a signal. UNIX only. - - Raise ValueError if the signal number is invalid or uncatchable. - Raise RuntimeError if there is a problem setting up the handler. - """ - if (coroutines.iscoroutine(callback) or - coroutines._iscoroutinefunction(callback)): - raise TypeError("coroutines cannot be used " - "with add_signal_handler()") - self._check_signal(sig) - self._check_closed() - try: - # set_wakeup_fd() raises ValueError if this is not the - # main thread. By calling it early we ensure that an - # event loop running in another thread cannot add a signal - # handler. - signal.set_wakeup_fd(self._csock.fileno()) - except (ValueError, OSError) as exc: - raise RuntimeError(str(exc)) - - handle = events.Handle(callback, args, self, None) - self._signal_handlers[sig] = handle - - try: - # Register a dummy signal handler to ask Python to write the signal - # number in the wakeup file descriptor. _process_self_data() will - # read signal numbers from this file descriptor to handle signals. - signal.signal(sig, _sighandler_noop) - - # Set SA_RESTART to limit EINTR occurrences. - signal.siginterrupt(sig, False) - except OSError as exc: - del self._signal_handlers[sig] - if not self._signal_handlers: - try: - signal.set_wakeup_fd(-1) - except (ValueError, OSError) as nexc: - logger.info('set_wakeup_fd(-1) failed: %s', nexc) - - if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig} cannot be caught') - else: - raise - - def _handle_signal(self, sig): - """Internal helper that is the actual signal handler.""" - handle = self._signal_handlers.get(sig) - if handle is None: - return # Assume it's some race condition. - if handle._cancelled: - self.remove_signal_handler(sig) # Remove it properly. - else: - self._add_callback_signalsafe(handle) - - def remove_signal_handler(self, sig): - """Remove a handler for a signal. UNIX only. - - Return True if a signal handler was removed, False if not. - """ - self._check_signal(sig) - try: - del self._signal_handlers[sig] - except KeyError: - return False - - if sig == signal.SIGINT: - handler = signal.default_int_handler - else: - handler = signal.SIG_DFL - - try: - signal.signal(sig, handler) - except OSError as exc: - if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig} cannot be caught') - else: - raise - - if not self._signal_handlers: - try: - signal.set_wakeup_fd(-1) - except (ValueError, OSError) as exc: - logger.info('set_wakeup_fd(-1) failed: %s', exc) - - return True - - def _check_signal(self, sig): - """Internal helper to validate a signal. - - Raise ValueError if the signal number is invalid or uncatchable. - Raise RuntimeError if there is a problem setting up the handler. - """ - if not isinstance(sig, int): - raise TypeError(f'sig must be an int, not {sig!r}') - - if sig not in signal.valid_signals(): - raise ValueError(f'invalid signal number {sig}') - - def _make_read_pipe_transport(self, pipe, protocol, waiter=None, - extra=None): - return _UnixReadPipeTransport(self, pipe, protocol, waiter, extra) - - def _make_write_pipe_transport(self, pipe, protocol, waiter=None, - extra=None): - return _UnixWritePipeTransport(self, pipe, protocol, waiter, extra) - - async def _make_subprocess_transport(self, protocol, args, shell, - stdin, stdout, stderr, bufsize, - extra=None, **kwargs): - watcher = self._watcher - waiter = self.create_future() - transp = _UnixSubprocessTransport(self, protocol, args, shell, - stdin, stdout, stderr, bufsize, - waiter=waiter, extra=extra, - **kwargs) - watcher.add_child_handler(transp.get_pid(), - self._child_watcher_callback, transp) - try: - await waiter - except (SystemExit, KeyboardInterrupt): - raise - except BaseException: - transp.close() - await transp._wait() - raise - - return transp - - def _child_watcher_callback(self, pid, returncode, transp): - self.call_soon_threadsafe(transp._process_exited, returncode) - - async def create_unix_connection( - self, protocol_factory, path=None, *, - ssl=None, sock=None, - server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): - assert server_hostname is None or isinstance(server_hostname, str) - if ssl: - if server_hostname is None: - raise ValueError( - 'you have to pass server_hostname when using ssl') - else: - if server_hostname is not None: - raise ValueError('server_hostname is only meaningful with ssl') - if ssl_handshake_timeout is not None: - raise ValueError( - 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - - if path is not None: - if sock is not None: - raise ValueError( - 'path and sock can not be specified at the same time') - - path = os.fspath(path) - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0) - try: - sock.setblocking(False) - await self.sock_connect(sock, path) - except: - sock.close() - raise - - else: - if sock is None: - raise ValueError('no path and sock were specified') - if (sock.family != socket.AF_UNIX or - sock.type != socket.SOCK_STREAM): - raise ValueError( - f'A UNIX Domain Stream Socket was expected, got {sock!r}') - sock.setblocking(False) - - transport, protocol = await self._create_connection_transport( - sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) - return transport, protocol - - async def create_unix_server( - self, protocol_factory, path=None, *, - sock=None, backlog=100, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, - start_serving=True, cleanup_socket=True): - if isinstance(ssl, bool): - raise TypeError('ssl argument must be an SSLContext or None') - - if ssl_handshake_timeout is not None and not ssl: - raise ValueError( - 'ssl_handshake_timeout is only meaningful with ssl') - - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - - if path is not None: - if sock is not None: - raise ValueError( - 'path and sock can not be specified at the same time') - - path = os.fspath(path) - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - - # Check for abstract socket. `str` and `bytes` paths are supported. - if path[0] not in (0, '\x00'): - try: - if stat.S_ISSOCK(os.stat(path).st_mode): - os.remove(path) - except FileNotFoundError: - pass - except OSError as err: - # Directory may have permissions only to create socket. - logger.error('Unable to check or remove stale UNIX socket ' - '%r: %r', path, err) - - try: - sock.bind(path) - except OSError as exc: - sock.close() - if exc.errno == errno.EADDRINUSE: - # Let's improve the error message by adding - # with what exact address it occurs. - msg = f'Address {path!r} is already in use' - raise OSError(errno.EADDRINUSE, msg) from None - else: - raise - except: - sock.close() - raise - else: - if sock is None: - raise ValueError( - 'path was not specified, and no sock specified') - - if (sock.family != socket.AF_UNIX or - sock.type != socket.SOCK_STREAM): - raise ValueError( - f'A UNIX Domain Stream Socket was expected, got {sock!r}') - - if cleanup_socket: - path = sock.getsockname() - # Check for abstract socket. `str` and `bytes` paths are supported. - if path[0] not in (0, '\x00'): - try: - self._unix_server_sockets[sock] = os.stat(path).st_ino - except FileNotFoundError: - pass - - sock.setblocking(False) - server = base_events.Server(self, [sock], protocol_factory, - ssl, backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) - if start_serving: - server._start_serving() - # Skip one loop iteration so that all 'loop.add_reader' - # go through. - await tasks.sleep(0) - - return server - - async def _sock_sendfile_native(self, sock, file, offset, count): - try: - os.sendfile - except AttributeError: - raise exceptions.SendfileNotAvailableError( - "os.sendfile() is not available") - try: - fileno = file.fileno() - except (AttributeError, io.UnsupportedOperation) as err: - raise exceptions.SendfileNotAvailableError("not a regular file") - try: - fsize = os.fstat(fileno).st_size - except OSError: - raise exceptions.SendfileNotAvailableError("not a regular file") - blocksize = count if count else fsize - if not blocksize: - return 0 # empty file - - fut = self.create_future() - self._sock_sendfile_native_impl(fut, None, sock, fileno, - offset, count, blocksize, 0) - return await fut - - def _sock_sendfile_native_impl(self, fut, registered_fd, sock, fileno, - offset, count, blocksize, total_sent): - fd = sock.fileno() - if registered_fd is not None: - # Remove the callback early. It should be rare that the - # selector says the fd is ready but the call still returns - # EAGAIN, and I am willing to take a hit in that case in - # order to simplify the common case. - self.remove_writer(registered_fd) - if fut.cancelled(): - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - return - if count: - blocksize = count - total_sent - if blocksize <= 0: - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - fut.set_result(total_sent) - return - - # On 32-bit architectures truncate to 1GiB to avoid OverflowError - blocksize = min(blocksize, sys.maxsize//2 + 1) - - try: - sent = os.sendfile(fd, fileno, offset, blocksize) - except (BlockingIOError, InterruptedError): - if registered_fd is None: - self._sock_add_cancellation_callback(fut, sock) - self.add_writer(fd, self._sock_sendfile_native_impl, fut, - fd, sock, fileno, - offset, count, blocksize, total_sent) - except OSError as exc: - if (registered_fd is not None and - exc.errno == errno.ENOTCONN and - type(exc) is not ConnectionError): - # If we have an ENOTCONN and this isn't a first call to - # sendfile(), i.e. the connection was closed in the middle - # of the operation, normalize the error to ConnectionError - # to make it consistent across all Posix systems. - new_exc = ConnectionError( - "socket is not connected", errno.ENOTCONN) - new_exc.__cause__ = exc - exc = new_exc - if total_sent == 0: - # We can get here for different reasons, the main - # one being 'file' is not a regular mmap(2)-like - # file, in which case we'll fall back on using - # plain send(). - err = exceptions.SendfileNotAvailableError( - "os.sendfile call failed") - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - fut.set_exception(err) - else: - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - fut.set_exception(exc) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - fut.set_exception(exc) - else: - if sent == 0: - # EOF - self._sock_sendfile_update_filepos(fileno, offset, total_sent) - fut.set_result(total_sent) - else: - offset += sent - total_sent += sent - if registered_fd is None: - self._sock_add_cancellation_callback(fut, sock) - self.add_writer(fd, self._sock_sendfile_native_impl, fut, - fd, sock, fileno, - offset, count, blocksize, total_sent) - - def _sock_sendfile_update_filepos(self, fileno, offset, total_sent): - if total_sent > 0: - os.lseek(fileno, offset, os.SEEK_SET) - - def _sock_add_cancellation_callback(self, fut, sock): - def cb(fut): - if fut.cancelled(): - fd = sock.fileno() - if fd != -1: - self.remove_writer(fd) - fut.add_done_callback(cb) - - def _stop_serving(self, sock): - # Is this a unix socket that needs cleanup? - if sock in self._unix_server_sockets: - path = sock.getsockname() - else: - path = None - - super()._stop_serving(sock) - - if path is not None: - prev_ino = self._unix_server_sockets[sock] - del self._unix_server_sockets[sock] - try: - if os.stat(path).st_ino == prev_ino: - os.unlink(path) - except FileNotFoundError: - pass - except OSError as err: - logger.error('Unable to clean up listening UNIX socket ' - '%r: %r', path, err) - - -class _UnixReadPipeTransport(transports.ReadTransport): - - max_size = 256 * 1024 # max bytes we read in one event loop iteration - - def __init__(self, loop, pipe, protocol, waiter=None, extra=None): - super().__init__(extra) - self._extra['pipe'] = pipe - self._loop = loop - self._pipe = pipe - self._fileno = pipe.fileno() - self._protocol = protocol - self._closing = False - self._paused = False - - mode = os.fstat(self._fileno).st_mode - if not (stat.S_ISFIFO(mode) or - stat.S_ISSOCK(mode) or - stat.S_ISCHR(mode)): - self._pipe = None - self._fileno = None - self._protocol = None - raise ValueError("Pipe transport is for pipes/sockets only.") - - os.set_blocking(self._fileno, False) - - self._loop.call_soon(self._protocol.connection_made, self) - # only start reading when connection_made() has been called - self._loop.call_soon(self._add_reader, - self._fileno, self._read_ready) - if waiter is not None: - # only wake up the waiter when connection_made() has been called - self._loop.call_soon(futures._set_result_unless_cancelled, - waiter, None) - - def _add_reader(self, fd, callback): - if not self.is_reading(): - return - self._loop._add_reader(fd, callback) - - def is_reading(self): - return not self._paused and not self._closing - - def __repr__(self): - info = [self.__class__.__name__] - if self._pipe is None: - info.append('closed') - elif self._closing: - info.append('closing') - info.append(f'fd={self._fileno}') - selector = getattr(self._loop, '_selector', None) - if self._pipe is not None and selector is not None: - polling = selector_events._test_selector_event( - selector, self._fileno, selectors.EVENT_READ) - if polling: - info.append('polling') - else: - info.append('idle') - elif self._pipe is not None: - info.append('open') - else: - info.append('closed') - return '<{}>'.format(' '.join(info)) - - def _read_ready(self): - try: - data = os.read(self._fileno, self.max_size) - except (BlockingIOError, InterruptedError): - pass - except OSError as exc: - self._fatal_error(exc, 'Fatal read error on pipe transport') - else: - if data: - self._protocol.data_received(data) - else: - if self._loop.get_debug(): - logger.info("%r was closed by peer", self) - self._closing = True - self._loop._remove_reader(self._fileno) - self._loop.call_soon(self._protocol.eof_received) - self._loop.call_soon(self._call_connection_lost, None) - - def pause_reading(self): - if not self.is_reading(): - return - self._paused = True - self._loop._remove_reader(self._fileno) - if self._loop.get_debug(): - logger.debug("%r pauses reading", self) - - def resume_reading(self): - if self._closing or not self._paused: - return - self._paused = False - self._loop._add_reader(self._fileno, self._read_ready) - if self._loop.get_debug(): - logger.debug("%r resumes reading", self) - - def set_protocol(self, protocol): - self._protocol = protocol - - def get_protocol(self): - return self._protocol - - def is_closing(self): - return self._closing - - def close(self): - if not self._closing: - self._close(None) - - def __del__(self, _warn=warnings.warn): - if self._pipe is not None: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self._pipe.close() - - def _fatal_error(self, exc, message='Fatal error on pipe transport'): - # should be called by exception handler only - if (isinstance(exc, OSError) and exc.errno == errno.EIO): - if self._loop.get_debug(): - logger.debug("%r: %s", self, message, exc_info=True) - else: - self._loop.call_exception_handler({ - 'message': message, - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - self._close(exc) - - def _close(self, exc): - self._closing = True - self._loop._remove_reader(self._fileno) - self._loop.call_soon(self._call_connection_lost, exc) - - def _call_connection_lost(self, exc): - try: - self._protocol.connection_lost(exc) - finally: - self._pipe.close() - self._pipe = None - self._protocol = None - self._loop = None - - -class _UnixWritePipeTransport(transports._FlowControlMixin, - transports.WriteTransport): - - def __init__(self, loop, pipe, protocol, waiter=None, extra=None): - super().__init__(extra, loop) - self._extra['pipe'] = pipe - self._pipe = pipe - self._fileno = pipe.fileno() - self._protocol = protocol - self._buffer = bytearray() - self._conn_lost = 0 - self._closing = False # Set when close() or write_eof() called. - - mode = os.fstat(self._fileno).st_mode - is_char = stat.S_ISCHR(mode) - is_fifo = stat.S_ISFIFO(mode) - is_socket = stat.S_ISSOCK(mode) - if not (is_char or is_fifo or is_socket): - self._pipe = None - self._fileno = None - self._protocol = None - raise ValueError("Pipe transport is only for " - "pipes, sockets and character devices") - - os.set_blocking(self._fileno, False) - self._loop.call_soon(self._protocol.connection_made, self) - - # On AIX, the reader trick (to be notified when the read end of the - # socket is closed) only works for sockets. On other platforms it - # works for pipes and sockets. (Exception: OS X 10.4? Issue #19294.) - if is_socket or (is_fifo and not sys.platform.startswith("aix")): - # only start reading when connection_made() has been called - self._loop.call_soon(self._loop._add_reader, - self._fileno, self._read_ready) - - if waiter is not None: - # only wake up the waiter when connection_made() has been called - self._loop.call_soon(futures._set_result_unless_cancelled, - waiter, None) - - def __repr__(self): - info = [self.__class__.__name__] - if self._pipe is None: - info.append('closed') - elif self._closing: - info.append('closing') - info.append(f'fd={self._fileno}') - selector = getattr(self._loop, '_selector', None) - if self._pipe is not None and selector is not None: - polling = selector_events._test_selector_event( - selector, self._fileno, selectors.EVENT_WRITE) - if polling: - info.append('polling') - else: - info.append('idle') - - bufsize = self.get_write_buffer_size() - info.append(f'bufsize={bufsize}') - elif self._pipe is not None: - info.append('open') - else: - info.append('closed') - return '<{}>'.format(' '.join(info)) - - def get_write_buffer_size(self): - return len(self._buffer) - - def _read_ready(self): - # Pipe was closed by peer. - if self._loop.get_debug(): - logger.info("%r was closed by peer", self) - if self._buffer: - self._close(BrokenPipeError()) - else: - self._close() - - def write(self, data): - assert isinstance(data, (bytes, bytearray, memoryview)), repr(data) - if isinstance(data, bytearray): - data = memoryview(data) - if not data: - return - - if self._conn_lost or self._closing: - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('pipe closed by peer or ' - 'os.write(pipe, data) raised exception.') - self._conn_lost += 1 - return - - if not self._buffer: - # Attempt to send it right away first. - try: - n = os.write(self._fileno, data) - except (BlockingIOError, InterruptedError): - n = 0 - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._conn_lost += 1 - self._fatal_error(exc, 'Fatal write error on pipe transport') - return - if n == len(data): - return - elif n > 0: - data = memoryview(data)[n:] - self._loop._add_writer(self._fileno, self._write_ready) - - self._buffer += data - self._maybe_pause_protocol() - - def _write_ready(self): - assert self._buffer, 'Data should not be empty' - - try: - n = os.write(self._fileno, self._buffer) - except (BlockingIOError, InterruptedError): - pass - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: - self._buffer.clear() - self._conn_lost += 1 - # Remove writer here, _fatal_error() doesn't it - # because _buffer is empty. - self._loop._remove_writer(self._fileno) - self._fatal_error(exc, 'Fatal write error on pipe transport') - else: - if n == len(self._buffer): - self._buffer.clear() - self._loop._remove_writer(self._fileno) - self._maybe_resume_protocol() # May append to buffer. - if self._closing: - self._loop._remove_reader(self._fileno) - self._call_connection_lost(None) - return - elif n > 0: - del self._buffer[:n] - - def can_write_eof(self): - return True - - def write_eof(self): - if self._closing: - return - assert self._pipe - self._closing = True - if not self._buffer: - self._loop._remove_reader(self._fileno) - self._loop.call_soon(self._call_connection_lost, None) - - def set_protocol(self, protocol): - self._protocol = protocol - - def get_protocol(self): - return self._protocol - - def is_closing(self): - return self._closing - - def close(self): - if self._pipe is not None and not self._closing: - # write_eof is all what we needed to close the write pipe - self.write_eof() - - def __del__(self, _warn=warnings.warn): - if self._pipe is not None: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self._pipe.close() - - def abort(self): - self._close(None) - - def _fatal_error(self, exc, message='Fatal error on pipe transport'): - # should be called by exception handler only - if isinstance(exc, OSError): - if self._loop.get_debug(): - logger.debug("%r: %s", self, message, exc_info=True) - else: - self._loop.call_exception_handler({ - 'message': message, - 'exception': exc, - 'transport': self, - 'protocol': self._protocol, - }) - self._close(exc) - - def _close(self, exc=None): - self._closing = True - if self._buffer: - self._loop._remove_writer(self._fileno) - self._buffer.clear() - self._loop._remove_reader(self._fileno) - self._loop.call_soon(self._call_connection_lost, exc) - - def _call_connection_lost(self, exc): - try: - self._protocol.connection_lost(exc) - finally: - self._pipe.close() - self._pipe = None - self._protocol = None - self._loop = None - - -class _UnixSubprocessTransport(base_subprocess.BaseSubprocessTransport): - - def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs): - stdin_w = None - if stdin == subprocess.PIPE and sys.platform.startswith('aix'): - # Use a socket pair for stdin on AIX, since it does not - # support selecting read events on the write end of a - # socket (which we use in order to detect closing of the - # other end). - stdin, stdin_w = socket.socketpair() - try: - self._proc = subprocess.Popen( - args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr, - universal_newlines=False, bufsize=bufsize, **kwargs) - if stdin_w is not None: - stdin.close() - self._proc.stdin = open(stdin_w.detach(), 'wb', buffering=bufsize) - stdin_w = None - finally: - if stdin_w is not None: - stdin.close() - stdin_w.close() - - -class _PidfdChildWatcher: - """Child watcher implementation using Linux's pid file descriptors. - - This child watcher polls process file descriptors (pidfds) to await child - process termination. In some respects, PidfdChildWatcher is a "Goldilocks" - child watcher implementation. It doesn't require signals or threads, doesn't - interfere with any processes launched outside the event loop, and scales - linearly with the number of subprocesses launched by the event loop. The - main disadvantage is that pidfds are specific to Linux, and only work on - recent (5.3+) kernels. - """ - - def add_child_handler(self, pid, callback, *args): - loop = events.get_running_loop() - pidfd = os.pidfd_open(pid) - loop._add_reader(pidfd, self._do_wait, pid, pidfd, callback, args) - - def _do_wait(self, pid, pidfd, callback, args): - loop = events.get_running_loop() - loop._remove_reader(pidfd) - try: - _, status = os.waitpid(pid, 0) - except ChildProcessError: - # The child process is already reaped - # (may happen if waitpid() is called elsewhere). - returncode = 255 - logger.warning( - "child process pid %d exit status already read: " - " will report returncode 255", - pid) - else: - returncode = waitstatus_to_exitcode(status) - - os.close(pidfd) - callback(pid, returncode, *args) - -class _ThreadedChildWatcher: - """Threaded child watcher implementation. - - The watcher uses a thread per process - for waiting for the process finish. - - It doesn't require subscription on POSIX signal - but a thread creation is not free. - - The watcher has O(1) complexity, its performance doesn't depend - on amount of spawn processes. - """ - - def __init__(self): - self._pid_counter = itertools.count(0) - self._threads = {} - - def __del__(self, _warn=warnings.warn): - threads = [thread for thread in list(self._threads.values()) - if thread.is_alive()] - if threads: - _warn(f"{self.__class__} has registered but not finished child processes", - ResourceWarning, - source=self) - - def add_child_handler(self, pid, callback, *args): - loop = events.get_running_loop() - thread = threading.Thread(target=self._do_waitpid, - name=f"asyncio-waitpid-{next(self._pid_counter)}", - args=(loop, pid, callback, args), - daemon=True) - self._threads[pid] = thread - thread.start() - - def _do_waitpid(self, loop, expected_pid, callback, args): - assert expected_pid > 0 - - try: - pid, status = os.waitpid(expected_pid, 0) - except ChildProcessError: - # The child process is already reaped - # (may happen if waitpid() is called elsewhere). - pid = expected_pid - returncode = 255 - logger.warning( - "Unknown child process pid %d, will report returncode 255", - pid) - else: - returncode = waitstatus_to_exitcode(status) - if loop.get_debug(): - logger.debug('process %s exited with returncode %s', - expected_pid, returncode) - - if loop.is_closed(): - logger.warning("Loop %r that handles pid %r is closed", loop, pid) - else: - loop.call_soon_threadsafe(callback, pid, returncode, *args) - - self._threads.pop(expected_pid) - -def can_use_pidfd(): - if not hasattr(os, 'pidfd_open'): - return False - try: - pid = os.getpid() - os.close(os.pidfd_open(pid, 0)) - except OSError: - # blocked by security policy like SECCOMP - return False - return True - - -class _UnixDefaultEventLoopPolicy(events._BaseDefaultEventLoopPolicy): - """UNIX event loop policy""" - _loop_factory = _UnixSelectorEventLoop - - -SelectorEventLoop = _UnixSelectorEventLoop -_DefaultEventLoopPolicy = _UnixDefaultEventLoopPolicy -EventLoop = SelectorEventLoop diff --git a/Python314_4_x86_Template/Lib/asyncio/windows_events.py b/Python314_4_x86_Template/Lib/asyncio/windows_events.py deleted file mode 100644 index 5f75b17d8..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/windows_events.py +++ /dev/null @@ -1,903 +0,0 @@ -"""Selector and proactor event loops for Windows.""" - -import sys - -if sys.platform != 'win32': # pragma: no cover - raise ImportError('win32 only') - -import _overlapped -import _winapi -import errno -from functools import partial -import math -import msvcrt -import socket -import struct -import time -import weakref - -from . import events -from . import base_subprocess -from . import futures -from . import exceptions -from . import proactor_events -from . import selector_events -from . import tasks -from . import windows_utils -from .log import logger - - -__all__ = ( - 'SelectorEventLoop', 'ProactorEventLoop', 'IocpProactor', - '_DefaultEventLoopPolicy', '_WindowsSelectorEventLoopPolicy', - '_WindowsProactorEventLoopPolicy', 'EventLoop', -) - - -NULL = _winapi.NULL -INFINITE = _winapi.INFINITE -ERROR_CONNECTION_REFUSED = 1225 -ERROR_CONNECTION_ABORTED = 1236 - -# Initial delay in seconds for connect_pipe() before retrying to connect -CONNECT_PIPE_INIT_DELAY = 0.001 - -# Maximum delay in seconds for connect_pipe() before retrying to connect -CONNECT_PIPE_MAX_DELAY = 0.100 - - -class _OverlappedFuture(futures.Future): - """Subclass of Future which represents an overlapped operation. - - Cancelling it will immediately cancel the overlapped operation. - """ - - def __init__(self, ov, *, loop=None): - super().__init__(loop=loop) - if self._source_traceback: - del self._source_traceback[-1] - self._ov = ov - - def _repr_info(self): - info = super()._repr_info() - if self._ov is not None: - state = 'pending' if self._ov.pending else 'completed' - info.insert(1, f'overlapped=<{state}, {self._ov.address:#x}>') - return info - - def _cancel_overlapped(self): - if self._ov is None: - return - try: - self._ov.cancel() - except OSError as exc: - context = { - 'message': 'Cancelling an overlapped future failed', - 'exception': exc, - 'future': self, - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - self._ov = None - - def cancel(self, msg=None): - self._cancel_overlapped() - return super().cancel(msg=msg) - - def set_exception(self, exception): - super().set_exception(exception) - self._cancel_overlapped() - - def set_result(self, result): - super().set_result(result) - self._ov = None - - -class _BaseWaitHandleFuture(futures.Future): - """Subclass of Future which represents a wait handle.""" - - def __init__(self, ov, handle, wait_handle, *, loop=None): - super().__init__(loop=loop) - if self._source_traceback: - del self._source_traceback[-1] - # Keep a reference to the Overlapped object to keep it alive until the - # wait is unregistered - self._ov = ov - self._handle = handle - self._wait_handle = wait_handle - - # Should we call UnregisterWaitEx() if the wait completes - # or is cancelled? - self._registered = True - - def _poll(self): - # non-blocking wait: use a timeout of 0 millisecond - return (_winapi.WaitForSingleObject(self._handle, 0) == - _winapi.WAIT_OBJECT_0) - - def _repr_info(self): - info = super()._repr_info() - info.append(f'handle={self._handle:#x}') - if self._handle is not None: - state = 'signaled' if self._poll() else 'waiting' - info.append(state) - if self._wait_handle is not None: - info.append(f'wait_handle={self._wait_handle:#x}') - return info - - def _unregister_wait_cb(self, fut): - # The wait was unregistered: it's not safe to destroy the Overlapped - # object - self._ov = None - - def _unregister_wait(self): - if not self._registered: - return - self._registered = False - - wait_handle = self._wait_handle - self._wait_handle = None - try: - _overlapped.UnregisterWait(wait_handle) - except OSError as exc: - if exc.winerror != _overlapped.ERROR_IO_PENDING: - context = { - 'message': 'Failed to unregister the wait handle', - 'exception': exc, - 'future': self, - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - return - # ERROR_IO_PENDING means that the unregister is pending - - self._unregister_wait_cb(None) - - def cancel(self, msg=None): - self._unregister_wait() - return super().cancel(msg=msg) - - def set_exception(self, exception): - self._unregister_wait() - super().set_exception(exception) - - def set_result(self, result): - self._unregister_wait() - super().set_result(result) - - -class _WaitCancelFuture(_BaseWaitHandleFuture): - """Subclass of Future which represents a wait for the cancellation of a - _WaitHandleFuture using an event. - """ - - def __init__(self, ov, event, wait_handle, *, loop=None): - super().__init__(ov, event, wait_handle, loop=loop) - - self._done_callback = None - - def cancel(self): - raise RuntimeError("_WaitCancelFuture must not be cancelled") - - def set_result(self, result): - super().set_result(result) - if self._done_callback is not None: - self._done_callback(self) - - def set_exception(self, exception): - super().set_exception(exception) - if self._done_callback is not None: - self._done_callback(self) - - -class _WaitHandleFuture(_BaseWaitHandleFuture): - def __init__(self, ov, handle, wait_handle, proactor, *, loop=None): - super().__init__(ov, handle, wait_handle, loop=loop) - self._proactor = proactor - self._unregister_proactor = True - self._event = _overlapped.CreateEvent(None, True, False, None) - self._event_fut = None - - def _unregister_wait_cb(self, fut): - if self._event is not None: - _winapi.CloseHandle(self._event) - self._event = None - self._event_fut = None - - # If the wait was cancelled, the wait may never be signalled, so - # it's required to unregister it. Otherwise, IocpProactor.close() will - # wait forever for an event which will never come. - # - # If the IocpProactor already received the event, it's safe to call - # _unregister() because we kept a reference to the Overlapped object - # which is used as a unique key. - self._proactor._unregister(self._ov) - self._proactor = None - - super()._unregister_wait_cb(fut) - - def _unregister_wait(self): - if not self._registered: - return - self._registered = False - - wait_handle = self._wait_handle - self._wait_handle = None - try: - _overlapped.UnregisterWaitEx(wait_handle, self._event) - except OSError as exc: - if exc.winerror != _overlapped.ERROR_IO_PENDING: - context = { - 'message': 'Failed to unregister the wait handle', - 'exception': exc, - 'future': self, - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - return - # ERROR_IO_PENDING is not an error, the wait was unregistered - - self._event_fut = self._proactor._wait_cancel(self._event, - self._unregister_wait_cb) - - -class PipeServer(object): - """Class representing a pipe server. - - This is much like a bound, listening socket. - """ - def __init__(self, address): - self._address = address - self._free_instances = weakref.WeakSet() - # initialize the pipe attribute before calling _server_pipe_handle() - # because this function can raise an exception and the destructor calls - # the close() method - self._pipe = None - self._accept_pipe_future = None - self._pipe = self._server_pipe_handle(True) - - def _get_unconnected_pipe(self): - # Create new instance and return previous one. This ensures - # that (until the server is closed) there is always at least - # one pipe handle for address. Therefore if a client attempt - # to connect it will not fail with FileNotFoundError. - tmp, self._pipe = self._pipe, self._server_pipe_handle(False) - return tmp - - def _server_pipe_handle(self, first): - # Return a wrapper for a new pipe handle. - if self.closed(): - return None - flags = _winapi.PIPE_ACCESS_DUPLEX | _winapi.FILE_FLAG_OVERLAPPED - if first: - flags |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE - h = _winapi.CreateNamedPipe( - self._address, flags, - _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE | - _winapi.PIPE_WAIT, - _winapi.PIPE_UNLIMITED_INSTANCES, - windows_utils.BUFSIZE, windows_utils.BUFSIZE, - _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL) - pipe = windows_utils.PipeHandle(h) - self._free_instances.add(pipe) - return pipe - - def closed(self): - return (self._address is None) - - def close(self): - if self._accept_pipe_future is not None: - self._accept_pipe_future.cancel() - self._accept_pipe_future = None - # Close all instances which have not been connected to by a client. - if self._address is not None: - for pipe in self._free_instances: - pipe.close() - self._pipe = None - self._address = None - self._free_instances.clear() - - __del__ = close - - -class _WindowsSelectorEventLoop(selector_events.BaseSelectorEventLoop): - """Windows version of selector event loop.""" - - -class ProactorEventLoop(proactor_events.BaseProactorEventLoop): - """Windows version of proactor event loop using IOCP.""" - - def __init__(self, proactor=None): - if proactor is None: - proactor = IocpProactor() - super().__init__(proactor) - - def _run_forever_setup(self): - assert self._self_reading_future is None - self.call_soon(self._loop_self_reading) - super()._run_forever_setup() - - def _run_forever_cleanup(self): - super()._run_forever_cleanup() - if self._self_reading_future is not None: - ov = self._self_reading_future._ov - self._self_reading_future.cancel() - # self_reading_future always uses IOCP, so even though it's - # been cancelled, we need to make sure that the IOCP message - # is received so that the kernel is not holding on to the - # memory, possibly causing memory corruption later. Only - # unregister it if IO is complete in all respects. Otherwise - # we need another _poll() later to complete the IO. - if ov is not None and not ov.pending: - self._proactor._unregister(ov) - self._self_reading_future = None - - async def create_pipe_connection(self, protocol_factory, address): - f = self._proactor.connect_pipe(address) - pipe = await f - protocol = protocol_factory() - trans = self._make_duplex_pipe_transport(pipe, protocol, - extra={'addr': address}) - return trans, protocol - - async def start_serving_pipe(self, protocol_factory, address): - server = PipeServer(address) - - def loop_accept_pipe(f=None): - pipe = None - try: - if f: - pipe = f.result() - server._free_instances.discard(pipe) - - if server.closed(): - # A client connected before the server was closed: - # drop the client (close the pipe) and exit - pipe.close() - return - - protocol = protocol_factory() - self._make_duplex_pipe_transport( - pipe, protocol, extra={'addr': address}) - - pipe = server._get_unconnected_pipe() - if pipe is None: - return - - f = self._proactor.accept_pipe(pipe) - except BrokenPipeError: - if pipe and pipe.fileno() != -1: - pipe.close() - self.call_soon(loop_accept_pipe) - except OSError as exc: - if pipe and pipe.fileno() != -1: - self.call_exception_handler({ - 'message': 'Pipe accept failed', - 'exception': exc, - 'pipe': pipe, - }) - pipe.close() - elif self._debug: - logger.warning("Accept pipe failed on pipe %r", - pipe, exc_info=True) - self.call_soon(loop_accept_pipe) - except exceptions.CancelledError: - if pipe: - pipe.close() - else: - server._accept_pipe_future = f - f.add_done_callback(loop_accept_pipe) - - self.call_soon(loop_accept_pipe) - return [server] - - async def _make_subprocess_transport(self, protocol, args, shell, - stdin, stdout, stderr, bufsize, - extra=None, **kwargs): - waiter = self.create_future() - transp = _WindowsSubprocessTransport(self, protocol, args, shell, - stdin, stdout, stderr, bufsize, - waiter=waiter, extra=extra, - **kwargs) - try: - await waiter - except (SystemExit, KeyboardInterrupt): - raise - except BaseException: - transp.close() - await transp._wait() - raise - - return transp - - -class IocpProactor: - """Proactor implementation using IOCP.""" - - def __init__(self, concurrency=INFINITE): - self._loop = None - self._results = [] - self._iocp = _overlapped.CreateIoCompletionPort( - _overlapped.INVALID_HANDLE_VALUE, NULL, 0, concurrency) - self._cache = {} - self._registered = weakref.WeakSet() - self._unregistered = [] - self._stopped_serving = weakref.WeakSet() - - def _check_closed(self): - if self._iocp is None: - raise RuntimeError('IocpProactor is closed') - - def __repr__(self): - info = ['overlapped#=%s' % len(self._cache), - 'result#=%s' % len(self._results)] - if self._iocp is None: - info.append('closed') - return '<%s %s>' % (self.__class__.__name__, " ".join(info)) - - def set_loop(self, loop): - self._loop = loop - - def select(self, timeout=None): - if not self._results: - self._poll(timeout) - tmp = self._results - self._results = [] - try: - return tmp - finally: - # Needed to break cycles when an exception occurs. - tmp = None - - def _result(self, value): - fut = self._loop.create_future() - fut.set_result(value) - return fut - - @staticmethod - def finish_socket_func(trans, key, ov): - try: - return ov.getresult() - except OSError as exc: - if exc.winerror in (_overlapped.ERROR_NETNAME_DELETED, - _overlapped.ERROR_OPERATION_ABORTED): - raise ConnectionResetError(*exc.args) - else: - raise - - @classmethod - def _finish_recvfrom(cls, trans, key, ov, *, empty_result): - try: - return cls.finish_socket_func(trans, key, ov) - except OSError as exc: - # WSARecvFrom will report ERROR_PORT_UNREACHABLE when the same - # socket is used to send to an address that is not listening. - if exc.winerror == _overlapped.ERROR_PORT_UNREACHABLE: - return empty_result, None - else: - raise - - def recv(self, conn, nbytes, flags=0): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - try: - if isinstance(conn, socket.socket): - ov.WSARecv(conn.fileno(), nbytes, flags) - else: - ov.ReadFile(conn.fileno(), nbytes) - except BrokenPipeError: - return self._result(b'') - - return self._register(ov, conn, self.finish_socket_func) - - def recv_into(self, conn, buf, flags=0): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - try: - if isinstance(conn, socket.socket): - ov.WSARecvInto(conn.fileno(), buf, flags) - else: - ov.ReadFileInto(conn.fileno(), buf) - except BrokenPipeError: - return self._result(0) - - return self._register(ov, conn, self.finish_socket_func) - - def recvfrom(self, conn, nbytes, flags=0): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - try: - ov.WSARecvFrom(conn.fileno(), nbytes, flags) - except BrokenPipeError: - return self._result((b'', None)) - - return self._register(ov, conn, partial(self._finish_recvfrom, - empty_result=b'')) - - def recvfrom_into(self, conn, buf, flags=0): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - try: - ov.WSARecvFromInto(conn.fileno(), buf, flags) - except BrokenPipeError: - return self._result((0, None)) - - return self._register(ov, conn, partial(self._finish_recvfrom, - empty_result=0)) - - def sendto(self, conn, buf, flags=0, addr=None): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - - ov.WSASendTo(conn.fileno(), buf, flags, addr) - - return self._register(ov, conn, self.finish_socket_func) - - def send(self, conn, buf, flags=0): - self._register_with_iocp(conn) - ov = _overlapped.Overlapped(NULL) - if isinstance(conn, socket.socket): - ov.WSASend(conn.fileno(), buf, flags) - else: - ov.WriteFile(conn.fileno(), buf) - - return self._register(ov, conn, self.finish_socket_func) - - def accept(self, listener): - self._register_with_iocp(listener) - conn = self._get_accept_socket(listener.family) - ov = _overlapped.Overlapped(NULL) - ov.AcceptEx(listener.fileno(), conn.fileno()) - - def finish_accept(trans, key, ov): - ov.getresult() - # Use SO_UPDATE_ACCEPT_CONTEXT so getsockname() etc work. - buf = struct.pack('@P', listener.fileno()) - conn.setsockopt(socket.SOL_SOCKET, - _overlapped.SO_UPDATE_ACCEPT_CONTEXT, buf) - conn.settimeout(listener.gettimeout()) - return conn, conn.getpeername() - - async def accept_coro(future, conn): - # Coroutine closing the accept socket if the future is cancelled - try: - await future - except exceptions.CancelledError: - conn.close() - raise - - future = self._register(ov, listener, finish_accept) - coro = accept_coro(future, conn) - tasks.ensure_future(coro, loop=self._loop) - return future - - def connect(self, conn, address): - if conn.type == socket.SOCK_DGRAM: - # WSAConnect will complete immediately for UDP sockets so we don't - # need to register any IOCP operation - _overlapped.WSAConnect(conn.fileno(), address) - fut = self._loop.create_future() - fut.set_result(None) - return fut - - self._register_with_iocp(conn) - # The socket needs to be locally bound before we call ConnectEx(). - try: - _overlapped.BindLocal(conn.fileno(), conn.family) - except OSError as e: - if e.winerror != errno.WSAEINVAL: - raise - # Probably already locally bound; check using getsockname(). - if conn.getsockname()[1] == 0: - raise - ov = _overlapped.Overlapped(NULL) - ov.ConnectEx(conn.fileno(), address) - - def finish_connect(trans, key, ov): - ov.getresult() - # Use SO_UPDATE_CONNECT_CONTEXT so getsockname() etc work. - conn.setsockopt(socket.SOL_SOCKET, - _overlapped.SO_UPDATE_CONNECT_CONTEXT, 0) - return conn - - return self._register(ov, conn, finish_connect) - - def sendfile(self, sock, file, offset, count): - self._register_with_iocp(sock) - ov = _overlapped.Overlapped(NULL) - offset_low = offset & 0xffff_ffff - offset_high = (offset >> 32) & 0xffff_ffff - ov.TransmitFile(sock.fileno(), - msvcrt.get_osfhandle(file.fileno()), - offset_low, offset_high, - count, 0, 0) - - return self._register(ov, sock, self.finish_socket_func) - - def accept_pipe(self, pipe): - self._register_with_iocp(pipe) - ov = _overlapped.Overlapped(NULL) - connected = ov.ConnectNamedPipe(pipe.fileno()) - - if connected: - # ConnectNamePipe() failed with ERROR_PIPE_CONNECTED which means - # that the pipe is connected. There is no need to wait for the - # completion of the connection. - return self._result(pipe) - - def finish_accept_pipe(trans, key, ov): - ov.getresult() - return pipe - - return self._register(ov, pipe, finish_accept_pipe) - - async def connect_pipe(self, address): - delay = CONNECT_PIPE_INIT_DELAY - while True: - # Unfortunately there is no way to do an overlapped connect to - # a pipe. Call CreateFile() in a loop until it doesn't fail with - # ERROR_PIPE_BUSY. - try: - handle = _overlapped.ConnectPipe(address) - break - except OSError as exc: - if exc.winerror != _overlapped.ERROR_PIPE_BUSY: - raise - - # ConnectPipe() failed with ERROR_PIPE_BUSY: retry later - delay = min(delay * 2, CONNECT_PIPE_MAX_DELAY) - await tasks.sleep(delay) - - return windows_utils.PipeHandle(handle) - - def wait_for_handle(self, handle, timeout=None): - """Wait for a handle. - - Return a Future object. The result of the future is True if the wait - completed, or False if the wait did not complete (on timeout). - """ - return self._wait_for_handle(handle, timeout, False) - - def _wait_cancel(self, event, done_callback): - fut = self._wait_for_handle(event, None, True) - # add_done_callback() cannot be used because the wait may only complete - # in IocpProactor.close(), while the event loop is not running. - fut._done_callback = done_callback - return fut - - def _wait_for_handle(self, handle, timeout, _is_cancel): - self._check_closed() - - if timeout is None: - ms = _winapi.INFINITE - else: - # RegisterWaitForSingleObject() has a resolution of 1 millisecond, - # round away from zero to wait *at least* timeout seconds. - ms = math.ceil(timeout * 1e3) - - # We only create ov so we can use ov.address as a key for the cache. - ov = _overlapped.Overlapped(NULL) - wait_handle = _overlapped.RegisterWaitWithQueue( - handle, self._iocp, ov.address, ms) - if _is_cancel: - f = _WaitCancelFuture(ov, handle, wait_handle, loop=self._loop) - else: - f = _WaitHandleFuture(ov, handle, wait_handle, self, - loop=self._loop) - if f._source_traceback: - del f._source_traceback[-1] - - def finish_wait_for_handle(trans, key, ov): - # Note that this second wait means that we should only use - # this with handles types where a successful wait has no - # effect. So events or processes are all right, but locks - # or semaphores are not. Also note if the handle is - # signalled and then quickly reset, then we may return - # False even though we have not timed out. - return f._poll() - - self._cache[ov.address] = (f, ov, 0, finish_wait_for_handle) - return f - - def _register_with_iocp(self, obj): - # To get notifications of finished ops on this objects sent to the - # completion port, were must register the handle. - if obj not in self._registered: - self._registered.add(obj) - _overlapped.CreateIoCompletionPort(obj.fileno(), self._iocp, 0, 0) - # XXX We could also use SetFileCompletionNotificationModes() - # to avoid sending notifications to completion port of ops - # that succeed immediately. - - def _register(self, ov, obj, callback): - self._check_closed() - - # Return a future which will be set with the result of the - # operation when it completes. The future's value is actually - # the value returned by callback(). - f = _OverlappedFuture(ov, loop=self._loop) - if f._source_traceback: - del f._source_traceback[-1] - if not ov.pending: - # The operation has completed, so no need to postpone the - # work. We cannot take this short cut if we need the - # NumberOfBytes, CompletionKey values returned by - # PostQueuedCompletionStatus(). - try: - value = callback(None, None, ov) - except OSError as e: - f.set_exception(e) - else: - f.set_result(value) - # Even if GetOverlappedResult() was called, we have to wait for the - # notification of the completion in GetQueuedCompletionStatus(). - # Register the overlapped operation to keep a reference to the - # OVERLAPPED object, otherwise the memory is freed and Windows may - # read uninitialized memory. - - # Register the overlapped operation for later. Note that - # we only store obj to prevent it from being garbage - # collected too early. - self._cache[ov.address] = (f, ov, obj, callback) - return f - - def _unregister(self, ov): - """Unregister an overlapped object. - - Call this method when its future has been cancelled. The event can - already be signalled (pending in the proactor event queue). It is also - safe if the event is never signalled (because it was cancelled). - """ - self._check_closed() - self._unregistered.append(ov) - - def _get_accept_socket(self, family): - s = socket.socket(family) - s.settimeout(0) - return s - - def _poll(self, timeout=None): - if timeout is None: - ms = INFINITE - elif timeout < 0: - raise ValueError("negative timeout") - else: - # GetQueuedCompletionStatus() has a resolution of 1 millisecond, - # round away from zero to wait *at least* timeout seconds. - ms = math.ceil(timeout * 1e3) - if ms >= INFINITE: - raise ValueError("timeout too big") - - while True: - status = _overlapped.GetQueuedCompletionStatus(self._iocp, ms) - if status is None: - break - ms = 0 - - err, transferred, key, address = status - try: - f, ov, obj, callback = self._cache.pop(address) - except KeyError: - if self._loop.get_debug(): - self._loop.call_exception_handler({ - 'message': ('GetQueuedCompletionStatus() returned an ' - 'unexpected event'), - 'status': ('err=%s transferred=%s key=%#x address=%#x' - % (err, transferred, key, address)), - }) - - # key is either zero, or it is used to return a pipe - # handle which should be closed to avoid a leak. - if key not in (0, _overlapped.INVALID_HANDLE_VALUE): - _winapi.CloseHandle(key) - continue - - if obj in self._stopped_serving: - f.cancel() - # Don't call the callback if _register() already read the result or - # if the overlapped has been cancelled - elif not f.done(): - try: - value = callback(transferred, key, ov) - except OSError as e: - f.set_exception(e) - self._results.append(f) - else: - f.set_result(value) - self._results.append(f) - finally: - f = None - - # Remove unregistered futures - for ov in self._unregistered: - self._cache.pop(ov.address, None) - self._unregistered.clear() - - def _stop_serving(self, obj): - # obj is a socket or pipe handle. It will be closed in - # BaseProactorEventLoop._stop_serving() which will make any - # pending operations fail quickly. - self._stopped_serving.add(obj) - - def close(self): - if self._iocp is None: - # already closed - return - - # Cancel remaining registered operations. - for fut, ov, obj, callback in list(self._cache.values()): - if fut.cancelled(): - # Nothing to do with cancelled futures - pass - elif isinstance(fut, _WaitCancelFuture): - # _WaitCancelFuture must not be cancelled - pass - else: - try: - fut.cancel() - except OSError as exc: - if self._loop is not None: - context = { - 'message': 'Cancelling a future failed', - 'exception': exc, - 'future': fut, - } - if fut._source_traceback: - context['source_traceback'] = fut._source_traceback - self._loop.call_exception_handler(context) - - # Wait until all cancelled overlapped complete: don't exit with running - # overlapped to prevent a crash. Display progress every second if the - # loop is still running. - msg_update = 1.0 - start_time = time.monotonic() - next_msg = start_time + msg_update - while self._cache: - if next_msg <= time.monotonic(): - logger.debug('%r is running after closing for %.1f seconds', - self, time.monotonic() - start_time) - next_msg = time.monotonic() + msg_update - - # handle a few events, or timeout - self._poll(msg_update) - - self._results = [] - - _winapi.CloseHandle(self._iocp) - self._iocp = None - - def __del__(self): - self.close() - - -class _WindowsSubprocessTransport(base_subprocess.BaseSubprocessTransport): - - def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs): - self._proc = windows_utils.Popen( - args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr, - bufsize=bufsize, **kwargs) - - def callback(f): - returncode = self._proc.poll() - self._process_exited(returncode) - - f = self._loop._proactor.wait_for_handle(int(self._proc._handle)) - f.add_done_callback(callback) - - -SelectorEventLoop = _WindowsSelectorEventLoop - - -class _WindowsSelectorEventLoopPolicy(events._BaseDefaultEventLoopPolicy): - _loop_factory = SelectorEventLoop - - -class _WindowsProactorEventLoopPolicy(events._BaseDefaultEventLoopPolicy): - _loop_factory = ProactorEventLoop - - -_DefaultEventLoopPolicy = _WindowsProactorEventLoopPolicy -EventLoop = ProactorEventLoop diff --git a/Python314_4_x86_Template/Lib/asyncio/windows_utils.py b/Python314_4_x86_Template/Lib/asyncio/windows_utils.py deleted file mode 100644 index acd494411..000000000 --- a/Python314_4_x86_Template/Lib/asyncio/windows_utils.py +++ /dev/null @@ -1,180 +0,0 @@ -"""Various Windows specific bits and pieces.""" - -import sys - -if sys.platform != 'win32': # pragma: no cover - raise ImportError('win32 only') - -import _winapi -import itertools -import msvcrt -import os -import subprocess -import warnings - - -__all__ = 'pipe', 'Popen', 'PIPE', 'PipeHandle' - - -# Constants/globals - - -BUFSIZE = 8192 -PIPE = subprocess.PIPE -STDOUT = subprocess.STDOUT -_mmap_counter = itertools.count() -_MAX_PIPE_ATTEMPTS = 20 - - -# Replacement for os.pipe() using handles instead of fds - - -def pipe(*, duplex=False, overlapped=(True, True), bufsize=BUFSIZE): - """Like os.pipe() but with overlapped support and using handles not fds.""" - if duplex: - openmode = _winapi.PIPE_ACCESS_DUPLEX - access = _winapi.GENERIC_READ | _winapi.GENERIC_WRITE - obsize, ibsize = bufsize, bufsize - else: - openmode = _winapi.PIPE_ACCESS_INBOUND - access = _winapi.GENERIC_WRITE - obsize, ibsize = 0, bufsize - - openmode |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE - - if overlapped[0]: - openmode |= _winapi.FILE_FLAG_OVERLAPPED - - if overlapped[1]: - flags_and_attribs = _winapi.FILE_FLAG_OVERLAPPED - else: - flags_and_attribs = 0 - - h1 = h2 = None - try: - for attempts in itertools.count(): - address = r'\\.\pipe\python-pipe-{:d}-{:d}-{}'.format( - os.getpid(), next(_mmap_counter), os.urandom(8).hex()) - try: - h1 = _winapi.CreateNamedPipe( - address, openmode, _winapi.PIPE_WAIT, - 1, obsize, ibsize, _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL) - break - except OSError as e: - if attempts >= _MAX_PIPE_ATTEMPTS: - raise - if e.winerror not in (_winapi.ERROR_PIPE_BUSY, - _winapi.ERROR_ACCESS_DENIED): - raise - - h2 = _winapi.CreateFile( - address, access, 0, _winapi.NULL, _winapi.OPEN_EXISTING, - flags_and_attribs, _winapi.NULL) - - ov = _winapi.ConnectNamedPipe(h1, overlapped=True) - ov.GetOverlappedResult(True) - return h1, h2 - except: - if h1 is not None: - _winapi.CloseHandle(h1) - if h2 is not None: - _winapi.CloseHandle(h2) - raise - - -# Wrapper for a pipe handle - - -class PipeHandle: - """Wrapper for an overlapped pipe handle which is vaguely file-object like. - - The IOCP event loop can use these instead of socket objects. - """ - def __init__(self, handle): - self._handle = handle - - def __repr__(self): - if self._handle is not None: - handle = f'handle={self._handle!r}' - else: - handle = 'closed' - return f'<{self.__class__.__name__} {handle}>' - - @property - def handle(self): - return self._handle - - def fileno(self): - if self._handle is None: - raise ValueError("I/O operation on closed pipe") - return self._handle - - def close(self, *, CloseHandle=_winapi.CloseHandle): - if self._handle is not None: - CloseHandle(self._handle) - self._handle = None - - def __del__(self, _warn=warnings.warn): - if self._handle is not None: - _warn(f"unclosed {self!r}", ResourceWarning, source=self) - self.close() - - def __enter__(self): - return self - - def __exit__(self, t, v, tb): - self.close() - - -# Replacement for subprocess.Popen using overlapped pipe handles - - -class Popen(subprocess.Popen): - """Replacement for subprocess.Popen using overlapped pipe handles. - - The stdin, stdout, stderr are None or instances of PipeHandle. - """ - def __init__(self, args, stdin=None, stdout=None, stderr=None, **kwds): - assert not kwds.get('universal_newlines') - assert kwds.get('bufsize', 0) == 0 - stdin_rfd = stdout_wfd = stderr_wfd = None - stdin_wh = stdout_rh = stderr_rh = None - if stdin == PIPE: - stdin_rh, stdin_wh = pipe(overlapped=(False, True), duplex=True) - stdin_rfd = msvcrt.open_osfhandle(stdin_rh, os.O_RDONLY) - else: - stdin_rfd = stdin - if stdout == PIPE: - stdout_rh, stdout_wh = pipe(overlapped=(True, False)) - stdout_wfd = msvcrt.open_osfhandle(stdout_wh, 0) - else: - stdout_wfd = stdout - if stderr == PIPE: - stderr_rh, stderr_wh = pipe(overlapped=(True, False)) - stderr_wfd = msvcrt.open_osfhandle(stderr_wh, 0) - elif stderr == STDOUT: - stderr_wfd = stdout_wfd - else: - stderr_wfd = stderr - try: - super().__init__(args, stdin=stdin_rfd, stdout=stdout_wfd, - stderr=stderr_wfd, **kwds) - except: - for h in (stdin_wh, stdout_rh, stderr_rh): - if h is not None: - _winapi.CloseHandle(h) - raise - else: - if stdin_wh is not None: - self.stdin = PipeHandle(stdin_wh) - if stdout_rh is not None: - self.stdout = PipeHandle(stdout_rh) - if stderr_rh is not None: - self.stderr = PipeHandle(stderr_rh) - finally: - if stdin == PIPE: - os.close(stdin_rfd) - if stdout == PIPE: - os.close(stdout_wfd) - if stderr == PIPE: - os.close(stderr_wfd) diff --git a/Python314_4_x86_Template/Lib/base64.py b/Python314_4_x86_Template/Lib/base64.py deleted file mode 100644 index f95132a42..000000000 --- a/Python314_4_x86_Template/Lib/base64.py +++ /dev/null @@ -1,618 +0,0 @@ -"""Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings""" - -# Modified 04-Oct-1995 by Jack Jansen to use binascii module -# Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support -# Modified 22-May-2007 by Guido van Rossum to use bytes everywhere - -import struct -import binascii - - -__all__ = [ - # Legacy interface exports traditional RFC 2045 Base64 encodings - 'encode', 'decode', 'encodebytes', 'decodebytes', - # Generalized interface for other encodings - 'b64encode', 'b64decode', 'b32encode', 'b32decode', - 'b32hexencode', 'b32hexdecode', 'b16encode', 'b16decode', - # Base85 and Ascii85 encodings - 'b85encode', 'b85decode', 'a85encode', 'a85decode', 'z85encode', 'z85decode', - # Standard Base64 encoding - 'standard_b64encode', 'standard_b64decode', - # Some common Base64 alternatives. As referenced by RFC 3458, see thread - # starting at: - # - # http://zgp.org/pipermail/p2p-hackers/2001-September/000316.html - 'urlsafe_b64encode', 'urlsafe_b64decode', - ] - - -bytes_types = (bytes, bytearray) # Types acceptable as binary data - -def _bytes_from_decode_data(s): - if isinstance(s, str): - try: - return s.encode('ascii') - except UnicodeEncodeError: - raise ValueError('string argument should contain only ASCII characters') - if isinstance(s, bytes_types): - return s - try: - return memoryview(s).tobytes() - except TypeError: - raise TypeError("argument should be a bytes-like object or ASCII " - "string, not %r" % s.__class__.__name__) from None - - -# Base64 encoding/decoding uses binascii - -def b64encode(s, altchars=None): - """Encode the bytes-like object s using Base64 and return a bytes object. - - Optional altchars should be a byte string of length 2 which specifies an - alternative alphabet for the '+' and '/' characters. This allows an - application to e.g. generate url or filesystem safe Base64 strings. - """ - encoded = binascii.b2a_base64(s, newline=False) - if altchars is not None: - assert len(altchars) == 2, repr(altchars) - return encoded.translate(bytes.maketrans(b'+/', altchars)) - return encoded - - -def b64decode(s, altchars=None, validate=False): - """Decode the Base64 encoded bytes-like object or ASCII string s. - - Optional altchars must be a bytes-like object or ASCII string of length 2 - which specifies the alternative alphabet used instead of the '+' and '/' - characters. - - The result is returned as a bytes object. A binascii.Error is raised if - s is incorrectly padded. - - If validate is False (the default), characters that are neither in the - normal base-64 alphabet nor the alternative alphabet are discarded prior - to the padding check. If validate is True, these non-alphabet characters - in the input result in a binascii.Error. - For more information about the strict base64 check, see: - - https://docs.python.org/3.11/library/binascii.html#binascii.a2b_base64 - """ - s = _bytes_from_decode_data(s) - if altchars is not None: - altchars = _bytes_from_decode_data(altchars) - assert len(altchars) == 2, repr(altchars) - s = s.translate(bytes.maketrans(altchars, b'+/')) - return binascii.a2b_base64(s, strict_mode=validate) - - -def standard_b64encode(s): - """Encode bytes-like object s using the standard Base64 alphabet. - - The result is returned as a bytes object. - """ - return b64encode(s) - -def standard_b64decode(s): - """Decode bytes encoded with the standard Base64 alphabet. - - Argument s is a bytes-like object or ASCII string to decode. The result - is returned as a bytes object. A binascii.Error is raised if the input - is incorrectly padded. Characters that are not in the standard alphabet - are discarded prior to the padding check. - """ - return b64decode(s) - - -_urlsafe_encode_translation = bytes.maketrans(b'+/', b'-_') -_urlsafe_decode_translation = bytes.maketrans(b'-_', b'+/') - -def urlsafe_b64encode(s): - """Encode bytes using the URL- and filesystem-safe Base64 alphabet. - - Argument s is a bytes-like object to encode. The result is returned as a - bytes object. The alphabet uses '-' instead of '+' and '_' instead of - '/'. - """ - return b64encode(s).translate(_urlsafe_encode_translation) - -def urlsafe_b64decode(s): - """Decode bytes using the URL- and filesystem-safe Base64 alphabet. - - Argument s is a bytes-like object or ASCII string to decode. The result - is returned as a bytes object. A binascii.Error is raised if the input - is incorrectly padded. Characters that are not in the URL-safe base-64 - alphabet, and are not a plus '+' or slash '/', are discarded prior to the - padding check. - - The alphabet uses '-' instead of '+' and '_' instead of '/'. - """ - s = _bytes_from_decode_data(s) - s = s.translate(_urlsafe_decode_translation) - return b64decode(s) - - - -# Base32 encoding/decoding must be done in Python -_B32_ENCODE_DOCSTRING = ''' -Encode the bytes-like objects using {encoding} and return a bytes object. -''' -_B32_DECODE_DOCSTRING = ''' -Decode the {encoding} encoded bytes-like object or ASCII string s. - -Optional casefold is a flag specifying whether a lowercase alphabet is -acceptable as input. For security purposes, the default is False. -{extra_args} -The result is returned as a bytes object. A binascii.Error is raised if -the input is incorrectly padded or if there are non-alphabet -characters present in the input. -''' -_B32_DECODE_MAP01_DOCSTRING = ''' -RFC 3548 allows for optional mapping of the digit 0 (zero) to the -letter O (oh), and for optional mapping of the digit 1 (one) to -either the letter I (eye) or letter L (el). The optional argument -map01 when not None, specifies which letter the digit 1 should be -mapped to (when map01 is not None, the digit 0 is always mapped to -the letter O). For security purposes the default is None, so that -0 and 1 are not allowed in the input. -''' -_b32alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567' -_b32hexalphabet = b'0123456789ABCDEFGHIJKLMNOPQRSTUV' -_b32tab2 = {} -_b32rev = {} - -def _b32encode(alphabet, s): - # Delay the initialization of the table to not waste memory - # if the function is never called - if alphabet not in _b32tab2: - b32tab = [bytes((i,)) for i in alphabet] - _b32tab2[alphabet] = [a + b for a in b32tab for b in b32tab] - b32tab = None - - if not isinstance(s, bytes_types): - s = memoryview(s).tobytes() - leftover = len(s) % 5 - # Pad the last quantum with zero bits if necessary - if leftover: - s = s + b'\0' * (5 - leftover) # Don't use += ! - encoded = bytearray() - from_bytes = int.from_bytes - b32tab2 = _b32tab2[alphabet] - for i in range(0, len(s), 5): - c = from_bytes(s[i: i + 5]) # big endian - encoded += (b32tab2[c >> 30] + # bits 1 - 10 - b32tab2[(c >> 20) & 0x3ff] + # bits 11 - 20 - b32tab2[(c >> 10) & 0x3ff] + # bits 21 - 30 - b32tab2[c & 0x3ff] # bits 31 - 40 - ) - # Adjust for any leftover partial quanta - if leftover == 1: - encoded[-6:] = b'======' - elif leftover == 2: - encoded[-4:] = b'====' - elif leftover == 3: - encoded[-3:] = b'===' - elif leftover == 4: - encoded[-1:] = b'=' - return bytes(encoded) - -def _b32decode(alphabet, s, casefold=False, map01=None): - # Delay the initialization of the table to not waste memory - # if the function is never called - if alphabet not in _b32rev: - _b32rev[alphabet] = {v: k for k, v in enumerate(alphabet)} - s = _bytes_from_decode_data(s) - if len(s) % 8: - raise binascii.Error('Incorrect padding') - # Handle section 2.4 zero and one mapping. The flag map01 will be either - # False, or the character to map the digit 1 (one) to. It should be - # either L (el) or I (eye). - if map01 is not None: - map01 = _bytes_from_decode_data(map01) - assert len(map01) == 1, repr(map01) - s = s.translate(bytes.maketrans(b'01', b'O' + map01)) - if casefold: - s = s.upper() - # Strip off pad characters from the right. We need to count the pad - # characters because this will tell us how many null bytes to remove from - # the end of the decoded string. - l = len(s) - s = s.rstrip(b'=') - padchars = l - len(s) - # Now decode the full quanta - decoded = bytearray() - b32rev = _b32rev[alphabet] - for i in range(0, len(s), 8): - quanta = s[i: i + 8] - acc = 0 - try: - for c in quanta: - acc = (acc << 5) + b32rev[c] - except KeyError: - raise binascii.Error('Non-base32 digit found') from None - decoded += acc.to_bytes(5) # big endian - # Process the last, partial quanta - if l % 8 or padchars not in {0, 1, 3, 4, 6}: - raise binascii.Error('Incorrect padding') - if padchars and decoded: - acc <<= 5 * padchars - last = acc.to_bytes(5) # big endian - leftover = (43 - 5 * padchars) // 8 # 1: 4, 3: 3, 4: 2, 6: 1 - decoded[-5:] = last[:leftover] - return bytes(decoded) - - -def b32encode(s): - return _b32encode(_b32alphabet, s) -b32encode.__doc__ = _B32_ENCODE_DOCSTRING.format(encoding='base32') - -def b32decode(s, casefold=False, map01=None): - return _b32decode(_b32alphabet, s, casefold, map01) -b32decode.__doc__ = _B32_DECODE_DOCSTRING.format(encoding='base32', - extra_args=_B32_DECODE_MAP01_DOCSTRING) - -def b32hexencode(s): - return _b32encode(_b32hexalphabet, s) -b32hexencode.__doc__ = _B32_ENCODE_DOCSTRING.format(encoding='base32hex') - -def b32hexdecode(s, casefold=False): - # base32hex does not have the 01 mapping - return _b32decode(_b32hexalphabet, s, casefold) -b32hexdecode.__doc__ = _B32_DECODE_DOCSTRING.format(encoding='base32hex', - extra_args='') - - -# RFC 3548, Base 16 Alphabet specifies uppercase, but hexlify() returns -# lowercase. The RFC also recommends against accepting input case -# insensitively. -def b16encode(s): - """Encode the bytes-like object s using Base16 and return a bytes object. - """ - return binascii.hexlify(s).upper() - - -def b16decode(s, casefold=False): - """Decode the Base16 encoded bytes-like object or ASCII string s. - - Optional casefold is a flag specifying whether a lowercase alphabet is - acceptable as input. For security purposes, the default is False. - - The result is returned as a bytes object. A binascii.Error is raised if - s is incorrectly padded or if there are non-alphabet characters present - in the input. - """ - s = _bytes_from_decode_data(s) - if casefold: - s = s.upper() - if s.translate(None, delete=b'0123456789ABCDEF'): - raise binascii.Error('Non-base16 digit found') - return binascii.unhexlify(s) - -# -# Ascii85 encoding/decoding -# - -_a85chars = None -_a85chars2 = None -_A85START = b"<~" -_A85END = b"~>" - -def _85encode(b, chars, chars2, pad=False, foldnuls=False, foldspaces=False): - # Helper function for a85encode and b85encode - if not isinstance(b, bytes_types): - b = memoryview(b).tobytes() - - padding = (-len(b)) % 4 - if padding: - b = b + b'\0' * padding - words = struct.Struct('!%dI' % (len(b) // 4)).unpack(b) - - chunks = [b'z' if foldnuls and not word else - b'y' if foldspaces and word == 0x20202020 else - (chars2[word // 614125] + - chars2[word // 85 % 7225] + - chars[word % 85]) - for word in words] - - if padding and not pad: - if chunks[-1] == b'z': - chunks[-1] = chars[0] * 5 - chunks[-1] = chunks[-1][:-padding] - - return b''.join(chunks) - -def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False): - """Encode bytes-like object b using Ascii85 and return a bytes object. - - foldspaces is an optional flag that uses the special short sequence 'y' - instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This - feature is not supported by the "standard" Adobe encoding. - - wrapcol controls whether the output should have newline (b'\\n') characters - added to it. If this is non-zero, each output line will be at most this - many characters long, excluding the trailing newline. - - pad controls whether the input is padded to a multiple of 4 before - encoding. Note that the btoa implementation always pads. - - adobe controls whether the encoded byte sequence is framed with <~ and ~>, - which is used by the Adobe implementation. - """ - global _a85chars, _a85chars2 - # Delay the initialization of tables to not waste memory - # if the function is never called - if _a85chars2 is None: - _a85chars = [bytes((i,)) for i in range(33, 118)] - _a85chars2 = [(a + b) for a in _a85chars for b in _a85chars] - - result = _85encode(b, _a85chars, _a85chars2, pad, True, foldspaces) - - if adobe: - result = _A85START + result - if wrapcol: - wrapcol = max(2 if adobe else 1, wrapcol) - chunks = [result[i: i + wrapcol] - for i in range(0, len(result), wrapcol)] - if adobe: - if len(chunks[-1]) + 2 > wrapcol: - chunks.append(b'') - result = b'\n'.join(chunks) - if adobe: - result += _A85END - - return result - -def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v'): - """Decode the Ascii85 encoded bytes-like object or ASCII string b. - - foldspaces is a flag that specifies whether the 'y' short sequence should be - accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature is - not supported by the "standard" Adobe encoding. - - adobe controls whether the input sequence is in Adobe Ascii85 format (i.e. - is framed with <~ and ~>). - - ignorechars should be a byte string containing characters to ignore from the - input. This should only contain whitespace characters, and by default - contains all whitespace characters in ASCII. - - The result is returned as a bytes object. - """ - b = _bytes_from_decode_data(b) - if adobe: - if not b.endswith(_A85END): - raise ValueError( - "Ascii85 encoded byte sequences must end " - "with {!r}".format(_A85END) - ) - if b.startswith(_A85START): - b = b[2:-2] # Strip off start/end markers - else: - b = b[:-2] - # - # We have to go through this stepwise, so as to ignore spaces and handle - # special short sequences - # - packI = struct.Struct('!I').pack - decoded = [] - decoded_append = decoded.append - curr = [] - curr_append = curr.append - curr_clear = curr.clear - for x in b + b'u' * 4: - if b'!'[0] <= x <= b'u'[0]: - curr_append(x) - if len(curr) == 5: - acc = 0 - for x in curr: - acc = 85 * acc + (x - 33) - try: - decoded_append(packI(acc)) - except struct.error: - raise ValueError('Ascii85 overflow') from None - curr_clear() - elif x == b'z'[0]: - if curr: - raise ValueError('z inside Ascii85 5-tuple') - decoded_append(b'\0\0\0\0') - elif foldspaces and x == b'y'[0]: - if curr: - raise ValueError('y inside Ascii85 5-tuple') - decoded_append(b'\x20\x20\x20\x20') - elif x in ignorechars: - # Skip whitespace - continue - else: - raise ValueError('Non-Ascii85 digit found: %c' % x) - - result = b''.join(decoded) - padding = 4 - len(curr) - if padding: - # Throw away the extra padding - result = result[:-padding] - return result - -# The following code is originally taken (with permission) from Mercurial - -_b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~") -_b85chars = None -_b85chars2 = None -_b85dec = None - -def b85encode(b, pad=False): - """Encode bytes-like object b in base85 format and return a bytes object. - - If pad is true, the input is padded with b'\\0' so its length is a multiple of - 4 bytes before encoding. - """ - global _b85chars, _b85chars2 - # Delay the initialization of tables to not waste memory - # if the function is never called - if _b85chars2 is None: - _b85chars = [bytes((i,)) for i in _b85alphabet] - _b85chars2 = [(a + b) for a in _b85chars for b in _b85chars] - return _85encode(b, _b85chars, _b85chars2, pad) - -def b85decode(b): - """Decode the base85-encoded bytes-like object or ASCII string b - - The result is returned as a bytes object. - """ - global _b85dec - # Delay the initialization of tables to not waste memory - # if the function is never called - if _b85dec is None: - # we don't assign to _b85dec directly to avoid issues when - # multiple threads call this function simultaneously - b85dec_tmp = [None] * 256 - for i, c in enumerate(_b85alphabet): - b85dec_tmp[c] = i - _b85dec = b85dec_tmp - - b = _bytes_from_decode_data(b) - padding = (-len(b)) % 5 - b = b + b'~' * padding - out = [] - packI = struct.Struct('!I').pack - for i in range(0, len(b), 5): - chunk = b[i:i + 5] - acc = 0 - try: - for c in chunk: - acc = acc * 85 + _b85dec[c] - except TypeError: - for j, c in enumerate(chunk): - if _b85dec[c] is None: - raise ValueError('bad base85 character at position %d' - % (i + j)) from None - raise - try: - out.append(packI(acc)) - except struct.error: - raise ValueError('base85 overflow in hunk starting at byte %d' - % i) from None - - result = b''.join(out) - if padding: - result = result[:-padding] - return result - -_z85alphabet = (b'0123456789abcdefghijklmnopqrstuvwxyz' - b'ABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#') -# Translating b85 valid but z85 invalid chars to b'\x00' is required -# to prevent them from being decoded as b85 valid chars. -_z85_b85_decode_diff = b';_`|~' -_z85_decode_translation = bytes.maketrans( - _z85alphabet + _z85_b85_decode_diff, - _b85alphabet + b'\x00' * len(_z85_b85_decode_diff) -) -_z85_encode_translation = bytes.maketrans(_b85alphabet, _z85alphabet) - -def z85encode(s): - """Encode bytes-like object b in z85 format and return a bytes object.""" - return b85encode(s).translate(_z85_encode_translation) - -def z85decode(s): - """Decode the z85-encoded bytes-like object or ASCII string b - - The result is returned as a bytes object. - """ - s = _bytes_from_decode_data(s) - s = s.translate(_z85_decode_translation) - try: - return b85decode(s) - except ValueError as e: - raise ValueError(e.args[0].replace('base85', 'z85')) from None - -# Legacy interface. This code could be cleaned up since I don't believe -# binascii has any line length limitations. It just doesn't seem worth it -# though. The files should be opened in binary mode. - -MAXLINESIZE = 76 # Excluding the CRLF -MAXBINSIZE = (MAXLINESIZE//4)*3 - -def encode(input, output): - """Encode a file; input and output are binary files.""" - while s := input.read(MAXBINSIZE): - while len(s) < MAXBINSIZE and (ns := input.read(MAXBINSIZE-len(s))): - s += ns - line = binascii.b2a_base64(s) - output.write(line) - - -def decode(input, output): - """Decode a file; input and output are binary files.""" - while line := input.readline(): - s = binascii.a2b_base64(line) - output.write(s) - -def _input_type_check(s): - try: - m = memoryview(s) - except TypeError as err: - msg = "expected bytes-like object, not %s" % s.__class__.__name__ - raise TypeError(msg) from err - if m.format not in ('c', 'b', 'B'): - msg = ("expected single byte elements, not %r from %s" % - (m.format, s.__class__.__name__)) - raise TypeError(msg) - if m.ndim != 1: - msg = ("expected 1-D data, not %d-D data from %s" % - (m.ndim, s.__class__.__name__)) - raise TypeError(msg) - - -def encodebytes(s): - """Encode a bytestring into a bytes object containing multiple lines - of base-64 data.""" - _input_type_check(s) - pieces = [] - for i in range(0, len(s), MAXBINSIZE): - chunk = s[i : i + MAXBINSIZE] - pieces.append(binascii.b2a_base64(chunk)) - return b"".join(pieces) - - -def decodebytes(s): - """Decode a bytestring of base-64 data into a bytes object.""" - _input_type_check(s) - return binascii.a2b_base64(s) - - -# Usable as a script... -def main(): - """Small main program""" - import sys, getopt - usage = f"""usage: {sys.argv[0]} [-h|-d|-e|-u] [file|-] - -h: print this help message and exit - -d, -u: decode - -e: encode (default)""" - try: - opts, args = getopt.getopt(sys.argv[1:], 'hdeu') - except getopt.error as msg: - sys.stdout = sys.stderr - print(msg) - print(usage) - sys.exit(2) - func = encode - for o, a in opts: - if o == '-e': func = encode - if o == '-d': func = decode - if o == '-u': func = decode - if o == '-h': print(usage); return - if args and args[0] != '-': - with open(args[0], 'rb') as f: - func(f, sys.stdout.buffer) - else: - if sys.stdin.isatty(): - # gh-138775: read terminal input data all at once to detect EOF - import io - data = sys.stdin.buffer.read() - buffer = io.BytesIO(data) - else: - buffer = sys.stdin.buffer - func(buffer, sys.stdout.buffer) - - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/bdb.py b/Python314_4_x86_Template/Lib/bdb.py deleted file mode 100644 index 79da4bab9..000000000 --- a/Python314_4_x86_Template/Lib/bdb.py +++ /dev/null @@ -1,1206 +0,0 @@ -"""Debugger basics""" - -import fnmatch -import sys -import threading -import os -import weakref -from contextlib import contextmanager -from inspect import CO_GENERATOR, CO_COROUTINE, CO_ASYNC_GENERATOR - -__all__ = ["BdbQuit", "Bdb", "Breakpoint"] - -GENERATOR_AND_COROUTINE_FLAGS = CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR - - -class BdbQuit(Exception): - """Exception to give up completely.""" - - -E = sys.monitoring.events - -class _MonitoringTracer: - EVENT_CALLBACK_MAP = { - E.PY_START: 'call', - E.PY_RESUME: 'call', - E.PY_THROW: 'call', - E.LINE: 'line', - E.JUMP: 'jump', - E.PY_RETURN: 'return', - E.PY_YIELD: 'return', - E.PY_UNWIND: 'unwind', - E.RAISE: 'exception', - E.STOP_ITERATION: 'exception', - E.INSTRUCTION: 'opcode', - } - - GLOBAL_EVENTS = E.PY_START | E.PY_RESUME | E.PY_THROW | E.PY_UNWIND | E.RAISE - LOCAL_EVENTS = E.LINE | E.JUMP | E.PY_RETURN | E.PY_YIELD | E.STOP_ITERATION - - def __init__(self): - self._tool_id = sys.monitoring.DEBUGGER_ID - self._name = 'bdbtracer' - self._tracefunc = None - self._disable_current_event = False - self._tracing_thread = None - self._enabled = False - - def start_trace(self, tracefunc): - self._tracefunc = tracefunc - self._tracing_thread = threading.current_thread() - curr_tool = sys.monitoring.get_tool(self._tool_id) - if curr_tool is None: - sys.monitoring.use_tool_id(self._tool_id, self._name) - elif curr_tool == self._name: - sys.monitoring.clear_tool_id(self._tool_id) - else: - raise ValueError('Another debugger is using the monitoring tool') - E = sys.monitoring.events - all_events = 0 - for event, cb_name in self.EVENT_CALLBACK_MAP.items(): - callback = self.callback_wrapper(getattr(self, f'{cb_name}_callback'), event) - sys.monitoring.register_callback(self._tool_id, event, callback) - if event != E.INSTRUCTION: - all_events |= event - self.update_local_events() - sys.monitoring.set_events(self._tool_id, self.GLOBAL_EVENTS) - self._enabled = True - - def stop_trace(self): - self._enabled = False - self._tracing_thread = None - curr_tool = sys.monitoring.get_tool(self._tool_id) - if curr_tool != self._name: - return - sys.monitoring.clear_tool_id(self._tool_id) - sys.monitoring.free_tool_id(self._tool_id) - - def disable_current_event(self): - self._disable_current_event = True - - def restart_events(self): - if sys.monitoring.get_tool(self._tool_id) == self._name: - sys.monitoring.restart_events() - - def callback_wrapper(self, func, event): - import functools - - @functools.wraps(func) - def wrapper(*args): - if self._tracing_thread != threading.current_thread(): - return - try: - frame = sys._getframe().f_back - ret = func(frame, *args) - if self._enabled and frame.f_trace: - self.update_local_events() - if ( - self._disable_current_event - and event not in (E.PY_THROW, E.PY_UNWIND, E.RAISE) - ): - return sys.monitoring.DISABLE - else: - return ret - except BaseException: - self.stop_trace() - sys._getframe().f_back.f_trace = None - raise - finally: - self._disable_current_event = False - - return wrapper - - def call_callback(self, frame, code, *args): - local_tracefunc = self._tracefunc(frame, 'call', None) - if local_tracefunc is not None: - frame.f_trace = local_tracefunc - if self._enabled: - sys.monitoring.set_local_events(self._tool_id, code, self.LOCAL_EVENTS) - - def return_callback(self, frame, code, offset, retval): - if frame.f_trace: - frame.f_trace(frame, 'return', retval) - - def unwind_callback(self, frame, code, *args): - if frame.f_trace: - frame.f_trace(frame, 'return', None) - - def line_callback(self, frame, code, *args): - if frame.f_trace and frame.f_trace_lines: - frame.f_trace(frame, 'line', None) - - def jump_callback(self, frame, code, inst_offset, dest_offset): - if dest_offset > inst_offset: - return sys.monitoring.DISABLE - inst_lineno = self._get_lineno(code, inst_offset) - dest_lineno = self._get_lineno(code, dest_offset) - if inst_lineno != dest_lineno: - return sys.monitoring.DISABLE - if frame.f_trace and frame.f_trace_lines: - frame.f_trace(frame, 'line', None) - - def exception_callback(self, frame, code, offset, exc): - if frame.f_trace: - if exc.__traceback__ and hasattr(exc.__traceback__, 'tb_frame'): - tb = exc.__traceback__ - while tb: - if tb.tb_frame.f_locals.get('self') is self: - return - tb = tb.tb_next - frame.f_trace(frame, 'exception', (type(exc), exc, exc.__traceback__)) - - def opcode_callback(self, frame, code, offset): - if frame.f_trace and frame.f_trace_opcodes: - frame.f_trace(frame, 'opcode', None) - - def update_local_events(self, frame=None): - if sys.monitoring.get_tool(self._tool_id) != self._name: - return - if frame is None: - frame = sys._getframe().f_back - while frame is not None: - if frame.f_trace is not None: - if frame.f_trace_opcodes: - events = self.LOCAL_EVENTS | E.INSTRUCTION - else: - events = self.LOCAL_EVENTS - sys.monitoring.set_local_events(self._tool_id, frame.f_code, events) - frame = frame.f_back - - def _get_lineno(self, code, offset): - import dis - last_lineno = None - for start, lineno in dis.findlinestarts(code): - if offset < start: - return last_lineno - last_lineno = lineno - return last_lineno - - -class Bdb: - """Generic Python debugger base class. - - This class takes care of details of the trace facility; - a derived class should implement user interaction. - The standard debugger class (pdb.Pdb) is an example. - - The optional skip argument must be an iterable of glob-style - module name patterns. The debugger will not step into frames - that originate in a module that matches one of these patterns. - Whether a frame is considered to originate in a certain module - is determined by the __name__ in the frame globals. - """ - - def __init__(self, skip=None, backend='settrace'): - self.skip = set(skip) if skip else None - self.breaks = {} - self.fncache = {} - self.frame_trace_lines_opcodes = {} - self.frame_returning = None - self.trace_opcodes = False - self.enterframe = None - self.cmdframe = None - self.cmdlineno = None - self.code_linenos = weakref.WeakKeyDictionary() - self.backend = backend - if backend == 'monitoring': - self.monitoring_tracer = _MonitoringTracer() - elif backend == 'settrace': - self.monitoring_tracer = None - else: - raise ValueError(f"Invalid backend '{backend}'") - - self._load_breaks() - - def canonic(self, filename): - """Return canonical form of filename. - - For real filenames, the canonical form is a case-normalized (on - case insensitive filesystems) absolute path. 'Filenames' with - angle brackets, such as "<stdin>", generated in interactive - mode, are returned unchanged. - """ - if filename == "<" + filename[1:-1] + ">": - return filename - canonic = self.fncache.get(filename) - if not canonic: - canonic = os.path.abspath(filename) - canonic = os.path.normcase(canonic) - self.fncache[filename] = canonic - return canonic - - def start_trace(self): - if self.monitoring_tracer: - self.monitoring_tracer.start_trace(self.trace_dispatch) - else: - sys.settrace(self.trace_dispatch) - - def stop_trace(self): - if self.monitoring_tracer: - self.monitoring_tracer.stop_trace() - else: - sys.settrace(None) - - def reset(self): - """Set values of attributes as ready to start debugging.""" - import linecache - linecache.checkcache() - self.botframe = None - self._set_stopinfo(None, None) - - @contextmanager - def set_enterframe(self, frame): - self.enterframe = frame - yield - self.enterframe = None - - def trace_dispatch(self, frame, event, arg): - """Dispatch a trace function for debugged frames based on the event. - - This function is installed as the trace function for debugged - frames. Its return value is the new trace function, which is - usually itself. The default implementation decides how to - dispatch a frame, depending on the type of event (passed in as a - string) that is about to be executed. - - The event can be one of the following: - line: A new line of code is going to be executed. - call: A function is about to be called or another code block - is entered. - return: A function or other code block is about to return. - exception: An exception has occurred. - c_call: A C function is about to be called. - c_return: A C function has returned. - c_exception: A C function has raised an exception. - - For the Python events, specialized functions (see the dispatch_*() - methods) are called. For the C events, no action is taken. - - The arg parameter depends on the previous event. - """ - - with self.set_enterframe(frame): - if self.quitting: - return # None - if event == 'line': - return self.dispatch_line(frame) - if event == 'call': - return self.dispatch_call(frame, arg) - if event == 'return': - return self.dispatch_return(frame, arg) - if event == 'exception': - return self.dispatch_exception(frame, arg) - if event == 'c_call': - return self.trace_dispatch - if event == 'c_exception': - return self.trace_dispatch - if event == 'c_return': - return self.trace_dispatch - if event == 'opcode': - return self.dispatch_opcode(frame, arg) - print('bdb.Bdb.dispatch: unknown debugging event:', repr(event)) - return self.trace_dispatch - - def dispatch_line(self, frame): - """Invoke user function and return trace function for line event. - - If the debugger stops on the current line, invoke - self.user_line(). Raise BdbQuit if self.quitting is set. - Return self.trace_dispatch to continue tracing in this scope. - """ - # GH-136057 - # For line events, we don't want to stop at the same line where - # the latest next/step command was issued. - if (self.stop_here(frame) or self.break_here(frame)) and not ( - self.cmdframe == frame and self.cmdlineno == frame.f_lineno - ): - self.user_line(frame) - self.restart_events() - if self.quitting: raise BdbQuit - elif not self.get_break(frame.f_code.co_filename, frame.f_lineno): - self.disable_current_event() - return self.trace_dispatch - - def dispatch_call(self, frame, arg): - """Invoke user function and return trace function for call event. - - If the debugger stops on this function call, invoke - self.user_call(). Raise BdbQuit if self.quitting is set. - Return self.trace_dispatch to continue tracing in this scope. - """ - # XXX 'arg' is no longer used - if self.botframe is None: - # First call of dispatch since reset() - self.botframe = frame.f_back # (CT) Note that this may also be None! - return self.trace_dispatch - if not (self.stop_here(frame) or self.break_anywhere(frame)): - # We already know there's no breakpoint in this function - # If it's a next/until/return command, we don't need any CALL event - # and we don't need to set the f_trace on any new frame. - # If it's a step command, it must either hit stop_here, or skip the - # whole module. Either way, we don't need the CALL event here. - self.disable_current_event() - return # None - # Ignore call events in generator except when stepping. - if self.stopframe and frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS: - return self.trace_dispatch - self.user_call(frame, arg) - self.restart_events() - if self.quitting: raise BdbQuit - return self.trace_dispatch - - def dispatch_return(self, frame, arg): - """Invoke user function and return trace function for return event. - - If the debugger stops on this function return, invoke - self.user_return(). Raise BdbQuit if self.quitting is set. - Return self.trace_dispatch to continue tracing in this scope. - """ - if self.stop_here(frame) or frame == self.returnframe: - # Ignore return events in generator except when stepping. - if self.stopframe and frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS: - # It's possible to trigger a StopIteration exception in - # the caller so we must set the trace function in the caller - self._set_caller_tracefunc(frame) - return self.trace_dispatch - try: - self.frame_returning = frame - self.user_return(frame, arg) - self.restart_events() - finally: - self.frame_returning = None - if self.quitting: raise BdbQuit - # The user issued a 'next' or 'until' command. - if self.stopframe is frame and self.stoplineno != -1: - self._set_stopinfo(None, None) - # The previous frame might not have f_trace set, unless we are - # issuing a command that does not expect to stop, we should set - # f_trace - if self.stoplineno != -1: - self._set_caller_tracefunc(frame) - return self.trace_dispatch - - def dispatch_exception(self, frame, arg): - """Invoke user function and return trace function for exception event. - - If the debugger stops on this exception, invoke - self.user_exception(). Raise BdbQuit if self.quitting is set. - Return self.trace_dispatch to continue tracing in this scope. - """ - if self.stop_here(frame): - # When stepping with next/until/return in a generator frame, skip - # the internal StopIteration exception (with no traceback) - # triggered by a subiterator run with the 'yield from' statement. - if not (frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS - and arg[0] is StopIteration and arg[2] is None): - self.user_exception(frame, arg) - self.restart_events() - if self.quitting: raise BdbQuit - # Stop at the StopIteration or GeneratorExit exception when the user - # has set stopframe in a generator by issuing a return command, or a - # next/until command at the last statement in the generator before the - # exception. - elif (self.stopframe and frame is not self.stopframe - and self.stopframe.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS - and arg[0] in (StopIteration, GeneratorExit)): - self.user_exception(frame, arg) - self.restart_events() - if self.quitting: raise BdbQuit - - return self.trace_dispatch - - def dispatch_opcode(self, frame, arg): - """Invoke user function and return trace function for opcode event. - If the debugger stops on the current opcode, invoke - self.user_opcode(). Raise BdbQuit if self.quitting is set. - Return self.trace_dispatch to continue tracing in this scope. - - Opcode event will always trigger the user callback. For now the only - opcode event is from an inline set_trace() and we want to stop there - unconditionally. - """ - self.user_opcode(frame) - self.restart_events() - if self.quitting: raise BdbQuit - return self.trace_dispatch - - # Normally derived classes don't override the following - # methods, but they may if they want to redefine the - # definition of stopping and breakpoints. - - def is_skipped_module(self, module_name): - "Return True if module_name matches any skip pattern." - if module_name is None: # some modules do not have names - return False - for pattern in self.skip: - if fnmatch.fnmatch(module_name, pattern): - return True - return False - - def stop_here(self, frame): - "Return True if frame is below the starting frame in the stack." - # (CT) stopframe may now also be None, see dispatch_call. - # (CT) the former test for None is therefore removed from here. - if self.skip and \ - self.is_skipped_module(frame.f_globals.get('__name__')): - return False - if frame is self.stopframe: - if self.stoplineno == -1: - return False - return frame.f_lineno >= self.stoplineno - if not self.stopframe: - return True - return False - - def break_here(self, frame): - """Return True if there is an effective breakpoint for this line. - - Check for line or function breakpoint and if in effect. - Delete temporary breakpoints if effective() says to. - """ - filename = self.canonic(frame.f_code.co_filename) - if filename not in self.breaks: - return False - lineno = frame.f_lineno - if lineno not in self.breaks[filename]: - # The line itself has no breakpoint, but maybe the line is the - # first line of a function with breakpoint set by function name. - lineno = frame.f_code.co_firstlineno - if lineno not in self.breaks[filename]: - return False - - # flag says ok to delete temp. bp - (bp, flag) = effective(filename, lineno, frame) - if bp: - self.currentbp = bp.number - if (flag and bp.temporary): - self.do_clear(str(bp.number)) - return True - else: - return False - - def do_clear(self, arg): - """Remove temporary breakpoint. - - Must implement in derived classes or get NotImplementedError. - """ - raise NotImplementedError("subclass of bdb must implement do_clear()") - - def break_anywhere(self, frame): - """Return True if there is any breakpoint in that frame - """ - filename = self.canonic(frame.f_code.co_filename) - if filename not in self.breaks: - return False - for lineno in self.breaks[filename]: - if self._lineno_in_frame(lineno, frame): - return True - return False - - def _lineno_in_frame(self, lineno, frame): - """Return True if the line number is in the frame's code object. - """ - code = frame.f_code - if lineno < code.co_firstlineno: - return False - if code not in self.code_linenos: - self.code_linenos[code] = set(lineno for _, _, lineno in code.co_lines()) - return lineno in self.code_linenos[code] - - # Derived classes should override the user_* methods - # to gain control. - - def user_call(self, frame, argument_list): - """Called if we might stop in a function.""" - pass - - def user_line(self, frame): - """Called when we stop or break at a line.""" - pass - - def user_return(self, frame, return_value): - """Called when a return trap is set here.""" - pass - - def user_exception(self, frame, exc_info): - """Called when we stop on an exception.""" - pass - - def user_opcode(self, frame): - """Called when we are about to execute an opcode.""" - pass - - def _set_trace_opcodes(self, trace_opcodes): - if trace_opcodes != self.trace_opcodes: - self.trace_opcodes = trace_opcodes - frame = self.enterframe - while frame is not None: - frame.f_trace_opcodes = trace_opcodes - if frame is self.botframe: - break - frame = frame.f_back - if self.monitoring_tracer: - self.monitoring_tracer.update_local_events() - - def _set_stopinfo(self, stopframe, returnframe, stoplineno=0, opcode=False, - cmdframe=None, cmdlineno=None): - """Set the attributes for stopping. - - If stoplineno is greater than or equal to 0, then stop at line - greater than or equal to the stopline. If stoplineno is -1, then - don't stop at all. - """ - self.stopframe = stopframe - self.returnframe = returnframe - self.quitting = False - # stoplineno >= 0 means: stop at line >= the stoplineno - # stoplineno -1 means: don't stop at all - self.stoplineno = stoplineno - # cmdframe/cmdlineno is the frame/line number when the user issued - # step/next commands. - self.cmdframe = cmdframe - self.cmdlineno = cmdlineno - self._set_trace_opcodes(opcode) - - def _set_caller_tracefunc(self, current_frame): - # Issue #13183: pdb skips frames after hitting a breakpoint and running - # step commands. - # Restore the trace function in the caller (that may not have been set - # for performance reasons) when returning from the current frame, unless - # the caller is the botframe. - caller_frame = current_frame.f_back - if caller_frame and not caller_frame.f_trace and caller_frame is not self.botframe: - caller_frame.f_trace = self.trace_dispatch - - # Derived classes and clients can call the following methods - # to affect the stepping state. - - def set_until(self, frame, lineno=None): - """Stop when the line with the lineno greater than the current one is - reached or when returning from current frame.""" - # the name "until" is borrowed from gdb - if lineno is None: - lineno = frame.f_lineno + 1 - self._set_stopinfo(frame, frame, lineno) - - def set_step(self): - """Stop after one line of code.""" - # set_step() could be called from signal handler so enterframe might be None - self._set_stopinfo(None, None, cmdframe=self.enterframe, - cmdlineno=getattr(self.enterframe, 'f_lineno', None)) - - def set_stepinstr(self): - """Stop before the next instruction.""" - self._set_stopinfo(None, None, opcode=True) - - def set_next(self, frame): - """Stop on the next line in or below the given frame.""" - self._set_stopinfo(frame, None, cmdframe=frame, cmdlineno=frame.f_lineno) - - def set_return(self, frame): - """Stop when returning from the given frame.""" - if frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS: - self._set_stopinfo(frame, frame, -1) - else: - self._set_stopinfo(frame.f_back, frame) - - def set_trace(self, frame=None): - """Start debugging from frame. - - If frame is not specified, debugging starts from caller's frame. - """ - self.stop_trace() - if frame is None: - frame = sys._getframe().f_back - self.reset() - with self.set_enterframe(frame): - while frame: - frame.f_trace = self.trace_dispatch - self.botframe = frame - self.frame_trace_lines_opcodes[frame] = (frame.f_trace_lines, frame.f_trace_opcodes) - # We need f_trace_lines == True for the debugger to work - frame.f_trace_lines = True - frame = frame.f_back - self.set_stepinstr() - self.enterframe = None - self.start_trace() - - def set_continue(self): - """Stop only at breakpoints or when finished. - - If there are no breakpoints, set the system trace function to None. - """ - # Don't stop except at breakpoints or when finished - self._set_stopinfo(self.botframe, None, -1) - if not self.breaks: - # no breakpoints; run without debugger overhead - self.stop_trace() - frame = sys._getframe().f_back - while frame and frame is not self.botframe: - del frame.f_trace - frame = frame.f_back - for frame, (trace_lines, trace_opcodes) in self.frame_trace_lines_opcodes.items(): - frame.f_trace_lines, frame.f_trace_opcodes = trace_lines, trace_opcodes - if self.backend == 'monitoring': - self.monitoring_tracer.update_local_events() - self.frame_trace_lines_opcodes = {} - - def set_quit(self): - """Set quitting attribute to True. - - Raises BdbQuit exception in the next call to a dispatch_*() method. - """ - self.stopframe = self.botframe - self.returnframe = None - self.quitting = True - self.stop_trace() - - # Derived classes and clients can call the following methods - # to manipulate breakpoints. These methods return an - # error message if something went wrong, None if all is well. - # Set_break prints out the breakpoint line and file:lineno. - # Call self.get_*break*() to see the breakpoints or better - # for bp in Breakpoint.bpbynumber: if bp: bp.bpprint(). - - def _add_to_breaks(self, filename, lineno): - """Add breakpoint to breaks, if not already there.""" - bp_linenos = self.breaks.setdefault(filename, []) - if lineno not in bp_linenos: - bp_linenos.append(lineno) - - def set_break(self, filename, lineno, temporary=False, cond=None, - funcname=None): - """Set a new breakpoint for filename:lineno. - - If lineno doesn't exist for the filename, return an error message. - The filename should be in canonical form. - """ - filename = self.canonic(filename) - import linecache # Import as late as possible - line = linecache.getline(filename, lineno) - if not line: - return 'Line %s:%d does not exist' % (filename, lineno) - self._add_to_breaks(filename, lineno) - bp = Breakpoint(filename, lineno, temporary, cond, funcname) - # After we set a new breakpoint, we need to search through all frames - # and set f_trace to trace_dispatch if there could be a breakpoint in - # that frame. - frame = self.enterframe - while frame: - if self.break_anywhere(frame): - frame.f_trace = self.trace_dispatch - frame = frame.f_back - return None - - def _load_breaks(self): - """Apply all breakpoints (set in other instances) to this one. - - Populates this instance's breaks list from the Breakpoint class's - list, which can have breakpoints set by another Bdb instance. This - is necessary for interactive sessions to keep the breakpoints - active across multiple calls to run(). - """ - for (filename, lineno) in Breakpoint.bplist.keys(): - self._add_to_breaks(filename, lineno) - - def _prune_breaks(self, filename, lineno): - """Prune breakpoints for filename:lineno. - - A list of breakpoints is maintained in the Bdb instance and in - the Breakpoint class. If a breakpoint in the Bdb instance no - longer exists in the Breakpoint class, then it's removed from the - Bdb instance. - """ - if (filename, lineno) not in Breakpoint.bplist: - self.breaks[filename].remove(lineno) - if not self.breaks[filename]: - del self.breaks[filename] - - def clear_break(self, filename, lineno): - """Delete breakpoints for filename:lineno. - - If no breakpoints were set, return an error message. - """ - filename = self.canonic(filename) - if filename not in self.breaks: - return 'There are no breakpoints in %s' % filename - if lineno not in self.breaks[filename]: - return 'There is no breakpoint at %s:%d' % (filename, lineno) - # If there's only one bp in the list for that file,line - # pair, then remove the breaks entry - for bp in Breakpoint.bplist[filename, lineno][:]: - bp.deleteMe() - self._prune_breaks(filename, lineno) - return None - - def clear_bpbynumber(self, arg): - """Delete a breakpoint by its index in Breakpoint.bpbynumber. - - If arg is invalid, return an error message. - """ - try: - bp = self.get_bpbynumber(arg) - except ValueError as err: - return str(err) - bp.deleteMe() - self._prune_breaks(bp.file, bp.line) - return None - - def clear_all_file_breaks(self, filename): - """Delete all breakpoints in filename. - - If none were set, return an error message. - """ - filename = self.canonic(filename) - if filename not in self.breaks: - return 'There are no breakpoints in %s' % filename - for line in self.breaks[filename]: - blist = Breakpoint.bplist[filename, line] - for bp in blist: - bp.deleteMe() - del self.breaks[filename] - return None - - def clear_all_breaks(self): - """Delete all existing breakpoints. - - If none were set, return an error message. - """ - if not self.breaks: - return 'There are no breakpoints' - for bp in Breakpoint.bpbynumber: - if bp: - bp.deleteMe() - self.breaks = {} - return None - - def get_bpbynumber(self, arg): - """Return a breakpoint by its index in Breakpoint.bybpnumber. - - For invalid arg values or if the breakpoint doesn't exist, - raise a ValueError. - """ - if not arg: - raise ValueError('Breakpoint number expected') - try: - number = int(arg) - except ValueError: - raise ValueError('Non-numeric breakpoint number %s' % arg) from None - try: - bp = Breakpoint.bpbynumber[number] - except IndexError: - raise ValueError('Breakpoint number %d out of range' % number) from None - if bp is None: - raise ValueError('Breakpoint %d already deleted' % number) - return bp - - def get_break(self, filename, lineno): - """Return True if there is a breakpoint for filename:lineno.""" - filename = self.canonic(filename) - return filename in self.breaks and \ - lineno in self.breaks[filename] - - def get_breaks(self, filename, lineno): - """Return all breakpoints for filename:lineno. - - If no breakpoints are set, return an empty list. - """ - filename = self.canonic(filename) - return filename in self.breaks and \ - lineno in self.breaks[filename] and \ - Breakpoint.bplist[filename, lineno] or [] - - def get_file_breaks(self, filename): - """Return all lines with breakpoints for filename. - - If no breakpoints are set, return an empty list. - """ - filename = self.canonic(filename) - if filename in self.breaks: - return self.breaks[filename] - else: - return [] - - def get_all_breaks(self): - """Return all breakpoints that are set.""" - return self.breaks - - # Derived classes and clients can call the following method - # to get a data structure representing a stack trace. - - def get_stack(self, f, t): - """Return a list of (frame, lineno) in a stack trace and a size. - - List starts with original calling frame, if there is one. - Size may be number of frames above or below f. - """ - stack = [] - if t and t.tb_frame is f: - t = t.tb_next - while f is not None: - stack.append((f, f.f_lineno)) - if f is self.botframe: - break - f = f.f_back - stack.reverse() - i = max(0, len(stack) - 1) - while t is not None: - stack.append((t.tb_frame, t.tb_lineno)) - t = t.tb_next - if f is None: - i = max(0, len(stack) - 1) - return stack, i - - def format_stack_entry(self, frame_lineno, lprefix=': '): - """Return a string with information about a stack entry. - - The stack entry frame_lineno is a (frame, lineno) tuple. The - return string contains the canonical filename, the function name - or '<lambda>', the input arguments, the return value, and the - line of code (if it exists). - - """ - import linecache, reprlib - frame, lineno = frame_lineno - filename = self.canonic(frame.f_code.co_filename) - s = '%s(%r)' % (filename, lineno) - if frame.f_code.co_name: - s += frame.f_code.co_name - else: - s += "<lambda>" - s += '()' - if '__return__' in frame.f_locals: - rv = frame.f_locals['__return__'] - s += '->' - s += reprlib.repr(rv) - if lineno is not None: - line = linecache.getline(filename, lineno, frame.f_globals) - if line: - s += lprefix + line.strip() - else: - s += f'{lprefix}Warning: lineno is None' - return s - - def disable_current_event(self): - """Disable the current event.""" - if self.backend == 'monitoring': - self.monitoring_tracer.disable_current_event() - - def restart_events(self): - """Restart all events.""" - if self.backend == 'monitoring': - self.monitoring_tracer.restart_events() - - # The following methods can be called by clients to use - # a debugger to debug a statement or an expression. - # Both can be given as a string, or a code object. - - def run(self, cmd, globals=None, locals=None): - """Debug a statement executed via the exec() function. - - globals defaults to __main__.dict; locals defaults to globals. - """ - if globals is None: - import __main__ - globals = __main__.__dict__ - if locals is None: - locals = globals - self.reset() - if isinstance(cmd, str): - cmd = compile(cmd, "<string>", "exec") - self.start_trace() - try: - exec(cmd, globals, locals) - except BdbQuit: - pass - finally: - self.quitting = True - self.stop_trace() - - def runeval(self, expr, globals=None, locals=None): - """Debug an expression executed via the eval() function. - - globals defaults to __main__.dict; locals defaults to globals. - """ - if globals is None: - import __main__ - globals = __main__.__dict__ - if locals is None: - locals = globals - self.reset() - self.start_trace() - try: - return eval(expr, globals, locals) - except BdbQuit: - pass - finally: - self.quitting = True - self.stop_trace() - - def runctx(self, cmd, globals, locals): - """For backwards-compatibility. Defers to run().""" - # B/W compatibility - self.run(cmd, globals, locals) - - # This method is more useful to debug a single function call. - - def runcall(self, func, /, *args, **kwds): - """Debug a single function call. - - Return the result of the function call. - """ - self.reset() - self.start_trace() - res = None - try: - res = func(*args, **kwds) - except BdbQuit: - pass - finally: - self.quitting = True - self.stop_trace() - return res - - -def set_trace(): - """Start debugging with a Bdb instance from the caller's frame.""" - Bdb().set_trace() - - -class Breakpoint: - """Breakpoint class. - - Implements temporary breakpoints, ignore counts, disabling and - (re)-enabling, and conditionals. - - Breakpoints are indexed by number through bpbynumber and by - the (file, line) tuple using bplist. The former points to a - single instance of class Breakpoint. The latter points to a - list of such instances since there may be more than one - breakpoint per line. - - When creating a breakpoint, its associated filename should be - in canonical form. If funcname is defined, a breakpoint hit will be - counted when the first line of that function is executed. A - conditional breakpoint always counts a hit. - """ - - # XXX Keeping state in the class is a mistake -- this means - # you cannot have more than one active Bdb instance. - - next = 1 # Next bp to be assigned - bplist = {} # indexed by (file, lineno) tuple - bpbynumber = [None] # Each entry is None or an instance of Bpt - # index 0 is unused, except for marking an - # effective break .... see effective() - - def __init__(self, file, line, temporary=False, cond=None, funcname=None): - self.funcname = funcname - # Needed if funcname is not None. - self.func_first_executable_line = None - self.file = file # This better be in canonical form! - self.line = line - self.temporary = temporary - self.cond = cond - self.enabled = True - self.ignore = 0 - self.hits = 0 - self.number = Breakpoint.next - Breakpoint.next += 1 - # Build the two lists - self.bpbynumber.append(self) - if (file, line) in self.bplist: - self.bplist[file, line].append(self) - else: - self.bplist[file, line] = [self] - - @staticmethod - def clearBreakpoints(): - Breakpoint.next = 1 - Breakpoint.bplist = {} - Breakpoint.bpbynumber = [None] - - def deleteMe(self): - """Delete the breakpoint from the list associated to a file:line. - - If it is the last breakpoint in that position, it also deletes - the entry for the file:line. - """ - - index = (self.file, self.line) - self.bpbynumber[self.number] = None # No longer in list - self.bplist[index].remove(self) - if not self.bplist[index]: - # No more bp for this f:l combo - del self.bplist[index] - - def enable(self): - """Mark the breakpoint as enabled.""" - self.enabled = True - - def disable(self): - """Mark the breakpoint as disabled.""" - self.enabled = False - - def bpprint(self, out=None): - """Print the output of bpformat(). - - The optional out argument directs where the output is sent - and defaults to standard output. - """ - if out is None: - out = sys.stdout - print(self.bpformat(), file=out) - - def bpformat(self): - """Return a string with information about the breakpoint. - - The information includes the breakpoint number, temporary - status, file:line position, break condition, number of times to - ignore, and number of times hit. - - """ - if self.temporary: - disp = 'del ' - else: - disp = 'keep ' - if self.enabled: - disp = disp + 'yes ' - else: - disp = disp + 'no ' - ret = '%-4dbreakpoint %s at %s:%d' % (self.number, disp, - self.file, self.line) - if self.cond: - ret += '\n\tstop only if %s' % (self.cond,) - if self.ignore: - ret += '\n\tignore next %d hits' % (self.ignore,) - if self.hits: - if self.hits > 1: - ss = 's' - else: - ss = '' - ret += '\n\tbreakpoint already hit %d time%s' % (self.hits, ss) - return ret - - def __str__(self): - "Return a condensed description of the breakpoint." - return 'breakpoint %s at %s:%s' % (self.number, self.file, self.line) - -# -----------end of Breakpoint class---------- - - -def checkfuncname(b, frame): - """Return True if break should happen here. - - Whether a break should happen depends on the way that b (the breakpoint) - was set. If it was set via line number, check if b.line is the same as - the one in the frame. If it was set via function name, check if this is - the right function and if it is on the first executable line. - """ - if not b.funcname: - # Breakpoint was set via line number. - if b.line != frame.f_lineno: - # Breakpoint was set at a line with a def statement and the function - # defined is called: don't break. - return False - return True - - # Breakpoint set via function name. - if frame.f_code.co_name != b.funcname: - # It's not a function call, but rather execution of def statement. - return False - - # We are in the right frame. - if not b.func_first_executable_line: - # The function is entered for the 1st time. - b.func_first_executable_line = frame.f_lineno - - if b.func_first_executable_line != frame.f_lineno: - # But we are not at the first line number: don't break. - return False - return True - - -def effective(file, line, frame): - """Return (active breakpoint, delete temporary flag) or (None, None) as - breakpoint to act upon. - - The "active breakpoint" is the first entry in bplist[line, file] (which - must exist) that is enabled, for which checkfuncname is True, and that - has neither a False condition nor a positive ignore count. The flag, - meaning that a temporary breakpoint should be deleted, is False only - when the condiion cannot be evaluated (in which case, ignore count is - ignored). - - If no such entry exists, then (None, None) is returned. - """ - possibles = Breakpoint.bplist[file, line] - for b in possibles: - if not b.enabled: - continue - if not checkfuncname(b, frame): - continue - # Count every hit when bp is enabled - b.hits += 1 - if not b.cond: - # If unconditional, and ignoring go on to next, else break - if b.ignore > 0: - b.ignore -= 1 - continue - else: - # breakpoint and marker that it's ok to delete if temporary - return (b, True) - else: - # Conditional bp. - # Ignore count applies only to those bpt hits where the - # condition evaluates to true. - try: - val = eval(b.cond, frame.f_globals, frame.f_locals) - if val: - if b.ignore > 0: - b.ignore -= 1 - # continue - else: - return (b, True) - # else: - # continue - except: - # if eval fails, most conservative thing is to stop on - # breakpoint regardless of ignore count. Don't delete - # temporary, as another hint to user. - return (b, False) - return (None, None) - - -# -------------------- testing -------------------- - -class Tdb(Bdb): - def user_call(self, frame, args): - name = frame.f_code.co_name - if not name: name = '???' - print('+++ call', name, args) - def user_line(self, frame): - import linecache - name = frame.f_code.co_name - if not name: name = '???' - fn = self.canonic(frame.f_code.co_filename) - line = linecache.getline(fn, frame.f_lineno, frame.f_globals) - print('+++', fn, frame.f_lineno, name, ':', line.strip()) - def user_return(self, frame, retval): - print('+++ return', retval) - def user_exception(self, frame, exc_stuff): - print('+++ exception', exc_stuff) - self.set_continue() - -def foo(n): - print('foo(', n, ')') - x = bar(n*10) - print('bar returned', x) - -def bar(a): - print('bar(', a, ')') - return a/2 - -def test(): - t = Tdb() - t.run('import bdb; bdb.foo(10)') diff --git a/Python314_4_x86_Template/Lib/bisect.py b/Python314_4_x86_Template/Lib/bisect.py deleted file mode 100644 index ca6ca7240..000000000 --- a/Python314_4_x86_Template/Lib/bisect.py +++ /dev/null @@ -1,118 +0,0 @@ -"""Bisection algorithms.""" - - -def insort_right(a, x, lo=0, hi=None, *, key=None): - """Insert item x in list a, and keep it sorted assuming a is sorted. - - If x is already in a, insert it to the right of the rightmost x. - - Optional args lo (default 0) and hi (default len(a)) bound the - slice of a to be searched. - - A custom key function can be supplied to customize the sort order. - """ - if key is None: - lo = bisect_right(a, x, lo, hi) - else: - lo = bisect_right(a, key(x), lo, hi, key=key) - a.insert(lo, x) - - -def bisect_right(a, x, lo=0, hi=None, *, key=None): - """Return the index where to insert item x in list a, assuming a is sorted. - - The return value i is such that all e in a[:i] have e <= x, and all e in - a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will - insert just after the rightmost x already there. - - Optional args lo (default 0) and hi (default len(a)) bound the - slice of a to be searched. - - A custom key function can be supplied to customize the sort order. - """ - - if lo < 0: - raise ValueError('lo must be non-negative') - if hi is None: - hi = len(a) - # Note, the comparison uses "<" to match the - # __lt__() logic in list.sort() and in heapq. - if key is None: - while lo < hi: - mid = (lo + hi) // 2 - if x < a[mid]: - hi = mid - else: - lo = mid + 1 - else: - while lo < hi: - mid = (lo + hi) // 2 - if x < key(a[mid]): - hi = mid - else: - lo = mid + 1 - return lo - - -def insort_left(a, x, lo=0, hi=None, *, key=None): - """Insert item x in list a, and keep it sorted assuming a is sorted. - - If x is already in a, insert it to the left of the leftmost x. - - Optional args lo (default 0) and hi (default len(a)) bound the - slice of a to be searched. - - A custom key function can be supplied to customize the sort order. - """ - - if key is None: - lo = bisect_left(a, x, lo, hi) - else: - lo = bisect_left(a, key(x), lo, hi, key=key) - a.insert(lo, x) - -def bisect_left(a, x, lo=0, hi=None, *, key=None): - """Return the index where to insert item x in list a, assuming a is sorted. - - The return value i is such that all e in a[:i] have e < x, and all e in - a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will - insert just before the leftmost x already there. - - Optional args lo (default 0) and hi (default len(a)) bound the - slice of a to be searched. - - A custom key function can be supplied to customize the sort order. - """ - - if lo < 0: - raise ValueError('lo must be non-negative') - if hi is None: - hi = len(a) - # Note, the comparison uses "<" to match the - # __lt__() logic in list.sort() and in heapq. - if key is None: - while lo < hi: - mid = (lo + hi) // 2 - if a[mid] < x: - lo = mid + 1 - else: - hi = mid - else: - while lo < hi: - mid = (lo + hi) // 2 - if key(a[mid]) < x: - lo = mid + 1 - else: - hi = mid - return lo - - -# Overwrite above definitions with a fast C implementation -try: - from _bisect import * -except ImportError: - pass - -# Create aliases -bisect = bisect_right -insort = insort_right diff --git a/Python314_4_x86_Template/Lib/bz2.py b/Python314_4_x86_Template/Lib/bz2.py deleted file mode 100644 index eb58f4da5..000000000 --- a/Python314_4_x86_Template/Lib/bz2.py +++ /dev/null @@ -1,352 +0,0 @@ -"""Interface to the libbzip2 compression library. - -This module provides a file interface, classes for incremental -(de)compression, and functions for one-shot (de)compression. -""" - -__all__ = ["BZ2File", "BZ2Compressor", "BZ2Decompressor", - "open", "compress", "decompress"] - -__author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>" - -from builtins import open as _builtin_open -from compression._common import _streams -import io -import os - -from _bz2 import BZ2Compressor, BZ2Decompressor - - -# Value 0 no longer used -_MODE_READ = 1 -# Value 2 no longer used -_MODE_WRITE = 3 - - -class BZ2File(_streams.BaseStream): - - """A file object providing transparent bzip2 (de)compression. - - A BZ2File can act as a wrapper for an existing file object, or refer - directly to a named file on disk. - - Note that BZ2File provides a *binary* file interface - data read is - returned as bytes, and data to be written should be given as bytes. - """ - - def __init__(self, filename, mode="r", *, compresslevel=9): - """Open a bzip2-compressed file. - - If filename is a str, bytes, or PathLike object, it gives the - name of the file to be opened. Otherwise, it should be a file - object, which will be used to read or write the compressed data. - - mode can be 'r' for reading (default), 'w' for (over)writing, - 'x' for creating exclusively, or 'a' for appending. These can - equivalently be given as 'rb', 'wb', 'xb', and 'ab'. - - If mode is 'w', 'x' or 'a', compresslevel can be a number between 1 - and 9 specifying the level of compression: 1 produces the least - compression, and 9 (default) produces the most compression. - - If mode is 'r', the input file may be the concatenation of - multiple compressed streams. - """ - self._fp = None - self._closefp = False - self._mode = None - - if not (1 <= compresslevel <= 9): - raise ValueError("compresslevel must be between 1 and 9") - - if mode in ("", "r", "rb"): - mode = "rb" - mode_code = _MODE_READ - elif mode in ("w", "wb"): - mode = "wb" - mode_code = _MODE_WRITE - self._compressor = BZ2Compressor(compresslevel) - elif mode in ("x", "xb"): - mode = "xb" - mode_code = _MODE_WRITE - self._compressor = BZ2Compressor(compresslevel) - elif mode in ("a", "ab"): - mode = "ab" - mode_code = _MODE_WRITE - self._compressor = BZ2Compressor(compresslevel) - else: - raise ValueError("Invalid mode: %r" % (mode,)) - - if isinstance(filename, (str, bytes, os.PathLike)): - self._fp = _builtin_open(filename, mode) - self._closefp = True - self._mode = mode_code - elif hasattr(filename, "read") or hasattr(filename, "write"): - self._fp = filename - self._mode = mode_code - else: - raise TypeError("filename must be a str, bytes, file or PathLike object") - - if self._mode == _MODE_READ: - raw = _streams.DecompressReader(self._fp, - BZ2Decompressor, trailing_error=OSError) - self._buffer = io.BufferedReader(raw) - else: - self._pos = 0 - - def close(self): - """Flush and close the file. - - May be called more than once without error. Once the file is - closed, any other operation on it will raise a ValueError. - """ - if self.closed: - return - try: - if self._mode == _MODE_READ: - self._buffer.close() - elif self._mode == _MODE_WRITE: - self._fp.write(self._compressor.flush()) - self._compressor = None - finally: - try: - if self._closefp: - self._fp.close() - finally: - self._fp = None - self._closefp = False - self._buffer = None - - @property - def closed(self): - """True if this file is closed.""" - return self._fp is None - - @property - def name(self): - self._check_not_closed() - return self._fp.name - - @property - def mode(self): - return 'wb' if self._mode == _MODE_WRITE else 'rb' - - def fileno(self): - """Return the file descriptor for the underlying file.""" - self._check_not_closed() - return self._fp.fileno() - - def seekable(self): - """Return whether the file supports seeking.""" - return self.readable() and self._buffer.seekable() - - def readable(self): - """Return whether the file was opened for reading.""" - self._check_not_closed() - return self._mode == _MODE_READ - - def writable(self): - """Return whether the file was opened for writing.""" - self._check_not_closed() - return self._mode == _MODE_WRITE - - def peek(self, n=0): - """Return buffered data without advancing the file position. - - Always returns at least one byte of data, unless at EOF. - The exact number of bytes returned is unspecified. - """ - self._check_can_read() - # Relies on the undocumented fact that BufferedReader.peek() - # always returns at least one byte (except at EOF), independent - # of the value of n - return self._buffer.peek(n) - - def read(self, size=-1): - """Read up to size uncompressed bytes from the file. - - If size is negative or omitted, read until EOF is reached. - Returns b'' if the file is already at EOF. - """ - self._check_can_read() - return self._buffer.read(size) - - def read1(self, size=-1): - """Read up to size uncompressed bytes, while trying to avoid - making multiple reads from the underlying stream. Reads up to a - buffer's worth of data if size is negative. - - Returns b'' if the file is at EOF. - """ - self._check_can_read() - if size < 0: - size = io.DEFAULT_BUFFER_SIZE - return self._buffer.read1(size) - - def readinto(self, b): - """Read bytes into b. - - Returns the number of bytes read (0 for EOF). - """ - self._check_can_read() - return self._buffer.readinto(b) - - def readline(self, size=-1): - """Read a line of uncompressed bytes from the file. - - The terminating newline (if present) is retained. If size is - non-negative, no more than size bytes will be read (in which - case the line may be incomplete). Returns b'' if already at EOF. - """ - if not isinstance(size, int): - if not hasattr(size, "__index__"): - raise TypeError("Integer argument expected") - size = size.__index__() - self._check_can_read() - return self._buffer.readline(size) - - def readlines(self, size=-1): - """Read a list of lines of uncompressed bytes from the file. - - size can be specified to control the number of lines read: no - further lines will be read once the total size of the lines read - so far equals or exceeds size. - """ - if not isinstance(size, int): - if not hasattr(size, "__index__"): - raise TypeError("Integer argument expected") - size = size.__index__() - self._check_can_read() - return self._buffer.readlines(size) - - def write(self, data): - """Write a byte string to the file. - - Returns the number of uncompressed bytes written, which is - always the length of data in bytes. Note that due to buffering, - the file on disk may not reflect the data written until close() - is called. - """ - self._check_can_write() - if isinstance(data, (bytes, bytearray)): - length = len(data) - else: - # accept any data that supports the buffer protocol - data = memoryview(data) - length = data.nbytes - - compressed = self._compressor.compress(data) - self._fp.write(compressed) - self._pos += length - return length - - def writelines(self, seq): - """Write a sequence of byte strings to the file. - - Returns the number of uncompressed bytes written. - seq can be any iterable yielding byte strings. - - Line separators are not added between the written byte strings. - """ - return _streams.BaseStream.writelines(self, seq) - - def seek(self, offset, whence=io.SEEK_SET): - """Change the file position. - - The new position is specified by offset, relative to the - position indicated by whence. Values for whence are: - - 0: start of stream (default); offset must not be negative - 1: current stream position - 2: end of stream; offset must not be positive - - Returns the new file position. - - Note that seeking is emulated, so depending on the parameters, - this operation may be extremely slow. - """ - self._check_can_seek() - return self._buffer.seek(offset, whence) - - def tell(self): - """Return the current file position.""" - self._check_not_closed() - if self._mode == _MODE_READ: - return self._buffer.tell() - return self._pos - - -def open(filename, mode="rb", compresslevel=9, - encoding=None, errors=None, newline=None): - """Open a bzip2-compressed file in binary or text mode. - - The filename argument can be an actual filename (a str, bytes, or - PathLike object), or an existing file object to read from or write - to. - - The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or - "ab" for binary mode, or "rt", "wt", "xt" or "at" for text mode. - The default mode is "rb", and the default compresslevel is 9. - - For binary mode, this function is equivalent to the BZ2File - constructor: BZ2File(filename, mode, compresslevel). In this case, - the encoding, errors and newline arguments must not be provided. - - For text mode, a BZ2File object is created, and wrapped in an - io.TextIOWrapper instance with the specified encoding, error - handling behavior, and line ending(s). - - """ - if "t" in mode: - if "b" in mode: - raise ValueError("Invalid mode: %r" % (mode,)) - else: - if encoding is not None: - raise ValueError("Argument 'encoding' not supported in binary mode") - if errors is not None: - raise ValueError("Argument 'errors' not supported in binary mode") - if newline is not None: - raise ValueError("Argument 'newline' not supported in binary mode") - - bz_mode = mode.replace("t", "") - binary_file = BZ2File(filename, bz_mode, compresslevel=compresslevel) - - if "t" in mode: - encoding = io.text_encoding(encoding) - return io.TextIOWrapper(binary_file, encoding, errors, newline) - else: - return binary_file - - -def compress(data, compresslevel=9): - """Compress a block of data. - - compresslevel, if given, must be a number between 1 and 9. - - For incremental compression, use a BZ2Compressor object instead. - """ - comp = BZ2Compressor(compresslevel) - return comp.compress(data) + comp.flush() - - -def decompress(data): - """Decompress a block of data. - - For incremental decompression, use a BZ2Decompressor object instead. - """ - results = [] - while data: - decomp = BZ2Decompressor() - try: - res = decomp.decompress(data) - except OSError: - if results: - break # Leftover data is not a valid bzip2 stream; ignore it. - else: - raise # Error on the first iteration; bail out. - results.append(res) - if not decomp.eof: - raise ValueError("Compressed data ended before the " - "end-of-stream marker was reached") - data = decomp.unused_data - return b"".join(results) diff --git a/Python314_4_x86_Template/Lib/cProfile.py b/Python314_4_x86_Template/Lib/cProfile.py deleted file mode 100644 index 770d26f79..000000000 --- a/Python314_4_x86_Template/Lib/cProfile.py +++ /dev/null @@ -1,205 +0,0 @@ -"""Python interface for the 'lsprof' profiler. - Compatible with the 'profile' module. -""" - -__all__ = ["run", "runctx", "Profile"] - -import _lsprof -import importlib.machinery -import importlib.util -import io -import profile as _pyprofile - -# ____________________________________________________________ -# Simple interface - -def run(statement, filename=None, sort=-1): - return _pyprofile._Utils(Profile).run(statement, filename, sort) - -def runctx(statement, globals, locals, filename=None, sort=-1): - return _pyprofile._Utils(Profile).runctx(statement, globals, locals, - filename, sort) - -run.__doc__ = _pyprofile.run.__doc__ -runctx.__doc__ = _pyprofile.runctx.__doc__ - -# ____________________________________________________________ - -class Profile(_lsprof.Profiler): - """Profile(timer=None, timeunit=None, subcalls=True, builtins=True) - - Builds a profiler object using the specified timer function. - The default timer is a fast built-in one based on real time. - For custom timer functions returning integers, timeunit can - be a float specifying a scale (i.e. how long each integer unit - is, in seconds). - """ - - # Most of the functionality is in the base class. - # This subclass only adds convenient and backward-compatible methods. - - def print_stats(self, sort=-1): - import pstats - if not isinstance(sort, tuple): - sort = (sort,) - pstats.Stats(self).strip_dirs().sort_stats(*sort).print_stats() - - def dump_stats(self, file): - import marshal - with open(file, 'wb') as f: - self.create_stats() - marshal.dump(self.stats, f) - - def create_stats(self): - self.disable() - self.snapshot_stats() - - def snapshot_stats(self): - entries = self.getstats() - self.stats = {} - callersdicts = {} - # call information - for entry in entries: - func = label(entry.code) - nc = entry.callcount # ncalls column of pstats (before '/') - cc = nc - entry.reccallcount # ncalls column of pstats (after '/') - tt = entry.inlinetime # tottime column of pstats - ct = entry.totaltime # cumtime column of pstats - callers = {} - callersdicts[id(entry.code)] = callers - self.stats[func] = cc, nc, tt, ct, callers - # subcall information - for entry in entries: - if entry.calls: - func = label(entry.code) - for subentry in entry.calls: - try: - callers = callersdicts[id(subentry.code)] - except KeyError: - continue - nc = subentry.callcount - cc = nc - subentry.reccallcount - tt = subentry.inlinetime - ct = subentry.totaltime - if func in callers: - prev = callers[func] - nc += prev[0] - cc += prev[1] - tt += prev[2] - ct += prev[3] - callers[func] = nc, cc, tt, ct - - # The following two methods can be called by clients to use - # a profiler to profile a statement, given as a string. - - def run(self, cmd): - import __main__ - dict = __main__.__dict__ - return self.runctx(cmd, dict, dict) - - def runctx(self, cmd, globals, locals): - self.enable() - try: - exec(cmd, globals, locals) - finally: - self.disable() - return self - - # This method is more useful to profile a single function call. - def runcall(self, func, /, *args, **kw): - self.enable() - try: - return func(*args, **kw) - finally: - self.disable() - - def __enter__(self): - self.enable() - return self - - def __exit__(self, *exc_info): - self.disable() - -# ____________________________________________________________ - -def label(code): - if isinstance(code, str): - return ('~', 0, code) # built-in functions ('~' sorts at the end) - else: - return (code.co_filename, code.co_firstlineno, code.co_name) - -# ____________________________________________________________ - -def main(): - import os - import sys - import runpy - import pstats - from optparse import OptionParser - usage = "cProfile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ..." - parser = OptionParser(usage=usage) - parser.allow_interspersed_args = False - parser.add_option('-o', '--outfile', dest="outfile", - help="Save stats to <outfile>", default=None) - parser.add_option('-s', '--sort', dest="sort", - help="Sort order when printing to stdout, based on pstats.Stats class", - default=2, - choices=sorted(pstats.Stats.sort_arg_dict_default)) - parser.add_option('-m', dest="module", action="store_true", - help="Profile a library module", default=False) - - if not sys.argv[1:]: - parser.print_usage() - sys.exit(2) - - (options, args) = parser.parse_args() - sys.argv[:] = args - - # The script that we're profiling may chdir, so capture the absolute path - # to the output file at startup. - if options.outfile is not None: - options.outfile = os.path.abspath(options.outfile) - - if len(args) > 0: - if options.module: - code = "run_module(modname, run_name='__main__')" - globs = { - 'run_module': runpy.run_module, - 'modname': args[0] - } - else: - progname = args[0] - sys.path.insert(0, os.path.dirname(progname)) - with io.open_code(progname) as fp: - code = compile(fp.read(), progname, 'exec') - spec = importlib.machinery.ModuleSpec(name='__main__', loader=None, - origin=progname) - module = importlib.util.module_from_spec(spec) - # Set __main__ so that importing __main__ in the profiled code will - # return the same namespace that the code is executing under. - sys.modules['__main__'] = module - # Ensure that we're using the same __dict__ instance as the module - # for the global variables so that updates to globals are reflected - # in the module's namespace. - globs = module.__dict__ - globs.update({ - '__spec__': spec, - '__file__': spec.origin, - '__name__': spec.name, - '__package__': None, - '__cached__': None, - }) - - try: - runctx(code, globs, None, options.outfile, options.sort) - except BrokenPipeError as exc: - # Prevent "Exception ignored" during interpreter shutdown. - sys.stdout = None - sys.exit(exc.errno) - else: - parser.print_usage() - return parser - -# When invoked as main program, invoke the profiler on a script -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/calendar.py b/Python314_4_x86_Template/Lib/calendar.py deleted file mode 100644 index 18f76d52f..000000000 --- a/Python314_4_x86_Template/Lib/calendar.py +++ /dev/null @@ -1,926 +0,0 @@ -"""Calendar printing functions - -Note when comparing these calendars to the ones printed by cal(1): By -default, these calendars have Monday as the first day of the week, and -Sunday as the last (the European convention). Use setfirstweekday() to -set the first day of the week (0=Monday, 6=Sunday).""" - -import sys -import datetime -from enum import IntEnum, global_enum -import locale as _locale -from itertools import repeat - -__all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday", - "firstweekday", "isleap", "leapdays", "weekday", "monthrange", - "monthcalendar", "prmonth", "month", "prcal", "calendar", - "timegm", "month_name", "month_abbr", "day_name", "day_abbr", - "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", - "LocaleHTMLCalendar", "weekheader", - "Day", "Month", "JANUARY", "FEBRUARY", "MARCH", - "APRIL", "MAY", "JUNE", "JULY", - "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER", - "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", - "SATURDAY", "SUNDAY"] - -# Exception raised for bad input (with string parameter for details) -error = ValueError - -# Exceptions raised for bad input -# This is trick for backward compatibility. Since 3.13, we will raise IllegalMonthError instead of -# IndexError for bad month number(out of 1-12). But we can't remove IndexError for backward compatibility. -class IllegalMonthError(ValueError, IndexError): - def __init__(self, month): - self.month = month - def __str__(self): - return "bad month number %r; must be 1-12" % self.month - - -class IllegalWeekdayError(ValueError): - def __init__(self, weekday): - self.weekday = weekday - def __str__(self): - return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday - - -def __getattr__(name): - if name in ('January', 'February'): - import warnings - warnings.warn(f"The '{name}' attribute is deprecated, use '{name.upper()}' instead", - DeprecationWarning, stacklevel=2) - if name == 'January': - return 1 - else: - return 2 - - raise AttributeError(f"module '{__name__}' has no attribute '{name}'") - - -# Constants for months -@global_enum -class Month(IntEnum): - JANUARY = 1 - FEBRUARY = 2 - MARCH = 3 - APRIL = 4 - MAY = 5 - JUNE = 6 - JULY = 7 - AUGUST = 8 - SEPTEMBER = 9 - OCTOBER = 10 - NOVEMBER = 11 - DECEMBER = 12 - - -# Constants for days -@global_enum -class Day(IntEnum): - MONDAY = 0 - TUESDAY = 1 - WEDNESDAY = 2 - THURSDAY = 3 - FRIDAY = 4 - SATURDAY = 5 - SUNDAY = 6 - - -# Number of days per month (except for February in leap years) -mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] - -# This module used to have hard-coded lists of day and month names, as -# English strings. The classes following emulate a read-only version of -# that, but supply localized names. Note that the values are computed -# fresh on each call, in case the user changes locale between calls. - -class _localized_month: - - _months = [datetime.date(2001, i+1, 1).strftime for i in range(12)] - _months.insert(0, lambda x: "") - - def __init__(self, format): - self.format = format - - def __getitem__(self, i): - funcs = self._months[i] - if isinstance(i, slice): - return [f(self.format) for f in funcs] - else: - return funcs(self.format) - - def __len__(self): - return 13 - - -class _localized_day: - - # January 1, 2001, was a Monday. - _days = [datetime.date(2001, 1, i+1).strftime for i in range(7)] - - def __init__(self, format): - self.format = format - - def __getitem__(self, i): - funcs = self._days[i] - if isinstance(i, slice): - return [f(self.format) for f in funcs] - else: - return funcs(self.format) - - def __len__(self): - return 7 - - -# Full and abbreviated names of weekdays -day_name = _localized_day('%A') -day_abbr = _localized_day('%a') - -# Full and abbreviated names of months (1-based arrays!!!) -month_name = _localized_month('%B') -month_abbr = _localized_month('%b') - - -def isleap(year): - """Return True for leap years, False for non-leap years.""" - return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) - - -def leapdays(y1, y2): - """Return number of leap years in range [y1, y2). - Assume y1 <= y2.""" - y1 -= 1 - y2 -= 1 - return (y2//4 - y1//4) - (y2//100 - y1//100) + (y2//400 - y1//400) - - -def weekday(year, month, day): - """Return weekday (0-6 ~ Mon-Sun) for year, month (1-12), day (1-31).""" - if not datetime.MINYEAR <= year <= datetime.MAXYEAR: - year = 2000 + year % 400 - return Day(datetime.date(year, month, day).weekday()) - - -def _validate_month(month): - if not 1 <= month <= 12: - raise IllegalMonthError(month) - -def monthrange(year, month): - """Return weekday of first day of month (0-6 ~ Mon-Sun) - and number of days (28-31) for year, month.""" - _validate_month(month) - day1 = weekday(year, month, 1) - ndays = mdays[month] + (month == FEBRUARY and isleap(year)) - return day1, ndays - - -def _monthlen(year, month): - return mdays[month] + (month == FEBRUARY and isleap(year)) - - -def _prevmonth(year, month): - if month == 1: - return year-1, 12 - else: - return year, month-1 - - -def _nextmonth(year, month): - if month == 12: - return year+1, 1 - else: - return year, month+1 - - -class Calendar(object): - """ - Base calendar class. This class doesn't do any formatting. It simply - provides data to subclasses. - """ - - def __init__(self, firstweekday=0): - self.firstweekday = firstweekday # 0 = Monday, 6 = Sunday - - def getfirstweekday(self): - return self._firstweekday % 7 - - def setfirstweekday(self, firstweekday): - self._firstweekday = firstweekday - - firstweekday = property(getfirstweekday, setfirstweekday) - - def iterweekdays(self): - """ - Return an iterator for one week of weekday numbers starting with the - configured first one. - """ - for i in range(self.firstweekday, self.firstweekday + 7): - yield i%7 - - def itermonthdates(self, year, month): - """ - Return an iterator for one month. The iterator will yield datetime.date - values and will always iterate through complete weeks, so it will yield - dates outside the specified month. - """ - for y, m, d in self.itermonthdays3(year, month): - yield datetime.date(y, m, d) - - def itermonthdays(self, year, month): - """ - Like itermonthdates(), but will yield day numbers. For days outside - the specified month the day number is 0. - """ - day1, ndays = monthrange(year, month) - days_before = (day1 - self.firstweekday) % 7 - yield from repeat(0, days_before) - yield from range(1, ndays + 1) - days_after = (self.firstweekday - day1 - ndays) % 7 - yield from repeat(0, days_after) - - def itermonthdays2(self, year, month): - """ - Like itermonthdates(), but will yield (day number, weekday number) - tuples. For days outside the specified month the day number is 0. - """ - for i, d in enumerate(self.itermonthdays(year, month), self.firstweekday): - yield d, i % 7 - - def itermonthdays3(self, year, month): - """ - Like itermonthdates(), but will yield (year, month, day) tuples. Can be - used for dates outside of datetime.date range. - """ - day1, ndays = monthrange(year, month) - days_before = (day1 - self.firstweekday) % 7 - days_after = (self.firstweekday - day1 - ndays) % 7 - y, m = _prevmonth(year, month) - end = _monthlen(y, m) + 1 - for d in range(end-days_before, end): - yield y, m, d - for d in range(1, ndays + 1): - yield year, month, d - y, m = _nextmonth(year, month) - for d in range(1, days_after + 1): - yield y, m, d - - def itermonthdays4(self, year, month): - """ - Like itermonthdates(), but will yield (year, month, day, day_of_week) tuples. - Can be used for dates outside of datetime.date range. - """ - for i, (y, m, d) in enumerate(self.itermonthdays3(year, month)): - yield y, m, d, (self.firstweekday + i) % 7 - - def monthdatescalendar(self, year, month): - """ - Return a matrix (list of lists) representing a month's calendar. - Each row represents a week; week entries are datetime.date values. - """ - dates = list(self.itermonthdates(year, month)) - return [ dates[i:i+7] for i in range(0, len(dates), 7) ] - - def monthdays2calendar(self, year, month): - """ - Return a matrix representing a month's calendar. - Each row represents a week; week entries are - (day number, weekday number) tuples. Day numbers outside this month - are zero. - """ - days = list(self.itermonthdays2(year, month)) - return [ days[i:i+7] for i in range(0, len(days), 7) ] - - def monthdayscalendar(self, year, month): - """ - Return a matrix representing a month's calendar. - Each row represents a week; days outside this month are zero. - """ - days = list(self.itermonthdays(year, month)) - return [ days[i:i+7] for i in range(0, len(days), 7) ] - - def yeardatescalendar(self, year, width=3): - """ - Return the data for the specified year ready for formatting. The return - value is a list of month rows. Each month row contains up to width months. - Each month contains between 4 and 6 weeks and each week contains 1-7 - days. Days are datetime.date objects. - """ - months = [self.monthdatescalendar(year, m) for m in Month] - return [months[i:i+width] for i in range(0, len(months), width) ] - - def yeardays2calendar(self, year, width=3): - """ - Return the data for the specified year ready for formatting (similar to - yeardatescalendar()). Entries in the week lists are - (day number, weekday number) tuples. Day numbers outside this month are - zero. - """ - months = [self.monthdays2calendar(year, m) for m in Month] - return [months[i:i+width] for i in range(0, len(months), width) ] - - def yeardayscalendar(self, year, width=3): - """ - Return the data for the specified year ready for formatting (similar to - yeardatescalendar()). Entries in the week lists are day numbers. - Day numbers outside this month are zero. - """ - months = [self.monthdayscalendar(year, m) for m in Month] - return [months[i:i+width] for i in range(0, len(months), width) ] - - -class TextCalendar(Calendar): - """ - Subclass of Calendar that outputs a calendar as a simple plain text - similar to the UNIX program cal. - """ - - def prweek(self, theweek, width): - """ - Print a single week (no newline). - """ - print(self.formatweek(theweek, width), end='') - - def formatday(self, day, weekday, width): - """ - Returns a formatted day. - """ - if day == 0: - s = '' - else: - s = '%2i' % day # right-align single-digit days - return s.center(width) - - def formatweek(self, theweek, width): - """ - Returns a single week in a string (no newline). - """ - return ' '.join(self.formatday(d, wd, width) for (d, wd) in theweek) - - def formatweekday(self, day, width): - """ - Returns a formatted week day name. - """ - if width >= 9: - names = day_name - else: - names = day_abbr - return names[day][:width].center(width) - - def formatweekheader(self, width): - """ - Return a header for a week. - """ - return ' '.join(self.formatweekday(i, width) for i in self.iterweekdays()) - - def formatmonthname(self, theyear, themonth, width, withyear=True): - """ - Return a formatted month name. - """ - _validate_month(themonth) - - s = month_name[themonth] - if withyear: - s = "%s %r" % (s, theyear) - return s.center(width) - - def prmonth(self, theyear, themonth, w=0, l=0): - """ - Print a month's calendar. - """ - print(self.formatmonth(theyear, themonth, w, l), end='') - - def formatmonth(self, theyear, themonth, w=0, l=0): - """ - Return a month's calendar string (multi-line). - """ - w = max(2, w) - l = max(1, l) - s = self.formatmonthname(theyear, themonth, 7 * (w + 1) - 1) - s = s.rstrip() - s += '\n' * l - s += self.formatweekheader(w).rstrip() - s += '\n' * l - for week in self.monthdays2calendar(theyear, themonth): - s += self.formatweek(week, w).rstrip() - s += '\n' * l - return s - - def formatyear(self, theyear, w=2, l=1, c=6, m=3): - """ - Returns a year's calendar as a multi-line string. - """ - w = max(2, w) - l = max(1, l) - c = max(2, c) - colwidth = (w + 1) * 7 - 1 - v = [] - a = v.append - a(repr(theyear).center(colwidth*m+c*(m-1)).rstrip()) - a('\n'*l) - header = self.formatweekheader(w) - for (i, row) in enumerate(self.yeardays2calendar(theyear, m)): - # months in this row - months = range(m*i+1, min(m*(i+1)+1, 13)) - a('\n'*l) - names = (self.formatmonthname(theyear, k, colwidth, False) - for k in months) - a(formatstring(names, colwidth, c).rstrip()) - a('\n'*l) - headers = (header for k in months) - a(formatstring(headers, colwidth, c).rstrip()) - a('\n'*l) - - # max number of weeks for this row - height = max(len(cal) for cal in row) - for j in range(height): - weeks = [] - for cal in row: - if j >= len(cal): - weeks.append('') - else: - weeks.append(self.formatweek(cal[j], w)) - a(formatstring(weeks, colwidth, c).rstrip()) - a('\n' * l) - return ''.join(v) - - def pryear(self, theyear, w=0, l=0, c=6, m=3): - """Print a year's calendar.""" - print(self.formatyear(theyear, w, l, c, m), end='') - - -class HTMLCalendar(Calendar): - """ - This calendar returns complete HTML pages. - """ - - # CSS classes for the day <td>s - cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"] - - # CSS classes for the day <th>s - cssclasses_weekday_head = cssclasses - - # CSS class for the days before and after current month - cssclass_noday = "noday" - - # CSS class for the month's head - cssclass_month_head = "month" - - # CSS class for the month - cssclass_month = "month" - - # CSS class for the year's table head - cssclass_year_head = "year" - - # CSS class for the whole year table - cssclass_year = "year" - - def formatday(self, day, weekday): - """ - Return a day as a table cell. - """ - if day == 0: - # day outside month - return '<td class="%s">&nbsp;</td>' % self.cssclass_noday - else: - return '<td class="%s">%d</td>' % (self.cssclasses[weekday], day) - - def formatweek(self, theweek): - """ - Return a complete week as a table row. - """ - s = ''.join(self.formatday(d, wd) for (d, wd) in theweek) - return '<tr>%s</tr>' % s - - def formatweekday(self, day): - """ - Return a weekday name as a table header. - """ - return '<th class="%s">%s</th>' % ( - self.cssclasses_weekday_head[day], day_abbr[day]) - - def formatweekheader(self): - """ - Return a header for a week as a table row. - """ - s = ''.join(self.formatweekday(i) for i in self.iterweekdays()) - return '<tr>%s</tr>' % s - - def formatmonthname(self, theyear, themonth, withyear=True): - """ - Return a month name as a table row. - """ - _validate_month(themonth) - if withyear: - s = '%s %s' % (month_name[themonth], theyear) - else: - s = '%s' % month_name[themonth] - return '<tr><th colspan="7" class="%s">%s</th></tr>' % ( - self.cssclass_month_head, s) - - def formatmonth(self, theyear, themonth, withyear=True): - """ - Return a formatted month as a table. - """ - v = [] - a = v.append - a('<table border="0" cellpadding="0" cellspacing="0" class="%s">' % ( - self.cssclass_month)) - a('\n') - a(self.formatmonthname(theyear, themonth, withyear=withyear)) - a('\n') - a(self.formatweekheader()) - a('\n') - for week in self.monthdays2calendar(theyear, themonth): - a(self.formatweek(week)) - a('\n') - a('</table>') - a('\n') - return ''.join(v) - - def formatyear(self, theyear, width=3): - """ - Return a formatted year as a table of tables. - """ - v = [] - a = v.append - width = max(width, 1) - a('<table border="0" cellpadding="0" cellspacing="0" class="%s">' % - self.cssclass_year) - a('\n') - a('<tr><th colspan="%d" class="%s">%s</th></tr>' % ( - width, self.cssclass_year_head, theyear)) - for i in range(JANUARY, JANUARY+12, width): - # months in this row - months = range(i, min(i+width, 13)) - a('<tr>') - for m in months: - a('<td>') - a(self.formatmonth(theyear, m, withyear=False)) - a('</td>') - a('</tr>') - a('</table>') - return ''.join(v) - - def formatyearpage(self, theyear, width=3, css='calendar.css', encoding=None): - """ - Return a formatted year as a complete HTML page. - """ - if encoding is None: - encoding = sys.getdefaultencoding() - v = [] - a = v.append - a('<?xml version="1.0" encoding="%s"?>\n' % encoding) - a('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n') - a('<html>\n') - a('<head>\n') - a('<meta http-equiv="Content-Type" content="text/html; charset=%s" />\n' % encoding) - if css is not None: - a('<link rel="stylesheet" type="text/css" href="%s" />\n' % css) - a('<title>Calendar for %d</title>\n' % theyear) - a('</head>\n') - a('<body>\n') - a(self.formatyear(theyear, width)) - a('</body>\n') - a('</html>\n') - return ''.join(v).encode(encoding, "xmlcharrefreplace") - - -class different_locale: - def __init__(self, locale): - self.locale = locale - self.oldlocale = None - - def __enter__(self): - self.oldlocale = _locale.setlocale(_locale.LC_TIME, None) - _locale.setlocale(_locale.LC_TIME, self.locale) - - def __exit__(self, *args): - _locale.setlocale(_locale.LC_TIME, self.oldlocale) - - -def _get_default_locale(): - locale = _locale.setlocale(_locale.LC_TIME, None) - if locale == "C": - with different_locale(""): - # The LC_TIME locale does not seem to be configured: - # get the user preferred locale. - locale = _locale.setlocale(_locale.LC_TIME, None) - return locale - - -class LocaleTextCalendar(TextCalendar): - """ - This class can be passed a locale name in the constructor and will return - month and weekday names in the specified locale. - """ - - def __init__(self, firstweekday=0, locale=None): - TextCalendar.__init__(self, firstweekday) - if locale is None: - locale = _get_default_locale() - self.locale = locale - - def formatweekday(self, day, width): - with different_locale(self.locale): - return super().formatweekday(day, width) - - def formatmonthname(self, theyear, themonth, width, withyear=True): - with different_locale(self.locale): - return super().formatmonthname(theyear, themonth, width, withyear) - - -class LocaleHTMLCalendar(HTMLCalendar): - """ - This class can be passed a locale name in the constructor and will return - month and weekday names in the specified locale. - """ - def __init__(self, firstweekday=0, locale=None): - HTMLCalendar.__init__(self, firstweekday) - if locale is None: - locale = _get_default_locale() - self.locale = locale - - def formatweekday(self, day): - with different_locale(self.locale): - return super().formatweekday(day) - - def formatmonthname(self, theyear, themonth, withyear=True): - with different_locale(self.locale): - return super().formatmonthname(theyear, themonth, withyear) - - -class _CLIDemoCalendar(TextCalendar): - def __init__(self, highlight_day=None, *args, **kwargs): - super().__init__(*args, **kwargs) - self.highlight_day = highlight_day - - def formatweek(self, theweek, width, *, highlight_day=None): - """ - Returns a single week in a string (no newline). - """ - if highlight_day: - from _colorize import get_colors - - ansi = get_colors() - highlight = f"{ansi.BLACK}{ansi.BACKGROUND_YELLOW}" - reset = ansi.RESET - else: - highlight = reset = "" - - return ' '.join( - ( - f"{highlight}{self.formatday(d, wd, width)}{reset}" - if d == highlight_day - else self.formatday(d, wd, width) - ) - for (d, wd) in theweek - ) - - def formatmonth(self, theyear, themonth, w=0, l=0): - """ - Return a month's calendar string (multi-line). - """ - if ( - self.highlight_day - and self.highlight_day.year == theyear - and self.highlight_day.month == themonth - ): - highlight_day = self.highlight_day.day - else: - highlight_day = None - w = max(2, w) - l = max(1, l) - s = self.formatmonthname(theyear, themonth, 7 * (w + 1) - 1) - s = s.rstrip() - s += '\n' * l - s += self.formatweekheader(w).rstrip() - s += '\n' * l - for week in self.monthdays2calendar(theyear, themonth): - s += self.formatweek(week, w, highlight_day=highlight_day).rstrip() - s += '\n' * l - return s - - def formatyear(self, theyear, w=2, l=1, c=6, m=3): - """ - Returns a year's calendar as a multi-line string. - """ - w = max(2, w) - l = max(1, l) - c = max(2, c) - colwidth = (w + 1) * 7 - 1 - v = [] - a = v.append - a(repr(theyear).center(colwidth*m+c*(m-1)).rstrip()) - a('\n'*l) - header = self.formatweekheader(w) - for (i, row) in enumerate(self.yeardays2calendar(theyear, m)): - # months in this row - months = range(m*i+1, min(m*(i+1)+1, 13)) - a('\n'*l) - names = (self.formatmonthname(theyear, k, colwidth, False) - for k in months) - a(formatstring(names, colwidth, c).rstrip()) - a('\n'*l) - headers = (header for k in months) - a(formatstring(headers, colwidth, c).rstrip()) - a('\n'*l) - - if ( - self.highlight_day - and self.highlight_day.year == theyear - and self.highlight_day.month in months - ): - month_pos = months.index(self.highlight_day.month) - else: - month_pos = None - - # max number of weeks for this row - height = max(len(cal) for cal in row) - for j in range(height): - weeks = [] - for k, cal in enumerate(row): - if j >= len(cal): - weeks.append('') - else: - day = ( - self.highlight_day.day if k == month_pos else None - ) - weeks.append( - self.formatweek(cal[j], w, highlight_day=day) - ) - a(formatstring(weeks, colwidth, c).rstrip()) - a('\n' * l) - return ''.join(v) - - -class _CLIDemoLocaleCalendar(LocaleTextCalendar, _CLIDemoCalendar): - def __init__(self, highlight_day=None, *args, **kwargs): - super().__init__(*args, **kwargs) - self.highlight_day = highlight_day - - -# Support for old module level interface -c = TextCalendar() - -firstweekday = c.getfirstweekday - -def setfirstweekday(firstweekday): - if not MONDAY <= firstweekday <= SUNDAY: - raise IllegalWeekdayError(firstweekday) - c.firstweekday = firstweekday - -monthcalendar = c.monthdayscalendar -prweek = c.prweek -week = c.formatweek -weekheader = c.formatweekheader -prmonth = c.prmonth -month = c.formatmonth -calendar = c.formatyear -prcal = c.pryear - - -# Spacing of month columns for multi-column year calendar -_colwidth = 7*3 - 1 # Amount printed by prweek() -_spacing = 6 # Number of spaces between columns - - -def format(cols, colwidth=_colwidth, spacing=_spacing): - """Prints multi-column formatting for year calendars""" - print(formatstring(cols, colwidth, spacing)) - - -def formatstring(cols, colwidth=_colwidth, spacing=_spacing): - """Returns a string formatted from n strings, centered within n columns.""" - spacing *= ' ' - return spacing.join(c.center(colwidth) for c in cols) - - -EPOCH = 1970 -_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal() - - -def timegm(tuple): - """Unrelated but handy function to calculate Unix timestamp from GMT.""" - year, month, day, hour, minute, second = tuple[:6] - days = datetime.date(year, month, 1).toordinal() - _EPOCH_ORD + day - 1 - hours = days*24 + hour - minutes = hours*60 + minute - seconds = minutes*60 + second - return seconds - - -def main(args=None): - import argparse - parser = argparse.ArgumentParser(color=True) - textgroup = parser.add_argument_group('text only arguments') - htmlgroup = parser.add_argument_group('html only arguments') - textgroup.add_argument( - "-w", "--width", - type=int, default=2, - help="width of date column (default 2)" - ) - textgroup.add_argument( - "-l", "--lines", - type=int, default=1, - help="number of lines for each week (default 1)" - ) - textgroup.add_argument( - "-s", "--spacing", - type=int, default=6, - help="spacing between months (default 6)" - ) - textgroup.add_argument( - "-m", "--months", - type=int, default=3, - help="months per row (default 3)" - ) - htmlgroup.add_argument( - "-c", "--css", - default="calendar.css", - help="CSS to use for page" - ) - parser.add_argument( - "-L", "--locale", - default=None, - help="locale to use for month and weekday names" - ) - parser.add_argument( - "-e", "--encoding", - default=None, - help="encoding to use for output" - ) - parser.add_argument( - "-t", "--type", - default="text", - choices=("text", "html"), - help="output type (text or html)" - ) - parser.add_argument( - "-f", "--first-weekday", - type=int, default=0, - help="weekday (0 is Monday, 6 is Sunday) to start each week (default 0)" - ) - parser.add_argument( - "year", - nargs='?', type=int, - help="year number" - ) - parser.add_argument( - "month", - nargs='?', type=int, - help="month number (1-12, text only)" - ) - - options = parser.parse_args(args) - - if options.locale and not options.encoding: - parser.error("if --locale is specified --encoding is required") - sys.exit(1) - - locale = options.locale, options.encoding - today = datetime.date.today() - - if options.type == "html": - if options.month: - parser.error("incorrect number of arguments") - sys.exit(1) - if options.locale: - cal = LocaleHTMLCalendar(locale=locale) - else: - cal = HTMLCalendar() - cal.setfirstweekday(options.first_weekday) - encoding = options.encoding - if encoding is None: - encoding = sys.getdefaultencoding() - optdict = dict(encoding=encoding, css=options.css) - write = sys.stdout.buffer.write - if options.year is None: - write(cal.formatyearpage(today.year, **optdict)) - else: - write(cal.formatyearpage(options.year, **optdict)) - else: - if options.locale: - cal = _CLIDemoLocaleCalendar(highlight_day=today, locale=locale) - else: - cal = _CLIDemoCalendar(highlight_day=today) - cal.setfirstweekday(options.first_weekday) - optdict = dict(w=options.width, l=options.lines) - if options.month is None: - optdict["c"] = options.spacing - optdict["m"] = options.months - else: - _validate_month(options.month) - if options.year is None: - result = cal.formatyear(today.year, **optdict) - elif options.month is None: - result = cal.formatyear(options.year, **optdict) - else: - result = cal.formatmonth(options.year, options.month, **optdict) - write = sys.stdout.write - if options.encoding: - result = result.encode(options.encoding) - write = sys.stdout.buffer.write - write(result) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/cmd.py b/Python314_4_x86_Template/Lib/cmd.py deleted file mode 100644 index 51495fb32..000000000 --- a/Python314_4_x86_Template/Lib/cmd.py +++ /dev/null @@ -1,414 +0,0 @@ -"""A generic class to build line-oriented command interpreters. - -Interpreters constructed with this class obey the following conventions: - -1. End of file on input is processed as the command 'EOF'. -2. A command is parsed out of each line by collecting the prefix composed - of characters in the identchars member. -3. A command 'foo' is dispatched to a method 'do_foo()'; the do_ method - is passed a single argument consisting of the remainder of the line. -4. Typing an empty line repeats the last command. (Actually, it calls the - method 'emptyline', which may be overridden in a subclass.) -5. There is a predefined 'help' method. Given an argument 'topic', it - calls the command 'help_topic'. With no arguments, it lists all topics - with defined help_ functions, broken into up to three topics; documented - commands, miscellaneous help topics, and undocumented commands. -6. The command '?' is a synonym for 'help'. The command '!' is a synonym - for 'shell', if a do_shell method exists. -7. If completion is enabled, completing commands will be done automatically, - and completing of commands args is done by calling complete_foo() with - arguments text, line, begidx, endidx. text is string we are matching - against, all returned matches must begin with it. line is the current - input line (lstripped), begidx and endidx are the beginning and end - indexes of the text being matched, which could be used to provide - different completion depending upon which position the argument is in. - -The 'default' method may be overridden to intercept commands for which there -is no do_ method. - -The 'completedefault' method may be overridden to intercept completions for -commands that have no complete_ method. - -The data member 'self.ruler' sets the character used to draw separator lines -in the help messages. If empty, no ruler line is drawn. It defaults to "=". - -If the value of 'self.intro' is nonempty when the cmdloop method is called, -it is printed out on interpreter startup. This value may be overridden -via an optional argument to the cmdloop() method. - -The data members 'self.doc_header', 'self.misc_header', and -'self.undoc_header' set the headers used for the help function's -listings of documented functions, miscellaneous topics, and undocumented -functions respectively. -""" - -import sys - -__all__ = ["Cmd"] - -PROMPT = '(Cmd) ' -IDENTCHARS = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' - 'abcdefghijklmnopqrstuvwxyz' - '0123456789' - '_') - -class Cmd: - """A simple framework for writing line-oriented command interpreters. - - These are often useful for test harnesses, administrative tools, and - prototypes that will later be wrapped in a more sophisticated interface. - - A Cmd instance or subclass instance is a line-oriented interpreter - framework. There is no good reason to instantiate Cmd itself; rather, - it's useful as a superclass of an interpreter class you define yourself - in order to inherit Cmd's methods and encapsulate action methods. - - """ - prompt = PROMPT - identchars = IDENTCHARS - ruler = '=' - lastcmd = '' - intro = None - doc_leader = "" - doc_header = "Documented commands (type help <topic>):" - misc_header = "Miscellaneous help topics:" - undoc_header = "Undocumented commands:" - nohelp = "*** No help on %s" - use_rawinput = 1 - - def __init__(self, completekey='tab', stdin=None, stdout=None): - """Instantiate a line-oriented interpreter framework. - - The optional argument 'completekey' is the readline name of a - completion key; it defaults to the Tab key. If completekey is - not None and the readline module is available, command completion - is done automatically. The optional arguments stdin and stdout - specify alternate input and output file objects; if not specified, - sys.stdin and sys.stdout are used. - - """ - if stdin is not None: - self.stdin = stdin - else: - self.stdin = sys.stdin - if stdout is not None: - self.stdout = stdout - else: - self.stdout = sys.stdout - self.cmdqueue = [] - self.completekey = completekey - - def cmdloop(self, intro=None): - """Repeatedly issue a prompt, accept input, parse an initial prefix - off the received input, and dispatch to action methods, passing them - the remainder of the line as argument. - - """ - - self.preloop() - if self.use_rawinput and self.completekey: - try: - import readline - self.old_completer = readline.get_completer() - readline.set_completer(self.complete) - if readline.backend == "editline": - if self.completekey == 'tab': - # libedit uses "^I" instead of "tab" - command_string = "bind ^I rl_complete" - else: - command_string = f"bind {self.completekey} rl_complete" - else: - command_string = f"{self.completekey}: complete" - readline.parse_and_bind(command_string) - except ImportError: - pass - try: - if intro is not None: - self.intro = intro - if self.intro: - self.stdout.write(str(self.intro)+"\n") - stop = None - while not stop: - if self.cmdqueue: - line = self.cmdqueue.pop(0) - else: - if self.use_rawinput: - try: - line = input(self.prompt) - except EOFError: - line = 'EOF' - else: - self.stdout.write(self.prompt) - self.stdout.flush() - line = self.stdin.readline() - if not len(line): - line = 'EOF' - else: - line = line.rstrip('\r\n') - line = self.precmd(line) - stop = self.onecmd(line) - stop = self.postcmd(stop, line) - self.postloop() - finally: - if self.use_rawinput and self.completekey: - try: - import readline - readline.set_completer(self.old_completer) - except ImportError: - pass - - - def precmd(self, line): - """Hook method executed just before the command line is - interpreted, but after the input prompt is generated and issued. - - """ - return line - - def postcmd(self, stop, line): - """Hook method executed just after a command dispatch is finished.""" - return stop - - def preloop(self): - """Hook method executed once when the cmdloop() method is called.""" - pass - - def postloop(self): - """Hook method executed once when the cmdloop() method is about to - return. - - """ - pass - - def parseline(self, line): - """Parse the line into a command name and a string containing - the arguments. Returns a tuple containing (command, args, line). - 'command' and 'args' may be None if the line couldn't be parsed. - """ - line = line.strip() - if not line: - return None, None, line - elif line[0] == '?': - line = 'help ' + line[1:] - elif line[0] == '!': - if hasattr(self, 'do_shell'): - line = 'shell ' + line[1:] - else: - return None, None, line - i, n = 0, len(line) - while i < n and line[i] in self.identchars: i = i+1 - cmd, arg = line[:i], line[i:].strip() - return cmd, arg, line - - def onecmd(self, line): - """Interpret the argument as though it had been typed in response - to the prompt. - - This may be overridden, but should not normally need to be; - see the precmd() and postcmd() methods for useful execution hooks. - The return value is a flag indicating whether interpretation of - commands by the interpreter should stop. - - """ - cmd, arg, line = self.parseline(line) - if not line: - return self.emptyline() - if cmd is None: - return self.default(line) - self.lastcmd = line - if line == 'EOF' : - self.lastcmd = '' - if cmd == '': - return self.default(line) - else: - func = getattr(self, 'do_' + cmd, None) - if func is None: - return self.default(line) - return func(arg) - - def emptyline(self): - """Called when an empty line is entered in response to the prompt. - - If this method is not overridden, it repeats the last nonempty - command entered. - - """ - if self.lastcmd: - return self.onecmd(self.lastcmd) - - def default(self, line): - """Called on an input line when the command prefix is not recognized. - - If this method is not overridden, it prints an error message and - returns. - - """ - self.stdout.write('*** Unknown syntax: %s\n'%line) - - def completedefault(self, *ignored): - """Method called to complete an input line when no command-specific - complete_*() method is available. - - By default, it returns an empty list. - - """ - return [] - - def completenames(self, text, *ignored): - dotext = 'do_'+text - return [a[3:] for a in self.get_names() if a.startswith(dotext)] - - def complete(self, text, state): - """Return the next possible completion for 'text'. - - If a command has not been entered, then complete against command list. - Otherwise try to call complete_<command> to get list of completions. - """ - if state == 0: - import readline - origline = readline.get_line_buffer() - line = origline.lstrip() - stripped = len(origline) - len(line) - begidx = readline.get_begidx() - stripped - endidx = readline.get_endidx() - stripped - if begidx>0: - cmd, args, foo = self.parseline(line) - if not cmd: - compfunc = self.completedefault - else: - try: - compfunc = getattr(self, 'complete_' + cmd) - except AttributeError: - compfunc = self.completedefault - else: - compfunc = self.completenames - self.completion_matches = compfunc(text, line, begidx, endidx) - try: - return self.completion_matches[state] - except IndexError: - return None - - def get_names(self): - # This method used to pull in base class attributes - # at a time dir() didn't do it yet. - return dir(self.__class__) - - def complete_help(self, *args): - commands = set(self.completenames(*args)) - topics = set(a[5:] for a in self.get_names() - if a.startswith('help_' + args[0])) - return list(commands | topics) - - def do_help(self, arg): - 'List available commands with "help" or detailed help with "help cmd".' - if arg: - # XXX check arg syntax - try: - func = getattr(self, 'help_' + arg) - except AttributeError: - from inspect import cleandoc - - try: - doc=getattr(self, 'do_' + arg).__doc__ - doc = cleandoc(doc) - if doc: - self.stdout.write("%s\n"%str(doc)) - return - except AttributeError: - pass - self.stdout.write("%s\n"%str(self.nohelp % (arg,))) - return - func() - else: - names = self.get_names() - cmds_doc = [] - cmds_undoc = [] - topics = set() - for name in names: - if name[:5] == 'help_': - topics.add(name[5:]) - names.sort() - # There can be duplicates if routines overridden - prevname = '' - for name in names: - if name[:3] == 'do_': - if name == prevname: - continue - prevname = name - cmd=name[3:] - if cmd in topics: - cmds_doc.append(cmd) - topics.remove(cmd) - elif getattr(self, name).__doc__: - cmds_doc.append(cmd) - else: - cmds_undoc.append(cmd) - self.stdout.write("%s\n"%str(self.doc_leader)) - self.print_topics(self.doc_header, cmds_doc, 15,80) - self.print_topics(self.misc_header, sorted(topics),15,80) - self.print_topics(self.undoc_header, cmds_undoc, 15,80) - - def print_topics(self, header, cmds, cmdlen, maxcol): - if cmds: - self.stdout.write("%s\n"%str(header)) - if self.ruler: - self.stdout.write("%s\n"%str(self.ruler * len(header))) - self.columnize(cmds, maxcol-1) - self.stdout.write("\n") - - def columnize(self, list, displaywidth=80): - """Display a list of strings as a compact set of columns. - - Each column is only as wide as necessary. - Columns are separated by two spaces (one was not legible enough). - """ - if not list: - self.stdout.write("<empty>\n") - return - - nonstrings = [i for i in range(len(list)) - if not isinstance(list[i], str)] - if nonstrings: - raise TypeError("list[i] not a string for i in %s" - % ", ".join(map(str, nonstrings))) - size = len(list) - if size == 1: - self.stdout.write('%s\n'%str(list[0])) - return - # Try every row count from 1 upwards - for nrows in range(1, len(list)): - ncols = (size+nrows-1) // nrows - colwidths = [] - totwidth = -2 - for col in range(ncols): - colwidth = 0 - for row in range(nrows): - i = row + nrows*col - if i >= size: - break - x = list[i] - colwidth = max(colwidth, len(x)) - colwidths.append(colwidth) - totwidth += colwidth + 2 - if totwidth > displaywidth: - break - if totwidth <= displaywidth: - break - else: - nrows = len(list) - ncols = 1 - colwidths = [0] - for row in range(nrows): - texts = [] - for col in range(ncols): - i = row + nrows*col - if i >= size: - x = "" - else: - x = list[i] - texts.append(x) - while texts and not texts[-1]: - del texts[-1] - for col in range(len(texts)): - texts[col] = texts[col].ljust(colwidths[col]) - self.stdout.write("%s\n"%str(" ".join(texts))) diff --git a/Python314_4_x86_Template/Lib/code.py b/Python314_4_x86_Template/Lib/code.py deleted file mode 100644 index b134886dc..000000000 --- a/Python314_4_x86_Template/Lib/code.py +++ /dev/null @@ -1,396 +0,0 @@ -"""Utilities needed to emulate Python's interactive interpreter. - -""" - -# Inspired by similar code by Jeff Epler and Fredrik Lundh. - - -import builtins -import sys -import traceback -from codeop import CommandCompiler, compile_command - -__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact", - "compile_command"] - -class InteractiveInterpreter: - """Base class for InteractiveConsole. - - This class deals with parsing and interpreter state (the user's - namespace); it doesn't deal with input buffering or prompting or - input file naming (the filename is always passed in explicitly). - - """ - - def __init__(self, locals=None): - """Constructor. - - The optional 'locals' argument specifies a mapping to use as the - namespace in which code will be executed; it defaults to a newly - created dictionary with key "__name__" set to "__console__" and - key "__doc__" set to None. - - """ - if locals is None: - locals = {"__name__": "__console__", "__doc__": None} - self.locals = locals - self.compile = CommandCompiler() - - def runsource(self, source, filename="<input>", symbol="single"): - """Compile and run some source in the interpreter. - - Arguments are as for compile_command(). - - One of several things can happen: - - 1) The input is incorrect; compile_command() raised an - exception (SyntaxError or OverflowError). A syntax traceback - will be printed by calling the showsyntaxerror() method. - - 2) The input is incomplete, and more input is required; - compile_command() returned None. Nothing happens. - - 3) The input is complete; compile_command() returned a code - object. The code is executed by calling self.runcode() (which - also handles run-time exceptions, except for SystemExit). - - The return value is True in case 2, False in the other cases (unless - an exception is raised). The return value can be used to - decide whether to use sys.ps1 or sys.ps2 to prompt the next - line. - - """ - try: - code = self.compile(source, filename, symbol) - except (OverflowError, SyntaxError, ValueError): - # Case 1 - self.showsyntaxerror(filename, source=source) - return False - - if code is None: - # Case 2 - return True - - # Case 3 - self.runcode(code) - return False - - def runcode(self, code): - """Execute a code object. - - When an exception occurs, self.showtraceback() is called to - display a traceback. All exceptions are caught except - SystemExit, which is reraised. - - A note about KeyboardInterrupt: this exception may occur - elsewhere in this code, and may not always be caught. The - caller should be prepared to deal with it. - - """ - try: - exec(code, self.locals) - except SystemExit: - raise - except: - self.showtraceback() - - def showsyntaxerror(self, filename=None, **kwargs): - """Display the syntax error that just occurred. - - This doesn't display a stack trace because there isn't one. - - If a filename is given, it is stuffed in the exception instead - of what was there before (because Python's parser always uses - "<string>" when reading from a string). - - The output is written by self.write(), below. - - """ - try: - typ, value, tb = sys.exc_info() - if filename and issubclass(typ, SyntaxError): - value.filename = filename - source = kwargs.pop('source', "") - self._showtraceback(typ, value, None, source) - finally: - typ = value = tb = None - - def showtraceback(self): - """Display the exception that just occurred. - - We remove the first stack item because it is our own code. - - The output is written by self.write(), below. - - """ - try: - typ, value, tb = sys.exc_info() - self._showtraceback(typ, value, tb.tb_next, "") - finally: - typ = value = tb = None - - def _showtraceback(self, typ, value, tb, source): - sys.last_type = typ - sys.last_traceback = tb - value = value.with_traceback(tb) - # Set the line of text that the exception refers to - lines = source.splitlines() - if (source and typ is SyntaxError - and not value.text and value.lineno is not None - and len(lines) >= value.lineno): - value.text = lines[value.lineno - 1] - sys.last_exc = sys.last_value = value - if sys.excepthook is sys.__excepthook__: - self._excepthook(typ, value, tb) - else: - # If someone has set sys.excepthook, we let that take precedence - # over self.write - try: - sys.excepthook(typ, value, tb) - except SystemExit: - raise - except BaseException as e: - e.__context__ = None - e = e.with_traceback(e.__traceback__.tb_next) - print('Error in sys.excepthook:', file=sys.stderr) - sys.__excepthook__(type(e), e, e.__traceback__) - print(file=sys.stderr) - print('Original exception was:', file=sys.stderr) - sys.__excepthook__(typ, value, tb) - - def _excepthook(self, typ, value, tb): - # This method is being overwritten in - # _pyrepl.console.InteractiveColoredConsole - lines = traceback.format_exception(typ, value, tb) - self.write(''.join(lines)) - - def write(self, data): - """Write a string. - - The base implementation writes to sys.stderr; a subclass may - replace this with a different implementation. - - """ - sys.stderr.write(data) - - -class InteractiveConsole(InteractiveInterpreter): - """Closely emulate the behavior of the interactive Python interpreter. - - This class builds on InteractiveInterpreter and adds prompting - using the familiar sys.ps1 and sys.ps2, and input buffering. - - """ - - def __init__(self, locals=None, filename="<console>", *, local_exit=False): - """Constructor. - - The optional locals argument will be passed to the - InteractiveInterpreter base class. - - The optional filename argument should specify the (file)name - of the input stream; it will show up in tracebacks. - - """ - InteractiveInterpreter.__init__(self, locals) - self.filename = filename - self.local_exit = local_exit - self.resetbuffer() - - def resetbuffer(self): - """Reset the input buffer.""" - self.buffer = [] - - def interact(self, banner=None, exitmsg=None): - """Closely emulate the interactive Python console. - - The optional banner argument specifies the banner to print - before the first interaction; by default it prints a banner - similar to the one printed by the real Python interpreter, - followed by the current class name in parentheses (so as not - to confuse this with the real interpreter -- since it's so - close!). - - The optional exitmsg argument specifies the exit message - printed when exiting. Pass the empty string to suppress - printing an exit message. If exitmsg is not given or None, - a default message is printed. - - """ - try: - sys.ps1 - delete_ps1_after = False - except AttributeError: - sys.ps1 = ">>> " - delete_ps1_after = True - try: - _ps2 = sys.ps2 - delete_ps2_after = False - except AttributeError: - sys.ps2 = "... " - delete_ps2_after = True - - cprt = 'Type "help", "copyright", "credits" or "license" for more information.' - if banner is None: - self.write("Python %s on %s\n%s\n(%s)\n" % - (sys.version, sys.platform, cprt, - self.__class__.__name__)) - elif banner: - self.write("%s\n" % str(banner)) - more = 0 - - # When the user uses exit() or quit() in their interactive shell - # they probably just want to exit the created shell, not the whole - # process. exit and quit in builtins closes sys.stdin which makes - # it super difficult to restore - # - # When self.local_exit is True, we overwrite the builtins so - # exit() and quit() only raises SystemExit and we can catch that - # to only exit the interactive shell - - _exit = None - _quit = None - - if self.local_exit: - if hasattr(builtins, "exit"): - _exit = builtins.exit - builtins.exit = Quitter("exit") - - if hasattr(builtins, "quit"): - _quit = builtins.quit - builtins.quit = Quitter("quit") - - try: - while True: - try: - if more: - prompt = sys.ps2 - else: - prompt = sys.ps1 - try: - line = self.raw_input(prompt) - except EOFError: - self.write("\n") - break - else: - more = self.push(line) - except KeyboardInterrupt: - self.write("\nKeyboardInterrupt\n") - self.resetbuffer() - more = 0 - except SystemExit as e: - if self.local_exit: - self.write("\n") - break - else: - raise e - finally: - # restore exit and quit in builtins if they were modified - if _exit is not None: - builtins.exit = _exit - - if _quit is not None: - builtins.quit = _quit - - if delete_ps1_after: - del sys.ps1 - - if delete_ps2_after: - del sys.ps2 - - if exitmsg is None: - self.write('now exiting %s...\n' % self.__class__.__name__) - elif exitmsg != '': - self.write('%s\n' % exitmsg) - - def push(self, line, filename=None, _symbol="single"): - """Push a line to the interpreter. - - The line should not have a trailing newline; it may have - internal newlines. The line is appended to a buffer and the - interpreter's runsource() method is called with the - concatenated contents of the buffer as source. If this - indicates that the command was executed or invalid, the buffer - is reset; otherwise, the command is incomplete, and the buffer - is left as it was after the line was appended. The return - value is 1 if more input is required, 0 if the line was dealt - with in some way (this is the same as runsource()). - - """ - self.buffer.append(line) - source = "\n".join(self.buffer) - if filename is None: - filename = self.filename - more = self.runsource(source, filename, symbol=_symbol) - if not more: - self.resetbuffer() - return more - - def raw_input(self, prompt=""): - """Write a prompt and read a line. - - The returned line does not include the trailing newline. - When the user enters the EOF key sequence, EOFError is raised. - - The base implementation uses the built-in function - input(); a subclass may replace this with a different - implementation. - - """ - return input(prompt) - - -class Quitter: - def __init__(self, name): - self.name = name - if sys.platform == "win32": - self.eof = 'Ctrl-Z plus Return' - else: - self.eof = 'Ctrl-D (i.e. EOF)' - - def __repr__(self): - return f'Use {self.name} or {self.eof} to exit' - - def __call__(self, code=None): - raise SystemExit(code) - - -def interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False): - """Closely emulate the interactive Python interpreter. - - This is a backwards compatible interface to the InteractiveConsole - class. When readfunc is not specified, it attempts to import the - readline module to enable GNU readline if it is available. - - Arguments (all optional, all default to None): - - banner -- passed to InteractiveConsole.interact() - readfunc -- if not None, replaces InteractiveConsole.raw_input() - local -- passed to InteractiveInterpreter.__init__() - exitmsg -- passed to InteractiveConsole.interact() - local_exit -- passed to InteractiveConsole.__init__() - - """ - console = InteractiveConsole(local, local_exit=local_exit) - if readfunc is not None: - console.raw_input = readfunc - else: - try: - import readline # noqa: F401 - except ImportError: - pass - console.interact(banner, exitmsg) - - -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('-q', action='store_true', - help="don't print version and copyright messages") - args = parser.parse_args() - if args.q or sys.flags.quiet: - banner = '' - else: - banner = None - interact(banner) diff --git a/Python314_4_x86_Template/Lib/codecs.py b/Python314_4_x86_Template/Lib/codecs.py deleted file mode 100644 index e4a8010ab..000000000 --- a/Python314_4_x86_Template/Lib/codecs.py +++ /dev/null @@ -1,1125 +0,0 @@ -""" codecs -- Python Codec Registry, API and helpers. - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" - -import builtins -import sys - -### Registry and builtin stateless codec functions - -try: - from _codecs import * -except ImportError as why: - raise SystemError('Failed to load the builtin codecs: %s' % why) - -__all__ = ["register", "lookup", "open", "EncodedFile", "BOM", "BOM_BE", - "BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", - "BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", - "BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", - "CodecInfo", "Codec", "IncrementalEncoder", "IncrementalDecoder", - "StreamReader", "StreamWriter", - "StreamReaderWriter", "StreamRecoder", - "getencoder", "getdecoder", "getincrementalencoder", - "getincrementaldecoder", "getreader", "getwriter", - "encode", "decode", "iterencode", "iterdecode", - "strict_errors", "ignore_errors", "replace_errors", - "xmlcharrefreplace_errors", - "backslashreplace_errors", "namereplace_errors", - "register_error", "lookup_error"] - -### Constants - -# -# Byte Order Mark (BOM = ZERO WIDTH NO-BREAK SPACE = U+FEFF) -# and its possible byte string values -# for UTF8/UTF16/UTF32 output and little/big endian machines -# - -# UTF-8 -BOM_UTF8 = b'\xef\xbb\xbf' - -# UTF-16, little endian -BOM_LE = BOM_UTF16_LE = b'\xff\xfe' - -# UTF-16, big endian -BOM_BE = BOM_UTF16_BE = b'\xfe\xff' - -# UTF-32, little endian -BOM_UTF32_LE = b'\xff\xfe\x00\x00' - -# UTF-32, big endian -BOM_UTF32_BE = b'\x00\x00\xfe\xff' - -if sys.byteorder == 'little': - - # UTF-16, native endianness - BOM = BOM_UTF16 = BOM_UTF16_LE - - # UTF-32, native endianness - BOM_UTF32 = BOM_UTF32_LE - -else: - - # UTF-16, native endianness - BOM = BOM_UTF16 = BOM_UTF16_BE - - # UTF-32, native endianness - BOM_UTF32 = BOM_UTF32_BE - -# Old broken names (don't use in new code) -BOM32_LE = BOM_UTF16_LE -BOM32_BE = BOM_UTF16_BE -BOM64_LE = BOM_UTF32_LE -BOM64_BE = BOM_UTF32_BE - - -### Codec base classes (defining the API) - -class CodecInfo(tuple): - """Codec details when looking up the codec registry""" - - # Private API to allow Python 3.4 to denylist the known non-Unicode - # codecs in the standard library. A more general mechanism to - # reliably distinguish test encodings from other codecs will hopefully - # be defined for Python 3.5 - # - # See http://bugs.python.org/issue19619 - _is_text_encoding = True # Assume codecs are text encodings by default - - def __new__(cls, encode, decode, streamreader=None, streamwriter=None, - incrementalencoder=None, incrementaldecoder=None, name=None, - *, _is_text_encoding=None): - self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) - self.name = name - self.encode = encode - self.decode = decode - self.incrementalencoder = incrementalencoder - self.incrementaldecoder = incrementaldecoder - self.streamwriter = streamwriter - self.streamreader = streamreader - if _is_text_encoding is not None: - self._is_text_encoding = _is_text_encoding - return self - - def __repr__(self): - return "<%s.%s object for encoding %s at %#x>" % \ - (self.__class__.__module__, self.__class__.__qualname__, - self.name, id(self)) - - def __getnewargs__(self): - return tuple(self) - -class Codec: - - """ Defines the interface for stateless encoders/decoders. - - The .encode()/.decode() methods may use different error - handling schemes by providing the errors argument. These - string values are predefined: - - 'strict' - raise a ValueError error (or a subclass) - 'ignore' - ignore the character and continue with the next - 'replace' - replace with a suitable replacement character; - Python will use the official U+FFFD REPLACEMENT - CHARACTER for the builtin Unicode codecs on - decoding and '?' on encoding. - 'surrogateescape' - replace with private code points U+DCnn. - 'xmlcharrefreplace' - Replace with the appropriate XML - character reference (only for encoding). - 'backslashreplace' - Replace with backslashed escape sequences. - 'namereplace' - Replace with \\N{...} escape sequences - (only for encoding). - - The set of allowed values can be extended via register_error. - - """ - def encode(self, input, errors='strict'): - - """ Encodes the object input and returns a tuple (output - object, length consumed). - - errors defines the error handling to apply. It defaults to - 'strict' handling. - - The method may not store state in the Codec instance. Use - StreamWriter for codecs which have to keep state in order to - make encoding efficient. - - The encoder must be able to handle zero length input and - return an empty object of the output object type in this - situation. - - """ - raise NotImplementedError - - def decode(self, input, errors='strict'): - - """ Decodes the object input and returns a tuple (output - object, length consumed). - - input must be an object which provides the bf_getreadbuf - buffer slot. Python strings, buffer objects and memory - mapped files are examples of objects providing this slot. - - errors defines the error handling to apply. It defaults to - 'strict' handling. - - The method may not store state in the Codec instance. Use - StreamReader for codecs which have to keep state in order to - make decoding efficient. - - The decoder must be able to handle zero length input and - return an empty object of the output object type in this - situation. - - """ - raise NotImplementedError - -class IncrementalEncoder(object): - """ - An IncrementalEncoder encodes an input in multiple steps. The input can - be passed piece by piece to the encode() method. The IncrementalEncoder - remembers the state of the encoding process between calls to encode(). - """ - def __init__(self, errors='strict'): - """ - Creates an IncrementalEncoder instance. - - The IncrementalEncoder may use different error handling schemes by - providing the errors keyword argument. See the module docstring - for a list of possible values. - """ - self.errors = errors - self.buffer = "" - - def encode(self, input, final=False): - """ - Encodes input and returns the resulting object. - """ - raise NotImplementedError - - def reset(self): - """ - Resets the encoder to the initial state. - """ - - def getstate(self): - """ - Return the current state of the encoder. - """ - return 0 - - def setstate(self, state): - """ - Set the current state of the encoder. state must have been - returned by getstate(). - """ - -class BufferedIncrementalEncoder(IncrementalEncoder): - """ - This subclass of IncrementalEncoder can be used as the baseclass for an - incremental encoder if the encoder must keep some of the output in a - buffer between calls to encode(). - """ - def __init__(self, errors='strict'): - IncrementalEncoder.__init__(self, errors) - # unencoded input that is kept between calls to encode() - self.buffer = "" - - def _buffer_encode(self, input, errors, final): - # Overwrite this method in subclasses: It must encode input - # and return an (output, length consumed) tuple - raise NotImplementedError - - def encode(self, input, final=False): - # encode input (taking the buffer into account) - data = self.buffer + input - (result, consumed) = self._buffer_encode(data, self.errors, final) - # keep unencoded input until the next call - self.buffer = data[consumed:] - return result - - def reset(self): - IncrementalEncoder.reset(self) - self.buffer = "" - - def getstate(self): - return self.buffer or 0 - - def setstate(self, state): - self.buffer = state or "" - -class IncrementalDecoder(object): - """ - An IncrementalDecoder decodes an input in multiple steps. The input can - be passed piece by piece to the decode() method. The IncrementalDecoder - remembers the state of the decoding process between calls to decode(). - """ - def __init__(self, errors='strict'): - """ - Create an IncrementalDecoder instance. - - The IncrementalDecoder may use different error handling schemes by - providing the errors keyword argument. See the module docstring - for a list of possible values. - """ - self.errors = errors - - def decode(self, input, final=False): - """ - Decode input and returns the resulting object. - """ - raise NotImplementedError - - def reset(self): - """ - Reset the decoder to the initial state. - """ - - def getstate(self): - """ - Return the current state of the decoder. - - This must be a (buffered_input, additional_state_info) tuple. - buffered_input must be a bytes object containing bytes that - were passed to decode() that have not yet been converted. - additional_state_info must be a non-negative integer - representing the state of the decoder WITHOUT yet having - processed the contents of buffered_input. In the initial state - and after reset(), getstate() must return (b"", 0). - """ - return (b"", 0) - - def setstate(self, state): - """ - Set the current state of the decoder. - - state must have been returned by getstate(). The effect of - setstate((b"", 0)) must be equivalent to reset(). - """ - -class BufferedIncrementalDecoder(IncrementalDecoder): - """ - This subclass of IncrementalDecoder can be used as the baseclass for an - incremental decoder if the decoder must be able to handle incomplete - byte sequences. - """ - def __init__(self, errors='strict'): - IncrementalDecoder.__init__(self, errors) - # undecoded input that is kept between calls to decode() - self.buffer = b"" - - def _buffer_decode(self, input, errors, final): - # Overwrite this method in subclasses: It must decode input - # and return an (output, length consumed) tuple - raise NotImplementedError - - def decode(self, input, final=False): - # decode input (taking the buffer into account) - data = self.buffer + input - (result, consumed) = self._buffer_decode(data, self.errors, final) - # keep undecoded input until the next call - self.buffer = data[consumed:] - return result - - def reset(self): - IncrementalDecoder.reset(self) - self.buffer = b"" - - def getstate(self): - # additional state info is always 0 - return (self.buffer, 0) - - def setstate(self, state): - # ignore additional state info - self.buffer = state[0] - -# -# The StreamWriter and StreamReader class provide generic working -# interfaces which can be used to implement new encoding submodules -# very easily. See encodings/utf_8.py for an example on how this is -# done. -# - -class StreamWriter(Codec): - - def __init__(self, stream, errors='strict'): - - """ Creates a StreamWriter instance. - - stream must be a file-like object open for writing. - - The StreamWriter may use different error handling - schemes by providing the errors keyword argument. These - parameters are predefined: - - 'strict' - raise a ValueError (or a subclass) - 'ignore' - ignore the character and continue with the next - 'replace'- replace with a suitable replacement character - 'xmlcharrefreplace' - Replace with the appropriate XML - character reference. - 'backslashreplace' - Replace with backslashed escape - sequences. - 'namereplace' - Replace with \\N{...} escape sequences. - - The set of allowed parameter values can be extended via - register_error. - """ - self.stream = stream - self.errors = errors - - def write(self, object): - - """ Writes the object's contents encoded to self.stream. - """ - data, consumed = self.encode(object, self.errors) - self.stream.write(data) - - def writelines(self, list): - - """ Writes the concatenated list of strings to the stream - using .write(). - """ - self.write(''.join(list)) - - def reset(self): - - """ Resets the codec buffers used for keeping internal state. - - Calling this method should ensure that the data on the - output is put into a clean state, that allows appending - of new fresh data without having to rescan the whole - stream to recover state. - - """ - pass - - def seek(self, offset, whence=0): - self.stream.seek(offset, whence) - if whence == 0 and offset == 0: - self.reset() - - def __getattr__(self, name, - getattr=getattr): - - """ Inherit all other methods from the underlying stream. - """ - return getattr(self.stream, name) - - def __enter__(self): - return self - - def __exit__(self, type, value, tb): - self.stream.close() - - def __reduce_ex__(self, proto): - raise TypeError("can't serialize %s" % self.__class__.__name__) - -### - -class StreamReader(Codec): - - charbuffertype = str - - def __init__(self, stream, errors='strict'): - - """ Creates a StreamReader instance. - - stream must be a file-like object open for reading. - - The StreamReader may use different error handling - schemes by providing the errors keyword argument. These - parameters are predefined: - - 'strict' - raise a ValueError (or a subclass) - 'ignore' - ignore the character and continue with the next - 'replace'- replace with a suitable replacement character - 'backslashreplace' - Replace with backslashed escape sequences; - - The set of allowed parameter values can be extended via - register_error. - """ - self.stream = stream - self.errors = errors - self.bytebuffer = b"" - self._empty_charbuffer = self.charbuffertype() - self.charbuffer = self._empty_charbuffer - self.linebuffer = None - - def decode(self, input, errors='strict'): - raise NotImplementedError - - def read(self, size=-1, chars=-1, firstline=False): - - """ Decodes data from the stream self.stream and returns the - resulting object. - - chars indicates the number of decoded code points or bytes to - return. read() will never return more data than requested, - but it might return less, if there is not enough available. - - size indicates the approximate maximum number of decoded - bytes or code points to read for decoding. The decoder - can modify this setting as appropriate. The default value - -1 indicates to read and decode as much as possible. size - is intended to prevent having to decode huge files in one - step. - - If firstline is true, and a UnicodeDecodeError happens - after the first line terminator in the input only the first line - will be returned, the rest of the input will be kept until the - next call to read(). - - The method should use a greedy read strategy, meaning that - it should read as much data as is allowed within the - definition of the encoding and the given size, e.g. if - optional encoding endings or state markers are available - on the stream, these should be read too. - """ - # If we have lines cached, first merge them back into characters - if self.linebuffer: - self.charbuffer = self._empty_charbuffer.join(self.linebuffer) - self.linebuffer = None - - if chars < 0: - # For compatibility with other read() methods that take a - # single argument - chars = size - - # read until we get the required number of characters (if available) - while True: - # can the request be satisfied from the character buffer? - if chars >= 0: - if len(self.charbuffer) >= chars: - break - # we need more data - if size < 0: - newdata = self.stream.read() - else: - newdata = self.stream.read(size) - # decode bytes (those remaining from the last call included) - data = self.bytebuffer + newdata - if not data: - break - try: - newchars, decodedbytes = self.decode(data, self.errors) - except UnicodeDecodeError as exc: - if firstline: - newchars, decodedbytes = \ - self.decode(data[:exc.start], self.errors) - lines = newchars.splitlines(keepends=True) - if len(lines)<=1: - raise - else: - raise - # keep undecoded bytes until the next call - self.bytebuffer = data[decodedbytes:] - # put new characters in the character buffer - self.charbuffer += newchars - # there was no data available - if not newdata: - break - if chars < 0: - # Return everything we've got - result = self.charbuffer - self.charbuffer = self._empty_charbuffer - else: - # Return the first chars characters - result = self.charbuffer[:chars] - self.charbuffer = self.charbuffer[chars:] - return result - - def readline(self, size=None, keepends=True): - - """ Read one line from the input stream and return the - decoded data. - - size, if given, is passed as size argument to the - read() method. - - """ - # If we have lines cached from an earlier read, return - # them unconditionally - if self.linebuffer: - line = self.linebuffer[0] - del self.linebuffer[0] - if len(self.linebuffer) == 1: - # revert to charbuffer mode; we might need more data - # next time - self.charbuffer = self.linebuffer[0] - self.linebuffer = None - if not keepends: - line = line.splitlines(keepends=False)[0] - return line - - readsize = size or 72 - line = self._empty_charbuffer - # If size is given, we call read() only once - while True: - data = self.read(readsize, firstline=True) - if data: - # If we're at a "\r" read one extra character (which might - # be a "\n") to get a proper line ending. If the stream is - # temporarily exhausted we return the wrong line ending. - if (isinstance(data, str) and data.endswith("\r")) or \ - (isinstance(data, bytes) and data.endswith(b"\r")): - data += self.read(size=1, chars=1) - - line += data - lines = line.splitlines(keepends=True) - if lines: - if len(lines) > 1: - # More than one line result; the first line is a full line - # to return - line = lines[0] - del lines[0] - if len(lines) > 1: - # cache the remaining lines - lines[-1] += self.charbuffer - self.linebuffer = lines - self.charbuffer = None - else: - # only one remaining line, put it back into charbuffer - self.charbuffer = lines[0] + self.charbuffer - if not keepends: - line = line.splitlines(keepends=False)[0] - break - line0withend = lines[0] - line0withoutend = lines[0].splitlines(keepends=False)[0] - if line0withend != line0withoutend: # We really have a line end - # Put the rest back together and keep it until the next call - self.charbuffer = self._empty_charbuffer.join(lines[1:]) + \ - self.charbuffer - if keepends: - line = line0withend - else: - line = line0withoutend - break - # we didn't get anything or this was our only try - if not data or size is not None: - if line and not keepends: - line = line.splitlines(keepends=False)[0] - break - if readsize < 8000: - readsize *= 2 - return line - - def readlines(self, sizehint=None, keepends=True): - - """ Read all lines available on the input stream - and return them as a list. - - Line breaks are implemented using the codec's decoder - method and are included in the list entries. - - sizehint, if given, is ignored since there is no efficient - way of finding the true end-of-line. - - """ - data = self.read() - return data.splitlines(keepends) - - def reset(self): - - """ Resets the codec buffers used for keeping internal state. - - Note that no stream repositioning should take place. - This method is primarily intended to be able to recover - from decoding errors. - - """ - self.bytebuffer = b"" - self.charbuffer = self._empty_charbuffer - self.linebuffer = None - - def seek(self, offset, whence=0): - """ Set the input stream's current position. - - Resets the codec buffers used for keeping state. - """ - self.stream.seek(offset, whence) - self.reset() - - def __next__(self): - - """ Return the next decoded line from the input stream.""" - line = self.readline() - if line: - return line - raise StopIteration - - def __iter__(self): - return self - - def __getattr__(self, name, - getattr=getattr): - - """ Inherit all other methods from the underlying stream. - """ - return getattr(self.stream, name) - - def __enter__(self): - return self - - def __exit__(self, type, value, tb): - self.stream.close() - - def __reduce_ex__(self, proto): - raise TypeError("can't serialize %s" % self.__class__.__name__) - -### - -class StreamReaderWriter: - - """ StreamReaderWriter instances allow wrapping streams which - work in both read and write modes. - - The design is such that one can use the factory functions - returned by the codec.lookup() function to construct the - instance. - - """ - # Optional attributes set by the file wrappers below - encoding = 'unknown' - - def __init__(self, stream, Reader, Writer, errors='strict'): - - """ Creates a StreamReaderWriter instance. - - stream must be a Stream-like object. - - Reader, Writer must be factory functions or classes - providing the StreamReader, StreamWriter interface resp. - - Error handling is done in the same way as defined for the - StreamWriter/Readers. - - """ - self.stream = stream - self.reader = Reader(stream, errors) - self.writer = Writer(stream, errors) - self.errors = errors - - def read(self, size=-1): - - return self.reader.read(size) - - def readline(self, size=None, keepends=True): - - return self.reader.readline(size, keepends) - - def readlines(self, sizehint=None, keepends=True): - - return self.reader.readlines(sizehint, keepends) - - def __next__(self): - - """ Return the next decoded line from the input stream.""" - return next(self.reader) - - def __iter__(self): - return self - - def write(self, data): - - return self.writer.write(data) - - def writelines(self, list): - - return self.writer.writelines(list) - - def reset(self): - - self.reader.reset() - self.writer.reset() - - def seek(self, offset, whence=0): - self.stream.seek(offset, whence) - self.reader.reset() - if whence == 0 and offset == 0: - self.writer.reset() - - def __getattr__(self, name, - getattr=getattr): - - """ Inherit all other methods from the underlying stream. - """ - return getattr(self.stream, name) - - # these are needed to make "with StreamReaderWriter(...)" work properly - - def __enter__(self): - return self - - def __exit__(self, type, value, tb): - self.stream.close() - - def __reduce_ex__(self, proto): - raise TypeError("can't serialize %s" % self.__class__.__name__) - -### - -class StreamRecoder: - - """ StreamRecoder instances translate data from one encoding to another. - - They use the complete set of APIs returned by the - codecs.lookup() function to implement their task. - - Data written to the StreamRecoder is first decoded into an - intermediate format (depending on the "decode" codec) and then - written to the underlying stream using an instance of the provided - Writer class. - - In the other direction, data is read from the underlying stream using - a Reader instance and then encoded and returned to the caller. - - """ - # Optional attributes set by the file wrappers below - data_encoding = 'unknown' - file_encoding = 'unknown' - - def __init__(self, stream, encode, decode, Reader, Writer, - errors='strict'): - - """ Creates a StreamRecoder instance which implements a two-way - conversion: encode and decode work on the frontend (the - data visible to .read() and .write()) while Reader and Writer - work on the backend (the data in stream). - - You can use these objects to do transparent - transcodings from e.g. latin-1 to utf-8 and back. - - stream must be a file-like object. - - encode and decode must adhere to the Codec interface; Reader and - Writer must be factory functions or classes providing the - StreamReader and StreamWriter interfaces resp. - - Error handling is done in the same way as defined for the - StreamWriter/Readers. - - """ - self.stream = stream - self.encode = encode - self.decode = decode - self.reader = Reader(stream, errors) - self.writer = Writer(stream, errors) - self.errors = errors - - def read(self, size=-1): - - data = self.reader.read(size) - data, bytesencoded = self.encode(data, self.errors) - return data - - def readline(self, size=None): - - if size is None: - data = self.reader.readline() - else: - data = self.reader.readline(size) - data, bytesencoded = self.encode(data, self.errors) - return data - - def readlines(self, sizehint=None): - - data = self.reader.read() - data, bytesencoded = self.encode(data, self.errors) - return data.splitlines(keepends=True) - - def __next__(self): - - """ Return the next decoded line from the input stream.""" - data = next(self.reader) - data, bytesencoded = self.encode(data, self.errors) - return data - - def __iter__(self): - return self - - def write(self, data): - - data, bytesdecoded = self.decode(data, self.errors) - return self.writer.write(data) - - def writelines(self, list): - - data = b''.join(list) - data, bytesdecoded = self.decode(data, self.errors) - return self.writer.write(data) - - def reset(self): - - self.reader.reset() - self.writer.reset() - - def seek(self, offset, whence=0): - # Seeks must be propagated to both the readers and writers - # as they might need to reset their internal buffers. - self.reader.seek(offset, whence) - self.writer.seek(offset, whence) - - def __getattr__(self, name, - getattr=getattr): - - """ Inherit all other methods from the underlying stream. - """ - return getattr(self.stream, name) - - def __enter__(self): - return self - - def __exit__(self, type, value, tb): - self.stream.close() - - def __reduce_ex__(self, proto): - raise TypeError("can't serialize %s" % self.__class__.__name__) - -### Shortcuts - -def open(filename, mode='r', encoding=None, errors='strict', buffering=-1): - """ Open an encoded file using the given mode and return - a wrapped version providing transparent encoding/decoding. - - Note: The wrapped version will only accept the object format - defined by the codecs, i.e. Unicode objects for most builtin - codecs. Output is also codec dependent and will usually be - Unicode as well. - - If encoding is not None, then the - underlying encoded files are always opened in binary mode. - The default file mode is 'r', meaning to open the file in read mode. - - encoding specifies the encoding which is to be used for the - file. - - errors may be given to define the error handling. It defaults - to 'strict' which causes ValueErrors to be raised in case an - encoding error occurs. - - buffering has the same meaning as for the builtin open() API. - It defaults to -1 which means that the default buffer size will - be used. - - The returned wrapped file object provides an extra attribute - .encoding which allows querying the used encoding. This - attribute is only available if an encoding was specified as - parameter. - """ - import warnings - warnings.warn("codecs.open() is deprecated. Use open() instead.", - DeprecationWarning, stacklevel=2) - - if encoding is not None and \ - 'b' not in mode: - # Force opening of the file in binary mode - mode = mode + 'b' - file = builtins.open(filename, mode, buffering) - if encoding is None: - return file - - try: - info = lookup(encoding) - srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors) - # Add attributes to simplify introspection - srw.encoding = encoding - return srw - except: - file.close() - raise - -def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'): - - """ Return a wrapped version of file which provides transparent - encoding translation. - - Data written to the wrapped file is decoded according - to the given data_encoding and then encoded to the underlying - file using file_encoding. The intermediate data type - will usually be Unicode but depends on the specified codecs. - - Bytes read from the file are decoded using file_encoding and then - passed back to the caller encoded using data_encoding. - - If file_encoding is not given, it defaults to data_encoding. - - errors may be given to define the error handling. It defaults - to 'strict' which causes ValueErrors to be raised in case an - encoding error occurs. - - The returned wrapped file object provides two extra attributes - .data_encoding and .file_encoding which reflect the given - parameters of the same name. The attributes can be used for - introspection by Python programs. - - """ - if file_encoding is None: - file_encoding = data_encoding - data_info = lookup(data_encoding) - file_info = lookup(file_encoding) - sr = StreamRecoder(file, data_info.encode, data_info.decode, - file_info.streamreader, file_info.streamwriter, errors) - # Add attributes to simplify introspection - sr.data_encoding = data_encoding - sr.file_encoding = file_encoding - return sr - -### Helpers for codec lookup - -def getencoder(encoding): - - """ Lookup up the codec for the given encoding and return - its encoder function. - - Raises a LookupError in case the encoding cannot be found. - - """ - return lookup(encoding).encode - -def getdecoder(encoding): - - """ Lookup up the codec for the given encoding and return - its decoder function. - - Raises a LookupError in case the encoding cannot be found. - - """ - return lookup(encoding).decode - -def getincrementalencoder(encoding): - - """ Lookup up the codec for the given encoding and return - its IncrementalEncoder class or factory function. - - Raises a LookupError in case the encoding cannot be found - or the codecs doesn't provide an incremental encoder. - - """ - encoder = lookup(encoding).incrementalencoder - if encoder is None: - raise LookupError(encoding) - return encoder - -def getincrementaldecoder(encoding): - - """ Lookup up the codec for the given encoding and return - its IncrementalDecoder class or factory function. - - Raises a LookupError in case the encoding cannot be found - or the codecs doesn't provide an incremental decoder. - - """ - decoder = lookup(encoding).incrementaldecoder - if decoder is None: - raise LookupError(encoding) - return decoder - -def getreader(encoding): - - """ Lookup up the codec for the given encoding and return - its StreamReader class or factory function. - - Raises a LookupError in case the encoding cannot be found. - - """ - return lookup(encoding).streamreader - -def getwriter(encoding): - - """ Lookup up the codec for the given encoding and return - its StreamWriter class or factory function. - - Raises a LookupError in case the encoding cannot be found. - - """ - return lookup(encoding).streamwriter - -def iterencode(iterator, encoding, errors='strict', **kwargs): - """ - Encoding iterator. - - Encodes the input strings from the iterator using an IncrementalEncoder. - - errors and kwargs are passed through to the IncrementalEncoder - constructor. - """ - encoder = getincrementalencoder(encoding)(errors, **kwargs) - for input in iterator: - output = encoder.encode(input) - if output: - yield output - output = encoder.encode("", True) - if output: - yield output - -def iterdecode(iterator, encoding, errors='strict', **kwargs): - """ - Decoding iterator. - - Decodes the input strings from the iterator using an IncrementalDecoder. - - errors and kwargs are passed through to the IncrementalDecoder - constructor. - """ - decoder = getincrementaldecoder(encoding)(errors, **kwargs) - for input in iterator: - output = decoder.decode(input) - if output: - yield output - output = decoder.decode(b"", True) - if output: - yield output - -### Helpers for charmap-based codecs - -def make_identity_dict(rng): - - """ make_identity_dict(rng) -> dict - - Return a dictionary where elements of the rng sequence are - mapped to themselves. - - """ - return {i:i for i in rng} - -def make_encoding_map(decoding_map): - - """ Creates an encoding map from a decoding map. - - If a target mapping in the decoding map occurs multiple - times, then that target is mapped to None (undefined mapping), - causing an exception when encountered by the charmap codec - during translation. - - One example where this happens is cp875.py which decodes - multiple character to \\u001a. - - """ - m = {} - for k,v in decoding_map.items(): - if not v in m: - m[v] = k - else: - m[v] = None - return m - -### error handlers - -strict_errors = lookup_error("strict") -ignore_errors = lookup_error("ignore") -replace_errors = lookup_error("replace") -xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace") -backslashreplace_errors = lookup_error("backslashreplace") -namereplace_errors = lookup_error("namereplace") - -# Tell modulefinder that using codecs probably needs the encodings -# package -_false = 0 -if _false: - import encodings # noqa: F401 diff --git a/Python314_4_x86_Template/Lib/codeop.py b/Python314_4_x86_Template/Lib/codeop.py deleted file mode 100644 index 8cac00442..000000000 --- a/Python314_4_x86_Template/Lib/codeop.py +++ /dev/null @@ -1,154 +0,0 @@ -r"""Utilities to compile possibly incomplete Python source code. - -This module provides two interfaces, broadly similar to the builtin -function compile(), which take program text, a filename and a 'mode' -and: - -- Return code object if the command is complete and valid -- Return None if the command is incomplete -- Raise SyntaxError, ValueError or OverflowError if the command is a - syntax error (OverflowError and ValueError can be produced by - malformed literals). - -The two interfaces are: - -compile_command(source, filename, symbol): - - Compiles a single command in the manner described above. - -CommandCompiler(): - - Instances of this class have __call__ methods identical in - signature to compile_command; the difference is that if the - instance compiles program text containing a __future__ statement, - the instance 'remembers' and compiles all subsequent program texts - with the statement in force. - -The module also provides another class: - -Compile(): - - Instances of this class act like the built-in function compile, - but with 'memory' in the sense described above. -""" - -import __future__ -import warnings - -_features = [getattr(__future__, fname) - for fname in __future__.all_feature_names] - -__all__ = ["compile_command", "Compile", "CommandCompiler"] - -# The following flags match the values from Include/cpython/compile.h -# Caveat emptor: These flags are undocumented on purpose and depending -# on their effect outside the standard library is **unsupported**. -PyCF_DONT_IMPLY_DEDENT = 0x200 -PyCF_ONLY_AST = 0x400 -PyCF_ALLOW_INCOMPLETE_INPUT = 0x4000 - -def _maybe_compile(compiler, source, filename, symbol, flags): - # Check for source consisting of only blank lines and comments. - for line in source.split("\n"): - line = line.strip() - if line and line[0] != '#': - break # Leave it alone. - else: - if symbol != "eval": - source = "pass" # Replace it with a 'pass' statement - - # Disable compiler warnings when checking for incomplete input. - with warnings.catch_warnings(): - warnings.simplefilter("ignore", (SyntaxWarning, DeprecationWarning)) - try: - compiler(source, filename, symbol, flags=flags) - except SyntaxError: # Let other compile() errors propagate. - try: - compiler(source + "\n", filename, symbol, flags=flags) - return None - except _IncompleteInputError as e: - return None - except SyntaxError as e: - pass - # fallthrough - - return compiler(source, filename, symbol, incomplete_input=False) - -def _compile(source, filename, symbol, incomplete_input=True, *, flags=0): - if incomplete_input: - flags |= PyCF_ALLOW_INCOMPLETE_INPUT - flags |= PyCF_DONT_IMPLY_DEDENT - return compile(source, filename, symbol, flags) - -def compile_command(source, filename="<input>", symbol="single", flags=0): - r"""Compile a command and determine whether it is incomplete. - - Arguments: - - source -- the source string; may contain \n characters - filename -- optional filename from which source was read; default - "<input>" - symbol -- optional grammar start symbol; "single" (default), "exec" - or "eval" - - Return value / exceptions raised: - - - Return a code object if the command is complete and valid - - Return None if the command is incomplete - - Raise SyntaxError, ValueError or OverflowError if the command is a - syntax error (OverflowError and ValueError can be produced by - malformed literals). - """ - return _maybe_compile(_compile, source, filename, symbol, flags) - -class Compile: - """Instances of this class behave much like the built-in compile - function, but if one is used to compile text containing a future - statement, it "remembers" and compiles all subsequent program texts - with the statement in force.""" - def __init__(self): - self.flags = PyCF_DONT_IMPLY_DEDENT | PyCF_ALLOW_INCOMPLETE_INPUT - - def __call__(self, source, filename, symbol, flags=0, **kwargs): - flags |= self.flags - if kwargs.get('incomplete_input', True) is False: - flags &= ~PyCF_DONT_IMPLY_DEDENT - flags &= ~PyCF_ALLOW_INCOMPLETE_INPUT - codeob = compile(source, filename, symbol, flags, True) - if flags & PyCF_ONLY_AST: - return codeob # this is an ast.Module in this case - for feature in _features: - if codeob.co_flags & feature.compiler_flag: - self.flags |= feature.compiler_flag - return codeob - -class CommandCompiler: - """Instances of this class have __call__ methods identical in - signature to compile_command; the difference is that if the - instance compiles program text containing a __future__ statement, - the instance 'remembers' and compiles all subsequent program texts - with the statement in force.""" - - def __init__(self,): - self.compiler = Compile() - - def __call__(self, source, filename="<input>", symbol="single"): - r"""Compile a command and determine whether it is incomplete. - - Arguments: - - source -- the source string; may contain \n characters - filename -- optional filename from which source was read; - default "<input>" - symbol -- optional grammar start symbol; "single" (default) or - "eval" - - Return value / exceptions raised: - - - Return a code object if the command is complete and valid - - Return None if the command is incomplete - - Raise SyntaxError, ValueError or OverflowError if the command is a - syntax error (OverflowError and ValueError can be produced by - malformed literals). - """ - return _maybe_compile(self.compiler, source, filename, symbol, flags=self.compiler.flags) diff --git a/Python314_4_x86_Template/Lib/collections/__init__.py b/Python314_4_x86_Template/Lib/collections/__init__.py deleted file mode 100644 index 803de0c67..000000000 --- a/Python314_4_x86_Template/Lib/collections/__init__.py +++ /dev/null @@ -1,1609 +0,0 @@ -'''This module implements specialized container datatypes providing -alternatives to Python's general purpose built-in containers, dict, -list, set, and tuple. - -* namedtuple factory function for creating tuple subclasses with named fields -* deque list-like container with fast appends and pops on either end -* ChainMap dict-like class for creating a single view of multiple mappings -* Counter dict subclass for counting hashable objects -* OrderedDict dict subclass that remembers the order entries were added -* defaultdict dict subclass that calls a factory function to supply missing values -* UserDict wrapper around dictionary objects for easier dict subclassing -* UserList wrapper around list objects for easier list subclassing -* UserString wrapper around string objects for easier string subclassing - -''' - -__all__ = [ - 'ChainMap', - 'Counter', - 'OrderedDict', - 'UserDict', - 'UserList', - 'UserString', - 'defaultdict', - 'deque', - 'namedtuple', -] - -import _collections_abc -import sys as _sys - -_sys.modules['collections.abc'] = _collections_abc -abc = _collections_abc - -from itertools import chain as _chain -from itertools import repeat as _repeat -from itertools import starmap as _starmap -from keyword import iskeyword as _iskeyword -from operator import eq as _eq -from operator import itemgetter as _itemgetter -from reprlib import recursive_repr as _recursive_repr -from _weakref import proxy as _proxy - -try: - from _collections import deque -except ImportError: - pass -else: - _collections_abc.MutableSequence.register(deque) - -try: - # Expose _deque_iterator to support pickling deque iterators - from _collections import _deque_iterator # noqa: F401 -except ImportError: - pass - -try: - from _collections import defaultdict -except ImportError: - pass - -heapq = None # Lazily imported - - -################################################################################ -### OrderedDict -################################################################################ - -class _OrderedDictKeysView(_collections_abc.KeysView): - - def __reversed__(self): - yield from reversed(self._mapping) - -class _OrderedDictItemsView(_collections_abc.ItemsView): - - def __reversed__(self): - for key in reversed(self._mapping): - yield (key, self._mapping[key]) - -class _OrderedDictValuesView(_collections_abc.ValuesView): - - def __reversed__(self): - for key in reversed(self._mapping): - yield self._mapping[key] - -class _Link(object): - __slots__ = 'prev', 'next', 'key', '__weakref__' - -class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as regular dictionaries. - - # The internal self.__map dict maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # The sentinel is in self.__hardroot with a weakref proxy in self.__root. - # The prev links are weakref proxies (to prevent circular references). - # Individual links are kept alive by the hard reference in self.__map. - # Those hard references disappear when a key is deleted from an OrderedDict. - - def __new__(cls, /, *args, **kwds): - "Create the ordered dict object and set up the underlying structures." - self = dict.__new__(cls) - self.__hardroot = _Link() - self.__root = root = _proxy(self.__hardroot) - root.prev = root.next = root - self.__map = {} - return self - - def __init__(self, other=(), /, **kwds): - '''Initialize an ordered dictionary. The signature is the same as - regular dictionaries. Keyword argument order is preserved. - ''' - self.__update(other, **kwds) - - def __setitem__(self, key, value, - dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link at the end of the linked list, - # and the inherited dictionary is updated with the new key/value pair. - if key not in self: - self.__map[key] = link = Link() - root = self.__root - last = root.prev - link.prev, link.next, link.key = last, root, key - last.next = link - root.prev = proxy(link) - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which gets - # removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link = self.__map.pop(key) - link_prev = link.prev - link_next = link.next - link_prev.next = link_next - link_next.prev = link_prev - link.prev = None - link.next = None - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - # Traverse the linked list in order. - root = self.__root - curr = root.next - while curr is not root: - yield curr.key - curr = curr.next - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - # Traverse the linked list in reverse order. - root = self.__root - curr = root.prev - while curr is not root: - yield curr.key - curr = curr.prev - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - root = self.__root - root.prev = root.next = root - self.__map.clear() - dict.clear(self) - - def popitem(self, last=True): - '''Remove and return a (key, value) pair from the dictionary. - - Pairs are returned in LIFO order if last is true or FIFO order if false. - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root.prev - link_prev = link.prev - link_prev.next = root - root.prev = link_prev - else: - link = root.next - link_next = link.next - root.next = link_next - link_next.prev = root - key = link.key - del self.__map[key] - value = dict.pop(self, key) - return key, value - - def move_to_end(self, key, last=True): - '''Move an existing element to the end (or beginning if last is false). - - Raise KeyError if the element does not exist. - ''' - link = self.__map[key] - link_prev = link.prev - link_next = link.next - soft_link = link_next.prev - link_prev.next = link_next - link_next.prev = link_prev - root = self.__root - if last: - last = root.prev - link.prev = last - link.next = root - root.prev = soft_link - last.next = link - else: - first = root.next - link.prev = root - link.next = first - first.prev = soft_link - root.next = link - - def __sizeof__(self): - sizeof = _sys.getsizeof - n = len(self) + 1 # number of links including root - size = sizeof(self.__dict__) # instance dictionary - size += sizeof(self.__map) * 2 # internal dict and inherited dict - size += sizeof(self.__hardroot) * n # link objects - size += sizeof(self.__root) * n # proxy objects - return size - - update = __update = _collections_abc.MutableMapping.update - - def keys(self): - "D.keys() -> a set-like object providing a view on D's keys" - return _OrderedDictKeysView(self) - - def items(self): - "D.items() -> a set-like object providing a view on D's items" - return _OrderedDictItemsView(self) - - def values(self): - "D.values() -> an object providing a view on D's values" - return _OrderedDictValuesView(self) - - __ne__ = _collections_abc.MutableMapping.__ne__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding - value. If key is not found, d is returned if given, otherwise KeyError - is raised. - - ''' - marker = self.__marker - result = dict.pop(self, key, marker) - if result is not marker: - # The same as in __delitem__(). - link = self.__map.pop(key) - link_prev = link.prev - link_next = link.next - link_prev.next = link_next - link_next.prev = link_prev - link.prev = None - link.next = None - return result - if default is marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - '''Insert key with a value of default if key is not in the dictionary. - - Return the value for key if key is in the dictionary, else default. - ''' - if key in self: - return self[key] - self[key] = default - return default - - @_recursive_repr() - def __repr__(self): - 'od.__repr__() <==> repr(od)' - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, dict(self.items())) - - def __reduce__(self): - 'Return state information for pickling' - state = self.__getstate__() - if state: - if isinstance(state, tuple): - state, slots = state - else: - slots = {} - state = state.copy() - slots = slots.copy() - for k in vars(OrderedDict()): - state.pop(k, None) - slots.pop(k, None) - if slots: - state = state, slots - else: - state = state or None - return self.__class__, (), state, None, iter(self.items()) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''Create a new ordered dictionary with keys from iterable and values set to value. - ''' - self = cls() - for key in iterable: - self[key] = value - return self - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return dict.__eq__(self, other) and all(map(_eq, self, other)) - return dict.__eq__(self, other) - - def __ior__(self, other): - self.update(other) - return self - - def __or__(self, other): - if not isinstance(other, dict): - return NotImplemented - new = self.__class__(self) - new.update(other) - return new - - def __ror__(self, other): - if not isinstance(other, dict): - return NotImplemented - new = self.__class__(other) - new.update(self) - return new - - -try: - from _collections import OrderedDict -except ImportError: - # Leave the pure Python version in place. - pass - - -################################################################################ -### namedtuple -################################################################################ - -try: - from _collections import _tuplegetter -except ImportError: - _tuplegetter = lambda index, doc: property(_itemgetter(index), doc=doc) - -def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): - """Returns a new subclass of tuple with named fields. - - >>> Point = namedtuple('Point', ['x', 'y']) - >>> Point.__doc__ # docstring for the new class - 'Point(x, y)' - >>> p = Point(11, y=22) # instantiate with positional args or keywords - >>> p[0] + p[1] # indexable like a plain tuple - 33 - >>> x, y = p # unpack like a regular tuple - >>> x, y - (11, 22) - >>> p.x + p.y # fields also accessible by name - 33 - >>> d = p._asdict() # convert to a dictionary - >>> d['x'] - 11 - >>> Point(**d) # convert from a dictionary - Point(x=11, y=22) - >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields - Point(x=100, y=22) - - """ - - # Validate the field names. At the user's option, either generate an error - # message or automatically replace the field name with a valid name. - if isinstance(field_names, str): - field_names = field_names.replace(',', ' ').split() - field_names = list(map(str, field_names)) - typename = _sys.intern(str(typename)) - - if rename: - seen = set() - for index, name in enumerate(field_names): - if (not name.isidentifier() - or _iskeyword(name) - or name.startswith('_') - or name in seen): - field_names[index] = f'_{index}' - seen.add(name) - - for name in [typename] + field_names: - if type(name) is not str: - raise TypeError('Type names and field names must be strings') - if not name.isidentifier(): - raise ValueError('Type names and field names must be valid ' - f'identifiers: {name!r}') - if _iskeyword(name): - raise ValueError('Type names and field names cannot be a ' - f'keyword: {name!r}') - - seen = set() - for name in field_names: - if name.startswith('_') and not rename: - raise ValueError('Field names cannot start with an underscore: ' - f'{name!r}') - if name in seen: - raise ValueError(f'Encountered duplicate field name: {name!r}') - seen.add(name) - - field_defaults = {} - if defaults is not None: - defaults = tuple(defaults) - if len(defaults) > len(field_names): - raise TypeError('Got more default values than field names') - field_defaults = dict(reversed(list(zip(reversed(field_names), - reversed(defaults))))) - - # Variables used in the methods and docstrings - field_names = tuple(map(_sys.intern, field_names)) - num_fields = len(field_names) - arg_list = ', '.join(field_names) - if num_fields == 1: - arg_list += ',' - repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')' - tuple_new = tuple.__new__ - _dict, _tuple, _len, _map, _zip = dict, tuple, len, map, zip - - # Create all the named tuple methods to be added to the class namespace - - namespace = { - '_tuple_new': tuple_new, - '__builtins__': {}, - '__name__': f'namedtuple_{typename}', - } - code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))' - __new__ = eval(code, namespace) - __new__.__name__ = '__new__' - __new__.__doc__ = f'Create new instance of {typename}({arg_list})' - if defaults is not None: - __new__.__defaults__ = defaults - - @classmethod - def _make(cls, iterable): - result = tuple_new(cls, iterable) - if _len(result) != num_fields: - raise TypeError(f'Expected {num_fields} arguments, got {len(result)}') - return result - - _make.__func__.__doc__ = (f'Make a new {typename} object from a sequence ' - 'or iterable') - - def _replace(self, /, **kwds): - result = self._make(_map(kwds.pop, field_names, self)) - if kwds: - raise TypeError(f'Got unexpected field names: {list(kwds)!r}') - return result - - _replace.__doc__ = (f'Return a new {typename} object replacing specified ' - 'fields with new values') - - def __repr__(self): - 'Return a nicely formatted representation string' - return self.__class__.__name__ + repr_fmt % self - - def _asdict(self): - 'Return a new dict which maps field names to their values.' - return _dict(_zip(self._fields, self)) - - def __getnewargs__(self): - 'Return self as a plain tuple. Used by copy and pickle.' - return _tuple(self) - - # Modify function metadata to help with introspection and debugging - for method in ( - __new__, - _make.__func__, - _replace, - __repr__, - _asdict, - __getnewargs__, - ): - method.__qualname__ = f'{typename}.{method.__name__}' - - # Build-up the class namespace dictionary - # and use type() to build the result class - class_namespace = { - '__doc__': f'{typename}({arg_list})', - '__slots__': (), - '_fields': field_names, - '_field_defaults': field_defaults, - '__new__': __new__, - '_make': _make, - '__replace__': _replace, - '_replace': _replace, - '__repr__': __repr__, - '_asdict': _asdict, - '__getnewargs__': __getnewargs__, - '__match_args__': field_names, - } - for index, name in enumerate(field_names): - doc = _sys.intern(f'Alias for field number {index}') - class_namespace[name] = _tuplegetter(index, doc) - - result = type(typename, (tuple,), class_namespace) - - # For pickling to work, the __module__ variable needs to be set to the frame - # where the named tuple is created. Bypass this step in environments where - # sys._getframe is not defined (Jython for example) or sys._getframe is not - # defined for arguments greater than 0 (IronPython), or where the user has - # specified a particular module. - if module is None: - try: - module = _sys._getframemodulename(1) or '__main__' - except AttributeError: - try: - module = _sys._getframe(1).f_globals.get('__name__', '__main__') - except (AttributeError, ValueError): - pass - if module is not None: - result.__module__ = module - - return result - - -######################################################################## -### Counter -######################################################################## - -def _count_elements(mapping, iterable): - 'Tally elements from the iterable.' - mapping_get = mapping.get - for elem in iterable: - mapping[elem] = mapping_get(elem, 0) + 1 - -try: # Load C helper function if available - from _collections import _count_elements -except ImportError: - pass - -class Counter(dict): - '''Dict subclass for counting hashable items. Sometimes called a bag - or multiset. Elements are stored as dictionary keys and their counts - are stored as dictionary values. - - >>> c = Counter('abcdeabcdabcaba') # count elements from a string - - >>> c.most_common(3) # three most common elements - [('a', 5), ('b', 4), ('c', 3)] - >>> sorted(c) # list all unique elements - ['a', 'b', 'c', 'd', 'e'] - >>> ''.join(sorted(c.elements())) # list elements with repetitions - 'aaaaabbbbcccdde' - >>> sum(c.values()) # total of all counts - 15 - - >>> c['a'] # count of letter 'a' - 5 - >>> for elem in 'shazam': # update counts from an iterable - ... c[elem] += 1 # by adding 1 to each element's count - >>> c['a'] # now there are seven 'a' - 7 - >>> del c['b'] # remove all 'b' - >>> c['b'] # now there are zero 'b' - 0 - - >>> d = Counter('simsalabim') # make another counter - >>> c.update(d) # add in the second counter - >>> c['a'] # now there are nine 'a' - 9 - - >>> c.clear() # empty the counter - >>> c - Counter() - - Note: If a count is set to zero or reduced to zero, it will remain - in the counter until the entry is deleted or the counter is cleared: - - >>> c = Counter('aaabbc') - >>> c['b'] -= 2 # reduce the count of 'b' by two - >>> c.most_common() # 'b' is still in, but its count is zero - [('a', 3), ('c', 1), ('b', 0)] - - ''' - # References: - # http://en.wikipedia.org/wiki/Multiset - # http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html - # http://www.java2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm - # http://code.activestate.com/recipes/259174/ - # Knuth, TAOCP Vol. II section 4.6.3 - - def __init__(self, iterable=None, /, **kwds): - '''Create a new, empty Counter object. And if given, count elements - from an input iterable. Or, initialize the count from another mapping - of elements to their counts. - - >>> c = Counter() # a new, empty counter - >>> c = Counter('gallahad') # a new counter from an iterable - >>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping - >>> c = Counter(a=4, b=2) # a new counter from keyword args - - ''' - super().__init__() - self.update(iterable, **kwds) - - def __missing__(self, key): - 'The count of elements not in the Counter is zero.' - # Needed so that self[missing_item] does not raise KeyError - return 0 - - def total(self): - 'Sum of the counts' - return sum(self.values()) - - def most_common(self, n=None): - '''List the n most common elements and their counts from the most - common to the least. If n is None, then list all element counts. - - >>> Counter('abracadabra').most_common(3) - [('a', 5), ('b', 2), ('r', 2)] - - ''' - # Emulate Bag.sortedByCount from Smalltalk - if n is None: - return sorted(self.items(), key=_itemgetter(1), reverse=True) - - # Lazy import to speedup Python startup time - global heapq - if heapq is None: - import heapq - - return heapq.nlargest(n, self.items(), key=_itemgetter(1)) - - def elements(self): - '''Iterator over elements repeating each as many times as its count. - - >>> c = Counter('ABCABC') - >>> sorted(c.elements()) - ['A', 'A', 'B', 'B', 'C', 'C'] - - Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 - - >>> import math - >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) - >>> math.prod(prime_factors.elements()) - 1836 - - Note, if an element's count has been set to zero or is a negative - number, elements() will ignore it. - - ''' - # Emulate Bag.do from Smalltalk and Multiset.begin from C++. - return _chain.from_iterable(_starmap(_repeat, self.items())) - - # Override dict methods where necessary - - @classmethod - def fromkeys(cls, iterable, v=None): - # There is no equivalent method for counters because the semantics - # would be ambiguous in cases such as Counter.fromkeys('aaabbc', v=2). - # Initializing counters to zero values isn't necessary because zero - # is already the default value for counter lookups. Initializing - # to one is easily accomplished with Counter(set(iterable)). For - # more exotic cases, create a dictionary first using a dictionary - # comprehension or dict.fromkeys(). - raise NotImplementedError( - 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') - - def update(self, iterable=None, /, **kwds): - '''Like dict.update() but add counts instead of replacing them. - - Source can be an iterable, a dictionary, or another Counter instance. - - >>> c = Counter('which') - >>> c.update('witch') # add elements from another iterable - >>> d = Counter('watch') - >>> c.update(d) # add elements from another counter - >>> c['h'] # four 'h' in which, witch, and watch - 4 - - ''' - # The regular dict.update() operation makes no sense here because the - # replace behavior results in some of the original untouched counts - # being mixed-in with all of the other counts for a mismash that - # doesn't have a straight-forward interpretation in most counting - # contexts. Instead, we implement straight-addition. Both the inputs - # and outputs are allowed to contain zero and negative counts. - - if iterable is not None: - if isinstance(iterable, _collections_abc.Mapping): - if self: - self_get = self.get - for elem, count in iterable.items(): - self[elem] = count + self_get(elem, 0) - else: - # fast path when counter is empty - super().update(iterable) - else: - _count_elements(self, iterable) - if kwds: - self.update(kwds) - - def subtract(self, iterable=None, /, **kwds): - '''Like dict.update() but subtracts counts instead of replacing them. - Counts can be reduced below zero. Both the inputs and outputs are - allowed to contain zero and negative counts. - - Source can be an iterable, a dictionary, or another Counter instance. - - >>> c = Counter('which') - >>> c.subtract('witch') # subtract elements from another iterable - >>> c.subtract(Counter('watch')) # subtract elements from another counter - >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch - 0 - >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch - -1 - - ''' - if iterable is not None: - self_get = self.get - if isinstance(iterable, _collections_abc.Mapping): - for elem, count in iterable.items(): - self[elem] = self_get(elem, 0) - count - else: - for elem in iterable: - self[elem] = self_get(elem, 0) - 1 - if kwds: - self.subtract(kwds) - - def copy(self): - 'Return a shallow copy.' - return self.__class__(self) - - def __reduce__(self): - return self.__class__, (dict(self),) - - def __delitem__(self, elem): - 'Like dict.__delitem__() but does not raise KeyError for missing values.' - if elem in self: - super().__delitem__(elem) - - def __repr__(self): - if not self: - return f'{self.__class__.__name__}()' - try: - # dict() preserves the ordering returned by most_common() - d = dict(self.most_common()) - except TypeError: - # handle case where values are not orderable - d = dict(self) - return f'{self.__class__.__name__}({d!r})' - - # Multiset-style mathematical operations discussed in: - # Knuth TAOCP Volume II section 4.6.3 exercise 19 - # and at http://en.wikipedia.org/wiki/Multiset - # - # Outputs guaranteed to only include positive counts. - # - # To strip negative and zero counts, add-in an empty counter: - # c += Counter() - # - # Results are ordered according to when an element is first - # encountered in the left operand and then by the order - # encountered in the right operand. - # - # When the multiplicities are all zero or one, multiset operations - # are guaranteed to be equivalent to the corresponding operations - # for regular sets. - # Given counter multisets such as: - # cp = Counter(a=1, b=0, c=1) - # cq = Counter(c=1, d=0, e=1) - # The corresponding regular sets would be: - # sp = {'a', 'c'} - # sq = {'c', 'e'} - # All of the following relations would hold: - # set(cp + cq) == sp | sq - # set(cp - cq) == sp - sq - # set(cp | cq) == sp | sq - # set(cp & cq) == sp & sq - # (cp == cq) == (sp == sq) - # (cp != cq) == (sp != sq) - # (cp <= cq) == (sp <= sq) - # (cp < cq) == (sp < sq) - # (cp >= cq) == (sp >= sq) - # (cp > cq) == (sp > sq) - - def __eq__(self, other): - 'True if all counts agree. Missing counts are treated as zero.' - if not isinstance(other, Counter): - return NotImplemented - return all(self[e] == other[e] for c in (self, other) for e in c) - - def __ne__(self, other): - 'True if any counts disagree. Missing counts are treated as zero.' - if not isinstance(other, Counter): - return NotImplemented - return not self == other - - def __le__(self, other): - 'True if all counts in self are a subset of those in other.' - if not isinstance(other, Counter): - return NotImplemented - return all(self[e] <= other[e] for c in (self, other) for e in c) - - def __lt__(self, other): - 'True if all counts in self are a proper subset of those in other.' - if not isinstance(other, Counter): - return NotImplemented - return self <= other and self != other - - def __ge__(self, other): - 'True if all counts in self are a superset of those in other.' - if not isinstance(other, Counter): - return NotImplemented - return all(self[e] >= other[e] for c in (self, other) for e in c) - - def __gt__(self, other): - 'True if all counts in self are a proper superset of those in other.' - if not isinstance(other, Counter): - return NotImplemented - return self >= other and self != other - - def __add__(self, other): - '''Add counts from two counters. - - >>> Counter('abbb') + Counter('bcc') - Counter({'b': 4, 'c': 2, 'a': 1}) - - ''' - if not isinstance(other, Counter): - return NotImplemented - result = Counter() - for elem, count in self.items(): - newcount = count + other[elem] - if newcount > 0: - result[elem] = newcount - for elem, count in other.items(): - if elem not in self and count > 0: - result[elem] = count - return result - - def __sub__(self, other): - ''' Subtract count, but keep only results with positive counts. - - >>> Counter('abbbc') - Counter('bccd') - Counter({'b': 2, 'a': 1}) - - ''' - if not isinstance(other, Counter): - return NotImplemented - result = Counter() - for elem, count in self.items(): - newcount = count - other[elem] - if newcount > 0: - result[elem] = newcount - for elem, count in other.items(): - if elem not in self and count < 0: - result[elem] = 0 - count - return result - - def __or__(self, other): - '''Union is the maximum of value in either of the input counters. - - >>> Counter('abbb') | Counter('bcc') - Counter({'b': 3, 'c': 2, 'a': 1}) - - ''' - if not isinstance(other, Counter): - return NotImplemented - result = Counter() - for elem, count in self.items(): - other_count = other[elem] - newcount = other_count if count < other_count else count - if newcount > 0: - result[elem] = newcount - for elem, count in other.items(): - if elem not in self and count > 0: - result[elem] = count - return result - - def __and__(self, other): - ''' Intersection is the minimum of corresponding counts. - - >>> Counter('abbb') & Counter('bcc') - Counter({'b': 1}) - - ''' - if not isinstance(other, Counter): - return NotImplemented - result = Counter() - for elem, count in self.items(): - other_count = other[elem] - newcount = count if count < other_count else other_count - if newcount > 0: - result[elem] = newcount - return result - - def __pos__(self): - 'Adds an empty counter, effectively stripping negative and zero counts' - result = Counter() - for elem, count in self.items(): - if count > 0: - result[elem] = count - return result - - def __neg__(self): - '''Subtracts from an empty counter. Strips positive and zero counts, - and flips the sign on negative counts. - - ''' - result = Counter() - for elem, count in self.items(): - if count < 0: - result[elem] = 0 - count - return result - - def _keep_positive(self): - '''Internal method to strip elements with a negative or zero count''' - nonpositive = [elem for elem, count in self.items() if not count > 0] - for elem in nonpositive: - del self[elem] - return self - - def __iadd__(self, other): - '''Inplace add from another counter, keeping only positive counts. - - >>> c = Counter('abbb') - >>> c += Counter('bcc') - >>> c - Counter({'b': 4, 'c': 2, 'a': 1}) - - ''' - for elem, count in other.items(): - self[elem] += count - return self._keep_positive() - - def __isub__(self, other): - '''Inplace subtract counter, but keep only results with positive counts. - - >>> c = Counter('abbbc') - >>> c -= Counter('bccd') - >>> c - Counter({'b': 2, 'a': 1}) - - ''' - for elem, count in other.items(): - self[elem] -= count - return self._keep_positive() - - def __ior__(self, other): - '''Inplace union is the maximum of value from either counter. - - >>> c = Counter('abbb') - >>> c |= Counter('bcc') - >>> c - Counter({'b': 3, 'c': 2, 'a': 1}) - - ''' - for elem, other_count in other.items(): - count = self[elem] - if other_count > count: - self[elem] = other_count - return self._keep_positive() - - def __iand__(self, other): - '''Inplace intersection is the minimum of corresponding counts. - - >>> c = Counter('abbb') - >>> c &= Counter('bcc') - >>> c - Counter({'b': 1}) - - ''' - for elem, count in self.items(): - other_count = other[elem] - if other_count < count: - self[elem] = other_count - return self._keep_positive() - - -######################################################################## -### ChainMap -######################################################################## - -class ChainMap(_collections_abc.MutableMapping): - ''' A ChainMap groups multiple dicts (or other mappings) together - to create a single, updateable view. - - The underlying mappings are stored in a list. That list is public and can - be accessed or updated using the *maps* attribute. There is no other - state. - - Lookups search the underlying mappings successively until a key is found. - In contrast, writes, updates, and deletions only operate on the first - mapping. - - ''' - - def __init__(self, *maps): - '''Initialize a ChainMap by setting *maps* to the given mappings. - If no mappings are provided, a single empty dictionary is used. - - ''' - self.maps = list(maps) or [{}] # always at least one map - - def __missing__(self, key): - raise KeyError(key) - - def __getitem__(self, key): - for mapping in self.maps: - try: - return mapping[key] # can't use 'key in mapping' with defaultdict - except KeyError: - pass - return self.__missing__(key) # support subclasses that define __missing__ - - def get(self, key, default=None): - return self[key] if key in self else default # needs to make use of __contains__ - - def __len__(self): - return len(set().union(*self.maps)) # reuses stored hash values if possible - - def __iter__(self): - d = {} - for mapping in map(dict.fromkeys, reversed(self.maps)): - d |= mapping # reuses stored hash values if possible - return iter(d) - - def __contains__(self, key): - for mapping in self.maps: - if key in mapping: - return True - return False - - def __bool__(self): - return any(self.maps) - - @_recursive_repr() - def __repr__(self): - return f'{self.__class__.__name__}({", ".join(map(repr, self.maps))})' - - @classmethod - def fromkeys(cls, iterable, value=None, /): - 'Create a new ChainMap with keys from iterable and values set to value.' - return cls(dict.fromkeys(iterable, value)) - - def copy(self): - 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' - return self.__class__(self.maps[0].copy(), *self.maps[1:]) - - __copy__ = copy - - def new_child(self, m=None, **kwargs): # like Django's Context.push() - '''New ChainMap with a new map followed by all previous maps. - If no map is provided, an empty dict is used. - Keyword arguments update the map or new empty dict. - ''' - if m is None: - m = kwargs - elif kwargs: - m.update(kwargs) - return self.__class__(m, *self.maps) - - @property - def parents(self): # like Django's Context.pop() - 'New ChainMap from maps[1:].' - return self.__class__(*self.maps[1:]) - - def __setitem__(self, key, value): - self.maps[0][key] = value - - def __delitem__(self, key): - try: - del self.maps[0][key] - except KeyError: - raise KeyError(f'Key not found in the first mapping: {key!r}') - - def popitem(self): - 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' - try: - return self.maps[0].popitem() - except KeyError: - raise KeyError('No keys found in the first mapping.') - - def pop(self, key, *args): - 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' - try: - return self.maps[0].pop(key, *args) - except KeyError: - raise KeyError(f'Key not found in the first mapping: {key!r}') - - def clear(self): - 'Clear maps[0], leaving maps[1:] intact.' - self.maps[0].clear() - - def __ior__(self, other): - self.maps[0].update(other) - return self - - def __or__(self, other): - if not isinstance(other, _collections_abc.Mapping): - return NotImplemented - m = self.copy() - m.maps[0].update(other) - return m - - def __ror__(self, other): - if not isinstance(other, _collections_abc.Mapping): - return NotImplemented - m = dict(other) - for child in reversed(self.maps): - m.update(child) - return self.__class__(m) - - -################################################################################ -### UserDict -################################################################################ - -class UserDict(_collections_abc.MutableMapping): - - # Start by filling-out the abstract methods - def __init__(self, dict=None, /, **kwargs): - self.data = {} - if dict is not None: - self.update(dict) - if kwargs: - self.update(kwargs) - - def __len__(self): - return len(self.data) - - def __getitem__(self, key): - if key in self.data: - return self.data[key] - if hasattr(self.__class__, "__missing__"): - return self.__class__.__missing__(self, key) - raise KeyError(key) - - def __setitem__(self, key, item): - self.data[key] = item - - def __delitem__(self, key): - del self.data[key] - - def __iter__(self): - return iter(self.data) - - # Modify __contains__ and get() to work like dict - # does when __missing__ is present. - def __contains__(self, key): - return key in self.data - - def get(self, key, default=None): - if key in self: - return self[key] - return default - - - # Now, add the methods in dicts but not in MutableMapping - def __repr__(self): - return repr(self.data) - - def __or__(self, other): - if isinstance(other, UserDict): - return self.__class__(self.data | other.data) - if isinstance(other, dict): - return self.__class__(self.data | other) - return NotImplemented - - def __ror__(self, other): - if isinstance(other, UserDict): - return self.__class__(other.data | self.data) - if isinstance(other, dict): - return self.__class__(other | self.data) - return NotImplemented - - def __ior__(self, other): - if isinstance(other, UserDict): - self.data |= other.data - else: - self.data |= other - return self - - def __copy__(self): - inst = self.__class__.__new__(self.__class__) - inst.__dict__.update(self.__dict__) - # Create a copy and avoid triggering descriptors - inst.__dict__["data"] = self.__dict__["data"].copy() - return inst - - def copy(self): - if self.__class__ is UserDict: - return UserDict(self.data.copy()) - import copy - data = self.data - try: - self.data = {} - c = copy.copy(self) - finally: - self.data = data - c.update(self) - return c - - @classmethod - def fromkeys(cls, iterable, value=None): - d = cls() - for key in iterable: - d[key] = value - return d - - -################################################################################ -### UserList -################################################################################ - -class UserList(_collections_abc.MutableSequence): - """A more or less complete user-defined wrapper around list objects.""" - - def __init__(self, initlist=None): - self.data = [] - if initlist is not None: - # XXX should this accept an arbitrary sequence? - if type(initlist) == type(self.data): - self.data[:] = initlist - elif isinstance(initlist, UserList): - self.data[:] = initlist.data[:] - else: - self.data = list(initlist) - - def __repr__(self): - return repr(self.data) - - def __lt__(self, other): - return self.data < self.__cast(other) - - def __le__(self, other): - return self.data <= self.__cast(other) - - def __eq__(self, other): - return self.data == self.__cast(other) - - def __gt__(self, other): - return self.data > self.__cast(other) - - def __ge__(self, other): - return self.data >= self.__cast(other) - - def __cast(self, other): - return other.data if isinstance(other, UserList) else other - - def __contains__(self, item): - return item in self.data - - def __len__(self): - return len(self.data) - - def __getitem__(self, i): - if isinstance(i, slice): - return self.__class__(self.data[i]) - else: - return self.data[i] - - def __setitem__(self, i, item): - self.data[i] = item - - def __delitem__(self, i): - del self.data[i] - - def __add__(self, other): - if isinstance(other, UserList): - return self.__class__(self.data + other.data) - elif isinstance(other, type(self.data)): - return self.__class__(self.data + other) - return self.__class__(self.data + list(other)) - - def __radd__(self, other): - if isinstance(other, UserList): - return self.__class__(other.data + self.data) - elif isinstance(other, type(self.data)): - return self.__class__(other + self.data) - return self.__class__(list(other) + self.data) - - def __iadd__(self, other): - if isinstance(other, UserList): - self.data += other.data - elif isinstance(other, type(self.data)): - self.data += other - else: - self.data += list(other) - return self - - def __mul__(self, n): - return self.__class__(self.data * n) - - __rmul__ = __mul__ - - def __imul__(self, n): - self.data *= n - return self - - def __copy__(self): - inst = self.__class__.__new__(self.__class__) - inst.__dict__.update(self.__dict__) - # Create a copy and avoid triggering descriptors - inst.__dict__["data"] = self.__dict__["data"][:] - return inst - - def append(self, item): - self.data.append(item) - - def insert(self, i, item): - self.data.insert(i, item) - - def pop(self, i=-1): - return self.data.pop(i) - - def remove(self, item): - self.data.remove(item) - - def clear(self): - self.data.clear() - - def copy(self): - return self.__class__(self) - - def count(self, item): - return self.data.count(item) - - def index(self, item, *args): - return self.data.index(item, *args) - - def reverse(self): - self.data.reverse() - - def sort(self, /, *args, **kwds): - self.data.sort(*args, **kwds) - - def extend(self, other): - if isinstance(other, UserList): - self.data.extend(other.data) - else: - self.data.extend(other) - - -################################################################################ -### UserString -################################################################################ - -class UserString(_collections_abc.Sequence): - - def __init__(self, seq): - if isinstance(seq, str): - self.data = seq - elif isinstance(seq, UserString): - self.data = seq.data[:] - else: - self.data = str(seq) - - def __str__(self): - return str(self.data) - - def __repr__(self): - return repr(self.data) - - def __int__(self): - return int(self.data) - - def __float__(self): - return float(self.data) - - def __complex__(self): - return complex(self.data) - - def __hash__(self): - return hash(self.data) - - def __getnewargs__(self): - return (self.data[:],) - - def __eq__(self, string): - if isinstance(string, UserString): - return self.data == string.data - return self.data == string - - def __lt__(self, string): - if isinstance(string, UserString): - return self.data < string.data - return self.data < string - - def __le__(self, string): - if isinstance(string, UserString): - return self.data <= string.data - return self.data <= string - - def __gt__(self, string): - if isinstance(string, UserString): - return self.data > string.data - return self.data > string - - def __ge__(self, string): - if isinstance(string, UserString): - return self.data >= string.data - return self.data >= string - - def __contains__(self, char): - if isinstance(char, UserString): - char = char.data - return char in self.data - - def __len__(self): - return len(self.data) - - def __getitem__(self, index): - return self.__class__(self.data[index]) - - def __add__(self, other): - if isinstance(other, UserString): - return self.__class__(self.data + other.data) - elif isinstance(other, str): - return self.__class__(self.data + other) - return self.__class__(self.data + str(other)) - - def __radd__(self, other): - if isinstance(other, str): - return self.__class__(other + self.data) - return self.__class__(str(other) + self.data) - - def __mul__(self, n): - return self.__class__(self.data * n) - - __rmul__ = __mul__ - - def __mod__(self, args): - return self.__class__(self.data % args) - - def __rmod__(self, template): - return self.__class__(str(template) % self) - - # the following methods are defined in alphabetical order: - def capitalize(self): - return self.__class__(self.data.capitalize()) - - def casefold(self): - return self.__class__(self.data.casefold()) - - def center(self, width, *args): - return self.__class__(self.data.center(width, *args)) - - def count(self, sub, start=0, end=_sys.maxsize): - if isinstance(sub, UserString): - sub = sub.data - return self.data.count(sub, start, end) - - def removeprefix(self, prefix, /): - if isinstance(prefix, UserString): - prefix = prefix.data - return self.__class__(self.data.removeprefix(prefix)) - - def removesuffix(self, suffix, /): - if isinstance(suffix, UserString): - suffix = suffix.data - return self.__class__(self.data.removesuffix(suffix)) - - def encode(self, encoding='utf-8', errors='strict'): - encoding = 'utf-8' if encoding is None else encoding - errors = 'strict' if errors is None else errors - return self.data.encode(encoding, errors) - - def endswith(self, suffix, start=0, end=_sys.maxsize): - return self.data.endswith(suffix, start, end) - - def expandtabs(self, tabsize=8): - return self.__class__(self.data.expandtabs(tabsize)) - - def find(self, sub, start=0, end=_sys.maxsize): - if isinstance(sub, UserString): - sub = sub.data - return self.data.find(sub, start, end) - - def format(self, /, *args, **kwds): - return self.data.format(*args, **kwds) - - def format_map(self, mapping): - return self.data.format_map(mapping) - - def index(self, sub, start=0, end=_sys.maxsize): - if isinstance(sub, UserString): - sub = sub.data - return self.data.index(sub, start, end) - - def isalpha(self): - return self.data.isalpha() - - def isalnum(self): - return self.data.isalnum() - - def isascii(self): - return self.data.isascii() - - def isdecimal(self): - return self.data.isdecimal() - - def isdigit(self): - return self.data.isdigit() - - def isidentifier(self): - return self.data.isidentifier() - - def islower(self): - return self.data.islower() - - def isnumeric(self): - return self.data.isnumeric() - - def isprintable(self): - return self.data.isprintable() - - def isspace(self): - return self.data.isspace() - - def istitle(self): - return self.data.istitle() - - def isupper(self): - return self.data.isupper() - - def join(self, seq): - return self.data.join(seq) - - def ljust(self, width, *args): - return self.__class__(self.data.ljust(width, *args)) - - def lower(self): - return self.__class__(self.data.lower()) - - def lstrip(self, chars=None): - return self.__class__(self.data.lstrip(chars)) - - maketrans = str.maketrans - - def partition(self, sep): - return self.data.partition(sep) - - def replace(self, old, new, maxsplit=-1): - if isinstance(old, UserString): - old = old.data - if isinstance(new, UserString): - new = new.data - return self.__class__(self.data.replace(old, new, maxsplit)) - - def rfind(self, sub, start=0, end=_sys.maxsize): - if isinstance(sub, UserString): - sub = sub.data - return self.data.rfind(sub, start, end) - - def rindex(self, sub, start=0, end=_sys.maxsize): - if isinstance(sub, UserString): - sub = sub.data - return self.data.rindex(sub, start, end) - - def rjust(self, width, *args): - return self.__class__(self.data.rjust(width, *args)) - - def rpartition(self, sep): - return self.data.rpartition(sep) - - def rstrip(self, chars=None): - return self.__class__(self.data.rstrip(chars)) - - def split(self, sep=None, maxsplit=-1): - return self.data.split(sep, maxsplit) - - def rsplit(self, sep=None, maxsplit=-1): - return self.data.rsplit(sep, maxsplit) - - def splitlines(self, keepends=False): - return self.data.splitlines(keepends) - - def startswith(self, prefix, start=0, end=_sys.maxsize): - return self.data.startswith(prefix, start, end) - - def strip(self, chars=None): - return self.__class__(self.data.strip(chars)) - - def swapcase(self): - return self.__class__(self.data.swapcase()) - - def title(self): - return self.__class__(self.data.title()) - - def translate(self, *args): - return self.__class__(self.data.translate(*args)) - - def upper(self): - return self.__class__(self.data.upper()) - - def zfill(self, width): - return self.__class__(self.data.zfill(width)) diff --git a/Python314_4_x86_Template/Lib/collections/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/collections/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 38fa9f28dfb0e009f9005895e5ea29c195788a88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74831 zcmdqK3wT_|btZWG1vJnNG~RCzjW-$uzz6t#NhCpvAVrF5LJdnIg*1UC*&+x)w;K`( z$r9o?38)tVOCEv|HH2cVMaG&~j-6Oe{B0y}c9Y#?CJi=8Ky7|&Wuo0Y=G%M}!9=q6 z+nN2(sr%~g3y6{xXTG@-3%Bc5)vY>p>ePAFxyy5NvL##-j_cuD*Cgq0>4$n{C^rjV zu}RXn<d>pShvaX2z!J4QCiyeFtx+rgwMFemtViqzxh1u-`0IBz;pT`nnt_s8-I;rw z(X1K?_u075j=K2Xg?o22hwt6pxqCd(JigEA&filIE#&)L+!sZQ`QFoAvZpj!#`k&M z<$Efkl{Hc&wVK~uwWm5-U4u6s+>+cA`gQQ0^t>b0Yb+vHX`=vb)JAKSUxoNp7p<$o zcq8@2Qmy1KDwX`jXn#+7TWbI(x}uF-vIHedQSyF~YfQD0&0Mk!CCgFrps|d&*Gl@h zWCcoA9%<Ebmve3va&1T2wA^-vMm7509&J}fvJAgEq8%8C*I(<e^Jn_&{h2Fl{)SR% z&>CIgZ!DFfE4f}1O0JBqtdY3wX0&ZJw7rURTaar(j|Z0MaVMAbp(OBQ$&zchWGhNK zP|{@Pw2`gllFLyt10@HSc>8*PX1(N<j(9Vq0lOqsNi|ZnbpP$JwAofIg)M1MK3(+5 ze_iy+e@J<fDc<9+0W3T4wm(XFuJ_~j)hE98;5|T_o)h7S_tfyf=wQejJ~c8JIu#m< zM!b=cP=7c$7#<4^c>9NkqQUS`NcIi{qrvEzkx;}tA`d?q9taN|&khboL-J5C8h#Sl z(P8hwGtm>nL(LKI@ery62fZVs^2l%`<UKkX9*nk!hxGO$ZQg-!f3z)oFdT`tc_Set z!Jz?fbQJyQ$j)x{4h2tz2KcAf>pd3ij}FUcyvIg|`lI3DA@8wa+1oFN@b01GqLMc< zdbEEq7>S@SPlcl=L<8Pq;n3hf1nmuko)`_GDZc2f?StWyA-zYU(y?G9>J5&JgoXwp z+@X=-k%$*B453MY0r_Za=LrC1e{h7`qH!o~(d(1D7W78YLjd^6aOf%T@G<YH(ZOgK zWAvWFTkwdwwsUxN2#^$Aqvo`+h{otKjq^k>aw2#Xb%&2W9_o)$)d%E(kQ^H5qDl-= zy=wGCFzS^tsi%&HWX#VA)T7cELsSkElu*+f92f}EkOo4>g6JB*-K?Sh;NT!2l0Fld z_sHnT$lw|8sc?h_>wPjfI2xkPJroJaqGuS|Q!;^7_6B7PXMkUUi40;=mC^86L%~QG zg_3}PHkHQi$Fwn&QW~S_G;4<QRlLxfIfU_}pJ{!Hh<ua&C{K({Wha~}8YD868BDkg z^O10>;}>_-`9wD5iT58E^Yjl74q_q!he${8Xur>raP$*u;U+^4jR3uIml=r$Wnc?# zv%-;+p)*fm8u7y#dID*7I2t;2JQM}~;8(63>K~OOSde|FPdN@O*VAX{h8F;CJbirE zhl+9#s|r~z!|eAP>6@}mNei^42C*R@k)jrC%GSqrMQtV0FbFcpj@@sKIs#HO!*8pX zeD*|9p8*W}LT4fYAb-Ew7PU{CR=p%S7igcV1DPC`4r|W?(m^W~O1{)Bvk*+d<EVey zGH$)!k&U{3G?gjcpRv{!wp_6sxMEE><<OJB`OrYZ*{7_tE0%;k5*j=fq1QAeB0D!7 zrm2V=4q{2H+PHD$VSx4IVL*$Q*5Ura;n9Jk!AJ;XD@?Qtvw+Ex+gBYHWUh17n!YuC zr#GzY>j{B)2BV?A=&6yz_lJ)jHcac`zCNno*Vi#}CgJYGtcZ^F^(AV}pwwY3av!=H zDMj)RfX~gs%IU64`!DQ|7q-qhTdz4=e;#q;+1JV&EU#JW>=!c|ELWrhS28i?J|doY zMRs4GpzpZH%byqx4k}MPeSOEmawIwk;yyHtmsX>xL~&mqh8Yd__XVR^3r9zzp$Mwx z_w_MlrB&G<8XWBF12l6CnW#o!y;rV6Di^8AF5E;sNIv~-4B!*H#j*UBgk%9(qS##` z+ukLRt=I_0ZY+j$Y_sEajBPS*J|DK_NxRD>X~fc-XNHpjOIrnvMO>ZM)6%%3M%q^? zNm<e|#!JFUxdhK;n#U_v8PBAI4XZdpINszHAY<s)nT{k0BWSrqT9G7S#Ert%iJkL> zC6{t8<jnM6FKdkzEWhSnzF?Dzmj66LqyO64^%l7XHwR=dQn?w4amtocCMA36fnmz5 zj<#D864|GgxXUR!xWtr|7zY~Q-C}VHF@hI=?l~)?IWwmt$#bU67-rFY#^iPaNZM4@ zn~xxAuKZM!0Btf?1tsU(r`l(1*9#i1xf_fVwPxLt6SWHM$&?V=o;*>FG*OLWqNs%V zL=nCk$ao-X^Fx;MTcQrXm5H~b@BZ-6Nr5b&<@OPftb~0ibUG?`pl-s|*Y{K?cv21> z>+ADn$hF9m>nOnrljH^}k_CD&I2;A(kQ*tJ5Kr`r>BCz3Nl5_zBH&-8-;(C@)_lEN zl%Xd{eYYWlu7wE@nWRnVVHL?}3&KX^@K^e6kS#3Hj3b!`^F%dcdL-*ecBjp6=Q2)| zp{1E}bz1xme(v&TpiQ?w6KRg$i8R+=<<H`09^7T~U7p{CC;3MT4$>Z(avf|*$-vLe zmMEl3zZ<nm{5eQV{kcfX7HMI1dJEC=BNesM8s$N>@<=86?BU*2`K$f;d{=#BnO??U zP^y=&@fYHKUXm)KwMXhuqnK)F?bZ7sMMfL^rAQn7kQ1X#{&J+v{)%V|wt1gF516t{ zCc-l2BL+`l<We|J?3p2%xpn3{nE{|}f-ag<kQw*FJGjB-PkDSDRA*bwz~6wRZvG>- z!w&U<+TVa}NUL)=OMM!!9aMD*Y8L*g?QFK7me$gUJzz(UeMqZ;d%{b;R!Au8RDT7C z#j%Wa?IhtNq;u5}mY8W3%p;2q5Nf=mBU}U=Z%7_ILtH0V$<hAks2qxP__7jqs+7pY zjvaam%Y|@1kwhN*`c4Gp0eN^hn#ky5UM^8!BtEEwXYx8!l-E=3{N$&^I64xx{=rDX z9+ZzGJ^9o?L~KKLsv03M)U~#Gm91ziHBx9`;6T*4b0_d1LK=v1=_60!xo6HkGrcqJ z@lM!pR@A)KJYj#)bF;dBrt7T--gqEhy(Z>dgDltNz`VC1=4`-y)@0YK-SfqzxXqsT z6i&E!x%U%orGIo$S6qY@ZMYf7yc3m6y=tX^rPG30vF@<giT$%+MyzAcbc4?lax0)O zL>*;P1bTLOy*-eDBH`l@Spk19q+b$>BH)$0!AQ0oIzBoW6tV}`fQ*DX;9rU1hTL*| zlmui&h(cvhMj-f;p@EL<17M<)xZb|L(GiHuA)ifv+A&PxquhnTL<n2!>e_hcCuU7B zh>4<Pn2X#es6sK4ap{&*%E~#H^L)-^Xx7;<9lhpk5D?U`7R3mHXy3gM<2t>08?oXB zdPzqRaOm^^*lr5jfQ5+INQU{=Ig%O3JZMLOlxxJ<``ZD_s4b8&q|T&-du>(XUaQr6 z!jNyrTxO_iGLUJgZL5`fEdi^lgVAQWc6b2zh?PZRPhVe4xXpXU=iRb(>o)K3z@y<K zThAQuIppo=pnNYS+PdJ)%a_HoAvQ7x%c%)Btw6O!nOL8Mop!*49lY^Lc^79uu#ZNF zwlwht(NWAEHbbp1iPGc=)E+#AdXXbYFo)Ta+w<Z*A2j;D6^OZ)PjsEzdv@<+<m>~} z1M`KY=QmGnp6H^RjZ+(O)4uB6!kD{tqU*)($>^(RW*XjXnJ=q)vHOFv>gj>kT$KNT zvuLts#&N^hByd54IbKIFXIv08Hee-~u2E*FW|7rpN`Ect9F5pOSGBoB`^p6hYD#ZM z9KAjIeE06sXV^~^Si=_nrS)A|(U?)p^+0G)nQL{TkwcSx=Ewn`ou@isgO*00YH%gQ zWs6xB)2lQh6Fo^}(Zqt5g0B&`#N0$^6=8CXQ>(o?b!xQ-zlll;P5c<kvv{)SnzIJP z?cCVev2)L!eRjG(?x~xw&li=Q@1E+O$kK1h>t4*A=cK5Nh$Eg%*k8^Pv#9QpXq{<e zJ+0_*{1A+=`Pv1;YcUg2My$QHdo2SHF+c;XX0s=lU_8_2gI+AI5$nEMiD@i}GN7}S zJS(I;!17a;9{p+=9`GFixw{wjcqd}`UlH_ASw_%J$V~nKW}W<TQ)%RnbH9Pc7HAC< z4}B{`$}2ke^x3BYP=NT%*)zDwEr{nXn+HGLGS%|@0cGtx-}SLW^3?o%fl&2pTeew} zln*q@|DGUP&k)r$11eP2oFvFHK_f<7CY~t?m_mjxOQu3<BYl0ZQKes_B#0ylBDC`G z&%H2>o5l8B!Y}L_mLUy0aj#(vaMHLBp&hyoYW$e^O{vPa)kudm>y24Co$J%6e+MAd zKNt$i08#rk?}6c=5O!#P=+y9&*un<~y+kRXft80(5%D+xN^mdUsFMakE*#v3yakVZ zLLz7UOcL`#c$mmH!jdb!iR=h*Y2(s|z(IkG$sCT;eJ=ZK_MEe9)>(GVS#eYRo?LUo zSteGu1~W862+EM}0#pg|Brwu-9J-w<gHp_|(clw{2(}~EfJLo6fNgxS)xJ0l?`<&9 z>K*#r?r#8XFqvI$$t>T|>o>I2sJDb&LgS>xI4Na*L&F6<Kak;+4wH_HuY<HVr(C@m z>V7to*?YW`Bv|X%Z>k6ZHM1N7t2g8gdRw4!X%nhxpLZk}mIam&14s;j!Xjp8AH*Z* zxxpTas$d~ux46H1_X8^9cg#!N0CSHrEDA70>`r=mEI1f}31h5KZ<h)~Nf<rjb0(Z% zD0j*7u$+pTyr{QhfQ*>(L%8!f#ZLAh<q{{t8<-4sPLjVu3D?<=y9j}mcQ0)N%fzNg z>miw$S2Djtb$%TQ^m5rCt2YZOVwEf71*>B2RYY7Fv47_B=*&o2)upTpSrgs!)wM4k zm@lh+sry5XQPG~2)xM|{$SpW`;_QhD+q^qZ@Hi6>+{`OF@0@Z@7sd1HCmi#hf{C%1 zvpk(|q4mLQVvn*WXxC1?lGQkjiN<xM6lcDK)>z6l;s`iQce@PmD_T3?SI`4-nbS9L z#8z$1;Rb6i)3jY{Z@u1DZ^ZD9<A(gzdOq<$i*nl$L!IBy>wve``rEr+&sX@V=zb=X zuw|WwDS~9tkg)lY?T!`#j9cCo;PcVY@$k?P6$tCd&S>p}Y0e)EM?xePF&0x1uB$XP zFbvDm&~Q||gd`)uqZw%My@05Z6PFpiX_9r!PGm)fk45`*7Tm$=>WIRF1IaZ!cM<jP ziw^gp`^k)&;lWSPdgK`-%!7lC0E0GN|I%}&yjfB8`2$l2z^&;_+9FE=*iH;NmIL3t z-2I`#>FrYTtC5dZ_TuNuLcf)?@e*nR)tw71jOqq8h=znHp<E*tUHPGJj*nSLSXM9E z1RzwIZpJzj-@A&-n2=(%%wyIzhuWqjwdLsdBQ~YB3Bgut2R^&DM%ML~@20j;zx)HC zxi2$e?~9y?B(h-siojewd@Nxb3=NS;%`#n|kOQ}&EYn(GB5U6>l){!Fn1oP|HRL+u z52J}F0Lw>-kpa;2e~Km}5hO6n<QJb`HnnUb<EGm)X@8-6+Vax=3Cjnb;>m&Yr>0KD zJy3njJKd8RlhN~IQ)BVGx|s*B=QUk-HtG4#O+6RSYrb52J#YDS=W;#&>8YndDrbV% z^O~<ap<yv-O|*56P5^-fy@b{qJu({7RFJaHYExGSHo=JCoq}X@7iMckWu@8mv0Dmj z^^ms<#(b*dvk0pWX^({kO|b8FdYH&FLWy$zZz@JOL#iU^gyJ4w%;`&)ZSJ<`Te>=! zv-`YV=St{1n>SMX?%=1%JRWELqp|l5Gd*!nYs}gD#e2W5t3#N?mF`11#rAvMlOhG; zqBQ!w3O$ii`<)>kCkl*E7kU3=?0MtNK-{xD=3Jh>!_v|Q?A;3mOm-HLCvAr{B6QF| z3{aOZ=x1!IerCkpyAv`dXgGF2Q{rRRLO|nbc|SHGN8k({W<Flv_MX)Bx4p-8{Sq_@ zj+9?o-vjn~skeTwG$43uji~AU0B<dL$lrnZ09L8x<fCl^M_AZ+vW=W6Xa{8n8Tge9 z(9&Q{ufk>0KG+Y&E)*FV9%2s}o)(BG-N(2r*g)DEkC6ui9AJno)Va)K-s7;_54Cw& zRrr)~lg*}rwCzIGh#fUERo8ebD4&FOkpvp%8wKIhbzdj&K;<QgWlUr$2LD8cs7mez z5x9S(@Rtf#NwiT_4-;FO@EB1KVEPwiM$RC??&_8xj8{)pgCc@7mQ9sSH_Qa$`E3&! z^RE23tA@D7O;elBZ=2dSQy(vEf}TrfA2lAc2|Q*sC1q8l=2HI@mQU=TcNN54RbW`B zJ6~y!xuI?;naE`vKhRGEMZGlQ(u$mM393;19RLGS1vQw_ZVROF3dJW+zGdueH(M@v z%Gi|%1d*(i<iDc;j@TZWePu==BBV(Yej$2LzNk$;OI$~*npUk1EE$+9<s}{2Y&uhQ zD9r5t76u`t{-!2DgR?=%)#*&yuk?I3mU)D1%&G=*Gx+*%Zj8CB=8GyP4xP=?VVK08 zkZi|v;vKGQkWR6Y@=8a3>Sf0NZnC(cLt2fsWln1rtz$K^JO?vV-=%94)SYgV6>qYw z#!C0u6<rm1!sxmx`b8R*Uszjw2}?`D;)9hF7EAVUfHkES?+`2LIl4=wzF;myd#MU5 zky}EL-h_&ft4Li1Y3b5q7ap6dUULmLk-~K`_qzGYnoHX*Y@4fGeXVl!54zqh`qPRZ zRs2cSjWxStp8I0X`_eZWB8)r@msN6&zp0n1Rv|TwCX&2L({xx{6#>g(yIM~boVBu; zY)q-;DG+_RV83;RM7-ouAjg}mOFp;i=D5Q!>xfJ3r#fNqus|0ez*!Dz1X(Q$)1M8B z4`myI%G&zbW%l`mE#DxRVFSRLFX*(6SoXVnpu|$gd>oJ=Cr!TvW04N#>hD$W{D6Vq zayVc8jZ%f`z5X|KOq~v(pKYvBApzu519Q_52*4?L*C_6bBjNs&kZ+D3;6?7sCJ!Cr zWT`Ou?u6k?haW@zp@f6|AQSffVR#YQpA5<oHogj4Pdd_s9h{3S6UM4su7ev&IM@=O zu$)Zia^W{P+E1@aq8fzXBEOn&`7)Y>t}Cx-F0Xbrua-skpSkjGddjC8-z=W<G+*^J z&(}0exhEZyqaT)4OgiR^%Fpke+WX4=6T1wzH;c<JE`P24MsdreWj?R?eAZOfbnSG{ zwY)mRuN!%FP~4XIXz3Ks!^+{Fa(q};eJN);XQl`(Lkc6Mx;(S?a>Ebo@AUlek?%e7 z{loE<J7S(4G3So-l|z`%E2n{nf!Q-zIl3&xY%-ac2+$g{c><cn;is^(kHA;)7!-?F zEHVK-l{Uy1keSR3Q=OG~<pLoPz^DuWj9GomS)b0B(dy*>60Ik7pl-6G6@s;riM3+y ztq<6nP+}i;GxA$ejM5J)M(Lmz23r#gsBm#523;t>2xr)zlss<*2T4)^sRIP#lFb`G z?fvA!0mIr3{7E>~dh&k!)NL(nNoEs@qT44uEWIt6RI0f|03x+$VO)akB(Ly=(Fyxc z3oGHtR8~D%_(J!`a9^qd#Egbwl;#Ui5ODf4+$4!S7M*ET>4v)62i7w+w2LO7oTgS% zF5N(;Q;7lW0YoLtsF|*wL`}jrTq<R&mvm~o^t%}Eegk;d*B5#MTa{|*8XnlX^$gg@ zox`U_f^s+l%7M8Ff`=qu<OjNl{TL>n-u6gnC<62MlcDUVPK4nh+@D+nY^E@7E8dWL zMRL+ms)D!lWy<F<0zqAforKc?cPU}RB1qU!Jz+zJ;>ad<qli$O3uZ+AJ*tx=nTYyZ zX|i|X;ka}MHqesE(8WjRT)wL=-%VlnoQ}o|m(LaMjTP?wf$ax7e{6fVC%&dTzH)EO zz4xZjzD%!)dzxd;X0dEE*#wOe;PDS?6n?`Z%UqK-$o5$;v0EPO_8G!bFaJL38plFj z8R21Y4#^5sC380oh_-@p3F7@Z*IC!(E@=A=BD%4Igmc`%uW=27h`t2A9tVD6_tx;0 znI{vR)#(>@Y^$j$#W-{@VLbFJ4l&m}&AA7LquuHmfY5-TZ{I^_RpygsI$;A{QJ7D~ zeh2hm5T#5x<?SU1(as1Z3GWs~bDpNFo~E0HwJ~=s40q>-&JIoY#B=MQC3d>VXfnC> znzNh~!`bO`{I3f_4M2;6P+Qi-hA1GE{}98Ie~2U*D!?2l_|q|mGatMwxI7fkt=HkQ z=9;rihl|ffp1qo1kON-6SeKXz^5=otfQhxGM<95ssf!+ZI56Cg8szRH@1=yLM?c-& zLkStV<cBGFj1rO_<ParcN`@#Qi7%1YXK;7!gBN=ucmHUVww3+jgo8|IB=4c*8A^yr zk!c-JkB5l=$PoGv`8Vka37GPW^w<MV#OTc~ze0~LQNlZ|i&^$lAsjjxkl&(gqCWB; zQ1T;6eoRRtCA3+lIlU4_F{PtXMi!8;pYjLx6}PK09YuEv?2g7;xl&!zT<xma+EwqC zycfD-b32-ERY~ou=GwN*wr#m1xg6!UD>5C`w+lFNILhzj7CS2Lbd(}*HJZ6qAeH;( z%GS@8t)DB~He0qWX5Tixd*Um%?N&$YZKu_-oRT(p_v9{{%W0d<X`9RGoXzPR-~Bh9 z;ulVj@A<H%`HocND819>bd-KvBxMxG9VH)I?T$T`1)G#ndW&ywyYn48Ew`Jjjs`T9 zk-uQga1_z={9AN)J1^7Ga=XBaJEy}@_(?93TM`mpXuuf)28f}%k6BG|pn!d|kk1#G zXr{9Zf;G`em_fYI)(DtpX}v-KX>&u%HsG5NuK7?i;uuKu3>-;G+ol{{uqGT~_{g1> z{|~$-i3&Tn3<ggf9SCld{}Ub^r^S<pn{nyQ6K_BL?%Mc@?e9gdH|^tbkQ##=+;=CO zibNcNhJ#NyX=9<if)u6rYhTy^1}bO?mIO<KWx?`bMX)kh6|6Qg6o-}|&;zwZpbuHh zbX$Il->NboW}Ck%G7MWx*$Qp*IHZX`DqDdXn)2LCWT`a@eA<ktwMRg`nlXI32CyEn z!Dzyb+NTl6VNJ-v`vG#gz<eH+Bo+^k!!lJYa*e54Uu%B_w_mE331q5msU?mtqY`MX zTrH#j_1n@)XHx0j(Tyl16ghtQoVlgd)<c#+2CZ>u3rWSFa_R4dbN+zBGD{tnLrJC+ zjPDqj>&(MM>iE*@=}aZGoI-m@M3yhVUF|2dhj#^+<3M1*9oVC^;0R=r-eR>?Z|U$- zPy_B(N&7&y3~gkjw?U$T+3X%7L86z&dbf}tz>2{<X_%8X0<@Gm0%e|3$LdTkc^9*W zvC?RulyC-YA#6c_U%d)H=%E!Hg?}*7d%pBsJx|Bx4X*-+QfD$tZRdpLu!^G6VV~Nf zVWpBqfiL~3-nO2n_d%rv>Kju3jyU!4=*p6%SGp-}(8jO#XSmXzeXw2avHn*tF_Lwt z@-fQ>_!JCe^Gs*?ElEbdEWgXV4f10rd{WoGI<7YTHIhHa_-nZ8aGm<_AZ;co*KqY= zTFQLsB@Z`fdFY|I4!5dzosOrlKMj`*mk*Z?mkn3=a}QPfJu4)Co<Bbz(aKt38_D(; z1hSwVEabFkwPVC}c$L~h?;oo(G~)Ib2i!v%Me>(W3w{^Z%31BeGg1oj1zZ#~Y0HpC zcMfmRo|XnG1JyWh08jcsrwXBw9Df<NSiag8$T>*L!j#L<ei?k7t$v)q9(0c6`YX9! z73$?0%2dJoznV*U0wsY8lwZcb@&e^}f^)&Bn;&qSzblX%@C5P#`JEY{2^jN80l&i= zC^)z}rCaz3NZJAgL!jE?(vCXSCc(&#v)&#4`a>3fL%>PU^fv}_{7r#ee>48I1U!CU zAkW_#$oDTlWLe=JDO_Z~0nUp3X6bc+6Y_0hA5gJxr06g)v3vzG0!8ZF1_}e2gk1Zu zGck44X}zT5TBjvYs0#BV#R2;<;A<65`x|<3uV~wt)=H0Qd!?>C&{T}=bjlzERW9hL zJy1NPt<ykpz2ub+?@-&q*>UJqNa2w5#xC`_{@3`%gS+*7_3mJ|dZ+)zifC7%F=EGg z@qNa3ANHyxJFVyk)|5EIj&gnK>2dY1Z$<DED_ld_%t1$kN$I4XkR?T#IJ}*978`1Y zZQHha4-SXnOuyA|&by_V^P1bdk2ar1+I*(@h)*v|zQ821s5&Xb-+C{eC}(uZ%0f05 z>J1AB*`nE&)8s1N%<YZfz5K40RjZJ@b@ghWp*63!9?Du$z2ZCp6t_GAoMVT61qYS~ z=_CNDUC5S0Cj%m)$wyZn@h<m{Ji6*gQd8;=Y7+b{tK0bCdC-ePqhtW06Ytrbo!kob z5q%Q}%hjrezxCeHp^;$!Nw3m`s@4&W5Ll^&Y#tT{C3@CznmX2T#?X%Owq7|S4+qK! zluP~nAspkTQ|3p{@Z_j{8=#JL^aUg2Tmj{1>Qzr?>2bQ1^@l-&R~`3afadf__NrC< zO8~#Mbs)VNZdPxLeL0g_6Ln8-)uv7vCD~;LgZ-fvJX*Ojwc&cN_S{F>F9sk`rbDge zLzDt^9g_<kd~)yr?Tsr}D%g^pov^eeEZ&5rZ>+TkVG+23h#0^T2bABZMk7(UQ_-Ox zX!;{#>+Yf~RIg!}h6ixgB#gG?$R_XD$|dUc2ZzY0jJE_;lthj8-4ysh>4s7SD2>?> z7R@1G5)_9K*sDV*UbkzgUqm6GGc!QRa6h5GJ{FW|xeu>7h4QL>Qq>vb+!rD;=<oZ5 z6}Iw8P?98LBA8aG6aN-y*A|ZKJ<@InU{B;@d&L&5oW+Eth)6Rzttl?&wylk_VkNOA ztQ{+H91%jE(Oox@wS{6%oF0+4C93J6h#b+eWpEgQ3nJS(w8!5Erx+<h56GiDwyf(% zu6OJ+B{PxNpZOD)a#l9K&>~Nv1e7eiuITs^8D}_(1qcJQCd9fYT>6Xp#&U#|>V+K< zu`R}mHhJ~REh4jJ%<A*8!ey*f(bN->Qms5hGBqg`?Mv7zB$C4xAeKm5Y~#`)oZ!(F z)FakII3<HKG79f|$iCqz@NaCH)unU4bjS|yS`1RURs*}aQFeh=3*NI?yG|njNEB!= zmZu$h!jO(*@*%%x5he=%)hN0J4{O@E<Zn|lfdoET<b#zxG<pgr%qjLpB1?m!a>&9v zK0Yo?1P*AfPKFZYIwbWe<46B1P1k0$`{}s!H~BF6$Mby?86UVjlNm2;ncj5G)p)a@ zayooDd*+!~=gvRd`4<`g%f9!v#;P8S7x-gt|GcMoB8OE2W3K&pld?;V)vGQz3VDf8 za1dD9h^(vD4MtuCwi38JY{!_3myv9-l4-`wl*BV)dJ5x^9co%y0=U!}BLk}{W(<J$ zf=q)QS6qJSFujv6-9IH&#!?&>s%T}768?*sGpxl;UKj*FLNh|K_95=*WK$#xYYq)a zCcZ+QIZ`9KxH3l&h={X+ZI~~`qNCE#M3w1`DYW#jY0|c$T};|MoIon3DlT-*6unjU zM%m@f@7m*4TjTlLCNkh&jLC~F+w|i#@7e!k(~ml0Ro(FdQurIDEl07T3ie`bwK{R) zRpg_pyW<Fa69kS{mN03h5h1K8I|rWFV&Qp2M^i5|e+1|lq_zybq*10}1I`M)t6_vm zK(rdR_tH{AZ|Sfgg6XjNS8NA3d%$MITC}O0L!ihNa8@{WDk`X(fIBNb7XdlV2sF*} z1oA301duCMMrhk-Jx!O(-s$=eHP<~GV$Kahsji|ljf957;2>WiLhD2D9zA4b?@)T4 zash?G@zJHCFb{mAK5#&t*aI)DQ2i$;#tlr3`o^F*8pHWsOic&$f|&}L@Tn&y*?ALW zWGp-)wCXDMWh%T!qS6%k1Y>fO070@F5e!e!RL^w7rM3%gm+kT5_PD1b=Ils^0xe61 z0__Wg6a)p`s={MjuZ)pmh~Ts+2#JAxgNY8oL<WdsVk<G(Q`x*9>JZ9!CGJCp*b|I% zo5*FWKhTxfN+`qYOb17v0a}?4X^c7Q7~yI9!ZR^vrO<#{I^_59MBYfrEhJE*ixsVE zM41}UF@CXxpn#YEkqW;;$pR&xP&M=m&I<h}`b59RO1BS&F>Ye7l^GqSz(QVfw><?$ z7R``K%-6(LrGyPQp2$>Q0WSn_6jAx_sP(rgk?9o~kN^-s3S~plL{<n}21TR^CERd* z(AXdB!dlduL^iW95n^FrksKIE*rV8v<PWK}>;U;_iLGgx-a-45uxdbi1>+SEDq(*d zVh8WR33~`gD2yWnG1}o(5MeBTPFWZlMV!LVdTQ%0D6f#F;+PB`LnxMMx)QnD)p#lV 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 diff --git a/Python314_4_x86_Template/Lib/colorsys.py b/Python314_4_x86_Template/Lib/colorsys.py deleted file mode 100644 index e97f91718..000000000 --- a/Python314_4_x86_Template/Lib/colorsys.py +++ /dev/null @@ -1,166 +0,0 @@ -"""Conversion functions between RGB and other color systems. - -This modules provides two functions for each color system ABC: - - rgb_to_abc(r, g, b) --> a, b, c - abc_to_rgb(a, b, c) --> r, g, b - -All inputs and outputs are triples of floats in the range [0.0...1.0] -(with the exception of I and Q, which covers a slightly larger range). -Inputs outside the valid range may cause exceptions or invalid outputs. - -Supported color systems: -RGB: Red, Green, Blue components -YIQ: Luminance, Chrominance (used by composite video signals) -HLS: Hue, Luminance, Saturation -HSV: Hue, Saturation, Value -""" - -# References: -# http://en.wikipedia.org/wiki/YIQ -# http://en.wikipedia.org/wiki/HLS_color_space -# http://en.wikipedia.org/wiki/HSV_color_space - -__all__ = ["rgb_to_yiq","yiq_to_rgb","rgb_to_hls","hls_to_rgb", - "rgb_to_hsv","hsv_to_rgb"] - -# Some floating-point constants - -ONE_THIRD = 1.0/3.0 -ONE_SIXTH = 1.0/6.0 -TWO_THIRD = 2.0/3.0 - -# YIQ: used by composite video signals (linear combinations of RGB) -# Y: perceived grey level (0.0 == black, 1.0 == white) -# I, Q: color components -# -# There are a great many versions of the constants used in these formulae. -# The ones in this library uses constants from the FCC version of NTSC. - -def rgb_to_yiq(r, g, b): - y = 0.30*r + 0.59*g + 0.11*b - i = 0.74*(r-y) - 0.27*(b-y) - q = 0.48*(r-y) + 0.41*(b-y) - return (y, i, q) - -def yiq_to_rgb(y, i, q): - # r = y + (0.27*q + 0.41*i) / (0.74*0.41 + 0.27*0.48) - # b = y + (0.74*q - 0.48*i) / (0.74*0.41 + 0.27*0.48) - # g = y - (0.30*(r-y) + 0.11*(b-y)) / 0.59 - - r = y + 0.9468822170900693*i + 0.6235565819861433*q - g = y - 0.27478764629897834*i - 0.6356910791873801*q - b = y - 1.1085450346420322*i + 1.7090069284064666*q - - if r < 0.0: - r = 0.0 - if g < 0.0: - g = 0.0 - if b < 0.0: - b = 0.0 - if r > 1.0: - r = 1.0 - if g > 1.0: - g = 1.0 - if b > 1.0: - b = 1.0 - return (r, g, b) - - -# HLS: Hue, Luminance, Saturation -# H: position in the spectrum -# L: color lightness -# S: color saturation - -def rgb_to_hls(r, g, b): - maxc = max(r, g, b) - minc = min(r, g, b) - sumc = (maxc+minc) - rangec = (maxc-minc) - l = sumc/2.0 - if minc == maxc: - return 0.0, l, 0.0 - if l <= 0.5: - s = rangec / sumc - else: - s = rangec / (2.0-maxc-minc) # Not always 2.0-sumc: gh-106498. - rc = (maxc-r) / rangec - gc = (maxc-g) / rangec - bc = (maxc-b) / rangec - if r == maxc: - h = bc-gc - elif g == maxc: - h = 2.0+rc-bc - else: - h = 4.0+gc-rc - h = (h/6.0) % 1.0 - return h, l, s - -def hls_to_rgb(h, l, s): - if s == 0.0: - return l, l, l - if l <= 0.5: - m2 = l * (1.0+s) - else: - m2 = l+s-(l*s) - m1 = 2.0*l - m2 - return (_v(m1, m2, h+ONE_THIRD), _v(m1, m2, h), _v(m1, m2, h-ONE_THIRD)) - -def _v(m1, m2, hue): - hue = hue % 1.0 - if hue < ONE_SIXTH: - return m1 + (m2-m1)*hue*6.0 - if hue < 0.5: - return m2 - if hue < TWO_THIRD: - return m1 + (m2-m1)*(TWO_THIRD-hue)*6.0 - return m1 - - -# HSV: Hue, Saturation, Value -# H: position in the spectrum -# S: color saturation ("purity") -# V: color brightness - -def rgb_to_hsv(r, g, b): - maxc = max(r, g, b) - minc = min(r, g, b) - rangec = (maxc-minc) - v = maxc - if minc == maxc: - return 0.0, 0.0, v - s = rangec / maxc - rc = (maxc-r) / rangec - gc = (maxc-g) / rangec - bc = (maxc-b) / rangec - if r == maxc: - h = bc-gc - elif g == maxc: - h = 2.0+rc-bc - else: - h = 4.0+gc-rc - h = (h/6.0) % 1.0 - return h, s, v - -def hsv_to_rgb(h, s, v): - if s == 0.0: - return v, v, v - i = int(h*6.0) # XXX assume int() truncates! - f = (h*6.0) - i - p = v*(1.0 - s) - q = v*(1.0 - s*f) - t = v*(1.0 - s*(1.0-f)) - i = i%6 - if i == 0: - return v, t, p - if i == 1: - return q, v, p - if i == 2: - return p, v, t - if i == 3: - return p, q, v - if i == 4: - return t, p, v - if i == 5: - return v, p, q - # Cannot get here diff --git a/Python314_4_x86_Template/Lib/compileall.py b/Python314_4_x86_Template/Lib/compileall.py deleted file mode 100644 index 67fe37045..000000000 --- a/Python314_4_x86_Template/Lib/compileall.py +++ /dev/null @@ -1,472 +0,0 @@ -"""Module/script to byte-compile all .py files to .pyc files. - -When called as a script with arguments, this compiles the directories -given as arguments recursively; the -l option prevents it from -recursing into directories. - -Without arguments, it compiles all modules on sys.path, without -recursing into subdirectories. (Even though it should do so for -packages -- for now, you'll have to deal with packages separately.) - -See module py_compile for details of the actual byte-compilation. -""" -import os -import sys -import importlib.util -import py_compile -import struct -import filecmp - -from functools import partial -from pathlib import Path - -__all__ = ["compile_dir","compile_file","compile_path"] - -def _walk_dir(dir, maxlevels, quiet=0): - if quiet < 2 and isinstance(dir, os.PathLike): - dir = os.fspath(dir) - if not quiet: - print('Listing {!r}...'.format(dir)) - try: - names = os.listdir(dir) - except OSError: - if quiet < 2: - print("Can't list {!r}".format(dir)) - names = [] - names.sort() - for name in names: - if name == '__pycache__': - continue - fullname = os.path.join(dir, name) - if not os.path.isdir(fullname): - yield fullname - elif (maxlevels > 0 and name != os.curdir and name != os.pardir and - os.path.isdir(fullname) and not os.path.islink(fullname)): - yield from _walk_dir(fullname, maxlevels=maxlevels - 1, - quiet=quiet) - -def compile_dir(dir, maxlevels=None, ddir=None, force=False, - rx=None, quiet=0, legacy=False, optimize=-1, workers=1, - invalidation_mode=None, *, stripdir=None, - prependdir=None, limit_sl_dest=None, hardlink_dupes=False): - """Byte-compile all modules in the given directory tree. - - Arguments (only dir is required): - - dir: the directory to byte-compile - maxlevels: maximum recursion level (default `sys.getrecursionlimit()`) - ddir: the directory that will be prepended to the path to the - file as it is compiled into each byte-code file. - force: if True, force compilation, even if timestamps are up-to-date - quiet: full output with False or 0, errors only with 1, - no output with 2 - legacy: if True, produce legacy pyc paths instead of PEP 3147 paths - optimize: int or list of optimization levels or -1 for level of - the interpreter. Multiple levels leads to multiple compiled - files each with one optimization level. - workers: maximum number of parallel workers - invalidation_mode: how the up-to-dateness of the pyc will be checked - stripdir: part of path to left-strip from source file path - prependdir: path to prepend to beginning of original file path, applied - after stripdir - limit_sl_dest: ignore symlinks if they are pointing outside of - the defined path - hardlink_dupes: hardlink duplicated pyc files - """ - ProcessPoolExecutor = None - if ddir is not None and (stripdir is not None or prependdir is not None): - raise ValueError(("Destination dir (ddir) cannot be used " - "in combination with stripdir or prependdir")) - if ddir is not None: - stripdir = dir - prependdir = ddir - ddir = None - if workers < 0: - raise ValueError('workers must be greater or equal to 0') - if workers != 1: - # Check if this is a system where ProcessPoolExecutor can function. - from concurrent.futures.process import _check_system_limits - try: - _check_system_limits() - except NotImplementedError: - workers = 1 - else: - from concurrent.futures import ProcessPoolExecutor - if maxlevels is None: - maxlevels = sys.getrecursionlimit() - files = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels) - success = True - if workers != 1 and ProcessPoolExecutor is not None: - import multiprocessing - if multiprocessing.get_start_method() == 'fork': - mp_context = multiprocessing.get_context('forkserver') - else: - mp_context = None - # If workers == 0, let ProcessPoolExecutor choose - workers = workers or None - with ProcessPoolExecutor(max_workers=workers, - mp_context=mp_context) as executor: - results = executor.map(partial(compile_file, - ddir=ddir, force=force, - rx=rx, quiet=quiet, - legacy=legacy, - optimize=optimize, - invalidation_mode=invalidation_mode, - stripdir=stripdir, - prependdir=prependdir, - limit_sl_dest=limit_sl_dest, - hardlink_dupes=hardlink_dupes), - files, - chunksize=4) - success = min(results, default=True) - else: - for file in files: - if not compile_file(file, ddir, force, rx, quiet, - legacy, optimize, invalidation_mode, - stripdir=stripdir, prependdir=prependdir, - limit_sl_dest=limit_sl_dest, - hardlink_dupes=hardlink_dupes): - success = False - return success - -def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, - legacy=False, optimize=-1, - invalidation_mode=None, *, stripdir=None, prependdir=None, - limit_sl_dest=None, hardlink_dupes=False): - """Byte-compile one file. - - Arguments (only fullname is required): - - fullname: the file to byte-compile - ddir: if given, the directory name compiled in to the - byte-code file. - force: if True, force compilation, even if timestamps are up-to-date - quiet: full output with False or 0, errors only with 1, - no output with 2 - legacy: if True, produce legacy pyc paths instead of PEP 3147 paths - optimize: int or list of optimization levels or -1 for level of - the interpreter. Multiple levels leads to multiple compiled - files each with one optimization level. - invalidation_mode: how the up-to-dateness of the pyc will be checked - stripdir: part of path to left-strip from source file path - prependdir: path to prepend to beginning of original file path, applied - after stripdir - limit_sl_dest: ignore symlinks if they are pointing outside of - the defined path. - hardlink_dupes: hardlink duplicated pyc files - """ - - if ddir is not None and (stripdir is not None or prependdir is not None): - raise ValueError(("Destination dir (ddir) cannot be used " - "in combination with stripdir or prependdir")) - - success = True - fullname = os.fspath(fullname) - stripdir = os.fspath(stripdir) if stripdir is not None else None - name = os.path.basename(fullname) - - dfile = None - - if ddir is not None: - dfile = os.path.join(ddir, name) - - if stripdir is not None: - fullname_parts = fullname.split(os.path.sep) - stripdir_parts = stripdir.split(os.path.sep) - - if stripdir_parts != fullname_parts[:len(stripdir_parts)]: - if quiet < 2: - print("The stripdir path {!r} is not a valid prefix for " - "source path {!r}; ignoring".format(stripdir, fullname)) - else: - dfile = os.path.join(*fullname_parts[len(stripdir_parts):]) - - if prependdir is not None: - if dfile is None: - dfile = os.path.join(prependdir, fullname) - else: - dfile = os.path.join(prependdir, dfile) - - if isinstance(optimize, int): - optimize = [optimize] - - # Use set() to remove duplicates. - # Use sorted() to create pyc files in a deterministic order. - optimize = sorted(set(optimize)) - - if hardlink_dupes and len(optimize) < 2: - raise ValueError("Hardlinking of duplicated bytecode makes sense " - "only for more than one optimization level") - - if rx is not None: - mo = rx.search(fullname) - if mo: - return success - - if limit_sl_dest is not None and os.path.islink(fullname): - if Path(limit_sl_dest).resolve() not in Path(fullname).resolve().parents: - return success - - opt_cfiles = {} - - if os.path.isfile(fullname): - for opt_level in optimize: - if legacy: - opt_cfiles[opt_level] = fullname + 'c' - else: - if opt_level >= 0: - opt = opt_level if opt_level >= 1 else '' - cfile = (importlib.util.cache_from_source( - fullname, optimization=opt)) - opt_cfiles[opt_level] = cfile - else: - cfile = importlib.util.cache_from_source(fullname) - opt_cfiles[opt_level] = cfile - - head, tail = name[:-3], name[-3:] - if tail == '.py': - if not force: - try: - mtime = int(os.stat(fullname).st_mtime) - expect = struct.pack('<4sLL', importlib.util.MAGIC_NUMBER, - 0, mtime & 0xFFFF_FFFF) - for cfile in opt_cfiles.values(): - with open(cfile, 'rb') as chandle: - actual = chandle.read(12) - if expect != actual: - break - else: - return success - except OSError: - pass - if not quiet: - print('Compiling {!r}...'.format(fullname)) - try: - for index, opt_level in enumerate(optimize): - cfile = opt_cfiles[opt_level] - ok = py_compile.compile(fullname, cfile, dfile, True, - optimize=opt_level, - invalidation_mode=invalidation_mode) - if index > 0 and hardlink_dupes: - previous_cfile = opt_cfiles[optimize[index - 1]] - if filecmp.cmp(cfile, previous_cfile, shallow=False): - os.unlink(cfile) - os.link(previous_cfile, cfile) - except py_compile.PyCompileError as err: - success = False - if quiet >= 2: - return success - elif quiet: - print('*** Error compiling {!r}...'.format(fullname)) - else: - print('*** ', end='') - # escape non-printable characters in msg - encoding = sys.stdout.encoding or sys.getdefaultencoding() - msg = err.msg.encode(encoding, errors='backslashreplace').decode(encoding) - print(msg) - except (SyntaxError, UnicodeError, OSError) as e: - success = False - if quiet >= 2: - return success - elif quiet: - print('*** Error compiling {!r}...'.format(fullname)) - else: - print('*** ', end='') - print(e.__class__.__name__ + ':', e) - else: - if ok == 0: - success = False - return success - -def compile_path(skip_curdir=1, maxlevels=0, force=False, quiet=0, - legacy=False, optimize=-1, - invalidation_mode=None): - """Byte-compile all module on sys.path. - - Arguments (all optional): - - skip_curdir: if true, skip current directory (default True) - maxlevels: max recursion level (default 0) - force: as for compile_dir() (default False) - quiet: as for compile_dir() (default 0) - legacy: as for compile_dir() (default False) - optimize: as for compile_dir() (default -1) - invalidation_mode: as for compiler_dir() - """ - success = True - for dir in sys.path: - if (not dir or dir == os.curdir) and skip_curdir: - if quiet < 2: - print('Skipping current directory') - else: - success = success and compile_dir( - dir, - maxlevels, - None, - force, - quiet=quiet, - legacy=legacy, - optimize=optimize, - invalidation_mode=invalidation_mode, - ) - return success - - -def main(): - """Script main program.""" - import argparse - - parser = argparse.ArgumentParser( - description='Utilities to support installing Python libraries.', - color=True, - ) - parser.add_argument('-l', action='store_const', const=0, - default=None, dest='maxlevels', - help="don't recurse into subdirectories") - parser.add_argument('-r', type=int, dest='recursion', - help=('control the maximum recursion level. ' - 'if `-l` and `-r` options are specified, ' - 'then `-r` takes precedence.')) - parser.add_argument('-f', action='store_true', dest='force', - help='force rebuild even if timestamps are up to date') - parser.add_argument('-q', action='count', dest='quiet', default=0, - help='output only error messages; -qq will suppress ' - 'the error messages as well.') - parser.add_argument('-b', action='store_true', dest='legacy', - help='use legacy (pre-PEP3147) compiled file locations') - parser.add_argument('-d', metavar='DESTDIR', dest='ddir', default=None, - help=('directory to prepend to file paths for use in ' - 'compile-time tracebacks and in runtime ' - 'tracebacks in cases where the source file is ' - 'unavailable')) - parser.add_argument('-s', metavar='STRIPDIR', dest='stripdir', - default=None, - help=('part of path to left-strip from path ' - 'to source file - for example buildroot. ' - '`-d` and `-s` options cannot be ' - 'specified together.')) - parser.add_argument('-p', metavar='PREPENDDIR', dest='prependdir', - default=None, - help=('path to add as prefix to path ' - 'to source file - for example / to make ' - 'it absolute when some part is removed ' - 'by `-s` option. ' - '`-d` and `-p` options cannot be ' - 'specified together.')) - parser.add_argument('-x', metavar='REGEXP', dest='rx', default=None, - help=('skip files matching the regular expression; ' - 'the regexp is searched for in the full path ' - 'of each file considered for compilation')) - parser.add_argument('-i', metavar='FILE', dest='flist', - help=('add all the files and directories listed in ' - 'FILE to the list considered for compilation; ' - 'if "-", names are read from stdin')) - parser.add_argument('compile_dest', metavar='FILE|DIR', nargs='*', - help=('zero or more file and directory names ' - 'to compile; if no arguments given, defaults ' - 'to the equivalent of -l sys.path')) - parser.add_argument('-j', '--workers', default=1, - type=int, help='Run compileall concurrently') - invalidation_modes = [mode.name.lower().replace('_', '-') - for mode in py_compile.PycInvalidationMode] - parser.add_argument('--invalidation-mode', - choices=sorted(invalidation_modes), - help=('set .pyc invalidation mode; defaults to ' - '"checked-hash" if the SOURCE_DATE_EPOCH ' - 'environment variable is set, and ' - '"timestamp" otherwise.')) - parser.add_argument('-o', action='append', type=int, dest='opt_levels', - help=('Optimization levels to run compilation with. ' - 'Default is -1 which uses the optimization level ' - 'of the Python interpreter itself (see -O).')) - parser.add_argument('-e', metavar='DIR', dest='limit_sl_dest', - help='Ignore symlinks pointing outsite of the DIR') - parser.add_argument('--hardlink-dupes', action='store_true', - dest='hardlink_dupes', - help='Hardlink duplicated pyc files') - - args = parser.parse_args() - compile_dests = args.compile_dest - - if args.rx: - import re - args.rx = re.compile(args.rx) - - if args.limit_sl_dest == "": - args.limit_sl_dest = None - - if args.recursion is not None: - maxlevels = args.recursion - else: - maxlevels = args.maxlevels - - if args.opt_levels is None: - args.opt_levels = [-1] - - if len(args.opt_levels) == 1 and args.hardlink_dupes: - parser.error(("Hardlinking of duplicated bytecode makes sense " - "only for more than one optimization level.")) - - if args.ddir is not None and ( - args.stripdir is not None or args.prependdir is not None - ): - parser.error("-d cannot be used in combination with -s or -p") - - # if flist is provided then load it - if args.flist: - try: - with (sys.stdin if args.flist=='-' else - open(args.flist, encoding="utf-8")) as f: - for line in f: - compile_dests.append(line.strip()) - except OSError: - if args.quiet < 2: - print("Error reading file list {}".format(args.flist)) - return False - - if args.invalidation_mode: - ivl_mode = args.invalidation_mode.replace('-', '_').upper() - invalidation_mode = py_compile.PycInvalidationMode[ivl_mode] - else: - invalidation_mode = None - - success = True - try: - if compile_dests: - for dest in compile_dests: - if os.path.isfile(dest): - if not compile_file(dest, args.ddir, args.force, args.rx, - args.quiet, args.legacy, - invalidation_mode=invalidation_mode, - stripdir=args.stripdir, - prependdir=args.prependdir, - optimize=args.opt_levels, - limit_sl_dest=args.limit_sl_dest, - hardlink_dupes=args.hardlink_dupes): - success = False - else: - if not compile_dir(dest, maxlevels, args.ddir, - args.force, args.rx, args.quiet, - args.legacy, workers=args.workers, - invalidation_mode=invalidation_mode, - stripdir=args.stripdir, - prependdir=args.prependdir, - optimize=args.opt_levels, - limit_sl_dest=args.limit_sl_dest, - hardlink_dupes=args.hardlink_dupes): - success = False - return success - else: - return compile_path(legacy=args.legacy, force=args.force, - quiet=args.quiet, - invalidation_mode=invalidation_mode) - except KeyboardInterrupt: - if args.quiet < 2: - print("\n[interrupted]") - return False - return True - - -if __name__ == '__main__': - exit_status = int(not main()) - sys.exit(exit_status) diff --git a/Python314_4_x86_Template/Lib/compression/__init__.py b/Python314_4_x86_Template/Lib/compression/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/compression/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/compression/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 6abf3f7464706356eb987bc0ddc4dfe35833722d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmdPq<K<!if)3WJnIQTxh=2h`DC095kkP;p#GuTe$>_I|p@<2{{|u76RqSjP6Iz^F zR2-9-l3HYFX=xBso?nz5Q&5zjm6}{q9Fv@rUz(DXSe&YxnU`4tB#KKCb8=FPbPZzy zDoZl*^NbBm;!WZ!EX?9VQgaJ(5=&C!OL7Zhd@_?_lJj#5ic*V<GxPIe;^RU3<Ky)T iDsOSv<mRW8=A_ycu>#!ya%C}y@rjv{k+Fyw$N~T>;5woJ diff --git a/Python314_4_x86_Template/Lib/compression/_common/__init__.py b/Python314_4_x86_Template/Lib/compression/_common/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/compression/_common/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/compression/_common/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index c0ee4e63bde451c6574fff67473a252663c1d0bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmdPq<K<!if)3WJnIQTxh=2h`DC095kkP;p#GuTe$>_I|p@<2{{|u76RqbpQ6Iz^F zR2-9-l3HYFX=xBso?nz5Q&5zjm6}{q9Fv@rUz(DXSe&YxnU`4tB#KKCb8=FPbPZzy zDoZl*^NbBm;!WZ!EX?9VQgaJ(5=&C!OL7Zhd@_?_lJj#5ic*V<GxPIe;(?r85FHOP mCq7=Upz;=nO>TZlX-=wL5i8IwAlDXy7@wFK85xV1fh+)1V?FKw diff --git a/Python314_4_x86_Template/Lib/compression/_common/__pycache__/_streams.cpython-314.pyc b/Python314_4_x86_Template/Lib/compression/_common/__pycache__/_streams.cpython-314.pyc deleted file mode 100644 index ab1feb29361aeb91fa38daf70bc7db68ced40a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7875 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 J1oL!){{fit=ve>& diff --git a/Python314_4_x86_Template/Lib/compression/_common/_streams.py b/Python314_4_x86_Template/Lib/compression/_common/_streams.py deleted file mode 100644 index 9f367d4e3..000000000 --- a/Python314_4_x86_Template/Lib/compression/_common/_streams.py +++ /dev/null @@ -1,162 +0,0 @@ -"""Internal classes used by compression modules""" - -import io -import sys - -BUFFER_SIZE = io.DEFAULT_BUFFER_SIZE # Compressed data read chunk size - - -class BaseStream(io.BufferedIOBase): - """Mode-checking helper functions.""" - - def _check_not_closed(self): - if self.closed: - raise ValueError("I/O operation on closed file") - - def _check_can_read(self): - if not self.readable(): - raise io.UnsupportedOperation("File not open for reading") - - def _check_can_write(self): - if not self.writable(): - raise io.UnsupportedOperation("File not open for writing") - - def _check_can_seek(self): - if not self.readable(): - raise io.UnsupportedOperation("Seeking is only supported " - "on files open for reading") - if not self.seekable(): - raise io.UnsupportedOperation("The underlying file object " - "does not support seeking") - - -class DecompressReader(io.RawIOBase): - """Adapts the decompressor API to a RawIOBase reader API""" - - def readable(self): - return True - - def __init__(self, fp, decomp_factory, trailing_error=(), **decomp_args): - self._fp = fp - self._eof = False - self._pos = 0 # Current offset in decompressed stream - - # Set to size of decompressed stream once it is known, for SEEK_END - self._size = -1 - - # Save the decompressor factory and arguments. - # If the file contains multiple compressed streams, each - # stream will need a separate decompressor object. A new decompressor - # object is also needed when implementing a backwards seek(). - self._decomp_factory = decomp_factory - self._decomp_args = decomp_args - self._decompressor = self._decomp_factory(**self._decomp_args) - - # Exception class to catch from decompressor signifying invalid - # trailing data to ignore - self._trailing_error = trailing_error - - def close(self): - self._decompressor = None - return super().close() - - def seekable(self): - return self._fp.seekable() - - def readinto(self, b): - with memoryview(b) as view, view.cast("B") as byte_view: - data = self.read(len(byte_view)) - byte_view[:len(data)] = data - return len(data) - - def read(self, size=-1): - if size < 0: - return self.readall() - - if not size or self._eof: - return b"" - data = None # Default if EOF is encountered - # Depending on the input data, our call to the decompressor may not - # return any data. In this case, try again after reading another block. - while True: - if self._decompressor.eof: - rawblock = (self._decompressor.unused_data or - self._fp.read(BUFFER_SIZE)) - if not rawblock: - break - # Continue to next stream. - self._decompressor = self._decomp_factory( - **self._decomp_args) - try: - data = self._decompressor.decompress(rawblock, size) - except self._trailing_error: - # Trailing data isn't a valid compressed stream; ignore it. - break - else: - if self._decompressor.needs_input: - rawblock = self._fp.read(BUFFER_SIZE) - if not rawblock: - raise EOFError("Compressed file ended before the " - "end-of-stream marker was reached") - else: - rawblock = b"" - data = self._decompressor.decompress(rawblock, size) - if data: - break - if not data: - self._eof = True - self._size = self._pos - return b"" - self._pos += len(data) - return data - - def readall(self): - chunks = [] - # sys.maxsize means the max length of output buffer is unlimited, - # so that the whole input buffer can be decompressed within one - # .decompress() call. - while data := self.read(sys.maxsize): - chunks.append(data) - - return b"".join(chunks) - - # Rewind the file to the beginning of the data stream. - def _rewind(self): - self._fp.seek(0) - self._eof = False - self._pos = 0 - self._decompressor = self._decomp_factory(**self._decomp_args) - - def seek(self, offset, whence=io.SEEK_SET): - # Recalculate offset as an absolute file position. - if whence == io.SEEK_SET: - pass - elif whence == io.SEEK_CUR: - offset = self._pos + offset - elif whence == io.SEEK_END: - # Seeking relative to EOF - we need to know the file's size. - if self._size < 0: - while self.read(io.DEFAULT_BUFFER_SIZE): - pass - offset = self._size + offset - else: - raise ValueError("Invalid value for whence: {}".format(whence)) - - # Make it so that offset is the number of bytes to skip forward. - if offset < self._pos: - self._rewind() - else: - offset -= self._pos - - # Read and discard data until we reach the desired position. - while offset > 0: - data = self.read(min(io.DEFAULT_BUFFER_SIZE, offset)) - if not data: - break - offset -= len(data) - - return self._pos - - def tell(self): - """Return the current file position.""" - return self._pos diff --git a/Python314_4_x86_Template/Lib/compression/bz2.py b/Python314_4_x86_Template/Lib/compression/bz2.py deleted file mode 100644 index 16815d6cd..000000000 --- a/Python314_4_x86_Template/Lib/compression/bz2.py +++ /dev/null @@ -1,5 +0,0 @@ -import bz2 -__doc__ = bz2.__doc__ -del bz2 - -from bz2 import * diff --git a/Python314_4_x86_Template/Lib/compression/gzip.py b/Python314_4_x86_Template/Lib/compression/gzip.py deleted file mode 100644 index 552f48f94..000000000 --- a/Python314_4_x86_Template/Lib/compression/gzip.py +++ /dev/null @@ -1,5 +0,0 @@ -import gzip -__doc__ = gzip.__doc__ -del gzip - -from gzip import * diff --git a/Python314_4_x86_Template/Lib/compression/lzma.py b/Python314_4_x86_Template/Lib/compression/lzma.py deleted file mode 100644 index b4bc7ccb1..000000000 --- a/Python314_4_x86_Template/Lib/compression/lzma.py +++ /dev/null @@ -1,5 +0,0 @@ -import lzma -__doc__ = lzma.__doc__ -del lzma - -from lzma import * diff --git a/Python314_4_x86_Template/Lib/compression/zlib.py b/Python314_4_x86_Template/Lib/compression/zlib.py deleted file mode 100644 index 3aa7e2db9..000000000 --- a/Python314_4_x86_Template/Lib/compression/zlib.py +++ /dev/null @@ -1,5 +0,0 @@ -import zlib -__doc__ = zlib.__doc__ -del zlib - -from zlib import * diff --git a/Python314_4_x86_Template/Lib/compression/zstd/__init__.py b/Python314_4_x86_Template/Lib/compression/zstd/__init__.py deleted file mode 100644 index 84b25914b..000000000 --- a/Python314_4_x86_Template/Lib/compression/zstd/__init__.py +++ /dev/null @@ -1,242 +0,0 @@ -"""Python bindings to the Zstandard (zstd) compression library (RFC-8878).""" - -__all__ = ( - # compression.zstd - 'COMPRESSION_LEVEL_DEFAULT', - 'compress', - 'CompressionParameter', - 'decompress', - 'DecompressionParameter', - 'finalize_dict', - 'get_frame_info', - 'Strategy', - 'train_dict', - - # compression.zstd._zstdfile - 'open', - 'ZstdFile', - - # _zstd - 'get_frame_size', - 'zstd_version', - 'zstd_version_info', - 'ZstdCompressor', - 'ZstdDecompressor', - 'ZstdDict', - 'ZstdError', -) - -import _zstd -import enum -from _zstd import (ZstdCompressor, ZstdDecompressor, ZstdDict, ZstdError, - get_frame_size, zstd_version) -from compression.zstd._zstdfile import ZstdFile, open, _nbytes - -# zstd_version_number is (MAJOR * 100 * 100 + MINOR * 100 + RELEASE) -zstd_version_info = (*divmod(_zstd.zstd_version_number // 100, 100), - _zstd.zstd_version_number % 100) -"""Version number of the runtime zstd library as a tuple of integers.""" - -COMPRESSION_LEVEL_DEFAULT = _zstd.ZSTD_CLEVEL_DEFAULT -"""The default compression level for Zstandard, currently '3'.""" - - -class FrameInfo: - """Information about a Zstandard frame.""" - - __slots__ = 'decompressed_size', 'dictionary_id' - - def __init__(self, decompressed_size, dictionary_id): - super().__setattr__('decompressed_size', decompressed_size) - super().__setattr__('dictionary_id', dictionary_id) - - def __repr__(self): - return (f'FrameInfo(decompressed_size={self.decompressed_size}, ' - f'dictionary_id={self.dictionary_id})') - - def __setattr__(self, name, _): - raise AttributeError(f"can't set attribute {name!r}") - - -def get_frame_info(frame_buffer): - """Get Zstandard frame information from a frame header. - - *frame_buffer* is a bytes-like object. It should start from the beginning - of a frame, and needs to include at least the frame header (6 to 18 bytes). - - The returned FrameInfo object has two attributes. - 'decompressed_size' is the size in bytes of the data in the frame when - decompressed, or None when the decompressed size is unknown. - 'dictionary_id' is an int in the range (0, 2**32). The special value 0 - means that the dictionary ID was not recorded in the frame header, - the frame may or may not need a dictionary to be decoded, - and the ID of such a dictionary is not specified. - """ - return FrameInfo(*_zstd.get_frame_info(frame_buffer)) - - -def train_dict(samples, dict_size): - """Return a ZstdDict representing a trained Zstandard dictionary. - - *samples* is an iterable of samples, where a sample is a bytes-like - object representing a file. - - *dict_size* is the dictionary's maximum size, in bytes. - """ - if not isinstance(dict_size, int): - ds_cls = type(dict_size).__qualname__ - raise TypeError(f'dict_size must be an int object, not {ds_cls!r}.') - - samples = tuple(samples) - chunks = b''.join(samples) - chunk_sizes = tuple(_nbytes(sample) for sample in samples) - if not chunks: - raise ValueError("samples contained no data; can't train dictionary.") - dict_content = _zstd.train_dict(chunks, chunk_sizes, dict_size) - return ZstdDict(dict_content) - - -def finalize_dict(zstd_dict, /, samples, dict_size, level): - """Return a ZstdDict representing a finalized Zstandard dictionary. - - Given a custom content as a basis for dictionary, and a set of samples, - finalize *zstd_dict* by adding headers and statistics according to the - Zstandard dictionary format. - - You may compose an effective dictionary content by hand, which is used as - basis dictionary, and use some samples to finalize a dictionary. The basis - dictionary may be a "raw content" dictionary. See *is_raw* in ZstdDict. - - *samples* is an iterable of samples, where a sample is a bytes-like object - representing a file. - *dict_size* is the dictionary's maximum size, in bytes. - *level* is the expected compression level. The statistics for each - compression level differ, so tuning the dictionary to the compression level - can provide improvements. - """ - - if not isinstance(zstd_dict, ZstdDict): - raise TypeError('zstd_dict argument should be a ZstdDict object.') - if not isinstance(dict_size, int): - raise TypeError('dict_size argument should be an int object.') - if not isinstance(level, int): - raise TypeError('level argument should be an int object.') - - samples = tuple(samples) - chunks = b''.join(samples) - chunk_sizes = tuple(_nbytes(sample) for sample in samples) - if not chunks: - raise ValueError("The samples are empty content, can't finalize the " - "dictionary.") - dict_content = _zstd.finalize_dict(zstd_dict.dict_content, chunks, - chunk_sizes, dict_size, level) - return ZstdDict(dict_content) - - -def compress(data, level=None, options=None, zstd_dict=None): - """Return Zstandard compressed *data* as bytes. - - *level* is an int specifying the compression level to use, defaulting to - COMPRESSION_LEVEL_DEFAULT ('3'). - *options* is a dict object that contains advanced compression - parameters. See CompressionParameter for more on options. - *zstd_dict* is a ZstdDict object, a pre-trained Zstandard dictionary. See - the function train_dict for how to train a ZstdDict on sample data. - - For incremental compression, use a ZstdCompressor instead. - """ - comp = ZstdCompressor(level=level, options=options, zstd_dict=zstd_dict) - return comp.compress(data, mode=ZstdCompressor.FLUSH_FRAME) - - -def decompress(data, zstd_dict=None, options=None): - """Decompress one or more frames of Zstandard compressed *data*. - - *zstd_dict* is a ZstdDict object, a pre-trained Zstandard dictionary. See - the function train_dict for how to train a ZstdDict on sample data. - *options* is a dict object that contains advanced compression - parameters. See DecompressionParameter for more on options. - - For incremental decompression, use a ZstdDecompressor instead. - """ - results = [] - while True: - decomp = ZstdDecompressor(options=options, zstd_dict=zstd_dict) - results.append(decomp.decompress(data)) - if not decomp.eof: - raise ZstdError('Compressed data ended before the ' - 'end-of-stream marker was reached') - data = decomp.unused_data - if not data: - break - return b''.join(results) - - -class CompressionParameter(enum.IntEnum): - """Compression parameters.""" - - compression_level = _zstd.ZSTD_c_compressionLevel - window_log = _zstd.ZSTD_c_windowLog - hash_log = _zstd.ZSTD_c_hashLog - chain_log = _zstd.ZSTD_c_chainLog - search_log = _zstd.ZSTD_c_searchLog - min_match = _zstd.ZSTD_c_minMatch - target_length = _zstd.ZSTD_c_targetLength - strategy = _zstd.ZSTD_c_strategy - - enable_long_distance_matching = _zstd.ZSTD_c_enableLongDistanceMatching - ldm_hash_log = _zstd.ZSTD_c_ldmHashLog - ldm_min_match = _zstd.ZSTD_c_ldmMinMatch - ldm_bucket_size_log = _zstd.ZSTD_c_ldmBucketSizeLog - ldm_hash_rate_log = _zstd.ZSTD_c_ldmHashRateLog - - content_size_flag = _zstd.ZSTD_c_contentSizeFlag - checksum_flag = _zstd.ZSTD_c_checksumFlag - dict_id_flag = _zstd.ZSTD_c_dictIDFlag - - nb_workers = _zstd.ZSTD_c_nbWorkers - job_size = _zstd.ZSTD_c_jobSize - overlap_log = _zstd.ZSTD_c_overlapLog - - def bounds(self): - """Return the (lower, upper) int bounds of a compression parameter. - - Both the lower and upper bounds are inclusive. - """ - return _zstd.get_param_bounds(self.value, is_compress=True) - - -class DecompressionParameter(enum.IntEnum): - """Decompression parameters.""" - - window_log_max = _zstd.ZSTD_d_windowLogMax - - def bounds(self): - """Return the (lower, upper) int bounds of a decompression parameter. - - Both the lower and upper bounds are inclusive. - """ - return _zstd.get_param_bounds(self.value, is_compress=False) - - -class Strategy(enum.IntEnum): - """Compression strategies, listed from fastest to strongest. - - Note that new strategies might be added in the future. - Only the order (from fast to strong) is guaranteed, - the numeric value might change. - """ - - fast = _zstd.ZSTD_fast - dfast = _zstd.ZSTD_dfast - greedy = _zstd.ZSTD_greedy - lazy = _zstd.ZSTD_lazy - lazy2 = _zstd.ZSTD_lazy2 - btlazy2 = _zstd.ZSTD_btlazy2 - btopt = _zstd.ZSTD_btopt - btultra = _zstd.ZSTD_btultra - btultra2 = _zstd.ZSTD_btultra2 - - -# Check validity of the CompressionParameter & DecompressionParameter types -_zstd.set_parameter_types(CompressionParameter, DecompressionParameter) diff --git a/Python314_4_x86_Template/Lib/compression/zstd/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/compression/zstd/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 814b308cc1cac62742e72377cce086753a80b789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11793 zcmds7TWlLwdY<7;6e*FSE|x4y(MYx>QIY7IY%7T+-y~VGWksbOB@N_oN90JNO%1s- zL)#J-C{Yw$8-1|1U9?_cfuz6!wb2DOi=u%0whu+ozLAy_DznDMKm!!*lViEa?pweA z%!MObj@$0GC^`TS&-~{<=ltiK|9<ApP<?>IbIbc#I=YwR{+V8^$7@!$e#&!Pfs1n* z7msNCM_k-9?b2NA->tdv@11r{c{I<ISMyH!G~ZN>Rx{<-{8P1BZ5M}j-*jLqs0F9$ zw7RK!t-gzkaaTg!+!fc{8`fl%|Bq6GF6Y~@`SvdVN_<}hf0jS$(;D{B*gX}fRnr>x za4lRn7q4mM;(lvnttnpH%4yB<0Lqql5aq6TW4x}F%kWxjyeVGKYHh4%2tD~L?zzL( zn3exww^7&H8D<!muGe7hVVDiTbiW3(11oyFGM81uF1BCUW38kMXS0`!Hm{$XThmsu zvapzzQ)ziw6|}6Ntw_R$swT=QQAr8?>#CND3d!thPLWhK4dhIEQ4y6jp+7!(c4%be z_((LSH=nH_%!!J)Dru6U?;4jJ9V>AEB~1}EX?bln>eEA*EM;}iDtZIGS2_aXXOMJK z(`%_Vp(p@`mL)B*L^CDS^tz<it)nS%T~dg~sN3i?na)VMC!3RGy(S?qu4$5*w6=u) zEe_h6#EZy@e1W^dX*_t?_0gc_-o<74IInr)KFvGN9pU3HoUmW>#oajjnz#q0Kkn6P z=XotK&%MKILF{UcUOP!-P0LH!^?g(-tD;65CoX35njkuMm(d?fnhe1x^Pt4Le`^Yr z6Ch}TfvLFUp69*;af@^FeB~&2Xy@l$mG-y`M7i}y%03GzWo%h}3VRB|aF~g7YBuW9 zy=p#(a|<RCs-%gUrX&(kkM2>W%#soT1xh0dy*80ZW<*s57E#;V+gs3Yo_%}aJr%pZ zAf_bc&|7aET)2@{t}W!0>{ThLsSC+WHlJD)RcR<Kr!^E{u}nr%h7K(lOnBtbaAG)d zbL3d!vb37ZfIkx2YHndBy}00Dq6IqUg+zh|NhD&qHQjH$=#BQi$1K<((5LQ2@#_Nj z#9x2ArsUsK>^M+7bmp=DtOdCD?)@vD``_6D8kd9;vma7z>?}^8LaJ?^o3k4$l{$zz zS}bO&G;nBf9rn`xuXotQ^}loyqw5WW!nVU0)%oZHS7py1@Jb8DRf)P@r4=QuTaj`& zq3!E7U`Gi#hN8f2HpcF2<pUF?0~5vA<TH*x$9Hdb?=N>BDRmzy3d5hCe&*&Q$I(zb zqO_yS&g>|#!4~Z8Atrp=RmUB64V$nPKFY5*Cq=nW6Tm(K@lSd&uSr6b*F&eRHzvMO zH(QVHks&EMpHN8zz({OqN;6*c7JI{Rnl?MWg(j7@0_Pd(D0UtBbo}Qd#m*BOq0yp$ zl+piyQ#yeVt)nfX@v%jLL}E3Y%4euvmq>g!FJ{b^a3ZmkR#YvMmL)lh=9)wzl}(}o zHdixQ4Q#HoVLYXa3WGGXKs?gPguO;!=@C;d=p>U;CIe8t2{K-zE@c-6v7v;Bp@?x# zoidglrb(z6#82%;@tf~stzURzPaB2{)Bo;qc~3m|ySyXc_<8Txa}EVtH0!ey^Ln-n z=B=FEg3YLN9*kf0bc4yQ6Yb_a9GI6E*U;r0juh(Gv<pmg32BFRTT-&Cf+!dbD-x-J zSRgRK-V=-Yr6oxj5Yj48m>wR=q_0Urc9FD0Oqd4CtYq_<lz<r&4WnQ%vP6s0a$1&Q zn*!M-YxF?@L<q7ZrI^7=%gIbWC4t|Bj3lZW>*pjx=s!k=?a+uZa};D<#?XqS<rP^< z36qw(HpvlIL=1c*Tj5|e7U+9PYWrw4L?hWBY=tqp06Gbn5;c*4R5ysZu_DO<=O}|h zRuN{ivLsNG(aWKv&2d#BFJF_hH)Nv0sj%7nqKrv2Ya&IImnEV9;Gl4LVBpB%XiT7m zsyQi{7Bj+iF_V{sgMn2^l!<a|7^Bo4RG1zYZeZ<lR>STjvq}oPvuzE=xef*@t6CM; zXc_cJ-RM+sP8C9F=NGXZ7!IQi2I%OhH>Sc)srlr}c6971jl*bON=vC&0J?$%LiZ*} z_d5+gu^)6xos-8LDpEOuZmbwZMJ3%<;9hiabuB-X%DV<0?Hag$Vq@1xDfm{=^Om9d zY|#L&sr@}$3KSgdu&w&$`HBcxcD4^4=vnUNxDIZC`mzU>+Uz&ya6hfqoNJ-hs>6o3 zNTI@FxUD`b{6f%buZU$1Zs1(K1+V-&Fx(5wVW+lt_}_D#=TcBy9UQsT<hIOn4cxHV zanj9kv#txExR!f^JL<bw568C($D$|anRnYOtz#>tqhU|nYhi)v1`9ez9z)gB&AmU2 zeZjo+<h%={&)G9?j{&vgTmK@?L=+4H#giHbpMovP50zvMDgki#k<i;IhhnO59%&y{ zgexJbhT?&!z$+COGtfI=J)>!mginF?FagynDqyIn>WP=&S<(bF9rLEx6x+qAPlZ_A zOt0ownJ5pEC^6j^3#{+AI|{3L=q!kcDayutgG>r^K4$Qx&3o7;Qrg7XTO%lXaHa+B zGB=4G&+$$kwNB$ESMYXm7jO=AzHun@qwX~SfS-j=K}__(rMqGWb)UH(BmupG;bPRD zSe9hzW=<K?JK0Vri0ashOg1TI)UlY|Og`uqnYMogF~!!gpD*8^{Bg}EzK_HA!hf^; zn=K;w58K-L^~2^Y2q<LDI667YbmcpO;W@B*9Qq>`4eEik%KSw+Dd}#gJKdwL!B351 zRK4~xszylQ)$%xO-E%dYmi53qX*<@SP!OgEDl1TG06^$bV^X8n+NYuWQYyS#Rre)V zpm$Y0$o|<8t9l*7Big}%DhYINuYkv}-Q=+=RLtV1{y7S$n+C3K*WL6_n##fbkAnN3 zL|X2q|E#MV87f7FZuy>sT8r%`f8qPP^?!^M+b(Q`W{UoquR=|C&;5y9IJa5faOZ>D zAKYEusDGm{`DJ745BHa7Z#P=U{$l?R?D|IISmDB#!N`+PTXFZrjnHh-Kl`Mqt=zQt zQPbW}CLiwJXgXV%c@k{8JF^k&E_%8RmZCGU*oyW8;^^7Z0okVNxNlK)h61ovUEEf6 zPyp7*+`MbSR(vlh%jyvvzNBLW_kUpor|Ps-Yefm?__$}zR;gIE`8Y5<3w{gwlIrwA zb@H!KomDuN80Nh5o+{O8tMItb!otpltl8&mC2B!9<RlPi?4VNTJ@3co-NWWt<a`S_ zP2-uj$A(I+5kqKrtyW!1%VGvj%`5flx%727ETWKv>Vl(Y3WNaH0p6Xc!iFR2bqKNH zu|dVchjggkfHjdYK&G8(mjS3qK}=CPLNL4y3<{rtIov9IZoDSRH6a8eT@k3br6iw5 zL`xJP?uL&3{cN7OClp0yRi<Ypc%wkP4!@+*!CD38U%`xI7}D@gu$a6`PK_EcmR9Lv zEDNoInq5U<SQMhlUYOGrGQ2T1NT4zZqm9(R(4&Yqti9}UP!<y|Ns=&-Rue#gosn&G z_`5N2rrR5+vaN=R`|nz~fsAxr%Gg#BRs=haZFI!)aMyui`lu978OKYkBZ<kCz)Psu z6AB{+vE71}r>LOXfi)Q7<w*iCE&_59*V70T(#U0HuS=_>!(oaK*t{o*%5t8-RxrYj z#r8eSU}gPHIy`0(cI;qy<Q8%tTjc8z|A*|nLQaB0QL{p6K^AM8=3ODLShrdARkr;P zsP9QCPN7&Iy-X2>$>|~-CnRgMHH&QrO)GBm|8|ck77Zw;X(%!{$~YBgsF<K)l8SRw zFne8Zjll?0$fi<m%|0w;no!T9(7kMrl^FtDq=Fe>nxh9f1=~Kysfmgte(K+&fPL;Y z>~mW=IPfSqKnA&OdLwkc=s*7?2wQC%Zfcm=2u&9Klhh#n_)<C8{V3SYdYs+}ohkay z{1%oQ>6iAtEshWOQzEASE3)6ckD7WvSu6LAmik5?Uf=9H{4l@e=9?$^!pv7YS#vCi zJ!Eg)WX(T9#c9poZ=83>`QvD#2hO}_&a4{{qnvl79CykP#9hbDFo_adBDoBvMXBgv zOLQUd0~84lkZmx1-+)6km_Dx&?X6h?ZS|(4sUbd)Yp7Wy$)qJQpJC3wmJOVJ_u^c9 z;?kw*cV`nb6Y~=@iSdca)9=k(7W(^+^dZh4$mYl#nEpRgsaA~7!e7%1g-J<W7vWuQ zQ%`}MmB>~N4SaTo95*v`t69haXf<cUyf&8_k%z6Y&Dmi%ppB%VZw+5a>l=Y~US?L! zh<2DbuxVGaH<$&a7zhJa^ptGHGPL!u5tGoU$dV{b<slK^*xy0gSF^LVK8CGoNa3*H z`!d)<uQAuAT*4b-ZV%FF5+ZZ*ICQ@?pdOr@dGFFxVlsaE;zZP|dx!vq22kdypw7C7 zuvO{^;k0zo2h>c(E&NpS>>-<NTwVJo-d{u?2WJZ7o5Ap%(c7c<ntw7|-Zxg-H+E}u zBY3jtIcaE4CnM9?c=v4m8yhFa<=lH5@%#JT5CW5hDWcs`2t0E%O4U<|uq}tJi-Qo^ z4sHd#%GI-7(YV9KMNd0Quk_5p#j|>+u!;`u!gn}s&nsg7%eKP{Vf2XKhcJ%YIVA8T z_!7w(;!l<&QOW)K7BMA<;{O!y{%$3>vNg~O_I=dOGW?R%R8n{7?3A0zsM{pRRpI&d z)0S*O#jwnvBvWo}QG&B0F((Fqq3qI-swtAV3ZGE9CMhf#hxg=)lww>Stx<^Abf1{R zomNVBq!V?wlwDFNbkT!(nLO466F#!4QLpkL{+ReNqVyUhQJ_Z=<{GQA#L)_6$#N)E z+`~`JpeS(9nz?WUQE4FbB+`Aq?{VbZE#Ia;d?$1}boY9>wZGKbf4_O7HTKwlU^Cou zXZ_Clt@S63dtlExPr|Y_o#IigKgB-{x0J)(rEvEx&zIq*+uCMbWHT7LGje<6?zxR% zN72(^NHiw3A1j>PdXAb1V(e?WpRsE?+`wp_E8aN-l+}+`1NaW1lvWEkvSQVb76iPl z8p?56J>VTXz{7wGJHR7=@7n?11bF`r@D{)acYwD7esBl)ZosW1o}*dY1NevoU{<wG z!09fa>e0FYKUD?9tJV$p_zv*BfKTlJ-w!ysU{#OS2l!kS5U*Mka54>5kM<^AvucBJ zw>C7-X)$(H?Nvx$ueVxaM4o}eJnwYzQO7QIo%g3Z-O#as+EYaWUgNmzwQK~rIqTmw zeH?OV`!m@a6o%v>g-R5r75TetUdD9<v@4?Gil0y+5}Nf)R$F1R&bqUxmW^O_CU2Tu zW~hivV}Z*Lcs+=q&l>K5+i;8<=;oU(K4HwNds${*p|2zy>2KX<Ht%ulnyvI=M&mzG zpFJpGZUbBcBy<0x@cvIye|7aQuRcsY4xcUh&oXgTdVw?>J)n?nQiy+9{!JO6+M84` zuf6rdOP9wJNt<XK)C@&=dc;}=APMHw;ilify@9U}vNvY3%X+}5CNijp%vM~+tWcYu zDy$`J&9MT<hni}WRAX({n5rZyN!Bl5RJZk9P0JTWExDrCqLx6K0M#aQR5&cy;2B9? z)>ia-;|&C}S8HZyY4-hs?zd~*W_L-Z1oKQ*ULHq0OHL)539hZ)X|#b7c^O`u(Q3?2 z%@K2iOloz?Tyq`j347g*6@-h{0_q8)vIuMY0X>sXUX!#-NaN5JH4)w-1F^`JZAVLG zK$<a*H4$#ao|RU~Fn5`lW{!kLoy>?pH37z$O9Zm^5k@O{P0g<|yn5>`!EmglQXoA& z&M=JBYC2^gSjQ+YzK^d6@L7Q#kQWp5MFG_<*0`EoBuaEYDvSbq4-wug88Jtz37U0U zhjNt|b%=@>3S_`Zu`-!4?_WvHFkSOAY9Rmd*T(&8_tUn{a@)~T+tH$@Wizs?9O)}X z`U>Ya!_DRJ-copPVQLfN)3CqPu)i?vL~uZxcbA)oO3g!si>%weQg~ls>gm2{dEbT7 zz6(grZc^MgP-+?|%xn_!V5xZ!$n9O__T#1Y<3&&FCXsQZ)OG}9Fp`E#ZNo&8W9-Tx zPj@D?v9;V7Ej3097rya$z2h*<RDO%uJ%f$dW_C-jH@i%Y`=Q2bp~eHI8Yee>eRsuU z`rlXN>VIC5Z}a$m8&y83NLaVBOhuKJW-O_9ZrhP+CH*=2y;4a_kHh0d|F~002VbM4 z4G~QxY{h#~ys3vOx)(a>W|gQYe@Zlv8)ga$9i&1<i5lqJ2vbn@K5c0)x5P><vBE5I z*97CPiErbs=jiQl>3*dlOY#5Lor}A)wz!+ZHH93H^?z`fXQa8AWl2lwAU?E15S}u= zg;>Ie4HA9ZkR=ot5WK*pn9btz8kWkCr5ldU!fJYX#kf^WIWO_^_~Zeu#k+E5jd>z; z#jgnc>~jm6qB1_*8dX@%BL#xXF1olU$45qXR7oezFA0n}V0%GLEMPhayI;e5wak*x zT)Kyq0R~91y4Uy%GSISudDnEG`EPX0i0f;*hm}T0svbrLkp0!Mj*FV{R%2BR%tZ}3 z4Bcz|S(pfd6j2AJQK>fvU~h+YzX?BV*bH)k3^}7Ou-NIb;#YW6S5W*h_qEIG^*;-7 zb&)$KZ=XcgqApUd>nPQA6ec$78_V@?l;|#RGuZHQbEv5t5=tQfA(o?)14@>rrxfn_ zqbWv2v{B#v$_yCGr7%Or!Z;?WEca=A6hVx~t|}FZm=wAZQz%EFP(nhFuoQs#EhRp+ zLy$_z5EgqHsaro@qwd*Rd^CvP8_WTuFQ@QHA3m32o}fnpx9rr<F;Tn2DU8viG4_oI z-8>jHG3w}^41sF;I&w~W(>B^L#iFDrKP3!9tDW7J2vq)>=%#NJjCE7oVr&EDn%LIp zHPf;-L9{a4&-5B?kKTmaD#OpFk69CR<*YI$udsmbKVf`UHm3Y7x{!KQe~AKL)bacm z+{I^}wxFv}vo(ys_m^Do8yC+X`i4XCFWgv(8++#CTaNu;>E3(g&SRy{V-NR!);ao6 z-Pm;&fpW{SO-qk{+Vok=@YimDid^I=H}$lmyWDZK)N!=P?cU^0f8z`BV_$P9p7(_K zx1aYk@;%Q7dib6f=lOd66#qhK<~v`+y7+Pa-tfmKestmmNA(xue1M<e?_K_Q;YSNE rII6#BZ{YXd((Zik_V-?Js6OlGcwd>@{fOILY>yQWPJYgvV~hU}C}Gx- diff --git a/Python314_4_x86_Template/Lib/compression/zstd/__pycache__/_zstdfile.cpython-314.pyc b/Python314_4_x86_Template/Lib/compression/zstd/__pycache__/_zstdfile.cpython-314.pyc deleted file mode 100644 index 751cddcd1ed9e881abd4ff649604e538745c53cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15802 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 diff --git a/Python314_4_x86_Template/Lib/compression/zstd/_zstdfile.py b/Python314_4_x86_Template/Lib/compression/zstd/_zstdfile.py deleted file mode 100644 index d709f5efc..000000000 --- a/Python314_4_x86_Template/Lib/compression/zstd/_zstdfile.py +++ /dev/null @@ -1,345 +0,0 @@ -import io -from os import PathLike -from _zstd import ZstdCompressor, ZstdDecompressor, ZSTD_DStreamOutSize -from compression._common import _streams - -__all__ = ('ZstdFile', 'open') - -_MODE_CLOSED = 0 -_MODE_READ = 1 -_MODE_WRITE = 2 - - -def _nbytes(dat, /): - if isinstance(dat, (bytes, bytearray)): - return len(dat) - with memoryview(dat) as mv: - return mv.nbytes - - -class ZstdFile(_streams.BaseStream): - """A file-like object providing transparent Zstandard (de)compression. - - A ZstdFile can act as a wrapper for an existing file object, or refer - directly to a named file on disk. - - ZstdFile provides a *binary* file interface. Data is read and returned as - bytes, and may only be written to objects that support the Buffer Protocol. - """ - - FLUSH_BLOCK = ZstdCompressor.FLUSH_BLOCK - FLUSH_FRAME = ZstdCompressor.FLUSH_FRAME - - def __init__(self, file, /, mode='r', *, - level=None, options=None, zstd_dict=None): - """Open a Zstandard compressed file in binary mode. - - *file* can be either an file-like object, or a file name to open. - - *mode* can be 'r' for reading (default), 'w' for (over)writing, 'x' for - creating exclusively, or 'a' for appending. These can equivalently be - given as 'rb', 'wb', 'xb' and 'ab' respectively. - - *level* is an optional int specifying the compression level to use, - or COMPRESSION_LEVEL_DEFAULT if not given. - - *options* is an optional dict for advanced compression parameters. - See CompressionParameter and DecompressionParameter for the possible - options. - - *zstd_dict* is an optional ZstdDict object, a pre-trained Zstandard - dictionary. See train_dict() to train ZstdDict on sample data. - """ - self._fp = None - self._close_fp = False - self._mode = _MODE_CLOSED - self._buffer = None - - if not isinstance(mode, str): - raise ValueError('mode must be a str') - if options is not None and not isinstance(options, dict): - raise TypeError('options must be a dict or None') - mode = mode.removesuffix('b') # handle rb, wb, xb, ab - if mode == 'r': - if level is not None: - raise TypeError('level is illegal in read mode') - self._mode = _MODE_READ - elif mode in {'w', 'a', 'x'}: - if level is not None and not isinstance(level, int): - raise TypeError('level must be int or None') - self._mode = _MODE_WRITE - self._compressor = ZstdCompressor(level=level, options=options, - zstd_dict=zstd_dict) - self._pos = 0 - else: - raise ValueError(f'Invalid mode: {mode!r}') - - if isinstance(file, (str, bytes, PathLike)): - self._fp = io.open(file, f'{mode}b') - self._close_fp = True - elif ((mode == 'r' and hasattr(file, 'read')) - or (mode != 'r' and hasattr(file, 'write'))): - self._fp = file - else: - raise TypeError('file must be a file-like object ' - 'or a str, bytes, or PathLike object') - - if self._mode == _MODE_READ: - raw = _streams.DecompressReader( - self._fp, - ZstdDecompressor, - zstd_dict=zstd_dict, - options=options, - ) - self._buffer = io.BufferedReader(raw) - - def close(self): - """Flush and close the file. - - May be called multiple times. Once the file has been closed, - any other operation on it will raise ValueError. - """ - if self._fp is None: - return - try: - if self._mode == _MODE_READ: - if getattr(self, '_buffer', None): - self._buffer.close() - self._buffer = None - elif self._mode == _MODE_WRITE: - self.flush(self.FLUSH_FRAME) - self._compressor = None - finally: - self._mode = _MODE_CLOSED - try: - if self._close_fp: - self._fp.close() - finally: - self._fp = None - self._close_fp = False - - def write(self, data, /): - """Write a bytes-like object *data* to the file. - - Returns the number of uncompressed bytes written, which is - always the length of data in bytes. Note that due to buffering, - the file on disk may not reflect the data written until .flush() - or .close() is called. - """ - self._check_can_write() - - length = _nbytes(data) - - compressed = self._compressor.compress(data) - self._fp.write(compressed) - self._pos += length - return length - - def flush(self, mode=FLUSH_BLOCK): - """Flush remaining data to the underlying stream. - - The mode argument can be FLUSH_BLOCK or FLUSH_FRAME. Abuse of this - method will reduce compression ratio, use it only when necessary. - - If the program is interrupted afterwards, all data can be recovered. - To ensure saving to disk, also need to use os.fsync(fd). - - This method does nothing in reading mode. - """ - if self._mode == _MODE_READ: - return - self._check_not_closed() - if mode not in {self.FLUSH_BLOCK, self.FLUSH_FRAME}: - raise ValueError('Invalid mode argument, expected either ' - 'ZstdFile.FLUSH_FRAME or ' - 'ZstdFile.FLUSH_BLOCK') - if self._compressor.last_mode == mode: - return - # Flush zstd block/frame, and write. - data = self._compressor.flush(mode) - self._fp.write(data) - if hasattr(self._fp, 'flush'): - self._fp.flush() - - def read(self, size=-1): - """Read up to size uncompressed bytes from the file. - - If size is negative or omitted, read until EOF is reached. - Returns b'' if the file is already at EOF. - """ - if size is None: - size = -1 - self._check_can_read() - return self._buffer.read(size) - - def read1(self, size=-1): - """Read up to size uncompressed bytes, while trying to avoid - making multiple reads from the underlying stream. Reads up to a - buffer's worth of data if size is negative. - - Returns b'' if the file is at EOF. - """ - self._check_can_read() - if size < 0: - # Note this should *not* be io.DEFAULT_BUFFER_SIZE. - # ZSTD_DStreamOutSize is the minimum amount to read guaranteeing - # a full block is read. - size = ZSTD_DStreamOutSize - return self._buffer.read1(size) - - def readinto(self, b): - """Read bytes into b. - - Returns the number of bytes read (0 for EOF). - """ - self._check_can_read() - return self._buffer.readinto(b) - - def readinto1(self, b): - """Read bytes into b, while trying to avoid making multiple reads - from the underlying stream. - - Returns the number of bytes read (0 for EOF). - """ - self._check_can_read() - return self._buffer.readinto1(b) - - def readline(self, size=-1): - """Read a line of uncompressed bytes from the file. - - The terminating newline (if present) is retained. If size is - non-negative, no more than size bytes will be read (in which - case the line may be incomplete). Returns b'' if already at EOF. - """ - self._check_can_read() - return self._buffer.readline(size) - - def seek(self, offset, whence=io.SEEK_SET): - """Change the file position. - - The new position is specified by offset, relative to the - position indicated by whence. Possible values for whence are: - - 0: start of stream (default): offset must not be negative - 1: current stream position - 2: end of stream; offset must not be positive - - Returns the new file position. - - Note that seeking is emulated, so depending on the arguments, - this operation may be extremely slow. - """ - self._check_can_read() - - # BufferedReader.seek() checks seekable - return self._buffer.seek(offset, whence) - - def peek(self, size=-1): - """Return buffered data without advancing the file position. - - Always returns at least one byte of data, unless at EOF. - The exact number of bytes returned is unspecified. - """ - # Relies on the undocumented fact that BufferedReader.peek() always - # returns at least one byte (except at EOF) - self._check_can_read() - return self._buffer.peek(size) - - def __next__(self): - if ret := self._buffer.readline(): - return ret - raise StopIteration - - def tell(self): - """Return the current file position.""" - self._check_not_closed() - if self._mode == _MODE_READ: - return self._buffer.tell() - elif self._mode == _MODE_WRITE: - return self._pos - - def fileno(self): - """Return the file descriptor for the underlying file.""" - self._check_not_closed() - return self._fp.fileno() - - @property - def name(self): - self._check_not_closed() - return self._fp.name - - @property - def mode(self): - return 'wb' if self._mode == _MODE_WRITE else 'rb' - - @property - def closed(self): - """True if this file is closed.""" - return self._mode == _MODE_CLOSED - - def seekable(self): - """Return whether the file supports seeking.""" - return self.readable() and self._buffer.seekable() - - def readable(self): - """Return whether the file was opened for reading.""" - self._check_not_closed() - return self._mode == _MODE_READ - - def writable(self): - """Return whether the file was opened for writing.""" - self._check_not_closed() - return self._mode == _MODE_WRITE - - -def open(file, /, mode='rb', *, level=None, options=None, zstd_dict=None, - encoding=None, errors=None, newline=None): - """Open a Zstandard compressed file in binary or text mode. - - file can be either a file name (given as a str, bytes, or PathLike object), - in which case the named file is opened, or it can be an existing file object - to read from or write to. - - The mode parameter can be 'r', 'rb' (default), 'w', 'wb', 'x', 'xb', 'a', - 'ab' for binary mode, or 'rt', 'wt', 'xt', 'at' for text mode. - - The level, options, and zstd_dict parameters specify the settings the same - as ZstdFile. - - When using read mode (decompression), the options parameter is a dict - representing advanced decompression options. The level parameter is not - supported in this case. When using write mode (compression), only one of - level, an int representing the compression level, or options, a dict - representing advanced compression options, may be passed. In both modes, - zstd_dict is a ZstdDict instance containing a trained Zstandard dictionary. - - For binary mode, this function is equivalent to the ZstdFile constructor: - ZstdFile(filename, mode, ...). In this case, the encoding, errors and - newline parameters must not be provided. - - For text mode, an ZstdFile object is created, and wrapped in an - io.TextIOWrapper instance with the specified encoding, error handling - behavior, and line ending(s). - """ - - text_mode = 't' in mode - mode = mode.replace('t', '') - - if text_mode: - if 'b' in mode: - raise ValueError(f'Invalid mode: {mode!r}') - else: - if encoding is not None: - raise ValueError('Argument "encoding" not supported in binary mode') - if errors is not None: - raise ValueError('Argument "errors" not supported in binary mode') - if newline is not None: - raise ValueError('Argument "newline" not supported in binary mode') - - binary_file = ZstdFile(file, mode, level=level, options=options, - zstd_dict=zstd_dict) - - if text_mode: - return io.TextIOWrapper(binary_file, encoding, errors, newline) - else: - return binary_file diff --git a/Python314_4_x86_Template/Lib/concurrent/__init__.py b/Python314_4_x86_Template/Lib/concurrent/__init__.py deleted file mode 100644 index 196d37885..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This directory is a Python package. diff --git a/Python314_4_x86_Template/Lib/concurrent/futures/__init__.py b/Python314_4_x86_Template/Lib/concurrent/futures/__init__.py deleted file mode 100644 index d6ac4b3e0..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/futures/__init__.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2009 Brian Quinlan. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Execute computations asynchronously using threads or processes.""" - -__author__ = 'Brian Quinlan (brian@sweetapp.com)' - -from concurrent.futures._base import (FIRST_COMPLETED, - FIRST_EXCEPTION, - ALL_COMPLETED, - CancelledError, - TimeoutError, - InvalidStateError, - BrokenExecutor, - Future, - Executor, - wait, - as_completed) - -__all__ = [ - 'FIRST_COMPLETED', - 'FIRST_EXCEPTION', - 'ALL_COMPLETED', - 'CancelledError', - 'TimeoutError', - 'InvalidStateError', - 'BrokenExecutor', - 'Future', - 'Executor', - 'wait', - 'as_completed', - 'ProcessPoolExecutor', - 'ThreadPoolExecutor', -] - - -try: - import _interpreters -except ImportError: - _interpreters = None - -if _interpreters: - __all__.append('InterpreterPoolExecutor') - - -def __dir__(): - return __all__ + ['__author__', '__doc__'] - - -def __getattr__(name): - global ProcessPoolExecutor, ThreadPoolExecutor, InterpreterPoolExecutor - - if name == 'ProcessPoolExecutor': - from .process import ProcessPoolExecutor - return ProcessPoolExecutor - - if name == 'ThreadPoolExecutor': - from .thread import ThreadPoolExecutor - return ThreadPoolExecutor - - if _interpreters and name == 'InterpreterPoolExecutor': - from .interpreter import InterpreterPoolExecutor - return InterpreterPoolExecutor - - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/Python314_4_x86_Template/Lib/concurrent/futures/_base.py b/Python314_4_x86_Template/Lib/concurrent/futures/_base.py deleted file mode 100644 index d98b1ebdd..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/futures/_base.py +++ /dev/null @@ -1,674 +0,0 @@ -# Copyright 2009 Brian Quinlan. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -__author__ = 'Brian Quinlan (brian@sweetapp.com)' - -import collections -import logging -import threading -import time -import types -import weakref -from itertools import islice - -FIRST_COMPLETED = 'FIRST_COMPLETED' -FIRST_EXCEPTION = 'FIRST_EXCEPTION' -ALL_COMPLETED = 'ALL_COMPLETED' -_AS_COMPLETED = '_AS_COMPLETED' - -# Possible future states (for internal use by the futures package). -PENDING = 'PENDING' -RUNNING = 'RUNNING' -# The future was cancelled by the user... -CANCELLED = 'CANCELLED' -# ...and _Waiter.add_cancelled() was called by a worker. -CANCELLED_AND_NOTIFIED = 'CANCELLED_AND_NOTIFIED' -FINISHED = 'FINISHED' - -_STATE_TO_DESCRIPTION_MAP = { - PENDING: "pending", - RUNNING: "running", - CANCELLED: "cancelled", - CANCELLED_AND_NOTIFIED: "cancelled", - FINISHED: "finished" -} - -# Logger for internal use by the futures package. -LOGGER = logging.getLogger("concurrent.futures") - -class Error(Exception): - """Base class for all future-related exceptions.""" - pass - -class CancelledError(Error): - """The Future was cancelled.""" - pass - -TimeoutError = TimeoutError # make local alias for the standard exception - -class InvalidStateError(Error): - """The operation is not allowed in this state.""" - pass - -class _Waiter(object): - """Provides the event that wait() and as_completed() block on.""" - def __init__(self): - self.event = threading.Event() - self.finished_futures = [] - - def add_result(self, future): - self.finished_futures.append(future) - - def add_exception(self, future): - self.finished_futures.append(future) - - def add_cancelled(self, future): - self.finished_futures.append(future) - -class _AsCompletedWaiter(_Waiter): - """Used by as_completed().""" - - def __init__(self): - super(_AsCompletedWaiter, self).__init__() - self.lock = threading.Lock() - - def add_result(self, future): - with self.lock: - super(_AsCompletedWaiter, self).add_result(future) - self.event.set() - - def add_exception(self, future): - with self.lock: - super(_AsCompletedWaiter, self).add_exception(future) - self.event.set() - - def add_cancelled(self, future): - with self.lock: - super(_AsCompletedWaiter, self).add_cancelled(future) - self.event.set() - -class _FirstCompletedWaiter(_Waiter): - """Used by wait(return_when=FIRST_COMPLETED).""" - - def add_result(self, future): - super().add_result(future) - self.event.set() - - def add_exception(self, future): - super().add_exception(future) - self.event.set() - - def add_cancelled(self, future): - super().add_cancelled(future) - self.event.set() - -class _AllCompletedWaiter(_Waiter): - """Used by wait(return_when=FIRST_EXCEPTION and ALL_COMPLETED).""" - - def __init__(self, num_pending_calls, stop_on_exception): - self.num_pending_calls = num_pending_calls - self.stop_on_exception = stop_on_exception - self.lock = threading.Lock() - super().__init__() - - def _decrement_pending_calls(self): - with self.lock: - self.num_pending_calls -= 1 - if not self.num_pending_calls: - self.event.set() - - def add_result(self, future): - super().add_result(future) - self._decrement_pending_calls() - - def add_exception(self, future): - super().add_exception(future) - if self.stop_on_exception: - self.event.set() - else: - self._decrement_pending_calls() - - def add_cancelled(self, future): - super().add_cancelled(future) - self._decrement_pending_calls() - -class _AcquireFutures(object): - """A context manager that does an ordered acquire of Future conditions.""" - - def __init__(self, futures): - self.futures = sorted(futures, key=id) - - def __enter__(self): - for future in self.futures: - future._condition.acquire() - - def __exit__(self, *args): - for future in self.futures: - future._condition.release() - -def _create_and_install_waiters(fs, return_when): - if return_when == _AS_COMPLETED: - waiter = _AsCompletedWaiter() - elif return_when == FIRST_COMPLETED: - waiter = _FirstCompletedWaiter() - else: - pending_count = sum( - f._state not in [CANCELLED_AND_NOTIFIED, FINISHED] for f in fs) - - if return_when == FIRST_EXCEPTION: - waiter = _AllCompletedWaiter(pending_count, stop_on_exception=True) - elif return_when == ALL_COMPLETED: - waiter = _AllCompletedWaiter(pending_count, stop_on_exception=False) - else: - raise ValueError("Invalid return condition: %r" % return_when) - - for f in fs: - f._waiters.append(waiter) - - return waiter - - -def _yield_finished_futures(fs, waiter, ref_collect): - """ - Iterate on the list *fs*, yielding finished futures one by one in - reverse order. - Before yielding a future, *waiter* is removed from its waiters - and the future is removed from each set in the collection of sets - *ref_collect*. - - The aim of this function is to avoid keeping stale references after - the future is yielded and before the iterator resumes. - """ - while fs: - f = fs[-1] - for futures_set in ref_collect: - futures_set.remove(f) - with f._condition: - f._waiters.remove(waiter) - del f - # Careful not to keep a reference to the popped value - yield fs.pop() - - -def as_completed(fs, timeout=None): - """An iterator over the given futures that yields each as it completes. - - Args: - fs: The sequence of Futures (possibly created by different Executors) to - iterate over. - timeout: The maximum number of seconds to wait. If None, then there - is no limit on the wait time. - - Returns: - An iterator that yields the given Futures as they complete (finished or - cancelled). If any given Futures are duplicated, they will be returned - once. - - Raises: - TimeoutError: If the entire result iterator could not be generated - before the given timeout. - """ - if timeout is not None: - end_time = timeout + time.monotonic() - - fs = set(fs) - total_futures = len(fs) - with _AcquireFutures(fs): - finished = set( - f for f in fs - if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]) - pending = fs - finished - waiter = _create_and_install_waiters(fs, _AS_COMPLETED) - finished = list(finished) - try: - yield from _yield_finished_futures(finished, waiter, - ref_collect=(fs,)) - - while pending: - if timeout is None: - wait_timeout = None - else: - wait_timeout = end_time - time.monotonic() - if wait_timeout < 0: - raise TimeoutError( - '%d (of %d) futures unfinished' % ( - len(pending), total_futures)) - - waiter.event.wait(wait_timeout) - - with waiter.lock: - finished = waiter.finished_futures - waiter.finished_futures = [] - waiter.event.clear() - - # reverse to keep finishing order - finished.reverse() - yield from _yield_finished_futures(finished, waiter, - ref_collect=(fs, pending)) - - finally: - # Remove waiter from unfinished futures - for f in fs: - with f._condition: - f._waiters.remove(waiter) - -DoneAndNotDoneFutures = collections.namedtuple( - 'DoneAndNotDoneFutures', 'done not_done') -def wait(fs, timeout=None, return_when=ALL_COMPLETED): - """Wait for the futures in the given sequence to complete. - - Args: - fs: The sequence of Futures (possibly created by different Executors) to - wait upon. - timeout: The maximum number of seconds to wait. If None, then there - is no limit on the wait time. - return_when: Indicates when this function should return. The options - are: - - FIRST_COMPLETED - Return when any future finishes or is - cancelled. - FIRST_EXCEPTION - Return when any future finishes by raising an - exception. If no future raises an exception - then it is equivalent to ALL_COMPLETED. - ALL_COMPLETED - Return when all futures finish or are cancelled. - - Returns: - A named 2-tuple of sets. The first set, named 'done', contains the - futures that completed (is finished or cancelled) before the wait - completed. The second set, named 'not_done', contains uncompleted - futures. Duplicate futures given to *fs* are removed and will be - returned only once. - """ - fs = set(fs) - with _AcquireFutures(fs): - done = {f for f in fs - if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]} - not_done = fs - done - if (return_when == FIRST_COMPLETED) and done: - return DoneAndNotDoneFutures(done, not_done) - elif (return_when == FIRST_EXCEPTION) and done: - if any(f for f in done - if not f.cancelled() and f.exception() is not None): - return DoneAndNotDoneFutures(done, not_done) - - if len(done) == len(fs): - return DoneAndNotDoneFutures(done, not_done) - - waiter = _create_and_install_waiters(fs, return_when) - - waiter.event.wait(timeout) - for f in fs: - with f._condition: - f._waiters.remove(waiter) - - done.update(waiter.finished_futures) - return DoneAndNotDoneFutures(done, fs - done) - - -def _result_or_cancel(fut, timeout=None): - try: - try: - return fut.result(timeout) - finally: - fut.cancel() - finally: - # Break a reference cycle with the exception in self._exception - del fut - - -class Future(object): - """Represents the result of an asynchronous computation.""" - - def __init__(self): - """Initializes the future. Should not be called by clients.""" - self._condition = threading.Condition() - self._state = PENDING - self._result = None - self._exception = None - self._waiters = [] - self._done_callbacks = [] - - def _invoke_callbacks(self): - for callback in self._done_callbacks: - try: - callback(self) - except Exception: - LOGGER.exception('exception calling callback for %r', self) - - def __repr__(self): - with self._condition: - if self._state == FINISHED: - if self._exception: - return '<%s at %#x state=%s raised %s>' % ( - self.__class__.__name__, - id(self), - _STATE_TO_DESCRIPTION_MAP[self._state], - self._exception.__class__.__name__) - else: - return '<%s at %#x state=%s returned %s>' % ( - self.__class__.__name__, - id(self), - _STATE_TO_DESCRIPTION_MAP[self._state], - self._result.__class__.__name__) - return '<%s at %#x state=%s>' % ( - self.__class__.__name__, - id(self), - _STATE_TO_DESCRIPTION_MAP[self._state]) - - def cancel(self): - """Cancel the future if possible. - - Returns True if the future was cancelled, False otherwise. A future - cannot be cancelled if it is running or has already completed. - """ - with self._condition: - if self._state in [RUNNING, FINISHED]: - return False - - if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: - return True - - self._state = CANCELLED - self._condition.notify_all() - - self._invoke_callbacks() - return True - - def cancelled(self): - """Return True if the future was cancelled.""" - with self._condition: - return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED] - - def running(self): - """Return True if the future is currently executing.""" - with self._condition: - return self._state == RUNNING - - def done(self): - """Return True if the future was cancelled or finished executing.""" - with self._condition: - return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED] - - def __get_result(self): - if self._exception is not None: - try: - raise self._exception - finally: - # Break a reference cycle with the exception in self._exception - self = None - else: - return self._result - - def add_done_callback(self, fn): - """Attaches a callable that will be called when the future finishes. - - Args: - fn: A callable that will be called with this future as its only - argument when the future completes or is cancelled. The callable - will always be called by a thread in the same process in which - it was added. If the future has already completed or been - cancelled then the callable will be called immediately. These - callables are called in the order that they were added. - """ - with self._condition: - if self._state not in [CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED]: - self._done_callbacks.append(fn) - return - try: - fn(self) - except Exception: - LOGGER.exception('exception calling callback for %r', self) - - def result(self, timeout=None): - """Return the result of the call that the future represents. - - Args: - timeout: The number of seconds to wait for the result if the future - isn't done. If None, then there is no limit on the wait time. - - Returns: - The result of the call that the future represents. - - Raises: - CancelledError: If the future was cancelled. - TimeoutError: If the future didn't finish executing before the given - timeout. - Exception: If the call raised then that exception will be raised. - """ - try: - with self._condition: - if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: - raise CancelledError() - elif self._state == FINISHED: - return self.__get_result() - - self._condition.wait(timeout) - - if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: - raise CancelledError() - elif self._state == FINISHED: - return self.__get_result() - else: - raise TimeoutError() - finally: - # Break a reference cycle with the exception in self._exception - self = None - - def exception(self, timeout=None): - """Return the exception raised by the call that the future represents. - - Args: - timeout: The number of seconds to wait for the exception if the - future isn't done. If None, then there is no limit on the wait - time. - - Returns: - The exception raised by the call that the future represents or None - if the call completed without raising. - - Raises: - CancelledError: If the future was cancelled. - TimeoutError: If the future didn't finish executing before the given - timeout. - """ - - with self._condition: - if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: - raise CancelledError() - elif self._state == FINISHED: - return self._exception - - self._condition.wait(timeout) - - if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: - raise CancelledError() - elif self._state == FINISHED: - return self._exception - else: - raise TimeoutError() - - # The following methods should only be used by Executors and in tests. - def set_running_or_notify_cancel(self): - """Mark the future as running or process any cancel notifications. - - Should only be used by Executor implementations and unit tests. - - If the future has been cancelled (cancel() was called and returned - True) then any threads waiting on the future completing (though calls - to as_completed() or wait()) are notified and False is returned. - - If the future was not cancelled then it is put in the running state - (future calls to running() will return True) and True is returned. - - This method should be called by Executor implementations before - executing the work associated with this future. If this method returns - False then the work should not be executed. - - Returns: - False if the Future was cancelled, True otherwise. - - Raises: - RuntimeError: if this method was already called or if set_result() - or set_exception() was called. - """ - with self._condition: - if self._state == CANCELLED: - self._state = CANCELLED_AND_NOTIFIED - for waiter in self._waiters: - waiter.add_cancelled(self) - # self._condition.notify_all() is not necessary because - # self.cancel() triggers a notification. - return False - elif self._state == PENDING: - self._state = RUNNING - return True - else: - LOGGER.critical('Future %s in unexpected state: %s', - id(self), - self._state) - raise RuntimeError('Future in unexpected state') - - def set_result(self, result): - """Sets the return value of work associated with the future. - - Should only be used by Executor implementations and unit tests. - """ - with self._condition: - if self._state in {CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED}: - raise InvalidStateError('{}: {!r}'.format(self._state, self)) - self._result = result - self._state = FINISHED - for waiter in self._waiters: - waiter.add_result(self) - self._condition.notify_all() - self._invoke_callbacks() - - def set_exception(self, exception): - """Sets the result of the future as being the given exception. - - Should only be used by Executor implementations and unit tests. - """ - with self._condition: - if self._state in {CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED}: - raise InvalidStateError('{}: {!r}'.format(self._state, self)) - self._exception = exception - self._state = FINISHED - for waiter in self._waiters: - waiter.add_exception(self) - self._condition.notify_all() - self._invoke_callbacks() - - __class_getitem__ = classmethod(types.GenericAlias) - -class Executor(object): - """This is an abstract base class for concrete asynchronous executors.""" - - def submit(self, fn, /, *args, **kwargs): - """Submits a callable to be executed with the given arguments. - - Schedules the callable to be executed as fn(*args, **kwargs) and returns - a Future instance representing the execution of the callable. - - Returns: - A Future representing the given call. - """ - raise NotImplementedError() - - def map(self, fn, *iterables, timeout=None, chunksize=1, buffersize=None): - """Returns an iterator equivalent to map(fn, iter). - - Args: - fn: A callable that will take as many arguments as there are - passed iterables. - timeout: The maximum number of seconds to wait. If None, then there - is no limit on the wait time. - chunksize: The size of the chunks the iterable will be broken into - before being passed to a child process. This argument is only - used by ProcessPoolExecutor; it is ignored by - ThreadPoolExecutor. - buffersize: The number of submitted tasks whose results have not - yet been yielded. If the buffer is full, iteration over the - iterables pauses until a result is yielded from the buffer. - If None, all input elements are eagerly collected, and a task is - submitted for each. - - Returns: - An iterator equivalent to: map(func, *iterables) but the calls may - be evaluated out-of-order. - - Raises: - TimeoutError: If the entire result iterator could not be generated - before the given timeout. - Exception: If fn(*args) raises for any values. - """ - if buffersize is not None and not isinstance(buffersize, int): - raise TypeError("buffersize must be an integer or None") - if buffersize is not None and buffersize < 1: - raise ValueError("buffersize must be None or > 0") - - if timeout is not None: - end_time = timeout + time.monotonic() - - zipped_iterables = zip(*iterables) - if buffersize: - fs = collections.deque( - self.submit(fn, *args) for args in islice(zipped_iterables, buffersize) - ) - else: - fs = [self.submit(fn, *args) for args in zipped_iterables] - - # Use a weak reference to ensure that the executor can be garbage - # collected independently of the result_iterator closure. - executor_weakref = weakref.ref(self) - - # Yield must be hidden in closure so that the futures are submitted - # before the first iterator value is required. - def result_iterator(): - try: - # reverse to keep finishing order - fs.reverse() - while fs: - if ( - buffersize - and (executor := executor_weakref()) - and (args := next(zipped_iterables, None)) - ): - fs.appendleft(executor.submit(fn, *args)) - # Careful not to keep a reference to the popped future - if timeout is None: - yield _result_or_cancel(fs.pop()) - else: - yield _result_or_cancel(fs.pop(), end_time - time.monotonic()) - finally: - for future in fs: - future.cancel() - return result_iterator() - - def shutdown(self, wait=True, *, cancel_futures=False): - """Clean-up the resources associated with the Executor. - - It is safe to call this method several times. Otherwise, no other - methods can be called after this one. - - Args: - wait: If True then shutdown will not return until all running - futures have finished executing and the resources used by the - executor have been reclaimed. - cancel_futures: If True then shutdown will cancel all pending - futures. Futures that are completed or running will not be - cancelled. - """ - pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.shutdown(wait=True) - return False - - -class BrokenExecutor(RuntimeError): - """ - Raised when a executor has become non-functional after a severe failure. - """ diff --git a/Python314_4_x86_Template/Lib/concurrent/futures/interpreter.py b/Python314_4_x86_Template/Lib/concurrent/futures/interpreter.py deleted file mode 100644 index 85c1da2c7..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/futures/interpreter.py +++ /dev/null @@ -1,123 +0,0 @@ -"""Implements InterpreterPoolExecutor.""" - -from concurrent import interpreters -import sys -from . import thread as _thread -import traceback - - -def do_call(results, func, args, kwargs): - try: - return func(*args, **kwargs) - except BaseException as exc: - # Send the captured exception out on the results queue, - # but still leave it unhandled for the interpreter to handle. - try: - results.put(exc) - except interpreters.NotShareableError: - # The exception is not shareable. - print('exception is not shareable:', file=sys.stderr) - traceback.print_exception(exc) - results.put(None) - raise # re-raise - - -class WorkerContext(_thread.WorkerContext): - - @classmethod - def prepare(cls, initializer, initargs): - def resolve_task(fn, args, kwargs): - if isinstance(fn, str): - # XXX Circle back to this later. - raise TypeError('scripts not supported') - else: - task = (fn, args, kwargs) - return task - - if initializer is not None: - try: - initdata = resolve_task(initializer, initargs, {}) - except ValueError: - if isinstance(initializer, str) and initargs: - raise ValueError(f'an initializer script does not take args, got {initargs!r}') - raise # re-raise - else: - initdata = None - def create_context(): - return cls(initdata) - return create_context, resolve_task - - def __init__(self, initdata): - self.initdata = initdata - self.interp = None - self.results = None - - def __del__(self): - if self.interp is not None: - self.finalize() - - def initialize(self): - assert self.interp is None, self.interp - self.interp = interpreters.create() - try: - maxsize = 0 - self.results = interpreters.create_queue(maxsize) - - if self.initdata: - self.run(self.initdata) - except BaseException: - self.finalize() - raise # re-raise - - def finalize(self): - interp = self.interp - results = self.results - self.results = None - self.interp = None - if results is not None: - del results - if interp is not None: - interp.close() - - def run(self, task): - try: - return self.interp.call(do_call, self.results, *task) - except interpreters.ExecutionFailed as wrapper: - # Wait for the exception data to show up. - exc = self.results.get() - if exc is None: - # The exception must have been not shareable. - raise # re-raise - raise exc from wrapper - - -class BrokenInterpreterPool(_thread.BrokenThreadPool): - """ - Raised when a worker thread in an InterpreterPoolExecutor failed initializing. - """ - - -class InterpreterPoolExecutor(_thread.ThreadPoolExecutor): - - BROKEN = BrokenInterpreterPool - - @classmethod - def prepare_context(cls, initializer, initargs): - return WorkerContext.prepare(initializer, initargs) - - def __init__(self, max_workers=None, thread_name_prefix='', - initializer=None, initargs=()): - """Initializes a new InterpreterPoolExecutor instance. - - Args: - max_workers: The maximum number of interpreters that can be used to - execute the given calls. - thread_name_prefix: An optional name prefix to give our threads. - initializer: A callable or script used to initialize - each worker interpreter. - initargs: A tuple of arguments to pass to the initializer. - """ - thread_name_prefix = (thread_name_prefix or - (f"InterpreterPoolExecutor-{self._counter()}")) - super().__init__(max_workers, thread_name_prefix, - initializer, initargs) diff --git a/Python314_4_x86_Template/Lib/concurrent/futures/process.py b/Python314_4_x86_Template/Lib/concurrent/futures/process.py deleted file mode 100644 index a14650bf5..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/futures/process.py +++ /dev/null @@ -1,939 +0,0 @@ -# Copyright 2009 Brian Quinlan. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Implements ProcessPoolExecutor. - -The following diagram and text describe the data-flow through the system: - -|======================= In-process =====================|== Out-of-process ==| - -+----------+ +----------+ +--------+ +-----------+ +---------+ -| | => | Work Ids | | | | Call Q | | Process | -| | +----------+ | | +-----------+ | Pool | -| | | ... | | | | ... | +---------+ -| | | 6 | => | | => | 5, call() | => | | -| | | 7 | | | | ... | | | -| Process | | ... | | Local | +-----------+ | Process | -| Pool | +----------+ | Worker | | #1..n | -| Executor | | Thread | | | -| | +----------- + | | +-----------+ | | -| | <=> | Work Items | <=> | | <= | Result Q | <= | | -| | +------------+ | | +-----------+ | | -| | | 6: call() | | | | ... | | | -| | | future | | | | 4, result | | | -| | | ... | | | | 3, except | | | -+----------+ +------------+ +--------+ +-----------+ +---------+ - -Executor.submit() called: -- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict -- adds the id of the _WorkItem to the "Work Ids" queue - -Local worker thread: -- reads work ids from the "Work Ids" queue and looks up the corresponding - WorkItem from the "Work Items" dict: if the work item has been cancelled then - it is simply removed from the dict, otherwise it is repackaged as a - _CallItem and put in the "Call Q". New _CallItems are put in the "Call Q" - until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because - calls placed in the "Call Q" can no longer be cancelled with Future.cancel(). -- reads _ResultItems from "Result Q", updates the future stored in the - "Work Items" dict and deletes the dict entry - -Process #1..n: -- reads _CallItems from "Call Q", executes the calls, and puts the resulting - _ResultItems in "Result Q" -""" - -__author__ = 'Brian Quinlan (brian@sweetapp.com)' - -import os -from concurrent.futures import _base -import queue -import multiprocessing as mp -# This import is required to load the multiprocessing.connection submodule -# so that it can be accessed later as `mp.connection` -import multiprocessing.connection -from multiprocessing.queues import Queue -import threading -import weakref -from functools import partial -import itertools -import sys -from traceback import format_exception - - -_threads_wakeups = weakref.WeakKeyDictionary() -_global_shutdown = False - - -class _ThreadWakeup: - def __init__(self): - self._closed = False - self._lock = threading.Lock() - self._reader, self._writer = mp.Pipe(duplex=False) - - def close(self): - # Please note that we do not take the self._lock when - # calling clear() (to avoid deadlocking) so this method can - # only be called safely from the same thread as all calls to - # clear() even if you hold the lock. Otherwise we - # might try to read from the closed pipe. - with self._lock: - if not self._closed: - self._closed = True - self._writer.close() - self._reader.close() - - def wakeup(self): - with self._lock: - if not self._closed: - self._writer.send_bytes(b"") - - def clear(self): - if self._closed: - raise RuntimeError('operation on closed _ThreadWakeup') - while self._reader.poll(): - self._reader.recv_bytes() - - -def _python_exit(): - global _global_shutdown - _global_shutdown = True - items = list(_threads_wakeups.items()) - for _, thread_wakeup in items: - # call not protected by ProcessPoolExecutor._shutdown_lock - thread_wakeup.wakeup() - for t, _ in items: - t.join() - -# Register for `_python_exit()` to be called just before joining all -# non-daemon threads. This is used instead of `atexit.register()` for -# compatibility with subinterpreters, which no longer support daemon threads. -# See bpo-39812 for context. -threading._register_atexit(_python_exit) - -# Controls how many more calls than processes will be queued in the call queue. -# A smaller number will mean that processes spend more time idle waiting for -# work while a larger number will make Future.cancel() succeed less frequently -# (Futures in the call queue cannot be cancelled). -EXTRA_QUEUED_CALLS = 1 - - -# On Windows, WaitForMultipleObjects is used to wait for processes to finish. -# It can wait on, at most, 63 objects. There is an overhead of two objects: -# - the result queue reader -# - the thread wakeup reader -_MAX_WINDOWS_WORKERS = 63 - 2 - -# Hack to embed stringification of remote traceback in local traceback - -class _RemoteTraceback(Exception): - def __init__(self, tb): - self.tb = tb - def __str__(self): - return self.tb - -class _ExceptionWithTraceback: - def __init__(self, exc, tb): - tb = ''.join(format_exception(type(exc), exc, tb)) - self.exc = exc - # Traceback object needs to be garbage-collected as its frames - # contain references to all the objects in the exception scope - self.exc.__traceback__ = None - self.tb = '\n"""\n%s"""' % tb - def __reduce__(self): - return _rebuild_exc, (self.exc, self.tb) - -def _rebuild_exc(exc, tb): - exc.__cause__ = _RemoteTraceback(tb) - return exc - -class _WorkItem(object): - def __init__(self, future, fn, args, kwargs): - self.future = future - self.fn = fn - self.args = args - self.kwargs = kwargs - -class _ResultItem(object): - def __init__(self, work_id, exception=None, result=None, exit_pid=None): - self.work_id = work_id - self.exception = exception - self.result = result - self.exit_pid = exit_pid - -class _CallItem(object): - def __init__(self, work_id, fn, args, kwargs): - self.work_id = work_id - self.fn = fn - self.args = args - self.kwargs = kwargs - - -class _SafeQueue(Queue): - """Safe Queue set exception to the future object linked to a job""" - def __init__(self, max_size=0, *, ctx, pending_work_items, thread_wakeup): - self.pending_work_items = pending_work_items - self.thread_wakeup = thread_wakeup - super().__init__(max_size, ctx=ctx) - - def _on_queue_feeder_error(self, e, obj): - if isinstance(obj, _CallItem): - tb = format_exception(type(e), e, e.__traceback__) - e.__cause__ = _RemoteTraceback('\n"""\n{}"""'.format(''.join(tb))) - work_item = self.pending_work_items.pop(obj.work_id, None) - self.thread_wakeup.wakeup() - # work_item can be None if another process terminated. In this - # case, the executor_manager_thread fails all work_items - # with BrokenProcessPool - if work_item is not None: - work_item.future.set_exception(e) - else: - super()._on_queue_feeder_error(e, obj) - - -def _process_chunk(fn, chunk): - """ Processes a chunk of an iterable passed to map. - - Runs the function passed to map() on a chunk of the - iterable passed to map. - - This function is run in a separate process. - - """ - return [fn(*args) for args in chunk] - - -def _sendback_result(result_queue, work_id, result=None, exception=None, - exit_pid=None): - """Safely send back the given result or exception""" - try: - result_queue.put(_ResultItem(work_id, result=result, - exception=exception, exit_pid=exit_pid)) - except BaseException as e: - exc = _ExceptionWithTraceback(e, e.__traceback__) - result_queue.put(_ResultItem(work_id, exception=exc, - exit_pid=exit_pid)) - - -def _process_worker(call_queue, result_queue, initializer, initargs, max_tasks=None): - """Evaluates calls from call_queue and places the results in result_queue. - - This worker is run in a separate process. - - Args: - call_queue: A ctx.Queue of _CallItems that will be read and - evaluated by the worker. - result_queue: A ctx.Queue of _ResultItems that will written - to by the worker. - initializer: A callable initializer, or None - initargs: A tuple of args for the initializer - """ - if initializer is not None: - try: - initializer(*initargs) - except BaseException: - _base.LOGGER.critical('Exception in initializer:', exc_info=True) - # The parent will notice that the process stopped and - # mark the pool broken - return - num_tasks = 0 - exit_pid = None - while True: - call_item = call_queue.get(block=True) - if call_item is None: - # Wake up queue management thread - result_queue.put(os.getpid()) - return - - if max_tasks is not None: - num_tasks += 1 - if num_tasks >= max_tasks: - exit_pid = os.getpid() - - try: - r = call_item.fn(*call_item.args, **call_item.kwargs) - except BaseException as e: - exc = _ExceptionWithTraceback(e, e.__traceback__) - _sendback_result(result_queue, call_item.work_id, exception=exc, - exit_pid=exit_pid) - else: - _sendback_result(result_queue, call_item.work_id, result=r, - exit_pid=exit_pid) - del r - - # Liberate the resource as soon as possible, to avoid holding onto - # open files or shared memory that is not needed anymore - del call_item - - if exit_pid is not None: - return - - -class _ExecutorManagerThread(threading.Thread): - """Manages the communication between this process and the worker processes. - - The manager is run in a local thread. - - Args: - executor: A reference to the ProcessPoolExecutor that owns - this thread. A weakref will be own by the manager as well as - references to internal objects used to introspect the state of - the executor. - """ - - def __init__(self, executor): - # Store references to necessary internals of the executor. - - # A _ThreadWakeup to allow waking up the queue_manager_thread from the - # main Thread and avoid deadlocks caused by permanently locked queues. - self.thread_wakeup = executor._executor_manager_thread_wakeup - self.shutdown_lock = executor._shutdown_lock - - # A weakref.ref to the ProcessPoolExecutor that owns this thread. Used - # to determine if the ProcessPoolExecutor has been garbage collected - # and that the manager can exit. - # When the executor gets garbage collected, the weakref callback - # will wake up the queue management thread so that it can terminate - # if there is no pending work item. - def weakref_cb(_, - thread_wakeup=self.thread_wakeup, - mp_util_debug=mp.util.debug): - mp_util_debug('Executor collected: triggering callback for' - ' QueueManager wakeup') - thread_wakeup.wakeup() - - self.executor_reference = weakref.ref(executor, weakref_cb) - - # A list of the ctx.Process instances used as workers. - self.processes = executor._processes - - # A ctx.Queue that will be filled with _CallItems derived from - # _WorkItems for processing by the process workers. - self.call_queue = executor._call_queue - - # A ctx.SimpleQueue of _ResultItems generated by the process workers. - self.result_queue = executor._result_queue - - # A queue.Queue of work ids e.g. Queue([5, 6, ...]). - self.work_ids_queue = executor._work_ids - - # Maximum number of tasks a worker process can execute before - # exiting safely - self.max_tasks_per_child = executor._max_tasks_per_child - - # A dict mapping work ids to _WorkItems e.g. - # {5: <_WorkItem...>, 6: <_WorkItem...>, ...} - self.pending_work_items = executor._pending_work_items - - super().__init__() - - def run(self): - # Main loop for the executor manager thread. - - while True: - # gh-109047: During Python finalization, self.call_queue.put() - # creation of a thread can fail with RuntimeError. - try: - self.add_call_item_to_queue() - except BaseException as exc: - cause = format_exception(exc) - self.terminate_broken(cause) - return - - result_item, is_broken, cause = self.wait_result_broken_or_wakeup() - - if is_broken: - self.terminate_broken(cause) - return - if result_item is not None: - self.process_result_item(result_item) - - process_exited = result_item.exit_pid is not None - if process_exited: - p = self.processes.pop(result_item.exit_pid) - p.join() - - # Delete reference to result_item to avoid keeping references - # while waiting on new results. - del result_item - - if executor := self.executor_reference(): - if process_exited: - with self.shutdown_lock: - executor._adjust_process_count() - else: - executor._idle_worker_semaphore.release() - del executor - - if self.is_shutting_down(): - self.flag_executor_shutting_down() - - # When only canceled futures remain in pending_work_items, our - # next call to wait_result_broken_or_wakeup would hang forever. - # This makes sure we have some running futures or none at all. - self.add_call_item_to_queue() - - # Since no new work items can be added, it is safe to shutdown - # this thread if there are no pending work items. - if not self.pending_work_items: - self.join_executor_internals() - return - - def add_call_item_to_queue(self): - # Fills call_queue with _WorkItems from pending_work_items. - # This function never blocks. - while True: - if self.call_queue.full(): - return - try: - work_id = self.work_ids_queue.get(block=False) - except queue.Empty: - return - else: - work_item = self.pending_work_items[work_id] - - if work_item.future.set_running_or_notify_cancel(): - self.call_queue.put(_CallItem(work_id, - work_item.fn, - work_item.args, - work_item.kwargs), - block=True) - else: - del self.pending_work_items[work_id] - continue - - def wait_result_broken_or_wakeup(self): - # Wait for a result to be ready in the result_queue while checking - # that all worker processes are still running, or for a wake up - # signal send. The wake up signals come either from new tasks being - # submitted, from the executor being shutdown/gc-ed, or from the - # shutdown of the python interpreter. - result_reader = self.result_queue._reader - assert not self.thread_wakeup._closed - wakeup_reader = self.thread_wakeup._reader - readers = [result_reader, wakeup_reader] - worker_sentinels = [p.sentinel for p in list(self.processes.values())] - ready = mp.connection.wait(readers + worker_sentinels) - - cause = None - is_broken = True - result_item = None - if result_reader in ready: - try: - result_item = result_reader.recv() - is_broken = False - except BaseException as exc: - cause = format_exception(exc) - - elif wakeup_reader in ready: - is_broken = False - - self.thread_wakeup.clear() - - return result_item, is_broken, cause - - def process_result_item(self, result_item): - # Process the received a result_item. This can be either the PID of a - # worker that exited gracefully or a _ResultItem - - # Received a _ResultItem so mark the future as completed. - work_item = self.pending_work_items.pop(result_item.work_id, None) - # work_item can be None if another process terminated (see above) - if work_item is not None: - if result_item.exception is not None: - work_item.future.set_exception(result_item.exception) - else: - work_item.future.set_result(result_item.result) - - def is_shutting_down(self): - # Check whether we should start shutting down the executor. - executor = self.executor_reference() - # No more work items can be added if: - # - The interpreter is shutting down OR - # - The executor that owns this worker has been collected OR - # - The executor that owns this worker has been shutdown. - return (_global_shutdown or executor is None - or executor._shutdown_thread) - - def _terminate_broken(self, cause): - # Terminate the executor because it is in a broken state. The cause - # argument can be used to display more information on the error that - # lead the executor into becoming broken. - - # Mark the process pool broken so that submits fail right now. - executor = self.executor_reference() - if executor is not None: - executor._broken = ('A child process terminated ' - 'abruptly, the process pool is not ' - 'usable anymore') - executor._shutdown_thread = True - executor = None - - # All pending tasks are to be marked failed with the following - # BrokenProcessPool error - bpe = BrokenProcessPool("A process in the process pool was " - "terminated abruptly while the future was " - "running or pending.") - if cause is not None: - bpe.__cause__ = _RemoteTraceback( - f"\n'''\n{''.join(cause)}'''") - - # Mark pending tasks as failed. - for work_id, work_item in self.pending_work_items.items(): - try: - work_item.future.set_exception(bpe) - except _base.InvalidStateError: - # set_exception() fails if the future is cancelled: ignore it. - # Trying to check if the future is cancelled before calling - # set_exception() would leave a race condition if the future is - # cancelled between the check and set_exception(). - pass - # Delete references to object. See issue16284 - del work_item - self.pending_work_items.clear() - - # Terminate remaining workers forcibly: the queues or their - # locks may be in a dirty state and block forever. - for p in self.processes.values(): - p.terminate() - - self.call_queue._terminate_broken() - - # clean up resources - self._join_executor_internals(broken=True) - - def terminate_broken(self, cause): - with self.shutdown_lock: - self._terminate_broken(cause) - - def flag_executor_shutting_down(self): - # Flag the executor as shutting down and cancel remaining tasks if - # requested as early as possible if it is not gc-ed yet. - executor = self.executor_reference() - if executor is not None: - executor._shutdown_thread = True - # Cancel pending work items if requested. - if executor._cancel_pending_futures: - # Cancel all pending futures and update pending_work_items - # to only have futures that are currently running. - new_pending_work_items = {} - for work_id, work_item in self.pending_work_items.items(): - if not work_item.future.cancel(): - new_pending_work_items[work_id] = work_item - self.pending_work_items = new_pending_work_items - # Drain work_ids_queue since we no longer need to - # add items to the call queue. - while True: - try: - self.work_ids_queue.get_nowait() - except queue.Empty: - break - # Make sure we do this only once to not waste time looping - # on running processes over and over. - executor._cancel_pending_futures = False - - def shutdown_workers(self): - n_children_to_stop = self.get_n_children_alive() - n_sentinels_sent = 0 - # Send the right number of sentinels, to make sure all children are - # properly terminated. - while (n_sentinels_sent < n_children_to_stop - and self.get_n_children_alive() > 0): - for i in range(n_children_to_stop - n_sentinels_sent): - try: - self.call_queue.put_nowait(None) - n_sentinels_sent += 1 - except queue.Full: - break - - def join_executor_internals(self): - with self.shutdown_lock: - self._join_executor_internals() - - def _join_executor_internals(self, broken=False): - # If broken, call_queue was closed and so can no longer be used. - if not broken: - self.shutdown_workers() - - # Release the queue's resources as soon as possible. - self.call_queue.close() - self.call_queue.join_thread() - self.thread_wakeup.close() - - # If .join() is not called on the created processes then - # some ctx.Queue methods may deadlock on Mac OS X. - for p in self.processes.values(): - if broken: - p.terminate() - p.join() - - def get_n_children_alive(self): - # This is an upper bound on the number of children alive. - return sum(p.is_alive() for p in self.processes.values()) - - -_system_limits_checked = False -_system_limited = None - - -def _check_system_limits(): - global _system_limits_checked, _system_limited - if _system_limits_checked: - if _system_limited: - raise NotImplementedError(_system_limited) - _system_limits_checked = True - try: - import multiprocessing.synchronize # noqa: F401 - except ImportError: - _system_limited = ( - "This Python build lacks multiprocessing.synchronize, usually due " - "to named semaphores being unavailable on this platform." - ) - raise NotImplementedError(_system_limited) - try: - nsems_max = os.sysconf("SC_SEM_NSEMS_MAX") - except (AttributeError, ValueError): - # sysconf not available or setting not available - return - if nsems_max == -1: - # indetermined limit, assume that limit is determined - # by available memory only - return - if nsems_max >= 256: - # minimum number of semaphores available - # according to POSIX - return - _system_limited = ("system provides too few semaphores (%d" - " available, 256 necessary)" % nsems_max) - raise NotImplementedError(_system_limited) - - -def _chain_from_iterable_of_lists(iterable): - """ - Specialized implementation of itertools.chain.from_iterable. - Each item in *iterable* should be a list. This function is - careful not to keep references to yielded objects. - """ - for element in iterable: - element.reverse() - while element: - yield element.pop() - - -class BrokenProcessPool(_base.BrokenExecutor): - """ - Raised when a process in a ProcessPoolExecutor terminated abruptly - while a future was in the running state. - """ - -_TERMINATE = "terminate" -_KILL = "kill" - -_SHUTDOWN_CALLBACK_OPERATION = { - _TERMINATE, - _KILL -} - - -class ProcessPoolExecutor(_base.Executor): - def __init__(self, max_workers=None, mp_context=None, - initializer=None, initargs=(), *, max_tasks_per_child=None): - """Initializes a new ProcessPoolExecutor instance. - - Args: - max_workers: The maximum number of processes that can be used to - execute the given calls. If None or not given then as many - worker processes will be created as the machine has processors. - mp_context: A multiprocessing context to launch the workers created - using the multiprocessing.get_context('start method') API. This - object should provide SimpleQueue, Queue and Process. - initializer: A callable used to initialize worker processes. - initargs: A tuple of arguments to pass to the initializer. - max_tasks_per_child: The maximum number of tasks a worker process - can complete before it will exit and be replaced with a fresh - worker process. The default of None means worker process will - live as long as the executor. Requires a non-'fork' mp_context - start method. When given, we default to using 'spawn' if no - mp_context is supplied. - """ - _check_system_limits() - - if max_workers is None: - self._max_workers = os.process_cpu_count() or 1 - if sys.platform == 'win32': - self._max_workers = min(_MAX_WINDOWS_WORKERS, - self._max_workers) - else: - if max_workers <= 0: - raise ValueError("max_workers must be greater than 0") - elif (sys.platform == 'win32' and - max_workers > _MAX_WINDOWS_WORKERS): - raise ValueError( - f"max_workers must be <= {_MAX_WINDOWS_WORKERS}") - - self._max_workers = max_workers - - if mp_context is None: - if max_tasks_per_child is not None: - mp_context = mp.get_context("spawn") - else: - mp_context = mp.get_context() - self._mp_context = mp_context - - # https://github.com/python/cpython/issues/90622 - self._safe_to_dynamically_spawn_children = ( - self._mp_context.get_start_method(allow_none=False) != "fork") - - if initializer is not None and not callable(initializer): - raise TypeError("initializer must be a callable") - self._initializer = initializer - self._initargs = initargs - - if max_tasks_per_child is not None: - if not isinstance(max_tasks_per_child, int): - raise TypeError("max_tasks_per_child must be an integer") - elif max_tasks_per_child <= 0: - raise ValueError("max_tasks_per_child must be >= 1") - if self._mp_context.get_start_method(allow_none=False) == "fork": - # https://github.com/python/cpython/issues/90622 - raise ValueError("max_tasks_per_child is incompatible with" - " the 'fork' multiprocessing start method;" - " supply a different mp_context.") - self._max_tasks_per_child = max_tasks_per_child - - # Management thread - self._executor_manager_thread = None - - # Map of pids to processes - self._processes = {} - - # Shutdown is a two-step process. - self._shutdown_thread = False - self._shutdown_lock = threading.Lock() - self._idle_worker_semaphore = threading.Semaphore(0) - self._broken = False - self._queue_count = 0 - self._pending_work_items = {} - self._cancel_pending_futures = False - - # _ThreadWakeup is a communication channel used to interrupt the wait - # of the main loop of executor_manager_thread from another thread (e.g. - # when calling executor.submit or executor.shutdown). We do not use the - # _result_queue to send wakeup signals to the executor_manager_thread - # as it could result in a deadlock if a worker process dies with the - # _result_queue write lock still acquired. - # - # Care must be taken to only call clear and close from the - # executor_manager_thread, since _ThreadWakeup.clear() is not protected - # by a lock. - self._executor_manager_thread_wakeup = _ThreadWakeup() - - # Create communication channels for the executor - # Make the call queue slightly larger than the number of processes to - # prevent the worker processes from idling. But don't make it too big - # because futures in the call queue cannot be cancelled. - queue_size = self._max_workers + EXTRA_QUEUED_CALLS - self._call_queue = _SafeQueue( - max_size=queue_size, ctx=self._mp_context, - pending_work_items=self._pending_work_items, - thread_wakeup=self._executor_manager_thread_wakeup) - # Killed worker processes can produce spurious "broken pipe" - # tracebacks in the queue's own worker thread. But we detect killed - # processes anyway, so silence the tracebacks. - self._call_queue._ignore_epipe = True - self._result_queue = mp_context.SimpleQueue() - self._work_ids = queue.Queue() - - def _start_executor_manager_thread(self): - if self._executor_manager_thread is None: - # Start the processes so that their sentinels are known. - if not self._safe_to_dynamically_spawn_children: # ie, using fork. - self._launch_processes() - self._executor_manager_thread = _ExecutorManagerThread(self) - self._executor_manager_thread.start() - _threads_wakeups[self._executor_manager_thread] = \ - self._executor_manager_thread_wakeup - - def _adjust_process_count(self): - # gh-132969: avoid error when state is reset and executor is still running, - # which will happen when shutdown(wait=False) is called. - if self._processes is None: - return - - # if there's an idle process, we don't need to spawn a new one. - if self._idle_worker_semaphore.acquire(blocking=False): - return - - process_count = len(self._processes) - if process_count < self._max_workers: - # Assertion disabled as this codepath is also used to replace a - # worker that unexpectedly dies, even when using the 'fork' start - # method. That means there is still a potential deadlock bug. If a - # 'fork' mp_context worker dies, we'll be forking a new one when - # we know a thread is running (self._executor_manager_thread). - #assert self._safe_to_dynamically_spawn_children or not self._executor_manager_thread, 'https://github.com/python/cpython/issues/90622' - self._spawn_process() - - def _launch_processes(self): - # https://github.com/python/cpython/issues/90622 - assert not self._executor_manager_thread, ( - 'Processes cannot be fork()ed after the thread has started, ' - 'deadlock in the child processes could result.') - for _ in range(len(self._processes), self._max_workers): - self._spawn_process() - - def _spawn_process(self): - p = self._mp_context.Process( - target=_process_worker, - args=(self._call_queue, - self._result_queue, - self._initializer, - self._initargs, - self._max_tasks_per_child)) - p.start() - self._processes[p.pid] = p - - def submit(self, fn, /, *args, **kwargs): - with self._shutdown_lock: - if self._broken: - raise BrokenProcessPool(self._broken) - if self._shutdown_thread: - raise RuntimeError('cannot schedule new futures after shutdown') - if _global_shutdown: - raise RuntimeError('cannot schedule new futures after ' - 'interpreter shutdown') - - f = _base.Future() - w = _WorkItem(f, fn, args, kwargs) - - self._pending_work_items[self._queue_count] = w - self._work_ids.put(self._queue_count) - self._queue_count += 1 - # Wake up queue management thread - self._executor_manager_thread_wakeup.wakeup() - - if self._safe_to_dynamically_spawn_children: - self._adjust_process_count() - self._start_executor_manager_thread() - return f - submit.__doc__ = _base.Executor.submit.__doc__ - - def map(self, fn, *iterables, timeout=None, chunksize=1, buffersize=None): - """Returns an iterator equivalent to map(fn, iter). - - Args: - fn: A callable that will take as many arguments as there are - passed iterables. - timeout: The maximum number of seconds to wait. If None, then there - is no limit on the wait time. - chunksize: If greater than one, the iterables will be chopped into - chunks of size chunksize and submitted to the process pool. - If set to one, the items in the list will be sent one at a time. - buffersize: The number of submitted tasks whose results have not - yet been yielded. If the buffer is full, iteration over the - iterables pauses until a result is yielded from the buffer. - If None, all input elements are eagerly collected, and a task is - submitted for each. - - Returns: - An iterator equivalent to: map(func, *iterables) but the calls may - be evaluated out-of-order. - - Raises: - TimeoutError: If the entire result iterator could not be generated - before the given timeout. - Exception: If fn(*args) raises for any values. - """ - if chunksize < 1: - raise ValueError("chunksize must be >= 1.") - - results = super().map(partial(_process_chunk, fn), - itertools.batched(zip(*iterables), chunksize), - timeout=timeout, - buffersize=buffersize) - return _chain_from_iterable_of_lists(results) - - def shutdown(self, wait=True, *, cancel_futures=False): - with self._shutdown_lock: - self._cancel_pending_futures = cancel_futures - self._shutdown_thread = True - if self._executor_manager_thread_wakeup is not None: - # Wake up queue management thread - self._executor_manager_thread_wakeup.wakeup() - - if self._executor_manager_thread is not None and wait: - self._executor_manager_thread.join() - # To reduce the risk of opening too many files, remove references to - # objects that use file descriptors. - self._executor_manager_thread = None - self._call_queue = None - if self._result_queue is not None and wait: - self._result_queue.close() - self._result_queue = None - self._processes = None - self._executor_manager_thread_wakeup = None - - shutdown.__doc__ = _base.Executor.shutdown.__doc__ - - def _force_shutdown(self, operation): - """Attempts to terminate or kill the executor's workers based off the - given operation. Iterates through all of the current processes and - performs the relevant task if the process is still alive. - - After terminating workers, the pool will be in a broken state - and no longer usable (for instance, new tasks should not be - submitted). - """ - if operation not in _SHUTDOWN_CALLBACK_OPERATION: - raise ValueError(f"Unsupported operation: {operation!r}") - - processes = {} - if self._processes: - processes = self._processes.copy() - - # shutdown will invalidate ._processes, so we copy it right before - # calling. If we waited here, we would deadlock if a process decides not - # to exit. - self.shutdown(wait=False, cancel_futures=True) - - if not processes: - return - - for proc in processes.values(): - try: - if not proc.is_alive(): - continue - except ValueError: - # The process is already exited/closed out. - continue - - try: - if operation == _TERMINATE: - proc.terminate() - elif operation == _KILL: - proc.kill() - except ProcessLookupError: - # The process just ended before our signal - continue - - def terminate_workers(self): - """Attempts to terminate the executor's workers. - Iterates through all of the current worker processes and terminates - each one that is still alive. - - After terminating workers, the pool will be in a broken state - and no longer usable (for instance, new tasks should not be - submitted). - """ - return self._force_shutdown(operation=_TERMINATE) - - def kill_workers(self): - """Attempts to kill the executor's workers. - Iterates through all of the current worker processes and kills - each one that is still alive. - - After killing workers, the pool will be in a broken state - and no longer usable (for instance, new tasks should not be - submitted). - """ - return self._force_shutdown(operation=_KILL) diff --git a/Python314_4_x86_Template/Lib/concurrent/futures/thread.py b/Python314_4_x86_Template/Lib/concurrent/futures/thread.py deleted file mode 100644 index 909359b64..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/futures/thread.py +++ /dev/null @@ -1,274 +0,0 @@ -# Copyright 2009 Brian Quinlan. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Implements ThreadPoolExecutor.""" - -__author__ = 'Brian Quinlan (brian@sweetapp.com)' - -from concurrent.futures import _base -import itertools -import queue -import threading -import types -import weakref -import os - - -_threads_queues = weakref.WeakKeyDictionary() -_shutdown = False -# Lock that ensures that new workers are not created while the interpreter is -# shutting down. Must be held while mutating _threads_queues and _shutdown. -_global_shutdown_lock = threading.Lock() - -def _python_exit(): - global _shutdown - with _global_shutdown_lock: - _shutdown = True - items = list(_threads_queues.items()) - for t, q in items: - q.put(None) - for t, q in items: - t.join() - -# Register for `_python_exit()` to be called just before joining all -# non-daemon threads. This is used instead of `atexit.register()` for -# compatibility with subinterpreters, which no longer support daemon threads. -# See bpo-39812 for context. -threading._register_atexit(_python_exit) - -# At fork, reinitialize the `_global_shutdown_lock` lock in the child process -if hasattr(os, 'register_at_fork'): - os.register_at_fork(before=_global_shutdown_lock.acquire, - after_in_child=_global_shutdown_lock._at_fork_reinit, - after_in_parent=_global_shutdown_lock.release) - os.register_at_fork(after_in_child=_threads_queues.clear) - - -class WorkerContext: - - @classmethod - def prepare(cls, initializer, initargs): - if initializer is not None: - if not callable(initializer): - raise TypeError("initializer must be a callable") - def create_context(): - return cls(initializer, initargs) - def resolve_task(fn, args, kwargs): - return (fn, args, kwargs) - return create_context, resolve_task - - def __init__(self, initializer, initargs): - self.initializer = initializer - self.initargs = initargs - - def initialize(self): - if self.initializer is not None: - self.initializer(*self.initargs) - - def finalize(self): - pass - - def run(self, task): - fn, args, kwargs = task - return fn(*args, **kwargs) - - -class _WorkItem: - def __init__(self, future, task): - self.future = future - self.task = task - - def run(self, ctx): - if not self.future.set_running_or_notify_cancel(): - return - - try: - result = ctx.run(self.task) - except BaseException as exc: - self.future.set_exception(exc) - # Break a reference cycle with the exception 'exc' - self = None - else: - self.future.set_result(result) - - __class_getitem__ = classmethod(types.GenericAlias) - - -def _worker(executor_reference, ctx, work_queue): - try: - ctx.initialize() - except BaseException: - _base.LOGGER.critical('Exception in initializer:', exc_info=True) - executor = executor_reference() - if executor is not None: - executor._initializer_failed() - return - try: - while True: - try: - work_item = work_queue.get_nowait() - except queue.Empty: - # attempt to increment idle count if queue is empty - executor = executor_reference() - if executor is not None: - executor._idle_semaphore.release() - del executor - work_item = work_queue.get(block=True) - - if work_item is not None: - work_item.run(ctx) - # Delete references to object. See GH-60488 - del work_item - continue - - executor = executor_reference() - # Exit if: - # - The interpreter is shutting down OR - # - The executor that owns the worker has been collected OR - # - The executor that owns the worker has been shutdown. - if _shutdown or executor is None or executor._shutdown: - # Flag the executor as shutting down as early as possible if it - # is not gc-ed yet. - if executor is not None: - executor._shutdown = True - # Notice other workers - work_queue.put(None) - return - del executor - except BaseException: - _base.LOGGER.critical('Exception in worker', exc_info=True) - finally: - ctx.finalize() - - -class BrokenThreadPool(_base.BrokenExecutor): - """ - Raised when a worker thread in a ThreadPoolExecutor failed initializing. - """ - - -class ThreadPoolExecutor(_base.Executor): - - BROKEN = BrokenThreadPool - - # Used to assign unique thread names when thread_name_prefix is not supplied. - _counter = itertools.count().__next__ - - @classmethod - def prepare_context(cls, initializer, initargs): - return WorkerContext.prepare(initializer, initargs) - - def __init__(self, max_workers=None, thread_name_prefix='', - initializer=None, initargs=(), **ctxkwargs): - """Initializes a new ThreadPoolExecutor instance. - - Args: - max_workers: The maximum number of threads that can be used to - execute the given calls. - thread_name_prefix: An optional name prefix to give our threads. - initializer: A callable used to initialize worker threads. - initargs: A tuple of arguments to pass to the initializer. - ctxkwargs: Additional arguments to cls.prepare_context(). - """ - if max_workers is None: - # ThreadPoolExecutor is often used to: - # * CPU bound task which releases GIL - # * I/O bound task (which releases GIL, of course) - # - # We use process_cpu_count + 4 for both types of tasks. - # But we limit it to 32 to avoid consuming surprisingly large resource - # on many core machine. - max_workers = min(32, (os.process_cpu_count() or 1) + 4) - if max_workers <= 0: - raise ValueError("max_workers must be greater than 0") - - (self._create_worker_context, - self._resolve_work_item_task, - ) = type(self).prepare_context(initializer, initargs, **ctxkwargs) - - self._max_workers = max_workers - self._work_queue = queue.SimpleQueue() - self._idle_semaphore = threading.Semaphore(0) - self._threads = set() - self._broken = False - self._shutdown = False - self._shutdown_lock = threading.Lock() - self._thread_name_prefix = (thread_name_prefix or - ("ThreadPoolExecutor-%d" % self._counter())) - - def submit(self, fn, /, *args, **kwargs): - with self._shutdown_lock, _global_shutdown_lock: - if self._broken: - raise self.BROKEN(self._broken) - - if self._shutdown: - raise RuntimeError('cannot schedule new futures after shutdown') - if _shutdown: - raise RuntimeError('cannot schedule new futures after ' - 'interpreter shutdown') - - f = _base.Future() - task = self._resolve_work_item_task(fn, args, kwargs) - w = _WorkItem(f, task) - - self._work_queue.put(w) - self._adjust_thread_count() - return f - submit.__doc__ = _base.Executor.submit.__doc__ - - def _adjust_thread_count(self): - # if idle threads are available, don't spin new threads - if self._idle_semaphore.acquire(timeout=0): - return - - # When the executor gets lost, the weakref callback will wake up - # the worker threads. - def weakref_cb(_, q=self._work_queue): - q.put(None) - - num_threads = len(self._threads) - if num_threads < self._max_workers: - thread_name = '%s_%d' % (self._thread_name_prefix or self, - num_threads) - t = threading.Thread(name=thread_name, target=_worker, - args=(weakref.ref(self, weakref_cb), - self._create_worker_context(), - self._work_queue)) - t.start() - self._threads.add(t) - _threads_queues[t] = self._work_queue - - def _initializer_failed(self): - with self._shutdown_lock: - self._broken = ('A thread initializer failed, the thread pool ' - 'is not usable anymore') - # Drain work queue and mark pending futures failed - while True: - try: - work_item = self._work_queue.get_nowait() - except queue.Empty: - break - if work_item is not None: - work_item.future.set_exception(self.BROKEN(self._broken)) - - def shutdown(self, wait=True, *, cancel_futures=False): - with self._shutdown_lock: - self._shutdown = True - if cancel_futures: - # Drain all work items from the queue, and then cancel their - # associated futures. - while True: - try: - work_item = self._work_queue.get_nowait() - except queue.Empty: - break - if work_item is not None: - work_item.future.cancel() - - # Send a wake-up to prevent threads calling - # _work_queue.get(block=True) from permanently blocking. - self._work_queue.put(None) - if wait: - for t in self._threads: - t.join() - shutdown.__doc__ = _base.Executor.shutdown.__doc__ diff --git a/Python314_4_x86_Template/Lib/concurrent/interpreters/__init__.py b/Python314_4_x86_Template/Lib/concurrent/interpreters/__init__.py deleted file mode 100644 index ea4147ee9..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/interpreters/__init__.py +++ /dev/null @@ -1,247 +0,0 @@ -"""Subinterpreters High Level Module.""" - -import threading -import weakref -import _interpreters - -# aliases: -from _interpreters import ( - InterpreterError, InterpreterNotFoundError, NotShareableError, - is_shareable, -) -from ._queues import ( - create as create_queue, - Queue, QueueEmpty, QueueFull, -) - - -__all__ = [ - 'get_current', 'get_main', 'create', 'list_all', 'is_shareable', - 'Interpreter', - 'InterpreterError', 'InterpreterNotFoundError', 'ExecutionFailed', - 'NotShareableError', - 'create_queue', 'Queue', 'QueueEmpty', 'QueueFull', -] - - -_EXEC_FAILURE_STR = """ -{superstr} - -Uncaught in the interpreter: - -{formatted} -""".strip() - -class ExecutionFailed(InterpreterError): - """An unhandled exception happened during execution. - - This is raised from Interpreter.exec() and Interpreter.call(). - """ - - def __init__(self, excinfo): - msg = excinfo.formatted - if not msg: - if excinfo.type and excinfo.msg: - msg = f'{excinfo.type.__name__}: {excinfo.msg}' - else: - msg = excinfo.type.__name__ or excinfo.msg - super().__init__(msg) - self.excinfo = excinfo - - def __str__(self): - try: - formatted = self.excinfo.errdisplay - except Exception: - return super().__str__() - else: - return _EXEC_FAILURE_STR.format( - superstr=super().__str__(), - formatted=formatted, - ) - - -def create(): - """Return a new (idle) Python interpreter.""" - id = _interpreters.create(reqrefs=True) - return Interpreter(id, _ownsref=True) - - -def list_all(): - """Return all existing interpreters.""" - return [Interpreter(id, _whence=whence) - for id, whence in _interpreters.list_all(require_ready=True)] - - -def get_current(): - """Return the currently running interpreter.""" - id, whence = _interpreters.get_current() - return Interpreter(id, _whence=whence) - - -def get_main(): - """Return the main interpreter.""" - id, whence = _interpreters.get_main() - assert whence == _interpreters.WHENCE_RUNTIME, repr(whence) - return Interpreter(id, _whence=whence) - - -_known = weakref.WeakValueDictionary() - -class Interpreter: - """A single Python interpreter. - - Attributes: - - "id" - the unique process-global ID number for the interpreter - "whence" - indicates where the interpreter was created - - If the interpreter wasn't created by this module - then any method that modifies the interpreter will fail, - i.e. .close(), .prepare_main(), .exec(), and .call() - """ - - _WHENCE_TO_STR = { - _interpreters.WHENCE_UNKNOWN: 'unknown', - _interpreters.WHENCE_RUNTIME: 'runtime init', - _interpreters.WHENCE_LEGACY_CAPI: 'legacy C-API', - _interpreters.WHENCE_CAPI: 'C-API', - _interpreters.WHENCE_XI: 'cross-interpreter C-API', - _interpreters.WHENCE_STDLIB: '_interpreters module', - } - - def __new__(cls, id, /, _whence=None, _ownsref=None): - # There is only one instance for any given ID. - if not isinstance(id, int): - raise TypeError(f'id must be an int, got {id!r}') - id = int(id) - if _whence is None: - if _ownsref: - _whence = _interpreters.WHENCE_STDLIB - else: - _whence = _interpreters.whence(id) - assert _whence in cls._WHENCE_TO_STR, repr(_whence) - if _ownsref is None: - _ownsref = (_whence == _interpreters.WHENCE_STDLIB) - try: - self = _known[id] - assert hasattr(self, '_ownsref') - except KeyError: - self = super().__new__(cls) - _known[id] = self - self._id = id - self._whence = _whence - self._ownsref = _ownsref - if _ownsref: - # This may raise InterpreterNotFoundError: - _interpreters.incref(id) - return self - - def __repr__(self): - return f'{type(self).__name__}({self.id})' - - def __hash__(self): - return hash(self._id) - - def __del__(self): - self._decref() - - # for pickling: - def __reduce__(self): - return (type(self), (self._id,)) - - # gh-135729: Globals might be destroyed by the time this is called, so we - # need to keep references ourself - def _decref(self, *, - InterpreterNotFoundError=InterpreterNotFoundError, - _interp_decref=_interpreters.decref, - ): - if not self._ownsref: - return - self._ownsref = False - try: - _interp_decref(self._id) - except InterpreterNotFoundError: - pass - - @property - def id(self): - return self._id - - @property - def whence(self): - return self._WHENCE_TO_STR[self._whence] - - def is_running(self): - """Return whether or not the identified interpreter is running.""" - return _interpreters.is_running(self._id) - - # Everything past here is available only to interpreters created by - # interpreters.create(). - - def close(self): - """Finalize and destroy the interpreter. - - Attempting to destroy the current interpreter results - in an InterpreterError. - """ - return _interpreters.destroy(self._id, restrict=True) - - def prepare_main(self, ns=None, /, **kwargs): - """Bind the given values into the interpreter's __main__. - - The values must be shareable. - """ - ns = dict(ns, **kwargs) if ns is not None else kwargs - _interpreters.set___main___attrs(self._id, ns, restrict=True) - - def exec(self, code, /): - """Run the given source code in the interpreter. - - This is essentially the same as calling the builtin "exec" - with this interpreter, using the __dict__ of its __main__ - module as both globals and locals. - - There is no return value. - - If the code raises an unhandled exception then an ExecutionFailed - exception is raised, which summarizes the unhandled exception. - The actual exception is discarded because objects cannot be - shared between interpreters. - - This blocks the current Python thread until done. During - that time, the previous interpreter is allowed to run - in other threads. - """ - excinfo = _interpreters.exec(self._id, code, restrict=True) - if excinfo is not None: - raise ExecutionFailed(excinfo) - - def _call(self, callable, args, kwargs): - res, excinfo = _interpreters.call(self._id, callable, args, kwargs, restrict=True) - if excinfo is not None: - raise ExecutionFailed(excinfo) - return res - - def call(self, callable, /, *args, **kwargs): - """Call the object in the interpreter with given args/kwargs. - - Nearly all callables, args, kwargs, and return values are - supported. All "shareable" objects are supported, as are - "stateless" functions (meaning non-closures that do not use - any globals). This method will fall back to pickle. - - If the callable raises an exception then the error display - (including full traceback) is sent back between the interpreters - and an ExecutionFailed exception is raised, much like what - happens with Interpreter.exec(). - """ - return self._call(callable, args, kwargs) - - def call_in_thread(self, callable, /, *args, **kwargs): - """Return a new thread that calls the object in the interpreter. - - The return value and any raised exception are discarded. - """ - t = threading.Thread(target=self._call, args=(callable, args, kwargs)) - t.start() - return t diff --git a/Python314_4_x86_Template/Lib/concurrent/interpreters/_crossinterp.py b/Python314_4_x86_Template/Lib/concurrent/interpreters/_crossinterp.py deleted file mode 100644 index a5f46b20f..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/interpreters/_crossinterp.py +++ /dev/null @@ -1,107 +0,0 @@ -"""Common code between queues and channels.""" - - -class ItemInterpreterDestroyed(Exception): - """Raised when trying to get an item whose interpreter was destroyed.""" - - -class classonly: - """A non-data descriptor that makes a value only visible on the class. - - This is like the "classmethod" builtin, but does not show up on - instances of the class. It may be used as a decorator. - """ - - def __init__(self, value): - self.value = value - self.getter = classmethod(value).__get__ - self.name = None - - def __set_name__(self, cls, name): - if self.name is not None: - raise TypeError('already used') - self.name = name - - def __get__(self, obj, cls): - if obj is not None: - raise AttributeError(self.name) - # called on the class - return self.getter(None, cls) - - -class UnboundItem: - """Represents a cross-interpreter item no longer bound to an interpreter. - - An item is unbound when the interpreter that added it to the - cross-interpreter container is destroyed. - """ - - __slots__ = () - - @classonly - def singleton(cls, kind, module, name='UNBOUND'): - doc = cls.__doc__ - if doc: - doc = doc.replace( - 'cross-interpreter container', kind, - ).replace( - 'cross-interpreter', kind, - ) - subclass = type( - f'Unbound{kind.capitalize()}Item', - (cls,), - { - "_MODULE": module, - "_NAME": name, - "__doc__": doc, - }, - ) - return object.__new__(subclass) - - _MODULE = __name__ - _NAME = 'UNBOUND' - - def __new__(cls): - raise Exception(f'use {cls._MODULE}.{cls._NAME}') - - def __repr__(self): - return f'{self._MODULE}.{self._NAME}' -# return f'interpreters._queues.UNBOUND' - - -UNBOUND = object.__new__(UnboundItem) -UNBOUND_ERROR = object() -UNBOUND_REMOVE = object() - -_UNBOUND_CONSTANT_TO_FLAG = { - UNBOUND_REMOVE: 1, - UNBOUND_ERROR: 2, - UNBOUND: 3, -} -_UNBOUND_FLAG_TO_CONSTANT = {v: k - for k, v in _UNBOUND_CONSTANT_TO_FLAG.items()} - - -def serialize_unbound(unbound): - op = unbound - try: - flag = _UNBOUND_CONSTANT_TO_FLAG[op] - except KeyError: - raise NotImplementedError(f'unsupported unbound replacement op {op!r}') - return flag, - - -def resolve_unbound(flag, exctype_destroyed): - try: - op = _UNBOUND_FLAG_TO_CONSTANT[flag] - except KeyError: - raise NotImplementedError(f'unsupported unbound replacement op {flag!r}') - if op is UNBOUND_REMOVE: - # "remove" not possible here - raise NotImplementedError - elif op is UNBOUND_ERROR: - raise exctype_destroyed("item's original interpreter destroyed") - elif op is UNBOUND: - return UNBOUND - else: - raise NotImplementedError(repr(op)) diff --git a/Python314_4_x86_Template/Lib/concurrent/interpreters/_queues.py b/Python314_4_x86_Template/Lib/concurrent/interpreters/_queues.py deleted file mode 100644 index 81ea1098d..000000000 --- a/Python314_4_x86_Template/Lib/concurrent/interpreters/_queues.py +++ /dev/null @@ -1,289 +0,0 @@ -"""Cross-interpreter Queues High Level Module.""" - -import pickle -import queue -import time -import weakref -import _interpqueues as _queues -from . import _crossinterp - -# aliases: -from _interpqueues import ( - QueueError, QueueNotFoundError, -) -from ._crossinterp import ( - UNBOUND_ERROR, UNBOUND_REMOVE, -) - -__all__ = [ - 'UNBOUND', 'UNBOUND_ERROR', 'UNBOUND_REMOVE', - 'create', 'list_all', - 'Queue', - 'QueueError', 'QueueNotFoundError', 'QueueEmpty', 'QueueFull', - 'ItemInterpreterDestroyed', -] - - -class QueueEmpty(QueueError, queue.Empty): - """Raised from get_nowait() when the queue is empty. - - It is also raised from get() if it times out. - """ - - -class QueueFull(QueueError, queue.Full): - """Raised from put_nowait() when the queue is full. - - It is also raised from put() if it times out. - """ - - -class ItemInterpreterDestroyed(QueueError, - _crossinterp.ItemInterpreterDestroyed): - """Raised from get() and get_nowait().""" - - -_SHARED_ONLY = 0 -_PICKLED = 1 - - -UNBOUND = _crossinterp.UnboundItem.singleton('queue', __name__) - - -def _serialize_unbound(unbound): - if unbound is UNBOUND: - unbound = _crossinterp.UNBOUND - return _crossinterp.serialize_unbound(unbound) - - -def _resolve_unbound(flag): - resolved = _crossinterp.resolve_unbound(flag, ItemInterpreterDestroyed) - if resolved is _crossinterp.UNBOUND: - resolved = UNBOUND - return resolved - - -def create(maxsize=0, *, unbounditems=UNBOUND): - """Return a new cross-interpreter queue. - - The queue may be used to pass data safely between interpreters. - - "unbounditems" sets the default for Queue.put(); see that method for - supported values. The default value is UNBOUND, which replaces - the unbound item. - """ - unbound = _serialize_unbound(unbounditems) - unboundop, = unbound - qid = _queues.create(maxsize, unboundop, -1) - self = Queue(qid) - self._set_unbound(unboundop, unbounditems) - return self - - -def list_all(): - """Return a list of all open queues.""" - queues = [] - for qid, unboundop, _ in _queues.list_all(): - self = Queue(qid) - if not hasattr(self, '_unbound'): - self._set_unbound(unboundop) - else: - assert self._unbound[0] == unboundop - queues.append(self) - return queues - - -_known_queues = weakref.WeakValueDictionary() - -class Queue: - """A cross-interpreter queue.""" - - def __new__(cls, id, /): - # There is only one instance for any given ID. - if isinstance(id, int): - id = int(id) - else: - raise TypeError(f'id must be an int, got {id!r}') - try: - self = _known_queues[id] - except KeyError: - self = super().__new__(cls) - self._id = id - _known_queues[id] = self - _queues.bind(id) - return self - - def __del__(self): - try: - _queues.release(self._id) - except QueueNotFoundError: - pass - try: - del _known_queues[self._id] - except KeyError: - pass - - def __repr__(self): - return f'{type(self).__name__}({self.id})' - - def __hash__(self): - return hash(self._id) - - # for pickling: - def __reduce__(self): - return (type(self), (self._id,)) - - def _set_unbound(self, op, items=None): - assert not hasattr(self, '_unbound') - if items is None: - items = _resolve_unbound(op) - unbound = (op, items) - self._unbound = unbound - return unbound - - @property - def id(self): - return self._id - - @property - def unbounditems(self): - try: - _, items = self._unbound - except AttributeError: - op, _ = _queues.get_queue_defaults(self._id) - _, items = self._set_unbound(op) - return items - - @property - def maxsize(self): - try: - return self._maxsize - except AttributeError: - self._maxsize = _queues.get_maxsize(self._id) - return self._maxsize - - def empty(self): - return self.qsize() == 0 - - def full(self): - return _queues.is_full(self._id) - - def qsize(self): - return _queues.get_count(self._id) - - def put(self, obj, block=True, timeout=None, *, - unbounditems=None, - _delay=10 / 1000, # 10 milliseconds - ): - """Add the object to the queue. - - If "block" is true, this blocks while the queue is full. - - For most objects, the object received through Queue.get() will - be a new one, equivalent to the original and not sharing any - actual underlying data. The notable exceptions include - cross-interpreter types (like Queue) and memoryview, where the - underlying data is actually shared. Furthermore, some types - can be sent through a queue more efficiently than others. This - group includes various immutable types like int, str, bytes, and - tuple (if the items are likewise efficiently shareable). See interpreters.is_shareable(). - - "unbounditems" controls the behavior of Queue.get() for the given - object if the current interpreter (calling put()) is later - destroyed. - - If "unbounditems" is None (the default) then it uses the - queue's default, set with create_queue(), - which is usually UNBOUND. - - If "unbounditems" is UNBOUND_ERROR then get() will raise an - ItemInterpreterDestroyed exception if the original interpreter - has been destroyed. This does not otherwise affect the queue; - the next call to put() will work like normal, returning the next - item in the queue. - - If "unbounditems" is UNBOUND_REMOVE then the item will be removed - from the queue as soon as the original interpreter is destroyed. - Be aware that this will introduce an imbalance between put() - and get() calls. - - If "unbounditems" is UNBOUND then it is returned by get() in place - of the unbound item. - """ - if not block: - return self.put_nowait(obj, unbounditems=unbounditems) - if unbounditems is None: - unboundop = -1 - else: - unboundop, = _serialize_unbound(unbounditems) - if timeout is not None: - timeout = int(timeout) - if timeout < 0: - raise ValueError(f'timeout value must be non-negative') - end = time.time() + timeout - while True: - try: - _queues.put(self._id, obj, unboundop) - except QueueFull as exc: - if timeout is not None and time.time() >= end: - raise # re-raise - time.sleep(_delay) - else: - break - - def put_nowait(self, obj, *, unbounditems=None): - if unbounditems is None: - unboundop = -1 - else: - unboundop, = _serialize_unbound(unbounditems) - _queues.put(self._id, obj, unboundop) - - def get(self, block=True, timeout=None, *, - _delay=10 / 1000, # 10 milliseconds - ): - """Return the next object from the queue. - - If "block" is true, this blocks while the queue is empty. - - If the next item's original interpreter has been destroyed - then the "next object" is determined by the value of the - "unbounditems" argument to put(). - """ - if not block: - return self.get_nowait() - if timeout is not None: - timeout = int(timeout) - if timeout < 0: - raise ValueError(f'timeout value must be non-negative') - end = time.time() + timeout - while True: - try: - obj, unboundop = _queues.get(self._id) - except QueueEmpty as exc: - if timeout is not None and time.time() >= end: - raise # re-raise - time.sleep(_delay) - else: - break - if unboundop is not None: - assert obj is None, repr(obj) - return _resolve_unbound(unboundop) - return obj - - def get_nowait(self): - """Return the next object from the channel. - - If the queue is empty then raise QueueEmpty. Otherwise this - is the same as get(). - """ - try: - obj, unboundop = _queues.get(self._id) - except QueueEmpty as exc: - raise # re-raise - if unboundop is not None: - assert obj is None, repr(obj) - return _resolve_unbound(unboundop) - return obj - - -_queues._register_heap_types(Queue, QueueEmpty, QueueFull) diff --git a/Python314_4_x86_Template/Lib/configparser.py b/Python314_4_x86_Template/Lib/configparser.py deleted file mode 100644 index d435a5c2f..000000000 --- a/Python314_4_x86_Template/Lib/configparser.py +++ /dev/null @@ -1,1415 +0,0 @@ -"""Configuration file parser. - -A configuration file consists of sections, lead by a "[section]" header, -and followed by "name: value" entries, with continuations and such in -the style of RFC 822. - -Intrinsic defaults can be specified by passing them into the -ConfigParser constructor as a dictionary. - -class: - -ConfigParser -- responsible for parsing a list of - configuration files, and managing the parsed database. - - methods: - - __init__(defaults=None, dict_type=_default_dict, allow_no_value=False, - delimiters=('=', ':'), comment_prefixes=('#', ';'), - inline_comment_prefixes=None, strict=True, - empty_lines_in_values=True, default_section='DEFAULT', - interpolation=<unset>, converters=<unset>, - allow_unnamed_section=False): - Create the parser. When `defaults` is given, it is initialized into the - dictionary or intrinsic defaults. The keys must be strings, the values - must be appropriate for %()s string interpolation. - - When `dict_type` is given, it will be used to create the dictionary - objects for the list of sections, for the options within a section, and - for the default values. - - When `delimiters` is given, it will be used as the set of substrings - that divide keys from values. - - When `comment_prefixes` is given, it will be used as the set of - substrings that prefix comments in empty lines. Comments can be - indented. - - When `inline_comment_prefixes` is given, it will be used as the set of - substrings that prefix comments in non-empty lines. - - When `strict` is True, the parser won't allow for any section or option - duplicates while reading from a single source (file, string or - dictionary). Default is True. - - When `empty_lines_in_values` is False (default: True), each empty line - marks the end of an option. Otherwise, internal empty lines of - a multiline option are kept as part of the value. - - When `allow_no_value` is True (default: False), options without - values are accepted; the value presented for these is None. - - When `default_section` is given, the name of the special section is - named accordingly. By default it is called ``"DEFAULT"`` but this can - be customized to point to any other valid section name. Its current - value can be retrieved using the ``parser_instance.default_section`` - attribute and may be modified at runtime. - - When `interpolation` is given, it should be an Interpolation subclass - instance. It will be used as the handler for option value - pre-processing when using getters. RawConfigParser objects don't do - any sort of interpolation, whereas ConfigParser uses an instance of - BasicInterpolation. The library also provides a ``zc.buildout`` - inspired ExtendedInterpolation implementation. - - When `converters` is given, it should be a dictionary where each key - represents the name of a type converter and each value is a callable - implementing the conversion from string to the desired datatype. Every - converter gets its corresponding get*() method on the parser object and - section proxies. - - When `allow_unnamed_section` is True (default: False), options - without section are accepted: the section for these is - ``configparser.UNNAMED_SECTION``. - - sections() - Return all the configuration section names, sans DEFAULT. - - has_section(section) - Return whether the given section exists. - - has_option(section, option) - Return whether the given option exists in the given section. - - options(section) - Return list of configuration options for the named section. - - read(filenames, encoding=None) - Read and parse the iterable of named configuration files, given by - name. A single filename is also allowed. Non-existing files - are ignored. Return list of successfully read files. - - read_file(f, filename=None) - Read and parse one configuration file, given as a file object. - The filename defaults to f.name; it is only used in error - messages (if f has no `name` attribute, the string `<???>` is used). - - read_string(string) - Read configuration from a given string. - - read_dict(dictionary) - Read configuration from a dictionary. Keys are section names, - values are dictionaries with keys and values that should be present - in the section. If the used dictionary type preserves order, sections - and their keys will be added in order. Values are automatically - converted to strings. - - get(section, option, raw=False, vars=None, fallback=_UNSET) - Return a string value for the named option. All % interpolations are - expanded in the return values, based on the defaults passed into the - constructor and the DEFAULT section. Additional substitutions may be - provided using the `vars` argument, which must be a dictionary whose - contents override any pre-existing defaults. If `option` is a key in - `vars`, the value from `vars` is used. - - getint(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to an integer. - - getfloat(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to a float. - - getboolean(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to a boolean (currently case - insensitively defined as 0, false, no, off for False, and 1, true, - yes, on for True). Returns False or True. - - items(section=_UNSET, raw=False, vars=None) - If section is given, return a list of tuples with (name, value) for - each option in the section. Otherwise, return a list of tuples with - (section_name, section_proxy) for each section, including DEFAULTSECT. - - remove_section(section) - Remove the given file section and all its options. - - remove_option(section, option) - Remove the given option from the given section. - - set(section, option, value) - Set the given option. - - write(fp, space_around_delimiters=True) - Write the configuration state in .ini format. If - `space_around_delimiters` is True (the default), delimiters - between keys and values are surrounded by spaces. -""" - -# Do not import dataclasses; overhead is unacceptable (gh-117703) - -from collections.abc import Iterable, MutableMapping -from collections import ChainMap as _ChainMap -import contextlib -import functools -import io -import itertools -import os -import re -import sys - -__all__ = ("NoSectionError", "DuplicateOptionError", "DuplicateSectionError", - "NoOptionError", "InterpolationError", "InterpolationDepthError", - "InterpolationMissingOptionError", "InterpolationSyntaxError", - "ParsingError", "MissingSectionHeaderError", - "MultilineContinuationError", "UnnamedSectionDisabledError", - "InvalidWriteError", "ConfigParser", "RawConfigParser", - "Interpolation", "BasicInterpolation", "ExtendedInterpolation", - "SectionProxy", "ConverterMapping", - "DEFAULTSECT", "MAX_INTERPOLATION_DEPTH", "UNNAMED_SECTION") - -_default_dict = dict -DEFAULTSECT = "DEFAULT" - -MAX_INTERPOLATION_DEPTH = 10 - - - -# exception classes -class Error(Exception): - """Base class for ConfigParser exceptions.""" - - def __init__(self, msg=''): - self.message = msg - Exception.__init__(self, msg) - - def __repr__(self): - return self.message - - __str__ = __repr__ - - -class NoSectionError(Error): - """Raised when no section matches a requested option.""" - - def __init__(self, section): - Error.__init__(self, 'No section: %r' % (section,)) - self.section = section - self.args = (section, ) - - -class DuplicateSectionError(Error): - """Raised when a section is repeated in an input source. - - Possible repetitions that raise this exception are: multiple creation - using the API or in strict parsers when a section is found more than once - in a single input file, string or dictionary. - """ - - def __init__(self, section, source=None, lineno=None): - msg = [repr(section), " already exists"] - if source is not None: - message = ["While reading from ", repr(source)] - if lineno is not None: - message.append(" [line {0:2d}]".format(lineno)) - message.append(": section ") - message.extend(msg) - msg = message - else: - msg.insert(0, "Section ") - Error.__init__(self, "".join(msg)) - self.section = section - self.source = source - self.lineno = lineno - self.args = (section, source, lineno) - - -class DuplicateOptionError(Error): - """Raised by strict parsers when an option is repeated in an input source. - - Current implementation raises this exception only when an option is found - more than once in a single file, string or dictionary. - """ - - def __init__(self, section, option, source=None, lineno=None): - msg = [repr(option), " in section ", repr(section), - " already exists"] - if source is not None: - message = ["While reading from ", repr(source)] - if lineno is not None: - message.append(" [line {0:2d}]".format(lineno)) - message.append(": option ") - message.extend(msg) - msg = message - else: - msg.insert(0, "Option ") - Error.__init__(self, "".join(msg)) - self.section = section - self.option = option - self.source = source - self.lineno = lineno - self.args = (section, option, source, lineno) - - -class NoOptionError(Error): - """A requested option was not found.""" - - def __init__(self, option, section): - Error.__init__(self, "No option %r in section: %r" % - (option, section)) - self.option = option - self.section = section - self.args = (option, section) - - -class InterpolationError(Error): - """Base class for interpolation-related exceptions.""" - - def __init__(self, option, section, msg): - Error.__init__(self, msg) - self.option = option - self.section = section - self.args = (option, section, msg) - - -class InterpolationMissingOptionError(InterpolationError): - """A string substitution required a setting which was not available.""" - - def __init__(self, option, section, rawval, reference): - msg = ("Bad value substitution: option {!r} in section {!r} contains " - "an interpolation key {!r} which is not a valid option name. " - "Raw value: {!r}".format(option, section, reference, rawval)) - InterpolationError.__init__(self, option, section, msg) - self.reference = reference - self.args = (option, section, rawval, reference) - - -class InterpolationSyntaxError(InterpolationError): - """Raised when the source text contains invalid syntax. - - Current implementation raises this exception when the source text into - which substitutions are made does not conform to the required syntax. - """ - - -class InterpolationDepthError(InterpolationError): - """Raised when substitutions are nested too deeply.""" - - def __init__(self, option, section, rawval): - msg = ("Recursion limit exceeded in value substitution: option {!r} " - "in section {!r} contains an interpolation key which " - "cannot be substituted in {} steps. Raw value: {!r}" - "".format(option, section, MAX_INTERPOLATION_DEPTH, - rawval)) - InterpolationError.__init__(self, option, section, msg) - self.args = (option, section, rawval) - - -class ParsingError(Error): - """Raised when a configuration file does not follow legal syntax.""" - - def __init__(self, source, *args): - super().__init__(f'Source contains parsing errors: {source!r}') - self.source = source - self.errors = [] - self.args = (source, ) - if args: - self.append(*args) - - def append(self, lineno, line): - self.errors.append((lineno, line)) - self.message += '\n\t[line %2d]: %s' % (lineno, repr(line)) - - def combine(self, others): - for other in others: - for error in other.errors: - self.append(*error) - return self - - @staticmethod - def _raise_all(exceptions: Iterable['ParsingError']): - """ - Combine any number of ParsingErrors into one and raise it. - """ - exceptions = iter(exceptions) - with contextlib.suppress(StopIteration): - raise next(exceptions).combine(exceptions) - - - -class MissingSectionHeaderError(ParsingError): - """Raised when a key-value pair is found before any section header.""" - - def __init__(self, filename, lineno, line): - Error.__init__( - self, - 'File contains no section headers.\nfile: %r, line: %d\n%r' % - (filename, lineno, line)) - self.source = filename - self.lineno = lineno - self.line = line - self.args = (filename, lineno, line) - - -class MultilineContinuationError(ParsingError): - """Raised when a key without value is followed by continuation line""" - def __init__(self, filename, lineno, line): - Error.__init__( - self, - "Key without value continued with an indented line.\n" - "file: %r, line: %d\n%r" - %(filename, lineno, line)) - self.source = filename - self.lineno = lineno - self.line = line - self.args = (filename, lineno, line) - - -class UnnamedSectionDisabledError(Error): - """Raised when an attempt to use UNNAMED_SECTION is made with the - feature disabled.""" - def __init__(self): - Error.__init__(self, "Support for UNNAMED_SECTION is disabled.") - - -class _UnnamedSection: - - def __repr__(self): - return "<UNNAMED_SECTION>" - -class InvalidWriteError(Error): - """Raised when attempting to write data that the parser would read back differently. - ex: writing a key which begins with the section header pattern would read back as a - new section """ - - def __init__(self, msg=''): - Error.__init__(self, msg) - - -UNNAMED_SECTION = _UnnamedSection() - - -# Used in parser getters to indicate the default behaviour when a specific -# option is not found it to raise an exception. Created to enable `None` as -# a valid fallback value. -_UNSET = object() - - -class Interpolation: - """Dummy interpolation that passes the value through with no changes.""" - - def before_get(self, parser, section, option, value, defaults): - return value - - def before_set(self, parser, section, option, value): - return value - - def before_read(self, parser, section, option, value): - return value - - def before_write(self, parser, section, option, value): - return value - - -class BasicInterpolation(Interpolation): - """Interpolation as implemented in the classic ConfigParser. - - The option values can contain format strings which refer to other values in - the same section, or values in the special default section. - - For example: - - something: %(dir)s/whatever - - would resolve the "%(dir)s" to the value of dir. All reference - expansions are done late, on demand. If a user needs to use a bare % in - a configuration file, she can escape it by writing %%. Other % usage - is considered a user error and raises `InterpolationSyntaxError`.""" - - _KEYCRE = re.compile(r"%\(([^)]+)\)s") - - def before_get(self, parser, section, option, value, defaults): - L = [] - self._interpolate_some(parser, option, L, value, section, defaults, 1) - return ''.join(L) - - def before_set(self, parser, section, option, value): - tmp_value = value.replace('%%', '') # escaped percent signs - tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax - if '%' in tmp_value: - raise ValueError("invalid interpolation syntax in %r at " - "position %d" % (value, tmp_value.find('%'))) - return value - - def _interpolate_some(self, parser, option, accum, rest, section, map, - depth): - rawval = parser.get(section, option, raw=True, fallback=rest) - if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rawval) - while rest: - p = rest.find("%") - if p < 0: - accum.append(rest) - return - if p > 0: - accum.append(rest[:p]) - rest = rest[p:] - # p is no longer used - c = rest[1:2] - if c == "%": - accum.append("%") - rest = rest[2:] - elif c == "(": - m = self._KEYCRE.match(rest) - if m is None: - raise InterpolationSyntaxError(option, section, - "bad interpolation variable reference %r" % rest) - var = parser.optionxform(m.group(1)) - rest = rest[m.end():] - try: - v = map[var] - except KeyError: - raise InterpolationMissingOptionError( - option, section, rawval, var) from None - if "%" in v: - self._interpolate_some(parser, option, accum, v, - section, map, depth + 1) - else: - accum.append(v) - else: - raise InterpolationSyntaxError( - option, section, - "'%%' must be followed by '%%' or '(', " - "found: %r" % (rest,)) - - -class ExtendedInterpolation(Interpolation): - """Advanced variant of interpolation, supports the syntax used by - `zc.buildout`. Enables interpolation between sections.""" - - _KEYCRE = re.compile(r"\$\{([^}]+)\}") - - def before_get(self, parser, section, option, value, defaults): - L = [] - self._interpolate_some(parser, option, L, value, section, defaults, 1) - return ''.join(L) - - def before_set(self, parser, section, option, value): - tmp_value = value.replace('$$', '') # escaped dollar signs - tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax - if '$' in tmp_value: - raise ValueError("invalid interpolation syntax in %r at " - "position %d" % (value, tmp_value.find('$'))) - return value - - def _interpolate_some(self, parser, option, accum, rest, section, map, - depth): - rawval = parser.get(section, option, raw=True, fallback=rest) - if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rawval) - while rest: - p = rest.find("$") - if p < 0: - accum.append(rest) - return - if p > 0: - accum.append(rest[:p]) - rest = rest[p:] - # p is no longer used - c = rest[1:2] - if c == "$": - accum.append("$") - rest = rest[2:] - elif c == "{": - m = self._KEYCRE.match(rest) - if m is None: - raise InterpolationSyntaxError(option, section, - "bad interpolation variable reference %r" % rest) - path = m.group(1).split(':') - rest = rest[m.end():] - sect = section - opt = option - try: - if len(path) == 1: - opt = parser.optionxform(path[0]) - v = map[opt] - elif len(path) == 2: - sect = path[0] - opt = parser.optionxform(path[1]) - v = parser.get(sect, opt, raw=True) - else: - raise InterpolationSyntaxError( - option, section, - "More than one ':' found: %r" % (rest,)) - except (KeyError, NoSectionError, NoOptionError): - raise InterpolationMissingOptionError( - option, section, rawval, ":".join(path)) from None - if v is None: - continue - if "$" in v: - self._interpolate_some(parser, opt, accum, v, sect, - dict(parser.items(sect, raw=True)), - depth + 1) - else: - accum.append(v) - else: - raise InterpolationSyntaxError( - option, section, - "'$' must be followed by '$' or '{', " - "found: %r" % (rest,)) - - -class _ReadState: - elements_added : set[str] - cursect : dict[str, str] | None = None - sectname : str | None = None - optname : str | None = None - lineno : int = 0 - indent_level : int = 0 - errors : list[ParsingError] - - def __init__(self): - self.elements_added = set() - self.errors = list() - - -class _Line(str): - __slots__ = 'clean', 'has_comments' - - def __new__(cls, val, *args, **kwargs): - return super().__new__(cls, val) - - def __init__(self, val, comments): - trimmed = val.strip() - self.clean = comments.strip(trimmed) - self.has_comments = trimmed != self.clean - - -class _CommentSpec: - def __init__(self, full_prefixes, inline_prefixes): - full_patterns = ( - # prefix at the beginning of a line - fr'^({re.escape(prefix)}).*' - for prefix in full_prefixes - ) - inline_patterns = ( - # prefix at the beginning of the line or following a space - fr'(^|\s)({re.escape(prefix)}.*)' - for prefix in inline_prefixes - ) - self.pattern = re.compile('|'.join(itertools.chain(full_patterns, inline_patterns))) - - def strip(self, text): - return self.pattern.sub('', text).rstrip() - - def wrap(self, text): - return _Line(text, self) - - -class RawConfigParser(MutableMapping): - """ConfigParser that does not do interpolation.""" - - # Regular expressions for parsing section headers and options - _SECT_TMPL = r""" - \[ # [ - (?P<header>.+) # very permissive! - \] # ] - """ - _OPT_TMPL = r""" - (?P<option>.*?) # very permissive! - \s*(?P<vi>{delim})\s* # any number of space/tab, - # followed by any of the - # allowed delimiters, - # followed by any space/tab - (?P<value>.*)$ # everything up to eol - """ - _OPT_NV_TMPL = r""" - (?P<option>.*?) # very permissive! - \s*(?: # any number of space/tab, - (?P<vi>{delim})\s* # optionally followed by - # any of the allowed - # delimiters, followed by any - # space/tab - (?P<value>.*))?$ # everything up to eol - """ - # Interpolation algorithm to be used if the user does not specify another - _DEFAULT_INTERPOLATION = Interpolation() - # Compiled regular expression for matching sections - SECTCRE = re.compile(_SECT_TMPL, re.VERBOSE) - # Compiled regular expression for matching options with typical separators - OPTCRE = re.compile(_OPT_TMPL.format(delim="=|:"), re.VERBOSE) - # Compiled regular expression for matching options with optional values - # delimited using typical separators - OPTCRE_NV = re.compile(_OPT_NV_TMPL.format(delim="=|:"), re.VERBOSE) - # Compiled regular expression for matching leading whitespace in a line - NONSPACECRE = re.compile(r"\S") - # Possible boolean values in the configuration. - BOOLEAN_STATES = {'1': True, 'yes': True, 'true': True, 'on': True, - '0': False, 'no': False, 'false': False, 'off': False} - - def __init__(self, defaults=None, dict_type=_default_dict, - allow_no_value=False, *, delimiters=('=', ':'), - comment_prefixes=('#', ';'), inline_comment_prefixes=None, - strict=True, empty_lines_in_values=True, - default_section=DEFAULTSECT, - interpolation=_UNSET, converters=_UNSET, - allow_unnamed_section=False,): - - self._dict = dict_type - self._sections = self._dict() - self._defaults = self._dict() - self._converters = ConverterMapping(self) - self._proxies = self._dict() - self._proxies[default_section] = SectionProxy(self, default_section) - self._delimiters = tuple(delimiters) - if delimiters == ('=', ':'): - self._optcre = self.OPTCRE_NV if allow_no_value else self.OPTCRE - else: - d = "|".join(re.escape(d) for d in delimiters) - if allow_no_value: - self._optcre = re.compile(self._OPT_NV_TMPL.format(delim=d), - re.VERBOSE) - else: - self._optcre = re.compile(self._OPT_TMPL.format(delim=d), - re.VERBOSE) - self._comments = _CommentSpec(comment_prefixes or (), inline_comment_prefixes or ()) - self._strict = strict - self._allow_no_value = allow_no_value - self._empty_lines_in_values = empty_lines_in_values - self.default_section=default_section - self._interpolation = interpolation - if self._interpolation is _UNSET: - self._interpolation = self._DEFAULT_INTERPOLATION - if self._interpolation is None: - self._interpolation = Interpolation() - if not isinstance(self._interpolation, Interpolation): - raise TypeError( - f"interpolation= must be None or an instance of Interpolation;" - f" got an object of type {type(self._interpolation)}" - ) - if converters is not _UNSET: - self._converters.update(converters) - if defaults: - self._read_defaults(defaults) - self._allow_unnamed_section = allow_unnamed_section - - def defaults(self): - return self._defaults - - def sections(self): - """Return a list of section names, excluding [DEFAULT]""" - # self._sections will never have [DEFAULT] in it - return list(self._sections.keys()) - - def add_section(self, section): - """Create a new section in the configuration. - - Raise DuplicateSectionError if a section by the specified name - already exists. Raise ValueError if name is DEFAULT. - """ - if section == self.default_section: - raise ValueError('Invalid section name: %r' % section) - - if section is UNNAMED_SECTION: - if not self._allow_unnamed_section: - raise UnnamedSectionDisabledError - - if section in self._sections: - raise DuplicateSectionError(section) - self._sections[section] = self._dict() - self._proxies[section] = SectionProxy(self, section) - - def has_section(self, section): - """Indicate whether the named section is present in the configuration. - - The DEFAULT section is not acknowledged. - """ - return section in self._sections - - def options(self, section): - """Return a list of option names for the given section name.""" - try: - opts = self._sections[section].copy() - except KeyError: - raise NoSectionError(section) from None - opts.update(self._defaults) - return list(opts.keys()) - - def read(self, filenames, encoding=None): - """Read and parse a filename or an iterable of filenames. - - Files that cannot be opened are silently ignored; this is - designed so that you can specify an iterable of potential - configuration file locations (e.g. current directory, user's - home directory, systemwide directory), and all existing - configuration files in the iterable will be read. A single - filename may also be given. - - Return list of successfully read files. - """ - if isinstance(filenames, (str, bytes, os.PathLike)): - filenames = [filenames] - encoding = io.text_encoding(encoding) - read_ok = [] - for filename in filenames: - try: - with open(filename, encoding=encoding) as fp: - self._read(fp, filename) - except OSError: - continue - if isinstance(filename, os.PathLike): - filename = os.fspath(filename) - read_ok.append(filename) - return read_ok - - def read_file(self, f, source=None): - """Like read() but the argument must be a file-like object. - - The `f` argument must be iterable, returning one line at a time. - Optional second argument is the `source` specifying the name of the - file being read. If not given, it is taken from f.name. If `f` has no - `name` attribute, `<???>` is used. - """ - if source is None: - try: - source = f.name - except AttributeError: - source = '<???>' - self._read(f, source) - - def read_string(self, string, source='<string>'): - """Read configuration from a given string.""" - sfile = io.StringIO(string) - self.read_file(sfile, source) - - def read_dict(self, dictionary, source='<dict>'): - """Read configuration from a dictionary. - - Keys are section names, values are dictionaries with keys and values - that should be present in the section. If the used dictionary type - preserves order, sections and their keys will be added in order. - - All types held in the dictionary are converted to strings during - reading, including section names, option names and keys. - - Optional second argument is the `source` specifying the name of the - dictionary being read. - """ - elements_added = set() - for section, keys in dictionary.items(): - if section is not UNNAMED_SECTION: - section = str(section) - try: - self.add_section(section) - except (DuplicateSectionError, ValueError): - if self._strict and section in elements_added: - raise - elements_added.add(section) - for key, value in keys.items(): - key = self.optionxform(str(key)) - if value is not None: - value = str(value) - if self._strict and (section, key) in elements_added: - raise DuplicateOptionError(section, key, source) - elements_added.add((section, key)) - self.set(section, key, value) - - def get(self, section, option, *, raw=False, vars=None, fallback=_UNSET): - """Get an option value for a given section. - - If `vars` is provided, it must be a dictionary. The option is looked up - in `vars` (if provided), `section`, and in `DEFAULTSECT` in that order. - If the key is not found and `fallback` is provided, it is used as - a fallback value. `None` can be provided as a `fallback` value. - - If interpolation is enabled and the optional argument `raw` is False, - all interpolations are expanded in the return values. - - Arguments `raw`, `vars`, and `fallback` are keyword only. - - The section DEFAULT is special. - """ - try: - d = self._unify_values(section, vars) - except NoSectionError: - if fallback is _UNSET: - raise - else: - return fallback - option = self.optionxform(option) - try: - value = d[option] - except KeyError: - if fallback is _UNSET: - raise NoOptionError(option, section) - else: - return fallback - - if raw or value is None: - return value - else: - return self._interpolation.before_get(self, section, option, value, - d) - - def _get(self, section, conv, option, **kwargs): - return conv(self.get(section, option, **kwargs)) - - def _get_conv(self, section, option, conv, *, raw=False, vars=None, - fallback=_UNSET, **kwargs): - try: - return self._get(section, conv, option, raw=raw, vars=vars, - **kwargs) - except (NoSectionError, NoOptionError): - if fallback is _UNSET: - raise - return fallback - - # getint, getfloat and getboolean provided directly for backwards compat - def getint(self, section, option, *, raw=False, vars=None, - fallback=_UNSET, **kwargs): - return self._get_conv(section, option, int, raw=raw, vars=vars, - fallback=fallback, **kwargs) - - def getfloat(self, section, option, *, raw=False, vars=None, - fallback=_UNSET, **kwargs): - return self._get_conv(section, option, float, raw=raw, vars=vars, - fallback=fallback, **kwargs) - - def getboolean(self, section, option, *, raw=False, vars=None, - fallback=_UNSET, **kwargs): - return self._get_conv(section, option, self._convert_to_boolean, - raw=raw, vars=vars, fallback=fallback, **kwargs) - - def items(self, section=_UNSET, raw=False, vars=None): - """Return a list of (name, value) tuples for each option in a section. - - All % interpolations are expanded in the return values, based on the - defaults passed into the constructor, unless the optional argument - `raw` is true. Additional substitutions may be provided using the - `vars` argument, which must be a dictionary whose contents overrides - any pre-existing defaults. - - The section DEFAULT is special. - """ - if section is _UNSET: - return super().items() - d = self._defaults.copy() - try: - d.update(self._sections[section]) - except KeyError: - if section != self.default_section: - raise NoSectionError(section) - orig_keys = list(d.keys()) - # Update with the entry specific variables - if vars: - for key, value in vars.items(): - d[self.optionxform(key)] = value - value_getter = lambda option: self._interpolation.before_get(self, - section, option, d[option], d) - if raw: - value_getter = lambda option: d[option] - return [(option, value_getter(option)) for option in orig_keys] - - def popitem(self): - """Remove a section from the parser and return it as - a (section_name, section_proxy) tuple. If no section is present, raise - KeyError. - - The section DEFAULT is never returned because it cannot be removed. - """ - for key in self.sections(): - value = self[key] - del self[key] - return key, value - raise KeyError - - def optionxform(self, optionstr): - return optionstr.lower() - - def has_option(self, section, option): - """Check for the existence of a given option in a given section. - If the specified `section` is None or an empty string, DEFAULT is - assumed. If the specified `section` does not exist, returns False.""" - if not section or section == self.default_section: - option = self.optionxform(option) - return option in self._defaults - elif section not in self._sections: - return False - else: - option = self.optionxform(option) - return (option in self._sections[section] - or option in self._defaults) - - def set(self, section, option, value=None): - """Set an option.""" - if value: - value = self._interpolation.before_set(self, section, option, - value) - if not section or section == self.default_section: - sectdict = self._defaults - else: - try: - sectdict = self._sections[section] - except KeyError: - raise NoSectionError(section) from None - sectdict[self.optionxform(option)] = value - - def write(self, fp, space_around_delimiters=True): - """Write an .ini-format representation of the configuration state. - - If `space_around_delimiters` is True (the default), delimiters - between keys and values are surrounded by spaces. - - Please note that comments in the original configuration file are not - preserved when writing the configuration back. - """ - if space_around_delimiters: - d = " {} ".format(self._delimiters[0]) - else: - d = self._delimiters[0] - if self._defaults: - self._write_section(fp, self.default_section, - self._defaults.items(), d) - if UNNAMED_SECTION in self._sections and self._sections[UNNAMED_SECTION]: - self._write_section(fp, UNNAMED_SECTION, self._sections[UNNAMED_SECTION].items(), d, unnamed=True) - - for section in self._sections: - if section is UNNAMED_SECTION: - continue - self._write_section(fp, section, - self._sections[section].items(), d) - - def _write_section(self, fp, section_name, section_items, delimiter, unnamed=False): - """Write a single section to the specified 'fp'.""" - if not unnamed: - fp.write("[{}]\n".format(section_name)) - for key, value in section_items: - self._validate_key_contents(key) - value = self._interpolation.before_write(self, section_name, key, - value) - if value is not None or not self._allow_no_value: - value = delimiter + str(value).replace('\n', '\n\t') - else: - value = "" - fp.write("{}{}\n".format(key, value)) - fp.write("\n") - - def remove_option(self, section, option): - """Remove an option.""" - if not section or section == self.default_section: - sectdict = self._defaults - else: - try: - sectdict = self._sections[section] - except KeyError: - raise NoSectionError(section) from None - option = self.optionxform(option) - existed = option in sectdict - if existed: - del sectdict[option] - return existed - - def remove_section(self, section): - """Remove a file section.""" - existed = section in self._sections - if existed: - del self._sections[section] - del self._proxies[section] - return existed - - def __getitem__(self, key): - if key != self.default_section and not self.has_section(key): - raise KeyError(key) - return self._proxies[key] - - def __setitem__(self, key, value): - # To conform with the mapping protocol, overwrites existing values in - # the section. - if key in self and self[key] is value: - return - # XXX this is not atomic if read_dict fails at any point. Then again, - # no update method in configparser is atomic in this implementation. - if key == self.default_section: - self._defaults.clear() - elif key in self._sections: - self._sections[key].clear() - self.read_dict({key: value}) - - def __delitem__(self, key): - if key == self.default_section: - raise ValueError("Cannot remove the default section.") - if not self.has_section(key): - raise KeyError(key) - self.remove_section(key) - - def __contains__(self, key): - return key == self.default_section or self.has_section(key) - - def __len__(self): - return len(self._sections) + 1 # the default section - - def __iter__(self): - # XXX does it break when underlying container state changed? - return itertools.chain((self.default_section,), self._sections.keys()) - - def _read(self, fp, fpname): - """Parse a sectioned configuration file. - - Each section in a configuration file contains a header, indicated by - a name in square brackets (`[]`), plus key/value options, indicated by - `name` and `value` delimited with a specific substring (`=` or `:` by - default). - - Values can span multiple lines, as long as they are indented deeper - than the first line of the value. Depending on the parser's mode, blank - lines may be treated as parts of multiline values or ignored. - - Configuration files may include comments, prefixed by specific - characters (`#` and `;` by default). Comments may appear on their own - in an otherwise empty line or may be entered in lines holding values or - section names. Please note that comments get stripped off when reading configuration files. - """ - try: - ParsingError._raise_all(self._read_inner(fp, fpname)) - finally: - self._join_multiline_values() - - def _read_inner(self, fp, fpname): - st = _ReadState() - - for st.lineno, line in enumerate(map(self._comments.wrap, fp), start=1): - if not line.clean: - if self._empty_lines_in_values: - # add empty line to the value, but only if there was no - # comment on the line - if (not line.has_comments and - st.cursect is not None and - st.optname and - st.cursect[st.optname] is not None): - st.cursect[st.optname].append('') # newlines added at join - else: - # empty line marks end of value - st.indent_level = sys.maxsize - continue - - first_nonspace = self.NONSPACECRE.search(line) - st.cur_indent_level = first_nonspace.start() if first_nonspace else 0 - - if self._handle_continuation_line(st, line, fpname): - continue - - self._handle_rest(st, line, fpname) - - return st.errors - - def _handle_continuation_line(self, st, line, fpname): - # continuation line? - is_continue = (st.cursect is not None and st.optname and - st.cur_indent_level > st.indent_level) - if is_continue: - if st.cursect[st.optname] is None: - raise MultilineContinuationError(fpname, st.lineno, line) - st.cursect[st.optname].append(line.clean) - return is_continue - - def _handle_rest(self, st, line, fpname): - # a section header or option header? - if self._allow_unnamed_section and st.cursect is None: - self._handle_header(st, UNNAMED_SECTION, fpname) - - st.indent_level = st.cur_indent_level - # is it a section header? - mo = self.SECTCRE.match(line.clean) - - if not mo and st.cursect is None: - raise MissingSectionHeaderError(fpname, st.lineno, line) - - self._handle_header(st, mo.group('header'), fpname) if mo else self._handle_option(st, line, fpname) - - def _handle_header(self, st, sectname, fpname): - st.sectname = sectname - if st.sectname in self._sections: - if self._strict and st.sectname in st.elements_added: - raise DuplicateSectionError(st.sectname, fpname, - st.lineno) - st.cursect = self._sections[st.sectname] - st.elements_added.add(st.sectname) - elif st.sectname == self.default_section: - st.cursect = self._defaults - else: - st.cursect = self._dict() - self._sections[st.sectname] = st.cursect - self._proxies[st.sectname] = SectionProxy(self, st.sectname) - st.elements_added.add(st.sectname) - # So sections can't start with a continuation line - st.optname = None - - def _handle_option(self, st, line, fpname): - # an option line? - st.indent_level = st.cur_indent_level - - mo = self._optcre.match(line.clean) - if not mo: - # a non-fatal parsing error occurred. set up the - # exception but keep going. the exception will be - # raised at the end of the file and will contain a - # list of all bogus lines - st.errors.append(ParsingError(fpname, st.lineno, line)) - return - - st.optname, vi, optval = mo.group('option', 'vi', 'value') - if not st.optname: - st.errors.append(ParsingError(fpname, st.lineno, line)) - st.optname = self.optionxform(st.optname.rstrip()) - if (self._strict and - (st.sectname, st.optname) in st.elements_added): - raise DuplicateOptionError(st.sectname, st.optname, - fpname, st.lineno) - st.elements_added.add((st.sectname, st.optname)) - # This check is fine because the OPTCRE cannot - # match if it would set optval to None - if optval is not None: - optval = optval.strip() - st.cursect[st.optname] = [optval] - else: - # valueless option handling - st.cursect[st.optname] = None - - def _join_multiline_values(self): - defaults = self.default_section, self._defaults - all_sections = itertools.chain((defaults,), - self._sections.items()) - for section, options in all_sections: - for name, val in options.items(): - if isinstance(val, list): - val = '\n'.join(val).rstrip() - options[name] = self._interpolation.before_read(self, - section, - name, val) - - def _read_defaults(self, defaults): - """Read the defaults passed in the initializer. - Note: values can be non-string.""" - for key, value in defaults.items(): - self._defaults[self.optionxform(key)] = value - - def _unify_values(self, section, vars): - """Create a sequence of lookups with 'vars' taking priority over - the 'section' which takes priority over the DEFAULTSECT. - - """ - sectiondict = {} - try: - sectiondict = self._sections[section] - except KeyError: - if section != self.default_section: - raise NoSectionError(section) from None - # Update with the entry specific variables - vardict = {} - if vars: - for key, value in vars.items(): - if value is not None: - value = str(value) - vardict[self.optionxform(key)] = value - return _ChainMap(vardict, sectiondict, self._defaults) - - def _convert_to_boolean(self, value): - """Return a boolean value translating from other types if necessary. - """ - if value.lower() not in self.BOOLEAN_STATES: - raise ValueError('Not a boolean: %s' % value) - return self.BOOLEAN_STATES[value.lower()] - - def _validate_key_contents(self, key): - """Raises an InvalidWriteError for any keys containing - delimiters or that begins with the section header pattern""" - if re.match(self.SECTCRE, key): - raise InvalidWriteError( - f"Cannot write key {key}; begins with section pattern") - for delim in self._delimiters: - if delim in key: - raise InvalidWriteError( - f"Cannot write key {key}; contains delimiter {delim}") - - def _validate_value_types(self, *, section="", option="", value=""): - """Raises a TypeError for illegal non-string values. - - Legal non-string values are UNNAMED_SECTION and falsey values if - they are allowed. - - For compatibility reasons this method is not used in classic set() - for RawConfigParsers. It is invoked in every case for mapping protocol - access and in ConfigParser.set(). - """ - if section is UNNAMED_SECTION: - if not self._allow_unnamed_section: - raise UnnamedSectionDisabledError - elif not isinstance(section, str): - raise TypeError("section names must be strings or UNNAMED_SECTION") - if not isinstance(option, str): - raise TypeError("option keys must be strings") - if not self._allow_no_value or value: - if not isinstance(value, str): - raise TypeError("option values must be strings") - - @property - def converters(self): - return self._converters - - -class ConfigParser(RawConfigParser): - """ConfigParser implementing interpolation.""" - - _DEFAULT_INTERPOLATION = BasicInterpolation() - - def set(self, section, option, value=None): - """Set an option. Extends RawConfigParser.set by validating type and - interpolation syntax on the value.""" - self._validate_value_types(option=option, value=value) - super().set(section, option, value) - - def add_section(self, section): - """Create a new section in the configuration. Extends - RawConfigParser.add_section by validating if the section name is - a string.""" - self._validate_value_types(section=section) - super().add_section(section) - - def _read_defaults(self, defaults): - """Reads the defaults passed in the initializer, implicitly converting - values to strings like the rest of the API. - - Does not perform interpolation for backwards compatibility. - """ - try: - hold_interpolation = self._interpolation - self._interpolation = Interpolation() - self.read_dict({self.default_section: defaults}) - finally: - self._interpolation = hold_interpolation - - -class SectionProxy(MutableMapping): - """A proxy for a single section from a parser.""" - - def __init__(self, parser, name): - """Creates a view on a section of the specified `name` in `parser`.""" - self._parser = parser - self._name = name - for conv in parser.converters: - key = 'get' + conv - getter = functools.partial(self.get, _impl=getattr(parser, key)) - setattr(self, key, getter) - - def __repr__(self): - return '<Section: {}>'.format(self._name) - - def __getitem__(self, key): - if not self._parser.has_option(self._name, key): - raise KeyError(key) - return self._parser.get(self._name, key) - - def __setitem__(self, key, value): - self._parser._validate_value_types(option=key, value=value) - return self._parser.set(self._name, key, value) - - def __delitem__(self, key): - if not (self._parser.has_option(self._name, key) and - self._parser.remove_option(self._name, key)): - raise KeyError(key) - - def __contains__(self, key): - return self._parser.has_option(self._name, key) - - def __len__(self): - return len(self._options()) - - def __iter__(self): - return self._options().__iter__() - - def _options(self): - if self._name != self._parser.default_section: - return self._parser.options(self._name) - else: - return self._parser.defaults() - - @property - def parser(self): - # The parser object of the proxy is read-only. - return self._parser - - @property - def name(self): - # The name of the section on a proxy is read-only. - return self._name - - def get(self, option, fallback=None, *, raw=False, vars=None, - _impl=None, **kwargs): - """Get an option value. - - Unless `fallback` is provided, `None` will be returned if the option - is not found. - - """ - # If `_impl` is provided, it should be a getter method on the parser - # object that provides the desired type conversion. - if not _impl: - _impl = self._parser.get - return _impl(self._name, option, raw=raw, vars=vars, - fallback=fallback, **kwargs) - - -class ConverterMapping(MutableMapping): - """Enables reuse of get*() methods between the parser and section proxies. - - If a parser class implements a getter directly, the value for the given - key will be ``None``. The presence of the converter name here enables - section proxies to find and use the implementation on the parser class. - """ - - GETTERCRE = re.compile(r"^get(?P<name>.+)$") - - def __init__(self, parser): - self._parser = parser - self._data = {} - for getter in dir(self._parser): - m = self.GETTERCRE.match(getter) - if not m or not callable(getattr(self._parser, getter)): - continue - self._data[m.group('name')] = None # See class docstring. - - def __getitem__(self, key): - return self._data[key] - - def __setitem__(self, key, value): - try: - k = 'get' + key - except TypeError: - raise ValueError('Incompatible key: {} (type: {})' - ''.format(key, type(key))) - if k == 'get': - raise ValueError('Incompatible key: cannot use "" as a name') - self._data[key] = value - func = functools.partial(self._parser._get_conv, conv=value) - func.converter = value - setattr(self._parser, k, func) - for proxy in self._parser.values(): - getter = functools.partial(proxy.get, _impl=func) - setattr(proxy, k, getter) - - def __delitem__(self, key): - try: - k = 'get' + (key or None) - except TypeError: - raise KeyError(key) - del self._data[key] - for inst in itertools.chain((self._parser,), self._parser.values()): - try: - delattr(inst, k) - except AttributeError: - # don't raise since the entry was present in _data, silently - # clean up - continue - - def __iter__(self): - return iter(self._data) - - def __len__(self): - return len(self._data) diff --git a/Python314_4_x86_Template/Lib/contextlib.py b/Python314_4_x86_Template/Lib/contextlib.py deleted file mode 100644 index 5b646fabc..000000000 --- a/Python314_4_x86_Template/Lib/contextlib.py +++ /dev/null @@ -1,814 +0,0 @@ -"""Utilities for with-statement contexts. See PEP 343.""" -import abc -import os -import sys -import _collections_abc -from collections import deque -from functools import wraps -from types import MethodType, GenericAlias - -__all__ = ["asynccontextmanager", "contextmanager", "closing", "nullcontext", - "AbstractContextManager", "AbstractAsyncContextManager", - "AsyncExitStack", "ContextDecorator", "ExitStack", - "redirect_stdout", "redirect_stderr", "suppress", "aclosing", - "chdir"] - - -class AbstractContextManager(abc.ABC): - - """An abstract base class for context managers.""" - - __class_getitem__ = classmethod(GenericAlias) - - __slots__ = () - - def __enter__(self): - """Return `self` upon entering the runtime context.""" - return self - - @abc.abstractmethod - def __exit__(self, exc_type, exc_value, traceback): - """Raise any exception triggered within the runtime context.""" - return None - - @classmethod - def __subclasshook__(cls, C): - if cls is AbstractContextManager: - return _collections_abc._check_methods(C, "__enter__", "__exit__") - return NotImplemented - - -class AbstractAsyncContextManager(abc.ABC): - - """An abstract base class for asynchronous context managers.""" - - __class_getitem__ = classmethod(GenericAlias) - - __slots__ = () - - async def __aenter__(self): - """Return `self` upon entering the runtime context.""" - return self - - @abc.abstractmethod - async def __aexit__(self, exc_type, exc_value, traceback): - """Raise any exception triggered within the runtime context.""" - return None - - @classmethod - def __subclasshook__(cls, C): - if cls is AbstractAsyncContextManager: - return _collections_abc._check_methods(C, "__aenter__", - "__aexit__") - return NotImplemented - - -class ContextDecorator(object): - "A base class or mixin that enables context managers to work as decorators." - - def _recreate_cm(self): - """Return a recreated instance of self. - - Allows an otherwise one-shot context manager like - _GeneratorContextManager to support use as - a decorator via implicit recreation. - - This is a private interface just for _GeneratorContextManager. - See issue #11647 for details. - """ - return self - - def __call__(self, func): - @wraps(func) - def inner(*args, **kwds): - with self._recreate_cm(): - return func(*args, **kwds) - return inner - - -class AsyncContextDecorator(object): - "A base class or mixin that enables async context managers to work as decorators." - - def _recreate_cm(self): - """Return a recreated instance of self. - """ - return self - - def __call__(self, func): - @wraps(func) - async def inner(*args, **kwds): - async with self._recreate_cm(): - return await func(*args, **kwds) - return inner - - -class _GeneratorContextManagerBase: - """Shared functionality for @contextmanager and @asynccontextmanager.""" - - def __init__(self, func, args, kwds): - self.gen = func(*args, **kwds) - self.func, self.args, self.kwds = func, args, kwds - # Issue 19330: ensure context manager instances have good docstrings - doc = getattr(func, "__doc__", None) - if doc is None: - doc = type(self).__doc__ - self.__doc__ = doc - # Unfortunately, this still doesn't provide good help output when - # inspecting the created context manager instances, since pydoc - # currently bypasses the instance docstring and shows the docstring - # for the class instead. - # See http://bugs.python.org/issue19404 for more details. - - def _recreate_cm(self): - # _GCMB instances are one-shot context managers, so the - # CM must be recreated each time a decorated function is - # called - return self.__class__(self.func, self.args, self.kwds) - - -class _GeneratorContextManager( - _GeneratorContextManagerBase, - AbstractContextManager, - ContextDecorator, -): - """Helper for @contextmanager decorator.""" - - def __enter__(self): - # do not keep args and kwds alive unnecessarily - # they are only needed for recreation, which is not possible anymore - del self.args, self.kwds, self.func - try: - return next(self.gen) - except StopIteration: - raise RuntimeError("generator didn't yield") from None - - def __exit__(self, typ, value, traceback): - if typ is None: - try: - next(self.gen) - except StopIteration: - return False - else: - try: - raise RuntimeError("generator didn't stop") - finally: - self.gen.close() - else: - if value is None: - # Need to force instantiation so we can reliably - # tell if we get the same exception back - value = typ() - try: - self.gen.throw(value) - except StopIteration as exc: - # Suppress StopIteration *unless* it's the same exception that - # was passed to throw(). This prevents a StopIteration - # raised inside the "with" statement from being suppressed. - return exc is not value - except RuntimeError as exc: - # Don't re-raise the passed in exception. (issue27122) - if exc is value: - exc.__traceback__ = traceback - return False - # Avoid suppressing if a StopIteration exception - # was passed to throw() and later wrapped into a RuntimeError - # (see PEP 479 for sync generators; async generators also - # have this behavior). But do this only if the exception wrapped - # by the RuntimeError is actually Stop(Async)Iteration (see - # issue29692). - if ( - isinstance(value, StopIteration) - and exc.__cause__ is value - ): - value.__traceback__ = traceback - return False - raise - except BaseException as exc: - # only re-raise if it's *not* the exception that was - # passed to throw(), because __exit__() must not raise - # an exception unless __exit__() itself failed. But throw() - # has to raise the exception to signal propagation, so this - # fixes the impedance mismatch between the throw() protocol - # and the __exit__() protocol. - if exc is not value: - raise - exc.__traceback__ = traceback - return False - try: - raise RuntimeError("generator didn't stop after throw()") - finally: - self.gen.close() - -class _AsyncGeneratorContextManager( - _GeneratorContextManagerBase, - AbstractAsyncContextManager, - AsyncContextDecorator, -): - """Helper for @asynccontextmanager decorator.""" - - async def __aenter__(self): - # do not keep args and kwds alive unnecessarily - # they are only needed for recreation, which is not possible anymore - del self.args, self.kwds, self.func - try: - return await anext(self.gen) - except StopAsyncIteration: - raise RuntimeError("generator didn't yield") from None - - async def __aexit__(self, typ, value, traceback): - if typ is None: - try: - await anext(self.gen) - except StopAsyncIteration: - return False - else: - try: - raise RuntimeError("generator didn't stop") - finally: - await self.gen.aclose() - else: - if value is None: - # Need to force instantiation so we can reliably - # tell if we get the same exception back - value = typ() - try: - await self.gen.athrow(value) - except StopAsyncIteration as exc: - # Suppress StopIteration *unless* it's the same exception that - # was passed to throw(). This prevents a StopIteration - # raised inside the "with" statement from being suppressed. - return exc is not value - except RuntimeError as exc: - # Don't re-raise the passed in exception. (issue27122) - if exc is value: - exc.__traceback__ = traceback - return False - # Avoid suppressing if a Stop(Async)Iteration exception - # was passed to athrow() and later wrapped into a RuntimeError - # (see PEP 479 for sync generators; async generators also - # have this behavior). But do this only if the exception wrapped - # by the RuntimeError is actually Stop(Async)Iteration (see - # issue29692). - if ( - isinstance(value, (StopIteration, StopAsyncIteration)) - and exc.__cause__ is value - ): - value.__traceback__ = traceback - return False - raise - except BaseException as exc: - # only re-raise if it's *not* the exception that was - # passed to throw(), because __exit__() must not raise - # an exception unless __exit__() itself failed. But throw() - # has to raise the exception to signal propagation, so this - # fixes the impedance mismatch between the throw() protocol - # and the __exit__() protocol. - if exc is not value: - raise - exc.__traceback__ = traceback - return False - try: - raise RuntimeError("generator didn't stop after athrow()") - finally: - await self.gen.aclose() - - -def contextmanager(func): - """@contextmanager decorator. - - Typical usage: - - @contextmanager - def some_generator(<arguments>): - <setup> - try: - yield <value> - finally: - <cleanup> - - This makes this: - - with some_generator(<arguments>) as <variable>: - <body> - - equivalent to this: - - <setup> - try: - <variable> = <value> - <body> - finally: - <cleanup> - """ - @wraps(func) - def helper(*args, **kwds): - return _GeneratorContextManager(func, args, kwds) - return helper - - -def asynccontextmanager(func): - """@asynccontextmanager decorator. - - Typical usage: - - @asynccontextmanager - async def some_async_generator(<arguments>): - <setup> - try: - yield <value> - finally: - <cleanup> - - This makes this: - - async with some_async_generator(<arguments>) as <variable>: - <body> - - equivalent to this: - - <setup> - try: - <variable> = <value> - <body> - finally: - <cleanup> - """ - @wraps(func) - def helper(*args, **kwds): - return _AsyncGeneratorContextManager(func, args, kwds) - return helper - - -class closing(AbstractContextManager): - """Context to automatically close something at the end of a block. - - Code like this: - - with closing(<module>.open(<arguments>)) as f: - <block> - - is equivalent to this: - - f = <module>.open(<arguments>) - try: - <block> - finally: - f.close() - - """ - def __init__(self, thing): - self.thing = thing - def __enter__(self): - return self.thing - def __exit__(self, *exc_info): - self.thing.close() - - -class aclosing(AbstractAsyncContextManager): - """Async context manager for safely finalizing an asynchronously cleaned-up - resource such as an async generator, calling its ``aclose()`` method. - - Code like this: - - async with aclosing(<module>.fetch(<arguments>)) as agen: - <block> - - is equivalent to this: - - agen = <module>.fetch(<arguments>) - try: - <block> - finally: - await agen.aclose() - - """ - def __init__(self, thing): - self.thing = thing - async def __aenter__(self): - return self.thing - async def __aexit__(self, *exc_info): - await self.thing.aclose() - - -class _RedirectStream(AbstractContextManager): - - _stream = None - - def __init__(self, new_target): - self._new_target = new_target - # We use a list of old targets to make this CM re-entrant - self._old_targets = [] - - def __enter__(self): - self._old_targets.append(getattr(sys, self._stream)) - setattr(sys, self._stream, self._new_target) - return self._new_target - - def __exit__(self, exctype, excinst, exctb): - setattr(sys, self._stream, self._old_targets.pop()) - - -class redirect_stdout(_RedirectStream): - """Context manager for temporarily redirecting stdout to another file. - - # How to send help() to stderr - with redirect_stdout(sys.stderr): - help(dir) - - # How to write help() to a file - with open('help.txt', 'w') as f: - with redirect_stdout(f): - help(pow) - """ - - _stream = "stdout" - - -class redirect_stderr(_RedirectStream): - """Context manager for temporarily redirecting stderr to another file.""" - - _stream = "stderr" - - -class suppress(AbstractContextManager): - """Context manager to suppress specified exceptions - - After the exception is suppressed, execution proceeds with the next - statement following the with statement. - - with suppress(FileNotFoundError): - os.remove(somefile) - # Execution still resumes here if the file was already removed - """ - - def __init__(self, *exceptions): - self._exceptions = exceptions - - def __enter__(self): - pass - - def __exit__(self, exctype, excinst, exctb): - # Unlike isinstance and issubclass, CPython exception handling - # currently only looks at the concrete type hierarchy (ignoring - # the instance and subclass checking hooks). While Guido considers - # that a bug rather than a feature, it's a fairly hard one to fix - # due to various internal implementation details. suppress provides - # the simpler issubclass based semantics, rather than trying to - # exactly reproduce the limitations of the CPython interpreter. - # - # See http://bugs.python.org/issue12029 for more details - if exctype is None: - return - if issubclass(exctype, self._exceptions): - return True - if issubclass(exctype, BaseExceptionGroup): - match, rest = excinst.split(self._exceptions) - if rest is None: - return True - raise rest - return False - - -class _BaseExitStack: - """A base class for ExitStack and AsyncExitStack.""" - - @staticmethod - def _create_exit_wrapper(cm, cm_exit): - return MethodType(cm_exit, cm) - - @staticmethod - def _create_cb_wrapper(callback, /, *args, **kwds): - def _exit_wrapper(exc_type, exc, tb): - callback(*args, **kwds) - return _exit_wrapper - - def __init__(self): - self._exit_callbacks = deque() - - def pop_all(self): - """Preserve the context stack by transferring it to a new instance.""" - new_stack = type(self)() - new_stack._exit_callbacks = self._exit_callbacks - self._exit_callbacks = deque() - return new_stack - - def push(self, exit): - """Registers a callback with the standard __exit__ method signature. - - Can suppress exceptions the same way __exit__ method can. - Also accepts any object with an __exit__ method (registering a call - to the method instead of the object itself). - """ - # We use an unbound method rather than a bound method to follow - # the standard lookup behaviour for special methods. - _cb_type = type(exit) - - try: - exit_method = _cb_type.__exit__ - except AttributeError: - # Not a context manager, so assume it's a callable. - self._push_exit_callback(exit) - else: - self._push_cm_exit(exit, exit_method) - return exit # Allow use as a decorator. - - def enter_context(self, cm): - """Enters the supplied context manager. - - If successful, also pushes its __exit__ method as a callback and - returns the result of the __enter__ method. - """ - # We look up the special methods on the type to match the with - # statement. - cls = type(cm) - try: - _enter = cls.__enter__ - _exit = cls.__exit__ - except AttributeError: - raise TypeError(f"'{cls.__module__}.{cls.__qualname__}' object does " - f"not support the context manager protocol") from None - result = _enter(cm) - self._push_cm_exit(cm, _exit) - return result - - def callback(self, callback, /, *args, **kwds): - """Registers an arbitrary callback and arguments. - - Cannot suppress exceptions. - """ - _exit_wrapper = self._create_cb_wrapper(callback, *args, **kwds) - - # We changed the signature, so using @wraps is not appropriate, but - # setting __wrapped__ may still help with introspection. - _exit_wrapper.__wrapped__ = callback - self._push_exit_callback(_exit_wrapper) - return callback # Allow use as a decorator - - def _push_cm_exit(self, cm, cm_exit): - """Helper to correctly register callbacks to __exit__ methods.""" - _exit_wrapper = self._create_exit_wrapper(cm, cm_exit) - self._push_exit_callback(_exit_wrapper, True) - - def _push_exit_callback(self, callback, is_sync=True): - self._exit_callbacks.append((is_sync, callback)) - - -# Inspired by discussions on http://bugs.python.org/issue13585 -class ExitStack(_BaseExitStack, AbstractContextManager): - """Context manager for dynamic management of a stack of exit callbacks. - - For example: - with ExitStack() as stack: - files = [stack.enter_context(open(fname)) for fname in filenames] - # All opened files will automatically be closed at the end of - # the with statement, even if attempts to open files later - # in the list raise an exception. - """ - - def __enter__(self): - return self - - def __exit__(self, *exc_details): - exc = exc_details[1] - received_exc = exc is not None - - # We manipulate the exception state so it behaves as though - # we were actually nesting multiple with statements - frame_exc = sys.exception() - def _fix_exception_context(new_exc, old_exc): - # Context may not be correct, so find the end of the chain - while 1: - exc_context = new_exc.__context__ - if exc_context is None or exc_context is old_exc: - # Context is already set correctly (see issue 20317) - return - if exc_context is frame_exc: - break - new_exc = exc_context - # Change the end of the chain to point to the exception - # we expect it to reference - new_exc.__context__ = old_exc - - # Callbacks are invoked in LIFO order to match the behaviour of - # nested context managers - suppressed_exc = False - pending_raise = False - while self._exit_callbacks: - is_sync, cb = self._exit_callbacks.pop() - assert is_sync - try: - if exc is None: - exc_details = None, None, None - else: - exc_details = type(exc), exc, exc.__traceback__ - if cb(*exc_details): - suppressed_exc = True - pending_raise = False - exc = None - except BaseException as new_exc: - # simulate the stack of exceptions by setting the context - _fix_exception_context(new_exc, exc) - pending_raise = True - exc = new_exc - - if pending_raise: - try: - # bare "raise exc" replaces our carefully - # set-up context - fixed_ctx = exc.__context__ - raise exc - except BaseException: - exc.__context__ = fixed_ctx - raise - return received_exc and suppressed_exc - - def close(self): - """Immediately unwind the context stack.""" - self.__exit__(None, None, None) - - -# Inspired by discussions on https://bugs.python.org/issue29302 -class AsyncExitStack(_BaseExitStack, AbstractAsyncContextManager): - """Async context manager for dynamic management of a stack of exit - callbacks. - - For example: - async with AsyncExitStack() as stack: - connections = [await stack.enter_async_context(get_connection()) - for i in range(5)] - # All opened connections will automatically be released at the - # end of the async with statement, even if attempts to open a - # connection later in the list raise an exception. - """ - - @staticmethod - def _create_async_exit_wrapper(cm, cm_exit): - return MethodType(cm_exit, cm) - - @staticmethod - def _create_async_cb_wrapper(callback, /, *args, **kwds): - async def _exit_wrapper(exc_type, exc, tb): - await callback(*args, **kwds) - return _exit_wrapper - - async def enter_async_context(self, cm): - """Enters the supplied async context manager. - - If successful, also pushes its __aexit__ method as a callback and - returns the result of the __aenter__ method. - """ - cls = type(cm) - try: - _enter = cls.__aenter__ - _exit = cls.__aexit__ - except AttributeError: - raise TypeError(f"'{cls.__module__}.{cls.__qualname__}' object does " - f"not support the asynchronous context manager protocol" - ) from None - result = await _enter(cm) - self._push_async_cm_exit(cm, _exit) - return result - - def push_async_exit(self, exit): - """Registers a coroutine function with the standard __aexit__ method - signature. - - Can suppress exceptions the same way __aexit__ method can. - Also accepts any object with an __aexit__ method (registering a call - to the method instead of the object itself). - """ - _cb_type = type(exit) - try: - exit_method = _cb_type.__aexit__ - except AttributeError: - # Not an async context manager, so assume it's a coroutine function - self._push_exit_callback(exit, False) - else: - self._push_async_cm_exit(exit, exit_method) - return exit # Allow use as a decorator - - def push_async_callback(self, callback, /, *args, **kwds): - """Registers an arbitrary coroutine function and arguments. - - Cannot suppress exceptions. - """ - _exit_wrapper = self._create_async_cb_wrapper(callback, *args, **kwds) - - # We changed the signature, so using @wraps is not appropriate, but - # setting __wrapped__ may still help with introspection. - _exit_wrapper.__wrapped__ = callback - self._push_exit_callback(_exit_wrapper, False) - return callback # Allow use as a decorator - - async def aclose(self): - """Immediately unwind the context stack.""" - await self.__aexit__(None, None, None) - - def _push_async_cm_exit(self, cm, cm_exit): - """Helper to correctly register coroutine function to __aexit__ - method.""" - _exit_wrapper = self._create_async_exit_wrapper(cm, cm_exit) - self._push_exit_callback(_exit_wrapper, False) - - async def __aenter__(self): - return self - - async def __aexit__(self, *exc_details): - exc = exc_details[1] - received_exc = exc is not None - - # We manipulate the exception state so it behaves as though - # we were actually nesting multiple with statements - frame_exc = sys.exception() - def _fix_exception_context(new_exc, old_exc): - # Context may not be correct, so find the end of the chain - while 1: - exc_context = new_exc.__context__ - if exc_context is None or exc_context is old_exc: - # Context is already set correctly (see issue 20317) - return - if exc_context is frame_exc: - break - new_exc = exc_context - # Change the end of the chain to point to the exception - # we expect it to reference - new_exc.__context__ = old_exc - - # Callbacks are invoked in LIFO order to match the behaviour of - # nested context managers - suppressed_exc = False - pending_raise = False - while self._exit_callbacks: - is_sync, cb = self._exit_callbacks.pop() - try: - if exc is None: - exc_details = None, None, None - else: - exc_details = type(exc), exc, exc.__traceback__ - if is_sync: - cb_suppress = cb(*exc_details) - else: - cb_suppress = await cb(*exc_details) - - if cb_suppress: - suppressed_exc = True - pending_raise = False - exc = None - except BaseException as new_exc: - # simulate the stack of exceptions by setting the context - _fix_exception_context(new_exc, exc) - pending_raise = True - exc = new_exc - - if pending_raise: - try: - # bare "raise exc" replaces our carefully - # set-up context - fixed_ctx = exc.__context__ - raise exc - except BaseException: - exc.__context__ = fixed_ctx - raise - return received_exc and suppressed_exc - - -class nullcontext(AbstractContextManager, AbstractAsyncContextManager): - """Context manager that does no additional processing. - - Used as a stand-in for a normal context manager, when a particular - block of code is only sometimes used with a normal context manager: - - cm = optional_cm if condition else nullcontext() - with cm: - # Perform operation, using optional_cm if condition is True - """ - - def __init__(self, enter_result=None): - self.enter_result = enter_result - - def __enter__(self): - return self.enter_result - - def __exit__(self, *excinfo): - pass - - async def __aenter__(self): - return self.enter_result - - async def __aexit__(self, *excinfo): - pass - - -class chdir(AbstractContextManager): - """Non thread-safe context manager to change the current working directory.""" - - def __init__(self, path): - self.path = path - self._old_cwd = [] - - def __enter__(self): - self._old_cwd.append(os.getcwd()) - os.chdir(self.path) - - def __exit__(self, *excinfo): - os.chdir(self._old_cwd.pop()) diff --git a/Python314_4_x86_Template/Lib/contextvars.py b/Python314_4_x86_Template/Lib/contextvars.py deleted file mode 100644 index 14514f185..000000000 --- a/Python314_4_x86_Template/Lib/contextvars.py +++ /dev/null @@ -1,8 +0,0 @@ -import _collections_abc -from _contextvars import Context, ContextVar, Token, copy_context - - -__all__ = ('Context', 'ContextVar', 'Token', 'copy_context') - - -_collections_abc.Mapping.register(Context) diff --git a/Python314_4_x86_Template/Lib/copy.py b/Python314_4_x86_Template/Lib/copy.py deleted file mode 100644 index c64fc0761..000000000 --- a/Python314_4_x86_Template/Lib/copy.py +++ /dev/null @@ -1,286 +0,0 @@ -"""Generic (shallow and deep) copying operations. - -Interface summary: - - import copy - - x = copy.copy(y) # make a shallow copy of y - x = copy.deepcopy(y) # make a deep copy of y - x = copy.replace(y, a=1, b=2) # new object with fields replaced, as defined by `__replace__` - -For module specific errors, copy.Error is raised. - -The difference between shallow and deep copying is only relevant for -compound objects (objects that contain other objects, like lists or -class instances). - -- A shallow copy constructs a new compound object and then (to the - extent possible) inserts *the same objects* into it that the - original contains. - -- A deep copy constructs a new compound object and then, recursively, - inserts *copies* into it of the objects found in the original. - -Two problems often exist with deep copy operations that don't exist -with shallow copy operations: - - a) recursive objects (compound objects that, directly or indirectly, - contain a reference to themselves) may cause a recursive loop - - b) because deep copy copies *everything* it may copy too much, e.g. - administrative data structures that should be shared even between - copies - -Python's deep copy operation avoids these problems by: - - a) keeping a table of objects already copied during the current - copying pass - - b) letting user-defined classes override the copying operation or the - set of components copied - -This version does not copy types like module, class, function, method, -nor stack trace, stack frame, nor file, socket, window, nor any -similar types. - -Classes can use the same interfaces to control copying that they use -to control pickling: they can define methods called __getinitargs__(), -__getstate__() and __setstate__(). See the documentation for module -"pickle" for information on these methods. -""" - -import types -import weakref -from copyreg import dispatch_table - -class Error(Exception): - pass -error = Error # backward compatibility - -__all__ = ["Error", "copy", "deepcopy", "replace"] - -def copy(x): - """Shallow copy operation on arbitrary Python objects. - - See the module's __doc__ string for more info. - """ - - cls = type(x) - - if cls in _copy_atomic_types: - return x - if cls in _copy_builtin_containers: - return cls.copy(x) - - - if issubclass(cls, type): - # treat it as a regular class: - return x - - copier = getattr(cls, "__copy__", None) - if copier is not None: - return copier(x) - - reductor = dispatch_table.get(cls) - if reductor is not None: - rv = reductor(x) - else: - reductor = getattr(x, "__reduce_ex__", None) - if reductor is not None: - rv = reductor(4) - else: - reductor = getattr(x, "__reduce__", None) - if reductor: - rv = reductor() - else: - raise Error("un(shallow)copyable object of type %s" % cls) - - if isinstance(rv, str): - return x - return _reconstruct(x, None, *rv) - - -_copy_atomic_types = {types.NoneType, int, float, bool, complex, str, tuple, - bytes, frozenset, type, range, slice, property, - types.BuiltinFunctionType, types.EllipsisType, - types.NotImplementedType, types.FunctionType, types.CodeType, - weakref.ref, super} -_copy_builtin_containers = {list, dict, set, bytearray} - -def deepcopy(x, memo=None, _nil=[]): - """Deep copy operation on arbitrary Python objects. - - See the module's __doc__ string for more info. - """ - - cls = type(x) - - if cls in _atomic_types: - return x - - d = id(x) - if memo is None: - memo = {} - else: - y = memo.get(d, _nil) - if y is not _nil: - return y - - copier = _deepcopy_dispatch.get(cls) - if copier is not None: - y = copier(x, memo) - else: - if issubclass(cls, type): - y = x # atomic copy - else: - copier = getattr(x, "__deepcopy__", None) - if copier is not None: - y = copier(memo) - else: - reductor = dispatch_table.get(cls) - if reductor: - rv = reductor(x) - else: - reductor = getattr(x, "__reduce_ex__", None) - if reductor is not None: - rv = reductor(4) - else: - reductor = getattr(x, "__reduce__", None) - if reductor: - rv = reductor() - else: - raise Error( - "un(deep)copyable object of type %s" % cls) - if isinstance(rv, str): - y = x - else: - y = _reconstruct(x, memo, *rv) - - # If is its own copy, don't memoize. - if y is not x: - memo[d] = y - _keep_alive(x, memo) # Make sure x lives at least as long as d - return y - -_atomic_types = {types.NoneType, types.EllipsisType, types.NotImplementedType, - int, float, bool, complex, bytes, str, types.CodeType, type, range, - types.BuiltinFunctionType, types.FunctionType, weakref.ref, property} - -_deepcopy_dispatch = d = {} - - -def _deepcopy_list(x, memo, deepcopy=deepcopy): - y = [] - memo[id(x)] = y - append = y.append - for a in x: - append(deepcopy(a, memo)) - return y -d[list] = _deepcopy_list - -def _deepcopy_tuple(x, memo, deepcopy=deepcopy): - y = [deepcopy(a, memo) for a in x] - # We're not going to put the tuple in the memo, but it's still important we - # check for it, in case the tuple contains recursive mutable structures. - try: - return memo[id(x)] - except KeyError: - pass - for k, j in zip(x, y): - if k is not j: - y = tuple(y) - break - else: - y = x - return y -d[tuple] = _deepcopy_tuple - -def _deepcopy_dict(x, memo, deepcopy=deepcopy): - y = {} - memo[id(x)] = y - for key, value in x.items(): - y[deepcopy(key, memo)] = deepcopy(value, memo) - return y -d[dict] = _deepcopy_dict - -def _deepcopy_method(x, memo): # Copy instance methods - return type(x)(x.__func__, deepcopy(x.__self__, memo)) -d[types.MethodType] = _deepcopy_method - -del d - -def _keep_alive(x, memo): - """Keeps a reference to the object x in the memo. - - Because we remember objects by their id, we have - to assure that possibly temporary objects are kept - alive by referencing them. - We store a reference at the id of the memo, which should - normally not be used unless someone tries to deepcopy - the memo itself... - """ - try: - memo[id(memo)].append(x) - except KeyError: - # aha, this is the first one :-) - memo[id(memo)]=[x] - -def _reconstruct(x, memo, func, args, - state=None, listiter=None, dictiter=None, - *, deepcopy=deepcopy): - deep = memo is not None - if deep and args: - args = (deepcopy(arg, memo) for arg in args) - y = func(*args) - if deep: - memo[id(x)] = y - - if state is not None: - if deep: - state = deepcopy(state, memo) - if hasattr(y, '__setstate__'): - y.__setstate__(state) - else: - if isinstance(state, tuple) and len(state) == 2: - state, slotstate = state - else: - slotstate = None - if state is not None: - y.__dict__.update(state) - if slotstate is not None: - for key, value in slotstate.items(): - setattr(y, key, value) - - if listiter is not None: - if deep: - for item in listiter: - item = deepcopy(item, memo) - y.append(item) - else: - for item in listiter: - y.append(item) - if dictiter is not None: - if deep: - for key, value in dictiter: - key = deepcopy(key, memo) - value = deepcopy(value, memo) - y[key] = value - else: - for key, value in dictiter: - y[key] = value - return y - -del types, weakref - - -def replace(obj, /, **changes): - """Return a new object replacing specified fields with new values. - - This is especially useful for immutable objects, like named tuples or - frozen dataclasses. - """ - cls = obj.__class__ - func = getattr(cls, '__replace__', None) - if func is None: - raise TypeError(f"replace() does not support {cls.__name__} objects") - return func(obj, **changes) diff --git a/Python314_4_x86_Template/Lib/copyreg.py b/Python314_4_x86_Template/Lib/copyreg.py deleted file mode 100644 index a5e8add4a..000000000 --- a/Python314_4_x86_Template/Lib/copyreg.py +++ /dev/null @@ -1,222 +0,0 @@ -"""Helper to provide extensibility for pickle. - -This is only useful to add pickle support for extension types defined in -C, not for instances of user-defined classes. -""" - -__all__ = ["pickle", "constructor", - "add_extension", "remove_extension", "clear_extension_cache"] - -dispatch_table = {} - -def pickle(ob_type, pickle_function, constructor_ob=None): - if not callable(pickle_function): - raise TypeError("reduction functions must be callable") - dispatch_table[ob_type] = pickle_function - - # The constructor_ob function is a vestige of safe for unpickling. - # There is no reason for the caller to pass it anymore. - if constructor_ob is not None: - constructor(constructor_ob) - -def constructor(object): - if not callable(object): - raise TypeError("constructors must be callable") - -# Example: provide pickling support for complex numbers. - -def pickle_complex(c): - return complex, (c.real, c.imag) - -pickle(complex, pickle_complex, complex) - -def pickle_union(obj): - import typing, operator - return operator.getitem, (typing.Union, obj.__args__) - -pickle(type(int | str), pickle_union) - -def pickle_super(obj): - return super, (obj.__thisclass__, obj.__self__) - -pickle(super, pickle_super) - -# Support for pickling new-style objects - -def _reconstructor(cls, base, state): - if base is object: - obj = object.__new__(cls) - else: - obj = base.__new__(cls, state) - if base.__init__ != object.__init__: - base.__init__(obj, state) - return obj - -_HEAPTYPE = 1<<9 -_new_type = type(int.__new__) - -# Python code for object.__reduce_ex__ for protocols 0 and 1 - -def _reduce_ex(self, proto): - assert proto < 2 - cls = self.__class__ - for base in cls.__mro__: - if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE: - break - new = base.__new__ - if isinstance(new, _new_type) and new.__self__ is base: - break - else: - base = object # not really reachable - if base is object: - state = None - else: - if base is cls: - raise TypeError(f"cannot pickle {cls.__name__!r} object") - state = base(self) - args = (cls, base, state) - try: - getstate = self.__getstate__ - except AttributeError: - if getattr(self, "__slots__", None): - raise TypeError(f"cannot pickle {cls.__name__!r} object: " - f"a class that defines __slots__ without " - f"defining __getstate__ cannot be pickled " - f"with protocol {proto}") from None - try: - dict = self.__dict__ - except AttributeError: - dict = None - else: - if (type(self).__getstate__ is object.__getstate__ and - getattr(self, "__slots__", None)): - raise TypeError("a class that defines __slots__ without " - "defining __getstate__ cannot be pickled") - dict = getstate() - if dict: - return _reconstructor, args, dict - else: - return _reconstructor, args - -# Helper for __reduce_ex__ protocol 2 - -def __newobj__(cls, *args): - return cls.__new__(cls, *args) - -def __newobj_ex__(cls, args, kwargs): - """Used by pickle protocol 4, instead of __newobj__ to allow classes with - keyword-only arguments to be pickled correctly. - """ - return cls.__new__(cls, *args, **kwargs) - -def _slotnames(cls): - """Return a list of slot names for a given class. - - This needs to find slots defined by the class and its bases, so we - can't simply return the __slots__ attribute. We must walk down - the Method Resolution Order and concatenate the __slots__ of each - class found there. (This assumes classes don't modify their - __slots__ attribute to misrepresent their slots after the class is - defined.) - """ - - # Get the value from a cache in the class if possible - names = cls.__dict__.get("__slotnames__") - if names is not None: - return names - - # Not cached -- calculate the value - names = [] - if not hasattr(cls, "__slots__"): - # This class has no slots - pass - else: - # Slots found -- gather slot names from all base classes - for c in cls.__mro__: - if "__slots__" in c.__dict__: - slots = c.__dict__['__slots__'] - # if class has a single slot, it can be given as a string - if isinstance(slots, str): - slots = (slots,) - for name in slots: - # special descriptors - if name in ("__dict__", "__weakref__"): - continue - # mangled names - elif name.startswith('__') and not name.endswith('__'): - stripped = c.__name__.lstrip('_') - if stripped: - names.append('_%s%s' % (stripped, name)) - else: - names.append(name) - else: - names.append(name) - - # Cache the outcome in the class if at all possible - try: - cls.__slotnames__ = names - except: - pass # But don't die if we can't - - return names - -# A registry of extension codes. This is an ad-hoc compression -# mechanism. Whenever a global reference to <module>, <name> is about -# to be pickled, the (<module>, <name>) tuple is looked up here to see -# if it is a registered extension code for it. Extension codes are -# universal, so that the meaning of a pickle does not depend on -# context. (There are also some codes reserved for local use that -# don't have this restriction.) Codes are positive ints; 0 is -# reserved. - -_extension_registry = {} # key -> code -_inverted_registry = {} # code -> key -_extension_cache = {} # code -> object -# Don't ever rebind those names: pickling grabs a reference to them when -# it's initialized, and won't see a rebinding. - -def add_extension(module, name, code): - """Register an extension code.""" - code = int(code) - if not 1 <= code <= 0x7fffffff: - raise ValueError("code out of range") - key = (module, name) - if (_extension_registry.get(key) == code and - _inverted_registry.get(code) == key): - return # Redundant registrations are benign - if key in _extension_registry: - raise ValueError("key %s is already registered with code %s" % - (key, _extension_registry[key])) - if code in _inverted_registry: - raise ValueError("code %s is already in use for key %s" % - (code, _inverted_registry[code])) - _extension_registry[key] = code - _inverted_registry[code] = key - -def remove_extension(module, name, code): - """Unregister an extension code. For testing only.""" - key = (module, name) - if (_extension_registry.get(key) != code or - _inverted_registry.get(code) != key): - raise ValueError("key %s is not registered with code %s" % - (key, code)) - del _extension_registry[key] - del _inverted_registry[code] - if code in _extension_cache: - del _extension_cache[code] - -def clear_extension_cache(): - _extension_cache.clear() - -# Standard extension code assignments - -# Reserved ranges - -# First Last Count Purpose -# 1 127 127 Reserved for Python standard library -# 128 191 64 Reserved for Zope -# 192 239 48 Reserved for 3rd parties -# 240 255 16 Reserved for private use (will never be assigned) -# 256 Inf Inf Reserved for future assignment - -# Extension codes are assigned by the Python Software Foundation. diff --git a/Python314_4_x86_Template/Lib/csv.py b/Python314_4_x86_Template/Lib/csv.py deleted file mode 100644 index 0a627ba7a..000000000 --- a/Python314_4_x86_Template/Lib/csv.py +++ /dev/null @@ -1,513 +0,0 @@ - -r""" -CSV parsing and writing. - -This module provides classes that assist in the reading and writing -of Comma Separated Value (CSV) files, and implements the interface -described by PEP 305. Although many CSV files are simple to parse, -the format is not formally defined by a stable specification and -is subtle enough that parsing lines of a CSV file with something -like line.split(",") is bound to fail. The module supports three -basic APIs: reading, writing, and registration of dialects. - - -DIALECT REGISTRATION: - -Readers and writers support a dialect argument, which is a convenient -handle on a group of settings. When the dialect argument is a string, -it identifies one of the dialects previously registered with the module. -If it is a class or instance, the attributes of the argument are used as -the settings for the reader or writer: - - class excel: - delimiter = ',' - quotechar = '"' - escapechar = None - doublequote = True - skipinitialspace = False - lineterminator = '\r\n' - quoting = QUOTE_MINIMAL - -SETTINGS: - - * quotechar - specifies a one-character string to use as the - quoting character. It defaults to '"'. - * delimiter - specifies a one-character string to use as the - field separator. It defaults to ','. - * skipinitialspace - specifies how to interpret spaces which - immediately follow a delimiter. It defaults to False, which - means that spaces immediately following a delimiter is part - of the following field. - * lineterminator - specifies the character sequence which should - terminate rows. - * quoting - controls when quotes should be generated by the writer. - It can take on any of the following module constants: - - csv.QUOTE_MINIMAL means only when required, for example, when a - field contains either the quotechar or the delimiter - csv.QUOTE_ALL means that quotes are always placed around fields. - csv.QUOTE_NONNUMERIC means that quotes are always placed around - fields which do not parse as integers or floating-point - numbers. - csv.QUOTE_STRINGS means that quotes are always placed around - fields which are strings. Note that the Python value None - is not a string. - csv.QUOTE_NOTNULL means that quotes are only placed around fields - that are not the Python value None. - csv.QUOTE_NONE means that quotes are never placed around fields. - * escapechar - specifies a one-character string used to escape - the delimiter when quoting is set to QUOTE_NONE. - * doublequote - controls the handling of quotes inside fields. When - True, two consecutive quotes are interpreted as one during read, - and when writing, each quote character embedded in the data is - written as two quotes -""" - -import types -from _csv import Error, writer, reader, register_dialect, \ - unregister_dialect, get_dialect, list_dialects, \ - field_size_limit, \ - QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE, \ - QUOTE_STRINGS, QUOTE_NOTNULL -from _csv import Dialect as _Dialect - -from io import StringIO - -__all__ = ["QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE", - "QUOTE_STRINGS", "QUOTE_NOTNULL", - "Error", "Dialect", "excel", "excel_tab", - "field_size_limit", "reader", "writer", - "register_dialect", "get_dialect", "list_dialects", "Sniffer", - "unregister_dialect", "DictReader", "DictWriter", - "unix_dialect"] - -__version__ = "1.0" - - -class Dialect: - """Describe a CSV dialect. - - This must be subclassed (see csv.excel). Valid attributes are: - delimiter, quotechar, escapechar, doublequote, skipinitialspace, - lineterminator, quoting. - - """ - _name = "" - _valid = False - # placeholders - delimiter = None - quotechar = None - escapechar = None - doublequote = None - skipinitialspace = None - lineterminator = None - quoting = None - - def __init__(self): - if self.__class__ != Dialect: - self._valid = True - self._validate() - - def _validate(self): - try: - _Dialect(self) - except TypeError as e: - # Re-raise to get a traceback showing more user code. - raise Error(str(e)) from None - -class excel(Dialect): - """Describe the usual properties of Excel-generated CSV files.""" - delimiter = ',' - quotechar = '"' - doublequote = True - skipinitialspace = False - lineterminator = '\r\n' - quoting = QUOTE_MINIMAL -register_dialect("excel", excel) - -class excel_tab(excel): - """Describe the usual properties of Excel-generated TAB-delimited files.""" - delimiter = '\t' -register_dialect("excel-tab", excel_tab) - -class unix_dialect(Dialect): - """Describe the usual properties of Unix-generated CSV files.""" - delimiter = ',' - quotechar = '"' - doublequote = True - skipinitialspace = False - lineterminator = '\n' - quoting = QUOTE_ALL -register_dialect("unix", unix_dialect) - - -class DictReader: - def __init__(self, f, fieldnames=None, restkey=None, restval=None, - dialect="excel", *args, **kwds): - if fieldnames is not None and iter(fieldnames) is fieldnames: - fieldnames = list(fieldnames) - self._fieldnames = fieldnames # list of keys for the dict - self.restkey = restkey # key to catch long rows - self.restval = restval # default value for short rows - self.reader = reader(f, dialect, *args, **kwds) - self.dialect = dialect - self.line_num = 0 - - def __iter__(self): - return self - - @property - def fieldnames(self): - if self._fieldnames is None: - try: - self._fieldnames = next(self.reader) - except StopIteration: - pass - self.line_num = self.reader.line_num - return self._fieldnames - - @fieldnames.setter - def fieldnames(self, value): - self._fieldnames = value - - def __next__(self): - if self.line_num == 0: - # Used only for its side effect. - self.fieldnames - row = next(self.reader) - self.line_num = self.reader.line_num - - # unlike the basic reader, we prefer not to return blanks, - # because we will typically wind up with a dict full of None - # values - while row == []: - row = next(self.reader) - d = dict(zip(self.fieldnames, row)) - lf = len(self.fieldnames) - lr = len(row) - if lf < lr: - d[self.restkey] = row[lf:] - elif lf > lr: - for key in self.fieldnames[lr:]: - d[key] = self.restval - return d - - __class_getitem__ = classmethod(types.GenericAlias) - - -class DictWriter: - def __init__(self, f, fieldnames, restval="", extrasaction="raise", - dialect="excel", *args, **kwds): - if fieldnames is not None and iter(fieldnames) is fieldnames: - fieldnames = list(fieldnames) - self.fieldnames = fieldnames # list of keys for the dict - self.restval = restval # for writing short dicts - extrasaction = extrasaction.lower() - if extrasaction not in ("raise", "ignore"): - raise ValueError("extrasaction (%s) must be 'raise' or 'ignore'" - % extrasaction) - self.extrasaction = extrasaction - self.writer = writer(f, dialect, *args, **kwds) - - def writeheader(self): - header = dict(zip(self.fieldnames, self.fieldnames)) - return self.writerow(header) - - def _dict_to_list(self, rowdict): - if self.extrasaction == "raise": - wrong_fields = rowdict.keys() - self.fieldnames - if wrong_fields: - raise ValueError("dict contains fields not in fieldnames: " - + ", ".join([repr(x) for x in wrong_fields])) - return (rowdict.get(key, self.restval) for key in self.fieldnames) - - def writerow(self, rowdict): - return self.writer.writerow(self._dict_to_list(rowdict)) - - def writerows(self, rowdicts): - return self.writer.writerows(map(self._dict_to_list, rowdicts)) - - __class_getitem__ = classmethod(types.GenericAlias) - - -class Sniffer: - ''' - "Sniffs" the format of a CSV file (i.e. delimiter, quotechar) - Returns a Dialect object. - ''' - def __init__(self): - # in case there is more than one possible delimiter - self.preferred = [',', '\t', ';', ' ', ':'] - - - def sniff(self, sample, delimiters=None): - """ - Returns a dialect (or None) corresponding to the sample - """ - - quotechar, doublequote, delimiter, skipinitialspace = \ - self._guess_quote_and_delimiter(sample, delimiters) - if not delimiter: - delimiter, skipinitialspace = self._guess_delimiter(sample, - delimiters) - - if not delimiter: - raise Error("Could not determine delimiter") - - class dialect(Dialect): - _name = "sniffed" - lineterminator = '\r\n' - quoting = QUOTE_MINIMAL - # escapechar = '' - - dialect.doublequote = doublequote - dialect.delimiter = delimiter - # _csv.reader won't accept a quotechar of '' - dialect.quotechar = quotechar or '"' - dialect.skipinitialspace = skipinitialspace - - return dialect - - - def _guess_quote_and_delimiter(self, data, delimiters): - """ - Looks for text enclosed between two identical quotes - (the probable quotechar) which are preceded and followed - by the same character (the probable delimiter). - For example: - ,'some text', - The quote with the most wins, same with the delimiter. - If there is no quotechar the delimiter can't be determined - this way. - """ - import re - - matches = [] - for restr in (r'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)', # ,".*?", - r'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)', # ".*?", - r'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)', # ,".*?" - r'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n)'): # ".*?" (no delim, no space) - regexp = re.compile(restr, re.DOTALL | re.MULTILINE) - matches = regexp.findall(data) - if matches: - break - - if not matches: - # (quotechar, doublequote, delimiter, skipinitialspace) - return ('', False, None, 0) - quotes = {} - delims = {} - spaces = 0 - groupindex = regexp.groupindex - for m in matches: - n = groupindex['quote'] - 1 - key = m[n] - if key: - quotes[key] = quotes.get(key, 0) + 1 - try: - n = groupindex['delim'] - 1 - key = m[n] - except KeyError: - continue - if key and (delimiters is None or key in delimiters): - delims[key] = delims.get(key, 0) + 1 - try: - n = groupindex['space'] - 1 - except KeyError: - continue - if m[n]: - spaces += 1 - - quotechar = max(quotes, key=quotes.get) - - if delims: - delim = max(delims, key=delims.get) - skipinitialspace = delims[delim] == spaces - if delim == '\n': # most likely a file with a single column - delim = '' - else: - # there is *no* delimiter, it's a single column of quoted data - delim = '' - skipinitialspace = 0 - - # if we see an extra quote between delimiters, we've got a - # double quoted format - dq_regexp = re.compile( - r"((%(delim)s)|^)\W*%(quote)s[^%(delim)s\n]*%(quote)s[^%(delim)s\n]*%(quote)s\W*((%(delim)s)|$)" % \ - {'delim':re.escape(delim), 'quote':quotechar}, re.MULTILINE) - - - - if dq_regexp.search(data): - doublequote = True - else: - doublequote = False - - return (quotechar, doublequote, delim, skipinitialspace) - - - def _guess_delimiter(self, data, delimiters): - """ - The delimiter /should/ occur the same number of times on - each row. However, due to malformed data, it may not. We don't want - an all or nothing approach, so we allow for small variations in this - number. - 1) build a table of the frequency of each character on every line. - 2) build a table of frequencies of this frequency (meta-frequency?), - e.g. 'x occurred 5 times in 10 rows, 6 times in 1000 rows, - 7 times in 2 rows' - 3) use the mode of the meta-frequency to determine the /expected/ - frequency for that character - 4) find out how often the character actually meets that goal - 5) the character that best meets its goal is the delimiter - For performance reasons, the data is evaluated in chunks, so it can - try and evaluate the smallest portion of the data possible, evaluating - additional chunks as necessary. - """ - - data = list(filter(None, data.split('\n'))) - - ascii = [chr(c) for c in range(127)] # 7-bit ASCII - - # build frequency tables - chunkLength = min(10, len(data)) - iteration = 0 - charFrequency = {} - modes = {} - delims = {} - start, end = 0, chunkLength - while start < len(data): - iteration += 1 - for line in data[start:end]: - for char in ascii: - metaFrequency = charFrequency.get(char, {}) - # must count even if frequency is 0 - freq = line.count(char) - # value is the mode - metaFrequency[freq] = metaFrequency.get(freq, 0) + 1 - charFrequency[char] = metaFrequency - - for char in charFrequency.keys(): - items = list(charFrequency[char].items()) - if len(items) == 1 and items[0][0] == 0: - continue - # get the mode of the frequencies - if len(items) > 1: - modes[char] = max(items, key=lambda x: x[1]) - # adjust the mode - subtract the sum of all - # other frequencies - items.remove(modes[char]) - modes[char] = (modes[char][0], modes[char][1] - - sum(item[1] for item in items)) - else: - modes[char] = items[0] - - # build a list of possible delimiters - modeList = modes.items() - total = float(min(chunkLength * iteration, len(data))) - # (rows of consistent data) / (number of rows) = 100% - consistency = 1.0 - # minimum consistency threshold - threshold = 0.9 - while len(delims) == 0 and consistency >= threshold: - for k, v in modeList: - if v[0] > 0 and v[1] > 0: - if ((v[1]/total) >= consistency and - (delimiters is None or k in delimiters)): - delims[k] = v - consistency -= 0.01 - - if len(delims) == 1: - delim = list(delims.keys())[0] - skipinitialspace = (data[0].count(delim) == - data[0].count("%c " % delim)) - return (delim, skipinitialspace) - - # analyze another chunkLength lines - start = end - end += chunkLength - - if not delims: - return ('', 0) - - # if there's more than one, fall back to a 'preferred' list - if len(delims) > 1: - for d in self.preferred: - if d in delims.keys(): - skipinitialspace = (data[0].count(d) == - data[0].count("%c " % d)) - return (d, skipinitialspace) - - # nothing else indicates a preference, pick the character that - # dominates(?) - items = [(v,k) for (k,v) in delims.items()] - items.sort() - delim = items[-1][1] - - skipinitialspace = (data[0].count(delim) == - data[0].count("%c " % delim)) - return (delim, skipinitialspace) - - - def has_header(self, sample): - # Creates a dictionary of types of data in each column. If any - # column is of a single type (say, integers), *except* for the first - # row, then the first row is presumed to be labels. If the type - # can't be determined, it is assumed to be a string in which case - # the length of the string is the determining factor: if all of the - # rows except for the first are the same length, it's a header. - # Finally, a 'vote' is taken at the end for each column, adding or - # subtracting from the likelihood of the first row being a header. - - rdr = reader(StringIO(sample), self.sniff(sample)) - - header = next(rdr) # assume first row is header - - columns = len(header) - columnTypes = {} - for i in range(columns): columnTypes[i] = None - - checked = 0 - for row in rdr: - # arbitrary number of rows to check, to keep it sane - if checked > 20: - break - checked += 1 - - if len(row) != columns: - continue # skip rows that have irregular number of columns - - for col in list(columnTypes.keys()): - thisType = complex - try: - thisType(row[col]) - except (ValueError, OverflowError): - # fallback to length of string - thisType = len(row[col]) - - if thisType != columnTypes[col]: - if columnTypes[col] is None: # add new column type - columnTypes[col] = thisType - else: - # type is inconsistent, remove column from - # consideration - del columnTypes[col] - - # finally, compare results against first row and "vote" - # on whether it's a header - hasHeader = 0 - for col, colType in columnTypes.items(): - if isinstance(colType, int): # it's a length - if len(header[col]) != colType: - hasHeader += 1 - else: - hasHeader -= 1 - else: # attempt typecast - try: - colType(header[col]) - except (ValueError, TypeError): - hasHeader += 1 - else: - hasHeader -= 1 - - return hasHeader > 0 diff --git a/Python314_4_x86_Template/Lib/ctypes/__init__.py b/Python314_4_x86_Template/Lib/ctypes/__init__.py deleted file mode 100644 index 7223fc499..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/__init__.py +++ /dev/null @@ -1,683 +0,0 @@ -"""create and manipulate C data types in Python""" - -import os as _os -import sys as _sys -import sysconfig as _sysconfig -import types as _types - -__version__ = "1.1.0" - -from _ctypes import Union, Structure, Array -from _ctypes import _Pointer -from _ctypes import CFuncPtr as _CFuncPtr -from _ctypes import __version__ as _ctypes_version -from _ctypes import RTLD_LOCAL, RTLD_GLOBAL -from _ctypes import ArgumentError -from _ctypes import SIZEOF_TIME_T -from _ctypes import CField - -from struct import calcsize as _calcsize - -if __version__ != _ctypes_version: - raise Exception("Version number mismatch", __version__, _ctypes_version) - -if _os.name == "nt": - from _ctypes import COMError, CopyComPointer, FormatError - -DEFAULT_MODE = RTLD_LOCAL -if _os.name == "posix" and _sys.platform == "darwin": - # On OS X 10.3, we use RTLD_GLOBAL as default mode - # because RTLD_LOCAL does not work at least on some - # libraries. OS X 10.3 is Darwin 7, so we check for - # that. - - if int(_os.uname().release.split('.')[0]) < 8: - DEFAULT_MODE = RTLD_GLOBAL - -from _ctypes import FUNCFLAG_CDECL as _FUNCFLAG_CDECL, \ - FUNCFLAG_PYTHONAPI as _FUNCFLAG_PYTHONAPI, \ - FUNCFLAG_USE_ERRNO as _FUNCFLAG_USE_ERRNO, \ - FUNCFLAG_USE_LASTERROR as _FUNCFLAG_USE_LASTERROR - -# WINOLEAPI -> HRESULT -# WINOLEAPI_(type) -# -# STDMETHODCALLTYPE -# -# STDMETHOD(name) -# STDMETHOD_(type, name) -# -# STDAPICALLTYPE - -def create_string_buffer(init, size=None): - """create_string_buffer(aBytes) -> character array - create_string_buffer(anInteger) -> character array - create_string_buffer(aBytes, anInteger) -> character array - """ - if isinstance(init, bytes): - if size is None: - size = len(init)+1 - _sys.audit("ctypes.create_string_buffer", init, size) - buftype = c_char * size - buf = buftype() - buf.value = init - return buf - elif isinstance(init, int): - _sys.audit("ctypes.create_string_buffer", None, init) - buftype = c_char * init - buf = buftype() - return buf - raise TypeError(init) - -# Alias to create_string_buffer() for backward compatibility -c_buffer = create_string_buffer - -_c_functype_cache = {} -def CFUNCTYPE(restype, *argtypes, **kw): - """CFUNCTYPE(restype, *argtypes, - use_errno=False, use_last_error=False) -> function prototype. - - restype: the result type - argtypes: a sequence specifying the argument types - - The function prototype can be called in different ways to create a - callable object: - - prototype(integer address) -> foreign function - prototype(callable) -> create and return a C callable function from callable - prototype(integer index, method name[, paramflags]) -> foreign function calling a COM method - prototype((ordinal number, dll object)[, paramflags]) -> foreign function exported by ordinal - prototype((function name, dll object)[, paramflags]) -> foreign function exported by name - """ - flags = _FUNCFLAG_CDECL - if kw.pop("use_errno", False): - flags |= _FUNCFLAG_USE_ERRNO - if kw.pop("use_last_error", False): - flags |= _FUNCFLAG_USE_LASTERROR - if kw: - raise ValueError("unexpected keyword argument(s) %s" % kw.keys()) - - try: - return _c_functype_cache[(restype, argtypes, flags)] - except KeyError: - pass - - class CFunctionType(_CFuncPtr): - _argtypes_ = argtypes - _restype_ = restype - _flags_ = flags - _c_functype_cache[(restype, argtypes, flags)] = CFunctionType - return CFunctionType - -if _os.name == "nt": - from _ctypes import LoadLibrary as _LoadLibrary - from _ctypes import FUNCFLAG_STDCALL as _FUNCFLAG_STDCALL - - _win_functype_cache = {} - def WINFUNCTYPE(restype, *argtypes, **kw): - # docstring set later (very similar to CFUNCTYPE.__doc__) - flags = _FUNCFLAG_STDCALL - if kw.pop("use_errno", False): - flags |= _FUNCFLAG_USE_ERRNO - if kw.pop("use_last_error", False): - flags |= _FUNCFLAG_USE_LASTERROR - if kw: - raise ValueError("unexpected keyword argument(s) %s" % kw.keys()) - - try: - return _win_functype_cache[(restype, argtypes, flags)] - except KeyError: - pass - - class WinFunctionType(_CFuncPtr): - _argtypes_ = argtypes - _restype_ = restype - _flags_ = flags - _win_functype_cache[(restype, argtypes, flags)] = WinFunctionType - return WinFunctionType - if WINFUNCTYPE.__doc__: - WINFUNCTYPE.__doc__ = CFUNCTYPE.__doc__.replace("CFUNCTYPE", "WINFUNCTYPE") - -elif _os.name == "posix": - from _ctypes import dlopen as _dlopen - -from _ctypes import sizeof, byref, addressof, alignment, resize -from _ctypes import get_errno, set_errno -from _ctypes import _SimpleCData - -def _check_size(typ, typecode=None): - # Check if sizeof(ctypes_type) against struct.calcsize. This - # should protect somewhat against a misconfigured libffi. - from struct import calcsize - if typecode is None: - # Most _type_ codes are the same as used in struct - typecode = typ._type_ - actual, required = sizeof(typ), calcsize(typecode) - if actual != required: - raise SystemError("sizeof(%s) wrong: %d instead of %d" % \ - (typ, actual, required)) - -class py_object(_SimpleCData): - _type_ = "O" - def __repr__(self): - try: - return super().__repr__() - except ValueError: - return "%s(<NULL>)" % type(self).__name__ - __class_getitem__ = classmethod(_types.GenericAlias) -_check_size(py_object, "P") - -class c_short(_SimpleCData): - _type_ = "h" -_check_size(c_short) - -class c_ushort(_SimpleCData): - _type_ = "H" -_check_size(c_ushort) - -class c_long(_SimpleCData): - _type_ = "l" -_check_size(c_long) - -class c_ulong(_SimpleCData): - _type_ = "L" -_check_size(c_ulong) - -if _calcsize("i") == _calcsize("l"): - # if int and long have the same size, make c_int an alias for c_long - c_int = c_long - c_uint = c_ulong -else: - class c_int(_SimpleCData): - _type_ = "i" - _check_size(c_int) - - class c_uint(_SimpleCData): - _type_ = "I" - _check_size(c_uint) - -class c_float(_SimpleCData): - _type_ = "f" -_check_size(c_float) - -class c_double(_SimpleCData): - _type_ = "d" -_check_size(c_double) - -class c_longdouble(_SimpleCData): - _type_ = "g" -if sizeof(c_longdouble) == sizeof(c_double): - c_longdouble = c_double - -try: - class c_double_complex(_SimpleCData): - _type_ = "D" - _check_size(c_double_complex) - class c_float_complex(_SimpleCData): - _type_ = "F" - _check_size(c_float_complex) - class c_longdouble_complex(_SimpleCData): - _type_ = "G" -except AttributeError: - pass - -if _calcsize("l") == _calcsize("q"): - # if long and long long have the same size, make c_longlong an alias for c_long - c_longlong = c_long - c_ulonglong = c_ulong -else: - class c_longlong(_SimpleCData): - _type_ = "q" - _check_size(c_longlong) - - class c_ulonglong(_SimpleCData): - _type_ = "Q" - ## def from_param(cls, val): - ## return ('d', float(val), val) - ## from_param = classmethod(from_param) - _check_size(c_ulonglong) - -class c_ubyte(_SimpleCData): - _type_ = "B" -c_ubyte.__ctype_le__ = c_ubyte.__ctype_be__ = c_ubyte -# backward compatibility: -##c_uchar = c_ubyte -_check_size(c_ubyte) - -class c_byte(_SimpleCData): - _type_ = "b" -c_byte.__ctype_le__ = c_byte.__ctype_be__ = c_byte -_check_size(c_byte) - -class c_char(_SimpleCData): - _type_ = "c" -c_char.__ctype_le__ = c_char.__ctype_be__ = c_char -_check_size(c_char) - -class c_char_p(_SimpleCData): - _type_ = "z" - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, c_void_p.from_buffer(self).value) -_check_size(c_char_p, "P") - -class c_void_p(_SimpleCData): - _type_ = "P" -c_voidp = c_void_p # backwards compatibility (to a bug) -_check_size(c_void_p) - -class c_bool(_SimpleCData): - _type_ = "?" - -def POINTER(cls): - """Create and return a new ctypes pointer type. - - Pointer types are cached and reused internally, - so calling this function repeatedly is cheap. - """ - if cls is None: - return c_void_p - try: - return cls.__pointer_type__ - except AttributeError: - pass - if isinstance(cls, str): - # handle old-style incomplete types (see test_ctypes.test_incomplete) - import warnings - warnings._deprecated("ctypes.POINTER with string", remove=(3, 19)) - try: - return _pointer_type_cache_fallback[cls] - except KeyError: - result = type(f'LP_{cls}', (_Pointer,), {}) - _pointer_type_cache_fallback[cls] = result - return result - - # create pointer type and set __pointer_type__ for cls - return type(f'LP_{cls.__name__}', (_Pointer,), {'_type_': cls}) - -def pointer(obj): - """Create a new pointer instance, pointing to 'obj'. - - The returned object is of the type POINTER(type(obj)). Note that if you - just want to pass a pointer to an object to a foreign function call, you - should use byref(obj) which is much faster. - """ - typ = POINTER(type(obj)) - return typ(obj) - -class _PointerTypeCache: - def __setitem__(self, cls, pointer_type): - import warnings - warnings._deprecated("ctypes._pointer_type_cache", remove=(3, 19)) - try: - cls.__pointer_type__ = pointer_type - except AttributeError: - _pointer_type_cache_fallback[cls] = pointer_type - - def __getitem__(self, cls): - import warnings - warnings._deprecated("ctypes._pointer_type_cache", remove=(3, 19)) - try: - return cls.__pointer_type__ - except AttributeError: - return _pointer_type_cache_fallback[cls] - - def get(self, cls, default=None): - import warnings - warnings._deprecated("ctypes._pointer_type_cache", remove=(3, 19)) - try: - return cls.__pointer_type__ - except AttributeError: - return _pointer_type_cache_fallback.get(cls, default) - - def __contains__(self, cls): - return hasattr(cls, '__pointer_type__') - -_pointer_type_cache_fallback = {} -_pointer_type_cache = _PointerTypeCache() - -class c_wchar_p(_SimpleCData): - _type_ = "Z" - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, c_void_p.from_buffer(self).value) - -class c_wchar(_SimpleCData): - _type_ = "u" - -def _reset_cache(): - _pointer_type_cache_fallback.clear() - _c_functype_cache.clear() - if _os.name == "nt": - _win_functype_cache.clear() - # _SimpleCData.c_wchar_p_from_param - POINTER(c_wchar).from_param = c_wchar_p.from_param - # _SimpleCData.c_char_p_from_param - POINTER(c_char).from_param = c_char_p.from_param - -def create_unicode_buffer(init, size=None): - """create_unicode_buffer(aString) -> character array - create_unicode_buffer(anInteger) -> character array - create_unicode_buffer(aString, anInteger) -> character array - """ - if isinstance(init, str): - if size is None: - if sizeof(c_wchar) == 2: - # UTF-16 requires a surrogate pair (2 wchar_t) for non-BMP - # characters (outside [U+0000; U+FFFF] range). +1 for trailing - # NUL character. - size = sum(2 if ord(c) > 0xFFFF else 1 for c in init) + 1 - else: - # 32-bit wchar_t (1 wchar_t per Unicode character). +1 for - # trailing NUL character. - size = len(init) + 1 - _sys.audit("ctypes.create_unicode_buffer", init, size) - buftype = c_wchar * size - buf = buftype() - buf.value = init - return buf - elif isinstance(init, int): - _sys.audit("ctypes.create_unicode_buffer", None, init) - buftype = c_wchar * init - buf = buftype() - return buf - raise TypeError(init) - - -def SetPointerType(pointer, cls): - import warnings - warnings._deprecated("ctypes.SetPointerType", remove=(3, 15)) - pointer.set_type(cls) - -def ARRAY(typ, len): - return typ * len - -################################################################ - - -class CDLL(object): - """An instance of this class represents a loaded dll/shared - library, exporting functions using the standard C calling - convention (named 'cdecl' on Windows). - - The exported functions can be accessed as attributes, or by - indexing with the function name. Examples: - - <obj>.qsort -> callable object - <obj>['qsort'] -> callable object - - Calling the functions releases the Python GIL during the call and - reacquires it afterwards. - """ - _func_flags_ = _FUNCFLAG_CDECL - _func_restype_ = c_int - # default values for repr - _name = '<uninitialized>' - _handle = 0 - _FuncPtr = None - - def __init__(self, name, mode=DEFAULT_MODE, handle=None, - use_errno=False, - use_last_error=False, - winmode=None): - class _FuncPtr(_CFuncPtr): - _flags_ = self._func_flags_ - _restype_ = self._func_restype_ - if use_errno: - _flags_ |= _FUNCFLAG_USE_ERRNO - if use_last_error: - _flags_ |= _FUNCFLAG_USE_LASTERROR - - self._FuncPtr = _FuncPtr - if name: - name = _os.fspath(name) - - self._handle = self._load_library(name, mode, handle, winmode) - - if _os.name == "nt": - def _load_library(self, name, mode, handle, winmode): - if winmode is None: - import nt as _nt - winmode = _nt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS - # WINAPI LoadLibrary searches for a DLL if the given name - # is not fully qualified with an explicit drive. For POSIX - # compatibility, and because the DLL search path no longer - # contains the working directory, begin by fully resolving - # any name that contains a path separator. - if name is not None and ('/' in name or '\\' in name): - name = _nt._getfullpathname(name) - winmode |= _nt._LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR - self._name = name - if handle is not None: - return handle - return _LoadLibrary(self._name, winmode) - - else: - def _load_library(self, name, mode, handle, winmode): - # If the filename that has been provided is an iOS/tvOS/watchOS - # .fwork file, dereference the location to the true origin of the - # binary. - if name and name.endswith(".fwork"): - with open(name) as f: - name = _os.path.join( - _os.path.dirname(_sys.executable), - f.read().strip() - ) - if _sys.platform.startswith("aix"): - """When the name contains ".a(" and ends with ")", - e.g., "libFOO.a(libFOO.so)" - this is taken to be an - archive(member) syntax for dlopen(), and the mode is adjusted. - Otherwise, name is presented to dlopen() as a file argument. - """ - if name and name.endswith(")") and ".a(" in name: - mode |= _os.RTLD_MEMBER | _os.RTLD_NOW - self._name = name - if handle is not None: - return handle - return _dlopen(name, mode) - - def __repr__(self): - return "<%s '%s', handle %x at %#x>" % \ - (self.__class__.__name__, self._name, - (self._handle & (_sys.maxsize*2 + 1)), - id(self) & (_sys.maxsize*2 + 1)) - - def __getattr__(self, name): - if name.startswith('__') and name.endswith('__'): - raise AttributeError(name) - func = self.__getitem__(name) - setattr(self, name, func) - return func - - def __getitem__(self, name_or_ordinal): - func = self._FuncPtr((name_or_ordinal, self)) - if not isinstance(name_or_ordinal, int): - func.__name__ = name_or_ordinal - return func - -class PyDLL(CDLL): - """This class represents the Python library itself. It allows - accessing Python API functions. The GIL is not released, and - Python exceptions are handled correctly. - """ - _func_flags_ = _FUNCFLAG_CDECL | _FUNCFLAG_PYTHONAPI - -if _os.name == "nt": - - class WinDLL(CDLL): - """This class represents a dll exporting functions using the - Windows stdcall calling convention. - """ - _func_flags_ = _FUNCFLAG_STDCALL - - # XXX Hm, what about HRESULT as normal parameter? - # Mustn't it derive from c_long then? - from _ctypes import _check_HRESULT, _SimpleCData - class HRESULT(_SimpleCData): - _type_ = "l" - # _check_retval_ is called with the function's result when it - # is used as restype. It checks for the FAILED bit, and - # raises an OSError if it is set. - # - # The _check_retval_ method is implemented in C, so that the - # method definition itself is not included in the traceback - # when it raises an error - that is what we want (and Python - # doesn't have a way to raise an exception in the caller's - # frame). - _check_retval_ = _check_HRESULT - - class OleDLL(CDLL): - """This class represents a dll exporting functions using the - Windows stdcall calling convention, and returning HRESULT. - HRESULT error values are automatically raised as OSError - exceptions. - """ - _func_flags_ = _FUNCFLAG_STDCALL - _func_restype_ = HRESULT - -class LibraryLoader(object): - def __init__(self, dlltype): - self._dlltype = dlltype - - def __getattr__(self, name): - if name[0] == '_': - raise AttributeError(name) - try: - dll = self._dlltype(name) - except OSError: - raise AttributeError(name) - setattr(self, name, dll) - return dll - - def __getitem__(self, name): - return getattr(self, name) - - def LoadLibrary(self, name): - return self._dlltype(name) - - __class_getitem__ = classmethod(_types.GenericAlias) - -cdll = LibraryLoader(CDLL) -pydll = LibraryLoader(PyDLL) - -if _os.name == "nt": - pythonapi = PyDLL("python dll", None, _sys.dllhandle) -elif _sys.platform in ["android", "cygwin"]: - # These are Unix-like platforms which use a dynamically-linked libpython. - pythonapi = PyDLL(_sysconfig.get_config_var("LDLIBRARY")) -else: - pythonapi = PyDLL(None) - - -if _os.name == "nt": - windll = LibraryLoader(WinDLL) - oledll = LibraryLoader(OleDLL) - - GetLastError = windll.kernel32.GetLastError - from _ctypes import get_last_error, set_last_error - - def WinError(code=None, descr=None): - if code is None: - code = GetLastError() - if descr is None: - descr = FormatError(code).strip() - return OSError(None, descr, None, code) - -if sizeof(c_uint) == sizeof(c_void_p): - c_size_t = c_uint - c_ssize_t = c_int -elif sizeof(c_ulong) == sizeof(c_void_p): - c_size_t = c_ulong - c_ssize_t = c_long -elif sizeof(c_ulonglong) == sizeof(c_void_p): - c_size_t = c_ulonglong - c_ssize_t = c_longlong - -# functions - -from _ctypes import _memmove_addr, _memset_addr, _string_at_addr, _cast_addr -from _ctypes import _memoryview_at_addr - -## void *memmove(void *, const void *, size_t); -memmove = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_size_t)(_memmove_addr) - -## void *memset(void *, int, size_t) -memset = CFUNCTYPE(c_void_p, c_void_p, c_int, c_size_t)(_memset_addr) - -def PYFUNCTYPE(restype, *argtypes): - class CFunctionType(_CFuncPtr): - _argtypes_ = argtypes - _restype_ = restype - _flags_ = _FUNCFLAG_CDECL | _FUNCFLAG_PYTHONAPI - return CFunctionType - -_cast = PYFUNCTYPE(py_object, c_void_p, py_object, py_object)(_cast_addr) -def cast(obj, typ): - return _cast(obj, obj, typ) - -_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr) -def string_at(ptr, size=-1): - """string_at(ptr[, size]) -> string - - Return the byte string at void *ptr.""" - return _string_at(ptr, size) - -_memoryview_at = PYFUNCTYPE( - py_object, c_void_p, c_ssize_t, c_int)(_memoryview_at_addr) -def memoryview_at(ptr, size, readonly=False): - """memoryview_at(ptr, size[, readonly]) -> memoryview - - Return a memoryview representing the memory at void *ptr.""" - return _memoryview_at(ptr, size, bool(readonly)) - -try: - from _ctypes import _wstring_at_addr -except ImportError: - pass -else: - _wstring_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr) - def wstring_at(ptr, size=-1): - """wstring_at(ptr[, size]) -> string - - Return the wide-character string at void *ptr.""" - return _wstring_at(ptr, size) - - -if _os.name == "nt": # COM stuff - def DllGetClassObject(rclsid, riid, ppv): - try: - ccom = __import__("comtypes.server.inprocserver", globals(), locals(), ['*']) - except ImportError: - return -2147221231 # CLASS_E_CLASSNOTAVAILABLE - else: - return ccom.DllGetClassObject(rclsid, riid, ppv) - - def DllCanUnloadNow(): - try: - ccom = __import__("comtypes.server.inprocserver", globals(), locals(), ['*']) - except ImportError: - return 0 # S_OK - return ccom.DllCanUnloadNow() - -from ctypes._endian import BigEndianStructure, LittleEndianStructure -from ctypes._endian import BigEndianUnion, LittleEndianUnion - -# Fill in specifically-sized types -c_int8 = c_byte -c_uint8 = c_ubyte -for kind in [c_short, c_int, c_long, c_longlong]: - if sizeof(kind) == 2: c_int16 = kind - elif sizeof(kind) == 4: c_int32 = kind - elif sizeof(kind) == 8: c_int64 = kind -for kind in [c_ushort, c_uint, c_ulong, c_ulonglong]: - if sizeof(kind) == 2: c_uint16 = kind - elif sizeof(kind) == 4: c_uint32 = kind - elif sizeof(kind) == 8: c_uint64 = kind -del(kind) - -if SIZEOF_TIME_T == 8: - c_time_t = c_int64 -elif SIZEOF_TIME_T == 4: - c_time_t = c_int32 -else: - raise SystemError(f"Unexpected sizeof(time_t): {SIZEOF_TIME_T=}") - -_reset_cache() diff --git a/Python314_4_x86_Template/Lib/ctypes/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/ctypes/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 0f51a23f327c6186582779800de5a544270aa476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29748 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 diff --git a/Python314_4_x86_Template/Lib/ctypes/__pycache__/_endian.cpython-314.pyc b/Python314_4_x86_Template/Lib/ctypes/__pycache__/_endian.cpython-314.pyc deleted file mode 100644 index 6e35fcb27f5cc2cff40cfff736e34f7bb5e7c320..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3754 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 Wx%87})D*A82e-qgE7ED++5ZI)US7Na diff --git a/Python314_4_x86_Template/Lib/ctypes/__pycache__/_layout.cpython-314.pyc b/Python314_4_x86_Template/Lib/ctypes/__pycache__/_layout.cpython-314.pyc deleted file mode 100644 index 57f13051e893aad984970a1a86a4ba7e4745b9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8682 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 M{;o++`3VRA2UBaT)Bpeg diff --git a/Python314_4_x86_Template/Lib/ctypes/__pycache__/wintypes.cpython-314.pyc b/Python314_4_x86_Template/Lib/ctypes/__pycache__/wintypes.cpython-314.pyc deleted file mode 100644 index ac5f39f476f78951da98db9b448670c7ce02d23f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8988 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 diff --git a/Python314_4_x86_Template/Lib/ctypes/_aix.py b/Python314_4_x86_Template/Lib/ctypes/_aix.py deleted file mode 100644 index ee790f713..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/_aix.py +++ /dev/null @@ -1,327 +0,0 @@ -""" -Lib/ctypes.util.find_library() support for AIX -Similar approach as done for Darwin support by using separate files -but unlike Darwin - no extension such as ctypes.macholib.* - -dlopen() is an interface to AIX initAndLoad() - primary documentation at: -https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/dlopen.htm -https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/load.htm - -AIX supports two styles for dlopen(): svr4 (System V Release 4) which is common on posix -platforms, but also a BSD style - aka SVR3. - -From AIX 5.3 Difference Addendum (December 2004) -2.9 SVR4 linking affinity -Nowadays, there are two major object file formats used by the operating systems: -XCOFF: The COFF enhanced by IBM and others. The original COFF (Common -Object File Format) was the base of SVR3 and BSD 4.2 systems. -ELF: Executable and Linking Format that was developed by AT&T and is a -base for SVR4 UNIX. - -While the shared library content is identical on AIX - one is located as a filepath name -(svr4 style) and the other is located as a member of an archive (and the archive -is located as a filepath name). - -The key difference arises when supporting multiple abi formats (i.e., 32 and 64 bit). -For svr4 either only one ABI is supported, or there are two directories, or there -are different file names. The most common solution for multiple ABI is multiple -directories. - -For the XCOFF (aka AIX) style - one directory (one archive file) is sufficient -as multiple shared libraries can be in the archive - even sharing the same name. -In documentation the archive is also referred to as the "base" and the shared -library object is referred to as the "member". - -For dlopen() on AIX (read initAndLoad()) the calls are similar. -Default activity occurs when no path information is provided. When path -information is provided dlopen() does not search any other directories. - -For SVR4 - the shared library name is the name of the file expected: libFOO.so -For AIX - the shared library is expressed as base(member). The search is for the -base (e.g., libFOO.a) and once the base is found the shared library - identified by -member (e.g., libFOO.so, or shr.o) is located and loaded. - -The mode bit RTLD_MEMBER tells initAndLoad() that it needs to use the AIX (SVR3) -naming style. -""" -__author__ = "Michael Felt <aixtools@felt.demon.nl>" - -import re -from os import environ, path -from sys import executable -from ctypes import c_void_p, sizeof -from subprocess import Popen, PIPE, DEVNULL - -# Executable bit size - 32 or 64 -# Used to filter the search in an archive by size, e.g., -X64 -AIX_ABI = sizeof(c_void_p) * 8 - - -from sys import maxsize -def _last_version(libnames, sep): - def _num_version(libname): - # "libxyz.so.MAJOR.MINOR" => [MAJOR, MINOR] - parts = libname.split(sep) - nums = [] - try: - while parts: - nums.insert(0, int(parts.pop())) - except ValueError: - pass - return nums or [maxsize] - return max(reversed(libnames), key=_num_version) - -def get_ld_header(p): - # "nested-function, but placed at module level - ld_header = None - for line in p.stdout: - if line.startswith(('/', './', '../')): - ld_header = line - elif "INDEX" in line: - return ld_header.rstrip('\n') - return None - -def get_ld_header_info(p): - # "nested-function, but placed at module level - # as an ld_header was found, return known paths, archives and members - # these lines start with a digit - info = [] - for line in p.stdout: - if re.match("[0-9]", line): - info.append(line) - else: - # blank line (separator), consume line and end for loop - break - return info - -def get_ld_headers(file): - """ - Parse the header of the loader section of executable and archives - This function calls /usr/bin/dump -H as a subprocess - and returns a list of (ld_header, ld_header_info) tuples. - """ - # get_ld_headers parsing: - # 1. Find a line that starts with /, ./, or ../ - set as ld_header - # 2. If "INDEX" in occurs in a following line - return ld_header - # 3. get info (lines starting with [0-9]) - ldr_headers = [] - p = Popen(["/usr/bin/dump", f"-X{AIX_ABI}", "-H", file], - universal_newlines=True, stdout=PIPE, stderr=DEVNULL) - # be sure to read to the end-of-file - getting all entries - while ld_header := get_ld_header(p): - ldr_headers.append((ld_header, get_ld_header_info(p))) - p.stdout.close() - p.wait() - return ldr_headers - -def get_shared(ld_headers): - """ - extract the shareable objects from ld_headers - character "[" is used to strip off the path information. - Note: the "[" and "]" characters that are part of dump -H output - are not removed here. - """ - shared = [] - for (line, _) in ld_headers: - # potential member lines contain "[" - # otherwise, no processing needed - if "[" in line: - # Strip off trailing colon (:) - shared.append(line[line.index("["):-1]) - return shared - -def get_one_match(expr, lines): - """ - Must be only one match, otherwise result is None. - When there is a match, strip leading "[" and trailing "]" - """ - # member names in the ld_headers output are between square brackets - expr = rf'\[({expr})\]' - matches = list(filter(None, (re.search(expr, line) for line in lines))) - if len(matches) == 1: - return matches[0].group(1) - else: - return None - -# additional processing to deal with AIX legacy names for 64-bit members -def get_legacy(members): - """ - This routine provides historical aka legacy naming schemes started - in AIX4 shared library support for library members names. - e.g., in /usr/lib/libc.a the member name shr.o for 32-bit binary and - shr_64.o for 64-bit binary. - """ - if AIX_ABI == 64: - # AIX 64-bit member is one of shr64.o, shr_64.o, or shr4_64.o - expr = r'shr4?_?64\.o' - member = get_one_match(expr, members) - if member: - return member - else: - # 32-bit legacy names - both shr.o and shr4.o exist. - # shr.o is the preferred name so we look for shr.o first - # i.e., shr4.o is returned only when shr.o does not exist - for name in ['shr.o', 'shr4.o']: - member = get_one_match(re.escape(name), members) - if member: - return member - return None - -def get_version(name, members): - """ - Sort list of members and return highest numbered version - if it exists. - This function is called when an unversioned libFOO.a(libFOO.so) has - not been found. - - Versioning for the member name is expected to follow - GNU LIBTOOL conventions: the highest version (x, then X.y, then X.Y.z) - * find [libFoo.so.X] - * find [libFoo.so.X.Y] - * find [libFoo.so.X.Y.Z] - - Before the GNU convention became the standard scheme regardless of - binary size AIX packagers used GNU convention "as-is" for 32-bit - archive members but used an "distinguishing" name for 64-bit members. - This scheme inserted either 64 or _64 between libFOO and .so - - generally libFOO_64.so, but occasionally libFOO64.so - """ - # the expression ending for versions must start as - # '.so.[0-9]', i.e., *.so.[at least one digit] - # while multiple, more specific expressions could be specified - # to search for .so.X, .so.X.Y and .so.X.Y.Z - # after the first required 'dot' digit - # any combination of additional 'dot' digits pairs are accepted - # anything more than libFOO.so.digits.digits.digits - # should be seen as a member name outside normal expectations - exprs = [rf'lib{name}\.so\.[0-9]+[0-9.]*', - rf'lib{name}_?64\.so\.[0-9]+[0-9.]*'] - for expr in exprs: - versions = [] - for line in members: - m = re.search(expr, line) - if m: - versions.append(m.group(0)) - if versions: - return _last_version(versions, '.') - return None - -def get_member(name, members): - """ - Return an archive member matching the request in name. - Name is the library name without any prefix like lib, suffix like .so, - or version number. - Given a list of members find and return the most appropriate result - Priority is given to generic libXXX.so, then a versioned libXXX.so.a.b.c - and finally, legacy AIX naming scheme. - """ - # look first for a generic match - prepend lib and append .so - expr = rf'lib{name}\.so' - member = get_one_match(expr, members) - if member: - return member - elif AIX_ABI == 64: - expr = rf'lib{name}64\.so' - member = get_one_match(expr, members) - if member: - return member - # since an exact match with .so as suffix was not found - # look for a versioned name - # If a versioned name is not found, look for AIX legacy member name - member = get_version(name, members) - if member: - return member - else: - return get_legacy(members) - -def get_libpaths(): - """ - On AIX, the buildtime searchpath is stored in the executable. - as "loader header information". - The command /usr/bin/dump -H extracts this info. - Prefix searched libraries with LD_LIBRARY_PATH (preferred), - or LIBPATH if defined. These paths are appended to the paths - to libraries the python executable is linked with. - This mimics AIX dlopen() behavior. - """ - libpaths = environ.get("LD_LIBRARY_PATH") - if libpaths is None: - libpaths = environ.get("LIBPATH") - if libpaths is None: - libpaths = [] - else: - libpaths = libpaths.split(":") - objects = get_ld_headers(executable) - for (_, lines) in objects: - for line in lines: - # the second (optional) argument is PATH if it includes a / - path = line.split()[1] - if "/" in path: - libpaths.extend(path.split(":")) - return libpaths - -def find_shared(paths, name): - """ - paths is a list of directories to search for an archive. - name is the abbreviated name given to find_library(). - Process: search "paths" for archive, and if an archive is found - return the result of get_member(). - If an archive is not found then return None - """ - for dir in paths: - # /lib is a symbolic link to /usr/lib, skip it - if dir == "/lib": - continue - # "lib" is prefixed to emulate compiler name resolution, - # e.g., -lc to libc - base = f'lib{name}.a' - archive = path.join(dir, base) - if path.exists(archive): - members = get_shared(get_ld_headers(archive)) - member = get_member(re.escape(name), members) - if member is not None: - return (base, member) - else: - return (None, None) - return (None, None) - -def find_library(name): - """AIX implementation of ctypes.util.find_library() - Find an archive member that will dlopen(). If not available, - also search for a file (or link) with a .so suffix. - - AIX supports two types of schemes that can be used with dlopen(). - The so-called SystemV Release4 (svr4) format is commonly suffixed - with .so while the (default) AIX scheme has the library (archive) - ending with the suffix .a - As an archive has multiple members (e.g., 32-bit and 64-bit) in one file - the argument passed to dlopen must include both the library and - the member names in a single string. - - find_library() looks first for an archive (.a) with a suitable member. - If no archive+member pair is found, look for a .so file. - """ - - libpaths = get_libpaths() - (base, member) = find_shared(libpaths, name) - if base is not None: - return f"{base}({member})" - - # To get here, a member in an archive has not been found - # In other words, either: - # a) a .a file was not found - # b) a .a file did not have a suitable member - # So, look for a .so file - # Check libpaths for .so file - # Note, the installation must prepare a link from a .so - # to a versioned file - # This is common practice by GNU libtool on other platforms - soname = f"lib{name}.so" - for dir in libpaths: - # /lib is a symbolic link to /usr/lib, skip it - if dir == "/lib": - continue - shlib = path.join(dir, soname) - if path.exists(shlib): - return soname - # if we are here, we have not found anything plausible - return None diff --git a/Python314_4_x86_Template/Lib/ctypes/_endian.py b/Python314_4_x86_Template/Lib/ctypes/_endian.py deleted file mode 100644 index 6382dd22b..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/_endian.py +++ /dev/null @@ -1,78 +0,0 @@ -import sys -from ctypes import Array, Structure, Union - -_array_type = type(Array) - -def _other_endian(typ): - """Return the type with the 'other' byte order. Simple types like - c_int and so on already have __ctype_be__ and __ctype_le__ - attributes which contain the types, for more complicated types - arrays and structures are supported. - """ - # check _OTHER_ENDIAN attribute (present if typ is primitive type) - if hasattr(typ, _OTHER_ENDIAN): - return getattr(typ, _OTHER_ENDIAN) - # if typ is array - if isinstance(typ, _array_type): - return _other_endian(typ._type_) * typ._length_ - # if typ is structure or union - if issubclass(typ, (Structure, Union)): - return typ - raise TypeError("This type does not support other endian: %s" % typ) - -class _swapped_meta: - def __setattr__(self, attrname, value): - if attrname == "_fields_": - fields = [] - for desc in value: - name = desc[0] - typ = desc[1] - rest = desc[2:] - fields.append((name, _other_endian(typ)) + rest) - value = fields - super().__setattr__(attrname, value) -class _swapped_struct_meta(_swapped_meta, type(Structure)): pass -class _swapped_union_meta(_swapped_meta, type(Union)): pass - -################################################################ - -# Note: The Structure metaclass checks for the *presence* (not the -# value!) of a _swappedbytes_ attribute to determine the bit order in -# structures containing bit fields. - -if sys.byteorder == "little": - _OTHER_ENDIAN = "__ctype_be__" - - LittleEndianStructure = Structure - - class BigEndianStructure(Structure, metaclass=_swapped_struct_meta): - """Structure with big endian byte order""" - __slots__ = () - _swappedbytes_ = None - - LittleEndianUnion = Union - - class BigEndianUnion(Union, metaclass=_swapped_union_meta): - """Union with big endian byte order""" - __slots__ = () - _swappedbytes_ = None - -elif sys.byteorder == "big": - _OTHER_ENDIAN = "__ctype_le__" - - BigEndianStructure = Structure - - class LittleEndianStructure(Structure, metaclass=_swapped_struct_meta): - """Structure with little endian byte order""" - __slots__ = () - _swappedbytes_ = None - - BigEndianUnion = Union - - class LittleEndianUnion(Union, metaclass=_swapped_union_meta): - """Union with little endian byte order""" - __slots__ = () - _swappedbytes_ = None - -else: - raise RuntimeError("Invalid byteorder") diff --git a/Python314_4_x86_Template/Lib/ctypes/_layout.py b/Python314_4_x86_Template/Lib/ctypes/_layout.py deleted file mode 100644 index 2048ccb6a..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/_layout.py +++ /dev/null @@ -1,330 +0,0 @@ -"""Python implementation of computing the layout of a struct/union - -This code is internal and tightly coupled to the C part. The interface -may change at any time. -""" - -import sys -import warnings - -from _ctypes import CField, buffer_info -import ctypes - -def round_down(n, multiple): - assert n >= 0 - assert multiple > 0 - return (n // multiple) * multiple - -def round_up(n, multiple): - assert n >= 0 - assert multiple > 0 - return ((n + multiple - 1) // multiple) * multiple - -_INT_MAX = (1 << (ctypes.sizeof(ctypes.c_int) * 8) - 1) - 1 - - -class StructUnionLayout: - def __init__(self, fields, size, align, format_spec): - # sequence of CField objects - self.fields = fields - - # total size of the aggregate (rounded up to alignment) - self.size = size - - # total alignment requirement of the aggregate - self.align = align - - # buffer format specification (as a string, UTF-8 but bes - # kept ASCII-only) - self.format_spec = format_spec - - -def get_layout(cls, input_fields, is_struct, base): - """Return a StructUnionLayout for the given class. - - Called by PyCStructUnionType_update_stginfo when _fields_ is assigned - to a class. - """ - # Currently there are two modes, selectable using the '_layout_' attribute: - # - # 'gcc-sysv' mode places fields one after another, bit by bit. - # But "each bit field must fit within a single object of its specified - # type" (GCC manual, section 15.8 "Bit Field Packing"). When it doesn't, - # we insert a few bits of padding to avoid that. - # - # 'ms' mode works similar except for bitfield packing. Adjacent - # bit-fields are packed into the same 1-, 2-, or 4-byte allocation unit - # if the integral types are the same size and if the next bit-field fits - # into the current allocation unit without crossing the boundary imposed - # by the common alignment requirements of the bit-fields. - # - # See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#index-mms-bitfields - # for details. - - # We do not support zero length bitfields (we use bitsize != 0 - # elsewhere to indicate a bitfield). Here, non-bitfields have bit_size - # set to size*8. - - # For clarity, variables that count bits have `bit` in their names. - - pack = getattr(cls, '_pack_', None) - - layout = getattr(cls, '_layout_', None) - if layout is None: - if sys.platform == 'win32': - gcc_layout = False - elif pack: - if is_struct: - base_type_name = 'Structure' - else: - base_type_name = 'Union' - warnings._deprecated( - '_pack_ without _layout_', - f"Due to '_pack_', the '{cls.__name__}' {base_type_name} will " - + "use memory layout compatible with MSVC (Windows). " - + "If this is intended, set _layout_ to 'ms'. " - + "The implicit default is deprecated and slated to become " - + "an error in Python {remove}.", - remove=(3, 19), - ) - gcc_layout = False - else: - gcc_layout = True - elif layout == 'ms': - gcc_layout = False - elif layout == 'gcc-sysv': - gcc_layout = True - else: - raise ValueError(f'unknown _layout_: {layout!r}') - - align = getattr(cls, '_align_', 1) - if align < 0: - raise ValueError('_align_ must be a non-negative integer') - elif align == 0: - # Setting `_align_ = 0` amounts to using the default alignment - align = 1 - - if base: - align = max(ctypes.alignment(base), align) - - swapped_bytes = hasattr(cls, '_swappedbytes_') - if swapped_bytes: - big_endian = sys.byteorder == 'little' - else: - big_endian = sys.byteorder == 'big' - - if pack is not None: - try: - pack = int(pack) - except (TypeError, ValueError): - raise ValueError("_pack_ must be an integer") - if pack < 0: - raise ValueError("_pack_ must be a non-negative integer") - if pack > _INT_MAX: - raise ValueError("_pack_ too big") - if gcc_layout: - raise ValueError('_pack_ is not compatible with gcc-sysv layout') - - result_fields = [] - - if is_struct: - format_spec_parts = ["T{"] - else: - format_spec_parts = ["B"] - - last_field_bit_size = 0 # used in MS layout only - - # `8 * next_byte_offset + next_bit_offset` points to where the - # next field would start. - next_bit_offset = 0 - next_byte_offset = 0 - - # size if this was a struct (sum of field sizes, plus padding) - struct_size = 0 - # max of field sizes; only meaningful for unions - union_size = 0 - - if base: - struct_size = ctypes.sizeof(base) - if gcc_layout: - next_bit_offset = struct_size * 8 - else: - next_byte_offset = struct_size - - last_size = struct_size - for i, field in enumerate(input_fields): - if not is_struct: - # Unions start fresh each time - last_field_bit_size = 0 - next_bit_offset = 0 - next_byte_offset = 0 - - # Unpack the field - field = tuple(field) - try: - name, ctype = field - except (ValueError, TypeError): - try: - name, ctype, bit_size = field - except (ValueError, TypeError) as exc: - raise ValueError( - '_fields_ must be a sequence of (name, C type) pairs ' - + 'or (name, C type, bit size) triples') from exc - is_bitfield = True - if bit_size <= 0: - raise ValueError( - f'number of bits invalid for bit field {name!r}') - type_size = ctypes.sizeof(ctype) - if bit_size > type_size * 8: - raise ValueError( - f'number of bits invalid for bit field {name!r}') - else: - is_bitfield = False - type_size = ctypes.sizeof(ctype) - bit_size = type_size * 8 - - type_bit_size = type_size * 8 - type_align = ctypes.alignment(ctype) or 1 - type_bit_align = type_align * 8 - - if gcc_layout: - # We don't use next_byte_offset here - assert pack is None - assert next_byte_offset == 0 - - # Determine whether the bit field, if placed at the next - # free bit, fits within a single object of its specified type. - # That is: determine a "slot", sized & aligned for the - # specified type, which contains the bitfield's beginning: - slot_start_bit = round_down(next_bit_offset, type_bit_align) - slot_end_bit = slot_start_bit + type_bit_size - # And see if it also contains the bitfield's last bit: - field_end_bit = next_bit_offset + bit_size - if field_end_bit > slot_end_bit: - # It doesn't: add padding (bump up to the next - # alignment boundary) - next_bit_offset = round_up(next_bit_offset, type_bit_align) - - offset = round_down(next_bit_offset, type_bit_align) // 8 - if is_bitfield: - bit_offset = next_bit_offset - 8 * offset - assert bit_offset <= type_bit_size - else: - assert offset == next_bit_offset / 8 - - next_bit_offset += bit_size - struct_size = round_up(next_bit_offset, 8) // 8 - else: - if pack: - type_align = min(pack, type_align) - - # next_byte_offset points to end of current bitfield. - # next_bit_offset is generally non-positive, - # and 8 * next_byte_offset + next_bit_offset points just behind - # the end of the last field we placed. - if ( - (0 < next_bit_offset + bit_size) - or (type_bit_size != last_field_bit_size) - ): - # Close the previous bitfield (if any) - # and start a new bitfield - next_byte_offset = round_up(next_byte_offset, type_align) - - next_byte_offset += type_size - - last_field_bit_size = type_bit_size - # Reminder: 8 * (next_byte_offset) + next_bit_offset - # points to where we would start a new field, namely - # just behind where we placed the last field plus an - # allowance for alignment. - next_bit_offset = -last_field_bit_size - - assert type_bit_size == last_field_bit_size - - offset = next_byte_offset - last_field_bit_size // 8 - if is_bitfield: - assert 0 <= (last_field_bit_size + next_bit_offset) - bit_offset = last_field_bit_size + next_bit_offset - if type_bit_size: - assert (last_field_bit_size + next_bit_offset) < type_bit_size - - next_bit_offset += bit_size - struct_size = next_byte_offset - - if is_bitfield and big_endian: - # On big-endian architectures, bit fields are also laid out - # starting with the big end. - bit_offset = type_bit_size - bit_size - bit_offset - - # Add the format spec parts - if is_struct: - padding = offset - last_size - format_spec_parts.append(padding_spec(padding)) - - fieldfmt, bf_ndim, bf_shape = buffer_info(ctype) - - if bf_shape: - format_spec_parts.extend(( - "(", - ','.join(str(n) for n in bf_shape), - ")", - )) - - if fieldfmt is None: - fieldfmt = "B" - if isinstance(name, bytes): - # a bytes name would be rejected later, but we check early - # to avoid a BytesWarning with `python -bb` - raise TypeError( - f"field {name!r}: name must be a string, not bytes") - format_spec_parts.append(f"{fieldfmt}:{name}:") - - result_fields.append(CField( - name=name, - type=ctype, - byte_size=type_size, - byte_offset=offset, - bit_size=bit_size if is_bitfield else None, - bit_offset=bit_offset if is_bitfield else None, - index=i, - - # Do not use CField outside ctypes, yet. - # The constructor is internal API and may change without warning. - _internal_use=True, - )) - if is_bitfield and not gcc_layout: - assert type_bit_size > 0 - - align = max(align, type_align) - last_size = struct_size - if not is_struct: - union_size = max(struct_size, union_size) - - if is_struct: - total_size = struct_size - else: - total_size = union_size - - # Adjust the size according to the alignment requirements - aligned_size = round_up(total_size, align) - - # Finish up the format spec - if is_struct: - padding = aligned_size - total_size - format_spec_parts.append(padding_spec(padding)) - format_spec_parts.append("}") - - return StructUnionLayout( - fields=result_fields, - size=aligned_size, - align=align, - format_spec="".join(format_spec_parts), - ) - - -def padding_spec(padding): - if padding <= 0: - return "" - if padding == 1: - return "x" - return f"{padding}x" diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/README.ctypes b/Python314_4_x86_Template/Lib/ctypes/macholib/README.ctypes deleted file mode 100644 index 2866e9f34..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/README.ctypes +++ /dev/null @@ -1,7 +0,0 @@ -Files in this directory come from Bob Ippolito's py2app. - -License: Any components of the py2app suite may be distributed under -the MIT or PSF open source licenses. - -This is version 1.0, SVN revision 789, from 2006/01/25. -The main repository is http://svn.red-bean.com/bob/macholib/trunk/macholib/ \ No newline at end of file diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/__init__.py b/Python314_4_x86_Template/Lib/ctypes/macholib/__init__.py deleted file mode 100644 index 5621defcc..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -Enough Mach-O to make your head spin. - -See the relevant header files in /usr/include/mach-o - -And also Apple's documentation. -""" - -__version__ = '1.0' diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/dyld.py b/Python314_4_x86_Template/Lib/ctypes/macholib/dyld.py deleted file mode 100644 index 583c47daf..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/dyld.py +++ /dev/null @@ -1,165 +0,0 @@ -""" -dyld emulation -""" - -import os -from ctypes.macholib.framework import framework_info -from ctypes.macholib.dylib import dylib_info -from itertools import * -try: - from _ctypes import _dyld_shared_cache_contains_path -except ImportError: - def _dyld_shared_cache_contains_path(*args): - raise NotImplementedError - -__all__ = [ - 'dyld_find', 'framework_find', - 'framework_info', 'dylib_info', -] - -# These are the defaults as per man dyld(1) -# -DEFAULT_FRAMEWORK_FALLBACK = [ - os.path.expanduser("~/Library/Frameworks"), - "/Library/Frameworks", - "/Network/Library/Frameworks", - "/System/Library/Frameworks", -] - -DEFAULT_LIBRARY_FALLBACK = [ - os.path.expanduser("~/lib"), - "/usr/local/lib", - "/lib", - "/usr/lib", -] - -def dyld_env(env, var): - if env is None: - env = os.environ - rval = env.get(var) - if rval is None: - return [] - return rval.split(':') - -def dyld_image_suffix(env=None): - if env is None: - env = os.environ - return env.get('DYLD_IMAGE_SUFFIX') - -def dyld_framework_path(env=None): - return dyld_env(env, 'DYLD_FRAMEWORK_PATH') - -def dyld_library_path(env=None): - return dyld_env(env, 'DYLD_LIBRARY_PATH') - -def dyld_fallback_framework_path(env=None): - return dyld_env(env, 'DYLD_FALLBACK_FRAMEWORK_PATH') - -def dyld_fallback_library_path(env=None): - return dyld_env(env, 'DYLD_FALLBACK_LIBRARY_PATH') - -def dyld_image_suffix_search(iterator, env=None): - """For a potential path iterator, add DYLD_IMAGE_SUFFIX semantics""" - suffix = dyld_image_suffix(env) - if suffix is None: - return iterator - def _inject(iterator=iterator, suffix=suffix): - for path in iterator: - if path.endswith('.dylib'): - yield path[:-len('.dylib')] + suffix + '.dylib' - else: - yield path + suffix - yield path - return _inject() - -def dyld_override_search(name, env=None): - # If DYLD_FRAMEWORK_PATH is set and this dylib_name is a - # framework name, use the first file that exists in the framework - # path if any. If there is none go on to search the DYLD_LIBRARY_PATH - # if any. - - framework = framework_info(name) - - if framework is not None: - for path in dyld_framework_path(env): - yield os.path.join(path, framework['name']) - - # If DYLD_LIBRARY_PATH is set then use the first file that exists - # in the path. If none use the original name. - for path in dyld_library_path(env): - yield os.path.join(path, os.path.basename(name)) - -def dyld_executable_path_search(name, executable_path=None): - # If we haven't done any searching and found a library and the - # dylib_name starts with "@executable_path/" then construct the - # library name. - if name.startswith('@executable_path/') and executable_path is not None: - yield os.path.join(executable_path, name[len('@executable_path/'):]) - -def dyld_default_search(name, env=None): - yield name - - framework = framework_info(name) - - if framework is not None: - fallback_framework_path = dyld_fallback_framework_path(env) - for path in fallback_framework_path: - yield os.path.join(path, framework['name']) - - fallback_library_path = dyld_fallback_library_path(env) - for path in fallback_library_path: - yield os.path.join(path, os.path.basename(name)) - - if framework is not None and not fallback_framework_path: - for path in DEFAULT_FRAMEWORK_FALLBACK: - yield os.path.join(path, framework['name']) - - if not fallback_library_path: - for path in DEFAULT_LIBRARY_FALLBACK: - yield os.path.join(path, os.path.basename(name)) - -def dyld_find(name, executable_path=None, env=None): - """ - Find a library or framework using dyld semantics - """ - for path in dyld_image_suffix_search(chain( - dyld_override_search(name, env), - dyld_executable_path_search(name, executable_path), - dyld_default_search(name, env), - ), env): - - if os.path.isfile(path): - return path - try: - if _dyld_shared_cache_contains_path(path): - return path - except NotImplementedError: - pass - - raise ValueError("dylib %s could not be found" % (name,)) - -def framework_find(fn, executable_path=None, env=None): - """ - Find a framework using dyld semantics in a very loose manner. - - Will take input such as: - Python - Python.framework - Python.framework/Versions/Current - """ - error = None - try: - return dyld_find(fn, executable_path=executable_path, env=env) - except ValueError as e: - error = e - fmwk_index = fn.rfind('.framework') - if fmwk_index == -1: - fmwk_index = len(fn) - fn += '.framework' - fn = os.path.join(fn, os.path.basename(fn[:fmwk_index])) - try: - return dyld_find(fn, executable_path=executable_path, env=env) - except ValueError: - raise error - finally: - error = None diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/dylib.py b/Python314_4_x86_Template/Lib/ctypes/macholib/dylib.py deleted file mode 100644 index 0ad4cba8d..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/dylib.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Generic dylib path manipulation -""" - -import re - -__all__ = ['dylib_info'] - -DYLIB_RE = re.compile(r"""(?x) -(?P<location>^.*)(?:^|/) -(?P<name> - (?P<shortname>\w+?) - (?:\.(?P<version>[^._]+))? - (?:_(?P<suffix>[^._]+))? - \.dylib$ -) -""") - -def dylib_info(filename): - """ - A dylib name can take one of the following four forms: - Location/Name.SomeVersion_Suffix.dylib - Location/Name.SomeVersion.dylib - Location/Name_Suffix.dylib - Location/Name.dylib - - returns None if not found or a mapping equivalent to: - dict( - location='Location', - name='Name.SomeVersion_Suffix.dylib', - shortname='Name', - version='SomeVersion', - suffix='Suffix', - ) - - Note that SomeVersion and Suffix are optional and may be None - if not present. - """ - is_dylib = DYLIB_RE.match(filename) - if not is_dylib: - return None - return is_dylib.groupdict() diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib b/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib deleted file mode 100644 index e6d6a2265..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -svn export --force http://svn.red-bean.com/bob/macholib/trunk/macholib/ . diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib.bat b/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib.bat deleted file mode 100644 index f9e1c0dc9..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/fetch_macholib.bat +++ /dev/null @@ -1 +0,0 @@ -svn export --force http://svn.red-bean.com/bob/macholib/trunk/macholib/ . diff --git a/Python314_4_x86_Template/Lib/ctypes/macholib/framework.py b/Python314_4_x86_Template/Lib/ctypes/macholib/framework.py deleted file mode 100644 index 495679fff..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/macholib/framework.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Generic framework path manipulation -""" - -import re - -__all__ = ['framework_info'] - -STRICT_FRAMEWORK_RE = re.compile(r"""(?x) -(?P<location>^.*)(?:^|/) -(?P<name> - (?P<shortname>\w+).framework/ - (?:Versions/(?P<version>[^/]+)/)? - (?P=shortname) - (?:_(?P<suffix>[^_]+))? -)$ -""") - -def framework_info(filename): - """ - A framework name can take one of the following four forms: - Location/Name.framework/Versions/SomeVersion/Name_Suffix - Location/Name.framework/Versions/SomeVersion/Name - Location/Name.framework/Name_Suffix - Location/Name.framework/Name - - returns None if not found, or a mapping equivalent to: - dict( - location='Location', - name='Name.framework/Versions/SomeVersion/Name_Suffix', - shortname='Name', - version='SomeVersion', - suffix='Suffix', - ) - - Note that SomeVersion and Suffix are optional and may be None - if not present - """ - is_framework = STRICT_FRAMEWORK_RE.match(filename) - if not is_framework: - return None - return is_framework.groupdict() diff --git a/Python314_4_x86_Template/Lib/ctypes/util.py b/Python314_4_x86_Template/Lib/ctypes/util.py deleted file mode 100644 index 3b2165843..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/util.py +++ /dev/null @@ -1,544 +0,0 @@ -import os -import shutil -import subprocess -import sys - -# find_library(name) returns the pathname of a library, or None. -if os.name == "nt": - - def _get_build_version(): - """Return the version of MSVC that was used to build Python. - - For Python 2.3 and up, the version number is included in - sys.version. For earlier versions, assume the compiler is MSVC 6. - """ - # This function was copied from Lib/distutils/msvccompiler.py - prefix = "MSC v." - i = sys.version.find(prefix) - if i == -1: - return 6 - i = i + len(prefix) - s, rest = sys.version[i:].split(" ", 1) - majorVersion = int(s[:-2]) - 6 - if majorVersion >= 13: - majorVersion += 1 - minorVersion = int(s[2:3]) / 10.0 - # I don't think paths are affected by minor version in version 6 - if majorVersion == 6: - minorVersion = 0 - if majorVersion >= 6: - return majorVersion + minorVersion - # else we don't know what version of the compiler this is - return None - - def find_msvcrt(): - """Return the name of the VC runtime dll""" - version = _get_build_version() - if version is None: - # better be safe than sorry - return None - if version <= 6: - clibname = 'msvcrt' - elif version <= 13: - clibname = 'msvcr%d' % (version * 10) - else: - # CRT is no longer directly loadable. See issue23606 for the - # discussion about alternative approaches. - return None - - # If python was built with in debug mode - import importlib.machinery - if '_d.pyd' in importlib.machinery.EXTENSION_SUFFIXES: - clibname += 'd' - return clibname+'.dll' - - def find_library(name): - if name in ('c', 'm'): - return find_msvcrt() - # See MSDN for the REAL search order. - for directory in os.environ['PATH'].split(os.pathsep): - fname = os.path.join(directory, name) - if os.path.isfile(fname): - return fname - if fname.lower().endswith(".dll"): - continue - fname = fname + ".dll" - if os.path.isfile(fname): - return fname - return None - - # Listing loaded DLLs on Windows relies on the following APIs: - # https://learn.microsoft.com/windows/win32/api/psapi/nf-psapi-enumprocessmodules - # https://learn.microsoft.com/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenamew - import ctypes - from ctypes import wintypes - - _kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) - _get_current_process = _kernel32["GetCurrentProcess"] - _get_current_process.restype = wintypes.HANDLE - - _k32_get_module_file_name = _kernel32["GetModuleFileNameW"] - _k32_get_module_file_name.restype = wintypes.DWORD - _k32_get_module_file_name.argtypes = ( - wintypes.HMODULE, - wintypes.LPWSTR, - wintypes.DWORD, - ) - - # gh-145307: We defer loading psapi.dll until _get_module_handles is called. - # Loading additional DLLs at startup for functionality that may never be - # used is wasteful. - _enum_process_modules = None - - def _get_module_filename(module: wintypes.HMODULE): - name = (wintypes.WCHAR * 32767)() # UNICODE_STRING_MAX_CHARS - if _k32_get_module_file_name(module, name, len(name)): - return name.value - return None - - def _get_module_handles(): - global _enum_process_modules - if _enum_process_modules is None: - _psapi = ctypes.WinDLL('psapi', use_last_error=True) - _enum_process_modules = _psapi["EnumProcessModules"] - _enum_process_modules.restype = wintypes.BOOL - _enum_process_modules.argtypes = ( - wintypes.HANDLE, - ctypes.POINTER(wintypes.HMODULE), - wintypes.DWORD, - wintypes.LPDWORD, - ) - - process = _get_current_process() - space_needed = wintypes.DWORD() - n = 1024 - while True: - modules = (wintypes.HMODULE * n)() - if not _enum_process_modules(process, - modules, - ctypes.sizeof(modules), - ctypes.byref(space_needed)): - err = ctypes.get_last_error() - msg = ctypes.FormatError(err).strip() - raise ctypes.WinError(err, f"EnumProcessModules failed: {msg}") - n = space_needed.value // ctypes.sizeof(wintypes.HMODULE) - if n <= len(modules): - return modules[:n] - - def dllist(): - """Return a list of loaded shared libraries in the current process.""" - modules = _get_module_handles() - libraries = [name for h in modules - if (name := _get_module_filename(h)) is not None] - return libraries - -elif os.name == "posix" and sys.platform in {"darwin", "ios", "tvos", "watchos"}: - from ctypes.macholib.dyld import dyld_find as _dyld_find - def find_library(name): - possible = ['lib%s.dylib' % name, - '%s.dylib' % name, - '%s.framework/%s' % (name, name)] - for name in possible: - try: - return _dyld_find(name) - except ValueError: - continue - return None - - # Listing loaded libraries on Apple systems relies on the following API: - # https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dyld.3.html - import ctypes - - _libc = ctypes.CDLL(find_library("c")) - _dyld_get_image_name = _libc["_dyld_get_image_name"] - _dyld_get_image_name.restype = ctypes.c_char_p - - def dllist(): - """Return a list of loaded shared libraries in the current process.""" - num_images = _libc._dyld_image_count() - libraries = [os.fsdecode(name) for i in range(num_images) - if (name := _dyld_get_image_name(i)) is not None] - - return libraries - -elif sys.platform.startswith("aix"): - # AIX has two styles of storing shared libraries - # GNU auto_tools refer to these as svr4 and aix - # svr4 (System V Release 4) is a regular file, often with .so as suffix - # AIX style uses an archive (suffix .a) with members (e.g., shr.o, libssl.so) - # see issue#26439 and _aix.py for more details - - from ctypes._aix import find_library - -elif sys.platform == "android": - def find_library(name): - directory = "/system/lib" - if "64" in os.uname().machine: - directory += "64" - - fname = f"{directory}/lib{name}.so" - return fname if os.path.isfile(fname) else None - -elif sys.platform == "emscripten": - def _is_wasm(filename): - # Return True if the given file is an WASM module - wasm_header = b"\x00asm" - with open(filename, 'br') as thefile: - return thefile.read(4) == wasm_header - - def find_library(name): - candidates = [f"lib{name}.so", f"lib{name}.wasm"] - paths = os.environ.get("LD_LIBRARY_PATH", "") - for libdir in paths.split(":"): - for name in candidates: - libfile = os.path.join(libdir, name) - - if os.path.isfile(libfile) and _is_wasm(libfile): - return libfile - - return None - -elif os.name == "posix": - # Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump - import re, tempfile - - def _is_elf(filename): - "Return True if the given file is an ELF file" - elf_header = b'\x7fELF' - try: - with open(filename, 'br') as thefile: - return thefile.read(4) == elf_header - except FileNotFoundError: - return False - - def _findLib_gcc(name): - # Run GCC's linker with the -t (aka --trace) option and examine the - # library name it prints out. The GCC command will fail because we - # haven't supplied a proper program with main(), but that does not - # matter. - expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)) - - c_compiler = shutil.which('gcc') - if not c_compiler: - c_compiler = shutil.which('cc') - if not c_compiler: - # No C compiler available, give up - return None - - temp = tempfile.NamedTemporaryFile() - try: - args = [c_compiler, '-Wl,-t', '-o', temp.name, '-l' + name] - - env = dict(os.environ) - env['LC_ALL'] = 'C' - env['LANG'] = 'C' - try: - proc = subprocess.Popen(args, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - env=env) - except OSError: # E.g. bad executable - return None - with proc: - trace = proc.stdout.read() - finally: - try: - temp.close() - except FileNotFoundError: - # Raised if the file was already removed, which is the normal - # behaviour of GCC if linking fails - pass - res = re.findall(expr, trace) - if not res: - return None - - for file in res: - # Check if the given file is an elf file: gcc can report - # some files that are linker scripts and not actual - # shared objects. See bpo-41976 for more details - if not _is_elf(file): - continue - return os.fsdecode(file) - - - if sys.platform == "sunos5": - # use /usr/ccs/bin/dump on solaris - def _get_soname(f): - if not f: - return None - - try: - proc = subprocess.Popen(("/usr/ccs/bin/dump", "-Lpv", f), - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL) - except OSError: # E.g. command not found - return None - with proc: - data = proc.stdout.read() - res = re.search(br'\[.*\]\sSONAME\s+([^\s]+)', data) - if not res: - return None - return os.fsdecode(res.group(1)) - else: - def _get_soname(f): - # assuming GNU binutils / ELF - if not f: - return None - objdump = shutil.which('objdump') - if not objdump: - # objdump is not available, give up - return None - - try: - proc = subprocess.Popen((objdump, '-p', '-j', '.dynamic', f), - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL) - except OSError: # E.g. bad executable - return None - with proc: - dump = proc.stdout.read() - res = re.search(br'\sSONAME\s+([^\s]+)', dump) - if not res: - return None - return os.fsdecode(res.group(1)) - - if sys.platform.startswith(("freebsd", "openbsd", "dragonfly")): - - def _num_version(libname): - # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ] - parts = libname.split(b".") - nums = [] - try: - while parts: - nums.insert(0, int(parts.pop())) - except ValueError: - pass - return nums or [sys.maxsize] - - def find_library(name): - ename = re.escape(name) - expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename) - expr = os.fsencode(expr) - - try: - proc = subprocess.Popen(('/sbin/ldconfig', '-r'), - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL) - except OSError: # E.g. command not found - data = b'' - else: - with proc: - data = proc.stdout.read() - - res = re.findall(expr, data) - if not res: - return _get_soname(_findLib_gcc(name)) - res.sort(key=_num_version) - return os.fsdecode(res[-1]) - - elif sys.platform == "sunos5": - - def _findLib_crle(name, is64): - if not os.path.exists('/usr/bin/crle'): - return None - - env = dict(os.environ) - env['LC_ALL'] = 'C' - - if is64: - args = ('/usr/bin/crle', '-64') - else: - args = ('/usr/bin/crle',) - - paths = None - try: - proc = subprocess.Popen(args, - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, - env=env) - except OSError: # E.g. bad executable - return None - with proc: - for line in proc.stdout: - line = line.strip() - if line.startswith(b'Default Library Path (ELF):'): - paths = os.fsdecode(line).split()[4] - - if not paths: - return None - - for dir in paths.split(":"): - libfile = os.path.join(dir, "lib%s.so" % name) - if os.path.exists(libfile): - return libfile - - return None - - def find_library(name, is64 = False): - return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name)) - - else: - - def _findSoname_ldconfig(name): - import struct - if struct.calcsize('l') == 4: - machine = os.uname().machine + '-32' - else: - machine = os.uname().machine + '-64' - mach_map = { - 'x86_64-64': 'libc6,x86-64', - 'ppc64-64': 'libc6,64bit', - 'sparc64-64': 'libc6,64bit', - 's390x-64': 'libc6,64bit', - 'ia64-64': 'libc6,IA-64', - } - abi_type = mach_map.get(machine, 'libc6') - - # XXX assuming GLIBC's ldconfig (with option -p) - regex = r'\s+(lib%s\.[^\s]+)\s+\(%s' - regex = os.fsencode(regex % (re.escape(name), abi_type)) - try: - with subprocess.Popen(['/sbin/ldconfig', '-p'], - stdin=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - stdout=subprocess.PIPE, - env={'LC_ALL': 'C', 'LANG': 'C'}) as p: - res = re.search(regex, p.stdout.read()) - if res: - return os.fsdecode(res.group(1)) - except OSError: - pass - - def _findLib_ld(name): - # See issue #9998 for why this is needed - expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) - cmd = ['ld', '-t'] - libpath = os.environ.get('LD_LIBRARY_PATH') - if libpath: - for d in libpath.split(':'): - cmd.extend(['-L', d]) - cmd.extend(['-o', os.devnull, '-l%s' % name]) - result = None - try: - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - universal_newlines=True) - out, _ = p.communicate() - res = re.findall(expr, os.fsdecode(out)) - for file in res: - # Check if the given file is an elf file: gcc can report - # some files that are linker scripts and not actual - # shared objects. See bpo-41976 for more details - if not _is_elf(file): - continue - return os.fsdecode(file) - except Exception: - pass # result will be None - return result - - def find_library(name): - # See issue #9998 - return _findSoname_ldconfig(name) or \ - _get_soname(_findLib_gcc(name)) or _get_soname(_findLib_ld(name)) - - -# Listing loaded libraries on other systems will try to use -# functions common to Linux and a few other Unix-like systems. -# See the following for several platforms' documentation of the same API: -# https://man7.org/linux/man-pages/man3/dl_iterate_phdr.3.html -# https://man.freebsd.org/cgi/man.cgi?query=dl_iterate_phdr -# https://man.openbsd.org/dl_iterate_phdr -# https://docs.oracle.com/cd/E88353_01/html/E37843/dl-iterate-phdr-3c.html -if (os.name == "posix" and - sys.platform not in {"darwin", "ios", "tvos", "watchos"}): - import ctypes - if hasattr((_libc := ctypes.CDLL(None)), "dl_iterate_phdr"): - - class _dl_phdr_info(ctypes.Structure): - _fields_ = [ - ("dlpi_addr", ctypes.c_void_p), - ("dlpi_name", ctypes.c_char_p), - ("dlpi_phdr", ctypes.c_void_p), - ("dlpi_phnum", ctypes.c_ushort), - ] - - _dl_phdr_callback = ctypes.CFUNCTYPE( - ctypes.c_int, - ctypes.POINTER(_dl_phdr_info), - ctypes.c_size_t, - ctypes.POINTER(ctypes.py_object), - ) - - @_dl_phdr_callback - def _info_callback(info, _size, data): - libraries = data.contents.value - name = os.fsdecode(info.contents.dlpi_name) - libraries.append(name) - return 0 - - _dl_iterate_phdr = _libc["dl_iterate_phdr"] - _dl_iterate_phdr.argtypes = [ - _dl_phdr_callback, - ctypes.POINTER(ctypes.py_object), - ] - _dl_iterate_phdr.restype = ctypes.c_int - - def dllist(): - """Return a list of loaded shared libraries in the current process.""" - libraries = [] - _dl_iterate_phdr(_info_callback, - ctypes.byref(ctypes.py_object(libraries))) - return libraries - -################################################################ -# test code - -def test(): - from ctypes import cdll - if os.name == "nt": - print(cdll.msvcrt) - print(cdll.load("msvcrt")) - print(find_library("msvcrt")) - - if os.name == "posix": - # find and load_version - print(find_library("m")) - print(find_library("c")) - print(find_library("bz2")) - - # load - if sys.platform == "darwin": - print(cdll.LoadLibrary("libm.dylib")) - print(cdll.LoadLibrary("libcrypto.dylib")) - print(cdll.LoadLibrary("libSystem.dylib")) - print(cdll.LoadLibrary("System.framework/System")) - # issue-26439 - fix broken test call for AIX - elif sys.platform.startswith("aix"): - from ctypes import CDLL - if sys.maxsize < 2**32: - print(f"Using CDLL(name, os.RTLD_MEMBER): {CDLL('libc.a(shr.o)', os.RTLD_MEMBER)}") - print(f"Using cdll.LoadLibrary(): {cdll.LoadLibrary('libc.a(shr.o)')}") - # librpm.so is only available as 32-bit shared library - print(find_library("rpm")) - print(cdll.LoadLibrary("librpm.so")) - else: - print(f"Using CDLL(name, os.RTLD_MEMBER): {CDLL('libc.a(shr_64.o)', os.RTLD_MEMBER)}") - print(f"Using cdll.LoadLibrary(): {cdll.LoadLibrary('libc.a(shr_64.o)')}") - print(f"crypt\t:: {find_library('crypt')}") - print(f"crypt\t:: {cdll.LoadLibrary(find_library('crypt'))}") - print(f"crypto\t:: {find_library('crypto')}") - print(f"crypto\t:: {cdll.LoadLibrary(find_library('crypto'))}") - else: - print(cdll.LoadLibrary("libm.so")) - print(cdll.LoadLibrary("libcrypt.so")) - print(find_library("crypt")) - - try: - dllist - except NameError: - print('dllist() not available') - else: - print(dllist()) - -if __name__ == "__main__": - test() diff --git a/Python314_4_x86_Template/Lib/ctypes/wintypes.py b/Python314_4_x86_Template/Lib/ctypes/wintypes.py deleted file mode 100644 index 4beba0d19..000000000 --- a/Python314_4_x86_Template/Lib/ctypes/wintypes.py +++ /dev/null @@ -1,210 +0,0 @@ -# The most useful windows datatypes -import ctypes - -BYTE = ctypes.c_ubyte -WORD = ctypes.c_ushort -DWORD = ctypes.c_ulong - -#UCHAR = ctypes.c_uchar -CHAR = ctypes.c_char -WCHAR = ctypes.c_wchar -UINT = ctypes.c_uint -INT = ctypes.c_int - -DOUBLE = ctypes.c_double -FLOAT = ctypes.c_float - -BOOLEAN = BYTE -BOOL = ctypes.c_long - -class VARIANT_BOOL(ctypes._SimpleCData): - _type_ = "v" - def __repr__(self): - return "%s(%r)" % (self.__class__.__name__, self.value) - -ULONG = ctypes.c_ulong -LONG = ctypes.c_long - -USHORT = ctypes.c_ushort -SHORT = ctypes.c_short - -# in the windows header files, these are structures. -_LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong -_ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong - -LPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p -LPCWSTR = LPWSTR = ctypes.c_wchar_p -LPCSTR = LPSTR = ctypes.c_char_p -LPCVOID = LPVOID = ctypes.c_void_p - -# WPARAM is defined as UINT_PTR (unsigned type) -# LPARAM is defined as LONG_PTR (signed type) -if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p): - WPARAM = ctypes.c_ulong - LPARAM = ctypes.c_long -elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p): - WPARAM = ctypes.c_ulonglong - LPARAM = ctypes.c_longlong - -ATOM = WORD -LANGID = WORD - -COLORREF = DWORD -LGRPID = DWORD -LCTYPE = DWORD - -LCID = DWORD - -################################################################ -# HANDLE types -HANDLE = ctypes.c_void_p # in the header files: void * - -HACCEL = HANDLE -HBITMAP = HANDLE -HBRUSH = HANDLE -HCOLORSPACE = HANDLE -HCONV = HANDLE -HCONVLIST = HANDLE -HCURSOR = HANDLE -HDC = HANDLE -HDDEDATA = HANDLE -HDESK = HANDLE -HDROP = HANDLE -HDWP = HANDLE -HENHMETAFILE = HANDLE -HFILE = INT -HFONT = HANDLE -HGDIOBJ = HANDLE -HGLOBAL = HANDLE -HHOOK = HANDLE -HICON = HANDLE -HINSTANCE = HANDLE -HKEY = HANDLE -HKL = HANDLE -HLOCAL = HANDLE -HMENU = HANDLE -HMETAFILE = HANDLE -HMODULE = HANDLE -HMONITOR = HANDLE -HPALETTE = HANDLE -HPEN = HANDLE -HRESULT = LONG -HRGN = HANDLE -HRSRC = HANDLE -HSTR = HANDLE -HSZ = HANDLE -HTASK = HANDLE -HWINSTA = HANDLE -HWND = HANDLE -SC_HANDLE = HANDLE -SERVICE_STATUS_HANDLE = HANDLE - -################################################################ -# Some important structure definitions - -class RECT(ctypes.Structure): - _fields_ = [("left", LONG), - ("top", LONG), - ("right", LONG), - ("bottom", LONG)] -tagRECT = _RECTL = RECTL = RECT - -class _SMALL_RECT(ctypes.Structure): - _fields_ = [('Left', SHORT), - ('Top', SHORT), - ('Right', SHORT), - ('Bottom', SHORT)] -SMALL_RECT = _SMALL_RECT - -class _COORD(ctypes.Structure): - _fields_ = [('X', SHORT), - ('Y', SHORT)] - -class POINT(ctypes.Structure): - _fields_ = [("x", LONG), - ("y", LONG)] -tagPOINT = _POINTL = POINTL = POINT - -class SIZE(ctypes.Structure): - _fields_ = [("cx", LONG), - ("cy", LONG)] -tagSIZE = SIZEL = SIZE - -def RGB(red, green, blue): - return red + (green << 8) + (blue << 16) - -class FILETIME(ctypes.Structure): - _fields_ = [("dwLowDateTime", DWORD), - ("dwHighDateTime", DWORD)] -_FILETIME = FILETIME - -class MSG(ctypes.Structure): - _fields_ = [("hWnd", HWND), - ("message", UINT), - ("wParam", WPARAM), - ("lParam", LPARAM), - ("time", DWORD), - ("pt", POINT)] -tagMSG = MSG -MAX_PATH = 260 - -class WIN32_FIND_DATAA(ctypes.Structure): - _fields_ = [("dwFileAttributes", DWORD), - ("ftCreationTime", FILETIME), - ("ftLastAccessTime", FILETIME), - ("ftLastWriteTime", FILETIME), - ("nFileSizeHigh", DWORD), - ("nFileSizeLow", DWORD), - ("dwReserved0", DWORD), - ("dwReserved1", DWORD), - ("cFileName", CHAR * MAX_PATH), - ("cAlternateFileName", CHAR * 14)] - -class WIN32_FIND_DATAW(ctypes.Structure): - _fields_ = [("dwFileAttributes", DWORD), - ("ftCreationTime", FILETIME), - ("ftLastAccessTime", FILETIME), - ("ftLastWriteTime", FILETIME), - ("nFileSizeHigh", DWORD), - ("nFileSizeLow", DWORD), - ("dwReserved0", DWORD), - ("dwReserved1", DWORD), - ("cFileName", WCHAR * MAX_PATH), - ("cAlternateFileName", WCHAR * 14)] - -################################################################ -# Pointer types - -LPBOOL = PBOOL = ctypes.POINTER(BOOL) -PBOOLEAN = ctypes.POINTER(BOOLEAN) -LPBYTE = PBYTE = ctypes.POINTER(BYTE) -PCHAR = ctypes.POINTER(CHAR) -LPCOLORREF = ctypes.POINTER(COLORREF) -LPDWORD = PDWORD = ctypes.POINTER(DWORD) -LPFILETIME = PFILETIME = ctypes.POINTER(FILETIME) -PFLOAT = ctypes.POINTER(FLOAT) -LPHANDLE = PHANDLE = ctypes.POINTER(HANDLE) -PHKEY = ctypes.POINTER(HKEY) -LPHKL = ctypes.POINTER(HKL) -LPINT = PINT = ctypes.POINTER(INT) -PLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER) -PLCID = ctypes.POINTER(LCID) -LPLONG = PLONG = ctypes.POINTER(LONG) -LPMSG = PMSG = ctypes.POINTER(MSG) -LPPOINT = PPOINT = ctypes.POINTER(POINT) -PPOINTL = ctypes.POINTER(POINTL) -LPRECT = PRECT = ctypes.POINTER(RECT) -LPRECTL = PRECTL = ctypes.POINTER(RECTL) -LPSC_HANDLE = ctypes.POINTER(SC_HANDLE) -PSHORT = ctypes.POINTER(SHORT) -LPSIZE = PSIZE = ctypes.POINTER(SIZE) -LPSIZEL = PSIZEL = ctypes.POINTER(SIZEL) -PSMALL_RECT = ctypes.POINTER(SMALL_RECT) -LPUINT = PUINT = ctypes.POINTER(UINT) -PULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER) -PULONG = ctypes.POINTER(ULONG) -PUSHORT = ctypes.POINTER(USHORT) -PWCHAR = ctypes.POINTER(WCHAR) -LPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA) -LPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW) -LPWORD = PWORD = ctypes.POINTER(WORD) diff --git a/Python314_4_x86_Template/Lib/curses/__init__.py b/Python314_4_x86_Template/Lib/curses/__init__.py deleted file mode 100644 index 6165fe6c9..000000000 --- a/Python314_4_x86_Template/Lib/curses/__init__.py +++ /dev/null @@ -1,101 +0,0 @@ -"""curses - -The main package for curses support for Python. Normally used by importing -the package, and perhaps a particular module inside it. - - import curses - from curses import textpad - curses.initscr() - ... - -""" - -from _curses import * -import os as _os -import sys as _sys - -# Some constants, most notably the ACS_* ones, are only added to the C -# _curses module's dictionary after initscr() is called. (Some -# versions of SGI's curses don't define values for those constants -# until initscr() has been called.) This wrapper function calls the -# underlying C initscr(), and then copies the constants from the -# _curses module to the curses package's dictionary. Don't do 'from -# curses import *' if you'll be needing the ACS_* constants. - -def initscr(): - import _curses, curses - # we call setupterm() here because it raises an error - # instead of calling exit() in error cases. - setupterm(term=_os.environ.get("TERM", "unknown"), - fd=_sys.__stdout__.fileno()) - stdscr = _curses.initscr() - for key, value in _curses.__dict__.items(): - if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'): - setattr(curses, key, value) - - return stdscr - -# This is a similar wrapper for start_color(), which adds the COLORS and -# COLOR_PAIRS variables which are only available after start_color() is -# called. - -def start_color(): - import _curses, curses - retval = _curses.start_color() - if hasattr(_curses, 'COLORS'): - curses.COLORS = _curses.COLORS - if hasattr(_curses, 'COLOR_PAIRS'): - curses.COLOR_PAIRS = _curses.COLOR_PAIRS - return retval - -# Import Python has_key() implementation if _curses doesn't contain has_key() - -try: - has_key -except NameError: - from .has_key import has_key # noqa: F401 - -# Wrapper for the entire curses-based application. Runs a function which -# should be the rest of your curses-based application. If the application -# raises an exception, wrapper() will restore the terminal to a sane state so -# you can read the resulting traceback. - -def wrapper(func, /, *args, **kwds): - """Wrapper function that initializes curses and calls another function, - restoring normal keyboard/screen behavior on error. - The callable object 'func' is then passed the main window 'stdscr' - as its first argument, followed by any other arguments passed to - wrapper(). - """ - - try: - # Initialize curses - stdscr = initscr() - - # Turn off echoing of keys, and enter cbreak mode, - # where no buffering is performed on keyboard input - noecho() - cbreak() - - # In keypad mode, escape sequences for special keys - # (like the cursor keys) will be interpreted and - # a special value like curses.KEY_LEFT will be returned - stdscr.keypad(1) - - # Start color, too. Harmless if the terminal doesn't have - # color; user can test with has_color() later on. The try/catch - # works around a minor bit of over-conscientiousness in the curses - # module -- the error return from C start_color() is ignorable. - try: - start_color() - except: - pass - - return func(stdscr, *args, **kwds) - finally: - # Set everything back to normal - if 'stdscr' in locals(): - stdscr.keypad(0) - echo() - nocbreak() - endwin() diff --git a/Python314_4_x86_Template/Lib/curses/ascii.py b/Python314_4_x86_Template/Lib/curses/ascii.py deleted file mode 100644 index 95acff339..000000000 --- a/Python314_4_x86_Template/Lib/curses/ascii.py +++ /dev/null @@ -1,99 +0,0 @@ -"""Constants and membership tests for ASCII characters""" - -NUL = 0x00 # ^@ -SOH = 0x01 # ^A -STX = 0x02 # ^B -ETX = 0x03 # ^C -EOT = 0x04 # ^D -ENQ = 0x05 # ^E -ACK = 0x06 # ^F -BEL = 0x07 # ^G -BS = 0x08 # ^H -TAB = 0x09 # ^I -HT = 0x09 # ^I -LF = 0x0a # ^J -NL = 0x0a # ^J -VT = 0x0b # ^K -FF = 0x0c # ^L -CR = 0x0d # ^M -SO = 0x0e # ^N -SI = 0x0f # ^O -DLE = 0x10 # ^P -DC1 = 0x11 # ^Q -DC2 = 0x12 # ^R -DC3 = 0x13 # ^S -DC4 = 0x14 # ^T -NAK = 0x15 # ^U -SYN = 0x16 # ^V -ETB = 0x17 # ^W -CAN = 0x18 # ^X -EM = 0x19 # ^Y -SUB = 0x1a # ^Z -ESC = 0x1b # ^[ -FS = 0x1c # ^\ -GS = 0x1d # ^] -RS = 0x1e # ^^ -US = 0x1f # ^_ -SP = 0x20 # space -DEL = 0x7f # delete - -controlnames = [ -"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", -"BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", -"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", -"CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US", -"SP" -] - -def _ctoi(c): - if isinstance(c, str): - return ord(c) - else: - return c - -def isalnum(c): return isalpha(c) or isdigit(c) -def isalpha(c): return isupper(c) or islower(c) -def isascii(c): return 0 <= _ctoi(c) <= 127 # ? -def isblank(c): return _ctoi(c) in (9, 32) -def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127 -def isdigit(c): return 48 <= _ctoi(c) <= 57 -def isgraph(c): return 33 <= _ctoi(c) <= 126 -def islower(c): return 97 <= _ctoi(c) <= 122 -def isprint(c): return 32 <= _ctoi(c) <= 126 -def ispunct(c): return isgraph(c) and not isalnum(c) -def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32) -def isupper(c): return 65 <= _ctoi(c) <= 90 -def isxdigit(c): return isdigit(c) or \ - (65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102) -def isctrl(c): return 0 <= _ctoi(c) < 32 -def ismeta(c): return _ctoi(c) > 127 - -def ascii(c): - if isinstance(c, str): - return chr(_ctoi(c) & 0x7f) - else: - return _ctoi(c) & 0x7f - -def ctrl(c): - if isinstance(c, str): - return chr(_ctoi(c) & 0x1f) - else: - return _ctoi(c) & 0x1f - -def alt(c): - if isinstance(c, str): - return chr(_ctoi(c) | 0x80) - else: - return _ctoi(c) | 0x80 - -def unctrl(c): - bits = _ctoi(c) - if bits == 0x7f: - rep = "^?" - elif isprint(bits & 0x7f): - rep = chr(bits & 0x7f) - else: - rep = "^" + chr(((bits & 0x7f) | 0x20) + 0x20) - if bits & 0x80: - return "!" + rep - return rep diff --git a/Python314_4_x86_Template/Lib/curses/has_key.py b/Python314_4_x86_Template/Lib/curses/has_key.py deleted file mode 100644 index 4e37b480f..000000000 --- a/Python314_4_x86_Template/Lib/curses/has_key.py +++ /dev/null @@ -1,192 +0,0 @@ - -# -# Emulation of has_key() function for platforms that don't use ncurses -# - -import _curses - -# Table mapping curses keys to the terminfo capability name - -_capability_names = { - _curses.KEY_A1: 'ka1', - _curses.KEY_A3: 'ka3', - _curses.KEY_B2: 'kb2', - _curses.KEY_BACKSPACE: 'kbs', - _curses.KEY_BEG: 'kbeg', - _curses.KEY_BTAB: 'kcbt', - _curses.KEY_C1: 'kc1', - _curses.KEY_C3: 'kc3', - _curses.KEY_CANCEL: 'kcan', - _curses.KEY_CATAB: 'ktbc', - _curses.KEY_CLEAR: 'kclr', - _curses.KEY_CLOSE: 'kclo', - _curses.KEY_COMMAND: 'kcmd', - _curses.KEY_COPY: 'kcpy', - _curses.KEY_CREATE: 'kcrt', - _curses.KEY_CTAB: 'kctab', - _curses.KEY_DC: 'kdch1', - _curses.KEY_DL: 'kdl1', - _curses.KEY_DOWN: 'kcud1', - _curses.KEY_EIC: 'krmir', - _curses.KEY_END: 'kend', - _curses.KEY_ENTER: 'kent', - _curses.KEY_EOL: 'kel', - _curses.KEY_EOS: 'ked', - _curses.KEY_EXIT: 'kext', - _curses.KEY_F0: 'kf0', - _curses.KEY_F1: 'kf1', - _curses.KEY_F10: 'kf10', - _curses.KEY_F11: 'kf11', - _curses.KEY_F12: 'kf12', - _curses.KEY_F13: 'kf13', - _curses.KEY_F14: 'kf14', - _curses.KEY_F15: 'kf15', - _curses.KEY_F16: 'kf16', - _curses.KEY_F17: 'kf17', - _curses.KEY_F18: 'kf18', - _curses.KEY_F19: 'kf19', - _curses.KEY_F2: 'kf2', - _curses.KEY_F20: 'kf20', - _curses.KEY_F21: 'kf21', - _curses.KEY_F22: 'kf22', - _curses.KEY_F23: 'kf23', - _curses.KEY_F24: 'kf24', - _curses.KEY_F25: 'kf25', - _curses.KEY_F26: 'kf26', - _curses.KEY_F27: 'kf27', - _curses.KEY_F28: 'kf28', - _curses.KEY_F29: 'kf29', - _curses.KEY_F3: 'kf3', - _curses.KEY_F30: 'kf30', - _curses.KEY_F31: 'kf31', - _curses.KEY_F32: 'kf32', - _curses.KEY_F33: 'kf33', - _curses.KEY_F34: 'kf34', - _curses.KEY_F35: 'kf35', - _curses.KEY_F36: 'kf36', - _curses.KEY_F37: 'kf37', - _curses.KEY_F38: 'kf38', - _curses.KEY_F39: 'kf39', - _curses.KEY_F4: 'kf4', - _curses.KEY_F40: 'kf40', - _curses.KEY_F41: 'kf41', - _curses.KEY_F42: 'kf42', - _curses.KEY_F43: 'kf43', - _curses.KEY_F44: 'kf44', - _curses.KEY_F45: 'kf45', - _curses.KEY_F46: 'kf46', - _curses.KEY_F47: 'kf47', - _curses.KEY_F48: 'kf48', - _curses.KEY_F49: 'kf49', - _curses.KEY_F5: 'kf5', - _curses.KEY_F50: 'kf50', - _curses.KEY_F51: 'kf51', - _curses.KEY_F52: 'kf52', - _curses.KEY_F53: 'kf53', - _curses.KEY_F54: 'kf54', - _curses.KEY_F55: 'kf55', - _curses.KEY_F56: 'kf56', - _curses.KEY_F57: 'kf57', - _curses.KEY_F58: 'kf58', - _curses.KEY_F59: 'kf59', - _curses.KEY_F6: 'kf6', - _curses.KEY_F60: 'kf60', - _curses.KEY_F61: 'kf61', - _curses.KEY_F62: 'kf62', - _curses.KEY_F63: 'kf63', - _curses.KEY_F7: 'kf7', - _curses.KEY_F8: 'kf8', - _curses.KEY_F9: 'kf9', - _curses.KEY_FIND: 'kfnd', - _curses.KEY_HELP: 'khlp', - _curses.KEY_HOME: 'khome', - _curses.KEY_IC: 'kich1', - _curses.KEY_IL: 'kil1', - _curses.KEY_LEFT: 'kcub1', - _curses.KEY_LL: 'kll', - _curses.KEY_MARK: 'kmrk', - _curses.KEY_MESSAGE: 'kmsg', - _curses.KEY_MOVE: 'kmov', - _curses.KEY_NEXT: 'knxt', - _curses.KEY_NPAGE: 'knp', - _curses.KEY_OPEN: 'kopn', - _curses.KEY_OPTIONS: 'kopt', - _curses.KEY_PPAGE: 'kpp', - _curses.KEY_PREVIOUS: 'kprv', - _curses.KEY_PRINT: 'kprt', - _curses.KEY_REDO: 'krdo', - _curses.KEY_REFERENCE: 'kref', - _curses.KEY_REFRESH: 'krfr', - _curses.KEY_REPLACE: 'krpl', - _curses.KEY_RESTART: 'krst', - _curses.KEY_RESUME: 'kres', - _curses.KEY_RIGHT: 'kcuf1', - _curses.KEY_SAVE: 'ksav', - _curses.KEY_SBEG: 'kBEG', - _curses.KEY_SCANCEL: 'kCAN', - _curses.KEY_SCOMMAND: 'kCMD', - _curses.KEY_SCOPY: 'kCPY', - _curses.KEY_SCREATE: 'kCRT', - _curses.KEY_SDC: 'kDC', - _curses.KEY_SDL: 'kDL', - _curses.KEY_SELECT: 'kslt', - _curses.KEY_SEND: 'kEND', - _curses.KEY_SEOL: 'kEOL', - _curses.KEY_SEXIT: 'kEXT', - _curses.KEY_SF: 'kind', - _curses.KEY_SFIND: 'kFND', - _curses.KEY_SHELP: 'kHLP', - _curses.KEY_SHOME: 'kHOM', - _curses.KEY_SIC: 'kIC', - _curses.KEY_SLEFT: 'kLFT', - _curses.KEY_SMESSAGE: 'kMSG', - _curses.KEY_SMOVE: 'kMOV', - _curses.KEY_SNEXT: 'kNXT', - _curses.KEY_SOPTIONS: 'kOPT', - _curses.KEY_SPREVIOUS: 'kPRV', - _curses.KEY_SPRINT: 'kPRT', - _curses.KEY_SR: 'kri', - _curses.KEY_SREDO: 'kRDO', - _curses.KEY_SREPLACE: 'kRPL', - _curses.KEY_SRIGHT: 'kRIT', - _curses.KEY_SRSUME: 'kRES', - _curses.KEY_SSAVE: 'kSAV', - _curses.KEY_SSUSPEND: 'kSPD', - _curses.KEY_STAB: 'khts', - _curses.KEY_SUNDO: 'kUND', - _curses.KEY_SUSPEND: 'kspd', - _curses.KEY_UNDO: 'kund', - _curses.KEY_UP: 'kcuu1' - } - -def has_key(ch): - if isinstance(ch, str): - ch = ord(ch) - - # Figure out the correct capability name for the keycode. - capability_name = _capability_names.get(ch) - if capability_name is None: - return False - - #Check the current terminal description for that capability; - #if present, return true, else return false. - if _curses.tigetstr( capability_name ): - return True - else: - return False - -if __name__ == '__main__': - # Compare the output of this implementation and the ncurses has_key, - # on platforms where has_key is already available - try: - L = [] - _curses.initscr() - for key in _capability_names.keys(): - system = _curses.has_key(key) - python = has_key(key) - if system != python: - L.append( 'Mismatch for key %s, system=%i, Python=%i' - % (_curses.keyname( key ), system, python) ) - finally: - _curses.endwin() - for i in L: print(i) diff --git a/Python314_4_x86_Template/Lib/curses/panel.py b/Python314_4_x86_Template/Lib/curses/panel.py deleted file mode 100644 index 067afef73..000000000 --- a/Python314_4_x86_Template/Lib/curses/panel.py +++ /dev/null @@ -1,6 +0,0 @@ -"""curses.panel - -Module for using panels with curses. -""" - -from _curses_panel import * diff --git a/Python314_4_x86_Template/Lib/curses/textpad.py b/Python314_4_x86_Template/Lib/curses/textpad.py deleted file mode 100644 index aa87061b8..000000000 --- a/Python314_4_x86_Template/Lib/curses/textpad.py +++ /dev/null @@ -1,204 +0,0 @@ -"""Simple textbox editing widget with Emacs-like keybindings.""" - -import curses -import curses.ascii - -def rectangle(win, uly, ulx, lry, lrx): - """Draw a rectangle with corners at the provided upper-left - and lower-right coordinates. - """ - win.vline(uly+1, ulx, curses.ACS_VLINE, lry - uly - 1) - win.hline(uly, ulx+1, curses.ACS_HLINE, lrx - ulx - 1) - win.hline(lry, ulx+1, curses.ACS_HLINE, lrx - ulx - 1) - win.vline(uly+1, lrx, curses.ACS_VLINE, lry - uly - 1) - win.addch(uly, ulx, curses.ACS_ULCORNER) - win.addch(uly, lrx, curses.ACS_URCORNER) - win.addch(lry, lrx, curses.ACS_LRCORNER) - win.addch(lry, ulx, curses.ACS_LLCORNER) - -class Textbox: - """Editing widget using the interior of a window object. - Supports the following Emacs-like key bindings: - - Ctrl-A Go to left edge of window. - Ctrl-B Cursor left, wrapping to previous line if appropriate. - Ctrl-D Delete character under cursor. - Ctrl-E Go to right edge (stripspaces off) or end of line (stripspaces on). - Ctrl-F Cursor right, wrapping to next line when appropriate. - Ctrl-G Terminate, returning the window contents. - Ctrl-H Delete character backward. - Ctrl-J Terminate if the window is 1 line, otherwise insert newline. - Ctrl-K If line is blank, delete it, otherwise clear to end of line. - Ctrl-L Refresh screen. - Ctrl-N Cursor down; move down one line. - Ctrl-O Insert a blank line at cursor location. - Ctrl-P Cursor up; move up one line. - - Move operations do nothing if the cursor is at an edge where the movement - is not possible. The following synonyms are supported where possible: - - KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N - KEY_BACKSPACE = Ctrl-h - """ - def __init__(self, win, insert_mode=False): - self.win = win - self.insert_mode = insert_mode - self._update_max_yx() - self.stripspaces = 1 - self.lastcmd = None - win.keypad(1) - - def _update_max_yx(self): - maxy, maxx = self.win.getmaxyx() - self.maxy = maxy - 1 - self.maxx = maxx - 1 - - def _end_of_line(self, y): - """Go to the location of the first blank on the given line, - returning the index of the last non-blank character.""" - self._update_max_yx() - last = self.maxx - while True: - if curses.ascii.ascii(self.win.inch(y, last)) != curses.ascii.SP: - last = min(self.maxx, last+1) - break - elif last == 0: - break - last = last - 1 - return last - - def _insert_printable_char(self, ch): - self._update_max_yx() - (y, x) = self.win.getyx() - backyx = None - while y < self.maxy or x < self.maxx: - if self.insert_mode: - oldch = self.win.inch() - # The try-catch ignores the error we trigger from some curses - # versions by trying to write into the lowest-rightmost spot - # in the window. - try: - self.win.addch(ch) - except curses.error: - pass - if not self.insert_mode or not curses.ascii.isprint(oldch): - break - ch = oldch - (y, x) = self.win.getyx() - # Remember where to put the cursor back since we are in insert_mode - if backyx is None: - backyx = y, x - - if backyx is not None: - self.win.move(*backyx) - - def do_command(self, ch): - "Process a single editing command." - self._update_max_yx() - (y, x) = self.win.getyx() - self.lastcmd = ch - if curses.ascii.isprint(ch): - if y < self.maxy or x < self.maxx: - self._insert_printable_char(ch) - elif ch == curses.ascii.SOH: # ^a - self.win.move(y, 0) - elif ch in (curses.ascii.STX,curses.KEY_LEFT, - curses.ascii.BS, - curses.KEY_BACKSPACE, - curses.ascii.DEL): - if x > 0: - self.win.move(y, x-1) - elif y == 0: - pass - elif self.stripspaces: - self.win.move(y-1, self._end_of_line(y-1)) - else: - self.win.move(y-1, self.maxx) - if ch in (curses.ascii.BS, curses.KEY_BACKSPACE, curses.ascii.DEL): - self.win.delch() - elif ch == curses.ascii.EOT: # ^d - self.win.delch() - elif ch == curses.ascii.ENQ: # ^e - if self.stripspaces: - self.win.move(y, self._end_of_line(y)) - else: - self.win.move(y, self.maxx) - elif ch in (curses.ascii.ACK, curses.KEY_RIGHT): # ^f - if x < self.maxx: - self.win.move(y, x+1) - elif y == self.maxy: - pass - else: - self.win.move(y+1, 0) - elif ch == curses.ascii.BEL: # ^g - return 0 - elif ch == curses.ascii.NL: # ^j - if self.maxy == 0: - return 0 - elif y < self.maxy: - self.win.move(y+1, 0) - elif ch == curses.ascii.VT: # ^k - if x == 0 and self._end_of_line(y) == 0: - self.win.deleteln() - else: - # first undo the effect of self._end_of_line - self.win.move(y, x) - self.win.clrtoeol() - elif ch == curses.ascii.FF: # ^l - self.win.refresh() - elif ch in (curses.ascii.SO, curses.KEY_DOWN): # ^n - if y < self.maxy: - self.win.move(y+1, x) - if x > self._end_of_line(y+1): - self.win.move(y+1, self._end_of_line(y+1)) - elif ch == curses.ascii.SI: # ^o - self.win.insertln() - elif ch in (curses.ascii.DLE, curses.KEY_UP): # ^p - if y > 0: - self.win.move(y-1, x) - if x > self._end_of_line(y-1): - self.win.move(y-1, self._end_of_line(y-1)) - return 1 - - def gather(self): - "Collect and return the contents of the window." - result = "" - self._update_max_yx() - for y in range(self.maxy+1): - self.win.move(y, 0) - stop = self._end_of_line(y) - if stop == 0 and self.stripspaces: - continue - for x in range(self.maxx+1): - if self.stripspaces and x > stop: - break - result = result + chr(curses.ascii.ascii(self.win.inch(y, x))) - if self.maxy > 0: - result = result + "\n" - return result - - def edit(self, validate=None): - "Edit in the widget window and collect the results." - while 1: - ch = self.win.getch() - if validate: - ch = validate(ch) - if not ch: - continue - if not self.do_command(ch): - break - self.win.refresh() - return self.gather() - -if __name__ == '__main__': - def test_editbox(stdscr): - ncols, nlines = 9, 4 - uly, ulx = 15, 20 - stdscr.addstr(uly-2, ulx, "Use Ctrl-G to end editing.") - win = curses.newwin(nlines, ncols, uly, ulx) - rectangle(stdscr, uly-1, ulx-1, uly + nlines, ulx + ncols) - stdscr.refresh() - return Textbox(win).edit() - - str = curses.wrapper(test_editbox) - print('Contents of text box:', repr(str)) diff --git a/Python314_4_x86_Template/Lib/dataclasses.py b/Python314_4_x86_Template/Lib/dataclasses.py deleted file mode 100644 index c8dbb2477..000000000 --- a/Python314_4_x86_Template/Lib/dataclasses.py +++ /dev/null @@ -1,1804 +0,0 @@ -import re -import sys -import copy -import types -import inspect -import keyword -import itertools -import annotationlib -import abc -from reprlib import recursive_repr - - -__all__ = ['dataclass', - 'field', - 'Field', - 'FrozenInstanceError', - 'InitVar', - 'KW_ONLY', - 'MISSING', - - # Helper functions. - 'fields', - 'asdict', - 'astuple', - 'make_dataclass', - 'replace', - 'is_dataclass', - ] - -# Conditions for adding methods. The boxes indicate what action the -# dataclass decorator takes. For all of these tables, when I talk -# about init=, repr=, eq=, order=, unsafe_hash=, or frozen=, I'm -# referring to the arguments to the @dataclass decorator. When -# checking if a dunder method already exists, I mean check for an -# entry in the class's __dict__. I never check to see if an attribute -# is defined in a base class. - -# Key: -# +=========+=========================================+ -# + Value | Meaning | -# +=========+=========================================+ -# | <blank> | No action: no method is added. | -# +---------+-----------------------------------------+ -# | add | Generated method is added. | -# +---------+-----------------------------------------+ -# | raise | TypeError is raised. | -# +---------+-----------------------------------------+ -# | None | Attribute is set to None. | -# +=========+=========================================+ - -# __init__ -# -# +--- init= parameter -# | -# v | | | -# | no | yes | <--- class has __init__ in __dict__? -# +=======+=======+=======+ -# | False | | | -# +-------+-------+-------+ -# | True | add | | <- the default -# +=======+=======+=======+ - -# __repr__ -# -# +--- repr= parameter -# | -# v | | | -# | no | yes | <--- class has __repr__ in __dict__? -# +=======+=======+=======+ -# | False | | | -# +-------+-------+-------+ -# | True | add | | <- the default -# +=======+=======+=======+ - - -# __setattr__ -# __delattr__ -# -# +--- frozen= parameter -# | -# v | | | -# | no | yes | <--- class has __setattr__ or __delattr__ in __dict__? -# +=======+=======+=======+ -# | False | | | <- the default -# +-------+-------+-------+ -# | True | add | raise | -# +=======+=======+=======+ -# Raise because not adding these methods would break the "frozen-ness" -# of the class. - -# __eq__ -# -# +--- eq= parameter -# | -# v | | | -# | no | yes | <--- class has __eq__ in __dict__? -# +=======+=======+=======+ -# | False | | | -# +-------+-------+-------+ -# | True | add | | <- the default -# +=======+=======+=======+ - -# __lt__ -# __le__ -# __gt__ -# __ge__ -# -# +--- order= parameter -# | -# v | | | -# | no | yes | <--- class has any comparison method in __dict__? -# +=======+=======+=======+ -# | False | | | <- the default -# +-------+-------+-------+ -# | True | add | raise | -# +=======+=======+=======+ -# Raise because to allow this case would interfere with using -# functools.total_ordering. - -# __hash__ - -# +------------------- unsafe_hash= parameter -# | +----------- eq= parameter -# | | +--- frozen= parameter -# | | | -# v v v | | | -# | no | yes | <--- class has explicitly defined __hash__ -# +=======+=======+=======+========+========+ -# | False | False | False | | | No __eq__, use the base class __hash__ -# +-------+-------+-------+--------+--------+ -# | False | False | True | | | No __eq__, use the base class __hash__ -# +-------+-------+-------+--------+--------+ -# | False | True | False | None | | <-- the default, not hashable -# +-------+-------+-------+--------+--------+ -# | False | True | True | add | | Frozen, so hashable, allows override -# +-------+-------+-------+--------+--------+ -# | True | False | False | add | raise | Has no __eq__, but hashable -# +-------+-------+-------+--------+--------+ -# | True | False | True | add | raise | Has no __eq__, but hashable -# +-------+-------+-------+--------+--------+ -# | True | True | False | add | raise | Not frozen, but hashable -# +-------+-------+-------+--------+--------+ -# | True | True | True | add | raise | Frozen, so hashable -# +=======+=======+=======+========+========+ -# For boxes that are blank, __hash__ is untouched and therefore -# inherited from the base class. If the base is object, then -# id-based hashing is used. -# -# Note that a class may already have __hash__=None if it specified an -# __eq__ method in the class body (not one that was created by -# @dataclass). -# -# See _hash_action (below) for a coded version of this table. - -# __match_args__ -# -# +--- match_args= parameter -# | -# v | | | -# | no | yes | <--- class has __match_args__ in __dict__? -# +=======+=======+=======+ -# | False | | | -# +-------+-------+-------+ -# | True | add | | <- the default -# +=======+=======+=======+ -# __match_args__ is always added unless the class already defines it. It is a -# tuple of __init__ parameter names; non-init fields must be matched by keyword. - - -# Raised when an attempt is made to modify a frozen class. -class FrozenInstanceError(AttributeError): pass - -# A sentinel object for default values to signal that a default -# factory will be used. This is given a nice repr() which will appear -# in the function signature of dataclasses' constructors. -class _HAS_DEFAULT_FACTORY_CLASS: - def __repr__(self): - return '<factory>' -_HAS_DEFAULT_FACTORY = _HAS_DEFAULT_FACTORY_CLASS() - -# A sentinel object to detect if a parameter is supplied or not. Use -# a class to give it a better repr. -class _MISSING_TYPE: - pass -MISSING = _MISSING_TYPE() - -# A sentinel object to indicate that following fields are keyword-only by -# default. Use a class to give it a better repr. -class _KW_ONLY_TYPE: - pass -KW_ONLY = _KW_ONLY_TYPE() - -# Since most per-field metadata will be unused, create an empty -# read-only proxy that can be shared among all fields. -_EMPTY_METADATA = types.MappingProxyType({}) - -# Markers for the various kinds of fields and pseudo-fields. -class _FIELD_BASE: - def __init__(self, name): - self.name = name - def __repr__(self): - return self.name -_FIELD = _FIELD_BASE('_FIELD') -_FIELD_CLASSVAR = _FIELD_BASE('_FIELD_CLASSVAR') -_FIELD_INITVAR = _FIELD_BASE('_FIELD_INITVAR') - -# The name of an attribute on the class where we store the Field -# objects. Also used to check if a class is a Data Class. -_FIELDS = '__dataclass_fields__' - -# The name of an attribute on the class that stores the parameters to -# @dataclass. -_PARAMS = '__dataclass_params__' - -# The name of the function, that if it exists, is called at the end of -# __init__. -_POST_INIT_NAME = '__post_init__' - -# String regex that string annotations for ClassVar or InitVar must match. -# Allows "identifier.identifier[" or "identifier[". -# https://bugs.python.org/issue33453 for details. -_MODULE_IDENTIFIER_RE = re.compile(r'^(?:\s*(\w+)\s*\.)?\s*(\w+)') - -# Atomic immutable types which don't require any recursive handling and for which deepcopy -# returns the same object. We can provide a fast-path for these types in asdict and astuple. -_ATOMIC_TYPES = frozenset({ - # Common JSON Serializable types - types.NoneType, - bool, - int, - float, - str, - # Other common types - complex, - bytes, - # Other types that are also unaffected by deepcopy - types.EllipsisType, - types.NotImplementedType, - types.CodeType, - types.BuiltinFunctionType, - types.FunctionType, - type, - range, - property, -}) - -# Any marker is used in `make_dataclass` to mark unannotated fields as `Any` -# without importing `typing` module. -_ANY_MARKER = object() - - -class InitVar: - __slots__ = ('type', ) - - def __init__(self, type): - self.type = type - - def __repr__(self): - if isinstance(self.type, type): - type_name = self.type.__name__ - else: - # typing objects, e.g. List[int] - type_name = repr(self.type) - return f'dataclasses.InitVar[{type_name}]' - - def __class_getitem__(cls, type): - return InitVar(type) - -# Instances of Field are only ever created from within this module, -# and only from the field() function, although Field instances are -# exposed externally as (conceptually) read-only objects. -# -# name and type are filled in after the fact, not in __init__. -# They're not known at the time this class is instantiated, but it's -# convenient if they're available later. -# -# When cls._FIELDS is filled in with a list of Field objects, the name -# and type fields will have been populated. -class Field: - __slots__ = ('name', - 'type', - 'default', - 'default_factory', - 'repr', - 'hash', - 'init', - 'compare', - 'metadata', - 'kw_only', - 'doc', - '_field_type', # Private: not to be used by user code. - ) - - def __init__(self, default, default_factory, init, repr, hash, compare, - metadata, kw_only, doc): - self.name = None - self.type = None - self.default = default - self.default_factory = default_factory - self.init = init - self.repr = repr - self.hash = hash - self.compare = compare - self.metadata = (_EMPTY_METADATA - if metadata is None else - types.MappingProxyType(metadata)) - self.kw_only = kw_only - self.doc = doc - self._field_type = None - - @recursive_repr() - def __repr__(self): - return ('Field(' - f'name={self.name!r},' - f'type={self.type!r},' - f'default={self.default!r},' - f'default_factory={self.default_factory!r},' - f'init={self.init!r},' - f'repr={self.repr!r},' - f'hash={self.hash!r},' - f'compare={self.compare!r},' - f'metadata={self.metadata!r},' - f'kw_only={self.kw_only!r},' - f'doc={self.doc!r},' - f'_field_type={self._field_type}' - ')') - - # This is used to support the PEP 487 __set_name__ protocol in the - # case where we're using a field that contains a descriptor as a - # default value. For details on __set_name__, see - # https://peps.python.org/pep-0487/#implementation-details. - # - # Note that in _process_class, this Field object is overwritten - # with the default value, so the end result is a descriptor that - # had __set_name__ called on it at the right time. - def __set_name__(self, owner, name): - func = getattr(type(self.default), '__set_name__', None) - if func: - # There is a __set_name__ method on the descriptor, call - # it. - func(self.default, owner, name) - - __class_getitem__ = classmethod(types.GenericAlias) - - -class _DataclassParams: - __slots__ = ('init', - 'repr', - 'eq', - 'order', - 'unsafe_hash', - 'frozen', - 'match_args', - 'kw_only', - 'slots', - 'weakref_slot', - ) - - def __init__(self, - init, repr, eq, order, unsafe_hash, frozen, - match_args, kw_only, slots, weakref_slot): - self.init = init - self.repr = repr - self.eq = eq - self.order = order - self.unsafe_hash = unsafe_hash - self.frozen = frozen - self.match_args = match_args - self.kw_only = kw_only - self.slots = slots - self.weakref_slot = weakref_slot - - def __repr__(self): - return ('_DataclassParams(' - f'init={self.init!r},' - f'repr={self.repr!r},' - f'eq={self.eq!r},' - f'order={self.order!r},' - f'unsafe_hash={self.unsafe_hash!r},' - f'frozen={self.frozen!r},' - f'match_args={self.match_args!r},' - f'kw_only={self.kw_only!r},' - f'slots={self.slots!r},' - f'weakref_slot={self.weakref_slot!r}' - ')') - - -# This function is used instead of exposing Field creation directly, -# so that a type checker can be told (via overloads) that this is a -# function whose type depends on its parameters. -def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None, kw_only=MISSING, doc=None): - """Return an object to identify dataclass fields. - - default is the default value of the field. default_factory is a - 0-argument function called to initialize a field's value. If init - is true, the field will be a parameter to the class's __init__() - function. If repr is true, the field will be included in the - object's repr(). If hash is true, the field will be included in the - object's hash(). If compare is true, the field will be used in - comparison functions. metadata, if specified, must be a mapping - which is stored but not otherwise examined by dataclass. If kw_only - is true, the field will become a keyword-only parameter to - __init__(). doc is an optional docstring for this field. - - It is an error to specify both default and default_factory. - """ - - if default is not MISSING and default_factory is not MISSING: - raise ValueError('cannot specify both default and default_factory') - return Field(default, default_factory, init, repr, hash, compare, - metadata, kw_only, doc) - - -def _fields_in_init_order(fields): - # Returns the fields as __init__ will output them. It returns 2 tuples: - # the first for normal args, and the second for keyword args. - - return (tuple(f for f in fields if f.init and not f.kw_only), - tuple(f for f in fields if f.init and f.kw_only) - ) - - -def _tuple_str(obj_name, fields): - # Return a string representing each field of obj_name as a tuple - # member. So, if fields is ['x', 'y'] and obj_name is "self", - # return "(self.x,self.y)". - - # Special case for the 0-tuple. - if not fields: - return '()' - # Note the trailing comma, needed if this turns out to be a 1-tuple. - return f'({",".join([f"{obj_name}.{f.name}" for f in fields])},)' - - -class _FuncBuilder: - def __init__(self, globals): - self.names = [] - self.src = [] - self.globals = globals - self.locals = {} - self.overwrite_errors = {} - self.unconditional_adds = {} - self.method_annotations = {} - - def add_fn(self, name, args, body, *, locals=None, return_type=MISSING, - overwrite_error=False, unconditional_add=False, decorator=None, - annotation_fields=None): - if locals is not None: - self.locals.update(locals) - - # Keep track if this method is allowed to be overwritten if it already - # exists in the class. The error is method-specific, so keep it with - # the name. We'll use this when we generate all of the functions in - # the add_fns_to_class call. overwrite_error is either True, in which - # case we'll raise an error, or it's a string, in which case we'll - # raise an error and append this string. - if overwrite_error: - self.overwrite_errors[name] = overwrite_error - - # Should this function always overwrite anything that's already in the - # class? The default is to not overwrite a function that already - # exists. - if unconditional_add: - self.unconditional_adds[name] = True - - self.names.append(name) - - if annotation_fields is not None: - self.method_annotations[name] = (annotation_fields, return_type) - - args = ','.join(args) - body = '\n'.join(body) - - # Compute the text of the entire function, add it to the text we're generating. - self.src.append(f'{f' {decorator}\n' if decorator else ''} def {name}({args}):\n{body}') - - def add_fns_to_class(self, cls): - # The source to all of the functions we're generating. - fns_src = '\n'.join(self.src) - - # The locals they use. - local_vars = ','.join(self.locals.keys()) - - # The names of all of the functions, used for the return value of the - # outer function. Need to handle the 0-tuple specially. - if len(self.names) == 0: - return_names = '()' - else: - return_names =f'({",".join(self.names)},)' - - # txt is the entire function we're going to execute, including the - # bodies of the functions we're defining. Here's a greatly simplified - # version: - # def __create_fn__(): - # def __init__(self, x, y): - # self.x = x - # self.y = y - # @recursive_repr - # def __repr__(self): - # return f"cls(x={self.x!r},y={self.y!r})" - # return __init__,__repr__ - - txt = f"def __create_fn__({local_vars}):\n{fns_src}\n return {return_names}" - ns = {} - exec(txt, self.globals, ns) - fns = ns['__create_fn__'](**self.locals) - - # Now that we've generated the functions, assign them into cls. - for name, fn in zip(self.names, fns): - fn.__qualname__ = f"{cls.__qualname__}.{fn.__name__}" - - try: - annotation_fields, return_type = self.method_annotations[name] - except KeyError: - pass - else: - annotate_fn = _make_annotate_function(cls, name, annotation_fields, return_type) - fn.__annotate__ = annotate_fn - - if self.unconditional_adds.get(name, False): - setattr(cls, name, fn) - else: - already_exists = _set_new_attribute(cls, name, fn) - - # See if it's an error to overwrite this particular function. - if already_exists and (msg_extra := self.overwrite_errors.get(name)): - error_msg = (f'Cannot overwrite attribute {fn.__name__} ' - f'in class {cls.__name__}') - if not msg_extra is True: - error_msg = f'{error_msg} {msg_extra}' - - raise TypeError(error_msg) - - -def _make_annotate_function(__class__, method_name, annotation_fields, return_type): - # Create an __annotate__ function for a dataclass - # Try to return annotations in the same format as they would be - # from a regular __init__ function - - def __annotate__(format, /): - Format = annotationlib.Format - match format: - case Format.VALUE | Format.FORWARDREF | Format.STRING: - cls_annotations = {} - for base in reversed(__class__.__mro__): - cls_annotations.update( - annotationlib.get_annotations(base, format=format) - ) - - new_annotations = {} - for k in annotation_fields: - # gh-142214: The annotation may be missing in unusual dynamic cases. - # If so, just skip it. - try: - new_annotations[k] = cls_annotations[k] - except KeyError: - pass - - if return_type is not MISSING: - if format == Format.STRING: - new_annotations["return"] = annotationlib.type_repr(return_type) - else: - new_annotations["return"] = return_type - - return new_annotations - - case _: - raise NotImplementedError(format) - - # This is a flag for _add_slots to know it needs to regenerate this method - # In order to remove references to the original class when it is replaced - __annotate__.__generated_by_dataclasses__ = True - __annotate__.__qualname__ = f"{__class__.__qualname__}.{method_name}.__annotate__" - - return __annotate__ - - -def _field_assign(frozen, name, value, self_name): - # If we're a frozen class, then assign to our fields in __init__ - # via object.__setattr__. Otherwise, just use a simple - # assignment. - # - # self_name is what "self" is called in this function: don't - # hard-code "self", since that might be a field name. - if frozen: - return f' __dataclass_builtins_object__.__setattr__({self_name},{name!r},{value})' - return f' {self_name}.{name}={value}' - - -def _field_init(f, frozen, globals, self_name, slots): - # Return the text of the line in the body of __init__ that will - # initialize this field. - - default_name = f'__dataclass_dflt_{f.name}__' - if f.default_factory is not MISSING: - if f.init: - # This field has a default factory. If a parameter is - # given, use it. If not, call the factory. - globals[default_name] = f.default_factory - value = (f'{default_name}() ' - f'if {f.name} is __dataclass_HAS_DEFAULT_FACTORY__ ' - f'else {f.name}') - else: - # This is a field that's not in the __init__ params, but - # has a default factory function. It needs to be - # initialized here by calling the factory function, - # because there's no other way to initialize it. - - # For a field initialized with a default=defaultvalue, the - # class dict just has the default value - # (cls.fieldname=defaultvalue). But that won't work for a - # default factory, the factory must be called in __init__ - # and we must assign that to self.fieldname. We can't - # fall back to the class dict's value, both because it's - # not set, and because it might be different per-class - # (which, after all, is why we have a factory function!). - - globals[default_name] = f.default_factory - value = f'{default_name}()' - else: - # No default factory. - if f.init: - if f.default is MISSING: - # There's no default, just do an assignment. - value = f.name - elif f.default is not MISSING: - globals[default_name] = f.default - value = f.name - else: - # If the class has slots, then initialize this field. - if slots and f.default is not MISSING: - globals[default_name] = f.default - value = default_name - else: - # This field does not need initialization: reading from it will - # just use the class attribute that contains the default. - # Signify that to the caller by returning None. - return None - - # Only test this now, so that we can create variables for the - # default. However, return None to signify that we're not going - # to actually do the assignment statement for InitVars. - if f._field_type is _FIELD_INITVAR: - return None - - # Now, actually generate the field assignment. - return _field_assign(frozen, f.name, value, self_name) - - -def _init_param(f): - # Return the __init__ parameter string for this field. For - # example, the equivalent of 'x:int=3' (except instead of 'int', - # reference a variable set to int, and instead of '3', reference a - # variable set to 3). - if f.default is MISSING and f.default_factory is MISSING: - # There's no default, and no default_factory, just output the - # variable name and type. - default = '' - elif f.default is not MISSING: - # There's a default, this will be the name that's used to look - # it up. - default = f'=__dataclass_dflt_{f.name}__' - elif f.default_factory is not MISSING: - # There's a factory function. Set a marker. - default = '=__dataclass_HAS_DEFAULT_FACTORY__' - return f'{f.name}{default}' - - -def _init_fn(fields, std_fields, kw_only_fields, frozen, has_post_init, - self_name, func_builder, slots): - # fields contains both real fields and InitVar pseudo-fields. - - # Make sure we don't have fields without defaults following fields - # with defaults. This actually would be caught when exec-ing the - # function source code, but catching it here gives a better error - # message, and future-proofs us in case we build up the function - # using ast. - - seen_default = None - for f in std_fields: - # Only consider the non-kw-only fields in the __init__ call. - if f.init: - if not (f.default is MISSING and f.default_factory is MISSING): - seen_default = f - elif seen_default: - raise TypeError(f'non-default argument {f.name!r} ' - f'follows default argument {seen_default.name!r}') - - annotation_fields = [f.name for f in fields if f.init] - - locals = {'__dataclass_HAS_DEFAULT_FACTORY__': _HAS_DEFAULT_FACTORY, - '__dataclass_builtins_object__': object} - - body_lines = [] - for f in fields: - line = _field_init(f, frozen, locals, self_name, slots) - # line is None means that this field doesn't require - # initialization (it's a pseudo-field). Just skip it. - if line: - body_lines.append(line) - - # Does this class have a post-init function? - if has_post_init: - params_str = ','.join(f.name for f in fields - if f._field_type is _FIELD_INITVAR) - body_lines.append(f' {self_name}.{_POST_INIT_NAME}({params_str})') - - # If no body lines, use 'pass'. - if not body_lines: - body_lines = [' pass'] - - _init_params = [_init_param(f) for f in std_fields] - if kw_only_fields: - # Add the keyword-only args. Because the * can only be added if - # there's at least one keyword-only arg, there needs to be a test here - # (instead of just concatenating the lists together). - _init_params += ['*'] - _init_params += [_init_param(f) for f in kw_only_fields] - func_builder.add_fn('__init__', - [self_name] + _init_params, - body_lines, - locals=locals, - return_type=None, - annotation_fields=annotation_fields) - - -def _frozen_get_del_attr(cls, fields, func_builder): - locals = {'cls': cls, - 'FrozenInstanceError': FrozenInstanceError} - condition = 'type(self) is cls' - if fields: - condition += ' or name in {' + ', '.join(repr(f.name) for f in fields) + '}' - - func_builder.add_fn('__setattr__', - ('self', 'name', 'value'), - (f' if {condition}:', - ' raise FrozenInstanceError(f"cannot assign to field {name!r}")', - f' super(cls, self).__setattr__(name, value)'), - locals=locals, - overwrite_error=True) - func_builder.add_fn('__delattr__', - ('self', 'name'), - (f' if {condition}:', - ' raise FrozenInstanceError(f"cannot delete field {name!r}")', - f' super(cls, self).__delattr__(name)'), - locals=locals, - overwrite_error=True) - - -def _is_classvar(a_type, typing): - return (a_type is typing.ClassVar - or (typing.get_origin(a_type) is typing.ClassVar)) - - -def _is_initvar(a_type, dataclasses): - # The module we're checking against is the module we're - # currently in (dataclasses.py). - return (a_type is dataclasses.InitVar - or type(a_type) is dataclasses.InitVar) - -def _is_kw_only(a_type, dataclasses): - return a_type is dataclasses.KW_ONLY - - -def _is_type(annotation, cls, a_module, a_type, is_type_predicate): - # Given a type annotation string, does it refer to a_type in - # a_module? For example, when checking that annotation denotes a - # ClassVar, then a_module is typing, and a_type is - # typing.ClassVar. - - # It's possible to look up a_module given a_type, but it involves - # looking in sys.modules (again!), and seems like a waste since - # the caller already knows a_module. - - # - annotation is a string type annotation - # - cls is the class that this annotation was found in - # - a_module is the module we want to match - # - a_type is the type in that module we want to match - # - is_type_predicate is a function called with (obj, a_module) - # that determines if obj is of the desired type. - - # Since this test does not do a local namespace lookup (and - # instead only a module (global) lookup), there are some things it - # gets wrong. - - # With string annotations, cv0 will be detected as a ClassVar: - # CV = ClassVar - # @dataclass - # class C0: - # cv0: CV - - # But in this example cv1 will not be detected as a ClassVar: - # @dataclass - # class C1: - # CV = ClassVar - # cv1: CV - - # In C1, the code in this function (_is_type) will look up "CV" in - # the module and not find it, so it will not consider cv1 as a - # ClassVar. This is a fairly obscure corner case, and the best - # way to fix it would be to eval() the string "CV" with the - # correct global and local namespaces. However that would involve - # a eval() penalty for every single field of every dataclass - # that's defined. It was judged not worth it. - - match = _MODULE_IDENTIFIER_RE.match(annotation) - if match: - ns = None - module_name = match.group(1) - if not module_name: - # No module name, assume the class's module did - # "from dataclasses import InitVar". - ns = sys.modules.get(cls.__module__).__dict__ - else: - # Look up module_name in the class's module. - module = sys.modules.get(cls.__module__) - if module and module.__dict__.get(module_name) is a_module: - ns = sys.modules.get(a_type.__module__).__dict__ - if ns and is_type_predicate(ns.get(match.group(2)), a_module): - return True - return False - - -def _get_field(cls, a_name, a_type, default_kw_only): - # Return a Field object for this field name and type. ClassVars and - # InitVars are also returned, but marked as such (see f._field_type). - # default_kw_only is the value of kw_only to use if there isn't a field() - # that defines it. - - # If the default value isn't derived from Field, then it's only a - # normal default value. Convert it to a Field(). - default = getattr(cls, a_name, MISSING) - if isinstance(default, Field): - f = default - else: - if isinstance(default, types.MemberDescriptorType): - # This is a field in __slots__, so it has no default value. - default = MISSING - f = field(default=default) - - # Only at this point do we know the name and the type. Set them. - f.name = a_name - f.type = a_type - - # Assume it's a normal field until proven otherwise. We're next - # going to decide if it's a ClassVar or InitVar, everything else - # is just a normal field. - f._field_type = _FIELD - - # In addition to checking for actual types here, also check for - # string annotations. get_type_hints() won't always work for us - # (see https://github.com/python/typing/issues/508 for example), - # plus it's expensive and would require an eval for every string - # annotation. So, make a best effort to see if this is a ClassVar - # or InitVar using regex's and checking that the thing referenced - # is actually of the correct type. - - # For the complete discussion, see https://bugs.python.org/issue33453 - - # If typing has not been imported, then it's impossible for any - # annotation to be a ClassVar. So, only look for ClassVar if - # typing has been imported by any module (not necessarily cls's - # module). - typing = sys.modules.get('typing') - if typing: - if (_is_classvar(a_type, typing) - or (isinstance(f.type, str) - and _is_type(f.type, cls, typing, typing.ClassVar, - _is_classvar))): - f._field_type = _FIELD_CLASSVAR - - # If the type is InitVar, or if it's a matching string annotation, - # then it's an InitVar. - if f._field_type is _FIELD: - # The module we're checking against is the module we're - # currently in (dataclasses.py). - dataclasses = sys.modules[__name__] - if (_is_initvar(a_type, dataclasses) - or (isinstance(f.type, str) - and _is_type(f.type, cls, dataclasses, dataclasses.InitVar, - _is_initvar))): - f._field_type = _FIELD_INITVAR - - # Validations for individual fields. This is delayed until now, - # instead of in the Field() constructor, since only here do we - # know the field name, which allows for better error reporting. - - # Special restrictions for ClassVar and InitVar. - if f._field_type in (_FIELD_CLASSVAR, _FIELD_INITVAR): - if f.default_factory is not MISSING: - raise TypeError(f'field {f.name} cannot have a ' - 'default factory') - # Should I check for other field settings? default_factory - # seems the most serious to check for. Maybe add others. For - # example, how about init=False (or really, - # init=<not-the-default-init-value>)? It makes no sense for - # ClassVar and InitVar to specify init=<anything>. - - # kw_only validation and assignment. - if f._field_type in (_FIELD, _FIELD_INITVAR): - # For real and InitVar fields, if kw_only wasn't specified use the - # default value. - if f.kw_only is MISSING: - f.kw_only = default_kw_only - else: - # Make sure kw_only isn't set for ClassVars - assert f._field_type is _FIELD_CLASSVAR - if f.kw_only is not MISSING: - raise TypeError(f'field {f.name} is a ClassVar but specifies ' - 'kw_only') - - # For real fields, disallow mutable defaults. Use unhashable as a proxy - # indicator for mutability. Read the __hash__ attribute from the class, - # not the instance. - if f._field_type is _FIELD and f.default.__class__.__hash__ is None: - raise ValueError(f'mutable default {type(f.default)} for field ' - f'{f.name} is not allowed: use default_factory') - - return f - -def _set_new_attribute(cls, name, value): - # Never overwrites an existing attribute. Returns True if the - # attribute already exists. - if name in cls.__dict__: - return True - setattr(cls, name, value) - return False - - -# Decide if/how we're going to create a hash function. Key is -# (unsafe_hash, eq, frozen, does-hash-exist). Value is the action to -# take. The common case is to do nothing, so instead of providing a -# function that is a no-op, use None to signify that. - -def _hash_set_none(cls, fields, func_builder): - # It's sort of a hack that I'm setting this here, instead of at - # func_builder.add_fns_to_class time, but since this is an exceptional case - # (it's not setting an attribute to a function, but to a scalar value), - # just do it directly here. I might come to regret this. - cls.__hash__ = None - -def _hash_add(cls, fields, func_builder): - flds = [f for f in fields if (f.compare if f.hash is None else f.hash)] - self_tuple = _tuple_str('self', flds) - func_builder.add_fn('__hash__', - ('self',), - [f' return hash({self_tuple})'], - unconditional_add=True) - -def _hash_exception(cls, fields, func_builder): - # Raise an exception. - raise TypeError(f'Cannot overwrite attribute __hash__ ' - f'in class {cls.__name__}') - -# -# +-------------------------------------- unsafe_hash? -# | +------------------------------- eq? -# | | +------------------------ frozen? -# | | | +---------------- has-explicit-hash? -# | | | | -# | | | | +------- action -# | | | | | -# v v v v v -_hash_action = {(False, False, False, False): None, - (False, False, False, True ): None, - (False, False, True, False): None, - (False, False, True, True ): None, - (False, True, False, False): _hash_set_none, - (False, True, False, True ): None, - (False, True, True, False): _hash_add, - (False, True, True, True ): None, - (True, False, False, False): _hash_add, - (True, False, False, True ): _hash_exception, - (True, False, True, False): _hash_add, - (True, False, True, True ): _hash_exception, - (True, True, False, False): _hash_add, - (True, True, False, True ): _hash_exception, - (True, True, True, False): _hash_add, - (True, True, True, True ): _hash_exception, - } -# See https://bugs.python.org/issue32929#msg312829 for an if-statement -# version of this table. - - -def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, - match_args, kw_only, slots, weakref_slot): - # Now that dicts retain insertion order, there's no reason to use - # an ordered dict. I am leveraging that ordering here, because - # derived class fields overwrite base class fields, but the order - # is defined by the base class, which is found first. - fields = {} - - if cls.__module__ in sys.modules: - globals = sys.modules[cls.__module__].__dict__ - else: - # Theoretically this can happen if someone writes - # a custom string to cls.__module__. In which case - # such dataclass won't be fully introspectable - # (w.r.t. typing.get_type_hints) but will still function - # correctly. - globals = {} - - setattr(cls, _PARAMS, _DataclassParams(init, repr, eq, order, - unsafe_hash, frozen, - match_args, kw_only, - slots, weakref_slot)) - - # Find our base classes in reverse MRO order, and exclude - # ourselves. In reversed order so that more derived classes - # override earlier field definitions in base classes. As long as - # we're iterating over them, see if all or any of them are frozen. - any_frozen_base = False - # By default `all_frozen_bases` is `None` to represent a case, - # where some dataclasses does not have any bases with `_FIELDS` - all_frozen_bases = None - has_dataclass_bases = False - for b in cls.__mro__[-1:0:-1]: - # Only process classes that have been processed by our - # decorator. That is, they have a _FIELDS attribute. - base_fields = getattr(b, _FIELDS, None) - if base_fields is not None: - has_dataclass_bases = True - for f in base_fields.values(): - fields[f.name] = f - if all_frozen_bases is None: - all_frozen_bases = True - current_frozen = getattr(b, _PARAMS).frozen - all_frozen_bases = all_frozen_bases and current_frozen - any_frozen_base = any_frozen_base or current_frozen - - # Annotations defined specifically in this class (not in base classes). - # - # Fields are found from cls_annotations, which is guaranteed to be - # ordered. Default values are from class attributes, if a field - # has a default. If the default value is a Field(), then it - # contains additional info beyond (and possibly including) the - # actual default value. Pseudo-fields ClassVars and InitVars are - # included, despite the fact that they're not real fields. That's - # dealt with later. - cls_annotations = annotationlib.get_annotations( - cls, format=annotationlib.Format.FORWARDREF) - - # Now find fields in our class. While doing so, validate some - # things, and set the default values (as class attributes) where - # we can. - cls_fields = [] - # Get a reference to this module for the _is_kw_only() test. - KW_ONLY_seen = False - dataclasses = sys.modules[__name__] - for name, type in cls_annotations.items(): - # See if this is a marker to change the value of kw_only. - if (_is_kw_only(type, dataclasses) - or (isinstance(type, str) - and _is_type(type, cls, dataclasses, dataclasses.KW_ONLY, - _is_kw_only))): - # Switch the default to kw_only=True, and ignore this - # annotation: it's not a real field. - if KW_ONLY_seen: - raise TypeError(f'{name!r} is KW_ONLY, but KW_ONLY ' - 'has already been specified') - KW_ONLY_seen = True - kw_only = True - else: - # Otherwise it's a field of some type. - cls_fields.append(_get_field(cls, name, type, kw_only)) - - for f in cls_fields: - fields[f.name] = f - - # If the class attribute (which is the default value for this - # field) exists and is of type 'Field', replace it with the - # real default. This is so that normal class introspection - # sees a real default value, not a Field. - if isinstance(getattr(cls, f.name, None), Field): - if f.default is MISSING: - # If there's no default, delete the class attribute. - # This happens if we specify field(repr=False), for - # example (that is, we specified a field object, but - # no default value). Also if we're using a default - # factory. The class attribute should not be set at - # all in the post-processed class. - delattr(cls, f.name) - else: - setattr(cls, f.name, f.default) - - # Do we have any Field members that don't also have annotations? - for name, value in cls.__dict__.items(): - if isinstance(value, Field) and not name in cls_annotations: - raise TypeError(f'{name!r} is a field but has no type annotation') - - # Check rules that apply if we are derived from any dataclasses. - if has_dataclass_bases: - # Raise an exception if any of our bases are frozen, but we're not. - if any_frozen_base and not frozen: - raise TypeError('cannot inherit non-frozen dataclass from a ' - 'frozen one') - - # Raise an exception if we're frozen, but none of our bases are. - if all_frozen_bases is False and frozen: - raise TypeError('cannot inherit frozen dataclass from a ' - 'non-frozen one') - - # Remember all of the fields on our class (including bases). This - # also marks this class as being a dataclass. - setattr(cls, _FIELDS, fields) - - # Was this class defined with an explicit __hash__? Note that if - # __eq__ is defined in this class, then python will automatically - # set __hash__ to None. This is a heuristic, as it's possible - # that such a __hash__ == None was not auto-generated, but it's - # close enough. - class_hash = cls.__dict__.get('__hash__', MISSING) - has_explicit_hash = not (class_hash is MISSING or - (class_hash is None and '__eq__' in cls.__dict__)) - - # If we're generating ordering methods, we must be generating the - # eq methods. - if order and not eq: - raise ValueError('eq must be true if order is true') - - # Include InitVars and regular fields (so, not ClassVars). This is - # initialized here, outside of the "if init:" test, because std_init_fields - # is used with match_args, below. - all_init_fields = [f for f in fields.values() - if f._field_type in (_FIELD, _FIELD_INITVAR)] - (std_init_fields, - kw_only_init_fields) = _fields_in_init_order(all_init_fields) - - func_builder = _FuncBuilder(globals) - - if init: - # Does this class have a post-init function? - has_post_init = hasattr(cls, _POST_INIT_NAME) - - _init_fn(all_init_fields, - std_init_fields, - kw_only_init_fields, - frozen, - has_post_init, - # The name to use for the "self" - # param in __init__. Use "self" - # if possible. - '__dataclass_self__' if 'self' in fields - else 'self', - func_builder, - slots, - ) - - _set_new_attribute(cls, '__replace__', _replace) - - # Get the fields as a list, and include only real fields. This is - # used in all of the following methods. - field_list = [f for f in fields.values() if f._field_type is _FIELD] - - if repr: - flds = [f for f in field_list if f.repr] - func_builder.add_fn('__repr__', - ('self',), - [' return f"{self.__class__.__qualname__}(' + - ', '.join([f"{f.name}={{self.{f.name}!r}}" - for f in flds]) + ')"'], - locals={'__dataclasses_recursive_repr': recursive_repr}, - decorator="@__dataclasses_recursive_repr()") - - if eq: - # Create __eq__ method. There's no need for a __ne__ method, - # since python will call __eq__ and negate it. - cmp_fields = (field for field in field_list if field.compare) - terms = [f'self.{field.name}==other.{field.name}' for field in cmp_fields] - field_comparisons = ' and '.join(terms) or 'True' - func_builder.add_fn('__eq__', - ('self', 'other'), - [ ' if self is other:', - ' return True', - ' if other.__class__ is self.__class__:', - f' return {field_comparisons}', - ' return NotImplemented']) - - if order: - # Create and set the ordering methods. - flds = [f for f in field_list if f.compare] - self_tuple = _tuple_str('self', flds) - other_tuple = _tuple_str('other', flds) - for name, op in [('__lt__', '<'), - ('__le__', '<='), - ('__gt__', '>'), - ('__ge__', '>='), - ]: - # Create a comparison function. If the fields in the object are - # named 'x' and 'y', then self_tuple is the string - # '(self.x,self.y)' and other_tuple is the string - # '(other.x,other.y)'. - func_builder.add_fn(name, - ('self', 'other'), - [ ' if other.__class__ is self.__class__:', - f' return {self_tuple}{op}{other_tuple}', - ' return NotImplemented'], - overwrite_error='Consider using functools.total_ordering') - - if frozen: - _frozen_get_del_attr(cls, field_list, func_builder) - - # Decide if/how we're going to create a hash function. - hash_action = _hash_action[bool(unsafe_hash), - bool(eq), - bool(frozen), - has_explicit_hash] - if hash_action: - cls.__hash__ = hash_action(cls, field_list, func_builder) - - # Generate the methods and add them to the class. This needs to be done - # before the __doc__ logic below, since inspect will look at the __init__ - # signature. - func_builder.add_fns_to_class(cls) - - if not getattr(cls, '__doc__'): - # Create a class doc-string. - try: - # In some cases fetching a signature is not possible. - # But, we surely should not fail in this case. - text_sig = str(inspect.signature( - cls, - annotation_format=annotationlib.Format.FORWARDREF, - )).replace(' -> None', '') - except (TypeError, ValueError): - text_sig = '' - cls.__doc__ = (cls.__name__ + text_sig) - - if match_args: - # I could probably compute this once. - _set_new_attribute(cls, '__match_args__', - tuple(f.name for f in std_init_fields)) - - # It's an error to specify weakref_slot if slots is False. - if weakref_slot and not slots: - raise TypeError('weakref_slot is True but slots is False') - if slots: - cls = _add_slots(cls, frozen, weakref_slot, fields) - - abc.update_abstractmethods(cls) - - return cls - - -# _dataclass_getstate and _dataclass_setstate are needed for pickling frozen -# classes with slots. These could be slightly more performant if we generated -# the code instead of iterating over fields. But that can be a project for -# another day, if performance becomes an issue. -def _dataclass_getstate(self): - return [getattr(self, f.name) for f in fields(self)] - - -def _dataclass_setstate(self, state): - for field, value in zip(fields(self), state): - # use setattr because dataclass may be frozen - object.__setattr__(self, field.name, value) - - -def _get_slots(cls): - match cls.__dict__.get('__slots__'): - # `__dictoffset__` and `__weakrefoffset__` can tell us whether - # the base type has dict/weakref slots, in a way that works correctly - # for both Python classes and C extension types. Extension types - # don't use `__slots__` for slot creation - case None: - slots = [] - if getattr(cls, '__weakrefoffset__', -1) != 0: - slots.append('__weakref__') - if getattr(cls, '__dictoffset__', -1) != 0: - slots.append('__dict__') - yield from slots - case str(slot): - yield slot - # Slots may be any iterable, but we cannot handle an iterator - # because it will already be (partially) consumed. - case iterable if not hasattr(iterable, '__next__'): - yield from iterable - case _: - raise TypeError(f"Slots of '{cls.__name__}' cannot be determined") - - -def _update_func_cell_for__class__(f, oldcls, newcls): - # Returns True if we update a cell, else False. - if f is None: - # f will be None in the case of a property where not all of - # fget, fset, and fdel are used. Nothing to do in that case. - return False - try: - idx = f.__code__.co_freevars.index("__class__") - except ValueError: - # This function doesn't reference __class__, so nothing to do. - return False - # Fix the cell to point to the new class, if it's already pointing - # at the old class. I'm not convinced that the "is oldcls" test - # is needed, but other than performance can't hurt. - closure = f.__closure__[idx] - if closure.cell_contents is oldcls: - closure.cell_contents = newcls - return True - return False - - -def _create_slots(defined_fields, inherited_slots, field_names, weakref_slot): - # The slots for our class. Remove slots from our base classes. Add - # '__weakref__' if weakref_slot was given, unless it is already present. - seen_docs = False - slots = {} - for slot in itertools.filterfalse( - inherited_slots.__contains__, - itertools.chain( - # gh-93521: '__weakref__' also needs to be filtered out if - # already present in inherited_slots - field_names, ('__weakref__',) if weakref_slot else () - ) - ): - doc = getattr(defined_fields.get(slot), 'doc', None) - if doc is not None: - seen_docs = True - slots[slot] = doc - - # We only return dict if there's at least one doc member, - # otherwise we return tuple, which is the old default format. - if seen_docs: - return slots - return tuple(slots) - - -def _add_slots(cls, is_frozen, weakref_slot, defined_fields): - # Need to create a new class, since we can't set __slots__ after a - # class has been created, and the @dataclass decorator is called - # after the class is created. - - # Make sure __slots__ isn't already set. - if '__slots__' in cls.__dict__: - raise TypeError(f'{cls.__name__} already specifies __slots__') - - # gh-102069: Remove existing __weakref__ descriptor. - # gh-135228: Make sure the original class can be garbage collected. - sys._clear_type_descriptors(cls) - - # Create a new dict for our new class. - cls_dict = dict(cls.__dict__) - field_names = tuple(f.name for f in fields(cls)) - # Make sure slots don't overlap with those in base classes. - inherited_slots = set( - itertools.chain.from_iterable(map(_get_slots, cls.__mro__[1:-1])) - ) - - cls_dict["__slots__"] = _create_slots( - defined_fields, inherited_slots, field_names, weakref_slot, - ) - - for field_name in field_names: - # Remove our attributes, if present. They'll still be - # available in _MARKER. - cls_dict.pop(field_name, None) - - # And finally create the class. - qualname = getattr(cls, '__qualname__', None) - newcls = type(cls)(cls.__name__, cls.__bases__, cls_dict) - if qualname is not None: - newcls.__qualname__ = qualname - - if is_frozen: - # Need this for pickling frozen classes with slots. - if '__getstate__' not in cls_dict: - newcls.__getstate__ = _dataclass_getstate - if '__setstate__' not in cls_dict: - newcls.__setstate__ = _dataclass_setstate - - # Fix up any closures which reference __class__. This is used to - # fix zero argument super so that it points to the correct class - # (the newly created one, which we're returning) and not the - # original class. We can break out of this loop as soon as we - # make an update, since all closures for a class will share a - # given cell. - for member in newcls.__dict__.values(): - # If this is a wrapped function, unwrap it. - member = inspect.unwrap(member) - - if isinstance(member, types.FunctionType): - if _update_func_cell_for__class__(member, cls, newcls): - break - elif isinstance(member, property): - if (_update_func_cell_for__class__(member.fget, cls, newcls) - or _update_func_cell_for__class__(member.fset, cls, newcls) - or _update_func_cell_for__class__(member.fdel, cls, newcls)): - break - - # Get new annotations to remove references to the original class - # in forward references - newcls_ann = annotationlib.get_annotations( - newcls, format=annotationlib.Format.FORWARDREF) - - # Fix references in dataclass Fields - for f in getattr(newcls, _FIELDS).values(): - try: - ann = newcls_ann[f.name] - except KeyError: - pass - else: - f.type = ann - - # Fix the class reference in the __annotate__ method - init = newcls.__init__ - if init_annotate := getattr(init, "__annotate__", None): - if getattr(init_annotate, "__generated_by_dataclasses__", False): - _update_func_cell_for__class__(init_annotate, cls, newcls) - - return newcls - - -def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, - unsafe_hash=False, frozen=False, match_args=True, - kw_only=False, slots=False, weakref_slot=False): - """Add dunder methods based on the fields defined in the class. - - Examines PEP 526 __annotations__ to determine fields. - - If init is true, an __init__() method is added to the class. If repr - is true, a __repr__() method is added. If order is true, rich - comparison dunder methods are added. If unsafe_hash is true, a - __hash__() method is added. If frozen is true, fields may not be - assigned to after instance creation. If match_args is true, the - __match_args__ tuple is added. If kw_only is true, then by default - all fields are keyword-only. If slots is true, a new class with a - __slots__ attribute is returned. - """ - - def wrap(cls): - return _process_class(cls, init, repr, eq, order, unsafe_hash, - frozen, match_args, kw_only, slots, - weakref_slot) - - # See if we're being called as @dataclass or @dataclass(). - if cls is None: - # We're called with parens. - return wrap - - # We're called as @dataclass without parens. - return wrap(cls) - - -def fields(class_or_instance): - """Return a tuple describing the fields of this dataclass. - - Accepts a dataclass or an instance of one. Tuple elements are of - type Field. - """ - - # Might it be worth caching this, per class? - try: - fields = getattr(class_or_instance, _FIELDS) - except AttributeError: - raise TypeError('must be called with a dataclass type or instance') from None - - # Exclude pseudo-fields. Note that fields is sorted by insertion - # order, so the order of the tuple is as the fields were defined. - return tuple(f for f in fields.values() if f._field_type is _FIELD) - - -def _is_dataclass_instance(obj): - """Returns True if obj is an instance of a dataclass.""" - return hasattr(type(obj), _FIELDS) - - -def is_dataclass(obj): - """Returns True if obj is a dataclass or an instance of a - dataclass.""" - cls = obj if isinstance(obj, type) else type(obj) - return hasattr(cls, _FIELDS) - - -def asdict(obj, *, dict_factory=dict): - """Return the fields of a dataclass instance as a new dictionary mapping - field names to field values. - - Example usage:: - - @dataclass - class C: - x: int - y: int - - c = C(1, 2) - assert asdict(c) == {'x': 1, 'y': 2} - - If given, 'dict_factory' will be used instead of built-in dict. - The function applies recursively to field values that are - dataclass instances. This will also look into built-in containers: - tuples, lists, and dicts. Other objects are copied with 'copy.deepcopy()'. - """ - if not _is_dataclass_instance(obj): - raise TypeError("asdict() should be called on dataclass instances") - return _asdict_inner(obj, dict_factory) - - -def _asdict_inner(obj, dict_factory): - obj_type = type(obj) - if obj_type in _ATOMIC_TYPES: - return obj - elif hasattr(obj_type, _FIELDS): - # dataclass instance: fast path for the common case - if dict_factory is dict: - return { - f.name: _asdict_inner(getattr(obj, f.name), dict) - for f in fields(obj) - } - else: - return dict_factory([ - (f.name, _asdict_inner(getattr(obj, f.name), dict_factory)) - for f in fields(obj) - ]) - # handle the builtin types first for speed; subclasses handled below - elif obj_type is list: - return [_asdict_inner(v, dict_factory) for v in obj] - elif obj_type is dict: - return { - _asdict_inner(k, dict_factory): _asdict_inner(v, dict_factory) - for k, v in obj.items() - } - elif obj_type is tuple: - return tuple([_asdict_inner(v, dict_factory) for v in obj]) - elif issubclass(obj_type, tuple): - if hasattr(obj, '_fields'): - # obj is a namedtuple. Recurse into it, but the returned - # object is another namedtuple of the same type. This is - # similar to how other list- or tuple-derived classes are - # treated (see below), but we just need to create them - # differently because a namedtuple's __init__ needs to be - # called differently (see bpo-34363). - - # I'm not using namedtuple's _asdict() - # method, because: - # - it does not recurse in to the namedtuple fields and - # convert them to dicts (using dict_factory). - # - I don't actually want to return a dict here. The main - # use case here is json.dumps, and it handles converting - # namedtuples to lists. Admittedly we're losing some - # information here when we produce a json list instead of a - # dict. Note that if we returned dicts here instead of - # namedtuples, we could no longer call asdict() on a data - # structure where a namedtuple was used as a dict key. - return obj_type(*[_asdict_inner(v, dict_factory) for v in obj]) - else: - return obj_type(_asdict_inner(v, dict_factory) for v in obj) - elif issubclass(obj_type, dict): - if hasattr(obj_type, 'default_factory'): - # obj is a defaultdict, which has a different constructor from - # dict as it requires the default_factory as its first arg. - result = obj_type(obj.default_factory) - for k, v in obj.items(): - result[_asdict_inner(k, dict_factory)] = _asdict_inner(v, dict_factory) - return result - return obj_type((_asdict_inner(k, dict_factory), - _asdict_inner(v, dict_factory)) - for k, v in obj.items()) - elif issubclass(obj_type, list): - # Assume we can create an object of this type by passing in a - # generator - return obj_type(_asdict_inner(v, dict_factory) for v in obj) - else: - return copy.deepcopy(obj) - - -def astuple(obj, *, tuple_factory=tuple): - """Return the fields of a dataclass instance as a new tuple of field values. - - Example usage:: - - @dataclass - class C: - x: int - y: int - - c = C(1, 2) - assert astuple(c) == (1, 2) - - If given, 'tuple_factory' will be used instead of built-in tuple. - The function applies recursively to field values that are - dataclass instances. This will also look into built-in containers: - tuples, lists, and dicts. Other objects are copied with 'copy.deepcopy()'. - """ - - if not _is_dataclass_instance(obj): - raise TypeError("astuple() should be called on dataclass instances") - return _astuple_inner(obj, tuple_factory) - - -def _astuple_inner(obj, tuple_factory): - if type(obj) in _ATOMIC_TYPES: - return obj - elif _is_dataclass_instance(obj): - return tuple_factory([ - _astuple_inner(getattr(obj, f.name), tuple_factory) - for f in fields(obj) - ]) - elif isinstance(obj, tuple) and hasattr(obj, '_fields'): - # obj is a namedtuple. Recurse into it, but the returned - # object is another namedtuple of the same type. This is - # similar to how other list- or tuple-derived classes are - # treated (see below), but we just need to create them - # differently because a namedtuple's __init__ needs to be - # called differently (see bpo-34363). - return type(obj)(*[_astuple_inner(v, tuple_factory) for v in obj]) - elif isinstance(obj, (list, tuple)): - # Assume we can create an object of this type by passing in a - # generator (which is not true for namedtuples, handled - # above). - return type(obj)(_astuple_inner(v, tuple_factory) for v in obj) - elif isinstance(obj, dict): - obj_type = type(obj) - if hasattr(obj_type, 'default_factory'): - # obj is a defaultdict, which has a different constructor from - # dict as it requires the default_factory as its first arg. - result = obj_type(getattr(obj, 'default_factory')) - for k, v in obj.items(): - result[_astuple_inner(k, tuple_factory)] = _astuple_inner(v, tuple_factory) - return result - return obj_type((_astuple_inner(k, tuple_factory), _astuple_inner(v, tuple_factory)) - for k, v in obj.items()) - else: - return copy.deepcopy(obj) - - -def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, - repr=True, eq=True, order=False, unsafe_hash=False, - frozen=False, match_args=True, kw_only=False, slots=False, - weakref_slot=False, module=None, decorator=dataclass): - """Return a new dynamically created dataclass. - - The dataclass name will be 'cls_name'. 'fields' is an iterable - of either (name), (name, type) or (name, type, Field) objects. If type is - omitted, use the string 'typing.Any'. Field objects are created by - the equivalent of calling 'field(name, type [, Field-info])'.:: - - C = make_dataclass('C', ['x', ('y', int), ('z', int, field(init=False))], bases=(Base,)) - - is equivalent to:: - - @dataclass - class C(Base): - x: 'typing.Any' - y: int - z: int = field(init=False) - - For the bases and namespace parameters, see the builtin type() function. - - The parameters init, repr, eq, order, unsafe_hash, frozen, match_args, kw_only, - slots, and weakref_slot are passed to dataclass(). - - If module parameter is defined, the '__module__' attribute of the dataclass is - set to that value. - """ - - if namespace is None: - namespace = {} - - # While we're looking through the field names, validate that they - # are identifiers, are not keywords, and not duplicates. - seen = set() - annotations = {} - defaults = {} - for item in fields: - if isinstance(item, str): - name = item - tp = _ANY_MARKER - elif len(item) == 2: - name, tp, = item - elif len(item) == 3: - name, tp, spec = item - defaults[name] = spec - else: - raise TypeError(f'Invalid field: {item!r}') - - if not isinstance(name, str) or not name.isidentifier(): - raise TypeError(f'Field names must be valid identifiers: {name!r}') - if keyword.iskeyword(name): - raise TypeError(f'Field names must not be keywords: {name!r}') - if name in seen: - raise TypeError(f'Field name duplicated: {name!r}') - - seen.add(name) - annotations[name] = tp - - # We initially block the VALUE format, because inside dataclass() we'll - # call get_annotations(), which will try the VALUE format first. If we don't - # block, that means we'd always end up eagerly importing typing here, which - # is what we're trying to avoid. - value_blocked = True - - def annotate_method(format): - def get_any(): - match format: - case annotationlib.Format.STRING: - return 'typing.Any' - case annotationlib.Format.FORWARDREF: - typing = sys.modules.get("typing") - if typing is None: - return annotationlib.ForwardRef("Any", module="typing") - else: - return typing.Any - case annotationlib.Format.VALUE: - if value_blocked: - raise NotImplementedError - from typing import Any - return Any - case _: - raise NotImplementedError - annos = { - ann: get_any() if t is _ANY_MARKER else t - for ann, t in annotations.items() - } - if format == annotationlib.Format.STRING: - return annotationlib.annotations_to_string(annos) - else: - return annos - - # Update 'ns' with the user-supplied namespace plus our calculated values. - def exec_body_callback(ns): - ns.update(namespace) - ns.update(defaults) - - # We use `types.new_class()` instead of simply `type()` to allow dynamic creation - # of generic dataclasses. - cls = types.new_class(cls_name, bases, {}, exec_body_callback) - # For now, set annotations including the _ANY_MARKER. - cls.__annotate__ = annotate_method - - # For pickling to work, the __module__ variable needs to be set to the frame - # where the dataclass is created. - if module is None: - try: - module = sys._getframemodulename(1) or '__main__' - except AttributeError: - try: - module = sys._getframe(1).f_globals.get('__name__', '__main__') - except (AttributeError, ValueError): - pass - if module is not None: - cls.__module__ = module - - # Apply the normal provided decorator. - cls = decorator(cls, init=init, repr=repr, eq=eq, order=order, - unsafe_hash=unsafe_hash, frozen=frozen, - match_args=match_args, kw_only=kw_only, slots=slots, - weakref_slot=weakref_slot) - # Now that the class is ready, allow the VALUE format. - value_blocked = False - return cls - - -def replace(obj, /, **changes): - """Return a new object replacing specified fields with new values. - - This is especially useful for frozen classes. Example usage:: - - @dataclass(frozen=True) - class C: - x: int - y: int - - c = C(1, 2) - c1 = replace(c, x=3) - assert c1.x == 3 and c1.y == 2 - """ - if not _is_dataclass_instance(obj): - raise TypeError("replace() should be called on dataclass instances") - return _replace(obj, **changes) - - -def _replace(self, /, **changes): - # We're going to mutate 'changes', but that's okay because it's a - # new dict, even if called with 'replace(self, **my_changes)'. - - # It's an error to have init=False fields in 'changes'. - # If a field is not in 'changes', read its value from the provided 'self'. - - for f in getattr(self, _FIELDS).values(): - # Only consider normal fields or InitVars. - if f._field_type is _FIELD_CLASSVAR: - continue - - if not f.init: - # Error if this field is specified in changes. - if f.name in changes: - raise TypeError(f'field {f.name} is declared with ' - f'init=False, it cannot be specified with ' - f'replace()') - continue - - if f.name not in changes: - if f._field_type is _FIELD_INITVAR and f.default is MISSING: - raise TypeError(f"InitVar {f.name!r} " - f'must be specified with replace()') - changes[f.name] = getattr(self, f.name) - - # Create the new object, which calls __init__() and - # __post_init__() (if defined), using all of the init fields we've - # added and/or left in 'changes'. If there are values supplied in - # changes that aren't fields, this will correctly raise a - # TypeError. - return self.__class__(**changes) diff --git a/Python314_4_x86_Template/Lib/datetime.py b/Python314_4_x86_Template/Lib/datetime.py deleted file mode 100644 index 14f305565..000000000 --- a/Python314_4_x86_Template/Lib/datetime.py +++ /dev/null @@ -1,13 +0,0 @@ -"""Specific date/time and related types. - -See https://data.iana.org/time-zones/tz-link.html for -time zone and DST data sources. -""" - -try: - from _datetime import * -except ImportError: - from _pydatetime import * - -__all__ = ("date", "datetime", "time", "timedelta", "timezone", "tzinfo", - "MINYEAR", "MAXYEAR", "UTC") diff --git a/Python314_4_x86_Template/Lib/dbm/__init__.py b/Python314_4_x86_Template/Lib/dbm/__init__.py deleted file mode 100644 index 4fdbc54e7..000000000 --- a/Python314_4_x86_Template/Lib/dbm/__init__.py +++ /dev/null @@ -1,194 +0,0 @@ -"""Generic interface to all dbm clones. - -Use - - import dbm - d = dbm.open(file, 'w', 0o666) - -The returned object is a dbm.sqlite3, dbm.gnu, dbm.ndbm or dbm.dumb database object, dependent on the -type of database being opened (determined by the whichdb function) in the case -of an existing dbm. If the dbm does not exist and the create or new flag ('c' -or 'n') was specified, the dbm type will be determined by the availability of -the modules (tested in the above order). - -It has the following interface (key and data are strings): - - d[key] = data # store data at key (may override data at - # existing key) - data = d[key] # retrieve data at key (raise KeyError if no - # such key) - del d[key] # delete data stored at key (raises KeyError - # if no such key) - flag = key in d # true if the key exists - list = d.keys() # return a list of all existing keys (slow!) - -Future versions may change the order in which implementations are -tested for existence, and add interfaces to other dbm-like -implementations. -""" - -__all__ = ['open', 'whichdb', 'error'] - -import io -import os -import struct -import sys - - -class error(Exception): - pass - -_names = ['dbm.sqlite3', 'dbm.gnu', 'dbm.ndbm', 'dbm.dumb'] -_defaultmod = None -_modules = {} - -error = (error, OSError) - -try: - from dbm import ndbm -except ImportError: - ndbm = None - - -def open(file, flag='r', mode=0o666): - """Open or create database at path given by *file*. - - Optional argument *flag* can be 'r' (default) for read-only access, 'w' - for read-write access of an existing database, 'c' for read-write access - to a new or existing database, and 'n' for read-write access to a new - database. - - Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it - only if it doesn't exist; and 'n' always creates a new database. - """ - global _defaultmod - if _defaultmod is None: - for name in _names: - try: - mod = __import__(name, fromlist=['open']) - except ImportError: - continue - if not _defaultmod: - _defaultmod = mod - _modules[name] = mod - if not _defaultmod: - raise ImportError("no dbm clone found; tried %s" % _names) - - # guess the type of an existing database, if not creating a new one - result = whichdb(file) if 'n' not in flag else None - if result is None: - # db doesn't exist or 'n' flag was specified to create a new db - if 'c' in flag or 'n' in flag: - # file doesn't exist and the new flag was used so use default type - mod = _defaultmod - else: - raise error[0]("db file doesn't exist; " - "use 'c' or 'n' flag to create a new db") - elif result == "": - # db type cannot be determined - raise error[0]("db type could not be determined") - elif result not in _modules: - raise error[0]("db type is {0}, but the module is not " - "available".format(result)) - else: - mod = _modules[result] - return mod.open(file, flag, mode) - - -def whichdb(filename): - """Guess which db package to use to open a db file. - - Return values: - - - None if the database file can't be read; - - empty string if the file can be read but can't be recognized - - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. - - Importing the given module may still fail, and opening the - database using that module may still fail. - """ - - # Check for ndbm first -- this has a .pag and a .dir file - filename = os.fsencode(filename) - try: - f = io.open(filename + b".pag", "rb") - f.close() - f = io.open(filename + b".dir", "rb") - f.close() - return "dbm.ndbm" - except OSError: - # some dbm emulations based on Berkeley DB generate a .db file - # some do not, but they should be caught by the bsd checks - try: - f = io.open(filename + b".db", "rb") - f.close() - # guarantee we can actually open the file using dbm - # kind of overkill, but since we are dealing with emulations - # it seems like a prudent step - if ndbm is not None: - d = ndbm.open(filename) - d.close() - return "dbm.ndbm" - except OSError: - pass - - # Check for dumbdbm next -- this has a .dir and a .dat file - try: - # First check for presence of files - os.stat(filename + b".dat") - size = os.stat(filename + b".dir").st_size - # dumbdbm files with no keys are empty - if size == 0: - return "dbm.dumb" - f = io.open(filename + b".dir", "rb") - try: - if f.read(1) in (b"'", b'"'): - return "dbm.dumb" - finally: - f.close() - except OSError: - pass - - # See if the file exists, return None if not - try: - f = io.open(filename, "rb") - except OSError: - return None - - with f: - # Read the start of the file -- the magic number - s16 = f.read(16) - s = s16[0:4] - - # Return "" if not at least 4 bytes - if len(s) != 4: - return "" - - # Check for SQLite3 header string. - if s16 == b"SQLite format 3\0": - return "dbm.sqlite3" - - # Convert to 4-byte int in native byte order -- return "" if impossible - try: - (magic,) = struct.unpack("=l", s) - except struct.error: - return "" - - # Check for GNU dbm - if magic in (0x13579ace, 0x13579acd, 0x13579acf): - return "dbm.gnu" - - # Later versions of Berkeley db hash file have a 12-byte pad in - # front of the file type - try: - (magic,) = struct.unpack("=l", s16[-4:]) - except struct.error: - return "" - - # Unknown - return "" - - -if __name__ == "__main__": - for filename in sys.argv[1:]: - print(whichdb(filename) or "UNKNOWN", filename) diff --git a/Python314_4_x86_Template/Lib/dbm/dumb.py b/Python314_4_x86_Template/Lib/dbm/dumb.py deleted file mode 100644 index def120ffc..000000000 --- a/Python314_4_x86_Template/Lib/dbm/dumb.py +++ /dev/null @@ -1,319 +0,0 @@ -"""A dumb and slow but simple dbm clone. - -For database spam, spam.dir contains the index (a text file), -spam.bak *may* contain a backup of the index (also a text file), -while spam.dat contains the data (a binary file). - -XXX TO DO: - -- seems to contain a bug when updating... - -- reclaim free space (currently, space once occupied by deleted or expanded -items is never reused) - -- support concurrent access (currently, if two processes take turns making -updates, they can mess up the index) - -- support efficient access to large databases (currently, the whole index -is read when the database is opened, and some updates rewrite the whole index) - -- support opening for read-only (flag = 'm') - -""" - -import ast as _ast -import io as _io -import os as _os -import collections.abc - -__all__ = ["error", "open"] - -_BLOCKSIZE = 512 - -error = OSError - -class _Database(collections.abc.MutableMapping): - - # The on-disk directory and data files can remain in mutually - # inconsistent states for an arbitrarily long time (see comments - # at the end of __setitem__). This is only repaired when _commit() - # gets called. One place _commit() gets called is from __del__(), - # and if that occurs at program shutdown time, module globals may - # already have gotten rebound to None. Since it's crucial that - # _commit() finish successfully, we can't ignore shutdown races - # here, and _commit() must not reference any globals. - _os = _os # for _commit() - _io = _io # for _commit() - - def __init__(self, filebasename, mode, flag='c'): - filebasename = self._os.fsencode(filebasename) - self._mode = mode - self._readonly = (flag == 'r') - - # The directory file is a text file. Each line looks like - # "%r, (%d, %d)\n" % (key, pos, siz) - # where key is the string key, pos is the offset into the dat - # file of the associated value's first byte, and siz is the number - # of bytes in the associated value. - self._dirfile = filebasename + b'.dir' - - # The data file is a binary file pointed into by the directory - # file, and holds the values associated with keys. Each value - # begins at a _BLOCKSIZE-aligned byte offset, and is a raw - # binary 8-bit string value. - self._datfile = filebasename + b'.dat' - self._bakfile = filebasename + b'.bak' - - # The index is an in-memory dict, mirroring the directory file. - self._index = None # maps keys to (pos, siz) pairs - - # Handle the creation - self._create(flag) - self._update(flag) - - def _create(self, flag): - if flag == 'n': - for filename in (self._datfile, self._bakfile, self._dirfile): - try: - _os.remove(filename) - except OSError: - pass - # Mod by Jack: create data file if needed - try: - f = _io.open(self._datfile, 'r', encoding="Latin-1") - except OSError: - if flag not in ('c', 'n'): - raise - with _io.open(self._datfile, 'w', encoding="Latin-1") as f: - self._chmod(self._datfile) - else: - f.close() - - # Read directory file into the in-memory index dict. - def _update(self, flag): - self._modified = False - self._index = {} - try: - f = _io.open(self._dirfile, 'r', encoding="Latin-1") - except OSError: - if flag not in ('c', 'n'): - raise - with self._io.open(self._dirfile, 'w', encoding="Latin-1") as f: - self._chmod(self._dirfile) - else: - with f: - for line in f: - line = line.rstrip() - key, pos_and_siz_pair = _ast.literal_eval(line) - key = key.encode('Latin-1') - self._index[key] = pos_and_siz_pair - - # Write the index dict to the directory file. The original directory - # file (if any) is renamed with a .bak extension first. If a .bak - # file currently exists, it's deleted. - def _commit(self): - # CAUTION: It's vital that _commit() succeed, and _commit() can - # be called from __del__(). Therefore we must never reference a - # global in this routine. - if self._index is None or not self._modified: - return # nothing to do - - try: - self._os.unlink(self._bakfile) - except OSError: - pass - - try: - self._os.rename(self._dirfile, self._bakfile) - except OSError: - pass - - with self._io.open(self._dirfile, 'w', encoding="Latin-1") as f: - self._chmod(self._dirfile) - for key, pos_and_siz_pair in self._index.items(): - # Use Latin-1 since it has no qualms with any value in any - # position; UTF-8, though, does care sometimes. - entry = "%r, %r\n" % (key.decode('Latin-1'), pos_and_siz_pair) - f.write(entry) - self._modified = False - - sync = _commit - - def _verify_open(self): - if self._index is None: - raise error('DBM object has already been closed') - - def __getitem__(self, key): - if isinstance(key, str): - key = key.encode('utf-8') - self._verify_open() - pos, siz = self._index[key] # may raise KeyError - with _io.open(self._datfile, 'rb') as f: - f.seek(pos) - dat = f.read(siz) - return dat - - # Append val to the data file, starting at a _BLOCKSIZE-aligned - # offset. The data file is first padded with NUL bytes (if needed) - # to get to an aligned offset. Return pair - # (starting offset of val, len(val)) - def _addval(self, val): - with _io.open(self._datfile, 'rb+') as f: - f.seek(0, 2) - pos = int(f.tell()) - npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE - f.write(b'\0'*(npos-pos)) - pos = npos - f.write(val) - return (pos, len(val)) - - # Write val to the data file, starting at offset pos. The caller - # is responsible for ensuring that there's enough room starting at - # pos to hold val, without overwriting some other value. Return - # pair (pos, len(val)). - def _setval(self, pos, val): - with _io.open(self._datfile, 'rb+') as f: - f.seek(pos) - f.write(val) - return (pos, len(val)) - - # key is a new key whose associated value starts in the data file - # at offset pos and with length siz. Add an index record to - # the in-memory index dict, and append one to the directory file. - def _addkey(self, key, pos_and_siz_pair): - self._index[key] = pos_and_siz_pair - with _io.open(self._dirfile, 'a', encoding="Latin-1") as f: - self._chmod(self._dirfile) - f.write("%r, %r\n" % (key.decode("Latin-1"), pos_and_siz_pair)) - - def __setitem__(self, key, val): - if self._readonly: - raise error('The database is opened for reading only') - if isinstance(key, str): - key = key.encode('utf-8') - elif not isinstance(key, (bytes, bytearray)): - raise TypeError("keys must be bytes or strings") - if isinstance(val, str): - val = val.encode('utf-8') - elif not isinstance(val, (bytes, bytearray)): - raise TypeError("values must be bytes or strings") - self._verify_open() - self._modified = True - if key not in self._index: - self._addkey(key, self._addval(val)) - else: - # See whether the new value is small enough to fit in the - # (padded) space currently occupied by the old value. - pos, siz = self._index[key] - oldblocks = (siz + _BLOCKSIZE - 1) // _BLOCKSIZE - newblocks = (len(val) + _BLOCKSIZE - 1) // _BLOCKSIZE - if newblocks <= oldblocks: - self._index[key] = self._setval(pos, val) - else: - # The new value doesn't fit in the (padded) space used - # by the old value. The blocks used by the old value are - # forever lost. - self._index[key] = self._addval(val) - - # Note that _index may be out of synch with the directory - # file now: _setval() and _addval() don't update the directory - # file. This also means that the on-disk directory and data - # files are in a mutually inconsistent state, and they'll - # remain that way until _commit() is called. Note that this - # is a disaster (for the database) if the program crashes - # (so that _commit() never gets called). - - def __delitem__(self, key): - if self._readonly: - raise error('The database is opened for reading only') - if isinstance(key, str): - key = key.encode('utf-8') - self._verify_open() - self._modified = True - # The blocks used by the associated value are lost. - del self._index[key] - # XXX It's unclear why we do a _commit() here (the code always - # XXX has, so I'm not changing it). __setitem__ doesn't try to - # XXX keep the directory file in synch. Why should we? Or - # XXX why shouldn't __setitem__? - self._commit() - - def keys(self): - try: - return list(self._index) - except TypeError: - raise error('DBM object has already been closed') from None - - def items(self): - self._verify_open() - return [(key, self[key]) for key in self._index.keys()] - - def __contains__(self, key): - if isinstance(key, str): - key = key.encode('utf-8') - try: - return key in self._index - except TypeError: - if self._index is None: - raise error('DBM object has already been closed') from None - else: - raise - - def iterkeys(self): - try: - return iter(self._index) - except TypeError: - raise error('DBM object has already been closed') from None - __iter__ = iterkeys - - def __len__(self): - try: - return len(self._index) - except TypeError: - raise error('DBM object has already been closed') from None - - def close(self): - try: - self._commit() - finally: - self._index = self._datfile = self._dirfile = self._bakfile = None - - __del__ = close - - def _chmod(self, file): - self._os.chmod(file, self._mode) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - -def open(file, flag='c', mode=0o666): - """Open the database file, filename, and return corresponding object. - - The flag argument, used to control how the database is opened in the - other DBM implementations, supports only the semantics of 'c' and 'n' - values. Other values will default to the semantics of 'c' value: - the database will always opened for update and will be created if it - does not exist. - - The optional mode argument is the UNIX mode of the file, used only when - the database has to be created. It defaults to octal code 0o666 (and - will be modified by the prevailing umask). - - """ - - # Modify mode depending on the umask - try: - um = _os.umask(0) - _os.umask(um) - except AttributeError: - pass - else: - # Turn off any bits that are set in the umask - mode = mode & (~um) - if flag not in ('r', 'w', 'c', 'n'): - raise ValueError("Flag must be one of 'r', 'w', 'c', or 'n'") - return _Database(file, mode, flag=flag) diff --git a/Python314_4_x86_Template/Lib/dbm/gnu.py b/Python314_4_x86_Template/Lib/dbm/gnu.py deleted file mode 100644 index b07a1deff..000000000 --- a/Python314_4_x86_Template/Lib/dbm/gnu.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Provide the _gdbm module as a dbm submodule.""" - -from _gdbm import * diff --git a/Python314_4_x86_Template/Lib/dbm/ndbm.py b/Python314_4_x86_Template/Lib/dbm/ndbm.py deleted file mode 100644 index 23056a29e..000000000 --- a/Python314_4_x86_Template/Lib/dbm/ndbm.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Provide the _dbm module as a dbm submodule.""" - -from _dbm import * diff --git a/Python314_4_x86_Template/Lib/dbm/sqlite3.py b/Python314_4_x86_Template/Lib/dbm/sqlite3.py deleted file mode 100644 index d0eed54e0..000000000 --- a/Python314_4_x86_Template/Lib/dbm/sqlite3.py +++ /dev/null @@ -1,144 +0,0 @@ -import os -import sqlite3 -from pathlib import Path -from contextlib import suppress, closing -from collections.abc import MutableMapping - -BUILD_TABLE = """ - CREATE TABLE IF NOT EXISTS Dict ( - key BLOB UNIQUE NOT NULL, - value BLOB NOT NULL - ) -""" -GET_SIZE = "SELECT COUNT (key) FROM Dict" -LOOKUP_KEY = "SELECT value FROM Dict WHERE key = CAST(? AS BLOB)" -STORE_KV = "REPLACE INTO Dict (key, value) VALUES (CAST(? AS BLOB), CAST(? AS BLOB))" -DELETE_KEY = "DELETE FROM Dict WHERE key = CAST(? AS BLOB)" -ITER_KEYS = "SELECT key FROM Dict" - - -class error(OSError): - pass - - -_ERR_CLOSED = "DBM object has already been closed" -_ERR_REINIT = "DBM object does not support reinitialization" - - -def _normalize_uri(path): - path = Path(path) - uri = path.absolute().as_uri() - while "//" in uri: - uri = uri.replace("//", "/") - return uri - - -class _Database(MutableMapping): - - def __init__(self, path, /, *, flag, mode): - if hasattr(self, "_cx"): - raise error(_ERR_REINIT) - - path = os.fsdecode(path) - match flag: - case "r": - flag = "ro" - case "w": - flag = "rw" - case "c": - flag = "rwc" - Path(path).touch(mode=mode, exist_ok=True) - case "n": - flag = "rwc" - Path(path).unlink(missing_ok=True) - Path(path).touch(mode=mode) - case _: - raise ValueError("Flag must be one of 'r', 'w', 'c', or 'n', " - f"not {flag!r}") - - # We use the URI format when opening the database. - uri = _normalize_uri(path) - uri = f"{uri}?mode={flag}" - if flag == "ro": - # Add immutable=1 to allow read-only SQLite access even if wal/shm missing - uri += "&immutable=1" - - try: - self._cx = sqlite3.connect(uri, autocommit=True, uri=True) - except sqlite3.Error as exc: - raise error(str(exc)) - - if flag != "ro": - # This is an optimization only; it's ok if it fails. - with suppress(sqlite3.OperationalError): - self._cx.execute("PRAGMA journal_mode = wal") - - if flag == "rwc": - self._execute(BUILD_TABLE) - - def _execute(self, *args, **kwargs): - if not self._cx: - raise error(_ERR_CLOSED) - try: - return closing(self._cx.execute(*args, **kwargs)) - except sqlite3.Error as exc: - raise error(str(exc)) - - def __len__(self): - with self._execute(GET_SIZE) as cu: - row = cu.fetchone() - return row[0] - - def __getitem__(self, key): - with self._execute(LOOKUP_KEY, (key,)) as cu: - row = cu.fetchone() - if not row: - raise KeyError(key) - return row[0] - - def __setitem__(self, key, value): - self._execute(STORE_KV, (key, value)) - - def __delitem__(self, key): - with self._execute(DELETE_KEY, (key,)) as cu: - if not cu.rowcount: - raise KeyError(key) - - def __iter__(self): - try: - with self._execute(ITER_KEYS) as cu: - for row in cu: - yield row[0] - except sqlite3.Error as exc: - raise error(str(exc)) - - def close(self): - if self._cx: - self._cx.close() - self._cx = None - - def keys(self): - return list(super().keys()) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - -def open(filename, /, flag="r", mode=0o666): - """Open a dbm.sqlite3 database and return the dbm object. - - The 'filename' parameter is the name of the database file. - - The optional 'flag' parameter can be one of ...: - 'r' (default): open an existing database for read only access - 'w': open an existing database for read/write access - 'c': create a database if it does not exist; open for read/write access - 'n': always create a new, empty database; open for read/write access - - The optional 'mode' parameter is the Unix file access mode of the database; - only used when creating a new database. Default: 0o666. - """ - return _Database(filename, flag=flag, mode=mode) diff --git a/Python314_4_x86_Template/Lib/decimal.py b/Python314_4_x86_Template/Lib/decimal.py deleted file mode 100644 index 530bdfb38..000000000 --- a/Python314_4_x86_Template/Lib/decimal.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Decimal fixed-point and floating-point arithmetic. - -This is an implementation of decimal floating-point arithmetic based on -the General Decimal Arithmetic Specification: - - http://speleotrove.com/decimal/decarith.html - -and IEEE standard 854-1987: - - http://en.wikipedia.org/wiki/IEEE_854-1987 - -Decimal floating point has finite precision with arbitrarily large bounds. - -The purpose of this module is to support arithmetic using familiar -"schoolhouse" rules and to avoid some of the tricky representation -issues associated with binary floating point. The package is especially -useful for financial applications or for contexts where users have -expectations that are at odds with binary floating point (for instance, -in binary floating point, 1.00 % 0.1 gives 0.09999999999999995 instead -of 0.0; Decimal('1.00') % Decimal('0.1') returns the expected -Decimal('0.00')). - -Here are some examples of using the decimal module: - ->>> from decimal import * ->>> setcontext(ExtendedContext) ->>> Decimal(0) -Decimal('0') ->>> Decimal('1') -Decimal('1') ->>> Decimal('-.0123') -Decimal('-0.0123') ->>> Decimal(123456) -Decimal('123456') ->>> Decimal('123.45e12345678') -Decimal('1.2345E+12345680') ->>> Decimal('1.33') + Decimal('1.27') -Decimal('2.60') ->>> Decimal('12.34') + Decimal('3.87') - Decimal('18.41') -Decimal('-2.20') ->>> dig = Decimal(1) ->>> print(dig / Decimal(3)) -0.333333333 ->>> getcontext().prec = 18 ->>> print(dig / Decimal(3)) -0.333333333333333333 ->>> print(dig.sqrt()) -1 ->>> print(Decimal(3).sqrt()) -1.73205080756887729 ->>> print(Decimal(3) ** 123) -4.85192780976896427E+58 ->>> inf = Decimal(1) / Decimal(0) ->>> print(inf) -Infinity ->>> neginf = Decimal(-1) / Decimal(0) ->>> print(neginf) --Infinity ->>> print(neginf + inf) -NaN ->>> print(neginf * inf) --Infinity ->>> print(dig / 0) -Infinity ->>> getcontext().traps[DivisionByZero] = 1 ->>> print(dig / 0) -Traceback (most recent call last): - ... - ... - ... -decimal.DivisionByZero: x / 0 ->>> c = Context() ->>> c.traps[InvalidOperation] = 0 ->>> print(c.flags[InvalidOperation]) -0 ->>> c.divide(Decimal(0), Decimal(0)) -Decimal('NaN') ->>> c.traps[InvalidOperation] = 1 ->>> print(c.flags[InvalidOperation]) -1 ->>> c.flags[InvalidOperation] = 0 ->>> print(c.flags[InvalidOperation]) -0 ->>> print(c.divide(Decimal(0), Decimal(0))) -Traceback (most recent call last): - ... - ... - ... -decimal.InvalidOperation: 0 / 0 ->>> print(c.flags[InvalidOperation]) -1 ->>> c.flags[InvalidOperation] = 0 ->>> c.traps[InvalidOperation] = 0 ->>> print(c.divide(Decimal(0), Decimal(0))) -NaN ->>> print(c.flags[InvalidOperation]) -1 ->>> -""" - -try: - from _decimal import * - from _decimal import __version__ # noqa: F401 - from _decimal import __libmpdec_version__ # noqa: F401 -except ImportError: - import _pydecimal - import sys - _pydecimal.__doc__ = __doc__ - sys.modules[__name__] = _pydecimal diff --git a/Python314_4_x86_Template/Lib/difflib.py b/Python314_4_x86_Template/Lib/difflib.py deleted file mode 100644 index ac1ba4a6e..000000000 --- a/Python314_4_x86_Template/Lib/difflib.py +++ /dev/null @@ -1,2064 +0,0 @@ -""" -Module difflib -- helpers for computing deltas between objects. - -Function get_close_matches(word, possibilities, n=3, cutoff=0.6): - Use SequenceMatcher to return list of the best "good enough" matches. - -Function context_diff(a, b): - For two lists of strings, return a delta in context diff format. - -Function ndiff(a, b): - Return a delta: the difference between `a` and `b` (lists of strings). - -Function restore(delta, which): - Return one of the two sequences that generated an ndiff delta. - -Function unified_diff(a, b): - For two lists of strings, return a delta in unified diff format. - -Class SequenceMatcher: - A flexible class for comparing pairs of sequences of any type. - -Class Differ: - For producing human-readable deltas from sequences of lines of text. - -Class HtmlDiff: - For producing HTML side by side comparison with change highlights. -""" - -__all__ = ['get_close_matches', 'ndiff', 'restore', 'SequenceMatcher', - 'Differ','IS_CHARACTER_JUNK', 'IS_LINE_JUNK', 'context_diff', - 'unified_diff', 'diff_bytes', 'HtmlDiff', 'Match'] - -from heapq import nlargest as _nlargest -from collections import namedtuple as _namedtuple -from types import GenericAlias - -Match = _namedtuple('Match', 'a b size') - -def _calculate_ratio(matches, length): - if length: - return 2.0 * matches / length - return 1.0 - -class SequenceMatcher: - - """ - SequenceMatcher is a flexible class for comparing pairs of sequences of - any type, so long as the sequence elements are hashable. The basic - algorithm predates, and is a little fancier than, an algorithm - published in the late 1980's by Ratcliff and Obershelp under the - hyperbolic name "gestalt pattern matching". The basic idea is to find - the longest contiguous matching subsequence that contains no "junk" - elements (R-O doesn't address junk). The same idea is then applied - recursively to the pieces of the sequences to the left and to the right - of the matching subsequence. This does not yield minimal edit - sequences, but does tend to yield matches that "look right" to people. - - SequenceMatcher tries to compute a "human-friendly diff" between two - sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the - longest *contiguous* & junk-free matching subsequence. That's what - catches peoples' eyes. The Windows(tm) windiff has another interesting - notion, pairing up elements that appear uniquely in each sequence. - That, and the method here, appear to yield more intuitive difference - reports than does diff. This method appears to be the least vulnerable - to syncing up on blocks of "junk lines", though (like blank lines in - ordinary text files, or maybe "<P>" lines in HTML files). That may be - because this is the only method of the 3 that has a *concept* of - "junk" <wink>. - - Example, comparing two strings, and considering blanks to be "junk": - - >>> s = SequenceMatcher(lambda x: x == " ", - ... "private Thread currentThread;", - ... "private volatile Thread currentThread;") - >>> - - .ratio() returns a float in [0, 1], measuring the "similarity" of the - sequences. As a rule of thumb, a .ratio() value over 0.6 means the - sequences are close matches: - - >>> print(round(s.ratio(), 2)) - 0.87 - >>> - - If you're only interested in where the sequences match, - .get_matching_blocks() is handy: - - >>> for block in s.get_matching_blocks(): - ... print("a[%d] and b[%d] match for %d elements" % block) - a[0] and b[0] match for 8 elements - a[8] and b[17] match for 21 elements - a[29] and b[38] match for 0 elements - - Note that the last tuple returned by .get_matching_blocks() is always a - dummy, (len(a), len(b), 0), and this is the only case in which the last - tuple element (number of elements matched) is 0. - - If you want to know how to change the first sequence into the second, - use .get_opcodes(): - - >>> for opcode in s.get_opcodes(): - ... print("%6s a[%d:%d] b[%d:%d]" % opcode) - equal a[0:8] b[0:8] - insert a[8:8] b[8:17] - equal a[8:29] b[17:38] - - See the Differ class for a fancy human-friendly file differencer, which - uses SequenceMatcher both to compare sequences of lines, and to compare - sequences of characters within similar (near-matching) lines. - - See also function get_close_matches() in this module, which shows how - simple code building on SequenceMatcher can be used to do useful work. - - Timing: Basic R-O is cubic time worst case and quadratic time expected - case. SequenceMatcher is quadratic time for the worst case and has - expected-case behavior dependent in a complicated way on how many - elements the sequences have in common; best case time is linear. - """ - - def __init__(self, isjunk=None, a='', b='', autojunk=True): - """Construct a SequenceMatcher. - - Optional arg isjunk is None (the default), or a one-argument - function that takes a sequence element and returns true iff the - element is junk. None is equivalent to passing "lambda x: 0", i.e. - no elements are considered to be junk. For example, pass - lambda x: x in " \\t" - if you're comparing lines as sequences of characters, and don't - want to synch up on blanks or hard tabs. - - Optional arg a is the first of two sequences to be compared. By - default, an empty string. The elements of a must be hashable. See - also .set_seqs() and .set_seq1(). - - Optional arg b is the second of two sequences to be compared. By - default, an empty string. The elements of b must be hashable. See - also .set_seqs() and .set_seq2(). - - Optional arg autojunk should be set to False to disable the - "automatic junk heuristic" that treats popular elements as junk - (see module documentation for more information). - """ - - # Members: - # a - # first sequence - # b - # second sequence; differences are computed as "what do - # we need to do to 'a' to change it into 'b'?" - # b2j - # for x in b, b2j[x] is a list of the indices (into b) - # at which x appears; junk and popular elements do not appear - # fullbcount - # for x in b, fullbcount[x] == the number of times x - # appears in b; only materialized if really needed (used - # only for computing quick_ratio()) - # matching_blocks - # a list of (i, j, k) triples, where a[i:i+k] == b[j:j+k]; - # ascending & non-overlapping in i and in j; terminated by - # a dummy (len(a), len(b), 0) sentinel - # opcodes - # a list of (tag, i1, i2, j1, j2) tuples, where tag is - # one of - # 'replace' a[i1:i2] should be replaced by b[j1:j2] - # 'delete' a[i1:i2] should be deleted - # 'insert' b[j1:j2] should be inserted - # 'equal' a[i1:i2] == b[j1:j2] - # isjunk - # a user-supplied function taking a sequence element and - # returning true iff the element is "junk" -- this has - # subtle but helpful effects on the algorithm, which I'll - # get around to writing up someday <0.9 wink>. - # DON'T USE! Only __chain_b uses this. Use "in self.bjunk". - # bjunk - # the items in b for which isjunk is True. - # bpopular - # nonjunk items in b treated as junk by the heuristic (if used). - - self.isjunk = isjunk - self.a = self.b = None - self.autojunk = autojunk - self.set_seqs(a, b) - - def set_seqs(self, a, b): - """Set the two sequences to be compared. - - >>> s = SequenceMatcher() - >>> s.set_seqs("abcd", "bcde") - >>> s.ratio() - 0.75 - """ - - self.set_seq1(a) - self.set_seq2(b) - - def set_seq1(self, a): - """Set the first sequence to be compared. - - The second sequence to be compared is not changed. - - >>> s = SequenceMatcher(None, "abcd", "bcde") - >>> s.ratio() - 0.75 - >>> s.set_seq1("bcde") - >>> s.ratio() - 1.0 - >>> - - SequenceMatcher computes and caches detailed information about the - second sequence, so if you want to compare one sequence S against - many sequences, use .set_seq2(S) once and call .set_seq1(x) - repeatedly for each of the other sequences. - - See also set_seqs() and set_seq2(). - """ - - if a is self.a: - return - self.a = a - self.matching_blocks = self.opcodes = None - - def set_seq2(self, b): - """Set the second sequence to be compared. - - The first sequence to be compared is not changed. - - >>> s = SequenceMatcher(None, "abcd", "bcde") - >>> s.ratio() - 0.75 - >>> s.set_seq2("abcd") - >>> s.ratio() - 1.0 - >>> - - SequenceMatcher computes and caches detailed information about the - second sequence, so if you want to compare one sequence S against - many sequences, use .set_seq2(S) once and call .set_seq1(x) - repeatedly for each of the other sequences. - - See also set_seqs() and set_seq1(). - """ - - if b is self.b: - return - self.b = b - self.matching_blocks = self.opcodes = None - self.fullbcount = None - self.__chain_b() - - # For each element x in b, set b2j[x] to a list of the indices in - # b where x appears; the indices are in increasing order; note that - # the number of times x appears in b is len(b2j[x]) ... - # when self.isjunk is defined, junk elements don't show up in this - # map at all, which stops the central find_longest_match method - # from starting any matching block at a junk element ... - # b2j also does not contain entries for "popular" elements, meaning - # elements that account for more than 1 + 1% of the total elements, and - # when the sequence is reasonably large (>= 200 elements); this can - # be viewed as an adaptive notion of semi-junk, and yields an enormous - # speedup when, e.g., comparing program files with hundreds of - # instances of "return NULL;" ... - # note that this is only called when b changes; so for cross-product - # kinds of matches, it's best to call set_seq2 once, then set_seq1 - # repeatedly - - def __chain_b(self): - # Because isjunk is a user-defined (not C) function, and we test - # for junk a LOT, it's important to minimize the number of calls. - # Before the tricks described here, __chain_b was by far the most - # time-consuming routine in the whole module! If anyone sees - # Jim Roskind, thank him again for profile.py -- I never would - # have guessed that. - # The first trick is to build b2j ignoring the possibility - # of junk. I.e., we don't call isjunk at all yet. Throwing - # out the junk later is much cheaper than building b2j "right" - # from the start. - b = self.b - self.b2j = b2j = {} - - for i, elt in enumerate(b): - indices = b2j.setdefault(elt, []) - indices.append(i) - - # Purge junk elements - self.bjunk = junk = set() - isjunk = self.isjunk - if isjunk: - for elt in b2j.keys(): - if isjunk(elt): - junk.add(elt) - for elt in junk: # separate loop avoids separate list of keys - del b2j[elt] - - # Purge popular elements that are not junk - self.bpopular = popular = set() - n = len(b) - if self.autojunk and n >= 200: - ntest = n // 100 + 1 - for elt, idxs in b2j.items(): - if len(idxs) > ntest: - popular.add(elt) - for elt in popular: # ditto; as fast for 1% deletion - del b2j[elt] - - def find_longest_match(self, alo=0, ahi=None, blo=0, bhi=None): - """Find longest matching block in a[alo:ahi] and b[blo:bhi]. - - By default it will find the longest match in the entirety of a and b. - - If isjunk is not defined: - - Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where - alo <= i <= i+k <= ahi - blo <= j <= j+k <= bhi - and for all (i',j',k') meeting those conditions, - k >= k' - i <= i' - and if i == i', j <= j' - - In other words, of all maximal matching blocks, return one that - starts earliest in a, and of all those maximal matching blocks that - start earliest in a, return the one that starts earliest in b. - - >>> s = SequenceMatcher(None, " abcd", "abcd abcd") - >>> s.find_longest_match(0, 5, 0, 9) - Match(a=0, b=4, size=5) - - If isjunk is defined, first the longest matching block is - determined as above, but with the additional restriction that no - junk element appears in the block. Then that block is extended as - far as possible by matching (only) junk elements on both sides. So - the resulting block never matches on junk except as identical junk - happens to be adjacent to an "interesting" match. - - Here's the same example as before, but considering blanks to be - junk. That prevents " abcd" from matching the " abcd" at the tail - end of the second sequence directly. Instead only the "abcd" can - match, and matches the leftmost "abcd" in the second sequence: - - >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd") - >>> s.find_longest_match(0, 5, 0, 9) - Match(a=1, b=0, size=4) - - If no blocks match, return (alo, blo, 0). - - >>> s = SequenceMatcher(None, "ab", "c") - >>> s.find_longest_match(0, 2, 0, 1) - Match(a=0, b=0, size=0) - """ - - # CAUTION: stripping common prefix or suffix would be incorrect. - # E.g., - # ab - # acab - # Longest matching block is "ab", but if common prefix is - # stripped, it's "a" (tied with "b"). UNIX(tm) diff does so - # strip, so ends up claiming that ab is changed to acab by - # inserting "ca" in the middle. That's minimal but unintuitive: - # "it's obvious" that someone inserted "ac" at the front. - # Windiff ends up at the same place as diff, but by pairing up - # the unique 'b's and then matching the first two 'a's. - - a, b, b2j, isbjunk = self.a, self.b, self.b2j, self.bjunk.__contains__ - if ahi is None: - ahi = len(a) - if bhi is None: - bhi = len(b) - besti, bestj, bestsize = alo, blo, 0 - # find longest junk-free match - # during an iteration of the loop, j2len[j] = length of longest - # junk-free match ending with a[i-1] and b[j] - j2len = {} - nothing = [] - for i in range(alo, ahi): - # look at all instances of a[i] in b; note that because - # b2j has no junk keys, the loop is skipped if a[i] is junk - j2lenget = j2len.get - newj2len = {} - for j in b2j.get(a[i], nothing): - # a[i] matches b[j] - if j < blo: - continue - if j >= bhi: - break - k = newj2len[j] = j2lenget(j-1, 0) + 1 - if k > bestsize: - besti, bestj, bestsize = i-k+1, j-k+1, k - j2len = newj2len - - # Extend the best by non-junk elements on each end. In particular, - # "popular" non-junk elements aren't in b2j, which greatly speeds - # the inner loop above, but also means "the best" match so far - # doesn't contain any junk *or* popular non-junk elements. - while besti > alo and bestj > blo and \ - not isbjunk(b[bestj-1]) and \ - a[besti-1] == b[bestj-1]: - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - while besti+bestsize < ahi and bestj+bestsize < bhi and \ - not isbjunk(b[bestj+bestsize]) and \ - a[besti+bestsize] == b[bestj+bestsize]: - bestsize += 1 - - # Now that we have a wholly interesting match (albeit possibly - # empty!), we may as well suck up the matching junk on each - # side of it too. Can't think of a good reason not to, and it - # saves post-processing the (possibly considerable) expense of - # figuring out what to do with it. In the case of an empty - # interesting match, this is clearly the right thing to do, - # because no other kind of match is possible in the regions. - while besti > alo and bestj > blo and \ - isbjunk(b[bestj-1]) and \ - a[besti-1] == b[bestj-1]: - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - while besti+bestsize < ahi and bestj+bestsize < bhi and \ - isbjunk(b[bestj+bestsize]) and \ - a[besti+bestsize] == b[bestj+bestsize]: - bestsize = bestsize + 1 - - return Match(besti, bestj, bestsize) - - def get_matching_blocks(self): - """Return list of triples describing matching subsequences. - - Each triple is of the form (i, j, n), and means that - a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in - i and in j. New in Python 2.5, it's also guaranteed that if - (i, j, n) and (i', j', n') are adjacent triples in the list, and - the second is not the last triple in the list, then i+n != i' or - j+n != j'. IOW, adjacent triples never describe adjacent equal - blocks. - - The last triple is a dummy, (len(a), len(b), 0), and is the only - triple with n==0. - - >>> s = SequenceMatcher(None, "abxcd", "abcd") - >>> list(s.get_matching_blocks()) - [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)] - """ - - if self.matching_blocks is not None: - return self.matching_blocks - la, lb = len(self.a), len(self.b) - - # This is most naturally expressed as a recursive algorithm, but - # at least one user bumped into extreme use cases that exceeded - # the recursion limit on their box. So, now we maintain a list - # ('queue`) of blocks we still need to look at, and append partial - # results to `matching_blocks` in a loop; the matches are sorted - # at the end. - queue = [(0, la, 0, lb)] - matching_blocks = [] - while queue: - alo, ahi, blo, bhi = queue.pop() - i, j, k = x = self.find_longest_match(alo, ahi, blo, bhi) - # a[alo:i] vs b[blo:j] unknown - # a[i:i+k] same as b[j:j+k] - # a[i+k:ahi] vs b[j+k:bhi] unknown - if k: # if k is 0, there was no matching block - matching_blocks.append(x) - if alo < i and blo < j: - queue.append((alo, i, blo, j)) - if i+k < ahi and j+k < bhi: - queue.append((i+k, ahi, j+k, bhi)) - matching_blocks.sort() - - # It's possible that we have adjacent equal blocks in the - # matching_blocks list now. Starting with 2.5, this code was added - # to collapse them. - i1 = j1 = k1 = 0 - non_adjacent = [] - for i2, j2, k2 in matching_blocks: - # Is this block adjacent to i1, j1, k1? - if i1 + k1 == i2 and j1 + k1 == j2: - # Yes, so collapse them -- this just increases the length of - # the first block by the length of the second, and the first - # block so lengthened remains the block to compare against. - k1 += k2 - else: - # Not adjacent. Remember the first block (k1==0 means it's - # the dummy we started with), and make the second block the - # new block to compare against. - if k1: - non_adjacent.append((i1, j1, k1)) - i1, j1, k1 = i2, j2, k2 - if k1: - non_adjacent.append((i1, j1, k1)) - - non_adjacent.append( (la, lb, 0) ) - self.matching_blocks = list(map(Match._make, non_adjacent)) - return self.matching_blocks - - def get_opcodes(self): - """Return list of 5-tuples describing how to turn a into b. - - Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple - has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the - tuple preceding it, and likewise for j1 == the previous j2. - - The tags are strings, with these meanings: - - 'replace': a[i1:i2] should be replaced by b[j1:j2] - 'delete': a[i1:i2] should be deleted. - Note that j1==j2 in this case. - 'insert': b[j1:j2] should be inserted at a[i1:i1]. - Note that i1==i2 in this case. - 'equal': a[i1:i2] == b[j1:j2] - - >>> a = "qabxcd" - >>> b = "abycdf" - >>> s = SequenceMatcher(None, a, b) - >>> for tag, i1, i2, j1, j2 in s.get_opcodes(): - ... print(("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % - ... (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))) - delete a[0:1] (q) b[0:0] () - equal a[1:3] (ab) b[0:2] (ab) - replace a[3:4] (x) b[2:3] (y) - equal a[4:6] (cd) b[3:5] (cd) - insert a[6:6] () b[5:6] (f) - """ - - if self.opcodes is not None: - return self.opcodes - i = j = 0 - self.opcodes = answer = [] - for ai, bj, size in self.get_matching_blocks(): - # invariant: we've pumped out correct diffs to change - # a[:i] into b[:j], and the next matching block is - # a[ai:ai+size] == b[bj:bj+size]. So we need to pump - # out a diff to change a[i:ai] into b[j:bj], pump out - # the matching block, and move (i,j) beyond the match - tag = '' - if i < ai and j < bj: - tag = 'replace' - elif i < ai: - tag = 'delete' - elif j < bj: - tag = 'insert' - if tag: - answer.append( (tag, i, ai, j, bj) ) - i, j = ai+size, bj+size - # the list of matching blocks is terminated by a - # sentinel with size 0 - if size: - answer.append( ('equal', ai, i, bj, j) ) - return answer - - def get_grouped_opcodes(self, n=3): - """ Isolate change clusters by eliminating ranges with no changes. - - Return a generator of groups with up to n lines of context. - Each group is in the same format as returned by get_opcodes(). - - >>> from pprint import pprint - >>> a = list(map(str, range(1,40))) - >>> b = a[:] - >>> b[8:8] = ['i'] # Make an insertion - >>> b[20] += 'x' # Make a replacement - >>> b[23:28] = [] # Make a deletion - >>> b[30] += 'y' # Make another replacement - >>> pprint(list(SequenceMatcher(None,a,b).get_grouped_opcodes())) - [[('equal', 5, 8, 5, 8), ('insert', 8, 8, 8, 9), ('equal', 8, 11, 9, 12)], - [('equal', 16, 19, 17, 20), - ('replace', 19, 20, 20, 21), - ('equal', 20, 22, 21, 23), - ('delete', 22, 27, 23, 23), - ('equal', 27, 30, 23, 26)], - [('equal', 31, 34, 27, 30), - ('replace', 34, 35, 30, 31), - ('equal', 35, 38, 31, 34)]] - """ - - codes = self.get_opcodes() - if not codes: - codes = [("equal", 0, 1, 0, 1)] - # Fixup leading and trailing groups if they show no changes. - if codes[0][0] == 'equal': - tag, i1, i2, j1, j2 = codes[0] - codes[0] = tag, max(i1, i2-n), i2, max(j1, j2-n), j2 - if codes[-1][0] == 'equal': - tag, i1, i2, j1, j2 = codes[-1] - codes[-1] = tag, i1, min(i2, i1+n), j1, min(j2, j1+n) - - nn = n + n - group = [] - for tag, i1, i2, j1, j2 in codes: - # End the current group and start a new one whenever - # there is a large range with no changes. - if tag == 'equal' and i2-i1 > nn: - group.append((tag, i1, min(i2, i1+n), j1, min(j2, j1+n))) - yield group - group = [] - i1, j1 = max(i1, i2-n), max(j1, j2-n) - group.append((tag, i1, i2, j1 ,j2)) - if group and not (len(group)==1 and group[0][0] == 'equal'): - yield group - - def ratio(self): - """Return a measure of the sequences' similarity (float in [0,1]). - - Where T is the total number of elements in both sequences, and - M is the number of matches, this is 2.0*M / T. - Note that this is 1 if the sequences are identical, and 0 if - they have nothing in common. - - .ratio() is expensive to compute if you haven't already computed - .get_matching_blocks() or .get_opcodes(), in which case you may - want to try .quick_ratio() or .real_quick_ratio() first to get an - upper bound. - - >>> s = SequenceMatcher(None, "abcd", "bcde") - >>> s.ratio() - 0.75 - >>> s.quick_ratio() - 0.75 - >>> s.real_quick_ratio() - 1.0 - """ - - matches = sum(triple[-1] for triple in self.get_matching_blocks()) - return _calculate_ratio(matches, len(self.a) + len(self.b)) - - def quick_ratio(self): - """Return an upper bound on ratio() relatively quickly. - - This isn't defined beyond that it is an upper bound on .ratio(), and - is faster to compute. - """ - - # viewing a and b as multisets, set matches to the cardinality - # of their intersection; this counts the number of matches - # without regard to order, so is clearly an upper bound - if self.fullbcount is None: - self.fullbcount = fullbcount = {} - for elt in self.b: - fullbcount[elt] = fullbcount.get(elt, 0) + 1 - fullbcount = self.fullbcount - # avail[x] is the number of times x appears in 'b' less the - # number of times we've seen it in 'a' so far ... kinda - avail = {} - availhas, matches = avail.__contains__, 0 - for elt in self.a: - if availhas(elt): - numb = avail[elt] - else: - numb = fullbcount.get(elt, 0) - avail[elt] = numb - 1 - if numb > 0: - matches = matches + 1 - return _calculate_ratio(matches, len(self.a) + len(self.b)) - - def real_quick_ratio(self): - """Return an upper bound on ratio() very quickly. - - This isn't defined beyond that it is an upper bound on .ratio(), and - is faster to compute than either .ratio() or .quick_ratio(). - """ - - la, lb = len(self.a), len(self.b) - # can't have more matches than the number of elements in the - # shorter sequence - return _calculate_ratio(min(la, lb), la + lb) - - __class_getitem__ = classmethod(GenericAlias) - - -def get_close_matches(word, possibilities, n=3, cutoff=0.6): - """Use SequenceMatcher to return list of the best "good enough" matches. - - word is a sequence for which close matches are desired (typically a - string). - - possibilities is a list of sequences against which to match word - (typically a list of strings). - - Optional arg n (default 3) is the maximum number of close matches to - return. n must be > 0. - - Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities - that don't score at least that similar to word are ignored. - - The best (no more than n) matches among the possibilities are returned - in a list, sorted by similarity score, most similar first. - - >>> get_close_matches("appel", ["ape", "apple", "peach", "puppy"]) - ['apple', 'ape'] - >>> import keyword as _keyword - >>> get_close_matches("wheel", _keyword.kwlist) - ['while'] - >>> get_close_matches("Apple", _keyword.kwlist) - [] - >>> get_close_matches("accept", _keyword.kwlist) - ['except'] - """ - - if not n > 0: - raise ValueError("n must be > 0: %r" % (n,)) - if not 0.0 <= cutoff <= 1.0: - raise ValueError("cutoff must be in [0.0, 1.0]: %r" % (cutoff,)) - result = [] - s = SequenceMatcher() - s.set_seq2(word) - for x in possibilities: - s.set_seq1(x) - if s.real_quick_ratio() >= cutoff and \ - s.quick_ratio() >= cutoff and \ - s.ratio() >= cutoff: - result.append((s.ratio(), x)) - - # Move the best scorers to head of list - result = _nlargest(n, result) - # Strip scores for the best n matches - return [x for score, x in result] - - -def _keep_original_ws(s, tag_s): - """Replace whitespace with the original whitespace characters in `s`""" - return ''.join( - c if tag_c == " " and c.isspace() else tag_c - for c, tag_c in zip(s, tag_s) - ) - - - -class Differ: - r""" - Differ is a class for comparing sequences of lines of text, and - producing human-readable differences or deltas. Differ uses - SequenceMatcher both to compare sequences of lines, and to compare - sequences of characters within similar (near-matching) lines. - - Each line of a Differ delta begins with a two-letter code: - - '- ' line unique to sequence 1 - '+ ' line unique to sequence 2 - ' ' line common to both sequences - '? ' line not present in either input sequence - - Lines beginning with '? ' attempt to guide the eye to intraline - differences, and were not present in either input sequence. These lines - can be confusing if the sequences contain tab characters. - - Note that Differ makes no claim to produce a *minimal* diff. To the - contrary, minimal diffs are often counter-intuitive, because they synch - up anywhere possible, sometimes accidental matches 100 pages apart. - Restricting synch points to contiguous matches preserves some notion of - locality, at the occasional cost of producing a longer diff. - - Example: Comparing two texts. - - First we set up the texts, sequences of individual single-line strings - ending with newlines (such sequences can also be obtained from the - `readlines()` method of file-like objects): - - >>> text1 = ''' 1. Beautiful is better than ugly. - ... 2. Explicit is better than implicit. - ... 3. Simple is better than complex. - ... 4. Complex is better than complicated. - ... '''.splitlines(keepends=True) - >>> len(text1) - 4 - >>> text1[0][-1] - '\n' - >>> text2 = ''' 1. Beautiful is better than ugly. - ... 3. Simple is better than complex. - ... 4. Complicated is better than complex. - ... 5. Flat is better than nested. - ... '''.splitlines(keepends=True) - - Next we instantiate a Differ object: - - >>> d = Differ() - - Note that when instantiating a Differ object we may pass functions to - filter out line and character 'junk'. See Differ.__init__ for details. - - Finally, we compare the two: - - >>> result = list(d.compare(text1, text2)) - - 'result' is a list of strings, so let's pretty-print it: - - >>> from pprint import pprint as _pprint - >>> _pprint(result) - [' 1. Beautiful is better than ugly.\n', - '- 2. Explicit is better than implicit.\n', - '- 3. Simple is better than complex.\n', - '+ 3. Simple is better than complex.\n', - '? ++\n', - '- 4. Complex is better than complicated.\n', - '? ^ ---- ^\n', - '+ 4. Complicated is better than complex.\n', - '? ++++ ^ ^\n', - '+ 5. Flat is better than nested.\n'] - - As a single multi-line string it looks like this: - - >>> print(''.join(result), end="") - 1. Beautiful is better than ugly. - - 2. Explicit is better than implicit. - - 3. Simple is better than complex. - + 3. Simple is better than complex. - ? ++ - - 4. Complex is better than complicated. - ? ^ ---- ^ - + 4. Complicated is better than complex. - ? ++++ ^ ^ - + 5. Flat is better than nested. - """ - - def __init__(self, linejunk=None, charjunk=None): - """ - Construct a text differencer, with optional filters. - - The two optional keyword parameters are for filter functions: - - - `linejunk`: A function that should accept a single string argument, - and return true iff the string is junk. The module-level function - `IS_LINE_JUNK` may be used to filter out lines without visible - characters, except for at most one splat ('#'). It is recommended - to leave linejunk None; the underlying SequenceMatcher class has - an adaptive notion of "noise" lines that's better than any static - definition the author has ever been able to craft. - - - `charjunk`: A function that should accept a string of length 1. The - module-level function `IS_CHARACTER_JUNK` may be used to filter out - whitespace characters (a blank or tab; **note**: bad idea to include - newline in this!). Use of IS_CHARACTER_JUNK is recommended. - """ - - self.linejunk = linejunk - self.charjunk = charjunk - - def compare(self, a, b): - r""" - Compare two sequences of lines; generate the resulting delta. - - Each sequence must contain individual single-line strings ending with - newlines. Such sequences can be obtained from the `readlines()` method - of file-like objects. The delta generated also consists of newline- - terminated strings, ready to be printed as-is via the writelines() - method of a file-like object. - - Example: - - >>> print(''.join(Differ().compare('one\ntwo\nthree\n'.splitlines(True), - ... 'ore\ntree\nemu\n'.splitlines(True))), - ... end="") - - one - ? ^ - + ore - ? ^ - - two - - three - ? - - + tree - + emu - """ - - cruncher = SequenceMatcher(self.linejunk, a, b) - for tag, alo, ahi, blo, bhi in cruncher.get_opcodes(): - if tag == 'replace': - g = self._fancy_replace(a, alo, ahi, b, blo, bhi) - elif tag == 'delete': - g = self._dump('-', a, alo, ahi) - elif tag == 'insert': - g = self._dump('+', b, blo, bhi) - elif tag == 'equal': - g = self._dump(' ', a, alo, ahi) - else: - raise ValueError('unknown tag %r' % (tag,)) - - yield from g - - def _dump(self, tag, x, lo, hi): - """Generate comparison results for a same-tagged range.""" - for i in range(lo, hi): - yield '%s %s' % (tag, x[i]) - - def _plain_replace(self, a, alo, ahi, b, blo, bhi): - assert alo < ahi and blo < bhi - # dump the shorter block first -- reduces the burden on short-term - # memory if the blocks are of very different sizes - if bhi - blo < ahi - alo: - first = self._dump('+', b, blo, bhi) - second = self._dump('-', a, alo, ahi) - else: - first = self._dump('-', a, alo, ahi) - second = self._dump('+', b, blo, bhi) - - for g in first, second: - yield from g - - def _fancy_replace(self, a, alo, ahi, b, blo, bhi): - r""" - When replacing one block of lines with another, search the blocks - for *similar* lines; the best-matching pair (if any) is used as a - synch point, and intraline difference marking is done on the - similar pair. Lots of work, but often worth it. - - Example: - - >>> d = Differ() - >>> results = d._fancy_replace(['abcDefghiJkl\n'], 0, 1, - ... ['abcdefGhijkl\n'], 0, 1) - >>> print(''.join(results), end="") - - abcDefghiJkl - ? ^ ^ ^ - + abcdefGhijkl - ? ^ ^ ^ - """ - # Don't synch up unless the lines have a similarity score above - # cutoff. Previously only the smallest pair was handled here, - # and if there are many pairs with the best ratio, recursion - # could grow very deep, and runtime cubic. See: - # https://github.com/python/cpython/issues/119105 - # - # Later, more pathological cases prompted removing recursion - # entirely. - cutoff = 0.74999 - cruncher = SequenceMatcher(self.charjunk) - crqr = cruncher.real_quick_ratio - cqr = cruncher.quick_ratio - cr = cruncher.ratio - - WINDOW = 10 - best_i = best_j = None - dump_i, dump_j = alo, blo # smallest indices not yet resolved - for j in range(blo, bhi): - cruncher.set_seq2(b[j]) - # Search the corresponding i's within WINDOW for rhe highest - # ratio greater than `cutoff`. - aequiv = alo + (j - blo) - arange = range(max(aequiv - WINDOW, dump_i), - min(aequiv + WINDOW + 1, ahi)) - if not arange: # likely exit if `a` is shorter than `b` - break - best_ratio = cutoff - for i in arange: - cruncher.set_seq1(a[i]) - # Ordering by cheapest to most expensive ratio is very - # valuable, most often getting out early. - if (crqr() > best_ratio - and cqr() > best_ratio - and cr() > best_ratio): - best_i, best_j, best_ratio = i, j, cr() - - if best_i is None: - # found nothing to synch on yet - move to next j - continue - - # pump out straight replace from before this synch pair - yield from self._fancy_helper(a, dump_i, best_i, - b, dump_j, best_j) - # do intraline marking on the synch pair - aelt, belt = a[best_i], b[best_j] - if aelt != belt: - # pump out a '-', '?', '+', '?' quad for the synched lines - atags = btags = "" - cruncher.set_seqs(aelt, belt) - for tag, ai1, ai2, bj1, bj2 in cruncher.get_opcodes(): - la, lb = ai2 - ai1, bj2 - bj1 - if tag == 'replace': - atags += '^' * la - btags += '^' * lb - elif tag == 'delete': - atags += '-' * la - elif tag == 'insert': - btags += '+' * lb - elif tag == 'equal': - atags += ' ' * la - btags += ' ' * lb - else: - raise ValueError('unknown tag %r' % (tag,)) - yield from self._qformat(aelt, belt, atags, btags) - else: - # the synch pair is identical - yield ' ' + aelt - dump_i, dump_j = best_i + 1, best_j + 1 - best_i = best_j = None - - # pump out straight replace from after the last synch pair - yield from self._fancy_helper(a, dump_i, ahi, - b, dump_j, bhi) - - def _fancy_helper(self, a, alo, ahi, b, blo, bhi): - g = [] - if alo < ahi: - if blo < bhi: - g = self._plain_replace(a, alo, ahi, b, blo, bhi) - else: - g = self._dump('-', a, alo, ahi) - elif blo < bhi: - g = self._dump('+', b, blo, bhi) - - yield from g - - def _qformat(self, aline, bline, atags, btags): - r""" - Format "?" output and deal with tabs. - - Example: - - >>> d = Differ() - >>> results = d._qformat('\tabcDefghiJkl\n', '\tabcdefGhijkl\n', - ... ' ^ ^ ^ ', ' ^ ^ ^ ') - >>> for line in results: print(repr(line)) - ... - '- \tabcDefghiJkl\n' - '? \t ^ ^ ^\n' - '+ \tabcdefGhijkl\n' - '? \t ^ ^ ^\n' - """ - atags = _keep_original_ws(aline, atags).rstrip() - btags = _keep_original_ws(bline, btags).rstrip() - - yield "- " + aline - if atags: - yield f"? {atags}\n" - - yield "+ " + bline - if btags: - yield f"? {btags}\n" - -# With respect to junk, an earlier version of ndiff simply refused to -# *start* a match with a junk element. The result was cases like this: -# before: private Thread currentThread; -# after: private volatile Thread currentThread; -# If you consider whitespace to be junk, the longest contiguous match -# not starting with junk is "e Thread currentThread". So ndiff reported -# that "e volatil" was inserted between the 't' and the 'e' in "private". -# While an accurate view, to people that's absurd. The current version -# looks for matching blocks that are entirely junk-free, then extends the -# longest one of those as far as possible but only with matching junk. -# So now "currentThread" is matched, then extended to suck up the -# preceding blank; then "private" is matched, and extended to suck up the -# following blank; then "Thread" is matched; and finally ndiff reports -# that "volatile " was inserted before "Thread". The only quibble -# remaining is that perhaps it was really the case that " volatile" -# was inserted after "private". I can live with that <wink>. - -def IS_LINE_JUNK(line, pat=None): - r""" - Return True for ignorable line: if `line` is blank or contains a single '#'. - - Examples: - - >>> IS_LINE_JUNK('\n') - True - >>> IS_LINE_JUNK(' # \n') - True - >>> IS_LINE_JUNK('hello\n') - False - """ - - if pat is None: - # Default: match '#' or the empty string - return line.strip() in '#' - # Previous versions used the undocumented parameter 'pat' as a - # match function. Retain this behaviour for compatibility. - return pat(line) is not None - -def IS_CHARACTER_JUNK(ch, ws=" \t"): - r""" - Return True for ignorable character: iff `ch` is a space or tab. - - Examples: - - >>> IS_CHARACTER_JUNK(' ') - True - >>> IS_CHARACTER_JUNK('\t') - True - >>> IS_CHARACTER_JUNK('\n') - False - >>> IS_CHARACTER_JUNK('x') - False - """ - - return ch in ws - - -######################################################################## -### Unified Diff -######################################################################## - -def _format_range_unified(start, stop): - 'Convert range to the "ed" format' - # Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning = start + 1 # lines start numbering with one - length = stop - start - if length == 1: - return '{}'.format(beginning) - if not length: - beginning -= 1 # empty ranges begin at line just before the range - return '{},{}'.format(beginning, length) - -def unified_diff(a, b, fromfile='', tofile='', fromfiledate='', - tofiledate='', n=3, lineterm='\n'): - r""" - Compare two sequences of lines; generate the delta as a unified diff. - - Unified diffs are a compact way of showing line changes and a few - lines of context. The number of context lines is set by 'n' which - defaults to three. - - By default, the diff control lines (those with ---, +++, or @@) are - created with a trailing newline. This is helpful so that inputs - created from file.readlines() result in diffs that are suitable for - file.writelines() since both the inputs and outputs have trailing - newlines. - - For inputs that do not have trailing newlines, set the lineterm - argument to "" so that the output will be uniformly newline free. - - The unidiff format normally has a header for filenames and modification - times. Any or all of these may be specified using strings for - 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. - The modification times are normally expressed in the ISO 8601 format. - - Example: - - >>> for line in unified_diff('one two three four'.split(), - ... 'zero one tree four'.split(), 'Original', 'Current', - ... '2005-01-26 23:30:50', '2010-04-02 10:20:52', - ... lineterm=''): - ... print(line) # doctest: +NORMALIZE_WHITESPACE - --- Original 2005-01-26 23:30:50 - +++ Current 2010-04-02 10:20:52 - @@ -1,4 +1,4 @@ - +zero - one - -two - -three - +tree - four - """ - - _check_types(a, b, fromfile, tofile, fromfiledate, tofiledate, lineterm) - started = False - for group in SequenceMatcher(None,a,b).get_grouped_opcodes(n): - if not started: - started = True - fromdate = '\t{}'.format(fromfiledate) if fromfiledate else '' - todate = '\t{}'.format(tofiledate) if tofiledate else '' - yield '--- {}{}{}'.format(fromfile, fromdate, lineterm) - yield '+++ {}{}{}'.format(tofile, todate, lineterm) - - first, last = group[0], group[-1] - file1_range = _format_range_unified(first[1], last[2]) - file2_range = _format_range_unified(first[3], last[4]) - yield '@@ -{} +{} @@{}'.format(file1_range, file2_range, lineterm) - - for tag, i1, i2, j1, j2 in group: - if tag == 'equal': - for line in a[i1:i2]: - yield ' ' + line - continue - if tag in {'replace', 'delete'}: - for line in a[i1:i2]: - yield '-' + line - if tag in {'replace', 'insert'}: - for line in b[j1:j2]: - yield '+' + line - - -######################################################################## -### Context Diff -######################################################################## - -def _format_range_context(start, stop): - 'Convert range to the "ed" format' - # Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning = start + 1 # lines start numbering with one - length = stop - start - if not length: - beginning -= 1 # empty ranges begin at line just before the range - if length <= 1: - return '{}'.format(beginning) - return '{},{}'.format(beginning, beginning + length - 1) - -# See http://www.unix.org/single_unix_specification/ -def context_diff(a, b, fromfile='', tofile='', - fromfiledate='', tofiledate='', n=3, lineterm='\n'): - r""" - Compare two sequences of lines; generate the delta as a context diff. - - Context diffs are a compact way of showing line changes and a few - lines of context. The number of context lines is set by 'n' which - defaults to three. - - By default, the diff control lines (those with *** or ---) are - created with a trailing newline. This is helpful so that inputs - created from file.readlines() result in diffs that are suitable for - file.writelines() since both the inputs and outputs have trailing - newlines. - - For inputs that do not have trailing newlines, set the lineterm - argument to "" so that the output will be uniformly newline free. - - The context diff format normally has a header for filenames and - modification times. Any or all of these may be specified using - strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. - The modification times are normally expressed in the ISO 8601 format. - If not specified, the strings default to blanks. - - Example: - - >>> print(''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(True), - ... 'zero\none\ntree\nfour\n'.splitlines(True), 'Original', 'Current')), - ... end="") - *** Original - --- Current - *************** - *** 1,4 **** - one - ! two - ! three - four - --- 1,4 ---- - + zero - one - ! tree - four - """ - - _check_types(a, b, fromfile, tofile, fromfiledate, tofiledate, lineterm) - prefix = dict(insert='+ ', delete='- ', replace='! ', equal=' ') - started = False - for group in SequenceMatcher(None,a,b).get_grouped_opcodes(n): - if not started: - started = True - fromdate = '\t{}'.format(fromfiledate) if fromfiledate else '' - todate = '\t{}'.format(tofiledate) if tofiledate else '' - yield '*** {}{}{}'.format(fromfile, fromdate, lineterm) - yield '--- {}{}{}'.format(tofile, todate, lineterm) - - first, last = group[0], group[-1] - yield '***************' + lineterm - - file1_range = _format_range_context(first[1], last[2]) - yield '*** {} ****{}'.format(file1_range, lineterm) - - if any(tag in {'replace', 'delete'} for tag, _, _, _, _ in group): - for tag, i1, i2, _, _ in group: - if tag != 'insert': - for line in a[i1:i2]: - yield prefix[tag] + line - - file2_range = _format_range_context(first[3], last[4]) - yield '--- {} ----{}'.format(file2_range, lineterm) - - if any(tag in {'replace', 'insert'} for tag, _, _, _, _ in group): - for tag, _, _, j1, j2 in group: - if tag != 'delete': - for line in b[j1:j2]: - yield prefix[tag] + line - -def _check_types(a, b, *args): - # Checking types is weird, but the alternative is garbled output when - # someone passes mixed bytes and str to {unified,context}_diff(). E.g. - # without this check, passing filenames as bytes results in output like - # --- b'oldfile.txt' - # +++ b'newfile.txt' - # because of how str.format() incorporates bytes objects. - if a and not isinstance(a[0], str): - raise TypeError('lines to compare must be str, not %s (%r)' % - (type(a[0]).__name__, a[0])) - if b and not isinstance(b[0], str): - raise TypeError('lines to compare must be str, not %s (%r)' % - (type(b[0]).__name__, b[0])) - if isinstance(a, str): - raise TypeError('input must be a sequence of strings, not %s' % - type(a).__name__) - if isinstance(b, str): - raise TypeError('input must be a sequence of strings, not %s' % - type(b).__name__) - for arg in args: - if not isinstance(arg, str): - raise TypeError('all arguments must be str, not: %r' % (arg,)) - -def diff_bytes(dfunc, a, b, fromfile=b'', tofile=b'', - fromfiledate=b'', tofiledate=b'', n=3, lineterm=b'\n'): - r""" - Compare `a` and `b`, two sequences of lines represented as bytes rather - than str. This is a wrapper for `dfunc`, which is typically either - unified_diff() or context_diff(). Inputs are losslessly converted to - strings so that `dfunc` only has to worry about strings, and encoded - back to bytes on return. This is necessary to compare files with - unknown or inconsistent encoding. All other inputs (except `n`) must be - bytes rather than str. - """ - def decode(s): - try: - return s.decode('ascii', 'surrogateescape') - except AttributeError as err: - msg = ('all arguments must be bytes, not %s (%r)' % - (type(s).__name__, s)) - raise TypeError(msg) from err - a = list(map(decode, a)) - b = list(map(decode, b)) - fromfile = decode(fromfile) - tofile = decode(tofile) - fromfiledate = decode(fromfiledate) - tofiledate = decode(tofiledate) - lineterm = decode(lineterm) - - lines = dfunc(a, b, fromfile, tofile, fromfiledate, tofiledate, n, lineterm) - for line in lines: - yield line.encode('ascii', 'surrogateescape') - -def ndiff(a, b, linejunk=None, charjunk=IS_CHARACTER_JUNK): - r""" - Compare `a` and `b` (lists of strings); return a `Differ`-style delta. - - Optional keyword parameters `linejunk` and `charjunk` are for filter - functions, or can be None: - - - linejunk: A function that should accept a single string argument and - return true iff the string is junk. The default is None, and is - recommended; the underlying SequenceMatcher class has an adaptive - notion of "noise" lines. - - - charjunk: A function that accepts a character (string of length - 1), and returns true iff the character is junk. The default is - the module-level function IS_CHARACTER_JUNK, which filters out - whitespace characters (a blank or tab; note: it's a bad idea to - include newline in this!). - - Tools/scripts/ndiff.py is a command-line front-end to this function. - - Example: - - >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), - ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) - >>> print(''.join(diff), end="") - - one - ? ^ - + ore - ? ^ - - two - - three - ? - - + tree - + emu - """ - return Differ(linejunk, charjunk).compare(a, b) - -def _mdiff(fromlines, tolines, context=None, linejunk=None, - charjunk=IS_CHARACTER_JUNK): - r"""Returns generator yielding marked up from/to side by side differences. - - Arguments: - fromlines -- list of text lines to compared to tolines - tolines -- list of text lines to be compared to fromlines - context -- number of context lines to display on each side of difference, - if None, all from/to text lines will be generated. - linejunk -- passed on to ndiff (see ndiff documentation) - charjunk -- passed on to ndiff (see ndiff documentation) - - This function returns an iterator which returns a tuple: - (from line tuple, to line tuple, boolean flag) - - from/to line tuple -- (line num, line text) - line num -- integer or None (to indicate a context separation) - line text -- original line text with following markers inserted: - '\0+' -- marks start of added text - '\0-' -- marks start of deleted text - '\0^' -- marks start of changed text - '\1' -- marks end of added/deleted/changed text - - boolean flag -- None indicates context separation, True indicates - either "from" or "to" line contains a change, otherwise False. - - This function/iterator was originally developed to generate side by side - file difference for making HTML pages (see HtmlDiff class for example - usage). - - Note, this function utilizes the ndiff function to generate the side by - side difference markup. Optional ndiff arguments may be passed to this - function and they in turn will be passed to ndiff. - """ - import re - - # regular expression for finding intraline change indices - change_re = re.compile(r'(\++|\-+|\^+)') - - # create the difference iterator to generate the differences - diff_lines_iterator = ndiff(fromlines,tolines,linejunk,charjunk) - - def _make_line(lines, format_key, side, num_lines=[0,0]): - """Returns line of text with user's change markup and line formatting. - - lines -- list of lines from the ndiff generator to produce a line of - text from. When producing the line of text to return, the - lines used are removed from this list. - format_key -- '+' return first line in list with "add" markup around - the entire line. - '-' return first line in list with "delete" markup around - the entire line. - '?' return first line in list with add/delete/change - intraline markup (indices obtained from second line) - None return first line in list with no markup - side -- indice into the num_lines list (0=from,1=to) - num_lines -- from/to current line number. This is NOT intended to be a - passed parameter. It is present as a keyword argument to - maintain memory of the current line numbers between calls - of this function. - - Note, this function is purposefully not defined at the module scope so - that data it needs from its parent function (within whose context it - is defined) does not need to be of module scope. - """ - num_lines[side] += 1 - # Handle case where no user markup is to be added, just return line of - # text with user's line format to allow for usage of the line number. - if format_key is None: - return (num_lines[side],lines.pop(0)[2:]) - # Handle case of intraline changes - if format_key == '?': - text, markers = lines.pop(0), lines.pop(0) - # find intraline changes (store change type and indices in tuples) - sub_info = [] - def record_sub_info(match_object,sub_info=sub_info): - sub_info.append([match_object.group(1)[0],match_object.span()]) - return match_object.group(1) - change_re.sub(record_sub_info,markers) - # process each tuple inserting our special marks that won't be - # noticed by an xml/html escaper. - for key,(begin,end) in reversed(sub_info): - text = text[0:begin]+'\0'+key+text[begin:end]+'\1'+text[end:] - text = text[2:] - # Handle case of add/delete entire line - else: - text = lines.pop(0)[2:] - # if line of text is just a newline, insert a space so there is - # something for the user to highlight and see. - if not text: - text = ' ' - # insert marks that won't be noticed by an xml/html escaper. - text = '\0' + format_key + text + '\1' - # Return line of text, first allow user's line formatter to do its - # thing (such as adding the line number) then replace the special - # marks with what the user's change markup. - return (num_lines[side],text) - - def _line_iterator(): - """Yields from/to lines of text with a change indication. - - This function is an iterator. It itself pulls lines from a - differencing iterator, processes them and yields them. When it can - it yields both a "from" and a "to" line, otherwise it will yield one - or the other. In addition to yielding the lines of from/to text, a - boolean flag is yielded to indicate if the text line(s) have - differences in them. - - Note, this function is purposefully not defined at the module scope so - that data it needs from its parent function (within whose context it - is defined) does not need to be of module scope. - """ - lines = [] - num_blanks_pending, num_blanks_to_yield = 0, 0 - while True: - # Load up next 4 lines so we can look ahead, create strings which - # are a concatenation of the first character of each of the 4 lines - # so we can do some very readable comparisons. - while len(lines) < 4: - lines.append(next(diff_lines_iterator, 'X')) - s = ''.join([line[0] for line in lines]) - if s.startswith('X'): - # When no more lines, pump out any remaining blank lines so the - # corresponding add/delete lines get a matching blank line so - # all line pairs get yielded at the next level. - num_blanks_to_yield = num_blanks_pending - elif s.startswith('-?+?'): - # simple intraline change - yield _make_line(lines,'?',0), _make_line(lines,'?',1), True - continue - elif s.startswith('--++'): - # in delete block, add block coming: we do NOT want to get - # caught up on blank lines yet, just process the delete line - num_blanks_pending -= 1 - yield _make_line(lines,'-',0), None, True - continue - elif s.startswith(('--?+', '--+', '- ')): - # in delete block and see an intraline change or unchanged line - # coming: yield the delete line and then blanks - from_line,to_line = _make_line(lines,'-',0), None - num_blanks_to_yield,num_blanks_pending = num_blanks_pending-1,0 - elif s.startswith('-+?'): - # intraline change - yield _make_line(lines,None,0), _make_line(lines,'?',1), True - continue - elif s.startswith('-?+'): - # intraline change - yield _make_line(lines,'?',0), _make_line(lines,None,1), True - continue - elif s.startswith('-'): - # delete FROM line - num_blanks_pending -= 1 - yield _make_line(lines,'-',0), None, True - continue - elif s.startswith('+--'): - # in add block, delete block coming: we do NOT want to get - # caught up on blank lines yet, just process the add line - num_blanks_pending += 1 - yield None, _make_line(lines,'+',1), True - continue - elif s.startswith(('+ ', '+-')): - # will be leaving an add block: yield blanks then add line - from_line, to_line = None, _make_line(lines,'+',1) - num_blanks_to_yield,num_blanks_pending = num_blanks_pending+1,0 - elif s.startswith('+'): - # inside an add block, yield the add line - num_blanks_pending += 1 - yield None, _make_line(lines,'+',1), True - continue - elif s.startswith(' '): - # unchanged text, yield it to both sides - yield _make_line(lines[:],None,0),_make_line(lines,None,1),False - continue - # Catch up on the blank lines so when we yield the next from/to - # pair, they are lined up. - while(num_blanks_to_yield < 0): - num_blanks_to_yield += 1 - yield None,('','\n'),True - while(num_blanks_to_yield > 0): - num_blanks_to_yield -= 1 - yield ('','\n'),None,True - if s.startswith('X'): - return - else: - yield from_line,to_line,True - - def _line_pair_iterator(): - """Yields from/to lines of text with a change indication. - - This function is an iterator. It itself pulls lines from the line - iterator. Its difference from that iterator is that this function - always yields a pair of from/to text lines (with the change - indication). If necessary it will collect single from/to lines - until it has a matching pair from/to pair to yield. - - Note, this function is purposefully not defined at the module scope so - that data it needs from its parent function (within whose context it - is defined) does not need to be of module scope. - """ - line_iterator = _line_iterator() - fromlines,tolines=[],[] - while True: - # Collecting lines of text until we have a from/to pair - while (len(fromlines)==0 or len(tolines)==0): - try: - from_line, to_line, found_diff = next(line_iterator) - except StopIteration: - return - if from_line is not None: - fromlines.append((from_line,found_diff)) - if to_line is not None: - tolines.append((to_line,found_diff)) - # Once we have a pair, remove them from the collection and yield it - from_line, fromDiff = fromlines.pop(0) - to_line, to_diff = tolines.pop(0) - yield (from_line,to_line,fromDiff or to_diff) - - # Handle case where user does not want context differencing, just yield - # them up without doing anything else with them. - line_pair_iterator = _line_pair_iterator() - if context is None: - yield from line_pair_iterator - # Handle case where user wants context differencing. We must do some - # storage of lines until we know for sure that they are to be yielded. - else: - context += 1 - lines_to_write = 0 - while True: - # Store lines up until we find a difference, note use of a - # circular queue because we only need to keep around what - # we need for context. - index, contextLines = 0, [None]*(context) - found_diff = False - while(found_diff is False): - try: - from_line, to_line, found_diff = next(line_pair_iterator) - except StopIteration: - return - i = index % context - contextLines[i] = (from_line, to_line, found_diff) - index += 1 - # Yield lines that we have collected so far, but first yield - # the user's separator. - if index > context: - yield None, None, None - lines_to_write = context - else: - lines_to_write = index - index = 0 - while(lines_to_write): - i = index % context - index += 1 - yield contextLines[i] - lines_to_write -= 1 - # Now yield the context lines after the change - lines_to_write = context-1 - try: - while(lines_to_write): - from_line, to_line, found_diff = next(line_pair_iterator) - # If another change within the context, extend the context - if found_diff: - lines_to_write = context-1 - else: - lines_to_write -= 1 - yield from_line, to_line, found_diff - except StopIteration: - # Catch exception from next() and return normally - return - - -_file_template = """ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html> - -<head> - <meta http-equiv="Content-Type" - content="text/html; charset=%(charset)s" /> - <title></title> - <style type="text/css">%(styles)s - </style> -</head> - -<body> - %(table)s%(legend)s -</body> - -</html>""" - -_styles = """ - :root {color-scheme: light dark} - table.diff {font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; border:medium} - .diff_header {background-color:#e0e0e0} - td.diff_header {text-align:right} - .diff_next {background-color:#c0c0c0} - .diff_add {background-color:palegreen} - .diff_chg {background-color:#ffff77} - .diff_sub {background-color:#ffaaaa} - - @media (prefers-color-scheme: dark) { - .diff_header {background-color:#666} - .diff_next {background-color:#393939} - .diff_add {background-color:darkgreen} - .diff_chg {background-color:#847415} - .diff_sub {background-color:darkred} - }""" - -_table_template = """ - <table class="diff" id="difflib_chg_%(prefix)s_top" - cellspacing="0" cellpadding="0" rules="groups" > - <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> - <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup> - %(header_row)s - <tbody> -%(data_rows)s </tbody> - </table>""" - -_legend = """ - <table class="diff" summary="Legends"> - <tr> <th colspan="2"> Legends </th> </tr> - <tr> <td> <table border="" summary="Colors"> - <tr><th> Colors </th> </tr> - <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr> - <tr><td class="diff_chg">Changed</td> </tr> - <tr><td class="diff_sub">Deleted</td> </tr> - </table></td> - <td> <table border="" summary="Links"> - <tr><th colspan="2"> Links </th> </tr> - <tr><td>(f)irst change</td> </tr> - <tr><td>(n)ext change</td> </tr> - <tr><td>(t)op</td> </tr> - </table></td> </tr> - </table>""" - -class HtmlDiff(object): - """For producing HTML side by side comparison with change highlights. - - This class can be used to create an HTML table (or a complete HTML file - containing the table) showing a side by side, line by line comparison - of text with inter-line and intra-line change highlights. The table can - be generated in either full or contextual difference mode. - - The following methods are provided for HTML generation: - - make_table -- generates HTML for a single side by side table - make_file -- generates complete HTML file with a single side by side table - - See tools/scripts/diff.py for an example usage of this class. - """ - - _file_template = _file_template - _styles = _styles - _table_template = _table_template - _legend = _legend - _default_prefix = 0 - - def __init__(self,tabsize=8,wrapcolumn=None,linejunk=None, - charjunk=IS_CHARACTER_JUNK): - """HtmlDiff instance initializer - - Arguments: - tabsize -- tab stop spacing, defaults to 8. - wrapcolumn -- column number where lines are broken and wrapped, - defaults to None where lines are not wrapped. - linejunk,charjunk -- keyword arguments passed into ndiff() (used by - HtmlDiff() to generate the side by side HTML differences). See - ndiff() documentation for argument default values and descriptions. - """ - self._tabsize = tabsize - self._wrapcolumn = wrapcolumn - self._linejunk = linejunk - self._charjunk = charjunk - - def make_file(self, fromlines, tolines, fromdesc='', todesc='', - context=False, numlines=5, *, charset='utf-8'): - """Returns HTML file of side by side comparison with change highlights - - Arguments: - fromlines -- list of "from" lines - tolines -- list of "to" lines - fromdesc -- "from" file column header string - todesc -- "to" file column header string - context -- set to True for contextual differences (defaults to False - which shows full differences). - numlines -- number of context lines. When context is set True, - controls number of lines displayed before and after the change. - When context is False, controls the number of lines to place - the "next" link anchors before the next change (so click of - "next" link jumps to just before the change). - charset -- charset of the HTML document - """ - - return (self._file_template % dict( - styles=self._styles, - legend=self._legend, - table=self.make_table(fromlines, tolines, fromdesc, todesc, - context=context, numlines=numlines), - charset=charset - )).encode(charset, 'xmlcharrefreplace').decode(charset) - - def _tab_newline_replace(self,fromlines,tolines): - """Returns from/to line lists with tabs expanded and newlines removed. - - Instead of tab characters being replaced by the number of spaces - needed to fill in to the next tab stop, this function will fill - the space with tab characters. This is done so that the difference - algorithms can identify changes in a file when tabs are replaced by - spaces and vice versa. At the end of the HTML generation, the tab - characters will be replaced with a nonbreakable space. - """ - def expand_tabs(line): - # hide real spaces - line = line.replace(' ','\0') - # expand tabs into spaces - line = line.expandtabs(self._tabsize) - # replace spaces from expanded tabs back into tab characters - # (we'll replace them with markup after we do differencing) - line = line.replace(' ','\t') - return line.replace('\0',' ').rstrip('\n') - fromlines = [expand_tabs(line) for line in fromlines] - tolines = [expand_tabs(line) for line in tolines] - return fromlines,tolines - - def _split_line(self,data_list,line_num,text): - """Builds list of text lines by splitting text lines at wrap point - - This function will determine if the input text line needs to be - wrapped (split) into separate lines. If so, the first wrap point - will be determined and the first line appended to the output - text line list. This function is used recursively to handle - the second part of the split line to further split it. - """ - # if blank line or context separator, just add it to the output list - if not line_num: - data_list.append((line_num,text)) - return - - # if line text doesn't need wrapping, just add it to the output list - size = len(text) - max = self._wrapcolumn - if (size <= max) or ((size -(text.count('\0')*3)) <= max): - data_list.append((line_num,text)) - return - - # scan text looking for the wrap point, keeping track if the wrap - # point is inside markers - i = 0 - n = 0 - mark = '' - while n < max and i < size: - if text[i] == '\0': - i += 1 - mark = text[i] - i += 1 - elif text[i] == '\1': - i += 1 - mark = '' - else: - i += 1 - n += 1 - - # wrap point is inside text, break it up into separate lines - line1 = text[:i] - line2 = text[i:] - - # if wrap point is inside markers, place end marker at end of first - # line and start marker at beginning of second line because each - # line will have its own table tag markup around it. - if mark: - line1 = line1 + '\1' - line2 = '\0' + mark + line2 - - # tack on first line onto the output list - data_list.append((line_num,line1)) - - # use this routine again to wrap the remaining text - self._split_line(data_list,'>',line2) - - def _line_wrapper(self,diffs): - """Returns iterator that splits (wraps) mdiff text lines""" - - # pull from/to data and flags from mdiff iterator - for fromdata,todata,flag in diffs: - # check for context separators and pass them through - if flag is None: - yield fromdata,todata,flag - continue - (fromline,fromtext),(toline,totext) = fromdata,todata - # for each from/to line split it at the wrap column to form - # list of text lines. - fromlist,tolist = [],[] - self._split_line(fromlist,fromline,fromtext) - self._split_line(tolist,toline,totext) - # yield from/to line in pairs inserting blank lines as - # necessary when one side has more wrapped lines - while fromlist or tolist: - if fromlist: - fromdata = fromlist.pop(0) - else: - fromdata = ('',' ') - if tolist: - todata = tolist.pop(0) - else: - todata = ('',' ') - yield fromdata,todata,flag - - def _collect_lines(self,diffs): - """Collects mdiff output into separate lists - - Before storing the mdiff from/to data into a list, it is converted - into a single line of text with HTML markup. - """ - - fromlist,tolist,flaglist = [],[],[] - # pull from/to data and flags from mdiff style iterator - for fromdata,todata,flag in diffs: - try: - # store HTML markup of the lines into the lists - fromlist.append(self._format_line(0,flag,*fromdata)) - tolist.append(self._format_line(1,flag,*todata)) - except TypeError: - # exceptions occur for lines where context separators go - fromlist.append(None) - tolist.append(None) - flaglist.append(flag) - return fromlist,tolist,flaglist - - def _format_line(self,side,flag,linenum,text): - """Returns HTML markup of "from" / "to" text lines - - side -- 0 or 1 indicating "from" or "to" text - flag -- indicates if difference on line - linenum -- line number (used for line number column) - text -- line text to be marked up - """ - try: - linenum = '%d' % linenum - id = ' id="%s%s"' % (self._prefix[side],linenum) - except TypeError: - # handle blank lines where linenum is '>' or '' - id = '' - # replace those things that would get confused with HTML symbols - text=text.replace("&","&amp;").replace(">","&gt;").replace("<","&lt;") - - # make space non-breakable so they don't get compressed or line wrapped - text = text.replace(' ','&nbsp;').rstrip() - - return '<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>' \ - % (id,linenum,text) - - def _make_prefix(self): - """Create unique anchor prefixes""" - - # Generate a unique anchor prefix so multiple tables - # can exist on the same HTML page without conflicts. - fromprefix = "from%d_" % HtmlDiff._default_prefix - toprefix = "to%d_" % HtmlDiff._default_prefix - HtmlDiff._default_prefix += 1 - # store prefixes so line format method has access - self._prefix = [fromprefix,toprefix] - - def _convert_flags(self,fromlist,tolist,flaglist,context,numlines): - """Makes list of "next" links""" - - # all anchor names will be generated using the unique "to" prefix - toprefix = self._prefix[1] - - # process change flags, generating middle column of next anchors/links - next_id = ['']*len(flaglist) - next_href = ['']*len(flaglist) - num_chg, in_change = 0, False - last = 0 - for i,flag in enumerate(flaglist): - if flag: - if not in_change: - in_change = True - last = i - # at the beginning of a change, drop an anchor a few lines - # (the context lines) before the change for the previous - # link - i = max([0,i-numlines]) - next_id[i] = ' id="difflib_chg_%s_%d"' % (toprefix,num_chg) - # at the beginning of a change, drop a link to the next - # change - num_chg += 1 - next_href[last] = '<a href="#difflib_chg_%s_%d">n</a>' % ( - toprefix,num_chg) - else: - in_change = False - # check for cases where there is no content to avoid exceptions - if not flaglist: - flaglist = [False] - next_id = [''] - next_href = [''] - last = 0 - if context: - fromlist = ['<td></td><td>&nbsp;No Differences Found&nbsp;</td>'] - tolist = fromlist - else: - fromlist = tolist = ['<td></td><td>&nbsp;Empty File&nbsp;</td>'] - # if not a change on first line, drop a link - if not flaglist[0]: - next_href[0] = '<a href="#difflib_chg_%s_0">f</a>' % toprefix - # redo the last link to link to the top - next_href[last] = '<a href="#difflib_chg_%s_top">t</a>' % (toprefix) - - return fromlist,tolist,flaglist,next_href,next_id - - def make_table(self,fromlines,tolines,fromdesc='',todesc='',context=False, - numlines=5): - """Returns HTML table of side by side comparison with change highlights - - Arguments: - fromlines -- list of "from" lines - tolines -- list of "to" lines - fromdesc -- "from" file column header string - todesc -- "to" file column header string - context -- set to True for contextual differences (defaults to False - which shows full differences). - numlines -- number of context lines. When context is set True, - controls number of lines displayed before and after the change. - When context is False, controls the number of lines to place - the "next" link anchors before the next change (so click of - "next" link jumps to just before the change). - """ - - # make unique anchor prefixes so that multiple tables may exist - # on the same page without conflict. - self._make_prefix() - - # change tabs to spaces before it gets more difficult after we insert - # markup - fromlines,tolines = self._tab_newline_replace(fromlines,tolines) - - # create diffs iterator which generates side by side from/to data - if context: - context_lines = numlines - else: - context_lines = None - diffs = _mdiff(fromlines,tolines,context_lines,linejunk=self._linejunk, - charjunk=self._charjunk) - - # set up iterator to wrap lines that exceed desired width - if self._wrapcolumn: - diffs = self._line_wrapper(diffs) - - # collect up from/to lines and flags into lists (also format the lines) - fromlist,tolist,flaglist = self._collect_lines(diffs) - - # process change flags, generating middle column of next anchors/links - fromlist,tolist,flaglist,next_href,next_id = self._convert_flags( - fromlist,tolist,flaglist,context,numlines) - - s = [] - fmt = ' <tr><td class="diff_next"%s>%s</td>%s' + \ - '<td class="diff_next">%s</td>%s</tr>\n' - for i in range(len(flaglist)): - if flaglist[i] is None: - # mdiff yields None on separator lines skip the bogus ones - # generated for the first line - if i > 0: - s.append(' </tbody> \n <tbody>\n') - else: - s.append( fmt % (next_id[i],next_href[i],fromlist[i], - next_href[i],tolist[i])) - if fromdesc or todesc: - header_row = '<thead><tr>%s%s%s%s</tr></thead>' % ( - '<th class="diff_next"><br /></th>', - '<th colspan="2" class="diff_header">%s</th>' % fromdesc, - '<th class="diff_next"><br /></th>', - '<th colspan="2" class="diff_header">%s</th>' % todesc) - else: - header_row = '' - - table = self._table_template % dict( - data_rows=''.join(s), - header_row=header_row, - prefix=self._prefix[1]) - - return table.replace('\0+','<span class="diff_add">'). \ - replace('\0-','<span class="diff_sub">'). \ - replace('\0^','<span class="diff_chg">'). \ - replace('\1','</span>'). \ - replace('\t','&nbsp;') - - -def restore(delta, which): - r""" - Generate one of the two sequences that generated a delta. - - Given a `delta` produced by `Differ.compare()` or `ndiff()`, extract - lines originating from file 1 or 2 (parameter `which`), stripping off line - prefixes. - - Examples: - - >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True), - ... 'ore\ntree\nemu\n'.splitlines(keepends=True)) - >>> diff = list(diff) - >>> print(''.join(restore(diff, 1)), end="") - one - two - three - >>> print(''.join(restore(diff, 2)), end="") - ore - tree - emu - """ - try: - tag = {1: "- ", 2: "+ "}[int(which)] - except KeyError: - raise ValueError('unknown delta choice (must be 1 or 2): %r' - % which) from None - prefixes = (" ", tag) - for line in delta: - if line[:2] in prefixes: - yield line[2:] diff --git a/Python314_4_x86_Template/Lib/dis.py b/Python314_4_x86_Template/Lib/dis.py deleted file mode 100644 index d6d2c1386..000000000 --- a/Python314_4_x86_Template/Lib/dis.py +++ /dev/null @@ -1,1157 +0,0 @@ -"""Disassembler of Python byte code into mnemonics.""" - -import sys -import types -import collections -import io - -from opcode import * -from opcode import ( - __all__ as _opcodes_all, - _cache_format, - _inline_cache_entries, - _nb_ops, - _common_constants, - _intrinsic_1_descs, - _intrinsic_2_descs, - _special_method_names, - _specializations, - _specialized_opmap, -) - -from _opcode import get_executor - -__all__ = ["code_info", "dis", "disassemble", "distb", "disco", - "findlinestarts", "findlabels", "show_code", - "get_instructions", "Instruction", "Bytecode"] + _opcodes_all -del _opcodes_all - -_have_code = (types.MethodType, types.FunctionType, types.CodeType, - classmethod, staticmethod, type) - -CONVERT_VALUE = opmap['CONVERT_VALUE'] - -SET_FUNCTION_ATTRIBUTE = opmap['SET_FUNCTION_ATTRIBUTE'] -FUNCTION_ATTR_FLAGS = ('defaults', 'kwdefaults', 'annotations', 'closure', 'annotate') - -ENTER_EXECUTOR = opmap['ENTER_EXECUTOR'] -LOAD_GLOBAL = opmap['LOAD_GLOBAL'] -LOAD_SMALL_INT = opmap['LOAD_SMALL_INT'] -BINARY_OP = opmap['BINARY_OP'] -JUMP_BACKWARD = opmap['JUMP_BACKWARD'] -FOR_ITER = opmap['FOR_ITER'] -SEND = opmap['SEND'] -LOAD_ATTR = opmap['LOAD_ATTR'] -LOAD_SUPER_ATTR = opmap['LOAD_SUPER_ATTR'] -CALL_INTRINSIC_1 = opmap['CALL_INTRINSIC_1'] -CALL_INTRINSIC_2 = opmap['CALL_INTRINSIC_2'] -LOAD_COMMON_CONSTANT = opmap['LOAD_COMMON_CONSTANT'] -LOAD_SPECIAL = opmap['LOAD_SPECIAL'] -LOAD_FAST_LOAD_FAST = opmap['LOAD_FAST_LOAD_FAST'] -LOAD_FAST_BORROW_LOAD_FAST_BORROW = opmap['LOAD_FAST_BORROW_LOAD_FAST_BORROW'] -STORE_FAST_LOAD_FAST = opmap['STORE_FAST_LOAD_FAST'] -STORE_FAST_STORE_FAST = opmap['STORE_FAST_STORE_FAST'] -IS_OP = opmap['IS_OP'] -CONTAINS_OP = opmap['CONTAINS_OP'] -END_ASYNC_FOR = opmap['END_ASYNC_FOR'] - -CACHE = opmap["CACHE"] - -_all_opname = list(opname) -_all_opmap = dict(opmap) -for name, op in _specialized_opmap.items(): - # fill opname and opmap - assert op < len(_all_opname) - _all_opname[op] = name - _all_opmap[name] = op - -deoptmap = { - specialized: base for base, family in _specializations.items() for specialized in family -} - -def _try_compile(source, name): - """Attempts to compile the given source, first as an expression and - then as a statement if the first approach fails. - - Utility function to accept strings in functions that otherwise - expect code objects - """ - try: - return compile(source, name, 'eval') - except SyntaxError: - pass - return compile(source, name, 'exec') - -def dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False, - show_offsets=False, show_positions=False): - """Disassemble classes, methods, functions, and other compiled objects. - - With no argument, disassemble the last traceback. - - Compiled objects currently include generator objects, async generator - objects, and coroutine objects, all of which store their code object - in a special attribute. - """ - if x is None: - distb(file=file, show_caches=show_caches, adaptive=adaptive, - show_offsets=show_offsets, show_positions=show_positions) - return - # Extract functions from methods. - if hasattr(x, '__func__'): - x = x.__func__ - # Extract compiled code objects from... - if hasattr(x, '__code__'): # ...a function, or - x = x.__code__ - elif hasattr(x, 'gi_code'): #...a generator object, or - x = x.gi_code - elif hasattr(x, 'ag_code'): #...an asynchronous generator object, or - x = x.ag_code - elif hasattr(x, 'cr_code'): #...a coroutine. - x = x.cr_code - # Perform the disassembly. - if hasattr(x, '__dict__'): # Class or module - items = sorted(x.__dict__.items()) - for name, x1 in items: - if isinstance(x1, _have_code): - print("Disassembly of %s:" % name, file=file) - try: - dis(x1, file=file, depth=depth, show_caches=show_caches, adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions) - except TypeError as msg: - print("Sorry:", msg, file=file) - print(file=file) - elif hasattr(x, 'co_code'): # Code object - _disassemble_recursive(x, file=file, depth=depth, show_caches=show_caches, adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions) - elif isinstance(x, (bytes, bytearray)): # Raw bytecode - labels_map = _make_labels_map(x) - label_width = 4 + len(str(len(labels_map))) - formatter = Formatter(file=file, - offset_width=len(str(max(len(x) - 2, 9999))) if show_offsets else 0, - label_width=label_width, - show_caches=show_caches) - arg_resolver = ArgResolver(labels_map=labels_map) - _disassemble_bytes(x, arg_resolver=arg_resolver, formatter=formatter) - elif isinstance(x, str): # Source code - _disassemble_str(x, file=file, depth=depth, show_caches=show_caches, adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions) - else: - raise TypeError("don't know how to disassemble %s objects" % - type(x).__name__) - -def distb(tb=None, *, file=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False): - """Disassemble a traceback (default: last traceback).""" - if tb is None: - try: - if hasattr(sys, 'last_exc'): - tb = sys.last_exc.__traceback__ - else: - tb = sys.last_traceback - except AttributeError: - raise RuntimeError("no last traceback to disassemble") from None - while tb.tb_next: tb = tb.tb_next - disassemble(tb.tb_frame.f_code, tb.tb_lasti, file=file, show_caches=show_caches, adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions) - -# The inspect module interrogates this dictionary to build its -# list of CO_* constants. It is also used by pretty_flags to -# turn the co_flags field into a human readable list. -COMPILER_FLAG_NAMES = { - 1: "OPTIMIZED", - 2: "NEWLOCALS", - 4: "VARARGS", - 8: "VARKEYWORDS", - 16: "NESTED", - 32: "GENERATOR", - 64: "NOFREE", - 128: "COROUTINE", - 256: "ITERABLE_COROUTINE", - 512: "ASYNC_GENERATOR", - 0x4000000: "HAS_DOCSTRING", - 0x8000000: "METHOD", -} - -def pretty_flags(flags): - """Return pretty representation of code flags.""" - names = [] - for i in range(32): - flag = 1<<i - if flags & flag: - names.append(COMPILER_FLAG_NAMES.get(flag, hex(flag))) - flags ^= flag - if not flags: - break - else: - names.append(hex(flags)) - return ", ".join(names) - -class _Unknown: - def __repr__(self): - return "<unknown>" - -# Sentinel to represent values that cannot be calculated -UNKNOWN = _Unknown() - -def _get_code_object(x): - """Helper to handle methods, compiled or raw code objects, and strings.""" - # Extract functions from methods. - if hasattr(x, '__func__'): - x = x.__func__ - # Extract compiled code objects from... - if hasattr(x, '__code__'): # ...a function, or - x = x.__code__ - elif hasattr(x, 'gi_code'): #...a generator object, or - x = x.gi_code - elif hasattr(x, 'ag_code'): #...an asynchronous generator object, or - x = x.ag_code - elif hasattr(x, 'cr_code'): #...a coroutine. - x = x.cr_code - # Handle source code. - if isinstance(x, str): - x = _try_compile(x, "<disassembly>") - # By now, if we don't have a code object, we can't disassemble x. - if hasattr(x, 'co_code'): - return x - raise TypeError("don't know how to disassemble %s objects" % - type(x).__name__) - -def _deoptop(op): - name = _all_opname[op] - return _all_opmap[deoptmap[name]] if name in deoptmap else op - -def _get_code_array(co, adaptive): - if adaptive: - code = co._co_code_adaptive - res = [] - found = False - for i in range(0, len(code), 2): - op, arg = code[i], code[i+1] - if op == ENTER_EXECUTOR: - try: - ex = get_executor(co, i) - except (ValueError, RuntimeError): - ex = None - - if ex: - op, arg = ex.get_opcode(), ex.get_oparg() - found = True - - res.append(op.to_bytes()) - res.append(arg.to_bytes()) - return code if not found else b''.join(res) - else: - return co.co_code - -def code_info(x): - """Formatted details of methods, functions, or code.""" - return _format_code_info(_get_code_object(x)) - -def _format_code_info(co): - lines = [] - lines.append("Name: %s" % co.co_name) - lines.append("Filename: %s" % co.co_filename) - lines.append("Argument count: %s" % co.co_argcount) - lines.append("Positional-only arguments: %s" % co.co_posonlyargcount) - lines.append("Kw-only arguments: %s" % co.co_kwonlyargcount) - lines.append("Number of locals: %s" % co.co_nlocals) - lines.append("Stack size: %s" % co.co_stacksize) - lines.append("Flags: %s" % pretty_flags(co.co_flags)) - if co.co_consts: - lines.append("Constants:") - for i_c in enumerate(co.co_consts): - lines.append("%4d: %r" % i_c) - if co.co_names: - lines.append("Names:") - for i_n in enumerate(co.co_names): - lines.append("%4d: %s" % i_n) - if co.co_varnames: - lines.append("Variable names:") - for i_n in enumerate(co.co_varnames): - lines.append("%4d: %s" % i_n) - if co.co_freevars: - lines.append("Free variables:") - for i_n in enumerate(co.co_freevars): - lines.append("%4d: %s" % i_n) - if co.co_cellvars: - lines.append("Cell variables:") - for i_n in enumerate(co.co_cellvars): - lines.append("%4d: %s" % i_n) - return "\n".join(lines) - -def show_code(co, *, file=None): - """Print details of methods, functions, or code to *file*. - - If *file* is not provided, the output is printed on stdout. - """ - print(code_info(co), file=file) - -Positions = collections.namedtuple( - 'Positions', - [ - 'lineno', - 'end_lineno', - 'col_offset', - 'end_col_offset', - ], - defaults=[None] * 4 -) - -_Instruction = collections.namedtuple( - "_Instruction", - [ - 'opname', - 'opcode', - 'arg', - 'argval', - 'argrepr', - 'offset', - 'start_offset', - 'starts_line', - 'line_number', - 'label', - 'positions', - 'cache_info', - ], - defaults=[None, None, None] -) - -_Instruction.opname.__doc__ = "Human readable name for operation" -_Instruction.opcode.__doc__ = "Numeric code for operation" -_Instruction.arg.__doc__ = "Numeric argument to operation (if any), otherwise None" -_Instruction.argval.__doc__ = "Resolved arg value (if known), otherwise same as arg" -_Instruction.argrepr.__doc__ = "Human readable description of operation argument" -_Instruction.offset.__doc__ = "Start index of operation within bytecode sequence" -_Instruction.start_offset.__doc__ = ( - "Start index of operation within bytecode sequence, including extended args if present; " - "otherwise equal to Instruction.offset" -) -_Instruction.starts_line.__doc__ = "True if this opcode starts a source line, otherwise False" -_Instruction.line_number.__doc__ = "source line number associated with this opcode (if any), otherwise None" -_Instruction.label.__doc__ = "A label (int > 0) if this instruction is a jump target, otherwise None" -_Instruction.positions.__doc__ = "dis.Positions object holding the span of source code covered by this instruction" -_Instruction.cache_info.__doc__ = "list of (name, size, data), one for each cache entry of the instruction" - -_ExceptionTableEntryBase = collections.namedtuple("_ExceptionTableEntryBase", - "start end target depth lasti") - -class _ExceptionTableEntry(_ExceptionTableEntryBase): - pass - -_OPNAME_WIDTH = 20 -_OPARG_WIDTH = 5 - -def _get_cache_size(opname): - return _inline_cache_entries.get(opname, 0) - -def _get_jump_target(op, arg, offset): - """Gets the bytecode offset of the jump target if this is a jump instruction. - - Otherwise return None. - """ - deop = _deoptop(op) - caches = _get_cache_size(_all_opname[deop]) - if deop in hasjrel: - if _is_backward_jump(deop): - arg = -arg - target = offset + 2 + arg*2 - target += 2 * caches - elif deop in hasjabs: - target = arg*2 - else: - target = None - return target - -class Instruction(_Instruction): - """Details for a bytecode operation. - - Defined fields: - opname - human readable name for operation - opcode - numeric code for operation - arg - numeric argument to operation (if any), otherwise None - argval - resolved arg value (if known), otherwise same as arg - argrepr - human readable description of operation argument - offset - start index of operation within bytecode sequence - start_offset - start index of operation within bytecode sequence including extended args if present; - otherwise equal to Instruction.offset - starts_line - True if this opcode starts a source line, otherwise False - line_number - source line number associated with this opcode (if any), otherwise None - label - A label if this instruction is a jump target, otherwise None - positions - Optional dis.Positions object holding the span of source code - covered by this instruction - cache_info - information about the format and content of the instruction's cache - entries (if any) - """ - - @staticmethod - def make( - opname, arg, argval, argrepr, offset, start_offset, starts_line, - line_number, label=None, positions=None, cache_info=None - ): - return Instruction(opname, _all_opmap[opname], arg, argval, argrepr, offset, - start_offset, starts_line, line_number, label, positions, cache_info) - - @property - def oparg(self): - """Alias for Instruction.arg.""" - return self.arg - - @property - def baseopcode(self): - """Numeric code for the base operation if operation is specialized. - - Otherwise equal to Instruction.opcode. - """ - return _deoptop(self.opcode) - - @property - def baseopname(self): - """Human readable name for the base operation if operation is specialized. - - Otherwise equal to Instruction.opname. - """ - return opname[self.baseopcode] - - @property - def cache_offset(self): - """Start index of the cache entries following the operation.""" - return self.offset + 2 - - @property - def end_offset(self): - """End index of the cache entries following the operation.""" - return self.cache_offset + _get_cache_size(_all_opname[self.opcode])*2 - - @property - def jump_target(self): - """Bytecode index of the jump target if this is a jump operation. - - Otherwise return None. - """ - return _get_jump_target(self.opcode, self.arg, self.offset) - - @property - def is_jump_target(self): - """True if other code jumps to here, otherwise False""" - return self.label is not None - - def __str__(self): - output = io.StringIO() - formatter = Formatter(file=output) - formatter.print_instruction(self, False) - return output.getvalue() - - -class Formatter: - - def __init__(self, file=None, lineno_width=0, offset_width=0, label_width=0, - line_offset=0, show_caches=False, *, show_positions=False): - """Create a Formatter - - *file* where to write the output - *lineno_width* sets the width of the source location field (0 omits it). - Should be large enough for a line number or full positions (depending - on the value of *show_positions*). - *offset_width* sets the width of the instruction offset field - *label_width* sets the width of the label field - *show_caches* is a boolean indicating whether to display cache lines - *show_positions* is a boolean indicating whether full positions should - be reported instead of only the line numbers. - """ - self.file = file - self.lineno_width = lineno_width - self.offset_width = offset_width - self.label_width = label_width - self.show_caches = show_caches - self.show_positions = show_positions - - def print_instruction(self, instr, mark_as_current=False): - self.print_instruction_line(instr, mark_as_current) - if self.show_caches and instr.cache_info: - offset = instr.offset - for name, size, data in instr.cache_info: - for i in range(size): - offset += 2 - # Only show the fancy argrepr for a CACHE instruction when it's - # the first entry for a particular cache value: - if i == 0: - argrepr = f"{name}: {int.from_bytes(data, sys.byteorder)}" - else: - argrepr = "" - self.print_instruction_line( - Instruction("CACHE", CACHE, 0, None, argrepr, offset, offset, - False, None, None, instr.positions), - False) - - def print_instruction_line(self, instr, mark_as_current): - """Format instruction details for inclusion in disassembly output.""" - lineno_width = self.lineno_width - offset_width = self.offset_width - label_width = self.label_width - - new_source_line = (lineno_width > 0 and - instr.starts_line and - instr.offset > 0) - if new_source_line: - print(file=self.file) - - fields = [] - # Column: Source code locations information - if lineno_width: - if self.show_positions: - # reporting positions instead of just line numbers - if instr_positions := instr.positions: - if all(p is None for p in instr_positions): - positions_str = _NO_LINENO - else: - ps = tuple('?' if p is None else p for p in instr_positions) - positions_str = f"{ps[0]}:{ps[2]}-{ps[1]}:{ps[3]}" - fields.append(f'{positions_str:{lineno_width}}') - else: - fields.append(' ' * lineno_width) - else: - if instr.starts_line: - lineno_fmt = "%%%dd" if instr.line_number is not None else "%%%ds" - lineno_fmt = lineno_fmt % lineno_width - lineno = _NO_LINENO if instr.line_number is None else instr.line_number - fields.append(lineno_fmt % lineno) - else: - fields.append(' ' * lineno_width) - # Column: Label - if instr.label is not None: - lbl = f"L{instr.label}:" - fields.append(f"{lbl:>{label_width}}") - else: - fields.append(' ' * label_width) - # Column: Instruction offset from start of code sequence - if offset_width > 0: - fields.append(f"{repr(instr.offset):>{offset_width}} ") - # Column: Current instruction indicator - if mark_as_current: - fields.append('-->') - else: - fields.append(' ') - # Column: Opcode name - fields.append(instr.opname.ljust(_OPNAME_WIDTH)) - # Column: Opcode argument - if instr.arg is not None: - arg = repr(instr.arg) - # If opname is longer than _OPNAME_WIDTH, we allow it to overflow into - # the space reserved for oparg. This results in fewer misaligned opargs - # in the disassembly output. - opname_excess = max(0, len(instr.opname) - _OPNAME_WIDTH) - fields.append(repr(instr.arg).rjust(_OPARG_WIDTH - opname_excess)) - # Column: Opcode argument details - if instr.argrepr: - fields.append('(' + instr.argrepr + ')') - print(' '.join(fields).rstrip(), file=self.file) - - def print_exception_table(self, exception_entries): - file = self.file - if exception_entries: - print("ExceptionTable:", file=file) - for entry in exception_entries: - lasti = " lasti" if entry.lasti else "" - start = entry.start_label - end = entry.end_label - target = entry.target_label - print(f" L{start} to L{end} -> L{target} [{entry.depth}]{lasti}", file=file) - - -class ArgResolver: - def __init__(self, co_consts=None, names=None, varname_from_oparg=None, labels_map=None): - self.co_consts = co_consts - self.names = names - self.varname_from_oparg = varname_from_oparg - self.labels_map = labels_map or {} - - def offset_from_jump_arg(self, op, arg, offset): - deop = _deoptop(op) - if deop in hasjabs: - return arg * 2 - elif deop in hasjrel: - signed_arg = -arg if _is_backward_jump(deop) else arg - argval = offset + 2 + signed_arg*2 - caches = _get_cache_size(_all_opname[deop]) - argval += 2 * caches - return argval - return None - - def get_label_for_offset(self, offset): - return self.labels_map.get(offset, None) - - def get_argval_argrepr(self, op, arg, offset): - get_name = None if self.names is None else self.names.__getitem__ - argval = None - argrepr = '' - deop = _deoptop(op) - if arg is not None: - # Set argval to the dereferenced value of the argument when - # available, and argrepr to the string representation of argval. - # _disassemble_bytes needs the string repr of the - # raw name index for LOAD_GLOBAL, LOAD_CONST, etc. - argval = arg - if deop in hasconst: - argval, argrepr = _get_const_info(deop, arg, self.co_consts) - elif deop in hasname: - if deop == LOAD_GLOBAL: - argval, argrepr = _get_name_info(arg//2, get_name) - if (arg & 1) and argrepr: - argrepr = f"{argrepr} + NULL" - elif deop == LOAD_ATTR: - argval, argrepr = _get_name_info(arg//2, get_name) - if (arg & 1) and argrepr: - argrepr = f"{argrepr} + NULL|self" - elif deop == LOAD_SUPER_ATTR: - argval, argrepr = _get_name_info(arg//4, get_name) - if (arg & 1) and argrepr: - argrepr = f"{argrepr} + NULL|self" - else: - argval, argrepr = _get_name_info(arg, get_name) - elif deop in hasjump or deop in hasexc: - argval = self.offset_from_jump_arg(op, arg, offset) - lbl = self.get_label_for_offset(argval) - assert lbl is not None - preposition = "from" if deop == END_ASYNC_FOR else "to" - argrepr = f"{preposition} L{lbl}" - elif deop in (LOAD_FAST_LOAD_FAST, LOAD_FAST_BORROW_LOAD_FAST_BORROW, STORE_FAST_LOAD_FAST, STORE_FAST_STORE_FAST): - arg1 = arg >> 4 - arg2 = arg & 15 - val1, argrepr1 = _get_name_info(arg1, self.varname_from_oparg) - val2, argrepr2 = _get_name_info(arg2, self.varname_from_oparg) - argrepr = argrepr1 + ", " + argrepr2 - argval = val1, val2 - elif deop in haslocal or deop in hasfree: - argval, argrepr = _get_name_info(arg, self.varname_from_oparg) - elif deop in hascompare: - argval = cmp_op[arg >> 5] - argrepr = argval - if arg & 16: - argrepr = f"bool({argrepr})" - elif deop == CONVERT_VALUE: - argval = (None, str, repr, ascii)[arg] - argrepr = ('', 'str', 'repr', 'ascii')[arg] - elif deop == SET_FUNCTION_ATTRIBUTE: - argrepr = ', '.join(s for i, s in enumerate(FUNCTION_ATTR_FLAGS) - if arg & (1<<i)) - elif deop == BINARY_OP: - _, argrepr = _nb_ops[arg] - elif deop == CALL_INTRINSIC_1: - argrepr = _intrinsic_1_descs[arg] - elif deop == CALL_INTRINSIC_2: - argrepr = _intrinsic_2_descs[arg] - elif deop == LOAD_COMMON_CONSTANT: - obj = _common_constants[arg] - if isinstance(obj, type): - argrepr = obj.__name__ - else: - argrepr = repr(obj) - elif deop == LOAD_SPECIAL: - argrepr = _special_method_names[arg] - elif deop == IS_OP: - argrepr = 'is not' if argval else 'is' - elif deop == CONTAINS_OP: - argrepr = 'not in' if argval else 'in' - return argval, argrepr - -def get_instructions(x, *, first_line=None, show_caches=None, adaptive=False): - """Iterator for the opcodes in methods, functions or code - - Generates a series of Instruction named tuples giving the details of - each operations in the supplied code. - - If *first_line* is not None, it indicates the line number that should - be reported for the first source line in the disassembled code. - Otherwise, the source line information (if any) is taken directly from - the disassembled code object. - """ - co = _get_code_object(x) - linestarts = dict(findlinestarts(co)) - if first_line is not None: - line_offset = first_line - co.co_firstlineno - else: - line_offset = 0 - - original_code = co.co_code - arg_resolver = ArgResolver(co_consts=co.co_consts, - names=co.co_names, - varname_from_oparg=co._varname_from_oparg, - labels_map=_make_labels_map(original_code)) - return _get_instructions_bytes(_get_code_array(co, adaptive), - linestarts=linestarts, - line_offset=line_offset, - co_positions=co.co_positions(), - original_code=original_code, - arg_resolver=arg_resolver) - -def _get_const_value(op, arg, co_consts): - """Helper to get the value of the const in a hasconst op. - - Returns the dereferenced constant if this is possible. - Otherwise (if it is a LOAD_CONST and co_consts is not - provided) returns the dis.UNKNOWN sentinel. - """ - assert op in hasconst or op == LOAD_SMALL_INT - - if op == LOAD_SMALL_INT: - return arg - argval = UNKNOWN - if co_consts is not None: - argval = co_consts[arg] - return argval - -def _get_const_info(op, arg, co_consts): - """Helper to get optional details about const references - - Returns the dereferenced constant and its repr if the value - can be calculated. - Otherwise returns the sentinel value dis.UNKNOWN for the value - and an empty string for its repr. - """ - argval = _get_const_value(op, arg, co_consts) - argrepr = repr(argval) if argval is not UNKNOWN else '' - return argval, argrepr - -def _get_name_info(name_index, get_name, **extrainfo): - """Helper to get optional details about named references - - Returns the dereferenced name as both value and repr if the name - list is defined. - Otherwise returns the sentinel value dis.UNKNOWN for the value - and an empty string for its repr. - """ - if get_name is not None: - argval = get_name(name_index, **extrainfo) - return argval, argval - else: - return UNKNOWN, '' - -def _parse_varint(iterator): - b = next(iterator) - val = b & 63 - while b&64: - val <<= 6 - b = next(iterator) - val |= b&63 - return val - -def _parse_exception_table(code): - iterator = iter(code.co_exceptiontable) - entries = [] - try: - while True: - start = _parse_varint(iterator)*2 - length = _parse_varint(iterator)*2 - end = start + length - target = _parse_varint(iterator)*2 - dl = _parse_varint(iterator) - depth = dl >> 1 - lasti = bool(dl&1) - entries.append(_ExceptionTableEntry(start, end, target, depth, lasti)) - except StopIteration: - return entries - -def _is_backward_jump(op): - return opname[op] in ('JUMP_BACKWARD', - 'JUMP_BACKWARD_NO_INTERRUPT', - 'END_ASYNC_FOR') # Not really a jump, but it has a "target" - -def _get_instructions_bytes(code, linestarts=None, line_offset=0, co_positions=None, - original_code=None, arg_resolver=None): - """Iterate over the instructions in a bytecode string. - - Generates a sequence of Instruction namedtuples giving the details of each - opcode. - - """ - # Use the basic, unadaptive code for finding labels and actually walking the - # bytecode, since replacements like ENTER_EXECUTOR and INSTRUMENTED_* can - # mess that logic up pretty badly: - original_code = original_code or code - co_positions = co_positions or iter(()) - - starts_line = False - local_line_number = None - line_number = None - for offset, start_offset, op, arg in _unpack_opargs(original_code): - if linestarts is not None: - starts_line = offset in linestarts - if starts_line: - local_line_number = linestarts[offset] - if local_line_number is not None: - line_number = local_line_number + line_offset - else: - line_number = None - positions = Positions(*next(co_positions, ())) - deop = _deoptop(op) - op = code[offset] - - if arg_resolver: - argval, argrepr = arg_resolver.get_argval_argrepr(op, arg, offset) - else: - argval, argrepr = arg, repr(arg) - - caches = _get_cache_size(_all_opname[deop]) - # Advance the co_positions iterator: - for _ in range(caches): - next(co_positions, ()) - - if caches: - cache_info = [] - cache_offset = offset - for name, size in _cache_format[opname[deop]].items(): - data = code[cache_offset + 2: cache_offset + 2 + 2 * size] - cache_offset += size * 2 - cache_info.append((name, size, data)) - else: - cache_info = None - - label = arg_resolver.get_label_for_offset(offset) if arg_resolver else None - yield Instruction(_all_opname[op], op, arg, argval, argrepr, - offset, start_offset, starts_line, line_number, - label, positions, cache_info) - - -def disassemble(co, lasti=-1, *, file=None, show_caches=False, adaptive=False, - show_offsets=False, show_positions=False): - """Disassemble a code object.""" - linestarts = dict(findlinestarts(co)) - exception_entries = _parse_exception_table(co) - if show_positions: - lineno_width = _get_positions_width(co) - else: - lineno_width = _get_lineno_width(linestarts) - labels_map = _make_labels_map(co.co_code, exception_entries=exception_entries) - label_width = 4 + len(str(len(labels_map))) - formatter = Formatter(file=file, - lineno_width=lineno_width, - offset_width=len(str(max(len(co.co_code) - 2, 9999))) if show_offsets else 0, - label_width=label_width, - show_caches=show_caches, - show_positions=show_positions) - arg_resolver = ArgResolver(co_consts=co.co_consts, - names=co.co_names, - varname_from_oparg=co._varname_from_oparg, - labels_map=labels_map) - _disassemble_bytes(_get_code_array(co, adaptive), lasti, linestarts, - exception_entries=exception_entries, co_positions=co.co_positions(), - original_code=co.co_code, arg_resolver=arg_resolver, formatter=formatter) - -def _disassemble_recursive(co, *, file=None, depth=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False): - disassemble(co, file=file, show_caches=show_caches, adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions) - if depth is None or depth > 0: - if depth is not None: - depth = depth - 1 - for x in co.co_consts: - if hasattr(x, 'co_code'): - print(file=file) - print("Disassembly of %r:" % (x,), file=file) - _disassemble_recursive( - x, file=file, depth=depth, show_caches=show_caches, - adaptive=adaptive, show_offsets=show_offsets, show_positions=show_positions - ) - - -def _make_labels_map(original_code, exception_entries=()): - jump_targets = set(findlabels(original_code)) - labels = set(jump_targets) - for start, end, target, _, _ in exception_entries: - labels.add(start) - labels.add(end) - labels.add(target) - labels = sorted(labels) - labels_map = {offset: i+1 for (i, offset) in enumerate(sorted(labels))} - for e in exception_entries: - e.start_label = labels_map[e.start] - e.end_label = labels_map[e.end] - e.target_label = labels_map[e.target] - return labels_map - -_NO_LINENO = ' --' - -def _get_lineno_width(linestarts): - if linestarts is None: - return 0 - maxlineno = max(filter(None, linestarts.values()), default=-1) - if maxlineno == -1: - # Omit the line number column entirely if we have no line number info - return 0 - lineno_width = max(3, len(str(maxlineno))) - if lineno_width < len(_NO_LINENO) and None in linestarts.values(): - lineno_width = len(_NO_LINENO) - return lineno_width - -def _get_positions_width(code): - # Positions are formatted as 'LINE:COL-ENDLINE:ENDCOL ' (note trailing space). - # A missing component appears as '?', and when all components are None, we - # render '_NO_LINENO'. thus the minimum width is 1 + len(_NO_LINENO). - # - # If all values are missing, positions are not printed (i.e. positions_width = 0). - has_value = False - values_width = 0 - for positions in code.co_positions(): - has_value |= any(isinstance(p, int) for p in positions) - width = sum(1 if p is None else len(str(p)) for p in positions) - values_width = max(width, values_width) - if has_value: - # 3 = number of separators in a normal format - return 1 + max(len(_NO_LINENO), 3 + values_width) - return 0 - -def _disassemble_bytes(code, lasti=-1, linestarts=None, - *, line_offset=0, exception_entries=(), - co_positions=None, original_code=None, - arg_resolver=None, formatter=None): - - assert formatter is not None - assert arg_resolver is not None - - instrs = _get_instructions_bytes(code, linestarts=linestarts, - line_offset=line_offset, - co_positions=co_positions, - original_code=original_code, - arg_resolver=arg_resolver) - - print_instructions(instrs, exception_entries, formatter, lasti=lasti) - - -def print_instructions(instrs, exception_entries, formatter, lasti=-1): - for instr in instrs: - # Each CACHE takes 2 bytes - is_current_instr = instr.offset <= lasti \ - <= instr.offset + 2 * _get_cache_size(_all_opname[_deoptop(instr.opcode)]) - formatter.print_instruction(instr, is_current_instr) - - formatter.print_exception_table(exception_entries) - -def _disassemble_str(source, **kwargs): - """Compile the source string, then disassemble the code object.""" - _disassemble_recursive(_try_compile(source, '<dis>'), **kwargs) - -disco = disassemble # XXX For backwards compatibility - - -# Rely on C `int` being 32 bits for oparg -_INT_BITS = 32 -# Value for c int when it overflows -_INT_OVERFLOW = 2 ** (_INT_BITS - 1) - -def _unpack_opargs(code): - extended_arg = 0 - extended_args_offset = 0 # Number of EXTENDED_ARG instructions preceding the current instruction - caches = 0 - for i in range(0, len(code), 2): - # Skip inline CACHE entries: - if caches: - caches -= 1 - continue - op = code[i] - deop = _deoptop(op) - caches = _get_cache_size(_all_opname[deop]) - if deop in hasarg: - arg = code[i+1] | extended_arg - extended_arg = (arg << 8) if deop == EXTENDED_ARG else 0 - # The oparg is stored as a signed integer - # If the value exceeds its upper limit, it will overflow and wrap - # to a negative integer - if extended_arg >= _INT_OVERFLOW: - extended_arg -= 2 * _INT_OVERFLOW - else: - arg = None - extended_arg = 0 - if deop == EXTENDED_ARG: - extended_args_offset += 1 - yield (i, i, op, arg) - else: - start_offset = i - extended_args_offset*2 - yield (i, start_offset, op, arg) - extended_args_offset = 0 - -def findlabels(code): - """Detect all offsets in a byte code which are jump targets. - - Return the list of offsets. - - """ - labels = [] - for offset, _, op, arg in _unpack_opargs(code): - if arg is not None: - label = _get_jump_target(op, arg, offset) - if label is None: - continue - if label not in labels: - labels.append(label) - return labels - -def findlinestarts(code): - """Find the offsets in a byte code which are start of lines in the source. - - Generate pairs (offset, lineno) - lineno will be an integer or None the offset does not have a source line. - """ - - lastline = False # None is a valid line number - for start, end, line in code.co_lines(): - if line is not lastline: - lastline = line - yield start, line - return - -def _find_imports(co): - """Find import statements in the code - - Generate triplets (name, level, fromlist) where - name is the imported module and level, fromlist are - the corresponding args to __import__. - """ - IMPORT_NAME = opmap['IMPORT_NAME'] - - consts = co.co_consts - names = co.co_names - opargs = [(op, arg) for _, _, op, arg in _unpack_opargs(co.co_code) - if op != EXTENDED_ARG] - for i, (op, oparg) in enumerate(opargs): - if op == IMPORT_NAME and i >= 2: - from_op = opargs[i-1] - level_op = opargs[i-2] - if (from_op[0] in hasconst and - (level_op[0] in hasconst or level_op[0] == LOAD_SMALL_INT)): - level = _get_const_value(level_op[0], level_op[1], consts) - fromlist = _get_const_value(from_op[0], from_op[1], consts) - yield (names[oparg], level, fromlist) - -def _find_store_names(co): - """Find names of variables which are written in the code - - Generate sequence of strings - """ - STORE_OPS = { - opmap['STORE_NAME'], - opmap['STORE_GLOBAL'] - } - - names = co.co_names - for _, _, op, arg in _unpack_opargs(co.co_code): - if op in STORE_OPS: - yield names[arg] - - -class Bytecode: - """The bytecode operations of a piece of code - - Instantiate this with a function, method, other compiled object, string of - code, or a code object (as returned by compile()). - - Iterating over this yields the bytecode operations as Instruction instances. - """ - def __init__(self, x, *, first_line=None, current_offset=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False): - self.codeobj = co = _get_code_object(x) - if first_line is None: - self.first_line = co.co_firstlineno - self._line_offset = 0 - else: - self.first_line = first_line - self._line_offset = first_line - co.co_firstlineno - self._linestarts = dict(findlinestarts(co)) - self._original_object = x - self.current_offset = current_offset - self.exception_entries = _parse_exception_table(co) - self.show_caches = show_caches - self.adaptive = adaptive - self.show_offsets = show_offsets - self.show_positions = show_positions - - def __iter__(self): - co = self.codeobj - original_code = co.co_code - labels_map = _make_labels_map(original_code, self.exception_entries) - arg_resolver = ArgResolver(co_consts=co.co_consts, - names=co.co_names, - varname_from_oparg=co._varname_from_oparg, - labels_map=labels_map) - return _get_instructions_bytes(_get_code_array(co, self.adaptive), - linestarts=self._linestarts, - line_offset=self._line_offset, - co_positions=co.co_positions(), - original_code=original_code, - arg_resolver=arg_resolver) - - def __repr__(self): - return "{}({!r})".format(self.__class__.__name__, - self._original_object) - - @classmethod - def from_traceback(cls, tb, *, show_caches=False, adaptive=False): - """ Construct a Bytecode from the given traceback """ - while tb.tb_next: - tb = tb.tb_next - return cls( - tb.tb_frame.f_code, current_offset=tb.tb_lasti, show_caches=show_caches, adaptive=adaptive - ) - - def info(self): - """Return formatted information about the code object.""" - return _format_code_info(self.codeobj) - - def dis(self): - """Return a formatted view of the bytecode operations.""" - co = self.codeobj - if self.current_offset is not None: - offset = self.current_offset - else: - offset = -1 - with io.StringIO() as output: - code = _get_code_array(co, self.adaptive) - offset_width = len(str(max(len(code) - 2, 9999))) if self.show_offsets else 0 - if self.show_positions: - lineno_width = _get_positions_width(co) - else: - lineno_width = _get_lineno_width(self._linestarts) - labels_map = _make_labels_map(co.co_code, self.exception_entries) - label_width = 4 + len(str(len(labels_map))) - formatter = Formatter(file=output, - lineno_width=lineno_width, - offset_width=offset_width, - label_width=label_width, - line_offset=self._line_offset, - show_caches=self.show_caches, - show_positions=self.show_positions) - - arg_resolver = ArgResolver(co_consts=co.co_consts, - names=co.co_names, - varname_from_oparg=co._varname_from_oparg, - labels_map=labels_map) - _disassemble_bytes(code, - linestarts=self._linestarts, - line_offset=self._line_offset, - lasti=offset, - exception_entries=self.exception_entries, - co_positions=co.co_positions(), - original_code=co.co_code, - arg_resolver=arg_resolver, - formatter=formatter) - return output.getvalue() - - -def main(args=None): - import argparse - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('-C', '--show-caches', action='store_true', - help='show inline caches') - parser.add_argument('-O', '--show-offsets', action='store_true', - help='show instruction offsets') - parser.add_argument('-P', '--show-positions', action='store_true', - help='show instruction positions') - parser.add_argument('-S', '--specialized', action='store_true', - help='show specialized bytecode') - parser.add_argument('infile', nargs='?', default='-') - args = parser.parse_args(args=args) - if args.infile == '-': - name = '<stdin>' - source = sys.stdin.buffer.read() - else: - name = args.infile - with open(args.infile, 'rb') as infile: - source = infile.read() - code = compile(source, name, "exec") - dis(code, show_caches=args.show_caches, adaptive=args.specialized, - show_offsets=args.show_offsets, show_positions=args.show_positions) - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/doctest.py b/Python314_4_x86_Template/Lib/doctest.py deleted file mode 100644 index a66888d8f..000000000 --- a/Python314_4_x86_Template/Lib/doctest.py +++ /dev/null @@ -1,2921 +0,0 @@ -# Module doctest. -# Released to the public domain 16-Jan-2001, by Tim Peters (tim@python.org). -# Major enhancements and refactoring by: -# Jim Fulton -# Edward Loper - -# Provided as-is; use at your own risk; no warranty; no promises; enjoy! - -r"""Module doctest -- a framework for running examples in docstrings. - -In simplest use, end each module M to be tested with: - -def _test(): - import doctest - doctest.testmod() - -if __name__ == "__main__": - _test() - -Then running the module as a script will cause the examples in the -docstrings to get executed and verified: - -python M.py - -This won't display anything unless an example fails, in which case the -failing example(s) and the cause(s) of the failure(s) are printed to stdout -(why not stderr? because stderr is a lame hack <0.2 wink>), and the final -line of output is "Test failed.". - -Run it with the -v switch instead: - -python M.py -v - -and a detailed report of all examples tried is printed to stdout, along -with assorted summaries at the end. - -You can force verbose mode by passing "verbose=True" to testmod, or prohibit -it by passing "verbose=False". In either of those cases, sys.argv is not -examined by testmod. - -There are a variety of other ways to run doctests, including integration -with the unittest framework, and support for running non-Python text -files containing doctests. There are also many ways to override parts -of doctest's default behaviors. See the Library Reference Manual for -details. -""" - -__docformat__ = 'reStructuredText en' - -__all__ = [ - # 0, Option Flags - 'register_optionflag', - 'DONT_ACCEPT_TRUE_FOR_1', - 'DONT_ACCEPT_BLANKLINE', - 'NORMALIZE_WHITESPACE', - 'ELLIPSIS', - 'SKIP', - 'IGNORE_EXCEPTION_DETAIL', - 'COMPARISON_FLAGS', - 'REPORT_UDIFF', - 'REPORT_CDIFF', - 'REPORT_NDIFF', - 'REPORT_ONLY_FIRST_FAILURE', - 'REPORTING_FLAGS', - 'FAIL_FAST', - # 1. Utility Functions - # 2. Example & DocTest - 'Example', - 'DocTest', - # 3. Doctest Parser - 'DocTestParser', - # 4. Doctest Finder - 'DocTestFinder', - # 5. Doctest Runner - 'DocTestRunner', - 'OutputChecker', - 'DocTestFailure', - 'UnexpectedException', - 'DebugRunner', - # 6. Test Functions - 'testmod', - 'testfile', - 'run_docstring_examples', - # 7. Unittest Support - 'DocTestSuite', - 'DocFileSuite', - 'set_unittest_reportflags', - # 8. Debugging Support - 'script_from_examples', - 'testsource', - 'debug_src', - 'debug', -] - -import __future__ -import difflib -import functools -import inspect -import linecache -import os -import pdb -import re -import sys -import traceback -import unittest -from io import StringIO, IncrementalNewlineDecoder -from collections import namedtuple -import _colorize # Used in doctests -from _colorize import ANSIColors, can_colorize - - -__unittest = True - -class TestResults(namedtuple('TestResults', 'failed attempted')): - def __new__(cls, failed, attempted, *, skipped=0): - results = super().__new__(cls, failed, attempted) - results.skipped = skipped - return results - - def __repr__(self): - if self.skipped: - return (f'TestResults(failed={self.failed}, ' - f'attempted={self.attempted}, ' - f'skipped={self.skipped})') - else: - # Leave the repr() unchanged for backward compatibility - # if skipped is zero - return super().__repr__() - - -# There are 4 basic classes: -# - Example: a <source, want> pair, plus an intra-docstring line number. -# - DocTest: a collection of examples, parsed from a docstring, plus -# info about where the docstring came from (name, filename, lineno). -# - DocTestFinder: extracts DocTests from a given object's docstring and -# its contained objects' docstrings. -# - DocTestRunner: runs DocTest cases, and accumulates statistics. -# -# So the basic picture is: -# -# list of: -# +------+ +---------+ +-------+ -# |object| --DocTestFinder-> | DocTest | --DocTestRunner-> |results| -# +------+ +---------+ +-------+ -# | Example | -# | ... | -# | Example | -# +---------+ - -# Option constants. - -OPTIONFLAGS_BY_NAME = {} -def register_optionflag(name): - # Create a new flag unless `name` is already known. - return OPTIONFLAGS_BY_NAME.setdefault(name, 1 << len(OPTIONFLAGS_BY_NAME)) - -DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1') -DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE') -NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE') -ELLIPSIS = register_optionflag('ELLIPSIS') -SKIP = register_optionflag('SKIP') -IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL') - -COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 | - DONT_ACCEPT_BLANKLINE | - NORMALIZE_WHITESPACE | - ELLIPSIS | - SKIP | - IGNORE_EXCEPTION_DETAIL) - -REPORT_UDIFF = register_optionflag('REPORT_UDIFF') -REPORT_CDIFF = register_optionflag('REPORT_CDIFF') -REPORT_NDIFF = register_optionflag('REPORT_NDIFF') -REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE') -FAIL_FAST = register_optionflag('FAIL_FAST') - -REPORTING_FLAGS = (REPORT_UDIFF | - REPORT_CDIFF | - REPORT_NDIFF | - REPORT_ONLY_FIRST_FAILURE | - FAIL_FAST) - -# Special string markers for use in `want` strings: -BLANKLINE_MARKER = '<BLANKLINE>' -ELLIPSIS_MARKER = '...' - -###################################################################### -## Table of Contents -###################################################################### -# 1. Utility Functions -# 2. Example & DocTest -- store test cases -# 3. DocTest Parser -- extracts examples from strings -# 4. DocTest Finder -- extracts test cases from objects -# 5. DocTest Runner -- runs test cases -# 6. Test Functions -- convenient wrappers for testing -# 7. Unittest Support -# 8. Debugging Support -# 9. Example Usage - -###################################################################### -## 1. Utility Functions -###################################################################### - -def _extract_future_flags(globs): - """ - Return the compiler-flags associated with the future features that - have been imported into the given namespace (globs). - """ - flags = 0 - for fname in __future__.all_feature_names: - feature = globs.get(fname, None) - if feature is getattr(__future__, fname): - flags |= feature.compiler_flag - return flags - -def _normalize_module(module, depth=2): - """ - Return the module specified by `module`. In particular: - - If `module` is a module, then return module. - - If `module` is a string, then import and return the - module with that name. - - If `module` is None, then return the calling module. - The calling module is assumed to be the module of - the stack frame at the given depth in the call stack. - """ - if inspect.ismodule(module): - return module - elif isinstance(module, str): - return __import__(module, globals(), locals(), ["*"]) - elif module is None: - try: - try: - return sys.modules[sys._getframemodulename(depth)] - except AttributeError: - return sys.modules[sys._getframe(depth).f_globals['__name__']] - except KeyError: - pass - else: - raise TypeError("Expected a module, string, or None") - -def _newline_convert(data): - # The IO module provides a handy decoder for universal newline conversion - return IncrementalNewlineDecoder(None, True).decode(data, True) - -def _load_testfile(filename, package, module_relative, encoding): - if module_relative: - package = _normalize_module(package, 3) - filename = _module_relative_path(package, filename) - if (loader := getattr(package, '__loader__', None)) is None: - try: - loader = package.__spec__.loader - except AttributeError: - pass - if hasattr(loader, 'get_data'): - file_contents = loader.get_data(filename) - file_contents = file_contents.decode(encoding) - # get_data() opens files as 'rb', so one must do the equivalent - # conversion as universal newlines would do. - return _newline_convert(file_contents), filename - with open(filename, encoding=encoding) as f: - return f.read(), filename - -def _indent(s, indent=4): - """ - Add the given number of space characters to the beginning of - every non-blank line in `s`, and return the result. - """ - # This regexp matches the start of non-blank lines: - return re.sub('(?m)^(?!$)', indent*' ', s) - -def _exception_traceback(exc_info): - """ - Return a string containing a traceback message for the given - exc_info tuple (as returned by sys.exc_info()). - """ - # Get a traceback message. - excout = StringIO() - exc_type, exc_val, exc_tb = exc_info - traceback.print_exception(exc_type, exc_val, exc_tb, file=excout) - return excout.getvalue() - -# Override some StringIO methods. -class _SpoofOut(StringIO): - def getvalue(self): - result = StringIO.getvalue(self) - # If anything at all was written, make sure there's a trailing - # newline. There's no way for the expected output to indicate - # that a trailing newline is missing. - if result and not result.endswith("\n"): - result += "\n" - return result - - def truncate(self, size=None): - self.seek(size) - StringIO.truncate(self) - -# Worst-case linear-time ellipsis matching. -def _ellipsis_match(want, got): - """ - Essentially the only subtle case: - >>> _ellipsis_match('aa...aa', 'aaa') - False - """ - if ELLIPSIS_MARKER not in want: - return want == got - - # Find "the real" strings. - ws = want.split(ELLIPSIS_MARKER) - assert len(ws) >= 2 - - # Deal with exact matches possibly needed at one or both ends. - startpos, endpos = 0, len(got) - w = ws[0] - if w: # starts with exact match - if got.startswith(w): - startpos = len(w) - del ws[0] - else: - return False - w = ws[-1] - if w: # ends with exact match - if got.endswith(w): - endpos -= len(w) - del ws[-1] - else: - return False - - if startpos > endpos: - # Exact end matches required more characters than we have, as in - # _ellipsis_match('aa...aa', 'aaa') - return False - - # For the rest, we only need to find the leftmost non-overlapping - # match for each piece. If there's no overall match that way alone, - # there's no overall match period. - for w in ws: - # w may be '' at times, if there are consecutive ellipses, or - # due to an ellipsis at the start or end of `want`. That's OK. - # Search for an empty string succeeds, and doesn't change startpos. - startpos = got.find(w, startpos, endpos) - if startpos < 0: - return False - startpos += len(w) - - return True - -def _comment_line(line): - "Return a commented form of the given line" - line = line.rstrip() - if line: - return '# '+line - else: - return '#' - -def _strip_exception_details(msg): - # Support for IGNORE_EXCEPTION_DETAIL. - # Get rid of everything except the exception name; in particular, drop - # the possibly dotted module path (if any) and the exception message (if - # any). We assume that a colon is never part of a dotted name, or of an - # exception name. - # E.g., given - # "foo.bar.MyError: la di da" - # return "MyError" - # Or for "abc.def" or "abc.def:\n" return "def". - - start, end = 0, len(msg) - # The exception name must appear on the first line. - i = msg.find("\n") - if i >= 0: - end = i - # retain up to the first colon (if any) - i = msg.find(':', 0, end) - if i >= 0: - end = i - # retain just the exception name - i = msg.rfind('.', 0, end) - if i >= 0: - start = i+1 - return msg[start: end] - -class _OutputRedirectingPdb(pdb.Pdb): - """ - A specialized version of the python debugger that redirects stdout - to a given stream when interacting with the user. Stdout is *not* - redirected when traced code is executed. - """ - def __init__(self, out): - self.__out = out - self.__debugger_used = False - # do not play signal games in the pdb - pdb.Pdb.__init__(self, stdout=out, nosigint=True) - # still use input() to get user input - self.use_rawinput = 1 - - def set_trace(self, frame=None, *, commands=None): - self.__debugger_used = True - if frame is None: - frame = sys._getframe().f_back - pdb.Pdb.set_trace(self, frame, commands=commands) - - def set_continue(self): - # Calling set_continue unconditionally would break unit test - # coverage reporting, as Bdb.set_continue calls sys.settrace(None). - if self.__debugger_used: - pdb.Pdb.set_continue(self) - - def trace_dispatch(self, *args): - # Redirect stdout to the given stream. - save_stdout = sys.stdout - sys.stdout = self.__out - # Call Pdb's trace dispatch method. - try: - return pdb.Pdb.trace_dispatch(self, *args) - finally: - sys.stdout = save_stdout - -# [XX] Normalize with respect to os.path.pardir? -def _module_relative_path(module, test_path): - if not inspect.ismodule(module): - raise TypeError('Expected a module: %r' % module) - if test_path.startswith('/'): - raise ValueError('Module-relative files may not have absolute paths') - - # Normalize the path. On Windows, replace "/" with "\". - test_path = os.path.join(*(test_path.split('/'))) - - # Find the base directory for the path. - if hasattr(module, '__file__'): - # A normal module/package - basedir = os.path.split(module.__file__)[0] - elif module.__name__ == '__main__': - # An interactive session. - if len(sys.argv)>0 and sys.argv[0] != '': - basedir = os.path.split(sys.argv[0])[0] - else: - basedir = os.curdir - else: - if hasattr(module, '__path__'): - for directory in module.__path__: - fullpath = os.path.join(directory, test_path) - if os.path.exists(fullpath): - return fullpath - - # A module w/o __file__ (this includes builtins) - raise ValueError("Can't resolve paths relative to the module " - "%r (it has no __file__)" - % module.__name__) - - # Combine the base directory and the test path. - return os.path.join(basedir, test_path) - -###################################################################### -## 2. Example & DocTest -###################################################################### -## - An "example" is a <source, want> pair, where "source" is a -## fragment of source code, and "want" is the expected output for -## "source." The Example class also includes information about -## where the example was extracted from. -## -## - A "doctest" is a collection of examples, typically extracted from -## a string (such as an object's docstring). The DocTest class also -## includes information about where the string was extracted from. - -class Example: - """ - A single doctest example, consisting of source code and expected - output. `Example` defines the following attributes: - - - source: A single Python statement, always ending with a newline. - The constructor adds a newline if needed. - - - want: The expected output from running the source code (either - from stdout, or a traceback in case of exception). `want` ends - with a newline unless it's empty, in which case it's an empty - string. The constructor adds a newline if needed. - - - exc_msg: The exception message generated by the example, if - the example is expected to generate an exception; or `None` if - it is not expected to generate an exception. This exception - message is compared against the return value of - `traceback.format_exception_only()`. `exc_msg` ends with a - newline unless it's `None`. The constructor adds a newline - if needed. - - - lineno: The line number within the DocTest string containing - this Example where the Example begins. This line number is - zero-based, with respect to the beginning of the DocTest. - - - indent: The example's indentation in the DocTest string. - I.e., the number of space characters that precede the - example's first prompt. - - - options: A dictionary mapping from option flags to True or - False, which is used to override default options for this - example. Any option flags not contained in this dictionary - are left at their default value (as specified by the - DocTestRunner's optionflags). By default, no options are set. - """ - def __init__(self, source, want, exc_msg=None, lineno=0, indent=0, - options=None): - # Normalize inputs. - if not source.endswith('\n'): - source += '\n' - if want and not want.endswith('\n'): - want += '\n' - if exc_msg is not None and not exc_msg.endswith('\n'): - exc_msg += '\n' - # Store properties. - self.source = source - self.want = want - self.lineno = lineno - self.indent = indent - if options is None: options = {} - self.options = options - self.exc_msg = exc_msg - - def __eq__(self, other): - if type(self) is not type(other): - return NotImplemented - - return self.source == other.source and \ - self.want == other.want and \ - self.lineno == other.lineno and \ - self.indent == other.indent and \ - self.options == other.options and \ - self.exc_msg == other.exc_msg - - def __hash__(self): - return hash((self.source, self.want, self.lineno, self.indent, - self.exc_msg)) - -class DocTest: - """ - A collection of doctest examples that should be run in a single - namespace. Each `DocTest` defines the following attributes: - - - examples: the list of examples. - - - globs: The namespace (aka globals) that the examples should - be run in. - - - name: A name identifying the DocTest (typically, the name of - the object whose docstring this DocTest was extracted from). - - - filename: The name of the file that this DocTest was extracted - from, or `None` if the filename is unknown. - - - lineno: The line number within filename where this DocTest - begins, or `None` if the line number is unavailable. This - line number is zero-based, with respect to the beginning of - the file. - - - docstring: The string that the examples were extracted from, - or `None` if the string is unavailable. - """ - def __init__(self, examples, globs, name, filename, lineno, docstring): - """ - Create a new DocTest containing the given examples. The - DocTest's globals are initialized with a copy of `globs`. - """ - assert not isinstance(examples, str), \ - "DocTest no longer accepts str; use DocTestParser instead" - self.examples = examples - self.docstring = docstring - self.globs = globs.copy() - self.name = name - self.filename = filename - self.lineno = lineno - - def __repr__(self): - if len(self.examples) == 0: - examples = 'no examples' - elif len(self.examples) == 1: - examples = '1 example' - else: - examples = '%d examples' % len(self.examples) - return ('<%s %s from %s:%s (%s)>' % - (self.__class__.__name__, - self.name, self.filename, self.lineno, examples)) - - def __eq__(self, other): - if type(self) is not type(other): - return NotImplemented - - return self.examples == other.examples and \ - self.docstring == other.docstring and \ - self.globs == other.globs and \ - self.name == other.name and \ - self.filename == other.filename and \ - self.lineno == other.lineno - - def __hash__(self): - return hash((self.docstring, self.name, self.filename, self.lineno)) - - # This lets us sort tests by name: - def __lt__(self, other): - if not isinstance(other, DocTest): - return NotImplemented - self_lno = self.lineno if self.lineno is not None else -1 - other_lno = other.lineno if other.lineno is not None else -1 - return ((self.name, self.filename, self_lno, id(self)) - < - (other.name, other.filename, other_lno, id(other))) - -###################################################################### -## 3. DocTestParser -###################################################################### - -class DocTestParser: - """ - A class used to parse strings containing doctest examples. - """ - # This regular expression is used to find doctest examples in a - # string. It defines three groups: `source` is the source code - # (including leading indentation and prompts); `indent` is the - # indentation of the first (PS1) line of the source code; and - # `want` is the expected output (including leading indentation). - _EXAMPLE_RE = re.compile(r''' - # Source consists of a PS1 line followed by zero or more PS2 lines. - (?P<source> - (?:^(?P<indent> [ ]*) >>> .*) # PS1 line - (?:\n [ ]* \.\.\. .*)*) # PS2 lines - \n? - # Want consists of any non-blank lines that do not start with PS1. - (?P<want> (?:(?![ ]*$) # Not a blank line - (?![ ]*>>>) # Not a line starting with PS1 - .+$\n? # But any other line - )*) - ''', re.MULTILINE | re.VERBOSE) - - # A regular expression for handling `want` strings that contain - # expected exceptions. It divides `want` into three pieces: - # - the traceback header line (`hdr`) - # - the traceback stack (`stack`) - # - the exception message (`msg`), as generated by - # traceback.format_exception_only() - # `msg` may have multiple lines. We assume/require that the - # exception message is the first non-indented line starting with a word - # character following the traceback header line. - _EXCEPTION_RE = re.compile(r""" - # Grab the traceback header. Different versions of Python have - # said different things on the first traceback line. - ^(?P<hdr> Traceback\ \( - (?: most\ recent\ call\ last - | innermost\ last - ) \) : - ) - \s* $ # toss trailing whitespace on the header. - (?P<stack> .*?) # don't blink: absorb stuff until... - ^ (?P<msg> \w+ .*) # a line *starts* with alphanum. - """, re.VERBOSE | re.MULTILINE | re.DOTALL) - - # A callable returning a true value iff its argument is a blank line - # or contains a single comment. - _IS_BLANK_OR_COMMENT = re.compile(r'^[ ]*(#.*)?$').match - - def parse(self, string, name='<string>'): - """ - Divide the given string into examples and intervening text, - and return them as a list of alternating Examples and strings. - Line numbers for the Examples are 0-based. The optional - argument `name` is a name identifying this string, and is only - used for error messages. - """ - string = string.expandtabs() - # If all lines begin with the same indentation, then strip it. - min_indent = self._min_indent(string) - if min_indent > 0: - string = '\n'.join([l[min_indent:] for l in string.split('\n')]) - - output = [] - charno, lineno = 0, 0 - # Find all doctest examples in the string: - for m in self._EXAMPLE_RE.finditer(string): - # Add the pre-example text to `output`. - output.append(string[charno:m.start()]) - # Update lineno (lines before this example) - lineno += string.count('\n', charno, m.start()) - # Extract info from the regexp match. - (source, options, want, exc_msg) = \ - self._parse_example(m, name, lineno) - # Create an Example, and add it to the list. - if not self._IS_BLANK_OR_COMMENT(source): - output.append( Example(source, want, exc_msg, - lineno=lineno, - indent=min_indent+len(m.group('indent')), - options=options) ) - # Update lineno (lines inside this example) - lineno += string.count('\n', m.start(), m.end()) - # Update charno. - charno = m.end() - # Add any remaining post-example text to `output`. - output.append(string[charno:]) - return output - - def get_doctest(self, string, globs, name, filename, lineno): - """ - Extract all doctest examples from the given string, and - collect them into a `DocTest` object. - - `globs`, `name`, `filename`, and `lineno` are attributes for - the new `DocTest` object. See the documentation for `DocTest` - for more information. - """ - return DocTest(self.get_examples(string, name), globs, - name, filename, lineno, string) - - def get_examples(self, string, name='<string>'): - """ - Extract all doctest examples from the given string, and return - them as a list of `Example` objects. Line numbers are - 0-based, because it's most common in doctests that nothing - interesting appears on the same line as opening triple-quote, - and so the first interesting line is called \"line 1\" then. - - The optional argument `name` is a name identifying this - string, and is only used for error messages. - """ - return [x for x in self.parse(string, name) - if isinstance(x, Example)] - - def _parse_example(self, m, name, lineno): - """ - Given a regular expression match from `_EXAMPLE_RE` (`m`), - return a pair `(source, want)`, where `source` is the matched - example's source code (with prompts and indentation stripped); - and `want` is the example's expected output (with indentation - stripped). - - `name` is the string's name, and `lineno` is the line number - where the example starts; both are used for error messages. - """ - # Get the example's indentation level. - indent = len(m.group('indent')) - - # Divide source into lines; check that they're properly - # indented; and then strip their indentation & prompts. - source_lines = m.group('source').split('\n') - self._check_prompt_blank(source_lines, indent, name, lineno) - self._check_prefix(source_lines[1:], ' '*indent + '.', name, lineno) - source = '\n'.join([sl[indent+4:] for sl in source_lines]) - - # Divide want into lines; check that it's properly indented; and - # then strip the indentation. Spaces before the last newline should - # be preserved, so plain rstrip() isn't good enough. - want = m.group('want') - want_lines = want.split('\n') - if len(want_lines) > 1 and re.match(r' *$', want_lines[-1]): - del want_lines[-1] # forget final newline & spaces after it - self._check_prefix(want_lines, ' '*indent, name, - lineno + len(source_lines)) - want = '\n'.join([wl[indent:] for wl in want_lines]) - - # If `want` contains a traceback message, then extract it. - m = self._EXCEPTION_RE.match(want) - if m: - exc_msg = m.group('msg') - else: - exc_msg = None - - # Extract options from the source. - options = self._find_options(source, name, lineno) - - return source, options, want, exc_msg - - # This regular expression looks for option directives in the - # source code of an example. Option directives are comments - # starting with "doctest:". Warning: this may give false - # positives for string-literals that contain the string - # "#doctest:". Eliminating these false positives would require - # actually parsing the string; but we limit them by ignoring any - # line containing "#doctest:" that is *followed* by a quote mark. - _OPTION_DIRECTIVE_RE = re.compile(r'#\s*doctest:\s*([^\n\'"]*)$', - re.MULTILINE) - - def _find_options(self, source, name, lineno): - """ - Return a dictionary containing option overrides extracted from - option directives in the given source string. - - `name` is the string's name, and `lineno` is the line number - where the example starts; both are used for error messages. - """ - options = {} - # (note: with the current regexp, this will match at most once:) - for m in self._OPTION_DIRECTIVE_RE.finditer(source): - option_strings = m.group(1).replace(',', ' ').split() - for option in option_strings: - if (option[0] not in '+-' or - option[1:] not in OPTIONFLAGS_BY_NAME): - raise ValueError('line %r of the doctest for %s ' - 'has an invalid option: %r' % - (lineno+1, name, option)) - flag = OPTIONFLAGS_BY_NAME[option[1:]] - options[flag] = (option[0] == '+') - if options and self._IS_BLANK_OR_COMMENT(source): - raise ValueError('line %r of the doctest for %s has an option ' - 'directive on a line with no example: %r' % - (lineno, name, source)) - return options - - # This regular expression finds the indentation of every non-blank - # line in a string. - _INDENT_RE = re.compile(r'^([ ]*)(?=\S)', re.MULTILINE) - - def _min_indent(self, s): - "Return the minimum indentation of any non-blank line in `s`" - indents = [len(indent) for indent in self._INDENT_RE.findall(s)] - if len(indents) > 0: - return min(indents) - else: - return 0 - - def _check_prompt_blank(self, lines, indent, name, lineno): - """ - Given the lines of a source string (including prompts and - leading indentation), check to make sure that every prompt is - followed by a space character. If any line is not followed by - a space character, then raise ValueError. - """ - for i, line in enumerate(lines): - if len(line) >= indent+4 and line[indent+3] != ' ': - raise ValueError('line %r of the docstring for %s ' - 'lacks blank after %s: %r' % - (lineno+i+1, name, - line[indent:indent+3], line)) - - def _check_prefix(self, lines, prefix, name, lineno): - """ - Check that every line in the given list starts with the given - prefix; if any line does not, then raise a ValueError. - """ - for i, line in enumerate(lines): - if line and not line.startswith(prefix): - raise ValueError('line %r of the docstring for %s has ' - 'inconsistent leading whitespace: %r' % - (lineno+i+1, name, line)) - - -###################################################################### -## 4. DocTest Finder -###################################################################### - -class DocTestFinder: - """ - A class used to extract the DocTests that are relevant to a given - object, from its docstring and the docstrings of its contained - objects. Doctests can currently be extracted from the following - object types: modules, functions, classes, methods, staticmethods, - classmethods, and properties. - """ - - def __init__(self, verbose=False, parser=DocTestParser(), - recurse=True, exclude_empty=True): - """ - Create a new doctest finder. - - The optional argument `parser` specifies a class or - function that should be used to create new DocTest objects (or - objects that implement the same interface as DocTest). The - signature for this factory function should match the signature - of the DocTest constructor. - - If the optional argument `recurse` is false, then `find` will - only examine the given object, and not any contained objects. - - If the optional argument `exclude_empty` is false, then `find` - will include tests for objects with empty docstrings. - """ - self._parser = parser - self._verbose = verbose - self._recurse = recurse - self._exclude_empty = exclude_empty - - def find(self, obj, name=None, module=None, globs=None, extraglobs=None): - """ - Return a list of the DocTests that are defined by the given - object's docstring, or by any of its contained objects' - docstrings. - - The optional parameter `module` is the module that contains - the given object. If the module is not specified or is None, then - the test finder will attempt to automatically determine the - correct module. The object's module is used: - - - As a default namespace, if `globs` is not specified. - - To prevent the DocTestFinder from extracting DocTests - from objects that are imported from other modules. - - To find the name of the file containing the object. - - To help find the line number of the object within its - file. - - Contained objects whose module does not match `module` are ignored. - - If `module` is False, no attempt to find the module will be made. - This is obscure, of use mostly in tests: if `module` is False, or - is None but cannot be found automatically, then all objects are - considered to belong to the (non-existent) module, so all contained - objects will (recursively) be searched for doctests. - - The globals for each DocTest is formed by combining `globs` - and `extraglobs` (bindings in `extraglobs` override bindings - in `globs`). A new copy of the globals dictionary is created - for each DocTest. If `globs` is not specified, then it - defaults to the module's `__dict__`, if specified, or {} - otherwise. If `extraglobs` is not specified, then it defaults - to {}. - - """ - # If name was not specified, then extract it from the object. - if name is None: - name = getattr(obj, '__name__', None) - if name is None: - raise ValueError("DocTestFinder.find: name must be given " - "when obj.__name__ doesn't exist: %r" % - (type(obj),)) - - # Find the module that contains the given object (if obj is - # a module, then module=obj.). Note: this may fail, in which - # case module will be None. - if module is False: - module = None - elif module is None: - module = inspect.getmodule(obj) - - # Read the module's source code. This is used by - # DocTestFinder._find_lineno to find the line number for a - # given object's docstring. - try: - file = inspect.getsourcefile(obj) - except TypeError: - source_lines = None - else: - if not file: - # Check to see if it's one of our special internal "files" - # (see __patched_linecache_getlines). - file = inspect.getfile(obj) - if not file[0]+file[-2:] == '<]>': file = None - if file is None: - source_lines = None - else: - if module is not None: - # Supply the module globals in case the module was - # originally loaded via a PEP 302 loader and - # file is not a valid filesystem path - source_lines = linecache.getlines(file, module.__dict__) - else: - # No access to a loader, so assume it's a normal - # filesystem path - source_lines = linecache.getlines(file) - if not source_lines: - source_lines = None - - # Initialize globals, and merge in extraglobs. - if globs is None: - if module is None: - globs = {} - else: - globs = module.__dict__.copy() - else: - globs = globs.copy() - if extraglobs is not None: - globs.update(extraglobs) - if '__name__' not in globs: - globs['__name__'] = '__main__' # provide a default module name - - # Recursively explore `obj`, extracting DocTests. - tests = [] - self._find(tests, obj, name, module, source_lines, globs, {}) - # Sort the tests by alpha order of names, for consistency in - # verbose-mode output. This was a feature of doctest in Pythons - # <= 2.3 that got lost by accident in 2.4. It was repaired in - # 2.4.4 and 2.5. - tests.sort() - return tests - - def _from_module(self, module, object): - """ - Return true if the given object is defined in the given - module. - """ - if module is None: - return True - elif inspect.getmodule(object) is not None: - return module is inspect.getmodule(object) - elif inspect.isfunction(object): - return module.__dict__ is object.__globals__ - elif (inspect.ismethoddescriptor(object) or - inspect.ismethodwrapper(object)): - if hasattr(object, '__objclass__'): - obj_mod = object.__objclass__.__module__ - elif hasattr(object, '__module__'): - obj_mod = object.__module__ - else: - return True # [XX] no easy way to tell otherwise - return module.__name__ == obj_mod - elif inspect.isclass(object): - return module.__name__ == object.__module__ - elif hasattr(object, '__module__'): - return module.__name__ == object.__module__ - elif isinstance(object, property): - return True # [XX] no way not be sure. - else: - raise ValueError("object must be a class or function") - - def _is_routine(self, obj): - """ - Safely unwrap objects and determine if they are functions. - """ - maybe_routine = obj - try: - maybe_routine = inspect.unwrap(maybe_routine) - except ValueError: - pass - return inspect.isroutine(maybe_routine) - - def _find(self, tests, obj, name, module, source_lines, globs, seen): - """ - Find tests for the given object and any contained objects, and - add them to `tests`. - """ - if self._verbose: - print('Finding tests in %s' % name) - - # If we've already processed this object, then ignore it. - if id(obj) in seen: - return - seen[id(obj)] = 1 - - # Find a test for this object, and add it to the list of tests. - test = self._get_test(obj, name, module, globs, source_lines) - if test is not None: - tests.append(test) - - # Look for tests in a module's contained objects. - if inspect.ismodule(obj) and self._recurse: - for valname, val in obj.__dict__.items(): - valname = '%s.%s' % (name, valname) - - # Recurse to functions & classes. - if ((self._is_routine(val) or inspect.isclass(val)) and - self._from_module(module, val)): - self._find(tests, val, valname, module, source_lines, - globs, seen) - - # Look for tests in a module's __test__ dictionary. - if inspect.ismodule(obj) and self._recurse: - for valname, val in getattr(obj, '__test__', {}).items(): - if not isinstance(valname, str): - raise ValueError("DocTestFinder.find: __test__ keys " - "must be strings: %r" % - (type(valname),)) - if not (inspect.isroutine(val) or inspect.isclass(val) or - inspect.ismodule(val) or isinstance(val, str)): - raise ValueError("DocTestFinder.find: __test__ values " - "must be strings, functions, methods, " - "classes, or modules: %r" % - (type(val),)) - valname = '%s.__test__.%s' % (name, valname) - self._find(tests, val, valname, module, source_lines, - globs, seen) - - # Look for tests in a class's contained objects. - if inspect.isclass(obj) and self._recurse: - for valname, val in obj.__dict__.items(): - # Special handling for staticmethod/classmethod. - if isinstance(val, (staticmethod, classmethod)): - val = val.__func__ - - # Recurse to methods, properties, and nested classes. - if ((inspect.isroutine(val) or inspect.isclass(val) or - isinstance(val, property)) and - self._from_module(module, val)): - valname = '%s.%s' % (name, valname) - self._find(tests, val, valname, module, source_lines, - globs, seen) - - def _get_test(self, obj, name, module, globs, source_lines): - """ - Return a DocTest for the given object, if it defines a docstring; - otherwise, return None. - """ - # Extract the object's docstring. If it doesn't have one, - # then return None (no test for this object). - if isinstance(obj, str): - docstring = obj - else: - try: - if obj.__doc__ is None: - docstring = '' - else: - docstring = obj.__doc__ - if not isinstance(docstring, str): - docstring = str(docstring) - except (TypeError, AttributeError): - docstring = '' - - # Find the docstring's location in the file. - lineno = self._find_lineno(obj, source_lines) - - # Don't bother if the docstring is empty. - if self._exclude_empty and not docstring: - return None - - # Return a DocTest for this object. - if module is None: - filename = None - else: - # __file__ can be None for namespace packages. - filename = getattr(module, '__file__', None) or module.__name__ - if filename[-4:] == ".pyc": - filename = filename[:-1] - return self._parser.get_doctest(docstring, globs, name, - filename, lineno) - - def _find_lineno(self, obj, source_lines): - """ - Return a line number of the given object's docstring. - - Returns `None` if the given object does not have a docstring. - """ - lineno = None - docstring = getattr(obj, '__doc__', None) - - # Find the line number for modules. - if inspect.ismodule(obj) and docstring is not None: - lineno = 0 - - # Find the line number for classes. - # Note: this could be fooled if a class is defined multiple - # times in a single file. - if inspect.isclass(obj) and docstring is not None: - if source_lines is None: - return None - pat = re.compile(r'^\s*class\s*%s\b' % - re.escape(getattr(obj, '__name__', '-'))) - for i, line in enumerate(source_lines): - if pat.match(line): - lineno = i - break - - # Find the line number for functions & methods. - if inspect.ismethod(obj): obj = obj.__func__ - if isinstance(obj, property): - obj = obj.fget - if isinstance(obj, functools.cached_property): - obj = obj.func - if inspect.isroutine(obj) and getattr(obj, '__doc__', None): - # We don't use `docstring` var here, because `obj` can be changed. - obj = inspect.unwrap(obj) - try: - obj = obj.__code__ - except AttributeError: - # Functions implemented in C don't necessarily - # have a __code__ attribute. - # If there's no code, there's no lineno - return None - if inspect.istraceback(obj): obj = obj.tb_frame - if inspect.isframe(obj): obj = obj.f_code - if inspect.iscode(obj): - lineno = obj.co_firstlineno - 1 - - # Find the line number where the docstring starts. Assume - # that it's the first line that begins with a quote mark. - # Note: this could be fooled by a multiline function - # signature, where a continuation line begins with a quote - # mark. - if lineno is not None: - if source_lines is None: - return lineno+1 - pat = re.compile(r'(^|.*:)\s*\w*("|\')') - for lineno in range(lineno, len(source_lines)): - if pat.match(source_lines[lineno]): - return lineno - - # We couldn't find the line number. - return None - -###################################################################### -## 5. DocTest Runner -###################################################################### - -class DocTestRunner: - """ - A class used to run DocTest test cases, and accumulate statistics. - The `run` method is used to process a single DocTest case. It - returns a TestResults instance. - - >>> save_colorize = _colorize.COLORIZE - >>> _colorize.COLORIZE = False - - >>> tests = DocTestFinder().find(_TestClass) - >>> runner = DocTestRunner(verbose=False) - >>> tests.sort(key = lambda test: test.name) - >>> for test in tests: - ... print(test.name, '->', runner.run(test)) - _TestClass -> TestResults(failed=0, attempted=2) - _TestClass.__init__ -> TestResults(failed=0, attempted=2) - _TestClass.get -> TestResults(failed=0, attempted=2) - _TestClass.square -> TestResults(failed=0, attempted=1) - - The `summarize` method prints a summary of all the test cases that - have been run by the runner, and returns an aggregated TestResults - instance: - - >>> runner.summarize(verbose=1) - 4 items passed all tests: - 2 tests in _TestClass - 2 tests in _TestClass.__init__ - 2 tests in _TestClass.get - 1 test in _TestClass.square - 7 tests in 4 items. - 7 passed. - Test passed. - TestResults(failed=0, attempted=7) - - The aggregated number of tried examples and failed examples is also - available via the `tries`, `failures` and `skips` attributes: - - >>> runner.tries - 7 - >>> runner.failures - 0 - >>> runner.skips - 0 - - The comparison between expected outputs and actual outputs is done - by an `OutputChecker`. This comparison may be customized with a - number of option flags; see the documentation for `testmod` for - more information. If the option flags are insufficient, then the - comparison may also be customized by passing a subclass of - `OutputChecker` to the constructor. - - The test runner's display output can be controlled in two ways. - First, an output function (`out`) can be passed to - `TestRunner.run`; this function will be called with strings that - should be displayed. It defaults to `sys.stdout.write`. If - capturing the output is not sufficient, then the display output - can be also customized by subclassing DocTestRunner, and - overriding the methods `report_start`, `report_success`, - `report_unexpected_exception`, and `report_failure`. - - >>> _colorize.COLORIZE = save_colorize - """ - # This divider string is used to separate failure messages, and to - # separate sections of the summary. - DIVIDER = "*" * 70 - - def __init__(self, checker=None, verbose=None, optionflags=0): - """ - Create a new test runner. - - Optional keyword arg `checker` is the `OutputChecker` that - should be used to compare the expected outputs and actual - outputs of doctest examples. - - Optional keyword arg 'verbose' prints lots of stuff if true, - only failures if false; by default, it's true iff '-v' is in - sys.argv. - - Optional argument `optionflags` can be used to control how the - test runner compares expected output to actual output, and how - it displays failures. See the documentation for `testmod` for - more information. - """ - self._checker = checker or OutputChecker() - if verbose is None: - verbose = '-v' in sys.argv - self._verbose = verbose - self.optionflags = optionflags - self.original_optionflags = optionflags - - # Keep track of the examples we've run. - self.tries = 0 - self.failures = 0 - self.skips = 0 - self._stats = {} - - # Create a fake output target for capturing doctest output. - self._fakeout = _SpoofOut() - - #///////////////////////////////////////////////////////////////// - # Reporting methods - #///////////////////////////////////////////////////////////////// - - def report_start(self, out, test, example): - """ - Report that the test runner is about to process the given - example. (Only displays a message if verbose=True) - """ - if self._verbose: - if example.want: - out('Trying:\n' + _indent(example.source) + - 'Expecting:\n' + _indent(example.want)) - else: - out('Trying:\n' + _indent(example.source) + - 'Expecting nothing\n') - - def report_success(self, out, test, example, got): - """ - Report that the given example ran successfully. (Only - displays a message if verbose=True) - """ - if self._verbose: - out("ok\n") - - def report_failure(self, out, test, example, got): - """ - Report that the given example failed. - """ - out(self._failure_header(test, example) + - self._checker.output_difference(example, got, self.optionflags)) - - def report_unexpected_exception(self, out, test, example, exc_info): - """ - Report that the given example raised an unexpected exception. - """ - out(self._failure_header(test, example) + - 'Exception raised:\n' + _indent(_exception_traceback(exc_info))) - - def _failure_header(self, test, example): - red, reset = ( - (ANSIColors.RED, ANSIColors.RESET) if can_colorize() else ("", "") - ) - out = [f"{red}{self.DIVIDER}{reset}"] - if test.filename: - if test.lineno is not None and example.lineno is not None: - lineno = test.lineno + example.lineno + 1 - else: - lineno = '?' - out.append('File "%s", line %s, in %s' % - (test.filename, lineno, test.name)) - else: - out.append('Line %s, in %s' % (example.lineno+1, test.name)) - out.append('Failed example:') - source = example.source - out.append(_indent(source)) - return '\n'.join(out) - - #///////////////////////////////////////////////////////////////// - # DocTest Running - #///////////////////////////////////////////////////////////////// - - def __run(self, test, compileflags, out): - """ - Run the examples in `test`. Write the outcome of each example - with one of the `DocTestRunner.report_*` methods, using the - writer function `out`. `compileflags` is the set of compiler - flags that should be used to execute examples. Return a TestResults - instance. The examples are run in the namespace `test.globs`. - """ - # Keep track of the number of failed, attempted, skipped examples. - failures = attempted = skips = 0 - - # Save the option flags (since option directives can be used - # to modify them). - original_optionflags = self.optionflags - - SUCCESS, FAILURE, BOOM = range(3) # `outcome` state - - check = self._checker.check_output - - # Process each example. - for examplenum, example in enumerate(test.examples): - attempted += 1 - - # If REPORT_ONLY_FIRST_FAILURE is set, then suppress - # reporting after the first failure. - quiet = (self.optionflags & REPORT_ONLY_FIRST_FAILURE and - failures > 0) - - # Merge in the example's options. - self.optionflags = original_optionflags - if example.options: - for (optionflag, val) in example.options.items(): - if val: - self.optionflags |= optionflag - else: - self.optionflags &= ~optionflag - - # If 'SKIP' is set, then skip this example. - if self.optionflags & SKIP: - skips += 1 - continue - - # Record that we started this example. - if not quiet: - self.report_start(out, test, example) - - # Use a special filename for compile(), so we can retrieve - # the source code during interactive debugging (see - # __patched_linecache_getlines). - filename = '<doctest %s[%d]>' % (test.name, examplenum) - - # Run the example in the given context (globs), and record - # any exception that gets raised. (But don't intercept - # keyboard interrupts.) - try: - # Don't blink! This is where the user's code gets run. - exec(compile(example.source, filename, "single", - compileflags, True), test.globs) - self.debugger.set_continue() # ==== Example Finished ==== - exc_info = None - except KeyboardInterrupt: - raise - except BaseException as exc: - exc_info = type(exc), exc, exc.__traceback__.tb_next - self.debugger.set_continue() # ==== Example Finished ==== - - got = self._fakeout.getvalue() # the actual output - self._fakeout.truncate(0) - outcome = FAILURE # guilty until proved innocent or insane - - # If the example executed without raising any exceptions, - # verify its output. - if exc_info is None: - if check(example.want, got, self.optionflags): - outcome = SUCCESS - - # The example raised an exception: check if it was expected. - else: - formatted_ex = traceback.format_exception_only(*exc_info[:2]) - if issubclass(exc_info[0], SyntaxError): - # SyntaxError / IndentationError is special: - # we don't care about the carets / suggestions / etc - # We only care about the error message and notes. - # They start with `SyntaxError:` (or any other class name) - exception_line_prefixes = ( - f"{exc_info[0].__qualname__}:", - f"{exc_info[0].__module__}.{exc_info[0].__qualname__}:", - ) - exc_msg_index = next( - index - for index, line in enumerate(formatted_ex) - if line.startswith(exception_line_prefixes) - ) - formatted_ex = formatted_ex[exc_msg_index:] - - exc_msg = "".join(formatted_ex) - if not quiet: - got += _exception_traceback(exc_info) - - # If `example.exc_msg` is None, then we weren't expecting - # an exception. - if example.exc_msg is None: - outcome = BOOM - - # We expected an exception: see whether it matches. - elif check(example.exc_msg, exc_msg, self.optionflags): - outcome = SUCCESS - - # Another chance if they didn't care about the detail. - elif self.optionflags & IGNORE_EXCEPTION_DETAIL: - if check(_strip_exception_details(example.exc_msg), - _strip_exception_details(exc_msg), - self.optionflags): - outcome = SUCCESS - - # Report the outcome. - if outcome is SUCCESS: - if not quiet: - self.report_success(out, test, example, got) - elif outcome is FAILURE: - if not quiet: - self.report_failure(out, test, example, got) - failures += 1 - elif outcome is BOOM: - if not quiet: - self.report_unexpected_exception(out, test, example, - exc_info) - failures += 1 - else: - assert False, ("unknown outcome", outcome) - - if failures and self.optionflags & FAIL_FAST: - break - - # Restore the option flags (in case they were modified) - self.optionflags = original_optionflags - - # Record and return the number of failures and attempted. - self.__record_outcome(test, failures, attempted, skips) - return TestResults(failures, attempted, skipped=skips) - - def __record_outcome(self, test, failures, tries, skips): - """ - Record the fact that the given DocTest (`test`) generated `failures` - failures out of `tries` tried examples. - """ - failures2, tries2, skips2 = self._stats.get(test.name, (0, 0, 0)) - self._stats[test.name] = (failures + failures2, - tries + tries2, - skips + skips2) - self.failures += failures - self.tries += tries - self.skips += skips - - __LINECACHE_FILENAME_RE = re.compile(r'<doctest ' - r'(?P<name>.+)' - r'\[(?P<examplenum>\d+)\]>$') - def __patched_linecache_getlines(self, filename, module_globals=None): - m = self.__LINECACHE_FILENAME_RE.match(filename) - if m and m.group('name') == self.test.name: - example = self.test.examples[int(m.group('examplenum'))] - return example.source.splitlines(keepends=True) - else: - return self.save_linecache_getlines(filename, module_globals) - - def run(self, test, compileflags=None, out=None, clear_globs=True): - """ - Run the examples in `test`, and display the results using the - writer function `out`. - - The examples are run in the namespace `test.globs`. If - `clear_globs` is true (the default), then this namespace will - be cleared after the test runs, to help with garbage - collection. If you would like to examine the namespace after - the test completes, then use `clear_globs=False`. - - `compileflags` gives the set of flags that should be used by - the Python compiler when running the examples. If not - specified, then it will default to the set of future-import - flags that apply to `globs`. - - The output of each example is checked using - `DocTestRunner.check_output`, and the results are formatted by - the `DocTestRunner.report_*` methods. - """ - self.test = test - - if compileflags is None: - compileflags = _extract_future_flags(test.globs) - - save_stdout = sys.stdout - if out is None: - encoding = save_stdout.encoding - if encoding is None or encoding.lower() == 'utf-8': - out = save_stdout.write - else: - # Use backslashreplace error handling on write - def out(s): - s = str(s.encode(encoding, 'backslashreplace'), encoding) - save_stdout.write(s) - sys.stdout = self._fakeout - - # Patch pdb.set_trace to restore sys.stdout during interactive - # debugging (so it's not still redirected to self._fakeout). - # Note that the interactive output will go to *our* - # save_stdout, even if that's not the real sys.stdout; this - # allows us to write test cases for the set_trace behavior. - save_trace = sys.gettrace() - save_set_trace = pdb.set_trace - self.debugger = _OutputRedirectingPdb(save_stdout) - self.debugger.reset() - pdb.set_trace = self.debugger.set_trace - - # Patch linecache.getlines, so we can see the example's source - # when we're inside the debugger. - self.save_linecache_getlines = linecache.getlines - linecache.getlines = self.__patched_linecache_getlines - - # Make sure sys.displayhook just prints the value to stdout - save_displayhook = sys.displayhook - sys.displayhook = sys.__displayhook__ - saved_can_colorize = _colorize.can_colorize - _colorize.can_colorize = lambda *args, **kwargs: False - color_variables = {"PYTHON_COLORS": None, "FORCE_COLOR": None} - for key in color_variables: - color_variables[key] = os.environ.pop(key, None) - try: - return self.__run(test, compileflags, out) - finally: - sys.stdout = save_stdout - pdb.set_trace = save_set_trace - sys.settrace(save_trace) - linecache.getlines = self.save_linecache_getlines - sys.displayhook = save_displayhook - _colorize.can_colorize = saved_can_colorize - for key, value in color_variables.items(): - if value is not None: - os.environ[key] = value - if clear_globs: - test.globs.clear() - import builtins - builtins._ = None - - #///////////////////////////////////////////////////////////////// - # Summarization - #///////////////////////////////////////////////////////////////// - def summarize(self, verbose=None): - """ - Print a summary of all the test cases that have been run by - this DocTestRunner, and return a TestResults instance. - - The optional `verbose` argument controls how detailed the - summary is. If the verbosity is not specified, then the - DocTestRunner's verbosity is used. - """ - if verbose is None: - verbose = self._verbose - - notests, passed, failed = [], [], [] - total_tries = total_failures = total_skips = 0 - - for name, (failures, tries, skips) in self._stats.items(): - assert failures <= tries - total_tries += tries - total_failures += failures - total_skips += skips - - if tries == 0: - notests.append(name) - elif failures == 0: - passed.append((name, tries)) - else: - failed.append((name, (failures, tries, skips))) - - ansi = _colorize.get_colors() - bold_green = ansi.BOLD_GREEN - bold_red = ansi.BOLD_RED - green = ansi.GREEN - red = ansi.RED - reset = ansi.RESET - yellow = ansi.YELLOW - - if verbose: - if notests: - print(f"{_n_items(notests)} had no tests:") - notests.sort() - for name in notests: - print(f" {name}") - - if passed: - print(f"{green}{_n_items(passed)} passed all tests:{reset}") - for name, count in sorted(passed): - s = "" if count == 1 else "s" - print(f" {green}{count:3d} test{s} in {name}{reset}") - - if failed: - print(f"{red}{self.DIVIDER}{reset}") - print(f"{_n_items(failed)} had failures:") - for name, (failures, tries, skips) in sorted(failed): - print(f" {failures:3d} of {tries:3d} in {name}") - - if verbose: - s = "" if total_tries == 1 else "s" - print(f"{total_tries} test{s} in {_n_items(self._stats)}.") - - and_f = ( - f" and {red}{total_failures} failed{reset}" - if total_failures else "" - ) - print(f"{green}{total_tries - total_failures} passed{reset}{and_f}.") - - if total_failures: - s = "" if total_failures == 1 else "s" - msg = f"{bold_red}***Test Failed*** {total_failures} failure{s}{reset}" - if total_skips: - s = "" if total_skips == 1 else "s" - msg = f"{msg} and {yellow}{total_skips} skipped test{s}{reset}" - print(f"{msg}.") - elif verbose: - print(f"{bold_green}Test passed.{reset}") - - return TestResults(total_failures, total_tries, skipped=total_skips) - - #///////////////////////////////////////////////////////////////// - # Backward compatibility cruft to maintain doctest.master. - #///////////////////////////////////////////////////////////////// - def merge(self, other): - d = self._stats - for name, (failures, tries, skips) in other._stats.items(): - if name in d: - failures2, tries2, skips2 = d[name] - failures = failures + failures2 - tries = tries + tries2 - skips = skips + skips2 - d[name] = (failures, tries, skips) - - -def _n_items(items: list | dict) -> str: - """ - Helper to pluralise the number of items in a list. - """ - n = len(items) - s = "" if n == 1 else "s" - return f"{n} item{s}" - - -class OutputChecker: - """ - A class used to check whether the actual output from a doctest - example matches the expected output. `OutputChecker` defines two - methods: `check_output`, which compares a given pair of outputs, - and returns true if they match; and `output_difference`, which - returns a string describing the differences between two outputs. - """ - def _toAscii(self, s): - """ - Convert string to hex-escaped ASCII string. - """ - return str(s.encode('ASCII', 'backslashreplace'), "ASCII") - - def check_output(self, want, got, optionflags): - """ - Return True iff the actual output from an example (`got`) - matches the expected output (`want`). These strings are - always considered to match if they are identical; but - depending on what option flags the test runner is using, - several non-exact match types are also possible. See the - documentation for `TestRunner` for more information about - option flags. - """ - - # If `want` contains hex-escaped character such as "\u1234", - # then `want` is a string of six characters(e.g. [\,u,1,2,3,4]). - # On the other hand, `got` could be another sequence of - # characters such as [\u1234], so `want` and `got` should - # be folded to hex-escaped ASCII string to compare. - got = self._toAscii(got) - want = self._toAscii(want) - - # Handle the common case first, for efficiency: - # if they're string-identical, always return true. - if got == want: - return True - - # The values True and False replaced 1 and 0 as the return - # value for boolean comparisons in Python 2.3. - if not (optionflags & DONT_ACCEPT_TRUE_FOR_1): - if (got,want) == ("True\n", "1\n"): - return True - if (got,want) == ("False\n", "0\n"): - return True - - # <BLANKLINE> can be used as a special sequence to signify a - # blank line, unless the DONT_ACCEPT_BLANKLINE flag is used. - if not (optionflags & DONT_ACCEPT_BLANKLINE): - # Replace <BLANKLINE> in want with a blank line. - want = re.sub(r'(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER), - '', want) - # If a line in got contains only spaces, then remove the - # spaces. - got = re.sub(r'(?m)^[^\S\n]+$', '', got) - if got == want: - return True - - # This flag causes doctest to ignore any differences in the - # contents of whitespace strings. Note that this can be used - # in conjunction with the ELLIPSIS flag. - if optionflags & NORMALIZE_WHITESPACE: - got = ' '.join(got.split()) - want = ' '.join(want.split()) - if got == want: - return True - - # The ELLIPSIS flag says to let the sequence "..." in `want` - # match any substring in `got`. - if optionflags & ELLIPSIS: - if _ellipsis_match(want, got): - return True - - # We didn't find any match; return false. - return False - - # Should we do a fancy diff? - def _do_a_fancy_diff(self, want, got, optionflags): - # Not unless they asked for a fancy diff. - if not optionflags & (REPORT_UDIFF | - REPORT_CDIFF | - REPORT_NDIFF): - return False - - # If expected output uses ellipsis, a meaningful fancy diff is - # too hard ... or maybe not. In two real-life failures Tim saw, - # a diff was a major help anyway, so this is commented out. - # [todo] _ellipsis_match() knows which pieces do and don't match, - # and could be the basis for a kick-ass diff in this case. - ##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want: - ## return False - - # ndiff does intraline difference marking, so can be useful even - # for 1-line differences. - if optionflags & REPORT_NDIFF: - return True - - # The other diff types need at least a few lines to be helpful. - return want.count('\n') > 2 and got.count('\n') > 2 - - def output_difference(self, example, got, optionflags): - """ - Return a string describing the differences between the - expected output for a given example (`example`) and the actual - output (`got`). `optionflags` is the set of option flags used - to compare `want` and `got`. - """ - want = example.want - # If <BLANKLINE>s are being used, then replace blank lines - # with <BLANKLINE> in the actual output string. - if not (optionflags & DONT_ACCEPT_BLANKLINE): - got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got) - - # Check if we should use diff. - if self._do_a_fancy_diff(want, got, optionflags): - # Split want & got into lines. - want_lines = want.splitlines(keepends=True) - got_lines = got.splitlines(keepends=True) - # Use difflib to find their differences. - if optionflags & REPORT_UDIFF: - diff = difflib.unified_diff(want_lines, got_lines, n=2) - diff = list(diff)[2:] # strip the diff header - kind = 'unified diff with -expected +actual' - elif optionflags & REPORT_CDIFF: - diff = difflib.context_diff(want_lines, got_lines, n=2) - diff = list(diff)[2:] # strip the diff header - kind = 'context diff with expected followed by actual' - elif optionflags & REPORT_NDIFF: - engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK) - diff = list(engine.compare(want_lines, got_lines)) - kind = 'ndiff with -expected +actual' - else: - assert 0, 'Bad diff option' - return 'Differences (%s):\n' % kind + _indent(''.join(diff)) - - # If we're not using diff, then simply list the expected - # output followed by the actual output. - if want and got: - return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got)) - elif want: - return 'Expected:\n%sGot nothing\n' % _indent(want) - elif got: - return 'Expected nothing\nGot:\n%s' % _indent(got) - else: - return 'Expected nothing\nGot nothing\n' - -class DocTestFailure(Exception): - """A DocTest example has failed in debugging mode. - - The exception instance has variables: - - - test: the DocTest object being run - - - example: the Example object that failed - - - got: the actual output - """ - def __init__(self, test, example, got): - self.test = test - self.example = example - self.got = got - - def __str__(self): - return str(self.test) - -class UnexpectedException(Exception): - """A DocTest example has encountered an unexpected exception - - The exception instance has variables: - - - test: the DocTest object being run - - - example: the Example object that failed - - - exc_info: the exception info - """ - def __init__(self, test, example, exc_info): - self.test = test - self.example = example - self.exc_info = exc_info - - def __str__(self): - return str(self.test) - -class DebugRunner(DocTestRunner): - r"""Run doc tests but raise an exception as soon as there is a failure. - - If an unexpected exception occurs, an UnexpectedException is raised. - It contains the test, the example, and the original exception: - - >>> runner = DebugRunner(verbose=False) - >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42', - ... {}, 'foo', 'foo.py', 0) - >>> try: - ... runner.run(test) - ... except UnexpectedException as f: - ... failure = f - - >>> failure.test is test - True - - >>> failure.example.want - '42\n' - - >>> exc_info = failure.exc_info - >>> raise exc_info[1] # Already has the traceback - Traceback (most recent call last): - ... - KeyError - - We wrap the original exception to give the calling application - access to the test and example information. - - If the output doesn't match, then a DocTestFailure is raised: - - >>> test = DocTestParser().get_doctest(''' - ... >>> x = 1 - ... >>> x - ... 2 - ... ''', {}, 'foo', 'foo.py', 0) - - >>> try: - ... runner.run(test) - ... except DocTestFailure as f: - ... failure = f - - DocTestFailure objects provide access to the test: - - >>> failure.test is test - True - - As well as to the example: - - >>> failure.example.want - '2\n' - - and the actual output: - - >>> failure.got - '1\n' - - If a failure or error occurs, the globals are left intact: - - >>> del test.globs['__builtins__'] - >>> test.globs - {'x': 1} - - >>> test = DocTestParser().get_doctest(''' - ... >>> x = 2 - ... >>> raise KeyError - ... ''', {}, 'foo', 'foo.py', 0) - - >>> runner.run(test) - Traceback (most recent call last): - ... - doctest.UnexpectedException: <DocTest foo from foo.py:0 (2 examples)> - - >>> del test.globs['__builtins__'] - >>> test.globs - {'x': 2} - - But the globals are cleared if there is no error: - - >>> test = DocTestParser().get_doctest(''' - ... >>> x = 2 - ... ''', {}, 'foo', 'foo.py', 0) - - >>> runner.run(test) - TestResults(failed=0, attempted=1) - - >>> test.globs - {} - - """ - - def run(self, test, compileflags=None, out=None, clear_globs=True): - r = DocTestRunner.run(self, test, compileflags, out, False) - if clear_globs: - test.globs.clear() - return r - - def report_unexpected_exception(self, out, test, example, exc_info): - raise UnexpectedException(test, example, exc_info) - - def report_failure(self, out, test, example, got): - raise DocTestFailure(test, example, got) - -###################################################################### -## 6. Test Functions -###################################################################### -# These should be backwards compatible. - -# For backward compatibility, a global instance of a DocTestRunner -# class, updated by testmod. -master = None - -def testmod(m=None, name=None, globs=None, verbose=None, - report=True, optionflags=0, extraglobs=None, - raise_on_error=False, exclude_empty=False): - """m=None, name=None, globs=None, verbose=None, report=True, - optionflags=0, extraglobs=None, raise_on_error=False, - exclude_empty=False - - Test examples in docstrings in functions and classes reachable - from module m (or the current module if m is not supplied), starting - with m.__doc__. - - Also test examples reachable from dict m.__test__ if it exists. - m.__test__ maps names to functions, classes and strings; - function and class docstrings are tested even if the name is private; - strings are tested directly, as if they were docstrings. - - Return (#failures, #tests). - - See help(doctest) for an overview. - - Optional keyword arg "name" gives the name of the module; by default - use m.__name__. - - Optional keyword arg "globs" gives a dict to be used as the globals - when executing examples; by default, use m.__dict__. A copy of this - dict is actually used for each docstring, so that each docstring's - examples start with a clean slate. - - Optional keyword arg "extraglobs" gives a dictionary that should be - merged into the globals that are used to execute examples. By - default, no extra globals are used. This is new in 2.4. - - Optional keyword arg "verbose" prints lots of stuff if true, prints - only failures if false; by default, it's true iff "-v" is in sys.argv. - - Optional keyword arg "report" prints a summary at the end when true, - else prints nothing at the end. In verbose mode, the summary is - detailed, else very brief (in fact, empty if all tests passed). - - Optional keyword arg "optionflags" or's together module constants, - and defaults to 0. This is new in 2.3. Possible values (see the - docs for details): - - DONT_ACCEPT_TRUE_FOR_1 - DONT_ACCEPT_BLANKLINE - NORMALIZE_WHITESPACE - ELLIPSIS - SKIP - IGNORE_EXCEPTION_DETAIL - REPORT_UDIFF - REPORT_CDIFF - REPORT_NDIFF - REPORT_ONLY_FIRST_FAILURE - - Optional keyword arg "raise_on_error" raises an exception on the - first unexpected exception or failure. This allows failures to be - post-mortem debugged. - - Advanced tomfoolery: testmod runs methods of a local instance of - class doctest.Tester, then merges the results into (or creates) - global Tester instance doctest.master. Methods of doctest.master - can be called directly too, if you want to do something unusual. - Passing report=0 to testmod is especially useful then, to delay - displaying a summary. Invoke doctest.master.summarize(verbose) - when you're done fiddling. - """ - global master - - # If no module was given, then use __main__. - if m is None: - # DWA - m will still be None if this wasn't invoked from the command - # line, in which case the following TypeError is about as good an error - # as we should expect - m = sys.modules.get('__main__') - - # Check that we were actually given a module. - if not inspect.ismodule(m): - raise TypeError("testmod: module required; %r" % (m,)) - - # If no name was given, then use the module's name. - if name is None: - name = m.__name__ - - # Find, parse, and run all tests in the given module. - finder = DocTestFinder(exclude_empty=exclude_empty) - - if raise_on_error: - runner = DebugRunner(verbose=verbose, optionflags=optionflags) - else: - runner = DocTestRunner(verbose=verbose, optionflags=optionflags) - - for test in finder.find(m, name, globs=globs, extraglobs=extraglobs): - runner.run(test) - - if report: - runner.summarize() - - if master is None: - master = runner - else: - master.merge(runner) - - return TestResults(runner.failures, runner.tries, skipped=runner.skips) - - -def testfile(filename, module_relative=True, name=None, package=None, - globs=None, verbose=None, report=True, optionflags=0, - extraglobs=None, raise_on_error=False, parser=DocTestParser(), - encoding=None): - """ - Test examples in the given file. Return (#failures, #tests). - - Optional keyword arg "module_relative" specifies how filenames - should be interpreted: - - - If "module_relative" is True (the default), then "filename" - specifies a module-relative path. By default, this path is - relative to the calling module's directory; but if the - "package" argument is specified, then it is relative to that - package. To ensure os-independence, "filename" should use - "/" characters to separate path segments, and should not - be an absolute path (i.e., it may not begin with "/"). - - - If "module_relative" is False, then "filename" specifies an - os-specific path. The path may be absolute or relative (to - the current working directory). - - Optional keyword arg "name" gives the name of the test; by default - use the file's basename. - - Optional keyword argument "package" is a Python package or the - name of a Python package whose directory should be used as the - base directory for a module relative filename. If no package is - specified, then the calling module's directory is used as the base - directory for module relative filenames. It is an error to - specify "package" if "module_relative" is False. - - Optional keyword arg "globs" gives a dict to be used as the globals - when executing examples; by default, use {}. A copy of this dict - is actually used for each docstring, so that each docstring's - examples start with a clean slate. - - Optional keyword arg "extraglobs" gives a dictionary that should be - merged into the globals that are used to execute examples. By - default, no extra globals are used. - - Optional keyword arg "verbose" prints lots of stuff if true, prints - only failures if false; by default, it's true iff "-v" is in sys.argv. - - Optional keyword arg "report" prints a summary at the end when true, - else prints nothing at the end. In verbose mode, the summary is - detailed, else very brief (in fact, empty if all tests passed). - - Optional keyword arg "optionflags" or's together module constants, - and defaults to 0. Possible values (see the docs for details): - - DONT_ACCEPT_TRUE_FOR_1 - DONT_ACCEPT_BLANKLINE - NORMALIZE_WHITESPACE - ELLIPSIS - SKIP - IGNORE_EXCEPTION_DETAIL - REPORT_UDIFF - REPORT_CDIFF - REPORT_NDIFF - REPORT_ONLY_FIRST_FAILURE - - Optional keyword arg "raise_on_error" raises an exception on the - first unexpected exception or failure. This allows failures to be - post-mortem debugged. - - Optional keyword arg "parser" specifies a DocTestParser (or - subclass) that should be used to extract tests from the files. - - Optional keyword arg "encoding" specifies an encoding that should - be used to convert the file to unicode. - - Advanced tomfoolery: testmod runs methods of a local instance of - class doctest.Tester, then merges the results into (or creates) - global Tester instance doctest.master. Methods of doctest.master - can be called directly too, if you want to do something unusual. - Passing report=0 to testmod is especially useful then, to delay - displaying a summary. Invoke doctest.master.summarize(verbose) - when you're done fiddling. - """ - global master - - if package and not module_relative: - raise ValueError("Package may only be specified for module-" - "relative paths.") - - # Relativize the path - text, filename = _load_testfile(filename, package, module_relative, - encoding or "utf-8") - - # If no name was given, then use the file's name. - if name is None: - name = os.path.basename(filename) - - # Assemble the globals. - if globs is None: - globs = {} - else: - globs = globs.copy() - if extraglobs is not None: - globs.update(extraglobs) - if '__name__' not in globs: - globs['__name__'] = '__main__' - - if raise_on_error: - runner = DebugRunner(verbose=verbose, optionflags=optionflags) - else: - runner = DocTestRunner(verbose=verbose, optionflags=optionflags) - - # Read the file, convert it to a test, and run it. - test = parser.get_doctest(text, globs, name, filename, 0) - runner.run(test) - - if report: - runner.summarize() - - if master is None: - master = runner - else: - master.merge(runner) - - return TestResults(runner.failures, runner.tries, skipped=runner.skips) - - -def run_docstring_examples(f, globs, verbose=False, name="NoName", - compileflags=None, optionflags=0): - """ - Test examples in the given object's docstring (`f`), using `globs` - as globals. Optional argument `name` is used in failure messages. - If the optional argument `verbose` is true, then generate output - even if there are no failures. - - `compileflags` gives the set of flags that should be used by the - Python compiler when running the examples. If not specified, then - it will default to the set of future-import flags that apply to - `globs`. - - Optional keyword arg `optionflags` specifies options for the - testing and output. See the documentation for `testmod` for more - information. - """ - # Find, parse, and run all tests in the given module. - finder = DocTestFinder(verbose=verbose, recurse=False) - runner = DocTestRunner(verbose=verbose, optionflags=optionflags) - for test in finder.find(f, name, globs=globs): - runner.run(test, compileflags=compileflags) - -###################################################################### -## 7. Unittest Support -###################################################################### - -_unittest_reportflags = 0 - -def set_unittest_reportflags(flags): - """Sets the unittest option flags. - - The old flag is returned so that a runner could restore the old - value if it wished to: - - >>> import doctest - >>> old = doctest._unittest_reportflags - >>> doctest.set_unittest_reportflags(REPORT_NDIFF | - ... REPORT_ONLY_FIRST_FAILURE) == old - True - - >>> doctest._unittest_reportflags == (REPORT_NDIFF | - ... REPORT_ONLY_FIRST_FAILURE) - True - - Only reporting flags can be set: - - >>> doctest.set_unittest_reportflags(ELLIPSIS) - Traceback (most recent call last): - ... - ValueError: ('Only reporting flags allowed', 8) - - >>> doctest.set_unittest_reportflags(old) == (REPORT_NDIFF | - ... REPORT_ONLY_FIRST_FAILURE) - True - """ - global _unittest_reportflags - - if (flags & REPORTING_FLAGS) != flags: - raise ValueError("Only reporting flags allowed", flags) - old = _unittest_reportflags - _unittest_reportflags = flags - return old - - -class DocTestCase(unittest.TestCase): - - def __init__(self, test, optionflags=0, setUp=None, tearDown=None, - checker=None): - - unittest.TestCase.__init__(self) - self._dt_optionflags = optionflags - self._dt_checker = checker - self._dt_test = test - self._dt_setUp = setUp - self._dt_tearDown = tearDown - - def setUp(self): - test = self._dt_test - self._dt_globs = test.globs.copy() - - if self._dt_setUp is not None: - self._dt_setUp(test) - - def tearDown(self): - test = self._dt_test - - if self._dt_tearDown is not None: - self._dt_tearDown(test) - - # restore the original globs - test.globs.clear() - test.globs.update(self._dt_globs) - - def runTest(self): - test = self._dt_test - old = sys.stdout - new = StringIO() - optionflags = self._dt_optionflags - - if not (optionflags & REPORTING_FLAGS): - # The option flags don't include any reporting flags, - # so add the default reporting flags - optionflags |= _unittest_reportflags - - runner = DocTestRunner(optionflags=optionflags, - checker=self._dt_checker, verbose=False) - - try: - runner.DIVIDER = "-"*70 - results = runner.run(test, out=new.write, clear_globs=False) - if results.skipped == results.attempted: - raise unittest.SkipTest("all examples were skipped") - finally: - sys.stdout = old - - if results.failed: - raise self.failureException(self.format_failure(new.getvalue().rstrip('\n'))) - - def format_failure(self, err): - test = self._dt_test - if test.lineno is None: - lineno = 'unknown line number' - else: - lineno = '%s' % test.lineno - lname = '.'.join(test.name.split('.')[-1:]) - return ('Failed doctest test for %s\n' - ' File "%s", line %s, in %s\n\n%s' - % (test.name, test.filename, lineno, lname, err) - ) - - def debug(self): - r"""Run the test case without results and without catching exceptions - - The unit test framework includes a debug method on test cases - and test suites to support post-mortem debugging. The test code - is run in such a way that errors are not caught. This way a - caller can catch the errors and initiate post-mortem debugging. - - The DocTestCase provides a debug method that raises - UnexpectedException errors if there is an unexpected - exception: - - >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42', - ... {}, 'foo', 'foo.py', 0) - >>> case = DocTestCase(test) - >>> try: - ... case.debug() - ... except UnexpectedException as f: - ... failure = f - - The UnexpectedException contains the test, the example, and - the original exception: - - >>> failure.test is test - True - - >>> failure.example.want - '42\n' - - >>> exc_info = failure.exc_info - >>> raise exc_info[1] # Already has the traceback - Traceback (most recent call last): - ... - KeyError - - If the output doesn't match, then a DocTestFailure is raised: - - >>> test = DocTestParser().get_doctest(''' - ... >>> x = 1 - ... >>> x - ... 2 - ... ''', {}, 'foo', 'foo.py', 0) - >>> case = DocTestCase(test) - - >>> try: - ... case.debug() - ... except DocTestFailure as f: - ... failure = f - - DocTestFailure objects provide access to the test: - - >>> failure.test is test - True - - As well as to the example: - - >>> failure.example.want - '2\n' - - and the actual output: - - >>> failure.got - '1\n' - - """ - - self.setUp() - runner = DebugRunner(optionflags=self._dt_optionflags, - checker=self._dt_checker, verbose=False) - runner.run(self._dt_test, clear_globs=False) - self.tearDown() - - def id(self): - return self._dt_test.name - - def __eq__(self, other): - if type(self) is not type(other): - return NotImplemented - - return self._dt_test == other._dt_test and \ - self._dt_optionflags == other._dt_optionflags and \ - self._dt_setUp == other._dt_setUp and \ - self._dt_tearDown == other._dt_tearDown and \ - self._dt_checker == other._dt_checker - - def __hash__(self): - return hash((self._dt_optionflags, self._dt_setUp, self._dt_tearDown, - self._dt_checker)) - - def __repr__(self): - name = self._dt_test.name.split('.') - return "%s (%s)" % (name[-1], '.'.join(name[:-1])) - - __str__ = object.__str__ - - def shortDescription(self): - return "Doctest: " + self._dt_test.name - -class SkipDocTestCase(DocTestCase): - def __init__(self, module): - self.module = module - DocTestCase.__init__(self, None) - - def setUp(self): - self.skipTest("DocTestSuite will not work with -O2 and above") - - def test_skip(self): - pass - - def shortDescription(self): - return "Skipping tests from %s" % self.module.__name__ - - __str__ = shortDescription - - -class _DocTestSuite(unittest.TestSuite): - - def _removeTestAtIndex(self, index): - pass - - -def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None, - **options): - """ - Convert doctest tests for a module to a unittest test suite. - - This converts each documentation string in a module that - contains doctest tests to a unittest test case. If any of the - tests in a doc string fail, then the test case fails. An exception - is raised showing the name of the file containing the test and a - (sometimes approximate) line number. - - The `module` argument provides the module to be tested. The argument - can be either a module or a module name. - - If no argument is given, the calling module is used. - - A number of options may be provided as keyword arguments: - - setUp - A set-up function. This is called before running the - tests in each file. The setUp function will be passed a DocTest - object. The setUp function can access the test globals as the - globs attribute of the test passed. - - tearDown - A tear-down function. This is called after running the - tests in each file. The tearDown function will be passed a DocTest - object. The tearDown function can access the test globals as the - globs attribute of the test passed. - - globs - A dictionary containing initial global variables for the tests. - - optionflags - A set of doctest option flags expressed as an integer. - """ - - if test_finder is None: - test_finder = DocTestFinder() - - module = _normalize_module(module) - tests = test_finder.find(module, globs=globs, extraglobs=extraglobs) - - if not tests and sys.flags.optimize >=2: - # Skip doctests when running with -O2 - suite = _DocTestSuite() - suite.addTest(SkipDocTestCase(module)) - return suite - - tests.sort() - suite = _DocTestSuite() - - for test in tests: - if len(test.examples) == 0: - continue - if not test.filename: - filename = module.__file__ - if filename[-4:] == ".pyc": - filename = filename[:-1] - test.filename = filename - suite.addTest(DocTestCase(test, **options)) - - return suite - -class DocFileCase(DocTestCase): - - def id(self): - return '_'.join(self._dt_test.name.split('.')) - - def __repr__(self): - return self._dt_test.filename - - def format_failure(self, err): - return ('Failed doctest test for %s\n File "%s", line 0\n\n%s' - % (self._dt_test.name, self._dt_test.filename, err) - ) - -def DocFileTest(path, module_relative=True, package=None, - globs=None, parser=DocTestParser(), - encoding=None, **options): - if globs is None: - globs = {} - else: - globs = globs.copy() - - if package and not module_relative: - raise ValueError("Package may only be specified for module-" - "relative paths.") - - # Relativize the path. - doc, path = _load_testfile(path, package, module_relative, - encoding or "utf-8") - - if "__file__" not in globs: - globs["__file__"] = path - - # Find the file and read it. - name = os.path.basename(path) - - # Convert it to a test, and wrap it in a DocFileCase. - test = parser.get_doctest(doc, globs, name, path, 0) - return DocFileCase(test, **options) - -def DocFileSuite(*paths, **kw): - """A unittest suite for one or more doctest files. - - The path to each doctest file is given as a string; the - interpretation of that string depends on the keyword argument - "module_relative". - - A number of options may be provided as keyword arguments: - - module_relative - If "module_relative" is True, then the given file paths are - interpreted as os-independent module-relative paths. By - default, these paths are relative to the calling module's - directory; but if the "package" argument is specified, then - they are relative to that package. To ensure os-independence, - "filename" should use "/" characters to separate path - segments, and may not be an absolute path (i.e., it may not - begin with "/"). - - If "module_relative" is False, then the given file paths are - interpreted as os-specific paths. These paths may be absolute - or relative (to the current working directory). - - package - A Python package or the name of a Python package whose directory - should be used as the base directory for module relative paths. - If "package" is not specified, then the calling module's - directory is used as the base directory for module relative - filenames. It is an error to specify "package" if - "module_relative" is False. - - setUp - A set-up function. This is called before running the - tests in each file. The setUp function will be passed a DocTest - object. The setUp function can access the test globals as the - globs attribute of the test passed. - - tearDown - A tear-down function. This is called after running the - tests in each file. The tearDown function will be passed a DocTest - object. The tearDown function can access the test globals as the - globs attribute of the test passed. - - globs - A dictionary containing initial global variables for the tests. - - optionflags - A set of doctest option flags expressed as an integer. - - parser - A DocTestParser (or subclass) that should be used to extract - tests from the files. - - encoding - An encoding that will be used to convert the files to unicode. - """ - suite = _DocTestSuite() - - # We do this here so that _normalize_module is called at the right - # level. If it were called in DocFileTest, then this function - # would be the caller and we might guess the package incorrectly. - if kw.get('module_relative', True): - kw['package'] = _normalize_module(kw.get('package')) - - for path in paths: - suite.addTest(DocFileTest(path, **kw)) - - return suite - -###################################################################### -## 8. Debugging Support -###################################################################### - -def script_from_examples(s): - r"""Extract script from text with examples. - - Converts text with examples to a Python script. Example input is - converted to regular code. Example output and all other words - are converted to comments: - - >>> text = ''' - ... Here are examples of simple math. - ... - ... Python has super accurate integer addition - ... - ... >>> 2 + 2 - ... 5 - ... - ... And very friendly error messages: - ... - ... >>> 1/0 - ... To Infinity - ... And - ... Beyond - ... - ... You can use logic if you want: - ... - ... >>> if 0: - ... ... blah - ... ... blah - ... ... - ... - ... Ho hum - ... ''' - - >>> print(script_from_examples(text)) - # Here are examples of simple math. - # - # Python has super accurate integer addition - # - 2 + 2 - # Expected: - ## 5 - # - # And very friendly error messages: - # - 1/0 - # Expected: - ## To Infinity - ## And - ## Beyond - # - # You can use logic if you want: - # - if 0: - blah - blah - # - # Ho hum - <BLANKLINE> - """ - output = [] - for piece in DocTestParser().parse(s): - if isinstance(piece, Example): - # Add the example's source code (strip trailing NL) - output.append(piece.source[:-1]) - # Add the expected output: - want = piece.want - if want: - output.append('# Expected:') - output += ['## '+l for l in want.split('\n')[:-1]] - else: - # Add non-example text. - output += [_comment_line(l) - for l in piece.split('\n')[:-1]] - - # Trim junk on both ends. - while output and output[-1] == '#': - output.pop() - while output and output[0] == '#': - output.pop(0) - # Combine the output, and return it. - # Add a courtesy newline to prevent exec from choking (see bug #1172785) - return '\n'.join(output) + '\n' - -def testsource(module, name): - """Extract the test sources from a doctest docstring as a script. - - Provide the module (or dotted name of the module) containing the - test to be debugged and the name (within the module) of the object - with the doc string with tests to be debugged. - """ - module = _normalize_module(module) - tests = DocTestFinder().find(module) - test = [t for t in tests if t.name == name] - if not test: - raise ValueError(name, "not found in tests") - test = test[0] - testsrc = script_from_examples(test.docstring) - return testsrc - -def debug_src(src, pm=False, globs=None): - """Debug a single doctest docstring, in argument `src`""" - testsrc = script_from_examples(src) - debug_script(testsrc, pm, globs) - -def debug_script(src, pm=False, globs=None): - "Debug a test script. `src` is the script, as a string." - import pdb - - if globs: - globs = globs.copy() - else: - globs = {} - - if pm: - try: - exec(src, globs, globs) - except: - print(sys.exc_info()[1]) - p = pdb.Pdb(nosigint=True) - p.reset() - p.interaction(None, sys.exc_info()[2]) - else: - pdb.Pdb(nosigint=True).run("exec(%r)" % src, globs, globs) - -def debug(module, name, pm=False): - """Debug a single doctest docstring. - - Provide the module (or dotted name of the module) containing the - test to be debugged and the name (within the module) of the object - with the docstring with tests to be debugged. - """ - module = _normalize_module(module) - testsrc = testsource(module, name) - debug_script(testsrc, pm, module.__dict__) - -###################################################################### -## 9. Example Usage -###################################################################### -class _TestClass: - """ - A pointless class, for sanity-checking of docstring testing. - - Methods: - square() - get() - - >>> _TestClass(13).get() + _TestClass(-12).get() - 1 - >>> hex(_TestClass(13).square().get()) - '0xa9' - """ - - def __init__(self, val): - """val -> _TestClass object with associated value val. - - >>> t = _TestClass(123) - >>> print(t.get()) - 123 - """ - - self.val = val - - def square(self): - """square() -> square TestClass's associated value - - >>> _TestClass(13).square().get() - 169 - """ - - self.val = self.val ** 2 - return self - - def get(self): - """get() -> return TestClass's associated value. - - >>> x = _TestClass(-42) - >>> print(x.get()) - -42 - """ - - return self.val - -__test__ = {"_TestClass": _TestClass, - "string": r""" - Example of a string object, searched as-is. - >>> x = 1; y = 2 - >>> x + y, x * y - (3, 2) - """, - - "bool-int equivalence": r""" - In 2.2, boolean expressions displayed - 0 or 1. By default, we still accept - them. This can be disabled by passing - DONT_ACCEPT_TRUE_FOR_1 to the new - optionflags argument. - >>> 4 == 4 - 1 - >>> 4 == 4 - True - >>> 4 > 4 - 0 - >>> 4 > 4 - False - """, - - "blank lines": r""" - Blank lines can be marked with <BLANKLINE>: - >>> print('foo\n\nbar\n') - foo - <BLANKLINE> - bar - <BLANKLINE> - """, - - "ellipsis": r""" - If the ellipsis flag is used, then '...' can be used to - elide substrings in the desired output: - >>> print(list(range(1000))) #doctest: +ELLIPSIS - [0, 1, 2, ..., 999] - """, - - "whitespace normalization": r""" - If the whitespace normalization flag is used, then - differences in whitespace are ignored. - >>> print(list(range(30))) #doctest: +NORMALIZE_WHITESPACE - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29] - """, - } - - -def _test(): - import argparse - - parser = argparse.ArgumentParser(description="doctest runner", color=True) - parser.add_argument('-v', '--verbose', action='store_true', default=False, - help='print very verbose output for all tests') - parser.add_argument('-o', '--option', action='append', - choices=OPTIONFLAGS_BY_NAME.keys(), default=[], - help=('specify a doctest option flag to apply' - ' to the test run; may be specified more' - ' than once to apply multiple options')) - parser.add_argument('-f', '--fail-fast', action='store_true', - help=('stop running tests after first failure (this' - ' is a shorthand for -o FAIL_FAST, and is' - ' in addition to any other -o options)')) - parser.add_argument('file', nargs='+', - help='file containing the tests to run') - args = parser.parse_args() - testfiles = args.file - # Verbose used to be handled by the "inspect argv" magic in DocTestRunner, - # but since we are using argparse we are passing it manually now. - verbose = args.verbose - options = 0 - for option in args.option: - options |= OPTIONFLAGS_BY_NAME[option] - if args.fail_fast: - options |= FAIL_FAST - for filename in testfiles: - if filename.endswith(".py"): - # It is a module -- insert its dir into sys.path and try to - # import it. If it is part of a package, that possibly - # won't work because of package imports. - dirname, filename = os.path.split(filename) - sys.path.insert(0, dirname) - m = __import__(filename[:-3]) - del sys.path[0] - failures, _ = testmod(m, verbose=verbose, optionflags=options) - else: - failures, _ = testfile(filename, module_relative=False, - verbose=verbose, optionflags=options) - if failures: - return 1 - return 0 - - -if __name__ == "__main__": - sys.exit(_test()) diff --git a/Python314_4_x86_Template/Lib/email/__init__.py b/Python314_4_x86_Template/Lib/email/__init__.py deleted file mode 100644 index 6d597006e..000000000 --- a/Python314_4_x86_Template/Lib/email/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""A package for parsing, handling, and generating email messages.""" - -__all__ = [ - 'base64mime', - 'charset', - 'encoders', - 'errors', - 'feedparser', - 'generator', - 'header', - 'iterators', - 'message', - 'message_from_file', - 'message_from_binary_file', - 'message_from_string', - 'message_from_bytes', - 'mime', - 'parser', - 'quoprimime', - 'utils', - ] - - -# Some convenience routines. Don't import Parser and Message as side-effects -# of importing email since those cascadingly import most of the rest of the -# email package. -def message_from_string(s, *args, **kws): - """Parse a string into a Message object model. - - Optional _class and strict are passed to the Parser constructor. - """ - from email.parser import Parser - return Parser(*args, **kws).parsestr(s) - -def message_from_bytes(s, *args, **kws): - """Parse a bytes string into a Message object model. - - Optional _class and strict are passed to the Parser constructor. - """ - from email.parser import BytesParser - return BytesParser(*args, **kws).parsebytes(s) - -def message_from_file(fp, *args, **kws): - """Read a file and parse its contents into a Message object model. - - Optional _class and strict are passed to the Parser constructor. - """ - from email.parser import Parser - return Parser(*args, **kws).parse(fp) - -def message_from_binary_file(fp, *args, **kws): - """Read a binary file and parse its contents into a Message object model. - - Optional _class and strict are passed to the Parser constructor. - """ - from email.parser import BytesParser - return BytesParser(*args, **kws).parse(fp) diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index e81a01b615aef87a6b5568cc443ee63a44f6c88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1941 zcmc&#&2Jnv6t{O~XVY;h-L_B;NHLJMnN7OeB&$ME1)@j@B%sl#&1qC?cGjDnX1=h! zD(NZW1UHU7_SoL|Q+5@hs=o3MK+@iM_HJkriQdwV<Tuaud-i+3_u-{8@AwG5U+aIS zA2tyB%S;Zw+Kkz60keZbq);1$-fgUKh%X{l3u{1~&;ja(F3@^d{{#h%hhKh0t2o(; zH#r@Y0(c?QVsn`e<D#Eg4j8)03oc>>bIS8L&1lZ01RdE<@PQ5Rufup3A$R|#HRB!% z@ptH3TsiY-!}$np;11fT-NG(fH<HJ`4b+{T1%}lg7VBUNr!kdEn0wPgl`#8ZdND0~ z_j#gdUiNv`_Wj$HO3Nb7C`+<fN@|QYiXajT4sJ=w`xH)4Lr(3<f+l4FBBMl=qU}G$ z+MBKijy`RjY#T7R5H1+1=j;UJ16O0I-B@f&?QA`ec3T>m%dKUq^RGXT?t+$#;yxEE zH*Q>u9+YA$szhlFmQj+Gqkb=z{AyaH3W!v3mT_@)C0gHB!?IXg>9Q{S`LpZn4$rGB zR-CE4ioQ>Kku@t~%xE&!uD130Ss>UzlsTJ1B?uTZ4?}(oWCy+UQGMY#Y5v|Fllez$ z6EgpdEKbPcljbg28oNvTAcamWj>@76k?U<MF5g@<$t`o=K}dy3I03ndv~MG6tqEKK zm4w8cA*T)`{tKos1*gv)f!OMaCTv`RaR}kyIeGt)J0=T{oe5cZMmiJH`2+8g)v>!O zPJ`@;A^c0o<30d9NHeGxNPO!cO_ek$u6O~=30IGBz`?+oqHOD>ZjFFqsST<__?o?A z_%@H=Yn%}8fmFvx{(k~rnvhG6d%GkUyTQrA``ZlOURuOr`>mpU<`Bvzm&JLr;ED@| ze{B+fa0KM3E6iej5p+L=aR}?<soa{7)|1s;(jL2Qi}jB|Q~RceUGL^;&UGUhnpUaw z94`{+$U<rl8fOWAf53U)=7P|tX3t0|v^RvD<*<}0^RO7n#>_+;ePPV9jm*}XcI`dh z>>&TAQCW%9uGL2>&1B%|24np)VazblQ5k!s{_4o5$T~2s?75rpe2g;wg;<2!%;O_3 l1Nqy*82{rV{0-i7&k=8@v3JeG%X?=%yk<!21(1$C=U;GO`8NOn diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/_encoded_words.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/_encoded_words.cpython-314.pyc deleted file mode 100644 index 65a11a4b7c164a5087ffc21f840594a69e9ff975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8603 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%0Ae1|W%}ykjo%V@k7Q||yVF3=K?0`7zD7lLY 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 L-@fet$SMC{P}H9p diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/_parseaddr.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/_parseaddr.cpython-314.pyc deleted file mode 100644 index 02810ba18ddcaea6cc57ac70a2ef3c409089b592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23958 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 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/_policybase.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/_policybase.cpython-314.pyc deleted file mode 100644 index b7032fa15b6c20e8c7389bc8e7f2058db41a34ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18700 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 aLcfUP_!?iZS1$+sN~H071Ai1^@cuvQ711I9 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/base64mime.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/base64mime.cpython-314.pyc deleted file mode 100644 index 7d631173e08afc70411fad256ff5f3c176ea75bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4076 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 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/charset.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/charset.cpython-314.pyc deleted file mode 100644 index 22d7db389ec69a5c7f5923517c395a1c8a0a2bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15113 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 P8q-e4o*j-#wh#UrsZJy{ diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/encoders.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/encoders.cpython-314.pyc deleted file mode 100644 index a0a4f60f840d4bd19a13150fb5ae6c02a0b2e791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2161 zcmbtVPfy%N6rWjpy=J{^NLxYDl42DCEQAfv6@<_>NeK#(Du~?8o~&ACJ%HO?dower z1@*AarJx=_Y7ZPLHCH}C&;16epc1uGDN?@x1u9iJ_06pLE09ukq<Qwtym|BH{oe0Q zf3`V|psgf-^YbZ${uG15mWY4$r{JfKEW}YBSxqyT<Ij+VA10<0u67{!PdrRcX*|_| zETs)`-BLj|SxJy-O9N?GDUcaU??k!uvN;))L(dQ9ndt_eNlC@!#53m>gEIHSfaP;I zGKkP2vrC*X7-kwn#wlzo<3kVOn}n`F-@gl@j_jkg5;$z((fATIT*8lp-kD}4ETs_Z zfOBdQ4r_X{7;?hhS+*~%nM~~aaCk76h?<>~jzlR+Y8AIkU<I>Cfi)&<b(>Lj;<o*m z5z1`WBXnqNY|#EPq+i%I8h%d7oZ00{xaiHgj12gJ&p|NmRw{%J4B3yC_(B-GKU8oE z&R4faoFb{hDV#XGTC+d#XKhk-{fgc2gtB~XDbk%M@h}7DzX_dnfT*Jv>9!60thk-- zt53W%vTNh3<Li8*v}JTXSG)E>1)Ud7b-ylmm(Zi5cnaM{v#^yIjpu9FK8mU>u#l~U z3-S7KbZZH)1}S#7l@f=#kUlD)mh1)<O9M1g%ig3+1CuWhvq~6q=SdGUYwl7dbUo7# z%#R_0BZYiAeXqj88>Z`dkW;2xgE-fy4?#00!hn;24-}~zusH~@Gzn>BE)aoDK3&|z zk>(MRZ&A`^W#5l9fy_wZ)zu4kPv_Lgm?zwcorx4kPQYQdfkR}l<F!pCQmSk|QbX#` zM=8+oT<*%W>NZVkz<s0U#y+QUFl~pqtI*jvh&tL$qs*nXJF9n|b*<dlGJ5LwUt}-; z(7RFiKL4y|E8ACpu%o8Fo%v>F{lT`{zSDEFKJi@d+)}$}GweSFu?iCanYv$*mj4^X z$G}QBj{pZ#aXSU40&uDl&LqI8EeA68<YG7_^Sl9oE&%>j$o~YEUIMR{Th3agf*{j5 zg}wz}Di}lCgt!9Yd{n>!_(b0Yg)X5~0C7Glt?T@|;4B<tuK~x8(&X#FQNnXNLhUEn zqI9Bn&;=DvJC|Ru!$h`72H7;^!9&oFfP<-G%)x6=&O4Eh#+7Tx$2om@>{G%eb{DcD z=9I}pb9C0{W=PFj@XZ$`64Q|?W@Y&4WjHrd#p)ptEn+6~IPe7%Cn*hSE<pte=-VLT z%GzK{HfGCcNQDL32?{rbk^`cSM5Q}PmYtOG^y`=XLo3SjOwX@+@9%ncS4$>`cl6Af zv1$Nm^!8mH-58b%TYB$52Pu@fa)2=C#M`#@-dzR8ub4=xpDvH0pIh!3$}edQ@)W~F z>5~l8q%#(V+)peU_d_!X`2tj){PZTuVR<zsl)D?3ir+jZ2qD=7Ywkjq*M5p5kD=zs zo671SHDpHSnxmBCcwyOb#1A|pjziyoy;M9#v=v08#ThJ$H5FC3k@lj@NE;2i;!t{B z2vIf~Ug;lHLvOJ{KB9dvC){PjARrbP|CL6#XHQKUT0Ql53&Q<>pus&&!PoaPIv(6> S)$#4U)+`=Acn{-NY4cwkg6Nk3 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/errors.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/errors.cpython-314.pyc deleted file mode 100644 index 032a4ed0e98b078b49e40d33959fe4b20de8e828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7652 zcma)BTT>jz6`t8$(1Jh$iK~R9(S@712n5DLk}U&5w-T5_5>CqC&Fsz~#u{dDPp=S) zU8Scaen}~BJnGSU%TJLVCvmo%%0vEu6X7U%%lS^v3<E2#cdO>m^L5Y6ce+oX{<;}B z)L5_4?{_tSc9srn+COm<{c6L)>wHSno@tAk)LOOE+M?dBEv8oV@wBR!DMr(TW>!)$ znr5_y(At%BjAj@;Kxj6B)-YN}X#GlRrFJ|MzWD&-2MKRTygAEgBcX>9XdR=632j=b zkH2@2(Pl!AtQ?Hd21bt(+LAyU8EqxBErA|lw4Kn71bUd!PC}0*&?ZKY6WWzPn^&6U z5w1BwH764_M;SdusF6Th7(GqsnFQL(=vhL~CD1lTy9w<{pzVzI655wQI~eUJ^n3#C zWORVg!IjRqhmJ8iMCfn=J<jL_LPrv47o($uUQD1T7#$;YJb|8M^c_Mc66mSLch745 zm!2B-y6L#ahFN%IKC}({Nx|Nbj_(--*9-zX7%oJyiNAVy^ZFPSo@pzZ)G0<&pJZiv zQJ0y;l&o1y(|a?ehB-S3=#8^N_~Plnv>DjymBy+s3>#=*IG!Qb=%Yyr!!Nb@m$jvA zF6Wu+b}m<{&*j#AtLUQKkjs5mG~KY~a4xs%h(NlIXL~+XAIRk_zd(i7TrQBNbP73B zO5x;-(hhPtfgpbk7fO$2E-ya_Y!NJ*mMumnCr6eyeeq~{L-?QC1sN<CT)$}LiS>}< zIg$*$&vk7vG`hU7CD(j!Y;-&~o_lg>B6r_j-*8Q7=j8gv@?9st%>FDZABQ)#1ZFLp zEWTeu<~Q2kGw+Co2(PM-8_N2)Iqc&FQv_j0_w4KFbu|h!z9MkEhhfJLb5G0*P~oDY z(umup$belCksVPjP+1k(rZTckw`_EEf@>GYhOxQkxOPl%javnk7#;yb7_f=Evqv!m zUKPWZGKP)Qe$lf`v87`6?2KP@Ew5J^tBz+G(iZEEM=?dcm=7CPV%Z9oFfDY&{Wzpp z0<Vf?M;XhGxuPo_8c#XndygrCX|gK9eY=1meZw@?qn3sf7!=uSPTrBWRf%;wSi^MC z75D8$#Ts~3th>rsH_WUdNTp(WV#+fdnoSQ)*C?n8W77<bht6Z$t3(fJN5FK^6?bZ{ zq6fSxdPW(&FgQOF)IW;ip5WXh9OGU^aDteCF;F-P!_yql9&%{{@OyokjH#J=BAs^2 zberbuoKiDO+L*qWYS-MXt0TS2+9h2cSkkWOGE1qprqmdwf$R1vrLL#Oz7#-l5GDbO z8w?jnTf{%mpexHXt`dnQ-KKffr7g!z?xmKrUr{1h(#OO6e@gqP$&25zsGZeb>ht~S zQcY0Yumy5Ak|yQh3{o>yWCGh=6=&&{rMg^>mln#<_;ydvGr@W13@Y39xH25Qr;qA_ z<7EE(O#ANO;cpHe|GuI5%bQ;}bZy`Nw&BcoEgiqF<8JQP`6I%hwlC`h<dir7gUl=H zU?9E(J|+&5DK&?5ET<p~w(An<#t>4sFH@o$4I>l{i95Xi-~&bdB;E#th5<6r|9(rW z<KHsp-(=D?oo_TUDhkl3Kv(?xsRebYEJTmb`%!+n?Zr7D9P{a^c#x@copqb?m2c#2 zBbfwf6*SgN%kZcsOkha6w8~O$t2FC|h^~Oa70<f6$|Yb`xinJl(mhFOEb?mJmp4Ew zbZOu|DTBxvT6~4vWsO|n*_8Z9OwbdRxL*Kwm=P2X!SH+pR2A*9a@sSlAJ{)Zdv?lr z3t6T)XkY|9U$W>a_(IshhVNO(EF?EbAVtGc$)QoW05e8coS{EdUIDMltBEqN&fb8O zQj7FmnzgqBT23hI6=})yy>L*j?8X@)$utUyHU=iUK||xnfYwZUTbMApqLNSJ@Cjyu zt~kJEl~2H{@@cZnrxSBdK+>#WTeGxOy8ec({0qIgHf8ia@SG<@tHNLJjmRRnc)TKc zy6#vODHMN|{8cM}k$3&Vqe>pZ5dkwvS3F9$l}Es<^5|-rM+SKWA*cM9_N}dZHs-MO zMd;KlPa-uIn~q$=bazQqA<9T<kq{=WPs2o#hH47FOIkl~lPIU~b4~Bj&khzm5-?X$ zxCp~D3Q$#EO_h0dI?iXey~n0-OiwO3K56RR$fL1}ma!-)ygkE_Q$aBgeH0j*HhJ~4 zDdGxTfSE$!T^M!<P*o0HFLP)Jez=Ym`-Qn=d-A?8y<pWAvtGf+h(u!sJ*1xC8AUA( z88$WSuq`Vjl28T>7<NqwbtkdBRtm@W;1tYt6n4i9P*pD8EOW8#foIv|g_(El=`9MY z(3cSvn(T*33BfY*s3pp#B#<OEr$Abp_;K5+uot-owlFv8if7SfH9Wwp;(n)$`>}9% zpp+)Y7fdTL78kJTn;2K!PV58wvmy<F%}b|=apKHfkTk2jhjOg~{b|sLxkFc+)+QBw z;8oF|E2Dp64}B<Wvp`FDGy?Bc@&IyMwdP@<9eCK<bT`(_ye%vE!@&bHm-OeR@&|ZT z{w$RF)49i=yWFi|G>upCC7Lp7AdJ3IgANLe@%{=f+#r?$W+Caq`^p92dt89X!|ydR z_CAgNU{|B>D)hJLb2<vyv*?_f-g^`huPIij&Lc^P50mQF=!`J?8VVTdJfX_dq{=fI zoenPP7qq3+w4TvUY0%=Ve*076G(E#gw?8A!QMr^c#lxVKdbBB6sM5n)&-uZm{%%cD zjpg?*s9}IDE6MNgvyERK_$J%2eePAZ`^A}Wv)!ui@G{X0a~`eHbCEp01r+81Y7+9e z|4l}(>G@G3qh5kWdj=rti~Z+KAD6|@(J+RR4m=$Qa}jNSA-gyw560^VcAEiZAxQ^d z6%QQd;Q-9XDC}xTKvmKGq>Sz{#VlOS7b(X$!nT%7w`f1@n~G!x=gjpYgp~OhVxBxG zs!Zhho?Ri%5#9pk6BMwSS3L}959K(-v6}A-ar37_yj_#Eiy7L4(iW6AqIJ9xJu>fm z3&Qav)`V~ZUz)l%bNe>$^24;_7iHjBHm_l3P;i`~jp!MJ);v0d<Q4nvyHqS)`{qFv zyHhnI(z`RFbcp&d7k@YCPxA~B_t8;2Inq?xyEml`*naQg8DdfEpp8s4L%yaNa`M}3 z-*+bm|B^k<eP4)znVMnCt+w5lsDOk1g=8&S&~Hgwh=xZ2Y@<y$b-Dg@0!m=jcU^xI z0#9`|`L^4q2{F6IXKR;@Uw_e`D%FzYTQ?=UOxxyj^zHy0dU#KZqtrkO+6^CjtJ_?+ zhG)9SJkx$i>CMgmXm0;Q+ji!!9Rpu?4E(8i@Q1WsH_X1%2hg?s^*^&EN2cL@x#&Zw zAEqpyECPiw=?ZWt6>hhuf6Sz6hTddTHN*eb$f%G<%RM0<_4NLv;+D<QmJjoR@6z^o zPgaQ(PLYnsjbMwy{Ry;;Ytjrh{O}1<J;vgV8RMO?ix(@*Q_d(bE?wdS7}lPEsv_-| zk#45}<2bnM7fg47gm5?&`)Jc*x;aSWNSz@sdPDoCXa&A2U<l)*u$xx^RmE49@of$> z_jNi#51Dp{d3%kvVnvS#2goP}{o^27@-1pyfo2ZuU?g3!^17h<7WjO>!6!kby4mPI z9_pCB2~Qq@!Gc$+yT7%eP6YW>l+Padc&}8?$(j!f`Rs=eNcg0IcjvsF<sBgJl}fF1 zri&S8Tgh1BZ3hc;mbokz#dUn0g$mX~UU)c_bIc2l7#;?8GJ_@@GL7Jyy{i6K^1iU> z7Lgu&N|t7#uK%lE(|dPnb$#Ob<c>yvcCxxYy4`^CD9XLB+WT<Ri<{wBE#0^o#?9FF z=U@F2cVoEgdwvz=K7Qu;=jxIATD|l6ogIz->@?~6oc>}66>~a&QQb_Syb#tbaLo<< zD{gm#@9yX?=J3=VzN403;BG<xp;qghe5JMSWKj22W3tU3`3d#5E88omx`OXqesKcj z%P8Lp-+PPSd+i0k;Mz`oM(=t4-i}6pb{eQdwg>S9vmATTh4R==ZJj>6O=bGC(?+k} ZX5aY>W81E3Q?KhI+YSGr_Uiv6{|8i7fE@q; diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/feedparser.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/feedparser.cpython-314.pyc deleted file mode 100644 index a85052c1bcff6e6bd80e20582f8d44de329a6807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21099 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 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/header.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/header.cpython-314.pyc deleted file mode 100644 index 0ff38f48961fa2922b44a3533ae168f13c5c4af5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25617 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 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/iterators.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/iterators.cpython-314.pyc deleted file mode 100644 index 61ed8400c2e499704e35927d8491b93b2e1c4ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2968 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 diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/message.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/message.cpython-314.pyc deleted file mode 100644 index 41f0fa62aeb1466682b7fcfaec1e3ac201bdaffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52525 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 Qu`+5-0G?h4q`<BQ06Q4FQ2+n{ diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/parser.cpython-314.pyc deleted file mode 100644 index 510b2f7cf062ccee9ab37e45c18dd3aecf48078e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6670 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 Ps{5qb+`phcQo?@#j2WX( diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/quoprimime.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/quoprimime.cpython-314.pyc deleted file mode 100644 index d54df0dd675f53172bfa041ba26646310c1d3cee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10425 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 T&)@QpP&@m7kB`dE5dMDv0p6}e diff --git a/Python314_4_x86_Template/Lib/email/__pycache__/utils.cpython-314.pyc b/Python314_4_x86_Template/Lib/email/__pycache__/utils.cpython-314.pyc deleted file mode 100644 index f51b64c37e970e912f12702f967264853554798f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17013 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 diff --git a/Python314_4_x86_Template/Lib/email/_encoded_words.py b/Python314_4_x86_Template/Lib/email/_encoded_words.py deleted file mode 100644 index 05a34a4c1..000000000 --- a/Python314_4_x86_Template/Lib/email/_encoded_words.py +++ /dev/null @@ -1,233 +0,0 @@ -""" Routines for manipulating RFC2047 encoded words. - -This is currently a package-private API, but will be considered for promotion -to a public API if there is demand. - -""" - -# An ecoded word looks like this: -# -# =?charset[*lang]?cte?encoded_string?= -# -# for more information about charset see the charset module. Here it is one -# of the preferred MIME charset names (hopefully; you never know when parsing). -# cte (Content Transfer Encoding) is either 'q' or 'b' (ignoring case). In -# theory other letters could be used for other encodings, but in practice this -# (almost?) never happens. There could be a public API for adding entries -# to the CTE tables, but YAGNI for now. 'q' is Quoted Printable, 'b' is -# Base64. The meaning of encoded_string should be obvious. 'lang' is optional -# as indicated by the brackets (they are not part of the syntax) but is almost -# never encountered in practice. -# -# The general interface for a CTE decoder is that it takes the encoded_string -# as its argument, and returns a tuple (cte_decoded_string, defects). The -# cte_decoded_string is the original binary that was encoded using the -# specified cte. 'defects' is a list of MessageDefect instances indicating any -# problems encountered during conversion. 'charset' and 'lang' are the -# corresponding strings extracted from the EW, case preserved. -# -# The general interface for a CTE encoder is that it takes a binary sequence -# as input and returns the cte_encoded_string, which is an ascii-only string. -# -# Each decoder must also supply a length function that takes the binary -# sequence as its argument and returns the length of the resulting encoded -# string. -# -# The main API functions for the module are decode, which calls the decoder -# referenced by the cte specifier, and encode, which adds the appropriate -# RFC 2047 "chrome" to the encoded string, and can optionally automatically -# select the shortest possible encoding. See their docstrings below for -# details. - -import re -import base64 -import binascii -import functools -from string import ascii_letters, digits -from email import errors - -__all__ = ['decode_q', - 'encode_q', - 'decode_b', - 'encode_b', - 'len_q', - 'len_b', - 'decode', - 'encode', - ] - -# -# Quoted Printable -# - -# regex based decoder. -_q_byte_subber = functools.partial(re.compile(br'=([a-fA-F0-9]{2})').sub, - lambda m: bytes.fromhex(m.group(1).decode())) - -def decode_q(encoded): - encoded = encoded.replace(b'_', b' ') - return _q_byte_subber(encoded), [] - - -# dict mapping bytes to their encoded form -class _QByteMap(dict): - - safe = b'-!*+/' + ascii_letters.encode('ascii') + digits.encode('ascii') - - def __missing__(self, key): - if key in self.safe: - self[key] = chr(key) - else: - self[key] = "={:02X}".format(key) - return self[key] - -_q_byte_map = _QByteMap() - -# In headers spaces are mapped to '_'. -_q_byte_map[ord(' ')] = '_' - -def encode_q(bstring): - return ''.join(_q_byte_map[x] for x in bstring) - -def len_q(bstring): - return sum(len(_q_byte_map[x]) for x in bstring) - - -# -# Base64 -# - -def decode_b(encoded): - # First try encoding with validate=True, fixing the padding if needed. - # This will succeed only if encoded includes no invalid characters. - pad_err = len(encoded) % 4 - missing_padding = b'==='[:4-pad_err] if pad_err else b'' - try: - return ( - base64.b64decode(encoded + missing_padding, validate=True), - [errors.InvalidBase64PaddingDefect()] if pad_err else [], - ) - except binascii.Error: - # Since we had correct padding, this is likely an invalid char error. - # - # The non-alphabet characters are ignored as far as padding - # goes, but we don't know how many there are. So try without adding - # padding to see if it works. - try: - return ( - base64.b64decode(encoded, validate=False), - [errors.InvalidBase64CharactersDefect()], - ) - except binascii.Error: - # Add as much padding as could possibly be necessary (extra padding - # is ignored). - try: - return ( - base64.b64decode(encoded + b'==', validate=False), - [errors.InvalidBase64CharactersDefect(), - errors.InvalidBase64PaddingDefect()], - ) - except binascii.Error: - # This only happens when the encoded string's length is 1 more - # than a multiple of 4, which is invalid. - # - # bpo-27397: Just return the encoded string since there's no - # way to decode. - return encoded, [errors.InvalidBase64LengthDefect()] - -def encode_b(bstring): - return base64.b64encode(bstring).decode('ascii') - -def len_b(bstring): - groups_of_3, leftover = divmod(len(bstring), 3) - # 4 bytes out for each 3 bytes (or nonzero fraction thereof) in. - return groups_of_3 * 4 + (4 if leftover else 0) - - -_cte_decoders = { - 'q': decode_q, - 'b': decode_b, - } - -def decode(ew): - """Decode encoded word and return (string, charset, lang, defects) tuple. - - An RFC 2047/2243 encoded word has the form: - - =?charset*lang?cte?encoded_string?= - - where '*lang' may be omitted but the other parts may not be. - - This function expects exactly such a string (that is, it does not check the - syntax and may raise errors if the string is not well formed), and returns - the encoded_string decoded first from its Content Transfer Encoding and - then from the resulting bytes into unicode using the specified charset. If - the cte-decoded string does not successfully decode using the specified - character set, a defect is added to the defects list and the unknown octets - are replaced by the unicode 'unknown' character \\uFDFF. - - The specified charset and language are returned. The default for language, - which is rarely if ever encountered, is the empty string. - - """ - _, charset, cte, cte_string, _ = ew.split('?') - charset, _, lang = charset.partition('*') - cte = cte.lower() - # Recover the original bytes and do CTE decoding. - bstring = cte_string.encode('ascii', 'surrogateescape') - bstring, defects = _cte_decoders[cte](bstring) - # Turn the CTE decoded bytes into unicode. - try: - string = bstring.decode(charset) - except UnicodeDecodeError: - defects.append(errors.UndecodableBytesDefect("Encoded word " - f"contains bytes not decodable using {charset!r} charset")) - string = bstring.decode(charset, 'surrogateescape') - except (LookupError, UnicodeEncodeError): - string = bstring.decode('ascii', 'surrogateescape') - if charset.lower() != 'unknown-8bit': - defects.append(errors.CharsetError(f"Unknown charset {charset!r} " - f"in encoded word; decoded as unknown bytes")) - return string, charset, lang, defects - - -_cte_encoders = { - 'q': encode_q, - 'b': encode_b, - } - -_cte_encode_length = { - 'q': len_q, - 'b': len_b, - } - -def encode(string, charset='utf-8', encoding=None, lang=''): - """Encode string using the CTE encoding that produces the shorter result. - - Produces an RFC 2047/2243 encoded word of the form: - - =?charset*lang?cte?encoded_string?= - - where '*lang' is omitted unless the 'lang' parameter is given a value. - Optional argument charset (defaults to utf-8) specifies the charset to use - to encode the string to binary before CTE encoding it. Optional argument - 'encoding' is the cte specifier for the encoding that should be used ('q' - or 'b'); if it is None (the default) the encoding which produces the - shortest encoded sequence is used, except that 'q' is preferred if it is up - to five characters longer. Optional argument 'lang' (default '') gives the - RFC 2243 language string to specify in the encoded word. - - """ - if charset == 'unknown-8bit': - bstring = string.encode('utf-8', 'surrogateescape') - else: - bstring = string.encode(charset) - if encoding is None: - qlen = _cte_encode_length['q'](bstring) - blen = _cte_encode_length['b'](bstring) - # Bias toward q. 5 is arbitrary. - encoding = 'q' if qlen - blen < 5 else 'b' - encoded = _cte_encoders[encoding](bstring) - if lang: - lang = '*' + lang - return "=?{}{}?{}?{}?=".format(charset, lang, encoding, encoded) diff --git a/Python314_4_x86_Template/Lib/email/_header_value_parser.py b/Python314_4_x86_Template/Lib/email/_header_value_parser.py deleted file mode 100644 index 03fedd995..000000000 --- a/Python314_4_x86_Template/Lib/email/_header_value_parser.py +++ /dev/null @@ -1,3146 +0,0 @@ -"""Header value parser implementing various email-related RFC parsing rules. - -The parsing methods defined in this module implement various email related -parsing rules. Principal among them is RFC 5322, which is the followon -to RFC 2822 and primarily a clarification of the former. It also implements -RFC 2047 encoded word decoding. - -RFC 5322 goes to considerable trouble to maintain backward compatibility with -RFC 822 in the parse phase, while cleaning up the structure on the generation -phase. This parser supports correct RFC 5322 generation by tagging white space -as folding white space only when folding is allowed in the non-obsolete rule -sets. Actually, the parser is even more generous when accepting input than RFC -5322 mandates, following the spirit of Postel's Law, which RFC 5322 encourages. -Where possible deviations from the standard are annotated on the 'defects' -attribute of tokens that deviate. - -The general structure of the parser follows RFC 5322, and uses its terminology -where there is a direct correspondence. Where the implementation requires a -somewhat different structure than that used by the formal grammar, new terms -that mimic the closest existing terms are used. Thus, it really helps to have -a copy of RFC 5322 handy when studying this code. - -Input to the parser is a string that has already been unfolded according to -RFC 5322 rules. According to the RFC this unfolding is the very first step, and -this parser leaves the unfolding step to a higher level message parser, which -will have already detected the line breaks that need unfolding while -determining the beginning and end of each header. - -The output of the parser is a TokenList object, which is a list subclass. A -TokenList is a recursive data structure. The terminal nodes of the structure -are Terminal objects, which are subclasses of str. These do not correspond -directly to terminal objects in the formal grammar, but are instead more -practical higher level combinations of true terminals. - -All TokenList and Terminal objects have a 'value' attribute, which produces the -semantically meaningful value of that part of the parse subtree. The value of -all whitespace tokens (no matter how many sub-tokens they may contain) is a -single space, as per the RFC rules. This includes 'CFWS', which is herein -included in the general class of whitespace tokens. There is one exception to -the rule that whitespace tokens are collapsed into single spaces in values: in -the value of a 'bare-quoted-string' (a quoted-string with no leading or -trailing whitespace), any whitespace that appeared between the quotation marks -is preserved in the returned value. Note that in all Terminal strings quoted -pairs are turned into their unquoted values. - -All TokenList and Terminal objects also have a string value, which attempts to -be a "canonical" representation of the RFC-compliant form of the substring that -produced the parsed subtree, including minimal use of quoted pair quoting. -Whitespace runs are not collapsed. - -Comment tokens also have a 'content' attribute providing the string found -between the parens (including any nested comments) with whitespace preserved. - -All TokenList and Terminal objects have a 'defects' attribute which is a -possibly empty list all of the defects found while creating the token. Defects -may appear on any token in the tree, and a composite list of all defects in the -subtree is available through the 'all_defects' attribute of any node. (For -Terminal notes x.defects == x.all_defects.) - -Each object in a parse tree is called a 'token', and each has a 'token_type' -attribute that gives the name from the RFC 5322 grammar that it represents. -Not all RFC 5322 nodes are produced, and there is one non-RFC 5322 node that -may be produced: 'ptext'. A 'ptext' is a string of printable ascii characters. -It is returned in place of lists of (ctext/quoted-pair) and -(qtext/quoted-pair). - -XXX: provide complete list of token types. -""" - -import re -import sys -import urllib # For urllib.parse.unquote -from string import hexdigits -from operator import itemgetter -from email import _encoded_words as _ew -from email import errors -from email import utils - -# -# Useful constants and functions -# - -_WSP = ' \t' -WSP = set(_WSP) -CFWS_LEADER = WSP | set('(') -SPECIALS = set(r'()<>@,:;.\"[]') -ATOM_ENDS = SPECIALS | WSP -DOT_ATOM_ENDS = ATOM_ENDS - set('.') -# '.', '"', and '(' do not end phrases in order to support obs-phrase -PHRASE_ENDS = SPECIALS - set('."(') -TSPECIALS = (SPECIALS | set('/?=')) - set('.') -TOKEN_ENDS = TSPECIALS | WSP -ASPECIALS = TSPECIALS | set("*'%") -ATTRIBUTE_ENDS = ASPECIALS | WSP -EXTENDED_ATTRIBUTE_ENDS = ATTRIBUTE_ENDS - set('%') -NLSET = {'\n', '\r'} -SPECIALSNL = SPECIALS | NLSET - - -def make_quoted_pairs(value): - """Escape dquote and backslash for use within a quoted-string.""" - return str(value).replace('\\', '\\\\').replace('"', '\\"') - - -def make_parenthesis_pairs(value): - """Escape parenthesis and backslash for use within a comment.""" - return str(value).replace('\\', '\\\\') \ - .replace('(', '\\(').replace(')', '\\)') - - -def quote_string(value): - escaped = make_quoted_pairs(value) - return f'"{escaped}"' - - -# Match a RFC 2047 word, looks like =?utf-8?q?someword?= -rfc2047_matcher = re.compile(r''' - =\? # literal =? - [^?]* # charset - \? # literal ? - [qQbB] # literal 'q' or 'b', case insensitive - \? # literal ? - .*? # encoded word - \?= # literal ?= -''', re.VERBOSE | re.MULTILINE) - - -# -# TokenList and its subclasses -# - -class TokenList(list): - - token_type = None - syntactic_break = True - ew_combine_allowed = True - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - self.defects = [] - - def __str__(self): - return ''.join(str(x) for x in self) - - def __repr__(self): - return '{}({})'.format(self.__class__.__name__, - super().__repr__()) - - @property - def value(self): - return ''.join(x.value for x in self if x.value) - - @property - def all_defects(self): - return sum((x.all_defects for x in self), self.defects) - - def startswith_fws(self): - return self[0].startswith_fws() - - @property - def as_ew_allowed(self): - """True if all top level tokens of this part may be RFC2047 encoded.""" - return all(part.as_ew_allowed for part in self) - - @property - def comments(self): - comments = [] - for token in self: - comments.extend(token.comments) - return comments - - def fold(self, *, policy): - return _refold_parse_tree(self, policy=policy) - - def pprint(self, indent=''): - print(self.ppstr(indent=indent)) - - def ppstr(self, indent=''): - return '\n'.join(self._pp(indent=indent)) - - def _pp(self, indent=''): - yield '{}{}/{}('.format( - indent, - self.__class__.__name__, - self.token_type) - for token in self: - if not hasattr(token, '_pp'): - yield (indent + ' !! invalid element in token ' - 'list: {!r}'.format(token)) - else: - yield from token._pp(indent+' ') - if self.defects: - extra = ' Defects: {}'.format(self.defects) - else: - extra = '' - yield '{}){}'.format(indent, extra) - - -class WhiteSpaceTokenList(TokenList): - - @property - def value(self): - return ' ' - - @property - def comments(self): - return [x.content for x in self if x.token_type=='comment'] - - -class UnstructuredTokenList(TokenList): - token_type = 'unstructured' - - -class Phrase(TokenList): - token_type = 'phrase' - -class Word(TokenList): - token_type = 'word' - - -class CFWSList(WhiteSpaceTokenList): - token_type = 'cfws' - - -class Atom(TokenList): - token_type = 'atom' - - -class Token(TokenList): - token_type = 'token' - encode_as_ew = False - - -class EncodedWord(TokenList): - token_type = 'encoded-word' - cte = None - charset = None - lang = None - - -class QuotedString(TokenList): - - token_type = 'quoted-string' - - @property - def content(self): - for x in self: - if x.token_type == 'bare-quoted-string': - return x.value - - @property - def quoted_value(self): - res = [] - for x in self: - if x.token_type == 'bare-quoted-string': - res.append(str(x)) - else: - res.append(x.value) - return ''.join(res) - - @property - def stripped_value(self): - for token in self: - if token.token_type == 'bare-quoted-string': - return token.value - - -class BareQuotedString(QuotedString): - - token_type = 'bare-quoted-string' - - def __str__(self): - return quote_string(''.join(str(x) for x in self)) - - @property - def value(self): - return ''.join(str(x) for x in self) - - -class Comment(WhiteSpaceTokenList): - - token_type = 'comment' - - def __str__(self): - return ''.join(sum([ - ["("], - [self.quote(x) for x in self], - [")"], - ], [])) - - def quote(self, value): - if value.token_type == 'comment': - return str(value) - return str(value).replace('\\', '\\\\').replace( - '(', r'\(').replace( - ')', r'\)') - - @property - def content(self): - return ''.join(str(x) for x in self) - - @property - def comments(self): - return [self.content] - -class AddressList(TokenList): - - token_type = 'address-list' - - @property - def addresses(self): - return [x for x in self if x.token_type=='address'] - - @property - def mailboxes(self): - return sum((x.mailboxes - for x in self if x.token_type=='address'), []) - - @property - def all_mailboxes(self): - return sum((x.all_mailboxes - for x in self if x.token_type=='address'), []) - - -class Address(TokenList): - - token_type = 'address' - - @property - def display_name(self): - if self[0].token_type == 'group': - return self[0].display_name - - @property - def mailboxes(self): - if self[0].token_type == 'mailbox': - return [self[0]] - elif self[0].token_type == 'invalid-mailbox': - return [] - return self[0].mailboxes - - @property - def all_mailboxes(self): - if self[0].token_type == 'mailbox': - return [self[0]] - elif self[0].token_type == 'invalid-mailbox': - return [self[0]] - return self[0].all_mailboxes - -class MailboxList(TokenList): - - token_type = 'mailbox-list' - - @property - def mailboxes(self): - return [x for x in self if x.token_type=='mailbox'] - - @property - def all_mailboxes(self): - return [x for x in self - if x.token_type in ('mailbox', 'invalid-mailbox')] - - -class GroupList(TokenList): - - token_type = 'group-list' - - @property - def mailboxes(self): - if not self or self[0].token_type != 'mailbox-list': - return [] - return self[0].mailboxes - - @property - def all_mailboxes(self): - if not self or self[0].token_type != 'mailbox-list': - return [] - return self[0].all_mailboxes - - -class Group(TokenList): - - token_type = "group" - - @property - def mailboxes(self): - if self[2].token_type != 'group-list': - return [] - return self[2].mailboxes - - @property - def all_mailboxes(self): - if self[2].token_type != 'group-list': - return [] - return self[2].all_mailboxes - - @property - def display_name(self): - return self[0].display_name - - -class NameAddr(TokenList): - - token_type = 'name-addr' - - @property - def display_name(self): - if len(self) == 1: - return None - return self[0].display_name - - @property - def local_part(self): - return self[-1].local_part - - @property - def domain(self): - return self[-1].domain - - @property - def route(self): - return self[-1].route - - @property - def addr_spec(self): - return self[-1].addr_spec - - -class AngleAddr(TokenList): - - token_type = 'angle-addr' - - @property - def local_part(self): - for x in self: - if x.token_type == 'addr-spec': - return x.local_part - - @property - def domain(self): - for x in self: - if x.token_type == 'addr-spec': - return x.domain - - @property - def route(self): - for x in self: - if x.token_type == 'obs-route': - return x.domains - - @property - def addr_spec(self): - for x in self: - if x.token_type == 'addr-spec': - if x.local_part: - return x.addr_spec - else: - return quote_string(x.local_part) + x.addr_spec - else: - return '<>' - - -class ObsRoute(TokenList): - - token_type = 'obs-route' - - @property - def domains(self): - return [x.domain for x in self if x.token_type == 'domain'] - - -class Mailbox(TokenList): - - token_type = 'mailbox' - - @property - def display_name(self): - if self[0].token_type == 'name-addr': - return self[0].display_name - - @property - def local_part(self): - return self[0].local_part - - @property - def domain(self): - return self[0].domain - - @property - def route(self): - if self[0].token_type == 'name-addr': - return self[0].route - - @property - def addr_spec(self): - return self[0].addr_spec - - -class InvalidMailbox(TokenList): - - token_type = 'invalid-mailbox' - - @property - def display_name(self): - return None - - local_part = domain = route = addr_spec = display_name - - -class Domain(TokenList): - - token_type = 'domain' - as_ew_allowed = False - - @property - def domain(self): - return ''.join(super().value.split()) - - -class DotAtom(TokenList): - token_type = 'dot-atom' - - -class DotAtomText(TokenList): - token_type = 'dot-atom-text' - as_ew_allowed = True - - -class NoFoldLiteral(TokenList): - token_type = 'no-fold-literal' - as_ew_allowed = False - - -class AddrSpec(TokenList): - - token_type = 'addr-spec' - as_ew_allowed = False - - @property - def local_part(self): - return self[0].local_part - - @property - def domain(self): - if len(self) < 3: - return None - return self[-1].domain - - @property - def value(self): - if len(self) < 3: - return self[0].value - return self[0].value.rstrip()+self[1].value+self[2].value.lstrip() - - @property - def addr_spec(self): - nameset = set(self.local_part) - if len(nameset) > len(nameset-DOT_ATOM_ENDS): - lp = quote_string(self.local_part) - else: - lp = self.local_part - if self.domain is not None: - return lp + '@' + self.domain - return lp - - -class ObsLocalPart(TokenList): - - token_type = 'obs-local-part' - as_ew_allowed = False - - -class DisplayName(Phrase): - - token_type = 'display-name' - ew_combine_allowed = False - - @property - def display_name(self): - res = TokenList(self) - if len(res) == 0: - return res.value - if res[0].token_type == 'cfws': - res.pop(0) - else: - if (isinstance(res[0], TokenList) and - res[0][0].token_type == 'cfws'): - res[0] = TokenList(res[0][1:]) - if res[-1].token_type == 'cfws': - res.pop() - else: - if (isinstance(res[-1], TokenList) and - res[-1][-1].token_type == 'cfws'): - res[-1] = TokenList(res[-1][:-1]) - return res.value - - @property - def value(self): - quote = False - if self.defects: - quote = True - else: - for x in self: - if x.token_type == 'quoted-string': - quote = True - if len(self) != 0 and quote: - pre = post = '' - if (self[0].token_type == 'cfws' or - isinstance(self[0], TokenList) and - self[0][0].token_type == 'cfws'): - pre = ' ' - if (self[-1].token_type == 'cfws' or - isinstance(self[-1], TokenList) and - self[-1][-1].token_type == 'cfws'): - post = ' ' - return pre+quote_string(self.display_name)+post - else: - return super().value - - -class LocalPart(TokenList): - - token_type = 'local-part' - as_ew_allowed = False - - @property - def value(self): - if self[0].token_type == "quoted-string": - return self[0].quoted_value - else: - return self[0].value - - @property - def local_part(self): - # Strip whitespace from front, back, and around dots. - res = [DOT] - last = DOT - last_is_tl = False - for tok in self[0] + [DOT]: - if tok.token_type == 'cfws': - continue - if (last_is_tl and tok.token_type == 'dot' and - last[-1].token_type == 'cfws'): - res[-1] = TokenList(last[:-1]) - is_tl = isinstance(tok, TokenList) - if (is_tl and last.token_type == 'dot' and - tok[0].token_type == 'cfws'): - res.append(TokenList(tok[1:])) - else: - res.append(tok) - last = res[-1] - last_is_tl = is_tl - res = TokenList(res[1:-1]) - return res.value - - -class DomainLiteral(TokenList): - - token_type = 'domain-literal' - as_ew_allowed = False - - @property - def domain(self): - return ''.join(super().value.split()) - - @property - def ip(self): - for x in self: - if x.token_type == 'ptext': - return x.value - - -class MIMEVersion(TokenList): - - token_type = 'mime-version' - major = None - minor = None - - -class Parameter(TokenList): - - token_type = 'parameter' - sectioned = False - extended = False - charset = 'us-ascii' - - @property - def section_number(self): - # Because the first token, the attribute (name) eats CFWS, the second - # token is always the section if there is one. - return self[1].number if self.sectioned else 0 - - @property - def param_value(self): - # This is part of the "handle quoted extended parameters" hack. - for token in self: - if token.token_type == 'value': - return token.stripped_value - if token.token_type == 'quoted-string': - for token in token: - if token.token_type == 'bare-quoted-string': - for token in token: - if token.token_type == 'value': - return token.stripped_value - return '' - - -class InvalidParameter(Parameter): - - token_type = 'invalid-parameter' - - -class Attribute(TokenList): - - token_type = 'attribute' - - @property - def stripped_value(self): - for token in self: - if token.token_type.endswith('attrtext'): - return token.value - -class Section(TokenList): - - token_type = 'section' - number = None - - -class Value(TokenList): - - token_type = 'value' - - @property - def stripped_value(self): - token = self[0] - if token.token_type == 'cfws': - token = self[1] - if token.token_type.endswith( - ('quoted-string', 'attribute', 'extended-attribute')): - return token.stripped_value - return self.value - - -class MimeParameters(TokenList): - - token_type = 'mime-parameters' - syntactic_break = False - - @property - def params(self): - # The RFC specifically states that the ordering of parameters is not - # guaranteed and may be reordered by the transport layer. So we have - # to assume the RFC 2231 pieces can come in any order. However, we - # output them in the order that we first see a given name, which gives - # us a stable __str__. - params = {} # Using order preserving dict from Python 3.7+ - for token in self: - if not token.token_type.endswith('parameter'): - continue - if token[0].token_type != 'attribute': - continue - name = token[0].value.strip() - if name not in params: - params[name] = [] - params[name].append((token.section_number, token)) - for name, parts in params.items(): - parts = sorted(parts, key=itemgetter(0)) - first_param = parts[0][1] - charset = first_param.charset - # Our arbitrary error recovery is to ignore duplicate parameters, - # to use appearance order if there are duplicate rfc 2231 parts, - # and to ignore gaps. This mimics the error recovery of get_param. - if not first_param.extended and len(parts) > 1: - if parts[1][0] == 0: - parts[1][1].defects.append(errors.InvalidHeaderDefect( - 'duplicate parameter name; duplicate(s) ignored')) - parts = parts[:1] - # Else assume the *0* was missing...note that this is different - # from get_param, but we registered a defect for this earlier. - value_parts = [] - i = 0 - for section_number, param in parts: - if section_number != i: - # We could get fancier here and look for a complete - # duplicate extended parameter and ignore the second one - # seen. But we're not doing that. The old code didn't. - if not param.extended: - param.defects.append(errors.InvalidHeaderDefect( - 'duplicate parameter name; duplicate ignored')) - continue - else: - param.defects.append(errors.InvalidHeaderDefect( - "inconsistent RFC2231 parameter numbering")) - i += 1 - value = param.param_value - if param.extended: - try: - value = urllib.parse.unquote_to_bytes(value) - except UnicodeEncodeError: - # source had surrogate escaped bytes. What we do now - # is a bit of an open question. I'm not sure this is - # the best choice, but it is what the old algorithm did - value = urllib.parse.unquote(value, encoding='latin-1') - else: - try: - value = value.decode(charset, 'surrogateescape') - except (LookupError, UnicodeEncodeError): - # XXX: there should really be a custom defect for - # unknown character set to make it easy to find, - # because otherwise unknown charset is a silent - # failure. - value = value.decode('us-ascii', 'surrogateescape') - if utils._has_surrogates(value): - param.defects.append(errors.UndecodableBytesDefect()) - value_parts.append(value) - value = ''.join(value_parts) - yield name, value - - def __str__(self): - params = [] - for name, value in self.params: - if value: - params.append('{}={}'.format(name, quote_string(value))) - else: - params.append(name) - params = '; '.join(params) - return ' ' + params if params else '' - - -class ParameterizedHeaderValue(TokenList): - - # Set this false so that the value doesn't wind up on a new line even - # if it and the parameters would fit there but not on the first line. - syntactic_break = False - - @property - def params(self): - for token in reversed(self): - if token.token_type == 'mime-parameters': - return token.params - return {} - - -class ContentType(ParameterizedHeaderValue): - token_type = 'content-type' - as_ew_allowed = False - maintype = 'text' - subtype = 'plain' - - -class ContentDisposition(ParameterizedHeaderValue): - token_type = 'content-disposition' - as_ew_allowed = False - content_disposition = None - - -class ContentTransferEncoding(TokenList): - token_type = 'content-transfer-encoding' - as_ew_allowed = False - cte = '7bit' - - -class HeaderLabel(TokenList): - token_type = 'header-label' - as_ew_allowed = False - - -class MsgID(TokenList): - token_type = 'msg-id' - as_ew_allowed = False - - def fold(self, policy): - # message-id tokens may not be folded. - return str(self) + policy.linesep - - -class MessageID(MsgID): - token_type = 'message-id' - - -class InvalidMessageID(MessageID): - token_type = 'invalid-message-id' - -class MessageIDList(TokenList): - token_type = 'message-id-list' - - @property - def message_ids(self): - return [x for x in self if x.token_type=='msg-id'] - -class Header(TokenList): - token_type = 'header' - - -# -# Terminal classes and instances -# - -class Terminal(str): - - as_ew_allowed = True - ew_combine_allowed = True - syntactic_break = True - - def __new__(cls, value, token_type): - self = super().__new__(cls, value) - self.token_type = token_type - self.defects = [] - return self - - def __repr__(self): - return "{}({})".format(self.__class__.__name__, super().__repr__()) - - def pprint(self): - print(self.__class__.__name__ + '/' + self.token_type) - - @property - def all_defects(self): - return list(self.defects) - - def _pp(self, indent=''): - return ["{}{}/{}({}){}".format( - indent, - self.__class__.__name__, - self.token_type, - super().__repr__(), - '' if not self.defects else ' {}'.format(self.defects), - )] - - def pop_trailing_ws(self): - # This terminates the recursion. - return None - - @property - def comments(self): - return [] - - def __getnewargs__(self): - return(str(self), self.token_type) - - -class WhiteSpaceTerminal(Terminal): - - @property - def value(self): - return ' ' - - def startswith_fws(self): - return self and self[0] in WSP - - -class ValueTerminal(Terminal): - - @property - def value(self): - return self - - def startswith_fws(self): - return False - - -class EWWhiteSpaceTerminal(WhiteSpaceTerminal): - - @property - def value(self): - return '' - - def __str__(self): - return '' - - -class _InvalidEwError(errors.HeaderParseError): - """Invalid encoded word found while parsing headers.""" - - -# XXX these need to become classes and used as instances so -# that a program can't change them in a parse tree and screw -# up other parse trees. Maybe should have tests for that, too. -DOT = ValueTerminal('.', 'dot') -ListSeparator = ValueTerminal(',', 'list-separator') -ListSeparator.as_ew_allowed = False -ListSeparator.syntactic_break = False -RouteComponentMarker = ValueTerminal('@', 'route-component-marker') - -# -# Parser -# - -# Parse strings according to RFC822/2047/2822/5322 rules. -# -# This is a stateless parser. Each get_XXX function accepts a string and -# returns either a Terminal or a TokenList representing the RFC object named -# by the method and a string containing the remaining unparsed characters -# from the input. Thus a parser method consumes the next syntactic construct -# of a given type and returns a token representing the construct plus the -# unparsed remainder of the input string. -# -# For example, if the first element of a structured header is a 'phrase', -# then: -# -# phrase, value = get_phrase(value) -# -# returns the complete phrase from the start of the string value, plus any -# characters left in the string after the phrase is removed. - -_wsp_splitter = re.compile(r'([{}]+)'.format(''.join(WSP))).split -_non_atom_end_matcher = re.compile(r"[^{}]+".format( - re.escape(''.join(ATOM_ENDS)))).match -_non_printable_finder = re.compile(r"[\x00-\x20\x7F]").findall -_non_token_end_matcher = re.compile(r"[^{}]+".format( - re.escape(''.join(TOKEN_ENDS)))).match -_non_attribute_end_matcher = re.compile(r"[^{}]+".format( - re.escape(''.join(ATTRIBUTE_ENDS)))).match -_non_extended_attribute_end_matcher = re.compile(r"[^{}]+".format( - re.escape(''.join(EXTENDED_ATTRIBUTE_ENDS)))).match - -def _validate_xtext(xtext): - """If input token contains ASCII non-printables, register a defect.""" - - non_printables = _non_printable_finder(xtext) - if non_printables: - xtext.defects.append(errors.NonPrintableDefect(non_printables)) - if utils._has_surrogates(xtext): - xtext.defects.append(errors.UndecodableBytesDefect( - "Non-ASCII characters found in header token")) - -def _get_ptext_to_endchars(value, endchars): - """Scan printables/quoted-pairs until endchars and return unquoted ptext. - - This function turns a run of qcontent, ccontent-without-comments, or - dtext-with-quoted-printables into a single string by unquoting any - quoted printables. It returns the string, the remaining value, and - a flag that is True iff there were any quoted printables decoded. - - """ - if not value: - return '', '', False - fragment, *remainder = _wsp_splitter(value, 1) - vchars = [] - escape = False - had_qp = False - for pos in range(len(fragment)): - if fragment[pos] == '\\': - if escape: - escape = False - had_qp = True - else: - escape = True - continue - if escape: - escape = False - elif fragment[pos] in endchars: - break - vchars.append(fragment[pos]) - else: - pos = pos + 1 - return ''.join(vchars), ''.join([fragment[pos:]] + remainder), had_qp - -def get_fws(value): - """FWS = 1*WSP - - This isn't the RFC definition. We're using fws to represent tokens where - folding can be done, but when we are parsing the *un*folding has already - been done so we don't need to watch out for CRLF. - - """ - newvalue = value.lstrip() - fws = WhiteSpaceTerminal(value[:len(value)-len(newvalue)], 'fws') - return fws, newvalue - -def get_encoded_word(value, terminal_type='vtext'): - """ encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" - - """ - ew = EncodedWord() - if not value.startswith('=?'): - raise errors.HeaderParseError( - "expected encoded word but found {}".format(value)) - tok, *remainder = value[2:].split('?=', 1) - if tok == value[2:]: - raise errors.HeaderParseError( - "expected encoded word but found {}".format(value)) - remstr = ''.join(remainder) - if (len(remstr) > 1 and - remstr[0] in hexdigits and - remstr[1] in hexdigits and - tok.count('?') < 2): - # The ? after the CTE was followed by an encoded word escape (=XX). - rest, *remainder = remstr.split('?=', 1) - tok = tok + '?=' + rest - if len(tok.split()) > 1: - ew.defects.append(errors.InvalidHeaderDefect( - "whitespace inside encoded word")) - ew.cte = value - value = ''.join(remainder) - try: - text, charset, lang, defects = _ew.decode('=?' + tok + '?=') - except (ValueError, KeyError): - raise _InvalidEwError( - "encoded word format invalid: '{}'".format(ew.cte)) - ew.charset = charset - ew.lang = lang - ew.defects.extend(defects) - while text: - if text[0] in WSP: - token, text = get_fws(text) - ew.append(token) - continue - chars, *remainder = _wsp_splitter(text, 1) - vtext = ValueTerminal(chars, terminal_type) - _validate_xtext(vtext) - ew.append(vtext) - text = ''.join(remainder) - # Encoded words should be followed by a WS - if value and value[0] not in WSP: - ew.defects.append(errors.InvalidHeaderDefect( - "missing trailing whitespace after encoded-word")) - return ew, value - -def get_unstructured(value): - """unstructured = (*([FWS] vchar) *WSP) / obs-unstruct - obs-unstruct = *((*LF *CR *(obs-utext) *LF *CR)) / FWS) - obs-utext = %d0 / obs-NO-WS-CTL / LF / CR - - obs-NO-WS-CTL is control characters except WSP/CR/LF. - - So, basically, we have printable runs, plus control characters or nulls in - the obsolete syntax, separated by whitespace. Since RFC 2047 uses the - obsolete syntax in its specification, but requires whitespace on either - side of the encoded words, I can see no reason to need to separate the - non-printable-non-whitespace from the printable runs if they occur, so we - parse this into xtext tokens separated by WSP tokens. - - Because an 'unstructured' value must by definition constitute the entire - value, this 'get' routine does not return a remaining value, only the - parsed TokenList. - - """ - # XXX: but what about bare CR and LF? They might signal the start or - # end of an encoded word. YAGNI for now, since our current parsers - # will never send us strings with bare CR or LF. - - unstructured = UnstructuredTokenList() - while value: - if value[0] in WSP: - token, value = get_fws(value) - unstructured.append(token) - continue - valid_ew = True - if value.startswith('=?'): - try: - token, value = get_encoded_word(value, 'utext') - except _InvalidEwError: - valid_ew = False - except errors.HeaderParseError: - # XXX: Need to figure out how to register defects when - # appropriate here. - pass - else: - have_ws = True - if len(unstructured) > 0: - if unstructured[-1].token_type != 'fws': - unstructured.defects.append(errors.InvalidHeaderDefect( - "missing whitespace before encoded word")) - have_ws = False - if have_ws and len(unstructured) > 1: - if unstructured[-2].token_type == 'encoded-word': - unstructured[-1] = EWWhiteSpaceTerminal( - unstructured[-1], 'fws') - unstructured.append(token) - continue - tok, *remainder = _wsp_splitter(value, 1) - # Split in the middle of an atom if there is a rfc2047 encoded word - # which does not have WSP on both sides. The defect will be registered - # the next time through the loop. - # This needs to only be performed when the encoded word is valid; - # otherwise, performing it on an invalid encoded word can cause - # the parser to go in an infinite loop. - if valid_ew and rfc2047_matcher.search(tok): - tok, *remainder = value.partition('=?') - vtext = ValueTerminal(tok, 'utext') - _validate_xtext(vtext) - unstructured.append(vtext) - value = ''.join(remainder) - return unstructured - -def get_qp_ctext(value): - r"""ctext = <printable ascii except \ ( )> - - This is not the RFC ctext, since we are handling nested comments in comment - and unquoting quoted-pairs here. We allow anything except the '()' - characters, but if we find any ASCII other than the RFC defined printable - ASCII, a NonPrintableDefect is added to the token's defects list. Since - quoted pairs are converted to their unquoted values, what is returned is - a 'ptext' token. In this case it is a WhiteSpaceTerminal, so it's value - is ' '. - - """ - ptext, value, _ = _get_ptext_to_endchars(value, '()') - ptext = WhiteSpaceTerminal(ptext, 'ptext') - _validate_xtext(ptext) - return ptext, value - -def get_qcontent(value): - """qcontent = qtext / quoted-pair - - We allow anything except the DQUOTE character, but if we find any ASCII - other than the RFC defined printable ASCII, a NonPrintableDefect is - added to the token's defects list. Any quoted pairs are converted to their - unquoted values, so what is returned is a 'ptext' token. In this case it - is a ValueTerminal. - - """ - ptext, value, _ = _get_ptext_to_endchars(value, '"') - ptext = ValueTerminal(ptext, 'ptext') - _validate_xtext(ptext) - return ptext, value - -def get_atext(value): - """atext = <matches _atext_matcher> - - We allow any non-ATOM_ENDS in atext, but add an InvalidATextDefect to - the token's defects list if we find non-atext characters. - """ - m = _non_atom_end_matcher(value) - if not m: - raise errors.HeaderParseError( - "expected atext but found '{}'".format(value)) - atext = m.group() - value = value[len(atext):] - atext = ValueTerminal(atext, 'atext') - _validate_xtext(atext) - return atext, value - -def get_bare_quoted_string(value): - """bare-quoted-string = DQUOTE *([FWS] qcontent) [FWS] DQUOTE - - A quoted-string without the leading or trailing white space. Its - value is the text between the quote marks, with whitespace - preserved and quoted pairs decoded. - """ - if not value or value[0] != '"': - raise errors.HeaderParseError( - "expected '\"' but found '{}'".format(value)) - bare_quoted_string = BareQuotedString() - value = value[1:] - if value and value[0] == '"': - token, value = get_qcontent(value) - bare_quoted_string.append(token) - while value and value[0] != '"': - if value[0] in WSP: - token, value = get_fws(value) - elif value[:2] == '=?': - valid_ew = False - try: - token, value = get_encoded_word(value) - bare_quoted_string.defects.append(errors.InvalidHeaderDefect( - "encoded word inside quoted string")) - valid_ew = True - except errors.HeaderParseError: - token, value = get_qcontent(value) - # Collapse the whitespace between two encoded words that occur in a - # bare-quoted-string. - if valid_ew and len(bare_quoted_string) > 1: - if (bare_quoted_string[-1].token_type == 'fws' and - bare_quoted_string[-2].token_type == 'encoded-word'): - bare_quoted_string[-1] = EWWhiteSpaceTerminal( - bare_quoted_string[-1], 'fws') - else: - token, value = get_qcontent(value) - bare_quoted_string.append(token) - if not value: - bare_quoted_string.defects.append(errors.InvalidHeaderDefect( - "end of header inside quoted string")) - return bare_quoted_string, value - return bare_quoted_string, value[1:] - -def get_comment(value): - """comment = "(" *([FWS] ccontent) [FWS] ")" - ccontent = ctext / quoted-pair / comment - - We handle nested comments here, and quoted-pair in our qp-ctext routine. - """ - if value and value[0] != '(': - raise errors.HeaderParseError( - "expected '(' but found '{}'".format(value)) - comment = Comment() - value = value[1:] - while value and value[0] != ")": - if value[0] in WSP: - token, value = get_fws(value) - elif value[0] == '(': - token, value = get_comment(value) - else: - token, value = get_qp_ctext(value) - comment.append(token) - if not value: - comment.defects.append(errors.InvalidHeaderDefect( - "end of header inside comment")) - return comment, value - return comment, value[1:] - -def get_cfws(value): - """CFWS = (1*([FWS] comment) [FWS]) / FWS - - """ - cfws = CFWSList() - while value and value[0] in CFWS_LEADER: - if value[0] in WSP: - token, value = get_fws(value) - else: - token, value = get_comment(value) - cfws.append(token) - return cfws, value - -def get_quoted_string(value): - """quoted-string = [CFWS] <bare-quoted-string> [CFWS] - - 'bare-quoted-string' is an intermediate class defined by this - parser and not by the RFC grammar. It is the quoted string - without any attached CFWS. - """ - quoted_string = QuotedString() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - quoted_string.append(token) - token, value = get_bare_quoted_string(value) - quoted_string.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - quoted_string.append(token) - return quoted_string, value - -def get_atom(value): - """atom = [CFWS] 1*atext [CFWS] - - An atom could be an rfc2047 encoded word. - """ - atom = Atom() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - atom.append(token) - if value and value[0] in ATOM_ENDS: - raise errors.HeaderParseError( - "expected atom but found '{}'".format(value)) - if value.startswith('=?'): - try: - token, value = get_encoded_word(value) - except errors.HeaderParseError: - # XXX: need to figure out how to register defects when - # appropriate here. - token, value = get_atext(value) - else: - token, value = get_atext(value) - atom.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - atom.append(token) - return atom, value - -def get_dot_atom_text(value): - """ dot-text = 1*atext *("." 1*atext) - - """ - dot_atom_text = DotAtomText() - if not value or value[0] in ATOM_ENDS: - raise errors.HeaderParseError("expected atom at a start of " - "dot-atom-text but found '{}'".format(value)) - while value and value[0] not in ATOM_ENDS: - token, value = get_atext(value) - dot_atom_text.append(token) - if value and value[0] == '.': - dot_atom_text.append(DOT) - value = value[1:] - if dot_atom_text[-1] is DOT: - raise errors.HeaderParseError("expected atom at end of dot-atom-text " - "but found '{}'".format('.'+value)) - return dot_atom_text, value - -def get_dot_atom(value): - """ dot-atom = [CFWS] dot-atom-text [CFWS] - - Any place we can have a dot atom, we could instead have an rfc2047 encoded - word. - """ - dot_atom = DotAtom() - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - dot_atom.append(token) - if value.startswith('=?'): - try: - token, value = get_encoded_word(value) - except errors.HeaderParseError: - # XXX: need to figure out how to register defects when - # appropriate here. - token, value = get_dot_atom_text(value) - else: - token, value = get_dot_atom_text(value) - dot_atom.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - dot_atom.append(token) - return dot_atom, value - -def get_word(value): - """word = atom / quoted-string - - Either atom or quoted-string may start with CFWS. We have to peel off this - CFWS first to determine which type of word to parse. Afterward we splice - the leading CFWS, if any, into the parsed sub-token. - - If neither an atom or a quoted-string is found before the next special, a - HeaderParseError is raised. - - The token returned is either an Atom or a QuotedString, as appropriate. - This means the 'word' level of the formal grammar is not represented in the - parse tree; this is because having that extra layer when manipulating the - parse tree is more confusing than it is helpful. - - """ - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - else: - leader = None - if not value: - raise errors.HeaderParseError( - "Expected 'atom' or 'quoted-string' but found nothing.") - if value[0]=='"': - token, value = get_quoted_string(value) - elif value[0] in SPECIALS: - raise errors.HeaderParseError("Expected 'atom' or 'quoted-string' " - "but found '{}'".format(value)) - else: - token, value = get_atom(value) - if leader is not None: - token[:0] = [leader] - return token, value - -def get_phrase(value): - """ phrase = 1*word / obs-phrase - obs-phrase = word *(word / "." / CFWS) - - This means a phrase can be a sequence of words, periods, and CFWS in any - order as long as it starts with at least one word. If anything other than - words is detected, an ObsoleteHeaderDefect is added to the token's defect - list. We also accept a phrase that starts with CFWS followed by a dot; - this is registered as an InvalidHeaderDefect, since it is not supported by - even the obsolete grammar. - - """ - phrase = Phrase() - try: - token, value = get_word(value) - phrase.append(token) - except errors.HeaderParseError: - phrase.defects.append(errors.InvalidHeaderDefect( - "phrase does not start with word")) - while value and value[0] not in PHRASE_ENDS: - if value[0]=='.': - phrase.append(DOT) - phrase.defects.append(errors.ObsoleteHeaderDefect( - "period in 'phrase'")) - value = value[1:] - else: - try: - token, value = get_word(value) - except errors.HeaderParseError: - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - phrase.defects.append(errors.ObsoleteHeaderDefect( - "comment found without atom")) - else: - raise - phrase.append(token) - return phrase, value - -def get_local_part(value): - """ local-part = dot-atom / quoted-string / obs-local-part - - """ - local_part = LocalPart() - leader = None - if value and value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - raise errors.HeaderParseError( - "expected local-part but found '{}'".format(value)) - try: - token, value = get_dot_atom(value) - except errors.HeaderParseError: - try: - token, value = get_word(value) - except errors.HeaderParseError: - if value[0] != '\\' and value[0] in PHRASE_ENDS: - raise - token = TokenList() - if leader is not None: - token[:0] = [leader] - local_part.append(token) - if value and (value[0]=='\\' or value[0] not in PHRASE_ENDS): - obs_local_part, value = get_obs_local_part(str(local_part) + value) - if obs_local_part.token_type == 'invalid-obs-local-part': - local_part.defects.append(errors.InvalidHeaderDefect( - "local-part is not dot-atom, quoted-string, or obs-local-part")) - else: - local_part.defects.append(errors.ObsoleteHeaderDefect( - "local-part is not a dot-atom (contains CFWS)")) - local_part[0] = obs_local_part - try: - local_part.value.encode('ascii') - except UnicodeEncodeError: - local_part.defects.append(errors.NonASCIILocalPartDefect( - "local-part contains non-ASCII characters)")) - return local_part, value - -def get_obs_local_part(value): - """ obs-local-part = word *("." word) - """ - obs_local_part = ObsLocalPart() - last_non_ws_was_dot = False - while value and (value[0]=='\\' or value[0] not in PHRASE_ENDS): - if value[0] == '.': - if last_non_ws_was_dot: - obs_local_part.defects.append(errors.InvalidHeaderDefect( - "invalid repeated '.'")) - obs_local_part.append(DOT) - last_non_ws_was_dot = True - value = value[1:] - continue - elif value[0]=='\\': - obs_local_part.append(ValueTerminal(value[0], - 'misplaced-special')) - value = value[1:] - obs_local_part.defects.append(errors.InvalidHeaderDefect( - "'\\' character outside of quoted-string/ccontent")) - last_non_ws_was_dot = False - continue - if obs_local_part and obs_local_part[-1].token_type != 'dot': - obs_local_part.defects.append(errors.InvalidHeaderDefect( - "missing '.' between words")) - try: - token, value = get_word(value) - last_non_ws_was_dot = False - except errors.HeaderParseError: - if value[0] not in CFWS_LEADER: - raise - token, value = get_cfws(value) - obs_local_part.append(token) - if not obs_local_part: - raise errors.HeaderParseError( - "expected obs-local-part but found '{}'".format(value)) - if (obs_local_part[0].token_type == 'dot' or - obs_local_part[0].token_type=='cfws' and - len(obs_local_part) > 1 and - obs_local_part[1].token_type=='dot'): - obs_local_part.defects.append(errors.InvalidHeaderDefect( - "Invalid leading '.' in local part")) - if (obs_local_part[-1].token_type == 'dot' or - obs_local_part[-1].token_type=='cfws' and - len(obs_local_part) > 1 and - obs_local_part[-2].token_type=='dot'): - obs_local_part.defects.append(errors.InvalidHeaderDefect( - "Invalid trailing '.' in local part")) - if obs_local_part.defects: - obs_local_part.token_type = 'invalid-obs-local-part' - return obs_local_part, value - -def get_dtext(value): - r""" dtext = <printable ascii except \ [ ]> / obs-dtext - obs-dtext = obs-NO-WS-CTL / quoted-pair - - We allow anything except the excluded characters, but if we find any - ASCII other than the RFC defined printable ASCII, a NonPrintableDefect is - added to the token's defects list. Quoted pairs are converted to their - unquoted values, so what is returned is a ptext token, in this case a - ValueTerminal. If there were quoted-printables, an ObsoleteHeaderDefect is - added to the returned token's defect list. - - """ - ptext, value, had_qp = _get_ptext_to_endchars(value, '[]') - ptext = ValueTerminal(ptext, 'ptext') - if had_qp: - ptext.defects.append(errors.ObsoleteHeaderDefect( - "quoted printable found in domain-literal")) - _validate_xtext(ptext) - return ptext, value - -def _check_for_early_dl_end(value, domain_literal): - if value: - return False - domain_literal.defects.append(errors.InvalidHeaderDefect( - "end of input inside domain-literal")) - domain_literal.append(ValueTerminal(']', 'domain-literal-end')) - return True - -def get_domain_literal(value): - """ domain-literal = [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS] - - """ - domain_literal = DomainLiteral() - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - domain_literal.append(token) - if not value: - raise errors.HeaderParseError("expected domain-literal") - if value[0] != '[': - raise errors.HeaderParseError("expected '[' at start of domain-literal " - "but found '{}'".format(value)) - value = value[1:] - domain_literal.append(ValueTerminal('[', 'domain-literal-start')) - if _check_for_early_dl_end(value, domain_literal): - return domain_literal, value - if value[0] in WSP: - token, value = get_fws(value) - domain_literal.append(token) - token, value = get_dtext(value) - domain_literal.append(token) - if _check_for_early_dl_end(value, domain_literal): - return domain_literal, value - if value[0] in WSP: - token, value = get_fws(value) - domain_literal.append(token) - if _check_for_early_dl_end(value, domain_literal): - return domain_literal, value - if value[0] != ']': - raise errors.HeaderParseError("expected ']' at end of domain-literal " - "but found '{}'".format(value)) - domain_literal.append(ValueTerminal(']', 'domain-literal-end')) - value = value[1:] - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - domain_literal.append(token) - return domain_literal, value - -def get_domain(value): - """ domain = dot-atom / domain-literal / obs-domain - obs-domain = atom *("." atom)) - - """ - domain = Domain() - leader = None - if value and value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - raise errors.HeaderParseError( - "expected domain but found '{}'".format(value)) - if value[0] == '[': - token, value = get_domain_literal(value) - if leader is not None: - token[:0] = [leader] - domain.append(token) - return domain, value - try: - token, value = get_dot_atom(value) - except errors.HeaderParseError: - token, value = get_atom(value) - if value and value[0] == '@': - raise errors.HeaderParseError('Invalid Domain') - if leader is not None: - token[:0] = [leader] - domain.append(token) - if value and value[0] == '.': - domain.defects.append(errors.ObsoleteHeaderDefect( - "domain is not a dot-atom (contains CFWS)")) - if domain[0].token_type == 'dot-atom': - domain[:] = domain[0] - while value and value[0] == '.': - domain.append(DOT) - token, value = get_atom(value[1:]) - domain.append(token) - return domain, value - -def get_addr_spec(value): - """ addr-spec = local-part "@" domain - - """ - addr_spec = AddrSpec() - token, value = get_local_part(value) - addr_spec.append(token) - if not value or value[0] != '@': - addr_spec.defects.append(errors.InvalidHeaderDefect( - "addr-spec local part with no domain")) - return addr_spec, value - addr_spec.append(ValueTerminal('@', 'address-at-symbol')) - token, value = get_domain(value[1:]) - addr_spec.append(token) - return addr_spec, value - -def get_obs_route(value): - """ obs-route = obs-domain-list ":" - obs-domain-list = *(CFWS / ",") "@" domain *("," [CFWS] ["@" domain]) - - Returns an obs-route token with the appropriate sub-tokens (that is, - there is no obs-domain-list in the parse tree). - """ - obs_route = ObsRoute() - while value and (value[0]==',' or value[0] in CFWS_LEADER): - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - obs_route.append(token) - elif value[0] == ',': - obs_route.append(ListSeparator) - value = value[1:] - if not value or value[0] != '@': - raise errors.HeaderParseError( - "expected obs-route domain but found '{}'".format(value)) - obs_route.append(RouteComponentMarker) - token, value = get_domain(value[1:]) - obs_route.append(token) - while value and value[0]==',': - obs_route.append(ListSeparator) - value = value[1:] - if not value: - break - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - obs_route.append(token) - if not value: - break - if value[0] == '@': - obs_route.append(RouteComponentMarker) - token, value = get_domain(value[1:]) - obs_route.append(token) - if not value: - raise errors.HeaderParseError("end of header while parsing obs-route") - if value[0] != ':': - raise errors.HeaderParseError( "expected ':' marking end of " - "obs-route but found '{}'".format(value)) - obs_route.append(ValueTerminal(':', 'end-of-obs-route-marker')) - return obs_route, value[1:] - -def get_angle_addr(value): - """ angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr - obs-angle-addr = [CFWS] "<" obs-route addr-spec ">" [CFWS] - - """ - angle_addr = AngleAddr() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - angle_addr.append(token) - if not value or value[0] != '<': - raise errors.HeaderParseError( - "expected angle-addr but found '{}'".format(value)) - angle_addr.append(ValueTerminal('<', 'angle-addr-start')) - value = value[1:] - # Although it is not legal per RFC5322, SMTP uses '<>' in certain - # circumstances. - if value and value[0] == '>': - angle_addr.append(ValueTerminal('>', 'angle-addr-end')) - angle_addr.defects.append(errors.InvalidHeaderDefect( - "null addr-spec in angle-addr")) - value = value[1:] - return angle_addr, value - try: - token, value = get_addr_spec(value) - except errors.HeaderParseError: - try: - token, value = get_obs_route(value) - angle_addr.defects.append(errors.ObsoleteHeaderDefect( - "obsolete route specification in angle-addr")) - except errors.HeaderParseError: - raise errors.HeaderParseError( - "expected addr-spec or obs-route but found '{}'".format(value)) - angle_addr.append(token) - token, value = get_addr_spec(value) - angle_addr.append(token) - if value and value[0] == '>': - value = value[1:] - else: - angle_addr.defects.append(errors.InvalidHeaderDefect( - "missing trailing '>' on angle-addr")) - angle_addr.append(ValueTerminal('>', 'angle-addr-end')) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - angle_addr.append(token) - return angle_addr, value - -def get_display_name(value): - """ display-name = phrase - - Because this is simply a name-rule, we don't return a display-name - token containing a phrase, but rather a display-name token with - the content of the phrase. - - """ - display_name = DisplayName() - token, value = get_phrase(value) - display_name.extend(token[:]) - display_name.defects = token.defects[:] - return display_name, value - - -def get_name_addr(value): - """ name-addr = [display-name] angle-addr - - """ - name_addr = NameAddr() - # Both the optional display name and the angle-addr can start with cfws. - leader = None - if not value: - raise errors.HeaderParseError( - "expected name-addr but found '{}'".format(value)) - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - raise errors.HeaderParseError( - "expected name-addr but found '{}'".format(leader)) - if value[0] != '<': - if value[0] in PHRASE_ENDS: - raise errors.HeaderParseError( - "expected name-addr but found '{}'".format(value)) - token, value = get_display_name(value) - if not value: - raise errors.HeaderParseError( - "expected name-addr but found '{}'".format(token)) - if leader is not None: - if isinstance(token[0], TokenList): - token[0][:0] = [leader] - else: - token[:0] = [leader] - leader = None - name_addr.append(token) - token, value = get_angle_addr(value) - if leader is not None: - token[:0] = [leader] - name_addr.append(token) - return name_addr, value - -def get_mailbox(value): - """ mailbox = name-addr / addr-spec - - """ - # The only way to figure out if we are dealing with a name-addr or an - # addr-spec is to try parsing each one. - mailbox = Mailbox() - try: - token, value = get_name_addr(value) - except errors.HeaderParseError: - try: - token, value = get_addr_spec(value) - except errors.HeaderParseError: - raise errors.HeaderParseError( - "expected mailbox but found '{}'".format(value)) - if any(isinstance(x, errors.InvalidHeaderDefect) - for x in token.all_defects): - mailbox.token_type = 'invalid-mailbox' - mailbox.append(token) - return mailbox, value - -def get_invalid_mailbox(value, endchars): - """ Read everything up to one of the chars in endchars. - - This is outside the formal grammar. The InvalidMailbox TokenList that is - returned acts like a Mailbox, but the data attributes are None. - - """ - invalid_mailbox = InvalidMailbox() - while value and value[0] not in endchars: - if value[0] in PHRASE_ENDS: - invalid_mailbox.append(ValueTerminal(value[0], - 'misplaced-special')) - value = value[1:] - else: - token, value = get_phrase(value) - invalid_mailbox.append(token) - return invalid_mailbox, value - -def get_mailbox_list(value): - """ mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list - obs-mbox-list = *([CFWS] ",") mailbox *("," [mailbox / CFWS]) - - For this routine we go outside the formal grammar in order to improve error - handling. We recognize the end of the mailbox list only at the end of the - value or at a ';' (the group terminator). This is so that we can turn - invalid mailboxes into InvalidMailbox tokens and continue parsing any - remaining valid mailboxes. We also allow all mailbox entries to be null, - and this condition is handled appropriately at a higher level. - - """ - mailbox_list = MailboxList() - while value and value[0] != ';': - try: - token, value = get_mailbox(value) - mailbox_list.append(token) - except errors.HeaderParseError: - leader = None - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value or value[0] in ',;': - mailbox_list.append(leader) - mailbox_list.defects.append(errors.ObsoleteHeaderDefect( - "empty element in mailbox-list")) - else: - token, value = get_invalid_mailbox(value, ',;') - if leader is not None: - token[:0] = [leader] - mailbox_list.append(token) - mailbox_list.defects.append(errors.InvalidHeaderDefect( - "invalid mailbox in mailbox-list")) - elif value[0] == ',': - mailbox_list.defects.append(errors.ObsoleteHeaderDefect( - "empty element in mailbox-list")) - else: - token, value = get_invalid_mailbox(value, ',;') - if leader is not None: - token[:0] = [leader] - mailbox_list.append(token) - mailbox_list.defects.append(errors.InvalidHeaderDefect( - "invalid mailbox in mailbox-list")) - if value and value[0] not in ',;': - # Crap after mailbox; treat it as an invalid mailbox. - # The mailbox info will still be available. - mailbox = mailbox_list[-1] - mailbox.token_type = 'invalid-mailbox' - token, value = get_invalid_mailbox(value, ',;') - mailbox.extend(token) - mailbox_list.defects.append(errors.InvalidHeaderDefect( - "invalid mailbox in mailbox-list")) - if value and value[0] == ',': - mailbox_list.append(ListSeparator) - value = value[1:] - return mailbox_list, value - - -def get_group_list(value): - """ group-list = mailbox-list / CFWS / obs-group-list - obs-group-list = 1*([CFWS] ",") [CFWS] - - """ - group_list = GroupList() - if not value: - group_list.defects.append(errors.InvalidHeaderDefect( - "end of header before group-list")) - return group_list, value - leader = None - if value and value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - # This should never happen in email parsing, since CFWS-only is a - # legal alternative to group-list in a group, which is the only - # place group-list appears. - group_list.defects.append(errors.InvalidHeaderDefect( - "end of header in group-list")) - group_list.append(leader) - return group_list, value - if value[0] == ';': - group_list.append(leader) - return group_list, value - token, value = get_mailbox_list(value) - if len(token.all_mailboxes)==0: - if leader is not None: - group_list.append(leader) - group_list.extend(token) - group_list.defects.append(errors.ObsoleteHeaderDefect( - "group-list with empty entries")) - return group_list, value - if leader is not None: - token[:0] = [leader] - group_list.append(token) - return group_list, value - -def get_group(value): - """ group = display-name ":" [group-list] ";" [CFWS] - - """ - group = Group() - token, value = get_display_name(value) - if not value or value[0] != ':': - raise errors.HeaderParseError("expected ':' at end of group " - "display name but found '{}'".format(value)) - group.append(token) - group.append(ValueTerminal(':', 'group-display-name-terminator')) - value = value[1:] - if value and value[0] == ';': - group.append(ValueTerminal(';', 'group-terminator')) - return group, value[1:] - token, value = get_group_list(value) - group.append(token) - if not value: - group.defects.append(errors.InvalidHeaderDefect( - "end of header in group")) - elif value[0] != ';': - raise errors.HeaderParseError( - "expected ';' at end of group but found {}".format(value)) - group.append(ValueTerminal(';', 'group-terminator')) - value = value[1:] - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - group.append(token) - return group, value - -def get_address(value): - """ address = mailbox / group - - Note that counter-intuitively, an address can be either a single address or - a list of addresses (a group). This is why the returned Address object has - a 'mailboxes' attribute which treats a single address as a list of length - one. When you need to differentiate between to two cases, extract the single - element, which is either a mailbox or a group token. - - """ - # The formal grammar isn't very helpful when parsing an address. mailbox - # and group, especially when allowing for obsolete forms, start off very - # similarly. It is only when you reach one of @, <, or : that you know - # what you've got. So, we try each one in turn, starting with the more - # likely of the two. We could perhaps make this more efficient by looking - # for a phrase and then branching based on the next character, but that - # would be a premature optimization. - address = Address() - try: - token, value = get_group(value) - except errors.HeaderParseError: - try: - token, value = get_mailbox(value) - except errors.HeaderParseError: - raise errors.HeaderParseError( - "expected address but found '{}'".format(value)) - address.append(token) - return address, value - -def get_address_list(value): - """ address_list = (address *("," address)) / obs-addr-list - obs-addr-list = *([CFWS] ",") address *("," [address / CFWS]) - - We depart from the formal grammar here by continuing to parse until the end - of the input, assuming the input to be entirely composed of an - address-list. This is always true in email parsing, and allows us - to skip invalid addresses to parse additional valid ones. - - """ - address_list = AddressList() - while value: - try: - token, value = get_address(value) - address_list.append(token) - except errors.HeaderParseError: - leader = None - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value or value[0] == ',': - address_list.append(leader) - address_list.defects.append(errors.ObsoleteHeaderDefect( - "address-list entry with no content")) - else: - token, value = get_invalid_mailbox(value, ',') - if leader is not None: - token[:0] = [leader] - address_list.append(Address([token])) - address_list.defects.append(errors.InvalidHeaderDefect( - "invalid address in address-list")) - elif value[0] == ',': - address_list.defects.append(errors.ObsoleteHeaderDefect( - "empty element in address-list")) - else: - token, value = get_invalid_mailbox(value, ',') - if leader is not None: - token[:0] = [leader] - address_list.append(Address([token])) - address_list.defects.append(errors.InvalidHeaderDefect( - "invalid address in address-list")) - if value and value[0] != ',': - # Crap after address; treat it as an invalid mailbox. - # The mailbox info will still be available. - mailbox = address_list[-1][0] - mailbox.token_type = 'invalid-mailbox' - token, value = get_invalid_mailbox(value, ',') - mailbox.extend(token) - address_list.defects.append(errors.InvalidHeaderDefect( - "invalid address in address-list")) - if value: # Must be a , at this point. - address_list.append(ListSeparator) - value = value[1:] - return address_list, value - - -def get_no_fold_literal(value): - """ no-fold-literal = "[" *dtext "]" - """ - no_fold_literal = NoFoldLiteral() - if not value: - raise errors.HeaderParseError( - "expected no-fold-literal but found '{}'".format(value)) - if value[0] != '[': - raise errors.HeaderParseError( - "expected '[' at the start of no-fold-literal " - "but found '{}'".format(value)) - no_fold_literal.append(ValueTerminal('[', 'no-fold-literal-start')) - value = value[1:] - token, value = get_dtext(value) - no_fold_literal.append(token) - if not value or value[0] != ']': - raise errors.HeaderParseError( - "expected ']' at the end of no-fold-literal " - "but found '{}'".format(value)) - no_fold_literal.append(ValueTerminal(']', 'no-fold-literal-end')) - return no_fold_literal, value[1:] - -def get_msg_id(value): - """msg-id = [CFWS] "<" id-left '@' id-right ">" [CFWS] - id-left = dot-atom-text / obs-id-left - id-right = dot-atom-text / no-fold-literal / obs-id-right - no-fold-literal = "[" *dtext "]" - """ - msg_id = MsgID() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - msg_id.append(token) - if not value or value[0] != '<': - raise errors.HeaderParseError( - "expected msg-id but found '{}'".format(value)) - msg_id.append(ValueTerminal('<', 'msg-id-start')) - value = value[1:] - # Parse id-left. - try: - token, value = get_dot_atom_text(value) - except errors.HeaderParseError: - try: - # obs-id-left is same as local-part of add-spec. - token, value = get_obs_local_part(value) - msg_id.defects.append(errors.ObsoleteHeaderDefect( - "obsolete id-left in msg-id")) - except errors.HeaderParseError: - raise errors.HeaderParseError( - "expected dot-atom-text or obs-id-left" - " but found '{}'".format(value)) - msg_id.append(token) - if not value or value[0] != '@': - msg_id.defects.append(errors.InvalidHeaderDefect( - "msg-id with no id-right")) - # Even though there is no id-right, if the local part - # ends with `>` let's just parse it too and return - # along with the defect. - if value and value[0] == '>': - msg_id.append(ValueTerminal('>', 'msg-id-end')) - value = value[1:] - return msg_id, value - msg_id.append(ValueTerminal('@', 'address-at-symbol')) - value = value[1:] - # Parse id-right. - try: - token, value = get_dot_atom_text(value) - except errors.HeaderParseError: - try: - token, value = get_no_fold_literal(value) - except errors.HeaderParseError: - try: - token, value = get_domain(value) - msg_id.defects.append(errors.ObsoleteHeaderDefect( - "obsolete id-right in msg-id")) - except errors.HeaderParseError: - raise errors.HeaderParseError( - "expected dot-atom-text, no-fold-literal or obs-id-right" - " but found '{}'".format(value)) - msg_id.append(token) - if value and value[0] == '>': - value = value[1:] - else: - msg_id.defects.append(errors.InvalidHeaderDefect( - "missing trailing '>' on msg-id")) - msg_id.append(ValueTerminal('>', 'msg-id-end')) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - msg_id.append(token) - return msg_id, value - - -def parse_message_id(value): - """message-id = "Message-ID:" msg-id CRLF - """ - message_id = MessageID() - try: - token, value = get_msg_id(value) - message_id.append(token) - except errors.HeaderParseError as ex: - token = get_unstructured(value) - message_id = InvalidMessageID(token) - message_id.defects.append( - errors.InvalidHeaderDefect("Invalid msg-id: {!r}".format(ex))) - else: - # Value after parsing a valid msg_id should be None. - if value: - message_id.defects.append(errors.InvalidHeaderDefect( - "Unexpected {!r}".format(value))) - - return message_id - -def parse_message_ids(value): - """in-reply-to = "In-Reply-To:" 1*msg-id CRLF - references = "References:" 1*msg-id CRLF - """ - message_id_list = MessageIDList() - while value: - if value[0] == ',': - # message id list separated with commas - this is invalid, - # but happens rather frequently in the wild - message_id_list.defects.append( - errors.InvalidHeaderDefect("comma in msg-id list")) - message_id_list.append( - WhiteSpaceTerminal(' ', 'invalid-comma-replacement')) - value = value[1:] - continue - try: - token, value = get_msg_id(value) - message_id_list.append(token) - except errors.HeaderParseError as ex: - token = get_unstructured(value) - message_id_list.append(InvalidMessageID(token)) - message_id_list.defects.append( - errors.InvalidHeaderDefect("Invalid msg-id: {!r}".format(ex))) - break - return message_id_list - -# -# XXX: As I begin to add additional header parsers, I'm realizing we probably -# have two level of parser routines: the get_XXX methods that get a token in -# the grammar, and parse_XXX methods that parse an entire field value. So -# get_address_list above should really be a parse_ method, as probably should -# be get_unstructured. -# - -def parse_mime_version(value): - """ mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS] - - """ - # The [CFWS] is implicit in the RFC 2045 BNF. - # XXX: This routine is a bit verbose, should factor out a get_int method. - mime_version = MIMEVersion() - if not value: - mime_version.defects.append(errors.HeaderMissingRequiredValue( - "Missing MIME version number (eg: 1.0)")) - return mime_version - if value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mime_version.append(token) - if not value: - mime_version.defects.append(errors.HeaderMissingRequiredValue( - "Expected MIME version number but found only CFWS")) - digits = '' - while value and value[0] != '.' and value[0] not in CFWS_LEADER: - digits += value[0] - value = value[1:] - if not digits.isdigit(): - mime_version.defects.append(errors.InvalidHeaderDefect( - "Expected MIME major version number but found {!r}".format(digits))) - mime_version.append(ValueTerminal(digits, 'xtext')) - else: - mime_version.major = int(digits) - mime_version.append(ValueTerminal(digits, 'digits')) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mime_version.append(token) - if not value or value[0] != '.': - if mime_version.major is not None: - mime_version.defects.append(errors.InvalidHeaderDefect( - "Incomplete MIME version; found only major number")) - if value: - mime_version.append(ValueTerminal(value, 'xtext')) - return mime_version - mime_version.append(ValueTerminal('.', 'version-separator')) - value = value[1:] - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mime_version.append(token) - if not value: - if mime_version.major is not None: - mime_version.defects.append(errors.InvalidHeaderDefect( - "Incomplete MIME version; found only major number")) - return mime_version - digits = '' - while value and value[0] not in CFWS_LEADER: - digits += value[0] - value = value[1:] - if not digits.isdigit(): - mime_version.defects.append(errors.InvalidHeaderDefect( - "Expected MIME minor version number but found {!r}".format(digits))) - mime_version.append(ValueTerminal(digits, 'xtext')) - else: - mime_version.minor = int(digits) - mime_version.append(ValueTerminal(digits, 'digits')) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mime_version.append(token) - if value: - mime_version.defects.append(errors.InvalidHeaderDefect( - "Excess non-CFWS text after MIME version")) - mime_version.append(ValueTerminal(value, 'xtext')) - return mime_version - -def get_invalid_parameter(value): - """ Read everything up to the next ';'. - - This is outside the formal grammar. The InvalidParameter TokenList that is - returned acts like a Parameter, but the data attributes are None. - - """ - invalid_parameter = InvalidParameter() - while value and value[0] != ';': - if value[0] in PHRASE_ENDS: - invalid_parameter.append(ValueTerminal(value[0], - 'misplaced-special')) - value = value[1:] - else: - token, value = get_phrase(value) - invalid_parameter.append(token) - return invalid_parameter, value - -def get_ttext(value): - """ttext = <matches _ttext_matcher> - - We allow any non-TOKEN_ENDS in ttext, but add defects to the token's - defects list if we find non-ttext characters. We also register defects for - *any* non-printables even though the RFC doesn't exclude all of them, - because we follow the spirit of RFC 5322. - - """ - m = _non_token_end_matcher(value) - if not m: - raise errors.HeaderParseError( - "expected ttext but found '{}'".format(value)) - ttext = m.group() - value = value[len(ttext):] - ttext = ValueTerminal(ttext, 'ttext') - _validate_xtext(ttext) - return ttext, value - -def get_token(value): - """token = [CFWS] 1*ttext [CFWS] - - The RFC equivalent of ttext is any US-ASCII chars except space, ctls, or - tspecials. We also exclude tabs even though the RFC doesn't. - - The RFC implies the CFWS but is not explicit about it in the BNF. - - """ - mtoken = Token() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mtoken.append(token) - if value and value[0] in TOKEN_ENDS: - raise errors.HeaderParseError( - "expected token but found '{}'".format(value)) - token, value = get_ttext(value) - mtoken.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - mtoken.append(token) - return mtoken, value - -def get_attrtext(value): - """attrtext = 1*(any non-ATTRIBUTE_ENDS character) - - We allow any non-ATTRIBUTE_ENDS in attrtext, but add defects to the - token's defects list if we find non-attrtext characters. We also register - defects for *any* non-printables even though the RFC doesn't exclude all of - them, because we follow the spirit of RFC 5322. - - """ - m = _non_attribute_end_matcher(value) - if not m: - raise errors.HeaderParseError( - "expected attrtext but found {!r}".format(value)) - attrtext = m.group() - value = value[len(attrtext):] - attrtext = ValueTerminal(attrtext, 'attrtext') - _validate_xtext(attrtext) - return attrtext, value - -def get_attribute(value): - """ [CFWS] 1*attrtext [CFWS] - - This version of the BNF makes the CFWS explicit, and as usual we use a - value terminal for the actual run of characters. The RFC equivalent of - attrtext is the token characters, with the subtraction of '*', "'", and '%'. - We include tab in the excluded set just as we do for token. - - """ - attribute = Attribute() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - attribute.append(token) - if value and value[0] in ATTRIBUTE_ENDS: - raise errors.HeaderParseError( - "expected token but found '{}'".format(value)) - token, value = get_attrtext(value) - attribute.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - attribute.append(token) - return attribute, value - -def get_extended_attrtext(value): - """attrtext = 1*(any non-ATTRIBUTE_ENDS character plus '%') - - This is a special parsing routine so that we get a value that - includes % escapes as a single string (which we decode as a single - string later). - - """ - m = _non_extended_attribute_end_matcher(value) - if not m: - raise errors.HeaderParseError( - "expected extended attrtext but found {!r}".format(value)) - attrtext = m.group() - value = value[len(attrtext):] - attrtext = ValueTerminal(attrtext, 'extended-attrtext') - _validate_xtext(attrtext) - return attrtext, value - -def get_extended_attribute(value): - """ [CFWS] 1*extended_attrtext [CFWS] - - This is like the non-extended version except we allow % characters, so that - we can pick up an encoded value as a single string. - - """ - # XXX: should we have an ExtendedAttribute TokenList? - attribute = Attribute() - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - attribute.append(token) - if value and value[0] in EXTENDED_ATTRIBUTE_ENDS: - raise errors.HeaderParseError( - "expected token but found '{}'".format(value)) - token, value = get_extended_attrtext(value) - attribute.append(token) - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - attribute.append(token) - return attribute, value - -def get_section(value): - """ '*' digits - - The formal BNF is more complicated because leading 0s are not allowed. We - check for that and add a defect. We also assume no CFWS is allowed between - the '*' and the digits, though the RFC is not crystal clear on that. - The caller should already have dealt with leading CFWS. - - """ - section = Section() - if not value or value[0] != '*': - raise errors.HeaderParseError("Expected section but found {}".format( - value)) - section.append(ValueTerminal('*', 'section-marker')) - value = value[1:] - if not value or not value[0].isdigit(): - raise errors.HeaderParseError("Expected section number but " - "found {}".format(value)) - digits = '' - while value and value[0].isdigit(): - digits += value[0] - value = value[1:] - if digits[0] == '0' and digits != '0': - section.defects.append(errors.InvalidHeaderDefect( - "section number has an invalid leading 0")) - section.number = int(digits) - section.append(ValueTerminal(digits, 'digits')) - return section, value - - -def get_value(value): - """ quoted-string / attribute - - """ - v = Value() - if not value: - raise errors.HeaderParseError("Expected value but found end of string") - leader = None - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - raise errors.HeaderParseError("Expected value but found " - "only {}".format(leader)) - if value[0] == '"': - token, value = get_quoted_string(value) - else: - token, value = get_extended_attribute(value) - if leader is not None: - token[:0] = [leader] - v.append(token) - return v, value - -def get_parameter(value): - """ attribute [section] ["*"] [CFWS] "=" value - - The CFWS is implied by the RFC but not made explicit in the BNF. This - simplified form of the BNF from the RFC is made to conform with the RFC BNF - through some extra checks. We do it this way because it makes both error - recovery and working with the resulting parse tree easier. - """ - # It is possible CFWS would also be implicitly allowed between the section - # and the 'extended-attribute' marker (the '*') , but we've never seen that - # in the wild and we will therefore ignore the possibility. - param = Parameter() - token, value = get_attribute(value) - param.append(token) - if not value or value[0] == ';': - param.defects.append(errors.InvalidHeaderDefect("Parameter contains " - "name ({}) but no value".format(token))) - return param, value - if value[0] == '*': - try: - token, value = get_section(value) - param.sectioned = True - param.append(token) - except errors.HeaderParseError: - pass - if not value: - raise errors.HeaderParseError("Incomplete parameter") - if value[0] == '*': - param.append(ValueTerminal('*', 'extended-parameter-marker')) - value = value[1:] - param.extended = True - if value[0] != '=': - raise errors.HeaderParseError("Parameter not followed by '='") - param.append(ValueTerminal('=', 'parameter-separator')) - value = value[1:] - if value and value[0] in CFWS_LEADER: - token, value = get_cfws(value) - param.append(token) - remainder = None - appendto = param - if param.extended and value and value[0] == '"': - # Now for some serious hackery to handle the common invalid case of - # double quotes around an extended value. We also accept (with defect) - # a value marked as encoded that isn't really. - qstring, remainder = get_quoted_string(value) - inner_value = qstring.stripped_value - semi_valid = False - if param.section_number == 0: - if inner_value and inner_value[0] == "'": - semi_valid = True - else: - token, rest = get_attrtext(inner_value) - if rest and rest[0] == "'": - semi_valid = True - else: - try: - token, rest = get_extended_attrtext(inner_value) - except: - pass - else: - if not rest: - semi_valid = True - if semi_valid: - param.defects.append(errors.InvalidHeaderDefect( - "Quoted string value for extended parameter is invalid")) - param.append(qstring) - for t in qstring: - if t.token_type == 'bare-quoted-string': - t[:] = [] - appendto = t - break - value = inner_value - else: - remainder = None - param.defects.append(errors.InvalidHeaderDefect( - "Parameter marked as extended but appears to have a " - "quoted string value that is non-encoded")) - if value and value[0] == "'": - token = None - else: - token, value = get_value(value) - if not param.extended or param.section_number > 0: - if not value or value[0] != "'": - appendto.append(token) - if remainder is not None: - assert not value, value - value = remainder - return param, value - param.defects.append(errors.InvalidHeaderDefect( - "Apparent initial-extended-value but attribute " - "was not marked as extended or was not initial section")) - if not value: - # Assume the charset/lang is missing and the token is the value. - param.defects.append(errors.InvalidHeaderDefect( - "Missing required charset/lang delimiters")) - appendto.append(token) - if remainder is None: - return param, value - else: - if token is not None: - for t in token: - if t.token_type == 'extended-attrtext': - break - t.token_type == 'attrtext' - appendto.append(t) - param.charset = t.value - if value[0] != "'": - raise errors.HeaderParseError("Expected RFC2231 char/lang encoding " - "delimiter, but found {!r}".format(value)) - appendto.append(ValueTerminal("'", 'RFC2231-delimiter')) - value = value[1:] - if value and value[0] != "'": - token, value = get_attrtext(value) - appendto.append(token) - param.lang = token.value - if not value or value[0] != "'": - raise errors.HeaderParseError("Expected RFC2231 char/lang encoding " - "delimiter, but found {}".format(value)) - appendto.append(ValueTerminal("'", 'RFC2231-delimiter')) - value = value[1:] - if remainder is not None: - # Treat the rest of value as bare quoted string content. - v = Value() - while value: - if value[0] in WSP: - token, value = get_fws(value) - elif value[0] == '"': - token = ValueTerminal('"', 'DQUOTE') - value = value[1:] - else: - token, value = get_qcontent(value) - v.append(token) - token = v - else: - token, value = get_value(value) - appendto.append(token) - if remainder is not None: - assert not value, value - value = remainder - return param, value - -def parse_mime_parameters(value): - """ parameter *( ";" parameter ) - - That BNF is meant to indicate this routine should only be called after - finding and handling the leading ';'. There is no corresponding rule in - the formal RFC grammar, but it is more convenient for us for the set of - parameters to be treated as its own TokenList. - - This is 'parse' routine because it consumes the remaining value, but it - would never be called to parse a full header. Instead it is called to - parse everything after the non-parameter value of a specific MIME header. - - """ - mime_parameters = MimeParameters() - while value: - try: - token, value = get_parameter(value) - mime_parameters.append(token) - except errors.HeaderParseError: - leader = None - if value[0] in CFWS_LEADER: - leader, value = get_cfws(value) - if not value: - mime_parameters.append(leader) - return mime_parameters - if value[0] == ';': - if leader is not None: - mime_parameters.append(leader) - mime_parameters.defects.append(errors.InvalidHeaderDefect( - "parameter entry with no content")) - else: - token, value = get_invalid_parameter(value) - if leader: - token[:0] = [leader] - mime_parameters.append(token) - mime_parameters.defects.append(errors.InvalidHeaderDefect( - "invalid parameter {!r}".format(token))) - if value and value[0] != ';': - # Junk after the otherwise valid parameter. Mark it as - # invalid, but it will have a value. - param = mime_parameters[-1] - param.token_type = 'invalid-parameter' - token, value = get_invalid_parameter(value) - param.extend(token) - mime_parameters.defects.append(errors.InvalidHeaderDefect( - "parameter with invalid trailing text {!r}".format(token))) - if value: - # Must be a ';' at this point. - mime_parameters.append(ValueTerminal(';', 'parameter-separator')) - value = value[1:] - return mime_parameters - -def _find_mime_parameters(tokenlist, value): - """Do our best to find the parameters in an invalid MIME header - - """ - while value and value[0] != ';': - if value[0] in PHRASE_ENDS: - tokenlist.append(ValueTerminal(value[0], 'misplaced-special')) - value = value[1:] - else: - token, value = get_phrase(value) - tokenlist.append(token) - if not value: - return - tokenlist.append(ValueTerminal(';', 'parameter-separator')) - tokenlist.append(parse_mime_parameters(value[1:])) - -def parse_content_type_header(value): - """ maintype "/" subtype *( ";" parameter ) - - The maintype and substype are tokens. Theoretically they could - be checked against the official IANA list + x-token, but we - don't do that. - """ - ctype = ContentType() - if not value: - ctype.defects.append(errors.HeaderMissingRequiredValue( - "Missing content type specification")) - return ctype - try: - token, value = get_token(value) - except errors.HeaderParseError: - ctype.defects.append(errors.InvalidHeaderDefect( - "Expected content maintype but found {!r}".format(value))) - _find_mime_parameters(ctype, value) - return ctype - ctype.append(token) - # XXX: If we really want to follow the formal grammar we should make - # mantype and subtype specialized TokenLists here. Probably not worth it. - if not value or value[0] != '/': - ctype.defects.append(errors.InvalidHeaderDefect( - "Invalid content type")) - if value: - _find_mime_parameters(ctype, value) - return ctype - ctype.maintype = token.value.strip().lower() - ctype.append(ValueTerminal('/', 'content-type-separator')) - value = value[1:] - try: - token, value = get_token(value) - except errors.HeaderParseError: - ctype.defects.append(errors.InvalidHeaderDefect( - "Expected content subtype but found {!r}".format(value))) - _find_mime_parameters(ctype, value) - return ctype - ctype.append(token) - ctype.subtype = token.value.strip().lower() - if not value: - return ctype - if value[0] != ';': - ctype.defects.append(errors.InvalidHeaderDefect( - "Only parameters are valid after content type, but " - "found {!r}".format(value))) - # The RFC requires that a syntactically invalid content-type be treated - # as text/plain. Perhaps we should postel this, but we should probably - # only do that if we were checking the subtype value against IANA. - del ctype.maintype, ctype.subtype - _find_mime_parameters(ctype, value) - return ctype - ctype.append(ValueTerminal(';', 'parameter-separator')) - ctype.append(parse_mime_parameters(value[1:])) - return ctype - -def parse_content_disposition_header(value): - """ disposition-type *( ";" parameter ) - - """ - disp_header = ContentDisposition() - if not value: - disp_header.defects.append(errors.HeaderMissingRequiredValue( - "Missing content disposition")) - return disp_header - try: - token, value = get_token(value) - except errors.HeaderParseError: - disp_header.defects.append(errors.InvalidHeaderDefect( - "Expected content disposition but found {!r}".format(value))) - _find_mime_parameters(disp_header, value) - return disp_header - disp_header.append(token) - disp_header.content_disposition = token.value.strip().lower() - if not value: - return disp_header - if value[0] != ';': - disp_header.defects.append(errors.InvalidHeaderDefect( - "Only parameters are valid after content disposition, but " - "found {!r}".format(value))) - _find_mime_parameters(disp_header, value) - return disp_header - disp_header.append(ValueTerminal(';', 'parameter-separator')) - disp_header.append(parse_mime_parameters(value[1:])) - return disp_header - -def parse_content_transfer_encoding_header(value): - """ mechanism - - """ - # We should probably validate the values, since the list is fixed. - cte_header = ContentTransferEncoding() - if not value: - cte_header.defects.append(errors.HeaderMissingRequiredValue( - "Missing content transfer encoding")) - return cte_header - try: - token, value = get_token(value) - except errors.HeaderParseError: - cte_header.defects.append(errors.InvalidHeaderDefect( - "Expected content transfer encoding but found {!r}".format(value))) - else: - cte_header.append(token) - cte_header.cte = token.value.strip().lower() - if not value: - return cte_header - while value: - cte_header.defects.append(errors.InvalidHeaderDefect( - "Extra text after content transfer encoding")) - if value[0] in PHRASE_ENDS: - cte_header.append(ValueTerminal(value[0], 'misplaced-special')) - value = value[1:] - else: - token, value = get_phrase(value) - cte_header.append(token) - return cte_header - - -# -# Header folding -# -# Header folding is complex, with lots of rules and corner cases. The -# following code does its best to obey the rules and handle the corner -# cases, but you can be sure there are few bugs:) -# -# This folder generally canonicalizes as it goes, preferring the stringified -# version of each token. The tokens contain information that supports the -# folder, including which tokens can be encoded in which ways. -# -# Folded text is accumulated in a simple list of strings ('lines'), each -# one of which should be less than policy.max_line_length ('maxlen'). -# - -def _steal_trailing_WSP_if_exists(lines): - wsp = '' - if lines and lines[-1] and lines[-1][-1] in WSP: - wsp = lines[-1][-1] - lines[-1] = lines[-1][:-1] - # gh-142006: if the line is now empty, remove it entirely. - if not lines[-1]: - lines.pop() - return wsp - - -def _refold_parse_tree(parse_tree, *, policy): - """Return string of contents of parse_tree folded according to RFC rules. - - """ - # max_line_length 0/None means no limit, ie: infinitely long. - maxlen = policy.max_line_length or sys.maxsize - encoding = 'utf-8' if policy.utf8 else 'us-ascii' - lines = [''] # Folded lines to be output - last_word_is_ew = False - last_ew = None # if there is an encoded word in the last line of lines, - # points to the encoded word's first character - last_charset = None - wrap_as_ew_blocked = 0 - want_encoding = False # This is set to True if we need to encode this part - end_ew_not_allowed = Terminal('', 'wrap_as_ew_blocked') - parts = list(parse_tree) - while parts: - part = parts.pop(0) - if part is end_ew_not_allowed: - wrap_as_ew_blocked -= 1 - continue - tstr = str(part) - if not want_encoding: - if part.token_type in ('ptext', 'vtext'): - # Encode if tstr contains special characters. - want_encoding = not SPECIALSNL.isdisjoint(tstr) - else: - # Encode if tstr contains newlines. - want_encoding = not NLSET.isdisjoint(tstr) - try: - tstr.encode(encoding) - charset = encoding - except UnicodeEncodeError: - if any(isinstance(x, errors.UndecodableBytesDefect) - for x in part.all_defects): - charset = 'unknown-8bit' - else: - # If policy.utf8 is false this should really be taken from a - # 'charset' property on the policy. - charset = 'utf-8' - want_encoding = True - - if part.token_type == 'mime-parameters': - # Mime parameter folding (using RFC2231) is extra special. - _fold_mime_parameters(part, lines, maxlen, encoding) - last_word_is_ew = False - continue - - if want_encoding and not wrap_as_ew_blocked: - if not part.as_ew_allowed: - want_encoding = False - last_ew = None - if part.syntactic_break: - encoded_part = part.fold(policy=policy)[:-len(policy.linesep)] - if policy.linesep not in encoded_part: - # It fits on a single line - if len(encoded_part) > maxlen - len(lines[-1]): - # But not on this one, so start a new one. - newline = _steal_trailing_WSP_if_exists(lines) - # XXX what if encoded_part has no leading FWS? - lines.append(newline) - lines[-1] += encoded_part - last_word_is_ew = False - continue - # Either this is not a major syntactic break, so we don't - # want it on a line by itself even if it fits, or it - # doesn't fit on a line by itself. Either way, fall through - # to unpacking the subparts and wrapping them. - if not hasattr(part, 'encode'): - # It's not a Terminal, do each piece individually. - parts = list(part) + parts - want_encoding = False - continue - elif part.as_ew_allowed: - # It's a terminal, wrap it as an encoded word, possibly - # combining it with previously encoded words if allowed. - if (last_ew is not None and - charset != last_charset and - (last_charset == 'unknown-8bit' or - last_charset == 'utf-8' and charset != 'us-ascii')): - last_ew = None - last_ew = _fold_as_ew( - tstr, - lines, - maxlen, - last_ew, - part.ew_combine_allowed, - charset, - last_word_is_ew, - ) - last_word_is_ew = True - last_charset = charset - want_encoding = False - continue - else: - # It's a terminal which should be kept non-encoded - # (e.g. a ListSeparator). - last_ew = None - want_encoding = False - # fall through - - if len(tstr) <= maxlen - len(lines[-1]): - lines[-1] += tstr - last_word_is_ew = last_word_is_ew and not bool(tstr.strip(_WSP)) - continue - - # This part is too long to fit. The RFC wants us to break at - # "major syntactic breaks", so unless we don't consider this - # to be one, check if it will fit on the next line by itself. - if (part.syntactic_break and - len(tstr) + 1 <= maxlen): - newline = _steal_trailing_WSP_if_exists(lines) - if newline or part.startswith_fws(): - lines.append(newline + tstr) - last_word_is_ew = (last_word_is_ew - and not bool(lines[-1].strip(_WSP))) - last_ew = None - continue - if not hasattr(part, 'encode'): - # It's not a terminal, try folding the subparts. - newparts = list(part) - if part.token_type == 'bare-quoted-string': - # To fold a quoted string we need to create a list of terminal - # tokens that will render the leading and trailing quotes - # and use quoted pairs in the value as appropriate. - newparts = ( - [ValueTerminal('"', 'ptext')] + - [ValueTerminal(make_quoted_pairs(p), 'ptext') - for p in newparts] + - [ValueTerminal('"', 'ptext')]) - if part.token_type == 'comment': - newparts = ( - [ValueTerminal('(', 'ptext')] + - [ValueTerminal(make_parenthesis_pairs(p), 'ptext') - if p.token_type == 'ptext' else p - for p in newparts] + - [ValueTerminal(')', 'ptext')]) - if not part.as_ew_allowed: - wrap_as_ew_blocked += 1 - newparts.append(end_ew_not_allowed) - parts = newparts + parts - continue - if part.as_ew_allowed and not wrap_as_ew_blocked: - # It doesn't need CTE encoding, but encode it anyway so we can - # wrap it. - parts.insert(0, part) - want_encoding = True - continue - # We can't figure out how to wrap, it, so give up. - newline = _steal_trailing_WSP_if_exists(lines) - if newline or part.startswith_fws(): - lines.append(newline + tstr) - else: - # We can't fold it onto the next line either... - lines[-1] += tstr - last_word_is_ew = last_word_is_ew and not bool(tstr.strip(_WSP)) - - return policy.linesep.join(lines) + policy.linesep - -def _fold_as_ew(to_encode, lines, maxlen, last_ew, ew_combine_allowed, charset, last_word_is_ew): - """Fold string to_encode into lines as encoded word, combining if allowed. - Return the new value for last_ew, or None if ew_combine_allowed is False. - - If there is already an encoded word in the last line of lines (indicated by - a non-None value for last_ew) and ew_combine_allowed is true, decode the - existing ew, combine it with to_encode, and re-encode. Otherwise, encode - to_encode. In either case, split to_encode as necessary so that the - encoded segments fit within maxlen. - - """ - if last_ew is not None and ew_combine_allowed: - to_encode = str( - get_unstructured(lines[-1][last_ew:] + to_encode)) - lines[-1] = lines[-1][:last_ew] - elif last_word_is_ew: - # If we are following up an encoded word with another encoded word, - # any white space between the two will be ignored when decoded. - # Therefore, we encode all to-be-displayed whitespace in the second - # encoded word. - len_without_wsp = len(lines[-1].rstrip(_WSP)) - leading_whitespace = lines[-1][len_without_wsp:] - lines[-1] = (lines[-1][:len_without_wsp] - + (' ' if leading_whitespace else '')) - to_encode = leading_whitespace + to_encode - elif to_encode[0] in WSP: - # We're joining this to non-encoded text, so don't encode - # the leading blank. - leading_wsp = to_encode[0] - to_encode = to_encode[1:] - if (len(lines[-1]) == maxlen): - lines.append(_steal_trailing_WSP_if_exists(lines)) - lines[-1] += leading_wsp - - trailing_wsp = '' - if to_encode[-1] in WSP: - # Likewise for the trailing space. - trailing_wsp = to_encode[-1] - to_encode = to_encode[:-1] - new_last_ew = len(lines[-1]) if last_ew is None else last_ew - - encode_as = 'utf-8' if charset == 'us-ascii' else charset - - # The RFC2047 chrome takes up 7 characters plus the length - # of the charset name. - chrome_len = len(encode_as) + 7 - - if (chrome_len + 1) >= maxlen: - raise errors.HeaderParseError( - "max_line_length is too small to fit an encoded word") - - while to_encode: - remaining_space = maxlen - len(lines[-1]) - text_space = remaining_space - chrome_len - if text_space <= 0: - newline = _steal_trailing_WSP_if_exists(lines) - lines.append(newline or ' ') - new_last_ew = len(lines[-1]) - continue - - to_encode_word = to_encode[:text_space] - encoded_word = _ew.encode(to_encode_word, charset=encode_as) - excess = len(encoded_word) - remaining_space - while excess > 0: - # Since the chunk to encode is guaranteed to fit into less than 100 characters, - # shrinking it by one at a time shouldn't take long. - to_encode_word = to_encode_word[:-1] - encoded_word = _ew.encode(to_encode_word, charset=encode_as) - excess = len(encoded_word) - remaining_space - lines[-1] += encoded_word - to_encode = to_encode[len(to_encode_word):] - - if to_encode: - lines.append(' ') - new_last_ew = len(lines[-1]) - lines[-1] += trailing_wsp - return new_last_ew if ew_combine_allowed else None - -def _fold_mime_parameters(part, lines, maxlen, encoding): - """Fold TokenList 'part' into the 'lines' list as mime parameters. - - Using the decoded list of parameters and values, format them according to - the RFC rules, including using RFC2231 encoding if the value cannot be - expressed in 'encoding' and/or the parameter+value is too long to fit - within 'maxlen'. - - """ - # Special case for RFC2231 encoding: start from decoded values and use - # RFC2231 encoding iff needed. - # - # Note that the 1 and 2s being added to the length calculations are - # accounting for the possibly-needed spaces and semicolons we'll be adding. - # - for name, value in part.params: - # XXX What if this ';' puts us over maxlen the first time through the - # loop? We should split the header value onto a newline in that case, - # but to do that we need to recognize the need earlier or reparse the - # header, so I'm going to ignore that bug for now. It'll only put us - # one character over. - if not lines[-1].rstrip().endswith(';'): - lines[-1] += ';' - charset = encoding - error_handler = 'strict' - try: - value.encode(encoding) - encoding_required = False - except UnicodeEncodeError: - encoding_required = True - if utils._has_surrogates(value): - charset = 'unknown-8bit' - error_handler = 'surrogateescape' - else: - charset = 'utf-8' - if encoding_required: - encoded_value = urllib.parse.quote( - value, safe='', errors=error_handler) - tstr = "{}*={}''{}".format(name, charset, encoded_value) - else: - tstr = '{}={}'.format(name, quote_string(value)) - if len(lines[-1]) + len(tstr) + 1 < maxlen: - lines[-1] = lines[-1] + ' ' + tstr - continue - elif len(tstr) + 2 <= maxlen: - lines.append(' ' + tstr) - continue - # We need multiple sections. We are allowed to mix encoded and - # non-encoded sections, but we aren't going to. We'll encode them all. - section = 0 - extra_chrome = charset + "''" - while value: - chrome_len = len(name) + len(str(section)) + 3 + len(extra_chrome) - if maxlen <= chrome_len + 3: - # We need room for the leading blank, the trailing semicolon, - # and at least one character of the value. If we don't - # have that, we'd be stuck, so in that case fall back to - # the RFC standard width. - maxlen = 78 - splitpoint = maxchars = maxlen - chrome_len - 2 - while True: - partial = value[:splitpoint] - encoded_value = urllib.parse.quote( - partial, safe='', errors=error_handler) - if len(encoded_value) <= maxchars: - break - splitpoint -= 1 - lines.append(" {}*{}*={}{}".format( - name, section, extra_chrome, encoded_value)) - extra_chrome = '' - section += 1 - value = value[splitpoint:] - if value: - lines[-1] += ';' diff --git a/Python314_4_x86_Template/Lib/email/_parseaddr.py b/Python314_4_x86_Template/Lib/email/_parseaddr.py deleted file mode 100644 index 6a7c5fa06..000000000 --- a/Python314_4_x86_Template/Lib/email/_parseaddr.py +++ /dev/null @@ -1,563 +0,0 @@ -# Copyright (C) 2002 Python Software Foundation -# Contact: email-sig@python.org - -"""Email address parsing code. - -Lifted directly from rfc822.py. This should eventually be rewritten. -""" - -__all__ = [ - 'mktime_tz', - 'parsedate', - 'parsedate_tz', - 'quote', - ] - -import time - -SPACE = ' ' -EMPTYSTRING = '' -COMMASPACE = ', ' - -# Parse a date field -_monthnames = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', - 'aug', 'sep', 'oct', 'nov', 'dec', - 'january', 'february', 'march', 'april', 'may', 'june', 'july', - 'august', 'september', 'october', 'november', 'december'] - -_daynames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] - -# The timezone table does not include the military time zones defined -# in RFC822, other than Z. According to RFC1123, the description in -# RFC822 gets the signs wrong, so we can't rely on any such time -# zones. RFC1123 recommends that numeric timezone indicators be used -# instead of timezone names. - -_timezones = {'UT':0, 'UTC':0, 'GMT':0, 'Z':0, - 'AST': -400, 'ADT': -300, # Atlantic (used in Canada) - 'EST': -500, 'EDT': -400, # Eastern - 'CST': -600, 'CDT': -500, # Central - 'MST': -700, 'MDT': -600, # Mountain - 'PST': -800, 'PDT': -700 # Pacific - } - - -def parsedate_tz(data): - """Convert a date string to a time tuple. - - Accounts for military timezones. - """ - res = _parsedate_tz(data) - if not res: - return - if res[9] is None: - res[9] = 0 - return tuple(res) - -def _parsedate_tz(data): - """Convert date to extended time tuple. - - The last (additional) element is the time zone offset in seconds, except if - the timezone was specified as -0000. In that case the last element is - None. This indicates a UTC timestamp that explicitly declaims knowledge of - the source timezone, as opposed to a +0000 timestamp that indicates the - source timezone really was UTC. - - """ - if not data: - return None - data = data.split() - if not data: # This happens for whitespace-only input. - return None - # The FWS after the comma after the day-of-week is optional, so search and - # adjust for this. - if data[0].endswith(',') or data[0].lower() in _daynames: - # There's a dayname here. Skip it - del data[0] - else: - i = data[0].rfind(',') - if i >= 0: - data[0] = data[0][i+1:] - if len(data) == 3: # RFC 850 date, deprecated - stuff = data[0].split('-') - if len(stuff) == 3: - data = stuff + data[1:] - if len(data) == 4: - s = data[3] - i = s.find('+') - if i == -1: - i = s.find('-') - if i > 0: - data[3:] = [s[:i], s[i:]] - else: - data.append('') # Dummy tz - if len(data) < 5: - return None - data = data[:5] - [dd, mm, yy, tm, tz] = data - if not (dd and mm and yy): - return None - mm = mm.lower() - if mm not in _monthnames: - dd, mm = mm, dd.lower() - if mm not in _monthnames: - return None - mm = _monthnames.index(mm) + 1 - if mm > 12: - mm -= 12 - if dd[-1] == ',': - dd = dd[:-1] - i = yy.find(':') - if i > 0: - yy, tm = tm, yy - if yy[-1] == ',': - yy = yy[:-1] - if not yy: - return None - if not yy[0].isdigit(): - yy, tz = tz, yy - if tm[-1] == ',': - tm = tm[:-1] - tm = tm.split(':') - if len(tm) == 2: - [thh, tmm] = tm - tss = '0' - elif len(tm) == 3: - [thh, tmm, tss] = tm - elif len(tm) == 1 and '.' in tm[0]: - # Some non-compliant MUAs use '.' to separate time elements. - tm = tm[0].split('.') - if len(tm) == 2: - [thh, tmm] = tm - tss = 0 - elif len(tm) == 3: - [thh, tmm, tss] = tm - else: - return None - else: - return None - try: - yy = int(yy) - dd = int(dd) - thh = int(thh) - tmm = int(tmm) - tss = int(tss) - except ValueError: - return None - # Check for a yy specified in two-digit format, then convert it to the - # appropriate four-digit format, according to the POSIX standard. RFC 822 - # calls for a two-digit yy, but RFC 2822 (which obsoletes RFC 822) already - # mandated a 4-digit yy, and RFC 5322 (which obsoletes RFC 2822) continues - # this requirement. For more information, see the documentation for - # the time module. - if yy < 100: - # The year is between 1969 and 1999 (inclusive). - if yy > 68: - yy += 1900 - # The year is between 2000 and 2068 (inclusive). - else: - yy += 2000 - tzoffset = None - tz = tz.upper() - if tz in _timezones: - tzoffset = _timezones[tz] - else: - try: - tzoffset = int(tz) - except ValueError: - pass - if tzoffset==0 and tz.startswith('-'): - tzoffset = None - # Convert a timezone offset into seconds ; -0500 -> -18000 - if tzoffset: - if tzoffset < 0: - tzsign = -1 - tzoffset = -tzoffset - else: - tzsign = 1 - tzoffset = tzsign * ( (tzoffset//100)*3600 + (tzoffset % 100)*60) - # Daylight Saving Time flag is set to -1, since DST is unknown. - return [yy, mm, dd, thh, tmm, tss, 0, 1, -1, tzoffset] - - -def parsedate(data): - """Convert a time string to a time tuple.""" - t = parsedate_tz(data) - if isinstance(t, tuple): - return t[:9] - else: - return t - - -def mktime_tz(data): - """Turn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.""" - if data[9] is None: - # No zone info, so localtime is better assumption than GMT - return time.mktime(data[:8] + (-1,)) - else: - # Delay the import, since mktime_tz is rarely used - import calendar - - t = calendar.timegm(data) - return t - data[9] - - -def quote(str): - """Prepare string to be used in a quoted string. - - Turns backslash and double quote characters into quoted pairs. These - are the only characters that need to be quoted inside a quoted string. - Does not add the surrounding double quotes. - """ - return str.replace('\\', '\\\\').replace('"', '\\"') - - -class AddrlistClass: - """Address parser class by Ben Escoto. - - To understand what this class does, it helps to have a copy of RFC 2822 in - front of you. - - Note: this class interface is deprecated and may be removed in the future. - Use email.utils.AddressList instead. - """ - - def __init__(self, field): - """Initialize a new instance. - - 'field' is an unparsed address header field, containing - one or more addresses. - """ - self.specials = '()<>@,:;.\"[]' - self.pos = 0 - self.LWS = ' \t' - self.CR = '\r\n' - self.FWS = self.LWS + self.CR - self.atomends = self.specials + self.LWS + self.CR - # Note that RFC 2822 section 4.1 introduced '.' as obs-phrase to handle - # existing practice (periods in display names), even though it was not - # allowed in RFC 822. RFC 5322 section 4.1 (which obsoletes RFC 2822) - # continues this requirement. We must recognize obsolete syntax, so - # allow dots in phrases. - self.phraseends = self.atomends.replace('.', '') - self.field = field - self.commentlist = [] - - def gotonext(self): - """Skip white space and extract comments.""" - wslist = [] - while self.pos < len(self.field): - if self.field[self.pos] in self.LWS + '\n\r': - if self.field[self.pos] not in '\n\r': - wslist.append(self.field[self.pos]) - self.pos += 1 - elif self.field[self.pos] == '(': - self.commentlist.append(self.getcomment()) - else: - break - return EMPTYSTRING.join(wslist) - - def getaddrlist(self): - """Parse all addresses. - - Returns a list containing all of the addresses. - """ - result = [] - while self.pos < len(self.field): - ad = self.getaddress() - if ad: - result += ad - else: - result.append(('', '')) - return result - - def getaddress(self): - """Parse the next address.""" - self.commentlist = [] - self.gotonext() - - oldpos = self.pos - oldcl = self.commentlist - plist = self.getphraselist() - - self.gotonext() - returnlist = [] - - if self.pos >= len(self.field): - # Bad email address technically, no domain. - if plist: - returnlist = [(SPACE.join(self.commentlist), plist[0])] - - elif self.field[self.pos] in '.@': - # email address is just an addrspec - # this isn't very efficient since we start over - self.pos = oldpos - self.commentlist = oldcl - addrspec = self.getaddrspec() - returnlist = [(SPACE.join(self.commentlist), addrspec)] - - elif self.field[self.pos] == ':': - # address is a group - returnlist = [] - - fieldlen = len(self.field) - self.pos += 1 - while self.pos < len(self.field): - self.gotonext() - if self.pos < fieldlen and self.field[self.pos] == ';': - self.pos += 1 - break - returnlist = returnlist + self.getaddress() - - elif self.field[self.pos] == '<': - # Address is a phrase then a route addr - routeaddr = self.getrouteaddr() - - if self.commentlist: - returnlist = [(SPACE.join(plist) + ' (' + - ' '.join(self.commentlist) + ')', routeaddr)] - else: - returnlist = [(SPACE.join(plist), routeaddr)] - - else: - if plist: - returnlist = [(SPACE.join(self.commentlist), plist[0])] - elif self.field[self.pos] in self.specials: - self.pos += 1 - - self.gotonext() - if self.pos < len(self.field) and self.field[self.pos] == ',': - self.pos += 1 - return returnlist - - def getrouteaddr(self): - """Parse a route address (Return-path value). - - This method just skips all the route stuff and returns the addrspec. - """ - if self.field[self.pos] != '<': - return - - expectroute = False - self.pos += 1 - self.gotonext() - adlist = '' - while self.pos < len(self.field): - if expectroute: - self.getdomain() - expectroute = False - elif self.field[self.pos] == '>': - self.pos += 1 - break - elif self.field[self.pos] == '@': - self.pos += 1 - expectroute = True - elif self.field[self.pos] == ':': - self.pos += 1 - else: - adlist = self.getaddrspec() - self.pos += 1 - break - self.gotonext() - - return adlist - - def getaddrspec(self): - """Parse an RFC 2822 addr-spec.""" - aslist = [] - - self.gotonext() - while self.pos < len(self.field): - preserve_ws = True - if self.field[self.pos] == '.': - if aslist and not aslist[-1].strip(): - aslist.pop() - aslist.append('.') - self.pos += 1 - preserve_ws = False - elif self.field[self.pos] == '"': - aslist.append('"%s"' % quote(self.getquote())) - elif self.field[self.pos] in self.atomends: - if aslist and not aslist[-1].strip(): - aslist.pop() - break - else: - aslist.append(self.getatom()) - ws = self.gotonext() - if preserve_ws and ws: - aslist.append(ws) - - if self.pos >= len(self.field) or self.field[self.pos] != '@': - return EMPTYSTRING.join(aslist) - - aslist.append('@') - self.pos += 1 - self.gotonext() - domain = self.getdomain() - if not domain: - # Invalid domain, return an empty address instead of returning a - # local part to denote failed parsing. - return EMPTYSTRING - return EMPTYSTRING.join(aslist) + domain - - def getdomain(self): - """Get the complete domain name from an address.""" - sdlist = [] - while self.pos < len(self.field): - if self.field[self.pos] in self.LWS: - self.pos += 1 - elif self.field[self.pos] == '(': - self.commentlist.append(self.getcomment()) - elif self.field[self.pos] == '[': - sdlist.append(self.getdomainliteral()) - elif self.field[self.pos] == '.': - self.pos += 1 - sdlist.append('.') - elif self.field[self.pos] == '@': - # bpo-34155: Don't parse domains with two `@` like - # `a@malicious.org@important.com`. - return EMPTYSTRING - elif self.field[self.pos] in self.atomends: - break - else: - sdlist.append(self.getatom()) - return EMPTYSTRING.join(sdlist) - - def getdelimited(self, beginchar, endchars, allowcomments=True): - """Parse a header fragment delimited by special characters. - - 'beginchar' is the start character for the fragment. - If self is not looking at an instance of 'beginchar' then - getdelimited returns the empty string. - - 'endchars' is a sequence of allowable end-delimiting characters. - Parsing stops when one of these is encountered. - - If 'allowcomments' is non-zero, embedded RFC 2822 comments are allowed - within the parsed fragment. - """ - if self.field[self.pos] != beginchar: - return '' - - slist = [''] - quote = False - self.pos += 1 - while self.pos < len(self.field): - if quote: - slist.append(self.field[self.pos]) - quote = False - elif self.field[self.pos] in endchars: - self.pos += 1 - break - elif allowcomments and self.field[self.pos] == '(': - slist.append(self.getcomment()) - continue # have already advanced pos from getcomment - elif self.field[self.pos] == '\\': - quote = True - else: - slist.append(self.field[self.pos]) - self.pos += 1 - - return EMPTYSTRING.join(slist) - - def getquote(self): - """Get a quote-delimited fragment from self's field.""" - return self.getdelimited('"', '"\r', False) - - def getcomment(self): - """Get a parenthesis-delimited fragment from self's field.""" - return self.getdelimited('(', ')\r', True) - - def getdomainliteral(self): - """Parse an RFC 2822 domain-literal.""" - return '[%s]' % self.getdelimited('[', ']\r', False) - - def getatom(self, atomends=None): - """Parse an RFC 2822 atom. - - Optional atomends specifies a different set of end token delimiters - (the default is to use self.atomends). This is used e.g. in - getphraselist() since phrase endings must not include the '.' (which - is legal in phrases).""" - atomlist = [''] - if atomends is None: - atomends = self.atomends - - while self.pos < len(self.field): - if self.field[self.pos] in atomends: - break - else: - atomlist.append(self.field[self.pos]) - self.pos += 1 - - return EMPTYSTRING.join(atomlist) - - def getphraselist(self): - """Parse a sequence of RFC 2822 phrases. - - A phrase is a sequence of words, which are in turn either RFC 2822 - atoms or quoted-strings. Phrases are canonicalized by squeezing all - runs of continuous whitespace into one space. - """ - plist = [] - - while self.pos < len(self.field): - if self.field[self.pos] in self.FWS: - self.pos += 1 - elif self.field[self.pos] == '"': - plist.append(self.getquote()) - elif self.field[self.pos] == '(': - self.commentlist.append(self.getcomment()) - elif self.field[self.pos] in self.phraseends: - break - else: - plist.append(self.getatom(self.phraseends)) - - return plist - -class AddressList(AddrlistClass): - """An AddressList encapsulates a list of parsed RFC 2822 addresses.""" - def __init__(self, field): - AddrlistClass.__init__(self, field) - if field: - self.addresslist = self.getaddrlist() - else: - self.addresslist = [] - - def __len__(self): - return len(self.addresslist) - - def __add__(self, other): - # Set union - newaddr = AddressList(None) - newaddr.addresslist = self.addresslist[:] - for x in other.addresslist: - if not x in self.addresslist: - newaddr.addresslist.append(x) - return newaddr - - def __iadd__(self, other): - # Set union, in-place - for x in other.addresslist: - if not x in self.addresslist: - self.addresslist.append(x) - return self - - def __sub__(self, other): - # Set difference - newaddr = AddressList(None) - for x in self.addresslist: - if not x in other.addresslist: - newaddr.addresslist.append(x) - return newaddr - - def __isub__(self, other): - # Set difference, in-place - for x in other.addresslist: - if x in self.addresslist: - self.addresslist.remove(x) - return self - - def __getitem__(self, index): - # Make indexing, slices, and 'in' work - return self.addresslist[index] diff --git a/Python314_4_x86_Template/Lib/email/_policybase.py b/Python314_4_x86_Template/Lib/email/_policybase.py deleted file mode 100644 index e23843df4..000000000 --- a/Python314_4_x86_Template/Lib/email/_policybase.py +++ /dev/null @@ -1,392 +0,0 @@ -"""Policy framework for the email package. - -Allows fine grained feature control of how the package parses and emits data. -""" - -import abc -import re -from email import header -from email import charset as _charset -from email.utils import _has_surrogates - -__all__ = [ - 'Policy', - 'Compat32', - 'compat32', - ] - -# validation regex from RFC 5322, equivalent to pattern re.compile("[!-9;-~]+$") -valid_header_name_re = re.compile("[\041-\071\073-\176]+$") - -def validate_header_name(name): - # Validate header name according to RFC 5322 - if not valid_header_name_re.match(name): - raise ValueError( - f"Header field name contains invalid characters: {name!r}") - -class _PolicyBase: - - """Policy Object basic framework. - - This class is useless unless subclassed. A subclass should define - class attributes with defaults for any values that are to be - managed by the Policy object. The constructor will then allow - non-default values to be set for these attributes at instance - creation time. The instance will be callable, taking these same - attributes keyword arguments, and returning a new instance - identical to the called instance except for those values changed - by the keyword arguments. Instances may be added, yielding new - instances with any non-default values from the right hand - operand overriding those in the left hand operand. That is, - - A + B == A(<non-default values of B>) - - The repr of an instance can be used to reconstruct the object - if and only if the repr of the values can be used to reconstruct - those values. - - """ - - def __init__(self, **kw): - """Create new Policy, possibly overriding some defaults. - - See class docstring for a list of overridable attributes. - - """ - for name, value in kw.items(): - if hasattr(self, name): - super(_PolicyBase,self).__setattr__(name, value) - else: - raise TypeError( - "{!r} is an invalid keyword argument for {}".format( - name, self.__class__.__name__)) - - def __repr__(self): - args = [ "{}={!r}".format(name, value) - for name, value in self.__dict__.items() ] - return "{}({})".format(self.__class__.__name__, ', '.join(args)) - - def clone(self, **kw): - """Return a new instance with specified attributes changed. - - The new instance has the same attribute values as the current object, - except for the changes passed in as keyword arguments. - - """ - newpolicy = self.__class__.__new__(self.__class__) - for attr, value in self.__dict__.items(): - object.__setattr__(newpolicy, attr, value) - for attr, value in kw.items(): - if not hasattr(self, attr): - raise TypeError( - "{!r} is an invalid keyword argument for {}".format( - attr, self.__class__.__name__)) - object.__setattr__(newpolicy, attr, value) - return newpolicy - - def __setattr__(self, name, value): - if hasattr(self, name): - msg = "{!r} object attribute {!r} is read-only" - else: - msg = "{!r} object has no attribute {!r}" - raise AttributeError(msg.format(self.__class__.__name__, name)) - - def __add__(self, other): - """Non-default values from right operand override those from left. - - The object returned is a new instance of the subclass. - - """ - return self.clone(**other.__dict__) - - -def _append_doc(doc, added_doc): - doc = doc.rsplit('\n', 1)[0] - added_doc = added_doc.split('\n', 1)[1] - return doc + '\n' + added_doc - -def _extend_docstrings(cls): - if cls.__doc__ and cls.__doc__.startswith('+'): - cls.__doc__ = _append_doc(cls.__bases__[0].__doc__, cls.__doc__) - for name, attr in cls.__dict__.items(): - if attr.__doc__ and attr.__doc__.startswith('+'): - for c in (c for base in cls.__bases__ for c in base.mro()): - doc = getattr(getattr(c, name), '__doc__') - if doc: - attr.__doc__ = _append_doc(doc, attr.__doc__) - break - return cls - - -class Policy(_PolicyBase, metaclass=abc.ABCMeta): - - r"""Controls for how messages are interpreted and formatted. - - Most of the classes and many of the methods in the email package accept - Policy objects as parameters. A Policy object contains a set of values and - functions that control how input is interpreted and how output is rendered. - For example, the parameter 'raise_on_defect' controls whether or not an RFC - violation results in an error being raised or not, while 'max_line_length' - controls the maximum length of output lines when a Message is serialized. - - Any valid attribute may be overridden when a Policy is created by passing - it as a keyword argument to the constructor. Policy objects are immutable, - but a new Policy object can be created with only certain values changed by - calling the Policy instance with keyword arguments. Policy objects can - also be added, producing a new Policy object in which the non-default - attributes set in the right hand operand overwrite those specified in the - left operand. - - Settable attributes: - - raise_on_defect -- If true, then defects should be raised as errors. - Default: False. - - linesep -- string containing the value to use as separation - between output lines. Default '\n'. - - cte_type -- Type of allowed content transfer encodings - - 7bit -- ASCII only - 8bit -- Content-Transfer-Encoding: 8bit is allowed - - Default: 8bit. Also controls the disposition of - (RFC invalid) binary data in headers; see the - documentation of the binary_fold method. - - max_line_length -- maximum length of lines, excluding 'linesep', - during serialization. None or 0 means no line - wrapping is done. Default is 78. - - mangle_from_ -- a flag that, when True escapes From_ lines in the - body of the message by putting a '>' in front of - them. This is used when the message is being - serialized by a generator. Default: False. - - message_factory -- the class to use to create new message objects. - If the value is None, the default is Message. - - verify_generated_headers - -- if true, the generator verifies that each header - they are properly folded, so that a parser won't - treat it as multiple headers, start-of-body, or - part of another header. - This is a check against custom Header & fold() - implementations. - """ - - raise_on_defect = False - linesep = '\n' - cte_type = '8bit' - max_line_length = 78 - mangle_from_ = False - message_factory = None - verify_generated_headers = True - - def handle_defect(self, obj, defect): - """Based on policy, either raise defect or call register_defect. - - handle_defect(obj, defect) - - defect should be a Defect subclass, but in any case must be an - Exception subclass. obj is the object on which the defect should be - registered if it is not raised. If the raise_on_defect is True, the - defect is raised as an error, otherwise the object and the defect are - passed to register_defect. - - This method is intended to be called by parsers that discover defects. - The email package parsers always call it with Defect instances. - - """ - if self.raise_on_defect: - raise defect - self.register_defect(obj, defect) - - def register_defect(self, obj, defect): - """Record 'defect' on 'obj'. - - Called by handle_defect if raise_on_defect is False. This method is - part of the Policy API so that Policy subclasses can implement custom - defect handling. The default implementation calls the append method of - the defects attribute of obj. The objects used by the email package by - default that get passed to this method will always have a defects - attribute with an append method. - - """ - obj.defects.append(defect) - - def header_max_count(self, name): - """Return the maximum allowed number of headers named 'name'. - - Called when a header is added to a Message object. If the returned - value is not 0 or None, and there are already a number of headers with - the name 'name' equal to the value returned, a ValueError is raised. - - Because the default behavior of Message's __setitem__ is to append the - value to the list of headers, it is easy to create duplicate headers - without realizing it. This method allows certain headers to be limited - in the number of instances of that header that may be added to a - Message programmatically. (The limit is not observed by the parser, - which will faithfully produce as many headers as exist in the message - being parsed.) - - The default implementation returns None for all header names. - """ - return None - - @abc.abstractmethod - def header_source_parse(self, sourcelines): - """Given a list of linesep terminated strings constituting the lines of - a single header, return the (name, value) tuple that should be stored - in the model. The input lines should retain their terminating linesep - characters. The lines passed in by the email package may contain - surrogateescaped binary data. - """ - raise NotImplementedError - - @abc.abstractmethod - def header_store_parse(self, name, value): - """Given the header name and the value provided by the application - program, return the (name, value) that should be stored in the model. - """ - raise NotImplementedError - - @abc.abstractmethod - def header_fetch_parse(self, name, value): - """Given the header name and the value from the model, return the value - to be returned to the application program that is requesting that - header. The value passed in by the email package may contain - surrogateescaped binary data if the lines were parsed by a BytesParser. - The returned value should not contain any surrogateescaped data. - - """ - raise NotImplementedError - - @abc.abstractmethod - def fold(self, name, value): - """Given the header name and the value from the model, return a string - containing linesep characters that implement the folding of the header - according to the policy controls. The value passed in by the email - package may contain surrogateescaped binary data if the lines were - parsed by a BytesParser. The returned value should not contain any - surrogateescaped data. - - """ - raise NotImplementedError - - @abc.abstractmethod - def fold_binary(self, name, value): - """Given the header name and the value from the model, return binary - data containing linesep characters that implement the folding of the - header according to the policy controls. The value passed in by the - email package may contain surrogateescaped binary data. - - """ - raise NotImplementedError - - -@_extend_docstrings -class Compat32(Policy): - - """+ - This particular policy is the backward compatibility Policy. It - replicates the behavior of the email package version 5.1. - """ - - mangle_from_ = True - - def _sanitize_header(self, name, value): - # If the header value contains surrogates, return a Header using - # the unknown-8bit charset to encode the bytes as encoded words. - if not isinstance(value, str): - # Assume it is already a header object - return value - if _has_surrogates(value): - return header.Header(value, charset=_charset.UNKNOWN8BIT, - header_name=name) - else: - return value - - def header_source_parse(self, sourcelines): - """+ - The name is parsed as everything up to the ':' and returned unmodified. - The value is determined by stripping leading whitespace off the - remainder of the first line joined with all subsequent lines, and - stripping any trailing carriage return or linefeed characters. - - """ - name, value = sourcelines[0].split(':', 1) - value = ''.join((value, *sourcelines[1:])).lstrip(' \t\r\n') - return (name, value.rstrip('\r\n')) - - def header_store_parse(self, name, value): - """+ - The name and value are returned unmodified. - """ - validate_header_name(name) - return (name, value) - - def header_fetch_parse(self, name, value): - """+ - If the value contains binary data, it is converted into a Header object - using the unknown-8bit charset. Otherwise it is returned unmodified. - """ - return self._sanitize_header(name, value) - - def fold(self, name, value): - """+ - Headers are folded using the Header folding algorithm, which preserves - existing line breaks in the value, and wraps each resulting line to the - max_line_length. Non-ASCII binary data are CTE encoded using the - unknown-8bit charset. - - """ - return self._fold(name, value, sanitize=True) - - def fold_binary(self, name, value): - """+ - Headers are folded using the Header folding algorithm, which preserves - existing line breaks in the value, and wraps each resulting line to the - max_line_length. If cte_type is 7bit, non-ascii binary data is CTE - encoded using the unknown-8bit charset. Otherwise the original source - header is used, with its existing line breaks and/or binary data. - - """ - folded = self._fold(name, value, sanitize=self.cte_type=='7bit') - return folded.encode('ascii', 'surrogateescape') - - def _fold(self, name, value, sanitize): - parts = [] - parts.append('%s: ' % name) - if isinstance(value, str): - if _has_surrogates(value): - if sanitize: - h = header.Header(value, - charset=_charset.UNKNOWN8BIT, - header_name=name) - else: - # If we have raw 8bit data in a byte string, we have no idea - # what the encoding is. There is no safe way to split this - # string. If it's ascii-subset, then we could do a normal - # ascii split, but if it's multibyte then we could break the - # string. There's no way to know so the least harm seems to - # be to not split the string and risk it being too long. - parts.append(value) - h = None - else: - h = header.Header(value, header_name=name) - else: - # Assume it is a Header-like object. - h = value - if h is not None: - # The Header class interprets a value of None for maxlinelen as the - # default value of 78, as recommended by RFC 5322 section 2.1.1. - maxlinelen = 0 - if self.max_line_length is not None: - maxlinelen = self.max_line_length - parts.append(h.encode(linesep=self.linesep, maxlinelen=maxlinelen)) - parts.append(self.linesep) - return ''.join(parts) - - -compat32 = Compat32() diff --git a/Python314_4_x86_Template/Lib/email/architecture.rst b/Python314_4_x86_Template/Lib/email/architecture.rst deleted file mode 100644 index fcd10bde1..000000000 --- a/Python314_4_x86_Template/Lib/email/architecture.rst +++ /dev/null @@ -1,216 +0,0 @@ -:mod:`email` Package Architecture -================================= - -Overview --------- - -The email package consists of three major components: - - Model - An object structure that represents an email message, and provides an - API for creating, querying, and modifying a message. - - Parser - Takes a sequence of characters or bytes and produces a model of the - email message represented by those characters or bytes. - - Generator - Takes a model and turns it into a sequence of characters or bytes. The - sequence can either be intended for human consumption (a printable - unicode string) or bytes suitable for transmission over the wire. In - the latter case all data is properly encoded using the content transfer - encodings specified by the relevant RFCs. - -Conceptually the package is organized around the model. The model provides both -"external" APIs intended for use by application programs using the library, -and "internal" APIs intended for use by the Parser and Generator components. -This division is intentionally a bit fuzzy; the API described by this -documentation is all a public, stable API. This allows for an application -with special needs to implement its own parser and/or generator. - -In addition to the three major functional components, there is a third key -component to the architecture: - - Policy - An object that specifies various behavioral settings and carries - implementations of various behavior-controlling methods. - -The Policy framework provides a simple and convenient way to control the -behavior of the library, making it possible for the library to be used in a -very flexible fashion while leveraging the common code required to parse, -represent, and generate message-like objects. For example, in addition to the -default :rfc:`5322` email message policy, we also have a policy that manages -HTTP headers in a fashion compliant with :rfc:`2616`. Individual policy -controls, such as the maximum line length produced by the generator, can also -be controlled individually to meet specialized application requirements. - - -The Model ---------- - -The message model is implemented by the :class:`~email.message.Message` class. -The model divides a message into the two fundamental parts discussed by the -RFC: the header section and the body. The `Message` object acts as a -pseudo-dictionary of named headers. Its dictionary interface provides -convenient access to individual headers by name. However, all headers are kept -internally in an ordered list, so that the information about the order of the -headers in the original message is preserved. - -The `Message` object also has a `payload` that holds the body. A `payload` can -be one of two things: data, or a list of `Message` objects. The latter is used -to represent a multipart MIME message. Lists can be nested arbitrarily deeply -in order to represent the message, with all terminal leaves having non-list -data payloads. - - -Message Lifecycle ------------------ - -The general lifecycle of a message is: - - Creation - A `Message` object can be created by a Parser, or it can be - instantiated as an empty message by an application. - - Manipulation - The application may examine one or more headers, and/or the - payload, and it may modify one or more headers and/or - the payload. This may be done on the top level `Message` - object, or on any sub-object. - - Finalization - The Model is converted into a unicode or binary stream, - or the model is discarded. - - - -Header Policy Control During Lifecycle --------------------------------------- - -One of the major controls exerted by the Policy is the management of headers -during the `Message` lifecycle. Most applications don't need to be aware of -this. - -A header enters the model in one of two ways: via a Parser, or by being set to -a specific value by an application program after the Model already exists. -Similarly, a header exits the model in one of two ways: by being serialized by -a Generator, or by being retrieved from a Model by an application program. The -Policy object provides hooks for all four of these pathways. - -The model storage for headers is a list of (name, value) tuples. - -The Parser identifies headers during parsing, and passes them to the -:meth:`~email.policy.Policy.header_source_parse` method of the Policy. The -result of that method is the (name, value) tuple to be stored in the model. - -When an application program supplies a header value (for example, through the -`Message` object `__setitem__` interface), the name and the value are passed to -the :meth:`~email.policy.Policy.header_store_parse` method of the Policy, which -returns the (name, value) tuple to be stored in the model. - -When an application program retrieves a header (through any of the dict or list -interfaces of `Message`), the name and value are passed to the -:meth:`~email.policy.Policy.header_fetch_parse` method of the Policy to -obtain the value returned to the application. - -When a Generator requests a header during serialization, the name and value are -passed to the :meth:`~email.policy.Policy.fold` method of the Policy, which -returns a string containing line breaks in the appropriate places. The -:meth:`~email.policy.Policy.cte_type` Policy control determines whether or -not Content Transfer Encoding is performed on the data in the header. There is -also a :meth:`~email.policy.Policy.binary_fold` method for use by generators -that produce binary output, which returns the folded header as binary data, -possibly folded at different places than the corresponding string would be. - - -Handling Binary Data --------------------- - -In an ideal world all message data would conform to the RFCs, meaning that the -parser could decode the message into the idealized unicode message that the -sender originally wrote. In the real world, the email package must also be -able to deal with badly formatted messages, including messages containing -non-ASCII characters that either have no indicated character set or are not -valid characters in the indicated character set. - -Since email messages are *primarily* text data, and operations on message data -are primarily text operations (except for binary payloads of course), the model -stores all text data as unicode strings. Un-decodable binary inside text -data is handled by using the `surrogateescape` error handler of the ASCII -codec. As with the binary filenames the error handler was introduced to -handle, this allows the email package to "carry" the binary data received -during parsing along until the output stage, at which time it is regenerated -in its original form. - -This carried binary data is almost entirely an implementation detail. The one -place where it is visible in the API is in the "internal" API. A Parser must -do the `surrogateescape` encoding of binary input data, and pass that data to -the appropriate Policy method. The "internal" interface used by the Generator -to access header values preserves the `surrogateescaped` bytes. All other -interfaces convert the binary data either back into bytes or into a safe form -(losing information in some cases). - - -Backward Compatibility ----------------------- - -The :class:`~email.policy.Policy.Compat32` Policy provides backward -compatibility with version 5.1 of the email package. It does this via the -following implementation of the four+1 Policy methods described above: - -header_source_parse - Splits the first line on the colon to obtain the name, discards any spaces - after the colon, and joins the remainder of the line with all of the - remaining lines, preserving the linesep characters to obtain the value. - Trailing carriage return and/or linefeed characters are stripped from the - resulting value string. - -header_store_parse - Returns the name and value exactly as received from the application. - -header_fetch_parse - If the value contains any `surrogateescaped` binary data, return the value - as a :class:`~email.header.Header` object, using the character set - `unknown-8bit`. Otherwise just returns the value. - -fold - Uses :class:`~email.header.Header`'s folding to fold headers in the - same way the email5.1 generator did. - -binary_fold - Same as fold, but encodes to 'ascii'. - - -New Algorithm -------------- - -header_source_parse - Same as legacy behavior. - -header_store_parse - Same as legacy behavior. - -header_fetch_parse - If the value is already a header object, returns it. Otherwise, parses the - value using the new parser, and returns the resulting object as the value. - `surrogateescaped` bytes get turned into unicode unknown character code - points. - -fold - Uses the new header folding algorithm, respecting the policy settings. - surrogateescaped bytes are encoded using the ``unknown-8bit`` charset for - ``cte_type=7bit`` or ``8bit``. Returns a string. - - At some point there will also be a ``cte_type=unicode``, and for that - policy fold will serialize the idealized unicode message with RFC-like - folding, converting any surrogateescaped bytes into the unicode - unknown character glyph. - -binary_fold - Uses the new header folding algorithm, respecting the policy settings. - surrogateescaped bytes are encoded using the `unknown-8bit` charset for - ``cte_type=7bit``, and get turned back into bytes for ``cte_type=8bit``. - Returns bytes. - - At some point there will also be a ``cte_type=unicode``, and for that - policy binary_fold will serialize the message according to :rfc:``5335``. diff --git a/Python314_4_x86_Template/Lib/email/base64mime.py b/Python314_4_x86_Template/Lib/email/base64mime.py deleted file mode 100644 index a5a3f737a..000000000 --- a/Python314_4_x86_Template/Lib/email/base64mime.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright (C) 2002 Python Software Foundation -# Author: Ben Gertzfield -# Contact: email-sig@python.org - -"""Base64 content transfer encoding per RFCs 2045-2047. - -This module handles the content transfer encoding method defined in RFC 2045 -to encode arbitrary 8-bit data using the three 8-bit bytes in four 7-bit -characters encoding known as Base64. - -It is used in the MIME standards for email to attach images, audio, and text -using some 8-bit character sets to messages. - -This module provides an interface to encode and decode both headers and bodies -with Base64 encoding. - -RFC 2045 defines a method for including character set information in an -'encoded-word' in a header. This method is commonly used for 8-bit real names -in To:, From:, Cc:, etc. fields, as well as Subject: lines. - -This module does not do the line wrapping or end-of-line character conversion -necessary for proper internationalized headers; it only does dumb encoding and -decoding. To deal with the various line wrapping issues, use the email.header -module. -""" - -__all__ = [ - 'body_decode', - 'body_encode', - 'decode', - 'decodestring', - 'header_encode', - 'header_length', - ] - - -from base64 import b64encode -from binascii import b2a_base64, a2b_base64 - -CRLF = '\r\n' -NL = '\n' -EMPTYSTRING = '' - -# See also Charset.py -MISC_LEN = 7 - - -# Helpers -def header_length(bytearray): - """Return the length of s when it is encoded with base64.""" - groups_of_3, leftover = divmod(len(bytearray), 3) - # 4 bytes out for each 3 bytes (or nonzero fraction thereof) in. - n = groups_of_3 * 4 - if leftover: - n += 4 - return n - - -def header_encode(header_bytes, charset='iso-8859-1'): - """Encode a single header line with Base64 encoding in a given charset. - - charset names the character set to use to encode the header. It defaults - to iso-8859-1. Base64 encoding is defined in RFC 2045. - """ - if not header_bytes: - return "" - if isinstance(header_bytes, str): - header_bytes = header_bytes.encode(charset) - encoded = b64encode(header_bytes).decode("ascii") - return '=?%s?b?%s?=' % (charset, encoded) - - -def body_encode(s, maxlinelen=76, eol=NL): - r"""Encode a string with base64. - - Each line will be wrapped at, at most, maxlinelen characters (defaults to - 76 characters). - - Each line of encoded text will end with eol, which defaults to "\n". Set - this to "\r\n" if you will be using the result of this function directly - in an email. - """ - if not s: - return "" - - encvec = [] - max_unencoded = maxlinelen * 3 // 4 - for i in range(0, len(s), max_unencoded): - # BAW: should encode() inherit b2a_base64()'s dubious behavior in - # adding a newline to the encoded string? - enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii") - if enc.endswith(NL) and eol != NL: - enc = enc[:-1] + eol - encvec.append(enc) - return EMPTYSTRING.join(encvec) - - -def decode(string): - """Decode a raw base64 string, returning a bytes object. - - This function does not parse a full MIME header value encoded with - base64 (like =?iso-8859-1?b?bmloISBuaWgh?=) -- please use the high - level email.header class for that functionality. - """ - if not string: - return bytes() - elif isinstance(string, str): - return a2b_base64(string.encode('raw-unicode-escape')) - else: - return a2b_base64(string) - - -# For convenience and backwards compatibility w/ standard base64 module -body_decode = decode -decodestring = decode diff --git a/Python314_4_x86_Template/Lib/email/charset.py b/Python314_4_x86_Template/Lib/email/charset.py deleted file mode 100644 index 5036c3f58..000000000 --- a/Python314_4_x86_Template/Lib/email/charset.py +++ /dev/null @@ -1,398 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Ben Gertzfield, Barry Warsaw -# Contact: email-sig@python.org - -__all__ = [ - 'Charset', - 'add_alias', - 'add_charset', - 'add_codec', - ] - -from functools import partial - -import email.base64mime -import email.quoprimime - -from email import errors -from email.encoders import encode_7or8bit - - -# Flags for types of header encodings -QP = 1 # Quoted-Printable -BASE64 = 2 # Base64 -SHORTEST = 3 # the shorter of QP and base64, but only for headers - -# In "=?charset?q?hello_world?=", the =?, ?q?, and ?= add up to 7 -RFC2047_CHROME_LEN = 7 - -DEFAULT_CHARSET = 'us-ascii' -UNKNOWN8BIT = 'unknown-8bit' -EMPTYSTRING = '' - - -# Defaults -CHARSETS = { - # input header enc body enc output conv - 'iso-8859-1': (QP, QP, None), - 'iso-8859-2': (QP, QP, None), - 'iso-8859-3': (QP, QP, None), - 'iso-8859-4': (QP, QP, None), - # iso-8859-5 is Cyrillic, and not especially used - # iso-8859-6 is Arabic, also not particularly used - # iso-8859-7 is Greek, QP will not make it readable - # iso-8859-8 is Hebrew, QP will not make it readable - 'iso-8859-9': (QP, QP, None), - 'iso-8859-10': (QP, QP, None), - # iso-8859-11 is Thai, QP will not make it readable - 'iso-8859-13': (QP, QP, None), - 'iso-8859-14': (QP, QP, None), - 'iso-8859-15': (QP, QP, None), - 'iso-8859-16': (QP, QP, None), - 'windows-1252':(QP, QP, None), - 'viscii': (QP, QP, None), - 'us-ascii': (None, None, None), - 'big5': (BASE64, BASE64, None), - 'gb2312': (BASE64, BASE64, None), - 'euc-jp': (BASE64, None, 'iso-2022-jp'), - 'shift_jis': (BASE64, None, 'iso-2022-jp'), - 'iso-2022-jp': (BASE64, None, None), - 'koi8-r': (BASE64, BASE64, None), - 'utf-8': (SHORTEST, BASE64, 'utf-8'), - } - -# Aliases for other commonly-used names for character sets. Map -# them to the real ones used in email. -ALIASES = { - 'latin_1': 'iso-8859-1', - 'latin-1': 'iso-8859-1', - 'latin_2': 'iso-8859-2', - 'latin-2': 'iso-8859-2', - 'latin_3': 'iso-8859-3', - 'latin-3': 'iso-8859-3', - 'latin_4': 'iso-8859-4', - 'latin-4': 'iso-8859-4', - 'latin_5': 'iso-8859-9', - 'latin-5': 'iso-8859-9', - 'latin_6': 'iso-8859-10', - 'latin-6': 'iso-8859-10', - 'latin_7': 'iso-8859-13', - 'latin-7': 'iso-8859-13', - 'latin_8': 'iso-8859-14', - 'latin-8': 'iso-8859-14', - 'latin_9': 'iso-8859-15', - 'latin-9': 'iso-8859-15', - 'latin_10':'iso-8859-16', - 'latin-10':'iso-8859-16', - 'cp949': 'ks_c_5601-1987', - 'euc_jp': 'euc-jp', - 'euc_kr': 'euc-kr', - 'ascii': 'us-ascii', - } - - -# Map charsets to their Unicode codec strings. -CODEC_MAP = { - 'gb2312': 'eucgb2312_cn', - 'big5': 'big5_tw', - # Hack: We don't want *any* conversion for stuff marked us-ascii, as all - # sorts of garbage might be sent to us in the guise of 7-bit us-ascii. - # Let that stuff pass through without conversion to/from Unicode. - 'us-ascii': None, - } - - -# Convenience functions for extending the above mappings -def add_charset(charset, header_enc=None, body_enc=None, output_charset=None): - """Add character set properties to the global registry. - - charset is the input character set, and must be the canonical name of a - character set. - - Optional header_enc and body_enc is either charset.QP for - quoted-printable, charset.BASE64 for base64 encoding, charset.SHORTEST for - the shortest of qp or base64 encoding, or None for no encoding. SHORTEST - is only valid for header_enc. It describes how message headers and - message bodies in the input charset are to be encoded. Default is no - encoding. - - Optional output_charset is the character set that the output should be - in. Conversions will proceed from input charset, to Unicode, to the - output charset when the method Charset.convert() is called. The default - is to output in the same character set as the input. - - Both input_charset and output_charset must have Unicode codec entries in - the module's charset-to-codec mapping; use add_codec(charset, codecname) - to add codecs the module does not know about. See the codecs module's - documentation for more information. - """ - if body_enc == SHORTEST: - raise ValueError('SHORTEST not allowed for body_enc') - CHARSETS[charset] = (header_enc, body_enc, output_charset) - - -def add_alias(alias, canonical): - """Add a character set alias. - - alias is the alias name, e.g. latin-1 - canonical is the character set's canonical name, e.g. iso-8859-1 - """ - ALIASES[alias] = canonical - - -def add_codec(charset, codecname): - """Add a codec that map characters in the given charset to/from Unicode. - - charset is the canonical name of a character set. codecname is the name - of a Python codec, as appropriate for the second argument to the unicode() - built-in, or to the encode() method of a Unicode string. - """ - CODEC_MAP[charset] = codecname - - -# Convenience function for encoding strings, taking into account -# that they might be unknown-8bit (ie: have surrogate-escaped bytes) -def _encode(string, codec): - if codec == UNKNOWN8BIT: - return string.encode('ascii', 'surrogateescape') - else: - return string.encode(codec) - - -class Charset: - """Map character sets to their email properties. - - This class provides information about the requirements imposed on email - for a specific character set. It also provides convenience routines for - converting between character sets, given the availability of the - applicable codecs. Given a character set, it will do its best to provide - information on how to use that character set in an email in an - RFC-compliant way. - - Certain character sets must be encoded with quoted-printable or base64 - when used in email headers or bodies. Certain character sets must be - converted outright, and are not allowed in email. Instances of this - module expose the following information about a character set: - - input_charset: The initial character set specified. Common aliases - are converted to their 'official' email names (e.g. latin_1 - is converted to iso-8859-1). Defaults to 7-bit us-ascii. - - header_encoding: If the character set must be encoded before it can be - used in an email header, this attribute will be set to - charset.QP (for quoted-printable), charset.BASE64 (for - base64 encoding), or charset.SHORTEST for the shortest of - QP or BASE64 encoding. Otherwise, it will be None. - - body_encoding: Same as header_encoding, but describes the encoding for the - mail message's body, which indeed may be different than the - header encoding. charset.SHORTEST is not allowed for - body_encoding. - - output_charset: Some character sets must be converted before they can be - used in email headers or bodies. If the input_charset is - one of them, this attribute will contain the name of the - charset output will be converted to. Otherwise, it will - be None. - - input_codec: The name of the Python codec used to convert the - input_charset to Unicode. If no conversion codec is - necessary, this attribute will be None. - - output_codec: The name of the Python codec used to convert Unicode - to the output_charset. If no conversion codec is necessary, - this attribute will have the same value as the input_codec. - """ - def __init__(self, input_charset=DEFAULT_CHARSET): - # RFC 2046, $4.1.2 says charsets are not case sensitive. We coerce to - # unicode because its .lower() is locale insensitive. If the argument - # is already a unicode, we leave it at that, but ensure that the - # charset is ASCII, as the standard (RFC XXX) requires. - try: - if isinstance(input_charset, str): - input_charset.encode('ascii') - else: - input_charset = str(input_charset, 'ascii') - except UnicodeError: - raise errors.CharsetError(input_charset) - input_charset = input_charset.lower() - # Set the input charset after filtering through the aliases - self.input_charset = ALIASES.get(input_charset, input_charset) - # We can try to guess which encoding and conversion to use by the - # charset_map dictionary. Try that first, but let the user override - # it. - henc, benc, conv = CHARSETS.get(self.input_charset, - (SHORTEST, BASE64, None)) - if not conv: - conv = self.input_charset - # Set the attributes, allowing the arguments to override the default. - self.header_encoding = henc - self.body_encoding = benc - self.output_charset = ALIASES.get(conv, conv) - # Now set the codecs. If one isn't defined for input_charset, - # guess and try a Unicode codec with the same name as input_codec. - self.input_codec = CODEC_MAP.get(self.input_charset, - self.input_charset) - self.output_codec = CODEC_MAP.get(self.output_charset, - self.output_charset) - - def __repr__(self): - return self.input_charset.lower() - - def __eq__(self, other): - return str(self) == str(other).lower() - - def get_body_encoding(self): - """Return the content-transfer-encoding used for body encoding. - - This is either the string 'quoted-printable' or 'base64' depending on - the encoding used, or it is a function in which case you should call - the function with a single argument, the Message object being - encoded. The function should then set the Content-Transfer-Encoding - header itself to whatever is appropriate. - - Returns "quoted-printable" if self.body_encoding is QP. - Returns "base64" if self.body_encoding is BASE64. - Returns conversion function otherwise. - """ - assert self.body_encoding != SHORTEST - if self.body_encoding == QP: - return 'quoted-printable' - elif self.body_encoding == BASE64: - return 'base64' - else: - return encode_7or8bit - - def get_output_charset(self): - """Return the output character set. - - This is self.output_charset if that is not None, otherwise it is - self.input_charset. - """ - return self.output_charset or self.input_charset - - def header_encode(self, string): - """Header-encode a string by converting it first to bytes. - - The type of encoding (base64 or quoted-printable) will be based on - this charset's `header_encoding`. - - :param string: A unicode string for the header. It must be possible - to encode this string to bytes using the character set's - output codec. - :return: The encoded string, with RFC 2047 chrome. - """ - codec = self.output_codec or 'us-ascii' - header_bytes = _encode(string, codec) - # 7bit/8bit encodings return the string unchanged (modulo conversions) - encoder_module = self._get_encoder(header_bytes) - if encoder_module is None: - return string - return encoder_module.header_encode(header_bytes, codec) - - def header_encode_lines(self, string, maxlengths): - """Header-encode a string by converting it first to bytes. - - This is similar to `header_encode()` except that the string is fit - into maximum line lengths as given by the argument. - - :param string: A unicode string for the header. It must be possible - to encode this string to bytes using the character set's - output codec. - :param maxlengths: Maximum line length iterator. Each element - returned from this iterator will provide the next maximum line - length. This parameter is used as an argument to built-in next() - and should never be exhausted. The maximum line lengths should - not count the RFC 2047 chrome. These line lengths are only a - hint; the splitter does the best it can. - :return: Lines of encoded strings, each with RFC 2047 chrome. - """ - # See which encoding we should use. - codec = self.output_codec or 'us-ascii' - header_bytes = _encode(string, codec) - encoder_module = self._get_encoder(header_bytes) - encoder = partial(encoder_module.header_encode, charset=codec) - # Calculate the number of characters that the RFC 2047 chrome will - # contribute to each line. - charset = self.get_output_charset() - extra = len(charset) + RFC2047_CHROME_LEN - # Now comes the hard part. We must encode bytes but we can't split on - # bytes because some character sets are variable length and each - # encoded word must stand on its own. So the problem is you have to - # encode to bytes to figure out this word's length, but you must split - # on characters. This causes two problems: first, we don't know how - # many octets a specific substring of unicode characters will get - # encoded to, and second, we don't know how many ASCII characters - # those octets will get encoded to. Unless we try it. Which seems - # inefficient. In the interest of being correct rather than fast (and - # in the hope that there will be few encoded headers in any such - # message), brute force it. :( - lines = [] - current_line = [] - maxlen = next(maxlengths) - extra - for character in string: - current_line.append(character) - this_line = EMPTYSTRING.join(current_line) - length = encoder_module.header_length(_encode(this_line, charset)) - if length > maxlen: - # This last character doesn't fit so pop it off. - current_line.pop() - # Does nothing fit on the first line? - if not lines and not current_line: - lines.append(None) - else: - joined_line = EMPTYSTRING.join(current_line) - header_bytes = _encode(joined_line, codec) - lines.append(encoder(header_bytes)) - current_line = [character] - maxlen = next(maxlengths) - extra - joined_line = EMPTYSTRING.join(current_line) - header_bytes = _encode(joined_line, codec) - lines.append(encoder(header_bytes)) - return lines - - def _get_encoder(self, header_bytes): - if self.header_encoding == BASE64: - return email.base64mime - elif self.header_encoding == QP: - return email.quoprimime - elif self.header_encoding == SHORTEST: - len64 = email.base64mime.header_length(header_bytes) - lenqp = email.quoprimime.header_length(header_bytes) - if len64 < lenqp: - return email.base64mime - else: - return email.quoprimime - else: - return None - - def body_encode(self, string): - """Body-encode a string by converting it first to bytes. - - The type of encoding (base64 or quoted-printable) will be based on - self.body_encoding. If body_encoding is None, we assume the - output charset is a 7bit encoding, so re-encoding the decoded - string using the ascii codec produces the correct string version - of the content. - """ - if not string: - return string - if self.body_encoding is BASE64: - if isinstance(string, str): - string = string.encode(self.output_charset) - return email.base64mime.body_encode(string) - elif self.body_encoding is QP: - # quopromime.body_encode takes a string, but operates on it as if - # it were a list of byte codes. For a (minimal) history on why - # this is so, see changeset 0cf700464177. To correctly encode a - # character set, then, we must turn it into pseudo bytes via the - # latin1 charset, which will encode any byte as a single code point - # between 0 and 255, which is what body_encode is expecting. - if isinstance(string, str): - string = string.encode(self.output_charset) - string = string.decode('latin1') - return email.quoprimime.body_encode(string) - else: - if isinstance(string, str): - string = string.encode(self.output_charset).decode('ascii') - return string diff --git a/Python314_4_x86_Template/Lib/email/contentmanager.py b/Python314_4_x86_Template/Lib/email/contentmanager.py deleted file mode 100644 index 11d1536db..000000000 --- a/Python314_4_x86_Template/Lib/email/contentmanager.py +++ /dev/null @@ -1,253 +0,0 @@ -import binascii -import email.charset -import email.message -import email.errors -import sys -from email import quoprimime - -class ContentManager: - - def __init__(self): - self.get_handlers = {} - self.set_handlers = {} - - def add_get_handler(self, key, handler): - self.get_handlers[key] = handler - - def get_content(self, msg, *args, **kw): - content_type = msg.get_content_type() - if content_type in self.get_handlers: - return self.get_handlers[content_type](msg, *args, **kw) - maintype = msg.get_content_maintype() - if maintype in self.get_handlers: - return self.get_handlers[maintype](msg, *args, **kw) - if '' in self.get_handlers: - return self.get_handlers[''](msg, *args, **kw) - raise KeyError(content_type) - - def add_set_handler(self, typekey, handler): - self.set_handlers[typekey] = handler - - def set_content(self, msg, obj, *args, **kw): - if msg.get_content_maintype() == 'multipart': - # XXX: is this error a good idea or not? We can remove it later, - # but we can't add it later, so do it for now. - raise TypeError("set_content not valid on multipart") - handler = self._find_set_handler(msg, obj) - msg.clear_content() - handler(msg, obj, *args, **kw) - - def _find_set_handler(self, msg, obj): - full_path_for_error = None - for typ in type(obj).__mro__: - if typ in self.set_handlers: - return self.set_handlers[typ] - qname = typ.__qualname__ - modname = getattr(typ, '__module__', '') - full_path = '.'.join((modname, qname)) if modname else qname - if full_path_for_error is None: - full_path_for_error = full_path - if full_path in self.set_handlers: - return self.set_handlers[full_path] - if qname in self.set_handlers: - return self.set_handlers[qname] - name = typ.__name__ - if name in self.set_handlers: - return self.set_handlers[name] - if None in self.set_handlers: - return self.set_handlers[None] - raise KeyError(full_path_for_error) - - -raw_data_manager = ContentManager() - - -def get_text_content(msg, errors='replace'): - content = msg.get_payload(decode=True) - charset = msg.get_param('charset', 'ASCII') - return content.decode(charset, errors=errors) -raw_data_manager.add_get_handler('text', get_text_content) - - -def get_non_text_content(msg): - return msg.get_payload(decode=True) -for maintype in 'audio image video application'.split(): - raw_data_manager.add_get_handler(maintype, get_non_text_content) -del maintype - - -def get_message_content(msg): - return msg.get_payload(0) -for subtype in 'rfc822 external-body'.split(): - raw_data_manager.add_get_handler('message/'+subtype, get_message_content) -del subtype - - -def get_and_fixup_unknown_message_content(msg): - # If we don't understand a message subtype, we are supposed to treat it as - # if it were application/octet-stream, per - # tools.ietf.org/html/rfc2046#section-5.2.4. Feedparser doesn't do that, - # so do our best to fix things up. Note that it is *not* appropriate to - # model message/partial content as Message objects, so they are handled - # here as well. (How to reassemble them is out of scope for this comment :) - return bytes(msg.get_payload(0)) -raw_data_manager.add_get_handler('message', - get_and_fixup_unknown_message_content) - - -def _prepare_set(msg, maintype, subtype, headers): - msg['Content-Type'] = '/'.join((maintype, subtype)) - if headers: - if not hasattr(headers[0], 'name'): - mp = msg.policy - headers = [mp.header_factory(*mp.header_source_parse([header])) - for header in headers] - try: - for header in headers: - if header.defects: - raise header.defects[0] - msg[header.name] = header - except email.errors.HeaderDefect as exc: - raise ValueError("Invalid header: {}".format( - header.fold(policy=msg.policy))) from exc - - -def _finalize_set(msg, disposition, filename, cid, params): - if disposition is None and filename is not None: - disposition = 'attachment' - if disposition is not None: - msg['Content-Disposition'] = disposition - if filename is not None: - msg.set_param('filename', - filename, - header='Content-Disposition', - replace=True) - if cid is not None: - msg['Content-ID'] = cid - if params is not None: - for key, value in params.items(): - msg.set_param(key, value) - - -# XXX: This is a cleaned-up version of base64mime.body_encode (including a bug -# fix in the calculation of unencoded_bytes_per_line). It would be nice to -# drop both this and quoprimime.body_encode in favor of enhanced binascii -# routines that accepted a max_line_length parameter. -def _encode_base64(data, max_line_length): - encoded_lines = [] - unencoded_bytes_per_line = max_line_length // 4 * 3 - for i in range(0, len(data), unencoded_bytes_per_line): - thisline = data[i:i+unencoded_bytes_per_line] - encoded_lines.append(binascii.b2a_base64(thisline).decode('ascii')) - return ''.join(encoded_lines) - - -def _encode_text(string, charset, cte, policy): - # If max_line_length is 0 or None, there is no limit. - maxlen = policy.max_line_length or sys.maxsize - lines = string.encode(charset).splitlines() - linesep = policy.linesep.encode('ascii') - def embedded_body(lines): return linesep.join(lines) + linesep - def normal_body(lines): return b'\n'.join(lines) + b'\n' - if cte is None: - # Use heuristics to decide on the "best" encoding. - if max(map(len, lines), default=0) <= maxlen: - try: - return '7bit', normal_body(lines).decode('ascii') - except UnicodeDecodeError: - pass - if policy.cte_type == '8bit': - return '8bit', normal_body(lines).decode('ascii', 'surrogateescape') - sniff = embedded_body(lines[:10]) - sniff_qp = quoprimime.body_encode(sniff.decode('latin-1'), maxlen) - sniff_base64 = binascii.b2a_base64(sniff) - # This is a little unfair to qp; it includes lineseps, base64 doesn't. - if len(sniff_qp) > len(sniff_base64): - cte = 'base64' - else: - cte = 'quoted-printable' - if len(lines) <= 10: - return cte, sniff_qp - if cte == '7bit': - data = normal_body(lines).decode('ascii') - elif cte == '8bit': - data = normal_body(lines).decode('ascii', 'surrogateescape') - elif cte == 'quoted-printable': - data = quoprimime.body_encode(normal_body(lines).decode('latin-1'), - maxlen) - elif cte == 'base64': - data = _encode_base64(embedded_body(lines), maxlen) - else: - raise ValueError("Unknown content transfer encoding {}".format(cte)) - return cte, data - - -def set_text_content(msg, string, subtype="plain", charset='utf-8', cte=None, - disposition=None, filename=None, cid=None, - params=None, headers=None): - _prepare_set(msg, 'text', subtype, headers) - cte, payload = _encode_text(string, charset, cte, msg.policy) - msg.set_payload(payload) - msg.set_param('charset', - email.charset.ALIASES.get(charset, charset), - replace=True) - msg['Content-Transfer-Encoding'] = cte - _finalize_set(msg, disposition, filename, cid, params) -raw_data_manager.add_set_handler(str, set_text_content) - - -def set_message_content(msg, message, subtype="rfc822", cte=None, - disposition=None, filename=None, cid=None, - params=None, headers=None): - if subtype == 'partial': - raise ValueError("message/partial is not supported for Message objects") - if subtype == 'rfc822': - if cte not in (None, '7bit', '8bit', 'binary'): - # http://tools.ietf.org/html/rfc2046#section-5.2.1 mandate. - raise ValueError( - "message/rfc822 parts do not support cte={}".format(cte)) - # 8bit will get coerced on serialization if policy.cte_type='7bit'. We - # may end up claiming 8bit when it isn't needed, but the only negative - # result of that should be a gateway that needs to coerce to 7bit - # having to look through the whole embedded message to discover whether - # or not it actually has to do anything. - cte = '8bit' if cte is None else cte - elif subtype == 'external-body': - if cte not in (None, '7bit'): - # http://tools.ietf.org/html/rfc2046#section-5.2.3 mandate. - raise ValueError( - "message/external-body parts do not support cte={}".format(cte)) - cte = '7bit' - elif cte is None: - # http://tools.ietf.org/html/rfc2046#section-5.2.4 says all future - # subtypes should be restricted to 7bit, so assume that. - cte = '7bit' - _prepare_set(msg, 'message', subtype, headers) - msg.set_payload([message]) - msg['Content-Transfer-Encoding'] = cte - _finalize_set(msg, disposition, filename, cid, params) -raw_data_manager.add_set_handler(email.message.Message, set_message_content) - - -def set_bytes_content(msg, data, maintype, subtype, cte='base64', - disposition=None, filename=None, cid=None, - params=None, headers=None): - _prepare_set(msg, maintype, subtype, headers) - if cte == 'base64': - data = _encode_base64(data, max_line_length=msg.policy.max_line_length) - elif cte == 'quoted-printable': - # XXX: quoprimime.body_encode won't encode newline characters in data, - # so we can't use it. This means max_line_length is ignored. Another - # bug to fix later. (Note: encoders.quopri is broken on line ends.) - data = binascii.b2a_qp(data, istext=False, header=False, quotetabs=True) - data = data.decode('ascii') - elif cte == '7bit': - data = data.decode('ascii') - elif cte in ('8bit', 'binary'): - data = data.decode('ascii', 'surrogateescape') - msg.set_payload(data) - msg['Content-Transfer-Encoding'] = cte - _finalize_set(msg, disposition, filename, cid, params) -for typ in (bytes, bytearray, memoryview): - raw_data_manager.add_set_handler(typ, set_bytes_content) -del typ diff --git a/Python314_4_x86_Template/Lib/email/encoders.py b/Python314_4_x86_Template/Lib/email/encoders.py deleted file mode 100644 index 55741a22a..000000000 --- a/Python314_4_x86_Template/Lib/email/encoders.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Encodings and related functions.""" - -__all__ = [ - 'encode_7or8bit', - 'encode_base64', - 'encode_noop', - 'encode_quopri', - ] - - -from base64 import encodebytes as _bencode -from quopri import encodestring as _encodestring - - -def _qencode(s): - enc = _encodestring(s, quotetabs=True) - # Must encode spaces, which quopri.encodestring() doesn't do - return enc.replace(b' ', b'=20') - - -def encode_base64(msg): - """Encode the message's payload in Base64. - - Also, add an appropriate Content-Transfer-Encoding header. - """ - orig = msg.get_payload(decode=True) - encdata = str(_bencode(orig), 'ascii') - msg.set_payload(encdata) - msg['Content-Transfer-Encoding'] = 'base64' - - -def encode_quopri(msg): - """Encode the message's payload in quoted-printable. - - Also, add an appropriate Content-Transfer-Encoding header. - """ - orig = msg.get_payload(decode=True) - encdata = _qencode(orig) - msg.set_payload(encdata) - msg['Content-Transfer-Encoding'] = 'quoted-printable' - - -def encode_7or8bit(msg): - """Set the Content-Transfer-Encoding header to 7bit or 8bit.""" - orig = msg.get_payload(decode=True) - if orig is None: - # There's no payload. For backwards compatibility we use 7bit - msg['Content-Transfer-Encoding'] = '7bit' - return - # We play a trick to make this go fast. If decoding from ASCII succeeds, - # we know the data must be 7bit, otherwise treat it as 8bit. - try: - orig.decode('ascii') - except UnicodeError: - msg['Content-Transfer-Encoding'] = '8bit' - else: - msg['Content-Transfer-Encoding'] = '7bit' - - -def encode_noop(msg): - """Do nothing.""" diff --git a/Python314_4_x86_Template/Lib/email/errors.py b/Python314_4_x86_Template/Lib/email/errors.py deleted file mode 100644 index 6bc744bd5..000000000 --- a/Python314_4_x86_Template/Lib/email/errors.py +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""email package exception classes.""" - - -class MessageError(Exception): - """Base class for errors in the email package.""" - - -class MessageParseError(MessageError): - """Base class for message parsing errors.""" - - -class HeaderParseError(MessageParseError): - """Error while parsing headers.""" - - -class BoundaryError(MessageParseError): - """Couldn't find terminating boundary.""" - - -class MultipartConversionError(MessageError, TypeError): - """Conversion to a multipart is prohibited.""" - - -class CharsetError(MessageError): - """An illegal charset was given.""" - - -class HeaderWriteError(MessageError): - """Error while writing headers.""" - - -# These are parsing defects which the parser was able to work around. -class MessageDefect(ValueError): - """Base class for a message defect.""" - - def __init__(self, line=None): - if line is not None: - super().__init__(line) - self.line = line - -class NoBoundaryInMultipartDefect(MessageDefect): - """A message claimed to be a multipart but had no boundary parameter.""" - -class StartBoundaryNotFoundDefect(MessageDefect): - """The claimed start boundary was never found.""" - -class CloseBoundaryNotFoundDefect(MessageDefect): - """A start boundary was found, but not the corresponding close boundary.""" - -class FirstHeaderLineIsContinuationDefect(MessageDefect): - """A message had a continuation line as its first header line.""" - -class MisplacedEnvelopeHeaderDefect(MessageDefect): - """A 'Unix-from' header was found in the middle of a header block.""" - -class MissingHeaderBodySeparatorDefect(MessageDefect): - """Found line with no leading whitespace and no colon before blank line.""" -# XXX: backward compatibility, just in case (it was never emitted). -MalformedHeaderDefect = MissingHeaderBodySeparatorDefect - -class MultipartInvariantViolationDefect(MessageDefect): - """A message claimed to be a multipart but no subparts were found.""" - -class InvalidMultipartContentTransferEncodingDefect(MessageDefect): - """An invalid content transfer encoding was set on the multipart itself.""" - -class UndecodableBytesDefect(MessageDefect): - """Header contained bytes that could not be decoded""" - -class InvalidBase64PaddingDefect(MessageDefect): - """base64 encoded sequence had an incorrect length""" - -class InvalidBase64CharactersDefect(MessageDefect): - """base64 encoded sequence had characters not in base64 alphabet""" - -class InvalidBase64LengthDefect(MessageDefect): - """base64 encoded sequence had invalid length (1 mod 4)""" - -# These errors are specific to header parsing. - -class HeaderDefect(MessageDefect): - """Base class for a header defect.""" - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - -class InvalidHeaderDefect(HeaderDefect): - """Header is not valid, message gives details.""" - -class HeaderMissingRequiredValue(HeaderDefect): - """A header that must have a value had none""" - -class NonPrintableDefect(HeaderDefect): - """ASCII characters outside the ascii-printable range found""" - - def __init__(self, non_printables): - super().__init__(non_printables) - self.non_printables = non_printables - - def __str__(self): - return ("the following ASCII non-printables found in header: " - "{}".format(self.non_printables)) - -class ObsoleteHeaderDefect(HeaderDefect): - """Header uses syntax declared obsolete by RFC 5322""" - -class NonASCIILocalPartDefect(HeaderDefect): - """local_part contains non-ASCII characters""" - # This defect only occurs during unicode parsing, not when - # parsing messages decoded from binary. - -class InvalidDateDefect(HeaderDefect): - """Header has unparsable or invalid date""" diff --git a/Python314_4_x86_Template/Lib/email/feedparser.py b/Python314_4_x86_Template/Lib/email/feedparser.py deleted file mode 100644 index ae8ef3279..000000000 --- a/Python314_4_x86_Template/Lib/email/feedparser.py +++ /dev/null @@ -1,536 +0,0 @@ -# Copyright (C) 2004 Python Software Foundation -# Authors: Baxter, Wouters and Warsaw -# Contact: email-sig@python.org - -"""FeedParser - An email feed parser. - -The feed parser implements an interface for incrementally parsing an email -message, line by line. This has advantages for certain applications, such as -those reading email messages off a socket. - -FeedParser.feed() is the primary interface for pushing new data into the -parser. It returns when there's nothing more it can do with the available -data. When you have no more data to push into the parser, call .close(). -This completes the parsing and returns the root message object. - -The other advantage of this parser is that it will never raise a parsing -exception. Instead, when it finds something unexpected, it adds a 'defect' to -the current message. Defects are just instances that live on the message -object's .defects attribute. -""" - -__all__ = ['FeedParser', 'BytesFeedParser'] - -import re - -from email import errors -from email._policybase import compat32 -from collections import deque -from io import StringIO - -NLCRE = re.compile(r'\r\n|\r|\n') -NLCRE_bol = re.compile(r'(\r\n|\r|\n)') -NLCRE_eol = re.compile(r'(\r\n|\r|\n)\z') -NLCRE_crack = re.compile(r'(\r\n|\r|\n)') -# RFC 5322 section 3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character -# except controls, SP, and ":". -headerRE = re.compile(r'^(From |[\041-\071\073-\176]*:|[\t ])') -EMPTYSTRING = '' -NL = '\n' -boundaryendRE = re.compile( - r'(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$') - -NeedMoreData = object() - - -class BufferedSubFile(object): - """A file-ish object that can have new data loaded into it. - - You can also push and pop line-matching predicates onto a stack. When the - current predicate matches the current line, a false EOF response - (i.e. empty string) is returned instead. This lets the parser adhere to a - simple abstraction -- it parses until EOF closes the current message. - """ - def __init__(self): - # Text stream of the last partial line pushed into this object. - # See issue 22233 for why this is a text stream and not a list. - self._partial = StringIO(newline='') - # A deque of full, pushed lines - self._lines = deque() - # The stack of false-EOF checking predicates. - self._eofstack = [] - # A flag indicating whether the file has been closed or not. - self._closed = False - - def push_eof_matcher(self, pred): - self._eofstack.append(pred) - - def pop_eof_matcher(self): - return self._eofstack.pop() - - def close(self): - # Don't forget any trailing partial line. - self._partial.seek(0) - self.pushlines(self._partial.readlines()) - self._partial.seek(0) - self._partial.truncate() - self._closed = True - - def readline(self): - if not self._lines: - if self._closed: - return '' - return NeedMoreData - # Pop the line off the stack and see if it matches the current - # false-EOF predicate. - line = self._lines.popleft() - # RFC 2046, section 5.1.2 requires us to recognize outer level - # boundaries at any level of inner nesting. Do this, but be sure it's - # in the order of most to least nested. - for ateof in reversed(self._eofstack): - if ateof(line): - # We're at the false EOF. But push the last line back first. - self._lines.appendleft(line) - return '' - return line - - def unreadline(self, line): - # Let the consumer push a line back into the buffer. - assert line is not NeedMoreData - self._lines.appendleft(line) - - def push(self, data): - """Push some new data into this object.""" - self._partial.write(data) - if '\n' not in data and '\r' not in data: - # No new complete lines, wait for more. - return - - # Crack into lines, preserving the linesep characters. - self._partial.seek(0) - parts = self._partial.readlines() - self._partial.seek(0) - self._partial.truncate() - - # If the last element of the list does not end in a newline, then treat - # it as a partial line. We only check for '\n' here because a line - # ending with '\r' might be a line that was split in the middle of a - # '\r\n' sequence (see bugs 1555570 and 1721862). - if not parts[-1].endswith('\n'): - self._partial.write(parts.pop()) - self.pushlines(parts) - - def pushlines(self, lines): - self._lines.extend(lines) - - def __iter__(self): - return self - - def __next__(self): - line = self.readline() - if line == '': - raise StopIteration - return line - - -class FeedParser: - """A feed-style parser of email.""" - - def __init__(self, _factory=None, *, policy=compat32): - """_factory is called with no arguments to create a new message obj - - The policy keyword specifies a policy object that controls a number of - aspects of the parser's operation. The default policy maintains - backward compatibility. - - """ - self.policy = policy - self._old_style_factory = False - if _factory is None: - if policy.message_factory is None: - from email.message import Message - self._factory = Message - else: - self._factory = policy.message_factory - else: - self._factory = _factory - try: - _factory(policy=self.policy) - except TypeError: - # Assume this is an old-style factory - self._old_style_factory = True - self._input = BufferedSubFile() - self._msgstack = [] - self._parse = self._parsegen().__next__ - self._cur = None - self._last = None - self._headersonly = False - - # Non-public interface for supporting Parser's headersonly flag - def _set_headersonly(self): - self._headersonly = True - - def feed(self, data): - """Push more data into the parser.""" - self._input.push(data) - self._call_parse() - - def _call_parse(self): - try: - self._parse() - except StopIteration: - pass - - def close(self): - """Parse all remaining data and return the root message object.""" - self._input.close() - self._call_parse() - root = self._pop_message() - assert not self._msgstack - # Look for final set of defects - if root.get_content_maintype() == 'multipart' \ - and not root.is_multipart() and not self._headersonly: - defect = errors.MultipartInvariantViolationDefect() - self.policy.handle_defect(root, defect) - return root - - def _new_message(self): - if self._old_style_factory: - msg = self._factory() - else: - msg = self._factory(policy=self.policy) - if self._cur and self._cur.get_content_type() == 'multipart/digest': - msg.set_default_type('message/rfc822') - if self._msgstack: - self._msgstack[-1].attach(msg) - self._msgstack.append(msg) - self._cur = msg - self._last = msg - - def _pop_message(self): - retval = self._msgstack.pop() - if self._msgstack: - self._cur = self._msgstack[-1] - else: - self._cur = None - return retval - - def _parsegen(self): - # Create a new message and start by parsing headers. - self._new_message() - headers = [] - # Collect the headers, searching for a line that doesn't match the RFC - # 2822 header or continuation pattern (including an empty line). - for line in self._input: - if line is NeedMoreData: - yield NeedMoreData - continue - if not headerRE.match(line): - # If we saw the RFC defined header/body separator - # (i.e. newline), just throw it away. Otherwise the line is - # part of the body so push it back. - if not NLCRE.match(line): - defect = errors.MissingHeaderBodySeparatorDefect() - self.policy.handle_defect(self._cur, defect) - self._input.unreadline(line) - break - headers.append(line) - # Done with the headers, so parse them and figure out what we're - # supposed to see in the body of the message. - self._parse_headers(headers) - # Headers-only parsing is a backwards compatibility hack, which was - # necessary in the older parser, which could raise errors. All - # remaining lines in the input are thrown into the message body. - if self._headersonly: - lines = [] - while True: - line = self._input.readline() - if line is NeedMoreData: - yield NeedMoreData - continue - if line == '': - break - lines.append(line) - self._cur.set_payload(EMPTYSTRING.join(lines)) - return - if self._cur.get_content_type() == 'message/delivery-status': - # message/delivery-status contains blocks of headers separated by - # a blank line. We'll represent each header block as a separate - # nested message object, but the processing is a bit different - # than standard message/* types because there is no body for the - # nested messages. A blank line separates the subparts. - while True: - self._input.push_eof_matcher(NLCRE.match) - for retval in self._parsegen(): - if retval is NeedMoreData: - yield NeedMoreData - continue - break - self._pop_message() - # We need to pop the EOF matcher in order to tell if we're at - # the end of the current file, not the end of the last block - # of message headers. - self._input.pop_eof_matcher() - # The input stream must be sitting at the newline or at the - # EOF. We want to see if we're at the end of this subpart, so - # first consume the blank line, then test the next line to see - # if we're at this subpart's EOF. - while True: - line = self._input.readline() - if line is NeedMoreData: - yield NeedMoreData - continue - break - while True: - line = self._input.readline() - if line is NeedMoreData: - yield NeedMoreData - continue - break - if line == '': - break - # Not at EOF so this is a line we're going to need. - self._input.unreadline(line) - return - if self._cur.get_content_maintype() == 'message': - # The message claims to be a message/* type, then what follows is - # another RFC 5322 message. - for retval in self._parsegen(): - if retval is NeedMoreData: - yield NeedMoreData - continue - break - self._pop_message() - return - if self._cur.get_content_maintype() == 'multipart': - boundary = self._cur.get_boundary() - if boundary is None: - # The message /claims/ to be a multipart but it has not - # defined a boundary. That's a problem which we'll handle by - # reading everything until the EOF and marking the message as - # defective. - defect = errors.NoBoundaryInMultipartDefect() - self.policy.handle_defect(self._cur, defect) - lines = [] - for line in self._input: - if line is NeedMoreData: - yield NeedMoreData - continue - lines.append(line) - self._cur.set_payload(EMPTYSTRING.join(lines)) - return - # Make sure a valid content type was specified per RFC 2045:6.4. - if (str(self._cur.get('content-transfer-encoding', '8bit')).lower() - not in ('7bit', '8bit', 'binary')): - defect = errors.InvalidMultipartContentTransferEncodingDefect() - self.policy.handle_defect(self._cur, defect) - # Create a line match predicate which matches the inter-part - # boundary as well as the end-of-multipart boundary. Don't push - # this onto the input stream until we've scanned past the - # preamble. - separator = '--' + boundary - def boundarymatch(line): - if not line.startswith(separator): - return None - return boundaryendRE.match(line, len(separator)) - capturing_preamble = True - preamble = [] - linesep = False - close_boundary_seen = False - while True: - line = self._input.readline() - if line is NeedMoreData: - yield NeedMoreData - continue - if line == '': - break - mo = boundarymatch(line) - if mo: - # If we're looking at the end boundary, we're done with - # this multipart. If there was a newline at the end of - # the closing boundary, then we need to initialize the - # epilogue with the empty string (see below). - if mo.group('end'): - close_boundary_seen = True - linesep = mo.group('linesep') - break - # We saw an inter-part boundary. Were we in the preamble? - if capturing_preamble: - if preamble: - # According to RFC 2046, the last newline belongs - # to the boundary. - lastline = preamble[-1] - eolmo = NLCRE_eol.search(lastline) - if eolmo: - preamble[-1] = lastline[:-len(eolmo.group(0))] - self._cur.preamble = EMPTYSTRING.join(preamble) - capturing_preamble = False - self._input.unreadline(line) - continue - # We saw a boundary separating two parts. Consume any - # multiple boundary lines that may be following. Our - # interpretation of RFC 2046 BNF grammar does not produce - # body parts within such double boundaries. - while True: - line = self._input.readline() - if line is NeedMoreData: - yield NeedMoreData - continue - mo = boundarymatch(line) - if not mo: - self._input.unreadline(line) - break - # Recurse to parse this subpart; the input stream points - # at the subpart's first line. - self._input.push_eof_matcher(boundarymatch) - for retval in self._parsegen(): - if retval is NeedMoreData: - yield NeedMoreData - continue - break - # Because of RFC 2046, the newline preceding the boundary - # separator actually belongs to the boundary, not the - # previous subpart's payload (or epilogue if the previous - # part is a multipart). - if self._last.get_content_maintype() == 'multipart': - epilogue = self._last.epilogue - if epilogue == '': - self._last.epilogue = None - elif epilogue is not None: - mo = NLCRE_eol.search(epilogue) - if mo: - end = len(mo.group(0)) - self._last.epilogue = epilogue[:-end] - else: - payload = self._last._payload - if isinstance(payload, str): - mo = NLCRE_eol.search(payload) - if mo: - payload = payload[:-len(mo.group(0))] - self._last._payload = payload - self._input.pop_eof_matcher() - self._pop_message() - # Set the multipart up for newline cleansing, which will - # happen if we're in a nested multipart. - self._last = self._cur - else: - # I think we must be in the preamble - assert capturing_preamble - preamble.append(line) - # We've seen either the EOF or the end boundary. If we're still - # capturing the preamble, we never saw the start boundary. Note - # that as a defect and store the captured text as the payload. - if capturing_preamble: - defect = errors.StartBoundaryNotFoundDefect() - self.policy.handle_defect(self._cur, defect) - self._cur.set_payload(EMPTYSTRING.join(preamble)) - epilogue = [] - for line in self._input: - if line is NeedMoreData: - yield NeedMoreData - continue - self._cur.epilogue = EMPTYSTRING.join(epilogue) - return - # If we're not processing the preamble, then we might have seen - # EOF without seeing that end boundary...that is also a defect. - if not close_boundary_seen: - defect = errors.CloseBoundaryNotFoundDefect() - self.policy.handle_defect(self._cur, defect) - return - # Everything from here to the EOF is epilogue. If the end boundary - # ended in a newline, we'll need to make sure the epilogue isn't - # None - if linesep: - epilogue = [''] - else: - epilogue = [] - for line in self._input: - if line is NeedMoreData: - yield NeedMoreData - continue - epilogue.append(line) - # Any CRLF at the front of the epilogue is not technically part of - # the epilogue. Also, watch out for an empty string epilogue, - # which means a single newline. - if epilogue: - firstline = epilogue[0] - bolmo = NLCRE_bol.match(firstline) - if bolmo: - epilogue[0] = firstline[len(bolmo.group(0)):] - self._cur.epilogue = EMPTYSTRING.join(epilogue) - return - # Otherwise, it's some non-multipart type, so the entire rest of the - # file contents becomes the payload. - lines = [] - for line in self._input: - if line is NeedMoreData: - yield NeedMoreData - continue - lines.append(line) - self._cur.set_payload(EMPTYSTRING.join(lines)) - - def _parse_headers(self, lines): - # Passed a list of lines that make up the headers for the current msg - lastheader = '' - lastvalue = [] - for lineno, line in enumerate(lines): - # Check for continuation - if line[0] in ' \t': - if not lastheader: - # The first line of the headers was a continuation. This - # is illegal, so let's note the defect, store the illegal - # line, and ignore it for purposes of headers. - defect = errors.FirstHeaderLineIsContinuationDefect(line) - self.policy.handle_defect(self._cur, defect) - continue - lastvalue.append(line) - continue - if lastheader: - self._cur.set_raw(*self.policy.header_source_parse(lastvalue)) - lastheader, lastvalue = '', [] - # Check for envelope header, i.e. unix-from - if line.startswith('From '): - if lineno == 0: - # Strip off the trailing newline - mo = NLCRE_eol.search(line) - if mo: - line = line[:-len(mo.group(0))] - self._cur.set_unixfrom(line) - continue - elif lineno == len(lines) - 1: - # Something looking like a unix-from at the end - it's - # probably the first line of the body, so push back the - # line and stop. - self._input.unreadline(line) - return - else: - # Weirdly placed unix-from line. - defect = errors.MisplacedEnvelopeHeaderDefect(line) - self.policy.handle_defect(self._cur, defect) - continue - # Split the line on the colon separating field name from value. - # There will always be a colon, because if there wasn't the part of - # the parser that calls us would have started parsing the body. - i = line.find(':') - - # If the colon is on the start of the line the header is clearly - # malformed, but we might be able to salvage the rest of the - # message. Track the error but keep going. - if i == 0: - defect = errors.InvalidHeaderDefect("Missing header name.") - self.policy.handle_defect(self._cur, defect) - continue - - assert i>0, "_parse_headers fed line with no : and no leading WS" - lastheader = line[:i] - lastvalue = [line] - # Done with all the lines, so handle the last header. - if lastheader: - self._cur.set_raw(*self.policy.header_source_parse(lastvalue)) - - -class BytesFeedParser(FeedParser): - """Like FeedParser, but feed accepts bytes.""" - - def feed(self, data): - super().feed(data.decode('ascii', 'surrogateescape')) diff --git a/Python314_4_x86_Template/Lib/email/generator.py b/Python314_4_x86_Template/Lib/email/generator.py deleted file mode 100644 index cebbc4160..000000000 --- a/Python314_4_x86_Template/Lib/email/generator.py +++ /dev/null @@ -1,530 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Classes to generate plain text from a message object tree.""" - -__all__ = ['Generator', 'DecodedGenerator', 'BytesGenerator'] - -import re -import sys -import time -import random - -from copy import deepcopy -from io import StringIO, BytesIO -from email.utils import _has_surrogates -from email.errors import HeaderWriteError - -UNDERSCORE = '_' -NL = '\n' # XXX: no longer used by the code below. - -NLCRE = re.compile(r'\r\n|\r|\n') -fcre = re.compile(r'^From ', re.MULTILINE) -NEWLINE_WITHOUT_FWSP = re.compile(r'\r\n[^ \t]|\r[^ \n\t]|\n[^ \t]') -NEWLINE_WITHOUT_FWSP_BYTES = re.compile(br'\r\n[^ \t]|\r[^ \n\t]|\n[^ \t]') - - -class Generator: - """Generates output from a Message object tree. - - This basic generator writes the message to the given file object as plain - text. - """ - # - # Public interface - # - - def __init__(self, outfp, mangle_from_=None, maxheaderlen=None, *, - policy=None): - """Create the generator for message flattening. - - outfp is the output file-like object for writing the message to. It - must have a write() method. - - Optional mangle_from_ is a flag that, when True (the default if policy - is not set), escapes From_ lines in the body of the message by putting - a '>' in front of them. - - Optional maxheaderlen specifies the longest length for a non-continued - header. When a header line is longer (in characters, with tabs - expanded to 8 spaces) than maxheaderlen, the header will split as - defined in the Header class. Set maxheaderlen to zero to disable - header wrapping. The default is 78, as recommended (but not required) - by RFC 5322 section 2.1.1. - - The policy keyword specifies a policy object that controls a number of - aspects of the generator's operation. If no policy is specified, - the policy associated with the Message object passed to the - flatten method is used. - - """ - - if mangle_from_ is None: - mangle_from_ = True if policy is None else policy.mangle_from_ - self._fp = outfp - self._mangle_from_ = mangle_from_ - self.maxheaderlen = maxheaderlen - self.policy = policy - - def write(self, s): - # Just delegate to the file object - self._fp.write(s) - - def flatten(self, msg, unixfrom=False, linesep=None): - r"""Print the message object tree rooted at msg to the output file - specified when the Generator instance was created. - - unixfrom is a flag that forces the printing of a Unix From_ delimiter - before the first object in the message tree. If the original message - has no From_ delimiter, a 'standard' one is crafted. By default, this - is False to inhibit the printing of any From_ delimiter. - - Note that for subobjects, no From_ line is printed. - - linesep specifies the characters used to indicate a new line in - the output. The default value is determined by the policy specified - when the Generator instance was created or, if none was specified, - from the policy associated with the msg. - - """ - # We use the _XXX constants for operating on data that comes directly - # from the msg, and _encoded_XXX constants for operating on data that - # has already been converted (to bytes in the BytesGenerator) and - # inserted into a temporary buffer. - policy = msg.policy if self.policy is None else self.policy - if linesep is not None: - policy = policy.clone(linesep=linesep) - if self.maxheaderlen is not None: - policy = policy.clone(max_line_length=self.maxheaderlen) - self._NL = policy.linesep - self._encoded_NL = self._encode(self._NL) - self._EMPTY = '' - self._encoded_EMPTY = self._encode(self._EMPTY) - # Because we use clone (below) when we recursively process message - # subparts, and because clone uses the computed policy (not None), - # submessages will automatically get set to the computed policy when - # they are processed by this code. - old_gen_policy = self.policy - old_msg_policy = msg.policy - try: - self.policy = policy - msg.policy = policy - if unixfrom: - ufrom = msg.get_unixfrom() - if not ufrom: - ufrom = 'From nobody ' + time.ctime(time.time()) - self.write(ufrom + self._NL) - self._write(msg) - finally: - self.policy = old_gen_policy - msg.policy = old_msg_policy - - def clone(self, fp): - """Clone this generator with the exact same options.""" - return self.__class__(fp, - self._mangle_from_, - None, # Use policy setting, which we've adjusted - policy=self.policy) - - # - # Protected interface - undocumented ;/ - # - - # Note that we use 'self.write' when what we are writing is coming from - # the source, and self._fp.write when what we are writing is coming from a - # buffer (because the Bytes subclass has already had a chance to transform - # the data in its write method in that case). This is an entirely - # pragmatic split determined by experiment; we could be more general by - # always using write and having the Bytes subclass write method detect when - # it has already transformed the input; but, since this whole thing is a - # hack anyway this seems good enough. - - def _new_buffer(self): - # BytesGenerator overrides this to return BytesIO. - return StringIO() - - def _encode(self, s): - # BytesGenerator overrides this to encode strings to bytes. - return s - - def _write_lines(self, lines): - # We have to transform the line endings. - if not lines: - return - lines = NLCRE.split(lines) - for line in lines[:-1]: - self.write(line) - self.write(self._NL) - if lines[-1]: - self.write(lines[-1]) - # XXX logic tells me this else should be needed, but the tests fail - # with it and pass without it. (NLCRE.split ends with a blank element - # if and only if there was a trailing newline.) - #else: - # self.write(self._NL) - - def _write(self, msg): - # We can't write the headers yet because of the following scenario: - # say a multipart message includes the boundary string somewhere in - # its body. We'd have to calculate the new boundary /before/ we write - # the headers so that we can write the correct Content-Type: - # parameter. - # - # The way we do this, so as to make the _handle_*() methods simpler, - # is to cache any subpart writes into a buffer. Then we write the - # headers and the buffer contents. That way, subpart handlers can - # Do The Right Thing, and can still modify the Content-Type: header if - # necessary. - oldfp = self._fp - try: - self._munge_cte = None - self._fp = sfp = self._new_buffer() - self._dispatch(msg) - finally: - self._fp = oldfp - munge_cte = self._munge_cte - del self._munge_cte - # If we munged the cte, copy the message again and re-fix the CTE. - if munge_cte: - msg = deepcopy(msg) - # Preserve the header order if the CTE header already exists. - if msg.get('content-transfer-encoding') is None: - msg['Content-Transfer-Encoding'] = munge_cte[0] - else: - msg.replace_header('content-transfer-encoding', munge_cte[0]) - msg.replace_header('content-type', munge_cte[1]) - # Write the headers. First we see if the message object wants to - # handle that itself. If not, we'll do it generically. - meth = getattr(msg, '_write_headers', None) - if meth is None: - self._write_headers(msg) - else: - meth(self) - self._fp.write(sfp.getvalue()) - - def _dispatch(self, msg): - # Get the Content-Type: for the message, then try to dispatch to - # self._handle_<maintype>_<subtype>(). If there's no handler for the - # full MIME type, then dispatch to self._handle_<maintype>(). If - # that's missing too, then dispatch to self._writeBody(). - main = msg.get_content_maintype() - sub = msg.get_content_subtype() - specific = UNDERSCORE.join((main, sub)).replace('-', '_') - meth = getattr(self, '_handle_' + specific, None) - if meth is None: - generic = main.replace('-', '_') - meth = getattr(self, '_handle_' + generic, None) - if meth is None: - meth = self._writeBody - meth(msg) - - # - # Default handlers - # - - def _write_headers(self, msg): - for h, v in msg.raw_items(): - folded = self.policy.fold(h, v) - if self.policy.verify_generated_headers: - linesep = self.policy.linesep - if not folded.endswith(linesep): - raise HeaderWriteError( - f'folded header does not end with {linesep!r}: {folded!r}') - if NEWLINE_WITHOUT_FWSP.search(folded.removesuffix(linesep)): - raise HeaderWriteError( - f'folded header contains newline: {folded!r}') - self.write(folded) - # A blank line always separates headers from body - self.write(self._NL) - - # - # Handlers for writing types and subtypes - # - - def _handle_text(self, msg): - payload = msg.get_payload() - if payload is None: - return - if not isinstance(payload, str): - raise TypeError('string payload expected: %s' % type(payload)) - if _has_surrogates(msg._payload): - charset = msg.get_param('charset') - if charset is not None: - # XXX: This copy stuff is an ugly hack to avoid modifying the - # existing message. - msg = deepcopy(msg) - del msg['content-transfer-encoding'] - msg.set_payload(msg._payload, charset) - payload = msg.get_payload() - self._munge_cte = (msg['content-transfer-encoding'], - msg['content-type']) - if self._mangle_from_: - payload = fcre.sub('>From ', payload) - self._write_lines(payload) - - # Default body handler - _writeBody = _handle_text - - def _handle_multipart(self, msg): - # The trick here is to write out each part separately, merge them all - # together, and then make sure that the boundary we've chosen isn't - # present in the payload. - msgtexts = [] - subparts = msg.get_payload() - if subparts is None: - subparts = [] - elif isinstance(subparts, str): - # e.g. a non-strict parse of a message with no starting boundary. - self.write(subparts) - return - elif not isinstance(subparts, list): - # Scalar payload - subparts = [subparts] - for part in subparts: - s = self._new_buffer() - g = self.clone(s) - g.flatten(part, unixfrom=False, linesep=self._NL) - msgtexts.append(s.getvalue()) - # BAW: What about boundaries that are wrapped in double-quotes? - boundary = msg.get_boundary() - if not boundary: - # Create a boundary that doesn't appear in any of the - # message texts. - alltext = self._encoded_NL.join(msgtexts) - boundary = self._make_boundary(alltext) - msg.set_boundary(boundary) - # If there's a preamble, write it out, with a trailing CRLF - if msg.preamble is not None: - if self._mangle_from_: - preamble = fcre.sub('>From ', msg.preamble) - else: - preamble = msg.preamble - self._write_lines(preamble) - self.write(self._NL) - # dash-boundary transport-padding CRLF - self.write('--' + boundary + self._NL) - # body-part - if msgtexts: - self._fp.write(msgtexts.pop(0)) - # *encapsulation - # --> delimiter transport-padding - # --> CRLF body-part - for body_part in msgtexts: - # delimiter transport-padding CRLF - self.write(self._NL + '--' + boundary + self._NL) - # body-part - self._fp.write(body_part) - # close-delimiter transport-padding - self.write(self._NL + '--' + boundary + '--' + self._NL) - if msg.epilogue is not None: - if self._mangle_from_: - epilogue = fcre.sub('>From ', msg.epilogue) - else: - epilogue = msg.epilogue - self._write_lines(epilogue) - - def _handle_multipart_signed(self, msg): - # The contents of signed parts has to stay unmodified in order to keep - # the signature intact per RFC1847 2.1, so we disable header wrapping. - # RDM: This isn't enough to completely preserve the part, but it helps. - p = self.policy - self.policy = p.clone(max_line_length=0) - try: - self._handle_multipart(msg) - finally: - self.policy = p - - def _handle_message_delivery_status(self, msg): - # We can't just write the headers directly to self's file object - # because this will leave an extra newline between the last header - # block and the boundary. Sigh. - blocks = [] - for part in msg.get_payload(): - s = self._new_buffer() - g = self.clone(s) - g.flatten(part, unixfrom=False, linesep=self._NL) - text = s.getvalue() - lines = text.split(self._encoded_NL) - # Strip off the unnecessary trailing empty line - if lines and lines[-1] == self._encoded_EMPTY: - blocks.append(self._encoded_NL.join(lines[:-1])) - else: - blocks.append(text) - # Now join all the blocks with an empty line. This has the lovely - # effect of separating each block with an empty line, but not adding - # an extra one after the last one. - self._fp.write(self._encoded_NL.join(blocks)) - - def _handle_message(self, msg): - s = self._new_buffer() - g = self.clone(s) - # The payload of a message/rfc822 part should be a multipart sequence - # of length 1. The zeroth element of the list should be the Message - # object for the subpart. Extract that object, stringify it, and - # write it out. - # Except, it turns out, when it's a string instead, which happens when - # and only when HeaderParser is used on a message of mime type - # message/rfc822. Such messages are generated by, for example, - # Groupwise when forwarding unadorned messages. (Issue 7970.) So - # in that case we just emit the string body. - payload = msg._payload - if isinstance(payload, list): - g.flatten(msg.get_payload(0), unixfrom=False, linesep=self._NL) - payload = s.getvalue() - else: - payload = self._encode(payload) - self._fp.write(payload) - - # This used to be a module level function; we use a classmethod for this - # and _compile_re so we can continue to provide the module level function - # for backward compatibility by doing - # _make_boundary = Generator._make_boundary - # at the end of the module. It *is* internal, so we could drop that... - @classmethod - def _make_boundary(cls, text=None): - # Craft a random boundary. If text is given, ensure that the chosen - # boundary doesn't appear in the text. - token = random.randrange(sys.maxsize) - boundary = ('=' * 15) + (_fmt % token) + '==' - if text is None: - return boundary - b = boundary - counter = 0 - while True: - cre = cls._compile_re('^--' + re.escape(b) + '(--)?$', re.MULTILINE) - if not cre.search(text): - break - b = boundary + '.' + str(counter) - counter += 1 - return b - - @classmethod - def _compile_re(cls, s, flags): - return re.compile(s, flags) - - -class BytesGenerator(Generator): - """Generates a bytes version of a Message object tree. - - Functionally identical to the base Generator except that the output is - bytes and not string. When surrogates were used in the input to encode - bytes, these are decoded back to bytes for output. If the policy has - cte_type set to 7bit, then the message is transformed such that the - non-ASCII bytes are properly content transfer encoded, using the charset - unknown-8bit. - - The outfp object must accept bytes in its write method. - """ - - def write(self, s): - self._fp.write(s.encode('ascii', 'surrogateescape')) - - def _new_buffer(self): - return BytesIO() - - def _encode(self, s): - return s.encode('ascii') - - def _write_headers(self, msg): - # This is almost the same as the string version, except for handling - # strings with 8bit bytes. - for h, v in msg.raw_items(): - folded = self.policy.fold_binary(h, v) - if self.policy.verify_generated_headers: - linesep = self.policy.linesep.encode() - if not folded.endswith(linesep): - raise HeaderWriteError( - f'folded header does not end with {linesep!r}: {folded!r}') - if NEWLINE_WITHOUT_FWSP_BYTES.search(folded.removesuffix(linesep)): - raise HeaderWriteError( - f'folded header contains newline: {folded!r}') - self._fp.write(folded) - # A blank line always separates headers from body - self.write(self._NL) - - def _handle_text(self, msg): - # If the string has surrogates the original source was bytes, so - # just write it back out. - if msg._payload is None: - return - if _has_surrogates(msg._payload) and not self.policy.cte_type=='7bit': - if self._mangle_from_: - msg._payload = fcre.sub(">From ", msg._payload) - self._write_lines(msg._payload) - else: - super(BytesGenerator,self)._handle_text(msg) - - # Default body handler - _writeBody = _handle_text - - @classmethod - def _compile_re(cls, s, flags): - return re.compile(s.encode('ascii'), flags) - - -_FMT = '[Non-text (%(type)s) part of message omitted, filename %(filename)s]' - -class DecodedGenerator(Generator): - """Generates a text representation of a message. - - Like the Generator base class, except that non-text parts are substituted - with a format string representing the part. - """ - def __init__(self, outfp, mangle_from_=None, maxheaderlen=None, fmt=None, *, - policy=None): - """Like Generator.__init__() except that an additional optional - argument is allowed. - - Walks through all subparts of a message. If the subpart is of main - type 'text', then it prints the decoded payload of the subpart. - - Otherwise, fmt is a format string that is used instead of the message - payload. fmt is expanded with the following keywords (in - %(keyword)s format): - - type : Full MIME type of the non-text part - maintype : Main MIME type of the non-text part - subtype : Sub-MIME type of the non-text part - filename : Filename of the non-text part - description: Description associated with the non-text part - encoding : Content transfer encoding of the non-text part - - The default value for fmt is None, meaning - - [Non-text (%(type)s) part of message omitted, filename %(filename)s] - """ - Generator.__init__(self, outfp, mangle_from_, maxheaderlen, - policy=policy) - if fmt is None: - self._fmt = _FMT - else: - self._fmt = fmt - - def _dispatch(self, msg): - for part in msg.walk(): - maintype = part.get_content_maintype() - if maintype == 'text': - print(part.get_payload(decode=False), file=self) - elif maintype == 'multipart': - # Just skip this - pass - else: - print(self._fmt % { - 'type' : part.get_content_type(), - 'maintype' : part.get_content_maintype(), - 'subtype' : part.get_content_subtype(), - 'filename' : part.get_filename('[no filename]'), - 'description': part.get('Content-Description', - '[no description]'), - 'encoding' : part.get('Content-Transfer-Encoding', - '[no encoding]'), - }, file=self) - - -# Helper used by Generator._make_boundary -_width = len(repr(sys.maxsize-1)) -_fmt = '%%0%dd' % _width - -# Backward compatibility -_make_boundary = Generator._make_boundary diff --git a/Python314_4_x86_Template/Lib/email/header.py b/Python314_4_x86_Template/Lib/email/header.py deleted file mode 100644 index 220a84a74..000000000 --- a/Python314_4_x86_Template/Lib/email/header.py +++ /dev/null @@ -1,582 +0,0 @@ -# Copyright (C) 2002 Python Software Foundation -# Author: Ben Gertzfield, Barry Warsaw -# Contact: email-sig@python.org - -"""Header encoding and decoding functionality.""" - -__all__ = [ - 'Header', - 'decode_header', - 'make_header', - ] - -import re -import binascii - -import email.quoprimime -import email.base64mime - -from email.errors import HeaderParseError -from email import charset as _charset -Charset = _charset.Charset - -NL = '\n' -SPACE = ' ' -BSPACE = b' ' -SPACE8 = ' ' * 8 -EMPTYSTRING = '' -MAXLINELEN = 78 -FWS = ' \t' - -USASCII = Charset('us-ascii') -UTF8 = Charset('utf-8') - -# Match encoded-word strings in the form =?charset?q?Hello_World?= -ecre = re.compile(r''' - =\? # literal =? - (?P<charset>[^?]*?) # non-greedy up to the next ? is the charset - \? # literal ? - (?P<encoding>[qQbB]) # either a "q" or a "b", case insensitive - \? # literal ? - (?P<encoded>.*?) # non-greedy up to the next ?= is the encoded string - \?= # literal ?= - ''', re.VERBOSE | re.MULTILINE) - -# Field name regexp, including trailing colon, but not separating whitespace, -# according to RFC 2822. Character range is from tilde to exclamation mark. -# For use with .match() -fcre = re.compile(r'[\041-\176]+:$') - -# Find a header embedded in a putative header value. Used to check for -# header injection attack. -_embedded_header = re.compile(r'\n[^ \t]+:') - - -# Helpers -_max_append = email.quoprimime._max_append - - -def decode_header(header): - """Decode a message header value without converting charset. - - For historical reasons, this function may return either: - - 1. A list of length 1 containing a pair (str, None). - 2. A list of (bytes, charset) pairs containing each of the decoded - parts of the header. Charset is None for non-encoded parts of the header, - otherwise a lower-case string containing the name of the character set - specified in the encoded string. - - header may be a string that may or may not contain RFC2047 encoded words, - or it may be a Header object. - - An email.errors.HeaderParseError may be raised when certain decoding error - occurs (e.g. a base64 decoding exception). - - This function exists for backwards compatibility only. For new code, we - recommend using email.headerregistry.HeaderRegistry instead. - """ - # If it is a Header object, we can just return the encoded chunks. - if hasattr(header, '_chunks'): - return [(_charset._encode(string, str(charset)), str(charset)) - for string, charset in header._chunks] - # If no encoding, just return the header with no charset. - if not ecre.search(header): - return [(header, None)] - # First step is to parse all the encoded parts into triplets of the form - # (encoded_string, encoding, charset). For unencoded strings, the last - # two parts will be None. - words = [] - for line in header.splitlines(): - parts = ecre.split(line) - first = True - while parts: - unencoded = parts.pop(0) - if first: - unencoded = unencoded.lstrip() - first = False - if unencoded: - words.append((unencoded, None, None)) - if parts: - charset = parts.pop(0).lower() - encoding = parts.pop(0).lower() - encoded = parts.pop(0) - words.append((encoded, encoding, charset)) - # Now loop over words and remove words that consist of whitespace - # between two encoded strings. - droplist = [] - for n, w in enumerate(words): - if n>1 and w[1] and words[n-2][1] and words[n-1][0].isspace(): - droplist.append(n-1) - for d in reversed(droplist): - del words[d] - - # The next step is to decode each encoded word by applying the reverse - # base64 or quopri transformation. decoded_words is now a list of the - # form (decoded_word, charset). - decoded_words = [] - for encoded_string, encoding, charset in words: - if encoding is None: - # This is an unencoded word. - decoded_words.append((encoded_string, charset)) - elif encoding == 'q': - word = email.quoprimime.header_decode(encoded_string) - decoded_words.append((word, charset)) - elif encoding == 'b': - paderr = len(encoded_string) % 4 # Postel's law: add missing padding - if paderr: - encoded_string += '==='[:4 - paderr] - try: - word = email.base64mime.decode(encoded_string) - except binascii.Error: - raise HeaderParseError('Base64 decoding error') - else: - decoded_words.append((word, charset)) - else: - raise AssertionError('Unexpected encoding: ' + encoding) - # Now convert all words to bytes and collapse consecutive runs of - # similarly encoded words. - collapsed = [] - last_word = last_charset = None - for word, charset in decoded_words: - if isinstance(word, str): - word = bytes(word, 'raw-unicode-escape') - if last_word is None: - last_word = word - last_charset = charset - elif charset != last_charset: - collapsed.append((last_word, last_charset)) - last_word = word - last_charset = charset - elif last_charset is None: - last_word += BSPACE + word - else: - last_word += word - collapsed.append((last_word, last_charset)) - return collapsed - - -def make_header(decoded_seq, maxlinelen=None, header_name=None, - continuation_ws=' '): - """Create a Header from a sequence of pairs as returned by decode_header() - - decode_header() takes a header value string and returns a sequence of - pairs of the format (decoded_string, charset) where charset is the string - name of the character set. - - This function takes one of those sequence of pairs and returns a Header - instance. Optional maxlinelen, header_name, and continuation_ws are as in - the Header constructor. - - This function exists for backwards compatibility only, and is not - recommended for use in new code. - """ - h = Header(maxlinelen=maxlinelen, header_name=header_name, - continuation_ws=continuation_ws) - for s, charset in decoded_seq: - # None means us-ascii but we can simply pass it on to h.append() - if charset is not None and not isinstance(charset, Charset): - charset = Charset(charset) - h.append(s, charset) - return h - - -class Header: - def __init__(self, s=None, charset=None, - maxlinelen=None, header_name=None, - continuation_ws=' ', errors='strict'): - """Create a MIME-compliant header that can contain many character sets. - - Optional s is the initial header value. If None, the initial header - value is not set. You can later append to the header with .append() - method calls. s may be a byte string or a Unicode string, but see the - .append() documentation for semantics. - - Optional charset serves two purposes: it has the same meaning as the - charset argument to the .append() method. It also sets the default - character set for all subsequent .append() calls that omit the charset - argument. If charset is not provided in the constructor, the us-ascii - charset is used both as s's initial charset and as the default for - subsequent .append() calls. - - The maximum line length can be specified explicitly via maxlinelen. For - splitting the first line to a shorter value (to account for the field - header which isn't included in s, e.g. 'Subject') pass in the name of - the field in header_name. The default maxlinelen is 78 as recommended - by RFC 2822. - - continuation_ws must be RFC 2822 compliant folding whitespace (usually - either a space or a hard tab) which will be prepended to continuation - lines. - - errors is passed through to the .append() call. - """ - if charset is None: - charset = USASCII - elif not isinstance(charset, Charset): - charset = Charset(charset) - self._charset = charset - self._continuation_ws = continuation_ws - self._chunks = [] - if s is not None: - self.append(s, charset, errors) - if maxlinelen is None: - maxlinelen = MAXLINELEN - self._maxlinelen = maxlinelen - if header_name is None: - self._headerlen = 0 - else: - # Take the separating colon and space into account. - self._headerlen = len(header_name) + 2 - - def __str__(self): - """Return the string value of the header.""" - self._normalize() - uchunks = [] - lastcs = None - lastspace = None - for string, charset in self._chunks: - # We must preserve spaces between encoded and non-encoded word - # boundaries, which means for us we need to add a space when we go - # from a charset to None/us-ascii, or from None/us-ascii to a - # charset. Only do this for the second and subsequent chunks. - # Don't add a space if the None/us-ascii string already has - # a space (trailing or leading depending on transition) - nextcs = charset - if nextcs == _charset.UNKNOWN8BIT: - original_bytes = string.encode('ascii', 'surrogateescape') - string = original_bytes.decode('ascii', 'replace') - if uchunks: - hasspace = string and self._nonctext(string[0]) - if lastcs not in (None, 'us-ascii'): - if nextcs in (None, 'us-ascii') and not hasspace: - uchunks.append(SPACE) - nextcs = None - elif nextcs not in (None, 'us-ascii') and not lastspace: - uchunks.append(SPACE) - lastspace = string and self._nonctext(string[-1]) - lastcs = nextcs - uchunks.append(string) - return EMPTYSTRING.join(uchunks) - - # Rich comparison operators for equality only. BAW: does it make sense to - # have or explicitly disable <, <=, >, >= operators? - def __eq__(self, other): - # other may be a Header or a string. Both are fine so coerce - # ourselves to a unicode (of the unencoded header value), swap the - # args and do another comparison. - return other == str(self) - - def append(self, s, charset=None, errors='strict'): - """Append a string to the MIME header. - - Optional charset, if given, should be a Charset instance or the name - of a character set (which will be converted to a Charset instance). A - value of None (the default) means that the charset given in the - constructor is used. - - s may be a byte string or a Unicode string. If it is a byte string - (i.e. isinstance(s, str) is false), then charset is the encoding of - that byte string, and a UnicodeError will be raised if the string - cannot be decoded with that charset. If s is a Unicode string, then - charset is a hint specifying the character set of the characters in - the string. In either case, when producing an RFC 2822 compliant - header using RFC 2047 rules, the string will be encoded using the - output codec of the charset. If the string cannot be encoded to the - output codec, a UnicodeError will be raised. - - Optional 'errors' is passed as the errors argument to the decode - call if s is a byte string. - """ - if charset is None: - charset = self._charset - elif not isinstance(charset, Charset): - charset = Charset(charset) - if not isinstance(s, str): - input_charset = charset.input_codec or 'us-ascii' - if input_charset == _charset.UNKNOWN8BIT: - s = s.decode('us-ascii', 'surrogateescape') - else: - s = s.decode(input_charset, errors) - # Ensure that the bytes we're storing can be decoded to the output - # character set, otherwise an early error is raised. - output_charset = charset.output_codec or 'us-ascii' - if output_charset != _charset.UNKNOWN8BIT: - try: - s.encode(output_charset, errors) - except UnicodeEncodeError: - if output_charset!='us-ascii': - raise - charset = UTF8 - self._chunks.append((s, charset)) - - def _nonctext(self, s): - """True if string s is not a ctext character of RFC822. - """ - return s.isspace() or s in ('(', ')', '\\') - - def encode(self, splitchars=';, \t', maxlinelen=None, linesep='\n'): - r"""Encode a message header into an RFC-compliant format. - - There are many issues involved in converting a given string for use in - an email header. Only certain character sets are readable in most - email clients, and as header strings can only contain a subset of - 7-bit ASCII, care must be taken to properly convert and encode (with - Base64 or quoted-printable) header strings. In addition, there is a - 75-character length limit on any given encoded header field, so - line-wrapping must be performed, even with double-byte character sets. - - Optional maxlinelen specifies the maximum length of each generated - line, exclusive of the linesep string. Individual lines may be longer - than maxlinelen if a folding point cannot be found. The first line - will be shorter by the length of the header name plus ": " if a header - name was specified at Header construction time. The default value for - maxlinelen is determined at header construction time. - - Optional splitchars is a string containing characters which should be - given extra weight by the splitting algorithm during normal header - wrapping. This is in very rough support of RFC 2822's 'higher level - syntactic breaks': split points preceded by a splitchar are preferred - during line splitting, with the characters preferred in the order in - which they appear in the string. Space and tab may be included in the - string to indicate whether preference should be given to one over the - other as a split point when other split chars do not appear in the line - being split. Splitchars does not affect RFC 2047 encoded lines. - - Optional linesep is a string to be used to separate the lines of - the value. The default value is the most useful for typical - Python applications, but it can be set to \r\n to produce RFC-compliant - line separators when needed. - """ - self._normalize() - if maxlinelen is None: - maxlinelen = self._maxlinelen - # A maxlinelen of 0 means don't wrap. For all practical purposes, - # choosing a huge number here accomplishes that and makes the - # _ValueFormatter algorithm much simpler. - if maxlinelen == 0: - maxlinelen = 1000000 - formatter = _ValueFormatter(self._headerlen, maxlinelen, - self._continuation_ws, splitchars) - lastcs = None - hasspace = lastspace = None - for string, charset in self._chunks: - if hasspace is not None: - hasspace = string and self._nonctext(string[0]) - if lastcs not in (None, 'us-ascii'): - if not hasspace or charset not in (None, 'us-ascii'): - formatter.add_transition() - elif charset not in (None, 'us-ascii') and not lastspace: - formatter.add_transition() - lastspace = string and self._nonctext(string[-1]) - lastcs = charset - hasspace = False - lines = string.splitlines() - if lines: - formatter.feed('', lines[0], charset) - else: - formatter.feed('', '', charset) - for line in lines[1:]: - formatter.newline() - if charset.header_encoding is not None: - formatter.feed(self._continuation_ws, ' ' + line.lstrip(), - charset) - else: - sline = line.lstrip() - fws = line[:len(line)-len(sline)] - formatter.feed(fws, sline, charset) - if len(lines) > 1: - formatter.newline() - if self._chunks: - formatter.add_transition() - value = formatter._str(linesep) - if _embedded_header.search(value): - raise HeaderParseError("header value appears to contain " - "an embedded header: {!r}".format(value)) - return value - - def _normalize(self): - # Step 1: Normalize the chunks so that all runs of identical charsets - # get collapsed into a single unicode string. - chunks = [] - last_charset = None - last_chunk = [] - for string, charset in self._chunks: - if charset == last_charset: - last_chunk.append(string) - else: - if last_charset is not None: - chunks.append((SPACE.join(last_chunk), last_charset)) - last_chunk = [string] - last_charset = charset - if last_chunk: - chunks.append((SPACE.join(last_chunk), last_charset)) - self._chunks = chunks - - -class _ValueFormatter: - def __init__(self, headerlen, maxlen, continuation_ws, splitchars): - self._maxlen = maxlen - self._continuation_ws = continuation_ws - self._continuation_ws_len = len(continuation_ws) - self._splitchars = splitchars - self._lines = [] - self._current_line = _Accumulator(headerlen) - - def _str(self, linesep): - self.newline() - return linesep.join(self._lines) - - def __str__(self): - return self._str(NL) - - def newline(self): - end_of_line = self._current_line.pop() - if end_of_line != (' ', ''): - self._current_line.push(*end_of_line) - if len(self._current_line) > 0: - if self._current_line.is_onlyws() and self._lines: - self._lines[-1] += str(self._current_line) - else: - self._lines.append(str(self._current_line)) - self._current_line.reset() - - def add_transition(self): - self._current_line.push(' ', '') - - def feed(self, fws, string, charset): - # If the charset has no header encoding (i.e. it is an ASCII encoding) - # then we must split the header at the "highest level syntactic break" - # possible. Note that we don't have a lot of smarts about field - # syntax; we just try to break on semi-colons, then commas, then - # whitespace. Eventually, this should be pluggable. - if charset.header_encoding is None: - self._ascii_split(fws, string, self._splitchars) - return - # Otherwise, we're doing either a Base64 or a quoted-printable - # encoding which means we don't need to split the line on syntactic - # breaks. We can basically just find enough characters to fit on the - # current line, minus the RFC 2047 chrome. What makes this trickier - # though is that we have to split at octet boundaries, not character - # boundaries but it's only safe to split at character boundaries so at - # best we can only get close. - encoded_lines = charset.header_encode_lines(string, self._maxlengths()) - # The first element extends the current line, but if it's None then - # nothing more fit on the current line so start a new line. - try: - first_line = encoded_lines.pop(0) - except IndexError: - # There are no encoded lines, so we're done. - return - if first_line is not None: - self._append_chunk(fws, first_line) - try: - last_line = encoded_lines.pop() - except IndexError: - # There was only one line. - return - self.newline() - self._current_line.push(self._continuation_ws, last_line) - # Everything else are full lines in themselves. - for line in encoded_lines: - self._lines.append(self._continuation_ws + line) - - def _maxlengths(self): - # The first line's length. - yield self._maxlen - len(self._current_line) - while True: - yield self._maxlen - self._continuation_ws_len - - def _ascii_split(self, fws, string, splitchars): - # The RFC 2822 header folding algorithm is simple in principle but - # complex in practice. Lines may be folded any place where "folding - # white space" appears by inserting a linesep character in front of the - # FWS. The complication is that not all spaces or tabs qualify as FWS, - # and we are also supposed to prefer to break at "higher level - # syntactic breaks". We can't do either of these without intimate - # knowledge of the structure of structured headers, which we don't have - # here. So the best we can do here is prefer to break at the specified - # splitchars, and hope that we don't choose any spaces or tabs that - # aren't legal FWS. (This is at least better than the old algorithm, - # where we would sometimes *introduce* FWS after a splitchar, or the - # algorithm before that, where we would turn all white space runs into - # single spaces or tabs.) - parts = re.split("(["+FWS+"]+)", fws+string) - if parts[0]: - parts[:0] = [''] - else: - parts.pop(0) - for fws, part in zip(*[iter(parts)]*2): - self._append_chunk(fws, part) - - def _append_chunk(self, fws, string): - self._current_line.push(fws, string) - if len(self._current_line) > self._maxlen: - # Find the best split point, working backward from the end. - # There might be none, on a long first line. - for ch in self._splitchars: - for i in range(self._current_line.part_count()-1, 0, -1): - if ch.isspace(): - fws = self._current_line[i][0] - if fws and fws[0]==ch: - break - prevpart = self._current_line[i-1][1] - if prevpart and prevpart[-1]==ch: - break - else: - continue - break - else: - fws, part = self._current_line.pop() - if self._current_line._initial_size > 0: - # There will be a header, so leave it on a line by itself. - self.newline() - if not fws: - # We don't use continuation_ws here because the whitespace - # after a header should always be a space. - fws = ' ' - self._current_line.push(fws, part) - return - remainder = self._current_line.pop_from(i) - self._lines.append(str(self._current_line)) - self._current_line.reset(remainder) - - -class _Accumulator(list): - - def __init__(self, initial_size=0): - self._initial_size = initial_size - super().__init__() - - def push(self, fws, string): - self.append((fws, string)) - - def pop_from(self, i=0): - popped = self[i:] - self[i:] = [] - return popped - - def pop(self): - if self.part_count()==0: - return ('', '') - return super().pop() - - def __len__(self): - return sum((len(fws)+len(part) for fws, part in self), - self._initial_size) - - def __str__(self): - return EMPTYSTRING.join((EMPTYSTRING.join((fws, part)) - for fws, part in self)) - - def reset(self, startval=None): - if startval is None: - startval = [] - self[:] = startval - self._initial_size = 0 - - def is_onlyws(self): - return self._initial_size==0 and (not self or str(self).isspace()) - - def part_count(self): - return super().__len__() diff --git a/Python314_4_x86_Template/Lib/email/headerregistry.py b/Python314_4_x86_Template/Lib/email/headerregistry.py deleted file mode 100644 index 0e8698efc..000000000 --- a/Python314_4_x86_Template/Lib/email/headerregistry.py +++ /dev/null @@ -1,618 +0,0 @@ -"""Representing and manipulating email headers via custom objects. - -This module provides an implementation of the HeaderRegistry API. -The implementation is designed to flexibly follow RFC5322 rules. -""" -from types import MappingProxyType - -from email import utils -from email import errors -from email import _header_value_parser as parser - -class Address: - - def __init__(self, display_name='', username='', domain='', addr_spec=None): - """Create an object representing a full email address. - - An address can have a 'display_name', a 'username', and a 'domain'. In - addition to specifying the username and domain separately, they may be - specified together by using the addr_spec keyword *instead of* the - username and domain keywords. If an addr_spec string is specified it - must be properly quoted according to RFC 5322 rules; an error will be - raised if it is not. - - An Address object has display_name, username, domain, and addr_spec - attributes, all of which are read-only. The addr_spec and the string - value of the object are both quoted according to RFC5322 rules, but - without any Content Transfer Encoding. - - """ - - inputs = ''.join(filter(None, (display_name, username, domain, addr_spec))) - if '\r' in inputs or '\n' in inputs: - raise ValueError("invalid arguments; address parts cannot contain CR or LF") - - # This clause with its potential 'raise' may only happen when an - # application program creates an Address object using an addr_spec - # keyword. The email library code itself must always supply username - # and domain. - if addr_spec is not None: - if username or domain: - raise TypeError("addrspec specified when username and/or " - "domain also specified") - a_s, rest = parser.get_addr_spec(addr_spec) - if rest: - raise ValueError("Invalid addr_spec; only '{}' " - "could be parsed from '{}'".format( - a_s, addr_spec)) - if a_s.all_defects: - raise a_s.all_defects[0] - username = a_s.local_part - domain = a_s.domain - self._display_name = display_name - self._username = username - self._domain = domain - - @property - def display_name(self): - return self._display_name - - @property - def username(self): - return self._username - - @property - def domain(self): - return self._domain - - @property - def addr_spec(self): - """The addr_spec (username@domain) portion of the address, quoted - according to RFC 5322 rules, but with no Content Transfer Encoding. - """ - lp = self.username - if not parser.DOT_ATOM_ENDS.isdisjoint(lp): - lp = parser.quote_string(lp) - if self.domain: - return lp + '@' + self.domain - if not lp: - return '<>' - return lp - - def __repr__(self): - return "{}(display_name={!r}, username={!r}, domain={!r})".format( - self.__class__.__name__, - self.display_name, self.username, self.domain) - - def __str__(self): - disp = self.display_name - if not parser.SPECIALS.isdisjoint(disp): - disp = parser.quote_string(disp) - if disp: - addr_spec = '' if self.addr_spec=='<>' else self.addr_spec - return "{} <{}>".format(disp, addr_spec) - return self.addr_spec - - def __eq__(self, other): - if not isinstance(other, Address): - return NotImplemented - return (self.display_name == other.display_name and - self.username == other.username and - self.domain == other.domain) - - -class Group: - - def __init__(self, display_name=None, addresses=None): - """Create an object representing an address group. - - An address group consists of a display_name followed by colon and a - list of addresses (see Address) terminated by a semi-colon. The Group - is created by specifying a display_name and a possibly empty list of - Address objects. A Group can also be used to represent a single - address that is not in a group, which is convenient when manipulating - lists that are a combination of Groups and individual Addresses. In - this case the display_name should be set to None. In particular, the - string representation of a Group whose display_name is None is the same - as the Address object, if there is one and only one Address object in - the addresses list. - - """ - self._display_name = display_name - self._addresses = tuple(addresses) if addresses else tuple() - - @property - def display_name(self): - return self._display_name - - @property - def addresses(self): - return self._addresses - - def __repr__(self): - return "{}(display_name={!r}, addresses={!r}".format( - self.__class__.__name__, - self.display_name, self.addresses) - - def __str__(self): - if self.display_name is None and len(self.addresses)==1: - return str(self.addresses[0]) - disp = self.display_name - if disp is not None and not parser.SPECIALS.isdisjoint(disp): - disp = parser.quote_string(disp) - adrstr = ", ".join(str(x) for x in self.addresses) - adrstr = ' ' + adrstr if adrstr else adrstr - return "{}:{};".format(disp, adrstr) - - def __eq__(self, other): - if not isinstance(other, Group): - return NotImplemented - return (self.display_name == other.display_name and - self.addresses == other.addresses) - - -# Header Classes # - -class BaseHeader(str): - - """Base class for message headers. - - Implements generic behavior and provides tools for subclasses. - - A subclass must define a classmethod named 'parse' that takes an unfolded - value string and a dictionary as its arguments. The dictionary will - contain one key, 'defects', initialized to an empty list. After the call - the dictionary must contain two additional keys: parse_tree, set to the - parse tree obtained from parsing the header, and 'decoded', set to the - string value of the idealized representation of the data from the value. - (That is, encoded words are decoded, and values that have canonical - representations are so represented.) - - The defects key is intended to collect parsing defects, which the message - parser will subsequently dispose of as appropriate. The parser should not, - insofar as practical, raise any errors. Defects should be added to the - list instead. The standard header parsers register defects for RFC - compliance issues, for obsolete RFC syntax, and for unrecoverable parsing - errors. - - The parse method may add additional keys to the dictionary. In this case - the subclass must define an 'init' method, which will be passed the - dictionary as its keyword arguments. The method should use (usually by - setting them as the value of similarly named attributes) and remove all the - extra keys added by its parse method, and then use super to call its parent - class with the remaining arguments and keywords. - - The subclass should also make sure that a 'max_count' attribute is defined - that is either None or 1. XXX: need to better define this API. - - """ - - def __new__(cls, name, value): - kwds = {'defects': []} - cls.parse(value, kwds) - if utils._has_surrogates(kwds['decoded']): - kwds['decoded'] = utils._sanitize(kwds['decoded']) - self = str.__new__(cls, kwds['decoded']) - del kwds['decoded'] - self.init(name, **kwds) - return self - - def init(self, name, *, parse_tree, defects): - self._name = name - self._parse_tree = parse_tree - self._defects = defects - - @property - def name(self): - return self._name - - @property - def defects(self): - return tuple(self._defects) - - def __reduce__(self): - return ( - _reconstruct_header, - ( - self.__class__.__name__, - self.__class__.__bases__, - str(self), - ), - self.__getstate__()) - - @classmethod - def _reconstruct(cls, value): - return str.__new__(cls, value) - - def fold(self, *, policy): - """Fold header according to policy. - - The parsed representation of the header is folded according to - RFC5322 rules, as modified by the policy. If the parse tree - contains surrogateescaped bytes, the bytes are CTE encoded using - the charset 'unknown-8bit". - - Any non-ASCII characters in the parse tree are CTE encoded using - charset utf-8. XXX: make this a policy setting. - - The returned value is an ASCII-only string possibly containing linesep - characters, and ending with a linesep character. The string includes - the header name and the ': ' separator. - - """ - # At some point we need to put fws here if it was in the source. - header = parser.Header([ - parser.HeaderLabel([ - parser.ValueTerminal(self.name, 'header-name'), - parser.ValueTerminal(':', 'header-sep')]), - ]) - if self._parse_tree: - header.append( - parser.CFWSList([parser.WhiteSpaceTerminal(' ', 'fws')])) - header.append(self._parse_tree) - return header.fold(policy=policy) - - -def _reconstruct_header(cls_name, bases, value): - return type(cls_name, bases, {})._reconstruct(value) - - -class UnstructuredHeader: - - max_count = None - value_parser = staticmethod(parser.get_unstructured) - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = cls.value_parser(value) - kwds['decoded'] = str(kwds['parse_tree']) - - -class UniqueUnstructuredHeader(UnstructuredHeader): - - max_count = 1 - - -class DateHeader: - - """Header whose value consists of a single timestamp. - - Provides an additional attribute, datetime, which is either an aware - datetime using a timezone, or a naive datetime if the timezone - in the input string is -0000. Also accepts a datetime as input. - The 'value' attribute is the normalized form of the timestamp, - which means it is the output of format_datetime on the datetime. - """ - - max_count = None - - # This is used only for folding, not for creating 'decoded'. - value_parser = staticmethod(parser.get_unstructured) - - @classmethod - def parse(cls, value, kwds): - if not value: - kwds['defects'].append(errors.HeaderMissingRequiredValue()) - kwds['datetime'] = None - kwds['decoded'] = '' - kwds['parse_tree'] = parser.TokenList() - return - if isinstance(value, str): - kwds['decoded'] = value - try: - value = utils.parsedate_to_datetime(value) - except ValueError: - kwds['defects'].append(errors.InvalidDateDefect('Invalid date value or format')) - kwds['datetime'] = None - kwds['parse_tree'] = parser.TokenList() - return - kwds['datetime'] = value - kwds['decoded'] = utils.format_datetime(kwds['datetime']) - kwds['parse_tree'] = cls.value_parser(kwds['decoded']) - - def init(self, *args, **kw): - self._datetime = kw.pop('datetime') - super().init(*args, **kw) - - @property - def datetime(self): - return self._datetime - - -class UniqueDateHeader(DateHeader): - - max_count = 1 - - -class AddressHeader: - - max_count = None - - @staticmethod - def value_parser(value): - address_list, value = parser.get_address_list(value) - assert not value, 'this should not happen' - return address_list - - @classmethod - def parse(cls, value, kwds): - if isinstance(value, str): - # We are translating here from the RFC language (address/mailbox) - # to our API language (group/address). - kwds['parse_tree'] = address_list = cls.value_parser(value) - groups = [] - for addr in address_list.addresses: - groups.append(Group(addr.display_name, - [Address(mb.display_name or '', - mb.local_part or '', - mb.domain or '') - for mb in addr.all_mailboxes])) - defects = list(address_list.all_defects) - else: - # Assume it is Address/Group stuff - if not hasattr(value, '__iter__'): - value = [value] - groups = [Group(None, [item]) if not hasattr(item, 'addresses') - else item - for item in value] - defects = [] - kwds['groups'] = groups - kwds['defects'] = defects - kwds['decoded'] = ', '.join([str(item) for item in groups]) - if 'parse_tree' not in kwds: - kwds['parse_tree'] = cls.value_parser(kwds['decoded']) - - def init(self, *args, **kw): - self._groups = tuple(kw.pop('groups')) - self._addresses = None - super().init(*args, **kw) - - @property - def groups(self): - return self._groups - - @property - def addresses(self): - if self._addresses is None: - self._addresses = tuple(address for group in self._groups - for address in group.addresses) - return self._addresses - - -class UniqueAddressHeader(AddressHeader): - - max_count = 1 - - -class SingleAddressHeader(AddressHeader): - - @property - def address(self): - if len(self.addresses)!=1: - raise ValueError(("value of single address header {} is not " - "a single address").format(self.name)) - return self.addresses[0] - - -class UniqueSingleAddressHeader(SingleAddressHeader): - - max_count = 1 - - -class MIMEVersionHeader: - - max_count = 1 - - value_parser = staticmethod(parser.parse_mime_version) - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = parse_tree = cls.value_parser(value) - kwds['decoded'] = str(parse_tree) - kwds['defects'].extend(parse_tree.all_defects) - kwds['major'] = None if parse_tree.minor is None else parse_tree.major - kwds['minor'] = parse_tree.minor - if parse_tree.minor is not None: - kwds['version'] = '{}.{}'.format(kwds['major'], kwds['minor']) - else: - kwds['version'] = None - - def init(self, *args, **kw): - self._version = kw.pop('version') - self._major = kw.pop('major') - self._minor = kw.pop('minor') - super().init(*args, **kw) - - @property - def major(self): - return self._major - - @property - def minor(self): - return self._minor - - @property - def version(self): - return self._version - - -class ParameterizedMIMEHeader: - - # Mixin that handles the params dict. Must be subclassed and - # a property value_parser for the specific header provided. - - max_count = 1 - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = parse_tree = cls.value_parser(value) - kwds['decoded'] = str(parse_tree) - kwds['defects'].extend(parse_tree.all_defects) - if parse_tree.params is None: - kwds['params'] = {} - else: - # The MIME RFCs specify that parameter ordering is arbitrary. - kwds['params'] = {utils._sanitize(name).lower(): - utils._sanitize(value) - for name, value in parse_tree.params} - - def init(self, *args, **kw): - self._params = kw.pop('params') - super().init(*args, **kw) - - @property - def params(self): - return MappingProxyType(self._params) - - -class ContentTypeHeader(ParameterizedMIMEHeader): - - value_parser = staticmethod(parser.parse_content_type_header) - - def init(self, *args, **kw): - super().init(*args, **kw) - self._maintype = utils._sanitize(self._parse_tree.maintype) - self._subtype = utils._sanitize(self._parse_tree.subtype) - - @property - def maintype(self): - return self._maintype - - @property - def subtype(self): - return self._subtype - - @property - def content_type(self): - return self.maintype + '/' + self.subtype - - -class ContentDispositionHeader(ParameterizedMIMEHeader): - - value_parser = staticmethod(parser.parse_content_disposition_header) - - def init(self, *args, **kw): - super().init(*args, **kw) - cd = self._parse_tree.content_disposition - self._content_disposition = cd if cd is None else utils._sanitize(cd) - - @property - def content_disposition(self): - return self._content_disposition - - -class ContentTransferEncodingHeader: - - max_count = 1 - - value_parser = staticmethod(parser.parse_content_transfer_encoding_header) - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = parse_tree = cls.value_parser(value) - kwds['decoded'] = str(parse_tree) - kwds['defects'].extend(parse_tree.all_defects) - - def init(self, *args, **kw): - super().init(*args, **kw) - self._cte = utils._sanitize(self._parse_tree.cte) - - @property - def cte(self): - return self._cte - - -class MessageIDHeader: - - max_count = 1 - value_parser = staticmethod(parser.parse_message_id) - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = parse_tree = cls.value_parser(value) - kwds['decoded'] = str(parse_tree) - kwds['defects'].extend(parse_tree.all_defects) - - -class ReferencesHeader: - - max_count = 1 - value_parser = staticmethod(parser.parse_message_ids) - - @classmethod - def parse(cls, value, kwds): - kwds['parse_tree'] = parse_tree = cls.value_parser(value) - kwds['decoded'] = str(parse_tree) - kwds['defects'].extend(parse_tree.all_defects) - - -# The header factory # - -_default_header_map = { - 'subject': UniqueUnstructuredHeader, - 'date': UniqueDateHeader, - 'resent-date': DateHeader, - 'orig-date': UniqueDateHeader, - 'sender': UniqueSingleAddressHeader, - 'resent-sender': SingleAddressHeader, - 'to': UniqueAddressHeader, - 'resent-to': AddressHeader, - 'cc': UniqueAddressHeader, - 'resent-cc': AddressHeader, - 'bcc': UniqueAddressHeader, - 'resent-bcc': AddressHeader, - 'from': UniqueAddressHeader, - 'resent-from': AddressHeader, - 'reply-to': UniqueAddressHeader, - 'mime-version': MIMEVersionHeader, - 'content-type': ContentTypeHeader, - 'content-disposition': ContentDispositionHeader, - 'content-transfer-encoding': ContentTransferEncodingHeader, - 'message-id': MessageIDHeader, - 'in-reply-to': ReferencesHeader, - 'references': ReferencesHeader, - } - -class HeaderRegistry: - - """A header_factory and header registry.""" - - def __init__(self, base_class=BaseHeader, default_class=UnstructuredHeader, - use_default_map=True): - """Create a header_factory that works with the Policy API. - - base_class is the class that will be the last class in the created - header class's __bases__ list. default_class is the class that will be - used if "name" (see __call__) does not appear in the registry. - use_default_map controls whether or not the default mapping of names to - specialized classes is copied in to the registry when the factory is - created. The default is True. - - """ - self.registry = {} - self.base_class = base_class - self.default_class = default_class - if use_default_map: - self.registry.update(_default_header_map) - - def map_to_type(self, name, cls): - """Register cls as the specialized class for handling "name" headers. - - """ - self.registry[name.lower()] = cls - - def __getitem__(self, name): - cls = self.registry.get(name.lower(), self.default_class) - return type('_'+cls.__name__, (cls, self.base_class), {}) - - def __call__(self, name, value): - """Create a header instance for header 'name' from 'value'. - - Creates a header instance by creating a specialized class for parsing - and representing the specified header by combining the factory - base_class with a specialized class from the registry or the - default_class, and passing the name and value to the constructed - class's constructor. - - """ - return self[name](name, value) diff --git a/Python314_4_x86_Template/Lib/email/iterators.py b/Python314_4_x86_Template/Lib/email/iterators.py deleted file mode 100644 index 08ede3ec6..000000000 --- a/Python314_4_x86_Template/Lib/email/iterators.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Various types of useful iterators and generators.""" - -__all__ = [ - 'body_line_iterator', - 'typed_subpart_iterator', - 'walk', - # Do not include _structure() since it's part of the debugging API. - ] - -import sys -from io import StringIO - - -# This function will become a method of the Message class -def walk(self): - """Walk over the message tree, yielding each subpart. - - The walk is performed in depth-first order. This method is a - generator. - """ - yield self - if self.is_multipart(): - for subpart in self.get_payload(): - yield from subpart.walk() - - -# These two functions are imported into the Iterators.py interface module. -def body_line_iterator(msg, decode=False): - """Iterate over the parts, returning string payloads line-by-line. - - Optional decode (default False) is passed through to .get_payload(). - """ - for subpart in msg.walk(): - payload = subpart.get_payload(decode=decode) - if isinstance(payload, str): - yield from StringIO(payload) - - -def typed_subpart_iterator(msg, maintype='text', subtype=None): - """Iterate over the subparts with a given MIME type. - - Use 'maintype' as the main MIME type to match against; this defaults to - "text". Optional 'subtype' is the MIME subtype to match against; if - omitted, only the main type is matched. - """ - for subpart in msg.walk(): - if subpart.get_content_maintype() == maintype: - if subtype is None or subpart.get_content_subtype() == subtype: - yield subpart - - -def _structure(msg, fp=None, level=0, include_default=False): - """A handy debugging aid""" - if fp is None: - fp = sys.stdout - tab = ' ' * (level * 4) - print(tab + msg.get_content_type(), end='', file=fp) - if include_default: - print(' [%s]' % msg.get_default_type(), file=fp) - else: - print(file=fp) - if msg.is_multipart(): - for subpart in msg.get_payload(): - _structure(subpart, fp, level+1, include_default) diff --git a/Python314_4_x86_Template/Lib/email/message.py b/Python314_4_x86_Template/Lib/email/message.py deleted file mode 100644 index 641fb2e94..000000000 --- a/Python314_4_x86_Template/Lib/email/message.py +++ /dev/null @@ -1,1217 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Basic message object for the email package object model.""" - -__all__ = ['Message', 'EmailMessage'] - -import binascii -import re -import quopri -from io import BytesIO, StringIO - -# Intrapackage imports -from email import utils -from email import errors -from email._policybase import compat32 -from email import charset as _charset -from email._encoded_words import decode_b -Charset = _charset.Charset - -SEMISPACE = '; ' - -# Regular expression that matches 'special' characters in parameters, the -# existence of which force quoting of the parameter value. -tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]') - - -def _splitparam(param): - # Split header parameters. BAW: this may be too simple. It isn't - # strictly RFC 2045 (section 5.1) compliant, but it catches most headers - # found in the wild. We may eventually need a full fledged parser. - # RDM: we might have a Header here; for now just stringify it. - a, sep, b = str(param).partition(';') - if not sep: - return a.strip(), None - return a.strip(), b.strip() - -def _formatparam(param, value=None, quote=True): - """Convenience function to format and return a key=value pair. - - This will quote the value if needed or if quote is true. If value is a - three tuple (charset, language, value), it will be encoded according - to RFC2231 rules. If it contains non-ascii characters it will likewise - be encoded according to RFC2231 rules, using the utf-8 charset and - a null language. - """ - if value is not None and len(value) > 0: - # A tuple is used for RFC 2231 encoded parameter values where items - # are (charset, language, value). charset is a string, not a Charset - # instance. RFC 2231 encoded values are never quoted, per RFC. - if isinstance(value, tuple): - # Encode as per RFC 2231 - param += '*' - value = utils.encode_rfc2231(value[2], value[0], value[1]) - return '%s=%s' % (param, value) - else: - try: - value.encode('ascii') - except UnicodeEncodeError: - param += '*' - value = utils.encode_rfc2231(value, 'utf-8', '') - return '%s=%s' % (param, value) - # BAW: Please check this. I think that if quote is set it should - # force quoting even if not necessary. - if quote or tspecials.search(value): - return '%s="%s"' % (param, utils.quote(value)) - else: - return '%s=%s' % (param, value) - else: - return param - -def _parseparam(s): - # RDM This might be a Header, so for now stringify it. - s = ';' + str(s) - plist = [] - start = 0 - while s.find(';', start) == start: - start += 1 - end = s.find(';', start) - ind, diff = start, 0 - while end > 0: - diff += s.count('"', ind, end) - s.count('\\"', ind, end) - if diff % 2 == 0: - break - end, ind = ind, s.find(';', end + 1) - if end < 0: - end = len(s) - i = s.find('=', start, end) - if i == -1: - f = s[start:end] - else: - f = s[start:i].rstrip().lower() + '=' + s[i+1:end].lstrip() - plist.append(f.strip()) - start = end - return plist - - -def _unquotevalue(value): - # This is different than utils.collapse_rfc2231_value() because it doesn't - # try to convert the value to a unicode. Message.get_param() and - # Message.get_params() are both currently defined to return the tuple in - # the face of RFC 2231 parameters. - if isinstance(value, tuple): - return value[0], value[1], utils.unquote(value[2]) - else: - return utils.unquote(value) - - -def _decode_uu(encoded): - """Decode uuencoded data.""" - decoded_lines = [] - encoded_lines_iter = iter(encoded.splitlines()) - for line in encoded_lines_iter: - if line.startswith(b"begin "): - mode, _, path = line.removeprefix(b"begin ").partition(b" ") - try: - int(mode, base=8) - except ValueError: - continue - else: - break - else: - raise ValueError("`begin` line not found") - for line in encoded_lines_iter: - if not line: - raise ValueError("Truncated input") - elif line.strip(b' \t\r\n\f') == b'end': - break - try: - decoded_line = binascii.a2b_uu(line) - except binascii.Error: - # Workaround for broken uuencoders by /Fredrik Lundh - nbytes = (((line[0]-32) & 63) * 4 + 5) // 3 - decoded_line = binascii.a2b_uu(line[:nbytes]) - decoded_lines.append(decoded_line) - - return b''.join(decoded_lines) - - -class Message: - """Basic message object. - - A message object is defined as something that has a bunch of RFC 5322 - headers and a payload. It may optionally have an envelope header - (a.k.a. Unix-From or From_ header). If the message is a container (i.e. a - multipart or a message/rfc822), then the payload is a list of Message - objects, otherwise it is a string. - - Message objects implement part of the 'mapping' interface, which assumes - there is exactly one occurrence of the header per message. Some headers - do in fact appear multiple times (e.g. Received) and for those headers, - you must use the explicit API to set or get all the headers. Not all of - the mapping methods are implemented. - """ - def __init__(self, policy=compat32): - self.policy = policy - self._headers = [] - self._unixfrom = None - self._payload = None - self._charset = None - # Defaults for multipart messages - self.preamble = self.epilogue = None - self.defects = [] - # Default content type - self._default_type = 'text/plain' - - def __str__(self): - """Return the entire formatted message as a string. - """ - return self.as_string() - - def as_string(self, unixfrom=False, maxheaderlen=0, policy=None): - """Return the entire formatted message as a string. - - Optional 'unixfrom', when true, means include the Unix From_ envelope - header. For backward compatibility reasons, if maxheaderlen is - not specified it defaults to 0, so you must override it explicitly - if you want a different maxheaderlen. 'policy' is passed to the - Generator instance used to serialize the message; if it is not - specified the policy associated with the message instance is used. - - If the message object contains binary data that is not encoded - according to RFC standards, the non-compliant data will be replaced by - unicode "unknown character" code points. - """ - from email.generator import Generator - policy = self.policy if policy is None else policy - fp = StringIO() - g = Generator(fp, - mangle_from_=False, - maxheaderlen=maxheaderlen, - policy=policy) - g.flatten(self, unixfrom=unixfrom) - return fp.getvalue() - - def __bytes__(self): - """Return the entire formatted message as a bytes object. - """ - return self.as_bytes() - - def as_bytes(self, unixfrom=False, policy=None): - """Return the entire formatted message as a bytes object. - - Optional 'unixfrom', when true, means include the Unix From_ envelope - header. 'policy' is passed to the BytesGenerator instance used to - serialize the message; if not specified the policy associated with - the message instance is used. - """ - from email.generator import BytesGenerator - policy = self.policy if policy is None else policy - fp = BytesIO() - g = BytesGenerator(fp, mangle_from_=False, policy=policy) - g.flatten(self, unixfrom=unixfrom) - return fp.getvalue() - - def is_multipart(self): - """Return True if the message consists of multiple parts.""" - return isinstance(self._payload, list) - - # - # Unix From_ line - # - def set_unixfrom(self, unixfrom): - self._unixfrom = unixfrom - - def get_unixfrom(self): - return self._unixfrom - - # - # Payload manipulation. - # - def attach(self, payload): - """Add the given payload to the current payload. - - The current payload will always be a list of objects after this method - is called. If you want to set the payload to a scalar object, use - set_payload() instead. - """ - if self._payload is None: - self._payload = [payload] - else: - try: - self._payload.append(payload) - except AttributeError: - raise TypeError("Attach is not valid on a message with a" - " non-multipart payload") - - def get_payload(self, i=None, decode=False): - """Return a reference to the payload. - - The payload will either be a list object or a string. If you mutate - the list object, you modify the message's payload in place. Optional - i returns that index into the payload. - - Optional decode is a flag indicating whether the payload should be - decoded or not, according to the Content-Transfer-Encoding header - (default is False). - - When True and the message is not a multipart, the payload will be - decoded if this header's value is `quoted-printable' or `base64'. If - some other encoding is used, or the header is missing, or if the - payload has bogus data (i.e. bogus base64 or uuencoded data), the - payload is returned as-is. - - If the message is a multipart and the decode flag is True, then None - is returned. - """ - # Here is the logic table for this code, based on the email5.0.0 code: - # i decode is_multipart result - # ------ ------ ------------ ------------------------------ - # None True True None - # i True True None - # None False True _payload (a list) - # i False True _payload element i (a Message) - # i False False error (not a list) - # i True False error (not a list) - # None False False _payload - # None True False _payload decoded (bytes) - # Note that Barry planned to factor out the 'decode' case, but that - # isn't so easy now that we handle the 8 bit data, which needs to be - # converted in both the decode and non-decode path. - if self.is_multipart(): - if decode: - return None - if i is None: - return self._payload - else: - return self._payload[i] - # For backward compatibility, Use isinstance and this error message - # instead of the more logical is_multipart test. - if i is not None and not isinstance(self._payload, list): - raise TypeError('Expected list, got %s' % type(self._payload)) - payload = self._payload - cte = self.get('content-transfer-encoding', '') - if hasattr(cte, 'cte'): - cte = cte.cte - else: - # cte might be a Header, so for now stringify it. - cte = str(cte).strip().lower() - # payload may be bytes here. - if not decode: - if isinstance(payload, str) and utils._has_surrogates(payload): - try: - bpayload = payload.encode('ascii', 'surrogateescape') - try: - payload = bpayload.decode(self.get_content_charset('ascii'), 'replace') - except LookupError: - payload = bpayload.decode('ascii', 'replace') - except UnicodeEncodeError: - pass - return payload - if isinstance(payload, str): - try: - bpayload = payload.encode('ascii', 'surrogateescape') - except UnicodeEncodeError: - # This won't happen for RFC compliant messages (messages - # containing only ASCII code points in the unicode input). - # If it does happen, turn the string into bytes in a way - # guaranteed not to fail. - bpayload = payload.encode('raw-unicode-escape') - else: - bpayload = payload - if cte == 'quoted-printable': - return quopri.decodestring(bpayload) - elif cte == 'base64': - # XXX: this is a bit of a hack; decode_b should probably be factored - # out somewhere, but I haven't figured out where yet. - value, defects = decode_b(b''.join(bpayload.splitlines())) - for defect in defects: - self.policy.handle_defect(self, defect) - return value - elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'): - try: - return _decode_uu(bpayload) - except ValueError: - # Some decoding problem. - return bpayload - if isinstance(payload, str): - return bpayload - return payload - - def set_payload(self, payload, charset=None): - """Set the payload to the given value. - - Optional charset sets the message's default character set. See - set_charset() for details. - """ - if hasattr(payload, 'encode'): - if charset is None: - self._payload = payload - return - if not isinstance(charset, Charset): - charset = Charset(charset) - payload = payload.encode(charset.output_charset, 'surrogateescape') - if hasattr(payload, 'decode'): - self._payload = payload.decode('ascii', 'surrogateescape') - else: - self._payload = payload - if charset is not None: - self.set_charset(charset) - - def set_charset(self, charset): - """Set the charset of the payload to a given character set. - - charset can be a Charset instance, a string naming a character set, or - None. If it is a string it will be converted to a Charset instance. - If charset is None, the charset parameter will be removed from the - Content-Type field. Anything else will generate a TypeError. - - The message will be assumed to be of type text/* encoded with - charset.input_charset. It will be converted to charset.output_charset - and encoded properly, if needed, when generating the plain text - representation of the message. MIME headers (MIME-Version, - Content-Type, Content-Transfer-Encoding) will be added as needed. - """ - if charset is None: - self.del_param('charset') - self._charset = None - return - if not isinstance(charset, Charset): - charset = Charset(charset) - self._charset = charset - if 'MIME-Version' not in self: - self.add_header('MIME-Version', '1.0') - if 'Content-Type' not in self: - self.add_header('Content-Type', 'text/plain', - charset=charset.get_output_charset()) - else: - self.set_param('charset', charset.get_output_charset()) - if charset != charset.get_output_charset(): - self._payload = charset.body_encode(self._payload) - if 'Content-Transfer-Encoding' not in self: - cte = charset.get_body_encoding() - try: - cte(self) - except TypeError: - # This 'if' is for backward compatibility, it allows unicode - # through even though that won't work correctly if the - # message is serialized. - payload = self._payload - if payload: - try: - payload = payload.encode('ascii', 'surrogateescape') - except UnicodeError: - payload = payload.encode(charset.output_charset) - self._payload = charset.body_encode(payload) - self.add_header('Content-Transfer-Encoding', cte) - - def get_charset(self): - """Return the Charset instance associated with the message's payload. - """ - return self._charset - - # - # MAPPING INTERFACE (partial) - # - def __len__(self): - """Return the total number of headers, including duplicates.""" - return len(self._headers) - - def __getitem__(self, name): - """Get a header value. - - Return None if the header is missing instead of raising an exception. - - Note that if the header appeared multiple times, exactly which - occurrence gets returned is undefined. Use get_all() to get all - the values matching a header field name. - """ - return self.get(name) - - def __setitem__(self, name, val): - """Set the value of a header. - - Note: this does not overwrite an existing header with the same field - name. Use __delitem__() first to delete any existing headers. - """ - max_count = self.policy.header_max_count(name) - if max_count: - lname = name.lower() - found = 0 - for k, v in self._headers: - if k.lower() == lname: - found += 1 - if found >= max_count: - raise ValueError("There may be at most {} {} headers " - "in a message".format(max_count, name)) - self._headers.append(self.policy.header_store_parse(name, val)) - - def __delitem__(self, name): - """Delete all occurrences of a header, if present. - - Does not raise an exception if the header is missing. - """ - name = name.lower() - newheaders = [] - for k, v in self._headers: - if k.lower() != name: - newheaders.append((k, v)) - self._headers = newheaders - - def __contains__(self, name): - name_lower = name.lower() - for k, v in self._headers: - if name_lower == k.lower(): - return True - return False - - def __iter__(self): - for field, value in self._headers: - yield field - - def keys(self): - """Return a list of all the message's header field names. - - These will be sorted in the order they appeared in the original - message, or were added to the message, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return [k for k, v in self._headers] - - def values(self): - """Return a list of all the message's header values. - - These will be sorted in the order they appeared in the original - message, or were added to the message, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return [self.policy.header_fetch_parse(k, v) - for k, v in self._headers] - - def items(self): - """Get all the message's header fields and values. - - These will be sorted in the order they appeared in the original - message, or were added to the message, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return [(k, self.policy.header_fetch_parse(k, v)) - for k, v in self._headers] - - def get(self, name, failobj=None): - """Get a header value. - - Like __getitem__() but return failobj instead of None when the field - is missing. - """ - name = name.lower() - for k, v in self._headers: - if k.lower() == name: - return self.policy.header_fetch_parse(k, v) - return failobj - - # - # "Internal" methods (public API, but only intended for use by a parser - # or generator, not normal application code. - # - - def set_raw(self, name, value): - """Store name and value in the model without modification. - - This is an "internal" API, intended only for use by a parser. - """ - self._headers.append((name, value)) - - def raw_items(self): - """Return the (name, value) header pairs without modification. - - This is an "internal" API, intended only for use by a generator. - """ - return iter(self._headers.copy()) - - # - # Additional useful stuff - # - - def get_all(self, name, failobj=None): - """Return a list of all the values for the named field. - - These will be sorted in the order they appeared in the original - message, and may contain duplicates. Any fields deleted and - re-inserted are always appended to the header list. - - If no such fields exist, failobj is returned (defaults to None). - """ - values = [] - name = name.lower() - for k, v in self._headers: - if k.lower() == name: - values.append(self.policy.header_fetch_parse(k, v)) - if not values: - return failobj - return values - - def add_header(self, _name, _value, **_params): - """Extended header setting. - - name is the header field to add. keyword arguments can be used to set - additional parameters for the header field, with underscores converted - to dashes. Normally the parameter will be added as key="value" unless - value is None, in which case only the key will be added. If a - parameter value contains non-ASCII characters it can be specified as a - three-tuple of (charset, language, value), in which case it will be - encoded according to RFC2231 rules. Otherwise it will be encoded using - the utf-8 charset and a language of ''. - - Examples: - - msg.add_header('content-disposition', 'attachment', filename='bud.gif') - msg.add_header('content-disposition', 'attachment', - filename=('utf-8', '', 'Fußballer.ppt')) - msg.add_header('content-disposition', 'attachment', - filename='Fußballer.ppt')) - """ - parts = [] - for k, v in _params.items(): - if v is None: - parts.append(k.replace('_', '-')) - else: - parts.append(_formatparam(k.replace('_', '-'), v)) - if _value is not None: - parts.insert(0, _value) - self[_name] = SEMISPACE.join(parts) - - def replace_header(self, _name, _value): - """Replace a header. - - Replace the first matching header found in the message, retaining - header order and case. If no matching header was found, a KeyError is - raised. - """ - _name = _name.lower() - for i, (k, v) in zip(range(len(self._headers)), self._headers): - if k.lower() == _name: - self._headers[i] = self.policy.header_store_parse(k, _value) - break - else: - raise KeyError(_name) - - # - # Use these three methods instead of the three above. - # - - def get_content_type(self): - """Return the message's content type. - - The returned string is coerced to lower case of the form - 'maintype/subtype'. If there was no Content-Type header in the - message, the default type as given by get_default_type() will be - returned. Since according to RFC 2045, messages always have a default - type this will always return a value. - - RFC 2045 defines a message's default type to be text/plain unless it - appears inside a multipart/digest container, in which case it would be - message/rfc822. - """ - missing = object() - value = self.get('content-type', missing) - if value is missing: - # This should have no parameters - return self.get_default_type() - ctype = _splitparam(value)[0].lower() - # RFC 2045, section 5.2 says if its invalid, use text/plain - if ctype.count('/') != 1: - return 'text/plain' - return ctype - - def get_content_maintype(self): - """Return the message's main content type. - - This is the 'maintype' part of the string returned by - get_content_type(). - """ - ctype = self.get_content_type() - return ctype.split('/')[0] - - def get_content_subtype(self): - """Returns the message's sub-content type. - - This is the 'subtype' part of the string returned by - get_content_type(). - """ - ctype = self.get_content_type() - return ctype.split('/')[1] - - def get_default_type(self): - """Return the 'default' content type. - - Most messages have a default content type of text/plain, except for - messages that are subparts of multipart/digest containers. Such - subparts have a default content type of message/rfc822. - """ - return self._default_type - - def set_default_type(self, ctype): - """Set the 'default' content type. - - ctype should be either "text/plain" or "message/rfc822", although this - is not enforced. The default content type is not stored in the - Content-Type header. - """ - self._default_type = ctype - - def _get_params_preserve(self, failobj, header): - # Like get_params() but preserves the quoting of values. BAW: - # should this be part of the public interface? - missing = object() - value = self.get(header, missing) - if value is missing: - return failobj - params = [] - for p in _parseparam(value): - try: - name, val = p.split('=', 1) - name = name.strip() - val = val.strip() - except ValueError: - # Must have been a bare attribute - name = p.strip() - val = '' - params.append((name, val)) - params = utils.decode_params(params) - return params - - def get_params(self, failobj=None, header='content-type', unquote=True): - """Return the message's Content-Type parameters, as a list. - - The elements of the returned list are 2-tuples of key/value pairs, as - split on the '=' sign. The left hand side of the '=' is the key, - while the right hand side is the value. If there is no '=' sign in - the parameter the value is the empty string. The value is as - described in the get_param() method. - - Optional failobj is the object to return if there is no Content-Type - header. Optional header is the header to search instead of - Content-Type. If unquote is True, the value is unquoted. - """ - missing = object() - params = self._get_params_preserve(missing, header) - if params is missing: - return failobj - if unquote: - return [(k, _unquotevalue(v)) for k, v in params] - else: - return params - - def get_param(self, param, failobj=None, header='content-type', - unquote=True): - """Return the parameter value if found in the Content-Type header. - - Optional failobj is the object to return if there is no Content-Type - header, or the Content-Type header has no such parameter. Optional - header is the header to search instead of Content-Type. - - Parameter keys are always compared case insensitively. The return - value can either be a string, or a 3-tuple if the parameter was RFC - 2231 encoded. When it's a 3-tuple, the elements of the value are of - the form (CHARSET, LANGUAGE, VALUE). Note that both CHARSET and - LANGUAGE can be None, in which case you should consider VALUE to be - encoded in the us-ascii charset. You can usually ignore LANGUAGE. - The parameter value (either the returned string, or the VALUE item in - the 3-tuple) is always unquoted, unless unquote is set to False. - - If your application doesn't care whether the parameter was RFC 2231 - encoded, it can turn the return value into a string as follows: - - rawparam = msg.get_param('foo') - param = email.utils.collapse_rfc2231_value(rawparam) - - """ - if header not in self: - return failobj - for k, v in self._get_params_preserve(failobj, header): - if k.lower() == param.lower(): - if unquote: - return _unquotevalue(v) - else: - return v - return failobj - - def set_param(self, param, value, header='Content-Type', requote=True, - charset=None, language='', replace=False): - """Set a parameter in the Content-Type header. - - If the parameter already exists in the header, its value will be - replaced with the new value. - - If header is Content-Type and has not yet been defined for this - message, it will be set to "text/plain" and the new parameter and - value will be appended as per RFC 2045. - - An alternate header can be specified in the header argument, and all - parameters will be quoted as necessary unless requote is False. - - If charset is specified, the parameter will be encoded according to RFC - 2231. Optional language specifies the RFC 2231 language, defaulting - to the empty string. Both charset and language should be strings. - """ - if not isinstance(value, tuple) and charset: - value = (charset, language, value) - - if header not in self and header.lower() == 'content-type': - ctype = 'text/plain' - else: - ctype = self.get(header) - if not self.get_param(param, header=header): - if not ctype: - ctype = _formatparam(param, value, requote) - else: - ctype = SEMISPACE.join( - [ctype, _formatparam(param, value, requote)]) - else: - ctype = '' - for old_param, old_value in self.get_params(header=header, - unquote=requote): - append_param = '' - if old_param.lower() == param.lower(): - append_param = _formatparam(param, value, requote) - else: - append_param = _formatparam(old_param, old_value, requote) - if not ctype: - ctype = append_param - else: - ctype = SEMISPACE.join([ctype, append_param]) - if ctype != self.get(header): - if replace: - self.replace_header(header, ctype) - else: - del self[header] - self[header] = ctype - - def del_param(self, param, header='content-type', requote=True): - """Remove the given parameter completely from the Content-Type header. - - The header will be re-written in place without the parameter or its - value. All values will be quoted as necessary unless requote is - False. Optional header specifies an alternative to the Content-Type - header. - """ - if header not in self: - return - new_ctype = '' - for p, v in self.get_params(header=header, unquote=requote): - if p.lower() != param.lower(): - if not new_ctype: - new_ctype = _formatparam(p, v, requote) - else: - new_ctype = SEMISPACE.join([new_ctype, - _formatparam(p, v, requote)]) - if new_ctype != self.get(header): - del self[header] - self[header] = new_ctype - - def set_type(self, type, header='Content-Type', requote=True): - """Set the main type and subtype for the Content-Type header. - - type must be a string in the form "maintype/subtype", otherwise a - ValueError is raised. - - This method replaces the Content-Type header, keeping all the - parameters in place. If requote is False, this leaves the existing - header's quoting as is. Otherwise, the parameters will be quoted (the - default). - - An alternative header can be specified in the header argument. When - the Content-Type header is set, we'll always also add a MIME-Version - header. - """ - # BAW: should we be strict? - if not type.count('/') == 1: - raise ValueError - # Set the Content-Type, you get a MIME-Version - if header.lower() == 'content-type': - del self['mime-version'] - self['MIME-Version'] = '1.0' - if header not in self: - self[header] = type - return - params = self.get_params(header=header, unquote=requote) - del self[header] - self[header] = type - # Skip the first param; it's the old type. - for p, v in params[1:]: - self.set_param(p, v, header, requote) - - def get_filename(self, failobj=None): - """Return the filename associated with the payload if present. - - The filename is extracted from the Content-Disposition header's - 'filename' parameter, and it is unquoted. If that header is missing - the 'filename' parameter, this method falls back to looking for the - 'name' parameter. - """ - missing = object() - filename = self.get_param('filename', missing, 'content-disposition') - if filename is missing: - filename = self.get_param('name', missing, 'content-type') - if filename is missing: - return failobj - return utils.collapse_rfc2231_value(filename).strip() - - def get_boundary(self, failobj=None): - """Return the boundary associated with the payload if present. - - The boundary is extracted from the Content-Type header's 'boundary' - parameter, and it is unquoted. - """ - missing = object() - boundary = self.get_param('boundary', missing) - if boundary is missing: - return failobj - # RFC 2046 says that boundaries may begin but not end in w/s - return utils.collapse_rfc2231_value(boundary).rstrip() - - def set_boundary(self, boundary): - """Set the boundary parameter in Content-Type to 'boundary'. - - This is subtly different than deleting the Content-Type header and - adding a new one with a new boundary parameter via add_header(). The - main difference is that using the set_boundary() method preserves the - order of the Content-Type header in the original message. - - HeaderParseError is raised if the message has no Content-Type header. - """ - missing = object() - params = self._get_params_preserve(missing, 'content-type') - if params is missing: - # There was no Content-Type header, and we don't know what type - # to set it to, so raise an exception. - raise errors.HeaderParseError('No Content-Type header found') - newparams = [] - foundp = False - for pk, pv in params: - if pk.lower() == 'boundary': - newparams.append(('boundary', '"%s"' % boundary)) - foundp = True - else: - newparams.append((pk, pv)) - if not foundp: - # The original Content-Type header had no boundary attribute. - # Tack one on the end. BAW: should we raise an exception - # instead??? - newparams.append(('boundary', '"%s"' % boundary)) - # Replace the existing Content-Type header with the new value - newheaders = [] - for h, v in self._headers: - if h.lower() == 'content-type': - parts = [] - for k, v in newparams: - if v == '': - parts.append(k) - else: - parts.append('%s=%s' % (k, v)) - val = SEMISPACE.join(parts) - newheaders.append(self.policy.header_store_parse(h, val)) - - else: - newheaders.append((h, v)) - self._headers = newheaders - - def get_content_charset(self, failobj=None): - """Return the charset parameter of the Content-Type header. - - The returned string is always coerced to lower case. If there is no - Content-Type header, or if that header has no charset parameter, - failobj is returned. - """ - missing = object() - charset = self.get_param('charset', missing) - if charset is missing: - return failobj - if isinstance(charset, tuple): - # RFC 2231 encoded, so decode it, and it better end up as ascii. - pcharset = charset[0] or 'us-ascii' - try: - # LookupError will be raised if the charset isn't known to - # Python. UnicodeError will be raised if the encoded text - # contains a character not in the charset. - as_bytes = charset[2].encode('raw-unicode-escape') - charset = str(as_bytes, pcharset) - except (LookupError, UnicodeError): - charset = charset[2] - # charset characters must be in us-ascii range - try: - charset.encode('us-ascii') - except UnicodeError: - return failobj - # RFC 2046, $4.1.2 says charsets are not case sensitive - return charset.lower() - - def get_charsets(self, failobj=None): - """Return a list containing the charset(s) used in this message. - - The returned list of items describes the Content-Type headers' - charset parameter for this message and all the subparts in its - payload. - - Each item will either be a string (the value of the charset parameter - in the Content-Type header of that part) or the value of the - 'failobj' parameter (defaults to None), if the part does not have a - main MIME type of "text", or the charset is not defined. - - The list will contain one string for each part of the message, plus - one for the container message (i.e. self), so that a non-multipart - message will still return a list of length 1. - """ - return [part.get_content_charset(failobj) for part in self.walk()] - - def get_content_disposition(self): - """Return the message's content-disposition if it exists, or None. - - The return values can be either 'inline', 'attachment' or None - according to the rfc2183. - """ - value = self.get('content-disposition') - if value is None: - return None - c_d = _splitparam(value)[0].lower() - return c_d - - # I.e. def walk(self): ... - from email.iterators import walk - - -class MIMEPart(Message): - - def __init__(self, policy=None): - if policy is None: - from email.policy import default - policy = default - super().__init__(policy) - - - def as_string(self, unixfrom=False, maxheaderlen=None, policy=None): - """Return the entire formatted message as a string. - - Optional 'unixfrom', when true, means include the Unix From_ envelope - header. maxheaderlen is retained for backward compatibility with the - base Message class, but defaults to None, meaning that the policy value - for max_line_length controls the header maximum length. 'policy' is - passed to the Generator instance used to serialize the message; if it - is not specified the policy associated with the message instance is - used. - """ - policy = self.policy if policy is None else policy - if maxheaderlen is None: - maxheaderlen = policy.max_line_length - return super().as_string(unixfrom, maxheaderlen, policy) - - def __str__(self): - return self.as_string(policy=self.policy.clone(utf8=True)) - - def is_attachment(self): - c_d = self.get('content-disposition') - return False if c_d is None else c_d.content_disposition == 'attachment' - - def _find_body(self, part, preferencelist): - if part.is_attachment(): - return - maintype, subtype = part.get_content_type().split('/') - if maintype == 'text': - if subtype in preferencelist: - yield (preferencelist.index(subtype), part) - return - if maintype != 'multipart' or not self.is_multipart(): - return - if subtype != 'related': - for subpart in part.iter_parts(): - yield from self._find_body(subpart, preferencelist) - return - if 'related' in preferencelist: - yield (preferencelist.index('related'), part) - candidate = None - start = part.get_param('start') - if start: - for subpart in part.iter_parts(): - if subpart['content-id'] == start: - candidate = subpart - break - if candidate is None: - subparts = part.get_payload() - candidate = subparts[0] if subparts else None - if candidate is not None: - yield from self._find_body(candidate, preferencelist) - - def get_body(self, preferencelist=('related', 'html', 'plain')): - """Return best candidate mime part for display as 'body' of message. - - Do a depth first search, starting with self, looking for the first part - matching each of the items in preferencelist, and return the part - corresponding to the first item that has a match, or None if no items - have a match. If 'related' is not included in preferencelist, consider - the root part of any multipart/related encountered as a candidate - match. Ignore parts with 'Content-Disposition: attachment'. - """ - best_prio = len(preferencelist) - body = None - for prio, part in self._find_body(self, preferencelist): - if prio < best_prio: - best_prio = prio - body = part - if prio == 0: - break - return body - - _body_types = {('text', 'plain'), - ('text', 'html'), - ('multipart', 'related'), - ('multipart', 'alternative')} - def iter_attachments(self): - """Return an iterator over the non-main parts of a multipart. - - Skip the first of each occurrence of text/plain, text/html, - multipart/related, or multipart/alternative in the multipart (unless - they have a 'Content-Disposition: attachment' header) and include all - remaining subparts in the returned iterator. When applied to a - multipart/related, return all parts except the root part. Return an - empty iterator when applied to a multipart/alternative or a - non-multipart. - """ - maintype, subtype = self.get_content_type().split('/') - if maintype != 'multipart' or subtype == 'alternative': - return - payload = self.get_payload() - # Certain malformed messages can have content type set to `multipart/*` - # but still have single part body, in which case payload.copy() can - # fail with AttributeError. - try: - parts = payload.copy() - except AttributeError: - # payload is not a list, it is most probably a string. - return - - if maintype == 'multipart' and subtype == 'related': - # For related, we treat everything but the root as an attachment. - # The root may be indicated by 'start'; if there's no start or we - # can't find the named start, treat the first subpart as the root. - start = self.get_param('start') - if start: - found = False - attachments = [] - for part in parts: - if part.get('content-id') == start: - found = True - else: - attachments.append(part) - if found: - yield from attachments - return - parts.pop(0) - yield from parts - return - # Otherwise we more or less invert the remaining logic in get_body. - # This only really works in edge cases (ex: non-text related or - # alternatives) if the sending agent sets content-disposition. - seen = [] # Only skip the first example of each candidate type. - for part in parts: - maintype, subtype = part.get_content_type().split('/') - if ((maintype, subtype) in self._body_types and - not part.is_attachment() and subtype not in seen): - seen.append(subtype) - continue - yield part - - def iter_parts(self): - """Return an iterator over all immediate subparts of a multipart. - - Return an empty iterator for a non-multipart. - """ - if self.is_multipart(): - yield from self.get_payload() - - def get_content(self, *args, content_manager=None, **kw): - if content_manager is None: - content_manager = self.policy.content_manager - return content_manager.get_content(self, *args, **kw) - - def set_content(self, *args, content_manager=None, **kw): - if content_manager is None: - content_manager = self.policy.content_manager - content_manager.set_content(self, *args, **kw) - - def _make_multipart(self, subtype, disallowed_subtypes, boundary): - if self.get_content_maintype() == 'multipart': - existing_subtype = self.get_content_subtype() - disallowed_subtypes = disallowed_subtypes + (subtype,) - if existing_subtype in disallowed_subtypes: - raise ValueError("Cannot convert {} to {}".format( - existing_subtype, subtype)) - keep_headers = [] - part_headers = [] - for name, value in self._headers: - if name.lower().startswith('content-'): - part_headers.append((name, value)) - else: - keep_headers.append((name, value)) - if part_headers: - # There is existing content, move it to the first subpart. - part = type(self)(policy=self.policy) - part._headers = part_headers - part._payload = self._payload - self._payload = [part] - else: - self._payload = [] - self._headers = keep_headers - self['Content-Type'] = 'multipart/' + subtype - if boundary is not None: - self.set_param('boundary', boundary) - - def make_related(self, boundary=None): - self._make_multipart('related', ('alternative', 'mixed'), boundary) - - def make_alternative(self, boundary=None): - self._make_multipart('alternative', ('mixed',), boundary) - - def make_mixed(self, boundary=None): - self._make_multipart('mixed', (), boundary) - - def _add_multipart(self, _subtype, *args, _disp=None, **kw): - if (self.get_content_maintype() != 'multipart' or - self.get_content_subtype() != _subtype): - getattr(self, 'make_' + _subtype)() - part = type(self)(policy=self.policy) - part.set_content(*args, **kw) - if _disp and 'content-disposition' not in part: - part['Content-Disposition'] = _disp - self.attach(part) - - def add_related(self, *args, **kw): - self._add_multipart('related', *args, _disp='inline', **kw) - - def add_alternative(self, *args, **kw): - self._add_multipart('alternative', *args, **kw) - - def add_attachment(self, *args, **kw): - self._add_multipart('mixed', *args, _disp='attachment', **kw) - - def clear(self): - self._headers = [] - self._payload = None - - def clear_content(self): - self._headers = [(n, v) for n, v in self._headers - if not n.lower().startswith('content-')] - self._payload = None - - -class EmailMessage(MIMEPart): - - def set_content(self, *args, **kw): - super().set_content(*args, **kw) - if 'MIME-Version' not in self: - self['MIME-Version'] = '1.0' diff --git a/Python314_4_x86_Template/Lib/email/mime/__init__.py b/Python314_4_x86_Template/Lib/email/mime/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/email/mime/application.py b/Python314_4_x86_Template/Lib/email/mime/application.py deleted file mode 100644 index 9a9d213d2..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/application.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Keith Dart -# Contact: email-sig@python.org - -"""Class representing application/* type MIME documents.""" - -__all__ = ["MIMEApplication"] - -from email import encoders -from email.mime.nonmultipart import MIMENonMultipart - - -class MIMEApplication(MIMENonMultipart): - """Class for generating application/* MIME documents.""" - - def __init__(self, _data, _subtype='octet-stream', - _encoder=encoders.encode_base64, *, policy=None, **_params): - """Create an application/* type MIME document. - - _data contains the bytes for the raw application data. - - _subtype is the MIME content type subtype, defaulting to - 'octet-stream'. - - _encoder is a function which will perform the actual encoding for - transport of the application data, defaulting to base64 encoding. - - Any additional keyword arguments are passed to the base class - constructor, which turns them into parameters on the Content-Type - header. - """ - if _subtype is None: - raise TypeError('Invalid application MIME subtype') - MIMENonMultipart.__init__(self, 'application', _subtype, policy=policy, - **_params) - self.set_payload(_data) - _encoder(self) diff --git a/Python314_4_x86_Template/Lib/email/mime/audio.py b/Python314_4_x86_Template/Lib/email/mime/audio.py deleted file mode 100644 index 85f4a9552..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/audio.py +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Anthony Baxter -# Contact: email-sig@python.org - -"""Class representing audio/* type MIME documents.""" - -__all__ = ['MIMEAudio'] - -from email import encoders -from email.mime.nonmultipart import MIMENonMultipart - - -class MIMEAudio(MIMENonMultipart): - """Class for generating audio/* MIME documents.""" - - def __init__(self, _audiodata, _subtype=None, - _encoder=encoders.encode_base64, *, policy=None, **_params): - """Create an audio/* type MIME document. - - _audiodata contains the bytes for the raw audio data. If this data - can be decoded as au, wav, aiff, or aifc, then the - subtype will be automatically included in the Content-Type header. - Otherwise, you can specify the specific audio subtype via the - _subtype parameter. If _subtype is not given, and no subtype can be - guessed, a TypeError is raised. - - _encoder is a function which will perform the actual encoding for - transport of the image data. It takes one argument, which is this - Image instance. It should use get_payload() and set_payload() to - change the payload to the encoded form. It should also add any - Content-Transfer-Encoding or other headers to the message as - necessary. The default encoding is Base64. - - Any additional keyword arguments are passed to the base class - constructor, which turns them into parameters on the Content-Type - header. - """ - if _subtype is None: - _subtype = _what(_audiodata) - if _subtype is None: - raise TypeError('Could not find audio MIME subtype') - MIMENonMultipart.__init__(self, 'audio', _subtype, policy=policy, - **_params) - self.set_payload(_audiodata) - _encoder(self) - - -_rules = [] - - -# Originally from the sndhdr module. -# -# There are others in sndhdr that don't have MIME types. :( -# Additional ones to be added to sndhdr? midi, mp3, realaudio, wma?? -def _what(data): - # Try to identify a sound file type. - # - # sndhdr.what() had a pretty cruddy interface, unfortunately. This is why - # we re-do it here. It would be easier to reverse engineer the Unix 'file' - # command and use the standard 'magic' file, as shipped with a modern Unix. - for testfn in _rules: - if res := testfn(data): - return res - else: - return None - - -def rule(rulefunc): - _rules.append(rulefunc) - return rulefunc - - -@rule -def _aiff(h): - if not h.startswith(b'FORM'): - return None - if h[8:12] in {b'AIFC', b'AIFF'}: - return 'x-aiff' - else: - return None - - -@rule -def _au(h): - if h.startswith(b'.snd'): - return 'basic' - else: - return None - - -@rule -def _wav(h): - # 'RIFF' <len> 'WAVE' 'fmt ' <len> - if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ': - return None - else: - return "x-wav" diff --git a/Python314_4_x86_Template/Lib/email/mime/base.py b/Python314_4_x86_Template/Lib/email/mime/base.py deleted file mode 100644 index da4c6e591..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/base.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Base class for MIME specializations.""" - -__all__ = ['MIMEBase'] - -import email.policy - -from email import message - - -class MIMEBase(message.Message): - """Base class for MIME specializations.""" - - def __init__(self, _maintype, _subtype, *, policy=None, **_params): - """This constructor adds a Content-Type: and a MIME-Version: header. - - The Content-Type: header is taken from the _maintype and _subtype - arguments. Additional parameters for this header are taken from the - keyword arguments. - """ - if policy is None: - policy = email.policy.compat32 - message.Message.__init__(self, policy=policy) - ctype = '%s/%s' % (_maintype, _subtype) - self.add_header('Content-Type', ctype, **_params) - self['MIME-Version'] = '1.0' diff --git a/Python314_4_x86_Template/Lib/email/mime/image.py b/Python314_4_x86_Template/Lib/email/mime/image.py deleted file mode 100644 index dab968584..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/image.py +++ /dev/null @@ -1,152 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Class representing image/* type MIME documents.""" - -__all__ = ['MIMEImage'] - -from email import encoders -from email.mime.nonmultipart import MIMENonMultipart - - -class MIMEImage(MIMENonMultipart): - """Class for generating image/* type MIME documents.""" - - def __init__(self, _imagedata, _subtype=None, - _encoder=encoders.encode_base64, *, policy=None, **_params): - """Create an image/* type MIME document. - - _imagedata contains the bytes for the raw image data. If the data - type can be detected (jpeg, png, gif, tiff, rgb, pbm, pgm, ppm, - rast, xbm, bmp, webp, and exr attempted), then the subtype will be - automatically included in the Content-Type header. Otherwise, you can - specify the specific image subtype via the _subtype parameter. - - _encoder is a function which will perform the actual encoding for - transport of the image data. It takes one argument, which is this - Image instance. It should use get_payload() and set_payload() to - change the payload to the encoded form. It should also add any - Content-Transfer-Encoding or other headers to the message as - necessary. The default encoding is Base64. - - Any additional keyword arguments are passed to the base class - constructor, which turns them into parameters on the Content-Type - header. - """ - _subtype = _what(_imagedata) if _subtype is None else _subtype - if _subtype is None: - raise TypeError('Could not guess image MIME subtype') - MIMENonMultipart.__init__(self, 'image', _subtype, policy=policy, - **_params) - self.set_payload(_imagedata) - _encoder(self) - - -_rules = [] - - -# Originally from the imghdr module. -def _what(data): - for rule in _rules: - if res := rule(data): - return res - else: - return None - - -def rule(rulefunc): - _rules.append(rulefunc) - return rulefunc - - -@rule -def _jpeg(h): - """JPEG data with JFIF or Exif markers; and raw JPEG""" - if h[6:10] in (b'JFIF', b'Exif'): - return 'jpeg' - elif h[:4] == b'\xff\xd8\xff\xdb': - return 'jpeg' - - -@rule -def _png(h): - if h.startswith(b'\211PNG\r\n\032\n'): - return 'png' - - -@rule -def _gif(h): - """GIF ('87 and '89 variants)""" - if h[:6] in (b'GIF87a', b'GIF89a'): - return 'gif' - - -@rule -def _tiff(h): - """TIFF (can be in Motorola or Intel byte order)""" - if h[:2] in (b'MM', b'II'): - return 'tiff' - - -@rule -def _rgb(h): - """SGI image library""" - if h.startswith(b'\001\332'): - return 'rgb' - - -@rule -def _pbm(h): - """PBM (portable bitmap)""" - if len(h) >= 3 and \ - h[0] == ord(b'P') and h[1] in b'14' and h[2] in b' \t\n\r': - return 'pbm' - - -@rule -def _pgm(h): - """PGM (portable graymap)""" - if len(h) >= 3 and \ - h[0] == ord(b'P') and h[1] in b'25' and h[2] in b' \t\n\r': - return 'pgm' - - -@rule -def _ppm(h): - """PPM (portable pixmap)""" - if len(h) >= 3 and \ - h[0] == ord(b'P') and h[1] in b'36' and h[2] in b' \t\n\r': - return 'ppm' - - -@rule -def _rast(h): - """Sun raster file""" - if h.startswith(b'\x59\xA6\x6A\x95'): - return 'rast' - - -@rule -def _xbm(h): - """X bitmap (X10 or X11)""" - if h.startswith(b'#define '): - return 'xbm' - - -@rule -def _bmp(h): - if h.startswith(b'BM'): - return 'bmp' - - -@rule -def _webp(h): - if h.startswith(b'RIFF') and h[8:12] == b'WEBP': - return 'webp' - - -@rule -def _exr(h): - if h.startswith(b'\x76\x2f\x31\x01'): - return 'exr' diff --git a/Python314_4_x86_Template/Lib/email/mime/message.py b/Python314_4_x86_Template/Lib/email/mime/message.py deleted file mode 100644 index 13d9ff599..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/message.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Class representing message/* MIME documents.""" - -__all__ = ['MIMEMessage'] - -from email import message -from email.mime.nonmultipart import MIMENonMultipart - - -class MIMEMessage(MIMENonMultipart): - """Class representing message/* MIME documents.""" - - def __init__(self, _msg, _subtype='rfc822', *, policy=None): - """Create a message/* type MIME document. - - _msg is a message object and must be an instance of Message, or a - derived class of Message, otherwise a TypeError is raised. - - Optional _subtype defines the subtype of the contained message. The - default is "rfc822" (this is defined by the MIME standard, even though - the term "rfc822" is technically outdated by RFC 2822). - """ - MIMENonMultipart.__init__(self, 'message', _subtype, policy=policy) - if not isinstance(_msg, message.Message): - raise TypeError('Argument is not an instance of Message') - # It's convenient to use this base class method. We need to do it - # this way or we'll get an exception - message.Message.attach(self, _msg) - # And be sure our default type is set correctly - self.set_default_type('message/rfc822') diff --git a/Python314_4_x86_Template/Lib/email/mime/multipart.py b/Python314_4_x86_Template/Lib/email/mime/multipart.py deleted file mode 100644 index 1abb84d5f..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/multipart.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (C) 2002 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Base class for MIME multipart/* type messages.""" - -__all__ = ['MIMEMultipart'] - -from email.mime.base import MIMEBase - - -class MIMEMultipart(MIMEBase): - """Base class for MIME multipart/* type messages.""" - - def __init__(self, _subtype='mixed', boundary=None, _subparts=None, - *, policy=None, - **_params): - """Creates a multipart/* type message. - - By default, creates a multipart/mixed message, with proper - Content-Type and MIME-Version headers. - - _subtype is the subtype of the multipart content type, defaulting to - 'mixed'. - - boundary is the multipart boundary string. By default it is - calculated as needed. - - _subparts is a sequence of initial subparts for the payload. It - must be an iterable object, such as a list. You can always - attach new subparts to the message by using the attach() method. - - Additional parameters for the Content-Type header are taken from the - keyword arguments (or passed into the _params argument). - """ - MIMEBase.__init__(self, 'multipart', _subtype, policy=policy, **_params) - - # Initialise _payload to an empty list as the Message superclass's - # implementation of is_multipart assumes that _payload is a list for - # multipart messages. - self._payload = [] - - if _subparts: - for p in _subparts: - self.attach(p) - if boundary: - self.set_boundary(boundary) diff --git a/Python314_4_x86_Template/Lib/email/mime/nonmultipart.py b/Python314_4_x86_Template/Lib/email/mime/nonmultipart.py deleted file mode 100644 index 5beab3a44..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/nonmultipart.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2002 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Base class for MIME type messages that are not multipart.""" - -__all__ = ['MIMENonMultipart'] - -from email import errors -from email.mime.base import MIMEBase - - -class MIMENonMultipart(MIMEBase): - """Base class for MIME non-multipart type messages.""" - - def attach(self, payload): - # The public API prohibits attaching multiple subparts to MIMEBase - # derived subtypes since none of them are, by definition, of content - # type multipart/* - raise errors.MultipartConversionError( - 'Cannot attach additional subparts to non-multipart/*') diff --git a/Python314_4_x86_Template/Lib/email/mime/text.py b/Python314_4_x86_Template/Lib/email/mime/text.py deleted file mode 100644 index aa4da7f82..000000000 --- a/Python314_4_x86_Template/Lib/email/mime/text.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Class representing text/* type MIME documents.""" - -__all__ = ['MIMEText'] - -from email.mime.nonmultipart import MIMENonMultipart - - -class MIMEText(MIMENonMultipart): - """Class for generating text/* type MIME documents.""" - - def __init__(self, _text, _subtype='plain', _charset=None, *, policy=None): - """Create a text/* type MIME document. - - _text is the string for this message object. - - _subtype is the MIME sub content type, defaulting to "plain". - - _charset is the character set parameter added to the Content-Type - header. This defaults to "us-ascii". Note that as a side-effect, the - Content-Transfer-Encoding header will also be set. - """ - - # If no _charset was specified, check to see if there are non-ascii - # characters present. If not, use 'us-ascii', otherwise use utf-8. - # XXX: This can be removed once #7304 is fixed. - if _charset is None: - try: - _text.encode('us-ascii') - _charset = 'us-ascii' - except UnicodeEncodeError: - _charset = 'utf-8' - - MIMENonMultipart.__init__(self, 'text', _subtype, policy=policy, - charset=str(_charset)) - - self.set_payload(_text, _charset) diff --git a/Python314_4_x86_Template/Lib/email/parser.py b/Python314_4_x86_Template/Lib/email/parser.py deleted file mode 100644 index c6a51dd8e..000000000 --- a/Python314_4_x86_Template/Lib/email/parser.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw, Thomas Wouters, Anthony Baxter -# Contact: email-sig@python.org - -"""A parser of RFC 5322 and MIME email messages.""" - -__all__ = ['Parser', 'HeaderParser', 'BytesParser', 'BytesHeaderParser', - 'FeedParser', 'BytesFeedParser'] - -from io import StringIO, TextIOWrapper - -from email.feedparser import FeedParser, BytesFeedParser -from email._policybase import compat32 - - -class Parser: - def __init__(self, _class=None, *, policy=compat32): - """Parser of RFC 5322 and MIME email messages. - - Creates an in-memory object tree representing the email message, which - can then be manipulated and turned over to a Generator to return the - textual representation of the message. - - The string must be formatted as a block of RFC 5322 headers and header - continuation lines, optionally preceded by a 'Unix-from' header. The - header block is terminated either by the end of the string or by a - blank line. - - _class is the class to instantiate for new message objects when they - must be created. This class must have a constructor that can take - zero arguments. Default is Message.Message. - - The policy keyword specifies a policy object that controls a number of - aspects of the parser's operation. The default policy maintains - backward compatibility. - - """ - self._class = _class - self.policy = policy - - def parse(self, fp, headersonly=False): - """Create a message structure from the data in a file. - - Reads all the data from the file and returns the root of the message - structure. Optional headersonly is a flag specifying whether to stop - parsing after reading the headers or not. The default is False, - meaning it parses the entire contents of the file. - """ - feedparser = FeedParser(self._class, policy=self.policy) - if headersonly: - feedparser._set_headersonly() - while data := fp.read(8192): - feedparser.feed(data) - return feedparser.close() - - def parsestr(self, text, headersonly=False): - """Create a message structure from a string. - - Returns the root of the message structure. Optional headersonly is a - flag specifying whether to stop parsing after reading the headers or - not. The default is False, meaning it parses the entire contents of - the file. - """ - return self.parse(StringIO(text), headersonly=headersonly) - - -class HeaderParser(Parser): - def parse(self, fp, headersonly=True): - return Parser.parse(self, fp, True) - - def parsestr(self, text, headersonly=True): - return Parser.parsestr(self, text, True) - - -class BytesParser: - - def __init__(self, *args, **kw): - """Parser of binary RFC 5322 and MIME email messages. - - Creates an in-memory object tree representing the email message, which - can then be manipulated and turned over to a Generator to return the - textual representation of the message. - - The input must be formatted as a block of RFC 5322 headers and header - continuation lines, optionally preceded by a 'Unix-from' header. The - header block is terminated either by the end of the input or by a - blank line. - - _class is the class to instantiate for new message objects when they - must be created. This class must have a constructor that can take - zero arguments. Default is Message.Message. - """ - self.parser = Parser(*args, **kw) - - def parse(self, fp, headersonly=False): - """Create a message structure from the data in a binary file. - - Reads all the data from the file and returns the root of the message - structure. Optional headersonly is a flag specifying whether to stop - parsing after reading the headers or not. The default is False, - meaning it parses the entire contents of the file. - """ - fp = TextIOWrapper(fp, encoding='ascii', errors='surrogateescape') - try: - return self.parser.parse(fp, headersonly) - finally: - fp.detach() - - - def parsebytes(self, text, headersonly=False): - """Create a message structure from a byte string. - - Returns the root of the message structure. Optional headersonly is a - flag specifying whether to stop parsing after reading the headers or - not. The default is False, meaning it parses the entire contents of - the file. - """ - text = text.decode('ASCII', errors='surrogateescape') - return self.parser.parsestr(text, headersonly) - - -class BytesHeaderParser(BytesParser): - def parse(self, fp, headersonly=True): - return BytesParser.parse(self, fp, headersonly=True) - - def parsebytes(self, text, headersonly=True): - return BytesParser.parsebytes(self, text, headersonly=True) diff --git a/Python314_4_x86_Template/Lib/email/policy.py b/Python314_4_x86_Template/Lib/email/policy.py deleted file mode 100644 index 416915010..000000000 --- a/Python314_4_x86_Template/Lib/email/policy.py +++ /dev/null @@ -1,239 +0,0 @@ -"""This will be the home for the policy that hooks in the new -code that adds all the email6 features. -""" - -import re -import sys -from email._policybase import ( - Compat32, - Policy, - _extend_docstrings, - compat32, - validate_header_name -) -from email.utils import _has_surrogates -from email.headerregistry import HeaderRegistry as HeaderRegistry -from email.contentmanager import raw_data_manager -from email.message import EmailMessage - -__all__ = [ - 'Compat32', - 'compat32', - 'Policy', - 'EmailPolicy', - 'default', - 'strict', - 'SMTP', - 'HTTP', - ] - -linesep_splitter = re.compile(r'\n|\r\n?') - -@_extend_docstrings -class EmailPolicy(Policy): - - """+ - PROVISIONAL - - The API extensions enabled by this policy are currently provisional. - Refer to the documentation for details. - - This policy adds new header parsing and folding algorithms. Instead of - simple strings, headers are custom objects with custom attributes - depending on the type of the field. The folding algorithm fully - implements RFCs 2047 and 5322. - - In addition to the settable attributes listed above that apply to - all Policies, this policy adds the following additional attributes: - - utf8 -- if False (the default) message headers will be - serialized as ASCII, using encoded words to encode - any non-ASCII characters in the source strings. If - True, the message headers will be serialized using - utf8 and will not contain encoded words (see RFC - 6532 for more on this serialization format). - - refold_source -- if the value for a header in the Message object - came from the parsing of some source, this attribute - indicates whether or not a generator should refold - that value when transforming the message back into - stream form. The possible values are: - - none -- all source values use original folding - long -- source values that have any line that is - longer than max_line_length will be - refolded - all -- all values are refolded. - - The default is 'long'. - - header_factory -- a callable that takes two arguments, 'name' and - 'value', where 'name' is a header field name and - 'value' is an unfolded header field value, and - returns a string-like object that represents that - header. A default header_factory is provided that - understands some of the RFC5322 header field types. - (Currently address fields and date fields have - special treatment, while all other fields are - treated as unstructured. This list will be - completed before the extension is marked stable.) - - content_manager -- an object with at least two methods: get_content - and set_content. When the get_content or - set_content method of a Message object is called, - it calls the corresponding method of this object, - passing it the message object as its first argument, - and any arguments or keywords that were passed to - it as additional arguments. The default - content_manager is - :data:`~email.contentmanager.raw_data_manager`. - - """ - - message_factory = EmailMessage - utf8 = False - refold_source = 'long' - header_factory = HeaderRegistry() - content_manager = raw_data_manager - - def __init__(self, **kw): - # Ensure that each new instance gets a unique header factory - # (as opposed to clones, which share the factory). - if 'header_factory' not in kw: - object.__setattr__(self, 'header_factory', HeaderRegistry()) - super().__init__(**kw) - - def header_max_count(self, name): - """+ - The implementation for this class returns the max_count attribute from - the specialized header class that would be used to construct a header - of type 'name'. - """ - return self.header_factory[name].max_count - - # The logic of the next three methods is chosen such that it is possible to - # switch a Message object between a Compat32 policy and a policy derived - # from this class and have the results stay consistent. This allows a - # Message object constructed with this policy to be passed to a library - # that only handles Compat32 objects, or to receive such an object and - # convert it to use the newer style by just changing its policy. It is - # also chosen because it postpones the relatively expensive full rfc5322 - # parse until as late as possible when parsing from source, since in many - # applications only a few headers will actually be inspected. - - def header_source_parse(self, sourcelines): - """+ - The name is parsed as everything up to the ':' and returned unmodified. - The value is determined by stripping leading whitespace off the - remainder of the first line joined with all subsequent lines, and - stripping any trailing carriage return or linefeed characters. (This - is the same as Compat32). - - """ - name, value = sourcelines[0].split(':', 1) - value = ''.join((value, *sourcelines[1:])).lstrip(' \t\r\n') - return (name, value.rstrip('\r\n')) - - def header_store_parse(self, name, value): - """+ - The name is returned unchanged. If the input value has a 'name' - attribute and it matches the name ignoring case, the value is returned - unchanged. Otherwise the name and value are passed to header_factory - method, and the resulting custom header object is returned as the - value. In this case a ValueError is raised if the input value contains - CR or LF characters. - - """ - validate_header_name(name) - if hasattr(value, 'name') and value.name.lower() == name.lower(): - return (name, value) - if isinstance(value, str) and len(value.splitlines())>1: - # XXX this error message isn't quite right when we use splitlines - # (see issue 22233), but I'm not sure what should happen here. - raise ValueError("Header values may not contain linefeed " - "or carriage return characters") - return (name, self.header_factory(name, value)) - - def header_fetch_parse(self, name, value): - """+ - If the value has a 'name' attribute, it is returned to unmodified. - Otherwise the name and the value with any linesep characters removed - are passed to the header_factory method, and the resulting custom - header object is returned. Any surrogateescaped bytes get turned - into the unicode unknown-character glyph. - - """ - if hasattr(value, 'name'): - return value - # We can't use splitlines here because it splits on more than \r and \n. - value = ''.join(linesep_splitter.split(value)) - return self.header_factory(name, value) - - def fold(self, name, value): - """+ - Header folding is controlled by the refold_source policy setting. A - value is considered to be a 'source value' if and only if it does not - have a 'name' attribute (having a 'name' attribute means it is a header - object of some sort). If a source value needs to be refolded according - to the policy, it is converted into a custom header object by passing - the name and the value with any linesep characters removed to the - header_factory method. Folding of a custom header object is done by - calling its fold method with the current policy. - - Source values are split into lines using splitlines. If the value is - not to be refolded, the lines are rejoined using the linesep from the - policy and returned. The exception is lines containing non-ascii - binary data. In that case the value is refolded regardless of the - refold_source setting, which causes the binary data to be CTE encoded - using the unknown-8bit charset. - - """ - return self._fold(name, value, refold_binary=True) - - def fold_binary(self, name, value): - """+ - The same as fold if cte_type is 7bit, except that the returned value is - bytes. - - If cte_type is 8bit, non-ASCII binary data is converted back into - bytes. Headers with binary data are not refolded, regardless of the - refold_header setting, since there is no way to know whether the binary - data consists of single byte characters or multibyte characters. - - If utf8 is true, headers are encoded to utf8, otherwise to ascii with - non-ASCII unicode rendered as encoded words. - - """ - folded = self._fold(name, value, refold_binary=self.cte_type=='7bit') - charset = 'utf8' if self.utf8 else 'ascii' - return folded.encode(charset, 'surrogateescape') - - def _fold(self, name, value, refold_binary=False): - if hasattr(value, 'name'): - return value.fold(policy=self) - maxlen = self.max_line_length if self.max_line_length else sys.maxsize - # We can't use splitlines here because it splits on more than \r and \n. - lines = linesep_splitter.split(value) - refold = (self.refold_source == 'all' or - self.refold_source == 'long' and - (lines and len(lines[0])+len(name)+2 > maxlen or - any(len(x) > maxlen for x in lines[1:]))) - - if not refold: - if not self.utf8: - refold = not value.isascii() - elif refold_binary: - refold = _has_surrogates(value) - if refold: - return self.header_factory(name, ''.join(lines)).fold(policy=self) - - return name + ': ' + self.linesep.join(lines) + self.linesep - - -default = EmailPolicy() -# Make the default policy use the class default header_factory -del default.header_factory -strict = default.clone(raise_on_defect=True) -SMTP = default.clone(linesep='\r\n') -HTTP = default.clone(linesep='\r\n', max_line_length=None) -SMTPUTF8 = SMTP.clone(utf8=True) diff --git a/Python314_4_x86_Template/Lib/email/quoprimime.py b/Python314_4_x86_Template/Lib/email/quoprimime.py deleted file mode 100644 index 27c7ea55c..000000000 --- a/Python314_4_x86_Template/Lib/email/quoprimime.py +++ /dev/null @@ -1,300 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Ben Gertzfield -# Contact: email-sig@python.org - -"""Quoted-printable content transfer encoding per RFCs 2045-2047. - -This module handles the content transfer encoding method defined in RFC 2045 -to encode US ASCII-like 8-bit data called 'quoted-printable'. It is used to -safely encode text that is in a character set similar to the 7-bit US ASCII -character set, but that includes some 8-bit characters that are normally not -allowed in email bodies or headers. - -Quoted-printable is very space-inefficient for encoding binary files; use the -email.base64mime module for that instead. - -This module provides an interface to encode and decode both headers and bodies -with quoted-printable encoding. - -RFC 2045 defines a method for including character set information in an -'encoded-word' in a header. This method is commonly used for 8-bit real names -in To:/From:/Cc: etc. fields, as well as Subject: lines. - -This module does not do the line wrapping or end-of-line character -conversion necessary for proper internationalized headers; it only -does dumb encoding and decoding. To deal with the various line -wrapping issues, use the email.header module. -""" - -__all__ = [ - 'body_decode', - 'body_encode', - 'body_length', - 'decode', - 'decodestring', - 'header_decode', - 'header_encode', - 'header_length', - 'quote', - 'unquote', - ] - -import re - -from string import ascii_letters, digits, hexdigits - -CRLF = '\r\n' -NL = '\n' -EMPTYSTRING = '' - -# Build a mapping of octets to the expansion of that octet. Since we're only -# going to have 256 of these things, this isn't terribly inefficient -# space-wise. Remember that headers and bodies have different sets of safe -# characters. Initialize both maps with the full expansion, and then override -# the safe bytes with the more compact form. -_QUOPRI_MAP = ['=%02X' % c for c in range(256)] -_QUOPRI_HEADER_MAP = _QUOPRI_MAP[:] -_QUOPRI_BODY_MAP = _QUOPRI_MAP[:] - -# Safe header bytes which need no encoding. -for c in b'-!*+/' + ascii_letters.encode('ascii') + digits.encode('ascii'): - _QUOPRI_HEADER_MAP[c] = chr(c) -# Headers have one other special encoding; spaces become underscores. -_QUOPRI_HEADER_MAP[ord(' ')] = '_' - -# Safe body bytes which need no encoding. -for c in (b' !"#$%&\'()*+,-./0123456789:;<>' - b'?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`' - b'abcdefghijklmnopqrstuvwxyz{|}~\t'): - _QUOPRI_BODY_MAP[c] = chr(c) - - - -# Helpers -def header_check(octet): - """Return True if the octet should be escaped with header quopri.""" - return chr(octet) != _QUOPRI_HEADER_MAP[octet] - - -def body_check(octet): - """Return True if the octet should be escaped with body quopri.""" - return chr(octet) != _QUOPRI_BODY_MAP[octet] - - -def header_length(bytearray): - """Return a header quoted-printable encoding length. - - Note that this does not include any RFC 2047 chrome added by - `header_encode()`. - - :param bytearray: An array of bytes (a.k.a. octets). - :return: The length in bytes of the byte array when it is encoded with - quoted-printable for headers. - """ - return sum(len(_QUOPRI_HEADER_MAP[octet]) for octet in bytearray) - - -def body_length(bytearray): - """Return a body quoted-printable encoding length. - - :param bytearray: An array of bytes (a.k.a. octets). - :return: The length in bytes of the byte array when it is encoded with - quoted-printable for bodies. - """ - return sum(len(_QUOPRI_BODY_MAP[octet]) for octet in bytearray) - - -def _max_append(L, s, maxlen, extra=''): - if not isinstance(s, str): - s = chr(s) - if not L: - L.append(s.lstrip()) - elif len(L[-1]) + len(s) <= maxlen: - L[-1] += extra + s - else: - L.append(s.lstrip()) - - -def unquote(s): - """Turn a string in the form =AB to the ASCII character with value 0xab""" - return chr(int(s[1:3], 16)) - - -def quote(c): - return _QUOPRI_MAP[ord(c)] - - -def header_encode(header_bytes, charset='iso-8859-1'): - """Encode a single header line with quoted-printable (like) encoding. - - Defined in RFC 2045, this 'Q' encoding is similar to quoted-printable, but - used specifically for email header fields to allow charsets with mostly 7 - bit characters (and some 8 bit) to remain more or less readable in non-RFC - 2045 aware mail clients. - - charset names the character set to use in the RFC 2046 header. It - defaults to iso-8859-1. - """ - # Return empty headers as an empty string. - if not header_bytes: - return '' - # Iterate over every byte, encoding if necessary. - encoded = header_bytes.decode('latin1').translate(_QUOPRI_HEADER_MAP) - # Now add the RFC chrome to each encoded chunk and glue the chunks - # together. - return '=?%s?q?%s?=' % (charset, encoded) - - -_QUOPRI_BODY_ENCODE_MAP = _QUOPRI_BODY_MAP[:] -for c in b'\r\n': - _QUOPRI_BODY_ENCODE_MAP[c] = chr(c) -del c - -def body_encode(body, maxlinelen=76, eol=NL): - """Encode with quoted-printable, wrapping at maxlinelen characters. - - Each line of encoded text will end with eol, which defaults to "\\n". Set - this to "\\r\\n" if you will be using the result of this function directly - in an email. - - Each line will be wrapped at, at most, maxlinelen characters before the - eol string (maxlinelen defaults to 76 characters, the maximum value - permitted by RFC 2045). Long lines will have the 'soft line break' - quoted-printable character "=" appended to them, so the decoded text will - be identical to the original text. - - The minimum maxlinelen is 4 to have room for a quoted character ("=XX") - followed by a soft line break. Smaller values will generate a - ValueError. - - """ - - if maxlinelen < 4: - raise ValueError("maxlinelen must be at least 4") - if not body: - return body - - # quote special characters - body = body.translate(_QUOPRI_BODY_ENCODE_MAP) - - soft_break = '=' + eol - # leave space for the '=' at the end of a line - maxlinelen1 = maxlinelen - 1 - - encoded_body = [] - append = encoded_body.append - - for line in body.splitlines(): - # break up the line into pieces no longer than maxlinelen - 1 - start = 0 - laststart = len(line) - 1 - maxlinelen - while start <= laststart: - stop = start + maxlinelen1 - # make sure we don't break up an escape sequence - if line[stop - 2] == '=': - append(line[start:stop - 1]) - start = stop - 2 - elif line[stop - 1] == '=': - append(line[start:stop]) - start = stop - 1 - else: - append(line[start:stop] + '=') - start = stop - - # handle rest of line, special case if line ends in whitespace - if line and line[-1] in ' \t': - room = start - laststart - if room >= 3: - # It's a whitespace character at end-of-line, and we have room - # for the three-character quoted encoding. - q = quote(line[-1]) - elif room == 2: - # There's room for the whitespace character and a soft break. - q = line[-1] + soft_break - else: - # There's room only for a soft break. The quoted whitespace - # will be the only content on the subsequent line. - q = soft_break + quote(line[-1]) - append(line[start:-1] + q) - else: - append(line[start:]) - - # add back final newline if present - if body[-1] in CRLF: - append('') - - return eol.join(encoded_body) - - - -# BAW: I'm not sure if the intent was for the signature of this function to be -# the same as base64MIME.decode() or not... -def decode(encoded, eol=NL): - """Decode a quoted-printable string. - - Lines are separated with eol, which defaults to \\n. - """ - if not encoded: - return encoded - # BAW: see comment in encode() above. Again, we're building up the - # decoded string with string concatenation, which could be done much more - # efficiently. - decoded = '' - - for line in encoded.splitlines(): - line = line.rstrip() - if not line: - decoded += eol - continue - - i = 0 - n = len(line) - while i < n: - c = line[i] - if c != '=': - decoded += c - i += 1 - # Otherwise, c == "=". Are we at the end of the line? If so, add - # a soft line break. - elif i+1 == n: - i += 1 - continue - # Decode if in form =AB - elif i+2 < n and line[i+1] in hexdigits and line[i+2] in hexdigits: - decoded += unquote(line[i:i+3]) - i += 3 - # Otherwise, not in form =AB, pass literally - else: - decoded += c - i += 1 - - if i == n: - decoded += eol - # Special case if original string did not end with eol - if encoded[-1] not in '\r\n' and decoded.endswith(eol): - decoded = decoded[:-1] - return decoded - - -# For convenience and backwards compatibility w/ standard base64 module -body_decode = decode -decodestring = decode - - - -def _unquote_match(match): - """Turn a match in the form =AB to the ASCII character with value 0xab""" - s = match.group(0) - return unquote(s) - - -# Header decoding is done a bit differently -def header_decode(s): - """Decode a string encoded with RFC 2045 MIME header 'Q' encoding. - - This function does not parse a full MIME header value encoded with - quoted-printable (like =?iso-8859-1?q?Hello_World?=) -- please use - the high level email.header class for that functionality. - """ - s = s.replace('_', ' ') - return re.sub(r'=[a-fA-F0-9]{2}', _unquote_match, s, flags=re.ASCII) diff --git a/Python314_4_x86_Template/Lib/email/utils.py b/Python314_4_x86_Template/Lib/email/utils.py deleted file mode 100644 index 3de1f0d24..000000000 --- a/Python314_4_x86_Template/Lib/email/utils.py +++ /dev/null @@ -1,486 +0,0 @@ -# Copyright (C) 2001 Python Software Foundation -# Author: Barry Warsaw -# Contact: email-sig@python.org - -"""Miscellaneous utilities.""" - -__all__ = [ - 'collapse_rfc2231_value', - 'decode_params', - 'decode_rfc2231', - 'encode_rfc2231', - 'formataddr', - 'formatdate', - 'format_datetime', - 'getaddresses', - 'make_msgid', - 'mktime_tz', - 'parseaddr', - 'parsedate', - 'parsedate_tz', - 'parsedate_to_datetime', - 'unquote', - ] - -import os -import re -import time -import datetime -import urllib.parse - -from email._parseaddr import quote -from email._parseaddr import AddressList as _AddressList -from email._parseaddr import mktime_tz - -from email._parseaddr import parsedate, parsedate_tz, _parsedate_tz - -COMMASPACE = ', ' -EMPTYSTRING = '' -UEMPTYSTRING = '' -CRLF = '\r\n' -TICK = "'" - -specialsre = re.compile(r'[][\\()<>@,:;".]') -escapesre = re.compile(r'[\\"]') - - -def _has_surrogates(s): - """Return True if s may contain surrogate-escaped binary data.""" - # This check is based on the fact that unless there are surrogates, utf8 - # (Python's default encoding) can encode any string. This is the fastest - # way to check for surrogates, see bpo-11454 (moved to gh-55663) for timings. - try: - s.encode() - return False - except UnicodeEncodeError: - return True - -# How to deal with a string containing bytes before handing it to the -# application through the 'normal' interface. -def _sanitize(string): - # Turn any escaped bytes into unicode 'unknown' char. If the escaped - # bytes happen to be utf-8 they will instead get decoded, even if they - # were invalid in the charset the source was supposed to be in. This - # seems like it is not a bad thing; a defect was still registered. - original_bytes = string.encode('utf-8', 'surrogateescape') - return original_bytes.decode('utf-8', 'replace') - - - -# Helpers - -def formataddr(pair, charset='utf-8'): - """The inverse of parseaddr(), this takes a 2-tuple of the form - (realname, email_address) and returns the string value suitable - for an RFC 2822 From, To or Cc header. - - If the first element of pair is false, then the second element is - returned unmodified. - - The optional charset is the character set that is used to encode - realname in case realname is not ASCII safe. Can be an instance of str or - a Charset-like object which has a header_encode method. Default is - 'utf-8'. - """ - name, address = pair - # The address MUST (per RFC) be ascii, so raise a UnicodeError if it isn't. - address.encode('ascii') - if name: - try: - name.encode('ascii') - except UnicodeEncodeError: - if isinstance(charset, str): - # lazy import to improve module import time - from email.charset import Charset - charset = Charset(charset) - encoded_name = charset.header_encode(name) - return "%s <%s>" % (encoded_name, address) - else: - quotes = '' - if specialsre.search(name): - quotes = '"' - name = escapesre.sub(r'\\\g<0>', name) - return '%s%s%s <%s>' % (quotes, name, quotes, address) - return address - - -def _iter_escaped_chars(addr): - pos = 0 - escape = False - for pos, ch in enumerate(addr): - if escape: - yield (pos, '\\' + ch) - escape = False - elif ch == '\\': - escape = True - else: - yield (pos, ch) - if escape: - yield (pos, '\\') - - -def _strip_quoted_realnames(addr): - """Strip real names between quotes.""" - if '"' not in addr: - # Fast path - return addr - - start = 0 - open_pos = None - result = [] - for pos, ch in _iter_escaped_chars(addr): - if ch == '"': - if open_pos is None: - open_pos = pos - else: - if start != open_pos: - result.append(addr[start:open_pos]) - start = pos + 1 - open_pos = None - - if start < len(addr): - result.append(addr[start:]) - - return ''.join(result) - - -supports_strict_parsing = True - -def getaddresses(fieldvalues, *, strict=True): - """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue. - - When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in - its place. - - If strict is true, use a strict parser which rejects malformed inputs. - """ - - # If strict is true, if the resulting list of parsed addresses is greater - # than the number of fieldvalues in the input list, a parsing error has - # occurred and consequently a list containing a single empty 2-tuple [('', - # '')] is returned in its place. This is done to avoid invalid output. - # - # Malformed input: getaddresses(['alice@example.com <bob@example.com>']) - # Invalid output: [('', 'alice@example.com'), ('', 'bob@example.com')] - # Safe output: [('', '')] - - if not strict: - all = COMMASPACE.join(str(v) for v in fieldvalues) - a = _AddressList(all) - return a.addresslist - - fieldvalues = [str(v) for v in fieldvalues] - fieldvalues = _pre_parse_validation(fieldvalues) - addr = COMMASPACE.join(fieldvalues) - a = _AddressList(addr) - result = _post_parse_validation(a.addresslist) - - # Treat output as invalid if the number of addresses is not equal to the - # expected number of addresses. - n = 0 - for v in fieldvalues: - # When a comma is used in the Real Name part it is not a deliminator. - # So strip those out before counting the commas. - v = _strip_quoted_realnames(v) - # Expected number of addresses: 1 + number of commas - n += 1 + v.count(',') - if len(result) != n: - return [('', '')] - - return result - - -def _check_parenthesis(addr): - # Ignore parenthesis in quoted real names. - addr = _strip_quoted_realnames(addr) - - opens = 0 - for pos, ch in _iter_escaped_chars(addr): - if ch == '(': - opens += 1 - elif ch == ')': - opens -= 1 - if opens < 0: - return False - return (opens == 0) - - -def _pre_parse_validation(email_header_fields): - accepted_values = [] - for v in email_header_fields: - if not _check_parenthesis(v): - v = "('', '')" - accepted_values.append(v) - - return accepted_values - - -def _post_parse_validation(parsed_email_header_tuples): - accepted_values = [] - # The parser would have parsed a correctly formatted domain-literal - # The existence of an [ after parsing indicates a parsing failure - for v in parsed_email_header_tuples: - if '[' in v[1]: - v = ('', '') - accepted_values.append(v) - - return accepted_values - - -def _format_timetuple_and_zone(timetuple, zone): - return '%s, %02d %s %04d %02d:%02d:%02d %s' % ( - ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'][timetuple[6]], - timetuple[2], - ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][timetuple[1] - 1], - timetuple[0], timetuple[3], timetuple[4], timetuple[5], - zone) - -def formatdate(timeval=None, localtime=False, usegmt=False): - """Returns a date string as specified by RFC 2822, e.g.: - - Fri, 09 Nov 2001 01:08:47 -0000 - - Optional timeval if given is a floating-point time value as accepted by - gmtime() and localtime(), otherwise the current time is used. - - Optional localtime is a flag that when True, interprets timeval, and - returns a date relative to the local timezone instead of UTC, properly - taking daylight savings time into account. - - Optional argument usegmt means that the timezone is written out as - an ascii string, not numeric one (so "GMT" instead of "+0000"). This - is needed for HTTP, and is only used when localtime==False. - """ - # Note: we cannot use strftime() because that honors the locale and RFC - # 2822 requires that day and month names be the English abbreviations. - if timeval is None: - timeval = time.time() - dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc) - - if localtime: - dt = dt.astimezone() - usegmt = False - elif not usegmt: - dt = dt.replace(tzinfo=None) - return format_datetime(dt, usegmt) - -def format_datetime(dt, usegmt=False): - """Turn a datetime into a date string as specified in RFC 2822. - - If usegmt is True, dt must be an aware datetime with an offset of zero. In - this case 'GMT' will be rendered instead of the normal +0000 required by - RFC2822. This is to support HTTP headers involving date stamps. - """ - now = dt.timetuple() - if usegmt: - if dt.tzinfo is None or dt.tzinfo != datetime.timezone.utc: - raise ValueError("usegmt option requires a UTC datetime") - zone = 'GMT' - elif dt.tzinfo is None: - zone = '-0000' - else: - zone = dt.strftime("%z") - return _format_timetuple_and_zone(now, zone) - - -def make_msgid(idstring=None, domain=None): - """Returns a string suitable for RFC 2822 compliant Message-ID, e.g: - - <142480216486.20800.16526388040877946887@nightshade.la.mastaler.com> - - Optional idstring if given is a string used to strengthen the - uniqueness of the message id. Optional domain if given provides the - portion of the message id after the '@'. It defaults to the locally - defined hostname. - """ - # Lazy imports to speedup module import time - # (no other functions in email.utils need these modules) - import random - import socket - - timeval = int(time.time()*100) - pid = os.getpid() - randint = random.getrandbits(64) - if idstring is None: - idstring = '' - else: - idstring = '.' + idstring - if domain is None: - domain = socket.getfqdn() - msgid = '<%d.%d.%d%s@%s>' % (timeval, pid, randint, idstring, domain) - return msgid - - -def parsedate_to_datetime(data): - parsed_date_tz = _parsedate_tz(data) - if parsed_date_tz is None: - raise ValueError('Invalid date value or format "%s"' % str(data)) - *dtuple, tz = parsed_date_tz - if tz is None: - return datetime.datetime(*dtuple[:6]) - return datetime.datetime(*dtuple[:6], - tzinfo=datetime.timezone(datetime.timedelta(seconds=tz))) - - -def parseaddr(addr, *, strict=True): - """ - Parse addr into its constituent realname and email address parts. - - Return a tuple of realname and email address, unless the parse fails, in - which case return a 2-tuple of ('', ''). - - If strict is True, use a strict parser which rejects malformed inputs. - """ - if not strict: - addrs = _AddressList(addr).addresslist - if not addrs: - return ('', '') - return addrs[0] - - if isinstance(addr, list): - addr = addr[0] - - if not isinstance(addr, str): - return ('', '') - - addr = _pre_parse_validation([addr])[0] - addrs = _post_parse_validation(_AddressList(addr).addresslist) - - if not addrs or len(addrs) > 1: - return ('', '') - - return addrs[0] - - -# rfc822.unquote() doesn't properly de-backslash-ify in Python pre-2.3. -def unquote(str): - """Remove quotes from a string.""" - if len(str) > 1: - if str.startswith('"') and str.endswith('"'): - return str[1:-1].replace('\\\\', '\\').replace('\\"', '"') - if str.startswith('<') and str.endswith('>'): - return str[1:-1] - return str - - - -# RFC2231-related functions - parameter encoding and decoding -def decode_rfc2231(s): - """Decode string according to RFC 2231""" - parts = s.split(TICK, 2) - if len(parts) <= 2: - return None, None, s - return parts - - -def encode_rfc2231(s, charset=None, language=None): - """Encode string according to RFC 2231. - - If neither charset nor language is given, then s is returned as-is. If - charset is given but not language, the string is encoded using the empty - string for language. - """ - s = urllib.parse.quote(s, safe='', encoding=charset or 'ascii') - if charset is None and language is None: - return s - if language is None: - language = '' - return "%s'%s'%s" % (charset, language, s) - - -rfc2231_continuation = re.compile(r'^(?P<name>\w+)\*((?P<num>[0-9]+)\*?)?$', - re.ASCII) - -def decode_params(params): - """Decode parameters list according to RFC 2231. - - params is a sequence of 2-tuples containing (param name, string value). - """ - new_params = [params[0]] - # Map parameter's name to a list of continuations. The values are a - # 3-tuple of the continuation number, the string value, and a flag - # specifying whether a particular segment is %-encoded. - rfc2231_params = {} - for name, value in params[1:]: - encoded = name.endswith('*') - value = unquote(value) - mo = rfc2231_continuation.match(name) - if mo: - name, num = mo.group('name', 'num') - if num is not None: - num = int(num) - rfc2231_params.setdefault(name, []).append((num, value, encoded)) - else: - new_params.append((name, '"%s"' % quote(value))) - if rfc2231_params: - for name, continuations in rfc2231_params.items(): - value = [] - extended = False - # Sort by number, treating None as 0 if there is no 0, - # and ignore it if there is already a 0. - has_zero = any(x[0] == 0 for x in continuations) - if has_zero: - continuations = [x for x in continuations if x[0] is not None] - else: - continuations = [(x[0] or 0, x[1], x[2]) for x in continuations] - continuations.sort(key=lambda x: x[0]) - # And now append all values in numerical order, converting - # %-encodings for the encoded segments. If any of the - # continuation names ends in a *, then the entire string, after - # decoding segments and concatenating, must have the charset and - # language specifiers at the beginning of the string. - for num, s, encoded in continuations: - if encoded: - # Decode as "latin-1", so the characters in s directly - # represent the percent-encoded octet values. - # collapse_rfc2231_value treats this as an octet sequence. - s = urllib.parse.unquote(s, encoding="latin-1") - extended = True - value.append(s) - value = quote(EMPTYSTRING.join(value)) - if extended: - charset, language, value = decode_rfc2231(value) - new_params.append((name, (charset, language, '"%s"' % value))) - else: - new_params.append((name, '"%s"' % value)) - return new_params - -def collapse_rfc2231_value(value, errors='replace', - fallback_charset='us-ascii'): - if not isinstance(value, tuple) or len(value) != 3: - return unquote(value) - # While value comes to us as a unicode string, we need it to be a bytes - # object. We do not want bytes() normal utf-8 decoder, we want a straight - # interpretation of the string as character bytes. - charset, language, text = value - if charset is None: - # Issue 17369: if charset/lang is None, decode_rfc2231 couldn't parse - # the value, so use the fallback_charset. - charset = fallback_charset - rawbytes = bytes(text, 'raw-unicode-escape') - try: - return str(rawbytes, charset, errors) - except LookupError: - # charset is not a known codec. - return unquote(text) - - -# -# datetime doesn't provide a localtime function yet, so provide one. Code -# adapted from the patch in issue 9527. This may not be perfect, but it is -# better than not having it. -# - -def localtime(dt=None): - """Return local time as an aware datetime object. - - If called without arguments, return current time. Otherwise *dt* - argument should be a datetime instance, and it is converted to the - local time zone according to the system time zone database. If *dt* is - naive (that is, dt.tzinfo is None), it is assumed to be in local time. - - """ - if dt is None: - dt = datetime.datetime.now() - return dt.astimezone() diff --git a/Python314_4_x86_Template/Lib/encodings/__init__.py b/Python314_4_x86_Template/Lib/encodings/__init__.py deleted file mode 100644 index 8548bbe04..000000000 --- a/Python314_4_x86_Template/Lib/encodings/__init__.py +++ /dev/null @@ -1,182 +0,0 @@ -""" Standard "encodings" Package - - Standard Python encoding modules are stored in this package - directory. - - Codec modules must have names corresponding to normalized encoding - names as defined in the normalize_encoding() function below, e.g. - 'utf-8' must be implemented by the module 'utf_8.py'. - - Each codec module must export the following interface: - - * getregentry() -> codecs.CodecInfo object - The getregentry() API must return a CodecInfo object with encoder, decoder, - incrementalencoder, incrementaldecoder, streamwriter and streamreader - attributes which adhere to the Python Codec Interface Standard. - - In addition, a module may optionally also define the following - APIs which are then used by the package's codec search function: - - * getaliases() -> sequence of encoding name strings to use as aliases - - Alias names returned by getaliases() must be normalized encoding - names as defined by normalize_encoding(). - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -"""#" - -import codecs -import sys -from . import aliases - -_cache = {} -_MAXCACHE = 500 -_unknown = '--unknown--' -_import_tail = ['*'] -_aliases = aliases.aliases - -class CodecRegistryError(LookupError, SystemError): - pass - -def normalize_encoding(encoding): - - """ Normalize an encoding name. - - Normalization works as follows: all non-alphanumeric - characters except the dot used for Python package names are - collapsed and replaced with a single underscore, e.g. ' -;#' - becomes '_'. Leading and trailing underscores are removed. - - Note that encoding names should be ASCII only. - - """ - if isinstance(encoding, bytes): - encoding = str(encoding, "ascii") - - chars = [] - punct = False - for c in encoding: - if c.isalnum() or c == '.': - if punct and chars: - chars.append('_') - if c.isascii(): - chars.append(c) - punct = False - else: - punct = True - return ''.join(chars) - -def search_function(encoding): - - # Cache lookup - entry = _cache.get(encoding, _unknown) - if entry is not _unknown: - return entry - - # Import the module: - # - # First try to find an alias for the normalized encoding - # name and lookup the module using the aliased name, then try to - # lookup the module using the standard import scheme, i.e. first - # try in the encodings package, then at top-level. - # - norm_encoding = normalize_encoding(encoding) - aliased_encoding = _aliases.get(norm_encoding) or \ - _aliases.get(norm_encoding.replace('.', '_')) - if aliased_encoding is not None: - modnames = [aliased_encoding, - norm_encoding] - else: - modnames = [norm_encoding] - for modname in modnames: - if not modname or '.' in modname: - continue - try: - # Import is absolute to prevent the possibly malicious import of a - # module with side-effects that is not in the 'encodings' package. - mod = __import__('encodings.' + modname, fromlist=_import_tail, - level=0) - except ImportError: - # ImportError may occur because 'encodings.(modname)' does not exist, - # or because it imports a name that does not exist (see mbcs and oem) - pass - else: - break - else: - mod = None - - try: - getregentry = mod.getregentry - except AttributeError: - # Not a codec module - mod = None - - if mod is None: - # Cache misses - if len(_cache) >= _MAXCACHE: - _cache.clear() - _cache[encoding] = None - return None - - # Now ask the module for the registry entry - entry = getregentry() - if not isinstance(entry, codecs.CodecInfo): - if not 4 <= len(entry) <= 7: - raise CodecRegistryError('module "%s" (%s) failed to register' - % (mod.__name__, mod.__file__)) - if not callable(entry[0]) or not callable(entry[1]) or \ - (entry[2] is not None and not callable(entry[2])) or \ - (entry[3] is not None and not callable(entry[3])) or \ - (len(entry) > 4 and entry[4] is not None and not callable(entry[4])) or \ - (len(entry) > 5 and entry[5] is not None and not callable(entry[5])): - raise CodecRegistryError('incompatible codecs in module "%s" (%s)' - % (mod.__name__, mod.__file__)) - if len(entry)<7 or entry[6] is None: - entry += (None,)*(6-len(entry)) + (mod.__name__.split(".", 1)[1],) - entry = codecs.CodecInfo(*entry) - - # Cache the codec registry entry - if len(_cache) >= _MAXCACHE: - _cache.clear() - _cache[encoding] = entry - - # Register its aliases (without overwriting previously registered - # aliases) - try: - codecaliases = mod.getaliases() - except AttributeError: - pass - else: - for alias in codecaliases: - if alias not in _aliases: - _aliases[alias] = modname - - # Return the registry entry - return entry - -# Register the search_function in the Python codec registry -codecs.register(search_function) - -if sys.platform == 'win32': - from ._win_cp_codecs import create_win32_code_page_codec - - def win32_code_page_search_function(encoding): - encoding = encoding.lower() - if not encoding.startswith('cp'): - return None - try: - cp = int(encoding[2:]) - except ValueError: - return None - # Test if the code page is supported - try: - codecs.code_page_encode(cp, 'x') - except (OverflowError, OSError): - return None - - return create_win32_code_page_codec(cp) - - codecs.register(win32_code_page_search_function) diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 42d8bf01686188b860788392b84aee46ff7fb4fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6810 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 WZ=ZVe)ZNhj&z%PzcOhpR;qosj`uAx7 diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/_win_cp_codecs.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/_win_cp_codecs.cpython-314.pyc deleted file mode 100644 index 8e19bdb8b72f430ef2f67ce17cc60257c7e5bab4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3387 zcmbtX&2Jk;6rcU{rg7qYG)-w5+B7K0{fL?m@&T#arW9HURgqI1A(@Ug>vdV!tj+A2 zQ1y}<J@&wnLr(~w=#f7oC8}DM0|!prf*cXx#CtQl_Bu_gq>Qr9vv1y;ee>S$_jYrx zyXy#n@j!d({HYT1JKn@YjwX$xFxen?NM5>00+N>pNg(B=QIb{uK$BaR6j|aA?x(=j zD1p`_X38{T-y2fJxFJ_kr%1lLU=+xdjC;9;D^(@Xq_{?jH1Yr$A(54ey1Z7z{rOnZ z<5}x>8lMWIs&G%So6bE`2~R^<C1ul7O+3@!o*fBKo~fiCAx%#$@ysLKvoqnDZui2w zrl+2;>weL0gyhr9Buysef>e+TN<l5?1ufq-n-aEAg$%<=W#zEPs+4S6HSgNg_Hdrm zlx);kaZ%A*gR38|#xW2J@&;L!N650WBE`XtlDc%OPO@sKIbO9Egu2aGh4~DiLPFW9 z`ZyUI+t>)#uf1FR*teNqG)p#{n4iB`T(7V%id9zm+_nP0Xt|YIY1Q=Y3y$XmApF2| zU7KB)C@$R#KC5_B6Vr5>emyrsZ`*5C*9>eLtW}F2Ijco}8ppfq7wNj=QL9S%S^V+p zJqSr0^}NMw^Z|pZNxm*J!7axZ+=^woer{Y?BYgZG5PxrwUoxj2$&apYWhOU`$p+|1 zTawU}C+Rp$l1a*wX*@j)sDX5wA+WM4>wq7IP+^!})(N7SC5Au<by14&fDsF8+}7^{ z(Te!-^j2nW)0kr!P+M>{N5llum<H8?Yyx{fMb45yzLO4=W28dzD&h$kC?Q&1DNyrr zpcP1<=M^}Q7S0_kpEo_QTeCeV=5<~OX2nm(a3Y8qjX53(KuiIMsVhB8xVmS=u)9Of zpJ**%b_K#Eo>z!X^=-GzGaYJW$1`0HNRexN;uu1bC!2M_ZFu>0&l14}H}T&9fywV5 zeYE(4_T&Bf{jL7@e!BX!Kew6A@fvUl+{#KH)Kj5Bsb{X)l!iwrU8|I8F3!`Gepxf! zXeC2w*<pU*I-c!SC>6mDPzuxt9E+Mkz?{`uVEf?OOR43WzF%^zz_MMJ(z+6MC6wTg zcobQ{8eEBT5ca)TB!)d5(dZ+1{`m$FvMWm+m;WLl#9_|BLK~{$*3q~KD|=AYBT$vZ z)E-2suYsuddCy{2#4~s-ArT*qMw5>!AWB>5D<~~KGVG4L9Ce*xcT3Q65N})D#Qgv- zF<`=Ox>_rjZAK%Oet2l?L{X2oZ`2FVX~YB;7<ydW>c6y^zLW${iXrsb5Q>v1hEcqY z;!PB%K-3jBg7elPURv%b7WNj{W4~*(l{>cs<&Lm>4p!UBjeFwQuZbKzU=x`<Sn`$w z=-q28%n9t5w2$T+O0<u@xK)gjR;jbv-cq;tuwPf0KYVaeKNx_tG+!U0mRtQZo9UTE zCF@eC`@ml-VAwg>Y4mBUQ#yHUHV*4Z%63A|A|YqRwo|a$R-soB^7sJ=d8q2-ZG5r+ zA1bmjJl-C@G2}&fs8WbX#sxolZnLmQBK6t*NrX>ok%*neX!a|J*q^-v>)2!1c@)SS zhA%PRU$d!D#U{=>wm3qc(|Qw%j|>(jbs}6ArU4WHcDNv&@!dLyKAV93vqq?kuN%?M zImxjXhbI<!W3o$$b{_K^vBAR&JFekp-c7Gu$#(EqTQM@+h9S{e(_S<YB#Mup80FJ^ zT)84XRZhN&BJ3(SU;_Q`LHxTxepBanRY{xLCLnfoNt?&n{H`u*m$wOs?+VX`XPykt z?BLC=A!|8Q=TMz{G7Q}aZcsgo>e+9<dNz3W$>3R3&$g_S>fDY&(tXc5hkouHdY<Wh zc;?~J2cJC84B+3;1^gQrfxn%Mk=D0~q3OJiS()V^Vje$#Nr>w5k27OIysUF<5lrwO V8z0~P+lnMfzml#Ubwm=I{0D?_`0D@w diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/aliases.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/aliases.cpython-314.pyc deleted file mode 100644 index 951dc2f77a152f9d683a0527dd5af5ad4a041f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12628 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 diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/cp1252.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/cp1252.cpython-314.pyc deleted file mode 100644 index 6f1cf2df3e483eb1cdf8356319fe2f445df0de20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3457 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 Mmt0GCI(dZt8z<Ep8UO$Q diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/cp437.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/cp437.cpython-314.pyc deleted file mode 100644 index 326ed0fb0451d28431057de0dad74c5db8836dd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11963 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 WUf9h{<qxA5()6d-o8$Fgjs6YX17B+Z diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/idna.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/idna.cpython-314.pyc deleted file mode 100644 index 21cf1a2a4c1e94803e92651071dc72770522fe7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15064 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 diff --git a/Python314_4_x86_Template/Lib/encodings/__pycache__/utf_8.cpython-314.pyc b/Python314_4_x86_Template/Lib/encodings/__pycache__/utf_8.cpython-314.pyc deleted file mode 100644 index 1fa3fd9bfada9d2e1e0fb6857dc30807f0856a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2402 zcmb7F&2Jk;6rb_O`a8}?oscFfn;^L{X`-eHA&C%b2vmwxOtb_dq)kSf^*CKvuie=( zB|YU(0Y{EKa-=8tQ<_$ls}(0WaSPZI9C>fn`EZGvFj_y)d-I!__dU~nxio?Cef)(p z5+meyWR6F?J8Az0lLKN9Np^@q*Quo2bOX?@4jDDFMr4GzRK^Nqf*8>eV#ENe?&w7? zL_=Q26*3M;4UpMh6mloXghD0&nFM72YmiBWOaU?t$idejQ$}Wl$h1M<BBk8JgN=Q8 zukPvBo3c8ybX{MoSGb){r?-S7CHM5*ef?ug*fXnMMR5HtukAL)o<3Ex+}m!*%-Z!@ zX*QjnvP-bLu`isxds1I38|ydpRoB%G<bB=XJ{Mo}%B)`gMBiF9jMehy7qG2tN6sjV z0YEpkZvr_W=E>5=SyWd#LAI!I;w&(SZk8f}W}^vykOhm_5`#JLAdfp<qbUQ83sD!o zkLMMOfw#6|eg>NPrd8o$Zh85p`JgVoG8>})CAXz-+HSpB*|mH=<9Ln);!DeQxtN(V zL)XpEEwBal&C(*<<h6!tNzP=gVcvCiP42<nj<@HVN|)KjexQZ=h$LK}ho4^nazK8~ z474)Wo@K5*ZvIqxo|%6dn{UGcv5_2)V;8jF28ji`wuuA>$jHv1j1H4JWS&98Tr?sw z{yCAF5e2uzgTZyr7QDti(ETG+iVM4&jp}gBY~Yja4VYZQ?fvJ~!a`TS9dhHUI#m%2 z%O5x^MFn1Y92eyqE;O|g#C+~n1x7!JR~^rCeZ&@vMUg<67NUdE|JpGdE)4<99|r=y z%okeu$!Gb=AK&?T`pNY3{NgY7U*wmcCYMDD08dD{MDLUmL6R}gs&U4GG-I`TrRm~4 z%h>&<<#t!{j8z@sOV{zZS7%HNpgIM{APb~pGfPV0>^3F$Ve0^6wrlx*#j&N$U6-*E z4RU9Mu#Lk0+sY`BfvF-`tv)8hKi`4+e@AG1<u3w6sjCn+ES?NJ0!Mom$eAP<meK9l zd5s6sfXajsflx$yQsF~Y8$zJ-%B7^Z0{;RNQVb&*L4t7*F(5%7+ig~>Ty#rHyn!pY zHPjOWB`^Yt-~oOP$hYKWVXRe{IxI{*Du+k}UCN@-OIeitR0?j@uwy}OUua7os)%7c z*MK*10m&%*+Fb*3L#>>CnA0EK2@SyYOBpc!e+)1<wxEj*z+kBUajpTAxQaxDLPrj> zUWs~i#uo~M+jfCmT=NDo@nSVhtlDsfeJq@vym;oxi)Ny))iCJ0m>)182_p~V>a~Fy zjA5OH(ZG{}LFcqlbvs0ltlK?<tgm7YaR-+ja}QJoKpvx6L23=(fpxE1KRrLJIprDU zCl&496b>?b9M0Z@UMcnkcG?N}`8ese>9J>-v6s0k&}Q%(o58Oz0beJd%xXs@8P}A{ zq4+gW6PiIO6C@a`)NN=WsGB&=L9|+F6<qy5RTr<E>2b#esx(&0Dz#CWS1K<^z8AKz z_XV~E>=C{P<S0rh{WFrFv35V9eMd=>?r){W4^!g@S|>*7LPv|xmB+)a(OZY3w>kuv lPLk3RN>&a>S2_fkjz;Ok4~wm#;^9ycB@^dJ(kU9+{Vz*@+V=ne diff --git a/Python314_4_x86_Template/Lib/encodings/_win_cp_codecs.py b/Python314_4_x86_Template/Lib/encodings/_win_cp_codecs.py deleted file mode 100644 index 4f8eb8867..000000000 --- a/Python314_4_x86_Template/Lib/encodings/_win_cp_codecs.py +++ /dev/null @@ -1,36 +0,0 @@ -import codecs - -def create_win32_code_page_codec(cp): - from codecs import code_page_encode, code_page_decode - - def encode(input, errors='strict'): - return code_page_encode(cp, input, errors) - - def decode(input, errors='strict'): - return code_page_decode(cp, input, errors, True) - - class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return code_page_encode(cp, input, self.errors)[0] - - class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, input, errors, final): - return code_page_decode(cp, input, errors, final) - - class StreamWriter(codecs.StreamWriter): - def encode(self, input, errors='strict'): - return code_page_encode(cp, input, errors) - - class StreamReader(codecs.StreamReader): - def decode(self, input, errors, final): - return code_page_decode(cp, input, errors, final) - - return codecs.CodecInfo( - name=f'cp{cp}', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/aliases.py b/Python314_4_x86_Template/Lib/encodings/aliases.py deleted file mode 100644 index 4ecb6b6e2..000000000 --- a/Python314_4_x86_Template/Lib/encodings/aliases.py +++ /dev/null @@ -1,560 +0,0 @@ -""" Encoding Aliases Support - - This module is used by the encodings package search function to - map encodings names to module names. - - Note that the search function normalizes the encoding names before - doing the lookup, so the mapping will have to map normalized - encoding names to module names. - - Contents: - - The following aliases dictionary contains mappings of all IANA - character set names for which the Python core library provides - codecs. In addition to these, a few Python specific codec - aliases have also been added. - -""" -aliases = { - - # Please keep this list sorted alphabetically by value ! - - # ascii codec - '646' : 'ascii', - 'ansi_x3.4_1968' : 'ascii', - 'ansi_x3_4_1968' : 'ascii', # some email headers use this non-standard name - 'ansi_x3.4_1986' : 'ascii', - 'cp367' : 'ascii', - 'csascii' : 'ascii', - 'ibm367' : 'ascii', - 'iso646_us' : 'ascii', - 'iso_646.irv_1991' : 'ascii', - 'iso_ir_6' : 'ascii', - 'us' : 'ascii', - 'us_ascii' : 'ascii', - - # base64_codec codec - 'base64' : 'base64_codec', - 'base_64' : 'base64_codec', - - # big5 codec - 'big5_tw' : 'big5', - 'csbig5' : 'big5', - - # big5hkscs codec - 'big5_hkscs' : 'big5hkscs', - 'hkscs' : 'big5hkscs', - - # bz2_codec codec - 'bz2' : 'bz2_codec', - - # cp037 codec - '037' : 'cp037', - 'csibm037' : 'cp037', - 'ebcdic_cp_ca' : 'cp037', - 'ebcdic_cp_nl' : 'cp037', - 'ebcdic_cp_us' : 'cp037', - 'ebcdic_cp_wt' : 'cp037', - 'ibm037' : 'cp037', - 'ibm039' : 'cp037', - - # cp1026 codec - '1026' : 'cp1026', - 'csibm1026' : 'cp1026', - 'ibm1026' : 'cp1026', - - # cp1125 codec - '1125' : 'cp1125', - 'ibm1125' : 'cp1125', - 'cp866u' : 'cp1125', - 'ruscii' : 'cp1125', - - # cp1140 codec - '1140' : 'cp1140', - 'ibm1140' : 'cp1140', - - # cp1250 codec - '1250' : 'cp1250', - 'windows_1250' : 'cp1250', - - # cp1251 codec - '1251' : 'cp1251', - 'windows_1251' : 'cp1251', - - # cp1252 codec - '1252' : 'cp1252', - 'windows_1252' : 'cp1252', - - # cp1253 codec - '1253' : 'cp1253', - 'windows_1253' : 'cp1253', - - # cp1254 codec - '1254' : 'cp1254', - 'windows_1254' : 'cp1254', - - # cp1255 codec - '1255' : 'cp1255', - 'windows_1255' : 'cp1255', - - # cp1256 codec - '1256' : 'cp1256', - 'windows_1256' : 'cp1256', - - # cp1257 codec - '1257' : 'cp1257', - 'windows_1257' : 'cp1257', - - # cp1258 codec - '1258' : 'cp1258', - 'windows_1258' : 'cp1258', - - # cp273 codec - '273' : 'cp273', - 'ibm273' : 'cp273', - 'csibm273' : 'cp273', - - # cp424 codec - '424' : 'cp424', - 'csibm424' : 'cp424', - 'ebcdic_cp_he' : 'cp424', - 'ibm424' : 'cp424', - - # cp437 codec - '437' : 'cp437', - 'cspc8codepage437' : 'cp437', - 'ibm437' : 'cp437', - - # cp500 codec - '500' : 'cp500', - 'csibm500' : 'cp500', - 'ebcdic_cp_be' : 'cp500', - 'ebcdic_cp_ch' : 'cp500', - 'ibm500' : 'cp500', - - # cp775 codec - '775' : 'cp775', - 'cspc775baltic' : 'cp775', - 'ibm775' : 'cp775', - - # cp850 codec - '850' : 'cp850', - 'cspc850multilingual' : 'cp850', - 'ibm850' : 'cp850', - - # cp852 codec - '852' : 'cp852', - 'cspcp852' : 'cp852', - 'ibm852' : 'cp852', - - # cp855 codec - '855' : 'cp855', - 'csibm855' : 'cp855', - 'ibm855' : 'cp855', - - # cp857 codec - '857' : 'cp857', - 'csibm857' : 'cp857', - 'ibm857' : 'cp857', - - # cp858 codec - '858' : 'cp858', - 'csibm858' : 'cp858', - 'ibm858' : 'cp858', - - # cp860 codec - '860' : 'cp860', - 'csibm860' : 'cp860', - 'ibm860' : 'cp860', - - # cp861 codec - '861' : 'cp861', - 'cp_is' : 'cp861', - 'csibm861' : 'cp861', - 'ibm861' : 'cp861', - - # cp862 codec - '862' : 'cp862', - 'cspc862latinhebrew' : 'cp862', - 'ibm862' : 'cp862', - - # cp863 codec - '863' : 'cp863', - 'csibm863' : 'cp863', - 'ibm863' : 'cp863', - - # cp864 codec - '864' : 'cp864', - 'csibm864' : 'cp864', - 'ibm864' : 'cp864', - - # cp865 codec - '865' : 'cp865', - 'csibm865' : 'cp865', - 'ibm865' : 'cp865', - - # cp866 codec - '866' : 'cp866', - 'csibm866' : 'cp866', - 'ibm866' : 'cp866', - - # cp869 codec - '869' : 'cp869', - 'cp_gr' : 'cp869', - 'csibm869' : 'cp869', - 'ibm869' : 'cp869', - - # cp874 codec - '874' : 'cp874', - 'ms874' : 'cp874', - 'windows_874' : 'cp874', - - # cp932 codec - '932' : 'cp932', - 'ms932' : 'cp932', - 'mskanji' : 'cp932', - 'ms_kanji' : 'cp932', - 'windows_31j' : 'cp932', - - # cp949 codec - '949' : 'cp949', - 'ms949' : 'cp949', - 'uhc' : 'cp949', - - # cp950 codec - '950' : 'cp950', - 'ms950' : 'cp950', - - # euc_jis_2004 codec - 'jisx0213' : 'euc_jis_2004', - 'eucjis2004' : 'euc_jis_2004', - 'euc_jis2004' : 'euc_jis_2004', - - # euc_jisx0213 codec - 'eucjisx0213' : 'euc_jisx0213', - - # euc_jp codec - 'eucjp' : 'euc_jp', - 'ujis' : 'euc_jp', - 'u_jis' : 'euc_jp', - - # euc_kr codec - 'euckr' : 'euc_kr', - 'korean' : 'euc_kr', - 'ksc5601' : 'euc_kr', - 'ks_c_5601' : 'euc_kr', - 'ks_c_5601_1987' : 'euc_kr', - 'ksx1001' : 'euc_kr', - 'ks_x_1001' : 'euc_kr', - 'cseuckr' : 'euc_kr', - - # gb18030 codec - 'gb18030_2000' : 'gb18030', - - # gb2312 codec - 'chinese' : 'gb2312', - 'csiso58gb231280' : 'gb2312', - 'euc_cn' : 'gb2312', - 'euccn' : 'gb2312', - 'eucgb2312_cn' : 'gb2312', - 'gb2312_1980' : 'gb2312', - 'gb2312_80' : 'gb2312', - 'iso_ir_58' : 'gb2312', - - # gbk codec - '936' : 'gbk', - 'cp936' : 'gbk', - 'ms936' : 'gbk', - - # hex_codec codec - 'hex' : 'hex_codec', - - # hp_roman8 codec - 'roman8' : 'hp_roman8', - 'r8' : 'hp_roman8', - 'csHPRoman8' : 'hp_roman8', - 'cp1051' : 'hp_roman8', - 'ibm1051' : 'hp_roman8', - - # hz codec - 'hzgb' : 'hz', - 'hz_gb' : 'hz', - 'hz_gb_2312' : 'hz', - - # iso2022_jp codec - 'csiso2022jp' : 'iso2022_jp', - 'iso2022jp' : 'iso2022_jp', - 'iso_2022_jp' : 'iso2022_jp', - - # iso2022_jp_1 codec - 'iso2022jp_1' : 'iso2022_jp_1', - 'iso_2022_jp_1' : 'iso2022_jp_1', - - # iso2022_jp_2 codec - 'iso2022jp_2' : 'iso2022_jp_2', - 'iso_2022_jp_2' : 'iso2022_jp_2', - - # iso2022_jp_2004 codec - 'iso_2022_jp_2004' : 'iso2022_jp_2004', - 'iso2022jp_2004' : 'iso2022_jp_2004', - - # iso2022_jp_3 codec - 'iso2022jp_3' : 'iso2022_jp_3', - 'iso_2022_jp_3' : 'iso2022_jp_3', - - # iso2022_jp_ext codec - 'iso2022jp_ext' : 'iso2022_jp_ext', - 'iso_2022_jp_ext' : 'iso2022_jp_ext', - - # iso2022_kr codec - 'csiso2022kr' : 'iso2022_kr', - 'iso2022kr' : 'iso2022_kr', - 'iso_2022_kr' : 'iso2022_kr', - - # iso8859_10 codec - 'csisolatin6' : 'iso8859_10', - 'iso_8859_10' : 'iso8859_10', - 'iso_8859_10_1992' : 'iso8859_10', - 'iso_ir_157' : 'iso8859_10', - 'l6' : 'iso8859_10', - 'latin6' : 'iso8859_10', - - # iso8859_11 codec - 'thai' : 'iso8859_11', - 'iso_8859_11' : 'iso8859_11', - 'iso_8859_11_2001' : 'iso8859_11', - - # iso8859_13 codec - 'iso_8859_13' : 'iso8859_13', - 'l7' : 'iso8859_13', - 'latin7' : 'iso8859_13', - - # iso8859_14 codec - 'iso_8859_14' : 'iso8859_14', - 'iso_8859_14_1998' : 'iso8859_14', - 'iso_celtic' : 'iso8859_14', - 'iso_ir_199' : 'iso8859_14', - 'l8' : 'iso8859_14', - 'latin8' : 'iso8859_14', - - # iso8859_15 codec - 'iso_8859_15' : 'iso8859_15', - 'l9' : 'iso8859_15', - 'latin9' : 'iso8859_15', - - # iso8859_16 codec - 'iso_8859_16' : 'iso8859_16', - 'iso_8859_16_2001' : 'iso8859_16', - 'iso_ir_226' : 'iso8859_16', - 'l10' : 'iso8859_16', - 'latin10' : 'iso8859_16', - - # iso8859_2 codec - 'csisolatin2' : 'iso8859_2', - 'iso_8859_2' : 'iso8859_2', - 'iso_8859_2_1987' : 'iso8859_2', - 'iso_ir_101' : 'iso8859_2', - 'l2' : 'iso8859_2', - 'latin2' : 'iso8859_2', - - # iso8859_3 codec - 'csisolatin3' : 'iso8859_3', - 'iso_8859_3' : 'iso8859_3', - 'iso_8859_3_1988' : 'iso8859_3', - 'iso_ir_109' : 'iso8859_3', - 'l3' : 'iso8859_3', - 'latin3' : 'iso8859_3', - - # iso8859_4 codec - 'csisolatin4' : 'iso8859_4', - 'iso_8859_4' : 'iso8859_4', - 'iso_8859_4_1988' : 'iso8859_4', - 'iso_ir_110' : 'iso8859_4', - 'l4' : 'iso8859_4', - 'latin4' : 'iso8859_4', - - # iso8859_5 codec - 'csisolatincyrillic' : 'iso8859_5', - 'cyrillic' : 'iso8859_5', - 'iso_8859_5' : 'iso8859_5', - 'iso_8859_5_1988' : 'iso8859_5', - 'iso_ir_144' : 'iso8859_5', - - # iso8859_6 codec - 'arabic' : 'iso8859_6', - 'asmo_708' : 'iso8859_6', - 'csisolatinarabic' : 'iso8859_6', - 'ecma_114' : 'iso8859_6', - 'iso_8859_6' : 'iso8859_6', - 'iso_8859_6_1987' : 'iso8859_6', - 'iso_ir_127' : 'iso8859_6', - - # iso8859_7 codec - 'csisolatingreek' : 'iso8859_7', - 'ecma_118' : 'iso8859_7', - 'elot_928' : 'iso8859_7', - 'greek' : 'iso8859_7', - 'greek8' : 'iso8859_7', - 'iso_8859_7' : 'iso8859_7', - 'iso_8859_7_1987' : 'iso8859_7', - 'iso_ir_126' : 'iso8859_7', - - # iso8859_8 codec - 'csisolatinhebrew' : 'iso8859_8', - 'hebrew' : 'iso8859_8', - 'iso_8859_8' : 'iso8859_8', - 'iso_8859_8_1988' : 'iso8859_8', - 'iso_ir_138' : 'iso8859_8', - 'iso_8859_8_i' : 'iso8859_8', - 'iso_8859_8_e' : 'iso8859_8', - - # iso8859_9 codec - 'csisolatin5' : 'iso8859_9', - 'iso_8859_9' : 'iso8859_9', - 'iso_8859_9_1989' : 'iso8859_9', - 'iso_ir_148' : 'iso8859_9', - 'l5' : 'iso8859_9', - 'latin5' : 'iso8859_9', - - # johab codec - 'cp1361' : 'johab', - 'ms1361' : 'johab', - - # koi8_r codec - 'cskoi8r' : 'koi8_r', - - # kz1048 codec - 'kz_1048' : 'kz1048', - 'rk1048' : 'kz1048', - 'strk1048_2002' : 'kz1048', - - # latin_1 codec - # - # Note that the latin_1 codec is implemented internally in C and a - # lot faster than the charmap codec iso8859_1 which uses the same - # encoding. This is why we discourage the use of the iso8859_1 - # codec and alias it to latin_1 instead. - # - '8859' : 'latin_1', - 'cp819' : 'latin_1', - 'csisolatin1' : 'latin_1', - 'ibm819' : 'latin_1', - 'iso8859' : 'latin_1', - 'iso8859_1' : 'latin_1', - 'iso_8859_1' : 'latin_1', - 'iso_8859_1_1987' : 'latin_1', - 'iso_ir_100' : 'latin_1', - 'l1' : 'latin_1', - 'latin' : 'latin_1', - 'latin1' : 'latin_1', - - # mac_cyrillic codec - 'maccyrillic' : 'mac_cyrillic', - - # mac_greek codec - 'macgreek' : 'mac_greek', - - # mac_iceland codec - 'maciceland' : 'mac_iceland', - - # mac_latin2 codec - 'maccentraleurope' : 'mac_latin2', - 'mac_centeuro' : 'mac_latin2', - 'maclatin2' : 'mac_latin2', - - # mac_roman codec - 'macintosh' : 'mac_roman', - 'macroman' : 'mac_roman', - - # mac_turkish codec - 'macturkish' : 'mac_turkish', - - # mbcs codec - 'ansi' : 'mbcs', - 'dbcs' : 'mbcs', - - # ptcp154 codec - 'csptcp154' : 'ptcp154', - 'pt154' : 'ptcp154', - 'cp154' : 'ptcp154', - 'cyrillic_asian' : 'ptcp154', - - # quopri_codec codec - 'quopri' : 'quopri_codec', - 'quoted_printable' : 'quopri_codec', - 'quotedprintable' : 'quopri_codec', - - # rot_13 codec - 'rot13' : 'rot_13', - - # shift_jis codec - 'csshiftjis' : 'shift_jis', - 'shiftjis' : 'shift_jis', - 'sjis' : 'shift_jis', - 's_jis' : 'shift_jis', - - # shift_jis_2004 codec - 'shiftjis2004' : 'shift_jis_2004', - 'sjis_2004' : 'shift_jis_2004', - 's_jis_2004' : 'shift_jis_2004', - - # shift_jisx0213 codec - 'shiftjisx0213' : 'shift_jisx0213', - 'sjisx0213' : 'shift_jisx0213', - 's_jisx0213' : 'shift_jisx0213', - - # tis_620 codec - 'tis620' : 'tis_620', - 'tis_620_0' : 'tis_620', - 'tis_620_2529_0' : 'tis_620', - 'tis_620_2529_1' : 'tis_620', - 'iso_ir_166' : 'tis_620', - - # utf_16 codec - 'u16' : 'utf_16', - 'utf16' : 'utf_16', - - # utf_16_be codec - 'unicodebigunmarked' : 'utf_16_be', - 'utf_16be' : 'utf_16_be', - - # utf_16_le codec - 'unicodelittleunmarked' : 'utf_16_le', - 'utf_16le' : 'utf_16_le', - - # utf_32 codec - 'u32' : 'utf_32', - 'utf32' : 'utf_32', - - # utf_32_be codec - 'utf_32be' : 'utf_32_be', - - # utf_32_le codec - 'utf_32le' : 'utf_32_le', - - # utf_7 codec - 'u7' : 'utf_7', - 'utf7' : 'utf_7', - 'unicode_1_1_utf_7' : 'utf_7', - - # utf_8 codec - 'u8' : 'utf_8', - 'utf' : 'utf_8', - 'utf8' : 'utf_8', - 'utf8_ucs2' : 'utf_8', - 'utf8_ucs4' : 'utf_8', - 'cp65001' : 'utf_8', - - # uu_codec codec - 'uu' : 'uu_codec', - - # zlib_codec codec - 'zip' : 'zlib_codec', - 'zlib' : 'zlib_codec', - - # temporary mac CJK aliases, will be replaced by proper codecs in 3.1 - 'x_mac_japanese' : 'shift_jis', - 'x_mac_korean' : 'euc_kr', - 'x_mac_simp_chinese' : 'gb2312', - 'x_mac_trad_chinese' : 'big5', -} diff --git a/Python314_4_x86_Template/Lib/encodings/ascii.py b/Python314_4_x86_Template/Lib/encodings/ascii.py deleted file mode 100644 index 2033cde97..000000000 --- a/Python314_4_x86_Template/Lib/encodings/ascii.py +++ /dev/null @@ -1,50 +0,0 @@ -""" Python 'ascii' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - # Note: Binding these as C functions will result in the class not - # converting them to methods. This is intended. - encode = codecs.ascii_encode - decode = codecs.ascii_decode - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.ascii_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.ascii_decode(input, self.errors)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -class StreamConverter(StreamWriter,StreamReader): - - encode = codecs.ascii_decode - decode = codecs.ascii_encode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='ascii', - encode=Codec.encode, - decode=Codec.decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/base64_codec.py b/Python314_4_x86_Template/Lib/encodings/base64_codec.py deleted file mode 100644 index 8e7703b3b..000000000 --- a/Python314_4_x86_Template/Lib/encodings/base64_codec.py +++ /dev/null @@ -1,55 +0,0 @@ -"""Python 'base64_codec' Codec - base64 content transfer encoding. - -This codec de/encodes from bytes to bytes. - -Written by Marc-Andre Lemburg (mal@lemburg.com). -""" - -import codecs -import base64 - -### Codec APIs - -def base64_encode(input, errors='strict'): - assert errors == 'strict' - return (base64.encodebytes(input), len(input)) - -def base64_decode(input, errors='strict'): - assert errors == 'strict' - return (base64.decodebytes(input), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return base64_encode(input, errors) - def decode(self, input, errors='strict'): - return base64_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - assert self.errors == 'strict' - return base64.encodebytes(input) - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - assert self.errors == 'strict' - return base64.decodebytes(input) - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='base64', - encode=base64_encode, - decode=base64_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/big5.py b/Python314_4_x86_Template/Lib/encodings/big5.py deleted file mode 100644 index 7adeb0e16..000000000 --- a/Python314_4_x86_Template/Lib/encodings/big5.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# big5.py: Python Unicode Codec for BIG5 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_tw, codecs -import _multibytecodec as mbc - -codec = _codecs_tw.getcodec('big5') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='big5', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/big5hkscs.py b/Python314_4_x86_Template/Lib/encodings/big5hkscs.py deleted file mode 100644 index 350df37ba..000000000 --- a/Python314_4_x86_Template/Lib/encodings/big5hkscs.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# big5hkscs.py: Python Unicode Codec for BIG5HKSCS -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_hk, codecs -import _multibytecodec as mbc - -codec = _codecs_hk.getcodec('big5hkscs') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='big5hkscs', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/bz2_codec.py b/Python314_4_x86_Template/Lib/encodings/bz2_codec.py deleted file mode 100644 index fd9495e34..000000000 --- a/Python314_4_x86_Template/Lib/encodings/bz2_codec.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Python 'bz2_codec' Codec - bz2 compression encoding. - -This codec de/encodes from bytes to bytes and is therefore usable with -bytes.transform() and bytes.untransform(). - -Adapted by Raymond Hettinger from zlib_codec.py which was written -by Marc-Andre Lemburg (mal@lemburg.com). -""" - -import codecs -import bz2 # this codec needs the optional bz2 module ! - -### Codec APIs - -def bz2_encode(input, errors='strict'): - assert errors == 'strict' - return (bz2.compress(input), len(input)) - -def bz2_decode(input, errors='strict'): - assert errors == 'strict' - return (bz2.decompress(input), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return bz2_encode(input, errors) - def decode(self, input, errors='strict'): - return bz2_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict'): - assert errors == 'strict' - self.errors = errors - self.compressobj = bz2.BZ2Compressor() - - def encode(self, input, final=False): - if final: - c = self.compressobj.compress(input) - return c + self.compressobj.flush() - else: - return self.compressobj.compress(input) - - def reset(self): - self.compressobj = bz2.BZ2Compressor() - -class IncrementalDecoder(codecs.IncrementalDecoder): - def __init__(self, errors='strict'): - assert errors == 'strict' - self.errors = errors - self.decompressobj = bz2.BZ2Decompressor() - - def decode(self, input, final=False): - try: - return self.decompressobj.decompress(input) - except EOFError: - return '' - - def reset(self): - self.decompressobj = bz2.BZ2Decompressor() - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name="bz2", - encode=bz2_encode, - decode=bz2_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/charmap.py b/Python314_4_x86_Template/Lib/encodings/charmap.py deleted file mode 100644 index 81189b161..000000000 --- a/Python314_4_x86_Template/Lib/encodings/charmap.py +++ /dev/null @@ -1,69 +0,0 @@ -""" Generic Python Character Mapping Codec. - - Use this codec directly rather than through the automatic - conversion mechanisms supplied by unicode() and .encode(). - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - # Note: Binding these as C functions will result in the class not - # converting them to methods. This is intended. - encode = codecs.charmap_encode - decode = codecs.charmap_decode - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict', mapping=None): - codecs.IncrementalEncoder.__init__(self, errors) - self.mapping = mapping - - def encode(self, input, final=False): - return codecs.charmap_encode(input, self.errors, self.mapping)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def __init__(self, errors='strict', mapping=None): - codecs.IncrementalDecoder.__init__(self, errors) - self.mapping = mapping - - def decode(self, input, final=False): - return codecs.charmap_decode(input, self.errors, self.mapping)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - - def __init__(self,stream,errors='strict',mapping=None): - codecs.StreamWriter.__init__(self,stream,errors) - self.mapping = mapping - - def encode(self,input,errors='strict'): - return Codec.encode(input,errors,self.mapping) - -class StreamReader(Codec,codecs.StreamReader): - - def __init__(self,stream,errors='strict',mapping=None): - codecs.StreamReader.__init__(self,stream,errors) - self.mapping = mapping - - def decode(self,input,errors='strict'): - return Codec.decode(input,errors,self.mapping) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='charmap', - encode=Codec.encode, - decode=Codec.decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/cp037.py b/Python314_4_x86_Template/Lib/encodings/cp037.py deleted file mode 100644 index 4edd708f3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp037.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp037 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp037', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> CONTROL - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> CONTROL - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> CONTROL - '\x8d' # 0x09 -> CONTROL - '\x8e' # 0x0A -> CONTROL - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> CONTROL - '\x85' # 0x15 -> CONTROL - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> CONTROL - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> CONTROL - '\x8f' # 0x1B -> CONTROL - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> CONTROL - '\x81' # 0x21 -> CONTROL - '\x82' # 0x22 -> CONTROL - '\x83' # 0x23 -> CONTROL - '\x84' # 0x24 -> CONTROL - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> CONTROL - '\x89' # 0x29 -> CONTROL - '\x8a' # 0x2A -> CONTROL - '\x8b' # 0x2B -> CONTROL - '\x8c' # 0x2C -> CONTROL - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> CONTROL - '\x91' # 0x31 -> CONTROL - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> CONTROL - '\x94' # 0x34 -> CONTROL - '\x95' # 0x35 -> CONTROL - '\x96' # 0x36 -> CONTROL - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> CONTROL - '\x99' # 0x39 -> CONTROL - '\x9a' # 0x3A -> CONTROL - '\x9b' # 0x3B -> CONTROL - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> CONTROL - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\xa0' # 0x41 -> NO-BREAK SPACE - '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE - '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA - '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE - '\xa2' # 0x4A -> CENT SIGN - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '|' # 0x4F -> VERTICAL LINE - '&' # 0x50 -> AMPERSAND - '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE - '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE - '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) - '!' # 0x5A -> EXCLAMATION MARK - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '\xac' # 0x5F -> NOT SIGN - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE - '\xa6' # 0x6A -> BROKEN BAR - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE - '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '@' # 0x7C -> COMMERCIAL AT - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) - '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR - '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR - '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE - '\xb8' # 0x9D -> CEDILLA - '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE - '\xa4' # 0x9F -> CURRENCY SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '~' # 0xA1 -> TILDE - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK - '\xbf' # 0xAB -> INVERTED QUESTION MARK - '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) - '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) - '\xae' # 0xAF -> REGISTERED SIGN - '^' # 0xB0 -> CIRCUMFLEX ACCENT - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '\xa7' # 0xB5 -> SECTION SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '[' # 0xBA -> LEFT SQUARE BRACKET - ']' # 0xBB -> RIGHT SQUARE BRACKET - '\xaf' # 0xBC -> MACRON - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '{' # 0xC0 -> LEFT CURLY BRACKET - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE - '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE - '}' # 0xD0 -> RIGHT CURLY BRACKET - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE - '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\\' # 0xE0 -> REVERSE SOLIDUS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE - '\x9f' # 0xFF -> CONTROL -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1006.py b/Python314_4_x86_Template/Lib/encodings/cp1006.py deleted file mode 100644 index a1221c3ef..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1006.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1006 generated from 'MAPPINGS/VENDORS/MISC/CP1006.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1006', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u06f0' # 0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO - '\u06f1' # 0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE - '\u06f2' # 0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO - '\u06f3' # 0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE - '\u06f4' # 0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR - '\u06f5' # 0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE - '\u06f6' # 0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX - '\u06f7' # 0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN - '\u06f8' # 0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT - '\u06f9' # 0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE - '\u060c' # 0xAB -> ARABIC COMMA - '\u061b' # 0xAC -> ARABIC SEMICOLON - '\xad' # 0xAD -> SOFT HYPHEN - '\u061f' # 0xAE -> ARABIC QUESTION MARK - '\ufe81' # 0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM - '\ufe8d' # 0xB0 -> ARABIC LETTER ALEF ISOLATED FORM - '\ufe8e' # 0xB1 -> ARABIC LETTER ALEF FINAL FORM - '\ufe8e' # 0xB2 -> ARABIC LETTER ALEF FINAL FORM - '\ufe8f' # 0xB3 -> ARABIC LETTER BEH ISOLATED FORM - '\ufe91' # 0xB4 -> ARABIC LETTER BEH INITIAL FORM - '\ufb56' # 0xB5 -> ARABIC LETTER PEH ISOLATED FORM - '\ufb58' # 0xB6 -> ARABIC LETTER PEH INITIAL FORM - '\ufe93' # 0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM - '\ufe95' # 0xB8 -> ARABIC LETTER TEH ISOLATED FORM - '\ufe97' # 0xB9 -> ARABIC LETTER TEH INITIAL FORM - '\ufb66' # 0xBA -> ARABIC LETTER TTEH ISOLATED FORM - '\ufb68' # 0xBB -> ARABIC LETTER TTEH INITIAL FORM - '\ufe99' # 0xBC -> ARABIC LETTER THEH ISOLATED FORM - '\ufe9b' # 0xBD -> ARABIC LETTER THEH INITIAL FORM - '\ufe9d' # 0xBE -> ARABIC LETTER JEEM ISOLATED FORM - '\ufe9f' # 0xBF -> ARABIC LETTER JEEM INITIAL FORM - '\ufb7a' # 0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM - '\ufb7c' # 0xC1 -> ARABIC LETTER TCHEH INITIAL FORM - '\ufea1' # 0xC2 -> ARABIC LETTER HAH ISOLATED FORM - '\ufea3' # 0xC3 -> ARABIC LETTER HAH INITIAL FORM - '\ufea5' # 0xC4 -> ARABIC LETTER KHAH ISOLATED FORM - '\ufea7' # 0xC5 -> ARABIC LETTER KHAH INITIAL FORM - '\ufea9' # 0xC6 -> ARABIC LETTER DAL ISOLATED FORM - '\ufb84' # 0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN - '\ufeab' # 0xC8 -> ARABIC LETTER THAL ISOLATED FORM - '\ufead' # 0xC9 -> ARABIC LETTER REH ISOLATED FORM - '\ufb8c' # 0xCA -> ARABIC LETTER RREH ISOLATED FORM - '\ufeaf' # 0xCB -> ARABIC LETTER ZAIN ISOLATED FORM - '\ufb8a' # 0xCC -> ARABIC LETTER JEH ISOLATED FORM - '\ufeb1' # 0xCD -> ARABIC LETTER SEEN ISOLATED FORM - '\ufeb3' # 0xCE -> ARABIC LETTER SEEN INITIAL FORM - '\ufeb5' # 0xCF -> ARABIC LETTER SHEEN ISOLATED FORM - '\ufeb7' # 0xD0 -> ARABIC LETTER SHEEN INITIAL FORM - '\ufeb9' # 0xD1 -> ARABIC LETTER SAD ISOLATED FORM - '\ufebb' # 0xD2 -> ARABIC LETTER SAD INITIAL FORM - '\ufebd' # 0xD3 -> ARABIC LETTER DAD ISOLATED FORM - '\ufebf' # 0xD4 -> ARABIC LETTER DAD INITIAL FORM - '\ufec1' # 0xD5 -> ARABIC LETTER TAH ISOLATED FORM - '\ufec5' # 0xD6 -> ARABIC LETTER ZAH ISOLATED FORM - '\ufec9' # 0xD7 -> ARABIC LETTER AIN ISOLATED FORM - '\ufeca' # 0xD8 -> ARABIC LETTER AIN FINAL FORM - '\ufecb' # 0xD9 -> ARABIC LETTER AIN INITIAL FORM - '\ufecc' # 0xDA -> ARABIC LETTER AIN MEDIAL FORM - '\ufecd' # 0xDB -> ARABIC LETTER GHAIN ISOLATED FORM - '\ufece' # 0xDC -> ARABIC LETTER GHAIN FINAL FORM - '\ufecf' # 0xDD -> ARABIC LETTER GHAIN INITIAL FORM - '\ufed0' # 0xDE -> ARABIC LETTER GHAIN MEDIAL FORM - '\ufed1' # 0xDF -> ARABIC LETTER FEH ISOLATED FORM - '\ufed3' # 0xE0 -> ARABIC LETTER FEH INITIAL FORM - '\ufed5' # 0xE1 -> ARABIC LETTER QAF ISOLATED FORM - '\ufed7' # 0xE2 -> ARABIC LETTER QAF INITIAL FORM - '\ufed9' # 0xE3 -> ARABIC LETTER KAF ISOLATED FORM - '\ufedb' # 0xE4 -> ARABIC LETTER KAF INITIAL FORM - '\ufb92' # 0xE5 -> ARABIC LETTER GAF ISOLATED FORM - '\ufb94' # 0xE6 -> ARABIC LETTER GAF INITIAL FORM - '\ufedd' # 0xE7 -> ARABIC LETTER LAM ISOLATED FORM - '\ufedf' # 0xE8 -> ARABIC LETTER LAM INITIAL FORM - '\ufee0' # 0xE9 -> ARABIC LETTER LAM MEDIAL FORM - '\ufee1' # 0xEA -> ARABIC LETTER MEEM ISOLATED FORM - '\ufee3' # 0xEB -> ARABIC LETTER MEEM INITIAL FORM - '\ufb9e' # 0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM - '\ufee5' # 0xED -> ARABIC LETTER NOON ISOLATED FORM - '\ufee7' # 0xEE -> ARABIC LETTER NOON INITIAL FORM - '\ufe85' # 0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM - '\ufeed' # 0xF0 -> ARABIC LETTER WAW ISOLATED FORM - '\ufba6' # 0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM - '\ufba8' # 0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM - '\ufba9' # 0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM - '\ufbaa' # 0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM - '\ufe80' # 0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM - '\ufe89' # 0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM - '\ufe8a' # 0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM - '\ufe8b' # 0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM - '\ufef1' # 0xF9 -> ARABIC LETTER YEH ISOLATED FORM - '\ufef2' # 0xFA -> ARABIC LETTER YEH FINAL FORM - '\ufef3' # 0xFB -> ARABIC LETTER YEH INITIAL FORM - '\ufbb0' # 0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM - '\ufbae' # 0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM - '\ufe7c' # 0xFE -> ARABIC SHADDA ISOLATED FORM - '\ufe7d' # 0xFF -> ARABIC SHADDA MEDIAL FORM -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1026.py b/Python314_4_x86_Template/Lib/encodings/cp1026.py deleted file mode 100644 index 46f71f74d..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1026.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1026 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1026', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> CONTROL - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> CONTROL - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> CONTROL - '\x8d' # 0x09 -> CONTROL - '\x8e' # 0x0A -> CONTROL - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> CONTROL - '\x85' # 0x15 -> CONTROL - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> CONTROL - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> CONTROL - '\x8f' # 0x1B -> CONTROL - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> CONTROL - '\x81' # 0x21 -> CONTROL - '\x82' # 0x22 -> CONTROL - '\x83' # 0x23 -> CONTROL - '\x84' # 0x24 -> CONTROL - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> CONTROL - '\x89' # 0x29 -> CONTROL - '\x8a' # 0x2A -> CONTROL - '\x8b' # 0x2B -> CONTROL - '\x8c' # 0x2C -> CONTROL - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> CONTROL - '\x91' # 0x31 -> CONTROL - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> CONTROL - '\x94' # 0x34 -> CONTROL - '\x95' # 0x35 -> CONTROL - '\x96' # 0x36 -> CONTROL - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> CONTROL - '\x99' # 0x39 -> CONTROL - '\x9a' # 0x3A -> CONTROL - '\x9b' # 0x3B -> CONTROL - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> CONTROL - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\xa0' # 0x41 -> NO-BREAK SPACE - '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE - '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE - '{' # 0x48 -> LEFT CURLY BRACKET - '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE - '\xc7' # 0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '!' # 0x4F -> EXCLAMATION MARK - '&' # 0x50 -> AMPERSAND - '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE - '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE - '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) - '\u011e' # 0x5A -> LATIN CAPITAL LETTER G WITH BREVE - '\u0130' # 0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '^' # 0x5F -> CIRCUMFLEX ACCENT - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '[' # 0x68 -> LEFT SQUARE BRACKET - '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE - '\u015f' # 0x6A -> LATIN SMALL LETTER S WITH CEDILLA - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE - '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE - '\u0131' # 0x79 -> LATIN SMALL LETTER DOTLESS I - ':' # 0x7A -> COLON - '\xd6' # 0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\u015e' # 0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '\xdc' # 0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '}' # 0x8C -> RIGHT CURLY BRACKET - '`' # 0x8D -> GRAVE ACCENT - '\xa6' # 0x8E -> BROKEN BAR - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR - '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR - '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE - '\xb8' # 0x9D -> CEDILLA - '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE - '\xa4' # 0x9F -> CURRENCY SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '\xf6' # 0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK - '\xbf' # 0xAB -> INVERTED QUESTION MARK - ']' # 0xAC -> RIGHT SQUARE BRACKET - '$' # 0xAD -> DOLLAR SIGN - '@' # 0xAE -> COMMERCIAL AT - '\xae' # 0xAF -> REGISTERED SIGN - '\xa2' # 0xB0 -> CENT SIGN - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '\xa7' # 0xB5 -> SECTION SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '\xac' # 0xBA -> NOT SIGN - '|' # 0xBB -> VERTICAL LINE - '\xaf' # 0xBC -> MACRON - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '\xe7' # 0xC0 -> LATIN SMALL LETTER C WITH CEDILLA - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '~' # 0xCC -> TILDE - '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE - '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE - '\u011f' # 0xD0 -> LATIN SMALL LETTER G WITH BREVE - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\\' # 0xDC -> REVERSE SOLIDUS - '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE - '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xfc' # 0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '#' # 0xEC -> NUMBER SIGN - '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '"' # 0xFC -> QUOTATION MARK - '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE - '\x9f' # 0xFF -> CONTROL -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1125.py b/Python314_4_x86_Template/Lib/encodings/cp1125.py deleted file mode 100644 index b1fd69deb..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1125.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec for CP1125 - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1125', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A - 0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE - 0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE - 0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE - 0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE - 0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE - 0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE - 0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE - 0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I - 0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I - 0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA - 0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL - 0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM - 0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN - 0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O - 0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE - 0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER - 0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES - 0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE - 0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U - 0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF - 0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA - 0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE - 0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE - 0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA - 0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA - 0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU - 0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E - 0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU - 0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA - 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A - 0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE - 0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE - 0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE - 0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE - 0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE - 0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE - 0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE - 0x00a8: 0x0438, # CYRILLIC SMALL LETTER I - 0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I - 0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA - 0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL - 0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM - 0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN - 0x00ae: 0x043e, # CYRILLIC SMALL LETTER O - 0x00af: 0x043f, # CYRILLIC SMALL LETTER PE - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER - 0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES - 0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE - 0x00e3: 0x0443, # CYRILLIC SMALL LETTER U - 0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF - 0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA - 0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE - 0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE - 0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA - 0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA - 0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN - 0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU - 0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN - 0x00ed: 0x044d, # CYRILLIC SMALL LETTER E - 0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU - 0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA - 0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO - 0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO - 0x00f2: 0x0490, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN - 0x00f3: 0x0491, # CYRILLIC SMALL LETTER GHE WITH UPTURN - 0x00f4: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x00f5: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x00f6: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - 0x00f7: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - 0x00f8: 0x0407, # CYRILLIC CAPITAL LETTER YI - 0x00f9: 0x0457, # CYRILLIC SMALL LETTER YI - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x2116, # NUMERO SIGN - 0x00fd: 0x00a4, # CURRENCY SIGN - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA - '\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL - '\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM - '\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN - '\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O - '\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E - '\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU - '\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA - '\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO - '\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO - '\u0490' # 0x00f2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN - '\u0491' # 0x00f3 -> CYRILLIC SMALL LETTER GHE WITH UPTURN - '\u0404' # 0x00f4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u0454' # 0x00f5 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u0406' # 0x00f6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0456' # 0x00f7 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0407' # 0x00f8 -> CYRILLIC CAPITAL LETTER YI - '\u0457' # 0x00f9 -> CYRILLIC SMALL LETTER YI - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u2116' # 0x00fc -> NUMERO SIGN - '\xa4' # 0x00fd -> CURRENCY SIGN - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a4: 0x00fd, # CURRENCY SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO - 0x0404: 0x00f4, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x0406: 0x00f6, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0407: 0x00f8, # CYRILLIC CAPITAL LETTER YI - 0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A - 0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE - 0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE - 0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE - 0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE - 0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE - 0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE - 0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE - 0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I - 0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I - 0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA - 0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL - 0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM - 0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN - 0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O - 0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE - 0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER - 0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES - 0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE - 0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U - 0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF - 0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA - 0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE - 0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE - 0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA - 0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA - 0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU - 0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E - 0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU - 0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA - 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A - 0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE - 0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE - 0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE - 0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE - 0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE - 0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE - 0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE - 0x0438: 0x00a8, # CYRILLIC SMALL LETTER I - 0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I - 0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA - 0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL - 0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM - 0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN - 0x043e: 0x00ae, # CYRILLIC SMALL LETTER O - 0x043f: 0x00af, # CYRILLIC SMALL LETTER PE - 0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER - 0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES - 0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE - 0x0443: 0x00e3, # CYRILLIC SMALL LETTER U - 0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF - 0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA - 0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE - 0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE - 0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA - 0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA - 0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN - 0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU - 0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN - 0x044d: 0x00ed, # CYRILLIC SMALL LETTER E - 0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU - 0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA - 0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO - 0x0454: 0x00f5, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x0456: 0x00f7, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0457: 0x00f9, # CYRILLIC SMALL LETTER YI - 0x0490: 0x00f2, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN - 0x0491: 0x00f3, # CYRILLIC SMALL LETTER GHE WITH UPTURN - 0x2116: 0x00fc, # NUMERO SIGN - 0x221a: 0x00fb, # SQUARE ROOT - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp1140.py b/Python314_4_x86_Template/Lib/encodings/cp1140.py deleted file mode 100644 index 0a919d837..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1140.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1140 generated from 'python-mappings/CP1140.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1140', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> CONTROL - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> CONTROL - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> CONTROL - '\x8d' # 0x09 -> CONTROL - '\x8e' # 0x0A -> CONTROL - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> CONTROL - '\x85' # 0x15 -> CONTROL - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> CONTROL - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> CONTROL - '\x8f' # 0x1B -> CONTROL - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> CONTROL - '\x81' # 0x21 -> CONTROL - '\x82' # 0x22 -> CONTROL - '\x83' # 0x23 -> CONTROL - '\x84' # 0x24 -> CONTROL - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> CONTROL - '\x89' # 0x29 -> CONTROL - '\x8a' # 0x2A -> CONTROL - '\x8b' # 0x2B -> CONTROL - '\x8c' # 0x2C -> CONTROL - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> CONTROL - '\x91' # 0x31 -> CONTROL - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> CONTROL - '\x94' # 0x34 -> CONTROL - '\x95' # 0x35 -> CONTROL - '\x96' # 0x36 -> CONTROL - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> CONTROL - '\x99' # 0x39 -> CONTROL - '\x9a' # 0x3A -> CONTROL - '\x9b' # 0x3B -> CONTROL - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> CONTROL - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\xa0' # 0x41 -> NO-BREAK SPACE - '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE - '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA - '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE - '\xa2' # 0x4A -> CENT SIGN - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '|' # 0x4F -> VERTICAL LINE - '&' # 0x50 -> AMPERSAND - '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE - '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE - '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) - '!' # 0x5A -> EXCLAMATION MARK - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '\xac' # 0x5F -> NOT SIGN - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE - '\xa6' # 0x6A -> BROKEN BAR - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE - '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '@' # 0x7C -> COMMERCIAL AT - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) - '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR - '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR - '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE - '\xb8' # 0x9D -> CEDILLA - '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE - '\u20ac' # 0x9F -> EURO SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '~' # 0xA1 -> TILDE - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK - '\xbf' # 0xAB -> INVERTED QUESTION MARK - '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) - '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) - '\xae' # 0xAF -> REGISTERED SIGN - '^' # 0xB0 -> CIRCUMFLEX ACCENT - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '\xa7' # 0xB5 -> SECTION SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '[' # 0xBA -> LEFT SQUARE BRACKET - ']' # 0xBB -> RIGHT SQUARE BRACKET - '\xaf' # 0xBC -> MACRON - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '{' # 0xC0 -> LEFT CURLY BRACKET - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE - '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE - '}' # 0xD0 -> RIGHT CURLY BRACKET - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE - '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\\' # 0xE0 -> REVERSE SOLIDUS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE - '\x9f' # 0xFF -> CONTROL -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1250.py b/Python314_4_x86_Template/Lib/encodings/cp1250.py deleted file mode 100644 index c2c83aaf3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1250.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1250 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1250', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\ufffe' # 0x83 -> UNDEFINED - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\ufffe' # 0x88 -> UNDEFINED - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u015a' # 0x8C -> LATIN CAPITAL LETTER S WITH ACUTE - '\u0164' # 0x8D -> LATIN CAPITAL LETTER T WITH CARON - '\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON - '\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u015b' # 0x9C -> LATIN SMALL LETTER S WITH ACUTE - '\u0165' # 0x9D -> LATIN SMALL LETTER T WITH CARON - '\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON - '\u017a' # 0x9F -> LATIN SMALL LETTER Z WITH ACUTE - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u02c7' # 0xA1 -> CARON - '\u02d8' # 0xA2 -> BREVE - '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u0104' # 0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u02db' # 0xB2 -> OGONEK - '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\u0105' # 0xB9 -> LATIN SMALL LETTER A WITH OGONEK - '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u013d' # 0xBC -> LATIN CAPITAL LETTER L WITH CARON - '\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT - '\u013e' # 0xBE -> LATIN SMALL LETTER L WITH CARON - '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE - '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON - '\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE - '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE - '\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON - '\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA - '\u02d9' # 0xFF -> DOT ABOVE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1251.py b/Python314_4_x86_Template/Lib/encodings/cp1251.py deleted file mode 100644 index 22bc66002..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1251.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1251 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1251', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE - '\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u20ac' # 0x88 -> EURO SIGN - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE - '\u040c' # 0x8D -> CYRILLIC CAPITAL LETTER KJE - '\u040b' # 0x8E -> CYRILLIC CAPITAL LETTER TSHE - '\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE - '\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE - '\u045c' # 0x9D -> CYRILLIC SMALL LETTER KJE - '\u045b' # 0x9E -> CYRILLIC SMALL LETTER TSHE - '\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U - '\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U - '\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u0490' # 0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u0404' # 0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\u0407' # 0xAF -> CYRILLIC CAPITAL LETTER YI - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0491' # 0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO - '\u2116' # 0xB9 -> NUMERO SIGN - '\u0454' # 0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE - '\u0405' # 0xBD -> CYRILLIC CAPITAL LETTER DZE - '\u0455' # 0xBE -> CYRILLIC SMALL LETTER DZE - '\u0457' # 0xBF -> CYRILLIC SMALL LETTER YI - '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O - '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE - '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E - '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU - '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1252.py b/Python314_4_x86_Template/Lib/encodings/cp1252.py deleted file mode 100644 index c0e8088ea..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1252.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1252', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE - '\ufffe' # 0x8D -> UNDEFINED - '\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u02dc' # 0x98 -> SMALL TILDE - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE - '\ufffe' # 0x9D -> UNDEFINED - '\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON - '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0xFE -> LATIN SMALL LETTER THORN - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1253.py b/Python314_4_x86_Template/Lib/encodings/cp1253.py deleted file mode 100644 index ec9c0972d..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1253.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1253 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1253', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\ufffe' # 0x88 -> UNDEFINED - '\u2030' # 0x89 -> PER MILLE SIGN - '\ufffe' # 0x8A -> UNDEFINED - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x8C -> UNDEFINED - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\ufffe' # 0x9A -> UNDEFINED - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x9C -> UNDEFINED - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\ufffe' # 0x9F -> UNDEFINED - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0385' # 0xA1 -> GREEK DIALYTIKA TONOS - '\u0386' # 0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\ufffe' # 0xAA -> UNDEFINED - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\u2015' # 0xAF -> HORIZONTAL BAR - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\u0384' # 0xB4 -> GREEK TONOS - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS - '\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - '\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA - '\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA - '\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA - '\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA - '\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA - '\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA - '\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA - '\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA - '\u039c' # 0xCC -> GREEK CAPITAL LETTER MU - '\u039d' # 0xCD -> GREEK CAPITAL LETTER NU - '\u039e' # 0xCE -> GREEK CAPITAL LETTER XI - '\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON - '\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI - '\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO - '\ufffe' # 0xD2 -> UNDEFINED - '\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA - '\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU - '\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON - '\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI - '\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI - '\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA - '\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS - '\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS - '\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA - '\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA - '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA - '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON - '\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA - '\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA - '\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA - '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA - '\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0xEC -> GREEK SMALL LETTER MU - '\u03bd' # 0xED -> GREEK SMALL LETTER NU - '\u03be' # 0xEE -> GREEK SMALL LETTER XI - '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI - '\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO - '\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA - '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA - '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU - '\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON - '\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI - '\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI - '\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI - '\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA - '\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS - '\ufffe' # 0xFF -> UNDEFINED -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1254.py b/Python314_4_x86_Template/Lib/encodings/cp1254.py deleted file mode 100644 index 4912327a5..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1254.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1254 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1254', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u02dc' # 0x98 -> SMALL TILDE - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I - '\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1255.py b/Python314_4_x86_Template/Lib/encodings/cp1255.py deleted file mode 100644 index 91ce26b9b..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1255.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1255 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1255', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\ufffe' # 0x8A -> UNDEFINED - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x8C -> UNDEFINED - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u02dc' # 0x98 -> SMALL TILDE - '\u2122' # 0x99 -> TRADE MARK SIGN - '\ufffe' # 0x9A -> UNDEFINED - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x9C -> UNDEFINED - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\ufffe' # 0x9F -> UNDEFINED - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\u20aa' # 0xA4 -> NEW SHEQEL SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xd7' # 0xAA -> MULTIPLICATION SIGN - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xf7' # 0xBA -> DIVISION SIGN - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\u05b0' # 0xC0 -> HEBREW POINT SHEVA - '\u05b1' # 0xC1 -> HEBREW POINT HATAF SEGOL - '\u05b2' # 0xC2 -> HEBREW POINT HATAF PATAH - '\u05b3' # 0xC3 -> HEBREW POINT HATAF QAMATS - '\u05b4' # 0xC4 -> HEBREW POINT HIRIQ - '\u05b5' # 0xC5 -> HEBREW POINT TSERE - '\u05b6' # 0xC6 -> HEBREW POINT SEGOL - '\u05b7' # 0xC7 -> HEBREW POINT PATAH - '\u05b8' # 0xC8 -> HEBREW POINT QAMATS - '\u05b9' # 0xC9 -> HEBREW POINT HOLAM - '\ufffe' # 0xCA -> UNDEFINED - '\u05bb' # 0xCB -> HEBREW POINT QUBUTS - '\u05bc' # 0xCC -> HEBREW POINT DAGESH OR MAPIQ - '\u05bd' # 0xCD -> HEBREW POINT METEG - '\u05be' # 0xCE -> HEBREW PUNCTUATION MAQAF - '\u05bf' # 0xCF -> HEBREW POINT RAFE - '\u05c0' # 0xD0 -> HEBREW PUNCTUATION PASEQ - '\u05c1' # 0xD1 -> HEBREW POINT SHIN DOT - '\u05c2' # 0xD2 -> HEBREW POINT SIN DOT - '\u05c3' # 0xD3 -> HEBREW PUNCTUATION SOF PASUQ - '\u05f0' # 0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV - '\u05f1' # 0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD - '\u05f2' # 0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD - '\u05f3' # 0xD7 -> HEBREW PUNCTUATION GERESH - '\u05f4' # 0xD8 -> HEBREW PUNCTUATION GERSHAYIM - '\ufffe' # 0xD9 -> UNDEFINED - '\ufffe' # 0xDA -> UNDEFINED - '\ufffe' # 0xDB -> UNDEFINED - '\ufffe' # 0xDC -> UNDEFINED - '\ufffe' # 0xDD -> UNDEFINED - '\ufffe' # 0xDE -> UNDEFINED - '\ufffe' # 0xDF -> UNDEFINED - '\u05d0' # 0xE0 -> HEBREW LETTER ALEF - '\u05d1' # 0xE1 -> HEBREW LETTER BET - '\u05d2' # 0xE2 -> HEBREW LETTER GIMEL - '\u05d3' # 0xE3 -> HEBREW LETTER DALET - '\u05d4' # 0xE4 -> HEBREW LETTER HE - '\u05d5' # 0xE5 -> HEBREW LETTER VAV - '\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN - '\u05d7' # 0xE7 -> HEBREW LETTER HET - '\u05d8' # 0xE8 -> HEBREW LETTER TET - '\u05d9' # 0xE9 -> HEBREW LETTER YOD - '\u05da' # 0xEA -> HEBREW LETTER FINAL KAF - '\u05db' # 0xEB -> HEBREW LETTER KAF - '\u05dc' # 0xEC -> HEBREW LETTER LAMED - '\u05dd' # 0xED -> HEBREW LETTER FINAL MEM - '\u05de' # 0xEE -> HEBREW LETTER MEM - '\u05df' # 0xEF -> HEBREW LETTER FINAL NUN - '\u05e0' # 0xF0 -> HEBREW LETTER NUN - '\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH - '\u05e2' # 0xF2 -> HEBREW LETTER AYIN - '\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE - '\u05e4' # 0xF4 -> HEBREW LETTER PE - '\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI - '\u05e6' # 0xF6 -> HEBREW LETTER TSADI - '\u05e7' # 0xF7 -> HEBREW LETTER QOF - '\u05e8' # 0xF8 -> HEBREW LETTER RESH - '\u05e9' # 0xF9 -> HEBREW LETTER SHIN - '\u05ea' # 0xFA -> HEBREW LETTER TAV - '\ufffe' # 0xFB -> UNDEFINED - '\ufffe' # 0xFC -> UNDEFINED - '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK - '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK - '\ufffe' # 0xFF -> UNDEFINED -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1256.py b/Python314_4_x86_Template/Lib/encodings/cp1256.py deleted file mode 100644 index fd6afab52..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1256.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1256 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1256', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\u067e' # 0x81 -> ARABIC LETTER PEH - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0679' # 0x8A -> ARABIC LETTER TTEH - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE - '\u0686' # 0x8D -> ARABIC LETTER TCHEH - '\u0698' # 0x8E -> ARABIC LETTER JEH - '\u0688' # 0x8F -> ARABIC LETTER DDAL - '\u06af' # 0x90 -> ARABIC LETTER GAF - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u06a9' # 0x98 -> ARABIC LETTER KEHEH - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0691' # 0x9A -> ARABIC LETTER RREH - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE - '\u200c' # 0x9D -> ZERO WIDTH NON-JOINER - '\u200d' # 0x9E -> ZERO WIDTH JOINER - '\u06ba' # 0x9F -> ARABIC LETTER NOON GHUNNA - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u060c' # 0xA1 -> ARABIC COMMA - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u06be' # 0xAA -> ARABIC LETTER HEH DOACHASHMEE - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\u061b' # 0xBA -> ARABIC SEMICOLON - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\u061f' # 0xBF -> ARABIC QUESTION MARK - '\u06c1' # 0xC0 -> ARABIC LETTER HEH GOAL - '\u0621' # 0xC1 -> ARABIC LETTER HAMZA - '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0xC7 -> ARABIC LETTER ALEF - '\u0628' # 0xC8 -> ARABIC LETTER BEH - '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0xCA -> ARABIC LETTER TEH - '\u062b' # 0xCB -> ARABIC LETTER THEH - '\u062c' # 0xCC -> ARABIC LETTER JEEM - '\u062d' # 0xCD -> ARABIC LETTER HAH - '\u062e' # 0xCE -> ARABIC LETTER KHAH - '\u062f' # 0xCF -> ARABIC LETTER DAL - '\u0630' # 0xD0 -> ARABIC LETTER THAL - '\u0631' # 0xD1 -> ARABIC LETTER REH - '\u0632' # 0xD2 -> ARABIC LETTER ZAIN - '\u0633' # 0xD3 -> ARABIC LETTER SEEN - '\u0634' # 0xD4 -> ARABIC LETTER SHEEN - '\u0635' # 0xD5 -> ARABIC LETTER SAD - '\u0636' # 0xD6 -> ARABIC LETTER DAD - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u0637' # 0xD8 -> ARABIC LETTER TAH - '\u0638' # 0xD9 -> ARABIC LETTER ZAH - '\u0639' # 0xDA -> ARABIC LETTER AIN - '\u063a' # 0xDB -> ARABIC LETTER GHAIN - '\u0640' # 0xDC -> ARABIC TATWEEL - '\u0641' # 0xDD -> ARABIC LETTER FEH - '\u0642' # 0xDE -> ARABIC LETTER QAF - '\u0643' # 0xDF -> ARABIC LETTER KAF - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\u0644' # 0xE1 -> ARABIC LETTER LAM - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\u0645' # 0xE3 -> ARABIC LETTER MEEM - '\u0646' # 0xE4 -> ARABIC LETTER NOON - '\u0647' # 0xE5 -> ARABIC LETTER HEH - '\u0648' # 0xE6 -> ARABIC LETTER WAW - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u0649' # 0xEC -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0xED -> ARABIC LETTER YEH - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u064b' # 0xF0 -> ARABIC FATHATAN - '\u064c' # 0xF1 -> ARABIC DAMMATAN - '\u064d' # 0xF2 -> ARABIC KASRATAN - '\u064e' # 0xF3 -> ARABIC FATHA - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u064f' # 0xF5 -> ARABIC DAMMA - '\u0650' # 0xF6 -> ARABIC KASRA - '\xf7' # 0xF7 -> DIVISION SIGN - '\u0651' # 0xF8 -> ARABIC SHADDA - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\u0652' # 0xFA -> ARABIC SUKUN - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK - '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK - '\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1257.py b/Python314_4_x86_Template/Lib/encodings/cp1257.py deleted file mode 100644 index 9ebc90d50..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1257.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1257 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1257', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\ufffe' # 0x83 -> UNDEFINED - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\ufffe' # 0x88 -> UNDEFINED - '\u2030' # 0x89 -> PER MILLE SIGN - '\ufffe' # 0x8A -> UNDEFINED - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x8C -> UNDEFINED - '\xa8' # 0x8D -> DIAERESIS - '\u02c7' # 0x8E -> CARON - '\xb8' # 0x8F -> CEDILLA - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\ufffe' # 0x9A -> UNDEFINED - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x9C -> UNDEFINED - '\xaf' # 0x9D -> MACRON - '\u02db' # 0x9E -> OGONEK - '\ufffe' # 0x9F -> UNDEFINED - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\ufffe' # 0xA1 -> UNDEFINED - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\ufffe' # 0xA5 -> UNDEFINED - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xc6' # 0xAF -> LATIN CAPITAL LETTER AE - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xe6' # 0xBF -> LATIN SMALL LETTER AE - '\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK - '\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON - '\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK - '\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE - '\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA - '\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA - '\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON - '\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA - '\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON - '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK - '\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE - '\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE - '\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK - '\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK - '\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON - '\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK - '\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE - '\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE - '\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA - '\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA - '\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON - '\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA - '\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON - '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE - '\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK - '\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE - '\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE - '\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON - '\u02d9' # 0xFF -> DOT ABOVE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp1258.py b/Python314_4_x86_Template/Lib/encodings/cp1258.py deleted file mode 100644 index 784378a83..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp1258.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp1258 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp1258', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\ufffe' # 0x8A -> UNDEFINED - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u02dc' # 0x98 -> SMALL TILDE - '\u2122' # 0x99 -> TRADE MARK SIGN - '\ufffe' # 0x9A -> UNDEFINED - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u0300' # 0xCC -> COMBINING GRAVE ACCENT - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\u0309' # 0xD2 -> COMBINING HOOK ABOVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u01a0' # 0xD5 -> LATIN CAPITAL LETTER O WITH HORN - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u01af' # 0xDD -> LATIN CAPITAL LETTER U WITH HORN - '\u0303' # 0xDE -> COMBINING TILDE - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u0301' # 0xEC -> COMBINING ACUTE ACCENT - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\u0323' # 0xF2 -> COMBINING DOT BELOW - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u01a1' # 0xF5 -> LATIN SMALL LETTER O WITH HORN - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u01b0' # 0xFD -> LATIN SMALL LETTER U WITH HORN - '\u20ab' # 0xFE -> DONG SIGN - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp273.py b/Python314_4_x86_Template/Lib/encodings/cp273.py deleted file mode 100644 index 69c6d778c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp273.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp273 generated from 'python-mappings/CP273.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp273', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL (NUL) - '\x01' # 0x01 -> START OF HEADING (SOH) - '\x02' # 0x02 -> START OF TEXT (STX) - '\x03' # 0x03 -> END OF TEXT (ETX) - '\x9c' # 0x04 -> STRING TERMINATOR (ST) - '\t' # 0x05 -> CHARACTER TABULATION (HT) - '\x86' # 0x06 -> START OF SELECTED AREA (SSA) - '\x7f' # 0x07 -> DELETE (DEL) - '\x97' # 0x08 -> END OF GUARDED AREA (EPA) - '\x8d' # 0x09 -> REVERSE LINE FEED (RI) - '\x8e' # 0x0A -> SINGLE-SHIFT TWO (SS2) - '\x0b' # 0x0B -> LINE TABULATION (VT) - '\x0c' # 0x0C -> FORM FEED (FF) - '\r' # 0x0D -> CARRIAGE RETURN (CR) - '\x0e' # 0x0E -> SHIFT OUT (SO) - '\x0f' # 0x0F -> SHIFT IN (SI) - '\x10' # 0x10 -> DATALINK ESCAPE (DLE) - '\x11' # 0x11 -> DEVICE CONTROL ONE (DC1) - '\x12' # 0x12 -> DEVICE CONTROL TWO (DC2) - '\x13' # 0x13 -> DEVICE CONTROL THREE (DC3) - '\x9d' # 0x14 -> OPERATING SYSTEM COMMAND (OSC) - '\x85' # 0x15 -> NEXT LINE (NEL) - '\x08' # 0x16 -> BACKSPACE (BS) - '\x87' # 0x17 -> END OF SELECTED AREA (ESA) - '\x18' # 0x18 -> CANCEL (CAN) - '\x19' # 0x19 -> END OF MEDIUM (EM) - '\x92' # 0x1A -> PRIVATE USE TWO (PU2) - '\x8f' # 0x1B -> SINGLE-SHIFT THREE (SS3) - '\x1c' # 0x1C -> FILE SEPARATOR (IS4) - '\x1d' # 0x1D -> GROUP SEPARATOR (IS3) - '\x1e' # 0x1E -> RECORD SEPARATOR (IS2) - '\x1f' # 0x1F -> UNIT SEPARATOR (IS1) - '\x80' # 0x20 -> PADDING CHARACTER (PAD) - '\x81' # 0x21 -> HIGH OCTET PRESET (HOP) - '\x82' # 0x22 -> BREAK PERMITTED HERE (BPH) - '\x83' # 0x23 -> NO BREAK HERE (NBH) - '\x84' # 0x24 -> INDEX (IND) - '\n' # 0x25 -> LINE FEED (LF) - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK (ETB) - '\x1b' # 0x27 -> ESCAPE (ESC) - '\x88' # 0x28 -> CHARACTER TABULATION SET (HTS) - '\x89' # 0x29 -> CHARACTER TABULATION WITH JUSTIFICATION (HTJ) - '\x8a' # 0x2A -> LINE TABULATION SET (VTS) - '\x8b' # 0x2B -> PARTIAL LINE FORWARD (PLD) - '\x8c' # 0x2C -> PARTIAL LINE BACKWARD (PLU) - '\x05' # 0x2D -> ENQUIRY (ENQ) - '\x06' # 0x2E -> ACKNOWLEDGE (ACK) - '\x07' # 0x2F -> BELL (BEL) - '\x90' # 0x30 -> DEVICE CONTROL STRING (DCS) - '\x91' # 0x31 -> PRIVATE USE ONE (PU1) - '\x16' # 0x32 -> SYNCHRONOUS IDLE (SYN) - '\x93' # 0x33 -> SET TRANSMIT STATE (STS) - '\x94' # 0x34 -> CANCEL CHARACTER (CCH) - '\x95' # 0x35 -> MESSAGE WAITING (MW) - '\x96' # 0x36 -> START OF GUARDED AREA (SPA) - '\x04' # 0x37 -> END OF TRANSMISSION (EOT) - '\x98' # 0x38 -> START OF STRING (SOS) - '\x99' # 0x39 -> SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) - '\x9a' # 0x3A -> SINGLE CHARACTER INTRODUCER (SCI) - '\x9b' # 0x3B -> CONTROL SEQUENCE INTRODUCER (CSI) - '\x14' # 0x3C -> DEVICE CONTROL FOUR (DC4) - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE (NAK) - '\x9e' # 0x3E -> PRIVACY MESSAGE (PM) - '\x1a' # 0x3F -> SUBSTITUTE (SUB) - ' ' # 0x40 -> SPACE - '\xa0' # 0x41 -> NO-BREAK SPACE - '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '{' # 0x43 -> LEFT CURLY BRACKET - '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE - '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA - '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE - '\xc4' # 0x4A -> LATIN CAPITAL LETTER A WITH DIAERESIS - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '!' # 0x4F -> EXCLAMATION MARK - '&' # 0x50 -> AMPERSAND - '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE - '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE - '~' # 0x59 -> TILDE - '\xdc' # 0x5A -> LATIN CAPITAL LETTER U WITH DIAERESIS - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '^' # 0x5F -> CIRCUMFLEX ACCENT - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '[' # 0x63 -> LEFT SQUARE BRACKET - '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE - '\xf6' # 0x6A -> LATIN SMALL LETTER O WITH DIAERESIS - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE - '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '\xa7' # 0x7C -> SECTION SIGN - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (Icelandic) - '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (Icelandic) - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR - '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR - '\xe6' # 0x9C -> LATIN SMALL LETTER AE - '\xb8' # 0x9D -> CEDILLA - '\xc6' # 0x9E -> LATIN CAPITAL LETTER AE - '\xa4' # 0x9F -> CURRENCY SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '\xdf' # 0xA1 -> LATIN SMALL LETTER SHARP S (German) - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK - '\xbf' # 0xAB -> INVERTED QUESTION MARK - '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (Icelandic) - '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (Icelandic) - '\xae' # 0xAF -> REGISTERED SIGN - '\xa2' # 0xB0 -> CENT SIGN - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '@' # 0xB5 -> COMMERCIAL AT - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '\xac' # 0xBA -> NOT SIGN - '|' # 0xBB -> VERTICAL LINE - '\u203e' # 0xBC -> OVERLINE - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '\xe4' # 0xC0 -> LATIN SMALL LETTER A WITH DIAERESIS - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xa6' # 0xCC -> BROKEN BAR - '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE - '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE - '\xfc' # 0xD0 -> LATIN SMALL LETTER U WITH DIAERESIS - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '}' # 0xDC -> RIGHT CURLY BRACKET - '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE - '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xd6' # 0xE0 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\\' # 0xEC -> REVERSE SOLIDUS - '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - ']' # 0xFC -> RIGHT SQUARE BRACKET - '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE - '\x9f' # 0xFF -> APPLICATION PROGRAM COMMAND (APC) -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp424.py b/Python314_4_x86_Template/Lib/encodings/cp424.py deleted file mode 100644 index 6753daf12..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp424.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp424 generated from 'MAPPINGS/VENDORS/MISC/CP424.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp424', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> SELECT - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> REQUIRED NEW LINE - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> GRAPHIC ESCAPE - '\x8d' # 0x09 -> SUPERSCRIPT - '\x8e' # 0x0A -> REPEAT - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> RESTORE/ENABLE PRESENTATION - '\x85' # 0x15 -> NEW LINE - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> PROGRAM OPERATOR COMMUNICATION - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> UNIT BACK SPACE - '\x8f' # 0x1B -> CUSTOMER USE ONE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> DIGIT SELECT - '\x81' # 0x21 -> START OF SIGNIFICANCE - '\x82' # 0x22 -> FIELD SEPARATOR - '\x83' # 0x23 -> WORD UNDERSCORE - '\x84' # 0x24 -> BYPASS OR INHIBIT PRESENTATION - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> SET ATTRIBUTE - '\x89' # 0x29 -> START FIELD EXTENDED - '\x8a' # 0x2A -> SET MODE OR SWITCH - '\x8b' # 0x2B -> CONTROL SEQUENCE PREFIX - '\x8c' # 0x2C -> MODIFY FIELD ATTRIBUTE - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> <reserved> - '\x91' # 0x31 -> <reserved> - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> INDEX RETURN - '\x94' # 0x34 -> PRESENTATION POSITION - '\x95' # 0x35 -> TRANSPARENT - '\x96' # 0x36 -> NUMERIC BACKSPACE - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> SUBSCRIPT - '\x99' # 0x39 -> INDENT TABULATION - '\x9a' # 0x3A -> REVERSE FORM FEED - '\x9b' # 0x3B -> CUSTOMER USE THREE - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> <reserved> - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\u05d0' # 0x41 -> HEBREW LETTER ALEF - '\u05d1' # 0x42 -> HEBREW LETTER BET - '\u05d2' # 0x43 -> HEBREW LETTER GIMEL - '\u05d3' # 0x44 -> HEBREW LETTER DALET - '\u05d4' # 0x45 -> HEBREW LETTER HE - '\u05d5' # 0x46 -> HEBREW LETTER VAV - '\u05d6' # 0x47 -> HEBREW LETTER ZAYIN - '\u05d7' # 0x48 -> HEBREW LETTER HET - '\u05d8' # 0x49 -> HEBREW LETTER TET - '\xa2' # 0x4A -> CENT SIGN - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '|' # 0x4F -> VERTICAL LINE - '&' # 0x50 -> AMPERSAND - '\u05d9' # 0x51 -> HEBREW LETTER YOD - '\u05da' # 0x52 -> HEBREW LETTER FINAL KAF - '\u05db' # 0x53 -> HEBREW LETTER KAF - '\u05dc' # 0x54 -> HEBREW LETTER LAMED - '\u05dd' # 0x55 -> HEBREW LETTER FINAL MEM - '\u05de' # 0x56 -> HEBREW LETTER MEM - '\u05df' # 0x57 -> HEBREW LETTER FINAL NUN - '\u05e0' # 0x58 -> HEBREW LETTER NUN - '\u05e1' # 0x59 -> HEBREW LETTER SAMEKH - '!' # 0x5A -> EXCLAMATION MARK - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '\xac' # 0x5F -> NOT SIGN - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\u05e2' # 0x62 -> HEBREW LETTER AYIN - '\u05e3' # 0x63 -> HEBREW LETTER FINAL PE - '\u05e4' # 0x64 -> HEBREW LETTER PE - '\u05e5' # 0x65 -> HEBREW LETTER FINAL TSADI - '\u05e6' # 0x66 -> HEBREW LETTER TSADI - '\u05e7' # 0x67 -> HEBREW LETTER QOF - '\u05e8' # 0x68 -> HEBREW LETTER RESH - '\u05e9' # 0x69 -> HEBREW LETTER SHIN - '\xa6' # 0x6A -> BROKEN BAR - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\ufffe' # 0x70 -> UNDEFINED - '\u05ea' # 0x71 -> HEBREW LETTER TAV - '\ufffe' # 0x72 -> UNDEFINED - '\ufffe' # 0x73 -> UNDEFINED - '\xa0' # 0x74 -> NO-BREAK SPACE - '\ufffe' # 0x75 -> UNDEFINED - '\ufffe' # 0x76 -> UNDEFINED - '\ufffe' # 0x77 -> UNDEFINED - '\u2017' # 0x78 -> DOUBLE LOW LINE - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '@' # 0x7C -> COMMERCIAL AT - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\ufffe' # 0x80 -> UNDEFINED - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\ufffe' # 0x8C -> UNDEFINED - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\ufffe' # 0x9A -> UNDEFINED - '\ufffe' # 0x9B -> UNDEFINED - '\ufffe' # 0x9C -> UNDEFINED - '\xb8' # 0x9D -> CEDILLA - '\ufffe' # 0x9E -> UNDEFINED - '\xa4' # 0x9F -> CURRENCY SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '~' # 0xA1 -> TILDE - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\ufffe' # 0xAA -> UNDEFINED - '\ufffe' # 0xAB -> UNDEFINED - '\ufffe' # 0xAC -> UNDEFINED - '\ufffe' # 0xAD -> UNDEFINED - '\ufffe' # 0xAE -> UNDEFINED - '\xae' # 0xAF -> REGISTERED SIGN - '^' # 0xB0 -> CIRCUMFLEX ACCENT - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '\xa7' # 0xB5 -> SECTION SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '[' # 0xBA -> LEFT SQUARE BRACKET - ']' # 0xBB -> RIGHT SQUARE BRACKET - '\xaf' # 0xBC -> MACRON - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '{' # 0xC0 -> LEFT CURLY BRACKET - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\ufffe' # 0xCB -> UNDEFINED - '\ufffe' # 0xCC -> UNDEFINED - '\ufffe' # 0xCD -> UNDEFINED - '\ufffe' # 0xCE -> UNDEFINED - '\ufffe' # 0xCF -> UNDEFINED - '}' # 0xD0 -> RIGHT CURLY BRACKET - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\ufffe' # 0xDB -> UNDEFINED - '\ufffe' # 0xDC -> UNDEFINED - '\ufffe' # 0xDD -> UNDEFINED - '\ufffe' # 0xDE -> UNDEFINED - '\ufffe' # 0xDF -> UNDEFINED - '\\' # 0xE0 -> REVERSE SOLIDUS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\ufffe' # 0xEB -> UNDEFINED - '\ufffe' # 0xEC -> UNDEFINED - '\ufffe' # 0xED -> UNDEFINED - '\ufffe' # 0xEE -> UNDEFINED - '\ufffe' # 0xEF -> UNDEFINED - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\ufffe' # 0xFB -> UNDEFINED - '\ufffe' # 0xFC -> UNDEFINED - '\ufffe' # 0xFD -> UNDEFINED - '\ufffe' # 0xFE -> UNDEFINED - '\x9f' # 0xFF -> EIGHT ONES -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp437.py b/Python314_4_x86_Template/Lib/encodings/cp437.py deleted file mode 100644 index b6c75e2ca..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp437.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec cp437 generated from 'VENDORS/MICSFT/PC/CP437.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp437', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00a2, # CENT SIGN - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00a5, # YEN SIGN - 0x009e: 0x20a7, # PESETA SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x2310, # REVERSED NOT SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xa2' # 0x009b -> CENT SIGN - '\xa3' # 0x009c -> POUND SIGN - '\xa5' # 0x009d -> YEN SIGN - '\u20a7' # 0x009e -> PESETA SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\u2310' # 0x00a9 -> REVERSED NOT SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x009b, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a5: 0x009d, # YEN SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x20a7: 0x009e, # PESETA SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2310: 0x00a9, # REVERSED NOT SIGN - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp500.py b/Python314_4_x86_Template/Lib/encodings/cp500.py deleted file mode 100644 index 5f61535f8..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp500.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp500 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp500', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> CONTROL - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> CONTROL - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> CONTROL - '\x8d' # 0x09 -> CONTROL - '\x8e' # 0x0A -> CONTROL - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> CONTROL - '\x85' # 0x15 -> CONTROL - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> CONTROL - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> CONTROL - '\x8f' # 0x1B -> CONTROL - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> CONTROL - '\x81' # 0x21 -> CONTROL - '\x82' # 0x22 -> CONTROL - '\x83' # 0x23 -> CONTROL - '\x84' # 0x24 -> CONTROL - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> CONTROL - '\x89' # 0x29 -> CONTROL - '\x8a' # 0x2A -> CONTROL - '\x8b' # 0x2B -> CONTROL - '\x8c' # 0x2C -> CONTROL - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> CONTROL - '\x91' # 0x31 -> CONTROL - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> CONTROL - '\x94' # 0x34 -> CONTROL - '\x95' # 0x35 -> CONTROL - '\x96' # 0x36 -> CONTROL - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> CONTROL - '\x99' # 0x39 -> CONTROL - '\x9a' # 0x3A -> CONTROL - '\x9b' # 0x3B -> CONTROL - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> CONTROL - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\xa0' # 0x41 -> NO-BREAK SPACE - '\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE - '\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA - '\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE - '[' # 0x4A -> LEFT SQUARE BRACKET - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '!' # 0x4F -> EXCLAMATION MARK - '&' # 0x50 -> AMPERSAND - '\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE - '\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE - '\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) - ']' # 0x5A -> RIGHT SQUARE BRACKET - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '^' # 0x5F -> CIRCUMFLEX ACCENT - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE - '\xa6' # 0x6A -> BROKEN BAR - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE - '\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '@' # 0x7C -> COMMERCIAL AT - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) - '\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) - '\xb1' # 0x8F -> PLUS-MINUS SIGN - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR - '\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR - '\xe6' # 0x9C -> LATIN SMALL LIGATURE AE - '\xb8' # 0x9D -> CEDILLA - '\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE - '\xa4' # 0x9F -> CURRENCY SIGN - '\xb5' # 0xA0 -> MICRO SIGN - '~' # 0xA1 -> TILDE - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\xa1' # 0xAA -> INVERTED EXCLAMATION MARK - '\xbf' # 0xAB -> INVERTED QUESTION MARK - '\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) - '\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) - '\xae' # 0xAF -> REGISTERED SIGN - '\xa2' # 0xB0 -> CENT SIGN - '\xa3' # 0xB1 -> POUND SIGN - '\xa5' # 0xB2 -> YEN SIGN - '\xb7' # 0xB3 -> MIDDLE DOT - '\xa9' # 0xB4 -> COPYRIGHT SIGN - '\xa7' # 0xB5 -> SECTION SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF - '\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS - '\xac' # 0xBA -> NOT SIGN - '|' # 0xBB -> VERTICAL LINE - '\xaf' # 0xBC -> MACRON - '\xa8' # 0xBD -> DIAERESIS - '\xb4' # 0xBE -> ACUTE ACCENT - '\xd7' # 0xBF -> MULTIPLICATION SIGN - '{' # 0xC0 -> LEFT CURLY BRACKET - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE - '\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE - '}' # 0xD0 -> RIGHT CURLY BRACKET - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb9' # 0xDA -> SUPERSCRIPT ONE - '\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE - '\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\\' # 0xE0 -> REVERSE SOLIDUS - '\xf7' # 0xE1 -> DIVISION SIGN - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE - '\x9f' # 0xFF -> CONTROL -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp720.py b/Python314_4_x86_Template/Lib/encodings/cp720.py deleted file mode 100644 index 96d609616..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp720.py +++ /dev/null @@ -1,309 +0,0 @@ -"""Python Character Mapping Codec cp720 generated on Windows: -Vista 6.0.6002 SP2 Multiprocessor Free with the command: - python Tools/unicode/genwincodec.py 720 -"""#" - - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp720', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\x80' - '\x81' - '\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\x84' - '\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE - '\x86' - '\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\x8d' - '\x8e' - '\x8f' - '\x90' - '\u0651' # 0x91 -> ARABIC SHADDA - '\u0652' # 0x92 -> ARABIC SUKUN - '\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xa4' # 0x94 -> CURRENCY SIGN - '\u0640' # 0x95 -> ARABIC TATWEEL - '\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE - '\u0621' # 0x98 -> ARABIC LETTER HAMZA - '\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\xa3' # 0x9C -> POUND SIGN - '\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0x9F -> ARABIC LETTER ALEF - '\u0628' # 0xA0 -> ARABIC LETTER BEH - '\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0xA2 -> ARABIC LETTER TEH - '\u062b' # 0xA3 -> ARABIC LETTER THEH - '\u062c' # 0xA4 -> ARABIC LETTER JEEM - '\u062d' # 0xA5 -> ARABIC LETTER HAH - '\u062e' # 0xA6 -> ARABIC LETTER KHAH - '\u062f' # 0xA7 -> ARABIC LETTER DAL - '\u0630' # 0xA8 -> ARABIC LETTER THAL - '\u0631' # 0xA9 -> ARABIC LETTER REH - '\u0632' # 0xAA -> ARABIC LETTER ZAIN - '\u0633' # 0xAB -> ARABIC LETTER SEEN - '\u0634' # 0xAC -> ARABIC LETTER SHEEN - '\u0635' # 0xAD -> ARABIC LETTER SAD - '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0xB0 -> LIGHT SHADE - '\u2592' # 0xB1 -> MEDIUM SHADE - '\u2593' # 0xB2 -> DARK SHADE - '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0xDB -> FULL BLOCK - '\u2584' # 0xDC -> LOWER HALF BLOCK - '\u258c' # 0xDD -> LEFT HALF BLOCK - '\u2590' # 0xDE -> RIGHT HALF BLOCK - '\u2580' # 0xDF -> UPPER HALF BLOCK - '\u0636' # 0xE0 -> ARABIC LETTER DAD - '\u0637' # 0xE1 -> ARABIC LETTER TAH - '\u0638' # 0xE2 -> ARABIC LETTER ZAH - '\u0639' # 0xE3 -> ARABIC LETTER AIN - '\u063a' # 0xE4 -> ARABIC LETTER GHAIN - '\u0641' # 0xE5 -> ARABIC LETTER FEH - '\xb5' # 0xE6 -> MICRO SIGN - '\u0642' # 0xE7 -> ARABIC LETTER QAF - '\u0643' # 0xE8 -> ARABIC LETTER KAF - '\u0644' # 0xE9 -> ARABIC LETTER LAM - '\u0645' # 0xEA -> ARABIC LETTER MEEM - '\u0646' # 0xEB -> ARABIC LETTER NOON - '\u0647' # 0xEC -> ARABIC LETTER HEH - '\u0648' # 0xED -> ARABIC LETTER WAW - '\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0xEF -> ARABIC LETTER YEH - '\u2261' # 0xF0 -> IDENTICAL TO - '\u064b' # 0xF1 -> ARABIC FATHATAN - '\u064c' # 0xF2 -> ARABIC DAMMATAN - '\u064d' # 0xF3 -> ARABIC KASRATAN - '\u064e' # 0xF4 -> ARABIC FATHA - '\u064f' # 0xF5 -> ARABIC DAMMA - '\u0650' # 0xF6 -> ARABIC KASRA - '\u2248' # 0xF7 -> ALMOST EQUAL TO - '\xb0' # 0xF8 -> DEGREE SIGN - '\u2219' # 0xF9 -> BULLET OPERATOR - '\xb7' # 0xFA -> MIDDLE DOT - '\u221a' # 0xFB -> SQUARE ROOT - '\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0xFD -> SUPERSCRIPT TWO - '\u25a0' # 0xFE -> BLACK SQUARE - '\xa0' # 0xFF -> NO-BREAK SPACE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp737.py b/Python314_4_x86_Template/Lib/encodings/cp737.py deleted file mode 100644 index 9685bae75..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp737.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp737', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x0391, # GREEK CAPITAL LETTER ALPHA - 0x0081: 0x0392, # GREEK CAPITAL LETTER BETA - 0x0082: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x0083: 0x0394, # GREEK CAPITAL LETTER DELTA - 0x0084: 0x0395, # GREEK CAPITAL LETTER EPSILON - 0x0085: 0x0396, # GREEK CAPITAL LETTER ZETA - 0x0086: 0x0397, # GREEK CAPITAL LETTER ETA - 0x0087: 0x0398, # GREEK CAPITAL LETTER THETA - 0x0088: 0x0399, # GREEK CAPITAL LETTER IOTA - 0x0089: 0x039a, # GREEK CAPITAL LETTER KAPPA - 0x008a: 0x039b, # GREEK CAPITAL LETTER LAMDA - 0x008b: 0x039c, # GREEK CAPITAL LETTER MU - 0x008c: 0x039d, # GREEK CAPITAL LETTER NU - 0x008d: 0x039e, # GREEK CAPITAL LETTER XI - 0x008e: 0x039f, # GREEK CAPITAL LETTER OMICRON - 0x008f: 0x03a0, # GREEK CAPITAL LETTER PI - 0x0090: 0x03a1, # GREEK CAPITAL LETTER RHO - 0x0091: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x0092: 0x03a4, # GREEK CAPITAL LETTER TAU - 0x0093: 0x03a5, # GREEK CAPITAL LETTER UPSILON - 0x0094: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x0095: 0x03a7, # GREEK CAPITAL LETTER CHI - 0x0096: 0x03a8, # GREEK CAPITAL LETTER PSI - 0x0097: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x0098: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x0099: 0x03b2, # GREEK SMALL LETTER BETA - 0x009a: 0x03b3, # GREEK SMALL LETTER GAMMA - 0x009b: 0x03b4, # GREEK SMALL LETTER DELTA - 0x009c: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x009d: 0x03b6, # GREEK SMALL LETTER ZETA - 0x009e: 0x03b7, # GREEK SMALL LETTER ETA - 0x009f: 0x03b8, # GREEK SMALL LETTER THETA - 0x00a0: 0x03b9, # GREEK SMALL LETTER IOTA - 0x00a1: 0x03ba, # GREEK SMALL LETTER KAPPA - 0x00a2: 0x03bb, # GREEK SMALL LETTER LAMDA - 0x00a3: 0x03bc, # GREEK SMALL LETTER MU - 0x00a4: 0x03bd, # GREEK SMALL LETTER NU - 0x00a5: 0x03be, # GREEK SMALL LETTER XI - 0x00a6: 0x03bf, # GREEK SMALL LETTER OMICRON - 0x00a7: 0x03c0, # GREEK SMALL LETTER PI - 0x00a8: 0x03c1, # GREEK SMALL LETTER RHO - 0x00a9: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00aa: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA - 0x00ab: 0x03c4, # GREEK SMALL LETTER TAU - 0x00ac: 0x03c5, # GREEK SMALL LETTER UPSILON - 0x00ad: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ae: 0x03c7, # GREEK SMALL LETTER CHI - 0x00af: 0x03c8, # GREEK SMALL LETTER PSI - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03c9, # GREEK SMALL LETTER OMEGA - 0x00e1: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS - 0x00e2: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS - 0x00e3: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS - 0x00e4: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA - 0x00e5: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS - 0x00e6: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS - 0x00e7: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS - 0x00e8: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA - 0x00e9: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS - 0x00ea: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS - 0x00eb: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS - 0x00ec: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS - 0x00ed: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS - 0x00ee: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS - 0x00ef: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS - 0x00f0: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - 0x00f5: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u0391' # 0x0080 -> GREEK CAPITAL LETTER ALPHA - '\u0392' # 0x0081 -> GREEK CAPITAL LETTER BETA - '\u0393' # 0x0082 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0x0083 -> GREEK CAPITAL LETTER DELTA - '\u0395' # 0x0084 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0x0085 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0x0086 -> GREEK CAPITAL LETTER ETA - '\u0398' # 0x0087 -> GREEK CAPITAL LETTER THETA - '\u0399' # 0x0088 -> GREEK CAPITAL LETTER IOTA - '\u039a' # 0x0089 -> GREEK CAPITAL LETTER KAPPA - '\u039b' # 0x008a -> GREEK CAPITAL LETTER LAMDA - '\u039c' # 0x008b -> GREEK CAPITAL LETTER MU - '\u039d' # 0x008c -> GREEK CAPITAL LETTER NU - '\u039e' # 0x008d -> GREEK CAPITAL LETTER XI - '\u039f' # 0x008e -> GREEK CAPITAL LETTER OMICRON - '\u03a0' # 0x008f -> GREEK CAPITAL LETTER PI - '\u03a1' # 0x0090 -> GREEK CAPITAL LETTER RHO - '\u03a3' # 0x0091 -> GREEK CAPITAL LETTER SIGMA - '\u03a4' # 0x0092 -> GREEK CAPITAL LETTER TAU - '\u03a5' # 0x0093 -> GREEK CAPITAL LETTER UPSILON - '\u03a6' # 0x0094 -> GREEK CAPITAL LETTER PHI - '\u03a7' # 0x0095 -> GREEK CAPITAL LETTER CHI - '\u03a8' # 0x0096 -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0x0097 -> GREEK CAPITAL LETTER OMEGA - '\u03b1' # 0x0098 -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0x0099 -> GREEK SMALL LETTER BETA - '\u03b3' # 0x009a -> GREEK SMALL LETTER GAMMA - '\u03b4' # 0x009b -> GREEK SMALL LETTER DELTA - '\u03b5' # 0x009c -> GREEK SMALL LETTER EPSILON - '\u03b6' # 0x009d -> GREEK SMALL LETTER ZETA - '\u03b7' # 0x009e -> GREEK SMALL LETTER ETA - '\u03b8' # 0x009f -> GREEK SMALL LETTER THETA - '\u03b9' # 0x00a0 -> GREEK SMALL LETTER IOTA - '\u03ba' # 0x00a1 -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0x00a2 -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0x00a3 -> GREEK SMALL LETTER MU - '\u03bd' # 0x00a4 -> GREEK SMALL LETTER NU - '\u03be' # 0x00a5 -> GREEK SMALL LETTER XI - '\u03bf' # 0x00a6 -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0x00a7 -> GREEK SMALL LETTER PI - '\u03c1' # 0x00a8 -> GREEK SMALL LETTER RHO - '\u03c3' # 0x00a9 -> GREEK SMALL LETTER SIGMA - '\u03c2' # 0x00aa -> GREEK SMALL LETTER FINAL SIGMA - '\u03c4' # 0x00ab -> GREEK SMALL LETTER TAU - '\u03c5' # 0x00ac -> GREEK SMALL LETTER UPSILON - '\u03c6' # 0x00ad -> GREEK SMALL LETTER PHI - '\u03c7' # 0x00ae -> GREEK SMALL LETTER CHI - '\u03c8' # 0x00af -> GREEK SMALL LETTER PSI - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03c9' # 0x00e0 -> GREEK SMALL LETTER OMEGA - '\u03ac' # 0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS - '\u03ad' # 0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS - '\u03ca' # 0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u03af' # 0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03cc' # 0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u03cd' # 0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u03cb' # 0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u03ce' # 0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS - '\u0386' # 0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\u0388' # 0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u0389' # 0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS - '\u038a' # 0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\u038c' # 0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\u038e' # 0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u038f' # 0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u03aa' # 0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\u03ab' # 0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00f7: 0x00f6, # DIVISION SIGN - 0x0386: 0x00ea, # GREEK CAPITAL LETTER ALPHA WITH TONOS - 0x0388: 0x00eb, # GREEK CAPITAL LETTER EPSILON WITH TONOS - 0x0389: 0x00ec, # GREEK CAPITAL LETTER ETA WITH TONOS - 0x038a: 0x00ed, # GREEK CAPITAL LETTER IOTA WITH TONOS - 0x038c: 0x00ee, # GREEK CAPITAL LETTER OMICRON WITH TONOS - 0x038e: 0x00ef, # GREEK CAPITAL LETTER UPSILON WITH TONOS - 0x038f: 0x00f0, # GREEK CAPITAL LETTER OMEGA WITH TONOS - 0x0391: 0x0080, # GREEK CAPITAL LETTER ALPHA - 0x0392: 0x0081, # GREEK CAPITAL LETTER BETA - 0x0393: 0x0082, # GREEK CAPITAL LETTER GAMMA - 0x0394: 0x0083, # GREEK CAPITAL LETTER DELTA - 0x0395: 0x0084, # GREEK CAPITAL LETTER EPSILON - 0x0396: 0x0085, # GREEK CAPITAL LETTER ZETA - 0x0397: 0x0086, # GREEK CAPITAL LETTER ETA - 0x0398: 0x0087, # GREEK CAPITAL LETTER THETA - 0x0399: 0x0088, # GREEK CAPITAL LETTER IOTA - 0x039a: 0x0089, # GREEK CAPITAL LETTER KAPPA - 0x039b: 0x008a, # GREEK CAPITAL LETTER LAMDA - 0x039c: 0x008b, # GREEK CAPITAL LETTER MU - 0x039d: 0x008c, # GREEK CAPITAL LETTER NU - 0x039e: 0x008d, # GREEK CAPITAL LETTER XI - 0x039f: 0x008e, # GREEK CAPITAL LETTER OMICRON - 0x03a0: 0x008f, # GREEK CAPITAL LETTER PI - 0x03a1: 0x0090, # GREEK CAPITAL LETTER RHO - 0x03a3: 0x0091, # GREEK CAPITAL LETTER SIGMA - 0x03a4: 0x0092, # GREEK CAPITAL LETTER TAU - 0x03a5: 0x0093, # GREEK CAPITAL LETTER UPSILON - 0x03a6: 0x0094, # GREEK CAPITAL LETTER PHI - 0x03a7: 0x0095, # GREEK CAPITAL LETTER CHI - 0x03a8: 0x0096, # GREEK CAPITAL LETTER PSI - 0x03a9: 0x0097, # GREEK CAPITAL LETTER OMEGA - 0x03aa: 0x00f4, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - 0x03ab: 0x00f5, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - 0x03ac: 0x00e1, # GREEK SMALL LETTER ALPHA WITH TONOS - 0x03ad: 0x00e2, # GREEK SMALL LETTER EPSILON WITH TONOS - 0x03ae: 0x00e3, # GREEK SMALL LETTER ETA WITH TONOS - 0x03af: 0x00e5, # GREEK SMALL LETTER IOTA WITH TONOS - 0x03b1: 0x0098, # GREEK SMALL LETTER ALPHA - 0x03b2: 0x0099, # GREEK SMALL LETTER BETA - 0x03b3: 0x009a, # GREEK SMALL LETTER GAMMA - 0x03b4: 0x009b, # GREEK SMALL LETTER DELTA - 0x03b5: 0x009c, # GREEK SMALL LETTER EPSILON - 0x03b6: 0x009d, # GREEK SMALL LETTER ZETA - 0x03b7: 0x009e, # GREEK SMALL LETTER ETA - 0x03b8: 0x009f, # GREEK SMALL LETTER THETA - 0x03b9: 0x00a0, # GREEK SMALL LETTER IOTA - 0x03ba: 0x00a1, # GREEK SMALL LETTER KAPPA - 0x03bb: 0x00a2, # GREEK SMALL LETTER LAMDA - 0x03bc: 0x00a3, # GREEK SMALL LETTER MU - 0x03bd: 0x00a4, # GREEK SMALL LETTER NU - 0x03be: 0x00a5, # GREEK SMALL LETTER XI - 0x03bf: 0x00a6, # GREEK SMALL LETTER OMICRON - 0x03c0: 0x00a7, # GREEK SMALL LETTER PI - 0x03c1: 0x00a8, # GREEK SMALL LETTER RHO - 0x03c2: 0x00aa, # GREEK SMALL LETTER FINAL SIGMA - 0x03c3: 0x00a9, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00ab, # GREEK SMALL LETTER TAU - 0x03c5: 0x00ac, # GREEK SMALL LETTER UPSILON - 0x03c6: 0x00ad, # GREEK SMALL LETTER PHI - 0x03c7: 0x00ae, # GREEK SMALL LETTER CHI - 0x03c8: 0x00af, # GREEK SMALL LETTER PSI - 0x03c9: 0x00e0, # GREEK SMALL LETTER OMEGA - 0x03ca: 0x00e4, # GREEK SMALL LETTER IOTA WITH DIALYTIKA - 0x03cb: 0x00e8, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA - 0x03cc: 0x00e6, # GREEK SMALL LETTER OMICRON WITH TONOS - 0x03cd: 0x00e7, # GREEK SMALL LETTER UPSILON WITH TONOS - 0x03ce: 0x00e9, # GREEK SMALL LETTER OMEGA WITH TONOS - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp775.py b/Python314_4_x86_Template/Lib/encodings/cp775.py deleted file mode 100644 index fe06e7bc3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp775.py +++ /dev/null @@ -1,697 +0,0 @@ -""" Python Character Mapping Codec cp775 generated from 'VENDORS/MICSFT/PC/CP775.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp775', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x0101, # LATIN SMALL LETTER A WITH MACRON - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x0123, # LATIN SMALL LETTER G WITH CEDILLA - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x0107, # LATIN SMALL LETTER C WITH ACUTE - 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE - 0x0089: 0x0113, # LATIN SMALL LETTER E WITH MACRON - 0x008a: 0x0156, # LATIN CAPITAL LETTER R WITH CEDILLA - 0x008b: 0x0157, # LATIN SMALL LETTER R WITH CEDILLA - 0x008c: 0x012b, # LATIN SMALL LETTER I WITH MACRON - 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x014d, # LATIN SMALL LETTER O WITH MACRON - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x0122, # LATIN CAPITAL LETTER G WITH CEDILLA - 0x0096: 0x00a2, # CENT SIGN - 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE - 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x00d7, # MULTIPLICATION SIGN - 0x009f: 0x00a4, # CURRENCY SIGN - 0x00a0: 0x0100, # LATIN CAPITAL LETTER A WITH MACRON - 0x00a1: 0x012a, # LATIN CAPITAL LETTER I WITH MACRON - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x00a4: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE - 0x00a5: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE - 0x00a6: 0x201d, # RIGHT DOUBLE QUOTATION MARK - 0x00a7: 0x00a6, # BROKEN BAR - 0x00a8: 0x00a9, # COPYRIGHT SIGN - 0x00a9: 0x00ae, # REGISTERED SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK - 0x00b6: 0x010c, # LATIN CAPITAL LETTER C WITH CARON - 0x00b7: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK - 0x00b8: 0x0116, # LATIN CAPITAL LETTER E WITH DOT ABOVE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x012e, # LATIN CAPITAL LETTER I WITH OGONEK - 0x00be: 0x0160, # LATIN CAPITAL LETTER S WITH CARON - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x0172, # LATIN CAPITAL LETTER U WITH OGONEK - 0x00c7: 0x016a, # LATIN CAPITAL LETTER U WITH MACRON - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON - 0x00d0: 0x0105, # LATIN SMALL LETTER A WITH OGONEK - 0x00d1: 0x010d, # LATIN SMALL LETTER C WITH CARON - 0x00d2: 0x0119, # LATIN SMALL LETTER E WITH OGONEK - 0x00d3: 0x0117, # LATIN SMALL LETTER E WITH DOT ABOVE - 0x00d4: 0x012f, # LATIN SMALL LETTER I WITH OGONEK - 0x00d5: 0x0161, # LATIN SMALL LETTER S WITH CARON - 0x00d6: 0x0173, # LATIN SMALL LETTER U WITH OGONEK - 0x00d7: 0x016b, # LATIN SMALL LETTER U WITH MACRON - 0x00d8: 0x017e, # LATIN SMALL LETTER Z WITH CARON - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) - 0x00e2: 0x014c, # LATIN CAPITAL LETTER O WITH MACRON - 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE - 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE - 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x0144, # LATIN SMALL LETTER N WITH ACUTE - 0x00e8: 0x0136, # LATIN CAPITAL LETTER K WITH CEDILLA - 0x00e9: 0x0137, # LATIN SMALL LETTER K WITH CEDILLA - 0x00ea: 0x013b, # LATIN CAPITAL LETTER L WITH CEDILLA - 0x00eb: 0x013c, # LATIN SMALL LETTER L WITH CEDILLA - 0x00ec: 0x0146, # LATIN SMALL LETTER N WITH CEDILLA - 0x00ed: 0x0112, # LATIN CAPITAL LETTER E WITH MACRON - 0x00ee: 0x0145, # LATIN CAPITAL LETTER N WITH CEDILLA - 0x00ef: 0x2019, # RIGHT SINGLE QUOTATION MARK - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x201c, # LEFT DOUBLE QUOTATION MARK - 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS - 0x00f4: 0x00b6, # PILCROW SIGN - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x201e, # DOUBLE LOW-9 QUOTATION MARK - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x00b9, # SUPERSCRIPT ONE - 0x00fc: 0x00b3, # SUPERSCRIPT THREE - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u0106' # 0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\u0101' # 0x0083 -> LATIN SMALL LETTER A WITH MACRON - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u0123' # 0x0085 -> LATIN SMALL LETTER G WITH CEDILLA - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\u0107' # 0x0087 -> LATIN SMALL LETTER C WITH ACUTE - '\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE - '\u0113' # 0x0089 -> LATIN SMALL LETTER E WITH MACRON - '\u0156' # 0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA - '\u0157' # 0x008b -> LATIN SMALL LETTER R WITH CEDILLA - '\u012b' # 0x008c -> LATIN SMALL LETTER I WITH MACRON - '\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\u014d' # 0x0093 -> LATIN SMALL LETTER O WITH MACRON - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\u0122' # 0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA - '\xa2' # 0x0096 -> CENT SIGN - '\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE - '\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\xd7' # 0x009e -> MULTIPLICATION SIGN - '\xa4' # 0x009f -> CURRENCY SIGN - '\u0100' # 0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON - '\u012a' # 0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\u017b' # 0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\u017c' # 0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u017a' # 0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE - '\u201d' # 0x00a6 -> RIGHT DOUBLE QUOTATION MARK - '\xa6' # 0x00a7 -> BROKEN BAR - '\xa9' # 0x00a8 -> COPYRIGHT SIGN - '\xae' # 0x00a9 -> REGISTERED SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\u0141' # 0x00ad -> LATIN CAPITAL LETTER L WITH STROKE - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u0104' # 0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u010c' # 0x00b6 -> LATIN CAPITAL LETTER C WITH CARON - '\u0118' # 0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK - '\u0116' # 0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u012e' # 0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK - '\u0160' # 0x00be -> LATIN CAPITAL LETTER S WITH CARON - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u0172' # 0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK - '\u016a' # 0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u017d' # 0x00cf -> LATIN CAPITAL LETTER Z WITH CARON - '\u0105' # 0x00d0 -> LATIN SMALL LETTER A WITH OGONEK - '\u010d' # 0x00d1 -> LATIN SMALL LETTER C WITH CARON - '\u0119' # 0x00d2 -> LATIN SMALL LETTER E WITH OGONEK - '\u0117' # 0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE - '\u012f' # 0x00d4 -> LATIN SMALL LETTER I WITH OGONEK - '\u0161' # 0x00d5 -> LATIN SMALL LETTER S WITH CARON - '\u0173' # 0x00d6 -> LATIN SMALL LETTER U WITH OGONEK - '\u016b' # 0x00d7 -> LATIN SMALL LETTER U WITH MACRON - '\u017e' # 0x00d8 -> LATIN SMALL LETTER Z WITH CARON - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) - '\u014c' # 0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON - '\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE - '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE - '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xb5' # 0x00e6 -> MICRO SIGN - '\u0144' # 0x00e7 -> LATIN SMALL LETTER N WITH ACUTE - '\u0136' # 0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA - '\u0137' # 0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA - '\u013b' # 0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA - '\u013c' # 0x00eb -> LATIN SMALL LETTER L WITH CEDILLA - '\u0146' # 0x00ec -> LATIN SMALL LETTER N WITH CEDILLA - '\u0112' # 0x00ed -> LATIN CAPITAL LETTER E WITH MACRON - '\u0145' # 0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA - '\u2019' # 0x00ef -> RIGHT SINGLE QUOTATION MARK - '\xad' # 0x00f0 -> SOFT HYPHEN - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u201c' # 0x00f2 -> LEFT DOUBLE QUOTATION MARK - '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS - '\xb6' # 0x00f4 -> PILCROW SIGN - '\xa7' # 0x00f5 -> SECTION SIGN - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u201e' # 0x00f7 -> DOUBLE LOW-9 QUOTATION MARK - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\xb9' # 0x00fb -> SUPERSCRIPT ONE - '\xb3' # 0x00fc -> SUPERSCRIPT THREE - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a2: 0x0096, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x009f, # CURRENCY SIGN - 0x00a6: 0x00a7, # BROKEN BAR - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a9: 0x00a8, # COPYRIGHT SIGN - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00ae: 0x00a9, # REGISTERED SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b3: 0x00fc, # SUPERSCRIPT THREE - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b6: 0x00f4, # PILCROW SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00b9: 0x00fb, # SUPERSCRIPT ONE - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d7: 0x009e, # MULTIPLICATION SIGN - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0100: 0x00a0, # LATIN CAPITAL LETTER A WITH MACRON - 0x0101: 0x0083, # LATIN SMALL LETTER A WITH MACRON - 0x0104: 0x00b5, # LATIN CAPITAL LETTER A WITH OGONEK - 0x0105: 0x00d0, # LATIN SMALL LETTER A WITH OGONEK - 0x0106: 0x0080, # LATIN CAPITAL LETTER C WITH ACUTE - 0x0107: 0x0087, # LATIN SMALL LETTER C WITH ACUTE - 0x010c: 0x00b6, # LATIN CAPITAL LETTER C WITH CARON - 0x010d: 0x00d1, # LATIN SMALL LETTER C WITH CARON - 0x0112: 0x00ed, # LATIN CAPITAL LETTER E WITH MACRON - 0x0113: 0x0089, # LATIN SMALL LETTER E WITH MACRON - 0x0116: 0x00b8, # LATIN CAPITAL LETTER E WITH DOT ABOVE - 0x0117: 0x00d3, # LATIN SMALL LETTER E WITH DOT ABOVE - 0x0118: 0x00b7, # LATIN CAPITAL LETTER E WITH OGONEK - 0x0119: 0x00d2, # LATIN SMALL LETTER E WITH OGONEK - 0x0122: 0x0095, # LATIN CAPITAL LETTER G WITH CEDILLA - 0x0123: 0x0085, # LATIN SMALL LETTER G WITH CEDILLA - 0x012a: 0x00a1, # LATIN CAPITAL LETTER I WITH MACRON - 0x012b: 0x008c, # LATIN SMALL LETTER I WITH MACRON - 0x012e: 0x00bd, # LATIN CAPITAL LETTER I WITH OGONEK - 0x012f: 0x00d4, # LATIN SMALL LETTER I WITH OGONEK - 0x0136: 0x00e8, # LATIN CAPITAL LETTER K WITH CEDILLA - 0x0137: 0x00e9, # LATIN SMALL LETTER K WITH CEDILLA - 0x013b: 0x00ea, # LATIN CAPITAL LETTER L WITH CEDILLA - 0x013c: 0x00eb, # LATIN SMALL LETTER L WITH CEDILLA - 0x0141: 0x00ad, # LATIN CAPITAL LETTER L WITH STROKE - 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE - 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE - 0x0144: 0x00e7, # LATIN SMALL LETTER N WITH ACUTE - 0x0145: 0x00ee, # LATIN CAPITAL LETTER N WITH CEDILLA - 0x0146: 0x00ec, # LATIN SMALL LETTER N WITH CEDILLA - 0x014c: 0x00e2, # LATIN CAPITAL LETTER O WITH MACRON - 0x014d: 0x0093, # LATIN SMALL LETTER O WITH MACRON - 0x0156: 0x008a, # LATIN CAPITAL LETTER R WITH CEDILLA - 0x0157: 0x008b, # LATIN SMALL LETTER R WITH CEDILLA - 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE - 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE - 0x0160: 0x00be, # LATIN CAPITAL LETTER S WITH CARON - 0x0161: 0x00d5, # LATIN SMALL LETTER S WITH CARON - 0x016a: 0x00c7, # LATIN CAPITAL LETTER U WITH MACRON - 0x016b: 0x00d7, # LATIN SMALL LETTER U WITH MACRON - 0x0172: 0x00c6, # LATIN CAPITAL LETTER U WITH OGONEK - 0x0173: 0x00d6, # LATIN SMALL LETTER U WITH OGONEK - 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE - 0x017a: 0x00a5, # LATIN SMALL LETTER Z WITH ACUTE - 0x017b: 0x00a3, # LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x017c: 0x00a4, # LATIN SMALL LETTER Z WITH DOT ABOVE - 0x017d: 0x00cf, # LATIN CAPITAL LETTER Z WITH CARON - 0x017e: 0x00d8, # LATIN SMALL LETTER Z WITH CARON - 0x2019: 0x00ef, # RIGHT SINGLE QUOTATION MARK - 0x201c: 0x00f2, # LEFT DOUBLE QUOTATION MARK - 0x201d: 0x00a6, # RIGHT DOUBLE QUOTATION MARK - 0x201e: 0x00f7, # DOUBLE LOW-9 QUOTATION MARK - 0x2219: 0x00f9, # BULLET OPERATOR - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp850.py b/Python314_4_x86_Template/Lib/encodings/cp850.py deleted file mode 100644 index f98aef99f..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp850.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP850.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp850', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x00d7, # MULTIPLICATION SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x00ae, # REGISTERED SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00b8: 0x00a9, # COPYRIGHT SIGN - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x00a2, # CENT SIGN - 0x00be: 0x00a5, # YEN SIGN - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE - 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x00a4, # CURRENCY SIGN - 0x00d0: 0x00f0, # LATIN SMALL LETTER ETH - 0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH - 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00d5: 0x0131, # LATIN SMALL LETTER DOTLESS I - 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x00a6, # BROKEN BAR - 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE - 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x00fe, # LATIN SMALL LETTER THORN - 0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN - 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE - 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00ee: 0x00af, # MACRON - 0x00ef: 0x00b4, # ACUTE ACCENT - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2017, # DOUBLE LOW LINE - 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS - 0x00f4: 0x00b6, # PILCROW SIGN - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x00b8, # CEDILLA - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x00a8, # DIAERESIS - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x00b9, # SUPERSCRIPT ONE - 0x00fc: 0x00b3, # SUPERSCRIPT THREE - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\xd7' # 0x009e -> MULTIPLICATION SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\xae' # 0x00a9 -> REGISTERED SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xa9' # 0x00b8 -> COPYRIGHT SIGN - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\xa2' # 0x00bd -> CENT SIGN - '\xa5' # 0x00be -> YEN SIGN - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE - '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0x00cf -> CURRENCY SIGN - '\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH - '\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH - '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE - '\u0131' # 0x00d5 -> LATIN SMALL LETTER DOTLESS I - '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\xa6' # 0x00dd -> BROKEN BAR - '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE - '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xb5' # 0x00e6 -> MICRO SIGN - '\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN - '\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN - '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE - '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE - '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xaf' # 0x00ee -> MACRON - '\xb4' # 0x00ef -> ACUTE ACCENT - '\xad' # 0x00f0 -> SOFT HYPHEN - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2017' # 0x00f2 -> DOUBLE LOW LINE - '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS - '\xb6' # 0x00f4 -> PILCROW SIGN - '\xa7' # 0x00f5 -> SECTION SIGN - '\xf7' # 0x00f6 -> DIVISION SIGN - '\xb8' # 0x00f7 -> CEDILLA - '\xb0' # 0x00f8 -> DEGREE SIGN - '\xa8' # 0x00f9 -> DIAERESIS - '\xb7' # 0x00fa -> MIDDLE DOT - '\xb9' # 0x00fb -> SUPERSCRIPT ONE - '\xb3' # 0x00fc -> SUPERSCRIPT THREE - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x00bd, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x00cf, # CURRENCY SIGN - 0x00a5: 0x00be, # YEN SIGN - 0x00a6: 0x00dd, # BROKEN BAR - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a8: 0x00f9, # DIAERESIS - 0x00a9: 0x00b8, # COPYRIGHT SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00ae: 0x00a9, # REGISTERED SIGN - 0x00af: 0x00ee, # MACRON - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b3: 0x00fc, # SUPERSCRIPT THREE - 0x00b4: 0x00ef, # ACUTE ACCENT - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b6: 0x00f4, # PILCROW SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00b8: 0x00f7, # CEDILLA - 0x00b9: 0x00fb, # SUPERSCRIPT ONE - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d7: 0x009e, # MULTIPLICATION SIGN - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f0: 0x00d0, # LATIN SMALL LETTER ETH - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE - 0x00fe: 0x00e7, # LATIN SMALL LETTER THORN - 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0131: 0x00d5, # LATIN SMALL LETTER DOTLESS I - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x2017: 0x00f2, # DOUBLE LOW LINE - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp852.py b/Python314_4_x86_Template/Lib/encodings/cp852.py deleted file mode 100644 index 34d8a0ea5..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp852.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP852.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp852', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x016f, # LATIN SMALL LETTER U WITH RING ABOVE - 0x0086: 0x0107, # LATIN SMALL LETTER C WITH ACUTE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x0150, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - 0x008b: 0x0151, # LATIN SMALL LETTER O WITH DOUBLE ACUTE - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x0139, # LATIN CAPITAL LETTER L WITH ACUTE - 0x0092: 0x013a, # LATIN SMALL LETTER L WITH ACUTE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x013d, # LATIN CAPITAL LETTER L WITH CARON - 0x0096: 0x013e, # LATIN SMALL LETTER L WITH CARON - 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE - 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x0164, # LATIN CAPITAL LETTER T WITH CARON - 0x009c: 0x0165, # LATIN SMALL LETTER T WITH CARON - 0x009d: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE - 0x009e: 0x00d7, # MULTIPLICATION SIGN - 0x009f: 0x010d, # LATIN SMALL LETTER C WITH CARON - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK - 0x00a5: 0x0105, # LATIN SMALL LETTER A WITH OGONEK - 0x00a6: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON - 0x00a7: 0x017e, # LATIN SMALL LETTER Z WITH CARON - 0x00a8: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK - 0x00a9: 0x0119, # LATIN SMALL LETTER E WITH OGONEK - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE - 0x00ac: 0x010c, # LATIN CAPITAL LETTER C WITH CARON - 0x00ad: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00b7: 0x011a, # LATIN CAPITAL LETTER E WITH CARON - 0x00b8: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x00be: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x0102, # LATIN CAPITAL LETTER A WITH BREVE - 0x00c7: 0x0103, # LATIN SMALL LETTER A WITH BREVE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x00a4, # CURRENCY SIGN - 0x00d0: 0x0111, # LATIN SMALL LETTER D WITH STROKE - 0x00d1: 0x0110, # LATIN CAPITAL LETTER D WITH STROKE - 0x00d2: 0x010e, # LATIN CAPITAL LETTER D WITH CARON - 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00d4: 0x010f, # LATIN SMALL LETTER D WITH CARON - 0x00d5: 0x0147, # LATIN CAPITAL LETTER N WITH CARON - 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00d8: 0x011b, # LATIN SMALL LETTER E WITH CARON - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x0162, # LATIN CAPITAL LETTER T WITH CEDILLA - 0x00de: 0x016e, # LATIN CAPITAL LETTER U WITH RING ABOVE - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE - 0x00e4: 0x0144, # LATIN SMALL LETTER N WITH ACUTE - 0x00e5: 0x0148, # LATIN SMALL LETTER N WITH CARON - 0x00e6: 0x0160, # LATIN CAPITAL LETTER S WITH CARON - 0x00e7: 0x0161, # LATIN SMALL LETTER S WITH CARON - 0x00e8: 0x0154, # LATIN CAPITAL LETTER R WITH ACUTE - 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00ea: 0x0155, # LATIN SMALL LETTER R WITH ACUTE - 0x00eb: 0x0170, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE - 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00ee: 0x0163, # LATIN SMALL LETTER T WITH CEDILLA - 0x00ef: 0x00b4, # ACUTE ACCENT - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x02dd, # DOUBLE ACUTE ACCENT - 0x00f2: 0x02db, # OGONEK - 0x00f3: 0x02c7, # CARON - 0x00f4: 0x02d8, # BREVE - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x00b8, # CEDILLA - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x00a8, # DIAERESIS - 0x00fa: 0x02d9, # DOT ABOVE - 0x00fb: 0x0171, # LATIN SMALL LETTER U WITH DOUBLE ACUTE - 0x00fc: 0x0158, # LATIN CAPITAL LETTER R WITH CARON - 0x00fd: 0x0159, # LATIN SMALL LETTER R WITH CARON - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u016f' # 0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE - '\u0107' # 0x0086 -> LATIN SMALL LETTER C WITH ACUTE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\u0150' # 0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - '\u0151' # 0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u0106' # 0x008f -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0139' # 0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE - '\u013a' # 0x0092 -> LATIN SMALL LETTER L WITH ACUTE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\u013d' # 0x0095 -> LATIN CAPITAL LETTER L WITH CARON - '\u013e' # 0x0096 -> LATIN SMALL LETTER L WITH CARON - '\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE - '\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0164' # 0x009b -> LATIN CAPITAL LETTER T WITH CARON - '\u0165' # 0x009c -> LATIN SMALL LETTER T WITH CARON - '\u0141' # 0x009d -> LATIN CAPITAL LETTER L WITH STROKE - '\xd7' # 0x009e -> MULTIPLICATION SIGN - '\u010d' # 0x009f -> LATIN SMALL LETTER C WITH CARON - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\u0104' # 0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u0105' # 0x00a5 -> LATIN SMALL LETTER A WITH OGONEK - '\u017d' # 0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON - '\u017e' # 0x00a7 -> LATIN SMALL LETTER Z WITH CARON - '\u0118' # 0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK - '\u0119' # 0x00a9 -> LATIN SMALL LETTER E WITH OGONEK - '\xac' # 0x00aa -> NOT SIGN - '\u017a' # 0x00ab -> LATIN SMALL LETTER Z WITH ACUTE - '\u010c' # 0x00ac -> LATIN CAPITAL LETTER C WITH CARON - '\u015f' # 0x00ad -> LATIN SMALL LETTER S WITH CEDILLA - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u011a' # 0x00b7 -> LATIN CAPITAL LETTER E WITH CARON - '\u015e' # 0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u017b' # 0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\u017c' # 0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u0102' # 0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE - '\u0103' # 0x00c7 -> LATIN SMALL LETTER A WITH BREVE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0x00cf -> CURRENCY SIGN - '\u0111' # 0x00d0 -> LATIN SMALL LETTER D WITH STROKE - '\u0110' # 0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE - '\u010e' # 0x00d2 -> LATIN CAPITAL LETTER D WITH CARON - '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u010f' # 0x00d4 -> LATIN SMALL LETTER D WITH CARON - '\u0147' # 0x00d5 -> LATIN CAPITAL LETTER N WITH CARON - '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\u011b' # 0x00d8 -> LATIN SMALL LETTER E WITH CARON - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u0162' # 0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA - '\u016e' # 0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE - '\u0144' # 0x00e4 -> LATIN SMALL LETTER N WITH ACUTE - '\u0148' # 0x00e5 -> LATIN SMALL LETTER N WITH CARON - '\u0160' # 0x00e6 -> LATIN CAPITAL LETTER S WITH CARON - '\u0161' # 0x00e7 -> LATIN SMALL LETTER S WITH CARON - '\u0154' # 0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE - '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE - '\u0155' # 0x00ea -> LATIN SMALL LETTER R WITH ACUTE - '\u0170' # 0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE - '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE - '\u0163' # 0x00ee -> LATIN SMALL LETTER T WITH CEDILLA - '\xb4' # 0x00ef -> ACUTE ACCENT - '\xad' # 0x00f0 -> SOFT HYPHEN - '\u02dd' # 0x00f1 -> DOUBLE ACUTE ACCENT - '\u02db' # 0x00f2 -> OGONEK - '\u02c7' # 0x00f3 -> CARON - '\u02d8' # 0x00f4 -> BREVE - '\xa7' # 0x00f5 -> SECTION SIGN - '\xf7' # 0x00f6 -> DIVISION SIGN - '\xb8' # 0x00f7 -> CEDILLA - '\xb0' # 0x00f8 -> DEGREE SIGN - '\xa8' # 0x00f9 -> DIAERESIS - '\u02d9' # 0x00fa -> DOT ABOVE - '\u0171' # 0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE - '\u0158' # 0x00fc -> LATIN CAPITAL LETTER R WITH CARON - '\u0159' # 0x00fd -> LATIN SMALL LETTER R WITH CARON - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a4: 0x00cf, # CURRENCY SIGN - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a8: 0x00f9, # DIAERESIS - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b4: 0x00ef, # ACUTE ACCENT - 0x00b8: 0x00f7, # CEDILLA - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d7: 0x009e, # MULTIPLICATION SIGN - 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE - 0x0102: 0x00c6, # LATIN CAPITAL LETTER A WITH BREVE - 0x0103: 0x00c7, # LATIN SMALL LETTER A WITH BREVE - 0x0104: 0x00a4, # LATIN CAPITAL LETTER A WITH OGONEK - 0x0105: 0x00a5, # LATIN SMALL LETTER A WITH OGONEK - 0x0106: 0x008f, # LATIN CAPITAL LETTER C WITH ACUTE - 0x0107: 0x0086, # LATIN SMALL LETTER C WITH ACUTE - 0x010c: 0x00ac, # LATIN CAPITAL LETTER C WITH CARON - 0x010d: 0x009f, # LATIN SMALL LETTER C WITH CARON - 0x010e: 0x00d2, # LATIN CAPITAL LETTER D WITH CARON - 0x010f: 0x00d4, # LATIN SMALL LETTER D WITH CARON - 0x0110: 0x00d1, # LATIN CAPITAL LETTER D WITH STROKE - 0x0111: 0x00d0, # LATIN SMALL LETTER D WITH STROKE - 0x0118: 0x00a8, # LATIN CAPITAL LETTER E WITH OGONEK - 0x0119: 0x00a9, # LATIN SMALL LETTER E WITH OGONEK - 0x011a: 0x00b7, # LATIN CAPITAL LETTER E WITH CARON - 0x011b: 0x00d8, # LATIN SMALL LETTER E WITH CARON - 0x0139: 0x0091, # LATIN CAPITAL LETTER L WITH ACUTE - 0x013a: 0x0092, # LATIN SMALL LETTER L WITH ACUTE - 0x013d: 0x0095, # LATIN CAPITAL LETTER L WITH CARON - 0x013e: 0x0096, # LATIN SMALL LETTER L WITH CARON - 0x0141: 0x009d, # LATIN CAPITAL LETTER L WITH STROKE - 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE - 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE - 0x0144: 0x00e4, # LATIN SMALL LETTER N WITH ACUTE - 0x0147: 0x00d5, # LATIN CAPITAL LETTER N WITH CARON - 0x0148: 0x00e5, # LATIN SMALL LETTER N WITH CARON - 0x0150: 0x008a, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - 0x0151: 0x008b, # LATIN SMALL LETTER O WITH DOUBLE ACUTE - 0x0154: 0x00e8, # LATIN CAPITAL LETTER R WITH ACUTE - 0x0155: 0x00ea, # LATIN SMALL LETTER R WITH ACUTE - 0x0158: 0x00fc, # LATIN CAPITAL LETTER R WITH CARON - 0x0159: 0x00fd, # LATIN SMALL LETTER R WITH CARON - 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE - 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE - 0x015e: 0x00b8, # LATIN CAPITAL LETTER S WITH CEDILLA - 0x015f: 0x00ad, # LATIN SMALL LETTER S WITH CEDILLA - 0x0160: 0x00e6, # LATIN CAPITAL LETTER S WITH CARON - 0x0161: 0x00e7, # LATIN SMALL LETTER S WITH CARON - 0x0162: 0x00dd, # LATIN CAPITAL LETTER T WITH CEDILLA - 0x0163: 0x00ee, # LATIN SMALL LETTER T WITH CEDILLA - 0x0164: 0x009b, # LATIN CAPITAL LETTER T WITH CARON - 0x0165: 0x009c, # LATIN SMALL LETTER T WITH CARON - 0x016e: 0x00de, # LATIN CAPITAL LETTER U WITH RING ABOVE - 0x016f: 0x0085, # LATIN SMALL LETTER U WITH RING ABOVE - 0x0170: 0x00eb, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - 0x0171: 0x00fb, # LATIN SMALL LETTER U WITH DOUBLE ACUTE - 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE - 0x017a: 0x00ab, # LATIN SMALL LETTER Z WITH ACUTE - 0x017b: 0x00bd, # LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x017c: 0x00be, # LATIN SMALL LETTER Z WITH DOT ABOVE - 0x017d: 0x00a6, # LATIN CAPITAL LETTER Z WITH CARON - 0x017e: 0x00a7, # LATIN SMALL LETTER Z WITH CARON - 0x02c7: 0x00f3, # CARON - 0x02d8: 0x00f4, # BREVE - 0x02d9: 0x00fa, # DOT ABOVE - 0x02db: 0x00f2, # OGONEK - 0x02dd: 0x00f1, # DOUBLE ACUTE ACCENT - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp855.py b/Python314_4_x86_Template/Lib/encodings/cp855.py deleted file mode 100644 index 4fe921069..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp855.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP855.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp855', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x0452, # CYRILLIC SMALL LETTER DJE - 0x0081: 0x0402, # CYRILLIC CAPITAL LETTER DJE - 0x0082: 0x0453, # CYRILLIC SMALL LETTER GJE - 0x0083: 0x0403, # CYRILLIC CAPITAL LETTER GJE - 0x0084: 0x0451, # CYRILLIC SMALL LETTER IO - 0x0085: 0x0401, # CYRILLIC CAPITAL LETTER IO - 0x0086: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x0087: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x0088: 0x0455, # CYRILLIC SMALL LETTER DZE - 0x0089: 0x0405, # CYRILLIC CAPITAL LETTER DZE - 0x008a: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - 0x008b: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - 0x008c: 0x0457, # CYRILLIC SMALL LETTER YI - 0x008d: 0x0407, # CYRILLIC CAPITAL LETTER YI - 0x008e: 0x0458, # CYRILLIC SMALL LETTER JE - 0x008f: 0x0408, # CYRILLIC CAPITAL LETTER JE - 0x0090: 0x0459, # CYRILLIC SMALL LETTER LJE - 0x0091: 0x0409, # CYRILLIC CAPITAL LETTER LJE - 0x0092: 0x045a, # CYRILLIC SMALL LETTER NJE - 0x0093: 0x040a, # CYRILLIC CAPITAL LETTER NJE - 0x0094: 0x045b, # CYRILLIC SMALL LETTER TSHE - 0x0095: 0x040b, # CYRILLIC CAPITAL LETTER TSHE - 0x0096: 0x045c, # CYRILLIC SMALL LETTER KJE - 0x0097: 0x040c, # CYRILLIC CAPITAL LETTER KJE - 0x0098: 0x045e, # CYRILLIC SMALL LETTER SHORT U - 0x0099: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U - 0x009a: 0x045f, # CYRILLIC SMALL LETTER DZHE - 0x009b: 0x040f, # CYRILLIC CAPITAL LETTER DZHE - 0x009c: 0x044e, # CYRILLIC SMALL LETTER YU - 0x009d: 0x042e, # CYRILLIC CAPITAL LETTER YU - 0x009e: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN - 0x009f: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A - 0x00a1: 0x0410, # CYRILLIC CAPITAL LETTER A - 0x00a2: 0x0431, # CYRILLIC SMALL LETTER BE - 0x00a3: 0x0411, # CYRILLIC CAPITAL LETTER BE - 0x00a4: 0x0446, # CYRILLIC SMALL LETTER TSE - 0x00a5: 0x0426, # CYRILLIC CAPITAL LETTER TSE - 0x00a6: 0x0434, # CYRILLIC SMALL LETTER DE - 0x00a7: 0x0414, # CYRILLIC CAPITAL LETTER DE - 0x00a8: 0x0435, # CYRILLIC SMALL LETTER IE - 0x00a9: 0x0415, # CYRILLIC CAPITAL LETTER IE - 0x00aa: 0x0444, # CYRILLIC SMALL LETTER EF - 0x00ab: 0x0424, # CYRILLIC CAPITAL LETTER EF - 0x00ac: 0x0433, # CYRILLIC SMALL LETTER GHE - 0x00ad: 0x0413, # CYRILLIC CAPITAL LETTER GHE - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x0445, # CYRILLIC SMALL LETTER HA - 0x00b6: 0x0425, # CYRILLIC CAPITAL LETTER HA - 0x00b7: 0x0438, # CYRILLIC SMALL LETTER I - 0x00b8: 0x0418, # CYRILLIC CAPITAL LETTER I - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x0439, # CYRILLIC SMALL LETTER SHORT I - 0x00be: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x043a, # CYRILLIC SMALL LETTER KA - 0x00c7: 0x041a, # CYRILLIC CAPITAL LETTER KA - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x00a4, # CURRENCY SIGN - 0x00d0: 0x043b, # CYRILLIC SMALL LETTER EL - 0x00d1: 0x041b, # CYRILLIC CAPITAL LETTER EL - 0x00d2: 0x043c, # CYRILLIC SMALL LETTER EM - 0x00d3: 0x041c, # CYRILLIC CAPITAL LETTER EM - 0x00d4: 0x043d, # CYRILLIC SMALL LETTER EN - 0x00d5: 0x041d, # CYRILLIC CAPITAL LETTER EN - 0x00d6: 0x043e, # CYRILLIC SMALL LETTER O - 0x00d7: 0x041e, # CYRILLIC CAPITAL LETTER O - 0x00d8: 0x043f, # CYRILLIC SMALL LETTER PE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x041f, # CYRILLIC CAPITAL LETTER PE - 0x00de: 0x044f, # CYRILLIC SMALL LETTER YA - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x042f, # CYRILLIC CAPITAL LETTER YA - 0x00e1: 0x0440, # CYRILLIC SMALL LETTER ER - 0x00e2: 0x0420, # CYRILLIC CAPITAL LETTER ER - 0x00e3: 0x0441, # CYRILLIC SMALL LETTER ES - 0x00e4: 0x0421, # CYRILLIC CAPITAL LETTER ES - 0x00e5: 0x0442, # CYRILLIC SMALL LETTER TE - 0x00e6: 0x0422, # CYRILLIC CAPITAL LETTER TE - 0x00e7: 0x0443, # CYRILLIC SMALL LETTER U - 0x00e8: 0x0423, # CYRILLIC CAPITAL LETTER U - 0x00e9: 0x0436, # CYRILLIC SMALL LETTER ZHE - 0x00ea: 0x0416, # CYRILLIC CAPITAL LETTER ZHE - 0x00eb: 0x0432, # CYRILLIC SMALL LETTER VE - 0x00ec: 0x0412, # CYRILLIC CAPITAL LETTER VE - 0x00ed: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN - 0x00ee: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x00ef: 0x2116, # NUMERO SIGN - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x044b, # CYRILLIC SMALL LETTER YERU - 0x00f2: 0x042b, # CYRILLIC CAPITAL LETTER YERU - 0x00f3: 0x0437, # CYRILLIC SMALL LETTER ZE - 0x00f4: 0x0417, # CYRILLIC CAPITAL LETTER ZE - 0x00f5: 0x0448, # CYRILLIC SMALL LETTER SHA - 0x00f6: 0x0428, # CYRILLIC CAPITAL LETTER SHA - 0x00f7: 0x044d, # CYRILLIC SMALL LETTER E - 0x00f8: 0x042d, # CYRILLIC CAPITAL LETTER E - 0x00f9: 0x0449, # CYRILLIC SMALL LETTER SHCHA - 0x00fa: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA - 0x00fb: 0x0447, # CYRILLIC SMALL LETTER CHE - 0x00fc: 0x0427, # CYRILLIC CAPITAL LETTER CHE - 0x00fd: 0x00a7, # SECTION SIGN - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u0452' # 0x0080 -> CYRILLIC SMALL LETTER DJE - '\u0402' # 0x0081 -> CYRILLIC CAPITAL LETTER DJE - '\u0453' # 0x0082 -> CYRILLIC SMALL LETTER GJE - '\u0403' # 0x0083 -> CYRILLIC CAPITAL LETTER GJE - '\u0451' # 0x0084 -> CYRILLIC SMALL LETTER IO - '\u0401' # 0x0085 -> CYRILLIC CAPITAL LETTER IO - '\u0454' # 0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u0404' # 0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u0455' # 0x0088 -> CYRILLIC SMALL LETTER DZE - '\u0405' # 0x0089 -> CYRILLIC CAPITAL LETTER DZE - '\u0456' # 0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0406' # 0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0457' # 0x008c -> CYRILLIC SMALL LETTER YI - '\u0407' # 0x008d -> CYRILLIC CAPITAL LETTER YI - '\u0458' # 0x008e -> CYRILLIC SMALL LETTER JE - '\u0408' # 0x008f -> CYRILLIC CAPITAL LETTER JE - '\u0459' # 0x0090 -> CYRILLIC SMALL LETTER LJE - '\u0409' # 0x0091 -> CYRILLIC CAPITAL LETTER LJE - '\u045a' # 0x0092 -> CYRILLIC SMALL LETTER NJE - '\u040a' # 0x0093 -> CYRILLIC CAPITAL LETTER NJE - '\u045b' # 0x0094 -> CYRILLIC SMALL LETTER TSHE - '\u040b' # 0x0095 -> CYRILLIC CAPITAL LETTER TSHE - '\u045c' # 0x0096 -> CYRILLIC SMALL LETTER KJE - '\u040c' # 0x0097 -> CYRILLIC CAPITAL LETTER KJE - '\u045e' # 0x0098 -> CYRILLIC SMALL LETTER SHORT U - '\u040e' # 0x0099 -> CYRILLIC CAPITAL LETTER SHORT U - '\u045f' # 0x009a -> CYRILLIC SMALL LETTER DZHE - '\u040f' # 0x009b -> CYRILLIC CAPITAL LETTER DZHE - '\u044e' # 0x009c -> CYRILLIC SMALL LETTER YU - '\u042e' # 0x009d -> CYRILLIC CAPITAL LETTER YU - '\u044a' # 0x009e -> CYRILLIC SMALL LETTER HARD SIGN - '\u042a' # 0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A - '\u0410' # 0x00a1 -> CYRILLIC CAPITAL LETTER A - '\u0431' # 0x00a2 -> CYRILLIC SMALL LETTER BE - '\u0411' # 0x00a3 -> CYRILLIC CAPITAL LETTER BE - '\u0446' # 0x00a4 -> CYRILLIC SMALL LETTER TSE - '\u0426' # 0x00a5 -> CYRILLIC CAPITAL LETTER TSE - '\u0434' # 0x00a6 -> CYRILLIC SMALL LETTER DE - '\u0414' # 0x00a7 -> CYRILLIC CAPITAL LETTER DE - '\u0435' # 0x00a8 -> CYRILLIC SMALL LETTER IE - '\u0415' # 0x00a9 -> CYRILLIC CAPITAL LETTER IE - '\u0444' # 0x00aa -> CYRILLIC SMALL LETTER EF - '\u0424' # 0x00ab -> CYRILLIC CAPITAL LETTER EF - '\u0433' # 0x00ac -> CYRILLIC SMALL LETTER GHE - '\u0413' # 0x00ad -> CYRILLIC CAPITAL LETTER GHE - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u0445' # 0x00b5 -> CYRILLIC SMALL LETTER HA - '\u0425' # 0x00b6 -> CYRILLIC CAPITAL LETTER HA - '\u0438' # 0x00b7 -> CYRILLIC SMALL LETTER I - '\u0418' # 0x00b8 -> CYRILLIC CAPITAL LETTER I - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u0439' # 0x00bd -> CYRILLIC SMALL LETTER SHORT I - '\u0419' # 0x00be -> CYRILLIC CAPITAL LETTER SHORT I - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u043a' # 0x00c6 -> CYRILLIC SMALL LETTER KA - '\u041a' # 0x00c7 -> CYRILLIC CAPITAL LETTER KA - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0x00cf -> CURRENCY SIGN - '\u043b' # 0x00d0 -> CYRILLIC SMALL LETTER EL - '\u041b' # 0x00d1 -> CYRILLIC CAPITAL LETTER EL - '\u043c' # 0x00d2 -> CYRILLIC SMALL LETTER EM - '\u041c' # 0x00d3 -> CYRILLIC CAPITAL LETTER EM - '\u043d' # 0x00d4 -> CYRILLIC SMALL LETTER EN - '\u041d' # 0x00d5 -> CYRILLIC CAPITAL LETTER EN - '\u043e' # 0x00d6 -> CYRILLIC SMALL LETTER O - '\u041e' # 0x00d7 -> CYRILLIC CAPITAL LETTER O - '\u043f' # 0x00d8 -> CYRILLIC SMALL LETTER PE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u041f' # 0x00dd -> CYRILLIC CAPITAL LETTER PE - '\u044f' # 0x00de -> CYRILLIC SMALL LETTER YA - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u042f' # 0x00e0 -> CYRILLIC CAPITAL LETTER YA - '\u0440' # 0x00e1 -> CYRILLIC SMALL LETTER ER - '\u0420' # 0x00e2 -> CYRILLIC CAPITAL LETTER ER - '\u0441' # 0x00e3 -> CYRILLIC SMALL LETTER ES - '\u0421' # 0x00e4 -> CYRILLIC CAPITAL LETTER ES - '\u0442' # 0x00e5 -> CYRILLIC SMALL LETTER TE - '\u0422' # 0x00e6 -> CYRILLIC CAPITAL LETTER TE - '\u0443' # 0x00e7 -> CYRILLIC SMALL LETTER U - '\u0423' # 0x00e8 -> CYRILLIC CAPITAL LETTER U - '\u0436' # 0x00e9 -> CYRILLIC SMALL LETTER ZHE - '\u0416' # 0x00ea -> CYRILLIC CAPITAL LETTER ZHE - '\u0432' # 0x00eb -> CYRILLIC SMALL LETTER VE - '\u0412' # 0x00ec -> CYRILLIC CAPITAL LETTER VE - '\u044c' # 0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN - '\u042c' # 0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u2116' # 0x00ef -> NUMERO SIGN - '\xad' # 0x00f0 -> SOFT HYPHEN - '\u044b' # 0x00f1 -> CYRILLIC SMALL LETTER YERU - '\u042b' # 0x00f2 -> CYRILLIC CAPITAL LETTER YERU - '\u0437' # 0x00f3 -> CYRILLIC SMALL LETTER ZE - '\u0417' # 0x00f4 -> CYRILLIC CAPITAL LETTER ZE - '\u0448' # 0x00f5 -> CYRILLIC SMALL LETTER SHA - '\u0428' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHA - '\u044d' # 0x00f7 -> CYRILLIC SMALL LETTER E - '\u042d' # 0x00f8 -> CYRILLIC CAPITAL LETTER E - '\u0449' # 0x00f9 -> CYRILLIC SMALL LETTER SHCHA - '\u0429' # 0x00fa -> CYRILLIC CAPITAL LETTER SHCHA - '\u0447' # 0x00fb -> CYRILLIC SMALL LETTER CHE - '\u0427' # 0x00fc -> CYRILLIC CAPITAL LETTER CHE - '\xa7' # 0x00fd -> SECTION SIGN - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a4: 0x00cf, # CURRENCY SIGN - 0x00a7: 0x00fd, # SECTION SIGN - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x0401: 0x0085, # CYRILLIC CAPITAL LETTER IO - 0x0402: 0x0081, # CYRILLIC CAPITAL LETTER DJE - 0x0403: 0x0083, # CYRILLIC CAPITAL LETTER GJE - 0x0404: 0x0087, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x0405: 0x0089, # CYRILLIC CAPITAL LETTER DZE - 0x0406: 0x008b, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0407: 0x008d, # CYRILLIC CAPITAL LETTER YI - 0x0408: 0x008f, # CYRILLIC CAPITAL LETTER JE - 0x0409: 0x0091, # CYRILLIC CAPITAL LETTER LJE - 0x040a: 0x0093, # CYRILLIC CAPITAL LETTER NJE - 0x040b: 0x0095, # CYRILLIC CAPITAL LETTER TSHE - 0x040c: 0x0097, # CYRILLIC CAPITAL LETTER KJE - 0x040e: 0x0099, # CYRILLIC CAPITAL LETTER SHORT U - 0x040f: 0x009b, # CYRILLIC CAPITAL LETTER DZHE - 0x0410: 0x00a1, # CYRILLIC CAPITAL LETTER A - 0x0411: 0x00a3, # CYRILLIC CAPITAL LETTER BE - 0x0412: 0x00ec, # CYRILLIC CAPITAL LETTER VE - 0x0413: 0x00ad, # CYRILLIC CAPITAL LETTER GHE - 0x0414: 0x00a7, # CYRILLIC CAPITAL LETTER DE - 0x0415: 0x00a9, # CYRILLIC CAPITAL LETTER IE - 0x0416: 0x00ea, # CYRILLIC CAPITAL LETTER ZHE - 0x0417: 0x00f4, # CYRILLIC CAPITAL LETTER ZE - 0x0418: 0x00b8, # CYRILLIC CAPITAL LETTER I - 0x0419: 0x00be, # CYRILLIC CAPITAL LETTER SHORT I - 0x041a: 0x00c7, # CYRILLIC CAPITAL LETTER KA - 0x041b: 0x00d1, # CYRILLIC CAPITAL LETTER EL - 0x041c: 0x00d3, # CYRILLIC CAPITAL LETTER EM - 0x041d: 0x00d5, # CYRILLIC CAPITAL LETTER EN - 0x041e: 0x00d7, # CYRILLIC CAPITAL LETTER O - 0x041f: 0x00dd, # CYRILLIC CAPITAL LETTER PE - 0x0420: 0x00e2, # CYRILLIC CAPITAL LETTER ER - 0x0421: 0x00e4, # CYRILLIC CAPITAL LETTER ES - 0x0422: 0x00e6, # CYRILLIC CAPITAL LETTER TE - 0x0423: 0x00e8, # CYRILLIC CAPITAL LETTER U - 0x0424: 0x00ab, # CYRILLIC CAPITAL LETTER EF - 0x0425: 0x00b6, # CYRILLIC CAPITAL LETTER HA - 0x0426: 0x00a5, # CYRILLIC CAPITAL LETTER TSE - 0x0427: 0x00fc, # CYRILLIC CAPITAL LETTER CHE - 0x0428: 0x00f6, # CYRILLIC CAPITAL LETTER SHA - 0x0429: 0x00fa, # CYRILLIC CAPITAL LETTER SHCHA - 0x042a: 0x009f, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x042b: 0x00f2, # CYRILLIC CAPITAL LETTER YERU - 0x042c: 0x00ee, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x042d: 0x00f8, # CYRILLIC CAPITAL LETTER E - 0x042e: 0x009d, # CYRILLIC CAPITAL LETTER YU - 0x042f: 0x00e0, # CYRILLIC CAPITAL LETTER YA - 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A - 0x0431: 0x00a2, # CYRILLIC SMALL LETTER BE - 0x0432: 0x00eb, # CYRILLIC SMALL LETTER VE - 0x0433: 0x00ac, # CYRILLIC SMALL LETTER GHE - 0x0434: 0x00a6, # CYRILLIC SMALL LETTER DE - 0x0435: 0x00a8, # CYRILLIC SMALL LETTER IE - 0x0436: 0x00e9, # CYRILLIC SMALL LETTER ZHE - 0x0437: 0x00f3, # CYRILLIC SMALL LETTER ZE - 0x0438: 0x00b7, # CYRILLIC SMALL LETTER I - 0x0439: 0x00bd, # CYRILLIC SMALL LETTER SHORT I - 0x043a: 0x00c6, # CYRILLIC SMALL LETTER KA - 0x043b: 0x00d0, # CYRILLIC SMALL LETTER EL - 0x043c: 0x00d2, # CYRILLIC SMALL LETTER EM - 0x043d: 0x00d4, # CYRILLIC SMALL LETTER EN - 0x043e: 0x00d6, # CYRILLIC SMALL LETTER O - 0x043f: 0x00d8, # CYRILLIC SMALL LETTER PE - 0x0440: 0x00e1, # CYRILLIC SMALL LETTER ER - 0x0441: 0x00e3, # CYRILLIC SMALL LETTER ES - 0x0442: 0x00e5, # CYRILLIC SMALL LETTER TE - 0x0443: 0x00e7, # CYRILLIC SMALL LETTER U - 0x0444: 0x00aa, # CYRILLIC SMALL LETTER EF - 0x0445: 0x00b5, # CYRILLIC SMALL LETTER HA - 0x0446: 0x00a4, # CYRILLIC SMALL LETTER TSE - 0x0447: 0x00fb, # CYRILLIC SMALL LETTER CHE - 0x0448: 0x00f5, # CYRILLIC SMALL LETTER SHA - 0x0449: 0x00f9, # CYRILLIC SMALL LETTER SHCHA - 0x044a: 0x009e, # CYRILLIC SMALL LETTER HARD SIGN - 0x044b: 0x00f1, # CYRILLIC SMALL LETTER YERU - 0x044c: 0x00ed, # CYRILLIC SMALL LETTER SOFT SIGN - 0x044d: 0x00f7, # CYRILLIC SMALL LETTER E - 0x044e: 0x009c, # CYRILLIC SMALL LETTER YU - 0x044f: 0x00de, # CYRILLIC SMALL LETTER YA - 0x0451: 0x0084, # CYRILLIC SMALL LETTER IO - 0x0452: 0x0080, # CYRILLIC SMALL LETTER DJE - 0x0453: 0x0082, # CYRILLIC SMALL LETTER GJE - 0x0454: 0x0086, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x0455: 0x0088, # CYRILLIC SMALL LETTER DZE - 0x0456: 0x008a, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0457: 0x008c, # CYRILLIC SMALL LETTER YI - 0x0458: 0x008e, # CYRILLIC SMALL LETTER JE - 0x0459: 0x0090, # CYRILLIC SMALL LETTER LJE - 0x045a: 0x0092, # CYRILLIC SMALL LETTER NJE - 0x045b: 0x0094, # CYRILLIC SMALL LETTER TSHE - 0x045c: 0x0096, # CYRILLIC SMALL LETTER KJE - 0x045e: 0x0098, # CYRILLIC SMALL LETTER SHORT U - 0x045f: 0x009a, # CYRILLIC SMALL LETTER DZHE - 0x2116: 0x00ef, # NUMERO SIGN - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp856.py b/Python314_4_x86_Template/Lib/encodings/cp856.py deleted file mode 100644 index cacbfb2f8..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp856.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp856 generated from 'MAPPINGS/VENDORS/MISC/CP856.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp856', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u05d0' # 0x80 -> HEBREW LETTER ALEF - '\u05d1' # 0x81 -> HEBREW LETTER BET - '\u05d2' # 0x82 -> HEBREW LETTER GIMEL - '\u05d3' # 0x83 -> HEBREW LETTER DALET - '\u05d4' # 0x84 -> HEBREW LETTER HE - '\u05d5' # 0x85 -> HEBREW LETTER VAV - '\u05d6' # 0x86 -> HEBREW LETTER ZAYIN - '\u05d7' # 0x87 -> HEBREW LETTER HET - '\u05d8' # 0x88 -> HEBREW LETTER TET - '\u05d9' # 0x89 -> HEBREW LETTER YOD - '\u05da' # 0x8A -> HEBREW LETTER FINAL KAF - '\u05db' # 0x8B -> HEBREW LETTER KAF - '\u05dc' # 0x8C -> HEBREW LETTER LAMED - '\u05dd' # 0x8D -> HEBREW LETTER FINAL MEM - '\u05de' # 0x8E -> HEBREW LETTER MEM - '\u05df' # 0x8F -> HEBREW LETTER FINAL NUN - '\u05e0' # 0x90 -> HEBREW LETTER NUN - '\u05e1' # 0x91 -> HEBREW LETTER SAMEKH - '\u05e2' # 0x92 -> HEBREW LETTER AYIN - '\u05e3' # 0x93 -> HEBREW LETTER FINAL PE - '\u05e4' # 0x94 -> HEBREW LETTER PE - '\u05e5' # 0x95 -> HEBREW LETTER FINAL TSADI - '\u05e6' # 0x96 -> HEBREW LETTER TSADI - '\u05e7' # 0x97 -> HEBREW LETTER QOF - '\u05e8' # 0x98 -> HEBREW LETTER RESH - '\u05e9' # 0x99 -> HEBREW LETTER SHIN - '\u05ea' # 0x9A -> HEBREW LETTER TAV - '\ufffe' # 0x9B -> UNDEFINED - '\xa3' # 0x9C -> POUND SIGN - '\ufffe' # 0x9D -> UNDEFINED - '\xd7' # 0x9E -> MULTIPLICATION SIGN - '\ufffe' # 0x9F -> UNDEFINED - '\ufffe' # 0xA0 -> UNDEFINED - '\ufffe' # 0xA1 -> UNDEFINED - '\ufffe' # 0xA2 -> UNDEFINED - '\ufffe' # 0xA3 -> UNDEFINED - '\ufffe' # 0xA4 -> UNDEFINED - '\ufffe' # 0xA5 -> UNDEFINED - '\ufffe' # 0xA6 -> UNDEFINED - '\ufffe' # 0xA7 -> UNDEFINED - '\ufffe' # 0xA8 -> UNDEFINED - '\xae' # 0xA9 -> REGISTERED SIGN - '\xac' # 0xAA -> NOT SIGN - '\xbd' # 0xAB -> VULGAR FRACTION ONE HALF - '\xbc' # 0xAC -> VULGAR FRACTION ONE QUARTER - '\ufffe' # 0xAD -> UNDEFINED - '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0xB0 -> LIGHT SHADE - '\u2592' # 0xB1 -> MEDIUM SHADE - '\u2593' # 0xB2 -> DARK SHADE - '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\ufffe' # 0xB5 -> UNDEFINED - '\ufffe' # 0xB6 -> UNDEFINED - '\ufffe' # 0xB7 -> UNDEFINED - '\xa9' # 0xB8 -> COPYRIGHT SIGN - '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT - '\xa2' # 0xBD -> CENT SIGN - '\xa5' # 0xBE -> YEN SIGN - '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\ufffe' # 0xC6 -> UNDEFINED - '\ufffe' # 0xC7 -> UNDEFINED - '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0xCF -> CURRENCY SIGN - '\ufffe' # 0xD0 -> UNDEFINED - '\ufffe' # 0xD1 -> UNDEFINED - '\ufffe' # 0xD2 -> UNDEFINED - '\ufffe' # 0xD3 -> UNDEFINEDS - '\ufffe' # 0xD4 -> UNDEFINED - '\ufffe' # 0xD5 -> UNDEFINED - '\ufffe' # 0xD6 -> UNDEFINEDE - '\ufffe' # 0xD7 -> UNDEFINED - '\ufffe' # 0xD8 -> UNDEFINED - '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0xDB -> FULL BLOCK - '\u2584' # 0xDC -> LOWER HALF BLOCK - '\xa6' # 0xDD -> BROKEN BAR - '\ufffe' # 0xDE -> UNDEFINED - '\u2580' # 0xDF -> UPPER HALF BLOCK - '\ufffe' # 0xE0 -> UNDEFINED - '\ufffe' # 0xE1 -> UNDEFINED - '\ufffe' # 0xE2 -> UNDEFINED - '\ufffe' # 0xE3 -> UNDEFINED - '\ufffe' # 0xE4 -> UNDEFINED - '\ufffe' # 0xE5 -> UNDEFINED - '\xb5' # 0xE6 -> MICRO SIGN - '\ufffe' # 0xE7 -> UNDEFINED - '\ufffe' # 0xE8 -> UNDEFINED - '\ufffe' # 0xE9 -> UNDEFINED - '\ufffe' # 0xEA -> UNDEFINED - '\ufffe' # 0xEB -> UNDEFINED - '\ufffe' # 0xEC -> UNDEFINED - '\ufffe' # 0xED -> UNDEFINED - '\xaf' # 0xEE -> MACRON - '\xb4' # 0xEF -> ACUTE ACCENT - '\xad' # 0xF0 -> SOFT HYPHEN - '\xb1' # 0xF1 -> PLUS-MINUS SIGN - '\u2017' # 0xF2 -> DOUBLE LOW LINE - '\xbe' # 0xF3 -> VULGAR FRACTION THREE QUARTERS - '\xb6' # 0xF4 -> PILCROW SIGN - '\xa7' # 0xF5 -> SECTION SIGN - '\xf7' # 0xF6 -> DIVISION SIGN - '\xb8' # 0xF7 -> CEDILLA - '\xb0' # 0xF8 -> DEGREE SIGN - '\xa8' # 0xF9 -> DIAERESIS - '\xb7' # 0xFA -> MIDDLE DOT - '\xb9' # 0xFB -> SUPERSCRIPT ONE - '\xb3' # 0xFC -> SUPERSCRIPT THREE - '\xb2' # 0xFD -> SUPERSCRIPT TWO - '\u25a0' # 0xFE -> BLACK SQUARE - '\xa0' # 0xFF -> NO-BREAK SPACE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp857.py b/Python314_4_x86_Template/Lib/encodings/cp857.py deleted file mode 100644 index 741b059b9..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp857.py +++ /dev/null @@ -1,694 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP857.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp857', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x0131, # LATIN SMALL LETTER DOTLESS I - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x0130, # LATIN CAPITAL LETTER I WITH DOT ABOVE - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA - 0x009f: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x011e, # LATIN CAPITAL LETTER G WITH BREVE - 0x00a7: 0x011f, # LATIN SMALL LETTER G WITH BREVE - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x00ae, # REGISTERED SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00b8: 0x00a9, # COPYRIGHT SIGN - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x00a2, # CENT SIGN - 0x00be: 0x00a5, # YEN SIGN - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE - 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x00a4, # CURRENCY SIGN - 0x00d0: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00d1: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00d5: None, # UNDEFINED - 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x00a6, # BROKEN BAR - 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE - 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: None, # UNDEFINED - 0x00e8: 0x00d7, # MULTIPLICATION SIGN - 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00ed: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x00ee: 0x00af, # MACRON - 0x00ef: 0x00b4, # ACUTE ACCENT - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: None, # UNDEFINED - 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS - 0x00f4: 0x00b6, # PILCROW SIGN - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x00b8, # CEDILLA - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x00a8, # DIAERESIS - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x00b9, # SUPERSCRIPT ONE - 0x00fc: 0x00b3, # SUPERSCRIPT THREE - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u0131' # 0x008d -> LATIN SMALL LETTER DOTLESS I - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\u0130' # 0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\u015e' # 0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA - '\u015f' # 0x009f -> LATIN SMALL LETTER S WITH CEDILLA - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\u011e' # 0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE - '\u011f' # 0x00a7 -> LATIN SMALL LETTER G WITH BREVE - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\xae' # 0x00a9 -> REGISTERED SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xa9' # 0x00b8 -> COPYRIGHT SIGN - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\xa2' # 0x00bd -> CENT SIGN - '\xa5' # 0x00be -> YEN SIGN - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE - '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0x00cf -> CURRENCY SIGN - '\xba' # 0x00d0 -> MASCULINE ORDINAL INDICATOR - '\xaa' # 0x00d1 -> FEMININE ORDINAL INDICATOR - '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE - '\ufffe' # 0x00d5 -> UNDEFINED - '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\xa6' # 0x00dd -> BROKEN BAR - '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE - '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xb5' # 0x00e6 -> MICRO SIGN - '\ufffe' # 0x00e7 -> UNDEFINED - '\xd7' # 0x00e8 -> MULTIPLICATION SIGN - '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE - '\xec' # 0x00ec -> LATIN SMALL LETTER I WITH GRAVE - '\xff' # 0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xaf' # 0x00ee -> MACRON - '\xb4' # 0x00ef -> ACUTE ACCENT - '\xad' # 0x00f0 -> SOFT HYPHEN - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\ufffe' # 0x00f2 -> UNDEFINED - '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS - '\xb6' # 0x00f4 -> PILCROW SIGN - '\xa7' # 0x00f5 -> SECTION SIGN - '\xf7' # 0x00f6 -> DIVISION SIGN - '\xb8' # 0x00f7 -> CEDILLA - '\xb0' # 0x00f8 -> DEGREE SIGN - '\xa8' # 0x00f9 -> DIAERESIS - '\xb7' # 0x00fa -> MIDDLE DOT - '\xb9' # 0x00fb -> SUPERSCRIPT ONE - '\xb3' # 0x00fc -> SUPERSCRIPT THREE - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x00bd, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x00cf, # CURRENCY SIGN - 0x00a5: 0x00be, # YEN SIGN - 0x00a6: 0x00dd, # BROKEN BAR - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a8: 0x00f9, # DIAERESIS - 0x00a9: 0x00b8, # COPYRIGHT SIGN - 0x00aa: 0x00d1, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00ae: 0x00a9, # REGISTERED SIGN - 0x00af: 0x00ee, # MACRON - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b3: 0x00fc, # SUPERSCRIPT THREE - 0x00b4: 0x00ef, # ACUTE ACCENT - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b6: 0x00f4, # PILCROW SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00b8: 0x00f7, # CEDILLA - 0x00b9: 0x00fb, # SUPERSCRIPT ONE - 0x00ba: 0x00d0, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d7: 0x00e8, # MULTIPLICATION SIGN - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ec: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00ff: 0x00ed, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x011e: 0x00a6, # LATIN CAPITAL LETTER G WITH BREVE - 0x011f: 0x00a7, # LATIN SMALL LETTER G WITH BREVE - 0x0130: 0x0098, # LATIN CAPITAL LETTER I WITH DOT ABOVE - 0x0131: 0x008d, # LATIN SMALL LETTER DOTLESS I - 0x015e: 0x009e, # LATIN CAPITAL LETTER S WITH CEDILLA - 0x015f: 0x009f, # LATIN SMALL LETTER S WITH CEDILLA - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp858.py b/Python314_4_x86_Template/Lib/encodings/cp858.py deleted file mode 100644 index 7579f5253..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp858.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec for CP858, modified from cp850. - -""" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp858', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x00d7, # MULTIPLICATION SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x00ae, # REGISTERED SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00b8: 0x00a9, # COPYRIGHT SIGN - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x00a2, # CENT SIGN - 0x00be: 0x00a5, # YEN SIGN - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE - 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x00a4, # CURRENCY SIGN - 0x00d0: 0x00f0, # LATIN SMALL LETTER ETH - 0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH - 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00d5: 0x20ac, # EURO SIGN - 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x00a6, # BROKEN BAR - 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE - 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x00fe, # LATIN SMALL LETTER THORN - 0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN - 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE - 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00ee: 0x00af, # MACRON - 0x00ef: 0x00b4, # ACUTE ACCENT - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2017, # DOUBLE LOW LINE - 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS - 0x00f4: 0x00b6, # PILCROW SIGN - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x00b8, # CEDILLA - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x00a8, # DIAERESIS - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x00b9, # SUPERSCRIPT ONE - 0x00fc: 0x00b3, # SUPERSCRIPT THREE - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\xd7' # 0x009e -> MULTIPLICATION SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\xae' # 0x00a9 -> REGISTERED SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xa9' # 0x00b8 -> COPYRIGHT SIGN - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\xa2' # 0x00bd -> CENT SIGN - '\xa5' # 0x00be -> YEN SIGN - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE - '\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa4' # 0x00cf -> CURRENCY SIGN - '\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH - '\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH - '\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE - '\u20ac' # 0x00d5 -> EURO SIGN - '\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\xa6' # 0x00dd -> BROKEN BAR - '\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE - '\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xb5' # 0x00e6 -> MICRO SIGN - '\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN - '\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN - '\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE - '\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE - '\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xaf' # 0x00ee -> MACRON - '\xb4' # 0x00ef -> ACUTE ACCENT - '\xad' # 0x00f0 -> SOFT HYPHEN - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2017' # 0x00f2 -> DOUBLE LOW LINE - '\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS - '\xb6' # 0x00f4 -> PILCROW SIGN - '\xa7' # 0x00f5 -> SECTION SIGN - '\xf7' # 0x00f6 -> DIVISION SIGN - '\xb8' # 0x00f7 -> CEDILLA - '\xb0' # 0x00f8 -> DEGREE SIGN - '\xa8' # 0x00f9 -> DIAERESIS - '\xb7' # 0x00fa -> MIDDLE DOT - '\xb9' # 0x00fb -> SUPERSCRIPT ONE - '\xb3' # 0x00fc -> SUPERSCRIPT THREE - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x00bd, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x00cf, # CURRENCY SIGN - 0x00a5: 0x00be, # YEN SIGN - 0x00a6: 0x00dd, # BROKEN BAR - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a8: 0x00f9, # DIAERESIS - 0x00a9: 0x00b8, # COPYRIGHT SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00ae: 0x00a9, # REGISTERED SIGN - 0x00af: 0x00ee, # MACRON - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b3: 0x00fc, # SUPERSCRIPT THREE - 0x00b4: 0x00ef, # ACUTE ACCENT - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b6: 0x00f4, # PILCROW SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00b8: 0x00f7, # CEDILLA - 0x00b9: 0x00fb, # SUPERSCRIPT ONE - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d7: 0x009e, # MULTIPLICATION SIGN - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f0: 0x00d0, # LATIN SMALL LETTER ETH - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE - 0x00fe: 0x00e7, # LATIN SMALL LETTER THORN - 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x20ac: 0x00d5, # EURO SIGN - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x2017: 0x00f2, # DOUBLE LOW LINE - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp860.py b/Python314_4_x86_Template/Lib/encodings/cp860.py deleted file mode 100644 index 65903e746..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp860.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP860.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp860', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e3, # LATIN SMALL LETTER A WITH TILDE - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x008c: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x008e: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE - 0x008f: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE - 0x0092: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f5, # LATIN SMALL LETTER O WITH TILDE - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE - 0x0099: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00a2, # CENT SIGN - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE - 0x009e: 0x20a7, # PESETA SIGN - 0x009f: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0x0084 -> LATIN SMALL LETTER A WITH TILDE - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xc1' # 0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xca' # 0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xcd' # 0x008b -> LATIN CAPITAL LETTER I WITH ACUTE - '\xd4' # 0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE - '\xc3' # 0x008e -> LATIN CAPITAL LETTER A WITH TILDE - '\xc2' # 0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xc0' # 0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc8' # 0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0x0094 -> LATIN SMALL LETTER O WITH TILDE - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xda' # 0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xcc' # 0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd5' # 0x0099 -> LATIN CAPITAL LETTER O WITH TILDE - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xa2' # 0x009b -> CENT SIGN - '\xa3' # 0x009c -> POUND SIGN - '\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE - '\u20a7' # 0x009e -> PESETA SIGN - '\xd3' # 0x009f -> LATIN CAPITAL LETTER O WITH ACUTE - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\xd2' # 0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x009b, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c0: 0x0091, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00c1: 0x0086, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2: 0x008f, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c3: 0x008e, # LATIN CAPITAL LETTER A WITH TILDE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c8: 0x0092, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00ca: 0x0089, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cc: 0x0098, # LATIN CAPITAL LETTER I WITH GRAVE - 0x00cd: 0x008b, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d2: 0x00a9, # LATIN CAPITAL LETTER O WITH GRAVE - 0x00d3: 0x009f, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d4: 0x008c, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d5: 0x0099, # LATIN CAPITAL LETTER O WITH TILDE - 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00da: 0x0096, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e3: 0x0084, # LATIN SMALL LETTER A WITH TILDE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f5: 0x0094, # LATIN SMALL LETTER O WITH TILDE - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x20a7: 0x009e, # PESETA SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp861.py b/Python314_4_x86_Template/Lib/encodings/cp861.py deleted file mode 100644 index 860a05fa3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp861.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP861.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp861', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00d0, # LATIN CAPITAL LETTER ETH - 0x008c: 0x00f0, # LATIN SMALL LETTER ETH - 0x008d: 0x00de, # LATIN CAPITAL LETTER THORN - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00fe, # LATIN SMALL LETTER THORN - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x0098: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x20a7, # PESETA SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00a5: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00a6: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00a7: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x2310, # REVERSED NOT SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xd0' # 0x008b -> LATIN CAPITAL LETTER ETH - '\xf0' # 0x008c -> LATIN SMALL LETTER ETH - '\xde' # 0x008d -> LATIN CAPITAL LETTER THORN - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xfe' # 0x0095 -> LATIN SMALL LETTER THORN - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xdd' # 0x0097 -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xfd' # 0x0098 -> LATIN SMALL LETTER Y WITH ACUTE - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\u20a7' # 0x009e -> PESETA SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xc1' # 0x00a4 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xcd' # 0x00a5 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xd3' # 0x00a6 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xda' # 0x00a7 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\u2310' # 0x00a9 -> REVERSED NOT SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a3: 0x009c, # POUND SIGN - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c1: 0x00a4, # LATIN CAPITAL LETTER A WITH ACUTE - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00cd: 0x00a5, # LATIN CAPITAL LETTER I WITH ACUTE - 0x00d0: 0x008b, # LATIN CAPITAL LETTER ETH - 0x00d3: 0x00a6, # LATIN CAPITAL LETTER O WITH ACUTE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00da: 0x00a7, # LATIN CAPITAL LETTER U WITH ACUTE - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00dd: 0x0097, # LATIN CAPITAL LETTER Y WITH ACUTE - 0x00de: 0x008d, # LATIN CAPITAL LETTER THORN - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00f0: 0x008c, # LATIN SMALL LETTER ETH - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00fd: 0x0098, # LATIN SMALL LETTER Y WITH ACUTE - 0x00fe: 0x0095, # LATIN SMALL LETTER THORN - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x20a7: 0x009e, # PESETA SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2310: 0x00a9, # REVERSED NOT SIGN - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp862.py b/Python314_4_x86_Template/Lib/encodings/cp862.py deleted file mode 100644 index 3df22f997..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp862.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP862.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp862', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x05d0, # HEBREW LETTER ALEF - 0x0081: 0x05d1, # HEBREW LETTER BET - 0x0082: 0x05d2, # HEBREW LETTER GIMEL - 0x0083: 0x05d3, # HEBREW LETTER DALET - 0x0084: 0x05d4, # HEBREW LETTER HE - 0x0085: 0x05d5, # HEBREW LETTER VAV - 0x0086: 0x05d6, # HEBREW LETTER ZAYIN - 0x0087: 0x05d7, # HEBREW LETTER HET - 0x0088: 0x05d8, # HEBREW LETTER TET - 0x0089: 0x05d9, # HEBREW LETTER YOD - 0x008a: 0x05da, # HEBREW LETTER FINAL KAF - 0x008b: 0x05db, # HEBREW LETTER KAF - 0x008c: 0x05dc, # HEBREW LETTER LAMED - 0x008d: 0x05dd, # HEBREW LETTER FINAL MEM - 0x008e: 0x05de, # HEBREW LETTER MEM - 0x008f: 0x05df, # HEBREW LETTER FINAL NUN - 0x0090: 0x05e0, # HEBREW LETTER NUN - 0x0091: 0x05e1, # HEBREW LETTER SAMEKH - 0x0092: 0x05e2, # HEBREW LETTER AYIN - 0x0093: 0x05e3, # HEBREW LETTER FINAL PE - 0x0094: 0x05e4, # HEBREW LETTER PE - 0x0095: 0x05e5, # HEBREW LETTER FINAL TSADI - 0x0096: 0x05e6, # HEBREW LETTER TSADI - 0x0097: 0x05e7, # HEBREW LETTER QOF - 0x0098: 0x05e8, # HEBREW LETTER RESH - 0x0099: 0x05e9, # HEBREW LETTER SHIN - 0x009a: 0x05ea, # HEBREW LETTER TAV - 0x009b: 0x00a2, # CENT SIGN - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00a5, # YEN SIGN - 0x009e: 0x20a7, # PESETA SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x2310, # REVERSED NOT SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u05d0' # 0x0080 -> HEBREW LETTER ALEF - '\u05d1' # 0x0081 -> HEBREW LETTER BET - '\u05d2' # 0x0082 -> HEBREW LETTER GIMEL - '\u05d3' # 0x0083 -> HEBREW LETTER DALET - '\u05d4' # 0x0084 -> HEBREW LETTER HE - '\u05d5' # 0x0085 -> HEBREW LETTER VAV - '\u05d6' # 0x0086 -> HEBREW LETTER ZAYIN - '\u05d7' # 0x0087 -> HEBREW LETTER HET - '\u05d8' # 0x0088 -> HEBREW LETTER TET - '\u05d9' # 0x0089 -> HEBREW LETTER YOD - '\u05da' # 0x008a -> HEBREW LETTER FINAL KAF - '\u05db' # 0x008b -> HEBREW LETTER KAF - '\u05dc' # 0x008c -> HEBREW LETTER LAMED - '\u05dd' # 0x008d -> HEBREW LETTER FINAL MEM - '\u05de' # 0x008e -> HEBREW LETTER MEM - '\u05df' # 0x008f -> HEBREW LETTER FINAL NUN - '\u05e0' # 0x0090 -> HEBREW LETTER NUN - '\u05e1' # 0x0091 -> HEBREW LETTER SAMEKH - '\u05e2' # 0x0092 -> HEBREW LETTER AYIN - '\u05e3' # 0x0093 -> HEBREW LETTER FINAL PE - '\u05e4' # 0x0094 -> HEBREW LETTER PE - '\u05e5' # 0x0095 -> HEBREW LETTER FINAL TSADI - '\u05e6' # 0x0096 -> HEBREW LETTER TSADI - '\u05e7' # 0x0097 -> HEBREW LETTER QOF - '\u05e8' # 0x0098 -> HEBREW LETTER RESH - '\u05e9' # 0x0099 -> HEBREW LETTER SHIN - '\u05ea' # 0x009a -> HEBREW LETTER TAV - '\xa2' # 0x009b -> CENT SIGN - '\xa3' # 0x009c -> POUND SIGN - '\xa5' # 0x009d -> YEN SIGN - '\u20a7' # 0x009e -> PESETA SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\u2310' # 0x00a9 -> REVERSED NOT SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a2: 0x009b, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a5: 0x009d, # YEN SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x05d0: 0x0080, # HEBREW LETTER ALEF - 0x05d1: 0x0081, # HEBREW LETTER BET - 0x05d2: 0x0082, # HEBREW LETTER GIMEL - 0x05d3: 0x0083, # HEBREW LETTER DALET - 0x05d4: 0x0084, # HEBREW LETTER HE - 0x05d5: 0x0085, # HEBREW LETTER VAV - 0x05d6: 0x0086, # HEBREW LETTER ZAYIN - 0x05d7: 0x0087, # HEBREW LETTER HET - 0x05d8: 0x0088, # HEBREW LETTER TET - 0x05d9: 0x0089, # HEBREW LETTER YOD - 0x05da: 0x008a, # HEBREW LETTER FINAL KAF - 0x05db: 0x008b, # HEBREW LETTER KAF - 0x05dc: 0x008c, # HEBREW LETTER LAMED - 0x05dd: 0x008d, # HEBREW LETTER FINAL MEM - 0x05de: 0x008e, # HEBREW LETTER MEM - 0x05df: 0x008f, # HEBREW LETTER FINAL NUN - 0x05e0: 0x0090, # HEBREW LETTER NUN - 0x05e1: 0x0091, # HEBREW LETTER SAMEKH - 0x05e2: 0x0092, # HEBREW LETTER AYIN - 0x05e3: 0x0093, # HEBREW LETTER FINAL PE - 0x05e4: 0x0094, # HEBREW LETTER PE - 0x05e5: 0x0095, # HEBREW LETTER FINAL TSADI - 0x05e6: 0x0096, # HEBREW LETTER TSADI - 0x05e7: 0x0097, # HEBREW LETTER QOF - 0x05e8: 0x0098, # HEBREW LETTER RESH - 0x05e9: 0x0099, # HEBREW LETTER SHIN - 0x05ea: 0x009a, # HEBREW LETTER TAV - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x20a7: 0x009e, # PESETA SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2310: 0x00a9, # REVERSED NOT SIGN - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp863.py b/Python314_4_x86_Template/Lib/encodings/cp863.py deleted file mode 100644 index 764180b62..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp863.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP863.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp863', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00b6, # PILCROW SIGN - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x2017, # DOUBLE LOW LINE - 0x008e: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE - 0x008f: 0x00a7, # SECTION SIGN - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE - 0x0092: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x0095: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00a4, # CURRENCY SIGN - 0x0099: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00a2, # CENT SIGN - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE - 0x009e: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00a6, # BROKEN BAR - 0x00a1: 0x00b4, # ACUTE ACCENT - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00a8, # DIAERESIS - 0x00a5: 0x00b8, # CEDILLA - 0x00a6: 0x00b3, # SUPERSCRIPT THREE - 0x00a7: 0x00af, # MACRON - 0x00a8: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00a9: 0x2310, # REVERSED NOT SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00be, # VULGAR FRACTION THREE QUARTERS - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xc2' # 0x0084 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xb6' # 0x0086 -> PILCROW SIGN - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u2017' # 0x008d -> DOUBLE LOW LINE - '\xc0' # 0x008e -> LATIN CAPITAL LETTER A WITH GRAVE - '\xa7' # 0x008f -> SECTION SIGN - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xc8' # 0x0091 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xca' # 0x0092 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xcb' # 0x0094 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcf' # 0x0095 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xa4' # 0x0098 -> CURRENCY SIGN - '\xd4' # 0x0099 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xa2' # 0x009b -> CENT SIGN - '\xa3' # 0x009c -> POUND SIGN - '\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE - '\xdb' # 0x009e -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xa6' # 0x00a0 -> BROKEN BAR - '\xb4' # 0x00a1 -> ACUTE ACCENT - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xa8' # 0x00a4 -> DIAERESIS - '\xb8' # 0x00a5 -> CEDILLA - '\xb3' # 0x00a6 -> SUPERSCRIPT THREE - '\xaf' # 0x00a7 -> MACRON - '\xce' # 0x00a8 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\u2310' # 0x00a9 -> REVERSED NOT SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xbe' # 0x00ad -> VULGAR FRACTION THREE QUARTERS - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a2: 0x009b, # CENT SIGN - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x0098, # CURRENCY SIGN - 0x00a6: 0x00a0, # BROKEN BAR - 0x00a7: 0x008f, # SECTION SIGN - 0x00a8: 0x00a4, # DIAERESIS - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00af: 0x00a7, # MACRON - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b3: 0x00a6, # SUPERSCRIPT THREE - 0x00b4: 0x00a1, # ACUTE ACCENT - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b6: 0x0086, # PILCROW SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00b8: 0x00a5, # CEDILLA - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00be: 0x00ad, # VULGAR FRACTION THREE QUARTERS - 0x00c0: 0x008e, # LATIN CAPITAL LETTER A WITH GRAVE - 0x00c2: 0x0084, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c8: 0x0091, # LATIN CAPITAL LETTER E WITH GRAVE - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00ca: 0x0092, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cb: 0x0094, # LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00ce: 0x00a8, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00cf: 0x0095, # LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00d4: 0x0099, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE - 0x00db: 0x009e, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x2017: 0x008d, # DOUBLE LOW LINE - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2310: 0x00a9, # REVERSED NOT SIGN - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp864.py b/Python314_4_x86_Template/Lib/encodings/cp864.py deleted file mode 100644 index 53df482dc..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp864.py +++ /dev/null @@ -1,690 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP864.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp864', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0025: 0x066a, # ARABIC PERCENT SIGN - 0x0080: 0x00b0, # DEGREE SIGN - 0x0081: 0x00b7, # MIDDLE DOT - 0x0082: 0x2219, # BULLET OPERATOR - 0x0083: 0x221a, # SQUARE ROOT - 0x0084: 0x2592, # MEDIUM SHADE - 0x0085: 0x2500, # FORMS LIGHT HORIZONTAL - 0x0086: 0x2502, # FORMS LIGHT VERTICAL - 0x0087: 0x253c, # FORMS LIGHT VERTICAL AND HORIZONTAL - 0x0088: 0x2524, # FORMS LIGHT VERTICAL AND LEFT - 0x0089: 0x252c, # FORMS LIGHT DOWN AND HORIZONTAL - 0x008a: 0x251c, # FORMS LIGHT VERTICAL AND RIGHT - 0x008b: 0x2534, # FORMS LIGHT UP AND HORIZONTAL - 0x008c: 0x2510, # FORMS LIGHT DOWN AND LEFT - 0x008d: 0x250c, # FORMS LIGHT DOWN AND RIGHT - 0x008e: 0x2514, # FORMS LIGHT UP AND RIGHT - 0x008f: 0x2518, # FORMS LIGHT UP AND LEFT - 0x0090: 0x03b2, # GREEK SMALL BETA - 0x0091: 0x221e, # INFINITY - 0x0092: 0x03c6, # GREEK SMALL PHI - 0x0093: 0x00b1, # PLUS-OR-MINUS SIGN - 0x0094: 0x00bd, # FRACTION 1/2 - 0x0095: 0x00bc, # FRACTION 1/4 - 0x0096: 0x2248, # ALMOST EQUAL TO - 0x0097: 0x00ab, # LEFT POINTING GUILLEMET - 0x0098: 0x00bb, # RIGHT POINTING GUILLEMET - 0x0099: 0xfef7, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM - 0x009a: 0xfef8, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM - 0x009b: None, # UNDEFINED - 0x009c: None, # UNDEFINED - 0x009d: 0xfefb, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM - 0x009e: 0xfefc, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM - 0x009f: None, # UNDEFINED - 0x00a1: 0x00ad, # SOFT HYPHEN - 0x00a2: 0xfe82, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM - 0x00a5: 0xfe84, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM - 0x00a6: None, # UNDEFINED - 0x00a7: None, # UNDEFINED - 0x00a8: 0xfe8e, # ARABIC LETTER ALEF FINAL FORM - 0x00a9: 0xfe8f, # ARABIC LETTER BEH ISOLATED FORM - 0x00aa: 0xfe95, # ARABIC LETTER TEH ISOLATED FORM - 0x00ab: 0xfe99, # ARABIC LETTER THEH ISOLATED FORM - 0x00ac: 0x060c, # ARABIC COMMA - 0x00ad: 0xfe9d, # ARABIC LETTER JEEM ISOLATED FORM - 0x00ae: 0xfea1, # ARABIC LETTER HAH ISOLATED FORM - 0x00af: 0xfea5, # ARABIC LETTER KHAH ISOLATED FORM - 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO - 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE - 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO - 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE - 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR - 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE - 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX - 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN - 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT - 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE - 0x00ba: 0xfed1, # ARABIC LETTER FEH ISOLATED FORM - 0x00bb: 0x061b, # ARABIC SEMICOLON - 0x00bc: 0xfeb1, # ARABIC LETTER SEEN ISOLATED FORM - 0x00bd: 0xfeb5, # ARABIC LETTER SHEEN ISOLATED FORM - 0x00be: 0xfeb9, # ARABIC LETTER SAD ISOLATED FORM - 0x00bf: 0x061f, # ARABIC QUESTION MARK - 0x00c0: 0x00a2, # CENT SIGN - 0x00c1: 0xfe80, # ARABIC LETTER HAMZA ISOLATED FORM - 0x00c2: 0xfe81, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM - 0x00c3: 0xfe83, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM - 0x00c4: 0xfe85, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM - 0x00c5: 0xfeca, # ARABIC LETTER AIN FINAL FORM - 0x00c6: 0xfe8b, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM - 0x00c7: 0xfe8d, # ARABIC LETTER ALEF ISOLATED FORM - 0x00c8: 0xfe91, # ARABIC LETTER BEH INITIAL FORM - 0x00c9: 0xfe93, # ARABIC LETTER TEH MARBUTA ISOLATED FORM - 0x00ca: 0xfe97, # ARABIC LETTER TEH INITIAL FORM - 0x00cb: 0xfe9b, # ARABIC LETTER THEH INITIAL FORM - 0x00cc: 0xfe9f, # ARABIC LETTER JEEM INITIAL FORM - 0x00cd: 0xfea3, # ARABIC LETTER HAH INITIAL FORM - 0x00ce: 0xfea7, # ARABIC LETTER KHAH INITIAL FORM - 0x00cf: 0xfea9, # ARABIC LETTER DAL ISOLATED FORM - 0x00d0: 0xfeab, # ARABIC LETTER THAL ISOLATED FORM - 0x00d1: 0xfead, # ARABIC LETTER REH ISOLATED FORM - 0x00d2: 0xfeaf, # ARABIC LETTER ZAIN ISOLATED FORM - 0x00d3: 0xfeb3, # ARABIC LETTER SEEN INITIAL FORM - 0x00d4: 0xfeb7, # ARABIC LETTER SHEEN INITIAL FORM - 0x00d5: 0xfebb, # ARABIC LETTER SAD INITIAL FORM - 0x00d6: 0xfebf, # ARABIC LETTER DAD INITIAL FORM - 0x00d7: 0xfec1, # ARABIC LETTER TAH ISOLATED FORM - 0x00d8: 0xfec5, # ARABIC LETTER ZAH ISOLATED FORM - 0x00d9: 0xfecb, # ARABIC LETTER AIN INITIAL FORM - 0x00da: 0xfecf, # ARABIC LETTER GHAIN INITIAL FORM - 0x00db: 0x00a6, # BROKEN VERTICAL BAR - 0x00dc: 0x00ac, # NOT SIGN - 0x00dd: 0x00f7, # DIVISION SIGN - 0x00de: 0x00d7, # MULTIPLICATION SIGN - 0x00df: 0xfec9, # ARABIC LETTER AIN ISOLATED FORM - 0x00e0: 0x0640, # ARABIC TATWEEL - 0x00e1: 0xfed3, # ARABIC LETTER FEH INITIAL FORM - 0x00e2: 0xfed7, # ARABIC LETTER QAF INITIAL FORM - 0x00e3: 0xfedb, # ARABIC LETTER KAF INITIAL FORM - 0x00e4: 0xfedf, # ARABIC LETTER LAM INITIAL FORM - 0x00e5: 0xfee3, # ARABIC LETTER MEEM INITIAL FORM - 0x00e6: 0xfee7, # ARABIC LETTER NOON INITIAL FORM - 0x00e7: 0xfeeb, # ARABIC LETTER HEH INITIAL FORM - 0x00e8: 0xfeed, # ARABIC LETTER WAW ISOLATED FORM - 0x00e9: 0xfeef, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM - 0x00ea: 0xfef3, # ARABIC LETTER YEH INITIAL FORM - 0x00eb: 0xfebd, # ARABIC LETTER DAD ISOLATED FORM - 0x00ec: 0xfecc, # ARABIC LETTER AIN MEDIAL FORM - 0x00ed: 0xfece, # ARABIC LETTER GHAIN FINAL FORM - 0x00ee: 0xfecd, # ARABIC LETTER GHAIN ISOLATED FORM - 0x00ef: 0xfee1, # ARABIC LETTER MEEM ISOLATED FORM - 0x00f0: 0xfe7d, # ARABIC SHADDA MEDIAL FORM - 0x00f1: 0x0651, # ARABIC SHADDAH - 0x00f2: 0xfee5, # ARABIC LETTER NOON ISOLATED FORM - 0x00f3: 0xfee9, # ARABIC LETTER HEH ISOLATED FORM - 0x00f4: 0xfeec, # ARABIC LETTER HEH MEDIAL FORM - 0x00f5: 0xfef0, # ARABIC LETTER ALEF MAKSURA FINAL FORM - 0x00f6: 0xfef2, # ARABIC LETTER YEH FINAL FORM - 0x00f7: 0xfed0, # ARABIC LETTER GHAIN MEDIAL FORM - 0x00f8: 0xfed5, # ARABIC LETTER QAF ISOLATED FORM - 0x00f9: 0xfef5, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM - 0x00fa: 0xfef6, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM - 0x00fb: 0xfedd, # ARABIC LETTER LAM ISOLATED FORM - 0x00fc: 0xfed9, # ARABIC LETTER KAF ISOLATED FORM - 0x00fd: 0xfef1, # ARABIC LETTER YEH ISOLATED FORM - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: None, # UNDEFINED -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '\u066a' # 0x0025 -> ARABIC PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xb0' # 0x0080 -> DEGREE SIGN - '\xb7' # 0x0081 -> MIDDLE DOT - '\u2219' # 0x0082 -> BULLET OPERATOR - '\u221a' # 0x0083 -> SQUARE ROOT - '\u2592' # 0x0084 -> MEDIUM SHADE - '\u2500' # 0x0085 -> FORMS LIGHT HORIZONTAL - '\u2502' # 0x0086 -> FORMS LIGHT VERTICAL - '\u253c' # 0x0087 -> FORMS LIGHT VERTICAL AND HORIZONTAL - '\u2524' # 0x0088 -> FORMS LIGHT VERTICAL AND LEFT - '\u252c' # 0x0089 -> FORMS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x008a -> FORMS LIGHT VERTICAL AND RIGHT - '\u2534' # 0x008b -> FORMS LIGHT UP AND HORIZONTAL - '\u2510' # 0x008c -> FORMS LIGHT DOWN AND LEFT - '\u250c' # 0x008d -> FORMS LIGHT DOWN AND RIGHT - '\u2514' # 0x008e -> FORMS LIGHT UP AND RIGHT - '\u2518' # 0x008f -> FORMS LIGHT UP AND LEFT - '\u03b2' # 0x0090 -> GREEK SMALL BETA - '\u221e' # 0x0091 -> INFINITY - '\u03c6' # 0x0092 -> GREEK SMALL PHI - '\xb1' # 0x0093 -> PLUS-OR-MINUS SIGN - '\xbd' # 0x0094 -> FRACTION 1/2 - '\xbc' # 0x0095 -> FRACTION 1/4 - '\u2248' # 0x0096 -> ALMOST EQUAL TO - '\xab' # 0x0097 -> LEFT POINTING GUILLEMET - '\xbb' # 0x0098 -> RIGHT POINTING GUILLEMET - '\ufef7' # 0x0099 -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM - '\ufef8' # 0x009a -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM - '\ufffe' # 0x009b -> UNDEFINED - '\ufffe' # 0x009c -> UNDEFINED - '\ufefb' # 0x009d -> ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM - '\ufefc' # 0x009e -> ARABIC LIGATURE LAM WITH ALEF FINAL FORM - '\ufffe' # 0x009f -> UNDEFINED - '\xa0' # 0x00a0 -> NON-BREAKING SPACE - '\xad' # 0x00a1 -> SOFT HYPHEN - '\ufe82' # 0x00a2 -> ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM - '\xa3' # 0x00a3 -> POUND SIGN - '\xa4' # 0x00a4 -> CURRENCY SIGN - '\ufe84' # 0x00a5 -> ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM - '\ufffe' # 0x00a6 -> UNDEFINED - '\ufffe' # 0x00a7 -> UNDEFINED - '\ufe8e' # 0x00a8 -> ARABIC LETTER ALEF FINAL FORM - '\ufe8f' # 0x00a9 -> ARABIC LETTER BEH ISOLATED FORM - '\ufe95' # 0x00aa -> ARABIC LETTER TEH ISOLATED FORM - '\ufe99' # 0x00ab -> ARABIC LETTER THEH ISOLATED FORM - '\u060c' # 0x00ac -> ARABIC COMMA - '\ufe9d' # 0x00ad -> ARABIC LETTER JEEM ISOLATED FORM - '\ufea1' # 0x00ae -> ARABIC LETTER HAH ISOLATED FORM - '\ufea5' # 0x00af -> ARABIC LETTER KHAH ISOLATED FORM - '\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO - '\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE - '\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO - '\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE - '\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR - '\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE - '\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX - '\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN - '\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT - '\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE - '\ufed1' # 0x00ba -> ARABIC LETTER FEH ISOLATED FORM - '\u061b' # 0x00bb -> ARABIC SEMICOLON - '\ufeb1' # 0x00bc -> ARABIC LETTER SEEN ISOLATED FORM - '\ufeb5' # 0x00bd -> ARABIC LETTER SHEEN ISOLATED FORM - '\ufeb9' # 0x00be -> ARABIC LETTER SAD ISOLATED FORM - '\u061f' # 0x00bf -> ARABIC QUESTION MARK - '\xa2' # 0x00c0 -> CENT SIGN - '\ufe80' # 0x00c1 -> ARABIC LETTER HAMZA ISOLATED FORM - '\ufe81' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM - '\ufe83' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM - '\ufe85' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM - '\ufeca' # 0x00c5 -> ARABIC LETTER AIN FINAL FORM - '\ufe8b' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM - '\ufe8d' # 0x00c7 -> ARABIC LETTER ALEF ISOLATED FORM - '\ufe91' # 0x00c8 -> ARABIC LETTER BEH INITIAL FORM - '\ufe93' # 0x00c9 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM - '\ufe97' # 0x00ca -> ARABIC LETTER TEH INITIAL FORM - '\ufe9b' # 0x00cb -> ARABIC LETTER THEH INITIAL FORM - '\ufe9f' # 0x00cc -> ARABIC LETTER JEEM INITIAL FORM - '\ufea3' # 0x00cd -> ARABIC LETTER HAH INITIAL FORM - '\ufea7' # 0x00ce -> ARABIC LETTER KHAH INITIAL FORM - '\ufea9' # 0x00cf -> ARABIC LETTER DAL ISOLATED FORM - '\ufeab' # 0x00d0 -> ARABIC LETTER THAL ISOLATED FORM - '\ufead' # 0x00d1 -> ARABIC LETTER REH ISOLATED FORM - '\ufeaf' # 0x00d2 -> ARABIC LETTER ZAIN ISOLATED FORM - '\ufeb3' # 0x00d3 -> ARABIC LETTER SEEN INITIAL FORM - '\ufeb7' # 0x00d4 -> ARABIC LETTER SHEEN INITIAL FORM - '\ufebb' # 0x00d5 -> ARABIC LETTER SAD INITIAL FORM - '\ufebf' # 0x00d6 -> ARABIC LETTER DAD INITIAL FORM - '\ufec1' # 0x00d7 -> ARABIC LETTER TAH ISOLATED FORM - '\ufec5' # 0x00d8 -> ARABIC LETTER ZAH ISOLATED FORM - '\ufecb' # 0x00d9 -> ARABIC LETTER AIN INITIAL FORM - '\ufecf' # 0x00da -> ARABIC LETTER GHAIN INITIAL FORM - '\xa6' # 0x00db -> BROKEN VERTICAL BAR - '\xac' # 0x00dc -> NOT SIGN - '\xf7' # 0x00dd -> DIVISION SIGN - '\xd7' # 0x00de -> MULTIPLICATION SIGN - '\ufec9' # 0x00df -> ARABIC LETTER AIN ISOLATED FORM - '\u0640' # 0x00e0 -> ARABIC TATWEEL - '\ufed3' # 0x00e1 -> ARABIC LETTER FEH INITIAL FORM - '\ufed7' # 0x00e2 -> ARABIC LETTER QAF INITIAL FORM - '\ufedb' # 0x00e3 -> ARABIC LETTER KAF INITIAL FORM - '\ufedf' # 0x00e4 -> ARABIC LETTER LAM INITIAL FORM - '\ufee3' # 0x00e5 -> ARABIC LETTER MEEM INITIAL FORM - '\ufee7' # 0x00e6 -> ARABIC LETTER NOON INITIAL FORM - '\ufeeb' # 0x00e7 -> ARABIC LETTER HEH INITIAL FORM - '\ufeed' # 0x00e8 -> ARABIC LETTER WAW ISOLATED FORM - '\ufeef' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA ISOLATED FORM - '\ufef3' # 0x00ea -> ARABIC LETTER YEH INITIAL FORM - '\ufebd' # 0x00eb -> ARABIC LETTER DAD ISOLATED FORM - '\ufecc' # 0x00ec -> ARABIC LETTER AIN MEDIAL FORM - '\ufece' # 0x00ed -> ARABIC LETTER GHAIN FINAL FORM - '\ufecd' # 0x00ee -> ARABIC LETTER GHAIN ISOLATED FORM - '\ufee1' # 0x00ef -> ARABIC LETTER MEEM ISOLATED FORM - '\ufe7d' # 0x00f0 -> ARABIC SHADDA MEDIAL FORM - '\u0651' # 0x00f1 -> ARABIC SHADDAH - '\ufee5' # 0x00f2 -> ARABIC LETTER NOON ISOLATED FORM - '\ufee9' # 0x00f3 -> ARABIC LETTER HEH ISOLATED FORM - '\ufeec' # 0x00f4 -> ARABIC LETTER HEH MEDIAL FORM - '\ufef0' # 0x00f5 -> ARABIC LETTER ALEF MAKSURA FINAL FORM - '\ufef2' # 0x00f6 -> ARABIC LETTER YEH FINAL FORM - '\ufed0' # 0x00f7 -> ARABIC LETTER GHAIN MEDIAL FORM - '\ufed5' # 0x00f8 -> ARABIC LETTER QAF ISOLATED FORM - '\ufef5' # 0x00f9 -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM - '\ufef6' # 0x00fa -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM - '\ufedd' # 0x00fb -> ARABIC LETTER LAM ISOLATED FORM - '\ufed9' # 0x00fc -> ARABIC LETTER KAF ISOLATED FORM - '\ufef1' # 0x00fd -> ARABIC LETTER YEH ISOLATED FORM - '\u25a0' # 0x00fe -> BLACK SQUARE - '\ufffe' # 0x00ff -> UNDEFINED -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00a0, # NON-BREAKING SPACE - 0x00a2: 0x00c0, # CENT SIGN - 0x00a3: 0x00a3, # POUND SIGN - 0x00a4: 0x00a4, # CURRENCY SIGN - 0x00a6: 0x00db, # BROKEN VERTICAL BAR - 0x00ab: 0x0097, # LEFT POINTING GUILLEMET - 0x00ac: 0x00dc, # NOT SIGN - 0x00ad: 0x00a1, # SOFT HYPHEN - 0x00b0: 0x0080, # DEGREE SIGN - 0x00b1: 0x0093, # PLUS-OR-MINUS SIGN - 0x00b7: 0x0081, # MIDDLE DOT - 0x00bb: 0x0098, # RIGHT POINTING GUILLEMET - 0x00bc: 0x0095, # FRACTION 1/4 - 0x00bd: 0x0094, # FRACTION 1/2 - 0x00d7: 0x00de, # MULTIPLICATION SIGN - 0x00f7: 0x00dd, # DIVISION SIGN - 0x03b2: 0x0090, # GREEK SMALL BETA - 0x03c6: 0x0092, # GREEK SMALL PHI - 0x060c: 0x00ac, # ARABIC COMMA - 0x061b: 0x00bb, # ARABIC SEMICOLON - 0x061f: 0x00bf, # ARABIC QUESTION MARK - 0x0640: 0x00e0, # ARABIC TATWEEL - 0x0651: 0x00f1, # ARABIC SHADDAH - 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO - 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE - 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO - 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE - 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR - 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE - 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX - 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN - 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT - 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE - 0x066a: 0x0025, # ARABIC PERCENT SIGN - 0x2219: 0x0082, # BULLET OPERATOR - 0x221a: 0x0083, # SQUARE ROOT - 0x221e: 0x0091, # INFINITY - 0x2248: 0x0096, # ALMOST EQUAL TO - 0x2500: 0x0085, # FORMS LIGHT HORIZONTAL - 0x2502: 0x0086, # FORMS LIGHT VERTICAL - 0x250c: 0x008d, # FORMS LIGHT DOWN AND RIGHT - 0x2510: 0x008c, # FORMS LIGHT DOWN AND LEFT - 0x2514: 0x008e, # FORMS LIGHT UP AND RIGHT - 0x2518: 0x008f, # FORMS LIGHT UP AND LEFT - 0x251c: 0x008a, # FORMS LIGHT VERTICAL AND RIGHT - 0x2524: 0x0088, # FORMS LIGHT VERTICAL AND LEFT - 0x252c: 0x0089, # FORMS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x008b, # FORMS LIGHT UP AND HORIZONTAL - 0x253c: 0x0087, # FORMS LIGHT VERTICAL AND HORIZONTAL - 0x2592: 0x0084, # MEDIUM SHADE - 0x25a0: 0x00fe, # BLACK SQUARE - 0xfe7d: 0x00f0, # ARABIC SHADDA MEDIAL FORM - 0xfe80: 0x00c1, # ARABIC LETTER HAMZA ISOLATED FORM - 0xfe81: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM - 0xfe82: 0x00a2, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM - 0xfe83: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM - 0xfe84: 0x00a5, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM - 0xfe85: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM - 0xfe8b: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM - 0xfe8d: 0x00c7, # ARABIC LETTER ALEF ISOLATED FORM - 0xfe8e: 0x00a8, # ARABIC LETTER ALEF FINAL FORM - 0xfe8f: 0x00a9, # ARABIC LETTER BEH ISOLATED FORM - 0xfe91: 0x00c8, # ARABIC LETTER BEH INITIAL FORM - 0xfe93: 0x00c9, # ARABIC LETTER TEH MARBUTA ISOLATED FORM - 0xfe95: 0x00aa, # ARABIC LETTER TEH ISOLATED FORM - 0xfe97: 0x00ca, # ARABIC LETTER TEH INITIAL FORM - 0xfe99: 0x00ab, # ARABIC LETTER THEH ISOLATED FORM - 0xfe9b: 0x00cb, # ARABIC LETTER THEH INITIAL FORM - 0xfe9d: 0x00ad, # ARABIC LETTER JEEM ISOLATED FORM - 0xfe9f: 0x00cc, # ARABIC LETTER JEEM INITIAL FORM - 0xfea1: 0x00ae, # ARABIC LETTER HAH ISOLATED FORM - 0xfea3: 0x00cd, # ARABIC LETTER HAH INITIAL FORM - 0xfea5: 0x00af, # ARABIC LETTER KHAH ISOLATED FORM - 0xfea7: 0x00ce, # ARABIC LETTER KHAH INITIAL FORM - 0xfea9: 0x00cf, # ARABIC LETTER DAL ISOLATED FORM - 0xfeab: 0x00d0, # ARABIC LETTER THAL ISOLATED FORM - 0xfead: 0x00d1, # ARABIC LETTER REH ISOLATED FORM - 0xfeaf: 0x00d2, # ARABIC LETTER ZAIN ISOLATED FORM - 0xfeb1: 0x00bc, # ARABIC LETTER SEEN ISOLATED FORM - 0xfeb3: 0x00d3, # ARABIC LETTER SEEN INITIAL FORM - 0xfeb5: 0x00bd, # ARABIC LETTER SHEEN ISOLATED FORM - 0xfeb7: 0x00d4, # ARABIC LETTER SHEEN INITIAL FORM - 0xfeb9: 0x00be, # ARABIC LETTER SAD ISOLATED FORM - 0xfebb: 0x00d5, # ARABIC LETTER SAD INITIAL FORM - 0xfebd: 0x00eb, # ARABIC LETTER DAD ISOLATED FORM - 0xfebf: 0x00d6, # ARABIC LETTER DAD INITIAL FORM - 0xfec1: 0x00d7, # ARABIC LETTER TAH ISOLATED FORM - 0xfec5: 0x00d8, # ARABIC LETTER ZAH ISOLATED FORM - 0xfec9: 0x00df, # ARABIC LETTER AIN ISOLATED FORM - 0xfeca: 0x00c5, # ARABIC LETTER AIN FINAL FORM - 0xfecb: 0x00d9, # ARABIC LETTER AIN INITIAL FORM - 0xfecc: 0x00ec, # ARABIC LETTER AIN MEDIAL FORM - 0xfecd: 0x00ee, # ARABIC LETTER GHAIN ISOLATED FORM - 0xfece: 0x00ed, # ARABIC LETTER GHAIN FINAL FORM - 0xfecf: 0x00da, # ARABIC LETTER GHAIN INITIAL FORM - 0xfed0: 0x00f7, # ARABIC LETTER GHAIN MEDIAL FORM - 0xfed1: 0x00ba, # ARABIC LETTER FEH ISOLATED FORM - 0xfed3: 0x00e1, # ARABIC LETTER FEH INITIAL FORM - 0xfed5: 0x00f8, # ARABIC LETTER QAF ISOLATED FORM - 0xfed7: 0x00e2, # ARABIC LETTER QAF INITIAL FORM - 0xfed9: 0x00fc, # ARABIC LETTER KAF ISOLATED FORM - 0xfedb: 0x00e3, # ARABIC LETTER KAF INITIAL FORM - 0xfedd: 0x00fb, # ARABIC LETTER LAM ISOLATED FORM - 0xfedf: 0x00e4, # ARABIC LETTER LAM INITIAL FORM - 0xfee1: 0x00ef, # ARABIC LETTER MEEM ISOLATED FORM - 0xfee3: 0x00e5, # ARABIC LETTER MEEM INITIAL FORM - 0xfee5: 0x00f2, # ARABIC LETTER NOON ISOLATED FORM - 0xfee7: 0x00e6, # ARABIC LETTER NOON INITIAL FORM - 0xfee9: 0x00f3, # ARABIC LETTER HEH ISOLATED FORM - 0xfeeb: 0x00e7, # ARABIC LETTER HEH INITIAL FORM - 0xfeec: 0x00f4, # ARABIC LETTER HEH MEDIAL FORM - 0xfeed: 0x00e8, # ARABIC LETTER WAW ISOLATED FORM - 0xfeef: 0x00e9, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM - 0xfef0: 0x00f5, # ARABIC LETTER ALEF MAKSURA FINAL FORM - 0xfef1: 0x00fd, # ARABIC LETTER YEH ISOLATED FORM - 0xfef2: 0x00f6, # ARABIC LETTER YEH FINAL FORM - 0xfef3: 0x00ea, # ARABIC LETTER YEH INITIAL FORM - 0xfef5: 0x00f9, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM - 0xfef6: 0x00fa, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM - 0xfef7: 0x0099, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM - 0xfef8: 0x009a, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM - 0xfefb: 0x009d, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM - 0xfefc: 0x009e, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp865.py b/Python314_4_x86_Template/Lib/encodings/cp865.py deleted file mode 100644 index 6726cf3f9..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp865.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP865.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp865', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE - 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE - 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE - 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE - 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE - 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE - 0x009e: 0x20a7, # PESETA SIGN - 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK - 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR - 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR - 0x00a8: 0x00bf, # INVERTED QUESTION MARK - 0x00a9: 0x2310, # REVERSED NOT SIGN - 0x00aa: 0x00ac, # NOT SIGN - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER - 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00a4, # CURRENCY SIGN - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S - 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00e3: 0x03c0, # GREEK SMALL LETTER PI - 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00e6: 0x00b5, # MICRO SIGN - 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU - 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00ec: 0x221e, # INFINITY - 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI - 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00ef: 0x2229, # INTERSECTION - 0x00f0: 0x2261, # IDENTICAL TO - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO - 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO - 0x00f4: 0x2320, # TOP HALF INTEGRAL - 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL - 0x00f6: 0x00f7, # DIVISION SIGN - 0x00f7: 0x2248, # ALMOST EQUAL TO - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N - 0x00fd: 0x00b2, # SUPERSCRIPT TWO - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS - '\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE - '\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE - '\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE - '\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE - '\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE - '\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE - '\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE - '\xa3' # 0x009c -> POUND SIGN - '\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE - '\u20a7' # 0x009e -> PESETA SIGN - '\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK - '\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE - '\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE - '\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE - '\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE - '\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE - '\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR - '\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR - '\xbf' # 0x00a8 -> INVERTED QUESTION MARK - '\u2310' # 0x00a9 -> REVERSED NOT SIGN - '\xac' # 0x00aa -> NOT SIGN - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER - '\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xa4' # 0x00af -> CURRENCY SIGN - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA - '\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S - '\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA - '\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI - '\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA - '\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA - '\xb5' # 0x00e6 -> MICRO SIGN - '\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU - '\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI - '\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA - '\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA - '\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA - '\u221e' # 0x00ec -> INFINITY - '\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI - '\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON - '\u2229' # 0x00ef -> INTERSECTION - '\u2261' # 0x00f0 -> IDENTICAL TO - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO - '\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO - '\u2320' # 0x00f4 -> TOP HALF INTEGRAL - '\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL - '\xf7' # 0x00f6 -> DIVISION SIGN - '\u2248' # 0x00f7 -> ALMOST EQUAL TO - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0x00fd -> SUPERSCRIPT TWO - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK - 0x00a3: 0x009c, # POUND SIGN - 0x00a4: 0x00af, # CURRENCY SIGN - 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x00aa, # NOT SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x00fd, # SUPERSCRIPT TWO - 0x00b5: 0x00e6, # MICRO SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR - 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x00bf: 0x00a8, # INVERTED QUESTION MARK - 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE - 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE - 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S - 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE - 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE - 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE - 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE - 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE - 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x00f6, # DIVISION SIGN - 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE - 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS - 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK - 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA - 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA - 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA - 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI - 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA - 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA - 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON - 0x03c0: 0x00e3, # GREEK SMALL LETTER PI - 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU - 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI - 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N - 0x20a7: 0x009e, # PESETA SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x221e: 0x00ec, # INFINITY - 0x2229: 0x00ef, # INTERSECTION - 0x2248: 0x00f7, # ALMOST EQUAL TO - 0x2261: 0x00f0, # IDENTICAL TO - 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO - 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO - 0x2310: 0x00a9, # REVERSED NOT SIGN - 0x2320: 0x00f4, # TOP HALF INTEGRAL - 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp866.py b/Python314_4_x86_Template/Lib/encodings/cp866.py deleted file mode 100644 index bec7ae39f..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp866.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP866.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp866', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A - 0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE - 0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE - 0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE - 0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE - 0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE - 0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE - 0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE - 0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I - 0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I - 0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA - 0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL - 0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM - 0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN - 0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O - 0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE - 0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER - 0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES - 0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE - 0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U - 0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF - 0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA - 0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE - 0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE - 0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA - 0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA - 0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU - 0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E - 0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU - 0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA - 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A - 0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE - 0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE - 0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE - 0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE - 0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE - 0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE - 0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE - 0x00a8: 0x0438, # CYRILLIC SMALL LETTER I - 0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I - 0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA - 0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL - 0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM - 0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN - 0x00ae: 0x043e, # CYRILLIC SMALL LETTER O - 0x00af: 0x043f, # CYRILLIC SMALL LETTER PE - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x258c, # LEFT HALF BLOCK - 0x00de: 0x2590, # RIGHT HALF BLOCK - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER - 0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES - 0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE - 0x00e3: 0x0443, # CYRILLIC SMALL LETTER U - 0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF - 0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA - 0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE - 0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE - 0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA - 0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA - 0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN - 0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU - 0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN - 0x00ed: 0x044d, # CYRILLIC SMALL LETTER E - 0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU - 0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA - 0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO - 0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO - 0x00f2: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x00f3: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x00f4: 0x0407, # CYRILLIC CAPITAL LETTER YI - 0x00f5: 0x0457, # CYRILLIC SMALL LETTER YI - 0x00f6: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U - 0x00f7: 0x045e, # CYRILLIC SMALL LETTER SHORT U - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x2219, # BULLET OPERATOR - 0x00fa: 0x00b7, # MIDDLE DOT - 0x00fb: 0x221a, # SQUARE ROOT - 0x00fc: 0x2116, # NUMERO SIGN - 0x00fd: 0x00a4, # CURRENCY SIGN - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA - '\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL - '\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM - '\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN - '\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O - '\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u258c' # 0x00dd -> LEFT HALF BLOCK - '\u2590' # 0x00de -> RIGHT HALF BLOCK - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E - '\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU - '\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA - '\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO - '\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO - '\u0404' # 0x00f2 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u0454' # 0x00f3 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u0407' # 0x00f4 -> CYRILLIC CAPITAL LETTER YI - '\u0457' # 0x00f5 -> CYRILLIC SMALL LETTER YI - '\u040e' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHORT U - '\u045e' # 0x00f7 -> CYRILLIC SMALL LETTER SHORT U - '\xb0' # 0x00f8 -> DEGREE SIGN - '\u2219' # 0x00f9 -> BULLET OPERATOR - '\xb7' # 0x00fa -> MIDDLE DOT - '\u221a' # 0x00fb -> SQUARE ROOT - '\u2116' # 0x00fc -> NUMERO SIGN - '\xa4' # 0x00fd -> CURRENCY SIGN - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a4: 0x00fd, # CURRENCY SIGN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b7: 0x00fa, # MIDDLE DOT - 0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO - 0x0404: 0x00f2, # CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x0407: 0x00f4, # CYRILLIC CAPITAL LETTER YI - 0x040e: 0x00f6, # CYRILLIC CAPITAL LETTER SHORT U - 0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A - 0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE - 0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE - 0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE - 0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE - 0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE - 0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE - 0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE - 0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I - 0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I - 0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA - 0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL - 0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM - 0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN - 0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O - 0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE - 0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER - 0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES - 0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE - 0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U - 0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF - 0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA - 0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE - 0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE - 0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA - 0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA - 0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN - 0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU - 0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN - 0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E - 0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU - 0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA - 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A - 0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE - 0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE - 0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE - 0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE - 0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE - 0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE - 0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE - 0x0438: 0x00a8, # CYRILLIC SMALL LETTER I - 0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I - 0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA - 0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL - 0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM - 0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN - 0x043e: 0x00ae, # CYRILLIC SMALL LETTER O - 0x043f: 0x00af, # CYRILLIC SMALL LETTER PE - 0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER - 0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES - 0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE - 0x0443: 0x00e3, # CYRILLIC SMALL LETTER U - 0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF - 0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA - 0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE - 0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE - 0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA - 0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA - 0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN - 0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU - 0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN - 0x044d: 0x00ed, # CYRILLIC SMALL LETTER E - 0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU - 0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA - 0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO - 0x0454: 0x00f3, # CYRILLIC SMALL LETTER UKRAINIAN IE - 0x0457: 0x00f5, # CYRILLIC SMALL LETTER YI - 0x045e: 0x00f7, # CYRILLIC SMALL LETTER SHORT U - 0x2116: 0x00fc, # NUMERO SIGN - 0x2219: 0x00f9, # BULLET OPERATOR - 0x221a: 0x00fb, # SQUARE ROOT - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x258c: 0x00dd, # LEFT HALF BLOCK - 0x2590: 0x00de, # RIGHT HALF BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp869.py b/Python314_4_x86_Template/Lib/encodings/cp869.py deleted file mode 100644 index 8d8a29b17..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp869.py +++ /dev/null @@ -1,689 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP869.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp869', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: None, # UNDEFINED - 0x0081: None, # UNDEFINED - 0x0082: None, # UNDEFINED - 0x0083: None, # UNDEFINED - 0x0084: None, # UNDEFINED - 0x0085: None, # UNDEFINED - 0x0086: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS - 0x0087: None, # UNDEFINED - 0x0088: 0x00b7, # MIDDLE DOT - 0x0089: 0x00ac, # NOT SIGN - 0x008a: 0x00a6, # BROKEN BAR - 0x008b: 0x2018, # LEFT SINGLE QUOTATION MARK - 0x008c: 0x2019, # RIGHT SINGLE QUOTATION MARK - 0x008d: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS - 0x008e: 0x2015, # HORIZONTAL BAR - 0x008f: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS - 0x0090: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS - 0x0091: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - 0x0092: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS - 0x0093: None, # UNDEFINED - 0x0094: None, # UNDEFINED - 0x0095: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS - 0x0096: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - 0x0097: 0x00a9, # COPYRIGHT SIGN - 0x0098: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS - 0x0099: 0x00b2, # SUPERSCRIPT TWO - 0x009a: 0x00b3, # SUPERSCRIPT THREE - 0x009b: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS - 0x009c: 0x00a3, # POUND SIGN - 0x009d: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS - 0x009e: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS - 0x009f: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS - 0x00a0: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA - 0x00a1: 0x0390, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - 0x00a2: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS - 0x00a3: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS - 0x00a4: 0x0391, # GREEK CAPITAL LETTER ALPHA - 0x00a5: 0x0392, # GREEK CAPITAL LETTER BETA - 0x00a6: 0x0393, # GREEK CAPITAL LETTER GAMMA - 0x00a7: 0x0394, # GREEK CAPITAL LETTER DELTA - 0x00a8: 0x0395, # GREEK CAPITAL LETTER EPSILON - 0x00a9: 0x0396, # GREEK CAPITAL LETTER ZETA - 0x00aa: 0x0397, # GREEK CAPITAL LETTER ETA - 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF - 0x00ac: 0x0398, # GREEK CAPITAL LETTER THETA - 0x00ad: 0x0399, # GREEK CAPITAL LETTER IOTA - 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00b0: 0x2591, # LIGHT SHADE - 0x00b1: 0x2592, # MEDIUM SHADE - 0x00b2: 0x2593, # DARK SHADE - 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL - 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00b5: 0x039a, # GREEK CAPITAL LETTER KAPPA - 0x00b6: 0x039b, # GREEK CAPITAL LETTER LAMDA - 0x00b7: 0x039c, # GREEK CAPITAL LETTER MU - 0x00b8: 0x039d, # GREEK CAPITAL LETTER NU - 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL - 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x00bd: 0x039e, # GREEK CAPITAL LETTER XI - 0x00be: 0x039f, # GREEK CAPITAL LETTER OMICRON - 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL - 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00c6: 0x03a0, # GREEK CAPITAL LETTER PI - 0x00c7: 0x03a1, # GREEK CAPITAL LETTER RHO - 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00cf: 0x03a3, # GREEK CAPITAL LETTER SIGMA - 0x00d0: 0x03a4, # GREEK CAPITAL LETTER TAU - 0x00d1: 0x03a5, # GREEK CAPITAL LETTER UPSILON - 0x00d2: 0x03a6, # GREEK CAPITAL LETTER PHI - 0x00d3: 0x03a7, # GREEK CAPITAL LETTER CHI - 0x00d4: 0x03a8, # GREEK CAPITAL LETTER PSI - 0x00d5: 0x03a9, # GREEK CAPITAL LETTER OMEGA - 0x00d6: 0x03b1, # GREEK SMALL LETTER ALPHA - 0x00d7: 0x03b2, # GREEK SMALL LETTER BETA - 0x00d8: 0x03b3, # GREEK SMALL LETTER GAMMA - 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT - 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x00db: 0x2588, # FULL BLOCK - 0x00dc: 0x2584, # LOWER HALF BLOCK - 0x00dd: 0x03b4, # GREEK SMALL LETTER DELTA - 0x00de: 0x03b5, # GREEK SMALL LETTER EPSILON - 0x00df: 0x2580, # UPPER HALF BLOCK - 0x00e0: 0x03b6, # GREEK SMALL LETTER ZETA - 0x00e1: 0x03b7, # GREEK SMALL LETTER ETA - 0x00e2: 0x03b8, # GREEK SMALL LETTER THETA - 0x00e3: 0x03b9, # GREEK SMALL LETTER IOTA - 0x00e4: 0x03ba, # GREEK SMALL LETTER KAPPA - 0x00e5: 0x03bb, # GREEK SMALL LETTER LAMDA - 0x00e6: 0x03bc, # GREEK SMALL LETTER MU - 0x00e7: 0x03bd, # GREEK SMALL LETTER NU - 0x00e8: 0x03be, # GREEK SMALL LETTER XI - 0x00e9: 0x03bf, # GREEK SMALL LETTER OMICRON - 0x00ea: 0x03c0, # GREEK SMALL LETTER PI - 0x00eb: 0x03c1, # GREEK SMALL LETTER RHO - 0x00ec: 0x03c3, # GREEK SMALL LETTER SIGMA - 0x00ed: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA - 0x00ee: 0x03c4, # GREEK SMALL LETTER TAU - 0x00ef: 0x0384, # GREEK TONOS - 0x00f0: 0x00ad, # SOFT HYPHEN - 0x00f1: 0x00b1, # PLUS-MINUS SIGN - 0x00f2: 0x03c5, # GREEK SMALL LETTER UPSILON - 0x00f3: 0x03c6, # GREEK SMALL LETTER PHI - 0x00f4: 0x03c7, # GREEK SMALL LETTER CHI - 0x00f5: 0x00a7, # SECTION SIGN - 0x00f6: 0x03c8, # GREEK SMALL LETTER PSI - 0x00f7: 0x0385, # GREEK DIALYTIKA TONOS - 0x00f8: 0x00b0, # DEGREE SIGN - 0x00f9: 0x00a8, # DIAERESIS - 0x00fa: 0x03c9, # GREEK SMALL LETTER OMEGA - 0x00fb: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA - 0x00fc: 0x03b0, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - 0x00fd: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS - 0x00fe: 0x25a0, # BLACK SQUARE - 0x00ff: 0x00a0, # NO-BREAK SPACE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> NULL - '\x01' # 0x0001 -> START OF HEADING - '\x02' # 0x0002 -> START OF TEXT - '\x03' # 0x0003 -> END OF TEXT - '\x04' # 0x0004 -> END OF TRANSMISSION - '\x05' # 0x0005 -> ENQUIRY - '\x06' # 0x0006 -> ACKNOWLEDGE - '\x07' # 0x0007 -> BELL - '\x08' # 0x0008 -> BACKSPACE - '\t' # 0x0009 -> HORIZONTAL TABULATION - '\n' # 0x000a -> LINE FEED - '\x0b' # 0x000b -> VERTICAL TABULATION - '\x0c' # 0x000c -> FORM FEED - '\r' # 0x000d -> CARRIAGE RETURN - '\x0e' # 0x000e -> SHIFT OUT - '\x0f' # 0x000f -> SHIFT IN - '\x10' # 0x0010 -> DATA LINK ESCAPE - '\x11' # 0x0011 -> DEVICE CONTROL ONE - '\x12' # 0x0012 -> DEVICE CONTROL TWO - '\x13' # 0x0013 -> DEVICE CONTROL THREE - '\x14' # 0x0014 -> DEVICE CONTROL FOUR - '\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x0016 -> SYNCHRONOUS IDLE - '\x17' # 0x0017 -> END OF TRANSMISSION BLOCK - '\x18' # 0x0018 -> CANCEL - '\x19' # 0x0019 -> END OF MEDIUM - '\x1a' # 0x001a -> SUBSTITUTE - '\x1b' # 0x001b -> ESCAPE - '\x1c' # 0x001c -> FILE SEPARATOR - '\x1d' # 0x001d -> GROUP SEPARATOR - '\x1e' # 0x001e -> RECORD SEPARATOR - '\x1f' # 0x001f -> UNIT SEPARATOR - ' ' # 0x0020 -> SPACE - '!' # 0x0021 -> EXCLAMATION MARK - '"' # 0x0022 -> QUOTATION MARK - '#' # 0x0023 -> NUMBER SIGN - '$' # 0x0024 -> DOLLAR SIGN - '%' # 0x0025 -> PERCENT SIGN - '&' # 0x0026 -> AMPERSAND - "'" # 0x0027 -> APOSTROPHE - '(' # 0x0028 -> LEFT PARENTHESIS - ')' # 0x0029 -> RIGHT PARENTHESIS - '*' # 0x002a -> ASTERISK - '+' # 0x002b -> PLUS SIGN - ',' # 0x002c -> COMMA - '-' # 0x002d -> HYPHEN-MINUS - '.' # 0x002e -> FULL STOP - '/' # 0x002f -> SOLIDUS - '0' # 0x0030 -> DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE - '2' # 0x0032 -> DIGIT TWO - '3' # 0x0033 -> DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE - ':' # 0x003a -> COLON - ';' # 0x003b -> SEMICOLON - '<' # 0x003c -> LESS-THAN SIGN - '=' # 0x003d -> EQUALS SIGN - '>' # 0x003e -> GREATER-THAN SIGN - '?' # 0x003f -> QUESTION MARK - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET - '\\' # 0x005c -> REVERSE SOLIDUS - ']' # 0x005d -> RIGHT SQUARE BRACKET - '^' # 0x005e -> CIRCUMFLEX ACCENT - '_' # 0x005f -> LOW LINE - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET - '|' # 0x007c -> VERTICAL LINE - '}' # 0x007d -> RIGHT CURLY BRACKET - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> DELETE - '\ufffe' # 0x0080 -> UNDEFINED - '\ufffe' # 0x0081 -> UNDEFINED - '\ufffe' # 0x0082 -> UNDEFINED - '\ufffe' # 0x0083 -> UNDEFINED - '\ufffe' # 0x0084 -> UNDEFINED - '\ufffe' # 0x0085 -> UNDEFINED - '\u0386' # 0x0086 -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\ufffe' # 0x0087 -> UNDEFINED - '\xb7' # 0x0088 -> MIDDLE DOT - '\xac' # 0x0089 -> NOT SIGN - '\xa6' # 0x008a -> BROKEN BAR - '\u2018' # 0x008b -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x008c -> RIGHT SINGLE QUOTATION MARK - '\u0388' # 0x008d -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u2015' # 0x008e -> HORIZONTAL BAR - '\u0389' # 0x008f -> GREEK CAPITAL LETTER ETA WITH TONOS - '\u038a' # 0x0090 -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\u03aa' # 0x0091 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\u038c' # 0x0092 -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\ufffe' # 0x0093 -> UNDEFINED - '\ufffe' # 0x0094 -> UNDEFINED - '\u038e' # 0x0095 -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u03ab' # 0x0096 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '\xa9' # 0x0097 -> COPYRIGHT SIGN - '\u038f' # 0x0098 -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '\xb2' # 0x0099 -> SUPERSCRIPT TWO - '\xb3' # 0x009a -> SUPERSCRIPT THREE - '\u03ac' # 0x009b -> GREEK SMALL LETTER ALPHA WITH TONOS - '\xa3' # 0x009c -> POUND SIGN - '\u03ad' # 0x009d -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0x009e -> GREEK SMALL LETTER ETA WITH TONOS - '\u03af' # 0x009f -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03ca' # 0x00a0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u0390' # 0x00a1 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - '\u03cc' # 0x00a2 -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u03cd' # 0x00a3 -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u0391' # 0x00a4 -> GREEK CAPITAL LETTER ALPHA - '\u0392' # 0x00a5 -> GREEK CAPITAL LETTER BETA - '\u0393' # 0x00a6 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0x00a7 -> GREEK CAPITAL LETTER DELTA - '\u0395' # 0x00a8 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0x00a9 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0x00aa -> GREEK CAPITAL LETTER ETA - '\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF - '\u0398' # 0x00ac -> GREEK CAPITAL LETTER THETA - '\u0399' # 0x00ad -> GREEK CAPITAL LETTER IOTA - '\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0x00b0 -> LIGHT SHADE - '\u2592' # 0x00b1 -> MEDIUM SHADE - '\u2593' # 0x00b2 -> DARK SHADE - '\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u039a' # 0x00b5 -> GREEK CAPITAL LETTER KAPPA - '\u039b' # 0x00b6 -> GREEK CAPITAL LETTER LAMDA - '\u039c' # 0x00b7 -> GREEK CAPITAL LETTER MU - '\u039d' # 0x00b8 -> GREEK CAPITAL LETTER NU - '\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u039e' # 0x00bd -> GREEK CAPITAL LETTER XI - '\u039f' # 0x00be -> GREEK CAPITAL LETTER OMICRON - '\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u03a0' # 0x00c6 -> GREEK CAPITAL LETTER PI - '\u03a1' # 0x00c7 -> GREEK CAPITAL LETTER RHO - '\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u03a3' # 0x00cf -> GREEK CAPITAL LETTER SIGMA - '\u03a4' # 0x00d0 -> GREEK CAPITAL LETTER TAU - '\u03a5' # 0x00d1 -> GREEK CAPITAL LETTER UPSILON - '\u03a6' # 0x00d2 -> GREEK CAPITAL LETTER PHI - '\u03a7' # 0x00d3 -> GREEK CAPITAL LETTER CHI - '\u03a8' # 0x00d4 -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0x00d5 -> GREEK CAPITAL LETTER OMEGA - '\u03b1' # 0x00d6 -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0x00d7 -> GREEK SMALL LETTER BETA - '\u03b3' # 0x00d8 -> GREEK SMALL LETTER GAMMA - '\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0x00db -> FULL BLOCK - '\u2584' # 0x00dc -> LOWER HALF BLOCK - '\u03b4' # 0x00dd -> GREEK SMALL LETTER DELTA - '\u03b5' # 0x00de -> GREEK SMALL LETTER EPSILON - '\u2580' # 0x00df -> UPPER HALF BLOCK - '\u03b6' # 0x00e0 -> GREEK SMALL LETTER ZETA - '\u03b7' # 0x00e1 -> GREEK SMALL LETTER ETA - '\u03b8' # 0x00e2 -> GREEK SMALL LETTER THETA - '\u03b9' # 0x00e3 -> GREEK SMALL LETTER IOTA - '\u03ba' # 0x00e4 -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0x00e5 -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0x00e6 -> GREEK SMALL LETTER MU - '\u03bd' # 0x00e7 -> GREEK SMALL LETTER NU - '\u03be' # 0x00e8 -> GREEK SMALL LETTER XI - '\u03bf' # 0x00e9 -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0x00ea -> GREEK SMALL LETTER PI - '\u03c1' # 0x00eb -> GREEK SMALL LETTER RHO - '\u03c3' # 0x00ec -> GREEK SMALL LETTER SIGMA - '\u03c2' # 0x00ed -> GREEK SMALL LETTER FINAL SIGMA - '\u03c4' # 0x00ee -> GREEK SMALL LETTER TAU - '\u0384' # 0x00ef -> GREEK TONOS - '\xad' # 0x00f0 -> SOFT HYPHEN - '\xb1' # 0x00f1 -> PLUS-MINUS SIGN - '\u03c5' # 0x00f2 -> GREEK SMALL LETTER UPSILON - '\u03c6' # 0x00f3 -> GREEK SMALL LETTER PHI - '\u03c7' # 0x00f4 -> GREEK SMALL LETTER CHI - '\xa7' # 0x00f5 -> SECTION SIGN - '\u03c8' # 0x00f6 -> GREEK SMALL LETTER PSI - '\u0385' # 0x00f7 -> GREEK DIALYTIKA TONOS - '\xb0' # 0x00f8 -> DEGREE SIGN - '\xa8' # 0x00f9 -> DIAERESIS - '\u03c9' # 0x00fa -> GREEK SMALL LETTER OMEGA - '\u03cb' # 0x00fb -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u03b0' # 0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - '\u03ce' # 0x00fd -> GREEK SMALL LETTER OMEGA WITH TONOS - '\u25a0' # 0x00fe -> BLACK SQUARE - '\xa0' # 0x00ff -> NO-BREAK SPACE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # NULL - 0x0001: 0x0001, # START OF HEADING - 0x0002: 0x0002, # START OF TEXT - 0x0003: 0x0003, # END OF TEXT - 0x0004: 0x0004, # END OF TRANSMISSION - 0x0005: 0x0005, # ENQUIRY - 0x0006: 0x0006, # ACKNOWLEDGE - 0x0007: 0x0007, # BELL - 0x0008: 0x0008, # BACKSPACE - 0x0009: 0x0009, # HORIZONTAL TABULATION - 0x000a: 0x000a, # LINE FEED - 0x000b: 0x000b, # VERTICAL TABULATION - 0x000c: 0x000c, # FORM FEED - 0x000d: 0x000d, # CARRIAGE RETURN - 0x000e: 0x000e, # SHIFT OUT - 0x000f: 0x000f, # SHIFT IN - 0x0010: 0x0010, # DATA LINK ESCAPE - 0x0011: 0x0011, # DEVICE CONTROL ONE - 0x0012: 0x0012, # DEVICE CONTROL TWO - 0x0013: 0x0013, # DEVICE CONTROL THREE - 0x0014: 0x0014, # DEVICE CONTROL FOUR - 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE - 0x0016: 0x0016, # SYNCHRONOUS IDLE - 0x0017: 0x0017, # END OF TRANSMISSION BLOCK - 0x0018: 0x0018, # CANCEL - 0x0019: 0x0019, # END OF MEDIUM - 0x001a: 0x001a, # SUBSTITUTE - 0x001b: 0x001b, # ESCAPE - 0x001c: 0x001c, # FILE SEPARATOR - 0x001d: 0x001d, # GROUP SEPARATOR - 0x001e: 0x001e, # RECORD SEPARATOR - 0x001f: 0x001f, # UNIT SEPARATOR - 0x0020: 0x0020, # SPACE - 0x0021: 0x0021, # EXCLAMATION MARK - 0x0022: 0x0022, # QUOTATION MARK - 0x0023: 0x0023, # NUMBER SIGN - 0x0024: 0x0024, # DOLLAR SIGN - 0x0025: 0x0025, # PERCENT SIGN - 0x0026: 0x0026, # AMPERSAND - 0x0027: 0x0027, # APOSTROPHE - 0x0028: 0x0028, # LEFT PARENTHESIS - 0x0029: 0x0029, # RIGHT PARENTHESIS - 0x002a: 0x002a, # ASTERISK - 0x002b: 0x002b, # PLUS SIGN - 0x002c: 0x002c, # COMMA - 0x002d: 0x002d, # HYPHEN-MINUS - 0x002e: 0x002e, # FULL STOP - 0x002f: 0x002f, # SOLIDUS - 0x0030: 0x0030, # DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE - 0x003a: 0x003a, # COLON - 0x003b: 0x003b, # SEMICOLON - 0x003c: 0x003c, # LESS-THAN SIGN - 0x003d: 0x003d, # EQUALS SIGN - 0x003e: 0x003e, # GREATER-THAN SIGN - 0x003f: 0x003f, # QUESTION MARK - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET - 0x005c: 0x005c, # REVERSE SOLIDUS - 0x005d: 0x005d, # RIGHT SQUARE BRACKET - 0x005e: 0x005e, # CIRCUMFLEX ACCENT - 0x005f: 0x005f, # LOW LINE - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET - 0x007c: 0x007c, # VERTICAL LINE - 0x007d: 0x007d, # RIGHT CURLY BRACKET - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # DELETE - 0x00a0: 0x00ff, # NO-BREAK SPACE - 0x00a3: 0x009c, # POUND SIGN - 0x00a6: 0x008a, # BROKEN BAR - 0x00a7: 0x00f5, # SECTION SIGN - 0x00a8: 0x00f9, # DIAERESIS - 0x00a9: 0x0097, # COPYRIGHT SIGN - 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00ac: 0x0089, # NOT SIGN - 0x00ad: 0x00f0, # SOFT HYPHEN - 0x00b0: 0x00f8, # DEGREE SIGN - 0x00b1: 0x00f1, # PLUS-MINUS SIGN - 0x00b2: 0x0099, # SUPERSCRIPT TWO - 0x00b3: 0x009a, # SUPERSCRIPT THREE - 0x00b7: 0x0088, # MIDDLE DOT - 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF - 0x0384: 0x00ef, # GREEK TONOS - 0x0385: 0x00f7, # GREEK DIALYTIKA TONOS - 0x0386: 0x0086, # GREEK CAPITAL LETTER ALPHA WITH TONOS - 0x0388: 0x008d, # GREEK CAPITAL LETTER EPSILON WITH TONOS - 0x0389: 0x008f, # GREEK CAPITAL LETTER ETA WITH TONOS - 0x038a: 0x0090, # GREEK CAPITAL LETTER IOTA WITH TONOS - 0x038c: 0x0092, # GREEK CAPITAL LETTER OMICRON WITH TONOS - 0x038e: 0x0095, # GREEK CAPITAL LETTER UPSILON WITH TONOS - 0x038f: 0x0098, # GREEK CAPITAL LETTER OMEGA WITH TONOS - 0x0390: 0x00a1, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - 0x0391: 0x00a4, # GREEK CAPITAL LETTER ALPHA - 0x0392: 0x00a5, # GREEK CAPITAL LETTER BETA - 0x0393: 0x00a6, # GREEK CAPITAL LETTER GAMMA - 0x0394: 0x00a7, # GREEK CAPITAL LETTER DELTA - 0x0395: 0x00a8, # GREEK CAPITAL LETTER EPSILON - 0x0396: 0x00a9, # GREEK CAPITAL LETTER ZETA - 0x0397: 0x00aa, # GREEK CAPITAL LETTER ETA - 0x0398: 0x00ac, # GREEK CAPITAL LETTER THETA - 0x0399: 0x00ad, # GREEK CAPITAL LETTER IOTA - 0x039a: 0x00b5, # GREEK CAPITAL LETTER KAPPA - 0x039b: 0x00b6, # GREEK CAPITAL LETTER LAMDA - 0x039c: 0x00b7, # GREEK CAPITAL LETTER MU - 0x039d: 0x00b8, # GREEK CAPITAL LETTER NU - 0x039e: 0x00bd, # GREEK CAPITAL LETTER XI - 0x039f: 0x00be, # GREEK CAPITAL LETTER OMICRON - 0x03a0: 0x00c6, # GREEK CAPITAL LETTER PI - 0x03a1: 0x00c7, # GREEK CAPITAL LETTER RHO - 0x03a3: 0x00cf, # GREEK CAPITAL LETTER SIGMA - 0x03a4: 0x00d0, # GREEK CAPITAL LETTER TAU - 0x03a5: 0x00d1, # GREEK CAPITAL LETTER UPSILON - 0x03a6: 0x00d2, # GREEK CAPITAL LETTER PHI - 0x03a7: 0x00d3, # GREEK CAPITAL LETTER CHI - 0x03a8: 0x00d4, # GREEK CAPITAL LETTER PSI - 0x03a9: 0x00d5, # GREEK CAPITAL LETTER OMEGA - 0x03aa: 0x0091, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - 0x03ab: 0x0096, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - 0x03ac: 0x009b, # GREEK SMALL LETTER ALPHA WITH TONOS - 0x03ad: 0x009d, # GREEK SMALL LETTER EPSILON WITH TONOS - 0x03ae: 0x009e, # GREEK SMALL LETTER ETA WITH TONOS - 0x03af: 0x009f, # GREEK SMALL LETTER IOTA WITH TONOS - 0x03b0: 0x00fc, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - 0x03b1: 0x00d6, # GREEK SMALL LETTER ALPHA - 0x03b2: 0x00d7, # GREEK SMALL LETTER BETA - 0x03b3: 0x00d8, # GREEK SMALL LETTER GAMMA - 0x03b4: 0x00dd, # GREEK SMALL LETTER DELTA - 0x03b5: 0x00de, # GREEK SMALL LETTER EPSILON - 0x03b6: 0x00e0, # GREEK SMALL LETTER ZETA - 0x03b7: 0x00e1, # GREEK SMALL LETTER ETA - 0x03b8: 0x00e2, # GREEK SMALL LETTER THETA - 0x03b9: 0x00e3, # GREEK SMALL LETTER IOTA - 0x03ba: 0x00e4, # GREEK SMALL LETTER KAPPA - 0x03bb: 0x00e5, # GREEK SMALL LETTER LAMDA - 0x03bc: 0x00e6, # GREEK SMALL LETTER MU - 0x03bd: 0x00e7, # GREEK SMALL LETTER NU - 0x03be: 0x00e8, # GREEK SMALL LETTER XI - 0x03bf: 0x00e9, # GREEK SMALL LETTER OMICRON - 0x03c0: 0x00ea, # GREEK SMALL LETTER PI - 0x03c1: 0x00eb, # GREEK SMALL LETTER RHO - 0x03c2: 0x00ed, # GREEK SMALL LETTER FINAL SIGMA - 0x03c3: 0x00ec, # GREEK SMALL LETTER SIGMA - 0x03c4: 0x00ee, # GREEK SMALL LETTER TAU - 0x03c5: 0x00f2, # GREEK SMALL LETTER UPSILON - 0x03c6: 0x00f3, # GREEK SMALL LETTER PHI - 0x03c7: 0x00f4, # GREEK SMALL LETTER CHI - 0x03c8: 0x00f6, # GREEK SMALL LETTER PSI - 0x03c9: 0x00fa, # GREEK SMALL LETTER OMEGA - 0x03ca: 0x00a0, # GREEK SMALL LETTER IOTA WITH DIALYTIKA - 0x03cb: 0x00fb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA - 0x03cc: 0x00a2, # GREEK SMALL LETTER OMICRON WITH TONOS - 0x03cd: 0x00a3, # GREEK SMALL LETTER UPSILON WITH TONOS - 0x03ce: 0x00fd, # GREEK SMALL LETTER OMEGA WITH TONOS - 0x2015: 0x008e, # HORIZONTAL BAR - 0x2018: 0x008b, # LEFT SINGLE QUOTATION MARK - 0x2019: 0x008c, # RIGHT SINGLE QUOTATION MARK - 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL - 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL - 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT - 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT - 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL - 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL - 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT - 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT - 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2580: 0x00df, # UPPER HALF BLOCK - 0x2584: 0x00dc, # LOWER HALF BLOCK - 0x2588: 0x00db, # FULL BLOCK - 0x2591: 0x00b0, # LIGHT SHADE - 0x2592: 0x00b1, # MEDIUM SHADE - 0x2593: 0x00b2, # DARK SHADE - 0x25a0: 0x00fe, # BLACK SQUARE -} diff --git a/Python314_4_x86_Template/Lib/encodings/cp874.py b/Python314_4_x86_Template/Lib/encodings/cp874.py deleted file mode 100644 index 59bfcbc98..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp874.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp874 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP874.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp874', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\ufffe' # 0x81 -> UNDEFINED - '\ufffe' # 0x82 -> UNDEFINED - '\ufffe' # 0x83 -> UNDEFINED - '\ufffe' # 0x84 -> UNDEFINED - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\ufffe' # 0x86 -> UNDEFINED - '\ufffe' # 0x87 -> UNDEFINED - '\ufffe' # 0x88 -> UNDEFINED - '\ufffe' # 0x89 -> UNDEFINED - '\ufffe' # 0x8A -> UNDEFINED - '\ufffe' # 0x8B -> UNDEFINED - '\ufffe' # 0x8C -> UNDEFINED - '\ufffe' # 0x8D -> UNDEFINED - '\ufffe' # 0x8E -> UNDEFINED - '\ufffe' # 0x8F -> UNDEFINED - '\ufffe' # 0x90 -> UNDEFINED - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\ufffe' # 0x99 -> UNDEFINED - '\ufffe' # 0x9A -> UNDEFINED - '\ufffe' # 0x9B -> UNDEFINED - '\ufffe' # 0x9C -> UNDEFINED - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\ufffe' # 0x9F -> UNDEFINED - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI - '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI - '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT - '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI - '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON - '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG - '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU - '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN - '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING - '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG - '\u0e0b' # 0xAB -> THAI CHARACTER SO SO - '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE - '\u0e0d' # 0xAD -> THAI CHARACTER YO YING - '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA - '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK - '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN - '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO - '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO - '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN - '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK - '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO - '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG - '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN - '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG - '\u0e19' # 0xB9 -> THAI CHARACTER NO NU - '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI - '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA - '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG - '\u0e1d' # 0xBD -> THAI CHARACTER FO FA - '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN - '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN - '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO - '\u0e21' # 0xC1 -> THAI CHARACTER MO MA - '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK - '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA - '\u0e24' # 0xC4 -> THAI CHARACTER RU - '\u0e25' # 0xC5 -> THAI CHARACTER LO LING - '\u0e26' # 0xC6 -> THAI CHARACTER LU - '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN - '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA - '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI - '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA - '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP - '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA - '\u0e2d' # 0xCD -> THAI CHARACTER O ANG - '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK - '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI - '\u0e30' # 0xD0 -> THAI CHARACTER SARA A - '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT - '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA - '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM - '\u0e34' # 0xD4 -> THAI CHARACTER SARA I - '\u0e35' # 0xD5 -> THAI CHARACTER SARA II - '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE - '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE - '\u0e38' # 0xD8 -> THAI CHARACTER SARA U - '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU - '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU - '\ufffe' # 0xDB -> UNDEFINED - '\ufffe' # 0xDC -> UNDEFINED - '\ufffe' # 0xDD -> UNDEFINED - '\ufffe' # 0xDE -> UNDEFINED - '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT - '\u0e40' # 0xE0 -> THAI CHARACTER SARA E - '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE - '\u0e42' # 0xE2 -> THAI CHARACTER SARA O - '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN - '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI - '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO - '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK - '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU - '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK - '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO - '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI - '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA - '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT - '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT - '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN - '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN - '\u0e50' # 0xF0 -> THAI DIGIT ZERO - '\u0e51' # 0xF1 -> THAI DIGIT ONE - '\u0e52' # 0xF2 -> THAI DIGIT TWO - '\u0e53' # 0xF3 -> THAI DIGIT THREE - '\u0e54' # 0xF4 -> THAI DIGIT FOUR - '\u0e55' # 0xF5 -> THAI DIGIT FIVE - '\u0e56' # 0xF6 -> THAI DIGIT SIX - '\u0e57' # 0xF7 -> THAI DIGIT SEVEN - '\u0e58' # 0xF8 -> THAI DIGIT EIGHT - '\u0e59' # 0xF9 -> THAI DIGIT NINE - '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU - '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT - '\ufffe' # 0xFC -> UNDEFINED - '\ufffe' # 0xFD -> UNDEFINED - '\ufffe' # 0xFE -> UNDEFINED - '\ufffe' # 0xFF -> UNDEFINED -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp875.py b/Python314_4_x86_Template/Lib/encodings/cp875.py deleted file mode 100644 index c25a5a43b..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp875.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec cp875 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp875', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x9c' # 0x04 -> CONTROL - '\t' # 0x05 -> HORIZONTAL TABULATION - '\x86' # 0x06 -> CONTROL - '\x7f' # 0x07 -> DELETE - '\x97' # 0x08 -> CONTROL - '\x8d' # 0x09 -> CONTROL - '\x8e' # 0x0A -> CONTROL - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x9d' # 0x14 -> CONTROL - '\x85' # 0x15 -> CONTROL - '\x08' # 0x16 -> BACKSPACE - '\x87' # 0x17 -> CONTROL - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x92' # 0x1A -> CONTROL - '\x8f' # 0x1B -> CONTROL - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - '\x80' # 0x20 -> CONTROL - '\x81' # 0x21 -> CONTROL - '\x82' # 0x22 -> CONTROL - '\x83' # 0x23 -> CONTROL - '\x84' # 0x24 -> CONTROL - '\n' # 0x25 -> LINE FEED - '\x17' # 0x26 -> END OF TRANSMISSION BLOCK - '\x1b' # 0x27 -> ESCAPE - '\x88' # 0x28 -> CONTROL - '\x89' # 0x29 -> CONTROL - '\x8a' # 0x2A -> CONTROL - '\x8b' # 0x2B -> CONTROL - '\x8c' # 0x2C -> CONTROL - '\x05' # 0x2D -> ENQUIRY - '\x06' # 0x2E -> ACKNOWLEDGE - '\x07' # 0x2F -> BELL - '\x90' # 0x30 -> CONTROL - '\x91' # 0x31 -> CONTROL - '\x16' # 0x32 -> SYNCHRONOUS IDLE - '\x93' # 0x33 -> CONTROL - '\x94' # 0x34 -> CONTROL - '\x95' # 0x35 -> CONTROL - '\x96' # 0x36 -> CONTROL - '\x04' # 0x37 -> END OF TRANSMISSION - '\x98' # 0x38 -> CONTROL - '\x99' # 0x39 -> CONTROL - '\x9a' # 0x3A -> CONTROL - '\x9b' # 0x3B -> CONTROL - '\x14' # 0x3C -> DEVICE CONTROL FOUR - '\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE - '\x9e' # 0x3E -> CONTROL - '\x1a' # 0x3F -> SUBSTITUTE - ' ' # 0x40 -> SPACE - '\u0391' # 0x41 -> GREEK CAPITAL LETTER ALPHA - '\u0392' # 0x42 -> GREEK CAPITAL LETTER BETA - '\u0393' # 0x43 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0x44 -> GREEK CAPITAL LETTER DELTA - '\u0395' # 0x45 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0x46 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0x47 -> GREEK CAPITAL LETTER ETA - '\u0398' # 0x48 -> GREEK CAPITAL LETTER THETA - '\u0399' # 0x49 -> GREEK CAPITAL LETTER IOTA - '[' # 0x4A -> LEFT SQUARE BRACKET - '.' # 0x4B -> FULL STOP - '<' # 0x4C -> LESS-THAN SIGN - '(' # 0x4D -> LEFT PARENTHESIS - '+' # 0x4E -> PLUS SIGN - '!' # 0x4F -> EXCLAMATION MARK - '&' # 0x50 -> AMPERSAND - '\u039a' # 0x51 -> GREEK CAPITAL LETTER KAPPA - '\u039b' # 0x52 -> GREEK CAPITAL LETTER LAMDA - '\u039c' # 0x53 -> GREEK CAPITAL LETTER MU - '\u039d' # 0x54 -> GREEK CAPITAL LETTER NU - '\u039e' # 0x55 -> GREEK CAPITAL LETTER XI - '\u039f' # 0x56 -> GREEK CAPITAL LETTER OMICRON - '\u03a0' # 0x57 -> GREEK CAPITAL LETTER PI - '\u03a1' # 0x58 -> GREEK CAPITAL LETTER RHO - '\u03a3' # 0x59 -> GREEK CAPITAL LETTER SIGMA - ']' # 0x5A -> RIGHT SQUARE BRACKET - '$' # 0x5B -> DOLLAR SIGN - '*' # 0x5C -> ASTERISK - ')' # 0x5D -> RIGHT PARENTHESIS - ';' # 0x5E -> SEMICOLON - '^' # 0x5F -> CIRCUMFLEX ACCENT - '-' # 0x60 -> HYPHEN-MINUS - '/' # 0x61 -> SOLIDUS - '\u03a4' # 0x62 -> GREEK CAPITAL LETTER TAU - '\u03a5' # 0x63 -> GREEK CAPITAL LETTER UPSILON - '\u03a6' # 0x64 -> GREEK CAPITAL LETTER PHI - '\u03a7' # 0x65 -> GREEK CAPITAL LETTER CHI - '\u03a8' # 0x66 -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0x67 -> GREEK CAPITAL LETTER OMEGA - '\u03aa' # 0x68 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\u03ab' # 0x69 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '|' # 0x6A -> VERTICAL LINE - ',' # 0x6B -> COMMA - '%' # 0x6C -> PERCENT SIGN - '_' # 0x6D -> LOW LINE - '>' # 0x6E -> GREATER-THAN SIGN - '?' # 0x6F -> QUESTION MARK - '\xa8' # 0x70 -> DIAERESIS - '\u0386' # 0x71 -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\u0388' # 0x72 -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u0389' # 0x73 -> GREEK CAPITAL LETTER ETA WITH TONOS - '\xa0' # 0x74 -> NO-BREAK SPACE - '\u038a' # 0x75 -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\u038c' # 0x76 -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\u038e' # 0x77 -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u038f' # 0x78 -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '`' # 0x79 -> GRAVE ACCENT - ':' # 0x7A -> COLON - '#' # 0x7B -> NUMBER SIGN - '@' # 0x7C -> COMMERCIAL AT - "'" # 0x7D -> APOSTROPHE - '=' # 0x7E -> EQUALS SIGN - '"' # 0x7F -> QUOTATION MARK - '\u0385' # 0x80 -> GREEK DIALYTIKA TONOS - 'a' # 0x81 -> LATIN SMALL LETTER A - 'b' # 0x82 -> LATIN SMALL LETTER B - 'c' # 0x83 -> LATIN SMALL LETTER C - 'd' # 0x84 -> LATIN SMALL LETTER D - 'e' # 0x85 -> LATIN SMALL LETTER E - 'f' # 0x86 -> LATIN SMALL LETTER F - 'g' # 0x87 -> LATIN SMALL LETTER G - 'h' # 0x88 -> LATIN SMALL LETTER H - 'i' # 0x89 -> LATIN SMALL LETTER I - '\u03b1' # 0x8A -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0x8B -> GREEK SMALL LETTER BETA - '\u03b3' # 0x8C -> GREEK SMALL LETTER GAMMA - '\u03b4' # 0x8D -> GREEK SMALL LETTER DELTA - '\u03b5' # 0x8E -> GREEK SMALL LETTER EPSILON - '\u03b6' # 0x8F -> GREEK SMALL LETTER ZETA - '\xb0' # 0x90 -> DEGREE SIGN - 'j' # 0x91 -> LATIN SMALL LETTER J - 'k' # 0x92 -> LATIN SMALL LETTER K - 'l' # 0x93 -> LATIN SMALL LETTER L - 'm' # 0x94 -> LATIN SMALL LETTER M - 'n' # 0x95 -> LATIN SMALL LETTER N - 'o' # 0x96 -> LATIN SMALL LETTER O - 'p' # 0x97 -> LATIN SMALL LETTER P - 'q' # 0x98 -> LATIN SMALL LETTER Q - 'r' # 0x99 -> LATIN SMALL LETTER R - '\u03b7' # 0x9A -> GREEK SMALL LETTER ETA - '\u03b8' # 0x9B -> GREEK SMALL LETTER THETA - '\u03b9' # 0x9C -> GREEK SMALL LETTER IOTA - '\u03ba' # 0x9D -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0x9E -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0x9F -> GREEK SMALL LETTER MU - '\xb4' # 0xA0 -> ACUTE ACCENT - '~' # 0xA1 -> TILDE - 's' # 0xA2 -> LATIN SMALL LETTER S - 't' # 0xA3 -> LATIN SMALL LETTER T - 'u' # 0xA4 -> LATIN SMALL LETTER U - 'v' # 0xA5 -> LATIN SMALL LETTER V - 'w' # 0xA6 -> LATIN SMALL LETTER W - 'x' # 0xA7 -> LATIN SMALL LETTER X - 'y' # 0xA8 -> LATIN SMALL LETTER Y - 'z' # 0xA9 -> LATIN SMALL LETTER Z - '\u03bd' # 0xAA -> GREEK SMALL LETTER NU - '\u03be' # 0xAB -> GREEK SMALL LETTER XI - '\u03bf' # 0xAC -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0xAD -> GREEK SMALL LETTER PI - '\u03c1' # 0xAE -> GREEK SMALL LETTER RHO - '\u03c3' # 0xAF -> GREEK SMALL LETTER SIGMA - '\xa3' # 0xB0 -> POUND SIGN - '\u03ac' # 0xB1 -> GREEK SMALL LETTER ALPHA WITH TONOS - '\u03ad' # 0xB2 -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0xB3 -> GREEK SMALL LETTER ETA WITH TONOS - '\u03ca' # 0xB4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u03af' # 0xB5 -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03cc' # 0xB6 -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u03cd' # 0xB7 -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u03cb' # 0xB8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u03ce' # 0xB9 -> GREEK SMALL LETTER OMEGA WITH TONOS - '\u03c2' # 0xBA -> GREEK SMALL LETTER FINAL SIGMA - '\u03c4' # 0xBB -> GREEK SMALL LETTER TAU - '\u03c5' # 0xBC -> GREEK SMALL LETTER UPSILON - '\u03c6' # 0xBD -> GREEK SMALL LETTER PHI - '\u03c7' # 0xBE -> GREEK SMALL LETTER CHI - '\u03c8' # 0xBF -> GREEK SMALL LETTER PSI - '{' # 0xC0 -> LEFT CURLY BRACKET - 'A' # 0xC1 -> LATIN CAPITAL LETTER A - 'B' # 0xC2 -> LATIN CAPITAL LETTER B - 'C' # 0xC3 -> LATIN CAPITAL LETTER C - 'D' # 0xC4 -> LATIN CAPITAL LETTER D - 'E' # 0xC5 -> LATIN CAPITAL LETTER E - 'F' # 0xC6 -> LATIN CAPITAL LETTER F - 'G' # 0xC7 -> LATIN CAPITAL LETTER G - 'H' # 0xC8 -> LATIN CAPITAL LETTER H - 'I' # 0xC9 -> LATIN CAPITAL LETTER I - '\xad' # 0xCA -> SOFT HYPHEN - '\u03c9' # 0xCB -> GREEK SMALL LETTER OMEGA - '\u0390' # 0xCC -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - '\u03b0' # 0xCD -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - '\u2018' # 0xCE -> LEFT SINGLE QUOTATION MARK - '\u2015' # 0xCF -> HORIZONTAL BAR - '}' # 0xD0 -> RIGHT CURLY BRACKET - 'J' # 0xD1 -> LATIN CAPITAL LETTER J - 'K' # 0xD2 -> LATIN CAPITAL LETTER K - 'L' # 0xD3 -> LATIN CAPITAL LETTER L - 'M' # 0xD4 -> LATIN CAPITAL LETTER M - 'N' # 0xD5 -> LATIN CAPITAL LETTER N - 'O' # 0xD6 -> LATIN CAPITAL LETTER O - 'P' # 0xD7 -> LATIN CAPITAL LETTER P - 'Q' # 0xD8 -> LATIN CAPITAL LETTER Q - 'R' # 0xD9 -> LATIN CAPITAL LETTER R - '\xb1' # 0xDA -> PLUS-MINUS SIGN - '\xbd' # 0xDB -> VULGAR FRACTION ONE HALF - '\x1a' # 0xDC -> SUBSTITUTE - '\u0387' # 0xDD -> GREEK ANO TELEIA - '\u2019' # 0xDE -> RIGHT SINGLE QUOTATION MARK - '\xa6' # 0xDF -> BROKEN BAR - '\\' # 0xE0 -> REVERSE SOLIDUS - '\x1a' # 0xE1 -> SUBSTITUTE - 'S' # 0xE2 -> LATIN CAPITAL LETTER S - 'T' # 0xE3 -> LATIN CAPITAL LETTER T - 'U' # 0xE4 -> LATIN CAPITAL LETTER U - 'V' # 0xE5 -> LATIN CAPITAL LETTER V - 'W' # 0xE6 -> LATIN CAPITAL LETTER W - 'X' # 0xE7 -> LATIN CAPITAL LETTER X - 'Y' # 0xE8 -> LATIN CAPITAL LETTER Y - 'Z' # 0xE9 -> LATIN CAPITAL LETTER Z - '\xb2' # 0xEA -> SUPERSCRIPT TWO - '\xa7' # 0xEB -> SECTION SIGN - '\x1a' # 0xEC -> SUBSTITUTE - '\x1a' # 0xED -> SUBSTITUTE - '\xab' # 0xEE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xEF -> NOT SIGN - '0' # 0xF0 -> DIGIT ZERO - '1' # 0xF1 -> DIGIT ONE - '2' # 0xF2 -> DIGIT TWO - '3' # 0xF3 -> DIGIT THREE - '4' # 0xF4 -> DIGIT FOUR - '5' # 0xF5 -> DIGIT FIVE - '6' # 0xF6 -> DIGIT SIX - '7' # 0xF7 -> DIGIT SEVEN - '8' # 0xF8 -> DIGIT EIGHT - '9' # 0xF9 -> DIGIT NINE - '\xb3' # 0xFA -> SUPERSCRIPT THREE - '\xa9' # 0xFB -> COPYRIGHT SIGN - '\x1a' # 0xFC -> SUBSTITUTE - '\x1a' # 0xFD -> SUBSTITUTE - '\xbb' # 0xFE -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\x9f' # 0xFF -> CONTROL -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/cp932.py b/Python314_4_x86_Template/Lib/encodings/cp932.py deleted file mode 100644 index e01f59b71..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp932.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# cp932.py: Python Unicode Codec for CP932 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('cp932') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='cp932', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/cp949.py b/Python314_4_x86_Template/Lib/encodings/cp949.py deleted file mode 100644 index 627c87125..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp949.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# cp949.py: Python Unicode Codec for CP949 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_kr, codecs -import _multibytecodec as mbc - -codec = _codecs_kr.getcodec('cp949') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='cp949', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/cp950.py b/Python314_4_x86_Template/Lib/encodings/cp950.py deleted file mode 100644 index 39eec5ed0..000000000 --- a/Python314_4_x86_Template/Lib/encodings/cp950.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# cp950.py: Python Unicode Codec for CP950 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_tw, codecs -import _multibytecodec as mbc - -codec = _codecs_tw.getcodec('cp950') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='cp950', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/euc_jis_2004.py b/Python314_4_x86_Template/Lib/encodings/euc_jis_2004.py deleted file mode 100644 index 72b87aea6..000000000 --- a/Python314_4_x86_Template/Lib/encodings/euc_jis_2004.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# euc_jis_2004.py: Python Unicode Codec for EUC_JIS_2004 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('euc_jis_2004') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='euc_jis_2004', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/euc_jisx0213.py b/Python314_4_x86_Template/Lib/encodings/euc_jisx0213.py deleted file mode 100644 index cc47d0411..000000000 --- a/Python314_4_x86_Template/Lib/encodings/euc_jisx0213.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# euc_jisx0213.py: Python Unicode Codec for EUC_JISX0213 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('euc_jisx0213') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='euc_jisx0213', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/euc_jp.py b/Python314_4_x86_Template/Lib/encodings/euc_jp.py deleted file mode 100644 index 7bcbe4147..000000000 --- a/Python314_4_x86_Template/Lib/encodings/euc_jp.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# euc_jp.py: Python Unicode Codec for EUC_JP -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('euc_jp') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='euc_jp', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/euc_kr.py b/Python314_4_x86_Template/Lib/encodings/euc_kr.py deleted file mode 100644 index c1fb1260e..000000000 --- a/Python314_4_x86_Template/Lib/encodings/euc_kr.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# euc_kr.py: Python Unicode Codec for EUC_KR -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_kr, codecs -import _multibytecodec as mbc - -codec = _codecs_kr.getcodec('euc_kr') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='euc_kr', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/gb18030.py b/Python314_4_x86_Template/Lib/encodings/gb18030.py deleted file mode 100644 index 34fb6c366..000000000 --- a/Python314_4_x86_Template/Lib/encodings/gb18030.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# gb18030.py: Python Unicode Codec for GB18030 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_cn, codecs -import _multibytecodec as mbc - -codec = _codecs_cn.getcodec('gb18030') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='gb18030', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/gb2312.py b/Python314_4_x86_Template/Lib/encodings/gb2312.py deleted file mode 100644 index 3c3b837d6..000000000 --- a/Python314_4_x86_Template/Lib/encodings/gb2312.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# gb2312.py: Python Unicode Codec for GB2312 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_cn, codecs -import _multibytecodec as mbc - -codec = _codecs_cn.getcodec('gb2312') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='gb2312', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/gbk.py b/Python314_4_x86_Template/Lib/encodings/gbk.py deleted file mode 100644 index 1b45db898..000000000 --- a/Python314_4_x86_Template/Lib/encodings/gbk.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# gbk.py: Python Unicode Codec for GBK -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_cn, codecs -import _multibytecodec as mbc - -codec = _codecs_cn.getcodec('gbk') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='gbk', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/hex_codec.py b/Python314_4_x86_Template/Lib/encodings/hex_codec.py deleted file mode 100644 index 9fb107280..000000000 --- a/Python314_4_x86_Template/Lib/encodings/hex_codec.py +++ /dev/null @@ -1,55 +0,0 @@ -"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding. - -This codec de/encodes from bytes to bytes. - -Written by Marc-Andre Lemburg (mal@lemburg.com). -""" - -import codecs -import binascii - -### Codec APIs - -def hex_encode(input, errors='strict'): - assert errors == 'strict' - return (binascii.b2a_hex(input), len(input)) - -def hex_decode(input, errors='strict'): - assert errors == 'strict' - return (binascii.a2b_hex(input), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return hex_encode(input, errors) - def decode(self, input, errors='strict'): - return hex_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - assert self.errors == 'strict' - return binascii.b2a_hex(input) - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - assert self.errors == 'strict' - return binascii.a2b_hex(input) - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='hex', - encode=hex_encode, - decode=hex_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/hp_roman8.py b/Python314_4_x86_Template/Lib/encodings/hp_roman8.py deleted file mode 100644 index 58de1033c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/hp_roman8.py +++ /dev/null @@ -1,314 +0,0 @@ -""" Python Character Mapping Codec generated from 'hp_roman8.txt' with gencodec.py. - - Based on data from ftp://dkuug.dk/i18n/charmaps/HP-ROMAN8 (Keld Simonsen) - - Original source: LaserJet IIP Printer User's Manual HP part no - 33471-90901, Hewlet-Packard, June 1989. - - (Used with permission) - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='hp-roman8', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xc0' # 0xA1 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc2' # 0xA2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc8' # 0xA3 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xca' # 0xA4 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xA5 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xce' # 0xA6 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xA7 -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xb4' # 0xA8 -> ACUTE ACCENT - '\u02cb' # 0xA9 -> MODIFIER LETTER GRAVE ACCENT (MANDARIN CHINESE FOURTH TONE) - '\u02c6' # 0xAA -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\xa8' # 0xAB -> DIAERESIS - '\u02dc' # 0xAC -> SMALL TILDE - '\xd9' # 0xAD -> LATIN CAPITAL LETTER U WITH GRAVE - '\xdb' # 0xAE -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\u20a4' # 0xAF -> LIRA SIGN - '\xaf' # 0xB0 -> MACRON - '\xdd' # 0xB1 -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xfd' # 0xB2 -> LATIN SMALL LETTER Y WITH ACUTE - '\xb0' # 0xB3 -> DEGREE SIGN - '\xc7' # 0xB4 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xe7' # 0xB5 -> LATIN SMALL LETTER C WITH CEDILLA - '\xd1' # 0xB6 -> LATIN CAPITAL LETTER N WITH TILDE - '\xf1' # 0xB7 -> LATIN SMALL LETTER N WITH TILDE - '\xa1' # 0xB8 -> INVERTED EXCLAMATION MARK - '\xbf' # 0xB9 -> INVERTED QUESTION MARK - '\xa4' # 0xBA -> CURRENCY SIGN - '\xa3' # 0xBB -> POUND SIGN - '\xa5' # 0xBC -> YEN SIGN - '\xa7' # 0xBD -> SECTION SIGN - '\u0192' # 0xBE -> LATIN SMALL LETTER F WITH HOOK - '\xa2' # 0xBF -> CENT SIGN - '\xe2' # 0xC0 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xea' # 0xC1 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xf4' # 0xC2 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xfb' # 0xC3 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xe1' # 0xC4 -> LATIN SMALL LETTER A WITH ACUTE - '\xe9' # 0xC5 -> LATIN SMALL LETTER E WITH ACUTE - '\xf3' # 0xC6 -> LATIN SMALL LETTER O WITH ACUTE - '\xfa' # 0xC7 -> LATIN SMALL LETTER U WITH ACUTE - '\xe0' # 0xC8 -> LATIN SMALL LETTER A WITH GRAVE - '\xe8' # 0xC9 -> LATIN SMALL LETTER E WITH GRAVE - '\xf2' # 0xCA -> LATIN SMALL LETTER O WITH GRAVE - '\xf9' # 0xCB -> LATIN SMALL LETTER U WITH GRAVE - '\xe4' # 0xCC -> LATIN SMALL LETTER A WITH DIAERESIS - '\xeb' # 0xCD -> LATIN SMALL LETTER E WITH DIAERESIS - '\xf6' # 0xCE -> LATIN SMALL LETTER O WITH DIAERESIS - '\xfc' # 0xCF -> LATIN SMALL LETTER U WITH DIAERESIS - '\xc5' # 0xD0 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xee' # 0xD1 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xd8' # 0xD2 -> LATIN CAPITAL LETTER O WITH STROKE - '\xc6' # 0xD3 -> LATIN CAPITAL LETTER AE - '\xe5' # 0xD4 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xed' # 0xD5 -> LATIN SMALL LETTER I WITH ACUTE - '\xf8' # 0xD6 -> LATIN SMALL LETTER O WITH STROKE - '\xe6' # 0xD7 -> LATIN SMALL LETTER AE - '\xc4' # 0xD8 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xec' # 0xD9 -> LATIN SMALL LETTER I WITH GRAVE - '\xd6' # 0xDA -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0xDB -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xc9' # 0xDC -> LATIN CAPITAL LETTER E WITH ACUTE - '\xef' # 0xDD -> LATIN SMALL LETTER I WITH DIAERESIS - '\xdf' # 0xDE -> LATIN SMALL LETTER SHARP S (GERMAN) - '\xd4' # 0xDF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xc1' # 0xE0 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc3' # 0xE1 -> LATIN CAPITAL LETTER A WITH TILDE - '\xe3' # 0xE2 -> LATIN SMALL LETTER A WITH TILDE - '\xd0' # 0xE3 -> LATIN CAPITAL LETTER ETH (ICELANDIC) - '\xf0' # 0xE4 -> LATIN SMALL LETTER ETH (ICELANDIC) - '\xcd' # 0xE5 -> LATIN CAPITAL LETTER I WITH ACUTE - '\xcc' # 0xE6 -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xE7 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd2' # 0xE8 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd5' # 0xE9 -> LATIN CAPITAL LETTER O WITH TILDE - '\xf5' # 0xEA -> LATIN SMALL LETTER O WITH TILDE - '\u0160' # 0xEB -> LATIN CAPITAL LETTER S WITH CARON - '\u0161' # 0xEC -> LATIN SMALL LETTER S WITH CARON - '\xda' # 0xED -> LATIN CAPITAL LETTER U WITH ACUTE - '\u0178' # 0xEE -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xff' # 0xEF -> LATIN SMALL LETTER Y WITH DIAERESIS - '\xde' # 0xF0 -> LATIN CAPITAL LETTER THORN (ICELANDIC) - '\xfe' # 0xF1 -> LATIN SMALL LETTER THORN (ICELANDIC) - '\xb7' # 0xF2 -> MIDDLE DOT - '\xb5' # 0xF3 -> MICRO SIGN - '\xb6' # 0xF4 -> PILCROW SIGN - '\xbe' # 0xF5 -> VULGAR FRACTION THREE QUARTERS - '\u2014' # 0xF6 -> EM DASH - '\xbc' # 0xF7 -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xF8 -> VULGAR FRACTION ONE HALF - '\xaa' # 0xF9 -> FEMININE ORDINAL INDICATOR - '\xba' # 0xFA -> MASCULINE ORDINAL INDICATOR - '\xab' # 0xFB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u25a0' # 0xFC -> BLACK SQUARE - '\xbb' # 0xFD -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xb1' # 0xFE -> PLUS-MINUS SIGN - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/hz.py b/Python314_4_x86_Template/Lib/encodings/hz.py deleted file mode 100644 index 383442a3c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/hz.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# hz.py: Python Unicode Codec for HZ -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_cn, codecs -import _multibytecodec as mbc - -codec = _codecs_cn.getcodec('hz') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='hz', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/idna.py b/Python314_4_x86_Template/Lib/encodings/idna.py deleted file mode 100644 index 0c90b4c9f..000000000 --- a/Python314_4_x86_Template/Lib/encodings/idna.py +++ /dev/null @@ -1,387 +0,0 @@ -# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) - -import stringprep, re, codecs -from unicodedata import ucd_3_2_0 as unicodedata - -# IDNA section 3.1 -dots = re.compile("[\u002E\u3002\uFF0E\uFF61]") - -# IDNA section 5 -ace_prefix = b"xn--" -sace_prefix = "xn--" - -# This assumes query strings, so AllowUnassigned is true -def nameprep(label): # type: (str) -> str - # Map - newlabel = [] - for c in label: - if stringprep.in_table_b1(c): - # Map to nothing - continue - newlabel.append(stringprep.map_table_b2(c)) - label = "".join(newlabel) - - # Normalize - label = unicodedata.normalize("NFKC", label) - - # Prohibit - for i, c in enumerate(label): - if stringprep.in_table_c12(c) or \ - stringprep.in_table_c22(c) or \ - stringprep.in_table_c3(c) or \ - stringprep.in_table_c4(c) or \ - stringprep.in_table_c5(c) or \ - stringprep.in_table_c6(c) or \ - stringprep.in_table_c7(c) or \ - stringprep.in_table_c8(c) or \ - stringprep.in_table_c9(c): - raise UnicodeEncodeError("idna", label, i, i+1, f"Invalid character {c!r}") - - # Check bidi - RandAL = [stringprep.in_table_d1(x) for x in label] - if any(RandAL): - # There is a RandAL char in the string. Must perform further - # tests: - # 1) The characters in section 5.8 MUST be prohibited. - # This is table C.8, which was already checked - # 2) If a string contains any RandALCat character, the string - # MUST NOT contain any LCat character. - for i, x in enumerate(label): - if stringprep.in_table_d2(x): - raise UnicodeEncodeError("idna", label, i, i+1, - "Violation of BIDI requirement 2") - # 3) If a string contains any RandALCat character, a - # RandALCat character MUST be the first character of the - # string, and a RandALCat character MUST be the last - # character of the string. - if not RandAL[0]: - raise UnicodeEncodeError("idna", label, 0, 1, - "Violation of BIDI requirement 3") - if not RandAL[-1]: - raise UnicodeEncodeError("idna", label, len(label)-1, len(label), - "Violation of BIDI requirement 3") - - return label - -def ToASCII(label): # type: (str) -> bytes - try: - # Step 1: try ASCII - label_ascii = label.encode("ascii") - except UnicodeEncodeError: - pass - else: - # Skip to step 3: UseSTD3ASCIIRules is false, so - # Skip to step 8. - if 0 < len(label_ascii) < 64: - return label_ascii - if len(label) == 0: - raise UnicodeEncodeError("idna", label, 0, 1, "label empty") - else: - raise UnicodeEncodeError("idna", label, 0, len(label), "label too long") - - # Step 2: nameprep - label = nameprep(label) - - # Step 3: UseSTD3ASCIIRules is false - # Step 4: try ASCII - try: - label_ascii = label.encode("ascii") - except UnicodeEncodeError: - pass - else: - # Skip to step 8. - if 0 < len(label) < 64: - return label_ascii - if len(label) == 0: - raise UnicodeEncodeError("idna", label, 0, 1, "label empty") - else: - raise UnicodeEncodeError("idna", label, 0, len(label), "label too long") - - # Step 5: Check ACE prefix - if label.lower().startswith(sace_prefix): - raise UnicodeEncodeError( - "idna", label, 0, len(sace_prefix), "Label starts with ACE prefix") - - # Step 6: Encode with PUNYCODE - label_ascii = label.encode("punycode") - - # Step 7: Prepend ACE prefix - label_ascii = ace_prefix + label_ascii - - # Step 8: Check size - # do not check for empty as we prepend ace_prefix. - if len(label_ascii) < 64: - return label_ascii - raise UnicodeEncodeError("idna", label, 0, len(label), "label too long") - -def ToUnicode(label): - if len(label) > 1024: - # Protection from https://github.com/python/cpython/issues/98433. - # https://datatracker.ietf.org/doc/html/rfc5894#section-6 - # doesn't specify a label size limit prior to NAMEPREP. But having - # one makes practical sense. - # This leaves ample room for nameprep() to remove Nothing characters - # per https://www.rfc-editor.org/rfc/rfc3454#section-3.1 while still - # preventing us from wasting time decoding a big thing that'll just - # hit the actual <= 63 length limit in Step 6. - if isinstance(label, str): - label = label.encode("utf-8", errors="backslashreplace") - raise UnicodeDecodeError("idna", label, 0, len(label), "label way too long") - # Step 1: Check for ASCII - if isinstance(label, bytes): - pure_ascii = True - else: - try: - label = label.encode("ascii") - pure_ascii = True - except UnicodeEncodeError: - pure_ascii = False - if not pure_ascii: - assert isinstance(label, str) - # Step 2: Perform nameprep - label = nameprep(label) - # It doesn't say this, but apparently, it should be ASCII now - try: - label = label.encode("ascii") - except UnicodeEncodeError as exc: - raise UnicodeEncodeError("idna", label, exc.start, exc.end, - "Invalid character in IDN label") - # Step 3: Check for ACE prefix - assert isinstance(label, bytes) - if not label.lower().startswith(ace_prefix): - return str(label, "ascii") - - # Step 4: Remove ACE prefix - label1 = label[len(ace_prefix):] - - # Step 5: Decode using PUNYCODE - try: - result = label1.decode("punycode") - except UnicodeDecodeError as exc: - offset = len(ace_prefix) - raise UnicodeDecodeError("idna", label, offset+exc.start, offset+exc.end, exc.reason) - - # Step 6: Apply ToASCII - label2 = ToASCII(result) - - # Step 7: Compare the result of step 6 with the one of step 3 - # label2 will already be in lower case. - if str(label, "ascii").lower() != str(label2, "ascii"): - raise UnicodeDecodeError("idna", label, 0, len(label), - f"IDNA does not round-trip, '{label!r}' != '{label2!r}'") - - # Step 8: return the result of step 5 - return result - -### Codec APIs - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - - if errors != 'strict': - # IDNA is quite clear that implementations must be strict - raise UnicodeError(f"Unsupported error handling: {errors}") - - if not input: - return b'', 0 - - try: - result = input.encode('ascii') - except UnicodeEncodeError: - pass - else: - # ASCII name: fast path - labels = result.split(b'.') - for i, label in enumerate(labels[:-1]): - if len(label) == 0: - offset = sum(len(l) for l in labels[:i]) + i - raise UnicodeEncodeError("idna", input, offset, offset+1, - "label empty") - for i, label in enumerate(labels): - if len(label) >= 64: - offset = sum(len(l) for l in labels[:i]) + i - raise UnicodeEncodeError("idna", input, offset, offset+len(label), - "label too long") - return result, len(input) - - result = bytearray() - labels = dots.split(input) - if labels and not labels[-1]: - trailing_dot = b'.' - del labels[-1] - else: - trailing_dot = b'' - for i, label in enumerate(labels): - if result: - # Join with U+002E - result.extend(b'.') - try: - result.extend(ToASCII(label)) - except (UnicodeEncodeError, UnicodeDecodeError) as exc: - offset = sum(len(l) for l in labels[:i]) + i - raise UnicodeEncodeError( - "idna", - input, - offset + exc.start, - offset + exc.end, - exc.reason, - ) - return bytes(result+trailing_dot), len(input) - - def decode(self, input, errors='strict'): - - if errors != 'strict': - raise UnicodeError(f"Unsupported error handling: {errors}") - - if not input: - return "", 0 - - # IDNA allows decoding to operate on Unicode strings, too. - if not isinstance(input, bytes): - # XXX obviously wrong, see #3232 - input = bytes(input) - - if ace_prefix not in input.lower(): - # Fast path - try: - return input.decode('ascii'), len(input) - except UnicodeDecodeError: - pass - - labels = input.split(b".") - - if labels and len(labels[-1]) == 0: - trailing_dot = '.' - del labels[-1] - else: - trailing_dot = '' - - result = [] - for i, label in enumerate(labels): - try: - u_label = ToUnicode(label) - except (UnicodeEncodeError, UnicodeDecodeError) as exc: - offset = sum(len(x) for x in labels[:i]) + len(labels[:i]) - raise UnicodeDecodeError( - "idna", input, offset+exc.start, offset+exc.end, exc.reason) - else: - result.append(u_label) - - return ".".join(result)+trailing_dot, len(input) - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, input, errors, final): - if errors != 'strict': - # IDNA is quite clear that implementations must be strict - raise UnicodeError(f"Unsupported error handling: {errors}") - - if not input: - return (b'', 0) - - labels = dots.split(input) - trailing_dot = b'' - if labels: - if not labels[-1]: - trailing_dot = b'.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = b'.' - - result = bytearray() - size = 0 - for label in labels: - if size: - # Join with U+002E - result.extend(b'.') - size += 1 - try: - result.extend(ToASCII(label)) - except (UnicodeEncodeError, UnicodeDecodeError) as exc: - raise UnicodeEncodeError( - "idna", - input, - size + exc.start, - size + exc.end, - exc.reason, - ) - size += len(label) - - result += trailing_dot - size += len(trailing_dot) - return (bytes(result), size) - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, input, errors, final): - if errors != 'strict': - raise UnicodeError(f"Unsupported error handling: {errors}") - - if not input: - return ("", 0) - - # IDNA allows decoding to operate on Unicode strings, too. - if isinstance(input, str): - labels = dots.split(input) - else: - # Must be ASCII string - try: - input = str(input, "ascii") - except (UnicodeEncodeError, UnicodeDecodeError) as exc: - raise UnicodeDecodeError("idna", input, - exc.start, exc.end, exc.reason) - labels = input.split(".") - - trailing_dot = '' - if labels: - if not labels[-1]: - trailing_dot = '.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = '.' - - result = [] - size = 0 - for label in labels: - try: - u_label = ToUnicode(label) - except (UnicodeEncodeError, UnicodeDecodeError) as exc: - raise UnicodeDecodeError( - "idna", - input.encode("ascii", errors="backslashreplace"), - size + exc.start, - size + exc.end, - exc.reason, - ) - else: - result.append(u_label) - if size: - size += 1 - size += len(label) - - result = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='idna', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp.py deleted file mode 100644 index ab0406069..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp.py: Python Unicode Codec for ISO2022_JP -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_1.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp_1.py deleted file mode 100644 index 997044dc3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_1.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp_1.py: Python Unicode Codec for ISO2022_JP_1 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp_1') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp_1', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2.py deleted file mode 100644 index 9106bf762..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp_2.py: Python Unicode Codec for ISO2022_JP_2 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp_2') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp_2', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2004.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2004.py deleted file mode 100644 index 40198bf09..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_2004.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp_2004.py: Python Unicode Codec for ISO2022_JP_2004 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp_2004') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp_2004', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_3.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp_3.py deleted file mode 100644 index 346e08bec..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_3.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp_3.py: Python Unicode Codec for ISO2022_JP_3 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp_3') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp_3', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_ext.py b/Python314_4_x86_Template/Lib/encodings/iso2022_jp_ext.py deleted file mode 100644 index 752bab981..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_jp_ext.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_jp_ext.py: Python Unicode Codec for ISO2022_JP_EXT -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_jp_ext') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_jp_ext', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso2022_kr.py b/Python314_4_x86_Template/Lib/encodings/iso2022_kr.py deleted file mode 100644 index bf7018763..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso2022_kr.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# iso2022_kr.py: Python Unicode Codec for ISO2022_KR -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_iso2022, codecs -import _multibytecodec as mbc - -codec = _codecs_iso2022.getcodec('iso2022_kr') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='iso2022_kr', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_1.py b/Python314_4_x86_Template/Lib/encodings/iso8859_1.py deleted file mode 100644 index 8cfc01fe1..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_1.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_1 generated from 'MAPPINGS/ISO8859/8859-1.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-1', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_10.py b/Python314_4_x86_Template/Lib/encodings/iso8859_10.py deleted file mode 100644 index b4fb0419c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_10.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_10 generated from 'MAPPINGS/ISO8859/8859-10.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-10', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u0112' # 0xA2 -> LATIN CAPITAL LETTER E WITH MACRON - '\u0122' # 0xA3 -> LATIN CAPITAL LETTER G WITH CEDILLA - '\u012a' # 0xA4 -> LATIN CAPITAL LETTER I WITH MACRON - '\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE - '\u0136' # 0xA6 -> LATIN CAPITAL LETTER K WITH CEDILLA - '\xa7' # 0xA7 -> SECTION SIGN - '\u013b' # 0xA8 -> LATIN CAPITAL LETTER L WITH CEDILLA - '\u0110' # 0xA9 -> LATIN CAPITAL LETTER D WITH STROKE - '\u0160' # 0xAA -> LATIN CAPITAL LETTER S WITH CARON - '\u0166' # 0xAB -> LATIN CAPITAL LETTER T WITH STROKE - '\u017d' # 0xAC -> LATIN CAPITAL LETTER Z WITH CARON - '\xad' # 0xAD -> SOFT HYPHEN - '\u016a' # 0xAE -> LATIN CAPITAL LETTER U WITH MACRON - '\u014a' # 0xAF -> LATIN CAPITAL LETTER ENG - '\xb0' # 0xB0 -> DEGREE SIGN - '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK - '\u0113' # 0xB2 -> LATIN SMALL LETTER E WITH MACRON - '\u0123' # 0xB3 -> LATIN SMALL LETTER G WITH CEDILLA - '\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON - '\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE - '\u0137' # 0xB6 -> LATIN SMALL LETTER K WITH CEDILLA - '\xb7' # 0xB7 -> MIDDLE DOT - '\u013c' # 0xB8 -> LATIN SMALL LETTER L WITH CEDILLA - '\u0111' # 0xB9 -> LATIN SMALL LETTER D WITH STROKE - '\u0161' # 0xBA -> LATIN SMALL LETTER S WITH CARON - '\u0167' # 0xBB -> LATIN SMALL LETTER T WITH STROKE - '\u017e' # 0xBC -> LATIN SMALL LETTER Z WITH CARON - '\u2015' # 0xBD -> HORIZONTAL BAR - '\u016b' # 0xBE -> LATIN SMALL LETTER U WITH MACRON - '\u014b' # 0xBF -> LATIN SMALL LETTER ENG - '\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) - '\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA - '\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\u0168' # 0xD7 -> LATIN CAPITAL LETTER U WITH TILDE - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) - '\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) - '\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA - '\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\u0169' # 0xF7 -> LATIN SMALL LETTER U WITH TILDE - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) - '\u0138' # 0xFF -> LATIN SMALL LETTER KRA -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_11.py b/Python314_4_x86_Template/Lib/encodings/iso8859_11.py deleted file mode 100644 index c7258ecf4..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_11.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_11 generated from 'MAPPINGS/ISO8859/8859-11.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-11', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI - '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI - '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT - '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI - '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON - '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG - '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU - '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN - '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING - '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG - '\u0e0b' # 0xAB -> THAI CHARACTER SO SO - '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE - '\u0e0d' # 0xAD -> THAI CHARACTER YO YING - '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA - '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK - '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN - '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO - '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO - '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN - '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK - '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO - '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG - '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN - '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG - '\u0e19' # 0xB9 -> THAI CHARACTER NO NU - '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI - '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA - '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG - '\u0e1d' # 0xBD -> THAI CHARACTER FO FA - '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN - '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN - '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO - '\u0e21' # 0xC1 -> THAI CHARACTER MO MA - '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK - '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA - '\u0e24' # 0xC4 -> THAI CHARACTER RU - '\u0e25' # 0xC5 -> THAI CHARACTER LO LING - '\u0e26' # 0xC6 -> THAI CHARACTER LU - '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN - '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA - '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI - '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA - '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP - '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA - '\u0e2d' # 0xCD -> THAI CHARACTER O ANG - '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK - '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI - '\u0e30' # 0xD0 -> THAI CHARACTER SARA A - '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT - '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA - '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM - '\u0e34' # 0xD4 -> THAI CHARACTER SARA I - '\u0e35' # 0xD5 -> THAI CHARACTER SARA II - '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE - '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE - '\u0e38' # 0xD8 -> THAI CHARACTER SARA U - '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU - '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT - '\u0e40' # 0xE0 -> THAI CHARACTER SARA E - '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE - '\u0e42' # 0xE2 -> THAI CHARACTER SARA O - '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN - '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI - '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO - '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK - '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU - '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK - '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO - '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI - '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA - '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT - '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT - '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN - '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN - '\u0e50' # 0xF0 -> THAI DIGIT ZERO - '\u0e51' # 0xF1 -> THAI DIGIT ONE - '\u0e52' # 0xF2 -> THAI DIGIT TWO - '\u0e53' # 0xF3 -> THAI DIGIT THREE - '\u0e54' # 0xF4 -> THAI DIGIT FOUR - '\u0e55' # 0xF5 -> THAI DIGIT FIVE - '\u0e56' # 0xF6 -> THAI DIGIT SIX - '\u0e57' # 0xF7 -> THAI DIGIT SEVEN - '\u0e58' # 0xF8 -> THAI DIGIT EIGHT - '\u0e59' # 0xF9 -> THAI DIGIT NINE - '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU - '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_13.py b/Python314_4_x86_Template/Lib/encodings/iso8859_13.py deleted file mode 100644 index 6f8eab2b8..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_13.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_13 generated from 'MAPPINGS/ISO8859/8859-13.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-13', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u201d' # 0xA1 -> RIGHT DOUBLE QUOTATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xc6' # 0xAF -> LATIN CAPITAL LETTER AE - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\u201c' # 0xB4 -> LEFT DOUBLE QUOTATION MARK - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xe6' # 0xBF -> LATIN SMALL LETTER AE - '\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK - '\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON - '\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK - '\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE - '\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA - '\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA - '\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON - '\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA - '\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON - '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK - '\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE - '\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE - '\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) - '\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK - '\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK - '\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON - '\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK - '\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE - '\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE - '\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA - '\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA - '\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON - '\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA - '\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON - '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE - '\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK - '\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE - '\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE - '\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON - '\u2019' # 0xFF -> RIGHT SINGLE QUOTATION MARK -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_14.py b/Python314_4_x86_Template/Lib/encodings/iso8859_14.py deleted file mode 100644 index 7568d4ee1..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_14.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_14 generated from 'MAPPINGS/ISO8859/8859-14.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-14', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u1e02' # 0xA1 -> LATIN CAPITAL LETTER B WITH DOT ABOVE - '\u1e03' # 0xA2 -> LATIN SMALL LETTER B WITH DOT ABOVE - '\xa3' # 0xA3 -> POUND SIGN - '\u010a' # 0xA4 -> LATIN CAPITAL LETTER C WITH DOT ABOVE - '\u010b' # 0xA5 -> LATIN SMALL LETTER C WITH DOT ABOVE - '\u1e0a' # 0xA6 -> LATIN CAPITAL LETTER D WITH DOT ABOVE - '\xa7' # 0xA7 -> SECTION SIGN - '\u1e80' # 0xA8 -> LATIN CAPITAL LETTER W WITH GRAVE - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u1e82' # 0xAA -> LATIN CAPITAL LETTER W WITH ACUTE - '\u1e0b' # 0xAB -> LATIN SMALL LETTER D WITH DOT ABOVE - '\u1ef2' # 0xAC -> LATIN CAPITAL LETTER Y WITH GRAVE - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\u0178' # 0xAF -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u1e1e' # 0xB0 -> LATIN CAPITAL LETTER F WITH DOT ABOVE - '\u1e1f' # 0xB1 -> LATIN SMALL LETTER F WITH DOT ABOVE - '\u0120' # 0xB2 -> LATIN CAPITAL LETTER G WITH DOT ABOVE - '\u0121' # 0xB3 -> LATIN SMALL LETTER G WITH DOT ABOVE - '\u1e40' # 0xB4 -> LATIN CAPITAL LETTER M WITH DOT ABOVE - '\u1e41' # 0xB5 -> LATIN SMALL LETTER M WITH DOT ABOVE - '\xb6' # 0xB6 -> PILCROW SIGN - '\u1e56' # 0xB7 -> LATIN CAPITAL LETTER P WITH DOT ABOVE - '\u1e81' # 0xB8 -> LATIN SMALL LETTER W WITH GRAVE - '\u1e57' # 0xB9 -> LATIN SMALL LETTER P WITH DOT ABOVE - '\u1e83' # 0xBA -> LATIN SMALL LETTER W WITH ACUTE - '\u1e60' # 0xBB -> LATIN CAPITAL LETTER S WITH DOT ABOVE - '\u1ef3' # 0xBC -> LATIN SMALL LETTER Y WITH GRAVE - '\u1e84' # 0xBD -> LATIN CAPITAL LETTER W WITH DIAERESIS - '\u1e85' # 0xBE -> LATIN SMALL LETTER W WITH DIAERESIS - '\u1e61' # 0xBF -> LATIN SMALL LETTER S WITH DOT ABOVE - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u0174' # 0xD0 -> LATIN CAPITAL LETTER W WITH CIRCUMFLEX - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\u1e6a' # 0xD7 -> LATIN CAPITAL LETTER T WITH DOT ABOVE - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\u0176' # 0xDE -> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u0175' # 0xF0 -> LATIN SMALL LETTER W WITH CIRCUMFLEX - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\u1e6b' # 0xF7 -> LATIN SMALL LETTER T WITH DOT ABOVE - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\u0177' # 0xFE -> LATIN SMALL LETTER Y WITH CIRCUMFLEX - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_15.py b/Python314_4_x86_Template/Lib/encodings/iso8859_15.py deleted file mode 100644 index 43bdecd44..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_15.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_15 generated from 'MAPPINGS/ISO8859/8859-15.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-15', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\u20ac' # 0xA4 -> EURO SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON - '\xa7' # 0xA7 -> SECTION SIGN - '\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xBD -> LATIN SMALL LIGATURE OE - '\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0xFE -> LATIN SMALL LETTER THORN - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_16.py b/Python314_4_x86_Template/Lib/encodings/iso8859_16.py deleted file mode 100644 index e70c96e33..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_16.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_16 generated from 'MAPPINGS/ISO8859/8859-16.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-16', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u0105' # 0xA2 -> LATIN SMALL LETTER A WITH OGONEK - '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE - '\u20ac' # 0xA4 -> EURO SIGN - '\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK - '\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON - '\xa7' # 0xA7 -> SECTION SIGN - '\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u0218' # 0xAA -> LATIN CAPITAL LETTER S WITH COMMA BELOW - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE - '\xad' # 0xAD -> SOFT HYPHEN - '\u017a' # 0xAE -> LATIN SMALL LETTER Z WITH ACUTE - '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u010c' # 0xB2 -> LATIN CAPITAL LETTER C WITH CARON - '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE - '\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON - '\u201d' # 0xB5 -> RIGHT DOUBLE QUOTATION MARK - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON - '\u010d' # 0xB9 -> LATIN SMALL LETTER C WITH CARON - '\u0219' # 0xBA -> LATIN SMALL LETTER S WITH COMMA BELOW - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xBD -> LATIN SMALL LIGATURE OE - '\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u0106' # 0xC5 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\u015a' # 0xD7 -> LATIN CAPITAL LETTER S WITH ACUTE - '\u0170' # 0xD8 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0118' # 0xDD -> LATIN CAPITAL LETTER E WITH OGONEK - '\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u0107' # 0xE5 -> LATIN SMALL LETTER C WITH ACUTE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\u015b' # 0xF7 -> LATIN SMALL LETTER S WITH ACUTE - '\u0171' # 0xF8 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u0119' # 0xFD -> LATIN SMALL LETTER E WITH OGONEK - '\u021b' # 0xFE -> LATIN SMALL LETTER T WITH COMMA BELOW - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_2.py b/Python314_4_x86_Template/Lib/encodings/iso8859_2.py deleted file mode 100644 index 3698747b4..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_2.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_2 generated from 'MAPPINGS/ISO8859/8859-2.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-2', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u02d8' # 0xA2 -> BREVE - '\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u013d' # 0xA5 -> LATIN CAPITAL LETTER L WITH CARON - '\u015a' # 0xA6 -> LATIN CAPITAL LETTER S WITH ACUTE - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON - '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA - '\u0164' # 0xAB -> LATIN CAPITAL LETTER T WITH CARON - '\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE - '\xad' # 0xAD -> SOFT HYPHEN - '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON - '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\xb0' # 0xB0 -> DEGREE SIGN - '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK - '\u02db' # 0xB2 -> OGONEK - '\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\u013e' # 0xB5 -> LATIN SMALL LETTER L WITH CARON - '\u015b' # 0xB6 -> LATIN SMALL LETTER S WITH ACUTE - '\u02c7' # 0xB7 -> CARON - '\xb8' # 0xB8 -> CEDILLA - '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON - '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA - '\u0165' # 0xBB -> LATIN SMALL LETTER T WITH CARON - '\u017a' # 0xBC -> LATIN SMALL LETTER Z WITH ACUTE - '\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT - '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON - '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE - '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON - '\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE - '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE - '\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON - '\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA - '\u02d9' # 0xFF -> DOT ABOVE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_3.py b/Python314_4_x86_Template/Lib/encodings/iso8859_3.py deleted file mode 100644 index 96d3063ea..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_3.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_3 generated from 'MAPPINGS/ISO8859/8859-3.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-3', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0126' # 0xA1 -> LATIN CAPITAL LETTER H WITH STROKE - '\u02d8' # 0xA2 -> BREVE - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\ufffe' - '\u0124' # 0xA6 -> LATIN CAPITAL LETTER H WITH CIRCUMFLEX - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\u0130' # 0xA9 -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA - '\u011e' # 0xAB -> LATIN CAPITAL LETTER G WITH BREVE - '\u0134' # 0xAC -> LATIN CAPITAL LETTER J WITH CIRCUMFLEX - '\xad' # 0xAD -> SOFT HYPHEN - '\ufffe' - '\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\xb0' # 0xB0 -> DEGREE SIGN - '\u0127' # 0xB1 -> LATIN SMALL LETTER H WITH STROKE - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\u0125' # 0xB6 -> LATIN SMALL LETTER H WITH CIRCUMFLEX - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\u0131' # 0xB9 -> LATIN SMALL LETTER DOTLESS I - '\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA - '\u011f' # 0xBB -> LATIN SMALL LETTER G WITH BREVE - '\u0135' # 0xBC -> LATIN SMALL LETTER J WITH CIRCUMFLEX - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\ufffe' - '\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\ufffe' - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u010a' # 0xC5 -> LATIN CAPITAL LETTER C WITH DOT ABOVE - '\u0108' # 0xC6 -> LATIN CAPITAL LETTER C WITH CIRCUMFLEX - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\ufffe' - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0120' # 0xD5 -> LATIN CAPITAL LETTER G WITH DOT ABOVE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\u011c' # 0xD8 -> LATIN CAPITAL LETTER G WITH CIRCUMFLEX - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u016c' # 0xDD -> LATIN CAPITAL LETTER U WITH BREVE - '\u015c' # 0xDE -> LATIN CAPITAL LETTER S WITH CIRCUMFLEX - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\ufffe' - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\u010b' # 0xE5 -> LATIN SMALL LETTER C WITH DOT ABOVE - '\u0109' # 0xE6 -> LATIN SMALL LETTER C WITH CIRCUMFLEX - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\ufffe' - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\u0121' # 0xF5 -> LATIN SMALL LETTER G WITH DOT ABOVE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\u011d' # 0xF8 -> LATIN SMALL LETTER G WITH CIRCUMFLEX - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u016d' # 0xFD -> LATIN SMALL LETTER U WITH BREVE - '\u015d' # 0xFE -> LATIN SMALL LETTER S WITH CIRCUMFLEX - '\u02d9' # 0xFF -> DOT ABOVE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_4.py b/Python314_4_x86_Template/Lib/encodings/iso8859_4.py deleted file mode 100644 index 65c1e00f3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_4.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_4 generated from 'MAPPINGS/ISO8859/8859-4.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-4', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK - '\u0138' # 0xA2 -> LATIN SMALL LETTER KRA - '\u0156' # 0xA3 -> LATIN CAPITAL LETTER R WITH CEDILLA - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE - '\u013b' # 0xA6 -> LATIN CAPITAL LETTER L WITH CEDILLA - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON - '\u0112' # 0xAA -> LATIN CAPITAL LETTER E WITH MACRON - '\u0122' # 0xAB -> LATIN CAPITAL LETTER G WITH CEDILLA - '\u0166' # 0xAC -> LATIN CAPITAL LETTER T WITH STROKE - '\xad' # 0xAD -> SOFT HYPHEN - '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK - '\u02db' # 0xB2 -> OGONEK - '\u0157' # 0xB3 -> LATIN SMALL LETTER R WITH CEDILLA - '\xb4' # 0xB4 -> ACUTE ACCENT - '\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE - '\u013c' # 0xB6 -> LATIN SMALL LETTER L WITH CEDILLA - '\u02c7' # 0xB7 -> CARON - '\xb8' # 0xB8 -> CEDILLA - '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON - '\u0113' # 0xBA -> LATIN SMALL LETTER E WITH MACRON - '\u0123' # 0xBB -> LATIN SMALL LETTER G WITH CEDILLA - '\u0167' # 0xBC -> LATIN SMALL LETTER T WITH STROKE - '\u014a' # 0xBD -> LATIN CAPITAL LETTER ENG - '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON - '\u014b' # 0xBF -> LATIN SMALL LETTER ENG - '\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\u012a' # 0xCF -> LATIN CAPITAL LETTER I WITH MACRON - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA - '\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON - '\u0136' # 0xD3 -> LATIN CAPITAL LETTER K WITH CEDILLA - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0168' # 0xDD -> LATIN CAPITAL LETTER U WITH TILDE - '\u016a' # 0xDE -> LATIN CAPITAL LETTER U WITH MACRON - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\u012b' # 0xEF -> LATIN SMALL LETTER I WITH MACRON - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA - '\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON - '\u0137' # 0xF3 -> LATIN SMALL LETTER K WITH CEDILLA - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u0169' # 0xFD -> LATIN SMALL LETTER U WITH TILDE - '\u016b' # 0xFE -> LATIN SMALL LETTER U WITH MACRON - '\u02d9' # 0xFF -> DOT ABOVE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_5.py b/Python314_4_x86_Template/Lib/encodings/iso8859_5.py deleted file mode 100644 index a3c868a50..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_5.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_5 generated from 'MAPPINGS/ISO8859/8859-5.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-5', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u0401' # 0xA1 -> CYRILLIC CAPITAL LETTER IO - '\u0402' # 0xA2 -> CYRILLIC CAPITAL LETTER DJE - '\u0403' # 0xA3 -> CYRILLIC CAPITAL LETTER GJE - '\u0404' # 0xA4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u0405' # 0xA5 -> CYRILLIC CAPITAL LETTER DZE - '\u0406' # 0xA6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0407' # 0xA7 -> CYRILLIC CAPITAL LETTER YI - '\u0408' # 0xA8 -> CYRILLIC CAPITAL LETTER JE - '\u0409' # 0xA9 -> CYRILLIC CAPITAL LETTER LJE - '\u040a' # 0xAA -> CYRILLIC CAPITAL LETTER NJE - '\u040b' # 0xAB -> CYRILLIC CAPITAL LETTER TSHE - '\u040c' # 0xAC -> CYRILLIC CAPITAL LETTER KJE - '\xad' # 0xAD -> SOFT HYPHEN - '\u040e' # 0xAE -> CYRILLIC CAPITAL LETTER SHORT U - '\u040f' # 0xAF -> CYRILLIC CAPITAL LETTER DZHE - '\u0410' # 0xB0 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xB1 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0xB2 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0xB3 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0xB4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xB5 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0xB6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0xB7 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0xB8 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xB9 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xBA -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xBB -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xBC -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xBD -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xBE -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xBF -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0xC0 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xC1 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xC2 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xC3 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0xC4 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0xC5 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0xC6 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0xC7 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0xC8 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0xC9 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0xCA -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0xCB -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0xCC -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0xCD -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0xCE -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0xCF -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0xD0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xD1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0xD2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0xD3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0xD4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xD5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0xD7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0xD8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xD9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xDA -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xDB -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xDC -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xDD -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xDE -> CYRILLIC SMALL LETTER O - '\u043f' # 0xDF -> CYRILLIC SMALL LETTER PE - '\u0440' # 0xE0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xE1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xE2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xE3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0xE4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0xE5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0xE6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0xE7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0xE8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0xE9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0xEA -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0xEB -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0xEC -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0xED -> CYRILLIC SMALL LETTER E - '\u044e' # 0xEE -> CYRILLIC SMALL LETTER YU - '\u044f' # 0xEF -> CYRILLIC SMALL LETTER YA - '\u2116' # 0xF0 -> NUMERO SIGN - '\u0451' # 0xF1 -> CYRILLIC SMALL LETTER IO - '\u0452' # 0xF2 -> CYRILLIC SMALL LETTER DJE - '\u0453' # 0xF3 -> CYRILLIC SMALL LETTER GJE - '\u0454' # 0xF4 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u0455' # 0xF5 -> CYRILLIC SMALL LETTER DZE - '\u0456' # 0xF6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0457' # 0xF7 -> CYRILLIC SMALL LETTER YI - '\u0458' # 0xF8 -> CYRILLIC SMALL LETTER JE - '\u0459' # 0xF9 -> CYRILLIC SMALL LETTER LJE - '\u045a' # 0xFA -> CYRILLIC SMALL LETTER NJE - '\u045b' # 0xFB -> CYRILLIC SMALL LETTER TSHE - '\u045c' # 0xFC -> CYRILLIC SMALL LETTER KJE - '\xa7' # 0xFD -> SECTION SIGN - '\u045e' # 0xFE -> CYRILLIC SMALL LETTER SHORT U - '\u045f' # 0xFF -> CYRILLIC SMALL LETTER DZHE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_6.py b/Python314_4_x86_Template/Lib/encodings/iso8859_6.py deleted file mode 100644 index b02ade6ea..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_6.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_6 generated from 'MAPPINGS/ISO8859/8859-6.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-6', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\ufffe' - '\ufffe' - '\ufffe' - '\xa4' # 0xA4 -> CURRENCY SIGN - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u060c' # 0xAC -> ARABIC COMMA - '\xad' # 0xAD -> SOFT HYPHEN - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u061b' # 0xBB -> ARABIC SEMICOLON - '\ufffe' - '\ufffe' - '\ufffe' - '\u061f' # 0xBF -> ARABIC QUESTION MARK - '\ufffe' - '\u0621' # 0xC1 -> ARABIC LETTER HAMZA - '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0xC7 -> ARABIC LETTER ALEF - '\u0628' # 0xC8 -> ARABIC LETTER BEH - '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0xCA -> ARABIC LETTER TEH - '\u062b' # 0xCB -> ARABIC LETTER THEH - '\u062c' # 0xCC -> ARABIC LETTER JEEM - '\u062d' # 0xCD -> ARABIC LETTER HAH - '\u062e' # 0xCE -> ARABIC LETTER KHAH - '\u062f' # 0xCF -> ARABIC LETTER DAL - '\u0630' # 0xD0 -> ARABIC LETTER THAL - '\u0631' # 0xD1 -> ARABIC LETTER REH - '\u0632' # 0xD2 -> ARABIC LETTER ZAIN - '\u0633' # 0xD3 -> ARABIC LETTER SEEN - '\u0634' # 0xD4 -> ARABIC LETTER SHEEN - '\u0635' # 0xD5 -> ARABIC LETTER SAD - '\u0636' # 0xD6 -> ARABIC LETTER DAD - '\u0637' # 0xD7 -> ARABIC LETTER TAH - '\u0638' # 0xD8 -> ARABIC LETTER ZAH - '\u0639' # 0xD9 -> ARABIC LETTER AIN - '\u063a' # 0xDA -> ARABIC LETTER GHAIN - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u0640' # 0xE0 -> ARABIC TATWEEL - '\u0641' # 0xE1 -> ARABIC LETTER FEH - '\u0642' # 0xE2 -> ARABIC LETTER QAF - '\u0643' # 0xE3 -> ARABIC LETTER KAF - '\u0644' # 0xE4 -> ARABIC LETTER LAM - '\u0645' # 0xE5 -> ARABIC LETTER MEEM - '\u0646' # 0xE6 -> ARABIC LETTER NOON - '\u0647' # 0xE7 -> ARABIC LETTER HEH - '\u0648' # 0xE8 -> ARABIC LETTER WAW - '\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0xEA -> ARABIC LETTER YEH - '\u064b' # 0xEB -> ARABIC FATHATAN - '\u064c' # 0xEC -> ARABIC DAMMATAN - '\u064d' # 0xED -> ARABIC KASRATAN - '\u064e' # 0xEE -> ARABIC FATHA - '\u064f' # 0xEF -> ARABIC DAMMA - '\u0650' # 0xF0 -> ARABIC KASRA - '\u0651' # 0xF1 -> ARABIC SHADDA - '\u0652' # 0xF2 -> ARABIC SUKUN - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_7.py b/Python314_4_x86_Template/Lib/encodings/iso8859_7.py deleted file mode 100644 index d7b39cbc3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_7.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_7 generated from 'MAPPINGS/ISO8859/8859-7.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-7', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u2018' # 0xA1 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xA2 -> RIGHT SINGLE QUOTATION MARK - '\xa3' # 0xA3 -> POUND SIGN - '\u20ac' # 0xA4 -> EURO SIGN - '\u20af' # 0xA5 -> DRACHMA SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u037a' # 0xAA -> GREEK YPOGEGRAMMENI - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\ufffe' - '\u2015' # 0xAF -> HORIZONTAL BAR - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\u0384' # 0xB4 -> GREEK TONOS - '\u0385' # 0xB5 -> GREEK DIALYTIKA TONOS - '\u0386' # 0xB6 -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\xb7' # 0xB7 -> MIDDLE DOT - '\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS - '\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - '\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA - '\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA - '\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA - '\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA - '\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA - '\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA - '\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA - '\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA - '\u039c' # 0xCC -> GREEK CAPITAL LETTER MU - '\u039d' # 0xCD -> GREEK CAPITAL LETTER NU - '\u039e' # 0xCE -> GREEK CAPITAL LETTER XI - '\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON - '\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI - '\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO - '\ufffe' - '\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA - '\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU - '\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON - '\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI - '\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI - '\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA - '\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS - '\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS - '\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA - '\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA - '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA - '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON - '\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA - '\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA - '\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA - '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA - '\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0xEC -> GREEK SMALL LETTER MU - '\u03bd' # 0xED -> GREEK SMALL LETTER NU - '\u03be' # 0xEE -> GREEK SMALL LETTER XI - '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI - '\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO - '\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA - '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA - '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU - '\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON - '\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI - '\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI - '\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI - '\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA - '\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_8.py b/Python314_4_x86_Template/Lib/encodings/iso8859_8.py deleted file mode 100644 index 818490273..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_8.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_8 generated from 'MAPPINGS/ISO8859/8859-8.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-8', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\ufffe' - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xd7' # 0xAA -> MULTIPLICATION SIGN - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xf7' # 0xBA -> DIVISION SIGN - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u2017' # 0xDF -> DOUBLE LOW LINE - '\u05d0' # 0xE0 -> HEBREW LETTER ALEF - '\u05d1' # 0xE1 -> HEBREW LETTER BET - '\u05d2' # 0xE2 -> HEBREW LETTER GIMEL - '\u05d3' # 0xE3 -> HEBREW LETTER DALET - '\u05d4' # 0xE4 -> HEBREW LETTER HE - '\u05d5' # 0xE5 -> HEBREW LETTER VAV - '\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN - '\u05d7' # 0xE7 -> HEBREW LETTER HET - '\u05d8' # 0xE8 -> HEBREW LETTER TET - '\u05d9' # 0xE9 -> HEBREW LETTER YOD - '\u05da' # 0xEA -> HEBREW LETTER FINAL KAF - '\u05db' # 0xEB -> HEBREW LETTER KAF - '\u05dc' # 0xEC -> HEBREW LETTER LAMED - '\u05dd' # 0xED -> HEBREW LETTER FINAL MEM - '\u05de' # 0xEE -> HEBREW LETTER MEM - '\u05df' # 0xEF -> HEBREW LETTER FINAL NUN - '\u05e0' # 0xF0 -> HEBREW LETTER NUN - '\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH - '\u05e2' # 0xF2 -> HEBREW LETTER AYIN - '\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE - '\u05e4' # 0xF4 -> HEBREW LETTER PE - '\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI - '\u05e6' # 0xF6 -> HEBREW LETTER TSADI - '\u05e7' # 0xF7 -> HEBREW LETTER QOF - '\u05e8' # 0xF8 -> HEBREW LETTER RESH - '\u05e9' # 0xF9 -> HEBREW LETTER SHIN - '\u05ea' # 0xFA -> HEBREW LETTER TAV - '\ufffe' - '\ufffe' - '\u200e' # 0xFD -> LEFT-TO-RIGHT MARK - '\u200f' # 0xFE -> RIGHT-TO-LEFT MARK - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/iso8859_9.py b/Python314_4_x86_Template/Lib/encodings/iso8859_9.py deleted file mode 100644 index e539fddac..000000000 --- a/Python314_4_x86_Template/Lib/encodings/iso8859_9.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec iso8859_9 generated from 'MAPPINGS/ISO8859/8859-9.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-9', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I - '\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/johab.py b/Python314_4_x86_Template/Lib/encodings/johab.py deleted file mode 100644 index 512aeeb73..000000000 --- a/Python314_4_x86_Template/Lib/encodings/johab.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# johab.py: Python Unicode Codec for JOHAB -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_kr, codecs -import _multibytecodec as mbc - -codec = _codecs_kr.getcodec('johab') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='johab', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/koi8_r.py b/Python314_4_x86_Template/Lib/encodings/koi8_r.py deleted file mode 100644 index 41ddde856..000000000 --- a/Python314_4_x86_Template/Lib/encodings/koi8_r.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec koi8_r generated from 'MAPPINGS/VENDORS/MISC/KOI8-R.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='koi8-r', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL - '\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u2580' # 0x8B -> UPPER HALF BLOCK - '\u2584' # 0x8C -> LOWER HALF BLOCK - '\u2588' # 0x8D -> FULL BLOCK - '\u258c' # 0x8E -> LEFT HALF BLOCK - '\u2590' # 0x8F -> RIGHT HALF BLOCK - '\u2591' # 0x90 -> LIGHT SHADE - '\u2592' # 0x91 -> MEDIUM SHADE - '\u2593' # 0x92 -> DARK SHADE - '\u2320' # 0x93 -> TOP HALF INTEGRAL - '\u25a0' # 0x94 -> BLACK SQUARE - '\u2219' # 0x95 -> BULLET OPERATOR - '\u221a' # 0x96 -> SQUARE ROOT - '\u2248' # 0x97 -> ALMOST EQUAL TO - '\u2264' # 0x98 -> LESS-THAN OR EQUAL TO - '\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO - '\xa0' # 0x9A -> NO-BREAK SPACE - '\u2321' # 0x9B -> BOTTOM HALF INTEGRAL - '\xb0' # 0x9C -> DEGREE SIGN - '\xb2' # 0x9D -> SUPERSCRIPT TWO - '\xb7' # 0x9E -> MIDDLE DOT - '\xf7' # 0x9F -> DIVISION SIGN - '\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL - '\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO - '\u2553' # 0xA4 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2555' # 0xA6 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2556' # 0xA7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u255c' # 0xAD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO - '\u2562' # 0xB4 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2564' # 0xB6 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u256b' # 0xBD -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa9' # 0xBF -> COPYRIGHT SIGN - '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU - '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE - '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE - '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE - '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF - '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE - '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA - '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O - '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE - '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA - '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U - '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE - '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE - '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU - '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE - '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA - '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E - '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA - '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE - '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN - '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU - '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE - '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE - '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE - '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF - '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE - '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA - '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE - '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA - '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U - '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE - '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU - '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE - '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA - '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E - '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA - '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE - '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/koi8_t.py b/Python314_4_x86_Template/Lib/encodings/koi8_t.py deleted file mode 100644 index b5415ba36..000000000 --- a/Python314_4_x86_Template/Lib/encodings/koi8_t.py +++ /dev/null @@ -1,308 +0,0 @@ -""" Python Character Mapping Codec koi8_t -""" -# http://ru.wikipedia.org/wiki/КОИ-8 -# http://www.opensource.apple.com/source/libiconv/libiconv-4/libiconv/tests/KOI8-T.TXT - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='koi8-t', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u049b' # 0x80 -> CYRILLIC SMALL LETTER KA WITH DESCENDER - '\u0493' # 0x81 -> CYRILLIC SMALL LETTER GHE WITH STROKE - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0492' # 0x83 -> CYRILLIC CAPITAL LETTER GHE WITH STROKE - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\ufffe' # 0x88 -> UNDEFINED - '\u2030' # 0x89 -> PER MILLE SIGN - '\u04b3' # 0x8A -> CYRILLIC SMALL LETTER HA WITH DESCENDER - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u04b2' # 0x8C -> CYRILLIC CAPITAL LETTER HA WITH DESCENDER - '\u04b7' # 0x8D -> CYRILLIC SMALL LETTER CHE WITH DESCENDER - '\u04b6' # 0x8E -> CYRILLIC CAPITAL LETTER CHE WITH DESCENDER - '\ufffe' # 0x8F -> UNDEFINED - '\u049a' # 0x90 -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\ufffe' # 0x9A -> UNDEFINED - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\ufffe' # 0x9C -> UNDEFINED - '\ufffe' # 0x9D -> UNDEFINED - '\ufffe' # 0x9E -> UNDEFINED - '\ufffe' # 0x9F -> UNDEFINED - '\ufffe' # 0xA0 -> UNDEFINED - '\u04ef' # 0xA1 -> CYRILLIC SMALL LETTER U WITH MACRON - '\u04ee' # 0xA2 -> CYRILLIC CAPITAL LETTER U WITH MACRON - '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u04e3' # 0xA5 -> CYRILLIC SMALL LETTER I WITH MACRON - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\ufffe' # 0xA8 -> UNDEFINED - '\ufffe' # 0xA9 -> UNDEFINED - '\ufffe' # 0xAA -> UNDEFINED - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\ufffe' # 0xAF -> UNDEFINED - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO - '\ufffe' # 0xB4 -> UNDEFINED - '\u04e2' # 0xB5 -> CYRILLIC CAPITAL LETTER I WITH MACRON - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\ufffe' # 0xB8 -> UNDEFINED - '\u2116' # 0xB9 -> NUMERO SIGN - '\ufffe' # 0xBA -> UNDEFINED - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\ufffe' # 0xBC -> UNDEFINED - '\ufffe' # 0xBD -> UNDEFINED - '\ufffe' # 0xBE -> UNDEFINED - '\xa9' # 0xBF -> COPYRIGHT SIGN - '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU - '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE - '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE - '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE - '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF - '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE - '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA - '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O - '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE - '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA - '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U - '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE - '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE - '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU - '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE - '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA - '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E - '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA - '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE - '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN - '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU - '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE - '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE - '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE - '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF - '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE - '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA - '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE - '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA - '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U - '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE - '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU - '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE - '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA - '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E - '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA - '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE - '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/koi8_u.py b/Python314_4_x86_Template/Lib/encodings/koi8_u.py deleted file mode 100644 index f9e3fae5f..000000000 --- a/Python314_4_x86_Template/Lib/encodings/koi8_u.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec koi8_u generated from 'python-mappings/KOI8-U.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='koi8-u', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL - '\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u2580' # 0x8B -> UPPER HALF BLOCK - '\u2584' # 0x8C -> LOWER HALF BLOCK - '\u2588' # 0x8D -> FULL BLOCK - '\u258c' # 0x8E -> LEFT HALF BLOCK - '\u2590' # 0x8F -> RIGHT HALF BLOCK - '\u2591' # 0x90 -> LIGHT SHADE - '\u2592' # 0x91 -> MEDIUM SHADE - '\u2593' # 0x92 -> DARK SHADE - '\u2320' # 0x93 -> TOP HALF INTEGRAL - '\u25a0' # 0x94 -> BLACK SQUARE - '\u2219' # 0x95 -> BULLET OPERATOR - '\u221a' # 0x96 -> SQUARE ROOT - '\u2248' # 0x97 -> ALMOST EQUAL TO - '\u2264' # 0x98 -> LESS-THAN OR EQUAL TO - '\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO - '\xa0' # 0x9A -> NO-BREAK SPACE - '\u2321' # 0x9B -> BOTTOM HALF INTEGRAL - '\xb0' # 0x9C -> DEGREE SIGN - '\xb2' # 0x9D -> SUPERSCRIPT TWO - '\xb7' # 0x9E -> MIDDLE DOT - '\xf7' # 0x9F -> DIVISION SIGN - '\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL - '\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO - '\u0454' # 0xA4 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u0456' # 0xA6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0457' # 0xA7 -> CYRILLIC SMALL LETTER YI (UKRAINIAN) - '\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u0491' # 0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN - '\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO - '\u0404' # 0xB4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u0406' # 0xB6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0407' # 0xB7 -> CYRILLIC CAPITAL LETTER YI (UKRAINIAN) - '\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u0490' # 0xBD -> CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN - '\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\xa9' # 0xBF -> COPYRIGHT SIGN - '\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU - '\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE - '\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE - '\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE - '\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF - '\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE - '\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA - '\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xCF -> CYRILLIC SMALL LETTER O - '\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE - '\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA - '\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U - '\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE - '\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE - '\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU - '\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE - '\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA - '\u044d' # 0xDC -> CYRILLIC SMALL LETTER E - '\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA - '\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE - '\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN - '\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU - '\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE - '\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE - '\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE - '\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF - '\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE - '\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA - '\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE - '\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA - '\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U - '\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE - '\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU - '\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE - '\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA - '\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E - '\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA - '\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE - '\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/kz1048.py b/Python314_4_x86_Template/Lib/encodings/kz1048.py deleted file mode 100644 index 712aee6e9..000000000 --- a/Python314_4_x86_Template/Lib/encodings/kz1048.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec kz1048 generated from 'MAPPINGS/VENDORS/MISC/KZ1048.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self, input, errors='strict'): - return codecs.charmap_encode(input, errors, encoding_table) - - def decode(self, input, errors='strict'): - return codecs.charmap_decode(input, errors, decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input, self.errors, encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input, self.errors, decoding_table)[0] - -class StreamWriter(Codec, codecs.StreamWriter): - pass - -class StreamReader(Codec, codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='kz1048', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE - '\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u20ac' # 0x88 -> EURO SIGN - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE - '\u049a' # 0x8D -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER - '\u04ba' # 0x8E -> CYRILLIC CAPITAL LETTER SHHA - '\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE - '\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\ufffe' # 0x98 -> UNDEFINED - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE - '\u049b' # 0x9D -> CYRILLIC SMALL LETTER KA WITH DESCENDER - '\u04bb' # 0x9E -> CYRILLIC SMALL LETTER SHHA - '\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u04b0' # 0xA1 -> CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE - '\u04b1' # 0xA2 -> CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE - '\u04d8' # 0xA3 -> CYRILLIC CAPITAL LETTER SCHWA - '\xa4' # 0xA4 -> CURRENCY SIGN - '\u04e8' # 0xA5 -> CYRILLIC CAPITAL LETTER BARRED O - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u0492' # 0xAA -> CYRILLIC CAPITAL LETTER GHE WITH STROKE - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\u04ae' # 0xAF -> CYRILLIC CAPITAL LETTER STRAIGHT U - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u04e9' # 0xB4 -> CYRILLIC SMALL LETTER BARRED O - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO - '\u2116' # 0xB9 -> NUMERO SIGN - '\u0493' # 0xBA -> CYRILLIC SMALL LETTER GHE WITH STROKE - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u04d9' # 0xBC -> CYRILLIC SMALL LETTER SCHWA - '\u04a2' # 0xBD -> CYRILLIC CAPITAL LETTER EN WITH DESCENDER - '\u04a3' # 0xBE -> CYRILLIC SMALL LETTER EN WITH DESCENDER - '\u04af' # 0xBF -> CYRILLIC SMALL LETTER STRAIGHT U - '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O - '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE - '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E - '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU - '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA -) - -### Encoding table -encoding_table = codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/latin_1.py b/Python314_4_x86_Template/Lib/encodings/latin_1.py deleted file mode 100644 index 370160c0c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/latin_1.py +++ /dev/null @@ -1,50 +0,0 @@ -""" Python 'latin-1' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - # Note: Binding these as C functions will result in the class not - # converting them to methods. This is intended. - encode = codecs.latin_1_encode - decode = codecs.latin_1_decode - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.latin_1_encode(input,self.errors)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.latin_1_decode(input,self.errors)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -class StreamConverter(StreamWriter,StreamReader): - - encode = codecs.latin_1_decode - decode = codecs.latin_1_encode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='iso8859-1', - encode=Codec.encode, - decode=Codec.decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_arabic.py b/Python314_4_x86_Template/Lib/encodings/mac_arabic.py deleted file mode 100644 index 72847e859..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_arabic.py +++ /dev/null @@ -1,698 +0,0 @@ -""" Python Character Mapping Codec generated from 'VENDORS/APPLE/ARABIC.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_map) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_map)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-arabic', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - -### Decoding Map - -decoding_map = codecs.make_identity_dict(range(256)) -decoding_map.update({ - 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x0081: 0x00a0, # NO-BREAK SPACE, right-left - 0x0082: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x0083: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE - 0x0084: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE - 0x0085: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x0086: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x0087: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE - 0x0088: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE - 0x0089: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x008a: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS - 0x008b: 0x06ba, # ARABIC LETTER NOON GHUNNA - 0x008c: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - 0x008d: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA - 0x008e: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE - 0x008f: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE - 0x0090: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x0091: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS - 0x0092: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE - 0x0093: 0x2026, # HORIZONTAL ELLIPSIS, right-left - 0x0094: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x0095: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS - 0x0096: 0x00f1, # LATIN SMALL LETTER N WITH TILDE - 0x0097: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE - 0x0098: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - 0x0099: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x009a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS - 0x009b: 0x00f7, # DIVISION SIGN, right-left - 0x009c: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE - 0x009d: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE - 0x009e: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x009f: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS - 0x00a0: 0x0020, # SPACE, right-left - 0x00a1: 0x0021, # EXCLAMATION MARK, right-left - 0x00a2: 0x0022, # QUOTATION MARK, right-left - 0x00a3: 0x0023, # NUMBER SIGN, right-left - 0x00a4: 0x0024, # DOLLAR SIGN, right-left - 0x00a5: 0x066a, # ARABIC PERCENT SIGN - 0x00a6: 0x0026, # AMPERSAND, right-left - 0x00a7: 0x0027, # APOSTROPHE, right-left - 0x00a8: 0x0028, # LEFT PARENTHESIS, right-left - 0x00a9: 0x0029, # RIGHT PARENTHESIS, right-left - 0x00aa: 0x002a, # ASTERISK, right-left - 0x00ab: 0x002b, # PLUS SIGN, right-left - 0x00ac: 0x060c, # ARABIC COMMA - 0x00ad: 0x002d, # HYPHEN-MINUS, right-left - 0x00ae: 0x002e, # FULL STOP, right-left - 0x00af: 0x002f, # SOLIDUS, right-left - 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO, right-left (need override) - 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE, right-left (need override) - 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO, right-left (need override) - 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE, right-left (need override) - 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR, right-left (need override) - 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE, right-left (need override) - 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX, right-left (need override) - 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) - 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) - 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE, right-left (need override) - 0x00ba: 0x003a, # COLON, right-left - 0x00bb: 0x061b, # ARABIC SEMICOLON - 0x00bc: 0x003c, # LESS-THAN SIGN, right-left - 0x00bd: 0x003d, # EQUALS SIGN, right-left - 0x00be: 0x003e, # GREATER-THAN SIGN, right-left - 0x00bf: 0x061f, # ARABIC QUESTION MARK - 0x00c0: 0x274a, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left - 0x00c1: 0x0621, # ARABIC LETTER HAMZA - 0x00c2: 0x0622, # ARABIC LETTER ALEF WITH MADDA ABOVE - 0x00c3: 0x0623, # ARABIC LETTER ALEF WITH HAMZA ABOVE - 0x00c4: 0x0624, # ARABIC LETTER WAW WITH HAMZA ABOVE - 0x00c5: 0x0625, # ARABIC LETTER ALEF WITH HAMZA BELOW - 0x00c6: 0x0626, # ARABIC LETTER YEH WITH HAMZA ABOVE - 0x00c7: 0x0627, # ARABIC LETTER ALEF - 0x00c8: 0x0628, # ARABIC LETTER BEH - 0x00c9: 0x0629, # ARABIC LETTER TEH MARBUTA - 0x00ca: 0x062a, # ARABIC LETTER TEH - 0x00cb: 0x062b, # ARABIC LETTER THEH - 0x00cc: 0x062c, # ARABIC LETTER JEEM - 0x00cd: 0x062d, # ARABIC LETTER HAH - 0x00ce: 0x062e, # ARABIC LETTER KHAH - 0x00cf: 0x062f, # ARABIC LETTER DAL - 0x00d0: 0x0630, # ARABIC LETTER THAL - 0x00d1: 0x0631, # ARABIC LETTER REH - 0x00d2: 0x0632, # ARABIC LETTER ZAIN - 0x00d3: 0x0633, # ARABIC LETTER SEEN - 0x00d4: 0x0634, # ARABIC LETTER SHEEN - 0x00d5: 0x0635, # ARABIC LETTER SAD - 0x00d6: 0x0636, # ARABIC LETTER DAD - 0x00d7: 0x0637, # ARABIC LETTER TAH - 0x00d8: 0x0638, # ARABIC LETTER ZAH - 0x00d9: 0x0639, # ARABIC LETTER AIN - 0x00da: 0x063a, # ARABIC LETTER GHAIN - 0x00db: 0x005b, # LEFT SQUARE BRACKET, right-left - 0x00dc: 0x005c, # REVERSE SOLIDUS, right-left - 0x00dd: 0x005d, # RIGHT SQUARE BRACKET, right-left - 0x00de: 0x005e, # CIRCUMFLEX ACCENT, right-left - 0x00df: 0x005f, # LOW LINE, right-left - 0x00e0: 0x0640, # ARABIC TATWEEL - 0x00e1: 0x0641, # ARABIC LETTER FEH - 0x00e2: 0x0642, # ARABIC LETTER QAF - 0x00e3: 0x0643, # ARABIC LETTER KAF - 0x00e4: 0x0644, # ARABIC LETTER LAM - 0x00e5: 0x0645, # ARABIC LETTER MEEM - 0x00e6: 0x0646, # ARABIC LETTER NOON - 0x00e7: 0x0647, # ARABIC LETTER HEH - 0x00e8: 0x0648, # ARABIC LETTER WAW - 0x00e9: 0x0649, # ARABIC LETTER ALEF MAKSURA - 0x00ea: 0x064a, # ARABIC LETTER YEH - 0x00eb: 0x064b, # ARABIC FATHATAN - 0x00ec: 0x064c, # ARABIC DAMMATAN - 0x00ed: 0x064d, # ARABIC KASRATAN - 0x00ee: 0x064e, # ARABIC FATHA - 0x00ef: 0x064f, # ARABIC DAMMA - 0x00f0: 0x0650, # ARABIC KASRA - 0x00f1: 0x0651, # ARABIC SHADDA - 0x00f2: 0x0652, # ARABIC SUKUN - 0x00f3: 0x067e, # ARABIC LETTER PEH - 0x00f4: 0x0679, # ARABIC LETTER TTEH - 0x00f5: 0x0686, # ARABIC LETTER TCHEH - 0x00f6: 0x06d5, # ARABIC LETTER AE - 0x00f7: 0x06a4, # ARABIC LETTER VEH - 0x00f8: 0x06af, # ARABIC LETTER GAF - 0x00f9: 0x0688, # ARABIC LETTER DDAL - 0x00fa: 0x0691, # ARABIC LETTER RREH - 0x00fb: 0x007b, # LEFT CURLY BRACKET, right-left - 0x00fc: 0x007c, # VERTICAL LINE, right-left - 0x00fd: 0x007d, # RIGHT CURLY BRACKET, right-left - 0x00fe: 0x0698, # ARABIC LETTER JEH - 0x00ff: 0x06d2, # ARABIC LETTER YEH BARREE -}) - -### Decoding Table - -decoding_table = ( - '\x00' # 0x0000 -> CONTROL CHARACTER - '\x01' # 0x0001 -> CONTROL CHARACTER - '\x02' # 0x0002 -> CONTROL CHARACTER - '\x03' # 0x0003 -> CONTROL CHARACTER - '\x04' # 0x0004 -> CONTROL CHARACTER - '\x05' # 0x0005 -> CONTROL CHARACTER - '\x06' # 0x0006 -> CONTROL CHARACTER - '\x07' # 0x0007 -> CONTROL CHARACTER - '\x08' # 0x0008 -> CONTROL CHARACTER - '\t' # 0x0009 -> CONTROL CHARACTER - '\n' # 0x000a -> CONTROL CHARACTER - '\x0b' # 0x000b -> CONTROL CHARACTER - '\x0c' # 0x000c -> CONTROL CHARACTER - '\r' # 0x000d -> CONTROL CHARACTER - '\x0e' # 0x000e -> CONTROL CHARACTER - '\x0f' # 0x000f -> CONTROL CHARACTER - '\x10' # 0x0010 -> CONTROL CHARACTER - '\x11' # 0x0011 -> CONTROL CHARACTER - '\x12' # 0x0012 -> CONTROL CHARACTER - '\x13' # 0x0013 -> CONTROL CHARACTER - '\x14' # 0x0014 -> CONTROL CHARACTER - '\x15' # 0x0015 -> CONTROL CHARACTER - '\x16' # 0x0016 -> CONTROL CHARACTER - '\x17' # 0x0017 -> CONTROL CHARACTER - '\x18' # 0x0018 -> CONTROL CHARACTER - '\x19' # 0x0019 -> CONTROL CHARACTER - '\x1a' # 0x001a -> CONTROL CHARACTER - '\x1b' # 0x001b -> CONTROL CHARACTER - '\x1c' # 0x001c -> CONTROL CHARACTER - '\x1d' # 0x001d -> CONTROL CHARACTER - '\x1e' # 0x001e -> CONTROL CHARACTER - '\x1f' # 0x001f -> CONTROL CHARACTER - ' ' # 0x0020 -> SPACE, left-right - '!' # 0x0021 -> EXCLAMATION MARK, left-right - '"' # 0x0022 -> QUOTATION MARK, left-right - '#' # 0x0023 -> NUMBER SIGN, left-right - '$' # 0x0024 -> DOLLAR SIGN, left-right - '%' # 0x0025 -> PERCENT SIGN, left-right - '&' # 0x0026 -> AMPERSAND, left-right - "'" # 0x0027 -> APOSTROPHE, left-right - '(' # 0x0028 -> LEFT PARENTHESIS, left-right - ')' # 0x0029 -> RIGHT PARENTHESIS, left-right - '*' # 0x002a -> ASTERISK, left-right - '+' # 0x002b -> PLUS SIGN, left-right - ',' # 0x002c -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR - '-' # 0x002d -> HYPHEN-MINUS, left-right - '.' # 0x002e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR - '/' # 0x002f -> SOLIDUS, left-right - '0' # 0x0030 -> DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO - '1' # 0x0031 -> DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE - '2' # 0x0032 -> DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO - '3' # 0x0033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE - '4' # 0x0034 -> DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR - '5' # 0x0035 -> DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE - '6' # 0x0036 -> DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX - '7' # 0x0037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN - '8' # 0x0038 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT - '9' # 0x0039 -> DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE - ':' # 0x003a -> COLON, left-right - ';' # 0x003b -> SEMICOLON, left-right - '<' # 0x003c -> LESS-THAN SIGN, left-right - '=' # 0x003d -> EQUALS SIGN, left-right - '>' # 0x003e -> GREATER-THAN SIGN, left-right - '?' # 0x003f -> QUESTION MARK, left-right - '@' # 0x0040 -> COMMERCIAL AT - 'A' # 0x0041 -> LATIN CAPITAL LETTER A - 'B' # 0x0042 -> LATIN CAPITAL LETTER B - 'C' # 0x0043 -> LATIN CAPITAL LETTER C - 'D' # 0x0044 -> LATIN CAPITAL LETTER D - 'E' # 0x0045 -> LATIN CAPITAL LETTER E - 'F' # 0x0046 -> LATIN CAPITAL LETTER F - 'G' # 0x0047 -> LATIN CAPITAL LETTER G - 'H' # 0x0048 -> LATIN CAPITAL LETTER H - 'I' # 0x0049 -> LATIN CAPITAL LETTER I - 'J' # 0x004a -> LATIN CAPITAL LETTER J - 'K' # 0x004b -> LATIN CAPITAL LETTER K - 'L' # 0x004c -> LATIN CAPITAL LETTER L - 'M' # 0x004d -> LATIN CAPITAL LETTER M - 'N' # 0x004e -> LATIN CAPITAL LETTER N - 'O' # 0x004f -> LATIN CAPITAL LETTER O - 'P' # 0x0050 -> LATIN CAPITAL LETTER P - 'Q' # 0x0051 -> LATIN CAPITAL LETTER Q - 'R' # 0x0052 -> LATIN CAPITAL LETTER R - 'S' # 0x0053 -> LATIN CAPITAL LETTER S - 'T' # 0x0054 -> LATIN CAPITAL LETTER T - 'U' # 0x0055 -> LATIN CAPITAL LETTER U - 'V' # 0x0056 -> LATIN CAPITAL LETTER V - 'W' # 0x0057 -> LATIN CAPITAL LETTER W - 'X' # 0x0058 -> LATIN CAPITAL LETTER X - 'Y' # 0x0059 -> LATIN CAPITAL LETTER Y - 'Z' # 0x005a -> LATIN CAPITAL LETTER Z - '[' # 0x005b -> LEFT SQUARE BRACKET, left-right - '\\' # 0x005c -> REVERSE SOLIDUS, left-right - ']' # 0x005d -> RIGHT SQUARE BRACKET, left-right - '^' # 0x005e -> CIRCUMFLEX ACCENT, left-right - '_' # 0x005f -> LOW LINE, left-right - '`' # 0x0060 -> GRAVE ACCENT - 'a' # 0x0061 -> LATIN SMALL LETTER A - 'b' # 0x0062 -> LATIN SMALL LETTER B - 'c' # 0x0063 -> LATIN SMALL LETTER C - 'd' # 0x0064 -> LATIN SMALL LETTER D - 'e' # 0x0065 -> LATIN SMALL LETTER E - 'f' # 0x0066 -> LATIN SMALL LETTER F - 'g' # 0x0067 -> LATIN SMALL LETTER G - 'h' # 0x0068 -> LATIN SMALL LETTER H - 'i' # 0x0069 -> LATIN SMALL LETTER I - 'j' # 0x006a -> LATIN SMALL LETTER J - 'k' # 0x006b -> LATIN SMALL LETTER K - 'l' # 0x006c -> LATIN SMALL LETTER L - 'm' # 0x006d -> LATIN SMALL LETTER M - 'n' # 0x006e -> LATIN SMALL LETTER N - 'o' # 0x006f -> LATIN SMALL LETTER O - 'p' # 0x0070 -> LATIN SMALL LETTER P - 'q' # 0x0071 -> LATIN SMALL LETTER Q - 'r' # 0x0072 -> LATIN SMALL LETTER R - 's' # 0x0073 -> LATIN SMALL LETTER S - 't' # 0x0074 -> LATIN SMALL LETTER T - 'u' # 0x0075 -> LATIN SMALL LETTER U - 'v' # 0x0076 -> LATIN SMALL LETTER V - 'w' # 0x0077 -> LATIN SMALL LETTER W - 'x' # 0x0078 -> LATIN SMALL LETTER X - 'y' # 0x0079 -> LATIN SMALL LETTER Y - 'z' # 0x007a -> LATIN SMALL LETTER Z - '{' # 0x007b -> LEFT CURLY BRACKET, left-right - '|' # 0x007c -> VERTICAL LINE, left-right - '}' # 0x007d -> RIGHT CURLY BRACKET, left-right - '~' # 0x007e -> TILDE - '\x7f' # 0x007f -> CONTROL CHARACTER - '\xc4' # 0x0080 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xa0' # 0x0081 -> NO-BREAK SPACE, right-left - '\xc7' # 0x0082 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x0083 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x0084 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x0085 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x0086 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x0087 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x0088 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x0089 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x008a -> LATIN SMALL LETTER A WITH DIAERESIS - '\u06ba' # 0x008b -> ARABIC LETTER NOON GHUNNA - '\xab' # 0x008c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - '\xe7' # 0x008d -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x008e -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x008f -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x0090 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x0091 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x0092 -> LATIN SMALL LETTER I WITH ACUTE - '\u2026' # 0x0093 -> HORIZONTAL ELLIPSIS, right-left - '\xee' # 0x0094 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x0095 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x0096 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x0097 -> LATIN SMALL LETTER O WITH ACUTE - '\xbb' # 0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - '\xf4' # 0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x009a -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0x009b -> DIVISION SIGN, right-left - '\xfa' # 0x009c -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x009d -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x009e -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x009f -> LATIN SMALL LETTER U WITH DIAERESIS - ' ' # 0x00a0 -> SPACE, right-left - '!' # 0x00a1 -> EXCLAMATION MARK, right-left - '"' # 0x00a2 -> QUOTATION MARK, right-left - '#' # 0x00a3 -> NUMBER SIGN, right-left - '$' # 0x00a4 -> DOLLAR SIGN, right-left - '\u066a' # 0x00a5 -> ARABIC PERCENT SIGN - '&' # 0x00a6 -> AMPERSAND, right-left - "'" # 0x00a7 -> APOSTROPHE, right-left - '(' # 0x00a8 -> LEFT PARENTHESIS, right-left - ')' # 0x00a9 -> RIGHT PARENTHESIS, right-left - '*' # 0x00aa -> ASTERISK, right-left - '+' # 0x00ab -> PLUS SIGN, right-left - '\u060c' # 0x00ac -> ARABIC COMMA - '-' # 0x00ad -> HYPHEN-MINUS, right-left - '.' # 0x00ae -> FULL STOP, right-left - '/' # 0x00af -> SOLIDUS, right-left - '\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override) - '\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE, right-left (need override) - '\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override) - '\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE, right-left (need override) - '\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR, right-left (need override) - '\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override) - '\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override) - '\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override) - '\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override) - '\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE, right-left (need override) - ':' # 0x00ba -> COLON, right-left - '\u061b' # 0x00bb -> ARABIC SEMICOLON - '<' # 0x00bc -> LESS-THAN SIGN, right-left - '=' # 0x00bd -> EQUALS SIGN, right-left - '>' # 0x00be -> GREATER-THAN SIGN, right-left - '\u061f' # 0x00bf -> ARABIC QUESTION MARK - '\u274a' # 0x00c0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left - '\u0621' # 0x00c1 -> ARABIC LETTER HAMZA - '\u0622' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\u0625' # 0x00c5 -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0x00c7 -> ARABIC LETTER ALEF - '\u0628' # 0x00c8 -> ARABIC LETTER BEH - '\u0629' # 0x00c9 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0x00ca -> ARABIC LETTER TEH - '\u062b' # 0x00cb -> ARABIC LETTER THEH - '\u062c' # 0x00cc -> ARABIC LETTER JEEM - '\u062d' # 0x00cd -> ARABIC LETTER HAH - '\u062e' # 0x00ce -> ARABIC LETTER KHAH - '\u062f' # 0x00cf -> ARABIC LETTER DAL - '\u0630' # 0x00d0 -> ARABIC LETTER THAL - '\u0631' # 0x00d1 -> ARABIC LETTER REH - '\u0632' # 0x00d2 -> ARABIC LETTER ZAIN - '\u0633' # 0x00d3 -> ARABIC LETTER SEEN - '\u0634' # 0x00d4 -> ARABIC LETTER SHEEN - '\u0635' # 0x00d5 -> ARABIC LETTER SAD - '\u0636' # 0x00d6 -> ARABIC LETTER DAD - '\u0637' # 0x00d7 -> ARABIC LETTER TAH - '\u0638' # 0x00d8 -> ARABIC LETTER ZAH - '\u0639' # 0x00d9 -> ARABIC LETTER AIN - '\u063a' # 0x00da -> ARABIC LETTER GHAIN - '[' # 0x00db -> LEFT SQUARE BRACKET, right-left - '\\' # 0x00dc -> REVERSE SOLIDUS, right-left - ']' # 0x00dd -> RIGHT SQUARE BRACKET, right-left - '^' # 0x00de -> CIRCUMFLEX ACCENT, right-left - '_' # 0x00df -> LOW LINE, right-left - '\u0640' # 0x00e0 -> ARABIC TATWEEL - '\u0641' # 0x00e1 -> ARABIC LETTER FEH - '\u0642' # 0x00e2 -> ARABIC LETTER QAF - '\u0643' # 0x00e3 -> ARABIC LETTER KAF - '\u0644' # 0x00e4 -> ARABIC LETTER LAM - '\u0645' # 0x00e5 -> ARABIC LETTER MEEM - '\u0646' # 0x00e6 -> ARABIC LETTER NOON - '\u0647' # 0x00e7 -> ARABIC LETTER HEH - '\u0648' # 0x00e8 -> ARABIC LETTER WAW - '\u0649' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0x00ea -> ARABIC LETTER YEH - '\u064b' # 0x00eb -> ARABIC FATHATAN - '\u064c' # 0x00ec -> ARABIC DAMMATAN - '\u064d' # 0x00ed -> ARABIC KASRATAN - '\u064e' # 0x00ee -> ARABIC FATHA - '\u064f' # 0x00ef -> ARABIC DAMMA - '\u0650' # 0x00f0 -> ARABIC KASRA - '\u0651' # 0x00f1 -> ARABIC SHADDA - '\u0652' # 0x00f2 -> ARABIC SUKUN - '\u067e' # 0x00f3 -> ARABIC LETTER PEH - '\u0679' # 0x00f4 -> ARABIC LETTER TTEH - '\u0686' # 0x00f5 -> ARABIC LETTER TCHEH - '\u06d5' # 0x00f6 -> ARABIC LETTER AE - '\u06a4' # 0x00f7 -> ARABIC LETTER VEH - '\u06af' # 0x00f8 -> ARABIC LETTER GAF - '\u0688' # 0x00f9 -> ARABIC LETTER DDAL - '\u0691' # 0x00fa -> ARABIC LETTER RREH - '{' # 0x00fb -> LEFT CURLY BRACKET, right-left - '|' # 0x00fc -> VERTICAL LINE, right-left - '}' # 0x00fd -> RIGHT CURLY BRACKET, right-left - '\u0698' # 0x00fe -> ARABIC LETTER JEH - '\u06d2' # 0x00ff -> ARABIC LETTER YEH BARREE -) - -### Encoding Map - -encoding_map = { - 0x0000: 0x0000, # CONTROL CHARACTER - 0x0001: 0x0001, # CONTROL CHARACTER - 0x0002: 0x0002, # CONTROL CHARACTER - 0x0003: 0x0003, # CONTROL CHARACTER - 0x0004: 0x0004, # CONTROL CHARACTER - 0x0005: 0x0005, # CONTROL CHARACTER - 0x0006: 0x0006, # CONTROL CHARACTER - 0x0007: 0x0007, # CONTROL CHARACTER - 0x0008: 0x0008, # CONTROL CHARACTER - 0x0009: 0x0009, # CONTROL CHARACTER - 0x000a: 0x000a, # CONTROL CHARACTER - 0x000b: 0x000b, # CONTROL CHARACTER - 0x000c: 0x000c, # CONTROL CHARACTER - 0x000d: 0x000d, # CONTROL CHARACTER - 0x000e: 0x000e, # CONTROL CHARACTER - 0x000f: 0x000f, # CONTROL CHARACTER - 0x0010: 0x0010, # CONTROL CHARACTER - 0x0011: 0x0011, # CONTROL CHARACTER - 0x0012: 0x0012, # CONTROL CHARACTER - 0x0013: 0x0013, # CONTROL CHARACTER - 0x0014: 0x0014, # CONTROL CHARACTER - 0x0015: 0x0015, # CONTROL CHARACTER - 0x0016: 0x0016, # CONTROL CHARACTER - 0x0017: 0x0017, # CONTROL CHARACTER - 0x0018: 0x0018, # CONTROL CHARACTER - 0x0019: 0x0019, # CONTROL CHARACTER - 0x001a: 0x001a, # CONTROL CHARACTER - 0x001b: 0x001b, # CONTROL CHARACTER - 0x001c: 0x001c, # CONTROL CHARACTER - 0x001d: 0x001d, # CONTROL CHARACTER - 0x001e: 0x001e, # CONTROL CHARACTER - 0x001f: 0x001f, # CONTROL CHARACTER - 0x0020: 0x0020, # SPACE, left-right - 0x0020: 0x00a0, # SPACE, right-left - 0x0021: 0x0021, # EXCLAMATION MARK, left-right - 0x0021: 0x00a1, # EXCLAMATION MARK, right-left - 0x0022: 0x0022, # QUOTATION MARK, left-right - 0x0022: 0x00a2, # QUOTATION MARK, right-left - 0x0023: 0x0023, # NUMBER SIGN, left-right - 0x0023: 0x00a3, # NUMBER SIGN, right-left - 0x0024: 0x0024, # DOLLAR SIGN, left-right - 0x0024: 0x00a4, # DOLLAR SIGN, right-left - 0x0025: 0x0025, # PERCENT SIGN, left-right - 0x0026: 0x0026, # AMPERSAND, left-right - 0x0026: 0x00a6, # AMPERSAND, right-left - 0x0027: 0x0027, # APOSTROPHE, left-right - 0x0027: 0x00a7, # APOSTROPHE, right-left - 0x0028: 0x0028, # LEFT PARENTHESIS, left-right - 0x0028: 0x00a8, # LEFT PARENTHESIS, right-left - 0x0029: 0x0029, # RIGHT PARENTHESIS, left-right - 0x0029: 0x00a9, # RIGHT PARENTHESIS, right-left - 0x002a: 0x002a, # ASTERISK, left-right - 0x002a: 0x00aa, # ASTERISK, right-left - 0x002b: 0x002b, # PLUS SIGN, left-right - 0x002b: 0x00ab, # PLUS SIGN, right-left - 0x002c: 0x002c, # COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR - 0x002d: 0x002d, # HYPHEN-MINUS, left-right - 0x002d: 0x00ad, # HYPHEN-MINUS, right-left - 0x002e: 0x002e, # FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR - 0x002e: 0x00ae, # FULL STOP, right-left - 0x002f: 0x002f, # SOLIDUS, left-right - 0x002f: 0x00af, # SOLIDUS, right-left - 0x0030: 0x0030, # DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO - 0x0031: 0x0031, # DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE - 0x0032: 0x0032, # DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO - 0x0033: 0x0033, # DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE - 0x0034: 0x0034, # DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR - 0x0035: 0x0035, # DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE - 0x0036: 0x0036, # DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX - 0x0037: 0x0037, # DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN - 0x0038: 0x0038, # DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT - 0x0039: 0x0039, # DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE - 0x003a: 0x003a, # COLON, left-right - 0x003a: 0x00ba, # COLON, right-left - 0x003b: 0x003b, # SEMICOLON, left-right - 0x003c: 0x003c, # LESS-THAN SIGN, left-right - 0x003c: 0x00bc, # LESS-THAN SIGN, right-left - 0x003d: 0x003d, # EQUALS SIGN, left-right - 0x003d: 0x00bd, # EQUALS SIGN, right-left - 0x003e: 0x003e, # GREATER-THAN SIGN, left-right - 0x003e: 0x00be, # GREATER-THAN SIGN, right-left - 0x003f: 0x003f, # QUESTION MARK, left-right - 0x0040: 0x0040, # COMMERCIAL AT - 0x0041: 0x0041, # LATIN CAPITAL LETTER A - 0x0042: 0x0042, # LATIN CAPITAL LETTER B - 0x0043: 0x0043, # LATIN CAPITAL LETTER C - 0x0044: 0x0044, # LATIN CAPITAL LETTER D - 0x0045: 0x0045, # LATIN CAPITAL LETTER E - 0x0046: 0x0046, # LATIN CAPITAL LETTER F - 0x0047: 0x0047, # LATIN CAPITAL LETTER G - 0x0048: 0x0048, # LATIN CAPITAL LETTER H - 0x0049: 0x0049, # LATIN CAPITAL LETTER I - 0x004a: 0x004a, # LATIN CAPITAL LETTER J - 0x004b: 0x004b, # LATIN CAPITAL LETTER K - 0x004c: 0x004c, # LATIN CAPITAL LETTER L - 0x004d: 0x004d, # LATIN CAPITAL LETTER M - 0x004e: 0x004e, # LATIN CAPITAL LETTER N - 0x004f: 0x004f, # LATIN CAPITAL LETTER O - 0x0050: 0x0050, # LATIN CAPITAL LETTER P - 0x0051: 0x0051, # LATIN CAPITAL LETTER Q - 0x0052: 0x0052, # LATIN CAPITAL LETTER R - 0x0053: 0x0053, # LATIN CAPITAL LETTER S - 0x0054: 0x0054, # LATIN CAPITAL LETTER T - 0x0055: 0x0055, # LATIN CAPITAL LETTER U - 0x0056: 0x0056, # LATIN CAPITAL LETTER V - 0x0057: 0x0057, # LATIN CAPITAL LETTER W - 0x0058: 0x0058, # LATIN CAPITAL LETTER X - 0x0059: 0x0059, # LATIN CAPITAL LETTER Y - 0x005a: 0x005a, # LATIN CAPITAL LETTER Z - 0x005b: 0x005b, # LEFT SQUARE BRACKET, left-right - 0x005b: 0x00db, # LEFT SQUARE BRACKET, right-left - 0x005c: 0x005c, # REVERSE SOLIDUS, left-right - 0x005c: 0x00dc, # REVERSE SOLIDUS, right-left - 0x005d: 0x005d, # RIGHT SQUARE BRACKET, left-right - 0x005d: 0x00dd, # RIGHT SQUARE BRACKET, right-left - 0x005e: 0x005e, # CIRCUMFLEX ACCENT, left-right - 0x005e: 0x00de, # CIRCUMFLEX ACCENT, right-left - 0x005f: 0x005f, # LOW LINE, left-right - 0x005f: 0x00df, # LOW LINE, right-left - 0x0060: 0x0060, # GRAVE ACCENT - 0x0061: 0x0061, # LATIN SMALL LETTER A - 0x0062: 0x0062, # LATIN SMALL LETTER B - 0x0063: 0x0063, # LATIN SMALL LETTER C - 0x0064: 0x0064, # LATIN SMALL LETTER D - 0x0065: 0x0065, # LATIN SMALL LETTER E - 0x0066: 0x0066, # LATIN SMALL LETTER F - 0x0067: 0x0067, # LATIN SMALL LETTER G - 0x0068: 0x0068, # LATIN SMALL LETTER H - 0x0069: 0x0069, # LATIN SMALL LETTER I - 0x006a: 0x006a, # LATIN SMALL LETTER J - 0x006b: 0x006b, # LATIN SMALL LETTER K - 0x006c: 0x006c, # LATIN SMALL LETTER L - 0x006d: 0x006d, # LATIN SMALL LETTER M - 0x006e: 0x006e, # LATIN SMALL LETTER N - 0x006f: 0x006f, # LATIN SMALL LETTER O - 0x0070: 0x0070, # LATIN SMALL LETTER P - 0x0071: 0x0071, # LATIN SMALL LETTER Q - 0x0072: 0x0072, # LATIN SMALL LETTER R - 0x0073: 0x0073, # LATIN SMALL LETTER S - 0x0074: 0x0074, # LATIN SMALL LETTER T - 0x0075: 0x0075, # LATIN SMALL LETTER U - 0x0076: 0x0076, # LATIN SMALL LETTER V - 0x0077: 0x0077, # LATIN SMALL LETTER W - 0x0078: 0x0078, # LATIN SMALL LETTER X - 0x0079: 0x0079, # LATIN SMALL LETTER Y - 0x007a: 0x007a, # LATIN SMALL LETTER Z - 0x007b: 0x007b, # LEFT CURLY BRACKET, left-right - 0x007b: 0x00fb, # LEFT CURLY BRACKET, right-left - 0x007c: 0x007c, # VERTICAL LINE, left-right - 0x007c: 0x00fc, # VERTICAL LINE, right-left - 0x007d: 0x007d, # RIGHT CURLY BRACKET, left-right - 0x007d: 0x00fd, # RIGHT CURLY BRACKET, right-left - 0x007e: 0x007e, # TILDE - 0x007f: 0x007f, # CONTROL CHARACTER - 0x00a0: 0x0081, # NO-BREAK SPACE, right-left - 0x00ab: 0x008c, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - 0x00bb: 0x0098, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - 0x00c4: 0x0080, # LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c7: 0x0082, # LATIN CAPITAL LETTER C WITH CEDILLA - 0x00c9: 0x0083, # LATIN CAPITAL LETTER E WITH ACUTE - 0x00d1: 0x0084, # LATIN CAPITAL LETTER N WITH TILDE - 0x00d6: 0x0085, # LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00dc: 0x0086, # LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00e0: 0x0088, # LATIN SMALL LETTER A WITH GRAVE - 0x00e1: 0x0087, # LATIN SMALL LETTER A WITH ACUTE - 0x00e2: 0x0089, # LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4: 0x008a, # LATIN SMALL LETTER A WITH DIAERESIS - 0x00e7: 0x008d, # LATIN SMALL LETTER C WITH CEDILLA - 0x00e8: 0x008f, # LATIN SMALL LETTER E WITH GRAVE - 0x00e9: 0x008e, # LATIN SMALL LETTER E WITH ACUTE - 0x00ea: 0x0090, # LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb: 0x0091, # LATIN SMALL LETTER E WITH DIAERESIS - 0x00ed: 0x0092, # LATIN SMALL LETTER I WITH ACUTE - 0x00ee: 0x0094, # LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ef: 0x0095, # LATIN SMALL LETTER I WITH DIAERESIS - 0x00f1: 0x0096, # LATIN SMALL LETTER N WITH TILDE - 0x00f3: 0x0097, # LATIN SMALL LETTER O WITH ACUTE - 0x00f4: 0x0099, # LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6: 0x009a, # LATIN SMALL LETTER O WITH DIAERESIS - 0x00f7: 0x009b, # DIVISION SIGN, right-left - 0x00f9: 0x009d, # LATIN SMALL LETTER U WITH GRAVE - 0x00fa: 0x009c, # LATIN SMALL LETTER U WITH ACUTE - 0x00fb: 0x009e, # LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00fc: 0x009f, # LATIN SMALL LETTER U WITH DIAERESIS - 0x060c: 0x00ac, # ARABIC COMMA - 0x061b: 0x00bb, # ARABIC SEMICOLON - 0x061f: 0x00bf, # ARABIC QUESTION MARK - 0x0621: 0x00c1, # ARABIC LETTER HAMZA - 0x0622: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE - 0x0623: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE - 0x0624: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE - 0x0625: 0x00c5, # ARABIC LETTER ALEF WITH HAMZA BELOW - 0x0626: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE - 0x0627: 0x00c7, # ARABIC LETTER ALEF - 0x0628: 0x00c8, # ARABIC LETTER BEH - 0x0629: 0x00c9, # ARABIC LETTER TEH MARBUTA - 0x062a: 0x00ca, # ARABIC LETTER TEH - 0x062b: 0x00cb, # ARABIC LETTER THEH - 0x062c: 0x00cc, # ARABIC LETTER JEEM - 0x062d: 0x00cd, # ARABIC LETTER HAH - 0x062e: 0x00ce, # ARABIC LETTER KHAH - 0x062f: 0x00cf, # ARABIC LETTER DAL - 0x0630: 0x00d0, # ARABIC LETTER THAL - 0x0631: 0x00d1, # ARABIC LETTER REH - 0x0632: 0x00d2, # ARABIC LETTER ZAIN - 0x0633: 0x00d3, # ARABIC LETTER SEEN - 0x0634: 0x00d4, # ARABIC LETTER SHEEN - 0x0635: 0x00d5, # ARABIC LETTER SAD - 0x0636: 0x00d6, # ARABIC LETTER DAD - 0x0637: 0x00d7, # ARABIC LETTER TAH - 0x0638: 0x00d8, # ARABIC LETTER ZAH - 0x0639: 0x00d9, # ARABIC LETTER AIN - 0x063a: 0x00da, # ARABIC LETTER GHAIN - 0x0640: 0x00e0, # ARABIC TATWEEL - 0x0641: 0x00e1, # ARABIC LETTER FEH - 0x0642: 0x00e2, # ARABIC LETTER QAF - 0x0643: 0x00e3, # ARABIC LETTER KAF - 0x0644: 0x00e4, # ARABIC LETTER LAM - 0x0645: 0x00e5, # ARABIC LETTER MEEM - 0x0646: 0x00e6, # ARABIC LETTER NOON - 0x0647: 0x00e7, # ARABIC LETTER HEH - 0x0648: 0x00e8, # ARABIC LETTER WAW - 0x0649: 0x00e9, # ARABIC LETTER ALEF MAKSURA - 0x064a: 0x00ea, # ARABIC LETTER YEH - 0x064b: 0x00eb, # ARABIC FATHATAN - 0x064c: 0x00ec, # ARABIC DAMMATAN - 0x064d: 0x00ed, # ARABIC KASRATAN - 0x064e: 0x00ee, # ARABIC FATHA - 0x064f: 0x00ef, # ARABIC DAMMA - 0x0650: 0x00f0, # ARABIC KASRA - 0x0651: 0x00f1, # ARABIC SHADDA - 0x0652: 0x00f2, # ARABIC SUKUN - 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO, right-left (need override) - 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE, right-left (need override) - 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO, right-left (need override) - 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE, right-left (need override) - 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR, right-left (need override) - 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE, right-left (need override) - 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX, right-left (need override) - 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) - 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) - 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE, right-left (need override) - 0x066a: 0x00a5, # ARABIC PERCENT SIGN - 0x0679: 0x00f4, # ARABIC LETTER TTEH - 0x067e: 0x00f3, # ARABIC LETTER PEH - 0x0686: 0x00f5, # ARABIC LETTER TCHEH - 0x0688: 0x00f9, # ARABIC LETTER DDAL - 0x0691: 0x00fa, # ARABIC LETTER RREH - 0x0698: 0x00fe, # ARABIC LETTER JEH - 0x06a4: 0x00f7, # ARABIC LETTER VEH - 0x06af: 0x00f8, # ARABIC LETTER GAF - 0x06ba: 0x008b, # ARABIC LETTER NOON GHUNNA - 0x06d2: 0x00ff, # ARABIC LETTER YEH BARREE - 0x06d5: 0x00f6, # ARABIC LETTER AE - 0x2026: 0x0093, # HORIZONTAL ELLIPSIS, right-left - 0x274a: 0x00c0, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left -} diff --git a/Python314_4_x86_Template/Lib/encodings/mac_croatian.py b/Python314_4_x86_Template/Lib/encodings/mac_croatian.py deleted file mode 100644 index 4a92fe61a..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_croatian.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_croatian generated from 'MAPPINGS/VENDORS/APPLE/CROATIAN.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-croatian', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON - '\u2122' # 0xAA -> TRADE MARK SIGN - '\xb4' # 0xAB -> ACUTE ACCENT - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON - '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\u2206' # 0xB4 -> INCREMENT - '\xb5' # 0xB5 -> MICRO SIGN - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u220f' # 0xB8 -> N-ARY PRODUCT - '\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON - '\u222b' # 0xBA -> INTEGRAL - '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR - '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR - '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA - '\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON - '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE - '\xbf' # 0xC0 -> INVERTED QUESTION MARK - '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\uf8ff' # 0xD8 -> Apple logo - '\xa9' # 0xD9 -> COPYRIGHT SIGN - '\u2044' # 0xDA -> FRACTION SLASH - '\u20ac' # 0xDB -> EURO SIGN - '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\xc6' # 0xDE -> LATIN CAPITAL LETTER AE - '\xbb' # 0xDF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2013' # 0xE0 -> EN DASH - '\xb7' # 0xE1 -> MIDDLE DOT - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u2030' # 0xE4 -> PER MILLE SIGN - '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON - '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE - '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE - '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I - '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u02dc' # 0xF7 -> SMALL TILDE - '\xaf' # 0xF8 -> MACRON - '\u03c0' # 0xF9 -> GREEK SMALL LETTER PI - '\xcb' # 0xFA -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\u02da' # 0xFB -> RING ABOVE - '\xb8' # 0xFC -> CEDILLA - '\xca' # 0xFD -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xe6' # 0xFE -> LATIN SMALL LETTER AE - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_cyrillic.py b/Python314_4_x86_Template/Lib/encodings/mac_cyrillic.py deleted file mode 100644 index d20272acf..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_cyrillic.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_cyrillic generated from 'MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-cyrillic', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\u0410' # 0x80 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0x81 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0x82 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0x83 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0x84 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0x85 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0x86 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0x87 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0x88 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0x89 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0x8A -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0x8B -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0x8C -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0x8D -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0x8E -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0x8F -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0x90 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0x91 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0x92 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0x93 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0x94 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0x95 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0x96 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0x97 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0x98 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0x99 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0x9A -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0x9B -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0x9C -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0x9D -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0x9E -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0x9F -> CYRILLIC CAPITAL LETTER YA - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\u0490' # 0xA2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\u0406' # 0xA7 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\u0402' # 0xAB -> CYRILLIC CAPITAL LETTER DJE - '\u0452' # 0xAC -> CYRILLIC SMALL LETTER DJE - '\u2260' # 0xAD -> NOT EQUAL TO - '\u0403' # 0xAE -> CYRILLIC CAPITAL LETTER GJE - '\u0453' # 0xAF -> CYRILLIC SMALL LETTER GJE - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\u0456' # 0xB4 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\xb5' # 0xB5 -> MICRO SIGN - '\u0491' # 0xB6 -> CYRILLIC SMALL LETTER GHE WITH UPTURN - '\u0408' # 0xB7 -> CYRILLIC CAPITAL LETTER JE - '\u0404' # 0xB8 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE - '\u0454' # 0xB9 -> CYRILLIC SMALL LETTER UKRAINIAN IE - '\u0407' # 0xBA -> CYRILLIC CAPITAL LETTER YI - '\u0457' # 0xBB -> CYRILLIC SMALL LETTER YI - '\u0409' # 0xBC -> CYRILLIC CAPITAL LETTER LJE - '\u0459' # 0xBD -> CYRILLIC SMALL LETTER LJE - '\u040a' # 0xBE -> CYRILLIC CAPITAL LETTER NJE - '\u045a' # 0xBF -> CYRILLIC SMALL LETTER NJE - '\u0458' # 0xC0 -> CYRILLIC SMALL LETTER JE - '\u0405' # 0xC1 -> CYRILLIC CAPITAL LETTER DZE - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\u040b' # 0xCB -> CYRILLIC CAPITAL LETTER TSHE - '\u045b' # 0xCC -> CYRILLIC SMALL LETTER TSHE - '\u040c' # 0xCD -> CYRILLIC CAPITAL LETTER KJE - '\u045c' # 0xCE -> CYRILLIC SMALL LETTER KJE - '\u0455' # 0xCF -> CYRILLIC SMALL LETTER DZE - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u201e' # 0xD7 -> DOUBLE LOW-9 QUOTATION MARK - '\u040e' # 0xD8 -> CYRILLIC CAPITAL LETTER SHORT U - '\u045e' # 0xD9 -> CYRILLIC SMALL LETTER SHORT U - '\u040f' # 0xDA -> CYRILLIC CAPITAL LETTER DZHE - '\u045f' # 0xDB -> CYRILLIC SMALL LETTER DZHE - '\u2116' # 0xDC -> NUMERO SIGN - '\u0401' # 0xDD -> CYRILLIC CAPITAL LETTER IO - '\u0451' # 0xDE -> CYRILLIC SMALL LETTER IO - '\u044f' # 0xDF -> CYRILLIC SMALL LETTER YA - '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O - '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE - '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E - '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU - '\u20ac' # 0xFF -> EURO SIGN -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_farsi.py b/Python314_4_x86_Template/Lib/encodings/mac_farsi.py deleted file mode 100644 index e357d4351..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_farsi.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_farsi generated from 'MAPPINGS/VENDORS/APPLE/FARSI.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-farsi', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE, left-right - '!' # 0x21 -> EXCLAMATION MARK, left-right - '"' # 0x22 -> QUOTATION MARK, left-right - '#' # 0x23 -> NUMBER SIGN, left-right - '$' # 0x24 -> DOLLAR SIGN, left-right - '%' # 0x25 -> PERCENT SIGN, left-right - '&' # 0x26 -> AMPERSAND, left-right - "'" # 0x27 -> APOSTROPHE, left-right - '(' # 0x28 -> LEFT PARENTHESIS, left-right - ')' # 0x29 -> RIGHT PARENTHESIS, left-right - '*' # 0x2A -> ASTERISK, left-right - '+' # 0x2B -> PLUS SIGN, left-right - ',' # 0x2C -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR - '-' # 0x2D -> HYPHEN-MINUS, left-right - '.' # 0x2E -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR - '/' # 0x2F -> SOLIDUS, left-right - '0' # 0x30 -> DIGIT ZERO; in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO - '1' # 0x31 -> DIGIT ONE; in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE - '2' # 0x32 -> DIGIT TWO; in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO - '3' # 0x33 -> DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE - '4' # 0x34 -> DIGIT FOUR; in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE; in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE - '6' # 0x36 -> DIGIT SIX; in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE; in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE - ':' # 0x3A -> COLON, left-right - ';' # 0x3B -> SEMICOLON, left-right - '<' # 0x3C -> LESS-THAN SIGN, left-right - '=' # 0x3D -> EQUALS SIGN, left-right - '>' # 0x3E -> GREATER-THAN SIGN, left-right - '?' # 0x3F -> QUESTION MARK, left-right - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET, left-right - '\\' # 0x5C -> REVERSE SOLIDUS, left-right - ']' # 0x5D -> RIGHT SQUARE BRACKET, left-right - '^' # 0x5E -> CIRCUMFLEX ACCENT, left-right - '_' # 0x5F -> LOW LINE, left-right - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET, left-right - '|' # 0x7C -> VERTICAL LINE, left-right - '}' # 0x7D -> RIGHT CURLY BRACKET, left-right - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xa0' # 0x81 -> NO-BREAK SPACE, right-left - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\u06ba' # 0x8B -> ARABIC LETTER NOON GHUNNA - '\xab' # 0x8C -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\u2026' # 0x93 -> HORIZONTAL ELLIPSIS, right-left - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xbb' # 0x98 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0x9B -> DIVISION SIGN, right-left - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - ' ' # 0xA0 -> SPACE, right-left - '!' # 0xA1 -> EXCLAMATION MARK, right-left - '"' # 0xA2 -> QUOTATION MARK, right-left - '#' # 0xA3 -> NUMBER SIGN, right-left - '$' # 0xA4 -> DOLLAR SIGN, right-left - '\u066a' # 0xA5 -> ARABIC PERCENT SIGN - '&' # 0xA6 -> AMPERSAND, right-left - "'" # 0xA7 -> APOSTROPHE, right-left - '(' # 0xA8 -> LEFT PARENTHESIS, right-left - ')' # 0xA9 -> RIGHT PARENTHESIS, right-left - '*' # 0xAA -> ASTERISK, right-left - '+' # 0xAB -> PLUS SIGN, right-left - '\u060c' # 0xAC -> ARABIC COMMA - '-' # 0xAD -> HYPHEN-MINUS, right-left - '.' # 0xAE -> FULL STOP, right-left - '/' # 0xAF -> SOLIDUS, right-left - '\u06f0' # 0xB0 -> EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override) - '\u06f1' # 0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override) - '\u06f2' # 0xB2 -> EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override) - '\u06f3' # 0xB3 -> EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override) - '\u06f4' # 0xB4 -> EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override) - '\u06f5' # 0xB5 -> EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override) - '\u06f6' # 0xB6 -> EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override) - '\u06f7' # 0xB7 -> EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override) - '\u06f8' # 0xB8 -> EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override) - '\u06f9' # 0xB9 -> EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override) - ':' # 0xBA -> COLON, right-left - '\u061b' # 0xBB -> ARABIC SEMICOLON - '<' # 0xBC -> LESS-THAN SIGN, right-left - '=' # 0xBD -> EQUALS SIGN, right-left - '>' # 0xBE -> GREATER-THAN SIGN, right-left - '\u061f' # 0xBF -> ARABIC QUESTION MARK - '\u274a' # 0xC0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left - '\u0621' # 0xC1 -> ARABIC LETTER HAMZA - '\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0xC7 -> ARABIC LETTER ALEF - '\u0628' # 0xC8 -> ARABIC LETTER BEH - '\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0xCA -> ARABIC LETTER TEH - '\u062b' # 0xCB -> ARABIC LETTER THEH - '\u062c' # 0xCC -> ARABIC LETTER JEEM - '\u062d' # 0xCD -> ARABIC LETTER HAH - '\u062e' # 0xCE -> ARABIC LETTER KHAH - '\u062f' # 0xCF -> ARABIC LETTER DAL - '\u0630' # 0xD0 -> ARABIC LETTER THAL - '\u0631' # 0xD1 -> ARABIC LETTER REH - '\u0632' # 0xD2 -> ARABIC LETTER ZAIN - '\u0633' # 0xD3 -> ARABIC LETTER SEEN - '\u0634' # 0xD4 -> ARABIC LETTER SHEEN - '\u0635' # 0xD5 -> ARABIC LETTER SAD - '\u0636' # 0xD6 -> ARABIC LETTER DAD - '\u0637' # 0xD7 -> ARABIC LETTER TAH - '\u0638' # 0xD8 -> ARABIC LETTER ZAH - '\u0639' # 0xD9 -> ARABIC LETTER AIN - '\u063a' # 0xDA -> ARABIC LETTER GHAIN - '[' # 0xDB -> LEFT SQUARE BRACKET, right-left - '\\' # 0xDC -> REVERSE SOLIDUS, right-left - ']' # 0xDD -> RIGHT SQUARE BRACKET, right-left - '^' # 0xDE -> CIRCUMFLEX ACCENT, right-left - '_' # 0xDF -> LOW LINE, right-left - '\u0640' # 0xE0 -> ARABIC TATWEEL - '\u0641' # 0xE1 -> ARABIC LETTER FEH - '\u0642' # 0xE2 -> ARABIC LETTER QAF - '\u0643' # 0xE3 -> ARABIC LETTER KAF - '\u0644' # 0xE4 -> ARABIC LETTER LAM - '\u0645' # 0xE5 -> ARABIC LETTER MEEM - '\u0646' # 0xE6 -> ARABIC LETTER NOON - '\u0647' # 0xE7 -> ARABIC LETTER HEH - '\u0648' # 0xE8 -> ARABIC LETTER WAW - '\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0xEA -> ARABIC LETTER YEH - '\u064b' # 0xEB -> ARABIC FATHATAN - '\u064c' # 0xEC -> ARABIC DAMMATAN - '\u064d' # 0xED -> ARABIC KASRATAN - '\u064e' # 0xEE -> ARABIC FATHA - '\u064f' # 0xEF -> ARABIC DAMMA - '\u0650' # 0xF0 -> ARABIC KASRA - '\u0651' # 0xF1 -> ARABIC SHADDA - '\u0652' # 0xF2 -> ARABIC SUKUN - '\u067e' # 0xF3 -> ARABIC LETTER PEH - '\u0679' # 0xF4 -> ARABIC LETTER TTEH - '\u0686' # 0xF5 -> ARABIC LETTER TCHEH - '\u06d5' # 0xF6 -> ARABIC LETTER AE - '\u06a4' # 0xF7 -> ARABIC LETTER VEH - '\u06af' # 0xF8 -> ARABIC LETTER GAF - '\u0688' # 0xF9 -> ARABIC LETTER DDAL - '\u0691' # 0xFA -> ARABIC LETTER RREH - '{' # 0xFB -> LEFT CURLY BRACKET, right-left - '|' # 0xFC -> VERTICAL LINE, right-left - '}' # 0xFD -> RIGHT CURLY BRACKET, right-left - '\u0698' # 0xFE -> ARABIC LETTER JEH - '\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_greek.py b/Python314_4_x86_Template/Lib/encodings/mac_greek.py deleted file mode 100644 index d3d0c4f0c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_greek.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_greek generated from 'MAPPINGS/VENDORS/APPLE/GREEK.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-greek', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xb9' # 0x81 -> SUPERSCRIPT ONE - '\xb2' # 0x82 -> SUPERSCRIPT TWO - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xb3' # 0x84 -> SUPERSCRIPT THREE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\u0385' # 0x87 -> GREEK DIALYTIKA TONOS - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\u0384' # 0x8B -> GREEK TONOS - '\xa8' # 0x8C -> DIAERESIS - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xa3' # 0x92 -> POUND SIGN - '\u2122' # 0x93 -> TRADE MARK SIGN - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\u2022' # 0x96 -> BULLET - '\xbd' # 0x97 -> VULGAR FRACTION ONE HALF - '\u2030' # 0x98 -> PER MILLE SIGN - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xa6' # 0x9B -> BROKEN BAR - '\u20ac' # 0x9C -> EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\u0393' # 0xA1 -> GREEK CAPITAL LETTER GAMMA - '\u0394' # 0xA2 -> GREEK CAPITAL LETTER DELTA - '\u0398' # 0xA3 -> GREEK CAPITAL LETTER THETA - '\u039b' # 0xA4 -> GREEK CAPITAL LETTER LAMDA - '\u039e' # 0xA5 -> GREEK CAPITAL LETTER XI - '\u03a0' # 0xA6 -> GREEK CAPITAL LETTER PI - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u03a3' # 0xAA -> GREEK CAPITAL LETTER SIGMA - '\u03aa' # 0xAB -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - '\xa7' # 0xAC -> SECTION SIGN - '\u2260' # 0xAD -> NOT EQUAL TO - '\xb0' # 0xAE -> DEGREE SIGN - '\xb7' # 0xAF -> MIDDLE DOT - '\u0391' # 0xB0 -> GREEK CAPITAL LETTER ALPHA - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\xa5' # 0xB4 -> YEN SIGN - '\u0392' # 0xB5 -> GREEK CAPITAL LETTER BETA - '\u0395' # 0xB6 -> GREEK CAPITAL LETTER EPSILON - '\u0396' # 0xB7 -> GREEK CAPITAL LETTER ZETA - '\u0397' # 0xB8 -> GREEK CAPITAL LETTER ETA - '\u0399' # 0xB9 -> GREEK CAPITAL LETTER IOTA - '\u039a' # 0xBA -> GREEK CAPITAL LETTER KAPPA - '\u039c' # 0xBB -> GREEK CAPITAL LETTER MU - '\u03a6' # 0xBC -> GREEK CAPITAL LETTER PHI - '\u03ab' # 0xBD -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - '\u03a8' # 0xBE -> GREEK CAPITAL LETTER PSI - '\u03a9' # 0xBF -> GREEK CAPITAL LETTER OMEGA - '\u03ac' # 0xC0 -> GREEK SMALL LETTER ALPHA WITH TONOS - '\u039d' # 0xC1 -> GREEK CAPITAL LETTER NU - '\xac' # 0xC2 -> NOT SIGN - '\u039f' # 0xC3 -> GREEK CAPITAL LETTER OMICRON - '\u03a1' # 0xC4 -> GREEK CAPITAL LETTER RHO - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u03a4' # 0xC6 -> GREEK CAPITAL LETTER TAU - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\u03a5' # 0xCB -> GREEK CAPITAL LETTER UPSILON - '\u03a7' # 0xCC -> GREEK CAPITAL LETTER CHI - '\u0386' # 0xCD -> GREEK CAPITAL LETTER ALPHA WITH TONOS - '\u0388' # 0xCE -> GREEK CAPITAL LETTER EPSILON WITH TONOS - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u2013' # 0xD0 -> EN DASH - '\u2015' # 0xD1 -> HORIZONTAL BAR - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u0389' # 0xD7 -> GREEK CAPITAL LETTER ETA WITH TONOS - '\u038a' # 0xD8 -> GREEK CAPITAL LETTER IOTA WITH TONOS - '\u038c' # 0xD9 -> GREEK CAPITAL LETTER OMICRON WITH TONOS - '\u038e' # 0xDA -> GREEK CAPITAL LETTER UPSILON WITH TONOS - '\u03ad' # 0xDB -> GREEK SMALL LETTER EPSILON WITH TONOS - '\u03ae' # 0xDC -> GREEK SMALL LETTER ETA WITH TONOS - '\u03af' # 0xDD -> GREEK SMALL LETTER IOTA WITH TONOS - '\u03cc' # 0xDE -> GREEK SMALL LETTER OMICRON WITH TONOS - '\u038f' # 0xDF -> GREEK CAPITAL LETTER OMEGA WITH TONOS - '\u03cd' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH TONOS - '\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA - '\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA - '\u03c8' # 0xE3 -> GREEK SMALL LETTER PSI - '\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA - '\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON - '\u03c6' # 0xE6 -> GREEK SMALL LETTER PHI - '\u03b3' # 0xE7 -> GREEK SMALL LETTER GAMMA - '\u03b7' # 0xE8 -> GREEK SMALL LETTER ETA - '\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA - '\u03be' # 0xEA -> GREEK SMALL LETTER XI - '\u03ba' # 0xEB -> GREEK SMALL LETTER KAPPA - '\u03bb' # 0xEC -> GREEK SMALL LETTER LAMDA - '\u03bc' # 0xED -> GREEK SMALL LETTER MU - '\u03bd' # 0xEE -> GREEK SMALL LETTER NU - '\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON - '\u03c0' # 0xF0 -> GREEK SMALL LETTER PI - '\u03ce' # 0xF1 -> GREEK SMALL LETTER OMEGA WITH TONOS - '\u03c1' # 0xF2 -> GREEK SMALL LETTER RHO - '\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA - '\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU - '\u03b8' # 0xF5 -> GREEK SMALL LETTER THETA - '\u03c9' # 0xF6 -> GREEK SMALL LETTER OMEGA - '\u03c2' # 0xF7 -> GREEK SMALL LETTER FINAL SIGMA - '\u03c7' # 0xF8 -> GREEK SMALL LETTER CHI - '\u03c5' # 0xF9 -> GREEK SMALL LETTER UPSILON - '\u03b6' # 0xFA -> GREEK SMALL LETTER ZETA - '\u03ca' # 0xFB -> GREEK SMALL LETTER IOTA WITH DIALYTIKA - '\u03cb' # 0xFC -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA - '\u0390' # 0xFD -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - '\u03b0' # 0xFE -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - '\xad' # 0xFF -> SOFT HYPHEN # before Mac OS 9.2.2, was undefined -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_iceland.py b/Python314_4_x86_Template/Lib/encodings/mac_iceland.py deleted file mode 100644 index add10f4e5..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_iceland.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_iceland generated from 'MAPPINGS/VENDORS/APPLE/ICELAND.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-iceland', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\xdd' # 0xA0 -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xb0' # 0xA1 -> DEGREE SIGN - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\xb4' # 0xAB -> ACUTE ACCENT - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE - '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\xa5' # 0xB4 -> YEN SIGN - '\xb5' # 0xB5 -> MICRO SIGN - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u220f' # 0xB8 -> N-ARY PRODUCT - '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI - '\u222b' # 0xBA -> INTEGRAL - '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR - '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR - '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA - '\xe6' # 0xBE -> LATIN SMALL LETTER AE - '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE - '\xbf' # 0xC0 -> INVERTED QUESTION MARK - '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u2044' # 0xDA -> FRACTION SLASH - '\u20ac' # 0xDB -> EURO SIGN - '\xd0' # 0xDC -> LATIN CAPITAL LETTER ETH - '\xf0' # 0xDD -> LATIN SMALL LETTER ETH - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN - '\xfe' # 0xDF -> LATIN SMALL LETTER THORN - '\xfd' # 0xE0 -> LATIN SMALL LETTER Y WITH ACUTE - '\xb7' # 0xE1 -> MIDDLE DOT - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u2030' # 0xE4 -> PER MILLE SIGN - '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\uf8ff' # 0xF0 -> Apple logo - '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE - '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I - '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u02dc' # 0xF7 -> SMALL TILDE - '\xaf' # 0xF8 -> MACRON - '\u02d8' # 0xF9 -> BREVE - '\u02d9' # 0xFA -> DOT ABOVE - '\u02da' # 0xFB -> RING ABOVE - '\xb8' # 0xFC -> CEDILLA - '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT - '\u02db' # 0xFE -> OGONEK - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_latin2.py b/Python314_4_x86_Template/Lib/encodings/mac_latin2.py deleted file mode 100644 index da9d4b134..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_latin2.py +++ /dev/null @@ -1,312 +0,0 @@ -""" Python Character Mapping Codec mac_latin2 generated from 'MAPPINGS/VENDORS/MICSFT/MAC/LATIN2.TXT' with gencodec.py. - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. -(c) Copyright 2000 Guido van Rossum. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-latin2', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\u0100' # 0x81 -> LATIN CAPITAL LETTER A WITH MACRON - '\u0101' # 0x82 -> LATIN SMALL LETTER A WITH MACRON - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\u0104' # 0x84 -> LATIN CAPITAL LETTER A WITH OGONEK - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\u0105' # 0x88 -> LATIN SMALL LETTER A WITH OGONEK - '\u010c' # 0x89 -> LATIN CAPITAL LETTER C WITH CARON - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\u010d' # 0x8B -> LATIN SMALL LETTER C WITH CARON - '\u0106' # 0x8C -> LATIN CAPITAL LETTER C WITH ACUTE - '\u0107' # 0x8D -> LATIN SMALL LETTER C WITH ACUTE - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE - '\u017a' # 0x90 -> LATIN SMALL LETTER Z WITH ACUTE - '\u010e' # 0x91 -> LATIN CAPITAL LETTER D WITH CARON - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\u010f' # 0x93 -> LATIN SMALL LETTER D WITH CARON - '\u0112' # 0x94 -> LATIN CAPITAL LETTER E WITH MACRON - '\u0113' # 0x95 -> LATIN SMALL LETTER E WITH MACRON - '\u0116' # 0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\u0117' # 0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\u011a' # 0x9D -> LATIN CAPITAL LETTER E WITH CARON - '\u011b' # 0x9E -> LATIN SMALL LETTER E WITH CARON - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\u0118' # 0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\u0119' # 0xAB -> LATIN SMALL LETTER E WITH OGONEK - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\u0123' # 0xAE -> LATIN SMALL LETTER G WITH CEDILLA - '\u012e' # 0xAF -> LATIN CAPITAL LETTER I WITH OGONEK - '\u012f' # 0xB0 -> LATIN SMALL LETTER I WITH OGONEK - '\u012a' # 0xB1 -> LATIN CAPITAL LETTER I WITH MACRON - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON - '\u0136' # 0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u0142' # 0xB8 -> LATIN SMALL LETTER L WITH STROKE - '\u013b' # 0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA - '\u013c' # 0xBA -> LATIN SMALL LETTER L WITH CEDILLA - '\u013d' # 0xBB -> LATIN CAPITAL LETTER L WITH CARON - '\u013e' # 0xBC -> LATIN SMALL LETTER L WITH CARON - '\u0139' # 0xBD -> LATIN CAPITAL LETTER L WITH ACUTE - '\u013a' # 0xBE -> LATIN SMALL LETTER L WITH ACUTE - '\u0145' # 0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA - '\u0146' # 0xC0 -> LATIN SMALL LETTER N WITH CEDILLA - '\u0143' # 0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0144' # 0xC4 -> LATIN SMALL LETTER N WITH ACUTE - '\u0147' # 0xC5 -> LATIN CAPITAL LETTER N WITH CARON - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\u0148' # 0xCB -> LATIN SMALL LETTER N WITH CARON - '\u0150' # 0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0151' # 0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE - '\u014c' # 0xCF -> LATIN CAPITAL LETTER O WITH MACRON - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\u014d' # 0xD8 -> LATIN SMALL LETTER O WITH MACRON - '\u0154' # 0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE - '\u0155' # 0xDA -> LATIN SMALL LETTER R WITH ACUTE - '\u0158' # 0xDB -> LATIN CAPITAL LETTER R WITH CARON - '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0159' # 0xDE -> LATIN SMALL LETTER R WITH CARON - '\u0156' # 0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA - '\u0157' # 0xE0 -> LATIN SMALL LETTER R WITH CEDILLA - '\u0160' # 0xE1 -> LATIN CAPITAL LETTER S WITH CARON - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u0161' # 0xE4 -> LATIN SMALL LETTER S WITH CARON - '\u015a' # 0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE - '\u015b' # 0xE6 -> LATIN SMALL LETTER S WITH ACUTE - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\u0164' # 0xE8 -> LATIN CAPITAL LETTER T WITH CARON - '\u0165' # 0xE9 -> LATIN SMALL LETTER T WITH CARON - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\u017d' # 0xEB -> LATIN CAPITAL LETTER Z WITH CARON - '\u017e' # 0xEC -> LATIN SMALL LETTER Z WITH CARON - '\u016a' # 0xED -> LATIN CAPITAL LETTER U WITH MACRON - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\u016b' # 0xF0 -> LATIN SMALL LETTER U WITH MACRON - '\u016e' # 0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\u016f' # 0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE - '\u0170' # 0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - '\u0171' # 0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE - '\u0172' # 0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK - '\u0173' # 0xF7 -> LATIN SMALL LETTER U WITH OGONEK - '\xdd' # 0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xfd' # 0xF9 -> LATIN SMALL LETTER Y WITH ACUTE - '\u0137' # 0xFA -> LATIN SMALL LETTER K WITH CEDILLA - '\u017b' # 0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE - '\u0141' # 0xFC -> LATIN CAPITAL LETTER L WITH STROKE - '\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE - '\u0122' # 0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_roman.py b/Python314_4_x86_Template/Lib/encodings/mac_roman.py deleted file mode 100644 index b74b00213..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_roman.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_roman generated from 'MAPPINGS/VENDORS/APPLE/ROMAN.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-roman', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\xb4' # 0xAB -> ACUTE ACCENT - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE - '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\xa5' # 0xB4 -> YEN SIGN - '\xb5' # 0xB5 -> MICRO SIGN - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u220f' # 0xB8 -> N-ARY PRODUCT - '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI - '\u222b' # 0xBA -> INTEGRAL - '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR - '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR - '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA - '\xe6' # 0xBE -> LATIN SMALL LETTER AE - '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE - '\xbf' # 0xC0 -> INVERTED QUESTION MARK - '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u2044' # 0xDA -> FRACTION SLASH - '\u20ac' # 0xDB -> EURO SIGN - '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\ufb01' # 0xDE -> LATIN SMALL LIGATURE FI - '\ufb02' # 0xDF -> LATIN SMALL LIGATURE FL - '\u2021' # 0xE0 -> DOUBLE DAGGER - '\xb7' # 0xE1 -> MIDDLE DOT - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u2030' # 0xE4 -> PER MILLE SIGN - '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\uf8ff' # 0xF0 -> Apple logo - '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE - '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I - '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u02dc' # 0xF7 -> SMALL TILDE - '\xaf' # 0xF8 -> MACRON - '\u02d8' # 0xF9 -> BREVE - '\u02d9' # 0xFA -> DOT ABOVE - '\u02da' # 0xFB -> RING ABOVE - '\xb8' # 0xFC -> CEDILLA - '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT - '\u02db' # 0xFE -> OGONEK - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_romanian.py b/Python314_4_x86_Template/Lib/encodings/mac_romanian.py deleted file mode 100644 index d141b4c50..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_romanian.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_romanian generated from 'MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-romanian', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\xb4' # 0xAB -> ACUTE ACCENT - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\u0102' # 0xAE -> LATIN CAPITAL LETTER A WITH BREVE - '\u0218' # 0xAF -> LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\xa5' # 0xB4 -> YEN SIGN - '\xb5' # 0xB5 -> MICRO SIGN - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u220f' # 0xB8 -> N-ARY PRODUCT - '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI - '\u222b' # 0xBA -> INTEGRAL - '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR - '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR - '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA - '\u0103' # 0xBE -> LATIN SMALL LETTER A WITH BREVE - '\u0219' # 0xBF -> LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later - '\xbf' # 0xC0 -> INVERTED QUESTION MARK - '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u2044' # 0xDA -> FRACTION SLASH - '\u20ac' # 0xDB -> EURO SIGN - '\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later - '\u021b' # 0xDF -> LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later - '\u2021' # 0xE0 -> DOUBLE DAGGER - '\xb7' # 0xE1 -> MIDDLE DOT - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u2030' # 0xE4 -> PER MILLE SIGN - '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\uf8ff' # 0xF0 -> Apple logo - '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE - '\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I - '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u02dc' # 0xF7 -> SMALL TILDE - '\xaf' # 0xF8 -> MACRON - '\u02d8' # 0xF9 -> BREVE - '\u02d9' # 0xFA -> DOT ABOVE - '\u02da' # 0xFB -> RING ABOVE - '\xb8' # 0xFC -> CEDILLA - '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT - '\u02db' # 0xFE -> OGONEK - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mac_turkish.py b/Python314_4_x86_Template/Lib/encodings/mac_turkish.py deleted file mode 100644 index 044d4cb5a..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mac_turkish.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec mac_turkish generated from 'MAPPINGS/VENDORS/APPLE/TURKISH.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mac-turkish', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE - '\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE - '\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE - '\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA - '\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE - '\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE - '\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE - '\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE - '\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE - '\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE - '\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE - '\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE - '\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE - '\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE - '\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS - '\u2020' # 0xA0 -> DAGGER - '\xb0' # 0xA1 -> DEGREE SIGN - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa7' # 0xA4 -> SECTION SIGN - '\u2022' # 0xA5 -> BULLET - '\xb6' # 0xA6 -> PILCROW SIGN - '\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S - '\xae' # 0xA8 -> REGISTERED SIGN - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u2122' # 0xAA -> TRADE MARK SIGN - '\xb4' # 0xAB -> ACUTE ACCENT - '\xa8' # 0xAC -> DIAERESIS - '\u2260' # 0xAD -> NOT EQUAL TO - '\xc6' # 0xAE -> LATIN CAPITAL LETTER AE - '\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE - '\u221e' # 0xB0 -> INFINITY - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO - '\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO - '\xa5' # 0xB4 -> YEN SIGN - '\xb5' # 0xB5 -> MICRO SIGN - '\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL - '\u2211' # 0xB7 -> N-ARY SUMMATION - '\u220f' # 0xB8 -> N-ARY PRODUCT - '\u03c0' # 0xB9 -> GREEK SMALL LETTER PI - '\u222b' # 0xBA -> INTEGRAL - '\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR - '\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR - '\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA - '\xe6' # 0xBE -> LATIN SMALL LETTER AE - '\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE - '\xbf' # 0xC0 -> INVERTED QUESTION MARK - '\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK - '\xac' # 0xC2 -> NOT SIGN - '\u221a' # 0xC3 -> SQUARE ROOT - '\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK - '\u2248' # 0xC5 -> ALMOST EQUAL TO - '\u2206' # 0xC6 -> INCREMENT - '\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS - '\xa0' # 0xCA -> NO-BREAK SPACE - '\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE - '\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE - '\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE - '\u0153' # 0xCF -> LATIN SMALL LIGATURE OE - '\u2013' # 0xD0 -> EN DASH - '\u2014' # 0xD1 -> EM DASH - '\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK - '\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK - '\xf7' # 0xD6 -> DIVISION SIGN - '\u25ca' # 0xD7 -> LOZENGE - '\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS - '\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\u011e' # 0xDA -> LATIN CAPITAL LETTER G WITH BREVE - '\u011f' # 0xDB -> LATIN SMALL LETTER G WITH BREVE - '\u0130' # 0xDC -> LATIN CAPITAL LETTER I WITH DOT ABOVE - '\u0131' # 0xDD -> LATIN SMALL LETTER DOTLESS I - '\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA - '\u015f' # 0xDF -> LATIN SMALL LETTER S WITH CEDILLA - '\u2021' # 0xE0 -> DOUBLE DAGGER - '\xb7' # 0xE1 -> MIDDLE DOT - '\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK - '\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK - '\u2030' # 0xE4 -> PER MILLE SIGN - '\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE - '\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\uf8ff' # 0xF0 -> Apple logo - '\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE - '\uf8a0' # 0xF5 -> undefined1 - '\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u02dc' # 0xF7 -> SMALL TILDE - '\xaf' # 0xF8 -> MACRON - '\u02d8' # 0xF9 -> BREVE - '\u02d9' # 0xFA -> DOT ABOVE - '\u02da' # 0xFB -> RING ABOVE - '\xb8' # 0xFC -> CEDILLA - '\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT - '\u02db' # 0xFE -> OGONEK - '\u02c7' # 0xFF -> CARON -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/mbcs.py b/Python314_4_x86_Template/Lib/encodings/mbcs.py deleted file mode 100644 index baf46cbd4..000000000 --- a/Python314_4_x86_Template/Lib/encodings/mbcs.py +++ /dev/null @@ -1,47 +0,0 @@ -""" Python 'mbcs' Codec for Windows - - -Cloned by Mark Hammond (mhammond@skippinet.com.au) from ascii.py, -which was written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -# Import them explicitly to cause an ImportError -# on non-Windows systems -from codecs import mbcs_encode, mbcs_decode -# for IncrementalDecoder, IncrementalEncoder, ... -import codecs - -### Codec APIs - -encode = mbcs_encode - -def decode(input, errors='strict'): - return mbcs_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return mbcs_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = mbcs_decode - -class StreamWriter(codecs.StreamWriter): - encode = mbcs_encode - -class StreamReader(codecs.StreamReader): - decode = mbcs_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='mbcs', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/oem.py b/Python314_4_x86_Template/Lib/encodings/oem.py deleted file mode 100644 index 2c3426ba4..000000000 --- a/Python314_4_x86_Template/Lib/encodings/oem.py +++ /dev/null @@ -1,41 +0,0 @@ -""" Python 'oem' Codec for Windows - -""" -# Import them explicitly to cause an ImportError -# on non-Windows systems -from codecs import oem_encode, oem_decode -# for IncrementalDecoder, IncrementalEncoder, ... -import codecs - -### Codec APIs - -encode = oem_encode - -def decode(input, errors='strict'): - return oem_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return oem_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = oem_decode - -class StreamWriter(codecs.StreamWriter): - encode = oem_encode - -class StreamReader(codecs.StreamReader): - decode = oem_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='oem', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/palmos.py b/Python314_4_x86_Template/Lib/encodings/palmos.py deleted file mode 100644 index df164ca5b..000000000 --- a/Python314_4_x86_Template/Lib/encodings/palmos.py +++ /dev/null @@ -1,308 +0,0 @@ -""" Python Character Mapping Codec for PalmOS 3.5. - -Written by Sjoerd Mullender (sjoerd@acm.org); based on iso8859_15.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='palmos', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\u20ac' # 0x80 -> EURO SIGN - '\x81' # 0x81 -> <control> - '\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK - '\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u2020' # 0x86 -> DAGGER - '\u2021' # 0x87 -> DOUBLE DAGGER - '\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT - '\u2030' # 0x89 -> PER MILLE SIGN - '\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON - '\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK - '\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE - '\u2666' # 0x8D -> BLACK DIAMOND SUIT - '\u2663' # 0x8E -> BLACK CLUB SUIT - '\u2665' # 0x8F -> BLACK HEART SUIT - '\u2660' # 0x90 -> BLACK SPADE SUIT - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u02dc' # 0x98 -> SMALL TILDE - '\u2122' # 0x99 -> TRADE MARK SIGN - '\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON - '\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - '\u0153' # 0x9C -> LATIN SMALL LIGATURE OE - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK - '\xa2' # 0xA2 -> CENT SIGN - '\xa3' # 0xA3 -> POUND SIGN - '\xa4' # 0xA4 -> CURRENCY SIGN - '\xa5' # 0xA5 -> YEN SIGN - '\xa6' # 0xA6 -> BROKEN BAR - '\xa7' # 0xA7 -> SECTION SIGN - '\xa8' # 0xA8 -> DIAERESIS - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\xad' # 0xAD -> SOFT HYPHEN - '\xae' # 0xAE -> REGISTERED SIGN - '\xaf' # 0xAF -> MACRON - '\xb0' # 0xB0 -> DEGREE SIGN - '\xb1' # 0xB1 -> PLUS-MINUS SIGN - '\xb2' # 0xB2 -> SUPERSCRIPT TWO - '\xb3' # 0xB3 -> SUPERSCRIPT THREE - '\xb4' # 0xB4 -> ACUTE ACCENT - '\xb5' # 0xB5 -> MICRO SIGN - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\xb8' # 0xB8 -> CEDILLA - '\xb9' # 0xB9 -> SUPERSCRIPT ONE - '\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER - '\xbd' # 0xBD -> VULGAR FRACTION ONE HALF - '\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS - '\xbf' # 0xBF -> INVERTED QUESTION MARK - '\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE - '\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE - '\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX - '\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE - '\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS - '\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE - '\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE - '\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA - '\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE - '\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE - '\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX - '\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS - '\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE - '\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE - '\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX - '\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS - '\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) - '\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE - '\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE - '\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE - '\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX - '\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE - '\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS - '\xd7' # 0xD7 -> MULTIPLICATION SIGN - '\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE - '\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE - '\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE - '\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX - '\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS - '\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE - '\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) - '\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) - '\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE - '\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE - '\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE - '\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS - '\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE - '\xe6' # 0xE6 -> LATIN SMALL LETTER AE - '\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA - '\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE - '\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE - '\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS - '\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE - '\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE - '\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS - '\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) - '\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE - '\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE - '\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE - '\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE - '\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS - '\xf7' # 0xF7 -> DIVISION SIGN - '\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE - '\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE - '\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE - '\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS - '\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE - '\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) - '\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/ptcp154.py b/Python314_4_x86_Template/Lib/encodings/ptcp154.py deleted file mode 100644 index 656b79d6a..000000000 --- a/Python314_4_x86_Template/Lib/encodings/ptcp154.py +++ /dev/null @@ -1,312 +0,0 @@ -""" Python Character Mapping Codec generated from 'PTCP154.txt' with gencodec.py. - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. -(c) Copyright 2000 Guido van Rossum. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='ptcp154', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE (DEL) - '\u0496' # 0x80 -> CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER - '\u0492' # 0x81 -> CYRILLIC CAPITAL LETTER GHE WITH STROKE - '\u04ee' # 0x82 -> CYRILLIC CAPITAL LETTER U WITH MACRON - '\u0493' # 0x83 -> CYRILLIC SMALL LETTER GHE WITH STROKE - '\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK - '\u2026' # 0x85 -> HORIZONTAL ELLIPSIS - '\u04b6' # 0x86 -> CYRILLIC CAPITAL LETTER CHE WITH DESCENDER - '\u04ae' # 0x87 -> CYRILLIC CAPITAL LETTER STRAIGHT U - '\u04b2' # 0x88 -> CYRILLIC CAPITAL LETTER HA WITH DESCENDER - '\u04af' # 0x89 -> CYRILLIC SMALL LETTER STRAIGHT U - '\u04a0' # 0x8A -> CYRILLIC CAPITAL LETTER BASHKIR KA - '\u04e2' # 0x8B -> CYRILLIC CAPITAL LETTER I WITH MACRON - '\u04a2' # 0x8C -> CYRILLIC CAPITAL LETTER EN WITH DESCENDER - '\u049a' # 0x8D -> CYRILLIC CAPITAL LETTER KA WITH DESCENDER - '\u04ba' # 0x8E -> CYRILLIC CAPITAL LETTER SHHA - '\u04b8' # 0x8F -> CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE - '\u0497' # 0x90 -> CYRILLIC SMALL LETTER ZHE WITH DESCENDER - '\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK - '\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK - '\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK - '\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK - '\u2022' # 0x95 -> BULLET - '\u2013' # 0x96 -> EN DASH - '\u2014' # 0x97 -> EM DASH - '\u04b3' # 0x98 -> CYRILLIC SMALL LETTER HA WITH DESCENDER - '\u04b7' # 0x99 -> CYRILLIC SMALL LETTER CHE WITH DESCENDER - '\u04a1' # 0x9A -> CYRILLIC SMALL LETTER BASHKIR KA - '\u04e3' # 0x9B -> CYRILLIC SMALL LETTER I WITH MACRON - '\u04a3' # 0x9C -> CYRILLIC SMALL LETTER EN WITH DESCENDER - '\u049b' # 0x9D -> CYRILLIC SMALL LETTER KA WITH DESCENDER - '\u04bb' # 0x9E -> CYRILLIC SMALL LETTER SHHA - '\u04b9' # 0x9F -> CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE - '\xa0' # 0xA0 -> NO-BREAK SPACE - '\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) - '\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U (Byelorussian) - '\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE - '\u04e8' # 0xA4 -> CYRILLIC CAPITAL LETTER BARRED O - '\u0498' # 0xA5 -> CYRILLIC CAPITAL LETTER ZE WITH DESCENDER - '\u04b0' # 0xA6 -> CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE - '\xa7' # 0xA7 -> SECTION SIGN - '\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO - '\xa9' # 0xA9 -> COPYRIGHT SIGN - '\u04d8' # 0xAA -> CYRILLIC CAPITAL LETTER SCHWA - '\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xac' # 0xAC -> NOT SIGN - '\u04ef' # 0xAD -> CYRILLIC SMALL LETTER U WITH MACRON - '\xae' # 0xAE -> REGISTERED SIGN - '\u049c' # 0xAF -> CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE - '\xb0' # 0xB0 -> DEGREE SIGN - '\u04b1' # 0xB1 -> CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE - '\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - '\u0499' # 0xB4 -> CYRILLIC SMALL LETTER ZE WITH DESCENDER - '\u04e9' # 0xB5 -> CYRILLIC SMALL LETTER BARRED O - '\xb6' # 0xB6 -> PILCROW SIGN - '\xb7' # 0xB7 -> MIDDLE DOT - '\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO - '\u2116' # 0xB9 -> NUMERO SIGN - '\u04d9' # 0xBA -> CYRILLIC SMALL LETTER SCHWA - '\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE - '\u04aa' # 0xBD -> CYRILLIC CAPITAL LETTER ES WITH DESCENDER - '\u04ab' # 0xBE -> CYRILLIC SMALL LETTER ES WITH DESCENDER - '\u049d' # 0xBF -> CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE - '\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A - '\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE - '\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE - '\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE - '\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE - '\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE - '\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE - '\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE - '\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I - '\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I - '\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA - '\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL - '\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM - '\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN - '\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O - '\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE - '\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER - '\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES - '\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE - '\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U - '\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF - '\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA - '\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE - '\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE - '\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA - '\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA - '\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN - '\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU - '\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN - '\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E - '\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU - '\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA - '\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A - '\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE - '\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE - '\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE - '\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE - '\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE - '\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE - '\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE - '\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I - '\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I - '\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA - '\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL - '\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM - '\u043d' # 0xED -> CYRILLIC SMALL LETTER EN - '\u043e' # 0xEE -> CYRILLIC SMALL LETTER O - '\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE - '\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER - '\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES - '\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE - '\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U - '\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF - '\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA - '\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE - '\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE - '\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA - '\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA - '\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN - '\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU - '\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN - '\u044d' # 0xFD -> CYRILLIC SMALL LETTER E - '\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU - '\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/punycode.py b/Python314_4_x86_Template/Lib/encodings/punycode.py deleted file mode 100644 index 4622fc8c9..000000000 --- a/Python314_4_x86_Template/Lib/encodings/punycode.py +++ /dev/null @@ -1,253 +0,0 @@ -""" Codec for the Punycode encoding, as specified in RFC 3492 - -Written by Martin v. Löwis. -""" - -import codecs - -##################### Encoding ##################################### - -def segregate(str): - """3.1 Basic code point segregation""" - base = bytearray() - extended = set() - for c in str: - if ord(c) < 128: - base.append(ord(c)) - else: - extended.add(c) - extended = sorted(extended) - return bytes(base), extended - -def selective_len(str, max): - """Return the length of str, considering only characters below max.""" - res = 0 - for c in str: - if ord(c) < max: - res += 1 - return res - -def selective_find(str, char, index, pos): - """Return a pair (index, pos), indicating the next occurrence of - char in str. index is the position of the character considering - only ordinals up to and including char, and pos is the position in - the full string. index/pos is the starting position in the full - string.""" - - l = len(str) - while 1: - pos += 1 - if pos == l: - return (-1, -1) - c = str[pos] - if c == char: - return index+1, pos - elif c < char: - index += 1 - -def insertion_unsort(str, extended): - """3.2 Insertion unsort coding""" - oldchar = 0x80 - result = [] - oldindex = -1 - for c in extended: - index = pos = -1 - char = ord(c) - curlen = selective_len(str, char) - delta = (curlen+1) * (char - oldchar) - while 1: - index,pos = selective_find(str,c,index,pos) - if index == -1: - break - delta += index - oldindex - result.append(delta-1) - oldindex = index - delta = 0 - oldchar = char - - return result - -def T(j, bias): - # Punycode parameters: tmin = 1, tmax = 26, base = 36 - res = 36 * (j + 1) - bias - if res < 1: return 1 - if res > 26: return 26 - return res - -digits = b"abcdefghijklmnopqrstuvwxyz0123456789" -def generate_generalized_integer(N, bias): - """3.3 Generalized variable-length integers""" - result = bytearray() - j = 0 - while 1: - t = T(j, bias) - if N < t: - result.append(digits[N]) - return bytes(result) - result.append(digits[t + ((N - t) % (36 - t))]) - N = (N - t) // (36 - t) - j += 1 - -def adapt(delta, first, numchars): - if first: - delta //= 700 - else: - delta //= 2 - delta += delta // numchars - # ((base - tmin) * tmax) // 2 == 455 - divisions = 0 - while delta > 455: - delta = delta // 35 # base - tmin - divisions += 36 - bias = divisions + (36 * delta // (delta + 38)) - return bias - - -def generate_integers(baselen, deltas): - """3.4 Bias adaptation""" - # Punycode parameters: initial bias = 72, damp = 700, skew = 38 - result = bytearray() - bias = 72 - for points, delta in enumerate(deltas): - s = generate_generalized_integer(delta, bias) - result.extend(s) - bias = adapt(delta, points==0, baselen+points+1) - return bytes(result) - -def punycode_encode(text): - base, extended = segregate(text) - deltas = insertion_unsort(text, extended) - extended = generate_integers(len(base), deltas) - if base: - return base + b"-" + extended - return extended - -##################### Decoding ##################################### - -def decode_generalized_number(extended, extpos, bias, errors): - """3.3 Generalized variable-length integers""" - result = 0 - w = 1 - j = 0 - while 1: - try: - char = extended[extpos] - except IndexError: - if errors == "strict": - raise UnicodeDecodeError("punycode", extended, extpos, extpos+1, - "incomplete punycode string") - return extpos + 1, None - extpos += 1 - if 0x41 <= char <= 0x5A: # A-Z - digit = char - 0x41 - elif 0x30 <= char <= 0x39: - digit = char - 22 # 0x30-26 - elif errors == "strict": - raise UnicodeDecodeError("punycode", extended, extpos-1, extpos, - f"Invalid extended code point '{extended[extpos-1]}'") - else: - return extpos, None - t = T(j, bias) - result += digit * w - if digit < t: - return extpos, result - w = w * (36 - t) - j += 1 - - -def insertion_sort(base, extended, errors): - """3.2 Insertion sort coding""" - # This function raises UnicodeDecodeError with position in the extended. - # Caller should add the offset. - char = 0x80 - pos = -1 - bias = 72 - extpos = 0 - - while extpos < len(extended): - newpos, delta = decode_generalized_number(extended, extpos, - bias, errors) - if delta is None: - # There was an error in decoding. We can't continue because - # synchronization is lost. - return base - pos += delta+1 - char += pos // (len(base) + 1) - if char > 0x10FFFF: - if errors == "strict": - raise UnicodeDecodeError( - "punycode", extended, pos-1, pos, - f"Invalid character U+{char:x}") - char = ord('?') - pos = pos % (len(base) + 1) - base = base[:pos] + chr(char) + base[pos:] - bias = adapt(delta, (extpos == 0), len(base)) - extpos = newpos - return base - -def punycode_decode(text, errors): - if isinstance(text, str): - text = text.encode("ascii") - if isinstance(text, memoryview): - text = bytes(text) - pos = text.rfind(b"-") - if pos == -1: - base = "" - extended = text.upper() - else: - try: - base = str(text[:pos], "ascii", errors) - except UnicodeDecodeError as exc: - raise UnicodeDecodeError("ascii", text, exc.start, exc.end, - exc.reason) from None - extended = text[pos+1:].upper() - try: - return insertion_sort(base, extended, errors) - except UnicodeDecodeError as exc: - offset = pos + 1 - raise UnicodeDecodeError("punycode", text, - offset+exc.start, offset+exc.end, - exc.reason) from None - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self, input, errors='strict'): - res = punycode_encode(input) - return res, len(input) - - def decode(self, input, errors='strict'): - if errors not in ('strict', 'replace', 'ignore'): - raise UnicodeError(f"Unsupported error handling: {errors}") - res = punycode_decode(input, errors) - return res, len(input) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return punycode_encode(input) - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - if self.errors not in ('strict', 'replace', 'ignore'): - raise UnicodeError(f"Unsupported error handling: {self.errors}") - return punycode_decode(input, self.errors) - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='punycode', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/quopri_codec.py b/Python314_4_x86_Template/Lib/encodings/quopri_codec.py deleted file mode 100644 index 496cb7655..000000000 --- a/Python314_4_x86_Template/Lib/encodings/quopri_codec.py +++ /dev/null @@ -1,56 +0,0 @@ -"""Codec for quoted-printable encoding. - -This codec de/encodes from bytes to bytes. -""" - -import codecs -import quopri -from io import BytesIO - -def quopri_encode(input, errors='strict'): - assert errors == 'strict' - f = BytesIO(input) - g = BytesIO() - quopri.encode(f, g, quotetabs=True) - return (g.getvalue(), len(input)) - -def quopri_decode(input, errors='strict'): - assert errors == 'strict' - f = BytesIO(input) - g = BytesIO() - quopri.decode(f, g) - return (g.getvalue(), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return quopri_encode(input, errors) - def decode(self, input, errors='strict'): - return quopri_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return quopri_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return quopri_decode(input, self.errors)[0] - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -# encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='quopri', - encode=quopri_encode, - decode=quopri_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/raw_unicode_escape.py b/Python314_4_x86_Template/Lib/encodings/raw_unicode_escape.py deleted file mode 100644 index 46c8e070d..000000000 --- a/Python314_4_x86_Template/Lib/encodings/raw_unicode_escape.py +++ /dev/null @@ -1,46 +0,0 @@ -""" Python 'raw-unicode-escape' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - # Note: Binding these as C functions will result in the class not - # converting them to methods. This is intended. - encode = codecs.raw_unicode_escape_encode - decode = codecs.raw_unicode_escape_decode - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.raw_unicode_escape_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, input, errors, final): - return codecs.raw_unicode_escape_decode(input, errors, final) - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - def decode(self, input, errors='strict'): - return codecs.raw_unicode_escape_decode(input, errors, False) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='raw-unicode-escape', - encode=Codec.encode, - decode=Codec.decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/rot_13.py b/Python314_4_x86_Template/Lib/encodings/rot_13.py deleted file mode 100644 index 5627bfbc6..000000000 --- a/Python314_4_x86_Template/Lib/encodings/rot_13.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -""" Python Character Mapping Codec for ROT13. - -This codec de/encodes from str to str. - -Written by Marc-Andre Lemburg (mal@lemburg.com). -""" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return (str.translate(input, rot13_map), len(input)) - - def decode(self, input, errors='strict'): - return (str.translate(input, rot13_map), len(input)) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return str.translate(input, rot13_map) - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return str.translate(input, rot13_map) - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='rot-13', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - _is_text_encoding=False, - ) - -### Map - -rot13_map = codecs.make_identity_dict(range(256)) -rot13_map.update({ - 0x0041: 0x004e, - 0x0042: 0x004f, - 0x0043: 0x0050, - 0x0044: 0x0051, - 0x0045: 0x0052, - 0x0046: 0x0053, - 0x0047: 0x0054, - 0x0048: 0x0055, - 0x0049: 0x0056, - 0x004a: 0x0057, - 0x004b: 0x0058, - 0x004c: 0x0059, - 0x004d: 0x005a, - 0x004e: 0x0041, - 0x004f: 0x0042, - 0x0050: 0x0043, - 0x0051: 0x0044, - 0x0052: 0x0045, - 0x0053: 0x0046, - 0x0054: 0x0047, - 0x0055: 0x0048, - 0x0056: 0x0049, - 0x0057: 0x004a, - 0x0058: 0x004b, - 0x0059: 0x004c, - 0x005a: 0x004d, - 0x0061: 0x006e, - 0x0062: 0x006f, - 0x0063: 0x0070, - 0x0064: 0x0071, - 0x0065: 0x0072, - 0x0066: 0x0073, - 0x0067: 0x0074, - 0x0068: 0x0075, - 0x0069: 0x0076, - 0x006a: 0x0077, - 0x006b: 0x0078, - 0x006c: 0x0079, - 0x006d: 0x007a, - 0x006e: 0x0061, - 0x006f: 0x0062, - 0x0070: 0x0063, - 0x0071: 0x0064, - 0x0072: 0x0065, - 0x0073: 0x0066, - 0x0074: 0x0067, - 0x0075: 0x0068, - 0x0076: 0x0069, - 0x0077: 0x006a, - 0x0078: 0x006b, - 0x0079: 0x006c, - 0x007a: 0x006d, -}) - -### Filter API - -def rot13(infile, outfile): - outfile.write(codecs.encode(infile.read(), 'rot-13')) - -if __name__ == '__main__': - import sys - rot13(sys.stdin, sys.stdout) diff --git a/Python314_4_x86_Template/Lib/encodings/shift_jis.py b/Python314_4_x86_Template/Lib/encodings/shift_jis.py deleted file mode 100644 index 833811727..000000000 --- a/Python314_4_x86_Template/Lib/encodings/shift_jis.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# shift_jis.py: Python Unicode Codec for SHIFT_JIS -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('shift_jis') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='shift_jis', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/shift_jis_2004.py b/Python314_4_x86_Template/Lib/encodings/shift_jis_2004.py deleted file mode 100644 index 161b1e86f..000000000 --- a/Python314_4_x86_Template/Lib/encodings/shift_jis_2004.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# shift_jis_2004.py: Python Unicode Codec for SHIFT_JIS_2004 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('shift_jis_2004') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='shift_jis_2004', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/shift_jisx0213.py b/Python314_4_x86_Template/Lib/encodings/shift_jisx0213.py deleted file mode 100644 index cb653f530..000000000 --- a/Python314_4_x86_Template/Lib/encodings/shift_jisx0213.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# shift_jisx0213.py: Python Unicode Codec for SHIFT_JISX0213 -# -# Written by Hye-Shik Chang <perky@FreeBSD.org> -# - -import _codecs_jp, codecs -import _multibytecodec as mbc - -codec = _codecs_jp.getcodec('shift_jisx0213') - -class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode - -class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, - codecs.IncrementalEncoder): - codec = codec - -class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, - codecs.IncrementalDecoder): - codec = codec - -class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): - codec = codec - -class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): - codec = codec - -def getregentry(): - return codecs.CodecInfo( - name='shift_jisx0213', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/tis_620.py b/Python314_4_x86_Template/Lib/encodings/tis_620.py deleted file mode 100644 index e28838634..000000000 --- a/Python314_4_x86_Template/Lib/encodings/tis_620.py +++ /dev/null @@ -1,307 +0,0 @@ -""" Python Character Mapping Codec tis_620 generated from 'python-mappings/TIS-620.TXT' with gencodec.py. - -"""#" - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='tis-620', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> NULL - '\x01' # 0x01 -> START OF HEADING - '\x02' # 0x02 -> START OF TEXT - '\x03' # 0x03 -> END OF TEXT - '\x04' # 0x04 -> END OF TRANSMISSION - '\x05' # 0x05 -> ENQUIRY - '\x06' # 0x06 -> ACKNOWLEDGE - '\x07' # 0x07 -> BELL - '\x08' # 0x08 -> BACKSPACE - '\t' # 0x09 -> HORIZONTAL TABULATION - '\n' # 0x0A -> LINE FEED - '\x0b' # 0x0B -> VERTICAL TABULATION - '\x0c' # 0x0C -> FORM FEED - '\r' # 0x0D -> CARRIAGE RETURN - '\x0e' # 0x0E -> SHIFT OUT - '\x0f' # 0x0F -> SHIFT IN - '\x10' # 0x10 -> DATA LINK ESCAPE - '\x11' # 0x11 -> DEVICE CONTROL ONE - '\x12' # 0x12 -> DEVICE CONTROL TWO - '\x13' # 0x13 -> DEVICE CONTROL THREE - '\x14' # 0x14 -> DEVICE CONTROL FOUR - '\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE - '\x16' # 0x16 -> SYNCHRONOUS IDLE - '\x17' # 0x17 -> END OF TRANSMISSION BLOCK - '\x18' # 0x18 -> CANCEL - '\x19' # 0x19 -> END OF MEDIUM - '\x1a' # 0x1A -> SUBSTITUTE - '\x1b' # 0x1B -> ESCAPE - '\x1c' # 0x1C -> FILE SEPARATOR - '\x1d' # 0x1D -> GROUP SEPARATOR - '\x1e' # 0x1E -> RECORD SEPARATOR - '\x1f' # 0x1F -> UNIT SEPARATOR - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> DELETE - '\x80' # 0x80 -> <control> - '\x81' # 0x81 -> <control> - '\x82' # 0x82 -> <control> - '\x83' # 0x83 -> <control> - '\x84' # 0x84 -> <control> - '\x85' # 0x85 -> <control> - '\x86' # 0x86 -> <control> - '\x87' # 0x87 -> <control> - '\x88' # 0x88 -> <control> - '\x89' # 0x89 -> <control> - '\x8a' # 0x8A -> <control> - '\x8b' # 0x8B -> <control> - '\x8c' # 0x8C -> <control> - '\x8d' # 0x8D -> <control> - '\x8e' # 0x8E -> <control> - '\x8f' # 0x8F -> <control> - '\x90' # 0x90 -> <control> - '\x91' # 0x91 -> <control> - '\x92' # 0x92 -> <control> - '\x93' # 0x93 -> <control> - '\x94' # 0x94 -> <control> - '\x95' # 0x95 -> <control> - '\x96' # 0x96 -> <control> - '\x97' # 0x97 -> <control> - '\x98' # 0x98 -> <control> - '\x99' # 0x99 -> <control> - '\x9a' # 0x9A -> <control> - '\x9b' # 0x9B -> <control> - '\x9c' # 0x9C -> <control> - '\x9d' # 0x9D -> <control> - '\x9e' # 0x9E -> <control> - '\x9f' # 0x9F -> <control> - '\ufffe' - '\u0e01' # 0xA1 -> THAI CHARACTER KO KAI - '\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI - '\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT - '\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI - '\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON - '\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG - '\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU - '\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN - '\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING - '\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG - '\u0e0b' # 0xAB -> THAI CHARACTER SO SO - '\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE - '\u0e0d' # 0xAD -> THAI CHARACTER YO YING - '\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA - '\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK - '\u0e10' # 0xB0 -> THAI CHARACTER THO THAN - '\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO - '\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO - '\u0e13' # 0xB3 -> THAI CHARACTER NO NEN - '\u0e14' # 0xB4 -> THAI CHARACTER DO DEK - '\u0e15' # 0xB5 -> THAI CHARACTER TO TAO - '\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG - '\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN - '\u0e18' # 0xB8 -> THAI CHARACTER THO THONG - '\u0e19' # 0xB9 -> THAI CHARACTER NO NU - '\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI - '\u0e1b' # 0xBB -> THAI CHARACTER PO PLA - '\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG - '\u0e1d' # 0xBD -> THAI CHARACTER FO FA - '\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN - '\u0e1f' # 0xBF -> THAI CHARACTER FO FAN - '\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO - '\u0e21' # 0xC1 -> THAI CHARACTER MO MA - '\u0e22' # 0xC2 -> THAI CHARACTER YO YAK - '\u0e23' # 0xC3 -> THAI CHARACTER RO RUA - '\u0e24' # 0xC4 -> THAI CHARACTER RU - '\u0e25' # 0xC5 -> THAI CHARACTER LO LING - '\u0e26' # 0xC6 -> THAI CHARACTER LU - '\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN - '\u0e28' # 0xC8 -> THAI CHARACTER SO SALA - '\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI - '\u0e2a' # 0xCA -> THAI CHARACTER SO SUA - '\u0e2b' # 0xCB -> THAI CHARACTER HO HIP - '\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA - '\u0e2d' # 0xCD -> THAI CHARACTER O ANG - '\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK - '\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI - '\u0e30' # 0xD0 -> THAI CHARACTER SARA A - '\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT - '\u0e32' # 0xD2 -> THAI CHARACTER SARA AA - '\u0e33' # 0xD3 -> THAI CHARACTER SARA AM - '\u0e34' # 0xD4 -> THAI CHARACTER SARA I - '\u0e35' # 0xD5 -> THAI CHARACTER SARA II - '\u0e36' # 0xD6 -> THAI CHARACTER SARA UE - '\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE - '\u0e38' # 0xD8 -> THAI CHARACTER SARA U - '\u0e39' # 0xD9 -> THAI CHARACTER SARA UU - '\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' - '\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT - '\u0e40' # 0xE0 -> THAI CHARACTER SARA E - '\u0e41' # 0xE1 -> THAI CHARACTER SARA AE - '\u0e42' # 0xE2 -> THAI CHARACTER SARA O - '\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN - '\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI - '\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO - '\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK - '\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU - '\u0e48' # 0xE8 -> THAI CHARACTER MAI EK - '\u0e49' # 0xE9 -> THAI CHARACTER MAI THO - '\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI - '\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA - '\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT - '\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT - '\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN - '\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN - '\u0e50' # 0xF0 -> THAI DIGIT ZERO - '\u0e51' # 0xF1 -> THAI DIGIT ONE - '\u0e52' # 0xF2 -> THAI DIGIT TWO - '\u0e53' # 0xF3 -> THAI DIGIT THREE - '\u0e54' # 0xF4 -> THAI DIGIT FOUR - '\u0e55' # 0xF5 -> THAI DIGIT FIVE - '\u0e56' # 0xF6 -> THAI DIGIT SIX - '\u0e57' # 0xF7 -> THAI DIGIT SEVEN - '\u0e58' # 0xF8 -> THAI DIGIT EIGHT - '\u0e59' # 0xF9 -> THAI DIGIT NINE - '\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU - '\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT - '\ufffe' - '\ufffe' - '\ufffe' - '\ufffe' -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) diff --git a/Python314_4_x86_Template/Lib/encodings/undefined.py b/Python314_4_x86_Template/Lib/encodings/undefined.py deleted file mode 100644 index 082771e1c..000000000 --- a/Python314_4_x86_Template/Lib/encodings/undefined.py +++ /dev/null @@ -1,49 +0,0 @@ -""" Python 'undefined' Codec - - This codec will always raise a UnicodeError exception when being - used. It is intended for use by the site.py file to switch off - automatic string to Unicode coercion. - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - raise UnicodeError("undefined encoding") - - def decode(self,input,errors='strict'): - raise UnicodeError("undefined encoding") - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - raise UnicodeError("undefined encoding") - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - raise UnicodeError("undefined encoding") - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='undefined', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/unicode_escape.py b/Python314_4_x86_Template/Lib/encodings/unicode_escape.py deleted file mode 100644 index 9b1ce99b3..000000000 --- a/Python314_4_x86_Template/Lib/encodings/unicode_escape.py +++ /dev/null @@ -1,46 +0,0 @@ -""" Python 'unicode-escape' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - # Note: Binding these as C functions will result in the class not - # converting them to methods. This is intended. - encode = codecs.unicode_escape_encode - decode = codecs.unicode_escape_decode - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.unicode_escape_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, input, errors, final): - return codecs.unicode_escape_decode(input, errors, final) - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - def decode(self, input, errors='strict'): - return codecs.unicode_escape_decode(input, errors, False) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='unicode-escape', - encode=Codec.encode, - decode=Codec.decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_16.py b/Python314_4_x86_Template/Lib/encodings/utf_16.py deleted file mode 100644 index d3b998002..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_16.py +++ /dev/null @@ -1,155 +0,0 @@ -""" Python 'utf-16' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs, sys - -### Codec APIs - -encode = codecs.utf_16_encode - -def decode(input, errors='strict'): - return codecs.utf_16_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict'): - codecs.IncrementalEncoder.__init__(self, errors) - self.encoder = None - - def encode(self, input, final=False): - if self.encoder is None: - result = codecs.utf_16_encode(input, self.errors)[0] - if sys.byteorder == 'little': - self.encoder = codecs.utf_16_le_encode - else: - self.encoder = codecs.utf_16_be_encode - return result - return self.encoder(input, self.errors)[0] - - def reset(self): - codecs.IncrementalEncoder.reset(self) - self.encoder = None - - def getstate(self): - # state info we return to the caller: - # 0: stream is in natural order for this platform - # 2: endianness hasn't been determined yet - # (we're never writing in unnatural order) - return (2 if self.encoder is None else 0) - - def setstate(self, state): - if state: - self.encoder = None - else: - if sys.byteorder == 'little': - self.encoder = codecs.utf_16_le_encode - else: - self.encoder = codecs.utf_16_be_encode - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def __init__(self, errors='strict'): - codecs.BufferedIncrementalDecoder.__init__(self, errors) - self.decoder = None - - def _buffer_decode(self, input, errors, final): - if self.decoder is None: - (output, consumed, byteorder) = \ - codecs.utf_16_ex_decode(input, errors, 0, final) - if byteorder == -1: - self.decoder = codecs.utf_16_le_decode - elif byteorder == 1: - self.decoder = codecs.utf_16_be_decode - elif consumed >= 2: - raise UnicodeDecodeError("utf-16", input, 0, 2, "Stream does not start with BOM") - return (output, consumed) - return self.decoder(input, self.errors, final) - - def reset(self): - codecs.BufferedIncrementalDecoder.reset(self) - self.decoder = None - - def getstate(self): - # additional state info from the base class must be None here, - # as it isn't passed along to the caller - state = codecs.BufferedIncrementalDecoder.getstate(self)[0] - # additional state info we pass to the caller: - # 0: stream is in natural order for this platform - # 1: stream is in unnatural order - # 2: endianness hasn't been determined yet - if self.decoder is None: - return (state, 2) - addstate = int((sys.byteorder == "big") != - (self.decoder is codecs.utf_16_be_decode)) - return (state, addstate) - - def setstate(self, state): - # state[1] will be ignored by BufferedIncrementalDecoder.setstate() - codecs.BufferedIncrementalDecoder.setstate(self, state) - state = state[1] - if state == 0: - self.decoder = (codecs.utf_16_be_decode - if sys.byteorder == "big" - else codecs.utf_16_le_decode) - elif state == 1: - self.decoder = (codecs.utf_16_le_decode - if sys.byteorder == "big" - else codecs.utf_16_be_decode) - else: - self.decoder = None - -class StreamWriter(codecs.StreamWriter): - def __init__(self, stream, errors='strict'): - codecs.StreamWriter.__init__(self, stream, errors) - self.encoder = None - - def reset(self): - codecs.StreamWriter.reset(self) - self.encoder = None - - def encode(self, input, errors='strict'): - if self.encoder is None: - result = codecs.utf_16_encode(input, errors) - if sys.byteorder == 'little': - self.encoder = codecs.utf_16_le_encode - else: - self.encoder = codecs.utf_16_be_encode - return result - else: - return self.encoder(input, errors) - -class StreamReader(codecs.StreamReader): - - def reset(self): - codecs.StreamReader.reset(self) - try: - del self.decode - except AttributeError: - pass - - def decode(self, input, errors='strict'): - (object, consumed, byteorder) = \ - codecs.utf_16_ex_decode(input, errors, 0, False) - if byteorder == -1: - self.decode = codecs.utf_16_le_decode - elif byteorder == 1: - self.decode = codecs.utf_16_be_decode - elif consumed>=2: - raise UnicodeDecodeError("utf-16", input, 0, 2, "Stream does not start with BOM") - return (object, consumed) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-16', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_16_be.py b/Python314_4_x86_Template/Lib/encodings/utf_16_be.py deleted file mode 100644 index 86b458eb9..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_16_be.py +++ /dev/null @@ -1,42 +0,0 @@ -""" Python 'utf-16-be' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -encode = codecs.utf_16_be_encode - -def decode(input, errors='strict'): - return codecs.utf_16_be_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_16_be_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_16_be_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_16_be_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_16_be_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-16-be', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_16_le.py b/Python314_4_x86_Template/Lib/encodings/utf_16_le.py deleted file mode 100644 index ec454142e..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_16_le.py +++ /dev/null @@ -1,42 +0,0 @@ -""" Python 'utf-16-le' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -encode = codecs.utf_16_le_encode - -def decode(input, errors='strict'): - return codecs.utf_16_le_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_16_le_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_16_le_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_16_le_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_16_le_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-16-le', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_32.py b/Python314_4_x86_Template/Lib/encodings/utf_32.py deleted file mode 100644 index 1924bedbb..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_32.py +++ /dev/null @@ -1,150 +0,0 @@ -""" -Python 'utf-32' Codec -""" -import codecs, sys - -### Codec APIs - -encode = codecs.utf_32_encode - -def decode(input, errors='strict'): - return codecs.utf_32_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict'): - codecs.IncrementalEncoder.__init__(self, errors) - self.encoder = None - - def encode(self, input, final=False): - if self.encoder is None: - result = codecs.utf_32_encode(input, self.errors)[0] - if sys.byteorder == 'little': - self.encoder = codecs.utf_32_le_encode - else: - self.encoder = codecs.utf_32_be_encode - return result - return self.encoder(input, self.errors)[0] - - def reset(self): - codecs.IncrementalEncoder.reset(self) - self.encoder = None - - def getstate(self): - # state info we return to the caller: - # 0: stream is in natural order for this platform - # 2: endianness hasn't been determined yet - # (we're never writing in unnatural order) - return (2 if self.encoder is None else 0) - - def setstate(self, state): - if state: - self.encoder = None - else: - if sys.byteorder == 'little': - self.encoder = codecs.utf_32_le_encode - else: - self.encoder = codecs.utf_32_be_encode - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def __init__(self, errors='strict'): - codecs.BufferedIncrementalDecoder.__init__(self, errors) - self.decoder = None - - def _buffer_decode(self, input, errors, final): - if self.decoder is None: - (output, consumed, byteorder) = \ - codecs.utf_32_ex_decode(input, errors, 0, final) - if byteorder == -1: - self.decoder = codecs.utf_32_le_decode - elif byteorder == 1: - self.decoder = codecs.utf_32_be_decode - elif consumed >= 4: - raise UnicodeDecodeError("utf-32", input, 0, 4, "Stream does not start with BOM") - return (output, consumed) - return self.decoder(input, self.errors, final) - - def reset(self): - codecs.BufferedIncrementalDecoder.reset(self) - self.decoder = None - - def getstate(self): - # additional state info from the base class must be None here, - # as it isn't passed along to the caller - state = codecs.BufferedIncrementalDecoder.getstate(self)[0] - # additional state info we pass to the caller: - # 0: stream is in natural order for this platform - # 1: stream is in unnatural order - # 2: endianness hasn't been determined yet - if self.decoder is None: - return (state, 2) - addstate = int((sys.byteorder == "big") != - (self.decoder is codecs.utf_32_be_decode)) - return (state, addstate) - - def setstate(self, state): - # state[1] will be ignored by BufferedIncrementalDecoder.setstate() - codecs.BufferedIncrementalDecoder.setstate(self, state) - state = state[1] - if state == 0: - self.decoder = (codecs.utf_32_be_decode - if sys.byteorder == "big" - else codecs.utf_32_le_decode) - elif state == 1: - self.decoder = (codecs.utf_32_le_decode - if sys.byteorder == "big" - else codecs.utf_32_be_decode) - else: - self.decoder = None - -class StreamWriter(codecs.StreamWriter): - def __init__(self, stream, errors='strict'): - self.encoder = None - codecs.StreamWriter.__init__(self, stream, errors) - - def reset(self): - codecs.StreamWriter.reset(self) - self.encoder = None - - def encode(self, input, errors='strict'): - if self.encoder is None: - result = codecs.utf_32_encode(input, errors) - if sys.byteorder == 'little': - self.encoder = codecs.utf_32_le_encode - else: - self.encoder = codecs.utf_32_be_encode - return result - else: - return self.encoder(input, errors) - -class StreamReader(codecs.StreamReader): - - def reset(self): - codecs.StreamReader.reset(self) - try: - del self.decode - except AttributeError: - pass - - def decode(self, input, errors='strict'): - (object, consumed, byteorder) = \ - codecs.utf_32_ex_decode(input, errors, 0, False) - if byteorder == -1: - self.decode = codecs.utf_32_le_decode - elif byteorder == 1: - self.decode = codecs.utf_32_be_decode - elif consumed >= 4: - raise UnicodeDecodeError("utf-32", input, 0, 4, "Stream does not start with BOM") - return (object, consumed) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-32', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_32_be.py b/Python314_4_x86_Template/Lib/encodings/utf_32_be.py deleted file mode 100644 index fe272b5fa..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_32_be.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Python 'utf-32-be' Codec -""" -import codecs - -### Codec APIs - -encode = codecs.utf_32_be_encode - -def decode(input, errors='strict'): - return codecs.utf_32_be_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_32_be_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_32_be_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_32_be_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_32_be_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-32-be', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_32_le.py b/Python314_4_x86_Template/Lib/encodings/utf_32_le.py deleted file mode 100644 index 9e4821092..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_32_le.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Python 'utf-32-le' Codec -""" -import codecs - -### Codec APIs - -encode = codecs.utf_32_le_encode - -def decode(input, errors='strict'): - return codecs.utf_32_le_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_32_le_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_32_le_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_32_le_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_32_le_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-32-le', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_7.py b/Python314_4_x86_Template/Lib/encodings/utf_7.py deleted file mode 100644 index 8e0567f20..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_7.py +++ /dev/null @@ -1,38 +0,0 @@ -""" Python 'utf-7' Codec - -Written by Brian Quinlan (brian@sweetapp.com). -""" -import codecs - -### Codec APIs - -encode = codecs.utf_7_encode - -def decode(input, errors='strict'): - return codecs.utf_7_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_7_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_7_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_7_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_7_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-7', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_8.py b/Python314_4_x86_Template/Lib/encodings/utf_8.py deleted file mode 100644 index 1bf633657..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_8.py +++ /dev/null @@ -1,42 +0,0 @@ -""" Python 'utf-8' Codec - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. - -""" -import codecs - -### Codec APIs - -encode = codecs.utf_8_encode - -def decode(input, errors='strict'): - return codecs.utf_8_decode(input, errors, True) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.utf_8_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_8_decode - -class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_8_encode - -class StreamReader(codecs.StreamReader): - decode = codecs.utf_8_decode - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-8', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/utf_8_sig.py b/Python314_4_x86_Template/Lib/encodings/utf_8_sig.py deleted file mode 100644 index 1bb479203..000000000 --- a/Python314_4_x86_Template/Lib/encodings/utf_8_sig.py +++ /dev/null @@ -1,130 +0,0 @@ -""" Python 'utf-8-sig' Codec -This work similar to UTF-8 with the following changes: - -* On encoding/writing a UTF-8 encoded BOM will be prepended/written as the - first three bytes. - -* On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these - bytes will be skipped. -""" -import codecs - -### Codec APIs - -def encode(input, errors='strict'): - return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], - len(input)) - -def decode(input, errors='strict'): - prefix = 0 - if input[:3] == codecs.BOM_UTF8: - input = input[3:] - prefix = 3 - (output, consumed) = codecs.utf_8_decode(input, errors, True) - return (output, consumed+prefix) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict'): - codecs.IncrementalEncoder.__init__(self, errors) - self.first = 1 - - def encode(self, input, final=False): - if self.first: - self.first = 0 - return codecs.BOM_UTF8 + \ - codecs.utf_8_encode(input, self.errors)[0] - else: - return codecs.utf_8_encode(input, self.errors)[0] - - def reset(self): - codecs.IncrementalEncoder.reset(self) - self.first = 1 - - def getstate(self): - return self.first - - def setstate(self, state): - self.first = state - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def __init__(self, errors='strict'): - codecs.BufferedIncrementalDecoder.__init__(self, errors) - self.first = 1 - - def _buffer_decode(self, input, errors, final): - if self.first: - if len(input) < 3: - if codecs.BOM_UTF8.startswith(input): - # not enough data to decide if this really is a BOM - # => try again on the next call - return ("", 0) - else: - self.first = 0 - else: - self.first = 0 - if input[:3] == codecs.BOM_UTF8: - (output, consumed) = \ - codecs.utf_8_decode(input[3:], errors, final) - return (output, consumed+3) - return codecs.utf_8_decode(input, errors, final) - - def reset(self): - codecs.BufferedIncrementalDecoder.reset(self) - self.first = 1 - - def getstate(self): - state = codecs.BufferedIncrementalDecoder.getstate(self) - # state[1] must be 0 here, as it isn't passed along to the caller - return (state[0], self.first) - - def setstate(self, state): - # state[1] will be ignored by BufferedIncrementalDecoder.setstate() - codecs.BufferedIncrementalDecoder.setstate(self, state) - self.first = state[1] - -class StreamWriter(codecs.StreamWriter): - def reset(self): - codecs.StreamWriter.reset(self) - try: - del self.encode - except AttributeError: - pass - - def encode(self, input, errors='strict'): - self.encode = codecs.utf_8_encode - return encode(input, errors) - -class StreamReader(codecs.StreamReader): - def reset(self): - codecs.StreamReader.reset(self) - try: - del self.decode - except AttributeError: - pass - - def decode(self, input, errors='strict'): - if len(input) < 3: - if codecs.BOM_UTF8.startswith(input): - # not enough data to decide if this is a BOM - # => try again on the next call - return ("", 0) - elif input[:3] == codecs.BOM_UTF8: - self.decode = codecs.utf_8_decode - (output, consumed) = codecs.utf_8_decode(input[3:],errors) - return (output, consumed+3) - # (else) no BOM present - self.decode = codecs.utf_8_decode - return codecs.utf_8_decode(input, errors) - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='utf-8-sig', - encode=encode, - decode=decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/uu_codec.py b/Python314_4_x86_Template/Lib/encodings/uu_codec.py deleted file mode 100644 index 4e58c62fe..000000000 --- a/Python314_4_x86_Template/Lib/encodings/uu_codec.py +++ /dev/null @@ -1,103 +0,0 @@ -"""Python 'uu_codec' Codec - UU content transfer encoding. - -This codec de/encodes from bytes to bytes. - -Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were -adapted from uu.py which was written by Lance Ellinghouse and -modified by Jack Jansen and Fredrik Lundh. -""" - -import codecs -import binascii -from io import BytesIO - -### Codec APIs - -def uu_encode(input, errors='strict', filename='<data>', mode=0o666): - assert errors == 'strict' - infile = BytesIO(input) - outfile = BytesIO() - read = infile.read - write = outfile.write - - # Remove newline chars from filename - filename = filename.replace('\n','\\n') - filename = filename.replace('\r','\\r') - - # Encode - write(('begin %o %s\n' % (mode & 0o777, filename)).encode('ascii')) - chunk = read(45) - while chunk: - write(binascii.b2a_uu(chunk)) - chunk = read(45) - write(b' \nend\n') - - return (outfile.getvalue(), len(input)) - -def uu_decode(input, errors='strict'): - assert errors == 'strict' - infile = BytesIO(input) - outfile = BytesIO() - readline = infile.readline - write = outfile.write - - # Find start of encoded data - while 1: - s = readline() - if not s: - raise ValueError('Missing "begin" line in input data') - if s[:5] == b'begin': - break - - # Decode - while True: - s = readline() - if not s or s == b'end\n': - break - try: - data = binascii.a2b_uu(s) - except binascii.Error as v: - # Workaround for broken uuencoders by /Fredrik Lundh - nbytes = (((s[0]-32) & 63) * 4 + 5) // 3 - data = binascii.a2b_uu(s[:nbytes]) - #sys.stderr.write("Warning: %s\n" % str(v)) - write(data) - if not s: - raise ValueError('Truncated input data') - - return (outfile.getvalue(), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return uu_encode(input, errors) - - def decode(self, input, errors='strict'): - return uu_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return uu_encode(input, self.errors)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return uu_decode(input, self.errors)[0] - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='uu', - encode=uu_encode, - decode=uu_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/encodings/zlib_codec.py b/Python314_4_x86_Template/Lib/encodings/zlib_codec.py deleted file mode 100644 index 95908a4b4..000000000 --- a/Python314_4_x86_Template/Lib/encodings/zlib_codec.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Python 'zlib_codec' Codec - zlib compression encoding. - -This codec de/encodes from bytes to bytes. - -Written by Marc-Andre Lemburg (mal@lemburg.com). -""" - -import codecs -import zlib # this codec needs the optional zlib module ! - -### Codec APIs - -def zlib_encode(input, errors='strict'): - assert errors == 'strict' - return (zlib.compress(input), len(input)) - -def zlib_decode(input, errors='strict'): - assert errors == 'strict' - return (zlib.decompress(input), len(input)) - -class Codec(codecs.Codec): - def encode(self, input, errors='strict'): - return zlib_encode(input, errors) - def decode(self, input, errors='strict'): - return zlib_decode(input, errors) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def __init__(self, errors='strict'): - assert errors == 'strict' - self.errors = errors - self.compressobj = zlib.compressobj() - - def encode(self, input, final=False): - if final: - c = self.compressobj.compress(input) - return c + self.compressobj.flush() - else: - return self.compressobj.compress(input) - - def reset(self): - self.compressobj = zlib.compressobj() - -class IncrementalDecoder(codecs.IncrementalDecoder): - def __init__(self, errors='strict'): - assert errors == 'strict' - self.errors = errors - self.decompressobj = zlib.decompressobj() - - def decode(self, input, final=False): - if final: - c = self.decompressobj.decompress(input) - return c + self.decompressobj.flush() - else: - return self.decompressobj.decompress(input) - - def reset(self): - self.decompressobj = zlib.decompressobj() - -class StreamWriter(Codec, codecs.StreamWriter): - charbuffertype = bytes - -class StreamReader(Codec, codecs.StreamReader): - charbuffertype = bytes - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='zlib', - encode=zlib_encode, - decode=zlib_decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - _is_text_encoding=False, - ) diff --git a/Python314_4_x86_Template/Lib/ensurepip/__init__.py b/Python314_4_x86_Template/Lib/ensurepip/__init__.py deleted file mode 100644 index 715389ea6..000000000 --- a/Python314_4_x86_Template/Lib/ensurepip/__init__.py +++ /dev/null @@ -1,265 +0,0 @@ -import os -import subprocess -import sys -import sysconfig -import tempfile -from contextlib import nullcontext -from importlib import resources -from pathlib import Path -from shutil import copy2 - - -__all__ = ["version", "bootstrap"] -_PIP_VERSION = "26.0.1" - -# Directory of system wheel packages. Some Linux distribution packaging -# policies recommend against bundling dependencies. For example, Fedora -# installs wheel packages in the /usr/share/python-wheels/ directory and don't -# install the ensurepip._bundled package. -_pkg_dir = sysconfig.get_config_var('WHEEL_PKG_DIR') -if _pkg_dir: - _WHEEL_PKG_DIR = Path(_pkg_dir).resolve() -else: - _WHEEL_PKG_DIR = None - - -def _find_wheel_pkg_dir_pip(): - if _WHEEL_PKG_DIR is None: - # NOTE: The compile-time `WHEEL_PKG_DIR` is unset so there is no place - # NOTE: for looking up the wheels. - return None - - dist_matching_wheels = _WHEEL_PKG_DIR.glob('pip-*.whl') - try: - last_matching_dist_wheel = sorted(dist_matching_wheels)[-1] - except IndexError: - # NOTE: `WHEEL_PKG_DIR` does not contain any wheel files for `pip`. - return None - - return nullcontext(last_matching_dist_wheel) - - -def _get_pip_whl_path_ctx(): - # Prefer pip from the wheel package directory, if present. - if (alternative_pip_wheel_path := _find_wheel_pkg_dir_pip()) is not None: - return alternative_pip_wheel_path - - return resources.as_file( - resources.files('ensurepip') - / '_bundled' - / f'pip-{_PIP_VERSION}-py3-none-any.whl' - ) - - -def _get_pip_version(): - with _get_pip_whl_path_ctx() as bundled_wheel_path: - wheel_name = bundled_wheel_path.name - return ( - # Extract '21.2.4' from 'pip-21.2.4-py3-none-any.whl' - wheel_name. - removeprefix('pip-'). - partition('-')[0] - ) - - -def _run_pip(args, additional_paths=None): - # Run the bootstrapping in a subprocess to avoid leaking any state that happens - # after pip has executed. Particularly, this avoids the case when pip holds onto - # the files in *additional_paths*, preventing us to remove them at the end of the - # invocation. - code = f""" -import runpy -import sys -sys.path = {additional_paths or []} + sys.path -sys.argv[1:] = {args} -runpy.run_module("pip", run_name="__main__", alter_sys=True) -""" - - cmd = [ - sys.executable, - '-W', - 'ignore::DeprecationWarning', - '-c', - code, - ] - if sys.flags.isolated: - # run code in isolated mode if currently running isolated - cmd.insert(1, '-I') - return subprocess.run(cmd, check=True).returncode - - -def version(): - """ - Returns a string specifying the bundled version of pip. - """ - return _get_pip_version() - - -def _disable_pip_configuration_settings(): - # We deliberately ignore all pip environment variables - # when invoking pip - # See http://bugs.python.org/issue19734 for details - keys_to_remove = [k for k in os.environ if k.startswith("PIP_")] - for k in keys_to_remove: - del os.environ[k] - # We also ignore the settings in the default pip configuration file - # See http://bugs.python.org/issue20053 for details - os.environ['PIP_CONFIG_FILE'] = os.devnull - - -def bootstrap(*, root=None, upgrade=False, user=False, - altinstall=False, default_pip=False, - verbosity=0): - """ - Bootstrap pip into the current Python installation (or the given root - directory). - - Note that calling this function will alter both sys.path and os.environ. - """ - # Discard the return value - _bootstrap(root=root, upgrade=upgrade, user=user, - altinstall=altinstall, default_pip=default_pip, - verbosity=verbosity) - - -def _bootstrap(*, root=None, upgrade=False, user=False, - altinstall=False, default_pip=False, - verbosity=0): - """ - Bootstrap pip into the current Python installation (or the given root - directory). Returns pip command status code. - - Note that calling this function will alter both sys.path and os.environ. - """ - if altinstall and default_pip: - raise ValueError("Cannot use altinstall and default_pip together") - - sys.audit("ensurepip.bootstrap", root) - - _disable_pip_configuration_settings() - - # By default, installing pip installs all of the - # following scripts (X.Y == running Python version): - # - # pip, pipX, pipX.Y - # - # pip 1.5+ allows ensurepip to request that some of those be left out - if altinstall: - # omit pip, pipX - os.environ["ENSUREPIP_OPTIONS"] = "altinstall" - elif not default_pip: - # omit pip - os.environ["ENSUREPIP_OPTIONS"] = "install" - - with tempfile.TemporaryDirectory() as tmpdir: - # Put our bundled wheels into a temporary directory and construct the - # additional paths that need added to sys.path - tmpdir_path = Path(tmpdir) - with _get_pip_whl_path_ctx() as bundled_wheel_path: - tmp_wheel_path = tmpdir_path / bundled_wheel_path.name - copy2(bundled_wheel_path, tmp_wheel_path) - - # Construct the arguments to be passed to the pip command - args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir] - if root: - args += ["--root", root] - if upgrade: - args += ["--upgrade"] - if user: - args += ["--user"] - if verbosity: - args += ["-" + "v" * verbosity] - - return _run_pip([*args, "pip"], [os.fsdecode(tmp_wheel_path)]) - - -def _uninstall_helper(*, verbosity=0): - """Helper to support a clean default uninstall process on Windows - - Note that calling this function may alter os.environ. - """ - # Nothing to do if pip was never installed, or has been removed - try: - import pip - except ImportError: - return - - # If the installed pip version doesn't match the available one, - # leave it alone - available_version = version() - if pip.__version__ != available_version: - print(f"ensurepip will only uninstall a matching version " - f"({pip.__version__!r} installed, " - f"{available_version!r} available)", - file=sys.stderr) - return - - _disable_pip_configuration_settings() - - # Construct the arguments to be passed to the pip command - args = ["uninstall", "-y", "--disable-pip-version-check"] - if verbosity: - args += ["-" + "v" * verbosity] - - return _run_pip([*args, "pip"]) - - -def _main(argv=None): - import argparse - parser = argparse.ArgumentParser(color=True) - parser.add_argument( - "--version", - action="version", - version="pip {}".format(version()), - help="Show the version of pip that is bundled with this Python.", - ) - parser.add_argument( - "-v", "--verbose", - action="count", - default=0, - dest="verbosity", - help=("Give more output. Option is additive, and can be used up to 3 " - "times."), - ) - parser.add_argument( - "-U", "--upgrade", - action="store_true", - default=False, - help="Upgrade pip and dependencies, even if already installed.", - ) - parser.add_argument( - "--user", - action="store_true", - default=False, - help="Install using the user scheme.", - ) - parser.add_argument( - "--root", - default=None, - help="Install everything relative to this alternate root directory.", - ) - parser.add_argument( - "--altinstall", - action="store_true", - default=False, - help=("Make an alternate install, installing only the X.Y versioned " - "scripts (Default: pipX, pipX.Y)."), - ) - parser.add_argument( - "--default-pip", - action="store_true", - default=False, - help=("Make a default pip install, installing the unqualified pip " - "in addition to the versioned scripts."), - ) - - args = parser.parse_args(argv) - - return _bootstrap( - root=args.root, - upgrade=args.upgrade, - user=args.user, - verbosity=args.verbosity, - altinstall=args.altinstall, - default_pip=args.default_pip, - ) diff --git a/Python314_4_x86_Template/Lib/ensurepip/__main__.py b/Python314_4_x86_Template/Lib/ensurepip/__main__.py deleted file mode 100644 index 03eef0dd9..000000000 --- a/Python314_4_x86_Template/Lib/ensurepip/__main__.py +++ /dev/null @@ -1,5 +0,0 @@ -import ensurepip -import sys - -if __name__ == "__main__": - sys.exit(ensurepip._main()) diff --git a/Python314_4_x86_Template/Lib/ensurepip/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/ensurepip/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index bbf56f27993a9130ef3bcc4ce9bcc63b730f4c78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8817 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 diff --git a/Python314_4_x86_Template/Lib/ensurepip/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/ensurepip/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index ae045344f9eac9262dc62f2ed695cded7b29ca28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmdPq<K<!if)3WJnXy3nF^B^LEKtVhEFhzSA&w!4(UYMBLNk^y#xeylSwt`}q^K}3 z$S}k*2C%_2B4|a1ScU)&1RusyWH5m;O&B2zd7$aaV64gf5+vkziz7ZhH!(9WK3<dc z7H4W+acNO%L1w`%=Hkj?kX&A3Zfbn|Etb@Z%#vHIV5KV=K7+L0Ds;Ar2`x@7Dvn7^ zNi8z8v^0n*&o9c3DJaU%N=+^)j!DkRFHK2GEKb$U%*!kR62&EnIXS6Cx`r_Ul_eSZ zdB%n&@h0&V7H07wsksF?i6yD=CAkGLKAA}|aF@iu+^1Jid5gm)H$SB`C)KWq2j~Kj zr;4?K#0O?ZM#kF=0=F5s9x!uvR9#_~yurfW?$PAY5!oN#6@Qsm?i!2yM`i{VsUlEJ F001LuWGDat diff --git a/Python314_4_x86_Template/Lib/ensurepip/_bundled/pip-26.0.1-py3-none-any.whl b/Python314_4_x86_Template/Lib/ensurepip/_bundled/pip-26.0.1-py3-none-any.whl deleted file mode 100644 index 580d09a920422fcabbd462c937d08c96dd7f08bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787723 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%0ARXq3ak*^ni<Cit~=<C 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%0Ar#V#LFwdKq@HdEsB&9Xm>-G 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%0A{pA1iDqMXdqK`Y<c+_DC-2lJk05V+kx<}hkaYy; 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%0A=*W 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%0Aqr$&ew&8 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%0DKp#lF+>&8NO#wtMBsz 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%0Aa6;3^ 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 Lgxg5=aV`3PV0Y2U diff --git a/Python314_4_x86_Template/Lib/ensurepip/_uninstall.py b/Python314_4_x86_Template/Lib/ensurepip/_uninstall.py deleted file mode 100644 index 4183c28a8..000000000 --- a/Python314_4_x86_Template/Lib/ensurepip/_uninstall.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Basic pip uninstallation support, helper for the Windows uninstaller""" - -import argparse -import ensurepip -import sys - - -def _main(argv=None): - parser = argparse.ArgumentParser() - parser.add_argument( - "--version", - action="version", - version="pip {}".format(ensurepip.version()), - help="Show the version of pip this will attempt to uninstall.", - ) - parser.add_argument( - "-v", "--verbose", - action="count", - default=0, - dest="verbosity", - help=("Give more output. Option is additive, and can be used up to 3 " - "times."), - ) - - args = parser.parse_args(argv) - - return ensurepip._uninstall_helper(verbosity=args.verbosity) - - -if __name__ == "__main__": - sys.exit(_main()) diff --git a/Python314_4_x86_Template/Lib/enum.py b/Python314_4_x86_Template/Lib/enum.py deleted file mode 100644 index b4551da1c..000000000 --- a/Python314_4_x86_Template/Lib/enum.py +++ /dev/null @@ -1,2168 +0,0 @@ -import sys -import builtins as bltns -from types import MappingProxyType, DynamicClassAttribute - - -__all__ = [ - 'EnumType', 'EnumMeta', 'EnumDict', - 'Enum', 'IntEnum', 'StrEnum', 'Flag', 'IntFlag', 'ReprEnum', - 'auto', 'unique', 'property', 'verify', 'member', 'nonmember', - 'FlagBoundary', 'STRICT', 'CONFORM', 'EJECT', 'KEEP', - 'global_flag_repr', 'global_enum_repr', 'global_str', 'global_enum', - 'EnumCheck', 'CONTINUOUS', 'NAMED_FLAGS', 'UNIQUE', - 'pickle_by_global_name', 'pickle_by_enum_name', - ] - - -# Dummy value for Enum and Flag as there are explicit checks for them -# before they have been created. -# This is also why there are checks in EnumType like `if Enum is not None` -Enum = Flag = EJECT = _stdlib_enums = ReprEnum = None - -class nonmember(object): - """ - Protects item from becoming an Enum member during class creation. - """ - def __init__(self, value): - self.value = value - -class member(object): - """ - Forces item to become an Enum member during class creation. - """ - def __init__(self, value): - self.value = value - -def _is_descriptor(obj): - """ - Returns True if obj is a descriptor, False otherwise. - """ - return ( - hasattr(obj, '__get__') or - hasattr(obj, '__set__') or - hasattr(obj, '__delete__') - ) - -def _is_dunder(name): - """ - Returns True if a __dunder__ name, False otherwise. - """ - return ( - len(name) > 4 and - name[:2] == name[-2:] == '__' and - name[2] != '_' and - name[-3] != '_' - ) - -def _is_sunder(name): - """ - Returns True if a _sunder_ name, False otherwise. - """ - return ( - len(name) > 2 and - name[0] == name[-1] == '_' and - name[1] != '_' and - name[-2] != '_' - ) - -def _is_internal_class(cls_name, obj): - # do not use `re` as `re` imports `enum` - if not isinstance(obj, type): - return False - qualname = getattr(obj, '__qualname__', '') - s_pattern = cls_name + '.' + getattr(obj, '__name__', '') - e_pattern = '.' + s_pattern - return qualname == s_pattern or qualname.endswith(e_pattern) - -def _is_private(cls_name, name): - # do not use `re` as `re` imports `enum` - pattern = '_%s__' % (cls_name, ) - pat_len = len(pattern) - if ( - len(name) > pat_len - and name.startswith(pattern) - and (name[-1] != '_' or name[-2] != '_') - ): - return True - else: - return False - -def _is_single_bit(num): - """ - True if only one bit set in num (should be an int) - """ - if num == 0: - return False - num &= num - 1 - return num == 0 - -def _make_class_unpicklable(obj): - """ - Make the given obj un-picklable. - - obj should be either a dictionary, or an Enum - """ - def _break_on_call_reduce(self, proto): - raise TypeError('%r cannot be pickled' % self) - if isinstance(obj, dict): - obj['__reduce_ex__'] = _break_on_call_reduce - obj['__module__'] = '<unknown>' - else: - setattr(obj, '__reduce_ex__', _break_on_call_reduce) - setattr(obj, '__module__', '<unknown>') - -def _iter_bits_lsb(num): - # num must be a positive integer - original = num - if isinstance(num, Enum): - num = num.value - if num < 0: - raise ValueError('%r is not a positive integer' % original) - while num: - b = num & (~num + 1) - yield b - num ^= b - -def show_flag_values(value): - return list(_iter_bits_lsb(value)) - -def bin(num, max_bits=None): - """ - Like built-in bin(), except negative values are represented in - twos-complement, and the leading bit always indicates sign - (0=positive, 1=negative). - - >>> bin(10) - '0b0 1010' - >>> bin(~10) # ~10 is -11 - '0b1 0101' - """ - - num = num.__index__() - ceiling = 2 ** (num).bit_length() - if num >= 0: - s = bltns.bin(num + ceiling).replace('1', '0', 1) - else: - s = bltns.bin(~num ^ (ceiling - 1) + ceiling) - sign = s[:3] - digits = s[3:] - if max_bits is not None: - if len(digits) < max_bits: - digits = (sign[-1] * max_bits + digits)[-max_bits:] - return "%s %s" % (sign, digits) - -class _not_given: - def __repr__(self): - return('<not given>') -_not_given = _not_given() - -class _auto_null: - def __repr__(self): - return '_auto_null' -_auto_null = _auto_null() - -class auto: - """ - Instances are replaced with an appropriate value in Enum class suites. - """ - def __init__(self, value=_auto_null): - self.value = value - - def __repr__(self): - return "auto(%r)" % self.value - -class property(DynamicClassAttribute): - """ - This is a descriptor, used to define attributes that act differently - when accessed through an enum member and through an enum class. - Instance access is the same as property(), but access to an attribute - through the enum class will instead look in the class' _member_map_ for - a corresponding enum member. - """ - - member = None - _attr_type = None - _cls_type = None - - def __get__(self, instance, ownerclass=None): - if instance is None: - if self.member is not None: - return self.member - else: - raise AttributeError( - '%r has no attribute %r' % (ownerclass, self.name) - ) - if self.fget is not None: - # use previous enum.property - return self.fget(instance) - elif self._attr_type == 'attr': - # look up previous attribute - return getattr(self._cls_type, self.name) - elif self._attr_type == 'desc': - # use previous descriptor - return getattr(instance._value_, self.name) - # look for a member by this name. - try: - return ownerclass._member_map_[self.name] - except KeyError: - raise AttributeError( - '%r has no attribute %r' % (ownerclass, self.name) - ) from None - - def __set__(self, instance, value): - if self.fset is not None: - return self.fset(instance, value) - raise AttributeError( - "<enum %r> cannot set attribute %r" % (self.clsname, self.name) - ) - - def __delete__(self, instance): - if self.fdel is not None: - return self.fdel(instance) - raise AttributeError( - "<enum %r> cannot delete attribute %r" % (self.clsname, self.name) - ) - - def __set_name__(self, ownerclass, name): - self.name = name - self.clsname = ownerclass.__name__ - - -class _proto_member: - """ - intermediate step for enum members between class execution and final creation - """ - - def __init__(self, value): - self.value = value - - def __set_name__(self, enum_class, member_name): - """ - convert each quasi-member into an instance of the new enum class - """ - # first step: remove ourself from enum_class - delattr(enum_class, member_name) - # second step: create member based on enum_class - value = self.value - if not isinstance(value, tuple): - args = (value, ) - else: - args = value - if enum_class._member_type_ is tuple: # special case for tuple enums - args = (args, ) # wrap it one more time - if not enum_class._use_args_: - enum_member = enum_class._new_member_(enum_class) - else: - enum_member = enum_class._new_member_(enum_class, *args) - if not hasattr(enum_member, '_value_'): - if enum_class._member_type_ is object: - enum_member._value_ = value - else: - try: - enum_member._value_ = enum_class._member_type_(*args) - except Exception as exc: - new_exc = TypeError( - '_value_ not set in __new__, unable to create it' - ) - new_exc.__cause__ = exc - raise new_exc - value = enum_member._value_ - enum_member._name_ = member_name - enum_member.__objclass__ = enum_class - enum_member.__init__(*args) - enum_member._sort_order_ = len(enum_class._member_names_) - - if Flag is not None and issubclass(enum_class, Flag): - if isinstance(value, int): - enum_class._flag_mask_ |= value - if _is_single_bit(value): - enum_class._singles_mask_ |= value - enum_class._all_bits_ = 2 ** ((enum_class._flag_mask_).bit_length()) - 1 - - # If another member with the same value was already defined, the - # new member becomes an alias to the existing one. - try: - try: - # try to do a fast lookup to avoid the quadratic loop - enum_member = enum_class._value2member_map_[value] - except TypeError: - for name, canonical_member in enum_class._member_map_.items(): - if canonical_member._value_ == value: - enum_member = canonical_member - break - else: - raise KeyError - except KeyError: - # this could still be an alias if the value is multi-bit and the - # class is a flag class - if ( - Flag is None - or not issubclass(enum_class, Flag) - ): - # no other instances found, record this member in _member_names_ - enum_class._member_names_.append(member_name) - elif ( - Flag is not None - and issubclass(enum_class, Flag) - and isinstance(value, int) - and _is_single_bit(value) - ): - # no other instances found, record this member in _member_names_ - enum_class._member_names_.append(member_name) - - enum_class._add_member_(member_name, enum_member) - try: - # This may fail if value is not hashable. We can't add the value - # to the map, and by-value lookups for this value will be - # linear. - enum_class._value2member_map_.setdefault(value, enum_member) - if value not in enum_class._hashable_values_: - enum_class._hashable_values_.append(value) - except TypeError: - # keep track of the value in a list so containment checks are quick - enum_class._unhashable_values_.append(value) - enum_class._unhashable_values_map_.setdefault(member_name, []).append(value) - - -class EnumDict(dict): - """ - Track enum member order and ensure member names are not reused. - - EnumType will use the names found in self._member_names as the - enumeration member names. - """ - def __init__(self, cls_name=None): - super().__init__() - self._member_names = {} # use a dict -- faster look-up than a list, and keeps insertion order since 3.7 - self._last_values = [] - self._ignore = [] - self._auto_called = False - self._cls_name = cls_name - - def __setitem__(self, key, value): - """ - Changes anything not dundered or not a descriptor. - - If an enum member name is used twice, an error is raised; duplicate - values are not checked for. - - Single underscore (sunder) names are reserved. - """ - if self._cls_name is not None and _is_private(self._cls_name, key): - # do nothing, name will be a normal attribute - pass - elif _is_sunder(key): - if key not in ( - '_order_', - '_generate_next_value_', '_numeric_repr_', '_missing_', '_ignore_', - '_iter_member_', '_iter_member_by_value_', '_iter_member_by_def_', - '_add_alias_', '_add_value_alias_', - # While not in use internally, those are common for pretty - # printing and thus excluded from Enum's reservation of - # _sunder_ names - ) and not key.startswith('_repr_'): - raise ValueError( - '_sunder_ names, such as %r, are reserved for future Enum use' - % (key, ) - ) - if key == '_generate_next_value_': - # check if members already defined as auto() - if self._auto_called: - raise TypeError("_generate_next_value_ must be defined before members") - _gnv = value.__func__ if isinstance(value, staticmethod) else value - setattr(self, '_generate_next_value', _gnv) - elif key == '_ignore_': - if isinstance(value, str): - value = value.replace(',',' ').split() - else: - value = list(value) - self._ignore = value - already = set(value) & set(self._member_names) - if already: - raise ValueError( - '_ignore_ cannot specify already set names: %r' - % (already, ) - ) - elif _is_dunder(key): - if key == '__order__': - key = '_order_' - elif key in self._member_names: - # descriptor overwriting an enum? - raise TypeError('%r already defined as %r' % (key, self[key])) - elif key in self._ignore: - pass - elif isinstance(value, nonmember): - # unwrap value here; it won't be processed by the below `else` - value = value.value - elif _is_descriptor(value): - pass - elif self._cls_name is not None and _is_internal_class(self._cls_name, value): - # do nothing, name will be a normal attribute - pass - else: - if key in self: - # enum overwriting a descriptor? - raise TypeError('%r already defined as %r' % (key, self[key])) - elif isinstance(value, member): - # unwrap value here -- it will become a member - value = value.value - non_auto_store = True - single = False - if isinstance(value, auto): - single = True - value = (value, ) - if isinstance(value, tuple) and any(isinstance(v, auto) for v in value): - # insist on an actual tuple, no subclasses, in keeping with only supporting - # top-level auto() usage (not contained in any other data structure) - auto_valued = [] - t = type(value) - for v in value: - if isinstance(v, auto): - non_auto_store = False - if v.value == _auto_null: - v.value = self._generate_next_value( - key, 1, len(self._member_names), self._last_values[:], - ) - self._auto_called = True - v = v.value - self._last_values.append(v) - auto_valued.append(v) - if single: - value = auto_valued[0] - else: - try: - # accepts iterable as multiple arguments? - value = t(auto_valued) - except TypeError: - # then pass them in singly - value = t(*auto_valued) - self._member_names[key] = None - if non_auto_store: - self._last_values.append(value) - super().__setitem__(key, value) - - @property - def member_names(self): - return list(self._member_names) - - def update(self, members, **more_members): - try: - for name in members.keys(): - self[name] = members[name] - except AttributeError: - for name, value in members: - self[name] = value - for name, value in more_members.items(): - self[name] = value - -_EnumDict = EnumDict # keep private name for backwards compatibility - - -class EnumType(type): - """ - Metaclass for Enum - """ - - @classmethod - def __prepare__(metacls, cls, bases, **kwds): - # check that previous enum members do not exist - metacls._check_for_existing_members_(cls, bases) - # create the namespace dict - enum_dict = EnumDict(cls) - # inherit previous flags and _generate_next_value_ function - member_type, first_enum = metacls._get_mixins_(cls, bases) - if first_enum is not None: - enum_dict['_generate_next_value_'] = getattr( - first_enum, '_generate_next_value_', None, - ) - return enum_dict - - def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **kwds): - # an Enum class is final once enumeration items have been defined; it - # cannot be mixed with other types (int, float, etc.) if it has an - # inherited __new__ unless a new __new__ is defined (or the resulting - # class will fail). - # - if _simple: - return super().__new__(metacls, cls, bases, classdict, **kwds) - # - # remove any keys listed in _ignore_ - classdict.setdefault('_ignore_', []).append('_ignore_') - ignore = classdict['_ignore_'] - for key in ignore: - classdict.pop(key, None) - # - # grab member names - member_names = classdict._member_names - # - # check for illegal enum names (any others?) - invalid_names = set(member_names) & {'mro', ''} - if invalid_names: - raise ValueError('invalid enum member name(s) %s' % ( - ','.join(repr(n) for n in invalid_names) - )) - # - # adjust the sunders - _order_ = classdict.pop('_order_', None) - _gnv = classdict.get('_generate_next_value_') - if _gnv is not None and type(_gnv) is not staticmethod: - _gnv = staticmethod(_gnv) - # convert to normal dict - classdict = dict(classdict.items()) - if _gnv is not None: - classdict['_generate_next_value_'] = _gnv - # - # data type of member and the controlling Enum class - member_type, first_enum = metacls._get_mixins_(cls, bases) - __new__, save_new, use_args = metacls._find_new_( - classdict, member_type, first_enum, - ) - classdict['_new_member_'] = __new__ - classdict['_use_args_'] = use_args - # - # convert future enum members into temporary _proto_members - for name in member_names: - value = classdict[name] - classdict[name] = _proto_member(value) - # - # house-keeping structures - classdict['_member_names_'] = [] - classdict['_member_map_'] = {} - classdict['_value2member_map_'] = {} - classdict['_hashable_values_'] = [] # for comparing with non-hashable types - classdict['_unhashable_values_'] = [] # e.g. frozenset() with set() - classdict['_unhashable_values_map_'] = {} - classdict['_member_type_'] = member_type - # now set the __repr__ for the value - classdict['_value_repr_'] = metacls._find_data_repr_(cls, bases) - # - # Flag structures (will be removed if final class is not a Flag - classdict['_boundary_'] = ( - boundary - or getattr(first_enum, '_boundary_', None) - ) - classdict['_flag_mask_'] = 0 - classdict['_singles_mask_'] = 0 - classdict['_all_bits_'] = 0 - classdict['_inverted_'] = None - try: - classdict['_%s__in_progress' % cls] = True - enum_class = super().__new__(metacls, cls, bases, classdict, **kwds) - classdict['_%s__in_progress' % cls] = False - delattr(enum_class, '_%s__in_progress' % cls) - except Exception as e: - # since 3.12 the note "Error calling __set_name__ on '_proto_member' instance ..." - # is tacked on to the error instead of raising a RuntimeError, so discard it - if hasattr(e, '__notes__'): - del e.__notes__ - raise - # update classdict with any changes made by __init_subclass__ - classdict.update(enum_class.__dict__) - # - # double check that repr and friends are not the mixin's or various - # things break (such as pickle) - # however, if the method is defined in the Enum itself, don't replace - # it - # - # Also, special handling for ReprEnum - if ReprEnum is not None and ReprEnum in bases: - if member_type is object: - raise TypeError( - 'ReprEnum subclasses must be mixed with a data type (i.e.' - ' int, str, float, etc.)' - ) - if '__format__' not in classdict: - enum_class.__format__ = member_type.__format__ - classdict['__format__'] = enum_class.__format__ - if '__str__' not in classdict: - method = member_type.__str__ - if method is object.__str__: - # if member_type does not define __str__, object.__str__ will use - # its __repr__ instead, so we'll also use its __repr__ - method = member_type.__repr__ - enum_class.__str__ = method - classdict['__str__'] = enum_class.__str__ - for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): - if name not in classdict: - # check for mixin overrides before replacing - enum_method = getattr(first_enum, name) - found_method = getattr(enum_class, name) - object_method = getattr(object, name) - data_type_method = getattr(member_type, name) - if found_method in (data_type_method, object_method): - setattr(enum_class, name, enum_method) - # - # for Flag, add __or__, __and__, __xor__, and __invert__ - if Flag is not None and issubclass(enum_class, Flag): - for name in ( - '__or__', '__and__', '__xor__', - '__ror__', '__rand__', '__rxor__', - '__invert__' - ): - if name not in classdict: - enum_method = getattr(Flag, name) - setattr(enum_class, name, enum_method) - classdict[name] = enum_method - # - # replace any other __new__ with our own (as long as Enum is not None, - # anyway) -- again, this is to support pickle - if Enum is not None: - # if the user defined their own __new__, save it before it gets - # clobbered in case they subclass later - if save_new: - enum_class.__new_member__ = __new__ - enum_class.__new__ = Enum.__new__ - # - # py3 support for definition order (helps keep py2/py3 code in sync) - # - # _order_ checking is spread out into three/four steps - # - if enum_class is a Flag: - # - remove any non-single-bit flags from _order_ - # - remove any aliases from _order_ - # - check that _order_ and _member_names_ match - # - # step 1: ensure we have a list - if _order_ is not None: - if isinstance(_order_, str): - _order_ = _order_.replace(',', ' ').split() - # - # remove Flag structures if final class is not a Flag - if ( - Flag is None and cls != 'Flag' - or Flag is not None and not issubclass(enum_class, Flag) - ): - delattr(enum_class, '_boundary_') - delattr(enum_class, '_flag_mask_') - delattr(enum_class, '_singles_mask_') - delattr(enum_class, '_all_bits_') - delattr(enum_class, '_inverted_') - elif Flag is not None and issubclass(enum_class, Flag): - # set correct __iter__ - member_list = [m._value_ for m in enum_class] - if member_list != sorted(member_list): - enum_class._iter_member_ = enum_class._iter_member_by_def_ - if _order_: - # _order_ step 2: remove any items from _order_ that are not single-bit - _order_ = [ - o - for o in _order_ - if o not in enum_class._member_map_ or _is_single_bit(enum_class[o]._value_) - ] - # - if _order_: - # _order_ step 3: remove aliases from _order_ - _order_ = [ - o - for o in _order_ - if ( - o not in enum_class._member_map_ - or - (o in enum_class._member_map_ and o in enum_class._member_names_) - )] - # _order_ step 4: verify that _order_ and _member_names_ match - if _order_ != enum_class._member_names_: - raise TypeError( - 'member order does not match _order_:\n %r\n %r' - % (enum_class._member_names_, _order_) - ) - # - return enum_class - - def __bool__(cls): - """ - classes/types should always be True. - """ - return True - - def __call__(cls, value, names=_not_given, *values, module=None, qualname=None, type=None, start=1, boundary=None): - """ - Either returns an existing member, or creates a new enum class. - - This method is used both when an enum class is given a value to match - to an enumeration member (i.e. Color(3)) and for the functional API - (i.e. Color = Enum('Color', names='RED GREEN BLUE')). - - The value lookup branch is chosen if the enum is final. - - When used for the functional API: - - `value` will be the name of the new class. - - `names` should be either a string of white-space/comma delimited names - (values will start at `start`), or an iterator/mapping of name, value pairs. - - `module` should be set to the module this class is being created in; - if it is not set, an attempt to find that module will be made, but if - it fails the class will not be picklable. - - `qualname` should be set to the actual location this class can be found - at in its module; by default it is set to the global scope. If this is - not correct, unpickling will fail in some circumstances. - - `type`, if set, will be mixed in as the first base class. - """ - if cls._member_map_: - # simple value lookup if members exist - if names is not _not_given: - value = (value, names) + values - return cls.__new__(cls, value) - # otherwise, functional API: we're creating a new Enum type - if names is _not_given and type is None: - # no body? no data-type? possibly wrong usage - raise TypeError( - f"{cls} has no members; specify `names=()` if you meant to create a new, empty, enum" - ) - return cls._create_( - class_name=value, - names=None if names is _not_given else names, - module=module, - qualname=qualname, - type=type, - start=start, - boundary=boundary, - ) - - def __contains__(cls, value): - """Return True if `value` is in `cls`. - - `value` is in `cls` if: - 1) `value` is a member of `cls`, or - 2) `value` is the value of one of the `cls`'s members. - 3) `value` is a pseudo-member (flags) - """ - if isinstance(value, cls): - return True - if issubclass(cls, Flag): - try: - result = cls._missing_(value) - return isinstance(result, cls) - except ValueError: - pass - return ( - value in cls._unhashable_values_ # both structures are lists - or value in cls._hashable_values_ - ) - - def __delattr__(cls, attr): - # nicer error message when someone tries to delete an attribute - # (see issue19025). - if attr in cls._member_map_: - raise AttributeError("%r cannot delete member %r." % (cls.__name__, attr)) - super().__delattr__(attr) - - def __dir__(cls): - interesting = set([ - '__class__', '__contains__', '__doc__', '__getitem__', - '__iter__', '__len__', '__members__', '__module__', - '__name__', '__qualname__', - ] - + cls._member_names_ - ) - if cls._new_member_ is not object.__new__: - interesting.add('__new__') - if cls.__init_subclass__ is not object.__init_subclass__: - interesting.add('__init_subclass__') - if cls._member_type_ is object: - return sorted(interesting) - else: - # return whatever mixed-in data type has - return sorted(set(dir(cls._member_type_)) | interesting) - - def __getitem__(cls, name): - """ - Return the member matching `name`. - """ - return cls._member_map_[name] - - def __iter__(cls): - """ - Return members in definition order. - """ - return (cls._member_map_[name] for name in cls._member_names_) - - def __len__(cls): - """ - Return the number of members (no aliases) - """ - return len(cls._member_names_) - - @bltns.property - def __members__(cls): - """ - Returns a mapping of member name->value. - - This mapping lists all enum members, including aliases. Note that this - is a read-only view of the internal mapping. - """ - return MappingProxyType(cls._member_map_) - - def __repr__(cls): - if Flag is not None and issubclass(cls, Flag): - return "<flag %r>" % cls.__name__ - else: - return "<enum %r>" % cls.__name__ - - def __reversed__(cls): - """ - Return members in reverse definition order. - """ - return (cls._member_map_[name] for name in reversed(cls._member_names_)) - - def __setattr__(cls, name, value): - """ - Block attempts to reassign Enum members. - - A simple assignment to the class namespace only changes one of the - several possible ways to get an Enum member from the Enum class, - resulting in an inconsistent Enumeration. - """ - member_map = cls.__dict__.get('_member_map_', {}) - if name in member_map: - raise AttributeError('cannot reassign member %r' % (name, )) - super().__setattr__(name, value) - - def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, start=1, boundary=None): - """ - Convenience method to create a new Enum class. - - `names` can be: - - * A string containing member names, separated either with spaces or - commas. Values are incremented by 1 from `start`. - * An iterable of member names. Values are incremented by 1 from `start`. - * An iterable of (member name, value) pairs. - * A mapping of member name -> value pairs. - """ - metacls = cls.__class__ - bases = (cls, ) if type is None else (type, cls) - _, first_enum = cls._get_mixins_(class_name, bases) - classdict = metacls.__prepare__(class_name, bases) - - # special processing needed for names? - if isinstance(names, str): - names = names.replace(',', ' ').split() - if isinstance(names, (tuple, list)) and names and isinstance(names[0], str): - original_names, names = names, [] - last_values = [] - for count, name in enumerate(original_names): - value = first_enum._generate_next_value_(name, start, count, last_values[:]) - last_values.append(value) - names.append((name, value)) - if names is None: - names = () - - # Here, names is either an iterable of (name, value) or a mapping. - for item in names: - if isinstance(item, str): - member_name, member_value = item, names[item] - else: - member_name, member_value = item - classdict[member_name] = member_value - - if module is None: - try: - module = sys._getframemodulename(2) - except AttributeError: - # Fall back on _getframe if _getframemodulename is missing - try: - module = sys._getframe(2).f_globals['__name__'] - except (AttributeError, ValueError, KeyError): - pass - if module is None: - _make_class_unpicklable(classdict) - else: - classdict['__module__'] = module - if qualname is not None: - classdict['__qualname__'] = qualname - - return metacls.__new__(metacls, class_name, bases, classdict, boundary=boundary) - - def _convert_(cls, name, module, filter, source=None, *, boundary=None, as_global=False): - """ - Create a new Enum subclass that replaces a collection of global constants - """ - # convert all constants from source (or module) that pass filter() to - # a new Enum called name, and export the enum and its members back to - # module; - # also, replace the __reduce_ex__ method so unpickling works in - # previous Python versions - module_globals = sys.modules[module].__dict__ - if source: - source = source.__dict__ - else: - source = module_globals - # _value2member_map_ is populated in the same order every time - # for a consistent reverse mapping of number to name when there - # are multiple names for the same number. - members = [ - (name, value) - for name, value in source.items() - if filter(name)] - try: - # sort by value - members.sort(key=lambda t: (t[1], t[0])) - except TypeError: - # unless some values aren't comparable, in which case sort by name - members.sort(key=lambda t: t[0]) - body = {t[0]: t[1] for t in members} - body['__module__'] = module - tmp_cls = type(name, (object, ), body) - cls = _simple_enum(etype=cls, boundary=boundary or KEEP)(tmp_cls) - if as_global: - global_enum(cls) - else: - sys.modules[cls.__module__].__dict__.update(cls.__members__) - module_globals[name] = cls - return cls - - @classmethod - def _check_for_existing_members_(mcls, class_name, bases): - for chain in bases: - for base in chain.__mro__: - if isinstance(base, EnumType) and base._member_names_: - raise TypeError( - "<enum %r> cannot extend %r" - % (class_name, base) - ) - - @classmethod - def _get_mixins_(mcls, class_name, bases): - """ - Returns the type for creating enum members, and the first inherited - enum class. - - bases: the tuple of bases that was given to __new__ - """ - if not bases: - return object, Enum - # ensure final parent class is an Enum derivative, find any concrete - # data type, and check that Enum has no members - first_enum = bases[-1] - if not isinstance(first_enum, EnumType): - raise TypeError("new enumerations should be created as " - "`EnumName([mixin_type, ...] [data_type,] enum_type)`") - member_type = mcls._find_data_type_(class_name, bases) or object - return member_type, first_enum - - @classmethod - def _find_data_repr_(mcls, class_name, bases): - for chain in bases: - for base in chain.__mro__: - if base is object: - continue - elif isinstance(base, EnumType): - # if we hit an Enum, use it's _value_repr_ - return base._value_repr_ - elif '__repr__' in base.__dict__: - # this is our data repr - # double-check if a dataclass with a default __repr__ - if ( - '__dataclass_fields__' in base.__dict__ - and '__dataclass_params__' in base.__dict__ - and base.__dict__['__dataclass_params__'].repr - ): - return _dataclass_repr - else: - return base.__dict__['__repr__'] - return None - - @classmethod - def _find_data_type_(mcls, class_name, bases): - # a datatype has a __new__ method, or a __dataclass_fields__ attribute - data_types = set() - base_chain = set() - for chain in bases: - candidate = None - for base in chain.__mro__: - base_chain.add(base) - if base is object: - continue - elif isinstance(base, EnumType): - if base._member_type_ is not object: - data_types.add(base._member_type_) - break - elif '__new__' in base.__dict__ or '__dataclass_fields__' in base.__dict__: - data_types.add(candidate or base) - break - else: - candidate = candidate or base - if len(data_types) > 1: - raise TypeError('too many data types for %r: %r' % (class_name, data_types)) - elif data_types: - return data_types.pop() - else: - return None - - @classmethod - def _find_new_(mcls, classdict, member_type, first_enum): - """ - Returns the __new__ to be used for creating the enum members. - - classdict: the class dictionary given to __new__ - member_type: the data type whose __new__ will be used by default - first_enum: enumeration to check for an overriding __new__ - """ - # now find the correct __new__, checking to see of one was defined - # by the user; also check earlier enum classes in case a __new__ was - # saved as __new_member__ - __new__ = classdict.get('__new__', None) - - # should __new__ be saved as __new_member__ later? - save_new = first_enum is not None and __new__ is not None - - if __new__ is None: - # check all possibles for __new_member__ before falling back to - # __new__ - for method in ('__new_member__', '__new__'): - for possible in (member_type, first_enum): - target = getattr(possible, method, None) - if target not in { - None, - None.__new__, - object.__new__, - Enum.__new__, - }: - __new__ = target - break - if __new__ is not None: - break - else: - __new__ = object.__new__ - - # if a non-object.__new__ is used then whatever value/tuple was - # assigned to the enum member name will be passed to __new__ and to the - # new enum member's __init__ - if first_enum is None or __new__ in (Enum.__new__, object.__new__): - use_args = False - else: - use_args = True - return __new__, save_new, use_args - - def _add_member_(cls, name, member): - # _value_ structures are not updated - if name in cls._member_map_: - if cls._member_map_[name] is not member: - raise NameError('%r is already bound: %r' % (name, cls._member_map_[name])) - return - # - # if necessary, get redirect in place and then add it to _member_map_ - found_descriptor = None - descriptor_type = None - class_type = None - for base in cls.__mro__[1:]: - attr = base.__dict__.get(name) - if attr is not None: - if isinstance(attr, (property, DynamicClassAttribute)): - found_descriptor = attr - class_type = base - descriptor_type = 'enum' - break - elif _is_descriptor(attr): - found_descriptor = attr - descriptor_type = descriptor_type or 'desc' - class_type = class_type or base - continue - else: - descriptor_type = 'attr' - class_type = base - if found_descriptor: - redirect = property() - redirect.member = member - redirect.__set_name__(cls, name) - if descriptor_type in ('enum', 'desc'): - # earlier descriptor found; copy fget, fset, fdel to this one. - redirect.fget = getattr(found_descriptor, 'fget', None) - redirect._get = getattr(found_descriptor, '__get__', None) - redirect.fset = getattr(found_descriptor, 'fset', None) - redirect._set = getattr(found_descriptor, '__set__', None) - redirect.fdel = getattr(found_descriptor, 'fdel', None) - redirect._del = getattr(found_descriptor, '__delete__', None) - redirect._attr_type = descriptor_type - redirect._cls_type = class_type - setattr(cls, name, redirect) - else: - setattr(cls, name, member) - # now add to _member_map_ (even aliases) - cls._member_map_[name] = member - - @property - def __signature__(cls): - from inspect import Parameter, Signature - if cls._member_names_: - return Signature([Parameter('values', Parameter.VAR_POSITIONAL)]) - else: - return Signature([Parameter('new_class_name', Parameter.POSITIONAL_ONLY), - Parameter('names', Parameter.POSITIONAL_OR_KEYWORD), - Parameter('module', Parameter.KEYWORD_ONLY, default=None), - Parameter('qualname', Parameter.KEYWORD_ONLY, default=None), - Parameter('type', Parameter.KEYWORD_ONLY, default=None), - Parameter('start', Parameter.KEYWORD_ONLY, default=1), - Parameter('boundary', Parameter.KEYWORD_ONLY, default=None)]) - - -EnumMeta = EnumType # keep EnumMeta name for backwards compatibility - - -class Enum(metaclass=EnumType): - """ - Create a collection of name/value pairs. - - Example enumeration: - - >>> class Color(Enum): - ... RED = 1 - ... BLUE = 2 - ... GREEN = 3 - - Access them by: - - - attribute access: - - >>> Color.RED - <Color.RED: 1> - - - value lookup: - - >>> Color(1) - <Color.RED: 1> - - - name lookup: - - >>> Color['RED'] - <Color.RED: 1> - - Enumerations can be iterated over, and know how many members they have: - - >>> len(Color) - 3 - - >>> list(Color) - [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>] - - Methods can be added to enumerations, and members can have their own - attributes -- see the documentation for details. - """ - - def __new__(cls, value): - # all enum instances are actually created during class construction - # without calling this method; this method is called by the metaclass' - # __call__ (i.e. Color(3) ), and by pickle - if type(value) is cls: - # For lookups like Color(Color.RED) - return value - # by-value search for a matching enum member - # see if it's in the reverse mapping (for hashable values) - try: - return cls._value2member_map_[value] - except KeyError: - # Not found, no need to do long O(n) search - pass - except TypeError: - # not there, now do long search -- O(n) behavior - for name, unhashable_values in cls._unhashable_values_map_.items(): - if value in unhashable_values: - return cls[name] - for name, member in cls._member_map_.items(): - if value == member._value_: - return cls[name] - # still not found -- verify that members exist, in-case somebody got here mistakenly - # (such as via super when trying to override __new__) - if not cls._member_map_: - if getattr(cls, '_%s__in_progress' % cls.__name__, False): - raise TypeError('do not use `super().__new__; call the appropriate __new__ directly') from None - raise TypeError("%r has no members defined" % cls) - # - # still not found -- try _missing_ hook - try: - exc = None - result = cls._missing_(value) - except Exception as e: - exc = e - result = None - try: - if isinstance(result, cls): - return result - elif ( - Flag is not None and issubclass(cls, Flag) - and cls._boundary_ is EJECT and isinstance(result, int) - ): - return result - else: - ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__)) - if result is None and exc is None: - raise ve_exc - elif exc is None: - exc = TypeError( - 'error in %s._missing_: returned %r instead of None or a valid member' - % (cls.__name__, result) - ) - if not isinstance(exc, ValueError): - exc.__context__ = ve_exc - raise exc - finally: - # ensure all variables that could hold an exception are destroyed - exc = None - ve_exc = None - - def _add_alias_(self, name): - self.__class__._add_member_(name, self) - - def _add_value_alias_(self, value): - cls = self.__class__ - try: - if value in cls._value2member_map_: - if cls._value2member_map_[value] is not self: - raise ValueError('%r is already bound: %r' % (value, cls._value2member_map_[value])) - return - except TypeError: - # unhashable value, do long search - for m in cls._member_map_.values(): - if m._value_ == value: - if m is not self: - raise ValueError('%r is already bound: %r' % (value, cls._value2member_map_[value])) - return - try: - # This may fail if value is not hashable. We can't add the value - # to the map, and by-value lookups for this value will be - # linear. - cls._value2member_map_.setdefault(value, self) - cls._hashable_values_.append(value) - except TypeError: - # keep track of the value in a list so containment checks are quick - cls._unhashable_values_.append(value) - cls._unhashable_values_map_.setdefault(self.name, []).append(value) - - @staticmethod - def _generate_next_value_(name, start, count, last_values): - """ - Generate the next value when not given. - - name: the name of the member - start: the initial start value or None - count: the number of existing members - last_values: the list of values assigned - """ - if not last_values: - return start - try: - last_value = sorted(last_values).pop() - except TypeError: - raise TypeError('unable to sort non-numeric values') from None - try: - return last_value + 1 - except TypeError: - raise TypeError('unable to increment %r' % (last_value, )) from None - - @classmethod - def _missing_(cls, value): - return None - - def __repr__(self): - v_repr = self.__class__._value_repr_ or repr - return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_)) - - def __str__(self): - return "%s.%s" % (self.__class__.__name__, self._name_, ) - - def __dir__(self): - """ - Returns public methods and other interesting attributes. - """ - interesting = set() - if self.__class__._member_type_ is not object: - interesting = set(object.__dir__(self)) - for name in getattr(self, '__dict__', []): - if name[0] != '_' and name not in self._member_map_: - interesting.add(name) - for cls in self.__class__.mro(): - for name, obj in cls.__dict__.items(): - if name[0] == '_': - continue - if isinstance(obj, property): - # that's an enum.property - if obj.fget is not None or name not in self._member_map_: - interesting.add(name) - else: - # in case it was added by `dir(self)` - interesting.discard(name) - elif name not in self._member_map_: - interesting.add(name) - names = sorted( - set(['__class__', '__doc__', '__eq__', '__hash__', '__module__']) - | interesting - ) - return names - - def __format__(self, format_spec): - return str.__format__(str(self), format_spec) - - def __hash__(self): - return hash(self._name_) - - def __reduce_ex__(self, proto): - return self.__class__, (self._value_, ) - - def __deepcopy__(self,memo): - return self - - def __copy__(self): - return self - - # enum.property is used to provide access to the `name` and - # `value` attributes of enum members while keeping some measure of - # protection from modification, while still allowing for an enumeration - # to have members named `name` and `value`. This works because each - # instance of enum.property saves its companion member, which it returns - # on class lookup; on instance lookup it either executes a provided function - # or raises an AttributeError. - - @property - def name(self): - """The name of the Enum member.""" - return self._name_ - - @property - def value(self): - """The value of the Enum member.""" - return self._value_ - - -class ReprEnum(Enum): - """ - Only changes the repr(), leaving str() and format() to the mixed-in type. - """ - - -class IntEnum(int, ReprEnum): - """ - Enum where members are also (and must be) ints - """ - - -class StrEnum(str, ReprEnum): - """ - Enum where members are also (and must be) strings - """ - - def __new__(cls, *values): - "values must already be of type `str`" - if len(values) > 3: - raise TypeError('too many arguments for str(): %r' % (values, )) - if len(values) == 1: - # it must be a string - if not isinstance(values[0], str): - raise TypeError('%r is not a string' % (values[0], )) - if len(values) >= 2: - # check that encoding argument is a string - if not isinstance(values[1], str): - raise TypeError('encoding must be a string, not %r' % (values[1], )) - if len(values) == 3: - # check that errors argument is a string - if not isinstance(values[2], str): - raise TypeError('errors must be a string, not %r' % (values[2])) - value = str(*values) - member = str.__new__(cls, value) - member._value_ = value - return member - - @staticmethod - def _generate_next_value_(name, start, count, last_values): - """ - Return the lower-cased version of the member name. - """ - return name.lower() - - -def pickle_by_global_name(self, proto): - # should not be used with Flag-type enums - return self.name -_reduce_ex_by_global_name = pickle_by_global_name - -def pickle_by_enum_name(self, proto): - # should not be used with Flag-type enums - return getattr, (self.__class__, self._name_) - -class FlagBoundary(StrEnum): - """ - control how out of range values are handled - "strict" -> error is raised [default for Flag] - "conform" -> extra bits are discarded - "eject" -> lose flag status - "keep" -> keep flag status and all bits [default for IntFlag] - """ - STRICT = auto() - CONFORM = auto() - EJECT = auto() - KEEP = auto() -STRICT, CONFORM, EJECT, KEEP = FlagBoundary - - -class Flag(Enum, boundary=STRICT): - """ - Support for flags - """ - - _numeric_repr_ = repr - - @staticmethod - def _generate_next_value_(name, start, count, last_values): - """ - Generate the next value when not given. - - name: the name of the member - start: the initial start value or None - count: the number of existing members - last_values: the last value assigned or None - """ - if not count: - return start if start is not None else 1 - last_value = max(last_values) - try: - high_bit = _high_bit(last_value) - except Exception: - raise TypeError('invalid flag value %r' % last_value) from None - return 2 ** (high_bit+1) - - @classmethod - def _iter_member_by_value_(cls, value): - """ - Extract all members from the value in definition (i.e. increasing value) order. - """ - for val in _iter_bits_lsb(value & cls._flag_mask_): - yield cls._value2member_map_.get(val) - - _iter_member_ = _iter_member_by_value_ - - @classmethod - def _iter_member_by_def_(cls, value): - """ - Extract all members from the value in definition order. - """ - yield from sorted( - cls._iter_member_by_value_(value), - key=lambda m: m._sort_order_, - ) - - @classmethod - def _missing_(cls, value): - """ - Create a composite member containing all canonical members present in `value`. - - If non-member values are present, result depends on `_boundary_` setting. - """ - if not isinstance(value, int): - raise ValueError( - "%r is not a valid %s" % (value, cls.__qualname__) - ) - # check boundaries - # - value must be in range (e.g. -16 <-> +15, i.e. ~15 <-> 15) - # - value must not include any skipped flags (e.g. if bit 2 is not - # defined, then 0d10 is invalid) - flag_mask = cls._flag_mask_ - singles_mask = cls._singles_mask_ - all_bits = cls._all_bits_ - neg_value = None - if ( - not ~all_bits <= value <= all_bits - or value & (all_bits ^ flag_mask) - ): - if cls._boundary_ is STRICT: - max_bits = max(value.bit_length(), flag_mask.bit_length()) - raise ValueError( - "%r invalid value %r\n given %s\n allowed %s" % ( - cls, value, bin(value, max_bits), bin(flag_mask, max_bits), - )) - elif cls._boundary_ is CONFORM: - value = value & flag_mask - elif cls._boundary_ is EJECT: - return value - elif cls._boundary_ is KEEP: - if value < 0: - value = ( - max(all_bits+1, 2**(value.bit_length())) - + value - ) - else: - raise ValueError( - '%r unknown flag boundary %r' % (cls, cls._boundary_, ) - ) - if value < 0: - neg_value = value - value = all_bits + 1 + value - # get members and unknown - unknown = value & ~flag_mask - aliases = value & ~singles_mask - member_value = value & singles_mask - if unknown and cls._boundary_ is not KEEP: - raise ValueError( - '%s(%r) --> unknown values %r [%s]' - % (cls.__name__, value, unknown, bin(unknown)) - ) - # normal Flag? - if cls._member_type_ is object: - # construct a singleton enum pseudo-member - pseudo_member = object.__new__(cls) - else: - pseudo_member = cls._member_type_.__new__(cls, value) - if not hasattr(pseudo_member, '_value_'): - pseudo_member._value_ = value - if member_value or aliases: - members = [] - combined_value = 0 - for m in cls._iter_member_(member_value): - members.append(m) - combined_value |= m._value_ - if aliases: - value = member_value | aliases - for n, pm in cls._member_map_.items(): - if pm not in members and pm._value_ and pm._value_ & value == pm._value_: - members.append(pm) - combined_value |= pm._value_ - unknown = value ^ combined_value - pseudo_member._name_ = '|'.join([m._name_ for m in members]) - if not combined_value: - pseudo_member._name_ = None - elif unknown and cls._boundary_ is STRICT: - raise ValueError('%r: no members with value %r' % (cls, unknown)) - elif unknown: - pseudo_member._name_ += '|%s' % cls._numeric_repr_(unknown) - else: - pseudo_member._name_ = None - # use setdefault in case another thread already created a composite - # with this value - # note: zero is a special case -- always add it - pseudo_member = cls._value2member_map_.setdefault(value, pseudo_member) - if neg_value is not None: - cls._value2member_map_[neg_value] = pseudo_member - return pseudo_member - - def __contains__(self, other): - """ - Returns True if self has at least the same flags set as other. - """ - if not isinstance(other, self.__class__): - raise TypeError( - "unsupported operand type(s) for 'in': %r and %r" % ( - type(other).__qualname__, self.__class__.__qualname__)) - return other._value_ & self._value_ == other._value_ - - def __iter__(self): - """ - Returns flags in definition order. - """ - yield from self._iter_member_(self._value_) - - def __len__(self): - return self._value_.bit_count() - - def __repr__(self): - cls_name = self.__class__.__name__ - v_repr = self.__class__._value_repr_ or repr - if self._name_ is None: - return "<%s: %s>" % (cls_name, v_repr(self._value_)) - else: - return "<%s.%s: %s>" % (cls_name, self._name_, v_repr(self._value_)) - - def __str__(self): - cls_name = self.__class__.__name__ - if self._name_ is None: - return '%s(%r)' % (cls_name, self._value_) - else: - return "%s.%s" % (cls_name, self._name_) - - def __bool__(self): - return bool(self._value_) - - def _get_value(self, flag): - if isinstance(flag, self.__class__): - return flag._value_ - elif self._member_type_ is not object and isinstance(flag, self._member_type_): - return flag - return NotImplemented - - def __or__(self, other): - other_value = self._get_value(other) - if other_value is NotImplemented: - return NotImplemented - - for flag in self, other: - if self._get_value(flag) is None: - raise TypeError(f"'{flag}' cannot be combined with other flags with |") - value = self._value_ - return self.__class__(value | other_value) - - def __and__(self, other): - other_value = self._get_value(other) - if other_value is NotImplemented: - return NotImplemented - - for flag in self, other: - if self._get_value(flag) is None: - raise TypeError(f"'{flag}' cannot be combined with other flags with &") - value = self._value_ - return self.__class__(value & other_value) - - def __xor__(self, other): - other_value = self._get_value(other) - if other_value is NotImplemented: - return NotImplemented - - for flag in self, other: - if self._get_value(flag) is None: - raise TypeError(f"'{flag}' cannot be combined with other flags with ^") - value = self._value_ - return self.__class__(value ^ other_value) - - def __invert__(self): - if self._get_value(self) is None: - raise TypeError(f"'{self}' cannot be inverted") - - if self._inverted_ is None: - if self._boundary_ in (EJECT, KEEP): - self._inverted_ = self.__class__(~self._value_) - else: - self._inverted_ = self.__class__(self._singles_mask_ & ~self._value_) - return self._inverted_ - - __rand__ = __and__ - __ror__ = __or__ - __rxor__ = __xor__ - - -class IntFlag(int, ReprEnum, Flag, boundary=KEEP): - """ - Support for integer-based Flags - """ - - -def _high_bit(value): - """ - returns index of highest bit, or -1 if value is zero or negative - """ - return value.bit_length() - 1 - -def unique(enumeration): - """ - Class decorator for enumerations ensuring unique member values. - """ - duplicates = [] - for name, member in enumeration.__members__.items(): - if name != member.name: - duplicates.append((name, member.name)) - if duplicates: - alias_details = ', '.join( - ["%s -> %s" % (alias, name) for (alias, name) in duplicates]) - raise ValueError('duplicate values found in %r: %s' % - (enumeration, alias_details)) - return enumeration - -def _dataclass_repr(self): - dcf = self.__dataclass_fields__ - return ', '.join( - '%s=%r' % (k, getattr(self, k)) - for k in dcf.keys() - if dcf[k].repr - ) - -def global_enum_repr(self): - """ - use module.enum_name instead of class.enum_name - - the module is the last module in case of a multi-module name - """ - module = self.__class__.__module__.split('.')[-1] - return '%s.%s' % (module, self._name_) - -def global_flag_repr(self): - """ - use module.flag_name instead of class.flag_name - - the module is the last module in case of a multi-module name - """ - module = self.__class__.__module__.split('.')[-1] - cls_name = self.__class__.__name__ - if self._name_ is None: - return "%s.%s(%r)" % (module, cls_name, self._value_) - if _is_single_bit(self._value_): - return '%s.%s' % (module, self._name_) - if self._boundary_ is not FlagBoundary.KEEP: - return '|'.join(['%s.%s' % (module, name) for name in self.name.split('|')]) - else: - name = [] - for n in self._name_.split('|'): - if n[0].isdigit(): - name.append(n) - else: - name.append('%s.%s' % (module, n)) - return '|'.join(name) - -def global_str(self): - """ - use enum_name instead of class.enum_name - """ - if self._name_ is None: - cls_name = self.__class__.__name__ - return "%s(%r)" % (cls_name, self._value_) - else: - return self._name_ - -def global_enum(cls, update_str=False): - """ - decorator that makes the repr() of an enum member reference its module - instead of its class; also exports all members to the enum's module's - global namespace - """ - if issubclass(cls, Flag): - cls.__repr__ = global_flag_repr - else: - cls.__repr__ = global_enum_repr - if not issubclass(cls, ReprEnum) or update_str: - cls.__str__ = global_str - sys.modules[cls.__module__].__dict__.update(cls.__members__) - return cls - -def _simple_enum(etype=Enum, *, boundary=None, use_args=None): - """ - Class decorator that converts a normal class into an :class:`Enum`. No - safety checks are done, and some advanced behavior (such as - :func:`__init_subclass__`) is not available. Enum creation can be faster - using :func:`_simple_enum`. - - >>> from enum import Enum, _simple_enum - >>> @_simple_enum(Enum) - ... class Color: - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> Color - <enum 'Color'> - """ - def convert_class(cls): - nonlocal use_args - cls_name = cls.__name__ - if use_args is None: - use_args = etype._use_args_ - __new__ = cls.__dict__.get('__new__') - if __new__ is not None: - new_member = __new__.__func__ - else: - new_member = etype._member_type_.__new__ - attrs = {} - body = {} - if __new__ is not None: - body['__new_member__'] = new_member - body['_new_member_'] = new_member - body['_use_args_'] = use_args - body['_generate_next_value_'] = gnv = etype._generate_next_value_ - body['_member_names_'] = member_names = [] - body['_member_map_'] = member_map = {} - body['_value2member_map_'] = value2member_map = {} - body['_hashable_values_'] = hashable_values = [] - body['_unhashable_values_'] = unhashable_values = [] - body['_unhashable_values_map_'] = {} - body['_member_type_'] = member_type = etype._member_type_ - body['_value_repr_'] = etype._value_repr_ - if issubclass(etype, Flag): - body['_boundary_'] = boundary or etype._boundary_ - body['_flag_mask_'] = None - body['_all_bits_'] = None - body['_singles_mask_'] = None - body['_inverted_'] = None - body['__or__'] = Flag.__or__ - body['__xor__'] = Flag.__xor__ - body['__and__'] = Flag.__and__ - body['__ror__'] = Flag.__ror__ - body['__rxor__'] = Flag.__rxor__ - body['__rand__'] = Flag.__rand__ - body['__invert__'] = Flag.__invert__ - for name, obj in cls.__dict__.items(): - if name in ('__dict__', '__weakref__'): - continue - if _is_dunder(name) or _is_private(cls_name, name) or _is_sunder(name) or _is_descriptor(obj): - body[name] = obj - else: - attrs[name] = obj - if cls.__dict__.get('__doc__') is None: - body['__doc__'] = 'An enumeration.' - # - # double check that repr and friends are not the mixin's or various - # things break (such as pickle) - # however, if the method is defined in the Enum itself, don't replace - # it - enum_class = type(cls_name, (etype, ), body, boundary=boundary, _simple=True) - for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'): - if name not in body: - # check for mixin overrides before replacing - enum_method = getattr(etype, name) - found_method = getattr(enum_class, name) - object_method = getattr(object, name) - data_type_method = getattr(member_type, name) - if found_method in (data_type_method, object_method): - setattr(enum_class, name, enum_method) - gnv_last_values = [] - if issubclass(enum_class, Flag): - # Flag / IntFlag - single_bits = multi_bits = 0 - for name, value in attrs.items(): - if isinstance(value, auto) and auto.value is _auto_null: - value = gnv(name, 1, len(member_names), gnv_last_values) - # create basic member (possibly isolate value for alias check) - if use_args: - if not isinstance(value, tuple): - value = (value, ) - member = new_member(enum_class, *value) - value = value[0] - else: - member = new_member(enum_class) - if __new__ is None: - member._value_ = value - # now check if alias - try: - contained = value2member_map.get(member._value_) - except TypeError: - contained = None - if member._value_ in unhashable_values or member.value in hashable_values: - for m in enum_class: - if m._value_ == member._value_: - contained = m - break - if contained is not None: - # an alias to an existing member - contained._add_alias_(name) - else: - # finish creating member - member._name_ = name - member.__objclass__ = enum_class - member.__init__(value) - member._sort_order_ = len(member_names) - if name not in ('name', 'value'): - setattr(enum_class, name, member) - member_map[name] = member - else: - enum_class._add_member_(name, member) - value2member_map[value] = member - hashable_values.append(value) - if _is_single_bit(value): - # not a multi-bit alias, record in _member_names_ and _flag_mask_ - member_names.append(name) - single_bits |= value - else: - multi_bits |= value - gnv_last_values.append(value) - enum_class._flag_mask_ = single_bits | multi_bits - enum_class._singles_mask_ = single_bits - enum_class._all_bits_ = 2 ** ((single_bits|multi_bits).bit_length()) - 1 - # set correct __iter__ - member_list = [m._value_ for m in enum_class] - if member_list != sorted(member_list): - enum_class._iter_member_ = enum_class._iter_member_by_def_ - else: - # Enum / IntEnum / StrEnum - for name, value in attrs.items(): - if isinstance(value, auto): - if value.value is _auto_null: - value.value = gnv(name, 1, len(member_names), gnv_last_values) - value = value.value - # create basic member (possibly isolate value for alias check) - if use_args: - if not isinstance(value, tuple): - value = (value, ) - member = new_member(enum_class, *value) - value = value[0] - else: - member = new_member(enum_class) - if __new__ is None: - member._value_ = value - # now check if alias - try: - contained = value2member_map.get(member._value_) - except TypeError: - contained = None - if member._value_ in unhashable_values or member._value_ in hashable_values: - for m in enum_class: - if m._value_ == member._value_: - contained = m - break - if contained is not None: - # an alias to an existing member - contained._add_alias_(name) - else: - # finish creating member - member._name_ = name - member.__objclass__ = enum_class - member.__init__(value) - member._sort_order_ = len(member_names) - if name not in ('name', 'value'): - setattr(enum_class, name, member) - member_map[name] = member - else: - enum_class._add_member_(name, member) - member_names.append(name) - gnv_last_values.append(value) - try: - # This may fail if value is not hashable. We can't add the value - # to the map, and by-value lookups for this value will be - # linear. - enum_class._value2member_map_.setdefault(value, member) - if value not in hashable_values: - hashable_values.append(value) - except TypeError: - # keep track of the value in a list so containment checks are quick - enum_class._unhashable_values_.append(value) - enum_class._unhashable_values_map_.setdefault(name, []).append(value) - if '__new__' in body: - enum_class.__new_member__ = enum_class.__new__ - enum_class.__new__ = Enum.__new__ - return enum_class - return convert_class - -@_simple_enum(StrEnum) -class EnumCheck: - """ - various conditions to check an enumeration for - """ - CONTINUOUS = "no skipped integer values" - NAMED_FLAGS = "multi-flag aliases may not contain unnamed flags" - UNIQUE = "one name per value" -CONTINUOUS, NAMED_FLAGS, UNIQUE = EnumCheck - - -class verify: - """ - Check an enumeration for various constraints. (see EnumCheck) - """ - def __init__(self, *checks): - self.checks = checks - def __call__(self, enumeration): - checks = self.checks - cls_name = enumeration.__name__ - if Flag is not None and issubclass(enumeration, Flag): - enum_type = 'flag' - elif issubclass(enumeration, Enum): - enum_type = 'enum' - else: - raise TypeError("the 'verify' decorator only works with Enum and Flag") - for check in checks: - if check is UNIQUE: - # check for duplicate names - duplicates = [] - for name, member in enumeration.__members__.items(): - if name != member.name: - duplicates.append((name, member.name)) - if duplicates: - alias_details = ', '.join( - ["%s -> %s" % (alias, name) for (alias, name) in duplicates]) - raise ValueError('aliases found in %r: %s' % - (enumeration, alias_details)) - elif check is CONTINUOUS: - values = set(e.value for e in enumeration) - if len(values) < 2: - continue - low, high = min(values), max(values) - missing = [] - if enum_type == 'flag': - # check for powers of two - for i in range(_high_bit(low)+1, _high_bit(high)): - if 2**i not in values: - missing.append(2**i) - elif enum_type == 'enum': - # check for missing consecutive integers - for i in range(low+1, high): - if i not in values: - missing.append(i) - else: - raise Exception('verify: unknown type %r' % enum_type) - if missing: - raise ValueError(('invalid %s %r: missing values %s' % ( - enum_type, cls_name, ', '.join((str(m) for m in missing))) - )[:256]) - # limit max length to protect against DOS attacks - elif check is NAMED_FLAGS: - # examine each alias and check for unnamed flags - member_names = enumeration._member_names_ - member_values = [m.value for m in enumeration] - missing_names = [] - missing_value = 0 - for name, alias in enumeration._member_map_.items(): - if name in member_names: - # not an alias - continue - if alias.value < 0: - # negative numbers are not checked - continue - values = list(_iter_bits_lsb(alias.value)) - missed = [v for v in values if v not in member_values] - if missed: - missing_names.append(name) - for val in missed: - missing_value |= val - if missing_names: - if len(missing_names) == 1: - alias = 'alias %s is missing' % missing_names[0] - else: - alias = 'aliases %s and %s are missing' % ( - ', '.join(missing_names[:-1]), missing_names[-1] - ) - if _is_single_bit(missing_value): - value = 'value 0x%x' % missing_value - else: - value = 'combined values of 0x%x' % missing_value - raise ValueError( - 'invalid Flag %r: %s %s [use enum.show_flag_values(value) for details]' - % (cls_name, alias, value) - ) - return enumeration - -def _test_simple_enum(checked_enum, simple_enum): - """ - A function that can be used to test an enum created with :func:`_simple_enum` - against the version created by subclassing :class:`Enum`:: - - >>> from enum import Enum, _simple_enum, _test_simple_enum - >>> @_simple_enum(Enum) - ... class Color: - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> class CheckedColor(Enum): - ... RED = auto() - ... GREEN = auto() - ... BLUE = auto() - >>> _test_simple_enum(CheckedColor, Color) - - If differences are found, a :exc:`TypeError` is raised. - """ - failed = [] - if checked_enum.__dict__ != simple_enum.__dict__: - checked_dict = checked_enum.__dict__ - checked_keys = list(checked_dict.keys()) - simple_dict = simple_enum.__dict__ - simple_keys = list(simple_dict.keys()) - member_names = set( - list(checked_enum._member_map_.keys()) - + list(simple_enum._member_map_.keys()) - ) - for key in set(checked_keys + simple_keys): - if key in ('__module__', '_member_map_', '_value2member_map_', '__doc__', - '__static_attributes__', '__firstlineno__'): - # keys known to be different, or very long - continue - elif key in member_names: - # members are checked below - continue - elif key not in simple_keys: - failed.append("missing key: %r" % (key, )) - elif key not in checked_keys: - failed.append("extra key: %r" % (key, )) - else: - checked_value = checked_dict[key] - simple_value = simple_dict[key] - if callable(checked_value) or isinstance(checked_value, bltns.property): - continue - if key == '__doc__': - # remove all spaces/tabs - compressed_checked_value = checked_value.replace(' ','').replace('\t','') - compressed_simple_value = simple_value.replace(' ','').replace('\t','') - if compressed_checked_value != compressed_simple_value: - failed.append("%r:\n %s\n %s" % ( - key, - "checked -> %r" % (checked_value, ), - "simple -> %r" % (simple_value, ), - )) - elif checked_value != simple_value: - failed.append("%r:\n %s\n %s" % ( - key, - "checked -> %r" % (checked_value, ), - "simple -> %r" % (simple_value, ), - )) - failed.sort() - for name in member_names: - failed_member = [] - if name not in simple_keys: - failed.append('missing member from simple enum: %r' % name) - elif name not in checked_keys: - failed.append('extra member in simple enum: %r' % name) - else: - checked_member_dict = checked_enum[name].__dict__ - checked_member_keys = list(checked_member_dict.keys()) - simple_member_dict = simple_enum[name].__dict__ - simple_member_keys = list(simple_member_dict.keys()) - for key in set(checked_member_keys + simple_member_keys): - if key in ('__module__', '__objclass__', '_inverted_'): - # keys known to be different or absent - continue - elif key not in simple_member_keys: - failed_member.append("missing key %r not in the simple enum member %r" % (key, name)) - elif key not in checked_member_keys: - failed_member.append("extra key %r in simple enum member %r" % (key, name)) - else: - checked_value = checked_member_dict[key] - simple_value = simple_member_dict[key] - if checked_value != simple_value: - failed_member.append("%r:\n %s\n %s" % ( - key, - "checked member -> %r" % (checked_value, ), - "simple member -> %r" % (simple_value, ), - )) - if failed_member: - failed.append('%r member mismatch:\n %s' % ( - name, '\n '.join(failed_member), - )) - for method in ( - '__str__', '__repr__', '__reduce_ex__', '__format__', - '__getnewargs_ex__', '__getnewargs__', '__reduce_ex__', '__reduce__' - ): - if method in simple_keys and method in checked_keys: - # cannot compare functions, and it exists in both, so we're good - continue - elif method not in simple_keys and method not in checked_keys: - # method is inherited -- check it out - checked_method = getattr(checked_enum, method, None) - simple_method = getattr(simple_enum, method, None) - if hasattr(checked_method, '__func__'): - checked_method = checked_method.__func__ - simple_method = simple_method.__func__ - if checked_method != simple_method: - failed.append("%r: %-30s %s" % ( - method, - "checked -> %r" % (checked_method, ), - "simple -> %r" % (simple_method, ), - )) - else: - # if the method existed in only one of the enums, it will have been caught - # in the first checks above - pass - if failed: - raise TypeError('enum mismatch:\n %s' % '\n '.join(failed)) - -def _old_convert_(etype, name, module, filter, source=None, *, boundary=None): - """ - Create a new Enum subclass that replaces a collection of global constants - """ - # convert all constants from source (or module) that pass filter() to - # a new Enum called name, and export the enum and its members back to - # module; - # also, replace the __reduce_ex__ method so unpickling works in - # previous Python versions - module_globals = sys.modules[module].__dict__ - if source: - source = source.__dict__ - else: - source = module_globals - # _value2member_map_ is populated in the same order every time - # for a consistent reverse mapping of number to name when there - # are multiple names for the same number. - members = [ - (name, value) - for name, value in source.items() - if filter(name)] - try: - # sort by value - members.sort(key=lambda t: (t[1], t[0])) - except TypeError: - # unless some values aren't comparable, in which case sort by name - members.sort(key=lambda t: t[0]) - cls = etype(name, members, module=module, boundary=boundary or KEEP) - return cls - -_stdlib_enums = IntEnum, StrEnum, IntFlag diff --git a/Python314_4_x86_Template/Lib/filecmp.py b/Python314_4_x86_Template/Lib/filecmp.py deleted file mode 100644 index c5b8d854d..000000000 --- a/Python314_4_x86_Template/Lib/filecmp.py +++ /dev/null @@ -1,320 +0,0 @@ -"""Utilities for comparing files and directories. - -Classes: - dircmp - -Functions: - cmp(f1, f2, shallow=True) -> int - cmpfiles(a, b, common) -> ([], [], []) - clear_cache() - -""" - -import os -import stat -from itertools import filterfalse -from types import GenericAlias - -__all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES'] - -_cache = {} -BUFSIZE = 8*1024 - -DEFAULT_IGNORES = [ - 'RCS', 'CVS', 'tags', '.git', '.hg', '.bzr', '_darcs', '__pycache__'] - -def clear_cache(): - """Clear the filecmp cache.""" - _cache.clear() - -def cmp(f1, f2, shallow=True): - """Compare two files. - - Arguments: - - f1 -- First file name - - f2 -- Second file name - - shallow -- treat files as identical if their stat signatures (type, size, - mtime) are identical. Otherwise, files are considered different - if their sizes or contents differ. [default: True] - - Return value: - - True if the files are the same, False otherwise. - - This function uses a cache for past comparisons and the results, - with cache entries invalidated if their stat information - changes. The cache may be cleared by calling clear_cache(). - - """ - - s1 = _sig(os.stat(f1)) - s2 = _sig(os.stat(f2)) - if s1[0] != stat.S_IFREG or s2[0] != stat.S_IFREG: - return False - if shallow and s1 == s2: - return True - if s1[1] != s2[1]: - return False - - outcome = _cache.get((f1, f2, s1, s2)) - if outcome is None: - outcome = _do_cmp(f1, f2) - if len(_cache) > 100: # limit the maximum size of the cache - clear_cache() - _cache[f1, f2, s1, s2] = outcome - return outcome - -def _sig(st): - return (stat.S_IFMT(st.st_mode), - st.st_size, - st.st_mtime) - -def _do_cmp(f1, f2): - bufsize = BUFSIZE - with open(f1, 'rb') as fp1, open(f2, 'rb') as fp2: - while True: - b1 = fp1.read(bufsize) - b2 = fp2.read(bufsize) - if b1 != b2: - return False - if not b1: - return True - -# Directory comparison class. -# -class dircmp: - """A class that manages the comparison of 2 directories. - - dircmp(a, b, ignore=None, hide=None, *, shallow=True) - A and B are directories. - IGNORE is a list of names to ignore, - defaults to DEFAULT_IGNORES. - HIDE is a list of names to hide, - defaults to [os.curdir, os.pardir]. - SHALLOW specifies whether to just check the stat signature (do not read - the files). - defaults to True. - - High level usage: - x = dircmp(dir1, dir2) - x.report() -> prints a report on the differences between dir1 and dir2 - or - x.report_partial_closure() -> prints report on differences between dir1 - and dir2, and reports on common immediate subdirectories. - x.report_full_closure() -> like report_partial_closure, - but fully recursive. - - Attributes: - left_list, right_list: The files in dir1 and dir2, - filtered by hide and ignore. - common: a list of names in both dir1 and dir2. - left_only, right_only: names only in dir1, dir2. - common_dirs: subdirectories in both dir1 and dir2. - common_files: files in both dir1 and dir2. - common_funny: names in both dir1 and dir2 where the type differs between - dir1 and dir2, or the name is not stat-able. - same_files: list of identical files. - diff_files: list of filenames which differ. - funny_files: list of files which could not be compared. - subdirs: a dictionary of dircmp instances (or MyDirCmp instances if this - object is of type MyDirCmp, a subclass of dircmp), keyed by names - in common_dirs. - """ - - def __init__(self, a, b, ignore=None, hide=None, *, shallow=True): # Initialize - self.left = a - self.right = b - if hide is None: - self.hide = [os.curdir, os.pardir] # Names never to be shown - else: - self.hide = hide - if ignore is None: - self.ignore = DEFAULT_IGNORES - else: - self.ignore = ignore - self.shallow = shallow - - def phase0(self): # Compare everything except common subdirectories - self.left_list = _filter(os.listdir(self.left), - self.hide+self.ignore) - self.right_list = _filter(os.listdir(self.right), - self.hide+self.ignore) - self.left_list.sort() - self.right_list.sort() - - def phase1(self): # Compute common names - a = dict(zip(map(os.path.normcase, self.left_list), self.left_list)) - b = dict(zip(map(os.path.normcase, self.right_list), self.right_list)) - self.common = list(map(a.__getitem__, filter(b.__contains__, a))) - self.left_only = list(map(a.__getitem__, filterfalse(b.__contains__, a))) - self.right_only = list(map(b.__getitem__, filterfalse(a.__contains__, b))) - - def phase2(self): # Distinguish files, directories, funnies - self.common_dirs = [] - self.common_files = [] - self.common_funny = [] - - for x in self.common: - a_path = os.path.join(self.left, x) - b_path = os.path.join(self.right, x) - - ok = True - try: - a_stat = os.stat(a_path) - except (OSError, ValueError): - # See https://github.com/python/cpython/issues/122400 - # for the rationale for protecting against ValueError. - # print('Can\'t stat', a_path, ':', why.args[1]) - ok = False - try: - b_stat = os.stat(b_path) - except (OSError, ValueError): - # print('Can\'t stat', b_path, ':', why.args[1]) - ok = False - - if ok: - a_type = stat.S_IFMT(a_stat.st_mode) - b_type = stat.S_IFMT(b_stat.st_mode) - if a_type != b_type: - self.common_funny.append(x) - elif stat.S_ISDIR(a_type): - self.common_dirs.append(x) - elif stat.S_ISREG(a_type): - self.common_files.append(x) - else: - self.common_funny.append(x) - else: - self.common_funny.append(x) - - def phase3(self): # Find out differences between common files - xx = cmpfiles(self.left, self.right, self.common_files, self.shallow) - self.same_files, self.diff_files, self.funny_files = xx - - def phase4(self): # Find out differences between common subdirectories - # A new dircmp (or MyDirCmp if dircmp was subclassed) object is created - # for each common subdirectory, - # these are stored in a dictionary indexed by filename. - # The hide and ignore properties are inherited from the parent - self.subdirs = {} - for x in self.common_dirs: - a_x = os.path.join(self.left, x) - b_x = os.path.join(self.right, x) - self.subdirs[x] = self.__class__(a_x, b_x, self.ignore, self.hide, - shallow=self.shallow) - - def phase4_closure(self): # Recursively call phase4() on subdirectories - self.phase4() - for sd in self.subdirs.values(): - sd.phase4_closure() - - def report(self): # Print a report on the differences between a and b - # Output format is purposely lousy - print('diff', self.left, self.right) - if self.left_only: - self.left_only.sort() - print('Only in', self.left, ':', self.left_only) - if self.right_only: - self.right_only.sort() - print('Only in', self.right, ':', self.right_only) - if self.same_files: - self.same_files.sort() - print('Identical files :', self.same_files) - if self.diff_files: - self.diff_files.sort() - print('Differing files :', self.diff_files) - if self.funny_files: - self.funny_files.sort() - print('Trouble with common files :', self.funny_files) - if self.common_dirs: - self.common_dirs.sort() - print('Common subdirectories :', self.common_dirs) - if self.common_funny: - self.common_funny.sort() - print('Common funny cases :', self.common_funny) - - def report_partial_closure(self): # Print reports on self and on subdirs - self.report() - for sd in self.subdirs.values(): - print() - sd.report() - - def report_full_closure(self): # Report on self and subdirs recursively - self.report() - for sd in self.subdirs.values(): - print() - sd.report_full_closure() - - methodmap = dict(subdirs=phase4, - same_files=phase3, diff_files=phase3, funny_files=phase3, - common_dirs=phase2, common_files=phase2, common_funny=phase2, - common=phase1, left_only=phase1, right_only=phase1, - left_list=phase0, right_list=phase0) - - def __getattr__(self, attr): - if attr not in self.methodmap: - raise AttributeError(attr) - self.methodmap[attr](self) - return getattr(self, attr) - - __class_getitem__ = classmethod(GenericAlias) - - -def cmpfiles(a, b, common, shallow=True): - """Compare common files in two directories. - - a, b -- directory names - common -- list of file names found in both directories - shallow -- if true, do comparison based solely on stat() information - - Returns a tuple of three lists: - files that compare equal - files that are different - filenames that aren't regular files. - - """ - res = ([], [], []) - for x in common: - ax = os.path.join(a, x) - bx = os.path.join(b, x) - res[_cmp(ax, bx, shallow)].append(x) - return res - - -# Compare two files. -# Return: -# 0 for equal -# 1 for different -# 2 for funny cases (can't stat, NUL bytes, etc.) -# -def _cmp(a, b, sh, abs=abs, cmp=cmp): - try: - return not abs(cmp(a, b, sh)) - except (OSError, ValueError): - return 2 - - -# Return a copy with items that occur in skip removed. -# -def _filter(flist, skip): - return list(filterfalse(skip.__contains__, flist)) - - -# Demonstration and testing. -# -def demo(): - import sys - import getopt - options, args = getopt.getopt(sys.argv[1:], 'r') - if len(args) != 2: - raise getopt.GetoptError('need exactly two args', None) - dd = dircmp(args[0], args[1]) - if ('-r', '') in options: - dd.report_full_closure() - else: - dd.report() - -if __name__ == '__main__': - demo() diff --git a/Python314_4_x86_Template/Lib/fileinput.py b/Python314_4_x86_Template/Lib/fileinput.py deleted file mode 100644 index 3dba3d2fb..000000000 --- a/Python314_4_x86_Template/Lib/fileinput.py +++ /dev/null @@ -1,442 +0,0 @@ -"""Helper class to quickly write a loop over all standard input files. - -Typical use is: - - import fileinput - for line in fileinput.input(encoding="utf-8"): - process(line) - -This iterates over the lines of all files listed in sys.argv[1:], -defaulting to sys.stdin if the list is empty. If a filename is '-' it -is also replaced by sys.stdin and the optional arguments mode and -openhook are ignored. To specify an alternative list of filenames, -pass it as the argument to input(). A single file name is also allowed. - -Functions filename(), lineno() return the filename and cumulative line -number of the line that has just been read; filelineno() returns its -line number in the current file; isfirstline() returns true iff the -line just read is the first line of its file; isstdin() returns true -iff the line was read from sys.stdin. Function nextfile() closes the -current file so that the next iteration will read the first line from -the next file (if any); lines not read from the file will not count -towards the cumulative line count; the filename is not changed until -after the first line of the next file has been read. Function close() -closes the sequence. - -Before any lines have been read, filename() returns None and both line -numbers are zero; nextfile() has no effect. After all lines have been -read, filename() and the line number functions return the values -pertaining to the last line read; nextfile() has no effect. - -All files are opened in text mode by default, you can override this by -setting the mode parameter to input() or FileInput.__init__(). -If an I/O error occurs during opening or reading a file, the OSError -exception is raised. - -If sys.stdin is used more than once, the second and further use will -return no lines, except perhaps for interactive use, or if it has been -explicitly reset (e.g. using sys.stdin.seek(0)). - -Empty files are opened and immediately closed; the only time their -presence in the list of filenames is noticeable at all is when the -last file opened is empty. - -It is possible that the last line of a file doesn't end in a newline -character; otherwise lines are returned including the trailing -newline. - -Class FileInput is the implementation; its methods filename(), -lineno(), fileline(), isfirstline(), isstdin(), nextfile() and close() -correspond to the functions in the module. In addition it has a -readline() method which returns the next input line, and a -__getitem__() method which implements the sequence behavior. The -sequence must be accessed in strictly sequential order; sequence -access and readline() cannot be mixed. - -Optional in-place filtering: if the keyword argument inplace=True is -passed to input() or to the FileInput constructor, the file is moved -to a backup file and standard output is directed to the input file. -This makes it possible to write a filter that rewrites its input file -in place. If the keyword argument backup=".<some extension>" is also -given, it specifies the extension for the backup file, and the backup -file remains around; by default, the extension is ".bak" and it is -deleted when the output file is closed. In-place filtering is -disabled when standard input is read. XXX The current implementation -does not work for MS-DOS 8+3 filesystems. -""" - -import io -import sys, os -from types import GenericAlias - -__all__ = ["input", "close", "nextfile", "filename", "lineno", "filelineno", - "fileno", "isfirstline", "isstdin", "FileInput", "hook_compressed", - "hook_encoded"] - -_state = None - -def input(files=None, inplace=False, backup="", *, mode="r", openhook=None, - encoding=None, errors=None): - """Return an instance of the FileInput class, which can be iterated. - - The parameters are passed to the constructor of the FileInput class. - The returned instance, in addition to being an iterator, - keeps global state for the functions of this module,. - """ - global _state - if _state and _state._file: - raise RuntimeError("input() already active") - _state = FileInput(files, inplace, backup, mode=mode, openhook=openhook, - encoding=encoding, errors=errors) - return _state - -def close(): - """Close the sequence.""" - global _state - state = _state - _state = None - if state: - state.close() - -def nextfile(): - """ - Close the current file so that the next iteration will read the first - line from the next file (if any); lines not read from the file will - not count towards the cumulative line count. The filename is not - changed until after the first line of the next file has been read. - Before the first line has been read, this function has no effect; - it cannot be used to skip the first file. After the last line of the - last file has been read, this function has no effect. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.nextfile() - -def filename(): - """ - Return the name of the file currently being read. - Before the first line has been read, returns None. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.filename() - -def lineno(): - """ - Return the cumulative line number of the line that has just been read. - Before the first line has been read, returns 0. After the last line - of the last file has been read, returns the line number of that line. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.lineno() - -def filelineno(): - """ - Return the line number in the current file. Before the first line - has been read, returns 0. After the last line of the last file has - been read, returns the line number of that line within the file. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.filelineno() - -def fileno(): - """ - Return the file number of the current file. When no file is currently - opened, returns -1. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.fileno() - -def isfirstline(): - """ - Returns true the line just read is the first line of its file, - otherwise returns false. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.isfirstline() - -def isstdin(): - """ - Returns true if the last line was read from sys.stdin, - otherwise returns false. - """ - if not _state: - raise RuntimeError("no active input()") - return _state.isstdin() - -class FileInput: - """FileInput([files[, inplace[, backup]]], *, mode=None, openhook=None) - - Class FileInput is the implementation of the module; its methods - filename(), lineno(), fileline(), isfirstline(), isstdin(), fileno(), - nextfile() and close() correspond to the functions of the same name - in the module. - In addition it has a readline() method which returns the next - input line, and a __getitem__() method which implements the - sequence behavior. The sequence must be accessed in strictly - sequential order; random access and readline() cannot be mixed. - """ - - def __init__(self, files=None, inplace=False, backup="", *, - mode="r", openhook=None, encoding=None, errors=None): - if isinstance(files, str): - files = (files,) - elif isinstance(files, os.PathLike): - files = (os.fspath(files), ) - else: - if files is None: - files = sys.argv[1:] - if not files: - files = ('-',) - else: - files = tuple(files) - self._files = files - self._inplace = inplace - self._backup = backup - self._savestdout = None - self._output = None - self._filename = None - self._startlineno = 0 - self._filelineno = 0 - self._file = None - self._isstdin = False - self._backupfilename = None - self._encoding = encoding - self._errors = errors - - # We can not use io.text_encoding() here because old openhook doesn't - # take encoding parameter. - if (sys.flags.warn_default_encoding and - "b" not in mode and encoding is None and openhook is None): - import warnings - warnings.warn("'encoding' argument not specified.", - EncodingWarning, 2) - - # restrict mode argument to reading modes - if mode not in ('r', 'rb'): - raise ValueError("FileInput opening mode must be 'r' or 'rb'") - self._mode = mode - self._write_mode = mode.replace('r', 'w') - if openhook: - if inplace: - raise ValueError("FileInput cannot use an opening hook in inplace mode") - if not callable(openhook): - raise ValueError("FileInput openhook must be callable") - self._openhook = openhook - - def __del__(self): - self.close() - - def close(self): - try: - self.nextfile() - finally: - self._files = () - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - self.close() - - def __iter__(self): - return self - - def __next__(self): - while True: - line = self._readline() - if line: - self._filelineno += 1 - return line - if not self._file: - raise StopIteration - self.nextfile() - # repeat with next file - - def nextfile(self): - savestdout = self._savestdout - self._savestdout = None - if savestdout: - sys.stdout = savestdout - - output = self._output - self._output = None - try: - if output: - output.close() - finally: - file = self._file - self._file = None - try: - del self._readline # restore FileInput._readline - except AttributeError: - pass - try: - if file and not self._isstdin: - file.close() - finally: - backupfilename = self._backupfilename - self._backupfilename = None - if backupfilename and not self._backup: - try: os.unlink(backupfilename) - except OSError: pass - - self._isstdin = False - - def readline(self): - while True: - line = self._readline() - if line: - self._filelineno += 1 - return line - if not self._file: - return line - self.nextfile() - # repeat with next file - - def _readline(self): - if not self._files: - if 'b' in self._mode: - return b'' - else: - return '' - self._filename = self._files[0] - self._files = self._files[1:] - self._startlineno = self.lineno() - self._filelineno = 0 - self._file = None - self._isstdin = False - self._backupfilename = 0 - - # EncodingWarning is emitted in __init__() already - if "b" not in self._mode: - encoding = self._encoding or "locale" - else: - encoding = None - - if self._filename == '-': - self._filename = '<stdin>' - if 'b' in self._mode: - self._file = getattr(sys.stdin, 'buffer', sys.stdin) - else: - self._file = sys.stdin - self._isstdin = True - else: - if self._inplace: - self._backupfilename = ( - os.fspath(self._filename) + (self._backup or ".bak")) - try: - os.unlink(self._backupfilename) - except OSError: - pass - # The next few lines may raise OSError - os.rename(self._filename, self._backupfilename) - self._file = open(self._backupfilename, self._mode, - encoding=encoding, errors=self._errors) - try: - perm = os.fstat(self._file.fileno()).st_mode - except OSError: - self._output = open(self._filename, self._write_mode, - encoding=encoding, errors=self._errors) - else: - mode = os.O_CREAT | os.O_WRONLY | os.O_TRUNC - if hasattr(os, 'O_BINARY'): - mode |= os.O_BINARY - - fd = os.open(self._filename, mode, perm) - self._output = os.fdopen(fd, self._write_mode, - encoding=encoding, errors=self._errors) - try: - os.chmod(self._filename, perm) - except OSError: - pass - self._savestdout = sys.stdout - sys.stdout = self._output - else: - # This may raise OSError - if self._openhook: - # Custom hooks made previous to Python 3.10 didn't have - # encoding argument - if self._encoding is None: - self._file = self._openhook(self._filename, self._mode) - else: - self._file = self._openhook( - self._filename, self._mode, encoding=self._encoding, errors=self._errors) - else: - self._file = open(self._filename, self._mode, encoding=encoding, errors=self._errors) - self._readline = self._file.readline # hide FileInput._readline - return self._readline() - - def filename(self): - return self._filename - - def lineno(self): - return self._startlineno + self._filelineno - - def filelineno(self): - return self._filelineno - - def fileno(self): - if self._file: - try: - return self._file.fileno() - except ValueError: - return -1 - else: - return -1 - - def isfirstline(self): - return self._filelineno == 1 - - def isstdin(self): - return self._isstdin - - __class_getitem__ = classmethod(GenericAlias) - - -def hook_compressed(filename, mode, *, encoding=None, errors=None): - if encoding is None and "b" not in mode: # EncodingWarning is emitted in FileInput() already. - encoding = "locale" - ext = os.path.splitext(filename)[1] - if ext == '.gz': - import gzip - stream = gzip.open(filename, mode) - elif ext == '.bz2': - import bz2 - stream = bz2.BZ2File(filename, mode) - else: - return open(filename, mode, encoding=encoding, errors=errors) - - # gzip and bz2 are binary mode by default. - if "b" not in mode: - stream = io.TextIOWrapper(stream, encoding=encoding, errors=errors) - return stream - - -def hook_encoded(encoding, errors=None): - def openhook(filename, mode): - return open(filename, mode, encoding=encoding, errors=errors) - return openhook - - -def _test(): - import getopt - inplace = False - backup = False - opts, args = getopt.getopt(sys.argv[1:], "ib:") - for o, a in opts: - if o == '-i': inplace = True - if o == '-b': backup = a - for line in input(args, inplace=inplace, backup=backup): - if line[-1:] == '\n': line = line[:-1] - if line[-1:] == '\r': line = line[:-1] - print("%d: %s[%d]%s %s" % (lineno(), filename(), filelineno(), - isfirstline() and "*" or "", line)) - print("%d: %s[%d]" % (lineno(), filename(), filelineno())) - -if __name__ == '__main__': - _test() diff --git a/Python314_4_x86_Template/Lib/fnmatch.py b/Python314_4_x86_Template/Lib/fnmatch.py deleted file mode 100644 index 10e1c9366..000000000 --- a/Python314_4_x86_Template/Lib/fnmatch.py +++ /dev/null @@ -1,209 +0,0 @@ -"""Filename matching with shell patterns. - -fnmatch(FILENAME, PATTERN) matches according to the local convention. -fnmatchcase(FILENAME, PATTERN) always takes case in account. - -The functions operate by translating the pattern into a regular -expression. They cache the compiled regular expressions for speed. - -The function translate(PATTERN) returns a regular expression -corresponding to PATTERN. (It does not compile it.) -""" - -import functools -import itertools -import os -import posixpath -import re - -__all__ = ["filter", "filterfalse", "fnmatch", "fnmatchcase", "translate"] - - -def fnmatch(name, pat): - """Test whether FILENAME matches PATTERN. - - Patterns are Unix shell style: - - * matches everything - ? matches any single character - [seq] matches any character in seq - [!seq] matches any char not in seq - - An initial period in FILENAME is not special. - Both FILENAME and PATTERN are first case-normalized - if the operating system requires it. - If you don't want this, use fnmatchcase(FILENAME, PATTERN). - """ - name = os.path.normcase(name) - pat = os.path.normcase(pat) - return fnmatchcase(name, pat) - - -@functools.lru_cache(maxsize=32768, typed=True) -def _compile_pattern(pat): - if isinstance(pat, bytes): - pat_str = str(pat, 'ISO-8859-1') - res_str = translate(pat_str) - res = bytes(res_str, 'ISO-8859-1') - else: - res = translate(pat) - return re.compile(res).match - - -def filter(names, pat): - """Construct a list from those elements of the iterable NAMES that match PAT.""" - result = [] - pat = os.path.normcase(pat) - match = _compile_pattern(pat) - if os.path is posixpath: - # normcase on posix is NOP. Optimize it away from the loop. - for name in names: - if match(name): - result.append(name) - else: - for name in names: - if match(os.path.normcase(name)): - result.append(name) - return result - - -def filterfalse(names, pat): - """Construct a list from those elements of the iterable NAMES that do not match PAT.""" - pat = os.path.normcase(pat) - match = _compile_pattern(pat) - if os.path is posixpath: - # normcase on posix is NOP. Optimize it away from the loop. - return list(itertools.filterfalse(match, names)) - - result = [] - for name in names: - if match(os.path.normcase(name)) is None: - result.append(name) - return result - - -def fnmatchcase(name, pat): - """Test whether FILENAME matches PATTERN, including case. - - This is a version of fnmatch() which doesn't case-normalize - its arguments. - """ - match = _compile_pattern(pat) - return match(name) is not None - - -def translate(pat): - """Translate a shell PATTERN to a regular expression. - - There is no way to quote meta-characters. - """ - - parts, star_indices = _translate(pat, '*', '.') - return _join_translated_parts(parts, star_indices) - - -_re_setops_sub = re.compile(r'([&~|])').sub -_re_escape = functools.lru_cache(maxsize=512)(re.escape) - - -def _translate(pat, star, question_mark): - res = [] - add = res.append - star_indices = [] - - i, n = 0, len(pat) - while i < n: - c = pat[i] - i = i+1 - if c == '*': - # store the position of the wildcard - star_indices.append(len(res)) - add(star) - # compress consecutive `*` into one - while i < n and pat[i] == '*': - i += 1 - elif c == '?': - add(question_mark) - elif c == '[': - j = i - if j < n and pat[j] == '!': - j = j+1 - if j < n and pat[j] == ']': - j = j+1 - while j < n and pat[j] != ']': - j = j+1 - if j >= n: - add('\\[') - else: - stuff = pat[i:j] - if '-' not in stuff: - stuff = stuff.replace('\\', r'\\') - else: - chunks = [] - k = i+2 if pat[i] == '!' else i+1 - while True: - k = pat.find('-', k, j) - if k < 0: - break - chunks.append(pat[i:k]) - i = k+1 - k = k+3 - chunk = pat[i:j] - if chunk: - chunks.append(chunk) - else: - chunks[-1] += '-' - # Remove empty ranges -- invalid in RE. - for k in range(len(chunks)-1, 0, -1): - if chunks[k-1][-1] > chunks[k][0]: - chunks[k-1] = chunks[k-1][:-1] + chunks[k][1:] - del chunks[k] - # Escape backslashes and hyphens for set difference (--). - # Hyphens that create ranges shouldn't be escaped. - stuff = '-'.join(s.replace('\\', r'\\').replace('-', r'\-') - for s in chunks) - i = j+1 - if not stuff: - # Empty range: never match. - add('(?!)') - elif stuff == '!': - # Negated empty range: match any character. - add('.') - else: - # Escape set operations (&&, ~~ and ||). - stuff = _re_setops_sub(r'\\\1', stuff) - if stuff[0] == '!': - stuff = '^' + stuff[1:] - elif stuff[0] in ('^', '['): - stuff = '\\' + stuff - add(f'[{stuff}]') - else: - add(_re_escape(c)) - assert i == n - return res, star_indices - - -def _join_translated_parts(parts, star_indices): - if not star_indices: - return fr'(?s:{"".join(parts)})\z' - iter_star_indices = iter(star_indices) - j = next(iter_star_indices) - buffer = parts[:j] # fixed pieces at the start - append, extend = buffer.append, buffer.extend - i = j + 1 - for j in iter_star_indices: - # Now deal with STAR fixed STAR fixed ... - # For an interior `STAR fixed` pairing, we want to do a minimal - # .*? match followed by `fixed`, with no possibility of backtracking. - # Atomic groups ("(?>...)") allow us to spell that directly. - # Note: people rely on the undocumented ability to join multiple - # translate() results together via "|" to build large regexps matching - # "one of many" shell patterns. - append('(?>.*?') - extend(parts[i:j]) - append(')') - i = j + 1 - append('.*') - extend(parts[i:]) - res = ''.join(buffer) - return fr'(?s:{res})\z' diff --git a/Python314_4_x86_Template/Lib/fractions.py b/Python314_4_x86_Template/Lib/fractions.py deleted file mode 100644 index a497ee199..000000000 --- a/Python314_4_x86_Template/Lib/fractions.py +++ /dev/null @@ -1,1078 +0,0 @@ -# Originally contributed by Sjoerd Mullender. -# Significantly modified by Jeffrey Yasskin <jyasskin at gmail.com>. - -"""Fraction, infinite-precision, rational numbers.""" - -import functools -import math -import numbers -import operator -import re -import sys - -__all__ = ['Fraction'] - - -# Constants related to the hash implementation; hash(x) is based -# on the reduction of x modulo the prime _PyHASH_MODULUS. -_PyHASH_MODULUS = sys.hash_info.modulus -# Value to be used for rationals that reduce to infinity modulo -# _PyHASH_MODULUS. -_PyHASH_INF = sys.hash_info.inf - -@functools.lru_cache(maxsize = 1 << 14) -def _hash_algorithm(numerator, denominator): - - # To make sure that the hash of a Fraction agrees with the hash - # of a numerically equal integer, float or Decimal instance, we - # follow the rules for numeric hashes outlined in the - # documentation. (See library docs, 'Built-in Types'). - - try: - dinv = pow(denominator, -1, _PyHASH_MODULUS) - except ValueError: - # ValueError means there is no modular inverse. - hash_ = _PyHASH_INF - else: - # The general algorithm now specifies that the absolute value of - # the hash is - # (|N| * dinv) % P - # where N is self._numerator and P is _PyHASH_MODULUS. That's - # optimized here in two ways: first, for a non-negative int i, - # hash(i) == i % P, but the int hash implementation doesn't need - # to divide, and is faster than doing % P explicitly. So we do - # hash(|N| * dinv) - # instead. Second, N is unbounded, so its product with dinv may - # be arbitrarily expensive to compute. The final answer is the - # same if we use the bounded |N| % P instead, which can again - # be done with an int hash() call. If 0 <= i < P, hash(i) == i, - # so this nested hash() call wastes a bit of time making a - # redundant copy when |N| < P, but can save an arbitrarily large - # amount of computation for large |N|. - hash_ = hash(hash(abs(numerator)) * dinv) - result = hash_ if numerator >= 0 else -hash_ - return -2 if result == -1 else result - -_RATIONAL_FORMAT = re.compile(r""" - \A\s* # optional whitespace at the start, - (?P<sign>[-+]?) # an optional sign, then - (?=\d|\.\d) # lookahead for digit or .digit - (?P<num>\d*|\d+(_\d+)*) # numerator (possibly empty) - (?: # followed by - (?:\s*/\s*(?P<denom>\d+(_\d+)*))? # an optional denominator - | # or - (?:\.(?P<decimal>\d*|\d+(_\d+)*))? # an optional fractional part - (?:E(?P<exp>[-+]?\d+(_\d+)*))? # and optional exponent - ) - \s*\z # and optional whitespace to finish -""", re.VERBOSE | re.IGNORECASE) - - -# Helpers for formatting - -def _round_to_exponent(n, d, exponent, no_neg_zero=False): - """Round a rational number to the nearest multiple of a given power of 10. - - Rounds the rational number n/d to the nearest integer multiple of - 10**exponent, rounding to the nearest even integer multiple in the case of - a tie. Returns a pair (sign: bool, significand: int) representing the - rounded value (-1)**sign * significand * 10**exponent. - - If no_neg_zero is true, then the returned sign will always be False when - the significand is zero. Otherwise, the sign reflects the sign of the - input. - - d must be positive, but n and d need not be relatively prime. - """ - if exponent >= 0: - d *= 10**exponent - else: - n *= 10**-exponent - - # The divmod quotient is correct for round-ties-towards-positive-infinity; - # In the case of a tie, we zero out the least significant bit of q. - q, r = divmod(n + (d >> 1), d) - if r == 0 and d & 1 == 0: - q &= -2 - - sign = q < 0 if no_neg_zero else n < 0 - return sign, abs(q) - - -def _round_to_figures(n, d, figures): - """Round a rational number to a given number of significant figures. - - Rounds the rational number n/d to the given number of significant figures - using the round-ties-to-even rule, and returns a triple - (sign: bool, significand: int, exponent: int) representing the rounded - value (-1)**sign * significand * 10**exponent. - - In the special case where n = 0, returns a significand of zero and - an exponent of 1 - figures, for compatibility with formatting. - Otherwise, the returned significand satisfies - 10**(figures - 1) <= significand < 10**figures. - - d must be positive, but n and d need not be relatively prime. - figures must be positive. - """ - # Special case for n == 0. - if n == 0: - return False, 0, 1 - figures - - # Find integer m satisfying 10**(m - 1) <= abs(n)/d <= 10**m. (If abs(n)/d - # is a power of 10, either of the two possible values for m is fine.) - str_n, str_d = str(abs(n)), str(d) - m = len(str_n) - len(str_d) + (str_d <= str_n) - - # Round to a multiple of 10**(m - figures). The significand we get - # satisfies 10**(figures - 1) <= significand <= 10**figures. - exponent = m - figures - sign, significand = _round_to_exponent(n, d, exponent) - - # Adjust in the case where significand == 10**figures, to ensure that - # 10**(figures - 1) <= significand < 10**figures. - if len(str(significand)) == figures + 1: - significand //= 10 - exponent += 1 - - return sign, significand, exponent - - -# Pattern for matching non-float-style format specifications. -_GENERAL_FORMAT_SPECIFICATION_MATCHER = re.compile(r""" - (?: - (?P<fill>.)? - (?P<align>[<>=^]) - )? - (?P<sign>[-+ ]?) - # Alt flag forces a slash and denominator in the output, even for - # integer-valued Fraction objects. - (?P<alt>\#)? - # We don't implement the zeropad flag since there's no single obvious way - # to interpret it. - (?P<minimumwidth>0|[1-9][0-9]*)? - (?P<thousands_sep>[,_])? -""", re.DOTALL | re.VERBOSE).fullmatch - - -# Pattern for matching float-style format specifications; -# supports 'e', 'E', 'f', 'F', 'g', 'G' and '%' presentation types. -_FLOAT_FORMAT_SPECIFICATION_MATCHER = re.compile(r""" - (?: - (?P<fill>.)? - (?P<align>[<>=^]) - )? - (?P<sign>[-+ ]?) - (?P<no_neg_zero>z)? - (?P<alt>\#)? - # A '0' that's *not* followed by another digit is parsed as a minimum width - # rather than a zeropad flag. - (?P<zeropad>0(?=[0-9]))? - (?P<minimumwidth>[0-9]+)? - (?P<thousands_sep>[,_])? - (?:\. - (?=[,_0-9]) # lookahead for digit or separator - (?P<precision>[0-9]+)? - (?P<frac_separators>[,_])? - )? - (?P<presentation_type>[eEfFgG%]) -""", re.DOTALL | re.VERBOSE).fullmatch - - -class Fraction(numbers.Rational): - """This class implements rational numbers. - - In the two-argument form of the constructor, Fraction(8, 6) will - produce a rational number equivalent to 4/3. Both arguments must - be Rational. The numerator defaults to 0 and the denominator - defaults to 1 so that Fraction(3) == 3 and Fraction() == 0. - - Fractions can also be constructed from: - - - numeric strings similar to those accepted by the - float constructor (for example, '-2.3' or '1e10') - - - strings of the form '123/456' - - - float and Decimal instances - - - other Rational instances (including integers) - - """ - - __slots__ = ('_numerator', '_denominator') - - # We're immutable, so use __new__ not __init__ - def __new__(cls, numerator=0, denominator=None): - """Constructs a Rational. - - Takes a string like '3/2' or '1.5', another Rational instance, a - numerator/denominator pair, or a float. - - Examples - -------- - - >>> Fraction(10, -8) - Fraction(-5, 4) - >>> Fraction(Fraction(1, 7), 5) - Fraction(1, 35) - >>> Fraction(Fraction(1, 7), Fraction(2, 3)) - Fraction(3, 14) - >>> Fraction('314') - Fraction(314, 1) - >>> Fraction('-35/4') - Fraction(-35, 4) - >>> Fraction('3.1415') # conversion from numeric string - Fraction(6283, 2000) - >>> Fraction('-47e-2') # string may include a decimal exponent - Fraction(-47, 100) - >>> Fraction(1.47) # direct construction from float (exact conversion) - Fraction(6620291452234629, 4503599627370496) - >>> Fraction(2.25) - Fraction(9, 4) - >>> Fraction(Decimal('1.47')) - Fraction(147, 100) - - """ - self = super(Fraction, cls).__new__(cls) - - if denominator is None: - if type(numerator) is int: - self._numerator = numerator - self._denominator = 1 - return self - - elif isinstance(numerator, numbers.Rational): - self._numerator = numerator.numerator - self._denominator = numerator.denominator - return self - - elif (isinstance(numerator, float) or - (not isinstance(numerator, type) and - hasattr(numerator, 'as_integer_ratio'))): - # Exact conversion - self._numerator, self._denominator = numerator.as_integer_ratio() - return self - - elif isinstance(numerator, str): - # Handle construction from strings. - m = _RATIONAL_FORMAT.match(numerator) - if m is None: - raise ValueError('Invalid literal for Fraction: %r' % - numerator) - numerator = int(m.group('num') or '0') - denom = m.group('denom') - if denom: - denominator = int(denom) - else: - denominator = 1 - decimal = m.group('decimal') - if decimal: - decimal = decimal.replace('_', '') - scale = 10**len(decimal) - numerator = numerator * scale + int(decimal) - denominator *= scale - exp = m.group('exp') - if exp: - exp = int(exp) - if exp >= 0: - numerator *= 10**exp - else: - denominator *= 10**-exp - if m.group('sign') == '-': - numerator = -numerator - - else: - raise TypeError("argument should be a string or a Rational " - "instance or have the as_integer_ratio() method") - - elif type(numerator) is int is type(denominator): - pass # *very* normal case - - elif (isinstance(numerator, numbers.Rational) and - isinstance(denominator, numbers.Rational)): - numerator, denominator = ( - numerator.numerator * denominator.denominator, - denominator.numerator * numerator.denominator - ) - else: - raise TypeError("both arguments should be " - "Rational instances") - - if denominator == 0: - raise ZeroDivisionError('Fraction(%s, 0)' % numerator) - g = math.gcd(numerator, denominator) - if denominator < 0: - g = -g - numerator //= g - denominator //= g - self._numerator = numerator - self._denominator = denominator - return self - - @classmethod - def from_number(cls, number): - """Converts a finite real number to a rational number, exactly. - - Beware that Fraction.from_number(0.3) != Fraction(3, 10). - - """ - if type(number) is int: - return cls._from_coprime_ints(number, 1) - - elif isinstance(number, numbers.Rational): - return cls._from_coprime_ints(number.numerator, number.denominator) - - elif (isinstance(number, float) or - (not isinstance(number, type) and - hasattr(number, 'as_integer_ratio'))): - return cls._from_coprime_ints(*number.as_integer_ratio()) - - else: - raise TypeError("argument should be a Rational instance or " - "have the as_integer_ratio() method") - - @classmethod - def from_float(cls, f): - """Converts a finite float to a rational number, exactly. - - Beware that Fraction.from_float(0.3) != Fraction(3, 10). - - """ - if isinstance(f, numbers.Integral): - return cls(f) - elif not isinstance(f, float): - raise TypeError("%s.from_float() only takes floats, not %r (%s)" % - (cls.__name__, f, type(f).__name__)) - return cls._from_coprime_ints(*f.as_integer_ratio()) - - @classmethod - def from_decimal(cls, dec): - """Converts a finite Decimal instance to a rational number, exactly.""" - from decimal import Decimal - if isinstance(dec, numbers.Integral): - dec = Decimal(int(dec)) - elif not isinstance(dec, Decimal): - raise TypeError( - "%s.from_decimal() only takes Decimals, not %r (%s)" % - (cls.__name__, dec, type(dec).__name__)) - return cls._from_coprime_ints(*dec.as_integer_ratio()) - - @classmethod - def _from_coprime_ints(cls, numerator, denominator, /): - """Convert a pair of ints to a rational number, for internal use. - - The ratio of integers should be in lowest terms and the denominator - should be positive. - """ - obj = super(Fraction, cls).__new__(cls) - obj._numerator = numerator - obj._denominator = denominator - return obj - - def is_integer(self): - """Return True if the Fraction is an integer.""" - return self._denominator == 1 - - def as_integer_ratio(self): - """Return a pair of integers, whose ratio is equal to the original Fraction. - - The ratio is in lowest terms and has a positive denominator. - """ - return (self._numerator, self._denominator) - - def limit_denominator(self, max_denominator=1000000): - """Closest Fraction to self with denominator at most max_denominator. - - >>> Fraction('3.141592653589793').limit_denominator(10) - Fraction(22, 7) - >>> Fraction('3.141592653589793').limit_denominator(100) - Fraction(311, 99) - >>> Fraction(4321, 8765).limit_denominator(10000) - Fraction(4321, 8765) - - """ - # Algorithm notes: For any real number x, define a *best upper - # approximation* to x to be a rational number p/q such that: - # - # (1) p/q >= x, and - # (2) if p/q > r/s >= x then s > q, for any rational r/s. - # - # Define *best lower approximation* similarly. Then it can be - # proved that a rational number is a best upper or lower - # approximation to x if, and only if, it is a convergent or - # semiconvergent of the (unique shortest) continued fraction - # associated to x. - # - # To find a best rational approximation with denominator <= M, - # we find the best upper and lower approximations with - # denominator <= M and take whichever of these is closer to x. - # In the event of a tie, the bound with smaller denominator is - # chosen. If both denominators are equal (which can happen - # only when max_denominator == 1 and self is midway between - # two integers) the lower bound---i.e., the floor of self, is - # taken. - - if max_denominator < 1: - raise ValueError("max_denominator should be at least 1") - if self._denominator <= max_denominator: - return Fraction(self) - - p0, q0, p1, q1 = 0, 1, 1, 0 - n, d = self._numerator, self._denominator - while True: - a = n//d - q2 = q0+a*q1 - if q2 > max_denominator: - break - p0, q0, p1, q1 = p1, q1, p0+a*p1, q2 - n, d = d, n-a*d - k = (max_denominator-q0)//q1 - - # Determine which of the candidates (p0+k*p1)/(q0+k*q1) and p1/q1 is - # closer to self. The distance between them is 1/(q1*(q0+k*q1)), while - # the distance from p1/q1 to self is d/(q1*self._denominator). So we - # need to compare 2*(q0+k*q1) with self._denominator/d. - if 2*d*(q0+k*q1) <= self._denominator: - return Fraction._from_coprime_ints(p1, q1) - else: - return Fraction._from_coprime_ints(p0+k*p1, q0+k*q1) - - @property - def numerator(a): - return a._numerator - - @property - def denominator(a): - return a._denominator - - def __repr__(self): - """repr(self)""" - return '%s(%s, %s)' % (self.__class__.__name__, - self._numerator, self._denominator) - - def __str__(self): - """str(self)""" - if self._denominator == 1: - return str(self._numerator) - else: - return '%s/%s' % (self._numerator, self._denominator) - - def _format_general(self, match): - """Helper method for __format__. - - Handles fill, alignment, signs, and thousands separators in the - case of no presentation type. - """ - # Validate and parse the format specifier. - fill = match["fill"] or " " - align = match["align"] or ">" - pos_sign = "" if match["sign"] == "-" else match["sign"] - alternate_form = bool(match["alt"]) - minimumwidth = int(match["minimumwidth"] or "0") - thousands_sep = match["thousands_sep"] or '' - - # Determine the body and sign representation. - n, d = self._numerator, self._denominator - if d > 1 or alternate_form: - body = f"{abs(n):{thousands_sep}}/{d:{thousands_sep}}" - else: - body = f"{abs(n):{thousands_sep}}" - sign = '-' if n < 0 else pos_sign - - # Pad with fill character if necessary and return. - padding = fill * (minimumwidth - len(sign) - len(body)) - if align == ">": - return padding + sign + body - elif align == "<": - return sign + body + padding - elif align == "^": - half = len(padding) // 2 - return padding[:half] + sign + body + padding[half:] - else: # align == "=" - return sign + padding + body - - def _format_float_style(self, match): - """Helper method for __format__; handles float presentation types.""" - fill = match["fill"] or " " - align = match["align"] or ">" - pos_sign = "" if match["sign"] == "-" else match["sign"] - no_neg_zero = bool(match["no_neg_zero"]) - alternate_form = bool(match["alt"]) - zeropad = bool(match["zeropad"]) - minimumwidth = int(match["minimumwidth"] or "0") - thousands_sep = match["thousands_sep"] - precision = int(match["precision"] or "6") - frac_sep = match["frac_separators"] or "" - presentation_type = match["presentation_type"] - trim_zeros = presentation_type in "gG" and not alternate_form - trim_point = not alternate_form - exponent_indicator = "E" if presentation_type in "EFG" else "e" - - if align == '=' and fill == '0': - zeropad = True - - # Round to get the digits we need, figure out where to place the point, - # and decide whether to use scientific notation. 'point_pos' is the - # relative to the _end_ of the digit string: that is, it's the number - # of digits that should follow the point. - if presentation_type in "fF%": - exponent = -precision - if presentation_type == "%": - exponent -= 2 - negative, significand = _round_to_exponent( - self._numerator, self._denominator, exponent, no_neg_zero) - scientific = False - point_pos = precision - else: # presentation_type in "eEgG" - figures = ( - max(precision, 1) - if presentation_type in "gG" - else precision + 1 - ) - negative, significand, exponent = _round_to_figures( - self._numerator, self._denominator, figures) - scientific = ( - presentation_type in "eE" - or exponent > 0 - or exponent + figures <= -4 - ) - point_pos = figures - 1 if scientific else -exponent - - # Get the suffix - the part following the digits, if any. - if presentation_type == "%": - suffix = "%" - elif scientific: - suffix = f"{exponent_indicator}{exponent + point_pos:+03d}" - else: - suffix = "" - - # String of output digits, padded sufficiently with zeros on the left - # so that we'll have at least one digit before the decimal point. - digits = f"{significand:0{point_pos + 1}d}" - - # Before padding, the output has the form f"{sign}{leading}{trailing}", - # where `leading` includes thousands separators if necessary and - # `trailing` includes the decimal separator where appropriate. - sign = "-" if negative else pos_sign - leading = digits[: len(digits) - point_pos] - frac_part = digits[len(digits) - point_pos :] - if trim_zeros: - frac_part = frac_part.rstrip("0") - separator = "" if trim_point and not frac_part else "." - if frac_sep: - frac_part = frac_sep.join(frac_part[pos:pos + 3] - for pos in range(0, len(frac_part), 3)) - trailing = separator + frac_part + suffix - - # Do zero padding if required. - if zeropad: - min_leading = minimumwidth - len(sign) - len(trailing) - # When adding thousands separators, they'll be added to the - # zero-padded portion too, so we need to compensate. - leading = leading.zfill( - 3 * min_leading // 4 + 1 if thousands_sep else min_leading - ) - - # Insert thousands separators if required. - if thousands_sep: - first_pos = 1 + (len(leading) - 1) % 3 - leading = leading[:first_pos] + "".join( - thousands_sep + leading[pos : pos + 3] - for pos in range(first_pos, len(leading), 3) - ) - - # We now have a sign and a body. Pad with fill character if necessary - # and return. - body = leading + trailing - padding = fill * (minimumwidth - len(sign) - len(body)) - if align == ">": - return padding + sign + body - elif align == "<": - return sign + body + padding - elif align == "^": - half = len(padding) // 2 - return padding[:half] + sign + body + padding[half:] - else: # align == "=" - return sign + padding + body - - def __format__(self, format_spec, /): - """Format this fraction according to the given format specification.""" - - if match := _GENERAL_FORMAT_SPECIFICATION_MATCHER(format_spec): - return self._format_general(match) - - if match := _FLOAT_FORMAT_SPECIFICATION_MATCHER(format_spec): - # Refuse the temptation to guess if both alignment _and_ - # zero padding are specified. - if match["align"] is None or match["zeropad"] is None: - return self._format_float_style(match) - - raise ValueError( - f"Invalid format specifier {format_spec!r} " - f"for object of type {type(self).__name__!r}" - ) - - def _operator_fallbacks(monomorphic_operator, fallback_operator, - handle_complex=True): - """Generates forward and reverse operators given a purely-rational - operator and a function from the operator module. - - Use this like: - __op__, __rop__ = _operator_fallbacks(just_rational_op, operator.op) - - In general, we want to implement the arithmetic operations so - that mixed-mode operations either call an implementation whose - author knew about the types of both arguments, or convert both - to the nearest built in type and do the operation there. In - Fraction, that means that we define __add__ and __radd__ as: - - def __add__(self, other): - # Both types have numerators/denominator attributes, - # so do the operation directly - if isinstance(other, (int, Fraction)): - return Fraction(self.numerator * other.denominator + - other.numerator * self.denominator, - self.denominator * other.denominator) - # float and complex don't have those operations, but we - # know about those types, so special case them. - elif isinstance(other, float): - return float(self) + other - elif isinstance(other, complex): - return complex(self) + other - # Let the other type take over. - return NotImplemented - - def __radd__(self, other): - # radd handles more types than add because there's - # nothing left to fall back to. - if isinstance(other, numbers.Rational): - return Fraction(self.numerator * other.denominator + - other.numerator * self.denominator, - self.denominator * other.denominator) - elif isinstance(other, Real): - return float(other) + float(self) - elif isinstance(other, Complex): - return complex(other) + complex(self) - return NotImplemented - - - There are 5 different cases for a mixed-type addition on - Fraction. I'll refer to all of the above code that doesn't - refer to Fraction, float, or complex as "boilerplate". 'r' - will be an instance of Fraction, which is a subtype of - Rational (r : Fraction <: Rational), and b : B <: - Complex. The first three involve 'r + b': - - 1. If B <: Fraction, int, float, or complex, we handle - that specially, and all is well. - 2. If Fraction falls back to the boilerplate code, and it - were to return a value from __add__, we'd miss the - possibility that B defines a more intelligent __radd__, - so the boilerplate should return NotImplemented from - __add__. In particular, we don't handle Rational - here, even though we could get an exact answer, in case - the other type wants to do something special. - 3. If B <: Fraction, Python tries B.__radd__ before - Fraction.__add__. This is ok, because it was - implemented with knowledge of Fraction, so it can - handle those instances before delegating to Real or - Complex. - - The next two situations describe 'b + r'. We assume that b - didn't know about Fraction in its implementation, and that it - uses similar boilerplate code: - - 4. If B <: Rational, then __radd_ converts both to the - builtin rational type (hey look, that's us) and - proceeds. - 5. Otherwise, __radd__ tries to find the nearest common - base ABC, and fall back to its builtin type. Since this - class doesn't subclass a concrete type, there's no - implementation to fall back to, so we need to try as - hard as possible to return an actual value, or the user - will get a TypeError. - - """ - def forward(a, b): - if isinstance(b, Fraction): - return monomorphic_operator(a, b) - elif isinstance(b, int): - return monomorphic_operator(a, Fraction(b)) - elif isinstance(b, float): - return fallback_operator(float(a), b) - elif handle_complex and isinstance(b, complex): - return fallback_operator(float(a), b) - else: - return NotImplemented - forward.__name__ = '__' + fallback_operator.__name__ + '__' - forward.__doc__ = monomorphic_operator.__doc__ - - def reverse(b, a): - if isinstance(a, numbers.Rational): - # Includes ints. - return monomorphic_operator(Fraction(a), b) - elif isinstance(a, numbers.Real): - return fallback_operator(float(a), float(b)) - elif handle_complex and isinstance(a, numbers.Complex): - return fallback_operator(complex(a), float(b)) - else: - return NotImplemented - reverse.__name__ = '__r' + fallback_operator.__name__ + '__' - reverse.__doc__ = monomorphic_operator.__doc__ - - return forward, reverse - - # Rational arithmetic algorithms: Knuth, TAOCP, Volume 2, 4.5.1. - # - # Assume input fractions a and b are normalized. - # - # 1) Consider addition/subtraction. - # - # Let g = gcd(da, db). Then - # - # na nb na*db ± nb*da - # a ± b == -- ± -- == ------------- == - # da db da*db - # - # na*(db//g) ± nb*(da//g) t - # == ----------------------- == - - # (da*db)//g d - # - # Now, if g > 1, we're working with smaller integers. - # - # Note, that t, (da//g) and (db//g) are pairwise coprime. - # - # Indeed, (da//g) and (db//g) share no common factors (they were - # removed) and da is coprime with na (since input fractions are - # normalized), hence (da//g) and na are coprime. By symmetry, - # (db//g) and nb are coprime too. Then, - # - # gcd(t, da//g) == gcd(na*(db//g), da//g) == 1 - # gcd(t, db//g) == gcd(nb*(da//g), db//g) == 1 - # - # Above allows us optimize reduction of the result to lowest - # terms. Indeed, - # - # g2 = gcd(t, d) == gcd(t, (da//g)*(db//g)*g) == gcd(t, g) - # - # t//g2 t//g2 - # a ± b == ----------------------- == ---------------- - # (da//g)*(db//g)*(g//g2) (da//g)*(db//g2) - # - # is a normalized fraction. This is useful because the unnormalized - # denominator d could be much larger than g. - # - # We should special-case g == 1 (and g2 == 1), since 60.8% of - # randomly-chosen integers are coprime: - # https://en.wikipedia.org/wiki/Coprime_integers#Probability_of_coprimality - # Note, that g2 == 1 always for fractions, obtained from floats: here - # g is a power of 2 and the unnormalized numerator t is an odd integer. - # - # 2) Consider multiplication - # - # Let g1 = gcd(na, db) and g2 = gcd(nb, da), then - # - # na*nb na*nb (na//g1)*(nb//g2) - # a*b == ----- == ----- == ----------------- - # da*db db*da (db//g1)*(da//g2) - # - # Note, that after divisions we're multiplying smaller integers. - # - # Also, the resulting fraction is normalized, because each of - # two factors in the numerator is coprime to each of the two factors - # in the denominator. - # - # Indeed, pick (na//g1). It's coprime with (da//g2), because input - # fractions are normalized. It's also coprime with (db//g1), because - # common factors are removed by g1 == gcd(na, db). - # - # As for addition/subtraction, we should special-case g1 == 1 - # and g2 == 1 for same reason. That happens also for multiplying - # rationals, obtained from floats. - - def _add(a, b): - """a + b""" - na, da = a._numerator, a._denominator - nb, db = b._numerator, b._denominator - g = math.gcd(da, db) - if g == 1: - return Fraction._from_coprime_ints(na * db + da * nb, da * db) - s = da // g - t = na * (db // g) + nb * s - g2 = math.gcd(t, g) - if g2 == 1: - return Fraction._from_coprime_ints(t, s * db) - return Fraction._from_coprime_ints(t // g2, s * (db // g2)) - - __add__, __radd__ = _operator_fallbacks(_add, operator.add) - - def _sub(a, b): - """a - b""" - na, da = a._numerator, a._denominator - nb, db = b._numerator, b._denominator - g = math.gcd(da, db) - if g == 1: - return Fraction._from_coprime_ints(na * db - da * nb, da * db) - s = da // g - t = na * (db // g) - nb * s - g2 = math.gcd(t, g) - if g2 == 1: - return Fraction._from_coprime_ints(t, s * db) - return Fraction._from_coprime_ints(t // g2, s * (db // g2)) - - __sub__, __rsub__ = _operator_fallbacks(_sub, operator.sub) - - def _mul(a, b): - """a * b""" - na, da = a._numerator, a._denominator - nb, db = b._numerator, b._denominator - g1 = math.gcd(na, db) - if g1 > 1: - na //= g1 - db //= g1 - g2 = math.gcd(nb, da) - if g2 > 1: - nb //= g2 - da //= g2 - return Fraction._from_coprime_ints(na * nb, db * da) - - __mul__, __rmul__ = _operator_fallbacks(_mul, operator.mul) - - def _div(a, b): - """a / b""" - # Same as _mul(), with inversed b. - nb, db = b._numerator, b._denominator - if nb == 0: - raise ZeroDivisionError('Fraction(%s, 0)' % db) - na, da = a._numerator, a._denominator - g1 = math.gcd(na, nb) - if g1 > 1: - na //= g1 - nb //= g1 - g2 = math.gcd(db, da) - if g2 > 1: - da //= g2 - db //= g2 - n, d = na * db, nb * da - if d < 0: - n, d = -n, -d - return Fraction._from_coprime_ints(n, d) - - __truediv__, __rtruediv__ = _operator_fallbacks(_div, operator.truediv) - - def _floordiv(a, b): - """a // b""" - return (a.numerator * b.denominator) // (a.denominator * b.numerator) - - __floordiv__, __rfloordiv__ = _operator_fallbacks(_floordiv, operator.floordiv, False) - - def _divmod(a, b): - """(a // b, a % b)""" - da, db = a.denominator, b.denominator - div, n_mod = divmod(a.numerator * db, da * b.numerator) - return div, Fraction(n_mod, da * db) - - __divmod__, __rdivmod__ = _operator_fallbacks(_divmod, divmod, False) - - def _mod(a, b): - """a % b""" - da, db = a.denominator, b.denominator - return Fraction((a.numerator * db) % (b.numerator * da), da * db) - - __mod__, __rmod__ = _operator_fallbacks(_mod, operator.mod, False) - - def __pow__(a, b, modulo=None): - """a ** b - - If b is not an integer, the result will be a float or complex - since roots are generally irrational. If b is an integer, the - result will be rational. - - """ - if modulo is not None: - return NotImplemented - if isinstance(b, numbers.Rational): - if b.denominator == 1: - power = b.numerator - if power >= 0: - return Fraction._from_coprime_ints(a._numerator ** power, - a._denominator ** power) - elif a._numerator > 0: - return Fraction._from_coprime_ints(a._denominator ** -power, - a._numerator ** -power) - elif a._numerator == 0: - raise ZeroDivisionError('Fraction(%s, 0)' % - a._denominator ** -power) - else: - return Fraction._from_coprime_ints((-a._denominator) ** -power, - (-a._numerator) ** -power) - else: - # A fractional power will generally produce an - # irrational number. - return float(a) ** float(b) - elif isinstance(b, (float, complex)): - return float(a) ** b - else: - return NotImplemented - - def __rpow__(b, a, modulo=None): - """a ** b""" - if modulo is not None: - return NotImplemented - if b._denominator == 1 and b._numerator >= 0: - # If a is an int, keep it that way if possible. - return a ** b._numerator - - if isinstance(a, numbers.Rational): - return Fraction(a.numerator, a.denominator) ** b - - if b._denominator == 1: - return a ** b._numerator - - return a ** float(b) - - def __pos__(a): - """+a: Coerces a subclass instance to Fraction""" - return Fraction._from_coprime_ints(a._numerator, a._denominator) - - def __neg__(a): - """-a""" - return Fraction._from_coprime_ints(-a._numerator, a._denominator) - - def __abs__(a): - """abs(a)""" - return Fraction._from_coprime_ints(abs(a._numerator), a._denominator) - - def __int__(a, _index=operator.index): - """int(a)""" - if a._numerator < 0: - return _index(-(-a._numerator // a._denominator)) - else: - return _index(a._numerator // a._denominator) - - def __trunc__(a): - """math.trunc(a)""" - if a._numerator < 0: - return -(-a._numerator // a._denominator) - else: - return a._numerator // a._denominator - - def __floor__(a): - """math.floor(a)""" - return a._numerator // a._denominator - - def __ceil__(a): - """math.ceil(a)""" - # The negations cleverly convince floordiv to return the ceiling. - return -(-a._numerator // a._denominator) - - def __round__(self, ndigits=None): - """round(self, ndigits) - - Rounds half toward even. - """ - if ndigits is None: - d = self._denominator - floor, remainder = divmod(self._numerator, d) - if remainder * 2 < d: - return floor - elif remainder * 2 > d: - return floor + 1 - # Deal with the half case: - elif floor % 2 == 0: - return floor - else: - return floor + 1 - shift = 10**abs(ndigits) - # See _operator_fallbacks.forward to check that the results of - # these operations will always be Fraction and therefore have - # round(). - if ndigits > 0: - return Fraction(round(self * shift), shift) - else: - return Fraction(round(self / shift) * shift) - - def __hash__(self): - """hash(self)""" - return _hash_algorithm(self._numerator, self._denominator) - - def __eq__(a, b): - """a == b""" - if type(b) is int: - return a._numerator == b and a._denominator == 1 - if isinstance(b, numbers.Rational): - return (a._numerator == b.numerator and - a._denominator == b.denominator) - if isinstance(b, numbers.Complex) and b.imag == 0: - b = b.real - if isinstance(b, float): - if math.isnan(b) or math.isinf(b): - # comparisons with an infinity or nan should behave in - # the same way for any finite a, so treat a as zero. - return 0.0 == b - else: - return a == a.from_float(b) - else: - # Since a doesn't know how to compare with b, let's give b - # a chance to compare itself with a. - return NotImplemented - - def _richcmp(self, other, op): - """Helper for comparison operators, for internal use only. - - Implement comparison between a Rational instance `self`, and - either another Rational instance or a float `other`. If - `other` is not a Rational instance or a float, return - NotImplemented. `op` should be one of the six standard - comparison operators. - - """ - # convert other to a Rational instance where reasonable. - if isinstance(other, numbers.Rational): - return op(self._numerator * other.denominator, - self._denominator * other.numerator) - if isinstance(other, float): - if math.isnan(other) or math.isinf(other): - return op(0.0, other) - else: - return op(self, self.from_float(other)) - else: - return NotImplemented - - def __lt__(a, b): - """a < b""" - return a._richcmp(b, operator.lt) - - def __gt__(a, b): - """a > b""" - return a._richcmp(b, operator.gt) - - def __le__(a, b): - """a <= b""" - return a._richcmp(b, operator.le) - - def __ge__(a, b): - """a >= b""" - return a._richcmp(b, operator.ge) - - def __bool__(a): - """a != 0""" - # bpo-39274: Use bool() because (a._numerator != 0) can return an - # object which is not a bool. - return bool(a._numerator) - - # support for pickling, copy, and deepcopy - - def __reduce__(self): - return (self.__class__, (self._numerator, self._denominator)) - - def __copy__(self): - if type(self) == Fraction: - return self # I'm immutable; therefore I am my own clone - return self.__class__(self._numerator, self._denominator) - - def __deepcopy__(self, memo): - if type(self) == Fraction: - return self # My components are also immutable - return self.__class__(self._numerator, self._denominator) diff --git a/Python314_4_x86_Template/Lib/ftplib.py b/Python314_4_x86_Template/Lib/ftplib.py deleted file mode 100644 index 50771e8c1..000000000 --- a/Python314_4_x86_Template/Lib/ftplib.py +++ /dev/null @@ -1,966 +0,0 @@ -"""An FTP client class and some helper functions. - -Based on RFC 959: File Transfer Protocol (FTP), by J. Postel and J. Reynolds - -Example: - ->>> from ftplib import FTP ->>> ftp = FTP('ftp.python.org') # connect to host, default port ->>> ftp.login() # default, i.e.: user anonymous, passwd anonymous@ -'230 Guest login ok, access restrictions apply.' ->>> ftp.retrlines('LIST') # list directory contents -total 9 -drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . -drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. -drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin -drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc -d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming -drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib -drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub -drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr --rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg -'226 Transfer complete.' ->>> ftp.quit() -'221 Goodbye.' ->>> - -A nice test that reveals some of the network dialogue would be: -python ftplib.py -d localhost -l -p -l -""" - -# -# Changes and improvements suggested by Steve Majewski. -# Modified by Jack to work on the mac. -# Modified by Siebren to support docstrings and PASV. -# Modified by Phil Schwartz to add storbinary and storlines callbacks. -# Modified by Giampaolo Rodola' to add TLS support. -# - -import sys -import socket -from socket import _GLOBAL_DEFAULT_TIMEOUT - -__all__ = ["FTP", "error_reply", "error_temp", "error_perm", "error_proto", - "all_errors"] - -# Magic number from <socket.h> -MSG_OOB = 0x1 # Process data out of band - - -# The standard FTP server control port -FTP_PORT = 21 -# The sizehint parameter passed to readline() calls -MAXLINE = 8192 - - -# Exception raised when an error or invalid response is received -class Error(Exception): pass -class error_reply(Error): pass # unexpected [123]xx reply -class error_temp(Error): pass # 4xx errors -class error_perm(Error): pass # 5xx errors -class error_proto(Error): pass # response does not begin with [1-5] - - -# All exceptions (hopefully) that may be raised here and that aren't -# (always) programming errors on our side -all_errors = (Error, OSError, EOFError) - - -# Line terminators (we always output CRLF, but accept any of CRLF, CR, LF) -CRLF = '\r\n' -B_CRLF = b'\r\n' - -# The class itself -class FTP: - '''An FTP client class. - - To create a connection, call the class using these arguments: - host, user, passwd, acct, timeout, source_address, encoding - - The first four arguments are all strings, and have default value ''. - The parameter ´timeout´ must be numeric and defaults to None if not - passed, meaning that no timeout will be set on any ftp socket(s). - If a timeout is passed, then this is now the default timeout for all ftp - socket operations for this instance. - The last parameter is the encoding of filenames, which defaults to utf-8. - - Then use self.connect() with optional host and port argument. - - To download a file, use ftp.retrlines('RETR ' + filename), - or ftp.retrbinary() with slightly different arguments. - To upload a file, use ftp.storlines() or ftp.storbinary(), - which have an open file as argument (see their definitions - below for details). - The download/upload functions first issue appropriate TYPE - and PORT or PASV commands. - ''' - - debugging = 0 - host = '' - port = FTP_PORT - maxline = MAXLINE - sock = None - file = None - welcome = None - passiveserver = True - # Disables https://bugs.python.org/issue43285 security if set to True. - trust_server_pasv_ipv4_address = False - - def __init__(self, host='', user='', passwd='', acct='', - timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None, *, - encoding='utf-8'): - """Initialization method (called by class instantiation). - Initialize host to localhost, port to standard ftp port. - Optional arguments are host (for connect()), - and user, passwd, acct (for login()). - """ - self.encoding = encoding - self.source_address = source_address - self.timeout = timeout - if host: - self.connect(host) - if user: - self.login(user, passwd, acct) - - def __enter__(self): - return self - - # Context management protocol: try to quit() if active - def __exit__(self, *args): - if self.sock is not None: - try: - self.quit() - except (OSError, EOFError): - pass - finally: - if self.sock is not None: - self.close() - - def connect(self, host='', port=0, timeout=-999, source_address=None): - '''Connect to host. Arguments are: - - host: hostname to connect to (string, default previous host) - - port: port to connect to (integer, default previous port) - - timeout: the timeout to set against the ftp socket(s) - - source_address: a 2-tuple (host, port) for the socket to bind - to as its source address before connecting. - ''' - if host != '': - self.host = host - if port > 0: - self.port = port - if timeout != -999: - self.timeout = timeout - if self.timeout is not None and not self.timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') - if source_address is not None: - self.source_address = source_address - sys.audit("ftplib.connect", self, self.host, self.port) - self.sock = socket.create_connection((self.host, self.port), self.timeout, - source_address=self.source_address) - self.af = self.sock.family - self.file = self.sock.makefile('r', encoding=self.encoding) - self.welcome = self.getresp() - return self.welcome - - def getwelcome(self): - '''Get the welcome message from the server. - (this is read and squirreled away by connect())''' - if self.debugging: - print('*welcome*', self.sanitize(self.welcome)) - return self.welcome - - def set_debuglevel(self, level): - '''Set the debugging level. - The required argument level means: - 0: no debugging output (default) - 1: print commands and responses but not body text etc. - 2: also print raw lines read and sent before stripping CR/LF''' - self.debugging = level - debug = set_debuglevel - - def set_pasv(self, val): - '''Use passive or active mode for data transfers. - With a false argument, use the normal PORT mode, - With a true argument, use the PASV command.''' - self.passiveserver = val - - # Internal: "sanitize" a string for printing - def sanitize(self, s): - if s[:5] in {'pass ', 'PASS '}: - i = len(s.rstrip('\r\n')) - s = s[:5] + '*'*(i-5) + s[i:] - return repr(s) - - # Internal: send one line to the server, appending CRLF - def putline(self, line): - if '\r' in line or '\n' in line: - raise ValueError('an illegal newline character should not be contained') - sys.audit("ftplib.sendcmd", self, line) - line = line + CRLF - if self.debugging > 1: - print('*put*', self.sanitize(line)) - self.sock.sendall(line.encode(self.encoding)) - - # Internal: send one command to the server (through putline()) - def putcmd(self, line): - if self.debugging: print('*cmd*', self.sanitize(line)) - self.putline(line) - - # Internal: return one line from the server, stripping CRLF. - # Raise EOFError if the connection is closed - def getline(self): - line = self.file.readline(self.maxline + 1) - if len(line) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if self.debugging > 1: - print('*get*', self.sanitize(line)) - if not line: - raise EOFError - if line[-2:] == CRLF: - line = line[:-2] - elif line[-1:] in CRLF: - line = line[:-1] - return line - - # Internal: get a response from the server, which may possibly - # consist of multiple lines. Return a single string with no - # trailing CRLF. If the response consists of multiple lines, - # these are separated by '\n' characters in the string - def getmultiline(self): - line = self.getline() - if line[3:4] == '-': - code = line[:3] - while 1: - nextline = self.getline() - line = line + ('\n' + nextline) - if nextline[:3] == code and \ - nextline[3:4] != '-': - break - return line - - # Internal: get a response from the server. - # Raise various errors if the response indicates an error - def getresp(self): - resp = self.getmultiline() - if self.debugging: - print('*resp*', self.sanitize(resp)) - self.lastresp = resp[:3] - c = resp[:1] - if c in {'1', '2', '3'}: - return resp - if c == '4': - raise error_temp(resp) - if c == '5': - raise error_perm(resp) - raise error_proto(resp) - - def voidresp(self): - """Expect a response beginning with '2'.""" - resp = self.getresp() - if resp[:1] != '2': - raise error_reply(resp) - return resp - - def abort(self): - '''Abort a file transfer. Uses out-of-band data. - This does not follow the procedure from the RFC to send Telnet - IP and Synch; that doesn't seem to work with the servers I've - tried. Instead, just send the ABOR command as OOB data.''' - line = b'ABOR' + B_CRLF - if self.debugging > 1: - print('*put urgent*', self.sanitize(line)) - self.sock.sendall(line, MSG_OOB) - resp = self.getmultiline() - if resp[:3] not in {'426', '225', '226'}: - raise error_proto(resp) - return resp - - def sendcmd(self, cmd): - '''Send a command and return the response.''' - self.putcmd(cmd) - return self.getresp() - - def voidcmd(self, cmd): - """Send a command and expect a response beginning with '2'.""" - self.putcmd(cmd) - return self.voidresp() - - def sendport(self, host, port): - '''Send a PORT command with the current host and the given - port number. - ''' - hbytes = host.split('.') - pbytes = [repr(port//256), repr(port%256)] - bytes = hbytes + pbytes - cmd = 'PORT ' + ','.join(bytes) - return self.voidcmd(cmd) - - def sendeprt(self, host, port): - '''Send an EPRT command with the current host and the given port number.''' - af = 0 - if self.af == socket.AF_INET: - af = 1 - if self.af == socket.AF_INET6: - af = 2 - if af == 0: - raise error_proto('unsupported address family') - fields = ['', repr(af), host, repr(port), ''] - cmd = 'EPRT ' + '|'.join(fields) - return self.voidcmd(cmd) - - def makeport(self): - '''Create a new socket and send a PORT command for it.''' - sock = socket.create_server(("", 0), family=self.af, backlog=1) - port = sock.getsockname()[1] # Get proper port - host = self.sock.getsockname()[0] # Get proper host - if self.af == socket.AF_INET: - resp = self.sendport(host, port) - else: - resp = self.sendeprt(host, port) - if self.timeout is not _GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(self.timeout) - return sock - - def makepasv(self): - """Internal: Does the PASV or EPSV handshake -> (address, port)""" - if self.af == socket.AF_INET: - untrusted_host, port = parse227(self.sendcmd('PASV')) - if self.trust_server_pasv_ipv4_address: - host = untrusted_host - else: - host = self.sock.getpeername()[0] - else: - host, port = parse229(self.sendcmd('EPSV'), self.sock.getpeername()) - return host, port - - def ntransfercmd(self, cmd, rest=None): - """Initiate a transfer over the data connection. - - If the transfer is active, send a port command and the - transfer command, and accept the connection. If the server is - passive, send a pasv command, connect to it, and start the - transfer command. Either way, return the socket for the - connection and the expected size of the transfer. The - expected size may be None if it could not be determined. - - Optional 'rest' argument can be a string that is sent as the - argument to a REST command. This is essentially a server - marker used to tell the server to skip over any data up to the - given marker. - """ - size = None - if self.passiveserver: - host, port = self.makepasv() - conn = socket.create_connection((host, port), self.timeout, - source_address=self.source_address) - try: - if rest is not None: - self.sendcmd("REST %s" % rest) - resp = self.sendcmd(cmd) - # Some servers apparently send a 200 reply to - # a LIST or STOR command, before the 150 reply - # (and way before the 226 reply). This seems to - # be in violation of the protocol (which only allows - # 1xx or error messages for LIST), so we just discard - # this response. - if resp[0] == '2': - resp = self.getresp() - if resp[0] != '1': - raise error_reply(resp) - except: - conn.close() - raise - else: - with self.makeport() as sock: - if rest is not None: - self.sendcmd("REST %s" % rest) - resp = self.sendcmd(cmd) - # See above. - if resp[0] == '2': - resp = self.getresp() - if resp[0] != '1': - raise error_reply(resp) - conn, sockaddr = sock.accept() - if self.timeout is not _GLOBAL_DEFAULT_TIMEOUT: - conn.settimeout(self.timeout) - if resp[:3] == '150': - # this is conditional in case we received a 125 - size = parse150(resp) - return conn, size - - def transfercmd(self, cmd, rest=None): - """Like ntransfercmd() but returns only the socket.""" - return self.ntransfercmd(cmd, rest)[0] - - def login(self, user = '', passwd = '', acct = ''): - '''Login, default anonymous.''' - if not user: - user = 'anonymous' - if not passwd: - passwd = '' - if not acct: - acct = '' - if user == 'anonymous' and passwd in {'', '-'}: - # If there is no anonymous ftp password specified - # then we'll just use anonymous@ - # We don't send any other thing because: - # - We want to remain anonymous - # - We want to stop SPAM - # - We don't want to let ftp sites to discriminate by the user, - # host or country. - passwd = passwd + 'anonymous@' - resp = self.sendcmd('USER ' + user) - if resp[0] == '3': - resp = self.sendcmd('PASS ' + passwd) - if resp[0] == '3': - resp = self.sendcmd('ACCT ' + acct) - if resp[0] != '2': - raise error_reply(resp) - return resp - - def retrbinary(self, cmd, callback, blocksize=8192, rest=None): - """Retrieve data in binary mode. A new port is created for you. - - Args: - cmd: A RETR command. - callback: A single parameter callable to be called on each - block of data read. - blocksize: The maximum number of bytes to read from the - socket at one time. [default: 8192] - rest: Passed to transfercmd(). [default: None] - - Returns: - The response code. - """ - self.voidcmd('TYPE I') - with self.transfercmd(cmd, rest) as conn: - while data := conn.recv(blocksize): - callback(data) - # shutdown ssl layer - if _SSLSocket is not None and isinstance(conn, _SSLSocket): - conn.unwrap() - return self.voidresp() - - def retrlines(self, cmd, callback = None): - """Retrieve data in line mode. A new port is created for you. - - Args: - cmd: A RETR, LIST, or NLST command. - callback: An optional single parameter callable that is called - for each line with the trailing CRLF stripped. - [default: print_line()] - - Returns: - The response code. - """ - if callback is None: - callback = print_line - resp = self.sendcmd('TYPE A') - with self.transfercmd(cmd) as conn, \ - conn.makefile('r', encoding=self.encoding) as fp: - while 1: - line = fp.readline(self.maxline + 1) - if len(line) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if self.debugging > 2: - print('*retr*', repr(line)) - if not line: - break - if line[-2:] == CRLF: - line = line[:-2] - elif line[-1:] == '\n': - line = line[:-1] - callback(line) - # shutdown ssl layer - if _SSLSocket is not None and isinstance(conn, _SSLSocket): - conn.unwrap() - return self.voidresp() - - def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): - """Store a file in binary mode. A new port is created for you. - - Args: - cmd: A STOR command. - fp: A file-like object with a read(num_bytes) method. - blocksize: The maximum data size to read from fp and send over - the connection at once. [default: 8192] - callback: An optional single parameter callable that is called on - each block of data after it is sent. [default: None] - rest: Passed to transfercmd(). [default: None] - - Returns: - The response code. - """ - self.voidcmd('TYPE I') - with self.transfercmd(cmd, rest) as conn: - while buf := fp.read(blocksize): - conn.sendall(buf) - if callback: - callback(buf) - # shutdown ssl layer - if _SSLSocket is not None and isinstance(conn, _SSLSocket): - conn.unwrap() - return self.voidresp() - - def storlines(self, cmd, fp, callback=None): - """Store a file in line mode. A new port is created for you. - - Args: - cmd: A STOR command. - fp: A file-like object with a readline() method. - callback: An optional single parameter callable that is called on - each line after it is sent. [default: None] - - Returns: - The response code. - """ - self.voidcmd('TYPE A') - with self.transfercmd(cmd) as conn: - while 1: - buf = fp.readline(self.maxline + 1) - if len(buf) > self.maxline: - raise Error("got more than %d bytes" % self.maxline) - if not buf: - break - if buf[-2:] != B_CRLF: - if buf[-1] in B_CRLF: buf = buf[:-1] - buf = buf + B_CRLF - conn.sendall(buf) - if callback: - callback(buf) - # shutdown ssl layer - if _SSLSocket is not None and isinstance(conn, _SSLSocket): - conn.unwrap() - return self.voidresp() - - def acct(self, password): - '''Send new account name.''' - cmd = 'ACCT ' + password - return self.voidcmd(cmd) - - def nlst(self, *args): - '''Return a list of files in a given directory (default the current).''' - cmd = 'NLST' - for arg in args: - cmd = cmd + (' ' + arg) - files = [] - self.retrlines(cmd, files.append) - return files - - def dir(self, *args): - '''List a directory in long form. - By default list current directory to stdout. - Optional last argument is callback function; all - non-empty arguments before it are concatenated to the - LIST command. (This *should* only be used for a pathname.)''' - cmd = 'LIST' - func = None - if args[-1:] and not isinstance(args[-1], str): - args, func = args[:-1], args[-1] - for arg in args: - if arg: - cmd = cmd + (' ' + arg) - self.retrlines(cmd, func) - - def mlsd(self, path="", facts=[]): - '''List a directory in a standardized format by using MLSD - command (RFC-3659). If path is omitted the current directory - is assumed. "facts" is a list of strings representing the type - of information desired (e.g. ["type", "size", "perm"]). - - Return a generator object yielding a tuple of two elements - for every file found in path. - First element is the file name, the second one is a dictionary - including a variable number of "facts" depending on the server - and whether "facts" argument has been provided. - ''' - if facts: - self.sendcmd("OPTS MLST " + ";".join(facts) + ";") - if path: - cmd = "MLSD %s" % path - else: - cmd = "MLSD" - lines = [] - self.retrlines(cmd, lines.append) - for line in lines: - facts_found, _, name = line.rstrip(CRLF).partition(' ') - entry = {} - for fact in facts_found[:-1].split(";"): - key, _, value = fact.partition("=") - entry[key.lower()] = value - yield (name, entry) - - def rename(self, fromname, toname): - '''Rename a file.''' - resp = self.sendcmd('RNFR ' + fromname) - if resp[0] != '3': - raise error_reply(resp) - return self.voidcmd('RNTO ' + toname) - - def delete(self, filename): - '''Delete a file.''' - resp = self.sendcmd('DELE ' + filename) - if resp[:3] in {'250', '200'}: - return resp - else: - raise error_reply(resp) - - def cwd(self, dirname): - '''Change to a directory.''' - if dirname == '..': - try: - return self.voidcmd('CDUP') - except error_perm as msg: - if msg.args[0][:3] != '500': - raise - elif dirname == '': - dirname = '.' # does nothing, but could return error - cmd = 'CWD ' + dirname - return self.voidcmd(cmd) - - def size(self, filename): - '''Retrieve the size of a file.''' - # The SIZE command is defined in RFC-3659 - resp = self.sendcmd('SIZE ' + filename) - if resp[:3] == '213': - s = resp[3:].strip() - return int(s) - - def mkd(self, dirname): - '''Make a directory, return its full pathname.''' - resp = self.voidcmd('MKD ' + dirname) - # fix around non-compliant implementations such as IIS shipped - # with Windows server 2003 - if not resp.startswith('257'): - return '' - return parse257(resp) - - def rmd(self, dirname): - '''Remove a directory.''' - return self.voidcmd('RMD ' + dirname) - - def pwd(self): - '''Return current working directory.''' - resp = self.voidcmd('PWD') - # fix around non-compliant implementations such as IIS shipped - # with Windows server 2003 - if not resp.startswith('257'): - return '' - return parse257(resp) - - def quit(self): - '''Quit, and close the connection.''' - resp = self.voidcmd('QUIT') - self.close() - return resp - - def close(self): - '''Close the connection without assuming anything about it.''' - try: - file = self.file - self.file = None - if file is not None: - file.close() - finally: - sock = self.sock - self.sock = None - if sock is not None: - sock.close() - -try: - import ssl -except ImportError: - _SSLSocket = None -else: - _SSLSocket = ssl.SSLSocket - - class FTP_TLS(FTP): - '''A FTP subclass which adds TLS support to FTP as described - in RFC-4217. - - Connect as usual to port 21 implicitly securing the FTP control - connection before authenticating. - - Securing the data connection requires user to explicitly ask - for it by calling prot_p() method. - - Usage example: - >>> from ftplib import FTP_TLS - >>> ftps = FTP_TLS('ftp.python.org') - >>> ftps.login() # login anonymously previously securing control channel - '230 Guest login ok, access restrictions apply.' - >>> ftps.prot_p() # switch to secure data connection - '200 Protection level set to P' - >>> ftps.retrlines('LIST') # list directory content securely - total 9 - drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . - drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. - drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin - drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc - d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming - drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib - drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub - drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr - -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg - '226 Transfer complete.' - >>> ftps.quit() - '221 Goodbye.' - >>> - ''' - - def __init__(self, host='', user='', passwd='', acct='', - *, context=None, timeout=_GLOBAL_DEFAULT_TIMEOUT, - source_address=None, encoding='utf-8'): - if context is None: - context = ssl._create_stdlib_context() - self.context = context - self._prot_p = False - super().__init__(host, user, passwd, acct, - timeout, source_address, encoding=encoding) - - def login(self, user='', passwd='', acct='', secure=True): - if secure and not isinstance(self.sock, ssl.SSLSocket): - self.auth() - return super().login(user, passwd, acct) - - def auth(self): - '''Set up secure control connection by using TLS/SSL.''' - if isinstance(self.sock, ssl.SSLSocket): - raise ValueError("Already using TLS") - if self.context.protocol >= ssl.PROTOCOL_TLS: - resp = self.voidcmd('AUTH TLS') - else: - resp = self.voidcmd('AUTH SSL') - self.sock = self.context.wrap_socket(self.sock, server_hostname=self.host) - self.file = self.sock.makefile(mode='r', encoding=self.encoding) - return resp - - def ccc(self): - '''Switch back to a clear-text control connection.''' - if not isinstance(self.sock, ssl.SSLSocket): - raise ValueError("not using TLS") - resp = self.voidcmd('CCC') - self.sock = self.sock.unwrap() - return resp - - def prot_p(self): - '''Set up secure data connection.''' - # PROT defines whether or not the data channel is to be protected. - # Though RFC-2228 defines four possible protection levels, - # RFC-4217 only recommends two, Clear and Private. - # Clear (PROT C) means that no security is to be used on the - # data-channel, Private (PROT P) means that the data-channel - # should be protected by TLS. - # PBSZ command MUST still be issued, but must have a parameter of - # '0' to indicate that no buffering is taking place and the data - # connection should not be encapsulated. - self.voidcmd('PBSZ 0') - resp = self.voidcmd('PROT P') - self._prot_p = True - return resp - - def prot_c(self): - '''Set up clear text data connection.''' - resp = self.voidcmd('PROT C') - self._prot_p = False - return resp - - # --- Overridden FTP methods - - def ntransfercmd(self, cmd, rest=None): - conn, size = super().ntransfercmd(cmd, rest) - if self._prot_p: - conn = self.context.wrap_socket(conn, - server_hostname=self.host) - return conn, size - - def abort(self): - # overridden as we can't pass MSG_OOB flag to sendall() - line = b'ABOR' + B_CRLF - self.sock.sendall(line) - resp = self.getmultiline() - if resp[:3] not in {'426', '225', '226'}: - raise error_proto(resp) - return resp - - __all__.append('FTP_TLS') - all_errors = (Error, OSError, EOFError, ssl.SSLError) - - -_150_re = None - -def parse150(resp): - '''Parse the '150' response for a RETR request. - Returns the expected transfer size or None; size is not guaranteed to - be present in the 150 message. - ''' - if resp[:3] != '150': - raise error_reply(resp) - global _150_re - if _150_re is None: - import re - _150_re = re.compile( - r"150 .* \((\d+) bytes\)", re.IGNORECASE | re.ASCII) - m = _150_re.match(resp) - if not m: - return None - return int(m.group(1)) - - -_227_re = None - -def parse227(resp): - '''Parse the '227' response for a PASV request. - Raises error_proto if it does not contain '(h1,h2,h3,h4,p1,p2)' - Return ('host.addr.as.numbers', port#) tuple.''' - if resp[:3] != '227': - raise error_reply(resp) - global _227_re - if _227_re is None: - import re - _227_re = re.compile(r'(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)', re.ASCII) - m = _227_re.search(resp) - if not m: - raise error_proto(resp) - numbers = m.groups() - host = '.'.join(numbers[:4]) - port = (int(numbers[4]) << 8) + int(numbers[5]) - return host, port - - -def parse229(resp, peer): - '''Parse the '229' response for an EPSV request. - Raises error_proto if it does not contain '(|||port|)' - Return ('host.addr.as.numbers', port#) tuple.''' - if resp[:3] != '229': - raise error_reply(resp) - left = resp.find('(') - if left < 0: raise error_proto(resp) - right = resp.find(')', left + 1) - if right < 0: - raise error_proto(resp) # should contain '(|||port|)' - if resp[left + 1] != resp[right - 1]: - raise error_proto(resp) - parts = resp[left + 1:right].split(resp[left+1]) - if len(parts) != 5: - raise error_proto(resp) - host = peer[0] - port = int(parts[3]) - return host, port - - -def parse257(resp): - '''Parse the '257' response for a MKD or PWD request. - This is a response to a MKD or PWD request: a directory name. - Returns the directoryname in the 257 reply.''' - if resp[:3] != '257': - raise error_reply(resp) - if resp[3:5] != ' "': - return '' # Not compliant to RFC 959, but UNIX ftpd does this - dirname = '' - i = 5 - n = len(resp) - while i < n: - c = resp[i] - i = i+1 - if c == '"': - if i >= n or resp[i] != '"': - break - i = i+1 - dirname = dirname + c - return dirname - - -def print_line(line): - '''Default retrlines callback to print a line.''' - print(line) - - -def ftpcp(source, sourcename, target, targetname = '', type = 'I'): - '''Copy file from one FTP-instance to another.''' - if not targetname: - targetname = sourcename - type = 'TYPE ' + type - source.voidcmd(type) - target.voidcmd(type) - sourcehost, sourceport = parse227(source.sendcmd('PASV')) - target.sendport(sourcehost, sourceport) - # RFC 959: the user must "listen" [...] BEFORE sending the - # transfer request. - # So: STOR before RETR, because here the target is a "user". - treply = target.sendcmd('STOR ' + targetname) - if treply[:3] not in {'125', '150'}: - raise error_proto # RFC 959 - sreply = source.sendcmd('RETR ' + sourcename) - if sreply[:3] not in {'125', '150'}: - raise error_proto # RFC 959 - source.voidresp() - target.voidresp() - - -def test(): - '''Test program. - Usage: ftplib [-d] [-r[file]] host [-l[dir]] [-d[dir]] [-p] [file] ... - - Options: - -d increase debugging level - -r[file] set alternate ~/.netrc file - - Commands: - -l[dir] list directory - -d[dir] change the current directory - -p toggle passive and active mode - file retrieve the file and write it to stdout - ''' - - if len(sys.argv) < 2: - print(test.__doc__) - sys.exit(0) - - import netrc - - debugging = 0 - rcfile = None - while sys.argv[1] == '-d': - debugging = debugging+1 - del sys.argv[1] - if sys.argv[1][:2] == '-r': - # get name of alternate ~/.netrc file: - rcfile = sys.argv[1][2:] - del sys.argv[1] - host = sys.argv[1] - ftp = FTP(host) - ftp.set_debuglevel(debugging) - userid = passwd = acct = '' - try: - netrcobj = netrc.netrc(rcfile) - except OSError: - if rcfile is not None: - print("Could not open account file -- using anonymous login.", - file=sys.stderr) - else: - try: - userid, acct, passwd = netrcobj.authenticators(host) - except (KeyError, TypeError): - # no account for host - print("No account -- using anonymous login.", file=sys.stderr) - ftp.login(userid, passwd, acct) - for file in sys.argv[2:]: - if file[:2] == '-l': - ftp.dir(file[2:]) - elif file[:2] == '-d': - cmd = 'CWD' - if file[2:]: cmd = cmd + ' ' + file[2:] - resp = ftp.sendcmd(cmd) - elif file == '-p': - ftp.set_pasv(not ftp.passiveserver) - else: - ftp.retrbinary('RETR ' + file, \ - sys.stdout.buffer.write, 1024) - sys.stdout.buffer.flush() - sys.stdout.flush() - ftp.quit() - - -if __name__ == '__main__': - test() diff --git a/Python314_4_x86_Template/Lib/functools.py b/Python314_4_x86_Template/Lib/functools.py deleted file mode 100644 index df4660eef..000000000 --- a/Python314_4_x86_Template/Lib/functools.py +++ /dev/null @@ -1,1165 +0,0 @@ -"""functools.py - Tools for working with functions and callable objects -""" -# Python module wrapper for _functools C module -# to allow utilities written in Python to be added -# to the functools module. -# Written by Nick Coghlan <ncoghlan at gmail.com>, -# Raymond Hettinger <python at rcn.com>, -# and Łukasz Langa <lukasz at langa.pl>. -# Copyright (C) 2006 Python Software Foundation. -# See C source code for _functools credits/copyright - -__all__ = ['update_wrapper', 'wraps', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES', - 'total_ordering', 'cache', 'cmp_to_key', 'lru_cache', 'reduce', - 'partial', 'partialmethod', 'singledispatch', 'singledispatchmethod', - 'cached_property', 'Placeholder'] - -from abc import get_cache_token -from collections import namedtuple -# import weakref # Deferred to single_dispatch() -from operator import itemgetter -from reprlib import recursive_repr -from types import GenericAlias, MethodType, MappingProxyType, UnionType -from _thread import RLock - -################################################################################ -### update_wrapper() and wraps() decorator -################################################################################ - -# update_wrapper() and wraps() are tools to help write -# wrapper functions that can handle naive introspection - -WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__', - '__annotate__', '__type_params__') -WRAPPER_UPDATES = ('__dict__',) -def update_wrapper(wrapper, - wrapped, - assigned = WRAPPER_ASSIGNMENTS, - updated = WRAPPER_UPDATES): - """Update a wrapper function to look like the wrapped function - - wrapper is the function to be updated - wrapped is the original function - assigned is a tuple naming the attributes assigned directly - from the wrapped function to the wrapper function (defaults to - functools.WRAPPER_ASSIGNMENTS) - updated is a tuple naming the attributes of the wrapper that - are updated with the corresponding attribute from the wrapped - function (defaults to functools.WRAPPER_UPDATES) - """ - for attr in assigned: - try: - value = getattr(wrapped, attr) - except AttributeError: - pass - else: - setattr(wrapper, attr, value) - for attr in updated: - getattr(wrapper, attr).update(getattr(wrapped, attr, {})) - # Issue #17482: set __wrapped__ last so we don't inadvertently copy it - # from the wrapped function when updating __dict__ - wrapper.__wrapped__ = wrapped - # Return the wrapper so this can be used as a decorator via partial() - return wrapper - -def wraps(wrapped, - assigned = WRAPPER_ASSIGNMENTS, - updated = WRAPPER_UPDATES): - """Decorator factory to apply update_wrapper() to a wrapper function - - Returns a decorator that invokes update_wrapper() with the decorated - function as the wrapper argument and the arguments to wraps() as the - remaining arguments. Default arguments are as for update_wrapper(). - This is a convenience function to simplify applying partial() to - update_wrapper(). - """ - return partial(update_wrapper, wrapped=wrapped, - assigned=assigned, updated=updated) - - -################################################################################ -### total_ordering class decorator -################################################################################ - -# The total ordering functions all invoke the root magic method directly -# rather than using the corresponding operator. This avoids possible -# infinite recursion that could occur when the operator dispatch logic -# detects a NotImplemented result and then calls a reflected method. - -def _gt_from_lt(self, other): - 'Return a > b. Computed by @total_ordering from (not a < b) and (a != b).' - op_result = type(self).__lt__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result and self != other - -def _le_from_lt(self, other): - 'Return a <= b. Computed by @total_ordering from (a < b) or (a == b).' - op_result = type(self).__lt__(self, other) - if op_result is NotImplemented: - return op_result - return op_result or self == other - -def _ge_from_lt(self, other): - 'Return a >= b. Computed by @total_ordering from (not a < b).' - op_result = type(self).__lt__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result - -def _ge_from_le(self, other): - 'Return a >= b. Computed by @total_ordering from (not a <= b) or (a == b).' - op_result = type(self).__le__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result or self == other - -def _lt_from_le(self, other): - 'Return a < b. Computed by @total_ordering from (a <= b) and (a != b).' - op_result = type(self).__le__(self, other) - if op_result is NotImplemented: - return op_result - return op_result and self != other - -def _gt_from_le(self, other): - 'Return a > b. Computed by @total_ordering from (not a <= b).' - op_result = type(self).__le__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result - -def _lt_from_gt(self, other): - 'Return a < b. Computed by @total_ordering from (not a > b) and (a != b).' - op_result = type(self).__gt__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result and self != other - -def _ge_from_gt(self, other): - 'Return a >= b. Computed by @total_ordering from (a > b) or (a == b).' - op_result = type(self).__gt__(self, other) - if op_result is NotImplemented: - return op_result - return op_result or self == other - -def _le_from_gt(self, other): - 'Return a <= b. Computed by @total_ordering from (not a > b).' - op_result = type(self).__gt__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result - -def _le_from_ge(self, other): - 'Return a <= b. Computed by @total_ordering from (not a >= b) or (a == b).' - op_result = type(self).__ge__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result or self == other - -def _gt_from_ge(self, other): - 'Return a > b. Computed by @total_ordering from (a >= b) and (a != b).' - op_result = type(self).__ge__(self, other) - if op_result is NotImplemented: - return op_result - return op_result and self != other - -def _lt_from_ge(self, other): - 'Return a < b. Computed by @total_ordering from (not a >= b).' - op_result = type(self).__ge__(self, other) - if op_result is NotImplemented: - return op_result - return not op_result - -_convert = { - '__lt__': [('__gt__', _gt_from_lt), - ('__le__', _le_from_lt), - ('__ge__', _ge_from_lt)], - '__le__': [('__ge__', _ge_from_le), - ('__lt__', _lt_from_le), - ('__gt__', _gt_from_le)], - '__gt__': [('__lt__', _lt_from_gt), - ('__ge__', _ge_from_gt), - ('__le__', _le_from_gt)], - '__ge__': [('__le__', _le_from_ge), - ('__gt__', _gt_from_ge), - ('__lt__', _lt_from_ge)] -} - -def total_ordering(cls): - """Class decorator that fills in missing ordering methods""" - # Find user-defined comparisons (not those inherited from object). - roots = {op for op in _convert if getattr(cls, op, None) is not getattr(object, op, None)} - if not roots: - raise ValueError('must define at least one ordering operation: < > <= >=') - root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__ - for opname, opfunc in _convert[root]: - if opname not in roots: - opfunc.__name__ = opname - setattr(cls, opname, opfunc) - return cls - - -################################################################################ -### cmp_to_key() function converter -################################################################################ - -def cmp_to_key(mycmp): - """Convert a cmp= function into a key= function""" - class K(object): - __slots__ = ['obj'] - def __init__(self, obj): - self.obj = obj - def __lt__(self, other): - return mycmp(self.obj, other.obj) < 0 - def __gt__(self, other): - return mycmp(self.obj, other.obj) > 0 - def __eq__(self, other): - return mycmp(self.obj, other.obj) == 0 - def __le__(self, other): - return mycmp(self.obj, other.obj) <= 0 - def __ge__(self, other): - return mycmp(self.obj, other.obj) >= 0 - __hash__ = None - return K - -try: - from _functools import cmp_to_key -except ImportError: - pass - - -################################################################################ -### reduce() sequence to a single item -################################################################################ - -_initial_missing = object() - -def reduce(function, sequence, initial=_initial_missing): - """ - reduce(function, iterable, /[, initial]) -> value - - Apply a function of two arguments cumulatively to the items of an iterable, from left to right. - - This effectively reduces the iterable to a single value. If initial is present, - it is placed before the items of the iterable in the calculation, and serves as - a default when the iterable is empty. - - For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) - calculates ((((1 + 2) + 3) + 4) + 5). - """ - - it = iter(sequence) - - if initial is _initial_missing: - try: - value = next(it) - except StopIteration: - raise TypeError( - "reduce() of empty iterable with no initial value") from None - else: - value = initial - - for element in it: - value = function(value, element) - - return value - - -################################################################################ -### partial() argument application -################################################################################ - - -class _PlaceholderType: - """The type of the Placeholder singleton. - - Used as a placeholder for partial arguments. - """ - __instance = None - __slots__ = () - - def __init_subclass__(cls, *args, **kwargs): - raise TypeError(f"type '{cls.__name__}' is not an acceptable base type") - - def __new__(cls): - if cls.__instance is None: - cls.__instance = object.__new__(cls) - return cls.__instance - - def __repr__(self): - return 'Placeholder' - - def __reduce__(self): - return 'Placeholder' - -Placeholder = _PlaceholderType() - -def _partial_prepare_merger(args): - if not args: - return 0, None - nargs = len(args) - order = [] - j = nargs - for i, a in enumerate(args): - if a is Placeholder: - order.append(j) - j += 1 - else: - order.append(i) - phcount = j - nargs - merger = itemgetter(*order) if phcount else None - return phcount, merger - -def _partial_new(cls, func, /, *args, **keywords): - if issubclass(cls, partial): - base_cls = partial - if not callable(func): - raise TypeError("the first argument must be callable") - else: - base_cls = partialmethod - # func could be a descriptor like classmethod which isn't callable - if not callable(func) and not hasattr(func, "__get__"): - raise TypeError(f"the first argument {func!r} must be a callable " - "or a descriptor") - if args and args[-1] is Placeholder: - raise TypeError("trailing Placeholders are not allowed") - for value in keywords.values(): - if value is Placeholder: - raise TypeError("Placeholder cannot be passed as a keyword argument") - if isinstance(func, base_cls): - pto_phcount = func._phcount - tot_args = func.args - if args: - tot_args += args - if pto_phcount: - # merge args with args of `func` which is `partial` - nargs = len(args) - if nargs < pto_phcount: - tot_args += (Placeholder,) * (pto_phcount - nargs) - tot_args = func._merger(tot_args) - if nargs > pto_phcount: - tot_args += args[pto_phcount:] - phcount, merger = _partial_prepare_merger(tot_args) - else: # works for both pto_phcount == 0 and != 0 - phcount, merger = pto_phcount, func._merger - keywords = {**func.keywords, **keywords} - func = func.func - else: - tot_args = args - phcount, merger = _partial_prepare_merger(tot_args) - - self = object.__new__(cls) - self.func = func - self.args = tot_args - self.keywords = keywords - self._phcount = phcount - self._merger = merger - return self - -def _partial_repr(self): - cls = type(self) - module = cls.__module__ - qualname = cls.__qualname__ - args = [repr(self.func)] - args.extend(map(repr, self.args)) - args.extend(f"{k}={v!r}" for k, v in self.keywords.items()) - return f"{module}.{qualname}({', '.join(args)})" - -# Purely functional, no descriptor behaviour -class partial: - """New function with partial application of the given arguments - and keywords. - """ - - __slots__ = ("func", "args", "keywords", "_phcount", "_merger", - "__dict__", "__weakref__") - - __new__ = _partial_new - __repr__ = recursive_repr()(_partial_repr) - - def __call__(self, /, *args, **keywords): - phcount = self._phcount - if phcount: - try: - pto_args = self._merger(self.args + args) - args = args[phcount:] - except IndexError: - raise TypeError("missing positional arguments " - "in 'partial' call; expected " - f"at least {phcount}, got {len(args)}") - else: - pto_args = self.args - keywords = {**self.keywords, **keywords} - return self.func(*pto_args, *args, **keywords) - - def __get__(self, obj, objtype=None): - if obj is None: - return self - return MethodType(self, obj) - - def __reduce__(self): - return type(self), (self.func,), (self.func, self.args, - self.keywords or None, self.__dict__ or None) - - def __setstate__(self, state): - if not isinstance(state, tuple): - raise TypeError("argument to __setstate__ must be a tuple") - if len(state) != 4: - raise TypeError(f"expected 4 items in state, got {len(state)}") - func, args, kwds, namespace = state - if (not callable(func) or not isinstance(args, tuple) or - (kwds is not None and not isinstance(kwds, dict)) or - (namespace is not None and not isinstance(namespace, dict))): - raise TypeError("invalid partial state") - - if args and args[-1] is Placeholder: - raise TypeError("trailing Placeholders are not allowed") - phcount, merger = _partial_prepare_merger(args) - - args = tuple(args) # just in case it's a subclass - if kwds is None: - kwds = {} - elif type(kwds) is not dict: # XXX does it need to be *exactly* dict? - kwds = dict(kwds) - if namespace is None: - namespace = {} - - self.__dict__ = namespace - self.func = func - self.args = args - self.keywords = kwds - self._phcount = phcount - self._merger = merger - - __class_getitem__ = classmethod(GenericAlias) - - -try: - from _functools import partial, Placeholder, _PlaceholderType -except ImportError: - pass - -# Descriptor version -class partialmethod: - """Method descriptor with partial application of the given arguments - and keywords. - - Supports wrapping existing descriptors and handles non-descriptor - callables as instance methods. - """ - __new__ = _partial_new - __repr__ = _partial_repr - - def _make_unbound_method(self): - def _method(cls_or_self, /, *args, **keywords): - phcount = self._phcount - if phcount: - try: - pto_args = self._merger(self.args + args) - args = args[phcount:] - except IndexError: - raise TypeError("missing positional arguments " - "in 'partialmethod' call; expected " - f"at least {phcount}, got {len(args)}") - else: - pto_args = self.args - keywords = {**self.keywords, **keywords} - return self.func(cls_or_self, *pto_args, *args, **keywords) - _method.__isabstractmethod__ = self.__isabstractmethod__ - _method.__partialmethod__ = self - return _method - - def __get__(self, obj, cls=None): - get = getattr(self.func, "__get__", None) - result = None - if get is not None: - new_func = get(obj, cls) - if new_func is not self.func: - # Assume __get__ returning something new indicates the - # creation of an appropriate callable - result = partial(new_func, *self.args, **self.keywords) - try: - result.__self__ = new_func.__self__ - except AttributeError: - pass - if result is None: - # If the underlying descriptor didn't do anything, treat this - # like an instance method - result = self._make_unbound_method().__get__(obj, cls) - return result - - @property - def __isabstractmethod__(self): - return getattr(self.func, "__isabstractmethod__", False) - - __class_getitem__ = classmethod(GenericAlias) - - -# Helper functions - -def _unwrap_partial(func): - while isinstance(func, partial): - func = func.func - return func - -def _unwrap_partialmethod(func): - prev = None - while func is not prev: - prev = func - while isinstance(getattr(func, "__partialmethod__", None), partialmethod): - func = func.__partialmethod__ - while isinstance(func, partialmethod): - func = getattr(func, 'func') - func = _unwrap_partial(func) - return func - -################################################################################ -### LRU Cache function decorator -################################################################################ - -_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"]) - -def _make_key(args, kwds, typed, - kwd_mark = (object(),), - fasttypes = {int, str}, - tuple=tuple, type=type, len=len): - """Make a cache key from optionally typed positional and keyword arguments - - The key is constructed in a way that is flat as possible rather than - as a nested structure that would take more memory. - - If there is only a single argument and its data type is known to cache - its hash value, then that argument is returned without a wrapper. This - saves space and improves lookup speed. - - """ - # All of code below relies on kwds preserving the order input by the user. - # Formerly, we sorted() the kwds before looping. The new way is *much* - # faster; however, it means that f(x=1, y=2) will now be treated as a - # distinct call from f(y=2, x=1) which will be cached separately. - key = args - if kwds: - key += kwd_mark - for item in kwds.items(): - key += item - if typed: - key += tuple(type(v) for v in args) - if kwds: - key += tuple(type(v) for v in kwds.values()) - elif len(key) == 1 and type(key[0]) in fasttypes: - return key[0] - return key - -def lru_cache(maxsize=128, typed=False): - """Least-recently-used cache decorator. - - If *maxsize* is set to None, the LRU features are disabled and the cache - can grow without bound. - - If *typed* is True, arguments of different types will be cached separately. - For example, f(decimal.Decimal("3.0")) and f(3.0) will be treated as - distinct calls with distinct results. Some types such as str and int may - be cached separately even when typed is false. - - Arguments to the cached function must be hashable. - - View the cache statistics named tuple (hits, misses, maxsize, currsize) - with f.cache_info(). Clear the cache and statistics with f.cache_clear(). - Access the underlying function with f.__wrapped__. - - See: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU) - - """ - - # Users should only access the lru_cache through its public API: - # cache_info, cache_clear, and f.__wrapped__ - # The internals of the lru_cache are encapsulated for thread safety and - # to allow the implementation to change (including a possible C version). - - if isinstance(maxsize, int): - # Negative maxsize is treated as 0 - if maxsize < 0: - maxsize = 0 - elif callable(maxsize) and isinstance(typed, bool): - # The user_function was passed in directly via the maxsize argument - user_function, maxsize = maxsize, 128 - wrapper = _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo) - wrapper.cache_parameters = lambda : {'maxsize': maxsize, 'typed': typed} - return update_wrapper(wrapper, user_function) - elif maxsize is not None: - raise TypeError( - 'Expected first argument to be an integer, a callable, or None') - - def decorating_function(user_function): - wrapper = _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo) - wrapper.cache_parameters = lambda : {'maxsize': maxsize, 'typed': typed} - return update_wrapper(wrapper, user_function) - - return decorating_function - -def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo): - # Constants shared by all lru cache instances: - sentinel = object() # unique object used to signal cache misses - make_key = _make_key # build a key from the function arguments - PREV, NEXT, KEY, RESULT = 0, 1, 2, 3 # names for the link fields - - cache = {} - hits = misses = 0 - full = False - cache_get = cache.get # bound method to lookup a key or return None - cache_len = cache.__len__ # get cache size without calling len() - lock = RLock() # because linkedlist updates aren't threadsafe - root = [] # root of the circular doubly linked list - root[:] = [root, root, None, None] # initialize by pointing to self - - if maxsize == 0: - - def wrapper(*args, **kwds): - # No caching -- just a statistics update - nonlocal misses - misses += 1 - result = user_function(*args, **kwds) - return result - - elif maxsize is None: - - def wrapper(*args, **kwds): - # Simple caching without ordering or size limit - nonlocal hits, misses - key = make_key(args, kwds, typed) - result = cache_get(key, sentinel) - if result is not sentinel: - hits += 1 - return result - misses += 1 - result = user_function(*args, **kwds) - cache[key] = result - return result - - else: - - def wrapper(*args, **kwds): - # Size limited caching that tracks accesses by recency - nonlocal root, hits, misses, full - key = make_key(args, kwds, typed) - with lock: - link = cache_get(key) - if link is not None: - # Move the link to the front of the circular queue - link_prev, link_next, _key, result = link - link_prev[NEXT] = link_next - link_next[PREV] = link_prev - last = root[PREV] - last[NEXT] = root[PREV] = link - link[PREV] = last - link[NEXT] = root - hits += 1 - return result - misses += 1 - result = user_function(*args, **kwds) - with lock: - if key in cache: - # Getting here means that this same key was added to the - # cache while the lock was released. Since the link - # update is already done, we need only return the - # computed result and update the count of misses. - pass - elif full: - # Use the old root to store the new key and result. - oldroot = root - oldroot[KEY] = key - oldroot[RESULT] = result - # Empty the oldest link and make it the new root. - # Keep a reference to the old key and old result to - # prevent their ref counts from going to zero during the - # update. That will prevent potentially arbitrary object - # clean-up code (i.e. __del__) from running while we're - # still adjusting the links. - root = oldroot[NEXT] - oldkey = root[KEY] - oldresult = root[RESULT] - root[KEY] = root[RESULT] = None - # Now update the cache dictionary. - del cache[oldkey] - # Save the potentially reentrant cache[key] assignment - # for last, after the root and links have been put in - # a consistent state. - cache[key] = oldroot - else: - # Put result in a new link at the front of the queue. - last = root[PREV] - link = [last, root, key, result] - last[NEXT] = root[PREV] = cache[key] = link - # Use the cache_len bound method instead of the len() function - # which could potentially be wrapped in an lru_cache itself. - full = (cache_len() >= maxsize) - return result - - def cache_info(): - """Report cache statistics""" - with lock: - return _CacheInfo(hits, misses, maxsize, cache_len()) - - def cache_clear(): - """Clear the cache and cache statistics""" - nonlocal hits, misses, full - with lock: - cache.clear() - root[:] = [root, root, None, None] - hits = misses = 0 - full = False - - wrapper.cache_info = cache_info - wrapper.cache_clear = cache_clear - return wrapper - -try: - from _functools import _lru_cache_wrapper -except ImportError: - pass - - -################################################################################ -### cache -- simplified access to the infinity cache -################################################################################ - -def cache(user_function, /): - 'Simple lightweight unbounded cache. Sometimes called "memoize".' - return lru_cache(maxsize=None)(user_function) - - -################################################################################ -### singledispatch() - single-dispatch generic function decorator -################################################################################ - -def _c3_merge(sequences): - """Merges MROs in *sequences* to a single MRO using the C3 algorithm. - - Adapted from https://docs.python.org/3/howto/mro.html. - - """ - result = [] - while True: - sequences = [s for s in sequences if s] # purge empty sequences - if not sequences: - return result - for s1 in sequences: # find merge candidates among seq heads - candidate = s1[0] - for s2 in sequences: - if candidate in s2[1:]: - candidate = None - break # reject the current head, it appears later - else: - break - if candidate is None: - raise RuntimeError("Inconsistent hierarchy") - result.append(candidate) - # remove the chosen candidate - for seq in sequences: - if seq[0] == candidate: - del seq[0] - -def _c3_mro(cls, abcs=None): - """Computes the method resolution order using extended C3 linearization. - - If no *abcs* are given, the algorithm works exactly like the built-in C3 - linearization used for method resolution. - - If given, *abcs* is a list of abstract base classes that should be inserted - into the resulting MRO. Unrelated ABCs are ignored and don't end up in the - result. The algorithm inserts ABCs where their functionality is introduced, - i.e. issubclass(cls, abc) returns True for the class itself but returns - False for all its direct base classes. Implicit ABCs for a given class - (either registered or inferred from the presence of a special method like - __len__) are inserted directly after the last ABC explicitly listed in the - MRO of said class. If two implicit ABCs end up next to each other in the - resulting MRO, their ordering depends on the order of types in *abcs*. - - """ - for i, base in enumerate(reversed(cls.__bases__)): - if hasattr(base, '__abstractmethods__'): - boundary = len(cls.__bases__) - i - break # Bases up to the last explicit ABC are considered first. - else: - boundary = 0 - abcs = list(abcs) if abcs else [] - explicit_bases = list(cls.__bases__[:boundary]) - abstract_bases = [] - other_bases = list(cls.__bases__[boundary:]) - for base in abcs: - if issubclass(cls, base) and not any( - issubclass(b, base) for b in cls.__bases__ - ): - # If *cls* is the class that introduces behaviour described by - # an ABC *base*, insert said ABC to its MRO. - abstract_bases.append(base) - for base in abstract_bases: - abcs.remove(base) - explicit_c3_mros = [_c3_mro(base, abcs=abcs) for base in explicit_bases] - abstract_c3_mros = [_c3_mro(base, abcs=abcs) for base in abstract_bases] - other_c3_mros = [_c3_mro(base, abcs=abcs) for base in other_bases] - return _c3_merge( - [[cls]] + - explicit_c3_mros + abstract_c3_mros + other_c3_mros + - [explicit_bases] + [abstract_bases] + [other_bases] - ) - -def _compose_mro(cls, types): - """Calculates the method resolution order for a given class *cls*. - - Includes relevant abstract base classes (with their respective bases) from - the *types* iterable. Uses a modified C3 linearization algorithm. - - """ - bases = set(cls.__mro__) - # Remove entries which are already present in the __mro__ or unrelated. - def is_related(typ): - return (typ not in bases and hasattr(typ, '__mro__') - and not isinstance(typ, GenericAlias) - and issubclass(cls, typ)) - types = [n for n in types if is_related(n)] - # Remove entries which are strict bases of other entries (they will end up - # in the MRO anyway. - def is_strict_base(typ): - for other in types: - if typ != other and typ in other.__mro__: - return True - return False - types = [n for n in types if not is_strict_base(n)] - # Subclasses of the ABCs in *types* which are also implemented by - # *cls* can be used to stabilize ABC ordering. - type_set = set(types) - mro = [] - for typ in types: - found = [] - for sub in typ.__subclasses__(): - if sub not in bases and issubclass(cls, sub): - found.append([s for s in sub.__mro__ if s in type_set]) - if not found: - mro.append(typ) - continue - # Favor subclasses with the biggest number of useful bases - found.sort(key=len, reverse=True) - for sub in found: - for subcls in sub: - if subcls not in mro: - mro.append(subcls) - return _c3_mro(cls, abcs=mro) - -def _find_impl(cls, registry): - """Returns the best matching implementation from *registry* for type *cls*. - - Where there is no registered implementation for a specific type, its method - resolution order is used to find a more generic implementation. - - Note: if *registry* does not contain an implementation for the base - *object* type, this function may return None. - - """ - mro = _compose_mro(cls, registry.keys()) - match = None - for t in mro: - if match is not None: - # If *match* is an implicit ABC but there is another unrelated, - # equally matching implicit ABC, refuse the temptation to guess. - if (t in registry and t not in cls.__mro__ - and match not in cls.__mro__ - and not issubclass(match, t)): - raise RuntimeError("Ambiguous dispatch: {} or {}".format( - match, t)) - break - if t in registry: - match = t - return registry.get(match) - -def singledispatch(func): - """Single-dispatch generic function decorator. - - Transforms a function into a generic function, which can have different - behaviours depending upon the type of its first argument. The decorated - function acts as the default implementation, and additional - implementations can be registered using the register() attribute of the - generic function. - """ - # There are many programs that use functools without singledispatch, so we - # trade-off making singledispatch marginally slower for the benefit of - # making start-up of such applications slightly faster. - import weakref - - registry = {} - dispatch_cache = weakref.WeakKeyDictionary() - cache_token = None - - def dispatch(cls): - """generic_func.dispatch(cls) -> <function implementation> - - Runs the dispatch algorithm to return the best available implementation - for the given *cls* registered on *generic_func*. - - """ - nonlocal cache_token - if cache_token is not None: - current_token = get_cache_token() - if cache_token != current_token: - dispatch_cache.clear() - cache_token = current_token - try: - impl = dispatch_cache[cls] - except KeyError: - try: - impl = registry[cls] - except KeyError: - impl = _find_impl(cls, registry) - dispatch_cache[cls] = impl - return impl - - def _is_valid_dispatch_type(cls): - if isinstance(cls, type): - return True - return (isinstance(cls, UnionType) and - all(isinstance(arg, type) for arg in cls.__args__)) - - def register(cls, func=None): - """generic_func.register(cls, func) -> func - - Registers a new implementation for the given *cls* on a *generic_func*. - - """ - nonlocal cache_token - if _is_valid_dispatch_type(cls): - if func is None: - return lambda f: register(cls, f) - else: - if func is not None: - raise TypeError( - f"Invalid first argument to `register()`. " - f"{cls!r} is not a class or union type." - ) - ann = getattr(cls, '__annotate__', None) - if ann is None: - raise TypeError( - f"Invalid first argument to `register()`: {cls!r}. " - f"Use either `@register(some_class)` or plain `@register` " - f"on an annotated function." - ) - func = cls - - # only import typing if annotation parsing is necessary - from typing import get_type_hints - from annotationlib import Format, ForwardRef - argname, cls = next(iter(get_type_hints(func, format=Format.FORWARDREF).items())) - if not _is_valid_dispatch_type(cls): - if isinstance(cls, UnionType): - raise TypeError( - f"Invalid annotation for {argname!r}. " - f"{cls!r} not all arguments are classes." - ) - elif isinstance(cls, ForwardRef): - raise TypeError( - f"Invalid annotation for {argname!r}. " - f"{cls!r} is an unresolved forward reference." - ) - else: - raise TypeError( - f"Invalid annotation for {argname!r}. " - f"{cls!r} is not a class." - ) - - if isinstance(cls, UnionType): - for arg in cls.__args__: - registry[arg] = func - else: - registry[cls] = func - if cache_token is None and hasattr(cls, '__abstractmethods__'): - cache_token = get_cache_token() - dispatch_cache.clear() - return func - - def wrapper(*args, **kw): - if not args: - raise TypeError(f'{funcname} requires at least ' - '1 positional argument') - return dispatch(args[0].__class__)(*args, **kw) - - funcname = getattr(func, '__name__', 'singledispatch function') - registry[object] = func - wrapper.register = register - wrapper.dispatch = dispatch - wrapper.registry = MappingProxyType(registry) - wrapper._clear_cache = dispatch_cache.clear - update_wrapper(wrapper, func) - return wrapper - - -# Descriptor version -class singledispatchmethod: - """Single-dispatch generic method descriptor. - - Supports wrapping existing descriptors. - """ - - def __init__(self, func): - if not callable(func) and not hasattr(func, "__get__"): - raise TypeError(f"{func!r} is not callable or a descriptor") - - self.dispatcher = singledispatch(func) - self.func = func - - def register(self, cls, method=None): - """generic_method.register(cls, func) -> func - - Registers a new implementation for the given *cls* on a *generic_method*. - """ - return self.dispatcher.register(cls, func=method) - - def __get__(self, obj, cls=None): - return _singledispatchmethod_get(self, obj, cls) - - @property - def __isabstractmethod__(self): - return getattr(self.func, '__isabstractmethod__', False) - - def __repr__(self): - try: - name = self.func.__qualname__ - except AttributeError: - try: - name = self.func.__name__ - except AttributeError: - name = '?' - return f'<single dispatch method descriptor {name}>' - -class _singledispatchmethod_get: - def __init__(self, unbound, obj, cls): - self._unbound = unbound - self._dispatch = unbound.dispatcher.dispatch - self._obj = obj - self._cls = cls - # Set instance attributes which cannot be handled in __getattr__() - # because they conflict with type descriptors. - func = unbound.func - try: - self.__module__ = func.__module__ - except AttributeError: - pass - try: - self.__doc__ = func.__doc__ - except AttributeError: - pass - - def __repr__(self): - try: - name = self.__qualname__ - except AttributeError: - try: - name = self.__name__ - except AttributeError: - name = '?' - if self._obj is not None: - return f'<bound single dispatch method {name} of {self._obj!r}>' - else: - return f'<single dispatch method {name}>' - - def __call__(self, /, *args, **kwargs): - if not args: - funcname = getattr(self._unbound.func, '__name__', - 'singledispatchmethod method') - raise TypeError(f'{funcname} requires at least ' - '1 positional argument') - return self._dispatch(args[0].__class__).__get__(self._obj, self._cls)(*args, **kwargs) - - def __getattr__(self, name): - # Resolve these attributes lazily to speed up creation of - # the _singledispatchmethod_get instance. - if name not in {'__name__', '__qualname__', '__isabstractmethod__', - '__annotations__', '__type_params__'}: - raise AttributeError - return getattr(self._unbound.func, name) - - @property - def __wrapped__(self): - return self._unbound.func - - @property - def register(self): - return self._unbound.register - - -################################################################################ -### cached_property() - property result cached as instance attribute -################################################################################ - -_NOT_FOUND = object() - -class cached_property: - def __init__(self, func): - self.func = func - self.attrname = None - self.__doc__ = func.__doc__ - self.__module__ = func.__module__ - - def __set_name__(self, owner, name): - if self.attrname is None: - self.attrname = name - elif name != self.attrname: - raise TypeError( - "Cannot assign the same cached_property to two different names " - f"({self.attrname!r} and {name!r})." - ) - - def __get__(self, instance, owner=None): - if instance is None: - return self - if self.attrname is None: - raise TypeError( - "Cannot use cached_property instance without calling __set_name__ on it.") - try: - cache = instance.__dict__ - except AttributeError: # not all objects have __dict__ (e.g. class defines slots) - msg = ( - f"No '__dict__' attribute on {type(instance).__name__!r} " - f"instance to cache {self.attrname!r} property." - ) - raise TypeError(msg) from None - val = cache.get(self.attrname, _NOT_FOUND) - if val is _NOT_FOUND: - val = self.func(instance) - try: - cache[self.attrname] = val - except TypeError: - msg = ( - f"The '__dict__' attribute on {type(instance).__name__!r} instance " - f"does not support item assignment for caching {self.attrname!r} property." - ) - raise TypeError(msg) from None - return val - - __class_getitem__ = classmethod(GenericAlias) - -def _warn_python_reduce_kwargs(py_reduce): - @wraps(py_reduce) - def wrapper(*args, **kwargs): - if 'function' in kwargs or 'sequence' in kwargs: - import os - import warnings - warnings.warn( - 'Calling functools.reduce with keyword arguments ' - '"function" or "sequence" ' - 'is deprecated in Python 3.14 and will be ' - 'forbidden in Python 3.16.', - DeprecationWarning, - skip_file_prefixes=(os.path.dirname(__file__),)) - return py_reduce(*args, **kwargs) - return wrapper - -reduce = _warn_python_reduce_kwargs(reduce) -del _warn_python_reduce_kwargs - -# The import of the C accelerated version of reduce() has been moved -# here due to gh-121676. In Python 3.16, _warn_python_reduce_kwargs() -# should be removed and the import block should be moved back right -# after the definition of reduce(). -try: - from _functools import reduce -except ImportError: - pass diff --git a/Python314_4_x86_Template/Lib/genericpath.py b/Python314_4_x86_Template/Lib/genericpath.py deleted file mode 100644 index 9363f564a..000000000 --- a/Python314_4_x86_Template/Lib/genericpath.py +++ /dev/null @@ -1,200 +0,0 @@ -""" -Path operations common to more than one OS -Do not use directly. The OS specific modules import the appropriate -functions from this module themselves. -""" -import os -import stat - -__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime', - 'getsize', 'isdevdrive', 'isdir', 'isfile', 'isjunction', 'islink', - 'lexists', 'samefile', 'sameopenfile', 'samestat', 'ALLOW_MISSING'] - - -# Does a path exist? -# This is false for dangling symbolic links on systems that support them. -def exists(path): - """Test whether a path exists. Returns False for broken symbolic links""" - try: - os.stat(path) - except (OSError, ValueError): - return False - return True - - -# Being true for dangling symbolic links is also useful. -def lexists(path): - """Test whether a path exists. Returns True for broken symbolic links""" - try: - os.lstat(path) - except (OSError, ValueError): - return False - return True - -# This follows symbolic links, so both islink() and isdir() can be true -# for the same path on systems that support symlinks -def isfile(path): - """Test whether a path is a regular file""" - try: - st = os.stat(path) - except (OSError, ValueError): - return False - return stat.S_ISREG(st.st_mode) - - -# Is a path a directory? -# This follows symbolic links, so both islink() and isdir() -# can be true for the same path on systems that support symlinks -def isdir(s): - """Return true if the pathname refers to an existing directory.""" - try: - st = os.stat(s) - except (OSError, ValueError): - return False - return stat.S_ISDIR(st.st_mode) - - -# Is a path a symbolic link? -# This will always return false on systems where os.lstat doesn't exist. - -def islink(path): - """Test whether a path is a symbolic link""" - try: - st = os.lstat(path) - except (OSError, ValueError, AttributeError): - return False - return stat.S_ISLNK(st.st_mode) - - -# Is a path a junction? -def isjunction(path): - """Test whether a path is a junction - Junctions are not supported on the current platform""" - os.fspath(path) - return False - - -def isdevdrive(path): - """Determines whether the specified path is on a Windows Dev Drive. - Dev Drives are not supported on the current platform""" - os.fspath(path) - return False - - -def getsize(filename): - """Return the size of a file, reported by os.stat().""" - return os.stat(filename).st_size - - -def getmtime(filename): - """Return the last modification time of a file, reported by os.stat().""" - return os.stat(filename).st_mtime - - -def getatime(filename): - """Return the last access time of a file, reported by os.stat().""" - return os.stat(filename).st_atime - - -def getctime(filename): - """Return the metadata change time of a file, reported by os.stat().""" - return os.stat(filename).st_ctime - - -# Return the longest prefix of all list elements. -def commonprefix(m): - "Given a list of pathnames, returns the longest common leading component" - if not m: return '' - # Some people pass in a list of pathname parts to operate in an OS-agnostic - # fashion; don't try to translate in that case as that's an abuse of the - # API and they are already doing what they need to be OS-agnostic and so - # they most likely won't be using an os.PathLike object in the sublists. - if not isinstance(m[0], (list, tuple)): - m = tuple(map(os.fspath, m)) - s1 = min(m) - s2 = max(m) - for i, c in enumerate(s1): - if c != s2[i]: - return s1[:i] - return s1 - -# Are two stat buffers (obtained from stat, fstat or lstat) -# describing the same file? -def samestat(s1, s2): - """Test whether two stat buffers reference the same file""" - return (s1.st_ino == s2.st_ino and - s1.st_dev == s2.st_dev) - - -# Are two filenames really pointing to the same file? -def samefile(f1, f2): - """Test whether two pathnames reference the same actual file or directory - - This is determined by the device number and i-node number and - raises an exception if an os.stat() call on either pathname fails. - """ - s1 = os.stat(f1) - s2 = os.stat(f2) - return samestat(s1, s2) - - -# Are two open files really referencing the same file? -# (Not necessarily the same file descriptor!) -def sameopenfile(fp1, fp2): - """Test whether two open file objects reference the same file""" - s1 = os.fstat(fp1) - s2 = os.fstat(fp2) - return samestat(s1, s2) - - -# Split a path in root and extension. -# The extension is everything starting at the last dot in the last -# pathname component; the root is everything before that. -# It is always true that root + ext == p. - -# Generic implementation of splitext, to be parametrized with -# the separators -def _splitext(p, sep, altsep, extsep): - """Split the extension from a pathname. - - Extension is everything from the last dot to the end, ignoring - leading dots. Returns "(root, ext)"; ext may be empty.""" - # NOTE: This code must work for text and bytes strings. - - sepIndex = p.rfind(sep) - if altsep: - altsepIndex = p.rfind(altsep) - sepIndex = max(sepIndex, altsepIndex) - - dotIndex = p.rfind(extsep) - if dotIndex > sepIndex: - # skip all leading dots - filenameIndex = sepIndex + 1 - while filenameIndex < dotIndex: - if p[filenameIndex:filenameIndex+1] != extsep: - return p[:dotIndex], p[dotIndex:] - filenameIndex += 1 - - return p, p[:0] - -def _check_arg_types(funcname, *args): - hasstr = hasbytes = False - for s in args: - if isinstance(s, str): - hasstr = True - elif isinstance(s, bytes): - hasbytes = True - else: - raise TypeError(f'{funcname}() argument must be str, bytes, or ' - f'os.PathLike object, not {s.__class__.__name__!r}') from None - if hasstr and hasbytes: - raise TypeError("Can't mix strings and bytes in path components") from None - -# A singleton with a true boolean value. -@object.__new__ -class ALLOW_MISSING: - """Special value for use in realpath().""" - def __repr__(self): - return 'os.path.ALLOW_MISSING' - def __reduce__(self): - return self.__class__.__name__ diff --git a/Python314_4_x86_Template/Lib/getopt.py b/Python314_4_x86_Template/Lib/getopt.py deleted file mode 100644 index 25f3e2439..000000000 --- a/Python314_4_x86_Template/Lib/getopt.py +++ /dev/null @@ -1,232 +0,0 @@ -"""Parser for command line options. - -This module helps scripts to parse the command line arguments in -sys.argv. It supports the same conventions as the Unix getopt() -function (including the special meanings of arguments of the form '-' -and '--'). Long options similar to those supported by GNU software -may be used as well via an optional third argument. This module -provides two functions and an exception: - -getopt() -- Parse command line options -gnu_getopt() -- Like getopt(), but allow option and non-option arguments -to be intermixed. -GetoptError -- exception (class) raised with 'opt' attribute, which is the -option involved with the exception. -""" - -# Long option support added by Lars Wirzenius <liw@iki.fi>. -# -# Gerrit Holl <gerrit@nl.linux.org> moved the string-based exceptions -# to class-based exceptions. -# -# Peter Åstrand <astrand@lysator.liu.se> added gnu_getopt(). -# -# TODO for gnu_getopt(): -# -# - GNU getopt_long_only mechanism -# - an option string with a W followed by semicolon should -# treat "-W foo" as "--foo" - -__all__ = ["GetoptError","error","getopt","gnu_getopt"] - -import os -from gettext import gettext as _ - - -class GetoptError(Exception): - opt = '' - msg = '' - def __init__(self, msg, opt=''): - self.msg = msg - self.opt = opt - Exception.__init__(self, msg, opt) - - def __str__(self): - return self.msg - -error = GetoptError # backward compatibility - -def getopt(args, shortopts, longopts = []): - """getopt(args, options[, long_options]) -> opts, args - - Parses command line options and parameter list. args is the - argument list to be parsed, without the leading reference to the - running program. Typically, this means "sys.argv[1:]". shortopts - is the string of option letters that the script wants to - recognize, with options that require an argument followed by a - colon and options that accept an optional argument followed by - two colons (i.e., the same format that Unix getopt() uses). If - specified, longopts is a list of strings with the names of the - long options which should be supported. The leading '--' - characters should not be included in the option name. Options - which require an argument should be followed by an equal sign - ('='). Options which accept an optional argument should be - followed by an equal sign and question mark ('=?'). - - The return value consists of two elements: the first is a list of - (option, value) pairs; the second is the list of program arguments - left after the option list was stripped (this is a trailing slice - of the first argument). Each option-and-value pair returned has - the option as its first element, prefixed with a hyphen (e.g., - '-x'), and the option argument as its second element, or an empty - string if the option has no argument. The options occur in the - list in the same order in which they were found, thus allowing - multiple occurrences. Long and short options may be mixed. - - """ - - opts = [] - if isinstance(longopts, str): - longopts = [longopts] - else: - longopts = list(longopts) - while args and args[0].startswith('-') and args[0] != '-': - if args[0] == '--': - args = args[1:] - break - if args[0].startswith('--'): - opts, args = do_longs(opts, args[0][2:], longopts, args[1:]) - else: - opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:]) - - return opts, args - -def gnu_getopt(args, shortopts, longopts = []): - """getopt(args, options[, long_options]) -> opts, args - - This function works like getopt(), except that GNU style scanning - mode is used by default. This means that option and non-option - arguments may be intermixed. The getopt() function stops - processing options as soon as a non-option argument is - encountered. - - If the first character of the option string is '+', or if the - environment variable POSIXLY_CORRECT is set, then option - processing stops as soon as a non-option argument is encountered. - - """ - - opts = [] - prog_args = [] - if isinstance(longopts, str): - longopts = [longopts] - else: - longopts = list(longopts) - - return_in_order = False - if shortopts.startswith('-'): - shortopts = shortopts[1:] - all_options_first = False - return_in_order = True - # Allow options after non-option arguments? - elif shortopts.startswith('+'): - shortopts = shortopts[1:] - all_options_first = True - elif os.environ.get("POSIXLY_CORRECT"): - all_options_first = True - else: - all_options_first = False - - while args: - if args[0] == '--': - prog_args += args[1:] - break - - if args[0][:2] == '--': - if return_in_order and prog_args: - opts.append((None, prog_args)) - prog_args = [] - opts, args = do_longs(opts, args[0][2:], longopts, args[1:]) - elif args[0][:1] == '-' and args[0] != '-': - if return_in_order and prog_args: - opts.append((None, prog_args)) - prog_args = [] - opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:]) - else: - if all_options_first: - prog_args += args - break - else: - prog_args.append(args[0]) - args = args[1:] - - return opts, prog_args - -def do_longs(opts, opt, longopts, args): - try: - i = opt.index('=') - except ValueError: - optarg = None - else: - opt, optarg = opt[:i], opt[i+1:] - - has_arg, opt = long_has_args(opt, longopts) - if has_arg: - if optarg is None and has_arg != '?': - if not args: - raise GetoptError(_('option --%s requires argument') % opt, opt) - optarg, args = args[0], args[1:] - elif optarg is not None: - raise GetoptError(_('option --%s must not have an argument') % opt, opt) - opts.append(('--' + opt, optarg or '')) - return opts, args - -# Return: -# has_arg? -# full option name -def long_has_args(opt, longopts): - possibilities = [o for o in longopts if o.startswith(opt)] - if not possibilities: - raise GetoptError(_('option --%s not recognized') % opt, opt) - # Is there an exact match? - if opt in possibilities: - return False, opt - elif opt + '=' in possibilities: - return True, opt - elif opt + '=?' in possibilities: - return '?', opt - # Possibilities must be unique to be accepted - if len(possibilities) > 1: - raise GetoptError( - _("option --%s not a unique prefix; possible options: %s") - % (opt, ", ".join(possibilities)), - opt, - ) - assert len(possibilities) == 1 - unique_match = possibilities[0] - if unique_match.endswith('=?'): - return '?', unique_match[:-2] - has_arg = unique_match.endswith('=') - if has_arg: - unique_match = unique_match[:-1] - return has_arg, unique_match - -def do_shorts(opts, optstring, shortopts, args): - while optstring != '': - opt, optstring = optstring[0], optstring[1:] - has_arg = short_has_arg(opt, shortopts) - if has_arg: - if optstring == '' and has_arg != '?': - if not args: - raise GetoptError(_('option -%s requires argument') % opt, - opt) - optstring, args = args[0], args[1:] - optarg, optstring = optstring, '' - else: - optarg = '' - opts.append(('-' + opt, optarg)) - return opts, args - -def short_has_arg(opt, shortopts): - for i in range(len(shortopts)): - if opt == shortopts[i] != ':': - if not shortopts.startswith(':', i+1): - return False - if shortopts.startswith('::', i+1): - return '?' - return True - raise GetoptError(_('option -%s not recognized') % opt, opt) - -if __name__ == '__main__': - import sys - print(getopt(sys.argv[1:], "a:b", ["alpha=", "beta"])) diff --git a/Python314_4_x86_Template/Lib/getpass.py b/Python314_4_x86_Template/Lib/getpass.py deleted file mode 100644 index 3d9bb1f0d..000000000 --- a/Python314_4_x86_Template/Lib/getpass.py +++ /dev/null @@ -1,256 +0,0 @@ -"""Utilities to get a password and/or the current user name. - -getpass(prompt[, stream[, echo_char]]) - Prompt for a password, with echo -turned off and optional keyboard feedback. -getuser() - Get the user name from the environment or password database. - -GetPassWarning - This UserWarning is issued when getpass() cannot prevent - echoing of the password contents while reading. - -On Windows, the msvcrt module will be used. - -""" - -# Authors: Piers Lauder (original) -# Guido van Rossum (Windows support and cleanup) -# Gregory P. Smith (tty support & GetPassWarning) - -import contextlib -import io -import os -import sys - -__all__ = ["getpass","getuser","GetPassWarning"] - - -class GetPassWarning(UserWarning): pass - - -def unix_getpass(prompt='Password: ', stream=None, *, echo_char=None): - """Prompt for a password, with echo turned off. - - Args: - prompt: Written on stream to ask for the input. Default: 'Password: ' - stream: A writable file object to display the prompt. Defaults to - the tty. If no tty is available defaults to sys.stderr. - echo_char: A single ASCII character to mask input (e.g., '*'). - If None, input is hidden. - Returns: - The seKr3t input. - Raises: - EOFError: If our input tty or stdin was closed. - GetPassWarning: When we were unable to turn echo off on the input. - - Always restores terminal settings before returning. - """ - _check_echo_char(echo_char) - - passwd = None - with contextlib.ExitStack() as stack: - try: - # Always try reading and writing directly on the tty first. - fd = os.open('/dev/tty', os.O_RDWR|os.O_NOCTTY) - tty = io.FileIO(fd, 'w+') - stack.enter_context(tty) - input = io.TextIOWrapper(tty) - stack.enter_context(input) - if not stream: - stream = input - except OSError: - # If that fails, see if stdin can be controlled. - stack.close() - try: - fd = sys.stdin.fileno() - except (AttributeError, ValueError): - fd = None - passwd = fallback_getpass(prompt, stream) - input = sys.stdin - if not stream: - stream = sys.stderr - - if fd is not None: - try: - old = termios.tcgetattr(fd) # a copy to save - new = old[:] - new[3] &= ~termios.ECHO # 3 == 'lflags' - if echo_char: - new[3] &= ~termios.ICANON - tcsetattr_flags = termios.TCSAFLUSH - if hasattr(termios, 'TCSASOFT'): - tcsetattr_flags |= termios.TCSASOFT - try: - termios.tcsetattr(fd, tcsetattr_flags, new) - passwd = _raw_input(prompt, stream, input=input, - echo_char=echo_char) - - finally: - termios.tcsetattr(fd, tcsetattr_flags, old) - stream.flush() # issue7208 - except termios.error: - if passwd is not None: - # _raw_input succeeded. The final tcsetattr failed. Reraise - # instead of leaving the terminal in an unknown state. - raise - # We can't control the tty or stdin. Give up and use normal IO. - # fallback_getpass() raises an appropriate warning. - if stream is not input: - # clean up unused file objects before blocking - stack.close() - passwd = fallback_getpass(prompt, stream) - - stream.write('\n') - return passwd - - -def win_getpass(prompt='Password: ', stream=None, *, echo_char=None): - """Prompt for password with echo off, using Windows getwch().""" - if sys.stdin is not sys.__stdin__: - return fallback_getpass(prompt, stream) - _check_echo_char(echo_char) - - for c in prompt: - msvcrt.putwch(c) - pw = "" - while 1: - c = msvcrt.getwch() - if c == '\r' or c == '\n': - break - if c == '\003': - raise KeyboardInterrupt - if c == '\b': - if echo_char and pw: - msvcrt.putwch('\b') - msvcrt.putwch(' ') - msvcrt.putwch('\b') - pw = pw[:-1] - else: - pw = pw + c - if echo_char: - msvcrt.putwch(echo_char) - msvcrt.putwch('\r') - msvcrt.putwch('\n') - return pw - - -def fallback_getpass(prompt='Password: ', stream=None, *, echo_char=None): - _check_echo_char(echo_char) - import warnings - warnings.warn("Can not control echo on the terminal.", GetPassWarning, - stacklevel=2) - if not stream: - stream = sys.stderr - print("Warning: Password input may be echoed.", file=stream) - return _raw_input(prompt, stream, echo_char=echo_char) - - -def _check_echo_char(echo_char): - # Single-character ASCII excluding control characters - if echo_char is None: - return - if not isinstance(echo_char, str): - raise TypeError("'echo_char' must be a str or None, not " - f"{type(echo_char).__name__}") - if not ( - len(echo_char) == 1 - and echo_char.isprintable() - and echo_char.isascii() - ): - raise ValueError("'echo_char' must be a single printable ASCII " - f"character, got: {echo_char!r}") - - -def _raw_input(prompt="", stream=None, input=None, echo_char=None): - # This doesn't save the string in the GNU readline history. - if not stream: - stream = sys.stderr - if not input: - input = sys.stdin - prompt = str(prompt) - if prompt: - try: - stream.write(prompt) - except UnicodeEncodeError: - # Use replace error handler to get as much as possible printed. - prompt = prompt.encode(stream.encoding, 'replace') - prompt = prompt.decode(stream.encoding) - stream.write(prompt) - stream.flush() - # NOTE: The Python C API calls flockfile() (and unlock) during readline. - if echo_char: - return _readline_with_echo_char(stream, input, echo_char) - line = input.readline() - if not line: - raise EOFError - if line[-1] == '\n': - line = line[:-1] - return line - - -def _readline_with_echo_char(stream, input, echo_char): - passwd = "" - eof_pressed = False - while True: - char = input.read(1) - if char == '\n' or char == '\r': - break - elif char == '\x03': - raise KeyboardInterrupt - elif char == '\x7f' or char == '\b': - if passwd: - stream.write("\b \b") - stream.flush() - passwd = passwd[:-1] - elif char == '\x04': - if eof_pressed: - break - else: - eof_pressed = True - elif char == '\x00': - continue - else: - passwd += char - stream.write(echo_char) - stream.flush() - eof_pressed = False - return passwd - - -def getuser(): - """Get the username from the environment or password database. - - First try various environment variables, then the password - database. This works on Windows as long as USERNAME is set. - Any failure to find a username raises OSError. - - .. versionchanged:: 3.13 - Previously, various exceptions beyond just :exc:`OSError` - were raised. - """ - - for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'): - user = os.environ.get(name) - if user: - return user - - try: - import pwd - return pwd.getpwuid(os.getuid())[0] - except (ImportError, KeyError) as e: - raise OSError('No username set in the environment') from e - - -# Bind the name getpass to the appropriate function -try: - import termios - # it's possible there is an incompatible termios from the - # McMillan Installer, make sure we have a UNIX-compatible termios - termios.tcgetattr, termios.tcsetattr -except (ImportError, AttributeError): - try: - import msvcrt - except ImportError: - getpass = fallback_getpass - else: - getpass = win_getpass -else: - getpass = unix_getpass diff --git a/Python314_4_x86_Template/Lib/gettext.py b/Python314_4_x86_Template/Lib/gettext.py deleted file mode 100644 index 6c11ab2b1..000000000 --- a/Python314_4_x86_Template/Lib/gettext.py +++ /dev/null @@ -1,657 +0,0 @@ -"""Internationalization and localization support. - -This module provides internationalization (I18N) and localization (L10N) -support for your Python programs by providing an interface to the GNU gettext -message catalog library. - -I18N refers to the operation by which a program is made aware of multiple -languages. L10N refers to the adaptation of your program, once -internationalized, to the local language and cultural habits. - -""" - -# This module represents the integration of work, contributions, feedback, and -# suggestions from the following people: -# -# Martin von Loewis, who wrote the initial implementation of the underlying -# C-based libintlmodule (later renamed _gettext), along with a skeletal -# gettext.py implementation. -# -# Peter Funk, who wrote fintl.py, a fairly complete wrapper around intlmodule, -# which also included a pure-Python implementation to read .mo files if -# intlmodule wasn't available. -# -# James Henstridge, who also wrote a gettext.py module, which has some -# interesting, but currently unsupported experimental features: the notion of -# a Catalog class and instances, and the ability to add to a catalog file via -# a Python API. -# -# Barry Warsaw integrated these modules, wrote the .install() API and code, -# and conformed all C and Python code to Python's coding standards. -# -# Francois Pinard and Marc-Andre Lemburg also contributed valuably to this -# module. -# -# J. David Ibanez implemented plural forms. Bruno Haible fixed some bugs. -# -# TODO: -# - Lazy loading of .mo files. Currently the entire catalog is loaded into -# memory, but that's probably bad for large translated programs. Instead, -# the lexical sort of original strings in GNU .mo files should be exploited -# to do binary searches and lazy initializations. Or you might want to use -# the undocumented double-hash algorithm for .mo files with hash tables, but -# you'll need to study the GNU gettext code to do this. - - -import operator -import os -import sys - - -__all__ = ['NullTranslations', 'GNUTranslations', 'Catalog', - 'bindtextdomain', 'find', 'translation', 'install', - 'textdomain', 'dgettext', 'dngettext', 'gettext', - 'ngettext', 'pgettext', 'dpgettext', 'npgettext', - 'dnpgettext' - ] - -_default_localedir = os.path.join(sys.base_prefix, 'share', 'locale') - -# Expression parsing for plural form selection. -# -# The gettext library supports a small subset of C syntax. The only -# incompatible difference is that integer literals starting with zero are -# decimal. -# -# https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms -# http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/intl/plural.y - -_token_pattern = None - -def _tokenize(plural): - global _token_pattern - if _token_pattern is None: - import re - _token_pattern = re.compile(r""" - (?P<WHITESPACES>[ \t]+) | # spaces and horizontal tabs - (?P<NUMBER>[0-9]+\b) | # decimal integer - (?P<NAME>n\b) | # only n is allowed - (?P<PARENTHESIS>[()]) | - (?P<OPERATOR>[-*/%+?:]|[><!]=?|==|&&|\|\|) | # !, *, /, %, +, -, <, >, - # <=, >=, ==, !=, &&, ||, - # ? : - # unary and bitwise ops - # not allowed - (?P<INVALID>\w+|.) # invalid token - """, re.VERBOSE|re.DOTALL) - - for mo in _token_pattern.finditer(plural): - kind = mo.lastgroup - if kind == 'WHITESPACES': - continue - value = mo.group(kind) - if kind == 'INVALID': - raise ValueError('invalid token in plural form: %s' % value) - yield value - yield '' - - -def _error(value): - if value: - return ValueError('unexpected token in plural form: %s' % value) - else: - return ValueError('unexpected end of plural form') - - -_binary_ops = ( - ('||',), - ('&&',), - ('==', '!='), - ('<', '>', '<=', '>='), - ('+', '-'), - ('*', '/', '%'), -) -_binary_ops = {op: i for i, ops in enumerate(_binary_ops, 1) for op in ops} -_c2py_ops = {'||': 'or', '&&': 'and', '/': '//'} - - -def _parse(tokens, priority=-1): - result = '' - nexttok = next(tokens) - while nexttok == '!': - result += 'not ' - nexttok = next(tokens) - - if nexttok == '(': - sub, nexttok = _parse(tokens) - result = '%s(%s)' % (result, sub) - if nexttok != ')': - raise ValueError('unbalanced parenthesis in plural form') - elif nexttok == 'n': - result = '%s%s' % (result, nexttok) - else: - try: - value = int(nexttok, 10) - except ValueError: - raise _error(nexttok) from None - result = '%s%d' % (result, value) - nexttok = next(tokens) - - j = 100 - while nexttok in _binary_ops: - i = _binary_ops[nexttok] - if i < priority: - break - # Break chained comparisons - if i in (3, 4) and j in (3, 4): # '==', '!=', '<', '>', '<=', '>=' - result = '(%s)' % result - # Replace some C operators by their Python equivalents - op = _c2py_ops.get(nexttok, nexttok) - right, nexttok = _parse(tokens, i + 1) - result = '%s %s %s' % (result, op, right) - j = i - if j == priority == 4: # '<', '>', '<=', '>=' - result = '(%s)' % result - - if nexttok == '?' and priority <= 0: - if_true, nexttok = _parse(tokens, 0) - if nexttok != ':': - raise _error(nexttok) - if_false, nexttok = _parse(tokens) - result = '%s if %s else %s' % (if_true, result, if_false) - if priority == 0: - result = '(%s)' % result - - return result, nexttok - - -def _as_int(n): - try: - round(n) - except TypeError: - raise TypeError('Plural value must be an integer, got %s' % - (n.__class__.__name__,)) from None - return _as_int2(n) - -def _as_int2(n): - try: - return operator.index(n) - except TypeError: - pass - - import warnings - frame = sys._getframe(1) - stacklevel = 2 - while frame.f_back is not None and frame.f_globals.get('__name__') == __name__: - stacklevel += 1 - frame = frame.f_back - warnings.warn('Plural value must be an integer, got %s' % - (n.__class__.__name__,), - DeprecationWarning, - stacklevel) - return n - - -def c2py(plural): - """Gets a C expression as used in PO files for plural forms and returns a - Python function that implements an equivalent expression. - """ - - if len(plural) > 1000: - raise ValueError('plural form expression is too long') - try: - result, nexttok = _parse(_tokenize(plural)) - if nexttok: - raise _error(nexttok) - - depth = 0 - for c in result: - if c == '(': - depth += 1 - if depth > 20: - # Python compiler limit is about 90. - # The most complex example has 2. - raise ValueError('plural form expression is too complex') - elif c == ')': - depth -= 1 - - ns = {'_as_int': _as_int, '__name__': __name__} - exec('''if True: - def func(n): - if not isinstance(n, int): - n = _as_int(n) - return int(%s) - ''' % result, ns) - return ns['func'] - except RecursionError: - # Recursion error can be raised in _parse() or exec(). - raise ValueError('plural form expression is too complex') - - -def _expand_lang(loc): - import locale - loc = locale.normalize(loc) - COMPONENT_CODESET = 1 << 0 - COMPONENT_TERRITORY = 1 << 1 - COMPONENT_MODIFIER = 1 << 2 - # split up the locale into its base components - mask = 0 - pos = loc.find('@') - if pos >= 0: - modifier = loc[pos:] - loc = loc[:pos] - mask |= COMPONENT_MODIFIER - else: - modifier = '' - pos = loc.find('.') - if pos >= 0: - codeset = loc[pos:] - loc = loc[:pos] - mask |= COMPONENT_CODESET - else: - codeset = '' - pos = loc.find('_') - if pos >= 0: - territory = loc[pos:] - loc = loc[:pos] - mask |= COMPONENT_TERRITORY - else: - territory = '' - language = loc - ret = [] - for i in range(mask+1): - if not (i & ~mask): # if all components for this combo exist ... - val = language - if i & COMPONENT_TERRITORY: val += territory - if i & COMPONENT_CODESET: val += codeset - if i & COMPONENT_MODIFIER: val += modifier - ret.append(val) - ret.reverse() - return ret - - -class NullTranslations: - def __init__(self, fp=None): - self._info = {} - self._charset = None - self._fallback = None - if fp is not None: - self._parse(fp) - - def _parse(self, fp): - pass - - def add_fallback(self, fallback): - if self._fallback: - self._fallback.add_fallback(fallback) - else: - self._fallback = fallback - - def gettext(self, message): - if self._fallback: - return self._fallback.gettext(message) - return message - - def ngettext(self, msgid1, msgid2, n): - if self._fallback: - return self._fallback.ngettext(msgid1, msgid2, n) - n = _as_int2(n) - if n == 1: - return msgid1 - else: - return msgid2 - - def pgettext(self, context, message): - if self._fallback: - return self._fallback.pgettext(context, message) - return message - - def npgettext(self, context, msgid1, msgid2, n): - if self._fallback: - return self._fallback.npgettext(context, msgid1, msgid2, n) - n = _as_int2(n) - if n == 1: - return msgid1 - else: - return msgid2 - - def info(self): - return self._info - - def charset(self): - return self._charset - - def install(self, names=None): - import builtins - builtins.__dict__['_'] = self.gettext - if names is not None: - allowed = {'gettext', 'ngettext', 'npgettext', 'pgettext'} - for name in allowed & set(names): - builtins.__dict__[name] = getattr(self, name) - - -class GNUTranslations(NullTranslations): - # Magic number of .mo files - LE_MAGIC = 0x950412de - BE_MAGIC = 0xde120495 - - # The encoding of a msgctxt and a msgid in a .mo file is - # msgctxt + "\x04" + msgid (gettext version >= 0.15) - CONTEXT = "%s\x04%s" - - # Acceptable .mo versions - VERSIONS = (0, 1) - - def _get_versions(self, version): - """Returns a tuple of major version, minor version""" - return (version >> 16, version & 0xffff) - - def _parse(self, fp): - """Override this method to support alternative .mo formats.""" - # Delay struct import for speeding up gettext import when .mo files - # are not used. - from struct import unpack - filename = getattr(fp, 'name', '') - # Parse the .mo file header, which consists of 5 little endian 32 - # bit words. - self._catalog = catalog = {} - self.plural = lambda n: int(n != 1) # germanic plural by default - buf = fp.read() - buflen = len(buf) - # Are we big endian or little endian? - magic = unpack('<I', buf[:4])[0] - if magic == self.LE_MAGIC: - version, msgcount, masteridx, transidx = unpack('<4I', buf[4:20]) - ii = '<II' - elif magic == self.BE_MAGIC: - version, msgcount, masteridx, transidx = unpack('>4I', buf[4:20]) - ii = '>II' - else: - raise OSError(0, 'Bad magic number', filename) - - major_version, minor_version = self._get_versions(version) - - if major_version not in self.VERSIONS: - raise OSError(0, 'Bad version number ' + str(major_version), filename) - - # Now put all messages from the .mo file buffer into the catalog - # dictionary. - for i in range(0, msgcount): - mlen, moff = unpack(ii, buf[masteridx:masteridx+8]) - mend = moff + mlen - tlen, toff = unpack(ii, buf[transidx:transidx+8]) - tend = toff + tlen - if mend < buflen and tend < buflen: - msg = buf[moff:mend] - tmsg = buf[toff:tend] - else: - raise OSError(0, 'File is corrupt', filename) - # See if we're looking at GNU .mo conventions for metadata - if mlen == 0: - # Catalog description - lastk = None - for b_item in tmsg.split(b'\n'): - item = b_item.decode().strip() - if not item: - continue - # Skip over comment lines: - if item.startswith('#-#-#-#-#') and item.endswith('#-#-#-#-#'): - continue - k = v = None - if ':' in item: - k, v = item.split(':', 1) - k = k.strip().lower() - v = v.strip() - self._info[k] = v - lastk = k - elif lastk: - self._info[lastk] += '\n' + item - if k == 'content-type': - self._charset = v.split('charset=')[1] - elif k == 'plural-forms': - v = v.split(';') - plural = v[1].split('plural=')[1] - self.plural = c2py(plural) - # Note: we unconditionally convert both msgids and msgstrs to - # Unicode using the character encoding specified in the charset - # parameter of the Content-Type header. The gettext documentation - # strongly encourages msgids to be us-ascii, but some applications - # require alternative encodings (e.g. Zope's ZCML and ZPT). For - # traditional gettext applications, the msgid conversion will - # cause no problems since us-ascii should always be a subset of - # the charset encoding. We may want to fall back to 8-bit msgids - # if the Unicode conversion fails. - charset = self._charset or 'ascii' - if b'\x00' in msg: - # Plural forms - msgid1, msgid2 = msg.split(b'\x00') - tmsg = tmsg.split(b'\x00') - msgid1 = str(msgid1, charset) - for i, x in enumerate(tmsg): - catalog[(msgid1, i)] = str(x, charset) - else: - catalog[str(msg, charset)] = str(tmsg, charset) - # advance to next entry in the seek tables - masteridx += 8 - transidx += 8 - - def gettext(self, message): - missing = object() - tmsg = self._catalog.get(message, missing) - if tmsg is missing: - tmsg = self._catalog.get((message, self.plural(1)), missing) - if tmsg is not missing: - return tmsg - if self._fallback: - return self._fallback.gettext(message) - return message - - def ngettext(self, msgid1, msgid2, n): - try: - tmsg = self._catalog[(msgid1, self.plural(n))] - except KeyError: - if self._fallback: - return self._fallback.ngettext(msgid1, msgid2, n) - if n == 1: - tmsg = msgid1 - else: - tmsg = msgid2 - return tmsg - - def pgettext(self, context, message): - ctxt_msg_id = self.CONTEXT % (context, message) - missing = object() - tmsg = self._catalog.get(ctxt_msg_id, missing) - if tmsg is missing: - tmsg = self._catalog.get((ctxt_msg_id, self.plural(1)), missing) - if tmsg is not missing: - return tmsg - if self._fallback: - return self._fallback.pgettext(context, message) - return message - - def npgettext(self, context, msgid1, msgid2, n): - ctxt_msg_id = self.CONTEXT % (context, msgid1) - try: - tmsg = self._catalog[ctxt_msg_id, self.plural(n)] - except KeyError: - if self._fallback: - return self._fallback.npgettext(context, msgid1, msgid2, n) - if n == 1: - tmsg = msgid1 - else: - tmsg = msgid2 - return tmsg - - -# Locate a .mo file using the gettext strategy -def find(domain, localedir=None, languages=None, all=False): - # Get some reasonable defaults for arguments that were not supplied - if localedir is None: - localedir = _default_localedir - if languages is None: - languages = [] - for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): - val = os.environ.get(envar) - if val: - languages = val.split(':') - break - if 'C' not in languages: - languages.append('C') - # now normalize and expand the languages - nelangs = [] - for lang in languages: - for nelang in _expand_lang(lang): - if nelang not in nelangs: - nelangs.append(nelang) - # select a language - if all: - result = [] - else: - result = None - for lang in nelangs: - if lang == 'C': - break - mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain) - if os.path.exists(mofile): - if all: - result.append(mofile) - else: - return mofile - return result - - -# a mapping between absolute .mo file path and Translation object -_translations = {} - - -def translation(domain, localedir=None, languages=None, - class_=None, fallback=False): - if class_ is None: - class_ = GNUTranslations - mofiles = find(domain, localedir, languages, all=True) - if not mofiles: - if fallback: - return NullTranslations() - from errno import ENOENT - raise FileNotFoundError(ENOENT, - 'No translation file found for domain', domain) - # Avoid opening, reading, and parsing the .mo file after it's been done - # once. - result = None - for mofile in mofiles: - key = (class_, os.path.abspath(mofile)) - t = _translations.get(key) - if t is None: - with open(mofile, 'rb') as fp: - t = _translations.setdefault(key, class_(fp)) - # Copy the translation object to allow setting fallbacks and - # output charset. All other instance data is shared with the - # cached object. - # Delay copy import for speeding up gettext import when .mo files - # are not used. - import copy - t = copy.copy(t) - if result is None: - result = t - else: - result.add_fallback(t) - return result - - -def install(domain, localedir=None, *, names=None): - t = translation(domain, localedir, fallback=True) - t.install(names) - - -# a mapping b/w domains and locale directories -_localedirs = {} -# current global domain, `messages' used for compatibility w/ GNU gettext -_current_domain = 'messages' - - -def textdomain(domain=None): - global _current_domain - if domain is not None: - _current_domain = domain - return _current_domain - - -def bindtextdomain(domain, localedir=None): - global _localedirs - if localedir is not None: - _localedirs[domain] = localedir - return _localedirs.get(domain, _default_localedir) - - -def dgettext(domain, message): - try: - t = translation(domain, _localedirs.get(domain, None)) - except OSError: - return message - return t.gettext(message) - - -def dngettext(domain, msgid1, msgid2, n): - try: - t = translation(domain, _localedirs.get(domain, None)) - except OSError: - n = _as_int2(n) - if n == 1: - return msgid1 - else: - return msgid2 - return t.ngettext(msgid1, msgid2, n) - - -def dpgettext(domain, context, message): - try: - t = translation(domain, _localedirs.get(domain, None)) - except OSError: - return message - return t.pgettext(context, message) - - -def dnpgettext(domain, context, msgid1, msgid2, n): - try: - t = translation(domain, _localedirs.get(domain, None)) - except OSError: - n = _as_int2(n) - if n == 1: - return msgid1 - else: - return msgid2 - return t.npgettext(context, msgid1, msgid2, n) - - -def gettext(message): - return dgettext(_current_domain, message) - - -def ngettext(msgid1, msgid2, n): - return dngettext(_current_domain, msgid1, msgid2, n) - - -def pgettext(context, message): - return dpgettext(_current_domain, context, message) - - -def npgettext(context, msgid1, msgid2, n): - return dnpgettext(_current_domain, context, msgid1, msgid2, n) - - -# dcgettext() has been deemed unnecessary and is not implemented. - -# James Henstridge's Catalog constructor from GNOME gettext. Documented usage -# was: -# -# import gettext -# cat = gettext.Catalog(PACKAGE, localedir=LOCALEDIR) -# _ = cat.gettext -# print(_('Hello World')) - -# The resulting catalog object currently don't support access through a -# dictionary API, which was supported (but apparently unused) in GNOME -# gettext. - -Catalog = translation diff --git a/Python314_4_x86_Template/Lib/glob.py b/Python314_4_x86_Template/Lib/glob.py deleted file mode 100644 index 7ce3998c2..000000000 --- a/Python314_4_x86_Template/Lib/glob.py +++ /dev/null @@ -1,574 +0,0 @@ -"""Filename globbing utility.""" - -import contextlib -import os -import re -import fnmatch -import functools -import itertools -import operator -import stat -import sys - - -__all__ = ["glob", "iglob", "escape", "translate"] - -def glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, - include_hidden=False): - """Return a list of paths matching a `pathname` pattern. - - The pattern may contain simple shell-style wildcards a la - fnmatch. Unlike fnmatch, filenames starting with a - dot are special cases that are not matched by '*' and '?' - patterns by default. - - The order of the returned list is undefined. Sort it if you need a - particular order. - - If `root_dir` is not None, it should be a path-like object specifying the - root directory for searching. It has the same effect as changing the - current directory before calling it (without actually - changing it). If pathname is relative, the result will contain - paths relative to `root_dir`. - - If `dir_fd` is not None, it should be a file descriptor referring to a - directory, and paths will then be relative to that directory. - - If `include_hidden` is true, the patterns '*', '?', '**' will match hidden - directories. - - If `recursive` is true, the pattern '**' will match any files and - zero or more directories and subdirectories. - """ - return list(iglob(pathname, root_dir=root_dir, dir_fd=dir_fd, recursive=recursive, - include_hidden=include_hidden)) - -def iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, - include_hidden=False): - """Return an iterator which yields the paths matching a `pathname` pattern. - - The pattern may contain simple shell-style wildcards a la - fnmatch. However, unlike fnmatch, filenames starting with a - dot are special cases that are not matched by '*' and '?' - patterns. - - The order of the returned paths is undefined. Sort them if you need a - particular order. - - If `root_dir` is not None, it should be a path-like object specifying - the root directory for searching. It has the same effect as changing - the current directory before calling it (without actually - changing it). If pathname is relative, the result will contain - paths relative to `root_dir`. - - If `dir_fd` is not None, it should be a file descriptor referring to a - directory, and paths will then be relative to that directory. - - If `include_hidden` is true, the patterns '*', '?', '**' will match hidden - directories. - - If `recursive` is true, the pattern '**' will match any files and - zero or more directories and subdirectories. - """ - sys.audit("glob.glob", pathname, recursive) - sys.audit("glob.glob/2", pathname, recursive, root_dir, dir_fd) - if root_dir is not None: - root_dir = os.fspath(root_dir) - else: - root_dir = pathname[:0] - it = _iglob(pathname, root_dir, dir_fd, recursive, False, - include_hidden=include_hidden) - if not pathname or recursive and _isrecursive(pathname[:2]): - try: - s = next(it) # skip empty string - if s: - it = itertools.chain((s,), it) - except StopIteration: - pass - return it - -def _iglob(pathname, root_dir, dir_fd, recursive, dironly, - include_hidden=False): - dirname, basename = os.path.split(pathname) - if not has_magic(pathname): - assert not dironly - if basename: - if _lexists(_join(root_dir, pathname), dir_fd): - yield pathname - else: - # Patterns ending with a slash should match only directories - if _isdir(_join(root_dir, dirname), dir_fd): - yield pathname - return - if not dirname: - if recursive and _isrecursive(basename): - yield from _glob2(root_dir, basename, dir_fd, dironly, - include_hidden=include_hidden) - else: - yield from _glob1(root_dir, basename, dir_fd, dironly, - include_hidden=include_hidden) - return - # `os.path.split()` returns the argument itself as a dirname if it is a - # drive or UNC path. Prevent an infinite recursion if a drive or UNC path - # contains magic characters (i.e. r'\\?\C:'). - if dirname != pathname and has_magic(dirname): - dirs = _iglob(dirname, root_dir, dir_fd, recursive, True, - include_hidden=include_hidden) - else: - dirs = [dirname] - if has_magic(basename): - if recursive and _isrecursive(basename): - glob_in_dir = _glob2 - else: - glob_in_dir = _glob1 - else: - glob_in_dir = _glob0 - for dirname in dirs: - for name in glob_in_dir(_join(root_dir, dirname), basename, dir_fd, dironly, - include_hidden=include_hidden): - yield os.path.join(dirname, name) - -# These 2 helper functions non-recursively glob inside a literal directory. -# They return a list of basenames. _glob1 accepts a pattern while _glob0 -# takes a literal basename (so it only has to check for its existence). - -def _glob1(dirname, pattern, dir_fd, dironly, include_hidden=False): - names = _listdir(dirname, dir_fd, dironly) - if not (include_hidden or _ishidden(pattern)): - names = (x for x in names if not _ishidden(x)) - return fnmatch.filter(names, pattern) - -def _glob0(dirname, basename, dir_fd, dironly, include_hidden=False): - if basename: - if _lexists(_join(dirname, basename), dir_fd): - return [basename] - else: - # `os.path.split()` returns an empty basename for paths ending with a - # directory separator. 'q*x/' should match only directories. - if _isdir(dirname, dir_fd): - return [basename] - return [] - -_deprecated_function_message = ( - "{name} is deprecated and will be removed in Python {remove}. Use " - "glob.glob and pass a directory to its root_dir argument instead." -) - -def glob0(dirname, pattern): - import warnings - warnings._deprecated("glob.glob0", _deprecated_function_message, remove=(3, 15)) - return _glob0(dirname, pattern, None, False) - -def glob1(dirname, pattern): - import warnings - warnings._deprecated("glob.glob1", _deprecated_function_message, remove=(3, 15)) - return _glob1(dirname, pattern, None, False) - -# This helper function recursively yields relative pathnames inside a literal -# directory. - -def _glob2(dirname, pattern, dir_fd, dironly, include_hidden=False): - assert _isrecursive(pattern) - if not dirname or _isdir(dirname, dir_fd): - yield pattern[:0] - yield from _rlistdir(dirname, dir_fd, dironly, - include_hidden=include_hidden) - -# If dironly is false, yields all file names inside a directory. -# If dironly is true, yields only directory names. -def _iterdir(dirname, dir_fd, dironly): - try: - fd = None - fsencode = None - if dir_fd is not None: - if dirname: - fd = arg = os.open(dirname, _dir_open_flags, dir_fd=dir_fd) - else: - arg = dir_fd - if isinstance(dirname, bytes): - fsencode = os.fsencode - elif dirname: - arg = dirname - elif isinstance(dirname, bytes): - arg = bytes(os.curdir, 'ASCII') - else: - arg = os.curdir - try: - with os.scandir(arg) as it: - for entry in it: - try: - if not dironly or entry.is_dir(): - if fsencode is not None: - yield fsencode(entry.name) - else: - yield entry.name - except OSError: - pass - finally: - if fd is not None: - os.close(fd) - except OSError: - return - -def _listdir(dirname, dir_fd, dironly): - with contextlib.closing(_iterdir(dirname, dir_fd, dironly)) as it: - return list(it) - -# Recursively yields relative pathnames inside a literal directory. -def _rlistdir(dirname, dir_fd, dironly, include_hidden=False): - names = _listdir(dirname, dir_fd, dironly) - for x in names: - if include_hidden or not _ishidden(x): - yield x - path = _join(dirname, x) if dirname else x - for y in _rlistdir(path, dir_fd, dironly, - include_hidden=include_hidden): - yield _join(x, y) - - -def _lexists(pathname, dir_fd): - # Same as os.path.lexists(), but with dir_fd - if dir_fd is None: - return os.path.lexists(pathname) - try: - os.lstat(pathname, dir_fd=dir_fd) - except (OSError, ValueError): - return False - else: - return True - -def _isdir(pathname, dir_fd): - # Same as os.path.isdir(), but with dir_fd - if dir_fd is None: - return os.path.isdir(pathname) - try: - st = os.stat(pathname, dir_fd=dir_fd) - except (OSError, ValueError): - return False - else: - return stat.S_ISDIR(st.st_mode) - -def _join(dirname, basename): - # It is common if dirname or basename is empty - if not dirname or not basename: - return dirname or basename - return os.path.join(dirname, basename) - -magic_check = re.compile('([*?[])') -magic_check_bytes = re.compile(b'([*?[])') - -def has_magic(s): - if isinstance(s, bytes): - match = magic_check_bytes.search(s) - else: - match = magic_check.search(s) - return match is not None - -def _ishidden(path): - return path[0] in ('.', b'.'[0]) - -def _isrecursive(pattern): - if isinstance(pattern, bytes): - return pattern == b'**' - else: - return pattern == '**' - -def escape(pathname): - """Escape all special characters. - """ - # Escaping is done by wrapping any of "*?[" between square brackets. - # Metacharacters do not work in the drive part and shouldn't be escaped. - drive, pathname = os.path.splitdrive(pathname) - if isinstance(pathname, bytes): - pathname = magic_check_bytes.sub(br'[\1]', pathname) - else: - pathname = magic_check.sub(r'[\1]', pathname) - return drive + pathname - - -_special_parts = ('', '.', '..') -_dir_open_flags = os.O_RDONLY | getattr(os, 'O_DIRECTORY', 0) -_no_recurse_symlinks = object() - - -def translate(pat, *, recursive=False, include_hidden=False, seps=None): - """Translate a pathname with shell wildcards to a regular expression. - - If `recursive` is true, the pattern segment '**' will match any number of - path segments. - - If `include_hidden` is true, wildcards can match path segments beginning - with a dot ('.'). - - If a sequence of separator characters is given to `seps`, they will be - used to split the pattern into segments and match path separators. If not - given, os.path.sep and os.path.altsep (where available) are used. - """ - if not seps: - if os.path.altsep: - seps = (os.path.sep, os.path.altsep) - else: - seps = os.path.sep - escaped_seps = ''.join(map(re.escape, seps)) - any_sep = f'[{escaped_seps}]' if len(seps) > 1 else escaped_seps - not_sep = f'[^{escaped_seps}]' - if include_hidden: - one_last_segment = f'{not_sep}+' - one_segment = f'{one_last_segment}{any_sep}' - any_segments = f'(?:.+{any_sep})?' - any_last_segments = '.*' - else: - one_last_segment = f'[^{escaped_seps}.]{not_sep}*' - one_segment = f'{one_last_segment}{any_sep}' - any_segments = f'(?:{one_segment})*' - any_last_segments = f'{any_segments}(?:{one_last_segment})?' - - results = [] - parts = re.split(any_sep, pat) - last_part_idx = len(parts) - 1 - for idx, part in enumerate(parts): - if part == '*': - results.append(one_segment if idx < last_part_idx else one_last_segment) - elif recursive and part == '**': - if idx < last_part_idx: - if parts[idx + 1] != '**': - results.append(any_segments) - else: - results.append(any_last_segments) - else: - if part: - if not include_hidden and part[0] in '*?': - results.append(r'(?!\.)') - results.extend(fnmatch._translate(part, f'{not_sep}*', not_sep)[0]) - if idx < last_part_idx: - results.append(any_sep) - res = ''.join(results) - return fr'(?s:{res})\z' - - -@functools.lru_cache(maxsize=512) -def _compile_pattern(pat, seps, case_sensitive, recursive=True): - """Compile given glob pattern to a re.Pattern object (observing case - sensitivity).""" - flags = re.NOFLAG if case_sensitive else re.IGNORECASE - regex = translate(pat, recursive=recursive, include_hidden=True, seps=seps) - return re.compile(regex, flags=flags).match - - -class _GlobberBase: - """Abstract class providing shell-style pattern matching and globbing. - """ - - def __init__(self, sep, case_sensitive, case_pedantic=False, recursive=False): - self.sep = sep - self.case_sensitive = case_sensitive - self.case_pedantic = case_pedantic - self.recursive = recursive - - # Abstract methods - - @staticmethod - def lexists(path): - """Implements os.path.lexists(). - """ - raise NotImplementedError - - @staticmethod - def scandir(path): - """Like os.scandir(), but generates (entry, name, path) tuples. - """ - raise NotImplementedError - - @staticmethod - def concat_path(path, text): - """Implements path concatenation. - """ - raise NotImplementedError - - # High-level methods - - def compile(self, pat, altsep=None): - seps = (self.sep, altsep) if altsep else self.sep - return _compile_pattern(pat, seps, self.case_sensitive, self.recursive) - - def selector(self, parts): - """Returns a function that selects from a given path, walking and - filtering according to the glob-style pattern parts in *parts*. - """ - if not parts: - return self.select_exists - part = parts.pop() - if self.recursive and part == '**': - selector = self.recursive_selector - elif part in _special_parts: - selector = self.special_selector - elif not self.case_pedantic and magic_check.search(part) is None: - selector = self.literal_selector - else: - selector = self.wildcard_selector - return selector(part, parts) - - def special_selector(self, part, parts): - """Returns a function that selects special children of the given path. - """ - if parts: - part += self.sep - select_next = self.selector(parts) - - def select_special(path, exists=False): - path = self.concat_path(path, part) - return select_next(path, exists) - return select_special - - def literal_selector(self, part, parts): - """Returns a function that selects a literal descendant of a path. - """ - - # Optimization: consume and join any subsequent literal parts here, - # rather than leaving them for the next selector. This reduces the - # number of string concatenation operations. - while parts and magic_check.search(parts[-1]) is None: - part += self.sep + parts.pop() - if parts: - part += self.sep - - select_next = self.selector(parts) - - def select_literal(path, exists=False): - path = self.concat_path(path, part) - return select_next(path, exists=False) - return select_literal - - def wildcard_selector(self, part, parts): - """Returns a function that selects direct children of a given path, - filtering by pattern. - """ - - match = None if part == '*' else self.compile(part) - dir_only = bool(parts) - if dir_only: - select_next = self.selector(parts) - - def select_wildcard(path, exists=False): - try: - entries = self.scandir(path) - except OSError: - pass - else: - for entry, entry_name, entry_path in entries: - if match is None or match(entry_name): - if dir_only: - try: - if not entry.is_dir(): - continue - except OSError: - continue - entry_path = self.concat_path(entry_path, self.sep) - yield from select_next(entry_path, exists=True) - else: - yield entry_path - return select_wildcard - - def recursive_selector(self, part, parts): - """Returns a function that selects a given path and all its children, - recursively, filtering by pattern. - """ - # Optimization: consume following '**' parts, which have no effect. - while parts and parts[-1] == '**': - parts.pop() - - # Optimization: consume and join any following non-special parts here, - # rather than leaving them for the next selector. They're used to - # build a regular expression, which we use to filter the results of - # the recursive walk. As a result, non-special pattern segments - # following a '**' wildcard don't require additional filesystem access - # to expand. - follow_symlinks = self.recursive is not _no_recurse_symlinks - if follow_symlinks: - while parts and parts[-1] not in _special_parts: - part += self.sep + parts.pop() - - match = None if part == '**' else self.compile(part) - dir_only = bool(parts) - select_next = self.selector(parts) - - def select_recursive(path, exists=False): - match_pos = len(str(path)) - if match is None or match(str(path), match_pos): - yield from select_next(path, exists) - stack = [path] - while stack: - yield from select_recursive_step(stack, match_pos) - - def select_recursive_step(stack, match_pos): - path = stack.pop() - try: - entries = self.scandir(path) - except OSError: - pass - else: - for entry, _entry_name, entry_path in entries: - is_dir = False - try: - if entry.is_dir(follow_symlinks=follow_symlinks): - is_dir = True - except OSError: - pass - - if is_dir or not dir_only: - entry_path_str = str(entry_path) - if dir_only: - entry_path = self.concat_path(entry_path, self.sep) - if match is None or match(entry_path_str, match_pos): - if dir_only: - yield from select_next(entry_path, exists=True) - else: - # Optimization: directly yield the path if this is - # last pattern part. - yield entry_path - if is_dir: - stack.append(entry_path) - - return select_recursive - - def select_exists(self, path, exists=False): - """Yields the given path, if it exists. - """ - if exists: - # Optimization: this path is already known to exist, e.g. because - # it was returned from os.scandir(), so we skip calling lstat(). - yield path - elif self.lexists(path): - yield path - - -class _StringGlobber(_GlobberBase): - """Provides shell-style pattern matching and globbing for string paths. - """ - lexists = staticmethod(os.path.lexists) - concat_path = operator.add - - @staticmethod - def scandir(path): - # We must close the scandir() object before proceeding to - # avoid exhausting file descriptors when globbing deep trees. - with os.scandir(path) as scandir_it: - entries = list(scandir_it) - return ((entry, entry.name, entry.path) for entry in entries) - - -class _PathGlobber(_GlobberBase): - """Provides shell-style pattern matching and globbing for pathlib paths. - """ - - @staticmethod - def lexists(path): - return path.info.exists(follow_symlinks=False) - - @staticmethod - def scandir(path): - return ((child.info, child.name, child) for child in path.iterdir()) - - @staticmethod - def concat_path(path, text): - return path.with_segments(str(path) + text) diff --git a/Python314_4_x86_Template/Lib/graphlib.py b/Python314_4_x86_Template/Lib/graphlib.py deleted file mode 100644 index 7961c9c5c..000000000 --- a/Python314_4_x86_Template/Lib/graphlib.py +++ /dev/null @@ -1,254 +0,0 @@ -from types import GenericAlias - -__all__ = ["TopologicalSorter", "CycleError"] - -_NODE_OUT = -1 -_NODE_DONE = -2 - - -class _NodeInfo: - __slots__ = "node", "npredecessors", "successors" - - def __init__(self, node): - # The node this class is augmenting. - self.node = node - - # Number of predecessors, generally >= 0. When this value falls to 0, - # and is returned by get_ready(), this is set to _NODE_OUT and when the - # node is marked done by a call to done(), set to _NODE_DONE. - self.npredecessors = 0 - - # List of successor nodes. The list can contain duplicated elements as - # long as they're all reflected in the successor's npredecessors attribute. - self.successors = [] - - -class CycleError(ValueError): - """Subclass of ValueError raised by TopologicalSorter.prepare if cycles - exist in the working graph. - - If multiple cycles exist, only one undefined choice among them will be reported - and included in the exception. The detected cycle can be accessed via the second - element in the *args* attribute of the exception instance and consists in a list - of nodes, such that each node is, in the graph, an immediate predecessor of the - next node in the list. In the reported list, the first and the last node will be - the same, to make it clear that it is cyclic. - """ - - pass - - -class TopologicalSorter: - """Provides functionality to topologically sort a graph of hashable nodes""" - - def __init__(self, graph=None): - self._node2info = {} - self._ready_nodes = None - self._npassedout = 0 - self._nfinished = 0 - - if graph is not None: - for node, predecessors in graph.items(): - self.add(node, *predecessors) - - def _get_nodeinfo(self, node): - if (result := self._node2info.get(node)) is None: - self._node2info[node] = result = _NodeInfo(node) - return result - - def add(self, node, *predecessors): - """Add a new node and its predecessors to the graph. - - Both the *node* and all elements in *predecessors* must be hashable. - - If called multiple times with the same node argument, the set of dependencies - will be the union of all dependencies passed in. - - It is possible to add a node with no dependencies (*predecessors* is not provided) - as well as provide a dependency twice. If a node that has not been provided before - is included among *predecessors* it will be automatically added to the graph with - no predecessors of its own. - - Raises ValueError if called after "prepare". - """ - if self._ready_nodes is not None: - raise ValueError("Nodes cannot be added after a call to prepare()") - - # Create the node -> predecessor edges - nodeinfo = self._get_nodeinfo(node) - nodeinfo.npredecessors += len(predecessors) - - # Create the predecessor -> node edges - for pred in predecessors: - pred_info = self._get_nodeinfo(pred) - pred_info.successors.append(node) - - def prepare(self): - """Mark the graph as finished and check for cycles in the graph. - - If any cycle is detected, "CycleError" will be raised, but "get_ready" can - still be used to obtain as many nodes as possible until cycles block more - progress. After a call to this function, the graph cannot be modified and - therefore no more nodes can be added using "add". - - Raise ValueError if nodes have already been passed out of the sorter. - - """ - if self._npassedout > 0: - raise ValueError("cannot prepare() after starting sort") - - if self._ready_nodes is None: - self._ready_nodes = [ - i.node for i in self._node2info.values() if i.npredecessors == 0 - ] - # ready_nodes is set before we look for cycles on purpose: - # if the user wants to catch the CycleError, that's fine, - # they can continue using the instance to grab as many - # nodes as possible before cycles block more progress - cycle = self._find_cycle() - if cycle: - raise CycleError("nodes are in a cycle", cycle) - - def get_ready(self): - """Return a tuple of all the nodes that are ready. - - Initially it returns all nodes with no predecessors; once those are marked - as processed by calling "done", further calls will return all new nodes that - have all their predecessors already processed. Once no more progress can be made, - empty tuples are returned. - - Raises ValueError if called without calling "prepare" previously. - """ - if self._ready_nodes is None: - raise ValueError("prepare() must be called first") - - # Get the nodes that are ready and mark them - result = tuple(self._ready_nodes) - n2i = self._node2info - for node in result: - n2i[node].npredecessors = _NODE_OUT - - # Clean the list of nodes that are ready and update - # the counter of nodes that we have returned. - self._ready_nodes.clear() - self._npassedout += len(result) - - return result - - def is_active(self): - """Return ``True`` if more progress can be made and ``False`` otherwise. - - Progress can be made if cycles do not block the resolution and either there - are still nodes ready that haven't yet been returned by "get_ready" or the - number of nodes marked "done" is less than the number that have been returned - by "get_ready". - - Raises ValueError if called without calling "prepare" previously. - """ - if self._ready_nodes is None: - raise ValueError("prepare() must be called first") - return self._nfinished < self._npassedout or bool(self._ready_nodes) - - def __bool__(self): - return self.is_active() - - def done(self, *nodes): - """Marks a set of nodes returned by "get_ready" as processed. - - This method unblocks any successor of each node in *nodes* for being returned - in the future by a call to "get_ready". - - Raises ValueError if any node in *nodes* has already been marked as - processed by a previous call to this method, if a node was not added to the - graph by using "add" or if called without calling "prepare" previously or if - node has not yet been returned by "get_ready". - """ - - if self._ready_nodes is None: - raise ValueError("prepare() must be called first") - - n2i = self._node2info - - for node in nodes: - - # Check if we know about this node (it was added previously using add() - if (nodeinfo := n2i.get(node)) is None: - raise ValueError(f"node {node!r} was not added using add()") - - # If the node has not being returned (marked as ready) previously, inform the user. - stat = nodeinfo.npredecessors - if stat != _NODE_OUT: - if stat >= 0: - raise ValueError( - f"node {node!r} was not passed out (still not ready)" - ) - elif stat == _NODE_DONE: - raise ValueError(f"node {node!r} was already marked done") - else: - assert False, f"node {node!r}: unknown status {stat}" - - # Mark the node as processed - nodeinfo.npredecessors = _NODE_DONE - - # Go to all the successors and reduce the number of predecessors, collecting all the ones - # that are ready to be returned in the next get_ready() call. - for successor in nodeinfo.successors: - successor_info = n2i[successor] - successor_info.npredecessors -= 1 - if successor_info.npredecessors == 0: - self._ready_nodes.append(successor) - self._nfinished += 1 - - def _find_cycle(self): - n2i = self._node2info - stack = [] - itstack = [] - seen = set() - node2stacki = {} - - for node in n2i: - if node in seen: - continue - - while True: - if node in seen: - # If we have seen already the node and is in the - # current stack we have found a cycle. - if node in node2stacki: - return stack[node2stacki[node] :] + [node] - # else go on to get next successor - else: - seen.add(node) - itstack.append(iter(n2i[node].successors).__next__) - node2stacki[node] = len(stack) - stack.append(node) - - # Backtrack to the topmost stack entry with - # at least another successor. - while stack: - try: - node = itstack[-1]() - break - except StopIteration: - del node2stacki[stack.pop()] - itstack.pop() - else: - break - return None - - def static_order(self): - """Returns an iterable of nodes in a topological order. - - The particular order that is returned may depend on the specific - order in which the items were inserted in the graph. - - Using this method does not require to call "prepare" or "done". If any - cycle is detected, :exc:`CycleError` will be raised. - """ - self.prepare() - while self.is_active(): - node_group = self.get_ready() - yield from node_group - self.done(*node_group) - - __class_getitem__ = classmethod(GenericAlias) diff --git a/Python314_4_x86_Template/Lib/gzip.py b/Python314_4_x86_Template/Lib/gzip.py deleted file mode 100644 index c00f51858..000000000 --- a/Python314_4_x86_Template/Lib/gzip.py +++ /dev/null @@ -1,717 +0,0 @@ -"""Functions that read and write gzipped files. - -The user of the file doesn't have to worry about the compression, -but random access is not allowed.""" - -# based on Andrew Kuchling's minigzip.py distributed with the zlib module - -import builtins -import io -import os -import struct -import sys -import time -import weakref -import zlib -from compression._common import _streams - -__all__ = ["BadGzipFile", "GzipFile", "open", "compress", "decompress"] - -FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16 - -READ = 'rb' -WRITE = 'wb' - -_COMPRESS_LEVEL_FAST = 1 -_COMPRESS_LEVEL_TRADEOFF = 6 -_COMPRESS_LEVEL_BEST = 9 - -READ_BUFFER_SIZE = 128 * 1024 -_WRITE_BUFFER_SIZE = 4 * io.DEFAULT_BUFFER_SIZE - - -def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_BEST, - encoding=None, errors=None, newline=None): - """Open a gzip-compressed file in binary or text mode. - - The filename argument can be an actual filename (a str or bytes object), or - an existing file object to read from or write to. - - The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for - binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is - "rb", and the default compresslevel is 9. - - For binary mode, this function is equivalent to the GzipFile constructor: - GzipFile(filename, mode, compresslevel). In this case, the encoding, errors - and newline arguments must not be provided. - - For text mode, a GzipFile object is created, and wrapped in an - io.TextIOWrapper instance with the specified encoding, error handling - behavior, and line ending(s). - - """ - if "t" in mode: - if "b" in mode: - raise ValueError("Invalid mode: %r" % (mode,)) - else: - if encoding is not None: - raise ValueError("Argument 'encoding' not supported in binary mode") - if errors is not None: - raise ValueError("Argument 'errors' not supported in binary mode") - if newline is not None: - raise ValueError("Argument 'newline' not supported in binary mode") - - gz_mode = mode.replace("t", "") - if isinstance(filename, (str, bytes, os.PathLike)): - binary_file = GzipFile(filename, gz_mode, compresslevel) - elif hasattr(filename, "read") or hasattr(filename, "write"): - binary_file = GzipFile(None, gz_mode, compresslevel, filename) - else: - raise TypeError("filename must be a str or bytes object, or a file") - - if "t" in mode: - encoding = io.text_encoding(encoding) - return io.TextIOWrapper(binary_file, encoding, errors, newline) - else: - return binary_file - -def write32u(output, value): - # The L format writes the bit pattern correctly whether signed - # or unsigned. - output.write(struct.pack("<L", value)) - -class _PaddedFile: - """Minimal read-only file object that prepends a string to the contents - of an actual file. Shouldn't be used outside of gzip.py, as it lacks - essential functionality.""" - - def __init__(self, f, prepend=b''): - self._buffer = prepend - self._length = len(prepend) - self.file = f - self._read = 0 - - def read(self, size): - if self._read is None: - return self.file.read(size) - if self._read + size <= self._length: - read = self._read - self._read += size - return self._buffer[read:self._read] - else: - read = self._read - self._read = None - return self._buffer[read:] + \ - self.file.read(size-self._length+read) - - def prepend(self, prepend=b''): - if self._read is None: - self._buffer = prepend - else: # Assume data was read since the last prepend() call - self._read -= len(prepend) - return - self._length = len(self._buffer) - self._read = 0 - - def seek(self, off): - self._read = None - self._buffer = None - return self.file.seek(off) - - def seekable(self): - return True # Allows fast-forwarding even in unseekable streams - - -class BadGzipFile(OSError): - """Exception raised in some cases for invalid gzip files.""" - - -class _WriteBufferStream(io.RawIOBase): - """Minimal object to pass WriteBuffer flushes into GzipFile""" - def __init__(self, gzip_file): - self.gzip_file = weakref.ref(gzip_file) - - def write(self, data): - gzip_file = self.gzip_file() - if gzip_file is None: - raise RuntimeError("lost gzip_file") - return gzip_file._write_raw(data) - - def seekable(self): - return False - - def writable(self): - return True - - -class GzipFile(_streams.BaseStream): - """The GzipFile class simulates most of the methods of a file object with - the exception of the truncate() method. - - This class only supports opening files in binary mode. If you need to open a - compressed file in text mode, use the gzip.open() function. - - """ - - # Overridden with internal file object to be closed, if only a filename - # is passed in - myfileobj = None - - def __init__(self, filename=None, mode=None, - compresslevel=_COMPRESS_LEVEL_BEST, fileobj=None, mtime=None): - """Constructor for the GzipFile class. - - At least one of fileobj and filename must be given a - non-trivial value. - - The new class instance is based on fileobj, which can be a regular - file, an io.BytesIO object, or any other object which simulates a file. - It defaults to None, in which case filename is opened to provide - a file object. - - When fileobj is not None, the filename argument is only used to be - included in the gzip file header, which may include the original - filename of the uncompressed file. It defaults to the filename of - fileobj, if discernible; otherwise, it defaults to the empty string, - and in this case the original filename is not included in the header. - - The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', or - 'xb' depending on whether the file will be read or written. The default - is the mode of fileobj if discernible; otherwise, the default is 'rb'. - A mode of 'r' is equivalent to one of 'rb', and similarly for 'w' and - 'wb', 'a' and 'ab', and 'x' and 'xb'. - - The compresslevel argument is an integer from 0 to 9 controlling the - level of compression; 1 is fastest and produces the least compression, - and 9 is slowest and produces the most compression. 0 is no compression - at all. The default is 9. - - The optional mtime argument is the timestamp requested by gzip. The time - is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970. - If mtime is omitted or None, the current time is used. Use mtime = 0 - to generate a compressed stream that does not depend on creation time. - - """ - - # Ensure attributes exist at __del__ - self.mode = None - self.fileobj = None - self._buffer = None - - if mode and ('t' in mode or 'U' in mode): - raise ValueError("Invalid mode: {!r}".format(mode)) - if mode and 'b' not in mode: - mode += 'b' - - try: - if fileobj is None: - fileobj = self.myfileobj = builtins.open(filename, mode or 'rb') - if filename is None: - filename = getattr(fileobj, 'name', '') - if not isinstance(filename, (str, bytes)): - filename = '' - else: - filename = os.fspath(filename) - origmode = mode - if mode is None: - mode = getattr(fileobj, 'mode', 'rb') - - - if mode.startswith('r'): - self.mode = READ - raw = _GzipReader(fileobj) - self._buffer = io.BufferedReader(raw) - self.name = filename - - elif mode.startswith(('w', 'a', 'x')): - if origmode is None: - import warnings - warnings.warn( - "GzipFile was opened for writing, but this will " - "change in future Python releases. " - "Specify the mode argument for opening it for writing.", - FutureWarning, 2) - self.mode = WRITE - self._init_write(filename) - self.compress = zlib.compressobj(compresslevel, - zlib.DEFLATED, - -zlib.MAX_WBITS, - zlib.DEF_MEM_LEVEL, - 0) - self._write_mtime = mtime - self._buffer_size = _WRITE_BUFFER_SIZE - self._buffer = io.BufferedWriter(_WriteBufferStream(self), - buffer_size=self._buffer_size) - else: - raise ValueError("Invalid mode: {!r}".format(mode)) - - self.fileobj = fileobj - - if self.mode == WRITE: - self._write_gzip_header(compresslevel) - except: - # Avoid a ResourceWarning if the write fails, - # eg read-only file or KeyboardInterrupt - self._close() - raise - - @property - def mtime(self): - """Last modification time read from stream, or None""" - return self._buffer.raw._last_mtime - - def __repr__(self): - s = repr(self.fileobj) - return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>' - - def _init_write(self, filename): - self.name = filename - self.crc = zlib.crc32(b"") - self.size = 0 - self.writebuf = [] - self.bufsize = 0 - self.offset = 0 # Current file offset for seek(), tell(), etc - - def tell(self): - self._check_not_closed() - self._buffer.flush() - return super().tell() - - def _write_gzip_header(self, compresslevel): - self.fileobj.write(b'\037\213') # magic header - self.fileobj.write(b'\010') # compression method - try: - # RFC 1952 requires the FNAME field to be Latin-1. Do not - # include filenames that cannot be represented that way. - fname = os.path.basename(self.name) - if not isinstance(fname, bytes): - fname = fname.encode('latin-1') - if fname.endswith(b'.gz'): - fname = fname[:-3] - except UnicodeEncodeError: - fname = b'' - flags = 0 - if fname: - flags = FNAME - self.fileobj.write(chr(flags).encode('latin-1')) - mtime = self._write_mtime - if mtime is None: - mtime = time.time() - write32u(self.fileobj, int(mtime)) - if compresslevel == _COMPRESS_LEVEL_BEST: - xfl = b'\002' - elif compresslevel == _COMPRESS_LEVEL_FAST: - xfl = b'\004' - else: - xfl = b'\000' - self.fileobj.write(xfl) - self.fileobj.write(b'\377') - if fname: - self.fileobj.write(fname + b'\000') - - def write(self,data): - self._check_not_closed() - if self.mode != WRITE: - import errno - raise OSError(errno.EBADF, "write() on read-only GzipFile object") - - if self.fileobj is None: - raise ValueError("write() on closed GzipFile object") - - return self._buffer.write(data) - - def _write_raw(self, data): - # Called by our self._buffer underlying WriteBufferStream. - if isinstance(data, (bytes, bytearray)): - length = len(data) - else: - # accept any data that supports the buffer protocol - data = memoryview(data) - length = data.nbytes - - if length > 0: - self.fileobj.write(self.compress.compress(data)) - self.size += length - self.crc = zlib.crc32(data, self.crc) - self.offset += length - - return length - - def _check_read(self, caller): - if self.mode != READ: - import errno - msg = f"{caller}() on write-only GzipFile object" - raise OSError(errno.EBADF, msg) - - def read(self, size=-1): - self._check_not_closed() - self._check_read("read") - return self._buffer.read(size) - - def read1(self, size=-1): - """Implements BufferedIOBase.read1() - - Reads up to a buffer's worth of data if size is negative.""" - self._check_not_closed() - self._check_read("read1") - - if size < 0: - size = io.DEFAULT_BUFFER_SIZE - return self._buffer.read1(size) - - def readinto(self, b): - self._check_not_closed() - self._check_read("readinto") - return self._buffer.readinto(b) - - def readinto1(self, b): - self._check_not_closed() - self._check_read("readinto1") - return self._buffer.readinto1(b) - - def peek(self, n): - self._check_not_closed() - self._check_read("peek") - return self._buffer.peek(n) - - @property - def closed(self): - return self.fileobj is None - - def close(self): - fileobj = self.fileobj - if fileobj is None: - return - if self._buffer is None or self._buffer.closed: - return - try: - if self.mode == WRITE: - self._buffer.flush() - fileobj.write(self.compress.flush()) - write32u(fileobj, self.crc) - # self.size may exceed 2 GiB, or even 4 GiB - write32u(fileobj, self.size & 0xffffffff) - elif self.mode == READ: - self._buffer.close() - finally: - self._close() - - def _close(self): - self.fileobj = None - myfileobj = self.myfileobj - if myfileobj is not None: - self.myfileobj = None - myfileobj.close() - - def flush(self,zlib_mode=zlib.Z_SYNC_FLUSH): - self._check_not_closed() - if self.mode == WRITE: - self._buffer.flush() - # Ensure the compressor's buffer is flushed - self.fileobj.write(self.compress.flush(zlib_mode)) - self.fileobj.flush() - - def fileno(self): - """Invoke the underlying file object's fileno() method. - - This will raise AttributeError if the underlying file object - doesn't support fileno(). - """ - return self.fileobj.fileno() - - def rewind(self): - '''Return the uncompressed stream file position indicator to the - beginning of the file''' - if self.mode != READ: - raise OSError("Can't rewind in write mode") - self._buffer.seek(0) - - def readable(self): - return self.mode == READ - - def writable(self): - return self.mode == WRITE - - def seekable(self): - return True - - def seek(self, offset, whence=io.SEEK_SET): - if self.mode == WRITE: - self._check_not_closed() - # Flush buffer to ensure validity of self.offset - self._buffer.flush() - if whence != io.SEEK_SET: - if whence == io.SEEK_CUR: - offset = self.offset + offset - else: - raise ValueError('Seek from end not supported') - if offset < self.offset: - raise OSError('Negative seek in write mode') - count = offset - self.offset - chunk = b'\0' * self._buffer_size - for i in range(count // self._buffer_size): - self.write(chunk) - self.write(b'\0' * (count % self._buffer_size)) - elif self.mode == READ: - self._check_not_closed() - return self._buffer.seek(offset, whence) - - return self.offset - - def readline(self, size=-1): - self._check_not_closed() - return self._buffer.readline(size) - - def __del__(self): - if self.mode == WRITE and not self.closed: - import warnings - warnings.warn("unclosed GzipFile", - ResourceWarning, source=self, stacklevel=2) - - super().__del__() - -def _read_exact(fp, n): - '''Read exactly *n* bytes from `fp` - - This method is required because fp may be unbuffered, - i.e. return short reads. - ''' - data = fp.read(n) - while len(data) < n: - b = fp.read(n - len(data)) - if not b: - raise EOFError("Compressed file ended before the " - "end-of-stream marker was reached") - data += b - return data - - -def _read_gzip_header(fp): - '''Read a gzip header from `fp` and progress to the end of the header. - - Returns last mtime if header was present or None otherwise. - ''' - magic = fp.read(2) - if magic == b'': - return None - - if magic != b'\037\213': - raise BadGzipFile('Not a gzipped file (%r)' % magic) - - (method, flag, last_mtime) = struct.unpack("<BBIxx", _read_exact(fp, 8)) - if method != 8: - raise BadGzipFile('Unknown compression method') - - if flag & FEXTRA: - # Read & discard the extra field, if present - extra_len, = struct.unpack("<H", _read_exact(fp, 2)) - _read_exact(fp, extra_len) - if flag & FNAME: - # Read and discard a null-terminated string containing the filename - while True: - s = fp.read(1) - if not s or s==b'\000': - break - if flag & FCOMMENT: - # Read and discard a null-terminated string containing a comment - while True: - s = fp.read(1) - if not s or s==b'\000': - break - if flag & FHCRC: - _read_exact(fp, 2) # Read & discard the 16-bit header CRC - return last_mtime - - -class _GzipReader(_streams.DecompressReader): - def __init__(self, fp): - super().__init__(_PaddedFile(fp), zlib._ZlibDecompressor, - wbits=-zlib.MAX_WBITS) - # Set flag indicating start of a new member - self._new_member = True - self._last_mtime = None - - def _init_read(self): - self._crc = zlib.crc32(b"") - self._stream_size = 0 # Decompressed size of unconcatenated stream - - def _read_gzip_header(self): - last_mtime = _read_gzip_header(self._fp) - if last_mtime is None: - return False - self._last_mtime = last_mtime - return True - - def read(self, size=-1): - if size < 0: - return self.readall() - # size=0 is special because decompress(max_length=0) is not supported - if not size: - return b"" - - # For certain input data, a single - # call to decompress() may not return - # any data. In this case, retry until we get some data or reach EOF. - while True: - if self._decompressor.eof: - # Ending case: we've come to the end of a member in the file, - # so finish up this member, and read a new gzip header. - # Check the CRC and file size, and set the flag so we read - # a new member - self._read_eof() - self._new_member = True - self._decompressor = self._decomp_factory( - **self._decomp_args) - - if self._new_member: - # If the _new_member flag is set, we have to - # jump to the next member, if there is one. - self._init_read() - if not self._read_gzip_header(): - self._size = self._pos - return b"" - self._new_member = False - - # Read a chunk of data from the file - if self._decompressor.needs_input: - buf = self._fp.read(READ_BUFFER_SIZE) - uncompress = self._decompressor.decompress(buf, size) - else: - uncompress = self._decompressor.decompress(b"", size) - - if self._decompressor.unused_data != b"": - # Prepend the already read bytes to the fileobj so they can - # be seen by _read_eof() and _read_gzip_header() - self._fp.prepend(self._decompressor.unused_data) - - if uncompress != b"": - break - if buf == b"": - raise EOFError("Compressed file ended before the " - "end-of-stream marker was reached") - - self._crc = zlib.crc32(uncompress, self._crc) - self._stream_size += len(uncompress) - self._pos += len(uncompress) - return uncompress - - def _read_eof(self): - # We've read to the end of the file - # We check that the computed CRC and size of the - # uncompressed data matches the stored values. Note that the size - # stored is the true file size mod 2**32. - crc32, isize = struct.unpack("<II", _read_exact(self._fp, 8)) - if crc32 != self._crc: - raise BadGzipFile("CRC check failed %s != %s" % (hex(crc32), - hex(self._crc))) - elif isize != (self._stream_size & 0xffffffff): - raise BadGzipFile("Incorrect length of data produced") - - # Gzip files can be padded with zeroes and still have archives. - # Consume all zero bytes and set the file position to the first - # non-zero byte. See http://www.gzip.org/#faq8 - c = b"\x00" - while c == b"\x00": - c = self._fp.read(1) - if c: - self._fp.prepend(c) - - def _rewind(self): - super()._rewind() - self._new_member = True - - -def compress(data, compresslevel=_COMPRESS_LEVEL_BEST, *, mtime=0): - """Compress data in one shot and return the compressed string. - - compresslevel sets the compression level in range of 0-9. - mtime can be used to set the modification time. - The modification time is set to 0 by default, for reproducibility. - """ - # Wbits=31 automatically includes a gzip header and trailer. - gzip_data = zlib.compress(data, level=compresslevel, wbits=31) - if mtime is None: - mtime = time.time() - # Reuse gzip header created by zlib, replace mtime and OS byte for - # consistency. - header = struct.pack("<4sLBB", gzip_data, int(mtime), gzip_data[8], 255) - return header + gzip_data[10:] - - -def decompress(data): - """Decompress a gzip compressed string in one shot. - Return the decompressed string. - """ - decompressed_members = [] - while True: - fp = io.BytesIO(data) - if _read_gzip_header(fp) is None: - return b"".join(decompressed_members) - # Use a zlib raw deflate compressor - do = zlib.decompressobj(wbits=-zlib.MAX_WBITS) - # Read all the data except the header - decompressed = do.decompress(data[fp.tell():]) - if not do.eof or len(do.unused_data) < 8: - raise EOFError("Compressed file ended before the end-of-stream " - "marker was reached") - crc, length = struct.unpack("<II", do.unused_data[:8]) - if crc != zlib.crc32(decompressed): - raise BadGzipFile("CRC check failed") - if length != (len(decompressed) & 0xffffffff): - raise BadGzipFile("Incorrect length of data produced") - decompressed_members.append(decompressed) - data = do.unused_data[8:].lstrip(b"\x00") - - -def main(): - from argparse import ArgumentParser - parser = ArgumentParser(description= - "A simple command line interface for the gzip module: act like gzip, " - "but do not delete the input file.", - color=True, - ) - group = parser.add_mutually_exclusive_group() - group.add_argument('--fast', action='store_true', help='compress faster') - group.add_argument('--best', action='store_true', help='compress better') - group.add_argument("-d", "--decompress", action="store_true", - help="act like gunzip instead of gzip") - - parser.add_argument("args", nargs="*", default=["-"], metavar='file') - args = parser.parse_args() - - compresslevel = _COMPRESS_LEVEL_TRADEOFF - if args.fast: - compresslevel = _COMPRESS_LEVEL_FAST - elif args.best: - compresslevel = _COMPRESS_LEVEL_BEST - - for arg in args.args: - if args.decompress: - if arg == "-": - f = GzipFile(filename="", mode="rb", fileobj=sys.stdin.buffer) - g = sys.stdout.buffer - else: - if arg[-3:] != ".gz": - sys.exit(f"filename doesn't end in .gz: {arg!r}") - f = open(arg, "rb") - g = builtins.open(arg[:-3], "wb") - else: - if arg == "-": - f = sys.stdin.buffer - g = GzipFile(filename="", mode="wb", fileobj=sys.stdout.buffer, - compresslevel=compresslevel) - else: - f = builtins.open(arg, "rb") - g = open(arg + ".gz", "wb") - while True: - chunk = f.read(READ_BUFFER_SIZE) - if not chunk: - break - g.write(chunk) - if g is not sys.stdout.buffer: - g.close() - if f is not sys.stdin.buffer: - f.close() - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/hashlib.py b/Python314_4_x86_Template/Lib/hashlib.py deleted file mode 100644 index 0e9bd98aa..000000000 --- a/Python314_4_x86_Template/Lib/hashlib.py +++ /dev/null @@ -1,255 +0,0 @@ -#. Copyright (C) 2005-2010 Gregory P. Smith (greg@krypto.org) -# Licensed to PSF under a Contributor Agreement. -# - -__doc__ = """hashlib module - A common interface to many hash functions. - -new(name, data=b'', **kwargs) - returns a new hash object implementing the - given hash function; initializing the hash - using the given binary data. - -Named constructor functions are also available, these are faster -than using new(name): - -md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(), -sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256. - -More algorithms may be available on your platform but the above are guaranteed -to exist. See the algorithms_guaranteed and algorithms_available attributes -to find out what algorithm names can be passed to new(). - -NOTE: If you want the adler32 or crc32 hash functions they are available in -the zlib module. - -Choose your hash function wisely. Some have known collision weaknesses. -sha384 and sha512 will be slow on 32 bit platforms. - -Hash objects have these methods: - - update(data): Update the hash object with the bytes in data. Repeated calls - are equivalent to a single call with the concatenation of all - the arguments. - - digest(): Return the digest of the bytes passed to the update() method - so far as a bytes object. - - hexdigest(): Like digest() except the digest is returned as a string - of double length, containing only hexadecimal digits. - - copy(): Return a copy (clone) of the hash object. This can be used to - efficiently compute the digests of data that share a common - initial substring. - -For example, to obtain the digest of the byte string 'Nobody inspects the -spammish repetition': - - >>> import hashlib - >>> m = hashlib.md5() - >>> m.update(b"Nobody inspects") - >>> m.update(b" the spammish repetition") - >>> m.digest() - b'\\xbbd\\x9c\\x83\\xdd\\x1e\\xa5\\xc9\\xd9\\xde\\xc9\\xa1\\x8d\\xf0\\xff\\xe9' - -More condensed: - - >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() - 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2' - -""" - -# This tuple and __get_builtin_constructor() must be modified if a new -# always available algorithm is added. -__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', - 'blake2b', 'blake2s', - 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', - 'shake_128', 'shake_256') - - -algorithms_guaranteed = set(__always_supported) -algorithms_available = set(__always_supported) - -__all__ = __always_supported + ('new', 'algorithms_guaranteed', - 'algorithms_available', 'file_digest') - - -__builtin_constructor_cache = {} - -# Prefer our blake2 implementation -# OpenSSL 1.1.0 comes with a limited implementation of blake2b/s. The OpenSSL -# implementations neither support keyed blake2 (blake2 MAC) nor advanced -# features like salt, personalization, or tree hashing. OpenSSL hash-only -# variants are available as 'blake2b512' and 'blake2s256', though. -__block_openssl_constructor = { - 'blake2b', 'blake2s', -} - -def __get_builtin_constructor(name): - cache = __builtin_constructor_cache - constructor = cache.get(name) - if constructor is not None: - return constructor - try: - if name in {'SHA1', 'sha1'}: - import _sha1 - cache['SHA1'] = cache['sha1'] = _sha1.sha1 - elif name in {'MD5', 'md5'}: - import _md5 - cache['MD5'] = cache['md5'] = _md5.md5 - elif name in {'SHA256', 'sha256', 'SHA224', 'sha224'}: - import _sha2 - cache['SHA224'] = cache['sha224'] = _sha2.sha224 - cache['SHA256'] = cache['sha256'] = _sha2.sha256 - elif name in {'SHA512', 'sha512', 'SHA384', 'sha384'}: - import _sha2 - cache['SHA384'] = cache['sha384'] = _sha2.sha384 - cache['SHA512'] = cache['sha512'] = _sha2.sha512 - elif name in {'blake2b', 'blake2s'}: - import _blake2 - cache['blake2b'] = _blake2.blake2b - cache['blake2s'] = _blake2.blake2s - elif name in {'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512'}: - import _sha3 - cache['sha3_224'] = _sha3.sha3_224 - cache['sha3_256'] = _sha3.sha3_256 - cache['sha3_384'] = _sha3.sha3_384 - cache['sha3_512'] = _sha3.sha3_512 - elif name in {'shake_128', 'shake_256'}: - import _sha3 - cache['shake_128'] = _sha3.shake_128 - cache['shake_256'] = _sha3.shake_256 - except ImportError: - pass # no extension module, this hash is unsupported. - - constructor = cache.get(name) - if constructor is not None: - return constructor - - raise ValueError('unsupported hash type ' + name) - - -def __get_openssl_constructor(name): - if name in __block_openssl_constructor: - # Prefer our builtin blake2 implementation. - return __get_builtin_constructor(name) - try: - # MD5, SHA1, and SHA2 are in all supported OpenSSL versions - # SHA3/shake are available in OpenSSL 1.1.1+ - f = getattr(_hashlib, 'openssl_' + name) - # Allow the C module to raise ValueError. The function will be - # defined but the hash not actually available. Don't fall back to - # builtin if the current security policy blocks a digest, bpo#40695. - f(usedforsecurity=False) - # Use the C function directly (very fast) - return f - except (AttributeError, ValueError): - return __get_builtin_constructor(name) - - -def __py_new(name, *args, **kwargs): - """new(name, data=b'', **kwargs) - Return a new hashing object using the - named algorithm; optionally initialized with data (which must be - a bytes-like object). - """ - return __get_builtin_constructor(name)(*args, **kwargs) - - -def __hash_new(name, *args, **kwargs): - """new(name, data=b'') - Return a new hashing object using the named algorithm; - optionally initialized with data (which must be a bytes-like object). - """ - if name in __block_openssl_constructor: - # Prefer our builtin blake2 implementation. - return __get_builtin_constructor(name)(*args, **kwargs) - try: - return _hashlib.new(name, *args, **kwargs) - except ValueError: - # If the _hashlib module (OpenSSL) doesn't support the named - # hash, try using our builtin implementations. - # This allows for SHA224/256 and SHA384/512 support even though - # the OpenSSL library prior to 0.9.8 doesn't provide them. - return __get_builtin_constructor(name)(*args, **kwargs) - - -try: - import _hashlib - new = __hash_new - __get_hash = __get_openssl_constructor - algorithms_available = algorithms_available.union( - _hashlib.openssl_md_meth_names) -except ImportError: - _hashlib = None - new = __py_new - __get_hash = __get_builtin_constructor - -try: - # OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA - from _hashlib import pbkdf2_hmac - __all__ += ('pbkdf2_hmac',) -except ImportError: - pass - - -try: - # OpenSSL's scrypt requires OpenSSL 1.1+ - from _hashlib import scrypt # noqa: F401 -except ImportError: - pass - - -def file_digest(fileobj, digest, /, *, _bufsize=2**18): - """Hash the contents of a file-like object. Returns a digest object. - - *fileobj* must be a file-like object opened for reading in binary mode. - It accepts file objects from open(), io.BytesIO(), and SocketIO objects. - The function may bypass Python's I/O and use the file descriptor *fileno* - directly. - - *digest* must either be a hash algorithm name as a *str*, a hash - constructor, or a callable that returns a hash object. - """ - # On Linux we could use AF_ALG sockets and sendfile() to archive zero-copy - # hashing with hardware acceleration. - if isinstance(digest, str): - digestobj = new(digest) - else: - digestobj = digest() - - if hasattr(fileobj, "getbuffer"): - # io.BytesIO object, use zero-copy buffer - digestobj.update(fileobj.getbuffer()) - return digestobj - - # Only binary files implement readinto(). - if not ( - hasattr(fileobj, "readinto") - and hasattr(fileobj, "readable") - and fileobj.readable() - ): - raise ValueError( - f"'{fileobj!r}' is not a file-like object in binary reading mode." - ) - - # binary file, socket.SocketIO object - # Note: socket I/O uses different syscalls than file I/O. - buf = bytearray(_bufsize) # Reusable buffer to reduce allocations. - view = memoryview(buf) - while True: - size = fileobj.readinto(buf) - if size is None: - raise BlockingIOError("I/O operation would block.") - if size == 0: - break # EOF - digestobj.update(view[:size]) - - return digestobj - - -for __func_name in __always_supported: - # try them all, some may not work due to the OpenSSL - # version not supporting that algorithm. - try: - globals()[__func_name] = __get_hash(__func_name) - except ValueError: - import logging - logging.exception('code for hash %s was not found.', __func_name) - - -# Cleanup locals() -del __always_supported, __func_name, __get_hash -del __py_new, __hash_new, __get_openssl_constructor diff --git a/Python314_4_x86_Template/Lib/heapq.py b/Python314_4_x86_Template/Lib/heapq.py deleted file mode 100644 index 17f62dd2d..000000000 --- a/Python314_4_x86_Template/Lib/heapq.py +++ /dev/null @@ -1,611 +0,0 @@ -"""Heap queue algorithm (a.k.a. priority queue). - -Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for -all k, counting elements from 0. For the sake of comparison, -non-existing elements are considered to be infinite. The interesting -property of a heap is that a[0] is always its smallest element. - -Usage: - -heap = [] # creates an empty heap -heappush(heap, item) # pushes a new item on the heap -item = heappop(heap) # pops the smallest item from the heap -item = heap[0] # smallest item on the heap without popping it -heapify(x) # transforms list into a heap, in-place, in linear time -item = heappushpop(heap, item) # pushes a new item and then returns - # the smallest item; the heap size is unchanged -item = heapreplace(heap, item) # pops and returns smallest item, and adds - # new item; the heap size is unchanged - -Our API differs from textbook heap algorithms as follows: - -- We use 0-based indexing. This makes the relationship between the - index for a node and the indexes for its children slightly less - obvious, but is more suitable since Python uses 0-based indexing. - -- Our heappop() method returns the smallest item, not the largest. - -These two make it possible to view the heap as a regular Python list -without surprises: heap[0] is the smallest item, and heap.sort() -maintains the heap invariant! -""" - -# Original code by Kevin O'Connor, augmented by Tim Peters and Raymond Hettinger - -__about__ = """Heap queues - -[explanation by François Pinard] - -Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for -all k, counting elements from 0. For the sake of comparison, -non-existing elements are considered to be infinite. The interesting -property of a heap is that a[0] is always its smallest element. - -The strange invariant above is meant to be an efficient memory -representation for a tournament. The numbers below are 'k', not a[k]: - - 0 - - 1 2 - - 3 4 5 6 - - 7 8 9 10 11 12 13 14 - - 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 - - -In the tree above, each cell 'k' is topping '2*k+1' and '2*k+2'. In -a usual binary tournament we see in sports, each cell is the winner -over the two cells it tops, and we can trace the winner down the tree -to see all opponents s/he had. However, in many computer applications -of such tournaments, we do not need to trace the history of a winner. -To be more memory efficient, when a winner is promoted, we try to -replace it by something else at a lower level, and the rule becomes -that a cell and the two cells it tops contain three different items, -but the top cell "wins" over the two topped cells. - -If this heap invariant is protected at all time, index 0 is clearly -the overall winner. The simplest algorithmic way to remove it and -find the "next" winner is to move some loser (let's say cell 30 in the -diagram above) into the 0 position, and then percolate this new 0 down -the tree, exchanging values, until the invariant is re-established. -This is clearly logarithmic on the total number of items in the tree. -By iterating over all items, you get an O(n ln n) sort. - -A nice feature of this sort is that you can efficiently insert new -items while the sort is going on, provided that the inserted items are -not "better" than the last 0'th element you extracted. This is -especially useful in simulation contexts, where the tree holds all -incoming events, and the "win" condition means the smallest scheduled -time. When an event schedules other events for execution, they are -scheduled into the future, so they can easily go into the heap. So, a -heap is a good structure for implementing schedulers (this is what I -used for my MIDI sequencer :-). - -Various structures for implementing schedulers have been extensively -studied, and heaps are good for this, as they are reasonably speedy, -the speed is almost constant, and the worst case is not much different -than the average case. However, there are other representations which -are more efficient overall, yet the worst cases might be terrible. - -Heaps are also very useful in big disk sorts. You most probably all -know that a big sort implies producing "runs" (which are pre-sorted -sequences, whose size is usually related to the amount of CPU memory), -followed by a merging passes for these runs, which merging is often -very cleverly organised[1]. It is very important that the initial -sort produces the longest runs possible. Tournaments are a good way -to achieve that. If, using all the memory available to hold a -tournament, you replace and percolate items that happen to fit the -current run, you'll produce runs which are twice the size of the -memory for random input, and much better for input fuzzily ordered. - -Moreover, if you output the 0'th item on disk and get an input which -may not fit in the current tournament (because the value "wins" over -the last output value), it cannot fit in the heap, so the size of the -heap decreases. The freed memory could be cleverly reused immediately -for progressively building a second heap, which grows at exactly the -same rate the first heap is melting. When the first heap completely -vanishes, you switch heaps and start a new run. Clever and quite -effective! - -In a word, heaps are useful memory structures to know. I use them in -a few applications, and I think it is good to keep a 'heap' module -around. :-) - --------------------- -[1] The disk balancing algorithms which are current, nowadays, are -more annoying than clever, and this is a consequence of the seeking -capabilities of the disks. On devices which cannot seek, like big -tape drives, the story was quite different, and one had to be very -clever to ensure (far in advance) that each tape movement will be the -most effective possible (that is, will best participate at -"progressing" the merge). Some tapes were even able to read -backwards, and this was also used to avoid the rewinding time. -Believe me, real good tape sorts were quite spectacular to watch! -From all times, sorting has always been a Great Art! :-) -""" - -__all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'heappushpop', - 'heappush_max', 'heappop_max', 'heapify_max', 'heapreplace_max', - 'heappushpop_max', 'nlargest', 'nsmallest', 'merge'] - -def heappush(heap, item): - """Push item onto heap, maintaining the heap invariant.""" - heap.append(item) - _siftdown(heap, 0, len(heap)-1) - -def heappop(heap): - """Pop the smallest item off the heap, maintaining the heap invariant.""" - lastelt = heap.pop() # raises appropriate IndexError if heap is empty - if heap: - returnitem = heap[0] - heap[0] = lastelt - _siftup(heap, 0) - return returnitem - return lastelt - -def heapreplace(heap, item): - """Pop and return the current smallest value, and add the new item. - - This is more efficient than heappop() followed by heappush(), and can be - more appropriate when using a fixed-size heap. Note that the value - returned may be larger than item! That constrains reasonable uses of - this routine unless written as part of a conditional replacement: - - if item > heap[0]: - item = heapreplace(heap, item) - """ - returnitem = heap[0] # raises appropriate IndexError if heap is empty - heap[0] = item - _siftup(heap, 0) - return returnitem - -def heappushpop(heap, item): - """Fast version of a heappush followed by a heappop.""" - if heap and heap[0] < item: - item, heap[0] = heap[0], item - _siftup(heap, 0) - return item - -def heapify(x): - """Transform list into a heap, in-place, in O(len(x)) time.""" - n = len(x) - # Transform bottom-up. The largest index there's any point to looking at - # is the largest with a child index in-range, so must have 2*i + 1 < n, - # or i < (n-1)/2. If n is even = 2*j, this is (2*j-1)/2 = j-1/2 so - # j-1 is the largest, which is n//2 - 1. If n is odd = 2*j+1, this is - # (2*j+1-1)/2 = j so j-1 is the largest, and that's again n//2-1. - for i in reversed(range(n//2)): - _siftup(x, i) - -def heappop_max(heap): - """Maxheap version of a heappop.""" - lastelt = heap.pop() # raises appropriate IndexError if heap is empty - if heap: - returnitem = heap[0] - heap[0] = lastelt - _siftup_max(heap, 0) - return returnitem - return lastelt - -def heapreplace_max(heap, item): - """Maxheap version of a heappop followed by a heappush.""" - returnitem = heap[0] # raises appropriate IndexError if heap is empty - heap[0] = item - _siftup_max(heap, 0) - return returnitem - -def heappush_max(heap, item): - """Maxheap version of a heappush.""" - heap.append(item) - _siftdown_max(heap, 0, len(heap)-1) - -def heappushpop_max(heap, item): - """Maxheap fast version of a heappush followed by a heappop.""" - if heap and item < heap[0]: - item, heap[0] = heap[0], item - _siftup_max(heap, 0) - return item - -def heapify_max(x): - """Transform list into a maxheap, in-place, in O(len(x)) time.""" - n = len(x) - for i in reversed(range(n//2)): - _siftup_max(x, i) - - -# 'heap' is a heap at all indices >= startpos, except possibly for pos. pos -# is the index of a leaf with a possibly out-of-order value. Restore the -# heap invariant. -def _siftdown(heap, startpos, pos): - newitem = heap[pos] - # Follow the path to the root, moving parents down until finding a place - # newitem fits. - while pos > startpos: - parentpos = (pos - 1) >> 1 - parent = heap[parentpos] - if newitem < parent: - heap[pos] = parent - pos = parentpos - continue - break - heap[pos] = newitem - -# The child indices of heap index pos are already heaps, and we want to make -# a heap at index pos too. We do this by bubbling the smaller child of -# pos up (and so on with that child's children, etc) until hitting a leaf, -# then using _siftdown to move the oddball originally at index pos into place. -# -# We *could* break out of the loop as soon as we find a pos where newitem <= -# both its children, but turns out that's not a good idea, and despite that -# many books write the algorithm that way. During a heap pop, the last array -# element is sifted in, and that tends to be large, so that comparing it -# against values starting from the root usually doesn't pay (= usually doesn't -# get us out of the loop early). See Knuth, Volume 3, where this is -# explained and quantified in an exercise. -# -# Cutting the # of comparisons is important, since these routines have no -# way to extract "the priority" from an array element, so that intelligence -# is likely to be hiding in custom comparison methods, or in array elements -# storing (priority, record) tuples. Comparisons are thus potentially -# expensive. -# -# On random arrays of length 1000, making this change cut the number of -# comparisons made by heapify() a little, and those made by exhaustive -# heappop() a lot, in accord with theory. Here are typical results from 3 -# runs (3 just to demonstrate how small the variance is): -# -# Compares needed by heapify Compares needed by 1000 heappops -# -------------------------- -------------------------------- -# 1837 cut to 1663 14996 cut to 8680 -# 1855 cut to 1659 14966 cut to 8678 -# 1847 cut to 1660 15024 cut to 8703 -# -# Building the heap by using heappush() 1000 times instead required -# 2198, 2148, and 2219 compares: heapify() is more efficient, when -# you can use it. -# -# The total compares needed by list.sort() on the same lists were 8627, -# 8627, and 8632 (this should be compared to the sum of heapify() and -# heappop() compares): list.sort() is (unsurprisingly!) more efficient -# for sorting. - -def _siftup(heap, pos): - endpos = len(heap) - startpos = pos - newitem = heap[pos] - # Bubble up the smaller child until hitting a leaf. - childpos = 2*pos + 1 # leftmost child position - while childpos < endpos: - # Set childpos to index of smaller child. - rightpos = childpos + 1 - if rightpos < endpos and not heap[childpos] < heap[rightpos]: - childpos = rightpos - # Move the smaller child up. - heap[pos] = heap[childpos] - pos = childpos - childpos = 2*pos + 1 - # The leaf at pos is empty now. Put newitem there, and bubble it up - # to its final resting place (by sifting its parents down). - heap[pos] = newitem - _siftdown(heap, startpos, pos) - -def _siftdown_max(heap, startpos, pos): - 'Maxheap variant of _siftdown' - newitem = heap[pos] - # Follow the path to the root, moving parents down until finding a place - # newitem fits. - while pos > startpos: - parentpos = (pos - 1) >> 1 - parent = heap[parentpos] - if parent < newitem: - heap[pos] = parent - pos = parentpos - continue - break - heap[pos] = newitem - -def _siftup_max(heap, pos): - 'Maxheap variant of _siftup' - endpos = len(heap) - startpos = pos - newitem = heap[pos] - # Bubble up the larger child until hitting a leaf. - childpos = 2*pos + 1 # leftmost child position - while childpos < endpos: - # Set childpos to index of larger child. - rightpos = childpos + 1 - if rightpos < endpos and not heap[rightpos] < heap[childpos]: - childpos = rightpos - # Move the larger child up. - heap[pos] = heap[childpos] - pos = childpos - childpos = 2*pos + 1 - # The leaf at pos is empty now. Put newitem there, and bubble it up - # to its final resting place (by sifting its parents down). - heap[pos] = newitem - _siftdown_max(heap, startpos, pos) - -def merge(*iterables, key=None, reverse=False): - '''Merge multiple sorted inputs into a single sorted output. - - Similar to sorted(itertools.chain(*iterables)) but returns a generator, - does not pull the data into memory all at once, and assumes that each of - the input streams is already sorted (smallest to largest). - - >>> list(merge([1,3,5,7], [0,2,4,8], [5,10,15,20], [], [25])) - [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25] - - If *key* is not None, applies a key function to each element to determine - its sort order. - - >>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len)) - ['dog', 'cat', 'fish', 'horse', 'kangaroo'] - - ''' - - h = [] - h_append = h.append - - if reverse: - _heapify = heapify_max - _heappop = heappop_max - _heapreplace = heapreplace_max - direction = -1 - else: - _heapify = heapify - _heappop = heappop - _heapreplace = heapreplace - direction = 1 - - if key is None: - for order, it in enumerate(map(iter, iterables)): - try: - next = it.__next__ - h_append([next(), order * direction, next]) - except StopIteration: - pass - _heapify(h) - while len(h) > 1: - try: - while True: - value, order, next = s = h[0] - yield value - s[0] = next() # raises StopIteration when exhausted - _heapreplace(h, s) # restore heap condition - except StopIteration: - _heappop(h) # remove empty iterator - if h: - # fast case when only a single iterator remains - value, order, next = h[0] - yield value - yield from next.__self__ - return - - for order, it in enumerate(map(iter, iterables)): - try: - next = it.__next__ - value = next() - h_append([key(value), order * direction, value, next]) - except StopIteration: - pass - _heapify(h) - while len(h) > 1: - try: - while True: - key_value, order, value, next = s = h[0] - yield value - value = next() - s[0] = key(value) - s[2] = value - _heapreplace(h, s) - except StopIteration: - _heappop(h) - if h: - key_value, order, value, next = h[0] - yield value - yield from next.__self__ - - -# Algorithm notes for nlargest() and nsmallest() -# ============================================== -# -# Make a single pass over the data while keeping the k most extreme values -# in a heap. Memory consumption is limited to keeping k values in a list. -# -# Measured performance for random inputs: -# -# number of comparisons -# n inputs k-extreme values (average of 5 trials) % more than min() -# ------------- ---------------- --------------------- ----------------- -# 1,000 100 3,317 231.7% -# 10,000 100 14,046 40.5% -# 100,000 100 105,749 5.7% -# 1,000,000 100 1,007,751 0.8% -# 10,000,000 100 10,009,401 0.1% -# -# Theoretical number of comparisons for k smallest of n random inputs: -# -# Step Comparisons Action -# ---- -------------------------- --------------------------- -# 1 1.66 * k heapify the first k-inputs -# 2 n - k compare remaining elements to top of heap -# 3 k * (1 + lg2(k)) * ln(n/k) replace the topmost value on the heap -# 4 k * lg2(k) - (k/2) final sort of the k most extreme values -# -# Combining and simplifying for a rough estimate gives: -# -# comparisons = n + k * (log(k, 2) * log(n/k) + log(k, 2) + log(n/k)) -# -# Computing the number of comparisons for step 3: -# ----------------------------------------------- -# * For the i-th new value from the iterable, the probability of being in the -# k most extreme values is k/i. For example, the probability of the 101st -# value seen being in the 100 most extreme values is 100/101. -# * If the value is a new extreme value, the cost of inserting it into the -# heap is 1 + log(k, 2). -# * The probability times the cost gives: -# (k/i) * (1 + log(k, 2)) -# * Summing across the remaining n-k elements gives: -# sum((k/i) * (1 + log(k, 2)) for i in range(k+1, n+1)) -# * This reduces to: -# (H(n) - H(k)) * k * (1 + log(k, 2)) -# * Where H(n) is the n-th harmonic number estimated by: -# gamma = 0.5772156649 -# H(n) = log(n, e) + gamma + 1 / (2 * n) -# http://en.wikipedia.org/wiki/Harmonic_series_(mathematics)#Rate_of_divergence -# * Substituting the H(n) formula: -# comparisons = k * (1 + log(k, 2)) * (log(n/k, e) + (1/n - 1/k) / 2) -# -# Worst-case for step 3: -# ---------------------- -# In the worst case, the input data is reversed sorted so that every new element -# must be inserted in the heap: -# -# comparisons = 1.66 * k + log(k, 2) * (n - k) -# -# Alternative Algorithms -# ---------------------- -# Other algorithms were not used because they: -# 1) Took much more auxiliary memory, -# 2) Made multiple passes over the data. -# 3) Made more comparisons in common cases (small k, large n, semi-random input). -# See the more detailed comparison of approach at: -# http://code.activestate.com/recipes/577573-compare-algorithms-for-heapqsmallest - -def nsmallest(n, iterable, key=None): - """Find the n smallest elements in a dataset. - - Equivalent to: sorted(iterable, key=key)[:n] - """ - - # Short-cut for n==1 is to use min() - if n == 1: - it = iter(iterable) - sentinel = object() - result = min(it, default=sentinel, key=key) - return [] if result is sentinel else [result] - - # When n>=size, it's faster to use sorted() - try: - size = len(iterable) - except (TypeError, AttributeError): - pass - else: - if n >= size: - return sorted(iterable, key=key)[:n] - - # When key is none, use simpler decoration - if key is None: - it = iter(iterable) - # put the range(n) first so that zip() doesn't - # consume one too many elements from the iterator - result = [(elem, i) for i, elem in zip(range(n), it)] - if not result: - return result - heapify_max(result) - top = result[0][0] - order = n - _heapreplace = heapreplace_max - for elem in it: - if elem < top: - _heapreplace(result, (elem, order)) - top, _order = result[0] - order += 1 - result.sort() - return [elem for (elem, order) in result] - - # General case, slowest method - it = iter(iterable) - result = [(key(elem), i, elem) for i, elem in zip(range(n), it)] - if not result: - return result - heapify_max(result) - top = result[0][0] - order = n - _heapreplace = heapreplace_max - for elem in it: - k = key(elem) - if k < top: - _heapreplace(result, (k, order, elem)) - top, _order, _elem = result[0] - order += 1 - result.sort() - return [elem for (k, order, elem) in result] - -def nlargest(n, iterable, key=None): - """Find the n largest elements in a dataset. - - Equivalent to: sorted(iterable, key=key, reverse=True)[:n] - """ - - # Short-cut for n==1 is to use max() - if n == 1: - it = iter(iterable) - sentinel = object() - result = max(it, default=sentinel, key=key) - return [] if result is sentinel else [result] - - # When n>=size, it's faster to use sorted() - try: - size = len(iterable) - except (TypeError, AttributeError): - pass - else: - if n >= size: - return sorted(iterable, key=key, reverse=True)[:n] - - # When key is none, use simpler decoration - if key is None: - it = iter(iterable) - result = [(elem, i) for i, elem in zip(range(0, -n, -1), it)] - if not result: - return result - heapify(result) - top = result[0][0] - order = -n - _heapreplace = heapreplace - for elem in it: - if top < elem: - _heapreplace(result, (elem, order)) - top, _order = result[0] - order -= 1 - result.sort(reverse=True) - return [elem for (elem, order) in result] - - # General case, slowest method - it = iter(iterable) - result = [(key(elem), i, elem) for i, elem in zip(range(0, -n, -1), it)] - if not result: - return result - heapify(result) - top = result[0][0] - order = -n - _heapreplace = heapreplace - for elem in it: - k = key(elem) - if top < k: - _heapreplace(result, (k, order, elem)) - top, _order, _elem = result[0] - order -= 1 - result.sort(reverse=True) - return [elem for (k, order, elem) in result] - -# If available, use C implementation -try: - from _heapq import * -except ImportError: - pass - -# For backwards compatibility -_heappop_max = heappop_max -_heapreplace_max = heapreplace_max -_heappush_max = heappush_max -_heappushpop_max = heappushpop_max -_heapify_max = heapify_max - -if __name__ == "__main__": - - import doctest # pragma: no cover - print(doctest.testmod()) # pragma: no cover diff --git a/Python314_4_x86_Template/Lib/hmac.py b/Python314_4_x86_Template/Lib/hmac.py deleted file mode 100644 index 2d6016cda..000000000 --- a/Python314_4_x86_Template/Lib/hmac.py +++ /dev/null @@ -1,269 +0,0 @@ -"""HMAC (Keyed-Hashing for Message Authentication) module. - -Implements the HMAC algorithm as described by RFC 2104. -""" - -try: - import _hashlib as _hashopenssl -except ImportError: - _hashopenssl = None - _functype = None - from _operator import _compare_digest as compare_digest -else: - compare_digest = _hashopenssl.compare_digest - _functype = type(_hashopenssl.openssl_sha256) # builtin type - -try: - import _hmac -except ImportError: - _hmac = None - -trans_5C = bytes((x ^ 0x5C) for x in range(256)) -trans_36 = bytes((x ^ 0x36) for x in range(256)) - -# The size of the digests returned by HMAC depends on the underlying -# hashing module used. Use digest_size from the instance of HMAC instead. -digest_size = None - - -def _get_digest_constructor(digest_like): - if callable(digest_like): - return digest_like - if isinstance(digest_like, str): - def digest_wrapper(d=b''): - import hashlib - return hashlib.new(digest_like, d) - else: - def digest_wrapper(d=b''): - return digest_like.new(d) - return digest_wrapper - - -class HMAC: - """RFC 2104 HMAC class. Also complies with RFC 4231. - - This supports the API for Cryptographic Hash Functions (PEP 247). - """ - - # Note: self.blocksize is the default blocksize; self.block_size - # is effective block size as well as the public API attribute. - blocksize = 64 # 512-bit HMAC; can be changed in subclasses. - - __slots__ = ( - "_hmac", "_inner", "_outer", "block_size", "digest_size" - ) - - def __init__(self, key, msg=None, digestmod=''): - """Create a new HMAC object. - - key: bytes or buffer, key for the keyed hash object. - msg: bytes or buffer, Initial input for the hash or None. - digestmod: A hash name suitable for hashlib.new(). *OR* - A hashlib constructor returning a new hash object. *OR* - A module supporting PEP 247. - - Required as of 3.8, despite its position after the optional - msg argument. Passing it as a keyword argument is - recommended, though not required for legacy API reasons. - """ - - if not isinstance(key, (bytes, bytearray)): - raise TypeError(f"key: expected bytes or bytearray, " - f"but got {type(key).__name__!r}") - - if not digestmod: - raise TypeError("Missing required argument 'digestmod'.") - - self.__init(key, msg, digestmod) - - def __init(self, key, msg, digestmod): - if _hashopenssl and isinstance(digestmod, (str, _functype)): - try: - self._init_openssl_hmac(key, msg, digestmod) - return - except _hashopenssl.UnsupportedDigestmodError: # pragma: no cover - pass - if _hmac and isinstance(digestmod, str): - try: - self._init_builtin_hmac(key, msg, digestmod) - return - except _hmac.UnknownHashError: # pragma: no cover - pass - self._init_old(key, msg, digestmod) - - def _init_openssl_hmac(self, key, msg, digestmod): - self._hmac = _hashopenssl.hmac_new(key, msg, digestmod=digestmod) - self._inner = self._outer = None # because the slots are defined - self.digest_size = self._hmac.digest_size - self.block_size = self._hmac.block_size - - _init_hmac = _init_openssl_hmac # for backward compatibility (if any) - - def _init_builtin_hmac(self, key, msg, digestmod): - self._hmac = _hmac.new(key, msg, digestmod=digestmod) - self._inner = self._outer = None # because the slots are defined - self.digest_size = self._hmac.digest_size - self.block_size = self._hmac.block_size - - def _init_old(self, key, msg, digestmod): - import warnings - - digest_cons = _get_digest_constructor(digestmod) - - self._hmac = None - self._outer = digest_cons() - self._inner = digest_cons() - self.digest_size = self._inner.digest_size - - if hasattr(self._inner, 'block_size'): - blocksize = self._inner.block_size - if blocksize < 16: - warnings.warn(f"block_size of {blocksize} seems too small; " - f"using our default of {self.blocksize}.", - RuntimeWarning, 2) - blocksize = self.blocksize # pragma: no cover - else: - warnings.warn("No block_size attribute on given digest object; " - f"Assuming {self.blocksize}.", - RuntimeWarning, 2) - blocksize = self.blocksize # pragma: no cover - - if len(key) > blocksize: - key = digest_cons(key).digest() - - self.block_size = blocksize - - key = key.ljust(blocksize, b'\0') - self._outer.update(key.translate(trans_5C)) - self._inner.update(key.translate(trans_36)) - if msg is not None: - self.update(msg) - - @property - def name(self): - if self._hmac: - return self._hmac.name - else: - return f"hmac-{self._inner.name}" - - def update(self, msg): - """Feed data from msg into this hashing object.""" - inst = self._hmac or self._inner - inst.update(msg) - - def copy(self): - """Return a separate copy of this hashing object. - - An update to this copy won't affect the original object. - """ - # Call __new__ directly to avoid the expensive __init__. - other = self.__class__.__new__(self.__class__) - other.digest_size = self.digest_size - other.block_size = self.block_size - if self._hmac: - other._hmac = self._hmac.copy() - other._inner = other._outer = None - else: - other._hmac = None - other._inner = self._inner.copy() - other._outer = self._outer.copy() - return other - - def _current(self): - """Return a hash object for the current state. - - To be used only internally with digest() and hexdigest(). - """ - if self._hmac: - return self._hmac - else: - h = self._outer.copy() - h.update(self._inner.digest()) - return h - - def digest(self): - """Return the hash value of this hashing object. - - This returns the hmac value as bytes. The object is - not altered in any way by this function; you can continue - updating the object after calling this function. - """ - h = self._current() - return h.digest() - - def hexdigest(self): - """Like digest(), but returns a string of hexadecimal digits instead. - """ - h = self._current() - return h.hexdigest() - - -def new(key, msg=None, digestmod=''): - """Create a new hashing object and return it. - - key: bytes or buffer, The starting key for the hash. - msg: bytes or buffer, Initial input for the hash, or None. - digestmod: A hash name suitable for hashlib.new(). *OR* - A hashlib constructor returning a new hash object. *OR* - A module supporting PEP 247. - - Required as of 3.8, despite its position after the optional - msg argument. Passing it as a keyword argument is - recommended, though not required for legacy API reasons. - - You can now feed arbitrary bytes into the object using its update() - method, and can ask for the hash value at any time by calling its digest() - or hexdigest() methods. - """ - return HMAC(key, msg, digestmod) - - -def digest(key, msg, digest): - """Fast inline implementation of HMAC. - - key: bytes or buffer, The key for the keyed hash object. - msg: bytes or buffer, Input message. - digest: A hash name suitable for hashlib.new() for best performance. *OR* - A hashlib constructor returning a new hash object. *OR* - A module supporting PEP 247. - """ - if _hashopenssl and isinstance(digest, (str, _functype)): - try: - return _hashopenssl.hmac_digest(key, msg, digest) - except OverflowError: - # OpenSSL's HMAC limits the size of the key to INT_MAX. - # Instead of falling back to HACL* implementation which - # may still not be supported due to a too large key, we - # directly switch to the pure Python fallback instead - # even if we could have used streaming HMAC for small keys - # but large messages. - return _compute_digest_fallback(key, msg, digest) - except _hashopenssl.UnsupportedDigestmodError: - pass - - if _hmac and isinstance(digest, str): - try: - return _hmac.compute_digest(key, msg, digest) - except (OverflowError, _hmac.UnknownHashError): - # HACL* HMAC limits the size of the key to UINT32_MAX - # so we fallback to the pure Python implementation even - # if streaming HMAC may have been used for small keys - # and large messages. - pass - - return _compute_digest_fallback(key, msg, digest) - - -def _compute_digest_fallback(key, msg, digest): - digest_cons = _get_digest_constructor(digest) - inner = digest_cons() - outer = digest_cons() - blocksize = getattr(inner, 'block_size', 64) - if len(key) > blocksize: - key = digest_cons(key).digest() - key = key.ljust(blocksize, b'\0') - inner.update(key.translate(trans_36)) - outer.update(key.translate(trans_5C)) - inner.update(msg) - outer.update(inner.digest()) - return outer.digest() diff --git a/Python314_4_x86_Template/Lib/html/__init__.py b/Python314_4_x86_Template/Lib/html/__init__.py deleted file mode 100644 index 1543460ca..000000000 --- a/Python314_4_x86_Template/Lib/html/__init__.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -General functions for HTML manipulation. -""" - -import re as _re -from html.entities import html5 as _html5 - - -__all__ = ['escape', 'unescape'] - - -def escape(s, quote=True): - """ - Replace special characters "&", "<" and ">" to HTML-safe sequences. - If the optional flag quote is true (the default), the quotation mark - characters, both double quote (") and single quote (') characters are also - translated. - """ - s = s.replace("&", "&amp;") # Must be done first! - s = s.replace("<", "&lt;") - s = s.replace(">", "&gt;") - if quote: - s = s.replace('"', "&quot;") - s = s.replace('\'', "&#x27;") - return s - - -# see https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state - -_invalid_charrefs = { - 0x00: '\ufffd', # REPLACEMENT CHARACTER - 0x0d: '\r', # CARRIAGE RETURN - 0x80: '\u20ac', # EURO SIGN - 0x81: '\x81', # <control> - 0x82: '\u201a', # SINGLE LOW-9 QUOTATION MARK - 0x83: '\u0192', # LATIN SMALL LETTER F WITH HOOK - 0x84: '\u201e', # DOUBLE LOW-9 QUOTATION MARK - 0x85: '\u2026', # HORIZONTAL ELLIPSIS - 0x86: '\u2020', # DAGGER - 0x87: '\u2021', # DOUBLE DAGGER - 0x88: '\u02c6', # MODIFIER LETTER CIRCUMFLEX ACCENT - 0x89: '\u2030', # PER MILLE SIGN - 0x8a: '\u0160', # LATIN CAPITAL LETTER S WITH CARON - 0x8b: '\u2039', # SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x8c: '\u0152', # LATIN CAPITAL LIGATURE OE - 0x8d: '\x8d', # <control> - 0x8e: '\u017d', # LATIN CAPITAL LETTER Z WITH CARON - 0x8f: '\x8f', # <control> - 0x90: '\x90', # <control> - 0x91: '\u2018', # LEFT SINGLE QUOTATION MARK - 0x92: '\u2019', # RIGHT SINGLE QUOTATION MARK - 0x93: '\u201c', # LEFT DOUBLE QUOTATION MARK - 0x94: '\u201d', # RIGHT DOUBLE QUOTATION MARK - 0x95: '\u2022', # BULLET - 0x96: '\u2013', # EN DASH - 0x97: '\u2014', # EM DASH - 0x98: '\u02dc', # SMALL TILDE - 0x99: '\u2122', # TRADE MARK SIGN - 0x9a: '\u0161', # LATIN SMALL LETTER S WITH CARON - 0x9b: '\u203a', # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x9c: '\u0153', # LATIN SMALL LIGATURE OE - 0x9d: '\x9d', # <control> - 0x9e: '\u017e', # LATIN SMALL LETTER Z WITH CARON - 0x9f: '\u0178', # LATIN CAPITAL LETTER Y WITH DIAERESIS -} - -_invalid_codepoints = { - # 0x0001 to 0x0008 - 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, - # 0x000E to 0x001F - 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, - 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - # 0x007F to 0x009F - 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, - 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - # 0xFDD0 to 0xFDEF - 0xfdd0, 0xfdd1, 0xfdd2, 0xfdd3, 0xfdd4, 0xfdd5, 0xfdd6, 0xfdd7, 0xfdd8, - 0xfdd9, 0xfdda, 0xfddb, 0xfddc, 0xfddd, 0xfdde, 0xfddf, 0xfde0, 0xfde1, - 0xfde2, 0xfde3, 0xfde4, 0xfde5, 0xfde6, 0xfde7, 0xfde8, 0xfde9, 0xfdea, - 0xfdeb, 0xfdec, 0xfded, 0xfdee, 0xfdef, - # others - 0xb, 0xfffe, 0xffff, 0x1fffe, 0x1ffff, 0x2fffe, 0x2ffff, 0x3fffe, 0x3ffff, - 0x4fffe, 0x4ffff, 0x5fffe, 0x5ffff, 0x6fffe, 0x6ffff, 0x7fffe, 0x7ffff, - 0x8fffe, 0x8ffff, 0x9fffe, 0x9ffff, 0xafffe, 0xaffff, 0xbfffe, 0xbffff, - 0xcfffe, 0xcffff, 0xdfffe, 0xdffff, 0xefffe, 0xeffff, 0xffffe, 0xfffff, - 0x10fffe, 0x10ffff -} - - -def _replace_charref(s): - s = s.group(1) - if s[0] == '#': - # numeric charref - if s[1] in 'xX': - num = int(s[2:].rstrip(';'), 16) - else: - num = int(s[1:].rstrip(';')) - if num in _invalid_charrefs: - return _invalid_charrefs[num] - if 0xD800 <= num <= 0xDFFF or num > 0x10FFFF: - return '\uFFFD' - if num in _invalid_codepoints: - return '' - return chr(num) - else: - # named charref - if s in _html5: - return _html5[s] - # find the longest matching name (as defined by the standard) - for x in range(len(s)-1, 1, -1): - if s[:x] in _html5: - return _html5[s[:x]] + s[x:] - else: - return '&' + s - - -_charref = _re.compile(r'&(#[0-9]+;?' - r'|#[xX][0-9a-fA-F]+;?' - r'|[^\t\n\f <&#;]{1,32};?)') - -def unescape(s): - """ - Convert all named and numeric character references (e.g. &gt;, &#62;, - &x3e;) in the string s to the corresponding unicode characters. - This function uses the rules defined by the HTML 5 standard - for both valid and invalid character references, and the list of - HTML 5 named character references defined in html.entities.html5. - """ - if '&' not in s: - return s - return _charref.sub(_replace_charref, s) diff --git a/Python314_4_x86_Template/Lib/html/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/html/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 6185d804cc5e07b2426b7ea1a82df06c49fb2fb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5857 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 diff --git a/Python314_4_x86_Template/Lib/html/__pycache__/entities.cpython-314.pyc b/Python314_4_x86_Template/Lib/html/__pycache__/entities.cpython-314.pyc deleted file mode 100644 index d9996f209ffbd44df9337338d8243d4bad693d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97086 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 L&F?+>$Rqzh6&@`n diff --git a/Python314_4_x86_Template/Lib/html/__pycache__/parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/html/__pycache__/parser.cpython-314.pyc deleted file mode 100644 index db54fc65be233ce023bd1e4322884dae84775150..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23077 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 JM|X@A{|D%(DCYnG diff --git a/Python314_4_x86_Template/Lib/html/entities.py b/Python314_4_x86_Template/Lib/html/entities.py deleted file mode 100644 index eb6dc1219..000000000 --- a/Python314_4_x86_Template/Lib/html/entities.py +++ /dev/null @@ -1,2513 +0,0 @@ -"""HTML character entity references.""" - -__all__ = ['html5', 'name2codepoint', 'codepoint2name', 'entitydefs'] - - -# maps HTML4 entity name to the Unicode code point -name2codepoint = { - 'AElig': 0x00c6, # latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 - 'Aacute': 0x00c1, # latin capital letter A with acute, U+00C1 ISOlat1 - 'Acirc': 0x00c2, # latin capital letter A with circumflex, U+00C2 ISOlat1 - 'Agrave': 0x00c0, # latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 - 'Alpha': 0x0391, # greek capital letter alpha, U+0391 - 'Aring': 0x00c5, # latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 - 'Atilde': 0x00c3, # latin capital letter A with tilde, U+00C3 ISOlat1 - 'Auml': 0x00c4, # latin capital letter A with diaeresis, U+00C4 ISOlat1 - 'Beta': 0x0392, # greek capital letter beta, U+0392 - 'Ccedil': 0x00c7, # latin capital letter C with cedilla, U+00C7 ISOlat1 - 'Chi': 0x03a7, # greek capital letter chi, U+03A7 - 'Dagger': 0x2021, # double dagger, U+2021 ISOpub - 'Delta': 0x0394, # greek capital letter delta, U+0394 ISOgrk3 - 'ETH': 0x00d0, # latin capital letter ETH, U+00D0 ISOlat1 - 'Eacute': 0x00c9, # latin capital letter E with acute, U+00C9 ISOlat1 - 'Ecirc': 0x00ca, # latin capital letter E with circumflex, U+00CA ISOlat1 - 'Egrave': 0x00c8, # latin capital letter E with grave, U+00C8 ISOlat1 - 'Epsilon': 0x0395, # greek capital letter epsilon, U+0395 - 'Eta': 0x0397, # greek capital letter eta, U+0397 - 'Euml': 0x00cb, # latin capital letter E with diaeresis, U+00CB ISOlat1 - 'Gamma': 0x0393, # greek capital letter gamma, U+0393 ISOgrk3 - 'Iacute': 0x00cd, # latin capital letter I with acute, U+00CD ISOlat1 - 'Icirc': 0x00ce, # latin capital letter I with circumflex, U+00CE ISOlat1 - 'Igrave': 0x00cc, # latin capital letter I with grave, U+00CC ISOlat1 - 'Iota': 0x0399, # greek capital letter iota, U+0399 - 'Iuml': 0x00cf, # latin capital letter I with diaeresis, U+00CF ISOlat1 - 'Kappa': 0x039a, # greek capital letter kappa, U+039A - 'Lambda': 0x039b, # greek capital letter lambda, U+039B ISOgrk3 - 'Mu': 0x039c, # greek capital letter mu, U+039C - 'Ntilde': 0x00d1, # latin capital letter N with tilde, U+00D1 ISOlat1 - 'Nu': 0x039d, # greek capital letter nu, U+039D - 'OElig': 0x0152, # latin capital ligature OE, U+0152 ISOlat2 - 'Oacute': 0x00d3, # latin capital letter O with acute, U+00D3 ISOlat1 - 'Ocirc': 0x00d4, # latin capital letter O with circumflex, U+00D4 ISOlat1 - 'Ograve': 0x00d2, # latin capital letter O with grave, U+00D2 ISOlat1 - 'Omega': 0x03a9, # greek capital letter omega, U+03A9 ISOgrk3 - 'Omicron': 0x039f, # greek capital letter omicron, U+039F - 'Oslash': 0x00d8, # latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 - 'Otilde': 0x00d5, # latin capital letter O with tilde, U+00D5 ISOlat1 - 'Ouml': 0x00d6, # latin capital letter O with diaeresis, U+00D6 ISOlat1 - 'Phi': 0x03a6, # greek capital letter phi, U+03A6 ISOgrk3 - 'Pi': 0x03a0, # greek capital letter pi, U+03A0 ISOgrk3 - 'Prime': 0x2033, # double prime = seconds = inches, U+2033 ISOtech - 'Psi': 0x03a8, # greek capital letter psi, U+03A8 ISOgrk3 - 'Rho': 0x03a1, # greek capital letter rho, U+03A1 - 'Scaron': 0x0160, # latin capital letter S with caron, U+0160 ISOlat2 - 'Sigma': 0x03a3, # greek capital letter sigma, U+03A3 ISOgrk3 - 'THORN': 0x00de, # latin capital letter THORN, U+00DE ISOlat1 - 'Tau': 0x03a4, # greek capital letter tau, U+03A4 - 'Theta': 0x0398, # greek capital letter theta, U+0398 ISOgrk3 - 'Uacute': 0x00da, # latin capital letter U with acute, U+00DA ISOlat1 - 'Ucirc': 0x00db, # latin capital letter U with circumflex, U+00DB ISOlat1 - 'Ugrave': 0x00d9, # latin capital letter U with grave, U+00D9 ISOlat1 - 'Upsilon': 0x03a5, # greek capital letter upsilon, U+03A5 ISOgrk3 - 'Uuml': 0x00dc, # latin capital letter U with diaeresis, U+00DC ISOlat1 - 'Xi': 0x039e, # greek capital letter xi, U+039E ISOgrk3 - 'Yacute': 0x00dd, # latin capital letter Y with acute, U+00DD ISOlat1 - 'Yuml': 0x0178, # latin capital letter Y with diaeresis, U+0178 ISOlat2 - 'Zeta': 0x0396, # greek capital letter zeta, U+0396 - 'aacute': 0x00e1, # latin small letter a with acute, U+00E1 ISOlat1 - 'acirc': 0x00e2, # latin small letter a with circumflex, U+00E2 ISOlat1 - 'acute': 0x00b4, # acute accent = spacing acute, U+00B4 ISOdia - 'aelig': 0x00e6, # latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 - 'agrave': 0x00e0, # latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 - 'alefsym': 0x2135, # alef symbol = first transfinite cardinal, U+2135 NEW - 'alpha': 0x03b1, # greek small letter alpha, U+03B1 ISOgrk3 - 'amp': 0x0026, # ampersand, U+0026 ISOnum - 'and': 0x2227, # logical and = wedge, U+2227 ISOtech - 'ang': 0x2220, # angle, U+2220 ISOamso - 'aring': 0x00e5, # latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 - 'asymp': 0x2248, # almost equal to = asymptotic to, U+2248 ISOamsr - 'atilde': 0x00e3, # latin small letter a with tilde, U+00E3 ISOlat1 - 'auml': 0x00e4, # latin small letter a with diaeresis, U+00E4 ISOlat1 - 'bdquo': 0x201e, # double low-9 quotation mark, U+201E NEW - 'beta': 0x03b2, # greek small letter beta, U+03B2 ISOgrk3 - 'brvbar': 0x00a6, # broken bar = broken vertical bar, U+00A6 ISOnum - 'bull': 0x2022, # bullet = black small circle, U+2022 ISOpub - 'cap': 0x2229, # intersection = cap, U+2229 ISOtech - 'ccedil': 0x00e7, # latin small letter c with cedilla, U+00E7 ISOlat1 - 'cedil': 0x00b8, # cedilla = spacing cedilla, U+00B8 ISOdia - 'cent': 0x00a2, # cent sign, U+00A2 ISOnum - 'chi': 0x03c7, # greek small letter chi, U+03C7 ISOgrk3 - 'circ': 0x02c6, # modifier letter circumflex accent, U+02C6 ISOpub - 'clubs': 0x2663, # black club suit = shamrock, U+2663 ISOpub - 'cong': 0x2245, # approximately equal to, U+2245 ISOtech - 'copy': 0x00a9, # copyright sign, U+00A9 ISOnum - 'crarr': 0x21b5, # downwards arrow with corner leftwards = carriage return, U+21B5 NEW - 'cup': 0x222a, # union = cup, U+222A ISOtech - 'curren': 0x00a4, # currency sign, U+00A4 ISOnum - 'dArr': 0x21d3, # downwards double arrow, U+21D3 ISOamsa - 'dagger': 0x2020, # dagger, U+2020 ISOpub - 'darr': 0x2193, # downwards arrow, U+2193 ISOnum - 'deg': 0x00b0, # degree sign, U+00B0 ISOnum - 'delta': 0x03b4, # greek small letter delta, U+03B4 ISOgrk3 - 'diams': 0x2666, # black diamond suit, U+2666 ISOpub - 'divide': 0x00f7, # division sign, U+00F7 ISOnum - 'eacute': 0x00e9, # latin small letter e with acute, U+00E9 ISOlat1 - 'ecirc': 0x00ea, # latin small letter e with circumflex, U+00EA ISOlat1 - 'egrave': 0x00e8, # latin small letter e with grave, U+00E8 ISOlat1 - 'empty': 0x2205, # empty set = null set = diameter, U+2205 ISOamso - 'emsp': 0x2003, # em space, U+2003 ISOpub - 'ensp': 0x2002, # en space, U+2002 ISOpub - 'epsilon': 0x03b5, # greek small letter epsilon, U+03B5 ISOgrk3 - 'equiv': 0x2261, # identical to, U+2261 ISOtech - 'eta': 0x03b7, # greek small letter eta, U+03B7 ISOgrk3 - 'eth': 0x00f0, # latin small letter eth, U+00F0 ISOlat1 - 'euml': 0x00eb, # latin small letter e with diaeresis, U+00EB ISOlat1 - 'euro': 0x20ac, # euro sign, U+20AC NEW - 'exist': 0x2203, # there exists, U+2203 ISOtech - 'fnof': 0x0192, # latin small f with hook = function = florin, U+0192 ISOtech - 'forall': 0x2200, # for all, U+2200 ISOtech - 'frac12': 0x00bd, # vulgar fraction one half = fraction one half, U+00BD ISOnum - 'frac14': 0x00bc, # vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum - 'frac34': 0x00be, # vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum - 'frasl': 0x2044, # fraction slash, U+2044 NEW - 'gamma': 0x03b3, # greek small letter gamma, U+03B3 ISOgrk3 - 'ge': 0x2265, # greater-than or equal to, U+2265 ISOtech - 'gt': 0x003e, # greater-than sign, U+003E ISOnum - 'hArr': 0x21d4, # left right double arrow, U+21D4 ISOamsa - 'harr': 0x2194, # left right arrow, U+2194 ISOamsa - 'hearts': 0x2665, # black heart suit = valentine, U+2665 ISOpub - 'hellip': 0x2026, # horizontal ellipsis = three dot leader, U+2026 ISOpub - 'iacute': 0x00ed, # latin small letter i with acute, U+00ED ISOlat1 - 'icirc': 0x00ee, # latin small letter i with circumflex, U+00EE ISOlat1 - 'iexcl': 0x00a1, # inverted exclamation mark, U+00A1 ISOnum - 'igrave': 0x00ec, # latin small letter i with grave, U+00EC ISOlat1 - 'image': 0x2111, # blackletter capital I = imaginary part, U+2111 ISOamso - 'infin': 0x221e, # infinity, U+221E ISOtech - 'int': 0x222b, # integral, U+222B ISOtech - 'iota': 0x03b9, # greek small letter iota, U+03B9 ISOgrk3 - 'iquest': 0x00bf, # inverted question mark = turned question mark, U+00BF ISOnum - 'isin': 0x2208, # element of, U+2208 ISOtech - 'iuml': 0x00ef, # latin small letter i with diaeresis, U+00EF ISOlat1 - 'kappa': 0x03ba, # greek small letter kappa, U+03BA ISOgrk3 - 'lArr': 0x21d0, # leftwards double arrow, U+21D0 ISOtech - 'lambda': 0x03bb, # greek small letter lambda, U+03BB ISOgrk3 - 'lang': 0x2329, # left-pointing angle bracket = bra, U+2329 ISOtech - 'laquo': 0x00ab, # left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum - 'larr': 0x2190, # leftwards arrow, U+2190 ISOnum - 'lceil': 0x2308, # left ceiling = apl upstile, U+2308 ISOamsc - 'ldquo': 0x201c, # left double quotation mark, U+201C ISOnum - 'le': 0x2264, # less-than or equal to, U+2264 ISOtech - 'lfloor': 0x230a, # left floor = apl downstile, U+230A ISOamsc - 'lowast': 0x2217, # asterisk operator, U+2217 ISOtech - 'loz': 0x25ca, # lozenge, U+25CA ISOpub - 'lrm': 0x200e, # left-to-right mark, U+200E NEW RFC 2070 - 'lsaquo': 0x2039, # single left-pointing angle quotation mark, U+2039 ISO proposed - 'lsquo': 0x2018, # left single quotation mark, U+2018 ISOnum - 'lt': 0x003c, # less-than sign, U+003C ISOnum - 'macr': 0x00af, # macron = spacing macron = overline = APL overbar, U+00AF ISOdia - 'mdash': 0x2014, # em dash, U+2014 ISOpub - 'micro': 0x00b5, # micro sign, U+00B5 ISOnum - 'middot': 0x00b7, # middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum - 'minus': 0x2212, # minus sign, U+2212 ISOtech - 'mu': 0x03bc, # greek small letter mu, U+03BC ISOgrk3 - 'nabla': 0x2207, # nabla = backward difference, U+2207 ISOtech - 'nbsp': 0x00a0, # no-break space = non-breaking space, U+00A0 ISOnum - 'ndash': 0x2013, # en dash, U+2013 ISOpub - 'ne': 0x2260, # not equal to, U+2260 ISOtech - 'ni': 0x220b, # contains as member, U+220B ISOtech - 'not': 0x00ac, # not sign, U+00AC ISOnum - 'notin': 0x2209, # not an element of, U+2209 ISOtech - 'nsub': 0x2284, # not a subset of, U+2284 ISOamsn - 'ntilde': 0x00f1, # latin small letter n with tilde, U+00F1 ISOlat1 - 'nu': 0x03bd, # greek small letter nu, U+03BD ISOgrk3 - 'oacute': 0x00f3, # latin small letter o with acute, U+00F3 ISOlat1 - 'ocirc': 0x00f4, # latin small letter o with circumflex, U+00F4 ISOlat1 - 'oelig': 0x0153, # latin small ligature oe, U+0153 ISOlat2 - 'ograve': 0x00f2, # latin small letter o with grave, U+00F2 ISOlat1 - 'oline': 0x203e, # overline = spacing overscore, U+203E NEW - 'omega': 0x03c9, # greek small letter omega, U+03C9 ISOgrk3 - 'omicron': 0x03bf, # greek small letter omicron, U+03BF NEW - 'oplus': 0x2295, # circled plus = direct sum, U+2295 ISOamsb - 'or': 0x2228, # logical or = vee, U+2228 ISOtech - 'ordf': 0x00aa, # feminine ordinal indicator, U+00AA ISOnum - 'ordm': 0x00ba, # masculine ordinal indicator, U+00BA ISOnum - 'oslash': 0x00f8, # latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 - 'otilde': 0x00f5, # latin small letter o with tilde, U+00F5 ISOlat1 - 'otimes': 0x2297, # circled times = vector product, U+2297 ISOamsb - 'ouml': 0x00f6, # latin small letter o with diaeresis, U+00F6 ISOlat1 - 'para': 0x00b6, # pilcrow sign = paragraph sign, U+00B6 ISOnum - 'part': 0x2202, # partial differential, U+2202 ISOtech - 'permil': 0x2030, # per mille sign, U+2030 ISOtech - 'perp': 0x22a5, # up tack = orthogonal to = perpendicular, U+22A5 ISOtech - 'phi': 0x03c6, # greek small letter phi, U+03C6 ISOgrk3 - 'pi': 0x03c0, # greek small letter pi, U+03C0 ISOgrk3 - 'piv': 0x03d6, # greek pi symbol, U+03D6 ISOgrk3 - 'plusmn': 0x00b1, # plus-minus sign = plus-or-minus sign, U+00B1 ISOnum - 'pound': 0x00a3, # pound sign, U+00A3 ISOnum - 'prime': 0x2032, # prime = minutes = feet, U+2032 ISOtech - 'prod': 0x220f, # n-ary product = product sign, U+220F ISOamsb - 'prop': 0x221d, # proportional to, U+221D ISOtech - 'psi': 0x03c8, # greek small letter psi, U+03C8 ISOgrk3 - 'quot': 0x0022, # quotation mark = APL quote, U+0022 ISOnum - 'rArr': 0x21d2, # rightwards double arrow, U+21D2 ISOtech - 'radic': 0x221a, # square root = radical sign, U+221A ISOtech - 'rang': 0x232a, # right-pointing angle bracket = ket, U+232A ISOtech - 'raquo': 0x00bb, # right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum - 'rarr': 0x2192, # rightwards arrow, U+2192 ISOnum - 'rceil': 0x2309, # right ceiling, U+2309 ISOamsc - 'rdquo': 0x201d, # right double quotation mark, U+201D ISOnum - 'real': 0x211c, # blackletter capital R = real part symbol, U+211C ISOamso - 'reg': 0x00ae, # registered sign = registered trade mark sign, U+00AE ISOnum - 'rfloor': 0x230b, # right floor, U+230B ISOamsc - 'rho': 0x03c1, # greek small letter rho, U+03C1 ISOgrk3 - 'rlm': 0x200f, # right-to-left mark, U+200F NEW RFC 2070 - 'rsaquo': 0x203a, # single right-pointing angle quotation mark, U+203A ISO proposed - 'rsquo': 0x2019, # right single quotation mark, U+2019 ISOnum - 'sbquo': 0x201a, # single low-9 quotation mark, U+201A NEW - 'scaron': 0x0161, # latin small letter s with caron, U+0161 ISOlat2 - 'sdot': 0x22c5, # dot operator, U+22C5 ISOamsb - 'sect': 0x00a7, # section sign, U+00A7 ISOnum - 'shy': 0x00ad, # soft hyphen = discretionary hyphen, U+00AD ISOnum - 'sigma': 0x03c3, # greek small letter sigma, U+03C3 ISOgrk3 - 'sigmaf': 0x03c2, # greek small letter final sigma, U+03C2 ISOgrk3 - 'sim': 0x223c, # tilde operator = varies with = similar to, U+223C ISOtech - 'spades': 0x2660, # black spade suit, U+2660 ISOpub - 'sub': 0x2282, # subset of, U+2282 ISOtech - 'sube': 0x2286, # subset of or equal to, U+2286 ISOtech - 'sum': 0x2211, # n-ary summation, U+2211 ISOamsb - 'sup': 0x2283, # superset of, U+2283 ISOtech - 'sup1': 0x00b9, # superscript one = superscript digit one, U+00B9 ISOnum - 'sup2': 0x00b2, # superscript two = superscript digit two = squared, U+00B2 ISOnum - 'sup3': 0x00b3, # superscript three = superscript digit three = cubed, U+00B3 ISOnum - 'supe': 0x2287, # superset of or equal to, U+2287 ISOtech - 'szlig': 0x00df, # latin small letter sharp s = ess-zed, U+00DF ISOlat1 - 'tau': 0x03c4, # greek small letter tau, U+03C4 ISOgrk3 - 'there4': 0x2234, # therefore, U+2234 ISOtech - 'theta': 0x03b8, # greek small letter theta, U+03B8 ISOgrk3 - 'thetasym': 0x03d1, # greek small letter theta symbol, U+03D1 NEW - 'thinsp': 0x2009, # thin space, U+2009 ISOpub - 'thorn': 0x00fe, # latin small letter thorn with, U+00FE ISOlat1 - 'tilde': 0x02dc, # small tilde, U+02DC ISOdia - 'times': 0x00d7, # multiplication sign, U+00D7 ISOnum - 'trade': 0x2122, # trade mark sign, U+2122 ISOnum - 'uArr': 0x21d1, # upwards double arrow, U+21D1 ISOamsa - 'uacute': 0x00fa, # latin small letter u with acute, U+00FA ISOlat1 - 'uarr': 0x2191, # upwards arrow, U+2191 ISOnum - 'ucirc': 0x00fb, # latin small letter u with circumflex, U+00FB ISOlat1 - 'ugrave': 0x00f9, # latin small letter u with grave, U+00F9 ISOlat1 - 'uml': 0x00a8, # diaeresis = spacing diaeresis, U+00A8 ISOdia - 'upsih': 0x03d2, # greek upsilon with hook symbol, U+03D2 NEW - 'upsilon': 0x03c5, # greek small letter upsilon, U+03C5 ISOgrk3 - 'uuml': 0x00fc, # latin small letter u with diaeresis, U+00FC ISOlat1 - 'weierp': 0x2118, # script capital P = power set = Weierstrass p, U+2118 ISOamso - 'xi': 0x03be, # greek small letter xi, U+03BE ISOgrk3 - 'yacute': 0x00fd, # latin small letter y with acute, U+00FD ISOlat1 - 'yen': 0x00a5, # yen sign = yuan sign, U+00A5 ISOnum - 'yuml': 0x00ff, # latin small letter y with diaeresis, U+00FF ISOlat1 - 'zeta': 0x03b6, # greek small letter zeta, U+03B6 ISOgrk3 - 'zwj': 0x200d, # zero width joiner, U+200D NEW RFC 2070 - 'zwnj': 0x200c, # zero width non-joiner, U+200C NEW RFC 2070 -} - - -# HTML5 named character references -# Generated by Tools/build/parse_html5_entities.py -# from https://html.spec.whatwg.org/entities.json and -# https://html.spec.whatwg.org/multipage/named-characters.html. -# Map HTML5 named character references to the equivalent Unicode character(s). -html5 = { - 'Aacute': '\xc1', - 'aacute': '\xe1', - 'Aacute;': '\xc1', - 'aacute;': '\xe1', - 'Abreve;': '\u0102', - 'abreve;': '\u0103', - 'ac;': '\u223e', - 'acd;': '\u223f', - 'acE;': '\u223e\u0333', - 'Acirc': '\xc2', - 'acirc': '\xe2', - 'Acirc;': '\xc2', - 'acirc;': '\xe2', - 'acute': '\xb4', - 'acute;': '\xb4', - 'Acy;': '\u0410', - 'acy;': '\u0430', - 'AElig': '\xc6', - 'aelig': '\xe6', - 'AElig;': '\xc6', - 'aelig;': '\xe6', - 'af;': '\u2061', - 'Afr;': '\U0001d504', - 'afr;': '\U0001d51e', - 'Agrave': '\xc0', - 'agrave': '\xe0', - 'Agrave;': '\xc0', - 'agrave;': '\xe0', - 'alefsym;': '\u2135', - 'aleph;': '\u2135', - 'Alpha;': '\u0391', - 'alpha;': '\u03b1', - 'Amacr;': '\u0100', - 'amacr;': '\u0101', - 'amalg;': '\u2a3f', - 'AMP': '&', - 'amp': '&', - 'AMP;': '&', - 'amp;': '&', - 'And;': '\u2a53', - 'and;': '\u2227', - 'andand;': '\u2a55', - 'andd;': '\u2a5c', - 'andslope;': '\u2a58', - 'andv;': '\u2a5a', - 'ang;': '\u2220', - 'ange;': '\u29a4', - 'angle;': '\u2220', - 'angmsd;': '\u2221', - 'angmsdaa;': '\u29a8', - 'angmsdab;': '\u29a9', - 'angmsdac;': '\u29aa', - 'angmsdad;': '\u29ab', - 'angmsdae;': '\u29ac', - 'angmsdaf;': '\u29ad', - 'angmsdag;': '\u29ae', - 'angmsdah;': '\u29af', - 'angrt;': '\u221f', - 'angrtvb;': '\u22be', - 'angrtvbd;': '\u299d', - 'angsph;': '\u2222', - 'angst;': '\xc5', - 'angzarr;': '\u237c', - 'Aogon;': '\u0104', - 'aogon;': '\u0105', - 'Aopf;': '\U0001d538', - 'aopf;': '\U0001d552', - 'ap;': '\u2248', - 'apacir;': '\u2a6f', - 'apE;': '\u2a70', - 'ape;': '\u224a', - 'apid;': '\u224b', - 'apos;': "'", - 'ApplyFunction;': '\u2061', - 'approx;': '\u2248', - 'approxeq;': '\u224a', - 'Aring': '\xc5', - 'aring': '\xe5', - 'Aring;': '\xc5', - 'aring;': '\xe5', - 'Ascr;': '\U0001d49c', - 'ascr;': '\U0001d4b6', - 'Assign;': '\u2254', - 'ast;': '*', - 'asymp;': '\u2248', - 'asympeq;': '\u224d', - 'Atilde': '\xc3', - 'atilde': '\xe3', - 'Atilde;': '\xc3', - 'atilde;': '\xe3', - 'Auml': '\xc4', - 'auml': '\xe4', - 'Auml;': '\xc4', - 'auml;': '\xe4', - 'awconint;': '\u2233', - 'awint;': '\u2a11', - 'backcong;': '\u224c', - 'backepsilon;': '\u03f6', - 'backprime;': '\u2035', - 'backsim;': '\u223d', - 'backsimeq;': '\u22cd', - 'Backslash;': '\u2216', - 'Barv;': '\u2ae7', - 'barvee;': '\u22bd', - 'Barwed;': '\u2306', - 'barwed;': '\u2305', - 'barwedge;': '\u2305', - 'bbrk;': '\u23b5', - 'bbrktbrk;': '\u23b6', - 'bcong;': '\u224c', - 'Bcy;': '\u0411', - 'bcy;': '\u0431', - 'bdquo;': '\u201e', - 'becaus;': '\u2235', - 'Because;': '\u2235', - 'because;': '\u2235', - 'bemptyv;': '\u29b0', - 'bepsi;': '\u03f6', - 'bernou;': '\u212c', - 'Bernoullis;': '\u212c', - 'Beta;': '\u0392', - 'beta;': '\u03b2', - 'beth;': '\u2136', - 'between;': '\u226c', - 'Bfr;': '\U0001d505', - 'bfr;': '\U0001d51f', - 'bigcap;': '\u22c2', - 'bigcirc;': '\u25ef', - 'bigcup;': '\u22c3', - 'bigodot;': '\u2a00', - 'bigoplus;': '\u2a01', - 'bigotimes;': '\u2a02', - 'bigsqcup;': '\u2a06', - 'bigstar;': '\u2605', - 'bigtriangledown;': '\u25bd', - 'bigtriangleup;': '\u25b3', - 'biguplus;': '\u2a04', - 'bigvee;': '\u22c1', - 'bigwedge;': '\u22c0', - 'bkarow;': '\u290d', - 'blacklozenge;': '\u29eb', - 'blacksquare;': '\u25aa', - 'blacktriangle;': '\u25b4', - 'blacktriangledown;': '\u25be', - 'blacktriangleleft;': '\u25c2', - 'blacktriangleright;': '\u25b8', - 'blank;': '\u2423', - 'blk12;': '\u2592', - 'blk14;': '\u2591', - 'blk34;': '\u2593', - 'block;': '\u2588', - 'bne;': '=\u20e5', - 'bnequiv;': '\u2261\u20e5', - 'bNot;': '\u2aed', - 'bnot;': '\u2310', - 'Bopf;': '\U0001d539', - 'bopf;': '\U0001d553', - 'bot;': '\u22a5', - 'bottom;': '\u22a5', - 'bowtie;': '\u22c8', - 'boxbox;': '\u29c9', - 'boxDL;': '\u2557', - 'boxDl;': '\u2556', - 'boxdL;': '\u2555', - 'boxdl;': '\u2510', - 'boxDR;': '\u2554', - 'boxDr;': '\u2553', - 'boxdR;': '\u2552', - 'boxdr;': '\u250c', - 'boxH;': '\u2550', - 'boxh;': '\u2500', - 'boxHD;': '\u2566', - 'boxHd;': '\u2564', - 'boxhD;': '\u2565', - 'boxhd;': '\u252c', - 'boxHU;': '\u2569', - 'boxHu;': '\u2567', - 'boxhU;': '\u2568', - 'boxhu;': '\u2534', - 'boxminus;': '\u229f', - 'boxplus;': '\u229e', - 'boxtimes;': '\u22a0', - 'boxUL;': '\u255d', - 'boxUl;': '\u255c', - 'boxuL;': '\u255b', - 'boxul;': '\u2518', - 'boxUR;': '\u255a', - 'boxUr;': '\u2559', - 'boxuR;': '\u2558', - 'boxur;': '\u2514', - 'boxV;': '\u2551', - 'boxv;': '\u2502', - 'boxVH;': '\u256c', - 'boxVh;': '\u256b', - 'boxvH;': '\u256a', - 'boxvh;': '\u253c', - 'boxVL;': '\u2563', - 'boxVl;': '\u2562', - 'boxvL;': '\u2561', - 'boxvl;': '\u2524', - 'boxVR;': '\u2560', - 'boxVr;': '\u255f', - 'boxvR;': '\u255e', - 'boxvr;': '\u251c', - 'bprime;': '\u2035', - 'Breve;': '\u02d8', - 'breve;': '\u02d8', - 'brvbar': '\xa6', - 'brvbar;': '\xa6', - 'Bscr;': '\u212c', - 'bscr;': '\U0001d4b7', - 'bsemi;': '\u204f', - 'bsim;': '\u223d', - 'bsime;': '\u22cd', - 'bsol;': '\\', - 'bsolb;': '\u29c5', - 'bsolhsub;': '\u27c8', - 'bull;': '\u2022', - 'bullet;': '\u2022', - 'bump;': '\u224e', - 'bumpE;': '\u2aae', - 'bumpe;': '\u224f', - 'Bumpeq;': '\u224e', - 'bumpeq;': '\u224f', - 'Cacute;': '\u0106', - 'cacute;': '\u0107', - 'Cap;': '\u22d2', - 'cap;': '\u2229', - 'capand;': '\u2a44', - 'capbrcup;': '\u2a49', - 'capcap;': '\u2a4b', - 'capcup;': '\u2a47', - 'capdot;': '\u2a40', - 'CapitalDifferentialD;': '\u2145', - 'caps;': '\u2229\ufe00', - 'caret;': '\u2041', - 'caron;': '\u02c7', - 'Cayleys;': '\u212d', - 'ccaps;': '\u2a4d', - 'Ccaron;': '\u010c', - 'ccaron;': '\u010d', - 'Ccedil': '\xc7', - 'ccedil': '\xe7', - 'Ccedil;': '\xc7', - 'ccedil;': '\xe7', - 'Ccirc;': '\u0108', - 'ccirc;': '\u0109', - 'Cconint;': '\u2230', - 'ccups;': '\u2a4c', - 'ccupssm;': '\u2a50', - 'Cdot;': '\u010a', - 'cdot;': '\u010b', - 'cedil': '\xb8', - 'cedil;': '\xb8', - 'Cedilla;': '\xb8', - 'cemptyv;': '\u29b2', - 'cent': '\xa2', - 'cent;': '\xa2', - 'CenterDot;': '\xb7', - 'centerdot;': '\xb7', - 'Cfr;': '\u212d', - 'cfr;': '\U0001d520', - 'CHcy;': '\u0427', - 'chcy;': '\u0447', - 'check;': '\u2713', - 'checkmark;': '\u2713', - 'Chi;': '\u03a7', - 'chi;': '\u03c7', - 'cir;': '\u25cb', - 'circ;': '\u02c6', - 'circeq;': '\u2257', - 'circlearrowleft;': '\u21ba', - 'circlearrowright;': '\u21bb', - 'circledast;': '\u229b', - 'circledcirc;': '\u229a', - 'circleddash;': '\u229d', - 'CircleDot;': '\u2299', - 'circledR;': '\xae', - 'circledS;': '\u24c8', - 'CircleMinus;': '\u2296', - 'CirclePlus;': '\u2295', - 'CircleTimes;': '\u2297', - 'cirE;': '\u29c3', - 'cire;': '\u2257', - 'cirfnint;': '\u2a10', - 'cirmid;': '\u2aef', - 'cirscir;': '\u29c2', - 'ClockwiseContourIntegral;': '\u2232', - 'CloseCurlyDoubleQuote;': '\u201d', - 'CloseCurlyQuote;': '\u2019', - 'clubs;': '\u2663', - 'clubsuit;': '\u2663', - 'Colon;': '\u2237', - 'colon;': ':', - 'Colone;': '\u2a74', - 'colone;': '\u2254', - 'coloneq;': '\u2254', - 'comma;': ',', - 'commat;': '@', - 'comp;': '\u2201', - 'compfn;': '\u2218', - 'complement;': '\u2201', - 'complexes;': '\u2102', - 'cong;': '\u2245', - 'congdot;': '\u2a6d', - 'Congruent;': '\u2261', - 'Conint;': '\u222f', - 'conint;': '\u222e', - 'ContourIntegral;': '\u222e', - 'Copf;': '\u2102', - 'copf;': '\U0001d554', - 'coprod;': '\u2210', - 'Coproduct;': '\u2210', - 'COPY': '\xa9', - 'copy': '\xa9', - 'COPY;': '\xa9', - 'copy;': '\xa9', - 'copysr;': '\u2117', - 'CounterClockwiseContourIntegral;': '\u2233', - 'crarr;': '\u21b5', - 'Cross;': '\u2a2f', - 'cross;': '\u2717', - 'Cscr;': '\U0001d49e', - 'cscr;': '\U0001d4b8', - 'csub;': '\u2acf', - 'csube;': '\u2ad1', - 'csup;': '\u2ad0', - 'csupe;': '\u2ad2', - 'ctdot;': '\u22ef', - 'cudarrl;': '\u2938', - 'cudarrr;': '\u2935', - 'cuepr;': '\u22de', - 'cuesc;': '\u22df', - 'cularr;': '\u21b6', - 'cularrp;': '\u293d', - 'Cup;': '\u22d3', - 'cup;': '\u222a', - 'cupbrcap;': '\u2a48', - 'CupCap;': '\u224d', - 'cupcap;': '\u2a46', - 'cupcup;': '\u2a4a', - 'cupdot;': '\u228d', - 'cupor;': '\u2a45', - 'cups;': '\u222a\ufe00', - 'curarr;': '\u21b7', - 'curarrm;': '\u293c', - 'curlyeqprec;': '\u22de', - 'curlyeqsucc;': '\u22df', - 'curlyvee;': '\u22ce', - 'curlywedge;': '\u22cf', - 'curren': '\xa4', - 'curren;': '\xa4', - 'curvearrowleft;': '\u21b6', - 'curvearrowright;': '\u21b7', - 'cuvee;': '\u22ce', - 'cuwed;': '\u22cf', - 'cwconint;': '\u2232', - 'cwint;': '\u2231', - 'cylcty;': '\u232d', - 'Dagger;': '\u2021', - 'dagger;': '\u2020', - 'daleth;': '\u2138', - 'Darr;': '\u21a1', - 'dArr;': '\u21d3', - 'darr;': '\u2193', - 'dash;': '\u2010', - 'Dashv;': '\u2ae4', - 'dashv;': '\u22a3', - 'dbkarow;': '\u290f', - 'dblac;': '\u02dd', - 'Dcaron;': '\u010e', - 'dcaron;': '\u010f', - 'Dcy;': '\u0414', - 'dcy;': '\u0434', - 'DD;': '\u2145', - 'dd;': '\u2146', - 'ddagger;': '\u2021', - 'ddarr;': '\u21ca', - 'DDotrahd;': '\u2911', - 'ddotseq;': '\u2a77', - 'deg': '\xb0', - 'deg;': '\xb0', - 'Del;': '\u2207', - 'Delta;': '\u0394', - 'delta;': '\u03b4', - 'demptyv;': '\u29b1', - 'dfisht;': '\u297f', - 'Dfr;': '\U0001d507', - 'dfr;': '\U0001d521', - 'dHar;': '\u2965', - 'dharl;': '\u21c3', - 'dharr;': '\u21c2', - 'DiacriticalAcute;': '\xb4', - 'DiacriticalDot;': '\u02d9', - 'DiacriticalDoubleAcute;': '\u02dd', - 'DiacriticalGrave;': '`', - 'DiacriticalTilde;': '\u02dc', - 'diam;': '\u22c4', - 'Diamond;': '\u22c4', - 'diamond;': '\u22c4', - 'diamondsuit;': '\u2666', - 'diams;': '\u2666', - 'die;': '\xa8', - 'DifferentialD;': '\u2146', - 'digamma;': '\u03dd', - 'disin;': '\u22f2', - 'div;': '\xf7', - 'divide': '\xf7', - 'divide;': '\xf7', - 'divideontimes;': '\u22c7', - 'divonx;': '\u22c7', - 'DJcy;': '\u0402', - 'djcy;': '\u0452', - 'dlcorn;': '\u231e', - 'dlcrop;': '\u230d', - 'dollar;': '$', - 'Dopf;': '\U0001d53b', - 'dopf;': '\U0001d555', - 'Dot;': '\xa8', - 'dot;': '\u02d9', - 'DotDot;': '\u20dc', - 'doteq;': '\u2250', - 'doteqdot;': '\u2251', - 'DotEqual;': '\u2250', - 'dotminus;': '\u2238', - 'dotplus;': '\u2214', - 'dotsquare;': '\u22a1', - 'doublebarwedge;': '\u2306', - 'DoubleContourIntegral;': '\u222f', - 'DoubleDot;': '\xa8', - 'DoubleDownArrow;': '\u21d3', - 'DoubleLeftArrow;': '\u21d0', - 'DoubleLeftRightArrow;': '\u21d4', - 'DoubleLeftTee;': '\u2ae4', - 'DoubleLongLeftArrow;': '\u27f8', - 'DoubleLongLeftRightArrow;': '\u27fa', - 'DoubleLongRightArrow;': '\u27f9', - 'DoubleRightArrow;': '\u21d2', - 'DoubleRightTee;': '\u22a8', - 'DoubleUpArrow;': '\u21d1', - 'DoubleUpDownArrow;': '\u21d5', - 'DoubleVerticalBar;': '\u2225', - 'DownArrow;': '\u2193', - 'Downarrow;': '\u21d3', - 'downarrow;': '\u2193', - 'DownArrowBar;': '\u2913', - 'DownArrowUpArrow;': '\u21f5', - 'DownBreve;': '\u0311', - 'downdownarrows;': '\u21ca', - 'downharpoonleft;': '\u21c3', - 'downharpoonright;': '\u21c2', - 'DownLeftRightVector;': '\u2950', - 'DownLeftTeeVector;': '\u295e', - 'DownLeftVector;': '\u21bd', - 'DownLeftVectorBar;': '\u2956', - 'DownRightTeeVector;': '\u295f', - 'DownRightVector;': '\u21c1', - 'DownRightVectorBar;': '\u2957', - 'DownTee;': '\u22a4', - 'DownTeeArrow;': '\u21a7', - 'drbkarow;': '\u2910', - 'drcorn;': '\u231f', - 'drcrop;': '\u230c', - 'Dscr;': '\U0001d49f', - 'dscr;': '\U0001d4b9', - 'DScy;': '\u0405', - 'dscy;': '\u0455', - 'dsol;': '\u29f6', - 'Dstrok;': '\u0110', - 'dstrok;': '\u0111', - 'dtdot;': '\u22f1', - 'dtri;': '\u25bf', - 'dtrif;': '\u25be', - 'duarr;': '\u21f5', - 'duhar;': '\u296f', - 'dwangle;': '\u29a6', - 'DZcy;': '\u040f', - 'dzcy;': '\u045f', - 'dzigrarr;': '\u27ff', - 'Eacute': '\xc9', - 'eacute': '\xe9', - 'Eacute;': '\xc9', - 'eacute;': '\xe9', - 'easter;': '\u2a6e', - 'Ecaron;': '\u011a', - 'ecaron;': '\u011b', - 'ecir;': '\u2256', - 'Ecirc': '\xca', - 'ecirc': '\xea', - 'Ecirc;': '\xca', - 'ecirc;': '\xea', - 'ecolon;': '\u2255', - 'Ecy;': '\u042d', - 'ecy;': '\u044d', - 'eDDot;': '\u2a77', - 'Edot;': '\u0116', - 'eDot;': '\u2251', - 'edot;': '\u0117', - 'ee;': '\u2147', - 'efDot;': '\u2252', - 'Efr;': '\U0001d508', - 'efr;': '\U0001d522', - 'eg;': '\u2a9a', - 'Egrave': '\xc8', - 'egrave': '\xe8', - 'Egrave;': '\xc8', - 'egrave;': '\xe8', - 'egs;': '\u2a96', - 'egsdot;': '\u2a98', - 'el;': '\u2a99', - 'Element;': '\u2208', - 'elinters;': '\u23e7', - 'ell;': '\u2113', - 'els;': '\u2a95', - 'elsdot;': '\u2a97', - 'Emacr;': '\u0112', - 'emacr;': '\u0113', - 'empty;': '\u2205', - 'emptyset;': '\u2205', - 'EmptySmallSquare;': '\u25fb', - 'emptyv;': '\u2205', - 'EmptyVerySmallSquare;': '\u25ab', - 'emsp13;': '\u2004', - 'emsp14;': '\u2005', - 'emsp;': '\u2003', - 'ENG;': '\u014a', - 'eng;': '\u014b', - 'ensp;': '\u2002', - 'Eogon;': '\u0118', - 'eogon;': '\u0119', - 'Eopf;': '\U0001d53c', - 'eopf;': '\U0001d556', - 'epar;': '\u22d5', - 'eparsl;': '\u29e3', - 'eplus;': '\u2a71', - 'epsi;': '\u03b5', - 'Epsilon;': '\u0395', - 'epsilon;': '\u03b5', - 'epsiv;': '\u03f5', - 'eqcirc;': '\u2256', - 'eqcolon;': '\u2255', - 'eqsim;': '\u2242', - 'eqslantgtr;': '\u2a96', - 'eqslantless;': '\u2a95', - 'Equal;': '\u2a75', - 'equals;': '=', - 'EqualTilde;': '\u2242', - 'equest;': '\u225f', - 'Equilibrium;': '\u21cc', - 'equiv;': '\u2261', - 'equivDD;': '\u2a78', - 'eqvparsl;': '\u29e5', - 'erarr;': '\u2971', - 'erDot;': '\u2253', - 'Escr;': '\u2130', - 'escr;': '\u212f', - 'esdot;': '\u2250', - 'Esim;': '\u2a73', - 'esim;': '\u2242', - 'Eta;': '\u0397', - 'eta;': '\u03b7', - 'ETH': '\xd0', - 'eth': '\xf0', - 'ETH;': '\xd0', - 'eth;': '\xf0', - 'Euml': '\xcb', - 'euml': '\xeb', - 'Euml;': '\xcb', - 'euml;': '\xeb', - 'euro;': '\u20ac', - 'excl;': '!', - 'exist;': '\u2203', - 'Exists;': '\u2203', - 'expectation;': '\u2130', - 'ExponentialE;': '\u2147', - 'exponentiale;': '\u2147', - 'fallingdotseq;': '\u2252', - 'Fcy;': '\u0424', - 'fcy;': '\u0444', - 'female;': '\u2640', - 'ffilig;': '\ufb03', - 'fflig;': '\ufb00', - 'ffllig;': '\ufb04', - 'Ffr;': '\U0001d509', - 'ffr;': '\U0001d523', - 'filig;': '\ufb01', - 'FilledSmallSquare;': '\u25fc', - 'FilledVerySmallSquare;': '\u25aa', - 'fjlig;': 'fj', - 'flat;': '\u266d', - 'fllig;': '\ufb02', - 'fltns;': '\u25b1', - 'fnof;': '\u0192', - 'Fopf;': '\U0001d53d', - 'fopf;': '\U0001d557', - 'ForAll;': '\u2200', - 'forall;': '\u2200', - 'fork;': '\u22d4', - 'forkv;': '\u2ad9', - 'Fouriertrf;': '\u2131', - 'fpartint;': '\u2a0d', - 'frac12': '\xbd', - 'frac12;': '\xbd', - 'frac13;': '\u2153', - 'frac14': '\xbc', - 'frac14;': '\xbc', - 'frac15;': '\u2155', - 'frac16;': '\u2159', - 'frac18;': '\u215b', - 'frac23;': '\u2154', - 'frac25;': '\u2156', - 'frac34': '\xbe', - 'frac34;': '\xbe', - 'frac35;': '\u2157', - 'frac38;': '\u215c', - 'frac45;': '\u2158', - 'frac56;': '\u215a', - 'frac58;': '\u215d', - 'frac78;': '\u215e', - 'frasl;': '\u2044', - 'frown;': '\u2322', - 'Fscr;': '\u2131', - 'fscr;': '\U0001d4bb', - 'gacute;': '\u01f5', - 'Gamma;': '\u0393', - 'gamma;': '\u03b3', - 'Gammad;': '\u03dc', - 'gammad;': '\u03dd', - 'gap;': '\u2a86', - 'Gbreve;': '\u011e', - 'gbreve;': '\u011f', - 'Gcedil;': '\u0122', - 'Gcirc;': '\u011c', - 'gcirc;': '\u011d', - 'Gcy;': '\u0413', - 'gcy;': '\u0433', - 'Gdot;': '\u0120', - 'gdot;': '\u0121', - 'gE;': '\u2267', - 'ge;': '\u2265', - 'gEl;': '\u2a8c', - 'gel;': '\u22db', - 'geq;': '\u2265', - 'geqq;': '\u2267', - 'geqslant;': '\u2a7e', - 'ges;': '\u2a7e', - 'gescc;': '\u2aa9', - 'gesdot;': '\u2a80', - 'gesdoto;': '\u2a82', - 'gesdotol;': '\u2a84', - 'gesl;': '\u22db\ufe00', - 'gesles;': '\u2a94', - 'Gfr;': '\U0001d50a', - 'gfr;': '\U0001d524', - 'Gg;': '\u22d9', - 'gg;': '\u226b', - 'ggg;': '\u22d9', - 'gimel;': '\u2137', - 'GJcy;': '\u0403', - 'gjcy;': '\u0453', - 'gl;': '\u2277', - 'gla;': '\u2aa5', - 'glE;': '\u2a92', - 'glj;': '\u2aa4', - 'gnap;': '\u2a8a', - 'gnapprox;': '\u2a8a', - 'gnE;': '\u2269', - 'gne;': '\u2a88', - 'gneq;': '\u2a88', - 'gneqq;': '\u2269', - 'gnsim;': '\u22e7', - 'Gopf;': '\U0001d53e', - 'gopf;': '\U0001d558', - 'grave;': '`', - 'GreaterEqual;': '\u2265', - 'GreaterEqualLess;': '\u22db', - 'GreaterFullEqual;': '\u2267', - 'GreaterGreater;': '\u2aa2', - 'GreaterLess;': '\u2277', - 'GreaterSlantEqual;': '\u2a7e', - 'GreaterTilde;': '\u2273', - 'Gscr;': '\U0001d4a2', - 'gscr;': '\u210a', - 'gsim;': '\u2273', - 'gsime;': '\u2a8e', - 'gsiml;': '\u2a90', - 'GT': '>', - 'gt': '>', - 'GT;': '>', - 'Gt;': '\u226b', - 'gt;': '>', - 'gtcc;': '\u2aa7', - 'gtcir;': '\u2a7a', - 'gtdot;': '\u22d7', - 'gtlPar;': '\u2995', - 'gtquest;': '\u2a7c', - 'gtrapprox;': '\u2a86', - 'gtrarr;': '\u2978', - 'gtrdot;': '\u22d7', - 'gtreqless;': '\u22db', - 'gtreqqless;': '\u2a8c', - 'gtrless;': '\u2277', - 'gtrsim;': '\u2273', - 'gvertneqq;': '\u2269\ufe00', - 'gvnE;': '\u2269\ufe00', - 'Hacek;': '\u02c7', - 'hairsp;': '\u200a', - 'half;': '\xbd', - 'hamilt;': '\u210b', - 'HARDcy;': '\u042a', - 'hardcy;': '\u044a', - 'hArr;': '\u21d4', - 'harr;': '\u2194', - 'harrcir;': '\u2948', - 'harrw;': '\u21ad', - 'Hat;': '^', - 'hbar;': '\u210f', - 'Hcirc;': '\u0124', - 'hcirc;': '\u0125', - 'hearts;': '\u2665', - 'heartsuit;': '\u2665', - 'hellip;': '\u2026', - 'hercon;': '\u22b9', - 'Hfr;': '\u210c', - 'hfr;': '\U0001d525', - 'HilbertSpace;': '\u210b', - 'hksearow;': '\u2925', - 'hkswarow;': '\u2926', - 'hoarr;': '\u21ff', - 'homtht;': '\u223b', - 'hookleftarrow;': '\u21a9', - 'hookrightarrow;': '\u21aa', - 'Hopf;': '\u210d', - 'hopf;': '\U0001d559', - 'horbar;': '\u2015', - 'HorizontalLine;': '\u2500', - 'Hscr;': '\u210b', - 'hscr;': '\U0001d4bd', - 'hslash;': '\u210f', - 'Hstrok;': '\u0126', - 'hstrok;': '\u0127', - 'HumpDownHump;': '\u224e', - 'HumpEqual;': '\u224f', - 'hybull;': '\u2043', - 'hyphen;': '\u2010', - 'Iacute': '\xcd', - 'iacute': '\xed', - 'Iacute;': '\xcd', - 'iacute;': '\xed', - 'ic;': '\u2063', - 'Icirc': '\xce', - 'icirc': '\xee', - 'Icirc;': '\xce', - 'icirc;': '\xee', - 'Icy;': '\u0418', - 'icy;': '\u0438', - 'Idot;': '\u0130', - 'IEcy;': '\u0415', - 'iecy;': '\u0435', - 'iexcl': '\xa1', - 'iexcl;': '\xa1', - 'iff;': '\u21d4', - 'Ifr;': '\u2111', - 'ifr;': '\U0001d526', - 'Igrave': '\xcc', - 'igrave': '\xec', - 'Igrave;': '\xcc', - 'igrave;': '\xec', - 'ii;': '\u2148', - 'iiiint;': '\u2a0c', - 'iiint;': '\u222d', - 'iinfin;': '\u29dc', - 'iiota;': '\u2129', - 'IJlig;': '\u0132', - 'ijlig;': '\u0133', - 'Im;': '\u2111', - 'Imacr;': '\u012a', - 'imacr;': '\u012b', - 'image;': '\u2111', - 'ImaginaryI;': '\u2148', - 'imagline;': '\u2110', - 'imagpart;': '\u2111', - 'imath;': '\u0131', - 'imof;': '\u22b7', - 'imped;': '\u01b5', - 'Implies;': '\u21d2', - 'in;': '\u2208', - 'incare;': '\u2105', - 'infin;': '\u221e', - 'infintie;': '\u29dd', - 'inodot;': '\u0131', - 'Int;': '\u222c', - 'int;': '\u222b', - 'intcal;': '\u22ba', - 'integers;': '\u2124', - 'Integral;': '\u222b', - 'intercal;': '\u22ba', - 'Intersection;': '\u22c2', - 'intlarhk;': '\u2a17', - 'intprod;': '\u2a3c', - 'InvisibleComma;': '\u2063', - 'InvisibleTimes;': '\u2062', - 'IOcy;': '\u0401', - 'iocy;': '\u0451', - 'Iogon;': '\u012e', - 'iogon;': '\u012f', - 'Iopf;': '\U0001d540', - 'iopf;': '\U0001d55a', - 'Iota;': '\u0399', - 'iota;': '\u03b9', - 'iprod;': '\u2a3c', - 'iquest': '\xbf', - 'iquest;': '\xbf', - 'Iscr;': '\u2110', - 'iscr;': '\U0001d4be', - 'isin;': '\u2208', - 'isindot;': '\u22f5', - 'isinE;': '\u22f9', - 'isins;': '\u22f4', - 'isinsv;': '\u22f3', - 'isinv;': '\u2208', - 'it;': '\u2062', - 'Itilde;': '\u0128', - 'itilde;': '\u0129', - 'Iukcy;': '\u0406', - 'iukcy;': '\u0456', - 'Iuml': '\xcf', - 'iuml': '\xef', - 'Iuml;': '\xcf', - 'iuml;': '\xef', - 'Jcirc;': '\u0134', - 'jcirc;': '\u0135', - 'Jcy;': '\u0419', - 'jcy;': '\u0439', - 'Jfr;': '\U0001d50d', - 'jfr;': '\U0001d527', - 'jmath;': '\u0237', - 'Jopf;': '\U0001d541', - 'jopf;': '\U0001d55b', - 'Jscr;': '\U0001d4a5', - 'jscr;': '\U0001d4bf', - 'Jsercy;': '\u0408', - 'jsercy;': '\u0458', - 'Jukcy;': '\u0404', - 'jukcy;': '\u0454', - 'Kappa;': '\u039a', - 'kappa;': '\u03ba', - 'kappav;': '\u03f0', - 'Kcedil;': '\u0136', - 'kcedil;': '\u0137', - 'Kcy;': '\u041a', - 'kcy;': '\u043a', - 'Kfr;': '\U0001d50e', - 'kfr;': '\U0001d528', - 'kgreen;': '\u0138', - 'KHcy;': '\u0425', - 'khcy;': '\u0445', - 'KJcy;': '\u040c', - 'kjcy;': '\u045c', - 'Kopf;': '\U0001d542', - 'kopf;': '\U0001d55c', - 'Kscr;': '\U0001d4a6', - 'kscr;': '\U0001d4c0', - 'lAarr;': '\u21da', - 'Lacute;': '\u0139', - 'lacute;': '\u013a', - 'laemptyv;': '\u29b4', - 'lagran;': '\u2112', - 'Lambda;': '\u039b', - 'lambda;': '\u03bb', - 'Lang;': '\u27ea', - 'lang;': '\u27e8', - 'langd;': '\u2991', - 'langle;': '\u27e8', - 'lap;': '\u2a85', - 'Laplacetrf;': '\u2112', - 'laquo': '\xab', - 'laquo;': '\xab', - 'Larr;': '\u219e', - 'lArr;': '\u21d0', - 'larr;': '\u2190', - 'larrb;': '\u21e4', - 'larrbfs;': '\u291f', - 'larrfs;': '\u291d', - 'larrhk;': '\u21a9', - 'larrlp;': '\u21ab', - 'larrpl;': '\u2939', - 'larrsim;': '\u2973', - 'larrtl;': '\u21a2', - 'lat;': '\u2aab', - 'lAtail;': '\u291b', - 'latail;': '\u2919', - 'late;': '\u2aad', - 'lates;': '\u2aad\ufe00', - 'lBarr;': '\u290e', - 'lbarr;': '\u290c', - 'lbbrk;': '\u2772', - 'lbrace;': '{', - 'lbrack;': '[', - 'lbrke;': '\u298b', - 'lbrksld;': '\u298f', - 'lbrkslu;': '\u298d', - 'Lcaron;': '\u013d', - 'lcaron;': '\u013e', - 'Lcedil;': '\u013b', - 'lcedil;': '\u013c', - 'lceil;': '\u2308', - 'lcub;': '{', - 'Lcy;': '\u041b', - 'lcy;': '\u043b', - 'ldca;': '\u2936', - 'ldquo;': '\u201c', - 'ldquor;': '\u201e', - 'ldrdhar;': '\u2967', - 'ldrushar;': '\u294b', - 'ldsh;': '\u21b2', - 'lE;': '\u2266', - 'le;': '\u2264', - 'LeftAngleBracket;': '\u27e8', - 'LeftArrow;': '\u2190', - 'Leftarrow;': '\u21d0', - 'leftarrow;': '\u2190', - 'LeftArrowBar;': '\u21e4', - 'LeftArrowRightArrow;': '\u21c6', - 'leftarrowtail;': '\u21a2', - 'LeftCeiling;': '\u2308', - 'LeftDoubleBracket;': '\u27e6', - 'LeftDownTeeVector;': '\u2961', - 'LeftDownVector;': '\u21c3', - 'LeftDownVectorBar;': '\u2959', - 'LeftFloor;': '\u230a', - 'leftharpoondown;': '\u21bd', - 'leftharpoonup;': '\u21bc', - 'leftleftarrows;': '\u21c7', - 'LeftRightArrow;': '\u2194', - 'Leftrightarrow;': '\u21d4', - 'leftrightarrow;': '\u2194', - 'leftrightarrows;': '\u21c6', - 'leftrightharpoons;': '\u21cb', - 'leftrightsquigarrow;': '\u21ad', - 'LeftRightVector;': '\u294e', - 'LeftTee;': '\u22a3', - 'LeftTeeArrow;': '\u21a4', - 'LeftTeeVector;': '\u295a', - 'leftthreetimes;': '\u22cb', - 'LeftTriangle;': '\u22b2', - 'LeftTriangleBar;': '\u29cf', - 'LeftTriangleEqual;': '\u22b4', - 'LeftUpDownVector;': '\u2951', - 'LeftUpTeeVector;': '\u2960', - 'LeftUpVector;': '\u21bf', - 'LeftUpVectorBar;': '\u2958', - 'LeftVector;': '\u21bc', - 'LeftVectorBar;': '\u2952', - 'lEg;': '\u2a8b', - 'leg;': '\u22da', - 'leq;': '\u2264', - 'leqq;': '\u2266', - 'leqslant;': '\u2a7d', - 'les;': '\u2a7d', - 'lescc;': '\u2aa8', - 'lesdot;': '\u2a7f', - 'lesdoto;': '\u2a81', - 'lesdotor;': '\u2a83', - 'lesg;': '\u22da\ufe00', - 'lesges;': '\u2a93', - 'lessapprox;': '\u2a85', - 'lessdot;': '\u22d6', - 'lesseqgtr;': '\u22da', - 'lesseqqgtr;': '\u2a8b', - 'LessEqualGreater;': '\u22da', - 'LessFullEqual;': '\u2266', - 'LessGreater;': '\u2276', - 'lessgtr;': '\u2276', - 'LessLess;': '\u2aa1', - 'lesssim;': '\u2272', - 'LessSlantEqual;': '\u2a7d', - 'LessTilde;': '\u2272', - 'lfisht;': '\u297c', - 'lfloor;': '\u230a', - 'Lfr;': '\U0001d50f', - 'lfr;': '\U0001d529', - 'lg;': '\u2276', - 'lgE;': '\u2a91', - 'lHar;': '\u2962', - 'lhard;': '\u21bd', - 'lharu;': '\u21bc', - 'lharul;': '\u296a', - 'lhblk;': '\u2584', - 'LJcy;': '\u0409', - 'ljcy;': '\u0459', - 'Ll;': '\u22d8', - 'll;': '\u226a', - 'llarr;': '\u21c7', - 'llcorner;': '\u231e', - 'Lleftarrow;': '\u21da', - 'llhard;': '\u296b', - 'lltri;': '\u25fa', - 'Lmidot;': '\u013f', - 'lmidot;': '\u0140', - 'lmoust;': '\u23b0', - 'lmoustache;': '\u23b0', - 'lnap;': '\u2a89', - 'lnapprox;': '\u2a89', - 'lnE;': '\u2268', - 'lne;': '\u2a87', - 'lneq;': '\u2a87', - 'lneqq;': '\u2268', - 'lnsim;': '\u22e6', - 'loang;': '\u27ec', - 'loarr;': '\u21fd', - 'lobrk;': '\u27e6', - 'LongLeftArrow;': '\u27f5', - 'Longleftarrow;': '\u27f8', - 'longleftarrow;': '\u27f5', - 'LongLeftRightArrow;': '\u27f7', - 'Longleftrightarrow;': '\u27fa', - 'longleftrightarrow;': '\u27f7', - 'longmapsto;': '\u27fc', - 'LongRightArrow;': '\u27f6', - 'Longrightarrow;': '\u27f9', - 'longrightarrow;': '\u27f6', - 'looparrowleft;': '\u21ab', - 'looparrowright;': '\u21ac', - 'lopar;': '\u2985', - 'Lopf;': '\U0001d543', - 'lopf;': '\U0001d55d', - 'loplus;': '\u2a2d', - 'lotimes;': '\u2a34', - 'lowast;': '\u2217', - 'lowbar;': '_', - 'LowerLeftArrow;': '\u2199', - 'LowerRightArrow;': '\u2198', - 'loz;': '\u25ca', - 'lozenge;': '\u25ca', - 'lozf;': '\u29eb', - 'lpar;': '(', - 'lparlt;': '\u2993', - 'lrarr;': '\u21c6', - 'lrcorner;': '\u231f', - 'lrhar;': '\u21cb', - 'lrhard;': '\u296d', - 'lrm;': '\u200e', - 'lrtri;': '\u22bf', - 'lsaquo;': '\u2039', - 'Lscr;': '\u2112', - 'lscr;': '\U0001d4c1', - 'Lsh;': '\u21b0', - 'lsh;': '\u21b0', - 'lsim;': '\u2272', - 'lsime;': '\u2a8d', - 'lsimg;': '\u2a8f', - 'lsqb;': '[', - 'lsquo;': '\u2018', - 'lsquor;': '\u201a', - 'Lstrok;': '\u0141', - 'lstrok;': '\u0142', - 'LT': '<', - 'lt': '<', - 'LT;': '<', - 'Lt;': '\u226a', - 'lt;': '<', - 'ltcc;': '\u2aa6', - 'ltcir;': '\u2a79', - 'ltdot;': '\u22d6', - 'lthree;': '\u22cb', - 'ltimes;': '\u22c9', - 'ltlarr;': '\u2976', - 'ltquest;': '\u2a7b', - 'ltri;': '\u25c3', - 'ltrie;': '\u22b4', - 'ltrif;': '\u25c2', - 'ltrPar;': '\u2996', - 'lurdshar;': '\u294a', - 'luruhar;': '\u2966', - 'lvertneqq;': '\u2268\ufe00', - 'lvnE;': '\u2268\ufe00', - 'macr': '\xaf', - 'macr;': '\xaf', - 'male;': '\u2642', - 'malt;': '\u2720', - 'maltese;': '\u2720', - 'Map;': '\u2905', - 'map;': '\u21a6', - 'mapsto;': '\u21a6', - 'mapstodown;': '\u21a7', - 'mapstoleft;': '\u21a4', - 'mapstoup;': '\u21a5', - 'marker;': '\u25ae', - 'mcomma;': '\u2a29', - 'Mcy;': '\u041c', - 'mcy;': '\u043c', - 'mdash;': '\u2014', - 'mDDot;': '\u223a', - 'measuredangle;': '\u2221', - 'MediumSpace;': '\u205f', - 'Mellintrf;': '\u2133', - 'Mfr;': '\U0001d510', - 'mfr;': '\U0001d52a', - 'mho;': '\u2127', - 'micro': '\xb5', - 'micro;': '\xb5', - 'mid;': '\u2223', - 'midast;': '*', - 'midcir;': '\u2af0', - 'middot': '\xb7', - 'middot;': '\xb7', - 'minus;': '\u2212', - 'minusb;': '\u229f', - 'minusd;': '\u2238', - 'minusdu;': '\u2a2a', - 'MinusPlus;': '\u2213', - 'mlcp;': '\u2adb', - 'mldr;': '\u2026', - 'mnplus;': '\u2213', - 'models;': '\u22a7', - 'Mopf;': '\U0001d544', - 'mopf;': '\U0001d55e', - 'mp;': '\u2213', - 'Mscr;': '\u2133', - 'mscr;': '\U0001d4c2', - 'mstpos;': '\u223e', - 'Mu;': '\u039c', - 'mu;': '\u03bc', - 'multimap;': '\u22b8', - 'mumap;': '\u22b8', - 'nabla;': '\u2207', - 'Nacute;': '\u0143', - 'nacute;': '\u0144', - 'nang;': '\u2220\u20d2', - 'nap;': '\u2249', - 'napE;': '\u2a70\u0338', - 'napid;': '\u224b\u0338', - 'napos;': '\u0149', - 'napprox;': '\u2249', - 'natur;': '\u266e', - 'natural;': '\u266e', - 'naturals;': '\u2115', - 'nbsp': '\xa0', - 'nbsp;': '\xa0', - 'nbump;': '\u224e\u0338', - 'nbumpe;': '\u224f\u0338', - 'ncap;': '\u2a43', - 'Ncaron;': '\u0147', - 'ncaron;': '\u0148', - 'Ncedil;': '\u0145', - 'ncedil;': '\u0146', - 'ncong;': '\u2247', - 'ncongdot;': '\u2a6d\u0338', - 'ncup;': '\u2a42', - 'Ncy;': '\u041d', - 'ncy;': '\u043d', - 'ndash;': '\u2013', - 'ne;': '\u2260', - 'nearhk;': '\u2924', - 'neArr;': '\u21d7', - 'nearr;': '\u2197', - 'nearrow;': '\u2197', - 'nedot;': '\u2250\u0338', - 'NegativeMediumSpace;': '\u200b', - 'NegativeThickSpace;': '\u200b', - 'NegativeThinSpace;': '\u200b', - 'NegativeVeryThinSpace;': '\u200b', - 'nequiv;': '\u2262', - 'nesear;': '\u2928', - 'nesim;': '\u2242\u0338', - 'NestedGreaterGreater;': '\u226b', - 'NestedLessLess;': '\u226a', - 'NewLine;': '\n', - 'nexist;': '\u2204', - 'nexists;': '\u2204', - 'Nfr;': '\U0001d511', - 'nfr;': '\U0001d52b', - 'ngE;': '\u2267\u0338', - 'nge;': '\u2271', - 'ngeq;': '\u2271', - 'ngeqq;': '\u2267\u0338', - 'ngeqslant;': '\u2a7e\u0338', - 'nges;': '\u2a7e\u0338', - 'nGg;': '\u22d9\u0338', - 'ngsim;': '\u2275', - 'nGt;': '\u226b\u20d2', - 'ngt;': '\u226f', - 'ngtr;': '\u226f', - 'nGtv;': '\u226b\u0338', - 'nhArr;': '\u21ce', - 'nharr;': '\u21ae', - 'nhpar;': '\u2af2', - 'ni;': '\u220b', - 'nis;': '\u22fc', - 'nisd;': '\u22fa', - 'niv;': '\u220b', - 'NJcy;': '\u040a', - 'njcy;': '\u045a', - 'nlArr;': '\u21cd', - 'nlarr;': '\u219a', - 'nldr;': '\u2025', - 'nlE;': '\u2266\u0338', - 'nle;': '\u2270', - 'nLeftarrow;': '\u21cd', - 'nleftarrow;': '\u219a', - 'nLeftrightarrow;': '\u21ce', - 'nleftrightarrow;': '\u21ae', - 'nleq;': '\u2270', - 'nleqq;': '\u2266\u0338', - 'nleqslant;': '\u2a7d\u0338', - 'nles;': '\u2a7d\u0338', - 'nless;': '\u226e', - 'nLl;': '\u22d8\u0338', - 'nlsim;': '\u2274', - 'nLt;': '\u226a\u20d2', - 'nlt;': '\u226e', - 'nltri;': '\u22ea', - 'nltrie;': '\u22ec', - 'nLtv;': '\u226a\u0338', - 'nmid;': '\u2224', - 'NoBreak;': '\u2060', - 'NonBreakingSpace;': '\xa0', - 'Nopf;': '\u2115', - 'nopf;': '\U0001d55f', - 'not': '\xac', - 'Not;': '\u2aec', - 'not;': '\xac', - 'NotCongruent;': '\u2262', - 'NotCupCap;': '\u226d', - 'NotDoubleVerticalBar;': '\u2226', - 'NotElement;': '\u2209', - 'NotEqual;': '\u2260', - 'NotEqualTilde;': '\u2242\u0338', - 'NotExists;': '\u2204', - 'NotGreater;': '\u226f', - 'NotGreaterEqual;': '\u2271', - 'NotGreaterFullEqual;': '\u2267\u0338', - 'NotGreaterGreater;': '\u226b\u0338', - 'NotGreaterLess;': '\u2279', - 'NotGreaterSlantEqual;': '\u2a7e\u0338', - 'NotGreaterTilde;': '\u2275', - 'NotHumpDownHump;': '\u224e\u0338', - 'NotHumpEqual;': '\u224f\u0338', - 'notin;': '\u2209', - 'notindot;': '\u22f5\u0338', - 'notinE;': '\u22f9\u0338', - 'notinva;': '\u2209', - 'notinvb;': '\u22f7', - 'notinvc;': '\u22f6', - 'NotLeftTriangle;': '\u22ea', - 'NotLeftTriangleBar;': '\u29cf\u0338', - 'NotLeftTriangleEqual;': '\u22ec', - 'NotLess;': '\u226e', - 'NotLessEqual;': '\u2270', - 'NotLessGreater;': '\u2278', - 'NotLessLess;': '\u226a\u0338', - 'NotLessSlantEqual;': '\u2a7d\u0338', - 'NotLessTilde;': '\u2274', - 'NotNestedGreaterGreater;': '\u2aa2\u0338', - 'NotNestedLessLess;': '\u2aa1\u0338', - 'notni;': '\u220c', - 'notniva;': '\u220c', - 'notnivb;': '\u22fe', - 'notnivc;': '\u22fd', - 'NotPrecedes;': '\u2280', - 'NotPrecedesEqual;': '\u2aaf\u0338', - 'NotPrecedesSlantEqual;': '\u22e0', - 'NotReverseElement;': '\u220c', - 'NotRightTriangle;': '\u22eb', - 'NotRightTriangleBar;': '\u29d0\u0338', - 'NotRightTriangleEqual;': '\u22ed', - 'NotSquareSubset;': '\u228f\u0338', - 'NotSquareSubsetEqual;': '\u22e2', - 'NotSquareSuperset;': '\u2290\u0338', - 'NotSquareSupersetEqual;': '\u22e3', - 'NotSubset;': '\u2282\u20d2', - 'NotSubsetEqual;': '\u2288', - 'NotSucceeds;': '\u2281', - 'NotSucceedsEqual;': '\u2ab0\u0338', - 'NotSucceedsSlantEqual;': '\u22e1', - 'NotSucceedsTilde;': '\u227f\u0338', - 'NotSuperset;': '\u2283\u20d2', - 'NotSupersetEqual;': '\u2289', - 'NotTilde;': '\u2241', - 'NotTildeEqual;': '\u2244', - 'NotTildeFullEqual;': '\u2247', - 'NotTildeTilde;': '\u2249', - 'NotVerticalBar;': '\u2224', - 'npar;': '\u2226', - 'nparallel;': '\u2226', - 'nparsl;': '\u2afd\u20e5', - 'npart;': '\u2202\u0338', - 'npolint;': '\u2a14', - 'npr;': '\u2280', - 'nprcue;': '\u22e0', - 'npre;': '\u2aaf\u0338', - 'nprec;': '\u2280', - 'npreceq;': '\u2aaf\u0338', - 'nrArr;': '\u21cf', - 'nrarr;': '\u219b', - 'nrarrc;': '\u2933\u0338', - 'nrarrw;': '\u219d\u0338', - 'nRightarrow;': '\u21cf', - 'nrightarrow;': '\u219b', - 'nrtri;': '\u22eb', - 'nrtrie;': '\u22ed', - 'nsc;': '\u2281', - 'nsccue;': '\u22e1', - 'nsce;': '\u2ab0\u0338', - 'Nscr;': '\U0001d4a9', - 'nscr;': '\U0001d4c3', - 'nshortmid;': '\u2224', - 'nshortparallel;': '\u2226', - 'nsim;': '\u2241', - 'nsime;': '\u2244', - 'nsimeq;': '\u2244', - 'nsmid;': '\u2224', - 'nspar;': '\u2226', - 'nsqsube;': '\u22e2', - 'nsqsupe;': '\u22e3', - 'nsub;': '\u2284', - 'nsubE;': '\u2ac5\u0338', - 'nsube;': '\u2288', - 'nsubset;': '\u2282\u20d2', - 'nsubseteq;': '\u2288', - 'nsubseteqq;': '\u2ac5\u0338', - 'nsucc;': '\u2281', - 'nsucceq;': '\u2ab0\u0338', - 'nsup;': '\u2285', - 'nsupE;': '\u2ac6\u0338', - 'nsupe;': '\u2289', - 'nsupset;': '\u2283\u20d2', - 'nsupseteq;': '\u2289', - 'nsupseteqq;': '\u2ac6\u0338', - 'ntgl;': '\u2279', - 'Ntilde': '\xd1', - 'ntilde': '\xf1', - 'Ntilde;': '\xd1', - 'ntilde;': '\xf1', - 'ntlg;': '\u2278', - 'ntriangleleft;': '\u22ea', - 'ntrianglelefteq;': '\u22ec', - 'ntriangleright;': '\u22eb', - 'ntrianglerighteq;': '\u22ed', - 'Nu;': '\u039d', - 'nu;': '\u03bd', - 'num;': '#', - 'numero;': '\u2116', - 'numsp;': '\u2007', - 'nvap;': '\u224d\u20d2', - 'nVDash;': '\u22af', - 'nVdash;': '\u22ae', - 'nvDash;': '\u22ad', - 'nvdash;': '\u22ac', - 'nvge;': '\u2265\u20d2', - 'nvgt;': '>\u20d2', - 'nvHarr;': '\u2904', - 'nvinfin;': '\u29de', - 'nvlArr;': '\u2902', - 'nvle;': '\u2264\u20d2', - 'nvlt;': '<\u20d2', - 'nvltrie;': '\u22b4\u20d2', - 'nvrArr;': '\u2903', - 'nvrtrie;': '\u22b5\u20d2', - 'nvsim;': '\u223c\u20d2', - 'nwarhk;': '\u2923', - 'nwArr;': '\u21d6', - 'nwarr;': '\u2196', - 'nwarrow;': '\u2196', - 'nwnear;': '\u2927', - 'Oacute': '\xd3', - 'oacute': '\xf3', - 'Oacute;': '\xd3', - 'oacute;': '\xf3', - 'oast;': '\u229b', - 'ocir;': '\u229a', - 'Ocirc': '\xd4', - 'ocirc': '\xf4', - 'Ocirc;': '\xd4', - 'ocirc;': '\xf4', - 'Ocy;': '\u041e', - 'ocy;': '\u043e', - 'odash;': '\u229d', - 'Odblac;': '\u0150', - 'odblac;': '\u0151', - 'odiv;': '\u2a38', - 'odot;': '\u2299', - 'odsold;': '\u29bc', - 'OElig;': '\u0152', - 'oelig;': '\u0153', - 'ofcir;': '\u29bf', - 'Ofr;': '\U0001d512', - 'ofr;': '\U0001d52c', - 'ogon;': '\u02db', - 'Ograve': '\xd2', - 'ograve': '\xf2', - 'Ograve;': '\xd2', - 'ograve;': '\xf2', - 'ogt;': '\u29c1', - 'ohbar;': '\u29b5', - 'ohm;': '\u03a9', - 'oint;': '\u222e', - 'olarr;': '\u21ba', - 'olcir;': '\u29be', - 'olcross;': '\u29bb', - 'oline;': '\u203e', - 'olt;': '\u29c0', - 'Omacr;': '\u014c', - 'omacr;': '\u014d', - 'Omega;': '\u03a9', - 'omega;': '\u03c9', - 'Omicron;': '\u039f', - 'omicron;': '\u03bf', - 'omid;': '\u29b6', - 'ominus;': '\u2296', - 'Oopf;': '\U0001d546', - 'oopf;': '\U0001d560', - 'opar;': '\u29b7', - 'OpenCurlyDoubleQuote;': '\u201c', - 'OpenCurlyQuote;': '\u2018', - 'operp;': '\u29b9', - 'oplus;': '\u2295', - 'Or;': '\u2a54', - 'or;': '\u2228', - 'orarr;': '\u21bb', - 'ord;': '\u2a5d', - 'order;': '\u2134', - 'orderof;': '\u2134', - 'ordf': '\xaa', - 'ordf;': '\xaa', - 'ordm': '\xba', - 'ordm;': '\xba', - 'origof;': '\u22b6', - 'oror;': '\u2a56', - 'orslope;': '\u2a57', - 'orv;': '\u2a5b', - 'oS;': '\u24c8', - 'Oscr;': '\U0001d4aa', - 'oscr;': '\u2134', - 'Oslash': '\xd8', - 'oslash': '\xf8', - 'Oslash;': '\xd8', - 'oslash;': '\xf8', - 'osol;': '\u2298', - 'Otilde': '\xd5', - 'otilde': '\xf5', - 'Otilde;': '\xd5', - 'otilde;': '\xf5', - 'Otimes;': '\u2a37', - 'otimes;': '\u2297', - 'otimesas;': '\u2a36', - 'Ouml': '\xd6', - 'ouml': '\xf6', - 'Ouml;': '\xd6', - 'ouml;': '\xf6', - 'ovbar;': '\u233d', - 'OverBar;': '\u203e', - 'OverBrace;': '\u23de', - 'OverBracket;': '\u23b4', - 'OverParenthesis;': '\u23dc', - 'par;': '\u2225', - 'para': '\xb6', - 'para;': '\xb6', - 'parallel;': '\u2225', - 'parsim;': '\u2af3', - 'parsl;': '\u2afd', - 'part;': '\u2202', - 'PartialD;': '\u2202', - 'Pcy;': '\u041f', - 'pcy;': '\u043f', - 'percnt;': '%', - 'period;': '.', - 'permil;': '\u2030', - 'perp;': '\u22a5', - 'pertenk;': '\u2031', - 'Pfr;': '\U0001d513', - 'pfr;': '\U0001d52d', - 'Phi;': '\u03a6', - 'phi;': '\u03c6', - 'phiv;': '\u03d5', - 'phmmat;': '\u2133', - 'phone;': '\u260e', - 'Pi;': '\u03a0', - 'pi;': '\u03c0', - 'pitchfork;': '\u22d4', - 'piv;': '\u03d6', - 'planck;': '\u210f', - 'planckh;': '\u210e', - 'plankv;': '\u210f', - 'plus;': '+', - 'plusacir;': '\u2a23', - 'plusb;': '\u229e', - 'pluscir;': '\u2a22', - 'plusdo;': '\u2214', - 'plusdu;': '\u2a25', - 'pluse;': '\u2a72', - 'PlusMinus;': '\xb1', - 'plusmn': '\xb1', - 'plusmn;': '\xb1', - 'plussim;': '\u2a26', - 'plustwo;': '\u2a27', - 'pm;': '\xb1', - 'Poincareplane;': '\u210c', - 'pointint;': '\u2a15', - 'Popf;': '\u2119', - 'popf;': '\U0001d561', - 'pound': '\xa3', - 'pound;': '\xa3', - 'Pr;': '\u2abb', - 'pr;': '\u227a', - 'prap;': '\u2ab7', - 'prcue;': '\u227c', - 'prE;': '\u2ab3', - 'pre;': '\u2aaf', - 'prec;': '\u227a', - 'precapprox;': '\u2ab7', - 'preccurlyeq;': '\u227c', - 'Precedes;': '\u227a', - 'PrecedesEqual;': '\u2aaf', - 'PrecedesSlantEqual;': '\u227c', - 'PrecedesTilde;': '\u227e', - 'preceq;': '\u2aaf', - 'precnapprox;': '\u2ab9', - 'precneqq;': '\u2ab5', - 'precnsim;': '\u22e8', - 'precsim;': '\u227e', - 'Prime;': '\u2033', - 'prime;': '\u2032', - 'primes;': '\u2119', - 'prnap;': '\u2ab9', - 'prnE;': '\u2ab5', - 'prnsim;': '\u22e8', - 'prod;': '\u220f', - 'Product;': '\u220f', - 'profalar;': '\u232e', - 'profline;': '\u2312', - 'profsurf;': '\u2313', - 'prop;': '\u221d', - 'Proportion;': '\u2237', - 'Proportional;': '\u221d', - 'propto;': '\u221d', - 'prsim;': '\u227e', - 'prurel;': '\u22b0', - 'Pscr;': '\U0001d4ab', - 'pscr;': '\U0001d4c5', - 'Psi;': '\u03a8', - 'psi;': '\u03c8', - 'puncsp;': '\u2008', - 'Qfr;': '\U0001d514', - 'qfr;': '\U0001d52e', - 'qint;': '\u2a0c', - 'Qopf;': '\u211a', - 'qopf;': '\U0001d562', - 'qprime;': '\u2057', - 'Qscr;': '\U0001d4ac', - 'qscr;': '\U0001d4c6', - 'quaternions;': '\u210d', - 'quatint;': '\u2a16', - 'quest;': '?', - 'questeq;': '\u225f', - 'QUOT': '"', - 'quot': '"', - 'QUOT;': '"', - 'quot;': '"', - 'rAarr;': '\u21db', - 'race;': '\u223d\u0331', - 'Racute;': '\u0154', - 'racute;': '\u0155', - 'radic;': '\u221a', - 'raemptyv;': '\u29b3', - 'Rang;': '\u27eb', - 'rang;': '\u27e9', - 'rangd;': '\u2992', - 'range;': '\u29a5', - 'rangle;': '\u27e9', - 'raquo': '\xbb', - 'raquo;': '\xbb', - 'Rarr;': '\u21a0', - 'rArr;': '\u21d2', - 'rarr;': '\u2192', - 'rarrap;': '\u2975', - 'rarrb;': '\u21e5', - 'rarrbfs;': '\u2920', - 'rarrc;': '\u2933', - 'rarrfs;': '\u291e', - 'rarrhk;': '\u21aa', - 'rarrlp;': '\u21ac', - 'rarrpl;': '\u2945', - 'rarrsim;': '\u2974', - 'Rarrtl;': '\u2916', - 'rarrtl;': '\u21a3', - 'rarrw;': '\u219d', - 'rAtail;': '\u291c', - 'ratail;': '\u291a', - 'ratio;': '\u2236', - 'rationals;': '\u211a', - 'RBarr;': '\u2910', - 'rBarr;': '\u290f', - 'rbarr;': '\u290d', - 'rbbrk;': '\u2773', - 'rbrace;': '}', - 'rbrack;': ']', - 'rbrke;': '\u298c', - 'rbrksld;': '\u298e', - 'rbrkslu;': '\u2990', - 'Rcaron;': '\u0158', - 'rcaron;': '\u0159', - 'Rcedil;': '\u0156', - 'rcedil;': '\u0157', - 'rceil;': '\u2309', - 'rcub;': '}', - 'Rcy;': '\u0420', - 'rcy;': '\u0440', - 'rdca;': '\u2937', - 'rdldhar;': '\u2969', - 'rdquo;': '\u201d', - 'rdquor;': '\u201d', - 'rdsh;': '\u21b3', - 'Re;': '\u211c', - 'real;': '\u211c', - 'realine;': '\u211b', - 'realpart;': '\u211c', - 'reals;': '\u211d', - 'rect;': '\u25ad', - 'REG': '\xae', - 'reg': '\xae', - 'REG;': '\xae', - 'reg;': '\xae', - 'ReverseElement;': '\u220b', - 'ReverseEquilibrium;': '\u21cb', - 'ReverseUpEquilibrium;': '\u296f', - 'rfisht;': '\u297d', - 'rfloor;': '\u230b', - 'Rfr;': '\u211c', - 'rfr;': '\U0001d52f', - 'rHar;': '\u2964', - 'rhard;': '\u21c1', - 'rharu;': '\u21c0', - 'rharul;': '\u296c', - 'Rho;': '\u03a1', - 'rho;': '\u03c1', - 'rhov;': '\u03f1', - 'RightAngleBracket;': '\u27e9', - 'RightArrow;': '\u2192', - 'Rightarrow;': '\u21d2', - 'rightarrow;': '\u2192', - 'RightArrowBar;': '\u21e5', - 'RightArrowLeftArrow;': '\u21c4', - 'rightarrowtail;': '\u21a3', - 'RightCeiling;': '\u2309', - 'RightDoubleBracket;': '\u27e7', - 'RightDownTeeVector;': '\u295d', - 'RightDownVector;': '\u21c2', - 'RightDownVectorBar;': '\u2955', - 'RightFloor;': '\u230b', - 'rightharpoondown;': '\u21c1', - 'rightharpoonup;': '\u21c0', - 'rightleftarrows;': '\u21c4', - 'rightleftharpoons;': '\u21cc', - 'rightrightarrows;': '\u21c9', - 'rightsquigarrow;': '\u219d', - 'RightTee;': '\u22a2', - 'RightTeeArrow;': '\u21a6', - 'RightTeeVector;': '\u295b', - 'rightthreetimes;': '\u22cc', - 'RightTriangle;': '\u22b3', - 'RightTriangleBar;': '\u29d0', - 'RightTriangleEqual;': '\u22b5', - 'RightUpDownVector;': '\u294f', - 'RightUpTeeVector;': '\u295c', - 'RightUpVector;': '\u21be', - 'RightUpVectorBar;': '\u2954', - 'RightVector;': '\u21c0', - 'RightVectorBar;': '\u2953', - 'ring;': '\u02da', - 'risingdotseq;': '\u2253', - 'rlarr;': '\u21c4', - 'rlhar;': '\u21cc', - 'rlm;': '\u200f', - 'rmoust;': '\u23b1', - 'rmoustache;': '\u23b1', - 'rnmid;': '\u2aee', - 'roang;': '\u27ed', - 'roarr;': '\u21fe', - 'robrk;': '\u27e7', - 'ropar;': '\u2986', - 'Ropf;': '\u211d', - 'ropf;': '\U0001d563', - 'roplus;': '\u2a2e', - 'rotimes;': '\u2a35', - 'RoundImplies;': '\u2970', - 'rpar;': ')', - 'rpargt;': '\u2994', - 'rppolint;': '\u2a12', - 'rrarr;': '\u21c9', - 'Rrightarrow;': '\u21db', - 'rsaquo;': '\u203a', - 'Rscr;': '\u211b', - 'rscr;': '\U0001d4c7', - 'Rsh;': '\u21b1', - 'rsh;': '\u21b1', - 'rsqb;': ']', - 'rsquo;': '\u2019', - 'rsquor;': '\u2019', - 'rthree;': '\u22cc', - 'rtimes;': '\u22ca', - 'rtri;': '\u25b9', - 'rtrie;': '\u22b5', - 'rtrif;': '\u25b8', - 'rtriltri;': '\u29ce', - 'RuleDelayed;': '\u29f4', - 'ruluhar;': '\u2968', - 'rx;': '\u211e', - 'Sacute;': '\u015a', - 'sacute;': '\u015b', - 'sbquo;': '\u201a', - 'Sc;': '\u2abc', - 'sc;': '\u227b', - 'scap;': '\u2ab8', - 'Scaron;': '\u0160', - 'scaron;': '\u0161', - 'sccue;': '\u227d', - 'scE;': '\u2ab4', - 'sce;': '\u2ab0', - 'Scedil;': '\u015e', - 'scedil;': '\u015f', - 'Scirc;': '\u015c', - 'scirc;': '\u015d', - 'scnap;': '\u2aba', - 'scnE;': '\u2ab6', - 'scnsim;': '\u22e9', - 'scpolint;': '\u2a13', - 'scsim;': '\u227f', - 'Scy;': '\u0421', - 'scy;': '\u0441', - 'sdot;': '\u22c5', - 'sdotb;': '\u22a1', - 'sdote;': '\u2a66', - 'searhk;': '\u2925', - 'seArr;': '\u21d8', - 'searr;': '\u2198', - 'searrow;': '\u2198', - 'sect': '\xa7', - 'sect;': '\xa7', - 'semi;': ';', - 'seswar;': '\u2929', - 'setminus;': '\u2216', - 'setmn;': '\u2216', - 'sext;': '\u2736', - 'Sfr;': '\U0001d516', - 'sfr;': '\U0001d530', - 'sfrown;': '\u2322', - 'sharp;': '\u266f', - 'SHCHcy;': '\u0429', - 'shchcy;': '\u0449', - 'SHcy;': '\u0428', - 'shcy;': '\u0448', - 'ShortDownArrow;': '\u2193', - 'ShortLeftArrow;': '\u2190', - 'shortmid;': '\u2223', - 'shortparallel;': '\u2225', - 'ShortRightArrow;': '\u2192', - 'ShortUpArrow;': '\u2191', - 'shy': '\xad', - 'shy;': '\xad', - 'Sigma;': '\u03a3', - 'sigma;': '\u03c3', - 'sigmaf;': '\u03c2', - 'sigmav;': '\u03c2', - 'sim;': '\u223c', - 'simdot;': '\u2a6a', - 'sime;': '\u2243', - 'simeq;': '\u2243', - 'simg;': '\u2a9e', - 'simgE;': '\u2aa0', - 'siml;': '\u2a9d', - 'simlE;': '\u2a9f', - 'simne;': '\u2246', - 'simplus;': '\u2a24', - 'simrarr;': '\u2972', - 'slarr;': '\u2190', - 'SmallCircle;': '\u2218', - 'smallsetminus;': '\u2216', - 'smashp;': '\u2a33', - 'smeparsl;': '\u29e4', - 'smid;': '\u2223', - 'smile;': '\u2323', - 'smt;': '\u2aaa', - 'smte;': '\u2aac', - 'smtes;': '\u2aac\ufe00', - 'SOFTcy;': '\u042c', - 'softcy;': '\u044c', - 'sol;': '/', - 'solb;': '\u29c4', - 'solbar;': '\u233f', - 'Sopf;': '\U0001d54a', - 'sopf;': '\U0001d564', - 'spades;': '\u2660', - 'spadesuit;': '\u2660', - 'spar;': '\u2225', - 'sqcap;': '\u2293', - 'sqcaps;': '\u2293\ufe00', - 'sqcup;': '\u2294', - 'sqcups;': '\u2294\ufe00', - 'Sqrt;': '\u221a', - 'sqsub;': '\u228f', - 'sqsube;': '\u2291', - 'sqsubset;': '\u228f', - 'sqsubseteq;': '\u2291', - 'sqsup;': '\u2290', - 'sqsupe;': '\u2292', - 'sqsupset;': '\u2290', - 'sqsupseteq;': '\u2292', - 'squ;': '\u25a1', - 'Square;': '\u25a1', - 'square;': '\u25a1', - 'SquareIntersection;': '\u2293', - 'SquareSubset;': '\u228f', - 'SquareSubsetEqual;': '\u2291', - 'SquareSuperset;': '\u2290', - 'SquareSupersetEqual;': '\u2292', - 'SquareUnion;': '\u2294', - 'squarf;': '\u25aa', - 'squf;': '\u25aa', - 'srarr;': '\u2192', - 'Sscr;': '\U0001d4ae', - 'sscr;': '\U0001d4c8', - 'ssetmn;': '\u2216', - 'ssmile;': '\u2323', - 'sstarf;': '\u22c6', - 'Star;': '\u22c6', - 'star;': '\u2606', - 'starf;': '\u2605', - 'straightepsilon;': '\u03f5', - 'straightphi;': '\u03d5', - 'strns;': '\xaf', - 'Sub;': '\u22d0', - 'sub;': '\u2282', - 'subdot;': '\u2abd', - 'subE;': '\u2ac5', - 'sube;': '\u2286', - 'subedot;': '\u2ac3', - 'submult;': '\u2ac1', - 'subnE;': '\u2acb', - 'subne;': '\u228a', - 'subplus;': '\u2abf', - 'subrarr;': '\u2979', - 'Subset;': '\u22d0', - 'subset;': '\u2282', - 'subseteq;': '\u2286', - 'subseteqq;': '\u2ac5', - 'SubsetEqual;': '\u2286', - 'subsetneq;': '\u228a', - 'subsetneqq;': '\u2acb', - 'subsim;': '\u2ac7', - 'subsub;': '\u2ad5', - 'subsup;': '\u2ad3', - 'succ;': '\u227b', - 'succapprox;': '\u2ab8', - 'succcurlyeq;': '\u227d', - 'Succeeds;': '\u227b', - 'SucceedsEqual;': '\u2ab0', - 'SucceedsSlantEqual;': '\u227d', - 'SucceedsTilde;': '\u227f', - 'succeq;': '\u2ab0', - 'succnapprox;': '\u2aba', - 'succneqq;': '\u2ab6', - 'succnsim;': '\u22e9', - 'succsim;': '\u227f', - 'SuchThat;': '\u220b', - 'Sum;': '\u2211', - 'sum;': '\u2211', - 'sung;': '\u266a', - 'sup1': '\xb9', - 'sup1;': '\xb9', - 'sup2': '\xb2', - 'sup2;': '\xb2', - 'sup3': '\xb3', - 'sup3;': '\xb3', - 'Sup;': '\u22d1', - 'sup;': '\u2283', - 'supdot;': '\u2abe', - 'supdsub;': '\u2ad8', - 'supE;': '\u2ac6', - 'supe;': '\u2287', - 'supedot;': '\u2ac4', - 'Superset;': '\u2283', - 'SupersetEqual;': '\u2287', - 'suphsol;': '\u27c9', - 'suphsub;': '\u2ad7', - 'suplarr;': '\u297b', - 'supmult;': '\u2ac2', - 'supnE;': '\u2acc', - 'supne;': '\u228b', - 'supplus;': '\u2ac0', - 'Supset;': '\u22d1', - 'supset;': '\u2283', - 'supseteq;': '\u2287', - 'supseteqq;': '\u2ac6', - 'supsetneq;': '\u228b', - 'supsetneqq;': '\u2acc', - 'supsim;': '\u2ac8', - 'supsub;': '\u2ad4', - 'supsup;': '\u2ad6', - 'swarhk;': '\u2926', - 'swArr;': '\u21d9', - 'swarr;': '\u2199', - 'swarrow;': '\u2199', - 'swnwar;': '\u292a', - 'szlig': '\xdf', - 'szlig;': '\xdf', - 'Tab;': '\t', - 'target;': '\u2316', - 'Tau;': '\u03a4', - 'tau;': '\u03c4', - 'tbrk;': '\u23b4', - 'Tcaron;': '\u0164', - 'tcaron;': '\u0165', - 'Tcedil;': '\u0162', - 'tcedil;': '\u0163', - 'Tcy;': '\u0422', - 'tcy;': '\u0442', - 'tdot;': '\u20db', - 'telrec;': '\u2315', - 'Tfr;': '\U0001d517', - 'tfr;': '\U0001d531', - 'there4;': '\u2234', - 'Therefore;': '\u2234', - 'therefore;': '\u2234', - 'Theta;': '\u0398', - 'theta;': '\u03b8', - 'thetasym;': '\u03d1', - 'thetav;': '\u03d1', - 'thickapprox;': '\u2248', - 'thicksim;': '\u223c', - 'ThickSpace;': '\u205f\u200a', - 'thinsp;': '\u2009', - 'ThinSpace;': '\u2009', - 'thkap;': '\u2248', - 'thksim;': '\u223c', - 'THORN': '\xde', - 'thorn': '\xfe', - 'THORN;': '\xde', - 'thorn;': '\xfe', - 'Tilde;': '\u223c', - 'tilde;': '\u02dc', - 'TildeEqual;': '\u2243', - 'TildeFullEqual;': '\u2245', - 'TildeTilde;': '\u2248', - 'times': '\xd7', - 'times;': '\xd7', - 'timesb;': '\u22a0', - 'timesbar;': '\u2a31', - 'timesd;': '\u2a30', - 'tint;': '\u222d', - 'toea;': '\u2928', - 'top;': '\u22a4', - 'topbot;': '\u2336', - 'topcir;': '\u2af1', - 'Topf;': '\U0001d54b', - 'topf;': '\U0001d565', - 'topfork;': '\u2ada', - 'tosa;': '\u2929', - 'tprime;': '\u2034', - 'TRADE;': '\u2122', - 'trade;': '\u2122', - 'triangle;': '\u25b5', - 'triangledown;': '\u25bf', - 'triangleleft;': '\u25c3', - 'trianglelefteq;': '\u22b4', - 'triangleq;': '\u225c', - 'triangleright;': '\u25b9', - 'trianglerighteq;': '\u22b5', - 'tridot;': '\u25ec', - 'trie;': '\u225c', - 'triminus;': '\u2a3a', - 'TripleDot;': '\u20db', - 'triplus;': '\u2a39', - 'trisb;': '\u29cd', - 'tritime;': '\u2a3b', - 'trpezium;': '\u23e2', - 'Tscr;': '\U0001d4af', - 'tscr;': '\U0001d4c9', - 'TScy;': '\u0426', - 'tscy;': '\u0446', - 'TSHcy;': '\u040b', - 'tshcy;': '\u045b', - 'Tstrok;': '\u0166', - 'tstrok;': '\u0167', - 'twixt;': '\u226c', - 'twoheadleftarrow;': '\u219e', - 'twoheadrightarrow;': '\u21a0', - 'Uacute': '\xda', - 'uacute': '\xfa', - 'Uacute;': '\xda', - 'uacute;': '\xfa', - 'Uarr;': '\u219f', - 'uArr;': '\u21d1', - 'uarr;': '\u2191', - 'Uarrocir;': '\u2949', - 'Ubrcy;': '\u040e', - 'ubrcy;': '\u045e', - 'Ubreve;': '\u016c', - 'ubreve;': '\u016d', - 'Ucirc': '\xdb', - 'ucirc': '\xfb', - 'Ucirc;': '\xdb', - 'ucirc;': '\xfb', - 'Ucy;': '\u0423', - 'ucy;': '\u0443', - 'udarr;': '\u21c5', - 'Udblac;': '\u0170', - 'udblac;': '\u0171', - 'udhar;': '\u296e', - 'ufisht;': '\u297e', - 'Ufr;': '\U0001d518', - 'ufr;': '\U0001d532', - 'Ugrave': '\xd9', - 'ugrave': '\xf9', - 'Ugrave;': '\xd9', - 'ugrave;': '\xf9', - 'uHar;': '\u2963', - 'uharl;': '\u21bf', - 'uharr;': '\u21be', - 'uhblk;': '\u2580', - 'ulcorn;': '\u231c', - 'ulcorner;': '\u231c', - 'ulcrop;': '\u230f', - 'ultri;': '\u25f8', - 'Umacr;': '\u016a', - 'umacr;': '\u016b', - 'uml': '\xa8', - 'uml;': '\xa8', - 'UnderBar;': '_', - 'UnderBrace;': '\u23df', - 'UnderBracket;': '\u23b5', - 'UnderParenthesis;': '\u23dd', - 'Union;': '\u22c3', - 'UnionPlus;': '\u228e', - 'Uogon;': '\u0172', - 'uogon;': '\u0173', - 'Uopf;': '\U0001d54c', - 'uopf;': '\U0001d566', - 'UpArrow;': '\u2191', - 'Uparrow;': '\u21d1', - 'uparrow;': '\u2191', - 'UpArrowBar;': '\u2912', - 'UpArrowDownArrow;': '\u21c5', - 'UpDownArrow;': '\u2195', - 'Updownarrow;': '\u21d5', - 'updownarrow;': '\u2195', - 'UpEquilibrium;': '\u296e', - 'upharpoonleft;': '\u21bf', - 'upharpoonright;': '\u21be', - 'uplus;': '\u228e', - 'UpperLeftArrow;': '\u2196', - 'UpperRightArrow;': '\u2197', - 'Upsi;': '\u03d2', - 'upsi;': '\u03c5', - 'upsih;': '\u03d2', - 'Upsilon;': '\u03a5', - 'upsilon;': '\u03c5', - 'UpTee;': '\u22a5', - 'UpTeeArrow;': '\u21a5', - 'upuparrows;': '\u21c8', - 'urcorn;': '\u231d', - 'urcorner;': '\u231d', - 'urcrop;': '\u230e', - 'Uring;': '\u016e', - 'uring;': '\u016f', - 'urtri;': '\u25f9', - 'Uscr;': '\U0001d4b0', - 'uscr;': '\U0001d4ca', - 'utdot;': '\u22f0', - 'Utilde;': '\u0168', - 'utilde;': '\u0169', - 'utri;': '\u25b5', - 'utrif;': '\u25b4', - 'uuarr;': '\u21c8', - 'Uuml': '\xdc', - 'uuml': '\xfc', - 'Uuml;': '\xdc', - 'uuml;': '\xfc', - 'uwangle;': '\u29a7', - 'vangrt;': '\u299c', - 'varepsilon;': '\u03f5', - 'varkappa;': '\u03f0', - 'varnothing;': '\u2205', - 'varphi;': '\u03d5', - 'varpi;': '\u03d6', - 'varpropto;': '\u221d', - 'vArr;': '\u21d5', - 'varr;': '\u2195', - 'varrho;': '\u03f1', - 'varsigma;': '\u03c2', - 'varsubsetneq;': '\u228a\ufe00', - 'varsubsetneqq;': '\u2acb\ufe00', - 'varsupsetneq;': '\u228b\ufe00', - 'varsupsetneqq;': '\u2acc\ufe00', - 'vartheta;': '\u03d1', - 'vartriangleleft;': '\u22b2', - 'vartriangleright;': '\u22b3', - 'Vbar;': '\u2aeb', - 'vBar;': '\u2ae8', - 'vBarv;': '\u2ae9', - 'Vcy;': '\u0412', - 'vcy;': '\u0432', - 'VDash;': '\u22ab', - 'Vdash;': '\u22a9', - 'vDash;': '\u22a8', - 'vdash;': '\u22a2', - 'Vdashl;': '\u2ae6', - 'Vee;': '\u22c1', - 'vee;': '\u2228', - 'veebar;': '\u22bb', - 'veeeq;': '\u225a', - 'vellip;': '\u22ee', - 'Verbar;': '\u2016', - 'verbar;': '|', - 'Vert;': '\u2016', - 'vert;': '|', - 'VerticalBar;': '\u2223', - 'VerticalLine;': '|', - 'VerticalSeparator;': '\u2758', - 'VerticalTilde;': '\u2240', - 'VeryThinSpace;': '\u200a', - 'Vfr;': '\U0001d519', - 'vfr;': '\U0001d533', - 'vltri;': '\u22b2', - 'vnsub;': '\u2282\u20d2', - 'vnsup;': '\u2283\u20d2', - 'Vopf;': '\U0001d54d', - 'vopf;': '\U0001d567', - 'vprop;': '\u221d', - 'vrtri;': '\u22b3', - 'Vscr;': '\U0001d4b1', - 'vscr;': '\U0001d4cb', - 'vsubnE;': '\u2acb\ufe00', - 'vsubne;': '\u228a\ufe00', - 'vsupnE;': '\u2acc\ufe00', - 'vsupne;': '\u228b\ufe00', - 'Vvdash;': '\u22aa', - 'vzigzag;': '\u299a', - 'Wcirc;': '\u0174', - 'wcirc;': '\u0175', - 'wedbar;': '\u2a5f', - 'Wedge;': '\u22c0', - 'wedge;': '\u2227', - 'wedgeq;': '\u2259', - 'weierp;': '\u2118', - 'Wfr;': '\U0001d51a', - 'wfr;': '\U0001d534', - 'Wopf;': '\U0001d54e', - 'wopf;': '\U0001d568', - 'wp;': '\u2118', - 'wr;': '\u2240', - 'wreath;': '\u2240', - 'Wscr;': '\U0001d4b2', - 'wscr;': '\U0001d4cc', - 'xcap;': '\u22c2', - 'xcirc;': '\u25ef', - 'xcup;': '\u22c3', - 'xdtri;': '\u25bd', - 'Xfr;': '\U0001d51b', - 'xfr;': '\U0001d535', - 'xhArr;': '\u27fa', - 'xharr;': '\u27f7', - 'Xi;': '\u039e', - 'xi;': '\u03be', - 'xlArr;': '\u27f8', - 'xlarr;': '\u27f5', - 'xmap;': '\u27fc', - 'xnis;': '\u22fb', - 'xodot;': '\u2a00', - 'Xopf;': '\U0001d54f', - 'xopf;': '\U0001d569', - 'xoplus;': '\u2a01', - 'xotime;': '\u2a02', - 'xrArr;': '\u27f9', - 'xrarr;': '\u27f6', - 'Xscr;': '\U0001d4b3', - 'xscr;': '\U0001d4cd', - 'xsqcup;': '\u2a06', - 'xuplus;': '\u2a04', - 'xutri;': '\u25b3', - 'xvee;': '\u22c1', - 'xwedge;': '\u22c0', - 'Yacute': '\xdd', - 'yacute': '\xfd', - 'Yacute;': '\xdd', - 'yacute;': '\xfd', - 'YAcy;': '\u042f', - 'yacy;': '\u044f', - 'Ycirc;': '\u0176', - 'ycirc;': '\u0177', - 'Ycy;': '\u042b', - 'ycy;': '\u044b', - 'yen': '\xa5', - 'yen;': '\xa5', - 'Yfr;': '\U0001d51c', - 'yfr;': '\U0001d536', - 'YIcy;': '\u0407', - 'yicy;': '\u0457', - 'Yopf;': '\U0001d550', - 'yopf;': '\U0001d56a', - 'Yscr;': '\U0001d4b4', - 'yscr;': '\U0001d4ce', - 'YUcy;': '\u042e', - 'yucy;': '\u044e', - 'yuml': '\xff', - 'Yuml;': '\u0178', - 'yuml;': '\xff', - 'Zacute;': '\u0179', - 'zacute;': '\u017a', - 'Zcaron;': '\u017d', - 'zcaron;': '\u017e', - 'Zcy;': '\u0417', - 'zcy;': '\u0437', - 'Zdot;': '\u017b', - 'zdot;': '\u017c', - 'zeetrf;': '\u2128', - 'ZeroWidthSpace;': '\u200b', - 'Zeta;': '\u0396', - 'zeta;': '\u03b6', - 'Zfr;': '\u2128', - 'zfr;': '\U0001d537', - 'ZHcy;': '\u0416', - 'zhcy;': '\u0436', - 'zigrarr;': '\u21dd', - 'Zopf;': '\u2124', - 'zopf;': '\U0001d56b', - 'Zscr;': '\U0001d4b5', - 'zscr;': '\U0001d4cf', - 'zwj;': '\u200d', - 'zwnj;': '\u200c', -} - -# maps the Unicode code point to the HTML entity name -codepoint2name = {} - -# maps the HTML entity name to the character -# (or a character reference if the character is outside the Latin-1 range) -entitydefs = {} - -for (name, codepoint) in name2codepoint.items(): - codepoint2name[codepoint] = name - entitydefs[name] = chr(codepoint) - -del name, codepoint diff --git a/Python314_4_x86_Template/Lib/html/parser.py b/Python314_4_x86_Template/Lib/html/parser.py deleted file mode 100644 index 80fb8c3f9..000000000 --- a/Python314_4_x86_Template/Lib/html/parser.py +++ /dev/null @@ -1,553 +0,0 @@ -"""A parser for HTML and XHTML.""" - -# This file is based on sgmllib.py, but the API is slightly different. - -# XXX There should be a way to distinguish between PCDATA (parsed -# character data -- the normal case), RCDATA (replaceable character -# data -- only char and entity references and end tags are special) -# and CDATA (character data -- only end tags are special). - - -import re -import _markupbase - -from html import unescape -from html.entities import html5 as html5_entities - - -__all__ = ['HTMLParser'] - -# Regular expressions used for parsing - -interesting_normal = re.compile('[&<]') -incomplete = re.compile('&[a-zA-Z#]') - -entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]') -charref = re.compile('&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]') -incomplete_charref = re.compile('&#(?:[0-9]|[xX][0-9a-fA-F])') -attr_charref = re.compile(r'&(#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*)[;=]?') - -starttagopen = re.compile('<[a-zA-Z]') -endtagopen = re.compile('</[a-zA-Z]') -piclose = re.compile('>') -commentclose = re.compile(r'--!?>') -commentabruptclose = re.compile(r'-?>') -# Note: -# 1) if you change tagfind/attrfind remember to update locatetagend too; -# 2) if you change tagfind/attrfind and/or locatetagend the parser will -# explode, so don't do it. -# see the HTML5 specs section "13.2.5.6 Tag open state", -# "13.2.5.8 Tag name state" and "13.2.5.33 Attribute name state". -# https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state -# https://html.spec.whatwg.org/multipage/parsing.html#tag-name-state -# https://html.spec.whatwg.org/multipage/parsing.html#attribute-name-state -tagfind_tolerant = re.compile(r'([a-zA-Z][^\t\n\r\f />]*)(?:[\t\n\r\f ]|/(?!>))*') -attrfind_tolerant = re.compile(r""" - ( - (?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name - ) - ([\t\n\r\f ]*=[\t\n\r\f ]* # value indicator - ('[^']*' # LITA-enclosed value - |"[^"]*" # LIT-enclosed value - |(?!['"])[^>\t\n\r\f ]* # bare value - ) - )? - (?:[\t\n\r\f ]|/(?!>))* # possibly followed by a space -""", re.VERBOSE) -locatetagend = re.compile(r""" - [a-zA-Z][^\t\n\r\f />]* # tag name - [\t\n\r\f /]* # optional whitespace before attribute name - (?:(?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name - (?:[\t\n\r\f ]*=[\t\n\r\f ]* # value indicator - (?:'[^']*' # LITA-enclosed value - |"[^"]*" # LIT-enclosed value - |(?!['"])[^>\t\n\r\f ]* # bare value - ) - )? - [\t\n\r\f /]* # possibly followed by a space - )* - >? -""", re.VERBOSE) -# The following variables are not used, but are temporarily left for -# backward compatibility. -locatestarttagend_tolerant = re.compile(r""" - <[a-zA-Z][^\t\n\r\f />\x00]* # tag name - (?:[\s/]* # optional whitespace before attribute name - (?:(?<=['"\s/])[^\s/>][^\s/=>]* # attribute name - (?:\s*=+\s* # value indicator - (?:'[^']*' # LITA-enclosed value - |"[^"]*" # LIT-enclosed value - |(?!['"])[^>\s]* # bare value - ) - \s* # possibly followed by a space - )?(?:\s|/(?!>))* - )* - )? - \s* # trailing whitespace -""", re.VERBOSE) -endendtag = re.compile('>') -endtagfind = re.compile(r'</\s*([a-zA-Z][-.a-zA-Z0-9:_]*)\s*>') - -# Character reference processing logic specific to attribute values -# See: https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state -def _replace_attr_charref(match): - ref = match.group(0) - # Numeric / hex char refs must always be unescaped - if ref.startswith('&#'): - return unescape(ref) - # Named character / entity references must only be unescaped - # if they are an exact match, and they are not followed by an equals sign - if not ref.endswith('=') and ref[1:] in html5_entities: - return unescape(ref) - # Otherwise do not unescape - return ref - -def _unescape_attrvalue(s): - return attr_charref.sub(_replace_attr_charref, s) - - -class HTMLParser(_markupbase.ParserBase): - """Find tags and other markup and call handler functions. - - Usage: - p = HTMLParser() - p.feed(data) - ... - p.close() - - Start tags are handled by calling self.handle_starttag() or - self.handle_startendtag(); end tags by self.handle_endtag(). The - data between tags is passed from the parser to the derived class - by calling self.handle_data() with the data as argument (the data - may be split up in arbitrary chunks). If convert_charrefs is - True the character references are converted automatically to the - corresponding Unicode character (and self.handle_data() is no - longer split in chunks), otherwise they are passed by calling - self.handle_entityref() or self.handle_charref() with the string - containing respectively the named or numeric reference as the - argument. - """ - - # See the HTML5 specs section "13.4 Parsing HTML fragments". - # https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments - # CDATA_CONTENT_ELEMENTS are parsed in RAWTEXT mode - CDATA_CONTENT_ELEMENTS = ("script", "style", "xmp", "iframe", "noembed", "noframes") - RCDATA_CONTENT_ELEMENTS = ("textarea", "title") - - def __init__(self, *, convert_charrefs=True, scripting=False): - """Initialize and reset this instance. - - If convert_charrefs is true (the default), all character references - are automatically converted to the corresponding Unicode characters. - - If *scripting* is false (the default), the content of the - ``noscript`` element is parsed normally; if it's true, - it's returned as is without being parsed. - """ - super().__init__() - self.convert_charrefs = convert_charrefs - self.scripting = scripting - self.reset() - - def reset(self): - """Reset this instance. Loses all unprocessed data.""" - self.rawdata = '' - self.lasttag = '???' - self.interesting = interesting_normal - self.cdata_elem = None - self._support_cdata = True - self._escapable = True - super().reset() - - def feed(self, data): - r"""Feed data to the parser. - - Call this as often as you want, with as little or as much text - as you want (may include '\n'). - """ - self.rawdata = self.rawdata + data - self.goahead(0) - - def close(self): - """Handle any buffered data.""" - self.goahead(1) - - __starttag_text = None - - def get_starttag_text(self): - """Return full source of start tag: '<...>'.""" - return self.__starttag_text - - def set_cdata_mode(self, elem, *, escapable=False): - self.cdata_elem = elem.lower() - self._escapable = escapable - if self.cdata_elem == 'plaintext': - self.interesting = re.compile(r'\z') - elif escapable and not self.convert_charrefs: - self.interesting = re.compile(r'&|</%s(?=[\t\n\r\f />])' % self.cdata_elem, - re.IGNORECASE|re.ASCII) - else: - self.interesting = re.compile(r'</%s(?=[\t\n\r\f />])' % self.cdata_elem, - re.IGNORECASE|re.ASCII) - - def clear_cdata_mode(self): - self.interesting = interesting_normal - self.cdata_elem = None - self._escapable = True - - def _set_support_cdata(self, flag=True): - """Enable or disable support of the CDATA sections. - If enabled, "<[CDATA[" starts a CDATA section which ends with "]]>". - If disabled, "<[CDATA[" starts a bogus comments which ends with ">". - - This method is not called by default. Its purpose is to be called - in custom handle_starttag() and handle_endtag() methods, with - value that depends on the adjusted current node. - See https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state - for details. - """ - self._support_cdata = flag - - # Internal -- handle data as far as reasonable. May leave state - # and data to be processed by a subsequent call. If 'end' is - # true, force handling all data as if followed by EOF marker. - def goahead(self, end): - rawdata = self.rawdata - i = 0 - n = len(rawdata) - while i < n: - if self.convert_charrefs and not self.cdata_elem: - j = rawdata.find('<', i) - if j < 0: - # if we can't find the next <, either we are at the end - # or there's more text incoming. If the latter is True, - # we can't pass the text to handle_data in case we have - # a charref cut in half at end. Try to determine if - # this is the case before proceeding by looking for an - # & near the end and see if it's followed by a space or ;. - amppos = rawdata.rfind('&', max(i, n-34)) - if (amppos >= 0 and - not re.compile(r'[\t\n\r\f ;]').search(rawdata, amppos)): - break # wait till we get all the text - j = n - else: - match = self.interesting.search(rawdata, i) # < or & - if match: - j = match.start() - else: - if self.cdata_elem: - break - j = n - if i < j: - if self.convert_charrefs and self._escapable: - self.handle_data(unescape(rawdata[i:j])) - else: - self.handle_data(rawdata[i:j]) - i = self.updatepos(i, j) - if i == n: break - startswith = rawdata.startswith - if startswith('<', i): - if starttagopen.match(rawdata, i): # < + letter - k = self.parse_starttag(i) - elif startswith("</", i): - k = self.parse_endtag(i) - elif startswith("<!--", i): - k = self.parse_comment(i) - elif startswith("<?", i): - k = self.parse_pi(i) - elif startswith("<!", i): - k = self.parse_html_declaration(i) - elif (i + 1) < n or end: - self.handle_data("<") - k = i + 1 - else: - break - if k < 0: - if not end: - break - if starttagopen.match(rawdata, i): # < + letter - pass - elif startswith("</", i): - if i + 2 == n: - self.handle_data("</") - elif endtagopen.match(rawdata, i): # </ + letter - pass - else: - # bogus comment - self.handle_comment(rawdata[i+2:]) - elif startswith("<!--", i): - j = n - for suffix in ("--!", "--", "-"): - if rawdata.endswith(suffix, i+4): - j -= len(suffix) - break - self.handle_comment(rawdata[i+4:j]) - elif startswith("<![CDATA[", i) and self._support_cdata: - self.unknown_decl(rawdata[i+3:]) - elif rawdata[i:i+9].lower() == '<!doctype': - self.handle_decl(rawdata[i+2:]) - elif startswith("<!", i): - # bogus comment - self.handle_comment(rawdata[i+2:]) - elif startswith("<?", i): - self.handle_pi(rawdata[i+2:]) - else: - raise AssertionError("we should not get here!") - k = n - i = self.updatepos(i, k) - elif startswith("&#", i): - match = charref.match(rawdata, i) - if match: - name = match.group()[2:-1] - self.handle_charref(name) - k = match.end() - if not startswith(';', k-1): - k = k - 1 - i = self.updatepos(i, k) - continue - match = incomplete_charref.match(rawdata, i) - if match: - if end: - self.handle_charref(rawdata[i+2:]) - i = self.updatepos(i, n) - break - # incomplete - break - elif i + 3 < n: # larger than "&#x" - # not the end of the buffer, and can't be confused - # with some other construct - self.handle_data("&#") - i = self.updatepos(i, i + 2) - else: - break - elif startswith('&', i): - match = entityref.match(rawdata, i) - if match: - name = match.group(1) - self.handle_entityref(name) - k = match.end() - if not startswith(';', k-1): - k = k - 1 - i = self.updatepos(i, k) - continue - match = incomplete.match(rawdata, i) - if match: - if end: - self.handle_entityref(rawdata[i+1:]) - i = self.updatepos(i, n) - break - # incomplete - break - elif i + 1 < n: - # not the end of the buffer, and can't be confused - # with some other construct - self.handle_data("&") - i = self.updatepos(i, i + 1) - else: - break - else: - assert 0, "interesting.search() lied" - # end while - if end and i < n: - if self.convert_charrefs and self._escapable: - self.handle_data(unescape(rawdata[i:n])) - else: - self.handle_data(rawdata[i:n]) - i = self.updatepos(i, n) - self.rawdata = rawdata[i:] - - # Internal -- parse html declarations, return length or -1 if not terminated - # See w3.org/TR/html5/tokenization.html#markup-declaration-open-state - # See also parse_declaration in _markupbase - def parse_html_declaration(self, i): - rawdata = self.rawdata - assert rawdata[i:i+2] == '<!', ('unexpected call to ' - 'parse_html_declaration()') - if rawdata[i:i+4] == '<!--': - # this case is actually already handled in goahead() - return self.parse_comment(i) - elif rawdata[i:i+9] == '<![CDATA[' and self._support_cdata: - j = rawdata.find(']]>', i+9) - if j < 0: - return -1 - self.unknown_decl(rawdata[i+3: j]) - return j + 3 - elif rawdata[i:i+9].lower() == '<!doctype': - # find the closing > - gtpos = rawdata.find('>', i+9) - if gtpos == -1: - return -1 - self.handle_decl(rawdata[i+2:gtpos]) - return gtpos+1 - else: - return self.parse_bogus_comment(i) - - # Internal -- parse comment, return length or -1 if not terminated - # see https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state - def parse_comment(self, i, report=True): - rawdata = self.rawdata - assert rawdata.startswith('<!--', i), 'unexpected call to parse_comment()' - match = commentclose.search(rawdata, i+4) - if not match: - match = commentabruptclose.match(rawdata, i+4) - if not match: - return -1 - if report: - j = match.start() - self.handle_comment(rawdata[i+4: j]) - return match.end() - - # Internal -- parse bogus comment, return length or -1 if not terminated - # see https://html.spec.whatwg.org/multipage/parsing.html#bogus-comment-state - def parse_bogus_comment(self, i, report=1): - rawdata = self.rawdata - assert rawdata[i:i+2] in ('<!', '</'), ('unexpected call to ' - 'parse_bogus_comment()') - pos = rawdata.find('>', i+2) - if pos == -1: - return -1 - if report: - self.handle_comment(rawdata[i+2:pos]) - return pos + 1 - - # Internal -- parse processing instr, return end or -1 if not terminated - def parse_pi(self, i): - rawdata = self.rawdata - assert rawdata[i:i+2] == '<?', 'unexpected call to parse_pi()' - match = piclose.search(rawdata, i+2) # > - if not match: - return -1 - j = match.start() - self.handle_pi(rawdata[i+2: j]) - j = match.end() - return j - - # Internal -- handle starttag, return end or -1 if not terminated - def parse_starttag(self, i): - # See the HTML5 specs section "13.2.5.8 Tag name state" - # https://html.spec.whatwg.org/multipage/parsing.html#tag-name-state - self.__starttag_text = None - endpos = self.check_for_whole_start_tag(i) - if endpos < 0: - return endpos - rawdata = self.rawdata - self.__starttag_text = rawdata[i:endpos] - - # Now parse the data between i+1 and j into a tag and attrs - attrs = [] - match = tagfind_tolerant.match(rawdata, i+1) - assert match, 'unexpected call to parse_starttag()' - k = match.end() - self.lasttag = tag = match.group(1).lower() - while k < endpos: - m = attrfind_tolerant.match(rawdata, k) - if not m: - break - attrname, rest, attrvalue = m.group(1, 2, 3) - if not rest: - attrvalue = None - elif attrvalue[:1] == '\'' == attrvalue[-1:] or \ - attrvalue[:1] == '"' == attrvalue[-1:]: - attrvalue = attrvalue[1:-1] - if attrvalue: - attrvalue = _unescape_attrvalue(attrvalue) - attrs.append((attrname.lower(), attrvalue)) - k = m.end() - - end = rawdata[k:endpos].strip() - if end not in (">", "/>"): - self.handle_data(rawdata[i:endpos]) - return endpos - if end.endswith('/>'): - # XHTML-style empty tag: <span attr="value" /> - self.handle_startendtag(tag, attrs) - else: - self.handle_starttag(tag, attrs) - if (tag in self.CDATA_CONTENT_ELEMENTS or - (self.scripting and tag == "noscript") or - tag == "plaintext"): - self.set_cdata_mode(tag, escapable=False) - elif tag in self.RCDATA_CONTENT_ELEMENTS: - self.set_cdata_mode(tag, escapable=True) - return endpos - - # Internal -- check to see if we have a complete starttag; return end - # or -1 if incomplete. - def check_for_whole_start_tag(self, i): - rawdata = self.rawdata - match = locatetagend.match(rawdata, i+1) - assert match - j = match.end() - if rawdata[j-1] != ">": - return -1 - return j - - # Internal -- parse endtag, return end or -1 if incomplete - def parse_endtag(self, i): - # See the HTML5 specs section "13.2.5.7 End tag open state" - # https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state - rawdata = self.rawdata - assert rawdata[i:i+2] == "</", "unexpected call to parse_endtag" - if rawdata.find('>', i+2) < 0: # fast check - return -1 - if not endtagopen.match(rawdata, i): # </ + letter - if rawdata[i+2:i+3] == '>': # </> is ignored - # "missing-end-tag-name" parser error - return i+3 - else: - return self.parse_bogus_comment(i) - - match = locatetagend.match(rawdata, i+2) - assert match - j = match.end() - if rawdata[j-1] != ">": - return -1 - - # find the name: "13.2.5.8 Tag name state" - # https://html.spec.whatwg.org/multipage/parsing.html#tag-name-state - match = tagfind_tolerant.match(rawdata, i+2) - assert match - tag = match.group(1).lower() - self.handle_endtag(tag) - self.clear_cdata_mode() - return j - - # Overridable -- finish processing of start+end tag: <tag.../> - def handle_startendtag(self, tag, attrs): - self.handle_starttag(tag, attrs) - self.handle_endtag(tag) - - # Overridable -- handle start tag - def handle_starttag(self, tag, attrs): - pass - - # Overridable -- handle end tag - def handle_endtag(self, tag): - pass - - # Overridable -- handle character reference - def handle_charref(self, name): - pass - - # Overridable -- handle entity reference - def handle_entityref(self, name): - pass - - # Overridable -- handle data - def handle_data(self, data): - pass - - # Overridable -- handle comment - def handle_comment(self, data): - pass - - # Overridable -- handle declaration - def handle_decl(self, decl): - pass - - # Overridable -- handle processing instruction - def handle_pi(self, data): - pass - - def unknown_decl(self, data): - pass diff --git a/Python314_4_x86_Template/Lib/http/__init__.py b/Python314_4_x86_Template/Lib/http/__init__.py deleted file mode 100644 index 691b4a9a3..000000000 --- a/Python314_4_x86_Template/Lib/http/__init__.py +++ /dev/null @@ -1,213 +0,0 @@ -from enum import StrEnum, IntEnum, _simple_enum - -__all__ = ['HTTPStatus', 'HTTPMethod'] - - -@_simple_enum(IntEnum) -class HTTPStatus: - """HTTP status codes and reason phrases - - Status codes from the following RFCs are all observed: - - * RFC 9110: HTTP Semantics, obsoletes 7231, which obsoleted 2616 - * RFC 6585: Additional HTTP Status Codes - * RFC 3229: Delta encoding in HTTP - * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518 - * RFC 5842: Binding Extensions to WebDAV - * RFC 7238: Permanent Redirect - * RFC 2295: Transparent Content Negotiation in HTTP - * RFC 2774: An HTTP Extension Framework - * RFC 7725: An HTTP Status Code to Report Legal Obstacles - * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) - * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) - * RFC 8297: An HTTP Status Code for Indicating Hints - * RFC 8470: Using Early Data in HTTP - """ - def __new__(cls, value, phrase, description=''): - obj = int.__new__(cls, value) - obj._value_ = value - obj.phrase = phrase - obj.description = description - return obj - - @property - def is_informational(self): - return 100 <= self <= 199 - - @property - def is_success(self): - return 200 <= self <= 299 - - @property - def is_redirection(self): - return 300 <= self <= 399 - - @property - def is_client_error(self): - return 400 <= self <= 499 - - @property - def is_server_error(self): - return 500 <= self <= 599 - - # informational - CONTINUE = 100, 'Continue', 'Request received, please continue' - SWITCHING_PROTOCOLS = (101, 'Switching Protocols', - 'Switching to new protocol; obey Upgrade header') - PROCESSING = 102, 'Processing', 'Server is processing the request' - EARLY_HINTS = (103, 'Early Hints', - 'Headers sent to prepare for the response') - - # success - OK = 200, 'OK', 'Request fulfilled, document follows' - CREATED = 201, 'Created', 'Document created, URL follows' - ACCEPTED = (202, 'Accepted', - 'Request accepted, processing continues off-line') - NON_AUTHORITATIVE_INFORMATION = (203, - 'Non-Authoritative Information', 'Request fulfilled from cache') - NO_CONTENT = 204, 'No Content', 'Request fulfilled, nothing follows' - RESET_CONTENT = 205, 'Reset Content', 'Clear input form for further input' - PARTIAL_CONTENT = 206, 'Partial Content', 'Partial content follows' - MULTI_STATUS = (207, 'Multi-Status', - 'Response contains multiple statuses in the body') - ALREADY_REPORTED = (208, 'Already Reported', - 'Operation has already been reported') - IM_USED = 226, 'IM Used', 'Request completed using instance manipulations' - - # redirection - MULTIPLE_CHOICES = (300, 'Multiple Choices', - 'Object has several resources -- see URI list') - MOVED_PERMANENTLY = (301, 'Moved Permanently', - 'Object moved permanently -- see URI list') - FOUND = 302, 'Found', 'Object moved temporarily -- see URI list' - SEE_OTHER = 303, 'See Other', 'Object moved -- see Method and URL list' - NOT_MODIFIED = (304, 'Not Modified', - 'Document has not changed since given time') - USE_PROXY = (305, 'Use Proxy', - 'You must use proxy specified in Location to access this resource') - TEMPORARY_REDIRECT = (307, 'Temporary Redirect', - 'Object moved temporarily -- see URI list') - PERMANENT_REDIRECT = (308, 'Permanent Redirect', - 'Object moved permanently -- see URI list') - - # client error - BAD_REQUEST = (400, 'Bad Request', - 'Bad request syntax or unsupported method') - UNAUTHORIZED = (401, 'Unauthorized', - 'No permission -- see authorization schemes') - PAYMENT_REQUIRED = (402, 'Payment Required', - 'No payment -- see charging schemes') - FORBIDDEN = (403, 'Forbidden', - 'Request forbidden -- authorization will not help') - NOT_FOUND = (404, 'Not Found', - 'Nothing matches the given URI') - METHOD_NOT_ALLOWED = (405, 'Method Not Allowed', - 'Specified method is invalid for this resource') - NOT_ACCEPTABLE = (406, 'Not Acceptable', - 'URI not available in preferred format') - PROXY_AUTHENTICATION_REQUIRED = (407, - 'Proxy Authentication Required', - 'You must authenticate with this proxy before proceeding') - REQUEST_TIMEOUT = (408, 'Request Timeout', - 'Request timed out; try again later') - CONFLICT = 409, 'Conflict', 'Request conflict' - GONE = (410, 'Gone', - 'URI no longer exists and has been permanently removed') - LENGTH_REQUIRED = (411, 'Length Required', - 'Client must specify Content-Length') - PRECONDITION_FAILED = (412, 'Precondition Failed', - 'Precondition in headers is false') - CONTENT_TOO_LARGE = (413, 'Content Too Large', - 'Content is too large') - REQUEST_ENTITY_TOO_LARGE = CONTENT_TOO_LARGE - URI_TOO_LONG = (414, 'URI Too Long', - 'URI is too long') - REQUEST_URI_TOO_LONG = URI_TOO_LONG - UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type', - 'Entity body in unsupported format') - RANGE_NOT_SATISFIABLE = (416, 'Range Not Satisfiable', - 'Cannot satisfy request range') - REQUESTED_RANGE_NOT_SATISFIABLE = RANGE_NOT_SATISFIABLE - EXPECTATION_FAILED = (417, 'Expectation Failed', - 'Expect condition could not be satisfied') - IM_A_TEAPOT = (418, 'I\'m a Teapot', - 'Server refuses to brew coffee because it is a teapot') - MISDIRECTED_REQUEST = (421, 'Misdirected Request', - 'Server is not able to produce a response') - UNPROCESSABLE_CONTENT = (422, 'Unprocessable Content', - 'Server is not able to process the contained instructions') - UNPROCESSABLE_ENTITY = UNPROCESSABLE_CONTENT - LOCKED = 423, 'Locked', 'Resource of a method is locked' - FAILED_DEPENDENCY = (424, 'Failed Dependency', - 'Dependent action of the request failed') - TOO_EARLY = (425, 'Too Early', - 'Server refuses to process a request that might be replayed') - UPGRADE_REQUIRED = (426, 'Upgrade Required', - 'Server refuses to perform the request using the current protocol') - PRECONDITION_REQUIRED = (428, 'Precondition Required', - 'The origin server requires the request to be conditional') - TOO_MANY_REQUESTS = (429, 'Too Many Requests', - 'The user has sent too many requests in ' - 'a given amount of time ("rate limiting")') - REQUEST_HEADER_FIELDS_TOO_LARGE = (431, - 'Request Header Fields Too Large', - 'The server is unwilling to process the request because its header ' - 'fields are too large') - UNAVAILABLE_FOR_LEGAL_REASONS = (451, - 'Unavailable For Legal Reasons', - 'The server is denying access to the ' - 'resource as a consequence of a legal demand') - - # server errors - INTERNAL_SERVER_ERROR = (500, 'Internal Server Error', - 'Server got itself in trouble') - NOT_IMPLEMENTED = (501, 'Not Implemented', - 'Server does not support this operation') - BAD_GATEWAY = (502, 'Bad Gateway', - 'Invalid responses from another server/proxy') - SERVICE_UNAVAILABLE = (503, 'Service Unavailable', - 'The server cannot process the request due to a high load') - GATEWAY_TIMEOUT = (504, 'Gateway Timeout', - 'The gateway server did not receive a timely response') - HTTP_VERSION_NOT_SUPPORTED = (505, 'HTTP Version Not Supported', - 'Cannot fulfill request') - VARIANT_ALSO_NEGOTIATES = (506, 'Variant Also Negotiates', - 'Server has an internal configuration error') - INSUFFICIENT_STORAGE = (507, 'Insufficient Storage', - 'Server is not able to store the representation') - LOOP_DETECTED = (508, 'Loop Detected', - 'Server encountered an infinite loop while processing a request') - NOT_EXTENDED = (510, 'Not Extended', - 'Request does not meet the resource access policy') - NETWORK_AUTHENTICATION_REQUIRED = (511, - 'Network Authentication Required', - 'The client needs to authenticate to gain network access') - - -@_simple_enum(StrEnum) -class HTTPMethod: - """HTTP methods and descriptions - - Methods from the following RFCs are all observed: - - * RFC 9110: HTTP Semantics, obsoletes 7231, which obsoleted 2616 - * RFC 5789: PATCH Method for HTTP - """ - def __new__(cls, value, description): - obj = str.__new__(cls, value) - obj._value_ = value - obj.description = description - return obj - - def __repr__(self): - return "<%s.%s>" % (self.__class__.__name__, self._name_) - - CONNECT = 'CONNECT', 'Establish a connection to the server.' - DELETE = 'DELETE', 'Remove the target.' - GET = 'GET', 'Retrieve the target.' - HEAD = 'HEAD', 'Same as GET, but only retrieve the status line and header section.' - OPTIONS = 'OPTIONS', 'Describe the communication options for the target.' - PATCH = 'PATCH', 'Apply partial modifications to a target.' - POST = 'POST', 'Perform target-specific processing with the request payload.' - PUT = 'PUT', 'Replace the target with the request payload.' - TRACE = 'TRACE', 'Perform a message loop-back test along the path to the target.' diff --git a/Python314_4_x86_Template/Lib/http/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/http/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 863832971a65f2d01f4c820976e92cc62e37f854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10447 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 diff --git a/Python314_4_x86_Template/Lib/http/__pycache__/client.cpython-314.pyc b/Python314_4_x86_Template/Lib/http/__pycache__/client.cpython-314.pyc deleted file mode 100644 index 0de752a491dcd08d8ca4089bee072255b3e06ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59996 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 GNBF-ju)WFv diff --git a/Python314_4_x86_Template/Lib/http/__pycache__/cookiejar.cpython-314.pyc b/Python314_4_x86_Template/Lib/http/__pycache__/cookiejar.cpython-314.pyc deleted file mode 100644 index 4b8d530f6a5795af969f48eb6f60ace050b08b78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84678 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 SGv}xq$-vUMuJg6!82&doeR=c% diff --git a/Python314_4_x86_Template/Lib/http/__pycache__/cookies.cpython-314.pyc b/Python314_4_x86_Template/Lib/http/__pycache__/cookies.cpython-314.pyc deleted file mode 100644 index e90505109a58126e51b1e08bf6dd26ac55b43e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23532 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 diff --git a/Python314_4_x86_Template/Lib/http/client.py b/Python314_4_x86_Template/Lib/http/client.py deleted file mode 100644 index 77f8d2629..000000000 --- a/Python314_4_x86_Template/Lib/http/client.py +++ /dev/null @@ -1,1570 +0,0 @@ -r"""HTTP/1.1 client library - -<intro stuff goes here> -<other stuff, too> - -HTTPConnection goes through a number of "states", which define when a client -may legally make another request or fetch the response for a particular -request. This diagram details these state transitions: - - (null) - | - | HTTPConnection() - v - Idle - | - | putrequest() - v - Request-started - | - | ( putheader() )* endheaders() - v - Request-sent - |\_____________________________ - | | getresponse() raises - | response = getresponse() | ConnectionError - v v - Unread-response Idle - [Response-headers-read] - |\____________________ - | | - | response.read() | putrequest() - v v - Idle Req-started-unread-response - ______/| - / | - response.read() | | ( putheader() )* endheaders() - v v - Request-started Req-sent-unread-response - | - | response.read() - v - Request-sent - -This diagram presents the following rules: - -- a second request may not be started until {response-headers-read} - -- a response [object] cannot be retrieved until {request-sent} - -- there is no differentiation between an unread response body and a - partially read response body - -Note: this enforcement is applied by the HTTPConnection class. The - HTTPResponse class does not enforce this state machine, which - implies sophisticated clients may accelerate the request/response - pipeline. Caution should be taken, though: accelerating the states - beyond the above pattern may imply knowledge of the server's - connection-close behavior for certain requests. For example, it - is impossible to tell whether the server will close the connection - UNTIL the response headers have been read; this means that further - requests cannot be placed into the pipeline until it is known that - the server will NOT be closing the connection. - -Logical State __state __response -------------- ------- ---------- -Idle _CS_IDLE None -Request-started _CS_REQ_STARTED None -Request-sent _CS_REQ_SENT None -Unread-response _CS_IDLE <response_class> -Req-started-unread-response _CS_REQ_STARTED <response_class> -Req-sent-unread-response _CS_REQ_SENT <response_class> -""" - -import email.parser -import email.message -import errno -import http -import io -import re -import socket -import sys -import collections.abc -from urllib.parse import urlsplit - -# HTTPMessage, parse_headers(), and the HTTP status code constants are -# intentionally omitted for simplicity -__all__ = ["HTTPResponse", "HTTPConnection", - "HTTPException", "NotConnected", "UnknownProtocol", - "UnknownTransferEncoding", "UnimplementedFileMode", - "IncompleteRead", "InvalidURL", "ImproperConnectionState", - "CannotSendRequest", "CannotSendHeader", "ResponseNotReady", - "BadStatusLine", "LineTooLong", "RemoteDisconnected", "error", - "responses"] - -HTTP_PORT = 80 -HTTPS_PORT = 443 - -_UNKNOWN = 'UNKNOWN' - -# connection states -_CS_IDLE = 'Idle' -_CS_REQ_STARTED = 'Request-started' -_CS_REQ_SENT = 'Request-sent' - - -# hack to maintain backwards compatibility -globals().update(http.HTTPStatus.__members__) - -# another hack to maintain backwards compatibility -# Mapping status codes to official W3C names -responses = {v: v.phrase for v in http.HTTPStatus.__members__.values()} - -# maximal line length when calling readline(). -_MAXLINE = 65536 -_MAXHEADERS = 100 - -# Data larger than this will be read in chunks, to prevent extreme -# overallocation. -_MIN_READ_BUF_SIZE = 1 << 20 - - -# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2) -# -# VCHAR = %x21-7E -# obs-text = %x80-FF -# header-field = field-name ":" OWS field-value OWS -# field-name = token -# field-value = *( field-content / obs-fold ) -# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] -# field-vchar = VCHAR / obs-text -# -# obs-fold = CRLF 1*( SP / HTAB ) -# ; obsolete line folding -# ; see Section 3.2.4 - -# token = 1*tchar -# -# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" -# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" -# / DIGIT / ALPHA -# ; any VCHAR, except delimiters -# -# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1 - -# the patterns for both name and value are more lenient than RFC -# definitions to allow for backwards compatibility -_is_legal_header_name = re.compile(rb'[^:\s][^:\r\n]*').fullmatch -_is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search - -# These characters are not allowed within HTTP URL paths. -# See https://tools.ietf.org/html/rfc3986#section-3.3 and the -# https://tools.ietf.org/html/rfc3986#appendix-A pchar definition. -# Prevents CVE-2019-9740. Includes control characters such as \r\n. -# We don't restrict chars above \x7f as putrequest() limits us to ASCII. -_contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f]') -# Arguably only these _should_ allowed: -# _is_allowed_url_pchars_re = re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$") -# We are more lenient for assumed real world compatibility purposes. - -# These characters are not allowed within HTTP method names -# to prevent http header injection. -_contains_disallowed_method_pchar_re = re.compile('[\x00-\x1f]') - -# We always set the Content-Length header for these methods because some -# servers will otherwise respond with a 411 -_METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'} - - -def _encode(data, name='data'): - """Call data.encode("latin-1") but show a better error message.""" - try: - return data.encode("latin-1") - except UnicodeEncodeError as err: - raise UnicodeEncodeError( - err.encoding, - err.object, - err.start, - err.end, - "%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') " - "if you want to send it encoded in UTF-8." % - (name.title(), data[err.start:err.end], name)) from None - -def _strip_ipv6_iface(enc_name: bytes) -> bytes: - """Remove interface scope from IPv6 address.""" - enc_name, percent, _ = enc_name.partition(b"%") - if percent: - assert enc_name.startswith(b'['), enc_name - enc_name += b']' - return enc_name - -class HTTPMessage(email.message.Message): - # XXX The only usage of this method is in - # http.server.CGIHTTPRequestHandler. Maybe move the code there so - # that it doesn't need to be part of the public API. The API has - # never been defined so this could cause backwards compatibility - # issues. - - def getallmatchingheaders(self, name): - """Find all header lines matching a given header name. - - Look through the list of headers and find all lines matching a given - header name (and their continuation lines). A list of the lines is - returned, without interpretation. If the header does not occur, an - empty list is returned. If the header occurs multiple times, all - occurrences are returned. Case is not important in the header name. - - """ - name = name.lower() + ':' - n = len(name) - lst = [] - hit = 0 - for line in self.keys(): - if line[:n].lower() == name: - hit = 1 - elif not line[:1].isspace(): - hit = 0 - if hit: - lst.append(line) - return lst - -def _read_headers(fp): - """Reads potential header lines into a list from a file pointer. - - Length of line is limited by _MAXLINE, and number of - headers is limited by _MAXHEADERS. - """ - headers = [] - while True: - line = fp.readline(_MAXLINE + 1) - if len(line) > _MAXLINE: - raise LineTooLong("header line") - headers.append(line) - if len(headers) > _MAXHEADERS: - raise HTTPException("got more than %d headers" % _MAXHEADERS) - if line in (b'\r\n', b'\n', b''): - break - return headers - -def _parse_header_lines(header_lines, _class=HTTPMessage): - """ - Parses only RFC 5322 headers from header lines. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. - - """ - hstring = b''.join(header_lines).decode('iso-8859-1') - return email.parser.Parser(_class=_class).parsestr(hstring) - -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC 5322 headers from a file pointer.""" - - headers = _read_headers(fp) - return _parse_header_lines(headers, _class) - - -class HTTPResponse(io.BufferedIOBase): - - # See RFC 2616 sec 19.6 and RFC 1945 sec 6 for details. - - # The bytes from the socket object are iso-8859-1 strings. - # See RFC 2616 sec 2.2 which notes an exception for MIME-encoded - # text following RFC 2047. The basic status line parsing only - # accepts iso-8859-1. - - def __init__(self, sock, debuglevel=0, method=None, url=None): - # If the response includes a content-length header, we need to - # make sure that the client doesn't read more than the - # specified number of bytes. If it does, it will block until - # the server times out and closes the connection. This will - # happen if a self.fp.read() is done (without a size) whether - # self.fp is buffered or not. So, no self.fp.read() by - # clients unless they know what they are doing. - self.fp = sock.makefile("rb") - self.debuglevel = debuglevel - self._method = method - - # The HTTPResponse object is returned via urllib. The clients - # of http and urllib expect different attributes for the - # headers. headers is used here and supports urllib. msg is - # provided as a backwards compatibility layer for http - # clients. - - self.headers = self.msg = None - - # from the Status-Line of the response - self.version = _UNKNOWN # HTTP-Version - self.status = _UNKNOWN # Status-Code - self.reason = _UNKNOWN # Reason-Phrase - - self.chunked = _UNKNOWN # is "chunked" being used? - self.chunk_left = _UNKNOWN # bytes left to read in current chunk - self.length = _UNKNOWN # number of bytes left in response - self.will_close = _UNKNOWN # conn will close at end of response - - def _read_status(self): - line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") - if len(line) > _MAXLINE: - raise LineTooLong("status line") - if self.debuglevel > 0: - print("reply:", repr(line)) - if not line: - # Presumably, the server closed the connection before - # sending a valid response. - raise RemoteDisconnected("Remote end closed connection without" - " response") - try: - version, status, reason = line.split(None, 2) - except ValueError: - try: - version, status = line.split(None, 1) - reason = "" - except ValueError: - # empty version will cause next test to fail. - version = "" - if not version.startswith("HTTP/"): - self._close_conn() - raise BadStatusLine(line) - - # The status code is a three-digit number - try: - status = int(status) - if status < 100 or status > 999: - raise BadStatusLine(line) - except ValueError: - raise BadStatusLine(line) - return version, status, reason - - def begin(self): - if self.headers is not None: - # we've already started reading the response - return - - # read until we get a non-100 response - while True: - version, status, reason = self._read_status() - if status != CONTINUE: - break - # skip the header from the 100 response - skipped_headers = _read_headers(self.fp) - if self.debuglevel > 0: - print("headers:", skipped_headers) - del skipped_headers - - self.code = self.status = status - self.reason = reason.strip() - if version in ("HTTP/1.0", "HTTP/0.9"): - # Some servers might still return "0.9", treat it as 1.0 anyway - self.version = 10 - elif version.startswith("HTTP/1."): - self.version = 11 # use HTTP/1.1 code for HTTP/1.x where x>=1 - else: - raise UnknownProtocol(version) - - self.headers = self.msg = parse_headers(self.fp) - - if self.debuglevel > 0: - for hdr, val in self.headers.items(): - print("header:", hdr + ":", val) - - # are we using the chunked-style of transfer encoding? - tr_enc = self.headers.get("transfer-encoding") - if tr_enc and tr_enc.lower() == "chunked": - self.chunked = True - self.chunk_left = None - else: - self.chunked = False - - # will the connection close at the end of the response? - self.will_close = self._check_close() - - # do we have a Content-Length? - # NOTE: RFC 2616, S4.4, #3 says we ignore this if tr_enc is "chunked" - self.length = None - length = self.headers.get("content-length") - if length and not self.chunked: - try: - self.length = int(length) - except ValueError: - self.length = None - else: - if self.length < 0: # ignore nonsensical negative lengths - self.length = None - else: - self.length = None - - # does the body have a fixed length? (of zero) - if (status == NO_CONTENT or status == NOT_MODIFIED or - 100 <= status < 200 or # 1xx codes - self._method == "HEAD"): - self.length = 0 - - # if the connection remains open, and we aren't using chunked, and - # a content-length was not provided, then assume that the connection - # WILL close. - if (not self.will_close and - not self.chunked and - self.length is None): - self.will_close = True - - def _check_close(self): - conn = self.headers.get("connection") - if self.version == 11: - # An HTTP/1.1 proxy is assumed to stay open unless - # explicitly closed. - if conn and "close" in conn.lower(): - return True - return False - - # Some HTTP/1.0 implementations have support for persistent - # connections, using rules different than HTTP/1.1. - - # For older HTTP, Keep-Alive indicates persistent connection. - if self.headers.get("keep-alive"): - return False - - # At least Akamai returns a "Connection: Keep-Alive" header, - # which was supposed to be sent by the client. - if conn and "keep-alive" in conn.lower(): - return False - - # Proxy-Connection is a netscape hack. - pconn = self.headers.get("proxy-connection") - if pconn and "keep-alive" in pconn.lower(): - return False - - # otherwise, assume it will close - return True - - def _close_conn(self): - fp = self.fp - self.fp = None - fp.close() - - def close(self): - try: - super().close() # set "closed" flag - finally: - if self.fp: - self._close_conn() - - # These implementations are for the benefit of io.BufferedReader. - - # XXX This class should probably be revised to act more like - # the "raw stream" that BufferedReader expects. - - def flush(self): - super().flush() - if self.fp: - self.fp.flush() - - def readable(self): - """Always returns True""" - return True - - # End of "raw stream" methods - - def isclosed(self): - """True if the connection is closed.""" - # NOTE: it is possible that we will not ever call self.close(). This - # case occurs when will_close is TRUE, length is None, and we - # read up to the last byte, but NOT past it. - # - # IMPLIES: if will_close is FALSE, then self.close() will ALWAYS be - # called, meaning self.isclosed() is meaningful. - return self.fp is None - - def read(self, amt=None): - """Read and return the response body, or up to the next amt bytes.""" - if self.fp is None: - return b"" - - if self._method == "HEAD": - self._close_conn() - return b"" - - if self.chunked: - return self._read_chunked(amt) - - if amt is not None and amt >= 0: - if self.length is not None and amt > self.length: - # clip the read to the "end of response" - amt = self.length - s = self.fp.read(amt) - if not s and amt: - # Ideally, we would raise IncompleteRead if the content-length - # wasn't satisfied, but it might break compatibility. - self._close_conn() - elif self.length is not None: - self.length -= len(s) - if not self.length: - self._close_conn() - return s - else: - # Amount is not given (unbounded read) so we must check self.length - if self.length is None: - s = self.fp.read() - else: - try: - s = self._safe_read(self.length) - except IncompleteRead: - self._close_conn() - raise - self.length = 0 - self._close_conn() # we read everything - return s - - def readinto(self, b): - """Read up to len(b) bytes into bytearray b and return the number - of bytes read. - """ - - if self.fp is None: - return 0 - - if self._method == "HEAD": - self._close_conn() - return 0 - - if self.chunked: - return self._readinto_chunked(b) - - if self.length is not None: - if len(b) > self.length: - # clip the read to the "end of response" - b = memoryview(b)[0:self.length] - - # we do not use _safe_read() here because this may be a .will_close - # connection, and the user is reading more bytes than will be provided - # (for example, reading in 1k chunks) - n = self.fp.readinto(b) - if not n and b: - # Ideally, we would raise IncompleteRead if the content-length - # wasn't satisfied, but it might break compatibility. - self._close_conn() - elif self.length is not None: - self.length -= n - if not self.length: - self._close_conn() - return n - - def _read_next_chunk_size(self): - # Read the next chunk size from the file - line = self.fp.readline(_MAXLINE + 1) - if len(line) > _MAXLINE: - raise LineTooLong("chunk size") - i = line.find(b";") - if i >= 0: - line = line[:i] # strip chunk-extensions - try: - return int(line, 16) - except ValueError: - # close the connection as protocol synchronisation is - # probably lost - self._close_conn() - raise - - def _read_and_discard_trailer(self): - # read and discard trailer up to the CRLF terminator - ### note: we shouldn't have any trailers! - while True: - line = self.fp.readline(_MAXLINE + 1) - if len(line) > _MAXLINE: - raise LineTooLong("trailer line") - if not line: - # a vanishingly small number of sites EOF without - # sending the trailer - break - if line in (b'\r\n', b'\n', b''): - break - - def _get_chunk_left(self): - # return self.chunk_left, reading a new chunk if necessary. - # chunk_left == 0: at the end of the current chunk, need to close it - # chunk_left == None: No current chunk, should read next. - # This function returns non-zero or None if the last chunk has - # been read. - chunk_left = self.chunk_left - if not chunk_left: # Can be 0 or None - if chunk_left is not None: - # We are at the end of chunk, discard chunk end - self._safe_read(2) # toss the CRLF at the end of the chunk - try: - chunk_left = self._read_next_chunk_size() - except ValueError: - raise IncompleteRead(b'') - if chunk_left == 0: - # last chunk: 1*("0") [ chunk-extension ] CRLF - self._read_and_discard_trailer() - # we read everything; close the "file" - self._close_conn() - chunk_left = None - self.chunk_left = chunk_left - return chunk_left - - def _read_chunked(self, amt=None): - assert self.chunked != _UNKNOWN - if amt is not None and amt < 0: - amt = None - value = [] - try: - while (chunk_left := self._get_chunk_left()) is not None: - if amt is not None and amt <= chunk_left: - value.append(self._safe_read(amt)) - self.chunk_left = chunk_left - amt - break - - value.append(self._safe_read(chunk_left)) - if amt is not None: - amt -= chunk_left - self.chunk_left = 0 - return b''.join(value) - except IncompleteRead as exc: - raise IncompleteRead(b''.join(value)) from exc - - def _readinto_chunked(self, b): - assert self.chunked != _UNKNOWN - total_bytes = 0 - mvb = memoryview(b) - try: - while True: - chunk_left = self._get_chunk_left() - if chunk_left is None: - return total_bytes - - if len(mvb) <= chunk_left: - n = self._safe_readinto(mvb) - self.chunk_left = chunk_left - n - return total_bytes + n - - temp_mvb = mvb[:chunk_left] - n = self._safe_readinto(temp_mvb) - mvb = mvb[n:] - total_bytes += n - self.chunk_left = 0 - - except IncompleteRead: - raise IncompleteRead(bytes(b[0:total_bytes])) - - def _safe_read(self, amt): - """Read the number of bytes requested. - - This function should be used when <amt> bytes "should" be present for - reading. If the bytes are truly not available (due to EOF), then the - IncompleteRead exception can be used to detect the problem. - """ - cursize = min(amt, _MIN_READ_BUF_SIZE) - data = self.fp.read(cursize) - if len(data) >= amt: - return data - if len(data) < cursize: - raise IncompleteRead(data, amt - len(data)) - - data = io.BytesIO(data) - data.seek(0, 2) - while True: - # This is a geometric increase in read size (never more than - # doubling out the current length of data per loop iteration). - delta = min(cursize, amt - cursize) - data.write(self.fp.read(delta)) - if data.tell() >= amt: - return data.getvalue() - cursize += delta - if data.tell() < cursize: - raise IncompleteRead(data.getvalue(), amt - data.tell()) - - def _safe_readinto(self, b): - """Same as _safe_read, but for reading into a buffer.""" - amt = len(b) - n = self.fp.readinto(b) - if n < amt: - raise IncompleteRead(bytes(b[:n]), amt-n) - return n - - def read1(self, n=-1): - """Read with at most one underlying system call. If at least one - byte is buffered, return that instead. - """ - if self.fp is None or self._method == "HEAD": - return b"" - if self.chunked: - return self._read1_chunked(n) - if self.length is not None and (n < 0 or n > self.length): - n = self.length - result = self.fp.read1(n) - if not result and n: - self._close_conn() - elif self.length is not None: - self.length -= len(result) - if not self.length: - self._close_conn() - return result - - def peek(self, n=-1): - # Having this enables IOBase.readline() to read more than one - # byte at a time - if self.fp is None or self._method == "HEAD": - return b"" - if self.chunked: - return self._peek_chunked(n) - return self.fp.peek(n) - - def readline(self, limit=-1): - if self.fp is None or self._method == "HEAD": - return b"" - if self.chunked: - # Fallback to IOBase readline which uses peek() and read() - return super().readline(limit) - if self.length is not None and (limit < 0 or limit > self.length): - limit = self.length - result = self.fp.readline(limit) - if not result and limit: - self._close_conn() - elif self.length is not None: - self.length -= len(result) - if not self.length: - self._close_conn() - return result - - def _read1_chunked(self, n): - # Strictly speaking, _get_chunk_left() may cause more than one read, - # but that is ok, since that is to satisfy the chunked protocol. - chunk_left = self._get_chunk_left() - if chunk_left is None or n == 0: - return b'' - if not (0 <= n <= chunk_left): - n = chunk_left # if n is negative or larger than chunk_left - read = self.fp.read1(n) - self.chunk_left -= len(read) - if not read: - raise IncompleteRead(b"") - return read - - def _peek_chunked(self, n): - # Strictly speaking, _get_chunk_left() may cause more than one read, - # but that is ok, since that is to satisfy the chunked protocol. - try: - chunk_left = self._get_chunk_left() - except IncompleteRead: - return b'' # peek doesn't worry about protocol - if chunk_left is None: - return b'' # eof - # peek is allowed to return more than requested. Just request the - # entire chunk, and truncate what we get. - return self.fp.peek(chunk_left)[:chunk_left] - - def fileno(self): - return self.fp.fileno() - - def getheader(self, name, default=None): - '''Returns the value of the header matching *name*. - - If there are multiple matching headers, the values are - combined into a single string separated by commas and spaces. - - If no matching header is found, returns *default* or None if - the *default* is not specified. - - If the headers are unknown, raises http.client.ResponseNotReady. - - ''' - if self.headers is None: - raise ResponseNotReady() - headers = self.headers.get_all(name) or default - if isinstance(headers, str) or not hasattr(headers, '__iter__'): - return headers - else: - return ', '.join(headers) - - def getheaders(self): - """Return list of (header, value) tuples.""" - if self.headers is None: - raise ResponseNotReady() - return list(self.headers.items()) - - # We override IOBase.__iter__ so that it doesn't check for closed-ness - - def __iter__(self): - return self - - # For compatibility with old-style urllib responses. - - def info(self): - '''Returns an instance of the class mimetools.Message containing - meta-information associated with the URL. - - When the method is HTTP, these headers are those returned by - the server at the head of the retrieved HTML page (including - Content-Length and Content-Type). - - When the method is FTP, a Content-Length header will be - present if (as is now usual) the server passed back a file - length in response to the FTP retrieval request. A - Content-Type header will be present if the MIME type can be - guessed. - - When the method is local-file, returned headers will include - a Date representing the file's last-modified time, a - Content-Length giving file size, and a Content-Type - containing a guess at the file's type. See also the - description of the mimetools module. - - ''' - return self.headers - - def geturl(self): - '''Return the real URL of the page. - - In some cases, the HTTP server redirects a client to another - URL. The urlopen() function handles this transparently, but in - some cases the caller needs to know which URL the client was - redirected to. The geturl() method can be used to get at this - redirected URL. - - ''' - return self.url - - def getcode(self): - '''Return the HTTP status code that was sent with the response, - or None if the URL is not an HTTP URL. - - ''' - return self.status - - -def _create_https_context(http_version): - # Function also used by urllib.request to be able to set the check_hostname - # attribute on a context object. - context = ssl._create_default_https_context() - # send ALPN extension to indicate HTTP/1.1 protocol - if http_version == 11: - context.set_alpn_protocols(['http/1.1']) - # enable PHA for TLS 1.3 connections if available - if context.post_handshake_auth is not None: - context.post_handshake_auth = True - return context - - -class HTTPConnection: - - _http_vsn = 11 - _http_vsn_str = 'HTTP/1.1' - - response_class = HTTPResponse - default_port = HTTP_PORT - auto_open = 1 - debuglevel = 0 - - @staticmethod - def _is_textIO(stream): - """Test whether a file-like object is a text or a binary stream. - """ - return isinstance(stream, io.TextIOBase) - - @staticmethod - def _get_content_length(body, method): - """Get the content-length based on the body. - - If the body is None, we set Content-Length: 0 for methods that expect - a body (RFC 7230, Section 3.3.2). We also set the Content-Length for - any method if the body is a str or bytes-like object and not a file. - """ - if body is None: - # do an explicit check for not None here to distinguish - # between unset and set but empty - if method.upper() in _METHODS_EXPECTING_BODY: - return 0 - else: - return None - - if hasattr(body, 'read'): - # file-like object. - return None - - try: - # does it implement the buffer protocol (bytes, bytearray, array)? - mv = memoryview(body) - return mv.nbytes - except TypeError: - pass - - if isinstance(body, str): - return len(body) - - return None - - def __init__(self, host, port=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, blocksize=8192): - self.timeout = timeout - self.source_address = source_address - self.blocksize = blocksize - self.sock = None - self._buffer = [] - self.__response = None - self.__state = _CS_IDLE - self._method = None - self._tunnel_host = None - self._tunnel_port = None - self._tunnel_headers = {} - self._raw_proxy_headers = None - - (self.host, self.port) = self._get_hostport(host, port) - - self._validate_host(self.host) - - # This is stored as an instance variable to allow unit - # tests to replace it with a suitable mockup - self._create_connection = socket.create_connection - - def set_tunnel(self, host, port=None, headers=None): - """Set up host and port for HTTP CONNECT tunnelling. - - In a connection that uses HTTP CONNECT tunnelling, the host passed to - the constructor is used as a proxy server that relays all communication - to the endpoint passed to `set_tunnel`. This done by sending an HTTP - CONNECT request to the proxy server when the connection is established. - - This method must be called before the HTTP connection has been - established. - - The headers argument should be a mapping of extra HTTP headers to send - with the CONNECT request. - - As HTTP/1.1 is used for HTTP CONNECT tunnelling request, as per the RFC - (https://tools.ietf.org/html/rfc7231#section-4.3.6), a HTTP Host: - header must be provided, matching the authority-form of the request - target provided as the destination for the CONNECT request. If a - HTTP Host: header is not provided via the headers argument, one - is generated and transmitted automatically. - """ - - if self.sock: - raise RuntimeError("Can't set up tunnel for established connection") - - self._tunnel_host, self._tunnel_port = self._get_hostport(host, port) - if headers: - self._tunnel_headers = headers.copy() - else: - self._tunnel_headers.clear() - - if not any(header.lower() == "host" for header in self._tunnel_headers): - encoded_host = self._tunnel_host.encode("idna").decode("ascii") - self._tunnel_headers["Host"] = "%s:%d" % ( - encoded_host, self._tunnel_port) - - def _get_hostport(self, host, port): - if port is None: - i = host.rfind(':') - j = host.rfind(']') # ipv6 addresses have [...] - if i > j: - try: - port = int(host[i+1:]) - except ValueError: - if host[i+1:] == "": # http://foo.com:/ == http://foo.com/ - port = self.default_port - else: - raise InvalidURL("nonnumeric port: '%s'" % host[i+1:]) - host = host[:i] - else: - port = self.default_port - if host and host[0] == '[' and host[-1] == ']': - host = host[1:-1] - - return (host, port) - - def set_debuglevel(self, level): - self.debuglevel = level - - def _wrap_ipv6(self, ip): - if b':' in ip and ip[0] != b'['[0]: - return b"[" + ip + b"]" - return ip - - def _tunnel(self): - connect = b"CONNECT %s:%d %s\r\n" % ( - self._wrap_ipv6(self._tunnel_host.encode("idna")), - self._tunnel_port, - self._http_vsn_str.encode("ascii")) - headers = [connect] - for header, value in self._tunnel_headers.items(): - headers.append(f"{header}: {value}\r\n".encode("latin-1")) - headers.append(b"\r\n") - # Making a single send() call instead of one per line encourages - # the host OS to use a more optimal packet size instead of - # potentially emitting a series of small packets. - self.send(b"".join(headers)) - del headers - - response = self.response_class(self.sock, method=self._method) - try: - (version, code, message) = response._read_status() - - self._raw_proxy_headers = _read_headers(response.fp) - - if self.debuglevel > 0: - for header in self._raw_proxy_headers: - print('header:', header.decode()) - - if code != http.HTTPStatus.OK: - self.close() - raise OSError(f"Tunnel connection failed: {code} {message.strip()}") - - finally: - response.close() - - def get_proxy_response_headers(self): - """ - Returns a dictionary with the headers of the response - received from the proxy server to the CONNECT request - sent to set the tunnel. - - If the CONNECT request was not sent, the method returns None. - """ - return ( - _parse_header_lines(self._raw_proxy_headers) - if self._raw_proxy_headers is not None - else None - ) - - def connect(self): - """Connect to the host and port specified in __init__.""" - sys.audit("http.client.connect", self, self.host, self.port) - self.sock = self._create_connection( - (self.host,self.port), self.timeout, self.source_address) - # Might fail in OSs that don't implement TCP_NODELAY - try: - self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - except OSError as e: - if e.errno != errno.ENOPROTOOPT: - raise - - if self._tunnel_host: - self._tunnel() - - def close(self): - """Close the connection to the HTTP server.""" - self.__state = _CS_IDLE - try: - sock = self.sock - if sock: - self.sock = None - sock.close() # close it manually... there may be other refs - finally: - response = self.__response - if response: - self.__response = None - response.close() - - def send(self, data): - """Send 'data' to the server. - ``data`` can be a string object, a bytes object, an array object, a - file-like object that supports a .read() method, or an iterable object. - """ - - if self.sock is None: - if self.auto_open: - self.connect() - else: - raise NotConnected() - - if self.debuglevel > 0: - print("send:", repr(data)) - if hasattr(data, "read") : - if self.debuglevel > 0: - print("sending a readable") - encode = self._is_textIO(data) - if encode and self.debuglevel > 0: - print("encoding file using iso-8859-1") - while datablock := data.read(self.blocksize): - if encode: - datablock = datablock.encode("iso-8859-1") - sys.audit("http.client.send", self, datablock) - self.sock.sendall(datablock) - return - sys.audit("http.client.send", self, data) - try: - self.sock.sendall(data) - except TypeError: - if isinstance(data, collections.abc.Iterable): - for d in data: - self.sock.sendall(d) - else: - raise TypeError("data should be a bytes-like object " - "or an iterable, got %r" % type(data)) - - def _output(self, s): - """Add a line of output to the current request buffer. - - Assumes that the line does *not* end with \\r\\n. - """ - self._buffer.append(s) - - def _read_readable(self, readable): - if self.debuglevel > 0: - print("reading a readable") - encode = self._is_textIO(readable) - if encode and self.debuglevel > 0: - print("encoding file using iso-8859-1") - while datablock := readable.read(self.blocksize): - if encode: - datablock = datablock.encode("iso-8859-1") - yield datablock - - def _send_output(self, message_body=None, encode_chunked=False): - """Send the currently buffered request and clear the buffer. - - Appends an extra \\r\\n to the buffer. - A message_body may be specified, to be appended to the request. - """ - self._buffer.extend((b"", b"")) - msg = b"\r\n".join(self._buffer) - del self._buffer[:] - self.send(msg) - - if message_body is not None: - - # create a consistent interface to message_body - if hasattr(message_body, 'read'): - # Let file-like take precedence over byte-like. This - # is needed to allow the current position of mmap'ed - # files to be taken into account. - chunks = self._read_readable(message_body) - else: - try: - # this is solely to check to see if message_body - # implements the buffer API. it /would/ be easier - # to capture if PyObject_CheckBuffer was exposed - # to Python. - memoryview(message_body) - except TypeError: - try: - chunks = iter(message_body) - except TypeError: - raise TypeError("message_body should be a bytes-like " - "object or an iterable, got %r" - % type(message_body)) - else: - # the object implements the buffer interface and - # can be passed directly into socket methods - chunks = (message_body,) - - for chunk in chunks: - if not chunk: - if self.debuglevel > 0: - print('Zero length chunk ignored') - continue - - if encode_chunked and self._http_vsn == 11: - # chunked encoding - chunk = f'{len(chunk):X}\r\n'.encode('ascii') + chunk \ - + b'\r\n' - self.send(chunk) - - if encode_chunked and self._http_vsn == 11: - # end chunked transfer - self.send(b'0\r\n\r\n') - - def putrequest(self, method, url, skip_host=False, - skip_accept_encoding=False): - """Send a request to the server. - - 'method' specifies an HTTP request method, e.g. 'GET'. - 'url' specifies the object being requested, e.g. '/index.html'. - 'skip_host' if True does not add automatically a 'Host:' header - 'skip_accept_encoding' if True does not add automatically an - 'Accept-Encoding:' header - """ - - # if a prior response has been completed, then forget about it. - if self.__response and self.__response.isclosed(): - self.__response = None - - - # in certain cases, we cannot issue another request on this connection. - # this occurs when: - # 1) we are in the process of sending a request. (_CS_REQ_STARTED) - # 2) a response to a previous request has signalled that it is going - # to close the connection upon completion. - # 3) the headers for the previous response have not been read, thus - # we cannot determine whether point (2) is true. (_CS_REQ_SENT) - # - # if there is no prior response, then we can request at will. - # - # if point (2) is true, then we will have passed the socket to the - # response (effectively meaning, "there is no prior response"), and - # will open a new one when a new request is made. - # - # Note: if a prior response exists, then we *can* start a new request. - # We are not allowed to begin fetching the response to this new - # request, however, until that prior response is complete. - # - if self.__state == _CS_IDLE: - self.__state = _CS_REQ_STARTED - else: - raise CannotSendRequest(self.__state) - - self._validate_method(method) - - # Save the method for use later in the response phase - self._method = method - - url = url or '/' - self._validate_path(url) - - request = '%s %s %s' % (method, url, self._http_vsn_str) - - self._output(self._encode_request(request)) - - if self._http_vsn == 11: - # Issue some standard headers for better HTTP/1.1 compliance - - if not skip_host: - # this header is issued *only* for HTTP/1.1 - # connections. more specifically, this means it is - # only issued when the client uses the new - # HTTPConnection() class. backwards-compat clients - # will be using HTTP/1.0 and those clients may be - # issuing this header themselves. we should NOT issue - # it twice; some web servers (such as Apache) barf - # when they see two Host: headers - - # If we need a non-standard port,include it in the - # header. If the request is going through a proxy, - # but the host of the actual URL, not the host of the - # proxy. - - netloc = '' - if url.startswith('http'): - nil, netloc, nil, nil, nil = urlsplit(url) - - if netloc: - try: - netloc_enc = netloc.encode("ascii") - except UnicodeEncodeError: - netloc_enc = netloc.encode("idna") - self.putheader('Host', _strip_ipv6_iface(netloc_enc)) - else: - if self._tunnel_host: - host = self._tunnel_host - port = self._tunnel_port - else: - host = self.host - port = self.port - - try: - host_enc = host.encode("ascii") - except UnicodeEncodeError: - host_enc = host.encode("idna") - - # As per RFC 273, IPv6 address should be wrapped with [] - # when used as Host header - host_enc = self._wrap_ipv6(host_enc) - if ":" in host: - host_enc = _strip_ipv6_iface(host_enc) - - if port == self.default_port: - self.putheader('Host', host_enc) - else: - host_enc = host_enc.decode("ascii") - self.putheader('Host', "%s:%s" % (host_enc, port)) - - # note: we are assuming that clients will not attempt to set these - # headers since *this* library must deal with the - # consequences. this also means that when the supporting - # libraries are updated to recognize other forms, then this - # code should be changed (removed or updated). - - # we only want a Content-Encoding of "identity" since we don't - # support encodings such as x-gzip or x-deflate. - if not skip_accept_encoding: - self.putheader('Accept-Encoding', 'identity') - - # we can accept "chunked" Transfer-Encodings, but no others - # NOTE: no TE header implies *only* "chunked" - #self.putheader('TE', 'chunked') - - # if TE is supplied in the header, then it must appear in a - # Connection header. - #self.putheader('Connection', 'TE') - - else: - # For HTTP/1.0, the server will assume "not chunked" - pass - - def _encode_request(self, request): - # ASCII also helps prevent CVE-2019-9740. - return request.encode('ascii') - - def _validate_method(self, method): - """Validate a method name for putrequest.""" - # prevent http header injection - match = _contains_disallowed_method_pchar_re.search(method) - if match: - raise ValueError( - f"method can't contain control characters. {method!r} " - f"(found at least {match.group()!r})") - - def _validate_path(self, url): - """Validate a url for putrequest.""" - # Prevent CVE-2019-9740. - match = _contains_disallowed_url_pchar_re.search(url) - if match: - raise InvalidURL(f"URL can't contain control characters. {url!r} " - f"(found at least {match.group()!r})") - - def _validate_host(self, host): - """Validate a host so it doesn't contain control characters.""" - # Prevent CVE-2019-18348. - match = _contains_disallowed_url_pchar_re.search(host) - if match: - raise InvalidURL(f"URL can't contain control characters. {host!r} " - f"(found at least {match.group()!r})") - - def putheader(self, header, *values): - """Send a request header line to the server. - - For example: h.putheader('Accept', 'text/html') - """ - if self.__state != _CS_REQ_STARTED: - raise CannotSendHeader() - - if hasattr(header, 'encode'): - header = header.encode('ascii') - - if not _is_legal_header_name(header): - raise ValueError('Invalid header name %r' % (header,)) - - values = list(values) - for i, one_value in enumerate(values): - if hasattr(one_value, 'encode'): - values[i] = one_value.encode('latin-1') - elif isinstance(one_value, int): - values[i] = str(one_value).encode('ascii') - - if _is_illegal_header_value(values[i]): - raise ValueError('Invalid header value %r' % (values[i],)) - - value = b'\r\n\t'.join(values) - header = header + b': ' + value - self._output(header) - - def endheaders(self, message_body=None, *, encode_chunked=False): - """Indicate that the last header line has been sent to the server. - - This method sends the request to the server. The optional message_body - argument can be used to pass a message body associated with the - request. - """ - if self.__state == _CS_REQ_STARTED: - self.__state = _CS_REQ_SENT - else: - raise CannotSendHeader() - self._send_output(message_body, encode_chunked=encode_chunked) - - def request(self, method, url, body=None, headers={}, *, - encode_chunked=False): - """Send a complete request to the server.""" - self._send_request(method, url, body, headers, encode_chunked) - - def _send_request(self, method, url, body, headers, encode_chunked): - # Honor explicitly requested Host: and Accept-Encoding: headers. - header_names = frozenset(k.lower() for k in headers) - skips = {} - if 'host' in header_names: - skips['skip_host'] = 1 - if 'accept-encoding' in header_names: - skips['skip_accept_encoding'] = 1 - - self.putrequest(method, url, **skips) - - # chunked encoding will happen if HTTP/1.1 is used and either - # the caller passes encode_chunked=True or the following - # conditions hold: - # 1. content-length has not been explicitly set - # 2. the body is a file or iterable, but not a str or bytes-like - # 3. Transfer-Encoding has NOT been explicitly set by the caller - - if 'content-length' not in header_names: - # only chunk body if not explicitly set for backwards - # compatibility, assuming the client code is already handling the - # chunking - if 'transfer-encoding' not in header_names: - # if content-length cannot be automatically determined, fall - # back to chunked encoding - encode_chunked = False - content_length = self._get_content_length(body, method) - if content_length is None: - if body is not None: - if self.debuglevel > 0: - print('Unable to determine size of %r' % body) - encode_chunked = True - self.putheader('Transfer-Encoding', 'chunked') - else: - self.putheader('Content-Length', str(content_length)) - else: - encode_chunked = False - - for hdr, value in headers.items(): - self.putheader(hdr, value) - if isinstance(body, str): - # RFC 2616 Section 3.7.1 says that text default has a - # default charset of iso-8859-1. - body = _encode(body, 'body') - self.endheaders(body, encode_chunked=encode_chunked) - - def getresponse(self): - """Get the response from the server. - - If the HTTPConnection is in the correct state, returns an - instance of HTTPResponse or of whatever object is returned by - the response_class variable. - - If a request has not been sent or if a previous response has - not be handled, ResponseNotReady is raised. If the HTTP - response indicates that the connection should be closed, then - it will be closed before the response is returned. When the - connection is closed, the underlying socket is closed. - """ - - # if a prior response has been completed, then forget about it. - if self.__response and self.__response.isclosed(): - self.__response = None - - # if a prior response exists, then it must be completed (otherwise, we - # cannot read this response's header to determine the connection-close - # behavior) - # - # note: if a prior response existed, but was connection-close, then the - # socket and response were made independent of this HTTPConnection - # object since a new request requires that we open a whole new - # connection - # - # this means the prior response had one of two states: - # 1) will_close: this connection was reset and the prior socket and - # response operate independently - # 2) persistent: the response was retained and we await its - # isclosed() status to become true. - # - if self.__state != _CS_REQ_SENT or self.__response: - raise ResponseNotReady(self.__state) - - if self.debuglevel > 0: - response = self.response_class(self.sock, self.debuglevel, - method=self._method) - else: - response = self.response_class(self.sock, method=self._method) - - try: - try: - response.begin() - except ConnectionError: - self.close() - raise - assert response.will_close != _UNKNOWN - self.__state = _CS_IDLE - - if response.will_close: - # this effectively passes the connection to the response - self.close() - else: - # remember this, so we can tell when it is complete - self.__response = response - - return response - except: - response.close() - raise - -try: - import ssl -except ImportError: - pass -else: - class HTTPSConnection(HTTPConnection): - "This class allows communication via SSL." - - default_port = HTTPS_PORT - - def __init__(self, host, port=None, - *, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, context=None, blocksize=8192): - super(HTTPSConnection, self).__init__(host, port, timeout, - source_address, - blocksize=blocksize) - if context is None: - context = _create_https_context(self._http_vsn) - self._context = context - - def connect(self): - "Connect to a host on a given (SSL) port." - - super().connect() - - if self._tunnel_host: - server_hostname = self._tunnel_host - else: - server_hostname = self.host - - self.sock = self._context.wrap_socket(self.sock, - server_hostname=server_hostname) - - __all__.append("HTTPSConnection") - -class HTTPException(Exception): - # Subclasses that define an __init__ must call Exception.__init__ - # or define self.args. Otherwise, str() will fail. - pass - -class NotConnected(HTTPException): - pass - -class InvalidURL(HTTPException): - pass - -class UnknownProtocol(HTTPException): - def __init__(self, version): - self.args = version, - self.version = version - -class UnknownTransferEncoding(HTTPException): - pass - -class UnimplementedFileMode(HTTPException): - pass - -class IncompleteRead(HTTPException): - def __init__(self, partial, expected=None): - self.args = partial, - self.partial = partial - self.expected = expected - def __repr__(self): - if self.expected is not None: - e = ', %i more expected' % self.expected - else: - e = '' - return '%s(%i bytes read%s)' % (self.__class__.__name__, - len(self.partial), e) - __str__ = object.__str__ - -class ImproperConnectionState(HTTPException): - pass - -class CannotSendRequest(ImproperConnectionState): - pass - -class CannotSendHeader(ImproperConnectionState): - pass - -class ResponseNotReady(ImproperConnectionState): - pass - -class BadStatusLine(HTTPException): - def __init__(self, line): - if not line: - line = repr(line) - self.args = line, - self.line = line - -class LineTooLong(HTTPException): - def __init__(self, line_type): - HTTPException.__init__(self, "got more than %d bytes when reading %s" - % (_MAXLINE, line_type)) - -class RemoteDisconnected(ConnectionResetError, BadStatusLine): - def __init__(self, *pos, **kw): - BadStatusLine.__init__(self, "") - ConnectionResetError.__init__(self, *pos, **kw) - -# for backwards compatibility -error = HTTPException diff --git a/Python314_4_x86_Template/Lib/http/cookiejar.py b/Python314_4_x86_Template/Lib/http/cookiejar.py deleted file mode 100644 index 68cf16c93..000000000 --- a/Python314_4_x86_Template/Lib/http/cookiejar.py +++ /dev/null @@ -1,2122 +0,0 @@ -r"""HTTP cookie handling for web clients. - -This module has (now fairly distant) origins in Gisle Aas' Perl module -HTTP::Cookies, from the libwww-perl library. - -Docstrings, comments and debug strings in this code refer to the -attributes of the HTTP cookie system as cookie-attributes, to distinguish -them clearly from Python attributes. - -Class diagram (note that BSDDBCookieJar and the MSIE* classes are not -distributed with the Python standard library, but are available from -http://wwwsearch.sf.net/): - - CookieJar____ - / \ \ - FileCookieJar \ \ - / | \ \ \ - MozillaCookieJar | LWPCookieJar \ \ - | | \ - | ---MSIEBase | \ - | / | | \ - | / MSIEDBCookieJar BSDDBCookieJar - |/ - MSIECookieJar - -""" - -__all__ = ['Cookie', 'CookieJar', 'CookiePolicy', 'DefaultCookiePolicy', - 'FileCookieJar', 'LWPCookieJar', 'LoadError', 'MozillaCookieJar'] - -import os -import copy -import datetime -import re -import time -import urllib.parse, urllib.request -import threading as _threading -import http.client # only for the default HTTP port -from calendar import timegm - -debug = False # set to True to enable debugging via the logging module -logger = None - -def _debug(*args): - if not debug: - return - global logger - if not logger: - import logging - logger = logging.getLogger("http.cookiejar") - return logger.debug(*args) - -HTTPONLY_ATTR = "HTTPOnly" -HTTPONLY_PREFIX = "#HttpOnly_" -DEFAULT_HTTP_PORT = str(http.client.HTTP_PORT) -NETSCAPE_MAGIC_RGX = re.compile("#( Netscape)? HTTP Cookie File") -MISSING_FILENAME_TEXT = ("a filename was not supplied (nor was the CookieJar " - "instance initialised with one)") -NETSCAPE_HEADER_TEXT = """\ -# Netscape HTTP Cookie File -# http://curl.haxx.se/rfc/cookie_spec.html -# This is a generated file! Do not edit. - -""" - -def _warn_unhandled_exception(): - # There are a few catch-all except: statements in this module, for - # catching input that's bad in unexpected ways. Warn if any - # exceptions are caught there. - import io, warnings, traceback - f = io.StringIO() - traceback.print_exc(None, f) - msg = f.getvalue() - warnings.warn("http.cookiejar bug!\n%s" % msg, stacklevel=2) - - -# Date/time conversion -# ----------------------------------------------------------------------------- - -EPOCH_YEAR = 1970 -def _timegm(tt): - year, month, mday, hour, min, sec = tt[:6] - if ((year >= EPOCH_YEAR) and (1 <= month <= 12) and (1 <= mday <= 31) and - (0 <= hour <= 24) and (0 <= min <= 59) and (0 <= sec <= 61)): - return timegm(tt) - else: - return None - -DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] -MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -MONTHS_LOWER = [month.lower() for month in MONTHS] - -def time2isoz(t=None): - """Return a string representing time in seconds since epoch, t. - - If the function is called without an argument, it will use the current - time. - - The format of the returned string is like "YYYY-MM-DD hh:mm:ssZ", - representing Universal Time (UTC, aka GMT). An example of this format is: - - 1994-11-24 08:49:37Z - - """ - if t is None: - dt = datetime.datetime.now(tz=datetime.UTC) - else: - dt = datetime.datetime.fromtimestamp(t, tz=datetime.UTC) - return "%04d-%02d-%02d %02d:%02d:%02dZ" % ( - dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second) - -def time2netscape(t=None): - """Return a string representing time in seconds since epoch, t. - - If the function is called without an argument, it will use the current - time. - - The format of the returned string is like this: - - Wed, DD-Mon-YYYY HH:MM:SS GMT - - """ - if t is None: - dt = datetime.datetime.now(tz=datetime.UTC) - else: - dt = datetime.datetime.fromtimestamp(t, tz=datetime.UTC) - return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( - DAYS[dt.weekday()], dt.day, MONTHS[dt.month-1], - dt.year, dt.hour, dt.minute, dt.second) - - -UTC_ZONES = {"GMT": None, "UTC": None, "UT": None, "Z": None} - -TIMEZONE_RE = re.compile(r"^([-+])?(\d\d?):?(\d\d)?$", re.ASCII) -def offset_from_tz_string(tz): - offset = None - if tz in UTC_ZONES: - offset = 0 - else: - m = TIMEZONE_RE.search(tz) - if m: - offset = 3600 * int(m.group(2)) - if m.group(3): - offset = offset + 60 * int(m.group(3)) - if m.group(1) == '-': - offset = -offset - return offset - -def _str2time(day, mon, yr, hr, min, sec, tz): - yr = int(yr) - if yr > datetime.MAXYEAR: - return None - - # translate month name to number - # month numbers start with 1 (January) - try: - mon = MONTHS_LOWER.index(mon.lower())+1 - except ValueError: - # maybe it's already a number - try: - imon = int(mon) - except ValueError: - return None - if 1 <= imon <= 12: - mon = imon - else: - return None - - # make sure clock elements are defined - if hr is None: hr = 0 - if min is None: min = 0 - if sec is None: sec = 0 - - day = int(day) - hr = int(hr) - min = int(min) - sec = int(sec) - - if yr < 1000: - # find "obvious" year - cur_yr = time.localtime(time.time())[0] - m = cur_yr % 100 - tmp = yr - yr = yr + cur_yr - m - m = m - tmp - if abs(m) > 50: - if m > 0: yr = yr + 100 - else: yr = yr - 100 - - # convert UTC time tuple to seconds since epoch (not timezone-adjusted) - t = _timegm((yr, mon, day, hr, min, sec, tz)) - - if t is not None: - # adjust time using timezone string, to get absolute time since epoch - if tz is None: - tz = "UTC" - tz = tz.upper() - offset = offset_from_tz_string(tz) - if offset is None: - return None - t = t - offset - - return t - -STRICT_DATE_RE = re.compile( - r"^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) " - r"(\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$", re.ASCII) -WEEKDAY_RE = re.compile( - r"^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*", re.I | re.ASCII) -LOOSE_HTTP_DATE_RE = re.compile( - r"""^ - (\d\d?) # day - (?:\s+|[-\/]) - (\w+) # month - (?:\s+|[-\/]) - (\d+) # year - (?: - (?:\s+|:) # separator before clock - (\d\d?):(\d\d) # hour:min - (?::(\d\d))? # optional seconds - )? # optional clock - \s* - (?: - ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone - \s* - )? - (?: - \(\w+\) # ASCII representation of timezone in parens. - \s* - )?$""", re.X | re.ASCII) -def http2time(text): - """Returns time in seconds since epoch of time represented by a string. - - Return value is an integer. - - None is returned if the format of str is unrecognized, the time is outside - the representable range, or the timezone string is not recognized. If the - string contains no timezone, UTC is assumed. - - The timezone in the string may be numerical (like "-0800" or "+0100") or a - string timezone (like "UTC", "GMT", "BST" or "EST"). Currently, only the - timezone strings equivalent to UTC (zero offset) are known to the function. - - The function loosely parses the following formats: - - Wed, 09 Feb 1994 22:23:32 GMT -- HTTP format - Tuesday, 08-Feb-94 14:15:29 GMT -- old rfc850 HTTP format - Tuesday, 08-Feb-1994 14:15:29 GMT -- broken rfc850 HTTP format - 09 Feb 1994 22:23:32 GMT -- HTTP format (no weekday) - 08-Feb-94 14:15:29 GMT -- rfc850 format (no weekday) - 08-Feb-1994 14:15:29 GMT -- broken rfc850 format (no weekday) - - The parser ignores leading and trailing whitespace. The time may be - absent. - - If the year is given with only 2 digits, the function will select the - century that makes the year closest to the current date. - - """ - # fast exit for strictly conforming string - m = STRICT_DATE_RE.search(text) - if m: - g = m.groups() - mon = MONTHS_LOWER.index(g[1].lower()) + 1 - tt = (int(g[2]), mon, int(g[0]), - int(g[3]), int(g[4]), float(g[5])) - return _timegm(tt) - - # No, we need some messy parsing... - - # clean up - text = text.lstrip() - text = WEEKDAY_RE.sub("", text, 1) # Useless weekday - - # tz is time zone specifier string - day, mon, yr, hr, min, sec, tz = [None]*7 - - # loose regexp parse - m = LOOSE_HTTP_DATE_RE.search(text) - if m is not None: - day, mon, yr, hr, min, sec, tz = m.groups() - else: - return None # bad format - - return _str2time(day, mon, yr, hr, min, sec, tz) - -ISO_DATE_RE = re.compile( - r"""^ - (\d{4}) # year - [-\/]? - (\d\d?) # numerical month - [-\/]? - (\d\d?) # day - (?: - (?:\s+|[-:Tt]) # separator before clock - (\d\d?):?(\d\d) # hour:min - (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) - )? # optional clock - \s* - (?: - ([-+]?\d\d?:?(:?\d\d)? - |Z|z) # timezone (Z is "zero meridian", i.e. GMT) - \s* - )?$""", re.X | re. ASCII) -def iso2time(text): - """ - As for http2time, but parses the ISO 8601 formats: - - 1994-02-03 14:15:29 -0100 -- ISO 8601 format - 1994-02-03 14:15:29 -- zone is optional - 1994-02-03 -- only date - 1994-02-03T14:15:29 -- Use T as separator - 19940203T141529Z -- ISO 8601 compact format - 19940203 -- only date - - """ - # clean up - text = text.lstrip() - - # tz is time zone specifier string - day, mon, yr, hr, min, sec, tz = [None]*7 - - # loose regexp parse - m = ISO_DATE_RE.search(text) - if m is not None: - # XXX there's an extra bit of the timezone I'm ignoring here: is - # this the right thing to do? - yr, mon, day, hr, min, sec, tz, _ = m.groups() - else: - return None # bad format - - return _str2time(day, mon, yr, hr, min, sec, tz) - - -# Header parsing -# ----------------------------------------------------------------------------- - -def unmatched(match): - """Return unmatched part of re.Match object.""" - start, end = match.span(0) - return match.string[:start]+match.string[end:] - -HEADER_TOKEN_RE = re.compile(r"^\s*([^=\s;,]+)") -HEADER_QUOTED_VALUE_RE = re.compile(r"^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"") -HEADER_VALUE_RE = re.compile(r"^\s*=\s*([^\s;,]*)") -HEADER_ESCAPE_RE = re.compile(r"\\(.)") -def split_header_words(header_values): - r"""Parse header values into a list of lists containing key,value pairs. - - The function knows how to deal with ",", ";" and "=" as well as quoted - values after "=". A list of space separated tokens are parsed as if they - were separated by ";". - - If the header_values passed as argument contains multiple values, then they - are treated as if they were a single value separated by comma ",". - - This means that this function is useful for parsing header fields that - follow this syntax (BNF as from the HTTP/1.1 specification, but we relax - the requirement for tokens). - - headers = #header - header = (token | parameter) *( [";"] (token | parameter)) - - token = 1*<any CHAR except CTLs or separators> - separators = "(" | ")" | "<" | ">" | "@" - | "," | ";" | ":" | "\" | <"> - | "/" | "[" | "]" | "?" | "=" - | "{" | "}" | SP | HT - - quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) - qdtext = <any TEXT except <">> - quoted-pair = "\" CHAR - - parameter = attribute "=" value - attribute = token - value = token | quoted-string - - Each header is represented by a list of key/value pairs. The value for a - simple token (not part of a parameter) is None. Syntactically incorrect - headers will not necessarily be parsed as you would want. - - This is easier to describe with some examples: - - >>> split_header_words(['foo="bar"; port="80,81"; discard, bar=baz']) - [[('foo', 'bar'), ('port', '80,81'), ('discard', None)], [('bar', 'baz')]] - >>> split_header_words(['text/html; charset="iso-8859-1"']) - [[('text/html', None), ('charset', 'iso-8859-1')]] - >>> split_header_words([r'Basic realm="\"foo\bar\""']) - [[('Basic', None), ('realm', '"foobar"')]] - - """ - assert not isinstance(header_values, str) - result = [] - for text in header_values: - orig_text = text - pairs = [] - while text: - m = HEADER_TOKEN_RE.search(text) - if m: - text = unmatched(m) - name = m.group(1) - m = HEADER_QUOTED_VALUE_RE.search(text) - if m: # quoted value - text = unmatched(m) - value = m.group(1) - value = HEADER_ESCAPE_RE.sub(r"\1", value) - else: - m = HEADER_VALUE_RE.search(text) - if m: # unquoted value - text = unmatched(m) - value = m.group(1) - value = value.rstrip() - else: - # no value, a lone token - value = None - pairs.append((name, value)) - elif text.lstrip().startswith(","): - # concatenated headers, as per RFC 2616 section 4.2 - text = text.lstrip()[1:] - if pairs: result.append(pairs) - pairs = [] - else: - # skip junk - non_junk, nr_junk_chars = re.subn(r"^[=\s;]*", "", text) - assert nr_junk_chars > 0, ( - "split_header_words bug: '%s', '%s', %s" % - (orig_text, text, pairs)) - text = non_junk - if pairs: result.append(pairs) - return result - -HEADER_JOIN_TOKEN_RE = re.compile(r"[!#$%&'*+\-.^_`|~0-9A-Za-z]+") -HEADER_JOIN_ESCAPE_RE = re.compile(r"([\"\\])") -def join_header_words(lists): - """Do the inverse (almost) of the conversion done by split_header_words. - - Takes a list of lists of (key, value) pairs and produces a single header - value. Attribute values are quoted if needed. - - >>> join_header_words([[("text/plain", None), ("charset", "iso-8859/1")]]) - 'text/plain; charset="iso-8859/1"' - >>> join_header_words([[("text/plain", None)], [("charset", "iso-8859/1")]]) - 'text/plain, charset="iso-8859/1"' - - """ - headers = [] - for pairs in lists: - attr = [] - for k, v in pairs: - if v is not None: - if not HEADER_JOIN_TOKEN_RE.fullmatch(v): - v = HEADER_JOIN_ESCAPE_RE.sub(r"\\\1", v) # escape " and \ - v = '"%s"' % v - k = "%s=%s" % (k, v) - attr.append(k) - if attr: headers.append("; ".join(attr)) - return ", ".join(headers) - -def strip_quotes(text): - if text.startswith('"'): - text = text[1:] - if text.endswith('"'): - text = text[:-1] - return text - -def parse_ns_headers(ns_headers): - """Ad-hoc parser for Netscape protocol cookie-attributes. - - The old Netscape cookie format for Set-Cookie can for instance contain - an unquoted "," in the expires field, so we have to use this ad-hoc - parser instead of split_header_words. - - XXX This may not make the best possible effort to parse all the crap - that Netscape Cookie headers contain. Ronald Tschalar's HTTPClient - parser is probably better, so could do worse than following that if - this ever gives any trouble. - - Currently, this is also used for parsing RFC 2109 cookies. - - """ - known_attrs = ("expires", "domain", "path", "secure", - # RFC 2109 attrs (may turn up in Netscape cookies, too) - "version", "port", "max-age") - - result = [] - for ns_header in ns_headers: - pairs = [] - version_set = False - - # XXX: The following does not strictly adhere to RFCs in that empty - # names and values are legal (the former will only appear once and will - # be overwritten if multiple occurrences are present). This is - # mostly to deal with backwards compatibility. - for ii, param in enumerate(ns_header.split(';')): - param = param.strip() - - key, sep, val = param.partition('=') - key = key.strip() - - if not key: - if ii == 0: - break - else: - continue - - # allow for a distinction between present and empty and missing - # altogether - val = val.strip() if sep else None - - if ii != 0: - lc = key.lower() - if lc in known_attrs: - key = lc - - if key == "version": - # This is an RFC 2109 cookie. - if val is not None: - val = strip_quotes(val) - version_set = True - elif key == "expires": - # convert expires date to seconds since epoch - if val is not None: - val = http2time(strip_quotes(val)) # None if invalid - pairs.append((key, val)) - - if pairs: - if not version_set: - pairs.append(("version", "0")) - result.append(pairs) - - return result - - -IPV4_RE = re.compile(r"\.\d+$", re.ASCII) -def is_HDN(text): - """Return True if text is a host domain name.""" - # XXX - # This may well be wrong. Which RFC is HDN defined in, if any (for - # the purposes of RFC 2965)? - # For the current implementation, what about IPv6? Remember to look - # at other uses of IPV4_RE also, if change this. - if IPV4_RE.search(text): - return False - if text == "": - return False - if text[0] == "." or text[-1] == ".": - return False - return True - -def domain_match(A, B): - """Return True if domain A domain-matches domain B, according to RFC 2965. - - A and B may be host domain names or IP addresses. - - RFC 2965, section 1: - - Host names can be specified either as an IP address or a HDN string. - Sometimes we compare one host name with another. (Such comparisons SHALL - be case-insensitive.) Host A's name domain-matches host B's if - - * their host name strings string-compare equal; or - - * A is a HDN string and has the form NB, where N is a non-empty - name string, B has the form .B', and B' is a HDN string. (So, - x.y.com domain-matches .Y.com but not Y.com.) - - Note that domain-match is not a commutative operation: a.b.c.com - domain-matches .c.com, but not the reverse. - - """ - # Note that, if A or B are IP addresses, the only relevant part of the - # definition of the domain-match algorithm is the direct string-compare. - A = A.lower() - B = B.lower() - if A == B: - return True - if not is_HDN(A): - return False - i = A.rfind(B) - if i == -1 or i == 0: - # A does not have form NB, or N is the empty string - return False - if not B.startswith("."): - return False - if not is_HDN(B[1:]): - return False - return True - -def liberal_is_HDN(text): - """Return True if text is a sort-of-like a host domain name. - - For accepting/blocking domains. - - """ - if IPV4_RE.search(text): - return False - return True - -def user_domain_match(A, B): - """For blocking/accepting domains. - - A and B may be host domain names or IP addresses. - - """ - A = A.lower() - B = B.lower() - if not (liberal_is_HDN(A) and liberal_is_HDN(B)): - if A == B: - # equal IP addresses - return True - return False - initial_dot = B.startswith(".") - if initial_dot and A.endswith(B): - return True - if not initial_dot and A == B: - return True - return False - -cut_port_re = re.compile(r":\d+$", re.ASCII) -def request_host(request): - """Return request-host, as defined by RFC 2965. - - Variation from RFC: returned value is lowercased, for convenient - comparison. - - """ - url = request.get_full_url() - host = urllib.parse.urlparse(url)[1] - if host == "": - host = request.get_header("Host", "") - - # remove port, if present - host = cut_port_re.sub("", host, 1) - return host.lower() - -def eff_request_host(request): - """Return a tuple (request-host, effective request-host name). - - As defined by RFC 2965, except both are lowercased. - - """ - erhn = req_host = request_host(request) - if "." not in req_host: - erhn = req_host + ".local" - return req_host, erhn - -def request_path(request): - """Path component of request-URI, as defined by RFC 2965.""" - url = request.get_full_url() - parts = urllib.parse.urlsplit(url) - path = escape_path(parts.path) - if not path.startswith("/"): - # fix bad RFC 2396 absoluteURI - path = "/" + path - return path - -def request_port(request): - host = request.host - i = host.find(':') - if i >= 0: - port = host[i+1:] - try: - int(port) - except ValueError: - _debug("nonnumeric port: '%s'", port) - return None - else: - port = DEFAULT_HTTP_PORT - return port - -# Characters in addition to A-Z, a-z, 0-9, '_', '.', and '-' that don't -# need to be escaped to form a valid HTTP URL (RFCs 2396 and 1738). -HTTP_PATH_SAFE = "%/;:@&=+$,!~*'()" -ESCAPED_CHAR_RE = re.compile(r"%([0-9a-fA-F][0-9a-fA-F])") -def uppercase_escaped_char(match): - return "%%%s" % match.group(1).upper() -def escape_path(path): - """Escape any invalid characters in HTTP URL, and uppercase all escapes.""" - # There's no knowing what character encoding was used to create URLs - # containing %-escapes, but since we have to pick one to escape invalid - # path characters, we pick UTF-8, as recommended in the HTML 4.0 - # specification: - # http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.1 - # And here, kind of: draft-fielding-uri-rfc2396bis-03 - # (And in draft IRI specification: draft-duerst-iri-05) - # (And here, for new URI schemes: RFC 2718) - path = urllib.parse.quote(path, HTTP_PATH_SAFE) - path = ESCAPED_CHAR_RE.sub(uppercase_escaped_char, path) - return path - -def reach(h): - """Return reach of host h, as defined by RFC 2965, section 1. - - The reach R of a host name H is defined as follows: - - * If - - - H is the host domain name of a host; and, - - - H has the form A.B; and - - - A has no embedded (that is, interior) dots; and - - - B has at least one embedded dot, or B is the string "local". - then the reach of H is .B. - - * Otherwise, the reach of H is H. - - >>> reach("www.acme.com") - '.acme.com' - >>> reach("acme.com") - 'acme.com' - >>> reach("acme.local") - '.local' - - """ - i = h.find(".") - if i >= 0: - #a = h[:i] # this line is only here to show what a is - b = h[i+1:] - i = b.find(".") - if is_HDN(h) and (i >= 0 or b == "local"): - return "."+b - return h - -def is_third_party(request): - """ - - RFC 2965, section 3.3.6: - - An unverifiable transaction is to a third-party host if its request- - host U does not domain-match the reach R of the request-host O in the - origin transaction. - - """ - req_host = request_host(request) - if not domain_match(req_host, reach(request.origin_req_host)): - return True - else: - return False - - -class Cookie: - """HTTP Cookie. - - This class represents both Netscape and RFC 2965 cookies. - - This is deliberately a very simple class. It just holds attributes. It's - possible to construct Cookie instances that don't comply with the cookie - standards. CookieJar.make_cookies is the factory function for Cookie - objects -- it deals with cookie parsing, supplying defaults, and - normalising to the representation used in this class. CookiePolicy is - responsible for checking them to see whether they should be accepted from - and returned to the server. - - Note that the port may be present in the headers, but unspecified ("Port" - rather than"Port=80", for example); if this is the case, port is None. - - """ - - def __init__(self, version, name, value, - port, port_specified, - domain, domain_specified, domain_initial_dot, - path, path_specified, - secure, - expires, - discard, - comment, - comment_url, - rest, - rfc2109=False, - ): - - if version is not None: version = int(version) - if expires is not None: expires = int(float(expires)) - if port is None and port_specified is True: - raise ValueError("if port is None, port_specified must be false") - - self.version = version - self.name = name - self.value = value - self.port = port - self.port_specified = port_specified - # normalise case, as per RFC 2965 section 3.3.3 - self.domain = domain.lower() - self.domain_specified = domain_specified - # Sigh. We need to know whether the domain given in the - # cookie-attribute had an initial dot, in order to follow RFC 2965 - # (as clarified in draft errata). Needed for the returned $Domain - # value. - self.domain_initial_dot = domain_initial_dot - self.path = path - self.path_specified = path_specified - self.secure = secure - self.expires = expires - self.discard = discard - self.comment = comment - self.comment_url = comment_url - self.rfc2109 = rfc2109 - - self._rest = copy.copy(rest) - - def has_nonstandard_attr(self, name): - return name in self._rest - def get_nonstandard_attr(self, name, default=None): - return self._rest.get(name, default) - def set_nonstandard_attr(self, name, value): - self._rest[name] = value - - def is_expired(self, now=None): - if now is None: now = time.time() - if (self.expires is not None) and (self.expires <= now): - return True - return False - - def __str__(self): - if self.port is None: p = "" - else: p = ":"+self.port - limit = self.domain + p + self.path - if self.value is not None: - namevalue = "%s=%s" % (self.name, self.value) - else: - namevalue = self.name - return "<Cookie %s for %s>" % (namevalue, limit) - - def __repr__(self): - args = [] - for name in ("version", "name", "value", - "port", "port_specified", - "domain", "domain_specified", "domain_initial_dot", - "path", "path_specified", - "secure", "expires", "discard", "comment", "comment_url", - ): - attr = getattr(self, name) - args.append("%s=%s" % (name, repr(attr))) - args.append("rest=%s" % repr(self._rest)) - args.append("rfc2109=%s" % repr(self.rfc2109)) - return "%s(%s)" % (self.__class__.__name__, ", ".join(args)) - - -class CookiePolicy: - """Defines which cookies get accepted from and returned to server. - - May also modify cookies, though this is probably a bad idea. - - The subclass DefaultCookiePolicy defines the standard rules for Netscape - and RFC 2965 cookies -- override that if you want a customized policy. - - """ - def set_ok(self, cookie, request): - """Return true if (and only if) cookie should be accepted from server. - - Currently, pre-expired cookies never get this far -- the CookieJar - class deletes such cookies itself. - - """ - raise NotImplementedError() - - def return_ok(self, cookie, request): - """Return true if (and only if) cookie should be returned to server.""" - raise NotImplementedError() - - def domain_return_ok(self, domain, request): - """Return false if cookies should not be returned, given cookie domain. - """ - return True - - def path_return_ok(self, path, request): - """Return false if cookies should not be returned, given cookie path. - """ - return True - - -class DefaultCookiePolicy(CookiePolicy): - """Implements the standard rules for accepting and returning cookies.""" - - DomainStrictNoDots = 1 - DomainStrictNonDomain = 2 - DomainRFC2965Match = 4 - - DomainLiberal = 0 - DomainStrict = DomainStrictNoDots|DomainStrictNonDomain - - def __init__(self, - blocked_domains=None, allowed_domains=None, - netscape=True, rfc2965=False, - rfc2109_as_netscape=None, - hide_cookie2=False, - strict_domain=False, - strict_rfc2965_unverifiable=True, - strict_ns_unverifiable=False, - strict_ns_domain=DomainLiberal, - strict_ns_set_initial_dollar=False, - strict_ns_set_path=False, - secure_protocols=("https", "wss") - ): - """Constructor arguments should be passed as keyword arguments only.""" - self.netscape = netscape - self.rfc2965 = rfc2965 - self.rfc2109_as_netscape = rfc2109_as_netscape - self.hide_cookie2 = hide_cookie2 - self.strict_domain = strict_domain - self.strict_rfc2965_unverifiable = strict_rfc2965_unverifiable - self.strict_ns_unverifiable = strict_ns_unverifiable - self.strict_ns_domain = strict_ns_domain - self.strict_ns_set_initial_dollar = strict_ns_set_initial_dollar - self.strict_ns_set_path = strict_ns_set_path - self.secure_protocols = secure_protocols - - if blocked_domains is not None: - self._blocked_domains = tuple(blocked_domains) - else: - self._blocked_domains = () - - if allowed_domains is not None: - allowed_domains = tuple(allowed_domains) - self._allowed_domains = allowed_domains - - def blocked_domains(self): - """Return the sequence of blocked domains (as a tuple).""" - return self._blocked_domains - def set_blocked_domains(self, blocked_domains): - """Set the sequence of blocked domains.""" - self._blocked_domains = tuple(blocked_domains) - - def is_blocked(self, domain): - for blocked_domain in self._blocked_domains: - if user_domain_match(domain, blocked_domain): - return True - return False - - def allowed_domains(self): - """Return None, or the sequence of allowed domains (as a tuple).""" - return self._allowed_domains - def set_allowed_domains(self, allowed_domains): - """Set the sequence of allowed domains, or None.""" - if allowed_domains is not None: - allowed_domains = tuple(allowed_domains) - self._allowed_domains = allowed_domains - - def is_not_allowed(self, domain): - if self._allowed_domains is None: - return False - for allowed_domain in self._allowed_domains: - if user_domain_match(domain, allowed_domain): - return False - return True - - def set_ok(self, cookie, request): - """ - If you override .set_ok(), be sure to call this method. If it returns - false, so should your subclass (assuming your subclass wants to be more - strict about which cookies to accept). - - """ - _debug(" - checking cookie %s=%s", cookie.name, cookie.value) - - assert cookie.name is not None - - for n in "version", "verifiability", "name", "path", "domain", "port": - fn_name = "set_ok_"+n - fn = getattr(self, fn_name) - if not fn(cookie, request): - return False - - return True - - def set_ok_version(self, cookie, request): - if cookie.version is None: - # Version is always set to 0 by parse_ns_headers if it's a Netscape - # cookie, so this must be an invalid RFC 2965 cookie. - _debug(" Set-Cookie2 without version attribute (%s=%s)", - cookie.name, cookie.value) - return False - if cookie.version > 0 and not self.rfc2965: - _debug(" RFC 2965 cookies are switched off") - return False - elif cookie.version == 0 and not self.netscape: - _debug(" Netscape cookies are switched off") - return False - return True - - def set_ok_verifiability(self, cookie, request): - if request.unverifiable and is_third_party(request): - if cookie.version > 0 and self.strict_rfc2965_unverifiable: - _debug(" third-party RFC 2965 cookie during " - "unverifiable transaction") - return False - elif cookie.version == 0 and self.strict_ns_unverifiable: - _debug(" third-party Netscape cookie during " - "unverifiable transaction") - return False - return True - - def set_ok_name(self, cookie, request): - # Try and stop servers setting V0 cookies designed to hack other - # servers that know both V0 and V1 protocols. - if (cookie.version == 0 and self.strict_ns_set_initial_dollar and - cookie.name.startswith("$")): - _debug(" illegal name (starts with '$'): '%s'", cookie.name) - return False - return True - - def set_ok_path(self, cookie, request): - if cookie.path_specified: - req_path = request_path(request) - if ((cookie.version > 0 or - (cookie.version == 0 and self.strict_ns_set_path)) and - not self.path_return_ok(cookie.path, request)): - _debug(" path attribute %s is not a prefix of request " - "path %s", cookie.path, req_path) - return False - return True - - def set_ok_domain(self, cookie, request): - if self.is_blocked(cookie.domain): - _debug(" domain %s is in user block-list", cookie.domain) - return False - if self.is_not_allowed(cookie.domain): - _debug(" domain %s is not in user allow-list", cookie.domain) - return False - if cookie.domain_specified: - req_host, erhn = eff_request_host(request) - domain = cookie.domain - if self.strict_domain and (domain.count(".") >= 2): - # XXX This should probably be compared with the Konqueror - # (kcookiejar.cpp) and Mozilla implementations, but it's a - # losing battle. - i = domain.rfind(".") - j = domain.rfind(".", 0, i) - if j == 0: # domain like .foo.bar - tld = domain[i+1:] - sld = domain[j+1:i] - if sld.lower() in ("co", "ac", "com", "edu", "org", "net", - "gov", "mil", "int", "aero", "biz", "cat", "coop", - "info", "jobs", "mobi", "museum", "name", "pro", - "travel", "eu") and len(tld) == 2: - # domain like .co.uk - _debug(" country-code second level domain %s", domain) - return False - if domain.startswith("."): - undotted_domain = domain[1:] - else: - undotted_domain = domain - embedded_dots = (undotted_domain.find(".") >= 0) - if not embedded_dots and not erhn.endswith(".local"): - _debug(" non-local domain %s contains no embedded dot", - domain) - return False - if cookie.version == 0: - if (not (erhn.endswith(domain) or - erhn.endswith(f"{undotted_domain}.local")) and - (not erhn.startswith(".") and - not ("."+erhn).endswith(domain))): - _debug(" effective request-host %s (even with added " - "initial dot) does not end with %s", - erhn, domain) - return False - if (cookie.version > 0 or - (self.strict_ns_domain & self.DomainRFC2965Match)): - if not domain_match(erhn, domain): - _debug(" effective request-host %s does not domain-match " - "%s", erhn, domain) - return False - if (cookie.version > 0 or - (self.strict_ns_domain & self.DomainStrictNoDots)): - host_prefix = req_host[:-len(domain)] - if (host_prefix.find(".") >= 0 and - not IPV4_RE.search(req_host)): - _debug(" host prefix %s for domain %s contains a dot", - host_prefix, domain) - return False - return True - - def set_ok_port(self, cookie, request): - if cookie.port_specified: - req_port = request_port(request) - if req_port is None: - req_port = "80" - else: - req_port = str(req_port) - for p in cookie.port.split(","): - try: - int(p) - except ValueError: - _debug(" bad port %s (not numeric)", p) - return False - if p == req_port: - break - else: - _debug(" request port (%s) not found in %s", - req_port, cookie.port) - return False - return True - - def return_ok(self, cookie, request): - """ - If you override .return_ok(), be sure to call this method. If it - returns false, so should your subclass (assuming your subclass wants to - be more strict about which cookies to return). - - """ - # Path has already been checked by .path_return_ok(), and domain - # blocking done by .domain_return_ok(). - _debug(" - checking cookie %s=%s", cookie.name, cookie.value) - - for n in "version", "verifiability", "secure", "expires", "port", "domain": - fn_name = "return_ok_"+n - fn = getattr(self, fn_name) - if not fn(cookie, request): - return False - return True - - def return_ok_version(self, cookie, request): - if cookie.version > 0 and not self.rfc2965: - _debug(" RFC 2965 cookies are switched off") - return False - elif cookie.version == 0 and not self.netscape: - _debug(" Netscape cookies are switched off") - return False - return True - - def return_ok_verifiability(self, cookie, request): - if request.unverifiable and is_third_party(request): - if cookie.version > 0 and self.strict_rfc2965_unverifiable: - _debug(" third-party RFC 2965 cookie during unverifiable " - "transaction") - return False - elif cookie.version == 0 and self.strict_ns_unverifiable: - _debug(" third-party Netscape cookie during unverifiable " - "transaction") - return False - return True - - def return_ok_secure(self, cookie, request): - if cookie.secure and request.type not in self.secure_protocols: - _debug(" secure cookie with non-secure request") - return False - return True - - def return_ok_expires(self, cookie, request): - if cookie.is_expired(self._now): - _debug(" cookie expired") - return False - return True - - def return_ok_port(self, cookie, request): - if cookie.port: - req_port = request_port(request) - if req_port is None: - req_port = "80" - for p in cookie.port.split(","): - if p == req_port: - break - else: - _debug(" request port %s does not match cookie port %s", - req_port, cookie.port) - return False - return True - - def return_ok_domain(self, cookie, request): - req_host, erhn = eff_request_host(request) - domain = cookie.domain - - if domain and not domain.startswith("."): - dotdomain = "." + domain - else: - dotdomain = domain - - # strict check of non-domain cookies: Mozilla does this, MSIE5 doesn't - if (cookie.version == 0 and - (self.strict_ns_domain & self.DomainStrictNonDomain) and - not cookie.domain_specified and domain != erhn): - _debug(" cookie with unspecified domain does not string-compare " - "equal to request domain") - return False - - if cookie.version > 0 and not domain_match(erhn, domain): - _debug(" effective request-host name %s does not domain-match " - "RFC 2965 cookie domain %s", erhn, domain) - return False - if cookie.version == 0 and not ("."+erhn).endswith(dotdomain): - _debug(" request-host %s does not match Netscape cookie domain " - "%s", req_host, domain) - return False - return True - - def domain_return_ok(self, domain, request): - # Liberal check of. This is here as an optimization to avoid - # having to load lots of MSIE cookie files unless necessary. - req_host, erhn = eff_request_host(request) - if not req_host.startswith("."): - req_host = "."+req_host - if not erhn.startswith("."): - erhn = "."+erhn - if domain and not domain.startswith("."): - dotdomain = "." + domain - else: - dotdomain = domain - if not (req_host.endswith(dotdomain) or erhn.endswith(dotdomain)): - #_debug(" request domain %s does not match cookie domain %s", - # req_host, domain) - return False - - if self.is_blocked(domain): - _debug(" domain %s is in user block-list", domain) - return False - if self.is_not_allowed(domain): - _debug(" domain %s is not in user allow-list", domain) - return False - - return True - - def path_return_ok(self, path, request): - _debug("- checking cookie path=%s", path) - req_path = request_path(request) - pathlen = len(path) - if req_path == path: - return True - elif (req_path.startswith(path) and - (path.endswith("/") or req_path[pathlen:pathlen+1] == "/")): - return True - - _debug(" %s does not path-match %s", req_path, path) - return False - -def deepvalues(mapping): - """Iterates over nested mapping, depth-first""" - for obj in list(mapping.values()): - mapping = False - try: - obj.items - except AttributeError: - pass - else: - mapping = True - yield from deepvalues(obj) - if not mapping: - yield obj - - -# Used as second parameter to dict.get() method, to distinguish absent -# dict key from one with a None value. -class Absent: pass - -class CookieJar: - """Collection of HTTP cookies. - - You may not need to know about this class: try - urllib.request.build_opener(HTTPCookieProcessor).open(url). - """ - - non_word_re = re.compile(r"\W") - quote_re = re.compile(r"([\"\\])") - strict_domain_re = re.compile(r"\.?[^.]*") - domain_re = re.compile(r"[^.]*") - dots_re = re.compile(r"^\.+") - - magic_re = re.compile(r"^\#LWP-Cookies-(\d+\.\d+)", re.ASCII) - - def __init__(self, policy=None): - if policy is None: - policy = DefaultCookiePolicy() - self._policy = policy - - self._cookies_lock = _threading.RLock() - self._cookies = {} - - def set_policy(self, policy): - self._policy = policy - - def _cookies_for_domain(self, domain, request): - cookies = [] - if not self._policy.domain_return_ok(domain, request): - return [] - _debug("Checking %s for cookies to return", domain) - cookies_by_path = self._cookies[domain] - for path in cookies_by_path.keys(): - if not self._policy.path_return_ok(path, request): - continue - cookies_by_name = cookies_by_path[path] - for cookie in cookies_by_name.values(): - if not self._policy.return_ok(cookie, request): - _debug(" not returning cookie") - continue - _debug(" it's a match") - cookies.append(cookie) - return cookies - - def _cookies_for_request(self, request): - """Return a list of cookies to be returned to server.""" - cookies = [] - for domain in self._cookies.keys(): - cookies.extend(self._cookies_for_domain(domain, request)) - return cookies - - def _cookie_attrs(self, cookies): - """Return a list of cookie-attributes to be returned to server. - - like ['foo="bar"; $Path="/"', ...] - - The $Version attribute is also added when appropriate (currently only - once per request). - - """ - # add cookies in order of most specific (ie. longest) path first - cookies.sort(key=lambda a: len(a.path), reverse=True) - - version_set = False - - attrs = [] - for cookie in cookies: - # set version of Cookie header - # XXX - # What should it be if multiple matching Set-Cookie headers have - # different versions themselves? - # Answer: there is no answer; was supposed to be settled by - # RFC 2965 errata, but that may never appear... - version = cookie.version - if not version_set: - version_set = True - if version > 0: - attrs.append("$Version=%s" % version) - - # quote cookie value if necessary - # (not for Netscape protocol, which already has any quotes - # intact, due to the poorly-specified Netscape Cookie: syntax) - if ((cookie.value is not None) and - self.non_word_re.search(cookie.value) and version > 0): - value = self.quote_re.sub(r"\\\1", cookie.value) - else: - value = cookie.value - - # add cookie-attributes to be returned in Cookie header - if cookie.value is None: - attrs.append(cookie.name) - else: - attrs.append("%s=%s" % (cookie.name, value)) - if version > 0: - if cookie.path_specified: - attrs.append('$Path="%s"' % cookie.path) - if cookie.domain.startswith("."): - domain = cookie.domain - if (not cookie.domain_initial_dot and - domain.startswith(".")): - domain = domain[1:] - attrs.append('$Domain="%s"' % domain) - if cookie.port is not None: - p = "$Port" - if cookie.port_specified: - p = p + ('="%s"' % cookie.port) - attrs.append(p) - - return attrs - - def add_cookie_header(self, request): - """Add correct Cookie: header to request (urllib.request.Request object). - - The Cookie2 header is also added unless policy.hide_cookie2 is true. - - """ - _debug("add_cookie_header") - self._cookies_lock.acquire() - try: - - self._policy._now = self._now = int(time.time()) - - cookies = self._cookies_for_request(request) - - attrs = self._cookie_attrs(cookies) - if attrs: - if not request.has_header("Cookie"): - request.add_unredirected_header( - "Cookie", "; ".join(attrs)) - - # if necessary, advertise that we know RFC 2965 - if (self._policy.rfc2965 and not self._policy.hide_cookie2 and - not request.has_header("Cookie2")): - for cookie in cookies: - if cookie.version != 1: - request.add_unredirected_header("Cookie2", '$Version="1"') - break - - finally: - self._cookies_lock.release() - - self.clear_expired_cookies() - - def _normalized_cookie_tuples(self, attrs_set): - """Return list of tuples containing normalised cookie information. - - attrs_set is the list of lists of key,value pairs extracted from - the Set-Cookie or Set-Cookie2 headers. - - Tuples are name, value, standard, rest, where name and value are the - cookie name and value, standard is a dictionary containing the standard - cookie-attributes (discard, secure, version, expires or max-age, - domain, path and port) and rest is a dictionary containing the rest of - the cookie-attributes. - - """ - cookie_tuples = [] - - boolean_attrs = "discard", "secure" - value_attrs = ("version", - "expires", "max-age", - "domain", "path", "port", - "comment", "commenturl") - - for cookie_attrs in attrs_set: - name, value = cookie_attrs[0] - - # Build dictionary of standard cookie-attributes (standard) and - # dictionary of other cookie-attributes (rest). - - # Note: expiry time is normalised to seconds since epoch. V0 - # cookies should have the Expires cookie-attribute, and V1 cookies - # should have Max-Age, but since V1 includes RFC 2109 cookies (and - # since V0 cookies may be a mish-mash of Netscape and RFC 2109), we - # accept either (but prefer Max-Age). - max_age_set = False - - bad_cookie = False - - standard = {} - rest = {} - for k, v in cookie_attrs[1:]: - lc = k.lower() - # don't lose case distinction for unknown fields - if lc in value_attrs or lc in boolean_attrs: - k = lc - if k in boolean_attrs and v is None: - # boolean cookie-attribute is present, but has no value - # (like "discard", rather than "port=80") - v = True - if k in standard: - # only first value is significant - continue - if k == "domain": - if v is None: - _debug(" missing value for domain attribute") - bad_cookie = True - break - # RFC 2965 section 3.3.3 - v = v.lower() - if k == "expires": - if max_age_set: - # Prefer max-age to expires (like Mozilla) - continue - if v is None: - _debug(" missing or invalid value for expires " - "attribute: treating as session cookie") - continue - if k == "max-age": - max_age_set = True - try: - v = int(v) - except ValueError: - _debug(" missing or invalid (non-numeric) value for " - "max-age attribute") - bad_cookie = True - break - # convert RFC 2965 Max-Age to seconds since epoch - # XXX Strictly you're supposed to follow RFC 2616 - # age-calculation rules. Remember that zero Max-Age - # is a request to discard (old and new) cookie, though. - k = "expires" - v = self._now + v - if (k in value_attrs) or (k in boolean_attrs): - if (v is None and - k not in ("port", "comment", "commenturl")): - _debug(" missing value for %s attribute" % k) - bad_cookie = True - break - standard[k] = v - else: - rest[k] = v - - if bad_cookie: - continue - - cookie_tuples.append((name, value, standard, rest)) - - return cookie_tuples - - def _cookie_from_cookie_tuple(self, tup, request): - # standard is dict of standard cookie-attributes, rest is dict of the - # rest of them - name, value, standard, rest = tup - - domain = standard.get("domain", Absent) - path = standard.get("path", Absent) - port = standard.get("port", Absent) - expires = standard.get("expires", Absent) - - # set the easy defaults - version = standard.get("version", None) - if version is not None: - try: - version = int(version) - except ValueError: - return None # invalid version, ignore cookie - secure = standard.get("secure", False) - # (discard is also set if expires is Absent) - discard = standard.get("discard", False) - comment = standard.get("comment", None) - comment_url = standard.get("commenturl", None) - - # set default path - if path is not Absent and path != "": - path_specified = True - path = escape_path(path) - else: - path_specified = False - path = request_path(request) - i = path.rfind("/") - if i != -1: - if version == 0: - # Netscape spec parts company from reality here - path = path[:i] - else: - path = path[:i+1] - if len(path) == 0: path = "/" - - # set default domain - domain_specified = domain is not Absent - # but first we have to remember whether it starts with a dot - domain_initial_dot = False - if domain_specified: - domain_initial_dot = bool(domain.startswith(".")) - if domain is Absent: - req_host, erhn = eff_request_host(request) - domain = erhn - elif not domain.startswith("."): - domain = "."+domain - - # set default port - port_specified = False - if port is not Absent: - if port is None: - # Port attr present, but has no value: default to request port. - # Cookie should then only be sent back on that port. - port = request_port(request) - else: - port_specified = True - port = re.sub(r"\s+", "", port) - else: - # No port attr present. Cookie can be sent back on any port. - port = None - - # set default expires and discard - if expires is Absent: - expires = None - discard = True - elif expires <= self._now: - # Expiry date in past is request to delete cookie. This can't be - # in DefaultCookiePolicy, because can't delete cookies there. - try: - self.clear(domain, path, name) - except KeyError: - pass - _debug("Expiring cookie, domain='%s', path='%s', name='%s'", - domain, path, name) - return None - - return Cookie(version, - name, value, - port, port_specified, - domain, domain_specified, domain_initial_dot, - path, path_specified, - secure, - expires, - discard, - comment, - comment_url, - rest) - - def _cookies_from_attrs_set(self, attrs_set, request): - cookie_tuples = self._normalized_cookie_tuples(attrs_set) - - cookies = [] - for tup in cookie_tuples: - cookie = self._cookie_from_cookie_tuple(tup, request) - if cookie: cookies.append(cookie) - return cookies - - def _process_rfc2109_cookies(self, cookies): - rfc2109_as_ns = getattr(self._policy, 'rfc2109_as_netscape', None) - if rfc2109_as_ns is None: - rfc2109_as_ns = not self._policy.rfc2965 - for cookie in cookies: - if cookie.version == 1: - cookie.rfc2109 = True - if rfc2109_as_ns: - # treat 2109 cookies as Netscape cookies rather than - # as RFC2965 cookies - cookie.version = 0 - - def make_cookies(self, response, request): - """Return sequence of Cookie objects extracted from response object.""" - # get cookie-attributes for RFC 2965 and Netscape protocols - headers = response.info() - rfc2965_hdrs = headers.get_all("Set-Cookie2", []) - ns_hdrs = headers.get_all("Set-Cookie", []) - self._policy._now = self._now = int(time.time()) - - rfc2965 = self._policy.rfc2965 - netscape = self._policy.netscape - - if ((not rfc2965_hdrs and not ns_hdrs) or - (not ns_hdrs and not rfc2965) or - (not rfc2965_hdrs and not netscape) or - (not netscape and not rfc2965)): - return [] # no relevant cookie headers: quick exit - - try: - cookies = self._cookies_from_attrs_set( - split_header_words(rfc2965_hdrs), request) - except Exception: - _warn_unhandled_exception() - cookies = [] - - if ns_hdrs and netscape: - try: - # RFC 2109 and Netscape cookies - ns_cookies = self._cookies_from_attrs_set( - parse_ns_headers(ns_hdrs), request) - except Exception: - _warn_unhandled_exception() - ns_cookies = [] - self._process_rfc2109_cookies(ns_cookies) - - # Look for Netscape cookies (from Set-Cookie headers) that match - # corresponding RFC 2965 cookies (from Set-Cookie2 headers). - # For each match, keep the RFC 2965 cookie and ignore the Netscape - # cookie (RFC 2965 section 9.1). Actually, RFC 2109 cookies are - # bundled in with the Netscape cookies for this purpose, which is - # reasonable behaviour. - if rfc2965: - lookup = {} - for cookie in cookies: - lookup[(cookie.domain, cookie.path, cookie.name)] = None - - def no_matching_rfc2965(ns_cookie, lookup=lookup): - key = ns_cookie.domain, ns_cookie.path, ns_cookie.name - return key not in lookup - ns_cookies = filter(no_matching_rfc2965, ns_cookies) - - if ns_cookies: - cookies.extend(ns_cookies) - - return cookies - - def set_cookie_if_ok(self, cookie, request): - """Set a cookie if policy says it's OK to do so.""" - self._cookies_lock.acquire() - try: - self._policy._now = self._now = int(time.time()) - - if self._policy.set_ok(cookie, request): - self.set_cookie(cookie) - - - finally: - self._cookies_lock.release() - - def set_cookie(self, cookie): - """Set a cookie, without checking whether or not it should be set.""" - c = self._cookies - self._cookies_lock.acquire() - try: - if cookie.domain not in c: c[cookie.domain] = {} - c2 = c[cookie.domain] - if cookie.path not in c2: c2[cookie.path] = {} - c3 = c2[cookie.path] - c3[cookie.name] = cookie - finally: - self._cookies_lock.release() - - def extract_cookies(self, response, request): - """Extract cookies from response, where allowable given the request.""" - _debug("extract_cookies: %s", response.info()) - self._cookies_lock.acquire() - try: - for cookie in self.make_cookies(response, request): - if self._policy.set_ok(cookie, request): - _debug(" setting cookie: %s", cookie) - self.set_cookie(cookie) - finally: - self._cookies_lock.release() - - def clear(self, domain=None, path=None, name=None): - """Clear some cookies. - - Invoking this method without arguments will clear all cookies. If - given a single argument, only cookies belonging to that domain will be - removed. If given two arguments, cookies belonging to the specified - path within that domain are removed. If given three arguments, then - the cookie with the specified name, path and domain is removed. - - Raises KeyError if no matching cookie exists. - - """ - if name is not None: - if (domain is None) or (path is None): - raise ValueError( - "domain and path must be given to remove a cookie by name") - del self._cookies[domain][path][name] - elif path is not None: - if domain is None: - raise ValueError( - "domain must be given to remove cookies by path") - del self._cookies[domain][path] - elif domain is not None: - del self._cookies[domain] - else: - self._cookies = {} - - def clear_session_cookies(self): - """Discard all session cookies. - - Note that the .save() method won't save session cookies anyway, unless - you ask otherwise by passing a true ignore_discard argument. - - """ - self._cookies_lock.acquire() - try: - for cookie in self: - if cookie.discard: - self.clear(cookie.domain, cookie.path, cookie.name) - finally: - self._cookies_lock.release() - - def clear_expired_cookies(self): - """Discard all expired cookies. - - You probably don't need to call this method: expired cookies are never - sent back to the server (provided you're using DefaultCookiePolicy), - this method is called by CookieJar itself every so often, and the - .save() method won't save expired cookies anyway (unless you ask - otherwise by passing a true ignore_expires argument). - - """ - self._cookies_lock.acquire() - try: - now = time.time() - for cookie in self: - if cookie.is_expired(now): - self.clear(cookie.domain, cookie.path, cookie.name) - finally: - self._cookies_lock.release() - - def __iter__(self): - return deepvalues(self._cookies) - - def __len__(self): - """Return number of contained cookies.""" - i = 0 - for cookie in self: i = i + 1 - return i - - def __repr__(self): - r = [] - for cookie in self: r.append(repr(cookie)) - return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) - - def __str__(self): - r = [] - for cookie in self: r.append(str(cookie)) - return "<%s[%s]>" % (self.__class__.__name__, ", ".join(r)) - - -# derives from OSError for backwards-compatibility with Python 2.4.0 -class LoadError(OSError): pass - -class FileCookieJar(CookieJar): - """CookieJar that can be loaded from and saved to a file.""" - - def __init__(self, filename=None, delayload=False, policy=None): - """ - Cookies are NOT loaded from the named file until either the .load() or - .revert() method is called. - - """ - CookieJar.__init__(self, policy) - if filename is not None: - filename = os.fspath(filename) - self.filename = filename - self.delayload = bool(delayload) - - def save(self, filename=None, ignore_discard=False, ignore_expires=False): - """Save cookies to a file.""" - raise NotImplementedError() - - def load(self, filename=None, ignore_discard=False, ignore_expires=False): - """Load cookies from a file.""" - if filename is None: - if self.filename is not None: filename = self.filename - else: raise ValueError(MISSING_FILENAME_TEXT) - - with open(filename) as f: - self._really_load(f, filename, ignore_discard, ignore_expires) - - def revert(self, filename=None, - ignore_discard=False, ignore_expires=False): - """Clear all cookies and reload cookies from a saved file. - - Raises LoadError (or OSError) if reversion is not successful; the - object's state will not be altered if this happens. - - """ - if filename is None: - if self.filename is not None: filename = self.filename - else: raise ValueError(MISSING_FILENAME_TEXT) - - self._cookies_lock.acquire() - try: - - old_state = copy.deepcopy(self._cookies) - self._cookies = {} - try: - self.load(filename, ignore_discard, ignore_expires) - except OSError: - self._cookies = old_state - raise - - finally: - self._cookies_lock.release() - - -def lwp_cookie_str(cookie): - """Return string representation of Cookie in the LWP cookie file format. - - Actually, the format is extended a bit -- see module docstring. - - """ - h = [(cookie.name, cookie.value), - ("path", cookie.path), - ("domain", cookie.domain)] - if cookie.port is not None: h.append(("port", cookie.port)) - if cookie.path_specified: h.append(("path_spec", None)) - if cookie.port_specified: h.append(("port_spec", None)) - if cookie.domain_initial_dot: h.append(("domain_dot", None)) - if cookie.secure: h.append(("secure", None)) - if cookie.expires: h.append(("expires", - time2isoz(float(cookie.expires)))) - if cookie.discard: h.append(("discard", None)) - if cookie.comment: h.append(("comment", cookie.comment)) - if cookie.comment_url: h.append(("commenturl", cookie.comment_url)) - - keys = sorted(cookie._rest.keys()) - for k in keys: - h.append((k, str(cookie._rest[k]))) - - h.append(("version", str(cookie.version))) - - return join_header_words([h]) - -class LWPCookieJar(FileCookieJar): - """ - The LWPCookieJar saves a sequence of "Set-Cookie3" lines. - "Set-Cookie3" is the format used by the libwww-perl library, not known - to be compatible with any browser, but which is easy to read and - doesn't lose information about RFC 2965 cookies. - - Additional methods - - as_lwp_str(ignore_discard=True, ignore_expired=True) - - """ - - def as_lwp_str(self, ignore_discard=True, ignore_expires=True): - """Return cookies as a string of "\\n"-separated "Set-Cookie3" headers. - - ignore_discard and ignore_expires: see docstring for FileCookieJar.save - - """ - now = time.time() - r = [] - for cookie in self: - if not ignore_discard and cookie.discard: - continue - if not ignore_expires and cookie.is_expired(now): - continue - r.append("Set-Cookie3: %s" % lwp_cookie_str(cookie)) - return "\n".join(r+[""]) - - def save(self, filename=None, ignore_discard=False, ignore_expires=False): - if filename is None: - if self.filename is not None: filename = self.filename - else: raise ValueError(MISSING_FILENAME_TEXT) - - with os.fdopen( - os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o600), - 'w', - ) as f: - # There really isn't an LWP Cookies 2.0 format, but this indicates - # that there is extra information in here (domain_dot and - # port_spec) while still being compatible with libwww-perl, I hope. - f.write("#LWP-Cookies-2.0\n") - f.write(self.as_lwp_str(ignore_discard, ignore_expires)) - - def _really_load(self, f, filename, ignore_discard, ignore_expires): - magic = f.readline() - if not self.magic_re.search(magic): - msg = ("%r does not look like a Set-Cookie3 (LWP) format " - "file" % filename) - raise LoadError(msg) - - now = time.time() - - header = "Set-Cookie3:" - boolean_attrs = ("port_spec", "path_spec", "domain_dot", - "secure", "discard") - value_attrs = ("version", - "port", "path", "domain", - "expires", - "comment", "commenturl") - - try: - while (line := f.readline()) != "": - if not line.startswith(header): - continue - line = line[len(header):].strip() - - for data in split_header_words([line]): - name, value = data[0] - standard = {} - rest = {} - for k in boolean_attrs: - standard[k] = False - for k, v in data[1:]: - if k is not None: - lc = k.lower() - else: - lc = None - # don't lose case distinction for unknown fields - if (lc in value_attrs) or (lc in boolean_attrs): - k = lc - if k in boolean_attrs: - if v is None: v = True - standard[k] = v - elif k in value_attrs: - standard[k] = v - else: - rest[k] = v - - h = standard.get - expires = h("expires") - discard = h("discard") - if expires is not None: - expires = iso2time(expires) - if expires is None: - discard = True - domain = h("domain") - domain_specified = domain.startswith(".") - c = Cookie(h("version"), name, value, - h("port"), h("port_spec"), - domain, domain_specified, h("domain_dot"), - h("path"), h("path_spec"), - h("secure"), - expires, - discard, - h("comment"), - h("commenturl"), - rest) - if not ignore_discard and c.discard: - continue - if not ignore_expires and c.is_expired(now): - continue - self.set_cookie(c) - except OSError: - raise - except Exception: - _warn_unhandled_exception() - raise LoadError("invalid Set-Cookie3 format file %r: %r" % - (filename, line)) - - -class MozillaCookieJar(FileCookieJar): - """ - - WARNING: you may want to backup your browser's cookies file if you use - this class to save cookies. I *think* it works, but there have been - bugs in the past! - - This class differs from CookieJar only in the format it uses to save and - load cookies to and from a file. This class uses the Mozilla/Netscape - 'cookies.txt' format. curl and lynx use this file format, too. - - Don't expect cookies saved while the browser is running to be noticed by - the browser (in fact, Mozilla on unix will overwrite your saved cookies if - you change them on disk while it's running; on Windows, you probably can't - save at all while the browser is running). - - Note that the Mozilla/Netscape format will downgrade RFC2965 cookies to - Netscape cookies on saving. - - In particular, the cookie version and port number information is lost, - together with information about whether or not Path, Port and Discard were - specified by the Set-Cookie2 (or Set-Cookie) header, and whether or not the - domain as set in the HTTP header started with a dot (yes, I'm aware some - domains in Netscape files start with a dot and some don't -- trust me, you - really don't want to know any more about this). - - Note that though Mozilla and Netscape use the same format, they use - slightly different headers. The class saves cookies using the Netscape - header by default (Mozilla can cope with that). - - """ - - def _really_load(self, f, filename, ignore_discard, ignore_expires): - now = time.time() - - if not NETSCAPE_MAGIC_RGX.match(f.readline()): - raise LoadError( - "%r does not look like a Netscape format cookies file" % - filename) - - try: - while (line := f.readline()) != "": - rest = {} - - # httponly is a cookie flag as defined in rfc6265 - # when encoded in a netscape cookie file, - # the line is prepended with "#HttpOnly_" - if line.startswith(HTTPONLY_PREFIX): - rest[HTTPONLY_ATTR] = "" - line = line[len(HTTPONLY_PREFIX):] - - # last field may be absent, so keep any trailing tab - if line.endswith("\n"): line = line[:-1] - - # skip comments and blank lines XXX what is $ for? - if (line.strip().startswith(("#", "$")) or - line.strip() == ""): - continue - - domain, domain_specified, path, secure, expires, name, value = \ - line.split("\t") - secure = (secure == "TRUE") - domain_specified = (domain_specified == "TRUE") - if name == "": - # cookies.txt regards 'Set-Cookie: foo' as a cookie - # with no name, whereas http.cookiejar regards it as a - # cookie with no value. - name = value - value = None - - initial_dot = domain.startswith(".") - assert domain_specified == initial_dot - - discard = False - if expires == "": - expires = None - discard = True - - # assume path_specified is false - c = Cookie(0, name, value, - None, False, - domain, domain_specified, initial_dot, - path, False, - secure, - expires, - discard, - None, - None, - rest) - if not ignore_discard and c.discard: - continue - if not ignore_expires and c.is_expired(now): - continue - self.set_cookie(c) - - except OSError: - raise - except Exception: - _warn_unhandled_exception() - raise LoadError("invalid Netscape format cookies file %r: %r" % - (filename, line)) - - def save(self, filename=None, ignore_discard=False, ignore_expires=False): - if filename is None: - if self.filename is not None: filename = self.filename - else: raise ValueError(MISSING_FILENAME_TEXT) - - with os.fdopen( - os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o600), - 'w', - ) as f: - f.write(NETSCAPE_HEADER_TEXT) - now = time.time() - for cookie in self: - domain = cookie.domain - if not ignore_discard and cookie.discard: - continue - if not ignore_expires and cookie.is_expired(now): - continue - if cookie.secure: secure = "TRUE" - else: secure = "FALSE" - if domain.startswith("."): initial_dot = "TRUE" - else: initial_dot = "FALSE" - if cookie.expires is not None: - expires = str(cookie.expires) - else: - expires = "" - if cookie.value is None: - # cookies.txt regards 'Set-Cookie: foo' as a cookie - # with no name, whereas http.cookiejar regards it as a - # cookie with no value. - name = "" - value = cookie.name - else: - name = cookie.name - value = cookie.value - if cookie.has_nonstandard_attr(HTTPONLY_ATTR): - domain = HTTPONLY_PREFIX + domain - f.write( - "\t".join([domain, initial_dot, cookie.path, - secure, expires, name, value])+ - "\n") diff --git a/Python314_4_x86_Template/Lib/http/cookies.py b/Python314_4_x86_Template/Lib/http/cookies.py deleted file mode 100644 index d5b8ba939..000000000 --- a/Python314_4_x86_Template/Lib/http/cookies.py +++ /dev/null @@ -1,633 +0,0 @@ -#### -# Copyright 2000 by Timothy O'Malley <timo@alum.mit.edu> -# -# All Rights Reserved -# -# Permission to use, copy, modify, and distribute this software -# and its documentation for any purpose and without fee is hereby -# granted, provided that the above copyright notice appear in all -# copies and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Timothy O'Malley not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR -# ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -#### -# -# Id: Cookie.py,v 2.29 2000/08/23 05:28:49 timo Exp -# by Timothy O'Malley <timo@alum.mit.edu> -# -# Cookie.py is a Python module for the handling of HTTP -# cookies as a Python dictionary. See RFC 2109 for more -# information on cookies. -# -# The original idea to treat Cookies as a dictionary came from -# Dave Mitchell (davem@magnet.com) in 1995, when he released the -# first version of nscookie.py. -# -#### - -r""" -Here's a sample session to show how to use this module. -At the moment, this is the only documentation. - -The Basics ----------- - -Importing is easy... - - >>> from http import cookies - -Most of the time you start by creating a cookie. - - >>> C = cookies.SimpleCookie() - -Once you've created your Cookie, you can add values just as if it were -a dictionary. - - >>> C = cookies.SimpleCookie() - >>> C["fig"] = "newton" - >>> C["sugar"] = "wafer" - >>> C.output() - 'Set-Cookie: fig=newton\r\nSet-Cookie: sugar=wafer' - -Notice that the printable representation of a Cookie is the -appropriate format for a Set-Cookie: header. This is the -default behavior. You can change the header and printed -attributes by using the .output() function - - >>> C = cookies.SimpleCookie() - >>> C["rocky"] = "road" - >>> C["rocky"]["path"] = "/cookie" - >>> print(C.output(header="Cookie:")) - Cookie: rocky=road; Path=/cookie - >>> print(C.output(attrs=[], header="Cookie:")) - Cookie: rocky=road - -The load() method of a Cookie extracts cookies from a string. In a -CGI script, you would use this method to extract the cookies from the -HTTP_COOKIE environment variable. - - >>> C = cookies.SimpleCookie() - >>> C.load("chips=ahoy; vienna=finger") - >>> C.output() - 'Set-Cookie: chips=ahoy\r\nSet-Cookie: vienna=finger' - -The load() method is darn-tootin smart about identifying cookies -within a string. Escaped quotation marks, nested semicolons, and other -such trickeries do not confuse it. - - >>> C = cookies.SimpleCookie() - >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=;";') - >>> print(C) - Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=;" - -Each element of the Cookie also supports all of the RFC 2109 -Cookie attributes. Here's an example which sets the Path -attribute. - - >>> C = cookies.SimpleCookie() - >>> C["oreo"] = "doublestuff" - >>> C["oreo"]["path"] = "/" - >>> print(C) - Set-Cookie: oreo=doublestuff; Path=/ - -Each dictionary element has a 'value' attribute, which gives you -back the value associated with the key. - - >>> C = cookies.SimpleCookie() - >>> C["twix"] = "none for you" - >>> C["twix"].value - 'none for you' - -The SimpleCookie expects that all values should be standard strings. -Just to be sure, SimpleCookie invokes the str() builtin to convert -the value to a string, when the values are set dictionary-style. - - >>> C = cookies.SimpleCookie() - >>> C["number"] = 7 - >>> C["string"] = "seven" - >>> C["number"].value - '7' - >>> C["string"].value - 'seven' - >>> C.output() - 'Set-Cookie: number=7\r\nSet-Cookie: string=seven' - -Finis. -""" - -# -# Import our required modules -# -import re -import string -import types - -__all__ = ["CookieError", "BaseCookie", "SimpleCookie"] - -_nulljoin = ''.join -_semispacejoin = '; '.join -_spacejoin = ' '.join - -# -# Define an exception visible to External modules -# -class CookieError(Exception): - pass - - -# These quoting routines conform to the RFC2109 specification, which in -# turn references the character definitions from RFC2068. They provide -# a two-way quoting algorithm. Any non-text character is translated -# into a 4 character sequence: a forward-slash followed by the -# three-digit octal equivalent of the character. Any '\' or '"' is -# quoted with a preceding '\' slash. -# Because of the way browsers really handle cookies (as opposed to what -# the RFC says) we also encode "," and ";". -# -# These are taken from RFC2068 and RFC2109. -# _LegalChars is the list of chars which don't require "'s -# _Translator hash-table for fast quoting -# -_LegalChars = string.ascii_letters + string.digits + "!#$%&'*+-.^_`|~:" -_UnescapedChars = _LegalChars + ' ()/<=>?@[]{}' - -_Translator = {n: '\\%03o' % n - for n in set(range(256)) - set(map(ord, _UnescapedChars))} -_Translator.update({ - ord('"'): '\\"', - ord('\\'): '\\\\', -}) - -_is_legal_key = re.compile('[%s]+' % re.escape(_LegalChars)).fullmatch -_control_character_re = re.compile(r'[\x00-\x1F\x7F]') - - -def _has_control_character(*val): - """Detects control characters within a value. - Supports any type, as header values can be any type. - """ - return any(_control_character_re.search(str(v)) for v in val) - - -def _quote(str): - r"""Quote a string for use in a cookie header. - - If the string does not need to be double-quoted, then just return the - string. Otherwise, surround the string in doublequotes and quote - (with a \) special characters. - """ - if str is None or _is_legal_key(str): - return str - else: - return '"' + str.translate(_Translator) + '"' - - -_unquote_sub = re.compile(r'\\(?:([0-3][0-7][0-7])|(.))').sub - -def _unquote_replace(m): - if m[1]: - return chr(int(m[1], 8)) - else: - return m[2] - -def _unquote(str): - # If there aren't any doublequotes, - # then there can't be any special characters. See RFC 2109. - if str is None or len(str) < 2: - return str - if str[0] != '"' or str[-1] != '"': - return str - - # We have to assume that we must decode this string. - # Down to work. - - # Remove the "s - str = str[1:-1] - - # Check for special sequences. Examples: - # \012 --> \n - # \" --> " - # - return _unquote_sub(_unquote_replace, str) - -# The _getdate() routine is used to set the expiration time in the cookie's HTTP -# header. By default, _getdate() returns the current time in the appropriate -# "expires" format for a Set-Cookie header. The one optional argument is an -# offset from now, in seconds. For example, an offset of -3600 means "one hour -# ago". The offset may be a floating-point number. -# - -_weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - -_monthname = [None, - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - -def _getdate(future=0, weekdayname=_weekdayname, monthname=_monthname): - from time import gmtime, time - now = time() - year, month, day, hh, mm, ss, wd, y, z = gmtime(now + future) - return "%s, %02d %3s %4d %02d:%02d:%02d GMT" % \ - (weekdayname[wd], day, monthname[month], year, hh, mm, ss) - - -class Morsel(dict): - """A class to hold ONE (key, value) pair. - - In a cookie, each such pair may have several attributes, so this class is - used to keep the attributes associated with the appropriate key,value pair. - This class also includes a coded_value attribute, which is used to hold - the network representation of the value. - """ - # RFC 2109 lists these attributes as reserved: - # path comment domain - # max-age secure version - # - # For historical reasons, these attributes are also reserved: - # expires - # - # This is an extension from Microsoft: - # httponly - # - # This dictionary provides a mapping from the lowercase - # variant on the left to the appropriate traditional - # formatting on the right. - _reserved = { - "expires" : "expires", - "path" : "Path", - "comment" : "Comment", - "domain" : "Domain", - "max-age" : "Max-Age", - "secure" : "Secure", - "httponly" : "HttpOnly", - "version" : "Version", - "samesite" : "SameSite", - "partitioned": "Partitioned", - } - - _reserved_defaults = dict.fromkeys(_reserved, "") - - _flags = {'secure', 'httponly', 'partitioned'} - - def __init__(self): - # Set defaults - self._key = self._value = self._coded_value = None - - # Set default attributes - dict.update(self, self._reserved_defaults) - - @property - def key(self): - return self._key - - @property - def value(self): - return self._value - - @property - def coded_value(self): - return self._coded_value - - def __setitem__(self, K, V): - K = K.lower() - if not K in self._reserved: - raise CookieError("Invalid attribute %r" % (K,)) - if _has_control_character(K, V): - raise CookieError(f"Control characters are not allowed in cookies {K!r} {V!r}") - dict.__setitem__(self, K, V) - - def setdefault(self, key, val=None): - key = key.lower() - if key not in self._reserved: - raise CookieError("Invalid attribute %r" % (key,)) - if _has_control_character(key, val): - raise CookieError("Control characters are not allowed in cookies %r %r" % (key, val,)) - return dict.setdefault(self, key, val) - - def __eq__(self, morsel): - if not isinstance(morsel, Morsel): - return NotImplemented - return (dict.__eq__(self, morsel) and - self._value == morsel._value and - self._key == morsel._key and - self._coded_value == morsel._coded_value) - - __ne__ = object.__ne__ - - def copy(self): - morsel = Morsel() - dict.update(morsel, self) - morsel.__dict__.update(self.__dict__) - return morsel - - def update(self, values): - data = {} - for key, val in dict(values).items(): - key = key.lower() - if key not in self._reserved: - raise CookieError("Invalid attribute %r" % (key,)) - if _has_control_character(key, val): - raise CookieError("Control characters are not allowed in " - f"cookies {key!r} {val!r}") - data[key] = val - dict.update(self, data) - - def __ior__(self, values): - self.update(values) - return self - - def isReservedKey(self, K): - return K.lower() in self._reserved - - def set(self, key, val, coded_val): - if key.lower() in self._reserved: - raise CookieError('Attempt to set a reserved key %r' % (key,)) - if not _is_legal_key(key): - raise CookieError('Illegal key %r' % (key,)) - if _has_control_character(key, val, coded_val): - raise CookieError( - "Control characters are not allowed in cookies %r %r %r" % (key, val, coded_val,)) - - # It's a good key, so save it. - self._key = key - self._value = val - self._coded_value = coded_val - - def __getstate__(self): - return { - 'key': self._key, - 'value': self._value, - 'coded_value': self._coded_value, - } - - def __setstate__(self, state): - key = state['key'] - value = state['value'] - coded_value = state['coded_value'] - if _has_control_character(key, value, coded_value): - raise CookieError("Control characters are not allowed in cookies " - f"{key!r} {value!r} {coded_value!r}") - self._key = key - self._value = value - self._coded_value = coded_value - - def output(self, attrs=None, header="Set-Cookie:"): - return "%s %s" % (header, self.OutputString(attrs)) - - __str__ = output - - def __repr__(self): - return '<%s: %s>' % (self.__class__.__name__, self.OutputString()) - - def js_output(self, attrs=None): - # Print javascript - output_string = self.OutputString(attrs) - if _has_control_character(output_string): - raise CookieError("Control characters are not allowed in cookies") - return """ - <script type="text/javascript"> - <!-- begin hiding - document.cookie = \"%s\"; - // end hiding --> - </script> - """ % (output_string.replace('"', r'\"')) - - def OutputString(self, attrs=None): - # Build up our result - # - result = [] - append = result.append - - # First, the key=value pair - append("%s=%s" % (self.key, self.coded_value)) - - # Now add any defined attributes - if attrs is None: - attrs = self._reserved - items = sorted(self.items()) - for key, value in items: - if value == "": - continue - if key not in attrs: - continue - if key == "expires" and isinstance(value, int): - append("%s=%s" % (self._reserved[key], _getdate(value))) - elif key == "max-age" and isinstance(value, int): - append("%s=%d" % (self._reserved[key], value)) - elif key == "comment" and isinstance(value, str): - append("%s=%s" % (self._reserved[key], _quote(value))) - elif key in self._flags: - if value: - append(str(self._reserved[key])) - else: - append("%s=%s" % (self._reserved[key], value)) - - # Return the result - return _semispacejoin(result) - - __class_getitem__ = classmethod(types.GenericAlias) - - -# -# Pattern for finding cookie -# -# This used to be strict parsing based on the RFC2109 and RFC2068 -# specifications. I have since discovered that MSIE 3.0x doesn't -# follow the character rules outlined in those specs. As a -# result, the parsing rules here are less strict. -# - -_LegalKeyChars = r"\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=" -_LegalValueChars = _LegalKeyChars + r'\[\]' -_CookiePattern = re.compile(r""" - \s* # Optional whitespace at start of cookie - (?P<key> # Start of group 'key' - [""" + _LegalKeyChars + r"""]+? # Any word of at least one letter - ) # End of group 'key' - ( # Optional group: there may not be a value. - \s*=\s* # Equal Sign - (?P<val> # Start of group 'val' - "(?:[^\\"]|\\.)*" # Any double-quoted string - | # or - # Special case for "expires" attr - (\w{3,6}day|\w{3}),\s # Day of the week or abbreviated day - [\w\d\s-]{9,11}\s[\d:]{8}\sGMT # Date and time in specific format - | # or - [""" + _LegalValueChars + r"""]* # Any word or empty string - ) # End of group 'val' - )? # End of optional value group - \s* # Any number of spaces. - (\s+|;|$) # Ending either at space, semicolon, or EOS. - """, re.ASCII | re.VERBOSE) # re.ASCII may be removed if safe. - - -# At long last, here is the cookie class. Using this class is almost just like -# using a dictionary. See this module's docstring for example usage. -# -class BaseCookie(dict): - """A container class for a set of Morsels.""" - - def value_decode(self, val): - """real_value, coded_value = value_decode(STRING) - Called prior to setting a cookie's value from the network - representation. The VALUE is the value read from HTTP - header. - Override this function to modify the behavior of cookies. - """ - return val, val - - def value_encode(self, val): - """real_value, coded_value = value_encode(VALUE) - Called prior to setting a cookie's value from the dictionary - representation. The VALUE is the value being assigned. - Override this function to modify the behavior of cookies. - """ - strval = str(val) - return strval, strval - - def __init__(self, input=None): - if input: - self.load(input) - - def __set(self, key, real_value, coded_value): - """Private method for setting a cookie's value""" - M = self.get(key, Morsel()) - M.set(key, real_value, coded_value) - dict.__setitem__(self, key, M) - - def __setitem__(self, key, value): - """Dictionary style assignment.""" - if isinstance(value, Morsel): - # allow assignment of constructed Morsels (e.g. for pickling) - dict.__setitem__(self, key, value) - else: - rval, cval = self.value_encode(value) - self.__set(key, rval, cval) - - def output(self, attrs=None, header="Set-Cookie:", sep="\015\012"): - """Return a string suitable for HTTP.""" - result = [] - items = sorted(self.items()) - for key, value in items: - value_output = value.output(attrs, header) - if _has_control_character(value_output): - raise CookieError("Control characters are not allowed in cookies") - result.append(value_output) - return sep.join(result) - - __str__ = output - - def __repr__(self): - l = [] - items = sorted(self.items()) - for key, value in items: - l.append('%s=%s' % (key, repr(value.value))) - return '<%s: %s>' % (self.__class__.__name__, _spacejoin(l)) - - def js_output(self, attrs=None): - """Return a string suitable for JavaScript.""" - result = [] - items = sorted(self.items()) - for key, value in items: - result.append(value.js_output(attrs)) - return _nulljoin(result) - - def load(self, rawdata): - """Load cookies from a string (presumably HTTP_COOKIE) or - from a dictionary. Loading cookies from a dictionary 'd' - is equivalent to calling: - map(Cookie.__setitem__, d.keys(), d.values()) - """ - if isinstance(rawdata, str): - self.__parse_string(rawdata) - else: - # self.update() wouldn't call our custom __setitem__ - for key, value in rawdata.items(): - self[key] = value - return - - def __parse_string(self, str, patt=_CookiePattern): - i = 0 # Our starting point - n = len(str) # Length of string - parsed_items = [] # Parsed (type, key, value) triples - morsel_seen = False # A key=value pair was previously encountered - - TYPE_ATTRIBUTE = 1 - TYPE_KEYVALUE = 2 - - # We first parse the whole cookie string and reject it if it's - # syntactically invalid (this helps avoid some classes of injection - # attacks). - while 0 <= i < n: - # Start looking for a cookie - match = patt.match(str, i) - if not match: - # No more cookies - break - - key, value = match.group("key"), match.group("val") - i = match.end(0) - - if key[0] == "$": - if not morsel_seen: - # We ignore attributes which pertain to the cookie - # mechanism as a whole, such as "$Version". - # See RFC 2965. (Does anyone care?) - continue - parsed_items.append((TYPE_ATTRIBUTE, key[1:], value)) - elif key.lower() in Morsel._reserved: - if not morsel_seen: - # Invalid cookie string - return - if value is None: - if key.lower() in Morsel._flags: - parsed_items.append((TYPE_ATTRIBUTE, key, True)) - else: - # Invalid cookie string - return - else: - parsed_items.append((TYPE_ATTRIBUTE, key, _unquote(value))) - elif value is not None: - parsed_items.append((TYPE_KEYVALUE, key, self.value_decode(value))) - morsel_seen = True - else: - # Invalid cookie string - return - - # The cookie string is valid, apply it. - M = None # current morsel - for tp, key, value in parsed_items: - if tp == TYPE_ATTRIBUTE: - assert M is not None - M[key] = value - else: - assert tp == TYPE_KEYVALUE - rval, cval = value - self.__set(key, rval, cval) - M = self[key] - - -class SimpleCookie(BaseCookie): - """ - SimpleCookie supports strings as cookie values. When setting - the value using the dictionary assignment notation, SimpleCookie - calls the builtin str() to convert the value to a string. Values - received from HTTP are kept as strings. - """ - def value_decode(self, val): - return _unquote(val), val - - def value_encode(self, val): - strval = str(val) - return strval, _quote(strval) diff --git a/Python314_4_x86_Template/Lib/http/server.py b/Python314_4_x86_Template/Lib/http/server.py deleted file mode 100644 index ac1f57c29..000000000 --- a/Python314_4_x86_Template/Lib/http/server.py +++ /dev/null @@ -1,1441 +0,0 @@ -"""HTTP server classes. - -Note: BaseHTTPRequestHandler doesn't implement any HTTP request; see -SimpleHTTPRequestHandler for simple implementations of GET, HEAD and POST, -and (deprecated) CGIHTTPRequestHandler for CGI scripts. - -It does, however, optionally implement HTTP/1.1 persistent connections. - -Notes on CGIHTTPRequestHandler ------------------------------- - -This class is deprecated. It implements GET and POST requests to cgi-bin scripts. - -If the os.fork() function is not present (Windows), subprocess.Popen() is used, -with slightly altered but never documented semantics. Use from a threaded -process is likely to trigger a warning at os.fork() time. - -In all cases, the implementation is intentionally naive -- all -requests are executed synchronously. - -SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL --- it may execute arbitrary Python code or external programs. - -Note that status code 200 is sent prior to execution of a CGI script, so -scripts cannot send other status codes such as 302 (redirect). - -XXX To do: - -- log requests even later (to capture byte count) -- log user-agent header and other interesting goodies -- send error log to separate file -""" - - -# See also: -# -# HTTP Working Group T. Berners-Lee -# INTERNET-DRAFT R. T. Fielding -# <draft-ietf-http-v10-spec-00.txt> H. Frystyk Nielsen -# Expires September 8, 1995 March 8, 1995 -# -# URL: http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-v10-spec-00.txt -# -# and -# -# Network Working Group R. Fielding -# Request for Comments: 2616 et al -# Obsoletes: 2068 June 1999 -# Category: Standards Track -# -# URL: http://www.faqs.org/rfcs/rfc2616.html - -# Log files -# --------- -# -# Here's a quote from the NCSA httpd docs about log file format. -# -# | The logfile format is as follows. Each line consists of: -# | -# | host rfc931 authuser [DD/Mon/YYYY:hh:mm:ss] "request" ddd bbbb -# | -# | host: Either the DNS name or the IP number of the remote client -# | rfc931: Any information returned by identd for this person, -# | - otherwise. -# | authuser: If user sent a userid for authentication, the user name, -# | - otherwise. -# | DD: Day -# | Mon: Month (calendar name) -# | YYYY: Year -# | hh: hour (24-hour format, the machine's timezone) -# | mm: minutes -# | ss: seconds -# | request: The first line of the HTTP request as sent by the client. -# | ddd: the status code returned by the server, - if not available. -# | bbbb: the total number of bytes sent, -# | *not including the HTTP/1.0 header*, - if not available -# | -# | You can determine the name of the file accessed through request. -# -# (Actually, the latter is only true if you know the server configuration -# at the time the request was made!) - -__version__ = "0.6" - -__all__ = [ - "HTTPServer", "ThreadingHTTPServer", - "HTTPSServer", "ThreadingHTTPSServer", - "BaseHTTPRequestHandler", "SimpleHTTPRequestHandler", - "CGIHTTPRequestHandler", -] - -import copy -import datetime -import email.utils -import html -import http.client -import io -import itertools -import mimetypes -import os -import posixpath -import select -import shutil -import socket -import socketserver -import sys -import time -import urllib.parse - -from http import HTTPStatus - - -# Default error message template -DEFAULT_ERROR_MESSAGE = """\ -<!DOCTYPE HTML> -<html lang="en"> - <head> - <meta charset="utf-8"> - <style type="text/css"> - :root { - color-scheme: light dark; - } - </style> - <title>Error response</title> - </head> - <body> - <h1>Error response</h1> - <p>Error code: %(code)d</p> - <p>Message: %(message)s.</p> - <p>Error code explanation: %(code)s - %(explain)s.</p> - </body> -</html> -""" - -DEFAULT_ERROR_CONTENT_TYPE = "text/html;charset=utf-8" - -# Data larger than this will be read in chunks, to prevent extreme -# overallocation. -_MIN_READ_BUF_SIZE = 1 << 20 - -class HTTPServer(socketserver.TCPServer): - - allow_reuse_address = True # Seems to make sense in testing environment - allow_reuse_port = False - - def server_bind(self): - """Override server_bind to store the server name.""" - socketserver.TCPServer.server_bind(self) - host, port = self.server_address[:2] - self.server_name = socket.getfqdn(host) - self.server_port = port - - -class ThreadingHTTPServer(socketserver.ThreadingMixIn, HTTPServer): - daemon_threads = True - - -class HTTPSServer(HTTPServer): - def __init__(self, server_address, RequestHandlerClass, - bind_and_activate=True, *, certfile, keyfile=None, - password=None, alpn_protocols=None): - try: - import ssl - except ImportError: - raise RuntimeError("SSL module is missing; " - "HTTPS support is unavailable") - - self.ssl = ssl - self.certfile = certfile - self.keyfile = keyfile - self.password = password - # Support by default HTTP/1.1 - self.alpn_protocols = ( - ["http/1.1"] if alpn_protocols is None else alpn_protocols - ) - - super().__init__(server_address, - RequestHandlerClass, - bind_and_activate) - - def server_activate(self): - """Wrap the socket in SSLSocket.""" - super().server_activate() - context = self._create_context() - self.socket = context.wrap_socket(self.socket, server_side=True) - - def _create_context(self): - """Create a secure SSL context.""" - context = self.ssl.create_default_context(self.ssl.Purpose.CLIENT_AUTH) - context.load_cert_chain(self.certfile, self.keyfile, self.password) - context.set_alpn_protocols(self.alpn_protocols) - return context - - -class ThreadingHTTPSServer(socketserver.ThreadingMixIn, HTTPSServer): - daemon_threads = True - - -class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): - - """HTTP request handler base class. - - The following explanation of HTTP serves to guide you through the - code as well as to expose any misunderstandings I may have about - HTTP (so you don't need to read the code to figure out I'm wrong - :-). - - HTTP (HyperText Transfer Protocol) is an extensible protocol on - top of a reliable stream transport (e.g. TCP/IP). The protocol - recognizes three parts to a request: - - 1. One line identifying the request type and path - 2. An optional set of RFC-822-style headers - 3. An optional data part - - The headers and data are separated by a blank line. - - The first line of the request has the form - - <command> <path> <version> - - where <command> is a (case-sensitive) keyword such as GET or POST, - <path> is a string containing path information for the request, - and <version> should be the string "HTTP/1.0" or "HTTP/1.1". - <path> is encoded using the URL encoding scheme (using %xx to signify - the ASCII character with hex code xx). - - The specification specifies that lines are separated by CRLF but - for compatibility with the widest range of clients recommends - servers also handle LF. Similarly, whitespace in the request line - is treated sensibly (allowing multiple spaces between components - and allowing trailing whitespace). - - Similarly, for output, lines ought to be separated by CRLF pairs - but most clients grok LF characters just fine. - - If the first line of the request has the form - - <command> <path> - - (i.e. <version> is left out) then this is assumed to be an HTTP - 0.9 request; this form has no optional headers and data part and - the reply consists of just the data. - - The reply form of the HTTP 1.x protocol again has three parts: - - 1. One line giving the response code - 2. An optional set of RFC-822-style headers - 3. The data - - Again, the headers and data are separated by a blank line. - - The response code line has the form - - <version> <responsecode> <responsestring> - - where <version> is the protocol version ("HTTP/1.0" or "HTTP/1.1"), - <responsecode> is a 3-digit response code indicating success or - failure of the request, and <responsestring> is an optional - human-readable string explaining what the response code means. - - This server parses the request and the headers, and then calls a - function specific to the request type (<command>). Specifically, - a request SPAM will be handled by a method do_SPAM(). If no - such method exists the server sends an error response to the - client. If it exists, it is called with no arguments: - - do_SPAM() - - Note that the request name is case sensitive (i.e. SPAM and spam - are different requests). - - The various request details are stored in instance variables: - - - client_address is the client IP address in the form (host, - port); - - - command, path and version are the broken-down request line; - - - headers is an instance of email.message.Message (or a derived - class) containing the header information; - - - rfile is a file object open for reading positioned at the - start of the optional input data part; - - - wfile is a file object open for writing. - - IT IS IMPORTANT TO ADHERE TO THE PROTOCOL FOR WRITING! - - The first thing to be written must be the response line. Then - follow 0 or more header lines, then a blank line, and then the - actual data (if any). The meaning of the header lines depends on - the command executed by the server; in most cases, when data is - returned, there should be at least one header line of the form - - Content-type: <type>/<subtype> - - where <type> and <subtype> should be registered MIME types, - e.g. "text/html" or "text/plain". - - """ - - # The Python system version, truncated to its first component. - sys_version = "Python/" + sys.version.split()[0] - - # The server software version. You may want to override this. - # The format is multiple whitespace-separated strings, - # where each string is of the form name[/version]. - server_version = "BaseHTTP/" + __version__ - - error_message_format = DEFAULT_ERROR_MESSAGE - error_content_type = DEFAULT_ERROR_CONTENT_TYPE - - # The default request version. This only affects responses up until - # the point where the request line is parsed, so it mainly decides what - # the client gets back when sending a malformed request line. - # Most web servers default to HTTP 0.9, i.e. don't send a status line. - default_request_version = "HTTP/0.9" - - def parse_request(self): - """Parse a request (internal). - - The request should be stored in self.raw_requestline; the results - are in self.command, self.path, self.request_version and - self.headers. - - Return True for success, False for failure; on failure, any relevant - error response has already been sent back. - - """ - is_http_0_9 = False - self.command = None # set in case of error on the first line - self.request_version = version = self.default_request_version - self.close_connection = True - requestline = str(self.raw_requestline, 'iso-8859-1') - requestline = requestline.rstrip('\r\n') - self.requestline = requestline - words = requestline.split() - if len(words) == 0: - return False - - if len(words) >= 3: # Enough to determine protocol version - version = words[-1] - try: - if not version.startswith('HTTP/'): - raise ValueError - base_version_number = version.split('/', 1)[1] - version_number = base_version_number.split(".") - # RFC 2145 section 3.1 says there can be only one "." and - # - major and minor numbers MUST be treated as - # separate integers; - # - HTTP/2.4 is a lower version than HTTP/2.13, which in - # turn is lower than HTTP/12.3; - # - Leading zeros MUST be ignored by recipients. - if len(version_number) != 2: - raise ValueError - if any(not component.isdigit() for component in version_number): - raise ValueError("non digit in http version") - if any(len(component) > 10 for component in version_number): - raise ValueError("unreasonable length http version") - version_number = int(version_number[0]), int(version_number[1]) - except (ValueError, IndexError): - self.send_error( - HTTPStatus.BAD_REQUEST, - "Bad request version (%r)" % version) - return False - if version_number >= (1, 1) and self.protocol_version >= "HTTP/1.1": - self.close_connection = False - if version_number >= (2, 0): - self.send_error( - HTTPStatus.HTTP_VERSION_NOT_SUPPORTED, - "Invalid HTTP version (%s)" % base_version_number) - return False - self.request_version = version - - if not 2 <= len(words) <= 3: - self.send_error( - HTTPStatus.BAD_REQUEST, - "Bad request syntax (%r)" % requestline) - return False - command, path = words[:2] - if len(words) == 2: - self.close_connection = True - if command != 'GET': - self.send_error( - HTTPStatus.BAD_REQUEST, - "Bad HTTP/0.9 request type (%r)" % command) - return False - is_http_0_9 = True - self.command, self.path = command, path - - # gh-87389: The purpose of replacing '//' with '/' is to protect - # against open redirect attacks possibly triggered if the path starts - # with '//' because http clients treat //path as an absolute URI - # without scheme (similar to http://path) rather than a path. - if self.path.startswith('//'): - self.path = '/' + self.path.lstrip('/') # Reduce to a single / - - # For HTTP/0.9, headers are not expected at all. - if is_http_0_9: - self.headers = {} - return True - - # Examine the headers and look for a Connection directive. - try: - self.headers = http.client.parse_headers(self.rfile, - _class=self.MessageClass) - except http.client.LineTooLong as err: - self.send_error( - HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE, - "Line too long", - str(err)) - return False - except http.client.HTTPException as err: - self.send_error( - HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE, - "Too many headers", - str(err) - ) - return False - - conntype = self.headers.get('Connection', "") - if conntype.lower() == 'close': - self.close_connection = True - elif (conntype.lower() == 'keep-alive' and - self.protocol_version >= "HTTP/1.1"): - self.close_connection = False - # Examine the headers and look for an Expect directive - expect = self.headers.get('Expect', "") - if (expect.lower() == "100-continue" and - self.protocol_version >= "HTTP/1.1" and - self.request_version >= "HTTP/1.1"): - if not self.handle_expect_100(): - return False - return True - - def handle_expect_100(self): - """Decide what to do with an "Expect: 100-continue" header. - - If the client is expecting a 100 Continue response, we must - respond with either a 100 Continue or a final response before - waiting for the request body. The default is to always respond - with a 100 Continue. You can behave differently (for example, - reject unauthorized requests) by overriding this method. - - This method should either return True (possibly after sending - a 100 Continue response) or send an error response and return - False. - - """ - self.send_response_only(HTTPStatus.CONTINUE) - self.end_headers() - return True - - def handle_one_request(self): - """Handle a single HTTP request. - - You normally don't need to override this method; see the class - __doc__ string for information on how to handle specific HTTP - commands such as GET and POST. - - """ - try: - self.raw_requestline = self.rfile.readline(65537) - if len(self.raw_requestline) > 65536: - self.requestline = '' - self.request_version = '' - self.command = '' - self.send_error(HTTPStatus.REQUEST_URI_TOO_LONG) - return - if not self.raw_requestline: - self.close_connection = True - return - if not self.parse_request(): - # An error code has been sent, just exit - return - mname = 'do_' + self.command - if not hasattr(self, mname): - self.send_error( - HTTPStatus.NOT_IMPLEMENTED, - "Unsupported method (%r)" % self.command) - return - method = getattr(self, mname) - method() - self.wfile.flush() #actually send the response if not already done. - except TimeoutError as e: - #a read or a write timed out. Discard this connection - self.log_error("Request timed out: %r", e) - self.close_connection = True - return - - def handle(self): - """Handle multiple requests if necessary.""" - self.close_connection = True - - self.handle_one_request() - while not self.close_connection: - self.handle_one_request() - - def send_error(self, code, message=None, explain=None): - """Send and log an error reply. - - Arguments are - * code: an HTTP error code - 3 digits - * message: a simple optional 1 line reason phrase. - *( HTAB / SP / VCHAR / %x80-FF ) - defaults to short entry matching the response code - * explain: a detailed message defaults to the long entry - matching the response code. - - This sends an error response (so it must be called before any - output has been generated), logs the error, and finally sends - a piece of HTML explaining the error to the user. - - """ - - try: - shortmsg, longmsg = self.responses[code] - except KeyError: - shortmsg, longmsg = '???', '???' - if message is None: - message = shortmsg - if explain is None: - explain = longmsg - self.log_error("code %d, message %s", code, message) - self.send_response(code, message) - self.send_header('Connection', 'close') - - # Message body is omitted for cases described in: - # - RFC7230: 3.3. 1xx, 204(No Content), 304(Not Modified) - # - RFC7231: 6.3.6. 205(Reset Content) - body = None - if (code >= 200 and - code not in (HTTPStatus.NO_CONTENT, - HTTPStatus.RESET_CONTENT, - HTTPStatus.NOT_MODIFIED)): - # HTML encode to prevent Cross Site Scripting attacks - # (see bug #1100201) - content = (self.error_message_format % { - 'code': code, - 'message': html.escape(message, quote=False), - 'explain': html.escape(explain, quote=False) - }) - body = content.encode('UTF-8', 'replace') - self.send_header("Content-Type", self.error_content_type) - self.send_header('Content-Length', str(len(body))) - self.end_headers() - - if self.command != 'HEAD' and body: - self.wfile.write(body) - - def send_response(self, code, message=None): - """Add the response header to the headers buffer and log the - response code. - - Also send two standard headers with the server software - version and the current date. - - """ - self.log_request(code) - self.send_response_only(code, message) - self.send_header('Server', self.version_string()) - self.send_header('Date', self.date_time_string()) - - def send_response_only(self, code, message=None): - """Send the response header only.""" - if self.request_version != 'HTTP/0.9': - if message is None: - if code in self.responses: - message = self.responses[code][0] - else: - message = '' - if not hasattr(self, '_headers_buffer'): - self._headers_buffer = [] - self._headers_buffer.append(("%s %d %s\r\n" % - (self.protocol_version, code, message)).encode( - 'latin-1', 'strict')) - - def send_header(self, keyword, value): - """Send a MIME header to the headers buffer.""" - if self.request_version != 'HTTP/0.9': - if not hasattr(self, '_headers_buffer'): - self._headers_buffer = [] - self._headers_buffer.append( - ("%s: %s\r\n" % (keyword, value)).encode('latin-1', 'strict')) - - if keyword.lower() == 'connection': - if value.lower() == 'close': - self.close_connection = True - elif value.lower() == 'keep-alive': - self.close_connection = False - - def end_headers(self): - """Send the blank line ending the MIME headers.""" - if self.request_version != 'HTTP/0.9': - self._headers_buffer.append(b"\r\n") - self.flush_headers() - - def flush_headers(self): - if hasattr(self, '_headers_buffer'): - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] - - def log_request(self, code='-', size='-'): - """Log an accepted request. - - This is called by send_response(). - - """ - if isinstance(code, HTTPStatus): - code = code.value - self.log_message('"%s" %s %s', - self.requestline, str(code), str(size)) - - def log_error(self, format, *args): - """Log an error. - - This is called when a request cannot be fulfilled. By - default it passes the message on to log_message(). - - Arguments are the same as for log_message(). - - XXX This should go to the separate error log. - - """ - - self.log_message(format, *args) - - # https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes - _control_char_table = str.maketrans( - {c: fr'\x{c:02x}' for c in itertools.chain(range(0x20), range(0x7f,0xa0))}) - _control_char_table[ord('\\')] = r'\\' - - def log_message(self, format, *args): - """Log an arbitrary message. - - This is used by all other logging functions. Override - it if you have specific logging wishes. - - The first argument, FORMAT, is a format string for the - message to be logged. If the format string contains - any % escapes requiring parameters, they should be - specified as subsequent arguments (it's just like - printf!). - - The client ip and current date/time are prefixed to - every message. - - Unicode control characters are replaced with escaped hex - before writing the output to stderr. - - """ - - message = format % args - sys.stderr.write("%s - - [%s] %s\n" % - (self.address_string(), - self.log_date_time_string(), - message.translate(self._control_char_table))) - - def version_string(self): - """Return the server software version string.""" - return self.server_version + ' ' + self.sys_version - - def date_time_string(self, timestamp=None): - """Return the current date and time formatted for a message header.""" - if timestamp is None: - timestamp = time.time() - return email.utils.formatdate(timestamp, usegmt=True) - - def log_date_time_string(self): - """Return the current time formatted for logging.""" - now = time.time() - year, month, day, hh, mm, ss, x, y, z = time.localtime(now) - s = "%02d/%3s/%04d %02d:%02d:%02d" % ( - day, self.monthname[month], year, hh, mm, ss) - return s - - weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - - monthname = [None, - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - - def address_string(self): - """Return the client address.""" - - return self.client_address[0] - - # Essentially static class variables - - # The version of the HTTP protocol we support. - # Set this to HTTP/1.1 to enable automatic keepalive - protocol_version = "HTTP/1.0" - - # MessageClass used to parse headers - MessageClass = http.client.HTTPMessage - - # hack to maintain backwards compatibility - responses = { - v: (v.phrase, v.description) - for v in HTTPStatus.__members__.values() - } - - -class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): - - """Simple HTTP request handler with GET and HEAD commands. - - This serves files from the current directory and any of its - subdirectories. The MIME type for files is determined by - calling the .guess_type() method. - - The GET and HEAD requests are identical except that the HEAD - request omits the actual contents of the file. - - """ - - server_version = "SimpleHTTP/" + __version__ - index_pages = ("index.html", "index.htm") - extensions_map = _encodings_map_default = { - '.gz': 'application/gzip', - '.Z': 'application/octet-stream', - '.bz2': 'application/x-bzip2', - '.xz': 'application/x-xz', - } - - def __init__(self, *args, directory=None, **kwargs): - if directory is None: - directory = os.getcwd() - self.directory = os.fspath(directory) - super().__init__(*args, **kwargs) - - def do_GET(self): - """Serve a GET request.""" - f = self.send_head() - if f: - try: - self.copyfile(f, self.wfile) - finally: - f.close() - - def do_HEAD(self): - """Serve a HEAD request.""" - f = self.send_head() - if f: - f.close() - - def send_head(self): - """Common code for GET and HEAD commands. - - This sends the response code and MIME headers. - - Return value is either a file object (which has to be copied - to the outputfile by the caller unless the command was HEAD, - and must be closed by the caller under all circumstances), or - None, in which case the caller has nothing further to do. - - """ - path = self.translate_path(self.path) - f = None - if os.path.isdir(path): - parts = urllib.parse.urlsplit(self.path) - if not parts.path.endswith(('/', '%2f', '%2F')): - # redirect browser - doing basically what apache does - self.send_response(HTTPStatus.MOVED_PERMANENTLY) - new_parts = (parts[0], parts[1], parts[2] + '/', - parts[3], parts[4]) - new_url = urllib.parse.urlunsplit(new_parts) - self.send_header("Location", new_url) - self.send_header("Content-Length", "0") - self.end_headers() - return None - for index in self.index_pages: - index = os.path.join(path, index) - if os.path.isfile(index): - path = index - break - else: - return self.list_directory(path) - ctype = self.guess_type(path) - # check for trailing "/" which should return 404. See Issue17324 - # The test for this was added in test_httpserver.py - # However, some OS platforms accept a trailingSlash as a filename - # See discussion on python-dev and Issue34711 regarding - # parsing and rejection of filenames with a trailing slash - if path.endswith("/"): - self.send_error(HTTPStatus.NOT_FOUND, "File not found") - return None - try: - f = open(path, 'rb') - except OSError: - self.send_error(HTTPStatus.NOT_FOUND, "File not found") - return None - - try: - fs = os.fstat(f.fileno()) - # Use browser cache if possible - if ("If-Modified-Since" in self.headers - and "If-None-Match" not in self.headers): - # compare If-Modified-Since and time of last file modification - try: - ims = email.utils.parsedate_to_datetime( - self.headers["If-Modified-Since"]) - except (TypeError, IndexError, OverflowError, ValueError): - # ignore ill-formed values - pass - else: - if ims.tzinfo is None: - # obsolete format with no timezone, cf. - # https://tools.ietf.org/html/rfc7231#section-7.1.1.1 - ims = ims.replace(tzinfo=datetime.timezone.utc) - if ims.tzinfo is datetime.timezone.utc: - # compare to UTC datetime of last modification - last_modif = datetime.datetime.fromtimestamp( - fs.st_mtime, datetime.timezone.utc) - # remove microseconds, like in If-Modified-Since - last_modif = last_modif.replace(microsecond=0) - - if last_modif <= ims: - self.send_response(HTTPStatus.NOT_MODIFIED) - self.end_headers() - f.close() - return None - - self.send_response(HTTPStatus.OK) - self.send_header("Content-type", ctype) - self.send_header("Content-Length", str(fs[6])) - self.send_header("Last-Modified", - self.date_time_string(fs.st_mtime)) - self.end_headers() - return f - except: - f.close() - raise - - def list_directory(self, path): - """Helper to produce a directory listing (absent index.html). - - Return value is either a file object, or None (indicating an - error). In either case, the headers are sent, making the - interface the same as for send_head(). - - """ - try: - list = os.listdir(path) - except OSError: - self.send_error( - HTTPStatus.NOT_FOUND, - "No permission to list directory") - return None - list.sort(key=lambda a: a.lower()) - r = [] - displaypath = self.path - displaypath = displaypath.split('#', 1)[0] - displaypath = displaypath.split('?', 1)[0] - try: - displaypath = urllib.parse.unquote(displaypath, - errors='surrogatepass') - except UnicodeDecodeError: - displaypath = urllib.parse.unquote(displaypath) - displaypath = html.escape(displaypath, quote=False) - enc = sys.getfilesystemencoding() - title = f'Directory listing for {displaypath}' - r.append('<!DOCTYPE HTML>') - r.append('<html lang="en">') - r.append('<head>') - r.append(f'<meta charset="{enc}">') - r.append('<style type="text/css">\n:root {\ncolor-scheme: light dark;\n}\n</style>') - r.append(f'<title>{title}</title>\n</head>') - r.append(f'<body>\n<h1>{title}</h1>') - r.append('<hr>\n<ul>') - for name in list: - fullname = os.path.join(path, name) - displayname = linkname = name - # Append / for directories or @ for symbolic links - if os.path.isdir(fullname): - displayname = name + "/" - linkname = name + "/" - if os.path.islink(fullname): - displayname = name + "@" - # Note: a link to a directory displays with @ and links with / - r.append('<li><a href="%s">%s</a></li>' - % (urllib.parse.quote(linkname, - errors='surrogatepass'), - html.escape(displayname, quote=False))) - r.append('</ul>\n<hr>\n</body>\n</html>\n') - encoded = '\n'.join(r).encode(enc, 'surrogateescape') - f = io.BytesIO() - f.write(encoded) - f.seek(0) - self.send_response(HTTPStatus.OK) - self.send_header("Content-type", "text/html; charset=%s" % enc) - self.send_header("Content-Length", str(len(encoded))) - self.end_headers() - return f - - def translate_path(self, path): - """Translate a /-separated PATH to the local filename syntax. - - Components that mean special things to the local file system - (e.g. drive or directory names) are ignored. (XXX They should - probably be diagnosed.) - - """ - # abandon query parameters - path = path.split('#', 1)[0] - path = path.split('?', 1)[0] - # Don't forget explicit trailing slash when normalizing. Issue17324 - try: - path = urllib.parse.unquote(path, errors='surrogatepass') - except UnicodeDecodeError: - path = urllib.parse.unquote(path) - trailing_slash = path.endswith('/') - path = posixpath.normpath(path) - words = path.split('/') - words = filter(None, words) - path = self.directory - for word in words: - if os.path.dirname(word) or word in (os.curdir, os.pardir): - # Ignore components that are not a simple file/directory name - continue - path = os.path.join(path, word) - if trailing_slash: - path += '/' - return path - - def copyfile(self, source, outputfile): - """Copy all data between two file objects. - - The SOURCE argument is a file object open for reading - (or anything with a read() method) and the DESTINATION - argument is a file object open for writing (or - anything with a write() method). - - The only reason for overriding this would be to change - the block size or perhaps to replace newlines by CRLF - -- note however that this the default server uses this - to copy binary data as well. - - """ - shutil.copyfileobj(source, outputfile) - - def guess_type(self, path): - """Guess the type of a file. - - Argument is a PATH (a filename). - - Return value is a string of the form type/subtype, - usable for a MIME Content-type header. - - The default implementation looks the file's extension - up in the table self.extensions_map, using application/octet-stream - as a default; however it would be permissible (if - slow) to look inside the data to make a better guess. - - """ - base, ext = posixpath.splitext(path) - if ext in self.extensions_map: - return self.extensions_map[ext] - ext = ext.lower() - if ext in self.extensions_map: - return self.extensions_map[ext] - guess, _ = mimetypes.guess_file_type(path) - if guess: - return guess - return 'application/octet-stream' - - -# Utilities for CGIHTTPRequestHandler - -def _url_collapse_path(path): - """ - Given a URL path, remove extra '/'s and '.' path elements and collapse - any '..' references and returns a collapsed path. - - Implements something akin to RFC-2396 5.2 step 6 to parse relative paths. - The utility of this function is limited to is_cgi method and helps - preventing some security attacks. - - Returns: The reconstituted URL, which will always start with a '/'. - - Raises: IndexError if too many '..' occur within the path. - - """ - # Query component should not be involved. - path, _, query = path.partition('?') - path = urllib.parse.unquote(path) - - # Similar to os.path.split(os.path.normpath(path)) but specific to URL - # path semantics rather than local operating system semantics. - path_parts = path.split('/') - head_parts = [] - for part in path_parts[:-1]: - if part == '..': - head_parts.pop() # IndexError if more '..' than prior parts - elif part and part != '.': - head_parts.append( part ) - if path_parts: - tail_part = path_parts.pop() - if tail_part: - if tail_part == '..': - head_parts.pop() - tail_part = '' - elif tail_part == '.': - tail_part = '' - else: - tail_part = '' - - if query: - tail_part = '?'.join((tail_part, query)) - - splitpath = ('/' + '/'.join(head_parts), tail_part) - collapsed_path = "/".join(splitpath) - - return collapsed_path - - - -nobody = None - -def nobody_uid(): - """Internal routine to get nobody's uid""" - global nobody - if nobody: - return nobody - try: - import pwd - except ImportError: - return -1 - try: - nobody = pwd.getpwnam('nobody')[2] - except KeyError: - nobody = 1 + max(x[2] for x in pwd.getpwall()) - return nobody - - -def executable(path): - """Test for executable file.""" - return os.access(path, os.X_OK) - - -class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): - - """Complete HTTP server with GET, HEAD and POST commands. - - GET and HEAD also support running CGI scripts. - - The POST command is *only* implemented for CGI scripts. - - """ - - def __init__(self, *args, **kwargs): - import warnings - warnings._deprecated("http.server.CGIHTTPRequestHandler", - remove=(3, 15)) - super().__init__(*args, **kwargs) - - # Determine platform specifics - have_fork = hasattr(os, 'fork') - - # Make rfile unbuffered -- we need to read one line and then pass - # the rest to a subprocess, so we can't use buffered input. - rbufsize = 0 - - def do_POST(self): - """Serve a POST request. - - This is only implemented for CGI scripts. - - """ - - if self.is_cgi(): - self.run_cgi() - else: - self.send_error( - HTTPStatus.NOT_IMPLEMENTED, - "Can only POST to CGI scripts") - - def send_head(self): - """Version of send_head that support CGI scripts""" - if self.is_cgi(): - return self.run_cgi() - else: - return SimpleHTTPRequestHandler.send_head(self) - - def is_cgi(self): - """Test whether self.path corresponds to a CGI script. - - Returns True and updates the cgi_info attribute to the tuple - (dir, rest) if self.path requires running a CGI script. - Returns False otherwise. - - If any exception is raised, the caller should assume that - self.path was rejected as invalid and act accordingly. - - The default implementation tests whether the normalized url - path begins with one of the strings in self.cgi_directories - (and the next character is a '/' or the end of the string). - - """ - collapsed_path = _url_collapse_path(self.path) - dir_sep = collapsed_path.find('/', 1) - while dir_sep > 0 and not collapsed_path[:dir_sep] in self.cgi_directories: - dir_sep = collapsed_path.find('/', dir_sep+1) - if dir_sep > 0: - head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:] - self.cgi_info = head, tail - return True - return False - - - cgi_directories = ['/cgi-bin', '/htbin'] - - def is_executable(self, path): - """Test whether argument path is an executable file.""" - return executable(path) - - def is_python(self, path): - """Test whether argument path is a Python script.""" - head, tail = os.path.splitext(path) - return tail.lower() in (".py", ".pyw") - - def run_cgi(self): - """Execute a CGI script.""" - dir, rest = self.cgi_info - path = dir + '/' + rest - i = path.find('/', len(dir)+1) - while i >= 0: - nextdir = path[:i] - nextrest = path[i+1:] - - scriptdir = self.translate_path(nextdir) - if os.path.isdir(scriptdir): - dir, rest = nextdir, nextrest - i = path.find('/', len(dir)+1) - else: - break - - # find an explicit query string, if present. - rest, _, query = rest.partition('?') - - # dissect the part after the directory name into a script name & - # a possible additional path, to be stored in PATH_INFO. - i = rest.find('/') - if i >= 0: - script, rest = rest[:i], rest[i:] - else: - script, rest = rest, '' - - scriptname = dir + '/' + script - scriptfile = self.translate_path(scriptname) - if not os.path.exists(scriptfile): - self.send_error( - HTTPStatus.NOT_FOUND, - "No such CGI script (%r)" % scriptname) - return - if not os.path.isfile(scriptfile): - self.send_error( - HTTPStatus.FORBIDDEN, - "CGI script is not a plain file (%r)" % scriptname) - return - ispy = self.is_python(scriptname) - if self.have_fork or not ispy: - if not self.is_executable(scriptfile): - self.send_error( - HTTPStatus.FORBIDDEN, - "CGI script is not executable (%r)" % scriptname) - return - - # Reference: https://www6.uniovi.es/~antonio/ncsa_httpd/cgi/env.html - # XXX Much of the following could be prepared ahead of time! - env = copy.deepcopy(os.environ) - env['SERVER_SOFTWARE'] = self.version_string() - env['SERVER_NAME'] = self.server.server_name - env['GATEWAY_INTERFACE'] = 'CGI/1.1' - env['SERVER_PROTOCOL'] = self.protocol_version - env['SERVER_PORT'] = str(self.server.server_port) - env['REQUEST_METHOD'] = self.command - uqrest = urllib.parse.unquote(rest) - env['PATH_INFO'] = uqrest - env['PATH_TRANSLATED'] = self.translate_path(uqrest) - env['SCRIPT_NAME'] = scriptname - env['QUERY_STRING'] = query - env['REMOTE_ADDR'] = self.client_address[0] - authorization = self.headers.get("authorization") - if authorization: - authorization = authorization.split() - if len(authorization) == 2: - import base64, binascii - env['AUTH_TYPE'] = authorization[0] - if authorization[0].lower() == "basic": - try: - authorization = authorization[1].encode('ascii') - authorization = base64.decodebytes(authorization).\ - decode('ascii') - except (binascii.Error, UnicodeError): - pass - else: - authorization = authorization.split(':') - if len(authorization) == 2: - env['REMOTE_USER'] = authorization[0] - # XXX REMOTE_IDENT - if self.headers.get('content-type') is None: - env['CONTENT_TYPE'] = self.headers.get_content_type() - else: - env['CONTENT_TYPE'] = self.headers['content-type'] - length = self.headers.get('content-length') - if length: - env['CONTENT_LENGTH'] = length - referer = self.headers.get('referer') - if referer: - env['HTTP_REFERER'] = referer - accept = self.headers.get_all('accept', ()) - env['HTTP_ACCEPT'] = ','.join(accept) - ua = self.headers.get('user-agent') - if ua: - env['HTTP_USER_AGENT'] = ua - co = filter(None, self.headers.get_all('cookie', [])) - cookie_str = ', '.join(co) - if cookie_str: - env['HTTP_COOKIE'] = cookie_str - # XXX Other HTTP_* headers - # Since we're setting the env in the parent, provide empty - # values to override previously set values - for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH', - 'HTTP_USER_AGENT', 'HTTP_COOKIE', 'HTTP_REFERER'): - env.setdefault(k, "") - - self.send_response(HTTPStatus.OK, "Script output follows") - self.flush_headers() - - decoded_query = query.replace('+', ' ') - - if self.have_fork: - # Unix -- fork as we should - args = [script] - if '=' not in decoded_query: - args.append(decoded_query) - nobody = nobody_uid() - self.wfile.flush() # Always flush before forking - pid = os.fork() - if pid != 0: - # Parent - pid, sts = os.waitpid(pid, 0) - # throw away additional data [see bug #427345] - while select.select([self.rfile], [], [], 0)[0]: - if not self.rfile.read(1): - break - exitcode = os.waitstatus_to_exitcode(sts) - if exitcode: - self.log_error(f"CGI script exit code {exitcode}") - return - # Child - try: - try: - os.setuid(nobody) - except OSError: - pass - os.dup2(self.rfile.fileno(), 0) - os.dup2(self.wfile.fileno(), 1) - os.execve(scriptfile, args, env) - except: - self.server.handle_error(self.request, self.client_address) - os._exit(127) - - else: - # Non-Unix -- use subprocess - import subprocess - cmdline = [scriptfile] - if self.is_python(scriptfile): - interp = sys.executable - if interp.lower().endswith("w.exe"): - # On Windows, use python.exe, not pythonw.exe - interp = interp[:-5] + interp[-4:] - cmdline = [interp, '-u'] + cmdline - if '=' not in query: - cmdline.append(query) - self.log_message("command: %s", subprocess.list2cmdline(cmdline)) - try: - nbytes = int(length) - except (TypeError, ValueError): - nbytes = 0 - p = subprocess.Popen(cmdline, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env = env - ) - if self.command.lower() == "post" and nbytes > 0: - cursize = 0 - data = self.rfile.read(min(nbytes, _MIN_READ_BUF_SIZE)) - while len(data) < nbytes and len(data) != cursize: - cursize = len(data) - # This is a geometric increase in read size (never more - # than doubling out the current length of data per loop - # iteration). - delta = min(cursize, nbytes - cursize) - try: - data += self.rfile.read(delta) - except TimeoutError: - break - else: - data = None - # throw away additional data [see bug #427345] - while select.select([self.rfile._sock], [], [], 0)[0]: - if not self.rfile._sock.recv(1): - break - stdout, stderr = p.communicate(data) - self.wfile.write(stdout) - if stderr: - self.log_error('%s', stderr) - p.stderr.close() - p.stdout.close() - status = p.returncode - if status: - self.log_error("CGI script exit status %#x", status) - else: - self.log_message("CGI script exited OK") - - -def _get_best_family(*address): - infos = socket.getaddrinfo( - *address, - type=socket.SOCK_STREAM, - flags=socket.AI_PASSIVE, - ) - family, type, proto, canonname, sockaddr = next(iter(infos)) - return family, sockaddr - - -def test(HandlerClass=BaseHTTPRequestHandler, - ServerClass=ThreadingHTTPServer, - protocol="HTTP/1.0", port=8000, bind=None, - tls_cert=None, tls_key=None, tls_password=None): - """Test the HTTP request handler class. - - This runs an HTTP server on port 8000 (or the port argument). - - """ - ServerClass.address_family, addr = _get_best_family(bind, port) - HandlerClass.protocol_version = protocol - - if tls_cert: - server = ServerClass(addr, HandlerClass, certfile=tls_cert, - keyfile=tls_key, password=tls_password) - else: - server = ServerClass(addr, HandlerClass) - - with server as httpd: - host, port = httpd.socket.getsockname()[:2] - url_host = f'[{host}]' if ':' in host else host - protocol = 'HTTPS' if tls_cert else 'HTTP' - print( - f"Serving {protocol} on {host} port {port} " - f"({protocol.lower()}://{url_host}:{port}/) ..." - ) - try: - httpd.serve_forever() - except KeyboardInterrupt: - print("\nKeyboard interrupt received, exiting.") - sys.exit(0) - -if __name__ == '__main__': - import argparse - import contextlib - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('--cgi', action='store_true', - help='run as CGI server') - parser.add_argument('-b', '--bind', metavar='ADDRESS', - help='bind to this address ' - '(default: all interfaces)') - parser.add_argument('-d', '--directory', default=os.getcwd(), - help='serve this directory ' - '(default: current directory)') - parser.add_argument('-p', '--protocol', metavar='VERSION', - default='HTTP/1.0', - help='conform to this HTTP version ' - '(default: %(default)s)') - parser.add_argument('--tls-cert', metavar='PATH', - help='path to the TLS certificate chain file') - parser.add_argument('--tls-key', metavar='PATH', - help='path to the TLS key file') - parser.add_argument('--tls-password-file', metavar='PATH', - help='path to the password file for the TLS key') - parser.add_argument('port', default=8000, type=int, nargs='?', - help='bind to this port ' - '(default: %(default)s)') - args = parser.parse_args() - - if not args.tls_cert and args.tls_key: - parser.error("--tls-key requires --tls-cert to be set") - - tls_key_password = None - if args.tls_password_file: - if not args.tls_cert: - parser.error("--tls-password-file requires --tls-cert to be set") - - try: - with open(args.tls_password_file, "r", encoding="utf-8") as f: - tls_key_password = f.read().strip() - except OSError as e: - parser.error(f"Failed to read TLS password file: {e}") - - if args.cgi: - handler_class = CGIHTTPRequestHandler - else: - handler_class = SimpleHTTPRequestHandler - - # ensure dual-stack is not disabled; ref #38907 - class DualStackServerMixin: - - def server_bind(self): - # suppress exception when protocol is IPv4 - with contextlib.suppress(Exception): - self.socket.setsockopt( - socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) - return super().server_bind() - - def finish_request(self, request, client_address): - self.RequestHandlerClass(request, client_address, self, - directory=args.directory) - - class HTTPDualStackServer(DualStackServerMixin, ThreadingHTTPServer): - pass - class HTTPSDualStackServer(DualStackServerMixin, ThreadingHTTPSServer): - pass - - ServerClass = HTTPSDualStackServer if args.tls_cert else HTTPDualStackServer - - test( - HandlerClass=handler_class, - ServerClass=ServerClass, - port=args.port, - bind=args.bind, - protocol=args.protocol, - tls_cert=args.tls_cert, - tls_key=args.tls_key, - tls_password=tls_key_password, - ) diff --git a/Python314_4_x86_Template/Lib/imaplib.py b/Python314_4_x86_Template/Lib/imaplib.py deleted file mode 100644 index cbe129b3e..000000000 --- a/Python314_4_x86_Template/Lib/imaplib.py +++ /dev/null @@ -1,1967 +0,0 @@ -"""IMAP4 client. - -Based on RFC 2060. - -Public class: IMAP4 -Public variable: Debug -Public functions: Internaldate2tuple - Int2AP - ParseFlags - Time2Internaldate -""" - -# Author: Piers Lauder <piers@cs.su.oz.au> December 1997. -# -# Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998. -# String method conversion by ESR, February 2001. -# GET/SETACL contributed by Anthony Baxter <anthony@interlink.com.au> April 2001. -# IMAP4_SSL contributed by Tino Lange <Tino.Lange@isg.de> March 2002. -# GET/SETQUOTA contributed by Andreas Zeidler <az@kreativkombinat.de> June 2002. -# PROXYAUTH contributed by Rick Holbert <holbert.13@osu.edu> November 2002. -# GET/SETANNOTATION contributed by Tomas Lindroos <skitta@abo.fi> June 2005. -# IDLE contributed by Forest <forestix@nom.one> August 2024. - -__version__ = "2.60" - -import binascii, errno, random, re, socket, subprocess, sys, time, calendar -from datetime import datetime, timezone, timedelta -from io import DEFAULT_BUFFER_SIZE - -try: - import ssl - HAVE_SSL = True -except ImportError: - HAVE_SSL = False - -__all__ = ["IMAP4", "IMAP4_stream", "Internaldate2tuple", - "Int2AP", "ParseFlags", "Time2Internaldate"] - -# Globals - -CRLF = b'\r\n' -Debug = 0 -IMAP4_PORT = 143 -IMAP4_SSL_PORT = 993 -AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first - -# Maximal line length when calling readline(). This is to prevent -# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1) -# don't specify a line length. RFC 2683 suggests limiting client -# command lines to 1000 octets and that servers should be prepared -# to accept command lines up to 8000 octets, so we used to use 10K here. -# In the modern world (eg: gmail) the response to, for example, a -# search command can be quite large, so we now use 1M. -_MAXLINE = 1000000 - - -# Commands - -Commands = { - # name valid states - 'APPEND': ('AUTH', 'SELECTED'), - 'AUTHENTICATE': ('NONAUTH',), - 'CAPABILITY': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), - 'CHECK': ('SELECTED',), - 'CLOSE': ('SELECTED',), - 'COPY': ('SELECTED',), - 'CREATE': ('AUTH', 'SELECTED'), - 'DELETE': ('AUTH', 'SELECTED'), - 'DELETEACL': ('AUTH', 'SELECTED'), - 'ENABLE': ('AUTH', ), - 'EXAMINE': ('AUTH', 'SELECTED'), - 'EXPUNGE': ('SELECTED',), - 'FETCH': ('SELECTED',), - 'GETACL': ('AUTH', 'SELECTED'), - 'GETANNOTATION':('AUTH', 'SELECTED'), - 'GETQUOTA': ('AUTH', 'SELECTED'), - 'GETQUOTAROOT': ('AUTH', 'SELECTED'), - 'IDLE': ('AUTH', 'SELECTED'), - 'MYRIGHTS': ('AUTH', 'SELECTED'), - 'LIST': ('AUTH', 'SELECTED'), - 'LOGIN': ('NONAUTH',), - 'LOGOUT': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), - 'LSUB': ('AUTH', 'SELECTED'), - 'MOVE': ('SELECTED',), - 'NAMESPACE': ('AUTH', 'SELECTED'), - 'NOOP': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), - 'PARTIAL': ('SELECTED',), # NB: obsolete - 'PROXYAUTH': ('AUTH',), - 'RENAME': ('AUTH', 'SELECTED'), - 'SEARCH': ('SELECTED',), - 'SELECT': ('AUTH', 'SELECTED'), - 'SETACL': ('AUTH', 'SELECTED'), - 'SETANNOTATION':('AUTH', 'SELECTED'), - 'SETQUOTA': ('AUTH', 'SELECTED'), - 'SORT': ('SELECTED',), - 'STARTTLS': ('NONAUTH',), - 'STATUS': ('AUTH', 'SELECTED'), - 'STORE': ('SELECTED',), - 'SUBSCRIBE': ('AUTH', 'SELECTED'), - 'THREAD': ('SELECTED',), - 'UID': ('SELECTED',), - 'UNSUBSCRIBE': ('AUTH', 'SELECTED'), - 'UNSELECT': ('SELECTED',), - } - -# Patterns to match server responses - -Continuation = re.compile(br'\+( (?P<data>.*))?') -Flags = re.compile(br'.*FLAGS \((?P<flags>[^\)]*)\)') -InternalDate = re.compile(br'.*INTERNALDATE "' - br'(?P<day>[ 0123][0-9])-(?P<mon>[A-Z][a-z][a-z])-(?P<year>[0-9][0-9][0-9][0-9])' - br' (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9])' - br' (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])' - br'"') -# Literal is no longer used; kept for backward compatibility. -Literal = re.compile(br'.*{(?P<size>\d+)}$', re.ASCII) -MapCRLF = re.compile(br'\r\n|\r|\n') -# We no longer exclude the ']' character from the data portion of the response -# code, even though it violates the RFC. Popular IMAP servers such as Gmail -# allow flags with ']', and there are programs (including imaplib!) that can -# produce them. The problem with this is if the 'text' portion of the response -# includes a ']' we'll parse the response wrong (which is the point of the RFC -# restriction). However, that seems less likely to be a problem in practice -# than being unable to correctly parse flags that include ']' chars, which -# was reported as a real-world problem in issue #21815. -Response_code = re.compile(br'\[(?P<type>[A-Z-]+)( (?P<data>.*))?\]') -Untagged_response = re.compile(br'\* (?P<type>[A-Z-]+)( (?P<data>.*))?') -# Untagged_status is no longer used; kept for backward compatibility -Untagged_status = re.compile( - br'\* (?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?', re.ASCII) -# We compile these in _mode_xxx. -_Literal = br'.*{(?P<size>\d+)}$' -_Untagged_status = br'\* (?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?' - - - -class IMAP4: - - r"""IMAP4 client class. - - Instantiate with: IMAP4([host[, port[, timeout=None]]]) - - host - host's name (default: localhost); - port - port number (default: standard IMAP4 port). - timeout - socket timeout (default: None) - If timeout is not given or is None, - the global default socket timeout is used - - All IMAP4rev1 commands are supported by methods of the same - name (in lowercase). - - All arguments to commands are converted to strings, except for - AUTHENTICATE, and the last argument to APPEND which is passed as - an IMAP4 literal. If necessary (the string contains any - non-printing characters or white-space and isn't enclosed with - either parentheses or double quotes) each string is quoted. - However, the 'password' argument to the LOGIN command is always - quoted. If you want to avoid having an argument string quoted - (eg: the 'flags' argument to STORE) then enclose the string in - parentheses (eg: "(\Deleted)"). - - Each command returns a tuple: (type, [data, ...]) where 'type' - is usually 'OK' or 'NO', and 'data' is either the text from the - tagged response, or untagged results from command. Each 'data' - is either a string, or a tuple. If a tuple, then the first part - is the header of the response, and the second part contains - the data (ie: 'literal' value). - - Errors raise the exception class <instance>.error("<reason>"). - IMAP4 server errors raise <instance>.abort("<reason>"), - which is a sub-class of 'error'. Mailbox status changes - from READ-WRITE to READ-ONLY raise the exception class - <instance>.readonly("<reason>"), which is a sub-class of 'abort'. - - "error" exceptions imply a program error. - "abort" exceptions imply the connection should be reset, and - the command re-tried. - "readonly" exceptions imply the command should be re-tried. - - Note: to use this module, you must read the RFCs pertaining to the - IMAP4 protocol, as the semantics of the arguments to each IMAP4 - command are left to the invoker, not to mention the results. Also, - most IMAP servers implement a sub-set of the commands available here. - """ - - class error(Exception): pass # Logical errors - debug required - class abort(error): pass # Service errors - close and retry - class readonly(abort): pass # Mailbox status changed to READ-ONLY - class _responsetimeout(TimeoutError): pass # No response during IDLE - - def __init__(self, host='', port=IMAP4_PORT, timeout=None): - self.debug = Debug - self.state = 'LOGOUT' - self.literal = None # A literal argument to a command - self.tagged_commands = {} # Tagged commands awaiting response - self.untagged_responses = {} # {typ: [data, ...], ...} - self.continuation_response = '' # Last continuation response - self._idle_responses = [] # Response queue for idle iteration - self._idle_capture = False # Whether to queue responses for idle - self.is_readonly = False # READ-ONLY desired state - self.tagnum = 0 - self._tls_established = False - self._mode_ascii() - self._readbuf = [] - - # Open socket to server. - - self.open(host, port, timeout) - - try: - self._connect() - except Exception: - try: - self.shutdown() - except OSError: - pass - raise - - def _mode_ascii(self): - self.utf8_enabled = False - self._encoding = 'ascii' - self.Literal = re.compile(_Literal, re.ASCII) - self.Untagged_status = re.compile(_Untagged_status, re.ASCII) - - - def _mode_utf8(self): - self.utf8_enabled = True - self._encoding = 'utf-8' - self.Literal = re.compile(_Literal) - self.Untagged_status = re.compile(_Untagged_status) - - - def _connect(self): - # Create unique tag for this session, - # and compile tagged response matcher. - - self.tagpre = Int2AP(random.randint(4096, 65535)) - self.tagre = re.compile(br'(?P<tag>' - + self.tagpre - + br'\d+) (?P<type>[A-Z]+) (?P<data>.*)', re.ASCII) - - # Get server welcome message, - # request and store CAPABILITY response. - - if __debug__: - self._cmd_log_len = 10 - self._cmd_log_idx = 0 - self._cmd_log = {} # Last '_cmd_log_len' interactions - if self.debug >= 1: - self._mesg('imaplib version %s' % __version__) - self._mesg('new IMAP4 connection, tag=%s' % self.tagpre) - - self.welcome = self._get_response() - if 'PREAUTH' in self.untagged_responses: - self.state = 'AUTH' - elif 'OK' in self.untagged_responses: - self.state = 'NONAUTH' - else: - raise self.error(self.welcome) - - self._get_capabilities() - if __debug__: - if self.debug >= 3: - self._mesg('CAPABILITIES: %r' % (self.capabilities,)) - - for version in AllowedVersions: - if not version in self.capabilities: - continue - self.PROTOCOL_VERSION = version - return - - raise self.error('server not IMAP4 compliant') - - - def __getattr__(self, attr): - # Allow UPPERCASE variants of IMAP4 command methods. - if attr in Commands: - return getattr(self, attr.lower()) - raise AttributeError("Unknown IMAP4 command: '%s'" % attr) - - def __enter__(self): - return self - - def __exit__(self, *args): - if self.state == "LOGOUT": - return - - try: - self.logout() - except OSError: - pass - - - # Overridable methods - - - def _create_socket(self, timeout): - # Default value of IMAP4.host is '', but socket.getaddrinfo() - # (which is used by socket.create_connection()) expects None - # as a default value for host. - if timeout is not None and not timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') - host = None if not self.host else self.host - sys.audit("imaplib.open", self, self.host, self.port) - address = (host, self.port) - if timeout is not None: - return socket.create_connection(address, timeout) - return socket.create_connection(address) - - def open(self, host='', port=IMAP4_PORT, timeout=None): - """Setup connection to remote server on "host:port" - (default: localhost:standard IMAP4 port). - This connection will be used by the routines: - read, readline, send, shutdown. - """ - self.host = host - self.port = port - self.sock = self._create_socket(timeout) - self._file = self.sock.makefile('rb') - - - @property - def file(self): - # The old 'file' attribute is no longer used now that we do our own - # read() and readline() buffering, with which it conflicts. - # As an undocumented interface, it should never have been accessed by - # external code, and therefore does not warrant deprecation. - # Nevertheless, we provide this property for now, to avoid suddenly - # breaking any code in the wild that might have been using it in a - # harmless way. - import warnings - warnings.warn( - 'IMAP4.file is unsupported, can cause errors, and may be removed.', - RuntimeWarning, - stacklevel=2) - return self._file - - - def read(self, size): - """Read 'size' bytes from remote.""" - # We need buffered read() to continue working after socket timeouts, - # since we use them during IDLE. Unfortunately, the standard library's - # SocketIO implementation makes this impossible, by setting a permanent - # error condition instead of letting the caller decide how to handle a - # timeout. We therefore implement our own buffered read(). - # https://github.com/python/cpython/issues/51571 - # - # Reading in chunks instead of delegating to a single - # BufferedReader.read() call also means we avoid its preallocation - # of an unreasonably large memory block if a malicious server claims - # it will send a huge literal without actually sending one. - # https://github.com/python/cpython/issues/119511 - - parts = [] - - while size > 0: - - if len(parts) < len(self._readbuf): - buf = self._readbuf[len(parts)] - else: - try: - buf = self.sock.recv(DEFAULT_BUFFER_SIZE) - except ConnectionError: - break - if not buf: - break - self._readbuf.append(buf) - - if len(buf) >= size: - parts.append(buf[:size]) - self._readbuf = [buf[size:]] + self._readbuf[len(parts):] - break - parts.append(buf) - size -= len(buf) - - return b''.join(parts) - - - def readline(self): - """Read line from remote.""" - # The comment in read() explains why we implement our own readline(). - - LF = b'\n' - parts = [] - length = 0 - - while length < _MAXLINE: - - if len(parts) < len(self._readbuf): - buf = self._readbuf[len(parts)] - else: - try: - buf = self.sock.recv(DEFAULT_BUFFER_SIZE) - except ConnectionError: - break - if not buf: - break - self._readbuf.append(buf) - - pos = buf.find(LF) - if pos != -1: - pos += 1 - parts.append(buf[:pos]) - self._readbuf = [buf[pos:]] + self._readbuf[len(parts):] - break - parts.append(buf) - length += len(buf) - - line = b''.join(parts) - if len(line) > _MAXLINE: - raise self.error("got more than %d bytes" % _MAXLINE) - return line - - - def send(self, data): - """Send data to remote.""" - sys.audit("imaplib.send", self, data) - self.sock.sendall(data) - - - def shutdown(self): - """Close I/O established in "open".""" - self._file.close() - try: - self.sock.shutdown(socket.SHUT_RDWR) - except OSError as exc: - # The server might already have closed the connection. - # On Windows, this may result in WSAEINVAL (error 10022): - # An invalid operation was attempted. - if (exc.errno != errno.ENOTCONN - and getattr(exc, 'winerror', 0) != 10022): - raise - finally: - self.sock.close() - - - def socket(self): - """Return socket instance used to connect to IMAP4 server. - - socket = <instance>.socket() - """ - return self.sock - - - - # Utility methods - - - def recent(self): - """Return most recent 'RECENT' responses if any exist, - else prompt server for an update using the 'NOOP' command. - - (typ, [data]) = <instance>.recent() - - 'data' is None if no new messages, - else list of RECENT responses, most recent last. - """ - name = 'RECENT' - typ, dat = self._untagged_response('OK', [None], name) - if dat[-1]: - return typ, dat - typ, dat = self.noop() # Prod server for response - return self._untagged_response(typ, dat, name) - - - def response(self, code): - """Return data for response 'code' if received, or None. - - Old value for response 'code' is cleared. - - (code, [data]) = <instance>.response(code) - """ - return self._untagged_response(code, [None], code.upper()) - - - - # IMAP4 commands - - - def append(self, mailbox, flags, date_time, message): - """Append message to named mailbox. - - (typ, [data]) = <instance>.append(mailbox, flags, date_time, message) - - All args except 'message' can be None. - """ - name = 'APPEND' - if not mailbox: - mailbox = 'INBOX' - if flags: - if (flags[0],flags[-1]) != ('(',')'): - flags = '(%s)' % flags - else: - flags = None - if date_time: - date_time = Time2Internaldate(date_time) - else: - date_time = None - literal = MapCRLF.sub(CRLF, message) - self.literal = literal - return self._simple_command(name, mailbox, flags, date_time) - - - def authenticate(self, mechanism, authobject): - """Authenticate command - requires response processing. - - 'mechanism' specifies which authentication mechanism is to - be used - it must appear in <instance>.capabilities in the - form AUTH=<mechanism>. - - 'authobject' must be a callable object: - - data = authobject(response) - - It will be called to process server continuation responses; the - response argument it is passed will be a bytes. It should return bytes - data that will be base64 encoded and sent to the server. It should - return None if the client abort response '*' should be sent instead. - """ - mech = mechanism.upper() - # XXX: shouldn't this code be removed, not commented out? - #cap = 'AUTH=%s' % mech - #if not cap in self.capabilities: # Let the server decide! - # raise self.error("Server doesn't allow %s authentication." % mech) - self.literal = _Authenticator(authobject).process - typ, dat = self._simple_command('AUTHENTICATE', mech) - if typ != 'OK': - raise self.error(dat[-1].decode('utf-8', 'replace')) - self.state = 'AUTH' - return typ, dat - - - def capability(self): - """(typ, [data]) = <instance>.capability() - Fetch capabilities list from server.""" - - name = 'CAPABILITY' - typ, dat = self._simple_command(name) - return self._untagged_response(typ, dat, name) - - - def check(self): - """Checkpoint mailbox on server. - - (typ, [data]) = <instance>.check() - """ - return self._simple_command('CHECK') - - - def close(self): - """Close currently selected mailbox. - - Deleted messages are removed from writable mailbox. - This is the recommended command before 'LOGOUT'. - - (typ, [data]) = <instance>.close() - """ - try: - typ, dat = self._simple_command('CLOSE') - finally: - self.state = 'AUTH' - return typ, dat - - - def copy(self, message_set, new_mailbox): - """Copy 'message_set' messages onto end of 'new_mailbox'. - - (typ, [data]) = <instance>.copy(message_set, new_mailbox) - """ - return self._simple_command('COPY', message_set, new_mailbox) - - - def create(self, mailbox): - """Create new mailbox. - - (typ, [data]) = <instance>.create(mailbox) - """ - return self._simple_command('CREATE', mailbox) - - - def delete(self, mailbox): - """Delete old mailbox. - - (typ, [data]) = <instance>.delete(mailbox) - """ - return self._simple_command('DELETE', mailbox) - - def deleteacl(self, mailbox, who): - """Delete the ACLs (remove any rights) set for who on mailbox. - - (typ, [data]) = <instance>.deleteacl(mailbox, who) - """ - return self._simple_command('DELETEACL', mailbox, who) - - def enable(self, capability): - """Send an RFC5161 enable string to the server. - - (typ, [data]) = <instance>.enable(capability) - """ - if 'ENABLE' not in self.capabilities: - raise IMAP4.error("Server does not support ENABLE") - typ, data = self._simple_command('ENABLE', capability) - if typ == 'OK' and 'UTF8=ACCEPT' in capability.upper(): - self._mode_utf8() - return typ, data - - def expunge(self): - """Permanently remove deleted items from selected mailbox. - - Generates 'EXPUNGE' response for each deleted message. - - (typ, [data]) = <instance>.expunge() - - 'data' is list of 'EXPUNGE'd message numbers in order received. - """ - name = 'EXPUNGE' - typ, dat = self._simple_command(name) - return self._untagged_response(typ, dat, name) - - - def fetch(self, message_set, message_parts): - """Fetch (parts of) messages. - - (typ, [data, ...]) = <instance>.fetch(message_set, message_parts) - - 'message_parts' should be a string of selected parts - enclosed in parentheses, eg: "(UID BODY[TEXT])". - - 'data' are tuples of message part envelope and data. - """ - name = 'FETCH' - typ, dat = self._simple_command(name, message_set, message_parts) - return self._untagged_response(typ, dat, name) - - - def getacl(self, mailbox): - """Get the ACLs for a mailbox. - - (typ, [data]) = <instance>.getacl(mailbox) - """ - typ, dat = self._simple_command('GETACL', mailbox) - return self._untagged_response(typ, dat, 'ACL') - - - def getannotation(self, mailbox, entry, attribute): - """(typ, [data]) = <instance>.getannotation(mailbox, entry, attribute) - Retrieve ANNOTATIONs.""" - - typ, dat = self._simple_command('GETANNOTATION', mailbox, entry, attribute) - return self._untagged_response(typ, dat, 'ANNOTATION') - - - def getquota(self, root): - """Get the quota root's resource usage and limits. - - Part of the IMAP4 QUOTA extension defined in rfc2087. - - (typ, [data]) = <instance>.getquota(root) - """ - typ, dat = self._simple_command('GETQUOTA', root) - return self._untagged_response(typ, dat, 'QUOTA') - - - def getquotaroot(self, mailbox): - """Get the list of quota roots for the named mailbox. - - (typ, [[QUOTAROOT responses...], [QUOTA responses]]) = <instance>.getquotaroot(mailbox) - """ - typ, dat = self._simple_command('GETQUOTAROOT', mailbox) - typ, quota = self._untagged_response(typ, dat, 'QUOTA') - typ, quotaroot = self._untagged_response(typ, dat, 'QUOTAROOT') - return typ, [quotaroot, quota] - - - def idle(self, duration=None): - """Return an iterable IDLE context manager producing untagged responses. - If the argument is not None, limit iteration to 'duration' seconds. - - with M.idle(duration=29 * 60) as idler: - for typ, data in idler: - print(typ, data) - - Note: 'duration' requires a socket connection (not IMAP4_stream). - """ - return Idler(self, duration) - - - def list(self, directory='""', pattern='*'): - """List mailbox names in directory matching pattern. - - (typ, [data]) = <instance>.list(directory='""', pattern='*') - - 'data' is list of LIST responses. - """ - name = 'LIST' - typ, dat = self._simple_command(name, directory, pattern) - return self._untagged_response(typ, dat, name) - - - def login(self, user, password): - """Identify client using plaintext password. - - (typ, [data]) = <instance>.login(user, password) - - NB: 'password' will be quoted. - """ - typ, dat = self._simple_command('LOGIN', user, self._quote(password)) - if typ != 'OK': - raise self.error(dat[-1]) - self.state = 'AUTH' - return typ, dat - - - def login_cram_md5(self, user, password): - """ Force use of CRAM-MD5 authentication. - - (typ, [data]) = <instance>.login_cram_md5(user, password) - """ - self.user, self.password = user, password - return self.authenticate('CRAM-MD5', self._CRAM_MD5_AUTH) - - - def _CRAM_MD5_AUTH(self, challenge): - """ Authobject to use with CRAM-MD5 authentication. """ - import hmac - - if isinstance(self.password, str): - password = self.password.encode('utf-8') - else: - password = self.password - - try: - authcode = hmac.HMAC(password, challenge, 'md5') - except ValueError: # HMAC-MD5 is not available - raise self.error("CRAM-MD5 authentication is not supported") - return f"{self.user} {authcode.hexdigest()}" - - - def logout(self): - """Shutdown connection to server. - - (typ, [data]) = <instance>.logout() - - Returns server 'BYE' response. - """ - self.state = 'LOGOUT' - typ, dat = self._simple_command('LOGOUT') - self.shutdown() - return typ, dat - - - def lsub(self, directory='""', pattern='*'): - """List 'subscribed' mailbox names in directory matching pattern. - - (typ, [data, ...]) = <instance>.lsub(directory='""', pattern='*') - - 'data' are tuples of message part envelope and data. - """ - name = 'LSUB' - typ, dat = self._simple_command(name, directory, pattern) - return self._untagged_response(typ, dat, name) - - def myrights(self, mailbox): - """Show my ACLs for a mailbox (i.e. the rights that I have on mailbox). - - (typ, [data]) = <instance>.myrights(mailbox) - """ - typ,dat = self._simple_command('MYRIGHTS', mailbox) - return self._untagged_response(typ, dat, 'MYRIGHTS') - - def namespace(self): - """ Returns IMAP namespaces ala rfc2342 - - (typ, [data, ...]) = <instance>.namespace() - """ - name = 'NAMESPACE' - typ, dat = self._simple_command(name) - return self._untagged_response(typ, dat, name) - - - def noop(self): - """Send NOOP command. - - (typ, [data]) = <instance>.noop() - """ - if __debug__: - if self.debug >= 3: - self._dump_ur(self.untagged_responses) - return self._simple_command('NOOP') - - - def partial(self, message_num, message_part, start, length): - """Fetch truncated part of a message. - - (typ, [data, ...]) = <instance>.partial(message_num, message_part, start, length) - - 'data' is tuple of message part envelope and data. - """ - name = 'PARTIAL' - typ, dat = self._simple_command(name, message_num, message_part, start, length) - return self._untagged_response(typ, dat, 'FETCH') - - - def proxyauth(self, user): - """Assume authentication as "user". - - Allows an authorised administrator to proxy into any user's - mailbox. - - (typ, [data]) = <instance>.proxyauth(user) - """ - - name = 'PROXYAUTH' - return self._simple_command('PROXYAUTH', user) - - - def rename(self, oldmailbox, newmailbox): - """Rename old mailbox name to new. - - (typ, [data]) = <instance>.rename(oldmailbox, newmailbox) - """ - return self._simple_command('RENAME', oldmailbox, newmailbox) - - - def search(self, charset, *criteria): - """Search mailbox for matching messages. - - (typ, [data]) = <instance>.search(charset, criterion, ...) - - 'data' is space separated list of matching message numbers. - If UTF8 is enabled, charset MUST be None. - """ - name = 'SEARCH' - if charset: - if self.utf8_enabled: - raise IMAP4.error("Non-None charset not valid in UTF8 mode") - typ, dat = self._simple_command(name, 'CHARSET', charset, *criteria) - else: - typ, dat = self._simple_command(name, *criteria) - return self._untagged_response(typ, dat, name) - - - def select(self, mailbox='INBOX', readonly=False): - """Select a mailbox. - - Flush all untagged responses. - - (typ, [data]) = <instance>.select(mailbox='INBOX', readonly=False) - - 'data' is count of messages in mailbox ('EXISTS' response). - - Mandated responses are ('FLAGS', 'EXISTS', 'RECENT', 'UIDVALIDITY'), so - other responses should be obtained via <instance>.response('FLAGS') etc. - """ - self.untagged_responses = {} # Flush old responses. - self.is_readonly = readonly - if readonly: - name = 'EXAMINE' - else: - name = 'SELECT' - typ, dat = self._simple_command(name, mailbox) - if typ != 'OK': - self.state = 'AUTH' # Might have been 'SELECTED' - return typ, dat - self.state = 'SELECTED' - if 'READ-ONLY' in self.untagged_responses \ - and not readonly: - if __debug__: - if self.debug >= 1: - self._dump_ur(self.untagged_responses) - raise self.readonly('%s is not writable' % mailbox) - return typ, self.untagged_responses.get('EXISTS', [None]) - - - def setacl(self, mailbox, who, what): - """Set a mailbox acl. - - (typ, [data]) = <instance>.setacl(mailbox, who, what) - """ - return self._simple_command('SETACL', mailbox, who, what) - - - def setannotation(self, *args): - """(typ, [data]) = <instance>.setannotation(mailbox[, entry, attribute]+) - Set ANNOTATIONs.""" - - typ, dat = self._simple_command('SETANNOTATION', *args) - return self._untagged_response(typ, dat, 'ANNOTATION') - - - def setquota(self, root, limits): - """Set the quota root's resource limits. - - (typ, [data]) = <instance>.setquota(root, limits) - """ - typ, dat = self._simple_command('SETQUOTA', root, limits) - return self._untagged_response(typ, dat, 'QUOTA') - - - def sort(self, sort_criteria, charset, *search_criteria): - """IMAP4rev1 extension SORT command. - - (typ, [data]) = <instance>.sort(sort_criteria, charset, search_criteria, ...) - """ - name = 'SORT' - #if not name in self.capabilities: # Let the server decide! - # raise self.error('unimplemented extension command: %s' % name) - if (sort_criteria[0],sort_criteria[-1]) != ('(',')'): - sort_criteria = '(%s)' % sort_criteria - typ, dat = self._simple_command(name, sort_criteria, charset, *search_criteria) - return self._untagged_response(typ, dat, name) - - - def starttls(self, ssl_context=None): - name = 'STARTTLS' - if not HAVE_SSL: - raise self.error('SSL support missing') - if self._tls_established: - raise self.abort('TLS session already established') - if name not in self.capabilities: - raise self.abort('TLS not supported by server') - # Generate a default SSL context if none was passed. - if ssl_context is None: - ssl_context = ssl._create_stdlib_context() - typ, dat = self._simple_command(name) - if typ == 'OK': - self.sock = ssl_context.wrap_socket(self.sock, - server_hostname=self.host) - self._file = self.sock.makefile('rb') - self._tls_established = True - self._get_capabilities() - else: - raise self.error("Couldn't establish TLS session") - return self._untagged_response(typ, dat, name) - - - def status(self, mailbox, names): - """Request named status conditions for mailbox. - - (typ, [data]) = <instance>.status(mailbox, names) - """ - name = 'STATUS' - #if self.PROTOCOL_VERSION == 'IMAP4': # Let the server decide! - # raise self.error('%s unimplemented in IMAP4 (obtain IMAP4rev1 server, or re-code)' % name) - typ, dat = self._simple_command(name, mailbox, names) - return self._untagged_response(typ, dat, name) - - - def store(self, message_set, command, flags): - """Alters flag dispositions for messages in mailbox. - - (typ, [data]) = <instance>.store(message_set, command, flags) - """ - if (flags[0],flags[-1]) != ('(',')'): - flags = '(%s)' % flags # Avoid quoting the flags - typ, dat = self._simple_command('STORE', message_set, command, flags) - return self._untagged_response(typ, dat, 'FETCH') - - - def subscribe(self, mailbox): - """Subscribe to new mailbox. - - (typ, [data]) = <instance>.subscribe(mailbox) - """ - return self._simple_command('SUBSCRIBE', mailbox) - - - def thread(self, threading_algorithm, charset, *search_criteria): - """IMAPrev1 extension THREAD command. - - (type, [data]) = <instance>.thread(threading_algorithm, charset, search_criteria, ...) - """ - name = 'THREAD' - typ, dat = self._simple_command(name, threading_algorithm, charset, *search_criteria) - return self._untagged_response(typ, dat, name) - - - def uid(self, command, *args): - """Execute "command arg ..." with messages identified by UID, - rather than message number. - - (typ, [data]) = <instance>.uid(command, arg1, arg2, ...) - - Returns response appropriate to 'command'. - """ - command = command.upper() - if not command in Commands: - raise self.error("Unknown IMAP4 UID command: %s" % command) - if self.state not in Commands[command]: - raise self.error("command %s illegal in state %s, " - "only allowed in states %s" % - (command, self.state, - ', '.join(Commands[command]))) - name = 'UID' - typ, dat = self._simple_command(name, command, *args) - if command in ('SEARCH', 'SORT', 'THREAD'): - name = command - else: - name = 'FETCH' - return self._untagged_response(typ, dat, name) - - - def unsubscribe(self, mailbox): - """Unsubscribe from old mailbox. - - (typ, [data]) = <instance>.unsubscribe(mailbox) - """ - return self._simple_command('UNSUBSCRIBE', mailbox) - - - def unselect(self): - """Free server's resources associated with the selected mailbox - and returns the server to the authenticated state. - This command performs the same actions as CLOSE, except - that no messages are permanently removed from the currently - selected mailbox. - - (typ, [data]) = <instance>.unselect() - """ - try: - typ, data = self._simple_command('UNSELECT') - finally: - self.state = 'AUTH' - return typ, data - - - def xatom(self, name, *args): - """Allow simple extension commands - notified by server in CAPABILITY response. - - Assumes command is legal in current state. - - (typ, [data]) = <instance>.xatom(name, arg, ...) - - Returns response appropriate to extension command 'name'. - """ - name = name.upper() - #if not name in self.capabilities: # Let the server decide! - # raise self.error('unknown extension command: %s' % name) - if not name in Commands: - Commands[name] = (self.state,) - return self._simple_command(name, *args) - - - - # Private methods - - - def _append_untagged(self, typ, dat): - if dat is None: - dat = b'' - - # During idle, queue untagged responses for delivery via iteration - if self._idle_capture: - # Responses containing literal strings are passed to us one data - # fragment at a time, while others arrive in a single call. - if (not self._idle_responses or - isinstance(self._idle_responses[-1][1][-1], bytes)): - # We are not continuing a fragmented response; start a new one - self._idle_responses.append((typ, [dat])) - else: - # We are continuing a fragmented response; append the fragment - response = self._idle_responses[-1] - assert response[0] == typ - response[1].append(dat) - if __debug__ and self.debug >= 5: - self._mesg(f'idle: queue untagged {typ} {dat!r}') - return - - ur = self.untagged_responses - if __debug__: - if self.debug >= 5: - self._mesg('untagged_responses[%s] %s += ["%r"]' % - (typ, len(ur.get(typ,'')), dat)) - if typ in ur: - ur[typ].append(dat) - else: - ur[typ] = [dat] - - - def _check_bye(self): - bye = self.untagged_responses.get('BYE') - if bye: - raise self.abort(bye[-1].decode(self._encoding, 'replace')) - - - def _command(self, name, *args): - - if self.state not in Commands[name]: - self.literal = None - raise self.error("command %s illegal in state %s, " - "only allowed in states %s" % - (name, self.state, - ', '.join(Commands[name]))) - - for typ in ('OK', 'NO', 'BAD'): - if typ in self.untagged_responses: - del self.untagged_responses[typ] - - if 'READ-ONLY' in self.untagged_responses \ - and not self.is_readonly: - raise self.readonly('mailbox status changed to READ-ONLY') - - tag = self._new_tag() - name = bytes(name, self._encoding) - data = tag + b' ' + name - for arg in args: - if arg is None: continue - if isinstance(arg, str): - arg = bytes(arg, self._encoding) - data = data + b' ' + arg - - literal = self.literal - if literal is not None: - self.literal = None - if type(literal) is type(self._command): - literator = literal - else: - literator = None - if self.utf8_enabled: - data = data + bytes(' UTF8 (~{%s}' % len(literal), self._encoding) - literal = literal + b')' - else: - data = data + bytes(' {%s}' % len(literal), self._encoding) - - if __debug__: - if self.debug >= 4: - self._mesg('> %r' % data) - else: - self._log('> %r' % data) - - try: - self.send(data + CRLF) - except OSError as val: - raise self.abort('socket error: %s' % val) - - if literal is None: - return tag - - while 1: - # Wait for continuation response - - while self._get_response(): - if self.tagged_commands[tag]: # BAD/NO? - return tag - - # Send literal - - if literator: - literal = literator(self.continuation_response) - - if __debug__: - if self.debug >= 4: - self._mesg('write literal size %s' % len(literal)) - - try: - self.send(literal) - self.send(CRLF) - except OSError as val: - raise self.abort('socket error: %s' % val) - - if not literator: - break - - return tag - - - def _command_complete(self, name, tag): - logout = (name == 'LOGOUT') - # BYE is expected after LOGOUT - if not logout: - self._check_bye() - try: - typ, data = self._get_tagged_response(tag, expect_bye=logout) - except self.abort as val: - raise self.abort('command: %s => %s' % (name, val)) - except self.error as val: - raise self.error('command: %s => %s' % (name, val)) - if not logout: - self._check_bye() - if typ == 'BAD': - raise self.error('%s command error: %s %s' % (name, typ, data)) - return typ, data - - - def _get_capabilities(self): - typ, dat = self.capability() - if dat == [None]: - raise self.error('no CAPABILITY response from server') - dat = str(dat[-1], self._encoding) - dat = dat.upper() - self.capabilities = tuple(dat.split()) - - - def _get_response(self, start_timeout=False): - - # Read response and store. - # - # Returns None for continuation responses, - # otherwise first response line received. - # - # If start_timeout is given, temporarily uses it as a socket - # timeout while waiting for the start of a response, raising - # _responsetimeout if one doesn't arrive. (Used by Idler.) - - if start_timeout is not False and self.sock: - assert start_timeout is None or start_timeout > 0 - saved_timeout = self.sock.gettimeout() - self.sock.settimeout(start_timeout) - try: - resp = self._get_line() - except TimeoutError as err: - raise self._responsetimeout from err - finally: - self.sock.settimeout(saved_timeout) - else: - resp = self._get_line() - - # Command completion response? - - if self._match(self.tagre, resp): - tag = self.mo.group('tag') - if not tag in self.tagged_commands: - raise self.abort('unexpected tagged response: %r' % resp) - - typ = self.mo.group('type') - typ = str(typ, self._encoding) - dat = self.mo.group('data') - self.tagged_commands[tag] = (typ, [dat]) - else: - dat2 = None - - # '*' (untagged) responses? - - if not self._match(Untagged_response, resp): - if self._match(self.Untagged_status, resp): - dat2 = self.mo.group('data2') - - if self.mo is None: - # Only other possibility is '+' (continuation) response... - - if self._match(Continuation, resp): - self.continuation_response = self.mo.group('data') - return None # NB: indicates continuation - - raise self.abort("unexpected response: %r" % resp) - - typ = self.mo.group('type') - typ = str(typ, self._encoding) - dat = self.mo.group('data') - if dat is None: dat = b'' # Null untagged response - if dat2: dat = dat + b' ' + dat2 - - # Is there a literal to come? - - while self._match(self.Literal, dat): - - # Read literal direct from connection. - - size = int(self.mo.group('size')) - if __debug__: - if self.debug >= 4: - self._mesg('read literal size %s' % size) - data = self.read(size) - - # Store response with literal as tuple - - self._append_untagged(typ, (dat, data)) - - # Read trailer - possibly containing another literal - - dat = self._get_line() - - self._append_untagged(typ, dat) - - # Bracketed response information? - - if typ in ('OK', 'NO', 'BAD') and self._match(Response_code, dat): - typ = self.mo.group('type') - typ = str(typ, self._encoding) - self._append_untagged(typ, self.mo.group('data')) - - if __debug__: - if self.debug >= 1 and typ in ('NO', 'BAD', 'BYE'): - self._mesg('%s response: %r' % (typ, dat)) - - return resp - - - def _get_tagged_response(self, tag, expect_bye=False): - - while 1: - result = self.tagged_commands[tag] - if result is not None: - del self.tagged_commands[tag] - return result - - if expect_bye: - typ = 'BYE' - bye = self.untagged_responses.pop(typ, None) - if bye is not None: - # Server replies to the "LOGOUT" command with "BYE" - return (typ, bye) - - # If we've seen a BYE at this point, the socket will be - # closed, so report the BYE now. - self._check_bye() - - # Some have reported "unexpected response" exceptions. - # Note that ignoring them here causes loops. - # Instead, send me details of the unexpected response and - # I'll update the code in '_get_response()'. - - try: - self._get_response() - except self.abort as val: - if __debug__: - if self.debug >= 1: - self.print_log() - raise - - - def _get_line(self): - - line = self.readline() - if not line: - raise self.abort('socket error: EOF') - - # Protocol mandates all lines terminated by CRLF - if not line.endswith(b'\r\n'): - raise self.abort('socket error: unterminated line: %r' % line) - - line = line[:-2] - if __debug__: - if self.debug >= 4: - self._mesg('< %r' % line) - else: - self._log('< %r' % line) - return line - - - def _match(self, cre, s): - - # Run compiled regular expression match method on 's'. - # Save result, return success. - - self.mo = cre.match(s) - if __debug__: - if self.mo is not None and self.debug >= 5: - self._mesg("\tmatched %r => %r" % (cre.pattern, self.mo.groups())) - return self.mo is not None - - - def _new_tag(self): - - tag = self.tagpre + bytes(str(self.tagnum), self._encoding) - self.tagnum = self.tagnum + 1 - self.tagged_commands[tag] = None - return tag - - - def _quote(self, arg): - - arg = arg.replace('\\', '\\\\') - arg = arg.replace('"', '\\"') - - return '"' + arg + '"' - - - def _simple_command(self, name, *args): - - return self._command_complete(name, self._command(name, *args)) - - - def _untagged_response(self, typ, dat, name): - if typ == 'NO': - return typ, dat - if not name in self.untagged_responses: - return typ, [None] - data = self.untagged_responses.pop(name) - if __debug__: - if self.debug >= 5: - self._mesg('untagged_responses[%s] => %s' % (name, data)) - return typ, data - - - if __debug__: - - def _mesg(self, s, secs=None): - if secs is None: - secs = time.time() - tm = time.strftime('%M:%S', time.localtime(secs)) - sys.stderr.write(' %s.%02d %s\n' % (tm, (secs*100)%100, s)) - sys.stderr.flush() - - def _dump_ur(self, untagged_resp_dict): - if not untagged_resp_dict: - return - items = (f'{key}: {value!r}' - for key, value in untagged_resp_dict.items()) - self._mesg('untagged responses dump:' + '\n\t\t'.join(items)) - - def _log(self, line): - # Keep log of last '_cmd_log_len' interactions for debugging. - self._cmd_log[self._cmd_log_idx] = (line, time.time()) - self._cmd_log_idx += 1 - if self._cmd_log_idx >= self._cmd_log_len: - self._cmd_log_idx = 0 - - def print_log(self): - self._mesg('last %d IMAP4 interactions:' % len(self._cmd_log)) - i, n = self._cmd_log_idx, self._cmd_log_len - while n: - try: - self._mesg(*self._cmd_log[i]) - except: - pass - i += 1 - if i >= self._cmd_log_len: - i = 0 - n -= 1 - - -class Idler: - """Iterable IDLE context manager: start IDLE & produce untagged responses. - - An object of this type is returned by the IMAP4.idle() method. - - Note: The name and structure of this class are subject to change. - """ - - def __init__(self, imap, duration=None): - if 'IDLE' not in imap.capabilities: - raise imap.error("Server does not support IMAP4 IDLE") - if duration is not None and not imap.sock: - # IMAP4_stream pipes don't support timeouts - raise imap.error('duration requires a socket connection') - self._duration = duration - self._deadline = None - self._imap = imap - self._tag = None - self._saved_state = None - - def __enter__(self): - imap = self._imap - assert not imap._idle_responses - assert not imap._idle_capture - - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle start duration={self._duration}') - - # Start capturing untagged responses before sending IDLE, - # so we can deliver via iteration any that arrive while - # the IDLE command continuation request is still pending. - imap._idle_capture = True - - try: - self._tag = imap._command('IDLE') - # As with any command, the server is allowed to send us unrelated, - # untagged responses before acting on IDLE. These lines will be - # returned by _get_response(). When the server is ready, it will - # send an IDLE continuation request, indicated by _get_response() - # returning None. We therefore process responses in a loop until - # this occurs. - while resp := imap._get_response(): - if imap.tagged_commands[self._tag]: - typ, data = imap.tagged_commands.pop(self._tag) - if typ == 'NO': - raise imap.error(f'idle denied: {data}') - raise imap.abort(f'unexpected status response: {resp}') - - if __debug__ and imap.debug >= 4: - prompt = imap.continuation_response - imap._mesg(f'idle continuation prompt: {prompt}') - except BaseException: - imap._idle_capture = False - raise - - if self._duration is not None: - self._deadline = time.monotonic() + self._duration - - self._saved_state = imap.state - imap.state = 'IDLING' - - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - imap = self._imap - - if __debug__ and imap.debug >= 4: - imap._mesg('idle done') - imap.state = self._saved_state - - # Stop intercepting untagged responses before sending DONE, - # since we can no longer deliver them via iteration. - imap._idle_capture = False - - # If we captured untagged responses while the IDLE command - # continuation request was still pending, but the user did not - # iterate over them before exiting IDLE, we must put them - # someplace where the user can retrieve them. The only - # sensible place for this is the untagged_responses dict, - # despite its unfortunate inability to preserve the relative - # order of different response types. - if leftovers := len(imap._idle_responses): - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle quit with {leftovers} leftover responses') - while imap._idle_responses: - typ, data = imap._idle_responses.pop(0) - # Append one fragment at a time, just as _get_response() does - for datum in data: - imap._append_untagged(typ, datum) - - try: - imap.send(b'DONE' + CRLF) - status, [msg] = imap._command_complete('IDLE', self._tag) - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle status: {status} {msg!r}') - except OSError: - if not exc_type: - raise - - return False # Do not suppress context body exceptions - - def __iter__(self): - return self - - def _pop(self, timeout, default=('', None)): - # Get the next response, or a default value on timeout. - # The timeout arg can be an int or float, or None for no timeout. - # Timeouts require a socket connection (not IMAP4_stream). - # This method ignores self._duration. - - # Historical Note: - # The timeout was originally implemented using select() after - # checking for the presence of already-buffered data. - # That allowed timeouts on pipe connetions like IMAP4_stream. - # However, it seemed possible that SSL data arriving without any - # IMAP data afterward could cause select() to indicate available - # application data when there was none, leading to a read() call - # that would block with no timeout. It was unclear under what - # conditions this would happen in practice. Our implementation was - # changed to use socket timeouts instead of select(), just to be - # safe. - - imap = self._imap - if imap.state != 'IDLING': - raise imap.error('_pop() only works during IDLE') - - if imap._idle_responses: - # Response is ready to return to the user - resp = imap._idle_responses.pop(0) - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle _pop({timeout}) de-queued {resp[0]}') - return resp - - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle _pop({timeout}) reading') - - if timeout is not None: - if timeout <= 0: - return default - timeout = float(timeout) # Required by socket.settimeout() - - try: - imap._get_response(timeout) # Reads line, calls _append_untagged() - except IMAP4._responsetimeout: - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle _pop({timeout}) done') - return default - - resp = imap._idle_responses.pop(0) - - if __debug__ and imap.debug >= 4: - imap._mesg(f'idle _pop({timeout}) read {resp[0]}') - return resp - - def __next__(self): - imap = self._imap - - if self._duration is None: - timeout = None - else: - timeout = self._deadline - time.monotonic() - typ, data = self._pop(timeout) - - if not typ: - if __debug__ and imap.debug >= 4: - imap._mesg('idle iterator exhausted') - raise StopIteration - - return typ, data - - def burst(self, interval=0.1): - """Yield a burst of responses no more than 'interval' seconds apart. - - with M.idle() as idler: - # get a response and any others following by < 0.1 seconds - batch = list(idler.burst()) - print(f'processing {len(batch)} responses...') - print(batch) - - Note: This generator requires a socket connection (not IMAP4_stream). - """ - if not self._imap.sock: - raise self._imap.error('burst() requires a socket connection') - - try: - yield next(self) - except StopIteration: - return - - while response := self._pop(interval, None): - yield response - - -if HAVE_SSL: - - class IMAP4_SSL(IMAP4): - - """IMAP4 client class over SSL connection - - Instantiate with: IMAP4_SSL([host[, port[, ssl_context[, timeout=None]]]]) - - host - host's name (default: localhost); - port - port number (default: standard IMAP4 SSL port); - ssl_context - a SSLContext object that contains your certificate chain - and private key (default: None) - timeout - socket timeout (default: None) If timeout is not given or is None, - the global default socket timeout is used - - for more documentation see the docstring of the parent class IMAP4. - """ - - - def __init__(self, host='', port=IMAP4_SSL_PORT, - *, ssl_context=None, timeout=None): - if ssl_context is None: - ssl_context = ssl._create_stdlib_context() - self.ssl_context = ssl_context - IMAP4.__init__(self, host, port, timeout) - - def _create_socket(self, timeout): - sock = IMAP4._create_socket(self, timeout) - return self.ssl_context.wrap_socket(sock, - server_hostname=self.host) - - def open(self, host='', port=IMAP4_SSL_PORT, timeout=None): - """Setup connection to remote server on "host:port". - (default: localhost:standard IMAP4 SSL port). - This connection will be used by the routines: - read, readline, send, shutdown. - """ - IMAP4.open(self, host, port, timeout) - - __all__.append("IMAP4_SSL") - - -class IMAP4_stream(IMAP4): - - """IMAP4 client class over a stream - - Instantiate with: IMAP4_stream(command) - - "command" - a string that can be passed to subprocess.Popen() - - for more documentation see the docstring of the parent class IMAP4. - """ - - - def __init__(self, command): - self.command = command - IMAP4.__init__(self) - - - def open(self, host=None, port=None, timeout=None): - """Setup a stream connection. - This connection will be used by the routines: - read, readline, send, shutdown. - """ - self.host = None # For compatibility with parent class - self.port = None - self.sock = None - self._file = None - self.process = subprocess.Popen(self.command, - bufsize=DEFAULT_BUFFER_SIZE, - stdin=subprocess.PIPE, stdout=subprocess.PIPE, - shell=True, close_fds=True) - self.writefile = self.process.stdin - self.readfile = self.process.stdout - - def read(self, size): - """Read 'size' bytes from remote.""" - return self.readfile.read(size) - - - def readline(self): - """Read line from remote.""" - return self.readfile.readline() - - - def send(self, data): - """Send data to remote.""" - self.writefile.write(data) - self.writefile.flush() - - - def shutdown(self): - """Close I/O established in "open".""" - self.readfile.close() - self.writefile.close() - self.process.wait() - - - -class _Authenticator: - - """Private class to provide en/decoding - for base64-based authentication conversation. - """ - - def __init__(self, mechinst): - self.mech = mechinst # Callable object to provide/process data - - def process(self, data): - ret = self.mech(self.decode(data)) - if ret is None: - return b'*' # Abort conversation - return self.encode(ret) - - def encode(self, inp): - # - # Invoke binascii.b2a_base64 iteratively with - # short even length buffers, strip the trailing - # line feed from the result and append. "Even" - # means a number that factors to both 6 and 8, - # so when it gets to the end of the 8-bit input - # there's no partial 6-bit output. - # - oup = b'' - if isinstance(inp, str): - inp = inp.encode('utf-8') - while inp: - if len(inp) > 48: - t = inp[:48] - inp = inp[48:] - else: - t = inp - inp = b'' - e = binascii.b2a_base64(t) - if e: - oup = oup + e[:-1] - return oup - - def decode(self, inp): - if not inp: - return b'' - return binascii.a2b_base64(inp) - -Months = ' Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ') -Mon2num = {s.encode():n+1 for n, s in enumerate(Months[1:])} - -def Internaldate2tuple(resp): - """Parse an IMAP4 INTERNALDATE string. - - Return corresponding local time. The return value is a - time.struct_time tuple or None if the string has wrong format. - """ - - mo = InternalDate.match(resp) - if not mo: - return None - - mon = Mon2num[mo.group('mon')] - zonen = mo.group('zonen') - - day = int(mo.group('day')) - year = int(mo.group('year')) - hour = int(mo.group('hour')) - min = int(mo.group('min')) - sec = int(mo.group('sec')) - zoneh = int(mo.group('zoneh')) - zonem = int(mo.group('zonem')) - - # INTERNALDATE timezone must be subtracted to get UT - - zone = (zoneh*60 + zonem)*60 - if zonen == b'-': - zone = -zone - - tt = (year, mon, day, hour, min, sec, -1, -1, -1) - utc = calendar.timegm(tt) - zone - - return time.localtime(utc) - - - -def Int2AP(num): - - """Convert integer to A-P string representation.""" - - val = b''; AP = b'ABCDEFGHIJKLMNOP' - num = int(abs(num)) - while num: - num, mod = divmod(num, 16) - val = AP[mod:mod+1] + val - return val - - - -def ParseFlags(resp): - - """Convert IMAP4 flags response to python tuple.""" - - mo = Flags.match(resp) - if not mo: - return () - - return tuple(mo.group('flags').split()) - - -def Time2Internaldate(date_time): - - """Convert date_time to IMAP4 INTERNALDATE representation. - - Return string in form: '"DD-Mmm-YYYY HH:MM:SS +HHMM"'. The - date_time argument can be a number (int or float) representing - seconds since epoch (as returned by time.time()), a 9-tuple - representing local time, an instance of time.struct_time (as - returned by time.localtime()), an aware datetime instance or a - double-quoted string. In the last case, it is assumed to already - be in the correct format. - """ - if isinstance(date_time, (int, float)): - dt = datetime.fromtimestamp(date_time, - timezone.utc).astimezone() - elif isinstance(date_time, tuple): - try: - gmtoff = date_time.tm_gmtoff - except AttributeError: - if time.daylight: - dst = date_time[8] - if dst == -1: - dst = time.localtime(time.mktime(date_time))[8] - gmtoff = -(time.timezone, time.altzone)[dst] - else: - gmtoff = -time.timezone - delta = timedelta(seconds=gmtoff) - dt = datetime(*date_time[:6], tzinfo=timezone(delta)) - elif isinstance(date_time, datetime): - if date_time.tzinfo is None: - raise ValueError("date_time must be aware") - dt = date_time - elif isinstance(date_time, str) and (date_time[0],date_time[-1]) == ('"','"'): - return date_time # Assume in correct format - else: - raise ValueError("date_time not of a known type") - fmt = '"%d-{}-%Y %H:%M:%S %z"'.format(Months[dt.month]) - return dt.strftime(fmt) - - - -if __name__ == '__main__': - - # To test: invoke either as 'python imaplib.py [IMAP4_server_hostname]' - # or 'python imaplib.py -s "rsh IMAP4_server_hostname exec /etc/rimapd"' - # to test the IMAP4_stream class - - import getopt, getpass - - try: - optlist, args = getopt.getopt(sys.argv[1:], 'd:s:') - except getopt.error as val: - optlist, args = (), () - - stream_command = None - for opt,val in optlist: - if opt == '-d': - Debug = int(val) - elif opt == '-s': - stream_command = val - if not args: args = (stream_command,) - - if not args: args = ('',) - - host = args[0] - - USER = getpass.getuser() - PASSWD = getpass.getpass("IMAP password for %s on %s: " % (USER, host or "localhost")) - - test_mesg = 'From: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s' % {'user':USER, 'lf':'\n'} - test_seq1 = ( - ('login', (USER, PASSWD)), - ('create', ('/tmp/xxx 1',)), - ('rename', ('/tmp/xxx 1', '/tmp/yyy')), - ('CREATE', ('/tmp/yyz 2',)), - ('append', ('/tmp/yyz 2', None, None, test_mesg)), - ('list', ('/tmp', 'yy*')), - ('select', ('/tmp/yyz 2',)), - ('search', (None, 'SUBJECT', 'test')), - ('fetch', ('1', '(FLAGS INTERNALDATE RFC822)')), - ('store', ('1', 'FLAGS', r'(\Deleted)')), - ('namespace', ()), - ('expunge', ()), - ('recent', ()), - ('close', ()), - ) - - test_seq2 = ( - ('select', ()), - ('response',('UIDVALIDITY',)), - ('uid', ('SEARCH', 'ALL')), - ('response', ('EXISTS',)), - ('append', (None, None, None, test_mesg)), - ('recent', ()), - ('logout', ()), - ) - - def run(cmd, args): - M._mesg('%s %s' % (cmd, args)) - typ, dat = getattr(M, cmd)(*args) - M._mesg('%s => %s %s' % (cmd, typ, dat)) - if typ == 'NO': raise dat[0] - return dat - - try: - if stream_command: - M = IMAP4_stream(stream_command) - else: - M = IMAP4(host) - if M.state == 'AUTH': - test_seq1 = test_seq1[1:] # Login not needed - M._mesg('PROTOCOL_VERSION = %s' % M.PROTOCOL_VERSION) - M._mesg('CAPABILITIES = %r' % (M.capabilities,)) - - for cmd,args in test_seq1: - run(cmd, args) - - for ml in run('list', ('/tmp/', 'yy%')): - mo = re.match(r'.*"([^"]+)"$', ml) - if mo: path = mo.group(1) - else: path = ml.split()[-1] - run('delete', (path,)) - - for cmd,args in test_seq2: - dat = run(cmd, args) - - if (cmd,args) != ('uid', ('SEARCH', 'ALL')): - continue - - uid = dat[-1].split() - if not uid: continue - run('uid', ('FETCH', '%s' % uid[-1], - '(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)')) - - print('\nAll tests OK.') - - except: - print('\nTests failed.') - - if not Debug: - print(''' -If you would like to see debugging output, -try: %s -d5 -''' % sys.argv[0]) - - raise diff --git a/Python314_4_x86_Template/Lib/importlib/__init__.py b/Python314_4_x86_Template/Lib/importlib/__init__.py deleted file mode 100644 index a7d57561e..000000000 --- a/Python314_4_x86_Template/Lib/importlib/__init__.py +++ /dev/null @@ -1,136 +0,0 @@ -"""A pure Python implementation of import.""" -__all__ = ['__import__', 'import_module', 'invalidate_caches', 'reload'] - -# Bootstrap help ##################################################### - -# Until bootstrapping is complete, DO NOT import any modules that attempt -# to import importlib._bootstrap (directly or indirectly). Since this -# partially initialised package would be present in sys.modules, those -# modules would get an uninitialised copy of the source version, instead -# of a fully initialised version (either the frozen one or the one -# initialised below if the frozen one is not available). -import _imp # Just the builtin component, NOT the full Python module -import sys - -try: - import _frozen_importlib as _bootstrap -except ImportError: - from . import _bootstrap - _bootstrap._setup(sys, _imp) -else: - # importlib._bootstrap is the built-in import, ensure we don't create - # a second copy of the module. - _bootstrap.__name__ = 'importlib._bootstrap' - _bootstrap.__package__ = 'importlib' - try: - _bootstrap.__file__ = __file__.replace('__init__.py', '_bootstrap.py') - except NameError: - # __file__ is not guaranteed to be defined, e.g. if this code gets - # frozen by a tool like cx_Freeze. - pass - sys.modules['importlib._bootstrap'] = _bootstrap - -try: - import _frozen_importlib_external as _bootstrap_external -except ImportError: - from . import _bootstrap_external - _bootstrap_external._set_bootstrap_module(_bootstrap) - _bootstrap._bootstrap_external = _bootstrap_external -else: - _bootstrap_external.__name__ = 'importlib._bootstrap_external' - _bootstrap_external.__package__ = 'importlib' - try: - _bootstrap_external.__file__ = __file__.replace('__init__.py', '_bootstrap_external.py') - except NameError: - # __file__ is not guaranteed to be defined, e.g. if this code gets - # frozen by a tool like cx_Freeze. - pass - sys.modules['importlib._bootstrap_external'] = _bootstrap_external - -# To simplify imports in test code -_pack_uint32 = _bootstrap_external._pack_uint32 -_unpack_uint32 = _bootstrap_external._unpack_uint32 - -# Fully bootstrapped at this point, import whatever you like, circular -# dependencies and startup overhead minimisation permitting :) - - -# Public API ######################################################### - -from ._bootstrap import __import__ - - -def invalidate_caches(): - """Call the invalidate_caches() method on all meta path finders stored in - sys.meta_path (where implemented).""" - for finder in sys.meta_path: - if hasattr(finder, 'invalidate_caches'): - finder.invalidate_caches() - - -def import_module(name, package=None): - """Import a module. - - The 'package' argument is required when performing a relative import. It - specifies the package to use as the anchor point from which to resolve the - relative import to an absolute import. - - """ - level = 0 - if name.startswith('.'): - if not package: - raise TypeError("the 'package' argument is required to perform a " - f"relative import for {name!r}") - for character in name: - if character != '.': - break - level += 1 - return _bootstrap._gcd_import(name[level:], package, level) - - -_RELOADING = {} - - -def reload(module): - """Reload the module and return it. - - The module must have been successfully imported before. - - """ - try: - name = module.__spec__.name - except AttributeError: - try: - name = module.__name__ - except AttributeError: - raise TypeError("reload() argument must be a module") from None - - if sys.modules.get(name) is not module: - raise ImportError(f"module {name} not in sys.modules", name=name) - if name in _RELOADING: - return _RELOADING[name] - _RELOADING[name] = module - try: - parent_name = name.rpartition('.')[0] - if parent_name: - try: - parent = sys.modules[parent_name] - except KeyError: - raise ImportError(f"parent {parent_name!r} not in sys.modules", - name=parent_name) from None - else: - pkgpath = parent.__path__ - else: - pkgpath = None - target = module - spec = module.__spec__ = _bootstrap._find_spec(name, pkgpath, target) - if spec is None: - raise ModuleNotFoundError(f"spec not found for the module {name!r}", name=name) - _bootstrap._exec(spec, module) - # The module may have replaced itself in sys.modules! - return sys.modules[name] - finally: - try: - del _RELOADING[name] - except KeyError: - pass diff --git a/Python314_4_x86_Template/Lib/importlib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index b967b9af88d698d6ffc2e89c89f782d48006b817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4687 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 diff --git a/Python314_4_x86_Template/Lib/importlib/__pycache__/_abc.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/__pycache__/_abc.cpython-314.pyc deleted file mode 100644 index ac8e2b025588bdbf344db43ba2eb5beed08ae4d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1739 zcmZ8h-*4SC6n5_KrY-G8N7=-{)ue4#Rijl@z*sdgHY6@8RTZ}KlGgG~d>6AM&TOac z?Oyf<kK+mc1o&?z5JH6UfZz`p>!k6>aelP7<iW9zkB`6eo$q-0wOJd%_f7j3{;-YE zUuIE%ooaIQ8B87{7iqL>xz@n?w4odCpk3rP22I^OhnA4rTtsebr@7Uu51;(q_WR9p zrQ2@f66$vjZ+?*t71LOZFppCqb;O4b9r`#^EWlb|$%4#h6PualQMFV~-^y(=6hbR4 zX}am3+=Y-;Esn0igaYgxq%DBn*zM@%8%QA6(k-{KhyV<L)*ZK{yW2?j+_r(1cQynK zm^{34YiOeT8V{*r*pH}EcqC*60!M|La{R``?dEdGb>_%W2aH(|vT^v#Wjd1yrZ^Ts z7BQ0`Pq^kZ;)e{=B!DH@_CxN6X4AxWZ2NA=6^@w>MSxW(vM9ikasV?ZIQv9O17`#Q z#yaH5eVj_R#}chD*Y-$?82ge@ZFVS5*nV}rgYiJ)n2v$v0@tQUDog?Qsb;ngsm3~F zSf$LbuP$PNADAa%*_%H?ig`=1XapnpD?`ZT%XxhJL+_qqQhA2Y)$7-<dHX^>@KPzh zV!l?MABik5<gOSpU{IPy5tA#c-WDVzl6P0v$Qn8L;5~Ae#c2e{h>lZlgAcu9)p!JC z<D}z!w!}wDit~lCjLs>mk-F*@rTJ$b%`Y6m6rCzy3k*d8cMC7CRukHWVy;!CzG9BS zcOOE%g}h?{gqCN{7vEOhJhcJ-OX$nv7)BU$8^TxGFtiqu3hFAE`m<Uwai&0spp_sf z8$^wjQ>Lm40flt0ZkH9w3|E0owU&ICX{NAgHXuG_G8#kuP2^D)MG1}J6hy$Fbx_<X zVX0DW0Tu}!Q66QI{ZEu|GGHJ&BO0S&aN7e(LRXjF;jjbdR~5P1ckp0jpR!<fz!k_9 zl21Uh21)$@0N6bqK*G>|{)2rg1GVCdI0ZQmBW91X#MfLT&_Q}!v?X*v-7J7IpPsm= z-^#loRfdjydLl(>Dwm%j25g0rsF26~hBP9{do@Lsq~(;cPEWY!XE%yxz?rZuf|I%m z!(;UF0-9fZqQBqyb#D2mx#eePFFu{Q`1joTa{0rZpXY8o?cI<w;4F<^Hv3a~j}TK8 zLg0z3L6LlhkcSy9>IFM<gp9aU@M<P35n$*N5(u9VX%sGBhao>l2=tTYJ~@#Ac%C7o zc*>yDwa=o65O_>yCya2+i2kD@S!wiK3<jPusr~ykB=%=(^+l`KUU+q3zP<h&!B8e) z+#%i+JX*B4rr(k0!Iq<v>n1d7-o5ql?a#rX3~mCKhYNOl>!qr1$|cw^NYvXfJa1Z- e^&7hL2YT~&WWVezS?f>KcaOe(^a{bWIR78`_w$kf diff --git a/Python314_4_x86_Template/Lib/importlib/__pycache__/abc.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/__pycache__/abc.cpython-314.pyc deleted file mode 100644 index d0a3b4a321e84fd97b19a9f1d2e9d127e68d3ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10314 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 diff --git a/Python314_4_x86_Template/Lib/importlib/__pycache__/readers.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/__pycache__/readers.cpython-314.pyc deleted file mode 100644 index 0d280350dc3f102e51402d68f1d23188f798c6ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmZWnO-mgy6iw!%&rYq<z0g2c&*I>qlv;`#p*%sYjJhd9L*7i}rOix2at9q(#g*&+ z3xANC+4=`;-=f>zsjrLDyEr+Q9PY<SUave)2*yo(r%os#_e1hGf(4ncBl$*h0^~Ez z={}tV5KKY{ClN%G7~+>CB{}^_;Yl96BIEGtd$MP0D?m+^R?sm&Q#Cs`j-^g|)4Ec6 zWTKMJGvV>3Z7OCOcHF@XkF7M@OcSip__iK2FcZK^(J&`<_pdO+;-=LVYrRCBWCp<{ zwW(SyS*4sTL3e2~j{4+-(lY<kwtxCb*#%uaY&9sW<)y5S1<d-@BT-9lMY#|kjYs{6 z^U9Q*_b>k2zzsgRaDZrl7-7&0tvSCXb4*EZ_uds}9(O5*t+Sn-&EmqiuZ4By3r^^Z zQk%A#3NJTQqX5AJ7LaZuD;{0h%C`A7zkK_KpUT>50g^*)ivu++RBep|jcj3RYP){v q{i6rFZW#x_w<UfJ;UT1y{s>|k{aOiVFeeB<m&mgNdOdQ(U-%8~TcGp+ diff --git a/Python314_4_x86_Template/Lib/importlib/_abc.py b/Python314_4_x86_Template/Lib/importlib/_abc.py deleted file mode 100644 index 693b46611..000000000 --- a/Python314_4_x86_Template/Lib/importlib/_abc.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Subset of importlib.abc used to reduce importlib.util imports.""" -from . import _bootstrap -import abc - - -class Loader(metaclass=abc.ABCMeta): - - """Abstract base class for import loaders.""" - - def create_module(self, spec): - """Return a module to initialize and into which to load. - - This method should raise ImportError if anything prevents it - from creating a new module. It may return None to indicate - that the spec should create the new module. - """ - # By default, defer to default semantics for the new module. - return None - - # We don't define exec_module() here since that would break - # hasattr checks we do to support backward compatibility. - - def load_module(self, fullname): - """Return the loaded module. - - The module must be added to sys.modules and have import-related - attributes set properly. The fullname is a str. - - ImportError is raised on failure. - - This method is deprecated in favor of loader.exec_module(). If - exec_module() exists then it is used to provide a backwards-compatible - functionality for this method. - - """ - if not hasattr(self, 'exec_module'): - raise ImportError - # Warning implemented in _load_module_shim(). - return _bootstrap._load_module_shim(self, fullname) diff --git a/Python314_4_x86_Template/Lib/importlib/_bootstrap.py b/Python314_4_x86_Template/Lib/importlib/_bootstrap.py deleted file mode 100644 index 9d911e1dc..000000000 --- a/Python314_4_x86_Template/Lib/importlib/_bootstrap.py +++ /dev/null @@ -1,1570 +0,0 @@ -"""Core implementation of import. - -This module is NOT meant to be directly imported! It has been designed such -that it can be bootstrapped into Python as the implementation of import. As -such it requires the injection of specific modules and attributes in order to -work. One should use importlib as the public-facing version of this module. - -""" -# -# IMPORTANT: Whenever making changes to this module, be sure to run a top-level -# `make regen-importlib` followed by `make` in order to get the frozen version -# of the module updated. Not doing so will result in the Makefile to fail for -# all others who don't have a ./python around to freeze the module -# in the early stages of compilation. -# - -# See importlib._setup() for what is injected into the global namespace. - -# When editing this code be aware that code executed at import time CANNOT -# reference any injected objects! This includes not only global code but also -# anything specified at the class level. - -def _object_name(obj): - try: - return obj.__qualname__ - except AttributeError: - return type(obj).__qualname__ - -# Bootstrap-related code ###################################################### - -# Modules injected manually by _setup() -_thread = None -_warnings = None -_weakref = None - -# Import done by _install_external_importers() -_bootstrap_external = None - - -def _wrap(new, old): - """Simple substitute for functools.update_wrapper.""" - for replace in ['__module__', '__name__', '__qualname__', '__doc__']: - if hasattr(old, replace): - setattr(new, replace, getattr(old, replace)) - new.__dict__.update(old.__dict__) - - -def _new_module(name): - return type(sys)(name) - - -# Module-level locking ######################################################## - -# For a list that can have a weakref to it. -class _List(list): - __slots__ = ("__weakref__",) - - -# Copied from weakref.py with some simplifications and modifications unique to -# bootstrapping importlib. Many methods were simply deleting for simplicity, so if they -# are needed in the future they may work if simply copied back in. -class _WeakValueDictionary: - - def __init__(self): - self_weakref = _weakref.ref(self) - - # Inlined to avoid issues with inheriting from _weakref.ref before _weakref is - # set by _setup(). Since there's only one instance of this class, this is - # not expensive. - class KeyedRef(_weakref.ref): - - __slots__ = "key", - - def __new__(type, ob, key): - self = super().__new__(type, ob, type.remove) - self.key = key - return self - - def __init__(self, ob, key): - super().__init__(ob, self.remove) - - @staticmethod - def remove(wr): - nonlocal self_weakref - - self = self_weakref() - if self is not None: - if self._iterating: - self._pending_removals.append(wr.key) - else: - _weakref._remove_dead_weakref(self.data, wr.key) - - self._KeyedRef = KeyedRef - self.clear() - - def clear(self): - self._pending_removals = [] - self._iterating = set() - self.data = {} - - def _commit_removals(self): - pop = self._pending_removals.pop - d = self.data - while True: - try: - key = pop() - except IndexError: - return - _weakref._remove_dead_weakref(d, key) - - def get(self, key, default=None): - if self._pending_removals: - self._commit_removals() - try: - wr = self.data[key] - except KeyError: - return default - else: - if (o := wr()) is None: - return default - else: - return o - - def setdefault(self, key, default=None): - try: - o = self.data[key]() - except KeyError: - o = None - if o is None: - if self._pending_removals: - self._commit_removals() - self.data[key] = self._KeyedRef(default, key) - return default - else: - return o - - -# A dict mapping module names to weakrefs of _ModuleLock instances. -# Dictionary protected by the global import lock. -_module_locks = {} - -# A dict mapping thread IDs to weakref'ed lists of _ModuleLock instances. -# This maps a thread to the module locks it is blocking on acquiring. The -# values are lists because a single thread could perform a re-entrant import -# and be "in the process" of blocking on locks for more than one module. A -# thread can be "in the process" because a thread cannot actually block on -# acquiring more than one lock but it can have set up bookkeeping that reflects -# that it intends to block on acquiring more than one lock. -# -# The dictionary uses a WeakValueDictionary to avoid keeping unnecessary -# lists around, regardless of GC runs. This way there's no memory leak if -# the list is no longer needed (GH-106176). -_blocking_on = None - - -class _BlockingOnManager: - """A context manager responsible to updating ``_blocking_on``.""" - def __init__(self, thread_id, lock): - self.thread_id = thread_id - self.lock = lock - - def __enter__(self): - """Mark the running thread as waiting for self.lock. via _blocking_on.""" - # Interactions with _blocking_on are *not* protected by the global - # import lock here because each thread only touches the state that it - # owns (state keyed on its thread id). The global import lock is - # re-entrant (i.e., a single thread may take it more than once) so it - # wouldn't help us be correct in the face of re-entrancy either. - - self.blocked_on = _blocking_on.setdefault(self.thread_id, _List()) - self.blocked_on.append(self.lock) - - def __exit__(self, *args, **kwargs): - """Remove self.lock from this thread's _blocking_on list.""" - self.blocked_on.remove(self.lock) - - -class _DeadlockError(RuntimeError): - pass - - - -def _has_deadlocked(target_id, *, seen_ids, candidate_ids, blocking_on): - """Check if 'target_id' is holding the same lock as another thread(s). - - The search within 'blocking_on' starts with the threads listed in - 'candidate_ids'. 'seen_ids' contains any threads that are considered - already traversed in the search. - - Keyword arguments: - target_id -- The thread id to try to reach. - seen_ids -- A set of threads that have already been visited. - candidate_ids -- The thread ids from which to begin. - blocking_on -- A dict representing the thread/blocking-on graph. This may - be the same object as the global '_blocking_on' but it is - a parameter to reduce the impact that global mutable - state has on the result of this function. - """ - if target_id in candidate_ids: - # If we have already reached the target_id, we're done - signal that it - # is reachable. - return True - - # Otherwise, try to reach the target_id from each of the given candidate_ids. - for tid in candidate_ids: - if not (candidate_blocking_on := blocking_on.get(tid)): - # There are no edges out from this node, skip it. - continue - elif tid in seen_ids: - # bpo 38091: the chain of tid's we encounter here eventually leads - # to a fixed point or a cycle, but does not reach target_id. - # This means we would not actually deadlock. This can happen if - # other threads are at the beginning of acquire() below. - return False - seen_ids.add(tid) - - # Follow the edges out from this thread. - edges = [lock.owner for lock in candidate_blocking_on] - if _has_deadlocked(target_id, seen_ids=seen_ids, candidate_ids=edges, - blocking_on=blocking_on): - return True - - return False - - -class _ModuleLock: - """A recursive lock implementation which is able to detect deadlocks - (e.g. thread 1 trying to take locks A then B, and thread 2 trying to - take locks B then A). - """ - - def __init__(self, name): - # Create an RLock for protecting the import process for the - # corresponding module. Since it is an RLock, a single thread will be - # able to take it more than once. This is necessary to support - # re-entrancy in the import system that arises from (at least) signal - # handlers and the garbage collector. Consider the case of: - # - # import foo - # -> ... - # -> importlib._bootstrap._ModuleLock.acquire - # -> ... - # -> <garbage collector> - # -> __del__ - # -> import foo - # -> ... - # -> importlib._bootstrap._ModuleLock.acquire - # -> _BlockingOnManager.__enter__ - # - # If a different thread than the running one holds the lock then the - # thread will have to block on taking the lock, which is what we want - # for thread safety. - self.lock = _thread.RLock() - self.wakeup = _thread.allocate_lock() - - # The name of the module for which this is a lock. - self.name = name - - # Can end up being set to None if this lock is not owned by any thread - # or the thread identifier for the owning thread. - self.owner = None - - # Represent the number of times the owning thread has acquired this lock - # via a list of True. This supports RLock-like ("re-entrant lock") - # behavior, necessary in case a single thread is following a circular - # import dependency and needs to take the lock for a single module - # more than once. - # - # Counts are represented as a list of True because list.append(True) - # and list.pop() are both atomic and thread-safe in CPython and it's hard - # to find another primitive with the same properties. - self.count = [] - - # This is a count of the number of threads that are blocking on - # self.wakeup.acquire() awaiting to get their turn holding this module - # lock. When the module lock is released, if this is greater than - # zero, it is decremented and `self.wakeup` is released one time. The - # intent is that this will let one other thread make more progress on - # acquiring this module lock. This repeats until all the threads have - # gotten a turn. - # - # This is incremented in self.acquire() when a thread notices it is - # going to have to wait for another thread to finish. - # - # See the comment above count for explanation of the representation. - self.waiters = [] - - def has_deadlock(self): - # To avoid deadlocks for concurrent or re-entrant circular imports, - # look at _blocking_on to see if any threads are blocking - # on getting the import lock for any module for which the import lock - # is held by this thread. - return _has_deadlocked( - # Try to find this thread. - target_id=_thread.get_ident(), - seen_ids=set(), - # Start from the thread that holds the import lock for this - # module. - candidate_ids=[self.owner], - # Use the global "blocking on" state. - blocking_on=_blocking_on, - ) - - def acquire(self): - """ - Acquire the module lock. If a potential deadlock is detected, - a _DeadlockError is raised. - Otherwise, the lock is always acquired and True is returned. - """ - tid = _thread.get_ident() - with _BlockingOnManager(tid, self): - while True: - # Protect interaction with state on self with a per-module - # lock. This makes it safe for more than one thread to try to - # acquire the lock for a single module at the same time. - with self.lock: - if self.count == [] or self.owner == tid: - # If the lock for this module is unowned then we can - # take the lock immediately and succeed. If the lock - # for this module is owned by the running thread then - # we can also allow the acquire to succeed. This - # supports circular imports (thread T imports module A - # which imports module B which imports module A). - self.owner = tid - self.count.append(True) - return True - - # At this point we know the lock is held (because count != - # 0) by another thread (because owner != tid). We'll have - # to get in line to take the module lock. - - # But first, check to see if this thread would create a - # deadlock by acquiring this module lock. If it would - # then just stop with an error. - # - # It's not clear who is expected to handle this error. - # There is one handler in _lock_unlock_module but many - # times this method is called when entering the context - # manager _ModuleLockManager instead - so _DeadlockError - # will just propagate up to application code. - # - # This seems to be more than just a hypothetical - - # https://stackoverflow.com/questions/59509154 - # https://github.com/encode/django-rest-framework/issues/7078 - if self.has_deadlock(): - raise _DeadlockError(f'deadlock detected by {self!r}') - - # Check to see if we're going to be able to acquire the - # lock. If we are going to have to wait then increment - # the waiters so `self.release` will know to unblock us - # later on. We do this part non-blockingly so we don't - # get stuck here before we increment waiters. We have - # this extra acquire call (in addition to the one below, - # outside the self.lock context manager) to make sure - # self.wakeup is held when the next acquire is called (so - # we block). This is probably needlessly complex and we - # should just take self.wakeup in the return codepath - # above. - if self.wakeup.acquire(False): - self.waiters.append(None) - - # Now take the lock in a blocking fashion. This won't - # complete until the thread holding this lock - # (self.owner) calls self.release. - self.wakeup.acquire() - - # Taking the lock has served its purpose (making us wait), so we can - # give it up now. We'll take it w/o blocking again on the - # next iteration around this 'while' loop. - self.wakeup.release() - - def release(self): - tid = _thread.get_ident() - with self.lock: - if self.owner != tid: - raise RuntimeError('cannot release un-acquired lock') - assert len(self.count) > 0 - self.count.pop() - if not len(self.count): - self.owner = None - if len(self.waiters) > 0: - self.waiters.pop() - self.wakeup.release() - - def locked(self): - return bool(self.count) - - def __repr__(self): - return f'_ModuleLock({self.name!r}) at {id(self)}' - - -class _DummyModuleLock: - """A simple _ModuleLock equivalent for Python builds without - multi-threading support.""" - - def __init__(self, name): - self.name = name - self.count = 0 - - def acquire(self): - self.count += 1 - return True - - def release(self): - if self.count == 0: - raise RuntimeError('cannot release un-acquired lock') - self.count -= 1 - - def __repr__(self): - return f'_DummyModuleLock({self.name!r}) at {id(self)}' - - -class _ModuleLockManager: - - def __init__(self, name): - self._name = name - self._lock = None - - def __enter__(self): - self._lock = _get_module_lock(self._name) - self._lock.acquire() - - def __exit__(self, *args, **kwargs): - self._lock.release() - - -# The following two functions are for consumption by Python/import.c. - -def _get_module_lock(name): - """Get or create the module lock for a given module name. - - Acquire/release internally the global import lock to protect - _module_locks.""" - - _imp.acquire_lock() - try: - try: - lock = _module_locks[name]() - except KeyError: - lock = None - - if lock is None: - if _thread is None: - lock = _DummyModuleLock(name) - else: - lock = _ModuleLock(name) - - def cb(ref, name=name): - _imp.acquire_lock() - try: - # bpo-31070: Check if another thread created a new lock - # after the previous lock was destroyed - # but before the weakref callback was called. - if _module_locks.get(name) is ref: - del _module_locks[name] - finally: - _imp.release_lock() - - _module_locks[name] = _weakref.ref(lock, cb) - finally: - _imp.release_lock() - - return lock - - -def _lock_unlock_module(name): - """Acquires then releases the module lock for a given module name. - - This is used to ensure a module is completely initialized, in the - event it is being imported by another thread. - """ - lock = _get_module_lock(name) - try: - lock.acquire() - except _DeadlockError: - # Concurrent circular import, we'll accept a partially initialized - # module object. - pass - else: - lock.release() - -# Frame stripping magic ############################################### -def _call_with_frames_removed(f, *args, **kwds): - """remove_importlib_frames in import.c will always remove sequences - of importlib frames that end with a call to this function - - Use it instead of a normal call in places where including the importlib - frames introduces unwanted noise into the traceback (e.g. when executing - module code) - """ - return f(*args, **kwds) - - -def _verbose_message(message, *args, verbosity=1): - """Print the message to stderr if -v/PYTHONVERBOSE is turned on.""" - if sys.flags.verbose >= verbosity: - if not message.startswith(('#', 'import ')): - message = '# ' + message - print(message.format(*args), file=sys.stderr) - - -def _requires_builtin(fxn): - """Decorator to verify the named module is built-in.""" - def _requires_builtin_wrapper(self, fullname): - if fullname not in sys.builtin_module_names: - raise ImportError(f'{fullname!r} is not a built-in module', - name=fullname) - return fxn(self, fullname) - _wrap(_requires_builtin_wrapper, fxn) - return _requires_builtin_wrapper - - -def _requires_frozen(fxn): - """Decorator to verify the named module is frozen.""" - def _requires_frozen_wrapper(self, fullname): - if not _imp.is_frozen(fullname): - raise ImportError(f'{fullname!r} is not a frozen module', - name=fullname) - return fxn(self, fullname) - _wrap(_requires_frozen_wrapper, fxn) - return _requires_frozen_wrapper - - -# Typically used by loader classes as a method replacement. -def _load_module_shim(self, fullname): - """Load the specified module into sys.modules and return it. - - This method is deprecated. Use loader.exec_module() instead. - - """ - msg = ("the load_module() method is deprecated and slated for removal in " - "Python 3.15; use exec_module() instead") - _warnings.warn(msg, DeprecationWarning) - spec = spec_from_loader(fullname, self) - if fullname in sys.modules: - module = sys.modules[fullname] - _exec(spec, module) - return sys.modules[fullname] - else: - return _load(spec) - -# Module specifications ####################################################### - -def _module_repr(module): - """The implementation of ModuleType.__repr__().""" - loader = getattr(module, '__loader__', None) - if spec := getattr(module, "__spec__", None): - return _module_repr_from_spec(spec) - # Fall through to a catch-all which always succeeds. - try: - name = module.__name__ - except AttributeError: - name = '?' - try: - filename = module.__file__ - except AttributeError: - if loader is None: - return f'<module {name!r}>' - else: - return f'<module {name!r} ({loader!r})>' - else: - return f'<module {name!r} from {filename!r}>' - - -class ModuleSpec: - """The specification for a module, used for loading. - - A module's spec is the source for information about the module. For - data associated with the module, including source, use the spec's - loader. - - `name` is the absolute name of the module. `loader` is the loader - to use when loading the module. `parent` is the name of the - package the module is in. The parent is derived from the name. - - `is_package` determines if the module is considered a package or - not. On modules this is reflected by the `__path__` attribute. - - `origin` is the specific location used by the loader from which to - load the module, if that information is available. When filename is - set, origin will match. - - `has_location` indicates that a spec's "origin" reflects a location. - When this is True, `__file__` attribute of the module is set. - - `cached` is the location of the cached bytecode file, if any. It - corresponds to the `__cached__` attribute. - - `submodule_search_locations` is the sequence of path entries to - search when importing submodules. If set, is_package should be - True--and False otherwise. - - Packages are simply modules that (may) have submodules. If a spec - has a non-None value in `submodule_search_locations`, the import - system will consider modules loaded from the spec as packages. - - Only finders (see importlib.abc.MetaPathFinder and - importlib.abc.PathEntryFinder) should modify ModuleSpec instances. - - """ - - def __init__(self, name, loader, *, origin=None, loader_state=None, - is_package=None): - self.name = name - self.loader = loader - self.origin = origin - self.loader_state = loader_state - self.submodule_search_locations = [] if is_package else None - self._uninitialized_submodules = [] - - # file-location attributes - self._set_fileattr = False - self._cached = None - - def __repr__(self): - args = [f'name={self.name!r}', f'loader={self.loader!r}'] - if self.origin is not None: - args.append(f'origin={self.origin!r}') - if self.submodule_search_locations is not None: - args.append(f'submodule_search_locations={self.submodule_search_locations}') - return f'{self.__class__.__name__}({", ".join(args)})' - - def __eq__(self, other): - smsl = self.submodule_search_locations - try: - return (self.name == other.name and - self.loader == other.loader and - self.origin == other.origin and - smsl == other.submodule_search_locations and - self.cached == other.cached and - self.has_location == other.has_location) - except AttributeError: - return NotImplemented - - @property - def cached(self): - if self._cached is None: - if self.origin is not None and self._set_fileattr: - if _bootstrap_external is None: - raise NotImplementedError - self._cached = _bootstrap_external._get_cached(self.origin) - return self._cached - - @cached.setter - def cached(self, cached): - self._cached = cached - - @property - def parent(self): - """The name of the module's parent.""" - if self.submodule_search_locations is None: - return self.name.rpartition('.')[0] - else: - return self.name - - @property - def has_location(self): - return self._set_fileattr - - @has_location.setter - def has_location(self, value): - self._set_fileattr = bool(value) - - -def spec_from_loader(name, loader, *, origin=None, is_package=None): - """Return a module spec based on various loader methods.""" - if origin is None: - origin = getattr(loader, '_ORIGIN', None) - - if not origin and hasattr(loader, 'get_filename'): - if _bootstrap_external is None: - raise NotImplementedError - spec_from_file_location = _bootstrap_external.spec_from_file_location - - if is_package is None: - return spec_from_file_location(name, loader=loader) - search = [] if is_package else None - return spec_from_file_location(name, loader=loader, - submodule_search_locations=search) - - if is_package is None: - if hasattr(loader, 'is_package'): - try: - is_package = loader.is_package(name) - except ImportError: - is_package = None # aka, undefined - else: - # the default - is_package = False - - return ModuleSpec(name, loader, origin=origin, is_package=is_package) - - -def _spec_from_module(module, loader=None, origin=None): - # This function is meant for use in _setup(). - try: - spec = module.__spec__ - except AttributeError: - pass - else: - if spec is not None: - return spec - - name = module.__name__ - if loader is None: - try: - loader = module.__loader__ - except AttributeError: - # loader will stay None. - pass - try: - location = module.__file__ - except AttributeError: - location = None - if origin is None: - if loader is not None: - origin = getattr(loader, '_ORIGIN', None) - if not origin and location is not None: - origin = location - try: - cached = module.__cached__ - except AttributeError: - cached = None - try: - submodule_search_locations = list(module.__path__) - except AttributeError: - submodule_search_locations = None - - spec = ModuleSpec(name, loader, origin=origin) - spec._set_fileattr = False if location is None else (origin == location) - spec.cached = cached - spec.submodule_search_locations = submodule_search_locations - return spec - - -def _init_module_attrs(spec, module, *, override=False): - # The passed-in module may be not support attribute assignment, - # in which case we simply don't set the attributes. - # __name__ - if (override or getattr(module, '__name__', None) is None): - try: - module.__name__ = spec.name - except AttributeError: - pass - # __loader__ - if override or getattr(module, '__loader__', None) is None: - loader = spec.loader - if loader is None: - # A backward compatibility hack. - if spec.submodule_search_locations is not None: - if _bootstrap_external is None: - raise NotImplementedError - NamespaceLoader = _bootstrap_external.NamespaceLoader - - loader = NamespaceLoader.__new__(NamespaceLoader) - loader._path = spec.submodule_search_locations - spec.loader = loader - # While the docs say that module.__file__ is not set for - # built-in modules, and the code below will avoid setting it if - # spec.has_location is false, this is incorrect for namespace - # packages. Namespace packages have no location, but their - # __spec__.origin is None, and thus their module.__file__ - # should also be None for consistency. While a bit of a hack, - # this is the best place to ensure this consistency. - # - # See # https://docs.python.org/3/library/importlib.html#importlib.abc.Loader.load_module - # and bpo-32305 - module.__file__ = None - try: - module.__loader__ = loader - except AttributeError: - pass - # __package__ - if override or getattr(module, '__package__', None) is None: - try: - module.__package__ = spec.parent - except AttributeError: - pass - # __spec__ - try: - module.__spec__ = spec - except AttributeError: - pass - # __path__ - if override or getattr(module, '__path__', None) is None: - if spec.submodule_search_locations is not None: - # XXX We should extend __path__ if it's already a list. - try: - module.__path__ = spec.submodule_search_locations - except AttributeError: - pass - # __file__/__cached__ - if spec.has_location: - if override or getattr(module, '__file__', None) is None: - try: - module.__file__ = spec.origin - except AttributeError: - pass - - if override or getattr(module, '__cached__', None) is None: - if spec.cached is not None: - try: - module.__cached__ = spec.cached - except AttributeError: - pass - return module - - -def module_from_spec(spec): - """Create a module based on the provided spec.""" - # Typically loaders will not implement create_module(). - module = None - if hasattr(spec.loader, 'create_module'): - # If create_module() returns `None` then it means default - # module creation should be used. - module = spec.loader.create_module(spec) - elif hasattr(spec.loader, 'exec_module'): - raise ImportError('loaders that define exec_module() ' - 'must also define create_module()') - if module is None: - module = _new_module(spec.name) - _init_module_attrs(spec, module) - return module - - -def _module_repr_from_spec(spec): - """Return the repr to use for the module.""" - name = '?' if spec.name is None else spec.name - if spec.origin is None: - loader = spec.loader - if loader is None: - return f'<module {name!r}>' - elif ( - _bootstrap_external is not None - and isinstance(loader, _bootstrap_external.NamespaceLoader) - ): - return f'<module {name!r} (namespace) from {list(loader._path)}>' - else: - return f'<module {name!r} ({loader!r})>' - else: - if spec.has_location: - return f'<module {name!r} from {spec.origin!r}>' - else: - return f'<module {spec.name!r} ({spec.origin})>' - - -# Used by importlib.reload() and _load_module_shim(). -def _exec(spec, module): - """Execute the spec's specified module in an existing module's namespace.""" - name = spec.name - with _ModuleLockManager(name): - if sys.modules.get(name) is not module: - msg = f'module {name!r} not in sys.modules' - raise ImportError(msg, name=name) - try: - if spec.loader is None: - if spec.submodule_search_locations is None: - raise ImportError('missing loader', name=spec.name) - # Namespace package. - _init_module_attrs(spec, module, override=True) - else: - _init_module_attrs(spec, module, override=True) - if not hasattr(spec.loader, 'exec_module'): - msg = (f"{_object_name(spec.loader)}.exec_module() not found; " - "falling back to load_module()") - _warnings.warn(msg, ImportWarning) - spec.loader.load_module(name) - else: - spec.loader.exec_module(module) - finally: - # Update the order of insertion into sys.modules for module - # clean-up at shutdown. - module = sys.modules.pop(spec.name) - sys.modules[spec.name] = module - return module - - -def _load_backward_compatible(spec): - # It is assumed that all callers have been warned about using load_module() - # appropriately before calling this function. - try: - spec.loader.load_module(spec.name) - except: - if spec.name in sys.modules: - module = sys.modules.pop(spec.name) - sys.modules[spec.name] = module - raise - # The module must be in sys.modules at this point! - # Move it to the end of sys.modules. - module = sys.modules.pop(spec.name) - sys.modules[spec.name] = module - if getattr(module, '__loader__', None) is None: - try: - module.__loader__ = spec.loader - except AttributeError: - pass - if getattr(module, '__package__', None) is None: - try: - # Since module.__path__ may not line up with - # spec.submodule_search_paths, we can't necessarily rely - # on spec.parent here. - module.__package__ = module.__name__ - if not hasattr(module, '__path__'): - module.__package__ = spec.name.rpartition('.')[0] - except AttributeError: - pass - if getattr(module, '__spec__', None) is None: - try: - module.__spec__ = spec - except AttributeError: - pass - return module - -def _load_unlocked(spec): - # A helper for direct use by the import system. - if spec.loader is not None: - # Not a namespace package. - if not hasattr(spec.loader, 'exec_module'): - msg = (f"{_object_name(spec.loader)}.exec_module() not found; " - "falling back to load_module()") - _warnings.warn(msg, ImportWarning) - return _load_backward_compatible(spec) - - module = module_from_spec(spec) - - # This must be done before putting the module in sys.modules - # (otherwise an optimization shortcut in import.c becomes - # wrong). - spec._initializing = True - try: - sys.modules[spec.name] = module - try: - if spec.loader is None: - if spec.submodule_search_locations is None: - raise ImportError('missing loader', name=spec.name) - # A namespace package so do nothing. - else: - spec.loader.exec_module(module) - except: - try: - del sys.modules[spec.name] - except KeyError: - pass - raise - # Move the module to the end of sys.modules. - # We don't ensure that the import-related module attributes get - # set in the sys.modules replacement case. Such modules are on - # their own. - module = sys.modules.pop(spec.name) - sys.modules[spec.name] = module - _verbose_message('import {!r} # {!r}', spec.name, spec.loader) - finally: - spec._initializing = False - - return module - -# A method used during testing of _load_unlocked() and by -# _load_module_shim(). -def _load(spec): - """Return a new module object, loaded by the spec's loader. - - The module is not added to its parent. - - If a module is already in sys.modules, that existing module gets - clobbered. - - """ - with _ModuleLockManager(spec.name): - return _load_unlocked(spec) - - -# Loaders ##################################################################### - -class BuiltinImporter: - - """Meta path import for built-in modules. - - All methods are either class or static methods to avoid the need to - instantiate the class. - - """ - - _ORIGIN = "built-in" - - @classmethod - def find_spec(cls, fullname, path=None, target=None): - if _imp.is_builtin(fullname): - return spec_from_loader(fullname, cls, origin=cls._ORIGIN) - else: - return None - - @staticmethod - def create_module(spec): - """Create a built-in module""" - if spec.name not in sys.builtin_module_names: - raise ImportError(f'{spec.name!r} is not a built-in module', - name=spec.name) - return _call_with_frames_removed(_imp.create_builtin, spec) - - @staticmethod - def exec_module(module): - """Exec a built-in module""" - _call_with_frames_removed(_imp.exec_builtin, module) - - @classmethod - @_requires_builtin - def get_code(cls, fullname): - """Return None as built-in modules do not have code objects.""" - return None - - @classmethod - @_requires_builtin - def get_source(cls, fullname): - """Return None as built-in modules do not have source code.""" - return None - - @classmethod - @_requires_builtin - def is_package(cls, fullname): - """Return False as built-in modules are never packages.""" - return False - - load_module = classmethod(_load_module_shim) - - -class FrozenImporter: - - """Meta path import for frozen modules. - - All methods are either class or static methods to avoid the need to - instantiate the class. - - """ - - _ORIGIN = "frozen" - - @classmethod - def _fix_up_module(cls, module): - spec = module.__spec__ - state = spec.loader_state - if state is None: - # The module is missing FrozenImporter-specific values. - - # Fix up the spec attrs. - origname = vars(module).pop('__origname__', None) - assert origname, 'see PyImport_ImportFrozenModuleObject()' - ispkg = hasattr(module, '__path__') - assert _imp.is_frozen_package(module.__name__) == ispkg, ispkg - filename, pkgdir = cls._resolve_filename(origname, spec.name, ispkg) - spec.loader_state = type(sys.implementation)( - filename=filename, - origname=origname, - ) - __path__ = spec.submodule_search_locations - if ispkg: - assert __path__ == [], __path__ - if pkgdir: - spec.submodule_search_locations.insert(0, pkgdir) - else: - assert __path__ is None, __path__ - - # Fix up the module attrs (the bare minimum). - assert not hasattr(module, '__file__'), module.__file__ - if filename: - try: - module.__file__ = filename - except AttributeError: - pass - if ispkg: - if module.__path__ != __path__: - assert module.__path__ == [], module.__path__ - module.__path__.extend(__path__) - else: - # These checks ensure that _fix_up_module() is only called - # in the right places. - __path__ = spec.submodule_search_locations - ispkg = __path__ is not None - # Check the loader state. - assert sorted(vars(state)) == ['filename', 'origname'], state - if state.origname: - # The only frozen modules with "origname" set are stdlib modules. - (__file__, pkgdir, - ) = cls._resolve_filename(state.origname, spec.name, ispkg) - assert state.filename == __file__, (state.filename, __file__) - if pkgdir: - assert __path__ == [pkgdir], (__path__, pkgdir) - else: - assert __path__ == ([] if ispkg else None), __path__ - else: - __file__ = None - assert state.filename is None, state.filename - assert __path__ == ([] if ispkg else None), __path__ - # Check the file attrs. - if __file__: - assert hasattr(module, '__file__') - assert module.__file__ == __file__, (module.__file__, __file__) - else: - assert not hasattr(module, '__file__'), module.__file__ - if ispkg: - assert hasattr(module, '__path__') - assert module.__path__ == __path__, (module.__path__, __path__) - else: - assert not hasattr(module, '__path__'), module.__path__ - assert not spec.has_location - - @classmethod - def _resolve_filename(cls, fullname, alias=None, ispkg=False): - if not fullname or not getattr(sys, '_stdlib_dir', None): - return None, None - try: - sep = cls._SEP - except AttributeError: - sep = cls._SEP = '\\' if sys.platform == 'win32' else '/' - - if fullname != alias: - if fullname.startswith('<'): - fullname = fullname[1:] - if not ispkg: - fullname = f'{fullname}.__init__' - else: - ispkg = False - relfile = fullname.replace('.', sep) - if ispkg: - pkgdir = f'{sys._stdlib_dir}{sep}{relfile}' - filename = f'{pkgdir}{sep}__init__.py' - else: - pkgdir = None - filename = f'{sys._stdlib_dir}{sep}{relfile}.py' - return filename, pkgdir - - @classmethod - def find_spec(cls, fullname, path=None, target=None): - info = _call_with_frames_removed(_imp.find_frozen, fullname) - if info is None: - return None - # We get the marshaled data in exec_module() (the loader - # part of the importer), instead of here (the finder part). - # The loader is the usual place to get the data that will - # be loaded into the module. (For example, see _LoaderBasics - # in _bootstrap_external.py.) Most importantly, this importer - # is simpler if we wait to get the data. - # However, getting as much data in the finder as possible - # to later load the module is okay, and sometimes important. - # (That's why ModuleSpec.loader_state exists.) This is - # especially true if it avoids throwing away expensive data - # the loader would otherwise duplicate later and can be done - # efficiently. In this case it isn't worth it. - _, ispkg, origname = info - spec = spec_from_loader(fullname, cls, - origin=cls._ORIGIN, - is_package=ispkg) - filename, pkgdir = cls._resolve_filename(origname, fullname, ispkg) - spec.loader_state = type(sys.implementation)( - filename=filename, - origname=origname, - ) - if pkgdir: - spec.submodule_search_locations.insert(0, pkgdir) - return spec - - @staticmethod - def create_module(spec): - """Set __file__, if able.""" - module = _new_module(spec.name) - try: - filename = spec.loader_state.filename - except AttributeError: - pass - else: - if filename: - module.__file__ = filename - return module - - @staticmethod - def exec_module(module): - spec = module.__spec__ - name = spec.name - code = _call_with_frames_removed(_imp.get_frozen_object, name) - exec(code, module.__dict__) - - @classmethod - def load_module(cls, fullname): - """Load a frozen module. - - This method is deprecated. Use exec_module() instead. - - """ - # Warning about deprecation implemented in _load_module_shim(). - module = _load_module_shim(cls, fullname) - info = _imp.find_frozen(fullname) - assert info is not None - _, ispkg, origname = info - module.__origname__ = origname - vars(module).pop('__file__', None) - if ispkg: - module.__path__ = [] - cls._fix_up_module(module) - return module - - @classmethod - @_requires_frozen - def get_code(cls, fullname): - """Return the code object for the frozen module.""" - return _imp.get_frozen_object(fullname) - - @classmethod - @_requires_frozen - def get_source(cls, fullname): - """Return None as frozen modules do not have source code.""" - return None - - @classmethod - @_requires_frozen - def is_package(cls, fullname): - """Return True if the frozen module is a package.""" - return _imp.is_frozen_package(fullname) - - -# Import itself ############################################################### - -class _ImportLockContext: - - """Context manager for the import lock.""" - - def __enter__(self): - """Acquire the import lock.""" - _imp.acquire_lock() - - def __exit__(self, exc_type, exc_value, exc_traceback): - """Release the import lock regardless of any raised exceptions.""" - _imp.release_lock() - - -def _resolve_name(name, package, level): - """Resolve a relative module name to an absolute one.""" - bits = package.rsplit('.', level - 1) - if len(bits) < level: - raise ImportError('attempted relative import beyond top-level package') - base = bits[0] - return f'{base}.{name}' if name else base - - -def _find_spec(name, path, target=None): - """Find a module's spec.""" - meta_path = sys.meta_path - if meta_path is None: - raise ImportError("sys.meta_path is None, Python is likely " - "shutting down") - - # gh-130094: Copy sys.meta_path so that we have a consistent view of the - # list while iterating over it. - meta_path = list(meta_path) - if not meta_path: - _warnings.warn('sys.meta_path is empty', ImportWarning) - - # We check sys.modules here for the reload case. While a passed-in - # target will usually indicate a reload there is no guarantee, whereas - # sys.modules provides one. - is_reload = name in sys.modules - for finder in meta_path: - with _ImportLockContext(): - try: - find_spec = finder.find_spec - except AttributeError: - continue - else: - spec = find_spec(name, path, target) - if spec is not None: - # The parent import may have already imported this module. - if not is_reload and name in sys.modules: - module = sys.modules[name] - try: - __spec__ = module.__spec__ - except AttributeError: - # We use the found spec since that is the one that - # we would have used if the parent module hadn't - # beaten us to the punch. - return spec - else: - if __spec__ is None: - return spec - else: - return __spec__ - else: - return spec - else: - return None - - -def _sanity_check(name, package, level): - """Verify arguments are "sane".""" - if not isinstance(name, str): - raise TypeError(f'module name must be str, not {type(name)}') - if level < 0: - raise ValueError('level must be >= 0') - if level > 0: - if not isinstance(package, str): - raise TypeError('__package__ not set to a string') - elif not package: - raise ImportError('attempted relative import with no known parent ' - 'package') - if not name and level == 0: - raise ValueError('Empty module name') - - -_ERR_MSG_PREFIX = 'No module named ' - -def _find_and_load_unlocked(name, import_): - path = None - parent = name.rpartition('.')[0] - parent_spec = None - if parent: - if parent not in sys.modules: - _call_with_frames_removed(import_, parent) - # Crazy side-effects! - module = sys.modules.get(name) - if module is not None: - return module - parent_module = sys.modules[parent] - try: - path = parent_module.__path__ - except AttributeError: - msg = f'{_ERR_MSG_PREFIX}{name!r}; {parent!r} is not a package' - raise ModuleNotFoundError(msg, name=name) from None - parent_spec = parent_module.__spec__ - if getattr(parent_spec, '_initializing', False): - _call_with_frames_removed(import_, parent) - # Crazy side-effects (again)! - module = sys.modules.get(name) - if module is not None: - return module - child = name.rpartition('.')[2] - spec = _find_spec(name, path) - if spec is None: - raise ModuleNotFoundError(f'{_ERR_MSG_PREFIX}{name!r}', name=name) - else: - if parent_spec: - # Temporarily add child we are currently importing to parent's - # _uninitialized_submodules for circular import tracking. - parent_spec._uninitialized_submodules.append(child) - try: - module = _load_unlocked(spec) - finally: - if parent_spec: - parent_spec._uninitialized_submodules.pop() - if parent: - # Set the module as an attribute on its parent. - parent_module = sys.modules[parent] - try: - setattr(parent_module, child, module) - except AttributeError: - msg = f"Cannot set an attribute on {parent!r} for child module {child!r}" - _warnings.warn(msg, ImportWarning) - return module - - -_NEEDS_LOADING = object() - - -def _find_and_load(name, import_): - """Find and load the module.""" - - # Optimization: we avoid unneeded module locking if the module - # already exists in sys.modules and is fully initialized. - module = sys.modules.get(name, _NEEDS_LOADING) - if (module is _NEEDS_LOADING or - getattr(getattr(module, "__spec__", None), "_initializing", False)): - with _ModuleLockManager(name): - module = sys.modules.get(name, _NEEDS_LOADING) - if module is _NEEDS_LOADING: - return _find_and_load_unlocked(name, import_) - - # Optimization: only call _bootstrap._lock_unlock_module() if - # module.__spec__._initializing is True. - # NOTE: because of this, initializing must be set *before* - # putting the new module in sys.modules. - _lock_unlock_module(name) - else: - # Verify the module is still in sys.modules. Another thread may have - # removed it (due to import failure) between our sys.modules.get() - # above and the _initializing check. If removed, we retry the import - # to preserve normal semantics: the caller gets the exception from - # the actual import failure rather than a synthetic error. - if sys.modules.get(name) is not module: - return _find_and_load(name, import_) - - if module is None: - message = f'import of {name} halted; None in sys.modules' - raise ModuleNotFoundError(message, name=name) - - return module - - -def _gcd_import(name, package=None, level=0): - """Import and return the module based on its name, the package the call is - being made from, and the level adjustment. - - This function represents the greatest common denominator of functionality - between import_module and __import__. This includes setting __package__ if - the loader did not. - - """ - _sanity_check(name, package, level) - if level > 0: - name = _resolve_name(name, package, level) - return _find_and_load(name, _gcd_import) - - -def _handle_fromlist(module, fromlist, import_, *, recursive=False): - """Figure out what __import__ should return. - - The import_ parameter is a callable which takes the name of module to - import. It is required to decouple the function from assuming importlib's - import implementation is desired. - - """ - # The hell that is fromlist ... - # If a package was imported, try to import stuff from fromlist. - for x in fromlist: - if not isinstance(x, str): - if recursive: - where = module.__name__ + '.__all__' - else: - where = "``from list''" - raise TypeError(f"Item in {where} must be str, " - f"not {type(x).__name__}") - elif x == '*': - if not recursive and hasattr(module, '__all__'): - _handle_fromlist(module, module.__all__, import_, - recursive=True) - elif not hasattr(module, x): - from_name = f'{module.__name__}.{x}' - try: - _call_with_frames_removed(import_, from_name) - except ModuleNotFoundError as exc: - # Backwards-compatibility dictates we ignore failed - # imports triggered by fromlist for modules that don't - # exist. - if (exc.name == from_name and - sys.modules.get(from_name, _NEEDS_LOADING) is not None): - continue - raise - return module - - -def _calc___package__(globals): - """Calculate what __package__ should be. - - __package__ is not guaranteed to be defined or could be set to None - to represent that its proper value is unknown. - - """ - package = globals.get('__package__') - spec = globals.get('__spec__') - if package is not None: - if spec is not None and package != spec.parent: - _warnings.warn("__package__ != __spec__.parent " - f"({package!r} != {spec.parent!r})", - DeprecationWarning, stacklevel=3) - return package - elif spec is not None: - return spec.parent - else: - _warnings.warn("can't resolve package from __spec__ or __package__, " - "falling back on __name__ and __path__", - ImportWarning, stacklevel=3) - package = globals['__name__'] - if '__path__' not in globals: - package = package.rpartition('.')[0] - return package - - -def __import__(name, globals=None, locals=None, fromlist=(), level=0): - """Import a module. - - The 'globals' argument is used to infer where the import is occurring from - to handle relative imports. The 'locals' argument is ignored. The - 'fromlist' argument specifies what should exist as attributes on the module - being imported (e.g. ``from module import <fromlist>``). The 'level' - argument represents the package location to import from in a relative - import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). - - """ - if level == 0: - module = _gcd_import(name) - else: - globals_ = globals if globals is not None else {} - package = _calc___package__(globals_) - module = _gcd_import(name, package, level) - if not fromlist: - # Return up to the first dot in 'name'. This is complicated by the fact - # that 'name' may be relative. - if level == 0: - return _gcd_import(name.partition('.')[0]) - elif not name: - return module - else: - # Figure out where to slice the module's name up to the first dot - # in 'name'. - cut_off = len(name) - len(name.partition('.')[0]) - # Slice end needs to be positive to alleviate need to special-case - # when ``'.' not in name``. - return sys.modules[module.__name__[:len(module.__name__)-cut_off]] - elif hasattr(module, '__path__'): - return _handle_fromlist(module, fromlist, _gcd_import) - else: - return module - - -def _builtin_from_name(name): - spec = BuiltinImporter.find_spec(name) - if spec is None: - raise ImportError('no built-in module named ' + name) - return _load_unlocked(spec) - - -def _setup(sys_module, _imp_module): - """Setup importlib by importing needed built-in modules and injecting them - into the global namespace. - - As sys is needed for sys.modules access and _imp is needed to load built-in - modules, those two modules must be explicitly passed in. - - """ - global _imp, sys, _blocking_on - _imp = _imp_module - sys = sys_module - - # Set up the spec for existing builtin/frozen modules. - module_type = type(sys) - for name, module in sys.modules.items(): - if isinstance(module, module_type): - if name in sys.builtin_module_names: - loader = BuiltinImporter - elif _imp.is_frozen(name): - loader = FrozenImporter - else: - continue - spec = _spec_from_module(module, loader) - _init_module_attrs(spec, module) - if loader is FrozenImporter: - loader._fix_up_module(module) - - # Directly load built-in modules needed during bootstrap. - self_module = sys.modules[__name__] - for builtin_name in ('_thread', '_warnings', '_weakref'): - if builtin_name not in sys.modules: - builtin_module = _builtin_from_name(builtin_name) - else: - builtin_module = sys.modules[builtin_name] - setattr(self_module, builtin_name, builtin_module) - - # Instantiation requires _weakref to have been set. - _blocking_on = _WeakValueDictionary() - - -def _install(sys_module, _imp_module): - """Install importers for builtin and frozen modules""" - _setup(sys_module, _imp_module) - - sys.meta_path.append(BuiltinImporter) - sys.meta_path.append(FrozenImporter) - - -def _install_external_importers(): - """Install importers that require external filesystem access""" - global _bootstrap_external - import _frozen_importlib_external - _bootstrap_external = _frozen_importlib_external - _frozen_importlib_external._install(sys.modules[__name__]) diff --git a/Python314_4_x86_Template/Lib/importlib/_bootstrap_external.py b/Python314_4_x86_Template/Lib/importlib/_bootstrap_external.py deleted file mode 100644 index 6a828ae75..000000000 --- a/Python314_4_x86_Template/Lib/importlib/_bootstrap_external.py +++ /dev/null @@ -1,1562 +0,0 @@ -"""Core implementation of path-based import. - -This module is NOT meant to be directly imported! It has been designed such -that it can be bootstrapped into Python as the implementation of import. As -such it requires the injection of specific modules and attributes in order to -work. One should use importlib as the public-facing version of this module. - -""" -# IMPORTANT: Whenever making changes to this module, be sure to run a top-level -# `make regen-importlib` followed by `make` in order to get the frozen version -# of the module updated. Not doing so will result in the Makefile to fail for -# all others who don't have a ./python around to freeze the module in the early -# stages of compilation. -# - -# See importlib._setup() for what is injected into the global namespace. - -# When editing this code be aware that code executed at import time CANNOT -# reference any injected objects! This includes not only global code but also -# anything specified at the class level. - -# Module injected manually by _set_bootstrap_module() -_bootstrap = None - -# Import builtin modules -import _imp -import _io -import sys -import _warnings -import marshal - - -_MS_WINDOWS = (sys.platform == 'win32') -if _MS_WINDOWS: - import nt as _os - import winreg -else: - import posix as _os - - -if _MS_WINDOWS: - path_separators = ['\\', '/'] -else: - path_separators = ['/'] -# Assumption made in _path_join() -assert all(len(sep) == 1 for sep in path_separators) -path_sep = path_separators[0] -path_sep_tuple = tuple(path_separators) -path_separators = ''.join(path_separators) -_pathseps_with_colon = {f':{s}' for s in path_separators} - - -# Bootstrap-related code ###################################################### -_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', -_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin', 'ios', 'tvos', 'watchos' -_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY - + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) - - -def _make_relax_case(): - if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): - if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY): - key = 'PYTHONCASEOK' - else: - key = b'PYTHONCASEOK' - - def _relax_case(): - """True if filenames must be checked case-insensitively and ignore environment flags are not set.""" - return not sys.flags.ignore_environment and key in _os.environ - else: - def _relax_case(): - """True if filenames must be checked case-insensitively.""" - return False - return _relax_case - -_relax_case = _make_relax_case() - - -def _pack_uint32(x): - """Convert a 32-bit integer to little-endian.""" - return (int(x) & 0xFFFFFFFF).to_bytes(4, 'little') - - -def _unpack_uint64(data): - """Convert 8 bytes in little-endian to an integer.""" - assert len(data) == 8 - return int.from_bytes(data, 'little') - -def _unpack_uint32(data): - """Convert 4 bytes in little-endian to an integer.""" - assert len(data) == 4 - return int.from_bytes(data, 'little') - -def _unpack_uint16(data): - """Convert 2 bytes in little-endian to an integer.""" - assert len(data) == 2 - return int.from_bytes(data, 'little') - - -if _MS_WINDOWS: - def _path_join(*path_parts): - """Replacement for os.path.join().""" - if not path_parts: - return "" - if len(path_parts) == 1: - return path_parts[0] - root = "" - path = [] - for new_root, tail in map(_os._path_splitroot, path_parts): - if new_root.startswith(path_sep_tuple) or new_root.endswith(path_sep_tuple): - root = new_root.rstrip(path_separators) or root - path = [path_sep + tail] - elif new_root.endswith(':'): - if root.casefold() != new_root.casefold(): - # Drive relative paths have to be resolved by the OS, so we reset the - # tail but do not add a path_sep prefix. - root = new_root - path = [tail] - else: - path.append(tail) - else: - root = new_root or root - path.append(tail) - path = [p.rstrip(path_separators) for p in path if p] - if len(path) == 1 and not path[0]: - # Avoid losing the root's trailing separator when joining with nothing - return root + path_sep - return root + path_sep.join(path) - -else: - def _path_join(*path_parts): - """Replacement for os.path.join().""" - return path_sep.join([part.rstrip(path_separators) - for part in path_parts if part]) - - -def _path_split(path): - """Replacement for os.path.split().""" - i = max(path.rfind(p) for p in path_separators) - if i < 0: - return '', path - return path[:i], path[i + 1:] - - -def _path_stat(path): - """Stat the path. - - Made a separate function to make it easier to override in experiments - (e.g. cache stat results). - - """ - return _os.stat(path) - - -def _path_is_mode_type(path, mode): - """Test whether the path is the specified mode type.""" - try: - stat_info = _path_stat(path) - except OSError: - return False - return (stat_info.st_mode & 0o170000) == mode - - -def _path_isfile(path): - """Replacement for os.path.isfile.""" - return _path_is_mode_type(path, 0o100000) - - -def _path_isdir(path): - """Replacement for os.path.isdir.""" - if not path: - path = _os.getcwd() - return _path_is_mode_type(path, 0o040000) - - -if _MS_WINDOWS: - def _path_isabs(path): - """Replacement for os.path.isabs.""" - if not path: - return False - root = _os._path_splitroot(path)[0].replace('/', '\\') - return len(root) > 1 and (root.startswith('\\\\') or root.endswith('\\')) - -else: - def _path_isabs(path): - """Replacement for os.path.isabs.""" - return path.startswith(path_separators) - - -def _path_abspath(path): - """Replacement for os.path.abspath.""" - if not _path_isabs(path): - for sep in path_separators: - path = path.removeprefix(f".{sep}") - return _path_join(_os.getcwd(), path) - else: - return path - - -def _write_atomic(path, data, mode=0o666): - """Best-effort function to write data to a path atomically. - Be prepared to handle a FileExistsError if concurrent writing of the - temporary file is attempted.""" - # id() is used to generate a pseudo-random filename. - path_tmp = f'{path}.{id(path)}' - fd = _os.open(path_tmp, - _os.O_EXCL | _os.O_CREAT | _os.O_WRONLY, mode & 0o666) - try: - # We first write data to a temporary file, and then use os.replace() to - # perform an atomic rename. - with _io.open(fd, 'wb') as file: - file.write(data) - _os.replace(path_tmp, path) - except OSError: - try: - _os.unlink(path_tmp) - except OSError: - pass - raise - - -_code_type = type(_write_atomic.__code__) - -MAGIC_NUMBER = _imp.pyc_magic_number_token.to_bytes(4, 'little') - -_PYCACHE = '__pycache__' -_OPT = 'opt-' - -SOURCE_SUFFIXES = ['.py'] -if _MS_WINDOWS: - SOURCE_SUFFIXES.append('.pyw') - -EXTENSION_SUFFIXES = _imp.extension_suffixes() - -BYTECODE_SUFFIXES = ['.pyc'] -# Deprecated. -DEBUG_BYTECODE_SUFFIXES = OPTIMIZED_BYTECODE_SUFFIXES = BYTECODE_SUFFIXES - -def cache_from_source(path, debug_override=None, *, optimization=None): - """Given the path to a .py file, return the path to its .pyc file. - - The .py file does not need to exist; this simply returns the path to the - .pyc file calculated as if the .py file were imported. - - The 'optimization' parameter controls the presumed optimization level of - the bytecode file. If 'optimization' is not None, the string representation - of the argument is taken and verified to be alphanumeric (else ValueError - is raised). - - The debug_override parameter is deprecated. If debug_override is not None, - a True value is the same as setting 'optimization' to the empty string - while a False value is equivalent to setting 'optimization' to '1'. - - If sys.implementation.cache_tag is None then NotImplementedError is raised. - - """ - if debug_override is not None: - _warnings.warn('the debug_override parameter is deprecated; use ' - "'optimization' instead", DeprecationWarning) - if optimization is not None: - message = 'debug_override or optimization must be set to None' - raise TypeError(message) - optimization = '' if debug_override else 1 - path = _os.fspath(path) - head, tail = _path_split(path) - base, sep, rest = tail.rpartition('.') - tag = sys.implementation.cache_tag - if tag is None: - raise NotImplementedError('sys.implementation.cache_tag is None') - almost_filename = ''.join([(base if base else rest), sep, tag]) - if optimization is None: - if sys.flags.optimize == 0: - optimization = '' - else: - optimization = sys.flags.optimize - optimization = str(optimization) - if optimization != '': - if not optimization.isalnum(): - raise ValueError(f'{optimization!r} is not alphanumeric') - almost_filename = f'{almost_filename}.{_OPT}{optimization}' - filename = almost_filename + BYTECODE_SUFFIXES[0] - if sys.pycache_prefix is not None: - # We need an absolute path to the py file to avoid the possibility of - # collisions within sys.pycache_prefix, if someone has two different - # `foo/bar.py` on their system and they import both of them using the - # same sys.pycache_prefix. Let's say sys.pycache_prefix is - # `C:\Bytecode`; the idea here is that if we get `Foo\Bar`, we first - # make it absolute (`C:\Somewhere\Foo\Bar`), then make it root-relative - # (`Somewhere\Foo\Bar`), so we end up placing the bytecode file in an - # unambiguous `C:\Bytecode\Somewhere\Foo\Bar\`. - head = _path_abspath(head) - - # Strip initial drive from a Windows path. We know we have an absolute - # path here, so the second part of the check rules out a POSIX path that - # happens to contain a colon at the second character. - # Slicing avoids issues with an empty (or short) `head`. - if head[1:2] == ':' and head[0:1] not in path_separators: - head = head[2:] - - # Strip initial path separator from `head` to complete the conversion - # back to a root-relative path before joining. - return _path_join( - sys.pycache_prefix, - head.lstrip(path_separators), - filename, - ) - return _path_join(head, _PYCACHE, filename) - - -def source_from_cache(path): - """Given the path to a .pyc. file, return the path to its .py file. - - The .pyc file does not need to exist; this simply returns the path to - the .py file calculated to correspond to the .pyc file. If path does - not conform to PEP 3147/488 format, ValueError will be raised. If - sys.implementation.cache_tag is None then NotImplementedError is raised. - - """ - if sys.implementation.cache_tag is None: - raise NotImplementedError('sys.implementation.cache_tag is None') - path = _os.fspath(path) - head, pycache_filename = _path_split(path) - found_in_pycache_prefix = False - if sys.pycache_prefix is not None: - stripped_path = sys.pycache_prefix.rstrip(path_separators) - if head.startswith(stripped_path + path_sep): - head = head[len(stripped_path):] - found_in_pycache_prefix = True - if not found_in_pycache_prefix: - head, pycache = _path_split(head) - if pycache != _PYCACHE: - raise ValueError(f'{_PYCACHE} not bottom-level directory in ' - f'{path!r}') - dot_count = pycache_filename.count('.') - if dot_count not in {2, 3}: - raise ValueError(f'expected only 2 or 3 dots in {pycache_filename!r}') - elif dot_count == 3: - optimization = pycache_filename.rsplit('.', 2)[-2] - if not optimization.startswith(_OPT): - raise ValueError("optimization portion of filename does not start " - f"with {_OPT!r}") - opt_level = optimization[len(_OPT):] - if not opt_level.isalnum(): - raise ValueError(f"optimization level {optimization!r} is not an " - "alphanumeric value") - base_filename = pycache_filename.partition('.')[0] - return _path_join(head, base_filename + SOURCE_SUFFIXES[0]) - - -def _get_sourcefile(bytecode_path): - """Convert a bytecode file path to a source path (if possible). - - This function exists purely for backwards-compatibility for - PyImport_ExecCodeModuleWithFilenames() in the C API. - - """ - if len(bytecode_path) == 0: - return None - rest, _, extension = bytecode_path.rpartition('.') - if not rest or extension.lower()[-3:-1] != 'py': - return bytecode_path - try: - source_path = source_from_cache(bytecode_path) - except (NotImplementedError, ValueError): - source_path = bytecode_path[:-1] - return source_path if _path_isfile(source_path) else bytecode_path - - -def _get_cached(filename): - if filename.endswith(tuple(SOURCE_SUFFIXES)): - try: - return cache_from_source(filename) - except NotImplementedError: - pass - elif filename.endswith(tuple(BYTECODE_SUFFIXES)): - return filename - else: - return None - - -def _calc_mode(path): - """Calculate the mode permissions for a bytecode file.""" - try: - mode = _path_stat(path).st_mode - except OSError: - mode = 0o666 - # We always ensure write access so we can update cached files - # later even when the source files are read-only on Windows (#6074) - mode |= 0o200 - return mode - - -def _check_name(method): - """Decorator to verify that the module being requested matches the one the - loader can handle. - - The first argument (self) must define _name which the second argument is - compared against. If the comparison fails then ImportError is raised. - - """ - def _check_name_wrapper(self, name=None, *args, **kwargs): - if name is None: - name = self.name - elif self.name != name: - raise ImportError('loader for %s cannot handle %s' % - (self.name, name), name=name) - return method(self, name, *args, **kwargs) - - # FIXME: @_check_name is used to define class methods before the - # _bootstrap module is set by _set_bootstrap_module(). - if _bootstrap is not None: - _wrap = _bootstrap._wrap - else: - def _wrap(new, old): - for replace in ['__module__', '__name__', '__qualname__', '__doc__']: - if hasattr(old, replace): - setattr(new, replace, getattr(old, replace)) - new.__dict__.update(old.__dict__) - - _wrap(_check_name_wrapper, method) - return _check_name_wrapper - - -def _classify_pyc(data, name, exc_details): - """Perform basic validity checking of a pyc header and return the flags field, - which determines how the pyc should be further validated against the source. - - *data* is the contents of the pyc file. (Only the first 16 bytes are - required, though.) - - *name* is the name of the module being imported. It is used for logging. - - *exc_details* is a dictionary passed to ImportError if it raised for - improved debugging. - - ImportError is raised when the magic number is incorrect or when the flags - field is invalid. EOFError is raised when the data is found to be truncated. - - """ - magic = data[:4] - if magic != MAGIC_NUMBER: - message = f'bad magic number in {name!r}: {magic!r}' - _bootstrap._verbose_message('{}', message) - raise ImportError(message, **exc_details) - if len(data) < 16: - message = f'reached EOF while reading pyc header of {name!r}' - _bootstrap._verbose_message('{}', message) - raise EOFError(message) - flags = _unpack_uint32(data[4:8]) - # Only the first two flags are defined. - if flags & ~0b11: - message = f'invalid flags {flags!r} in {name!r}' - raise ImportError(message, **exc_details) - return flags - - -def _validate_timestamp_pyc(data, source_mtime, source_size, name, - exc_details): - """Validate a pyc against the source last-modified time. - - *data* is the contents of the pyc file. (Only the first 16 bytes are - required.) - - *source_mtime* is the last modified timestamp of the source file. - - *source_size* is None or the size of the source file in bytes. - - *name* is the name of the module being imported. It is used for logging. - - *exc_details* is a dictionary passed to ImportError if it raised for - improved debugging. - - An ImportError is raised if the bytecode is stale. - - """ - if _unpack_uint32(data[8:12]) != (source_mtime & 0xFFFFFFFF): - message = f'bytecode is stale for {name!r}' - _bootstrap._verbose_message('{}', message) - raise ImportError(message, **exc_details) - if (source_size is not None and - _unpack_uint32(data[12:16]) != (source_size & 0xFFFFFFFF)): - raise ImportError(f'bytecode is stale for {name!r}', **exc_details) - - -def _validate_hash_pyc(data, source_hash, name, exc_details): - """Validate a hash-based pyc by checking the real source hash against the one in - the pyc header. - - *data* is the contents of the pyc file. (Only the first 16 bytes are - required.) - - *source_hash* is the importlib.util.source_hash() of the source file. - - *name* is the name of the module being imported. It is used for logging. - - *exc_details* is a dictionary passed to ImportError if it raised for - improved debugging. - - An ImportError is raised if the bytecode is stale. - - """ - if data[8:16] != source_hash: - raise ImportError( - f'hash in bytecode doesn\'t match hash of source {name!r}', - **exc_details, - ) - - -def _compile_bytecode(data, name=None, bytecode_path=None, source_path=None): - """Compile bytecode as found in a pyc.""" - code = marshal.loads(data) - if isinstance(code, _code_type): - _bootstrap._verbose_message('code object from {!r}', bytecode_path) - if source_path is not None: - _imp._fix_co_filename(code, source_path) - return code - else: - raise ImportError(f'Non-code object in {bytecode_path!r}', - name=name, path=bytecode_path) - - -def _code_to_timestamp_pyc(code, mtime=0, source_size=0): - "Produce the data for a timestamp-based pyc." - data = bytearray(MAGIC_NUMBER) - data.extend(_pack_uint32(0)) - data.extend(_pack_uint32(mtime)) - data.extend(_pack_uint32(source_size)) - data.extend(marshal.dumps(code)) - return data - - -def _code_to_hash_pyc(code, source_hash, checked=True): - "Produce the data for a hash-based pyc." - data = bytearray(MAGIC_NUMBER) - flags = 0b1 | checked << 1 - data.extend(_pack_uint32(flags)) - assert len(source_hash) == 8 - data.extend(source_hash) - data.extend(marshal.dumps(code)) - return data - - -def decode_source(source_bytes): - """Decode bytes representing source code and return the string. - - Universal newline support is used in the decoding. - """ - import tokenize # To avoid bootstrap issues. - source_bytes_readline = _io.BytesIO(source_bytes).readline - encoding = tokenize.detect_encoding(source_bytes_readline) - newline_decoder = _io.IncrementalNewlineDecoder(None, True) - return newline_decoder.decode(source_bytes.decode(encoding[0])) - - -# Module specifications ####################################################### - -_POPULATE = object() - - -def spec_from_file_location(name, location=None, *, loader=None, - submodule_search_locations=_POPULATE): - """Return a module spec based on a file location. - - To indicate that the module is a package, set - submodule_search_locations to a list of directory paths. An - empty list is sufficient, though its not otherwise useful to the - import system. - - The loader must take a spec as its only __init__() arg. - - """ - if location is None: - # The caller may simply want a partially populated location- - # oriented spec. So we set the location to a bogus value and - # fill in as much as we can. - location = '<unknown>' - if hasattr(loader, 'get_filename'): - # ExecutionLoader - try: - location = loader.get_filename(name) - except ImportError: - pass - else: - location = _os.fspath(location) - try: - location = _path_abspath(location) - except OSError: - pass - - # If the location is on the filesystem, but doesn't actually exist, - # we could return None here, indicating that the location is not - # valid. However, we don't have a good way of testing since an - # indirect location (e.g. a zip file or URL) will look like a - # non-existent file relative to the filesystem. - - spec = _bootstrap.ModuleSpec(name, loader, origin=location) - spec._set_fileattr = True - - # Pick a loader if one wasn't provided. - if loader is None: - for loader_class, suffixes in _get_supported_file_loaders(): - if location.endswith(tuple(suffixes)): - loader = loader_class(name, location) - spec.loader = loader - break - else: - return None - - # Set submodule_search_paths appropriately. - if submodule_search_locations is _POPULATE: - # Check the loader. - if hasattr(loader, 'is_package'): - try: - is_package = loader.is_package(name) - except ImportError: - pass - else: - if is_package: - spec.submodule_search_locations = [] - else: - spec.submodule_search_locations = submodule_search_locations - if spec.submodule_search_locations == []: - if location: - dirname = _path_split(location)[0] - spec.submodule_search_locations.append(dirname) - - return spec - - -def _bless_my_loader(module_globals): - """Helper function for _warnings.c - - See GH#97850 for details. - """ - # 2022-10-06(warsaw): For now, this helper is only used in _warnings.c and - # that use case only has the module globals. This function could be - # extended to accept either that or a module object. However, in the - # latter case, it would be better to raise certain exceptions when looking - # at a module, which should have either a __loader__ or __spec__.loader. - # For backward compatibility, it is possible that we'll get an empty - # dictionary for the module globals, and that cannot raise an exception. - if not isinstance(module_globals, dict): - return None - - missing = object() - loader = module_globals.get('__loader__', None) - spec = module_globals.get('__spec__', missing) - - if loader is None: - if spec is missing: - # If working with a module: - # raise AttributeError('Module globals is missing a __spec__') - return None - elif spec is None: - raise ValueError('Module globals is missing a __spec__.loader') - - spec_loader = getattr(spec, 'loader', missing) - - if spec_loader in (missing, None): - if loader is None: - exc = AttributeError if spec_loader is missing else ValueError - raise exc('Module globals is missing a __spec__.loader') - _warnings.warn( - 'Module globals is missing a __spec__.loader', - DeprecationWarning) - spec_loader = loader - - assert spec_loader is not None - if loader is not None and loader != spec_loader: - _warnings.warn( - 'Module globals; __loader__ != __spec__.loader', - DeprecationWarning) - return loader - - return spec_loader - - -# Loaders ##################################################################### - -class WindowsRegistryFinder: - - """Meta path finder for modules declared in the Windows registry.""" - - REGISTRY_KEY = ( - 'Software\\Python\\PythonCore\\{sys_version}' - '\\Modules\\{fullname}') - REGISTRY_KEY_DEBUG = ( - 'Software\\Python\\PythonCore\\{sys_version}' - '\\Modules\\{fullname}\\Debug') - DEBUG_BUILD = (_MS_WINDOWS and '_d.pyd' in EXTENSION_SUFFIXES) - - @staticmethod - def _open_registry(key): - try: - return winreg.OpenKey(winreg.HKEY_CURRENT_USER, key) - except OSError: - return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key) - - @classmethod - def _search_registry(cls, fullname): - if cls.DEBUG_BUILD: - registry_key = cls.REGISTRY_KEY_DEBUG - else: - registry_key = cls.REGISTRY_KEY - key = registry_key.format(fullname=fullname, - sys_version='%d.%d' % sys.version_info[:2]) - try: - with cls._open_registry(key) as hkey: - filepath = winreg.QueryValue(hkey, '') - except OSError: - return None - return filepath - - @classmethod - def find_spec(cls, fullname, path=None, target=None): - _warnings.warn('importlib.machinery.WindowsRegistryFinder is ' - 'deprecated; use site configuration instead. ' - 'Future versions of Python may not enable this ' - 'finder by default.', - DeprecationWarning, stacklevel=2) - - filepath = cls._search_registry(fullname) - if filepath is None: - return None - try: - _path_stat(filepath) - except OSError: - return None - for loader, suffixes in _get_supported_file_loaders(): - if filepath.endswith(tuple(suffixes)): - spec = _bootstrap.spec_from_loader(fullname, - loader(fullname, filepath), - origin=filepath) - return spec - - -class _LoaderBasics: - - """Base class of common code needed by both SourceLoader and - SourcelessFileLoader.""" - - def is_package(self, fullname): - """Concrete implementation of InspectLoader.is_package by checking if - the path returned by get_filename has a filename of '__init__.py'.""" - filename = _path_split(self.get_filename(fullname))[1] - filename_base = filename.rsplit('.', 1)[0] - tail_name = fullname.rpartition('.')[2] - return filename_base == '__init__' and tail_name != '__init__' - - def create_module(self, spec): - """Use default semantics for module creation.""" - - def exec_module(self, module): - """Execute the module.""" - code = self.get_code(module.__name__) - if code is None: - raise ImportError(f'cannot load module {module.__name__!r} when ' - 'get_code() returns None') - _bootstrap._call_with_frames_removed(exec, code, module.__dict__) - - def load_module(self, fullname): - """This method is deprecated.""" - # Warning implemented in _load_module_shim(). - return _bootstrap._load_module_shim(self, fullname) - - -class SourceLoader(_LoaderBasics): - - def path_mtime(self, path): - """Optional method that returns the modification time (an int) for the - specified path (a str). - - Raises OSError when the path cannot be handled. - """ - raise OSError - - def path_stats(self, path): - """Optional method returning a metadata dict for the specified - path (a str). - - Possible keys: - - 'mtime' (mandatory) is the numeric timestamp of last source - code modification; - - 'size' (optional) is the size in bytes of the source code. - - Implementing this method allows the loader to read bytecode files. - Raises OSError when the path cannot be handled. - """ - return {'mtime': self.path_mtime(path)} - - def _cache_bytecode(self, source_path, cache_path, data): - """Optional method which writes data (bytes) to a file path (a str). - - Implementing this method allows for the writing of bytecode files. - - The source path is needed in order to correctly transfer permissions - """ - # For backwards compatibility, we delegate to set_data() - return self.set_data(cache_path, data) - - def set_data(self, path, data): - """Optional method which writes data (bytes) to a file path (a str). - - Implementing this method allows for the writing of bytecode files. - """ - - - def get_source(self, fullname): - """Concrete implementation of InspectLoader.get_source.""" - path = self.get_filename(fullname) - try: - source_bytes = self.get_data(path) - except OSError as exc: - raise ImportError('source not available through get_data()', - name=fullname) from exc - return decode_source(source_bytes) - - def source_to_code(self, data, path, *, _optimize=-1): - """Return the code object compiled from source. - - The 'data' argument can be any object type that compile() supports. - """ - return _bootstrap._call_with_frames_removed(compile, data, path, 'exec', - dont_inherit=True, optimize=_optimize) - - def get_code(self, fullname): - """Concrete implementation of InspectLoader.get_code. - - Reading of bytecode requires path_stats to be implemented. To write - bytecode, set_data must also be implemented. - - """ - source_path = self.get_filename(fullname) - source_mtime = None - source_bytes = None - source_hash = None - hash_based = False - check_source = True - try: - bytecode_path = cache_from_source(source_path) - except NotImplementedError: - bytecode_path = None - else: - try: - st = self.path_stats(source_path) - except OSError: - pass - else: - source_mtime = int(st['mtime']) - try: - data = self.get_data(bytecode_path) - except OSError: - pass - else: - exc_details = { - 'name': fullname, - 'path': bytecode_path, - } - try: - flags = _classify_pyc(data, fullname, exc_details) - bytes_data = memoryview(data)[16:] - hash_based = flags & 0b1 != 0 - if hash_based: - check_source = flags & 0b10 != 0 - if (_imp.check_hash_based_pycs != 'never' and - (check_source or - _imp.check_hash_based_pycs == 'always')): - source_bytes = self.get_data(source_path) - source_hash = _imp.source_hash( - _imp.pyc_magic_number_token, - source_bytes, - ) - _validate_hash_pyc(data, source_hash, fullname, - exc_details) - else: - _validate_timestamp_pyc( - data, - source_mtime, - st['size'], - fullname, - exc_details, - ) - except (ImportError, EOFError): - pass - else: - _bootstrap._verbose_message('{} matches {}', bytecode_path, - source_path) - return _compile_bytecode(bytes_data, name=fullname, - bytecode_path=bytecode_path, - source_path=source_path) - if source_bytes is None: - source_bytes = self.get_data(source_path) - code_object = self.source_to_code(source_bytes, source_path) - _bootstrap._verbose_message('code object from {}', source_path) - if (not sys.dont_write_bytecode and bytecode_path is not None and - source_mtime is not None): - if hash_based: - if source_hash is None: - source_hash = _imp.source_hash(_imp.pyc_magic_number_token, - source_bytes) - data = _code_to_hash_pyc(code_object, source_hash, check_source) - else: - data = _code_to_timestamp_pyc(code_object, source_mtime, - len(source_bytes)) - try: - self._cache_bytecode(source_path, bytecode_path, data) - except NotImplementedError: - pass - return code_object - - -class FileLoader: - - """Base file loader class which implements the loader protocol methods that - require file system usage.""" - - def __init__(self, fullname, path): - """Cache the module name and the path to the file found by the - finder.""" - self.name = fullname - self.path = path - - def __eq__(self, other): - return (self.__class__ == other.__class__ and - self.__dict__ == other.__dict__) - - def __hash__(self): - return hash(self.name) ^ hash(self.path) - - @_check_name - def load_module(self, fullname): - """Load a module from a file. - - This method is deprecated. Use exec_module() instead. - - """ - # The only reason for this method is for the name check. - # Issue #14857: Avoid the zero-argument form of super so the implementation - # of that form can be updated without breaking the frozen module. - return super(FileLoader, self).load_module(fullname) - - @_check_name - def get_filename(self, fullname): - """Return the path to the source file as found by the finder.""" - return self.path - - def get_data(self, path): - """Return the data from path as raw bytes.""" - if isinstance(self, (SourceLoader, SourcelessFileLoader, ExtensionFileLoader)): - with _io.open_code(str(path)) as file: - return file.read() - else: - with _io.FileIO(path, 'r') as file: - return file.read() - - @_check_name - def get_resource_reader(self, module): - from importlib.readers import FileReader - return FileReader(self) - - -class SourceFileLoader(FileLoader, SourceLoader): - - """Concrete implementation of SourceLoader using the file system.""" - - def path_stats(self, path): - """Return the metadata for the path.""" - st = _path_stat(path) - return {'mtime': st.st_mtime, 'size': st.st_size} - - def _cache_bytecode(self, source_path, bytecode_path, data): - # Adapt between the two APIs - mode = _calc_mode(source_path) - return self.set_data(bytecode_path, data, _mode=mode) - - def set_data(self, path, data, *, _mode=0o666): - """Write bytes data to a file.""" - parent, filename = _path_split(path) - path_parts = [] - # Figure out what directories are missing. - while parent and not _path_isdir(parent): - parent, part = _path_split(parent) - path_parts.append(part) - # Create needed directories. - for part in reversed(path_parts): - parent = _path_join(parent, part) - try: - _os.mkdir(parent) - except FileExistsError: - # Probably another Python process already created the dir. - continue - except OSError as exc: - # Could be a permission error, read-only filesystem: just forget - # about writing the data. - _bootstrap._verbose_message('could not create {!r}: {!r}', - parent, exc) - return - try: - _write_atomic(path, data, _mode) - _bootstrap._verbose_message('created {!r}', path) - except OSError as exc: - # Same as above: just don't write the bytecode. - _bootstrap._verbose_message('could not create {!r}: {!r}', path, - exc) - - -class SourcelessFileLoader(FileLoader, _LoaderBasics): - - """Loader which handles sourceless file imports.""" - - def get_code(self, fullname): - path = self.get_filename(fullname) - data = self.get_data(path) - # Call _classify_pyc to do basic validation of the pyc but ignore the - # result. There's no source to check against. - exc_details = { - 'name': fullname, - 'path': path, - } - _classify_pyc(data, fullname, exc_details) - return _compile_bytecode( - memoryview(data)[16:], - name=fullname, - bytecode_path=path, - ) - - def get_source(self, fullname): - """Return None as there is no source code.""" - return None - - -class ExtensionFileLoader(FileLoader, _LoaderBasics): - - """Loader for extension modules. - - The constructor is designed to work with FileFinder. - - """ - - def __init__(self, name, path): - self.name = name - self.path = path - - def __eq__(self, other): - return (self.__class__ == other.__class__ and - self.__dict__ == other.__dict__) - - def __hash__(self): - return hash(self.name) ^ hash(self.path) - - def create_module(self, spec): - """Create an uninitialized extension module""" - module = _bootstrap._call_with_frames_removed( - _imp.create_dynamic, spec) - _bootstrap._verbose_message('extension module {!r} loaded from {!r}', - spec.name, self.path) - return module - - def exec_module(self, module): - """Initialize an extension module""" - _bootstrap._call_with_frames_removed(_imp.exec_dynamic, module) - _bootstrap._verbose_message('extension module {!r} executed from {!r}', - self.name, self.path) - - def is_package(self, fullname): - """Return True if the extension module is a package.""" - file_name = _path_split(self.path)[1] - return any(file_name == '__init__' + suffix - for suffix in EXTENSION_SUFFIXES) - - def get_code(self, fullname): - """Return None as an extension module cannot create a code object.""" - return None - - def get_source(self, fullname): - """Return None as extension modules have no source code.""" - return None - - @_check_name - def get_filename(self, fullname): - """Return the path to the source file as found by the finder.""" - return self.path - - -class _NamespacePath: - """Represents a namespace package's path. It uses the module name - to find its parent module, and from there it looks up the parent's - __path__. When this changes, the module's own path is recomputed, - using path_finder. For top-level modules, the parent module's path - is sys.path.""" - - # When invalidate_caches() is called, this epoch is incremented - # https://bugs.python.org/issue45703 - _epoch = 0 - - def __init__(self, name, path, path_finder): - self._name = name - self._path = path - self._last_parent_path = tuple(self._get_parent_path()) - self._last_epoch = self._epoch - self._path_finder = path_finder - - def _find_parent_path_names(self): - """Returns a tuple of (parent-module-name, parent-path-attr-name)""" - parent, dot, me = self._name.rpartition('.') - if dot == '': - # This is a top-level module. sys.path contains the parent path. - return 'sys', 'path' - # Not a top-level module. parent-module.__path__ contains the - # parent path. - return parent, '__path__' - - def _get_parent_path(self): - parent_module_name, path_attr_name = self._find_parent_path_names() - return getattr(sys.modules[parent_module_name], path_attr_name) - - def _recalculate(self): - # If the parent's path has changed, recalculate _path - parent_path = tuple(self._get_parent_path()) # Make a copy - if parent_path != self._last_parent_path or self._epoch != self._last_epoch: - spec = self._path_finder(self._name, parent_path) - # Note that no changes are made if a loader is returned, but we - # do remember the new parent path - if spec is not None and spec.loader is None: - if spec.submodule_search_locations: - self._path = spec.submodule_search_locations - self._last_parent_path = parent_path # Save the copy - self._last_epoch = self._epoch - return self._path - - def __iter__(self): - return iter(self._recalculate()) - - def __getitem__(self, index): - return self._recalculate()[index] - - def __setitem__(self, index, path): - self._path[index] = path - - def __len__(self): - return len(self._recalculate()) - - def __repr__(self): - return f'_NamespacePath({self._path!r})' - - def __contains__(self, item): - return item in self._recalculate() - - def append(self, item): - self._path.append(item) - - -# This class is actually exposed publicly in a namespace package's __loader__ -# attribute, so it should be available through a non-private name. -# https://github.com/python/cpython/issues/92054 -class NamespaceLoader: - def __init__(self, name, path, path_finder): - self._path = _NamespacePath(name, path, path_finder) - - def is_package(self, fullname): - return True - - def get_source(self, fullname): - return '' - - def get_code(self, fullname): - return compile('', '<string>', 'exec', dont_inherit=True) - - def create_module(self, spec): - """Use default semantics for module creation.""" - - def exec_module(self, module): - pass - - def load_module(self, fullname): - """Load a namespace module. - - This method is deprecated. Use exec_module() instead. - - """ - # The import system never calls this method. - _bootstrap._verbose_message('namespace module loaded with path {!r}', - self._path) - # Warning implemented in _load_module_shim(). - return _bootstrap._load_module_shim(self, fullname) - - def get_resource_reader(self, module): - from importlib.readers import NamespaceReader - return NamespaceReader(self._path) - - -# We use this exclusively in module_from_spec() for backward-compatibility. -_NamespaceLoader = NamespaceLoader - - -# Finders ##################################################################### - -class PathFinder: - - """Meta path finder for sys.path and package __path__ attributes.""" - - @staticmethod - def invalidate_caches(): - """Call the invalidate_caches() method on all path entry finders - stored in sys.path_importer_cache (where implemented).""" - for name, finder in list(sys.path_importer_cache.items()): - # Drop entry if finder name is a relative path. The current - # working directory may have changed. - if finder is None or not _path_isabs(name): - del sys.path_importer_cache[name] - elif hasattr(finder, 'invalidate_caches'): - finder.invalidate_caches() - # Also invalidate the caches of _NamespacePaths - # https://bugs.python.org/issue45703 - _NamespacePath._epoch += 1 - - from importlib.metadata import MetadataPathFinder - MetadataPathFinder.invalidate_caches() - - @staticmethod - def _path_hooks(path): - """Search sys.path_hooks for a finder for 'path'.""" - if sys.path_hooks is not None and not sys.path_hooks: - _warnings.warn('sys.path_hooks is empty', ImportWarning) - for hook in sys.path_hooks: - try: - return hook(path) - except ImportError: - continue - else: - return None - - @classmethod - def _path_importer_cache(cls, path): - """Get the finder for the path entry from sys.path_importer_cache. - - If the path entry is not in the cache, find the appropriate finder - and cache it. If no finder is available, store None. - - """ - if path == '': - try: - path = _os.getcwd() - except (FileNotFoundError, PermissionError): - # Don't cache the failure as the cwd can easily change to - # a valid directory later on. - return None - try: - finder = sys.path_importer_cache[path] - except KeyError: - finder = cls._path_hooks(path) - sys.path_importer_cache[path] = finder - return finder - - @classmethod - def _get_spec(cls, fullname, path, target=None): - """Find the loader or namespace_path for this module/package name.""" - # If this ends up being a namespace package, namespace_path is - # the list of paths that will become its __path__ - namespace_path = [] - for entry in path: - if not isinstance(entry, str): - continue - finder = cls._path_importer_cache(entry) - if finder is not None: - spec = finder.find_spec(fullname, target) - if spec is None: - continue - if spec.loader is not None: - return spec - portions = spec.submodule_search_locations - if portions is None: - raise ImportError('spec missing loader') - # This is possibly part of a namespace package. - # Remember these path entries (if any) for when we - # create a namespace package, and continue iterating - # on path. - namespace_path.extend(portions) - else: - spec = _bootstrap.ModuleSpec(fullname, None) - spec.submodule_search_locations = namespace_path - return spec - - @classmethod - def find_spec(cls, fullname, path=None, target=None): - """Try to find a spec for 'fullname' on sys.path or 'path'. - - The search is based on sys.path_hooks and sys.path_importer_cache. - """ - if path is None: - path = sys.path - spec = cls._get_spec(fullname, path, target) - if spec is None: - return None - elif spec.loader is None: - namespace_path = spec.submodule_search_locations - if namespace_path: - # We found at least one namespace path. Return a spec which - # can create the namespace package. - spec.origin = None - spec.submodule_search_locations = _NamespacePath(fullname, namespace_path, cls._get_spec) - return spec - else: - return None - else: - return spec - - @staticmethod - def find_distributions(*args, **kwargs): - """ - Find distributions. - - Return an iterable of all Distribution instances capable of - loading the metadata for packages matching ``context.name`` - (or all names if ``None`` indicated) along the paths in the list - of directories ``context.path``. - """ - from importlib.metadata import MetadataPathFinder - return MetadataPathFinder.find_distributions(*args, **kwargs) - - -class FileFinder: - - """File-based finder. - - Interactions with the file system are cached for performance, being - refreshed when the directory the finder is handling has been modified. - - """ - - def __init__(self, path, *loader_details): - """Initialize with the path to search on and a variable number of - 2-tuples containing the loader and the file suffixes the loader - recognizes.""" - loaders = [] - for loader, suffixes in loader_details: - loaders.extend((suffix, loader) for suffix in suffixes) - self._loaders = loaders - # Base (directory) path - if not path or path == '.': - self.path = _os.getcwd() - else: - self.path = _path_abspath(path) - self._path_mtime = -1 - self._path_cache = set() - self._relaxed_path_cache = set() - - def invalidate_caches(self): - """Invalidate the directory mtime.""" - self._path_mtime = -1 - - def _get_spec(self, loader_class, fullname, path, smsl, target): - loader = loader_class(fullname, path) - return spec_from_file_location(fullname, path, loader=loader, - submodule_search_locations=smsl) - - def find_spec(self, fullname, target=None): - """Try to find a spec for the specified module. - - Returns the matching spec, or None if not found. - """ - is_namespace = False - tail_module = fullname.rpartition('.')[2] - try: - mtime = _path_stat(self.path or _os.getcwd()).st_mtime - except OSError: - mtime = -1 - if mtime != self._path_mtime: - self._fill_cache() - self._path_mtime = mtime - # tail_module keeps the original casing, for __file__ and friends - if _relax_case(): - cache = self._relaxed_path_cache - cache_module = tail_module.lower() - else: - cache = self._path_cache - cache_module = tail_module - # Check if the module is the name of a directory (and thus a package). - if cache_module in cache: - base_path = _path_join(self.path, tail_module) - for suffix, loader_class in self._loaders: - init_filename = '__init__' + suffix - full_path = _path_join(base_path, init_filename) - if _path_isfile(full_path): - return self._get_spec(loader_class, fullname, full_path, [base_path], target) - else: - # If a namespace package, return the path if we don't - # find a module in the next section. - is_namespace = _path_isdir(base_path) - # Check for a file w/ a proper suffix exists. - for suffix, loader_class in self._loaders: - try: - full_path = _path_join(self.path, tail_module + suffix) - except ValueError: - return None - _bootstrap._verbose_message('trying {}', full_path, verbosity=2) - if cache_module + suffix in cache: - if _path_isfile(full_path): - return self._get_spec(loader_class, fullname, full_path, - None, target) - if is_namespace: - _bootstrap._verbose_message('possible namespace for {}', base_path) - spec = _bootstrap.ModuleSpec(fullname, None) - spec.submodule_search_locations = [base_path] - return spec - return None - - def _fill_cache(self): - """Fill the cache of potential modules and packages for this directory.""" - path = self.path - try: - contents = _os.listdir(path or _os.getcwd()) - except (FileNotFoundError, PermissionError, NotADirectoryError): - # Directory has either been removed, turned into a file, or made - # unreadable. - contents = [] - # We store two cached versions, to handle runtime changes of the - # PYTHONCASEOK environment variable. - if not sys.platform.startswith('win'): - self._path_cache = set(contents) - else: - # Windows users can import modules with case-insensitive file - # suffixes (for legacy reasons). Make the suffix lowercase here - # so it's done once instead of for every import. This is safe as - # the specified suffixes to check against are always specified in a - # case-sensitive manner. - lower_suffix_contents = set() - for item in contents: - name, dot, suffix = item.partition('.') - if dot: - new_name = f'{name}.{suffix.lower()}' - else: - new_name = name - lower_suffix_contents.add(new_name) - self._path_cache = lower_suffix_contents - if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): - self._relaxed_path_cache = {fn.lower() for fn in contents} - - @classmethod - def path_hook(cls, *loader_details): - """A class method which returns a closure to use on sys.path_hook - which will return an instance using the specified loaders and the path - called on the closure. - - If the path called on the closure is not a directory, ImportError is - raised. - - """ - def path_hook_for_FileFinder(path): - """Path hook for importlib.machinery.FileFinder.""" - if not _path_isdir(path): - raise ImportError('only directories are supported', path=path) - return cls(path, *loader_details) - - return path_hook_for_FileFinder - - def __repr__(self): - return f'FileFinder({self.path!r})' - - -class AppleFrameworkLoader(ExtensionFileLoader): - """A loader for modules that have been packaged as frameworks for - compatibility with Apple's iOS App Store policies. - """ - def create_module(self, spec): - # If the ModuleSpec has been created by the FileFinder, it will have - # been created with an origin pointing to the .fwork file. We need to - # redirect this to the location in the Frameworks folder, using the - # content of the .fwork file. - if spec.origin.endswith(".fwork"): - with _io.FileIO(spec.origin, 'r') as file: - framework_binary = file.read().decode().strip() - bundle_path = _path_split(sys.executable)[0] - spec.origin = _path_join(bundle_path, framework_binary) - - # If the loader is created based on the spec for a loaded module, the - # path will be pointing at the Framework location. If this occurs, - # get the original .fwork location to use as the module's __file__. - if self.path.endswith(".fwork"): - path = self.path - else: - with _io.FileIO(self.path + ".origin", 'r') as file: - origin = file.read().decode().strip() - bundle_path = _path_split(sys.executable)[0] - path = _path_join(bundle_path, origin) - - module = _bootstrap._call_with_frames_removed(_imp.create_dynamic, spec) - - _bootstrap._verbose_message( - "Apple framework extension module {!r} loaded from {!r} (path {!r})", - spec.name, - spec.origin, - path, - ) - - # Ensure that the __file__ points at the .fwork location - try: - module.__file__ = path - except AttributeError: - # Not important enough to report. - # (The error is also ignored in _bootstrap._init_module_attrs or - # import_run_extension in import.c) - pass - - return module - -# Import setup ############################################################### - -def _fix_up_module(ns, name, pathname, cpathname=None): - # This function is used by PyImport_ExecCodeModuleObject(). - loader = ns.get('__loader__') - spec = ns.get('__spec__') - if not loader: - if spec: - loader = spec.loader - elif pathname == cpathname: - loader = SourcelessFileLoader(name, pathname) - else: - loader = SourceFileLoader(name, pathname) - if not spec: - spec = spec_from_file_location(name, pathname, loader=loader) - if cpathname: - spec.cached = _path_abspath(cpathname) - try: - ns['__spec__'] = spec - ns['__loader__'] = loader - ns['__file__'] = pathname - ns['__cached__'] = cpathname - except Exception: - # Not important enough to report. - pass - - -def _get_supported_file_loaders(): - """Returns a list of file-based module loaders. - - Each item is a tuple (loader, suffixes). - """ - extension_loaders = [] - if hasattr(_imp, 'create_dynamic'): - if sys.platform in {"ios", "tvos", "watchos"}: - extension_loaders = [(AppleFrameworkLoader, [ - suffix.replace(".so", ".fwork") - for suffix in _imp.extension_suffixes() - ])] - extension_loaders.append((ExtensionFileLoader, _imp.extension_suffixes())) - source = SourceFileLoader, SOURCE_SUFFIXES - bytecode = SourcelessFileLoader, BYTECODE_SUFFIXES - return extension_loaders + [source, bytecode] - - -def _set_bootstrap_module(_bootstrap_module): - global _bootstrap - _bootstrap = _bootstrap_module - - -def _install(_bootstrap_module): - """Install the path-based import components.""" - _set_bootstrap_module(_bootstrap_module) - supported_loaders = _get_supported_file_loaders() - sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)]) - sys.meta_path.append(PathFinder) diff --git a/Python314_4_x86_Template/Lib/importlib/abc.py b/Python314_4_x86_Template/Lib/importlib/abc.py deleted file mode 100644 index 1e47495f6..000000000 --- a/Python314_4_x86_Template/Lib/importlib/abc.py +++ /dev/null @@ -1,234 +0,0 @@ -"""Abstract base classes related to import.""" -from . import _bootstrap_external -from . import machinery -try: - import _frozen_importlib -except ImportError as exc: - if exc.name != '_frozen_importlib': - raise - _frozen_importlib = None -try: - import _frozen_importlib_external -except ImportError: - _frozen_importlib_external = _bootstrap_external -from ._abc import Loader -import abc - - -__all__ = [ - 'Loader', 'MetaPathFinder', 'PathEntryFinder', - 'ResourceLoader', 'InspectLoader', 'ExecutionLoader', - 'FileLoader', 'SourceLoader', -] - - -def _register(abstract_cls, *classes): - for cls in classes: - abstract_cls.register(cls) - if _frozen_importlib is not None: - try: - frozen_cls = getattr(_frozen_importlib, cls.__name__) - except AttributeError: - frozen_cls = getattr(_frozen_importlib_external, cls.__name__) - abstract_cls.register(frozen_cls) - - -class MetaPathFinder(metaclass=abc.ABCMeta): - - """Abstract base class for import finders on sys.meta_path.""" - - # We don't define find_spec() here since that would break - # hasattr checks we do to support backward compatibility. - - def invalidate_caches(self): - """An optional method for clearing the finder's cache, if any. - This method is used by importlib.invalidate_caches(). - """ - -_register(MetaPathFinder, machinery.BuiltinImporter, machinery.FrozenImporter, - machinery.PathFinder, machinery.WindowsRegistryFinder) - - -class PathEntryFinder(metaclass=abc.ABCMeta): - - """Abstract base class for path entry finders used by PathFinder.""" - - def invalidate_caches(self): - """An optional method for clearing the finder's cache, if any. - This method is used by PathFinder.invalidate_caches(). - """ - -_register(PathEntryFinder, machinery.FileFinder) - - -class ResourceLoader(Loader): - - """Abstract base class for loaders which can return data from their - back-end storage to facilitate reading data to perform an import. - - This ABC represents one of the optional protocols specified by PEP 302. - - For directly loading resources, use TraversableResources instead. This class - primarily exists for backwards compatibility with other ABCs in this module. - - """ - - @abc.abstractmethod - def get_data(self, path): - """Abstract method which when implemented should return the bytes for - the specified path. The path must be a str.""" - raise OSError - - -class InspectLoader(Loader): - - """Abstract base class for loaders which support inspection about the - modules they can load. - - This ABC represents one of the optional protocols specified by PEP 302. - - """ - - def is_package(self, fullname): - """Optional method which when implemented should return whether the - module is a package. The fullname is a str. Returns a bool. - - Raises ImportError if the module cannot be found. - """ - raise ImportError - - def get_code(self, fullname): - """Method which returns the code object for the module. - - The fullname is a str. Returns a types.CodeType if possible, else - returns None if a code object does not make sense - (e.g. built-in module). Raises ImportError if the module cannot be - found. - """ - source = self.get_source(fullname) - if source is None: - return None - return self.source_to_code(source) - - @abc.abstractmethod - def get_source(self, fullname): - """Abstract method which should return the source code for the - module. The fullname is a str. Returns a str. - - Raises ImportError if the module cannot be found. - """ - raise ImportError - - @staticmethod - def source_to_code(data, path='<string>'): - """Compile 'data' into a code object. - - The 'data' argument can be anything that compile() can handle. The'path' - argument should be where the data was retrieved (when applicable).""" - return compile(data, path, 'exec', dont_inherit=True) - - exec_module = _bootstrap_external._LoaderBasics.exec_module - load_module = _bootstrap_external._LoaderBasics.load_module - -_register(InspectLoader, machinery.BuiltinImporter, machinery.FrozenImporter, machinery.NamespaceLoader) - - -class ExecutionLoader(InspectLoader): - - """Abstract base class for loaders that wish to support the execution of - modules as scripts. - - This ABC represents one of the optional protocols specified in PEP 302. - - """ - - @abc.abstractmethod - def get_filename(self, fullname): - """Abstract method which should return the value that __file__ is to be - set to. - - Raises ImportError if the module cannot be found. - """ - raise ImportError - - def get_code(self, fullname): - """Method to return the code object for fullname. - - Should return None if not applicable (e.g. built-in module). - Raise ImportError if the module cannot be found. - """ - source = self.get_source(fullname) - if source is None: - return None - try: - path = self.get_filename(fullname) - except ImportError: - return self.source_to_code(source) - else: - return self.source_to_code(source, path) - -_register( - ExecutionLoader, - machinery.ExtensionFileLoader, - machinery.AppleFrameworkLoader, -) - - -class FileLoader(_bootstrap_external.FileLoader, ResourceLoader, ExecutionLoader): - - """Abstract base class partially implementing the ResourceLoader and - ExecutionLoader ABCs.""" - -_register(FileLoader, machinery.SourceFileLoader, - machinery.SourcelessFileLoader) - - -class SourceLoader(_bootstrap_external.SourceLoader, ResourceLoader, ExecutionLoader): - - """Abstract base class for loading source code (and optionally any - corresponding bytecode). - - To support loading from source code, the abstractmethods inherited from - ResourceLoader and ExecutionLoader need to be implemented. To also support - loading from bytecode, the optional methods specified directly by this ABC - is required. - - Inherited abstractmethods not implemented in this ABC: - - * ResourceLoader.get_data - * ExecutionLoader.get_filename - - """ - - def path_mtime(self, path): - """Return the (int) modification time for the path (str).""" - import warnings - warnings.warn('SourceLoader.path_mtime is deprecated in favour of ' - 'SourceLoader.path_stats().', - DeprecationWarning, stacklevel=2) - if self.path_stats.__func__ is SourceLoader.path_stats: - raise OSError - return int(self.path_stats(path)['mtime']) - - def path_stats(self, path): - """Return a metadata dict for the source pointed to by the path (str). - Possible keys: - - 'mtime' (mandatory) is the numeric timestamp of last source - code modification; - - 'size' (optional) is the size in bytes of the source code. - """ - if self.path_mtime.__func__ is SourceLoader.path_mtime: - raise OSError - return {'mtime': self.path_mtime(path)} - - def set_data(self, path, data): - """Write the bytes to the path (if possible). - - Accepts a str path and data as bytes. - - Any needed intermediary directories are to be created. If for some - reason the file cannot be written because of permissions, fail - silently. - """ - -_register(SourceLoader, machinery.SourceFileLoader) diff --git a/Python314_4_x86_Template/Lib/importlib/machinery.py b/Python314_4_x86_Template/Lib/importlib/machinery.py deleted file mode 100644 index 63d726445..000000000 --- a/Python314_4_x86_Template/Lib/importlib/machinery.py +++ /dev/null @@ -1,50 +0,0 @@ -"""The machinery of importlib: finders, loaders, hooks, etc.""" - -from ._bootstrap import ModuleSpec -from ._bootstrap import BuiltinImporter -from ._bootstrap import FrozenImporter -from ._bootstrap_external import ( - SOURCE_SUFFIXES, BYTECODE_SUFFIXES, EXTENSION_SUFFIXES, - DEBUG_BYTECODE_SUFFIXES as _DEBUG_BYTECODE_SUFFIXES, - OPTIMIZED_BYTECODE_SUFFIXES as _OPTIMIZED_BYTECODE_SUFFIXES -) -from ._bootstrap_external import WindowsRegistryFinder -from ._bootstrap_external import PathFinder -from ._bootstrap_external import FileFinder -from ._bootstrap_external import SourceFileLoader -from ._bootstrap_external import SourcelessFileLoader -from ._bootstrap_external import ExtensionFileLoader -from ._bootstrap_external import AppleFrameworkLoader -from ._bootstrap_external import NamespaceLoader - - -def all_suffixes(): - """Returns a list of all recognized module suffixes for this process""" - return SOURCE_SUFFIXES + BYTECODE_SUFFIXES + EXTENSION_SUFFIXES - - -__all__ = ['AppleFrameworkLoader', 'BYTECODE_SUFFIXES', 'BuiltinImporter', - 'DEBUG_BYTECODE_SUFFIXES', 'EXTENSION_SUFFIXES', - 'ExtensionFileLoader', 'FileFinder', 'FrozenImporter', 'ModuleSpec', - 'NamespaceLoader', 'OPTIMIZED_BYTECODE_SUFFIXES', 'PathFinder', - 'SOURCE_SUFFIXES', 'SourceFileLoader', 'SourcelessFileLoader', - 'WindowsRegistryFinder', 'all_suffixes'] - - -def __getattr__(name): - import warnings - - if name == 'DEBUG_BYTECODE_SUFFIXES': - warnings.warn('importlib.machinery.DEBUG_BYTECODE_SUFFIXES is ' - 'deprecated; use importlib.machinery.BYTECODE_SUFFIXES ' - 'instead.', - DeprecationWarning, stacklevel=2) - return _DEBUG_BYTECODE_SUFFIXES - elif name == 'OPTIMIZED_BYTECODE_SUFFIXES': - warnings.warn('importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES is ' - 'deprecated; use importlib.machinery.BYTECODE_SUFFIXES ' - 'instead.', - DeprecationWarning, stacklevel=2) - return _OPTIMIZED_BYTECODE_SUFFIXES - - raise AttributeError(f'module {__name__!r} has no attribute {name!r}') diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__init__.py b/Python314_4_x86_Template/Lib/importlib/metadata/__init__.py deleted file mode 100644 index 8ce62dd86..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/__init__.py +++ /dev/null @@ -1,1093 +0,0 @@ -from __future__ import annotations - -import os -import re -import abc -import sys -import json -import email -import types -import inspect -import pathlib -import zipfile -import operator -import textwrap -import warnings -import functools -import itertools -import posixpath -import collections - -from . import _meta -from ._collections import FreezableDefaultDict, Pair -from ._functools import method_cache, pass_none -from ._itertools import always_iterable, unique_everseen -from ._meta import PackageMetadata, SimplePath - -from contextlib import suppress -from importlib import import_module -from importlib.abc import MetaPathFinder -from itertools import starmap -from typing import Any, Iterable, List, Mapping, Match, Optional, Set, cast - -__all__ = [ - 'Distribution', - 'DistributionFinder', - 'PackageMetadata', - 'PackageNotFoundError', - 'distribution', - 'distributions', - 'entry_points', - 'files', - 'metadata', - 'packages_distributions', - 'requires', - 'version', -] - - -class PackageNotFoundError(ModuleNotFoundError): - """The package was not found.""" - - def __str__(self) -> str: - return f"No package metadata was found for {self.name}" - - @property - def name(self) -> str: # type: ignore[override] - (name,) = self.args - return name - - -class Sectioned: - """ - A simple entry point config parser for performance - - >>> for item in Sectioned.read(Sectioned._sample): - ... print(item) - Pair(name='sec1', value='# comments ignored') - Pair(name='sec1', value='a = 1') - Pair(name='sec1', value='b = 2') - Pair(name='sec2', value='a = 2') - - >>> res = Sectioned.section_pairs(Sectioned._sample) - >>> item = next(res) - >>> item.name - 'sec1' - >>> item.value - Pair(name='a', value='1') - >>> item = next(res) - >>> item.value - Pair(name='b', value='2') - >>> item = next(res) - >>> item.name - 'sec2' - >>> item.value - Pair(name='a', value='2') - >>> list(res) - [] - """ - - _sample = textwrap.dedent( - """ - [sec1] - # comments ignored - a = 1 - b = 2 - - [sec2] - a = 2 - """ - ).lstrip() - - @classmethod - def section_pairs(cls, text): - return ( - section._replace(value=Pair.parse(section.value)) - for section in cls.read(text, filter_=cls.valid) - if section.name is not None - ) - - @staticmethod - def read(text, filter_=None): - lines = filter(filter_, map(str.strip, text.splitlines())) - name = None - for value in lines: - section_match = value.startswith('[') and value.endswith(']') - if section_match: - name = value.strip('[]') - continue - yield Pair(name, value) - - @staticmethod - def valid(line: str): - return line and not line.startswith('#') - - -class EntryPoint: - """An entry point as defined by Python packaging conventions. - - See `the packaging docs on entry points - <https://packaging.python.org/specifications/entry-points/>`_ - for more information. - - >>> ep = EntryPoint( - ... name=None, group=None, value='package.module:attr [extra1, extra2]') - >>> ep.module - 'package.module' - >>> ep.attr - 'attr' - >>> ep.extras - ['extra1', 'extra2'] - """ - - pattern = re.compile( - r'(?P<module>[\w.]+)\s*' - r'(:\s*(?P<attr>[\w.]+)\s*)?' - r'((?P<extras>\[.*\])\s*)?$' - ) - """ - A regular expression describing the syntax for an entry point, - which might look like: - - - module - - package.module - - package.module:attribute - - package.module:object.attribute - - package.module:attr [extra1, extra2] - - Other combinations are possible as well. - - The expression is lenient about whitespace around the ':', - following the attr, and following any extras. - """ - - name: str - value: str - group: str - - dist: Optional[Distribution] = None - - def __init__(self, name: str, value: str, group: str) -> None: - vars(self).update(name=name, value=value, group=group) - - def load(self) -> Any: - """Load the entry point from its definition. If only a module - is indicated by the value, return that module. Otherwise, - return the named object. - """ - match = cast(Match, self.pattern.match(self.value)) - module = import_module(match.group('module')) - attrs = filter(None, (match.group('attr') or '').split('.')) - return functools.reduce(getattr, attrs, module) - - @property - def module(self) -> str: - match = self.pattern.match(self.value) - assert match is not None - return match.group('module') - - @property - def attr(self) -> str: - match = self.pattern.match(self.value) - assert match is not None - return match.group('attr') - - @property - def extras(self) -> List[str]: - match = self.pattern.match(self.value) - assert match is not None - return re.findall(r'\w+', match.group('extras') or '') - - def _for(self, dist): - vars(self).update(dist=dist) - return self - - def matches(self, **params): - """ - EntryPoint matches the given parameters. - - >>> ep = EntryPoint(group='foo', name='bar', value='bing:bong [extra1, extra2]') - >>> ep.matches(group='foo') - True - >>> ep.matches(name='bar', value='bing:bong [extra1, extra2]') - True - >>> ep.matches(group='foo', name='other') - False - >>> ep.matches() - True - >>> ep.matches(extras=['extra1', 'extra2']) - True - >>> ep.matches(module='bing') - True - >>> ep.matches(attr='bong') - True - """ - attrs = (getattr(self, param) for param in params) - return all(map(operator.eq, params.values(), attrs)) - - def _key(self): - return self.name, self.value, self.group - - def __lt__(self, other): - return self._key() < other._key() - - def __eq__(self, other): - return self._key() == other._key() - - def __setattr__(self, name, value): - raise AttributeError("EntryPoint objects are immutable.") - - def __repr__(self): - return ( - f'EntryPoint(name={self.name!r}, value={self.value!r}, ' - f'group={self.group!r})' - ) - - def __hash__(self) -> int: - return hash(self._key()) - - -class EntryPoints(tuple): - """ - An immutable collection of selectable EntryPoint objects. - """ - - __slots__ = () - - def __getitem__(self, name: str) -> EntryPoint: # type: ignore[override] - """ - Get the EntryPoint in self matching name. - """ - try: - return next(iter(self.select(name=name))) - except StopIteration: - raise KeyError(name) - - def __repr__(self): - """ - Repr with classname and tuple constructor to - signal that we deviate from regular tuple behavior. - """ - return '%s(%r)' % (self.__class__.__name__, tuple(self)) - - def select(self, **params) -> EntryPoints: - """ - Select entry points from self that match the - given parameters (typically group and/or name). - """ - return EntryPoints(ep for ep in self if ep.matches(**params)) - - @property - def names(self) -> Set[str]: - """ - Return the set of all names of all entry points. - """ - return {ep.name for ep in self} - - @property - def groups(self) -> Set[str]: - """ - Return the set of all groups of all entry points. - """ - return {ep.group for ep in self} - - @classmethod - def _from_text_for(cls, text, dist): - return cls(ep._for(dist) for ep in cls._from_text(text)) - - @staticmethod - def _from_text(text): - return ( - EntryPoint(name=item.value.name, value=item.value.value, group=item.name) - for item in Sectioned.section_pairs(text or '') - ) - - -class PackagePath(pathlib.PurePosixPath): - """A reference to a path in a package""" - - hash: Optional[FileHash] - size: int - dist: Distribution - - def read_text(self, encoding: str = 'utf-8') -> str: # type: ignore[override] - return self.locate().read_text(encoding=encoding) - - def read_binary(self) -> bytes: - return self.locate().read_bytes() - - def locate(self) -> SimplePath: - """Return a path-like object for this path""" - return self.dist.locate_file(self) - - -class FileHash: - def __init__(self, spec: str) -> None: - self.mode, _, self.value = spec.partition('=') - - def __repr__(self) -> str: - return f'<FileHash mode: {self.mode} value: {self.value}>' - - -class DeprecatedNonAbstract: - # Required until Python 3.14 - def __new__(cls, *args, **kwargs): - all_names = { - name for subclass in inspect.getmro(cls) for name in vars(subclass) - } - abstract = { - name - for name in all_names - if getattr(getattr(cls, name), '__isabstractmethod__', False) - } - if abstract: - warnings.warn( - f"Unimplemented abstract methods {abstract}", - DeprecationWarning, - stacklevel=2, - ) - return super().__new__(cls) - - -class Distribution(DeprecatedNonAbstract): - """ - An abstract Python distribution package. - - Custom providers may derive from this class and define - the abstract methods to provide a concrete implementation - for their environment. Some providers may opt to override - the default implementation of some properties to bypass - the file-reading mechanism. - """ - - @abc.abstractmethod - def read_text(self, filename) -> Optional[str]: - """Attempt to load metadata file given by the name. - - Python distribution metadata is organized by blobs of text - typically represented as "files" in the metadata directory - (e.g. package-1.0.dist-info). These files include things - like: - - - METADATA: The distribution metadata including fields - like Name and Version and Description. - - entry_points.txt: A series of entry points as defined in - `the entry points spec <https://packaging.python.org/en/latest/specifications/entry-points/#file-format>`_. - - RECORD: A record of files according to - `this recording spec <https://packaging.python.org/en/latest/specifications/recording-installed-packages/#the-record-file>`_. - - A package may provide any set of files, including those - not listed here or none at all. - - :param filename: The name of the file in the distribution info. - :return: The text if found, otherwise None. - """ - - @abc.abstractmethod - def locate_file(self, path: str | os.PathLike[str]) -> SimplePath: - """ - Given a path to a file in this distribution, return a SimplePath - to it. - """ - - @classmethod - def from_name(cls, name: str) -> Distribution: - """Return the Distribution for the given package name. - - :param name: The name of the distribution package to search for. - :return: The Distribution instance (or subclass thereof) for the named - package, if found. - :raises PackageNotFoundError: When the named package's distribution - metadata cannot be found. - :raises ValueError: When an invalid value is supplied for name. - """ - if not name: - raise ValueError("A distribution name is required.") - try: - return next(iter(cls.discover(name=name))) - except StopIteration: - raise PackageNotFoundError(name) - - @classmethod - def discover( - cls, *, context: Optional[DistributionFinder.Context] = None, **kwargs - ) -> Iterable[Distribution]: - """Return an iterable of Distribution objects for all packages. - - Pass a ``context`` or pass keyword arguments for constructing - a context. - - :context: A ``DistributionFinder.Context`` object. - :return: Iterable of Distribution objects for packages matching - the context. - """ - if context and kwargs: - raise ValueError("cannot accept context and kwargs") - context = context or DistributionFinder.Context(**kwargs) - return itertools.chain.from_iterable( - resolver(context) for resolver in cls._discover_resolvers() - ) - - @staticmethod - def at(path: str | os.PathLike[str]) -> Distribution: - """Return a Distribution for the indicated metadata path. - - :param path: a string or path-like object - :return: a concrete Distribution instance for the path - """ - return PathDistribution(pathlib.Path(path)) - - @staticmethod - def _discover_resolvers(): - """Search the meta_path for resolvers (MetadataPathFinders).""" - declared = ( - getattr(finder, 'find_distributions', None) for finder in sys.meta_path - ) - return filter(None, declared) - - @property - def metadata(self) -> _meta.PackageMetadata: - """Return the parsed metadata for this Distribution. - - The returned object will have keys that name the various bits of - metadata per the - `Core metadata specifications <https://packaging.python.org/en/latest/specifications/core-metadata/#core-metadata>`_. - - Custom providers may provide the METADATA file or override this - property. - """ - # deferred for performance (python/cpython#109829) - from . import _adapters - - opt_text = ( - self.read_text('METADATA') - or self.read_text('PKG-INFO') - # This last clause is here to support old egg-info files. Its - # effect is to just end up using the PathDistribution's self._path - # (which points to the egg-info file) attribute unchanged. - or self.read_text('') - ) - text = cast(str, opt_text) - return _adapters.Message(email.message_from_string(text)) - - @property - def name(self) -> str: - """Return the 'Name' metadata for the distribution package.""" - return self.metadata['Name'] - - @property - def _normalized_name(self): - """Return a normalized version of the name.""" - return Prepared.normalize(self.name) - - @property - def version(self) -> str: - """Return the 'Version' metadata for the distribution package.""" - return self.metadata['Version'] - - @property - def entry_points(self) -> EntryPoints: - """ - Return EntryPoints for this distribution. - - Custom providers may provide the ``entry_points.txt`` file - or override this property. - """ - return EntryPoints._from_text_for(self.read_text('entry_points.txt'), self) - - @property - def files(self) -> Optional[List[PackagePath]]: - """Files in this distribution. - - :return: List of PackagePath for this distribution or None - - Result is `None` if the metadata file that enumerates files - (i.e. RECORD for dist-info, or installed-files.txt or - SOURCES.txt for egg-info) is missing. - Result may be empty if the metadata exists but is empty. - - Custom providers are recommended to provide a "RECORD" file (in - ``read_text``) or override this property to allow for callers to be - able to resolve filenames provided by the package. - """ - - def make_file(name, hash=None, size_str=None): - result = PackagePath(name) - result.hash = FileHash(hash) if hash else None - result.size = int(size_str) if size_str else None - result.dist = self - return result - - @pass_none - def make_files(lines): - # Delay csv import, since Distribution.files is not as widely used - # as other parts of importlib.metadata - import csv - - return starmap(make_file, csv.reader(lines)) - - @pass_none - def skip_missing_files(package_paths): - return list(filter(lambda path: path.locate().exists(), package_paths)) - - return skip_missing_files( - make_files( - self._read_files_distinfo() - or self._read_files_egginfo_installed() - or self._read_files_egginfo_sources() - ) - ) - - def _read_files_distinfo(self): - """ - Read the lines of RECORD. - """ - text = self.read_text('RECORD') - return text and text.splitlines() - - def _read_files_egginfo_installed(self): - """ - Read installed-files.txt and return lines in a similar - CSV-parsable format as RECORD: each file must be placed - relative to the site-packages directory and must also be - quoted (since file names can contain literal commas). - - This file is written when the package is installed by pip, - but it might not be written for other installation methods. - Assume the file is accurate if it exists. - """ - text = self.read_text('installed-files.txt') - # Prepend the .egg-info/ subdir to the lines in this file. - # But this subdir is only available from PathDistribution's - # self._path. - subdir = getattr(self, '_path', None) - if not text or not subdir: - return - - paths = ( - (subdir / name) - .resolve() - .relative_to(self.locate_file('').resolve(), walk_up=True) - .as_posix() - for name in text.splitlines() - ) - return map('"{}"'.format, paths) - - def _read_files_egginfo_sources(self): - """ - Read SOURCES.txt and return lines in a similar CSV-parsable - format as RECORD: each file name must be quoted (since it - might contain literal commas). - - Note that SOURCES.txt is not a reliable source for what - files are installed by a package. This file is generated - for a source archive, and the files that are present - there (e.g. setup.py) may not correctly reflect the files - that are present after the package has been installed. - """ - text = self.read_text('SOURCES.txt') - return text and map('"{}"'.format, text.splitlines()) - - @property - def requires(self) -> Optional[List[str]]: - """Generated requirements specified for this Distribution""" - reqs = self._read_dist_info_reqs() or self._read_egg_info_reqs() - return reqs and list(reqs) - - def _read_dist_info_reqs(self): - return self.metadata.get_all('Requires-Dist') - - def _read_egg_info_reqs(self): - source = self.read_text('requires.txt') - return pass_none(self._deps_from_requires_text)(source) - - @classmethod - def _deps_from_requires_text(cls, source): - return cls._convert_egg_info_reqs_to_simple_reqs(Sectioned.read(source)) - - @staticmethod - def _convert_egg_info_reqs_to_simple_reqs(sections): - """ - Historically, setuptools would solicit and store 'extra' - requirements, including those with environment markers, - in separate sections. More modern tools expect each - dependency to be defined separately, with any relevant - extras and environment markers attached directly to that - requirement. This method converts the former to the - latter. See _test_deps_from_requires_text for an example. - """ - - def make_condition(name): - return name and f'extra == "{name}"' - - def quoted_marker(section): - section = section or '' - extra, sep, markers = section.partition(':') - if extra and markers: - markers = f'({markers})' - conditions = list(filter(None, [markers, make_condition(extra)])) - return '; ' + ' and '.join(conditions) if conditions else '' - - def url_req_space(req): - """ - PEP 508 requires a space between the url_spec and the quoted_marker. - Ref python/importlib_metadata#357. - """ - # '@' is uniquely indicative of a url_req. - return ' ' * ('@' in req) - - for section in sections: - space = url_req_space(section.value) - yield section.value + space + quoted_marker(section.name) - - @property - def origin(self): - return self._load_json('direct_url.json') - - def _load_json(self, filename): - return pass_none(json.loads)( - self.read_text(filename), - object_hook=lambda data: types.SimpleNamespace(**data), - ) - - -class DistributionFinder(MetaPathFinder): - """ - A MetaPathFinder capable of discovering installed distributions. - - Custom providers should implement this interface in order to - supply metadata. - """ - - class Context: - """ - Keyword arguments presented by the caller to - ``distributions()`` or ``Distribution.discover()`` - to narrow the scope of a search for distributions - in all DistributionFinders. - - Each DistributionFinder may expect any parameters - and should attempt to honor the canonical - parameters defined below when appropriate. - - This mechanism gives a custom provider a means to - solicit additional details from the caller beyond - "name" and "path" when searching distributions. - For example, imagine a provider that exposes suites - of packages in either a "public" or "private" ``realm``. - A caller may wish to query only for distributions in - a particular realm and could call - ``distributions(realm="private")`` to signal to the - custom provider to only include distributions from that - realm. - """ - - name = None - """ - Specific name for which a distribution finder should match. - A name of ``None`` matches all distributions. - """ - - def __init__(self, **kwargs): - vars(self).update(kwargs) - - @property - def path(self) -> List[str]: - """ - The sequence of directory path that a distribution finder - should search. - - Typically refers to Python installed package paths such as - "site-packages" directories and defaults to ``sys.path``. - """ - return vars(self).get('path', sys.path) - - @abc.abstractmethod - def find_distributions(self, context=Context()) -> Iterable[Distribution]: - """ - Find distributions. - - Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the ``context``, - a DistributionFinder.Context instance. - """ - - -class FastPath: - """ - Micro-optimized class for searching a root for children. - - Root is a path on the file system that may contain metadata - directories either as natural directories or within a zip file. - - >>> FastPath('').children() - ['...'] - - FastPath objects are cached and recycled for any given root. - - >>> FastPath('foobar') is FastPath('foobar') - True - """ - - @functools.lru_cache() # type: ignore - def __new__(cls, root): - return super().__new__(cls) - - def __init__(self, root): - self.root = root - - def joinpath(self, child): - return pathlib.Path(self.root, child) - - def children(self): - with suppress(Exception): - return os.listdir(self.root or '.') - with suppress(Exception): - return self.zip_children() - return [] - - def zip_children(self): - zip_path = zipfile.Path(self.root) - names = zip_path.root.namelist() - self.joinpath = zip_path.joinpath - - return dict.fromkeys(child.split(posixpath.sep, 1)[0] for child in names) - - def search(self, name): - return self.lookup(self.mtime).search(name) - - @property - def mtime(self): - with suppress(OSError): - return os.stat(self.root).st_mtime - self.lookup.cache_clear() - - @method_cache - def lookup(self, mtime): - return Lookup(self) - - -class Lookup: - """ - A micro-optimized class for searching a (fast) path for metadata. - """ - - def __init__(self, path: FastPath): - """ - Calculate all of the children representing metadata. - - From the children in the path, calculate early all of the - children that appear to represent metadata (infos) or legacy - metadata (eggs). - """ - - base = os.path.basename(path.root).lower() - base_is_egg = base.endswith(".egg") - self.infos = FreezableDefaultDict(list) - self.eggs = FreezableDefaultDict(list) - - for child in path.children(): - low = child.lower() - if low.endswith((".dist-info", ".egg-info")): - # rpartition is faster than splitext and suitable for this purpose. - name = low.rpartition(".")[0].partition("-")[0] - normalized = Prepared.normalize(name) - self.infos[normalized].append(path.joinpath(child)) - elif base_is_egg and low == "egg-info": - name = base.rpartition(".")[0].partition("-")[0] - legacy_normalized = Prepared.legacy_normalize(name) - self.eggs[legacy_normalized].append(path.joinpath(child)) - - self.infos.freeze() - self.eggs.freeze() - - def search(self, prepared: Prepared): - """ - Yield all infos and eggs matching the Prepared query. - """ - infos = ( - self.infos[prepared.normalized] - if prepared - else itertools.chain.from_iterable(self.infos.values()) - ) - eggs = ( - self.eggs[prepared.legacy_normalized] - if prepared - else itertools.chain.from_iterable(self.eggs.values()) - ) - return itertools.chain(infos, eggs) - - -class Prepared: - """ - A prepared search query for metadata on a possibly-named package. - - Pre-calculates the normalization to prevent repeated operations. - - >>> none = Prepared(None) - >>> none.normalized - >>> none.legacy_normalized - >>> bool(none) - False - >>> sample = Prepared('Sample__Pkg-name.foo') - >>> sample.normalized - 'sample_pkg_name_foo' - >>> sample.legacy_normalized - 'sample__pkg_name.foo' - >>> bool(sample) - True - """ - - normalized = None - legacy_normalized = None - - def __init__(self, name: Optional[str]): - self.name = name - if name is None: - return - self.normalized = self.normalize(name) - self.legacy_normalized = self.legacy_normalize(name) - - @staticmethod - def normalize(name): - """ - PEP 503 normalization plus dashes as underscores. - """ - return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_') - - @staticmethod - def legacy_normalize(name): - """ - Normalize the package name as found in the convention in - older packaging tools versions and specs. - """ - return name.lower().replace('-', '_') - - def __bool__(self): - return bool(self.name) - - -class MetadataPathFinder(DistributionFinder): - @classmethod - def find_distributions( - cls, context=DistributionFinder.Context() - ) -> Iterable[PathDistribution]: - """ - Find distributions. - - Return an iterable of all Distribution instances capable of - loading the metadata for packages matching ``context.name`` - (or all names if ``None`` indicated) along the paths in the list - of directories ``context.path``. - """ - found = cls._search_paths(context.name, context.path) - return map(PathDistribution, found) - - @classmethod - def _search_paths(cls, name, paths): - """Find metadata directories in paths heuristically.""" - prepared = Prepared(name) - return itertools.chain.from_iterable( - path.search(prepared) for path in map(FastPath, paths) - ) - - @classmethod - def invalidate_caches(cls) -> None: - FastPath.__new__.cache_clear() - - -class PathDistribution(Distribution): - def __init__(self, path: SimplePath) -> None: - """Construct a distribution. - - :param path: SimplePath indicating the metadata directory. - """ - self._path = path - - def read_text(self, filename: str | os.PathLike[str]) -> Optional[str]: - with suppress( - FileNotFoundError, - IsADirectoryError, - KeyError, - NotADirectoryError, - PermissionError, - ): - return self._path.joinpath(filename).read_text(encoding='utf-8') - - return None - - read_text.__doc__ = Distribution.read_text.__doc__ - - def locate_file(self, path: str | os.PathLike[str]) -> SimplePath: - return self._path.parent / path - - @property - def _normalized_name(self): - """ - Performance optimization: where possible, resolve the - normalized name from the file system path. - """ - stem = os.path.basename(str(self._path)) - return ( - pass_none(Prepared.normalize)(self._name_from_stem(stem)) - or super()._normalized_name - ) - - @staticmethod - def _name_from_stem(stem): - """ - >>> PathDistribution._name_from_stem('foo-3.0.egg-info') - 'foo' - >>> PathDistribution._name_from_stem('CherryPy-3.0.dist-info') - 'CherryPy' - >>> PathDistribution._name_from_stem('face.egg-info') - 'face' - >>> PathDistribution._name_from_stem('foo.bar') - """ - filename, ext = os.path.splitext(stem) - if ext not in ('.dist-info', '.egg-info'): - return - name, sep, rest = filename.partition('-') - return name - - -def distribution(distribution_name: str) -> Distribution: - """Get the ``Distribution`` instance for the named package. - - :param distribution_name: The name of the distribution package as a string. - :return: A ``Distribution`` instance (or subclass thereof). - """ - return Distribution.from_name(distribution_name) - - -def distributions(**kwargs) -> Iterable[Distribution]: - """Get all ``Distribution`` instances in the current environment. - - :return: An iterable of ``Distribution`` instances. - """ - return Distribution.discover(**kwargs) - - -def metadata(distribution_name: str) -> _meta.PackageMetadata: - """Get the metadata for the named package. - - :param distribution_name: The name of the distribution package to query. - :return: A PackageMetadata containing the parsed metadata. - """ - return Distribution.from_name(distribution_name).metadata - - -def version(distribution_name: str) -> str: - """Get the version string for the named package. - - :param distribution_name: The name of the distribution package to query. - :return: The version string for the package as defined in the package's - "Version" metadata key. - """ - return distribution(distribution_name).version - - -_unique = functools.partial( - unique_everseen, - key=operator.attrgetter('_normalized_name'), -) -""" -Wrapper for ``distributions`` to return unique distributions by name. -""" - - -def entry_points(**params) -> EntryPoints: - """Return EntryPoint objects for all installed packages. - - Pass selection parameters (group or name) to filter the - result to entry points matching those properties (see - EntryPoints.select()). - - :return: EntryPoints for all installed packages. - """ - eps = itertools.chain.from_iterable( - dist.entry_points for dist in _unique(distributions()) - ) - return EntryPoints(eps).select(**params) - - -def files(distribution_name: str) -> Optional[List[PackagePath]]: - """Return a list of files for the named package. - - :param distribution_name: The name of the distribution package to query. - :return: List of files composing the distribution. - """ - return distribution(distribution_name).files - - -def requires(distribution_name: str) -> Optional[List[str]]: - """ - Return a list of requirements for the named package. - - :return: An iterable of requirements, suitable for - packaging.requirement.Requirement. - """ - return distribution(distribution_name).requires - - -def packages_distributions() -> Mapping[str, List[str]]: - """ - Return a mapping of top-level packages to their - distributions. - - >>> import collections.abc - >>> pkgs = packages_distributions() - >>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values()) - True - """ - pkg_to_dist = collections.defaultdict(list) - for dist in distributions(): - for pkg in _top_level_declared(dist) or _top_level_inferred(dist): - pkg_to_dist[pkg].append(dist.metadata['Name']) - return dict(pkg_to_dist) - - -def _top_level_declared(dist): - return (dist.read_text('top_level.txt') or '').split() - - -def _topmost(name: PackagePath) -> Optional[str]: - """ - Return the top-most parent as long as there is a parent. - """ - top, *rest = name.parts - return top if rest else None - - -def _get_toplevel_name(name: PackagePath) -> str: - """ - Infer a possibly importable module name from a name presumed on - sys.path. - - >>> _get_toplevel_name(PackagePath('foo.py')) - 'foo' - >>> _get_toplevel_name(PackagePath('foo')) - 'foo' - >>> _get_toplevel_name(PackagePath('foo.pyc')) - 'foo' - >>> _get_toplevel_name(PackagePath('foo/__init__.py')) - 'foo' - >>> _get_toplevel_name(PackagePath('foo.pth')) - 'foo.pth' - >>> _get_toplevel_name(PackagePath('foo.dist-info')) - 'foo.dist-info' - """ - return _topmost(name) or ( - # python/typeshed#10328 - inspect.getmodulename(name) # type: ignore - or str(name) - ) - - -def _top_level_inferred(dist): - opt_names = set(map(_get_toplevel_name, always_iterable(dist.files))) - - def importable_name(name): - return '.' not in name - - return filter(importable_name, opt_names) diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index ff59dedc45aafcff7f270afca639959e827b32c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60131 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 diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_adapters.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_adapters.cpython-314.pyc deleted file mode 100644 index e893c3493518331333df6e3271e6aaee7c2766ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4204 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 diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_collections.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_collections.cpython-314.pyc deleted file mode 100644 index 2e2edb7a72b58296218c596710317e7fa3f57b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2053 zcmaJ?&2Jk;6rb^WW5-VGeg{ZF8;sIeZLGRAP4m&Hr4<qq3XubrP@N2u-Ep&Yy}Qhe zOOpf2jh+w(4n;zuoM<Hu9QiYvrl@G)f;e%bq%Gyfd%Nq@l!%f1_U)VZelz>t?>!&i zyQe^4-7tT2O@ol%@TIr%sj?k{vO$(fgT6&HIZQ@LBQs1I#u8b`^qikP>wtqxXJXGR zc$(ljkXZXA;FyhpdWx|Vmu=88spNh~*Lk}?pm*B#ELb_=bb~ArO&f65vZ;+DB%lqd zvrTfE;tjpLHXFt;(F2XF&NZpdH^~gugMe;Ehu)Mztn(F5ToP^G_4Fmz*6WW8@3gh> zEmvEvvK*mYi7u87tWb(;!q=8w6;`LKxpo8J3fct@ZZUx60D{FKUP8RGT;J6$_bfZ` zm6lx_15Q|~Yp)i#>POr`bGp*?uRySnF?_X9n46ok9LG9m?RMR9&sDmT`dmJ_ROMkP zd}sVv?O4xRZR2N(@!tF8+EU^2QXJw5f822@g<8SxB^HyNgCCSIzda4gETp(a(TuA} z8l<)3yO?Q`4}c`S!i|z9t*5?aa)(Aa)|SD#@GC}?yCNWCT1KYohC)U~#yYN2@U@J= zc2)_m9T``}S~SR*?Qx|TQ%Iz-v5n}Hi_@+5l#r^$9U*H|Qzu&=2l8qwl);C>)~aQD zLDyN~N=#tRK`6~VPsoW{Yhg{V2L9<<oz>a(vuD`5q7!;t3#L0^>uq<X<#xhAY7evy zT+!j0x0oG3bX+f04c8>LNVIDKs(qhv2)xu$5KlMAFQp@&>znU?XWq$ej?dgL&Hk{s zRl0CDe_<Q;iM^9hc)@hW>3#(i4t*B0mmqr=i4V49#XXVvPvk+^-F^)O7HW|$^dqN{ z_4Em>r}GsWl~TI0Hn(*k*D4t~1TL}&Lg8)3HsoG-MEO~dcUBxe7ftL&zLZ(jSue1; zr{+LO++RQ-M1Vxxsy`@CZk8wSm#5@DFwIMx0~MN_hPQ1ehYch=jYj_Gs9|tdSPabY z@YId$XG1Y)f?0_2jQPAH7>f!}m%!<Is1GsrQI~t^PKmL$D-{&n7k&WSImVp8W-P9< zJOb#^Vc;J2x6P2U?n+k+pkuT@WhS<{Ej$lQds0*K3Ypx4@jWX#0u<)-{Q3AZWft^U zn4qYaK>YnF)cj#)$jm=JO3gRuUjx*f{*!=6z6~RGAA%=g2MMz?0!QKzNS0uL4wGKl zVFYIMK$GZP!vG3oqwE5A<-a<95P)I|E`x#u9PR7*XZ^l_S9xwV=>pD+=T?I()19%N z&Wll!B}l=Do`Xvm9Uevoj71m-km3*?q37yKCNgYKMOiJb>x7JB2|vt`OC_QLUcMUZ z*lMZ_VuSozI`GBCuZ*t;zZ|?(|91MD>D%`AwXO2&TZhhUmL~7!C*xG!A@h~IM0Uy- zQDFAv2#BZ{PaNp~)xeR*(fl$B>`0)h1rLQ(O>6ins1gOnDkSAotl>}QzK0oVp4~Rc z!2TzwB?Uy!^#an*y2ib(fd8Ii-++mVX+I)cVroROv!lBqjIj8y34lnz(#A~4Jtt4W z2Hs4a2JweMDgBuoc$7a#r*F<Y7&)~$a_SL*mq#ZIdiKW5gW~AD;^?ih+b6b)lTQfP HV$gp8g{kTy diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_functools.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_functools.cpython-314.pyc deleted file mode 100644 index df143a4481add17dcf44a595559f6b2af3700090..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3324 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 diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_itertools.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_itertools.cpython-314.pyc deleted file mode 100644 index a6bb2a2b51c80cfce2f22ee4e0f8cb9fb1812130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2364 zcmbVN&2Jk;6rc6lspBMd(v&19Uz1wI+297;xQK)%kQUlREm7qLN2oUT+B;6RS?`*e zabnX}ih2qPf=KOwV-Fn44I!=^`X7`CXu2vAf>Upi93kMuoApOb5|xUTcXs^def-{g zznOXUc$*Kwv*GzkPk0gfUHqv%uIi*5g2_7i2t}niG%Imw5Jf#vxf>Z0cO~S6d)zfH zMcvMSPt+AaO4Bo8sz`QARyR1IS=C@<K2vij7Txd$;8Xq$Ca2IK1c*ywK|GPl2jyKc z*VRU=np}=aSwPi?;-0Dqfo4-}zW<G(NY%a_UGyWAcgN%*6mv(au?AsYMC+bGbh!he zW;6gv22c!v_MoFJHEQQQi_r<NT#`lX%bf^0-aJQm8`}4FR@NoO^~vlNopD?+^^Xe# z6NBW4$yo^JDPe@J>gE!*s7B}*j>1wdO(<3kqppa_Do7Y1=GeUAwq-`REvuSF0SdBP zlgW%_a#c53GO0A#ULC5grVV1tE2Lz*g`MpcV-jraW7Y7sw8BKuhKDgc_N@z(@ecqD zi>m-6JTdWle9fXO@jSI|kPK(>jA0eDw93e7-PAb@i~~kOPlw}IOMKZf$HS3iBw2j( zjpPE!<qegSB+upJSM+pT&*d%34VdK!S2dNZ@uWb>Ez4kI`I7CglqM+>6-X(x%b^Kd zg2^)=$etIq`Zv$6zq{k_{G#}2aea2@nD5Tbr`@OSM;-?vKLjG*EdSj7_Qs_rttYn@ ze{AjFIq~vm@0UHO=N+l+MLif++B>%{-EG~N+3~l3e)~y#&zBwdT6Vhn@3obiLE$gf z3bF3Ybj`dbJ?uXL;~~;Qz1`*SKx-Xnk_B}jVV$^9sYV4LkwgZZRnZ~mS(IvI3|1vt z+rRB&XuQEgZ-Zwbay3c-VH6kJ$9bBN)-HSuHs~%icqzF0VV~*fEx8{F8me9}oy+1; zD}7@W>kQYJ62g@50yVK}R%G0w*b=1Exucb1laoH5Aj<UgGzN1#g-606d?tj)mAc#j zl8>mynp$E`dj$zcKv}7%T(24=e7;5yrp1o{f-Mu6#!0TehN~<WyT!@iFr@H{LpcB< zm70fusZ?VnfW^F24}U0sVetHTLZg;D#5-TY8p)~!gNJZhH&t4KdTW@IBFBtV$ctf> z5-bV=xiTF#BGL8%96}JxT2}D+5E`oQXjjt~`#8x<dE(Fj&XbU6s@Uf^3$0&U)-%gE zmC~8B&CQI{MnGLNQ&K5kg)$7(7H9!Vhu17K$Z?t+1%B)xdu|5R;3N*;egXIx2k@LY z(>SS+k}ngi=@}km7*06mxVR4f694I}A%!X7K~aSB1xi%zc!UPPPaM>|;<W}7>UNEA zJX){7DCQQVUSW-xtE-l-K|@QJ<w-_Y4ZIB9H3VCoE;})*MfO!r%zB~rccO@2+m-*b z-;FsoGBB78hH%iT3<=-YNRe%~h-Lfs`)oHa04v_3)S`;ZmI1HbT+f+_>vVXS9*2+Z zKd{khH%P_HK7?T%?M5Z!ZGjWo-??>uv$)~^)!VV{?f+`>LFRE_YCA9`7Orhw+`RS3 z+q>(QJ$*uOVYBqe+w<qsmXmu(s)!t&ZP1ZH@HZ1T!?(UE^nLeCxBRe6f>Dv?;ofT& zxi~k9b1ynq2;7yN+MaZY6XpP<aMPnQyr`0e_gv1>3I>^`eIOI3EbD~<VoB03XlSp= XFAeMtqgO^AymbHEALxwKN5%R-DZ_Dg diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_meta.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_meta.cpython-314.pyc deleted file mode 100644 index c9d6fe2e0ff05adf952df5e60421c2d2bec1fa17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5641 zcmcIoTW=f36`m!RSKaLBX4Ps<QHET#x<s~`+O3nyb&XP~swivOC}7cxCAqTJUUHe) zp>67kXp11|Qy$ef_s#kb{Sgw1!p<T_T?9suHwki+*M4Vqd6R6(k&yv-_UxJ2nRCvZ zD}UbIm1G#7MgDCq#2EXEUg{&_Bg)?2fYjJ+rYZ9*qX^{;;i37E2;mu?4`)=NN}38h zA|jcnh-P9UmWhjaCLt1;q)28uL`SAmbe>_^<OtIuvx>jF=;~*9j}9^|mQ`oN0kvCF z<De#5s6AR}l#M69p+)10*I|@OjxdDfl-xzU$CtPxoV;U?$Gz~CQq@y`XXS+#pBE-K zgu^{`!E*8bQJFq5Y%jK4Et@wD?nQ2tK=I<veUsacQSd_ga^7dfhpPWj_WlW^#<EN( z8iV{DBCILkGBn8S6GGL(z*UJyv<Ps>1$tDA0f#ieW7)XYuO;!`LGQLQ8=NB&nCS$) zi|B3Ceytnyo_*_+SbqZalWpsh*$(X;P<z{`om!vh(h|_#fY-BR<nI}G%s-mKC>X-X z(^Ul5!9u`s3CiBE6!a#$9lH2e#tNVfvyYWEMN_oUw1SPo-_Tkw%1u$>B`<81#3tQJ zbk*TSL%6hK+Iw*IS1UJMle;TM!Q?ZSF1@?*z~T2+%G|kY=7qbGx1CBMXSn91Rk8$t zD-7E<`Q*&XQdO)ur3*8&`mFx&;(PkCSuERzFm+KZuPj)(6{}cwxUhj016fvd!lueq zuT$3p^DuSY8{Q}LRO@UfICZ<Eyie4TZFOX$7hn$rCUrvy4U!0YNbE&{)R@Lb*`~6{ z`|!4@c&cmKt5WJQJ^+#z({<Y{;qbwOhsy~%caJQq#{Qn?LqOWDf@b7Zq~wxUUxgOd z)M@gH2tSEso@xoR=!IRu`8)DG=Qy@xaa`g3p!oM9Ipl+Q=cfR=X@b_**c0{qwtD_i z@0NQ0aUU?BFS_dbc!e7HX-xX3g!qpMPXoC0)mWen+(+Ii2?H1W>icNU5;uWfHr?av zB_#Et`g#f9Gpl@*I3qESRLBV|YA9rSTb<r;x76uJF0f-N<Y%;Ft3o<-{f;T<x}cBK z2Ti0gDS7eDWb^7lb<m#DOpf+gsS2rp^{#qQyaiLq9;pvfTEj&qw$+J^Nq{CZn3m&E z+u+1utB1sO9rAO?f9jz8{){|05WZKQx7g++<cd=Ivp{O>^-iKiwCHpgjuHzTrDPOM zX%Sv*)v#<Qch^%Fost>or=BF<Oh3}Id=|cAp~&zqfv0_gJ7IdJ$K>;QVqiCdcVBJb zx-kw_+h*8zsS8-nDKEJ6=~&&d!Y~xCcfbBXq`2fFsY5NhQ8pADOGnX<#&MO$B`c%Y zLGr^XcKT}TmWh;fHj&bokG88H;Y*jo5CxvOZFO!Vyrs@P$^ksSjo0s~D*j8_uT?$# zBJp+!fa0r5HBF6u@qV!J521`-(1B#O>%9#dqPpW2Dw6Ec8u<ya*|elISyDQ%q;z0O z>F0@IvZVA|tH+DMP;?~RgGnlwplIH-qBFsfKZN3%R@CQPQA2BQW=mv`F6EsX`;LVp zox21!uI|v|aaumMX0A!<YxUMu&+Q5#MQD94smbal1r4R{8+OHXQ-<q0c?)GoA@#r# zYbhgDc3juW+0|6BVhd|ht}CRFaHf)eb?^$a`~ZCN-vAK9dlbX}%zUm|ReQYHo}#kX z_rVr-l-i_V{{}`l4t`vUAFZm~8hEcodG#2AMfJjHpYq0&S5hBd|7dYC?-a|Z(sQ<% zqS`R!tfs`8nX1=p4K3|Y59(bPMS0);&_>js;#B@y0_4^*eaRYRyxT)kq0o+`lGOF0 zQ>fU4qx|@!V%Wh<kFKv;+(qeFGE0uGbMiVqMqq-#y9B5_^TP*SmKR6KS~j_;@@w?k zuj{B(g_YM0A-I*R2or^k&xz!TYCzso2OU6M8{kv+OdWZlo`0cEzfdQhN4mZZAtmgE zS+skHu$?%tFV#6od8*FsMDb2*(v3A~x#ndEb{)`w?If|TNt2kb9O5C5Ut>^w#8CFi zfGy3;G&M75V$jS`BZFooLd^^{GQgwRnBS(gH5O<=v;@|mp`m6*B&e;SHU?iLsg<GD z1$c+nBRaJ>yy~QvypF=%HkS;swtg8#QbgrnH0+dH$+@N=^MJXmp{$>xB`I!xQn5JP zEmwtQ!-7fKXxFBaZIyruVIY~Zmy%Mwz7n9aa5E^EBMvN)uMfBQiQ~#+7p!}x%>7vz z%=sdAJ*-Uf2Afi~br+PegKmmSgCPp&Lr?o>s3aJAp6I1OKIFSTxqE$(e?gqqW}{hU zZw6KN$5_->RL1W*R*AId^|r86CrVcQ6!_o%QwPJ%_fjEW!r_N$glkwJ)9-a!NluY} zV+r{UEN>GH^|Ig<vtZqaI}fx-*Fu-4{i$)<TZhskZ(YjxKCxQwAJ1*8=Qff6P4!}0 zjzh2XKye%`8{8}j?_`UpKIt-ct5-5-{d3xj;$x)^K8kIRyiZD54OyvEd^~#WCee$V zrMy$HN_W~WI>Ak&pbPV%@cLS0Z%~N^E)#$>skgplFOsVwcpoYHl~&Qmw$-tXYXEP1 z%}FVj<iP9SFRmoZbICPp>>n4J$C2DLj(6E-@#T>cU&W%vWy?QCRQxg0WPy&SL9Dzs zRvk2K^C6<R+h*84iO%CG0{gOh7yms`GX&-dd<Z~)uoRp;lI~3+-6HS@0y=>L0gFJ9 zzyblPX#A~Za+V>Tz%+jDB*3R^7nwHxzc@m&1VJ`F7i8meUsK{9`&#}><nKh^kDs7g zW3_@m!cc2)sDgPR$MvG3T84FVx;##Cms7{ZsVC!c0to{24=ktpz^^!D87%9DM#^dO z?8PtpCCvxi#TTS__tyYBVMS4%vGi9g@r<4R4_kV|mj1<-(Dy~VK3o1vwibFB9Z@<z WUwg^$c$rc9l=SDPzGZmG&HoSQq%(#9 diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_text.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/metadata/__pycache__/_text.cpython-314.pyc deleted file mode 100644 index 12f2c10a899074b183fe4012c3e00e7dd0c950d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3868 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 DJm*^_ diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_adapters.py b/Python314_4_x86_Template/Lib/importlib/metadata/_adapters.py deleted file mode 100644 index 591168808..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_adapters.py +++ /dev/null @@ -1,89 +0,0 @@ -import functools -import warnings -import re -import textwrap -import email.message - -from ._text import FoldedCase - - -# Do not remove prior to 2024-01-01 or Python 3.14 -_warn = functools.partial( - warnings.warn, - "Implicit None on return values is deprecated and will raise KeyErrors.", - DeprecationWarning, - stacklevel=2, -) - - -class Message(email.message.Message): - multiple_use_keys = set( - map( - FoldedCase, - [ - 'Classifier', - 'Obsoletes-Dist', - 'Platform', - 'Project-URL', - 'Provides-Dist', - 'Provides-Extra', - 'Requires-Dist', - 'Requires-External', - 'Supported-Platform', - 'Dynamic', - ], - ) - ) - """ - Keys that may be indicated multiple times per PEP 566. - """ - - def __new__(cls, orig: email.message.Message): - res = super().__new__(cls) - vars(res).update(vars(orig)) - return res - - def __init__(self, *args, **kwargs): - self._headers = self._repair_headers() - - # suppress spurious error from mypy - def __iter__(self): - return super().__iter__() - - def __getitem__(self, item): - """ - Warn users that a ``KeyError`` can be expected when a - missing key is supplied. Ref python/importlib_metadata#371. - """ - res = super().__getitem__(item) - if res is None: - _warn() - return res - - def _repair_headers(self): - def redent(value): - "Correct for RFC822 indentation" - if not value or '\n' not in value: - return value - return textwrap.dedent(' ' * 8 + value) - - headers = [(key, redent(value)) for key, value in vars(self)['_headers']] - if self._payload: - headers.append(('Description', self.get_payload())) - return headers - - @property - def json(self): - """ - Convert PackageMetadata to a JSON-compatible format - per PEP 0566. - """ - - def transform(key): - value = self.get_all(key) if key in self.multiple_use_keys else self[key] - if key == 'Keywords': - value = re.split(r'\s+', value) - tk = key.lower().replace('-', '_') - return tk, value - - return dict(map(transform, map(FoldedCase, self))) diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_collections.py b/Python314_4_x86_Template/Lib/importlib/metadata/_collections.py deleted file mode 100644 index cf0954e1a..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_collections.py +++ /dev/null @@ -1,30 +0,0 @@ -import collections - - -# from jaraco.collections 3.3 -class FreezableDefaultDict(collections.defaultdict): - """ - Often it is desirable to prevent the mutation of - a default dict after its initial construction, such - as to prevent mutation during iteration. - - >>> dd = FreezableDefaultDict(list) - >>> dd[0].append('1') - >>> dd.freeze() - >>> dd[1] - [] - >>> len(dd) - 1 - """ - - def __missing__(self, key): - return getattr(self, '_frozen', super().__missing__)(key) - - def freeze(self): - self._frozen = lambda key: self.default_factory() - - -class Pair(collections.namedtuple('Pair', 'name value')): - @classmethod - def parse(cls, text): - return cls(*map(str.strip, text.split("=", 1))) diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_functools.py b/Python314_4_x86_Template/Lib/importlib/metadata/_functools.py deleted file mode 100644 index 71f66bd03..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_functools.py +++ /dev/null @@ -1,104 +0,0 @@ -import types -import functools - - -# from jaraco.functools 3.3 -def method_cache(method, cache_wrapper=None): - """ - Wrap lru_cache to support storing the cache data in the object instances. - - Abstracts the common paradigm where the method explicitly saves an - underscore-prefixed protected property on first call and returns that - subsequently. - - >>> class MyClass: - ... calls = 0 - ... - ... @method_cache - ... def method(self, value): - ... self.calls += 1 - ... return value - - >>> a = MyClass() - >>> a.method(3) - 3 - >>> for x in range(75): - ... res = a.method(x) - >>> a.calls - 75 - - Note that the apparent behavior will be exactly like that of lru_cache - except that the cache is stored on each instance, so values in one - instance will not flush values from another, and when an instance is - deleted, so are the cached values for that instance. - - >>> b = MyClass() - >>> for x in range(35): - ... res = b.method(x) - >>> b.calls - 35 - >>> a.method(0) - 0 - >>> a.calls - 75 - - Note that if method had been decorated with ``functools.lru_cache()``, - a.calls would have been 76 (due to the cached value of 0 having been - flushed by the 'b' instance). - - Clear the cache with ``.cache_clear()`` - - >>> a.method.cache_clear() - - Same for a method that hasn't yet been called. - - >>> c = MyClass() - >>> c.method.cache_clear() - - Another cache wrapper may be supplied: - - >>> cache = functools.lru_cache(maxsize=2) - >>> MyClass.method2 = method_cache(lambda self: 3, cache_wrapper=cache) - >>> a = MyClass() - >>> a.method2() - 3 - - Caution - do not subsequently wrap the method with another decorator, such - as ``@property``, which changes the semantics of the function. - - See also - http://code.activestate.com/recipes/577452-a-memoize-decorator-for-instance-methods/ - for another implementation and additional justification. - """ - cache_wrapper = cache_wrapper or functools.lru_cache() - - def wrapper(self, *args, **kwargs): - # it's the first call, replace the method with a cached, bound method - bound_method = types.MethodType(method, self) - cached_method = cache_wrapper(bound_method) - setattr(self, method.__name__, cached_method) - return cached_method(*args, **kwargs) - - # Support cache clear even before cache has been created. - wrapper.cache_clear = lambda: None - - return wrapper - - -# From jaraco.functools 3.3 -def pass_none(func): - """ - Wrap func so it's not called if its first param is None - - >>> print_text = pass_none(print) - >>> print_text('text') - text - >>> print_text(None) - """ - - @functools.wraps(func) - def wrapper(param, *args, **kwargs): - if param is not None: - return func(param, *args, **kwargs) - - return wrapper diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_itertools.py b/Python314_4_x86_Template/Lib/importlib/metadata/_itertools.py deleted file mode 100644 index d4ca9b914..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_itertools.py +++ /dev/null @@ -1,73 +0,0 @@ -from itertools import filterfalse - - -def unique_everseen(iterable, key=None): - "List unique elements, preserving order. Remember all elements ever seen." - # unique_everseen('AAAABBBCCDAABBB') --> A B C D - # unique_everseen('ABBCcAD', str.lower) --> A B C D - seen = set() - seen_add = seen.add - if key is None: - for element in filterfalse(seen.__contains__, iterable): - seen_add(element) - yield element - else: - for element in iterable: - k = key(element) - if k not in seen: - seen_add(k) - yield element - - -# copied from more_itertools 8.8 -def always_iterable(obj, base_type=(str, bytes)): - """If *obj* is iterable, return an iterator over its items:: - - >>> obj = (1, 2, 3) - >>> list(always_iterable(obj)) - [1, 2, 3] - - If *obj* is not iterable, return a one-item iterable containing *obj*:: - - >>> obj = 1 - >>> list(always_iterable(obj)) - [1] - - If *obj* is ``None``, return an empty iterable: - - >>> obj = None - >>> list(always_iterable(None)) - [] - - By default, binary and text strings are not considered iterable:: - - >>> obj = 'foo' - >>> list(always_iterable(obj)) - ['foo'] - - If *base_type* is set, objects for which ``isinstance(obj, base_type)`` - returns ``True`` won't be considered iterable. - - >>> obj = {'a': 1} - >>> list(always_iterable(obj)) # Iterate over the dict's keys - ['a'] - >>> list(always_iterable(obj, base_type=dict)) # Treat dicts as a unit - [{'a': 1}] - - Set *base_type* to ``None`` to avoid any special handling and treat objects - Python considers iterable as iterable: - - >>> obj = 'foo' - >>> list(always_iterable(obj, base_type=None)) - ['f', 'o', 'o'] - """ - if obj is None: - return iter(()) - - if (base_type is not None) and isinstance(obj, base_type): - return iter((obj,)) - - try: - return iter(obj) - except TypeError: - return iter((obj,)) diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_meta.py b/Python314_4_x86_Template/Lib/importlib/metadata/_meta.py deleted file mode 100644 index 1927d0f62..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_meta.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import annotations - -import os -from typing import Protocol -from typing import Any, Dict, Iterator, List, Optional, TypeVar, Union, overload - - -_T = TypeVar("_T") - - -class PackageMetadata(Protocol): - def __len__(self) -> int: ... # pragma: no cover - - def __contains__(self, item: str) -> bool: ... # pragma: no cover - - def __getitem__(self, key: str) -> str: ... # pragma: no cover - - def __iter__(self) -> Iterator[str]: ... # pragma: no cover - - @overload - def get( - self, name: str, failobj: None = None - ) -> Optional[str]: ... # pragma: no cover - - @overload - def get(self, name: str, failobj: _T) -> Union[str, _T]: ... # pragma: no cover - - # overload per python/importlib_metadata#435 - @overload - def get_all( - self, name: str, failobj: None = None - ) -> Optional[List[Any]]: ... # pragma: no cover - - @overload - def get_all(self, name: str, failobj: _T) -> Union[List[Any], _T]: - """ - Return all values associated with a possibly multi-valued key. - """ - - @property - def json(self) -> Dict[str, Union[str, List[str]]]: - """ - A JSON-compatible form of the metadata. - """ - - -class SimplePath(Protocol): - """ - A minimal subset of pathlib.Path required by Distribution. - """ - - def joinpath( - self, other: Union[str, os.PathLike[str]] - ) -> SimplePath: ... # pragma: no cover - - def __truediv__( - self, other: Union[str, os.PathLike[str]] - ) -> SimplePath: ... # pragma: no cover - - @property - def parent(self) -> SimplePath: ... # pragma: no cover - - def read_text(self, encoding=None) -> str: ... # pragma: no cover - - def read_bytes(self) -> bytes: ... # pragma: no cover - - def exists(self) -> bool: ... # pragma: no cover diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/_text.py b/Python314_4_x86_Template/Lib/importlib/metadata/_text.py deleted file mode 100644 index c88cfbb23..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/_text.py +++ /dev/null @@ -1,99 +0,0 @@ -import re - -from ._functools import method_cache - - -# from jaraco.text 3.5 -class FoldedCase(str): - """ - A case insensitive string class; behaves just like str - except compares equal when the only variation is case. - - >>> s = FoldedCase('hello world') - - >>> s == 'Hello World' - True - - >>> 'Hello World' == s - True - - >>> s != 'Hello World' - False - - >>> s.index('O') - 4 - - >>> s.split('O') - ['hell', ' w', 'rld'] - - >>> sorted(map(FoldedCase, ['GAMMA', 'alpha', 'Beta'])) - ['alpha', 'Beta', 'GAMMA'] - - Sequence membership is straightforward. - - >>> "Hello World" in [s] - True - >>> s in ["Hello World"] - True - - You may test for set inclusion, but candidate and elements - must both be folded. - - >>> FoldedCase("Hello World") in {s} - True - >>> s in {FoldedCase("Hello World")} - True - - String inclusion works as long as the FoldedCase object - is on the right. - - >>> "hello" in FoldedCase("Hello World") - True - - But not if the FoldedCase object is on the left: - - >>> FoldedCase('hello') in 'Hello World' - False - - In that case, use in_: - - >>> FoldedCase('hello').in_('Hello World') - True - - >>> FoldedCase('hello') > FoldedCase('Hello') - False - """ - - def __lt__(self, other): - return self.lower() < other.lower() - - def __gt__(self, other): - return self.lower() > other.lower() - - def __eq__(self, other): - return self.lower() == other.lower() - - def __ne__(self, other): - return self.lower() != other.lower() - - def __hash__(self): - return hash(self.lower()) - - def __contains__(self, other): - return super().lower().__contains__(other.lower()) - - def in_(self, other): - "Does self appear in other?" - return self in FoldedCase(other) - - # cache lower since it's likely to be called frequently. - @method_cache - def lower(self): - return super().lower() - - def index(self, sub): - return self.lower().index(sub.lower()) - - def split(self, splitter=' ', maxsplit=0): - pattern = re.compile(re.escape(splitter), re.I) - return pattern.split(self, maxsplit) diff --git a/Python314_4_x86_Template/Lib/importlib/metadata/diagnose.py b/Python314_4_x86_Template/Lib/importlib/metadata/diagnose.py deleted file mode 100644 index e405471ac..000000000 --- a/Python314_4_x86_Template/Lib/importlib/metadata/diagnose.py +++ /dev/null @@ -1,21 +0,0 @@ -import sys - -from . import Distribution - - -def inspect(path): - print("Inspecting", path) - dists = list(Distribution.discover(path=[path])) - if not dists: - return - print("Found", len(dists), "packages:", end=' ') - print(', '.join(dist.name for dist in dists)) - - -def run(): - for path in sys.path: - inspect(path) - - -if __name__ == '__main__': - run() diff --git a/Python314_4_x86_Template/Lib/importlib/readers.py b/Python314_4_x86_Template/Lib/importlib/readers.py deleted file mode 100644 index df7fb92e5..000000000 --- a/Python314_4_x86_Template/Lib/importlib/readers.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -Compatibility shim for .resources.readers as found on Python 3.10. - -Consumers that can rely on Python 3.11 should use the other -module directly. -""" - -from .resources.readers import ( - FileReader, ZipReader, MultiplexedPath, NamespaceReader, -) - -__all__ = ['FileReader', 'ZipReader', 'MultiplexedPath', 'NamespaceReader'] diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__init__.py b/Python314_4_x86_Template/Lib/importlib/resources/__init__.py deleted file mode 100644 index 723c9f9eb..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Read resources contained within a package. - -This codebase is shared between importlib.resources in the stdlib -and importlib_resources in PyPI. See -https://github.com/python/importlib_metadata/wiki/Development-Methodology -for more detail. -""" - -from ._common import ( - as_file, - files, - Package, - Anchor, -) - -from ._functional import ( - contents, - is_resource, - open_binary, - open_text, - path, - read_binary, - read_text, -) - -from .abc import ResourceReader - - -__all__ = [ - 'Package', - 'Anchor', - 'ResourceReader', - 'as_file', - 'files', - 'contents', - 'is_resource', - 'open_binary', - 'open_text', - 'path', - 'read_binary', - 'read_text', -] diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 0f97c0fd522e7c54444ab64338e8f4adc6749284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 885 zcma))&u`N(6vvaaY1*Xi08LyMiBpBvFl|C?LP!V>sl<<}j0=jeoaAjWOXA3Wr7K(z zC;k=wATGXg;{szsyJ8pU;D)7q;%9&J^~-y{IUM+w9v|FK?2BVrpH1**=y)~GU+C96 zYi6PK(w^B9J9f~CTiA-**p6Lvx6HaT>BJs-aTmLB4|}nXejH#B_pu)jaIn&}Cc}6G zH@2*?HFKZZcxBeUVU0R(zWOtuc_={gxyV3<8LyGD8uD<#uwZpa!-i%j^ccpze^@Z1 z$RVW?LOquS6<V4CE&%F~RSg$dvUGfDs4cL7P-3pveOl+2D)NtNx|~kN;WGfgKy2he z6dmgf=IJ=&Rn#o8;B~Y<fK-4qr%0m(J7Lj7cnu|QDyVV$F=%PdOMblckGKdcE+EXc zoRwpL)K(sq<cO7^Ttlh6>97A&o%?lGa53^!*Hl4!Nfj`;&Qb-uftsYOredjjs{r8? zRlA{Bs6gmSu6I{~*&W$xIQv~*Q)>`UMt#xNjTNrJz`!(Iv<x~1o<Y~3XJ9Uh2n_lf zqpQjzB<C3+dZLR{@%k@=wX+Jy(Y(%(@tT(Z;j3CS%~t6ce_ED=e6-H>ftGsv;2?P} zLCD19zq7x8D_L-Hk~D(9f(&Jnm3*F?OR>#rh8hyJ0f_CLWV-6y?#>?BBd2$6lS8PQ zk|GeSn&c5nlXXv%^>s)HF+PNho2BaBt$02!;hwmzbFuX!BaLq@+qTaf&u(8_b8Y9` c(zqCQH7t!YgCCog9e(c&0_VLaHuX0@0md@}-~a#s diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_adapters.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_adapters.cpython-314.pyc deleted file mode 100644 index 541dda2a07b60fda5b21e0aef16451f294ecd77e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10016 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 diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_common.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_common.cpython-314.pyc deleted file mode 100644 index 9fa88cd3b90d52ab445ebfeb8aa56f7beb56fbd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10177 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 diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_functional.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_functional.cpython-314.pyc deleted file mode 100644 index 59ba922e2363a682e922af41f2f2e1fd7890f2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3555 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 Dl>{XL diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_itertools.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/_itertools.cpython-314.pyc deleted file mode 100644 index 5311fb4e5830694bd3298826a41a8e993de92ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1546 zcmb_c&ube;6rR-&TVBg{>Oj<zrhUc1&MJypwWc&mV{lSYM2%u>)hTq1G+K?MsaHG8 z%*eJ90zMjgDfAL(59zW0K=1hv452hEfgbt~2y9B}DQ{)1qNb-p2lO=W%{On}eDB-2 zK0jv?9LLFD`BIXQKSC!OvC-u80#1&|R&2}25ZBOTi!2c<UUA|P68{tULqBo)%MffE z(b^7K9nJl?J>GG@usTZbCoYp$@tyb>o!l}uv830>{nB{nR5f<XSQ!D@X+qv6?-F}D z+Oabg<?0wf>{Jw=B2CO2Vy}>DVu^5aD}IG=!-~=8SX8+MS+1F+4VPu1Llp?m?W19U z;cgBj(>>{-lQ$8|^$_!bNikekV?egaTD0ft>?E!$Bm>={-ef|`RTyNz4jtxeE<9-S zeda-<4_Pfl%@tldn==nO-01*UP_OS$x5r9S3R$m*u+dq0b8T&HSn##4cXLtn_DYv4 z#l7~5Wsav4$il8=7AE~1e7I`?EJ0H^nkij`>*dcY_qIy4(pPs&o7M8YO6{{!b-lb{ zRwZ><gF1U~tt*s9b{ytuaH#8oOO>{YW<H-cU)5WL(xJ~VZ4<9c9X-J<@Q~JX>T}TO zX=n=#1*|4#0`;2UGuffOf{?}h%Ig*9AmZwFweO#^^Z(vroYt%eJ?x`~Vyovl#d;`` zI#7)g@wLKAfHwE3=dejN=>v`dTw|W<4TZoYGqIunkXRmIo3SXd@-eTFk?S+I7fQ1p zrg1vV*)t=`z!9EC@)fvDDQv#dvgc@2lH1Rl4>tZI?+@RTk8*Hs|3$u)3=-kFLBeB) zI+$t+*`+#|=yNc)t%Y9>+Zig_nhsJ?p~3V>u0bm5SP<hnm~C;XbZtM>c92#K@6#N4 z@vdsC@Y7yiUIrY&qq{}>OU0zJX_Lvq&6^+C2SV=Iz7*e}x|Hp>qStIt#cptqYcxuu zCYiiZus8d<BfO6atF_hI;U^#0s@OA^YF5)--`?O2n|FO7wTm;!l;}x^DZ3U{kL9{5 z@Ard5*fANtjNv<`IGQ7JmLul;ap&82j_$lzy!4%Xwzzck#UL@0%)ZE6ethTq!{hY8 zH0I!USpI41$-`%`K1h<8^dLnRGQZ7RC-c^i*(cjSynm9i{yJMA>9@{^k(_&;N)IlO zbmk;+X>bw!zttOf+T+>v8S->ycKyxx(~N=Eid8C>F)Zn4a*7Bd7tjQ$PrIVobJ?1_ Yh;H~6tMJVq#0|svGjY|($VGHt0;@5<0ssI2 diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/abc.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/abc.cpython-314.pyc deleted file mode 100644 index d56726cb83ae5af18278d1d03da16d1479f64213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11488 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 diff --git a/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/readers.cpython-314.pyc b/Python314_4_x86_Template/Lib/importlib/resources/__pycache__/readers.cpython-314.pyc deleted file mode 100644 index 8b27569c9d582b5698a9222a09819f2f962d70fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12916 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 diff --git a/Python314_4_x86_Template/Lib/importlib/resources/_adapters.py b/Python314_4_x86_Template/Lib/importlib/resources/_adapters.py deleted file mode 100644 index 50688fbb6..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/_adapters.py +++ /dev/null @@ -1,168 +0,0 @@ -from contextlib import suppress -from io import TextIOWrapper - -from . import abc - - -class SpecLoaderAdapter: - """ - Adapt a package spec to adapt the underlying loader. - """ - - def __init__(self, spec, adapter=lambda spec: spec.loader): - self.spec = spec - self.loader = adapter(spec) - - def __getattr__(self, name): - return getattr(self.spec, name) - - -class TraversableResourcesLoader: - """ - Adapt a loader to provide TraversableResources. - """ - - def __init__(self, spec): - self.spec = spec - - def get_resource_reader(self, name): - return CompatibilityFiles(self.spec)._native() - - -def _io_wrapper(file, mode='r', *args, **kwargs): - if mode == 'r': - return TextIOWrapper(file, *args, **kwargs) - elif mode == 'rb': - return file - raise ValueError(f"Invalid mode value '{mode}', only 'r' and 'rb' are supported") - - -class CompatibilityFiles: - """ - Adapter for an existing or non-existent resource reader - to provide a compatibility .files(). - """ - - class SpecPath(abc.Traversable): - """ - Path tied to a module spec. - Can be read and exposes the resource reader children. - """ - - def __init__(self, spec, reader): - self._spec = spec - self._reader = reader - - def iterdir(self): - if not self._reader: - return iter(()) - return iter( - CompatibilityFiles.ChildPath(self._reader, path) - for path in self._reader.contents() - ) - - def is_file(self): - return False - - is_dir = is_file - - def joinpath(self, other): - if not self._reader: - return CompatibilityFiles.OrphanPath(other) - return CompatibilityFiles.ChildPath(self._reader, other) - - @property - def name(self): - return self._spec.name - - def open(self, mode='r', *args, **kwargs): - return _io_wrapper(self._reader.open_resource(None), mode, *args, **kwargs) - - class ChildPath(abc.Traversable): - """ - Path tied to a resource reader child. - Can be read but doesn't expose any meaningful children. - """ - - def __init__(self, reader, name): - self._reader = reader - self._name = name - - def iterdir(self): - return iter(()) - - def is_file(self): - return self._reader.is_resource(self.name) - - def is_dir(self): - return not self.is_file() - - def joinpath(self, other): - return CompatibilityFiles.OrphanPath(self.name, other) - - @property - def name(self): - return self._name - - def open(self, mode='r', *args, **kwargs): - return _io_wrapper( - self._reader.open_resource(self.name), mode, *args, **kwargs - ) - - class OrphanPath(abc.Traversable): - """ - Orphan path, not tied to a module spec or resource reader. - Can't be read and doesn't expose any meaningful children. - """ - - def __init__(self, *path_parts): - if len(path_parts) < 1: - raise ValueError('Need at least one path part to construct a path') - self._path = path_parts - - def iterdir(self): - return iter(()) - - def is_file(self): - return False - - is_dir = is_file - - def joinpath(self, other): - return CompatibilityFiles.OrphanPath(*self._path, other) - - @property - def name(self): - return self._path[-1] - - def open(self, mode='r', *args, **kwargs): - raise FileNotFoundError("Can't open orphan path") - - def __init__(self, spec): - self.spec = spec - - @property - def _reader(self): - with suppress(AttributeError): - return self.spec.loader.get_resource_reader(self.spec.name) - - def _native(self): - """ - Return the native reader if it supports files(). - """ - reader = self._reader - return reader if hasattr(reader, 'files') else self - - def __getattr__(self, attr): - return getattr(self._reader, attr) - - def files(self): - return CompatibilityFiles.SpecPath(self.spec, self._reader) - - -def wrap_spec(package): - """ - Construct a package spec with traversable compatibility - on the spec/loader/reader. - """ - return SpecLoaderAdapter(package.__spec__, TraversableResourcesLoader) diff --git a/Python314_4_x86_Template/Lib/importlib/resources/_common.py b/Python314_4_x86_Template/Lib/importlib/resources/_common.py deleted file mode 100644 index 4e9014c45..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/_common.py +++ /dev/null @@ -1,211 +0,0 @@ -import os -import pathlib -import tempfile -import functools -import contextlib -import types -import importlib -import inspect -import warnings -import itertools - -from typing import Union, Optional, cast -from .abc import ResourceReader, Traversable - -Package = Union[types.ModuleType, str] -Anchor = Package - - -def package_to_anchor(func): - """ - Replace 'package' parameter as 'anchor' and warn about the change. - - Other errors should fall through. - - >>> files('a', 'b') - Traceback (most recent call last): - TypeError: files() takes from 0 to 1 positional arguments but 2 were given - - Remove this compatibility in Python 3.14. - """ - undefined = object() - - @functools.wraps(func) - def wrapper(anchor=undefined, package=undefined): - if package is not undefined: - if anchor is not undefined: - return func(anchor, package) - warnings.warn( - "First parameter to files is renamed to 'anchor'", - DeprecationWarning, - stacklevel=2, - ) - return func(package) - elif anchor is undefined: - return func() - return func(anchor) - - return wrapper - - -@package_to_anchor -def files(anchor: Optional[Anchor] = None) -> Traversable: - """ - Get a Traversable resource for an anchor. - """ - return from_package(resolve(anchor)) - - -def get_resource_reader(package: types.ModuleType) -> Optional[ResourceReader]: - """ - Return the package's loader if it's a ResourceReader. - """ - # We can't use - # a issubclass() check here because apparently abc.'s __subclasscheck__() - # hook wants to create a weak reference to the object, but - # zipimport.zipimporter does not support weak references, resulting in a - # TypeError. That seems terrible. - spec = package.__spec__ - reader = getattr(spec.loader, 'get_resource_reader', None) # type: ignore[union-attr] - if reader is None: - return None - return reader(spec.name) # type: ignore[union-attr] - - -@functools.singledispatch -def resolve(cand: Optional[Anchor]) -> types.ModuleType: - return cast(types.ModuleType, cand) - - -@resolve.register -def _(cand: str) -> types.ModuleType: - return importlib.import_module(cand) - - -@resolve.register -def _(cand: None) -> types.ModuleType: - return resolve(_infer_caller().f_globals['__name__']) - - -def _infer_caller(): - """ - Walk the stack and find the frame of the first caller not in this module. - """ - - def is_this_file(frame_info): - return frame_info.filename == stack[0].filename - - def is_wrapper(frame_info): - return frame_info.function == 'wrapper' - - stack = inspect.stack() - not_this_file = itertools.filterfalse(is_this_file, stack) - # also exclude 'wrapper' due to singledispatch in the call stack - callers = itertools.filterfalse(is_wrapper, not_this_file) - return next(callers).frame - - -def from_package(package: types.ModuleType): - """ - Return a Traversable object for the given package. - - """ - # deferred for performance (python/cpython#109829) - from ._adapters import wrap_spec - - spec = wrap_spec(package) - reader = spec.loader.get_resource_reader(spec.name) - return reader.files() - - -@contextlib.contextmanager -def _tempfile( - reader, - suffix='', - # gh-93353: Keep a reference to call os.remove() in late Python - # finalization. - *, - _os_remove=os.remove, -): - # Not using tempfile.NamedTemporaryFile as it leads to deeper 'try' - # blocks due to the need to close the temporary file to work on Windows - # properly. - fd, raw_path = tempfile.mkstemp(suffix=suffix) - try: - try: - os.write(fd, reader()) - finally: - os.close(fd) - del reader - yield pathlib.Path(raw_path) - finally: - try: - _os_remove(raw_path) - except FileNotFoundError: - pass - - -def _temp_file(path): - return _tempfile(path.read_bytes, suffix=path.name) - - -def _is_present_dir(path: Traversable) -> bool: - """ - Some Traversables implement ``is_dir()`` to raise an - exception (i.e. ``FileNotFoundError``) when the - directory doesn't exist. This function wraps that call - to always return a boolean and only return True - if there's a dir and it exists. - """ - with contextlib.suppress(FileNotFoundError): - return path.is_dir() - return False - - -@functools.singledispatch -def as_file(path): - """ - Given a Traversable object, return that object as a - path on the local file system in a context manager. - """ - return _temp_dir(path) if _is_present_dir(path) else _temp_file(path) - - -@as_file.register(pathlib.Path) -@contextlib.contextmanager -def _(path): - """ - Degenerate behavior for pathlib.Path objects. - """ - yield path - - -@contextlib.contextmanager -def _temp_path(dir: tempfile.TemporaryDirectory): - """ - Wrap tempfile.TemporaryDirectory to return a pathlib object. - """ - with dir as result: - yield pathlib.Path(result) - - -@contextlib.contextmanager -def _temp_dir(path): - """ - Given a traversable dir, recursively replicate the whole tree - to the file system in a context manager. - """ - assert path.is_dir() - with _temp_path(tempfile.TemporaryDirectory()) as temp_dir: - yield _write_contents(temp_dir, path) - - -def _write_contents(target, source): - child = target.joinpath(source.name) - if source.is_dir(): - child.mkdir() - for item in source.iterdir(): - _write_contents(child, item) - else: - child.write_bytes(source.read_bytes()) - return child diff --git a/Python314_4_x86_Template/Lib/importlib/resources/_functional.py b/Python314_4_x86_Template/Lib/importlib/resources/_functional.py deleted file mode 100644 index f59416f2d..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/_functional.py +++ /dev/null @@ -1,81 +0,0 @@ -"""Simplified function-based API for importlib.resources""" - -import warnings - -from ._common import files, as_file - - -_MISSING = object() - - -def open_binary(anchor, *path_names): - """Open for binary reading the *resource* within *package*.""" - return _get_resource(anchor, path_names).open('rb') - - -def open_text(anchor, *path_names, encoding=_MISSING, errors='strict'): - """Open for text reading the *resource* within *package*.""" - encoding = _get_encoding_arg(path_names, encoding) - resource = _get_resource(anchor, path_names) - return resource.open('r', encoding=encoding, errors=errors) - - -def read_binary(anchor, *path_names): - """Read and return contents of *resource* within *package* as bytes.""" - return _get_resource(anchor, path_names).read_bytes() - - -def read_text(anchor, *path_names, encoding=_MISSING, errors='strict'): - """Read and return contents of *resource* within *package* as str.""" - encoding = _get_encoding_arg(path_names, encoding) - resource = _get_resource(anchor, path_names) - return resource.read_text(encoding=encoding, errors=errors) - - -def path(anchor, *path_names): - """Return the path to the *resource* as an actual file system path.""" - return as_file(_get_resource(anchor, path_names)) - - -def is_resource(anchor, *path_names): - """Return ``True`` if there is a resource named *name* in the package, - - Otherwise returns ``False``. - """ - return _get_resource(anchor, path_names).is_file() - - -def contents(anchor, *path_names): - """Return an iterable over the named resources within the package. - - The iterable returns :class:`str` resources (e.g. files). - The iterable does not recurse into subdirectories. - """ - warnings.warn( - "importlib.resources.contents is deprecated. " - "Use files(anchor).iterdir() instead.", - DeprecationWarning, - stacklevel=1, - ) - return (resource.name for resource in _get_resource(anchor, path_names).iterdir()) - - -def _get_encoding_arg(path_names, encoding): - # For compatibility with versions where *encoding* was a positional - # argument, it needs to be given explicitly when there are multiple - # *path_names*. - # This limitation can be removed in Python 3.15. - if encoding is _MISSING: - if len(path_names) > 1: - raise TypeError( - "'encoding' argument required with multiple path names", - ) - else: - return 'utf-8' - return encoding - - -def _get_resource(anchor, path_names): - if anchor is None: - raise TypeError("anchor must be module or string, got None") - return files(anchor).joinpath(*path_names) diff --git a/Python314_4_x86_Template/Lib/importlib/resources/_itertools.py b/Python314_4_x86_Template/Lib/importlib/resources/_itertools.py deleted file mode 100644 index 7b775ef5a..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/_itertools.py +++ /dev/null @@ -1,38 +0,0 @@ -# from more_itertools 9.0 -def only(iterable, default=None, too_long=None): - """If *iterable* has only one item, return it. - If it has zero items, return *default*. - If it has more than one item, raise the exception given by *too_long*, - which is ``ValueError`` by default. - >>> only([], default='missing') - 'missing' - >>> only([1]) - 1 - >>> only([1, 2]) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - ValueError: Expected exactly one item in iterable, but got 1, 2, - and perhaps more.' - >>> only([1, 2], too_long=TypeError) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - TypeError - Note that :func:`only` attempts to advance *iterable* twice to ensure there - is only one item. See :func:`spy` or :func:`peekable` to check - iterable contents less destructively. - """ - it = iter(iterable) - first_value = next(it, default) - - try: - second_value = next(it) - except StopIteration: - pass - else: - msg = ( - 'Expected exactly one item in iterable, but got {!r}, {!r}, ' - 'and perhaps more.'.format(first_value, second_value) - ) - raise too_long or ValueError(msg) - - return first_value diff --git a/Python314_4_x86_Template/Lib/importlib/resources/abc.py b/Python314_4_x86_Template/Lib/importlib/resources/abc.py deleted file mode 100644 index 6750a7aaf..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/abc.py +++ /dev/null @@ -1,173 +0,0 @@ -import abc -import io -import itertools -import os -import pathlib -from typing import Any, BinaryIO, Iterable, Iterator, NoReturn, Text, Optional -from typing import runtime_checkable, Protocol -from typing import Union - - -StrPath = Union[str, os.PathLike[str]] - -__all__ = ["ResourceReader", "Traversable", "TraversableResources"] - - -class ResourceReader(metaclass=abc.ABCMeta): - """Abstract base class for loaders to provide resource reading support.""" - - @abc.abstractmethod - def open_resource(self, resource: Text) -> BinaryIO: - """Return an opened, file-like object for binary reading. - - The 'resource' argument is expected to represent only a file name. - If the resource cannot be found, FileNotFoundError is raised. - """ - # This deliberately raises FileNotFoundError instead of - # NotImplementedError so that if this method is accidentally called, - # it'll still do the right thing. - raise FileNotFoundError - - @abc.abstractmethod - def resource_path(self, resource: Text) -> Text: - """Return the file system path to the specified resource. - - The 'resource' argument is expected to represent only a file name. - If the resource does not exist on the file system, raise - FileNotFoundError. - """ - # This deliberately raises FileNotFoundError instead of - # NotImplementedError so that if this method is accidentally called, - # it'll still do the right thing. - raise FileNotFoundError - - @abc.abstractmethod - def is_resource(self, path: Text) -> bool: - """Return True if the named 'path' is a resource. - - Files are resources, directories are not. - """ - raise FileNotFoundError - - @abc.abstractmethod - def contents(self) -> Iterable[str]: - """Return an iterable of entries in `package`.""" - raise FileNotFoundError - - -class TraversalError(Exception): - pass - - -@runtime_checkable -class Traversable(Protocol): - """ - An object with a subset of pathlib.Path methods suitable for - traversing directories and opening files. - - Any exceptions that occur when accessing the backing resource - may propagate unaltered. - """ - - @abc.abstractmethod - def iterdir(self) -> Iterator["Traversable"]: - """ - Yield Traversable objects in self - """ - - def read_bytes(self) -> bytes: - """ - Read contents of self as bytes - """ - with self.open('rb') as strm: - return strm.read() - - def read_text(self, encoding: Optional[str] = None) -> str: - """ - Read contents of self as text - """ - with self.open(encoding=encoding) as strm: - return strm.read() - - @abc.abstractmethod - def is_dir(self) -> bool: - """ - Return True if self is a directory - """ - - @abc.abstractmethod - def is_file(self) -> bool: - """ - Return True if self is a file - """ - - def joinpath(self, *descendants: StrPath) -> "Traversable": - """ - Return Traversable resolved with any descendants applied. - - Each descendant should be a path segment relative to self - and each may contain multiple levels separated by - ``posixpath.sep`` (``/``). - """ - if not descendants: - return self - names = itertools.chain.from_iterable( - path.parts for path in map(pathlib.PurePosixPath, descendants) - ) - target = next(names) - matches = ( - traversable for traversable in self.iterdir() if traversable.name == target - ) - try: - match = next(matches) - except StopIteration: - raise TraversalError( - "Target not found during traversal.", target, list(names) - ) - return match.joinpath(*names) - - def __truediv__(self, child: StrPath) -> "Traversable": - """ - Return Traversable child in self - """ - return self.joinpath(child) - - @abc.abstractmethod - def open(self, mode='r', *args, **kwargs): - """ - mode may be 'r' or 'rb' to open as text or binary. Return a handle - suitable for reading (same as pathlib.Path.open). - - When opening as text, accepts encoding parameters such as those - accepted by io.TextIOWrapper. - """ - - @property - @abc.abstractmethod - def name(self) -> str: - """ - The base name of this object without any parent references. - """ - - -class TraversableResources(ResourceReader): - """ - The required interface for providing traversable - resources. - """ - - @abc.abstractmethod - def files(self) -> "Traversable": - """Return a Traversable object for the loaded package.""" - - def open_resource(self, resource: StrPath) -> io.BufferedReader: - return self.files().joinpath(resource).open('rb') - - def resource_path(self, resource: Any) -> NoReturn: - raise FileNotFoundError(resource) - - def is_resource(self, path: StrPath) -> bool: - return self.files().joinpath(path).is_file() - - def contents(self) -> Iterator[str]: - return (item.name for item in self.files().iterdir()) diff --git a/Python314_4_x86_Template/Lib/importlib/resources/readers.py b/Python314_4_x86_Template/Lib/importlib/resources/readers.py deleted file mode 100644 index 70fc7e2b9..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/readers.py +++ /dev/null @@ -1,203 +0,0 @@ -from __future__ import annotations - -import collections -import contextlib -import itertools -import pathlib -import operator -import re -import warnings -import zipfile -from collections.abc import Iterator - -from . import abc - -from ._itertools import only - - -def remove_duplicates(items): - return iter(collections.OrderedDict.fromkeys(items)) - - -class FileReader(abc.TraversableResources): - def __init__(self, loader): - self.path = pathlib.Path(loader.path).parent - - def resource_path(self, resource): - """ - Return the file system path to prevent - `resources.path()` from creating a temporary - copy. - """ - return str(self.path.joinpath(resource)) - - def files(self): - return self.path - - -class ZipReader(abc.TraversableResources): - def __init__(self, loader, module): - self.prefix = loader.prefix.replace('\\', '/') - if loader.is_package(module): - _, _, name = module.rpartition('.') - self.prefix += name + '/' - self.archive = loader.archive - - def open_resource(self, resource): - try: - return super().open_resource(resource) - except KeyError as exc: - raise FileNotFoundError(exc.args[0]) - - def is_resource(self, path): - """ - Workaround for `zipfile.Path.is_file` returning true - for non-existent paths. - """ - target = self.files().joinpath(path) - return target.is_file() and target.exists() - - def files(self): - return zipfile.Path(self.archive, self.prefix) - - -class MultiplexedPath(abc.Traversable): - """ - Given a series of Traversable objects, implement a merged - version of the interface across all objects. Useful for - namespace packages which may be multihomed at a single - name. - """ - - def __init__(self, *paths): - self._paths = list(map(_ensure_traversable, remove_duplicates(paths))) - if not self._paths: - message = 'MultiplexedPath must contain at least one path' - raise FileNotFoundError(message) - if not all(path.is_dir() for path in self._paths): - raise NotADirectoryError('MultiplexedPath only supports directories') - - def iterdir(self): - children = (child for path in self._paths for child in path.iterdir()) - by_name = operator.attrgetter('name') - groups = itertools.groupby(sorted(children, key=by_name), key=by_name) - return map(self._follow, (locs for name, locs in groups)) - - def read_bytes(self): - raise FileNotFoundError(f'{self} is not a file') - - def read_text(self, *args, **kwargs): - raise FileNotFoundError(f'{self} is not a file') - - def is_dir(self): - return True - - def is_file(self): - return False - - def joinpath(self, *descendants): - try: - return super().joinpath(*descendants) - except abc.TraversalError: - # One of the paths did not resolve (a directory does not exist). - # Just return something that will not exist. - return self._paths[0].joinpath(*descendants) - - @classmethod - def _follow(cls, children): - """ - Construct a MultiplexedPath if needed. - - If children contains a sole element, return it. - Otherwise, return a MultiplexedPath of the items. - Unless one of the items is not a Directory, then return the first. - """ - subdirs, one_dir, one_file = itertools.tee(children, 3) - - try: - return only(one_dir) - except ValueError: - try: - return cls(*subdirs) - except NotADirectoryError: - return next(one_file) - - def open(self, *args, **kwargs): - raise FileNotFoundError(f'{self} is not a file') - - @property - def name(self): - return self._paths[0].name - - def __repr__(self): - paths = ', '.join(f"'{path}'" for path in self._paths) - return f'MultiplexedPath({paths})' - - -class NamespaceReader(abc.TraversableResources): - def __init__(self, namespace_path): - if 'NamespacePath' not in str(namespace_path): - raise ValueError('Invalid path') - self.path = MultiplexedPath(*filter(bool, map(self._resolve, namespace_path))) - - @classmethod - def _resolve(cls, path_str) -> abc.Traversable | None: - r""" - Given an item from a namespace path, resolve it to a Traversable. - - path_str might be a directory on the filesystem or a path to a - zipfile plus the path within the zipfile, e.g. ``/foo/bar`` or - ``/foo/baz.zip/inner_dir`` or ``foo\baz.zip\inner_dir\sub``. - - path_str might also be a sentinel used by editable packages to - trigger other behaviors (see python/importlib_resources#311). - In that case, return None. - """ - dirs = (cand for cand in cls._candidate_paths(path_str) if cand.is_dir()) - return next(dirs, None) - - @classmethod - def _candidate_paths(cls, path_str: str) -> Iterator[abc.Traversable]: - yield pathlib.Path(path_str) - yield from cls._resolve_zip_path(path_str) - - @staticmethod - def _resolve_zip_path(path_str: str): - for match in reversed(list(re.finditer(r'[\\/]', path_str))): - with contextlib.suppress( - FileNotFoundError, - IsADirectoryError, - NotADirectoryError, - PermissionError, - ): - inner = path_str[match.end() :].replace('\\', '/') + '/' - yield zipfile.Path(path_str[: match.start()], inner.lstrip('/')) - - def resource_path(self, resource): - """ - Return the file system path to prevent - `resources.path()` from creating a temporary - copy. - """ - return str(self.path.joinpath(resource)) - - def files(self): - return self.path - - -def _ensure_traversable(path): - """ - Convert deprecated string arguments to traversables (pathlib.Path). - - Remove with Python 3.15. - """ - if not isinstance(path, str): - return path - - warnings.warn( - "String arguments are deprecated. Pass a Traversable instead.", - DeprecationWarning, - stacklevel=3, - ) - - return pathlib.Path(path) diff --git a/Python314_4_x86_Template/Lib/importlib/resources/simple.py b/Python314_4_x86_Template/Lib/importlib/resources/simple.py deleted file mode 100644 index 2e75299b1..000000000 --- a/Python314_4_x86_Template/Lib/importlib/resources/simple.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Interface adapters for low-level readers. -""" - -import abc -import io -import itertools -from typing import BinaryIO, List - -from .abc import Traversable, TraversableResources - - -class SimpleReader(abc.ABC): - """ - The minimum, low-level interface required from a resource - provider. - """ - - @property - @abc.abstractmethod - def package(self) -> str: - """ - The name of the package for which this reader loads resources. - """ - - @abc.abstractmethod - def children(self) -> List['SimpleReader']: - """ - Obtain an iterable of SimpleReader for available - child containers (e.g. directories). - """ - - @abc.abstractmethod - def resources(self) -> List[str]: - """ - Obtain available named resources for this virtual package. - """ - - @abc.abstractmethod - def open_binary(self, resource: str) -> BinaryIO: - """ - Obtain a File-like for a named resource. - """ - - @property - def name(self): - return self.package.split('.')[-1] - - -class ResourceContainer(Traversable): - """ - Traversable container for a package's resources via its reader. - """ - - def __init__(self, reader: SimpleReader): - self.reader = reader - - def is_dir(self): - return True - - def is_file(self): - return False - - def iterdir(self): - files = (ResourceHandle(self, name) for name in self.reader.resources) - dirs = map(ResourceContainer, self.reader.children()) - return itertools.chain(files, dirs) - - def open(self, *args, **kwargs): - raise IsADirectoryError() - - -class ResourceHandle(Traversable): - """ - Handle to a named resource in a ResourceReader. - """ - - def __init__(self, parent: ResourceContainer, name: str): - self.parent = parent - self.name = name # type: ignore[misc] - - def is_file(self): - return True - - def is_dir(self): - return False - - def open(self, mode='r', *args, **kwargs): - stream = self.parent.reader.open_binary(self.name) - if 'b' not in mode: - stream = io.TextIOWrapper(stream, *args, **kwargs) - return stream - - def joinpath(self, name): - raise RuntimeError("Cannot traverse into a resource") - - -class TraversableReader(TraversableResources, SimpleReader): - """ - A TraversableResources based on SimpleReader. Resource providers - may derive from this class to provide the TraversableResources - interface by supplying the SimpleReader interface. - """ - - def files(self): - return ResourceContainer(self) diff --git a/Python314_4_x86_Template/Lib/importlib/simple.py b/Python314_4_x86_Template/Lib/importlib/simple.py deleted file mode 100644 index 845bb9036..000000000 --- a/Python314_4_x86_Template/Lib/importlib/simple.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -Compatibility shim for .resources.simple as found on Python 3.10. - -Consumers that can rely on Python 3.11 should use the other -module directly. -""" - -from .resources.simple import ( - SimpleReader, ResourceHandle, ResourceContainer, TraversableReader, -) - -__all__ = [ - 'SimpleReader', 'ResourceHandle', 'ResourceContainer', 'TraversableReader', -] diff --git a/Python314_4_x86_Template/Lib/importlib/util.py b/Python314_4_x86_Template/Lib/importlib/util.py deleted file mode 100644 index 2b564e9b5..000000000 --- a/Python314_4_x86_Template/Lib/importlib/util.py +++ /dev/null @@ -1,279 +0,0 @@ -"""Utility code for constructing importers, etc.""" -from ._abc import Loader -from ._bootstrap import module_from_spec -from ._bootstrap import _resolve_name -from ._bootstrap import spec_from_loader -from ._bootstrap import _find_spec -from ._bootstrap_external import MAGIC_NUMBER -from ._bootstrap_external import cache_from_source -from ._bootstrap_external import decode_source -from ._bootstrap_external import source_from_cache -from ._bootstrap_external import spec_from_file_location - -import _imp -import sys -import types - - -def source_hash(source_bytes): - "Return the hash of *source_bytes* as used in hash-based pyc files." - return _imp.source_hash(_imp.pyc_magic_number_token, source_bytes) - - -def resolve_name(name, package): - """Resolve a relative module name to an absolute one.""" - if not name.startswith('.'): - return name - elif not package: - raise ImportError(f'no package specified for {repr(name)} ' - '(required for relative module names)') - level = 0 - for character in name: - if character != '.': - break - level += 1 - return _resolve_name(name[level:], package, level) - - -def _find_spec_from_path(name, path=None): - """Return the spec for the specified module. - - First, sys.modules is checked to see if the module was already imported. If - so, then sys.modules[name].__spec__ is returned. If that happens to be - set to None, then ValueError is raised. If the module is not in - sys.modules, then sys.meta_path is searched for a suitable spec with the - value of 'path' given to the finders. None is returned if no spec could - be found. - - Dotted names do not have their parent packages implicitly imported. You will - most likely need to explicitly import all parent packages in the proper - order for a submodule to get the correct spec. - - """ - if name not in sys.modules: - return _find_spec(name, path) - else: - module = sys.modules[name] - if module is None: - return None - try: - spec = module.__spec__ - except AttributeError: - raise ValueError(f'{name}.__spec__ is not set') from None - else: - if spec is None: - raise ValueError(f'{name}.__spec__ is None') - return spec - - -def find_spec(name, package=None): - """Return the spec for the specified module. - - First, sys.modules is checked to see if the module was already imported. If - so, then sys.modules[name].__spec__ is returned. If that happens to be - set to None, then ValueError is raised. If the module is not in - sys.modules, then sys.meta_path is searched for a suitable spec with the - value of 'path' given to the finders. None is returned if no spec could - be found. - - If the name is for submodule (contains a dot), the parent module is - automatically imported. - - The name and package arguments work the same as importlib.import_module(). - In other words, relative module names (with leading dots) work. - - """ - fullname = resolve_name(name, package) if name.startswith('.') else name - if fullname not in sys.modules: - parent_name = fullname.rpartition('.')[0] - if parent_name: - parent = __import__(parent_name, fromlist=['__path__']) - try: - parent_path = parent.__path__ - except AttributeError as e: - raise ModuleNotFoundError( - f"__path__ attribute not found on {parent_name!r} " - f"while trying to find {fullname!r}", name=fullname) from e - else: - parent_path = None - return _find_spec(fullname, parent_path) - else: - module = sys.modules[fullname] - if module is None: - return None - try: - spec = module.__spec__ - except AttributeError: - raise ValueError(f'{name}.__spec__ is not set') from None - else: - if spec is None: - raise ValueError(f'{name}.__spec__ is None') - return spec - - -# Normally we would use contextlib.contextmanager. However, this module -# is imported by runpy, which means we want to avoid any unnecessary -# dependencies. Thus we use a class. - -class _incompatible_extension_module_restrictions: - """A context manager that can temporarily skip the compatibility check. - - NOTE: This function is meant to accommodate an unusual case; one - which is likely to eventually go away. There's is a pretty good - chance this is not what you were looking for. - - WARNING: Using this function to disable the check can lead to - unexpected behavior and even crashes. It should only be used during - extension module development. - - If "disable_check" is True then the compatibility check will not - happen while the context manager is active. Otherwise the check - *will* happen. - - Normally, extensions that do not support multiple interpreters - may not be imported in a subinterpreter. That implies modules - that do not implement multi-phase init or that explicitly of out. - - Likewise for modules import in a subinterpreter with its own GIL - when the extension does not support a per-interpreter GIL. This - implies the module does not have a Py_mod_multiple_interpreters slot - set to Py_MOD_PER_INTERPRETER_GIL_SUPPORTED. - - In both cases, this context manager may be used to temporarily - disable the check for compatible extension modules. - - You can get the same effect as this function by implementing the - basic interface of multi-phase init (PEP 489) and lying about - support for multiple interpreters (or per-interpreter GIL). - """ - - def __init__(self, *, disable_check): - self.disable_check = bool(disable_check) - - def __enter__(self): - self.old = _imp._override_multi_interp_extensions_check(self.override) - return self - - def __exit__(self, *args): - old = self.old - del self.old - _imp._override_multi_interp_extensions_check(old) - - @property - def override(self): - return -1 if self.disable_check else 1 - - -class _LazyModule(types.ModuleType): - - """A subclass of the module type which triggers loading upon attribute access.""" - - def __getattribute__(self, attr): - """Trigger the load of the module and return the attribute.""" - __spec__ = object.__getattribute__(self, '__spec__') - loader_state = __spec__.loader_state - with loader_state['lock']: - # Only the first thread to get the lock should trigger the load - # and reset the module's class. The rest can now getattr(). - if object.__getattribute__(self, '__class__') is _LazyModule: - __class__ = loader_state['__class__'] - - # Reentrant calls from the same thread must be allowed to proceed without - # triggering the load again. - # exec_module() and self-referential imports are the primary ways this can - # happen, but in any case we must return something to avoid deadlock. - if loader_state['is_loading']: - return __class__.__getattribute__(self, attr) - loader_state['is_loading'] = True - - __dict__ = __class__.__getattribute__(self, '__dict__') - - # All module metadata must be gathered from __spec__ in order to avoid - # using mutated values. - # Get the original name to make sure no object substitution occurred - # in sys.modules. - original_name = __spec__.name - # Figure out exactly what attributes were mutated between the creation - # of the module and now. - attrs_then = loader_state['__dict__'] - attrs_now = __dict__ - attrs_updated = {} - for key, value in attrs_now.items(): - # Code that set an attribute may have kept a reference to the - # assigned object, making identity more important than equality. - if key not in attrs_then: - attrs_updated[key] = value - elif id(attrs_now[key]) != id(attrs_then[key]): - attrs_updated[key] = value - __spec__.loader.exec_module(self) - # If exec_module() was used directly there is no guarantee the module - # object was put into sys.modules. - if original_name in sys.modules: - if id(self) != id(sys.modules[original_name]): - raise ValueError(f"module object for {original_name!r} " - "substituted in sys.modules during a lazy " - "load") - # Update after loading since that's what would happen in an eager - # loading situation. - __dict__.update(attrs_updated) - # Finally, stop triggering this method, if the module did not - # already update its own __class__. - if isinstance(self, _LazyModule): - object.__setattr__(self, '__class__', __class__) - - return getattr(self, attr) - - def __delattr__(self, attr): - """Trigger the load and then perform the deletion.""" - # To trigger the load and raise an exception if the attribute - # doesn't exist. - self.__getattribute__(attr) - delattr(self, attr) - - -class LazyLoader(Loader): - - """A loader that creates a module which defers loading until attribute access.""" - - @staticmethod - def __check_eager_loader(loader): - if not hasattr(loader, 'exec_module'): - raise TypeError('loader must define exec_module()') - - @classmethod - def factory(cls, loader): - """Construct a callable which returns the eager loader made lazy.""" - cls.__check_eager_loader(loader) - return lambda *args, **kwargs: cls(loader(*args, **kwargs)) - - def __init__(self, loader): - self.__check_eager_loader(loader) - self.loader = loader - - def create_module(self, spec): - return self.loader.create_module(spec) - - def exec_module(self, module): - """Make the module load lazily.""" - # Threading is only needed for lazy loading, and importlib.util can - # be pulled in at interpreter startup, so defer until needed. - import threading - module.__spec__.loader = self.loader - module.__loader__ = self.loader - # Don't need to worry about deep-copying as trying to set an attribute - # on an object would have triggered the load, - # e.g. ``module.__spec__.loader = None`` would trigger a load from - # trying to access module.__spec__. - loader_state = {} - loader_state['__dict__'] = module.__dict__.copy() - loader_state['__class__'] = module.__class__ - loader_state['lock'] = threading.RLock() - loader_state['is_loading'] = False - module.__spec__.loader_state = loader_state - module.__class__ = _LazyModule - - -__all__ = ['LazyLoader', 'Loader', 'MAGIC_NUMBER', - 'cache_from_source', 'decode_source', 'find_spec', - 'module_from_spec', 'resolve_name', 'source_from_cache', - 'source_hash', 'spec_from_file_location', 'spec_from_loader'] diff --git a/Python314_4_x86_Template/Lib/inspect.py b/Python314_4_x86_Template/Lib/inspect.py deleted file mode 100644 index 2d229051b..000000000 --- a/Python314_4_x86_Template/Lib/inspect.py +++ /dev/null @@ -1,3409 +0,0 @@ -"""Get useful information from live Python objects. - -This module encapsulates the interface provided by the internal special -attributes (co_*, im_*, tb_*, etc.) in a friendlier fashion. -It also provides some help for examining source code and class layout. - -Here are some of the useful functions provided by this module: - - ismodule(), isclass(), ismethod(), ispackage(), isfunction(), - isgeneratorfunction(), isgenerator(), istraceback(), isframe(), - iscode(), isbuiltin(), isroutine() - check object types - getmembers() - get members of an object that satisfy a given condition - - getfile(), getsourcefile(), getsource() - find an object's source code - getdoc(), getcomments() - get documentation on an object - getmodule() - determine the module that an object came from - getclasstree() - arrange classes so as to represent their hierarchy - - getargvalues(), getcallargs() - get info about function arguments - getfullargspec() - same, with support for Python 3 features - formatargvalues() - format an argument spec - getouterframes(), getinnerframes() - get info about frames - currentframe() - get the current stack frame - stack(), trace() - get info about frames on the stack or in a traceback - - signature() - get a Signature object for the callable -""" - -# This module is in the public domain. No warranties. - -__author__ = ('Ka-Ping Yee <ping@lfw.org>', - 'Yury Selivanov <yselivanov@sprymix.com>') - -__all__ = [ - "AGEN_CLOSED", - "AGEN_CREATED", - "AGEN_RUNNING", - "AGEN_SUSPENDED", - "ArgInfo", - "Arguments", - "Attribute", - "BlockFinder", - "BoundArguments", - "BufferFlags", - "CORO_CLOSED", - "CORO_CREATED", - "CORO_RUNNING", - "CORO_SUSPENDED", - "CO_ASYNC_GENERATOR", - "CO_COROUTINE", - "CO_GENERATOR", - "CO_ITERABLE_COROUTINE", - "CO_NESTED", - "CO_NEWLOCALS", - "CO_NOFREE", - "CO_OPTIMIZED", - "CO_VARARGS", - "CO_VARKEYWORDS", - "CO_HAS_DOCSTRING", - "CO_METHOD", - "ClassFoundException", - "ClosureVars", - "EndOfBlock", - "FrameInfo", - "FullArgSpec", - "GEN_CLOSED", - "GEN_CREATED", - "GEN_RUNNING", - "GEN_SUSPENDED", - "Parameter", - "Signature", - "TPFLAGS_IS_ABSTRACT", - "Traceback", - "classify_class_attrs", - "cleandoc", - "currentframe", - "findsource", - "formatannotation", - "formatannotationrelativeto", - "formatargvalues", - "get_annotations", - "getabsfile", - "getargs", - "getargvalues", - "getasyncgenlocals", - "getasyncgenstate", - "getattr_static", - "getblock", - "getcallargs", - "getclasstree", - "getclosurevars", - "getcomments", - "getcoroutinelocals", - "getcoroutinestate", - "getdoc", - "getfile", - "getframeinfo", - "getfullargspec", - "getgeneratorlocals", - "getgeneratorstate", - "getinnerframes", - "getlineno", - "getmembers", - "getmembers_static", - "getmodule", - "getmodulename", - "getmro", - "getouterframes", - "getsource", - "getsourcefile", - "getsourcelines", - "indentsize", - "isabstract", - "isasyncgen", - "isasyncgenfunction", - "isawaitable", - "isbuiltin", - "isclass", - "iscode", - "iscoroutine", - "iscoroutinefunction", - "isdatadescriptor", - "isframe", - "isfunction", - "isgenerator", - "isgeneratorfunction", - "isgetsetdescriptor", - "ismemberdescriptor", - "ismethod", - "ismethoddescriptor", - "ismethodwrapper", - "ismodule", - "ispackage", - "isroutine", - "istraceback", - "markcoroutinefunction", - "signature", - "stack", - "trace", - "unwrap", - "walktree", -] - - -import abc -from annotationlib import Format, ForwardRef -from annotationlib import get_annotations # re-exported -import ast -import dis -import collections.abc -import enum -import importlib.machinery -import itertools -import linecache -import os -import re -import sys -import tokenize -import token -import types -import functools -import builtins -from keyword import iskeyword -from operator import attrgetter -from collections import namedtuple, OrderedDict -from weakref import ref as make_weakref - -# Create constants for the compiler flags in Include/code.h -# We try to get them from dis to avoid duplication -mod_dict = globals() -for k, v in dis.COMPILER_FLAG_NAMES.items(): - mod_dict["CO_" + v] = k -del k, v, mod_dict - -# See Include/object.h -TPFLAGS_IS_ABSTRACT = 1 << 20 - - -# ----------------------------------------------------------- type-checking -def ismodule(object): - """Return true if the object is a module.""" - return isinstance(object, types.ModuleType) - -def isclass(object): - """Return true if the object is a class.""" - return isinstance(object, type) - -def ismethod(object): - """Return true if the object is an instance method.""" - return isinstance(object, types.MethodType) - -def ispackage(object): - """Return true if the object is a package.""" - return ismodule(object) and hasattr(object, "__path__") - -def ismethoddescriptor(object): - """Return true if the object is a method descriptor. - - But not if ismethod() or isclass() or isfunction() are true. - - This is new in Python 2.2, and, for example, is true of int.__add__. - An object passing this test has a __get__ attribute, but not a - __set__ attribute or a __delete__ attribute. Beyond that, the set - of attributes varies; __name__ is usually sensible, and __doc__ - often is. - - Methods implemented via descriptors that also pass one of the other - tests return false from the ismethoddescriptor() test, simply because - the other tests promise more -- you can, e.g., count on having the - __func__ attribute (etc) when an object passes ismethod().""" - if isclass(object) or ismethod(object) or isfunction(object): - # mutual exclusion - return False - tp = type(object) - return (hasattr(tp, "__get__") - and not hasattr(tp, "__set__") - and not hasattr(tp, "__delete__")) - -def isdatadescriptor(object): - """Return true if the object is a data descriptor. - - Data descriptors have a __set__ or a __delete__ attribute. Examples are - properties (defined in Python) and getsets and members (defined in C). - Typically, data descriptors will also have __name__ and __doc__ attributes - (properties, getsets, and members have both of these attributes), but this - is not guaranteed.""" - if isclass(object) or ismethod(object) or isfunction(object): - # mutual exclusion - return False - tp = type(object) - return hasattr(tp, "__set__") or hasattr(tp, "__delete__") - -if hasattr(types, 'MemberDescriptorType'): - # CPython and equivalent - def ismemberdescriptor(object): - """Return true if the object is a member descriptor. - - Member descriptors are specialized descriptors defined in extension - modules.""" - return isinstance(object, types.MemberDescriptorType) -else: - # Other implementations - def ismemberdescriptor(object): - """Return true if the object is a member descriptor. - - Member descriptors are specialized descriptors defined in extension - modules.""" - return False - -if hasattr(types, 'GetSetDescriptorType'): - # CPython and equivalent - def isgetsetdescriptor(object): - """Return true if the object is a getset descriptor. - - getset descriptors are specialized descriptors defined in extension - modules.""" - return isinstance(object, types.GetSetDescriptorType) -else: - # Other implementations - def isgetsetdescriptor(object): - """Return true if the object is a getset descriptor. - - getset descriptors are specialized descriptors defined in extension - modules.""" - return False - -def isfunction(object): - """Return true if the object is a user-defined function. - - Function objects provide these attributes: - __doc__ documentation string - __name__ name with which this function was defined - __qualname__ qualified name of this function - __module__ name of the module the function was defined in or None - __code__ code object containing compiled function bytecode - __defaults__ tuple of any default values for arguments - __globals__ global namespace in which this function was defined - __annotations__ dict of parameter annotations - __kwdefaults__ dict of keyword only parameters with defaults - __dict__ namespace which is supporting arbitrary function attributes - __closure__ a tuple of cells or None - __type_params__ tuple of type parameters""" - return isinstance(object, types.FunctionType) - -def _has_code_flag(f, flag): - """Return true if ``f`` is a function (or a method or functools.partial - wrapper wrapping a function or a functools.partialmethod wrapping a - function) whose code object has the given ``flag`` - set in its flags.""" - f = functools._unwrap_partialmethod(f) - while ismethod(f): - f = f.__func__ - f = functools._unwrap_partial(f) - if not (isfunction(f) or _signature_is_functionlike(f)): - return False - return bool(f.__code__.co_flags & flag) - -def isgeneratorfunction(obj): - """Return true if the object is a user-defined generator function. - - Generator function objects provide the same attributes as functions. - See help(isfunction) for a list of attributes.""" - return _has_code_flag(obj, CO_GENERATOR) - -# A marker for markcoroutinefunction and iscoroutinefunction. -_is_coroutine_mark = object() - -def _has_coroutine_mark(f): - while ismethod(f): - f = f.__func__ - f = functools._unwrap_partial(f) - return getattr(f, "_is_coroutine_marker", None) is _is_coroutine_mark - -def markcoroutinefunction(func): - """ - Decorator to ensure callable is recognised as a coroutine function. - """ - if hasattr(func, '__func__'): - func = func.__func__ - func._is_coroutine_marker = _is_coroutine_mark - return func - -def iscoroutinefunction(obj): - """Return true if the object is a coroutine function. - - Coroutine functions are normally defined with "async def" syntax, but may - be marked via markcoroutinefunction. - """ - return _has_code_flag(obj, CO_COROUTINE) or _has_coroutine_mark(obj) - -def isasyncgenfunction(obj): - """Return true if the object is an asynchronous generator function. - - Asynchronous generator functions are defined with "async def" - syntax and have "yield" expressions in their body. - """ - return _has_code_flag(obj, CO_ASYNC_GENERATOR) - -def isasyncgen(object): - """Return true if the object is an asynchronous generator.""" - return isinstance(object, types.AsyncGeneratorType) - -def isgenerator(object): - """Return true if the object is a generator. - - Generator objects provide these attributes: - gi_code code object - gi_frame frame object or possibly None once the generator has - been exhausted - gi_running set to 1 when generator is executing, 0 otherwise - gi_suspended set to 1 when the generator is suspended at a yield point, 0 otherwise - gi_yieldfrom object being iterated by yield from or None - - __iter__() defined to support iteration over container - close() raises a new GeneratorExit exception inside the - generator to terminate the iteration - send() resumes the generator and "sends" a value that becomes - the result of the current yield-expression - throw() used to raise an exception inside the generator""" - return isinstance(object, types.GeneratorType) - -def iscoroutine(object): - """Return true if the object is a coroutine.""" - return isinstance(object, types.CoroutineType) - -def isawaitable(object): - """Return true if object can be passed to an ``await`` expression.""" - return (isinstance(object, types.CoroutineType) or - isinstance(object, types.GeneratorType) and - bool(object.gi_code.co_flags & CO_ITERABLE_COROUTINE) or - isinstance(object, collections.abc.Awaitable)) - -def istraceback(object): - """Return true if the object is a traceback. - - Traceback objects provide these attributes: - tb_frame frame object at this level - tb_lasti index of last attempted instruction in bytecode - tb_lineno current line number in Python source code - tb_next next inner traceback object (called by this level)""" - return isinstance(object, types.TracebackType) - -def isframe(object): - """Return true if the object is a frame object. - - Frame objects provide these attributes: - f_back next outer frame object (this frame's caller) - f_builtins built-in namespace seen by this frame - f_code code object being executed in this frame - f_globals global namespace seen by this frame - f_lasti index of last attempted instruction in bytecode - f_lineno current line number in Python source code - f_locals local namespace seen by this frame - f_trace tracing function for this frame, or None - f_trace_lines is a tracing event triggered for each source line? - f_trace_opcodes are per-opcode events being requested? - - clear() used to clear all references to local variables""" - return isinstance(object, types.FrameType) - -def iscode(object): - """Return true if the object is a code object. - - Code objects provide these attributes: - co_argcount number of arguments (not including *, ** args - or keyword only arguments) - co_code string of raw compiled bytecode - co_cellvars tuple of names of cell variables - co_consts tuple of constants used in the bytecode - co_filename name of file in which this code object was created - co_firstlineno number of first line in Python source code - co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg - | 16=nested | 32=generator | 64=nofree | 128=coroutine - | 256=iterable_coroutine | 512=async_generator - | 0x4000000=has_docstring - co_freevars tuple of names of free variables - co_posonlyargcount number of positional only arguments - co_kwonlyargcount number of keyword only arguments (not including ** arg) - co_lnotab encoded mapping of line numbers to bytecode indices - co_name name with which this code object was defined - co_names tuple of names other than arguments and function locals - co_nlocals number of local variables - co_stacksize virtual machine stack space required - co_varnames tuple of names of arguments and local variables - co_qualname fully qualified function name - - co_lines() returns an iterator that yields successive bytecode ranges - co_positions() returns an iterator of source code positions for each bytecode instruction - replace() returns a copy of the code object with a new values""" - return isinstance(object, types.CodeType) - -def isbuiltin(object): - """Return true if the object is a built-in function or method. - - Built-in functions and methods provide these attributes: - __doc__ documentation string - __name__ original name of this function or method - __self__ instance to which a method is bound, or None""" - return isinstance(object, types.BuiltinFunctionType) - -def ismethodwrapper(object): - """Return true if the object is a method wrapper.""" - return isinstance(object, types.MethodWrapperType) - -def isroutine(object): - """Return true if the object is any kind of function or method.""" - return (isbuiltin(object) - or isfunction(object) - or ismethod(object) - or ismethoddescriptor(object) - or ismethodwrapper(object) - or isinstance(object, functools._singledispatchmethod_get)) - -def isabstract(object): - """Return true if the object is an abstract base class (ABC).""" - if not isinstance(object, type): - return False - if object.__flags__ & TPFLAGS_IS_ABSTRACT: - return True - if not issubclass(type(object), abc.ABCMeta): - return False - if hasattr(object, '__abstractmethods__'): - # It looks like ABCMeta.__new__ has finished running; - # TPFLAGS_IS_ABSTRACT should have been accurate. - return False - # It looks like ABCMeta.__new__ has not finished running yet; we're - # probably in __init_subclass__. We'll look for abstractmethods manually. - for name, value in object.__dict__.items(): - if getattr(value, "__isabstractmethod__", False): - return True - for base in object.__bases__: - for name in getattr(base, "__abstractmethods__", ()): - value = getattr(object, name, None) - if getattr(value, "__isabstractmethod__", False): - return True - return False - -def _getmembers(object, predicate, getter): - results = [] - processed = set() - names = dir(object) - if isclass(object): - mro = getmro(object) - # add any DynamicClassAttributes to the list of names if object is a class; - # this may result in duplicate entries if, for example, a virtual - # attribute with the same name as a DynamicClassAttribute exists - try: - for base in object.__bases__: - for k, v in base.__dict__.items(): - if isinstance(v, types.DynamicClassAttribute): - names.append(k) - except AttributeError: - pass - else: - mro = () - for key in names: - # First try to get the value via getattr. Some descriptors don't - # like calling their __get__ (see bug #1785), so fall back to - # looking in the __dict__. - try: - value = getter(object, key) - # handle the duplicate key - if key in processed: - raise AttributeError - except AttributeError: - for base in mro: - if key in base.__dict__: - value = base.__dict__[key] - break - else: - # could be a (currently) missing slot member, or a buggy - # __dir__; discard and move on - continue - if not predicate or predicate(value): - results.append((key, value)) - processed.add(key) - results.sort(key=lambda pair: pair[0]) - return results - -def getmembers(object, predicate=None): - """Return all members of an object as (name, value) pairs sorted by name. - Optionally, only return members that satisfy a given predicate.""" - return _getmembers(object, predicate, getattr) - -def getmembers_static(object, predicate=None): - """Return all members of an object as (name, value) pairs sorted by name - without triggering dynamic lookup via the descriptor protocol, - __getattr__ or __getattribute__. Optionally, only return members that - satisfy a given predicate. - - Note: this function may not be able to retrieve all members - that getmembers can fetch (like dynamically created attributes) - and may find members that getmembers can't (like descriptors - that raise AttributeError). It can also return descriptor objects - instead of instance members in some cases. - """ - return _getmembers(object, predicate, getattr_static) - -Attribute = namedtuple('Attribute', 'name kind defining_class object') - -def classify_class_attrs(cls): - """Return list of attribute-descriptor tuples. - - For each name in dir(cls), the return list contains a 4-tuple - with these elements: - - 0. The name (a string). - - 1. The kind of attribute this is, one of these strings: - 'class method' created via classmethod() - 'static method' created via staticmethod() - 'property' created via property() - 'method' any other flavor of method or descriptor - 'data' not a method - - 2. The class which defined this attribute (a class). - - 3. The object as obtained by calling getattr; if this fails, or if the - resulting object does not live anywhere in the class' mro (including - metaclasses) then the object is looked up in the defining class's - dict (found by walking the mro). - - If one of the items in dir(cls) is stored in the metaclass it will now - be discovered and not have None be listed as the class in which it was - defined. Any items whose home class cannot be discovered are skipped. - """ - - mro = getmro(cls) - metamro = getmro(type(cls)) # for attributes stored in the metaclass - metamro = tuple(cls for cls in metamro if cls not in (type, object)) - class_bases = (cls,) + mro - all_bases = class_bases + metamro - names = dir(cls) - # :dd any DynamicClassAttributes to the list of names; - # this may result in duplicate entries if, for example, a virtual - # attribute with the same name as a DynamicClassAttribute exists. - for base in mro: - for k, v in base.__dict__.items(): - if isinstance(v, types.DynamicClassAttribute) and v.fget is not None: - names.append(k) - result = [] - processed = set() - - for name in names: - # Get the object associated with the name, and where it was defined. - # Normal objects will be looked up with both getattr and directly in - # its class' dict (in case getattr fails [bug #1785], and also to look - # for a docstring). - # For DynamicClassAttributes on the second pass we only look in the - # class's dict. - # - # Getting an obj from the __dict__ sometimes reveals more than - # using getattr. Static and class methods are dramatic examples. - homecls = None - get_obj = None - dict_obj = None - if name not in processed: - try: - if name == '__dict__': - raise Exception("__dict__ is special, don't want the proxy") - get_obj = getattr(cls, name) - except Exception: - pass - else: - homecls = getattr(get_obj, "__objclass__", homecls) - if homecls not in class_bases: - # if the resulting object does not live somewhere in the - # mro, drop it and search the mro manually - homecls = None - last_cls = None - # first look in the classes - for srch_cls in class_bases: - srch_obj = getattr(srch_cls, name, None) - if srch_obj is get_obj: - last_cls = srch_cls - # then check the metaclasses - for srch_cls in metamro: - try: - srch_obj = srch_cls.__getattr__(cls, name) - except AttributeError: - continue - if srch_obj is get_obj: - last_cls = srch_cls - if last_cls is not None: - homecls = last_cls - for base in all_bases: - if name in base.__dict__: - dict_obj = base.__dict__[name] - if homecls not in metamro: - homecls = base - break - if homecls is None: - # unable to locate the attribute anywhere, most likely due to - # buggy custom __dir__; discard and move on - continue - obj = get_obj if get_obj is not None else dict_obj - # Classify the object or its descriptor. - if isinstance(dict_obj, (staticmethod, types.BuiltinMethodType)): - kind = "static method" - obj = dict_obj - elif isinstance(dict_obj, (classmethod, types.ClassMethodDescriptorType)): - kind = "class method" - obj = dict_obj - elif isinstance(dict_obj, property): - kind = "property" - obj = dict_obj - elif isroutine(obj): - kind = "method" - else: - kind = "data" - result.append(Attribute(name, kind, homecls, obj)) - processed.add(name) - return result - -# ----------------------------------------------------------- class helpers - -def getmro(cls): - "Return tuple of base classes (including cls) in method resolution order." - return cls.__mro__ - -# -------------------------------------------------------- function helpers - -def unwrap(func, *, stop=None): - """Get the object wrapped by *func*. - - Follows the chain of :attr:`__wrapped__` attributes returning the last - object in the chain. - - *stop* is an optional callback accepting an object in the wrapper chain - as its sole argument that allows the unwrapping to be terminated early if - the callback returns a true value. If the callback never returns a true - value, the last object in the chain is returned as usual. For example, - :func:`signature` uses this to stop unwrapping if any object in the - chain has a ``__signature__`` attribute defined. - - :exc:`ValueError` is raised if a cycle is encountered. - - """ - f = func # remember the original func for error reporting - # Memoise by id to tolerate non-hashable objects, but store objects to - # ensure they aren't destroyed, which would allow their IDs to be reused. - memo = {id(f): f} - recursion_limit = sys.getrecursionlimit() - while not isinstance(func, type) and hasattr(func, '__wrapped__'): - if stop is not None and stop(func): - break - func = func.__wrapped__ - id_func = id(func) - if (id_func in memo) or (len(memo) >= recursion_limit): - raise ValueError('wrapper loop when unwrapping {!r}'.format(f)) - memo[id_func] = func - return func - -# -------------------------------------------------- source code extraction -def indentsize(line): - """Return the indent size, in spaces, at the start of a line of text.""" - expline = line.expandtabs() - return len(expline) - len(expline.lstrip()) - -def _findclass(func): - cls = sys.modules.get(func.__module__) - if cls is None: - return None - for name in func.__qualname__.split('.')[:-1]: - cls = getattr(cls, name) - if not isclass(cls): - return None - return cls - -def _finddoc(obj): - if isclass(obj): - for base in obj.__mro__: - if base is not object: - try: - doc = base.__doc__ - except AttributeError: - continue - if doc is not None: - return doc - return None - - if ismethod(obj): - name = obj.__func__.__name__ - self = obj.__self__ - if (isclass(self) and - getattr(getattr(self, name, None), '__func__') is obj.__func__): - # classmethod - cls = self - else: - cls = self.__class__ - elif isfunction(obj): - name = obj.__name__ - cls = _findclass(obj) - if cls is None or getattr(cls, name) is not obj: - return None - elif isbuiltin(obj): - name = obj.__name__ - self = obj.__self__ - if (isclass(self) and - self.__qualname__ + '.' + name == obj.__qualname__): - # classmethod - cls = self - else: - cls = self.__class__ - # Should be tested before isdatadescriptor(). - elif isinstance(obj, property): - name = obj.__name__ - cls = _findclass(obj.fget) - if cls is None or getattr(cls, name) is not obj: - return None - elif ismethoddescriptor(obj) or isdatadescriptor(obj): - name = obj.__name__ - cls = obj.__objclass__ - if getattr(cls, name) is not obj: - return None - if ismemberdescriptor(obj): - slots = getattr(cls, '__slots__', None) - if isinstance(slots, dict) and name in slots: - return slots[name] - else: - return None - for base in cls.__mro__: - try: - doc = getattr(base, name).__doc__ - except AttributeError: - continue - if doc is not None: - return doc - return None - -def getdoc(object): - """Get the documentation string for an object. - - All tabs are expanded to spaces. To clean up docstrings that are - indented to line up with blocks of code, any whitespace than can be - uniformly removed from the second line onwards is removed.""" - try: - doc = object.__doc__ - except AttributeError: - return None - if doc is None: - try: - doc = _finddoc(object) - except (AttributeError, TypeError): - return None - if not isinstance(doc, str): - return None - return cleandoc(doc) - -def cleandoc(doc): - """Clean up indentation from docstrings. - - Any whitespace that can be uniformly removed from the second line - onwards is removed.""" - lines = doc.expandtabs().split('\n') - - # Find minimum indentation of any non-blank lines after first line. - margin = sys.maxsize - for line in lines[1:]: - content = len(line.lstrip(' ')) - if content: - indent = len(line) - content - margin = min(margin, indent) - # Remove indentation. - if lines: - lines[0] = lines[0].lstrip(' ') - if margin < sys.maxsize: - for i in range(1, len(lines)): - lines[i] = lines[i][margin:] - # Remove any trailing or leading blank lines. - while lines and not lines[-1]: - lines.pop() - while lines and not lines[0]: - lines.pop(0) - return '\n'.join(lines) - - -def getfile(object): - """Work out which source or compiled file an object was defined in.""" - if ismodule(object): - if getattr(object, '__file__', None): - return object.__file__ - raise TypeError('{!r} is a built-in module'.format(object)) - if isclass(object): - if hasattr(object, '__module__'): - module = sys.modules.get(object.__module__) - if getattr(module, '__file__', None): - return module.__file__ - if object.__module__ == '__main__': - raise OSError('source code not available') - raise TypeError('{!r} is a built-in class'.format(object)) - if ismethod(object): - object = object.__func__ - if isfunction(object): - object = object.__code__ - if istraceback(object): - object = object.tb_frame - if isframe(object): - object = object.f_code - if iscode(object): - return object.co_filename - raise TypeError('module, class, method, function, traceback, frame, or ' - 'code object was expected, got {}'.format( - type(object).__name__)) - -def getmodulename(path): - """Return the module name for a given file, or None.""" - fname = os.path.basename(path) - # Check for paths that look like an actual module file - suffixes = [(-len(suffix), suffix) - for suffix in importlib.machinery.all_suffixes()] - suffixes.sort() # try longest suffixes first, in case they overlap - for neglen, suffix in suffixes: - if fname.endswith(suffix): - return fname[:neglen] - return None - -def getsourcefile(object): - """Return the filename that can be used to locate an object's source. - Return None if no way can be identified to get the source. - """ - filename = getfile(object) - all_bytecode_suffixes = importlib.machinery.BYTECODE_SUFFIXES[:] - if any(filename.endswith(s) for s in all_bytecode_suffixes): - filename = (os.path.splitext(filename)[0] + - importlib.machinery.SOURCE_SUFFIXES[0]) - elif any(filename.endswith(s) for s in - importlib.machinery.EXTENSION_SUFFIXES): - return None - elif filename.endswith(".fwork"): - # Apple mobile framework markers are another type of non-source file - return None - - # return a filename found in the linecache even if it doesn't exist on disk - if filename in linecache.cache: - return filename - if os.path.exists(filename): - return filename - # only return a non-existent filename if the module has a PEP 302 loader - module = getmodule(object, filename) - if getattr(module, '__loader__', None) is not None: - return filename - elif getattr(getattr(module, "__spec__", None), "loader", None) is not None: - return filename - -def getabsfile(object, _filename=None): - """Return an absolute path to the source or compiled file for an object. - - The idea is for each object to have a unique origin, so this routine - normalizes the result as much as possible.""" - if _filename is None: - _filename = getsourcefile(object) or getfile(object) - return os.path.normcase(os.path.abspath(_filename)) - -modulesbyfile = {} -_filesbymodname = {} - -def getmodule(object, _filename=None): - """Return the module an object was defined in, or None if not found.""" - if ismodule(object): - return object - if hasattr(object, '__module__'): - return sys.modules.get(object.__module__) - - # Try the filename to modulename cache - if _filename is not None and _filename in modulesbyfile: - return sys.modules.get(modulesbyfile[_filename]) - # Try the cache again with the absolute file name - try: - file = getabsfile(object, _filename) - except (TypeError, FileNotFoundError): - return None - if file in modulesbyfile: - return sys.modules.get(modulesbyfile[file]) - # Update the filename to module name cache and check yet again - # Copy sys.modules in order to cope with changes while iterating - for modname, module in sys.modules.copy().items(): - if ismodule(module) and hasattr(module, '__file__'): - f = module.__file__ - if f == _filesbymodname.get(modname, None): - # Have already mapped this module, so skip it - continue - _filesbymodname[modname] = f - f = getabsfile(module) - # Always map to the name the module knows itself by - modulesbyfile[f] = modulesbyfile[ - os.path.realpath(f)] = module.__name__ - if file in modulesbyfile: - return sys.modules.get(modulesbyfile[file]) - # Check the main module - main = sys.modules['__main__'] - if not hasattr(object, '__name__'): - return None - if hasattr(main, object.__name__): - mainobject = getattr(main, object.__name__) - if mainobject is object: - return main - # Check builtins - builtin = sys.modules['builtins'] - if hasattr(builtin, object.__name__): - builtinobject = getattr(builtin, object.__name__) - if builtinobject is object: - return builtin - - -class ClassFoundException(Exception): - pass - - -def findsource(object): - """Return the entire source file and starting line number for an object. - - The argument may be a module, class, method, function, traceback, frame, - or code object. The source code is returned as a list of all the lines - in the file and the line number indexes a line in that list. An OSError - is raised if the source code cannot be retrieved.""" - - file = getsourcefile(object) - if file: - # Invalidate cache if needed. - linecache.checkcache(file) - else: - file = getfile(object) - # Allow filenames in form of "<something>" to pass through. - # `doctest` monkeypatches `linecache` module to enable - # inspection, so let `linecache.getlines` to be called. - if (not (file.startswith('<') and file.endswith('>'))) or file.endswith('.fwork'): - raise OSError('source code not available') - - module = getmodule(object, file) - if module: - lines = linecache.getlines(file, module.__dict__) - if not lines and file.startswith('<') and hasattr(object, "__code__"): - lines = linecache._getlines_from_code(object.__code__) - else: - lines = linecache.getlines(file) - if not lines: - raise OSError('could not get source code') - - if ismodule(object): - return lines, 0 - - if isclass(object): - try: - lnum = vars(object)['__firstlineno__'] - 1 - except (TypeError, KeyError): - raise OSError('source code not available') - if lnum >= len(lines): - raise OSError('lineno is out of bounds') - return lines, lnum - - if ismethod(object): - object = object.__func__ - if isfunction(object): - object = object.__code__ - if istraceback(object): - object = object.tb_frame - if isframe(object): - object = object.f_code - if iscode(object): - if not hasattr(object, 'co_firstlineno'): - raise OSError('could not find function definition') - lnum = object.co_firstlineno - 1 - if lnum >= len(lines): - raise OSError('lineno is out of bounds') - return lines, lnum - raise OSError('could not find code object') - -def getcomments(object): - """Get lines of comments immediately preceding an object's source code. - - Returns None when source can't be found. - """ - try: - lines, lnum = findsource(object) - except (OSError, TypeError): - return None - - if ismodule(object): - # Look for a comment block at the top of the file. - start = 0 - if lines and lines[0][:2] == '#!': start = 1 - while start < len(lines) and lines[start].strip() in ('', '#'): - start = start + 1 - if start < len(lines) and lines[start][:1] == '#': - comments = [] - end = start - while end < len(lines) and lines[end][:1] == '#': - comments.append(lines[end].expandtabs()) - end = end + 1 - return ''.join(comments) - - # Look for a preceding block of comments at the same indentation. - elif lnum > 0: - indent = indentsize(lines[lnum]) - end = lnum - 1 - if end >= 0 and lines[end].lstrip()[:1] == '#' and \ - indentsize(lines[end]) == indent: - comments = [lines[end].expandtabs().lstrip()] - if end > 0: - end = end - 1 - comment = lines[end].expandtabs().lstrip() - while comment[:1] == '#' and indentsize(lines[end]) == indent: - comments[:0] = [comment] - end = end - 1 - if end < 0: break - comment = lines[end].expandtabs().lstrip() - while comments and comments[0].strip() == '#': - comments[:1] = [] - while comments and comments[-1].strip() == '#': - comments[-1:] = [] - return ''.join(comments) - -class EndOfBlock(Exception): pass - -class BlockFinder: - """Provide a tokeneater() method to detect the end of a code block.""" - def __init__(self): - self.indent = 0 - self.singleline = False - self.started = False - self.passline = False - self.indecorator = False - self.last = 1 - self.body_col0 = None - - def tokeneater(self, type, token, srowcol, erowcol, line): - if not self.started and not self.indecorator: - if type in (tokenize.INDENT, tokenize.COMMENT, tokenize.NL): - pass - elif token == "async": - pass - # skip any decorators - elif token == "@": - self.indecorator = True - else: - # For "def" and "class" scan to the end of the block. - # For "lambda" and generator expression scan to - # the end of the logical line. - self.singleline = token not in ("def", "class") - self.started = True - self.passline = True # skip to the end of the line - elif type == tokenize.NEWLINE: - self.passline = False # stop skipping when a NEWLINE is seen - self.last = srowcol[0] - if self.singleline: - raise EndOfBlock - # hitting a NEWLINE when in a decorator without args - # ends the decorator - if self.indecorator: - self.indecorator = False - elif self.passline: - pass - elif type == tokenize.INDENT: - if self.body_col0 is None and self.started: - self.body_col0 = erowcol[1] - self.indent = self.indent + 1 - self.passline = True - elif type == tokenize.DEDENT: - self.indent = self.indent - 1 - # the end of matching indent/dedent pairs end a block - # (note that this only works for "def"/"class" blocks, - # not e.g. for "if: else:" or "try: finally:" blocks) - if self.indent <= 0: - raise EndOfBlock - elif type == tokenize.COMMENT: - if self.body_col0 is not None and srowcol[1] >= self.body_col0: - # Include comments if indented at least as much as the block - self.last = srowcol[0] - elif self.indent == 0 and type not in (tokenize.COMMENT, tokenize.NL): - # any other token on the same indentation level end the previous - # block as well, except the pseudo-tokens COMMENT and NL. - raise EndOfBlock - -def getblock(lines): - """Extract the block of code at the top of the given list of lines.""" - blockfinder = BlockFinder() - try: - tokens = tokenize.generate_tokens(iter(lines).__next__) - for _token in tokens: - blockfinder.tokeneater(*_token) - except (EndOfBlock, IndentationError): - pass - except SyntaxError as e: - if "unmatched" not in e.msg: - raise e from None - _, *_token_info = _token - try: - blockfinder.tokeneater(tokenize.NEWLINE, *_token_info) - except (EndOfBlock, IndentationError): - pass - return lines[:blockfinder.last] - -def getsourcelines(object): - """Return a list of source lines and starting line number for an object. - - The argument may be a module, class, method, function, traceback, frame, - or code object. The source code is returned as a list of the lines - corresponding to the object and the line number indicates where in the - original source file the first line of code was found. An OSError is - raised if the source code cannot be retrieved.""" - object = unwrap(object) - lines, lnum = findsource(object) - - if istraceback(object): - object = object.tb_frame - - # for module or frame that corresponds to module, return all source lines - if (ismodule(object) or - (isframe(object) and object.f_code.co_name == "<module>")): - return lines, 0 - else: - return getblock(lines[lnum:]), lnum + 1 - -def getsource(object): - """Return the text of the source code for an object. - - The argument may be a module, class, method, function, traceback, frame, - or code object. The source code is returned as a single string. An - OSError is raised if the source code cannot be retrieved.""" - lines, lnum = getsourcelines(object) - return ''.join(lines) - -# --------------------------------------------------- class tree extraction -def walktree(classes, children, parent): - """Recursive helper function for getclasstree().""" - results = [] - classes.sort(key=attrgetter('__module__', '__name__')) - for c in classes: - results.append((c, c.__bases__)) - if c in children: - results.append(walktree(children[c], children, c)) - return results - -def getclasstree(classes, unique=False): - """Arrange the given list of classes into a hierarchy of nested lists. - - Where a nested list appears, it contains classes derived from the class - whose entry immediately precedes the list. Each entry is a 2-tuple - containing a class and a tuple of its base classes. If the 'unique' - argument is true, exactly one entry appears in the returned structure - for each class in the given list. Otherwise, classes using multiple - inheritance and their descendants will appear multiple times.""" - children = {} - roots = [] - for c in classes: - if c.__bases__: - for parent in c.__bases__: - if parent not in children: - children[parent] = [] - if c not in children[parent]: - children[parent].append(c) - if unique and parent in classes: break - elif c not in roots: - roots.append(c) - for parent in children: - if parent not in classes: - roots.append(parent) - return walktree(roots, children, None) - -# ------------------------------------------------ argument list extraction -Arguments = namedtuple('Arguments', 'args, varargs, varkw') - -def getargs(co): - """Get information about the arguments accepted by a code object. - - Three things are returned: (args, varargs, varkw), where - 'args' is the list of argument names. Keyword-only arguments are - appended. 'varargs' and 'varkw' are the names of the * and ** - arguments or None.""" - if not iscode(co): - raise TypeError('{!r} is not a code object'.format(co)) - - names = co.co_varnames - nargs = co.co_argcount - nkwargs = co.co_kwonlyargcount - args = list(names[:nargs]) - kwonlyargs = list(names[nargs:nargs+nkwargs]) - - nargs += nkwargs - varargs = None - if co.co_flags & CO_VARARGS: - varargs = co.co_varnames[nargs] - nargs = nargs + 1 - varkw = None - if co.co_flags & CO_VARKEYWORDS: - varkw = co.co_varnames[nargs] - return Arguments(args + kwonlyargs, varargs, varkw) - - -FullArgSpec = namedtuple('FullArgSpec', - 'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations') - -def getfullargspec(func): - """Get the names and default values of a callable object's parameters. - - A tuple of seven things is returned: - (args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations). - 'args' is a list of the parameter names. - 'varargs' and 'varkw' are the names of the * and ** parameters or None. - 'defaults' is an n-tuple of the default values of the last n parameters. - 'kwonlyargs' is a list of keyword-only parameter names. - 'kwonlydefaults' is a dictionary mapping names from kwonlyargs to defaults. - 'annotations' is a dictionary mapping parameter names to annotations. - - Notable differences from inspect.signature(): - - the "self" parameter is always reported, even for bound methods - - wrapper chains defined by __wrapped__ *not* unwrapped automatically - """ - try: - # Re: `skip_bound_arg=False` - # - # There is a notable difference in behaviour between getfullargspec - # and Signature: the former always returns 'self' parameter for bound - # methods, whereas the Signature always shows the actual calling - # signature of the passed object. - # - # To simulate this behaviour, we "unbind" bound methods, to trick - # inspect.signature to always return their first parameter ("self", - # usually) - - # Re: `follow_wrapper_chains=False` - # - # getfullargspec() historically ignored __wrapped__ attributes, - # so we ensure that remains the case in 3.3+ - - sig = _signature_from_callable(func, - follow_wrapper_chains=False, - skip_bound_arg=False, - sigcls=Signature, - eval_str=False) - except Exception as ex: - # Most of the times 'signature' will raise ValueError. - # But, it can also raise AttributeError, and, maybe something - # else. So to be fully backwards compatible, we catch all - # possible exceptions here, and reraise a TypeError. - raise TypeError('unsupported callable') from ex - - args = [] - varargs = None - varkw = None - posonlyargs = [] - kwonlyargs = [] - annotations = {} - defaults = () - kwdefaults = {} - - if sig.return_annotation is not sig.empty: - annotations['return'] = sig.return_annotation - - for param in sig.parameters.values(): - kind = param.kind - name = param.name - - if kind is _POSITIONAL_ONLY: - posonlyargs.append(name) - if param.default is not param.empty: - defaults += (param.default,) - elif kind is _POSITIONAL_OR_KEYWORD: - args.append(name) - if param.default is not param.empty: - defaults += (param.default,) - elif kind is _VAR_POSITIONAL: - varargs = name - elif kind is _KEYWORD_ONLY: - kwonlyargs.append(name) - if param.default is not param.empty: - kwdefaults[name] = param.default - elif kind is _VAR_KEYWORD: - varkw = name - - if param.annotation is not param.empty: - annotations[name] = param.annotation - - if not kwdefaults: - # compatibility with 'func.__kwdefaults__' - kwdefaults = None - - if not defaults: - # compatibility with 'func.__defaults__' - defaults = None - - return FullArgSpec(posonlyargs + args, varargs, varkw, defaults, - kwonlyargs, kwdefaults, annotations) - - -ArgInfo = namedtuple('ArgInfo', 'args varargs keywords locals') - -def getargvalues(frame): - """Get information about arguments passed into a particular frame. - - A tuple of four things is returned: (args, varargs, varkw, locals). - 'args' is a list of the argument names. - 'varargs' and 'varkw' are the names of the * and ** arguments or None. - 'locals' is the locals dictionary of the given frame.""" - args, varargs, varkw = getargs(frame.f_code) - return ArgInfo(args, varargs, varkw, frame.f_locals) - -def formatannotation(annotation, base_module=None, *, quote_annotation_strings=True): - if not quote_annotation_strings and isinstance(annotation, str): - return annotation - if getattr(annotation, '__module__', None) == 'typing': - def repl(match): - text = match.group() - return text.removeprefix('typing.') - return re.sub(r'[\w\.]+', repl, repr(annotation)) - if isinstance(annotation, types.GenericAlias): - return str(annotation) - if isinstance(annotation, type): - if annotation.__module__ in ('builtins', base_module): - return annotation.__qualname__ - return annotation.__module__+'.'+annotation.__qualname__ - if isinstance(annotation, ForwardRef): - return annotation.__forward_arg__ - return repr(annotation) - -def formatannotationrelativeto(object): - module = getattr(object, '__module__', None) - def _formatannotation(annotation): - return formatannotation(annotation, module) - return _formatannotation - - -def formatargvalues(args, varargs, varkw, locals, - formatarg=str, - formatvarargs=lambda name: '*' + name, - formatvarkw=lambda name: '**' + name, - formatvalue=lambda value: '=' + repr(value)): - """Format an argument spec from the 4 values returned by getargvalues. - - The first four arguments are (args, varargs, varkw, locals). The - next four arguments are the corresponding optional formatting functions - that are called to turn names and values into strings. The ninth - argument is an optional function to format the sequence of arguments.""" - def convert(name, locals=locals, - formatarg=formatarg, formatvalue=formatvalue): - return formatarg(name) + formatvalue(locals[name]) - specs = [] - for i in range(len(args)): - specs.append(convert(args[i])) - if varargs: - specs.append(formatvarargs(varargs) + formatvalue(locals[varargs])) - if varkw: - specs.append(formatvarkw(varkw) + formatvalue(locals[varkw])) - return '(' + ', '.join(specs) + ')' - -def _missing_arguments(f_name, argnames, pos, values): - names = [repr(name) for name in argnames if name not in values] - missing = len(names) - if missing == 1: - s = names[0] - elif missing == 2: - s = "{} and {}".format(*names) - else: - tail = ", {} and {}".format(*names[-2:]) - del names[-2:] - s = ", ".join(names) + tail - raise TypeError("%s() missing %i required %s argument%s: %s" % - (f_name, missing, - "positional" if pos else "keyword-only", - "" if missing == 1 else "s", s)) - -def _too_many(f_name, args, kwonly, varargs, defcount, given, values): - atleast = len(args) - defcount - kwonly_given = len([arg for arg in kwonly if arg in values]) - if varargs: - plural = atleast != 1 - sig = "at least %d" % (atleast,) - elif defcount: - plural = True - sig = "from %d to %d" % (atleast, len(args)) - else: - plural = len(args) != 1 - sig = str(len(args)) - kwonly_sig = "" - if kwonly_given: - msg = " positional argument%s (and %d keyword-only argument%s)" - kwonly_sig = (msg % ("s" if given != 1 else "", kwonly_given, - "s" if kwonly_given != 1 else "")) - raise TypeError("%s() takes %s positional argument%s but %d%s %s given" % - (f_name, sig, "s" if plural else "", given, kwonly_sig, - "was" if given == 1 and not kwonly_given else "were")) - -def getcallargs(func, /, *positional, **named): - """Get the mapping of arguments to values. - - A dict is returned, with keys the function argument names (including the - names of the * and ** arguments, if any), and values the respective bound - values from 'positional' and 'named'.""" - spec = getfullargspec(func) - args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = spec - f_name = func.__name__ - arg2value = {} - - - if ismethod(func) and func.__self__ is not None: - # implicit 'self' (or 'cls' for classmethods) argument - positional = (func.__self__,) + positional - num_pos = len(positional) - num_args = len(args) - num_defaults = len(defaults) if defaults else 0 - - n = min(num_pos, num_args) - for i in range(n): - arg2value[args[i]] = positional[i] - if varargs: - arg2value[varargs] = tuple(positional[n:]) - possible_kwargs = set(args + kwonlyargs) - if varkw: - arg2value[varkw] = {} - for kw, value in named.items(): - if kw not in possible_kwargs: - if not varkw: - raise TypeError("%s() got an unexpected keyword argument %r" % - (f_name, kw)) - arg2value[varkw][kw] = value - continue - if kw in arg2value: - raise TypeError("%s() got multiple values for argument %r" % - (f_name, kw)) - arg2value[kw] = value - if num_pos > num_args and not varargs: - _too_many(f_name, args, kwonlyargs, varargs, num_defaults, - num_pos, arg2value) - if num_pos < num_args: - req = args[:num_args - num_defaults] - for arg in req: - if arg not in arg2value: - _missing_arguments(f_name, req, True, arg2value) - for i, arg in enumerate(args[num_args - num_defaults:]): - if arg not in arg2value: - arg2value[arg] = defaults[i] - missing = 0 - for kwarg in kwonlyargs: - if kwarg not in arg2value: - if kwonlydefaults and kwarg in kwonlydefaults: - arg2value[kwarg] = kwonlydefaults[kwarg] - else: - missing += 1 - if missing: - _missing_arguments(f_name, kwonlyargs, False, arg2value) - return arg2value - -ClosureVars = namedtuple('ClosureVars', 'nonlocals globals builtins unbound') - -def getclosurevars(func): - """ - Get the mapping of free variables to their current values. - - Returns a named tuple of dicts mapping the current nonlocal, global - and builtin references as seen by the body of the function. A final - set of unbound names that could not be resolved is also provided. - """ - - if ismethod(func): - func = func.__func__ - - if not isfunction(func): - raise TypeError("{!r} is not a Python function".format(func)) - - code = func.__code__ - # Nonlocal references are named in co_freevars and resolved - # by looking them up in __closure__ by positional index - if func.__closure__ is None: - nonlocal_vars = {} - else: - nonlocal_vars = { - var : cell.cell_contents - for var, cell in zip(code.co_freevars, func.__closure__) - } - - # Global and builtin references are named in co_names and resolved - # by looking them up in __globals__ or __builtins__ - global_ns = func.__globals__ - builtin_ns = global_ns.get("__builtins__", builtins.__dict__) - if ismodule(builtin_ns): - builtin_ns = builtin_ns.__dict__ - global_vars = {} - builtin_vars = {} - unbound_names = set() - global_names = set() - for instruction in dis.get_instructions(code): - opname = instruction.opname - name = instruction.argval - if opname == "LOAD_ATTR": - unbound_names.add(name) - elif opname == "LOAD_GLOBAL": - global_names.add(name) - for name in global_names: - try: - global_vars[name] = global_ns[name] - except KeyError: - try: - builtin_vars[name] = builtin_ns[name] - except KeyError: - unbound_names.add(name) - - return ClosureVars(nonlocal_vars, global_vars, - builtin_vars, unbound_names) - -# -------------------------------------------------- stack frame extraction - -_Traceback = namedtuple('_Traceback', 'filename lineno function code_context index') - -class Traceback(_Traceback): - def __new__(cls, filename, lineno, function, code_context, index, *, positions=None): - instance = super().__new__(cls, filename, lineno, function, code_context, index) - instance.positions = positions - return instance - - def __repr__(self): - return ('Traceback(filename={!r}, lineno={!r}, function={!r}, ' - 'code_context={!r}, index={!r}, positions={!r})'.format( - self.filename, self.lineno, self.function, self.code_context, - self.index, self.positions)) - -def _get_code_position_from_tb(tb): - code, instruction_index = tb.tb_frame.f_code, tb.tb_lasti - return _get_code_position(code, instruction_index) - -def _get_code_position(code, instruction_index): - if instruction_index < 0: - return (None, None, None, None) - positions_gen = code.co_positions() - # The nth entry in code.co_positions() corresponds to instruction (2*n)th since Python 3.10+ - return next(itertools.islice(positions_gen, instruction_index // 2, None)) - -def getframeinfo(frame, context=1): - """Get information about a frame or traceback object. - - A tuple of five things is returned: the filename, the line number of - the current line, the function name, a list of lines of context from - the source code, and the index of the current line within that list. - The optional second argument specifies the number of lines of context - to return, which are centered around the current line.""" - if istraceback(frame): - positions = _get_code_position_from_tb(frame) - lineno = frame.tb_lineno - frame = frame.tb_frame - else: - lineno = frame.f_lineno - positions = _get_code_position(frame.f_code, frame.f_lasti) - - if positions[0] is None: - frame, *positions = (frame, lineno, *positions[1:]) - else: - frame, *positions = (frame, *positions) - - lineno = positions[0] - - if not isframe(frame): - raise TypeError('{!r} is not a frame or traceback object'.format(frame)) - - filename = getsourcefile(frame) or getfile(frame) - if context > 0: - start = lineno - 1 - context//2 - try: - lines, lnum = findsource(frame) - except OSError: - lines = index = None - else: - start = max(0, min(start, len(lines) - context)) - lines = lines[start:start+context] - index = lineno - 1 - start - else: - lines = index = None - - return Traceback(filename, lineno, frame.f_code.co_name, lines, - index, positions=dis.Positions(*positions)) - -def getlineno(frame): - """Get the line number from a frame object, allowing for optimization.""" - # FrameType.f_lineno is now a descriptor that grovels co_lnotab - return frame.f_lineno - -_FrameInfo = namedtuple('_FrameInfo', ('frame',) + Traceback._fields) -class FrameInfo(_FrameInfo): - def __new__(cls, frame, filename, lineno, function, code_context, index, *, positions=None): - instance = super().__new__(cls, frame, filename, lineno, function, code_context, index) - instance.positions = positions - return instance - - def __repr__(self): - return ('FrameInfo(frame={!r}, filename={!r}, lineno={!r}, function={!r}, ' - 'code_context={!r}, index={!r}, positions={!r})'.format( - self.frame, self.filename, self.lineno, self.function, - self.code_context, self.index, self.positions)) - -def getouterframes(frame, context=1): - """Get a list of records for a frame and all higher (calling) frames. - - Each record contains a frame object, filename, line number, function - name, a list of lines of context, and index within the context.""" - framelist = [] - while frame: - traceback_info = getframeinfo(frame, context) - frameinfo = (frame,) + traceback_info - framelist.append(FrameInfo(*frameinfo, positions=traceback_info.positions)) - frame = frame.f_back - return framelist - -def getinnerframes(tb, context=1): - """Get a list of records for a traceback's frame and all lower frames. - - Each record contains a frame object, filename, line number, function - name, a list of lines of context, and index within the context.""" - framelist = [] - while tb: - traceback_info = getframeinfo(tb, context) - frameinfo = (tb.tb_frame,) + traceback_info - framelist.append(FrameInfo(*frameinfo, positions=traceback_info.positions)) - tb = tb.tb_next - return framelist - -def currentframe(): - """Return the frame of the caller or None if this is not possible.""" - return sys._getframe(1) if hasattr(sys, "_getframe") else None - -def stack(context=1): - """Return a list of records for the stack above the caller's frame.""" - return getouterframes(sys._getframe(1), context) - -def trace(context=1): - """Return a list of records for the stack below the current exception.""" - exc = sys.exception() - tb = None if exc is None else exc.__traceback__ - return getinnerframes(tb, context) - - -# ------------------------------------------------ static version of getattr - -_sentinel = object() -_static_getmro = type.__dict__['__mro__'].__get__ -_get_dunder_dict_of_class = type.__dict__["__dict__"].__get__ - - -def _check_instance(obj, attr): - instance_dict = {} - try: - instance_dict = object.__getattribute__(obj, "__dict__") - except AttributeError: - pass - return dict.get(instance_dict, attr, _sentinel) - - -def _check_class(klass, attr): - for entry in _static_getmro(klass): - if _shadowed_dict(type(entry)) is _sentinel and attr in entry.__dict__: - return entry.__dict__[attr] - return _sentinel - - -@functools.lru_cache() -def _shadowed_dict_from_weakref_mro_tuple(*weakref_mro): - for weakref_entry in weakref_mro: - # Normally we'd have to check whether the result of weakref_entry() - # is None here, in case the object the weakref is pointing to has died. - # In this specific case, however, we know that the only caller of this - # function is `_shadowed_dict()`, and that therefore this weakref is - # guaranteed to point to an object that is still alive. - entry = weakref_entry() - dunder_dict = _get_dunder_dict_of_class(entry) - if '__dict__' in dunder_dict: - class_dict = dunder_dict['__dict__'] - if not (type(class_dict) is types.GetSetDescriptorType and - class_dict.__name__ == "__dict__" and - class_dict.__objclass__ is entry): - return class_dict - return _sentinel - - -def _shadowed_dict(klass): - # gh-118013: the inner function here is decorated with lru_cache for - # performance reasons, *but* make sure not to pass strong references - # to the items in the mro. Doing so can lead to unexpected memory - # consumption in cases where classes are dynamically created and - # destroyed, and the dynamically created classes happen to be the only - # objects that hold strong references to other objects that take up a - # significant amount of memory. - return _shadowed_dict_from_weakref_mro_tuple( - *[make_weakref(entry) for entry in _static_getmro(klass)] - ) - - -def getattr_static(obj, attr, default=_sentinel): - """Retrieve attributes without triggering dynamic lookup via the - descriptor protocol, __getattr__ or __getattribute__. - - Note: this function may not be able to retrieve all attributes - that getattr can fetch (like dynamically created attributes) - and may find attributes that getattr can't (like descriptors - that raise AttributeError). It can also return descriptor objects - instead of instance members in some cases. See the - documentation for details. - """ - instance_result = _sentinel - - objtype = type(obj) - if type not in _static_getmro(objtype): - klass = objtype - dict_attr = _shadowed_dict(klass) - if (dict_attr is _sentinel or - type(dict_attr) is types.MemberDescriptorType): - instance_result = _check_instance(obj, attr) - else: - klass = obj - - klass_result = _check_class(klass, attr) - - if instance_result is not _sentinel and klass_result is not _sentinel: - if _check_class(type(klass_result), "__get__") is not _sentinel and ( - _check_class(type(klass_result), "__set__") is not _sentinel - or _check_class(type(klass_result), "__delete__") is not _sentinel - ): - return klass_result - - if instance_result is not _sentinel: - return instance_result - if klass_result is not _sentinel: - return klass_result - - if obj is klass: - # for types we check the metaclass too - for entry in _static_getmro(type(klass)): - if ( - _shadowed_dict(type(entry)) is _sentinel - and attr in entry.__dict__ - ): - return entry.__dict__[attr] - if default is not _sentinel: - return default - raise AttributeError(attr) - - -# ------------------------------------------------ generator introspection - -GEN_CREATED = 'GEN_CREATED' -GEN_RUNNING = 'GEN_RUNNING' -GEN_SUSPENDED = 'GEN_SUSPENDED' -GEN_CLOSED = 'GEN_CLOSED' - -def getgeneratorstate(generator): - """Get current state of a generator-iterator. - - Possible states are: - GEN_CREATED: Waiting to start execution. - GEN_RUNNING: Currently being executed by the interpreter. - GEN_SUSPENDED: Currently suspended at a yield expression. - GEN_CLOSED: Execution has completed. - """ - if generator.gi_running: - return GEN_RUNNING - if generator.gi_suspended: - return GEN_SUSPENDED - if generator.gi_frame is None: - return GEN_CLOSED - return GEN_CREATED - - -def getgeneratorlocals(generator): - """ - Get the mapping of generator local variables to their current values. - - A dict is returned, with the keys the local variable names and values the - bound values.""" - - if not isgenerator(generator): - raise TypeError("{!r} is not a Python generator".format(generator)) - - frame = getattr(generator, "gi_frame", None) - if frame is not None: - return generator.gi_frame.f_locals - else: - return {} - - -# ------------------------------------------------ coroutine introspection - -CORO_CREATED = 'CORO_CREATED' -CORO_RUNNING = 'CORO_RUNNING' -CORO_SUSPENDED = 'CORO_SUSPENDED' -CORO_CLOSED = 'CORO_CLOSED' - -def getcoroutinestate(coroutine): - """Get current state of a coroutine object. - - Possible states are: - CORO_CREATED: Waiting to start execution. - CORO_RUNNING: Currently being executed by the interpreter. - CORO_SUSPENDED: Currently suspended at an await expression. - CORO_CLOSED: Execution has completed. - """ - if coroutine.cr_running: - return CORO_RUNNING - if coroutine.cr_suspended: - return CORO_SUSPENDED - if coroutine.cr_frame is None: - return CORO_CLOSED - return CORO_CREATED - - -def getcoroutinelocals(coroutine): - """ - Get the mapping of coroutine local variables to their current values. - - A dict is returned, with the keys the local variable names and values the - bound values.""" - frame = getattr(coroutine, "cr_frame", None) - if frame is not None: - return frame.f_locals - else: - return {} - - -# ----------------------------------- asynchronous generator introspection - -AGEN_CREATED = 'AGEN_CREATED' -AGEN_RUNNING = 'AGEN_RUNNING' -AGEN_SUSPENDED = 'AGEN_SUSPENDED' -AGEN_CLOSED = 'AGEN_CLOSED' - - -def getasyncgenstate(agen): - """Get current state of an asynchronous generator object. - - Possible states are: - AGEN_CREATED: Waiting to start execution. - AGEN_RUNNING: Currently being executed by the interpreter. - AGEN_SUSPENDED: Currently suspended at a yield expression. - AGEN_CLOSED: Execution has completed. - """ - if agen.ag_running: - return AGEN_RUNNING - if agen.ag_suspended: - return AGEN_SUSPENDED - if agen.ag_frame is None: - return AGEN_CLOSED - return AGEN_CREATED - - -def getasyncgenlocals(agen): - """ - Get the mapping of asynchronous generator local variables to their current - values. - - A dict is returned, with the keys the local variable names and values the - bound values.""" - - if not isasyncgen(agen): - raise TypeError(f"{agen!r} is not a Python async generator") - - frame = getattr(agen, "ag_frame", None) - if frame is not None: - return agen.ag_frame.f_locals - else: - return {} - - -############################################################################### -### Function Signature Object (PEP 362) -############################################################################### - - -_NonUserDefinedCallables = (types.WrapperDescriptorType, - types.MethodWrapperType, - types.ClassMethodDescriptorType, - types.BuiltinFunctionType) - - -def _signature_get_user_defined_method(cls, method_name, *, follow_wrapper_chains=True): - """Private helper. Checks if ``cls`` has an attribute - named ``method_name`` and returns it only if it is a - pure python function. - """ - if method_name == '__new__': - meth = getattr(cls, method_name, None) - else: - meth = getattr_static(cls, method_name, None) - if meth is None: - return None - - # NOTE: The meth may wraps a non-user-defined callable. - # In this case, we treat the meth as non-user-defined callable too. - # (e.g. cls.__new__ generated by @warnings.deprecated) - unwrapped_meth = None - if follow_wrapper_chains: - unwrapped_meth = unwrap(meth, stop=(lambda m: hasattr(m, "__signature__") - or _signature_is_builtin(m))) - - if (isinstance(meth, _NonUserDefinedCallables) - or isinstance(unwrapped_meth, _NonUserDefinedCallables)): - # Once '__signature__' will be added to 'C'-level - # callables, this check won't be necessary - return None - if method_name != '__new__': - meth = _descriptor_get(meth, cls) - return meth - - -def _signature_get_partial(wrapped_sig, partial, extra_args=()): - """Private helper to calculate how 'wrapped_sig' signature will - look like after applying a 'functools.partial' object (or alike) - on it. - """ - - old_params = wrapped_sig.parameters - new_params = OrderedDict(old_params.items()) - - partial_args = partial.args or () - partial_keywords = partial.keywords or {} - - if extra_args: - partial_args = extra_args + partial_args - - try: - ba = wrapped_sig.bind_partial(*partial_args, **partial_keywords) - except TypeError as ex: - msg = 'partial object {!r} has incorrect arguments'.format(partial) - raise ValueError(msg) from ex - - - transform_to_kwonly = False - for param_name, param in old_params.items(): - try: - arg_value = ba.arguments[param_name] - except KeyError: - pass - else: - if param.kind is _POSITIONAL_ONLY: - # If positional-only parameter is bound by partial, - # it effectively disappears from the signature - # However, if it is a Placeholder it is not removed - # And also looses default value - if arg_value is functools.Placeholder: - new_params[param_name] = param.replace(default=_empty) - else: - new_params.pop(param_name) - continue - - if param.kind is _POSITIONAL_OR_KEYWORD: - if param_name in partial_keywords: - # This means that this parameter, and all parameters - # after it should be keyword-only (and var-positional - # should be removed). Here's why. Consider the following - # function: - # foo(a, b, *args, c): - # pass - # - # "partial(foo, a='spam')" will have the following - # signature: "(*, a='spam', b, c)". Because attempting - # to call that partial with "(10, 20)" arguments will - # raise a TypeError, saying that "a" argument received - # multiple values. - transform_to_kwonly = True - # Set the new default value - new_params[param_name] = param.replace(default=arg_value) - else: - # was passed as a positional argument - # Do not pop if it is a Placeholder - # also change kind to positional only - # and remove default - if arg_value is functools.Placeholder: - new_param = param.replace( - kind=_POSITIONAL_ONLY, - default=_empty - ) - new_params[param_name] = new_param - else: - new_params.pop(param_name) - continue - - if param.kind is _KEYWORD_ONLY: - # Set the new default value - new_params[param_name] = param.replace(default=arg_value) - - if transform_to_kwonly: - assert param.kind is not _POSITIONAL_ONLY - - if param.kind is _POSITIONAL_OR_KEYWORD: - new_param = new_params[param_name].replace(kind=_KEYWORD_ONLY) - new_params[param_name] = new_param - new_params.move_to_end(param_name) - elif param.kind in (_KEYWORD_ONLY, _VAR_KEYWORD): - new_params.move_to_end(param_name) - elif param.kind is _VAR_POSITIONAL: - new_params.pop(param.name) - - return wrapped_sig.replace(parameters=new_params.values()) - - -def _signature_bound_method(sig): - """Private helper to transform signatures for unbound - functions to bound methods. - """ - - params = tuple(sig.parameters.values()) - - if not params or params[0].kind in (_VAR_KEYWORD, _KEYWORD_ONLY): - raise ValueError('invalid method signature') - - kind = params[0].kind - if kind in (_POSITIONAL_OR_KEYWORD, _POSITIONAL_ONLY): - # Drop first parameter: - # '(p1, p2[, ...])' -> '(p2[, ...])' - params = params[1:] - else: - if kind is not _VAR_POSITIONAL: - # Unless we add a new parameter type we never - # get here - raise ValueError('invalid argument type') - # It's a var-positional parameter. - # Do nothing. '(*args[, ...])' -> '(*args[, ...])' - - return sig.replace(parameters=params) - - -def _signature_is_builtin(obj): - """Private helper to test if `obj` is a callable that might - support Argument Clinic's __text_signature__ protocol. - """ - return (isbuiltin(obj) or - ismethoddescriptor(obj) or - isinstance(obj, _NonUserDefinedCallables) or - # Can't test 'isinstance(type)' here, as it would - # also be True for regular python classes. - # Can't use the `in` operator here, as it would - # invoke the custom __eq__ method. - obj is type or obj is object) - - -def _signature_is_functionlike(obj): - """Private helper to test if `obj` is a duck type of FunctionType. - A good example of such objects are functions compiled with - Cython, which have all attributes that a pure Python function - would have, but have their code statically compiled. - """ - - if not callable(obj) or isclass(obj): - # All function-like objects are obviously callables, - # and not classes. - return False - - name = getattr(obj, '__name__', None) - code = getattr(obj, '__code__', None) - defaults = getattr(obj, '__defaults__', _void) # Important to use _void ... - kwdefaults = getattr(obj, '__kwdefaults__', _void) # ... and not None here - - return (isinstance(code, types.CodeType) and - isinstance(name, str) and - (defaults is None or isinstance(defaults, tuple)) and - (kwdefaults is None or isinstance(kwdefaults, dict))) - - -def _signature_strip_non_python_syntax(signature): - """ - Private helper function. Takes a signature in Argument Clinic's - extended signature format. - - Returns a tuple of two things: - * that signature re-rendered in standard Python syntax, and - * the index of the "self" parameter (generally 0), or None if - the function does not have a "self" parameter. - """ - - if not signature: - return signature, None - - self_parameter = None - - lines = [l.encode('ascii') for l in signature.split('\n') if l] - generator = iter(lines).__next__ - token_stream = tokenize.tokenize(generator) - - text = [] - add = text.append - - current_parameter = 0 - OP = token.OP - ERRORTOKEN = token.ERRORTOKEN - - # token stream always starts with ENCODING token, skip it - t = next(token_stream) - assert t.type == tokenize.ENCODING - - for t in token_stream: - type, string = t.type, t.string - - if type == OP: - if string == ',': - current_parameter += 1 - - if (type == OP) and (string == '$'): - assert self_parameter is None - self_parameter = current_parameter - continue - - add(string) - if (string == ','): - add(' ') - clean_signature = ''.join(text).strip().replace("\n", "") - return clean_signature, self_parameter - - -def _signature_fromstr(cls, obj, s, skip_bound_arg=True): - """Private helper to parse content of '__text_signature__' - and return a Signature based on it. - """ - Parameter = cls._parameter_cls - - clean_signature, self_parameter = _signature_strip_non_python_syntax(s) - - program = "def foo" + clean_signature + ": pass" - - try: - module = ast.parse(program) - except SyntaxError: - module = None - - if not isinstance(module, ast.Module): - raise ValueError("{!r} builtin has invalid signature".format(obj)) - - f = module.body[0] - - parameters = [] - empty = Parameter.empty - - module = None - module_dict = {} - - module_name = getattr(obj, '__module__', None) - if not module_name: - objclass = getattr(obj, '__objclass__', None) - module_name = getattr(objclass, '__module__', None) - - if module_name: - module = sys.modules.get(module_name, None) - if module: - module_dict = module.__dict__ - sys_module_dict = sys.modules.copy() - - def parse_name(node): - assert isinstance(node, ast.arg) - if node.annotation is not None: - raise ValueError("Annotations are not currently supported") - return node.arg - - def wrap_value(s): - try: - value = eval(s, module_dict) - except NameError: - try: - value = eval(s, sys_module_dict) - except NameError: - raise ValueError - - if isinstance(value, (str, int, float, bytes, bool, type(None))): - return ast.Constant(value) - raise ValueError - - class RewriteSymbolics(ast.NodeTransformer): - def visit_Attribute(self, node): - a = [] - n = node - while isinstance(n, ast.Attribute): - a.append(n.attr) - n = n.value - if not isinstance(n, ast.Name): - raise ValueError - a.append(n.id) - value = ".".join(reversed(a)) - return wrap_value(value) - - def visit_Name(self, node): - if not isinstance(node.ctx, ast.Load): - raise ValueError() - return wrap_value(node.id) - - def visit_BinOp(self, node): - # Support constant folding of a couple simple binary operations - # commonly used to define default values in text signatures - left = self.visit(node.left) - right = self.visit(node.right) - if not isinstance(left, ast.Constant) or not isinstance(right, ast.Constant): - raise ValueError - if isinstance(node.op, ast.Add): - return ast.Constant(left.value + right.value) - elif isinstance(node.op, ast.Sub): - return ast.Constant(left.value - right.value) - elif isinstance(node.op, ast.BitOr): - return ast.Constant(left.value | right.value) - raise ValueError - - def p(name_node, default_node, default=empty): - name = parse_name(name_node) - if default_node and default_node is not _empty: - try: - default_node = RewriteSymbolics().visit(default_node) - default = ast.literal_eval(default_node) - except ValueError: - raise ValueError("{!r} builtin has invalid signature".format(obj)) from None - parameters.append(Parameter(name, kind, default=default, annotation=empty)) - - # non-keyword-only parameters - total_non_kw_args = len(f.args.posonlyargs) + len(f.args.args) - required_non_kw_args = total_non_kw_args - len(f.args.defaults) - defaults = itertools.chain(itertools.repeat(None, required_non_kw_args), f.args.defaults) - - kind = Parameter.POSITIONAL_ONLY - for (name, default) in zip(f.args.posonlyargs, defaults): - p(name, default) - - kind = Parameter.POSITIONAL_OR_KEYWORD - for (name, default) in zip(f.args.args, defaults): - p(name, default) - - # *args - if f.args.vararg: - kind = Parameter.VAR_POSITIONAL - p(f.args.vararg, empty) - - # keyword-only arguments - kind = Parameter.KEYWORD_ONLY - for name, default in zip(f.args.kwonlyargs, f.args.kw_defaults): - p(name, default) - - # **kwargs - if f.args.kwarg: - kind = Parameter.VAR_KEYWORD - p(f.args.kwarg, empty) - - if self_parameter is not None: - # Possibly strip the bound argument: - # - We *always* strip first bound argument if - # it is a module. - # - We don't strip first bound argument if - # skip_bound_arg is False. - assert parameters - _self = getattr(obj, '__self__', None) - self_isbound = _self is not None - self_ismodule = ismodule(_self) - if self_isbound and (self_ismodule or skip_bound_arg): - parameters.pop(0) - else: - # for builtins, self parameter is always positional-only! - p = parameters[0].replace(kind=Parameter.POSITIONAL_ONLY) - parameters[0] = p - - return cls(parameters, return_annotation=cls.empty) - - -def _signature_from_builtin(cls, func, skip_bound_arg=True): - """Private helper function to get signature for - builtin callables. - """ - - if not _signature_is_builtin(func): - raise TypeError("{!r} is not a Python builtin " - "function".format(func)) - - s = getattr(func, "__text_signature__", None) - if not s: - raise ValueError("no signature found for builtin {!r}".format(func)) - - return _signature_fromstr(cls, func, s, skip_bound_arg) - - -def _signature_from_function(cls, func, skip_bound_arg=True, - globals=None, locals=None, eval_str=False, - *, annotation_format=Format.VALUE): - """Private helper: constructs Signature for the given python function.""" - - is_duck_function = False - if not isfunction(func): - if _signature_is_functionlike(func): - is_duck_function = True - else: - # If it's not a pure Python function, and not a duck type - # of pure function: - raise TypeError('{!r} is not a Python function'.format(func)) - - s = getattr(func, "__text_signature__", None) - if s: - return _signature_fromstr(cls, func, s, skip_bound_arg) - - Parameter = cls._parameter_cls - - # Parameter information. - func_code = func.__code__ - pos_count = func_code.co_argcount - arg_names = func_code.co_varnames - posonly_count = func_code.co_posonlyargcount - positional = arg_names[:pos_count] - keyword_only_count = func_code.co_kwonlyargcount - keyword_only = arg_names[pos_count:pos_count + keyword_only_count] - annotations = get_annotations(func, globals=globals, locals=locals, eval_str=eval_str, - format=annotation_format) - defaults = func.__defaults__ - kwdefaults = func.__kwdefaults__ - - if defaults: - pos_default_count = len(defaults) - else: - pos_default_count = 0 - - parameters = [] - - non_default_count = pos_count - pos_default_count - posonly_left = posonly_count - - # Non-keyword-only parameters w/o defaults. - for name in positional[:non_default_count]: - kind = _POSITIONAL_ONLY if posonly_left else _POSITIONAL_OR_KEYWORD - annotation = annotations.get(name, _empty) - parameters.append(Parameter(name, annotation=annotation, - kind=kind)) - if posonly_left: - posonly_left -= 1 - - # ... w/ defaults. - for offset, name in enumerate(positional[non_default_count:]): - kind = _POSITIONAL_ONLY if posonly_left else _POSITIONAL_OR_KEYWORD - annotation = annotations.get(name, _empty) - parameters.append(Parameter(name, annotation=annotation, - kind=kind, - default=defaults[offset])) - if posonly_left: - posonly_left -= 1 - - # *args - if func_code.co_flags & CO_VARARGS: - name = arg_names[pos_count + keyword_only_count] - annotation = annotations.get(name, _empty) - parameters.append(Parameter(name, annotation=annotation, - kind=_VAR_POSITIONAL)) - - # Keyword-only parameters. - for name in keyword_only: - default = _empty - if kwdefaults is not None: - default = kwdefaults.get(name, _empty) - - annotation = annotations.get(name, _empty) - parameters.append(Parameter(name, annotation=annotation, - kind=_KEYWORD_ONLY, - default=default)) - # **kwargs - if func_code.co_flags & CO_VARKEYWORDS: - index = pos_count + keyword_only_count - if func_code.co_flags & CO_VARARGS: - index += 1 - - name = arg_names[index] - annotation = annotations.get(name, _empty) - parameters.append(Parameter(name, annotation=annotation, - kind=_VAR_KEYWORD)) - - # Is 'func' is a pure Python function - don't validate the - # parameters list (for correct order and defaults), it should be OK. - return cls(parameters, - return_annotation=annotations.get('return', _empty), - __validate_parameters__=is_duck_function) - - -def _descriptor_get(descriptor, obj): - if isclass(descriptor): - return descriptor - get = getattr(type(descriptor), '__get__', _sentinel) - if get is _sentinel: - return descriptor - return get(descriptor, obj, type(obj)) - - -def _signature_from_callable(obj, *, - follow_wrapper_chains=True, - skip_bound_arg=True, - globals=None, - locals=None, - eval_str=False, - sigcls, - annotation_format=Format.VALUE): - - """Private helper function to get signature for arbitrary - callable objects. - """ - - _get_signature_of = functools.partial(_signature_from_callable, - follow_wrapper_chains=follow_wrapper_chains, - skip_bound_arg=skip_bound_arg, - globals=globals, - locals=locals, - sigcls=sigcls, - eval_str=eval_str, - annotation_format=annotation_format) - - if not callable(obj): - raise TypeError('{!r} is not a callable object'.format(obj)) - - if isinstance(obj, types.MethodType): - # In this case we skip the first parameter of the underlying - # function (usually `self` or `cls`). - sig = _get_signature_of(obj.__func__) - - if skip_bound_arg: - return _signature_bound_method(sig) - else: - return sig - - # Was this function wrapped by a decorator? - if follow_wrapper_chains: - # Unwrap until we find an explicit signature or a MethodType (which will be - # handled explicitly below). - obj = unwrap(obj, stop=(lambda f: hasattr(f, "__signature__") - or isinstance(f, types.MethodType))) - if isinstance(obj, types.MethodType): - # If the unwrapped object is a *method*, we might want to - # skip its first parameter (self). - # See test_signature_wrapped_bound_method for details. - return _get_signature_of(obj) - - try: - sig = obj.__signature__ - except AttributeError: - pass - else: - if sig is not None: - if not isinstance(sig, Signature): - raise TypeError( - 'unexpected object {!r} in __signature__ ' - 'attribute'.format(sig)) - return sig - - try: - partialmethod = obj.__partialmethod__ - except AttributeError: - pass - else: - if isinstance(partialmethod, functools.partialmethod): - # Unbound partialmethod (see functools.partialmethod) - # This means, that we need to calculate the signature - # as if it's a regular partial object, but taking into - # account that the first positional argument - # (usually `self`, or `cls`) will not be passed - # automatically (as for boundmethods) - - wrapped_sig = _get_signature_of(partialmethod.func) - - sig = _signature_get_partial(wrapped_sig, partialmethod, (None,)) - first_wrapped_param = tuple(wrapped_sig.parameters.values())[0] - if first_wrapped_param.kind is Parameter.VAR_POSITIONAL: - # First argument of the wrapped callable is `*args`, as in - # `partialmethod(lambda *args)`. - return sig - else: - sig_params = tuple(sig.parameters.values()) - assert (not sig_params or - first_wrapped_param is not sig_params[0]) - # If there were placeholders set, - # first param is transformed to positional only - if partialmethod.args.count(functools.Placeholder): - first_wrapped_param = first_wrapped_param.replace( - kind=Parameter.POSITIONAL_ONLY) - new_params = (first_wrapped_param,) + sig_params - return sig.replace(parameters=new_params) - - if isinstance(obj, functools.partial): - wrapped_sig = _get_signature_of(obj.func) - return _signature_get_partial(wrapped_sig, obj) - - if isfunction(obj) or _signature_is_functionlike(obj): - # If it's a pure Python function, or an object that is duck type - # of a Python function (Cython functions, for instance), then: - return _signature_from_function(sigcls, obj, - skip_bound_arg=skip_bound_arg, - globals=globals, locals=locals, eval_str=eval_str, - annotation_format=annotation_format) - - if _signature_is_builtin(obj): - return _signature_from_builtin(sigcls, obj, - skip_bound_arg=skip_bound_arg) - - if isinstance(obj, type): - # obj is a class or a metaclass - - # First, let's see if it has an overloaded __call__ defined - # in its metaclass - call = _signature_get_user_defined_method( - type(obj), - '__call__', - follow_wrapper_chains=follow_wrapper_chains, - ) - if call is not None: - return _get_signature_of(call) - - # NOTE: The user-defined method can be a function with a thin wrapper - # around object.__new__ (e.g., generated by `@warnings.deprecated`) - new = _signature_get_user_defined_method( - obj, - '__new__', - follow_wrapper_chains=follow_wrapper_chains, - ) - init = _signature_get_user_defined_method( - obj, - '__init__', - follow_wrapper_chains=follow_wrapper_chains, - ) - - # Go through the MRO and see if any class has user-defined - # pure Python __new__ or __init__ method - for base in obj.__mro__: - # Now we check if the 'obj' class has an own '__new__' method - if new is not None and '__new__' in base.__dict__: - sig = _get_signature_of(new) - if skip_bound_arg: - sig = _signature_bound_method(sig) - return sig - # or an own '__init__' method - elif init is not None and '__init__' in base.__dict__: - return _get_signature_of(init) - - # At this point we know, that `obj` is a class, with no user- - # defined '__init__', '__new__', or class-level '__call__' - - for base in obj.__mro__[:-1]: - # Since '__text_signature__' is implemented as a - # descriptor that extracts text signature from the - # class docstring, if 'obj' is derived from a builtin - # class, its own '__text_signature__' may be 'None'. - # Therefore, we go through the MRO (except the last - # class in there, which is 'object') to find the first - # class with non-empty text signature. - try: - text_sig = base.__text_signature__ - except AttributeError: - pass - else: - if text_sig: - # If 'base' class has a __text_signature__ attribute: - # return a signature based on it - return _signature_fromstr(sigcls, base, text_sig) - - # No '__text_signature__' was found for the 'obj' class. - # Last option is to check if its '__init__' is - # object.__init__ or type.__init__. - if type not in obj.__mro__: - obj_init = obj.__init__ - obj_new = obj.__new__ - if follow_wrapper_chains: - obj_init = unwrap(obj_init) - obj_new = unwrap(obj_new) - # We have a class (not metaclass), but no user-defined - # __init__ or __new__ for it - if obj_init is object.__init__ and obj_new is object.__new__: - # Return a signature of 'object' builtin. - return sigcls.from_callable(object) - else: - raise ValueError( - 'no signature found for builtin type {!r}'.format(obj)) - - else: - # An object with __call__ - call = getattr_static(type(obj), '__call__', None) - if call is not None: - try: - text_sig = obj.__text_signature__ - except AttributeError: - pass - else: - if text_sig: - return _signature_fromstr(sigcls, obj, text_sig) - call = _descriptor_get(call, obj) - return _get_signature_of(call) - - raise ValueError('callable {!r} is not supported by signature'.format(obj)) - - -class _void: - """A private marker - used in Parameter & Signature.""" - - -class _empty: - """Marker object for Signature.empty and Parameter.empty.""" - - -class _ParameterKind(enum.IntEnum): - POSITIONAL_ONLY = 'positional-only' - POSITIONAL_OR_KEYWORD = 'positional or keyword' - VAR_POSITIONAL = 'variadic positional' - KEYWORD_ONLY = 'keyword-only' - VAR_KEYWORD = 'variadic keyword' - - def __new__(cls, description): - value = len(cls.__members__) - member = int.__new__(cls, value) - member._value_ = value - member.description = description - return member - - def __str__(self): - return self.name - -_POSITIONAL_ONLY = _ParameterKind.POSITIONAL_ONLY -_POSITIONAL_OR_KEYWORD = _ParameterKind.POSITIONAL_OR_KEYWORD -_VAR_POSITIONAL = _ParameterKind.VAR_POSITIONAL -_KEYWORD_ONLY = _ParameterKind.KEYWORD_ONLY -_VAR_KEYWORD = _ParameterKind.VAR_KEYWORD - - -class Parameter: - """Represents a parameter in a function signature. - - Has the following public attributes: - - * name : str - The name of the parameter as a string. - * default : object - The default value for the parameter if specified. If the - parameter has no default value, this attribute is set to - `Parameter.empty`. - * annotation - The annotation for the parameter if specified. If the - parameter has no annotation, this attribute is set to - `Parameter.empty`. - * kind - Describes how argument values are bound to the parameter. - Possible values: `Parameter.POSITIONAL_ONLY`, - `Parameter.POSITIONAL_OR_KEYWORD`, `Parameter.VAR_POSITIONAL`, - `Parameter.KEYWORD_ONLY`, `Parameter.VAR_KEYWORD`. - Every value has a `description` attribute describing meaning. - """ - - __slots__ = ('_name', '_kind', '_default', '_annotation') - - POSITIONAL_ONLY = _POSITIONAL_ONLY - POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD - VAR_POSITIONAL = _VAR_POSITIONAL - KEYWORD_ONLY = _KEYWORD_ONLY - VAR_KEYWORD = _VAR_KEYWORD - - empty = _empty - - def __init__(self, name, kind, *, default=_empty, annotation=_empty): - try: - self._kind = _ParameterKind(kind) - except ValueError: - raise ValueError(f'value {kind!r} is not a valid Parameter.kind') - if default is not _empty: - if self._kind in (_VAR_POSITIONAL, _VAR_KEYWORD): - msg = '{} parameters cannot have default values' - msg = msg.format(self._kind.description) - raise ValueError(msg) - self._default = default - self._annotation = annotation - - if name is _empty: - raise ValueError('name is a required attribute for Parameter') - - if not isinstance(name, str): - msg = 'name must be a str, not a {}'.format(type(name).__name__) - raise TypeError(msg) - - if name[0] == '.' and name[1:].isdigit(): - # These are implicit arguments generated by comprehensions. In - # order to provide a friendlier interface to users, we recast - # their name as "implicitN" and treat them as positional-only. - # See issue 19611. - if self._kind != _POSITIONAL_OR_KEYWORD: - msg = ( - 'implicit arguments must be passed as ' - 'positional or keyword arguments, not {}' - ) - msg = msg.format(self._kind.description) - raise ValueError(msg) - self._kind = _POSITIONAL_ONLY - name = 'implicit{}'.format(name[1:]) - - # It's possible for C functions to have a positional-only parameter - # where the name is a keyword, so for compatibility we'll allow it. - is_keyword = iskeyword(name) and self._kind is not _POSITIONAL_ONLY - if is_keyword or not name.isidentifier(): - raise ValueError('{!r} is not a valid parameter name'.format(name)) - - self._name = name - - def __reduce__(self): - return (type(self), - (self._name, self._kind), - {'_default': self._default, - '_annotation': self._annotation}) - - def __setstate__(self, state): - self._default = state['_default'] - self._annotation = state['_annotation'] - - @property - def name(self): - return self._name - - @property - def default(self): - return self._default - - @property - def annotation(self): - return self._annotation - - @property - def kind(self): - return self._kind - - def replace(self, *, name=_void, kind=_void, - annotation=_void, default=_void): - """Creates a customized copy of the Parameter.""" - - if name is _void: - name = self._name - - if kind is _void: - kind = self._kind - - if annotation is _void: - annotation = self._annotation - - if default is _void: - default = self._default - - return type(self)(name, kind, default=default, annotation=annotation) - - def __str__(self): - return self._format() - - def _format(self, *, quote_annotation_strings=True): - kind = self.kind - formatted = self._name - - # Add annotation and default value - if self._annotation is not _empty: - annotation = formatannotation(self._annotation, - quote_annotation_strings=quote_annotation_strings) - formatted = '{}: {}'.format(formatted, annotation) - - if self._default is not _empty: - if self._annotation is not _empty: - formatted = '{} = {}'.format(formatted, repr(self._default)) - else: - formatted = '{}={}'.format(formatted, repr(self._default)) - - if kind == _VAR_POSITIONAL: - formatted = '*' + formatted - elif kind == _VAR_KEYWORD: - formatted = '**' + formatted - - return formatted - - __replace__ = replace - - def __repr__(self): - return '<{} "{}">'.format(self.__class__.__name__, self) - - def __hash__(self): - return hash((self._name, self._kind, self._annotation, self._default)) - - def __eq__(self, other): - if self is other: - return True - if not isinstance(other, Parameter): - return NotImplemented - return (self._name == other._name and - self._kind == other._kind and - self._default == other._default and - self._annotation == other._annotation) - - -class BoundArguments: - """Result of `Signature.bind` call. Holds the mapping of arguments - to the function's parameters. - - Has the following public attributes: - - * arguments : dict - An ordered mutable mapping of parameters' names to arguments' values. - Does not contain arguments' default values. - * signature : Signature - The Signature object that created this instance. - * args : tuple - Tuple of positional arguments values. - * kwargs : dict - Dict of keyword arguments values. - """ - - __slots__ = ('arguments', '_signature', '__weakref__') - - def __init__(self, signature, arguments): - self.arguments = arguments - self._signature = signature - - @property - def signature(self): - return self._signature - - @property - def args(self): - args = [] - for param_name, param in self._signature.parameters.items(): - if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): - break - - try: - arg = self.arguments[param_name] - except KeyError: - # We're done here. Other arguments - # will be mapped in 'BoundArguments.kwargs' - break - else: - if param.kind == _VAR_POSITIONAL: - # *args - args.extend(arg) - else: - # plain argument - args.append(arg) - - return tuple(args) - - @property - def kwargs(self): - kwargs = {} - kwargs_started = False - for param_name, param in self._signature.parameters.items(): - if not kwargs_started: - if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): - kwargs_started = True - else: - if param_name not in self.arguments: - kwargs_started = True - continue - - if not kwargs_started: - continue - - try: - arg = self.arguments[param_name] - except KeyError: - pass - else: - if param.kind == _VAR_KEYWORD: - # **kwargs - kwargs.update(arg) - else: - # plain keyword argument - kwargs[param_name] = arg - - return kwargs - - def apply_defaults(self): - """Set default values for missing arguments. - - For variable-positional arguments (*args) the default is an - empty tuple. - - For variable-keyword arguments (**kwargs) the default is an - empty dict. - """ - arguments = self.arguments - new_arguments = [] - for name, param in self._signature.parameters.items(): - try: - new_arguments.append((name, arguments[name])) - except KeyError: - if param.default is not _empty: - val = param.default - elif param.kind is _VAR_POSITIONAL: - val = () - elif param.kind is _VAR_KEYWORD: - val = {} - else: - # This BoundArguments was likely produced by - # Signature.bind_partial(). - continue - new_arguments.append((name, val)) - self.arguments = dict(new_arguments) - - def __eq__(self, other): - if self is other: - return True - if not isinstance(other, BoundArguments): - return NotImplemented - return (self.signature == other.signature and - self.arguments == other.arguments) - - def __setstate__(self, state): - self._signature = state['_signature'] - self.arguments = state['arguments'] - - def __getstate__(self): - return {'_signature': self._signature, 'arguments': self.arguments} - - def __repr__(self): - args = [] - for arg, value in self.arguments.items(): - args.append('{}={!r}'.format(arg, value)) - return '<{} ({})>'.format(self.__class__.__name__, ', '.join(args)) - - -class Signature: - """A Signature object represents the overall signature of a function. - It stores a Parameter object for each parameter accepted by the - function, as well as information specific to the function itself. - - A Signature object has the following public attributes and methods: - - * parameters : OrderedDict - An ordered mapping of parameters' names to the corresponding - Parameter objects (keyword-only arguments are in the same order - as listed in `code.co_varnames`). - * return_annotation : object - The annotation for the return type of the function if specified. - If the function has no annotation for its return type, this - attribute is set to `Signature.empty`. - * bind(*args, **kwargs) -> BoundArguments - Creates a mapping from positional and keyword arguments to - parameters. - * bind_partial(*args, **kwargs) -> BoundArguments - Creates a partial mapping from positional and keyword arguments - to parameters (simulating 'functools.partial' behavior.) - """ - - __slots__ = ('_return_annotation', '_parameters') - - _parameter_cls = Parameter - _bound_arguments_cls = BoundArguments - - empty = _empty - - def __init__(self, parameters=None, *, return_annotation=_empty, - __validate_parameters__=True): - """Constructs Signature from the given list of Parameter - objects and 'return_annotation'. All arguments are optional. - """ - - if parameters is None: - params = OrderedDict() - else: - if __validate_parameters__: - params = OrderedDict() - top_kind = _POSITIONAL_ONLY - seen_default = False - seen_var_parameters = set() - - for param in parameters: - kind = param.kind - name = param.name - - if kind in (_VAR_POSITIONAL, _VAR_KEYWORD): - if kind in seen_var_parameters: - msg = f'more than one {kind.description} parameter' - raise ValueError(msg) - - seen_var_parameters.add(kind) - - if kind < top_kind: - msg = ( - 'wrong parameter order: {} parameter before {} ' - 'parameter' - ) - msg = msg.format(top_kind.description, - kind.description) - raise ValueError(msg) - elif kind > top_kind: - top_kind = kind - - if kind in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD): - if param.default is _empty: - if seen_default: - # No default for this parameter, but the - # previous parameter of had a default - msg = 'non-default argument follows default ' \ - 'argument' - raise ValueError(msg) - else: - # There is a default for this parameter. - seen_default = True - - if name in params: - msg = 'duplicate parameter name: {!r}'.format(name) - raise ValueError(msg) - - params[name] = param - else: - params = OrderedDict((param.name, param) for param in parameters) - - self._parameters = types.MappingProxyType(params) - self._return_annotation = return_annotation - - @classmethod - def from_callable(cls, obj, *, - follow_wrapped=True, globals=None, locals=None, eval_str=False, - annotation_format=Format.VALUE): - """Constructs Signature for the given callable object.""" - return _signature_from_callable(obj, sigcls=cls, - follow_wrapper_chains=follow_wrapped, - globals=globals, locals=locals, eval_str=eval_str, - annotation_format=annotation_format) - - @property - def parameters(self): - return self._parameters - - @property - def return_annotation(self): - return self._return_annotation - - def replace(self, *, parameters=_void, return_annotation=_void): - """Creates a customized copy of the Signature. - Pass 'parameters' and/or 'return_annotation' arguments - to override them in the new copy. - """ - - if parameters is _void: - parameters = self.parameters.values() - - if return_annotation is _void: - return_annotation = self._return_annotation - - return type(self)(parameters, - return_annotation=return_annotation) - - __replace__ = replace - - def _hash_basis(self): - params = tuple(param for param in self.parameters.values() - if param.kind != _KEYWORD_ONLY) - - kwo_params = {param.name: param for param in self.parameters.values() - if param.kind == _KEYWORD_ONLY} - - return params, kwo_params, self.return_annotation - - def __hash__(self): - params, kwo_params, return_annotation = self._hash_basis() - kwo_params = frozenset(kwo_params.values()) - return hash((params, kwo_params, return_annotation)) - - def __eq__(self, other): - if self is other: - return True - if not isinstance(other, Signature): - return NotImplemented - return self._hash_basis() == other._hash_basis() - - def _bind(self, args, kwargs, *, partial=False): - """Private method. Don't use directly.""" - - arguments = {} - - parameters = iter(self.parameters.values()) - parameters_ex = () - arg_vals = iter(args) - - pos_only_param_in_kwargs = [] - - while True: - # Let's iterate through the positional arguments and corresponding - # parameters - try: - arg_val = next(arg_vals) - except StopIteration: - # No more positional arguments - try: - param = next(parameters) - except StopIteration: - # No more parameters. That's it. Just need to check that - # we have no `kwargs` after this while loop - break - else: - if param.kind == _VAR_POSITIONAL: - # That's OK, just empty *args. Let's start parsing - # kwargs - break - elif param.name in kwargs: - if param.kind == _POSITIONAL_ONLY: - if param.default is _empty: - msg = f'missing a required positional-only argument: {param.name!r}' - raise TypeError(msg) - # Raise a TypeError once we are sure there is no - # **kwargs param later. - pos_only_param_in_kwargs.append(param) - continue - parameters_ex = (param,) - break - elif (param.kind == _VAR_KEYWORD or - param.default is not _empty): - # That's fine too - we have a default value for this - # parameter. So, lets start parsing `kwargs`, starting - # with the current parameter - parameters_ex = (param,) - break - else: - # No default, not VAR_KEYWORD, not VAR_POSITIONAL, - # not in `kwargs` - if partial: - parameters_ex = (param,) - break - else: - if param.kind == _KEYWORD_ONLY: - argtype = ' keyword-only' - else: - argtype = '' - msg = 'missing a required{argtype} argument: {arg!r}' - msg = msg.format(arg=param.name, argtype=argtype) - raise TypeError(msg) from None - else: - # We have a positional argument to process - try: - param = next(parameters) - except StopIteration: - raise TypeError('too many positional arguments') from None - else: - if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): - # Looks like we have no parameter for this positional - # argument - raise TypeError( - 'too many positional arguments') from None - - if param.kind == _VAR_POSITIONAL: - # We have an '*args'-like argument, let's fill it with - # all positional arguments we have left and move on to - # the next phase - values = [arg_val] - values.extend(arg_vals) - arguments[param.name] = tuple(values) - break - - if param.name in kwargs and param.kind != _POSITIONAL_ONLY: - raise TypeError( - 'multiple values for argument {arg!r}'.format( - arg=param.name)) from None - - arguments[param.name] = arg_val - - # Now, we iterate through the remaining parameters to process - # keyword arguments - kwargs_param = None - for param in itertools.chain(parameters_ex, parameters): - if param.kind == _VAR_KEYWORD: - # Memorize that we have a '**kwargs'-like parameter - kwargs_param = param - continue - - if param.kind == _VAR_POSITIONAL: - # Named arguments don't refer to '*args'-like parameters. - # We only arrive here if the positional arguments ended - # before reaching the last parameter before *args. - continue - - param_name = param.name - try: - arg_val = kwargs.pop(param_name) - except KeyError: - # We have no value for this parameter. It's fine though, - # if it has a default value, or it is an '*args'-like - # parameter, left alone by the processing of positional - # arguments. - if (not partial and param.kind != _VAR_POSITIONAL and - param.default is _empty): - raise TypeError('missing a required argument: {arg!r}'. \ - format(arg=param_name)) from None - - else: - arguments[param_name] = arg_val - - if kwargs: - if kwargs_param is not None: - # Process our '**kwargs'-like parameter - arguments[kwargs_param.name] = kwargs - elif pos_only_param_in_kwargs: - raise TypeError( - 'got some positional-only arguments passed as ' - 'keyword arguments: {arg!r}'.format( - arg=', '.join( - param.name - for param in pos_only_param_in_kwargs - ), - ), - ) - else: - raise TypeError( - 'got an unexpected keyword argument {arg!r}'.format( - arg=next(iter(kwargs)))) - - return self._bound_arguments_cls(self, arguments) - - def bind(self, /, *args, **kwargs): - """Get a BoundArguments object, that maps the passed `args` - and `kwargs` to the function's signature. Raises `TypeError` - if the passed arguments can not be bound. - """ - return self._bind(args, kwargs) - - def bind_partial(self, /, *args, **kwargs): - """Get a BoundArguments object, that partially maps the - passed `args` and `kwargs` to the function's signature. - Raises `TypeError` if the passed arguments can not be bound. - """ - return self._bind(args, kwargs, partial=True) - - def __reduce__(self): - return (type(self), - (tuple(self._parameters.values()),), - {'_return_annotation': self._return_annotation}) - - def __setstate__(self, state): - self._return_annotation = state['_return_annotation'] - - def __repr__(self): - return '<{} {}>'.format(self.__class__.__name__, self) - - def __str__(self): - return self.format() - - def format(self, *, max_width=None, quote_annotation_strings=True): - """Create a string representation of the Signature object. - - If *max_width* integer is passed, - signature will try to fit into the *max_width*. - If signature is longer than *max_width*, - all parameters will be on separate lines. - - If *quote_annotation_strings* is False, annotations - in the signature are displayed without opening and closing quotation - marks. This is useful when the signature was created with the - STRING format or when ``from __future__ import annotations`` was used. - """ - result = [] - render_pos_only_separator = False - render_kw_only_separator = True - for param in self.parameters.values(): - formatted = param._format(quote_annotation_strings=quote_annotation_strings) - - kind = param.kind - - if kind == _POSITIONAL_ONLY: - render_pos_only_separator = True - elif render_pos_only_separator: - # It's not a positional-only parameter, and the flag - # is set to 'True' (there were pos-only params before.) - result.append('/') - render_pos_only_separator = False - - if kind == _VAR_POSITIONAL: - # OK, we have an '*args'-like parameter, so we won't need - # a '*' to separate keyword-only arguments - render_kw_only_separator = False - elif kind == _KEYWORD_ONLY and render_kw_only_separator: - # We have a keyword-only parameter to render and we haven't - # rendered an '*args'-like parameter before, so add a '*' - # separator to the parameters list ("foo(arg1, *, arg2)" case) - result.append('*') - # This condition should be only triggered once, so - # reset the flag - render_kw_only_separator = False - - result.append(formatted) - - if render_pos_only_separator: - # There were only positional-only parameters, hence the - # flag was not reset to 'False' - result.append('/') - - rendered = '({})'.format(', '.join(result)) - if max_width is not None and len(rendered) > max_width: - rendered = '(\n {}\n)'.format(',\n '.join(result)) - - if self.return_annotation is not _empty: - anno = formatannotation(self.return_annotation, - quote_annotation_strings=quote_annotation_strings) - rendered += ' -> {}'.format(anno) - - return rendered - - -def signature(obj, *, follow_wrapped=True, globals=None, locals=None, eval_str=False, - annotation_format=Format.VALUE): - """Get a signature object for the passed callable.""" - return Signature.from_callable(obj, follow_wrapped=follow_wrapped, - globals=globals, locals=locals, eval_str=eval_str, - annotation_format=annotation_format) - - -class BufferFlags(enum.IntFlag): - SIMPLE = 0x0 - WRITABLE = 0x1 - FORMAT = 0x4 - ND = 0x8 - STRIDES = 0x10 | ND - C_CONTIGUOUS = 0x20 | STRIDES - F_CONTIGUOUS = 0x40 | STRIDES - ANY_CONTIGUOUS = 0x80 | STRIDES - INDIRECT = 0x100 | STRIDES - CONTIG = ND | WRITABLE - CONTIG_RO = ND - STRIDED = STRIDES | WRITABLE - STRIDED_RO = STRIDES - RECORDS = STRIDES | WRITABLE | FORMAT - RECORDS_RO = STRIDES | FORMAT - FULL = INDIRECT | WRITABLE | FORMAT - FULL_RO = INDIRECT | FORMAT - READ = 0x100 - WRITE = 0x200 - - -def _main(): - """ Logic for inspecting an object given at command line """ - import argparse - import importlib - - parser = argparse.ArgumentParser(color=True) - parser.add_argument( - 'object', - help="The object to be analysed. " - "It supports the 'module:qualname' syntax") - parser.add_argument( - '-d', '--details', action='store_true', - help='Display info about the module rather than its source code') - - args = parser.parse_args() - - target = args.object - mod_name, has_attrs, attrs = target.partition(":") - try: - obj = module = importlib.import_module(mod_name) - except Exception as exc: - msg = "Failed to import {} ({}: {})".format(mod_name, - type(exc).__name__, - exc) - print(msg, file=sys.stderr) - sys.exit(2) - - if has_attrs: - parts = attrs.split(".") - obj = module - for part in parts: - obj = getattr(obj, part) - - if module.__name__ in sys.builtin_module_names: - print("Can't get info for builtin modules.", file=sys.stderr) - sys.exit(1) - - if args.details: - print('Target: {}'.format(target)) - print('Origin: {}'.format(getsourcefile(module))) - print('Cached: {}'.format(module.__cached__)) - if obj is module: - print('Loader: {}'.format(repr(module.__loader__))) - if hasattr(module, '__path__'): - print('Submodule search path: {}'.format(module.__path__)) - else: - try: - __, lineno = findsource(obj) - except Exception: - pass - else: - print('Line: {}'.format(lineno)) - - print('\n') - else: - print(getsource(obj)) - - -if __name__ == "__main__": - _main() diff --git a/Python314_4_x86_Template/Lib/io.py b/Python314_4_x86_Template/Lib/io.py deleted file mode 100644 index 63ffadb1d..000000000 --- a/Python314_4_x86_Template/Lib/io.py +++ /dev/null @@ -1,150 +0,0 @@ -"""The io module provides the Python interfaces to stream handling. The -builtin open function is defined in this module. - -At the top of the I/O hierarchy is the abstract base class IOBase. It -defines the basic interface to a stream. Note, however, that there is no -separation between reading and writing to streams; implementations are -allowed to raise an OSError if they do not support a given operation. - -Extending IOBase is RawIOBase which deals simply with the reading and -writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide -an interface to OS files. - -BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its -subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer -streams that are readable, writable, and both respectively. -BufferedRandom provides a buffered interface to random access -streams. BytesIO is a simple stream of in-memory bytes. - -Another IOBase subclass, TextIOBase, deals with the encoding and decoding -of streams into text. TextIOWrapper, which extends it, is a buffered text -interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO -is an in-memory stream for text. - -Argument names are not part of the specification, and only the arguments -of open() are intended to be used as keyword arguments. - -data: - -DEFAULT_BUFFER_SIZE - - An int containing the default buffer size used by the module's buffered - I/O classes. open() uses the file's blksize (as obtained by os.stat) if - possible. -""" -# New I/O library conforming to PEP 3116. - -__author__ = ("Guido van Rossum <guido@python.org>, " - "Mike Verdone <mike.verdone@gmail.com>, " - "Mark Russell <mark.russell@zen.co.uk>, " - "Antoine Pitrou <solipsis@pitrou.net>, " - "Amaury Forgeot d'Arc <amauryfa@gmail.com>, " - "Benjamin Peterson <benjamin@python.org>") - -__all__ = ["BlockingIOError", "open", "open_code", "IOBase", "RawIOBase", - "FileIO", "BytesIO", "StringIO", "BufferedIOBase", - "BufferedReader", "BufferedWriter", "BufferedRWPair", - "BufferedRandom", "TextIOBase", "TextIOWrapper", - "UnsupportedOperation", "SEEK_SET", "SEEK_CUR", "SEEK_END", - "DEFAULT_BUFFER_SIZE", "text_encoding", "IncrementalNewlineDecoder", - "Reader", "Writer"] - - -import _io -import abc - -from _collections_abc import _check_methods -from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation, - open, open_code, FileIO, BytesIO, StringIO, BufferedReader, - BufferedWriter, BufferedRWPair, BufferedRandom, - IncrementalNewlineDecoder, text_encoding, TextIOWrapper) - - -# for seek() -SEEK_SET = 0 -SEEK_CUR = 1 -SEEK_END = 2 - -# Declaring ABCs in C is tricky so we do it here. -# Method descriptions and default implementations are inherited from the C -# version however. -class IOBase(_io._IOBase, metaclass=abc.ABCMeta): - __doc__ = _io._IOBase.__doc__ - -class RawIOBase(_io._RawIOBase, IOBase): - __doc__ = _io._RawIOBase.__doc__ - -class BufferedIOBase(_io._BufferedIOBase, IOBase): - __doc__ = _io._BufferedIOBase.__doc__ - -class TextIOBase(_io._TextIOBase, IOBase): - __doc__ = _io._TextIOBase.__doc__ - -RawIOBase.register(FileIO) - -for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom, - BufferedRWPair): - BufferedIOBase.register(klass) - -for klass in (StringIO, TextIOWrapper): - TextIOBase.register(klass) -del klass - -try: - from _io import _WindowsConsoleIO -except ImportError: - pass -else: - RawIOBase.register(_WindowsConsoleIO) - -# -# Static Typing Support -# - -GenericAlias = type(list[int]) - - -class Reader(metaclass=abc.ABCMeta): - """Protocol for simple I/O reader instances. - - This protocol only supports blocking I/O. - """ - - __slots__ = () - - @abc.abstractmethod - def read(self, size=..., /): - """Read data from the input stream and return it. - - If *size* is specified, at most *size* items (bytes/characters) will be - read. - """ - - @classmethod - def __subclasshook__(cls, C): - if cls is Reader: - return _check_methods(C, "read") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -class Writer(metaclass=abc.ABCMeta): - """Protocol for simple I/O writer instances. - - This protocol only supports blocking I/O. - """ - - __slots__ = () - - @abc.abstractmethod - def write(self, data, /): - """Write *data* to the output stream and return the number of items written.""" - - @classmethod - def __subclasshook__(cls, C): - if cls is Writer: - return _check_methods(C, "write") - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) diff --git a/Python314_4_x86_Template/Lib/ipaddress.py b/Python314_4_x86_Template/Lib/ipaddress.py deleted file mode 100644 index ca732e4f2..000000000 --- a/Python314_4_x86_Template/Lib/ipaddress.py +++ /dev/null @@ -1,2417 +0,0 @@ -# Copyright 2007 Google Inc. -# Licensed to PSF under a Contributor Agreement. - -"""A fast, lightweight IPv4/IPv6 manipulation library in Python. - -This library is used to create/poke/manipulate IPv4 and IPv6 addresses -and networks. - -""" - -__version__ = '1.0' - - -import functools - -IPV4LENGTH = 32 -IPV6LENGTH = 128 - - -class AddressValueError(ValueError): - """A Value Error related to the address.""" - - -class NetmaskValueError(ValueError): - """A Value Error related to the netmask.""" - - -def ip_address(address): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP address. Either IPv4 or - IPv6 addresses may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Address or IPv6Address object. - - Raises: - ValueError: if the *address* passed isn't either a v4 or a v6 - address - - """ - try: - return IPv4Address(address) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Address(address) - except (AddressValueError, NetmaskValueError): - pass - - raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 address') - - -def ip_network(address, strict=True): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP network. Either IPv4 or - IPv6 networks may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Network or IPv6Network object. - - Raises: - ValueError: if the string passed isn't either a v4 or a v6 - address. Or if the network has host bits set. - - """ - try: - return IPv4Network(address, strict) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Network(address, strict) - except (AddressValueError, NetmaskValueError): - pass - - raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 network') - - -def ip_interface(address): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP address. Either IPv4 or - IPv6 addresses may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Interface or IPv6Interface object. - - Raises: - ValueError: if the string passed isn't either a v4 or a v6 - address. - - Notes: - The IPv?Interface classes describe an Address on a particular - Network, so they're basically a combination of both the Address - and Network classes. - - """ - try: - return IPv4Interface(address) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Interface(address) - except (AddressValueError, NetmaskValueError): - pass - - raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 interface') - - -def v4_int_to_packed(address): - """Represent an address as 4 packed bytes in network (big-endian) order. - - Args: - address: An integer representation of an IPv4 IP address. - - Returns: - The integer address packed as 4 bytes in network (big-endian) order. - - Raises: - ValueError: If the integer is negative or too large to be an - IPv4 IP address. - - """ - try: - return address.to_bytes(4) # big endian - except OverflowError: - raise ValueError("Address negative or too large for IPv4") - - -def v6_int_to_packed(address): - """Represent an address as 16 packed bytes in network (big-endian) order. - - Args: - address: An integer representation of an IPv6 IP address. - - Returns: - The integer address packed as 16 bytes in network (big-endian) order. - - """ - try: - return address.to_bytes(16) # big endian - except OverflowError: - raise ValueError("Address negative or too large for IPv6") - - -def _split_optional_netmask(address): - """Helper to split the netmask and raise AddressValueError if needed""" - addr = str(address).split('/') - if len(addr) > 2: - raise AddressValueError(f"Only one '/' permitted in {address!r}") - return addr - - -def _find_address_range(addresses): - """Find a sequence of sorted deduplicated IPv#Address. - - Args: - addresses: a list of IPv#Address objects. - - Yields: - A tuple containing the first and last IP addresses in the sequence. - - """ - it = iter(addresses) - first = last = next(it) - for ip in it: - if ip._ip != last._ip + 1: - yield first, last - first = ip - last = ip - yield first, last - - -def _count_righthand_zero_bits(number, bits): - """Count the number of zero bits on the right hand side. - - Args: - number: an integer. - bits: maximum number of bits to count. - - Returns: - The number of zero bits on the right hand side of the number. - - """ - if number == 0: - return bits - return min(bits, (~number & (number-1)).bit_length()) - - -def summarize_address_range(first, last): - """Summarize a network range given the first and last IP addresses. - - Example: - >>> list(summarize_address_range(IPv4Address('192.0.2.0'), - ... IPv4Address('192.0.2.130'))) - ... #doctest: +NORMALIZE_WHITESPACE - [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), - IPv4Network('192.0.2.130/32')] - - Args: - first: the first IPv4Address or IPv6Address in the range. - last: the last IPv4Address or IPv6Address in the range. - - Returns: - An iterator of the summarized IPv(4|6) network objects. - - Raise: - TypeError: - If the first and last objects are not IP addresses. - If the first and last objects are not the same version. - ValueError: - If the last object is not greater than the first. - If the version of the first address is not 4 or 6. - - """ - if (not (isinstance(first, _BaseAddress) and - isinstance(last, _BaseAddress))): - raise TypeError('first and last must be IP addresses, not networks') - if first.version != last.version: - raise TypeError("%s and %s are not of the same version" % ( - first, last)) - if first > last: - raise ValueError('last IP address must be greater than first') - - if first.version == 4: - ip = IPv4Network - elif first.version == 6: - ip = IPv6Network - else: - raise ValueError('unknown IP version') - - ip_bits = first.max_prefixlen - first_int = first._ip - last_int = last._ip - while first_int <= last_int: - nbits = min(_count_righthand_zero_bits(first_int, ip_bits), - (last_int - first_int + 1).bit_length() - 1) - net = ip((first_int, ip_bits - nbits)) - yield net - first_int += 1 << nbits - if first_int - 1 == ip._ALL_ONES: - break - - -def _collapse_addresses_internal(addresses): - """Loops through the addresses, collapsing concurrent netblocks. - - Example: - - ip1 = IPv4Network('192.0.2.0/26') - ip2 = IPv4Network('192.0.2.64/26') - ip3 = IPv4Network('192.0.2.128/26') - ip4 = IPv4Network('192.0.2.192/26') - - _collapse_addresses_internal([ip1, ip2, ip3, ip4]) -> - [IPv4Network('192.0.2.0/24')] - - This shouldn't be called directly; it is called via - collapse_addresses([]). - - Args: - addresses: A list of IPv4Network's or IPv6Network's - - Returns: - A list of IPv4Network's or IPv6Network's depending on what we were - passed. - - """ - # First merge - to_merge = list(addresses) - subnets = {} - while to_merge: - net = to_merge.pop() - supernet = net.supernet() - existing = subnets.get(supernet) - if existing is None: - subnets[supernet] = net - elif existing != net: - # Merge consecutive subnets - del subnets[supernet] - to_merge.append(supernet) - # Then iterate over resulting networks, skipping subsumed subnets - last = None - for net in sorted(subnets.values()): - if last is not None: - # Since they are sorted, last.network_address <= net.network_address - # is a given. - if last.broadcast_address >= net.broadcast_address: - continue - yield net - last = net - - -def collapse_addresses(addresses): - """Collapse a list of IP objects. - - Example: - collapse_addresses([IPv4Network('192.0.2.0/25'), - IPv4Network('192.0.2.128/25')]) -> - [IPv4Network('192.0.2.0/24')] - - Args: - addresses: An iterable of IPv4Network or IPv6Network objects. - - Returns: - An iterator of the collapsed IPv(4|6)Network objects. - - Raises: - TypeError: If passed a list of mixed version objects. - - """ - addrs = [] - ips = [] - nets = [] - - # split IP addresses and networks - for ip in addresses: - if isinstance(ip, _BaseAddress): - if ips and ips[-1].version != ip.version: - raise TypeError("%s and %s are not of the same version" % ( - ip, ips[-1])) - ips.append(ip) - elif ip._prefixlen == ip.max_prefixlen: - if ips and ips[-1].version != ip.version: - raise TypeError("%s and %s are not of the same version" % ( - ip, ips[-1])) - try: - ips.append(ip.ip) - except AttributeError: - ips.append(ip.network_address) - else: - if nets and nets[-1].version != ip.version: - raise TypeError("%s and %s are not of the same version" % ( - ip, nets[-1])) - nets.append(ip) - - # sort and dedup - ips = sorted(set(ips)) - - # find consecutive address ranges in the sorted sequence and summarize them - if ips: - for first, last in _find_address_range(ips): - addrs.extend(summarize_address_range(first, last)) - - return _collapse_addresses_internal(addrs + nets) - - -def get_mixed_type_key(obj): - """Return a key suitable for sorting between networks and addresses. - - Address and Network objects are not sortable by default; they're - fundamentally different so the expression - - IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24') - - doesn't make any sense. There are some times however, where you may wish - to have ipaddress sort these for you anyway. If you need to do this, you - can use this function as the key= argument to sorted(). - - Args: - obj: either a Network or Address object. - Returns: - appropriate key. - - """ - if isinstance(obj, _BaseNetwork): - return obj._get_networks_key() - elif isinstance(obj, _BaseAddress): - return obj._get_address_key() - return NotImplemented - - -class _IPAddressBase: - - """The mother class.""" - - __slots__ = () - - @property - def exploded(self): - """Return the longhand version of the IP address as a string.""" - return self._explode_shorthand_ip_string() - - @property - def compressed(self): - """Return the shorthand version of the IP address as a string.""" - return str(self) - - @property - def reverse_pointer(self): - """The name of the reverse DNS pointer for the IP address, e.g.: - >>> ipaddress.ip_address("127.0.0.1").reverse_pointer - '1.0.0.127.in-addr.arpa' - >>> ipaddress.ip_address("2001:db8::1").reverse_pointer - '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa' - - """ - return self._reverse_pointer() - - def _check_int_address(self, address): - if address < 0: - msg = "%d (< 0) is not permitted as an IPv%d address" - raise AddressValueError(msg % (address, self.version)) - if address > self._ALL_ONES: - msg = "%d (>= 2**%d) is not permitted as an IPv%d address" - raise AddressValueError(msg % (address, self.max_prefixlen, - self.version)) - - def _check_packed_address(self, address, expected_len): - address_len = len(address) - if address_len != expected_len: - msg = "%r (len %d != %d) is not permitted as an IPv%d address" - raise AddressValueError(msg % (address, address_len, - expected_len, self.version)) - - @classmethod - def _ip_int_from_prefix(cls, prefixlen): - """Turn the prefix length into a bitwise netmask - - Args: - prefixlen: An integer, the prefix length. - - Returns: - An integer. - - """ - return cls._ALL_ONES ^ (cls._ALL_ONES >> prefixlen) - - @classmethod - def _prefix_from_ip_int(cls, ip_int): - """Return prefix length from the bitwise netmask. - - Args: - ip_int: An integer, the netmask in expanded bitwise format - - Returns: - An integer, the prefix length. - - Raises: - ValueError: If the input intermingles zeroes & ones - """ - trailing_zeroes = _count_righthand_zero_bits(ip_int, - cls.max_prefixlen) - prefixlen = cls.max_prefixlen - trailing_zeroes - leading_ones = ip_int >> trailing_zeroes - all_ones = (1 << prefixlen) - 1 - if leading_ones != all_ones: - byteslen = cls.max_prefixlen // 8 - details = ip_int.to_bytes(byteslen, 'big') - msg = 'Netmask pattern %r mixes zeroes & ones' - raise ValueError(msg % details) - return prefixlen - - @classmethod - def _report_invalid_netmask(cls, netmask_str): - msg = '%r is not a valid netmask' % netmask_str - raise NetmaskValueError(msg) from None - - @classmethod - def _prefix_from_prefix_string(cls, prefixlen_str): - """Return prefix length from a numeric string - - Args: - prefixlen_str: The string to be converted - - Returns: - An integer, the prefix length. - - Raises: - NetmaskValueError: If the input is not a valid netmask - """ - # int allows a leading +/- as well as surrounding whitespace, - # so we ensure that isn't the case - if not (prefixlen_str.isascii() and prefixlen_str.isdigit()): - cls._report_invalid_netmask(prefixlen_str) - try: - prefixlen = int(prefixlen_str) - except ValueError: - cls._report_invalid_netmask(prefixlen_str) - if not (0 <= prefixlen <= cls.max_prefixlen): - cls._report_invalid_netmask(prefixlen_str) - return prefixlen - - @classmethod - def _prefix_from_ip_string(cls, ip_str): - """Turn a netmask/hostmask string into a prefix length - - Args: - ip_str: The netmask/hostmask to be converted - - Returns: - An integer, the prefix length. - - Raises: - NetmaskValueError: If the input is not a valid netmask/hostmask - """ - # Parse the netmask/hostmask like an IP address. - try: - ip_int = cls._ip_int_from_string(ip_str) - except AddressValueError: - cls._report_invalid_netmask(ip_str) - - # Try matching a netmask (this would be /1*0*/ as a bitwise regexp). - # Note that the two ambiguous cases (all-ones and all-zeroes) are - # treated as netmasks. - try: - return cls._prefix_from_ip_int(ip_int) - except ValueError: - pass - - # Invert the bits, and try matching a /0+1+/ hostmask instead. - ip_int ^= cls._ALL_ONES - try: - return cls._prefix_from_ip_int(ip_int) - except ValueError: - cls._report_invalid_netmask(ip_str) - - @classmethod - def _split_addr_prefix(cls, address): - """Helper function to parse address of Network/Interface. - - Arg: - address: Argument of Network/Interface. - - Returns: - (addr, prefix) tuple. - """ - # a packed address or integer - if isinstance(address, (bytes, int)): - return address, cls.max_prefixlen - - if not isinstance(address, tuple): - # Assume input argument to be string or any object representation - # which converts into a formatted IP prefix string. - address = _split_optional_netmask(address) - - # Constructing from a tuple (addr, [mask]) - if len(address) > 1: - return address - return address[0], cls.max_prefixlen - - def __reduce__(self): - return self.__class__, (str(self),) - - -_address_fmt_re = None - -@functools.total_ordering -class _BaseAddress(_IPAddressBase): - - """A generic IP object. - - This IP class contains the version independent methods which are - used by single IP addresses. - """ - - __slots__ = () - - def __int__(self): - return self._ip - - def __eq__(self, other): - try: - return (self._ip == other._ip - and self.version == other.version) - except AttributeError: - return NotImplemented - - def __lt__(self, other): - if not isinstance(other, _BaseAddress): - return NotImplemented - if self.version != other.version: - raise TypeError('%s and %s are not of the same version' % ( - self, other)) - if self._ip != other._ip: - return self._ip < other._ip - return False - - # Shorthand for Integer addition and subtraction. This is not - # meant to ever support addition/subtraction of addresses. - def __add__(self, other): - if not isinstance(other, int): - return NotImplemented - return self.__class__(int(self) + other) - - def __sub__(self, other): - if not isinstance(other, int): - return NotImplemented - return self.__class__(int(self) - other) - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, str(self)) - - def __str__(self): - return str(self._string_from_ip_int(self._ip)) - - def __hash__(self): - return hash(hex(int(self._ip))) - - def _get_address_key(self): - return (self.version, self) - - def __reduce__(self): - return self.__class__, (self._ip,) - - def __format__(self, fmt): - """Returns an IP address as a formatted string. - - Supported presentation types are: - 's': returns the IP address as a string (default) - 'b': converts to binary and returns a zero-padded string - 'X' or 'x': converts to upper- or lower-case hex and returns a zero-padded string - 'n': the same as 'b' for IPv4 and 'x' for IPv6 - - For binary and hex presentation types, the alternate form specifier - '#' and the grouping option '_' are supported. - """ - - # Support string formatting - if not fmt or fmt[-1] == 's': - return format(str(self), fmt) - - # From here on down, support for 'bnXx' - global _address_fmt_re - if _address_fmt_re is None: - import re - _address_fmt_re = re.compile('(#?)(_?)([xbnX])') - - m = _address_fmt_re.fullmatch(fmt) - if not m: - return super().__format__(fmt) - - alternate, grouping, fmt_base = m.groups() - - # Set some defaults - if fmt_base == 'n': - if self.version == 4: - fmt_base = 'b' # Binary is default for ipv4 - else: - fmt_base = 'x' # Hex is default for ipv6 - - if fmt_base == 'b': - padlen = self.max_prefixlen - else: - padlen = self.max_prefixlen // 4 - - if grouping: - padlen += padlen // 4 - 1 - - if alternate: - padlen += 2 # 0b or 0x - - return format(int(self), f'{alternate}0{padlen}{grouping}{fmt_base}') - - -@functools.total_ordering -class _BaseNetwork(_IPAddressBase): - """A generic IP network object. - - This IP class contains the version independent methods which are - used by networks. - """ - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, str(self)) - - def __str__(self): - return '%s/%d' % (self.network_address, self.prefixlen) - - def hosts(self): - """Generate Iterator over usable hosts in a network. - - This is like __iter__ except it doesn't return the network - or broadcast addresses. - - """ - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in range(network + 1, broadcast): - yield self._address_class(x) - - def __iter__(self): - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in range(network, broadcast + 1): - yield self._address_class(x) - - def __getitem__(self, n): - network = int(self.network_address) - broadcast = int(self.broadcast_address) - if n >= 0: - if network + n > broadcast: - raise IndexError('address out of range') - return self._address_class(network + n) - else: - n += 1 - if broadcast + n < network: - raise IndexError('address out of range') - return self._address_class(broadcast + n) - - def __lt__(self, other): - if not isinstance(other, _BaseNetwork): - return NotImplemented - if self.version != other.version: - raise TypeError('%s and %s are not of the same version' % ( - self, other)) - if self.network_address != other.network_address: - return self.network_address < other.network_address - if self.netmask != other.netmask: - return self.netmask < other.netmask - return False - - def __eq__(self, other): - try: - return (self.version == other.version and - self.network_address == other.network_address and - int(self.netmask) == int(other.netmask)) - except AttributeError: - return NotImplemented - - def __hash__(self): - return hash((int(self.network_address), int(self.netmask))) - - def __contains__(self, other): - # always false if one is v4 and the other is v6. - if self.version != other.version: - return False - # dealing with another network. - if isinstance(other, _BaseNetwork): - return False - # dealing with another address - else: - # address - return other._ip & self.netmask._ip == self.network_address._ip - - def overlaps(self, other): - """Tell if self is partly contained in other.""" - return self.network_address in other or ( - self.broadcast_address in other or ( - other.network_address in self or ( - other.broadcast_address in self))) - - @functools.cached_property - def broadcast_address(self): - return self._address_class(int(self.network_address) | - int(self.hostmask)) - - @functools.cached_property - def hostmask(self): - return self._address_class(int(self.netmask) ^ self._ALL_ONES) - - @property - def with_prefixlen(self): - return '%s/%d' % (self.network_address, self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self.network_address, self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self.network_address, self.hostmask) - - @property - def num_addresses(self): - """Number of hosts in the current subnet.""" - return int(self.broadcast_address) - int(self.network_address) + 1 - - @property - def _address_class(self): - # Returning bare address objects (rather than interfaces) allows for - # more consistent behaviour across the network address, broadcast - # address and individual host addresses. - msg = '%200s has no associated address class' % (type(self),) - raise NotImplementedError(msg) - - @property - def prefixlen(self): - return self._prefixlen - - def address_exclude(self, other): - """Remove an address from a larger block. - - For example: - - addr1 = ip_network('192.0.2.0/28') - addr2 = ip_network('192.0.2.1/32') - list(addr1.address_exclude(addr2)) = - [IPv4Network('192.0.2.0/32'), IPv4Network('192.0.2.2/31'), - IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.8/29')] - - or IPv6: - - addr1 = ip_network('2001:db8::1/32') - addr2 = ip_network('2001:db8::1/128') - list(addr1.address_exclude(addr2)) = - [ip_network('2001:db8::1/128'), - ip_network('2001:db8::2/127'), - ip_network('2001:db8::4/126'), - ip_network('2001:db8::8/125'), - ... - ip_network('2001:db8:8000::/33')] - - Args: - other: An IPv4Network or IPv6Network object of the same type. - - Returns: - An iterator of the IPv(4|6)Network objects which is self - minus other. - - Raises: - TypeError: If self and other are of differing address - versions, or if other is not a network object. - ValueError: If other is not completely contained by self. - - """ - if not self.version == other.version: - raise TypeError("%s and %s are not of the same version" % ( - self, other)) - - if not isinstance(other, _BaseNetwork): - raise TypeError("%s is not a network object" % other) - - if not other.subnet_of(self): - raise ValueError('%s not contained in %s' % (other, self)) - if other == self: - return - - # Make sure we're comparing the network of other. - other = other.__class__('%s/%s' % (other.network_address, - other.prefixlen)) - - s1, s2 = self.subnets() - while s1 != other and s2 != other: - if other.subnet_of(s1): - yield s2 - s1, s2 = s1.subnets() - elif other.subnet_of(s2): - yield s1 - s1, s2 = s2.subnets() - else: - # If we got here, there's a bug somewhere. - raise AssertionError('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (s1, s2, other)) - if s1 == other: - yield s2 - elif s2 == other: - yield s1 - else: - # If we got here, there's a bug somewhere. - raise AssertionError('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (s1, s2, other)) - - def compare_networks(self, other): - """Compare two IP objects. - - This is only concerned about the comparison of the integer - representation of the network addresses. This means that the - host bits aren't considered at all in this method. If you want - to compare host bits, you can easily enough do a - 'HostA._ip < HostB._ip' - - Args: - other: An IP object. - - Returns: - If the IP versions of self and other are the same, returns: - - -1 if self < other: - eg: IPv4Network('192.0.2.0/25') < IPv4Network('192.0.2.128/25') - IPv6Network('2001:db8::1000/124') < - IPv6Network('2001:db8::2000/124') - 0 if self == other - eg: IPv4Network('192.0.2.0/24') == IPv4Network('192.0.2.0/24') - IPv6Network('2001:db8::1000/124') == - IPv6Network('2001:db8::1000/124') - 1 if self > other - eg: IPv4Network('192.0.2.128/25') > IPv4Network('192.0.2.0/25') - IPv6Network('2001:db8::2000/124') > - IPv6Network('2001:db8::1000/124') - - Raises: - TypeError if the IP versions are different. - - """ - # does this need to raise a ValueError? - if self.version != other.version: - raise TypeError('%s and %s are not of the same type' % ( - self, other)) - # self.version == other.version below here: - if self.network_address < other.network_address: - return -1 - if self.network_address > other.network_address: - return 1 - # self.network_address == other.network_address below here: - if self.netmask < other.netmask: - return -1 - if self.netmask > other.netmask: - return 1 - return 0 - - def _get_networks_key(self): - """Network-only key function. - - Returns an object that identifies this address' network and - netmask. This function is a suitable "key" argument for sorted() - and list.sort(). - - """ - return (self.version, self.network_address, self.netmask) - - def subnets(self, prefixlen_diff=1, new_prefix=None): - """The subnets which join to make the current subnet. - - In the case that self contains only one IP - (self._prefixlen == 32 for IPv4 or self._prefixlen == 128 - for IPv6), yield an iterator with just ourself. - - Args: - prefixlen_diff: An integer, the amount the prefix length - should be increased by. This should not be set if - new_prefix is also set. - new_prefix: The desired new prefix length. This must be a - larger number (smaller prefix) than the existing prefix. - This should not be set if prefixlen_diff is also set. - - Returns: - An iterator of IPv(4|6) objects. - - Raises: - ValueError: The prefixlen_diff is too small or too large. - OR - prefixlen_diff and new_prefix are both set or new_prefix - is a smaller number than the current prefix (smaller - number means a larger network) - - """ - if self._prefixlen == self.max_prefixlen: - yield self - return - - if new_prefix is not None: - if new_prefix < self._prefixlen: - raise ValueError('new prefix must be longer') - if prefixlen_diff != 1: - raise ValueError('cannot set prefixlen_diff and new_prefix') - prefixlen_diff = new_prefix - self._prefixlen - - if prefixlen_diff < 0: - raise ValueError('prefix length diff must be > 0') - new_prefixlen = self._prefixlen + prefixlen_diff - - if new_prefixlen > self.max_prefixlen: - raise ValueError( - 'prefix length diff %d is invalid for netblock %s' % ( - new_prefixlen, self)) - - start = int(self.network_address) - end = int(self.broadcast_address) + 1 - step = (int(self.hostmask) + 1) >> prefixlen_diff - for new_addr in range(start, end, step): - current = self.__class__((new_addr, new_prefixlen)) - yield current - - def supernet(self, prefixlen_diff=1, new_prefix=None): - """The supernet containing the current network. - - Args: - prefixlen_diff: An integer, the amount the prefix length of - the network should be decreased by. For example, given a - /24 network and a prefixlen_diff of 3, a supernet with a - /21 netmask is returned. - - Returns: - An IPv4 network object. - - Raises: - ValueError: If self.prefixlen - prefixlen_diff < 0. I.e., you have - a negative prefix length. - OR - If prefixlen_diff and new_prefix are both set or new_prefix is a - larger number than the current prefix (larger number means a - smaller network) - - """ - if self._prefixlen == 0: - return self - - if new_prefix is not None: - if new_prefix > self._prefixlen: - raise ValueError('new prefix must be shorter') - if prefixlen_diff != 1: - raise ValueError('cannot set prefixlen_diff and new_prefix') - prefixlen_diff = self._prefixlen - new_prefix - - new_prefixlen = self.prefixlen - prefixlen_diff - if new_prefixlen < 0: - raise ValueError( - 'current prefixlen is %d, cannot have a prefixlen_diff of %d' % - (self.prefixlen, prefixlen_diff)) - return self.__class__(( - int(self.network_address) & (int(self.netmask) << prefixlen_diff), - new_prefixlen - )) - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is a multicast address. - See RFC 2373 2.7 for details. - - """ - return (self.network_address.is_multicast and - self.broadcast_address.is_multicast) - - @staticmethod - def _is_subnet_of(a, b): - try: - # Always false if one is v4 and the other is v6. - if a.version != b.version: - raise TypeError(f"{a} and {b} are not of the same version") - return (b.network_address <= a.network_address and - b.broadcast_address >= a.broadcast_address) - except AttributeError: - raise TypeError(f"Unable to test subnet containment " - f"between {a} and {b}") - - def subnet_of(self, other): - """Return True if this network is a subnet of other.""" - return self._is_subnet_of(self, other) - - def supernet_of(self, other): - """Return True if this network is a supernet of other.""" - return self._is_subnet_of(other, self) - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within one of the - reserved IPv6 Network ranges. - - """ - return (self.network_address.is_reserved and - self.broadcast_address.is_reserved) - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is reserved per RFC 4291. - - """ - return (self.network_address.is_link_local and - self.broadcast_address.is_link_local) - - @property - def is_private(self): - """Test if this network belongs to a private range. - - Returns: - A boolean, True if the network is reserved per - iana-ipv4-special-registry or iana-ipv6-special-registry. - - """ - return any(self.network_address in priv_network and - self.broadcast_address in priv_network - for priv_network in self._constants._private_networks) and all( - self.network_address not in network and - self.broadcast_address not in network - for network in self._constants._private_networks_exceptions - ) - - @property - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, True if the address is not reserved per - iana-ipv4-special-registry or iana-ipv6-special-registry. - - """ - return not self.is_private - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 2373 2.5.2. - - """ - return (self.network_address.is_unspecified and - self.broadcast_address.is_unspecified) - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback address as defined in - RFC 2373 2.5.3. - - """ - return (self.network_address.is_loopback and - self.broadcast_address.is_loopback) - - -class _BaseConstants: - - _private_networks = [] - - -_BaseNetwork._constants = _BaseConstants - - -class _BaseV4: - - """Base IPv4 object. - - The following methods are used by IPv4 objects in both single IP - addresses and networks. - - """ - - __slots__ = () - version = 4 - # Equivalent to 255.255.255.255 or 32 bits of 1's. - _ALL_ONES = (2**IPV4LENGTH) - 1 - - max_prefixlen = IPV4LENGTH - # There are only a handful of valid v4 netmasks, so we cache them all - # when constructed (see _make_netmask()). - _netmask_cache = {} - - def _explode_shorthand_ip_string(self): - return str(self) - - @classmethod - def _make_netmask(cls, arg): - """Make a (netmask, prefix_len) tuple from the given argument. - - Argument can be: - - an integer (the prefix length) - - a string representing the prefix length (e.g. "24") - - a string representing the prefix netmask (e.g. "255.255.255.0") - """ - if arg not in cls._netmask_cache: - if isinstance(arg, int): - prefixlen = arg - if not (0 <= prefixlen <= cls.max_prefixlen): - cls._report_invalid_netmask(prefixlen) - else: - try: - # Check for a netmask in prefix length form - prefixlen = cls._prefix_from_prefix_string(arg) - except NetmaskValueError: - # Check for a netmask or hostmask in dotted-quad form. - # This may raise NetmaskValueError. - prefixlen = cls._prefix_from_ip_string(arg) - netmask = IPv4Address(cls._ip_int_from_prefix(prefixlen)) - cls._netmask_cache[arg] = netmask, prefixlen - return cls._netmask_cache[arg] - - @classmethod - def _ip_int_from_string(cls, ip_str): - """Turn the given IP string into an integer for comparison. - - Args: - ip_str: A string, the IP ip_str. - - Returns: - The IP ip_str as an integer. - - Raises: - AddressValueError: if ip_str isn't a valid IPv4 Address. - - """ - if not ip_str: - raise AddressValueError('Address cannot be empty') - - octets = ip_str.split('.') - if len(octets) != 4: - raise AddressValueError("Expected 4 octets in %r" % ip_str) - - try: - return int.from_bytes(map(cls._parse_octet, octets), 'big') - except ValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) from None - - @classmethod - def _parse_octet(cls, octet_str): - """Convert a decimal octet into an integer. - - Args: - octet_str: A string, the number to parse. - - Returns: - The octet as an integer. - - Raises: - ValueError: if the octet isn't strictly a decimal from [0..255]. - - """ - if not octet_str: - raise ValueError("Empty octet not permitted") - # Reject non-ASCII digits. - if not (octet_str.isascii() and octet_str.isdigit()): - msg = "Only decimal digits permitted in %r" - raise ValueError(msg % octet_str) - # We do the length check second, since the invalid character error - # is likely to be more informative for the user - if len(octet_str) > 3: - msg = "At most 3 characters permitted in %r" - raise ValueError(msg % octet_str) - # Handle leading zeros as strict as glibc's inet_pton() - # See security bug bpo-36384 - if octet_str != '0' and octet_str[0] == '0': - msg = "Leading zeros are not permitted in %r" - raise ValueError(msg % octet_str) - # Convert to integer (we know digits are legal) - octet_int = int(octet_str, 10) - if octet_int > 255: - raise ValueError("Octet %d (> 255) not permitted" % octet_int) - return octet_int - - @classmethod - def _string_from_ip_int(cls, ip_int): - """Turns a 32-bit integer into dotted decimal notation. - - Args: - ip_int: An integer, the IP address. - - Returns: - The IP address as a string in dotted decimal notation. - - """ - return '.'.join(map(str, ip_int.to_bytes(4, 'big'))) - - def _reverse_pointer(self): - """Return the reverse DNS pointer name for the IPv4 address. - - This implements the method described in RFC1035 3.5. - - """ - reverse_octets = str(self).split('.')[::-1] - return '.'.join(reverse_octets) + '.in-addr.arpa' - -class IPv4Address(_BaseV4, _BaseAddress): - - """Represent and manipulate single IPv4 Addresses.""" - - __slots__ = ('_ip', '__weakref__') - - def __init__(self, address): - - """ - Args: - address: A string or integer representing the IP - - Additionally, an integer can be passed, so - IPv4Address('192.0.2.1') == IPv4Address(3221225985). - or, more generally - IPv4Address(int(IPv4Address('192.0.2.1'))) == - IPv4Address('192.0.2.1') - - Raises: - AddressValueError: If ipaddress isn't a valid IPv4 address. - - """ - # Efficient constructor from integer. - if isinstance(address, int): - self._check_int_address(address) - self._ip = address - return - - # Constructing from a packed address - if isinstance(address, bytes): - self._check_packed_address(address, 4) - self._ip = int.from_bytes(address) # big endian - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP string. - addr_str = str(address) - if '/' in addr_str: - raise AddressValueError(f"Unexpected '/' in {address!r}") - self._ip = self._ip_int_from_string(addr_str) - - @property - def packed(self): - """The binary representation of this address.""" - return v4_int_to_packed(self._ip) - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within the - reserved IPv4 Network range. - - """ - return self in self._constants._reserved_network - - @property - @functools.lru_cache() - def is_private(self): - """``True`` if the address is defined as not globally reachable by - iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ - (for IPv6) with the following exceptions: - - * ``is_private`` is ``False`` for ``100.64.0.0/10`` - * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the - semantics of the underlying IPv4 addresses and the following condition holds - (see :attr:`IPv6Address.ipv4_mapped`):: - - address.is_private == address.ipv4_mapped.is_private - - ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10`` - IPv4 range where they are both ``False``. - """ - return ( - any(self in net for net in self._constants._private_networks) - and all(self not in net for net in self._constants._private_networks_exceptions) - ) - - @property - @functools.lru_cache() - def is_global(self): - """``True`` if the address is defined as globally reachable by - iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ - (for IPv6) with the following exception: - - For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the - semantics of the underlying IPv4 addresses and the following condition holds - (see :attr:`IPv6Address.ipv4_mapped`):: - - address.is_global == address.ipv4_mapped.is_global - - ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10`` - IPv4 range where they are both ``False``. - """ - return self not in self._constants._public_network and not self.is_private - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is multicast. - See RFC 3171 for details. - - """ - return self in self._constants._multicast_network - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 5735 3. - - """ - return self == self._constants._unspecified_address - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback per RFC 3330. - - """ - return self in self._constants._loopback_network - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is link-local per RFC 3927. - - """ - return self in self._constants._linklocal_network - - @property - def ipv6_mapped(self): - """Return the IPv4-mapped IPv6 address. - - Returns: - The IPv4-mapped IPv6 address per RFC 4291. - - """ - return IPv6Address(f'::ffff:{self}') - - -class IPv4Interface(IPv4Address): - - def __init__(self, address): - addr, mask = self._split_addr_prefix(address) - - IPv4Address.__init__(self, addr) - self.network = IPv4Network((addr, mask), strict=False) - self.netmask = self.network.netmask - self._prefixlen = self.network._prefixlen - - @functools.cached_property - def hostmask(self): - return self.network.hostmask - - def __str__(self): - return '%s/%d' % (self._string_from_ip_int(self._ip), - self._prefixlen) - - def __eq__(self, other): - address_equal = IPv4Address.__eq__(self, other) - if address_equal is NotImplemented or not address_equal: - return address_equal - try: - return self.network == other.network - except AttributeError: - # An interface with an associated network is NOT the - # same as an unassociated address. That's why the hash - # takes the extra info into account. - return False - - def __lt__(self, other): - address_less = IPv4Address.__lt__(self, other) - if address_less is NotImplemented: - return NotImplemented - try: - return (self.network < other.network or - self.network == other.network and address_less) - except AttributeError: - # We *do* allow addresses and interfaces to be sorted. The - # unassociated address is considered less than all interfaces. - return False - - def __hash__(self): - return hash((self._ip, self._prefixlen, int(self.network.network_address))) - - __reduce__ = _IPAddressBase.__reduce__ - - @property - def ip(self): - return IPv4Address(self._ip) - - @property - def with_prefixlen(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.hostmask) - - -class IPv4Network(_BaseV4, _BaseNetwork): - - """This class represents and manipulates 32-bit IPv4 network + addresses.. - - Attributes: [examples for IPv4Network('192.0.2.0/27')] - .network_address: IPv4Address('192.0.2.0') - .hostmask: IPv4Address('0.0.0.31') - .broadcast_address: IPv4Address('192.0.2.32') - .netmask: IPv4Address('255.255.255.224') - .prefixlen: 27 - - """ - # Class to use when creating address objects - _address_class = IPv4Address - - def __init__(self, address, strict=True): - """Instantiate a new IPv4 network object. - - Args: - address: A string or integer representing the IP [& network]. - '192.0.2.0/24' - '192.0.2.0/255.255.255.0' - '192.0.2.0/0.0.0.255' - are all functionally the same in IPv4. Similarly, - '192.0.2.1' - '192.0.2.1/255.255.255.255' - '192.0.2.1/32' - are also functionally equivalent. That is to say, failing to - provide a subnetmask will create an object with a mask of /32. - - If the mask (portion after the / in the argument) is given in - dotted quad form, it is treated as a netmask if it starts with a - non-zero field (e.g. /255.0.0.0 == /8) and as a hostmask if it - starts with a zero field (e.g. 0.255.255.255 == /8), with the - single exception of an all-zero mask which is treated as a - netmask == /0. If no mask is given, a default of /32 is used. - - Additionally, an integer can be passed, so - IPv4Network('192.0.2.1') == IPv4Network(3221225985) - or, more generally - IPv4Interface(int(IPv4Interface('192.0.2.1'))) == - IPv4Interface('192.0.2.1') - - Raises: - AddressValueError: If ipaddress isn't a valid IPv4 address. - NetmaskValueError: If the netmask isn't valid for - an IPv4 address. - ValueError: If strict is True and a network address is not - supplied. - """ - addr, mask = self._split_addr_prefix(address) - - self.network_address = IPv4Address(addr) - self.netmask, self._prefixlen = self._make_netmask(mask) - packed = int(self.network_address) - if packed & int(self.netmask) != packed: - if strict: - raise ValueError('%s has host bits set' % self) - else: - self.network_address = IPv4Address(packed & - int(self.netmask)) - - if self._prefixlen == (self.max_prefixlen - 1): - self.hosts = self.__iter__ - elif self._prefixlen == (self.max_prefixlen): - self.hosts = lambda: iter((IPv4Address(addr),)) - - @property - @functools.lru_cache() - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, True if the address is not reserved per - iana-ipv4-special-registry. - - """ - return (not (self.network_address in IPv4Network('100.64.0.0/10') and - self.broadcast_address in IPv4Network('100.64.0.0/10')) and - not self.is_private) - - -class _IPv4Constants: - _linklocal_network = IPv4Network('169.254.0.0/16') - - _loopback_network = IPv4Network('127.0.0.0/8') - - _multicast_network = IPv4Network('224.0.0.0/4') - - _public_network = IPv4Network('100.64.0.0/10') - - # Not globally reachable address blocks listed on - # https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml - _private_networks = [ - IPv4Network('0.0.0.0/8'), - IPv4Network('10.0.0.0/8'), - IPv4Network('127.0.0.0/8'), - IPv4Network('169.254.0.0/16'), - IPv4Network('172.16.0.0/12'), - IPv4Network('192.0.0.0/24'), - IPv4Network('192.0.0.170/31'), - IPv4Network('192.0.2.0/24'), - IPv4Network('192.168.0.0/16'), - IPv4Network('198.18.0.0/15'), - IPv4Network('198.51.100.0/24'), - IPv4Network('203.0.113.0/24'), - IPv4Network('240.0.0.0/4'), - IPv4Network('255.255.255.255/32'), - ] - - _private_networks_exceptions = [ - IPv4Network('192.0.0.9/32'), - IPv4Network('192.0.0.10/32'), - ] - - _reserved_network = IPv4Network('240.0.0.0/4') - - _unspecified_address = IPv4Address('0.0.0.0') - - -IPv4Address._constants = _IPv4Constants -IPv4Network._constants = _IPv4Constants - - -class _BaseV6: - - """Base IPv6 object. - - The following methods are used by IPv6 objects in both single IP - addresses and networks. - - """ - - __slots__ = () - version = 6 - _ALL_ONES = (2**IPV6LENGTH) - 1 - _HEXTET_COUNT = 8 - _HEX_DIGITS = frozenset('0123456789ABCDEFabcdef') - max_prefixlen = IPV6LENGTH - - # There are only a bunch of valid v6 netmasks, so we cache them all - # when constructed (see _make_netmask()). - _netmask_cache = {} - - @classmethod - def _make_netmask(cls, arg): - """Make a (netmask, prefix_len) tuple from the given argument. - - Argument can be: - - an integer (the prefix length) - - a string representing the prefix length (e.g. "24") - - a string representing the prefix netmask (e.g. "255.255.255.0") - """ - if arg not in cls._netmask_cache: - if isinstance(arg, int): - prefixlen = arg - if not (0 <= prefixlen <= cls.max_prefixlen): - cls._report_invalid_netmask(prefixlen) - else: - prefixlen = cls._prefix_from_prefix_string(arg) - netmask = IPv6Address(cls._ip_int_from_prefix(prefixlen)) - cls._netmask_cache[arg] = netmask, prefixlen - return cls._netmask_cache[arg] - - @classmethod - def _ip_int_from_string(cls, ip_str): - """Turn an IPv6 ip_str into an integer. - - Args: - ip_str: A string, the IPv6 ip_str. - - Returns: - An int, the IPv6 address - - Raises: - AddressValueError: if ip_str isn't a valid IPv6 Address. - - """ - if not ip_str: - raise AddressValueError('Address cannot be empty') - if len(ip_str) > 45: - shorten = ip_str - if len(shorten) > 100: - shorten = f'{ip_str[:45]}({len(ip_str)-90} chars elided){ip_str[-45:]}' - raise AddressValueError(f"At most 45 characters expected in " - f"{shorten!r}") - - # We want to allow more parts than the max to be 'split' - # to preserve the correct error message when there are - # too many parts combined with '::' - _max_parts = cls._HEXTET_COUNT + 1 - parts = ip_str.split(':', maxsplit=_max_parts) - - # An IPv6 address needs at least 2 colons (3 parts). - _min_parts = 3 - if len(parts) < _min_parts: - msg = "At least %d parts expected in %r" % (_min_parts, ip_str) - raise AddressValueError(msg) - - # If the address has an IPv4-style suffix, convert it to hexadecimal. - if '.' in parts[-1]: - try: - ipv4_int = IPv4Address(parts.pop())._ip - except AddressValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) from None - parts.append('%x' % ((ipv4_int >> 16) & 0xFFFF)) - parts.append('%x' % (ipv4_int & 0xFFFF)) - - # An IPv6 address can't have more than 8 colons (9 parts). - # The extra colon comes from using the "::" notation for a single - # leading or trailing zero part. - if len(parts) > _max_parts: - msg = "At most %d colons permitted in %r" % (_max_parts-1, ip_str) - raise AddressValueError(msg) - - # Disregarding the endpoints, find '::' with nothing in between. - # This indicates that a run of zeroes has been skipped. - skip_index = None - for i in range(1, len(parts) - 1): - if not parts[i]: - if skip_index is not None: - # Can't have more than one '::' - msg = "At most one '::' permitted in %r" % ip_str - raise AddressValueError(msg) - skip_index = i - - # parts_hi is the number of parts to copy from above/before the '::' - # parts_lo is the number of parts to copy from below/after the '::' - if skip_index is not None: - # If we found a '::', then check if it also covers the endpoints. - parts_hi = skip_index - parts_lo = len(parts) - skip_index - 1 - if not parts[0]: - parts_hi -= 1 - if parts_hi: - msg = "Leading ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # ^: requires ^:: - if not parts[-1]: - parts_lo -= 1 - if parts_lo: - msg = "Trailing ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # :$ requires ::$ - parts_skipped = cls._HEXTET_COUNT - (parts_hi + parts_lo) - if parts_skipped < 1: - msg = "Expected at most %d other parts with '::' in %r" - raise AddressValueError(msg % (cls._HEXTET_COUNT-1, ip_str)) - else: - # Otherwise, allocate the entire address to parts_hi. The - # endpoints could still be empty, but _parse_hextet() will check - # for that. - if len(parts) != cls._HEXTET_COUNT: - msg = "Exactly %d parts expected without '::' in %r" - raise AddressValueError(msg % (cls._HEXTET_COUNT, ip_str)) - if not parts[0]: - msg = "Leading ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # ^: requires ^:: - if not parts[-1]: - msg = "Trailing ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # :$ requires ::$ - parts_hi = len(parts) - parts_lo = 0 - parts_skipped = 0 - - try: - # Now, parse the hextets into a 128-bit integer. - ip_int = 0 - for i in range(parts_hi): - ip_int <<= 16 - ip_int |= cls._parse_hextet(parts[i]) - ip_int <<= 16 * parts_skipped - for i in range(-parts_lo, 0): - ip_int <<= 16 - ip_int |= cls._parse_hextet(parts[i]) - return ip_int - except ValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) from None - - @classmethod - def _parse_hextet(cls, hextet_str): - """Convert an IPv6 hextet string into an integer. - - Args: - hextet_str: A string, the number to parse. - - Returns: - The hextet as an integer. - - Raises: - ValueError: if the input isn't strictly a hex number from - [0..FFFF]. - - """ - # Reject non-ASCII digits. - if not cls._HEX_DIGITS.issuperset(hextet_str): - raise ValueError("Only hex digits permitted in %r" % hextet_str) - # We do the length check second, since the invalid character error - # is likely to be more informative for the user - if len(hextet_str) > 4: - msg = "At most 4 characters permitted in %r" - raise ValueError(msg % hextet_str) - # Length check means we can skip checking the integer value - return int(hextet_str, 16) - - @classmethod - def _compress_hextets(cls, hextets): - """Compresses a list of hextets. - - Compresses a list of strings, replacing the longest continuous - sequence of "0" in the list with "" and adding empty strings at - the beginning or at the end of the string such that subsequently - calling ":".join(hextets) will produce the compressed version of - the IPv6 address. - - Args: - hextets: A list of strings, the hextets to compress. - - Returns: - A list of strings. - - """ - best_doublecolon_start = -1 - best_doublecolon_len = 0 - doublecolon_start = -1 - doublecolon_len = 0 - for index, hextet in enumerate(hextets): - if hextet == '0': - doublecolon_len += 1 - if doublecolon_start == -1: - # Start of a sequence of zeros. - doublecolon_start = index - if doublecolon_len > best_doublecolon_len: - # This is the longest sequence of zeros so far. - best_doublecolon_len = doublecolon_len - best_doublecolon_start = doublecolon_start - else: - doublecolon_len = 0 - doublecolon_start = -1 - - if best_doublecolon_len > 1: - best_doublecolon_end = (best_doublecolon_start + - best_doublecolon_len) - # For zeros at the end of the address. - if best_doublecolon_end == len(hextets): - hextets += [''] - hextets[best_doublecolon_start:best_doublecolon_end] = [''] - # For zeros at the beginning of the address. - if best_doublecolon_start == 0: - hextets = [''] + hextets - - return hextets - - @classmethod - def _string_from_ip_int(cls, ip_int=None): - """Turns a 128-bit integer into hexadecimal notation. - - Args: - ip_int: An integer, the IP address. - - Returns: - A string, the hexadecimal representation of the address. - - Raises: - ValueError: The address is bigger than 128 bits of all ones. - - """ - if ip_int is None: - ip_int = int(cls._ip) - - if ip_int > cls._ALL_ONES: - raise ValueError('IPv6 address is too large') - - hex_str = '%032x' % ip_int - hextets = ['%x' % int(hex_str[x:x+4], 16) for x in range(0, 32, 4)] - - hextets = cls._compress_hextets(hextets) - return ':'.join(hextets) - - def _explode_shorthand_ip_string(self): - """Expand a shortened IPv6 address. - - Returns: - A string, the expanded IPv6 address. - - """ - if isinstance(self, IPv6Network): - ip_str = str(self.network_address) - elif isinstance(self, IPv6Interface): - ip_str = str(self.ip) - else: - ip_str = str(self) - - ip_int = self._ip_int_from_string(ip_str) - hex_str = '%032x' % ip_int - parts = [hex_str[x:x+4] for x in range(0, 32, 4)] - if isinstance(self, (_BaseNetwork, IPv6Interface)): - return '%s/%d' % (':'.join(parts), self._prefixlen) - return ':'.join(parts) - - def _reverse_pointer(self): - """Return the reverse DNS pointer name for the IPv6 address. - - This implements the method described in RFC3596 2.5. - - """ - reverse_chars = self.exploded[::-1].replace(':', '') - return '.'.join(reverse_chars) + '.ip6.arpa' - - @staticmethod - def _split_scope_id(ip_str): - """Helper function to parse IPv6 string address with scope id. - - See RFC 4007 for details. - - Args: - ip_str: A string, the IPv6 address. - - Returns: - (addr, scope_id) tuple. - - """ - addr, sep, scope_id = ip_str.partition('%') - if not sep: - scope_id = None - elif not scope_id or '%' in scope_id: - raise AddressValueError('Invalid IPv6 address: "%r"' % ip_str) - return addr, scope_id - -class IPv6Address(_BaseV6, _BaseAddress): - - """Represent and manipulate single IPv6 Addresses.""" - - __slots__ = ('_ip', '_scope_id', '__weakref__') - - def __init__(self, address): - """Instantiate a new IPv6 address object. - - Args: - address: A string or integer representing the IP - - Additionally, an integer can be passed, so - IPv6Address('2001:db8::') == - IPv6Address(42540766411282592856903984951653826560) - or, more generally - IPv6Address(int(IPv6Address('2001:db8::'))) == - IPv6Address('2001:db8::') - - Raises: - AddressValueError: If address isn't a valid IPv6 address. - - """ - # Efficient constructor from integer. - if isinstance(address, int): - self._check_int_address(address) - self._ip = address - self._scope_id = None - return - - # Constructing from a packed address - if isinstance(address, bytes): - self._check_packed_address(address, 16) - self._ip = int.from_bytes(address, 'big') - self._scope_id = None - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP string. - addr_str = str(address) - if '/' in addr_str: - raise AddressValueError(f"Unexpected '/' in {address!r}") - addr_str, self._scope_id = self._split_scope_id(addr_str) - - self._ip = self._ip_int_from_string(addr_str) - - def _explode_shorthand_ip_string(self): - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is None: - return super()._explode_shorthand_ip_string() - prefix_len = 30 - raw_exploded_str = super()._explode_shorthand_ip_string() - return f"{raw_exploded_str[:prefix_len]}{ipv4_mapped!s}" - - def _reverse_pointer(self): - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is None: - return super()._reverse_pointer() - prefix_len = 30 - raw_exploded_str = super()._explode_shorthand_ip_string()[:prefix_len] - # ipv4 encoded using hexadecimal nibbles instead of decimals - ipv4_int = ipv4_mapped._ip - reverse_chars = f"{raw_exploded_str}{ipv4_int:008x}"[::-1].replace(':', '') - return '.'.join(reverse_chars) + '.ip6.arpa' - - def _ipv4_mapped_ipv6_to_str(self): - """Return convenient text representation of IPv4-mapped IPv6 address - - See RFC 4291 2.5.5.2, 2.2 p.3 for details. - - Returns: - A string, 'x:x:x:x:x:x:d.d.d.d', where the 'x's are the hexadecimal values of - the six high-order 16-bit pieces of the address, and the 'd's are - the decimal values of the four low-order 8-bit pieces of the - address (standard IPv4 representation) as defined in RFC 4291 2.2 p.3. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is None: - raise AddressValueError("Can not apply to non-IPv4-mapped IPv6 address %s" % str(self)) - high_order_bits = self._ip >> 32 - return "%s:%s" % (self._string_from_ip_int(high_order_bits), str(ipv4_mapped)) - - def __str__(self): - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is None: - ip_str = super().__str__() - else: - ip_str = self._ipv4_mapped_ipv6_to_str() - return ip_str + '%' + self._scope_id if self._scope_id else ip_str - - def __hash__(self): - return hash((self._ip, self._scope_id)) - - def __eq__(self, other): - address_equal = super().__eq__(other) - if address_equal is NotImplemented: - return NotImplemented - if not address_equal: - return False - return self._scope_id == getattr(other, '_scope_id', None) - - def __reduce__(self): - return (self.__class__, (str(self),)) - - @property - def scope_id(self): - """Identifier of a particular zone of the address's scope. - - See RFC 4007 for details. - - Returns: - A string identifying the zone of the address if specified, else None. - - """ - return self._scope_id - - @property - def packed(self): - """The binary representation of this address.""" - return v6_int_to_packed(self._ip) - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is a multicast address. - See RFC 2373 2.7 for details. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_multicast - return self in self._constants._multicast_network - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within one of the - reserved IPv6 Network ranges. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_reserved - return any(self in x for x in self._constants._reserved_networks) - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is reserved per RFC 4291. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_link_local - return self in self._constants._linklocal_network - - @property - def is_site_local(self): - """Test if the address is reserved for site-local. - - Note that the site-local address space has been deprecated by RFC 3879. - Use is_private to test if this address is in the space of unique local - addresses as defined by RFC 4193. - - Returns: - A boolean, True if the address is reserved per RFC 3513 2.5.6. - - """ - return self in self._constants._sitelocal_network - - @property - @functools.lru_cache() - def is_private(self): - """``True`` if the address is defined as not globally reachable by - iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ - (for IPv6) with the following exceptions: - - * ``is_private`` is ``False`` for ``100.64.0.0/10`` - * For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the - semantics of the underlying IPv4 addresses and the following condition holds - (see :attr:`IPv6Address.ipv4_mapped`):: - - address.is_private == address.ipv4_mapped.is_private - - ``is_private`` has value opposite to :attr:`is_global`, except for the ``100.64.0.0/10`` - IPv4 range where they are both ``False``. - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_private - return ( - any(self in net for net in self._constants._private_networks) - and all(self not in net for net in self._constants._private_networks_exceptions) - ) - - @property - def is_global(self): - """``True`` if the address is defined as globally reachable by - iana-ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ - (for IPv6) with the following exception: - - For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the - semantics of the underlying IPv4 addresses and the following condition holds - (see :attr:`IPv6Address.ipv4_mapped`):: - - address.is_global == address.ipv4_mapped.is_global - - ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10`` - IPv4 range where they are both ``False``. - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_global - return not self.is_private - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 2373 2.5.2. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_unspecified - return self._ip == 0 - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback address as defined in - RFC 2373 2.5.3. - - """ - ipv4_mapped = self.ipv4_mapped - if ipv4_mapped is not None: - return ipv4_mapped.is_loopback - return self._ip == 1 - - @property - def ipv4_mapped(self): - """Return the IPv4 mapped address. - - Returns: - If the IPv6 address is a v4 mapped address, return the - IPv4 mapped address. Return None otherwise. - - """ - if (self._ip >> 32) != 0xFFFF: - return None - return IPv4Address(self._ip & 0xFFFFFFFF) - - @property - def teredo(self): - """Tuple of embedded teredo IPs. - - Returns: - Tuple of the (server, client) IPs or None if the address - doesn't appear to be a teredo address (doesn't start with - 2001::/32) - - """ - if (self._ip >> 96) != 0x20010000: - return None - return (IPv4Address((self._ip >> 64) & 0xFFFFFFFF), - IPv4Address(~self._ip & 0xFFFFFFFF)) - - @property - def sixtofour(self): - """Return the IPv4 6to4 embedded address. - - Returns: - The IPv4 6to4-embedded address if present or None if the - address doesn't appear to contain a 6to4 embedded address. - - """ - if (self._ip >> 112) != 0x2002: - return None - return IPv4Address((self._ip >> 80) & 0xFFFFFFFF) - - -class IPv6Interface(IPv6Address): - - def __init__(self, address): - addr, mask = self._split_addr_prefix(address) - - IPv6Address.__init__(self, addr) - self.network = IPv6Network((addr, mask), strict=False) - self.netmask = self.network.netmask - self._prefixlen = self.network._prefixlen - - @functools.cached_property - def hostmask(self): - return self.network.hostmask - - def __str__(self): - return '%s/%d' % (super().__str__(), - self._prefixlen) - - def __eq__(self, other): - address_equal = IPv6Address.__eq__(self, other) - if address_equal is NotImplemented or not address_equal: - return address_equal - try: - return self.network == other.network - except AttributeError: - # An interface with an associated network is NOT the - # same as an unassociated address. That's why the hash - # takes the extra info into account. - return False - - def __lt__(self, other): - address_less = IPv6Address.__lt__(self, other) - if address_less is NotImplemented: - return address_less - try: - return (self.network < other.network or - self.network == other.network and address_less) - except AttributeError: - # We *do* allow addresses and interfaces to be sorted. The - # unassociated address is considered less than all interfaces. - return False - - def __hash__(self): - return hash((self._ip, self._prefixlen, int(self.network.network_address))) - - __reduce__ = _IPAddressBase.__reduce__ - - @property - def ip(self): - return IPv6Address(self._ip) - - @property - def with_prefixlen(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.hostmask) - - @property - def is_unspecified(self): - return self._ip == 0 and self.network.is_unspecified - - @property - def is_loopback(self): - return super().is_loopback and self.network.is_loopback - - -class IPv6Network(_BaseV6, _BaseNetwork): - - """This class represents and manipulates 128-bit IPv6 networks. - - Attributes: [examples for IPv6('2001:db8::1000/124')] - .network_address: IPv6Address('2001:db8::1000') - .hostmask: IPv6Address('::f') - .broadcast_address: IPv6Address('2001:db8::100f') - .netmask: IPv6Address('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0') - .prefixlen: 124 - - """ - - # Class to use when creating address objects - _address_class = IPv6Address - - def __init__(self, address, strict=True): - """Instantiate a new IPv6 Network object. - - Args: - address: A string or integer representing the IPv6 network or the - IP and prefix/netmask. - '2001:db8::/128' - '2001:db8:0000:0000:0000:0000:0000:0000/128' - '2001:db8::' - are all functionally the same in IPv6. That is to say, - failing to provide a subnetmask will create an object with - a mask of /128. - - Additionally, an integer can be passed, so - IPv6Network('2001:db8::') == - IPv6Network(42540766411282592856903984951653826560) - or, more generally - IPv6Network(int(IPv6Network('2001:db8::'))) == - IPv6Network('2001:db8::') - - strict: A boolean. If true, ensure that we have been passed - A true network address, eg, 2001:db8::1000/124 and not an - IP address on a network, eg, 2001:db8::1/124. - - Raises: - AddressValueError: If address isn't a valid IPv6 address. - NetmaskValueError: If the netmask isn't valid for - an IPv6 address. - ValueError: If strict was True and a network address was not - supplied. - """ - addr, mask = self._split_addr_prefix(address) - - self.network_address = IPv6Address(addr) - self.netmask, self._prefixlen = self._make_netmask(mask) - packed = int(self.network_address) - if packed & int(self.netmask) != packed: - if strict: - raise ValueError('%s has host bits set' % self) - else: - self.network_address = IPv6Address(packed & - int(self.netmask)) - - if self._prefixlen == (self.max_prefixlen - 1): - self.hosts = self.__iter__ - elif self._prefixlen == self.max_prefixlen: - self.hosts = lambda: iter((IPv6Address(addr),)) - - def hosts(self): - """Generate Iterator over usable hosts in a network. - - This is like __iter__ except it doesn't return the - Subnet-Router anycast address. - - """ - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in range(network + 1, broadcast + 1): - yield self._address_class(x) - - @property - def is_site_local(self): - """Test if the address is reserved for site-local. - - Note that the site-local address space has been deprecated by RFC 3879. - Use is_private to test if this address is in the space of unique local - addresses as defined by RFC 4193. - - Returns: - A boolean, True if the address is reserved per RFC 3513 2.5.6. - - """ - return (self.network_address.is_site_local and - self.broadcast_address.is_site_local) - - -class _IPv6Constants: - - _linklocal_network = IPv6Network('fe80::/10') - - _multicast_network = IPv6Network('ff00::/8') - - # Not globally reachable address blocks listed on - # https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml - _private_networks = [ - IPv6Network('::1/128'), - IPv6Network('::/128'), - IPv6Network('::ffff:0:0/96'), - IPv6Network('64:ff9b:1::/48'), - IPv6Network('100::/64'), - IPv6Network('2001::/23'), - IPv6Network('2001:db8::/32'), - # IANA says N/A, let's consider it not globally reachable to be safe - IPv6Network('2002::/16'), - # RFC 9637: https://www.rfc-editor.org/rfc/rfc9637.html#section-6-2.2 - IPv6Network('3fff::/20'), - IPv6Network('fc00::/7'), - IPv6Network('fe80::/10'), - ] - - _private_networks_exceptions = [ - IPv6Network('2001:1::1/128'), - IPv6Network('2001:1::2/128'), - IPv6Network('2001:3::/32'), - IPv6Network('2001:4:112::/48'), - IPv6Network('2001:20::/28'), - IPv6Network('2001:30::/28'), - ] - - _reserved_networks = [ - IPv6Network('::/8'), IPv6Network('100::/8'), - IPv6Network('200::/7'), IPv6Network('400::/6'), - IPv6Network('800::/5'), IPv6Network('1000::/4'), - IPv6Network('4000::/3'), IPv6Network('6000::/3'), - IPv6Network('8000::/3'), IPv6Network('A000::/3'), - IPv6Network('C000::/3'), IPv6Network('E000::/4'), - IPv6Network('F000::/5'), IPv6Network('F800::/6'), - IPv6Network('FE00::/9'), - ] - - _sitelocal_network = IPv6Network('fec0::/10') - - -IPv6Address._constants = _IPv6Constants -IPv6Network._constants = _IPv6Constants diff --git a/Python314_4_x86_Template/Lib/json/__init__.py b/Python314_4_x86_Template/Lib/json/__init__.py deleted file mode 100644 index 9eaa4f3fb..000000000 --- a/Python314_4_x86_Template/Lib/json/__init__.py +++ /dev/null @@ -1,365 +0,0 @@ -r"""JSON (JavaScript Object Notation) <https://json.org> is a subset of -JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data -interchange format. - -:mod:`json` exposes an API familiar to users of the standard library -:mod:`marshal` and :mod:`pickle` modules. It is derived from a -version of the externally maintained simplejson library. - -Encoding basic Python object hierarchies:: - - >>> import json - >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) - '["foo", {"bar": ["baz", null, 1.0, 2]}]' - >>> print(json.dumps("\"foo\bar")) - "\"foo\bar" - >>> print(json.dumps('\u1234')) - "\u1234" - >>> print(json.dumps('\\')) - "\\" - >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) - {"a": 0, "b": 0, "c": 0} - >>> from io import StringIO - >>> io = StringIO() - >>> json.dump(['streaming API'], io) - >>> io.getvalue() - '["streaming API"]' - -Compact encoding:: - - >>> import json - >>> mydict = {'4': 5, '6': 7} - >>> json.dumps([1,2,3,mydict], separators=(',', ':')) - '[1,2,3,{"4":5,"6":7}]' - -Pretty printing:: - - >>> import json - >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) - { - "4": 5, - "6": 7 - } - -Decoding JSON:: - - >>> import json - >>> obj = ['foo', {'bar': ['baz', None, 1.0, 2]}] - >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj - True - >>> json.loads('"\\"foo\\bar"') == '"foo\x08ar' - True - >>> from io import StringIO - >>> io = StringIO('["streaming API"]') - >>> json.load(io)[0] == 'streaming API' - True - -Specializing JSON object decoding:: - - >>> import json - >>> def as_complex(dct): - ... if '__complex__' in dct: - ... return complex(dct['real'], dct['imag']) - ... return dct - ... - >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', - ... object_hook=as_complex) - (1+2j) - >>> from decimal import Decimal - >>> json.loads('1.1', parse_float=Decimal) == Decimal('1.1') - True - -Specializing JSON object encoding:: - - >>> import json - >>> def encode_complex(obj): - ... if isinstance(obj, complex): - ... return [obj.real, obj.imag] - ... raise TypeError(f'Object of type {obj.__class__.__name__} ' - ... f'is not JSON serializable') - ... - >>> json.dumps(2 + 1j, default=encode_complex) - '[2.0, 1.0]' - >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j) - '[2.0, 1.0]' - >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j)) - '[2.0, 1.0]' - - -Using json from the shell to validate and pretty-print:: - - $ echo '{"json":"obj"}' | python -m json - { - "json": "obj" - } - $ echo '{ 1.2:3.4}' | python -m json - Expecting property name enclosed in double quotes: line 1 column 3 (char 2) -""" -__version__ = '2.0.9' -__all__ = [ - 'dump', 'dumps', 'load', 'loads', - 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder', -] - -__author__ = 'Bob Ippolito <bob@redivi.com>' - -from .decoder import JSONDecoder, JSONDecodeError -from .encoder import JSONEncoder -import codecs - -_default_encoder = JSONEncoder( - skipkeys=False, - ensure_ascii=True, - check_circular=True, - allow_nan=True, - indent=None, - separators=None, - default=None, -) - -def dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, - allow_nan=True, cls=None, indent=None, separators=None, - default=None, sort_keys=False, **kw): - """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a - ``.write()``-supporting file-like object). - - If ``skipkeys`` is true then ``dict`` keys that are not basic types - (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped - instead of raising a ``TypeError``. - - If ``ensure_ascii`` is false, then the strings written to ``fp`` can - contain non-ASCII and non-printable characters if they appear in strings - contained in ``obj``. Otherwise, all such characters are escaped in JSON - strings. - - If ``check_circular`` is false, then the circular reference check - for container types will be skipped and a circular reference will - result in an ``RecursionError`` (or worse). - - If ``allow_nan`` is false, then it will be a ``ValueError`` to - serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) - in strict compliance of the JSON specification, instead of using the - JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). - - If ``indent`` is a non-negative integer, then JSON array elements and - object members will be pretty-printed with that indent level. An indent - level of 0 will only insert newlines. ``None`` is the most compact - representation. - - If specified, ``separators`` should be an ``(item_separator, - key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is - ``None`` and ``(',', ': ')`` otherwise. To get the most compact JSON - representation, you should specify ``(',', ':')`` to eliminate - whitespace. - - ``default(obj)`` is a function that should return a serializable version - of obj or raise TypeError. The default simply raises TypeError. - - If *sort_keys* is true (default: ``False``), then the output of - dictionaries will be sorted by key. - - To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the - ``.default()`` method to serialize additional types), specify it with - the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. - - """ - # cached encoder - if (not skipkeys and ensure_ascii and - check_circular and allow_nan and - cls is None and indent is None and separators is None and - default is None and not sort_keys and not kw): - iterable = _default_encoder.iterencode(obj) - else: - if cls is None: - cls = JSONEncoder - iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii, - check_circular=check_circular, allow_nan=allow_nan, indent=indent, - separators=separators, - default=default, sort_keys=sort_keys, **kw).iterencode(obj) - # could accelerate with writelines in some versions of Python, at - # a debuggability cost - for chunk in iterable: - fp.write(chunk) - - -def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, - allow_nan=True, cls=None, indent=None, separators=None, - default=None, sort_keys=False, **kw): - """Serialize ``obj`` to a JSON formatted ``str``. - - If ``skipkeys`` is true then ``dict`` keys that are not basic types - (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped - instead of raising a ``TypeError``. - - If ``ensure_ascii`` is false, then the return value can contain - non-ASCII and non-printable characters if they appear in strings - contained in ``obj``. Otherwise, all such characters are escaped in - JSON strings. - - If ``check_circular`` is false, then the circular reference check - for container types will be skipped and a circular reference will - result in an ``RecursionError`` (or worse). - - If ``allow_nan`` is false, then it will be a ``ValueError`` to - serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in - strict compliance of the JSON specification, instead of using the - JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). - - If ``indent`` is a non-negative integer, then JSON array elements and - object members will be pretty-printed with that indent level. An indent - level of 0 will only insert newlines. ``None`` is the most compact - representation. - - If specified, ``separators`` should be an ``(item_separator, - key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is - ``None`` and ``(',', ': ')`` otherwise. To get the most compact JSON - representation, you should specify ``(',', ':')`` to eliminate - whitespace. - - ``default(obj)`` is a function that should return a serializable version - of obj or raise TypeError. The default simply raises TypeError. - - If *sort_keys* is true (default: ``False``), then the output of - dictionaries will be sorted by key. - - To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the - ``.default()`` method to serialize additional types), specify it with - the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. - - """ - # cached encoder - if (not skipkeys and ensure_ascii and - check_circular and allow_nan and - cls is None and indent is None and separators is None and - default is None and not sort_keys and not kw): - return _default_encoder.encode(obj) - if cls is None: - cls = JSONEncoder - return cls( - skipkeys=skipkeys, ensure_ascii=ensure_ascii, - check_circular=check_circular, allow_nan=allow_nan, indent=indent, - separators=separators, default=default, sort_keys=sort_keys, - **kw).encode(obj) - - -_default_decoder = JSONDecoder(object_hook=None, object_pairs_hook=None) - - -def detect_encoding(b): - bstartswith = b.startswith - if bstartswith((codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE)): - return 'utf-32' - if bstartswith((codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE)): - return 'utf-16' - if bstartswith(codecs.BOM_UTF8): - return 'utf-8-sig' - - if len(b) >= 4: - if not b[0]: - # 00 00 -- -- - utf-32-be - # 00 XX -- -- - utf-16-be - return 'utf-16-be' if b[1] else 'utf-32-be' - if not b[1]: - # XX 00 00 00 - utf-32-le - # XX 00 00 XX - utf-16-le - # XX 00 XX -- - utf-16-le - return 'utf-16-le' if b[2] or b[3] else 'utf-32-le' - elif len(b) == 2: - if not b[0]: - # 00 XX - utf-16-be - return 'utf-16-be' - if not b[1]: - # XX 00 - utf-16-le - return 'utf-16-le' - # default - return 'utf-8' - - -def load(fp, *, cls=None, object_hook=None, parse_float=None, - parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): - """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing - a JSON document) to a Python object. - - ``object_hook`` is an optional function that will be called with the - result of any object literal decode (a ``dict``). The return value of - ``object_hook`` will be used instead of the ``dict``. This feature - can be used to implement custom decoders (e.g. JSON-RPC class hinting). - - ``object_pairs_hook`` is an optional function that will be called with - the result of any object literal decoded with an ordered list of pairs. - The return value of ``object_pairs_hook`` will be used instead of the - ``dict``. This feature can be used to implement custom decoders. If - ``object_hook`` is also defined, the ``object_pairs_hook`` takes - priority. - - To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` - kwarg; otherwise ``JSONDecoder`` is used. - """ - return loads(fp.read(), - cls=cls, object_hook=object_hook, - parse_float=parse_float, parse_int=parse_int, - parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) - - -def loads(s, *, cls=None, object_hook=None, parse_float=None, - parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): - """Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance - containing a JSON document) to a Python object. - - ``object_hook`` is an optional function that will be called with the - result of any object literal decode (a ``dict``). The return value of - ``object_hook`` will be used instead of the ``dict``. This feature - can be used to implement custom decoders (e.g. JSON-RPC class hinting). - - ``object_pairs_hook`` is an optional function that will be called with - the result of any object literal decoded with an ordered list of pairs. - The return value of ``object_pairs_hook`` will be used instead of the - ``dict``. This feature can be used to implement custom decoders. If - ``object_hook`` is also defined, the ``object_pairs_hook`` takes - priority. - - ``parse_float``, if specified, will be called with the string - of every JSON float to be decoded. By default this is equivalent to - float(num_str). This can be used to use another datatype or parser - for JSON floats (e.g. decimal.Decimal). - - ``parse_int``, if specified, will be called with the string - of every JSON int to be decoded. By default this is equivalent to - int(num_str). This can be used to use another datatype or parser - for JSON integers (e.g. float). - - ``parse_constant``, if specified, will be called with one of the - following strings: -Infinity, Infinity, NaN. - This can be used to raise an exception if invalid JSON numbers - are encountered. - - To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` - kwarg; otherwise ``JSONDecoder`` is used. - """ - if isinstance(s, str): - if s.startswith('\ufeff'): - raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)", - s, 0) - else: - if not isinstance(s, (bytes, bytearray)): - raise TypeError(f'the JSON object must be str, bytes or bytearray, ' - f'not {s.__class__.__name__}') - s = s.decode(detect_encoding(s), 'surrogatepass') - - if (cls is None and object_hook is None and - parse_int is None and parse_float is None and - parse_constant is None and object_pairs_hook is None and not kw): - return _default_decoder.decode(s) - if cls is None: - cls = JSONDecoder - if object_hook is not None: - kw['object_hook'] = object_hook - if object_pairs_hook is not None: - kw['object_pairs_hook'] = object_pairs_hook - if parse_float is not None: - kw['parse_float'] = parse_float - if parse_int is not None: - kw['parse_int'] = parse_int - if parse_constant is not None: - kw['parse_constant'] = parse_constant - return cls(**kw).decode(s) diff --git a/Python314_4_x86_Template/Lib/json/__main__.py b/Python314_4_x86_Template/Lib/json/__main__.py deleted file mode 100644 index 1808eaddb..000000000 --- a/Python314_4_x86_Template/Lib/json/__main__.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Command-line tool to validate and pretty-print JSON - -Usage:: - - $ echo '{"json":"obj"}' | python -m json - { - "json": "obj" - } - $ echo '{ 1.2:3.4}' | python -m json - Expecting property name enclosed in double quotes: line 1 column 3 (char 2) - -""" -import json.tool - - -if __name__ == '__main__': - try: - json.tool.main() - except BrokenPipeError as exc: - raise SystemExit(exc.errno) diff --git a/Python314_4_x86_Template/Lib/json/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/json/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index ea3156d2802ec3798784afbb032c34559f5f86ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14221 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 diff --git a/Python314_4_x86_Template/Lib/json/__pycache__/decoder.cpython-314.pyc b/Python314_4_x86_Template/Lib/json/__pycache__/decoder.cpython-314.pyc deleted file mode 100644 index f286b55a09d38e8e31a17fd8b16bb274188c4a35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14525 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 AN&o-= diff --git a/Python314_4_x86_Template/Lib/json/__pycache__/encoder.cpython-314.pyc b/Python314_4_x86_Template/Lib/json/__pycache__/encoder.cpython-314.pyc deleted file mode 100644 index 9ba43b61dfdfb0533e1eb2185d7997276b65c44a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17099 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 PuGM|8-1=@AkMREhiLi;; diff --git a/Python314_4_x86_Template/Lib/json/__pycache__/scanner.cpython-314.pyc b/Python314_4_x86_Template/Lib/json/__pycache__/scanner.cpython-314.pyc deleted file mode 100644 index 98f959fdd848a6651bc65d7eaf6e4d8ca42e2c4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3614 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 diff --git a/Python314_4_x86_Template/Lib/json/decoder.py b/Python314_4_x86_Template/Lib/json/decoder.py deleted file mode 100644 index 92ad63525..000000000 --- a/Python314_4_x86_Template/Lib/json/decoder.py +++ /dev/null @@ -1,364 +0,0 @@ -"""Implementation of JSONDecoder -""" -import re - -from json import scanner -try: - from _json import scanstring as c_scanstring -except ImportError: - c_scanstring = None - -__all__ = ['JSONDecoder', 'JSONDecodeError'] - -FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL - -NaN = float('nan') -PosInf = float('inf') -NegInf = float('-inf') - - -class JSONDecodeError(ValueError): - """Subclass of ValueError with the following additional properties: - - msg: The unformatted error message - doc: The JSON document being parsed - pos: The start index of doc where parsing failed - lineno: The line corresponding to pos - colno: The column corresponding to pos - - """ - # Note that this exception is used from _json - def __init__(self, msg, doc, pos): - lineno = doc.count('\n', 0, pos) + 1 - colno = pos - doc.rfind('\n', 0, pos) - errmsg = '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos) - ValueError.__init__(self, errmsg) - self.msg = msg - self.doc = doc - self.pos = pos - self.lineno = lineno - self.colno = colno - - def __reduce__(self): - return self.__class__, (self.msg, self.doc, self.pos) - - -_CONSTANTS = { - '-Infinity': NegInf, - 'Infinity': PosInf, - 'NaN': NaN, -} - - -HEXDIGITS = re.compile(r'[0-9A-Fa-f]{4}', FLAGS) -STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS) -BACKSLASH = { - '"': '"', '\\': '\\', '/': '/', - 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', -} - -def _decode_uXXXX(s, pos, _m=HEXDIGITS.match): - esc = _m(s, pos + 1) - if esc is not None: - try: - return int(esc.group(), 16) - except ValueError: - pass - msg = "Invalid \\uXXXX escape" - raise JSONDecodeError(msg, s, pos) - -def py_scanstring(s, end, strict=True, - _b=BACKSLASH, _m=STRINGCHUNK.match): - """Scan the string s for a JSON string. End is the index of the - character in s after the quote that started the JSON string. - Unescapes all valid JSON string escape sequences and raises ValueError - on attempt to decode an invalid string. If strict is False then literal - control characters are allowed in the string. - - Returns a tuple of the decoded string and the index of the character in s - after the end quote.""" - chunks = [] - _append = chunks.append - begin = end - 1 - while 1: - chunk = _m(s, end) - if chunk is None: - raise JSONDecodeError("Unterminated string starting at", s, begin) - end = chunk.end() - content, terminator = chunk.groups() - # Content is contains zero or more unescaped string characters - if content: - _append(content) - # Terminator is the end of string, a literal control character, - # or a backslash denoting that an escape sequence follows - if terminator == '"': - break - elif terminator != '\\': - if strict: - #msg = "Invalid control character %r at" % (terminator,) - msg = "Invalid control character {0!r} at".format(terminator) - raise JSONDecodeError(msg, s, end) - else: - _append(terminator) - continue - try: - esc = s[end] - except IndexError: - raise JSONDecodeError("Unterminated string starting at", - s, begin) from None - # If not a unicode escape sequence, must be in the lookup table - if esc != 'u': - try: - char = _b[esc] - except KeyError: - msg = "Invalid \\escape: {0!r}".format(esc) - raise JSONDecodeError(msg, s, end) - end += 1 - else: - uni = _decode_uXXXX(s, end) - end += 5 - if 0xd800 <= uni <= 0xdbff and s[end:end + 2] == '\\u': - uni2 = _decode_uXXXX(s, end + 1) - if 0xdc00 <= uni2 <= 0xdfff: - uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00)) - end += 6 - char = chr(uni) - _append(char) - return ''.join(chunks), end - - -# Use speedup if available -scanstring = c_scanstring or py_scanstring - -WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS) -WHITESPACE_STR = ' \t\n\r' - - -def JSONObject(s_and_end, strict, scan_once, object_hook, object_pairs_hook, - memo=None, _w=WHITESPACE.match, _ws=WHITESPACE_STR): - s, end = s_and_end - pairs = [] - pairs_append = pairs.append - # Backwards compatibility - if memo is None: - memo = {} - memo_get = memo.setdefault - # Use a slice to prevent IndexError from being raised, the following - # check will raise a more specific ValueError if the string is empty - nextchar = s[end:end + 1] - # Normally we expect nextchar == '"' - if nextchar != '"': - if nextchar in _ws: - end = _w(s, end).end() - nextchar = s[end:end + 1] - # Trivial empty object - if nextchar == '}': - if object_pairs_hook is not None: - result = object_pairs_hook(pairs) - return result, end + 1 - pairs = {} - if object_hook is not None: - pairs = object_hook(pairs) - return pairs, end + 1 - elif nextchar != '"': - raise JSONDecodeError( - "Expecting property name enclosed in double quotes", s, end) - end += 1 - while True: - key, end = scanstring(s, end, strict) - key = memo_get(key, key) - # To skip some function call overhead we optimize the fast paths where - # the JSON key separator is ": " or just ":". - if s[end:end + 1] != ':': - end = _w(s, end).end() - if s[end:end + 1] != ':': - raise JSONDecodeError("Expecting ':' delimiter", s, end) - end += 1 - - try: - if s[end] in _ws: - end += 1 - if s[end] in _ws: - end = _w(s, end + 1).end() - except IndexError: - pass - - try: - value, end = scan_once(s, end) - except StopIteration as err: - raise JSONDecodeError("Expecting value", s, err.value) from None - pairs_append((key, value)) - try: - nextchar = s[end] - if nextchar in _ws: - end = _w(s, end + 1).end() - nextchar = s[end] - except IndexError: - nextchar = '' - end += 1 - - if nextchar == '}': - break - elif nextchar != ',': - raise JSONDecodeError("Expecting ',' delimiter", s, end - 1) - comma_idx = end - 1 - end = _w(s, end).end() - nextchar = s[end:end + 1] - end += 1 - if nextchar != '"': - if nextchar == '}': - raise JSONDecodeError("Illegal trailing comma before end of object", s, comma_idx) - raise JSONDecodeError( - "Expecting property name enclosed in double quotes", s, end - 1) - if object_pairs_hook is not None: - result = object_pairs_hook(pairs) - return result, end - pairs = dict(pairs) - if object_hook is not None: - pairs = object_hook(pairs) - return pairs, end - -def JSONArray(s_and_end, scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR): - s, end = s_and_end - values = [] - nextchar = s[end:end + 1] - if nextchar in _ws: - end = _w(s, end + 1).end() - nextchar = s[end:end + 1] - # Look-ahead for trivial empty array - if nextchar == ']': - return values, end + 1 - _append = values.append - while True: - try: - value, end = scan_once(s, end) - except StopIteration as err: - raise JSONDecodeError("Expecting value", s, err.value) from None - _append(value) - nextchar = s[end:end + 1] - if nextchar in _ws: - end = _w(s, end + 1).end() - nextchar = s[end:end + 1] - end += 1 - if nextchar == ']': - break - elif nextchar != ',': - raise JSONDecodeError("Expecting ',' delimiter", s, end - 1) - comma_idx = end - 1 - try: - if s[end] in _ws: - end += 1 - if s[end] in _ws: - end = _w(s, end + 1).end() - nextchar = s[end:end + 1] - except IndexError: - pass - if nextchar == ']': - raise JSONDecodeError("Illegal trailing comma before end of array", s, comma_idx) - - return values, end - - -class JSONDecoder(object): - """Simple JSON <https://json.org> decoder - - Performs the following translations in decoding by default: - - +---------------+-------------------+ - | JSON | Python | - +===============+===================+ - | object | dict | - +---------------+-------------------+ - | array | list | - +---------------+-------------------+ - | string | str | - +---------------+-------------------+ - | number (int) | int | - +---------------+-------------------+ - | number (real) | float | - +---------------+-------------------+ - | true | True | - +---------------+-------------------+ - | false | False | - +---------------+-------------------+ - | null | None | - +---------------+-------------------+ - - It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as - their corresponding ``float`` values, which is outside the JSON spec. - - """ - - def __init__(self, *, object_hook=None, parse_float=None, - parse_int=None, parse_constant=None, strict=True, - object_pairs_hook=None): - """``object_hook``, if specified, will be called with the result - of every JSON object decoded and its return value will be used in - place of the given ``dict``. This can be used to provide custom - deserializations (e.g. to support JSON-RPC class hinting). - - ``object_pairs_hook``, if specified will be called with the result - of every JSON object decoded with an ordered list of pairs. The - return value of ``object_pairs_hook`` will be used instead of the - ``dict``. This feature can be used to implement custom decoders. - If ``object_hook`` is also defined, the ``object_pairs_hook`` takes - priority. - - ``parse_float``, if specified, will be called with the string - of every JSON float to be decoded. By default this is equivalent to - float(num_str). This can be used to use another datatype or parser - for JSON floats (e.g. decimal.Decimal). - - ``parse_int``, if specified, will be called with the string - of every JSON int to be decoded. By default this is equivalent to - int(num_str). This can be used to use another datatype or parser - for JSON integers (e.g. float). - - ``parse_constant``, if specified, will be called with one of the - following strings: -Infinity, Infinity, NaN. - This can be used to raise an exception if invalid JSON numbers - are encountered. - - If ``strict`` is false (true is the default), then control - characters will be allowed inside strings. Control characters in - this context are those with character codes in the 0-31 range, - including ``'\\t'`` (tab), ``'\\n'``, ``'\\r'`` and ``'\\0'``. - """ - self.object_hook = object_hook - self.parse_float = parse_float or float - self.parse_int = parse_int or int - self.parse_constant = parse_constant or _CONSTANTS.__getitem__ - self.strict = strict - self.object_pairs_hook = object_pairs_hook - self.parse_object = JSONObject - self.parse_array = JSONArray - self.parse_string = scanstring - self.memo = {} - self.scan_once = scanner.make_scanner(self) - - - def decode(self, s, _w=WHITESPACE.match): - """Return the Python representation of ``s`` (a ``str`` instance - containing a JSON document). - - """ - obj, end = self.raw_decode(s, idx=_w(s, 0).end()) - end = _w(s, end).end() - if end != len(s): - raise JSONDecodeError("Extra data", s, end) - return obj - - def raw_decode(self, s, idx=0): - """Decode a JSON document from ``s`` (a ``str`` beginning with - a JSON document) and return a 2-tuple of the Python - representation and the index in ``s`` where the document ended. - - This can be used to decode a JSON document from a string that may - have extraneous data at the end. - - """ - try: - obj, end = self.scan_once(s, idx) - except StopIteration as err: - raise JSONDecodeError("Expecting value", s, err.value) from None - return obj, end diff --git a/Python314_4_x86_Template/Lib/json/encoder.py b/Python314_4_x86_Template/Lib/json/encoder.py deleted file mode 100644 index 5cf6d64f3..000000000 --- a/Python314_4_x86_Template/Lib/json/encoder.py +++ /dev/null @@ -1,461 +0,0 @@ -"""Implementation of JSONEncoder -""" -import re - -try: - from _json import encode_basestring_ascii as c_encode_basestring_ascii -except ImportError: - c_encode_basestring_ascii = None -try: - from _json import encode_basestring as c_encode_basestring -except ImportError: - c_encode_basestring = None -try: - from _json import make_encoder as c_make_encoder -except ImportError: - c_make_encoder = None - -ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]') -ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])') -HAS_UTF8 = re.compile(b'[\x80-\xff]') -ESCAPE_DCT = { - '\\': '\\\\', - '"': '\\"', - '\b': '\\b', - '\f': '\\f', - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', -} -for i in range(0x20): - ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i)) - #ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,)) -del i - -INFINITY = float('inf') - -def py_encode_basestring(s): - """Return a JSON representation of a Python string - - """ - def replace(match): - return ESCAPE_DCT[match.group(0)] - return '"' + ESCAPE.sub(replace, s) + '"' - - -encode_basestring = (c_encode_basestring or py_encode_basestring) - - -def py_encode_basestring_ascii(s): - """Return an ASCII-only JSON representation of a Python string - - """ - def replace(match): - s = match.group(0) - try: - return ESCAPE_DCT[s] - except KeyError: - n = ord(s) - if n < 0x10000: - return '\\u{0:04x}'.format(n) - #return '\\u%04x' % (n,) - else: - # surrogate pair - n -= 0x10000 - s1 = 0xd800 | ((n >> 10) & 0x3ff) - s2 = 0xdc00 | (n & 0x3ff) - return '\\u{0:04x}\\u{1:04x}'.format(s1, s2) - return '"' + ESCAPE_ASCII.sub(replace, s) + '"' - - -encode_basestring_ascii = ( - c_encode_basestring_ascii or py_encode_basestring_ascii) - -class JSONEncoder(object): - """Extensible JSON <https://json.org> encoder for Python data structures. - - Supports the following objects and types by default: - - +-------------------+---------------+ - | Python | JSON | - +===================+===============+ - | dict | object | - +-------------------+---------------+ - | list, tuple | array | - +-------------------+---------------+ - | str | string | - +-------------------+---------------+ - | int, float | number | - +-------------------+---------------+ - | True | true | - +-------------------+---------------+ - | False | false | - +-------------------+---------------+ - | None | null | - +-------------------+---------------+ - - To extend this to recognize other objects, subclass and implement a - ``.default()`` method with another method that returns a serializable - object for ``o`` if possible, otherwise it should call the superclass - implementation (to raise ``TypeError``). - - """ - item_separator = ', ' - key_separator = ': ' - def __init__(self, *, skipkeys=False, ensure_ascii=True, - check_circular=True, allow_nan=True, sort_keys=False, - indent=None, separators=None, default=None): - """Constructor for JSONEncoder, with sensible defaults. - - If skipkeys is false, then it is a TypeError to attempt - encoding of keys that are not str, int, float, bool or None. - If skipkeys is True, such items are simply skipped. - - If ensure_ascii is true, the output is guaranteed to be str objects - with all incoming non-ASCII and non-printable characters escaped. - If ensure_ascii is false, the output can contain non-ASCII and - non-printable characters. - - If check_circular is true, then lists, dicts, and custom encoded - objects will be checked for circular references during encoding to - prevent an infinite recursion (which would cause an RecursionError). - Otherwise, no such check takes place. - - If allow_nan is true, then NaN, Infinity, and -Infinity will be - encoded as such. This behavior is not JSON specification compliant, - but is consistent with most JavaScript based encoders and decoders. - Otherwise, it will be a ValueError to encode such floats. - - If sort_keys is true, then the output of dictionaries will be - sorted by key; this is useful for regression tests to ensure - that JSON serializations can be compared on a day-to-day basis. - - If indent is a non-negative integer, then JSON array - elements and object members will be pretty-printed with that - indent level. An indent level of 0 will only insert newlines. - None is the most compact representation. - - If specified, separators should be an (item_separator, - key_separator) tuple. The default is (', ', ': ') if *indent* is - ``None`` and (',', ': ') otherwise. To get the most compact JSON - representation, you should specify (',', ':') to eliminate - whitespace. - - If specified, default is a function that gets called for objects - that can't otherwise be serialized. It should return a JSON - encodable version of the object or raise a ``TypeError``. - - """ - - self.skipkeys = skipkeys - self.ensure_ascii = ensure_ascii - self.check_circular = check_circular - self.allow_nan = allow_nan - self.sort_keys = sort_keys - self.indent = indent - if separators is not None: - self.item_separator, self.key_separator = separators - elif indent is not None: - self.item_separator = ',' - if default is not None: - self.default = default - - def default(self, o): - """Implement this method in a subclass such that it returns - a serializable object for ``o``, or calls the base implementation - (to raise a ``TypeError``). - - For example, to support arbitrary iterators, you could - implement default like this:: - - def default(self, o): - try: - iterable = iter(o) - except TypeError: - pass - else: - return list(iterable) - # Let the base class default method raise the TypeError - return super().default(o) - - """ - raise TypeError(f'Object of type {o.__class__.__name__} ' - f'is not JSON serializable') - - def encode(self, o): - """Return a JSON string representation of a Python data structure. - - >>> from json.encoder import JSONEncoder - >>> JSONEncoder().encode({"foo": ["bar", "baz"]}) - '{"foo": ["bar", "baz"]}' - - """ - # This is for extremely simple cases and benchmarks. - if isinstance(o, str): - if self.ensure_ascii: - return encode_basestring_ascii(o) - else: - return encode_basestring(o) - # This doesn't pass the iterator directly to ''.join() because the - # exceptions aren't as detailed. The list call should be roughly - # equivalent to the PySequence_Fast that ''.join() would do. - chunks = self.iterencode(o, _one_shot=True) - if not isinstance(chunks, (list, tuple)): - chunks = list(chunks) - return ''.join(chunks) - - def iterencode(self, o, _one_shot=False): - """Encode the given object and yield each string - representation as available. - - For example:: - - for chunk in JSONEncoder().iterencode(bigobject): - mysocket.write(chunk) - - """ - if self.check_circular: - markers = {} - else: - markers = None - if self.ensure_ascii: - _encoder = encode_basestring_ascii - else: - _encoder = encode_basestring - - def floatstr(o, allow_nan=self.allow_nan, - _repr=float.__repr__, _inf=INFINITY, _neginf=-INFINITY): - # Check for specials. Note that this type of test is processor - # and/or platform-specific, so do tests which don't depend on the - # internals. - - if o != o: - text = 'NaN' - elif o == _inf: - text = 'Infinity' - elif o == _neginf: - text = '-Infinity' - else: - return _repr(o) - - if not allow_nan: - raise ValueError( - "Out of range float values are not JSON compliant: " + - repr(o)) - - return text - - - if self.indent is None or isinstance(self.indent, str): - indent = self.indent - else: - indent = ' ' * self.indent - if _one_shot and c_make_encoder is not None: - _iterencode = c_make_encoder( - markers, self.default, _encoder, indent, - self.key_separator, self.item_separator, self.sort_keys, - self.skipkeys, self.allow_nan) - else: - _iterencode = _make_iterencode( - markers, self.default, _encoder, indent, floatstr, - self.key_separator, self.item_separator, self.sort_keys, - self.skipkeys, _one_shot) - return _iterencode(o, 0) - -def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, - _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot, - ## HACK: hand-optimized bytecode; turn globals into locals - ValueError=ValueError, - dict=dict, - float=float, - id=id, - int=int, - isinstance=isinstance, - list=list, - str=str, - tuple=tuple, - _intstr=int.__repr__, - ): - - def _iterencode_list(lst, _current_indent_level): - if not lst: - yield '[]' - return - if markers is not None: - markerid = id(lst) - if markerid in markers: - raise ValueError("Circular reference detected") - markers[markerid] = lst - buf = '[' - if _indent is not None: - _current_indent_level += 1 - newline_indent = '\n' + _indent * _current_indent_level - separator = _item_separator + newline_indent - buf += newline_indent - else: - newline_indent = None - separator = _item_separator - for i, value in enumerate(lst): - if i: - buf = separator - try: - if isinstance(value, str): - yield buf + _encoder(value) - elif value is None: - yield buf + 'null' - elif value is True: - yield buf + 'true' - elif value is False: - yield buf + 'false' - elif isinstance(value, int): - # Subclasses of int/float may override __repr__, but we still - # want to encode them as integers/floats in JSON. One example - # within the standard library is IntEnum. - yield buf + _intstr(value) - elif isinstance(value, float): - # see comment above for int - yield buf + _floatstr(value) - else: - yield buf - if isinstance(value, (list, tuple)): - chunks = _iterencode_list(value, _current_indent_level) - elif isinstance(value, dict): - chunks = _iterencode_dict(value, _current_indent_level) - else: - chunks = _iterencode(value, _current_indent_level) - yield from chunks - except GeneratorExit: - raise - except BaseException as exc: - exc.add_note(f'when serializing {type(lst).__name__} item {i}') - raise - if newline_indent is not None: - _current_indent_level -= 1 - yield '\n' + _indent * _current_indent_level - yield ']' - if markers is not None: - del markers[markerid] - - def _iterencode_dict(dct, _current_indent_level): - if not dct: - yield '{}' - return - if markers is not None: - markerid = id(dct) - if markerid in markers: - raise ValueError("Circular reference detected") - markers[markerid] = dct - yield '{' - if _indent is not None: - _current_indent_level += 1 - newline_indent = '\n' + _indent * _current_indent_level - item_separator = _item_separator + newline_indent - else: - newline_indent = None - item_separator = _item_separator - first = True - if _sort_keys: - items = sorted(dct.items()) - else: - items = dct.items() - for key, value in items: - if isinstance(key, str): - pass - # JavaScript is weakly typed for these, so it makes sense to - # also allow them. Many encoders seem to do something like this. - elif isinstance(key, float): - # see comment for int/float in _make_iterencode - key = _floatstr(key) - elif key is True: - key = 'true' - elif key is False: - key = 'false' - elif key is None: - key = 'null' - elif isinstance(key, int): - # see comment for int/float in _make_iterencode - key = _intstr(key) - elif _skipkeys: - continue - else: - raise TypeError(f'keys must be str, int, float, bool or None, ' - f'not {key.__class__.__name__}') - if first: - first = False - if newline_indent is not None: - yield newline_indent - else: - yield item_separator - yield _encoder(key) - yield _key_separator - try: - if isinstance(value, str): - yield _encoder(value) - elif value is None: - yield 'null' - elif value is True: - yield 'true' - elif value is False: - yield 'false' - elif isinstance(value, int): - # see comment for int/float in _make_iterencode - yield _intstr(value) - elif isinstance(value, float): - # see comment for int/float in _make_iterencode - yield _floatstr(value) - else: - if isinstance(value, (list, tuple)): - chunks = _iterencode_list(value, _current_indent_level) - elif isinstance(value, dict): - chunks = _iterencode_dict(value, _current_indent_level) - else: - chunks = _iterencode(value, _current_indent_level) - yield from chunks - except GeneratorExit: - raise - except BaseException as exc: - exc.add_note(f'when serializing {type(dct).__name__} item {key!r}') - raise - if not first and newline_indent is not None: - _current_indent_level -= 1 - yield '\n' + _indent * _current_indent_level - yield '}' - if markers is not None: - del markers[markerid] - - def _iterencode(o, _current_indent_level): - if isinstance(o, str): - yield _encoder(o) - elif o is None: - yield 'null' - elif o is True: - yield 'true' - elif o is False: - yield 'false' - elif isinstance(o, int): - # see comment for int/float in _make_iterencode - yield _intstr(o) - elif isinstance(o, float): - # see comment for int/float in _make_iterencode - yield _floatstr(o) - elif isinstance(o, (list, tuple)): - yield from _iterencode_list(o, _current_indent_level) - elif isinstance(o, dict): - yield from _iterencode_dict(o, _current_indent_level) - else: - if markers is not None: - markerid = id(o) - if markerid in markers: - raise ValueError("Circular reference detected") - markers[markerid] = o - newobj = _default(o) - try: - yield from _iterencode(newobj, _current_indent_level) - except GeneratorExit: - raise - except BaseException as exc: - exc.add_note(f'when serializing {type(o).__name__} object') - raise - if markers is not None: - del markers[markerid] - return _iterencode diff --git a/Python314_4_x86_Template/Lib/json/scanner.py b/Python314_4_x86_Template/Lib/json/scanner.py deleted file mode 100644 index 090897515..000000000 --- a/Python314_4_x86_Template/Lib/json/scanner.py +++ /dev/null @@ -1,73 +0,0 @@ -"""JSON token scanner -""" -import re -try: - from _json import make_scanner as c_make_scanner -except ImportError: - c_make_scanner = None - -__all__ = ['make_scanner'] - -NUMBER_RE = re.compile( - r'(-?(?:0|[1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?', - (re.VERBOSE | re.MULTILINE | re.DOTALL)) - -def py_make_scanner(context): - parse_object = context.parse_object - parse_array = context.parse_array - parse_string = context.parse_string - match_number = NUMBER_RE.match - strict = context.strict - parse_float = context.parse_float - parse_int = context.parse_int - parse_constant = context.parse_constant - object_hook = context.object_hook - object_pairs_hook = context.object_pairs_hook - memo = context.memo - - def _scan_once(string, idx): - try: - nextchar = string[idx] - except IndexError: - raise StopIteration(idx) from None - - if nextchar == '"': - return parse_string(string, idx + 1, strict) - elif nextchar == '{': - return parse_object((string, idx + 1), strict, - _scan_once, object_hook, object_pairs_hook, memo) - elif nextchar == '[': - return parse_array((string, idx + 1), _scan_once) - elif nextchar == 'n' and string[idx:idx + 4] == 'null': - return None, idx + 4 - elif nextchar == 't' and string[idx:idx + 4] == 'true': - return True, idx + 4 - elif nextchar == 'f' and string[idx:idx + 5] == 'false': - return False, idx + 5 - - m = match_number(string, idx) - if m is not None: - integer, frac, exp = m.groups() - if frac or exp: - res = parse_float(integer + (frac or '') + (exp or '')) - else: - res = parse_int(integer) - return res, m.end() - elif nextchar == 'N' and string[idx:idx + 3] == 'NaN': - return parse_constant('NaN'), idx + 3 - elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity': - return parse_constant('Infinity'), idx + 8 - elif nextchar == '-' and string[idx:idx + 9] == '-Infinity': - return parse_constant('-Infinity'), idx + 9 - else: - raise StopIteration(idx) - - def scan_once(string, idx): - try: - return _scan_once(string, idx) - finally: - memo.clear() - - return scan_once - -make_scanner = c_make_scanner or py_make_scanner diff --git a/Python314_4_x86_Template/Lib/json/tool.py b/Python314_4_x86_Template/Lib/json/tool.py deleted file mode 100644 index 1967817ad..000000000 --- a/Python314_4_x86_Template/Lib/json/tool.py +++ /dev/null @@ -1,121 +0,0 @@ -"""Command-line tool to validate and pretty-print JSON - -See `json.__main__` for a usage example (invocation as -`python -m json.tool` is supported for backwards compatibility). -""" -import argparse -import json -import re -import sys -from _colorize import get_theme, can_colorize - - -# The string we are colorizing is valid JSON, -# so we can use a looser but simpler regex to match -# the various parts, most notably strings and numbers, -# where the regex given by the spec is much more complex. -_color_pattern = re.compile(r''' - (?P<key>"(\\.|[^"\\])*")(?=:) | - (?P<string>"(\\.|[^"\\])*") | - (?P<number>NaN|-?Infinity|[0-9\-+.Ee]+) | - (?P<boolean>true|false) | - (?P<null>null) -''', re.VERBOSE) - -_group_to_theme_color = { - "key": "definition", - "string": "string", - "number": "number", - "boolean": "keyword", - "null": "keyword", -} - - -def _colorize_json(json_str, theme): - def _replace_match_callback(match): - for group, color in _group_to_theme_color.items(): - if m := match.group(group): - return f"{theme[color]}{m}{theme.reset}" - return match.group() - - return re.sub(_color_pattern, _replace_match_callback, json_str) - - -def main(): - description = ('A simple command line interface for json module ' - 'to validate and pretty-print JSON objects.') - parser = argparse.ArgumentParser(description=description, color=True) - parser.add_argument('infile', nargs='?', - help='a JSON file to be validated or pretty-printed', - default='-') - parser.add_argument('outfile', nargs='?', - help='write the output of infile to outfile', - default=None) - parser.add_argument('--sort-keys', action='store_true', default=False, - help='sort the output of dictionaries alphabetically by key') - parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false', - help='disable escaping of non-ASCII characters') - parser.add_argument('--json-lines', action='store_true', default=False, - help='parse input using the JSON Lines format. ' - 'Use with --no-indent or --compact to produce valid JSON Lines output.') - group = parser.add_mutually_exclusive_group() - group.add_argument('--indent', default=4, type=int, - help='separate items with newlines and use this number ' - 'of spaces for indentation') - group.add_argument('--tab', action='store_const', dest='indent', - const='\t', help='separate items with newlines and use ' - 'tabs for indentation') - group.add_argument('--no-indent', action='store_const', dest='indent', - const=None, - help='separate items with spaces rather than newlines') - group.add_argument('--compact', action='store_true', - help='suppress all whitespace separation (most compact)') - options = parser.parse_args() - - dump_args = { - 'sort_keys': options.sort_keys, - 'indent': options.indent, - 'ensure_ascii': options.ensure_ascii, - } - if options.compact: - dump_args['indent'] = None - dump_args['separators'] = ',', ':' - - try: - if options.infile == '-': - infile = sys.stdin - else: - infile = open(options.infile, encoding='utf-8') - try: - if options.json_lines: - objs = (json.loads(line) for line in infile) - else: - objs = (json.load(infile),) - finally: - if infile is not sys.stdin: - infile.close() - - if options.outfile is None: - outfile = sys.stdout - else: - outfile = open(options.outfile, 'w', encoding='utf-8') - with outfile: - if can_colorize(file=outfile): - t = get_theme(tty_file=outfile).syntax - for obj in objs: - json_str = json.dumps(obj, **dump_args) - outfile.write(_colorize_json(json_str, t)) - outfile.write('\n') - else: - for obj in objs: - json.dump(obj, outfile, **dump_args) - outfile.write('\n') - except ValueError as e: - raise SystemExit(e) - - -if __name__ == '__main__': - try: - main() - except BrokenPipeError as exc: - raise SystemExit(exc.errno) diff --git a/Python314_4_x86_Template/Lib/keyword.py b/Python314_4_x86_Template/Lib/keyword.py deleted file mode 100644 index e22c83783..000000000 --- a/Python314_4_x86_Template/Lib/keyword.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Keywords (from "Grammar/python.gram") - -This file is automatically generated; please don't muck it up! - -To update the symbols in this file, 'cd' to the top directory of -the python source tree and run: - - PYTHONPATH=Tools/peg_generator python3 -m pegen.keywordgen \ - Grammar/python.gram \ - Grammar/Tokens \ - Lib/keyword.py - -Alternatively, you can run 'make regen-keyword'. -""" - -__all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"] - -kwlist = [ - 'False', - 'None', - 'True', - 'and', - 'as', - 'assert', - 'async', - 'await', - 'break', - 'class', - 'continue', - 'def', - 'del', - 'elif', - 'else', - 'except', - 'finally', - 'for', - 'from', - 'global', - 'if', - 'import', - 'in', - 'is', - 'lambda', - 'nonlocal', - 'not', - 'or', - 'pass', - 'raise', - 'return', - 'try', - 'while', - 'with', - 'yield' -] - -softkwlist = [ - '_', - 'case', - 'match', - 'type' -] - -iskeyword = frozenset(kwlist).__contains__ -issoftkeyword = frozenset(softkwlist).__contains__ diff --git a/Python314_4_x86_Template/Lib/linecache.py b/Python314_4_x86_Template/Lib/linecache.py deleted file mode 100644 index ef3b2d913..000000000 --- a/Python314_4_x86_Template/Lib/linecache.py +++ /dev/null @@ -1,256 +0,0 @@ -"""Cache lines from Python source files. - -This is intended to read lines from modules imported -- hence if a filename -is not found, it will look down the module search path for a file by -that name. -""" - -__all__ = ["getline", "clearcache", "checkcache", "lazycache"] - - -# The cache. Maps filenames to either a thunk which will provide source code, -# or a tuple (size, mtime, lines, fullname) once loaded. -cache = {} -_interactive_cache = {} - - -def clearcache(): - """Clear the cache entirely.""" - cache.clear() - - -def getline(filename, lineno, module_globals=None): - """Get a line for a Python source file from the cache. - Update the cache if it doesn't contain an entry for this file already.""" - - lines = getlines(filename, module_globals) - if 1 <= lineno <= len(lines): - return lines[lineno - 1] - return '' - - -def getlines(filename, module_globals=None): - """Get the lines for a Python source file from the cache. - Update the cache if it doesn't contain an entry for this file already.""" - - entry = cache.get(filename, None) - if entry is not None and len(entry) != 1: - return entry[2] - - try: - return updatecache(filename, module_globals) - except MemoryError: - clearcache() - return [] - - -def _getline_from_code(filename, lineno): - lines = _getlines_from_code(filename) - if 1 <= lineno <= len(lines): - return lines[lineno - 1] - return '' - -def _make_key(code): - return (code.co_filename, code.co_qualname, code.co_firstlineno) - -def _getlines_from_code(code): - code_id = _make_key(code) - entry = _interactive_cache.get(code_id, None) - if entry is not None and len(entry) != 1: - return entry[2] - return [] - - -def _source_unavailable(filename): - """Return True if the source code is unavailable for such file name.""" - return ( - not filename - or (filename.startswith('<') - and filename.endswith('>') - and not filename.startswith('<frozen ')) - ) - - -def checkcache(filename=None): - """Discard cache entries that are out of date. - (This is not checked upon each call!)""" - - if filename is None: - # get keys atomically - filenames = cache.copy().keys() - else: - filenames = [filename] - - for filename in filenames: - entry = cache.get(filename, None) - if entry is None or len(entry) == 1: - # lazy cache entry, leave it lazy. - continue - size, mtime, lines, fullname = entry - if mtime is None: - continue # no-op for files loaded via a __loader__ - try: - # This import can fail if the interpreter is shutting down - import os - except ImportError: - return - try: - stat = os.stat(fullname) - except (OSError, ValueError): - cache.pop(filename, None) - continue - if size != stat.st_size or mtime != stat.st_mtime: - cache.pop(filename, None) - - -def updatecache(filename, module_globals=None): - """Update a cache entry and return its list of lines. - If something's wrong, print a message, discard the cache entry, - and return an empty list.""" - - # These imports are not at top level because linecache is in the critical - # path of the interpreter startup and importing os and sys take a lot of time - # and slows down the startup sequence. - try: - import os - import sys - import tokenize - except ImportError: - # These import can fail if the interpreter is shutting down - return [] - - entry = cache.pop(filename, None) - if _source_unavailable(filename): - return [] - - if filename.startswith('<frozen '): - # This is a frozen module, so we need to use the filename - # from the module globals. - if module_globals is None: - return [] - - fullname = module_globals.get('__file__') - if fullname is None: - return [] - else: - fullname = filename - try: - stat = os.stat(fullname) - except OSError: - basename = filename - - # Realise a lazy loader based lookup if there is one - # otherwise try to lookup right now. - lazy_entry = entry if entry is not None and len(entry) == 1 else None - if lazy_entry is None: - lazy_entry = _make_lazycache_entry(filename, module_globals) - if lazy_entry is not None: - try: - data = lazy_entry[0]() - except (ImportError, OSError): - pass - else: - if data is None: - # No luck, the PEP302 loader cannot find the source - # for this module. - return [] - entry = ( - len(data), - None, - [line + '\n' for line in data.splitlines()], - fullname - ) - cache[filename] = entry - return entry[2] - - # Try looking through the module search path, which is only useful - # when handling a relative filename. - if os.path.isabs(filename): - return [] - - for dirname in sys.path: - try: - fullname = os.path.join(dirname, basename) - except (TypeError, AttributeError): - # Not sufficiently string-like to do anything useful with. - continue - try: - stat = os.stat(fullname) - break - except (OSError, ValueError): - pass - else: - return [] - except ValueError: # may be raised by os.stat() - return [] - try: - with tokenize.open(fullname) as fp: - lines = fp.readlines() - except (OSError, UnicodeDecodeError, SyntaxError): - return [] - if not lines: - lines = ['\n'] - elif not lines[-1].endswith('\n'): - lines[-1] += '\n' - size, mtime = stat.st_size, stat.st_mtime - cache[filename] = size, mtime, lines, fullname - return lines - - -def lazycache(filename, module_globals): - """Seed the cache for filename with module_globals. - - The module loader will be asked for the source only when getlines is - called, not immediately. - - If there is an entry in the cache already, it is not altered. - - :return: True if a lazy load is registered in the cache, - otherwise False. To register such a load a module loader with a - get_source method must be found, the filename must be a cacheable - filename, and the filename must not be already cached. - """ - entry = cache.get(filename, None) - if entry is not None: - return len(entry) == 1 - - lazy_entry = _make_lazycache_entry(filename, module_globals) - if lazy_entry is not None: - cache[filename] = lazy_entry - return True - return False - - -def _make_lazycache_entry(filename, module_globals): - if not filename or (filename.startswith('<') and filename.endswith('>')): - return None - # Try for a __loader__, if available - if module_globals and '__name__' in module_globals: - spec = module_globals.get('__spec__') - name = getattr(spec, 'name', None) or module_globals['__name__'] - loader = getattr(spec, 'loader', None) - if loader is None: - loader = module_globals.get('__loader__') - get_source = getattr(loader, 'get_source', None) - - if name and get_source: - def get_lines(name=name, *args, **kwargs): - return get_source(name, *args, **kwargs) - return (get_lines,) - return None - - - -def _register_code(code, string, name): - entry = (len(string), - None, - [line + '\n' for line in string.splitlines()], - name) - stack = [code] - while stack: - code = stack.pop() - for const in code.co_consts: - if isinstance(const, type(code)): - stack.append(const) - key = _make_key(code) - _interactive_cache[key] = entry diff --git a/Python314_4_x86_Template/Lib/locale.py b/Python314_4_x86_Template/Lib/locale.py deleted file mode 100644 index dfedc6386..000000000 --- a/Python314_4_x86_Template/Lib/locale.py +++ /dev/null @@ -1,1783 +0,0 @@ -"""Locale support module. - -The module provides low-level access to the C lib's locale APIs and adds high -level number formatting APIs as well as a locale aliasing engine to complement -these. - -The aliasing engine includes support for many commonly used locale names and -maps them to values suitable for passing to the C lib's setlocale() function. It -also includes default encodings for all supported locale names. - -""" - -import sys -import encodings -import encodings.aliases -import _collections_abc -from builtins import str as _builtin_str -import functools - -# Try importing the _locale module. -# -# If this fails, fall back on a basic 'C' locale emulation. - -# Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before -# trying the import. So __all__ is also fiddled at the end of the file. -__all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error", - "setlocale", "localeconv", "strcoll", "strxfrm", - "str", "atof", "atoi", "format_string", "currency", - "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY", - "LC_NUMERIC", "LC_ALL", "CHAR_MAX", "getencoding"] - -def _strcoll(a,b): - """ strcoll(string,string) -> int. - Compares two strings according to the locale. - """ - return (a > b) - (a < b) - -def _strxfrm(s): - """ strxfrm(string) -> string. - Returns a string that behaves for cmp locale-aware. - """ - return s - -try: - - from _locale import * - -except ImportError: - - # Locale emulation - - CHAR_MAX = 127 - LC_ALL = 6 - LC_COLLATE = 3 - LC_CTYPE = 0 - LC_MESSAGES = 5 - LC_MONETARY = 4 - LC_NUMERIC = 1 - LC_TIME = 2 - Error = ValueError - - def localeconv(): - """ localeconv() -> dict. - Returns numeric and monetary locale-specific parameters. - """ - # 'C' locale default values - return {'grouping': [127], - 'currency_symbol': '', - 'n_sign_posn': 127, - 'p_cs_precedes': 127, - 'n_cs_precedes': 127, - 'mon_grouping': [], - 'n_sep_by_space': 127, - 'decimal_point': '.', - 'negative_sign': '', - 'positive_sign': '', - 'p_sep_by_space': 127, - 'int_curr_symbol': '', - 'p_sign_posn': 127, - 'thousands_sep': '', - 'mon_thousands_sep': '', - 'frac_digits': 127, - 'mon_decimal_point': '', - 'int_frac_digits': 127} - - def setlocale(category, value=None): - """ setlocale(integer,string=None) -> string. - Activates/queries locale processing. - """ - if value not in (None, '', 'C'): - raise Error('_locale emulation only supports "C" locale') - return 'C' - -# These may or may not exist in _locale, so be sure to set them. -if 'strxfrm' not in globals(): - strxfrm = _strxfrm -if 'strcoll' not in globals(): - strcoll = _strcoll - - -_localeconv = localeconv - -# With this dict, you can override some items of localeconv's return value. -# This is useful for testing purposes. -_override_localeconv = {} - -@functools.wraps(_localeconv) -def localeconv(): - d = _localeconv() - if _override_localeconv: - d.update(_override_localeconv) - return d - - -### Number formatting APIs - -# Author: Martin von Loewis -# improved by Georg Brandl - -# Iterate over grouping intervals -def _grouping_intervals(grouping): - last_interval = None - for interval in grouping: - # if grouping is -1, we are done - if interval == CHAR_MAX: - return - # 0: re-use last group ad infinitum - if interval == 0: - if last_interval is None: - raise ValueError("invalid grouping") - while True: - yield last_interval - yield interval - last_interval = interval - -#perform the grouping from right to left -def _group(s, monetary=False): - conv = localeconv() - thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep'] - grouping = conv[monetary and 'mon_grouping' or 'grouping'] - if not grouping: - return (s, 0) - if s[-1] == ' ': - stripped = s.rstrip() - right_spaces = s[len(stripped):] - s = stripped - else: - right_spaces = '' - left_spaces = '' - groups = [] - for interval in _grouping_intervals(grouping): - if not s or s[-1] not in "0123456789": - # only non-digit characters remain (sign, spaces) - left_spaces = s - s = '' - break - groups.append(s[-interval:]) - s = s[:-interval] - if s: - groups.append(s) - groups.reverse() - return ( - left_spaces + thousands_sep.join(groups) + right_spaces, - len(thousands_sep) * (len(groups) - 1) - ) - -# Strip a given amount of excess padding from the given string -def _strip_padding(s, amount): - lpos = 0 - while amount and s[lpos] == ' ': - lpos += 1 - amount -= 1 - rpos = len(s) - 1 - while amount and s[rpos] == ' ': - rpos -= 1 - amount -= 1 - return s[lpos:rpos+1] - -_percent_re = None - -def _format(percent, value, grouping=False, monetary=False, *additional): - if additional: - formatted = percent % ((value,) + additional) - else: - formatted = percent % value - if percent[-1] in 'eEfFgGdiu': - formatted = _localize(formatted, grouping, monetary) - return formatted - -# Transform formatted as locale number according to the locale settings -def _localize(formatted, grouping=False, monetary=False): - # floats and decimal ints need special action! - if '.' in formatted: - seps = 0 - parts = formatted.split('.') - if grouping: - parts[0], seps = _group(parts[0], monetary=monetary) - decimal_point = localeconv()[monetary and 'mon_decimal_point' - or 'decimal_point'] - formatted = decimal_point.join(parts) - if seps: - formatted = _strip_padding(formatted, seps) - else: - seps = 0 - if grouping: - formatted, seps = _group(formatted, monetary=monetary) - if seps: - formatted = _strip_padding(formatted, seps) - return formatted - -def format_string(f, val, grouping=False, monetary=False): - """Formats a string in the same way that the % formatting would use, - but takes the current locale into account. - - Grouping is applied if the third parameter is true. - Conversion uses monetary thousands separator and grouping strings if - forth parameter monetary is true.""" - global _percent_re - if _percent_re is None: - import re - - _percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?(?P<modifiers' - r'>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]') - - percents = list(_percent_re.finditer(f)) - new_f = _percent_re.sub('%s', f) - - if isinstance(val, _collections_abc.Mapping): - new_val = [] - for perc in percents: - if perc.group()[-1]=='%': - new_val.append('%') - else: - new_val.append(_format(perc.group(), val, grouping, monetary)) - else: - if not isinstance(val, tuple): - val = (val,) - new_val = [] - i = 0 - for perc in percents: - if perc.group()[-1]=='%': - new_val.append('%') - else: - starcount = perc.group('modifiers').count('*') - new_val.append(_format(perc.group(), - val[i], - grouping, - monetary, - *val[i+1:i+1+starcount])) - i += (1 + starcount) - val = tuple(new_val) - - return new_f % val - -def currency(val, symbol=True, grouping=False, international=False): - """Formats val according to the currency settings - in the current locale.""" - conv = localeconv() - - # check for illegal values - digits = conv[international and 'int_frac_digits' or 'frac_digits'] - if digits == 127: - raise ValueError("Currency formatting is not possible using " - "the 'C' locale.") - - s = _localize(f'{abs(val):.{digits}f}', grouping, monetary=True) - # '<' and '>' are markers if the sign must be inserted between symbol and value - s = '<' + s + '>' - - if symbol: - smb = conv[international and 'int_curr_symbol' or 'currency_symbol'] - precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes'] - separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space'] - - if precedes: - s = smb + (separated and ' ' or '') + s - else: - if international and smb[-1] == ' ': - smb = smb[:-1] - s = s + (separated and ' ' or '') + smb - - sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn'] - sign = conv[val<0 and 'negative_sign' or 'positive_sign'] - - if sign_pos == 0: - s = '(' + s + ')' - elif sign_pos == 1: - s = sign + s - elif sign_pos == 2: - s = s + sign - elif sign_pos == 3: - s = s.replace('<', sign) - elif sign_pos == 4: - s = s.replace('>', sign) - else: - # the default if nothing specified; - # this should be the most fitting sign position - s = sign + s - - return s.replace('<', '').replace('>', '') - -def str(val): - """Convert float to string, taking the locale into account.""" - return _format("%.12g", val) - -def delocalize(string): - "Parses a string as a normalized number according to the locale settings." - - conv = localeconv() - - #First, get rid of the grouping - ts = conv['thousands_sep'] - if ts: - string = string.replace(ts, '') - - #next, replace the decimal point with a dot - dd = conv['decimal_point'] - if dd: - string = string.replace(dd, '.') - return string - -def localize(string, grouping=False, monetary=False): - """Parses a string as locale number according to the locale settings.""" - return _localize(string, grouping, monetary) - -def atof(string, func=float): - "Parses a string as a float according to the locale settings." - return func(delocalize(string)) - -def atoi(string): - "Converts a string to an integer according to the locale settings." - return int(delocalize(string)) - -def _test(): - setlocale(LC_ALL, "") - #do grouping - s1 = format_string("%d", 123456789,1) - print(s1, "is", atoi(s1)) - #standard formatting - s1 = str(3.14) - print(s1, "is", atof(s1)) - -### Locale name aliasing engine - -# Author: Marc-Andre Lemburg, mal@lemburg.com -# Various tweaks by Fredrik Lundh <fredrik@pythonware.com> - -# store away the low-level version of setlocale (it's -# overridden below) -_setlocale = setlocale - -def _replace_encoding(code, encoding): - if '.' in code: - langname = code[:code.index('.')] - else: - langname = code - # Convert the encoding to a C lib compatible encoding string - norm_encoding = encodings.normalize_encoding(encoding) - #print('norm encoding: %r' % norm_encoding) - norm_encoding = encodings.aliases.aliases.get(norm_encoding.lower(), - norm_encoding) - #print('aliased encoding: %r' % norm_encoding) - encoding = norm_encoding - norm_encoding = norm_encoding.lower() - if norm_encoding in locale_encoding_alias: - encoding = locale_encoding_alias[norm_encoding] - else: - norm_encoding = norm_encoding.replace('_', '') - norm_encoding = norm_encoding.replace('-', '') - if norm_encoding in locale_encoding_alias: - encoding = locale_encoding_alias[norm_encoding] - #print('found encoding %r' % encoding) - return langname + '.' + encoding - -def _append_modifier(code, modifier): - if modifier == 'euro': - if '.' not in code: - return code + '.ISO8859-15' - _, _, encoding = code.partition('.') - if encoding in ('ISO8859-15', 'UTF-8'): - return code - if encoding == 'ISO8859-1': - return _replace_encoding(code, 'ISO8859-15') - return code + '@' + modifier - -def normalize(localename): - - """ Returns a normalized locale code for the given locale - name. - - The returned locale code is formatted for use with - setlocale(). - - If normalization fails, the original name is returned - unchanged. - - If the given encoding is not known, the function defaults to - the default encoding for the locale code just like setlocale() - does. - - """ - # Normalize the locale name and extract the encoding and modifier - code = localename.lower() - if ':' in code: - # ':' is sometimes used as encoding delimiter. - code = code.replace(':', '.') - if '@' in code: - code, modifier = code.split('@', 1) - else: - modifier = '' - if '.' in code: - langname, encoding = code.split('.')[:2] - else: - langname = code - encoding = '' - - # First lookup: fullname (possibly with encoding and modifier) - lang_enc = langname - if encoding: - norm_encoding = encoding.replace('-', '') - norm_encoding = norm_encoding.replace('_', '') - lang_enc += '.' + norm_encoding - lookup_name = lang_enc - if modifier: - lookup_name += '@' + modifier - code = locale_alias.get(lookup_name, None) - if code is not None: - return code - #print('first lookup failed') - - if modifier: - # Second try: fullname without modifier (possibly with encoding) - code = locale_alias.get(lang_enc, None) - if code is not None: - #print('lookup without modifier succeeded') - if '@' not in code: - return _append_modifier(code, modifier) - if code.split('@', 1)[1].lower() == modifier: - return code - #print('second lookup failed') - - if encoding: - # Third try: langname (without encoding, possibly with modifier) - lookup_name = langname - if modifier: - lookup_name += '@' + modifier - code = locale_alias.get(lookup_name, None) - if code is not None: - #print('lookup without encoding succeeded') - if '@' not in code: - return _replace_encoding(code, encoding) - code, modifier = code.split('@', 1) - return _replace_encoding(code, encoding) + '@' + modifier - - if modifier: - # Fourth try: langname (without encoding and modifier) - code = locale_alias.get(langname, None) - if code is not None: - #print('lookup without modifier and encoding succeeded') - if '@' not in code: - code = _replace_encoding(code, encoding) - return _append_modifier(code, modifier) - code, defmod = code.split('@', 1) - if defmod.lower() == modifier: - return _replace_encoding(code, encoding) + '@' + defmod - - return localename - -def _parse_localename(localename): - - """ Parses the locale code for localename and returns the - result as tuple (language code, encoding). - - The localename is normalized and passed through the locale - alias engine. A ValueError is raised in case the locale name - cannot be parsed. - - The language code corresponds to RFC 1766. code and encoding - can be None in case the values cannot be determined or are - unknown to this implementation. - - """ - code = normalize(localename) - if '@' in code: - # Deal with locale modifiers - code, modifier = code.split('@', 1) - if modifier == 'euro' and '.' not in code: - # Assume Latin-9 for @euro locales. This is bogus, - # since some systems may use other encodings for these - # locales. Also, we ignore other modifiers. - return code, 'iso-8859-15' - - if '.' in code: - return tuple(code.split('.')[:2]) - elif code == 'C': - return None, None - elif code == 'UTF-8': - # On macOS "LC_CTYPE=UTF-8" is a valid locale setting - # for getting UTF-8 handling for text. - return None, 'UTF-8' - raise ValueError('unknown locale: %s' % localename) - -def _build_localename(localetuple): - - """ Builds a locale code from the given tuple (language code, - encoding). - - No aliasing or normalizing takes place. - - """ - try: - language, encoding = localetuple - - if language is None: - language = 'C' - if encoding is None: - return language - else: - return language + '.' + encoding - except (TypeError, ValueError): - raise TypeError('Locale must be None, a string, or an iterable of ' - 'two strings -- language code, encoding.') from None - -def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): - - """ Tries to determine the default locale settings and returns - them as tuple (language code, encoding). - - According to POSIX, a program which has not called - setlocale(LC_ALL, "") runs using the portable 'C' locale. - Calling setlocale(LC_ALL, "") lets it use the default locale as - defined by the LANG variable. Since we don't want to interfere - with the current locale setting we thus emulate the behavior - in the way described above. - - To maintain compatibility with other platforms, not only the - LANG variable is tested, but a list of variables given as - envvars parameter. The first found to be defined will be - used. envvars defaults to the search path used in GNU gettext; - it must always contain the variable name 'LANG'. - - Except for the code 'C', the language code corresponds to RFC - 1766. code and encoding can be None in case the values cannot - be determined. - - """ - - import warnings - warnings._deprecated( - "locale.getdefaultlocale", - "{name!r} is deprecated and slated for removal in Python {remove}. " - "Use setlocale(), getencoding() and getlocale() instead.", - remove=(3, 15)) - return _getdefaultlocale(envvars) - - -def _getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): - try: - # check if it's supported by the _locale module - import _locale - code, encoding = _locale._getdefaultlocale() - except (ImportError, AttributeError): - pass - else: - # make sure the code/encoding values are valid - if sys.platform == "win32" and code and code[:2] == "0x": - # map windows language identifier to language name - code = windows_locale.get(int(code, 0)) - # ...add other platform-specific processing here, if - # necessary... - return code, encoding - - # fall back on POSIX behaviour - import os - lookup = os.environ.get - for variable in envvars: - localename = lookup(variable,None) - if localename: - if variable == 'LANGUAGE': - localename = localename.split(':')[0] - break - else: - localename = 'C' - return _parse_localename(localename) - - -def getlocale(category=LC_CTYPE): - - """ Returns the current setting for the given locale category as - tuple (language code, encoding). - - category may be one of the LC_* value except LC_ALL. It - defaults to LC_CTYPE. - - Except for the code 'C', the language code corresponds to RFC - 1766. code and encoding can be None in case the values cannot - be determined. - - """ - localename = _setlocale(category) - if category == LC_ALL and ';' in localename: - raise TypeError('category LC_ALL is not supported') - return _parse_localename(localename) - -def setlocale(category, locale=None): - - """ Set the locale for the given category. The locale can be - a string, an iterable of two strings (language code and encoding), - or None. - - Iterables are converted to strings using the locale aliasing - engine. Locale strings are passed directly to the C lib. - - category may be given as one of the LC_* values. - - """ - if locale and not isinstance(locale, _builtin_str): - # convert to string - locale = normalize(_build_localename(locale)) - return _setlocale(category, locale) - - -try: - from _locale import getencoding -except ImportError: - # When _locale.getencoding() is missing, locale.getencoding() uses the - # Python filesystem encoding. - def getencoding(): - return sys.getfilesystemencoding() - - -try: - CODESET -except NameError: - def getpreferredencoding(do_setlocale=True): - """Return the charset that the user is likely using.""" - if sys.flags.warn_default_encoding: - import warnings - warnings.warn( - "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.", - EncodingWarning, 2) - if sys.flags.utf8_mode: - return 'utf-8' - return getencoding() -else: - # On Unix, if CODESET is available, use that. - def getpreferredencoding(do_setlocale=True): - """Return the charset that the user is likely using, - according to the system configuration.""" - - if sys.flags.warn_default_encoding: - import warnings - warnings.warn( - "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.", - EncodingWarning, 2) - if sys.flags.utf8_mode: - return 'utf-8' - - if not do_setlocale: - return getencoding() - - old_loc = setlocale(LC_CTYPE) - try: - try: - setlocale(LC_CTYPE, "") - except Error: - pass - return getencoding() - finally: - setlocale(LC_CTYPE, old_loc) - - -### Database -# -# The following data was extracted from the locale.alias file which -# comes with X11 and then hand edited removing the explicit encoding -# definitions and adding some more aliases. The file is usually -# available as /usr/lib/X11/locale/locale.alias. -# - -# -# The local_encoding_alias table maps lowercase encoding alias names -# to C locale encoding names (case-sensitive). Note that normalize() -# first looks up the encoding in the encodings.aliases dictionary and -# then applies this mapping to find the correct C lib name for the -# encoding. -# -locale_encoding_alias = { - - # Mappings for non-standard encoding names used in locale names - '437': 'C', - 'c': 'C', - 'en': 'ISO8859-1', - 'jis': 'JIS7', - 'jis7': 'JIS7', - 'ajec': 'eucJP', - 'koi8c': 'KOI8-C', - 'microsoftcp1251': 'CP1251', - 'microsoftcp1255': 'CP1255', - 'microsoftcp1256': 'CP1256', - '88591': 'ISO8859-1', - '88592': 'ISO8859-2', - '88595': 'ISO8859-5', - '885915': 'ISO8859-15', - - # Mappings from Python codec names to C lib encoding names - 'ascii': 'ISO8859-1', - 'latin_1': 'ISO8859-1', - 'iso8859_1': 'ISO8859-1', - 'iso8859_10': 'ISO8859-10', - 'iso8859_11': 'ISO8859-11', - 'iso8859_13': 'ISO8859-13', - 'iso8859_14': 'ISO8859-14', - 'iso8859_15': 'ISO8859-15', - 'iso8859_16': 'ISO8859-16', - 'iso8859_2': 'ISO8859-2', - 'iso8859_3': 'ISO8859-3', - 'iso8859_4': 'ISO8859-4', - 'iso8859_5': 'ISO8859-5', - 'iso8859_6': 'ISO8859-6', - 'iso8859_7': 'ISO8859-7', - 'iso8859_8': 'ISO8859-8', - 'iso8859_9': 'ISO8859-9', - 'iso2022_jp': 'JIS7', - 'shift_jis': 'SJIS', - 'tactis': 'TACTIS', - 'euc_jp': 'eucJP', - 'euc_kr': 'eucKR', - 'utf_8': 'UTF-8', - 'koi8_r': 'KOI8-R', - 'koi8_t': 'KOI8-T', - 'koi8_u': 'KOI8-U', - 'kz1048': 'RK1048', - 'cp1251': 'CP1251', - 'cp1255': 'CP1255', - 'cp1256': 'CP1256', - - # XXX This list is still incomplete. If you know more - # mappings, please file a bug report. Thanks. -} - -for k, v in sorted(locale_encoding_alias.items()): - k = k.replace('_', '') - locale_encoding_alias.setdefault(k, v) -del k, v - -# -# The locale_alias table maps lowercase alias names to C locale names -# (case-sensitive). Encodings are always separated from the locale -# name using a dot ('.'); they should only be given in case the -# language name is needed to interpret the given encoding alias -# correctly (CJK codes often have this need). -# -# Note that the normalize() function which uses this tables -# removes '_' and '-' characters from the encoding part of the -# locale name before doing the lookup. This saves a lot of -# space in the table. -# -# MAL 2004-12-10: -# Updated alias mapping to most recent locale.alias file -# from X.org distribution using makelocalealias.py. -# -# These are the differences compared to the old mapping (Python 2.4 -# and older): -# -# updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' -# updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' -# updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' -# updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' -# updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' -# updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' -# updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1' -# updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' -# updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' -# updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' -# updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' -# updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' -# updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' -# updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP' -# updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13' -# updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13' -# updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' -# updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' -# updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11' -# updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312' -# updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5' -# updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5' -# -# MAL 2008-05-30: -# Updated alias mapping to most recent locale.alias file -# from X.org distribution using makelocalealias.py. -# -# These are the differences compared to the old mapping (Python 2.5 -# and older): -# -# updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2' -# updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2' -# updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr_yu.cp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' -# updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2' -# updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr_yu.iso88595@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# updated 'sr_yu.microsoftcp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251' -# updated 'sr_yu.utf8@cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8' -# updated 'sr_yu@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5' -# -# AP 2010-04-12: -# Updated alias mapping to most recent locale.alias file -# from X.org distribution using makelocalealias.py. -# -# These are the differences compared to the old mapping (Python 2.6.5 -# and older): -# -# updated 'ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' -# updated 'ru_ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8' -# updated 'serbocroatian' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' -# updated 'sh' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' -# updated 'sh_yu' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' -# updated 'sr' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' -# updated 'sr@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' -# updated 'sr@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' -# updated 'sr_cs.utf8@latn' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8@latin' -# updated 'sr_cs@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin' -# updated 'sr_yu' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8@latin' -# updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8' -# updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8' -# -# SS 2013-12-20: -# Updated alias mapping to most recent locale.alias file -# from X.org distribution using makelocalealias.py. -# -# These are the differences compared to the old mapping (Python 3.3.3 -# and older): -# -# updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' -# updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' -# updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C' -# updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' -# updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' -# updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' -# updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8' -# updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' -# updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8' -# updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' -# updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin' -# -# SS 2014-10-01: -# Updated alias mapping with glibc 2.19 supported locales. -# -# SS 2018-05-05: -# Updated alias mapping with glibc 2.27 supported locales. -# -# These are the differences compared to the old mapping (Python 3.6.5 -# and older): -# -# updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia' -# updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154' -# updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R' -# -# SS 2025-02-04: -# Updated alias mapping with glibc 2.41 supported locales and the latest -# X lib alias mapping. -# -# These are the differences compared to the old mapping (Python 3.13.1 -# and older): -# -# updated 'c.utf8' -> 'C.UTF-8' to 'en_US.UTF-8' -# updated 'de_it' -> 'de_IT.ISO8859-1' to 'de_IT.UTF-8' -# removed 'de_li.utf8' -# updated 'en_il' -> 'en_IL.UTF-8' to 'en_IL.ISO8859-1' -# removed 'english.iso88591' -# updated 'es_cu' -> 'es_CU.UTF-8' to 'es_CU.ISO8859-1' -# updated 'russian' -> 'ru_RU.KOI8-R' to 'ru_RU.ISO8859-5' -# updated 'sr@latn' -> 'sr_CS.UTF-8@latin' to 'sr_RS.UTF-8@latin' -# removed 'univ' -# removed 'universal' -# -# SS 2025-06-10: -# Remove 'c.utf8' -> 'en_US.UTF-8' because 'en_US.UTF-8' does not exist -# on all platforms. - -locale_alias = { - 'a3': 'az_AZ.KOI8-C', - 'a3_az': 'az_AZ.KOI8-C', - 'a3_az.koic': 'az_AZ.KOI8-C', - 'aa_dj': 'aa_DJ.ISO8859-1', - 'aa_er': 'aa_ER.UTF-8', - 'aa_et': 'aa_ET.UTF-8', - 'af': 'af_ZA.ISO8859-1', - 'af_za': 'af_ZA.ISO8859-1', - 'agr_pe': 'agr_PE.UTF-8', - 'ak_gh': 'ak_GH.UTF-8', - 'am': 'am_ET.UTF-8', - 'am_et': 'am_ET.UTF-8', - 'american': 'en_US.ISO8859-1', - 'an_es': 'an_ES.ISO8859-15', - 'anp_in': 'anp_IN.UTF-8', - 'ar': 'ar_AA.ISO8859-6', - 'ar_aa': 'ar_AA.ISO8859-6', - 'ar_ae': 'ar_AE.ISO8859-6', - 'ar_bh': 'ar_BH.ISO8859-6', - 'ar_dz': 'ar_DZ.ISO8859-6', - 'ar_eg': 'ar_EG.ISO8859-6', - 'ar_in': 'ar_IN.UTF-8', - 'ar_iq': 'ar_IQ.ISO8859-6', - 'ar_jo': 'ar_JO.ISO8859-6', - 'ar_kw': 'ar_KW.ISO8859-6', - 'ar_lb': 'ar_LB.ISO8859-6', - 'ar_ly': 'ar_LY.ISO8859-6', - 'ar_ma': 'ar_MA.ISO8859-6', - 'ar_om': 'ar_OM.ISO8859-6', - 'ar_qa': 'ar_QA.ISO8859-6', - 'ar_sa': 'ar_SA.ISO8859-6', - 'ar_sd': 'ar_SD.ISO8859-6', - 'ar_ss': 'ar_SS.UTF-8', - 'ar_sy': 'ar_SY.ISO8859-6', - 'ar_tn': 'ar_TN.ISO8859-6', - 'ar_ye': 'ar_YE.ISO8859-6', - 'arabic': 'ar_AA.ISO8859-6', - 'as': 'as_IN.UTF-8', - 'as_in': 'as_IN.UTF-8', - 'ast_es': 'ast_ES.ISO8859-15', - 'ayc_pe': 'ayc_PE.UTF-8', - 'az': 'az_AZ.ISO8859-9E', - 'az_az': 'az_AZ.ISO8859-9E', - 'az_az.iso88599e': 'az_AZ.ISO8859-9E', - 'az_ir': 'az_IR.UTF-8', - 'be': 'be_BY.CP1251', - 'be@latin': 'be_BY.UTF-8@latin', - 'be_bg.utf8': 'bg_BG.UTF-8', - 'be_by': 'be_BY.CP1251', - 'be_by@latin': 'be_BY.UTF-8@latin', - 'bem_zm': 'bem_ZM.UTF-8', - 'ber_dz': 'ber_DZ.UTF-8', - 'ber_ma': 'ber_MA.UTF-8', - 'bg': 'bg_BG.CP1251', - 'bg_bg': 'bg_BG.CP1251', - 'bhb_in.utf8': 'bhb_IN.UTF-8', - 'bho_in': 'bho_IN.UTF-8', - 'bho_np': 'bho_NP.UTF-8', - 'bi_vu': 'bi_VU.UTF-8', - 'bn_bd': 'bn_BD.UTF-8', - 'bn_in': 'bn_IN.UTF-8', - 'bo_cn': 'bo_CN.UTF-8', - 'bo_in': 'bo_IN.UTF-8', - 'bokmal': 'nb_NO.ISO8859-1', - 'bokm\xe5l': 'nb_NO.ISO8859-1', - 'br': 'br_FR.ISO8859-1', - 'br_fr': 'br_FR.ISO8859-1', - 'brx_in': 'brx_IN.UTF-8', - 'bs': 'bs_BA.ISO8859-2', - 'bs_ba': 'bs_BA.ISO8859-2', - 'bulgarian': 'bg_BG.CP1251', - 'byn_er': 'byn_ER.UTF-8', - 'c': 'C', - 'c-french': 'fr_CA.ISO8859-1', - 'c.ascii': 'C', - 'c.en': 'C', - 'c.iso88591': 'en_US.ISO8859-1', - 'c_c': 'C', - 'c_c.c': 'C', - 'ca': 'ca_ES.ISO8859-1', - 'ca_ad': 'ca_AD.ISO8859-1', - 'ca_es': 'ca_ES.ISO8859-1', - 'ca_es@valencia': 'ca_ES.UTF-8@valencia', - 'ca_fr': 'ca_FR.ISO8859-1', - 'ca_it': 'ca_IT.ISO8859-1', - 'catalan': 'ca_ES.ISO8859-1', - 'ce_ru': 'ce_RU.UTF-8', - 'cextend': 'en_US.ISO8859-1', - 'chinese-s': 'zh_CN.eucCN', - 'chinese-t': 'zh_TW.eucTW', - 'chr_us': 'chr_US.UTF-8', - 'ckb_iq': 'ckb_IQ.UTF-8', - 'cmn_tw': 'cmn_TW.UTF-8', - 'crh_ru': 'crh_RU.UTF-8', - 'crh_ua': 'crh_UA.UTF-8', - 'croatian': 'hr_HR.ISO8859-2', - 'cs': 'cs_CZ.ISO8859-2', - 'cs_cs': 'cs_CZ.ISO8859-2', - 'cs_cz': 'cs_CZ.ISO8859-2', - 'csb_pl': 'csb_PL.UTF-8', - 'cv_ru': 'cv_RU.UTF-8', - 'cy': 'cy_GB.ISO8859-1', - 'cy_gb': 'cy_GB.ISO8859-1', - 'cz': 'cs_CZ.ISO8859-2', - 'cz_cz': 'cs_CZ.ISO8859-2', - 'czech': 'cs_CZ.ISO8859-2', - 'da': 'da_DK.ISO8859-1', - 'da_dk': 'da_DK.ISO8859-1', - 'danish': 'da_DK.ISO8859-1', - 'dansk': 'da_DK.ISO8859-1', - 'de': 'de_DE.ISO8859-1', - 'de_at': 'de_AT.ISO8859-1', - 'de_be': 'de_BE.ISO8859-1', - 'de_ch': 'de_CH.ISO8859-1', - 'de_de': 'de_DE.ISO8859-1', - 'de_it': 'de_IT.UTF-8', - 'de_li': 'de_LI.ISO8859-1', - 'de_lu': 'de_LU.ISO8859-1', - 'deutsch': 'de_DE.ISO8859-1', - 'doi_in': 'doi_IN.UTF-8', - 'dsb_de': 'dsb_DE.UTF-8', - 'dutch': 'nl_NL.ISO8859-1', - 'dutch.iso88591': 'nl_BE.ISO8859-1', - 'dv_mv': 'dv_MV.UTF-8', - 'dz_bt': 'dz_BT.UTF-8', - 'ee': 'ee_EE.ISO8859-4', - 'ee_ee': 'ee_EE.ISO8859-4', - 'eesti': 'et_EE.ISO8859-1', - 'el': 'el_GR.ISO8859-7', - 'el_cy': 'el_CY.ISO8859-7', - 'el_gr': 'el_GR.ISO8859-7', - 'el_gr@euro': 'el_GR.ISO8859-15', - 'en': 'en_US.ISO8859-1', - 'en_ag': 'en_AG.UTF-8', - 'en_au': 'en_AU.ISO8859-1', - 'en_be': 'en_BE.ISO8859-1', - 'en_bw': 'en_BW.ISO8859-1', - 'en_ca': 'en_CA.ISO8859-1', - 'en_dk': 'en_DK.ISO8859-1', - 'en_dl.utf8': 'en_DL.UTF-8', - 'en_gb': 'en_GB.ISO8859-1', - 'en_hk': 'en_HK.ISO8859-1', - 'en_ie': 'en_IE.ISO8859-1', - 'en_il': 'en_IL.ISO8859-1', - 'en_in': 'en_IN.ISO8859-1', - 'en_ng': 'en_NG.UTF-8', - 'en_nz': 'en_NZ.ISO8859-1', - 'en_ph': 'en_PH.ISO8859-1', - 'en_sc.utf8': 'en_SC.UTF-8', - 'en_sg': 'en_SG.ISO8859-1', - 'en_uk': 'en_GB.ISO8859-1', - 'en_us': 'en_US.ISO8859-1', - 'en_us@euro@euro': 'en_US.ISO8859-15', - 'en_za': 'en_ZA.ISO8859-1', - 'en_zm': 'en_ZM.UTF-8', - 'en_zw': 'en_ZW.ISO8859-1', - 'en_zw.utf8': 'en_ZS.UTF-8', - 'eng_gb': 'en_GB.ISO8859-1', - 'english': 'en_EN.ISO8859-1', - 'english_uk': 'en_GB.ISO8859-1', - 'english_united-states': 'en_US.ISO8859-1', - 'english_united-states.437': 'C', - 'english_us': 'en_US.ISO8859-1', - 'eo': 'eo_XX.ISO8859-3', - 'eo.utf8': 'eo.UTF-8', - 'eo_eo': 'eo_EO.ISO8859-3', - 'eo_us.utf8': 'eo_US.UTF-8', - 'eo_xx': 'eo_XX.ISO8859-3', - 'es': 'es_ES.ISO8859-1', - 'es_ar': 'es_AR.ISO8859-1', - 'es_bo': 'es_BO.ISO8859-1', - 'es_cl': 'es_CL.ISO8859-1', - 'es_co': 'es_CO.ISO8859-1', - 'es_cr': 'es_CR.ISO8859-1', - 'es_cu': 'es_CU.ISO8859-1', - 'es_do': 'es_DO.ISO8859-1', - 'es_ec': 'es_EC.ISO8859-1', - 'es_es': 'es_ES.ISO8859-1', - 'es_gt': 'es_GT.ISO8859-1', - 'es_hn': 'es_HN.ISO8859-1', - 'es_mx': 'es_MX.ISO8859-1', - 'es_ni': 'es_NI.ISO8859-1', - 'es_pa': 'es_PA.ISO8859-1', - 'es_pe': 'es_PE.ISO8859-1', - 'es_pr': 'es_PR.ISO8859-1', - 'es_py': 'es_PY.ISO8859-1', - 'es_sv': 'es_SV.ISO8859-1', - 'es_us': 'es_US.ISO8859-1', - 'es_uy': 'es_UY.ISO8859-1', - 'es_ve': 'es_VE.ISO8859-1', - 'estonian': 'et_EE.ISO8859-1', - 'et': 'et_EE.ISO8859-15', - 'et_ee': 'et_EE.ISO8859-15', - 'eu': 'eu_ES.ISO8859-1', - 'eu_es': 'eu_ES.ISO8859-1', - 'eu_fr': 'eu_FR.ISO8859-1', - 'fa': 'fa_IR.UTF-8', - 'fa_ir': 'fa_IR.UTF-8', - 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', - 'ff_sn': 'ff_SN.UTF-8', - 'fi': 'fi_FI.ISO8859-15', - 'fi_fi': 'fi_FI.ISO8859-15', - 'fil_ph': 'fil_PH.UTF-8', - 'finnish': 'fi_FI.ISO8859-1', - 'fo': 'fo_FO.ISO8859-1', - 'fo_fo': 'fo_FO.ISO8859-1', - 'fr': 'fr_FR.ISO8859-1', - 'fr_be': 'fr_BE.ISO8859-1', - 'fr_ca': 'fr_CA.ISO8859-1', - 'fr_ch': 'fr_CH.ISO8859-1', - 'fr_fr': 'fr_FR.ISO8859-1', - 'fr_lu': 'fr_LU.ISO8859-1', - 'fran\xe7ais': 'fr_FR.ISO8859-1', - 'fre_fr': 'fr_FR.ISO8859-1', - 'french': 'fr_FR.ISO8859-1', - 'french.iso88591': 'fr_CH.ISO8859-1', - 'french_france': 'fr_FR.ISO8859-1', - 'fur_it': 'fur_IT.UTF-8', - 'fy_de': 'fy_DE.UTF-8', - 'fy_nl': 'fy_NL.UTF-8', - 'ga': 'ga_IE.ISO8859-1', - 'ga_ie': 'ga_IE.ISO8859-1', - 'galego': 'gl_ES.ISO8859-1', - 'galician': 'gl_ES.ISO8859-1', - 'gbm_in': 'gbm_IN.UTF-8', - 'gd': 'gd_GB.ISO8859-1', - 'gd_gb': 'gd_GB.ISO8859-1', - 'ger_de': 'de_DE.ISO8859-1', - 'german': 'de_DE.ISO8859-1', - 'german.iso88591': 'de_CH.ISO8859-1', - 'german_germany': 'de_DE.ISO8859-1', - 'gez_er': 'gez_ER.UTF-8', - 'gez_et': 'gez_ET.UTF-8', - 'gl': 'gl_ES.ISO8859-1', - 'gl_es': 'gl_ES.ISO8859-1', - 'greek': 'el_GR.ISO8859-7', - 'gu_in': 'gu_IN.UTF-8', - 'gv': 'gv_GB.ISO8859-1', - 'gv_gb': 'gv_GB.ISO8859-1', - 'ha_ng': 'ha_NG.UTF-8', - 'hak_tw': 'hak_TW.UTF-8', - 'he': 'he_IL.ISO8859-8', - 'he_il': 'he_IL.ISO8859-8', - 'hebrew': 'he_IL.ISO8859-8', - 'hi': 'hi_IN.ISCII-DEV', - 'hi_in': 'hi_IN.ISCII-DEV', - 'hi_in.isciidev': 'hi_IN.ISCII-DEV', - 'hif_fj': 'hif_FJ.UTF-8', - 'hne': 'hne_IN.UTF-8', - 'hne_in': 'hne_IN.UTF-8', - 'hr': 'hr_HR.ISO8859-2', - 'hr_hr': 'hr_HR.ISO8859-2', - 'hrvatski': 'hr_HR.ISO8859-2', - 'hsb_de': 'hsb_DE.ISO8859-2', - 'ht_ht': 'ht_HT.UTF-8', - 'hu': 'hu_HU.ISO8859-2', - 'hu_hu': 'hu_HU.ISO8859-2', - 'hungarian': 'hu_HU.ISO8859-2', - 'hy_am': 'hy_AM.UTF-8', - 'hy_am.armscii8': 'hy_AM.ARMSCII_8', - 'ia': 'ia.UTF-8', - 'ia_fr': 'ia_FR.UTF-8', - 'icelandic': 'is_IS.ISO8859-1', - 'id': 'id_ID.ISO8859-1', - 'id_id': 'id_ID.ISO8859-1', - 'ie': 'ie.UTF-8', - 'ig_ng': 'ig_NG.UTF-8', - 'ik_ca': 'ik_CA.UTF-8', - 'in': 'id_ID.ISO8859-1', - 'in_id': 'id_ID.ISO8859-1', - 'is': 'is_IS.ISO8859-1', - 'is_is': 'is_IS.ISO8859-1', - 'iso-8859-1': 'en_US.ISO8859-1', - 'iso-8859-15': 'en_US.ISO8859-15', - 'iso8859-1': 'en_US.ISO8859-1', - 'iso8859-15': 'en_US.ISO8859-15', - 'iso_8859_1': 'en_US.ISO8859-1', - 'iso_8859_15': 'en_US.ISO8859-15', - 'it': 'it_IT.ISO8859-1', - 'it_ch': 'it_CH.ISO8859-1', - 'it_it': 'it_IT.ISO8859-1', - 'italian': 'it_IT.ISO8859-1', - 'iu': 'iu_CA.NUNACOM-8', - 'iu_ca': 'iu_CA.NUNACOM-8', - 'iu_ca.nunacom8': 'iu_CA.NUNACOM-8', - 'iw': 'he_IL.ISO8859-8', - 'iw_il': 'he_IL.ISO8859-8', - 'iw_il.utf8': 'iw_IL.UTF-8', - 'ja': 'ja_JP.eucJP', - 'ja_jp': 'ja_JP.eucJP', - 'ja_jp.euc': 'ja_JP.eucJP', - 'ja_jp.mscode': 'ja_JP.SJIS', - 'ja_jp.pck': 'ja_JP.SJIS', - 'japan': 'ja_JP.eucJP', - 'japanese': 'ja_JP.eucJP', - 'japanese-euc': 'ja_JP.eucJP', - 'japanese.euc': 'ja_JP.eucJP', - 'jp_jp': 'ja_JP.eucJP', - 'ka': 'ka_GE.GEORGIAN-ACADEMY', - 'ka_ge': 'ka_GE.GEORGIAN-ACADEMY', - 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', - 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', - 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', - 'kab_dz': 'kab_DZ.UTF-8', - 'kk_kz': 'kk_KZ.ptcp154', - 'kl': 'kl_GL.ISO8859-1', - 'kl_gl': 'kl_GL.ISO8859-1', - 'km_kh': 'km_KH.UTF-8', - 'kn': 'kn_IN.UTF-8', - 'kn_in': 'kn_IN.UTF-8', - 'ko': 'ko_KR.eucKR', - 'ko_kr': 'ko_KR.eucKR', - 'ko_kr.euc': 'ko_KR.eucKR', - 'kok_in': 'kok_IN.UTF-8', - 'korean': 'ko_KR.eucKR', - 'korean.euc': 'ko_KR.eucKR', - 'ks': 'ks_IN.UTF-8', - 'ks_in': 'ks_IN.UTF-8', - 'ks_in@devanagari.utf8': 'ks_IN.UTF-8@devanagari', - 'ku_tr': 'ku_TR.ISO8859-9', - 'kv_ru': 'kv_RU.UTF-8', - 'kw': 'kw_GB.ISO8859-1', - 'kw_gb': 'kw_GB.ISO8859-1', - 'ky': 'ky_KG.UTF-8', - 'ky_kg': 'ky_KG.UTF-8', - 'lb_lu': 'lb_LU.UTF-8', - 'lg_ug': 'lg_UG.ISO8859-10', - 'li_be': 'li_BE.UTF-8', - 'li_nl': 'li_NL.UTF-8', - 'lij_it': 'lij_IT.UTF-8', - 'lithuanian': 'lt_LT.ISO8859-13', - 'ln_cd': 'ln_CD.UTF-8', - 'lo': 'lo_LA.MULELAO-1', - 'lo_la': 'lo_LA.MULELAO-1', - 'lo_la.cp1133': 'lo_LA.IBM-CP1133', - 'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133', - 'lo_la.mulelao1': 'lo_LA.MULELAO-1', - 'lt': 'lt_LT.ISO8859-13', - 'lt_lt': 'lt_LT.ISO8859-13', - 'ltg_lv.utf8': 'ltg_LV.UTF-8', - 'lv': 'lv_LV.ISO8859-13', - 'lv_lv': 'lv_LV.ISO8859-13', - 'lzh_tw': 'lzh_TW.UTF-8', - 'mag_in': 'mag_IN.UTF-8', - 'mai': 'mai_IN.UTF-8', - 'mai_in': 'mai_IN.UTF-8', - 'mai_np': 'mai_NP.UTF-8', - 'mdf_ru': 'mdf_RU.UTF-8', - 'mfe_mu': 'mfe_MU.UTF-8', - 'mg_mg': 'mg_MG.ISO8859-15', - 'mhr_ru': 'mhr_RU.UTF-8', - 'mi': 'mi_NZ.ISO8859-1', - 'mi_nz': 'mi_NZ.ISO8859-1', - 'miq_ni': 'miq_NI.UTF-8', - 'mjw_in': 'mjw_IN.UTF-8', - 'mk': 'mk_MK.ISO8859-5', - 'mk_mk': 'mk_MK.ISO8859-5', - 'ml': 'ml_IN.UTF-8', - 'ml_in': 'ml_IN.UTF-8', - 'mn_mn': 'mn_MN.UTF-8', - 'mni_in': 'mni_IN.UTF-8', - 'mnw_mm': 'mnw_MM.UTF-8', - 'mr': 'mr_IN.UTF-8', - 'mr_in': 'mr_IN.UTF-8', - 'ms': 'ms_MY.ISO8859-1', - 'ms_my': 'ms_MY.ISO8859-1', - 'mt': 'mt_MT.ISO8859-3', - 'mt_mt': 'mt_MT.ISO8859-3', - 'my_mm': 'my_MM.UTF-8', - 'nan_tw': 'nan_TW.UTF-8', - 'nb': 'nb_NO.ISO8859-1', - 'nb_no': 'nb_NO.ISO8859-1', - 'nds_de': 'nds_DE.UTF-8', - 'nds_nl': 'nds_NL.UTF-8', - 'ne_np': 'ne_NP.UTF-8', - 'nhn_mx': 'nhn_MX.UTF-8', - 'niu_nu': 'niu_NU.UTF-8', - 'niu_nz': 'niu_NZ.UTF-8', - 'nl': 'nl_NL.ISO8859-1', - 'nl_aw': 'nl_AW.UTF-8', - 'nl_be': 'nl_BE.ISO8859-1', - 'nl_nl': 'nl_NL.ISO8859-1', - 'nn': 'nn_NO.ISO8859-1', - 'nn_no': 'nn_NO.ISO8859-1', - 'no': 'no_NO.ISO8859-1', - 'no@nynorsk': 'ny_NO.ISO8859-1', - 'no_no': 'no_NO.ISO8859-1', - 'no_no.iso88591@bokmal': 'no_NO.ISO8859-1', - 'no_no.iso88591@nynorsk': 'no_NO.ISO8859-1', - 'norwegian': 'no_NO.ISO8859-1', - 'nr': 'nr_ZA.ISO8859-1', - 'nr_za': 'nr_ZA.ISO8859-1', - 'nso': 'nso_ZA.ISO8859-15', - 'nso_za': 'nso_ZA.ISO8859-15', - 'ny': 'ny_NO.ISO8859-1', - 'ny_no': 'ny_NO.ISO8859-1', - 'nynorsk': 'nn_NO.ISO8859-1', - 'oc': 'oc_FR.ISO8859-1', - 'oc_fr': 'oc_FR.ISO8859-1', - 'om_et': 'om_ET.UTF-8', - 'om_ke': 'om_KE.ISO8859-1', - 'or': 'or_IN.UTF-8', - 'or_in': 'or_IN.UTF-8', - 'os_ru': 'os_RU.UTF-8', - 'pa': 'pa_IN.UTF-8', - 'pa_in': 'pa_IN.UTF-8', - 'pa_pk': 'pa_PK.UTF-8', - 'pap_an': 'pap_AN.UTF-8', - 'pap_aw': 'pap_AW.UTF-8', - 'pap_cw': 'pap_CW.UTF-8', - 'pd': 'pd_US.ISO8859-1', - 'pd_de': 'pd_DE.ISO8859-1', - 'pd_us': 'pd_US.ISO8859-1', - 'ph': 'ph_PH.ISO8859-1', - 'ph_ph': 'ph_PH.ISO8859-1', - 'pl': 'pl_PL.ISO8859-2', - 'pl_pl': 'pl_PL.ISO8859-2', - 'polish': 'pl_PL.ISO8859-2', - 'portuguese': 'pt_PT.ISO8859-1', - 'portuguese_brazil': 'pt_BR.ISO8859-1', - 'posix': 'C', - 'posix-utf2': 'C', - 'pp': 'pp_AN.ISO8859-1', - 'pp_an': 'pp_AN.ISO8859-1', - 'ps_af': 'ps_AF.UTF-8', - 'pt': 'pt_PT.ISO8859-1', - 'pt_br': 'pt_BR.ISO8859-1', - 'pt_pt': 'pt_PT.ISO8859-1', - 'quz_pe': 'quz_PE.UTF-8', - 'raj_in': 'raj_IN.UTF-8', - 'rif_ma': 'rif_MA.UTF-8', - 'ro': 'ro_RO.ISO8859-2', - 'ro_ro': 'ro_RO.ISO8859-2', - 'romanian': 'ro_RO.ISO8859-2', - 'ru': 'ru_RU.UTF-8', - 'ru_ru': 'ru_RU.UTF-8', - 'ru_ua': 'ru_UA.KOI8-U', - 'rumanian': 'ro_RO.ISO8859-2', - 'russian': 'ru_RU.ISO8859-5', - 'rw': 'rw_RW.ISO8859-1', - 'rw_rw': 'rw_RW.ISO8859-1', - 'sa_in': 'sa_IN.UTF-8', - 'sah_ru': 'sah_RU.UTF-8', - 'sat_in': 'sat_IN.UTF-8', - 'sc_it': 'sc_IT.UTF-8', - 'scn_it': 'scn_IT.UTF-8', - 'sd': 'sd_IN.UTF-8', - 'sd_in': 'sd_IN.UTF-8', - 'sd_in@devanagari.utf8': 'sd_IN.UTF-8@devanagari', - 'sd_pk': 'sd_PK.UTF-8', - 'se_no': 'se_NO.UTF-8', - 'serbocroatian': 'sr_RS.UTF-8@latin', - 'sgs_lt': 'sgs_LT.UTF-8', - 'sh': 'sr_RS.UTF-8@latin', - 'sh_ba.iso88592@bosnia': 'sr_CS.ISO8859-2', - 'sh_hr': 'sh_HR.ISO8859-2', - 'sh_hr.iso88592': 'hr_HR.ISO8859-2', - 'sh_sp': 'sr_CS.ISO8859-2', - 'sh_yu': 'sr_RS.UTF-8@latin', - 'shn_mm': 'shn_MM.UTF-8', - 'shs_ca': 'shs_CA.UTF-8', - 'si': 'si_LK.UTF-8', - 'si_lk': 'si_LK.UTF-8', - 'sid_et': 'sid_ET.UTF-8', - 'sinhala': 'si_LK.UTF-8', - 'sk': 'sk_SK.ISO8859-2', - 'sk_sk': 'sk_SK.ISO8859-2', - 'sl': 'sl_SI.ISO8859-2', - 'sl_cs': 'sl_CS.ISO8859-2', - 'sl_si': 'sl_SI.ISO8859-2', - 'slovak': 'sk_SK.ISO8859-2', - 'slovene': 'sl_SI.ISO8859-2', - 'slovenian': 'sl_SI.ISO8859-2', - 'sm_ws': 'sm_WS.UTF-8', - 'so_dj': 'so_DJ.ISO8859-1', - 'so_et': 'so_ET.UTF-8', - 'so_ke': 'so_KE.ISO8859-1', - 'so_so': 'so_SO.ISO8859-1', - 'sp': 'sr_CS.ISO8859-5', - 'sp_yu': 'sr_CS.ISO8859-5', - 'spanish': 'es_ES.ISO8859-1', - 'spanish_spain': 'es_ES.ISO8859-1', - 'sq': 'sq_AL.ISO8859-2', - 'sq_al': 'sq_AL.ISO8859-2', - 'sq_mk': 'sq_MK.UTF-8', - 'sr': 'sr_RS.UTF-8', - 'sr@cyrillic': 'sr_RS.UTF-8', - 'sr@latn': 'sr_RS.UTF-8@latin', - 'sr_cs': 'sr_CS.UTF-8', - 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2', - 'sr_cs@latn': 'sr_CS.UTF-8@latin', - 'sr_me': 'sr_ME.UTF-8', - 'sr_rs': 'sr_RS.UTF-8', - 'sr_rs@latn': 'sr_RS.UTF-8@latin', - 'sr_sp': 'sr_CS.ISO8859-2', - 'sr_yu': 'sr_RS.UTF-8@latin', - 'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251', - 'sr_yu.iso88592': 'sr_CS.ISO8859-2', - 'sr_yu.iso88595': 'sr_CS.ISO8859-5', - 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5', - 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251', - 'sr_yu.utf8': 'sr_RS.UTF-8', - 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8', - 'sr_yu@cyrillic': 'sr_RS.UTF-8', - 'ss': 'ss_ZA.ISO8859-1', - 'ss_za': 'ss_ZA.ISO8859-1', - 'ssy_er': 'ssy_ER.UTF-8', - 'st': 'st_ZA.ISO8859-1', - 'st_za': 'st_ZA.ISO8859-1', - 'su_id': 'su_ID.UTF-8', - 'sv': 'sv_SE.ISO8859-1', - 'sv_fi': 'sv_FI.ISO8859-1', - 'sv_se': 'sv_SE.ISO8859-1', - 'sw_ke': 'sw_KE.UTF-8', - 'sw_tz': 'sw_TZ.UTF-8', - 'swedish': 'sv_SE.ISO8859-1', - 'syr': 'syr.UTF-8', - 'szl_pl': 'szl_PL.UTF-8', - 'ta': 'ta_IN.TSCII-0', - 'ta_in': 'ta_IN.TSCII-0', - 'ta_in.tscii': 'ta_IN.TSCII-0', - 'ta_in.tscii0': 'ta_IN.TSCII-0', - 'ta_lk': 'ta_LK.UTF-8', - 'tcy_in.utf8': 'tcy_IN.UTF-8', - 'te': 'te_IN.UTF-8', - 'te_in': 'te_IN.UTF-8', - 'tg': 'tg_TJ.KOI8-C', - 'tg_tj': 'tg_TJ.KOI8-C', - 'th': 'th_TH.ISO8859-11', - 'th_th': 'th_TH.ISO8859-11', - 'th_th.tactis': 'th_TH.TIS620', - 'th_th.tis620': 'th_TH.TIS620', - 'thai': 'th_TH.ISO8859-11', - 'the_np': 'the_NP.UTF-8', - 'ti_er': 'ti_ER.UTF-8', - 'ti_et': 'ti_ET.UTF-8', - 'tig_er': 'tig_ER.UTF-8', - 'tk_tm': 'tk_TM.UTF-8', - 'tl': 'tl_PH.ISO8859-1', - 'tl_ph': 'tl_PH.ISO8859-1', - 'tn': 'tn_ZA.ISO8859-15', - 'tn_za': 'tn_ZA.ISO8859-15', - 'to_to': 'to_TO.UTF-8', - 'tok': 'tok.UTF-8', - 'tpi_pg': 'tpi_PG.UTF-8', - 'tr': 'tr_TR.ISO8859-9', - 'tr_cy': 'tr_CY.ISO8859-9', - 'tr_tr': 'tr_TR.ISO8859-9', - 'ts': 'ts_ZA.ISO8859-1', - 'ts_za': 'ts_ZA.ISO8859-1', - 'tt': 'tt_RU.TATAR-CYR', - 'tt_ru': 'tt_RU.TATAR-CYR', - 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', - 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif', - 'turkish': 'tr_TR.ISO8859-9', - 'ug_cn': 'ug_CN.UTF-8', - 'uk': 'uk_UA.KOI8-U', - 'uk_ua': 'uk_UA.KOI8-U', - 'univ.utf8': 'en_US.UTF-8', - 'universal.utf8@ucs4': 'en_US.UTF-8', - 'unm_us': 'unm_US.UTF-8', - 'ur': 'ur_PK.CP1256', - 'ur_in': 'ur_IN.UTF-8', - 'ur_pk': 'ur_PK.CP1256', - 'uz': 'uz_UZ.UTF-8', - 'uz_uz': 'uz_UZ.UTF-8', - 'uz_uz@cyrillic': 'uz_UZ.UTF-8', - 've': 've_ZA.UTF-8', - 've_za': 've_ZA.UTF-8', - 'vi': 'vi_VN.TCVN', - 'vi_vn': 'vi_VN.TCVN', - 'vi_vn.tcvn': 'vi_VN.TCVN', - 'vi_vn.tcvn5712': 'vi_VN.TCVN', - 'vi_vn.viscii': 'vi_VN.VISCII', - 'vi_vn.viscii111': 'vi_VN.VISCII', - 'wa': 'wa_BE.ISO8859-1', - 'wa_be': 'wa_BE.ISO8859-1', - 'wae_ch': 'wae_CH.UTF-8', - 'wal_et': 'wal_ET.UTF-8', - 'wo_sn': 'wo_SN.UTF-8', - 'xh': 'xh_ZA.ISO8859-1', - 'xh_za': 'xh_ZA.ISO8859-1', - 'yi': 'yi_US.CP1255', - 'yi_us': 'yi_US.CP1255', - 'yo_ng': 'yo_NG.UTF-8', - 'yue_hk': 'yue_HK.UTF-8', - 'yuw_pg': 'yuw_PG.UTF-8', - 'zgh_ma': 'zgh_MA.UTF-8', - 'zh': 'zh_CN.eucCN', - 'zh_cn': 'zh_CN.gb2312', - 'zh_cn.big5': 'zh_TW.big5', - 'zh_cn.euc': 'zh_CN.eucCN', - 'zh_hk': 'zh_HK.big5hkscs', - 'zh_hk.big5hk': 'zh_HK.big5hkscs', - 'zh_sg': 'zh_SG.GB2312', - 'zh_sg.gbk': 'zh_SG.GBK', - 'zh_tw': 'zh_TW.big5', - 'zh_tw.euc': 'zh_TW.eucTW', - 'zh_tw.euctw': 'zh_TW.eucTW', - 'zu': 'zu_ZA.ISO8859-1', - 'zu_za': 'zu_ZA.ISO8859-1', -} - -# -# This maps Windows language identifiers to locale strings. -# -# This list has been updated from -# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp -# to include every locale up to Windows Vista. -# -# NOTE: this mapping is incomplete. If your language is missing, please -# submit a bug report as detailed in the Python devguide at: -# https://devguide.python.org/triage/issue-tracker/ -# Make sure you include the missing language identifier and the suggested -# locale code. -# - -windows_locale = { - 0x0436: "af_ZA", # Afrikaans - 0x041c: "sq_AL", # Albanian - 0x0484: "gsw_FR",# Alsatian - France - 0x045e: "am_ET", # Amharic - Ethiopia - 0x0401: "ar_SA", # Arabic - Saudi Arabia - 0x0801: "ar_IQ", # Arabic - Iraq - 0x0c01: "ar_EG", # Arabic - Egypt - 0x1001: "ar_LY", # Arabic - Libya - 0x1401: "ar_DZ", # Arabic - Algeria - 0x1801: "ar_MA", # Arabic - Morocco - 0x1c01: "ar_TN", # Arabic - Tunisia - 0x2001: "ar_OM", # Arabic - Oman - 0x2401: "ar_YE", # Arabic - Yemen - 0x2801: "ar_SY", # Arabic - Syria - 0x2c01: "ar_JO", # Arabic - Jordan - 0x3001: "ar_LB", # Arabic - Lebanon - 0x3401: "ar_KW", # Arabic - Kuwait - 0x3801: "ar_AE", # Arabic - United Arab Emirates - 0x3c01: "ar_BH", # Arabic - Bahrain - 0x4001: "ar_QA", # Arabic - Qatar - 0x042b: "hy_AM", # Armenian - 0x044d: "as_IN", # Assamese - India - 0x042c: "az_AZ", # Azeri - Latin - 0x082c: "az_AZ", # Azeri - Cyrillic - 0x046d: "ba_RU", # Bashkir - 0x042d: "eu_ES", # Basque - Russia - 0x0423: "be_BY", # Belarusian - 0x0445: "bn_IN", # Begali - 0x201a: "bs_BA", # Bosnian - Cyrillic - 0x141a: "bs_BA", # Bosnian - Latin - 0x047e: "br_FR", # Breton - France - 0x0402: "bg_BG", # Bulgarian -# 0x0455: "my_MM", # Burmese - Not supported - 0x0403: "ca_ES", # Catalan - 0x0004: "zh_CHS",# Chinese - Simplified - 0x0404: "zh_TW", # Chinese - Taiwan - 0x0804: "zh_CN", # Chinese - PRC - 0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R. - 0x1004: "zh_SG", # Chinese - Singapore - 0x1404: "zh_MO", # Chinese - Macao S.A.R. - 0x7c04: "zh_CHT",# Chinese - Traditional - 0x0483: "co_FR", # Corsican - France - 0x041a: "hr_HR", # Croatian - 0x101a: "hr_BA", # Croatian - Bosnia - 0x0405: "cs_CZ", # Czech - 0x0406: "da_DK", # Danish - 0x048c: "gbz_AF",# Dari - Afghanistan - 0x0465: "div_MV",# Divehi - Maldives - 0x0413: "nl_NL", # Dutch - The Netherlands - 0x0813: "nl_BE", # Dutch - Belgium - 0x0409: "en_US", # English - United States - 0x0809: "en_GB", # English - United Kingdom - 0x0c09: "en_AU", # English - Australia - 0x1009: "en_CA", # English - Canada - 0x1409: "en_NZ", # English - New Zealand - 0x1809: "en_IE", # English - Ireland - 0x1c09: "en_ZA", # English - South Africa - 0x2009: "en_JA", # English - Jamaica - 0x2409: "en_CB", # English - Caribbean - 0x2809: "en_BZ", # English - Belize - 0x2c09: "en_TT", # English - Trinidad - 0x3009: "en_ZW", # English - Zimbabwe - 0x3409: "en_PH", # English - Philippines - 0x4009: "en_IN", # English - India - 0x4409: "en_MY", # English - Malaysia - 0x4809: "en_IN", # English - Singapore - 0x0425: "et_EE", # Estonian - 0x0438: "fo_FO", # Faroese - 0x0464: "fil_PH",# Filipino - 0x040b: "fi_FI", # Finnish - 0x040c: "fr_FR", # French - France - 0x080c: "fr_BE", # French - Belgium - 0x0c0c: "fr_CA", # French - Canada - 0x100c: "fr_CH", # French - Switzerland - 0x140c: "fr_LU", # French - Luxembourg - 0x180c: "fr_MC", # French - Monaco - 0x0462: "fy_NL", # Frisian - Netherlands - 0x0456: "gl_ES", # Galician - 0x0437: "ka_GE", # Georgian - 0x0407: "de_DE", # German - Germany - 0x0807: "de_CH", # German - Switzerland - 0x0c07: "de_AT", # German - Austria - 0x1007: "de_LU", # German - Luxembourg - 0x1407: "de_LI", # German - Liechtenstein - 0x0408: "el_GR", # Greek - 0x046f: "kl_GL", # Greenlandic - Greenland - 0x0447: "gu_IN", # Gujarati - 0x0468: "ha_NG", # Hausa - Latin - 0x040d: "he_IL", # Hebrew - 0x0439: "hi_IN", # Hindi - 0x040e: "hu_HU", # Hungarian - 0x040f: "is_IS", # Icelandic - 0x0421: "id_ID", # Indonesian - 0x045d: "iu_CA", # Inuktitut - Syllabics - 0x085d: "iu_CA", # Inuktitut - Latin - 0x083c: "ga_IE", # Irish - Ireland - 0x0410: "it_IT", # Italian - Italy - 0x0810: "it_CH", # Italian - Switzerland - 0x0411: "ja_JP", # Japanese - 0x044b: "kn_IN", # Kannada - India - 0x043f: "kk_KZ", # Kazakh - 0x0453: "kh_KH", # Khmer - Cambodia - 0x0486: "qut_GT",# K'iche - Guatemala - 0x0487: "rw_RW", # Kinyarwanda - Rwanda - 0x0457: "kok_IN",# Konkani - 0x0412: "ko_KR", # Korean - 0x0440: "ky_KG", # Kyrgyz - 0x0454: "lo_LA", # Lao - Lao PDR - 0x0426: "lv_LV", # Latvian - 0x0427: "lt_LT", # Lithuanian - 0x082e: "dsb_DE",# Lower Sorbian - Germany - 0x046e: "lb_LU", # Luxembourgish - 0x042f: "mk_MK", # FYROM Macedonian - 0x043e: "ms_MY", # Malay - Malaysia - 0x083e: "ms_BN", # Malay - Brunei Darussalam - 0x044c: "ml_IN", # Malayalam - India - 0x043a: "mt_MT", # Maltese - 0x0481: "mi_NZ", # Maori - 0x047a: "arn_CL",# Mapudungun - 0x044e: "mr_IN", # Marathi - 0x047c: "moh_CA",# Mohawk - Canada - 0x0450: "mn_MN", # Mongolian - Cyrillic - 0x0850: "mn_CN", # Mongolian - PRC - 0x0461: "ne_NP", # Nepali - 0x0414: "nb_NO", # Norwegian - Bokmal - 0x0814: "nn_NO", # Norwegian - Nynorsk - 0x0482: "oc_FR", # Occitan - France - 0x0448: "or_IN", # Oriya - India - 0x0463: "ps_AF", # Pashto - Afghanistan - 0x0429: "fa_IR", # Persian - 0x0415: "pl_PL", # Polish - 0x0416: "pt_BR", # Portuguese - Brazil - 0x0816: "pt_PT", # Portuguese - Portugal - 0x0446: "pa_IN", # Punjabi - 0x046b: "quz_BO",# Quechua (Bolivia) - 0x086b: "quz_EC",# Quechua (Ecuador) - 0x0c6b: "quz_PE",# Quechua (Peru) - 0x0418: "ro_RO", # Romanian - Romania - 0x0417: "rm_CH", # Romansh - 0x0419: "ru_RU", # Russian - 0x243b: "smn_FI",# Sami Finland - 0x103b: "smj_NO",# Sami Norway - 0x143b: "smj_SE",# Sami Sweden - 0x043b: "se_NO", # Sami Northern Norway - 0x083b: "se_SE", # Sami Northern Sweden - 0x0c3b: "se_FI", # Sami Northern Finland - 0x203b: "sms_FI",# Sami Skolt - 0x183b: "sma_NO",# Sami Southern Norway - 0x1c3b: "sma_SE",# Sami Southern Sweden - 0x044f: "sa_IN", # Sanskrit - 0x0c1a: "sr_SP", # Serbian - Cyrillic - 0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic - 0x081a: "sr_SP", # Serbian - Latin - 0x181a: "sr_BA", # Serbian - Bosnia Latin - 0x045b: "si_LK", # Sinhala - Sri Lanka - 0x046c: "ns_ZA", # Northern Sotho - 0x0432: "tn_ZA", # Setswana - Southern Africa - 0x041b: "sk_SK", # Slovak - 0x0424: "sl_SI", # Slovenian - 0x040a: "es_ES", # Spanish - Spain - 0x080a: "es_MX", # Spanish - Mexico - 0x0c0a: "es_ES", # Spanish - Spain (Modern) - 0x100a: "es_GT", # Spanish - Guatemala - 0x140a: "es_CR", # Spanish - Costa Rica - 0x180a: "es_PA", # Spanish - Panama - 0x1c0a: "es_DO", # Spanish - Dominican Republic - 0x200a: "es_VE", # Spanish - Venezuela - 0x240a: "es_CO", # Spanish - Colombia - 0x280a: "es_PE", # Spanish - Peru - 0x2c0a: "es_AR", # Spanish - Argentina - 0x300a: "es_EC", # Spanish - Ecuador - 0x340a: "es_CL", # Spanish - Chile - 0x380a: "es_UR", # Spanish - Uruguay - 0x3c0a: "es_PY", # Spanish - Paraguay - 0x400a: "es_BO", # Spanish - Bolivia - 0x440a: "es_SV", # Spanish - El Salvador - 0x480a: "es_HN", # Spanish - Honduras - 0x4c0a: "es_NI", # Spanish - Nicaragua - 0x500a: "es_PR", # Spanish - Puerto Rico - 0x540a: "es_US", # Spanish - United States -# 0x0430: "", # Sutu - Not supported - 0x0441: "sw_KE", # Swahili - 0x041d: "sv_SE", # Swedish - Sweden - 0x081d: "sv_FI", # Swedish - Finland - 0x045a: "syr_SY",# Syriac - 0x0428: "tg_TJ", # Tajik - Cyrillic - 0x085f: "tmz_DZ",# Tamazight - Latin - 0x0449: "ta_IN", # Tamil - 0x0444: "tt_RU", # Tatar - 0x044a: "te_IN", # Telugu - 0x041e: "th_TH", # Thai - 0x0851: "bo_BT", # Tibetan - Bhutan - 0x0451: "bo_CN", # Tibetan - PRC - 0x041f: "tr_TR", # Turkish - 0x0442: "tk_TM", # Turkmen - Cyrillic - 0x0480: "ug_CN", # Uighur - Arabic - 0x0422: "uk_UA", # Ukrainian - 0x042e: "wen_DE",# Upper Sorbian - Germany - 0x0420: "ur_PK", # Urdu - 0x0820: "ur_IN", # Urdu - India - 0x0443: "uz_UZ", # Uzbek - Latin - 0x0843: "uz_UZ", # Uzbek - Cyrillic - 0x042a: "vi_VN", # Vietnamese - 0x0452: "cy_GB", # Welsh - 0x0488: "wo_SN", # Wolof - Senegal - 0x0434: "xh_ZA", # Xhosa - South Africa - 0x0485: "sah_RU",# Yakut - Cyrillic - 0x0478: "ii_CN", # Yi - PRC - 0x046a: "yo_NG", # Yoruba - Nigeria - 0x0435: "zu_ZA", # Zulu -} - -def _print_locale(): - - """ Test function. - """ - categories = {} - def _init_categories(categories=categories): - for k,v in globals().items(): - if k[:3] == 'LC_': - categories[k] = v - _init_categories() - del categories['LC_ALL'] - - print('Locale defaults as determined by getdefaultlocale():') - print('-'*72) - lang, enc = getdefaultlocale() - print('Language: ', lang or '(undefined)') - print('Encoding: ', enc or '(undefined)') - print() - - print('Locale settings on startup:') - print('-'*72) - for name,category in categories.items(): - print(name, '...') - lang, enc = getlocale(category) - print(' Language: ', lang or '(undefined)') - print(' Encoding: ', enc or '(undefined)') - print() - - try: - setlocale(LC_ALL, "") - except: - print('NOTE:') - print('setlocale(LC_ALL, "") does not support the default locale') - print('given in the OS environment variables.') - else: - print() - print('Locale settings after calling setlocale(LC_ALL, ""):') - print('-'*72) - for name,category in categories.items(): - print(name, '...') - lang, enc = getlocale(category) - print(' Language: ', lang or '(undefined)') - print(' Encoding: ', enc or '(undefined)') - print() - -### - -try: - LC_MESSAGES -except NameError: - pass -else: - __all__.append("LC_MESSAGES") - -if __name__=='__main__': - print('Locale aliasing:') - print() - _print_locale() - print() - print('Number formatting:') - print() - _test() diff --git a/Python314_4_x86_Template/Lib/logging/__init__.py b/Python314_4_x86_Template/Lib/logging/__init__.py deleted file mode 100644 index 9005f1ef8..000000000 --- a/Python314_4_x86_Template/Lib/logging/__init__.py +++ /dev/null @@ -1,2326 +0,0 @@ -# Copyright 2001-2022 by Vinay Sajip. All Rights Reserved. -# -# Permission to use, copy, modify, and distribute this software and its -# documentation for any purpose and without fee is hereby granted, -# provided that the above copyright notice appear in all copies and that -# both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Vinay Sajip -# not be used in advertising or publicity pertaining to distribution -# of the software without specific, written prior permission. -# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -Logging package for Python. Based on PEP 282 and comments thereto in -comp.lang.python. - -Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved. - -To use, simply 'import logging' and log away! -""" - -import sys, os, time, io, re, traceback, warnings, weakref, collections.abc - -from types import GenericAlias -from string import Template -from string import Formatter as StrFormatter - - -__all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR', - 'FATAL', 'FileHandler', 'Filter', 'Formatter', 'Handler', 'INFO', - 'LogRecord', 'Logger', 'LoggerAdapter', 'NOTSET', 'NullHandler', - 'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig', - 'captureWarnings', 'critical', 'debug', 'disable', 'error', - 'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass', - 'info', 'log', 'makeLogRecord', 'setLoggerClass', 'shutdown', - 'warn', 'warning', 'getLogRecordFactory', 'setLogRecordFactory', - 'lastResort', 'raiseExceptions', 'getLevelNamesMapping', - 'getHandlerByName', 'getHandlerNames'] - -import threading - -__author__ = "Vinay Sajip <vinay_sajip@red-dove.com>" -__status__ = "production" -# The following module attributes are no longer updated. -__version__ = "0.5.1.2" -__date__ = "07 February 2010" - -#--------------------------------------------------------------------------- -# Miscellaneous module data -#--------------------------------------------------------------------------- - -# -#_startTime is used as the base when calculating the relative time of events -# -_startTime = time.time_ns() - -# -#raiseExceptions is used to see if exceptions during handling should be -#propagated -# -raiseExceptions = True - -# -# If you don't want threading information in the log, set this to False -# -logThreads = True - -# -# If you don't want multiprocessing information in the log, set this to False -# -logMultiprocessing = True - -# -# If you don't want process information in the log, set this to False -# -logProcesses = True - -# -# If you don't want asyncio task information in the log, set this to False -# -logAsyncioTasks = True - -#--------------------------------------------------------------------------- -# Level related stuff -#--------------------------------------------------------------------------- -# -# Default levels and level names, these can be replaced with any positive set -# of values having corresponding names. There is a pseudo-level, NOTSET, which -# is only really there as a lower limit for user-defined levels. Handlers and -# loggers are initialized with NOTSET so that they will log all messages, even -# at user-defined levels. -# - -CRITICAL = 50 -FATAL = CRITICAL -ERROR = 40 -WARNING = 30 -WARN = WARNING -INFO = 20 -DEBUG = 10 -NOTSET = 0 - -_levelToName = { - CRITICAL: 'CRITICAL', - ERROR: 'ERROR', - WARNING: 'WARNING', - INFO: 'INFO', - DEBUG: 'DEBUG', - NOTSET: 'NOTSET', -} -_nameToLevel = { - 'CRITICAL': CRITICAL, - 'FATAL': FATAL, - 'ERROR': ERROR, - 'WARN': WARNING, - 'WARNING': WARNING, - 'INFO': INFO, - 'DEBUG': DEBUG, - 'NOTSET': NOTSET, -} - -def getLevelNamesMapping(): - return _nameToLevel.copy() - -def getLevelName(level): - """ - Return the textual or numeric representation of logging level 'level'. - - If the level is one of the predefined levels (CRITICAL, ERROR, WARNING, - INFO, DEBUG) then you get the corresponding string. If you have - associated levels with names using addLevelName then the name you have - associated with 'level' is returned. - - If a numeric value corresponding to one of the defined levels is passed - in, the corresponding string representation is returned. - - If a string representation of the level is passed in, the corresponding - numeric value is returned. - - If no matching numeric or string value is passed in, the string - 'Level %s' % level is returned. - """ - # See Issues #22386, #27937 and #29220 for why it's this way - result = _levelToName.get(level) - if result is not None: - return result - result = _nameToLevel.get(level) - if result is not None: - return result - return "Level %s" % level - -def addLevelName(level, levelName): - """ - Associate 'levelName' with 'level'. - - This is used when converting levels to text during message formatting. - """ - with _lock: - _levelToName[level] = levelName - _nameToLevel[levelName] = level - -if hasattr(sys, "_getframe"): - currentframe = lambda: sys._getframe(1) -else: #pragma: no cover - def currentframe(): - """Return the frame object for the caller's stack frame.""" - try: - raise Exception - except Exception as exc: - return exc.__traceback__.tb_frame.f_back - -# -# _srcfile is used when walking the stack to check when we've got the first -# caller stack frame, by skipping frames whose filename is that of this -# module's source. It therefore should contain the filename of this module's -# source file. -# -# Ordinarily we would use __file__ for this, but frozen modules don't always -# have __file__ set, for some reason (see Issue #21736). Thus, we get the -# filename from a handy code object from a function defined in this module. -# (There's no particular reason for picking addLevelName.) -# - -_srcfile = os.path.normcase(addLevelName.__code__.co_filename) - -# _srcfile is only used in conjunction with sys._getframe(). -# Setting _srcfile to None will prevent findCaller() from being called. This -# way, you can avoid the overhead of fetching caller information. - -# The following is based on warnings._is_internal_frame. It makes sure that -# frames of the import mechanism are skipped when logging at module level and -# using a stacklevel value greater than one. -def _is_internal_frame(frame): - """Signal whether the frame is a CPython or logging module internal.""" - filename = os.path.normcase(frame.f_code.co_filename) - return filename == _srcfile or ( - "importlib" in filename and "_bootstrap" in filename - ) - - -def _checkLevel(level): - if isinstance(level, int): - rv = level - elif str(level) == level: - if level not in _nameToLevel: - raise ValueError("Unknown level: %r" % level) - rv = _nameToLevel[level] - else: - raise TypeError("Level not an integer or a valid string: %r" - % (level,)) - return rv - -#--------------------------------------------------------------------------- -# Thread-related stuff -#--------------------------------------------------------------------------- - -# -#_lock is used to serialize access to shared data structures in this module. -#This needs to be an RLock because fileConfig() creates and configures -#Handlers, and so might arbitrary user threads. Since Handler code updates the -#shared dictionary _handlers, it needs to acquire the lock. But if configuring, -#the lock would already have been acquired - so we need an RLock. -#The same argument applies to Loggers and Manager.loggerDict. -# -_lock = threading.RLock() - -def _prepareFork(): - """ - Prepare to fork a new child process by acquiring the module-level lock. - - This should be used in conjunction with _afterFork(). - """ - # Wrap the lock acquisition in a try-except to prevent the lock from being - # abandoned in the event of an asynchronous exception. See gh-106238. - try: - _lock.acquire() - except BaseException: - _lock.release() - raise - -def _afterFork(): - """ - After a new child process has been forked, release the module-level lock. - - This should be used in conjunction with _prepareFork(). - """ - _lock.release() - - -# Prevent a held logging lock from blocking a child from logging. - -if not hasattr(os, 'register_at_fork'): # Windows and friends. - def _register_at_fork_reinit_lock(instance): - pass # no-op when os.register_at_fork does not exist. -else: - # A collection of instances with a _at_fork_reinit method (logging.Handler) - # to be called in the child after forking. The weakref avoids us keeping - # discarded Handler instances alive. - _at_fork_reinit_lock_weakset = weakref.WeakSet() - - def _register_at_fork_reinit_lock(instance): - with _lock: - _at_fork_reinit_lock_weakset.add(instance) - - def _after_at_fork_child_reinit_locks(): - for handler in _at_fork_reinit_lock_weakset: - handler._at_fork_reinit() - - # _prepareFork() was called in the parent before forking. - # The lock is reinitialized to unlocked state. - _lock._at_fork_reinit() - - os.register_at_fork(before=_prepareFork, - after_in_child=_after_at_fork_child_reinit_locks, - after_in_parent=_afterFork) - - -#--------------------------------------------------------------------------- -# The logging record -#--------------------------------------------------------------------------- - -class LogRecord(object): - """ - A LogRecord instance represents an event being logged. - - LogRecord instances are created every time something is logged. They - contain all the information pertinent to the event being logged. The - main information passed in is in msg and args, which are combined - using str(msg) % args to create the message field of the record. The - record also includes information such as when the record was created, - the source line where the logging call was made, and any exception - information to be logged. - """ - def __init__(self, name, level, pathname, lineno, - msg, args, exc_info, func=None, sinfo=None, **kwargs): - """ - Initialize a logging record with interesting information. - """ - ct = time.time_ns() - self.name = name - self.msg = msg - # - # The following statement allows passing of a dictionary as a sole - # argument, so that you can do something like - # logging.debug("a %(a)d b %(b)s", {'a':1, 'b':2}) - # Suggested by Stefan Behnel. - # Note that without the test for args[0], we get a problem because - # during formatting, we test to see if the arg is present using - # 'if self.args:'. If the event being logged is e.g. 'Value is %d' - # and if the passed arg fails 'if self.args:' then no formatting - # is done. For example, logger.warning('Value is %d', 0) would log - # 'Value is %d' instead of 'Value is 0'. - # For the use case of passing a dictionary, this should not be a - # problem. - # Issue #21172: a request was made to relax the isinstance check - # to hasattr(args[0], '__getitem__'). However, the docs on string - # formatting still seem to suggest a mapping object is required. - # Thus, while not removing the isinstance check, it does now look - # for collections.abc.Mapping rather than, as before, dict. - if (args and len(args) == 1 and isinstance(args[0], collections.abc.Mapping) - and args[0]): - args = args[0] - self.args = args - self.levelname = getLevelName(level) - self.levelno = level - self.pathname = pathname - try: - self.filename = os.path.basename(pathname) - self.module = os.path.splitext(self.filename)[0] - except (TypeError, ValueError, AttributeError): - self.filename = pathname - self.module = "Unknown module" - self.exc_info = exc_info - self.exc_text = None # used to cache the traceback text - self.stack_info = sinfo - self.lineno = lineno - self.funcName = func - self.created = ct / 1e9 # ns to float seconds - # Get the number of whole milliseconds (0-999) in the fractional part of seconds. - # Eg: 1_677_903_920_999_998_503 ns --> 999_998_503 ns--> 999 ms - # Convert to float by adding 0.0 for historical reasons. See gh-89047 - self.msecs = (ct % 1_000_000_000) // 1_000_000 + 0.0 - if self.msecs == 999.0 and int(self.created) != ct // 1_000_000_000: - # ns -> sec conversion can round up, e.g: - # 1_677_903_920_999_999_900 ns --> 1_677_903_921.0 sec - self.msecs = 0.0 - - self.relativeCreated = (ct - _startTime) / 1e6 - if logThreads: - self.thread = threading.get_ident() - self.threadName = threading.current_thread().name - else: # pragma: no cover - self.thread = None - self.threadName = None - if not logMultiprocessing: # pragma: no cover - self.processName = None - else: - self.processName = 'MainProcess' - mp = sys.modules.get('multiprocessing') - if mp is not None: - # Errors may occur if multiprocessing has not finished loading - # yet - e.g. if a custom import hook causes third-party code - # to run when multiprocessing calls import. See issue 8200 - # for an example - try: - self.processName = mp.current_process().name - except Exception: #pragma: no cover - pass - if logProcesses and hasattr(os, 'getpid'): - self.process = os.getpid() - else: - self.process = None - - self.taskName = None - if logAsyncioTasks: - asyncio = sys.modules.get('asyncio') - if asyncio: - try: - self.taskName = asyncio.current_task().get_name() - except Exception: - pass - - def __repr__(self): - return '<LogRecord: %s, %s, %s, %s, "%s">'%(self.name, self.levelno, - self.pathname, self.lineno, self.msg) - - def getMessage(self): - """ - Return the message for this LogRecord. - - Return the message for this LogRecord after merging any user-supplied - arguments with the message. - """ - msg = str(self.msg) - if self.args: - msg = msg % self.args - return msg - -# -# Determine which class to use when instantiating log records. -# -_logRecordFactory = LogRecord - -def setLogRecordFactory(factory): - """ - Set the factory to be used when instantiating a log record. - - :param factory: A callable which will be called to instantiate - a log record. - """ - global _logRecordFactory - _logRecordFactory = factory - -def getLogRecordFactory(): - """ - Return the factory to be used when instantiating a log record. - """ - - return _logRecordFactory - -def makeLogRecord(dict): - """ - Make a LogRecord whose attributes are defined by the specified dictionary, - This function is useful for converting a logging event received over - a socket connection (which is sent as a dictionary) into a LogRecord - instance. - """ - rv = _logRecordFactory(None, None, "", 0, "", (), None, None) - rv.__dict__.update(dict) - return rv - - -#--------------------------------------------------------------------------- -# Formatter classes and functions -#--------------------------------------------------------------------------- -_str_formatter = StrFormatter() -del StrFormatter - - -class PercentStyle(object): - - default_format = '%(message)s' - asctime_format = '%(asctime)s' - asctime_search = '%(asctime)' - validation_pattern = re.compile(r'%\(\w+\)[#0+ -]*(\*|\d+)?(\.(\*|\d+))?[diouxefgcrsa%]', re.I) - - def __init__(self, fmt, *, defaults=None): - self._fmt = fmt or self.default_format - self._defaults = defaults - - def usesTime(self): - return self._fmt.find(self.asctime_search) >= 0 - - def validate(self): - """Validate the input format, ensure it matches the correct style""" - if not self.validation_pattern.search(self._fmt): - raise ValueError("Invalid format '%s' for '%s' style" % (self._fmt, self.default_format[0])) - - def _format(self, record): - if defaults := self._defaults: - values = defaults | record.__dict__ - else: - values = record.__dict__ - return self._fmt % values - - def format(self, record): - try: - return self._format(record) - except KeyError as e: - raise ValueError('Formatting field not found in record: %s' % e) - - -class StrFormatStyle(PercentStyle): - default_format = '{message}' - asctime_format = '{asctime}' - asctime_search = '{asctime' - - fmt_spec = re.compile(r'^(.?[<>=^])?[+ -]?#?0?(\d+|{\w+})?[,_]?(\.(\d+|{\w+}))?[bcdefgnosx%]?$', re.I) - field_spec = re.compile(r'^(\d+|\w+)(\.\w+|\[[^]]+\])*$') - - def _format(self, record): - if defaults := self._defaults: - values = defaults | record.__dict__ - else: - values = record.__dict__ - return self._fmt.format(**values) - - def validate(self): - """Validate the input format, ensure it is the correct string formatting style""" - fields = set() - try: - for _, fieldname, spec, conversion in _str_formatter.parse(self._fmt): - if fieldname: - if not self.field_spec.match(fieldname): - raise ValueError('invalid field name/expression: %r' % fieldname) - fields.add(fieldname) - if conversion and conversion not in 'rsa': - raise ValueError('invalid conversion: %r' % conversion) - if spec and not self.fmt_spec.match(spec): - raise ValueError('bad specifier: %r' % spec) - except ValueError as e: - raise ValueError('invalid format: %s' % e) - if not fields: - raise ValueError('invalid format: no fields') - - -class StringTemplateStyle(PercentStyle): - default_format = '${message}' - asctime_format = '${asctime}' - asctime_search = '${asctime}' - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._tpl = Template(self._fmt) - - def usesTime(self): - fmt = self._fmt - return fmt.find('$asctime') >= 0 or fmt.find(self.asctime_search) >= 0 - - def validate(self): - pattern = Template.pattern - fields = set() - for m in pattern.finditer(self._fmt): - d = m.groupdict() - if d['named']: - fields.add(d['named']) - elif d['braced']: - fields.add(d['braced']) - elif m.group(0) == '$': - raise ValueError('invalid format: bare \'$\' not allowed') - if not fields: - raise ValueError('invalid format: no fields') - - def _format(self, record): - if defaults := self._defaults: - values = defaults | record.__dict__ - else: - values = record.__dict__ - return self._tpl.substitute(**values) - - -BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s" - -_STYLES = { - '%': (PercentStyle, BASIC_FORMAT), - '{': (StrFormatStyle, '{levelname}:{name}:{message}'), - '$': (StringTemplateStyle, '${levelname}:${name}:${message}'), -} - -class Formatter(object): - """ - Formatter instances are used to convert a LogRecord to text. - - Formatters need to know how a LogRecord is constructed. They are - responsible for converting a LogRecord to (usually) a string which can - be interpreted by either a human or an external system. The base Formatter - allows a formatting string to be specified. If none is supplied, the - style-dependent default value, "%(message)s", "{message}", or - "${message}", is used. - - The Formatter can be initialized with a format string which makes use of - knowledge of the LogRecord attributes - e.g. the default value mentioned - above makes use of the fact that the user's message and arguments are pre- - formatted into a LogRecord's message attribute. Currently, the useful - attributes in a LogRecord are described by: - - %(name)s Name of the logger (logging channel) - %(levelno)s Numeric logging level for the message (DEBUG, INFO, - WARNING, ERROR, CRITICAL) - %(levelname)s Text logging level for the message ("DEBUG", "INFO", - "WARNING", "ERROR", "CRITICAL") - %(pathname)s Full pathname of the source file where the logging - call was issued (if available) - %(filename)s Filename portion of pathname - %(module)s Module (name portion of filename) - %(lineno)d Source line number where the logging call was issued - (if available) - %(funcName)s Function name - %(created)f Time when the LogRecord was created (time.time_ns() / 1e9 - return value) - %(asctime)s Textual time when the LogRecord was created - %(msecs)d Millisecond portion of the creation time - %(relativeCreated)d Time in milliseconds when the LogRecord was created, - relative to the time the logging module was loaded - (typically at application startup time) - %(thread)d Thread ID (if available) - %(threadName)s Thread name (if available) - %(taskName)s Task name (if available) - %(process)d Process ID (if available) - %(processName)s Process name (if available) - %(message)s The result of record.getMessage(), computed just as - the record is emitted - """ - - converter = time.localtime - - def __init__(self, fmt=None, datefmt=None, style='%', validate=True, *, - defaults=None): - """ - Initialize the formatter with specified format strings. - - Initialize the formatter either with the specified format string, or a - default as described above. Allow for specialized date formatting with - the optional datefmt argument. If datefmt is omitted, you get an - ISO8601-like (or RFC 3339-like) format. - - Use a style parameter of '%', '{' or '$' to specify that you want to - use one of %-formatting, :meth:`str.format` (``{}``) formatting or - :class:`string.Template` formatting in your format string. - - .. versionchanged:: 3.2 - Added the ``style`` parameter. - """ - if style not in _STYLES: - raise ValueError('Style must be one of: %s' % ','.join( - _STYLES.keys())) - self._style = _STYLES[style][0](fmt, defaults=defaults) - if validate: - self._style.validate() - - self._fmt = self._style._fmt - self.datefmt = datefmt - - default_time_format = '%Y-%m-%d %H:%M:%S' - default_msec_format = '%s,%03d' - - def formatTime(self, record, datefmt=None): - """ - Return the creation time of the specified LogRecord as formatted text. - - This method should be called from format() by a formatter which - wants to make use of a formatted time. This method can be overridden - in formatters to provide for any specific requirement, but the - basic behaviour is as follows: if datefmt (a string) is specified, - it is used with time.strftime() to format the creation time of the - record. Otherwise, an ISO8601-like (or RFC 3339-like) format is used. - The resulting string is returned. This function uses a user-configurable - function to convert the creation time to a tuple. By default, - time.localtime() is used; to change this for a particular formatter - instance, set the 'converter' attribute to a function with the same - signature as time.localtime() or time.gmtime(). To change it for all - formatters, for example if you want all logging times to be shown in GMT, - set the 'converter' attribute in the Formatter class. - """ - ct = self.converter(record.created) - if datefmt: - s = time.strftime(datefmt, ct) - else: - s = time.strftime(self.default_time_format, ct) - if self.default_msec_format: - s = self.default_msec_format % (s, record.msecs) - return s - - def formatException(self, ei): - """ - Format and return the specified exception information as a string. - - This default implementation just uses - traceback.print_exception() - """ - sio = io.StringIO() - tb = ei[2] - # See issues #9427, #1553375. Commented out for now. - #if getattr(self, 'fullstack', False): - # traceback.print_stack(tb.tb_frame.f_back, file=sio) - traceback.print_exception(ei[0], ei[1], tb, limit=None, file=sio) - s = sio.getvalue() - sio.close() - if s[-1:] == "\n": - s = s[:-1] - return s - - def usesTime(self): - """ - Check if the format uses the creation time of the record. - """ - return self._style.usesTime() - - def formatMessage(self, record): - return self._style.format(record) - - def formatStack(self, stack_info): - """ - This method is provided as an extension point for specialized - formatting of stack information. - - The input data is a string as returned from a call to - :func:`traceback.print_stack`, but with the last trailing newline - removed. - - The base implementation just returns the value passed in. - """ - return stack_info - - def format(self, record): - """ - Format the specified record as text. - - The record's attribute dictionary is used as the operand to a - string formatting operation which yields the returned string. - Before formatting the dictionary, a couple of preparatory steps - are carried out. The message attribute of the record is computed - using LogRecord.getMessage(). If the formatting string uses the - time (as determined by a call to usesTime(), formatTime() is - called to format the event time. If there is exception information, - it is formatted using formatException() and appended to the message. - """ - record.message = record.getMessage() - if self.usesTime(): - record.asctime = self.formatTime(record, self.datefmt) - s = self.formatMessage(record) - if record.exc_info: - # Cache the traceback text to avoid converting it multiple times - # (it's constant anyway) - if not record.exc_text: - record.exc_text = self.formatException(record.exc_info) - if record.exc_text: - if s[-1:] != "\n": - s = s + "\n" - s = s + record.exc_text - if record.stack_info: - if s[-1:] != "\n": - s = s + "\n" - s = s + self.formatStack(record.stack_info) - return s - -# -# The default formatter to use when no other is specified -# -_defaultFormatter = Formatter() - -class BufferingFormatter(object): - """ - A formatter suitable for formatting a number of records. - """ - def __init__(self, linefmt=None): - """ - Optionally specify a formatter which will be used to format each - individual record. - """ - if linefmt: - self.linefmt = linefmt - else: - self.linefmt = _defaultFormatter - - def formatHeader(self, records): - """ - Return the header string for the specified records. - """ - return "" - - def formatFooter(self, records): - """ - Return the footer string for the specified records. - """ - return "" - - def format(self, records): - """ - Format the specified records and return the result as a string. - """ - rv = "" - if len(records) > 0: - rv = rv + self.formatHeader(records) - for record in records: - rv = rv + self.linefmt.format(record) - rv = rv + self.formatFooter(records) - return rv - -#--------------------------------------------------------------------------- -# Filter classes and functions -#--------------------------------------------------------------------------- - -class Filter(object): - """ - Filter instances are used to perform arbitrary filtering of LogRecords. - - Loggers and Handlers can optionally use Filter instances to filter - records as desired. The base filter class only allows events which are - below a certain point in the logger hierarchy. For example, a filter - initialized with "A.B" will allow events logged by loggers "A.B", - "A.B.C", "A.B.C.D", "A.B.D" etc. but not "A.BB", "B.A.B" etc. If - initialized with the empty string, all events are passed. - """ - def __init__(self, name=''): - """ - Initialize a filter. - - Initialize with the name of the logger which, together with its - children, will have its events allowed through the filter. If no - name is specified, allow every event. - """ - self.name = name - self.nlen = len(name) - - def filter(self, record): - """ - Determine if the specified record is to be logged. - - Returns True if the record should be logged, or False otherwise. - If deemed appropriate, the record may be modified in-place. - """ - if self.nlen == 0: - return True - elif self.name == record.name: - return True - elif record.name.find(self.name, 0, self.nlen) != 0: - return False - return (record.name[self.nlen] == ".") - -class Filterer(object): - """ - A base class for loggers and handlers which allows them to share - common code. - """ - def __init__(self): - """ - Initialize the list of filters to be an empty list. - """ - self.filters = [] - - def addFilter(self, filter): - """ - Add the specified filter to this handler. - """ - if not (filter in self.filters): - self.filters.append(filter) - - def removeFilter(self, filter): - """ - Remove the specified filter from this handler. - """ - if filter in self.filters: - self.filters.remove(filter) - - def filter(self, record): - """ - Determine if a record is loggable by consulting all the filters. - - The default is to allow the record to be logged; any filter can veto - this by returning a false value. - If a filter attached to a handler returns a log record instance, - then that instance is used in place of the original log record in - any further processing of the event by that handler. - If a filter returns any other true value, the original log record - is used in any further processing of the event by that handler. - - If none of the filters return false values, this method returns - a log record. - If any of the filters return a false value, this method returns - a false value. - - .. versionchanged:: 3.2 - - Allow filters to be just callables. - - .. versionchanged:: 3.12 - Allow filters to return a LogRecord instead of - modifying it in place. - """ - for f in self.filters: - if hasattr(f, 'filter'): - result = f.filter(record) - else: - result = f(record) # assume callable - will raise if not - if not result: - return False - if isinstance(result, LogRecord): - record = result - return record - -#--------------------------------------------------------------------------- -# Handler classes and functions -#--------------------------------------------------------------------------- - -_handlers = weakref.WeakValueDictionary() #map of handler names to handlers -_handlerList = [] # added to allow handlers to be removed in reverse of order initialized - -def _removeHandlerRef(wr): - """ - Remove a handler reference from the internal cleanup list. - """ - # This function can be called during module teardown, when globals are - # set to None. It can also be called from another thread. So we need to - # pre-emptively grab the necessary globals and check if they're None, - # to prevent race conditions and failures during interpreter shutdown. - handlers, lock = _handlerList, _lock - if lock and handlers: - with lock: - try: - handlers.remove(wr) - except ValueError: - pass - -def _addHandlerRef(handler): - """ - Add a handler to the internal cleanup list using a weak reference. - """ - with _lock: - _handlerList.append(weakref.ref(handler, _removeHandlerRef)) - - -def getHandlerByName(name): - """ - Get a handler with the specified *name*, or None if there isn't one with - that name. - """ - return _handlers.get(name) - - -def getHandlerNames(): - """ - Return all known handler names as an immutable set. - """ - return frozenset(_handlers) - - -class Handler(Filterer): - """ - Handler instances dispatch logging events to specific destinations. - - The base handler class. Acts as a placeholder which defines the Handler - interface. Handlers can optionally use Formatter instances to format - records as desired. By default, no formatter is specified; in this case, - the 'raw' message as determined by record.message is logged. - """ - def __init__(self, level=NOTSET): - """ - Initializes the instance - basically setting the formatter to None - and the filter list to empty. - """ - Filterer.__init__(self) - self._name = None - self.level = _checkLevel(level) - self.formatter = None - self._closed = False - # Add the handler to the global _handlerList (for cleanup on shutdown) - _addHandlerRef(self) - self.createLock() - - def get_name(self): - return self._name - - def set_name(self, name): - with _lock: - if self._name in _handlers: - del _handlers[self._name] - self._name = name - if name: - _handlers[name] = self - - name = property(get_name, set_name) - - def createLock(self): - """ - Acquire a thread lock for serializing access to the underlying I/O. - """ - self.lock = threading.RLock() - _register_at_fork_reinit_lock(self) - - def _at_fork_reinit(self): - self.lock._at_fork_reinit() - - def acquire(self): - """ - Acquire the I/O thread lock. - """ - if self.lock: - self.lock.acquire() - - def release(self): - """ - Release the I/O thread lock. - """ - if self.lock: - self.lock.release() - - def setLevel(self, level): - """ - Set the logging level of this handler. level must be an int or a str. - """ - self.level = _checkLevel(level) - - def format(self, record): - """ - Format the specified record. - - If a formatter is set, use it. Otherwise, use the default formatter - for the module. - """ - if self.formatter: - fmt = self.formatter - else: - fmt = _defaultFormatter - return fmt.format(record) - - def emit(self, record): - """ - Do whatever it takes to actually log the specified logging record. - - This version is intended to be implemented by subclasses and so - raises a NotImplementedError. - """ - raise NotImplementedError('emit must be implemented ' - 'by Handler subclasses') - - def handle(self, record): - """ - Conditionally emit the specified logging record. - - Emission depends on filters which may have been added to the handler. - Wrap the actual emission of the record with acquisition/release of - the I/O thread lock. - - Returns an instance of the log record that was emitted - if it passed all filters, otherwise a false value is returned. - """ - rv = self.filter(record) - if isinstance(rv, LogRecord): - record = rv - if rv: - with self.lock: - self.emit(record) - return rv - - def setFormatter(self, fmt): - """ - Set the formatter for this handler. - """ - self.formatter = fmt - - def flush(self): - """ - Ensure all logging output has been flushed. - - This version does nothing and is intended to be implemented by - subclasses. - """ - pass - - def close(self): - """ - Tidy up any resources used by the handler. - - This version removes the handler from an internal map of handlers, - _handlers, which is used for handler lookup by name. Subclasses - should ensure that this gets called from overridden close() - methods. - """ - #get the module data lock, as we're updating a shared structure. - with _lock: - self._closed = True - if self._name and self._name in _handlers: - del _handlers[self._name] - - def handleError(self, record): - """ - Handle errors which occur during an emit() call. - - This method should be called from handlers when an exception is - encountered during an emit() call. If raiseExceptions is false, - exceptions get silently ignored. This is what is mostly wanted - for a logging system - most users will not care about errors in - the logging system, they are more interested in application errors. - You could, however, replace this with a custom handler if you wish. - The record which was being processed is passed in to this method. - """ - if raiseExceptions and sys.stderr: # see issue 13807 - exc = sys.exception() - try: - sys.stderr.write('--- Logging error ---\n') - traceback.print_exception(exc, limit=None, file=sys.stderr) - sys.stderr.write('Call stack:\n') - # Walk the stack frame up until we're out of logging, - # so as to print the calling context. - frame = exc.__traceback__.tb_frame - while (frame and os.path.dirname(frame.f_code.co_filename) == - __path__[0]): - frame = frame.f_back - if frame: - traceback.print_stack(frame, file=sys.stderr) - else: - # couldn't find the right stack frame, for some reason - sys.stderr.write('Logged from file %s, line %s\n' % ( - record.filename, record.lineno)) - # Issue 18671: output logging message and arguments - try: - sys.stderr.write('Message: %r\n' - 'Arguments: %s\n' % (record.msg, - record.args)) - except RecursionError: # See issue 36272 - raise - except Exception: - sys.stderr.write('Unable to print the message and arguments' - ' - possible formatting error.\nUse the' - ' traceback above to help find the error.\n' - ) - except OSError: #pragma: no cover - pass # see issue 5971 - finally: - del exc - - def __repr__(self): - level = getLevelName(self.level) - return '<%s (%s)>' % (self.__class__.__name__, level) - -class StreamHandler(Handler): - """ - A handler class which writes logging records, appropriately formatted, - to a stream. Note that this class does not close the stream, as - sys.stdout or sys.stderr may be used. - """ - - terminator = '\n' - - def __init__(self, stream=None): - """ - Initialize the handler. - - If stream is not specified, sys.stderr is used. - """ - Handler.__init__(self) - if stream is None: - stream = sys.stderr - self.stream = stream - - def flush(self): - """ - Flushes the stream. - """ - with self.lock: - if self.stream and hasattr(self.stream, "flush"): - self.stream.flush() - - def emit(self, record): - """ - Emit a record. - - If a formatter is specified, it is used to format the record. - The record is then written to the stream with a trailing newline. If - exception information is present, it is formatted using - traceback.print_exception and appended to the stream. If the stream - has an 'encoding' attribute, it is used to determine how to do the - output to the stream. - """ - try: - msg = self.format(record) - stream = self.stream - # issue 35046: merged two stream.writes into one. - stream.write(msg + self.terminator) - self.flush() - except RecursionError: # See issue 36272 - raise - except Exception: - self.handleError(record) - - def setStream(self, stream): - """ - Sets the StreamHandler's stream to the specified value, - if it is different. - - Returns the old stream, if the stream was changed, or None - if it wasn't. - """ - if stream is self.stream: - result = None - else: - result = self.stream - with self.lock: - self.flush() - self.stream = stream - return result - - def __repr__(self): - level = getLevelName(self.level) - name = getattr(self.stream, 'name', '') - # bpo-36015: name can be an int - name = str(name) - if name: - name += ' ' - return '<%s %s(%s)>' % (self.__class__.__name__, name, level) - - __class_getitem__ = classmethod(GenericAlias) - - -class FileHandler(StreamHandler): - """ - A handler class which writes formatted logging records to disk files. - """ - def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None): - """ - Open the specified file and use it as the stream for logging. - """ - # Issue #27493: add support for Path objects to be passed in - filename = os.fspath(filename) - #keep the absolute path, otherwise derived classes which use this - #may come a cropper when the current directory changes - self.baseFilename = os.path.abspath(filename) - self.mode = mode - self.encoding = encoding - if "b" not in mode: - self.encoding = io.text_encoding(encoding) - self.errors = errors - self.delay = delay - # bpo-26789: FileHandler keeps a reference to the builtin open() - # function to be able to open or reopen the file during Python - # finalization. - self._builtin_open = open - if delay: - #We don't open the stream, but we still need to call the - #Handler constructor to set level, formatter, lock etc. - Handler.__init__(self) - self.stream = None - else: - StreamHandler.__init__(self, self._open()) - - def close(self): - """ - Closes the stream. - """ - with self.lock: - try: - if self.stream: - try: - self.flush() - finally: - stream = self.stream - self.stream = None - if hasattr(stream, "close"): - stream.close() - finally: - # Issue #19523: call unconditionally to - # prevent a handler leak when delay is set - # Also see Issue #42378: we also rely on - # self._closed being set to True there - StreamHandler.close(self) - - def _open(self): - """ - Open the current base file with the (original) mode and encoding. - Return the resulting stream. - """ - open_func = self._builtin_open - return open_func(self.baseFilename, self.mode, - encoding=self.encoding, errors=self.errors) - - def emit(self, record): - """ - Emit a record. - - If the stream was not opened because 'delay' was specified in the - constructor, open it before calling the superclass's emit. - - If stream is not open, current mode is 'w' and `_closed=True`, record - will not be emitted (see Issue #42378). - """ - if self.stream is None: - if self.mode != 'w' or not self._closed: - self.stream = self._open() - if self.stream: - StreamHandler.emit(self, record) - - def __repr__(self): - level = getLevelName(self.level) - return '<%s %s (%s)>' % (self.__class__.__name__, self.baseFilename, level) - - -class _StderrHandler(StreamHandler): - """ - This class is like a StreamHandler using sys.stderr, but always uses - whatever sys.stderr is currently set to rather than the value of - sys.stderr at handler construction time. - """ - def __init__(self, level=NOTSET): - """ - Initialize the handler. - """ - Handler.__init__(self, level) - - @property - def stream(self): - return sys.stderr - - -_defaultLastResort = _StderrHandler(WARNING) -lastResort = _defaultLastResort - -#--------------------------------------------------------------------------- -# Manager classes and functions -#--------------------------------------------------------------------------- - -class PlaceHolder(object): - """ - PlaceHolder instances are used in the Manager logger hierarchy to take - the place of nodes for which no loggers have been defined. This class is - intended for internal use only and not as part of the public API. - """ - def __init__(self, alogger): - """ - Initialize with the specified logger being a child of this placeholder. - """ - self.loggerMap = { alogger : None } - - def append(self, alogger): - """ - Add the specified logger as a child of this placeholder. - """ - if alogger not in self.loggerMap: - self.loggerMap[alogger] = None - -# -# Determine which class to use when instantiating loggers. -# - -def setLoggerClass(klass): - """ - Set the class to be used when instantiating a logger. The class should - define __init__() such that only a name argument is required, and the - __init__() should call Logger.__init__() - """ - if klass != Logger: - if not issubclass(klass, Logger): - raise TypeError("logger not derived from logging.Logger: " - + klass.__name__) - global _loggerClass - _loggerClass = klass - -def getLoggerClass(): - """ - Return the class to be used when instantiating a logger. - """ - return _loggerClass - -class Manager(object): - """ - There is [under normal circumstances] just one Manager instance, which - holds the hierarchy of loggers. - """ - def __init__(self, rootnode): - """ - Initialize the manager with the root node of the logger hierarchy. - """ - self.root = rootnode - self.disable = 0 - self.emittedNoHandlerWarning = False - self.loggerDict = {} - self.loggerClass = None - self.logRecordFactory = None - - @property - def disable(self): - return self._disable - - @disable.setter - def disable(self, value): - self._disable = _checkLevel(value) - - def getLogger(self, name): - """ - Get a logger with the specified name (channel name), creating it - if it doesn't yet exist. This name is a dot-separated hierarchical - name, such as "a", "a.b", "a.b.c" or similar. - - If a PlaceHolder existed for the specified name [i.e. the logger - didn't exist but a child of it did], replace it with the created - logger and fix up the parent/child references which pointed to the - placeholder to now point to the logger. - """ - rv = None - if not isinstance(name, str): - raise TypeError('A logger name must be a string') - with _lock: - if name in self.loggerDict: - rv = self.loggerDict[name] - if isinstance(rv, PlaceHolder): - ph = rv - rv = (self.loggerClass or _loggerClass)(name) - rv.manager = self - self.loggerDict[name] = rv - self._fixupChildren(ph, rv) - self._fixupParents(rv) - else: - rv = (self.loggerClass or _loggerClass)(name) - rv.manager = self - self.loggerDict[name] = rv - self._fixupParents(rv) - return rv - - def setLoggerClass(self, klass): - """ - Set the class to be used when instantiating a logger with this Manager. - """ - if klass != Logger: - if not issubclass(klass, Logger): - raise TypeError("logger not derived from logging.Logger: " - + klass.__name__) - self.loggerClass = klass - - def setLogRecordFactory(self, factory): - """ - Set the factory to be used when instantiating a log record with this - Manager. - """ - self.logRecordFactory = factory - - def _fixupParents(self, alogger): - """ - Ensure that there are either loggers or placeholders all the way - from the specified logger to the root of the logger hierarchy. - """ - name = alogger.name - i = name.rfind(".") - rv = None - while (i > 0) and not rv: - substr = name[:i] - if substr not in self.loggerDict: - self.loggerDict[substr] = PlaceHolder(alogger) - else: - obj = self.loggerDict[substr] - if isinstance(obj, Logger): - rv = obj - else: - assert isinstance(obj, PlaceHolder) - obj.append(alogger) - i = name.rfind(".", 0, i - 1) - if not rv: - rv = self.root - alogger.parent = rv - - def _fixupChildren(self, ph, alogger): - """ - Ensure that children of the placeholder ph are connected to the - specified logger. - """ - name = alogger.name - namelen = len(name) - for c in ph.loggerMap.keys(): - #The if means ... if not c.parent.name.startswith(nm) - if c.parent.name[:namelen] != name: - alogger.parent = c.parent - c.parent = alogger - - def _clear_cache(self): - """ - Clear the cache for all loggers in loggerDict - Called when level changes are made - """ - - with _lock: - for logger in self.loggerDict.values(): - if isinstance(logger, Logger): - logger._cache.clear() - self.root._cache.clear() - -#--------------------------------------------------------------------------- -# Logger classes and functions -#--------------------------------------------------------------------------- - -class Logger(Filterer): - """ - Instances of the Logger class represent a single logging channel. A - "logging channel" indicates an area of an application. Exactly how an - "area" is defined is up to the application developer. Since an - application can have any number of areas, logging channels are identified - by a unique string. Application areas can be nested (e.g. an area - of "input processing" might include sub-areas "read CSV files", "read - XLS files" and "read Gnumeric files"). To cater for this natural nesting, - channel names are organized into a namespace hierarchy where levels are - separated by periods, much like the Java or Python package namespace. So - in the instance given above, channel names might be "input" for the upper - level, and "input.csv", "input.xls" and "input.gnu" for the sub-levels. - There is no arbitrary limit to the depth of nesting. - """ - def __init__(self, name, level=NOTSET): - """ - Initialize the logger with a name and an optional level. - """ - Filterer.__init__(self) - self.name = name - self.level = _checkLevel(level) - self.parent = None - self.propagate = True - self.handlers = [] - self.disabled = False - self._cache = {} - - def setLevel(self, level): - """ - Set the logging level of this logger. level must be an int or a str. - """ - self.level = _checkLevel(level) - self.manager._clear_cache() - - def debug(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'DEBUG'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.debug("Houston, we have a %s", "thorny problem", exc_info=True) - """ - if self.isEnabledFor(DEBUG): - self._log(DEBUG, msg, args, **kwargs) - - def info(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'INFO'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.info("Houston, we have a %s", "notable problem", exc_info=True) - """ - if self.isEnabledFor(INFO): - self._log(INFO, msg, args, **kwargs) - - def warning(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'WARNING'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.warning("Houston, we have a %s", "bit of a problem", exc_info=True) - """ - if self.isEnabledFor(WARNING): - self._log(WARNING, msg, args, **kwargs) - - def warn(self, msg, *args, **kwargs): - warnings.warn("The 'warn' method is deprecated, " - "use 'warning' instead", DeprecationWarning, 2) - self.warning(msg, *args, **kwargs) - - def error(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'ERROR'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.error("Houston, we have a %s", "major problem", exc_info=True) - """ - if self.isEnabledFor(ERROR): - self._log(ERROR, msg, args, **kwargs) - - def exception(self, msg, *args, exc_info=True, **kwargs): - """ - Convenience method for logging an ERROR with exception information. - """ - self.error(msg, *args, exc_info=exc_info, **kwargs) - - def critical(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'CRITICAL'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.critical("Houston, we have a %s", "major disaster", exc_info=True) - """ - if self.isEnabledFor(CRITICAL): - self._log(CRITICAL, msg, args, **kwargs) - - def fatal(self, msg, *args, **kwargs): - """ - Don't use this method, use critical() instead. - """ - self.critical(msg, *args, **kwargs) - - def log(self, level, msg, *args, **kwargs): - """ - Log 'msg % args' with the integer severity 'level'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.log(level, "We have a %s", "mysterious problem", exc_info=True) - """ - if not isinstance(level, int): - if raiseExceptions: - raise TypeError("level must be an integer") - else: - return - if self.isEnabledFor(level): - self._log(level, msg, args, **kwargs) - - def findCaller(self, stack_info=False, stacklevel=1): - """ - Find the stack frame of the caller so that we can note the source - file name, line number and function name. - """ - f = currentframe() - #On some versions of IronPython, currentframe() returns None if - #IronPython isn't run with -X:Frames. - if f is None: - return "(unknown file)", 0, "(unknown function)", None - while stacklevel > 0: - next_f = f.f_back - if next_f is None: - ## We've got options here. - ## If we want to use the last (deepest) frame: - break - ## If we want to mimic the warnings module: - #return ("sys", 1, "(unknown function)", None) - ## If we want to be pedantic: - #raise ValueError("call stack is not deep enough") - f = next_f - if not _is_internal_frame(f): - stacklevel -= 1 - co = f.f_code - sinfo = None - if stack_info: - with io.StringIO() as sio: - sio.write("Stack (most recent call last):\n") - traceback.print_stack(f, file=sio) - sinfo = sio.getvalue() - if sinfo[-1] == '\n': - sinfo = sinfo[:-1] - return co.co_filename, f.f_lineno, co.co_name, sinfo - - def makeRecord(self, name, level, fn, lno, msg, args, exc_info, - func=None, extra=None, sinfo=None): - """ - A factory method which can be overridden in subclasses to create - specialized LogRecords. - """ - rv = _logRecordFactory(name, level, fn, lno, msg, args, exc_info, func, - sinfo) - if extra is not None: - for key in extra: - if (key in ["message", "asctime"]) or (key in rv.__dict__): - raise KeyError("Attempt to overwrite %r in LogRecord" % key) - rv.__dict__[key] = extra[key] - return rv - - def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False, - stacklevel=1): - """ - Low-level logging routine which creates a LogRecord and then calls - all the handlers of this logger to handle the record. - """ - sinfo = None - if _srcfile: - #IronPython doesn't track Python frames, so findCaller raises an - #exception on some versions of IronPython. We trap it here so that - #IronPython can use logging. - try: - fn, lno, func, sinfo = self.findCaller(stack_info, stacklevel) - except ValueError: # pragma: no cover - fn, lno, func = "(unknown file)", 0, "(unknown function)" - else: # pragma: no cover - fn, lno, func = "(unknown file)", 0, "(unknown function)" - if exc_info: - if isinstance(exc_info, BaseException): - exc_info = (type(exc_info), exc_info, exc_info.__traceback__) - elif not isinstance(exc_info, tuple): - exc_info = sys.exc_info() - record = self.makeRecord(self.name, level, fn, lno, msg, args, - exc_info, func, extra, sinfo) - self.handle(record) - - def handle(self, record): - """ - Call the handlers for the specified record. - - This method is used for unpickled records received from a socket, as - well as those created locally. Logger-level filtering is applied. - """ - if self.disabled: - return - maybe_record = self.filter(record) - if not maybe_record: - return - if isinstance(maybe_record, LogRecord): - record = maybe_record - self.callHandlers(record) - - def addHandler(self, hdlr): - """ - Add the specified handler to this logger. - """ - with _lock: - if not (hdlr in self.handlers): - self.handlers.append(hdlr) - - def removeHandler(self, hdlr): - """ - Remove the specified handler from this logger. - """ - with _lock: - if hdlr in self.handlers: - self.handlers.remove(hdlr) - - def hasHandlers(self): - """ - See if this logger has any handlers configured. - - Loop through all handlers for this logger and its parents in the - logger hierarchy. Return True if a handler was found, else False. - Stop searching up the hierarchy whenever a logger with the "propagate" - attribute set to zero is found - that will be the last logger which - is checked for the existence of handlers. - """ - c = self - rv = False - while c: - if c.handlers: - rv = True - break - if not c.propagate: - break - else: - c = c.parent - return rv - - def callHandlers(self, record): - """ - Pass a record to all relevant handlers. - - Loop through all handlers for this logger and its parents in the - logger hierarchy. If no handler was found, output a one-off error - message to sys.stderr. Stop searching up the hierarchy whenever a - logger with the "propagate" attribute set to zero is found - that - will be the last logger whose handlers are called. - """ - c = self - found = 0 - while c: - for hdlr in c.handlers: - found = found + 1 - if record.levelno >= hdlr.level: - hdlr.handle(record) - if not c.propagate: - c = None #break out - else: - c = c.parent - if (found == 0): - if lastResort: - if record.levelno >= lastResort.level: - lastResort.handle(record) - elif raiseExceptions and not self.manager.emittedNoHandlerWarning: - sys.stderr.write("No handlers could be found for logger" - " \"%s\"\n" % self.name) - self.manager.emittedNoHandlerWarning = True - - def getEffectiveLevel(self): - """ - Get the effective level for this logger. - - Loop through this logger and its parents in the logger hierarchy, - looking for a non-zero logging level. Return the first one found. - """ - logger = self - while logger: - if logger.level: - return logger.level - logger = logger.parent - return NOTSET - - def isEnabledFor(self, level): - """ - Is this logger enabled for level 'level'? - """ - if self.disabled: - return False - - try: - return self._cache[level] - except KeyError: - with _lock: - if self.manager.disable >= level: - is_enabled = self._cache[level] = False - else: - is_enabled = self._cache[level] = ( - level >= self.getEffectiveLevel() - ) - return is_enabled - - def getChild(self, suffix): - """ - Get a logger which is a descendant to this one. - - This is a convenience method, such that - - logging.getLogger('abc').getChild('def.ghi') - - is the same as - - logging.getLogger('abc.def.ghi') - - It's useful, for example, when the parent logger is named using - __name__ rather than a literal string. - """ - if self.root is not self: - suffix = '.'.join((self.name, suffix)) - return self.manager.getLogger(suffix) - - def getChildren(self): - - def _hierlevel(logger): - if logger is logger.manager.root: - return 0 - return 1 + logger.name.count('.') - - d = self.manager.loggerDict - with _lock: - # exclude PlaceHolders - the last check is to ensure that lower-level - # descendants aren't returned - if there are placeholders, a logger's - # parent field might point to a grandparent or ancestor thereof. - return set(item for item in d.values() - if isinstance(item, Logger) and item.parent is self and - _hierlevel(item) == 1 + _hierlevel(item.parent)) - - def __repr__(self): - level = getLevelName(self.getEffectiveLevel()) - return '<%s %s (%s)>' % (self.__class__.__name__, self.name, level) - - def __reduce__(self): - if getLogger(self.name) is not self: - import pickle - raise pickle.PicklingError('logger cannot be pickled') - return getLogger, (self.name,) - - -class RootLogger(Logger): - """ - A root logger is not that different to any other logger, except that - it must have a logging level and there is only one instance of it in - the hierarchy. - """ - def __init__(self, level): - """ - Initialize the logger with the name "root". - """ - Logger.__init__(self, "root", level) - - def __reduce__(self): - return getLogger, () - -_loggerClass = Logger - -class LoggerAdapter(object): - """ - An adapter for loggers which makes it easier to specify contextual - information in logging output. - """ - - def __init__(self, logger, extra=None, merge_extra=False): - """ - Initialize the adapter with a logger and an optional dict-like object - which provides contextual information. This constructor signature - allows easy stacking of LoggerAdapters, if so desired. - - You can effectively pass keyword arguments as shown in the - following example: - - adapter = LoggerAdapter(someLogger, dict(p1=v1, p2="v2")) - - By default, LoggerAdapter objects will drop the "extra" argument - passed on the individual log calls to use its own instead. - - Initializing it with merge_extra=True will instead merge both - maps when logging, the individual call extra taking precedence - over the LoggerAdapter instance extra - - .. versionchanged:: 3.13 - The *merge_extra* argument was added. - """ - self.logger = logger - self.extra = extra - self.merge_extra = merge_extra - - def process(self, msg, kwargs): - """ - Process the logging message and keyword arguments passed in to - a logging call to insert contextual information. You can either - manipulate the message itself, the keyword args or both. Return - the message and kwargs modified (or not) to suit your needs. - - Normally, you'll only need to override this one method in a - LoggerAdapter subclass for your specific needs. - """ - if self.merge_extra and kwargs.get("extra") is not None: - if self.extra is not None: - kwargs["extra"] = {**self.extra, **kwargs["extra"]} - else: - kwargs["extra"] = self.extra - return msg, kwargs - - # - # Boilerplate convenience methods - # - def debug(self, msg, *args, **kwargs): - """ - Delegate a debug call to the underlying logger. - """ - self.log(DEBUG, msg, *args, **kwargs) - - def info(self, msg, *args, **kwargs): - """ - Delegate an info call to the underlying logger. - """ - self.log(INFO, msg, *args, **kwargs) - - def warning(self, msg, *args, **kwargs): - """ - Delegate a warning call to the underlying logger. - """ - self.log(WARNING, msg, *args, **kwargs) - - def warn(self, msg, *args, **kwargs): - warnings.warn("The 'warn' method is deprecated, " - "use 'warning' instead", DeprecationWarning, 2) - self.warning(msg, *args, **kwargs) - - def error(self, msg, *args, **kwargs): - """ - Delegate an error call to the underlying logger. - """ - self.log(ERROR, msg, *args, **kwargs) - - def exception(self, msg, *args, exc_info=True, **kwargs): - """ - Delegate an exception call to the underlying logger. - """ - self.log(ERROR, msg, *args, exc_info=exc_info, **kwargs) - - def critical(self, msg, *args, **kwargs): - """ - Delegate a critical call to the underlying logger. - """ - self.log(CRITICAL, msg, *args, **kwargs) - - def log(self, level, msg, *args, **kwargs): - """ - Delegate a log call to the underlying logger, after adding - contextual information from this adapter instance. - """ - if self.isEnabledFor(level): - msg, kwargs = self.process(msg, kwargs) - self.logger.log(level, msg, *args, **kwargs) - - def isEnabledFor(self, level): - """ - Is this logger enabled for level 'level'? - """ - return self.logger.isEnabledFor(level) - - def setLevel(self, level): - """ - Set the specified level on the underlying logger. - """ - self.logger.setLevel(level) - - def getEffectiveLevel(self): - """ - Get the effective level for the underlying logger. - """ - return self.logger.getEffectiveLevel() - - def hasHandlers(self): - """ - See if the underlying logger has any handlers. - """ - return self.logger.hasHandlers() - - def _log(self, level, msg, args, **kwargs): - """ - Low-level log implementation, proxied to allow nested logger adapters. - """ - return self.logger._log(level, msg, args, **kwargs) - - @property - def manager(self): - return self.logger.manager - - @manager.setter - def manager(self, value): - self.logger.manager = value - - @property - def name(self): - return self.logger.name - - def __repr__(self): - logger = self.logger - level = getLevelName(logger.getEffectiveLevel()) - return '<%s %s (%s)>' % (self.__class__.__name__, logger.name, level) - - __class_getitem__ = classmethod(GenericAlias) - -root = RootLogger(WARNING) -Logger.root = root -Logger.manager = Manager(Logger.root) - -#--------------------------------------------------------------------------- -# Configuration classes and functions -#--------------------------------------------------------------------------- - -def basicConfig(**kwargs): - """ - Do basic configuration for the logging system. - - This function does nothing if the root logger already has handlers - configured, unless the keyword argument *force* is set to ``True``. - It is a convenience method intended for use by simple scripts - to do one-shot configuration of the logging package. - - The default behaviour is to create a StreamHandler which writes to - sys.stderr, set a formatter using the BASIC_FORMAT format string, and - add the handler to the root logger. - - A number of optional keyword arguments may be specified, which can alter - the default behaviour. - - filename Specifies that a FileHandler be created, using the specified - filename, rather than a StreamHandler. - filemode Specifies the mode to open the file, if filename is specified - (if filemode is unspecified, it defaults to 'a'). - format Use the specified format string for the handler. - datefmt Use the specified date/time format. - style If a format string is specified, use this to specify the - type of format string (possible values '%', '{', '$', for - %-formatting, :meth:`str.format` and :class:`string.Template` - - defaults to '%'). - level Set the root logger level to the specified level. - stream Use the specified stream to initialize the StreamHandler. Note - that this argument is incompatible with 'filename' - if both - are present, 'stream' is ignored. - handlers If specified, this should be an iterable of already created - handlers, which will be added to the root logger. Any handler - in the list which does not have a formatter assigned will be - assigned the formatter created in this function. - force If this keyword is specified as true, any existing handlers - attached to the root logger are removed and closed, before - carrying out the configuration as specified by the other - arguments. - encoding If specified together with a filename, this encoding is passed to - the created FileHandler, causing it to be used when the file is - opened. - errors If specified together with a filename, this value is passed to the - created FileHandler, causing it to be used when the file is - opened in text mode. If not specified, the default value is - `backslashreplace`. - - Note that you could specify a stream created using open(filename, mode) - rather than passing the filename and mode in. However, it should be - remembered that StreamHandler does not close its stream (since it may be - using sys.stdout or sys.stderr), whereas FileHandler closes its stream - when the handler is closed. - - .. versionchanged:: 3.2 - Added the ``style`` parameter. - - .. versionchanged:: 3.3 - Added the ``handlers`` parameter. A ``ValueError`` is now thrown for - incompatible arguments (e.g. ``handlers`` specified together with - ``filename``/``filemode``, or ``filename``/``filemode`` specified - together with ``stream``, or ``handlers`` specified together with - ``stream``. - - .. versionchanged:: 3.8 - Added the ``force`` parameter. - - .. versionchanged:: 3.9 - Added the ``encoding`` and ``errors`` parameters. - """ - # Add thread safety in case someone mistakenly calls - # basicConfig() from multiple threads - with _lock: - force = kwargs.pop('force', False) - encoding = kwargs.pop('encoding', None) - errors = kwargs.pop('errors', 'backslashreplace') - if force: - for h in root.handlers[:]: - root.removeHandler(h) - h.close() - if len(root.handlers) == 0: - handlers = kwargs.pop("handlers", None) - if handlers is None: - if "stream" in kwargs and "filename" in kwargs: - raise ValueError("'stream' and 'filename' should not be " - "specified together") - else: - if "stream" in kwargs or "filename" in kwargs: - raise ValueError("'stream' or 'filename' should not be " - "specified together with 'handlers'") - if handlers is None: - filename = kwargs.pop("filename", None) - mode = kwargs.pop("filemode", 'a') - if filename: - if 'b' in mode: - errors = None - else: - encoding = io.text_encoding(encoding) - h = FileHandler(filename, mode, - encoding=encoding, errors=errors) - else: - stream = kwargs.pop("stream", None) - h = StreamHandler(stream) - handlers = [h] - dfs = kwargs.pop("datefmt", None) - style = kwargs.pop("style", '%') - if style not in _STYLES: - raise ValueError('Style must be one of: %s' % ','.join( - _STYLES.keys())) - fs = kwargs.pop("format", _STYLES[style][1]) - fmt = Formatter(fs, dfs, style) - for h in handlers: - if h.formatter is None: - h.setFormatter(fmt) - root.addHandler(h) - level = kwargs.pop("level", None) - if level is not None: - root.setLevel(level) - if kwargs: - keys = ', '.join(kwargs.keys()) - raise ValueError('Unrecognised argument(s): %s' % keys) - -#--------------------------------------------------------------------------- -# Utility functions at module level. -# Basically delegate everything to the root logger. -#--------------------------------------------------------------------------- - -def getLogger(name=None): - """ - Return a logger with the specified name, creating it if necessary. - - If no name is specified, return the root logger. - """ - if not name or isinstance(name, str) and name == root.name: - return root - return Logger.manager.getLogger(name) - -def critical(msg, *args, **kwargs): - """ - Log a message with severity 'CRITICAL' on the root logger. If the logger - has no handlers, call basicConfig() to add a console handler with a - pre-defined format. - """ - if len(root.handlers) == 0: - basicConfig() - root.critical(msg, *args, **kwargs) - -def fatal(msg, *args, **kwargs): - """ - Don't use this function, use critical() instead. - """ - critical(msg, *args, **kwargs) - -def error(msg, *args, **kwargs): - """ - Log a message with severity 'ERROR' on the root logger. If the logger has - no handlers, call basicConfig() to add a console handler with a pre-defined - format. - """ - if len(root.handlers) == 0: - basicConfig() - root.error(msg, *args, **kwargs) - -def exception(msg, *args, exc_info=True, **kwargs): - """ - Log a message with severity 'ERROR' on the root logger, with exception - information. If the logger has no handlers, basicConfig() is called to add - a console handler with a pre-defined format. - """ - error(msg, *args, exc_info=exc_info, **kwargs) - -def warning(msg, *args, **kwargs): - """ - Log a message with severity 'WARNING' on the root logger. If the logger has - no handlers, call basicConfig() to add a console handler with a pre-defined - format. - """ - if len(root.handlers) == 0: - basicConfig() - root.warning(msg, *args, **kwargs) - -def warn(msg, *args, **kwargs): - warnings.warn("The 'warn' function is deprecated, " - "use 'warning' instead", DeprecationWarning, 2) - warning(msg, *args, **kwargs) - -def info(msg, *args, **kwargs): - """ - Log a message with severity 'INFO' on the root logger. If the logger has - no handlers, call basicConfig() to add a console handler with a pre-defined - format. - """ - if len(root.handlers) == 0: - basicConfig() - root.info(msg, *args, **kwargs) - -def debug(msg, *args, **kwargs): - """ - Log a message with severity 'DEBUG' on the root logger. If the logger has - no handlers, call basicConfig() to add a console handler with a pre-defined - format. - """ - if len(root.handlers) == 0: - basicConfig() - root.debug(msg, *args, **kwargs) - -def log(level, msg, *args, **kwargs): - """ - Log 'msg % args' with the integer severity 'level' on the root logger. If - the logger has no handlers, call basicConfig() to add a console handler - with a pre-defined format. - """ - if len(root.handlers) == 0: - basicConfig() - root.log(level, msg, *args, **kwargs) - -def disable(level=CRITICAL): - """ - Disable all logging calls of severity 'level' and below. - """ - root.manager.disable = level - root.manager._clear_cache() - -def shutdown(handlerList=_handlerList): - """ - Perform any cleanup actions in the logging system (e.g. flushing - buffers). - - Should be called at application exit. - """ - for wr in reversed(handlerList[:]): - #errors might occur, for example, if files are locked - #we just ignore them if raiseExceptions is not set - try: - h = wr() - if h: - try: - h.acquire() - # MemoryHandlers might not want to be flushed on close, - # but circular imports prevent us scoping this to just - # those handlers. hence the default to True. - if getattr(h, 'flushOnClose', True): - h.flush() - h.close() - except (OSError, ValueError): - # Ignore errors which might be caused - # because handlers have been closed but - # references to them are still around at - # application exit. - pass - finally: - h.release() - except: # ignore everything, as we're shutting down - if raiseExceptions: - raise - #else, swallow - -#Let's try and shutdown automatically on application exit... -import atexit -atexit.register(shutdown) - -# Null handler - -class NullHandler(Handler): - """ - This handler does nothing. It's intended to be used to avoid the - "No handlers could be found for logger XXX" one-off warning. This is - important for library code, which may contain code to log events. If a user - of the library does not configure logging, the one-off warning might be - produced; to avoid this, the library developer simply needs to instantiate - a NullHandler and add it to the top-level logger of the library module or - package. - """ - def handle(self, record): - """Stub.""" - - def emit(self, record): - """Stub.""" - - def createLock(self): - self.lock = None - - def _at_fork_reinit(self): - pass - -# Warnings integration - -_warnings_showwarning = None - -def _showwarning(message, category, filename, lineno, file=None, line=None): - """ - Implementation of showwarnings which redirects to logging, which will first - check to see if the file parameter is None. If a file is specified, it will - delegate to the original warnings implementation of showwarning. Otherwise, - it will call warnings.formatwarning and will log the resulting string to a - warnings logger named "py.warnings" with level logging.WARNING. - """ - if file is not None: - if _warnings_showwarning is not None: - _warnings_showwarning(message, category, filename, lineno, file, line) - else: - s = warnings.formatwarning(message, category, filename, lineno, line) - logger = getLogger("py.warnings") - if not logger.handlers: - logger.addHandler(NullHandler()) - # bpo-46557: Log str(s) as msg instead of logger.warning("%s", s) - # since some log aggregation tools group logs by the msg arg - logger.warning(str(s)) - -def captureWarnings(capture): - """ - If capture is true, redirect all warnings to the logging package. - If capture is False, ensure that warnings are not redirected to logging - but to their original destinations. - """ - global _warnings_showwarning - if capture: - if _warnings_showwarning is None: - _warnings_showwarning = warnings.showwarning - warnings.showwarning = _showwarning - else: - if _warnings_showwarning is not None: - warnings.showwarning = _warnings_showwarning - _warnings_showwarning = None diff --git a/Python314_4_x86_Template/Lib/logging/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/logging/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 49afedf89cd17db57d3034cef1ac35d919ab8480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96803 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 KHqEWX=>H$^IbrSq diff --git a/Python314_4_x86_Template/Lib/logging/__pycache__/config.cpython-314.pyc b/Python314_4_x86_Template/Lib/logging/__pycache__/config.cpython-314.pyc deleted file mode 100644 index 6b130fd115f30aadb48db72d6c9060ff571291d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46574 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 G?f(WsB$L+w diff --git a/Python314_4_x86_Template/Lib/logging/__pycache__/handlers.cpython-314.pyc b/Python314_4_x86_Template/Lib/logging/__pycache__/handlers.cpython-314.pyc deleted file mode 100644 index b972ee3b4d4a44cdbb1e28f0d4f27413821b753f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67792 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 diff --git a/Python314_4_x86_Template/Lib/logging/config.py b/Python314_4_x86_Template/Lib/logging/config.py deleted file mode 100644 index 3d9aa00fa..000000000 --- a/Python314_4_x86_Template/Lib/logging/config.py +++ /dev/null @@ -1,1077 +0,0 @@ -# Copyright 2001-2023 by Vinay Sajip. All Rights Reserved. -# -# Permission to use, copy, modify, and distribute this software and its -# documentation for any purpose and without fee is hereby granted, -# provided that the above copyright notice appear in all copies and that -# both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Vinay Sajip -# not be used in advertising or publicity pertaining to distribution -# of the software without specific, written prior permission. -# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -Configuration functions for the logging package for Python. The core package -is based on PEP 282 and comments thereto in comp.lang.python, and influenced -by Apache's log4j system. - -Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved. - -To use, simply 'import logging' and log away! -""" - -import errno -import functools -import io -import logging -import logging.handlers -import os -import queue -import re -import struct -import threading -import traceback - -from socketserver import ThreadingTCPServer, StreamRequestHandler - - -DEFAULT_LOGGING_CONFIG_PORT = 9030 - -RESET_ERROR = errno.ECONNRESET - -# -# The following code implements a socket listener for on-the-fly -# reconfiguration of logging. -# -# _listener holds the server object doing the listening -_listener = None - -def fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None): - """ - Read the logging configuration from a ConfigParser-format file. - - This can be called several times from an application, allowing an end user - the ability to select from various pre-canned configurations (if the - developer provides a mechanism to present the choices and load the chosen - configuration). - """ - import configparser - - if isinstance(fname, str): - if not os.path.exists(fname): - raise FileNotFoundError(f"{fname} doesn't exist") - elif not os.path.getsize(fname): - raise RuntimeError(f'{fname} is an empty file') - - if isinstance(fname, configparser.RawConfigParser): - cp = fname - else: - try: - cp = configparser.ConfigParser(defaults) - if hasattr(fname, 'readline'): - cp.read_file(fname) - else: - encoding = io.text_encoding(encoding) - cp.read(fname, encoding=encoding) - except configparser.ParsingError as e: - raise RuntimeError(f'{fname} is invalid: {e}') - - formatters = _create_formatters(cp) - - # critical section - with logging._lock: - _clearExistingHandlers() - - # Handlers add themselves to logging._handlers - handlers = _install_handlers(cp, formatters) - _install_loggers(cp, handlers, disable_existing_loggers) - - -def _resolve(name): - """Resolve a dotted name to a global object.""" - name = name.split('.') - used = name.pop(0) - found = __import__(used) - for n in name: - used = used + '.' + n - try: - found = getattr(found, n) - except AttributeError: - __import__(used) - found = getattr(found, n) - return found - -def _strip_spaces(alist): - return map(str.strip, alist) - -def _create_formatters(cp): - """Create and return formatters""" - flist = cp["formatters"]["keys"] - if not len(flist): - return {} - flist = flist.split(",") - flist = _strip_spaces(flist) - formatters = {} - for form in flist: - sectname = "formatter_%s" % form - fs = cp.get(sectname, "format", raw=True, fallback=None) - dfs = cp.get(sectname, "datefmt", raw=True, fallback=None) - stl = cp.get(sectname, "style", raw=True, fallback='%') - defaults = cp.get(sectname, "defaults", raw=True, fallback=None) - - c = logging.Formatter - class_name = cp[sectname].get("class") - if class_name: - c = _resolve(class_name) - - if defaults is not None: - defaults = eval(defaults, vars(logging)) - f = c(fs, dfs, stl, defaults=defaults) - else: - f = c(fs, dfs, stl) - formatters[form] = f - return formatters - - -def _install_handlers(cp, formatters): - """Install and return handlers""" - hlist = cp["handlers"]["keys"] - if not len(hlist): - return {} - hlist = hlist.split(",") - hlist = _strip_spaces(hlist) - handlers = {} - fixups = [] #for inter-handler references - for hand in hlist: - section = cp["handler_%s" % hand] - klass = section["class"] - fmt = section.get("formatter", "") - try: - klass = eval(klass, vars(logging)) - except (AttributeError, NameError): - klass = _resolve(klass) - args = section.get("args", '()') - args = eval(args, vars(logging)) - kwargs = section.get("kwargs", '{}') - kwargs = eval(kwargs, vars(logging)) - h = klass(*args, **kwargs) - h.name = hand - if "level" in section: - level = section["level"] - h.setLevel(level) - if len(fmt): - h.setFormatter(formatters[fmt]) - if issubclass(klass, logging.handlers.MemoryHandler): - target = section.get("target", "") - if len(target): #the target handler may not be loaded yet, so keep for later... - fixups.append((h, target)) - handlers[hand] = h - #now all handlers are loaded, fixup inter-handler references... - for h, t in fixups: - h.setTarget(handlers[t]) - return handlers - -def _handle_existing_loggers(existing, child_loggers, disable_existing): - """ - When (re)configuring logging, handle loggers which were in the previous - configuration but are not in the new configuration. There's no point - deleting them as other threads may continue to hold references to them; - and by disabling them, you stop them doing any logging. - - However, don't disable children of named loggers, as that's probably not - what was intended by the user. Also, allow existing loggers to NOT be - disabled if disable_existing is false. - """ - root = logging.root - for log in existing: - logger = root.manager.loggerDict[log] - if log in child_loggers: - if not isinstance(logger, logging.PlaceHolder): - logger.setLevel(logging.NOTSET) - logger.handlers = [] - logger.propagate = True - else: - logger.disabled = disable_existing - -def _install_loggers(cp, handlers, disable_existing): - """Create and install loggers""" - - # configure the root first - llist = cp["loggers"]["keys"] - llist = llist.split(",") - llist = list(_strip_spaces(llist)) - llist.remove("root") - section = cp["logger_root"] - root = logging.root - log = root - if "level" in section: - level = section["level"] - log.setLevel(level) - for h in root.handlers[:]: - root.removeHandler(h) - hlist = section["handlers"] - if len(hlist): - hlist = hlist.split(",") - hlist = _strip_spaces(hlist) - for hand in hlist: - log.addHandler(handlers[hand]) - - #and now the others... - #we don't want to lose the existing loggers, - #since other threads may have pointers to them. - #existing is set to contain all existing loggers, - #and as we go through the new configuration we - #remove any which are configured. At the end, - #what's left in existing is the set of loggers - #which were in the previous configuration but - #which are not in the new configuration. - existing = list(root.manager.loggerDict.keys()) - #The list needs to be sorted so that we can - #avoid disabling child loggers of explicitly - #named loggers. With a sorted list it is easier - #to find the child loggers. - existing.sort() - #We'll keep the list of existing loggers - #which are children of named loggers here... - child_loggers = [] - #now set up the new ones... - for log in llist: - section = cp["logger_%s" % log] - qn = section["qualname"] - propagate = section.getint("propagate", fallback=1) - logger = logging.getLogger(qn) - if qn in existing: - i = existing.index(qn) + 1 # start with the entry after qn - prefixed = qn + "." - pflen = len(prefixed) - num_existing = len(existing) - while i < num_existing: - if existing[i][:pflen] == prefixed: - child_loggers.append(existing[i]) - i += 1 - existing.remove(qn) - if "level" in section: - level = section["level"] - logger.setLevel(level) - for h in logger.handlers[:]: - logger.removeHandler(h) - logger.propagate = propagate - logger.disabled = 0 - hlist = section["handlers"] - if len(hlist): - hlist = hlist.split(",") - hlist = _strip_spaces(hlist) - for hand in hlist: - logger.addHandler(handlers[hand]) - - #Disable any old loggers. There's no point deleting - #them as other threads may continue to hold references - #and by disabling them, you stop them doing any logging. - #However, don't disable children of named loggers, as that's - #probably not what was intended by the user. - #for log in existing: - # logger = root.manager.loggerDict[log] - # if log in child_loggers: - # logger.level = logging.NOTSET - # logger.handlers = [] - # logger.propagate = 1 - # elif disable_existing_loggers: - # logger.disabled = 1 - _handle_existing_loggers(existing, child_loggers, disable_existing) - - -def _clearExistingHandlers(): - """Clear and close existing handlers""" - logging._handlers.clear() - logging.shutdown(logging._handlerList[:]) - del logging._handlerList[:] - - -IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) - - -def valid_ident(s): - m = IDENTIFIER.match(s) - if not m: - raise ValueError('Not a valid Python identifier: %r' % s) - return True - - -class ConvertingMixin(object): - """For ConvertingXXX's, this mixin class provides common functions""" - - def convert_with_key(self, key, value, replace=True): - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - if replace: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def convert(self, value): - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result - - -# The ConvertingXXX classes are wrappers around standard Python containers, -# and they serve to convert any suitable values in the container. The -# conversion converts base dicts, lists and tuples to their wrapped -# equivalents, whereas strings which match a conversion format are converted -# appropriately. -# -# Each wrapper should have a configurator attribute holding the actual -# configurator to use for conversion. - -class ConvertingDict(dict, ConvertingMixin): - """A converting dictionary wrapper.""" - - def __getitem__(self, key): - value = dict.__getitem__(self, key) - return self.convert_with_key(key, value) - - def get(self, key, default=None): - value = dict.get(self, key, default) - return self.convert_with_key(key, value) - - def pop(self, key, default=None): - value = dict.pop(self, key, default) - return self.convert_with_key(key, value, replace=False) - -class ConvertingList(list, ConvertingMixin): - """A converting list wrapper.""" - def __getitem__(self, key): - value = list.__getitem__(self, key) - return self.convert_with_key(key, value) - - def pop(self, idx=-1): - value = list.pop(self, idx) - return self.convert(value) - -class ConvertingTuple(tuple, ConvertingMixin): - """A converting tuple wrapper.""" - def __getitem__(self, key): - value = tuple.__getitem__(self, key) - # Can't replace a tuple entry. - return self.convert_with_key(key, value, replace=False) - -class BaseConfigurator(object): - """ - The configurator base class which defines some useful defaults. - """ - - CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$') - - WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') - DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') - INDEX_PATTERN = re.compile(r'^\[([^\[\]]*)\]\s*') - DIGIT_PATTERN = re.compile(r'^\d+$') - - value_converters = { - 'ext' : 'ext_convert', - 'cfg' : 'cfg_convert', - } - - # We might want to use a different one, e.g. importlib - importer = staticmethod(__import__) - - def __init__(self, config): - self.config = ConvertingDict(config) - self.config.configurator = self - - def resolve(self, s): - """ - Resolve strings to objects using standard import and attribute - syntax. - """ - name = s.split('.') - used = name.pop(0) - try: - found = self.importer(used) - for frag in name: - used += '.' + frag - try: - found = getattr(found, frag) - except AttributeError: - self.importer(used) - found = getattr(found, frag) - return found - except ImportError as e: - v = ValueError('Cannot resolve %r: %s' % (s, e)) - raise v from e - - def ext_convert(self, value): - """Default converter for the ext:// protocol.""" - return self.resolve(value) - - def cfg_convert(self, value): - """Default converter for the cfg:// protocol.""" - rest = value - m = self.WORD_PATTERN.match(rest) - if m is None: - raise ValueError("Unable to convert %r" % value) - else: - rest = rest[m.end():] - d = self.config[m.groups()[0]] - #print d, rest - while rest: - m = self.DOT_PATTERN.match(rest) - if m: - d = d[m.groups()[0]] - else: - m = self.INDEX_PATTERN.match(rest) - if m: - idx = m.groups()[0] - if not self.DIGIT_PATTERN.match(idx): - d = d[idx] - else: - try: - n = int(idx) # try as number first (most likely) - d = d[n] - except TypeError: - d = d[idx] - if m: - rest = rest[m.end():] - else: - raise ValueError('Unable to convert ' - '%r at %r' % (value, rest)) - #rest should be empty - return d - - def convert(self, value): - """ - Convert values to an appropriate type. dicts, lists and tuples are - replaced by their converting alternatives. Strings are checked to - see if they have a conversion format and are converted if they do. - """ - if not isinstance(value, ConvertingDict) and isinstance(value, dict): - value = ConvertingDict(value) - value.configurator = self - elif not isinstance(value, ConvertingList) and isinstance(value, list): - value = ConvertingList(value) - value.configurator = self - elif not isinstance(value, ConvertingTuple) and\ - isinstance(value, tuple) and not hasattr(value, '_fields'): - value = ConvertingTuple(value) - value.configurator = self - elif isinstance(value, str): # str for py3k - m = self.CONVERT_PATTERN.match(value) - if m: - d = m.groupdict() - prefix = d['prefix'] - converter = self.value_converters.get(prefix, None) - if converter: - suffix = d['suffix'] - converter = getattr(self, converter) - value = converter(suffix) - return value - - def configure_custom(self, config): - """Configure an object with a user-supplied factory.""" - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - # Check for valid identifiers - kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))} - result = c(**kwargs) - props = config.pop('.', None) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def as_tuple(self, value): - """Utility function which converts lists to tuples.""" - if isinstance(value, list): - value = tuple(value) - return value - -def _is_queue_like_object(obj): - """Check that *obj* implements the Queue API.""" - if isinstance(obj, (queue.Queue, queue.SimpleQueue)): - return True - # defer importing multiprocessing as much as possible - from multiprocessing.queues import Queue as MPQueue - if isinstance(obj, MPQueue): - return True - # Depending on the multiprocessing start context, we cannot create - # a multiprocessing.managers.BaseManager instance 'mm' to get the - # runtime type of mm.Queue() or mm.JoinableQueue() (see gh-119819). - # - # Since we only need an object implementing the Queue API, we only - # do a protocol check, but we do not use typing.runtime_checkable() - # and typing.Protocol to reduce import time (see gh-121723). - # - # Ideally, we would have wanted to simply use strict type checking - # instead of a protocol-based type checking since the latter does - # not check the method signatures. - # - # Note that only 'put_nowait' and 'get' are required by the logging - # queue handler and queue listener (see gh-124653) and that other - # methods are either optional or unused. - minimal_queue_interface = ['put_nowait', 'get'] - return all(callable(getattr(obj, method, None)) - for method in minimal_queue_interface) - -class DictConfigurator(BaseConfigurator): - """ - Configure logging using a dictionary-like object to describe the - configuration. - """ - - def configure(self): - """Do the configuration.""" - - config = self.config - if 'version' not in config: - raise ValueError("dictionary doesn't specify a version") - if config['version'] != 1: - raise ValueError("Unsupported version: %s" % config['version']) - incremental = config.pop('incremental', False) - EMPTY_DICT = {} - with logging._lock: - if incremental: - handlers = config.get('handlers', EMPTY_DICT) - for name in handlers: - if name not in logging._handlers: - raise ValueError('No handler found with ' - 'name %r' % name) - else: - try: - handler = logging._handlers[name] - handler_config = handlers[name] - level = handler_config.get('level', None) - if level: - handler.setLevel(logging._checkLevel(level)) - except Exception as e: - raise ValueError('Unable to configure handler ' - '%r' % name) from e - loggers = config.get('loggers', EMPTY_DICT) - for name in loggers: - try: - self.configure_logger(name, loggers[name], True) - except Exception as e: - raise ValueError('Unable to configure logger ' - '%r' % name) from e - root = config.get('root', None) - if root: - try: - self.configure_root(root, True) - except Exception as e: - raise ValueError('Unable to configure root ' - 'logger') from e - else: - disable_existing = config.pop('disable_existing_loggers', True) - - _clearExistingHandlers() - - # Do formatters first - they don't refer to anything else - formatters = config.get('formatters', EMPTY_DICT) - for name in formatters: - try: - formatters[name] = self.configure_formatter( - formatters[name]) - except Exception as e: - raise ValueError('Unable to configure ' - 'formatter %r' % name) from e - # Next, do filters - they don't refer to anything else, either - filters = config.get('filters', EMPTY_DICT) - for name in filters: - try: - filters[name] = self.configure_filter(filters[name]) - except Exception as e: - raise ValueError('Unable to configure ' - 'filter %r' % name) from e - - # Next, do handlers - they refer to formatters and filters - # As handlers can refer to other handlers, sort the keys - # to allow a deterministic order of configuration - handlers = config.get('handlers', EMPTY_DICT) - deferred = [] - for name in sorted(handlers): - try: - handler = self.configure_handler(handlers[name]) - handler.name = name - handlers[name] = handler - except Exception as e: - if ' not configured yet' in str(e.__cause__): - deferred.append(name) - else: - raise ValueError('Unable to configure handler ' - '%r' % name) from e - - # Now do any that were deferred - for name in deferred: - try: - handler = self.configure_handler(handlers[name]) - handler.name = name - handlers[name] = handler - except Exception as e: - raise ValueError('Unable to configure handler ' - '%r' % name) from e - - # Next, do loggers - they refer to handlers and filters - - #we don't want to lose the existing loggers, - #since other threads may have pointers to them. - #existing is set to contain all existing loggers, - #and as we go through the new configuration we - #remove any which are configured. At the end, - #what's left in existing is the set of loggers - #which were in the previous configuration but - #which are not in the new configuration. - root = logging.root - existing = list(root.manager.loggerDict.keys()) - #The list needs to be sorted so that we can - #avoid disabling child loggers of explicitly - #named loggers. With a sorted list it is easier - #to find the child loggers. - existing.sort() - #We'll keep the list of existing loggers - #which are children of named loggers here... - child_loggers = [] - #now set up the new ones... - loggers = config.get('loggers', EMPTY_DICT) - for name in loggers: - if name in existing: - i = existing.index(name) + 1 # look after name - prefixed = name + "." - pflen = len(prefixed) - num_existing = len(existing) - while i < num_existing: - if existing[i][:pflen] == prefixed: - child_loggers.append(existing[i]) - i += 1 - existing.remove(name) - try: - self.configure_logger(name, loggers[name]) - except Exception as e: - raise ValueError('Unable to configure logger ' - '%r' % name) from e - - #Disable any old loggers. There's no point deleting - #them as other threads may continue to hold references - #and by disabling them, you stop them doing any logging. - #However, don't disable children of named loggers, as that's - #probably not what was intended by the user. - #for log in existing: - # logger = root.manager.loggerDict[log] - # if log in child_loggers: - # logger.level = logging.NOTSET - # logger.handlers = [] - # logger.propagate = True - # elif disable_existing: - # logger.disabled = True - _handle_existing_loggers(existing, child_loggers, - disable_existing) - - # And finally, do the root logger - root = config.get('root', None) - if root: - try: - self.configure_root(root) - except Exception as e: - raise ValueError('Unable to configure root ' - 'logger') from e - - def configure_formatter(self, config): - """Configure a formatter from a dictionary.""" - if '()' in config: - factory = config['()'] # for use in exception handler - try: - result = self.configure_custom(config) - except TypeError as te: - if "'format'" not in str(te): - raise - # logging.Formatter and its subclasses expect the `fmt` - # parameter instead of `format`. Retry passing configuration - # with `fmt`. - config['fmt'] = config.pop('format') - config['()'] = factory - result = self.configure_custom(config) - else: - fmt = config.get('format', None) - dfmt = config.get('datefmt', None) - style = config.get('style', '%') - cname = config.get('class', None) - defaults = config.get('defaults', None) - - if not cname: - c = logging.Formatter - else: - c = _resolve(cname) - - kwargs = {} - - # Add defaults only if it exists. - # Prevents TypeError in custom formatter callables that do not - # accept it. - if defaults is not None: - kwargs['defaults'] = defaults - - # A TypeError would be raised if "validate" key is passed in with a formatter callable - # that does not accept "validate" as a parameter - if 'validate' in config: # if user hasn't mentioned it, the default will be fine - result = c(fmt, dfmt, style, config['validate'], **kwargs) - else: - result = c(fmt, dfmt, style, **kwargs) - - return result - - def configure_filter(self, config): - """Configure a filter from a dictionary.""" - if '()' in config: - result = self.configure_custom(config) - else: - name = config.get('name', '') - result = logging.Filter(name) - return result - - def add_filters(self, filterer, filters): - """Add filters to a filterer from a list of names.""" - for f in filters: - try: - if callable(f) or callable(getattr(f, 'filter', None)): - filter_ = f - else: - filter_ = self.config['filters'][f] - filterer.addFilter(filter_) - except Exception as e: - raise ValueError('Unable to add filter %r' % f) from e - - def _configure_queue_handler(self, klass, **kwargs): - if 'queue' in kwargs: - q = kwargs.pop('queue') - else: - q = queue.Queue() # unbounded - - rhl = kwargs.pop('respect_handler_level', False) - lklass = kwargs.pop('listener', logging.handlers.QueueListener) - handlers = kwargs.pop('handlers', []) - - listener = lklass(q, *handlers, respect_handler_level=rhl) - handler = klass(q, **kwargs) - handler.listener = listener - return handler - - def configure_handler(self, config): - """Configure a handler from a dictionary.""" - config_copy = dict(config) # for restoring in case of error - formatter = config.pop('formatter', None) - if formatter: - try: - formatter = self.config['formatters'][formatter] - except Exception as e: - raise ValueError('Unable to set formatter ' - '%r' % formatter) from e - level = config.pop('level', None) - filters = config.pop('filters', None) - if '()' in config: - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - factory = c - else: - cname = config.pop('class') - if callable(cname): - klass = cname - else: - klass = self.resolve(cname) - if issubclass(klass, logging.handlers.MemoryHandler): - if 'flushLevel' in config: - config['flushLevel'] = logging._checkLevel(config['flushLevel']) - if 'target' in config: - # Special case for handler which refers to another handler - try: - tn = config['target'] - th = self.config['handlers'][tn] - if not isinstance(th, logging.Handler): - config.update(config_copy) # restore for deferred cfg - raise TypeError('target not configured yet') - config['target'] = th - except Exception as e: - raise ValueError('Unable to set target handler %r' % tn) from e - elif issubclass(klass, logging.handlers.QueueHandler): - # Another special case for handler which refers to other handlers - # if 'handlers' not in config: - # raise ValueError('No handlers specified for a QueueHandler') - if 'queue' in config: - qspec = config['queue'] - - if isinstance(qspec, str): - q = self.resolve(qspec) - if not callable(q): - raise TypeError('Invalid queue specifier %r' % qspec) - config['queue'] = q() - elif isinstance(qspec, dict): - if '()' not in qspec: - raise TypeError('Invalid queue specifier %r' % qspec) - config['queue'] = self.configure_custom(dict(qspec)) - elif not _is_queue_like_object(qspec): - raise TypeError('Invalid queue specifier %r' % qspec) - - if 'listener' in config: - lspec = config['listener'] - if isinstance(lspec, type): - if not issubclass(lspec, logging.handlers.QueueListener): - raise TypeError('Invalid listener specifier %r' % lspec) - else: - if isinstance(lspec, str): - listener = self.resolve(lspec) - if isinstance(listener, type) and\ - not issubclass(listener, logging.handlers.QueueListener): - raise TypeError('Invalid listener specifier %r' % lspec) - elif isinstance(lspec, dict): - if '()' not in lspec: - raise TypeError('Invalid listener specifier %r' % lspec) - listener = self.configure_custom(dict(lspec)) - else: - raise TypeError('Invalid listener specifier %r' % lspec) - if not callable(listener): - raise TypeError('Invalid listener specifier %r' % lspec) - config['listener'] = listener - if 'handlers' in config: - hlist = [] - try: - for hn in config['handlers']: - h = self.config['handlers'][hn] - if not isinstance(h, logging.Handler): - config.update(config_copy) # restore for deferred cfg - raise TypeError('Required handler %r ' - 'is not configured yet' % hn) - hlist.append(h) - except Exception as e: - raise ValueError('Unable to set required handler %r' % hn) from e - config['handlers'] = hlist - elif issubclass(klass, logging.handlers.SMTPHandler) and\ - 'mailhost' in config: - config['mailhost'] = self.as_tuple(config['mailhost']) - elif issubclass(klass, logging.handlers.SysLogHandler) and\ - 'address' in config: - config['address'] = self.as_tuple(config['address']) - if issubclass(klass, logging.handlers.QueueHandler): - factory = functools.partial(self._configure_queue_handler, klass) - else: - factory = klass - kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))} - # When deprecation ends for using the 'strm' parameter, remove the - # "except TypeError ..." - try: - result = factory(**kwargs) - except TypeError as te: - if "'stream'" not in str(te): - raise - #The argument name changed from strm to stream - #Retry with old name. - #This is so that code can be used with older Python versions - #(e.g. by Django) - kwargs['strm'] = kwargs.pop('stream') - result = factory(**kwargs) - - import warnings - warnings.warn( - "Support for custom logging handlers with the 'strm' argument " - "is deprecated and scheduled for removal in Python 3.16. " - "Define handlers with the 'stream' argument instead.", - DeprecationWarning, - stacklevel=2, - ) - if formatter: - result.setFormatter(formatter) - if level is not None: - result.setLevel(logging._checkLevel(level)) - if filters: - self.add_filters(result, filters) - props = config.pop('.', None) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def add_handlers(self, logger, handlers): - """Add handlers to a logger from a list of names.""" - for h in handlers: - try: - logger.addHandler(self.config['handlers'][h]) - except Exception as e: - raise ValueError('Unable to add handler %r' % h) from e - - def common_logger_config(self, logger, config, incremental=False): - """ - Perform configuration which is common to root and non-root loggers. - """ - level = config.get('level', None) - if level is not None: - logger.setLevel(logging._checkLevel(level)) - if not incremental: - #Remove any existing handlers - for h in logger.handlers[:]: - logger.removeHandler(h) - handlers = config.get('handlers', None) - if handlers: - self.add_handlers(logger, handlers) - filters = config.get('filters', None) - if filters: - self.add_filters(logger, filters) - - def configure_logger(self, name, config, incremental=False): - """Configure a non-root logger from a dictionary.""" - logger = logging.getLogger(name) - self.common_logger_config(logger, config, incremental) - logger.disabled = False - propagate = config.get('propagate', None) - if propagate is not None: - logger.propagate = propagate - - def configure_root(self, config, incremental=False): - """Configure a root logger from a dictionary.""" - root = logging.getLogger() - self.common_logger_config(root, config, incremental) - -dictConfigClass = DictConfigurator - -def dictConfig(config): - """Configure logging using a dictionary.""" - dictConfigClass(config).configure() - - -def listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None): - """ - Start up a socket server on the specified port, and listen for new - configurations. - - These will be sent as a file suitable for processing by fileConfig(). - Returns a Thread object on which you can call start() to start the server, - and which you can join() when appropriate. To stop the server, call - stopListening(). - - Use the ``verify`` argument to verify any bytes received across the wire - from a client. If specified, it should be a callable which receives a - single argument - the bytes of configuration data received across the - network - and it should return either ``None``, to indicate that the - passed in bytes could not be verified and should be discarded, or a - byte string which is then passed to the configuration machinery as - normal. Note that you can return transformed bytes, e.g. by decrypting - the bytes passed in. - """ - - class ConfigStreamHandler(StreamRequestHandler): - """ - Handler for a logging configuration request. - - It expects a completely new logging configuration and uses fileConfig - to install it. - """ - def handle(self): - """ - Handle a request. - - Each request is expected to be a 4-byte length, packed using - struct.pack(">L", n), followed by the config file. - Uses fileConfig() to do the grunt work. - """ - try: - conn = self.connection - chunk = conn.recv(4) - if len(chunk) == 4: - slen = struct.unpack(">L", chunk)[0] - chunk = self.connection.recv(slen) - while len(chunk) < slen: - chunk = chunk + conn.recv(slen - len(chunk)) - if self.server.verify is not None: - chunk = self.server.verify(chunk) - if chunk is not None: # verified, can process - chunk = chunk.decode("utf-8") - try: - import json - d =json.loads(chunk) - assert isinstance(d, dict) - dictConfig(d) - except Exception: - #Apply new configuration. - - file = io.StringIO(chunk) - try: - fileConfig(file) - except Exception: - traceback.print_exc() - if self.server.ready: - self.server.ready.set() - except OSError as e: - if e.errno != RESET_ERROR: - raise - - class ConfigSocketReceiver(ThreadingTCPServer): - """ - A simple TCP socket-based logging config receiver. - """ - - allow_reuse_address = True - allow_reuse_port = False - - def __init__(self, host='localhost', port=DEFAULT_LOGGING_CONFIG_PORT, - handler=None, ready=None, verify=None): - ThreadingTCPServer.__init__(self, (host, port), handler) - with logging._lock: - self.abort = 0 - self.timeout = 1 - self.ready = ready - self.verify = verify - - def serve_until_stopped(self): - import select - abort = 0 - while not abort: - rd, wr, ex = select.select([self.socket.fileno()], - [], [], - self.timeout) - if rd: - self.handle_request() - with logging._lock: - abort = self.abort - self.server_close() - - class Server(threading.Thread): - - def __init__(self, rcvr, hdlr, port, verify): - super(Server, self).__init__() - self.rcvr = rcvr - self.hdlr = hdlr - self.port = port - self.verify = verify - self.ready = threading.Event() - - def run(self): - server = self.rcvr(port=self.port, handler=self.hdlr, - ready=self.ready, - verify=self.verify) - if self.port == 0: - self.port = server.server_address[1] - self.ready.set() - global _listener - with logging._lock: - _listener = server - server.serve_until_stopped() - - return Server(ConfigSocketReceiver, ConfigStreamHandler, port, verify) - -def stopListening(): - """ - Stop the listening server which was created with a call to listen(). - """ - global _listener - with logging._lock: - if _listener: - _listener.abort = 1 - _listener = None diff --git a/Python314_4_x86_Template/Lib/logging/handlers.py b/Python314_4_x86_Template/Lib/logging/handlers.py deleted file mode 100644 index 4a07258f8..000000000 --- a/Python314_4_x86_Template/Lib/logging/handlers.py +++ /dev/null @@ -1,1645 +0,0 @@ -# Copyright 2001-2021 by Vinay Sajip. All Rights Reserved. -# -# Permission to use, copy, modify, and distribute this software and its -# documentation for any purpose and without fee is hereby granted, -# provided that the above copyright notice appear in all copies and that -# both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of Vinay Sajip -# not be used in advertising or publicity pertaining to distribution -# of the software without specific, written prior permission. -# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -""" -Additional handlers for the logging package for Python. The core package is -based on PEP 282 and comments thereto in comp.lang.python. - -Copyright (C) 2001-2021 Vinay Sajip. All Rights Reserved. - -To use, simply 'import logging.handlers' and log away! -""" - -import copy -import io -import logging -import os -import pickle -import queue -import re -import socket -import struct -import threading -import time - -# -# Some constants... -# - -DEFAULT_TCP_LOGGING_PORT = 9020 -DEFAULT_UDP_LOGGING_PORT = 9021 -DEFAULT_HTTP_LOGGING_PORT = 9022 -DEFAULT_SOAP_LOGGING_PORT = 9023 -SYSLOG_UDP_PORT = 514 -SYSLOG_TCP_PORT = 514 - -_MIDNIGHT = 24 * 60 * 60 # number of seconds in a day - -class BaseRotatingHandler(logging.FileHandler): - """ - Base class for handlers that rotate log files at a certain point. - Not meant to be instantiated directly. Instead, use RotatingFileHandler - or TimedRotatingFileHandler. - """ - namer = None - rotator = None - - def __init__(self, filename, mode, encoding=None, delay=False, errors=None): - """ - Use the specified filename for streamed logging - """ - logging.FileHandler.__init__(self, filename, mode=mode, - encoding=encoding, delay=delay, - errors=errors) - self.mode = mode - self.encoding = encoding - self.errors = errors - - def emit(self, record): - """ - Emit a record. - - Output the record to the file, catering for rollover as described - in doRollover(). - """ - try: - if self.shouldRollover(record): - self.doRollover() - logging.FileHandler.emit(self, record) - except Exception: - self.handleError(record) - - def rotation_filename(self, default_name): - """ - Modify the filename of a log file when rotating. - - This is provided so that a custom filename can be provided. - - The default implementation calls the 'namer' attribute of the - handler, if it's callable, passing the default name to - it. If the attribute isn't callable (the default is None), the name - is returned unchanged. - - :param default_name: The default name for the log file. - """ - if not callable(self.namer): - result = default_name - else: - result = self.namer(default_name) - return result - - def rotate(self, source, dest): - """ - When rotating, rotate the current log. - - The default implementation calls the 'rotator' attribute of the - handler, if it's callable, passing the source and dest arguments to - it. If the attribute isn't callable (the default is None), the source - is simply renamed to the destination. - - :param source: The source filename. This is normally the base - filename, e.g. 'test.log' - :param dest: The destination filename. This is normally - what the source is rotated to, e.g. 'test.log.1'. - """ - if not callable(self.rotator): - # Issue 18940: A file may not have been created if delay is True. - if os.path.exists(source): - os.rename(source, dest) - else: - self.rotator(source, dest) - -class RotatingFileHandler(BaseRotatingHandler): - """ - Handler for logging to a set of files, which switches from one file - to the next when the current file reaches a certain size. - """ - def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, - encoding=None, delay=False, errors=None): - """ - Open the specified file and use it as the stream for logging. - - By default, the file grows indefinitely. You can specify particular - values of maxBytes and backupCount to allow the file to rollover at - a predetermined size. - - Rollover occurs whenever the current log file is nearly maxBytes in - length. If backupCount is >= 1, the system will successively create - new files with the same pathname as the base file, but with extensions - ".1", ".2" etc. appended to it. For example, with a backupCount of 5 - and a base file name of "app.log", you would get "app.log", - "app.log.1", "app.log.2", ... through to "app.log.5". The file being - written to is always "app.log" - when it gets filled up, it is closed - and renamed to "app.log.1", and if files "app.log.1", "app.log.2" etc. - exist, then they are renamed to "app.log.2", "app.log.3" etc. - respectively. - - If maxBytes is zero, rollover never occurs. - """ - # If rotation/rollover is wanted, it doesn't make sense to use another - # mode. If for example 'w' were specified, then if there were multiple - # runs of the calling application, the logs from previous runs would be - # lost if the 'w' is respected, because the log file would be truncated - # on each run. - if maxBytes > 0: - mode = 'a' - if "b" not in mode: - encoding = io.text_encoding(encoding) - BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding, - delay=delay, errors=errors) - self.maxBytes = maxBytes - self.backupCount = backupCount - - def doRollover(self): - """ - Do a rollover, as described in __init__(). - """ - if self.stream: - self.stream.close() - self.stream = None - if self.backupCount > 0: - for i in range(self.backupCount - 1, 0, -1): - sfn = self.rotation_filename("%s.%d" % (self.baseFilename, i)) - dfn = self.rotation_filename("%s.%d" % (self.baseFilename, - i + 1)) - if os.path.exists(sfn): - if os.path.exists(dfn): - os.remove(dfn) - os.rename(sfn, dfn) - dfn = self.rotation_filename(self.baseFilename + ".1") - if os.path.exists(dfn): - os.remove(dfn) - self.rotate(self.baseFilename, dfn) - if not self.delay: - self.stream = self._open() - - def shouldRollover(self, record): - """ - Determine if rollover should occur. - - Basically, see if the supplied record would cause the file to exceed - the size limit we have. - """ - if self.stream is None: # delay was set... - self.stream = self._open() - if self.maxBytes > 0: # are we rolling over? - try: - pos = self.stream.tell() - except io.UnsupportedOperation: - # gh-143237: Never rollover a named pipe. - return False - if not pos: - # gh-116263: Never rollover an empty file - return False - msg = "%s\n" % self.format(record) - if pos + len(msg) >= self.maxBytes: - # See bpo-45401: Never rollover anything other than regular files - if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename): - return False - return True - return False - -class TimedRotatingFileHandler(BaseRotatingHandler): - """ - Handler for logging to a file, rotating the log file at certain timed - intervals. - - If backupCount is > 0, when rollover is done, no more than backupCount - files are kept - the oldest ones are deleted. - """ - def __init__(self, filename, when='h', interval=1, backupCount=0, - encoding=None, delay=False, utc=False, atTime=None, - errors=None): - encoding = io.text_encoding(encoding) - BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding, - delay=delay, errors=errors) - self.when = when.upper() - self.backupCount = backupCount - self.utc = utc - self.atTime = atTime - # Calculate the real rollover interval, which is just the number of - # seconds between rollovers. Also set the filename suffix used when - # a rollover occurs. Current 'when' events supported: - # S - Seconds - # M - Minutes - # H - Hours - # D - Days - # midnight - roll over at midnight - # W{0-6} - roll over on a certain day; 0 - Monday - # - # Case of the 'when' specifier is not important; lower or upper case - # will work. - if self.when == 'S': - self.interval = 1 # one second - self.suffix = "%Y-%m-%d_%H-%M-%S" - extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(?!\d)" - elif self.when == 'M': - self.interval = 60 # one minute - self.suffix = "%Y-%m-%d_%H-%M" - extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}-\d{2}(?!\d)" - elif self.when == 'H': - self.interval = 60 * 60 # one hour - self.suffix = "%Y-%m-%d_%H" - extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}(?!\d)" - elif self.when == 'D' or self.when == 'MIDNIGHT': - self.interval = 60 * 60 * 24 # one day - self.suffix = "%Y-%m-%d" - extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}(?!\d)" - elif self.when.startswith('W'): - self.interval = 60 * 60 * 24 * 7 # one week - if len(self.when) != 2: - raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s" % self.when) - if self.when[1] < '0' or self.when[1] > '6': - raise ValueError("Invalid day specified for weekly rollover: %s" % self.when) - self.dayOfWeek = int(self.when[1]) - self.suffix = "%Y-%m-%d" - extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}(?!\d)" - else: - raise ValueError("Invalid rollover interval specified: %s" % self.when) - - # extMatch is a pattern for matching a datetime suffix in a file name. - # After custom naming, it is no longer guaranteed to be separated by - # periods from other parts of the filename. The lookup statements - # (?<!\d) and (?!\d) ensure that the datetime suffix (which itself - # starts and ends with digits) is not preceded or followed by digits. - # This reduces the number of false matches and improves performance. - self.extMatch = re.compile(extMatch, re.ASCII) - self.interval = self.interval * interval # multiply by units requested - # The following line added because the filename passed in could be a - # path object (see Issue #27493), but self.baseFilename will be a string - filename = self.baseFilename - if os.path.exists(filename): - t = int(os.stat(filename).st_mtime) - else: - t = int(time.time()) - self.rolloverAt = self.computeRollover(t) - - def computeRollover(self, currentTime): - """ - Work out the rollover time based on the specified time. - """ - result = currentTime + self.interval - # If we are rolling over at midnight or weekly, then the interval is already known. - # What we need to figure out is WHEN the next interval is. In other words, - # if you are rolling over at midnight, then your base interval is 1 day, - # but you want to start that one day clock at midnight, not now. So, we - # have to fudge the rolloverAt value in order to trigger the first rollover - # at the right time. After that, the regular interval will take care of - # the rest. Note that this code doesn't care about leap seconds. :) - if self.when == 'MIDNIGHT' or self.when.startswith('W'): - # This could be done with less code, but I wanted it to be clear - if self.utc: - t = time.gmtime(currentTime) - else: - t = time.localtime(currentTime) - currentHour = t[3] - currentMinute = t[4] - currentSecond = t[5] - currentDay = t[6] - # r is the number of seconds left between now and the next rotation - if self.atTime is None: - rotate_ts = _MIDNIGHT - else: - rotate_ts = ((self.atTime.hour * 60 + self.atTime.minute)*60 + - self.atTime.second) - - r = rotate_ts - ((currentHour * 60 + currentMinute) * 60 + - currentSecond) - if r <= 0: - # Rotate time is before the current time (for example when - # self.rotateAt is 13:45 and it now 14:15), rotation is - # tomorrow. - r += _MIDNIGHT - currentDay = (currentDay + 1) % 7 - result = currentTime + r - # If we are rolling over on a certain day, add in the number of days until - # the next rollover, but offset by 1 since we just calculated the time - # until the next day starts. There are three cases: - # Case 1) The day to rollover is today; in this case, do nothing - # Case 2) The day to rollover is further in the interval (i.e., today is - # day 2 (Wednesday) and rollover is on day 6 (Sunday). Days to - # next rollover is simply 6 - 2 - 1, or 3. - # Case 3) The day to rollover is behind us in the interval (i.e., today - # is day 5 (Saturday) and rollover is on day 3 (Thursday). - # Days to rollover is 6 - 5 + 3, or 4. In this case, it's the - # number of days left in the current week (1) plus the number - # of days in the next week until the rollover day (3). - # The calculations described in 2) and 3) above need to have a day added. - # This is because the above time calculation takes us to midnight on this - # day, i.e. the start of the next day. - if self.when.startswith('W'): - day = currentDay # 0 is Monday - if day != self.dayOfWeek: - if day < self.dayOfWeek: - daysToWait = self.dayOfWeek - day - else: - daysToWait = 6 - day + self.dayOfWeek + 1 - result += daysToWait * _MIDNIGHT - result += self.interval - _MIDNIGHT * 7 - else: - result += self.interval - _MIDNIGHT - if not self.utc: - dstNow = t[-1] - dstAtRollover = time.localtime(result)[-1] - if dstNow != dstAtRollover: - if not dstNow: # DST kicks in before next rollover, so we need to deduct an hour - addend = -3600 - if not time.localtime(result-3600)[-1]: - addend = 0 - else: # DST bows out before next rollover, so we need to add an hour - addend = 3600 - result += addend - return result - - def shouldRollover(self, record): - """ - Determine if rollover should occur. - - record is not used, as we are just comparing times, but it is needed so - the method signatures are the same - """ - t = int(time.time()) - if t >= self.rolloverAt: - # See #89564: Never rollover anything other than regular files - if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename): - # The file is not a regular file, so do not rollover, but do - # set the next rollover time to avoid repeated checks. - self.rolloverAt = self.computeRollover(t) - return False - - return True - return False - - def getFilesToDelete(self): - """ - Determine the files to delete when rolling over. - - More specific than the earlier method, which just used glob.glob(). - """ - dirName, baseName = os.path.split(self.baseFilename) - fileNames = os.listdir(dirName) - result = [] - if self.namer is None: - prefix = baseName + '.' - plen = len(prefix) - for fileName in fileNames: - if fileName[:plen] == prefix: - suffix = fileName[plen:] - if self.extMatch.fullmatch(suffix): - result.append(os.path.join(dirName, fileName)) - else: - for fileName in fileNames: - # Our files could be just about anything after custom naming, - # but they should contain the datetime suffix. - # Try to find the datetime suffix in the file name and verify - # that the file name can be generated by this handler. - m = self.extMatch.search(fileName) - while m: - dfn = self.namer(self.baseFilename + "." + m[0]) - if os.path.basename(dfn) == fileName: - result.append(os.path.join(dirName, fileName)) - break - m = self.extMatch.search(fileName, m.start() + 1) - - if len(result) < self.backupCount: - result = [] - else: - result.sort() - result = result[:len(result) - self.backupCount] - return result - - def doRollover(self): - """ - do a rollover; in this case, a date/time stamp is appended to the filename - when the rollover happens. However, you want the file to be named for the - start of the interval, not the current time. If there is a backup count, - then we have to get a list of matching filenames, sort them and remove - the one with the oldest suffix. - """ - # get the time that this sequence started at and make it a TimeTuple - currentTime = int(time.time()) - t = self.rolloverAt - self.interval - if self.utc: - timeTuple = time.gmtime(t) - else: - timeTuple = time.localtime(t) - dstNow = time.localtime(currentTime)[-1] - dstThen = timeTuple[-1] - if dstNow != dstThen: - if dstNow: - addend = 3600 - else: - addend = -3600 - timeTuple = time.localtime(t + addend) - dfn = self.rotation_filename(self.baseFilename + "." + - time.strftime(self.suffix, timeTuple)) - if os.path.exists(dfn): - # Already rolled over. - return - - if self.stream: - self.stream.close() - self.stream = None - self.rotate(self.baseFilename, dfn) - if self.backupCount > 0: - for s in self.getFilesToDelete(): - os.remove(s) - if not self.delay: - self.stream = self._open() - self.rolloverAt = self.computeRollover(currentTime) - -class WatchedFileHandler(logging.FileHandler): - """ - A handler for logging to a file, which watches the file - to see if it has changed while in use. This can happen because of - usage of programs such as newsyslog and logrotate which perform - log file rotation. This handler, intended for use under Unix, - watches the file to see if it has changed since the last emit. - (A file has changed if its device or inode have changed.) - If it has changed, the old file stream is closed, and the file - opened to get a new stream. - - This handler is not appropriate for use under Windows, because - under Windows open files cannot be moved or renamed - logging - opens the files with exclusive locks - and so there is no need - for such a handler. - - This handler is based on a suggestion and patch by Chad J. - Schroeder. - """ - def __init__(self, filename, mode='a', encoding=None, delay=False, - errors=None): - if "b" not in mode: - encoding = io.text_encoding(encoding) - logging.FileHandler.__init__(self, filename, mode=mode, - encoding=encoding, delay=delay, - errors=errors) - self.dev, self.ino = -1, -1 - self._statstream() - - def _statstream(self): - if self.stream is None: - return - sres = os.fstat(self.stream.fileno()) - self.dev = sres.st_dev - self.ino = sres.st_ino - - def reopenIfNeeded(self): - """ - Reopen log file if needed. - - Checks if the underlying file has changed, and if it - has, close the old stream and reopen the file to get the - current stream. - """ - if self.stream is None: - return - - # Reduce the chance of race conditions by stat'ing by path only - # once and then fstat'ing our new fd if we opened a new log stream. - # See issue #14632: Thanks to John Mulligan for the problem report - # and patch. - try: - # stat the file by path, checking for existence - sres = os.stat(self.baseFilename) - - # compare file system stat with that of our stream file handle - reopen = (sres.st_dev != self.dev or sres.st_ino != self.ino) - except FileNotFoundError: - reopen = True - - if not reopen: - return - - # we have an open file handle, clean it up - self.stream.flush() - self.stream.close() - self.stream = None # See Issue #21742: _open () might fail. - - # open a new file handle and get new stat info from that fd - self.stream = self._open() - self._statstream() - - def emit(self, record): - """ - Emit a record. - - If underlying file has changed, reopen the file before emitting the - record to it. - """ - self.reopenIfNeeded() - logging.FileHandler.emit(self, record) - - -class SocketHandler(logging.Handler): - """ - A handler class which writes logging records, in pickle format, to - a streaming socket. The socket is kept open across logging calls. - If the peer resets it, an attempt is made to reconnect on the next call. - The pickle which is sent is that of the LogRecord's attribute dictionary - (__dict__), so that the receiver does not need to have the logging module - installed in order to process the logging event. - - To unpickle the record at the receiving end into a LogRecord, use the - makeLogRecord function. - """ - - def __init__(self, host, port): - """ - Initializes the handler with a specific host address and port. - - When the attribute *closeOnError* is set to True - if a socket error - occurs, the socket is silently closed and then reopened on the next - logging call. - """ - logging.Handler.__init__(self) - self.host = host - self.port = port - if port is None: - self.address = host - else: - self.address = (host, port) - self.sock = None - self.closeOnError = False - self.retryTime = None - # - # Exponential backoff parameters. - # - self.retryStart = 1.0 - self.retryMax = 30.0 - self.retryFactor = 2.0 - - def makeSocket(self, timeout=1): - """ - A factory method which allows subclasses to define the precise - type of socket they want. - """ - if self.port is not None: - result = socket.create_connection(self.address, timeout=timeout) - else: - result = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - result.settimeout(timeout) - try: - result.connect(self.address) - except OSError: - result.close() # Issue 19182 - raise - return result - - def createSocket(self): - """ - Try to create a socket, using an exponential backoff with - a max retry time. Thanks to Robert Olson for the original patch - (SF #815911) which has been slightly refactored. - """ - now = time.time() - # Either retryTime is None, in which case this - # is the first time back after a disconnect, or - # we've waited long enough. - if self.retryTime is None: - attempt = True - else: - attempt = (now >= self.retryTime) - if attempt: - try: - self.sock = self.makeSocket() - self.retryTime = None # next time, no delay before trying - except OSError: - #Creation failed, so set the retry time and return. - if self.retryTime is None: - self.retryPeriod = self.retryStart - else: - self.retryPeriod = self.retryPeriod * self.retryFactor - if self.retryPeriod > self.retryMax: - self.retryPeriod = self.retryMax - self.retryTime = now + self.retryPeriod - - def send(self, s): - """ - Send a pickled string to the socket. - - This function allows for partial sends which can happen when the - network is busy. - """ - if self.sock is None: - self.createSocket() - #self.sock can be None either because we haven't reached the retry - #time yet, or because we have reached the retry time and retried, - #but are still unable to connect. - if self.sock: - try: - self.sock.sendall(s) - except OSError: #pragma: no cover - self.sock.close() - self.sock = None # so we can call createSocket next time - - def makePickle(self, record): - """ - Pickles the record in binary format with a length prefix, and - returns it ready for transmission across the socket. - """ - ei = record.exc_info - if ei: - # just to get traceback text into record.exc_text ... - dummy = self.format(record) - # See issue #14436: If msg or args are objects, they may not be - # available on the receiving end. So we convert the msg % args - # to a string, save it as msg and zap the args. - d = dict(record.__dict__) - d['msg'] = record.getMessage() - d['args'] = None - d['exc_info'] = None - # Issue #25685: delete 'message' if present: redundant with 'msg' - d.pop('message', None) - s = pickle.dumps(d, 1) - slen = struct.pack(">L", len(s)) - return slen + s - - def handleError(self, record): - """ - Handle an error during logging. - - An error has occurred during logging. Most likely cause - - connection lost. Close the socket so that we can retry on the - next event. - """ - if self.closeOnError and self.sock: - self.sock.close() - self.sock = None #try to reconnect next time - else: - logging.Handler.handleError(self, record) - - def emit(self, record): - """ - Emit a record. - - Pickles the record and writes it to the socket in binary format. - If there is an error with the socket, silently drop the packet. - If there was a problem with the socket, re-establishes the - socket. - """ - try: - s = self.makePickle(record) - self.send(s) - except Exception: - self.handleError(record) - - def close(self): - """ - Closes the socket. - """ - with self.lock: - sock = self.sock - if sock: - self.sock = None - sock.close() - logging.Handler.close(self) - -class DatagramHandler(SocketHandler): - """ - A handler class which writes logging records, in pickle format, to - a datagram socket. The pickle which is sent is that of the LogRecord's - attribute dictionary (__dict__), so that the receiver does not need to - have the logging module installed in order to process the logging event. - - To unpickle the record at the receiving end into a LogRecord, use the - makeLogRecord function. - - """ - def __init__(self, host, port): - """ - Initializes the handler with a specific host address and port. - """ - SocketHandler.__init__(self, host, port) - self.closeOnError = False - - def makeSocket(self): - """ - The factory method of SocketHandler is here overridden to create - a UDP socket (SOCK_DGRAM). - """ - if self.port is None: - family = socket.AF_UNIX - else: - family = socket.AF_INET - s = socket.socket(family, socket.SOCK_DGRAM) - return s - - def send(self, s): - """ - Send a pickled string to a socket. - - This function no longer allows for partial sends which can happen - when the network is busy - UDP does not guarantee delivery and - can deliver packets out of sequence. - """ - if self.sock is None: - self.createSocket() - self.sock.sendto(s, self.address) - -class SysLogHandler(logging.Handler): - """ - A handler class which sends formatted logging records to a syslog - server. Based on Sam Rushing's syslog module: - http://www.nightmare.com/squirl/python-ext/misc/syslog.py - Contributed by Nicolas Untz (after which minor refactoring changes - have been made). - """ - - # from <linux/sys/syslog.h>: - # ====================================================================== - # priorities/facilities are encoded into a single 32-bit quantity, where - # the bottom 3 bits are the priority (0-7) and the top 28 bits are the - # facility (0-big number). Both the priorities and the facilities map - # roughly one-to-one to strings in the syslogd(8) source code. This - # mapping is included in this file. - # - # priorities (these are ordered) - - LOG_EMERG = 0 # system is unusable - LOG_ALERT = 1 # action must be taken immediately - LOG_CRIT = 2 # critical conditions - LOG_ERR = 3 # error conditions - LOG_WARNING = 4 # warning conditions - LOG_NOTICE = 5 # normal but significant condition - LOG_INFO = 6 # informational - LOG_DEBUG = 7 # debug-level messages - - # facility codes - LOG_KERN = 0 # kernel messages - LOG_USER = 1 # random user-level messages - LOG_MAIL = 2 # mail system - LOG_DAEMON = 3 # system daemons - LOG_AUTH = 4 # security/authorization messages - LOG_SYSLOG = 5 # messages generated internally by syslogd - LOG_LPR = 6 # line printer subsystem - LOG_NEWS = 7 # network news subsystem - LOG_UUCP = 8 # UUCP subsystem - LOG_CRON = 9 # clock daemon - LOG_AUTHPRIV = 10 # security/authorization messages (private) - LOG_FTP = 11 # FTP daemon - LOG_NTP = 12 # NTP subsystem - LOG_SECURITY = 13 # Log audit - LOG_CONSOLE = 14 # Log alert - LOG_SOLCRON = 15 # Scheduling daemon (Solaris) - - # other codes through 15 reserved for system use - LOG_LOCAL0 = 16 # reserved for local use - LOG_LOCAL1 = 17 # reserved for local use - LOG_LOCAL2 = 18 # reserved for local use - LOG_LOCAL3 = 19 # reserved for local use - LOG_LOCAL4 = 20 # reserved for local use - LOG_LOCAL5 = 21 # reserved for local use - LOG_LOCAL6 = 22 # reserved for local use - LOG_LOCAL7 = 23 # reserved for local use - - priority_names = { - "alert": LOG_ALERT, - "crit": LOG_CRIT, - "critical": LOG_CRIT, - "debug": LOG_DEBUG, - "emerg": LOG_EMERG, - "err": LOG_ERR, - "error": LOG_ERR, # DEPRECATED - "info": LOG_INFO, - "notice": LOG_NOTICE, - "panic": LOG_EMERG, # DEPRECATED - "warn": LOG_WARNING, # DEPRECATED - "warning": LOG_WARNING, - } - - facility_names = { - "auth": LOG_AUTH, - "authpriv": LOG_AUTHPRIV, - "console": LOG_CONSOLE, - "cron": LOG_CRON, - "daemon": LOG_DAEMON, - "ftp": LOG_FTP, - "kern": LOG_KERN, - "lpr": LOG_LPR, - "mail": LOG_MAIL, - "news": LOG_NEWS, - "ntp": LOG_NTP, - "security": LOG_SECURITY, - "solaris-cron": LOG_SOLCRON, - "syslog": LOG_SYSLOG, - "user": LOG_USER, - "uucp": LOG_UUCP, - "local0": LOG_LOCAL0, - "local1": LOG_LOCAL1, - "local2": LOG_LOCAL2, - "local3": LOG_LOCAL3, - "local4": LOG_LOCAL4, - "local5": LOG_LOCAL5, - "local6": LOG_LOCAL6, - "local7": LOG_LOCAL7, - } - - # Originally added to work around GH-43683. Unnecessary since GH-50043 but kept - # for backwards compatibility. - priority_map = { - "DEBUG" : "debug", - "INFO" : "info", - "WARNING" : "warning", - "ERROR" : "error", - "CRITICAL" : "critical" - } - - def __init__(self, address=('localhost', SYSLOG_UDP_PORT), - facility=LOG_USER, socktype=None, timeout=None): - """ - Initialize a handler. - - If address is specified as a string, a UNIX socket is used. To log to a - local syslogd, "SysLogHandler(address="/dev/log")" can be used. - If facility is not specified, LOG_USER is used. If socktype is - specified as socket.SOCK_DGRAM or socket.SOCK_STREAM, that specific - socket type will be used. For Unix sockets, you can also specify a - socktype of None, in which case socket.SOCK_DGRAM will be used, falling - back to socket.SOCK_STREAM. - """ - logging.Handler.__init__(self) - - self.address = address - self.facility = facility - self.socktype = socktype - self.timeout = timeout - self.socket = None - self.createSocket() - - def _connect_unixsocket(self, address): - use_socktype = self.socktype - if use_socktype is None: - use_socktype = socket.SOCK_DGRAM - self.socket = socket.socket(socket.AF_UNIX, use_socktype) - try: - self.socket.connect(address) - # it worked, so set self.socktype to the used type - self.socktype = use_socktype - except OSError: - self.socket.close() - if self.socktype is not None: - # user didn't specify falling back, so fail - raise - use_socktype = socket.SOCK_STREAM - self.socket = socket.socket(socket.AF_UNIX, use_socktype) - try: - self.socket.connect(address) - # it worked, so set self.socktype to the used type - self.socktype = use_socktype - except OSError: - self.socket.close() - raise - - def createSocket(self): - """ - Try to create a socket and, if it's not a datagram socket, connect it - to the other end. This method is called during handler initialization, - but it's not regarded as an error if the other end isn't listening yet - --- the method will be called again when emitting an event, - if there is no socket at that point. - """ - address = self.address - socktype = self.socktype - - if isinstance(address, str): - self.unixsocket = True - # Syslog server may be unavailable during handler initialisation. - # C's openlog() function also ignores connection errors. - # Moreover, we ignore these errors while logging, so it's not worse - # to ignore it also here. - try: - self._connect_unixsocket(address) - except OSError: - pass - else: - self.unixsocket = False - if socktype is None: - socktype = socket.SOCK_DGRAM - host, port = address - ress = socket.getaddrinfo(host, port, 0, socktype) - if not ress: - raise OSError("getaddrinfo returns an empty list") - for res in ress: - af, socktype, proto, _, sa = res - err = sock = None - try: - sock = socket.socket(af, socktype, proto) - if self.timeout: - sock.settimeout(self.timeout) - if socktype == socket.SOCK_STREAM: - sock.connect(sa) - break - except OSError as exc: - err = exc - if sock is not None: - sock.close() - if err is not None: - raise err - self.socket = sock - self.socktype = socktype - - def encodePriority(self, facility, priority): - """ - Encode the facility and priority. You can pass in strings or - integers - if strings are passed, the facility_names and - priority_names mapping dictionaries are used to convert them to - integers. - """ - if isinstance(facility, str): - facility = self.facility_names[facility] - if isinstance(priority, str): - priority = self.priority_names[priority] - return (facility << 3) | priority - - def close(self): - """ - Closes the socket. - """ - with self.lock: - sock = self.socket - if sock: - self.socket = None - sock.close() - logging.Handler.close(self) - - def mapPriority(self, levelName): - """ - Map a logging level name to a key in the priority_names map. - This is useful in two scenarios: when custom levels are being - used, and in the case where you can't do a straightforward - mapping by lowercasing the logging level name because of locale- - specific issues (see SF #1524081). - """ - return self.priority_map.get(levelName, "warning") - - ident = '' # prepended to all messages - append_nul = True # some old syslog daemons expect a NUL terminator - - def emit(self, record): - """ - Emit a record. - - The record is formatted, and then sent to the syslog server. If - exception information is present, it is NOT sent to the server. - """ - try: - msg = self.format(record) - if self.ident: - msg = self.ident + msg - if self.append_nul: - msg += '\000' - - # We need to convert record level to lowercase, maybe this will - # change in the future. - prio = '<%d>' % self.encodePriority(self.facility, - self.mapPriority(record.levelname)) - prio = prio.encode('utf-8') - # Message is a string. Convert to bytes as required by RFC 5424 - msg = msg.encode('utf-8') - msg = prio + msg - - if not self.socket: - self.createSocket() - - if self.unixsocket: - try: - self.socket.send(msg) - except OSError: - self.socket.close() - self._connect_unixsocket(self.address) - self.socket.send(msg) - elif self.socktype == socket.SOCK_DGRAM: - self.socket.sendto(msg, self.address) - else: - self.socket.sendall(msg) - except Exception: - self.handleError(record) - -class SMTPHandler(logging.Handler): - """ - A handler class which sends an SMTP email for each logging event. - """ - def __init__(self, mailhost, fromaddr, toaddrs, subject, - credentials=None, secure=None, timeout=5.0): - """ - Initialize the handler. - - Initialize the instance with the from and to addresses and subject - line of the email. To specify a non-standard SMTP port, use the - (host, port) tuple format for the mailhost argument. To specify - authentication credentials, supply a (username, password) tuple - for the credentials argument. To specify the use of a secure - protocol (TLS), pass in a tuple for the secure argument. This will - only be used when authentication credentials are supplied. The tuple - will be either an empty tuple, or a single-value tuple with the name - of a keyfile, or a 2-value tuple with the names of the keyfile and - certificate file. (This tuple is passed to the - `ssl.SSLContext.load_cert_chain` method). - A timeout in seconds can be specified for the SMTP connection (the - default is one second). - """ - logging.Handler.__init__(self) - if isinstance(mailhost, (list, tuple)): - self.mailhost, self.mailport = mailhost - else: - self.mailhost, self.mailport = mailhost, None - if isinstance(credentials, (list, tuple)): - self.username, self.password = credentials - else: - self.username = None - self.fromaddr = fromaddr - if isinstance(toaddrs, str): - toaddrs = [toaddrs] - self.toaddrs = toaddrs - self.subject = subject - self.secure = secure - self.timeout = timeout - - def getSubject(self, record): - """ - Determine the subject for the email. - - If you want to specify a subject line which is record-dependent, - override this method. - """ - return self.subject - - def emit(self, record): - """ - Emit a record. - - Format the record and send it to the specified addressees. - """ - try: - import smtplib - from email.message import EmailMessage - import email.utils - - port = self.mailport - if not port: - port = smtplib.SMTP_PORT - smtp = smtplib.SMTP(self.mailhost, port, timeout=self.timeout) - msg = EmailMessage() - msg['From'] = self.fromaddr - msg['To'] = ','.join(self.toaddrs) - msg['Subject'] = self.getSubject(record) - msg['Date'] = email.utils.localtime() - msg.set_content(self.format(record)) - if self.username: - if self.secure is not None: - import ssl - - try: - keyfile = self.secure[0] - except IndexError: - keyfile = None - - try: - certfile = self.secure[1] - except IndexError: - certfile = None - - context = ssl._create_stdlib_context( - certfile=certfile, keyfile=keyfile - ) - smtp.ehlo() - smtp.starttls(context=context) - smtp.ehlo() - smtp.login(self.username, self.password) - smtp.send_message(msg) - smtp.quit() - except Exception: - self.handleError(record) - -class NTEventLogHandler(logging.Handler): - """ - A handler class which sends events to the NT Event Log. Adds a - registry entry for the specified application name. If no dllname is - provided, win32service.pyd (which contains some basic message - placeholders) is used. Note that use of these placeholders will make - your event logs big, as the entire message source is held in the log. - If you want slimmer logs, you have to pass in the name of your own DLL - which contains the message definitions you want to use in the event log. - """ - def __init__(self, appname, dllname=None, logtype="Application"): - logging.Handler.__init__(self) - try: - import win32evtlogutil, win32evtlog - self.appname = appname - self._welu = win32evtlogutil - if not dllname: - dllname = os.path.split(self._welu.__file__) - dllname = os.path.split(dllname[0]) - dllname = os.path.join(dllname[0], r'win32service.pyd') - self.dllname = dllname - self.logtype = logtype - # Administrative privileges are required to add a source to the registry. - # This may not be available for a user that just wants to add to an - # existing source - handle this specific case. - try: - self._welu.AddSourceToRegistry(appname, dllname, logtype) - except Exception as e: - # This will probably be a pywintypes.error. Only raise if it's not - # an "access denied" error, else let it pass - if getattr(e, 'winerror', None) != 5: # not access denied - raise - self.deftype = win32evtlog.EVENTLOG_ERROR_TYPE - self.typemap = { - logging.DEBUG : win32evtlog.EVENTLOG_INFORMATION_TYPE, - logging.INFO : win32evtlog.EVENTLOG_INFORMATION_TYPE, - logging.WARNING : win32evtlog.EVENTLOG_WARNING_TYPE, - logging.ERROR : win32evtlog.EVENTLOG_ERROR_TYPE, - logging.CRITICAL: win32evtlog.EVENTLOG_ERROR_TYPE, - } - except ImportError: - print("The Python Win32 extensions for NT (service, event "\ - "logging) appear not to be available.") - self._welu = None - - def getMessageID(self, record): - """ - Return the message ID for the event record. If you are using your - own messages, you could do this by having the msg passed to the - logger being an ID rather than a formatting string. Then, in here, - you could use a dictionary lookup to get the message ID. This - version returns 1, which is the base message ID in win32service.pyd. - """ - return 1 - - def getEventCategory(self, record): - """ - Return the event category for the record. - - Override this if you want to specify your own categories. This version - returns 0. - """ - return 0 - - def getEventType(self, record): - """ - Return the event type for the record. - - Override this if you want to specify your own types. This version does - a mapping using the handler's typemap attribute, which is set up in - __init__() to a dictionary which contains mappings for DEBUG, INFO, - WARNING, ERROR and CRITICAL. If you are using your own levels you will - either need to override this method or place a suitable dictionary in - the handler's typemap attribute. - """ - return self.typemap.get(record.levelno, self.deftype) - - def emit(self, record): - """ - Emit a record. - - Determine the message ID, event category and event type. Then - log the message in the NT event log. - """ - if self._welu: - try: - id = self.getMessageID(record) - cat = self.getEventCategory(record) - type = self.getEventType(record) - msg = self.format(record) - self._welu.ReportEvent(self.appname, id, cat, type, [msg]) - except Exception: - self.handleError(record) - - def close(self): - """ - Clean up this handler. - - You can remove the application name from the registry as a - source of event log entries. However, if you do this, you will - not be able to see the events as you intended in the Event Log - Viewer - it needs to be able to access the registry to get the - DLL name. - """ - #self._welu.RemoveSourceFromRegistry(self.appname, self.logtype) - logging.Handler.close(self) - -class HTTPHandler(logging.Handler): - """ - A class which sends records to a web server, using either GET or - POST semantics. - """ - def __init__(self, host, url, method="GET", secure=False, credentials=None, - context=None): - """ - Initialize the instance with the host, the request URL, and the method - ("GET" or "POST") - """ - logging.Handler.__init__(self) - method = method.upper() - if method not in ["GET", "POST"]: - raise ValueError("method must be GET or POST") - if not secure and context is not None: - raise ValueError("context parameter only makes sense " - "with secure=True") - self.host = host - self.url = url - self.method = method - self.secure = secure - self.credentials = credentials - self.context = context - - def mapLogRecord(self, record): - """ - Default implementation of mapping the log record into a dict - that is sent as the CGI data. Overwrite in your class. - Contributed by Franz Glasner. - """ - return record.__dict__ - - def getConnection(self, host, secure): - """ - get a HTTP[S]Connection. - - Override when a custom connection is required, for example if - there is a proxy. - """ - import http.client - if secure: - connection = http.client.HTTPSConnection(host, context=self.context) - else: - connection = http.client.HTTPConnection(host) - return connection - - def emit(self, record): - """ - Emit a record. - - Send the record to the web server as a percent-encoded dictionary - """ - try: - import urllib.parse - host = self.host - h = self.getConnection(host, self.secure) - url = self.url - data = urllib.parse.urlencode(self.mapLogRecord(record)) - if self.method == "GET": - if (url.find('?') >= 0): - sep = '&' - else: - sep = '?' - url = url + "%c%s" % (sep, data) - h.putrequest(self.method, url) - # support multiple hosts on one IP address... - # need to strip optional :port from host, if present - i = host.find(":") - if i >= 0: - host = host[:i] - # See issue #30904: putrequest call above already adds this header - # on Python 3.x. - # h.putheader("Host", host) - if self.method == "POST": - h.putheader("Content-type", - "application/x-www-form-urlencoded") - h.putheader("Content-length", str(len(data))) - if self.credentials: - import base64 - s = ('%s:%s' % self.credentials).encode('utf-8') - s = 'Basic ' + base64.b64encode(s).strip().decode('ascii') - h.putheader('Authorization', s) - h.endheaders() - if self.method == "POST": - h.send(data.encode('utf-8')) - h.getresponse() #can't do anything with the result - except Exception: - self.handleError(record) - -class BufferingHandler(logging.Handler): - """ - A handler class which buffers logging records in memory. Whenever each - record is added to the buffer, a check is made to see if the buffer should - be flushed. If it should, then flush() is expected to do what's needed. - """ - def __init__(self, capacity): - """ - Initialize the handler with the buffer size. - """ - logging.Handler.__init__(self) - self.capacity = capacity - self.buffer = [] - - def shouldFlush(self, record): - """ - Should the handler flush its buffer? - - Returns true if the buffer is up to capacity. This method can be - overridden to implement custom flushing strategies. - """ - return (len(self.buffer) >= self.capacity) - - def emit(self, record): - """ - Emit a record. - - Append the record. If shouldFlush() tells us to, call flush() to process - the buffer. - """ - self.buffer.append(record) - if self.shouldFlush(record): - self.flush() - - def flush(self): - """ - Override to implement custom flushing behaviour. - - This version just zaps the buffer to empty. - """ - with self.lock: - self.buffer.clear() - - def close(self): - """ - Close the handler. - - This version just flushes and chains to the parent class' close(). - """ - try: - self.flush() - finally: - logging.Handler.close(self) - -class MemoryHandler(BufferingHandler): - """ - A handler class which buffers logging records in memory, periodically - flushing them to a target handler. Flushing occurs whenever the buffer - is full, or when an event of a certain severity or greater is seen. - """ - def __init__(self, capacity, flushLevel=logging.ERROR, target=None, - flushOnClose=True): - """ - Initialize the handler with the buffer size, the level at which - flushing should occur and an optional target. - - Note that without a target being set either here or via setTarget(), - a MemoryHandler is no use to anyone! - - The ``flushOnClose`` argument is ``True`` for backward compatibility - reasons - the old behaviour is that when the handler is closed, the - buffer is flushed, even if the flush level hasn't been exceeded nor the - capacity exceeded. To prevent this, set ``flushOnClose`` to ``False``. - """ - BufferingHandler.__init__(self, capacity) - self.flushLevel = flushLevel - self.target = target - # See Issue #26559 for why this has been added - self.flushOnClose = flushOnClose - - def shouldFlush(self, record): - """ - Check for buffer full or a record at the flushLevel or higher. - """ - return (len(self.buffer) >= self.capacity) or \ - (record.levelno >= self.flushLevel) - - def setTarget(self, target): - """ - Set the target handler for this handler. - """ - with self.lock: - self.target = target - - def flush(self): - """ - For a MemoryHandler, flushing means just sending the buffered - records to the target, if there is one. Override if you want - different behaviour. - - The record buffer is only cleared if a target has been set. - """ - with self.lock: - if self.target: - for record in self.buffer: - self.target.handle(record) - self.buffer.clear() - - def close(self): - """ - Flush, if appropriately configured, set the target to None and lose the - buffer. - """ - try: - if self.flushOnClose: - self.flush() - finally: - with self.lock: - self.target = None - BufferingHandler.close(self) - - -class QueueHandler(logging.Handler): - """ - This handler sends events to a queue. Typically, it would be used together - with a multiprocessing Queue to centralise logging to file in one process - (in a multi-process application), so as to avoid file write contention - between processes. - - This code is new in Python 3.2, but this class can be copy pasted into - user code for use with earlier Python versions. - """ - - def __init__(self, queue): - """ - Initialise an instance, using the passed queue. - """ - logging.Handler.__init__(self) - self.queue = queue - self.listener = None # will be set to listener if configured via dictConfig() - - def enqueue(self, record): - """ - Enqueue a record. - - The base implementation uses put_nowait. You may want to override - this method if you want to use blocking, timeouts or custom queue - implementations. - """ - self.queue.put_nowait(record) - - def prepare(self, record): - """ - Prepare a record for queuing. The object returned by this method is - enqueued. - - The base implementation formats the record to merge the message and - arguments, and removes unpickleable items from the record in-place. - Specifically, it overwrites the record's `msg` and - `message` attributes with the merged message (obtained by - calling the handler's `format` method), and sets the `args`, - `exc_info` and `exc_text` attributes to None. - - You might want to override this method if you want to convert - the record to a dict or JSON string, or send a modified copy - of the record while leaving the original intact. - """ - # The format operation gets traceback text into record.exc_text - # (if there's exception data), and also returns the formatted - # message. We can then use this to replace the original - # msg + args, as these might be unpickleable. We also zap the - # exc_info, exc_text and stack_info attributes, as they are no longer - # needed and, if not None, will typically not be pickleable. - msg = self.format(record) - # bpo-35726: make copy of record to avoid affecting other handlers in the chain. - record = copy.copy(record) - record.message = msg - record.msg = msg - record.args = None - record.exc_info = None - record.exc_text = None - record.stack_info = None - return record - - def emit(self, record): - """ - Emit a record. - - Writes the LogRecord to the queue, preparing it for pickling first. - """ - try: - self.enqueue(self.prepare(record)) - except Exception: - self.handleError(record) - - -class QueueListener(object): - """ - This class implements an internal threaded listener which watches for - LogRecords being added to a queue, removes them and passes them to a - list of handlers for processing. - """ - _sentinel = None - - def __init__(self, queue, *handlers, respect_handler_level=False): - """ - Initialise an instance with the specified queue and - handlers. - """ - self.queue = queue - self.handlers = handlers - self._thread = None - self.respect_handler_level = respect_handler_level - - def __enter__(self): - """ - For use as a context manager. Starts the listener. - """ - self.start() - return self - - def __exit__(self, *args): - """ - For use as a context manager. Stops the listener. - """ - self.stop() - - def dequeue(self, block): - """ - Dequeue a record and return it, optionally blocking. - - The base implementation uses get. You may want to override this method - if you want to use timeouts or work with custom queue implementations. - """ - return self.queue.get(block) - - def start(self): - """ - Start the listener. - - This starts up a background thread to monitor the queue for - LogRecords to process. - """ - if self._thread is not None: - raise RuntimeError("Listener already started") - - self._thread = t = threading.Thread(target=self._monitor) - t.daemon = True - t.start() - - def prepare(self, record): - """ - Prepare a record for handling. - - This method just returns the passed-in record. You may want to - override this method if you need to do any custom marshalling or - manipulation of the record before passing it to the handlers. - """ - return record - - def handle(self, record): - """ - Handle a record. - - This just loops through the handlers offering them the record - to handle. - """ - record = self.prepare(record) - for handler in self.handlers: - if not self.respect_handler_level: - process = True - else: - process = record.levelno >= handler.level - if process: - handler.handle(record) - - def _monitor(self): - """ - Monitor the queue for records, and ask the handler - to deal with them. - - This method runs on a separate, internal thread. - The thread will terminate if it sees a sentinel object in the queue. - """ - q = self.queue - has_task_done = hasattr(q, 'task_done') - while True: - try: - record = self.dequeue(True) - if record is self._sentinel: - if has_task_done: - q.task_done() - break - self.handle(record) - if has_task_done: - q.task_done() - except queue.Empty: - break - - def enqueue_sentinel(self): - """ - This is used to enqueue the sentinel record. - - The base implementation uses put_nowait. You may want to override this - method if you want to use timeouts or work with custom queue - implementations. - """ - self.queue.put_nowait(self._sentinel) - - def stop(self): - """ - Stop the listener. - - This asks the thread to terminate, and then waits for it to do so. - Note that if you don't call this before your application exits, there - may be some records still left on the queue, which won't be processed. - """ - if self._thread: # see gh-114706 - allow calling this more than once - self.enqueue_sentinel() - self._thread.join() - self._thread = None diff --git a/Python314_4_x86_Template/Lib/lzma.py b/Python314_4_x86_Template/Lib/lzma.py deleted file mode 100644 index 316066d02..000000000 --- a/Python314_4_x86_Template/Lib/lzma.py +++ /dev/null @@ -1,364 +0,0 @@ -"""Interface to the liblzma compression library. - -This module provides a class for reading and writing compressed files, -classes for incremental (de)compression, and convenience functions for -one-shot (de)compression. - -These classes and functions support both the XZ and legacy LZMA -container formats, as well as raw compressed data streams. -""" - -__all__ = [ - "CHECK_NONE", "CHECK_CRC32", "CHECK_CRC64", "CHECK_SHA256", - "CHECK_ID_MAX", "CHECK_UNKNOWN", - "FILTER_LZMA1", "FILTER_LZMA2", "FILTER_DELTA", "FILTER_X86", "FILTER_IA64", - "FILTER_ARM", "FILTER_ARMTHUMB", "FILTER_POWERPC", "FILTER_SPARC", - "FORMAT_AUTO", "FORMAT_XZ", "FORMAT_ALONE", "FORMAT_RAW", - "MF_HC3", "MF_HC4", "MF_BT2", "MF_BT3", "MF_BT4", - "MODE_FAST", "MODE_NORMAL", "PRESET_DEFAULT", "PRESET_EXTREME", - - "LZMACompressor", "LZMADecompressor", "LZMAFile", "LZMAError", - "open", "compress", "decompress", "is_check_supported", -] - -import builtins -import io -import os -from compression._common import _streams -from _lzma import * -from _lzma import _encode_filter_properties, _decode_filter_properties # noqa: F401 - - -# Value 0 no longer used -_MODE_READ = 1 -# Value 2 no longer used -_MODE_WRITE = 3 - - -class LZMAFile(_streams.BaseStream): - - """A file object providing transparent LZMA (de)compression. - - An LZMAFile can act as a wrapper for an existing file object, or - refer directly to a named file on disk. - - Note that LZMAFile provides a *binary* file interface - data read - is returned as bytes, and data to be written must be given as bytes. - """ - - def __init__(self, filename=None, mode="r", *, - format=None, check=-1, preset=None, filters=None): - """Open an LZMA-compressed file in binary mode. - - filename can be either an actual file name (given as a str, - bytes, or PathLike object), in which case the named file is - opened, or it can be an existing file object to read from or - write to. - - mode can be "r" for reading (default), "w" for (over)writing, - "x" for creating exclusively, or "a" for appending. These can - equivalently be given as "rb", "wb", "xb" and "ab" respectively. - - format specifies the container format to use for the file. - If mode is "r", this defaults to FORMAT_AUTO. Otherwise, the - default is FORMAT_XZ. - - check specifies the integrity check to use. This argument can - only be used when opening a file for writing. For FORMAT_XZ, - the default is CHECK_CRC64. FORMAT_ALONE and FORMAT_RAW do not - support integrity checks - for these formats, check must be - omitted, or be CHECK_NONE. - - When opening a file for reading, the *preset* argument is not - meaningful, and should be omitted. The *filters* argument should - also be omitted, except when format is FORMAT_RAW (in which case - it is required). - - When opening a file for writing, the settings used by the - compressor can be specified either as a preset compression - level (with the *preset* argument), or in detail as a custom - filter chain (with the *filters* argument). For FORMAT_XZ and - FORMAT_ALONE, the default is to use the PRESET_DEFAULT preset - level. For FORMAT_RAW, the caller must always specify a filter - chain; the raw compressor does not support preset compression - levels. - - preset (if provided) should be an integer in the range 0-9, - optionally OR-ed with the constant PRESET_EXTREME. - - filters (if provided) should be a sequence of dicts. Each dict - should have an entry for "id" indicating ID of the filter, plus - additional entries for options to the filter. - """ - self._fp = None - self._closefp = False - self._mode = None - - if mode in ("r", "rb"): - if check != -1: - raise ValueError("Cannot specify an integrity check " - "when opening a file for reading") - if preset is not None: - raise ValueError("Cannot specify a preset compression " - "level when opening a file for reading") - if format is None: - format = FORMAT_AUTO - mode_code = _MODE_READ - elif mode in ("w", "wb", "a", "ab", "x", "xb"): - if format is None: - format = FORMAT_XZ - mode_code = _MODE_WRITE - self._compressor = LZMACompressor(format=format, check=check, - preset=preset, filters=filters) - self._pos = 0 - else: - raise ValueError("Invalid mode: {!r}".format(mode)) - - if isinstance(filename, (str, bytes, os.PathLike)): - if "b" not in mode: - mode += "b" - self._fp = builtins.open(filename, mode) - self._closefp = True - self._mode = mode_code - elif hasattr(filename, "read") or hasattr(filename, "write"): - self._fp = filename - self._mode = mode_code - else: - raise TypeError("filename must be a str, bytes, file or PathLike object") - - if self._mode == _MODE_READ: - raw = _streams.DecompressReader(self._fp, LZMADecompressor, - trailing_error=LZMAError, format=format, filters=filters) - self._buffer = io.BufferedReader(raw) - - def close(self): - """Flush and close the file. - - May be called more than once without error. Once the file is - closed, any other operation on it will raise a ValueError. - """ - if self.closed: - return - try: - if self._mode == _MODE_READ: - self._buffer.close() - self._buffer = None - elif self._mode == _MODE_WRITE: - self._fp.write(self._compressor.flush()) - self._compressor = None - finally: - try: - if self._closefp: - self._fp.close() - finally: - self._fp = None - self._closefp = False - - @property - def closed(self): - """True if this file is closed.""" - return self._fp is None - - @property - def name(self): - self._check_not_closed() - return self._fp.name - - @property - def mode(self): - return 'wb' if self._mode == _MODE_WRITE else 'rb' - - def fileno(self): - """Return the file descriptor for the underlying file.""" - self._check_not_closed() - return self._fp.fileno() - - def seekable(self): - """Return whether the file supports seeking.""" - return self.readable() and self._buffer.seekable() - - def readable(self): - """Return whether the file was opened for reading.""" - self._check_not_closed() - return self._mode == _MODE_READ - - def writable(self): - """Return whether the file was opened for writing.""" - self._check_not_closed() - return self._mode == _MODE_WRITE - - def peek(self, size=-1): - """Return buffered data without advancing the file position. - - Always returns at least one byte of data, unless at EOF. - The exact number of bytes returned is unspecified. - """ - self._check_can_read() - # Relies on the undocumented fact that BufferedReader.peek() always - # returns at least one byte (except at EOF) - return self._buffer.peek(size) - - def read(self, size=-1): - """Read up to size uncompressed bytes from the file. - - If size is negative or omitted, read until EOF is reached. - Returns b"" if the file is already at EOF. - """ - self._check_can_read() - return self._buffer.read(size) - - def read1(self, size=-1): - """Read up to size uncompressed bytes, while trying to avoid - making multiple reads from the underlying stream. Reads up to a - buffer's worth of data if size is negative. - - Returns b"" if the file is at EOF. - """ - self._check_can_read() - if size < 0: - size = io.DEFAULT_BUFFER_SIZE - return self._buffer.read1(size) - - def readline(self, size=-1): - """Read a line of uncompressed bytes from the file. - - The terminating newline (if present) is retained. If size is - non-negative, no more than size bytes will be read (in which - case the line may be incomplete). Returns b'' if already at EOF. - """ - self._check_can_read() - return self._buffer.readline(size) - - def write(self, data): - """Write a bytes object to the file. - - Returns the number of uncompressed bytes written, which is - always the length of data in bytes. Note that due to buffering, - the file on disk may not reflect the data written until close() - is called. - """ - self._check_can_write() - if isinstance(data, (bytes, bytearray)): - length = len(data) - else: - # accept any data that supports the buffer protocol - data = memoryview(data) - length = data.nbytes - - compressed = self._compressor.compress(data) - self._fp.write(compressed) - self._pos += length - return length - - def seek(self, offset, whence=io.SEEK_SET): - """Change the file position. - - The new position is specified by offset, relative to the - position indicated by whence. Possible values for whence are: - - 0: start of stream (default): offset must not be negative - 1: current stream position - 2: end of stream; offset must not be positive - - Returns the new file position. - - Note that seeking is emulated, so depending on the parameters, - this operation may be extremely slow. - """ - self._check_can_seek() - return self._buffer.seek(offset, whence) - - def tell(self): - """Return the current file position.""" - self._check_not_closed() - if self._mode == _MODE_READ: - return self._buffer.tell() - return self._pos - - -def open(filename, mode="rb", *, - format=None, check=-1, preset=None, filters=None, - encoding=None, errors=None, newline=None): - """Open an LZMA-compressed file in binary or text mode. - - filename can be either an actual file name (given as a str, bytes, - or PathLike object), in which case the named file is opened, or it - can be an existing file object to read from or write to. - - The mode argument can be "r", "rb" (default), "w", "wb", "x", "xb", - "a", or "ab" for binary mode, or "rt", "wt", "xt", or "at" for text - mode. - - The format, check, preset and filters arguments specify the - compression settings, as for LZMACompressor, LZMADecompressor and - LZMAFile. - - For binary mode, this function is equivalent to the LZMAFile - constructor: LZMAFile(filename, mode, ...). In this case, the - encoding, errors and newline arguments must not be provided. - - For text mode, an LZMAFile object is created, and wrapped in an - io.TextIOWrapper instance with the specified encoding, error - handling behavior, and line ending(s). - - """ - if "t" in mode: - if "b" in mode: - raise ValueError("Invalid mode: %r" % (mode,)) - else: - if encoding is not None: - raise ValueError("Argument 'encoding' not supported in binary mode") - if errors is not None: - raise ValueError("Argument 'errors' not supported in binary mode") - if newline is not None: - raise ValueError("Argument 'newline' not supported in binary mode") - - lz_mode = mode.replace("t", "") - binary_file = LZMAFile(filename, lz_mode, format=format, check=check, - preset=preset, filters=filters) - - if "t" in mode: - encoding = io.text_encoding(encoding) - return io.TextIOWrapper(binary_file, encoding, errors, newline) - else: - return binary_file - - -def compress(data, format=FORMAT_XZ, check=-1, preset=None, filters=None): - """Compress a block of data. - - Refer to LZMACompressor's docstring for a description of the - optional arguments *format*, *check*, *preset* and *filters*. - - For incremental compression, use an LZMACompressor instead. - """ - comp = LZMACompressor(format, check, preset, filters) - return comp.compress(data) + comp.flush() - - -def decompress(data, format=FORMAT_AUTO, memlimit=None, filters=None): - """Decompress a block of data. - - Refer to LZMADecompressor's docstring for a description of the - optional arguments *format*, *check* and *filters*. - - For incremental decompression, use an LZMADecompressor instead. - """ - results = [] - while True: - decomp = LZMADecompressor(format, memlimit, filters) - try: - res = decomp.decompress(data) - except LZMAError: - if results: - break # Leftover data is not a valid LZMA/XZ stream; ignore it. - else: - raise # Error on the first iteration; bail out. - results.append(res) - if not decomp.eof: - raise LZMAError("Compressed data ended before the " - "end-of-stream marker was reached") - data = decomp.unused_data - if not data: - break - return b"".join(results) diff --git a/Python314_4_x86_Template/Lib/mailbox.py b/Python314_4_x86_Template/Lib/mailbox.py deleted file mode 100644 index 364af6bb0..000000000 --- a/Python314_4_x86_Template/Lib/mailbox.py +++ /dev/null @@ -1,2219 +0,0 @@ -"""Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" - -# Notes for authors of new mailbox subclasses: -# -# Remember to fsync() changes to disk before closing a modified file -# or returning from a flush() method. See functions _sync_flush() and -# _sync_close(). - -import os -import time -import calendar -import socket -import errno -import copy -import warnings -import email -import email.message -import email.generator -import io -import contextlib -from types import GenericAlias -try: - import fcntl -except ImportError: - fcntl = None - -__all__ = ['Mailbox', 'Maildir', 'mbox', 'MH', 'Babyl', 'MMDF', - 'Message', 'MaildirMessage', 'mboxMessage', 'MHMessage', - 'BabylMessage', 'MMDFMessage', 'Error', 'NoSuchMailboxError', - 'NotEmptyError', 'ExternalClashError', 'FormatError'] - -linesep = os.linesep.encode('ascii') - -class Mailbox: - """A group of messages in a particular place.""" - - def __init__(self, path, factory=None, create=True): - """Initialize a Mailbox instance.""" - self._path = os.path.abspath(os.path.expanduser(path)) - self._factory = factory - - def add(self, message): - """Add message and return assigned key.""" - raise NotImplementedError('Method must be implemented by subclass') - - def remove(self, key): - """Remove the keyed message; raise KeyError if it doesn't exist.""" - raise NotImplementedError('Method must be implemented by subclass') - - def __delitem__(self, key): - self.remove(key) - - def discard(self, key): - """If the keyed message exists, remove it.""" - try: - self.remove(key) - except KeyError: - pass - - def __setitem__(self, key, message): - """Replace the keyed message; raise KeyError if it doesn't exist.""" - raise NotImplementedError('Method must be implemented by subclass') - - def get(self, key, default=None): - """Return the keyed message, or default if it doesn't exist.""" - try: - return self.__getitem__(key) - except KeyError: - return default - - def __getitem__(self, key): - """Return the keyed message; raise KeyError if it doesn't exist.""" - if not self._factory: - return self.get_message(key) - else: - with contextlib.closing(self.get_file(key)) as file: - return self._factory(file) - - def get_message(self, key): - """Return a Message representation or raise a KeyError.""" - raise NotImplementedError('Method must be implemented by subclass') - - def get_string(self, key): - """Return a string representation or raise a KeyError. - - Uses email.message.Message to create a 7bit clean string - representation of the message.""" - return email.message_from_bytes(self.get_bytes(key)).as_string() - - def get_bytes(self, key): - """Return a byte string representation or raise a KeyError.""" - raise NotImplementedError('Method must be implemented by subclass') - - def get_file(self, key): - """Return a file-like representation or raise a KeyError.""" - raise NotImplementedError('Method must be implemented by subclass') - - def iterkeys(self): - """Return an iterator over keys.""" - raise NotImplementedError('Method must be implemented by subclass') - - def keys(self): - """Return a list of keys.""" - return list(self.iterkeys()) - - def itervalues(self): - """Return an iterator over all messages.""" - for key in self.iterkeys(): - try: - value = self[key] - except KeyError: - continue - yield value - - def __iter__(self): - return self.itervalues() - - def values(self): - """Return a list of messages. Memory intensive.""" - return list(self.itervalues()) - - def iteritems(self): - """Return an iterator over (key, message) tuples.""" - for key in self.iterkeys(): - try: - value = self[key] - except KeyError: - continue - yield (key, value) - - def items(self): - """Return a list of (key, message) tuples. Memory intensive.""" - return list(self.iteritems()) - - def __contains__(self, key): - """Return True if the keyed message exists, False otherwise.""" - raise NotImplementedError('Method must be implemented by subclass') - - def __len__(self): - """Return a count of messages in the mailbox.""" - raise NotImplementedError('Method must be implemented by subclass') - - def clear(self): - """Delete all messages.""" - for key in self.keys(): - self.discard(key) - - def pop(self, key, default=None): - """Delete the keyed message and return it, or default.""" - try: - result = self[key] - except KeyError: - return default - self.discard(key) - return result - - def popitem(self): - """Delete an arbitrary (key, message) pair and return it.""" - for key in self.iterkeys(): - return (key, self.pop(key)) # This is only run once. - else: - raise KeyError('No messages in mailbox') - - def update(self, arg=None): - """Change the messages that correspond to certain keys.""" - if hasattr(arg, 'iteritems'): - source = arg.iteritems() - elif hasattr(arg, 'items'): - source = arg.items() - else: - source = arg - bad_key = False - for key, message in source: - try: - self[key] = message - except KeyError: - bad_key = True - if bad_key: - raise KeyError('No message with key(s)') - - def flush(self): - """Write any pending changes to the disk.""" - raise NotImplementedError('Method must be implemented by subclass') - - def lock(self): - """Lock the mailbox.""" - raise NotImplementedError('Method must be implemented by subclass') - - def unlock(self): - """Unlock the mailbox if it is locked.""" - raise NotImplementedError('Method must be implemented by subclass') - - def close(self): - """Flush and close the mailbox.""" - raise NotImplementedError('Method must be implemented by subclass') - - def _string_to_bytes(self, message): - # If a message is not 7bit clean, we refuse to handle it since it - # likely came from reading invalid messages in text mode, and that way - # lies mojibake. - try: - return message.encode('ascii') - except UnicodeError: - raise ValueError("String input must be ASCII-only; " - "use bytes or a Message instead") - - # Whether each message must end in a newline - _append_newline = False - - def _dump_message(self, message, target, mangle_from_=False): - # This assumes the target file is open in binary mode. - """Dump message contents to target file.""" - if isinstance(message, email.message.Message): - buffer = io.BytesIO() - gen = email.generator.BytesGenerator(buffer, mangle_from_, 0) - gen.flatten(message) - buffer.seek(0) - data = buffer.read() - data = data.replace(b'\n', linesep) - target.write(data) - if self._append_newline and not data.endswith(linesep): - # Make sure the message ends with a newline - target.write(linesep) - elif isinstance(message, (str, bytes, io.StringIO)): - if isinstance(message, io.StringIO): - warnings.warn("Use of StringIO input is deprecated, " - "use BytesIO instead", DeprecationWarning, 3) - message = message.getvalue() - if isinstance(message, str): - message = self._string_to_bytes(message) - if mangle_from_: - message = message.replace(b'\nFrom ', b'\n>From ') - message = message.replace(b'\n', linesep) - target.write(message) - if self._append_newline and not message.endswith(linesep): - # Make sure the message ends with a newline - target.write(linesep) - elif hasattr(message, 'read'): - if hasattr(message, 'buffer'): - warnings.warn("Use of text mode files is deprecated, " - "use a binary mode file instead", DeprecationWarning, 3) - message = message.buffer - lastline = None - while True: - line = message.readline() - # Universal newline support. - if line.endswith(b'\r\n'): - line = line[:-2] + b'\n' - elif line.endswith(b'\r'): - line = line[:-1] + b'\n' - if not line: - break - if mangle_from_ and line.startswith(b'From '): - line = b'>From ' + line[5:] - line = line.replace(b'\n', linesep) - target.write(line) - lastline = line - if self._append_newline and lastline and not lastline.endswith(linesep): - # Make sure the message ends with a newline - target.write(linesep) - else: - raise TypeError('Invalid message type: %s' % type(message)) - - __class_getitem__ = classmethod(GenericAlias) - - -class Maildir(Mailbox): - """A qmail-style Maildir mailbox.""" - - colon = ':' - - def __init__(self, dirname, factory=None, create=True): - """Initialize a Maildir instance.""" - Mailbox.__init__(self, dirname, factory, create) - self._paths = { - 'tmp': os.path.join(self._path, 'tmp'), - 'new': os.path.join(self._path, 'new'), - 'cur': os.path.join(self._path, 'cur'), - } - if not os.path.exists(self._path): - if create: - os.mkdir(self._path, 0o700) - for path in self._paths.values(): - os.mkdir(path, 0o700) - else: - raise NoSuchMailboxError(self._path) - self._toc = {} - self._toc_mtimes = {'cur': 0, 'new': 0} - self._last_read = 0 # Records last time we read cur/new - self._skewfactor = 0.1 # Adjust if os/fs clocks are skewing - - def add(self, message): - """Add message and return assigned key.""" - tmp_file = self._create_tmp() - try: - self._dump_message(message, tmp_file) - except BaseException: - tmp_file.close() - os.remove(tmp_file.name) - raise - _sync_close(tmp_file) - if isinstance(message, MaildirMessage): - subdir = message.get_subdir() - suffix = self.colon + message.get_info() - if suffix == self.colon: - suffix = '' - else: - subdir = 'new' - suffix = '' - uniq = os.path.basename(tmp_file.name).split(self.colon)[0] - dest = os.path.join(self._path, subdir, uniq + suffix) - if isinstance(message, MaildirMessage): - os.utime(tmp_file.name, - (os.path.getatime(tmp_file.name), message.get_date())) - # No file modification should be done after the file is moved to its - # final position in order to prevent race conditions with changes - # from other programs - try: - try: - os.link(tmp_file.name, dest) - except (AttributeError, PermissionError): - os.rename(tmp_file.name, dest) - else: - os.remove(tmp_file.name) - except OSError as e: - os.remove(tmp_file.name) - if e.errno == errno.EEXIST: - raise ExternalClashError('Name clash with existing message: %s' - % dest) - else: - raise - return uniq - - def remove(self, key): - """Remove the keyed message; raise KeyError if it doesn't exist.""" - os.remove(os.path.join(self._path, self._lookup(key))) - - def discard(self, key): - """If the keyed message exists, remove it.""" - # This overrides an inapplicable implementation in the superclass. - try: - self.remove(key) - except (KeyError, FileNotFoundError): - pass - - def __setitem__(self, key, message): - """Replace the keyed message; raise KeyError if it doesn't exist.""" - old_subpath = self._lookup(key) - temp_key = self.add(message) - temp_subpath = self._lookup(temp_key) - if isinstance(message, MaildirMessage): - # temp's subdir and suffix were specified by message. - dominant_subpath = temp_subpath - else: - # temp's subdir and suffix were defaults from add(). - dominant_subpath = old_subpath - subdir = os.path.dirname(dominant_subpath) - if self.colon in dominant_subpath: - suffix = self.colon + dominant_subpath.split(self.colon)[-1] - else: - suffix = '' - self.discard(key) - tmp_path = os.path.join(self._path, temp_subpath) - new_path = os.path.join(self._path, subdir, key + suffix) - if isinstance(message, MaildirMessage): - os.utime(tmp_path, - (os.path.getatime(tmp_path), message.get_date())) - # No file modification should be done after the file is moved to its - # final position in order to prevent race conditions with changes - # from other programs - os.rename(tmp_path, new_path) - - def get_message(self, key): - """Return a Message representation or raise a KeyError.""" - subpath = self._lookup(key) - with open(os.path.join(self._path, subpath), 'rb') as f: - if self._factory: - msg = self._factory(f) - else: - msg = MaildirMessage(f) - subdir, name = os.path.split(subpath) - msg.set_subdir(subdir) - if self.colon in name: - msg.set_info(name.split(self.colon)[-1]) - msg.set_date(os.path.getmtime(os.path.join(self._path, subpath))) - return msg - - def get_bytes(self, key): - """Return a bytes representation or raise a KeyError.""" - with open(os.path.join(self._path, self._lookup(key)), 'rb') as f: - return f.read().replace(linesep, b'\n') - - def get_file(self, key): - """Return a file-like representation or raise a KeyError.""" - f = open(os.path.join(self._path, self._lookup(key)), 'rb') - return _ProxyFile(f) - - def get_info(self, key): - """Get the keyed message's "info" as a string.""" - subpath = self._lookup(key) - if self.colon in subpath: - return subpath.split(self.colon)[-1] - return '' - - def set_info(self, key, info: str): - """Set the keyed message's "info" string.""" - if not isinstance(info, str): - raise TypeError(f'info must be a string: {type(info)}') - old_subpath = self._lookup(key) - new_subpath = old_subpath.split(self.colon)[0] - if info: - new_subpath += self.colon + info - if new_subpath == old_subpath: - return - old_path = os.path.join(self._path, old_subpath) - new_path = os.path.join(self._path, new_subpath) - os.rename(old_path, new_path) - self._toc[key] = new_subpath - - def get_flags(self, key): - """Return as a string the standard flags that are set on the keyed message.""" - info = self.get_info(key) - if info.startswith('2,'): - return info[2:] - return '' - - def set_flags(self, key, flags: str): - """Set the given flags and unset all others on the keyed message.""" - if not isinstance(flags, str): - raise TypeError(f'flags must be a string: {type(flags)}') - # TODO: check if flags are valid standard flag characters? - self.set_info(key, '2,' + ''.join(sorted(set(flags)))) - - def add_flag(self, key, flag: str): - """Set the given flag(s) without changing others on the keyed message.""" - if not isinstance(flag, str): - raise TypeError(f'flag must be a string: {type(flag)}') - # TODO: check that flag is a valid standard flag character? - self.set_flags(key, ''.join(set(self.get_flags(key)) | set(flag))) - - def remove_flag(self, key, flag: str): - """Unset the given string flag(s) without changing others on the keyed message.""" - if not isinstance(flag, str): - raise TypeError(f'flag must be a string: {type(flag)}') - if self.get_flags(key): - self.set_flags(key, ''.join(set(self.get_flags(key)) - set(flag))) - - def iterkeys(self): - """Return an iterator over keys.""" - self._refresh() - for key in self._toc: - try: - self._lookup(key) - except KeyError: - continue - yield key - - def __contains__(self, key): - """Return True if the keyed message exists, False otherwise.""" - self._refresh() - return key in self._toc - - def __len__(self): - """Return a count of messages in the mailbox.""" - self._refresh() - return len(self._toc) - - def flush(self): - """Write any pending changes to disk.""" - # Maildir changes are always written immediately, so there's nothing - # to do. - pass - - def lock(self): - """Lock the mailbox.""" - return - - def unlock(self): - """Unlock the mailbox if it is locked.""" - return - - def close(self): - """Flush and close the mailbox.""" - return - - def list_folders(self): - """Return a list of folder names.""" - result = [] - for entry in os.listdir(self._path): - if len(entry) > 1 and entry[0] == '.' and \ - os.path.isdir(os.path.join(self._path, entry)): - result.append(entry[1:]) - return result - - def get_folder(self, folder): - """Return a Maildir instance for the named folder.""" - return Maildir(os.path.join(self._path, '.' + folder), - factory=self._factory, - create=False) - - def add_folder(self, folder): - """Create a folder and return a Maildir instance representing it.""" - path = os.path.join(self._path, '.' + folder) - result = Maildir(path, factory=self._factory) - maildirfolder_path = os.path.join(path, 'maildirfolder') - if not os.path.exists(maildirfolder_path): - os.close(os.open(maildirfolder_path, os.O_CREAT | os.O_WRONLY, - 0o666)) - return result - - def remove_folder(self, folder): - """Delete the named folder, which must be empty.""" - path = os.path.join(self._path, '.' + folder) - for entry in os.listdir(os.path.join(path, 'new')) + \ - os.listdir(os.path.join(path, 'cur')): - if len(entry) < 1 or entry[0] != '.': - raise NotEmptyError('Folder contains message(s): %s' % folder) - for entry in os.listdir(path): - if entry != 'new' and entry != 'cur' and entry != 'tmp' and \ - os.path.isdir(os.path.join(path, entry)): - raise NotEmptyError("Folder contains subdirectory '%s': %s" % - (folder, entry)) - for root, dirs, files in os.walk(path, topdown=False): - for entry in files: - os.remove(os.path.join(root, entry)) - for entry in dirs: - os.rmdir(os.path.join(root, entry)) - os.rmdir(path) - - def clean(self): - """Delete old files in "tmp".""" - now = time.time() - for entry in os.listdir(os.path.join(self._path, 'tmp')): - path = os.path.join(self._path, 'tmp', entry) - if now - os.path.getatime(path) > 129600: # 60 * 60 * 36 - os.remove(path) - - _count = 1 # This is used to generate unique file names. - - def _create_tmp(self): - """Create a file in the tmp subdirectory and open and return it.""" - now = time.time() - hostname = socket.gethostname() - if '/' in hostname: - hostname = hostname.replace('/', r'\057') - if ':' in hostname: - hostname = hostname.replace(':', r'\072') - uniq = "%s.M%sP%sQ%s.%s" % (int(now), int(now % 1 * 1e6), os.getpid(), - Maildir._count, hostname) - path = os.path.join(self._path, 'tmp', uniq) - try: - os.stat(path) - except FileNotFoundError: - Maildir._count += 1 - try: - return _create_carefully(path) - except FileExistsError: - pass - - # Fall through to here if stat succeeded or open raised EEXIST. - raise ExternalClashError('Name clash prevented file creation: %s' % - path) - - def _refresh(self): - """Update table of contents mapping.""" - # If it has been less than two seconds since the last _refresh() call, - # we have to unconditionally re-read the mailbox just in case it has - # been modified, because os.path.mtime() has a 2 sec resolution in the - # most common worst case (FAT) and a 1 sec resolution typically. This - # results in a few unnecessary re-reads when _refresh() is called - # multiple times in that interval, but once the clock ticks over, we - # will only re-read as needed. Because the filesystem might be being - # served by an independent system with its own clock, we record and - # compare with the mtimes from the filesystem. Because the other - # system's clock might be skewing relative to our clock, we add an - # extra delta to our wait. The default is one tenth second, but is an - # instance variable and so can be adjusted if dealing with a - # particularly skewed or irregular system. - if time.time() - self._last_read > 2 + self._skewfactor: - refresh = False - for subdir in self._toc_mtimes: - mtime = os.path.getmtime(self._paths[subdir]) - if mtime > self._toc_mtimes[subdir]: - refresh = True - self._toc_mtimes[subdir] = mtime - if not refresh: - return - # Refresh toc - self._toc = {} - for subdir in self._toc_mtimes: - path = self._paths[subdir] - for entry in os.listdir(path): - if entry.startswith('.'): - continue - p = os.path.join(path, entry) - if os.path.isdir(p): - continue - uniq = entry.split(self.colon)[0] - self._toc[uniq] = os.path.join(subdir, entry) - self._last_read = time.time() - - def _lookup(self, key): - """Use TOC to return subpath for given key, or raise a KeyError.""" - try: - if os.path.exists(os.path.join(self._path, self._toc[key])): - return self._toc[key] - except KeyError: - pass - self._refresh() - try: - return self._toc[key] - except KeyError: - raise KeyError('No message with key: %s' % key) from None - - # This method is for backward compatibility only. - def next(self): - """Return the next message in a one-time iteration.""" - if not hasattr(self, '_onetime_keys'): - self._onetime_keys = self.iterkeys() - while True: - try: - return self[next(self._onetime_keys)] - except StopIteration: - return None - except KeyError: - continue - - -class _singlefileMailbox(Mailbox): - """A single-file mailbox.""" - - def __init__(self, path, factory=None, create=True): - """Initialize a single-file mailbox.""" - Mailbox.__init__(self, path, factory, create) - try: - f = open(self._path, 'rb+') - except OSError as e: - if e.errno == errno.ENOENT: - if create: - f = open(self._path, 'wb+') - else: - raise NoSuchMailboxError(self._path) - elif e.errno in (errno.EACCES, errno.EROFS): - f = open(self._path, 'rb') - else: - raise - self._file = f - self._toc = None - self._next_key = 0 - self._pending = False # No changes require rewriting the file. - self._pending_sync = False # No need to sync the file - self._locked = False - self._file_length = None # Used to record mailbox size - - def add(self, message): - """Add message and return assigned key.""" - self._lookup() - self._toc[self._next_key] = self._append_message(message) - self._next_key += 1 - # _append_message appends the message to the mailbox file. We - # don't need a full rewrite + rename, sync is enough. - self._pending_sync = True - return self._next_key - 1 - - def remove(self, key): - """Remove the keyed message; raise KeyError if it doesn't exist.""" - self._lookup(key) - del self._toc[key] - self._pending = True - - def __setitem__(self, key, message): - """Replace the keyed message; raise KeyError if it doesn't exist.""" - self._lookup(key) - self._toc[key] = self._append_message(message) - self._pending = True - - def iterkeys(self): - """Return an iterator over keys.""" - self._lookup() - yield from self._toc.keys() - - def __contains__(self, key): - """Return True if the keyed message exists, False otherwise.""" - self._lookup() - return key in self._toc - - def __len__(self): - """Return a count of messages in the mailbox.""" - self._lookup() - return len(self._toc) - - def lock(self): - """Lock the mailbox.""" - if not self._locked: - _lock_file(self._file) - self._locked = True - - def unlock(self): - """Unlock the mailbox if it is locked.""" - if self._locked: - _unlock_file(self._file) - self._locked = False - - def flush(self): - """Write any pending changes to disk.""" - if not self._pending: - if self._pending_sync: - # Messages have only been added, so syncing the file - # is enough. - _sync_flush(self._file) - self._pending_sync = False - return - - # In order to be writing anything out at all, self._toc must - # already have been generated (and presumably has been modified - # by adding or deleting an item). - assert self._toc is not None - - # Check length of self._file; if it's changed, some other process - # has modified the mailbox since we scanned it. - self._file.seek(0, 2) - cur_len = self._file.tell() - if cur_len != self._file_length: - raise ExternalClashError('Size of mailbox file changed ' - '(expected %i, found %i)' % - (self._file_length, cur_len)) - - new_file = _create_temporary(self._path) - try: - new_toc = {} - self._pre_mailbox_hook(new_file) - for key in sorted(self._toc.keys()): - start, stop = self._toc[key] - self._file.seek(start) - self._pre_message_hook(new_file) - new_start = new_file.tell() - while True: - buffer = self._file.read(min(4096, - stop - self._file.tell())) - if not buffer: - break - new_file.write(buffer) - new_toc[key] = (new_start, new_file.tell()) - self._post_message_hook(new_file) - self._file_length = new_file.tell() - except: - new_file.close() - os.remove(new_file.name) - raise - _sync_close(new_file) - # self._file is about to get replaced, so no need to sync. - self._file.close() - # Make sure the new file's mode and owner are the same as the old file's - info = os.stat(self._path) - os.chmod(new_file.name, info.st_mode) - try: - os.chown(new_file.name, info.st_uid, info.st_gid) - except (AttributeError, OSError): - pass - try: - os.rename(new_file.name, self._path) - except FileExistsError: - os.remove(self._path) - os.rename(new_file.name, self._path) - self._file = open(self._path, 'rb+') - self._toc = new_toc - self._pending = False - self._pending_sync = False - if self._locked: - _lock_file(self._file, dotlock=False) - - def _pre_mailbox_hook(self, f): - """Called before writing the mailbox to file f.""" - return - - def _pre_message_hook(self, f): - """Called before writing each message to file f.""" - return - - def _post_message_hook(self, f): - """Called after writing each message to file f.""" - return - - def close(self): - """Flush and close the mailbox.""" - try: - self.flush() - finally: - try: - if self._locked: - self.unlock() - finally: - self._file.close() # Sync has been done by self.flush() above. - - def _lookup(self, key=None): - """Return (start, stop) or raise KeyError.""" - if self._toc is None: - self._generate_toc() - if key is not None: - try: - return self._toc[key] - except KeyError: - raise KeyError('No message with key: %s' % key) from None - - def _append_message(self, message): - """Append message to mailbox and return (start, stop) offsets.""" - self._file.seek(0, 2) - before = self._file.tell() - if len(self._toc) == 0 and not self._pending: - # This is the first message, and the _pre_mailbox_hook - # hasn't yet been called. If self._pending is True, - # messages have been removed, so _pre_mailbox_hook must - # have been called already. - self._pre_mailbox_hook(self._file) - try: - self._pre_message_hook(self._file) - offsets = self._install_message(message) - self._post_message_hook(self._file) - except BaseException: - self._file.truncate(before) - raise - self._file.flush() - self._file_length = self._file.tell() # Record current length of mailbox - return offsets - - - -class _mboxMMDF(_singlefileMailbox): - """An mbox or MMDF mailbox.""" - - _mangle_from_ = True - - def get_message(self, key): - """Return a Message representation or raise a KeyError.""" - start, stop = self._lookup(key) - self._file.seek(start) - from_line = self._file.readline().replace(linesep, b'').decode('ascii') - string = self._file.read(stop - self._file.tell()) - msg = self._message_factory(string.replace(linesep, b'\n')) - msg.set_unixfrom(from_line) - msg.set_from(from_line[5:]) - return msg - - def get_string(self, key, from_=False): - """Return a string representation or raise a KeyError.""" - return email.message_from_bytes( - self.get_bytes(key, from_)).as_string(unixfrom=from_) - - def get_bytes(self, key, from_=False): - """Return a string representation or raise a KeyError.""" - start, stop = self._lookup(key) - self._file.seek(start) - if not from_: - self._file.readline() - string = self._file.read(stop - self._file.tell()) - return string.replace(linesep, b'\n') - - def get_file(self, key, from_=False): - """Return a file-like representation or raise a KeyError.""" - start, stop = self._lookup(key) - self._file.seek(start) - if not from_: - self._file.readline() - return _PartialFile(self._file, self._file.tell(), stop) - - def _install_message(self, message): - """Format a message and blindly write to self._file.""" - from_line = None - if isinstance(message, str): - message = self._string_to_bytes(message) - if isinstance(message, bytes) and message.startswith(b'From '): - newline = message.find(b'\n') - if newline != -1: - from_line = message[:newline] - message = message[newline + 1:] - else: - from_line = message - message = b'' - elif isinstance(message, _mboxMMDFMessage): - author = message.get_from().encode('ascii') - from_line = b'From ' + author - elif isinstance(message, email.message.Message): - from_line = message.get_unixfrom() # May be None. - if from_line is not None: - from_line = from_line.encode('ascii') - if from_line is None: - from_line = b'From MAILER-DAEMON ' + time.asctime(time.gmtime()).encode() - start = self._file.tell() - self._file.write(from_line + linesep) - self._dump_message(message, self._file, self._mangle_from_) - stop = self._file.tell() - return (start, stop) - - -class mbox(_mboxMMDF): - """A classic mbox mailbox.""" - - _mangle_from_ = True - - # All messages must end in a newline character, and - # _post_message_hooks outputs an empty line between messages. - _append_newline = True - - def __init__(self, path, factory=None, create=True): - """Initialize an mbox mailbox.""" - self._message_factory = mboxMessage - _mboxMMDF.__init__(self, path, factory, create) - - def _post_message_hook(self, f): - """Called after writing each message to file f.""" - f.write(linesep) - - def _generate_toc(self): - """Generate key-to-(start, stop) table of contents.""" - starts, stops = [], [] - last_was_empty = False - self._file.seek(0) - while True: - line_pos = self._file.tell() - line = self._file.readline() - if line.startswith(b'From '): - if len(stops) < len(starts): - if last_was_empty: - stops.append(line_pos - len(linesep)) - else: - # The last line before the "From " line wasn't - # blank, but we consider it a start of a - # message anyway. - stops.append(line_pos) - starts.append(line_pos) - last_was_empty = False - elif not line: - if last_was_empty: - stops.append(line_pos - len(linesep)) - else: - stops.append(line_pos) - break - elif line == linesep: - last_was_empty = True - else: - last_was_empty = False - self._toc = dict(enumerate(zip(starts, stops))) - self._next_key = len(self._toc) - self._file_length = self._file.tell() - - -class MMDF(_mboxMMDF): - """An MMDF mailbox.""" - - def __init__(self, path, factory=None, create=True): - """Initialize an MMDF mailbox.""" - self._message_factory = MMDFMessage - _mboxMMDF.__init__(self, path, factory, create) - - def _pre_message_hook(self, f): - """Called before writing each message to file f.""" - f.write(b'\001\001\001\001' + linesep) - - def _post_message_hook(self, f): - """Called after writing each message to file f.""" - f.write(linesep + b'\001\001\001\001' + linesep) - - def _generate_toc(self): - """Generate key-to-(start, stop) table of contents.""" - starts, stops = [], [] - self._file.seek(0) - next_pos = 0 - while True: - line_pos = next_pos - line = self._file.readline() - next_pos = self._file.tell() - if line.startswith(b'\001\001\001\001' + linesep): - starts.append(next_pos) - while True: - line_pos = next_pos - line = self._file.readline() - next_pos = self._file.tell() - if line == b'\001\001\001\001' + linesep: - stops.append(line_pos - len(linesep)) - break - elif not line: - stops.append(line_pos) - break - elif not line: - break - self._toc = dict(enumerate(zip(starts, stops))) - self._next_key = len(self._toc) - self._file.seek(0, 2) - self._file_length = self._file.tell() - - -class MH(Mailbox): - """An MH mailbox.""" - - def __init__(self, path, factory=None, create=True): - """Initialize an MH instance.""" - Mailbox.__init__(self, path, factory, create) - if not os.path.exists(self._path): - if create: - os.mkdir(self._path, 0o700) - os.close(os.open(os.path.join(self._path, '.mh_sequences'), - os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600)) - else: - raise NoSuchMailboxError(self._path) - self._locked = False - - def add(self, message): - """Add message and return assigned key.""" - keys = self.keys() - if len(keys) == 0: - new_key = 1 - else: - new_key = max(keys) + 1 - new_path = os.path.join(self._path, str(new_key)) - f = _create_carefully(new_path) - closed = False - try: - if self._locked: - _lock_file(f) - try: - try: - self._dump_message(message, f) - except BaseException: - # Unlock and close so it can be deleted on Windows - if self._locked: - _unlock_file(f) - _sync_close(f) - closed = True - os.remove(new_path) - raise - if isinstance(message, MHMessage): - self._dump_sequences(message, new_key) - finally: - if self._locked: - _unlock_file(f) - finally: - if not closed: - _sync_close(f) - return new_key - - def remove(self, key): - """Remove the keyed message; raise KeyError if it doesn't exist.""" - path = os.path.join(self._path, str(key)) - try: - f = open(path, 'rb+') - except OSError as e: - if e.errno == errno.ENOENT: - raise KeyError('No message with key: %s' % key) - else: - raise - else: - f.close() - os.remove(path) - - def __setitem__(self, key, message): - """Replace the keyed message; raise KeyError if it doesn't exist.""" - path = os.path.join(self._path, str(key)) - try: - f = open(path, 'rb+') - except OSError as e: - if e.errno == errno.ENOENT: - raise KeyError('No message with key: %s' % key) - else: - raise - try: - if self._locked: - _lock_file(f) - try: - os.close(os.open(path, os.O_WRONLY | os.O_TRUNC)) - self._dump_message(message, f) - if isinstance(message, MHMessage): - self._dump_sequences(message, key) - finally: - if self._locked: - _unlock_file(f) - finally: - _sync_close(f) - - def get_message(self, key): - """Return a Message representation or raise a KeyError.""" - try: - if self._locked: - f = open(os.path.join(self._path, str(key)), 'rb+') - else: - f = open(os.path.join(self._path, str(key)), 'rb') - except OSError as e: - if e.errno == errno.ENOENT: - raise KeyError('No message with key: %s' % key) - else: - raise - with f: - if self._locked: - _lock_file(f) - try: - msg = MHMessage(f) - finally: - if self._locked: - _unlock_file(f) - for name, key_list in self.get_sequences().items(): - if key in key_list: - msg.add_sequence(name) - return msg - - def get_bytes(self, key): - """Return a bytes representation or raise a KeyError.""" - try: - if self._locked: - f = open(os.path.join(self._path, str(key)), 'rb+') - else: - f = open(os.path.join(self._path, str(key)), 'rb') - except OSError as e: - if e.errno == errno.ENOENT: - raise KeyError('No message with key: %s' % key) - else: - raise - with f: - if self._locked: - _lock_file(f) - try: - return f.read().replace(linesep, b'\n') - finally: - if self._locked: - _unlock_file(f) - - def get_file(self, key): - """Return a file-like representation or raise a KeyError.""" - try: - f = open(os.path.join(self._path, str(key)), 'rb') - except OSError as e: - if e.errno == errno.ENOENT: - raise KeyError('No message with key: %s' % key) - else: - raise - return _ProxyFile(f) - - def iterkeys(self): - """Return an iterator over keys.""" - return iter(sorted(int(entry) for entry in os.listdir(self._path) - if entry.isdigit())) - - def __contains__(self, key): - """Return True if the keyed message exists, False otherwise.""" - return os.path.exists(os.path.join(self._path, str(key))) - - def __len__(self): - """Return a count of messages in the mailbox.""" - return len(list(self.iterkeys())) - - def _open_mh_sequences_file(self, text): - mode = '' if text else 'b' - kwargs = {'encoding': 'ASCII'} if text else {} - path = os.path.join(self._path, '.mh_sequences') - while True: - try: - return open(path, 'r+' + mode, **kwargs) - except FileNotFoundError: - pass - try: - return open(path, 'x+' + mode, **kwargs) - except FileExistsError: - pass - - def lock(self): - """Lock the mailbox.""" - if not self._locked: - self._file = self._open_mh_sequences_file(text=False) - _lock_file(self._file) - self._locked = True - - def unlock(self): - """Unlock the mailbox if it is locked.""" - if self._locked: - _unlock_file(self._file) - _sync_close(self._file) - del self._file - self._locked = False - - def flush(self): - """Write any pending changes to the disk.""" - return - - def close(self): - """Flush and close the mailbox.""" - if self._locked: - self.unlock() - - def list_folders(self): - """Return a list of folder names.""" - result = [] - for entry in os.listdir(self._path): - if os.path.isdir(os.path.join(self._path, entry)): - result.append(entry) - return result - - def get_folder(self, folder): - """Return an MH instance for the named folder.""" - return MH(os.path.join(self._path, folder), - factory=self._factory, create=False) - - def add_folder(self, folder): - """Create a folder and return an MH instance representing it.""" - return MH(os.path.join(self._path, folder), - factory=self._factory) - - def remove_folder(self, folder): - """Delete the named folder, which must be empty.""" - path = os.path.join(self._path, folder) - entries = os.listdir(path) - if entries == ['.mh_sequences']: - os.remove(os.path.join(path, '.mh_sequences')) - elif entries == []: - pass - else: - raise NotEmptyError('Folder not empty: %s' % self._path) - os.rmdir(path) - - def get_sequences(self): - """Return a name-to-key-list dictionary to define each sequence.""" - results = {} - try: - f = open(os.path.join(self._path, '.mh_sequences'), 'r', encoding='ASCII') - except FileNotFoundError: - return results - with f: - all_keys = set(self.keys()) - for line in f: - try: - name, contents = line.split(':') - keys = set() - for spec in contents.split(): - if spec.isdigit(): - keys.add(int(spec)) - else: - start, stop = (int(x) for x in spec.split('-')) - keys.update(range(start, stop + 1)) - results[name] = [key for key in sorted(keys) \ - if key in all_keys] - if len(results[name]) == 0: - del results[name] - except ValueError: - raise FormatError('Invalid sequence specification: %s' % - line.rstrip()) - return results - - def set_sequences(self, sequences): - """Set sequences using the given name-to-key-list dictionary.""" - f = self._open_mh_sequences_file(text=True) - try: - os.close(os.open(f.name, os.O_WRONLY | os.O_TRUNC)) - for name, keys in sequences.items(): - if len(keys) == 0: - continue - f.write(name + ':') - prev = None - completing = False - for key in sorted(set(keys)): - if key - 1 == prev: - if not completing: - completing = True - f.write('-') - elif completing: - completing = False - f.write('%s %s' % (prev, key)) - else: - f.write(' %s' % key) - prev = key - if completing: - f.write(str(prev) + '\n') - else: - f.write('\n') - finally: - _sync_close(f) - - def pack(self): - """Re-name messages to eliminate numbering gaps. Invalidates keys.""" - sequences = self.get_sequences() - prev = 0 - changes = [] - for key in self.iterkeys(): - if key - 1 != prev: - changes.append((key, prev + 1)) - try: - os.link(os.path.join(self._path, str(key)), - os.path.join(self._path, str(prev + 1))) - except (AttributeError, PermissionError): - os.rename(os.path.join(self._path, str(key)), - os.path.join(self._path, str(prev + 1))) - else: - os.unlink(os.path.join(self._path, str(key))) - prev += 1 - self._next_key = prev + 1 - if len(changes) == 0: - return - for name, key_list in sequences.items(): - for old, new in changes: - if old in key_list: - key_list[key_list.index(old)] = new - self.set_sequences(sequences) - - def _dump_sequences(self, message, key): - """Inspect a new MHMessage and update sequences appropriately.""" - pending_sequences = message.get_sequences() - all_sequences = self.get_sequences() - for name, key_list in all_sequences.items(): - if name in pending_sequences: - key_list.append(key) - elif key in key_list: - del key_list[key_list.index(key)] - for sequence in pending_sequences: - if sequence not in all_sequences: - all_sequences[sequence] = [key] - self.set_sequences(all_sequences) - - -class Babyl(_singlefileMailbox): - """An Rmail-style Babyl mailbox.""" - - _special_labels = frozenset({'unseen', 'deleted', 'filed', 'answered', - 'forwarded', 'edited', 'resent'}) - - def __init__(self, path, factory=None, create=True): - """Initialize a Babyl mailbox.""" - _singlefileMailbox.__init__(self, path, factory, create) - self._labels = {} - - def add(self, message): - """Add message and return assigned key.""" - key = _singlefileMailbox.add(self, message) - if isinstance(message, BabylMessage): - self._labels[key] = message.get_labels() - return key - - def remove(self, key): - """Remove the keyed message; raise KeyError if it doesn't exist.""" - _singlefileMailbox.remove(self, key) - if key in self._labels: - del self._labels[key] - - def __setitem__(self, key, message): - """Replace the keyed message; raise KeyError if it doesn't exist.""" - _singlefileMailbox.__setitem__(self, key, message) - if isinstance(message, BabylMessage): - self._labels[key] = message.get_labels() - - def get_message(self, key): - """Return a Message representation or raise a KeyError.""" - start, stop = self._lookup(key) - self._file.seek(start) - self._file.readline() # Skip b'1,' line specifying labels. - original_headers = io.BytesIO() - while True: - line = self._file.readline() - if line == b'*** EOOH ***' + linesep or not line: - break - original_headers.write(line.replace(linesep, b'\n')) - visible_headers = io.BytesIO() - while True: - line = self._file.readline() - if line == linesep or not line: - break - visible_headers.write(line.replace(linesep, b'\n')) - # Read up to the stop, or to the end - n = stop - self._file.tell() - assert n >= 0 - body = self._file.read(n) - body = body.replace(linesep, b'\n') - msg = BabylMessage(original_headers.getvalue() + body) - msg.set_visible(visible_headers.getvalue()) - if key in self._labels: - msg.set_labels(self._labels[key]) - return msg - - def get_bytes(self, key): - """Return a string representation or raise a KeyError.""" - start, stop = self._lookup(key) - self._file.seek(start) - self._file.readline() # Skip b'1,' line specifying labels. - original_headers = io.BytesIO() - while True: - line = self._file.readline() - if line == b'*** EOOH ***' + linesep or not line: - break - original_headers.write(line.replace(linesep, b'\n')) - while True: - line = self._file.readline() - if line == linesep or not line: - break - headers = original_headers.getvalue() - n = stop - self._file.tell() - assert n >= 0 - data = self._file.read(n) - data = data.replace(linesep, b'\n') - return headers + data - - def get_file(self, key): - """Return a file-like representation or raise a KeyError.""" - return io.BytesIO(self.get_bytes(key).replace(b'\n', linesep)) - - def get_labels(self): - """Return a list of user-defined labels in the mailbox.""" - self._lookup() - labels = set() - for label_list in self._labels.values(): - labels.update(label_list) - labels.difference_update(self._special_labels) - return list(labels) - - def _generate_toc(self): - """Generate key-to-(start, stop) table of contents.""" - starts, stops = [], [] - self._file.seek(0) - next_pos = 0 - label_lists = [] - while True: - line_pos = next_pos - line = self._file.readline() - next_pos = self._file.tell() - if line == b'\037\014' + linesep: - if len(stops) < len(starts): - stops.append(line_pos - len(linesep)) - starts.append(next_pos) - labels = [label.strip() for label - in self._file.readline()[1:].split(b',') - if label.strip()] - label_lists.append(labels) - elif line == b'\037' or line == b'\037' + linesep: - if len(stops) < len(starts): - stops.append(line_pos - len(linesep)) - elif not line: - stops.append(line_pos - len(linesep)) - break - self._toc = dict(enumerate(zip(starts, stops))) - self._labels = dict(enumerate(label_lists)) - self._next_key = len(self._toc) - self._file.seek(0, 2) - self._file_length = self._file.tell() - - def _pre_mailbox_hook(self, f): - """Called before writing the mailbox to file f.""" - babyl = b'BABYL OPTIONS:' + linesep - babyl += b'Version: 5' + linesep - labels = self.get_labels() - labels = (label.encode() for label in labels) - babyl += b'Labels:' + b','.join(labels) + linesep - babyl += b'\037' - f.write(babyl) - - def _pre_message_hook(self, f): - """Called before writing each message to file f.""" - f.write(b'\014' + linesep) - - def _post_message_hook(self, f): - """Called after writing each message to file f.""" - f.write(linesep + b'\037') - - def _install_message(self, message): - """Write message contents and return (start, stop).""" - start = self._file.tell() - if isinstance(message, BabylMessage): - special_labels = [] - labels = [] - for label in message.get_labels(): - if label in self._special_labels: - special_labels.append(label) - else: - labels.append(label) - self._file.write(b'1') - for label in special_labels: - self._file.write(b', ' + label.encode()) - self._file.write(b',,') - for label in labels: - self._file.write(b' ' + label.encode() + b',') - self._file.write(linesep) - else: - self._file.write(b'1,,' + linesep) - if isinstance(message, email.message.Message): - orig_buffer = io.BytesIO() - orig_generator = email.generator.BytesGenerator(orig_buffer, False, 0) - orig_generator.flatten(message) - orig_buffer.seek(0) - while True: - line = orig_buffer.readline() - self._file.write(line.replace(b'\n', linesep)) - if line == b'\n' or not line: - break - self._file.write(b'*** EOOH ***' + linesep) - if isinstance(message, BabylMessage): - vis_buffer = io.BytesIO() - vis_generator = email.generator.BytesGenerator(vis_buffer, False, 0) - vis_generator.flatten(message.get_visible()) - while True: - line = vis_buffer.readline() - self._file.write(line.replace(b'\n', linesep)) - if line == b'\n' or not line: - break - else: - orig_buffer.seek(0) - while True: - line = orig_buffer.readline() - self._file.write(line.replace(b'\n', linesep)) - if line == b'\n' or not line: - break - while True: - buffer = orig_buffer.read(4096) # Buffer size is arbitrary. - if not buffer: - break - self._file.write(buffer.replace(b'\n', linesep)) - elif isinstance(message, (bytes, str, io.StringIO)): - if isinstance(message, io.StringIO): - warnings.warn("Use of StringIO input is deprecated, " - "use BytesIO instead", DeprecationWarning, 3) - message = message.getvalue() - if isinstance(message, str): - message = self._string_to_bytes(message) - body_start = message.find(b'\n\n') + 2 - if body_start - 2 != -1: - self._file.write(message[:body_start].replace(b'\n', linesep)) - self._file.write(b'*** EOOH ***' + linesep) - self._file.write(message[:body_start].replace(b'\n', linesep)) - self._file.write(message[body_start:].replace(b'\n', linesep)) - else: - self._file.write(b'*** EOOH ***' + linesep + linesep) - self._file.write(message.replace(b'\n', linesep)) - elif hasattr(message, 'readline'): - if hasattr(message, 'buffer'): - warnings.warn("Use of text mode files is deprecated, " - "use a binary mode file instead", DeprecationWarning, 3) - message = message.buffer - original_pos = message.tell() - first_pass = True - while True: - line = message.readline() - # Universal newline support. - if line.endswith(b'\r\n'): - line = line[:-2] + b'\n' - elif line.endswith(b'\r'): - line = line[:-1] + b'\n' - self._file.write(line.replace(b'\n', linesep)) - if line == b'\n' or not line: - if first_pass: - first_pass = False - self._file.write(b'*** EOOH ***' + linesep) - message.seek(original_pos) - else: - break - while True: - line = message.readline() - if not line: - break - # Universal newline support. - if line.endswith(b'\r\n'): - line = line[:-2] + linesep - elif line.endswith(b'\r'): - line = line[:-1] + linesep - elif line.endswith(b'\n'): - line = line[:-1] + linesep - self._file.write(line) - else: - raise TypeError('Invalid message type: %s' % type(message)) - stop = self._file.tell() - return (start, stop) - - -class Message(email.message.Message): - """Message with mailbox-format-specific properties.""" - - def __init__(self, message=None): - """Initialize a Message instance.""" - if isinstance(message, email.message.Message): - self._become_message(copy.deepcopy(message)) - if isinstance(message, Message): - message._explain_to(self) - elif isinstance(message, bytes): - self._become_message(email.message_from_bytes(message)) - elif isinstance(message, str): - self._become_message(email.message_from_string(message)) - elif isinstance(message, io.TextIOWrapper): - self._become_message(email.message_from_file(message)) - elif hasattr(message, "read"): - self._become_message(email.message_from_binary_file(message)) - elif message is None: - email.message.Message.__init__(self) - else: - raise TypeError('Invalid message type: %s' % type(message)) - - def _become_message(self, message): - """Assume the non-format-specific state of message.""" - type_specific = getattr(message, '_type_specific_attributes', []) - for name in message.__dict__: - if name not in type_specific: - self.__dict__[name] = message.__dict__[name] - - def _explain_to(self, message): - """Copy format-specific state to message insofar as possible.""" - if isinstance(message, Message): - return # There's nothing format-specific to explain. - else: - raise TypeError('Cannot convert to specified type') - - -class MaildirMessage(Message): - """Message with Maildir-specific properties.""" - - _type_specific_attributes = ['_subdir', '_info', '_date'] - - def __init__(self, message=None): - """Initialize a MaildirMessage instance.""" - self._subdir = 'new' - self._info = '' - self._date = time.time() - Message.__init__(self, message) - - def get_subdir(self): - """Return 'new' or 'cur'.""" - return self._subdir - - def set_subdir(self, subdir): - """Set subdir to 'new' or 'cur'.""" - if subdir == 'new' or subdir == 'cur': - self._subdir = subdir - else: - raise ValueError("subdir must be 'new' or 'cur': %s" % subdir) - - def get_flags(self): - """Return as a string the flags that are set.""" - if self._info.startswith('2,'): - return self._info[2:] - else: - return '' - - def set_flags(self, flags): - """Set the given flags and unset all others.""" - self._info = '2,' + ''.join(sorted(flags)) - - def add_flag(self, flag): - """Set the given flag(s) without changing others.""" - self.set_flags(''.join(set(self.get_flags()) | set(flag))) - - def remove_flag(self, flag): - """Unset the given string flag(s) without changing others.""" - if self.get_flags(): - self.set_flags(''.join(set(self.get_flags()) - set(flag))) - - def get_date(self): - """Return delivery date of message, in seconds since the epoch.""" - return self._date - - def set_date(self, date): - """Set delivery date of message, in seconds since the epoch.""" - try: - self._date = float(date) - except ValueError: - raise TypeError("can't convert to float: %s" % date) from None - - def get_info(self): - """Get the message's "info" as a string.""" - return self._info - - def set_info(self, info): - """Set the message's "info" string.""" - if isinstance(info, str): - self._info = info - else: - raise TypeError('info must be a string: %s' % type(info)) - - def _explain_to(self, message): - """Copy Maildir-specific state to message insofar as possible.""" - if isinstance(message, MaildirMessage): - message.set_flags(self.get_flags()) - message.set_subdir(self.get_subdir()) - message.set_date(self.get_date()) - elif isinstance(message, _mboxMMDFMessage): - flags = set(self.get_flags()) - if 'S' in flags: - message.add_flag('R') - if self.get_subdir() == 'cur': - message.add_flag('O') - if 'T' in flags: - message.add_flag('D') - if 'F' in flags: - message.add_flag('F') - if 'R' in flags: - message.add_flag('A') - message.set_from('MAILER-DAEMON', time.gmtime(self.get_date())) - elif isinstance(message, MHMessage): - flags = set(self.get_flags()) - if 'S' not in flags: - message.add_sequence('unseen') - if 'R' in flags: - message.add_sequence('replied') - if 'F' in flags: - message.add_sequence('flagged') - elif isinstance(message, BabylMessage): - flags = set(self.get_flags()) - if 'S' not in flags: - message.add_label('unseen') - if 'T' in flags: - message.add_label('deleted') - if 'R' in flags: - message.add_label('answered') - if 'P' in flags: - message.add_label('forwarded') - elif isinstance(message, Message): - pass - else: - raise TypeError('Cannot convert to specified type: %s' % - type(message)) - - -class _mboxMMDFMessage(Message): - """Message with mbox- or MMDF-specific properties.""" - - _type_specific_attributes = ['_from'] - - def __init__(self, message=None): - """Initialize an mboxMMDFMessage instance.""" - self.set_from('MAILER-DAEMON', True) - if isinstance(message, email.message.Message): - unixfrom = message.get_unixfrom() - if unixfrom is not None and unixfrom.startswith('From '): - self.set_from(unixfrom[5:]) - Message.__init__(self, message) - - def get_from(self): - """Return contents of "From " line.""" - return self._from - - def set_from(self, from_, time_=None): - """Set "From " line, formatting and appending time_ if specified.""" - if time_ is not None: - if time_ is True: - time_ = time.gmtime() - from_ += ' ' + time.asctime(time_) - self._from = from_ - - def get_flags(self): - """Return as a string the flags that are set.""" - return self.get('Status', '') + self.get('X-Status', '') - - def set_flags(self, flags): - """Set the given flags and unset all others.""" - flags = set(flags) - status_flags, xstatus_flags = '', '' - for flag in ('R', 'O'): - if flag in flags: - status_flags += flag - flags.remove(flag) - for flag in ('D', 'F', 'A'): - if flag in flags: - xstatus_flags += flag - flags.remove(flag) - xstatus_flags += ''.join(sorted(flags)) - try: - self.replace_header('Status', status_flags) - except KeyError: - self.add_header('Status', status_flags) - try: - self.replace_header('X-Status', xstatus_flags) - except KeyError: - self.add_header('X-Status', xstatus_flags) - - def add_flag(self, flag): - """Set the given flag(s) without changing others.""" - self.set_flags(''.join(set(self.get_flags()) | set(flag))) - - def remove_flag(self, flag): - """Unset the given string flag(s) without changing others.""" - if 'Status' in self or 'X-Status' in self: - self.set_flags(''.join(set(self.get_flags()) - set(flag))) - - def _explain_to(self, message): - """Copy mbox- or MMDF-specific state to message insofar as possible.""" - if isinstance(message, MaildirMessage): - flags = set(self.get_flags()) - if 'O' in flags: - message.set_subdir('cur') - if 'F' in flags: - message.add_flag('F') - if 'A' in flags: - message.add_flag('R') - if 'R' in flags: - message.add_flag('S') - if 'D' in flags: - message.add_flag('T') - del message['status'] - del message['x-status'] - maybe_date = ' '.join(self.get_from().split()[-5:]) - try: - message.set_date(calendar.timegm(time.strptime(maybe_date, - '%a %b %d %H:%M:%S %Y'))) - except (ValueError, OverflowError): - pass - elif isinstance(message, _mboxMMDFMessage): - message.set_flags(self.get_flags()) - message.set_from(self.get_from()) - elif isinstance(message, MHMessage): - flags = set(self.get_flags()) - if 'R' not in flags: - message.add_sequence('unseen') - if 'A' in flags: - message.add_sequence('replied') - if 'F' in flags: - message.add_sequence('flagged') - del message['status'] - del message['x-status'] - elif isinstance(message, BabylMessage): - flags = set(self.get_flags()) - if 'R' not in flags: - message.add_label('unseen') - if 'D' in flags: - message.add_label('deleted') - if 'A' in flags: - message.add_label('answered') - del message['status'] - del message['x-status'] - elif isinstance(message, Message): - pass - else: - raise TypeError('Cannot convert to specified type: %s' % - type(message)) - - -class mboxMessage(_mboxMMDFMessage): - """Message with mbox-specific properties.""" - - -class MHMessage(Message): - """Message with MH-specific properties.""" - - _type_specific_attributes = ['_sequences'] - - def __init__(self, message=None): - """Initialize an MHMessage instance.""" - self._sequences = [] - Message.__init__(self, message) - - def get_sequences(self): - """Return a list of sequences that include the message.""" - return self._sequences[:] - - def set_sequences(self, sequences): - """Set the list of sequences that include the message.""" - self._sequences = list(sequences) - - def add_sequence(self, sequence): - """Add sequence to list of sequences including the message.""" - if isinstance(sequence, str): - if not sequence in self._sequences: - self._sequences.append(sequence) - else: - raise TypeError('sequence type must be str: %s' % type(sequence)) - - def remove_sequence(self, sequence): - """Remove sequence from the list of sequences including the message.""" - try: - self._sequences.remove(sequence) - except ValueError: - pass - - def _explain_to(self, message): - """Copy MH-specific state to message insofar as possible.""" - if isinstance(message, MaildirMessage): - sequences = set(self.get_sequences()) - if 'unseen' in sequences: - message.set_subdir('cur') - else: - message.set_subdir('cur') - message.add_flag('S') - if 'flagged' in sequences: - message.add_flag('F') - if 'replied' in sequences: - message.add_flag('R') - elif isinstance(message, _mboxMMDFMessage): - sequences = set(self.get_sequences()) - if 'unseen' not in sequences: - message.add_flag('RO') - else: - message.add_flag('O') - if 'flagged' in sequences: - message.add_flag('F') - if 'replied' in sequences: - message.add_flag('A') - elif isinstance(message, MHMessage): - for sequence in self.get_sequences(): - message.add_sequence(sequence) - elif isinstance(message, BabylMessage): - sequences = set(self.get_sequences()) - if 'unseen' in sequences: - message.add_label('unseen') - if 'replied' in sequences: - message.add_label('answered') - elif isinstance(message, Message): - pass - else: - raise TypeError('Cannot convert to specified type: %s' % - type(message)) - - -class BabylMessage(Message): - """Message with Babyl-specific properties.""" - - _type_specific_attributes = ['_labels', '_visible'] - - def __init__(self, message=None): - """Initialize a BabylMessage instance.""" - self._labels = [] - self._visible = Message() - Message.__init__(self, message) - - def get_labels(self): - """Return a list of labels on the message.""" - return self._labels[:] - - def set_labels(self, labels): - """Set the list of labels on the message.""" - self._labels = list(labels) - - def add_label(self, label): - """Add label to list of labels on the message.""" - if isinstance(label, str): - if label not in self._labels: - self._labels.append(label) - else: - raise TypeError('label must be a string: %s' % type(label)) - - def remove_label(self, label): - """Remove label from the list of labels on the message.""" - try: - self._labels.remove(label) - except ValueError: - pass - - def get_visible(self): - """Return a Message representation of visible headers.""" - return Message(self._visible) - - def set_visible(self, visible): - """Set the Message representation of visible headers.""" - self._visible = Message(visible) - - def update_visible(self): - """Update and/or sensibly generate a set of visible headers.""" - for header in self._visible.keys(): - if header in self: - self._visible.replace_header(header, self[header]) - else: - del self._visible[header] - for header in ('Date', 'From', 'Reply-To', 'To', 'CC', 'Subject'): - if header in self and header not in self._visible: - self._visible[header] = self[header] - - def _explain_to(self, message): - """Copy Babyl-specific state to message insofar as possible.""" - if isinstance(message, MaildirMessage): - labels = set(self.get_labels()) - if 'unseen' in labels: - message.set_subdir('cur') - else: - message.set_subdir('cur') - message.add_flag('S') - if 'forwarded' in labels or 'resent' in labels: - message.add_flag('P') - if 'answered' in labels: - message.add_flag('R') - if 'deleted' in labels: - message.add_flag('T') - elif isinstance(message, _mboxMMDFMessage): - labels = set(self.get_labels()) - if 'unseen' not in labels: - message.add_flag('RO') - else: - message.add_flag('O') - if 'deleted' in labels: - message.add_flag('D') - if 'answered' in labels: - message.add_flag('A') - elif isinstance(message, MHMessage): - labels = set(self.get_labels()) - if 'unseen' in labels: - message.add_sequence('unseen') - if 'answered' in labels: - message.add_sequence('replied') - elif isinstance(message, BabylMessage): - message.set_visible(self.get_visible()) - for label in self.get_labels(): - message.add_label(label) - elif isinstance(message, Message): - pass - else: - raise TypeError('Cannot convert to specified type: %s' % - type(message)) - - -class MMDFMessage(_mboxMMDFMessage): - """Message with MMDF-specific properties.""" - - -class _ProxyFile: - """A read-only wrapper of a file.""" - - def __init__(self, f, pos=None): - """Initialize a _ProxyFile.""" - self._file = f - if pos is None: - self._pos = f.tell() - else: - self._pos = pos - - def read(self, size=None): - """Read bytes.""" - return self._read(size, self._file.read) - - def read1(self, size=None): - """Read bytes.""" - return self._read(size, self._file.read1) - - def readline(self, size=None): - """Read a line.""" - return self._read(size, self._file.readline) - - def readlines(self, sizehint=None): - """Read multiple lines.""" - result = [] - for line in self: - result.append(line) - if sizehint is not None: - sizehint -= len(line) - if sizehint <= 0: - break - return result - - def __iter__(self): - """Iterate over lines.""" - while line := self.readline(): - yield line - - def tell(self): - """Return the position.""" - return self._pos - - def seek(self, offset, whence=0): - """Change position.""" - if whence == 1: - self._file.seek(self._pos) - self._file.seek(offset, whence) - self._pos = self._file.tell() - - def close(self): - """Close the file.""" - if hasattr(self, '_file'): - try: - if hasattr(self._file, 'close'): - self._file.close() - finally: - del self._file - - def _read(self, size, read_method): - """Read size bytes using read_method.""" - if size is None: - size = -1 - self._file.seek(self._pos) - result = read_method(size) - self._pos = self._file.tell() - return result - - def __enter__(self): - """Context management protocol support.""" - return self - - def __exit__(self, *exc): - self.close() - - def readable(self): - return self._file.readable() - - def writable(self): - return self._file.writable() - - def seekable(self): - return self._file.seekable() - - def flush(self): - return self._file.flush() - - @property - def closed(self): - if not hasattr(self, '_file'): - return True - if not hasattr(self._file, 'closed'): - return False - return self._file.closed - - __class_getitem__ = classmethod(GenericAlias) - - -class _PartialFile(_ProxyFile): - """A read-only wrapper of part of a file.""" - - def __init__(self, f, start=None, stop=None): - """Initialize a _PartialFile.""" - _ProxyFile.__init__(self, f, start) - self._start = start - self._stop = stop - - def tell(self): - """Return the position with respect to start.""" - return _ProxyFile.tell(self) - self._start - - def seek(self, offset, whence=0): - """Change position, possibly with respect to start or stop.""" - if whence == 0: - self._pos = self._start - whence = 1 - elif whence == 2: - self._pos = self._stop - whence = 1 - _ProxyFile.seek(self, offset, whence) - - def _read(self, size, read_method): - """Read size bytes using read_method, honoring start and stop.""" - remaining = self._stop - self._pos - if remaining <= 0: - return b'' - if size is None or size < 0 or size > remaining: - size = remaining - return _ProxyFile._read(self, size, read_method) - - def close(self): - # do *not* close the underlying file object for partial files, - # since it's global to the mailbox object - if hasattr(self, '_file'): - del self._file - - -def _lock_file(f, dotlock=True): - """Lock file f using lockf and dot locking.""" - dotlock_done = False - try: - if fcntl: - try: - fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB) - except OSError as e: - if e.errno in (errno.EAGAIN, errno.EACCES, errno.EROFS): - raise ExternalClashError('lockf: lock unavailable: %s' % - f.name) - else: - raise - if dotlock: - try: - pre_lock = _create_temporary(f.name + '.lock') - pre_lock.close() - except OSError as e: - if e.errno in (errno.EACCES, errno.EROFS): - return # Without write access, just skip dotlocking. - else: - raise - try: - try: - os.link(pre_lock.name, f.name + '.lock') - dotlock_done = True - except (AttributeError, PermissionError): - os.rename(pre_lock.name, f.name + '.lock') - dotlock_done = True - else: - os.unlink(pre_lock.name) - except FileExistsError: - os.remove(pre_lock.name) - raise ExternalClashError('dot lock unavailable: %s' % - f.name) - except: - if fcntl: - fcntl.lockf(f, fcntl.LOCK_UN) - if dotlock_done: - os.remove(f.name + '.lock') - raise - -def _unlock_file(f): - """Unlock file f using lockf and dot locking.""" - if fcntl: - fcntl.lockf(f, fcntl.LOCK_UN) - if os.path.exists(f.name + '.lock'): - os.remove(f.name + '.lock') - -def _create_carefully(path): - """Create a file if it doesn't exist and open for reading and writing.""" - return open(path, 'xb+') - -def _create_temporary(path): - """Create a temp file based on path and open for reading and writing.""" - return _create_carefully('%s.%s.%s.%s' % (path, int(time.time()), - socket.gethostname(), - os.getpid())) - -def _sync_flush(f): - """Ensure changes to file f are physically on disk.""" - f.flush() - if hasattr(os, 'fsync'): - os.fsync(f.fileno()) - -def _sync_close(f): - """Close file f, ensuring all changes are physically on disk.""" - _sync_flush(f) - f.close() - - -class Error(Exception): - """Raised for module-specific errors.""" - -class NoSuchMailboxError(Error): - """The specified mailbox does not exist and won't be created.""" - -class NotEmptyError(Error): - """The specified mailbox is not empty and deletion was requested.""" - -class ExternalClashError(Error): - """Another process caused an action to fail.""" - -class FormatError(Error): - """A file appears to have an invalid format.""" diff --git a/Python314_4_x86_Template/Lib/mimetypes.py b/Python314_4_x86_Template/Lib/mimetypes.py deleted file mode 100644 index 7d0f4c1fd..000000000 --- a/Python314_4_x86_Template/Lib/mimetypes.py +++ /dev/null @@ -1,747 +0,0 @@ -"""Guess the MIME type of a file. - -This module defines two useful functions: - -guess_type(url, strict=True) -- guess the MIME type and encoding of a URL. - -guess_extension(type, strict=True) -- guess the extension for a given MIME type. - -It also contains the following, for tuning the behavior: - -Data: - -knownfiles -- list of files to parse -inited -- flag set when init() has been called -suffix_map -- dictionary mapping suffixes to suffixes -encodings_map -- dictionary mapping suffixes to encodings -types_map -- dictionary mapping suffixes to types - -Functions: - -init([files]) -- parse a list of files, default knownfiles (on Windows, the - default values are taken from the registry) -read_mime_types(file) -- parse one file, return a dictionary or None -""" - -try: - from _winapi import _mimetypes_read_windows_registry -except ImportError: - _mimetypes_read_windows_registry = None - -try: - import winreg as _winreg -except ImportError: - _winreg = None - -__all__ = [ - "knownfiles", "inited", "MimeTypes", - "guess_type", "guess_file_type", "guess_all_extensions", "guess_extension", - "add_type", "init", "read_mime_types", - "suffix_map", "encodings_map", "types_map", "common_types" -] - -knownfiles = [ - "/etc/mime.types", - "/etc/httpd/mime.types", # Mac OS X - "/etc/httpd/conf/mime.types", # Apache - "/etc/apache/mime.types", # Apache 1 - "/etc/apache2/mime.types", # Apache 2 - "/usr/local/etc/httpd/conf/mime.types", - "/usr/local/lib/netscape/mime.types", - "/usr/local/etc/httpd/conf/mime.types", # Apache 1.2 - "/usr/local/etc/mime.types", # Apache 1.3 - ] - -inited = False -_db = None - - -class MimeTypes: - """MIME-types datastore. - - This datastore can handle information from mime.types-style files - and supports basic determination of MIME type from a filename or - URL, and can guess a reasonable extension given a MIME type. - """ - - def __init__(self, filenames=(), strict=True): - if not inited: - init() - self.encodings_map = _encodings_map_default.copy() - self.suffix_map = _suffix_map_default.copy() - self.types_map = ({}, {}) # dict for (non-strict, strict) - self.types_map_inv = ({}, {}) - for (ext, type) in _types_map_default.items(): - self.add_type(type, ext, True) - for (ext, type) in _common_types_default.items(): - self.add_type(type, ext, False) - for name in filenames: - self.read(name, strict) - - def add_type(self, type, ext, strict=True): - """Add a mapping between a type and an extension. - - When the extension is already known, the new - type will replace the old one. When the type - is already known the extension will be added - to the list of known extensions. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - - Valid extensions are empty or start with a '.'. - """ - if ext and not ext.startswith('.'): - from warnings import _deprecated - - _deprecated( - "Undotted extensions", - "Using undotted extensions is deprecated and " - "will raise a ValueError in Python {remove}", - remove=(3, 16), - ) - - if not type: - return - self.types_map[strict][ext] = type - exts = self.types_map_inv[strict].setdefault(type, []) - if ext not in exts: - exts.append(ext) - - def guess_type(self, url, strict=True): - """Guess the type of a file which is either a URL or a path-like object. - - Return value is a tuple (type, encoding) where type is None if - the type can't be guessed (no or unknown suffix) or a string - of the form type/subtype, usable for a MIME Content-type - header; and encoding is None for no encoding or the name of - the program used to encode (e.g. compress or gzip). The - mappings are table driven. Encoding suffixes are case - sensitive; type suffixes are first tried case sensitive, then - case insensitive. - - The suffixes .tgz, .taz and .tz (case sensitive!) are all - mapped to '.tar.gz'. (This is table-driven too, using the - dictionary suffix_map.) - - Optional 'strict' argument when False adds a bunch of commonly found, - but non-standard types. - """ - # Lazy import to improve module import time - import os - import urllib.parse - - # TODO: Deprecate accepting file paths (in particular path-like objects). - url = os.fspath(url) - p = urllib.parse.urlparse(url) - if p.scheme and len(p.scheme) > 1: - scheme = p.scheme - url = p.path - else: - return self.guess_file_type(url, strict=strict) - if scheme == 'data': - # syntax of data URLs: - # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data - # mediatype := [ type "/" subtype ] *( ";" parameter ) - # data := *urlchar - # parameter := attribute "=" value - # type/subtype defaults to "text/plain" - comma = url.find(',') - if comma < 0: - # bad data URL - return None, None - semi = url.find(';', 0, comma) - if semi >= 0: - type = url[:semi] - else: - type = url[:comma] - if '=' in type or '/' not in type: - type = 'text/plain' - return type, None # never compressed, so encoding is None - - # Lazy import to improve module import time - import posixpath - - return self._guess_file_type(url, strict, posixpath.splitext) - - def guess_file_type(self, path, *, strict=True): - """Guess the type of a file based on its path. - - Similar to guess_type(), but takes file path instead of URL. - """ - # Lazy import to improve module import time - import os - - path = os.fsdecode(path) - path = os.path.splitdrive(path)[1] - return self._guess_file_type(path, strict, os.path.splitext) - - def _guess_file_type(self, path, strict, splitext): - base, ext = splitext(path) - while (ext_lower := ext.lower()) in self.suffix_map: - base, ext = splitext(base + self.suffix_map[ext_lower]) - # encodings_map is case sensitive - if ext in self.encodings_map: - encoding = self.encodings_map[ext] - base, ext = splitext(base) - else: - encoding = None - ext = ext.lower() - types_map = self.types_map[True] - if ext in types_map: - return types_map[ext], encoding - elif strict: - return None, encoding - types_map = self.types_map[False] - if ext in types_map: - return types_map[ext], encoding - else: - return None, encoding - - def guess_all_extensions(self, type, strict=True): - """Guess the extensions for a file based on its MIME type. - - Return value is a list of strings giving the possible filename - extensions, including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data stream, - but would be mapped to the MIME type 'type' by guess_type(). - - Optional 'strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - type = type.lower() - extensions = list(self.types_map_inv[True].get(type, [])) - if not strict: - for ext in self.types_map_inv[False].get(type, []): - if ext not in extensions: - extensions.append(ext) - return extensions - - def guess_extension(self, type, strict=True): - """Guess the extension for a file based on its MIME type. - - Return value is a string giving a filename extension, - including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data - stream, but would be mapped to the MIME type 'type' by - guess_type(). If no extension can be guessed for 'type', None - is returned. - - Optional 'strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - extensions = self.guess_all_extensions(type, strict) - if not extensions: - return None - return extensions[0] - - def read(self, filename, strict=True): - """ - Read a single mime.types-format file, specified by pathname. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - with open(filename, encoding='utf-8') as fp: - self.readfp(fp, strict) - - def readfp(self, fp, strict=True): - """ - Read a single mime.types-format file. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - while line := fp.readline(): - words = line.split() - for i in range(len(words)): - if words[i][0] == '#': - del words[i:] - break - if not words: - continue - type, suffixes = words[0], words[1:] - for suff in suffixes: - self.add_type(type, '.' + suff, strict) - - def read_windows_registry(self, strict=True): - """ - Load the MIME types database from Windows registry. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - - if not _mimetypes_read_windows_registry and not _winreg: - return - - add_type = self.add_type - if strict: - add_type = lambda type, ext: self.add_type(type, ext, True) - - # Accelerated function if it is available - if _mimetypes_read_windows_registry: - _mimetypes_read_windows_registry(add_type) - elif _winreg: - self._read_windows_registry(add_type) - - @classmethod - def _read_windows_registry(cls, add_type): - def enum_types(mimedb): - i = 0 - while True: - try: - ctype = _winreg.EnumKey(mimedb, i) - except OSError: - break - else: - if '\0' not in ctype: - yield ctype - i += 1 - - with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: - for subkeyname in enum_types(hkcr): - try: - with _winreg.OpenKey(hkcr, subkeyname) as subkey: - # Only check file extensions - if not subkeyname.startswith("."): - continue - # raises OSError if no 'Content Type' value - mimetype, datatype = _winreg.QueryValueEx( - subkey, 'Content Type') - if datatype != _winreg.REG_SZ: - continue - add_type(mimetype, subkeyname) - except OSError: - continue - -def guess_type(url, strict=True): - """Guess the type of a file based on its URL. - - Return value is a tuple (type, encoding) where type is None if the - type can't be guessed (no or unknown suffix) or a string of the - form type/subtype, usable for a MIME Content-type header; and - encoding is None for no encoding or the name of the program used - to encode (e.g. compress or gzip). The mappings are table - driven. Encoding suffixes are case sensitive; type suffixes are - first tried case sensitive, then case insensitive. - - The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped - to ".tar.gz". (This is table-driven too, using the dictionary - suffix_map). - - Optional 'strict' argument when false adds a bunch of commonly found, but - non-standard types. - """ - if _db is None: - init() - return _db.guess_type(url, strict) - - -def guess_file_type(path, *, strict=True): - """Guess the type of a file based on its path. - - Similar to guess_type(), but takes file path instead of URL. - """ - if _db is None: - init() - return _db.guess_file_type(path, strict=strict) - - -def guess_all_extensions(type, strict=True): - """Guess the extensions for a file based on its MIME type. - - Return value is a list of strings giving the possible filename - extensions, including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data - stream, but would be mapped to the MIME type 'type' by - guess_type(). If no extension can be guessed for 'type', None - is returned. - - Optional 'strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - if _db is None: - init() - return _db.guess_all_extensions(type, strict) - -def guess_extension(type, strict=True): - """Guess the extension for a file based on its MIME type. - - Return value is a string giving a filename extension, including the - leading dot ('.'). The extension is not guaranteed to have been - associated with any particular data stream, but would be mapped to the - MIME type 'type' by guess_type(). If no extension can be guessed for - 'type', None is returned. - - Optional 'strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - if _db is None: - init() - return _db.guess_extension(type, strict) - -def add_type(type, ext, strict=True): - """Add a mapping between a type and an extension. - - When the extension is already known, the new - type will replace the old one. When the type - is already known the extension will be added - to the list of known extensions. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - if _db is None: - init() - return _db.add_type(type, ext, strict) - - -def init(files=None): - global suffix_map, types_map, encodings_map, common_types - global inited, _db - inited = True # so that MimeTypes.__init__() doesn't call us again - - if files is None or _db is None: - db = MimeTypes() - # Quick return if not supported - db.read_windows_registry() - - if files is None: - files = knownfiles - else: - files = knownfiles + list(files) - else: - db = _db - - # Lazy import to improve module import time - import os - - for file in files: - if os.path.isfile(file): - db.read(file) - encodings_map = db.encodings_map - suffix_map = db.suffix_map - types_map = db.types_map[True] - common_types = db.types_map[False] - # Make the DB a global variable now that it is fully initialized - _db = db - - -def read_mime_types(file): - try: - f = open(file, encoding='utf-8') - except OSError: - return None - with f: - db = MimeTypes() - db.readfp(f, True) - return db.types_map[True] - - -def _default_mime_types(): - global suffix_map, _suffix_map_default - global encodings_map, _encodings_map_default - global types_map, _types_map_default - global common_types, _common_types_default - - suffix_map = _suffix_map_default = { - '.svgz': '.svg.gz', - '.tgz': '.tar.gz', - '.taz': '.tar.gz', - '.tz': '.tar.gz', - '.tbz2': '.tar.bz2', - '.txz': '.tar.xz', - } - - encodings_map = _encodings_map_default = { - '.gz': 'gzip', - '.Z': 'compress', - '.bz2': 'bzip2', - '.xz': 'xz', - '.br': 'br', - } - - # Before adding new types, make sure they are either registered with IANA, - # at https://www.iana.org/assignments/media-types/media-types.xhtml - # or extensions, i.e. using the x- prefix - - # If you add to these, please keep them sorted by mime type. - # Make sure the entry with the preferred file extension for a particular mime type - # appears before any others of the same mimetype. - types_map = _types_map_default = { - '.js' : 'text/javascript', - '.mjs' : 'text/javascript', - '.epub' : 'application/epub+zip', - '.gz' : 'application/gzip', - '.json' : 'application/json', - '.webmanifest': 'application/manifest+json', - '.doc' : 'application/msword', - '.dot' : 'application/msword', - '.wiz' : 'application/msword', - '.nq' : 'application/n-quads', - '.nt' : 'application/n-triples', - '.bin' : 'application/octet-stream', - '.a' : 'application/octet-stream', - '.dll' : 'application/octet-stream', - '.exe' : 'application/octet-stream', - '.o' : 'application/octet-stream', - '.obj' : 'application/octet-stream', - '.so' : 'application/octet-stream', - '.oda' : 'application/oda', - '.ogx' : 'application/ogg', - '.pdf' : 'application/pdf', - '.p7c' : 'application/pkcs7-mime', - '.ps' : 'application/postscript', - '.ai' : 'application/postscript', - '.eps' : 'application/postscript', - '.trig' : 'application/trig', - '.m3u' : 'application/vnd.apple.mpegurl', - '.m3u8' : 'application/vnd.apple.mpegurl', - '.xls' : 'application/vnd.ms-excel', - '.xlb' : 'application/vnd.ms-excel', - '.eot' : 'application/vnd.ms-fontobject', - '.ppt' : 'application/vnd.ms-powerpoint', - '.pot' : 'application/vnd.ms-powerpoint', - '.ppa' : 'application/vnd.ms-powerpoint', - '.pps' : 'application/vnd.ms-powerpoint', - '.pwz' : 'application/vnd.ms-powerpoint', - '.odg' : 'application/vnd.oasis.opendocument.graphics', - '.odp' : 'application/vnd.oasis.opendocument.presentation', - '.ods' : 'application/vnd.oasis.opendocument.spreadsheet', - '.odt' : 'application/vnd.oasis.opendocument.text', - '.pptx' : 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - '.xlsx' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - '.docx' : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - '.rar' : 'application/vnd.rar', - '.wasm' : 'application/wasm', - '.7z' : 'application/x-7z-compressed', - '.bcpio' : 'application/x-bcpio', - '.cpio' : 'application/x-cpio', - '.csh' : 'application/x-csh', - '.deb' : 'application/x-debian-package', - '.dvi' : 'application/x-dvi', - '.gtar' : 'application/x-gtar', - '.hdf' : 'application/x-hdf', - '.h5' : 'application/x-hdf5', - '.latex' : 'application/x-latex', - '.mif' : 'application/x-mif', - '.cdf' : 'application/x-netcdf', - '.nc' : 'application/x-netcdf', - '.p12' : 'application/x-pkcs12', - '.php' : 'application/x-httpd-php', - '.pfx' : 'application/x-pkcs12', - '.ram' : 'application/x-pn-realaudio', - '.pyc' : 'application/x-python-code', - '.pyo' : 'application/x-python-code', - '.rpm' : 'application/x-rpm', - '.sh' : 'application/x-sh', - '.shar' : 'application/x-shar', - '.swf' : 'application/x-shockwave-flash', - '.sv4cpio': 'application/x-sv4cpio', - '.sv4crc' : 'application/x-sv4crc', - '.tar' : 'application/x-tar', - '.tcl' : 'application/x-tcl', - '.tex' : 'application/x-tex', - '.texi' : 'application/x-texinfo', - '.texinfo': 'application/x-texinfo', - '.roff' : 'application/x-troff', - '.t' : 'application/x-troff', - '.tr' : 'application/x-troff', - '.man' : 'application/x-troff-man', - '.me' : 'application/x-troff-me', - '.ms' : 'application/x-troff-ms', - '.ustar' : 'application/x-ustar', - '.src' : 'application/x-wais-source', - '.xsl' : 'application/xml', - '.rdf' : 'application/xml', - '.wsdl' : 'application/xml', - '.xpdl' : 'application/xml', - '.yaml' : 'application/yaml', - '.yml' : 'application/yaml', - '.zip' : 'application/zip', - '.3gp' : 'audio/3gpp', - '.3gpp' : 'audio/3gpp', - '.3g2' : 'audio/3gpp2', - '.3gpp2' : 'audio/3gpp2', - '.aac' : 'audio/aac', - '.adts' : 'audio/aac', - '.loas' : 'audio/aac', - '.ass' : 'audio/aac', - '.au' : 'audio/basic', - '.snd' : 'audio/basic', - '.flac' : 'audio/flac', - '.mka' : 'audio/matroska', - '.m4a' : 'audio/mp4', - '.mp3' : 'audio/mpeg', - '.mp2' : 'audio/mpeg', - '.ogg' : 'audio/ogg', - '.opus' : 'audio/opus', - '.aif' : 'audio/x-aiff', - '.aifc' : 'audio/x-aiff', - '.aiff' : 'audio/x-aiff', - '.ra' : 'audio/x-pn-realaudio', - '.wav' : 'audio/vnd.wave', - '.otf' : 'font/otf', - '.ttf' : 'font/ttf', - '.weba' : 'audio/webm', - '.woff' : 'font/woff', - '.woff2' : 'font/woff2', - '.avif' : 'image/avif', - '.bmp' : 'image/bmp', - '.emf' : 'image/emf', - '.fits' : 'image/fits', - '.g3' : 'image/g3fax', - '.gif' : 'image/gif', - '.ief' : 'image/ief', - '.jp2' : 'image/jp2', - '.jpg' : 'image/jpeg', - '.jpe' : 'image/jpeg', - '.jpeg' : 'image/jpeg', - '.jpm' : 'image/jpm', - '.jpx' : 'image/jpx', - '.heic' : 'image/heic', - '.heif' : 'image/heif', - '.png' : 'image/png', - '.svg' : 'image/svg+xml', - '.t38' : 'image/t38', - '.tiff' : 'image/tiff', - '.tif' : 'image/tiff', - '.tfx' : 'image/tiff-fx', - '.ico' : 'image/vnd.microsoft.icon', - '.webp' : 'image/webp', - '.wmf' : 'image/wmf', - '.ras' : 'image/x-cmu-raster', - '.pnm' : 'image/x-portable-anymap', - '.pbm' : 'image/x-portable-bitmap', - '.pgm' : 'image/x-portable-graymap', - '.ppm' : 'image/x-portable-pixmap', - '.rgb' : 'image/x-rgb', - '.xbm' : 'image/x-xbitmap', - '.xpm' : 'image/x-xpixmap', - '.xwd' : 'image/x-xwindowdump', - '.eml' : 'message/rfc822', - '.mht' : 'message/rfc822', - '.mhtml' : 'message/rfc822', - '.nws' : 'message/rfc822', - '.gltf' : 'model/gltf+json', - '.glb' : 'model/gltf-binary', - '.stl' : 'model/stl', - '.css' : 'text/css', - '.csv' : 'text/csv', - '.html' : 'text/html', - '.htm' : 'text/html', - '.md' : 'text/markdown', - '.markdown': 'text/markdown', - '.n3' : 'text/n3', - '.txt' : 'text/plain', - '.bat' : 'text/plain', - '.c' : 'text/plain', - '.h' : 'text/plain', - '.ksh' : 'text/plain', - '.pl' : 'text/plain', - '.srt' : 'text/plain', - '.rtx' : 'text/richtext', - '.rtf' : 'text/rtf', - '.tsv' : 'text/tab-separated-values', - '.vtt' : 'text/vtt', - '.py' : 'text/x-python', - '.rst' : 'text/x-rst', - '.etx' : 'text/x-setext', - '.sgm' : 'text/x-sgml', - '.sgml' : 'text/x-sgml', - '.vcf' : 'text/x-vcard', - '.xml' : 'text/xml', - '.mkv' : 'video/matroska', - '.mk3d' : 'video/matroska-3d', - '.mp4' : 'video/mp4', - '.mpeg' : 'video/mpeg', - '.m1v' : 'video/mpeg', - '.mpa' : 'video/mpeg', - '.mpe' : 'video/mpeg', - '.mpg' : 'video/mpeg', - '.ogv' : 'video/ogg', - '.mov' : 'video/quicktime', - '.qt' : 'video/quicktime', - '.webm' : 'video/webm', - '.avi' : 'video/vnd.avi', - '.m4v' : 'video/x-m4v', - '.wmv' : 'video/x-ms-wmv', - '.movie' : 'video/x-sgi-movie', - } - - # These are non-standard types, commonly found in the wild. They will - # only match if strict=0 flag is given to the API methods. - - # Please sort these too - common_types = _common_types_default = { - '.rtf' : 'application/rtf', - '.apk' : 'application/vnd.android.package-archive', - '.midi': 'audio/midi', - '.mid' : 'audio/midi', - '.jpg' : 'image/jpg', - '.pict': 'image/pict', - '.pct' : 'image/pict', - '.pic' : 'image/pict', - '.xul' : 'text/xul', - } - - -_default_mime_types() - - -def _parse_args(args): - from argparse import ArgumentParser - - parser = ArgumentParser( - description='map filename extensions to MIME types', color=True - ) - parser.add_argument( - '-e', '--extension', - action='store_true', - help='guess extension instead of type' - ) - parser.add_argument( - '-l', '--lenient', - action='store_true', - help='additionally search for common but non-standard types' - ) - parser.add_argument('type', nargs='+', help='a type to search') - args = parser.parse_args(args) - return args, parser.format_help() - - -def _main(args=None): - """Run the mimetypes command-line interface and return a text to print.""" - args, help_text = _parse_args(args) - - results = [] - if args.extension: - for gtype in args.type: - guess = guess_extension(gtype, not args.lenient) - if guess: - results.append(str(guess)) - else: - results.append(f"error: unknown type {gtype}") - return results - else: - for gtype in args.type: - guess, encoding = guess_type(gtype, not args.lenient) - if guess: - results.append(f"type: {guess} encoding: {encoding}") - else: - results.append(f"error: media type unknown for {gtype}") - return results - - -if __name__ == '__main__': - import sys - - results = _main() - print("\n".join(results)) - sys.exit(any(result.startswith("error: ") for result in results)) diff --git a/Python314_4_x86_Template/Lib/modulefinder.py b/Python314_4_x86_Template/Lib/modulefinder.py deleted file mode 100644 index ac478ee7f..000000000 --- a/Python314_4_x86_Template/Lib/modulefinder.py +++ /dev/null @@ -1,671 +0,0 @@ -"""Find modules used by a script, using introspection.""" - -import dis -import importlib._bootstrap_external -import importlib.machinery -import marshal -import os -import io -import sys - -# Old imp constants: - -_SEARCH_ERROR = 0 -_PY_SOURCE = 1 -_PY_COMPILED = 2 -_C_EXTENSION = 3 -_PKG_DIRECTORY = 5 -_C_BUILTIN = 6 -_PY_FROZEN = 7 - -# Modulefinder does a good job at simulating Python's, but it can not -# handle __path__ modifications packages make at runtime. Therefore there -# is a mechanism whereby you can register extra paths in this map for a -# package, and it will be honored. - -# Note this is a mapping is lists of paths. -packagePathMap = {} - -# A Public interface -def AddPackagePath(packagename, path): - packagePathMap.setdefault(packagename, []).append(path) - -replacePackageMap = {} - -# This ReplacePackage mechanism allows modulefinder to work around -# situations in which a package injects itself under the name -# of another package into sys.modules at runtime by calling -# ReplacePackage("real_package_name", "faked_package_name") -# before running ModuleFinder. - -def ReplacePackage(oldname, newname): - replacePackageMap[oldname] = newname - - -def _find_module(name, path=None): - """An importlib reimplementation of imp.find_module (for our purposes).""" - - # It's necessary to clear the caches for our Finder first, in case any - # modules are being added/deleted/modified at runtime. In particular, - # test_modulefinder.py changes file tree contents in a cache-breaking way: - - importlib.machinery.PathFinder.invalidate_caches() - - spec = importlib.machinery.PathFinder.find_spec(name, path) - - if spec is None: - raise ImportError("No module named {name!r}".format(name=name), name=name) - - # Some special cases: - - if spec.loader is importlib.machinery.BuiltinImporter: - return None, None, ("", "", _C_BUILTIN) - - if spec.loader is importlib.machinery.FrozenImporter: - return None, None, ("", "", _PY_FROZEN) - - file_path = spec.origin - - if spec.loader.is_package(name): - return None, os.path.dirname(file_path), ("", "", _PKG_DIRECTORY) - - if isinstance(spec.loader, importlib.machinery.SourceFileLoader): - kind = _PY_SOURCE - - elif isinstance( - spec.loader, ( - importlib.machinery.ExtensionFileLoader, - importlib.machinery.AppleFrameworkLoader, - ) - ): - kind = _C_EXTENSION - - elif isinstance(spec.loader, importlib.machinery.SourcelessFileLoader): - kind = _PY_COMPILED - - else: # Should never happen. - return None, None, ("", "", _SEARCH_ERROR) - - file = io.open_code(file_path) - suffix = os.path.splitext(file_path)[-1] - - return file, file_path, (suffix, "rb", kind) - - -class Module: - - def __init__(self, name, file=None, path=None): - self.__name__ = name - self.__file__ = file - self.__path__ = path - self.__code__ = None - # The set of global names that are assigned to in the module. - # This includes those names imported through starimports of - # Python modules. - self.globalnames = {} - # The set of starimports this module did that could not be - # resolved, ie. a starimport from a non-Python module. - self.starimports = {} - - def __repr__(self): - s = "Module(%r" % (self.__name__,) - if self.__file__ is not None: - s = s + ", %r" % (self.__file__,) - if self.__path__ is not None: - s = s + ", %r" % (self.__path__,) - s = s + ")" - return s - -class ModuleFinder: - - def __init__(self, path=None, debug=0, excludes=None, replace_paths=None): - if path is None: - path = sys.path - self.path = path - self.modules = {} - self.badmodules = {} - self.debug = debug - self.indent = 0 - self.excludes = excludes if excludes is not None else [] - self.replace_paths = replace_paths if replace_paths is not None else [] - self.processed_paths = [] # Used in debugging only - - def msg(self, level, str, *args): - if level <= self.debug: - for i in range(self.indent): - print(" ", end=' ') - print(str, end=' ') - for arg in args: - print(repr(arg), end=' ') - print() - - def msgin(self, *args): - level = args[0] - if level <= self.debug: - self.indent = self.indent + 1 - self.msg(*args) - - def msgout(self, *args): - level = args[0] - if level <= self.debug: - self.indent = self.indent - 1 - self.msg(*args) - - def run_script(self, pathname): - self.msg(2, "run_script", pathname) - with io.open_code(pathname) as fp: - stuff = ("", "rb", _PY_SOURCE) - self.load_module('__main__', fp, pathname, stuff) - - def load_file(self, pathname): - dir, name = os.path.split(pathname) - name, ext = os.path.splitext(name) - with io.open_code(pathname) as fp: - stuff = (ext, "rb", _PY_SOURCE) - self.load_module(name, fp, pathname, stuff) - - def import_hook(self, name, caller=None, fromlist=None, level=-1): - self.msg(3, "import_hook", name, caller, fromlist, level) - parent = self.determine_parent(caller, level=level) - q, tail = self.find_head_package(parent, name) - m = self.load_tail(q, tail) - if not fromlist: - return q - if m.__path__: - self.ensure_fromlist(m, fromlist) - return None - - def determine_parent(self, caller, level=-1): - self.msgin(4, "determine_parent", caller, level) - if not caller or level == 0: - self.msgout(4, "determine_parent -> None") - return None - pname = caller.__name__ - if level >= 1: # relative import - if caller.__path__: - level -= 1 - if level == 0: - parent = self.modules[pname] - assert parent is caller - self.msgout(4, "determine_parent ->", parent) - return parent - if pname.count(".") < level: - raise ImportError("relative importpath too deep") - pname = ".".join(pname.split(".")[:-level]) - parent = self.modules[pname] - self.msgout(4, "determine_parent ->", parent) - return parent - if caller.__path__: - parent = self.modules[pname] - assert caller is parent - self.msgout(4, "determine_parent ->", parent) - return parent - if '.' in pname: - i = pname.rfind('.') - pname = pname[:i] - parent = self.modules[pname] - assert parent.__name__ == pname - self.msgout(4, "determine_parent ->", parent) - return parent - self.msgout(4, "determine_parent -> None") - return None - - def find_head_package(self, parent, name): - self.msgin(4, "find_head_package", parent, name) - if '.' in name: - i = name.find('.') - head = name[:i] - tail = name[i+1:] - else: - head = name - tail = "" - if parent: - qname = "%s.%s" % (parent.__name__, head) - else: - qname = head - q = self.import_module(head, qname, parent) - if q: - self.msgout(4, "find_head_package ->", (q, tail)) - return q, tail - if parent: - qname = head - parent = None - q = self.import_module(head, qname, parent) - if q: - self.msgout(4, "find_head_package ->", (q, tail)) - return q, tail - self.msgout(4, "raise ImportError: No module named", qname) - raise ImportError("No module named " + qname) - - def load_tail(self, q, tail): - self.msgin(4, "load_tail", q, tail) - m = q - while tail: - i = tail.find('.') - if i < 0: i = len(tail) - head, tail = tail[:i], tail[i+1:] - mname = "%s.%s" % (m.__name__, head) - m = self.import_module(head, mname, m) - if not m: - self.msgout(4, "raise ImportError: No module named", mname) - raise ImportError("No module named " + mname) - self.msgout(4, "load_tail ->", m) - return m - - def ensure_fromlist(self, m, fromlist, recursive=0): - self.msg(4, "ensure_fromlist", m, fromlist, recursive) - for sub in fromlist: - if sub == "*": - if not recursive: - all = self.find_all_submodules(m) - if all: - self.ensure_fromlist(m, all, 1) - elif not hasattr(m, sub): - subname = "%s.%s" % (m.__name__, sub) - submod = self.import_module(sub, subname, m) - if not submod: - raise ImportError("No module named " + subname) - - def find_all_submodules(self, m): - if not m.__path__: - return - modules = {} - # 'suffixes' used to be a list hardcoded to [".py", ".pyc"]. - # But we must also collect Python extension modules - although - # we cannot separate normal dlls from Python extensions. - suffixes = [] - suffixes += importlib.machinery.EXTENSION_SUFFIXES[:] - suffixes += importlib.machinery.SOURCE_SUFFIXES[:] - suffixes += importlib.machinery.BYTECODE_SUFFIXES[:] - for dir in m.__path__: - try: - names = os.listdir(dir) - except OSError: - self.msg(2, "can't list directory", dir) - continue - for name in names: - mod = None - for suff in suffixes: - n = len(suff) - if name[-n:] == suff: - mod = name[:-n] - break - if mod and mod != "__init__": - modules[mod] = mod - return modules.keys() - - def import_module(self, partname, fqname, parent): - self.msgin(3, "import_module", partname, fqname, parent) - try: - m = self.modules[fqname] - except KeyError: - pass - else: - self.msgout(3, "import_module ->", m) - return m - if fqname in self.badmodules: - self.msgout(3, "import_module -> None") - return None - if parent and parent.__path__ is None: - self.msgout(3, "import_module -> None") - return None - try: - fp, pathname, stuff = self.find_module(partname, - parent and parent.__path__, parent) - except ImportError: - self.msgout(3, "import_module ->", None) - return None - - try: - m = self.load_module(fqname, fp, pathname, stuff) - finally: - if fp: - fp.close() - if parent: - setattr(parent, partname, m) - self.msgout(3, "import_module ->", m) - return m - - def load_module(self, fqname, fp, pathname, file_info): - suffix, mode, type = file_info - self.msgin(2, "load_module", fqname, fp and "fp", pathname) - if type == _PKG_DIRECTORY: - m = self.load_package(fqname, pathname) - self.msgout(2, "load_module ->", m) - return m - if type == _PY_SOURCE: - co = compile(fp.read(), pathname, 'exec') - elif type == _PY_COMPILED: - try: - data = fp.read() - importlib._bootstrap_external._classify_pyc(data, fqname, {}) - except ImportError as exc: - self.msgout(2, "raise ImportError: " + str(exc), pathname) - raise - co = marshal.loads(memoryview(data)[16:]) - else: - co = None - m = self.add_module(fqname) - m.__file__ = pathname - if co: - if self.replace_paths: - co = self.replace_paths_in_code(co) - m.__code__ = co - self.scan_code(co, m) - self.msgout(2, "load_module ->", m) - return m - - def _add_badmodule(self, name, caller): - if name not in self.badmodules: - self.badmodules[name] = {} - if caller: - self.badmodules[name][caller.__name__] = 1 - else: - self.badmodules[name]["-"] = 1 - - def _safe_import_hook(self, name, caller, fromlist, level=-1): - # wrapper for self.import_hook() that won't raise ImportError - if name in self.badmodules: - self._add_badmodule(name, caller) - return - try: - self.import_hook(name, caller, level=level) - except ImportError as msg: - self.msg(2, "ImportError:", str(msg)) - self._add_badmodule(name, caller) - except SyntaxError as msg: - self.msg(2, "SyntaxError:", str(msg)) - self._add_badmodule(name, caller) - else: - if fromlist: - for sub in fromlist: - fullname = name + "." + sub - if fullname in self.badmodules: - self._add_badmodule(fullname, caller) - continue - try: - self.import_hook(name, caller, [sub], level=level) - except ImportError as msg: - self.msg(2, "ImportError:", str(msg)) - self._add_badmodule(fullname, caller) - - def scan_opcodes(self, co): - # Scan the code, and yield 'interesting' opcode combinations - for name in dis._find_store_names(co): - yield "store", (name,) - for name, level, fromlist in dis._find_imports(co): - if level == 0: # absolute import - yield "absolute_import", (fromlist, name) - else: # relative import - yield "relative_import", (level, fromlist, name) - - def scan_code(self, co, m): - code = co.co_code - scanner = self.scan_opcodes - for what, args in scanner(co): - if what == "store": - name, = args - m.globalnames[name] = 1 - elif what == "absolute_import": - fromlist, name = args - have_star = 0 - if fromlist is not None: - if "*" in fromlist: - have_star = 1 - fromlist = [f for f in fromlist if f != "*"] - self._safe_import_hook(name, m, fromlist, level=0) - if have_star: - # We've encountered an "import *". If it is a Python module, - # the code has already been parsed and we can suck out the - # global names. - mm = None - if m.__path__: - # At this point we don't know whether 'name' is a - # submodule of 'm' or a global module. Let's just try - # the full name first. - mm = self.modules.get(m.__name__ + "." + name) - if mm is None: - mm = self.modules.get(name) - if mm is not None: - m.globalnames.update(mm.globalnames) - m.starimports.update(mm.starimports) - if mm.__code__ is None: - m.starimports[name] = 1 - else: - m.starimports[name] = 1 - elif what == "relative_import": - level, fromlist, name = args - if name: - self._safe_import_hook(name, m, fromlist, level=level) - else: - parent = self.determine_parent(m, level=level) - self._safe_import_hook(parent.__name__, None, fromlist, level=0) - else: - # We don't expect anything else from the generator. - raise RuntimeError(what) - - for c in co.co_consts: - if isinstance(c, type(co)): - self.scan_code(c, m) - - def load_package(self, fqname, pathname): - self.msgin(2, "load_package", fqname, pathname) - newname = replacePackageMap.get(fqname) - if newname: - fqname = newname - m = self.add_module(fqname) - m.__file__ = pathname - m.__path__ = [pathname] - - # As per comment at top of file, simulate runtime __path__ additions. - m.__path__ = m.__path__ + packagePathMap.get(fqname, []) - - fp, buf, stuff = self.find_module("__init__", m.__path__) - try: - self.load_module(fqname, fp, buf, stuff) - self.msgout(2, "load_package ->", m) - return m - finally: - if fp: - fp.close() - - def add_module(self, fqname): - if fqname in self.modules: - return self.modules[fqname] - self.modules[fqname] = m = Module(fqname) - return m - - def find_module(self, name, path, parent=None): - if parent is not None: - # assert path is not None - fullname = parent.__name__+'.'+name - else: - fullname = name - if fullname in self.excludes: - self.msgout(3, "find_module -> Excluded", fullname) - raise ImportError(name) - - if path is None: - if name in sys.builtin_module_names: - return (None, None, ("", "", _C_BUILTIN)) - - path = self.path - - return _find_module(name, path) - - def report(self): - """Print a report to stdout, listing the found modules with their - paths, as well as modules that are missing, or seem to be missing. - """ - print() - print(" %-25s %s" % ("Name", "File")) - print(" %-25s %s" % ("----", "----")) - # Print modules found - keys = sorted(self.modules.keys()) - for key in keys: - m = self.modules[key] - if m.__path__: - print("P", end=' ') - else: - print("m", end=' ') - print("%-25s" % key, m.__file__ or "") - - # Print missing modules - missing, maybe = self.any_missing_maybe() - if missing: - print() - print("Missing modules:") - for name in missing: - mods = sorted(self.badmodules[name].keys()) - print("?", name, "imported from", ', '.join(mods)) - # Print modules that may be missing, but then again, maybe not... - if maybe: - print() - print("Submodules that appear to be missing, but could also be", end=' ') - print("global names in the parent package:") - for name in maybe: - mods = sorted(self.badmodules[name].keys()) - print("?", name, "imported from", ', '.join(mods)) - - def any_missing(self): - """Return a list of modules that appear to be missing. Use - any_missing_maybe() if you want to know which modules are - certain to be missing, and which *may* be missing. - """ - missing, maybe = self.any_missing_maybe() - return missing + maybe - - def any_missing_maybe(self): - """Return two lists, one with modules that are certainly missing - and one with modules that *may* be missing. The latter names could - either be submodules *or* just global names in the package. - - The reason it can't always be determined is that it's impossible to - tell which names are imported when "from module import *" is done - with an extension module, short of actually importing it. - """ - missing = [] - maybe = [] - for name in self.badmodules: - if name in self.excludes: - continue - i = name.rfind(".") - if i < 0: - missing.append(name) - continue - subname = name[i+1:] - pkgname = name[:i] - pkg = self.modules.get(pkgname) - if pkg is not None: - if pkgname in self.badmodules[name]: - # The package tried to import this module itself and - # failed. It's definitely missing. - missing.append(name) - elif subname in pkg.globalnames: - # It's a global in the package: definitely not missing. - pass - elif pkg.starimports: - # It could be missing, but the package did an "import *" - # from a non-Python module, so we simply can't be sure. - maybe.append(name) - else: - # It's not a global in the package, the package didn't - # do funny star imports, it's very likely to be missing. - # The symbol could be inserted into the package from the - # outside, but since that's not good style we simply list - # it missing. - missing.append(name) - else: - missing.append(name) - missing.sort() - maybe.sort() - return missing, maybe - - def replace_paths_in_code(self, co): - new_filename = original_filename = os.path.normpath(co.co_filename) - for f, r in self.replace_paths: - if original_filename.startswith(f): - new_filename = r + original_filename[len(f):] - break - - if self.debug and original_filename not in self.processed_paths: - if new_filename != original_filename: - self.msgout(2, "co_filename %r changed to %r" \ - % (original_filename,new_filename,)) - else: - self.msgout(2, "co_filename %r remains unchanged" \ - % (original_filename,)) - self.processed_paths.append(original_filename) - - consts = list(co.co_consts) - for i in range(len(consts)): - if isinstance(consts[i], type(co)): - consts[i] = self.replace_paths_in_code(consts[i]) - - return co.replace(co_consts=tuple(consts), co_filename=new_filename) - - -def test(): - # Parse command line - import getopt - try: - opts, args = getopt.getopt(sys.argv[1:], "dmp:qx:") - except getopt.error as msg: - print(msg) - return - - # Process options - debug = 1 - domods = 0 - addpath = [] - exclude = [] - for o, a in opts: - if o == '-d': - debug = debug + 1 - if o == '-m': - domods = 1 - if o == '-p': - addpath = addpath + a.split(os.pathsep) - if o == '-q': - debug = 0 - if o == '-x': - exclude.append(a) - - # Provide default arguments - if not args: - script = "hello.py" - else: - script = args[0] - - # Set the path based on sys.path and the script directory - path = sys.path[:] - path[0] = os.path.dirname(script) - path = addpath + path - if debug > 1: - print("path:") - for item in path: - print(" ", repr(item)) - - # Create the module finder and turn its crank - mf = ModuleFinder(path, debug, exclude) - for arg in args[1:]: - if arg == '-m': - domods = 1 - continue - if domods: - if arg[-2:] == '.*': - mf.import_hook(arg[:-2], None, ["*"]) - else: - mf.import_hook(arg) - else: - mf.load_file(arg) - mf.run_script(script) - mf.report() - return mf # for -i debugging - - -if __name__ == '__main__': - try: - mf = test() - except KeyboardInterrupt: - print("\n[interrupted]") diff --git a/Python314_4_x86_Template/Lib/multiprocessing/__init__.py b/Python314_4_x86_Template/Lib/multiprocessing/__init__.py deleted file mode 100644 index 8336f381d..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# -# Package analogous to 'threading.py' but using processes -# -# multiprocessing/__init__.py -# -# This package is intended to duplicate the functionality (and much of -# the API) of threading.py but uses processes instead of threads. A -# subpackage 'multiprocessing.dummy' has the same API but is a simple -# wrapper for 'threading'. -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -import sys -from . import context - -# -# Copy stuff from default context -# - -__all__ = [x for x in dir(context._default_context) if not x.startswith('_')] -globals().update((name, getattr(context._default_context, name)) for name in __all__) - -# -# XXX These should not really be documented or public. -# - -SUBDEBUG = 5 -SUBWARNING = 25 - -# -# Alias for main module -- will be reset by bootstrapping child processes -# - -if '__main__' in sys.modules: - sys.modules['__mp_main__'] = sys.modules['__main__'] diff --git a/Python314_4_x86_Template/Lib/multiprocessing/connection.py b/Python314_4_x86_Template/Lib/multiprocessing/connection.py deleted file mode 100644 index a6e1b0c78..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/connection.py +++ /dev/null @@ -1,1229 +0,0 @@ -# -# A higher level module for using sockets (or Windows named pipes) -# -# multiprocessing/connection.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = [ 'Client', 'Listener', 'Pipe', 'wait' ] - -import errno -import io -import itertools -import os -import sys -import socket -import struct -import tempfile -import time - - -from . import util - -from . import AuthenticationError, BufferTooShort -from .context import reduction -_ForkingPickler = reduction.ForkingPickler - -try: - import _multiprocessing - import _winapi - from _winapi import WAIT_OBJECT_0, WAIT_ABANDONED_0, WAIT_TIMEOUT, INFINITE -except ImportError: - if sys.platform == 'win32': - raise - _winapi = None - -# -# -# - -# 64 KiB is the default PIPE buffer size of most POSIX platforms. -BUFSIZE = 64 * 1024 - -# A very generous timeout when it comes to local connections... -CONNECTION_TIMEOUT = 20. - -_mmap_counter = itertools.count() -_MAX_PIPE_ATTEMPTS = 100 - -default_family = 'AF_INET' -families = ['AF_INET'] - -if hasattr(socket, 'AF_UNIX'): - default_family = 'AF_UNIX' - families += ['AF_UNIX'] - -if sys.platform == 'win32': - default_family = 'AF_PIPE' - families += ['AF_PIPE'] - - -def _init_timeout(timeout=CONNECTION_TIMEOUT): - return time.monotonic() + timeout - -def _check_timeout(t): - return time.monotonic() > t - -# -# -# - -def arbitrary_address(family): - ''' - Return an arbitrary free address for the given family - ''' - if family == 'AF_INET': - return ('localhost', 0) - elif family == 'AF_UNIX': - return tempfile.mktemp(prefix='sock-', dir=util.get_temp_dir()) - elif family == 'AF_PIPE': - return (r'\\.\pipe\pyc-%d-%d-%s' % - (os.getpid(), next(_mmap_counter), os.urandom(8).hex())) - else: - raise ValueError('unrecognized family') - -def _validate_family(family): - ''' - Checks if the family is valid for the current environment. - ''' - if sys.platform != 'win32' and family == 'AF_PIPE': - raise ValueError('Family %s is not recognized.' % family) - - if sys.platform == 'win32' and family == 'AF_UNIX': - # double check - if not hasattr(socket, family): - raise ValueError('Family %s is not recognized.' % family) - -def address_type(address): - ''' - Return the types of the address - - This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' - ''' - if type(address) == tuple: - return 'AF_INET' - elif type(address) is str and address.startswith('\\\\'): - return 'AF_PIPE' - elif type(address) is str or util.is_abstract_socket_namespace(address): - return 'AF_UNIX' - else: - raise ValueError('address type of %r unrecognized' % address) - -# -# Connection classes -# - -class _ConnectionBase: - _handle = None - - def __init__(self, handle, readable=True, writable=True): - handle = handle.__index__() - if handle < 0: - raise ValueError("invalid handle") - if not readable and not writable: - raise ValueError( - "at least one of `readable` and `writable` must be True") - self._handle = handle - self._readable = readable - self._writable = writable - - # XXX should we use util.Finalize instead of a __del__? - - def __del__(self): - if self._handle is not None: - self._close() - - def _check_closed(self): - if self._handle is None: - raise OSError("handle is closed") - - def _check_readable(self): - if not self._readable: - raise OSError("connection is write-only") - - def _check_writable(self): - if not self._writable: - raise OSError("connection is read-only") - - def _bad_message_length(self): - if self._writable: - self._readable = False - else: - self.close() - raise OSError("bad message length") - - @property - def closed(self): - """True if the connection is closed""" - return self._handle is None - - @property - def readable(self): - """True if the connection is readable""" - return self._readable - - @property - def writable(self): - """True if the connection is writable""" - return self._writable - - def fileno(self): - """File descriptor or handle of the connection""" - self._check_closed() - return self._handle - - def close(self): - """Close the connection""" - if self._handle is not None: - try: - self._close() - finally: - self._handle = None - - def _detach(self): - """Stop managing the underlying file descriptor or handle.""" - self._handle = None - - def send_bytes(self, buf, offset=0, size=None): - """Send the bytes data from a bytes-like object""" - self._check_closed() - self._check_writable() - m = memoryview(buf) - if m.itemsize > 1: - m = m.cast('B') - n = m.nbytes - if offset < 0: - raise ValueError("offset is negative") - if n < offset: - raise ValueError("buffer length < offset") - if size is None: - size = n - offset - elif size < 0: - raise ValueError("size is negative") - elif offset + size > n: - raise ValueError("buffer length < offset + size") - self._send_bytes(m[offset:offset + size]) - - def send(self, obj): - """Send a (picklable) object""" - self._check_closed() - self._check_writable() - self._send_bytes(_ForkingPickler.dumps(obj)) - - def recv_bytes(self, maxlength=None): - """ - Receive bytes data as a bytes object. - """ - self._check_closed() - self._check_readable() - if maxlength is not None and maxlength < 0: - raise ValueError("negative maxlength") - buf = self._recv_bytes(maxlength) - if buf is None: - self._bad_message_length() - return buf.getvalue() - - def recv_bytes_into(self, buf, offset=0): - """ - Receive bytes data into a writeable bytes-like object. - Return the number of bytes read. - """ - self._check_closed() - self._check_readable() - with memoryview(buf) as m: - # Get bytesize of arbitrary buffer - itemsize = m.itemsize - bytesize = itemsize * len(m) - if offset < 0: - raise ValueError("negative offset") - elif offset > bytesize: - raise ValueError("offset too large") - result = self._recv_bytes() - size = result.tell() - if bytesize < offset + size: - raise BufferTooShort(result.getvalue()) - # Message can fit in dest - result.seek(0) - result.readinto(m[offset // itemsize : - (offset + size) // itemsize]) - return size - - def recv(self): - """Receive a (picklable) object""" - self._check_closed() - self._check_readable() - buf = self._recv_bytes() - return _ForkingPickler.loads(buf.getbuffer()) - - def poll(self, timeout=0.0): - """Whether there is any input available to be read""" - self._check_closed() - self._check_readable() - return self._poll(timeout) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, exc_tb): - self.close() - - -if _winapi: - - class PipeConnection(_ConnectionBase): - """ - Connection class based on a Windows named pipe. - Overlapped I/O is used, so the handles must have been created - with FILE_FLAG_OVERLAPPED. - """ - _got_empty_message = False - _send_ov = None - - def _close(self, _CloseHandle=_winapi.CloseHandle): - ov = self._send_ov - if ov is not None: - # Interrupt WaitForMultipleObjects() in _send_bytes() - ov.cancel() - _CloseHandle(self._handle) - - def _send_bytes(self, buf): - if self._send_ov is not None: - # A connection should only be used by a single thread - raise ValueError("concurrent send_bytes() calls " - "are not supported") - ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True) - self._send_ov = ov - try: - if err == _winapi.ERROR_IO_PENDING: - waitres = _winapi.WaitForMultipleObjects( - [ov.event], False, INFINITE) - assert waitres == WAIT_OBJECT_0 - except: - ov.cancel() - raise - finally: - self._send_ov = None - nwritten, err = ov.GetOverlappedResult(True) - if err == _winapi.ERROR_OPERATION_ABORTED: - # close() was called by another thread while - # WaitForMultipleObjects() was waiting for the overlapped - # operation. - raise OSError(errno.EPIPE, "handle is closed") - assert err == 0 - assert nwritten == len(buf) - - def _recv_bytes(self, maxsize=None): - if self._got_empty_message: - self._got_empty_message = False - return io.BytesIO() - else: - bsize = 128 if maxsize is None else min(maxsize, 128) - try: - ov, err = _winapi.ReadFile(self._handle, bsize, - overlapped=True) - - sentinel = object() - return_value = sentinel - try: - try: - if err == _winapi.ERROR_IO_PENDING: - waitres = _winapi.WaitForMultipleObjects( - [ov.event], False, INFINITE) - assert waitres == WAIT_OBJECT_0 - except: - ov.cancel() - raise - finally: - nread, err = ov.GetOverlappedResult(True) - if err == 0: - f = io.BytesIO() - f.write(ov.getbuffer()) - return_value = f - elif err == _winapi.ERROR_MORE_DATA: - return_value = self._get_more_data(ov, maxsize) - except: - if return_value is sentinel: - raise - - if return_value is not sentinel: - return return_value - except OSError as e: - if e.winerror == _winapi.ERROR_BROKEN_PIPE: - raise EOFError - else: - raise - raise RuntimeError("shouldn't get here; expected KeyboardInterrupt") - - def _poll(self, timeout): - if (self._got_empty_message or - _winapi.PeekNamedPipe(self._handle)[0] != 0): - return True - return bool(wait([self], timeout)) - - def _get_more_data(self, ov, maxsize): - buf = ov.getbuffer() - f = io.BytesIO() - f.write(buf) - left = _winapi.PeekNamedPipe(self._handle)[1] - assert left > 0 - if maxsize is not None and len(buf) + left > maxsize: - self._bad_message_length() - ov, err = _winapi.ReadFile(self._handle, left, overlapped=True) - rbytes, err = ov.GetOverlappedResult(True) - assert err == 0 - assert rbytes == left - f.write(ov.getbuffer()) - return f - - -class Connection(_ConnectionBase): - """ - Connection class based on an arbitrary file descriptor (Unix only), or - a socket handle (Windows). - """ - - if _winapi: - def _close(self, _close=_multiprocessing.closesocket): - _close(self._handle) - _write = _multiprocessing.send - _read = _multiprocessing.recv - else: - def _close(self, _close=os.close): - _close(self._handle) - _write = os.write - _read = os.read - - def _send(self, buf, write=_write): - remaining = len(buf) - while True: - n = write(self._handle, buf) - remaining -= n - if remaining == 0: - break - buf = buf[n:] - - def _recv(self, size, read=_read): - buf = io.BytesIO() - handle = self._handle - remaining = size - while remaining > 0: - to_read = min(BUFSIZE, remaining) - chunk = read(handle, to_read) - n = len(chunk) - if n == 0: - if remaining == size: - raise EOFError - else: - raise OSError("got end of file during message") - buf.write(chunk) - remaining -= n - return buf - - def _send_bytes(self, buf): - n = len(buf) - if n > 0x7fffffff: - pre_header = struct.pack("!i", -1) - header = struct.pack("!Q", n) - self._send(pre_header) - self._send(header) - self._send(buf) - else: - # For wire compatibility with 3.7 and lower - header = struct.pack("!i", n) - if n > 16384: - # The payload is large so Nagle's algorithm won't be triggered - # and we'd better avoid the cost of concatenation. - self._send(header) - self._send(buf) - else: - # Issue #20540: concatenate before sending, to avoid delays due - # to Nagle's algorithm on a TCP socket. - # Also note we want to avoid sending a 0-length buffer separately, - # to avoid "broken pipe" errors if the other end closed the pipe. - self._send(header + buf) - - def _recv_bytes(self, maxsize=None): - buf = self._recv(4) - size, = struct.unpack("!i", buf.getvalue()) - if size == -1: - buf = self._recv(8) - size, = struct.unpack("!Q", buf.getvalue()) - if maxsize is not None and size > maxsize: - return None - return self._recv(size) - - def _poll(self, timeout): - r = wait([self], timeout) - return bool(r) - - -# -# Public functions -# - -class Listener(object): - ''' - Returns a listener object. - - This is a wrapper for a bound socket which is 'listening' for - connections, or for a Windows named pipe. - ''' - def __init__(self, address=None, family=None, backlog=1, authkey=None): - family = family or (address and address_type(address)) \ - or default_family - _validate_family(family) - if authkey is not None and not isinstance(authkey, bytes): - raise TypeError('authkey should be a byte string') - - if family == 'AF_PIPE': - if address: - self._listener = PipeListener(address, backlog) - else: - for attempts in itertools.count(): - address = arbitrary_address(family) - try: - self._listener = PipeListener(address, backlog) - break - except OSError as e: - if attempts >= _MAX_PIPE_ATTEMPTS: - raise - if e.winerror not in (_winapi.ERROR_PIPE_BUSY, - _winapi.ERROR_ACCESS_DENIED): - raise - else: - address = address or arbitrary_address(family) - self._listener = SocketListener(address, family, backlog) - - self._authkey = authkey - - def accept(self): - ''' - Accept a connection on the bound socket or named pipe of `self`. - - Returns a `Connection` object. - ''' - if self._listener is None: - raise OSError('listener is closed') - - c = self._listener.accept() - if self._authkey is not None: - deliver_challenge(c, self._authkey) - answer_challenge(c, self._authkey) - return c - - def close(self): - ''' - Close the bound socket or named pipe of `self`. - ''' - listener = self._listener - if listener is not None: - self._listener = None - listener.close() - - @property - def address(self): - return self._listener._address - - @property - def last_accepted(self): - return self._listener._last_accepted - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, exc_tb): - self.close() - - -def Client(address, family=None, authkey=None): - ''' - Returns a connection to the address of a `Listener` - ''' - family = family or address_type(address) - _validate_family(family) - if family == 'AF_PIPE': - c = PipeClient(address) - else: - c = SocketClient(address) - - if authkey is not None and not isinstance(authkey, bytes): - raise TypeError('authkey should be a byte string') - - if authkey is not None: - answer_challenge(c, authkey) - deliver_challenge(c, authkey) - - return c - - -if sys.platform != 'win32': - - def Pipe(duplex=True): - ''' - Returns pair of connection objects at either end of a pipe - ''' - if duplex: - s1, s2 = socket.socketpair() - s1.setblocking(True) - s2.setblocking(True) - c1 = Connection(s1.detach()) - c2 = Connection(s2.detach()) - else: - fd1, fd2 = os.pipe() - c1 = Connection(fd1, writable=False) - c2 = Connection(fd2, readable=False) - - return c1, c2 - -else: - - def Pipe(duplex=True): - ''' - Returns pair of connection objects at either end of a pipe - ''' - if duplex: - openmode = _winapi.PIPE_ACCESS_DUPLEX - access = _winapi.GENERIC_READ | _winapi.GENERIC_WRITE - obsize, ibsize = BUFSIZE, BUFSIZE - else: - openmode = _winapi.PIPE_ACCESS_INBOUND - access = _winapi.GENERIC_WRITE - obsize, ibsize = 0, BUFSIZE - - for attempts in itertools.count(): - address = arbitrary_address('AF_PIPE') - try: - h1 = _winapi.CreateNamedPipe( - address, openmode | _winapi.FILE_FLAG_OVERLAPPED | - _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE, - _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE | - _winapi.PIPE_WAIT, - 1, obsize, ibsize, _winapi.NMPWAIT_WAIT_FOREVER, - # default security descriptor: the handle cannot be inherited - _winapi.NULL - ) - break - except OSError as e: - if attempts >= _MAX_PIPE_ATTEMPTS: - raise - if e.winerror not in (_winapi.ERROR_PIPE_BUSY, - _winapi.ERROR_ACCESS_DENIED): - raise - h2 = _winapi.CreateFile( - address, access, 0, _winapi.NULL, _winapi.OPEN_EXISTING, - _winapi.FILE_FLAG_OVERLAPPED, _winapi.NULL - ) - _winapi.SetNamedPipeHandleState( - h2, _winapi.PIPE_READMODE_MESSAGE, None, None - ) - - overlapped = _winapi.ConnectNamedPipe(h1, overlapped=True) - _, err = overlapped.GetOverlappedResult(True) - assert err == 0 - - c1 = PipeConnection(h1, writable=duplex) - c2 = PipeConnection(h2, readable=duplex) - - return c1, c2 - -# -# Definitions for connections based on sockets -# - -class SocketListener(object): - ''' - Representation of a socket which is bound to an address and listening - ''' - def __init__(self, address, family, backlog=1): - self._socket = socket.socket(getattr(socket, family)) - try: - # SO_REUSEADDR has different semantics on Windows (issue #2550). - if os.name == 'posix': - self._socket.setsockopt(socket.SOL_SOCKET, - socket.SO_REUSEADDR, 1) - self._socket.setblocking(True) - self._socket.bind(address) - self._socket.listen(backlog) - self._address = self._socket.getsockname() - except OSError: - self._socket.close() - raise - self._family = family - self._last_accepted = None - - if family == 'AF_UNIX' and not util.is_abstract_socket_namespace(address): - # Linux abstract socket namespaces do not need to be explicitly unlinked - self._unlink = util.Finalize( - self, os.unlink, args=(address,), exitpriority=0 - ) - else: - self._unlink = None - - def accept(self): - s, self._last_accepted = self._socket.accept() - s.setblocking(True) - return Connection(s.detach()) - - def close(self): - try: - self._socket.close() - finally: - unlink = self._unlink - if unlink is not None: - self._unlink = None - unlink() - - -def SocketClient(address): - ''' - Return a connection object connected to the socket given by `address` - ''' - family = address_type(address) - with socket.socket( getattr(socket, family) ) as s: - s.setblocking(True) - s.connect(address) - return Connection(s.detach()) - -# -# Definitions for connections based on named pipes -# - -if sys.platform == 'win32': - - class PipeListener(object): - ''' - Representation of a named pipe - ''' - def __init__(self, address, backlog=None): - self._address = address - self._handle_queue = [self._new_handle(first=True)] - - self._last_accepted = None - util.sub_debug('listener created with address=%r', self._address) - self.close = util.Finalize( - self, PipeListener._finalize_pipe_listener, - args=(self._handle_queue, self._address), exitpriority=0 - ) - - def _new_handle(self, first=False): - flags = _winapi.PIPE_ACCESS_DUPLEX | _winapi.FILE_FLAG_OVERLAPPED - if first: - flags |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE - return _winapi.CreateNamedPipe( - self._address, flags, - _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE | - _winapi.PIPE_WAIT, - _winapi.PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, - _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL - ) - - def accept(self): - self._handle_queue.append(self._new_handle()) - handle = self._handle_queue.pop(0) - try: - ov = _winapi.ConnectNamedPipe(handle, overlapped=True) - except OSError as e: - if e.winerror != _winapi.ERROR_NO_DATA: - raise - # ERROR_NO_DATA can occur if a client has already connected, - # written data and then disconnected -- see Issue 14725. - else: - try: - res = _winapi.WaitForMultipleObjects( - [ov.event], False, INFINITE) - except: - ov.cancel() - _winapi.CloseHandle(handle) - raise - finally: - _, err = ov.GetOverlappedResult(True) - assert err == 0 - return PipeConnection(handle) - - @staticmethod - def _finalize_pipe_listener(queue, address): - util.sub_debug('closing listener with address=%r', address) - for handle in queue: - _winapi.CloseHandle(handle) - - def PipeClient(address): - ''' - Return a connection object connected to the pipe given by `address` - ''' - t = _init_timeout() - while 1: - try: - _winapi.WaitNamedPipe(address, 1000) - h = _winapi.CreateFile( - address, _winapi.GENERIC_READ | _winapi.GENERIC_WRITE, - 0, _winapi.NULL, _winapi.OPEN_EXISTING, - _winapi.FILE_FLAG_OVERLAPPED, _winapi.NULL - ) - except OSError as e: - if e.winerror not in (_winapi.ERROR_SEM_TIMEOUT, - _winapi.ERROR_PIPE_BUSY) or _check_timeout(t): - raise - else: - break - else: - raise - - _winapi.SetNamedPipeHandleState( - h, _winapi.PIPE_READMODE_MESSAGE, None, None - ) - return PipeConnection(h) - -# -# Authentication stuff -# - -MESSAGE_LENGTH = 40 # MUST be > 20 - -_CHALLENGE = b'#CHALLENGE#' -_WELCOME = b'#WELCOME#' -_FAILURE = b'#FAILURE#' - -# multiprocessing.connection Authentication Handshake Protocol Description -# (as documented for reference after reading the existing code) -# ============================================================================= -# -# On Windows: native pipes with "overlapped IO" are used to send the bytes, -# instead of the length prefix SIZE scheme described below. (ie: the OS deals -# with message sizes for us) -# -# Protocol error behaviors: -# -# On POSIX, any failure to receive the length prefix into SIZE, for SIZE greater -# than the requested maxsize to receive, or receiving fewer than SIZE bytes -# results in the connection being closed and auth to fail. -# -# On Windows, receiving too few bytes is never a low level _recv_bytes read -# error, receiving too many will trigger an error only if receive maxsize -# value was larger than 128 OR the if the data arrived in smaller pieces. -# -# Serving side Client side -# ------------------------------ --------------------------------------- -# 0. Open a connection on the pipe. -# 1. Accept connection. -# 2. Random 20+ bytes -> MESSAGE -# Modern servers always send -# more than 20 bytes and include -# a {digest} prefix on it with -# their preferred HMAC digest. -# Legacy ones send ==20 bytes. -# 3. send 4 byte length (net order) -# prefix followed by: -# b'#CHALLENGE#' + MESSAGE -# 4. Receive 4 bytes, parse as network byte -# order integer. If it is -1, receive an -# additional 8 bytes, parse that as network -# byte order. The result is the length of -# the data that follows -> SIZE. -# 5. Receive min(SIZE, 256) bytes -> M1 -# 6. Assert that M1 starts with: -# b'#CHALLENGE#' -# 7. Strip that prefix from M1 into -> M2 -# 7.1. Parse M2: if it is exactly 20 bytes in -# length this indicates a legacy server -# supporting only HMAC-MD5. Otherwise the -# 7.2. preferred digest is looked up from an -# expected "{digest}" prefix on M2. No prefix -# or unsupported digest? <- AuthenticationError -# 7.3. Put divined algorithm name in -> D_NAME -# 8. Compute HMAC-D_NAME of AUTHKEY, M2 -> C_DIGEST -# 9. Send 4 byte length prefix (net order) -# followed by C_DIGEST bytes. -# 10. Receive 4 or 4+8 byte length -# prefix (#4 dance) -> SIZE. -# 11. Receive min(SIZE, 256) -> C_D. -# 11.1. Parse C_D: legacy servers -# accept it as is, "md5" -> D_NAME -# 11.2. modern servers check the length -# of C_D, IF it is 16 bytes? -# 11.2.1. "md5" -> D_NAME -# and skip to step 12. -# 11.3. longer? expect and parse a "{digest}" -# prefix into -> D_NAME. -# Strip the prefix and store remaining -# bytes in -> C_D. -# 11.4. Don't like D_NAME? <- AuthenticationError -# 12. Compute HMAC-D_NAME of AUTHKEY, -# MESSAGE into -> M_DIGEST. -# 13. Compare M_DIGEST == C_D: -# 14a: Match? Send length prefix & -# b'#WELCOME#' -# <- RETURN -# 14b: Mismatch? Send len prefix & -# b'#FAILURE#' -# <- CLOSE & AuthenticationError -# 15. Receive 4 or 4+8 byte length prefix (net -# order) again as in #4 into -> SIZE. -# 16. Receive min(SIZE, 256) bytes -> M3. -# 17. Compare M3 == b'#WELCOME#': -# 17a. Match? <- RETURN -# 17b. Mismatch? <- CLOSE & AuthenticationError -# -# If this RETURNed, the connection remains open: it has been authenticated. -# -# Length prefixes are used consistently. Even on the legacy protocol, this -# was good fortune and allowed us to evolve the protocol by using the length -# of the opening challenge or length of the returned digest as a signal as -# to which protocol the other end supports. - -_ALLOWED_DIGESTS = frozenset( - {b'md5', b'sha256', b'sha384', b'sha3_256', b'sha3_384'}) -_MAX_DIGEST_LEN = max(len(_) for _ in _ALLOWED_DIGESTS) - -# Old hmac-md5 only server versions from Python <=3.11 sent a message of this -# length. It happens to not match the length of any supported digest so we can -# use a message of this length to indicate that we should work in backwards -# compatible md5-only mode without a {digest_name} prefix on our response. -_MD5ONLY_MESSAGE_LENGTH = 20 -_MD5_DIGEST_LEN = 16 -_LEGACY_LENGTHS = (_MD5ONLY_MESSAGE_LENGTH, _MD5_DIGEST_LEN) - - -def _get_digest_name_and_payload(message): # type: (bytes) -> tuple[str, bytes] - """Returns a digest name and the payload for a response hash. - - If a legacy protocol is detected based on the message length - or contents the digest name returned will be empty to indicate - legacy mode where MD5 and no digest prefix should be sent. - """ - # modern message format: b"{digest}payload" longer than 20 bytes - # legacy message format: 16 or 20 byte b"payload" - if len(message) in _LEGACY_LENGTHS: - # Either this was a legacy server challenge, or we're processing - # a reply from a legacy client that sent an unprefixed 16-byte - # HMAC-MD5 response. All messages using the modern protocol will - # be longer than either of these lengths. - return '', message - if (message.startswith(b'{') and - (curly := message.find(b'}', 1, _MAX_DIGEST_LEN+2)) > 0): - digest = message[1:curly] - if digest in _ALLOWED_DIGESTS: - payload = message[curly+1:] - return digest.decode('ascii'), payload - raise AuthenticationError( - 'unsupported message length, missing digest prefix, ' - f'or unsupported digest: {message=}') - - -def _create_response(authkey, message): - """Create a MAC based on authkey and message - - The MAC algorithm defaults to HMAC-MD5, unless MD5 is not available or - the message has a '{digest_name}' prefix. For legacy HMAC-MD5, the response - is the raw MAC, otherwise the response is prefixed with '{digest_name}', - e.g. b'{sha256}abcdefg...' - - Note: The MAC protects the entire message including the digest_name prefix. - """ - import hmac - digest_name = _get_digest_name_and_payload(message)[0] - # The MAC protects the entire message: digest header and payload. - if not digest_name: - # Legacy server without a {digest} prefix on message. - # Generate a legacy non-prefixed HMAC-MD5 reply. - try: - return hmac.new(authkey, message, 'md5').digest() - except ValueError: - # HMAC-MD5 is not available (FIPS mode?), fall back to - # HMAC-SHA2-256 modern protocol. The legacy server probably - # doesn't support it and will reject us anyways. :shrug: - digest_name = 'sha256' - # Modern protocol, indicate the digest used in the reply. - response = hmac.new(authkey, message, digest_name).digest() - return b'{%s}%s' % (digest_name.encode('ascii'), response) - - -def _verify_challenge(authkey, message, response): - """Verify MAC challenge - - If our message did not include a digest_name prefix, the client is allowed - to select a stronger digest_name from _ALLOWED_DIGESTS. - - In case our message is prefixed, a client cannot downgrade to a weaker - algorithm, because the MAC is calculated over the entire message - including the '{digest_name}' prefix. - """ - import hmac - response_digest, response_mac = _get_digest_name_and_payload(response) - response_digest = response_digest or 'md5' - try: - expected = hmac.new(authkey, message, response_digest).digest() - except ValueError: - raise AuthenticationError(f'{response_digest=} unsupported') - if len(expected) != len(response_mac): - raise AuthenticationError( - f'expected {response_digest!r} of length {len(expected)} ' - f'got {len(response_mac)}') - if not hmac.compare_digest(expected, response_mac): - raise AuthenticationError('digest received was wrong') - - -def deliver_challenge(connection, authkey: bytes, digest_name='sha256'): - if not isinstance(authkey, bytes): - raise ValueError( - "Authkey must be bytes, not {0!s}".format(type(authkey))) - assert MESSAGE_LENGTH > _MD5ONLY_MESSAGE_LENGTH, "protocol constraint" - message = os.urandom(MESSAGE_LENGTH) - message = b'{%s}%s' % (digest_name.encode('ascii'), message) - # Even when sending a challenge to a legacy client that does not support - # digest prefixes, they'll take the entire thing as a challenge and - # respond to it with a raw HMAC-MD5. - connection.send_bytes(_CHALLENGE + message) - response = connection.recv_bytes(256) # reject large message - try: - _verify_challenge(authkey, message, response) - except AuthenticationError: - connection.send_bytes(_FAILURE) - raise - else: - connection.send_bytes(_WELCOME) - - -def answer_challenge(connection, authkey: bytes): - if not isinstance(authkey, bytes): - raise ValueError( - "Authkey must be bytes, not {0!s}".format(type(authkey))) - message = connection.recv_bytes(256) # reject large message - if not message.startswith(_CHALLENGE): - raise AuthenticationError( - f'Protocol error, expected challenge: {message=}') - message = message[len(_CHALLENGE):] - if len(message) < _MD5ONLY_MESSAGE_LENGTH: - raise AuthenticationError(f'challenge too short: {len(message)} bytes') - digest = _create_response(authkey, message) - connection.send_bytes(digest) - response = connection.recv_bytes(256) # reject large message - if response != _WELCOME: - raise AuthenticationError('digest sent was rejected') - -# -# Support for using xmlrpclib for serialization -# - -class ConnectionWrapper(object): - def __init__(self, conn, dumps, loads): - self._conn = conn - self._dumps = dumps - self._loads = loads - for attr in ('fileno', 'close', 'poll', 'recv_bytes', 'send_bytes'): - obj = getattr(conn, attr) - setattr(self, attr, obj) - def send(self, obj): - s = self._dumps(obj) - self._conn.send_bytes(s) - def recv(self): - s = self._conn.recv_bytes() - return self._loads(s) - -def _xml_dumps(obj): - return xmlrpclib.dumps((obj,), None, None, None, 1).encode('utf-8') - -def _xml_loads(s): - (obj,), method = xmlrpclib.loads(s.decode('utf-8')) - return obj - -class XmlListener(Listener): - def accept(self): - global xmlrpclib - import xmlrpc.client as xmlrpclib - obj = Listener.accept(self) - return ConnectionWrapper(obj, _xml_dumps, _xml_loads) - -def XmlClient(*args, **kwds): - global xmlrpclib - import xmlrpc.client as xmlrpclib - return ConnectionWrapper(Client(*args, **kwds), _xml_dumps, _xml_loads) - -# -# Wait -# - -if sys.platform == 'win32': - - def _exhaustive_wait(handles, timeout): - # Return ALL handles which are currently signalled. (Only - # returning the first signalled might create starvation issues.) - L = list(handles) - ready = [] - # Windows limits WaitForMultipleObjects at 64 handles, and we use a - # few for synchronisation, so we switch to batched waits at 60. - if len(L) > 60: - try: - res = _winapi.BatchedWaitForMultipleObjects(L, False, timeout) - except TimeoutError: - return [] - ready.extend(L[i] for i in res) - if res: - L = [h for i, h in enumerate(L) if i > res[0] & i not in res] - timeout = 0 - while L: - short_L = L[:60] if len(L) > 60 else L - res = _winapi.WaitForMultipleObjects(short_L, False, timeout) - if res == WAIT_TIMEOUT: - break - elif WAIT_OBJECT_0 <= res < WAIT_OBJECT_0 + len(L): - res -= WAIT_OBJECT_0 - elif WAIT_ABANDONED_0 <= res < WAIT_ABANDONED_0 + len(L): - res -= WAIT_ABANDONED_0 - else: - raise RuntimeError('Should not get here') - ready.append(L[res]) - L = L[res+1:] - timeout = 0 - return ready - - _ready_errors = {_winapi.ERROR_BROKEN_PIPE, _winapi.ERROR_NETNAME_DELETED} - - def wait(object_list, timeout=None): - ''' - Wait till an object in object_list is ready/readable. - - Returns list of those objects in object_list which are ready/readable. - ''' - if timeout is None: - timeout = INFINITE - elif timeout < 0: - timeout = 0 - else: - timeout = int(timeout * 1000 + 0.5) - - object_list = list(object_list) - waithandle_to_obj = {} - ov_list = [] - ready_objects = set() - ready_handles = set() - - try: - for o in object_list: - try: - fileno = getattr(o, 'fileno') - except AttributeError: - waithandle_to_obj[o.__index__()] = o - else: - # start an overlapped read of length zero - try: - ov, err = _winapi.ReadFile(fileno(), 0, True) - except OSError as e: - ov, err = None, e.winerror - if err not in _ready_errors: - raise - if err == _winapi.ERROR_IO_PENDING: - ov_list.append(ov) - waithandle_to_obj[ov.event] = o - else: - # If o.fileno() is an overlapped pipe handle and - # err == 0 then there is a zero length message - # in the pipe, but it HAS NOT been consumed... - if ov and sys.getwindowsversion()[:2] >= (6, 2): - # ... except on Windows 8 and later, where - # the message HAS been consumed. - try: - _, err = ov.GetOverlappedResult(False) - except OSError as e: - err = e.winerror - if not err and hasattr(o, '_got_empty_message'): - o._got_empty_message = True - ready_objects.add(o) - timeout = 0 - - ready_handles = _exhaustive_wait(waithandle_to_obj.keys(), timeout) - finally: - # request that overlapped reads stop - for ov in ov_list: - ov.cancel() - - # wait for all overlapped reads to stop - for ov in ov_list: - try: - _, err = ov.GetOverlappedResult(True) - except OSError as e: - err = e.winerror - if err not in _ready_errors: - raise - if err != _winapi.ERROR_OPERATION_ABORTED: - o = waithandle_to_obj[ov.event] - ready_objects.add(o) - if err == 0: - # If o.fileno() is an overlapped pipe handle then - # a zero length message HAS been consumed. - if hasattr(o, '_got_empty_message'): - o._got_empty_message = True - - ready_objects.update(waithandle_to_obj[h] for h in ready_handles) - return [o for o in object_list if o in ready_objects] - -else: - - import selectors - - # poll/select have the advantage of not requiring any extra file - # descriptor, contrarily to epoll/kqueue (also, they require a single - # syscall). - if hasattr(selectors, 'PollSelector'): - _WaitSelector = selectors.PollSelector - else: - _WaitSelector = selectors.SelectSelector - - def wait(object_list, timeout=None): - ''' - Wait till an object in object_list is ready/readable. - - Returns list of those objects in object_list which are ready/readable. - ''' - with _WaitSelector() as selector: - for obj in object_list: - selector.register(obj, selectors.EVENT_READ) - - if timeout is not None: - deadline = time.monotonic() + timeout - - while True: - ready = selector.select(timeout) - if ready: - return [key.fileobj for (key, events) in ready] - else: - if timeout is not None: - timeout = deadline - time.monotonic() - if timeout < 0: - return ready - -# -# Make connection and socket objects shareable if possible -# - -if sys.platform == 'win32': - def reduce_connection(conn): - handle = conn.fileno() - with socket.fromfd(handle, socket.AF_INET, socket.SOCK_STREAM) as s: - from . import resource_sharer - ds = resource_sharer.DupSocket(s) - return rebuild_connection, (ds, conn.readable, conn.writable) - def rebuild_connection(ds, readable, writable): - sock = ds.detach() - return Connection(sock.detach(), readable, writable) - reduction.register(Connection, reduce_connection) - - def reduce_pipe_connection(conn): - access = ((_winapi.FILE_GENERIC_READ if conn.readable else 0) | - (_winapi.FILE_GENERIC_WRITE if conn.writable else 0)) - dh = reduction.DupHandle(conn.fileno(), access) - return rebuild_pipe_connection, (dh, conn.readable, conn.writable) - def rebuild_pipe_connection(dh, readable, writable): - handle = dh.detach() - return PipeConnection(handle, readable, writable) - reduction.register(PipeConnection, reduce_pipe_connection) - -else: - def reduce_connection(conn): - df = reduction.DupFd(conn.fileno()) - return rebuild_connection, (df, conn.readable, conn.writable) - def rebuild_connection(df, readable, writable): - fd = df.detach() - return Connection(fd, readable, writable) - reduction.register(Connection, reduce_connection) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/context.py b/Python314_4_x86_Template/Lib/multiprocessing/context.py deleted file mode 100644 index 5fa6d7e48..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/context.py +++ /dev/null @@ -1,383 +0,0 @@ -import os -import sys -import threading - -from . import process -from . import reduction - -__all__ = () - -# -# Exceptions -# - -class ProcessError(Exception): - pass - -class BufferTooShort(ProcessError): - pass - -class TimeoutError(ProcessError): - pass - -class AuthenticationError(ProcessError): - pass - -# -# Base type for contexts. Bound methods of an instance of this type are included in __all__ of __init__.py -# - -class BaseContext(object): - - ProcessError = ProcessError - BufferTooShort = BufferTooShort - TimeoutError = TimeoutError - AuthenticationError = AuthenticationError - - current_process = staticmethod(process.current_process) - parent_process = staticmethod(process.parent_process) - active_children = staticmethod(process.active_children) - - def cpu_count(self): - '''Returns the number of CPUs in the system''' - num = os.cpu_count() - if num is None: - raise NotImplementedError('cannot determine number of cpus') - else: - return num - - def Manager(self): - '''Returns a manager associated with a running server process - - The managers methods such as `Lock()`, `Condition()` and `Queue()` - can be used to create shared objects. - ''' - from .managers import SyncManager - m = SyncManager(ctx=self.get_context()) - m.start() - return m - - def Pipe(self, duplex=True): - '''Returns two connection object connected by a pipe''' - from .connection import Pipe - return Pipe(duplex) - - def Lock(self): - '''Returns a non-recursive lock object''' - from .synchronize import Lock - return Lock(ctx=self.get_context()) - - def RLock(self): - '''Returns a recursive lock object''' - from .synchronize import RLock - return RLock(ctx=self.get_context()) - - def Condition(self, lock=None): - '''Returns a condition object''' - from .synchronize import Condition - return Condition(lock, ctx=self.get_context()) - - def Semaphore(self, value=1): - '''Returns a semaphore object''' - from .synchronize import Semaphore - return Semaphore(value, ctx=self.get_context()) - - def BoundedSemaphore(self, value=1): - '''Returns a bounded semaphore object''' - from .synchronize import BoundedSemaphore - return BoundedSemaphore(value, ctx=self.get_context()) - - def Event(self): - '''Returns an event object''' - from .synchronize import Event - return Event(ctx=self.get_context()) - - def Barrier(self, parties, action=None, timeout=None): - '''Returns a barrier object''' - from .synchronize import Barrier - return Barrier(parties, action, timeout, ctx=self.get_context()) - - def Queue(self, maxsize=0): - '''Returns a queue object''' - from .queues import Queue - return Queue(maxsize, ctx=self.get_context()) - - def JoinableQueue(self, maxsize=0): - '''Returns a queue object''' - from .queues import JoinableQueue - return JoinableQueue(maxsize, ctx=self.get_context()) - - def SimpleQueue(self): - '''Returns a queue object''' - from .queues import SimpleQueue - return SimpleQueue(ctx=self.get_context()) - - def Pool(self, processes=None, initializer=None, initargs=(), - maxtasksperchild=None): - '''Returns a process pool object''' - from .pool import Pool - return Pool(processes, initializer, initargs, maxtasksperchild, - context=self.get_context()) - - def RawValue(self, typecode_or_type, *args): - '''Returns a shared object''' - from .sharedctypes import RawValue - return RawValue(typecode_or_type, *args) - - def RawArray(self, typecode_or_type, size_or_initializer): - '''Returns a shared array''' - from .sharedctypes import RawArray - return RawArray(typecode_or_type, size_or_initializer) - - def Value(self, typecode_or_type, *args, lock=True): - '''Returns a synchronized shared object''' - from .sharedctypes import Value - return Value(typecode_or_type, *args, lock=lock, - ctx=self.get_context()) - - def Array(self, typecode_or_type, size_or_initializer, *, lock=True): - '''Returns a synchronized shared array''' - from .sharedctypes import Array - return Array(typecode_or_type, size_or_initializer, lock=lock, - ctx=self.get_context()) - - def freeze_support(self): - '''Check whether this is a fake forked process in a frozen executable. - If so then run code specified by commandline and exit. - ''' - # gh-140814: allow_none=True avoids locking in the default start - # method, which would cause a later set_start_method() to fail. - # None is safe to pass through: spawn.freeze_support() - # independently detects whether this process is a spawned - # child, so the start method check here is only an optimization. - if (getattr(sys, 'frozen', False) - and self.get_start_method(allow_none=True) in ('spawn', None)): - from .spawn import freeze_support - freeze_support() - - def get_logger(self): - '''Return package logger -- if it does not already exist then - it is created. - ''' - from .util import get_logger - return get_logger() - - def log_to_stderr(self, level=None): - '''Turn on logging and add a handler which prints to stderr''' - from .util import log_to_stderr - return log_to_stderr(level) - - def allow_connection_pickling(self): - '''Install support for sending connections and sockets - between processes - ''' - # This is undocumented. In previous versions of multiprocessing - # its only effect was to make socket objects inheritable on Windows. - from . import connection # noqa: F401 - - def set_executable(self, executable): - '''Sets the path to a python.exe or pythonw.exe binary used to run - child processes instead of sys.executable when using the 'spawn' - start method. Useful for people embedding Python. - ''' - from .spawn import set_executable - set_executable(executable) - - def set_forkserver_preload(self, module_names): - '''Set list of module names to try to load in forkserver process. - This is really just a hint. - ''' - from .forkserver import set_forkserver_preload - set_forkserver_preload(module_names) - - def get_context(self, method=None): - if method is None: - return self - try: - ctx = _concrete_contexts[method] - except KeyError: - raise ValueError('cannot find context for %r' % method) from None - ctx._check_available() - return ctx - - def get_start_method(self, allow_none=False): - return self._name - - def set_start_method(self, method, force=False): - raise ValueError('cannot set start method of concrete context') - - @property - def reducer(self): - '''Controls how objects will be reduced to a form that can be - shared with other processes.''' - return globals().get('reduction') - - @reducer.setter - def reducer(self, reduction): - globals()['reduction'] = reduction - - def _check_available(self): - pass - -# -# Type of default context -- underlying context can be set at most once -# - -class Process(process.BaseProcess): - _start_method = None - @staticmethod - def _Popen(process_obj): - return _default_context.get_context().Process._Popen(process_obj) - - @staticmethod - def _after_fork(): - return _default_context.get_context().Process._after_fork() - -class DefaultContext(BaseContext): - Process = Process - - def __init__(self, context): - self._default_context = context - self._actual_context = None - - def get_context(self, method=None): - if method is None: - if self._actual_context is None: - self._actual_context = self._default_context - return self._actual_context - else: - return super().get_context(method) - - def set_start_method(self, method, force=False): - if self._actual_context is not None and not force: - raise RuntimeError('context has already been set') - if method is None and force: - self._actual_context = None - return - self._actual_context = self.get_context(method) - - def get_start_method(self, allow_none=False): - if self._actual_context is None: - if allow_none: - return None - self._actual_context = self._default_context - return self._actual_context._name - - def get_all_start_methods(self): - """Returns a list of the supported start methods, default first.""" - default = self._default_context.get_start_method() - start_method_names = [default] - start_method_names.extend( - name for name in _concrete_contexts if name != default - ) - return start_method_names - - -# -# Context types for fixed start method -# - -if sys.platform != 'win32': - - class ForkProcess(process.BaseProcess): - _start_method = 'fork' - @staticmethod - def _Popen(process_obj): - from .popen_fork import Popen - return Popen(process_obj) - - class SpawnProcess(process.BaseProcess): - _start_method = 'spawn' - @staticmethod - def _Popen(process_obj): - from .popen_spawn_posix import Popen - return Popen(process_obj) - - @staticmethod - def _after_fork(): - # process is spawned, nothing to do - pass - - class ForkServerProcess(process.BaseProcess): - _start_method = 'forkserver' - @staticmethod - def _Popen(process_obj): - from .popen_forkserver import Popen - return Popen(process_obj) - - class ForkContext(BaseContext): - _name = 'fork' - Process = ForkProcess - - class SpawnContext(BaseContext): - _name = 'spawn' - Process = SpawnProcess - - class ForkServerContext(BaseContext): - _name = 'forkserver' - Process = ForkServerProcess - def _check_available(self): - if not reduction.HAVE_SEND_HANDLE: - raise ValueError('forkserver start method not available') - - _concrete_contexts = { - 'fork': ForkContext(), - 'spawn': SpawnContext(), - 'forkserver': ForkServerContext(), - } - # bpo-33725: running arbitrary code after fork() is no longer reliable - # on macOS since macOS 10.14 (Mojave). Use spawn by default instead. - # gh-84559: We changed everyones default to a thread safeish one in 3.14. - if reduction.HAVE_SEND_HANDLE and sys.platform != 'darwin': - _default_context = DefaultContext(_concrete_contexts['forkserver']) - else: - _default_context = DefaultContext(_concrete_contexts['spawn']) - -else: # Windows - - class SpawnProcess(process.BaseProcess): - _start_method = 'spawn' - @staticmethod - def _Popen(process_obj): - from .popen_spawn_win32 import Popen - return Popen(process_obj) - - @staticmethod - def _after_fork(): - # process is spawned, nothing to do - pass - - class SpawnContext(BaseContext): - _name = 'spawn' - Process = SpawnProcess - - _concrete_contexts = { - 'spawn': SpawnContext(), - } - _default_context = DefaultContext(_concrete_contexts['spawn']) - -# -# Force the start method -# - -def _force_start_method(method): - _default_context._actual_context = _concrete_contexts[method] - -# -# Check that the current thread is spawning a child process -# - -_tls = threading.local() - -def get_spawning_popen(): - return getattr(_tls, 'spawning_popen', None) - -def set_spawning_popen(popen): - _tls.spawning_popen = popen - -def assert_spawning(obj): - if get_spawning_popen() is None: - raise RuntimeError( - '%s objects should only be shared between processes' - ' through inheritance' % type(obj).__name__ - ) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/dummy/__init__.py b/Python314_4_x86_Template/Lib/multiprocessing/dummy/__init__.py deleted file mode 100644 index 7dc5d1c8d..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/dummy/__init__.py +++ /dev/null @@ -1,126 +0,0 @@ -# -# Support for the API of the multiprocessing package using threads -# -# multiprocessing/dummy/__init__.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = [ - 'Process', 'current_process', 'active_children', 'freeze_support', - 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', - 'Event', 'Barrier', 'Queue', 'Manager', 'Pipe', 'Pool', 'JoinableQueue' - ] - -# -# Imports -# - -import threading -import sys -import weakref -import array - -from .connection import Pipe -from threading import Lock, RLock, Semaphore, BoundedSemaphore -from threading import Event, Condition, Barrier -from queue import Queue - -# -# -# - -class DummyProcess(threading.Thread): - - def __init__(self, group=None, target=None, name=None, args=(), kwargs=None): - threading.Thread.__init__(self, group, target, name, args, kwargs) - self._pid = None - self._children = weakref.WeakKeyDictionary() - self._start_called = False - self._parent = current_process() - - def start(self): - if self._parent is not current_process(): - raise RuntimeError( - "Parent is {0!r} but current_process is {1!r}".format( - self._parent, current_process())) - self._start_called = True - if hasattr(self._parent, '_children'): - self._parent._children[self] = None - threading.Thread.start(self) - - @property - def exitcode(self): - if self._start_called and not self.is_alive(): - return 0 - else: - return None - -# -# -# - -Process = DummyProcess -current_process = threading.current_thread -current_process()._children = weakref.WeakKeyDictionary() - -def active_children(): - children = current_process()._children - for p in list(children): - if not p.is_alive(): - children.pop(p, None) - return list(children) - -def freeze_support(): - pass - -# -# -# - -class Namespace(object): - def __init__(self, /, **kwds): - self.__dict__.update(kwds) - def __repr__(self): - items = list(self.__dict__.items()) - temp = [] - for name, value in items: - if not name.startswith('_'): - temp.append('%s=%r' % (name, value)) - temp.sort() - return '%s(%s)' % (self.__class__.__name__, ', '.join(temp)) - -dict = dict -list = list - -def Array(typecode, sequence, lock=True): - return array.array(typecode, sequence) - -class Value(object): - def __init__(self, typecode, value, lock=True): - self._typecode = typecode - self._value = value - - @property - def value(self): - return self._value - - @value.setter - def value(self, value): - self._value = value - - def __repr__(self): - return '<%s(%r, %r)>'%(type(self).__name__,self._typecode,self._value) - -def Manager(): - return sys.modules[__name__] - -def shutdown(): - pass - -def Pool(processes=None, initializer=None, initargs=()): - from ..pool import ThreadPool - return ThreadPool(processes, initializer, initargs) - -JoinableQueue = Queue diff --git a/Python314_4_x86_Template/Lib/multiprocessing/dummy/connection.py b/Python314_4_x86_Template/Lib/multiprocessing/dummy/connection.py deleted file mode 100644 index f0ce320fc..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/dummy/connection.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# Analogue of `multiprocessing.connection` which uses queues instead of sockets -# -# multiprocessing/dummy/connection.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = [ 'Client', 'Listener', 'Pipe' ] - -from queue import Queue - - -families = [None] - - -class Listener(object): - - def __init__(self, address=None, family=None, backlog=1): - self._backlog_queue = Queue(backlog) - - def accept(self): - return Connection(*self._backlog_queue.get()) - - def close(self): - self._backlog_queue = None - - @property - def address(self): - return self._backlog_queue - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, exc_tb): - self.close() - - -def Client(address): - _in, _out = Queue(), Queue() - address.put((_out, _in)) - return Connection(_in, _out) - - -def Pipe(duplex=True): - a, b = Queue(), Queue() - return Connection(a, b), Connection(b, a) - - -class Connection(object): - - def __init__(self, _in, _out): - self._out = _out - self._in = _in - self.send = self.send_bytes = _out.put - self.recv = self.recv_bytes = _in.get - - def poll(self, timeout=0.0): - if self._in.qsize() > 0: - return True - if timeout <= 0.0: - return False - with self._in.not_empty: - self._in.not_empty.wait(timeout) - return self._in.qsize() > 0 - - def close(self): - pass - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, exc_tb): - self.close() diff --git a/Python314_4_x86_Template/Lib/multiprocessing/forkserver.py b/Python314_4_x86_Template/Lib/multiprocessing/forkserver.py deleted file mode 100644 index e431b3f12..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/forkserver.py +++ /dev/null @@ -1,429 +0,0 @@ -import atexit -import errno -import os -import selectors -import signal -import socket -import struct -import sys -import threading -import warnings - -from . import AuthenticationError -from . import connection -from . import process -from .context import reduction -from . import resource_tracker -from . import spawn -from . import util - -__all__ = ['ensure_running', 'get_inherited_fds', 'connect_to_new_process', - 'set_forkserver_preload'] - -# -# -# - -MAXFDS_TO_SEND = 256 -SIGNED_STRUCT = struct.Struct('q') # large enough for pid_t -_AUTHKEY_LEN = 32 # <= PIPEBUF so it fits a single write to an empty pipe. - -# -# Forkserver class -# - -class ForkServer(object): - - def __init__(self): - self._forkserver_authkey = None - self._forkserver_address = None - self._forkserver_alive_fd = None - self._forkserver_pid = None - self._inherited_fds = None - self._lock = threading.Lock() - self._preload_modules = ['__main__'] - - def _stop(self): - # Method used by unit tests to stop the server - with self._lock: - self._stop_unlocked() - - def _stop_unlocked(self): - if self._forkserver_pid is None: - return - - # close the "alive" file descriptor asks the server to stop - os.close(self._forkserver_alive_fd) - self._forkserver_alive_fd = None - - os.waitpid(self._forkserver_pid, 0) - self._forkserver_pid = None - - if not util.is_abstract_socket_namespace(self._forkserver_address): - os.unlink(self._forkserver_address) - self._forkserver_address = None - self._forkserver_authkey = None - - def set_forkserver_preload(self, modules_names): - '''Set list of module names to try to load in forkserver process.''' - if not all(type(mod) is str for mod in modules_names): - raise TypeError('module_names must be a list of strings') - self._preload_modules = modules_names - - def get_inherited_fds(self): - '''Return list of fds inherited from parent process. - - This returns None if the current process was not started by fork - server. - ''' - return self._inherited_fds - - def connect_to_new_process(self, fds): - '''Request forkserver to create a child process. - - Returns a pair of fds (status_r, data_w). The calling process can read - the child process's pid and (eventually) its returncode from status_r. - The calling process should write to data_w the pickled preparation and - process data. - ''' - self.ensure_running() - assert self._forkserver_authkey - if len(fds) + 4 >= MAXFDS_TO_SEND: - raise ValueError('too many fds') - with socket.socket(socket.AF_UNIX) as client: - client.connect(self._forkserver_address) - parent_r, child_w = os.pipe() - child_r, parent_w = os.pipe() - allfds = [child_r, child_w, self._forkserver_alive_fd, - resource_tracker.getfd()] - allfds += fds - try: - client.setblocking(True) - wrapped_client = connection.Connection(client.fileno()) - # The other side of this exchange happens in the child as - # implemented in main(). - try: - connection.answer_challenge( - wrapped_client, self._forkserver_authkey) - connection.deliver_challenge( - wrapped_client, self._forkserver_authkey) - finally: - wrapped_client._detach() - del wrapped_client - reduction.sendfds(client, allfds) - return parent_r, parent_w - except: - os.close(parent_r) - os.close(parent_w) - raise - finally: - os.close(child_r) - os.close(child_w) - - def ensure_running(self): - '''Make sure that a fork server is running. - - This can be called from any process. Note that usually a child - process will just reuse the forkserver started by its parent, so - ensure_running() will do nothing. - ''' - with self._lock: - resource_tracker.ensure_running() - if self._forkserver_pid is not None: - # forkserver was launched before, is it still running? - pid, status = os.waitpid(self._forkserver_pid, os.WNOHANG) - if not pid: - # still alive - return - # dead, launch it again - os.close(self._forkserver_alive_fd) - self._forkserver_authkey = None - self._forkserver_address = None - self._forkserver_alive_fd = None - self._forkserver_pid = None - - # gh-144503: sys_argv is passed as real argv elements after the - # ``-c cmd`` rather than repr'd into main_kws so that a large - # parent sys.argv cannot push the single ``-c`` command string - # over the OS per-argument length limit (MAX_ARG_STRLEN on Linux). - # The child sees them as sys.argv[1:]. - cmd = ('import sys; ' - 'from multiprocessing.forkserver import main; ' - 'main(%d, %d, %r, sys_argv=sys.argv[1:], **%r)') - - main_kws = {} - sys_argv = None - if self._preload_modules: - data = spawn.get_preparation_data('ignore') - if 'sys_path' in data: - main_kws['sys_path'] = data['sys_path'] - if 'init_main_from_path' in data: - main_kws['main_path'] = data['init_main_from_path'] - if 'sys_argv' in data: - sys_argv = data['sys_argv'] - - with socket.socket(socket.AF_UNIX) as listener: - address = connection.arbitrary_address('AF_UNIX') - listener.bind(address) - if not util.is_abstract_socket_namespace(address): - os.chmod(address, 0o600) - listener.listen() - - # all client processes own the write end of the "alive" pipe; - # when they all terminate the read end becomes ready. - alive_r, alive_w = os.pipe() - # A short lived pipe to initialize the forkserver authkey. - authkey_r, authkey_w = os.pipe() - try: - fds_to_pass = [listener.fileno(), alive_r, authkey_r] - main_kws['authkey_r'] = authkey_r - cmd %= (listener.fileno(), alive_r, self._preload_modules, - main_kws) - exe = spawn.get_executable() - args = [exe] + util._args_from_interpreter_flags() - args += ['-c', cmd] - if sys_argv is not None: - args += sys_argv - pid = util.spawnv_passfds(exe, args, fds_to_pass) - except: - os.close(alive_w) - os.close(authkey_w) - raise - finally: - os.close(alive_r) - os.close(authkey_r) - # Authenticate our control socket to prevent access from - # processes we have not shared this key with. - try: - self._forkserver_authkey = os.urandom(_AUTHKEY_LEN) - os.write(authkey_w, self._forkserver_authkey) - finally: - os.close(authkey_w) - self._forkserver_address = address - self._forkserver_alive_fd = alive_w - self._forkserver_pid = pid - -# -# -# - -def main(listener_fd, alive_r, preload, main_path=None, sys_path=None, - *, sys_argv=None, authkey_r=None): - """Run forkserver.""" - if authkey_r is not None: - try: - authkey = os.read(authkey_r, _AUTHKEY_LEN) - assert len(authkey) == _AUTHKEY_LEN, f'{len(authkey)} < {_AUTHKEY_LEN}' - finally: - os.close(authkey_r) - else: - authkey = b'' - - if preload: - if sys_argv is not None: - sys.argv[:] = sys_argv - if sys_path is not None: - sys.path[:] = sys_path - if '__main__' in preload and main_path is not None: - process.current_process()._inheriting = True - try: - spawn.import_main_path(main_path) - finally: - del process.current_process()._inheriting - for modname in preload: - try: - __import__(modname) - except ImportError: - pass - - # gh-135335: flush stdout/stderr in case any of the preloaded modules - # wrote to them, otherwise children might inherit buffered data - util._flush_std_streams() - - util._close_stdin() - - sig_r, sig_w = os.pipe() - os.set_blocking(sig_r, False) - os.set_blocking(sig_w, False) - - def sigchld_handler(*_unused): - # Dummy signal handler, doesn't do anything - pass - - handlers = { - # unblocking SIGCHLD allows the wakeup fd to notify our event loop - signal.SIGCHLD: sigchld_handler, - # protect the process from ^C - signal.SIGINT: signal.SIG_IGN, - } - old_handlers = {sig: signal.signal(sig, val) - for (sig, val) in handlers.items()} - - # calling os.write() in the Python signal handler is racy - signal.set_wakeup_fd(sig_w) - - # map child pids to client fds - pid_to_fd = {} - - with socket.socket(socket.AF_UNIX, fileno=listener_fd) as listener, \ - selectors.DefaultSelector() as selector: - _forkserver._forkserver_address = listener.getsockname() - - selector.register(listener, selectors.EVENT_READ) - selector.register(alive_r, selectors.EVENT_READ) - selector.register(sig_r, selectors.EVENT_READ) - - while True: - try: - while True: - rfds = [key.fileobj for (key, events) in selector.select()] - if rfds: - break - - if alive_r in rfds: - # EOF because no more client processes left - assert os.read(alive_r, 1) == b'', "Not at EOF?" - raise SystemExit - - if sig_r in rfds: - # Got SIGCHLD - os.read(sig_r, 65536) # exhaust - while True: - # Scan for child processes - try: - pid, sts = os.waitpid(-1, os.WNOHANG) - except ChildProcessError: - break - if pid == 0: - break - child_w = pid_to_fd.pop(pid, None) - if child_w is not None: - returncode = os.waitstatus_to_exitcode(sts) - - # Send exit code to client process - try: - write_signed(child_w, returncode) - except BrokenPipeError: - # client vanished - pass - os.close(child_w) - else: - # This shouldn't happen really - warnings.warn('forkserver: waitpid returned ' - 'unexpected pid %d' % pid) - - if listener in rfds: - # Incoming fork request - with listener.accept()[0] as s: - try: - if authkey: - wrapped_s = connection.Connection(s.fileno()) - # The other side of this exchange happens in - # in connect_to_new_process(). - try: - connection.deliver_challenge( - wrapped_s, authkey) - connection.answer_challenge( - wrapped_s, authkey) - finally: - wrapped_s._detach() - del wrapped_s - # Receive fds from client - fds = reduction.recvfds(s, MAXFDS_TO_SEND + 1) - except (EOFError, BrokenPipeError, AuthenticationError): - s.close() - continue - if len(fds) > MAXFDS_TO_SEND: - raise RuntimeError( - "Too many ({0:n}) fds to send".format( - len(fds))) - child_r, child_w, *fds = fds - s.close() - pid = os.fork() - if pid == 0: - # Child - code = 1 - try: - listener.close() - selector.close() - unused_fds = [alive_r, child_w, sig_r, sig_w] - unused_fds.extend(pid_to_fd.values()) - atexit._clear() - atexit.register(util._exit_function) - code = _serve_one(child_r, fds, - unused_fds, - old_handlers) - except Exception: - sys.excepthook(*sys.exc_info()) - sys.stderr.flush() - finally: - atexit._run_exitfuncs() - os._exit(code) - else: - # Send pid to client process - try: - write_signed(child_w, pid) - except BrokenPipeError: - # client vanished - pass - pid_to_fd[pid] = child_w - os.close(child_r) - for fd in fds: - os.close(fd) - - except OSError as e: - if e.errno != errno.ECONNABORTED: - raise - - -def _serve_one(child_r, fds, unused_fds, handlers): - # close unnecessary stuff and reset signal handlers - signal.set_wakeup_fd(-1) - for sig, val in handlers.items(): - signal.signal(sig, val) - for fd in unused_fds: - os.close(fd) - - (_forkserver._forkserver_alive_fd, - resource_tracker._resource_tracker._fd, - *_forkserver._inherited_fds) = fds - - # Run process object received over pipe - parent_sentinel = os.dup(child_r) - code = spawn._main(child_r, parent_sentinel) - - return code - - -# -# Read and write signed numbers -# - -def read_signed(fd): - data = bytearray(SIGNED_STRUCT.size) - unread = memoryview(data) - while unread: - count = os.readinto(fd, unread) - if count == 0: - raise EOFError('unexpected EOF') - unread = unread[count:] - - return SIGNED_STRUCT.unpack(data)[0] - -def write_signed(fd, n): - msg = SIGNED_STRUCT.pack(n) - while msg: - nbytes = os.write(fd, msg) - if nbytes == 0: - raise RuntimeError('should not get here') - msg = msg[nbytes:] - -# -# -# - -_forkserver = ForkServer() -ensure_running = _forkserver.ensure_running -get_inherited_fds = _forkserver.get_inherited_fds -connect_to_new_process = _forkserver.connect_to_new_process -set_forkserver_preload = _forkserver.set_forkserver_preload diff --git a/Python314_4_x86_Template/Lib/multiprocessing/heap.py b/Python314_4_x86_Template/Lib/multiprocessing/heap.py deleted file mode 100644 index 6217dfe12..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/heap.py +++ /dev/null @@ -1,337 +0,0 @@ -# -# Module which supports allocation of memory from an mmap -# -# multiprocessing/heap.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -import bisect -from collections import defaultdict -import mmap -import os -import sys -import tempfile -import threading - -from .context import reduction, assert_spawning -from . import util - -__all__ = ['BufferWrapper'] - -# -# Inheritable class which wraps an mmap, and from which blocks can be allocated -# - -if sys.platform == 'win32': - - import _winapi - - class Arena(object): - """ - A shared memory area backed by anonymous memory (Windows). - """ - - _rand = tempfile._RandomNameSequence() - - def __init__(self, size): - self.size = size - for i in range(100): - name = 'pym-%d-%s' % (os.getpid(), next(self._rand)) - buf = mmap.mmap(-1, size, tagname=name) - if _winapi.GetLastError() == 0: - break - # We have reopened a preexisting mmap. - buf.close() - else: - raise FileExistsError('Cannot find name for new mmap') - self.name = name - self.buffer = buf - self._state = (self.size, self.name) - - def __getstate__(self): - assert_spawning(self) - return self._state - - def __setstate__(self, state): - self.size, self.name = self._state = state - # Reopen existing mmap - self.buffer = mmap.mmap(-1, self.size, tagname=self.name) - # XXX Temporarily preventing buildbot failures while determining - # XXX the correct long-term fix. See issue 23060 - #assert _winapi.GetLastError() == _winapi.ERROR_ALREADY_EXISTS - -else: - - class Arena(object): - """ - A shared memory area backed by a temporary file (POSIX). - """ - - if sys.platform == 'linux': - _dir_candidates = ['/dev/shm'] - else: - _dir_candidates = [] - - def __init__(self, size, fd=-1): - self.size = size - self.fd = fd - if fd == -1: - # Arena is created anew (if fd != -1, it means we're coming - # from rebuild_arena() below) - self.fd, name = tempfile.mkstemp( - prefix='pym-%d-'%os.getpid(), - dir=self._choose_dir(size)) - os.unlink(name) - util.Finalize(self, os.close, (self.fd,)) - os.ftruncate(self.fd, size) - self.buffer = mmap.mmap(self.fd, self.size) - - def _choose_dir(self, size): - # Choose a non-storage backed directory if possible, - # to improve performance - for d in self._dir_candidates: - st = os.statvfs(d) - if st.f_bavail * st.f_frsize >= size: # enough free space? - return d - return util.get_temp_dir() - - def reduce_arena(a): - if a.fd == -1: - raise ValueError('Arena is unpicklable because ' - 'forking was enabled when it was created') - return rebuild_arena, (a.size, reduction.DupFd(a.fd)) - - def rebuild_arena(size, dupfd): - return Arena(size, dupfd.detach()) - - reduction.register(Arena, reduce_arena) - -# -# Class allowing allocation of chunks of memory from arenas -# - -class Heap(object): - - # Minimum malloc() alignment - _alignment = 8 - - _DISCARD_FREE_SPACE_LARGER_THAN = 4 * 1024 ** 2 # 4 MB - _DOUBLE_ARENA_SIZE_UNTIL = 4 * 1024 ** 2 - - def __init__(self, size=mmap.PAGESIZE): - self._lastpid = os.getpid() - self._lock = threading.Lock() - # Current arena allocation size - self._size = size - # A sorted list of available block sizes in arenas - self._lengths = [] - - # Free block management: - # - map each block size to a list of `(Arena, start, stop)` blocks - self._len_to_seq = {} - # - map `(Arena, start)` tuple to the `(Arena, start, stop)` block - # starting at that offset - self._start_to_block = {} - # - map `(Arena, stop)` tuple to the `(Arena, start, stop)` block - # ending at that offset - self._stop_to_block = {} - - # Map arenas to their `(Arena, start, stop)` blocks in use - self._allocated_blocks = defaultdict(set) - self._arenas = [] - - # List of pending blocks to free - see comment in free() below - self._pending_free_blocks = [] - - # Statistics - self._n_mallocs = 0 - self._n_frees = 0 - - @staticmethod - def _roundup(n, alignment): - # alignment must be a power of 2 - mask = alignment - 1 - return (n + mask) & ~mask - - def _new_arena(self, size): - # Create a new arena with at least the given *size* - length = self._roundup(max(self._size, size), mmap.PAGESIZE) - # We carve larger and larger arenas, for efficiency, until we - # reach a large-ish size (roughly L3 cache-sized) - if self._size < self._DOUBLE_ARENA_SIZE_UNTIL: - self._size *= 2 - util.info('allocating a new mmap of length %d', length) - arena = Arena(length) - self._arenas.append(arena) - return (arena, 0, length) - - def _discard_arena(self, arena): - # Possibly delete the given (unused) arena - length = arena.size - # Reusing an existing arena is faster than creating a new one, so - # we only reclaim space if it's large enough. - if length < self._DISCARD_FREE_SPACE_LARGER_THAN: - return - blocks = self._allocated_blocks.pop(arena) - assert not blocks - del self._start_to_block[(arena, 0)] - del self._stop_to_block[(arena, length)] - self._arenas.remove(arena) - seq = self._len_to_seq[length] - seq.remove((arena, 0, length)) - if not seq: - del self._len_to_seq[length] - self._lengths.remove(length) - - def _malloc(self, size): - # returns a large enough block -- it might be much larger - i = bisect.bisect_left(self._lengths, size) - if i == len(self._lengths): - return self._new_arena(size) - else: - length = self._lengths[i] - seq = self._len_to_seq[length] - block = seq.pop() - if not seq: - del self._len_to_seq[length], self._lengths[i] - - (arena, start, stop) = block - del self._start_to_block[(arena, start)] - del self._stop_to_block[(arena, stop)] - return block - - def _add_free_block(self, block): - # make block available and try to merge with its neighbours in the arena - (arena, start, stop) = block - - try: - prev_block = self._stop_to_block[(arena, start)] - except KeyError: - pass - else: - start, _ = self._absorb(prev_block) - - try: - next_block = self._start_to_block[(arena, stop)] - except KeyError: - pass - else: - _, stop = self._absorb(next_block) - - block = (arena, start, stop) - length = stop - start - - try: - self._len_to_seq[length].append(block) - except KeyError: - self._len_to_seq[length] = [block] - bisect.insort(self._lengths, length) - - self._start_to_block[(arena, start)] = block - self._stop_to_block[(arena, stop)] = block - - def _absorb(self, block): - # deregister this block so it can be merged with a neighbour - (arena, start, stop) = block - del self._start_to_block[(arena, start)] - del self._stop_to_block[(arena, stop)] - - length = stop - start - seq = self._len_to_seq[length] - seq.remove(block) - if not seq: - del self._len_to_seq[length] - self._lengths.remove(length) - - return start, stop - - def _remove_allocated_block(self, block): - arena, start, stop = block - blocks = self._allocated_blocks[arena] - blocks.remove((start, stop)) - if not blocks: - # Arena is entirely free, discard it from this process - self._discard_arena(arena) - - def _free_pending_blocks(self): - # Free all the blocks in the pending list - called with the lock held. - while True: - try: - block = self._pending_free_blocks.pop() - except IndexError: - break - self._add_free_block(block) - self._remove_allocated_block(block) - - def free(self, block): - # free a block returned by malloc() - # Since free() can be called asynchronously by the GC, it could happen - # that it's called while self._lock is held: in that case, - # self._lock.acquire() would deadlock (issue #12352). To avoid that, a - # trylock is used instead, and if the lock can't be acquired - # immediately, the block is added to a list of blocks to be freed - # synchronously sometimes later from malloc() or free(), by calling - # _free_pending_blocks() (appending and retrieving from a list is not - # strictly thread-safe but under CPython it's atomic thanks to the GIL). - if os.getpid() != self._lastpid: - raise ValueError( - "My pid ({0:n}) is not last pid {1:n}".format( - os.getpid(),self._lastpid)) - if not self._lock.acquire(False): - # can't acquire the lock right now, add the block to the list of - # pending blocks to free - self._pending_free_blocks.append(block) - else: - # we hold the lock - try: - self._n_frees += 1 - self._free_pending_blocks() - self._add_free_block(block) - self._remove_allocated_block(block) - finally: - self._lock.release() - - def malloc(self, size): - # return a block of right size (possibly rounded up) - if size < 0: - raise ValueError("Size {0:n} out of range".format(size)) - if sys.maxsize <= size: - raise OverflowError("Size {0:n} too large".format(size)) - if os.getpid() != self._lastpid: - self.__init__() # reinitialize after fork - with self._lock: - self._n_mallocs += 1 - # allow pending blocks to be marked available - self._free_pending_blocks() - size = self._roundup(max(size, 1), self._alignment) - (arena, start, stop) = self._malloc(size) - real_stop = start + size - if real_stop < stop: - # if the returned block is larger than necessary, mark - # the remainder available - self._add_free_block((arena, real_stop, stop)) - self._allocated_blocks[arena].add((start, real_stop)) - return (arena, start, real_stop) - -# -# Class wrapping a block allocated out of a Heap -- can be inherited by child process -# - -class BufferWrapper(object): - - _heap = Heap() - - def __init__(self, size): - if size < 0: - raise ValueError("Size {0:n} out of range".format(size)) - if sys.maxsize <= size: - raise OverflowError("Size {0:n} too large".format(size)) - block = BufferWrapper._heap.malloc(size) - self._state = (block, size) - util.Finalize(self, BufferWrapper._heap.free, args=(block,)) - - def create_memoryview(self): - (arena, start, stop), size = self._state - return memoryview(arena.buffer)[start:start+size] diff --git a/Python314_4_x86_Template/Lib/multiprocessing/managers.py b/Python314_4_x86_Template/Lib/multiprocessing/managers.py deleted file mode 100644 index 91bcf243e..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/managers.py +++ /dev/null @@ -1,1438 +0,0 @@ -# -# Module providing manager classes for dealing -# with shared objects -# -# multiprocessing/managers.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = [ 'BaseManager', 'SyncManager', 'BaseProxy', 'Token' ] - -# -# Imports -# - -import sys -import threading -import signal -import array -import collections.abc -import queue -import time -import types -import os -from os import getpid - -from traceback import format_exc - -from . import connection -from .context import reduction, get_spawning_popen, ProcessError -from . import pool -from . import process -from . import util -from . import get_context -try: - from . import shared_memory -except ImportError: - HAS_SHMEM = False -else: - HAS_SHMEM = True - __all__.append('SharedMemoryManager') - -# -# Register some things for pickling -# - -def reduce_array(a): - return array.array, (a.typecode, a.tobytes()) -reduction.register(array.array, reduce_array) - -view_types = [type(getattr({}, name)()) for name in ('items','keys','values')] -def rebuild_as_list(obj): - return list, (list(obj),) -for view_type in view_types: - reduction.register(view_type, rebuild_as_list) -del view_type, view_types - -# -# Type for identifying shared objects -# - -class Token(object): - ''' - Type to uniquely identify a shared object - ''' - __slots__ = ('typeid', 'address', 'id') - - def __init__(self, typeid, address, id): - (self.typeid, self.address, self.id) = (typeid, address, id) - - def __getstate__(self): - return (self.typeid, self.address, self.id) - - def __setstate__(self, state): - (self.typeid, self.address, self.id) = state - - def __repr__(self): - return '%s(typeid=%r, address=%r, id=%r)' % \ - (self.__class__.__name__, self.typeid, self.address, self.id) - -# -# Function for communication with a manager's server process -# - -def dispatch(c, id, methodname, args=(), kwds={}): - ''' - Send a message to manager using connection `c` and return response - ''' - c.send((id, methodname, args, kwds)) - kind, result = c.recv() - if kind == '#RETURN': - return result - try: - raise convert_to_error(kind, result) - finally: - del result # break reference cycle - -def convert_to_error(kind, result): - if kind == '#ERROR': - return result - elif kind in ('#TRACEBACK', '#UNSERIALIZABLE'): - if not isinstance(result, str): - raise TypeError( - "Result {0!r} (kind '{1}') type is {2}, not str".format( - result, kind, type(result))) - if kind == '#UNSERIALIZABLE': - return RemoteError('Unserializable message: %s\n' % result) - else: - return RemoteError(result) - else: - return ValueError('Unrecognized message type {!r}'.format(kind)) - -class RemoteError(Exception): - def __str__(self): - return ('\n' + '-'*75 + '\n' + str(self.args[0]) + '-'*75) - -# -# Functions for finding the method names of an object -# - -def all_methods(obj): - ''' - Return a list of names of methods of `obj` - ''' - temp = [] - for name in dir(obj): - func = getattr(obj, name) - if callable(func): - temp.append(name) - return temp - -def public_methods(obj): - ''' - Return a list of names of methods of `obj` which do not start with '_' - ''' - return [name for name in all_methods(obj) if name[0] != '_'] - -# -# Server which is run in a process controlled by a manager -# - -class Server(object): - ''' - Server class which runs in a process controlled by a manager object - ''' - public = ['shutdown', 'create', 'accept_connection', 'get_methods', - 'debug_info', 'number_of_objects', 'dummy', 'incref', 'decref'] - - def __init__(self, registry, address, authkey, serializer): - if not isinstance(authkey, bytes): - raise TypeError( - "Authkey {0!r} is type {1!s}, not bytes".format( - authkey, type(authkey))) - self.registry = registry - self.authkey = process.AuthenticationString(authkey) - Listener, Client = listener_client[serializer] - - # do authentication later - self.listener = Listener(address=address, backlog=128) - self.address = self.listener.address - - self.id_to_obj = {'0': (None, ())} - self.id_to_refcount = {} - self.id_to_local_proxy_obj = {} - self.mutex = threading.Lock() - - def serve_forever(self): - ''' - Run the server forever - ''' - self.stop_event = threading.Event() - process.current_process()._manager_server = self - try: - accepter = threading.Thread(target=self.accepter) - accepter.daemon = True - accepter.start() - try: - while not self.stop_event.is_set(): - self.stop_event.wait(1) - except (KeyboardInterrupt, SystemExit): - pass - finally: - if sys.stdout != sys.__stdout__: # what about stderr? - util.debug('resetting stdout, stderr') - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.exit(0) - - def accepter(self): - while True: - try: - c = self.listener.accept() - except OSError: - continue - t = threading.Thread(target=self.handle_request, args=(c,)) - t.daemon = True - t.start() - - def _handle_request(self, c): - request = None - try: - connection.deliver_challenge(c, self.authkey) - connection.answer_challenge(c, self.authkey) - request = c.recv() - ignore, funcname, args, kwds = request - assert funcname in self.public, '%r unrecognized' % funcname - func = getattr(self, funcname) - except Exception: - msg = ('#TRACEBACK', format_exc()) - else: - try: - result = func(c, *args, **kwds) - except Exception: - msg = ('#TRACEBACK', format_exc()) - else: - msg = ('#RETURN', result) - - try: - c.send(msg) - except Exception as e: - try: - c.send(('#TRACEBACK', format_exc())) - except Exception: - pass - util.info('Failure to send message: %r', msg) - util.info(' ... request was %r', request) - util.info(' ... exception was %r', e) - - def handle_request(self, conn): - ''' - Handle a new connection - ''' - try: - self._handle_request(conn) - except SystemExit: - # Server.serve_client() calls sys.exit(0) on EOF - pass - finally: - conn.close() - - def serve_client(self, conn): - ''' - Handle requests from the proxies in a particular process/thread - ''' - util.debug('starting server thread to service %r', - threading.current_thread().name) - - recv = conn.recv - send = conn.send - id_to_obj = self.id_to_obj - - while not self.stop_event.is_set(): - - try: - methodname = obj = None - request = recv() - ident, methodname, args, kwds = request - try: - obj, exposed, gettypeid = id_to_obj[ident] - except KeyError as ke: - try: - obj, exposed, gettypeid = \ - self.id_to_local_proxy_obj[ident] - except KeyError: - raise ke - - if methodname not in exposed: - raise AttributeError( - 'method %r of %r object is not in exposed=%r' % - (methodname, type(obj), exposed) - ) - - function = getattr(obj, methodname) - - try: - res = function(*args, **kwds) - except Exception as e: - msg = ('#ERROR', e) - else: - typeid = gettypeid and gettypeid.get(methodname, None) - if typeid: - rident, rexposed = self.create(conn, typeid, res) - token = Token(typeid, self.address, rident) - msg = ('#PROXY', (rexposed, token)) - else: - msg = ('#RETURN', res) - - except AttributeError: - if methodname is None: - msg = ('#TRACEBACK', format_exc()) - else: - try: - fallback_func = self.fallback_mapping[methodname] - result = fallback_func( - self, conn, ident, obj, *args, **kwds - ) - msg = ('#RETURN', result) - except Exception: - msg = ('#TRACEBACK', format_exc()) - - except EOFError: - util.debug('got EOF -- exiting thread serving %r', - threading.current_thread().name) - sys.exit(0) - - except Exception: - msg = ('#TRACEBACK', format_exc()) - - try: - try: - send(msg) - except Exception: - send(('#UNSERIALIZABLE', format_exc())) - except Exception as e: - util.info('exception in thread serving %r', - threading.current_thread().name) - util.info(' ... message was %r', msg) - util.info(' ... exception was %r', e) - conn.close() - sys.exit(1) - - def fallback_getvalue(self, conn, ident, obj): - return obj - - def fallback_str(self, conn, ident, obj): - return str(obj) - - def fallback_repr(self, conn, ident, obj): - return repr(obj) - - fallback_mapping = { - '__str__':fallback_str, - '__repr__':fallback_repr, - '#GETVALUE':fallback_getvalue - } - - def dummy(self, c): - pass - - def debug_info(self, c): - ''' - Return some info --- useful to spot problems with refcounting - ''' - # Perhaps include debug info about 'c'? - with self.mutex: - result = [] - keys = list(self.id_to_refcount.keys()) - keys.sort() - for ident in keys: - if ident != '0': - result.append(' %s: refcount=%s\n %s' % - (ident, self.id_to_refcount[ident], - str(self.id_to_obj[ident][0])[:75])) - return '\n'.join(result) - - def number_of_objects(self, c): - ''' - Number of shared objects - ''' - # Doesn't use (len(self.id_to_obj) - 1) as we shouldn't count ident='0' - return len(self.id_to_refcount) - - def shutdown(self, c): - ''' - Shutdown this process - ''' - try: - util.debug('manager received shutdown message') - c.send(('#RETURN', None)) - except: - import traceback - traceback.print_exc() - finally: - self.stop_event.set() - - def create(self, c, typeid, /, *args, **kwds): - ''' - Create a new shared object and return its id - ''' - with self.mutex: - callable, exposed, method_to_typeid, proxytype = \ - self.registry[typeid] - - if callable is None: - if kwds or (len(args) != 1): - raise ValueError( - "Without callable, must have one non-keyword argument") - obj = args[0] - else: - obj = callable(*args, **kwds) - - if exposed is None: - exposed = public_methods(obj) - if method_to_typeid is not None: - if not isinstance(method_to_typeid, dict): - raise TypeError( - "Method_to_typeid {0!r}: type {1!s}, not dict".format( - method_to_typeid, type(method_to_typeid))) - exposed = list(exposed) + list(method_to_typeid) - - ident = '%x' % id(obj) # convert to string because xmlrpclib - # only has 32 bit signed integers - util.debug('%r callable returned object with id %r', typeid, ident) - - self.id_to_obj[ident] = (obj, set(exposed), method_to_typeid) - if ident not in self.id_to_refcount: - self.id_to_refcount[ident] = 0 - - self.incref(c, ident) - return ident, tuple(exposed) - - def get_methods(self, c, token): - ''' - Return the methods of the shared object indicated by token - ''' - return tuple(self.id_to_obj[token.id][1]) - - def accept_connection(self, c, name): - ''' - Spawn a new thread to serve this connection - ''' - threading.current_thread().name = name - c.send(('#RETURN', None)) - self.serve_client(c) - - def incref(self, c, ident): - with self.mutex: - try: - self.id_to_refcount[ident] += 1 - except KeyError as ke: - # If no external references exist but an internal (to the - # manager) still does and a new external reference is created - # from it, restore the manager's tracking of it from the - # previously stashed internal ref. - if ident in self.id_to_local_proxy_obj: - self.id_to_refcount[ident] = 1 - self.id_to_obj[ident] = \ - self.id_to_local_proxy_obj[ident] - util.debug('Server re-enabled tracking & INCREF %r', ident) - else: - raise ke - - def decref(self, c, ident): - if ident not in self.id_to_refcount and \ - ident in self.id_to_local_proxy_obj: - util.debug('Server DECREF skipping %r', ident) - return - - with self.mutex: - if self.id_to_refcount[ident] <= 0: - raise AssertionError( - "Id {0!s} ({1!r}) has refcount {2:n}, not 1+".format( - ident, self.id_to_obj[ident], - self.id_to_refcount[ident])) - self.id_to_refcount[ident] -= 1 - if self.id_to_refcount[ident] == 0: - del self.id_to_refcount[ident] - - if ident not in self.id_to_refcount: - # Two-step process in case the object turns out to contain other - # proxy objects (e.g. a managed list of managed lists). - # Otherwise, deleting self.id_to_obj[ident] would trigger the - # deleting of the stored value (another managed object) which would - # in turn attempt to acquire the mutex that is already held here. - self.id_to_obj[ident] = (None, (), None) # thread-safe - util.debug('disposing of obj with id %r', ident) - with self.mutex: - del self.id_to_obj[ident] - - -# -# Class to represent state of a manager -# - -class State(object): - __slots__ = ['value'] - INITIAL = 0 - STARTED = 1 - SHUTDOWN = 2 - -# -# Mapping from serializer name to Listener and Client types -# - -listener_client = { - 'pickle' : (connection.Listener, connection.Client), - 'xmlrpclib' : (connection.XmlListener, connection.XmlClient) - } - -# -# Definition of BaseManager -# - -class BaseManager(object): - ''' - Base class for managers - ''' - _registry = {} - _Server = Server - - def __init__(self, address=None, authkey=None, serializer='pickle', - ctx=None, *, shutdown_timeout=1.0): - if authkey is None: - authkey = process.current_process().authkey - self._address = address # XXX not final address if eg ('', 0) - self._authkey = process.AuthenticationString(authkey) - self._state = State() - self._state.value = State.INITIAL - self._serializer = serializer - self._Listener, self._Client = listener_client[serializer] - self._ctx = ctx or get_context() - self._shutdown_timeout = shutdown_timeout - - def get_server(self): - ''' - Return server object with serve_forever() method and address attribute - ''' - if self._state.value != State.INITIAL: - if self._state.value == State.STARTED: - raise ProcessError("Already started server") - elif self._state.value == State.SHUTDOWN: - raise ProcessError("Manager has shut down") - else: - raise ProcessError( - "Unknown state {!r}".format(self._state.value)) - return Server(self._registry, self._address, - self._authkey, self._serializer) - - def connect(self): - ''' - Connect manager object to the server process - ''' - Listener, Client = listener_client[self._serializer] - conn = Client(self._address, authkey=self._authkey) - dispatch(conn, None, 'dummy') - self._state.value = State.STARTED - - def start(self, initializer=None, initargs=()): - ''' - Spawn a server process for this manager object - ''' - if self._state.value != State.INITIAL: - if self._state.value == State.STARTED: - raise ProcessError("Already started server") - elif self._state.value == State.SHUTDOWN: - raise ProcessError("Manager has shut down") - else: - raise ProcessError( - "Unknown state {!r}".format(self._state.value)) - - if initializer is not None and not callable(initializer): - raise TypeError('initializer must be a callable') - - # pipe over which we will retrieve address of server - reader, writer = connection.Pipe(duplex=False) - - # spawn process which runs a server - self._process = self._ctx.Process( - target=type(self)._run_server, - args=(self._registry, self._address, self._authkey, - self._serializer, writer, initializer, initargs), - ) - ident = ':'.join(str(i) for i in self._process._identity) - self._process.name = type(self).__name__ + '-' + ident - self._process.start() - - # get address of server - writer.close() - self._address = reader.recv() - reader.close() - - # register a finalizer - self._state.value = State.STARTED - self.shutdown = util.Finalize( - self, type(self)._finalize_manager, - args=(self._process, self._address, self._authkey, self._state, - self._Client, self._shutdown_timeout), - exitpriority=0 - ) - - @classmethod - def _run_server(cls, registry, address, authkey, serializer, writer, - initializer=None, initargs=()): - ''' - Create a server, report its address and run it - ''' - # bpo-36368: protect server process from KeyboardInterrupt signals - signal.signal(signal.SIGINT, signal.SIG_IGN) - - if initializer is not None: - initializer(*initargs) - - # create server - server = cls._Server(registry, address, authkey, serializer) - - # inform parent process of the server's address - writer.send(server.address) - writer.close() - - # run the manager - util.info('manager serving at %r', server.address) - server.serve_forever() - - def _create(self, typeid, /, *args, **kwds): - ''' - Create a new shared object; return the token and exposed tuple - ''' - assert self._state.value == State.STARTED, 'server not yet started' - conn = self._Client(self._address, authkey=self._authkey) - try: - id, exposed = dispatch(conn, None, 'create', (typeid,)+args, kwds) - finally: - conn.close() - return Token(typeid, self._address, id), exposed - - def join(self, timeout=None): - ''' - Join the manager process (if it has been spawned) - ''' - if self._process is not None: - self._process.join(timeout) - if not self._process.is_alive(): - self._process = None - - def _debug_info(self): - ''' - Return some info about the servers shared objects and connections - ''' - conn = self._Client(self._address, authkey=self._authkey) - try: - return dispatch(conn, None, 'debug_info') - finally: - conn.close() - - def _number_of_objects(self): - ''' - Return the number of shared objects - ''' - conn = self._Client(self._address, authkey=self._authkey) - try: - return dispatch(conn, None, 'number_of_objects') - finally: - conn.close() - - def __enter__(self): - if self._state.value == State.INITIAL: - self.start() - if self._state.value != State.STARTED: - if self._state.value == State.INITIAL: - raise ProcessError("Unable to start server") - elif self._state.value == State.SHUTDOWN: - raise ProcessError("Manager has shut down") - else: - raise ProcessError( - "Unknown state {!r}".format(self._state.value)) - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.shutdown() - - @staticmethod - def _finalize_manager(process, address, authkey, state, _Client, - shutdown_timeout): - ''' - Shutdown the manager process; will be registered as a finalizer - ''' - if process.is_alive(): - util.info('sending shutdown message to manager') - try: - conn = _Client(address, authkey=authkey) - try: - dispatch(conn, None, 'shutdown') - finally: - conn.close() - except Exception: - pass - - process.join(timeout=shutdown_timeout) - if process.is_alive(): - util.info('manager still alive') - if hasattr(process, 'terminate'): - util.info('trying to `terminate()` manager process') - process.terminate() - process.join(timeout=shutdown_timeout) - if process.is_alive(): - util.info('manager still alive after terminate') - process.kill() - process.join() - - state.value = State.SHUTDOWN - try: - del BaseProxy._address_to_local[address] - except KeyError: - pass - - @property - def address(self): - return self._address - - @classmethod - def register(cls, typeid, callable=None, proxytype=None, exposed=None, - method_to_typeid=None, create_method=True): - ''' - Register a typeid with the manager type - ''' - if '_registry' not in cls.__dict__: - cls._registry = cls._registry.copy() - - if proxytype is None: - proxytype = AutoProxy - - exposed = exposed or getattr(proxytype, '_exposed_', None) - - method_to_typeid = method_to_typeid or \ - getattr(proxytype, '_method_to_typeid_', None) - - if method_to_typeid: - for key, value in list(method_to_typeid.items()): # isinstance? - assert type(key) is str, '%r is not a string' % key - assert type(value) is str, '%r is not a string' % value - - cls._registry[typeid] = ( - callable, exposed, method_to_typeid, proxytype - ) - - if create_method: - def temp(self, /, *args, **kwds): - util.debug('requesting creation of a shared %r object', typeid) - token, exp = self._create(typeid, *args, **kwds) - proxy = proxytype( - token, self._serializer, manager=self, - authkey=self._authkey, exposed=exp - ) - conn = self._Client(token.address, authkey=self._authkey) - dispatch(conn, None, 'decref', (token.id,)) - return proxy - temp.__name__ = typeid - setattr(cls, typeid, temp) - -# -# Subclass of set which get cleared after a fork -# - -class ProcessLocalSet(set): - def __init__(self): - util.register_after_fork(self, lambda obj: obj.clear()) - def __reduce__(self): - return type(self), () - -# -# Definition of BaseProxy -# - -class BaseProxy(object): - ''' - A base for proxies of shared objects - ''' - _address_to_local = {} - _mutex = util.ForkAwareThreadLock() - - # Each instance gets a `_serial` number. Unlike `id(...)`, this number - # is never reused. - _next_serial = 1 - - def __init__(self, token, serializer, manager=None, - authkey=None, exposed=None, incref=True, manager_owned=False): - with BaseProxy._mutex: - tls_serials = BaseProxy._address_to_local.get(token.address, None) - if tls_serials is None: - tls_serials = util.ForkAwareLocal(), ProcessLocalSet() - BaseProxy._address_to_local[token.address] = tls_serials - - self._serial = BaseProxy._next_serial - BaseProxy._next_serial += 1 - - # self._tls is used to record the connection used by this - # thread to communicate with the manager at token.address - self._tls = tls_serials[0] - - # self._all_serials is a set used to record the identities of all - # shared objects for which the current process owns references and - # which are in the manager at token.address - self._all_serials = tls_serials[1] - - self._token = token - self._id = self._token.id - self._manager = manager - self._serializer = serializer - self._Client = listener_client[serializer][1] - - # Should be set to True only when a proxy object is being created - # on the manager server; primary use case: nested proxy objects. - # RebuildProxy detects when a proxy is being created on the manager - # and sets this value appropriately. - self._owned_by_manager = manager_owned - - if authkey is not None: - self._authkey = process.AuthenticationString(authkey) - elif self._manager is not None: - self._authkey = self._manager._authkey - else: - self._authkey = process.current_process().authkey - - if incref: - self._incref() - - util.register_after_fork(self, BaseProxy._after_fork) - - def _connect(self): - util.debug('making connection to manager') - name = process.current_process().name - if threading.current_thread().name != 'MainThread': - name += '|' + threading.current_thread().name - conn = self._Client(self._token.address, authkey=self._authkey) - dispatch(conn, None, 'accept_connection', (name,)) - self._tls.connection = conn - - def _callmethod(self, methodname, args=(), kwds={}): - ''' - Try to call a method of the referent and return a copy of the result - ''' - try: - conn = self._tls.connection - except AttributeError: - util.debug('thread %r does not own a connection', - threading.current_thread().name) - self._connect() - conn = self._tls.connection - - conn.send((self._id, methodname, args, kwds)) - kind, result = conn.recv() - - if kind == '#RETURN': - return result - elif kind == '#PROXY': - exposed, token = result - proxytype = self._manager._registry[token.typeid][-1] - token.address = self._token.address - proxy = proxytype( - token, self._serializer, manager=self._manager, - authkey=self._authkey, exposed=exposed - ) - conn = self._Client(token.address, authkey=self._authkey) - dispatch(conn, None, 'decref', (token.id,)) - return proxy - try: - raise convert_to_error(kind, result) - finally: - del result # break reference cycle - - def _getvalue(self): - ''' - Get a copy of the value of the referent - ''' - return self._callmethod('#GETVALUE') - - def _incref(self): - if self._owned_by_manager: - util.debug('owned_by_manager skipped INCREF of %r', self._token.id) - return - - conn = self._Client(self._token.address, authkey=self._authkey) - dispatch(conn, None, 'incref', (self._id,)) - util.debug('INCREF %r', self._token.id) - - self._all_serials.add(self._serial) - - state = self._manager and self._manager._state - - self._close = util.Finalize( - self, BaseProxy._decref, - args=(self._token, self._serial, self._authkey, state, - self._tls, self._all_serials, self._Client), - exitpriority=10 - ) - - @staticmethod - def _decref(token, serial, authkey, state, tls, idset, _Client): - idset.discard(serial) - - # check whether manager is still alive - if state is None or state.value == State.STARTED: - # tell manager this process no longer cares about referent - try: - util.debug('DECREF %r', token.id) - conn = _Client(token.address, authkey=authkey) - dispatch(conn, None, 'decref', (token.id,)) - except Exception as e: - util.debug('... decref failed %s', e) - - else: - util.debug('DECREF %r -- manager already shutdown', token.id) - - # check whether we can close this thread's connection because - # the process owns no more references to objects for this manager - if not idset and hasattr(tls, 'connection'): - util.debug('thread %r has no more proxies so closing conn', - threading.current_thread().name) - tls.connection.close() - del tls.connection - - def _after_fork(self): - self._manager = None - try: - self._incref() - except Exception as e: - # the proxy may just be for a manager which has shutdown - util.info('incref failed: %s' % e) - - def __reduce__(self): - kwds = {} - if get_spawning_popen() is not None: - kwds['authkey'] = self._authkey - - if getattr(self, '_isauto', False): - kwds['exposed'] = self._exposed_ - return (RebuildProxy, - (AutoProxy, self._token, self._serializer, kwds)) - else: - return (RebuildProxy, - (type(self), self._token, self._serializer, kwds)) - - def __deepcopy__(self, memo): - return self._getvalue() - - def __repr__(self): - return '<%s object, typeid %r at %#x>' % \ - (type(self).__name__, self._token.typeid, id(self)) - - def __str__(self): - ''' - Return representation of the referent (or a fall-back if that fails) - ''' - try: - return self._callmethod('__repr__') - except Exception: - return repr(self)[:-1] + "; '__str__()' failed>" - -# -# Function used for unpickling -# - -def RebuildProxy(func, token, serializer, kwds): - ''' - Function used for unpickling proxy objects. - ''' - server = getattr(process.current_process(), '_manager_server', None) - if server and server.address == token.address: - util.debug('Rebuild a proxy owned by manager, token=%r', token) - kwds['manager_owned'] = True - if token.id not in server.id_to_local_proxy_obj: - server.id_to_local_proxy_obj[token.id] = \ - server.id_to_obj[token.id] - incref = ( - kwds.pop('incref', True) and - not getattr(process.current_process(), '_inheriting', False) - ) - return func(token, serializer, incref=incref, **kwds) - -# -# Functions to create proxies and proxy types -# - -def MakeProxyType(name, exposed, _cache={}): - ''' - Return a proxy type whose methods are given by `exposed` - ''' - exposed = tuple(exposed) - try: - return _cache[(name, exposed)] - except KeyError: - pass - - dic = {} - - for meth in exposed: - exec('''def %s(self, /, *args, **kwds): - return self._callmethod(%r, args, kwds)''' % (meth, meth), dic) - - ProxyType = type(name, (BaseProxy,), dic) - ProxyType._exposed_ = exposed - _cache[(name, exposed)] = ProxyType - return ProxyType - - -def AutoProxy(token, serializer, manager=None, authkey=None, - exposed=None, incref=True, manager_owned=False): - ''' - Return an auto-proxy for `token` - ''' - _Client = listener_client[serializer][1] - - if exposed is None: - conn = _Client(token.address, authkey=authkey) - try: - exposed = dispatch(conn, None, 'get_methods', (token,)) - finally: - conn.close() - - if authkey is None and manager is not None: - authkey = manager._authkey - if authkey is None: - authkey = process.current_process().authkey - - ProxyType = MakeProxyType('AutoProxy[%s]' % token.typeid, exposed) - proxy = ProxyType(token, serializer, manager=manager, authkey=authkey, - incref=incref, manager_owned=manager_owned) - proxy._isauto = True - return proxy - -# -# Types/callables which we will register with SyncManager -# - -class Namespace(object): - def __init__(self, /, **kwds): - self.__dict__.update(kwds) - def __repr__(self): - items = list(self.__dict__.items()) - temp = [] - for name, value in items: - if not name.startswith('_'): - temp.append('%s=%r' % (name, value)) - temp.sort() - return '%s(%s)' % (self.__class__.__name__, ', '.join(temp)) - -class Value(object): - def __init__(self, typecode, value, lock=True): - self._typecode = typecode - self._value = value - def get(self): - return self._value - def set(self, value): - self._value = value - def __repr__(self): - return '%s(%r, %r)'%(type(self).__name__, self._typecode, self._value) - value = property(get, set) - -def Array(typecode, sequence, lock=True): - return array.array(typecode, sequence) - -# -# Proxy types used by SyncManager -# - -class IteratorProxy(BaseProxy): - _exposed_ = ('__next__', 'send', 'throw', 'close') - def __iter__(self): - return self - def __next__(self, *args): - return self._callmethod('__next__', args) - def send(self, *args): - return self._callmethod('send', args) - def throw(self, *args): - return self._callmethod('throw', args) - def close(self, *args): - return self._callmethod('close', args) - - -class AcquirerProxy(BaseProxy): - _exposed_ = ('acquire', 'release', 'locked') - def acquire(self, blocking=True, timeout=None): - args = (blocking,) if timeout is None else (blocking, timeout) - return self._callmethod('acquire', args) - def release(self): - return self._callmethod('release') - def locked(self): - return self._callmethod('locked') - def __enter__(self): - return self._callmethod('acquire') - def __exit__(self, exc_type, exc_val, exc_tb): - return self._callmethod('release') - - -class ConditionProxy(AcquirerProxy): - _exposed_ = ('acquire', 'release', 'locked', 'wait', 'notify', 'notify_all') - def wait(self, timeout=None): - return self._callmethod('wait', (timeout,)) - def notify(self, n=1): - return self._callmethod('notify', (n,)) - def notify_all(self): - return self._callmethod('notify_all') - def wait_for(self, predicate, timeout=None): - result = predicate() - if result: - return result - if timeout is not None: - endtime = time.monotonic() + timeout - else: - endtime = None - waittime = None - while not result: - if endtime is not None: - waittime = endtime - time.monotonic() - if waittime <= 0: - break - self.wait(waittime) - result = predicate() - return result - - -class EventProxy(BaseProxy): - _exposed_ = ('is_set', 'set', 'clear', 'wait') - def is_set(self): - return self._callmethod('is_set') - def set(self): - return self._callmethod('set') - def clear(self): - return self._callmethod('clear') - def wait(self, timeout=None): - return self._callmethod('wait', (timeout,)) - - -class BarrierProxy(BaseProxy): - _exposed_ = ('__getattribute__', 'wait', 'abort', 'reset') - def wait(self, timeout=None): - return self._callmethod('wait', (timeout,)) - def abort(self): - return self._callmethod('abort') - def reset(self): - return self._callmethod('reset') - @property - def parties(self): - return self._callmethod('__getattribute__', ('parties',)) - @property - def n_waiting(self): - return self._callmethod('__getattribute__', ('n_waiting',)) - @property - def broken(self): - return self._callmethod('__getattribute__', ('broken',)) - - -class NamespaceProxy(BaseProxy): - _exposed_ = ('__getattribute__', '__setattr__', '__delattr__') - def __getattr__(self, key): - if key[0] == '_': - return object.__getattribute__(self, key) - callmethod = object.__getattribute__(self, '_callmethod') - return callmethod('__getattribute__', (key,)) - def __setattr__(self, key, value): - if key[0] == '_': - return object.__setattr__(self, key, value) - callmethod = object.__getattribute__(self, '_callmethod') - return callmethod('__setattr__', (key, value)) - def __delattr__(self, key): - if key[0] == '_': - return object.__delattr__(self, key) - callmethod = object.__getattribute__(self, '_callmethod') - return callmethod('__delattr__', (key,)) - - -class ValueProxy(BaseProxy): - _exposed_ = ('get', 'set') - def get(self): - return self._callmethod('get') - def set(self, value): - return self._callmethod('set', (value,)) - value = property(get, set) - - __class_getitem__ = classmethod(types.GenericAlias) - - -BaseListProxy = MakeProxyType('BaseListProxy', ( - '__add__', '__contains__', '__delitem__', '__getitem__', '__imul__', - '__len__', '__mul__', '__reversed__', '__rmul__', '__setitem__', - 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', - 'remove', 'reverse', 'sort', - )) -class ListProxy(BaseListProxy): - def __iadd__(self, value): - self._callmethod('extend', (value,)) - return self - def __imul__(self, value): - self._callmethod('__imul__', (value,)) - return self - - __class_getitem__ = classmethod(types.GenericAlias) - -collections.abc.MutableSequence.register(BaseListProxy) - -_BaseDictProxy = MakeProxyType('_BaseDictProxy', ( - '__contains__', '__delitem__', '__getitem__', '__ior__', '__iter__', - '__len__', '__or__', '__reversed__', '__ror__', - '__setitem__', 'clear', 'copy', 'fromkeys', 'get', 'items', - 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values' - )) -_BaseDictProxy._method_to_typeid_ = { - '__iter__': 'Iterator', - } -class DictProxy(_BaseDictProxy): - def __ior__(self, value): - self._callmethod('__ior__', (value,)) - return self - - __class_getitem__ = classmethod(types.GenericAlias) - -collections.abc.MutableMapping.register(_BaseDictProxy) - -_BaseSetProxy = MakeProxyType("_BaseSetProxy", ( - '__and__', '__class_getitem__', '__contains__', '__iand__', '__ior__', - '__isub__', '__iter__', '__ixor__', '__len__', '__or__', '__rand__', - '__ror__', '__rsub__', '__rxor__', '__sub__', '__xor__', - '__ge__', '__gt__', '__le__', '__lt__', - 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', - 'intersection', 'intersection_update', 'isdisjoint', 'issubset', - 'issuperset', 'pop', 'remove', 'symmetric_difference', - 'symmetric_difference_update', 'union', 'update', -)) - -class SetProxy(_BaseSetProxy): - def __ior__(self, value): - self._callmethod('__ior__', (value,)) - return self - def __iand__(self, value): - self._callmethod('__iand__', (value,)) - return self - def __ixor__(self, value): - self._callmethod('__ixor__', (value,)) - return self - def __isub__(self, value): - self._callmethod('__isub__', (value,)) - return self - - __class_getitem__ = classmethod(types.GenericAlias) - -collections.abc.MutableMapping.register(_BaseSetProxy) - - -ArrayProxy = MakeProxyType('ArrayProxy', ( - '__len__', '__getitem__', '__setitem__' - )) - - -BasePoolProxy = MakeProxyType('PoolProxy', ( - 'apply', 'apply_async', 'close', 'imap', 'imap_unordered', 'join', - 'map', 'map_async', 'starmap', 'starmap_async', 'terminate', - )) -BasePoolProxy._method_to_typeid_ = { - 'apply_async': 'AsyncResult', - 'map_async': 'AsyncResult', - 'starmap_async': 'AsyncResult', - 'imap': 'Iterator', - 'imap_unordered': 'Iterator' - } -class PoolProxy(BasePoolProxy): - def __enter__(self): - return self - def __exit__(self, exc_type, exc_val, exc_tb): - self.terminate() - -# -# Definition of SyncManager -# - -class SyncManager(BaseManager): - ''' - Subclass of `BaseManager` which supports a number of shared object types. - - The types registered are those intended for the synchronization - of threads, plus `dict`, `list` and `Namespace`. - - The `multiprocessing.Manager()` function creates started instances of - this class. - ''' - -SyncManager.register('Queue', queue.Queue) -SyncManager.register('JoinableQueue', queue.Queue) -SyncManager.register('Event', threading.Event, EventProxy) -SyncManager.register('Lock', threading.Lock, AcquirerProxy) -SyncManager.register('RLock', threading.RLock, AcquirerProxy) -SyncManager.register('Semaphore', threading.Semaphore, AcquirerProxy) -SyncManager.register('BoundedSemaphore', threading.BoundedSemaphore, - AcquirerProxy) -SyncManager.register('Condition', threading.Condition, ConditionProxy) -SyncManager.register('Barrier', threading.Barrier, BarrierProxy) -SyncManager.register('Pool', pool.Pool, PoolProxy) -SyncManager.register('list', list, ListProxy) -SyncManager.register('dict', dict, DictProxy) -SyncManager.register('set', set, SetProxy) -SyncManager.register('Value', Value, ValueProxy) -SyncManager.register('Array', Array, ArrayProxy) -SyncManager.register('Namespace', Namespace, NamespaceProxy) - -# types returned by methods of PoolProxy -SyncManager.register('Iterator', proxytype=IteratorProxy, create_method=False) -SyncManager.register('AsyncResult', create_method=False) - -# -# Definition of SharedMemoryManager and SharedMemoryServer -# - -if HAS_SHMEM: - class _SharedMemoryTracker: - "Manages one or more shared memory segments." - - def __init__(self, name, segment_names=[]): - self.shared_memory_context_name = name - self.segment_names = segment_names - - def register_segment(self, segment_name): - "Adds the supplied shared memory block name to tracker." - util.debug(f"Register segment {segment_name!r} in pid {getpid()}") - self.segment_names.append(segment_name) - - def destroy_segment(self, segment_name): - """Calls unlink() on the shared memory block with the supplied name - and removes it from the list of blocks being tracked.""" - util.debug(f"Destroy segment {segment_name!r} in pid {getpid()}") - self.segment_names.remove(segment_name) - segment = shared_memory.SharedMemory(segment_name) - segment.close() - segment.unlink() - - def unlink(self): - "Calls destroy_segment() on all tracked shared memory blocks." - for segment_name in self.segment_names[:]: - self.destroy_segment(segment_name) - - def __del__(self): - util.debug(f"Call {self.__class__.__name__}.__del__ in {getpid()}") - self.unlink() - - def __getstate__(self): - return (self.shared_memory_context_name, self.segment_names) - - def __setstate__(self, state): - self.__init__(*state) - - - class SharedMemoryServer(Server): - - public = Server.public + \ - ['track_segment', 'release_segment', 'list_segments'] - - def __init__(self, *args, **kwargs): - Server.__init__(self, *args, **kwargs) - address = self.address - # The address of Linux abstract namespaces can be bytes - if isinstance(address, bytes): - address = os.fsdecode(address) - self.shared_memory_context = \ - _SharedMemoryTracker(f"shm_{address}_{getpid()}") - util.debug(f"SharedMemoryServer started by pid {getpid()}") - - def create(self, c, typeid, /, *args, **kwargs): - """Create a new distributed-shared object (not backed by a shared - memory block) and return its id to be used in a Proxy Object.""" - # Unless set up as a shared proxy, don't make shared_memory_context - # a standard part of kwargs. This makes things easier for supplying - # simple functions. - if hasattr(self.registry[typeid][-1], "_shared_memory_proxy"): - kwargs['shared_memory_context'] = self.shared_memory_context - return Server.create(self, c, typeid, *args, **kwargs) - - def shutdown(self, c): - "Call unlink() on all tracked shared memory, terminate the Server." - self.shared_memory_context.unlink() - return Server.shutdown(self, c) - - def track_segment(self, c, segment_name): - "Adds the supplied shared memory block name to Server's tracker." - self.shared_memory_context.register_segment(segment_name) - - def release_segment(self, c, segment_name): - """Calls unlink() on the shared memory block with the supplied name - and removes it from the tracker instance inside the Server.""" - self.shared_memory_context.destroy_segment(segment_name) - - def list_segments(self, c): - """Returns a list of names of shared memory blocks that the Server - is currently tracking.""" - return self.shared_memory_context.segment_names - - - class SharedMemoryManager(BaseManager): - """Like SyncManager but uses SharedMemoryServer instead of Server. - - It provides methods for creating and returning SharedMemory instances - and for creating a list-like object (ShareableList) backed by shared - memory. It also provides methods that create and return Proxy Objects - that support synchronization across processes (i.e. multi-process-safe - locks and semaphores). - """ - - _Server = SharedMemoryServer - - def __init__(self, *args, **kwargs): - if os.name == "posix": - # bpo-36867: Ensure the resource_tracker is running before - # launching the manager process, so that concurrent - # shared_memory manipulation both in the manager and in the - # current process does not create two resource_tracker - # processes. - from . import resource_tracker - resource_tracker.ensure_running() - BaseManager.__init__(self, *args, **kwargs) - util.debug(f"{self.__class__.__name__} created by pid {getpid()}") - - def __del__(self): - util.debug(f"{self.__class__.__name__}.__del__ by pid {getpid()}") - - def get_server(self): - 'Better than monkeypatching for now; merge into Server ultimately' - if self._state.value != State.INITIAL: - if self._state.value == State.STARTED: - raise ProcessError("Already started SharedMemoryServer") - elif self._state.value == State.SHUTDOWN: - raise ProcessError("SharedMemoryManager has shut down") - else: - raise ProcessError( - "Unknown state {!r}".format(self._state.value)) - return self._Server(self._registry, self._address, - self._authkey, self._serializer) - - def SharedMemory(self, size): - """Returns a new SharedMemory instance with the specified size in - bytes, to be tracked by the manager.""" - with self._Client(self._address, authkey=self._authkey) as conn: - sms = shared_memory.SharedMemory(None, create=True, size=size) - try: - dispatch(conn, None, 'track_segment', (sms.name,)) - except BaseException as e: - sms.unlink() - raise e - return sms - - def ShareableList(self, sequence): - """Returns a new ShareableList instance populated with the values - from the input sequence, to be tracked by the manager.""" - with self._Client(self._address, authkey=self._authkey) as conn: - sl = shared_memory.ShareableList(sequence) - try: - dispatch(conn, None, 'track_segment', (sl.shm.name,)) - except BaseException as e: - sl.shm.unlink() - raise e - return sl diff --git a/Python314_4_x86_Template/Lib/multiprocessing/pool.py b/Python314_4_x86_Template/Lib/multiprocessing/pool.py deleted file mode 100644 index f97989017..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/pool.py +++ /dev/null @@ -1,957 +0,0 @@ -# -# Module providing the `Pool` class for managing a process pool -# -# multiprocessing/pool.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = ['Pool', 'ThreadPool'] - -# -# Imports -# - -import collections -import itertools -import os -import queue -import threading -import time -import traceback -import types -import warnings - -# If threading is available then ThreadPool should be provided. Therefore -# we avoid top-level imports which are liable to fail on some systems. -from . import util -from . import get_context, TimeoutError -from .connection import wait - -# -# Constants representing the state of a pool -# - -INIT = "INIT" -RUN = "RUN" -CLOSE = "CLOSE" -TERMINATE = "TERMINATE" - -# -# Miscellaneous -# - -job_counter = itertools.count() - -def mapstar(args): - return list(map(*args)) - -def starmapstar(args): - return list(itertools.starmap(args[0], args[1])) - -# -# Hack to embed stringification of remote traceback in local traceback -# - -class RemoteTraceback(Exception): - def __init__(self, tb): - self.tb = tb - def __str__(self): - return self.tb - -class ExceptionWithTraceback: - def __init__(self, exc, tb): - tb = traceback.format_exception(type(exc), exc, tb) - tb = ''.join(tb) - self.exc = exc - self.tb = '\n"""\n%s"""' % tb - def __reduce__(self): - return rebuild_exc, (self.exc, self.tb) - -def rebuild_exc(exc, tb): - exc.__cause__ = RemoteTraceback(tb) - return exc - -# -# Code run by worker processes -# - -class MaybeEncodingError(Exception): - """Wraps possible unpickleable errors, so they can be - safely sent through the socket.""" - - def __init__(self, exc, value): - self.exc = repr(exc) - self.value = repr(value) - super(MaybeEncodingError, self).__init__(self.exc, self.value) - - def __str__(self): - return "Error sending result: '%s'. Reason: '%s'" % (self.value, - self.exc) - - def __repr__(self): - return "<%s: %s>" % (self.__class__.__name__, self) - - -def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None, - wrap_exception=False): - if (maxtasks is not None) and not (isinstance(maxtasks, int) - and maxtasks >= 1): - raise AssertionError("Maxtasks {!r} is not valid".format(maxtasks)) - put = outqueue.put - get = inqueue.get - if hasattr(inqueue, '_writer'): - inqueue._writer.close() - outqueue._reader.close() - - if initializer is not None: - initializer(*initargs) - - completed = 0 - while maxtasks is None or (maxtasks and completed < maxtasks): - try: - task = get() - except (EOFError, OSError): - util.debug('worker got EOFError or OSError -- exiting') - break - - if task is None: - util.debug('worker got sentinel -- exiting') - break - - job, i, func, args, kwds = task - try: - result = (True, func(*args, **kwds)) - except Exception as e: - if wrap_exception and func is not _helper_reraises_exception: - e = ExceptionWithTraceback(e, e.__traceback__) - result = (False, e) - try: - put((job, i, result)) - except Exception as e: - wrapped = MaybeEncodingError(e, result[1]) - util.debug("Possible encoding error while sending result: %s" % ( - wrapped)) - put((job, i, (False, wrapped))) - - task = job = result = func = args = kwds = None - completed += 1 - util.debug('worker exiting after %d tasks' % completed) - -def _helper_reraises_exception(ex): - 'Pickle-able helper function for use by _guarded_task_generation.' - raise ex - -# -# Class representing a process pool -# - -class _PoolCache(dict): - """ - Class that implements a cache for the Pool class that will notify - the pool management threads every time the cache is emptied. The - notification is done by the use of a queue that is provided when - instantiating the cache. - """ - def __init__(self, /, *args, notifier=None, **kwds): - self.notifier = notifier - super().__init__(*args, **kwds) - - def __delitem__(self, item): - super().__delitem__(item) - - # Notify that the cache is empty. This is important because the - # pool keeps maintaining workers until the cache gets drained. This - # eliminates a race condition in which a task is finished after the - # the pool's _handle_workers method has enter another iteration of the - # loop. In this situation, the only event that can wake up the pool - # is the cache to be emptied (no more tasks available). - if not self: - self.notifier.put(None) - -class Pool(object): - ''' - Class which supports an async version of applying functions to arguments. - ''' - _wrap_exception = True - - @staticmethod - def Process(ctx, *args, **kwds): - return ctx.Process(*args, **kwds) - - def __init__(self, processes=None, initializer=None, initargs=(), - maxtasksperchild=None, context=None): - # Attributes initialized early to make sure that they exist in - # __del__() if __init__() raises an exception - self._pool = [] - self._state = INIT - - self._ctx = context or get_context() - self._setup_queues() - self._taskqueue = queue.SimpleQueue() - # The _change_notifier queue exist to wake up self._handle_workers() - # when the cache (self._cache) is empty or when there is a change in - # the _state variable of the thread that runs _handle_workers. - self._change_notifier = self._ctx.SimpleQueue() - self._cache = _PoolCache(notifier=self._change_notifier) - self._maxtasksperchild = maxtasksperchild - self._initializer = initializer - self._initargs = initargs - - if processes is None: - processes = os.process_cpu_count() or 1 - if processes < 1: - raise ValueError("Number of processes must be at least 1") - if maxtasksperchild is not None: - if not isinstance(maxtasksperchild, int) or maxtasksperchild <= 0: - raise ValueError("maxtasksperchild must be a positive int or None") - - if initializer is not None and not callable(initializer): - raise TypeError('initializer must be a callable') - - self._processes = processes - try: - self._repopulate_pool() - except Exception: - for p in self._pool: - if p.exitcode is None: - p.terminate() - for p in self._pool: - p.join() - raise - - sentinels = self._get_sentinels() - - self._worker_handler = threading.Thread( - target=Pool._handle_workers, - args=(self._cache, self._taskqueue, self._ctx, self.Process, - self._processes, self._pool, self._inqueue, self._outqueue, - self._initializer, self._initargs, self._maxtasksperchild, - self._wrap_exception, sentinels, self._change_notifier) - ) - self._worker_handler.daemon = True - self._worker_handler._state = RUN - self._worker_handler.start() - - - self._task_handler = threading.Thread( - target=Pool._handle_tasks, - args=(self._taskqueue, self._quick_put, self._outqueue, - self._pool, self._cache) - ) - self._task_handler.daemon = True - self._task_handler._state = RUN - self._task_handler.start() - - self._result_handler = threading.Thread( - target=Pool._handle_results, - args=(self._outqueue, self._quick_get, self._cache) - ) - self._result_handler.daemon = True - self._result_handler._state = RUN - self._result_handler.start() - - self._terminate = util.Finalize( - self, self._terminate_pool, - args=(self._taskqueue, self._inqueue, self._outqueue, self._pool, - self._change_notifier, self._worker_handler, self._task_handler, - self._result_handler, self._cache), - exitpriority=15 - ) - self._state = RUN - - # Copy globals as function locals to make sure that they are available - # during Python shutdown when the Pool is destroyed. - def __del__(self, _warn=warnings.warn, RUN=RUN): - if self._state == RUN: - _warn(f"unclosed running multiprocessing pool {self!r}", - ResourceWarning, source=self) - if getattr(self, '_change_notifier', None) is not None: - self._change_notifier.put(None) - - def __repr__(self): - cls = self.__class__ - return (f'<{cls.__module__}.{cls.__qualname__} ' - f'state={self._state} ' - f'pool_size={len(self._pool)}>') - - def _get_sentinels(self): - task_queue_sentinels = [self._outqueue._reader] - self_notifier_sentinels = [self._change_notifier._reader] - return [*task_queue_sentinels, *self_notifier_sentinels] - - @staticmethod - def _get_worker_sentinels(workers): - return [worker.sentinel for worker in - workers if hasattr(worker, "sentinel")] - - @staticmethod - def _join_exited_workers(pool): - """Cleanup after any worker processes which have exited due to reaching - their specified lifetime. Returns True if any workers were cleaned up. - """ - cleaned = False - for i in reversed(range(len(pool))): - worker = pool[i] - if worker.exitcode is not None: - # worker exited - util.debug('cleaning up worker %d' % i) - worker.join() - cleaned = True - del pool[i] - return cleaned - - def _repopulate_pool(self): - return self._repopulate_pool_static(self._ctx, self.Process, - self._processes, - self._pool, self._inqueue, - self._outqueue, self._initializer, - self._initargs, - self._maxtasksperchild, - self._wrap_exception) - - @staticmethod - def _repopulate_pool_static(ctx, Process, processes, pool, inqueue, - outqueue, initializer, initargs, - maxtasksperchild, wrap_exception): - """Bring the number of pool processes up to the specified number, - for use after reaping workers which have exited. - """ - for i in range(processes - len(pool)): - w = Process(ctx, target=worker, - args=(inqueue, outqueue, - initializer, - initargs, maxtasksperchild, - wrap_exception)) - w.name = w.name.replace('Process', 'PoolWorker') - w.daemon = True - w.start() - pool.append(w) - util.debug('added worker') - - @staticmethod - def _maintain_pool(ctx, Process, processes, pool, inqueue, outqueue, - initializer, initargs, maxtasksperchild, - wrap_exception): - """Clean up any exited workers and start replacements for them. - """ - if Pool._join_exited_workers(pool): - Pool._repopulate_pool_static(ctx, Process, processes, pool, - inqueue, outqueue, initializer, - initargs, maxtasksperchild, - wrap_exception) - - def _setup_queues(self): - self._inqueue = self._ctx.SimpleQueue() - self._outqueue = self._ctx.SimpleQueue() - self._quick_put = self._inqueue._writer.send - self._quick_get = self._outqueue._reader.recv - - def _check_running(self): - if self._state != RUN: - raise ValueError("Pool not running") - - def apply(self, func, args=(), kwds={}): - ''' - Equivalent of `func(*args, **kwds)`. - Pool must be running. - ''' - return self.apply_async(func, args, kwds).get() - - def map(self, func, iterable, chunksize=None): - ''' - Apply `func` to each element in `iterable`, collecting the results - in a list that is returned. - ''' - return self._map_async(func, iterable, mapstar, chunksize).get() - - def starmap(self, func, iterable, chunksize=None): - ''' - Like `map()` method but the elements of the `iterable` are expected to - be iterables as well and will be unpacked as arguments. Hence - `func` and (a, b) becomes func(a, b). - ''' - return self._map_async(func, iterable, starmapstar, chunksize).get() - - def starmap_async(self, func, iterable, chunksize=None, callback=None, - error_callback=None): - ''' - Asynchronous version of `starmap()` method. - ''' - return self._map_async(func, iterable, starmapstar, chunksize, - callback, error_callback) - - def _guarded_task_generation(self, result_job, func, iterable): - '''Provides a generator of tasks for imap and imap_unordered with - appropriate handling for iterables which throw exceptions during - iteration.''' - try: - i = -1 - for i, x in enumerate(iterable): - yield (result_job, i, func, (x,), {}) - except Exception as e: - yield (result_job, i+1, _helper_reraises_exception, (e,), {}) - - def imap(self, func, iterable, chunksize=1): - ''' - Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. - ''' - self._check_running() - if chunksize == 1: - result = IMapIterator(self) - self._taskqueue.put( - ( - self._guarded_task_generation(result._job, func, iterable), - result._set_length - )) - return result - else: - if chunksize < 1: - raise ValueError( - "Chunksize must be 1+, not {0:n}".format( - chunksize)) - task_batches = Pool._get_tasks(func, iterable, chunksize) - result = IMapIterator(self) - self._taskqueue.put( - ( - self._guarded_task_generation(result._job, - mapstar, - task_batches), - result._set_length - )) - return (item for chunk in result for item in chunk) - - def imap_unordered(self, func, iterable, chunksize=1): - ''' - Like `imap()` method but ordering of results is arbitrary. - ''' - self._check_running() - if chunksize == 1: - result = IMapUnorderedIterator(self) - self._taskqueue.put( - ( - self._guarded_task_generation(result._job, func, iterable), - result._set_length - )) - return result - else: - if chunksize < 1: - raise ValueError( - "Chunksize must be 1+, not {0!r}".format(chunksize)) - task_batches = Pool._get_tasks(func, iterable, chunksize) - result = IMapUnorderedIterator(self) - self._taskqueue.put( - ( - self._guarded_task_generation(result._job, - mapstar, - task_batches), - result._set_length - )) - return (item for chunk in result for item in chunk) - - def apply_async(self, func, args=(), kwds={}, callback=None, - error_callback=None): - ''' - Asynchronous version of `apply()` method. - ''' - self._check_running() - result = ApplyResult(self, callback, error_callback) - self._taskqueue.put(([(result._job, 0, func, args, kwds)], None)) - return result - - def map_async(self, func, iterable, chunksize=None, callback=None, - error_callback=None): - ''' - Asynchronous version of `map()` method. - ''' - return self._map_async(func, iterable, mapstar, chunksize, callback, - error_callback) - - def _map_async(self, func, iterable, mapper, chunksize=None, callback=None, - error_callback=None): - ''' - Helper function to implement map, starmap and their async counterparts. - ''' - self._check_running() - if not hasattr(iterable, '__len__'): - iterable = list(iterable) - - if chunksize is None: - chunksize, extra = divmod(len(iterable), len(self._pool) * 4) - if extra: - chunksize += 1 - if len(iterable) == 0: - chunksize = 0 - - task_batches = Pool._get_tasks(func, iterable, chunksize) - result = MapResult(self, chunksize, len(iterable), callback, - error_callback=error_callback) - self._taskqueue.put( - ( - self._guarded_task_generation(result._job, - mapper, - task_batches), - None - ) - ) - return result - - @staticmethod - def _wait_for_updates(sentinels, change_notifier, timeout=None): - wait(sentinels, timeout=timeout) - while not change_notifier.empty(): - change_notifier.get() - - @classmethod - def _handle_workers(cls, cache, taskqueue, ctx, Process, processes, - pool, inqueue, outqueue, initializer, initargs, - maxtasksperchild, wrap_exception, sentinels, - change_notifier): - thread = threading.current_thread() - - # Keep maintaining workers until the cache gets drained, unless the pool - # is terminated. - while thread._state == RUN or (cache and thread._state != TERMINATE): - cls._maintain_pool(ctx, Process, processes, pool, inqueue, - outqueue, initializer, initargs, - maxtasksperchild, wrap_exception) - - current_sentinels = [*cls._get_worker_sentinels(pool), *sentinels] - - cls._wait_for_updates(current_sentinels, change_notifier) - # send sentinel to stop workers - taskqueue.put(None) - util.debug('worker handler exiting') - - @staticmethod - def _handle_tasks(taskqueue, put, outqueue, pool, cache): - thread = threading.current_thread() - - for taskseq, set_length in iter(taskqueue.get, None): - task = None - try: - # iterating taskseq cannot fail - for task in taskseq: - if thread._state != RUN: - util.debug('task handler found thread._state != RUN') - break - try: - put(task) - except Exception as e: - job, idx = task[:2] - try: - cache[job]._set(idx, (False, e)) - except KeyError: - pass - else: - if set_length: - util.debug('doing set_length()') - idx = task[1] if task else -1 - set_length(idx + 1) - continue - break - finally: - task = taskseq = job = None - else: - util.debug('task handler got sentinel') - - try: - # tell result handler to finish when cache is empty - util.debug('task handler sending sentinel to result handler') - outqueue.put(None) - - # tell workers there is no more work - util.debug('task handler sending sentinel to workers') - for p in pool: - put(None) - except OSError: - util.debug('task handler got OSError when sending sentinels') - - util.debug('task handler exiting') - - @staticmethod - def _handle_results(outqueue, get, cache): - thread = threading.current_thread() - - while 1: - try: - task = get() - except (OSError, EOFError): - util.debug('result handler got EOFError/OSError -- exiting') - return - - if thread._state != RUN: - assert thread._state == TERMINATE, "Thread not in TERMINATE" - util.debug('result handler found thread._state=TERMINATE') - break - - if task is None: - util.debug('result handler got sentinel') - break - - job, i, obj = task - try: - cache[job]._set(i, obj) - except KeyError: - pass - task = job = obj = None - - while cache and thread._state != TERMINATE: - try: - task = get() - except (OSError, EOFError): - util.debug('result handler got EOFError/OSError -- exiting') - return - - if task is None: - util.debug('result handler ignoring extra sentinel') - continue - job, i, obj = task - try: - cache[job]._set(i, obj) - except KeyError: - pass - task = job = obj = None - - if hasattr(outqueue, '_reader'): - util.debug('ensuring that outqueue is not full') - # If we don't make room available in outqueue then - # attempts to add the sentinel (None) to outqueue may - # block. There is guaranteed to be no more than 2 sentinels. - try: - for i in range(10): - if not outqueue._reader.poll(): - break - get() - except (OSError, EOFError): - pass - - util.debug('result handler exiting: len(cache)=%s, thread._state=%s', - len(cache), thread._state) - - @staticmethod - def _get_tasks(func, it, size): - it = iter(it) - while 1: - x = tuple(itertools.islice(it, size)) - if not x: - return - yield (func, x) - - def __reduce__(self): - raise NotImplementedError( - 'pool objects cannot be passed between processes or pickled' - ) - - def close(self): - util.debug('closing pool') - if self._state == RUN: - self._state = CLOSE - self._worker_handler._state = CLOSE - self._change_notifier.put(None) - - def terminate(self): - util.debug('terminating pool') - self._state = TERMINATE - self._terminate() - - def join(self): - util.debug('joining pool') - if self._state == RUN: - raise ValueError("Pool is still running") - elif self._state not in (CLOSE, TERMINATE): - raise ValueError("In unknown state") - self._worker_handler.join() - self._task_handler.join() - self._result_handler.join() - for p in self._pool: - p.join() - - @staticmethod - def _help_stuff_finish(inqueue, task_handler, size): - # task_handler may be blocked trying to put items on inqueue - util.debug('removing tasks from inqueue until task handler finished') - inqueue._rlock.acquire() - while task_handler.is_alive() and inqueue._reader.poll(): - inqueue._reader.recv() - time.sleep(0) - - @classmethod - def _terminate_pool(cls, taskqueue, inqueue, outqueue, pool, change_notifier, - worker_handler, task_handler, result_handler, cache): - # this is guaranteed to only be called once - util.debug('finalizing pool') - - # Notify that the worker_handler state has been changed so the - # _handle_workers loop can be unblocked (and exited) in order to - # send the finalization sentinel all the workers. - worker_handler._state = TERMINATE - change_notifier.put(None) - - task_handler._state = TERMINATE - - util.debug('helping task handler/workers to finish') - cls._help_stuff_finish(inqueue, task_handler, len(pool)) - - if (not result_handler.is_alive()) and (len(cache) != 0): - raise AssertionError( - "Cannot have cache with result_handler not alive") - - result_handler._state = TERMINATE - change_notifier.put(None) - outqueue.put(None) # sentinel - - # We must wait for the worker handler to exit before terminating - # workers because we don't want workers to be restarted behind our back. - util.debug('joining worker handler') - if threading.current_thread() is not worker_handler: - worker_handler.join() - - # Terminate workers which haven't already finished. - if pool and hasattr(pool[0], 'terminate'): - util.debug('terminating workers') - for p in pool: - if p.exitcode is None: - p.terminate() - - util.debug('joining task handler') - if threading.current_thread() is not task_handler: - task_handler.join() - - util.debug('joining result handler') - if threading.current_thread() is not result_handler: - result_handler.join() - - if pool and hasattr(pool[0], 'terminate'): - util.debug('joining pool workers') - for p in pool: - if p.is_alive(): - # worker has not yet exited - util.debug('cleaning up worker %d' % p.pid) - p.join() - - def __enter__(self): - self._check_running() - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.terminate() - -# -# Class whose instances are returned by `Pool.apply_async()` -# - -class ApplyResult(object): - - def __init__(self, pool, callback, error_callback): - self._pool = pool - self._event = threading.Event() - self._job = next(job_counter) - self._cache = pool._cache - self._callback = callback - self._error_callback = error_callback - self._cache[self._job] = self - - def ready(self): - return self._event.is_set() - - def successful(self): - if not self.ready(): - raise ValueError("{0!r} not ready".format(self)) - return self._success - - def wait(self, timeout=None): - self._event.wait(timeout) - - def get(self, timeout=None): - self.wait(timeout) - if not self.ready(): - raise TimeoutError - if self._success: - return self._value - else: - raise self._value - - def _set(self, i, obj): - self._success, self._value = obj - if self._callback and self._success: - self._callback(self._value) - if self._error_callback and not self._success: - self._error_callback(self._value) - self._event.set() - del self._cache[self._job] - self._pool = None - - __class_getitem__ = classmethod(types.GenericAlias) - -AsyncResult = ApplyResult # create alias -- see #17805 - -# -# Class whose instances are returned by `Pool.map_async()` -# - -class MapResult(ApplyResult): - - def __init__(self, pool, chunksize, length, callback, error_callback): - ApplyResult.__init__(self, pool, callback, - error_callback=error_callback) - self._success = True - self._value = [None] * length - self._chunksize = chunksize - if chunksize <= 0: - self._number_left = 0 - self._event.set() - del self._cache[self._job] - else: - self._number_left = length//chunksize + bool(length % chunksize) - - def _set(self, i, success_result): - self._number_left -= 1 - success, result = success_result - if success and self._success: - self._value[i*self._chunksize:(i+1)*self._chunksize] = result - if self._number_left == 0: - if self._callback: - self._callback(self._value) - del self._cache[self._job] - self._event.set() - self._pool = None - else: - if not success and self._success: - # only store first exception - self._success = False - self._value = result - if self._number_left == 0: - # only consider the result ready once all jobs are done - if self._error_callback: - self._error_callback(self._value) - del self._cache[self._job] - self._event.set() - self._pool = None - -# -# Class whose instances are returned by `Pool.imap()` -# - -class IMapIterator(object): - - def __init__(self, pool): - self._pool = pool - self._cond = threading.Condition(threading.Lock()) - self._job = next(job_counter) - self._cache = pool._cache - self._items = collections.deque() - self._index = 0 - self._length = None - self._unsorted = {} - self._cache[self._job] = self - - def __iter__(self): - return self - - def next(self, timeout=None): - with self._cond: - try: - item = self._items.popleft() - except IndexError: - if self._index == self._length: - self._pool = None - raise StopIteration from None - self._cond.wait(timeout) - try: - item = self._items.popleft() - except IndexError: - if self._index == self._length: - self._pool = None - raise StopIteration from None - raise TimeoutError from None - - success, value = item - if success: - return value - raise value - - __next__ = next # XXX - - def _set(self, i, obj): - with self._cond: - if self._index == i: - self._items.append(obj) - self._index += 1 - while self._index in self._unsorted: - obj = self._unsorted.pop(self._index) - self._items.append(obj) - self._index += 1 - self._cond.notify() - else: - self._unsorted[i] = obj - - if self._index == self._length: - del self._cache[self._job] - self._pool = None - - def _set_length(self, length): - with self._cond: - self._length = length - if self._index == self._length: - self._cond.notify() - del self._cache[self._job] - self._pool = None - -# -# Class whose instances are returned by `Pool.imap_unordered()` -# - -class IMapUnorderedIterator(IMapIterator): - - def _set(self, i, obj): - with self._cond: - self._items.append(obj) - self._index += 1 - self._cond.notify() - if self._index == self._length: - del self._cache[self._job] - self._pool = None - -# -# -# - -class ThreadPool(Pool): - _wrap_exception = False - - @staticmethod - def Process(ctx, *args, **kwds): - from .dummy import Process - return Process(*args, **kwds) - - def __init__(self, processes=None, initializer=None, initargs=()): - Pool.__init__(self, processes, initializer, initargs) - - def _setup_queues(self): - self._inqueue = queue.SimpleQueue() - self._outqueue = queue.SimpleQueue() - self._quick_put = self._inqueue.put - self._quick_get = self._outqueue.get - - def _get_sentinels(self): - return [self._change_notifier._reader] - - @staticmethod - def _get_worker_sentinels(workers): - return [] - - @staticmethod - def _help_stuff_finish(inqueue, task_handler, size): - # drain inqueue, and put sentinels at its head to make workers finish - try: - while True: - inqueue.get(block=False) - except queue.Empty: - pass - for i in range(size): - inqueue.put(None) - - def _wait_for_updates(self, sentinels, change_notifier, timeout): - time.sleep(timeout) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/popen_fork.py b/Python314_4_x86_Template/Lib/multiprocessing/popen_fork.py deleted file mode 100644 index 7affa1b98..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/popen_fork.py +++ /dev/null @@ -1,90 +0,0 @@ -import atexit -import os -import signal - -from . import util - -__all__ = ['Popen'] - -# -# Start child process using fork -# - -class Popen(object): - method = 'fork' - - def __init__(self, process_obj): - util._flush_std_streams() - self.returncode = None - self.finalizer = None - self._launch(process_obj) - - def duplicate_for_child(self, fd): - return fd - - def poll(self, flag=os.WNOHANG): - if self.returncode is None: - try: - pid, sts = os.waitpid(self.pid, flag) - except OSError: - # Child process not yet created. See #1731717 - # e.errno == errno.ECHILD == 10 - return None - if pid == self.pid: - self.returncode = os.waitstatus_to_exitcode(sts) - return self.returncode - - def wait(self, timeout=None): - if self.returncode is None: - if timeout is not None: - from multiprocessing.connection import wait - if not wait([self.sentinel], timeout): - return None - # This shouldn't block if wait() returned successfully. - return self.poll(os.WNOHANG if timeout == 0.0 else 0) - return self.returncode - - def _send_signal(self, sig): - if self.returncode is None: - try: - os.kill(self.pid, sig) - except ProcessLookupError: - pass - except OSError: - if self.wait(timeout=0.1) is None: - raise - - def interrupt(self): - self._send_signal(signal.SIGINT) - - def terminate(self): - self._send_signal(signal.SIGTERM) - - def kill(self): - self._send_signal(signal.SIGKILL) - - def _launch(self, process_obj): - code = 1 - parent_r, child_w = os.pipe() - child_r, parent_w = os.pipe() - self.pid = os.fork() - if self.pid == 0: - try: - atexit._clear() - atexit.register(util._exit_function) - os.close(parent_r) - os.close(parent_w) - code = process_obj._bootstrap(parent_sentinel=child_r) - finally: - atexit._run_exitfuncs() - os._exit(code) - else: - os.close(child_w) - os.close(child_r) - self.finalizer = util.Finalize(self, util.close_fds, - (parent_r, parent_w,)) - self.sentinel = parent_r - - def close(self): - if self.finalizer is not None: - self.finalizer() diff --git a/Python314_4_x86_Template/Lib/multiprocessing/popen_forkserver.py b/Python314_4_x86_Template/Lib/multiprocessing/popen_forkserver.py deleted file mode 100644 index a56eb9bf1..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/popen_forkserver.py +++ /dev/null @@ -1,74 +0,0 @@ -import io -import os - -from .context import reduction, set_spawning_popen -if not reduction.HAVE_SEND_HANDLE: - raise ImportError('No support for sending fds between processes') -from . import forkserver -from . import popen_fork -from . import spawn -from . import util - - -__all__ = ['Popen'] - -# -# Wrapper for an fd used while launching a process -# - -class _DupFd(object): - def __init__(self, ind): - self.ind = ind - def detach(self): - return forkserver.get_inherited_fds()[self.ind] - -# -# Start child process using a server process -# - -class Popen(popen_fork.Popen): - method = 'forkserver' - DupFd = _DupFd - - def __init__(self, process_obj): - self._fds = [] - super().__init__(process_obj) - - def duplicate_for_child(self, fd): - self._fds.append(fd) - return len(self._fds) - 1 - - def _launch(self, process_obj): - prep_data = spawn.get_preparation_data(process_obj._name) - buf = io.BytesIO() - set_spawning_popen(self) - try: - reduction.dump(prep_data, buf) - reduction.dump(process_obj, buf) - finally: - set_spawning_popen(None) - - self.sentinel, w = forkserver.connect_to_new_process(self._fds) - # Keep a duplicate of the data pipe's write end as a sentinel of the - # parent process used by the child process. - _parent_w = os.dup(w) - self.finalizer = util.Finalize(self, util.close_fds, - (_parent_w, self.sentinel)) - with open(w, 'wb', closefd=True) as f: - f.write(buf.getbuffer()) - self.pid = forkserver.read_signed(self.sentinel) - - def poll(self, flag=os.WNOHANG): - if self.returncode is None: - from multiprocessing.connection import wait - timeout = 0 if flag == os.WNOHANG else None - if not wait([self.sentinel], timeout): - return None - try: - self.returncode = forkserver.read_signed(self.sentinel) - except (OSError, EOFError): - # This should not happen usually, but perhaps the forkserver - # process itself got killed - self.returncode = 255 - - return self.returncode diff --git a/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_posix.py b/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_posix.py deleted file mode 100644 index cccd659ae..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_posix.py +++ /dev/null @@ -1,76 +0,0 @@ -import io -import os - -from .context import reduction, set_spawning_popen -from . import popen_fork -from . import spawn -from . import util - -__all__ = ['Popen'] - - -# -# Wrapper for an fd used while launching a process -# - -class _DupFd(object): - def __init__(self, fd): - self.fd = fd - def detach(self): - return self.fd - -# -# Start child process using a fresh interpreter -# - -class Popen(popen_fork.Popen): - method = 'spawn' - DupFd = _DupFd - - def __init__(self, process_obj): - self._fds = [] - super().__init__(process_obj) - - def duplicate_for_child(self, fd): - self._fds.append(fd) - return fd - - def _launch(self, process_obj): - from . import resource_tracker - tracker_fd = resource_tracker.getfd() - self._fds.append(tracker_fd) - prep_data = spawn.get_preparation_data(process_obj._name) - fp = io.BytesIO() - set_spawning_popen(self) - try: - reduction.dump(prep_data, fp) - reduction.dump(process_obj, fp) - finally: - set_spawning_popen(None) - - parent_r = child_w = child_r = parent_w = None - try: - parent_r, child_w = os.pipe() - child_r, parent_w = os.pipe() - cmd = spawn.get_command_line(tracker_fd=tracker_fd, - pipe_handle=child_r) - self._fds.extend([child_r, child_w]) - self.pid = util.spawnv_passfds(spawn.get_executable(), - cmd, self._fds) - os.close(child_r) - child_r = None - os.close(child_w) - child_w = None - self.sentinel = parent_r - with open(parent_w, 'wb', closefd=False) as f: - f.write(fp.getbuffer()) - finally: - fds_to_close = [] - for fd in (parent_r, parent_w): - if fd is not None: - fds_to_close.append(fd) - self.finalizer = util.Finalize(self, util.close_fds, fds_to_close) - - for fd in (child_r, child_w): - if fd is not None: - os.close(fd) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_win32.py b/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_win32.py deleted file mode 100644 index 62fb0ddbf..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/popen_spawn_win32.py +++ /dev/null @@ -1,147 +0,0 @@ -import os -import msvcrt -import signal -import sys -import _winapi -from subprocess import STARTUPINFO, STARTF_FORCEOFFFEEDBACK - -from .context import reduction, get_spawning_popen, set_spawning_popen -from . import spawn -from . import util - -__all__ = ['Popen'] - -# -# -# - -# Exit code used by Popen.terminate() -TERMINATE = 0x10000 -WINEXE = (sys.platform == 'win32' and getattr(sys, 'frozen', False)) -WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") - - -def _path_eq(p1, p2): - return p1 == p2 or os.path.normcase(p1) == os.path.normcase(p2) - -WINENV = not _path_eq(sys.executable, sys._base_executable) - - -def _close_handles(*handles): - for handle in handles: - _winapi.CloseHandle(handle) - - -# -# We define a Popen class similar to the one from subprocess, but -# whose constructor takes a process object as its argument. -# - -class Popen(object): - ''' - Start a subprocess to run the code of a process object - ''' - method = 'spawn' - - def __init__(self, process_obj): - prep_data = spawn.get_preparation_data(process_obj._name) - - # read end of pipe will be duplicated by the child process - # -- see spawn_main() in spawn.py. - # - # bpo-33929: Previously, the read end of pipe was "stolen" by the child - # process, but it leaked a handle if the child process had been - # terminated before it could steal the handle from the parent process. - rhandle, whandle = _winapi.CreatePipe(None, 0) - wfd = msvcrt.open_osfhandle(whandle, 0) - cmd = spawn.get_command_line(parent_pid=os.getpid(), - pipe_handle=rhandle) - - python_exe = spawn.get_executable() - - # bpo-35797: When running in a venv, we bypass the redirect - # executor and launch our base Python. - if WINENV and _path_eq(python_exe, sys.executable): - cmd[0] = python_exe = sys._base_executable - env = os.environ.copy() - env["__PYVENV_LAUNCHER__"] = sys.executable - else: - env = None - - cmd = ' '.join('"%s"' % x for x in cmd) - - with open(wfd, 'wb', closefd=True) as to_child: - # start process - try: - hp, ht, pid, tid = _winapi.CreateProcess( - python_exe, cmd, - None, None, False, 0, env, None, - STARTUPINFO(dwFlags=STARTF_FORCEOFFFEEDBACK)) - _winapi.CloseHandle(ht) - except: - _winapi.CloseHandle(rhandle) - raise - - # set attributes of self - self.pid = pid - self.returncode = None - self._handle = hp - self.sentinel = int(hp) - self.finalizer = util.Finalize(self, _close_handles, - (self.sentinel, int(rhandle))) - - # send information to child - set_spawning_popen(self) - try: - reduction.dump(prep_data, to_child) - reduction.dump(process_obj, to_child) - finally: - set_spawning_popen(None) - - def duplicate_for_child(self, handle): - assert self is get_spawning_popen() - return reduction.duplicate(handle, self.sentinel) - - def wait(self, timeout=None): - if self.returncode is not None: - return self.returncode - - if timeout is None: - msecs = _winapi.INFINITE - else: - msecs = max(0, int(timeout * 1000 + 0.5)) - - res = _winapi.WaitForSingleObject(int(self._handle), msecs) - if res == _winapi.WAIT_OBJECT_0: - code = _winapi.GetExitCodeProcess(self._handle) - if code == TERMINATE: - code = -signal.SIGTERM - self.returncode = code - - return self.returncode - - def poll(self): - return self.wait(timeout=0) - - def terminate(self): - if self.returncode is not None: - return - - try: - _winapi.TerminateProcess(int(self._handle), TERMINATE) - except PermissionError: - # ERROR_ACCESS_DENIED (winerror 5) is received when the - # process already died. - code = _winapi.GetExitCodeProcess(int(self._handle)) - if code == _winapi.STILL_ACTIVE: - raise - - # gh-113009: Don't set self.returncode. Even if GetExitCodeProcess() - # returns an exit code different than STILL_ACTIVE, the process can - # still be running. Only set self.returncode once WaitForSingleObject() - # returns WAIT_OBJECT_0 in wait(). - - kill = terminate - - def close(self): - self.finalizer() diff --git a/Python314_4_x86_Template/Lib/multiprocessing/process.py b/Python314_4_x86_Template/Lib/multiprocessing/process.py deleted file mode 100644 index 262513f29..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/process.py +++ /dev/null @@ -1,443 +0,0 @@ -# -# Module providing the `Process` class which emulates `threading.Thread` -# -# multiprocessing/process.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = ['BaseProcess', 'current_process', 'active_children', - 'parent_process'] - -# -# Imports -# - -import os -import sys -import signal -import itertools -import threading -from _weakrefset import WeakSet - -# -# -# - -try: - ORIGINAL_DIR = os.path.abspath(os.getcwd()) -except OSError: - ORIGINAL_DIR = None - -# -# Public functions -# - -def current_process(): - ''' - Return process object representing the current process - ''' - return _current_process - -def active_children(): - ''' - Return list of process objects corresponding to live child processes - ''' - _cleanup() - return list(_children) - - -def parent_process(): - ''' - Return process object representing the parent process - ''' - return _parent_process - -# -# -# - -def _cleanup(): - # check for processes which have finished - for p in list(_children): - if (child_popen := p._popen) and child_popen.poll() is not None: - _children.discard(p) - -# -# The `Process` class -# - -class BaseProcess(object): - ''' - Process objects represent activity that is run in a separate process - - The class is analogous to `threading.Thread` - ''' - def _Popen(self): - raise NotImplementedError - - def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, - *, daemon=None): - assert group is None, 'group argument must be None for now' - count = next(_process_counter) - self._identity = _current_process._identity + (count,) - self._config = _current_process._config.copy() - self._parent_pid = os.getpid() - self._parent_name = _current_process.name - self._popen = None - self._closed = False - self._target = target - self._args = tuple(args) - self._kwargs = dict(kwargs) if kwargs else {} - self._name = name or type(self).__name__ + '-' + \ - ':'.join(str(i) for i in self._identity) - if daemon is not None: - self.daemon = daemon - _dangling.add(self) - - def _check_closed(self): - if self._closed: - raise ValueError("process object is closed") - - def run(self): - ''' - Method to be run in sub-process; can be overridden in sub-class - ''' - if self._target: - self._target(*self._args, **self._kwargs) - - def start(self): - ''' - Start child process - ''' - self._check_closed() - assert self._popen is None, 'cannot start a process twice' - assert self._parent_pid == os.getpid(), \ - 'can only start a process object created by current process' - assert not _current_process._config.get('daemon'), \ - 'daemonic processes are not allowed to have children' - _cleanup() - self._popen = self._Popen(self) - self._sentinel = self._popen.sentinel - # Avoid a refcycle if the target function holds an indirect - # reference to the process object (see bpo-30775) - del self._target, self._args, self._kwargs - _children.add(self) - - def interrupt(self): - ''' - Terminate process; sends SIGINT signal - ''' - self._check_closed() - self._popen.interrupt() - - def terminate(self): - ''' - Terminate process; sends SIGTERM signal or uses TerminateProcess() - ''' - self._check_closed() - self._popen.terminate() - - def kill(self): - ''' - Terminate process; sends SIGKILL signal or uses TerminateProcess() - ''' - self._check_closed() - self._popen.kill() - - def join(self, timeout=None): - ''' - Wait until child process terminates - ''' - self._check_closed() - assert self._parent_pid == os.getpid(), 'can only join a child process' - assert self._popen is not None, 'can only join a started process' - res = self._popen.wait(timeout) - if res is not None: - _children.discard(self) - - def is_alive(self): - ''' - Return whether process is alive - ''' - self._check_closed() - if self is _current_process: - return True - assert self._parent_pid == os.getpid(), 'can only test a child process' - - if self._popen is None: - return False - - returncode = self._popen.poll() - if returncode is None: - return True - else: - _children.discard(self) - return False - - def close(self): - ''' - Close the Process object. - - This method releases resources held by the Process object. It is - an error to call this method if the child process is still running. - ''' - if self._popen is not None: - if self._popen.poll() is None: - raise ValueError("Cannot close a process while it is still running. " - "You should first call join() or terminate().") - self._popen.close() - self._popen = None - del self._sentinel - _children.discard(self) - self._closed = True - - @property - def name(self): - return self._name - - @name.setter - def name(self, name): - assert isinstance(name, str), 'name must be a string' - self._name = name - - @property - def daemon(self): - ''' - Return whether process is a daemon - ''' - return self._config.get('daemon', False) - - @daemon.setter - def daemon(self, daemonic): - ''' - Set whether process is a daemon - ''' - assert self._popen is None, 'process has already started' - self._config['daemon'] = daemonic - - @property - def authkey(self): - return self._config['authkey'] - - @authkey.setter - def authkey(self, authkey): - ''' - Set authorization key of process - ''' - self._config['authkey'] = AuthenticationString(authkey) - - @property - def exitcode(self): - ''' - Return exit code of process or `None` if it has yet to stop - ''' - self._check_closed() - if self._popen is None: - return self._popen - return self._popen.poll() - - @property - def ident(self): - ''' - Return identifier (PID) of process or `None` if it has yet to start - ''' - self._check_closed() - if self is _current_process: - return os.getpid() - else: - return self._popen and self._popen.pid - - pid = ident - - @property - def sentinel(self): - ''' - Return a file descriptor (Unix) or handle (Windows) suitable for - waiting for process termination. - ''' - self._check_closed() - try: - return self._sentinel - except AttributeError: - raise ValueError("process not started") from None - - def __repr__(self): - exitcode = None - if self is _current_process: - status = 'started' - elif self._closed: - status = 'closed' - elif self._parent_pid != os.getpid(): - status = 'unknown' - elif self._popen is None: - status = 'initial' - else: - exitcode = self._popen.poll() - if exitcode is not None: - status = 'stopped' - else: - status = 'started' - - info = [type(self).__name__, 'name=%r' % self._name] - if self._popen is not None: - info.append('pid=%s' % self._popen.pid) - info.append('parent=%s' % self._parent_pid) - info.append(status) - if exitcode is not None: - exitcode = _exitcode_to_name.get(exitcode, exitcode) - info.append('exitcode=%s' % exitcode) - if self.daemon: - info.append('daemon') - return '<%s>' % ' '.join(info) - - ## - - def _bootstrap(self, parent_sentinel=None): - from . import util, context - global _current_process, _parent_process, _process_counter, _children - - try: - if self._start_method is not None: - context._force_start_method(self._start_method) - _process_counter = itertools.count(1) - _children = set() - util._close_stdin() - old_process = _current_process - _current_process = self - _parent_process = _ParentProcess( - self._parent_name, self._parent_pid, parent_sentinel) - if threading._HAVE_THREAD_NATIVE_ID: - threading.main_thread()._set_native_id() - try: - self._after_fork() - finally: - # delay finalization of the old process object until after - # _run_after_forkers() is executed - del old_process - util.info('child process calling self.run()') - self.run() - exitcode = 0 - except SystemExit as e: - if e.code is None: - exitcode = 0 - elif isinstance(e.code, int): - exitcode = e.code - else: - sys.stderr.write(str(e.code) + '\n') - exitcode = 1 - except: - exitcode = 1 - import traceback - sys.stderr.write('Process %s:\n' % self.name) - traceback.print_exc() - finally: - threading._shutdown() - util.info('process exiting with exitcode %d' % exitcode) - util._flush_std_streams() - - return exitcode - - @staticmethod - def _after_fork(): - from . import util - util._finalizer_registry.clear() - util._run_after_forkers() - - -# -# We subclass bytes to avoid accidental transmission of auth keys over network -# - -class AuthenticationString(bytes): - def __reduce__(self): - from .context import get_spawning_popen - if get_spawning_popen() is None: - raise TypeError( - 'Pickling an AuthenticationString object is ' - 'disallowed for security reasons' - ) - return AuthenticationString, (bytes(self),) - - -# -# Create object representing the parent process -# - -class _ParentProcess(BaseProcess): - - def __init__(self, name, pid, sentinel): - self._identity = () - self._name = name - self._pid = pid - self._parent_pid = None - self._popen = None - self._closed = False - self._sentinel = sentinel - self._config = {} - - def is_alive(self): - from multiprocessing.connection import wait - return not wait([self._sentinel], timeout=0) - - @property - def ident(self): - return self._pid - - def join(self, timeout=None): - ''' - Wait until parent process terminates - ''' - from multiprocessing.connection import wait - wait([self._sentinel], timeout=timeout) - - pid = ident - -# -# Create object representing the main process -# - -class _MainProcess(BaseProcess): - - def __init__(self): - self._identity = () - self._name = 'MainProcess' - self._parent_pid = None - self._popen = None - self._closed = False - self._config = {'authkey': AuthenticationString(os.urandom(32)), - 'semprefix': '/mp'} - # Note that some versions of FreeBSD only allow named - # semaphores to have names of up to 14 characters. Therefore - # we choose a short prefix. - # - # On MacOSX in a sandbox it may be necessary to use a - # different prefix -- see #19478. - # - # Everything in self._config will be inherited by descendant - # processes. - - def close(self): - pass - - -_parent_process = None -_current_process = _MainProcess() -_process_counter = itertools.count(1) -_children = set() -del _MainProcess - -# -# Give names to some return codes -# - -_exitcode_to_name = {} - -for name, signum in list(signal.__dict__.items()): - if name[:3]=='SIG' and '_' not in name: - _exitcode_to_name[-signum] = f'-{name}' -del name, signum - -# For debug and leak testing -_dangling = WeakSet() diff --git a/Python314_4_x86_Template/Lib/multiprocessing/queues.py b/Python314_4_x86_Template/Lib/multiprocessing/queues.py deleted file mode 100644 index 981599acf..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/queues.py +++ /dev/null @@ -1,399 +0,0 @@ -# -# Module implementing queues -# -# multiprocessing/queues.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = ['Queue', 'SimpleQueue', 'JoinableQueue'] - -import sys -import os -import threading -import collections -import time -import types -import weakref -import errno - -from queue import Empty, Full - -from . import connection -from . import context -_ForkingPickler = context.reduction.ForkingPickler - -from .util import debug, info, Finalize, register_after_fork, is_exiting - -# -# Queue type using a pipe, buffer and thread -# - -class Queue(object): - - def __init__(self, maxsize=0, *, ctx): - if maxsize <= 0: - # Can raise ImportError (see issues #3770 and #23400) - from .synchronize import SEM_VALUE_MAX as maxsize - self._maxsize = maxsize - self._reader, self._writer = connection.Pipe(duplex=False) - self._rlock = ctx.Lock() - self._opid = os.getpid() - if sys.platform == 'win32': - self._wlock = None - else: - self._wlock = ctx.Lock() - self._sem = ctx.BoundedSemaphore(maxsize) - # For use by concurrent.futures - self._ignore_epipe = False - self._reset() - - if sys.platform != 'win32': - register_after_fork(self, Queue._after_fork) - - def __getstate__(self): - context.assert_spawning(self) - return (self._ignore_epipe, self._maxsize, self._reader, self._writer, - self._rlock, self._wlock, self._sem, self._opid) - - def __setstate__(self, state): - (self._ignore_epipe, self._maxsize, self._reader, self._writer, - self._rlock, self._wlock, self._sem, self._opid) = state - self._reset() - - def _after_fork(self): - debug('Queue._after_fork()') - self._reset(after_fork=True) - - def _reset(self, after_fork=False): - if after_fork: - self._notempty._at_fork_reinit() - else: - self._notempty = threading.Condition(threading.Lock()) - self._buffer = collections.deque() - self._thread = None - self._jointhread = None - self._joincancelled = False - self._closed = False - self._close = None - self._send_bytes = self._writer.send_bytes - self._recv_bytes = self._reader.recv_bytes - self._poll = self._reader.poll - - def put(self, obj, block=True, timeout=None): - if self._closed: - raise ValueError(f"Queue {self!r} is closed") - if not self._sem.acquire(block, timeout): - raise Full - - with self._notempty: - if self._thread is None: - self._start_thread() - self._buffer.append(obj) - self._notempty.notify() - - def get(self, block=True, timeout=None): - if self._closed: - raise ValueError(f"Queue {self!r} is closed") - if block and timeout is None: - with self._rlock: - res = self._recv_bytes() - self._sem.release() - else: - if block: - deadline = time.monotonic() + timeout - if not self._rlock.acquire(block, timeout): - raise Empty - try: - if block: - timeout = deadline - time.monotonic() - if not self._poll(timeout): - raise Empty - elif not self._poll(): - raise Empty - res = self._recv_bytes() - self._sem.release() - finally: - self._rlock.release() - # unserialize the data after having released the lock - return _ForkingPickler.loads(res) - - def qsize(self): - # Raises NotImplementedError on Mac OSX because of broken sem_getvalue() - return self._maxsize - self._sem.get_value() - - def empty(self): - return not self._poll() - - def full(self): - return self._sem._semlock._is_zero() - - def get_nowait(self): - return self.get(False) - - def put_nowait(self, obj): - return self.put(obj, False) - - def close(self): - self._closed = True - close = self._close - if close: - self._close = None - close() - - def join_thread(self): - debug('Queue.join_thread()') - assert self._closed, "Queue {0!r} not closed".format(self) - if self._jointhread: - self._jointhread() - - def cancel_join_thread(self): - debug('Queue.cancel_join_thread()') - self._joincancelled = True - try: - self._jointhread.cancel() - except AttributeError: - pass - - def _terminate_broken(self): - # Close a Queue on error. - - # gh-94777: Prevent queue writing to a pipe which is no longer read. - self._reader.close() - - # gh-107219: Close the connection writer which can unblock - # Queue._feed() if it was stuck in send_bytes(). - if sys.platform == 'win32': - self._writer.close() - - self.close() - self.join_thread() - - def _start_thread(self): - debug('Queue._start_thread()') - - # Start thread which transfers data from buffer to pipe - self._buffer.clear() - self._thread = threading.Thread( - target=Queue._feed, - args=(self._buffer, self._notempty, self._send_bytes, - self._wlock, self._reader.close, self._writer.close, - self._ignore_epipe, self._on_queue_feeder_error, - self._sem), - name='QueueFeederThread', - daemon=True, - ) - - try: - debug('doing self._thread.start()') - self._thread.start() - debug('... done self._thread.start()') - except: - # gh-109047: During Python finalization, creating a thread - # can fail with RuntimeError. - self._thread = None - raise - - if not self._joincancelled: - self._jointhread = Finalize( - self._thread, Queue._finalize_join, - [weakref.ref(self._thread)], - exitpriority=-5 - ) - - # Send sentinel to the thread queue object when garbage collected - self._close = Finalize( - self, Queue._finalize_close, - [self._buffer, self._notempty], - exitpriority=10 - ) - - @staticmethod - def _finalize_join(twr): - debug('joining queue thread') - thread = twr() - if thread is not None: - thread.join() - debug('... queue thread joined') - else: - debug('... queue thread already dead') - - @staticmethod - def _finalize_close(buffer, notempty): - debug('telling queue thread to quit') - with notempty: - buffer.append(_sentinel) - notempty.notify() - - @staticmethod - def _feed(buffer, notempty, send_bytes, writelock, reader_close, - writer_close, ignore_epipe, onerror, queue_sem): - debug('starting thread to feed data to pipe') - nacquire = notempty.acquire - nrelease = notempty.release - nwait = notempty.wait - bpopleft = buffer.popleft - sentinel = _sentinel - if sys.platform != 'win32': - wacquire = writelock.acquire - wrelease = writelock.release - else: - wacquire = None - - while 1: - try: - nacquire() - try: - if not buffer: - nwait() - finally: - nrelease() - try: - while 1: - obj = bpopleft() - if obj is sentinel: - debug('feeder thread got sentinel -- exiting') - reader_close() - writer_close() - return - - # serialize the data before acquiring the lock - obj = _ForkingPickler.dumps(obj) - if wacquire is None: - send_bytes(obj) - else: - wacquire() - try: - send_bytes(obj) - finally: - wrelease() - except IndexError: - pass - except Exception as e: - if ignore_epipe and getattr(e, 'errno', 0) == errno.EPIPE: - return - # Since this runs in a daemon thread the resources it uses - # may be become unusable while the process is cleaning up. - # We ignore errors which happen after the process has - # started to cleanup. - if is_exiting(): - info('error in queue thread: %s', e) - return - else: - # Since the object has not been sent in the queue, we need - # to decrease the size of the queue. The error acts as - # if the object had been silently removed from the queue - # and this step is necessary to have a properly working - # queue. - queue_sem.release() - onerror(e, obj) - - @staticmethod - def _on_queue_feeder_error(e, obj): - """ - Private API hook called when feeding data in the background thread - raises an exception. For overriding by concurrent.futures. - """ - import traceback - traceback.print_exc() - - __class_getitem__ = classmethod(types.GenericAlias) - - -_sentinel = object() - -# -# A queue type which also supports join() and task_done() methods -# -# Note that if you do not call task_done() for each finished task then -# eventually the counter's semaphore may overflow causing Bad Things -# to happen. -# - -class JoinableQueue(Queue): - - def __init__(self, maxsize=0, *, ctx): - Queue.__init__(self, maxsize, ctx=ctx) - self._unfinished_tasks = ctx.Semaphore(0) - self._cond = ctx.Condition() - - def __getstate__(self): - return Queue.__getstate__(self) + (self._cond, self._unfinished_tasks) - - def __setstate__(self, state): - Queue.__setstate__(self, state[:-2]) - self._cond, self._unfinished_tasks = state[-2:] - - def put(self, obj, block=True, timeout=None): - if self._closed: - raise ValueError(f"Queue {self!r} is closed") - if not self._sem.acquire(block, timeout): - raise Full - - with self._notempty, self._cond: - if self._thread is None: - self._start_thread() - self._buffer.append(obj) - self._unfinished_tasks.release() - self._notempty.notify() - - def task_done(self): - with self._cond: - if not self._unfinished_tasks.acquire(False): - raise ValueError('task_done() called too many times') - if self._unfinished_tasks._semlock._is_zero(): - self._cond.notify_all() - - def join(self): - with self._cond: - if not self._unfinished_tasks._semlock._is_zero(): - self._cond.wait() - -# -# Simplified Queue type -- really just a locked pipe -# - -class SimpleQueue(object): - - def __init__(self, *, ctx): - self._reader, self._writer = connection.Pipe(duplex=False) - self._rlock = ctx.Lock() - self._poll = self._reader.poll - if sys.platform == 'win32': - self._wlock = None - else: - self._wlock = ctx.Lock() - - def close(self): - self._reader.close() - self._writer.close() - - def empty(self): - return not self._poll() - - def __getstate__(self): - context.assert_spawning(self) - return (self._reader, self._writer, self._rlock, self._wlock) - - def __setstate__(self, state): - (self._reader, self._writer, self._rlock, self._wlock) = state - self._poll = self._reader.poll - - def get(self): - with self._rlock: - res = self._reader.recv_bytes() - # unserialize the data after having released the lock - return _ForkingPickler.loads(res) - - def put(self, obj): - # serialize the data before acquiring the lock - obj = _ForkingPickler.dumps(obj) - if self._wlock is None: - # writes to a message oriented win32 pipe are atomic - self._writer.send_bytes(obj) - else: - with self._wlock: - self._writer.send_bytes(obj) - - __class_getitem__ = classmethod(types.GenericAlias) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/reduction.py b/Python314_4_x86_Template/Lib/multiprocessing/reduction.py deleted file mode 100644 index fcccd3eef..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/reduction.py +++ /dev/null @@ -1,281 +0,0 @@ -# -# Module which deals with pickling of objects. -# -# multiprocessing/reduction.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -from abc import ABCMeta -import copyreg -import functools -import io -import os -import pickle -import socket -import sys - -from . import context - -__all__ = ['send_handle', 'recv_handle', 'ForkingPickler', 'register', 'dump'] - - -HAVE_SEND_HANDLE = (sys.platform == 'win32' or - (hasattr(socket, 'CMSG_LEN') and - hasattr(socket, 'SCM_RIGHTS') and - hasattr(socket.socket, 'sendmsg'))) - -# -# Pickler subclass -# - -class ForkingPickler(pickle.Pickler): - '''Pickler subclass used by multiprocessing.''' - _extra_reducers = {} - _copyreg_dispatch_table = copyreg.dispatch_table - - def __init__(self, *args): - super().__init__(*args) - self.dispatch_table = self._copyreg_dispatch_table.copy() - self.dispatch_table.update(self._extra_reducers) - - @classmethod - def register(cls, type, reduce): - '''Register a reduce function for a type.''' - cls._extra_reducers[type] = reduce - - @classmethod - def dumps(cls, obj, protocol=None): - buf = io.BytesIO() - cls(buf, protocol).dump(obj) - return buf.getbuffer() - - loads = pickle.loads - -register = ForkingPickler.register - -def dump(obj, file, protocol=None): - '''Replacement for pickle.dump() using ForkingPickler.''' - ForkingPickler(file, protocol).dump(obj) - -# -# Platform specific definitions -# - -if sys.platform == 'win32': - # Windows - __all__ += ['DupHandle', 'duplicate', 'steal_handle'] - import _winapi - - def duplicate(handle, target_process=None, inheritable=False, - *, source_process=None): - '''Duplicate a handle. (target_process is a handle not a pid!)''' - current_process = _winapi.GetCurrentProcess() - if source_process is None: - source_process = current_process - if target_process is None: - target_process = current_process - return _winapi.DuplicateHandle( - source_process, handle, target_process, - 0, inheritable, _winapi.DUPLICATE_SAME_ACCESS) - - def steal_handle(source_pid, handle): - '''Steal a handle from process identified by source_pid.''' - source_process_handle = _winapi.OpenProcess( - _winapi.PROCESS_DUP_HANDLE, False, source_pid) - try: - return _winapi.DuplicateHandle( - source_process_handle, handle, - _winapi.GetCurrentProcess(), 0, False, - _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE) - finally: - _winapi.CloseHandle(source_process_handle) - - def send_handle(conn, handle, destination_pid): - '''Send a handle over a local connection.''' - dh = DupHandle(handle, _winapi.DUPLICATE_SAME_ACCESS, destination_pid) - conn.send(dh) - - def recv_handle(conn): - '''Receive a handle over a local connection.''' - return conn.recv().detach() - - class DupHandle(object): - '''Picklable wrapper for a handle.''' - def __init__(self, handle, access, pid=None): - if pid is None: - # We just duplicate the handle in the current process and - # let the receiving process steal the handle. - pid = os.getpid() - proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, pid) - try: - self._handle = _winapi.DuplicateHandle( - _winapi.GetCurrentProcess(), - handle, proc, access, False, 0) - finally: - _winapi.CloseHandle(proc) - self._access = access - self._pid = pid - - def detach(self): - '''Get the handle. This should only be called once.''' - # retrieve handle from process which currently owns it - if self._pid == os.getpid(): - # The handle has already been duplicated for this process. - return self._handle - # We must steal the handle from the process whose pid is self._pid. - proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, - self._pid) - try: - return _winapi.DuplicateHandle( - proc, self._handle, _winapi.GetCurrentProcess(), - self._access, False, _winapi.DUPLICATE_CLOSE_SOURCE) - finally: - _winapi.CloseHandle(proc) - -else: - # Unix - __all__ += ['DupFd', 'sendfds', 'recvfds'] - import array - - def sendfds(sock, fds): - '''Send an array of fds over an AF_UNIX socket.''' - fds = array.array('i', fds) - msg = bytes([len(fds) % 256]) - sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)]) - if sock.recv(1) != b'A': - raise RuntimeError('did not receive acknowledgement of fd') - - def recvfds(sock, size): - '''Receive an array of fds over an AF_UNIX socket.''' - a = array.array('i') - bytes_size = a.itemsize * size - msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_SPACE(bytes_size)) - if not msg and not ancdata: - raise EOFError - try: - # We send/recv an Ack byte after the fds to work around an old - # macOS bug; it isn't clear if this is still required but it - # makes unit testing fd sending easier. - # See: https://github.com/python/cpython/issues/58874 - sock.send(b'A') # Acknowledge - if len(ancdata) != 1: - raise RuntimeError('received %d items of ancdata' % - len(ancdata)) - cmsg_level, cmsg_type, cmsg_data = ancdata[0] - if (cmsg_level == socket.SOL_SOCKET and - cmsg_type == socket.SCM_RIGHTS): - if len(cmsg_data) % a.itemsize != 0: - raise ValueError - a.frombytes(cmsg_data) - if len(a) % 256 != msg[0]: - raise AssertionError( - "Len is {0:n} but msg[0] is {1!r}".format( - len(a), msg[0])) - return list(a) - except (ValueError, IndexError): - pass - raise RuntimeError('Invalid data received') - - def send_handle(conn, handle, destination_pid): - '''Send a handle over a local connection.''' - with socket.fromfd(conn.fileno(), socket.AF_UNIX, socket.SOCK_STREAM) as s: - sendfds(s, [handle]) - - def recv_handle(conn): - '''Receive a handle over a local connection.''' - with socket.fromfd(conn.fileno(), socket.AF_UNIX, socket.SOCK_STREAM) as s: - return recvfds(s, 1)[0] - - def DupFd(fd): - '''Return a wrapper for an fd.''' - popen_obj = context.get_spawning_popen() - if popen_obj is not None: - return popen_obj.DupFd(popen_obj.duplicate_for_child(fd)) - elif HAVE_SEND_HANDLE: - from . import resource_sharer - return resource_sharer.DupFd(fd) - else: - raise ValueError('SCM_RIGHTS appears not to be available') - -# -# Try making some callable types picklable -# - -def _reduce_method(m): - if m.__self__ is None: - return getattr, (m.__class__, m.__func__.__name__) - else: - return getattr, (m.__self__, m.__func__.__name__) -class _C: - def f(self): - pass -register(type(_C().f), _reduce_method) - - -def _reduce_method_descriptor(m): - return getattr, (m.__objclass__, m.__name__) -register(type(list.append), _reduce_method_descriptor) -register(type(int.__add__), _reduce_method_descriptor) - - -def _reduce_partial(p): - return _rebuild_partial, (p.func, p.args, p.keywords or {}) -def _rebuild_partial(func, args, keywords): - return functools.partial(func, *args, **keywords) -register(functools.partial, _reduce_partial) - -# -# Make sockets picklable -# - -if sys.platform == 'win32': - def _reduce_socket(s): - from .resource_sharer import DupSocket - return _rebuild_socket, (DupSocket(s),) - def _rebuild_socket(ds): - return ds.detach() - register(socket.socket, _reduce_socket) - -else: - def _reduce_socket(s): - df = DupFd(s.fileno()) - return _rebuild_socket, (df, s.family, s.type, s.proto) - def _rebuild_socket(df, family, type, proto): - fd = df.detach() - return socket.socket(family, type, proto, fileno=fd) - register(socket.socket, _reduce_socket) - - -class AbstractReducer(metaclass=ABCMeta): - '''Abstract base class for use in implementing a Reduction class - suitable for use in replacing the standard reduction mechanism - used in multiprocessing.''' - ForkingPickler = ForkingPickler - register = register - dump = dump - send_handle = send_handle - recv_handle = recv_handle - - if sys.platform == 'win32': - steal_handle = steal_handle - duplicate = duplicate - DupHandle = DupHandle - else: - sendfds = sendfds - recvfds = recvfds - DupFd = DupFd - - _reduce_method = _reduce_method - _reduce_method_descriptor = _reduce_method_descriptor - _rebuild_partial = _rebuild_partial - _reduce_socket = _reduce_socket - _rebuild_socket = _rebuild_socket - - def __init__(self, *args): - register(type(_C().f), _reduce_method) - register(type(list.append), _reduce_method_descriptor) - register(type(int.__add__), _reduce_method_descriptor) - register(functools.partial, _reduce_partial) - register(socket.socket, _reduce_socket) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/resource_sharer.py b/Python314_4_x86_Template/Lib/multiprocessing/resource_sharer.py deleted file mode 100644 index b8afb0fbe..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/resource_sharer.py +++ /dev/null @@ -1,154 +0,0 @@ -# -# We use a background thread for sharing fds on Unix, and for sharing sockets on -# Windows. -# -# A client which wants to pickle a resource registers it with the resource -# sharer and gets an identifier in return. The unpickling process will connect -# to the resource sharer, sends the identifier and its pid, and then receives -# the resource. -# - -import os -import signal -import socket -import sys -import threading - -from . import process -from .context import reduction -from . import util - -__all__ = ['stop'] - - -if sys.platform == 'win32': - __all__ += ['DupSocket'] - - class DupSocket(object): - '''Picklable wrapper for a socket.''' - def __init__(self, sock): - new_sock = sock.dup() - def send(conn, pid): - share = new_sock.share(pid) - conn.send_bytes(share) - self._id = _resource_sharer.register(send, new_sock.close) - - def detach(self): - '''Get the socket. This should only be called once.''' - with _resource_sharer.get_connection(self._id) as conn: - share = conn.recv_bytes() - return socket.fromshare(share) - -else: - __all__ += ['DupFd'] - - class DupFd(object): - '''Wrapper for fd which can be used at any time.''' - def __init__(self, fd): - new_fd = os.dup(fd) - def send(conn, pid): - reduction.send_handle(conn, new_fd, pid) - def close(): - os.close(new_fd) - self._id = _resource_sharer.register(send, close) - - def detach(self): - '''Get the fd. This should only be called once.''' - with _resource_sharer.get_connection(self._id) as conn: - return reduction.recv_handle(conn) - - -class _ResourceSharer(object): - '''Manager for resources using background thread.''' - def __init__(self): - self._key = 0 - self._cache = {} - self._lock = threading.Lock() - self._listener = None - self._address = None - self._thread = None - util.register_after_fork(self, _ResourceSharer._afterfork) - - def register(self, send, close): - '''Register resource, returning an identifier.''' - with self._lock: - if self._address is None: - self._start() - self._key += 1 - self._cache[self._key] = (send, close) - return (self._address, self._key) - - @staticmethod - def get_connection(ident): - '''Return connection from which to receive identified resource.''' - from .connection import Client - address, key = ident - c = Client(address, authkey=process.current_process().authkey) - c.send((key, os.getpid())) - return c - - def stop(self, timeout=None): - '''Stop the background thread and clear registered resources.''' - from .connection import Client - with self._lock: - if self._address is not None: - c = Client(self._address, - authkey=process.current_process().authkey) - c.send(None) - c.close() - self._thread.join(timeout) - if self._thread.is_alive(): - util.sub_warning('_ResourceSharer thread did ' - 'not stop when asked') - self._listener.close() - self._thread = None - self._address = None - self._listener = None - for key, (send, close) in self._cache.items(): - close() - self._cache.clear() - - def _afterfork(self): - for key, (send, close) in self._cache.items(): - close() - self._cache.clear() - self._lock._at_fork_reinit() - if self._listener is not None: - self._listener.close() - self._listener = None - self._address = None - self._thread = None - - def _start(self): - from .connection import Listener - assert self._listener is None, "Already have Listener" - util.debug('starting listener and thread for sending handles') - self._listener = Listener(authkey=process.current_process().authkey, backlog=128) - self._address = self._listener.address - t = threading.Thread(target=self._serve) - t.daemon = True - t.start() - self._thread = t - - def _serve(self): - if hasattr(signal, 'pthread_sigmask'): - signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals()) - while 1: - try: - with self._listener.accept() as conn: - msg = conn.recv() - if msg is None: - break - key, destination_pid = msg - send, close = self._cache.pop(key) - try: - send(conn, destination_pid) - finally: - close() - except: - if not util.is_exiting(): - sys.excepthook(*sys.exc_info()) - - -_resource_sharer = _ResourceSharer() -stop = _resource_sharer.stop diff --git a/Python314_4_x86_Template/Lib/multiprocessing/resource_tracker.py b/Python314_4_x86_Template/Lib/multiprocessing/resource_tracker.py deleted file mode 100644 index 2ef2d1ece..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/resource_tracker.py +++ /dev/null @@ -1,416 +0,0 @@ -############################################################################### -# Server process to keep track of unlinked resources (like shared memory -# segments, semaphores etc.) and clean them. -# -# On Unix we run a server process which keeps track of unlinked -# resources. The server ignores SIGINT and SIGTERM and reads from a -# pipe. Every other process of the program has a copy of the writable -# end of the pipe, so we get EOF when all other processes have exited. -# Then the server process unlinks any remaining resource names. -# -# This is important because there may be system limits for such resources: for -# instance, the system only supports a limited number of named semaphores, and -# shared-memory segments live in the RAM. If a python process leaks such a -# resource, this resource will not be removed till the next reboot. Without -# this resource tracker process, "killall python" would probably leave unlinked -# resources. - -import base64 -import os -import signal -import sys -import threading -import warnings -from collections import deque - -import json - -from . import spawn -from . import util - -__all__ = ['ensure_running', 'register', 'unregister'] - -_HAVE_SIGMASK = hasattr(signal, 'pthread_sigmask') -_IGNORED_SIGNALS = (signal.SIGINT, signal.SIGTERM) - -def cleanup_noop(name): - raise RuntimeError('noop should never be registered or cleaned up') - -_CLEANUP_FUNCS = { - 'noop': cleanup_noop, - 'dummy': lambda name: None, # Dummy resource used in tests -} - -if os.name == 'posix': - import _multiprocessing - import _posixshmem - - # Use sem_unlink() to clean up named semaphores. - # - # sem_unlink() may be missing if the Python build process detected the - # absence of POSIX named semaphores. In that case, no named semaphores were - # ever opened, so no cleanup would be necessary. - if hasattr(_multiprocessing, 'sem_unlink'): - _CLEANUP_FUNCS['semaphore'] = _multiprocessing.sem_unlink - _CLEANUP_FUNCS['shared_memory'] = _posixshmem.shm_unlink - - -class ReentrantCallError(RuntimeError): - pass - - -class ResourceTracker(object): - - def __init__(self): - self._lock = threading.RLock() - self._fd = None - self._pid = None - self._exitcode = None - self._reentrant_messages = deque() - - # True to use colon-separated lines, rather than JSON lines, - # for internal communication. (Mainly for testing). - # Filenames not supported by the simple format will always be sent - # using JSON. - # The reader should understand all formats. - self._use_simple_format = True - - def _reentrant_call_error(self): - # gh-109629: this happens if an explicit call to the ResourceTracker - # gets interrupted by a garbage collection, invoking a finalizer (*) - # that itself calls back into ResourceTracker. - # (*) for example the SemLock finalizer - raise ReentrantCallError( - "Reentrant call into the multiprocessing resource tracker") - - def __del__(self): - # making sure child processess are cleaned before ResourceTracker - # gets destructed. - # see https://github.com/python/cpython/issues/88887 - self._stop(use_blocking_lock=False) - - def _stop(self, use_blocking_lock=True): - if use_blocking_lock: - with self._lock: - self._stop_locked() - else: - acquired = self._lock.acquire(blocking=False) - try: - self._stop_locked() - finally: - if acquired: - self._lock.release() - - def _stop_locked( - self, - close=os.close, - waitpid=os.waitpid, - waitstatus_to_exitcode=os.waitstatus_to_exitcode, - ): - # This shouldn't happen (it might when called by a finalizer) - # so we check for it anyway. - if self._lock._recursion_count() > 1: - raise self._reentrant_call_error() - if self._fd is None: - # not running - return - if self._pid is None: - return - - # closing the "alive" file descriptor stops main() - close(self._fd) - self._fd = None - - try: - _, status = waitpid(self._pid, 0) - except ChildProcessError: - self._pid = None - self._exitcode = None - return - - self._pid = None - - try: - self._exitcode = waitstatus_to_exitcode(status) - except ValueError: - # os.waitstatus_to_exitcode may raise an exception for invalid values - self._exitcode = None - - def getfd(self): - self.ensure_running() - return self._fd - - def ensure_running(self): - '''Make sure that resource tracker process is running. - - This can be run from any process. Usually a child process will use - the resource created by its parent.''' - return self._ensure_running_and_write() - - def _teardown_dead_process(self): - os.close(self._fd) - - # Clean-up to avoid dangling processes. - try: - # _pid can be None if this process is a child from another - # python process, which has started the resource_tracker. - if self._pid is not None: - os.waitpid(self._pid, 0) - except ChildProcessError: - # The resource_tracker has already been terminated. - pass - self._fd = None - self._pid = None - self._exitcode = None - - warnings.warn('resource_tracker: process died unexpectedly, ' - 'relaunching. Some resources might leak.') - - def _launch(self): - fds_to_pass = [] - try: - fds_to_pass.append(sys.stderr.fileno()) - except Exception: - pass - r, w = os.pipe() - try: - fds_to_pass.append(r) - # process will out live us, so no need to wait on pid - exe = spawn.get_executable() - args = [ - exe, - *util._args_from_interpreter_flags(), - '-c', - f'from multiprocessing.resource_tracker import main;main({r})', - ] - # bpo-33613: Register a signal mask that will block the signals. - # This signal mask will be inherited by the child that is going - # to be spawned and will protect the child from a race condition - # that can make the child die before it registers signal handlers - # for SIGINT and SIGTERM. The mask is unregistered after spawning - # the child. - prev_sigmask = None - try: - if _HAVE_SIGMASK: - prev_sigmask = signal.pthread_sigmask(signal.SIG_BLOCK, _IGNORED_SIGNALS) - pid = util.spawnv_passfds(exe, args, fds_to_pass) - finally: - if prev_sigmask is not None: - signal.pthread_sigmask(signal.SIG_SETMASK, prev_sigmask) - except: - os.close(w) - raise - else: - self._fd = w - self._pid = pid - finally: - os.close(r) - - def _make_probe_message(self): - """Return a probe message.""" - if self._use_simple_format: - return b'PROBE:0:noop\n' - return ( - json.dumps( - {"cmd": "PROBE", "rtype": "noop"}, - ensure_ascii=True, - separators=(",", ":"), - ) - + "\n" - ).encode("ascii") - - def _ensure_running_and_write(self, msg=None): - with self._lock: - if self._lock._recursion_count() > 1: - # The code below is certainly not reentrant-safe, so bail out - if msg is None: - raise self._reentrant_call_error() - return self._reentrant_messages.append(msg) - - if self._fd is not None: - # resource tracker was launched before, is it still running? - if msg is None: - to_send = self._make_probe_message() - else: - to_send = msg - try: - self._write(to_send) - except OSError: - self._teardown_dead_process() - self._launch() - - msg = None # message was sent in probe - else: - self._launch() - - while True: - try: - reentrant_msg = self._reentrant_messages.popleft() - except IndexError: - break - self._write(reentrant_msg) - if msg is not None: - self._write(msg) - - def _check_alive(self): - '''Check that the pipe has not been closed by sending a probe.''' - try: - # We cannot use send here as it calls ensure_running, creating - # a cycle. - os.write(self._fd, self._make_probe_message()) - except OSError: - return False - else: - return True - - def register(self, name, rtype): - '''Register name of resource with resource tracker.''' - self._send('REGISTER', name, rtype) - - def unregister(self, name, rtype): - '''Unregister name of resource with resource tracker.''' - self._send('UNREGISTER', name, rtype) - - def _write(self, msg): - nbytes = os.write(self._fd, msg) - assert nbytes == len(msg), f"{nbytes=} != {len(msg)=}" - - def _send(self, cmd, name, rtype): - if self._use_simple_format and '\n' not in name: - msg = f"{cmd}:{name}:{rtype}\n".encode("ascii") - if len(msg) > 512: - # posix guarantees that writes to a pipe of less than PIPE_BUF - # bytes are atomic, and that PIPE_BUF >= 512 - raise ValueError('msg too long') - self._ensure_running_and_write(msg) - return - - # POSIX guarantees that writes to a pipe of less than PIPE_BUF (512 on Linux) - # bytes are atomic. Therefore, we want the message to be shorter than 512 bytes. - # POSIX shm_open() and sem_open() require the name, including its leading slash, - # to be at most NAME_MAX bytes (255 on Linux) - # With json.dump(..., ensure_ascii=True) every non-ASCII byte becomes a 6-char - # escape like \uDC80. - # As we want the overall message to be kept atomic and therefore smaller than 512, - # we encode encode the raw name bytes with URL-safe Base64 - so a 255 long name - # will not exceed 340 bytes. - b = name.encode('utf-8', 'surrogateescape') - if len(b) > 255: - raise ValueError('shared memory name too long (max 255 bytes)') - b64 = base64.urlsafe_b64encode(b).decode('ascii') - - payload = {"cmd": cmd, "rtype": rtype, "base64_name": b64} - msg = (json.dumps(payload, ensure_ascii=True, separators=(",", ":")) + "\n").encode("ascii") - - # The entire JSON message is guaranteed < PIPE_BUF (512 bytes) by construction. - assert len(msg) <= 512, f"internal error: message too long ({len(msg)} bytes)" - assert msg.startswith(b'{') - - self._ensure_running_and_write(msg) - -_resource_tracker = ResourceTracker() -ensure_running = _resource_tracker.ensure_running -register = _resource_tracker.register -unregister = _resource_tracker.unregister -getfd = _resource_tracker.getfd - - -def _decode_message(line): - if line.startswith(b'{'): - try: - obj = json.loads(line.decode('ascii')) - except Exception as e: - raise ValueError("malformed resource_tracker message: %r" % (line,)) from e - - cmd = obj["cmd"] - rtype = obj["rtype"] - b64 = obj.get("base64_name", "") - - if not isinstance(cmd, str) or not isinstance(rtype, str) or not isinstance(b64, str): - raise ValueError("malformed resource_tracker fields: %r" % (obj,)) - - try: - name = base64.urlsafe_b64decode(b64).decode('utf-8', 'surrogateescape') - except ValueError as e: - raise ValueError("malformed resource_tracker base64_name: %r" % (b64,)) from e - else: - cmd, rest = line.strip().decode('ascii').split(':', maxsplit=1) - name, rtype = rest.rsplit(':', maxsplit=1) - return cmd, rtype, name - - -def main(fd): - '''Run resource tracker.''' - # protect the process from ^C and "killall python" etc - signal.signal(signal.SIGINT, signal.SIG_IGN) - signal.signal(signal.SIGTERM, signal.SIG_IGN) - if _HAVE_SIGMASK: - signal.pthread_sigmask(signal.SIG_UNBLOCK, _IGNORED_SIGNALS) - - for f in (sys.stdin, sys.stdout): - try: - f.close() - except Exception: - pass - - cache = {rtype: set() for rtype in _CLEANUP_FUNCS.keys()} - exit_code = 0 - - try: - # keep track of registered/unregistered resources - with open(fd, 'rb') as f: - for line in f: - try: - cmd, rtype, name = _decode_message(line) - cleanup_func = _CLEANUP_FUNCS.get(rtype, None) - if cleanup_func is None: - raise ValueError( - f'Cannot register {name} for automatic cleanup: ' - f'unknown resource type {rtype}') - - if cmd == 'REGISTER': - cache[rtype].add(name) - elif cmd == 'UNREGISTER': - cache[rtype].remove(name) - elif cmd == 'PROBE': - pass - else: - raise RuntimeError('unrecognized command %r' % cmd) - except Exception: - exit_code = 3 - try: - sys.excepthook(*sys.exc_info()) - except: - pass - finally: - # all processes have terminated; cleanup any remaining resources - for rtype, rtype_cache in cache.items(): - if rtype_cache: - try: - exit_code = 1 - if rtype == 'dummy': - # The test 'dummy' resource is expected to leak. - # We skip the warning (and *only* the warning) for it. - pass - else: - warnings.warn( - f'resource_tracker: There appear to be ' - f'{len(rtype_cache)} leaked {rtype} objects to ' - f'clean up at shutdown: {rtype_cache}' - ) - except Exception: - pass - for name in rtype_cache: - # For some reason the process which created and registered this - # resource has failed to unregister it. Presumably it has - # died. We therefore unlink it. - try: - try: - _CLEANUP_FUNCS[rtype](name) - except Exception as e: - exit_code = 2 - warnings.warn('resource_tracker: %r: %s' % (name, e)) - finally: - pass - - sys.exit(exit_code) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/shared_memory.py b/Python314_4_x86_Template/Lib/multiprocessing/shared_memory.py deleted file mode 100644 index 99a8ce332..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/shared_memory.py +++ /dev/null @@ -1,544 +0,0 @@ -"""Provides shared memory for direct access across processes. - -The API of this package is currently provisional. Refer to the -documentation for details. -""" - - -__all__ = [ 'SharedMemory', 'ShareableList' ] - - -from functools import partial -import mmap -import os -import errno -import struct -import secrets -import types - -if os.name == "nt": - import _winapi - _USE_POSIX = False -else: - import _posixshmem - _USE_POSIX = True - -from . import resource_tracker - -_O_CREX = os.O_CREAT | os.O_EXCL - -# FreeBSD (and perhaps other BSDs) limit names to 14 characters. -_SHM_SAFE_NAME_LENGTH = 14 - -# Shared memory block name prefix -if _USE_POSIX: - _SHM_NAME_PREFIX = '/psm_' -else: - _SHM_NAME_PREFIX = 'wnsm_' - - -def _make_filename(): - "Create a random filename for the shared memory object." - # number of random bytes to use for name - nbytes = (_SHM_SAFE_NAME_LENGTH - len(_SHM_NAME_PREFIX)) // 2 - assert nbytes >= 2, '_SHM_NAME_PREFIX too long' - name = _SHM_NAME_PREFIX + secrets.token_hex(nbytes) - assert len(name) <= _SHM_SAFE_NAME_LENGTH - return name - - -class SharedMemory: - """Creates a new shared memory block or attaches to an existing - shared memory block. - - Every shared memory block is assigned a unique name. This enables - one process to create a shared memory block with a particular name - so that a different process can attach to that same shared memory - block using that same name. - - As a resource for sharing data across processes, shared memory blocks - may outlive the original process that created them. When one process - no longer needs access to a shared memory block that might still be - needed by other processes, the close() method should be called. - When a shared memory block is no longer needed by any process, the - unlink() method should be called to ensure proper cleanup.""" - - # Defaults; enables close() and unlink() to run without errors. - _name = None - _fd = -1 - _mmap = None - _buf = None - _flags = os.O_RDWR - _mode = 0o600 - _prepend_leading_slash = True if _USE_POSIX else False - _track = True - - def __init__(self, name=None, create=False, size=0, *, track=True): - if not size >= 0: - raise ValueError("'size' must be a positive integer") - if create: - self._flags = _O_CREX | os.O_RDWR - if size == 0: - raise ValueError("'size' must be a positive number different from zero") - if name is None and not self._flags & os.O_EXCL: - raise ValueError("'name' can only be None if create=True") - - self._track = track - if _USE_POSIX: - - # POSIX Shared Memory - - if name is None: - while True: - name = _make_filename() - try: - self._fd = _posixshmem.shm_open( - name, - self._flags, - mode=self._mode - ) - except FileExistsError: - continue - self._name = name - break - else: - name = "/" + name if self._prepend_leading_slash else name - self._fd = _posixshmem.shm_open( - name, - self._flags, - mode=self._mode - ) - self._name = name - try: - if create and size: - os.ftruncate(self._fd, size) - stats = os.fstat(self._fd) - size = stats.st_size - self._mmap = mmap.mmap(self._fd, size) - except OSError: - self.unlink() - raise - if self._track: - resource_tracker.register(self._name, "shared_memory") - - else: - - # Windows Named Shared Memory - - if create: - while True: - temp_name = _make_filename() if name is None else name - # Create and reserve shared memory block with this name - # until it can be attached to by mmap. - h_map = _winapi.CreateFileMapping( - _winapi.INVALID_HANDLE_VALUE, - _winapi.NULL, - _winapi.PAGE_READWRITE, - (size >> 32) & 0xFFFFFFFF, - size & 0xFFFFFFFF, - temp_name - ) - try: - last_error_code = _winapi.GetLastError() - if last_error_code == _winapi.ERROR_ALREADY_EXISTS: - if name is not None: - raise FileExistsError( - errno.EEXIST, - os.strerror(errno.EEXIST), - name, - _winapi.ERROR_ALREADY_EXISTS - ) - else: - continue - self._mmap = mmap.mmap(-1, size, tagname=temp_name) - finally: - _winapi.CloseHandle(h_map) - self._name = temp_name - break - - else: - self._name = name - # Dynamically determine the existing named shared memory - # block's size which is likely a multiple of mmap.PAGESIZE. - h_map = _winapi.OpenFileMapping( - _winapi.FILE_MAP_READ, - False, - name - ) - try: - p_buf = _winapi.MapViewOfFile( - h_map, - _winapi.FILE_MAP_READ, - 0, - 0, - 0 - ) - finally: - _winapi.CloseHandle(h_map) - try: - size = _winapi.VirtualQuerySize(p_buf) - finally: - _winapi.UnmapViewOfFile(p_buf) - self._mmap = mmap.mmap(-1, size, tagname=name) - - self._size = size - self._buf = memoryview(self._mmap) - - def __del__(self): - try: - self.close() - except OSError: - pass - - def __reduce__(self): - return ( - self.__class__, - ( - self.name, - False, - self.size, - ), - ) - - def __repr__(self): - return f'{self.__class__.__name__}({self.name!r}, size={self.size})' - - @property - def buf(self): - "A memoryview of contents of the shared memory block." - return self._buf - - @property - def name(self): - "Unique name that identifies the shared memory block." - reported_name = self._name - if _USE_POSIX and self._prepend_leading_slash: - if self._name.startswith("/"): - reported_name = self._name[1:] - return reported_name - - @property - def size(self): - "Size in bytes." - return self._size - - def close(self): - """Closes access to the shared memory from this instance but does - not destroy the shared memory block.""" - if self._buf is not None: - self._buf.release() - self._buf = None - if self._mmap is not None: - self._mmap.close() - self._mmap = None - if _USE_POSIX and self._fd >= 0: - os.close(self._fd) - self._fd = -1 - - def unlink(self): - """Requests that the underlying shared memory block be destroyed. - - Unlink should be called once (and only once) across all handles - which have access to the shared memory block, even if these - handles belong to different processes. Closing and unlinking may - happen in any order, but trying to access data inside a shared - memory block after unlinking may result in memory errors, - depending on platform. - - This method has no effect on Windows, where the only way to - delete a shared memory block is to close all handles.""" - - if _USE_POSIX and self._name: - _posixshmem.shm_unlink(self._name) - if self._track: - resource_tracker.unregister(self._name, "shared_memory") - - -_encoding = "utf8" - -class ShareableList: - """Pattern for a mutable list-like object shareable via a shared - memory block. It differs from the built-in list type in that these - lists can not change their overall length (i.e. no append, insert, - etc.) - - Because values are packed into a memoryview as bytes, the struct - packing format for any storable value must require no more than 8 - characters to describe its format.""" - - # The shared memory area is organized as follows: - # - 8 bytes: number of items (N) as a 64-bit integer - # - (N + 1) * 8 bytes: offsets of each element from the start of the - # data area - # - K bytes: the data area storing item values (with encoding and size - # depending on their respective types) - # - N * 8 bytes: `struct` format string for each element - # - N bytes: index into _back_transforms_mapping for each element - # (for reconstructing the corresponding Python value) - _types_mapping = { - int: "q", - float: "d", - bool: "xxxxxxx?", - str: "%ds", - bytes: "%ds", - None.__class__: "xxxxxx?x", - } - _alignment = 8 - _back_transforms_mapping = { - 0: lambda value: value, # int, float, bool - 1: lambda value: value.rstrip(b'\x00').decode(_encoding), # str - 2: lambda value: value.rstrip(b'\x00'), # bytes - 3: lambda _value: None, # None - } - - @staticmethod - def _extract_recreation_code(value): - """Used in concert with _back_transforms_mapping to convert values - into the appropriate Python objects when retrieving them from - the list as well as when storing them.""" - if not isinstance(value, (str, bytes, None.__class__)): - return 0 - elif isinstance(value, str): - return 1 - elif isinstance(value, bytes): - return 2 - else: - return 3 # NoneType - - def __init__(self, sequence=None, *, name=None): - if name is None or sequence is not None: - sequence = sequence or () - _formats = [ - self._types_mapping[type(item)] - if not isinstance(item, (str, bytes)) - else self._types_mapping[type(item)] % ( - self._alignment * (len(item) // self._alignment + 1), - ) - for item in sequence - ] - self._list_len = len(_formats) - assert sum(len(fmt) <= 8 for fmt in _formats) == self._list_len - offset = 0 - # The offsets of each list element into the shared memory's - # data area (0 meaning the start of the data area, not the start - # of the shared memory area). - self._allocated_offsets = [0] - for fmt in _formats: - offset += self._alignment if fmt[-1] != "s" else int(fmt[:-1]) - self._allocated_offsets.append(offset) - _recreation_codes = [ - self._extract_recreation_code(item) for item in sequence - ] - requested_size = struct.calcsize( - "q" + self._format_size_metainfo + - "".join(_formats) + - self._format_packing_metainfo + - self._format_back_transform_codes - ) - - self.shm = SharedMemory(name, create=True, size=requested_size) - else: - self.shm = SharedMemory(name) - - if sequence is not None: - _enc = _encoding - struct.pack_into( - "q" + self._format_size_metainfo, - self.shm.buf, - 0, - self._list_len, - *(self._allocated_offsets) - ) - struct.pack_into( - "".join(_formats), - self.shm.buf, - self._offset_data_start, - *(v.encode(_enc) if isinstance(v, str) else v for v in sequence) - ) - struct.pack_into( - self._format_packing_metainfo, - self.shm.buf, - self._offset_packing_formats, - *(v.encode(_enc) for v in _formats) - ) - struct.pack_into( - self._format_back_transform_codes, - self.shm.buf, - self._offset_back_transform_codes, - *(_recreation_codes) - ) - - else: - self._list_len = len(self) # Obtains size from offset 0 in buffer. - self._allocated_offsets = list( - struct.unpack_from( - self._format_size_metainfo, - self.shm.buf, - 1 * 8 - ) - ) - - def _get_packing_format(self, position): - "Gets the packing format for a single value stored in the list." - position = position if position >= 0 else position + self._list_len - if (position >= self._list_len) or (self._list_len < 0): - raise IndexError("Requested position out of range.") - - v = struct.unpack_from( - "8s", - self.shm.buf, - self._offset_packing_formats + position * 8 - )[0] - fmt = v.rstrip(b'\x00') - fmt_as_str = fmt.decode(_encoding) - - return fmt_as_str - - def _get_back_transform(self, position): - "Gets the back transformation function for a single value." - - if (position >= self._list_len) or (self._list_len < 0): - raise IndexError("Requested position out of range.") - - transform_code = struct.unpack_from( - "b", - self.shm.buf, - self._offset_back_transform_codes + position - )[0] - transform_function = self._back_transforms_mapping[transform_code] - - return transform_function - - def _set_packing_format_and_transform(self, position, fmt_as_str, value): - """Sets the packing format and back transformation code for a - single value in the list at the specified position.""" - - if (position >= self._list_len) or (self._list_len < 0): - raise IndexError("Requested position out of range.") - - struct.pack_into( - "8s", - self.shm.buf, - self._offset_packing_formats + position * 8, - fmt_as_str.encode(_encoding) - ) - - transform_code = self._extract_recreation_code(value) - struct.pack_into( - "b", - self.shm.buf, - self._offset_back_transform_codes + position, - transform_code - ) - - def __getitem__(self, position): - position = position if position >= 0 else position + self._list_len - try: - offset = self._offset_data_start + self._allocated_offsets[position] - (v,) = struct.unpack_from( - self._get_packing_format(position), - self.shm.buf, - offset - ) - except IndexError: - raise IndexError("index out of range") - - back_transform = self._get_back_transform(position) - v = back_transform(v) - - return v - - def __setitem__(self, position, value): - position = position if position >= 0 else position + self._list_len - try: - item_offset = self._allocated_offsets[position] - offset = self._offset_data_start + item_offset - current_format = self._get_packing_format(position) - except IndexError: - raise IndexError("assignment index out of range") - - if not isinstance(value, (str, bytes)): - new_format = self._types_mapping[type(value)] - encoded_value = value - else: - allocated_length = self._allocated_offsets[position + 1] - item_offset - - encoded_value = (value.encode(_encoding) - if isinstance(value, str) else value) - if len(encoded_value) > allocated_length: - raise ValueError("bytes/str item exceeds available storage") - if current_format[-1] == "s": - new_format = current_format - else: - new_format = self._types_mapping[str] % ( - allocated_length, - ) - - self._set_packing_format_and_transform( - position, - new_format, - value - ) - struct.pack_into(new_format, self.shm.buf, offset, encoded_value) - - def __reduce__(self): - return partial(self.__class__, name=self.shm.name), () - - def __len__(self): - return struct.unpack_from("q", self.shm.buf, 0)[0] - - def __repr__(self): - return f'{self.__class__.__name__}({list(self)}, name={self.shm.name!r})' - - @property - def format(self): - "The struct packing format used by all currently stored items." - return "".join( - self._get_packing_format(i) for i in range(self._list_len) - ) - - @property - def _format_size_metainfo(self): - "The struct packing format used for the items' storage offsets." - return "q" * (self._list_len + 1) - - @property - def _format_packing_metainfo(self): - "The struct packing format used for the items' packing formats." - return "8s" * self._list_len - - @property - def _format_back_transform_codes(self): - "The struct packing format used for the items' back transforms." - return "b" * self._list_len - - @property - def _offset_data_start(self): - # - 8 bytes for the list length - # - (N + 1) * 8 bytes for the element offsets - return (self._list_len + 2) * 8 - - @property - def _offset_packing_formats(self): - return self._offset_data_start + self._allocated_offsets[-1] - - @property - def _offset_back_transform_codes(self): - return self._offset_packing_formats + self._list_len * 8 - - def count(self, value): - "L.count(value) -> integer -- return number of occurrences of value." - - return sum(value == entry for entry in self) - - def index(self, value): - """L.index(value) -> integer -- return first index of value. - Raises ValueError if the value is not present.""" - - for position, entry in enumerate(self): - if value == entry: - return position - else: - raise ValueError("ShareableList.index(x): x not in list") - - __class_getitem__ = classmethod(types.GenericAlias) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/sharedctypes.py b/Python314_4_x86_Template/Lib/multiprocessing/sharedctypes.py deleted file mode 100644 index 607170702..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/sharedctypes.py +++ /dev/null @@ -1,240 +0,0 @@ -# -# Module which supports allocation of ctypes objects from shared memory -# -# multiprocessing/sharedctypes.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -import ctypes -import weakref - -from . import heap -from . import get_context - -from .context import reduction, assert_spawning -_ForkingPickler = reduction.ForkingPickler - -__all__ = ['RawValue', 'RawArray', 'Value', 'Array', 'copy', 'synchronized'] - -# -# -# - -typecode_to_type = { - 'c': ctypes.c_char, 'u': ctypes.c_wchar, - 'b': ctypes.c_byte, 'B': ctypes.c_ubyte, - 'h': ctypes.c_short, 'H': ctypes.c_ushort, - 'i': ctypes.c_int, 'I': ctypes.c_uint, - 'l': ctypes.c_long, 'L': ctypes.c_ulong, - 'q': ctypes.c_longlong, 'Q': ctypes.c_ulonglong, - 'f': ctypes.c_float, 'd': ctypes.c_double - } - -# -# -# - -def _new_value(type_): - size = ctypes.sizeof(type_) - wrapper = heap.BufferWrapper(size) - return rebuild_ctype(type_, wrapper, None) - -def RawValue(typecode_or_type, *args): - ''' - Returns a ctypes object allocated from shared memory - ''' - type_ = typecode_to_type.get(typecode_or_type, typecode_or_type) - obj = _new_value(type_) - ctypes.memset(ctypes.addressof(obj), 0, ctypes.sizeof(obj)) - obj.__init__(*args) - return obj - -def RawArray(typecode_or_type, size_or_initializer): - ''' - Returns a ctypes array allocated from shared memory - ''' - type_ = typecode_to_type.get(typecode_or_type, typecode_or_type) - if isinstance(size_or_initializer, int): - type_ = type_ * size_or_initializer - obj = _new_value(type_) - ctypes.memset(ctypes.addressof(obj), 0, ctypes.sizeof(obj)) - return obj - else: - type_ = type_ * len(size_or_initializer) - result = _new_value(type_) - result.__init__(*size_or_initializer) - return result - -def Value(typecode_or_type, *args, lock=True, ctx=None): - ''' - Return a synchronization wrapper for a Value - ''' - obj = RawValue(typecode_or_type, *args) - if lock is False: - return obj - if lock in (True, None): - ctx = ctx or get_context() - lock = ctx.RLock() - if not hasattr(lock, 'acquire'): - raise AttributeError("%r has no method 'acquire'" % lock) - return synchronized(obj, lock, ctx=ctx) - -def Array(typecode_or_type, size_or_initializer, *, lock=True, ctx=None): - ''' - Return a synchronization wrapper for a RawArray - ''' - obj = RawArray(typecode_or_type, size_or_initializer) - if lock is False: - return obj - if lock in (True, None): - ctx = ctx or get_context() - lock = ctx.RLock() - if not hasattr(lock, 'acquire'): - raise AttributeError("%r has no method 'acquire'" % lock) - return synchronized(obj, lock, ctx=ctx) - -def copy(obj): - new_obj = _new_value(type(obj)) - ctypes.pointer(new_obj)[0] = obj - return new_obj - -def synchronized(obj, lock=None, ctx=None): - assert not isinstance(obj, SynchronizedBase), 'object already synchronized' - ctx = ctx or get_context() - - if isinstance(obj, ctypes._SimpleCData): - return Synchronized(obj, lock, ctx) - elif isinstance(obj, ctypes.Array): - if obj._type_ is ctypes.c_char: - return SynchronizedString(obj, lock, ctx) - return SynchronizedArray(obj, lock, ctx) - else: - cls = type(obj) - try: - scls = class_cache[cls] - except KeyError: - names = [field[0] for field in cls._fields_] - d = {name: make_property(name) for name in names} - classname = 'Synchronized' + cls.__name__ - scls = class_cache[cls] = type(classname, (SynchronizedBase,), d) - return scls(obj, lock, ctx) - -# -# Functions for pickling/unpickling -# - -def reduce_ctype(obj): - assert_spawning(obj) - if isinstance(obj, ctypes.Array): - return rebuild_ctype, (obj._type_, obj._wrapper, obj._length_) - else: - return rebuild_ctype, (type(obj), obj._wrapper, None) - -def rebuild_ctype(type_, wrapper, length): - if length is not None: - type_ = type_ * length - _ForkingPickler.register(type_, reduce_ctype) - buf = wrapper.create_memoryview() - obj = type_.from_buffer(buf) - obj._wrapper = wrapper - return obj - -# -# Function to create properties -# - -def make_property(name): - try: - return prop_cache[name] - except KeyError: - d = {} - exec(template % ((name,)*7), d) - prop_cache[name] = d[name] - return d[name] - -template = ''' -def get%s(self): - self.acquire() - try: - return self._obj.%s - finally: - self.release() -def set%s(self, value): - self.acquire() - try: - self._obj.%s = value - finally: - self.release() -%s = property(get%s, set%s) -''' - -prop_cache = {} -class_cache = weakref.WeakKeyDictionary() - -# -# Synchronized wrappers -# - -class SynchronizedBase(object): - - def __init__(self, obj, lock=None, ctx=None): - self._obj = obj - if lock: - self._lock = lock - else: - ctx = ctx or get_context(force=True) - self._lock = ctx.RLock() - self.acquire = self._lock.acquire - self.release = self._lock.release - - def __enter__(self): - return self._lock.__enter__() - - def __exit__(self, *args): - return self._lock.__exit__(*args) - - def __reduce__(self): - assert_spawning(self) - return synchronized, (self._obj, self._lock) - - def get_obj(self): - return self._obj - - def get_lock(self): - return self._lock - - def __repr__(self): - return '<%s wrapper for %s>' % (type(self).__name__, self._obj) - - -class Synchronized(SynchronizedBase): - value = make_property('value') - - -class SynchronizedArray(SynchronizedBase): - - def __len__(self): - return len(self._obj) - - def __getitem__(self, i): - with self: - return self._obj[i] - - def __setitem__(self, i, value): - with self: - self._obj[i] = value - - def __getslice__(self, start, stop): - with self: - return self._obj[start:stop] - - def __setslice__(self, start, stop, values): - with self: - self._obj[start:stop] = values - - -class SynchronizedString(SynchronizedArray): - value = make_property('value') - raw = make_property('raw') diff --git a/Python314_4_x86_Template/Lib/multiprocessing/spawn.py b/Python314_4_x86_Template/Lib/multiprocessing/spawn.py deleted file mode 100644 index d43864c93..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/spawn.py +++ /dev/null @@ -1,307 +0,0 @@ -# -# Code used to start processes when using the spawn or forkserver -# start methods. -# -# multiprocessing/spawn.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -import os -import sys -import runpy -import types - -from . import get_start_method, set_start_method -from . import process -from .context import reduction -from . import util - -__all__ = ['_main', 'freeze_support', 'set_executable', 'get_executable', - 'get_preparation_data', 'get_command_line', 'import_main_path'] - -# -# _python_exe is the assumed path to the python executable. -# People embedding Python want to modify it. -# - -if sys.platform != 'win32': - WINEXE = False - WINSERVICE = False -else: - WINEXE = getattr(sys, 'frozen', False) - WINSERVICE = sys.executable and sys.executable.lower().endswith("pythonservice.exe") - -def set_executable(exe): - global _python_exe - if exe is None: - _python_exe = exe - elif sys.platform == 'win32': - _python_exe = os.fsdecode(exe) - else: - _python_exe = os.fsencode(exe) - -def get_executable(): - return _python_exe - -if WINSERVICE: - set_executable(os.path.join(sys.exec_prefix, 'python.exe')) -else: - set_executable(sys.executable) - -# -# -# - -def is_forking(argv): - ''' - Return whether commandline indicates we are forking - ''' - if len(argv) >= 2 and argv[1] == '--multiprocessing-fork': - return True - else: - return False - - -def freeze_support(): - ''' - Run code for process object if this in not the main process - ''' - if is_forking(sys.argv): - kwds = {} - for arg in sys.argv[2:]: - name, value = arg.split('=') - if value == 'None': - kwds[name] = None - else: - kwds[name] = int(value) - spawn_main(**kwds) - sys.exit() - - -def get_command_line(**kwds): - ''' - Returns prefix of command line used for spawning a child process - ''' - if getattr(sys, 'frozen', False): - return ([sys.executable, '--multiprocessing-fork'] + - ['%s=%r' % item for item in kwds.items()]) - else: - prog = 'from multiprocessing.spawn import spawn_main; spawn_main(%s)' - prog %= ', '.join('%s=%r' % item for item in kwds.items()) - opts = util._args_from_interpreter_flags() - exe = get_executable() - return [exe] + opts + ['-c', prog, '--multiprocessing-fork'] - - -def spawn_main(pipe_handle, parent_pid=None, tracker_fd=None): - ''' - Run code specified by data received over pipe - ''' - assert is_forking(sys.argv), "Not forking" - if sys.platform == 'win32': - import msvcrt - import _winapi - - if parent_pid is not None: - source_process = _winapi.OpenProcess( - _winapi.SYNCHRONIZE | _winapi.PROCESS_DUP_HANDLE, - False, parent_pid) - else: - source_process = None - new_handle = reduction.duplicate(pipe_handle, - source_process=source_process) - fd = msvcrt.open_osfhandle(new_handle, os.O_RDONLY) - parent_sentinel = source_process - else: - from . import resource_tracker - resource_tracker._resource_tracker._fd = tracker_fd - fd = pipe_handle - parent_sentinel = os.dup(pipe_handle) - exitcode = _main(fd, parent_sentinel) - sys.exit(exitcode) - - -def _main(fd, parent_sentinel): - with os.fdopen(fd, 'rb', closefd=True) as from_parent: - process.current_process()._inheriting = True - try: - preparation_data = reduction.pickle.load(from_parent) - prepare(preparation_data) - self = reduction.pickle.load(from_parent) - finally: - del process.current_process()._inheriting - return self._bootstrap(parent_sentinel) - - -def _check_not_importing_main(): - if getattr(process.current_process(), '_inheriting', False): - raise RuntimeError(''' - An attempt has been made to start a new process before the - current process has finished its bootstrapping phase. - - This probably means that you are not using fork to start your - child processes and you have forgotten to use the proper idiom - in the main module: - - if __name__ == '__main__': - freeze_support() - ... - - The "freeze_support()" line can be omitted if the program - is not going to be frozen to produce an executable. - - To fix this issue, refer to the "Safe importing of main module" - section in https://docs.python.org/3/library/multiprocessing.html - ''') - - -def get_preparation_data(name): - ''' - Return info about parent needed by child to unpickle process object - ''' - _check_not_importing_main() - d = dict( - log_to_stderr=util._log_to_stderr, - authkey=process.current_process().authkey, - ) - - if util._logger is not None: - d['log_level'] = util._logger.getEffectiveLevel() - - sys_path=sys.path.copy() - try: - i = sys_path.index('') - except ValueError: - pass - else: - sys_path[i] = process.ORIGINAL_DIR - - d.update( - name=name, - sys_path=sys_path, - sys_argv=sys.argv, - orig_dir=process.ORIGINAL_DIR, - dir=os.getcwd(), - start_method=get_start_method(allow_none=True), - ) - - # Figure out whether to initialise main in the subprocess as a module - # or through direct execution (or to leave it alone entirely) - main_module = sys.modules['__main__'] - main_mod_name = getattr(main_module.__spec__, "name", None) - if main_mod_name is not None: - d['init_main_from_name'] = main_mod_name - elif sys.platform != 'win32' or (not WINEXE and not WINSERVICE): - main_path = getattr(main_module, '__file__', None) - if main_path is not None: - if (not os.path.isabs(main_path) and - process.ORIGINAL_DIR is not None): - main_path = os.path.join(process.ORIGINAL_DIR, main_path) - d['init_main_from_path'] = os.path.normpath(main_path) - - return d - -# -# Prepare current process -# - -old_main_modules = [] - -def prepare(data): - ''' - Try to get current process ready to unpickle process object - ''' - if 'name' in data: - process.current_process().name = data['name'] - - if 'authkey' in data: - process.current_process().authkey = data['authkey'] - - if 'log_to_stderr' in data and data['log_to_stderr']: - util.log_to_stderr() - - if 'log_level' in data: - util.get_logger().setLevel(data['log_level']) - - if 'sys_path' in data: - sys.path = data['sys_path'] - - if 'sys_argv' in data: - sys.argv = data['sys_argv'] - - if 'dir' in data: - os.chdir(data['dir']) - - if 'orig_dir' in data: - process.ORIGINAL_DIR = data['orig_dir'] - - if 'start_method' in data: - set_start_method(data['start_method'], force=True) - - if 'init_main_from_name' in data: - _fixup_main_from_name(data['init_main_from_name']) - elif 'init_main_from_path' in data: - _fixup_main_from_path(data['init_main_from_path']) - -# Multiprocessing module helpers to fix up the main module in -# spawned subprocesses -def _fixup_main_from_name(mod_name): - # __main__.py files for packages, directories, zip archives, etc, run - # their "main only" code unconditionally, so we don't even try to - # populate anything in __main__, nor do we make any changes to - # __main__ attributes - current_main = sys.modules['__main__'] - if mod_name == "__main__" or mod_name.endswith(".__main__"): - return - - # If this process was forked, __main__ may already be populated - if getattr(current_main.__spec__, "name", None) == mod_name: - return - - # Otherwise, __main__ may contain some non-main code where we need to - # support unpickling it properly. We rerun it as __mp_main__ and make - # the normal __main__ an alias to that - old_main_modules.append(current_main) - main_module = types.ModuleType("__mp_main__") - main_content = runpy.run_module(mod_name, - run_name="__mp_main__", - alter_sys=True) - main_module.__dict__.update(main_content) - sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module - - -def _fixup_main_from_path(main_path): - # If this process was forked, __main__ may already be populated - current_main = sys.modules['__main__'] - - # Unfortunately, the main ipython launch script historically had no - # "if __name__ == '__main__'" guard, so we work around that - # by treating it like a __main__.py file - # See https://github.com/ipython/ipython/issues/4698 - main_name = os.path.splitext(os.path.basename(main_path))[0] - if main_name == 'ipython': - return - - # Otherwise, if __file__ already has the setting we expect, - # there's nothing more to do - if getattr(current_main, '__file__', None) == main_path: - return - - # If the parent process has sent a path through rather than a module - # name we assume it is an executable script that may contain - # non-main code that needs to be executed - old_main_modules.append(current_main) - main_module = types.ModuleType("__mp_main__") - main_content = runpy.run_path(main_path, - run_name="__mp_main__") - main_module.__dict__.update(main_content) - sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module - - -def import_main_path(main_path): - ''' - Set sys.modules['__main__'] to module at main_path - ''' - _fixup_main_from_path(main_path) diff --git a/Python314_4_x86_Template/Lib/multiprocessing/synchronize.py b/Python314_4_x86_Template/Lib/multiprocessing/synchronize.py deleted file mode 100644 index 9188114ae..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/synchronize.py +++ /dev/null @@ -1,411 +0,0 @@ -# -# Module implementing synchronization primitives -# -# multiprocessing/synchronize.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -__all__ = [ - 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event' - ] - -import threading -import sys -import tempfile -import _multiprocessing -import time - -from . import context -from . import process -from . import util - -# TODO: Do any platforms still lack a functioning sem_open? -try: - from _multiprocessing import SemLock, sem_unlink -except ImportError: - raise ImportError("This platform lacks a functioning sem_open" + - " implementation. https://github.com/python/cpython/issues/48020.") - -# -# Constants -# - -# These match the enum in Modules/_multiprocessing/semaphore.c -RECURSIVE_MUTEX = 0 -SEMAPHORE = 1 - -SEM_VALUE_MAX = _multiprocessing.SemLock.SEM_VALUE_MAX - -# -# Base class for semaphores and mutexes; wraps `_multiprocessing.SemLock` -# - -class SemLock(object): - - _rand = tempfile._RandomNameSequence() - - def __init__(self, kind, value, maxvalue, *, ctx): - if ctx is None: - ctx = context._default_context.get_context() - self._is_fork_ctx = ctx.get_start_method() == 'fork' - unlink_now = sys.platform == 'win32' or self._is_fork_ctx - for i in range(100): - try: - sl = self._semlock = _multiprocessing.SemLock( - kind, value, maxvalue, self._make_name(), - unlink_now) - except FileExistsError: - pass - else: - break - else: - raise FileExistsError('cannot find name for semaphore') - - util.debug('created semlock with handle %s' % sl.handle) - self._make_methods() - - if sys.platform != 'win32': - def _after_fork(obj): - obj._semlock._after_fork() - util.register_after_fork(self, _after_fork) - - if self._semlock.name is not None: - # We only get here if we are on Unix with forking - # disabled. When the object is garbage collected or the - # process shuts down we unlink the semaphore name - from .resource_tracker import register - register(self._semlock.name, "semaphore") - util.Finalize(self, SemLock._cleanup, (self._semlock.name,), - exitpriority=0) - - @staticmethod - def _cleanup(name): - from .resource_tracker import unregister - sem_unlink(name) - unregister(name, "semaphore") - - def _make_methods(self): - self.acquire = self._semlock.acquire - self.release = self._semlock.release - - def locked(self): - return self._semlock._is_zero() - - def __enter__(self): - return self._semlock.__enter__() - - def __exit__(self, *args): - return self._semlock.__exit__(*args) - - def __getstate__(self): - context.assert_spawning(self) - sl = self._semlock - if sys.platform == 'win32': - h = context.get_spawning_popen().duplicate_for_child(sl.handle) - else: - if self._is_fork_ctx: - raise RuntimeError('A SemLock created in a fork context is being ' - 'shared with a process in a spawn context. This is ' - 'not supported. Please use the same context to create ' - 'multiprocessing objects and Process.') - h = sl.handle - return (h, sl.kind, sl.maxvalue, sl.name) - - def __setstate__(self, state): - self._semlock = _multiprocessing.SemLock._rebuild(*state) - util.debug('recreated blocker with handle %r' % state[0]) - self._make_methods() - # Ensure that deserialized SemLock can be serialized again (gh-108520). - self._is_fork_ctx = False - - @staticmethod - def _make_name(): - return '%s-%s' % (process.current_process()._config['semprefix'], - next(SemLock._rand)) - -# -# Semaphore -# - -class Semaphore(SemLock): - - def __init__(self, value=1, *, ctx): - SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX, ctx=ctx) - - def get_value(self): - '''Returns current value of Semaphore. - - Raises NotImplementedError on Mac OSX - because of broken sem_getvalue(). - ''' - return self._semlock._get_value() - - def __repr__(self): - try: - value = self.get_value() - except Exception: - value = 'unknown' - return '<%s(value=%s)>' % (self.__class__.__name__, value) - -# -# Bounded semaphore -# - -class BoundedSemaphore(Semaphore): - - def __init__(self, value=1, *, ctx): - SemLock.__init__(self, SEMAPHORE, value, value, ctx=ctx) - - def __repr__(self): - try: - value = self.get_value() - except Exception: - value = 'unknown' - return '<%s(value=%s, maxvalue=%s)>' % \ - (self.__class__.__name__, value, self._semlock.maxvalue) - -# -# Non-recursive lock -# - -class Lock(SemLock): - - def __init__(self, *, ctx): - SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) - - def __repr__(self): - try: - if self._semlock._is_mine(): - name = process.current_process().name - if threading.current_thread().name != 'MainThread': - name += '|' + threading.current_thread().name - elif not self._semlock._is_zero(): - name = 'None' - elif self._semlock._count() > 0: - name = 'SomeOtherThread' - else: - name = 'SomeOtherProcess' - except Exception: - name = 'unknown' - return '<%s(owner=%s)>' % (self.__class__.__name__, name) - -# -# Recursive lock -# - -class RLock(SemLock): - - def __init__(self, *, ctx): - SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1, ctx=ctx) - - def __repr__(self): - try: - if self._semlock._is_mine(): - name = process.current_process().name - if threading.current_thread().name != 'MainThread': - name += '|' + threading.current_thread().name - count = self._semlock._count() - elif not self._semlock._is_zero(): - name, count = 'None', 0 - elif self._semlock._count() > 0: - name, count = 'SomeOtherThread', 'nonzero' - else: - name, count = 'SomeOtherProcess', 'nonzero' - except Exception: - name, count = 'unknown', 'unknown' - return '<%s(%s, %s)>' % (self.__class__.__name__, name, count) - -# -# Condition variable -# - -class Condition(object): - - def __init__(self, lock=None, *, ctx): - self._lock = lock or ctx.RLock() - self._sleeping_count = ctx.Semaphore(0) - self._woken_count = ctx.Semaphore(0) - self._wait_semaphore = ctx.Semaphore(0) - self._make_methods() - - def __getstate__(self): - context.assert_spawning(self) - return (self._lock, self._sleeping_count, - self._woken_count, self._wait_semaphore) - - def __setstate__(self, state): - (self._lock, self._sleeping_count, - self._woken_count, self._wait_semaphore) = state - self._make_methods() - - def __enter__(self): - return self._lock.__enter__() - - def __exit__(self, *args): - return self._lock.__exit__(*args) - - def _make_methods(self): - self.acquire = self._lock.acquire - self.release = self._lock.release - - def __repr__(self): - try: - num_waiters = (self._sleeping_count.get_value() - - self._woken_count.get_value()) - except Exception: - num_waiters = 'unknown' - return '<%s(%s, %s)>' % (self.__class__.__name__, self._lock, num_waiters) - - def wait(self, timeout=None): - assert self._lock._semlock._is_mine(), \ - 'must acquire() condition before using wait()' - - # indicate that this thread is going to sleep - self._sleeping_count.release() - - # release lock - count = self._lock._semlock._count() - for i in range(count): - self._lock.release() - - try: - # wait for notification or timeout - return self._wait_semaphore.acquire(True, timeout) - finally: - # indicate that this thread has woken - self._woken_count.release() - - # reacquire lock - for i in range(count): - self._lock.acquire() - - def notify(self, n=1): - assert self._lock._semlock._is_mine(), 'lock is not owned' - assert not self._wait_semaphore.acquire( - False), ('notify: Should not have been able to acquire ' - + '_wait_semaphore') - - # to take account of timeouts since last notify*() we subtract - # woken_count from sleeping_count and rezero woken_count - while self._woken_count.acquire(False): - res = self._sleeping_count.acquire(False) - assert res, ('notify: Bug in sleeping_count.acquire' - + '- res should not be False') - - sleepers = 0 - while sleepers < n and self._sleeping_count.acquire(False): - self._wait_semaphore.release() # wake up one sleeper - sleepers += 1 - - if sleepers: - for i in range(sleepers): - self._woken_count.acquire() # wait for a sleeper to wake - - # rezero wait_semaphore in case some timeouts just happened - while self._wait_semaphore.acquire(False): - pass - - def notify_all(self): - self.notify(n=sys.maxsize) - - def wait_for(self, predicate, timeout=None): - result = predicate() - if result: - return result - if timeout is not None: - endtime = time.monotonic() + timeout - else: - endtime = None - waittime = None - while not result: - if endtime is not None: - waittime = endtime - time.monotonic() - if waittime <= 0: - break - self.wait(waittime) - result = predicate() - return result - -# -# Event -# - -class Event(object): - - def __init__(self, *, ctx): - self._cond = ctx.Condition(ctx.Lock()) - self._flag = ctx.Semaphore(0) - - def is_set(self): - with self._cond: - if self._flag.acquire(False): - self._flag.release() - return True - return False - - def set(self): - with self._cond: - self._flag.acquire(False) - self._flag.release() - self._cond.notify_all() - - def clear(self): - with self._cond: - self._flag.acquire(False) - - def wait(self, timeout=None): - with self._cond: - if self._flag.acquire(False): - self._flag.release() - else: - self._cond.wait(timeout) - - if self._flag.acquire(False): - self._flag.release() - return True - return False - - def __repr__(self): - set_status = 'set' if self.is_set() else 'unset' - return f"<{type(self).__qualname__} at {id(self):#x} {set_status}>" -# -# Barrier -# - -class Barrier(threading.Barrier): - - def __init__(self, parties, action=None, timeout=None, *, ctx): - import struct - from .heap import BufferWrapper - wrapper = BufferWrapper(struct.calcsize('i') * 2) - cond = ctx.Condition() - self.__setstate__((parties, action, timeout, cond, wrapper)) - self._state = 0 - self._count = 0 - - def __setstate__(self, state): - (self._parties, self._action, self._timeout, - self._cond, self._wrapper) = state - self._array = self._wrapper.create_memoryview().cast('i') - - def __getstate__(self): - return (self._parties, self._action, self._timeout, - self._cond, self._wrapper) - - @property - def _state(self): - return self._array[0] - - @_state.setter - def _state(self, value): - self._array[0] = value - - @property - def _count(self): - return self._array[1] - - @_count.setter - def _count(self, value): - self._array[1] = value diff --git a/Python314_4_x86_Template/Lib/multiprocessing/util.py b/Python314_4_x86_Template/Lib/multiprocessing/util.py deleted file mode 100644 index 549fb07c2..000000000 --- a/Python314_4_x86_Template/Lib/multiprocessing/util.py +++ /dev/null @@ -1,560 +0,0 @@ -# -# Module providing various facilities to other parts of the package -# -# multiprocessing/util.py -# -# Copyright (c) 2006-2008, R Oudkerk -# Licensed to PSF under a Contributor Agreement. -# - -import os -import itertools -import sys -import weakref -import atexit -import threading # we want threading to install it's - # cleanup function before multiprocessing does -from subprocess import _args_from_interpreter_flags # noqa: F401 - -from . import process - -__all__ = [ - 'sub_debug', 'debug', 'info', 'sub_warning', 'warn', 'get_logger', - 'log_to_stderr', 'get_temp_dir', 'register_after_fork', - 'is_exiting', 'Finalize', 'ForkAwareThreadLock', 'ForkAwareLocal', - 'close_all_fds_except', 'SUBDEBUG', 'SUBWARNING', - ] - -# -# Logging -# - -NOTSET = 0 -SUBDEBUG = 5 -DEBUG = 10 -INFO = 20 -SUBWARNING = 25 -WARNING = 30 - -LOGGER_NAME = 'multiprocessing' -DEFAULT_LOGGING_FORMAT = '[%(levelname)s/%(processName)s] %(message)s' - -_logger = None -_log_to_stderr = False - -def sub_debug(msg, *args): - if _logger: - _logger.log(SUBDEBUG, msg, *args, stacklevel=2) - -def debug(msg, *args): - if _logger: - _logger.log(DEBUG, msg, *args, stacklevel=2) - -def info(msg, *args): - if _logger: - _logger.log(INFO, msg, *args, stacklevel=2) - -def warn(msg, *args): - if _logger: - _logger.log(WARNING, msg, *args, stacklevel=2) - -def sub_warning(msg, *args): - if _logger: - _logger.log(SUBWARNING, msg, *args, stacklevel=2) - -def get_logger(): - ''' - Returns logger used by multiprocessing - ''' - global _logger - import logging - - with logging._lock: - if not _logger: - - _logger = logging.getLogger(LOGGER_NAME) - _logger.propagate = 0 - - # XXX multiprocessing should cleanup before logging - if hasattr(atexit, 'unregister'): - atexit.unregister(_exit_function) - atexit.register(_exit_function) - else: - atexit._exithandlers.remove((_exit_function, (), {})) - atexit._exithandlers.append((_exit_function, (), {})) - - return _logger - -def log_to_stderr(level=None): - ''' - Turn on logging and add a handler which prints to stderr - ''' - global _log_to_stderr - import logging - - logger = get_logger() - formatter = logging.Formatter(DEFAULT_LOGGING_FORMAT) - handler = logging.StreamHandler() - handler.setFormatter(formatter) - logger.addHandler(handler) - - if level: - logger.setLevel(level) - _log_to_stderr = True - return _logger - - -# Abstract socket support - -def _platform_supports_abstract_sockets(): - return sys.platform in ("linux", "android") - - -def is_abstract_socket_namespace(address): - if not address: - return False - if isinstance(address, bytes): - return address[0] == 0 - elif isinstance(address, str): - return address[0] == "\0" - raise TypeError(f'address type of {address!r} unrecognized') - - -abstract_sockets_supported = _platform_supports_abstract_sockets() - -# -# Function returning a temp directory which will be removed on exit -# - -# Maximum length of a NULL-terminated [1] socket file path is usually -# between 92 and 108 [2], but Linux is known to use a size of 108 [3]. -# BSD-based systems usually use a size of 104 or 108 and Windows does -# not create AF_UNIX sockets. -# -# [1]: https://github.com/python/cpython/issues/140734 -# [2]: https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/sys_un.h.html -# [3]: https://man7.org/linux/man-pages/man7/unix.7.html - -if sys.platform == 'linux': - _SUN_PATH_MAX = 108 -elif sys.platform.startswith(('openbsd', 'freebsd')): - _SUN_PATH_MAX = 104 -else: - # On Windows platforms, we do not create AF_UNIX sockets. - _SUN_PATH_MAX = None if os.name == 'nt' else 92 - -def _remove_temp_dir(rmtree, tempdir): - rmtree(tempdir) - - current_process = process.current_process() - # current_process() can be None if the finalizer is called - # late during Python finalization - if current_process is not None: - current_process._config['tempdir'] = None - -def _get_base_temp_dir(tempfile): - """Get a temporary directory where socket files will be created. - - To prevent additional imports, pass a pre-imported 'tempfile' module. - """ - if os.name == 'nt': - return None - # Most of the time, the default temporary directory is /tmp. Thus, - # listener sockets files "$TMPDIR/pymp-XXXXXXXX/sock-XXXXXXXX" do - # not have a path length exceeding SUN_PATH_MAX. - # - # If users specify their own temporary directory, we may be unable - # to create those files. Therefore, we fall back to the system-wide - # temporary directory /tmp, assumed to exist on POSIX systems. - # - # See https://github.com/python/cpython/issues/132124. - base_tempdir = tempfile.gettempdir() - # Files created in a temporary directory are suffixed by a string - # generated by tempfile._RandomNameSequence, which, by design, - # is 8 characters long. - # - # Thus, the socket file path length (without NULL terminator) will be: - # - # len(base_tempdir + '/pymp-XXXXXXXX' + '/sock-XXXXXXXX') - sun_path_len = len(base_tempdir) + 14 + 14 - # Strict inequality to account for the NULL terminator. - # See https://github.com/python/cpython/issues/140734. - if sun_path_len < _SUN_PATH_MAX: - return base_tempdir - # Fallback to the default system-wide temporary directory. - # This ignores user-defined environment variables. - # - # On POSIX systems, /tmp MUST be writable by any application [1]. - # We however emit a warning if this is not the case to prevent - # obscure errors later in the execution. - # - # On some legacy systems, /var/tmp and /usr/tmp can be present - # and will be used instead. - # - # [1]: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s18.html - dirlist = ['/tmp', '/var/tmp', '/usr/tmp'] - try: - base_system_tempdir = tempfile._get_default_tempdir(dirlist) - except FileNotFoundError: - warn("Process-wide temporary directory %s will not be usable for " - "creating socket files and no usable system-wide temporary " - "directory was found in %s", base_tempdir, dirlist) - # At this point, the system-wide temporary directory is not usable - # but we may assume that the user-defined one is, even if we will - # not be able to write socket files out there. - return base_tempdir - warn("Ignoring user-defined temporary directory: %s", base_tempdir) - # at most max(map(len, dirlist)) + 14 + 14 = 36 characters - assert len(base_system_tempdir) + 14 + 14 < _SUN_PATH_MAX - return base_system_tempdir - -def get_temp_dir(): - # get name of a temp directory which will be automatically cleaned up - tempdir = process.current_process()._config.get('tempdir') - if tempdir is None: - import shutil, tempfile - base_tempdir = _get_base_temp_dir(tempfile) - tempdir = tempfile.mkdtemp(prefix='pymp-', dir=base_tempdir) - info('created temp directory %s', tempdir) - # keep a strong reference to shutil.rmtree(), since the finalizer - # can be called late during Python shutdown - Finalize(None, _remove_temp_dir, args=(shutil.rmtree, tempdir), - exitpriority=-100) - process.current_process()._config['tempdir'] = tempdir - return tempdir - -# -# Support for reinitialization of objects when bootstrapping a child process -# - -_afterfork_registry = weakref.WeakValueDictionary() -_afterfork_counter = itertools.count() - -def _run_after_forkers(): - items = list(_afterfork_registry.items()) - items.sort() - for (index, ident, func), obj in items: - try: - func(obj) - except Exception as e: - info('after forker raised exception %s', e) - -def register_after_fork(obj, func): - _afterfork_registry[(next(_afterfork_counter), id(obj), func)] = obj - -# -# Finalization using weakrefs -# - -_finalizer_registry = {} -_finalizer_counter = itertools.count() - - -class Finalize(object): - ''' - Class which supports object finalization using weakrefs - ''' - def __init__(self, obj, callback, args=(), kwargs=None, exitpriority=None): - if (exitpriority is not None) and not isinstance(exitpriority,int): - raise TypeError( - "Exitpriority ({0!r}) must be None or int, not {1!s}".format( - exitpriority, type(exitpriority))) - - if obj is not None: - self._weakref = weakref.ref(obj, self) - elif exitpriority is None: - raise ValueError("Without object, exitpriority cannot be None") - - self._callback = callback - self._args = args - self._kwargs = kwargs or {} - self._key = (exitpriority, next(_finalizer_counter)) - self._pid = os.getpid() - - _finalizer_registry[self._key] = self - - def __call__(self, wr=None, - # Need to bind these locally because the globals can have - # been cleared at shutdown - _finalizer_registry=_finalizer_registry, - sub_debug=sub_debug, getpid=os.getpid): - ''' - Run the callback unless it has already been called or cancelled - ''' - try: - del _finalizer_registry[self._key] - except KeyError: - sub_debug('finalizer no longer registered') - else: - if self._pid != getpid(): - sub_debug('finalizer ignored because different process') - res = None - else: - sub_debug('finalizer calling %s with args %s and kwargs %s', - self._callback, self._args, self._kwargs) - res = self._callback(*self._args, **self._kwargs) - self._weakref = self._callback = self._args = \ - self._kwargs = self._key = None - return res - - def cancel(self): - ''' - Cancel finalization of the object - ''' - try: - del _finalizer_registry[self._key] - except KeyError: - pass - else: - self._weakref = self._callback = self._args = \ - self._kwargs = self._key = None - - def still_active(self): - ''' - Return whether this finalizer is still waiting to invoke callback - ''' - return self._key in _finalizer_registry - - def __repr__(self): - try: - obj = self._weakref() - except (AttributeError, TypeError): - obj = None - - if obj is None: - return '<%s object, dead>' % self.__class__.__name__ - - x = '<%s object, callback=%s' % ( - self.__class__.__name__, - getattr(self._callback, '__name__', self._callback)) - if self._args: - x += ', args=' + str(self._args) - if self._kwargs: - x += ', kwargs=' + str(self._kwargs) - if self._key[0] is not None: - x += ', exitpriority=' + str(self._key[0]) - return x + '>' - - -def _run_finalizers(minpriority=None): - ''' - Run all finalizers whose exit priority is not None and at least minpriority - - Finalizers with highest priority are called first; finalizers with - the same priority will be called in reverse order of creation. - ''' - if _finalizer_registry is None: - # This function may be called after this module's globals are - # destroyed. See the _exit_function function in this module for more - # notes. - return - - if minpriority is None: - f = lambda p : p[0] is not None - else: - f = lambda p : p[0] is not None and p[0] >= minpriority - - # Careful: _finalizer_registry may be mutated while this function - # is running (either by a GC run or by another thread). - - # list(_finalizer_registry) should be atomic, while - # list(_finalizer_registry.items()) is not. - keys = [key for key in list(_finalizer_registry) if f(key)] - keys.sort(reverse=True) - - for key in keys: - finalizer = _finalizer_registry.get(key) - # key may have been removed from the registry - if finalizer is not None: - sub_debug('calling %s', finalizer) - try: - finalizer() - except Exception: - import traceback - traceback.print_exc() - - if minpriority is None: - _finalizer_registry.clear() - -# -# Clean up on exit -# - -def is_exiting(): - ''' - Returns true if the process is shutting down - ''' - return _exiting or _exiting is None - -_exiting = False - -def _exit_function(info=info, debug=debug, _run_finalizers=_run_finalizers, - active_children=process.active_children, - current_process=process.current_process): - # We hold on to references to functions in the arglist due to the - # situation described below, where this function is called after this - # module's globals are destroyed. - - global _exiting - - if not _exiting: - _exiting = True - - info('process shutting down') - debug('running all "atexit" finalizers with priority >= 0') - _run_finalizers(0) - - if current_process() is not None: - # We check if the current process is None here because if - # it's None, any call to ``active_children()`` will raise - # an AttributeError (active_children winds up trying to - # get attributes from util._current_process). One - # situation where this can happen is if someone has - # manipulated sys.modules, causing this module to be - # garbage collected. The destructor for the module type - # then replaces all values in the module dict with None. - # For instance, after setuptools runs a test it replaces - # sys.modules with a copy created earlier. See issues - # #9775 and #15881. Also related: #4106, #9205, and - # #9207. - - for p in active_children(): - if p.daemon: - info('calling terminate() for daemon %s', p.name) - p._popen.terminate() - - for p in active_children(): - info('calling join() for process %s', p.name) - p.join() - - debug('running the remaining "atexit" finalizers') - _run_finalizers() - -atexit.register(_exit_function) - -# -# Some fork aware types -# - -class ForkAwareThreadLock(object): - def __init__(self): - self._lock = threading.Lock() - self.acquire = self._lock.acquire - self.release = self._lock.release - register_after_fork(self, ForkAwareThreadLock._at_fork_reinit) - - def _at_fork_reinit(self): - self._lock._at_fork_reinit() - - def __enter__(self): - return self._lock.__enter__() - - def __exit__(self, *args): - return self._lock.__exit__(*args) - - -class ForkAwareLocal(threading.local): - def __init__(self): - register_after_fork(self, lambda obj : obj.__dict__.clear()) - def __reduce__(self): - return type(self), () - -# -# Close fds except those specified -# - -try: - MAXFD = os.sysconf("SC_OPEN_MAX") -except Exception: - MAXFD = 256 - -def close_all_fds_except(fds): - fds = list(fds) + [-1, MAXFD] - fds.sort() - assert fds[-1] == MAXFD, 'fd too large' - for i in range(len(fds) - 1): - os.closerange(fds[i]+1, fds[i+1]) -# -# Close sys.stdin and replace stdin with os.devnull -# - -def _close_stdin(): - if sys.stdin is None: - return - - try: - sys.stdin.close() - except (OSError, ValueError): - pass - - try: - fd = os.open(os.devnull, os.O_RDONLY) - try: - sys.stdin = open(fd, encoding="utf-8", closefd=False) - except: - os.close(fd) - raise - except (OSError, ValueError): - pass - -# -# Flush standard streams, if any -# - -def _flush_std_streams(): - try: - sys.stdout.flush() - except (AttributeError, ValueError): - pass - try: - sys.stderr.flush() - except (AttributeError, ValueError): - pass - -# -# Start a program with only specified fds kept open -# - -def spawnv_passfds(path, args, passfds): - import _posixsubprocess - passfds = tuple(sorted(map(int, passfds))) - errpipe_read, errpipe_write = os.pipe() - try: - return _posixsubprocess.fork_exec( - args, [path], True, passfds, None, None, - -1, -1, -1, -1, -1, -1, errpipe_read, errpipe_write, - False, False, -1, None, None, None, -1, None) - finally: - os.close(errpipe_read) - os.close(errpipe_write) - - -def close_fds(*fds): - """Close each file descriptor given as an argument""" - for fd in fds: - os.close(fd) - - -def _cleanup_tests(): - """Cleanup multiprocessing resources when multiprocessing tests - completed.""" - - from test import support - - # cleanup multiprocessing - process._cleanup() - - # Stop the ForkServer process if it's running - from multiprocessing import forkserver - forkserver._forkserver._stop() - - # Stop the ResourceTracker process if it's running - from multiprocessing import resource_tracker - resource_tracker._resource_tracker._stop() - - # bpo-37421: Explicitly call _run_finalizers() to remove immediately - # temporary directories created by multiprocessing.util.get_temp_dir(). - _run_finalizers() - support.gc_collect() - - support.reap_children() diff --git a/Python314_4_x86_Template/Lib/netrc.py b/Python314_4_x86_Template/Lib/netrc.py deleted file mode 100644 index bd003e80a..000000000 --- a/Python314_4_x86_Template/Lib/netrc.py +++ /dev/null @@ -1,199 +0,0 @@ -"""An object-oriented interface to .netrc files.""" - -# Module and documentation by Eric S. Raymond, 21 Dec 1998 - -import os, stat - -__all__ = ["netrc", "NetrcParseError"] - - -def _can_security_check(): - # On WASI, getuid() is indicated as a stub but it may also be missing. - return os.name == 'posix' and hasattr(os, 'getuid') - - -def _getpwuid(uid): - try: - import pwd - return pwd.getpwuid(uid)[0] - except (ImportError, LookupError): - return f'uid {uid}' - - -class NetrcParseError(Exception): - """Exception raised on syntax errors in the .netrc file.""" - def __init__(self, msg, filename=None, lineno=None): - self.filename = filename - self.lineno = lineno - self.msg = msg - Exception.__init__(self, msg) - - def __str__(self): - return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno) - - -class _netrclex: - def __init__(self, fp): - self.lineno = 1 - self.instream = fp - self.whitespace = "\n\t\r " - self.pushback = [] - - def _read_char(self): - ch = self.instream.read(1) - if ch == "\n": - self.lineno += 1 - return ch - - def get_token(self): - if self.pushback: - return self.pushback.pop(0) - token = "" - fiter = iter(self._read_char, "") - for ch in fiter: - if ch in self.whitespace: - continue - if ch == '"': - for ch in fiter: - if ch == '"': - return token - elif ch == "\\": - ch = self._read_char() - token += ch - else: - if ch == "\\": - ch = self._read_char() - token += ch - for ch in fiter: - if ch in self.whitespace: - return token - elif ch == "\\": - ch = self._read_char() - token += ch - return token - - def push_token(self, token): - self.pushback.append(token) - - -class netrc: - def __init__(self, file=None): - default_netrc = file is None - if file is None: - file = os.path.join(os.path.expanduser("~"), ".netrc") - self.hosts = {} - self.macros = {} - try: - with open(file, encoding="utf-8") as fp: - self._parse(file, fp, default_netrc) - except UnicodeDecodeError: - with open(file, encoding="locale") as fp: - self._parse(file, fp, default_netrc) - - def _parse(self, file, fp, default_netrc): - lexer = _netrclex(fp) - while 1: - # Look for a machine, default, or macdef top-level keyword - saved_lineno = lexer.lineno - toplevel = tt = lexer.get_token() - if not tt: - break - elif tt[0] == '#': - if lexer.lineno == saved_lineno and len(tt) == 1: - lexer.instream.readline() - continue - elif tt == 'machine': - entryname = lexer.get_token() - elif tt == 'default': - entryname = 'default' - elif tt == 'macdef': - entryname = lexer.get_token() - self.macros[entryname] = [] - while 1: - line = lexer.instream.readline() - if not line: - raise NetrcParseError( - "Macro definition missing null line terminator.", - file, lexer.lineno) - if line == '\n': - # a macro definition finished with consecutive new-line - # characters. The first \n is encountered by the - # readline() method and this is the second \n. - break - self.macros[entryname].append(line) - continue - else: - raise NetrcParseError( - "bad toplevel token %r" % tt, file, lexer.lineno) - - if not entryname: - raise NetrcParseError("missing %r name" % tt, file, lexer.lineno) - - # We're looking at start of an entry for a named machine or default. - login = account = password = '' - self.hosts[entryname] = {} - while 1: - prev_lineno = lexer.lineno - tt = lexer.get_token() - if tt.startswith('#'): - if lexer.lineno == prev_lineno: - lexer.instream.readline() - continue - if tt in {'', 'machine', 'default', 'macdef'}: - self.hosts[entryname] = (login, account, password) - lexer.push_token(tt) - break - elif tt == 'login' or tt == 'user': - login = lexer.get_token() - elif tt == 'account': - account = lexer.get_token() - elif tt == 'password': - password = lexer.get_token() - else: - raise NetrcParseError("bad follower token %r" % tt, - file, lexer.lineno) - self._security_check(fp, default_netrc, self.hosts[entryname][0]) - - def _security_check(self, fp, default_netrc, login): - if _can_security_check() and default_netrc and login != "anonymous": - prop = os.fstat(fp.fileno()) - current_user_id = os.getuid() - if prop.st_uid != current_user_id: - fowner = _getpwuid(prop.st_uid) - user = _getpwuid(current_user_id) - raise NetrcParseError( - (f"~/.netrc file owner ({fowner}, {user}) does not match" - " current user")) - if (prop.st_mode & (stat.S_IRWXG | stat.S_IRWXO)): - raise NetrcParseError( - "~/.netrc access too permissive: access" - " permissions must restrict access to only" - " the owner") - - def authenticators(self, host): - """Return a (user, account, password) tuple for given host.""" - if host in self.hosts: - return self.hosts[host] - elif 'default' in self.hosts: - return self.hosts['default'] - else: - return None - - def __repr__(self): - """Dump the class data in the format of a .netrc file.""" - rep = "" - for host in self.hosts.keys(): - attrs = self.hosts[host] - rep += f"machine {host}\n\tlogin {attrs[0]}\n" - if attrs[1]: - rep += f"\taccount {attrs[1]}\n" - rep += f"\tpassword {attrs[2]}\n" - for macro in self.macros.keys(): - rep += f"macdef {macro}\n" - for line in self.macros[macro]: - rep += line - rep += "\n" - return rep - -if __name__ == '__main__': - print(netrc()) diff --git a/Python314_4_x86_Template/Lib/ntpath.py b/Python314_4_x86_Template/Lib/ntpath.py deleted file mode 100644 index 01f060e70..000000000 --- a/Python314_4_x86_Template/Lib/ntpath.py +++ /dev/null @@ -1,870 +0,0 @@ -# Module 'ntpath' -- common operations on WinNT/Win95 pathnames -"""Common pathname manipulations, WindowsNT/95 version. - -Instead of importing this module directly, import os and refer to this -module as os.path. -""" - -# strings representing various path-related bits and pieces -# These are primarily for export; internally, they are hardcoded. -# Should be set before imports for resolving cyclic dependency. -curdir = '.' -pardir = '..' -extsep = '.' -sep = '\\' -pathsep = ';' -altsep = '/' -defpath = '.;C:\\bin' -devnull = 'nul' - -import os -import sys -import genericpath -from genericpath import * - -__all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext", - "basename","dirname","commonprefix","getsize","getmtime", - "getatime","getctime", "islink","exists","lexists","isdir","isfile", - "ismount","isreserved","expanduser","expandvars","normpath", - "abspath","curdir","pardir","sep","pathsep","defpath","altsep", - "extsep","devnull","realpath","supports_unicode_filenames","relpath", - "samefile", "sameopenfile", "samestat", "commonpath", "isjunction", - "isdevdrive", "ALLOW_MISSING"] - -def _get_bothseps(path): - if isinstance(path, bytes): - return b'\\/' - else: - return '\\/' - -# Normalize the case of a pathname and map slashes to backslashes. -# Other normalizations (such as optimizing '../' away) are not done -# (this is done by normpath). - -try: - from _winapi import ( - LCMapStringEx as _LCMapStringEx, - LOCALE_NAME_INVARIANT as _LOCALE_NAME_INVARIANT, - LCMAP_LOWERCASE as _LCMAP_LOWERCASE) - - def normcase(s): - """Normalize case of pathname. - - Makes all characters lowercase and all slashes into backslashes. - """ - s = os.fspath(s) - if not s: - return s - if isinstance(s, bytes): - encoding = sys.getfilesystemencoding() - s = s.decode(encoding, 'surrogateescape').replace('/', '\\') - s = _LCMapStringEx(_LOCALE_NAME_INVARIANT, - _LCMAP_LOWERCASE, s) - return s.encode(encoding, 'surrogateescape') - else: - return _LCMapStringEx(_LOCALE_NAME_INVARIANT, - _LCMAP_LOWERCASE, - s.replace('/', '\\')) -except ImportError: - def normcase(s): - """Normalize case of pathname. - - Makes all characters lowercase and all slashes into backslashes. - """ - s = os.fspath(s) - if isinstance(s, bytes): - return os.fsencode(os.fsdecode(s).replace('/', '\\').lower()) - return s.replace('/', '\\').lower() - - -def isabs(s): - """Test whether a path is absolute""" - s = os.fspath(s) - if isinstance(s, bytes): - sep = b'\\' - altsep = b'/' - colon_sep = b':\\' - double_sep = b'\\\\' - else: - sep = '\\' - altsep = '/' - colon_sep = ':\\' - double_sep = '\\\\' - s = s[:3].replace(altsep, sep) - # Absolute: UNC, device, and paths with a drive and root. - return s.startswith(colon_sep, 1) or s.startswith(double_sep) - - -# Join two (or more) paths. -def join(path, *paths): - path = os.fspath(path) - if isinstance(path, bytes): - sep = b'\\' - seps = b'\\/' - colon_seps = b':\\/' - else: - sep = '\\' - seps = '\\/' - colon_seps = ':\\/' - try: - result_drive, result_root, result_path = splitroot(path) - for p in paths: - p_drive, p_root, p_path = splitroot(p) - if p_root: - # Second path is absolute - if p_drive or not result_drive: - result_drive = p_drive - result_root = p_root - result_path = p_path - continue - elif p_drive and p_drive != result_drive: - if p_drive.lower() != result_drive.lower(): - # Different drives => ignore the first path entirely - result_drive = p_drive - result_root = p_root - result_path = p_path - continue - # Same drive in different case - result_drive = p_drive - # Second path is relative to the first - if result_path and result_path[-1] not in seps: - result_path = result_path + sep - result_path = result_path + p_path - ## add separator between UNC and non-absolute path - if (result_path and not result_root and - result_drive and result_drive[-1] not in colon_seps): - return result_drive + sep + result_path - return result_drive + result_root + result_path - except (TypeError, AttributeError, BytesWarning): - genericpath._check_arg_types('join', path, *paths) - raise - - -# Split a path in a drive specification (a drive letter followed by a -# colon) and the path specification. -# It is always true that drivespec + pathspec == p -def splitdrive(p): - """Split a pathname into drive/UNC sharepoint and relative path specifiers. - Returns a 2-tuple (drive_or_unc, path); either part may be empty. - - If you assign - result = splitdrive(p) - It is always true that: - result[0] + result[1] == p - - If the path contained a drive letter, drive_or_unc will contain everything - up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") - - If the path contained a UNC path, the drive_or_unc will contain the host name - and share up to but not including the fourth directory separator character. - e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") - - Paths cannot contain both a drive letter and a UNC path. - - """ - drive, root, tail = splitroot(p) - return drive, root + tail - - -try: - from nt import _path_splitroot_ex as splitroot -except ImportError: - def splitroot(p): - """Split a pathname into drive, root and tail. - - The tail contains anything after the root.""" - p = os.fspath(p) - if isinstance(p, bytes): - sep = b'\\' - altsep = b'/' - colon = b':' - unc_prefix = b'\\\\?\\UNC\\' - empty = b'' - else: - sep = '\\' - altsep = '/' - colon = ':' - unc_prefix = '\\\\?\\UNC\\' - empty = '' - normp = p.replace(altsep, sep) - if normp[:1] == sep: - if normp[1:2] == sep: - # UNC drives, e.g. \\server\share or \\?\UNC\server\share - # Device drives, e.g. \\.\device or \\?\device - start = 8 if normp[:8].upper() == unc_prefix else 2 - index = normp.find(sep, start) - if index == -1: - return p, empty, empty - index2 = normp.find(sep, index + 1) - if index2 == -1: - return p, empty, empty - return p[:index2], p[index2:index2 + 1], p[index2 + 1:] - else: - # Relative path with root, e.g. \Windows - return empty, p[:1], p[1:] - elif normp[1:2] == colon: - if normp[2:3] == sep: - # Absolute drive-letter path, e.g. X:\Windows - return p[:2], p[2:3], p[3:] - else: - # Relative path with drive, e.g. X:Windows - return p[:2], empty, p[2:] - else: - # Relative path, e.g. Windows - return empty, empty, p - - -# Split a path in head (everything up to the last '/') and tail (the -# rest). After the trailing '/' is stripped, the invariant -# join(head, tail) == p holds. -# The resulting head won't end in '/' unless it is the root. - -def split(p): - """Split a pathname. - - Return tuple (head, tail) where tail is everything after the final slash. - Either part may be empty.""" - p = os.fspath(p) - seps = _get_bothseps(p) - d, r, p = splitroot(p) - # set i to index beyond p's last slash - i = len(p) - while i and p[i-1] not in seps: - i -= 1 - head, tail = p[:i], p[i:] # now tail has no slashes - return d + r + head.rstrip(seps), tail - - -# Split a path in root and extension. -# The extension is everything starting at the last dot in the last -# pathname component; the root is everything before that. -# It is always true that root + ext == p. - -def splitext(p): - p = os.fspath(p) - if isinstance(p, bytes): - return genericpath._splitext(p, b'\\', b'/', b'.') - else: - return genericpath._splitext(p, '\\', '/', '.') -splitext.__doc__ = genericpath._splitext.__doc__ - - -# Return the tail (basename) part of a path. - -def basename(p): - """Returns the final component of a pathname""" - return split(p)[1] - - -# Return the head (dirname) part of a path. - -def dirname(p): - """Returns the directory component of a pathname""" - return split(p)[0] - - -# Is a path a mount point? -# Any drive letter root (eg c:\) -# Any share UNC (eg \\server\share) -# Any volume mounted on a filesystem folder -# -# No one method detects all three situations. Historically we've lexically -# detected drive letter roots and share UNCs. The canonical approach to -# detecting mounted volumes (querying the reparse tag) fails for the most -# common case: drive letter roots. The alternative which uses GetVolumePathName -# fails if the drive letter is the result of a SUBST. -try: - from nt import _getvolumepathname -except ImportError: - _getvolumepathname = None -def ismount(path): - """Test whether a path is a mount point (a drive root, the root of a - share, or a mounted volume)""" - path = os.fspath(path) - seps = _get_bothseps(path) - path = abspath(path) - drive, root, rest = splitroot(path) - if drive and drive[0] in seps: - return not rest - if root and not rest: - return True - - if _getvolumepathname: - x = path.rstrip(seps) - y =_getvolumepathname(path).rstrip(seps) - return x.casefold() == y.casefold() - else: - return False - - -_reserved_chars = frozenset( - {chr(i) for i in range(32)} | - {'"', '*', ':', '<', '>', '?', '|', '/', '\\'} -) - -_reserved_names = frozenset( - {'CON', 'PRN', 'AUX', 'NUL', 'CONIN$', 'CONOUT$'} | - {f'COM{c}' for c in '123456789\xb9\xb2\xb3'} | - {f'LPT{c}' for c in '123456789\xb9\xb2\xb3'} -) - -def isreserved(path): - """Return true if the pathname is reserved by the system.""" - # Refer to "Naming Files, Paths, and Namespaces": - # https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file - path = os.fsdecode(splitroot(path)[2]).replace(altsep, sep) - return any(_isreservedname(name) for name in reversed(path.split(sep))) - -def _isreservedname(name): - """Return true if the filename is reserved by the system.""" - # Trailing dots and spaces are reserved. - if name[-1:] in ('.', ' '): - return name not in ('.', '..') - # Wildcards, separators, colon, and pipe (*?"<>/\:|) are reserved. - # ASCII control characters (0-31) are reserved. - # Colon is reserved for file streams (e.g. "name:stream[:type]"). - if _reserved_chars.intersection(name): - return True - # DOS device names are reserved (e.g. "nul" or "nul .txt"). The rules - # are complex and vary across Windows versions. On the side of - # caution, return True for names that may not be reserved. - return name.partition('.')[0].rstrip(' ').upper() in _reserved_names - - -# Expand paths beginning with '~' or '~user'. -# '~' means $HOME; '~user' means that user's home directory. -# If the path doesn't begin with '~', or if the user or $HOME is unknown, -# the path is returned unchanged (leaving error reporting to whatever -# function is called with the expanded path as argument). -# See also module 'glob' for expansion of *, ? and [...] in pathnames. -# (A function should also be defined to do full *sh-style environment -# variable expansion.) - -def expanduser(path): - """Expand ~ and ~user constructs. - - If user or $HOME is unknown, do nothing.""" - path = os.fspath(path) - if isinstance(path, bytes): - seps = b'\\/' - tilde = b'~' - else: - seps = '\\/' - tilde = '~' - if not path.startswith(tilde): - return path - i, n = 1, len(path) - while i < n and path[i] not in seps: - i += 1 - - if 'USERPROFILE' in os.environ: - userhome = os.environ['USERPROFILE'] - elif 'HOMEPATH' not in os.environ: - return path - else: - drive = os.environ.get('HOMEDRIVE', '') - userhome = join(drive, os.environ['HOMEPATH']) - - if i != 1: #~user - target_user = path[1:i] - if isinstance(target_user, bytes): - target_user = os.fsdecode(target_user) - current_user = os.environ.get('USERNAME') - - if target_user != current_user: - # Try to guess user home directory. By default all user - # profile directories are located in the same place and are - # named by corresponding usernames. If userhome isn't a - # normal profile directory, this guess is likely wrong, - # so we bail out. - if current_user != basename(userhome): - return path - userhome = join(dirname(userhome), target_user) - - if isinstance(path, bytes): - userhome = os.fsencode(userhome) - - return userhome + path[i:] - - -# Expand paths containing shell variable substitutions. -# The following rules apply: -# - no expansion within single quotes -# - '$$' is translated into '$' -# - '%%' is translated into '%' if '%%' are not seen in %var1%%var2% -# - ${varname} is accepted. -# - $varname is accepted. -# - %varname% is accepted. -# - varnames can be made out of letters, digits and the characters '_-' -# (though is not verified in the ${varname} and %varname% cases) -# XXX With COMMAND.COM you can use any characters in a variable name, -# XXX except '^|<>='. - -_varpattern = r"'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)" -_varsub = None -_varsubb = None - -def expandvars(path): - """Expand shell variables of the forms $var, ${var} and %var%. - - Unknown variables are left unchanged.""" - path = os.fspath(path) - global _varsub, _varsubb - if isinstance(path, bytes): - if b'$' not in path and b'%' not in path: - return path - if not _varsubb: - import re - _varsubb = re.compile(_varpattern.encode(), re.ASCII).sub - sub = _varsubb - percent = b'%' - brace = b'{' - rbrace = b'}' - dollar = b'$' - environ = getattr(os, 'environb', None) - else: - if '$' not in path and '%' not in path: - return path - if not _varsub: - import re - _varsub = re.compile(_varpattern, re.ASCII).sub - sub = _varsub - percent = '%' - brace = '{' - rbrace = '}' - dollar = '$' - environ = os.environ - - def repl(m): - lastindex = m.lastindex - if lastindex is None: - return m[0] - name = m[lastindex] - if lastindex == 1: - if name == percent: - return name - if not name.endswith(percent): - return m[0] - name = name[:-1] - else: - if name == dollar: - return name - if name.startswith(brace): - if not name.endswith(rbrace): - return m[0] - name = name[1:-1] - - try: - if environ is None: - return os.fsencode(os.environ[os.fsdecode(name)]) - else: - return environ[name] - except KeyError: - return m[0] - - return sub(repl, path) - - -# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B. -# Previously, this function also truncated pathnames to 8+3 format, -# but as this module is called "ntpath", that's obviously wrong! -try: - from nt import _path_normpath as normpath - -except ImportError: - def normpath(path): - """Normalize path, eliminating double slashes, etc.""" - path = os.fspath(path) - if isinstance(path, bytes): - sep = b'\\' - altsep = b'/' - curdir = b'.' - pardir = b'..' - else: - sep = '\\' - altsep = '/' - curdir = '.' - pardir = '..' - path = path.replace(altsep, sep) - drive, root, path = splitroot(path) - prefix = drive + root - comps = path.split(sep) - i = 0 - while i < len(comps): - if not comps[i] or comps[i] == curdir: - del comps[i] - elif comps[i] == pardir: - if i > 0 and comps[i-1] != pardir: - del comps[i-1:i+1] - i -= 1 - elif i == 0 and root: - del comps[i] - else: - i += 1 - else: - i += 1 - # If the path is now empty, substitute '.' - if not prefix and not comps: - comps.append(curdir) - return prefix + sep.join(comps) - - -# Return an absolute path. -try: - from nt import _getfullpathname - -except ImportError: # not running on Windows - mock up something sensible - def abspath(path): - """Return the absolute version of a path.""" - path = os.fspath(path) - if not isabs(path): - if isinstance(path, bytes): - cwd = os.getcwdb() - else: - cwd = os.getcwd() - path = join(cwd, path) - return normpath(path) - -else: # use native Windows method on Windows - def abspath(path): - """Return the absolute version of a path.""" - try: - return _getfullpathname(normpath(path)) - except (OSError, ValueError): - # See gh-75230, handle outside for cleaner traceback - pass - path = os.fspath(path) - if not isabs(path): - if isinstance(path, bytes): - sep = b'\\' - getcwd = os.getcwdb - else: - sep = '\\' - getcwd = os.getcwd - drive, root, path = splitroot(path) - # Either drive or root can be nonempty, but not both. - if drive or root: - try: - path = join(_getfullpathname(drive + root), path) - except (OSError, ValueError): - # Drive "\0:" cannot exist; use the root directory. - path = drive + sep + path - else: - path = join(getcwd(), path) - return normpath(path) - -try: - from nt import _findfirstfile, _getfinalpathname, readlink as _nt_readlink -except ImportError: - # realpath is a no-op on systems without _getfinalpathname support. - def realpath(path, *, strict=False): - return abspath(path) -else: - def _readlink_deep(path, ignored_error=OSError): - # These error codes indicate that we should stop reading links and - # return the path we currently have. - # 1: ERROR_INVALID_FUNCTION - # 2: ERROR_FILE_NOT_FOUND - # 3: ERROR_DIRECTORY_NOT_FOUND - # 5: ERROR_ACCESS_DENIED - # 21: ERROR_NOT_READY (implies drive with no media) - # 32: ERROR_SHARING_VIOLATION (probably an NTFS paging file) - # 50: ERROR_NOT_SUPPORTED (implies no support for reparse points) - # 67: ERROR_BAD_NET_NAME (implies remote server unavailable) - # 87: ERROR_INVALID_PARAMETER - # 4390: ERROR_NOT_A_REPARSE_POINT - # 4392: ERROR_INVALID_REPARSE_DATA - # 4393: ERROR_REPARSE_TAG_INVALID - allowed_winerror = 1, 2, 3, 5, 21, 32, 50, 67, 87, 4390, 4392, 4393 - - seen = set() - while normcase(path) not in seen: - seen.add(normcase(path)) - try: - old_path = path - path = _nt_readlink(path) - # Links may be relative, so resolve them against their - # own location - if not isabs(path): - # If it's something other than a symlink, we don't know - # what it's actually going to be resolved against, so - # just return the old path. - if not islink(old_path): - path = old_path - break - path = normpath(join(dirname(old_path), path)) - except ignored_error as ex: - if ex.winerror in allowed_winerror: - break - raise - except ValueError: - # Stop on reparse points that are not symlinks - break - return path - - def _getfinalpathname_nonstrict(path, ignored_error=OSError): - # These error codes indicate that we should stop resolving the path - # and return the value we currently have. - # 1: ERROR_INVALID_FUNCTION - # 2: ERROR_FILE_NOT_FOUND - # 3: ERROR_DIRECTORY_NOT_FOUND - # 5: ERROR_ACCESS_DENIED - # 21: ERROR_NOT_READY (implies drive with no media) - # 32: ERROR_SHARING_VIOLATION (probably an NTFS paging file) - # 50: ERROR_NOT_SUPPORTED - # 53: ERROR_BAD_NETPATH - # 65: ERROR_NETWORK_ACCESS_DENIED - # 67: ERROR_BAD_NET_NAME (implies remote server unavailable) - # 87: ERROR_INVALID_PARAMETER - # 123: ERROR_INVALID_NAME - # 161: ERROR_BAD_PATHNAME - # 1005: ERROR_UNRECOGNIZED_VOLUME - # 1920: ERROR_CANT_ACCESS_FILE - # 1921: ERROR_CANT_RESOLVE_FILENAME (implies unfollowable symlink) - allowed_winerror = 1, 2, 3, 5, 21, 32, 50, 53, 65, 67, 87, 123, 161, 1005, 1920, 1921 - - # Non-strict algorithm is to find as much of the target directory - # as we can and join the rest. - tail = path[:0] - while path: - try: - path = _getfinalpathname(path) - return join(path, tail) if tail else path - except ignored_error as ex: - if ex.winerror not in allowed_winerror: - raise - try: - # The OS could not resolve this path fully, so we attempt - # to follow the link ourselves. If we succeed, join the tail - # and return. - new_path = _readlink_deep(path, - ignored_error=ignored_error) - if new_path != path: - return join(new_path, tail) if tail else new_path - except ignored_error: - # If we fail to readlink(), let's keep traversing - pass - # If we get these errors, try to get the real name of the file without accessing it. - if ex.winerror in (1, 5, 32, 50, 87, 1920, 1921): - try: - name = _findfirstfile(path) - path, _ = split(path) - except ignored_error: - path, name = split(path) - else: - path, name = split(path) - if path and not name: - return path + tail - tail = join(name, tail) if tail else name - return tail - - def realpath(path, *, strict=False): - path = normpath(path) - if isinstance(path, bytes): - prefix = b'\\\\?\\' - unc_prefix = b'\\\\?\\UNC\\' - new_unc_prefix = b'\\\\' - cwd = os.getcwdb() - # bpo-38081: Special case for realpath(b'nul') - devnull = b'nul' - if normcase(path) == devnull: - return b'\\\\.\\NUL' - else: - prefix = '\\\\?\\' - unc_prefix = '\\\\?\\UNC\\' - new_unc_prefix = '\\\\' - cwd = os.getcwd() - # bpo-38081: Special case for realpath('nul') - devnull = 'nul' - if normcase(path) == devnull: - return '\\\\.\\NUL' - had_prefix = path.startswith(prefix) - - if strict is ALLOW_MISSING: - ignored_error = FileNotFoundError - strict = True - elif strict: - ignored_error = () - else: - ignored_error = OSError - - if not had_prefix and not isabs(path): - path = join(cwd, path) - try: - path = _getfinalpathname(path) - initial_winerror = 0 - except ValueError as ex: - # gh-106242: Raised for embedded null characters - # In strict modes, we convert into an OSError. - # Non-strict mode returns the path as-is, since we've already - # made it absolute. - if strict: - raise OSError(str(ex)) from None - path = normpath(path) - except ignored_error as ex: - initial_winerror = ex.winerror - path = _getfinalpathname_nonstrict(path, - ignored_error=ignored_error) - # The path returned by _getfinalpathname will always start with \\?\ - - # strip off that prefix unless it was already provided on the original - # path. - if not had_prefix and path.startswith(prefix): - # For UNC paths, the prefix will actually be \\?\UNC\ - # Handle that case as well. - if path.startswith(unc_prefix): - spath = new_unc_prefix + path[len(unc_prefix):] - else: - spath = path[len(prefix):] - # Ensure that the non-prefixed path resolves to the same path - try: - if _getfinalpathname(spath) == path: - path = spath - except ValueError as ex: - # Unexpected, as an invalid path should not have gained a prefix - # at any point, but we ignore this error just in case. - pass - except OSError as ex: - # If the path does not exist and originally did not exist, then - # strip the prefix anyway. - if ex.winerror == initial_winerror: - path = spath - return path - - -# All supported version have Unicode filename support. -supports_unicode_filenames = True - -def relpath(path, start=None): - """Return a relative version of a path""" - path = os.fspath(path) - if not path: - raise ValueError("no path specified") - - if isinstance(path, bytes): - sep = b'\\' - curdir = b'.' - pardir = b'..' - else: - sep = '\\' - curdir = '.' - pardir = '..' - - if start is None: - start = curdir - else: - start = os.fspath(start) - - try: - start_abs = abspath(start) - path_abs = abspath(path) - start_drive, _, start_rest = splitroot(start_abs) - path_drive, _, path_rest = splitroot(path_abs) - if normcase(start_drive) != normcase(path_drive): - raise ValueError("path is on mount %r, start on mount %r" % ( - path_drive, start_drive)) - - start_list = start_rest.split(sep) if start_rest else [] - path_list = path_rest.split(sep) if path_rest else [] - # Work out how much of the filepath is shared by start and path. - i = 0 - for e1, e2 in zip(start_list, path_list): - if normcase(e1) != normcase(e2): - break - i += 1 - - rel_list = [pardir] * (len(start_list)-i) + path_list[i:] - if not rel_list: - return curdir - return sep.join(rel_list) - except (TypeError, ValueError, AttributeError, BytesWarning, DeprecationWarning): - genericpath._check_arg_types('relpath', path, start) - raise - - -# Return the longest common sub-path of the iterable of paths given as input. -# The function is case-insensitive and 'separator-insensitive', i.e. if the -# only difference between two paths is the use of '\' versus '/' as separator, -# they are deemed to be equal. -# -# However, the returned path will have the standard '\' separator (even if the -# given paths had the alternative '/' separator) and will have the case of the -# first path given in the iterable. Additionally, any trailing separator is -# stripped from the returned path. - -def commonpath(paths): - """Given an iterable of path names, returns the longest common sub-path.""" - paths = tuple(map(os.fspath, paths)) - if not paths: - raise ValueError('commonpath() arg is an empty iterable') - - if isinstance(paths[0], bytes): - sep = b'\\' - altsep = b'/' - curdir = b'.' - else: - sep = '\\' - altsep = '/' - curdir = '.' - - try: - drivesplits = [splitroot(p.replace(altsep, sep).lower()) for p in paths] - split_paths = [p.split(sep) for d, r, p in drivesplits] - - # Check that all drive letters or UNC paths match. The check is made only - # now otherwise type errors for mixing strings and bytes would not be - # caught. - if len({d for d, r, p in drivesplits}) != 1: - raise ValueError("Paths don't have the same drive") - - drive, root, path = splitroot(paths[0].replace(altsep, sep)) - if len({r for d, r, p in drivesplits}) != 1: - if drive: - raise ValueError("Can't mix absolute and relative paths") - else: - raise ValueError("Can't mix rooted and not-rooted paths") - - common = path.split(sep) - common = [c for c in common if c and c != curdir] - - split_paths = [[c for c in s if c and c != curdir] for s in split_paths] - s1 = min(split_paths) - s2 = max(split_paths) - for i, c in enumerate(s1): - if c != s2[i]: - common = common[:i] - break - else: - common = common[:len(s1)] - - return drive + root + sep.join(common) - except (TypeError, AttributeError): - genericpath._check_arg_types('commonpath', *paths) - raise - - -try: - # The isdir(), isfile(), islink(), exists() and lexists() implementations - # in genericpath use os.stat(). This is overkill on Windows. Use simpler - # builtin functions if they are available. - from nt import _path_isdir as isdir - from nt import _path_isfile as isfile - from nt import _path_islink as islink - from nt import _path_isjunction as isjunction - from nt import _path_exists as exists - from nt import _path_lexists as lexists -except ImportError: - # Use genericpath.* as imported above - pass - - -try: - from nt import _path_isdevdrive - def isdevdrive(path): - """Determines whether the specified path is on a Windows Dev Drive.""" - try: - return _path_isdevdrive(abspath(path)) - except OSError: - return False -except ImportError: - # Use genericpath.isdevdrive as imported above - pass diff --git a/Python314_4_x86_Template/Lib/nturl2path.py b/Python314_4_x86_Template/Lib/nturl2path.py deleted file mode 100644 index 57c7858df..000000000 --- a/Python314_4_x86_Template/Lib/nturl2path.py +++ /dev/null @@ -1,74 +0,0 @@ -"""Convert a NT pathname to a file URL and vice versa. - -This module only exists to provide OS-specific code -for urllib.requests, thus do not use directly. -""" -# Testing is done through test_nturl2path. - -import warnings - - -warnings._deprecated( - __name__, - message=f"{warnings._DEPRECATED_MSG}; use 'urllib.request' instead", - remove=(3, 19)) - -def url2pathname(url): - """OS-specific conversion from a relative URL of the 'file' scheme - to a file system path; not recommended for general use.""" - # e.g. - # ///C|/foo/bar/spam.foo - # and - # ///C:/foo/bar/spam.foo - # become - # C:\foo\bar\spam.foo - import urllib.parse - if url[:3] == '///': - # URL has an empty authority section, so the path begins on the third - # character. - url = url[2:] - elif url[:12] == '//localhost/': - # Skip past 'localhost' authority. - url = url[11:] - if url[:3] == '///': - # Skip past extra slash before UNC drive in URL path. - url = url[1:] - else: - if url[:1] == '/' and url[2:3] in (':', '|'): - # Skip past extra slash before DOS drive in URL path. - url = url[1:] - if url[1:2] == '|': - # Older URLs use a pipe after a drive letter - url = url[:1] + ':' + url[2:] - return urllib.parse.unquote(url.replace('/', '\\')) - -def pathname2url(p): - """OS-specific conversion from a file system path to a relative URL - of the 'file' scheme; not recommended for general use.""" - # e.g. - # C:\foo\bar\spam.foo - # becomes - # ///C:/foo/bar/spam.foo - import ntpath - import urllib.parse - # First, clean up some special forms. We are going to sacrifice - # the additional information anyway - p = p.replace('\\', '/') - if p[:4] == '//?/': - p = p[4:] - if p[:4].upper() == 'UNC/': - p = '//' + p[4:] - drive, root, tail = ntpath.splitroot(p) - if drive: - if drive[1:] == ':': - # DOS drive specified. Add three slashes to the start, producing - # an authority section with a zero-length authority, and a path - # section starting with a single slash. - drive = f'///{drive}' - drive = urllib.parse.quote(drive, safe='/:') - elif root: - # Add explicitly empty authority to path beginning with one slash. - root = f'//{root}' - - tail = urllib.parse.quote(tail) - return drive + root + tail diff --git a/Python314_4_x86_Template/Lib/numbers.py b/Python314_4_x86_Template/Lib/numbers.py deleted file mode 100644 index 37fddb891..000000000 --- a/Python314_4_x86_Template/Lib/numbers.py +++ /dev/null @@ -1,427 +0,0 @@ -# Copyright 2007 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -"""Abstract Base Classes (ABCs) for numbers, according to PEP 3141. - -TODO: Fill out more detailed documentation on the operators.""" - -############ Maintenance notes ######################################### -# -# ABCs are different from other standard library modules in that they -# specify compliance tests. In general, once an ABC has been published, -# new methods (either abstract or concrete) cannot be added. -# -# Though classes that inherit from an ABC would automatically receive a -# new mixin method, registered classes would become non-compliant and -# violate the contract promised by ``isinstance(someobj, SomeABC)``. -# -# Though irritating, the correct procedure for adding new abstract or -# mixin methods is to create a new ABC as a subclass of the previous -# ABC. -# -# Because they are so hard to change, new ABCs should have their APIs -# carefully thought through prior to publication. -# -# Since ABCMeta only checks for the presence of methods, it is possible -# to alter the signature of a method by adding optional arguments -# or changing parameter names. This is still a bit dubious but at -# least it won't cause isinstance() to return an incorrect result. -# -# -####################################################################### - -from abc import ABCMeta, abstractmethod - -__all__ = ["Number", "Complex", "Real", "Rational", "Integral"] - -class Number(metaclass=ABCMeta): - """All numbers inherit from this class. - - If you just want to check if an argument x is a number, without - caring what kind, use isinstance(x, Number). - """ - __slots__ = () - - # Concrete numeric types must provide their own hash implementation - __hash__ = None - - -## Notes on Decimal -## ---------------- -## Decimal has all of the methods specified by the Real abc, but it should -## not be registered as a Real because decimals do not interoperate with -## binary floats (i.e. Decimal('3.14') + 2.71828 is undefined). But, -## abstract reals are expected to interoperate (i.e. R1 + R2 should be -## expected to work if R1 and R2 are both Reals). - -class Complex(Number): - """Complex defines the operations that work on the builtin complex type. - - In short, those are: a conversion to complex, .real, .imag, +, -, - *, /, **, abs(), .conjugate, ==, and !=. - - If it is given heterogeneous arguments, and doesn't have special - knowledge about them, it should fall back to the builtin complex - type as described below. - """ - - __slots__ = () - - @abstractmethod - def __complex__(self): - """Return a builtin complex instance. Called for complex(self).""" - - def __bool__(self): - """True if self != 0. Called for bool(self).""" - return self != 0 - - @property - @abstractmethod - def real(self): - """Retrieve the real component of this number. - - This should subclass Real. - """ - raise NotImplementedError - - @property - @abstractmethod - def imag(self): - """Retrieve the imaginary component of this number. - - This should subclass Real. - """ - raise NotImplementedError - - @abstractmethod - def __add__(self, other): - """self + other""" - raise NotImplementedError - - @abstractmethod - def __radd__(self, other): - """other + self""" - raise NotImplementedError - - @abstractmethod - def __neg__(self): - """-self""" - raise NotImplementedError - - @abstractmethod - def __pos__(self): - """+self""" - raise NotImplementedError - - def __sub__(self, other): - """self - other""" - return self + -other - - def __rsub__(self, other): - """other - self""" - return -self + other - - @abstractmethod - def __mul__(self, other): - """self * other""" - raise NotImplementedError - - @abstractmethod - def __rmul__(self, other): - """other * self""" - raise NotImplementedError - - @abstractmethod - def __truediv__(self, other): - """self / other: Should promote to float when necessary.""" - raise NotImplementedError - - @abstractmethod - def __rtruediv__(self, other): - """other / self""" - raise NotImplementedError - - @abstractmethod - def __pow__(self, exponent): - """self ** exponent; should promote to float or complex when necessary.""" - raise NotImplementedError - - @abstractmethod - def __rpow__(self, base): - """base ** self""" - raise NotImplementedError - - @abstractmethod - def __abs__(self): - """Returns the Real distance from 0. Called for abs(self).""" - raise NotImplementedError - - @abstractmethod - def conjugate(self): - """(x+y*i).conjugate() returns (x-y*i).""" - raise NotImplementedError - - @abstractmethod - def __eq__(self, other): - """self == other""" - raise NotImplementedError - -Complex.register(complex) - - -class Real(Complex): - """To Complex, Real adds the operations that work on real numbers. - - In short, those are: a conversion to float, trunc(), divmod, - %, <, <=, >, and >=. - - Real also provides defaults for the derived operations. - """ - - __slots__ = () - - @abstractmethod - def __float__(self): - """Any Real can be converted to a native float object. - - Called for float(self).""" - raise NotImplementedError - - @abstractmethod - def __trunc__(self): - """trunc(self): Truncates self to an Integral. - - Returns an Integral i such that: - * i > 0 iff self > 0; - * abs(i) <= abs(self); - * for any Integral j satisfying the first two conditions, - abs(i) >= abs(j) [i.e. i has "maximal" abs among those]. - i.e. "truncate towards 0". - """ - raise NotImplementedError - - @abstractmethod - def __floor__(self): - """Finds the greatest Integral <= self.""" - raise NotImplementedError - - @abstractmethod - def __ceil__(self): - """Finds the least Integral >= self.""" - raise NotImplementedError - - @abstractmethod - def __round__(self, ndigits=None): - """Rounds self to ndigits decimal places, defaulting to 0. - - If ndigits is omitted or None, returns an Integral, otherwise - returns a Real. Rounds half toward even. - """ - raise NotImplementedError - - def __divmod__(self, other): - """divmod(self, other): The pair (self // other, self % other). - - Sometimes this can be computed faster than the pair of - operations. - """ - return (self // other, self % other) - - def __rdivmod__(self, other): - """divmod(other, self): The pair (other // self, other % self). - - Sometimes this can be computed faster than the pair of - operations. - """ - return (other // self, other % self) - - @abstractmethod - def __floordiv__(self, other): - """self // other: The floor() of self/other.""" - raise NotImplementedError - - @abstractmethod - def __rfloordiv__(self, other): - """other // self: The floor() of other/self.""" - raise NotImplementedError - - @abstractmethod - def __mod__(self, other): - """self % other""" - raise NotImplementedError - - @abstractmethod - def __rmod__(self, other): - """other % self""" - raise NotImplementedError - - @abstractmethod - def __lt__(self, other): - """self < other - - < on Reals defines a total ordering, except perhaps for NaN.""" - raise NotImplementedError - - @abstractmethod - def __le__(self, other): - """self <= other""" - raise NotImplementedError - - # Concrete implementations of Complex abstract methods. - def __complex__(self): - """complex(self) == complex(float(self), 0)""" - return complex(float(self)) - - @property - def real(self): - """Real numbers are their real component.""" - return +self - - @property - def imag(self): - """Real numbers have no imaginary component.""" - return 0 - - def conjugate(self): - """Conjugate is a no-op for Reals.""" - return +self - -Real.register(float) - - -class Rational(Real): - """To Real, Rational adds numerator and denominator properties. - - The numerator and denominator values should be in lowest terms, - with a positive denominator. - """ - - __slots__ = () - - @property - @abstractmethod - def numerator(self): - """The numerator of a rational number in lowest terms.""" - raise NotImplementedError - - @property - @abstractmethod - def denominator(self): - """The denominator of a rational number in lowest terms. - - This denominator should be positive. - """ - raise NotImplementedError - - # Concrete implementation of Real's conversion to float. - def __float__(self): - """float(self) = self.numerator / self.denominator - - It's important that this conversion use the integer's "true" - division rather than casting one side to float before dividing - so that ratios of huge integers convert without overflowing. - - """ - return int(self.numerator) / int(self.denominator) - - -class Integral(Rational): - """Integral adds methods that work on integral numbers. - - In short, these are conversion to int, pow with modulus, and the - bit-string operations. - """ - - __slots__ = () - - @abstractmethod - def __int__(self): - """int(self)""" - raise NotImplementedError - - def __index__(self): - """Called whenever an index is needed, such as in slicing""" - return int(self) - - @abstractmethod - def __pow__(self, exponent, modulus=None): - """self ** exponent % modulus, but maybe faster. - - Accept the modulus argument if you want to support the - 3-argument version of pow(). Raise a TypeError if exponent < 0 - or any argument isn't Integral. Otherwise, just implement the - 2-argument version described in Complex. - """ - raise NotImplementedError - - @abstractmethod - def __lshift__(self, other): - """self << other""" - raise NotImplementedError - - @abstractmethod - def __rlshift__(self, other): - """other << self""" - raise NotImplementedError - - @abstractmethod - def __rshift__(self, other): - """self >> other""" - raise NotImplementedError - - @abstractmethod - def __rrshift__(self, other): - """other >> self""" - raise NotImplementedError - - @abstractmethod - def __and__(self, other): - """self & other""" - raise NotImplementedError - - @abstractmethod - def __rand__(self, other): - """other & self""" - raise NotImplementedError - - @abstractmethod - def __xor__(self, other): - """self ^ other""" - raise NotImplementedError - - @abstractmethod - def __rxor__(self, other): - """other ^ self""" - raise NotImplementedError - - @abstractmethod - def __or__(self, other): - """self | other""" - raise NotImplementedError - - @abstractmethod - def __ror__(self, other): - """other | self""" - raise NotImplementedError - - @abstractmethod - def __invert__(self): - """~self""" - raise NotImplementedError - - # Concrete implementations of Rational and Real abstract methods. - def __float__(self): - """float(self) == float(int(self))""" - return float(int(self)) - - @property - def numerator(self): - """Integers are their own numerators.""" - return +self - - @property - def denominator(self): - """Integers have a denominator of 1.""" - return 1 - -Integral.register(int) diff --git a/Python314_4_x86_Template/Lib/opcode.py b/Python314_4_x86_Template/Lib/opcode.py deleted file mode 100644 index 0e9520b68..000000000 --- a/Python314_4_x86_Template/Lib/opcode.py +++ /dev/null @@ -1,122 +0,0 @@ - -""" -opcode module - potentially shared between dis and other modules which -operate on bytecodes (e.g. peephole optimizers). -""" - - -__all__ = ["cmp_op", "stack_effect", "hascompare", "opname", "opmap", - "HAVE_ARGUMENT", "EXTENDED_ARG", "hasarg", "hasconst", "hasname", - "hasjump", "hasjrel", "hasjabs", "hasfree", "haslocal", "hasexc"] - -import builtins -import _opcode -from _opcode import stack_effect - -from _opcode_metadata import (_specializations, _specialized_opmap, opmap, # noqa: F401 - HAVE_ARGUMENT, MIN_INSTRUMENTED_OPCODE) # noqa: F401 -EXTENDED_ARG = opmap['EXTENDED_ARG'] - -opname = ['<%r>' % (op,) for op in range(max(opmap.values()) + 1)] -for m in (opmap, _specialized_opmap): - for op, i in m.items(): - opname[i] = op - -cmp_op = ('<', '<=', '==', '!=', '>', '>=') - -# These lists are documented as part of the dis module's API -hasarg = [op for op in opmap.values() if _opcode.has_arg(op)] -hasconst = [op for op in opmap.values() if _opcode.has_const(op)] -hasname = [op for op in opmap.values() if _opcode.has_name(op)] -hasjump = [op for op in opmap.values() if _opcode.has_jump(op)] -hasjrel = hasjump # for backward compatibility -hasjabs = [] -hasfree = [op for op in opmap.values() if _opcode.has_free(op)] -haslocal = [op for op in opmap.values() if _opcode.has_local(op)] -hasexc = [op for op in opmap.values() if _opcode.has_exc(op)] - - -_intrinsic_1_descs = _opcode.get_intrinsic1_descs() -_intrinsic_2_descs = _opcode.get_intrinsic2_descs() -_special_method_names = _opcode.get_special_method_names() -_common_constants = [builtins.AssertionError, builtins.NotImplementedError, - builtins.tuple, builtins.all, builtins.any] -_nb_ops = _opcode.get_nb_ops() - -hascompare = [opmap["COMPARE_OP"]] - -_cache_format = { - "LOAD_GLOBAL": { - "counter": 1, - "index": 1, - "module_keys_version": 1, - "builtin_keys_version": 1, - }, - "BINARY_OP": { - "counter": 1, - "descr": 4, - }, - "UNPACK_SEQUENCE": { - "counter": 1, - }, - "COMPARE_OP": { - "counter": 1, - }, - "CONTAINS_OP": { - "counter": 1, - }, - "FOR_ITER": { - "counter": 1, - }, - "LOAD_SUPER_ATTR": { - "counter": 1, - }, - "LOAD_ATTR": { - "counter": 1, - "version": 2, - "keys_version": 2, - "descr": 4, - }, - "STORE_ATTR": { - "counter": 1, - "version": 2, - "index": 1, - }, - "CALL": { - "counter": 1, - "func_version": 2, - }, - "CALL_KW": { - "counter": 1, - "func_version": 2, - }, - "STORE_SUBSCR": { - "counter": 1, - }, - "SEND": { - "counter": 1, - }, - "JUMP_BACKWARD": { - "counter": 1, - }, - "TO_BOOL": { - "counter": 1, - "version": 2, - }, - "POP_JUMP_IF_TRUE": { - "counter": 1, - }, - "POP_JUMP_IF_FALSE": { - "counter": 1, - }, - "POP_JUMP_IF_NONE": { - "counter": 1, - }, - "POP_JUMP_IF_NOT_NONE": { - "counter": 1, - }, -} - -_inline_cache_entries = { - name : sum(value.values()) for (name, value) in _cache_format.items() -} diff --git a/Python314_4_x86_Template/Lib/operator.py b/Python314_4_x86_Template/Lib/operator.py deleted file mode 100644 index 1b765522f..000000000 --- a/Python314_4_x86_Template/Lib/operator.py +++ /dev/null @@ -1,475 +0,0 @@ -""" -Operator Interface - -This module exports a set of functions corresponding to the intrinsic -operators of Python. For example, operator.add(x, y) is equivalent -to the expression x+y. The function names are those used for special -methods; variants without leading and trailing '__' are also provided -for convenience. - -This is the pure Python implementation of the module. -""" - -__all__ = ['abs', 'add', 'and_', 'attrgetter', 'call', 'concat', 'contains', 'countOf', - 'delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand', - 'iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul', - 'index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift', - 'is_', 'is_none', 'is_not', 'is_not_none', 'isub', 'itemgetter', 'itruediv', - 'ixor', 'le', 'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod', - 'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift', - 'setitem', 'sub', 'truediv', 'truth', 'xor'] - -from builtins import abs as _abs - - -# Comparison Operations *******************************************************# - -def lt(a, b): - "Same as a < b." - return a < b - -def le(a, b): - "Same as a <= b." - return a <= b - -def eq(a, b): - "Same as a == b." - return a == b - -def ne(a, b): - "Same as a != b." - return a != b - -def ge(a, b): - "Same as a >= b." - return a >= b - -def gt(a, b): - "Same as a > b." - return a > b - -# Logical Operations **********************************************************# - -def not_(a): - "Same as not a." - return not a - -def truth(a): - "Return True if a is true, False otherwise." - return True if a else False - -def is_(a, b): - "Same as a is b." - return a is b - -def is_not(a, b): - "Same as a is not b." - return a is not b - -def is_none(a): - "Same as a is None." - return a is None - -def is_not_none(a): - "Same as a is not None." - return a is not None - -# Mathematical/Bitwise Operations *********************************************# - -def abs(a): - "Same as abs(a)." - return _abs(a) - -def add(a, b): - "Same as a + b." - return a + b - -def and_(a, b): - "Same as a & b." - return a & b - -def floordiv(a, b): - "Same as a // b." - return a // b - -def index(a): - "Same as a.__index__()." - return a.__index__() - -def inv(a): - "Same as ~a." - return ~a -invert = inv - -def lshift(a, b): - "Same as a << b." - return a << b - -def mod(a, b): - "Same as a % b." - return a % b - -def mul(a, b): - "Same as a * b." - return a * b - -def matmul(a, b): - "Same as a @ b." - return a @ b - -def neg(a): - "Same as -a." - return -a - -def or_(a, b): - "Same as a | b." - return a | b - -def pos(a): - "Same as +a." - return +a - -def pow(a, b): - "Same as a ** b." - return a ** b - -def rshift(a, b): - "Same as a >> b." - return a >> b - -def sub(a, b): - "Same as a - b." - return a - b - -def truediv(a, b): - "Same as a / b." - return a / b - -def xor(a, b): - "Same as a ^ b." - return a ^ b - -# Sequence Operations *********************************************************# - -def concat(a, b): - "Same as a + b, for a and b sequences." - if not hasattr(a, '__getitem__'): - msg = "'%s' object can't be concatenated" % type(a).__name__ - raise TypeError(msg) - return a + b - -def contains(a, b): - "Same as b in a (note reversed operands)." - return b in a - -def countOf(a, b): - "Return the number of items in a which are, or which equal, b." - count = 0 - for i in a: - if i is b or i == b: - count += 1 - return count - -def delitem(a, b): - "Same as del a[b]." - del a[b] - -def getitem(a, b): - "Same as a[b]." - return a[b] - -def indexOf(a, b): - "Return the first index of b in a." - for i, j in enumerate(a): - if j is b or j == b: - return i - else: - raise ValueError('sequence.index(x): x not in sequence') - -def setitem(a, b, c): - "Same as a[b] = c." - a[b] = c - -def length_hint(obj, default=0): - """ - Return an estimate of the number of items in obj. - This is useful for presizing containers when building from an iterable. - - If the object supports len(), the result will be exact. Otherwise, it may - over- or under-estimate by an arbitrary amount. The result will be an - integer >= 0. - """ - if not isinstance(default, int): - msg = ("'%s' object cannot be interpreted as an integer" % - type(default).__name__) - raise TypeError(msg) - - try: - return len(obj) - except TypeError: - pass - - try: - hint = type(obj).__length_hint__ - except AttributeError: - return default - - try: - val = hint(obj) - except TypeError: - return default - if val is NotImplemented: - return default - if not isinstance(val, int): - msg = ('__length_hint__ must be integer, not %s' % - type(val).__name__) - raise TypeError(msg) - if val < 0: - msg = '__length_hint__() should return >= 0' - raise ValueError(msg) - return val - -# Other Operations ************************************************************# - -def call(obj, /, *args, **kwargs): - """Same as obj(*args, **kwargs).""" - return obj(*args, **kwargs) - -# Generalized Lookup Objects **************************************************# - -class attrgetter: - """ - Return a callable object that fetches the given attribute(s) from its operand. - After f = attrgetter('name'), the call f(r) returns r.name. - After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date). - After h = attrgetter('name.first', 'name.last'), the call h(r) returns - (r.name.first, r.name.last). - """ - __slots__ = ('_attrs', '_call') - - def __init__(self, attr, /, *attrs): - if not attrs: - if not isinstance(attr, str): - raise TypeError('attribute name must be a string') - self._attrs = (attr,) - names = attr.split('.') - def func(obj): - for name in names: - obj = getattr(obj, name) - return obj - self._call = func - else: - self._attrs = (attr,) + attrs - getters = tuple(map(attrgetter, self._attrs)) - def func(obj): - return tuple(getter(obj) for getter in getters) - self._call = func - - def __call__(self, obj, /): - return self._call(obj) - - def __repr__(self): - return '%s.%s(%s)' % (self.__class__.__module__, - self.__class__.__qualname__, - ', '.join(map(repr, self._attrs))) - - def __reduce__(self): - return self.__class__, self._attrs - -class itemgetter: - """ - Return a callable object that fetches the given item(s) from its operand. - After f = itemgetter(2), the call f(r) returns r[2]. - After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3]) - """ - __slots__ = ('_items', '_call') - - def __init__(self, item, /, *items): - if not items: - self._items = (item,) - def func(obj): - return obj[item] - self._call = func - else: - self._items = items = (item,) + items - def func(obj): - return tuple(obj[i] for i in items) - self._call = func - - def __call__(self, obj, /): - return self._call(obj) - - def __repr__(self): - return '%s.%s(%s)' % (self.__class__.__module__, - self.__class__.__name__, - ', '.join(map(repr, self._items))) - - def __reduce__(self): - return self.__class__, self._items - -class methodcaller: - """ - Return a callable object that calls the given method on its operand. - After f = methodcaller('name'), the call f(r) returns r.name(). - After g = methodcaller('name', 'date', foo=1), the call g(r) returns - r.name('date', foo=1). - """ - __slots__ = ('_name', '_args', '_kwargs') - - def __init__(self, name, /, *args, **kwargs): - self._name = name - if not isinstance(self._name, str): - raise TypeError('method name must be a string') - self._args = args - self._kwargs = kwargs - - def __call__(self, obj, /): - return getattr(obj, self._name)(*self._args, **self._kwargs) - - def __repr__(self): - args = [repr(self._name)] - args.extend(map(repr, self._args)) - args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items()) - return '%s.%s(%s)' % (self.__class__.__module__, - self.__class__.__name__, - ', '.join(args)) - - def __reduce__(self): - if not self._kwargs: - return self.__class__, (self._name,) + self._args - else: - from functools import partial - return partial(self.__class__, self._name, **self._kwargs), self._args - - -# In-place Operations *********************************************************# - -def iadd(a, b): - "Same as a += b." - a += b - return a - -def iand(a, b): - "Same as a &= b." - a &= b - return a - -def iconcat(a, b): - "Same as a += b, for a and b sequences." - if not hasattr(a, '__getitem__'): - msg = "'%s' object can't be concatenated" % type(a).__name__ - raise TypeError(msg) - a += b - return a - -def ifloordiv(a, b): - "Same as a //= b." - a //= b - return a - -def ilshift(a, b): - "Same as a <<= b." - a <<= b - return a - -def imod(a, b): - "Same as a %= b." - a %= b - return a - -def imul(a, b): - "Same as a *= b." - a *= b - return a - -def imatmul(a, b): - "Same as a @= b." - a @= b - return a - -def ior(a, b): - "Same as a |= b." - a |= b - return a - -def ipow(a, b): - "Same as a **= b." - a **=b - return a - -def irshift(a, b): - "Same as a >>= b." - a >>= b - return a - -def isub(a, b): - "Same as a -= b." - a -= b - return a - -def itruediv(a, b): - "Same as a /= b." - a /= b - return a - -def ixor(a, b): - "Same as a ^= b." - a ^= b - return a - - -try: - from _operator import * -except ImportError: - pass -else: - from _operator import __doc__ # noqa: F401 - -# All of these "__func__ = func" assignments have to happen after importing -# from _operator to make sure they're set to the right function -__lt__ = lt -__le__ = le -__eq__ = eq -__ne__ = ne -__ge__ = ge -__gt__ = gt -__not__ = not_ -__abs__ = abs -__add__ = add -__and__ = and_ -__call__ = call -__floordiv__ = floordiv -__index__ = index -__inv__ = inv -__invert__ = invert -__lshift__ = lshift -__mod__ = mod -__mul__ = mul -__matmul__ = matmul -__neg__ = neg -__or__ = or_ -__pos__ = pos -__pow__ = pow -__rshift__ = rshift -__sub__ = sub -__truediv__ = truediv -__xor__ = xor -__concat__ = concat -__contains__ = contains -__delitem__ = delitem -__getitem__ = getitem -__setitem__ = setitem -__iadd__ = iadd -__iand__ = iand -__iconcat__ = iconcat -__ifloordiv__ = ifloordiv -__ilshift__ = ilshift -__imod__ = imod -__imul__ = imul -__imatmul__ = imatmul -__ior__ = ior -__ipow__ = ipow -__irshift__ = irshift -__isub__ = isub -__itruediv__ = itruediv -__ixor__ = ixor diff --git a/Python314_4_x86_Template/Lib/optparse.py b/Python314_4_x86_Template/Lib/optparse.py deleted file mode 100644 index 38cf16d21..000000000 --- a/Python314_4_x86_Template/Lib/optparse.py +++ /dev/null @@ -1,1671 +0,0 @@ -"""A powerful, extensible, and easy-to-use option parser. - -By Greg Ward <gward@python.net> - -Originally distributed as Optik. - -For support, use the optik-users@lists.sourceforge.net mailing list -(http://lists.sourceforge.net/lists/listinfo/optik-users). - -Simple usage example: - - from optparse import OptionParser - - parser = OptionParser() - parser.add_option("-f", "--file", dest="filename", - help="write report to FILE", metavar="FILE") - parser.add_option("-q", "--quiet", - action="store_false", dest="verbose", default=True, - help="don't print status messages to stdout") - - (options, args) = parser.parse_args() -""" - -__version__ = "1.5.3" - -__all__ = ['Option', - 'make_option', - 'SUPPRESS_HELP', - 'SUPPRESS_USAGE', - 'Values', - 'OptionContainer', - 'OptionGroup', - 'OptionParser', - 'HelpFormatter', - 'IndentedHelpFormatter', - 'TitledHelpFormatter', - 'OptParseError', - 'OptionError', - 'OptionConflictError', - 'OptionValueError', - 'BadOptionError', - 'check_choice'] - -__copyright__ = """ -Copyright (c) 2001-2006 Gregory P. Ward. All rights reserved. -Copyright (c) 2002 Python Software Foundation. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" - -import sys, os -from gettext import gettext as _, ngettext - - -def _repr(self): - return "<%s at 0x%x: %s>" % (self.__class__.__name__, id(self), self) - - -# This file was generated from: -# Id: option_parser.py 527 2006-07-23 15:21:30Z greg -# Id: option.py 522 2006-06-11 16:22:03Z gward -# Id: help.py 527 2006-07-23 15:21:30Z greg -# Id: errors.py 509 2006-04-20 00:58:24Z gward - - -class OptParseError (Exception): - def __init__(self, msg): - self.msg = msg - - def __str__(self): - return self.msg - - -class OptionError (OptParseError): - """ - Raised if an Option instance is created with invalid or - inconsistent arguments. - """ - - def __init__(self, msg, option): - self.msg = msg - self.option_id = str(option) - - def __str__(self): - if self.option_id: - return "option %s: %s" % (self.option_id, self.msg) - else: - return self.msg - -class OptionConflictError (OptionError): - """ - Raised if conflicting options are added to an OptionParser. - """ - -class OptionValueError (OptParseError): - """ - Raised if an invalid option value is encountered on the command - line. - """ - -class BadOptionError (OptParseError): - """ - Raised if an invalid option is seen on the command line. - """ - def __init__(self, opt_str): - self.opt_str = opt_str - - def __str__(self): - return _("no such option: %s") % self.opt_str - -class AmbiguousOptionError (BadOptionError): - """ - Raised if an ambiguous option is seen on the command line. - """ - def __init__(self, opt_str, possibilities): - BadOptionError.__init__(self, opt_str) - self.possibilities = possibilities - - def __str__(self): - return (_("ambiguous option: %s (%s?)") - % (self.opt_str, ", ".join(self.possibilities))) - - -class HelpFormatter: - - """ - Abstract base class for formatting option help. OptionParser - instances should use one of the HelpFormatter subclasses for - formatting help; by default IndentedHelpFormatter is used. - - Instance attributes: - parser : OptionParser - the controlling OptionParser instance - indent_increment : int - the number of columns to indent per nesting level - max_help_position : int - the maximum starting column for option help text - help_position : int - the calculated starting column for option help text; - initially the same as the maximum - width : int - total number of columns for output (pass None to constructor for - this value to be taken from the $COLUMNS environment variable) - level : int - current indentation level - current_indent : int - current indentation level (in columns) - help_width : int - number of columns available for option help text (calculated) - default_tag : str - text to replace with each option's default value, "%default" - by default. Set to false value to disable default value expansion. - option_strings : { Option : str } - maps Option instances to the snippet of help text explaining - the syntax of that option, e.g. "-h, --help" or - "-fFILE, --file=FILE" - _short_opt_fmt : str - format string controlling how short options with values are - printed in help text. Must be either "%s%s" ("-fFILE") or - "%s %s" ("-f FILE"), because those are the two syntaxes that - Optik supports. - _long_opt_fmt : str - similar but for long options; must be either "%s %s" ("--file FILE") - or "%s=%s" ("--file=FILE"). - """ - - NO_DEFAULT_VALUE = "none" - - def __init__(self, - indent_increment, - max_help_position, - width, - short_first): - self.parser = None - self.indent_increment = indent_increment - if width is None: - try: - width = int(os.environ['COLUMNS']) - except (KeyError, ValueError): - width = 80 - width -= 2 - self.width = width - self.help_position = self.max_help_position = \ - min(max_help_position, max(width - 20, indent_increment * 2)) - self.current_indent = 0 - self.level = 0 - self.help_width = None # computed later - self.short_first = short_first - self.default_tag = "%default" - self.option_strings = {} - self._short_opt_fmt = "%s %s" - self._long_opt_fmt = "%s=%s" - - def set_parser(self, parser): - self.parser = parser - - def set_short_opt_delimiter(self, delim): - if delim not in ("", " "): - raise ValueError( - "invalid metavar delimiter for short options: %r" % delim) - self._short_opt_fmt = "%s" + delim + "%s" - - def set_long_opt_delimiter(self, delim): - if delim not in ("=", " "): - raise ValueError( - "invalid metavar delimiter for long options: %r" % delim) - self._long_opt_fmt = "%s" + delim + "%s" - - def indent(self): - self.current_indent += self.indent_increment - self.level += 1 - - def dedent(self): - self.current_indent -= self.indent_increment - assert self.current_indent >= 0, "Indent decreased below 0." - self.level -= 1 - - def format_usage(self, usage): - raise NotImplementedError("subclasses must implement") - - def format_heading(self, heading): - raise NotImplementedError("subclasses must implement") - - def _format_text(self, text): - """ - Format a paragraph of free-form text for inclusion in the - help output at the current indentation level. - """ - import textwrap - text_width = max(self.width - self.current_indent, 11) - indent = " "*self.current_indent - return textwrap.fill(text, - text_width, - initial_indent=indent, - subsequent_indent=indent) - - def format_description(self, description): - if description: - return self._format_text(description) + "\n" - else: - return "" - - def format_epilog(self, epilog): - if epilog: - return "\n" + self._format_text(epilog) + "\n" - else: - return "" - - - def expand_default(self, option): - if self.parser is None or not self.default_tag: - return option.help - - default_value = self.parser.defaults.get(option.dest) - if default_value is NO_DEFAULT or default_value is None: - default_value = self.NO_DEFAULT_VALUE - - return option.help.replace(self.default_tag, str(default_value)) - - def format_option(self, option): - # The help for each option consists of two parts: - # * the opt strings and metavars - # eg. ("-x", or "-fFILENAME, --file=FILENAME") - # * the user-supplied help string - # eg. ("turn on expert mode", "read data from FILENAME") - # - # If possible, we write both of these on the same line: - # -x turn on expert mode - # - # But if the opt string list is too long, we put the help - # string on a second line, indented to the same column it would - # start in if it fit on the first line. - # -fFILENAME, --file=FILENAME - # read data from FILENAME - result = [] - opts = self.option_strings[option] - opt_width = self.help_position - self.current_indent - 2 - if len(opts) > opt_width: - opts = "%*s%s\n" % (self.current_indent, "", opts) - indent_first = self.help_position - else: # start help on same line as opts - opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts) - indent_first = 0 - result.append(opts) - if option.help: - import textwrap - help_text = self.expand_default(option) - help_lines = textwrap.wrap(help_text, self.help_width) - result.append("%*s%s\n" % (indent_first, "", help_lines[0])) - result.extend(["%*s%s\n" % (self.help_position, "", line) - for line in help_lines[1:]]) - elif opts[-1] != "\n": - result.append("\n") - return "".join(result) - - def store_option_strings(self, parser): - self.indent() - max_len = 0 - for opt in parser.option_list: - strings = self.format_option_strings(opt) - self.option_strings[opt] = strings - max_len = max(max_len, len(strings) + self.current_indent) - self.indent() - for group in parser.option_groups: - for opt in group.option_list: - strings = self.format_option_strings(opt) - self.option_strings[opt] = strings - max_len = max(max_len, len(strings) + self.current_indent) - self.dedent() - self.dedent() - self.help_position = min(max_len + 2, self.max_help_position) - self.help_width = max(self.width - self.help_position, 11) - - def format_option_strings(self, option): - """Return a comma-separated list of option strings & metavariables.""" - if option.takes_value(): - metavar = option.metavar or option.dest.upper() - short_opts = [self._short_opt_fmt % (sopt, metavar) - for sopt in option._short_opts] - long_opts = [self._long_opt_fmt % (lopt, metavar) - for lopt in option._long_opts] - else: - short_opts = option._short_opts - long_opts = option._long_opts - - if self.short_first: - opts = short_opts + long_opts - else: - opts = long_opts + short_opts - - return ", ".join(opts) - -class IndentedHelpFormatter (HelpFormatter): - """Format help with indented section bodies. - """ - - def __init__(self, - indent_increment=2, - max_help_position=24, - width=None, - short_first=1): - HelpFormatter.__init__( - self, indent_increment, max_help_position, width, short_first) - - def format_usage(self, usage): - return _("Usage: %s\n") % usage - - def format_heading(self, heading): - return "%*s%s:\n" % (self.current_indent, "", heading) - - -class TitledHelpFormatter (HelpFormatter): - """Format help with underlined section headers. - """ - - def __init__(self, - indent_increment=0, - max_help_position=24, - width=None, - short_first=0): - HelpFormatter.__init__ ( - self, indent_increment, max_help_position, width, short_first) - - def format_usage(self, usage): - return "%s %s\n" % (self.format_heading(_("Usage")), usage) - - def format_heading(self, heading): - return "%s\n%s\n" % (heading, "=-"[self.level] * len(heading)) - - -def _parse_num(val, type): - if val[:2].lower() == "0x": # hexadecimal - radix = 16 - elif val[:2].lower() == "0b": # binary - radix = 2 - val = val[2:] or "0" # have to remove "0b" prefix - elif val[:1] == "0": # octal - radix = 8 - else: # decimal - radix = 10 - - return type(val, radix) - -def _parse_int(val): - return _parse_num(val, int) - -_builtin_cvt = { "int" : (_parse_int, _("integer")), - "long" : (_parse_int, _("integer")), - "float" : (float, _("floating-point")), - "complex" : (complex, _("complex")) } - -def check_builtin(option, opt, value): - (cvt, what) = _builtin_cvt[option.type] - try: - return cvt(value) - except ValueError: - raise OptionValueError( - _("option %s: invalid %s value: %r") % (opt, what, value)) - -def check_choice(option, opt, value): - if value in option.choices: - return value - else: - choices = ", ".join(map(repr, option.choices)) - raise OptionValueError( - _("option %s: invalid choice: %r (choose from %s)") - % (opt, value, choices)) - -# Not supplying a default is different from a default of None, -# so we need an explicit "not supplied" value. -NO_DEFAULT = ("NO", "DEFAULT") - - -class Option: - """ - Instance attributes: - _short_opts : [string] - _long_opts : [string] - - action : string - type : string - dest : string - default : any - nargs : int - const : any - choices : [string] - callback : function - callback_args : (any*) - callback_kwargs : { string : any } - help : string - metavar : string - """ - - # The list of instance attributes that may be set through - # keyword args to the constructor. - ATTRS = ['action', - 'type', - 'dest', - 'default', - 'nargs', - 'const', - 'choices', - 'callback', - 'callback_args', - 'callback_kwargs', - 'help', - 'metavar'] - - # The set of actions allowed by option parsers. Explicitly listed - # here so the constructor can validate its arguments. - ACTIONS = ("store", - "store_const", - "store_true", - "store_false", - "append", - "append_const", - "count", - "callback", - "help", - "version") - - # The set of actions that involve storing a value somewhere; - # also listed just for constructor argument validation. (If - # the action is one of these, there must be a destination.) - STORE_ACTIONS = ("store", - "store_const", - "store_true", - "store_false", - "append", - "append_const", - "count") - - # The set of actions for which it makes sense to supply a value - # type, ie. which may consume an argument from the command line. - TYPED_ACTIONS = ("store", - "append", - "callback") - - # The set of actions which *require* a value type, ie. that - # always consume an argument from the command line. - ALWAYS_TYPED_ACTIONS = ("store", - "append") - - # The set of actions which take a 'const' attribute. - CONST_ACTIONS = ("store_const", - "append_const") - - # The set of known types for option parsers. Again, listed here for - # constructor argument validation. - TYPES = ("string", "int", "long", "float", "complex", "choice") - - # Dictionary of argument checking functions, which convert and - # validate option arguments according to the option type. - # - # Signature of checking functions is: - # check(option : Option, opt : string, value : string) -> any - # where - # option is the Option instance calling the checker - # opt is the actual option seen on the command-line - # (eg. "-a", "--file") - # value is the option argument seen on the command-line - # - # The return value should be in the appropriate Python type - # for option.type -- eg. an integer if option.type == "int". - # - # If no checker is defined for a type, arguments will be - # unchecked and remain strings. - TYPE_CHECKER = { "int" : check_builtin, - "long" : check_builtin, - "float" : check_builtin, - "complex": check_builtin, - "choice" : check_choice, - } - - - # CHECK_METHODS is a list of unbound method objects; they are called - # by the constructor, in order, after all attributes are - # initialized. The list is created and filled in later, after all - # the methods are actually defined. (I just put it here because I - # like to define and document all class attributes in the same - # place.) Subclasses that add another _check_*() method should - # define their own CHECK_METHODS list that adds their check method - # to those from this class. - CHECK_METHODS = None - - - # -- Constructor/initialization methods ---------------------------- - - def __init__(self, *opts, **attrs): - # Set _short_opts, _long_opts attrs from 'opts' tuple. - # Have to be set now, in case no option strings are supplied. - self._short_opts = [] - self._long_opts = [] - opts = self._check_opt_strings(opts) - self._set_opt_strings(opts) - - # Set all other attrs (action, type, etc.) from 'attrs' dict - self._set_attrs(attrs) - - # Check all the attributes we just set. There are lots of - # complicated interdependencies, but luckily they can be farmed - # out to the _check_*() methods listed in CHECK_METHODS -- which - # could be handy for subclasses! The one thing these all share - # is that they raise OptionError if they discover a problem. - for checker in self.CHECK_METHODS: - checker(self) - - def _check_opt_strings(self, opts): - # Filter out None because early versions of Optik had exactly - # one short option and one long option, either of which - # could be None. - opts = [opt for opt in opts if opt] - if not opts: - raise TypeError("at least one option string must be supplied") - return opts - - def _set_opt_strings(self, opts): - for opt in opts: - if len(opt) < 2: - raise OptionError( - "invalid option string %r: " - "must be at least two characters long" % opt, self) - elif len(opt) == 2: - if not (opt[0] == "-" and opt[1] != "-"): - raise OptionError( - "invalid short option string %r: " - "must be of the form -x, (x any non-dash char)" % opt, - self) - self._short_opts.append(opt) - else: - if not (opt[0:2] == "--" and opt[2] != "-"): - raise OptionError( - "invalid long option string %r: " - "must start with --, followed by non-dash" % opt, - self) - self._long_opts.append(opt) - - def _set_attrs(self, attrs): - for attr in self.ATTRS: - if attr in attrs: - setattr(self, attr, attrs[attr]) - del attrs[attr] - else: - if attr == 'default': - setattr(self, attr, NO_DEFAULT) - else: - setattr(self, attr, None) - if attrs: - attrs = sorted(attrs.keys()) - raise OptionError( - "invalid keyword arguments: %s" % ", ".join(attrs), - self) - - - # -- Constructor validation methods -------------------------------- - - def _check_action(self): - if self.action is None: - self.action = "store" - elif self.action not in self.ACTIONS: - raise OptionError("invalid action: %r" % self.action, self) - - def _check_type(self): - if self.type is None: - if self.action in self.ALWAYS_TYPED_ACTIONS: - if self.choices is not None: - # The "choices" attribute implies "choice" type. - self.type = "choice" - else: - # No type given? "string" is the most sensible default. - self.type = "string" - else: - # Allow type objects or builtin type conversion functions - # (int, str, etc.) as an alternative to their names. - if isinstance(self.type, type): - self.type = self.type.__name__ - - if self.type == "str": - self.type = "string" - - if self.type not in self.TYPES: - raise OptionError("invalid option type: %r" % self.type, self) - if self.action not in self.TYPED_ACTIONS: - raise OptionError( - "must not supply a type for action %r" % self.action, self) - - def _check_choice(self): - if self.type == "choice": - if self.choices is None: - raise OptionError( - "must supply a list of choices for type 'choice'", self) - elif not isinstance(self.choices, (tuple, list)): - raise OptionError( - "choices must be a list of strings ('%s' supplied)" - % str(type(self.choices)).split("'")[1], self) - elif self.choices is not None: - raise OptionError( - "must not supply choices for type %r" % self.type, self) - - def _check_dest(self): - # No destination given, and we need one for this action. The - # self.type check is for callbacks that take a value. - takes_value = (self.action in self.STORE_ACTIONS or - self.type is not None) - if self.dest is None and takes_value: - - # Glean a destination from the first long option string, - # or from the first short option string if no long options. - if self._long_opts: - # eg. "--foo-bar" -> "foo_bar" - self.dest = self._long_opts[0][2:].replace('-', '_') - else: - self.dest = self._short_opts[0][1] - - def _check_const(self): - if self.action not in self.CONST_ACTIONS and self.const is not None: - raise OptionError( - "'const' must not be supplied for action %r" % self.action, - self) - - def _check_nargs(self): - if self.action in self.TYPED_ACTIONS: - if self.nargs is None: - self.nargs = 1 - elif self.nargs is not None: - raise OptionError( - "'nargs' must not be supplied for action %r" % self.action, - self) - - def _check_callback(self): - if self.action == "callback": - if not callable(self.callback): - raise OptionError( - "callback not callable: %r" % self.callback, self) - if (self.callback_args is not None and - not isinstance(self.callback_args, tuple)): - raise OptionError( - "callback_args, if supplied, must be a tuple: not %r" - % self.callback_args, self) - if (self.callback_kwargs is not None and - not isinstance(self.callback_kwargs, dict)): - raise OptionError( - "callback_kwargs, if supplied, must be a dict: not %r" - % self.callback_kwargs, self) - else: - if self.callback is not None: - raise OptionError( - "callback supplied (%r) for non-callback option" - % self.callback, self) - if self.callback_args is not None: - raise OptionError( - "callback_args supplied for non-callback option", self) - if self.callback_kwargs is not None: - raise OptionError( - "callback_kwargs supplied for non-callback option", self) - - - CHECK_METHODS = [_check_action, - _check_type, - _check_choice, - _check_dest, - _check_const, - _check_nargs, - _check_callback] - - - # -- Miscellaneous methods ----------------------------------------- - - def __str__(self): - return "/".join(self._short_opts + self._long_opts) - - __repr__ = _repr - - def takes_value(self): - return self.type is not None - - def get_opt_string(self): - if self._long_opts: - return self._long_opts[0] - else: - return self._short_opts[0] - - - # -- Processing methods -------------------------------------------- - - def check_value(self, opt, value): - checker = self.TYPE_CHECKER.get(self.type) - if checker is None: - return value - else: - return checker(self, opt, value) - - def convert_value(self, opt, value): - if value is not None: - if self.nargs == 1: - return self.check_value(opt, value) - else: - return tuple([self.check_value(opt, v) for v in value]) - - def process(self, opt, value, values, parser): - - # First, convert the value(s) to the right type. Howl if any - # value(s) are bogus. - value = self.convert_value(opt, value) - - # And then take whatever action is expected of us. - # This is a separate method to make life easier for - # subclasses to add new actions. - return self.take_action( - self.action, self.dest, opt, value, values, parser) - - def take_action(self, action, dest, opt, value, values, parser): - if action == "store": - setattr(values, dest, value) - elif action == "store_const": - setattr(values, dest, self.const) - elif action == "store_true": - setattr(values, dest, True) - elif action == "store_false": - setattr(values, dest, False) - elif action == "append": - values.ensure_value(dest, []).append(value) - elif action == "append_const": - values.ensure_value(dest, []).append(self.const) - elif action == "count": - setattr(values, dest, values.ensure_value(dest, 0) + 1) - elif action == "callback": - args = self.callback_args or () - kwargs = self.callback_kwargs or {} - self.callback(self, opt, value, parser, *args, **kwargs) - elif action == "help": - parser.print_help() - parser.exit() - elif action == "version": - parser.print_version() - parser.exit() - else: - raise ValueError("unknown action %r" % self.action) - - return 1 - -# class Option - - -SUPPRESS_HELP = "SUPPRESS"+"HELP" -SUPPRESS_USAGE = "SUPPRESS"+"USAGE" - -class Values: - - def __init__(self, defaults=None): - if defaults: - for (attr, val) in defaults.items(): - setattr(self, attr, val) - - def __str__(self): - return str(self.__dict__) - - __repr__ = _repr - - def __eq__(self, other): - if isinstance(other, Values): - return self.__dict__ == other.__dict__ - elif isinstance(other, dict): - return self.__dict__ == other - else: - return NotImplemented - - def _update_careful(self, dict): - """ - Update the option values from an arbitrary dictionary, but only - use keys from dict that already have a corresponding attribute - in self. Any keys in dict without a corresponding attribute - are silently ignored. - """ - for attr in dir(self): - if attr in dict: - dval = dict[attr] - if dval is not None: - setattr(self, attr, dval) - - def _update_loose(self, dict): - """ - Update the option values from an arbitrary dictionary, - using all keys from the dictionary regardless of whether - they have a corresponding attribute in self or not. - """ - self.__dict__.update(dict) - - def _update(self, dict, mode): - if mode == "careful": - self._update_careful(dict) - elif mode == "loose": - self._update_loose(dict) - else: - raise ValueError("invalid update mode: %r" % mode) - - def read_module(self, modname, mode="careful"): - __import__(modname) - mod = sys.modules[modname] - self._update(vars(mod), mode) - - def read_file(self, filename, mode="careful"): - vars = {} - exec(open(filename).read(), vars) - self._update(vars, mode) - - def ensure_value(self, attr, value): - if not hasattr(self, attr) or getattr(self, attr) is None: - setattr(self, attr, value) - return getattr(self, attr) - - -class OptionContainer: - - """ - Abstract base class. - - Class attributes: - standard_option_list : [Option] - list of standard options that will be accepted by all instances - of this parser class (intended to be overridden by subclasses). - - Instance attributes: - option_list : [Option] - the list of Option objects contained by this OptionContainer - _short_opt : { string : Option } - dictionary mapping short option strings, eg. "-f" or "-X", - to the Option instances that implement them. If an Option - has multiple short option strings, it will appear in this - dictionary multiple times. [1] - _long_opt : { string : Option } - dictionary mapping long option strings, eg. "--file" or - "--exclude", to the Option instances that implement them. - Again, a given Option can occur multiple times in this - dictionary. [1] - defaults : { string : any } - dictionary mapping option destination names to default - values for each destination [1] - - [1] These mappings are common to (shared by) all components of the - controlling OptionParser, where they are initially created. - - """ - - def __init__(self, option_class, conflict_handler, description): - # Initialize the option list and related data structures. - # This method must be provided by subclasses, and it must - # initialize at least the following instance attributes: - # option_list, _short_opt, _long_opt, defaults. - self._create_option_list() - - self.option_class = option_class - self.set_conflict_handler(conflict_handler) - self.set_description(description) - - def _create_option_mappings(self): - # For use by OptionParser constructor -- create the main - # option mappings used by this OptionParser and all - # OptionGroups that it owns. - self._short_opt = {} # single letter -> Option instance - self._long_opt = {} # long option -> Option instance - self.defaults = {} # maps option dest -> default value - - - def _share_option_mappings(self, parser): - # For use by OptionGroup constructor -- use shared option - # mappings from the OptionParser that owns this OptionGroup. - self._short_opt = parser._short_opt - self._long_opt = parser._long_opt - self.defaults = parser.defaults - - def set_conflict_handler(self, handler): - if handler not in ("error", "resolve"): - raise ValueError("invalid conflict_resolution value %r" % handler) - self.conflict_handler = handler - - def set_description(self, description): - self.description = description - - def get_description(self): - return self.description - - - def destroy(self): - """see OptionParser.destroy().""" - del self._short_opt - del self._long_opt - del self.defaults - - - # -- Option-adding methods ----------------------------------------- - - def _check_conflict(self, option): - conflict_opts = [] - for opt in option._short_opts: - if opt in self._short_opt: - conflict_opts.append((opt, self._short_opt[opt])) - for opt in option._long_opts: - if opt in self._long_opt: - conflict_opts.append((opt, self._long_opt[opt])) - - if conflict_opts: - handler = self.conflict_handler - if handler == "error": - raise OptionConflictError( - "conflicting option string(s): %s" - % ", ".join([co[0] for co in conflict_opts]), - option) - elif handler == "resolve": - for (opt, c_option) in conflict_opts: - if opt.startswith("--"): - c_option._long_opts.remove(opt) - del self._long_opt[opt] - else: - c_option._short_opts.remove(opt) - del self._short_opt[opt] - if not (c_option._short_opts or c_option._long_opts): - c_option.container.option_list.remove(c_option) - - def add_option(self, *args, **kwargs): - """add_option(Option) - add_option(opt_str, ..., kwarg=val, ...) - """ - if isinstance(args[0], str): - option = self.option_class(*args, **kwargs) - elif len(args) == 1 and not kwargs: - option = args[0] - if not isinstance(option, Option): - raise TypeError("not an Option instance: %r" % option) - else: - raise TypeError("invalid arguments") - - self._check_conflict(option) - - self.option_list.append(option) - option.container = self - for opt in option._short_opts: - self._short_opt[opt] = option - for opt in option._long_opts: - self._long_opt[opt] = option - - if option.dest is not None: # option has a dest, we need a default - if option.default is not NO_DEFAULT: - self.defaults[option.dest] = option.default - elif option.dest not in self.defaults: - self.defaults[option.dest] = None - - return option - - def add_options(self, option_list): - for option in option_list: - self.add_option(option) - - # -- Option query/removal methods ---------------------------------- - - def get_option(self, opt_str): - return (self._short_opt.get(opt_str) or - self._long_opt.get(opt_str)) - - def has_option(self, opt_str): - return (opt_str in self._short_opt or - opt_str in self._long_opt) - - def remove_option(self, opt_str): - option = self._short_opt.get(opt_str) - if option is None: - option = self._long_opt.get(opt_str) - if option is None: - raise ValueError("no such option %r" % opt_str) - - for opt in option._short_opts: - del self._short_opt[opt] - for opt in option._long_opts: - del self._long_opt[opt] - option.container.option_list.remove(option) - - - # -- Help-formatting methods --------------------------------------- - - def format_option_help(self, formatter): - if not self.option_list: - return "" - result = [] - for option in self.option_list: - if not option.help is SUPPRESS_HELP: - result.append(formatter.format_option(option)) - return "".join(result) - - def format_description(self, formatter): - return formatter.format_description(self.get_description()) - - def format_help(self, formatter): - result = [] - if self.description: - result.append(self.format_description(formatter)) - if self.option_list: - result.append(self.format_option_help(formatter)) - return "\n".join(result) - - -class OptionGroup (OptionContainer): - - def __init__(self, parser, title, description=None): - self.parser = parser - OptionContainer.__init__( - self, parser.option_class, parser.conflict_handler, description) - self.title = title - - def _create_option_list(self): - self.option_list = [] - self._share_option_mappings(self.parser) - - def set_title(self, title): - self.title = title - - def destroy(self): - """see OptionParser.destroy().""" - OptionContainer.destroy(self) - del self.option_list - - # -- Help-formatting methods --------------------------------------- - - def format_help(self, formatter): - result = formatter.format_heading(self.title) - formatter.indent() - result += OptionContainer.format_help(self, formatter) - formatter.dedent() - return result - - -class OptionParser (OptionContainer): - - """ - Class attributes: - standard_option_list : [Option] - list of standard options that will be accepted by all instances - of this parser class (intended to be overridden by subclasses). - - Instance attributes: - usage : string - a usage string for your program. Before it is displayed - to the user, "%prog" will be expanded to the name of - your program (self.prog or os.path.basename(sys.argv[0])). - prog : string - the name of the current program (to override - os.path.basename(sys.argv[0])). - description : string - A paragraph of text giving a brief overview of your program. - optparse reformats this paragraph to fit the current terminal - width and prints it when the user requests help (after usage, - but before the list of options). - epilog : string - paragraph of help text to print after option help - - option_groups : [OptionGroup] - list of option groups in this parser (option groups are - irrelevant for parsing the command-line, but very useful - for generating help) - - allow_interspersed_args : bool = true - if true, positional arguments may be interspersed with options. - Assuming -a and -b each take a single argument, the command-line - -ablah foo bar -bboo baz - will be interpreted the same as - -ablah -bboo -- foo bar baz - If this flag were false, that command line would be interpreted as - -ablah -- foo bar -bboo baz - -- ie. we stop processing options as soon as we see the first - non-option argument. (This is the tradition followed by - Python's getopt module, Perl's Getopt::Std, and other argument- - parsing libraries, but it is generally annoying to users.) - - process_default_values : bool = true - if true, option default values are processed similarly to option - values from the command line: that is, they are passed to the - type-checking function for the option's type (as long as the - default value is a string). (This really only matters if you - have defined custom types; see SF bug #955889.) Set it to false - to restore the behaviour of Optik 1.4.1 and earlier. - - rargs : [string] - the argument list currently being parsed. Only set when - parse_args() is active, and continually trimmed down as - we consume arguments. Mainly there for the benefit of - callback options. - largs : [string] - the list of leftover arguments that we have skipped while - parsing options. If allow_interspersed_args is false, this - list is always empty. - values : Values - the set of option values currently being accumulated. Only - set when parse_args() is active. Also mainly for callbacks. - - Because of the 'rargs', 'largs', and 'values' attributes, - OptionParser is not thread-safe. If, for some perverse reason, you - need to parse command-line arguments simultaneously in different - threads, use different OptionParser instances. - - """ - - standard_option_list = [] - - def __init__(self, - usage=None, - option_list=None, - option_class=Option, - version=None, - conflict_handler="error", - description=None, - formatter=None, - add_help_option=True, - prog=None, - epilog=None): - OptionContainer.__init__( - self, option_class, conflict_handler, description) - self.set_usage(usage) - self.prog = prog - self.version = version - self.allow_interspersed_args = True - self.process_default_values = True - if formatter is None: - formatter = IndentedHelpFormatter() - self.formatter = formatter - self.formatter.set_parser(self) - self.epilog = epilog - - # Populate the option list; initial sources are the - # standard_option_list class attribute, the 'option_list' - # argument, and (if applicable) the _add_version_option() and - # _add_help_option() methods. - self._populate_option_list(option_list, - add_help=add_help_option) - - self._init_parsing_state() - - - def destroy(self): - """ - Declare that you are done with this OptionParser. This cleans up - reference cycles so the OptionParser (and all objects referenced by - it) can be garbage-collected promptly. After calling destroy(), the - OptionParser is unusable. - """ - OptionContainer.destroy(self) - for group in self.option_groups: - group.destroy() - del self.option_list - del self.option_groups - del self.formatter - - - # -- Private methods ----------------------------------------------- - # (used by our or OptionContainer's constructor) - - def _create_option_list(self): - self.option_list = [] - self.option_groups = [] - self._create_option_mappings() - - def _add_help_option(self): - self.add_option("-h", "--help", - action="help", - help=_("show this help message and exit")) - - def _add_version_option(self): - self.add_option("--version", - action="version", - help=_("show program's version number and exit")) - - def _populate_option_list(self, option_list, add_help=True): - if self.standard_option_list: - self.add_options(self.standard_option_list) - if option_list: - self.add_options(option_list) - if self.version: - self._add_version_option() - if add_help: - self._add_help_option() - - def _init_parsing_state(self): - # These are set in parse_args() for the convenience of callbacks. - self.rargs = None - self.largs = None - self.values = None - - - # -- Simple modifier methods --------------------------------------- - - def set_usage(self, usage): - if usage is None: - self.usage = _("%prog [options]") - elif usage is SUPPRESS_USAGE: - self.usage = None - # For backwards compatibility with Optik 1.3 and earlier. - elif usage.lower().startswith("usage: "): - self.usage = usage[7:] - else: - self.usage = usage - - def enable_interspersed_args(self): - """Set parsing to not stop on the first non-option, allowing - interspersing switches with command arguments. This is the - default behavior. See also disable_interspersed_args() and the - class documentation description of the attribute - allow_interspersed_args.""" - self.allow_interspersed_args = True - - def disable_interspersed_args(self): - """Set parsing to stop on the first non-option. Use this if - you have a command processor which runs another command that - has options of its own and you want to make sure these options - don't get confused. - """ - self.allow_interspersed_args = False - - def set_process_default_values(self, process): - self.process_default_values = process - - def set_default(self, dest, value): - self.defaults[dest] = value - - def set_defaults(self, **kwargs): - self.defaults.update(kwargs) - - def _get_all_options(self): - options = self.option_list[:] - for group in self.option_groups: - options.extend(group.option_list) - return options - - def get_default_values(self): - if not self.process_default_values: - # Old, pre-Optik 1.5 behaviour. - return Values(self.defaults) - - defaults = self.defaults.copy() - for option in self._get_all_options(): - default = defaults.get(option.dest) - if isinstance(default, str): - opt_str = option.get_opt_string() - defaults[option.dest] = option.check_value(opt_str, default) - - return Values(defaults) - - - # -- OptionGroup methods ------------------------------------------- - - def add_option_group(self, *args, **kwargs): - # XXX lots of overlap with OptionContainer.add_option() - if isinstance(args[0], str): - group = OptionGroup(self, *args, **kwargs) - elif len(args) == 1 and not kwargs: - group = args[0] - if not isinstance(group, OptionGroup): - raise TypeError("not an OptionGroup instance: %r" % group) - if group.parser is not self: - raise ValueError("invalid OptionGroup (wrong parser)") - else: - raise TypeError("invalid arguments") - - self.option_groups.append(group) - return group - - def get_option_group(self, opt_str): - option = (self._short_opt.get(opt_str) or - self._long_opt.get(opt_str)) - if option and option.container is not self: - return option.container - return None - - - # -- Option-parsing methods ---------------------------------------- - - def _get_args(self, args): - if args is None: - return sys.argv[1:] - else: - return args[:] # don't modify caller's list - - def parse_args(self, args=None, values=None): - """ - parse_args(args : [string] = sys.argv[1:], - values : Values = None) - -> (values : Values, args : [string]) - - Parse the command-line options found in 'args' (default: - sys.argv[1:]). Any errors result in a call to 'error()', which - by default prints the usage message to stderr and calls - sys.exit() with an error message. On success returns a pair - (values, args) where 'values' is a Values instance (with all - your option values) and 'args' is the list of arguments left - over after parsing options. - """ - rargs = self._get_args(args) - if values is None: - values = self.get_default_values() - - # Store the halves of the argument list as attributes for the - # convenience of callbacks: - # rargs - # the rest of the command-line (the "r" stands for - # "remaining" or "right-hand") - # largs - # the leftover arguments -- ie. what's left after removing - # options and their arguments (the "l" stands for "leftover" - # or "left-hand") - self.rargs = rargs - self.largs = largs = [] - self.values = values - - try: - stop = self._process_args(largs, rargs, values) - except (BadOptionError, OptionValueError) as err: - self.error(str(err)) - - args = largs + rargs - return self.check_values(values, args) - - def check_values(self, values, args): - """ - check_values(values : Values, args : [string]) - -> (values : Values, args : [string]) - - Check that the supplied option values and leftover arguments are - valid. Returns the option values and leftover arguments - (possibly adjusted, possibly completely new -- whatever you - like). Default implementation just returns the passed-in - values; subclasses may override as desired. - """ - return (values, args) - - def _process_args(self, largs, rargs, values): - """_process_args(largs : [string], - rargs : [string], - values : Values) - - Process command-line arguments and populate 'values', consuming - options and arguments from 'rargs'. If 'allow_interspersed_args' is - false, stop at the first non-option argument. If true, accumulate any - interspersed non-option arguments in 'largs'. - """ - while rargs: - arg = rargs[0] - # We handle bare "--" explicitly, and bare "-" is handled by the - # standard arg handler since the short arg case ensures that the - # len of the opt string is greater than 1. - if arg == "--": - del rargs[0] - return - elif arg[0:2] == "--": - # process a single long option (possibly with value(s)) - self._process_long_opt(rargs, values) - elif arg[:1] == "-" and len(arg) > 1: - # process a cluster of short options (possibly with - # value(s) for the last one only) - self._process_short_opts(rargs, values) - elif self.allow_interspersed_args: - largs.append(arg) - del rargs[0] - else: - return # stop now, leave this arg in rargs - - # Say this is the original argument list: - # [arg0, arg1, ..., arg(i-1), arg(i), arg(i+1), ..., arg(N-1)] - # ^ - # (we are about to process arg(i)). - # - # Then rargs is [arg(i), ..., arg(N-1)] and largs is a *subset* of - # [arg0, ..., arg(i-1)] (any options and their arguments will have - # been removed from largs). - # - # The while loop will usually consume 1 or more arguments per pass. - # If it consumes 1 (eg. arg is an option that takes no arguments), - # then after _process_arg() is done the situation is: - # - # largs = subset of [arg0, ..., arg(i)] - # rargs = [arg(i+1), ..., arg(N-1)] - # - # If allow_interspersed_args is false, largs will always be - # *empty* -- still a subset of [arg0, ..., arg(i-1)], but - # not a very interesting subset! - - def _match_long_opt(self, opt): - """_match_long_opt(opt : string) -> string - - Determine which long option string 'opt' matches, ie. which one - it is an unambiguous abbreviation for. Raises BadOptionError if - 'opt' doesn't unambiguously match any long option string. - """ - return _match_abbrev(opt, self._long_opt) - - def _process_long_opt(self, rargs, values): - arg = rargs.pop(0) - - # Value explicitly attached to arg? Pretend it's the next - # argument. - if "=" in arg: - (opt, next_arg) = arg.split("=", 1) - rargs.insert(0, next_arg) - had_explicit_value = True - else: - opt = arg - had_explicit_value = False - - opt = self._match_long_opt(opt) - option = self._long_opt[opt] - if option.takes_value(): - nargs = option.nargs - if len(rargs) < nargs: - self.error(ngettext( - "%(option)s option requires %(number)d argument", - "%(option)s option requires %(number)d arguments", - nargs) % {"option": opt, "number": nargs}) - elif nargs == 1: - value = rargs.pop(0) - else: - value = tuple(rargs[0:nargs]) - del rargs[0:nargs] - - elif had_explicit_value: - self.error(_("%s option does not take a value") % opt) - - else: - value = None - - option.process(opt, value, values, self) - - def _process_short_opts(self, rargs, values): - arg = rargs.pop(0) - stop = False - i = 1 - for ch in arg[1:]: - opt = "-" + ch - option = self._short_opt.get(opt) - i += 1 # we have consumed a character - - if not option: - raise BadOptionError(opt) - if option.takes_value(): - # Any characters left in arg? Pretend they're the - # next arg, and stop consuming characters of arg. - if i < len(arg): - rargs.insert(0, arg[i:]) - stop = True - - nargs = option.nargs - if len(rargs) < nargs: - self.error(ngettext( - "%(option)s option requires %(number)d argument", - "%(option)s option requires %(number)d arguments", - nargs) % {"option": opt, "number": nargs}) - elif nargs == 1: - value = rargs.pop(0) - else: - value = tuple(rargs[0:nargs]) - del rargs[0:nargs] - - else: # option doesn't take a value - value = None - - option.process(opt, value, values, self) - - if stop: - break - - - # -- Feedback methods ---------------------------------------------- - - def get_prog_name(self): - if self.prog is None: - return os.path.basename(sys.argv[0]) - else: - return self.prog - - def expand_prog_name(self, s): - return s.replace("%prog", self.get_prog_name()) - - def get_description(self): - return self.expand_prog_name(self.description) - - def exit(self, status=0, msg=None): - if msg: - sys.stderr.write(msg) - sys.exit(status) - - def error(self, msg): - """error(msg : string) - - Print a usage message incorporating 'msg' to stderr and exit. - If you override this in a subclass, it should not return -- it - should either exit or raise an exception. - """ - self.print_usage(sys.stderr) - self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg)) - - def get_usage(self): - if self.usage: - return self.formatter.format_usage( - self.expand_prog_name(self.usage)) - else: - return "" - - def print_usage(self, file=None): - """print_usage(file : file = stdout) - - Print the usage message for the current program (self.usage) to - 'file' (default stdout). Any occurrence of the string "%prog" in - self.usage is replaced with the name of the current program - (basename of sys.argv[0]). Does nothing if self.usage is empty - or not defined. - """ - if self.usage: - print(self.get_usage(), file=file) - - def get_version(self): - if self.version: - return self.expand_prog_name(self.version) - else: - return "" - - def print_version(self, file=None): - """print_version(file : file = stdout) - - Print the version message for this program (self.version) to - 'file' (default stdout). As with print_usage(), any occurrence - of "%prog" in self.version is replaced by the current program's - name. Does nothing if self.version is empty or undefined. - """ - if self.version: - print(self.get_version(), file=file) - - def format_option_help(self, formatter=None): - if formatter is None: - formatter = self.formatter - formatter.store_option_strings(self) - result = [] - result.append(formatter.format_heading(_("Options"))) - formatter.indent() - if self.option_list: - result.append(OptionContainer.format_option_help(self, formatter)) - result.append("\n") - for group in self.option_groups: - result.append(group.format_help(formatter)) - result.append("\n") - formatter.dedent() - # Drop the last "\n", or the header if no options or option groups: - return "".join(result[:-1]) - - def format_epilog(self, formatter): - return formatter.format_epilog(self.epilog) - - def format_help(self, formatter=None): - if formatter is None: - formatter = self.formatter - result = [] - if self.usage: - result.append(self.get_usage() + "\n") - if self.description: - result.append(self.format_description(formatter) + "\n") - result.append(self.format_option_help(formatter)) - result.append(self.format_epilog(formatter)) - return "".join(result) - - def print_help(self, file=None): - """print_help(file : file = stdout) - - Print an extended help message, listing all options and any - help text provided with them, to 'file' (default stdout). - """ - if file is None: - file = sys.stdout - file.write(self.format_help()) - -# class OptionParser - - -def _match_abbrev(s, wordmap): - """_match_abbrev(s : string, wordmap : {string : Option}) -> string - - Return the string key in 'wordmap' for which 's' is an unambiguous - abbreviation. If 's' is found to be ambiguous or doesn't match any of - 'words', raise BadOptionError. - """ - # Is there an exact match? - if s in wordmap: - return s - else: - # Isolate all words with s as a prefix. - possibilities = [word for word in wordmap.keys() - if word.startswith(s)] - # No exact match, so there had better be just one possibility. - if len(possibilities) == 1: - return possibilities[0] - elif not possibilities: - raise BadOptionError(s) - else: - # More than one possible completion: ambiguous prefix. - possibilities.sort() - raise AmbiguousOptionError(s, possibilities) - - -# Some day, there might be many Option classes. As of Optik 1.3, the -# preferred way to instantiate Options is indirectly, via make_option(), -# which will become a factory function when there are many Option -# classes. -make_option = Option diff --git a/Python314_4_x86_Template/Lib/os.py b/Python314_4_x86_Template/Lib/os.py deleted file mode 100644 index ac03b4163..000000000 --- a/Python314_4_x86_Template/Lib/os.py +++ /dev/null @@ -1,1191 +0,0 @@ -r"""OS routines for NT or Posix depending on what system we're on. - -This exports: - - all functions from posix or nt, e.g. unlink, stat, etc. - - os.path is either posixpath or ntpath - - os.name is either 'posix' or 'nt' - - os.curdir is a string representing the current directory (always '.') - - os.pardir is a string representing the parent directory (always '..') - - os.sep is the (or a most common) pathname separator ('/' or '\\') - - os.extsep is the extension separator (always '.') - - os.altsep is the alternate pathname separator (None or '/') - - os.pathsep is the component separator used in $PATH etc - - os.linesep is the line separator in text files ('\n' or '\r\n') - - os.defpath is the default search path for executables - - os.devnull is the file path of the null device ('/dev/null', etc.) - -Programs that import and use 'os' stand a better chance of being -portable between different platforms. Of course, they must then -only use functions that are defined by all platforms (e.g., unlink -and opendir), and leave all pathname manipulation to os.path -(e.g., split and join). -""" - -#' -import abc -import sys -import stat as st - -from _collections_abc import _check_methods - -GenericAlias = type(list[int]) - -_names = sys.builtin_module_names - -# Note: more names are added to __all__ later. -__all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", - "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR", - "SEEK_END", "fsencode", "fsdecode", "get_exec_path", "fdopen", - "extsep"] - -def _exists(name): - return name in globals() - -def _get_exports_list(module): - try: - return list(module.__all__) - except AttributeError: - return [n for n in dir(module) if n[0] != '_'] - -# Any new dependencies of the os module and/or changes in path separator -# requires updating importlib as well. -if 'posix' in _names: - name = 'posix' - linesep = '\n' - from posix import * - try: - from posix import _exit - __all__.append('_exit') - except ImportError: - pass - import posixpath as path - - try: - from posix import _have_functions - except ImportError: - pass - try: - from posix import _create_environ - except ImportError: - pass - - import posix - __all__.extend(_get_exports_list(posix)) - del posix - -elif 'nt' in _names: - name = 'nt' - linesep = '\r\n' - from nt import * - try: - from nt import _exit - __all__.append('_exit') - except ImportError: - pass - import ntpath as path - - import nt - __all__.extend(_get_exports_list(nt)) - del nt - - try: - from nt import _have_functions - except ImportError: - pass - try: - from nt import _create_environ - except ImportError: - pass - -else: - raise ImportError('no os specific module found') - -sys.modules['os.path'] = path -from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep, - devnull) - -del _names - - -if _exists("_have_functions"): - _globals = globals() - def _add(str, fn): - if (fn in _globals) and (str in _have_functions): - _set.add(_globals[fn]) - - _set = set() - _add("HAVE_FACCESSAT", "access") - _add("HAVE_FCHMODAT", "chmod") - _add("HAVE_FCHOWNAT", "chown") - _add("HAVE_FSTATAT", "stat") - _add("HAVE_LSTAT", "lstat") - _add("HAVE_FUTIMESAT", "utime") - _add("HAVE_LINKAT", "link") - _add("HAVE_MKDIRAT", "mkdir") - _add("HAVE_MKFIFOAT", "mkfifo") - _add("HAVE_MKNODAT", "mknod") - _add("HAVE_OPENAT", "open") - _add("HAVE_READLINKAT", "readlink") - _add("HAVE_RENAMEAT", "rename") - _add("HAVE_SYMLINKAT", "symlink") - _add("HAVE_UNLINKAT", "unlink") - _add("HAVE_UNLINKAT", "rmdir") - _add("HAVE_UTIMENSAT", "utime") - supports_dir_fd = _set - - _set = set() - _add("HAVE_FACCESSAT", "access") - supports_effective_ids = _set - - _set = set() - _add("HAVE_FCHDIR", "chdir") - _add("HAVE_FCHMOD", "chmod") - _add("MS_WINDOWS", "chmod") - _add("HAVE_FCHOWN", "chown") - _add("HAVE_FDOPENDIR", "listdir") - _add("HAVE_FDOPENDIR", "scandir") - _add("HAVE_FEXECVE", "execve") - _set.add(stat) # fstat always works - _add("HAVE_FTRUNCATE", "truncate") - _add("HAVE_FUTIMENS", "utime") - _add("HAVE_FUTIMES", "utime") - _add("HAVE_FPATHCONF", "pathconf") - if _exists("statvfs") and _exists("fstatvfs"): # mac os x10.3 - _add("HAVE_FSTATVFS", "statvfs") - supports_fd = _set - - _set = set() - _add("HAVE_FACCESSAT", "access") - # Some platforms don't support lchmod(). Often the function exists - # anyway, as a stub that always returns ENOSUP or perhaps EOPNOTSUPP. - # (No, I don't know why that's a good design.) ./configure will detect - # this and reject it--so HAVE_LCHMOD still won't be defined on such - # platforms. This is Very Helpful. - # - # However, sometimes platforms without a working lchmod() *do* have - # fchmodat(). (Examples: Linux kernel 3.2 with glibc 2.15, - # OpenIndiana 3.x.) And fchmodat() has a flag that theoretically makes - # it behave like lchmod(). So in theory it would be a suitable - # replacement for lchmod(). But when lchmod() doesn't work, fchmodat()'s - # flag doesn't work *either*. Sadly ./configure isn't sophisticated - # enough to detect this condition--it only determines whether or not - # fchmodat() minimally works. - # - # Therefore we simply ignore fchmodat() when deciding whether or not - # os.chmod supports follow_symlinks. Just checking lchmod() is - # sufficient. After all--if you have a working fchmodat(), your - # lchmod() almost certainly works too. - # - # _add("HAVE_FCHMODAT", "chmod") - _add("HAVE_FCHOWNAT", "chown") - _add("HAVE_FSTATAT", "stat") - _add("HAVE_LCHFLAGS", "chflags") - _add("HAVE_LCHMOD", "chmod") - _add("MS_WINDOWS", "chmod") - if _exists("lchown"): # mac os x10.3 - _add("HAVE_LCHOWN", "chown") - _add("HAVE_LINKAT", "link") - _add("HAVE_LUTIMES", "utime") - _add("HAVE_LSTAT", "stat") - _add("HAVE_FSTATAT", "stat") - _add("HAVE_UTIMENSAT", "utime") - _add("MS_WINDOWS", "stat") - supports_follow_symlinks = _set - - del _set - del _have_functions - del _globals - del _add - - -# Python uses fixed values for the SEEK_ constants; they are mapped -# to native constants if necessary in posixmodule.c -# Other possible SEEK values are directly imported from posixmodule.c -SEEK_SET = 0 -SEEK_CUR = 1 -SEEK_END = 2 - -# Super directory utilities. -# (Inspired by Eric Raymond; the doc strings are mostly his) - -def makedirs(name, mode=0o777, exist_ok=False): - """makedirs(name [, mode=0o777][, exist_ok=False]) - - Super-mkdir; create a leaf directory and all intermediate ones. Works like - mkdir, except that any intermediate path segment (not just the rightmost) - will be created if it does not exist. If the target directory already - exists, raise an OSError if exist_ok is False. Otherwise no exception is - raised. This is recursive. - - """ - head, tail = path.split(name) - if not tail: - head, tail = path.split(head) - if head and tail and not path.exists(head): - try: - makedirs(head, exist_ok=exist_ok) - except FileExistsError: - # Defeats race condition when another thread created the path - pass - cdir = curdir - if isinstance(tail, bytes): - cdir = bytes(curdir, 'ASCII') - if tail == cdir: # xxx/newdir/. exists if xxx/newdir exists - return - try: - mkdir(name, mode) - except OSError: - # Cannot rely on checking for EEXIST, since the operating system - # could give priority to other errors like EACCES or EROFS - if not exist_ok or not path.isdir(name): - raise - -def removedirs(name): - """removedirs(name) - - Super-rmdir; remove a leaf directory and all empty intermediate - ones. Works like rmdir except that, if the leaf directory is - successfully removed, directories corresponding to rightmost path - segments will be pruned away until either the whole path is - consumed or an error occurs. Errors during this latter phase are - ignored -- they generally mean that a directory was not empty. - - """ - rmdir(name) - head, tail = path.split(name) - if not tail: - head, tail = path.split(head) - while head and tail: - try: - rmdir(head) - except OSError: - break - head, tail = path.split(head) - -def renames(old, new): - """renames(old, new) - - Super-rename; create directories as necessary and delete any left - empty. Works like rename, except creation of any intermediate - directories needed to make the new pathname good is attempted - first. After the rename, directories corresponding to rightmost - path segments of the old name will be pruned until either the - whole path is consumed or a nonempty directory is found. - - Note: this function can fail with the new directory structure made - if you lack permissions needed to unlink the leaf directory or - file. - - """ - head, tail = path.split(new) - if head and tail and not path.exists(head): - makedirs(head) - rename(old, new) - head, tail = path.split(old) - if head and tail: - try: - removedirs(head) - except OSError: - pass - -__all__.extend(["makedirs", "removedirs", "renames"]) - -# Private sentinel that makes walk() classify all symlinks and junctions as -# regular files. -_walk_symlinks_as_files = object() - -def walk(top, topdown=True, onerror=None, followlinks=False): - """Directory tree generator. - - For each directory in the directory tree rooted at top (including top - itself, but excluding '.' and '..'), yields a 3-tuple - - dirpath, dirnames, filenames - - dirpath is a string, the path to the directory. dirnames is a list of - the names of the subdirectories in dirpath (including symlinks to directories, - and excluding '.' and '..'). - filenames is a list of the names of the non-directory files in dirpath. - Note that the names in the lists are just names, with no path components. - To get a full path (which begins with top) to a file or directory in - dirpath, do os.path.join(dirpath, name). - - If optional arg 'topdown' is true or not specified, the triple for a - directory is generated before the triples for any of its subdirectories - (directories are generated top down). If topdown is false, the triple - for a directory is generated after the triples for all of its - subdirectories (directories are generated bottom up). - - When topdown is true, the caller can modify the dirnames list in-place - (e.g., via del or slice assignment), and walk will only recurse into the - subdirectories whose names remain in dirnames; this can be used to prune the - search, or to impose a specific order of visiting. Modifying dirnames when - topdown is false has no effect on the behavior of os.walk(), since the - directories in dirnames have already been generated by the time dirnames - itself is generated. No matter the value of topdown, the list of - subdirectories is retrieved before the tuples for the directory and its - subdirectories are generated. - - By default errors from the os.scandir() call are ignored. If - optional arg 'onerror' is specified, it should be a function; it - will be called with one argument, an OSError instance. It can - report the error to continue with the walk, or raise the exception - to abort the walk. Note that the filename is available as the - filename attribute of the exception object. - - By default, os.walk does not follow symbolic links to subdirectories on - systems that support them. In order to get this functionality, set the - optional argument 'followlinks' to true. - - Caution: if you pass a relative pathname for top, don't change the - current working directory between resumptions of walk. walk never - changes the current directory, and assumes that the client doesn't - either. - - Example: - - import os - from os.path import join, getsize - for root, dirs, files in os.walk('python/Lib/xml'): - print(root, "consumes ") - print(sum(getsize(join(root, name)) for name in files), end=" ") - print("bytes in", len(files), "non-directory files") - if '__pycache__' in dirs: - dirs.remove('__pycache__') # don't visit __pycache__ directories - - """ - sys.audit("os.walk", top, topdown, onerror, followlinks) - - stack = [fspath(top)] - islink, join = path.islink, path.join - while stack: - top = stack.pop() - if isinstance(top, tuple): - yield top - continue - - dirs = [] - nondirs = [] - walk_dirs = [] - - # We may not have read permission for top, in which case we can't - # get a list of the files the directory contains. - # We suppress the exception here, rather than blow up for a - # minor reason when (say) a thousand readable directories are still - # left to visit. - try: - with scandir(top) as entries: - for entry in entries: - try: - if followlinks is _walk_symlinks_as_files: - is_dir = entry.is_dir(follow_symlinks=False) and not entry.is_junction() - else: - is_dir = entry.is_dir() - except OSError: - # If is_dir() raises an OSError, consider the entry not to - # be a directory, same behaviour as os.path.isdir(). - is_dir = False - - if is_dir: - dirs.append(entry.name) - else: - nondirs.append(entry.name) - - if not topdown and is_dir: - # Bottom-up: traverse into sub-directory, but exclude - # symlinks to directories if followlinks is False - if followlinks: - walk_into = True - else: - try: - is_symlink = entry.is_symlink() - except OSError: - # If is_symlink() raises an OSError, consider the - # entry not to be a symbolic link, same behaviour - # as os.path.islink(). - is_symlink = False - walk_into = not is_symlink - - if walk_into: - walk_dirs.append(entry.path) - except OSError as error: - if onerror is not None: - onerror(error) - continue - - if topdown: - # Yield before sub-directory traversal if going top down - yield top, dirs, nondirs - # Traverse into sub-directories - for dirname in reversed(dirs): - new_path = join(top, dirname) - # bpo-23605: os.path.islink() is used instead of caching - # entry.is_symlink() result during the loop on os.scandir() because - # the caller can replace the directory entry during the "yield" - # above. - if followlinks or not islink(new_path): - stack.append(new_path) - else: - # Yield after sub-directory traversal if going bottom up - stack.append((top, dirs, nondirs)) - # Traverse into sub-directories - for new_path in reversed(walk_dirs): - stack.append(new_path) - -__all__.append("walk") - -if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd: - - def fwalk(top=".", topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None): - """Directory tree generator. - - This behaves exactly like walk(), except that it yields a 4-tuple - - dirpath, dirnames, filenames, dirfd - - `dirpath`, `dirnames` and `filenames` are identical to walk() output, - and `dirfd` is a file descriptor referring to the directory `dirpath`. - - The advantage of fwalk() over walk() is that it's safe against symlink - races (when follow_symlinks is False). - - If dir_fd is not None, it should be a file descriptor open to a directory, - and top should be relative; top will then be relative to that directory. - (dir_fd is always supported for fwalk.) - - Caution: - Since fwalk() yields file descriptors, those are only valid until the - next iteration step, so you should dup() them if you want to keep them - for a longer period. - - Example: - - import os - for root, dirs, files, rootfd in os.fwalk('python/Lib/xml'): - print(root, "consumes", end="") - print(sum(os.stat(name, dir_fd=rootfd).st_size for name in files), - end="") - print("bytes in", len(files), "non-directory files") - if '__pycache__' in dirs: - dirs.remove('__pycache__') # don't visit __pycache__ directories - """ - sys.audit("os.fwalk", top, topdown, onerror, follow_symlinks, dir_fd) - top = fspath(top) - stack = [(_fwalk_walk, (True, dir_fd, top, top, None))] - isbytes = isinstance(top, bytes) - try: - while stack: - yield from _fwalk(stack, isbytes, topdown, onerror, follow_symlinks) - finally: - # Close any file descriptors still on the stack. - while stack: - action, value = stack.pop() - if action == _fwalk_close: - close(value) - - # Each item in the _fwalk() stack is a pair (action, args). - _fwalk_walk = 0 # args: (isroot, dirfd, toppath, topname, entry) - _fwalk_yield = 1 # args: (toppath, dirnames, filenames, topfd) - _fwalk_close = 2 # args: dirfd - - def _fwalk(stack, isbytes, topdown, onerror, follow_symlinks): - # Note: This uses O(depth of the directory tree) file descriptors: if - # necessary, it can be adapted to only require O(1) FDs, see issue - # #13734. - - action, value = stack.pop() - if action == _fwalk_close: - close(value) - return - elif action == _fwalk_yield: - yield value - return - assert action == _fwalk_walk - isroot, dirfd, toppath, topname, entry = value - try: - if not follow_symlinks: - # Note: To guard against symlink races, we use the standard - # lstat()/open()/fstat() trick. - if entry is None: - orig_st = stat(topname, follow_symlinks=False, dir_fd=dirfd) - else: - orig_st = entry.stat(follow_symlinks=False) - topfd = open(topname, O_RDONLY | O_NONBLOCK, dir_fd=dirfd) - except OSError as err: - if isroot: - raise - if onerror is not None: - onerror(err) - return - stack.append((_fwalk_close, topfd)) - if not follow_symlinks: - if isroot and not st.S_ISDIR(orig_st.st_mode): - return - if not path.samestat(orig_st, stat(topfd)): - return - - scandir_it = scandir(topfd) - dirs = [] - nondirs = [] - entries = None if topdown or follow_symlinks else [] - for entry in scandir_it: - name = entry.name - if isbytes: - name = fsencode(name) - try: - if entry.is_dir(): - dirs.append(name) - if entries is not None: - entries.append(entry) - else: - nondirs.append(name) - except OSError: - try: - # Add dangling symlinks, ignore disappeared files - if entry.is_symlink(): - nondirs.append(name) - except OSError: - pass - - if topdown: - yield toppath, dirs, nondirs, topfd - else: - stack.append((_fwalk_yield, (toppath, dirs, nondirs, topfd))) - - toppath = path.join(toppath, toppath[:0]) # Add trailing slash. - if entries is None: - stack.extend( - (_fwalk_walk, (False, topfd, toppath + name, name, None)) - for name in dirs[::-1]) - else: - stack.extend( - (_fwalk_walk, (False, topfd, toppath + name, name, entry)) - for name, entry in zip(dirs[::-1], entries[::-1])) - - __all__.append("fwalk") - -def execl(file, *args): - """execl(file, *args) - - Execute the executable file with argument list args, replacing the - current process. """ - execv(file, args) - -def execle(file, *args): - """execle(file, *args, env) - - Execute the executable file with argument list args and - environment env, replacing the current process. """ - env = args[-1] - execve(file, args[:-1], env) - -def execlp(file, *args): - """execlp(file, *args) - - Execute the executable file (which is searched for along $PATH) - with argument list args, replacing the current process. """ - execvp(file, args) - -def execlpe(file, *args): - """execlpe(file, *args, env) - - Execute the executable file (which is searched for along $PATH) - with argument list args and environment env, replacing the current - process. """ - env = args[-1] - execvpe(file, args[:-1], env) - -def execvp(file, args): - """execvp(file, args) - - Execute the executable file (which is searched for along $PATH) - with argument list args, replacing the current process. - args may be a list or tuple of strings. """ - _execvpe(file, args) - -def execvpe(file, args, env): - """execvpe(file, args, env) - - Execute the executable file (which is searched for along $PATH) - with argument list args and environment env, replacing the - current process. - args may be a list or tuple of strings. """ - _execvpe(file, args, env) - -__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) - -def _execvpe(file, args, env=None): - if env is not None: - exec_func = execve - argrest = (args, env) - else: - exec_func = execv - argrest = (args,) - env = environ - - if path.dirname(file): - exec_func(file, *argrest) - return - saved_exc = None - path_list = get_exec_path(env) - if name != 'nt': - file = fsencode(file) - path_list = map(fsencode, path_list) - for dir in path_list: - fullname = path.join(dir, file) - try: - exec_func(fullname, *argrest) - except (FileNotFoundError, NotADirectoryError) as e: - last_exc = e - except OSError as e: - last_exc = e - if saved_exc is None: - saved_exc = e - if saved_exc is not None: - raise saved_exc - raise last_exc - - -def get_exec_path(env=None): - """Returns the sequence of directories that will be searched for the - named executable (similar to a shell) when launching a process. - - *env* must be an environment variable dict or None. If *env* is None, - os.environ will be used. - """ - # Use a local import instead of a global import to limit the number of - # modules loaded at startup: the os module is always loaded at startup by - # Python. It may also avoid a bootstrap issue. - import warnings - - if env is None: - env = environ - - # {b'PATH': ...}.get('PATH') and {'PATH': ...}.get(b'PATH') emit a - # BytesWarning when using python -b or python -bb: ignore the warning - with warnings.catch_warnings(): - warnings.simplefilter("ignore", BytesWarning) - - try: - path_list = env.get('PATH') - except TypeError: - path_list = None - - if supports_bytes_environ: - try: - path_listb = env[b'PATH'] - except (KeyError, TypeError): - pass - else: - if path_list is not None: - raise ValueError( - "env cannot contain 'PATH' and b'PATH' keys") - path_list = path_listb - - if path_list is not None and isinstance(path_list, bytes): - path_list = fsdecode(path_list) - - if path_list is None: - path_list = defpath - return path_list.split(pathsep) - - -# Change environ to automatically call putenv() and unsetenv() -from _collections_abc import MutableMapping, Mapping - -class _Environ(MutableMapping): - def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue): - self.encodekey = encodekey - self.decodekey = decodekey - self.encodevalue = encodevalue - self.decodevalue = decodevalue - self._data = data - - def __getitem__(self, key): - try: - value = self._data[self.encodekey(key)] - except KeyError: - # raise KeyError with the original key value - raise KeyError(key) from None - return self.decodevalue(value) - - def __setitem__(self, key, value): - key = self.encodekey(key) - value = self.encodevalue(value) - putenv(key, value) - self._data[key] = value - - def __delitem__(self, key): - encodedkey = self.encodekey(key) - unsetenv(encodedkey) - try: - del self._data[encodedkey] - except KeyError: - # raise KeyError with the original key value - raise KeyError(key) from None - - def __iter__(self): - # list() from dict object is an atomic operation - keys = list(self._data) - for key in keys: - yield self.decodekey(key) - - def __len__(self): - return len(self._data) - - def __repr__(self): - formatted_items = ", ".join( - f"{self.decodekey(key)!r}: {self.decodevalue(value)!r}" - for key, value in self._data.items() - ) - return f"environ({{{formatted_items}}})" - - def copy(self): - return dict(self) - - def setdefault(self, key, value): - if key not in self: - self[key] = value - return self[key] - - def __ior__(self, other): - self.update(other) - return self - - def __or__(self, other): - if not isinstance(other, Mapping): - return NotImplemented - new = dict(self) - new.update(other) - return new - - def __ror__(self, other): - if not isinstance(other, Mapping): - return NotImplemented - new = dict(other) - new.update(self) - return new - -def _create_environ_mapping(): - if name == 'nt': - # Where Env Var Names Must Be UPPERCASE - def check_str(value): - if not isinstance(value, str): - raise TypeError("str expected, not %s" % type(value).__name__) - return value - encode = check_str - decode = str - def encodekey(key): - return encode(key).upper() - data = {} - for key, value in environ.items(): - data[encodekey(key)] = value - else: - # Where Env Var Names Can Be Mixed Case - encoding = sys.getfilesystemencoding() - def encode(value): - if not isinstance(value, str): - raise TypeError("str expected, not %s" % type(value).__name__) - return value.encode(encoding, 'surrogateescape') - def decode(value): - return value.decode(encoding, 'surrogateescape') - encodekey = encode - data = environ - return _Environ(data, - encodekey, decode, - encode, decode) - -# unicode environ -environ = _create_environ_mapping() -del _create_environ_mapping - - -if _exists("_create_environ"): - def reload_environ(): - data = _create_environ() - if name == 'nt': - encodekey = environ.encodekey - data = {encodekey(key): value - for key, value in data.items()} - - # modify in-place to keep os.environb in sync - env_data = environ._data - env_data.clear() - env_data.update(data) - - __all__.append("reload_environ") - -def getenv(key, default=None): - """Get an environment variable, return None if it doesn't exist. - The optional second argument can specify an alternate default. - key, default and the result are str.""" - return environ.get(key, default) - -supports_bytes_environ = (name != 'nt') -__all__.extend(("getenv", "supports_bytes_environ")) - -if supports_bytes_environ: - def _check_bytes(value): - if not isinstance(value, bytes): - raise TypeError("bytes expected, not %s" % type(value).__name__) - return value - - # bytes environ - environb = _Environ(environ._data, - _check_bytes, bytes, - _check_bytes, bytes) - del _check_bytes - - def getenvb(key, default=None): - """Get an environment variable, return None if it doesn't exist. - The optional second argument can specify an alternate default. - key, default and the result are bytes.""" - return environb.get(key, default) - - __all__.extend(("environb", "getenvb")) - -def _fscodec(): - encoding = sys.getfilesystemencoding() - errors = sys.getfilesystemencodeerrors() - - def fsencode(filename): - """Encode filename (an os.PathLike, bytes, or str) to the filesystem - encoding with 'surrogateescape' error handler, return bytes unchanged. - On Windows, use 'strict' error handler if the file system encoding is - 'mbcs' (which is the default encoding). - """ - filename = fspath(filename) # Does type-checking of `filename`. - if isinstance(filename, str): - return filename.encode(encoding, errors) - else: - return filename - - def fsdecode(filename): - """Decode filename (an os.PathLike, bytes, or str) from the filesystem - encoding with 'surrogateescape' error handler, return str unchanged. On - Windows, use 'strict' error handler if the file system encoding is - 'mbcs' (which is the default encoding). - """ - filename = fspath(filename) # Does type-checking of `filename`. - if isinstance(filename, bytes): - return filename.decode(encoding, errors) - else: - return filename - - return fsencode, fsdecode - -fsencode, fsdecode = _fscodec() -del _fscodec - -# Supply spawn*() (probably only for Unix) -if _exists("fork") and not _exists("spawnv") and _exists("execv"): - - P_WAIT = 0 - P_NOWAIT = P_NOWAITO = 1 - - __all__.extend(["P_WAIT", "P_NOWAIT", "P_NOWAITO"]) - - # XXX Should we support P_DETACH? I suppose it could fork()**2 - # and close the std I/O streams. Also, P_OVERLAY is the same - # as execv*()? - - def _spawnvef(mode, file, args, env, func): - # Internal helper; func is the exec*() function to use - if not isinstance(args, (tuple, list)): - raise TypeError('argv must be a tuple or a list') - if not args or not args[0]: - raise ValueError('argv first element cannot be empty') - pid = fork() - if not pid: - # Child - try: - if env is None: - func(file, args) - else: - func(file, args, env) - except: - _exit(127) - else: - # Parent - if mode == P_NOWAIT: - return pid # Caller is responsible for waiting! - while 1: - wpid, sts = waitpid(pid, 0) - if WIFSTOPPED(sts): - continue - - return waitstatus_to_exitcode(sts) - - def spawnv(mode, file, args): - """spawnv(mode, file, args) -> integer - -Execute file with arguments from args in a subprocess. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return _spawnvef(mode, file, args, None, execv) - - def spawnve(mode, file, args, env): - """spawnve(mode, file, args, env) -> integer - -Execute file with arguments from args in a subprocess with the -specified environment. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return _spawnvef(mode, file, args, env, execve) - - # Note: spawnvp[e] isn't currently supported on Windows - - def spawnvp(mode, file, args): - """spawnvp(mode, file, args) -> integer - -Execute file (which is looked for along $PATH) with arguments from -args in a subprocess. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return _spawnvef(mode, file, args, None, execvp) - - def spawnvpe(mode, file, args, env): - """spawnvpe(mode, file, args, env) -> integer - -Execute file (which is looked for along $PATH) with arguments from -args in a subprocess with the supplied environment. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return _spawnvef(mode, file, args, env, execvpe) - - - __all__.extend(["spawnv", "spawnve", "spawnvp", "spawnvpe"]) - - -if _exists("spawnv"): - # These aren't supplied by the basic Windows code - # but can be easily implemented in Python - - def spawnl(mode, file, *args): - """spawnl(mode, file, *args) -> integer - -Execute file with arguments from args in a subprocess. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return spawnv(mode, file, args) - - def spawnle(mode, file, *args): - """spawnle(mode, file, *args, env) -> integer - -Execute file with arguments from args in a subprocess with the -supplied environment. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - env = args[-1] - return spawnve(mode, file, args[:-1], env) - - - __all__.extend(["spawnl", "spawnle"]) - - -if _exists("spawnvp"): - # At the moment, Windows doesn't implement spawnvp[e], - # so it won't have spawnlp[e] either. - def spawnlp(mode, file, *args): - """spawnlp(mode, file, *args) -> integer - -Execute file (which is looked for along $PATH) with arguments from -args in a subprocess with the supplied environment. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - return spawnvp(mode, file, args) - - def spawnlpe(mode, file, *args): - """spawnlpe(mode, file, *args, env) -> integer - -Execute file (which is looked for along $PATH) with arguments from -args in a subprocess with the supplied environment. -If mode == P_NOWAIT return the pid of the process. -If mode == P_WAIT return the process's exit code if it exits normally; -otherwise return -SIG, where SIG is the signal that killed it. """ - env = args[-1] - return spawnvpe(mode, file, args[:-1], env) - - - __all__.extend(["spawnlp", "spawnlpe"]) - -# VxWorks has no user space shell provided. As a result, running -# command in a shell can't be supported. -if sys.platform != 'vxworks': - # Supply os.popen() - def popen(cmd, mode="r", buffering=-1): - if not isinstance(cmd, str): - raise TypeError("invalid cmd type (%s, expected string)" % type(cmd)) - if mode not in ("r", "w"): - raise ValueError("invalid mode %r" % mode) - if buffering == 0 or buffering is None: - raise ValueError("popen() does not support unbuffered streams") - import subprocess - if mode == "r": - proc = subprocess.Popen(cmd, - shell=True, text=True, - stdout=subprocess.PIPE, - bufsize=buffering) - return _wrap_close(proc.stdout, proc) - else: - proc = subprocess.Popen(cmd, - shell=True, text=True, - stdin=subprocess.PIPE, - bufsize=buffering) - return _wrap_close(proc.stdin, proc) - - # Helper for popen() -- a proxy for a file whose close waits for the process - class _wrap_close: - def __init__(self, stream, proc): - self._stream = stream - self._proc = proc - def close(self): - self._stream.close() - returncode = self._proc.wait() - if returncode == 0: - return None - if name == 'nt': - return returncode - else: - return returncode << 8 # Shift left to match old behavior - def __enter__(self): - return self - def __exit__(self, *args): - self.close() - def __getattr__(self, name): - return getattr(self._stream, name) - def __iter__(self): - return iter(self._stream) - - __all__.append("popen") - -# Supply os.fdopen() -def fdopen(fd, mode="r", buffering=-1, encoding=None, *args, **kwargs): - if not isinstance(fd, int): - raise TypeError("invalid fd type (%s, expected integer)" % type(fd)) - import io - if "b" not in mode: - encoding = io.text_encoding(encoding) - return io.open(fd, mode, buffering, encoding, *args, **kwargs) - - -# For testing purposes, make sure the function is available when the C -# implementation exists. -def _fspath(path): - """Return the path representation of a path-like object. - - If str or bytes is passed in, it is returned unchanged. Otherwise the - os.PathLike interface is used to get the path representation. If the - path representation is not str or bytes, TypeError is raised. If the - provided path is not str, bytes, or os.PathLike, TypeError is raised. - """ - if isinstance(path, (str, bytes)): - return path - - # Work from the object's type to match method resolution of other magic - # methods. - path_type = type(path) - try: - path_repr = path_type.__fspath__(path) - except AttributeError: - if hasattr(path_type, '__fspath__'): - raise - else: - raise TypeError("expected str, bytes or os.PathLike object, " - "not " + path_type.__name__) - except TypeError: - if path_type.__fspath__ is None: - raise TypeError("expected str, bytes or os.PathLike object, " - "not " + path_type.__name__) from None - else: - raise - if isinstance(path_repr, (str, bytes)): - return path_repr - else: - raise TypeError("expected {}.__fspath__() to return str or bytes, " - "not {}".format(path_type.__name__, - type(path_repr).__name__)) - -# If there is no C implementation, make the pure Python version the -# implementation as transparently as possible. -if not _exists('fspath'): - fspath = _fspath - fspath.__name__ = "fspath" - - -class PathLike(abc.ABC): - - """Abstract base class for implementing the file system path protocol.""" - - __slots__ = () - - @abc.abstractmethod - def __fspath__(self): - """Return the file system path representation of the object.""" - raise NotImplementedError - - @classmethod - def __subclasshook__(cls, subclass): - if cls is PathLike: - return _check_methods(subclass, '__fspath__') - return NotImplemented - - __class_getitem__ = classmethod(GenericAlias) - - -if name == 'nt': - class _AddedDllDirectory: - def __init__(self, path, cookie, remove_dll_directory): - self.path = path - self._cookie = cookie - self._remove_dll_directory = remove_dll_directory - def close(self): - self._remove_dll_directory(self._cookie) - self.path = None - def __enter__(self): - return self - def __exit__(self, *args): - self.close() - def __repr__(self): - if self.path: - return "<AddedDllDirectory({!r})>".format(self.path) - return "<AddedDllDirectory()>" - - def add_dll_directory(path): - """Add a path to the DLL search path. - - This search path is used when resolving dependencies for imported - extension modules (the module itself is resolved through sys.path), - and also by ctypes. - - Remove the directory by calling close() on the returned object or - using it in a with statement. - """ - import nt - cookie = nt._add_dll_directory(path) - return _AddedDllDirectory( - path, - cookie, - nt._remove_dll_directory - ) - - -if _exists('sched_getaffinity') and sys._get_cpu_count_config() < 0: - def process_cpu_count(): - """ - Get the number of CPUs of the current process. - - Return the number of logical CPUs usable by the calling thread of the - current process. Return None if indeterminable. - """ - return len(sched_getaffinity(0)) -else: - # Just an alias to cpu_count() (same docstring) - process_cpu_count = cpu_count diff --git a/Python314_4_x86_Template/Lib/pathlib/__init__.py b/Python314_4_x86_Template/Lib/pathlib/__init__.py deleted file mode 100644 index 0d763d1f0..000000000 --- a/Python314_4_x86_Template/Lib/pathlib/__init__.py +++ /dev/null @@ -1,1307 +0,0 @@ -"""Object-oriented filesystem paths. - -This module provides classes to represent abstract paths and concrete -paths with operations that have semantics appropriate for different -operating systems. -""" - -import io -import ntpath -import operator -import os -import posixpath -import sys -from errno import * -from glob import _StringGlobber, _no_recurse_symlinks -from itertools import chain -from stat import S_ISDIR, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO -from _collections_abc import Sequence - -try: - import pwd -except ImportError: - pwd = None -try: - import grp -except ImportError: - grp = None - -from pathlib._os import ( - PathInfo, DirEntryInfo, - ensure_different_files, ensure_distinct_paths, - copyfile2, copyfileobj, magic_open, copy_info, -) - - -__all__ = [ - "UnsupportedOperation", - "PurePath", "PurePosixPath", "PureWindowsPath", - "Path", "PosixPath", "WindowsPath", - ] - - -class UnsupportedOperation(NotImplementedError): - """An exception that is raised when an unsupported operation is attempted. - """ - pass - - -class _PathParents(Sequence): - """This object provides sequence-like access to the logical ancestors - of a path. Don't try to construct it yourself.""" - __slots__ = ('_path', '_drv', '_root', '_tail') - - def __init__(self, path): - self._path = path - self._drv = path.drive - self._root = path.root - self._tail = path._tail - - def __len__(self): - return len(self._tail) - - def __getitem__(self, idx): - if isinstance(idx, slice): - return tuple(self[i] for i in range(*idx.indices(len(self)))) - - if idx >= len(self) or idx < -len(self): - raise IndexError(idx) - if idx < 0: - idx += len(self) - return self._path._from_parsed_parts(self._drv, self._root, - self._tail[:-idx - 1]) - - def __repr__(self): - return "<{}.parents>".format(type(self._path).__name__) - - -class PurePath: - """Base class for manipulating paths without I/O. - - PurePath represents a filesystem path and offers operations which - don't imply any actual filesystem I/O. Depending on your system, - instantiating a PurePath will return either a PurePosixPath or a - PureWindowsPath object. You can also instantiate either of these classes - directly, regardless of your system. - """ - - __slots__ = ( - # The `_raw_paths` slot stores unjoined string paths. This is set in - # the `__init__()` method. - '_raw_paths', - - # The `_drv`, `_root` and `_tail_cached` slots store parsed and - # normalized parts of the path. They are set when any of the `drive`, - # `root` or `_tail` properties are accessed for the first time. The - # three-part division corresponds to the result of - # `os.path.splitroot()`, except that the tail is further split on path - # separators (i.e. it is a list of strings), and that the root and - # tail are normalized. - '_drv', '_root', '_tail_cached', - - # The `_str` slot stores the string representation of the path, - # computed from the drive, root and tail when `__str__()` is called - # for the first time. It's used to implement `_str_normcase` - '_str', - - # The `_str_normcase_cached` slot stores the string path with - # normalized case. It is set when the `_str_normcase` property is - # accessed for the first time. It's used to implement `__eq__()` - # `__hash__()`, and `_parts_normcase` - '_str_normcase_cached', - - # The `_parts_normcase_cached` slot stores the case-normalized - # string path after splitting on path separators. It's set when the - # `_parts_normcase` property is accessed for the first time. It's used - # to implement comparison methods like `__lt__()`. - '_parts_normcase_cached', - - # The `_hash` slot stores the hash of the case-normalized string - # path. It's set when `__hash__()` is called for the first time. - '_hash', - ) - parser = os.path - - def __new__(cls, *args, **kwargs): - """Construct a PurePath from one or several strings and or existing - PurePath objects. The strings and path objects are combined so as - to yield a canonicalized path, which is incorporated into the - new PurePath object. - """ - if cls is PurePath: - cls = PureWindowsPath if os.name == 'nt' else PurePosixPath - return object.__new__(cls) - - def __init__(self, *args): - paths = [] - for arg in args: - if isinstance(arg, PurePath): - if arg.parser is not self.parser: - # GH-103631: Convert separators for backwards compatibility. - paths.append(arg.as_posix()) - else: - paths.extend(arg._raw_paths) - else: - try: - path = os.fspath(arg) - except TypeError: - path = arg - if not isinstance(path, str): - raise TypeError( - "argument should be a str or an os.PathLike " - "object where __fspath__ returns a str, " - f"not {type(path).__name__!r}") - paths.append(path) - self._raw_paths = paths - - def with_segments(self, *pathsegments): - """Construct a new path object from any number of path-like objects. - Subclasses may override this method to customize how new path objects - are created from methods like `iterdir()`. - """ - return type(self)(*pathsegments) - - def joinpath(self, *pathsegments): - """Combine this path with one or several arguments, and return a - new path representing either a subpath (if all arguments are relative - paths) or a totally different path (if one of the arguments is - anchored). - """ - return self.with_segments(self, *pathsegments) - - def __truediv__(self, key): - try: - return self.with_segments(self, key) - except TypeError: - return NotImplemented - - def __rtruediv__(self, key): - try: - return self.with_segments(key, self) - except TypeError: - return NotImplemented - - def __reduce__(self): - return self.__class__, tuple(self._raw_paths) - - def __repr__(self): - return "{}({!r})".format(self.__class__.__name__, self.as_posix()) - - def __fspath__(self): - return str(self) - - def __bytes__(self): - """Return the bytes representation of the path. This is only - recommended to use under Unix.""" - return os.fsencode(self) - - @property - def _str_normcase(self): - # String with normalized case, for hashing and equality checks - try: - return self._str_normcase_cached - except AttributeError: - if self.parser is posixpath: - self._str_normcase_cached = str(self) - else: - self._str_normcase_cached = str(self).lower() - return self._str_normcase_cached - - def __hash__(self): - try: - return self._hash - except AttributeError: - self._hash = hash(self._str_normcase) - return self._hash - - def __eq__(self, other): - if not isinstance(other, PurePath): - return NotImplemented - return self._str_normcase == other._str_normcase and self.parser is other.parser - - @property - def _parts_normcase(self): - # Cached parts with normalized case, for comparisons. - try: - return self._parts_normcase_cached - except AttributeError: - self._parts_normcase_cached = self._str_normcase.split(self.parser.sep) - return self._parts_normcase_cached - - def __lt__(self, other): - if not isinstance(other, PurePath) or self.parser is not other.parser: - return NotImplemented - return self._parts_normcase < other._parts_normcase - - def __le__(self, other): - if not isinstance(other, PurePath) or self.parser is not other.parser: - return NotImplemented - return self._parts_normcase <= other._parts_normcase - - def __gt__(self, other): - if not isinstance(other, PurePath) or self.parser is not other.parser: - return NotImplemented - return self._parts_normcase > other._parts_normcase - - def __ge__(self, other): - if not isinstance(other, PurePath) or self.parser is not other.parser: - return NotImplemented - return self._parts_normcase >= other._parts_normcase - - def __str__(self): - """Return the string representation of the path, suitable for - passing to system calls.""" - try: - return self._str - except AttributeError: - self._str = self._format_parsed_parts(self.drive, self.root, - self._tail) or '.' - return self._str - - @classmethod - def _format_parsed_parts(cls, drv, root, tail): - if drv or root: - return drv + root + cls.parser.sep.join(tail) - elif tail and cls.parser.splitdrive(tail[0])[0]: - tail = ['.'] + tail - return cls.parser.sep.join(tail) - - def _from_parsed_parts(self, drv, root, tail): - path = self._from_parsed_string(self._format_parsed_parts(drv, root, tail)) - path._drv = drv - path._root = root - path._tail_cached = tail - return path - - def _from_parsed_string(self, path_str): - path = self.with_segments(path_str) - path._str = path_str or '.' - return path - - @classmethod - def _parse_path(cls, path): - if not path: - return '', '', [] - sep = cls.parser.sep - altsep = cls.parser.altsep - if altsep: - path = path.replace(altsep, sep) - drv, root, rel = cls.parser.splitroot(path) - if not root and drv.startswith(sep) and not drv.endswith(sep): - drv_parts = drv.split(sep) - if len(drv_parts) == 4 and drv_parts[2] not in '?.': - # e.g. //server/share - root = sep - elif len(drv_parts) == 6: - # e.g. //?/unc/server/share - root = sep - return drv, root, [x for x in rel.split(sep) if x and x != '.'] - - @classmethod - def _parse_pattern(cls, pattern): - """Parse a glob pattern to a list of parts. This is much like - _parse_path, except: - - - Rather than normalizing and returning the drive and root, we raise - NotImplementedError if either are present. - - If the path has no real parts, we raise ValueError. - - If the path ends in a slash, then a final empty part is added. - """ - drv, root, rel = cls.parser.splitroot(pattern) - if root or drv: - raise NotImplementedError("Non-relative patterns are unsupported") - sep = cls.parser.sep - altsep = cls.parser.altsep - if altsep: - rel = rel.replace(altsep, sep) - parts = [x for x in rel.split(sep) if x and x != '.'] - if not parts: - raise ValueError(f"Unacceptable pattern: {str(pattern)!r}") - elif rel.endswith(sep): - # GH-65238: preserve trailing slash in glob patterns. - parts.append('') - return parts - - def as_posix(self): - """Return the string representation of the path with forward (/) - slashes.""" - return str(self).replace(self.parser.sep, '/') - - @property - def _raw_path(self): - paths = self._raw_paths - if len(paths) == 1: - return paths[0] - elif paths: - # Join path segments from the initializer. - return self.parser.join(*paths) - else: - return '' - - @property - def drive(self): - """The drive prefix (letter or UNC path), if any.""" - try: - return self._drv - except AttributeError: - self._drv, self._root, self._tail_cached = self._parse_path(self._raw_path) - return self._drv - - @property - def root(self): - """The root of the path, if any.""" - try: - return self._root - except AttributeError: - self._drv, self._root, self._tail_cached = self._parse_path(self._raw_path) - return self._root - - @property - def _tail(self): - try: - return self._tail_cached - except AttributeError: - self._drv, self._root, self._tail_cached = self._parse_path(self._raw_path) - return self._tail_cached - - @property - def anchor(self): - """The concatenation of the drive and root, or ''.""" - return self.drive + self.root - - @property - def parts(self): - """An object providing sequence-like access to the - components in the filesystem path.""" - if self.drive or self.root: - return (self.drive + self.root,) + tuple(self._tail) - else: - return tuple(self._tail) - - @property - def parent(self): - """The logical parent of the path.""" - drv = self.drive - root = self.root - tail = self._tail - if not tail: - return self - return self._from_parsed_parts(drv, root, tail[:-1]) - - @property - def parents(self): - """A sequence of this path's logical parents.""" - # The value of this property should not be cached on the path object, - # as doing so would introduce a reference cycle. - return _PathParents(self) - - @property - def name(self): - """The final path component, if any.""" - tail = self._tail - if not tail: - return '' - return tail[-1] - - def with_name(self, name): - """Return a new path with the file name changed.""" - p = self.parser - if not name or p.sep in name or (p.altsep and p.altsep in name) or name == '.': - raise ValueError(f"Invalid name {name!r}") - tail = self._tail.copy() - if not tail: - raise ValueError(f"{self!r} has an empty name") - tail[-1] = name - return self._from_parsed_parts(self.drive, self.root, tail) - - def with_stem(self, stem): - """Return a new path with the stem changed.""" - suffix = self.suffix - if not suffix: - return self.with_name(stem) - elif not stem: - # If the suffix is non-empty, we can't make the stem empty. - raise ValueError(f"{self!r} has a non-empty suffix") - else: - return self.with_name(stem + suffix) - - def with_suffix(self, suffix): - """Return a new path with the file suffix changed. If the path - has no suffix, add given suffix. If the given suffix is an empty - string, remove the suffix from the path. - """ - stem = self.stem - if not stem: - # If the stem is empty, we can't make the suffix non-empty. - raise ValueError(f"{self!r} has an empty name") - elif suffix and not suffix.startswith('.'): - raise ValueError(f"Invalid suffix {suffix!r}") - else: - return self.with_name(stem + suffix) - - @property - def stem(self): - """The final path component, minus its last suffix.""" - name = self.name - i = name.rfind('.') - if i != -1: - stem = name[:i] - # Stem must contain at least one non-dot character. - if stem.lstrip('.'): - return stem - return name - - @property - def suffix(self): - """ - The final component's last suffix, if any. - - This includes the leading period. For example: '.txt' - """ - name = self.name.lstrip('.') - i = name.rfind('.') - if i != -1: - return name[i:] - return '' - - @property - def suffixes(self): - """ - A list of the final component's suffixes, if any. - - These include the leading periods. For example: ['.tar', '.gz'] - """ - return ['.' + ext for ext in self.name.lstrip('.').split('.')[1:]] - - def relative_to(self, other, *, walk_up=False): - """Return the relative path to another path identified by the passed - arguments. If the operation is not possible (because this is not - related to the other path), raise ValueError. - - The *walk_up* parameter controls whether `..` may be used to resolve - the path. - """ - if not hasattr(other, 'with_segments'): - other = self.with_segments(other) - for step, path in enumerate(chain([other], other.parents)): - if path == self or path in self.parents: - break - elif not walk_up: - raise ValueError(f"{str(self)!r} is not in the subpath of {str(other)!r}") - elif path.name == '..': - raise ValueError(f"'..' segment in {str(other)!r} cannot be walked") - else: - raise ValueError(f"{str(self)!r} and {str(other)!r} have different anchors") - parts = ['..'] * step + self._tail[len(path._tail):] - return self._from_parsed_parts('', '', parts) - - def is_relative_to(self, other): - """Return True if the path is relative to another path or False. - """ - if not hasattr(other, 'with_segments'): - other = self.with_segments(other) - return other == self or other in self.parents - - def is_absolute(self): - """True if the path is absolute (has both a root and, if applicable, - a drive).""" - if self.parser is posixpath: - # Optimization: work with raw paths on POSIX. - for path in self._raw_paths: - if path.startswith('/'): - return True - return False - return self.parser.isabs(self) - - def is_reserved(self): - """Return True if the path contains one of the special names reserved - by the system, if any.""" - import warnings - msg = ("pathlib.PurePath.is_reserved() is deprecated and scheduled " - "for removal in Python 3.15. Use os.path.isreserved() to " - "detect reserved paths on Windows.") - warnings._deprecated("pathlib.PurePath.is_reserved", msg, remove=(3, 15)) - if self.parser is ntpath: - return self.parser.isreserved(self) - return False - - def as_uri(self): - """Return the path as a URI.""" - import warnings - msg = ("pathlib.PurePath.as_uri() is deprecated and scheduled " - "for removal in Python 3.19. Use pathlib.Path.as_uri().") - warnings._deprecated("pathlib.PurePath.as_uri", msg, remove=(3, 19)) - if not self.is_absolute(): - raise ValueError("relative path can't be expressed as a file URI") - - drive = self.drive - if len(drive) == 2 and drive[1] == ':': - # It's a path on a local drive => 'file:///c:/a/b' - prefix = 'file:///' + drive - path = self.as_posix()[2:] - elif drive: - # It's a path on a network drive => 'file://host/share/a/b' - prefix = 'file:' - path = self.as_posix() - else: - # It's a posix path => 'file:///etc/hosts' - prefix = 'file://' - path = str(self) - from urllib.parse import quote_from_bytes - return prefix + quote_from_bytes(os.fsencode(path)) - - def full_match(self, pattern, *, case_sensitive=None): - """ - Return True if this path matches the given glob-style pattern. The - pattern is matched against the entire path. - """ - if not hasattr(pattern, 'with_segments'): - pattern = self.with_segments(pattern) - if case_sensitive is None: - case_sensitive = self.parser is posixpath - - # The string representation of an empty path is a single dot ('.'). Empty - # paths shouldn't match wildcards, so we change it to the empty string. - path = str(self) if self.parts else '' - pattern = str(pattern) if pattern.parts else '' - globber = _StringGlobber(self.parser.sep, case_sensitive, recursive=True) - return globber.compile(pattern)(path) is not None - - def match(self, path_pattern, *, case_sensitive=None): - """ - Return True if this path matches the given pattern. If the pattern is - relative, matching is done from the right; otherwise, the entire path - is matched. The recursive wildcard '**' is *not* supported by this - method. - """ - if not hasattr(path_pattern, 'with_segments'): - path_pattern = self.with_segments(path_pattern) - if case_sensitive is None: - case_sensitive = self.parser is posixpath - path_parts = self.parts[::-1] - pattern_parts = path_pattern.parts[::-1] - if not pattern_parts: - raise ValueError("empty pattern") - if len(path_parts) < len(pattern_parts): - return False - if len(path_parts) > len(pattern_parts) and path_pattern.anchor: - return False - globber = _StringGlobber(self.parser.sep, case_sensitive) - for path_part, pattern_part in zip(path_parts, pattern_parts): - match = globber.compile(pattern_part) - if match(path_part) is None: - return False - return True - -# Subclassing os.PathLike makes isinstance() checks slower, -# which in turn makes Path construction slower. Register instead! -os.PathLike.register(PurePath) - - -class PurePosixPath(PurePath): - """PurePath subclass for non-Windows systems. - - On a POSIX system, instantiating a PurePath should return this object. - However, you can also instantiate it directly on any system. - """ - parser = posixpath - __slots__ = () - - -class PureWindowsPath(PurePath): - """PurePath subclass for Windows systems. - - On a Windows system, instantiating a PurePath should return this object. - However, you can also instantiate it directly on any system. - """ - parser = ntpath - __slots__ = () - - -class Path(PurePath): - """PurePath subclass that can make system calls. - - Path represents a filesystem path but unlike PurePath, also offers - methods to do system calls on path objects. Depending on your system, - instantiating a Path will return either a PosixPath or a WindowsPath - object. You can also instantiate a PosixPath or WindowsPath directly, - but cannot instantiate a WindowsPath on a POSIX system or vice versa. - """ - __slots__ = ('_info',) - - def __new__(cls, *args, **kwargs): - if cls is Path: - cls = WindowsPath if os.name == 'nt' else PosixPath - return object.__new__(cls) - - @property - def info(self): - """ - A PathInfo object that exposes the file type and other file attributes - of this path. - """ - try: - return self._info - except AttributeError: - self._info = PathInfo(self) - return self._info - - def stat(self, *, follow_symlinks=True): - """ - Return the result of the stat() system call on this path, like - os.stat() does. - """ - return os.stat(self, follow_symlinks=follow_symlinks) - - def lstat(self): - """ - Like stat(), except if the path points to a symlink, the symlink's - status information is returned, rather than its target's. - """ - return os.lstat(self) - - def exists(self, *, follow_symlinks=True): - """ - Whether this path exists. - - This method normally follows symlinks; to check whether a symlink exists, - add the argument follow_symlinks=False. - """ - if follow_symlinks: - return os.path.exists(self) - return os.path.lexists(self) - - def is_dir(self, *, follow_symlinks=True): - """ - Whether this path is a directory. - """ - if follow_symlinks: - return os.path.isdir(self) - try: - return S_ISDIR(self.stat(follow_symlinks=follow_symlinks).st_mode) - except (OSError, ValueError): - return False - - def is_file(self, *, follow_symlinks=True): - """ - Whether this path is a regular file (also True for symlinks pointing - to regular files). - """ - if follow_symlinks: - return os.path.isfile(self) - try: - return S_ISREG(self.stat(follow_symlinks=follow_symlinks).st_mode) - except (OSError, ValueError): - return False - - def is_mount(self): - """ - Check if this path is a mount point - """ - return os.path.ismount(self) - - def is_symlink(self): - """ - Whether this path is a symbolic link. - """ - return os.path.islink(self) - - def is_junction(self): - """ - Whether this path is a junction. - """ - return os.path.isjunction(self) - - def is_block_device(self): - """ - Whether this path is a block device. - """ - try: - return S_ISBLK(self.stat().st_mode) - except (OSError, ValueError): - return False - - def is_char_device(self): - """ - Whether this path is a character device. - """ - try: - return S_ISCHR(self.stat().st_mode) - except (OSError, ValueError): - return False - - def is_fifo(self): - """ - Whether this path is a FIFO. - """ - try: - return S_ISFIFO(self.stat().st_mode) - except (OSError, ValueError): - return False - - def is_socket(self): - """ - Whether this path is a socket. - """ - try: - return S_ISSOCK(self.stat().st_mode) - except (OSError, ValueError): - return False - - def samefile(self, other_path): - """Return whether other_path is the same or not as this file - (as returned by os.path.samefile()). - """ - st = self.stat() - try: - other_st = other_path.stat() - except AttributeError: - other_st = self.with_segments(other_path).stat() - return (st.st_ino == other_st.st_ino and - st.st_dev == other_st.st_dev) - - def open(self, mode='r', buffering=-1, encoding=None, - errors=None, newline=None): - """ - Open the file pointed to by this path and return a file object, as - the built-in open() function does. - """ - if "b" not in mode: - encoding = io.text_encoding(encoding) - return io.open(self, mode, buffering, encoding, errors, newline) - - def read_bytes(self): - """ - Open the file in bytes mode, read it, and close the file. - """ - with self.open(mode='rb', buffering=0) as f: - return f.read() - - def read_text(self, encoding=None, errors=None, newline=None): - """ - Open the file in text mode, read it, and close the file. - """ - # Call io.text_encoding() here to ensure any warning is raised at an - # appropriate stack level. - encoding = io.text_encoding(encoding) - with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f: - return f.read() - - def write_bytes(self, data): - """ - Open the file in bytes mode, write to it, and close the file. - """ - # type-check for the buffer interface before truncating the file - view = memoryview(data) - with self.open(mode='wb') as f: - return f.write(view) - - def write_text(self, data, encoding=None, errors=None, newline=None): - """ - Open the file in text mode, write to it, and close the file. - """ - # Call io.text_encoding() here to ensure any warning is raised at an - # appropriate stack level. - encoding = io.text_encoding(encoding) - if not isinstance(data, str): - raise TypeError('data must be str, not %s' % - data.__class__.__name__) - with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f: - return f.write(data) - - _remove_leading_dot = operator.itemgetter(slice(2, None)) - _remove_trailing_slash = operator.itemgetter(slice(-1)) - - def _filter_trailing_slash(self, paths): - sep = self.parser.sep - anchor_len = len(self.anchor) - for path_str in paths: - if len(path_str) > anchor_len and path_str[-1] == sep: - path_str = path_str[:-1] - yield path_str - - def _from_dir_entry(self, dir_entry, path_str): - path = self.with_segments(path_str) - path._str = path_str - path._info = DirEntryInfo(dir_entry) - return path - - def iterdir(self): - """Yield path objects of the directory contents. - - The children are yielded in arbitrary order, and the - special entries '.' and '..' are not included. - """ - root_dir = str(self) - with os.scandir(root_dir) as scandir_it: - entries = list(scandir_it) - if root_dir == '.': - return (self._from_dir_entry(e, e.name) for e in entries) - else: - return (self._from_dir_entry(e, e.path) for e in entries) - - def glob(self, pattern, *, case_sensitive=None, recurse_symlinks=False): - """Iterate over this subtree and yield all existing files (of any - kind, including directories) matching the given relative pattern. - """ - sys.audit("pathlib.Path.glob", self, pattern) - if case_sensitive is None: - case_sensitive = self.parser is posixpath - case_pedantic = False - else: - # The user has expressed a case sensitivity choice, but we don't - # know the case sensitivity of the underlying filesystem, so we - # must use scandir() for everything, including non-wildcard parts. - case_pedantic = True - parts = self._parse_pattern(pattern) - recursive = True if recurse_symlinks else _no_recurse_symlinks - globber = _StringGlobber(self.parser.sep, case_sensitive, case_pedantic, recursive) - select = globber.selector(parts[::-1]) - root = str(self) - paths = select(self.parser.join(root, '')) - - # Normalize results - if root == '.': - paths = map(self._remove_leading_dot, paths) - if parts[-1] == '': - paths = map(self._remove_trailing_slash, paths) - elif parts[-1] == '**': - paths = self._filter_trailing_slash(paths) - paths = map(self._from_parsed_string, paths) - return paths - - def rglob(self, pattern, *, case_sensitive=None, recurse_symlinks=False): - """Recursively yield all existing files (of any kind, including - directories) matching the given relative pattern, anywhere in - this subtree. - """ - sys.audit("pathlib.Path.rglob", self, pattern) - pattern = self.parser.join('**', pattern) - return self.glob(pattern, case_sensitive=case_sensitive, recurse_symlinks=recurse_symlinks) - - def walk(self, top_down=True, on_error=None, follow_symlinks=False): - """Walk the directory tree from this directory, similar to os.walk().""" - sys.audit("pathlib.Path.walk", self, on_error, follow_symlinks) - root_dir = str(self) - if not follow_symlinks: - follow_symlinks = os._walk_symlinks_as_files - results = os.walk(root_dir, top_down, on_error, follow_symlinks) - for path_str, dirnames, filenames in results: - if root_dir == '.': - path_str = path_str[2:] - yield self._from_parsed_string(path_str), dirnames, filenames - - def absolute(self): - """Return an absolute version of this path - No normalization or symlink resolution is performed. - - Use resolve() to resolve symlinks and remove '..' segments. - """ - if self.is_absolute(): - return self - if self.root: - drive = os.path.splitroot(os.getcwd())[0] - return self._from_parsed_parts(drive, self.root, self._tail) - if self.drive: - # There is a CWD on each drive-letter drive. - cwd = os.path.abspath(self.drive) - else: - cwd = os.getcwd() - if not self._tail: - # Fast path for "empty" paths, e.g. Path("."), Path("") or Path(). - # We pass only one argument to with_segments() to avoid the cost - # of joining, and we exploit the fact that getcwd() returns a - # fully-normalized string by storing it in _str. This is used to - # implement Path.cwd(). - return self._from_parsed_string(cwd) - drive, root, rel = os.path.splitroot(cwd) - if not rel: - return self._from_parsed_parts(drive, root, self._tail) - tail = rel.split(self.parser.sep) - tail.extend(self._tail) - return self._from_parsed_parts(drive, root, tail) - - @classmethod - def cwd(cls): - """Return a new path pointing to the current working directory.""" - cwd = os.getcwd() - path = cls(cwd) - path._str = cwd # getcwd() returns a normalized path - return path - - def resolve(self, strict=False): - """ - Make the path absolute, resolving all symlinks on the way and also - normalizing it. - """ - - return self.with_segments(os.path.realpath(self, strict=strict)) - - if pwd: - def owner(self, *, follow_symlinks=True): - """ - Return the login name of the file owner. - """ - uid = self.stat(follow_symlinks=follow_symlinks).st_uid - return pwd.getpwuid(uid).pw_name - else: - def owner(self, *, follow_symlinks=True): - """ - Return the login name of the file owner. - """ - f = f"{type(self).__name__}.owner()" - raise UnsupportedOperation(f"{f} is unsupported on this system") - - if grp: - def group(self, *, follow_symlinks=True): - """ - Return the group name of the file gid. - """ - gid = self.stat(follow_symlinks=follow_symlinks).st_gid - return grp.getgrgid(gid).gr_name - else: - def group(self, *, follow_symlinks=True): - """ - Return the group name of the file gid. - """ - f = f"{type(self).__name__}.group()" - raise UnsupportedOperation(f"{f} is unsupported on this system") - - if hasattr(os, "readlink"): - def readlink(self): - """ - Return the path to which the symbolic link points. - """ - return self.with_segments(os.readlink(self)) - else: - def readlink(self): - """ - Return the path to which the symbolic link points. - """ - f = f"{type(self).__name__}.readlink()" - raise UnsupportedOperation(f"{f} is unsupported on this system") - - def touch(self, mode=0o666, exist_ok=True): - """ - Create this file with the given access mode, if it doesn't exist. - """ - - if exist_ok: - # First try to bump modification time - # Implementation note: GNU touch uses the UTIME_NOW option of - # the utimensat() / futimens() functions. - try: - os.utime(self, None) - except OSError: - # Avoid exception chaining - pass - else: - return - flags = os.O_CREAT | os.O_WRONLY - if not exist_ok: - flags |= os.O_EXCL - fd = os.open(self, flags, mode) - os.close(fd) - - def mkdir(self, mode=0o777, parents=False, exist_ok=False): - """ - Create a new directory at this given path. - """ - try: - os.mkdir(self, mode) - except FileNotFoundError: - if not parents or self.parent == self: - raise - self.parent.mkdir(parents=True, exist_ok=True) - self.mkdir(mode, parents=False, exist_ok=exist_ok) - except OSError: - # Cannot rely on checking for EEXIST, since the operating system - # could give priority to other errors like EACCES or EROFS - if not exist_ok or not self.is_dir(): - raise - - def chmod(self, mode, *, follow_symlinks=True): - """ - Change the permissions of the path, like os.chmod(). - """ - os.chmod(self, mode, follow_symlinks=follow_symlinks) - - def lchmod(self, mode): - """ - Like chmod(), except if the path points to a symlink, the symlink's - permissions are changed, rather than its target's. - """ - self.chmod(mode, follow_symlinks=False) - - def unlink(self, missing_ok=False): - """ - Remove this file or link. - If the path is a directory, use rmdir() instead. - """ - try: - os.unlink(self) - except FileNotFoundError: - if not missing_ok: - raise - - def rmdir(self): - """ - Remove this directory. The directory must be empty. - """ - os.rmdir(self) - - def _delete(self): - """ - Delete this file or directory (including all sub-directories). - """ - if self.is_symlink() or self.is_junction(): - self.unlink() - elif self.is_dir(): - # Lazy import to improve module import time - import shutil - shutil.rmtree(self) - else: - self.unlink() - - def rename(self, target): - """ - Rename this path to the target path. - - The target path may be absolute or relative. Relative paths are - interpreted relative to the current working directory, *not* the - directory of the Path object. - - Returns the new Path instance pointing to the target path. - """ - os.rename(self, target) - if not hasattr(target, 'with_segments'): - target = self.with_segments(target) - return target - - def replace(self, target): - """ - Rename this path to the target path, overwriting if that path exists. - - The target path may be absolute or relative. Relative paths are - interpreted relative to the current working directory, *not* the - directory of the Path object. - - Returns the new Path instance pointing to the target path. - """ - os.replace(self, target) - if not hasattr(target, 'with_segments'): - target = self.with_segments(target) - return target - - def copy(self, target, **kwargs): - """ - Recursively copy this file or directory tree to the given destination. - """ - if not hasattr(target, 'with_segments'): - target = self.with_segments(target) - ensure_distinct_paths(self, target) - target._copy_from(self, **kwargs) - return target.joinpath() # Empty join to ensure fresh metadata. - - def copy_into(self, target_dir, **kwargs): - """ - Copy this file or directory tree into the given existing directory. - """ - name = self.name - if not name: - raise ValueError(f"{self!r} has an empty name") - elif hasattr(target_dir, 'with_segments'): - target = target_dir / name - else: - target = self.with_segments(target_dir, name) - return self.copy(target, **kwargs) - - def _copy_from(self, source, follow_symlinks=True, preserve_metadata=False): - """ - Recursively copy the given path to this path. - """ - if not follow_symlinks and source.info.is_symlink(): - self._copy_from_symlink(source, preserve_metadata) - elif source.info.is_dir(): - children = source.iterdir() - os.mkdir(self) - for child in children: - self.joinpath(child.name)._copy_from( - child, follow_symlinks, preserve_metadata) - if preserve_metadata: - copy_info(source.info, self) - else: - self._copy_from_file(source, preserve_metadata) - - def _copy_from_file(self, source, preserve_metadata=False): - ensure_different_files(source, self) - with magic_open(source, 'rb') as source_f: - with open(self, 'wb') as target_f: - copyfileobj(source_f, target_f) - if preserve_metadata: - copy_info(source.info, self) - - if copyfile2: - # Use fast OS routine for local file copying where available. - _copy_from_file_fallback = _copy_from_file - def _copy_from_file(self, source, preserve_metadata=False): - try: - source = os.fspath(source) - except TypeError: - pass - else: - copyfile2(source, str(self)) - return - self._copy_from_file_fallback(source, preserve_metadata) - - if os.name == 'nt': - # If a directory-symlink is copied *before* its target, then - # os.symlink() incorrectly creates a file-symlink on Windows. Avoid - # this by passing *target_is_dir* to os.symlink() on Windows. - def _copy_from_symlink(self, source, preserve_metadata=False): - os.symlink(str(source.readlink()), self, source.info.is_dir()) - if preserve_metadata: - copy_info(source.info, self, follow_symlinks=False) - else: - def _copy_from_symlink(self, source, preserve_metadata=False): - os.symlink(str(source.readlink()), self) - if preserve_metadata: - copy_info(source.info, self, follow_symlinks=False) - - def move(self, target): - """ - Recursively move this file or directory tree to the given destination. - """ - # Use os.replace() if the target is os.PathLike and on the same FS. - try: - target = self.with_segments(target) - except TypeError: - pass - else: - ensure_different_files(self, target) - try: - os.replace(self, target) - except OSError as err: - if err.errno != EXDEV: - raise - else: - return target.joinpath() # Empty join to ensure fresh metadata. - # Fall back to copy+delete. - target = self.copy(target, follow_symlinks=False, preserve_metadata=True) - self._delete() - return target - - def move_into(self, target_dir): - """ - Move this file or directory tree into the given existing directory. - """ - name = self.name - if not name: - raise ValueError(f"{self!r} has an empty name") - elif hasattr(target_dir, 'with_segments'): - target = target_dir / name - else: - target = self.with_segments(target_dir, name) - return self.move(target) - - if hasattr(os, "symlink"): - def symlink_to(self, target, target_is_directory=False): - """ - Make this path a symlink pointing to the target path. - Note the order of arguments (link, target) is the reverse of os.symlink. - """ - os.symlink(target, self, target_is_directory) - else: - def symlink_to(self, target, target_is_directory=False): - """ - Make this path a symlink pointing to the target path. - Note the order of arguments (link, target) is the reverse of os.symlink. - """ - f = f"{type(self).__name__}.symlink_to()" - raise UnsupportedOperation(f"{f} is unsupported on this system") - - if hasattr(os, "link"): - def hardlink_to(self, target): - """ - Make this path a hard link pointing to the same file as *target*. - - Note the order of arguments (self, target) is the reverse of os.link's. - """ - os.link(target, self) - else: - def hardlink_to(self, target): - """ - Make this path a hard link pointing to the same file as *target*. - - Note the order of arguments (self, target) is the reverse of os.link's. - """ - f = f"{type(self).__name__}.hardlink_to()" - raise UnsupportedOperation(f"{f} is unsupported on this system") - - def expanduser(self): - """ Return a new path with expanded ~ and ~user constructs - (as returned by os.path.expanduser) - """ - if (not (self.drive or self.root) and - self._tail and self._tail[0][:1] == '~'): - homedir = os.path.expanduser(self._tail[0]) - if homedir[:1] == "~": - raise RuntimeError("Could not determine home directory.") - drv, root, tail = self._parse_path(homedir) - return self._from_parsed_parts(drv, root, tail + self._tail[1:]) - - return self - - @classmethod - def home(cls): - """Return a new path pointing to expanduser('~'). - """ - homedir = os.path.expanduser("~") - if homedir == "~": - raise RuntimeError("Could not determine home directory.") - return cls(homedir) - - def as_uri(self): - """Return the path as a URI.""" - if not self.is_absolute(): - raise ValueError("relative paths can't be expressed as file URIs") - from urllib.request import pathname2url - return pathname2url(str(self), add_scheme=True) - - @classmethod - def from_uri(cls, uri): - """Return a new path from the given 'file' URI.""" - from urllib.error import URLError - from urllib.request import url2pathname - try: - path = cls(url2pathname(uri, require_scheme=True)) - except URLError as exc: - raise ValueError(exc.reason) from None - if not path.is_absolute(): - raise ValueError(f"URI is not absolute: {uri!r}") - return path - - -class PosixPath(Path, PurePosixPath): - """Path subclass for non-Windows systems. - - On a POSIX system, instantiating a Path should return this object. - """ - __slots__ = () - - if os.name == 'nt': - def __new__(cls, *args, **kwargs): - raise UnsupportedOperation( - f"cannot instantiate {cls.__name__!r} on your system") - -class WindowsPath(Path, PureWindowsPath): - """Path subclass for Windows systems. - - On a Windows system, instantiating a Path should return this object. - """ - __slots__ = () - - if os.name != 'nt': - def __new__(cls, *args, **kwargs): - raise UnsupportedOperation( - f"cannot instantiate {cls.__name__!r} on your system") diff --git a/Python314_4_x86_Template/Lib/pathlib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/pathlib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 4a5dd0bfab0eb2c602636ecaf9eb0ed59c809896..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61719 zcmd?S3w&GGc_(=BA^{L2KmvS;FYqNkM1hh>y<euDq#l$E(WGTdrYQoVU{NG<0a_9r z+uF?Rma-j-ik%UixE0m7HPt3#dXui@CY@MLr*)^@DIm}Wjk05Ro8R`A{mtyiqT4v? z?9TqbbM6b^r6gz4ZD#jMJh=DVbI(2ZobP<+d!H3K*>(ZPxaGspogWIq-_nJAWJo6q zpBn_>g5Vb-!V`ku&|!!e*sn2SWWT0}iT#=*X7+1|SlDkyBm=+3j?A^j3VPDiVQsfX zZ0+`lon4zdvf3RH2RpZPWVh!;a@w5{XS*xnYR`@2w&z9i+T9U1yPwhFY0r=3R|qA% z4F!<`>8vPHgt{|3irbe(mbI5eO4>^!rR`;rvi9;wd3!~qqTL(uwpT_fD+Hh5FFIt1 zROJhmg5Oyv_^rpQTTT2cBQ-47h1}fZ`ATjr%gsZst<@-%Tz=eqxKr*V_4n|@>bZP& ze0eMSj*bd})#OG^cI3)$ZD6?`<YsAd8(D5Xavhr76)d*^x!K289B*hf^O_?~EWZ%> zImmBR@>lu|)q+<zUYH>SFqWlggWnJ-C=(9+R!G=vDicD6MR$vEcUr#NP(1eDp%YI9 z`y(rd#ZYi45)61xh6aP-^WjMFjCZ6jaw_bz+q+JM!rn8(fziRBcSIb1Iur<oz5RoI z;V^z9!(K5sA_l{F+}n2|91;8aBm7Zs-%!BYKRnbg1|vZ`tIc~h6glM`9tnzlk<joE z9zWF=@t*2?I_M1t&-4vNLj7TH-w56^B8K`RLGQ_7(HjVzJQ);Gzg>E8Xu!*xh}LyB z7?Os@24ga(_eewx4Grua96oU(C?-9<L&Lpduzyqx2YbWk&kTl!PKQz0(toNiG}Mrh z%skTDab#DApP%@5?@d}M=g6U*`+3%m1JcRPc0a$jr(@3{RAD_5{K{x>s6W_XO<E75 zmpX<{4ksPELgMbBh<Kh|6$FREqhhdEX?!p1*<`+wAC82E`XjxpUy`=|;gR!HVofqj zJ{>;sRMLK?Zy?m)iw_^-WqL#OF3%&VePm=<#E>15dlPNJ8>v0XY<4yr4xM9{PP*&~ z4F!hJhFON0rMAOLi7d_Cehzm$mB3qAScdBh!f_#D0HQEHu_9suu$leFh{bQJ78=ZA zJ_?K-XdChd&-DjKXn6VP0(iu}P#Cav_Ec~PK;a!#8?VBG7v=gQfV&ZVlh5wOab4)d zI9Ypphx*P0dwY}i-d+xdICu2+er2?8P`cynMfZx~2nIQbVed_5_Vxyb`*D)r+Z&Dm z*!p`>xfnVz8VQDbd&M#|c7eVyIlObzu}8u|F?_5q5ENH$+_>u4*<tbYF~A_rjPSAk z!Qs)siN0`fWoRfAL4x`Q2ZQ3u)yEE>kDMAFYFXXd+uD0>!@Axsw0;m^+Z#DEa_m6p z#IX?!#vp!sF>IkoZ?A9UJnJWxtibETgr5H=;WMMbV*OjQRjk3Ke*Zs&JAK*_SRFAH z2*Whx&3-FJ!B{9nGW;f_nSL`;tKWju=Ff=OyM;)WKNF*5L%-3`AMT_16dn`V+y<cG zOVzm@mcV=EVCZzv+t=S846}(IITiE{4g((h1~H7tjSP!n`|wF`ADi$#uXoq*P+i1} zIY4*;Qy=JH6g7t;-t)sW5eHBD`Xw}r&k+PV2dcC#oWsclp~p2ux$NjR9M+bUbA=%# z7bWB+Ou9=y-NKMrzC;PO{K?n+7bPrmj$f!2t{Vu<ENmtwEdep~bTDb|4Tw)C&EoKI z1b3vLNMC61x-n^{??{?yY{S%;<;%rd{1Bk>Q3lXyI@u>@uS215J(3H;Tz>IO_Bl_{ zm3^1@jhkPx;rhza%SUl)r_;wSKQ?ZD+0LOso`HCf`il2g6RYN!a<5y^>n(Y4susis zJOC_d8VnAJ%{aeq5Le?TOf^XD$DF}k%o$Hw^I7f|D(ymYL6~>uO|)Lwba~T@&quB0 zyp_tRpak_f8`b5=C79K;({M~FDKEHnC{9P<E3}9mQ$}yI;bG%GA%Je9rOk(tZ2|5n z6b7xwGWio2ZNp)ke6Ic;%aYHJ2y!3Dzm<Yna0#tafjwwvr*S{v!6uXoYcr}rI{Z_- zM}B)XTCCT)4L=fufjs(B{re5V2HXueSPx~(U)ODr>pf-Y2GPdKxR<V_NqJHbMhr)U z!#Q$I>hIxP^;|wfNxVJ%K&~e}PY{q>usGL`_B9Ak7@9Qm(ICiV5-^joUx8&jO>o|V zzXh5zTMShg{|iEwum|l$yN%t3CR&c9<D788QX%XIY|<Fgj9zOB85qPfJl|kS8hxvh zh7gB%s(ZQj0-v+CEd#-!;JFcTTXIDj)DHwBAuLBg+FJ&Pf%3xJd`jUq)DbR5^2N{4 zuxL?7tg(IS;YrVA-_^oz6~-Iee-S1y{uc$sz%7oXJrrik25@H55*`fEPh@mt5I<ty z&_FPmiM1KIVUfN!Y3~>c1kddj#bHrwq>Q}Ylj86hASj^F0R2S5B4Gg0M+r^m1|$2p zq$w0Q$B@!VX;NqP_9`EeEL!Rlx1);ipCb7JvpXw)qW|@^iLA<7S(Tr-i(XwjTh#I0 z+8OsdC2yDf=*WAXA0Cab-g~RDJzmstWo^{aF>#Lqad!twe43T>YV}0mm4?}@lF9HJ z{nIty2~9mVThTn9S2}s*mFB3UaxN=pBKM{Ba}MXLEfbMfHh$<R9p5?UbYB{~IF@iW z#hgvkU2h$|e)NX<$M$#ab1PTB_1N{tZrE;A-|)O=_@koe${h<PgKL-JwqUUBGAzcN zgz*_pdIBfJ>>Sp@8}jHlMzFyS;8PmFv_qb4dh3pS53p<)b8LC$Ss%uU7TIkL=41xw z*fV{Rq&adP)EbScSWd}$Bw7@VC4{JHMz^FcAv}8@m9IjACB#{laMr|}HE(oH*Sytu zy)j<9Hc`7RR=X|k+#a=VXI%iYjKK+eqXI0Q$YwcdFy!Eks-Tv6DXFA{UYE3ij2aw{ z5a~qoQrtjEJ0%AxsYa5_?d@e;0U$Zj9~>O)?Y(YDW@|E02X*>GZ0d=G_F2N#AtHvp z_zip)kwWV~b+ugRxMMb3ymuT1OU0cGn`M{b=LH7KLo~oh+1IhB`|+T1$ZN|&Db7-; zrA`gCv@T*fo}q{PKr;~)Wn)y7ol#L)jEZvjGmxL{&qSKzw<2}=ZAe{yJJMW#7Sg=q zZoi{YSy>_;e>QUS{W(Yra1RWryy`>>{a{2RMgCl*#eT4#k!60cj*${SSj9-`@iIS{ zL#1@NA53AS!VeZO;>Eop&Am!o7i+Go{L4_P8t*I7<ksN2RC8U6>oU#ta$J{duIq4J zp}DTdwO4c9fa^-lbtA5;G}kL|U9Gup^4FkMEB&=deg5T0n^B@pQ(_ga>owP_aowP~ zUgK}{uV^;-o3Q>HBQ5@wsH4^IL%P=AjC7rU71H(o)&4ao)xt_`kgi(U)kgo?$R<$2 zoBeArN7swAO7#T*kUK!zbAFbwn_xpjBcmYW!Avr`Hq5xz;n9e<qxlf{VVTQP8DDTN z>5MaDeus&14XZp3YC09_KV=UvGC2fh;XKOWuRj7_Mq35F3FLGTd|!at0cMIQXo>G_ zvh(F60v?&}_IZ^yoed2RqG6Fy5sVm^?Vu>%m3cicSn59Z5gMM)%Xt92^XTxXw;xOz z7QA7v`kJ6z8_0dsD)(40Y!8IMWk&|jH{rDdePRIe1AOvHZF_z8MXS405F86%!w_5m zy>(2Pz@YblZ$JggGg%i8`wbf&1vLaJ5G55J;GpH0Rjz16IA)j64{N9%Ij>ux3yJm^ zOYBs56-{5#qKlpnQjdj$PeW)i=mkfE9>;(~wt?*6xe)R311eDPjtrwGyTC4Kixa~j z^)sFq0dvD=PJm$zc+t~+VLMo+^P%8i00V{r7#<=%D>R1N^k5SQ9paK9HW(Jc`-9O8 z-~x|fK<q=ovnmuwqiIhXhawG`4Ahgx;c(JS{IXbtUJwhBBr|wHVwdqe5Vk34>K{b8 zK5-zN%s73Pe#0gdUEbKl(e_b#&LzVem>c%sv&an-4!<DWb_iI+>tEbHUt9NP&$XTz z^BcY2Z2r;8@tyO|{7cVWd~UKo?yQPhs}?WPMAqZay6}HsT3!IjKLS$ECG3fT>@#VY z2$KpPi<k(s4@9&{Z~4|=)b|-U$aNbJ)BDp7)TF~;$f#Lf^g(`hff+F#Ru~Vp8q@%? zJ^j!;3AU$1IHr)|hl$BbJHV8f<R?bVnw~Hp^T<Whdt#uPO%JdG{O}9MXw2EsZI)|0 zOu&$KY%)58HAcAvSPT80QR=|g$2sxc;~i3_BbQDdQy2$TO4(%^F+&a+P~?!tv2Fm` z=oyep-tej6QOto85IoTAVc2TOI~?{AJ#>Hs5*%hpnuIw7!B3dxM{lo$^#~W^xhC(> zaKzi$kS#uhuj4ZygAveTG6NDu;MJtHFWfsqXfc@)JQtxHd#~7cmI(sFVmF=x;l^rD z+PXlvF^W8CLha%Ks+35$1`8v+MM7ao3$-MiG~r{!HOL4P)w#S8qAWglh;&NkYUU1? z7yJel{Rt9Kb*{W|%U`(*X|fbgR=<8O;jF*qte<li5WhXu_2%Q(9*?_Med;N`a^UiT zDfgSD*Gj)r{*gzMQ+|!EZ<|fI74s!!S2uoZ<J6IFZ=2Zld4^C_HC6LnQ=+ixR$<fp zvg+GLV{ye#E2^h<eS0iXu_lK9<!f(SjK%90Os0|zw*^!FhTB#lx8RE7vSYIABUjaD z)q<z!c8yTtecAcN=ea^r<>!JSw_>iO{2RM&n{akFOyhlXeZkHu<4>xxcdoJgWVHcl z3jQ~v2&S52!OOl`1I`Lo2EZGLQ)krl_qEuW@Emos3<eBI(;_-FdIoY|T6yR;mtD!o z*nVX6ge<W>(|6uG3}h}sjt$I7vh5(mcmXD|8ih>j43Mt()bLqv+N;8LhP1^XL%i(0 z{K>GF3Cf-XyC`BctZ#VIXKyet7`ZO-Wex@z!2tsCFqaxNGMGqalSsTbEZs^LDA19T z|C{KkFiqtP!sm9u<(b&^(%9sdn6o}=tzV2sl@2B<pBC7|_)R}Z(BT7He#o#kL+R>& zzmu;?ykl5DbCG@ODk#s^a1&byC3>TeEkf)eMJGVyi9&~jM^CW3^&!X%L8mCyu;ow; z64CXvq$+4&GarLO($@2;5`Ygr)xcI}MvZ7H3SpFn`cDmu!9W8Wg&};mIEW;r*R4+t zhlZ#vn&~KKy+MV!xEpJk%ad?c-f~t>)kK}^rc2|_by4d&-sK97f(NL}O|*1j9YB|t zP^S~KlXmnNWHenZcr{cGkR#|7l5?r@uTf(e;9o|POrCMwB(m>0iE5KMox_n1(2zj_ zs$f6{HPh+fdH$`c2moT(U?B7~$@UcZ>g`o>zl-X^E0JLJHkxczbMC@~yEf*ooeBWi zL>;TXn0FRorrWCK-Icc-m6+<bs=EuctbNVp7GBA%GySfi&XgkBeb5eZ{Wo=p7(pAv zr>Xrk8nP%B+5u7dx@5lQo7L?9nI6*p=>B_rv^a*x7GX0s^1E<nsmb=Bl7$wdEUPsU z&&_ZazGVlh76X)|OAMeB0jQ7mlYYdl{Z1+K1|E`tnWQNozg{23GSYjkH(s$e>RcPO zu3d~j6k*9z?346`B>-^k1VBkTmY}<ID63ZffS`^)1Si&Ko~?hTQhc@nB8vSeAU;nC zla-vHv$W4=(g)2Hrp_So2~^!exE2Y?Ns1FrZ_MeP^1O+qF;Tf8R=MFu&5u{UyYh$4 zap%6Mb>HF+z<Bc6Ow>_|{90L|<Z&{H11OW;Fw#}Ygh|S{$eI5J4~1z0N#gVu&qu9A zOE$!@K*Ad|1SvoC`kpYlOtrCv^QfOQg5VFlC(c9jrLwHRwBRW@GsjRWV_1m00P{99 zc-{`CZukr^O8`s;Sd39{e51G!y^joq&iNp3Wb~2sBox2>!^lq?8G>H+O2B2F1}>$% zoA?TOJ<AYWd6%Af;hD+SxYHZ8dKdSC8Kv12o5zWSTzNO7q>E7M5sp&3bfHpZ9Km#g zY5^;$Q2Jd;KXwU(aQShtT(5*4%`d~Y_Gz?2u1NE%gXE!%@<3@RLV+!w>4$Klx4*Cd zR4|atX_Hl$TsHh9>Pgxd1xrgA1H`0daQG~UoAlwxPN`8tW~Ai*32F=zhlhnABh$8$ zEd)(5cT?2Sgf*b-bHRd4;E`u8KJ$7g?yQ?{YMwFwe#eCQLs!F3`T1Lit{;jwZJjXB zx*C+{Z#kN7XW`kqOojBdtQ_Ixwq<QAOg9@1NcHjQ3#=V%CB<3#v1qVC>#+5ckQY19 z;R-V%=Lxz4``|-khBok2U-*>xb<~(Nv(pKjF6wVca_J_ZUrX=vtXp^>yafp@w`N;8 zdWop}sH2ScvC&pOUtBgBNR+RNm9L5yuO8p^(mtusEk_wBbX)n|FeE4f>&Vq@M$=7$ z0jd51Osjhe4!egAZUBf{tAm5SO1BsFb*~#B5#DU5!~5t6KtVzyf*KUL48KDuYS78u z2a1R5DlIDGCXS-K$h!GSoXLcaWf*u(Oj-9cdV7OkL7y{&hr^f?kWWy?$9OE<hJ>(f z@nr2AMG0r)EoURh8PYvC-JtPepz$6_)NY93zjH&v`DoPn=#8!)KmP9HAMF0i1AlfP zy7keh_0fAECqn680y*vCy`ztu^h6OTsncV68g6+J_+`;g0oO65BOnI!Y#gA)8W{{l z#3%8|V2H8irsErDS{2D6brE0+ET!`QfI7m5Sl`{wFx#3L&hW+DzNo_|&xhu@Mqi?F zORRBAqH#y8amRbDf4ceR=0Dwjb9=n;$oQ^VN1gK2Er*XLNV68xWVMx=Zk8C3>d%lV z_I3>)dXE_rD4}r!Oq=mg+5wo>$%TN4&ng8Qv00@vmilvI1IR3CR$SN4iYM`QJ~gK3 zY!XTOWEh0aNy=oPjK4#{h0RFPCc|{#t<%>}znA}~r8i6CzJr>%Q5|zuPX!apH^=bb zxjAax%%_2t{-Y0PYxESW`Pa5Hu}nyvDSihn)$cZ<rnNX^5E=gwrGJTT8%@-0iQ&I< zOVqmMzu#{Amk-cw1L@F48J|%n|1KppNdCK=e^@~83o--gAVV4dK%f14%C~Ff0fY-M zT^tJ^;p9uK8lWL*O~qQE&^f3;I*_a27&%X%vO2g1xpuXTd?s6DsH^w@T1jv88@}vn z0=>!+4Fdv-mV`lyWM~lw(&P<~h9Z3@U}g$+ISfX_u$mYk=0h?_g+633>`NMappeZ( zw{j}X)62E%wBo4t5u}U|iM?m`5sTI*Xgr9-?oCl;u$+IyGvPiYL<3uFWkh&wyu2~$ zDCMh>30Xy@iK5l9qSZ4s?=-&Mcq8!R(7U0zHS6dCW(dXGel8e_cay3b>0BE`qe6D> zOC6u`nr=BtZ)c*GyWs-7h10^uwtCaeTo0vn2BiIF+>#GEXQ<T=2!ez`p|A$PuwX4R zDijw4%%wt4UX%PJez8(%uH;ia_E8U_RJDV)POM)h<(->Y8}#3TbuazshB3L;dPk;J zQgfBsp-?FW>_Jdz(zam4^sD+V(*OO88Yz-M2x5mP>HI2^q?sgwNjoETm{}n1K2A4G zFb-s}1%nRQ1cqsVmgC@3{vS}0GL_uXfldnsGJG24E(m{@m2;&A^8Iganlim<zh-|k z=UPs}+Y<A(%<PJLH-6{_<Zb*UJ9nc0%2Su0N))V!6|9)vHIw_jz43z9nTHbv>t_qr z&v^<b)=sv5bIbUyIcFZ(%#frf;jD@|tERwKt72kms(jGsFt{4T36orDF_csa{fsi{ zM^7FgL&}#&aKzl>QLQt3YKD~OdRjF$nP!E;Pr6g=nmB?Gsr$Iq3duZRuu5GlvB0vn z<%d*;P3|Aj*%~BV*MdQibS-=6;S$X#q+3vB(-;t=PBJ1e0Ch2E-LyGT-xjNHd$0O~ zu6Vsa?mRMXM&B|6O_*kudS|W0C_J9Ecrl}o#h-OyAFC4Grq`K@!QP0m%b<f~F`0*y z=ei*bgdTyxrI8DMzmLirOx)JXN=!dPgY5gM0m|3^7#GP>{jcZ!?4i%EVQp3UpZd6S z1$}Ypl|vJUrcBH<RsVAp*x3gnFa;-J1;UKQKcCP7%kT%Er%?9lV-Yi2nRa0Qs~9Mc zVIYGZ&(yO<7B7w%mZ)73`lzo^?JCcrSH;~U8Qm5cBMpSv+st}mpKe8IDwhsGVh0Ru z*0n)cRC-{yRGN7Ev_q|XB=cCVe6u@Ko_$Z4nN0-mi_9mCS{&;)Y{X~>(2u1;mvO{$ zFi*FJ3|0fan3p=byF26XJzL@u9<h!ZeZr`5PoW@uWnBJhPBZLxVD*7T)rPaMZDqCY zhmSzF7527}43MqnsBy$fFfs}UB03KNwv)n`al4NLy-kCRGx`Q2U^J7NARq?&U_oi) zEGSuM+hLLqn@G}BC9M!yvNQ3w&`HdovcbmCHbWB(vx|R9w-h9jG(q*0v;nDerZs6e z7bd8{Y~lyk)Mar311Vmk(W5Z3gXI>}oca_`0<AmUbME{JadOQB33ldkaxXn~@u^Eg z7l+18bGe=?%PucV<W|LUtHv`v$;u@fW6R|&QyFo06Hs_@>D6VgElU)yj1{k(4#bOF zF6NAzCR#pmx+hInb6(4t3MYzI+$vfzv-6z;Zy$KiooL;Ct9AEWQOQ-?YqqKCZ|976 zkd5}n7oVHToy7`pekS*KzIvl|wr=~Uh089R=W{(1M_(zQT0NUvgNz9?){LqCH$&G# zGp09&;>-448=A`fq2cw_H~QXddH2-S)sw5Q4aJu2jXL*6t$TlQYuR3=<^9Qa+b*y5 zkF(8`7Gxkzq3#t5m#qBR>Vl3*KlIj?wAoiZVpiw+B8mqv26>f23;PuW3$q1%Y@$OU zk64x{t3x*f7i7qA&c()<-Jnv^kDj1{dCW`9e~UbKF^@7e^XRNxzh)j~E}BP~>O2~; zj%0RQm8Y28?U*ui{U*(9SNdm>k%#%PJN+9lTa`A-wM*Y@Jxu;SX@_5964Gr|=5;3K zwWV(pCdXl-(7k=$0XS)q)&UB0cnQJ!2^#cpgzN4xk$qm~mqM!f(f(6RyKdJ^z9z}V zXp`N(((A`;gjNEMWJ56dfR!z5rig7I11+wXW=sS$AdH0L`9K;ls0wn&B={PoYEqeW z-3tw~thk1qiR9wu!y7xe&Y92vT-U;QD_#WCFecVgtMzvG4UTe~k@TksMZt0lpB;u9 z9c;Vs33PQbG=zG{1?oJjjrl|cpn>t($7(x=hgQlea=Gug9ht_Tis8+%f=7nPYiEQr zQ&K-~@``_g@oLE8NcGQfo^<PcxCTRhfHDk?Chh9SaDCUG)2%+Lk0aM)rt}&Wt%`p^ zWr&jI`1ar9j7(%Oz<TI4M;&1Ti)5iny(k!#ZZr{+eIIp!Kl2F7$~35QAYQyqLX}z0 zD=qVRwbA7V<9VG?N9X+za9;kE6_-~`o{Z-;!tT7Z;%dih9aH_Ucg9^?U+bLs%J28R znmf~W!~J&qmE4Kk*E+{7QP<W_oE{jkM=RF;p#MhQ_XlHZcSp<i#Pjw>9ed}pU6+ns zJT_UK$S%K?UH+*f_tJrj2PX4o9i?+l&$#0kcd~`tZ48aRpJ&^-+5EoOOld;~QayEu zW8q2m$r`zuqRP-kqPhY~J@EigrX<HBR%mR`mtontKPMO*7zzfw_00`-2GBv`(wo68 z4WP{;gCc4@hlMmrv3LS^G)fZLCTlkhb2aY4;sqK)_eAT9=M_b6$+eO<E3Q?{RBO#K z@PKldab_ZF{8gMRwfKw}G-`PTF+RbKOCcNq;RdG~Eg=PRR$;#HB?#8*XVs*MEaSj* zQhWK7G;`hlI?8yGl6R3n#k!i#Pa)xQUC!A+vnm^@X*H{I-ahI#@Z|XFPhFlX&dbhm z%Y0VO_~?t9CUalfKIbl)%>Cwu@k5_v=aD>O^X1J6cl9lI_0%IV_ll@v#oxH|Idh}! zPFi2losI?KMZSczY8!Rpmy=e>Ya&tJsS+oZheW=z;zN#wHl-h_YE>8(__~x80I2+A z=$yBHFi7hUnHfFOxsx#JsfH%P`Y<Mggo(4Dq~;U<l9Iosgg8?1JxbD{cm*<(ISR^R zYt17x6bEpFBuVDQk|ZOt)^AR%-y2)M_XG1^=KNVse0@*M(F%26$3*1Sv8mSC>Q+ho zL_#B|HOlTTxKJS%8d=&3OgHllNK-JzKi^=P(KL3X4cwO<tTGxba=O$SC}_uqjYHbl zG~vzqV?%-h$t4<t?4ydGNF5qI73_lz4fM8(N>=<Eyhv{-tpD%N8|_eNx_^ib4<!#W zZ@4BlgZHXlce8Owp9;;WT{9J!{APgqn<grzg4t}VW$L<`n7bzGsF9U?wGY(e2{%1< z%TYtqq4w_LKBvWu;VQ0S*Qe}}D=m5`tsDeG@<F1Pv1S593Sj_~&!H57bviK#EK*lT zW-){axM(V^Uto633==hqC7v-%eN%|X2u;A=ki>VByNCe!&{-R`)-FcJG`Q>&f6AWH z|3sN!9{^d;6qY(4ESCvvl**vK^yB_r)nZT?FqGC|uw<m3+QAR{6dMXZA`3{C-#iEf zk@ffRRJX%?X#^&su(u^r8x*$IzlN~A4+M%jT08LFx~c;4L)_88Gb3OlG-mC%fibfR z4%ekkmo|-Wn)F;PzFIt4EO~ar;;i^u@rRzqsJrRAqcdIaJoffu@#cp<bUzezJoHm6 z#2%tu<7^Tv9^_2a&IWm$y+(hKnN&+>V3{n9z$ER^%FQ@;*$v$m>ZZ4)9VFxR8~nx; zKV8#U1<eUL3;;TVjP|v5WSu|zuQ*crmN0_22MKZ+O{0ijM3Uczsi7om;c^x-(?_M6 zdBQWEr9OWMMcF)o5fTI{5T@Yd{KfN-TH*vVXWR@i3DC><ekRsj9&;|A3eVKcgl`yU z8sZu)ENW8@^fT}4d)fN|A2hZpAjiKMEGmIg9ZbNbzzDppVIKsyG`rFX1>%#KTc}3y zB<1`DeIIe{+{U|fa#!408MRg}1`Qf;1{x2s(o2GdLaXwjCc3j51DZ<FHkigLX-GNq zNnb;bNqp)kYc8Wx#s7%c;k#%!W$KiTAGJr8yZ7K+v)Gcu(aZE<rO4MHI5tclyYn$f z6Fa_sZrsVgQVYro9rHAvUy_E0hmeBBfbmHkria?Q4M1_i0OmU@Va7$;q13`fs75_g z4yhI^tHmI>p@ATS2uhhieza(ja79-It0y*Um0FcDQPbYgEl~Y_lh#M4$L%*S$FqQi z?6eQ#xjDMIL`<d~s$vIt*D|(J;s^UwcL?SYAR|;Sjj$I%b>PPy;Bwos?2e(QA%_X@ zdw27gm;~|}F4<r{XbhAz@?9<>h@&kGypm>$g2Qlzilb%h!9dI~qQM<N9vpYrnAZfo zLBks<dH;$4@nyUNyb*Br{)_v^4Zs!?U%4`Rd34JB>a)|iZxy{&G+i{)_s*%ePrX+& zyKc`1t<fXhf3cZ7)t{a2y51fwTN}??7j>+Y@Xe*?FFp^uRR+%}G-ZD6T(oXuv}{v6 zZ*$bKnJ|(6qE*F3kvGS#jm@;av+?bXHv)0z&Zu?gV$dh>WD|UvHFk*!Zd5hDQtSv_ zU7adV)v~Vx9H<o9Py#B07O3!E!i;H0s(x8s+KHtdtG@@Zu$WRZoQxH6n1JwXXe9@W z@aRdfWl#WQ@H6oXyjLWMkQH8LszUrn<Zzcn3FRdDpwrFtL8rWHH0ZnV5C%Or|4PZ_ z5{TTL`NUUkyS#0xCho3_I_f^j&Ht%9dfTF9+v9n(NE3(53jNMX?h|m2p}NIh@c=`` zJ6`En-Humr8qgBSA@r2<{>2KUw7UH!U0kH#Dl}O-dMdTFnPyPUW7GE-R0>%Ivke+K z1qXPw5>mS)A?0P@E))oO2jJv0Bs~SQb4i}6&1Hg5312|DLxv;dUVH|ATa1#E-pG8g z2oW)I&My8vK88y`oiYZJN&<EK7rMz1%)g^Ef-VWL7)Y`Esc@CW5C^Y8qwvw>ewSeD zC~CsWMs8W05&=q4U`fRUpJcly_asVJ#!6RC_a{o%+$vo|NagwIr>{R1E!!B+gPv&9 z5&(zSC<g%!!woOsWXWX_j$L|lSJjVzLNxkKq?-#=NXr>=3~;oC!>WQ6l()hLLk0?E zp+qYHnxx|eVbNe7TeUP9aV9i03OXFLI0W8s@?;RhSBp+gR+vPF)-59FkU%nHkVbt( zi}A&+Xbc}EGtLxxk!5Kp4x00SNaM1b^$%yMIE4tDzwhF{iSUbu#tm~>jtL_Ij<^da zjgz?(8^(8i%I(@GTN2KSTh5BP!jg$B;B8siuR8`2_743?f1m!R5xQqTvk@}05kfh# z>mgda8Vf&LnEMf!Po~-wf{h4KwSyJ%O$y=%&+)-girz<aW-!>tLJJ@uNoY9W^X_5p z?0w`=w#i%Pi=2zp+1X_3)DVAslteQ+Lo^|gXAq4Y8z4S|WQSM6)fzgU5Bs0c;B4T7 zlOs(Uba~8KF=dK7Ye2~_HBK0%LmxYH7Zb$Pk8Do7&Z_-o#^c^&kxDc}UuTf?bq<P1 zMA413=o6YbkXw?58*@X_ZyQLzJr=RIDcUX?2TpfuN04_@Fq|@c6mmftKb_%&$}DC4 z9>)OoiFHjF$bqrC<9s0hP@G5ibarCU*m$u~BrUl_%qLB7gH91OTji!`1oU!NoQ82H z>+jn+@N$0h=(VGX+O@ITwKM(k+D(bthhnu4z2}bC?tbsYN3|VrwTjhtO!iNhV98{g zu;C)cysv(7%ejvk@BARI&1Oz!p6wev-8(w6M^Pr@Jpw3hKEUnZ5K^5PRQ-jFm>!H6 zg7jaRek%3eO{QkLt_iZ1L`H*%OAr=>vuKal+Vc>ZP7LI-Y5I_!xg~KQ0fsOugoDp( z2)9~#MhyveOrhRYUoJ-N8#Q+nRLuAcB{Be1-sZzPbUx5LwT``g|1m-HHotkPTK$$a zntBP8AE1pHOV*aTMo|r)GWbo*oKNX}#<l2hBFEh5G<M*-bneR|;kOzD?et^nd_DEF z&2NK38~s2Bkf^;62vyK1ytMk&Q%o_9C<3HjW^6GW#u1_PWC$K{ClKL~(H#ha8n7#V z%qlgb#5g5V29<c>rWFp6ZEO9BV1FOE(=p$3eiz<$6gQH2+EKmgOQDir(KA!D$qe&1 zN)x3KjT6D}kS+tF%7{2TNO5N1(~gWMeZD8X<nfMp3V0`b0fMy-55mowe*olQc4k{P zwoGoSBrcP^wISRYGx~gEt~#Hu4)PD?#7;7`v0MsNLLZ0PsWrjCn1w0W8F>#{O^JSr zTyn||^R=WQE13zpkRo!jS0`;jc<)nC*q}&IA>O8h(P{&9#;_F=A~6*ilO$zuNz!X{ zpG^4>mN5c9lr?ls61y;oA(t<&QN&7F^5FJH5I|MY)M#?&38N7W2?2~ta1~CBP7WuW zzFSTo1bPY2@|b7&)M(tZa(p*}C%mzHdhK-G%-VOhzP&YG)ArG_9T)eJ^`-lzuTDnZ z{OYx@&Q`R1?8^TnzjVI9`^L^`^LIL~ZH=zl_ZKZ6jQ;tiKl4Q^kH!lgi@F}015;9b zxp*@0QEnBAMyp$Xu=9rH`}^MB7H#uKE04qrx}vVG&$5M*odz_^UG|1)YS(vcuRS}x z`v=uC!S6S|T^`-u9WCpL=RF#AJc{ZjGA2FW%$_onIq7#>rXz2ST_5}X?a>vRquwna zy0(m4RBlw9UNb!!*SG;|1u#TrVX`<DzRLPUqk6`QC!@nJi*$Qjsa|3Oka&@fu*an* za3QqGI7?YA-33o}Qqsx5OE4=B;i3r(ie?Yu7zKGaS+eC~;D+_jiJ|5el?>D-@tPFh znVe7<uEabZ0l|xEjF5Wc4uK4(Wk^eX50HV{|KhU=^t5yBl;y3`>!mTTzVo%x>;H!J zx;`zV2Ec*y>MH6%l%prp4lGh-M4@0w%S^k4%f&Rkv`CavKx;qDPgz7oqVRRKta_nw z)MbnD1pD;{3~{1|2N8+aTTk5K31B;KAJ_N6YKK!jBk(WlCtrXjdmp#lY4C|3qs?7= zU<CXmPDB#qaK$+>bV*AnjCw_MMyk3z3nM1KP&4l}xxb)6+=u6wd=kXx=8KzOZ-{4A ze_B*})%m&;26B)CY`?sHswLsBn|0SEODaCI2*vfEWe6U!2PSt|*)}2WTpqP9UreGB zI%1QFVC@2ra!#b95oEqTt7Za&mf<(Am)0xhNU1Z#DSpftxTQeheuL$=V8AlRWS{Xx z<3?)>B4?9(I2I^A1H&W1{t!%-NZ>~E5OI{B#(F5Nj@)fSp<+A7UZrIe@sNEA_GPn) zKULpAb2$JUj`fk&LbBirljAc2k0UTSCNq-&;B{Dgc<5zsi*NN>pBM3)DMApF0))bH zGf*K+%K}&!5rSCGWGgv+gI9`v<{K-$SE~@hFoO#o_P}I=hT>-=qHnMyt+06+f?y(? z%<5HJ%|J7mF%+RnDe$NKVwqF&0@#wKGvR?0PAN%HDi=+KQaRTQ)GR^iLWW=~Li8S2 z%eV>rtt~fUEsa@Aqh*_K9QmLyYAv0$K0KG@WN^GZp5-O*WriLNF?Yi>BwmQP+5EB7 za}Ox}*J$PgL#ZPTN;Q-n`idR0Tw7T#z&NEy%@spKX1Gc8e%gTuU|DjO>X!0^kr^#> z6lg+#Sqj`D9e!@mTt#p4XQnxjn1Rw1T3dbs?&0#YR&7l%nXXrjPy-%TqYZ|s_pAd? zW&7=j*F_M+4i!0$&>jj|v}3|Z1{S|Pm4X_{OD}*ftcR2ylIdP8&5OC4eYaRc$`bq` zsvHpOBmNFw=h)yPD2Juhs2KWXr`<+A?UY*aI-gvlZ>&(smqOA@_ry}b)tFCSS~*<} zA`(%<K|@j?UPKS1xlave!bP+`Y1lMorHf6?&CP%KGa^wsJI5?6XDm~?fw=sxuZ#{O z_&P}idF%=BwdHu<&xns`aELVZ#7auYP@B`2OaaWO$`dHWLnt^##X-VSpsRtJ$lj0z zyAa2znoLf2vbt*M7S)i<;6_E9{A3o2wA_-63WucD<h`R2hwuy+&FlXKr7sA7Yc0HO zG`QLg<EBroE_qU~yJ30{hS!+X2N>Z-k`f-1h^!CGBm+k>_Of5Lrx<%pj!r%No9Cum zUVr}6{EDgC5A*BB_Yf}FdU@+B+o#ri=w5zt7ukX3mum7a?gC0Fs2JZf?=GN7yyLt6 z+PZqqnIA2x|8Cw}CBIiP(-m*n6ffHRq3Q{o%wcgV5DO$6q7Y7<Da^aF^qoY1{i>Mv zZsSP|>r#uIc2Q)ya2<pqqarD)wu)R7!^(qTRUr@66$dQ&w8EUTrwtmGSeHW6W7x6q zoBbAf;Rl*A>qX^O^*TTf3bXDv?t{dsA!BUBE@1<8CCB>8&;mjcV_oH9KrVJCgY1>z z$a&i0gPUcO4K@qKMK-szGV_NpH3x_aK$L&*sl*SHaWqYS&P8$tuM4x$#y8&pG{8hy zrMI61q;t}ZxHN7dO3NxU4ozl~91JsEcJ!L1J8Ni~5o4Fkq;?|88<Q6?=8n%T`^izn z8)hxkMB7m_8)%Nbgc`VNy>Q~}lr!O6b<4SGu3%ZBpgvYmKV29vSUtXXE~^+}ujk4t zuRi|T<KOLowr{)>79P0XcXi+7zL&xituLLQ-T@(HRl}Pr-&{Gh5|OP3UTvE3k7v&3 zQIH|oHr4mRuGzeY$1~@g1*9XKJUdJNWpU@qnXagFW7N7aRhNWs6wLTTUpN*T(cWL5 ziQ+fnU&d-v%8Izew9qXJ0G6lA0AKf&$>vu8_mp<3D7l*Hqezfgn0xdSR&_WNYD(Pu zsaGL^gH#A8!=N|m<Q8%%9jh7gJbvgiS9(G5;iiSLqhrK!3~%E{Ppg~@hOAnW8V+<@ z4j0NL)L+%5YsA`Z#njG_*ZUy*=KWQSIm4GT=8RMAb6;k%D>Gd6WRNB~mqTI7Hu33B zHdaKG6UnbA+r-eosmNw7qdJR?U6}iV78QW%m9YiGA|SqL8y-{(d-1_QKiP`cH8$2! z)r}AzH9{XGZDzv-YY5`UBP+^CWh`5EieN4yd%C#J$gwnDVZtM}uKyjnRz%N97{)Xf z8WGoGwgD@xMsAXYW+eA5>H~&rl5Ddgaz}`SliAW8ekrcQlZd$lgvT=2)AS&}vM>}R zc{h;gNnZWMhv+%gKA4r;L|EykXalek6d{EZU!CfOgy5EQ?OaJkqGV;PWaac=ykztE z0X?iFZ4`3NJXJMi{xH9G+&))SlPGG86*XROo%T<+eps|>Jo^)8DQOvd<9REij+JBx zKKA1F*N;q<#mky!vzkA47cI)0Ign`Gi~rHqy>vSjsm1f!favNPr#F36w>##j9`Bg* zlw3J<`OwsXxM%hFZg3S7N8`>4AiHE?>1UZj{T{<-R%m$`wrj9*v+7r9I4Gti=ihyF z_I*kSM~m+vLCFA}6OF4eyH*Rar>UNXElY;27Z1_X-IOr7;FENAl#&)ohA8<8CFdw1 zDVKPGl7p1|kCa?QlC;u(R6#Lvp2r~iCf)cJB~z5VLCG{F-=*X&O8x)|HgcjpvN#}f zuVxZlisYKhP0Bx_vlEp3H6@G`T}fxnlrXsckk0-SB}`7m1fgHh<^M&A0HES}ZBn#} zS#+64Nj@cv$gQQbRg|o!guqY)0usc-lst??8<W3)GAZe#8})!sDJFlW#d<rhDmUXo z$L&1^A;)#8=VH%=J$KAjOZ6R(2Vwe~ES82lIT@DqcU)#m)g1>*43>3wG7Oge21<+X zWSA_KP?Klmd}g#+RxX%ucAL)b6j&_fcXCXYqXy}AhNW4$jk7y0lV!^tyUDVZ68X$( zDTDh@M($@uyqOB;-lnrVITnkD>he%kxa+dC8>HKGdb@_@7FhD7Oq|_WWwNZ7-fXoL zNN>g&y#S5Pu#`!8IJ@nV^2(LGaw*SZsg?3@2Avo^YqTtv@^A)1g4ZXP%Ro6^U#4ZN zR1Rmi^H@3bp_GR+gd(M9EtVqX9YuF?XkUao1vbm-I|UBQ>f5EPjLqVa%HZsF0n4*n z@}xYR-7aEz85kKUlTL5DJeGCSyFVB3L*u!Qs;|3KU`G!X6<W63UgNZEn%VWafS=n{ zMHbJ@uAd9|xkCvjW&kzH0Z3!V0@f>FIC<wV>{n&Nu3_fm7TT=}dsUgR>jD-tP<*r) zhK>U0#%5#z5mp8sxR=R)$XG}c+o(Ih*$<KH+~Gq<Iv$n7<3m6Mk6_TIFxe(oKs7MB z6kS@B<04`O;zq?jdpqLhAuMnc1+LeRfRAmg<Y4zCK%$_-T*QTCstj%K#FA2uUl9fs z={sm}lJ`lv!H^Q0gY*#VI7Y>??`H}10gH}EJA;`q_3T1U;e|a24*f4Xeia>Eg!hJs zMH~Cq`W?MQC#PmZu=nfN%~gcp?%mDw^(+QH^+0+zdzS2G;$rDoIA==TTZAB*?ZgJC z_V1(p@URm_#&Na_TPuG?pxxN~8Q7TuJBVQa3LD!)#4hDwClTafrx8{HJBr}SAzfi- z5nN@{&LY@(gmx5hvK>WSw4Vre9&sVfWBZ7>**+p3wvR}@{{ZbEGKlRU+1??A{)4o8 z2(F80_Ymwka*%cn!S%A^C5Jaijnw>93dhSTg(r-Dk4(7AL};Y^UQhV<%jM)>>{~)R zl6Yx9l1L@(LK3O+m-#*Za(_j$k#-fq_f>0hu&)SmYW$tFqX=49OFM}~mLIR9Jw%lL ztoI+H-9&J|;drA$y2EQ9Oabpl>@tFSRvgTfuCdz)T_11KEsecLaCfCr8hek>^>H71 zqS@al_k!{)M4Wij3bbt1K@;st5?SRxOuLexMXUV})6OI~TO++2JCvZd7Pd!8D_Xvq z-CgTngXh-yTad2zW0#W12LD>58~y8$Zt|~3y4mmdZ(yaj;JJ<LZ0qrDN;@FeC>4%x zjcmu=P14=w!xuC|DV_Q^GeK!4Yxg1l7FM?Hpasuu<>&rwc;62HcBDI{?|x{}cgxSW zv1fL%=XdaP>6x92p5cA93-#_sU+tz}KLSQX_Fzo+YQ}W0za6>l$nDVNc3@8J!@e#1 z{T{3mN5o=$Q0NS%Zr?@B^~Ly$Z7B+oB3KY?7LXD;3VXMJa0fd=Vn)a=WFezeh^Trm zc8ElvTNcn=t{Ya1v>6KD%|+r&AUuI?AvH7=Eefm-IqdwG*}#R~t-pCo%Em3S+JZjB zE-hV4@7aQtPy4ilzgZ{9D_N7Bz8L*QdVCe3lb61>IIVXni!Av~K8-!gyjU~Cefm4R zSbzB)UIZ0dRaxFIy~B$^d<0Mf*)0JNX9yT6T|$?nF%Tc6gs}#X;VcXkpSI<RgL+Ng z?&KV;91SRg*g@Fatmehd^Oe<a7G5iy-t|VsH&^^1^Z=WknDIDX<5+l_)$_n{ZoM>v z5hq?zvgijZeh~jYc(ioe+r0E;v}vtZ@~>hu2(tKLw!tqmQG;BNwk~5jIc}W7g!5#< z!S__9Z9thp%LsLo9cJ7XwpA^U8A^(lMV>Hbww0}o^(&n|OP#uwb;fPSQeklshyUB< zy76!!SmJ)MbsJ3Y7&e%a&XdD~2!^a|{@bOvW)f*i-N(A06vmLXA?1gj_eiDC1CxjK zXdoRxL&mYgvc!etpg<?1gNhpzZ8!_HiU#!%W>9*ki3hZR!cr<27>2{V{klOsh=xID z(T#VIIZI#Uy5s{+H@JO54JQ>TxKxsN9hJLCUFXJQT)vri>Ff(<CnB@Xtx@Y%PB79Z z%Lf5B`*h;F@Bitl(h47L7<<mnc46UdmqT%+m}HC~Y#MMY5M&=Z;SBA(%w<H<MO~Nz z_C&}a7{g8*<54Vfkm8&y55fchra($m53(ADF(bAytV1`+{bPZJa9<=HsKhSn7>4G3 ztiS~IOdk7A+BhTc(zzGTO`2bPE@~}H?HKAHrDI-Z4`@7#yfo?V4I_F6q}r~#&(l~~ z(+};_==hiIJ(5+I0!n=UDfEi8NjKlfgoi=FrWt$!gylg9Z>BMU<iG#4Vj!lBkW>}S zEnuNfFfALkNwp}`XscvW1KVr@R3=%W4RjE|C7jG0<R{|8=+6|0?V*9mVw0U0xk4jD z;*JZ#&vOJv$-F!N%KFRewN4rH&fH69FP>%M^9W3Xqt=?mgQjSg{({x@s~t3K%%ltq zgutLL(+@b*8A!B3$6-7F)uu8XTrGHoV}zsFp>FroV#MAbj6$jq%9zcKyyFLKg{yUj z9P<PgF;KhoWBcXvU_B4v?Ry|EQ%3`)Feo5W&xj0DWQHTObv8B{J#>V}j*rv5^g&8y zzzP9RO5?;Yew)V0kK!07xVkFi1SR5>C+=Pzbu6b%LyG6!%O+c|ZhURyOz-5zc**WW z$-!93!MK~EuY57@Dtvue)LBEDh!iK?MYMxR@!f@7RC~RqEl0SSliOBpx>;pFnu4bP zzdX7}ml|Dcq=yX%MXms^XT&E{;*kxEyp=r+N`Yk|-k^Qsv=4-_?~M*jU}$N{773gg zP>5vDCmyFn9~d$*{`5$alRnbb_cY*O*MNh@m+F@V2k}WXMj3syQ$@%R;o^QP)%_4K zP-v}vC&PZsfDjXjh!t9R`n+d`N8!iJ`V_>AW-g%@*uC_XCTT^7usiTQA(}_Ne3v?i zL|IsiA^65xd@l@!a=-GgtXm4M06Qm!VOIwNWau;zX`1f@d{FM9&xA5ZM*T2dkUmrb z!XN8>D(&zG$HwZYwK^49|5JQw)l#4O)aXz@krioQiLa6GEc#M1!IE#nJ6rlxIp^Qf zw-WoH8CGf6fEsLs5w+GW{#r91T*tx~dk%{U0GuCKOo-Y@J7n>Oo+)R_LLv*J1a-^H zw1vc=ZXE?`b@@{LbOL)@pN5efv2s2;*;djTr;8xg;|5a}Nc&1T(O>Lwn7`5EFk6%Q zOq=`X=(h!ls<&#FiEnRCl=xyLK5mV+)C$3<`l?#tcXBtG-ZgAe7YFLOU!VSMT&jQJ z@G4?^SD4~!`<Up22kK+8L#8U^E_TaZtjU~34~r4P<D=>L^Vg??%9rY(Jso?nsV)H? z*#taLr|^a8<gj*OIywB;ivX>JM^X9q{zPeWth8C))k~KY`E~9)?^1mi#@r1?c<+&c z(*yOMjSxC}5c+5tpR?=#odD^p3LxQ1ITS!D!fobsir@4@#$F>v2r~?N@sE`fux&o9 z;4rlwxSs0draBA+Ag>_-2x_2jPCHP8PA=8J2yo?_Ky+90dLSrKL@8=zU5Xjky}twd zn4VM!cEeb&WOF6^-!NGTYy&u%L2Ol+!X<!?BXJw792qM|RF=ISS26=kW)QMLGd(~B z>KkZ7Lkl0{ucM{hbtVI(eQ0PHUh@$`5|YPk(yqQaX$(h_R(=g0jfRpU+cH5y(kfRk zQ8Du6e@0J*pFvUB#9M`&yh}$f9)0ogaU;=oTjvTZuRMSG`FLUdcsq;*bKO^Lmu-`e zUhRFYH|A<W@cZ1Ah<%^C5(=x7J4E&SzWCfCxXOtUKs_ai!iHF3!*pZ3aBZS+Q><`P zyl~44?No5<-7v8S-*B~+3O7p|ci2qtTMbA%`?VlKgN=pMu`tNmN}iY-0h$32VE1F# zwN`U5F2?ix&|7>-0Mt|6v%6J#HzXm(u>t!b>?6yVWf~w(J#rr_W&tk~m})3e5Spwc z7qmgHj9s4r6DLMPgOQc6YKNJ@5F|$@CE^7FW|9mg4JRN^Glqtf*%5eX_Ocz<K=~)l zR34$~R-@rbGh^^<C*WEQk6zqGBxLN&MrRq=5Dd;&$xQ5M3L-Bk`9`TB>t8~bN#Z1` z@*ipNxo`+-XNPkl@Y44A!s0|>-L1m9X=}W2^>{nu%}L5Mwedzq+}R$rwl5}th}mGH z^RIBS6x#43$fDmU3)eOqdf{6;YU)*VJ<NLrwWJ?1G8r|E!jql;$*z4BY_hKq>ZC^o z@I9qM2vMfXfH>$M`A}~*l?fpO{MI+8jUxtv@0LeB3Rx5!rQy1c(Sk!l{~)BI%8+Ah zjN%E1q`r<06e-S4CoWiTn&~k~ewQ?yOmVA)nN?qan<z^(wVGkUmxgITH4|@g*L2(X z(L}ayHrqE-Ip_9VS$BEeD;s`p5^|c6i~sR#-(6;Q^tx-k<(;fHt1V>*31uAqm{qKS zbp;`+y^DFFAU_sgN(Vjq4J<m8alM&8r!#6~wMy?zJAP%OwrTOG(d+;xcmF{%h}X@0 z%r4QuO;B=~jh<P2fi7O8gvL?)CK6y>8WAzIuy_Tx!qho5k>mh0Y$T~6((0;QJ7{2c zqcj)@hu|rY!fv+5-7CkfbJ@9sVJCM^*MG2{hWf~C_K|4MqbXzEWk5du$Fq;z4HLEW zeOFtK<z`M+TZK(AxJI_14EJ~0>oi=4I<ORMUuRPJ;gKYZvvdY^iQo`waQgq|$+&&- zuxcmcSrNM|lNfX933>JeVpP$Dgrj>B>bf%!lRX^@p5^n>!fKG0Npqkt(w8)|+iW-q zp4HVcixrk;DrX5bIR!MLn^_l=Y<bxv7{Lly21{ePi^j2XHoJ1_VH!rrHYZzO*-DeP z3i<dS&#vU-_`A7nM$1iOR-4<_ubphlIBvt&+)w<0X{*G888NErp>Bh!KucH64%D$_ zQW0y?@~J1pJgf*V@wL*?q*;b#-jw<7IOP)Ruiw~H-EH=p?tv~Wu!g1eKJ8FZ5rZr< z4CBpT0?os)NJ8_Lv2BYXOM@`(3s_@C1S^P04%>J5svtfI-($WuoHU#jUuW=U(_oK> z@Fm>5{Un_|PYJUQVrb>JQC?cP#qZ!;7q?Ik6K;`_i=6`>!!BGFqh?ePFg}e3^w0}! zdRX&@DdDWS<*b>{D~Xn_!)7K|J74Qel(xi5TmIf;C~I914DPj{+p^bwdJk-*0pk>W zL=bYbId?~v<^8Oz9i^!ViDp$bg=79>oK#``T`F#kp7JdPnC}^0l6*B_VBHAgYqMqo zD2C(RrVX!xHuMnC0~}KV;dOIIGITk+$KoE6=fyeUf~7*(-^Am2Pzb%XCQuC~9!rDU zA!{}bVjE5{+f8}VIE7E<&JEJe<h_HzA@L{3mDUc~MmSkO;#P<XurW8byaD0X%c5yx z7aL;J^lvuPus@8-euh4s1D$^Q;^|An7l+49^Z68DvgEarIN1jORZ$tyY<UwKUVL_P zY}VN@eQHMh-r$Y?Szp^+N%hpuDgWfw3F}<mvX?p+GKJ#uUoax^Yi;FiUPC`#q8xON zKY6EfEF%El^h1M+Og+`=mNuGEQI?`^le$w7MHAvtXU*I^_xq?>%%Ow=TgzzM1|<c^ z;D~shbtKb4NsNs=SDf4rOerWyr_yrC$0l5l>ZMJ9*e;;TE;ujQ=JPA38shm)*a^oD z=PSKfKnjxn-%w2-DpHr*BZ?;xf{iGYmOg)>B08OA*Qn7#sYsrpbCM^%G&*330kzC- z0{V9HjB0`Z5^Qs<kD6QxHBG+U$Tu&}_X_u-m=827i1d}Cq2OR3#neT12u62vy%Y;Y zK_)g#H%S2kVfl~1mryGPz31t9FiIe_`@|F2N3>4_zbj%FX-;H=C&I2<+_jiSIRsy& zI>eqJ0-Ob*ph~#C3JYk2{Si7@sG=0*0j;Dh_*)>0jx7d`cDjT;UUG;(V$=iMo?JZy zB(IthDyWiB0Wcb&0uHW5@omE5J$Ti1leh&xNkfoPjog;Rdx0zNx6z#nE_cCHM}PUY zKm-dN&o<wdf#49iKyKTM5nZT8$uDSDN8P*M?YUu?*p=|q$2|3jQMl*&o`k0*>S_65 z&o36tDEBYwR~Y`;znz)b{{ebo@fVBlAiD!!CElQ3dKU?%@&H=SG!V(mFbt5;7fCbi z10v6ID@E#N`bfKUzc&;~W=asj=KDznd1itxr0$f3g8XVL-Wl$qp5)77A@gXo&SyI> zJ@&$5lU9j9du+a7+2p2p!SeCFj6VA`%RLbW&r3ZYckhlmcK=j8{dpFr;5hB}`;NA9 z%gyqvHlK|<kGQzEOHkIDgw;q!gaT+yN24IHz}5X}Ixt$=32r=Dz^Aqz5>e^AeZmM> z;t}&fI1(~1Wrf1S+oeNAIEa^{Zl;B{kzW-|trTVUh&Haz13NMH)WCCzfD;F{r^(c% z?kvn-%$n+3CR39mR!syT6_whUSCoD`^7;F;X}8U9k!P?{vmLqIJDdxOkn#h|8QBM? z9o=@hh7o(W#h>CE?zb?Mi>DxP($)hxW%{A5=U~O6nlf2UuvQ`DeVDAn(+)h3sYAzz zJ>^|QSf(A?cXit#u(FN)4;`2lh^^p797WnP2LdYC*GI%4H|%0)8Mcntf`+U)K!7l5 zRoGh(<1Sdc+fO4jA6b19(xtmHwg-N0P#wldqQ$*RwQk;cGn8>-xg-l^As~pRA$QJB zcys*;+RhO8U1MV-r>R`nSNeQ7Y3akO_(s#*g#IHcN?@h&>9U4{gKXL1DCJ$;MTmvI z5o|EXV>f{0V!`fu1K2IBK+a4hv&8QaY9j9(Y>~s*{aJbob3T0^x02b+$9W_eAkTt+ z7Gy}I;ov@D8N3ZV^gGdfj6;Wys^kVH$p_5z$&#pzPWKanBF7!3R<t=T*<P?k^J=Fe zv(~k`USFk^7Z1W8psaHI;GD~oa8<`#)l+-puBLIzC#6l7cg?QZGj2<B+KN8>SUm4> zxT5A3C2}icxs_A3*Ui&a)8^k<5zqCFXAoV8?N!FjAG_f4edU?U&p^}{gQ(9ueFDP1 zxNFV01#(`8Yog_)&GVkZNpqrTRjg>$Ol{n=VSM*omTMyK>l-JHz?l4IORT76=8?E( z^TpkB*?ALdzJ7GFW;VN=g;8pbd75V|anCx0QNp$^Sk;<ho~G$w+|^2viLf~imm|vb zQVP=KhFSNMU!@^UeN;hoTiQXPo0W-9`-kbEO(yp;5#2}!rj>c@qF?rJgw56cCXqL7 z64}4(Bq9>&JoF17fkHzNAFGoX(<?7!dWi&K;vWOLAeB@A8H~xlC9tJ9jN+5{2)5mf z_`gyyDL#8D<V%!w4Yxf^T3EG`ksUh^5fE=hO#ouMAOrF8Y4fag-CSM)?W~l@tBU1e zFH*Q!=dC8EXco17vM}mDF@8So?2lUe`LIhX1}fugWi_pp9<+_qZx1l^MmWPuwP?*` zRckt|h{}4$WA>>lr=Io*$^lxn*`X&LfpVa&r&@j|R#OX@P<Zp5MYo6p@Ztrl$uK)s zRA6?vJ*9Y3X8_R1KsN1A{eFASwU{K@6ZUe<>lbnj#)ewPcJv_d8WTv%fP~O=gwZ8` zU4Vyj13N5-&V<Oa2m&<dmnddieS<FzDN`;(#$qG7y%Sc`D!8a5TVXGiQ;3{i1hXL3 zMmT9^&oewKdDvPb!y~}FXNRDL8tP@b2xjUk{t@b@4IRmNHq1D=q!o>2(S(vVs*asX z{<I{PlgT}CmLBB>u<U&Vfg*a42<D$!vlKKs^ZcxJuN=w3`iZlAzTBHA-w-QDDAD;m z&y~7w)J@h;pNi+Tk7xeX%GQ{pVZ43HHs>syY<cN<VvKkE<`!a$3le#avAo9V4e`9z znN!icj#)<s_+;N&iBH~<vBSEU1V^hJ3r$Fu(tWf_gI*{7a_4htPX-wSY5+qi_aq}X zl*yu}Hr2yk$J8ej@=mS3QsEM1G9z{SE2a(50ae6q(`hTfni%)AL*`alOfgs5O<XEp zhzSION^P$)1=VMCcPtbR>(nZL&xrA0zNXH5_5q6<qVolE3zaaVdPJwfr6WMWy}v<c zjZvj1428H!4yC*mWFaFD^~S+{-#$0%h8)l(dJpRmuu4CYxK@uq)gN<ARytS+GyQgJ z!*UwNz9p&A;l(3|ZexBXWGAk5G_ZFLLk_?<eU!H6Q7j~(w_{P}B-?U0aFeY$?WJg^ zcwy}B)6l9DE|e}*<4UfwW%0(fQ7_5<+{qoQfr+)Q<$s3DWCm>1`_Bf%J#>#baRZ2f z;qVQ#E_2uK-=dpOQgW4&ek8IWn3XnB4XpORp!+{U!u7Q(_DfpjUXir+^5t`c2D8!I zP#!{Y>q=ym#Ii~fS!K7fXdip*iGrwL8!v4f-#G6nxU%>1-h`(%=Ba(-#G9et4t?iz z+_Pq8^@pCdAnDwN33p@6-8jAWorbp?Zgl<lv3DPfyW69VcB+EycJot0pO@>dG+%C> zs(G{VS|ef%T--^y4c};ZWd*iTq#ao<jg60?EeN3LUV$Cvrgw5PocWTntLtA|pD1aH zl{8HsiI=R7S&POk6GuLA=4oDj!~A3WyY{$yXVih}@+iJK7iwOuc&#GtY=E}K>bR73 zF>7Mim3^1@%~~s1h$Ob_%P2Nb*92OTU=ZEO7;w&nAHc=^nQ$3P6aGuljv9ON)E&?H zcHLuJWY|?V%#clW3Dk%?LNpB81IBxHSOhhw@=@4#PBO`yM{8L`1Y|spHj4j&GDyNA z30F8f!LpOq!^BGgY+k3~uVSBsXp}IX54{k2@$|UqW6<|4FP=kZvAxVyIi?nCXW}_L zFK;vnOrq^E+@#~)QcOL4uhwx!#vaUiqRW1e9Q3F^XmThMofPgApq4s@cu~dRnfcIA zpxN_G5J+axc6sts;SemL5O)ZMFk+~mgh)eZu*SmG3RNtNf(Bxk@pnJP2c|^*BvOPz z<4Q6l>FN#YRYJdPQi11kl9c$3syFMd)g`Ld#H!ZJv_`Ae#H;q|nL$t|(gMJ`c8t}c z-?b@@1lobYGju==LiMmiZ@Jg%|MaL>>h!yfTCXMAvIv{zGJ_-@&ygFaoE-{^k`1|J zZ^W#NMni$5Y2<7mX$6`aIZKzBBWHW*c|a-a(S!KfqzQL8l-5X0uLZPUP?R_ZcK$td z#{ywUX61m8WDS=arVmXt#PhZ!@^;4ZcEW+qU2tW~H?|-qyt^jhZi=~^qK+ocBglZ6 z(zl(gHdXkp())VE3HHyyRwpT{CE8QRxJFsHPmz*`Ht8I*`dFLm8}62qvAAZtUB$19 z`+8kBiG)zNnvbXgWGMZ@%?0q?0)i5AVeo%O?c!}DKcMdLu@8XFxTk2+{K}?;dwC4r z6?t`2=c2Av<8AYK%cm=+-O;9f(YpQdyaQ3kfqV4EKRcw=Yawkw93CB63~2))tj5e& zK?`TdO_~P85e8=iB3)(<h&phFJ85vn-Xp;oJO2?nR{V^*xdy$fh{%zlPRf50!1)5N z0N}7j)HjF=)P&C|`FkWOtrq`p%KooNenO4?2fCuhCJA2!$R=NDHgZ+JMZR?D<C1%$ zX<!OPnyNv`hP$oWF=I#>3)b0Fp?<_d2bxZCAK=z*L=c%Yh}Hnam2OxsQl><x$e;A* z_|z~7E!q4h;-EI>COYKwZ=as2i7#ItcW;O~Hl&UkeZCogc-FD-OO2W)<bSt8XS$ov z(y=Urr{o=<GH`73D8kE<hLL@iNKsj1^f61$-e;l+)4KHR#k0ym8Y}*B00OX#Mw#g6 zdkw>XKq;z+(`a0w4x~2XfRUR4%m=?fs<&on?vf#8+R;QLfpkE%uC!)=$-29>CX+gh zRFg-37HgNbtV7M0&mcj8>Rx6Ip}d!G=&}>|PDQ29ztXE=vS8T@AR!B3*ydhPY;%oc zJMB9$uw*?%GBdW+(N;bTw7I;RHcbyBb{VrEgO3mee1QcfMJHtvai|$3Kf9!5G!jC@ zdUBtFQ(f;)|L(S~r1em5kN;5TfuqTcL%q8n-FZMVIbueGvOU1p=@BcduXp%#(sFXJ z4>5#|Cj+u6nQWSCi42eSBZe@e?%4Sp0oqs4H*m#+@0I7aH6y!l9!9p-Z&)WilaX0h z&1ZHYmt`Rq=<9w8V)&t}9-?7q;hZD)RsWTvmydqvD2M138nB)hdM3KC0akY1xN+WU zzhr&EI+6FX<BQMTf~Vwj!I+)@H!cshS<TMprnoN@?kEu6FUZ<aV|u^ZfK=bc5CNjl z!21I$6k95&LZFp4hzL+cgV?2jU4SV@V6Lqr3FzYS0#IM6aEkV})hV-txf^umvh69` zsaiWBB{1xQ9=!`ui)5)U^VCF(Rp%Q3U5(UUMYPCmkkOVb1)7x;nWK;=IJZzeMINB2 zR{>hfSd$F2eE&T~l;`cE2%Lap4!MM^efBO;wzu&P(SeTG(+Re+8&^ronbUYKnY#x9 zwa($l9=N&%xEJVuqQcAt@Cgi>Ed3=2RqF|3HZdzCPP62pY6&J;wf`r<q--djWh<C> z<Xmchp?#w3BZn6|`+7eY%(m^Hz&A8-_4I3}r@Lm$SI@cfX^S6hzn5^7#T;c*0ffYK zl+8Le$vgi<rXHDjbbMdJv2EU2Ks6NnJVWr5PPM+d`P$|;xBm84RB^{7)U3XpiF<dM z8}Zi)mI>d=+u=2Rug!$?W{Z{5EtI}*$)~i$KxqY~in$~{RaMEZ!^Qo%!5#zRvl>)b zpg8&P)m;bQLfQn8;S)$3&V;bx$1uf9=d?8q5qJG3(QE%HU>V3>Ir&3Y!+fY%K9*EQ zHnM>rnwk>~%O&Uk0(A&j@&8IgfXRWjgL<@Ov5D-N?oG(f|0u5<${N$e9?+*Bh!@dL z3%2EydF&i_{g>MQ%liIn`-TiT;L1dMN8Zcne-9%PJ7L#J-!AiS)IBNuTgD)3n&iIB zFDwAxFfB!(G@zTvzGS~>pJ<)VAGd#GZRYfawtG;TFTqc-NA8csR8mTJDaw(sg0i8X zW~O6#R%W_!>;Q-_X@fg?d4ih=(SJU>8mLopS5@#p6K(6_70)1pB6%Yq7ibq+r??;? znL)8^;MVC@`wcd+1e!1}8$PY=KCu*Kq`u=%IjHYAoZPl!qS4&$c%fq=@bV!(wT-rd zPuyjEGJ48yn{a(MOyXBQ8P}M;XINu;8-FPzEMZvuITlEsasT<2-ox;`SeMdQN@w`I z-Y(Fo%C%yw$)bl+ugKGkb=V?8)k__~*IQPgkiMVHSyLv~%Q=h5QstBW3oETZs}>=B zW_y6L^mN*hUN+z+KtfrqeX#V5T$TeM%4p~|xmvl5yx;^F4F|^yLx-6;Sm-QL=^g(d zZ^z&~WZwmKd<vZfKvoB(UNs<K@}1EWE9IMHNI=7sA)cl+XqXa$N|BZ)2q8{^>Kep` z3};BgC8L3A6yR_yi5oKE2t^H$#5mGb84c!s^ao=(u>NenxIK|odMgWiwkEu*V%}8= z@0wfQHPX`b@<FoWe*EI&myW-1{BIq_bB?@A2QMC+tog`MA#EP}^1*xHk8|uz8bTJW zOh3r0NTq?awvj3sFAtcaZO|E9jVTWdxJl5%HnzefVZt3oC&=s^F>*Yb3KP3Y=6RYN z7;>=fqGXveIjhNr96qmK+7yR9499sfXh#@=pooZCv}cE0@V=7HCMohSnxkmIVFSpQ zN}_nBU_@vim#31e9E|>gXIZ!+hUu`Ul;m_p;y+2Ys`(Nuu0!Z@kTq;=#XcU?9cs+r z>s$_)%;3+Y;6jRhD&a!@SR;WCM_8YGXpx1X#zYMS&Y(~xo}PR@;cUL;Y(`MtM1EZ? zziv7sp5Kh9`p*3E>|b9fsm8Q=5GZM47DHrg&IGMAN}xX(Nbz7U|Nj9a@dJRA3PU0b zEl+cMId_X^_Z0#1$Y5W8aAP{?*k1q%GHdnzGN42FAGq4F@CHt>cwz+kK{T6;Oco&x zofSrlG*r~1MM&@k(P5)V%FtqHhIC?w!AvSWgPx*UUT>JFza20pMF59|Oh0z^=DZ6R zH*41hX1O5EWX{=OyHWrhQ|`(0*`n!wA~urtUaFIscC&cSGW|?p^u^;SA<@rGoQ3%Z zdWPE$&~xoHJRQhmt31MRFFBj%t!0yeS?h{9Yfi#ie9H=_ikP)wYWXc|117q(6L{3> zT|D8HQTr429;~GJO+RSsU1j9(VNic7<EFPuv^r`SdnN9?Ttfgd8EhKsZqlsmun5i7 zrw@AEGVCyWQ5|UzNnO-&XDrWd`_B7~B^C#+^Wvka7#7MaJ_RuPdvpZH)D~ty&EwHH zY4IogEz)>N(vzf}<7%=BW+TfVpn;aeCrz^W#KvHP-Y<FLDc61)a9WueC7{{0S!e(D z`E1X`V^bB0?A5ojSI^~Fe3-xd;+{_xEN_qJZzL=aYo-^@PZq?SjZ^E8M6Hb+2Jj~3 zpt*$cbS!*?FVjl*1~6Gb+Zps=;(=&G&(gG^I<69RsQ(rnqC%d*3Oqe4wNl4mK`sl) zogxX;^BE)DAxoTrIn1z=g4~qt*Qw(*1``9C-f4&Yyq@t#j~}*Q(wu?Q&MIy#rOv7V z0=QsSDFz$*eU3H~LdU`TjO3`8HHvL7zej0$?}GYm*28tOL99xIfyJW>B6c0(egbu( zc$0Z5CX-F880{;*M@5K?5lH~Uqt^G(Wiwp@0I<)p=2^n5l2rl7=HXGXKgdk3lDRDO zDRyb=MPT|q=KW}ueKV34cBXiTOEZbRLh@7Ayn-gt8+b1Z3+AerT1T>(MD@m4^~OZ? z=3CX9K}aVY)z~9oYR^ZGZFAXfqNWqs6|rngr^;K|m2-t<SDw54T)eOju1T`k=%voT zDz2Qcz_#^D_T}u!;MJ#Idn)c~NVr;KuGTqEakOdcKbQ=;+dnf2%c>w1a#hZ|iYJ#} zUGdtAsmMpJCgi&+Z)XVExe13i=I~AxeB{{7C!>N)(P{!>Tw52&EK<9S_PEr+*Pvg6 zUjYgo{~VJB6>CKBIwj4jCy%-*2*8ZCSTU-gn|`ed-z5-MCLusrnR56h=|}-#$frm~ zbsztpP29idKBaa`UO*=CRf5PVB*d=K>=nVHN>0-xjAB5^KwFl4Zy-?Jhy+n57)bV> zOj;#;elkt^Es{)D_Ss^Xn{Dewa6Lkh7r+}X2=mtR$){(nP4n4>lNn&+vTJ9vYp09m zu?K2kau;l!XLBp39-ViUOt#OuntyH*@~V*JEC<{;%H|#U6DO~nzI=MB^&>|;;Kot* za|=q~vAe7ks=Ld~DW>vwWLW;d(bi(SX|Uq-W=qx%Q})embpC!u){X*OzZSM6L~mXA zUDn74kRd6)aN13&;kc`yWfg6z(CLTuu{Tu)jh^9(kAr4evZOD6KAM+W4|ihX@?tSa zqnAs`03|1pB#SgNp9Z1#BzX4|ef_7eOR`F3a3xwxqK0W0#fOkQL!-uZmbZ<hwkR&S zTKuizsde$<#)%BbEpwMmE`OtXD)60#SyvMb(ZBfICV0vaCnP)nW2hla_`M4W9?k0p zm}yQg|H!c`OuD466*LQPWo<S6$gtJK;{56l#z!c6e_@kmBI|CMDz9|%D%7L9IoQ2K z{^}&xOzIN0E-9vQnAAEH7_@spE~$cNn%LJ(vV1g?bGn(5%?uwurjun$3`tS=wA_gi zNgb$lG~Wt|^Y&?mTB_(G4PG1TKtj~}UfB0)cyis<?XPW*mo&u-S58OXdHn6i6KnUz z*6xk3g>CG<Pn=#2UcT{2!nKoO=EayeZMNJ`V)A7NNQ(&<b@+X;sD6iwyU|&ac17HS zb4^FnQp^{0{XQ1=qWsI$p9D%kVfy_!>u9}q7oryBkh;*Z(1ige)f=c4oTVQr9G`-) zv>YE$6<Wp*ecn%78c?cqp!}4&gC;{x%F+Y{StY^vh_TD4M;WRCQ8%20i#EQF6nRjG z8AgoTjR%YQZ^$5{H6T8PHq>f-QxG35NNERDc@!*0*;RMM00gPfgKA-Uo<k)_0yWE6 zDi6C@P_HmF-1<I+>q+5Z;qL^=C24ioS_o$&#^kUSlo5DLz(87Fu3fgkU>@<EEW01w zwY!@kW5y7Pwdf-)qnk9Lpfsl?K`253!I+J6x^(&qfgRbOk}kwyYe<(?0SjkWPqofE zRuPJBAkDJ<8}`Z8Syw$UZ&A4v^eO79XULi9h?mX5PHW@kjc-_H-L;_4J~s)T<^Kp( zK=!hK{5)H56;q_A+>aeDis_Vl7hBK3A%yljUpKS%gIyEF@!W^UGsuY3anbQo4wIKL zhwQKAwzUXX3)(EgO-okWD$`9@LE8$`%@r0p$NFn9y)PJ$Dw;eRI|5z+wqxOa_K{1l z*+vx)3;>9JC2V$H3Y%?OlFe4uT`>E){zd9ejuMM~5CeBlamlZO#Xd;DBsu@A!MTR5 zrao08qSy$I5O7T4s+H^CBj6&I<X6g7!``<b?)1t+6^3n7)_0Puup#H@^nS}nj|;~2 z67J*N9jqcR$fl?gSLW@Ltxma>(^BGPDAT#Rm-()f^jZ#@4WCI;yCLj33tY~&wkG+t zNLvg+VTYm=|D6X%R~1w2^HL_YTcVE<v`@h>DGPVfF4aQY)bpSqYQ_y36T*VbF$*Ri zSh**jj@EAY$RTY%DRl*kXl73*dqN{xRG4->vm?orQp*FGbZo1R0IbHc<!?r7wboTK z>@kU57XhFq8joyn^$6v6Bl$6X76b?Uv(n8apN+cKE^Tl{F6J<)LoLdI+BgV3m_Aa= zA(ChS0QAyg07B5t0Mp(s0wERwkcmDK@vo7OZzBZg_k<>Rm!7;2G|_iagnU`cDLzX5 zl`fx7W>L$iECCFUX{5>dfV!4eRzQqH0L1KlVebU^_exH<>2}*M1uohMMS7OEkKt8g zIX+F(Qs716IvBh#P$58;1LcU1)0dMGWRyNff)sK>NHwf|F6vshG^F%vNhspP@CwJm zkC3}m^cq=IHt_FgRRMn2b{8t3Ln(7ZDuWiLA99%h7)Vx+PMK8CEPv|8=iJ@!H`v-n z#34KMSPDHx1?|4?`(*ZqRL8pS24jYGRbgnf+q|NFJz<~11D{1di`7gFO-yLofhdd* z>9x;q);d*^(Sm%)=$?dljFfwPv4;jT1Vro&`29eO`5bdFcn+2oBE>O*L&0c&B)nvV zPW~K~Zm@6a<bi>bhUe~9?;IXQoD>RF5`cCT7D3oX_0%xpe=4ZlC)xl{4Yu^n9~mJ? z=qPDdYfn1-2vQESLvFnFm$)tNK_bh>GpTM8jQ^1CFc+d9;fzaGRM*KqK&7-&sC9pg zArJp1O0(4)B-*ko%O;jhMy{T}dVcaev&*`)Z+ssj{BL?~(^TJYZk^8iu%v0mG+WX# zUr=;q;PQa9jk4#hW!IO@w0*BEUa%h9DML9be*Kxr{#j?`d_h&Tx;<Xd5p{LUl~*Oo zeX(-i^x1g%`iqCgcTPl9x1W}o0QnnzVEm&eK3umy?j~FJPgSoK?YyLE&*o)>wf)}9 zzn<{~lx9+W9G01*E{ERC|EIXCi)rh+<LBD<_&c^^8v@2aLqOoBVG;SDWrQsyg;2G0 zBV-@dCNE7`KqZA8!<bl<(rH?vcB<H0r>-h{m_{^BqM9`Au~nWnX_5m-PEE7)X?xg< zu`eOYq-nq3xwdf%X<s(&KK#$Q=lWisd(Qu!kN?*XkJJYwbEV%fz!`+tm3#CWt$Q~= zReSvGG;&A#wRYGyXh$v(mEth<J&=-$T08hC_K$jnr4HNohm+MK1`Z}Wy0orm_8;uL z6R4`zU;#%1Zdut#>+MME(z&%r67JUi$l}GH_k9v+$~2!@i!h)GeS*5*x|;Dc*du#& zqgK{bKh)2}2U~sBZj*|uXnC+IAv?1}^s&>h<2u0SkmIa#+MvGhp!iN@-?$^#(z`Oe zDGz?8ssn#I4_oX>DF3horno#!pek77BK{g$75+JCe65&8^=x{6WGD^)AC2crMSs_< znj{c85lvEQz@ETQMcU4LYxs{`5Z4)rLXG`k7D`4n!FIolD`mqH7F4&p#!)R91;E{T zR!!vD@HEw15a7>jsQGrN8SX)=VD?BN)A-_Agy<J{Jzx4b)bOkRCG*{(mDcr8cgEAb zdpaezX-;0(&(o$k;w-km&4Te!b@Mr!_2wQN=p+|bH(8lOr_E7wFL(0thPKjO_Rgo$ z5hJcqqX!dlR~4_1YOCB)B9tUJo&(al^7~P_m)yBrixD~Q7?IQRD{^Pco^;PYwfjq{ zz)IT+!gh9L`xEHPPIR5;{KyM>uw%cXySm5(>|6G0kR6A3Q>DHgp0B}ObkN~|Tee>5 zc_Qi7x3Z_PL7u{9n*IDL$rOp^1=xmMNKd_{xdVb7y4=B!Nx>Jr@;f~mJI8)>v7{fV z45&Ge7ER;VB`1gS={C7zQupSTOL(6IA259Kv5%v*zqq>8|0i?(z^S!p-;Fa+SJ18O zQSNCzzH;t^!AxWCTI5tFa0)uc8~z7*uL#$1M}3T_&gb5L`Im_7(Xo6f6X?R88^sUP zR8zej*867n>2~Kwf!fn8Kvt2+!+w%c)a(E&QoUQw4-dm$P?OQ&fuu2zbWHpa*G7}h z3HqfBpkQ<$`NHGDO<%%)+URM|@|jxL$T361F{y7dr)7^^QmM-%)OOkSU5dFml6jJA zBtIk3aT4EQ?md#<klX}86ako!UI6+{&WE5+SKy6?$yJ?Z9sbN8{e|TBBswOSR-OHo zrx}uUl6xfmB!46MJIOyuv`f}Q=Kf8hmC$-J)>70Exj`%7XosrmNwj?$EeEwkM$vG{ zwh_6{3LWFA*3oH6xR$Cv%QCIJqtI1x@2$90RC<G>*RFaF_&&>yvKq6@9pdx8M)Gx# zYS?DNQfO#9!Xl<=Vfx@YhNMjgVVlEZf5XC1!F0+)5aJL+*elD}#mMCWzTCHT$r4Bi zp4^lN>Tlb!X$d5GKnvH~`T9J7fa{lImOxUdGi4h=o?A&e3IR9DBA+2X*=f~z<d9K_ zNtv*M9+@b_-149m@dF1sE*cJH<40EGM{bU-oL-sv-D_*{QyKHXoyN9o<I&Z|qaW0) zs6W)NHGVl`#tWuPHV|1lRtN;-fRRrmWX<xWyg>5dd5cND*DWs@%QJbw^usYrr&h!# zpEnA12|yP2YUF3YLl?_v(J>2%)kDU1Sa|$EkM<r}KE5T8<b%@tqOp7&je>ML__>!i zaXEBDE%s#HO{?yvqQmq)QwZ=zD;SeC)>9z>Nw=7?Z+R4!>}ceGlt(Qza&4j3lm`j{ zzl;~+`*7N%iANqR#QgHG6%WZ?tHmXgtl$1m4|PEZVmUnC=M3OddwkdD-k4i#{pssl z9;f$=Vfjc4z8XBI6YaYhw`=uG*4?=3ZrsA#_26w$t4%zO^*xz&$5-9)qQm8FDTLj) zQiueA7Yz()z-GH-qSQ>t6~a<JO+ag0@Ri!{K6Cag2JWjI;5~g5xe{YE#A@8<3QDe= zk>7Rg6&+&4xf3XbF$#&BJLCO^nDLFcpvA1pBP<Ey6HG`fR_0%&-r~Q76|EmNu9xm= z51eRQ#e}c2a&WnX9gU}W5}9gU^2lTMfShMXU=>}SEys<Uj`=8-Hk`StF*xT#^e_b= zHKQ89wEGH77AdT@N8*=}vt>a~mMojTjgs8{3g%}Su5ur0SZvXigBR(YNZZoI-%kE| z@^;&al~gADT+wMn2MtDk9W->0+Gy4{{a-NP>v2(!WBlLG8K2luy0_R_MQ%(=<C7EP z6EuI(g`rQ~-ZDdPI~-nChjhy+JO}<4Ts8+K1C$dCb@v5a2GyLH*iSB-*v(~+B4RVx z<x2!geYAKFpzQw#kEtKy<5X8k9>Y1&D#X_^@6_YX)ivJK%3fs5k74yX&p$g0v7r<R z8%r&eZ^4JES+<s!xj50-+cpxbW(?kv>{Knh^d@J!7LqyMuQ}{(UeF<ko@be!$+^qW zQQ&f3#(kWbnwm^2{A~#Wg)$Et>5OVr8`6lXD2*|b3q!#<$$)Wm&q-Z)<)XrV&z}Et z{-G<=Q)<TEVRIdj^K;F~)njTZttik?K@y5E6a{6rrd(S*P|~XPt2uWn1^sv`rB+#_ z-=7O_#YV8>H4sFTF20u$X%DNH$2E*@aJ%W-^u4|C8=9RQ>r-!`F*pjPB`DT@hOz08 zhFJ^>!?z*!ZHUl@@NS6khVXqNqW8p!yQ1Nq7|e>nyP_>`I*rhV8O*!vblYPZj%@)_ zBq;<<ziYv51+k>eG;~@5sTGJDUo{q=wgl7do--aJwkb&SFw-)e*Zpt!vm$m|#1_A` zE}ATt+lVfn#WZY0tr+v;rTlrH5xarMFtw&*K4Z{WG#9U6VS$`gr_Wp83EkJ{5At*E z!V|@k*9hJ51%J}dHx2y@qsFenhiP)?N7C#EV2ID`KP+w~y!{={TkQtvVQ+u8^VUfN F^gnlxm0bV; diff --git a/Python314_4_x86_Template/Lib/pathlib/__pycache__/_os.cpython-314.pyc b/Python314_4_x86_Template/Lib/pathlib/__pycache__/_os.cpython-314.pyc deleted file mode 100644 index 82e92e40ef9e1b5c0823fd59f7008681f2d3788d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22511 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 TyjCwzyxP&aS-iGMK>U9I6zNJ- diff --git a/Python314_4_x86_Template/Lib/pathlib/_local.py b/Python314_4_x86_Template/Lib/pathlib/_local.py deleted file mode 100644 index 58e137f2a..000000000 --- a/Python314_4_x86_Template/Lib/pathlib/_local.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -This module exists so that pathlib objects pickled under Python 3.13 can be -unpickled in 3.14+. -""" - -from pathlib import * - -__all__ = [ - "UnsupportedOperation", - "PurePath", "PurePosixPath", "PureWindowsPath", - "Path", "PosixPath", "WindowsPath", -] diff --git a/Python314_4_x86_Template/Lib/pathlib/_os.py b/Python314_4_x86_Template/Lib/pathlib/_os.py deleted file mode 100644 index 039836941..000000000 --- a/Python314_4_x86_Template/Lib/pathlib/_os.py +++ /dev/null @@ -1,530 +0,0 @@ -""" -Low-level OS functionality wrappers used by pathlib. -""" - -from errno import * -from io import TextIOWrapper, text_encoding -from stat import S_ISDIR, S_ISREG, S_ISLNK, S_IMODE -import os -import sys -try: - import fcntl -except ImportError: - fcntl = None -try: - import posix -except ImportError: - posix = None -try: - import _winapi -except ImportError: - _winapi = None - - -def _get_copy_blocksize(infd): - """Determine blocksize for fastcopying on Linux. - Hopefully the whole file will be copied in a single call. - The copying itself should be performed in a loop 'till EOF is - reached (0 return) so a blocksize smaller or bigger than the actual - file size should not make any difference, also in case the file - content changes while being copied. - """ - try: - blocksize = max(os.fstat(infd).st_size, 2 ** 23) # min 8 MiB - except OSError: - blocksize = 2 ** 27 # 128 MiB - # On 32-bit architectures truncate to 1 GiB to avoid OverflowError, - # see gh-82500. - if sys.maxsize < 2 ** 32: - blocksize = min(blocksize, 2 ** 30) - return blocksize - - -if fcntl and hasattr(fcntl, 'FICLONE'): - def _ficlone(source_fd, target_fd): - """ - Perform a lightweight copy of two files, where the data blocks are - copied only when modified. This is known as Copy on Write (CoW), - instantaneous copy or reflink. - """ - fcntl.ioctl(target_fd, fcntl.FICLONE, source_fd) -else: - _ficlone = None - - -if posix and hasattr(posix, '_fcopyfile'): - def _fcopyfile(source_fd, target_fd): - """ - Copy a regular file content using high-performance fcopyfile(3) - syscall (macOS). - """ - posix._fcopyfile(source_fd, target_fd, posix._COPYFILE_DATA) -else: - _fcopyfile = None - - -if hasattr(os, 'copy_file_range'): - def _copy_file_range(source_fd, target_fd): - """ - Copy data from one regular mmap-like fd to another by using a - high-performance copy_file_range(2) syscall that gives filesystems - an opportunity to implement the use of reflinks or server-side - copy. - This should work on Linux >= 4.5 only. - """ - blocksize = _get_copy_blocksize(source_fd) - offset = 0 - while True: - sent = os.copy_file_range(source_fd, target_fd, blocksize, - offset_dst=offset) - if sent == 0: - break # EOF - offset += sent -else: - _copy_file_range = None - - -if hasattr(os, 'sendfile'): - def _sendfile(source_fd, target_fd): - """Copy data from one regular mmap-like fd to another by using - high-performance sendfile(2) syscall. - This should work on Linux >= 2.6.33 only. - """ - blocksize = _get_copy_blocksize(source_fd) - offset = 0 - while True: - sent = os.sendfile(target_fd, source_fd, offset, blocksize) - if sent == 0: - break # EOF - offset += sent -else: - _sendfile = None - - -if _winapi and hasattr(_winapi, 'CopyFile2'): - def copyfile2(source, target): - """ - Copy from one file to another using CopyFile2 (Windows only). - """ - _winapi.CopyFile2(source, target, 0) -else: - copyfile2 = None - - -def copyfileobj(source_f, target_f): - """ - Copy data from file-like object source_f to file-like object target_f. - """ - try: - source_fd = source_f.fileno() - target_fd = target_f.fileno() - except Exception: - pass # Fall through to generic code. - else: - try: - # Use OS copy-on-write where available. - if _ficlone: - try: - _ficlone(source_fd, target_fd) - return - except OSError as err: - if err.errno not in (EBADF, EOPNOTSUPP, ETXTBSY, EXDEV): - raise err - - # Use OS copy where available. - if _fcopyfile: - try: - _fcopyfile(source_fd, target_fd) - return - except OSError as err: - if err.errno not in (EINVAL, ENOTSUP): - raise err - if _copy_file_range: - try: - _copy_file_range(source_fd, target_fd) - return - except OSError as err: - if err.errno not in (ETXTBSY, EXDEV): - raise err - if _sendfile: - try: - _sendfile(source_fd, target_fd) - return - except OSError as err: - if err.errno != ENOTSOCK: - raise err - except OSError as err: - # Produce more useful error messages. - err.filename = source_f.name - err.filename2 = target_f.name - raise err - - # Last resort: copy with fileobj read() and write(). - read_source = source_f.read - write_target = target_f.write - while buf := read_source(1024 * 1024): - write_target(buf) - - -def magic_open(path, mode='r', buffering=-1, encoding=None, errors=None, - newline=None): - """ - Open the file pointed to by this path and return a file object, as - the built-in open() function does. - """ - text = 'b' not in mode - if text: - # Call io.text_encoding() here to ensure any warning is raised at an - # appropriate stack level. - encoding = text_encoding(encoding) - try: - return open(path, mode, buffering, encoding, errors, newline) - except TypeError: - pass - cls = type(path) - mode = ''.join(sorted(c for c in mode if c not in 'bt')) - if text: - try: - attr = getattr(cls, f'__open_{mode}__') - except AttributeError: - pass - else: - return attr(path, buffering, encoding, errors, newline) - elif encoding is not None: - raise ValueError("binary mode doesn't take an encoding argument") - elif errors is not None: - raise ValueError("binary mode doesn't take an errors argument") - elif newline is not None: - raise ValueError("binary mode doesn't take a newline argument") - - try: - attr = getattr(cls, f'__open_{mode}b__') - except AttributeError: - pass - else: - stream = attr(path, buffering) - if text: - stream = TextIOWrapper(stream, encoding, errors, newline) - return stream - - raise TypeError(f"{cls.__name__} can't be opened with mode {mode!r}") - - -def ensure_distinct_paths(source, target): - """ - Raise OSError(EINVAL) if the other path is within this path. - """ - # Note: there is no straightforward, foolproof algorithm to determine - # if one directory is within another (a particularly perverse example - # would be a single network share mounted in one location via NFS, and - # in another location via CIFS), so we simply checks whether the - # other path is lexically equal to, or within, this path. - if source == target: - err = OSError(EINVAL, "Source and target are the same path") - elif source in target.parents: - err = OSError(EINVAL, "Source path is a parent of target path") - else: - return - err.filename = str(source) - err.filename2 = str(target) - raise err - - -def ensure_different_files(source, target): - """ - Raise OSError(EINVAL) if both paths refer to the same file. - """ - try: - source_file_id = source.info._file_id - target_file_id = target.info._file_id - except AttributeError: - if source != target: - return - else: - try: - if source_file_id() != target_file_id(): - return - except (OSError, ValueError): - return - err = OSError(EINVAL, "Source and target are the same file") - err.filename = str(source) - err.filename2 = str(target) - raise err - - -def copy_info(info, target, follow_symlinks=True): - """Copy metadata from the given PathInfo to the given local path.""" - copy_times_ns = ( - hasattr(info, '_access_time_ns') and - hasattr(info, '_mod_time_ns') and - (follow_symlinks or os.utime in os.supports_follow_symlinks)) - if copy_times_ns: - t0 = info._access_time_ns(follow_symlinks=follow_symlinks) - t1 = info._mod_time_ns(follow_symlinks=follow_symlinks) - os.utime(target, ns=(t0, t1), follow_symlinks=follow_symlinks) - - # We must copy extended attributes before the file is (potentially) - # chmod()'ed read-only, otherwise setxattr() will error with -EACCES. - copy_xattrs = ( - hasattr(info, '_xattrs') and - hasattr(os, 'setxattr') and - (follow_symlinks or os.setxattr in os.supports_follow_symlinks)) - if copy_xattrs: - xattrs = info._xattrs(follow_symlinks=follow_symlinks) - for attr, value in xattrs: - try: - os.setxattr(target, attr, value, follow_symlinks=follow_symlinks) - except OSError as e: - if e.errno not in (EPERM, ENOTSUP, ENODATA, EINVAL, EACCES): - raise - - copy_posix_permissions = ( - hasattr(info, '_posix_permissions') and - (follow_symlinks or os.chmod in os.supports_follow_symlinks)) - if copy_posix_permissions: - posix_permissions = info._posix_permissions(follow_symlinks=follow_symlinks) - try: - os.chmod(target, posix_permissions, follow_symlinks=follow_symlinks) - except NotImplementedError: - # if we got a NotImplementedError, it's because - # * follow_symlinks=False, - # * lchown() is unavailable, and - # * either - # * fchownat() is unavailable or - # * fchownat() doesn't implement AT_SYMLINK_NOFOLLOW. - # (it returned ENOSUP.) - # therefore we're out of options--we simply cannot chown the - # symlink. give up, suppress the error. - # (which is what shutil always did in this circumstance.) - pass - - copy_bsd_flags = ( - hasattr(info, '_bsd_flags') and - hasattr(os, 'chflags') and - (follow_symlinks or os.chflags in os.supports_follow_symlinks)) - if copy_bsd_flags: - bsd_flags = info._bsd_flags(follow_symlinks=follow_symlinks) - try: - os.chflags(target, bsd_flags, follow_symlinks=follow_symlinks) - except OSError as why: - if why.errno not in (EOPNOTSUPP, ENOTSUP): - raise - - -class _PathInfoBase: - __slots__ = ('_path', '_stat_result', '_lstat_result') - - def __init__(self, path): - self._path = str(path) - - def __repr__(self): - path_type = "WindowsPath" if os.name == "nt" else "PosixPath" - return f"<{path_type}.info>" - - def _stat(self, *, follow_symlinks=True, ignore_errors=False): - """Return the status as an os.stat_result, or None if stat() fails and - ignore_errors is true.""" - if follow_symlinks: - try: - result = self._stat_result - except AttributeError: - pass - else: - if ignore_errors or result is not None: - return result - try: - self._stat_result = os.stat(self._path) - except (OSError, ValueError): - self._stat_result = None - if not ignore_errors: - raise - return self._stat_result - else: - try: - result = self._lstat_result - except AttributeError: - pass - else: - if ignore_errors or result is not None: - return result - try: - self._lstat_result = os.lstat(self._path) - except (OSError, ValueError): - self._lstat_result = None - if not ignore_errors: - raise - return self._lstat_result - - def _posix_permissions(self, *, follow_symlinks=True): - """Return the POSIX file permissions.""" - return S_IMODE(self._stat(follow_symlinks=follow_symlinks).st_mode) - - def _file_id(self, *, follow_symlinks=True): - """Returns the identifier of the file.""" - st = self._stat(follow_symlinks=follow_symlinks) - return st.st_dev, st.st_ino - - def _access_time_ns(self, *, follow_symlinks=True): - """Return the access time in nanoseconds.""" - return self._stat(follow_symlinks=follow_symlinks).st_atime_ns - - def _mod_time_ns(self, *, follow_symlinks=True): - """Return the modify time in nanoseconds.""" - return self._stat(follow_symlinks=follow_symlinks).st_mtime_ns - - if hasattr(os.stat_result, 'st_flags'): - def _bsd_flags(self, *, follow_symlinks=True): - """Return the flags.""" - return self._stat(follow_symlinks=follow_symlinks).st_flags - - if hasattr(os, 'listxattr'): - def _xattrs(self, *, follow_symlinks=True): - """Return the xattrs as a list of (attr, value) pairs, or an empty - list if extended attributes aren't supported.""" - try: - return [ - (attr, os.getxattr(self._path, attr, follow_symlinks=follow_symlinks)) - for attr in os.listxattr(self._path, follow_symlinks=follow_symlinks)] - except OSError as err: - if err.errno not in (EPERM, ENOTSUP, ENODATA, EINVAL, EACCES): - raise - return [] - - -class _WindowsPathInfo(_PathInfoBase): - """Implementation of pathlib.types.PathInfo that provides status - information for Windows paths. Don't try to construct it yourself.""" - __slots__ = ('_exists', '_is_dir', '_is_file', '_is_symlink') - - def exists(self, *, follow_symlinks=True): - """Whether this path exists.""" - if not follow_symlinks and self.is_symlink(): - return True - try: - return self._exists - except AttributeError: - if os.path.exists(self._path): - self._exists = True - return True - else: - self._exists = self._is_dir = self._is_file = False - return False - - def is_dir(self, *, follow_symlinks=True): - """Whether this path is a directory.""" - if not follow_symlinks and self.is_symlink(): - return False - try: - return self._is_dir - except AttributeError: - if os.path.isdir(self._path): - self._is_dir = self._exists = True - return True - else: - self._is_dir = False - return False - - def is_file(self, *, follow_symlinks=True): - """Whether this path is a regular file.""" - if not follow_symlinks and self.is_symlink(): - return False - try: - return self._is_file - except AttributeError: - if os.path.isfile(self._path): - self._is_file = self._exists = True - return True - else: - self._is_file = False - return False - - def is_symlink(self): - """Whether this path is a symbolic link.""" - try: - return self._is_symlink - except AttributeError: - self._is_symlink = os.path.islink(self._path) - return self._is_symlink - - -class _PosixPathInfo(_PathInfoBase): - """Implementation of pathlib.types.PathInfo that provides status - information for POSIX paths. Don't try to construct it yourself.""" - __slots__ = () - - def exists(self, *, follow_symlinks=True): - """Whether this path exists.""" - st = self._stat(follow_symlinks=follow_symlinks, ignore_errors=True) - if st is None: - return False - return True - - def is_dir(self, *, follow_symlinks=True): - """Whether this path is a directory.""" - st = self._stat(follow_symlinks=follow_symlinks, ignore_errors=True) - if st is None: - return False - return S_ISDIR(st.st_mode) - - def is_file(self, *, follow_symlinks=True): - """Whether this path is a regular file.""" - st = self._stat(follow_symlinks=follow_symlinks, ignore_errors=True) - if st is None: - return False - return S_ISREG(st.st_mode) - - def is_symlink(self): - """Whether this path is a symbolic link.""" - st = self._stat(follow_symlinks=False, ignore_errors=True) - if st is None: - return False - return S_ISLNK(st.st_mode) - - -PathInfo = _WindowsPathInfo if os.name == 'nt' else _PosixPathInfo - - -class DirEntryInfo(_PathInfoBase): - """Implementation of pathlib.types.PathInfo that provides status - information by querying a wrapped os.DirEntry object. Don't try to - construct it yourself.""" - __slots__ = ('_entry',) - - def __init__(self, entry): - super().__init__(entry.path) - self._entry = entry - - def _stat(self, *, follow_symlinks=True, ignore_errors=False): - try: - return self._entry.stat(follow_symlinks=follow_symlinks) - except OSError: - if not ignore_errors: - raise - return None - - def exists(self, *, follow_symlinks=True): - """Whether this path exists.""" - if not follow_symlinks: - return True - return self._stat(ignore_errors=True) is not None - - def is_dir(self, *, follow_symlinks=True): - """Whether this path is a directory.""" - try: - return self._entry.is_dir(follow_symlinks=follow_symlinks) - except OSError: - return False - - def is_file(self, *, follow_symlinks=True): - """Whether this path is a regular file.""" - try: - return self._entry.is_file(follow_symlinks=follow_symlinks) - except OSError: - return False - - def is_symlink(self): - """Whether this path is a symbolic link.""" - try: - return self._entry.is_symlink() - except OSError: - return False diff --git a/Python314_4_x86_Template/Lib/pathlib/types.py b/Python314_4_x86_Template/Lib/pathlib/types.py deleted file mode 100644 index d8f5c34a1..000000000 --- a/Python314_4_x86_Template/Lib/pathlib/types.py +++ /dev/null @@ -1,430 +0,0 @@ -""" -Protocols for supporting classes in pathlib. -""" - -# This module also provides abstract base classes for rich path objects. -# These ABCs are a *private* part of the Python standard library, but they're -# made available as a PyPI package called "pathlib-abc". It's possible they'll -# become an official part of the standard library in future. -# -# Three ABCs are provided -- _JoinablePath, _ReadablePath and _WritablePath - - -from abc import ABC, abstractmethod -from glob import _PathGlobber -from io import text_encoding -from pathlib._os import magic_open, ensure_distinct_paths, ensure_different_files, copyfileobj -from pathlib import PurePath, Path -from typing import Optional, Protocol, runtime_checkable - - -def _explode_path(path, split): - """ - Split the path into a 2-tuple (anchor, parts), where *anchor* is the - uppermost parent of the path (equivalent to path.parents[-1]), and - *parts* is a reversed list of parts following the anchor. - """ - parent, name = split(path) - names = [] - while path != parent: - names.append(name) - path = parent - parent, name = split(path) - return path, names - - -@runtime_checkable -class _PathParser(Protocol): - """Protocol for path parsers, which do low-level path manipulation. - - Path parsers provide a subset of the os.path API, specifically those - functions needed to provide JoinablePath functionality. Each JoinablePath - subclass references its path parser via a 'parser' class attribute. - """ - - sep: str - altsep: Optional[str] - def split(self, path: str) -> tuple[str, str]: ... - def splitext(self, path: str) -> tuple[str, str]: ... - def normcase(self, path: str) -> str: ... - - -@runtime_checkable -class PathInfo(Protocol): - """Protocol for path info objects, which support querying the file type. - Methods may return cached results. - """ - def exists(self, *, follow_symlinks: bool = True) -> bool: ... - def is_dir(self, *, follow_symlinks: bool = True) -> bool: ... - def is_file(self, *, follow_symlinks: bool = True) -> bool: ... - def is_symlink(self) -> bool: ... - - -class _JoinablePath(ABC): - """Abstract base class for pure path objects. - - This class *does not* provide several magic methods that are defined in - its implementation PurePath. They are: __init__, __fspath__, __bytes__, - __reduce__, __hash__, __eq__, __lt__, __le__, __gt__, __ge__. - """ - __slots__ = () - - @property - @abstractmethod - def parser(self): - """Implementation of pathlib._types.Parser used for low-level path - parsing and manipulation. - """ - raise NotImplementedError - - @abstractmethod - def with_segments(self, *pathsegments): - """Construct a new path object from any number of path-like objects. - Subclasses may override this method to customize how new path objects - are created from methods like `iterdir()`. - """ - raise NotImplementedError - - @abstractmethod - def __str__(self): - """Return the string representation of the path, suitable for - passing to system calls.""" - raise NotImplementedError - - @property - def anchor(self): - """The concatenation of the drive and root, or ''.""" - return _explode_path(str(self), self.parser.split)[0] - - @property - def name(self): - """The final path component, if any.""" - return self.parser.split(str(self))[1] - - @property - def suffix(self): - """ - The final component's last suffix, if any. - - This includes the leading period. For example: '.txt' - """ - return self.parser.splitext(self.name)[1] - - @property - def suffixes(self): - """ - A list of the final component's suffixes, if any. - - These include the leading periods. For example: ['.tar', '.gz'] - """ - split = self.parser.splitext - stem, suffix = split(self.name) - suffixes = [] - while suffix: - suffixes.append(suffix) - stem, suffix = split(stem) - return suffixes[::-1] - - @property - def stem(self): - """The final path component, minus its last suffix.""" - return self.parser.splitext(self.name)[0] - - def with_name(self, name): - """Return a new path with the file name changed.""" - split = self.parser.split - if split(name)[0]: - raise ValueError(f"Invalid name {name!r}") - path = str(self) - path = path.removesuffix(split(path)[1]) + name - return self.with_segments(path) - - def with_stem(self, stem): - """Return a new path with the stem changed.""" - suffix = self.suffix - if not suffix: - return self.with_name(stem) - elif not stem: - # If the suffix is non-empty, we can't make the stem empty. - raise ValueError(f"{self!r} has a non-empty suffix") - else: - return self.with_name(stem + suffix) - - def with_suffix(self, suffix): - """Return a new path with the file suffix changed. If the path - has no suffix, add given suffix. If the given suffix is an empty - string, remove the suffix from the path. - """ - stem = self.stem - if not stem: - # If the stem is empty, we can't make the suffix non-empty. - raise ValueError(f"{self!r} has an empty name") - elif suffix and not suffix.startswith('.'): - raise ValueError(f"Invalid suffix {suffix!r}") - else: - return self.with_name(stem + suffix) - - @property - def parts(self): - """An object providing sequence-like access to the - components in the filesystem path.""" - anchor, parts = _explode_path(str(self), self.parser.split) - if anchor: - parts.append(anchor) - return tuple(reversed(parts)) - - def joinpath(self, *pathsegments): - """Combine this path with one or several arguments, and return a - new path representing either a subpath (if all arguments are relative - paths) or a totally different path (if one of the arguments is - anchored). - """ - return self.with_segments(str(self), *pathsegments) - - def __truediv__(self, key): - try: - return self.with_segments(str(self), key) - except TypeError: - return NotImplemented - - def __rtruediv__(self, key): - try: - return self.with_segments(key, str(self)) - except TypeError: - return NotImplemented - - @property - def parent(self): - """The logical parent of the path.""" - path = str(self) - parent = self.parser.split(path)[0] - if path != parent: - return self.with_segments(parent) - return self - - @property - def parents(self): - """A sequence of this path's logical parents.""" - split = self.parser.split - path = str(self) - parent = split(path)[0] - parents = [] - while path != parent: - parents.append(self.with_segments(parent)) - path = parent - parent = split(path)[0] - return tuple(parents) - - def full_match(self, pattern): - """ - Return True if this path matches the given glob-style pattern. The - pattern is matched against the entire path. - """ - case_sensitive = self.parser.normcase('Aa') == 'Aa' - globber = _PathGlobber(self.parser.sep, case_sensitive, recursive=True) - match = globber.compile(pattern, altsep=self.parser.altsep) - return match(str(self)) is not None - - -class _ReadablePath(_JoinablePath): - """Abstract base class for readable path objects. - - The Path class implements this ABC for local filesystem paths. Users may - create subclasses to implement readable virtual filesystem paths, such as - paths in archive files or on remote storage systems. - """ - __slots__ = () - - @property - @abstractmethod - def info(self): - """ - A PathInfo object that exposes the file type and other file attributes - of this path. - """ - raise NotImplementedError - - @abstractmethod - def __open_rb__(self, buffering=-1): - """ - Open the file pointed to by this path for reading in binary mode and - return a file object, like open(mode='rb'). - """ - raise NotImplementedError - - def read_bytes(self): - """ - Open the file in bytes mode, read it, and close the file. - """ - with magic_open(self, mode='rb', buffering=0) as f: - return f.read() - - def read_text(self, encoding=None, errors=None, newline=None): - """ - Open the file in text mode, read it, and close the file. - """ - # Call io.text_encoding() here to ensure any warning is raised at an - # appropriate stack level. - encoding = text_encoding(encoding) - with magic_open(self, mode='r', encoding=encoding, errors=errors, newline=newline) as f: - return f.read() - - @abstractmethod - def iterdir(self): - """Yield path objects of the directory contents. - - The children are yielded in arbitrary order, and the - special entries '.' and '..' are not included. - """ - raise NotImplementedError - - def glob(self, pattern, *, recurse_symlinks=True): - """Iterate over this subtree and yield all existing files (of any - kind, including directories) matching the given relative pattern. - """ - anchor, parts = _explode_path(pattern, self.parser.split) - if anchor: - raise NotImplementedError("Non-relative patterns are unsupported") - elif not parts: - raise ValueError(f"Unacceptable pattern: {pattern!r}") - elif not recurse_symlinks: - raise NotImplementedError("recurse_symlinks=False is unsupported") - case_sensitive = self.parser.normcase('Aa') == 'Aa' - globber = _PathGlobber(self.parser.sep, case_sensitive, recursive=True) - select = globber.selector(parts) - return select(self.joinpath('')) - - def walk(self, top_down=True, on_error=None, follow_symlinks=False): - """Walk the directory tree from this directory, similar to os.walk().""" - paths = [self] - while paths: - path = paths.pop() - if isinstance(path, tuple): - yield path - continue - dirnames = [] - filenames = [] - if not top_down: - paths.append((path, dirnames, filenames)) - try: - for child in path.iterdir(): - if child.info.is_dir(follow_symlinks=follow_symlinks): - if not top_down: - paths.append(child) - dirnames.append(child.name) - else: - filenames.append(child.name) - except OSError as error: - if on_error is not None: - on_error(error) - if not top_down: - while not isinstance(paths.pop(), tuple): - pass - continue - if top_down: - yield path, dirnames, filenames - paths += [path.joinpath(d) for d in reversed(dirnames)] - - @abstractmethod - def readlink(self): - """ - Return the path to which the symbolic link points. - """ - raise NotImplementedError - - def copy(self, target, **kwargs): - """ - Recursively copy this file or directory tree to the given destination. - """ - ensure_distinct_paths(self, target) - target._copy_from(self, **kwargs) - return target.joinpath() # Empty join to ensure fresh metadata. - - def copy_into(self, target_dir, **kwargs): - """ - Copy this file or directory tree into the given existing directory. - """ - name = self.name - if not name: - raise ValueError(f"{self!r} has an empty name") - return self.copy(target_dir / name, **kwargs) - - -class _WritablePath(_JoinablePath): - """Abstract base class for writable path objects. - - The Path class implements this ABC for local filesystem paths. Users may - create subclasses to implement writable virtual filesystem paths, such as - paths in archive files or on remote storage systems. - """ - __slots__ = () - - @abstractmethod - def symlink_to(self, target, target_is_directory=False): - """ - Make this path a symlink pointing to the target path. - Note the order of arguments (link, target) is the reverse of os.symlink. - """ - raise NotImplementedError - - @abstractmethod - def mkdir(self): - """ - Create a new directory at this given path. - """ - raise NotImplementedError - - @abstractmethod - def __open_wb__(self, buffering=-1): - """ - Open the file pointed to by this path for writing in binary mode and - return a file object, like open(mode='wb'). - """ - raise NotImplementedError - - def write_bytes(self, data): - """ - Open the file in bytes mode, write to it, and close the file. - """ - # type-check for the buffer interface before truncating the file - view = memoryview(data) - with magic_open(self, mode='wb') as f: - return f.write(view) - - def write_text(self, data, encoding=None, errors=None, newline=None): - """ - Open the file in text mode, write to it, and close the file. - """ - # Call io.text_encoding() here to ensure any warning is raised at an - # appropriate stack level. - encoding = text_encoding(encoding) - if not isinstance(data, str): - raise TypeError('data must be str, not %s' % - data.__class__.__name__) - with magic_open(self, mode='w', encoding=encoding, errors=errors, newline=newline) as f: - return f.write(data) - - def _copy_from(self, source, follow_symlinks=True): - """ - Recursively copy the given path to this path. - """ - stack = [(source, self)] - while stack: - src, dst = stack.pop() - if not follow_symlinks and src.info.is_symlink(): - dst.symlink_to(str(src.readlink()), src.info.is_dir()) - elif src.info.is_dir(): - children = src.iterdir() - dst.mkdir() - for child in children: - stack.append((child, dst.joinpath(child.name))) - else: - ensure_different_files(src, dst) - with magic_open(src, 'rb') as source_f: - with magic_open(dst, 'wb') as target_f: - copyfileobj(source_f, target_f) - - -_JoinablePath.register(PurePath) -_ReadablePath.register(Path) -_WritablePath.register(Path) diff --git a/Python314_4_x86_Template/Lib/pdb.py b/Python314_4_x86_Template/Lib/pdb.py deleted file mode 100644 index 903baeb85..000000000 --- a/Python314_4_x86_Template/Lib/pdb.py +++ /dev/null @@ -1,3678 +0,0 @@ -""" -The Python Debugger Pdb -======================= - -To use the debugger in its simplest form: - - >>> import pdb - >>> pdb.run('<a statement>') - -The debugger's prompt is '(Pdb) '. This will stop in the first -function call in <a statement>. - -Alternatively, if a statement terminated with an unhandled exception, -you can use pdb's post-mortem facility to inspect the contents of the -traceback: - - >>> <a statement> - <exception traceback> - >>> import pdb - >>> pdb.pm() - -The commands recognized by the debugger are listed in the next -section. Most can be abbreviated as indicated; e.g., h(elp) means -that 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel', -nor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in -square brackets. Alternatives in the command syntax are separated -by a vertical bar (|). - -A blank line repeats the previous command literally, except for -'list', where it lists the next 11 lines. - -Commands that the debugger doesn't recognize are assumed to be Python -statements and are executed in the context of the program being -debugged. Python statements can also be prefixed with an exclamation -point ('!'). This is a powerful way to inspect the program being -debugged; it is even possible to change variables or call functions. -When an exception occurs in such a statement, the exception name is -printed but the debugger's state is not changed. - -The debugger supports aliases, which can save typing. And aliases can -have parameters (see the alias help entry) which allows one a certain -level of adaptability to the context under examination. - -Multiple commands may be entered on a single line, separated by the -pair ';;'. No intelligence is applied to separating the commands; the -input is split at the first ';;', even if it is in the middle of a -quoted string. - -If a file ".pdbrc" exists in your home directory or in the current -directory, it is read in and executed as if it had been typed at the -debugger prompt. This is particularly useful for aliases. If both -files exist, the one in the home directory is read first and aliases -defined there can be overridden by the local file. This behavior can be -disabled by passing the "readrc=False" argument to the Pdb constructor. - -Aside from aliases, the debugger is not directly programmable; but it -is implemented as a class from which you can derive your own debugger -class, which you can make as fancy as you like. - - -Debugger commands -================= - -""" -# NOTE: the actual command documentation is collected from docstrings of the -# commands and is appended to __doc__ after the class has been defined. - -import os -import io -import re -import sys -import cmd -import bdb -import dis -import code -import glob -import json -import stat -import token -import types -import atexit -import codeop -import pprint -import signal -import socket -import typing -import asyncio -import inspect -import weakref -import builtins -import tempfile -import textwrap -import tokenize -import itertools -import traceback -import linecache -import selectors -import threading -import _colorize -import _pyrepl.utils - -from contextlib import ExitStack, closing, contextmanager -from types import CodeType -from warnings import deprecated - - -class Restart(Exception): - """Causes a debugger to be restarted for the debugged python program.""" - pass - -__all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace", - "post_mortem", "set_default_backend", "get_default_backend", "help"] - - -def find_first_executable_line(code): - """ Try to find the first executable line of the code object. - - Equivalently, find the line number of the instruction that's - after RESUME - - Return code.co_firstlineno if no executable line is found. - """ - prev = None - for instr in dis.get_instructions(code): - if prev is not None and prev.opname == 'RESUME': - if instr.positions.lineno is not None: - return instr.positions.lineno - return code.co_firstlineno - prev = instr - return code.co_firstlineno - -def find_function(funcname, filename): - cre = re.compile(r'def\s+%s(\s*\[.+\])?\s*[(]' % re.escape(funcname)) - try: - fp = tokenize.open(filename) - except OSError: - lines = linecache.getlines(filename) - if not lines: - return None - fp = io.StringIO(''.join(lines)) - funcdef = "" - funcstart = 0 - # consumer of this info expects the first line to be 1 - with fp: - for lineno, line in enumerate(fp, start=1): - if cre.match(line): - funcstart, funcdef = lineno, line - elif funcdef: - funcdef += line - - if funcdef: - try: - code = compile(funcdef, filename, 'exec') - except SyntaxError: - continue - # We should always be able to find the code object here - funccode = next(c for c in code.co_consts if - isinstance(c, CodeType) and c.co_name == funcname) - lineno_offset = find_first_executable_line(funccode) - return funcname, filename, funcstart + lineno_offset - 1 - return None - -def lasti2lineno(code, lasti): - linestarts = list(dis.findlinestarts(code)) - linestarts.reverse() - for i, lineno in linestarts: - if lasti >= i: - return lineno - return 0 - - -class _rstr(str): - """String that doesn't quote its repr.""" - def __repr__(self): - return self - - -class _ExecutableTarget: - filename: str - code: CodeType | str - namespace: dict - - -class _ScriptTarget(_ExecutableTarget): - def __init__(self, target): - self._check(target) - self._target = self._safe_realpath(target) - - # If PYTHONSAFEPATH (-P) is not set, sys.path[0] is the directory - # of pdb, and we should replace it with the directory of the script - if not sys.flags.safe_path: - sys.path[0] = os.path.dirname(self._target) - - @staticmethod - def _check(target): - """ - Check that target is plausibly a script. - """ - if not os.path.exists(target): - print(f'Error: {target} does not exist') - sys.exit(1) - if os.path.isdir(target): - print(f'Error: {target} is a directory') - sys.exit(1) - - @staticmethod - def _safe_realpath(path): - """ - Return the canonical path (realpath) if it is accessible from the userspace. - Otherwise (for example, if the path is a symlink to an anonymous pipe), - return the original path. - - See GH-142315. - """ - realpath = os.path.realpath(path) - return realpath if os.path.exists(realpath) else path - - def __repr__(self): - return self._target - - @property - def filename(self): - return self._target - - @property - def code(self): - # Open the file each time because the file may be modified - with io.open_code(self._target) as fp: - return f"exec(compile({fp.read()!r}, {self._target!r}, 'exec'))" - - @property - def namespace(self): - return dict( - __name__='__main__', - __file__=self._target, - __builtins__=__builtins__, - __spec__=None, - ) - - -class _ModuleTarget(_ExecutableTarget): - def __init__(self, target): - self._target = target - - import runpy - try: - _, self._spec, self._code = runpy._get_module_details(self._target) - except ImportError as e: - print(f"ImportError: {e}") - sys.exit(1) - except Exception: - traceback.print_exc() - sys.exit(1) - - def __repr__(self): - return self._target - - @property - def filename(self): - return self._code.co_filename - - @property - def code(self): - return self._code - - @property - def namespace(self): - return dict( - __name__='__main__', - __file__=os.path.normcase(os.path.abspath(self.filename)), - __package__=self._spec.parent, - __loader__=self._spec.loader, - __spec__=self._spec, - __builtins__=__builtins__, - ) - - -class _ZipTarget(_ExecutableTarget): - def __init__(self, target): - import runpy - - self._target = os.path.realpath(target) - sys.path.insert(0, self._target) - try: - _, self._spec, self._code = runpy._get_main_module_details() - except ImportError as e: - print(f"ImportError: {e}") - sys.exit(1) - except Exception: - traceback.print_exc() - sys.exit(1) - - def __repr__(self): - return self._target - - @property - def filename(self): - return self._code.co_filename - - @property - def code(self): - return self._code - - @property - def namespace(self): - return dict( - __name__='__main__', - __file__=os.path.normcase(os.path.abspath(self.filename)), - __package__=self._spec.parent, - __loader__=self._spec.loader, - __spec__=self._spec, - __builtins__=__builtins__, - ) - - -class _PdbInteractiveConsole(code.InteractiveConsole): - def __init__(self, ns, message): - self._message = message - super().__init__(locals=ns, local_exit=True) - - def write(self, data): - self._message(data, end='') - - -# Interaction prompt line will separate file and call info from code -# text using value of line_prefix string. A newline and arrow may -# be to your liking. You can set it once pdb is imported using the -# command "pdb.line_prefix = '\n% '". -# line_prefix = ': ' # Use this to get the old situation back -line_prefix = '\n-> ' # Probably a better default - - -# The default backend to use for Pdb instances if not specified -# Should be either 'settrace' or 'monitoring' -_default_backend = 'settrace' - - -def set_default_backend(backend): - """Set the default backend to use for Pdb instances.""" - global _default_backend - if backend not in ('settrace', 'monitoring'): - raise ValueError("Invalid backend: %s" % backend) - _default_backend = backend - - -def get_default_backend(): - """Get the default backend to use for Pdb instances.""" - return _default_backend - - -class Pdb(bdb.Bdb, cmd.Cmd): - _previous_sigint_handler = None - - # Limit the maximum depth of chained exceptions, we should be handling cycles, - # but in case there are recursions, we stop at 999. - MAX_CHAINED_EXCEPTION_DEPTH = 999 - - _file_mtime_table = {} - - _last_pdb_instance = None - - def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None, - nosigint=False, readrc=True, mode=None, backend=None, colorize=False): - bdb.Bdb.__init__(self, skip=skip, backend=backend if backend else get_default_backend()) - cmd.Cmd.__init__(self, completekey, stdin, stdout) - sys.audit("pdb.Pdb") - if stdout: - self.use_rawinput = 0 - self.prompt = '(Pdb) ' - self.aliases = {} - self.displaying = {} - self.mainpyfile = '' - self._wait_for_mainpyfile = False - self.tb_lineno = {} - self.mode = mode - self.colorize = colorize and _colorize.can_colorize(file=stdout or sys.stdout) - # Try to load readline if it exists - try: - import readline - # remove some common file name delimiters - readline.set_completer_delims(' \t\n`@#%^&*()=+[{]}\\|;:\'",<>?') - except ImportError: - pass - - self.allow_kbdint = False - self.nosigint = nosigint - # Consider these characters as part of the command so when the users type - # c.a or c['a'], it won't be recognized as a c(ontinue) command - self.identchars = cmd.Cmd.identchars + '=.[](),"\'+-*/%@&|<>~^' - - # Read ~/.pdbrc and ./.pdbrc - self.rcLines = [] - if readrc: - try: - with open(os.path.expanduser('~/.pdbrc'), encoding='utf-8') as rcFile: - self.rcLines.extend(rcFile) - except OSError: - pass - try: - with open(".pdbrc", encoding='utf-8') as rcFile: - self.rcLines.extend(rcFile) - except OSError: - pass - - self.commands = {} # associates a command list to breakpoint numbers - self.commands_defining = False # True while in the process of defining - # a command list - self.commands_bnum = None # The breakpoint number for which we are - # defining a list - - self.async_shim_frame = None - self.async_awaitable = None - - self._chained_exceptions = tuple() - self._chained_exception_index = 0 - - self._current_task = None - - def set_trace(self, frame=None, *, commands=None): - Pdb._last_pdb_instance = self - if frame is None: - frame = sys._getframe().f_back - - if commands is not None: - self.rcLines.extend(commands) - - super().set_trace(frame) - - async def set_trace_async(self, frame=None, *, commands=None): - if self.async_awaitable is not None: - # We are already in a set_trace_async call, do not mess with it - return - - if frame is None: - frame = sys._getframe().f_back - - # We need set_trace to set up the basics, however, this will call - # set_stepinstr() will we need to compensate for, because we don't - # want to trigger on calls - self.set_trace(frame, commands=commands) - # Changing the stopframe will disable trace dispatch on calls - self.stopframe = frame - # We need to stop tracing because we don't have the privilege to avoid - # triggering tracing functions as normal, as we are not already in - # tracing functions - self.stop_trace() - - self.async_shim_frame = sys._getframe() - self.async_awaitable = None - - while True: - self.async_awaitable = None - # Simulate a trace event - # This should bring up pdb and make pdb believe it's debugging the - # caller frame - self.trace_dispatch(frame, "opcode", None) - if self.async_awaitable is not None: - try: - if self.breaks: - with self.set_enterframe(frame): - # set_continue requires enterframe to work - self.set_continue() - self.start_trace() - await self.async_awaitable - except Exception: - self._error_exc() - else: - break - - self.async_shim_frame = None - - # start the trace (the actual command is already set by set_* calls) - if self.returnframe is None and self.stoplineno == -1 and not self.breaks: - # This means we did a continue without any breakpoints, we should not - # start the trace - return - - self.start_trace() - - def sigint_handler(self, signum, frame): - if self.allow_kbdint: - raise KeyboardInterrupt - self.message("\nProgram interrupted. (Use 'cont' to resume).") - self.set_step() - self.set_trace(frame) - - def reset(self): - bdb.Bdb.reset(self) - self.forget() - - def forget(self): - self.lineno = None - self.stack = [] - self.curindex = 0 - if hasattr(self, 'curframe') and self.curframe: - self.curframe.f_globals.pop('__pdb_convenience_variables', None) - self.curframe = None - self.tb_lineno.clear() - - def setup(self, f, tb): - self.forget() - self.stack, self.curindex = self.get_stack(f, tb) - while tb: - # when setting up post-mortem debugging with a traceback, save all - # the original line numbers to be displayed along the current line - # numbers (which can be different, e.g. due to finally clauses) - lineno = lasti2lineno(tb.tb_frame.f_code, tb.tb_lasti) - self.tb_lineno[tb.tb_frame] = lineno - tb = tb.tb_next - self.curframe = self.stack[self.curindex][0] - self.set_convenience_variable(self.curframe, '_frame', self.curframe) - if self._current_task: - self.set_convenience_variable(self.curframe, '_asynctask', self._current_task) - self._save_initial_file_mtime(self.curframe) - - if self._chained_exceptions: - self.set_convenience_variable( - self.curframe, - '_exception', - self._chained_exceptions[self._chained_exception_index], - ) - - if self.rcLines: - self.cmdqueue = [ - line for line in self.rcLines - if line.strip() and not line.strip().startswith("#") - ] - self.rcLines = [] - - @property - @deprecated("The frame locals reference is no longer cached. Use 'curframe.f_locals' instead.") - def curframe_locals(self): - return self.curframe.f_locals - - @curframe_locals.setter - @deprecated("Setting 'curframe_locals' no longer has any effect. Update the contents of 'curframe.f_locals' instead.") - def curframe_locals(self, value): - pass - - # Override Bdb methods - - def user_call(self, frame, argument_list): - """This method is called when there is the remote possibility - that we ever need to stop in this function.""" - if self._wait_for_mainpyfile: - return - if self.stop_here(frame): - self.message('--Call--') - self.interaction(frame, None) - - def user_line(self, frame): - """This function is called when we stop or break at this line.""" - if self._wait_for_mainpyfile: - if (self.mainpyfile != self.canonic(frame.f_code.co_filename)): - return - self._wait_for_mainpyfile = False - if self.trace_opcodes: - # GH-127321 - # We want to avoid stopping at an opcode that does not have - # an associated line number because pdb does not like it - if frame.f_lineno is None: - self.set_stepinstr() - return - self.bp_commands(frame) - self.interaction(frame, None) - - user_opcode = user_line - - def bp_commands(self, frame): - """Call every command that was set for the current active breakpoint - (if there is one). - - Returns True if the normal interaction function must be called, - False otherwise.""" - # self.currentbp is set in bdb in Bdb.break_here if a breakpoint was hit - if getattr(self, "currentbp", False) and \ - self.currentbp in self.commands: - currentbp = self.currentbp - self.currentbp = 0 - for line in self.commands[currentbp]: - self.cmdqueue.append(line) - self.cmdqueue.append(f'_pdbcmd_restore_lastcmd {self.lastcmd}') - - def user_return(self, frame, return_value): - """This function is called when a return trap is set here.""" - if self._wait_for_mainpyfile: - return - frame.f_locals['__return__'] = return_value - self.set_convenience_variable(frame, '_retval', return_value) - self.message('--Return--') - self.interaction(frame, None) - - def user_exception(self, frame, exc_info): - """This function is called if an exception occurs, - but only if we are to stop at or just below this level.""" - if self._wait_for_mainpyfile: - return - exc_type, exc_value, exc_traceback = exc_info - frame.f_locals['__exception__'] = exc_type, exc_value - self.set_convenience_variable(frame, '_exception', exc_value) - - # An 'Internal StopIteration' exception is an exception debug event - # issued by the interpreter when handling a subgenerator run with - # 'yield from' or a generator controlled by a for loop. No exception has - # actually occurred in this case. The debugger uses this debug event to - # stop when the debuggee is returning from such generators. - prefix = 'Internal ' if (not exc_traceback - and exc_type is StopIteration) else '' - self.message('%s%s' % (prefix, self._format_exc(exc_value))) - self.interaction(frame, exc_traceback) - - # General interaction function - def _cmdloop(self): - while True: - try: - # keyboard interrupts allow for an easy way to cancel - # the current command, so allow them during interactive input - self.allow_kbdint = True - self.cmdloop() - self.allow_kbdint = False - break - except KeyboardInterrupt: - self.message('--KeyboardInterrupt--') - - def _save_initial_file_mtime(self, frame): - """save the mtime of the all the files in the frame stack in the file mtime table - if they haven't been saved yet.""" - while frame: - filename = frame.f_code.co_filename - if filename not in self._file_mtime_table: - try: - self._file_mtime_table[filename] = os.path.getmtime(filename) - except Exception: - pass - frame = frame.f_back - - def _validate_file_mtime(self): - """Check if the source file of the current frame has been modified. - If so, give a warning and reset the modify time to current.""" - try: - filename = self.curframe.f_code.co_filename - mtime = os.path.getmtime(filename) - except Exception: - return - if (filename in self._file_mtime_table and - mtime != self._file_mtime_table[filename]): - self.message(f"*** WARNING: file '{filename}' was edited, " - "running stale code until the program is rerun") - self._file_mtime_table[filename] = mtime - - # Called before loop, handles display expressions - # Set up convenience variable containers - def _show_display(self): - displaying = self.displaying.get(self.curframe) - if displaying: - for expr, oldvalue in displaying.items(): - newvalue = self._getval_except(expr) - # check for identity first; this prevents custom __eq__ to - # be called at every loop, and also prevents instances whose - # fields are changed to be displayed - if newvalue is not oldvalue and newvalue != oldvalue: - displaying[expr] = newvalue - self.message('display %s: %s [old: %s]' % - (expr, self._safe_repr(newvalue, expr), - self._safe_repr(oldvalue, expr))) - - def _get_tb_and_exceptions(self, tb_or_exc): - """ - Given a tracecack or an exception, return a tuple of chained exceptions - and current traceback to inspect. - - This will deal with selecting the right ``__cause__`` or ``__context__`` - as well as handling cycles, and return a flattened list of exceptions we - can jump to with do_exceptions. - - """ - _exceptions = [] - if isinstance(tb_or_exc, BaseException): - traceback, current = tb_or_exc.__traceback__, tb_or_exc - - while current is not None: - if current in _exceptions: - break - _exceptions.append(current) - if current.__cause__ is not None: - current = current.__cause__ - elif ( - current.__context__ is not None and not current.__suppress_context__ - ): - current = current.__context__ - - if len(_exceptions) >= self.MAX_CHAINED_EXCEPTION_DEPTH: - self.message( - f"More than {self.MAX_CHAINED_EXCEPTION_DEPTH}" - " chained exceptions found, not all exceptions" - "will be browsable with `exceptions`." - ) - break - else: - traceback = tb_or_exc - return tuple(reversed(_exceptions)), traceback - - @contextmanager - def _hold_exceptions(self, exceptions): - """ - Context manager to ensure proper cleaning of exceptions references - - When given a chained exception instead of a traceback, - pdb may hold references to many objects which may leak memory. - - We use this context manager to make sure everything is properly cleaned - - """ - try: - self._chained_exceptions = exceptions - self._chained_exception_index = len(exceptions) - 1 - yield - finally: - # we can't put those in forget as otherwise they would - # be cleared on exception change - self._chained_exceptions = tuple() - self._chained_exception_index = 0 - - def _get_asyncio_task(self): - try: - task = asyncio.current_task() - except RuntimeError: - task = None - return task - - def interaction(self, frame, tb_or_exc): - # Restore the previous signal handler at the Pdb prompt. - if Pdb._previous_sigint_handler: - try: - signal.signal(signal.SIGINT, Pdb._previous_sigint_handler) - except ValueError: # ValueError: signal only works in main thread - pass - else: - Pdb._previous_sigint_handler = None - - self._current_task = self._get_asyncio_task() - - _chained_exceptions, tb = self._get_tb_and_exceptions(tb_or_exc) - if isinstance(tb_or_exc, BaseException): - assert tb is not None, "main exception must have a traceback" - with self._hold_exceptions(_chained_exceptions): - self.setup(frame, tb) - # We should print the stack entry if and only if the user input - # is expected, and we should print it right before the user input. - # We achieve this by appending _pdbcmd_print_frame_status to the - # command queue. If cmdqueue is not exhausted, the user input is - # not expected and we will not print the stack entry. - self.cmdqueue.append('_pdbcmd_print_frame_status') - self._cmdloop() - # If _pdbcmd_print_frame_status is not used, pop it out - if self.cmdqueue and self.cmdqueue[-1] == '_pdbcmd_print_frame_status': - self.cmdqueue.pop() - self.forget() - - def displayhook(self, obj): - """Custom displayhook for the exec in default(), which prevents - assignment of the _ variable in the builtins. - """ - # reproduce the behavior of the standard displayhook, not printing None - if obj is not None: - self.message(repr(obj)) - - @contextmanager - def _enable_multiline_input(self): - try: - import readline - except ImportError: - yield - return - - def input_auto_indent(): - last_index = readline.get_current_history_length() - last_line = readline.get_history_item(last_index) - if last_line: - if last_line.isspace(): - # If the last line is empty, we don't need to indent - return - - last_line = last_line.rstrip('\r\n') - indent = len(last_line) - len(last_line.lstrip()) - if last_line.endswith(":"): - indent += 4 - readline.insert_text(' ' * indent) - - completenames = self.completenames - try: - self.completenames = self.complete_multiline_names - readline.set_startup_hook(input_auto_indent) - yield - finally: - readline.set_startup_hook() - self.completenames = completenames - return - - def _exec_in_closure(self, source, globals, locals): - """ Run source code in closure so code object created within source - can find variables in locals correctly - - returns True if the source is executed, False otherwise - """ - - # Determine if the source should be executed in closure. Only when the - # source compiled to multiple code objects, we should use this feature. - # Otherwise, we can just raise an exception and normal exec will be used. - - code = compile(source, "<string>", "exec") - if not any(isinstance(const, CodeType) for const in code.co_consts): - return False - - # locals could be a proxy which does not support pop - # copy it first to avoid modifying the original locals - locals_copy = dict(locals) - - locals_copy["__pdb_eval__"] = { - "result": None, - "write_back": {} - } - - # If the source is an expression, we need to print its value - try: - compile(source, "<string>", "eval") - except SyntaxError: - pass - else: - source = "__pdb_eval__['result'] = " + source - - # Add write-back to update the locals - source = ("try:\n" + - textwrap.indent(source, " ") + "\n" + - "finally:\n" + - " __pdb_eval__['write_back'] = locals()") - - # Build a closure source code with freevars from locals like: - # def __pdb_outer(): - # var = None - # def __pdb_scope(): # This is the code object we want to execute - # nonlocal var - # <source> - # return __pdb_scope.__code__ - source_with_closure = ("def __pdb_outer():\n" + - "\n".join(f" {var} = None" for var in locals_copy) + "\n" + - " def __pdb_scope():\n" + - "\n".join(f" nonlocal {var}" for var in locals_copy) + "\n" + - textwrap.indent(source, " ") + "\n" + - " return __pdb_scope.__code__" - ) - - # Get the code object of __pdb_scope() - # The exec fills locals_copy with the __pdb_outer() function and we can call - # that to get the code object of __pdb_scope() - ns = {} - try: - exec(source_with_closure, {}, ns) - except Exception: - return False - code = ns["__pdb_outer"]() - - cells = tuple(types.CellType(locals_copy.get(var)) for var in code.co_freevars) - - try: - exec(code, globals, locals_copy, closure=cells) - except Exception: - return False - - # get the data we need from the statement - pdb_eval = locals_copy["__pdb_eval__"] - - # __pdb_eval__ should not be updated back to locals - pdb_eval["write_back"].pop("__pdb_eval__") - - # Write all local variables back to locals - locals.update(pdb_eval["write_back"]) - eval_result = pdb_eval["result"] - if eval_result is not None: - self.message(repr(eval_result)) - - return True - - def _exec_await(self, source, globals, locals): - """ Run source code that contains await by playing with async shim frame""" - # Put the source in an async function - source_async = ( - "async def __pdb_await():\n" + - textwrap.indent(source, " ") + '\n' + - " __pdb_locals.update(locals())" - ) - ns = globals | locals - # We use __pdb_locals to do write back - ns["__pdb_locals"] = locals - exec(source_async, ns) - self.async_awaitable = ns["__pdb_await"]() - - def _read_code(self, line): - buffer = line - is_await_code = False - code = None - try: - if (code := codeop.compile_command(line + '\n', '<stdin>', 'single')) is None: - # Multi-line mode - with self._enable_multiline_input(): - buffer = line - continue_prompt = "... " - while (code := codeop.compile_command(buffer, '<stdin>', 'single')) is None: - if self.use_rawinput: - try: - line = input(continue_prompt) - except (EOFError, KeyboardInterrupt): - self.lastcmd = "" - print('\n') - return None, None, False - else: - self.stdout.write(continue_prompt) - self.stdout.flush() - line = self.stdin.readline() - if not len(line): - self.lastcmd = "" - self.stdout.write('\n') - self.stdout.flush() - return None, None, False - else: - line = line.rstrip('\r\n') - if line.isspace(): - # empty line, just continue - buffer += '\n' - else: - buffer += '\n' + line - self.lastcmd = buffer - except SyntaxError as e: - # Maybe it's an await expression/statement - if ( - self.async_shim_frame is not None - and e.msg == "'await' outside function" - ): - is_await_code = True - else: - raise - - return code, buffer, is_await_code - - def default(self, line): - if line[:1] == '!': line = line[1:].strip() - locals = self.curframe.f_locals - globals = self.curframe.f_globals - try: - code, buffer, is_await_code = self._read_code(line) - if buffer is None: - return - save_stdout = sys.stdout - save_stdin = sys.stdin - save_displayhook = sys.displayhook - try: - sys.stdin = self.stdin - sys.stdout = self.stdout - sys.displayhook = self.displayhook - if is_await_code: - self._exec_await(buffer, globals, locals) - return True - else: - if not self._exec_in_closure(buffer, globals, locals): - exec(code, globals, locals) - finally: - sys.stdout = save_stdout - sys.stdin = save_stdin - sys.displayhook = save_displayhook - except: - self._error_exc() - - def _replace_convenience_variables(self, line): - """Replace the convenience variables in 'line' with their values. - e.g. $foo is replaced by __pdb_convenience_variables["foo"]. - Note: such pattern in string literals will be skipped""" - - if "$" not in line: - return line - - dollar_start = dollar_end = (-1, -1) - replace_variables = [] - try: - for t in tokenize.generate_tokens(io.StringIO(line).readline): - token_type, token_string, start, end, _ = t - if token_type == token.OP and token_string == '$': - dollar_start, dollar_end = start, end - elif start == dollar_end and token_type == token.NAME: - # line is a one-line command so we only care about column - replace_variables.append((dollar_start[1], end[1], token_string)) - except tokenize.TokenError: - return line - - if not replace_variables: - return line - - last_end = 0 - line_pieces = [] - for start, end, name in replace_variables: - line_pieces.append(line[last_end:start] + f'__pdb_convenience_variables["{name}"]') - last_end = end - line_pieces.append(line[last_end:]) - - return ''.join(line_pieces) - - def precmd(self, line): - """Handle alias expansion and ';;' separator.""" - if not line.strip(): - return line - args = line.split() - while args[0] in self.aliases: - line = self.aliases[args[0]] - for idx in range(1, 10): - if f'%{idx}' in line: - if idx >= len(args): - self.error(f"Not enough arguments for alias '{args[0]}'") - # This is a no-op - return "!" - line = line.replace(f'%{idx}', args[idx]) - elif '%*' not in line: - if idx < len(args): - self.error(f"Too many arguments for alias '{args[0]}'") - # This is a no-op - return "!" - break - - line = line.replace("%*", ' '.join(args[1:])) - args = line.split() - # split into ';;' separated commands - # unless it's an alias command - if args[0] != 'alias': - marker = line.find(';;') - if marker >= 0: - # queue up everything after marker - next = line[marker+2:].lstrip() - self.cmdqueue.insert(0, next) - line = line[:marker].rstrip() - - # Replace all the convenience variables - line = self._replace_convenience_variables(line) - - return line - - def onecmd(self, line): - """Interpret the argument as though it had been typed in response - to the prompt. - - Checks whether this line is typed at the normal prompt or in - a breakpoint command list definition. - """ - if not self.commands_defining: - if line.startswith('_pdbcmd'): - command, arg, line = self.parseline(line) - if hasattr(self, command): - return getattr(self, command)(arg) - return cmd.Cmd.onecmd(self, line) - else: - return self.handle_command_def(line) - - def handle_command_def(self, line): - """Handles one command line during command list definition.""" - cmd, arg, line = self.parseline(line) - if not cmd: - return False - if cmd == 'end': - return True # end of cmd list - elif cmd == 'EOF': - self.message('') - return True # end of cmd list - cmdlist = self.commands[self.commands_bnum] - if cmd == 'silent': - cmdlist.append('_pdbcmd_silence_frame_status') - return False # continue to handle other cmd def in the cmd list - if arg: - cmdlist.append(cmd+' '+arg) - else: - cmdlist.append(cmd) - # Determine if we must stop - try: - func = getattr(self, 'do_' + cmd) - except AttributeError: - func = self.default - # one of the resuming commands - if func.__name__ in self.commands_resuming: - return True - return False - - def _colorize_code(self, code): - if self.colorize: - colors = list(_pyrepl.utils.gen_colors(code)) - chars, _ = _pyrepl.utils.disp_str(code, colors=colors, force_color=True) - code = "".join(chars) - return code - - # interface abstraction functions - - def message(self, msg, end='\n'): - print(msg, end=end, file=self.stdout) - - def error(self, msg): - print('***', msg, file=self.stdout) - - # convenience variables - - def set_convenience_variable(self, frame, name, value): - if '__pdb_convenience_variables' not in frame.f_globals: - frame.f_globals['__pdb_convenience_variables'] = {} - frame.f_globals['__pdb_convenience_variables'][name] = value - - # Generic completion functions. Individual complete_foo methods can be - # assigned below to one of these functions. - - @property - def rlcompleter(self): - """Return the `Completer` class from `rlcompleter`, while avoiding the - side effects of changing the completer from `import rlcompleter`. - - This is a compromise between GH-138860 and GH-139289. If GH-139289 is - fixed, then we don't need this and we can just `import rlcompleter` in - `Pdb.__init__`. - """ - if not hasattr(self, "_rlcompleter"): - try: - import readline - except ImportError: - # readline is not available, just get the Completer - from rlcompleter import Completer - self._rlcompleter = Completer - else: - # importing rlcompleter could have side effect of changing - # the current completer, we need to restore it - prev_completer = readline.get_completer() - from rlcompleter import Completer - self._rlcompleter = Completer - readline.set_completer(prev_completer) - return self._rlcompleter - - def completenames(self, text, line, begidx, endidx): - # Overwrite completenames() of cmd so for the command completion, - # if no current command matches, check for expressions as well - commands = super().completenames(text, line, begidx, endidx) - for alias in self.aliases: - if alias.startswith(text): - commands.append(alias) - if commands: - return commands - else: - expressions = self._complete_expression(text, line, begidx, endidx) - if expressions: - return expressions - return self.completedefault(text, line, begidx, endidx) - - def _complete_location(self, text, line, begidx, endidx): - # Complete a file/module/function location for break/tbreak/clear. - if line.strip().endswith((':', ',')): - # Here comes a line number or a condition which we can't complete. - return [] - # First, try to find matching functions (i.e. expressions). - try: - ret = self._complete_expression(text, line, begidx, endidx) - except Exception: - ret = [] - # Then, try to complete file names as well. - globs = glob.glob(glob.escape(text) + '*') - for fn in globs: - if os.path.isdir(fn): - ret.append(fn + '/') - elif os.path.isfile(fn) and fn.lower().endswith(('.py', '.pyw')): - ret.append(fn + ':') - return ret - - def _complete_bpnumber(self, text, line, begidx, endidx): - # Complete a breakpoint number. (This would be more helpful if we could - # display additional info along with the completions, such as file/line - # of the breakpoint.) - return [str(i) for i, bp in enumerate(bdb.Breakpoint.bpbynumber) - if bp is not None and str(i).startswith(text)] - - def _complete_expression(self, text, line, begidx, endidx): - # Complete an arbitrary expression. - if not self.curframe: - return [] - # Collect globals and locals. It is usually not really sensible to also - # complete builtins, and they clutter the namespace quite heavily, so we - # leave them out. - ns = {**self.curframe.f_globals, **self.curframe.f_locals} - if '.' in text: - # Walk an attribute chain up to the last part, similar to what - # rlcompleter does. This will bail if any of the parts are not - # simple attribute access, which is what we want. - dotted = text.split('.') - try: - if dotted[0].startswith('$'): - obj = self.curframe.f_globals['__pdb_convenience_variables'][dotted[0][1:]] - else: - obj = ns[dotted[0]] - for part in dotted[1:-1]: - obj = getattr(obj, part) - except (KeyError, AttributeError): - return [] - prefix = '.'.join(dotted[:-1]) + '.' - return [prefix + n for n in dir(obj) if n.startswith(dotted[-1])] - else: - if text.startswith("$"): - # Complete convenience variables - conv_vars = self.curframe.f_globals.get('__pdb_convenience_variables', {}) - return [f"${name}" for name in conv_vars if name.startswith(text[1:])] - # Complete a simple name. - return [n for n in ns.keys() if n.startswith(text)] - - def _complete_indentation(self, text, line, begidx, endidx): - try: - import readline - except ImportError: - return [] - # Fill in spaces to form a 4-space indent - return [' ' * (4 - readline.get_begidx() % 4)] - - def complete_multiline_names(self, text, line, begidx, endidx): - # If text is space-only, the user entered <tab> before any text. - # That normally means they want to indent the current line. - if not text.strip(): - return self._complete_indentation(text, line, begidx, endidx) - return self.completedefault(text, line, begidx, endidx) - - def completedefault(self, text, line, begidx, endidx): - if text.startswith("$"): - # Complete convenience variables - conv_vars = self.curframe.f_globals.get('__pdb_convenience_variables', {}) - return [f"${name}" for name in conv_vars if name.startswith(text[1:])] - - state = 0 - matches = [] - completer = self.rlcompleter(self.curframe.f_globals | self.curframe.f_locals) - while (match := completer.complete(text, state)) is not None: - matches.append(match) - state += 1 - return matches - - @contextmanager - def _enable_rlcompleter(self, ns): - try: - import readline - except ImportError: - yield - return - - try: - completer = self.rlcompleter(ns) - old_completer = readline.get_completer() - readline.set_completer(completer.complete) - yield - finally: - readline.set_completer(old_completer) - - # Pdb meta commands, only intended to be used internally by pdb - - def _pdbcmd_print_frame_status(self, arg): - self.print_stack_trace(0) - self._validate_file_mtime() - self._show_display() - - def _pdbcmd_silence_frame_status(self, arg): - if self.cmdqueue and self.cmdqueue[-1] == '_pdbcmd_print_frame_status': - self.cmdqueue.pop() - - def _pdbcmd_restore_lastcmd(self, arg): - self.lastcmd = arg - - # Command definitions, called by cmdloop() - # The argument is the remaining string on the command line - # Return true to exit from the command loop - - def do_commands(self, arg): - """(Pdb) commands [bpnumber] - (com) ... - (com) end - (Pdb) - - Specify a list of commands for breakpoint number bpnumber. - The commands themselves are entered on the following lines. - Type a line containing just 'end' to terminate the commands. - The commands are executed when the breakpoint is hit. - - To remove all commands from a breakpoint, type commands and - follow it immediately with end; that is, give no commands. - - With no bpnumber argument, commands refers to the last - breakpoint set. - - You can use breakpoint commands to start your program up - again. Simply use the continue command, or step, or any other - command that resumes execution. - - Specifying any command resuming execution (currently continue, - step, next, return, jump, quit and their abbreviations) - terminates the command list (as if that command was - immediately followed by end). This is because any time you - resume execution (even with a simple next or step), you may - encounter another breakpoint -- which could have its own - command list, leading to ambiguities about which list to - execute. - - If you use the 'silent' command in the command list, the usual - message about stopping at a breakpoint is not printed. This - may be desirable for breakpoints that are to print a specific - message and then continue. If none of the other commands - print anything, you will see no sign that the breakpoint was - reached. - """ - if not arg: - bnum = len(bdb.Breakpoint.bpbynumber) - 1 - else: - try: - bnum = int(arg) - except: - self._print_invalid_arg(arg) - return - try: - self.get_bpbynumber(bnum) - except ValueError as err: - self.error('cannot set commands: %s' % err) - return - - self.commands_bnum = bnum - # Save old definitions for the case of a keyboard interrupt. - if bnum in self.commands: - old_commands = self.commands[bnum] - else: - old_commands = None - self.commands[bnum] = [] - - prompt_back = self.prompt - self.prompt = '(com) ' - self.commands_defining = True - try: - self.cmdloop() - except KeyboardInterrupt: - # Restore old definitions. - if old_commands: - self.commands[bnum] = old_commands - else: - del self.commands[bnum] - self.error('command definition aborted, old commands restored') - finally: - self.commands_defining = False - self.prompt = prompt_back - - complete_commands = _complete_bpnumber - - def do_break(self, arg, temporary=False): - """b(reak) [ ([filename:]lineno | function) [, condition] ] - - Without argument, list all breaks. - - With a line number argument, set a break at this line in the - current file. With a function name, set a break at the first - executable line of that function. If a second argument is - present, it is a string specifying an expression which must - evaluate to true before the breakpoint is honored. - - The line number may be prefixed with a filename and a colon, - to specify a breakpoint in another file (probably one that - hasn't been loaded yet). The file is searched for on - sys.path; the .py suffix may be omitted. - """ - if not arg: - if self.breaks: # There's at least one - self.message("Num Type Disp Enb Where") - for bp in bdb.Breakpoint.bpbynumber: - if bp: - self.message(bp.bpformat()) - return - # parse arguments; comma has lowest precedence - # and cannot occur in filename - filename = None - lineno = None - cond = None - module_globals = None - comma = arg.find(',') - if comma > 0: - # parse stuff after comma: "condition" - cond = arg[comma+1:].lstrip() - if err := self._compile_error_message(cond): - self.error('Invalid condition %s: %r' % (cond, err)) - return - arg = arg[:comma].rstrip() - # parse stuff before comma: [filename:]lineno | function - colon = arg.rfind(':') - funcname = None - if colon >= 0: - filename = arg[:colon].rstrip() - f = self.lookupmodule(filename) - if not f: - self.error('%r not found from sys.path' % filename) - return - else: - filename = f - arg = arg[colon+1:].lstrip() - try: - lineno = int(arg) - except ValueError: - self.error('Bad lineno: %s' % arg) - return - else: - # no colon; can be lineno or function - try: - lineno = int(arg) - except ValueError: - try: - func = eval(arg, - self.curframe.f_globals, - self.curframe.f_locals) - except: - func = arg - try: - if hasattr(func, '__func__'): - func = func.__func__ - code = func.__code__ - #use co_name to identify the bkpt (function names - #could be aliased, but co_name is invariant) - funcname = code.co_name - lineno = find_first_executable_line(code) - filename = code.co_filename - module_globals = func.__globals__ - except: - # last thing to try - (ok, filename, ln) = self.lineinfo(arg) - if not ok: - self.error('The specified object %r is not a function ' - 'or was not found along sys.path.' % arg) - return - funcname = ok # ok contains a function name - lineno = int(ln) - if not filename: - filename = self.defaultFile() - filename = self.canonic(filename) - # Check for reasonable breakpoint - line = self.checkline(filename, lineno, module_globals) - if line: - # now set the break point - err = self.set_break(filename, line, temporary, cond, funcname) - if err: - self.error(err) - else: - bp = self.get_breaks(filename, line)[-1] - self.message("Breakpoint %d at %s:%d" % - (bp.number, bp.file, bp.line)) - - # To be overridden in derived debuggers - def defaultFile(self): - """Produce a reasonable default.""" - filename = self.curframe.f_code.co_filename - if filename == '<string>' and self.mainpyfile: - filename = self.mainpyfile - return filename - - do_b = do_break - - complete_break = _complete_location - complete_b = _complete_location - - def do_tbreak(self, arg): - """tbreak [ ([filename:]lineno | function) [, condition] ] - - Same arguments as break, but sets a temporary breakpoint: it - is automatically deleted when first hit. - """ - self.do_break(arg, True) - - complete_tbreak = _complete_location - - def lineinfo(self, identifier): - failed = (None, None, None) - # Input is identifier, may be in single quotes - idstring = identifier.split("'") - if len(idstring) == 1: - # not in single quotes - id = idstring[0].strip() - elif len(idstring) == 3: - # quoted - id = idstring[1].strip() - else: - return failed - if id == '': return failed - parts = id.split('.') - # Protection for derived debuggers - if parts[0] == 'self': - del parts[0] - if len(parts) == 0: - return failed - # Best first guess at file to look at - fname = self.defaultFile() - if len(parts) == 1: - item = parts[0] - else: - # More than one part. - # First is module, second is method/class - f = self.lookupmodule(parts[0]) - if f: - fname = f - item = parts[1] - else: - return failed - answer = find_function(item, self.canonic(fname)) - return answer or failed - - def checkline(self, filename, lineno, module_globals=None): - """Check whether specified line seems to be executable. - - Return `lineno` if it is, 0 if not (e.g. a docstring, comment, blank - line or EOF). Warning: testing is not comprehensive. - """ - # this method should be callable before starting debugging, so default - # to "no globals" if there is no current frame - frame = getattr(self, 'curframe', None) - if module_globals is None: - module_globals = frame.f_globals if frame else None - line = linecache.getline(filename, lineno, module_globals) - if not line: - self.message('End of file') - return 0 - line = line.strip() - # Don't allow setting breakpoint at a blank line - if (not line or (line[0] == '#') or - (line[:3] == '"""') or line[:3] == "'''"): - self.error('Blank or comment') - return 0 - return lineno - - def do_enable(self, arg): - """enable bpnumber [bpnumber ...] - - Enables the breakpoints given as a space separated list of - breakpoint numbers. - """ - if not arg: - self._print_invalid_arg(arg) - return - args = arg.split() - for i in args: - try: - bp = self.get_bpbynumber(i) - except ValueError as err: - self.error(err) - else: - bp.enable() - self.message('Enabled %s' % bp) - - complete_enable = _complete_bpnumber - - def do_disable(self, arg): - """disable bpnumber [bpnumber ...] - - Disables the breakpoints given as a space separated list of - breakpoint numbers. Disabling a breakpoint means it cannot - cause the program to stop execution, but unlike clearing a - breakpoint, it remains in the list of breakpoints and can be - (re-)enabled. - """ - if not arg: - self._print_invalid_arg(arg) - return - args = arg.split() - for i in args: - try: - bp = self.get_bpbynumber(i) - except ValueError as err: - self.error(err) - else: - bp.disable() - self.message('Disabled %s' % bp) - - complete_disable = _complete_bpnumber - - def do_condition(self, arg): - """condition bpnumber [condition] - - Set a new condition for the breakpoint, an expression which - must evaluate to true before the breakpoint is honored. If - condition is absent, any existing condition is removed; i.e., - the breakpoint is made unconditional. - """ - if not arg: - self._print_invalid_arg(arg) - return - args = arg.split(' ', 1) - try: - cond = args[1] - if err := self._compile_error_message(cond): - self.error('Invalid condition %s: %r' % (cond, err)) - return - except IndexError: - cond = None - try: - bp = self.get_bpbynumber(args[0].strip()) - except IndexError: - self.error('Breakpoint number expected') - except ValueError as err: - self.error(err) - else: - bp.cond = cond - if not cond: - self.message('Breakpoint %d is now unconditional.' % bp.number) - else: - self.message('New condition set for breakpoint %d.' % bp.number) - - complete_condition = _complete_bpnumber - - def do_ignore(self, arg): - """ignore bpnumber [count] - - Set the ignore count for the given breakpoint number. If - count is omitted, the ignore count is set to 0. A breakpoint - becomes active when the ignore count is zero. When non-zero, - the count is decremented each time the breakpoint is reached - and the breakpoint is not disabled and any associated - condition evaluates to true. - """ - if not arg: - self._print_invalid_arg(arg) - return - args = arg.split() - if not args: - self.error('Breakpoint number expected') - return - if len(args) == 1: - count = 0 - elif len(args) == 2: - try: - count = int(args[1]) - except ValueError: - self._print_invalid_arg(arg) - return - else: - self._print_invalid_arg(arg) - return - try: - bp = self.get_bpbynumber(args[0].strip()) - except ValueError as err: - self.error(err) - else: - bp.ignore = count - if count > 0: - if count > 1: - countstr = '%d crossings' % count - else: - countstr = '1 crossing' - self.message('Will ignore next %s of breakpoint %d.' % - (countstr, bp.number)) - else: - self.message('Will stop next time breakpoint %d is reached.' - % bp.number) - - complete_ignore = _complete_bpnumber - - def _prompt_for_confirmation(self, prompt, default): - try: - reply = input(prompt) - except EOFError: - reply = default - return reply.strip().lower() - - def do_clear(self, arg): - """cl(ear) [filename:lineno | bpnumber ...] - - With a space separated list of breakpoint numbers, clear - those breakpoints. Without argument, clear all breaks (but - first ask confirmation). With a filename:lineno argument, - clear all breaks at that line in that file. - """ - if not arg: - reply = self._prompt_for_confirmation( - 'Clear all breaks? ', - default='no', - ) - if reply in ('y', 'yes'): - bplist = [bp for bp in bdb.Breakpoint.bpbynumber if bp] - self.clear_all_breaks() - for bp in bplist: - self.message('Deleted %s' % bp) - return - if ':' in arg: - # Make sure it works for "clear C:\foo\bar.py:12" - i = arg.rfind(':') - filename = arg[:i] - arg = arg[i+1:] - try: - lineno = int(arg) - except ValueError: - err = "Invalid line number (%s)" % arg - else: - bplist = self.get_breaks(filename, lineno)[:] - err = self.clear_break(filename, lineno) - if err: - self.error(err) - else: - for bp in bplist: - self.message('Deleted %s' % bp) - return - numberlist = arg.split() - for i in numberlist: - try: - bp = self.get_bpbynumber(i) - except ValueError as err: - self.error(err) - else: - self.clear_bpbynumber(i) - self.message('Deleted %s' % bp) - do_cl = do_clear # 'c' is already an abbreviation for 'continue' - - complete_clear = _complete_location - complete_cl = _complete_location - - def do_where(self, arg): - """w(here) [count] - - Print a stack trace. If count is not specified, print the full stack. - If count is 0, print the current frame entry. If count is positive, - print count entries from the most recent frame. If count is negative, - print -count entries from the least recent frame. - An arrow indicates the "current frame", which determines the - context of most commands. 'bt' is an alias for this command. - """ - if not arg: - count = None - else: - try: - count = int(arg) - except ValueError: - self.error('Invalid count (%s)' % arg) - return - self.print_stack_trace(count) - do_w = do_where - do_bt = do_where - - def _select_frame(self, number): - assert 0 <= number < len(self.stack) - self.curindex = number - self.curframe = self.stack[self.curindex][0] - self.set_convenience_variable(self.curframe, '_frame', self.curframe) - self.print_stack_entry(self.stack[self.curindex]) - self.lineno = None - - def do_exceptions(self, arg): - """exceptions [number] - - List or change current exception in an exception chain. - - Without arguments, list all the current exception in the exception - chain. Exceptions will be numbered, with the current exception indicated - with an arrow. - - If given an integer as argument, switch to the exception at that index. - """ - if not self._chained_exceptions: - self.message( - "Did not find chained exceptions. To move between" - " exceptions, pdb/post_mortem must be given an exception" - " object rather than a traceback." - ) - return - if not arg: - for ix, exc in enumerate(self._chained_exceptions): - prompt = ">" if ix == self._chained_exception_index else " " - rep = repr(exc) - if len(rep) > 80: - rep = rep[:77] + "..." - indicator = ( - " -" - if self._chained_exceptions[ix].__traceback__ is None - else f"{ix:>3}" - ) - self.message(f"{prompt} {indicator} {rep}") - else: - try: - number = int(arg) - except ValueError: - self.error("Argument must be an integer") - return - if 0 <= number < len(self._chained_exceptions): - if self._chained_exceptions[number].__traceback__ is None: - self.error("This exception does not have a traceback, cannot jump to it") - return - - self._chained_exception_index = number - self.setup(None, self._chained_exceptions[number].__traceback__) - self.print_stack_entry(self.stack[self.curindex]) - else: - self.error("No exception with that number") - - def do_up(self, arg): - """u(p) [count] - - Move the current frame count (default one) levels up in the - stack trace (to an older frame). - """ - if self.curindex == 0: - self.error('Oldest frame') - return - try: - count = int(arg or 1) - except ValueError: - self.error('Invalid frame count (%s)' % arg) - return - if count < 0: - newframe = 0 - else: - newframe = max(0, self.curindex - count) - self._select_frame(newframe) - do_u = do_up - - def do_down(self, arg): - """d(own) [count] - - Move the current frame count (default one) levels down in the - stack trace (to a newer frame). - """ - if self.curindex + 1 == len(self.stack): - self.error('Newest frame') - return - try: - count = int(arg or 1) - except ValueError: - self.error('Invalid frame count (%s)' % arg) - return - if count < 0: - newframe = len(self.stack) - 1 - else: - newframe = min(len(self.stack) - 1, self.curindex + count) - self._select_frame(newframe) - do_d = do_down - - def do_until(self, arg): - """unt(il) [lineno] - - Without argument, continue execution until the line with a - number greater than the current one is reached. With a line - number, continue execution until a line with a number greater - or equal to that is reached. In both cases, also stop when - the current frame returns. - """ - if arg: - try: - lineno = int(arg) - except ValueError: - self.error('Error in argument: %r' % arg) - return - if lineno <= self.curframe.f_lineno: - self.error('"until" line number is smaller than current ' - 'line number') - return - else: - lineno = None - self.set_until(self.curframe, lineno) - return 1 - do_unt = do_until - - def do_step(self, arg): - """s(tep) - - Execute the current line, stop at the first possible occasion - (either in a function that is called or in the current - function). - """ - if arg: - self._print_invalid_arg(arg) - return - self.set_step() - return 1 - do_s = do_step - - def do_next(self, arg): - """n(ext) - - Continue execution until the next line in the current function - is reached or it returns. - """ - if arg: - self._print_invalid_arg(arg) - return - self.set_next(self.curframe) - return 1 - do_n = do_next - - def do_run(self, arg): - """run [args...] - - Restart the debugged python program. If a string is supplied - it is split with "shlex", and the result is used as the new - sys.argv. History, breakpoints, actions and debugger options - are preserved. "restart" is an alias for "run". - """ - if self.mode == 'inline': - self.error('run/restart command is disabled when pdb is running in inline mode.\n' - 'Use the command line interface to enable restarting your program\n' - 'e.g. "python -m pdb myscript.py"') - return - if arg: - import shlex - argv0 = sys.argv[0:1] - try: - sys.argv = shlex.split(arg) - except ValueError as e: - self.error('Cannot run %s: %s' % (arg, e)) - return - sys.argv[:0] = argv0 - # this is caught in the main debugger loop - raise Restart - - do_restart = do_run - - def do_return(self, arg): - """r(eturn) - - Continue execution until the current function returns. - """ - if arg: - self._print_invalid_arg(arg) - return - self.set_return(self.curframe) - return 1 - do_r = do_return - - def do_continue(self, arg): - """c(ont(inue)) - - Continue execution, only stop when a breakpoint is encountered. - """ - if arg: - self._print_invalid_arg(arg) - return - if not self.nosigint: - try: - Pdb._previous_sigint_handler = \ - signal.signal(signal.SIGINT, self.sigint_handler) - except ValueError: - # ValueError happens when do_continue() is invoked from - # a non-main thread in which case we just continue without - # SIGINT set. Would printing a message here (once) make - # sense? - pass - self.set_continue() - return 1 - do_c = do_cont = do_continue - - def do_jump(self, arg): - """j(ump) lineno - - Set the next line that will be executed. Only available in - the bottom-most frame. This lets you jump back and execute - code again, or jump forward to skip code that you don't want - to run. - - It should be noted that not all jumps are allowed -- for - instance it is not possible to jump into the middle of a - for loop or out of a finally clause. - """ - if not arg: - self._print_invalid_arg(arg) - return - if self.curindex + 1 != len(self.stack): - self.error('You can only jump within the bottom frame') - return - try: - arg = int(arg) - except ValueError: - self.error("The 'jump' command requires a line number") - else: - try: - # Do the jump, fix up our copy of the stack, and display the - # new position - self.curframe.f_lineno = arg - self.stack[self.curindex] = self.stack[self.curindex][0], arg - self.print_stack_entry(self.stack[self.curindex]) - except ValueError as e: - self.error('Jump failed: %s' % e) - do_j = do_jump - - def _create_recursive_debugger(self): - return Pdb(self.completekey, self.stdin, self.stdout) - - def do_debug(self, arg): - """debug code - - Enter a recursive debugger that steps through the code - argument (which is an arbitrary expression or statement to be - executed in the current environment). - """ - if not arg: - self._print_invalid_arg(arg) - return - self.stop_trace() - globals = self.curframe.f_globals - locals = self.curframe.f_locals - p = self._create_recursive_debugger() - p.prompt = "(%s) " % self.prompt.strip() - self.message("ENTERING RECURSIVE DEBUGGER") - try: - sys.call_tracing(p.run, (arg, globals, locals)) - except Exception: - self._error_exc() - self.message("LEAVING RECURSIVE DEBUGGER") - self.start_trace() - self.lastcmd = p.lastcmd - - complete_debug = _complete_expression - - def do_quit(self, arg): - """q(uit) | exit - - Quit from the debugger. The program being executed is aborted. - """ - # Show prompt to kill process when in 'inline' mode and if pdb was not - # started from an interactive console. The attribute sys.ps1 is only - # defined if the interpreter is in interactive mode. - if self.mode == 'inline' and not hasattr(sys, 'ps1'): - while True: - try: - reply = input('Quitting pdb will kill the process. Quit anyway? [y/n] ') - reply = reply.lower().strip() - except EOFError: - reply = 'y' - self.message('') - if reply == 'y' or reply == '': - sys.exit(1) - elif reply.lower() == 'n': - return - - self._user_requested_quit = True - self.set_quit() - return 1 - - do_q = do_quit - do_exit = do_quit - - def do_EOF(self, arg): - """EOF - - Handles the receipt of EOF as a command. - """ - self.message('') - return self.do_quit(arg) - - def do_args(self, arg): - """a(rgs) - - Print the argument list of the current function. - """ - if arg: - self._print_invalid_arg(arg) - return - co = self.curframe.f_code - dict = self.curframe.f_locals - n = co.co_argcount + co.co_kwonlyargcount - if co.co_flags & inspect.CO_VARARGS: n = n+1 - if co.co_flags & inspect.CO_VARKEYWORDS: n = n+1 - for i in range(n): - name = co.co_varnames[i] - if name in dict: - self.message('%s = %s' % (name, self._safe_repr(dict[name], name))) - else: - self.message('%s = *** undefined ***' % (name,)) - do_a = do_args - - def do_retval(self, arg): - """retval - - Print the return value for the last return of a function. - """ - if arg: - self._print_invalid_arg(arg) - return - if '__return__' in self.curframe.f_locals: - self.message(self._safe_repr(self.curframe.f_locals['__return__'], "retval")) - else: - self.error('Not yet returned!') - do_rv = do_retval - - def _getval(self, arg): - try: - return eval(arg, self.curframe.f_globals, self.curframe.f_locals) - except: - self._error_exc() - raise - - def _getval_except(self, arg, frame=None): - try: - if frame is None: - return eval(arg, self.curframe.f_globals, self.curframe.f_locals) - else: - return eval(arg, frame.f_globals, frame.f_locals) - except BaseException as exc: - return _rstr('** raised %s **' % self._format_exc(exc)) - - def _error_exc(self): - exc = sys.exception() - self.error(self._format_exc(exc)) - - def _msg_val_func(self, arg, func): - try: - val = self._getval(arg) - except: - return # _getval() has displayed the error - try: - self.message(func(val)) - except: - self._error_exc() - - def _safe_repr(self, obj, expr): - try: - return repr(obj) - except Exception as e: - return _rstr(f"*** repr({expr}) failed: {self._format_exc(e)} ***") - - def do_p(self, arg): - """p expression - - Print the value of the expression. - """ - if not arg: - self._print_invalid_arg(arg) - return - self._msg_val_func(arg, repr) - - def do_pp(self, arg): - """pp expression - - Pretty-print the value of the expression. - """ - if not arg: - self._print_invalid_arg(arg) - return - self._msg_val_func(arg, pprint.pformat) - - complete_print = _complete_expression - complete_p = _complete_expression - complete_pp = _complete_expression - - def do_list(self, arg): - """l(ist) [first[, last] | .] - - List source code for the current file. Without arguments, - list 11 lines around the current line or continue the previous - listing. With . as argument, list 11 lines around the current - line. With one argument, list 11 lines starting at that line. - With two arguments, list the given range; if the second - argument is less than the first, it is a count. - - The current line in the current frame is indicated by "->". - If an exception is being debugged, the line where the - exception was originally raised or propagated is indicated by - ">>", if it differs from the current line. - """ - self.lastcmd = 'list' - last = None - if arg and arg != '.': - try: - if ',' in arg: - first, last = arg.split(',') - first = int(first.strip()) - last = int(last.strip()) - if last < first: - # assume it's a count - last = first + last - else: - first = int(arg.strip()) - first = max(1, first - 5) - except ValueError: - self.error('Error in argument: %r' % arg) - return - elif self.lineno is None or arg == '.': - first = max(1, self.curframe.f_lineno - 5) - else: - first = self.lineno + 1 - if last is None: - last = first + 10 - filename = self.curframe.f_code.co_filename - breaklist = self.get_file_breaks(filename) - try: - lines = linecache.getlines(filename, self.curframe.f_globals) - self._print_lines(lines[first-1:last], first, breaklist, - self.curframe) - self.lineno = min(last, len(lines)) - if len(lines) < last: - self.message('[EOF]') - except KeyboardInterrupt: - pass - self._validate_file_mtime() - do_l = do_list - - def do_longlist(self, arg): - """ll | longlist - - List the whole source code for the current function or frame. - """ - if arg: - self._print_invalid_arg(arg) - return - filename = self.curframe.f_code.co_filename - breaklist = self.get_file_breaks(filename) - try: - lines, lineno = self._getsourcelines(self.curframe) - except OSError as err: - self.error(err) - return - self._print_lines(lines, lineno, breaklist, self.curframe) - self._validate_file_mtime() - do_ll = do_longlist - - def do_source(self, arg): - """source expression - - Try to get source code for the given object and display it. - """ - if not arg: - self._print_invalid_arg(arg) - return - try: - obj = self._getval(arg) - except: - return - try: - lines, lineno = self._getsourcelines(obj) - except (OSError, TypeError) as err: - self.error(err) - return - self._print_lines(lines, lineno) - - complete_source = _complete_expression - - def _print_lines(self, lines, start, breaks=(), frame=None): - """Print a range of lines.""" - if frame: - current_lineno = frame.f_lineno - exc_lineno = self.tb_lineno.get(frame, -1) - else: - current_lineno = exc_lineno = -1 - for lineno, line in enumerate(lines, start): - s = str(lineno).rjust(3) - if len(s) < 4: - s += ' ' - if lineno in breaks: - s += 'B' - else: - s += ' ' - if lineno == current_lineno: - s += '->' - elif lineno == exc_lineno: - s += '>>' - if self.colorize: - line = self._colorize_code(line) - self.message(s + '\t' + line.rstrip()) - - def do_whatis(self, arg): - """whatis expression - - Print the type of the argument. - """ - if not arg: - self._print_invalid_arg(arg) - return - try: - value = self._getval(arg) - except: - # _getval() already printed the error - return - code = None - # Is it an instance method? - try: - code = value.__func__.__code__ - except Exception: - pass - if code: - self.message('Method %s' % code.co_name) - return - # Is it a function? - try: - code = value.__code__ - except Exception: - pass - if code: - self.message('Function %s' % code.co_name) - return - # Is it a class? - if value.__class__ is type: - self.message('Class %s.%s' % (value.__module__, value.__qualname__)) - return - # None of the above... - self.message(type(value)) - - complete_whatis = _complete_expression - - def do_display(self, arg): - """display [expression] - - Display the value of the expression if it changed, each time execution - stops in the current frame. - - Without expression, list all display expressions for the current frame. - """ - if not arg: - if self.displaying: - self.message('Currently displaying:') - for key, val in self.displaying.get(self.curframe, {}).items(): - self.message('%s: %s' % (key, self._safe_repr(val, key))) - else: - self.message('No expression is being displayed') - else: - if err := self._compile_error_message(arg): - self.error('Unable to display %s: %r' % (arg, err)) - else: - val = self._getval_except(arg) - self.displaying.setdefault(self.curframe, {})[arg] = val - self.message('display %s: %s' % (arg, self._safe_repr(val, arg))) - - complete_display = _complete_expression - - def do_undisplay(self, arg): - """undisplay [expression] - - Do not display the expression any more in the current frame. - - Without expression, clear all display expressions for the current frame. - """ - if arg: - try: - del self.displaying.get(self.curframe, {})[arg] - except KeyError: - self.error('not displaying %s' % arg) - else: - self.displaying.pop(self.curframe, None) - - def complete_undisplay(self, text, line, begidx, endidx): - return [e for e in self.displaying.get(self.curframe, {}) - if e.startswith(text)] - - def do_interact(self, arg): - """interact - - Start an interactive interpreter whose global namespace - contains all the (global and local) names found in the current scope. - """ - ns = {**self.curframe.f_globals, **self.curframe.f_locals} - with self._enable_rlcompleter(ns): - console = _PdbInteractiveConsole(ns, message=self.message) - console.interact(banner="*pdb interact start*", - exitmsg="*exit from pdb interact command*") - - def do_alias(self, arg): - """alias [name [command]] - - Create an alias called 'name' that executes 'command'. The - command must *not* be enclosed in quotes. Replaceable - parameters can be indicated by %1, %2, and so on, while %* is - replaced by all the parameters. If no command is given, the - current alias for name is shown. If no name is given, all - aliases are listed. - - Aliases may be nested and can contain anything that can be - legally typed at the pdb prompt. Note! You *can* override - internal pdb commands with aliases! Those internal commands - are then hidden until the alias is removed. Aliasing is - recursively applied to the first word of the command line; all - other words in the line are left alone. - - As an example, here are two useful aliases (especially when - placed in the .pdbrc file): - - # Print instance variables (usage "pi classInst") - alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k]) - # Print instance variables in self - alias ps pi self - """ - args = arg.split() - if len(args) == 0: - keys = sorted(self.aliases.keys()) - for alias in keys: - self.message("%s = %s" % (alias, self.aliases[alias])) - return - if len(args) == 1: - if args[0] in self.aliases: - self.message("%s = %s" % (args[0], self.aliases[args[0]])) - else: - self.error(f"Unknown alias '{args[0]}'") - else: - # Do a validation check to make sure no replaceable parameters - # are skipped if %* is not used. - alias = ' '.join(args[1:]) - if '%*' not in alias: - consecutive = True - for idx in range(1, 10): - if f'%{idx}' not in alias: - consecutive = False - if f'%{idx}' in alias and not consecutive: - self.error("Replaceable parameters must be consecutive") - return - self.aliases[args[0]] = alias - - def do_unalias(self, arg): - """unalias name - - Delete the specified alias. - """ - args = arg.split() - if len(args) == 0: - self._print_invalid_arg(arg) - return - if args[0] in self.aliases: - del self.aliases[args[0]] - - def complete_unalias(self, text, line, begidx, endidx): - return [a for a in self.aliases if a.startswith(text)] - - # List of all the commands making the program resume execution. - commands_resuming = ['do_continue', 'do_step', 'do_next', 'do_return', - 'do_until', 'do_quit', 'do_jump'] - - # Print a traceback starting at the top stack frame. - # The most recently entered frame is printed last; - # this is different from dbx and gdb, but consistent with - # the Python interpreter's stack trace. - # It is also consistent with the up/down commands (which are - # compatible with dbx and gdb: up moves towards 'main()' - # and down moves towards the most recent stack frame). - # * if count is None, prints the full stack - # * if count = 0, prints the current frame entry - # * if count < 0, prints -count least recent frame entries - # * if count > 0, prints count most recent frame entries - - def print_stack_trace(self, count=None): - if count is None: - stack_to_print = self.stack - elif count == 0: - stack_to_print = [self.stack[self.curindex]] - elif count < 0: - stack_to_print = self.stack[:-count] - else: - stack_to_print = self.stack[-count:] - try: - for frame_lineno in stack_to_print: - self.print_stack_entry(frame_lineno) - except KeyboardInterrupt: - pass - - def print_stack_entry(self, frame_lineno, prompt_prefix=line_prefix): - frame, lineno = frame_lineno - if frame is self.curframe: - prefix = '> ' - else: - prefix = ' ' - stack_entry = self.format_stack_entry(frame_lineno, prompt_prefix) - if self.colorize: - lines = stack_entry.split(prompt_prefix, 1) - if len(lines) > 1: - # We have some code to display - lines[1] = self._colorize_code(lines[1]) - stack_entry = prompt_prefix.join(lines) - self.message(prefix + stack_entry) - - # Provide help - - def do_help(self, arg): - """h(elp) - - Without argument, print the list of available commands. - With a command name as argument, print help about that command. - "help pdb" shows the full pdb documentation. - "help exec" gives help on the ! command. - """ - if not arg: - return cmd.Cmd.do_help(self, arg) - try: - try: - topic = getattr(self, 'help_' + arg) - return topic() - except AttributeError: - command = getattr(self, 'do_' + arg) - except AttributeError: - self.error('No help for %r' % arg) - else: - if sys.flags.optimize >= 2: - self.error('No help for %r; please do not run Python with -OO ' - 'if you need command help' % arg) - return - if command.__doc__ is None: - self.error('No help for %r; __doc__ string missing' % arg) - return - self.message(self._help_message_from_doc(command.__doc__)) - - do_h = do_help - - def help_exec(self): - """(!) statement - - Execute the (one-line) statement in the context of the current - stack frame. The exclamation point can be omitted unless the - first word of the statement resembles a debugger command, e.g.: - (Pdb) ! n=42 - (Pdb) - - To assign to a global variable you must always prefix the command with - a 'global' command, e.g.: - (Pdb) global list_options; list_options = ['-l'] - (Pdb) - """ - self.message((self.help_exec.__doc__ or '').strip()) - - def help_pdb(self): - help() - - # other helper functions - - def lookupmodule(self, filename): - """Helper function for break/clear parsing -- may be overridden. - - lookupmodule() translates (possibly incomplete) file or module name - into an absolute file name. - - filename could be in format of: - * an absolute path like '/path/to/file.py' - * a relative path like 'file.py' or 'dir/file.py' - * a module name like 'module' or 'package.module' - - files and modules will be searched in sys.path. - """ - if not filename.endswith('.py'): - # A module is passed in so convert it to equivalent file - filename = filename.replace('.', os.sep) + '.py' - - if os.path.isabs(filename): - if os.path.exists(filename): - return filename - return None - - for dirname in sys.path: - while os.path.islink(dirname): - dirname = os.readlink(dirname) - fullname = os.path.join(dirname, filename) - if os.path.exists(fullname): - return fullname - return None - - def _run(self, target: _ExecutableTarget): - # When bdb sets tracing, a number of call and line events happen - # BEFORE debugger even reaches user's code (and the exact sequence of - # events depends on python version). Take special measures to - # avoid stopping before reaching the main script (see user_line and - # user_call for details). - self._wait_for_mainpyfile = True - self._user_requested_quit = False - - self.mainpyfile = self.canonic(target.filename) - - # The target has to run in __main__ namespace (or imports from - # __main__ will break). Clear __main__ and replace with - # the target namespace. - import __main__ - __main__.__dict__.clear() - __main__.__dict__.update(target.namespace) - - # Clear the mtime table for program reruns, assume all the files - # are up to date. - self._file_mtime_table.clear() - - self.run(target.code) - - def _format_exc(self, exc: BaseException): - return traceback.format_exception_only(exc)[-1].strip() - - def _compile_error_message(self, expr): - """Return the error message as string if compiling `expr` fails.""" - try: - compile(expr, "<stdin>", "eval") - except SyntaxError as exc: - return _rstr(self._format_exc(exc)) - return "" - - def _getsourcelines(self, obj): - # GH-103319 - # inspect.getsourcelines() returns lineno = 0 for - # module-level frame which breaks our code print line number - # This method should be replaced by inspect.getsourcelines(obj) - # once this bug is fixed in inspect - lines, lineno = inspect.getsourcelines(obj) - lineno = max(1, lineno) - return lines, lineno - - def _help_message_from_doc(self, doc, usage_only=False): - lines = [line.strip() for line in doc.rstrip().splitlines()] - if not lines: - return "No help message found." - if "" in lines: - usage_end = lines.index("") - else: - usage_end = 1 - formatted = [] - indent = " " * len(self.prompt) - for i, line in enumerate(lines): - if i == 0: - prefix = "Usage: " - elif i < usage_end: - prefix = " " - else: - if usage_only: - break - prefix = "" - formatted.append(indent + prefix + line) - return "\n".join(formatted) - - def _print_invalid_arg(self, arg): - """Return the usage string for a function.""" - - if not arg: - self.error("Argument is required for this command") - else: - self.error(f"Invalid argument: {arg}") - - # Yes it's a bit hacky. Get the caller name, get the method based on - # that name, and get the docstring from that method. - # This should NOT fail if the caller is a method of this class. - doc = inspect.getdoc(getattr(self, sys._getframe(1).f_code.co_name)) - if doc is not None: - self.message(self._help_message_from_doc(doc, usage_only=True)) - -# Collect all command help into docstring, if not run with -OO - -if __doc__ is not None: - # unfortunately we can't guess this order from the class definition - _help_order = [ - 'help', 'where', 'down', 'up', 'break', 'tbreak', 'clear', 'disable', - 'enable', 'ignore', 'condition', 'commands', 'step', 'next', 'until', - 'jump', 'return', 'retval', 'run', 'continue', 'list', 'longlist', - 'args', 'p', 'pp', 'whatis', 'source', 'display', 'undisplay', - 'interact', 'alias', 'unalias', 'debug', 'quit', - ] - - for _command in _help_order: - __doc__ += getattr(Pdb, 'do_' + _command).__doc__.strip() + '\n\n' - __doc__ += Pdb.help_exec.__doc__ - - del _help_order, _command - - -# Simplified interface - -def run(statement, globals=None, locals=None): - """Execute the *statement* (given as a string or a code object) - under debugger control. - - The debugger prompt appears before any code is executed; you can set - breakpoints and type continue, or you can step through the statement - using step or next. - - The optional *globals* and *locals* arguments specify the - environment in which the code is executed; by default the - dictionary of the module __main__ is used (see the explanation of - the built-in exec() or eval() functions.). - """ - Pdb().run(statement, globals, locals) - -def runeval(expression, globals=None, locals=None): - """Evaluate the *expression* (given as a string or a code object) - under debugger control. - - When runeval() returns, it returns the value of the expression. - Otherwise this function is similar to run(). - """ - return Pdb().runeval(expression, globals, locals) - -def runctx(statement, globals, locals): - # B/W compatibility - run(statement, globals, locals) - -def runcall(*args, **kwds): - """Call the function (a function or method object, not a string) - with the given arguments. - - When runcall() returns, it returns whatever the function call - returned. The debugger prompt appears as soon as the function is - entered. - """ - return Pdb().runcall(*args, **kwds) - -def set_trace(*, header=None, commands=None): - """Enter the debugger at the calling stack frame. - - This is useful to hard-code a breakpoint at a given point in a - program, even if the code is not otherwise being debugged (e.g. when - an assertion fails). If given, *header* is printed to the console - just before debugging begins. *commands* is an optional list of - pdb commands to run when the debugger starts. - """ - if Pdb._last_pdb_instance is not None: - pdb = Pdb._last_pdb_instance - else: - pdb = Pdb(mode='inline', backend='monitoring', colorize=True) - if header is not None: - pdb.message(header) - pdb.set_trace(sys._getframe().f_back, commands=commands) - -async def set_trace_async(*, header=None, commands=None): - """Enter the debugger at the calling stack frame, but in async mode. - - This should be used as await pdb.set_trace_async(). Users can do await - if they enter the debugger with this function. Otherwise it's the same - as set_trace(). - """ - if Pdb._last_pdb_instance is not None: - pdb = Pdb._last_pdb_instance - else: - pdb = Pdb(mode='inline', backend='monitoring', colorize=True) - if header is not None: - pdb.message(header) - await pdb.set_trace_async(sys._getframe().f_back, commands=commands) - -# Remote PDB - -class _PdbServer(Pdb): - def __init__( - self, - sockfile, - signal_server=None, - owns_sockfile=True, - colorize=False, - **kwargs, - ): - self._owns_sockfile = owns_sockfile - self._interact_state = None - self._sockfile = sockfile - self._command_name_cache = [] - self._write_failed = False - if signal_server: - # Only started by the top level _PdbServer, not recursive ones. - self._start_signal_listener(signal_server) - # Override the `colorize` attribute set by the parent constructor, - # because it checks the server's stdout, rather than the client's. - super().__init__(colorize=False, **kwargs) - self.colorize = colorize - - @staticmethod - def protocol_version(): - # By default, assume a client and server are compatible if they run - # the same Python major.minor version. We'll try to keep backwards - # compatibility between patch versions of a minor version if possible. - # If we do need to change the protocol in a patch version, we'll change - # `revision` to the patch version where the protocol changed. - # We can ignore compatibility for pre-release versions; sys.remote_exec - # can't attach to a pre-release version except from that same version. - v = sys.version_info - revision = 0 - return int(f"{v.major:02X}{v.minor:02X}{revision:02X}F0", 16) - - def _ensure_valid_message(self, msg): - # Ensure the message conforms to our protocol. - # If anything needs to be changed here for a patch release of Python, - # the 'revision' in protocol_version() should be updated. - match msg: - case {"message": str(), "type": str()}: - # Have the client show a message. The client chooses how to - # format the message based on its type. The currently defined - # types are "info" and "error". If a message has a type the - # client doesn't recognize, it must be treated as "info". - pass - case {"help": str()}: - # Have the client show the help for a given argument. - pass - case {"prompt": str(), "state": str()}: - # Have the client display the given prompt and wait for a reply - # from the user. If the client recognizes the state it may - # enable mode-specific features like multi-line editing. - # If it doesn't recognize the state it must prompt for a single - # line only and send it directly to the server. A server won't - # progress until it gets a "reply" or "signal" message, but can - # process "complete" requests while waiting for the reply. - pass - case { - "completions": list(completions) - } if all(isinstance(c, str) for c in completions): - # Return valid completions for a client's "complete" request. - pass - case { - "command_list": list(command_list) - } if all(isinstance(c, str) for c in command_list): - # Report the list of legal PDB commands to the client. - # Due to aliases this list is not static, but the client - # needs to know it for multi-line editing. - pass - case _: - raise AssertionError( - f"PDB message doesn't follow the schema! {msg}" - ) - - @classmethod - def _start_signal_listener(cls, address): - def listener(sock): - with closing(sock): - # Check if the interpreter is finalizing every quarter of a second. - # Clean up and exit if so. - sock.settimeout(0.25) - sock.shutdown(socket.SHUT_WR) - while not shut_down.is_set(): - try: - data = sock.recv(1024) - except socket.timeout: - continue - if data == b"": - return # EOF - signal.raise_signal(signal.SIGINT) - - def stop_thread(): - shut_down.set() - thread.join() - - # Use a daemon thread so that we don't detach until after all non-daemon - # threads are done. Use an atexit handler to stop gracefully at that point, - # so that our thread is stopped before the interpreter is torn down. - shut_down = threading.Event() - thread = threading.Thread( - target=listener, - args=[socket.create_connection(address, timeout=5)], - daemon=True, - ) - atexit.register(stop_thread) - thread.start() - - def _send(self, **kwargs): - self._ensure_valid_message(kwargs) - json_payload = json.dumps(kwargs) - try: - self._sockfile.write(json_payload.encode() + b"\n") - self._sockfile.flush() - except (OSError, ValueError): - # We get an OSError if the network connection has dropped, and a - # ValueError if detach() if the sockfile has been closed. We'll - # handle this the next time we try to read from the client instead - # of trying to handle it from everywhere _send() may be called. - # Track this with a flag rather than assuming readline() will ever - # return an empty string because the socket may be half-closed. - self._write_failed = True - - @typing.override - def message(self, msg, end="\n"): - self._send(message=str(msg) + end, type="info") - - @typing.override - def error(self, msg): - self._send(message=str(msg), type="error") - - def _get_input(self, prompt, state) -> str: - # Before displaying a (Pdb) prompt, send the list of PDB commands - # unless we've already sent an up-to-date list. - if state == "pdb" and not self._command_name_cache: - self._command_name_cache = self.completenames("", "", 0, 0) - self._send(command_list=self._command_name_cache) - self._send(prompt=prompt, state=state) - return self._read_reply() - - def _read_reply(self): - # Loop until we get a 'reply' or 'signal' from the client, - # processing out-of-band 'complete' requests as they arrive. - while True: - if self._write_failed: - raise EOFError - - msg = self._sockfile.readline() - if not msg: - raise EOFError - - try: - payload = json.loads(msg) - except json.JSONDecodeError: - self.error(f"Disconnecting: client sent invalid JSON {msg!r}") - raise EOFError - - match payload: - case {"reply": str(reply)}: - return reply - case {"signal": str(signal)}: - if signal == "INT": - raise KeyboardInterrupt - elif signal == "EOF": - raise EOFError - else: - self.error( - f"Received unrecognized signal: {signal}" - ) - # Our best hope of recovering is to pretend we - # got an EOF to exit whatever mode we're in. - raise EOFError - case { - "complete": { - "text": str(text), - "line": str(line), - "begidx": int(begidx), - "endidx": int(endidx), - } - }: - items = self._complete_any(text, line, begidx, endidx) - self._send(completions=items) - continue - # Valid JSON, but doesn't meet the schema. - self.error(f"Ignoring invalid message from client: {msg}") - - def _complete_any(self, text, line, begidx, endidx): - # If we're in 'interact' mode, we need to use the default completer - if self._interact_state: - compfunc = self.completedefault - else: - if begidx == 0: - return self.completenames(text, line, begidx, endidx) - - cmd = self.parseline(line)[0] - if cmd: - compfunc = getattr(self, "complete_" + cmd, self.completedefault) - else: - compfunc = self.completedefault - return compfunc(text, line, begidx, endidx) - - def cmdloop(self, intro=None): - self.preloop() - if intro is not None: - self.intro = intro - if self.intro: - self.message(str(self.intro)) - stop = None - while not stop: - if self._interact_state is not None: - try: - reply = self._get_input(prompt=">>> ", state="interact") - except KeyboardInterrupt: - # Match how KeyboardInterrupt is handled in a REPL - self.message("\nKeyboardInterrupt") - except EOFError: - self.message("\n*exit from pdb interact command*") - self._interact_state = None - else: - self._run_in_python_repl(reply) - continue - - if not self.cmdqueue: - try: - state = "commands" if self.commands_defining else "pdb" - reply = self._get_input(prompt=self.prompt, state=state) - except EOFError: - reply = "EOF" - - self.cmdqueue.append(reply) - - line = self.cmdqueue.pop(0) - line = self.precmd(line) - stop = self.onecmd(line) - stop = self.postcmd(stop, line) - self.postloop() - - def postloop(self): - super().postloop() - if self.quitting: - self.detach() - - def detach(self): - # Detach the debugger and close the socket without raising BdbQuit - self.quitting = False - if self._owns_sockfile: - # Don't try to reuse this instance, it's not valid anymore. - Pdb._last_pdb_instance = None - try: - self._sockfile.close() - except OSError: - # close() can fail if the connection was broken unexpectedly. - pass - - def do_debug(self, arg): - # Clear our cached list of valid commands; the recursive debugger might - # send its own differing list, and so ours needs to be re-sent. - self._command_name_cache = [] - return super().do_debug(arg) - - def do_alias(self, arg): - # Clear our cached list of valid commands; one might be added. - self._command_name_cache = [] - return super().do_alias(arg) - - def do_unalias(self, arg): - # Clear our cached list of valid commands; one might be removed. - self._command_name_cache = [] - return super().do_unalias(arg) - - def do_help(self, arg): - # Tell the client to render the help, since it might need a pager. - self._send(help=arg) - - do_h = do_help - - def _interact_displayhook(self, obj): - # Like the default `sys.displayhook` except sending a socket message. - if obj is not None: - self.message(repr(obj)) - builtins._ = obj - - def _run_in_python_repl(self, lines): - # Run one 'interact' mode code block against an existing namespace. - assert self._interact_state - save_displayhook = sys.displayhook - try: - sys.displayhook = self._interact_displayhook - code_obj = self._interact_state["compiler"](lines + "\n") - if code_obj is None: - raise SyntaxError("Incomplete command") - exec(code_obj, self._interact_state["ns"]) - except: - self._error_exc() - finally: - sys.displayhook = save_displayhook - - def do_interact(self, arg): - # Prepare to run 'interact' mode code blocks, and trigger the client - # to start treating all input as Python commands, not PDB ones. - self.message("*pdb interact start*") - self._interact_state = dict( - compiler=codeop.CommandCompiler(), - ns={**self.curframe.f_globals, **self.curframe.f_locals}, - ) - - @typing.override - def _create_recursive_debugger(self): - return _PdbServer( - self._sockfile, - owns_sockfile=False, - colorize=self.colorize, - ) - - @typing.override - def _prompt_for_confirmation(self, prompt, default): - try: - return self._get_input(prompt=prompt, state="confirm") - except (EOFError, KeyboardInterrupt): - return default - - def do_run(self, arg): - self.error("remote PDB cannot restart the program") - - do_restart = do_run - - def _error_exc(self): - if self._interact_state and isinstance(sys.exception(), SystemExit): - # If we get a SystemExit in 'interact' mode, exit the REPL. - self._interact_state = None - ret = super()._error_exc() - self.message("*exit from pdb interact command*") - return ret - else: - return super()._error_exc() - - def default(self, line): - # Unlike Pdb, don't prompt for more lines of a multi-line command. - # The remote needs to send us the whole block in one go. - try: - candidate = line.removeprefix("!") + "\n" - if codeop.compile_command(candidate, "<stdin>", "single") is None: - raise SyntaxError("Incomplete command") - return super().default(candidate) - except: - self._error_exc() - - -class _PdbClient: - def __init__(self, pid, server_socket, interrupt_sock): - self.pid = pid - self.read_buf = b"" - self.signal_read = None - self.signal_write = None - self.sigint_received = False - self.raise_on_sigint = False - self.server_socket = server_socket - self.interrupt_sock = interrupt_sock - self.pdb_instance = Pdb() - self.pdb_commands = set() - self.completion_matches = [] - self.state = "dumb" - self.write_failed = False - self.multiline_block = False - - def _ensure_valid_message(self, msg): - # Ensure the message conforms to our protocol. - # If anything needs to be changed here for a patch release of Python, - # the 'revision' in protocol_version() should be updated. - match msg: - case {"reply": str()}: - # Send input typed by a user at a prompt to the remote PDB. - pass - case {"signal": "EOF"}: - # Tell the remote PDB that the user pressed ^D at a prompt. - pass - case {"signal": "INT"}: - # Tell the remote PDB that the user pressed ^C at a prompt. - pass - case { - "complete": { - "text": str(), - "line": str(), - "begidx": int(), - "endidx": int(), - } - }: - # Ask the remote PDB what completions are valid for the given - # parameters, using readline's completion protocol. - pass - case _: - raise AssertionError( - f"PDB message doesn't follow the schema! {msg}" - ) - - def _send(self, **kwargs): - self._ensure_valid_message(kwargs) - json_payload = json.dumps(kwargs) - try: - self.server_socket.sendall(json_payload.encode() + b"\n") - except OSError: - # This means that the client has abruptly disconnected, but we'll - # handle that the next time we try to read from the client instead - # of trying to handle it from everywhere _send() may be called. - # Track this with a flag rather than assuming readline() will ever - # return an empty string because the socket may be half-closed. - self.write_failed = True - - def _readline(self): - if self.sigint_received: - # There's a pending unhandled SIGINT. Handle it now. - self.sigint_received = False - raise KeyboardInterrupt - - # Wait for either a SIGINT or a line or EOF from the PDB server. - selector = selectors.DefaultSelector() - selector.register(self.signal_read, selectors.EVENT_READ) - selector.register(self.server_socket, selectors.EVENT_READ) - - while b"\n" not in self.read_buf: - for key, _ in selector.select(): - if key.fileobj == self.signal_read: - self.signal_read.recv(1024) - if self.sigint_received: - # If not, we're reading wakeup events for sigints that - # we've previously handled, and can ignore them. - self.sigint_received = False - raise KeyboardInterrupt - elif key.fileobj == self.server_socket: - data = self.server_socket.recv(16 * 1024) - self.read_buf += data - if not data and b"\n" not in self.read_buf: - # EOF without a full final line. Drop the partial line. - self.read_buf = b"" - return b"" - - ret, sep, self.read_buf = self.read_buf.partition(b"\n") - return ret + sep - - def read_input(self, prompt, multiline_block): - self.multiline_block = multiline_block - with self._sigint_raises_keyboard_interrupt(): - return input(prompt) - - def read_command(self, prompt): - reply = self.read_input(prompt, multiline_block=False) - if self.state == "dumb": - # No logic applied whatsoever, just pass the raw reply back. - return reply - - prefix = "" - if self.state == "pdb": - # PDB command entry mode - cmd = self.pdb_instance.parseline(reply)[0] - if cmd in self.pdb_commands or reply.strip() == "": - # Recognized PDB command, or blank line repeating last command - return reply - - # Otherwise, explicit or implicit exec command - if reply.startswith("!"): - prefix = "!" - reply = reply.removeprefix(prefix).lstrip() - - if codeop.compile_command(reply + "\n", "<stdin>", "single") is not None: - # Valid single-line statement - return prefix + reply - - # Otherwise, valid first line of a multi-line statement - more_prompt = "...".ljust(len(prompt)) - while codeop.compile_command(reply, "<stdin>", "single") is None: - reply += "\n" + self.read_input(more_prompt, multiline_block=True) - - return prefix + reply - - @contextmanager - def readline_completion(self, completer): - try: - import readline - except ImportError: - yield - return - - old_completer = readline.get_completer() - try: - readline.set_completer(completer) - if readline.backend == "editline": - # libedit uses "^I" instead of "tab" - command_string = "bind ^I rl_complete" - else: - command_string = "tab: complete" - readline.parse_and_bind(command_string) - yield - finally: - readline.set_completer(old_completer) - - @contextmanager - def _sigint_handler(self): - # Signal handling strategy: - # - When we call input() we want a SIGINT to raise KeyboardInterrupt - # - Otherwise we want to write to the wakeup FD and set a flag. - # We'll break out of select() when the wakeup FD is written to, - # and we'll check the flag whenever we're about to accept input. - def handler(signum, frame): - self.sigint_received = True - if self.raise_on_sigint: - # One-shot; don't raise again until the flag is set again. - self.raise_on_sigint = False - self.sigint_received = False - raise KeyboardInterrupt - - sentinel = object() - old_handler = sentinel - old_wakeup_fd = sentinel - - self.signal_read, self.signal_write = socket.socketpair() - with (closing(self.signal_read), closing(self.signal_write)): - self.signal_read.setblocking(False) - self.signal_write.setblocking(False) - - try: - old_handler = signal.signal(signal.SIGINT, handler) - - try: - old_wakeup_fd = signal.set_wakeup_fd( - self.signal_write.fileno(), - warn_on_full_buffer=False, - ) - yield - finally: - # Restore the old wakeup fd if we installed a new one - if old_wakeup_fd is not sentinel: - signal.set_wakeup_fd(old_wakeup_fd) - finally: - self.signal_read = self.signal_write = None - if old_handler is not sentinel: - # Restore the old handler if we installed a new one - signal.signal(signal.SIGINT, old_handler) - - @contextmanager - def _sigint_raises_keyboard_interrupt(self): - if self.sigint_received: - # There's a pending unhandled SIGINT. Handle it now. - self.sigint_received = False - raise KeyboardInterrupt - - try: - self.raise_on_sigint = True - yield - finally: - self.raise_on_sigint = False - - def cmdloop(self): - with ( - self._sigint_handler(), - self.readline_completion(self.complete), - ): - while not self.write_failed: - try: - if not (payload_bytes := self._readline()): - break - except KeyboardInterrupt: - self.send_interrupt() - continue - - try: - payload = json.loads(payload_bytes) - except json.JSONDecodeError: - print( - f"*** Invalid JSON from remote: {payload_bytes!r}", - flush=True, - ) - continue - - self.process_payload(payload) - - def send_interrupt(self): - if self.interrupt_sock is not None: - # Write to a socket that the PDB server listens on. This triggers - # the remote to raise a SIGINT for itself. We do this because - # Windows doesn't allow triggering SIGINT remotely. - # See https://stackoverflow.com/a/35792192 for many more details. - self.interrupt_sock.sendall(signal.SIGINT.to_bytes()) - else: - # On Unix we can just send a SIGINT to the remote process. - # This is preferable to using the signal thread approach that we - # use on Windows because it can interrupt IO in the main thread. - os.kill(self.pid, signal.SIGINT) - - def process_payload(self, payload): - match payload: - case { - "command_list": command_list - } if all(isinstance(c, str) for c in command_list): - self.pdb_commands = set(command_list) - case {"message": str(msg), "type": str(msg_type)}: - if msg_type == "error": - print("***", msg, flush=True) - else: - print(msg, end="", flush=True) - case {"help": str(arg)}: - self.pdb_instance.do_help(arg) - case {"prompt": str(prompt), "state": str(state)}: - if state not in ("pdb", "interact"): - state = "dumb" - self.state = state - self.prompt_for_reply(prompt) - case _: - raise RuntimeError(f"Unrecognized payload {payload}") - - def prompt_for_reply(self, prompt): - while True: - try: - payload = {"reply": self.read_command(prompt)} - except EOFError: - payload = {"signal": "EOF"} - except KeyboardInterrupt: - payload = {"signal": "INT"} - except Exception as exc: - msg = traceback.format_exception_only(exc)[-1].strip() - print("***", msg, flush=True) - continue - - self._send(**payload) - return - - def complete(self, text, state): - import readline - - if state == 0: - self.completion_matches = [] - if self.state not in ("pdb", "interact"): - return None - - origline = readline.get_line_buffer() - line = origline.lstrip() - if self.multiline_block: - # We're completing a line contained in a multi-line block. - # Force the remote to treat it as a Python expression. - line = "! " + line - offset = len(origline) - len(line) - begidx = readline.get_begidx() - offset - endidx = readline.get_endidx() - offset - - msg = { - "complete": { - "text": text, - "line": line, - "begidx": begidx, - "endidx": endidx, - } - } - - self._send(**msg) - if self.write_failed: - return None - - payload = self._readline() - if not payload: - return None - - payload = json.loads(payload) - if "completions" not in payload: - raise RuntimeError( - f"Failed to get valid completions. Got: {payload}" - ) - - self.completion_matches = payload["completions"] - try: - return self.completion_matches[state] - except IndexError: - return None - - -def _connect( - *, - host, - port, - frame, - commands, - version, - signal_raising_thread, - colorize, -): - with closing(socket.create_connection((host, port))) as conn: - sockfile = conn.makefile("rwb") - - # The client requests this thread on Windows but not on Unix. - # Most tests don't request this thread, to keep them simpler. - if signal_raising_thread: - signal_server = (host, port) - else: - signal_server = None - - remote_pdb = _PdbServer( - sockfile, - signal_server=signal_server, - colorize=colorize, - ) - weakref.finalize(remote_pdb, sockfile.close) - - if Pdb._last_pdb_instance is not None: - remote_pdb.error("Another PDB instance is already attached.") - elif version != remote_pdb.protocol_version(): - target_ver = f"0x{remote_pdb.protocol_version():08X}" - attach_ver = f"0x{version:08X}" - remote_pdb.error( - f"The target process is running a Python version that is" - f" incompatible with this PDB module." - f"\nTarget process pdb protocol version: {target_ver}" - f"\nLocal pdb module's protocol version: {attach_ver}" - ) - else: - remote_pdb.rcLines.extend(commands.splitlines()) - remote_pdb.set_trace(frame=frame) - - -def attach(pid, commands=()): - """Attach to a running process with the given PID.""" - with ExitStack() as stack: - server = stack.enter_context( - closing(socket.create_server(("localhost", 0))) - ) - port = server.getsockname()[1] - - connect_script = stack.enter_context( - tempfile.NamedTemporaryFile("w", delete_on_close=False) - ) - - use_signal_thread = sys.platform == "win32" - colorize = _colorize.can_colorize() - - connect_script.write( - textwrap.dedent( - f""" - import pdb, sys - pdb._connect( - host="localhost", - port={port}, - frame=sys._getframe(1), - commands={json.dumps("\n".join(commands))}, - version={_PdbServer.protocol_version()}, - signal_raising_thread={use_signal_thread!r}, - colorize={colorize!r}, - ) - """ - ) - ) - connect_script.close() - orig_mode = os.stat(connect_script.name).st_mode - os.chmod(connect_script.name, orig_mode | stat.S_IROTH | stat.S_IRGRP) - sys.remote_exec(pid, connect_script.name) - - # TODO Add a timeout? Or don't bother since the user can ^C? - client_sock, _ = server.accept() - stack.enter_context(closing(client_sock)) - - if use_signal_thread: - interrupt_sock, _ = server.accept() - stack.enter_context(closing(interrupt_sock)) - interrupt_sock.setblocking(False) - else: - interrupt_sock = None - - _PdbClient(pid, client_sock, interrupt_sock).cmdloop() - - -# Post-Mortem interface - -def post_mortem(t=None): - """Enter post-mortem debugging of the given *traceback*, or *exception* - object. - - If no traceback is given, it uses the one of the exception that is - currently being handled (an exception must be being handled if the - default is to be used). - - If `t` is an exception object, the `exceptions` command makes it possible to - list and inspect its chained exceptions (if any). - """ - return _post_mortem(t, Pdb()) - - -def _post_mortem(t, pdb_instance): - """ - Private version of post_mortem, which allow to pass a pdb instance - for testing purposes. - """ - # handling the default - if t is None: - exc = sys.exception() - if exc is not None: - t = exc.__traceback__ - - if t is None or (isinstance(t, BaseException) and t.__traceback__ is None): - raise ValueError("A valid traceback must be passed if no " - "exception is being handled") - - pdb_instance.reset() - pdb_instance.interaction(None, t) - - -def pm(): - """Enter post-mortem debugging of the traceback found in sys.last_exc.""" - post_mortem(sys.last_exc) - - -# Main program for testing - -TESTCMD = 'import x; x.main()' - -def test(): - run(TESTCMD) - -# print help -def help(): - import pydoc - pydoc.pager(__doc__) - -_usage = """\ -Debug the Python program given by pyfile. Alternatively, -an executable module or package to debug can be specified using -the -m switch. You can also attach to a running Python process -using the -p option with its PID. - -Initial commands are read from .pdbrc files in your home directory -and in the current directory, if they exist. Commands supplied with --c are executed after commands from .pdbrc files. - -To let the script run until an exception occurs, use "-c continue". -To let the script run up to a given line X in the debugged file, use -"-c 'until X'".""" - - -def exit_with_permission_help_text(): - """ - Prints a message pointing to platform-specific permission help text and exits the program. - This function is called when a PermissionError is encountered while trying - to attach to a process. - """ - print( - "Error: The specified process cannot be attached to due to insufficient permissions.\n" - "See the Python documentation for details on required privileges and troubleshooting:\n" - "https://docs.python.org/3.14/howto/remote_debugging.html#permission-requirements\n" - ) - sys.exit(1) - - -def parse_args(): - # We want pdb to be as intuitive as possible to users, so we need to do some - # heuristic parsing to deal with ambiguity. - # For example: - # "python -m pdb -m foo -p 1" should pass "-p 1" to "foo". - # "python -m pdb foo.py -m bar" should pass "-m bar" to "foo.py". - # "python -m pdb -m foo -m bar" should pass "-m bar" to "foo". - # This require some customized parsing logic to find the actual debug target. - - import argparse - - parser = argparse.ArgumentParser( - usage="%(prog)s [-h] [-c command] (-m module | -p pid | pyfile) [args ...]", - description=_usage, - formatter_class=argparse.RawDescriptionHelpFormatter, - allow_abbrev=False, - color=True, - ) - - # Get all the commands out first. For backwards compatibility, we allow - # -c commands to be after the target. - parser.add_argument('-c', '--command', action='append', default=[], metavar='command', dest='commands', - help='pdb commands to execute as if given in a .pdbrc file') - - opts, args = parser.parse_known_args() - - if not args: - # If no arguments were given (python -m pdb), print the whole help message. - # Without this check, argparse would only complain about missing required arguments. - # We need to add the arguments definitions here to get a proper help message. - parser.add_argument('-m', metavar='module', dest='module') - parser.add_argument('-p', '--pid', type=int, help="attach to the specified PID", default=None) - parser.print_help() - sys.exit(2) - elif args[0] == '-p' or args[0] == '--pid': - # Attach to a pid - parser.add_argument('-p', '--pid', type=int, help="attach to the specified PID", default=None) - opts, args = parser.parse_known_args() - if args: - # For --pid, any extra arguments are invalid. - parser.error(f"unrecognized arguments: {' '.join(args)}") - elif args[0] == '-m': - # Debug a module, we only need the first -m module argument. - # The rest is passed to the module itself. - parser.add_argument('-m', metavar='module', dest='module') - opt_module = parser.parse_args(args[:2]) - opts.module = opt_module.module - args = args[2:] - elif args[0].startswith('-'): - # Invalid argument before the script name. - invalid_args = list(itertools.takewhile(lambda a: a.startswith('-'), args)) - parser.error(f"unrecognized arguments: {' '.join(invalid_args)}") - - # Otherwise it's debugging a script and we already parsed all -c commands. - - return opts, args - -def main(): - opts, args = parse_args() - - if getattr(opts, 'pid', None) is not None: - try: - attach(opts.pid, opts.commands) - except PermissionError as e: - exit_with_permission_help_text() - return - elif getattr(opts, 'module', None) is not None: - file = opts.module - target = _ModuleTarget(file) - else: - file = args.pop(0) - if file.endswith('.pyz'): - target = _ZipTarget(file) - else: - target = _ScriptTarget(file) - - sys.argv[:] = [file] + args # Hide "pdb.py" and pdb options from argument list - - # Note on saving/restoring sys.argv: it's a good idea when sys.argv was - # modified by the script being debugged. It's a bad idea when it was - # changed by the user from the command line. There is a "restart" command - # which allows explicit specification of command line arguments. - pdb = Pdb(mode='cli', backend='monitoring', colorize=True) - pdb.rcLines.extend(opts.commands) - while True: - try: - pdb._run(target) - except Restart: - print("Restarting", target, "with arguments:") - print("\t" + " ".join(sys.argv[1:])) - except SystemExit as e: - # In most cases SystemExit does not warrant a post-mortem session. - print("The program exited via sys.exit(). Exit status:", end=' ') - print(e) - except BaseException as e: - traceback.print_exception(e, colorize=_colorize.can_colorize()) - print("Uncaught exception. Entering post mortem debugging") - print("Running 'cont' or 'step' will restart the program") - try: - pdb.interaction(None, e) - except Restart: - print("Restarting", target, "with arguments:") - print("\t" + " ".join(sys.argv[1:])) - continue - if pdb._user_requested_quit: - break - print("The program finished and will be restarted") - - -# When invoked as main program, invoke the debugger on a script -if __name__ == '__main__': - import pdb - pdb.main() diff --git a/Python314_4_x86_Template/Lib/pickle.py b/Python314_4_x86_Template/Lib/pickle.py deleted file mode 100644 index beaefae04..000000000 --- a/Python314_4_x86_Template/Lib/pickle.py +++ /dev/null @@ -1,1931 +0,0 @@ -"""Create portable serialized representations of Python objects. - -See module copyreg for a mechanism for registering custom picklers. -See module pickletools source for extensive comments. - -Classes: - - Pickler - Unpickler - -Functions: - - dump(object, file) - dumps(object) -> string - load(file) -> object - loads(bytes) -> object - -Misc variables: - - __version__ - format_version - compatible_formats - -""" - -from types import FunctionType -from copyreg import dispatch_table -from copyreg import _extension_registry, _inverted_registry, _extension_cache -from itertools import batched -from functools import partial -import sys -from sys import maxsize -from struct import pack, unpack -import io -import codecs -import _compat_pickle - -__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler", - "Unpickler", "dump", "dumps", "load", "loads"] - -try: - from _pickle import PickleBuffer - __all__.append("PickleBuffer") - _HAVE_PICKLE_BUFFER = True -except ImportError: - _HAVE_PICKLE_BUFFER = False - - -# Shortcut for use in isinstance testing -bytes_types = (bytes, bytearray) - -# These are purely informational; no code uses these. -format_version = "5.0" # File format version we write -compatible_formats = ["1.0", # Original protocol 0 - "1.1", # Protocol 0 with INST added - "1.2", # Original protocol 1 - "1.3", # Protocol 1 with BINFLOAT added - "2.0", # Protocol 2 - "3.0", # Protocol 3 - "4.0", # Protocol 4 - "5.0", # Protocol 5 - ] # Old format versions we can read - -# This is the highest protocol number we know how to read. -HIGHEST_PROTOCOL = 5 - -# The protocol we write by default. May be less than HIGHEST_PROTOCOL. -# Only bump this if the oldest still supported version of Python already -# includes it. -DEFAULT_PROTOCOL = 5 - -class PickleError(Exception): - """A common base class for the other pickling exceptions.""" - pass - -class PicklingError(PickleError): - """This exception is raised when an unpicklable object is passed to the - dump() method. - - """ - pass - -class UnpicklingError(PickleError): - """This exception is raised when there is a problem unpickling an object, - such as a security violation. - - Note that other exceptions may also be raised during unpickling, including - (but not necessarily limited to) AttributeError, EOFError, ImportError, - and IndexError. - - """ - pass - -# An instance of _Stop is raised by Unpickler.load_stop() in response to -# the STOP opcode, passing the object that is the result of unpickling. -class _Stop(Exception): - def __init__(self, value): - self.value = value - -# Pickle opcodes. See pickletools.py for extensive docs. The listing -# here is in kind-of alphabetical order of 1-character pickle code. -# pickletools groups them by purpose. - -MARK = b'(' # push special markobject on stack -STOP = b'.' # every pickle ends with STOP -POP = b'0' # discard topmost stack item -POP_MARK = b'1' # discard stack top through topmost markobject -DUP = b'2' # duplicate top stack item -FLOAT = b'F' # push float object; decimal string argument -INT = b'I' # push integer or bool; decimal string argument -BININT = b'J' # push four-byte signed int -BININT1 = b'K' # push 1-byte unsigned int -LONG = b'L' # push long; decimal string argument -BININT2 = b'M' # push 2-byte unsigned int -NONE = b'N' # push None -PERSID = b'P' # push persistent object; id is taken from string arg -BINPERSID = b'Q' # " " " ; " " " " stack -REDUCE = b'R' # apply callable to argtuple, both on stack -STRING = b'S' # push string; NL-terminated string argument -BINSTRING = b'T' # push string; counted binary string argument -SHORT_BINSTRING= b'U' # " " ; " " " " < 256 bytes -UNICODE = b'V' # push Unicode string; raw-unicode-escaped'd argument -BINUNICODE = b'X' # " " " ; counted UTF-8 string argument -APPEND = b'a' # append stack top to list below it -BUILD = b'b' # call __setstate__ or __dict__.update() -GLOBAL = b'c' # push self.find_class(modname, name); 2 string args -DICT = b'd' # build a dict from stack items -EMPTY_DICT = b'}' # push empty dict -APPENDS = b'e' # extend list on stack by topmost stack slice -GET = b'g' # push item from memo on stack; index is string arg -BINGET = b'h' # " " " " " " ; " " 1-byte arg -INST = b'i' # build & push class instance -LONG_BINGET = b'j' # push item from memo on stack; index is 4-byte arg -LIST = b'l' # build list from topmost stack items -EMPTY_LIST = b']' # push empty list -OBJ = b'o' # build & push class instance -PUT = b'p' # store stack top in memo; index is string arg -BINPUT = b'q' # " " " " " ; " " 1-byte arg -LONG_BINPUT = b'r' # " " " " " ; " " 4-byte arg -SETITEM = b's' # add key+value pair to dict -TUPLE = b't' # build tuple from topmost stack items -EMPTY_TUPLE = b')' # push empty tuple -SETITEMS = b'u' # modify dict by adding topmost key+value pairs -BINFLOAT = b'G' # push float; arg is 8-byte float encoding - -TRUE = b'I01\n' # not an opcode; see INT docs in pickletools.py -FALSE = b'I00\n' # not an opcode; see INT docs in pickletools.py - -# Protocol 2 - -PROTO = b'\x80' # identify pickle protocol -NEWOBJ = b'\x81' # build object by applying cls.__new__ to argtuple -EXT1 = b'\x82' # push object from extension registry; 1-byte index -EXT2 = b'\x83' # ditto, but 2-byte index -EXT4 = b'\x84' # ditto, but 4-byte index -TUPLE1 = b'\x85' # build 1-tuple from stack top -TUPLE2 = b'\x86' # build 2-tuple from two topmost stack items -TUPLE3 = b'\x87' # build 3-tuple from three topmost stack items -NEWTRUE = b'\x88' # push True -NEWFALSE = b'\x89' # push False -LONG1 = b'\x8a' # push long from < 256 bytes -LONG4 = b'\x8b' # push really big long - -_tuplesize2code = [EMPTY_TUPLE, TUPLE1, TUPLE2, TUPLE3] - -# Protocol 3 (Python 3.x) - -BINBYTES = b'B' # push bytes; counted binary string argument -SHORT_BINBYTES = b'C' # " " ; " " " " < 256 bytes - -# Protocol 4 - -SHORT_BINUNICODE = b'\x8c' # push short string; UTF-8 length < 256 bytes -BINUNICODE8 = b'\x8d' # push very long string -BINBYTES8 = b'\x8e' # push very long bytes string -EMPTY_SET = b'\x8f' # push empty set on the stack -ADDITEMS = b'\x90' # modify set by adding topmost stack items -FROZENSET = b'\x91' # build frozenset from topmost stack items -NEWOBJ_EX = b'\x92' # like NEWOBJ but work with keyword only arguments -STACK_GLOBAL = b'\x93' # same as GLOBAL but using names on the stacks -MEMOIZE = b'\x94' # store top of the stack in memo -FRAME = b'\x95' # indicate the beginning of a new frame - -# Protocol 5 - -BYTEARRAY8 = b'\x96' # push bytearray -NEXT_BUFFER = b'\x97' # push next out-of-band buffer -READONLY_BUFFER = b'\x98' # make top of stack readonly - -__all__.extend(x for x in dir() if x.isupper() and not x.startswith('_')) - - -class _Framer: - - _FRAME_SIZE_MIN = 4 - _FRAME_SIZE_TARGET = 64 * 1024 - - def __init__(self, file_write): - self.file_write = file_write - self.current_frame = None - - def start_framing(self): - self.current_frame = io.BytesIO() - - def end_framing(self): - if self.current_frame and self.current_frame.tell() > 0: - self.commit_frame(force=True) - self.current_frame = None - - def commit_frame(self, force=False): - if self.current_frame: - f = self.current_frame - if f.tell() >= self._FRAME_SIZE_TARGET or force: - data = f.getbuffer() - write = self.file_write - if len(data) >= self._FRAME_SIZE_MIN: - # Issue a single call to the write method of the underlying - # file object for the frame opcode with the size of the - # frame. The concatenation is expected to be less expensive - # than issuing an additional call to write. - write(FRAME + pack("<Q", len(data))) - - # Issue a separate call to write to append the frame - # contents without concatenation to the above to avoid a - # memory copy. - write(data) - - # Start the new frame with a new io.BytesIO instance so that - # the file object can have delayed access to the previous frame - # contents via an unreleased memoryview of the previous - # io.BytesIO instance. - self.current_frame = io.BytesIO() - - def write(self, data): - if self.current_frame: - return self.current_frame.write(data) - else: - return self.file_write(data) - - def write_large_bytes(self, header, payload): - write = self.file_write - if self.current_frame: - # Terminate the current frame and flush it to the file. - self.commit_frame(force=True) - - # Perform direct write of the header and payload of the large binary - # object. Be careful not to concatenate the header and the payload - # prior to calling 'write' as we do not want to allocate a large - # temporary bytes object. - # We intentionally do not insert a protocol 4 frame opcode to make - # it possible to optimize file.read calls in the loader. - write(header) - write(payload) - - -class _Unframer: - - def __init__(self, file_read, file_readline, file_tell=None): - self.file_read = file_read - self.file_readline = file_readline - self.current_frame = None - - def readinto(self, buf): - if self.current_frame: - n = self.current_frame.readinto(buf) - if n == 0 and len(buf) != 0: - self.current_frame = None - n = len(buf) - buf[:] = self.file_read(n) - return n - if n < len(buf): - raise UnpicklingError( - "pickle exhausted before end of frame") - return n - else: - n = len(buf) - buf[:] = self.file_read(n) - return n - - def read(self, n): - if self.current_frame: - data = self.current_frame.read(n) - if not data and n != 0: - self.current_frame = None - return self.file_read(n) - if len(data) < n: - raise UnpicklingError( - "pickle exhausted before end of frame") - return data - else: - return self.file_read(n) - - def readline(self): - if self.current_frame: - data = self.current_frame.readline() - if not data: - self.current_frame = None - return self.file_readline() - if data[-1] != b'\n'[0]: - raise UnpicklingError( - "pickle exhausted before end of frame") - return data - else: - return self.file_readline() - - def load_frame(self, frame_size): - if self.current_frame and self.current_frame.read() != b'': - raise UnpicklingError( - "beginning of a new frame before end of current frame") - self.current_frame = io.BytesIO(self.file_read(frame_size)) - - -# Tools used for pickling. - -def _getattribute(obj, dotted_path): - for subpath in dotted_path: - obj = getattr(obj, subpath) - return obj - -def whichmodule(obj, name): - """Find the module an object belong to.""" - dotted_path = name.split('.') - module_name = getattr(obj, '__module__', None) - if '<locals>' in dotted_path: - raise PicklingError(f"Can't pickle local object {obj!r}") - if module_name is None: - # Protect the iteration by using a list copy of sys.modules against dynamic - # modules that trigger imports of other modules upon calls to getattr. - for module_name, module in sys.modules.copy().items(): - if (module_name == '__main__' - or module_name == '__mp_main__' # bpo-42406 - or module is None): - continue - try: - if _getattribute(module, dotted_path) is obj: - return module_name - except AttributeError: - pass - module_name = '__main__' - - try: - __import__(module_name, level=0) - module = sys.modules[module_name] - except (ImportError, ValueError, KeyError) as exc: - raise PicklingError(f"Can't pickle {obj!r}: {exc!s}") - try: - if _getattribute(module, dotted_path) is obj: - return module_name - except AttributeError: - raise PicklingError(f"Can't pickle {obj!r}: " - f"it's not found as {module_name}.{name}") - - raise PicklingError( - f"Can't pickle {obj!r}: it's not the same object as {module_name}.{name}") - -def encode_long(x): - r"""Encode a long to a two's complement little-endian binary string. - Note that 0 is a special case, returning an empty string, to save a - byte in the LONG1 pickling context. - - >>> encode_long(0) - b'' - >>> encode_long(255) - b'\xff\x00' - >>> encode_long(32767) - b'\xff\x7f' - >>> encode_long(-256) - b'\x00\xff' - >>> encode_long(-32768) - b'\x00\x80' - >>> encode_long(-128) - b'\x80' - >>> encode_long(127) - b'\x7f' - >>> - """ - if x == 0: - return b'' - nbytes = (x.bit_length() >> 3) + 1 - result = x.to_bytes(nbytes, byteorder='little', signed=True) - if x < 0 and nbytes > 1: - if result[-1] == 0xff and (result[-2] & 0x80) != 0: - result = result[:-1] - return result - -def decode_long(data): - r"""Decode a long from a two's complement little-endian binary string. - - >>> decode_long(b'') - 0 - >>> decode_long(b"\xff\x00") - 255 - >>> decode_long(b"\xff\x7f") - 32767 - >>> decode_long(b"\x00\xff") - -256 - >>> decode_long(b"\x00\x80") - -32768 - >>> decode_long(b"\x80") - -128 - >>> decode_long(b"\x7f") - 127 - """ - return int.from_bytes(data, byteorder='little', signed=True) - -def _T(obj): - cls = type(obj) - module = cls.__module__ - if module in (None, 'builtins', '__main__'): - return cls.__qualname__ - return f'{module}.{cls.__qualname__}' - - -_NoValue = object() - -# Pickling machinery - -class _Pickler: - - def __init__(self, file, protocol=None, *, fix_imports=True, - buffer_callback=None): - """This takes a binary file for writing a pickle data stream. - - The optional *protocol* argument tells the pickler to use the - given protocol; supported protocols are 0, 1, 2, 3, 4 and 5. - The default protocol is 5. It was introduced in Python 3.8, and - is incompatible with previous versions. - - Specifying a negative protocol version selects the highest - protocol version supported. The higher the protocol used, the - more recent the version of Python needed to read the pickle - produced. - - The *file* argument must have a write() method that accepts a - single bytes argument. It can thus be a file object opened for - binary writing, an io.BytesIO instance, or any other custom - object that meets this interface. - - If *fix_imports* is True and *protocol* is less than 3, pickle - will try to map the new Python 3 names to the old module names - used in Python 2, so that the pickle data stream is readable - with Python 2. - - If *buffer_callback* is None (the default), buffer views are - serialized into *file* as part of the pickle stream. - - If *buffer_callback* is not None, then it can be called any number - of times with a buffer view. If the callback returns a false value - (such as None), the given buffer is out-of-band; otherwise the - buffer is serialized in-band, i.e. inside the pickle stream. - - It is an error if *buffer_callback* is not None and *protocol* - is None or smaller than 5. - """ - if protocol is None: - protocol = DEFAULT_PROTOCOL - if protocol < 0: - protocol = HIGHEST_PROTOCOL - elif not 0 <= protocol <= HIGHEST_PROTOCOL: - raise ValueError("pickle protocol must be <= %d" % HIGHEST_PROTOCOL) - if buffer_callback is not None and protocol < 5: - raise ValueError("buffer_callback needs protocol >= 5") - self._buffer_callback = buffer_callback - try: - self._file_write = file.write - except AttributeError: - raise TypeError("file must have a 'write' attribute") - self.framer = _Framer(self._file_write) - self.write = self.framer.write - self._write_large_bytes = self.framer.write_large_bytes - self.memo = {} - self.proto = int(protocol) - self.bin = protocol >= 1 - self.fast = 0 - self.fix_imports = fix_imports and protocol < 3 - - def clear_memo(self): - """Clears the pickler's "memo". - - The memo is the data structure that remembers which objects the - pickler has already seen, so that shared or recursive objects - are pickled by reference and not by value. This method is - useful when re-using picklers. - """ - self.memo.clear() - - def dump(self, obj): - """Write a pickled representation of obj to the open file.""" - # Check whether Pickler was initialized correctly. This is - # only needed to mimic the behavior of _pickle.Pickler.dump(). - if not hasattr(self, "_file_write"): - raise PicklingError("Pickler.__init__() was not called by " - "%s.__init__()" % (self.__class__.__name__,)) - if self.proto >= 2: - self.write(PROTO + pack("<B", self.proto)) - if self.proto >= 4: - self.framer.start_framing() - self.save(obj) - self.write(STOP) - self.framer.end_framing() - - def memoize(self, obj): - """Store an object in the memo.""" - - # The Pickler memo is a dictionary mapping object ids to 2-tuples - # that contain the Unpickler memo key and the object being memoized. - # The memo key is written to the pickle and will become - # the key in the Unpickler's memo. The object is stored in the - # Pickler memo so that transient objects are kept alive during - # pickling. - - # The use of the Unpickler memo length as the memo key is just a - # convention. The only requirement is that the memo values be unique. - # But there appears no advantage to any other scheme, and this - # scheme allows the Unpickler memo to be implemented as a plain (but - # growable) array, indexed by memo key. - if self.fast: - return - assert id(obj) not in self.memo - idx = len(self.memo) - self.write(self.put(idx)) - self.memo[id(obj)] = idx, obj - - # Return a PUT (BINPUT, LONG_BINPUT) opcode string, with argument i. - def put(self, idx): - if self.proto >= 4: - return MEMOIZE - elif self.bin: - if idx < 256: - return BINPUT + pack("<B", idx) - else: - return LONG_BINPUT + pack("<I", idx) - else: - return PUT + repr(idx).encode("ascii") + b'\n' - - # Return a GET (BINGET, LONG_BINGET) opcode string, with argument i. - def get(self, i): - if self.bin: - if i < 256: - return BINGET + pack("<B", i) - else: - return LONG_BINGET + pack("<I", i) - - return GET + repr(i).encode("ascii") + b'\n' - - def save(self, obj, save_persistent_id=True): - self.framer.commit_frame() - - # Check for persistent id (defined by a subclass) - if save_persistent_id: - pid = self.persistent_id(obj) - if pid is not None: - self.save_pers(pid) - return - - # Check the memo - x = self.memo.get(id(obj)) - if x is not None: - self.write(self.get(x[0])) - return - - rv = NotImplemented - reduce = getattr(self, "reducer_override", _NoValue) - if reduce is not _NoValue: - rv = reduce(obj) - - if rv is NotImplemented: - # Check the type dispatch table - t = type(obj) - f = self.dispatch.get(t) - if f is not None: - f(self, obj) # Call unbound method with explicit self - return - - # Check private dispatch table if any, or else - # copyreg.dispatch_table - reduce = getattr(self, 'dispatch_table', dispatch_table).get(t, _NoValue) - if reduce is not _NoValue: - rv = reduce(obj) - else: - # Check for a class with a custom metaclass; treat as regular - # class - if issubclass(t, type): - self.save_global(obj) - return - - # Check for a __reduce_ex__ method, fall back to __reduce__ - reduce = getattr(obj, "__reduce_ex__", _NoValue) - if reduce is not _NoValue: - rv = reduce(self.proto) - else: - reduce = getattr(obj, "__reduce__", _NoValue) - if reduce is not _NoValue: - rv = reduce() - else: - raise PicklingError(f"Can't pickle {_T(t)} object") - - # Check for string returned by reduce(), meaning "save as global" - if isinstance(rv, str): - self.save_global(obj, rv) - return - - try: - # Assert that reduce() returned a tuple - if not isinstance(rv, tuple): - raise PicklingError(f'__reduce__ must return a string or tuple, not {_T(rv)}') - - # Assert that it returned an appropriately sized tuple - l = len(rv) - if not (2 <= l <= 6): - raise PicklingError("tuple returned by __reduce__ " - "must contain 2 through 6 elements") - - # Save the reduce() output and finally memoize the object - self.save_reduce(obj=obj, *rv) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} object') - raise - - def persistent_id(self, obj): - # This exists so a subclass can override it - return None - - def save_pers(self, pid): - # Save a persistent id reference - if self.bin: - self.save(pid, save_persistent_id=False) - self.write(BINPERSID) - else: - try: - self.write(PERSID + str(pid).encode("ascii") + b'\n') - except UnicodeEncodeError: - raise PicklingError( - "persistent IDs in protocol 0 must be ASCII strings") - - def save_reduce(self, func, args, state=None, listitems=None, - dictitems=None, state_setter=None, *, obj=None): - # This API is called by some subclasses - - if not callable(func): - raise PicklingError(f"first item of the tuple returned by __reduce__ " - f"must be callable, not {_T(func)}") - if not isinstance(args, tuple): - raise PicklingError(f"second item of the tuple returned by __reduce__ " - f"must be a tuple, not {_T(args)}") - - save = self.save - write = self.write - - func_name = getattr(func, "__name__", "") - if self.proto >= 2 and func_name == "__newobj_ex__": - cls, args, kwargs = args - if not hasattr(cls, "__new__"): - raise PicklingError("first argument to __newobj_ex__() has no __new__") - if obj is not None and cls is not obj.__class__: - raise PicklingError(f"first argument to __newobj_ex__() " - f"must be {obj.__class__!r}, not {cls!r}") - if self.proto >= 4: - try: - save(cls) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} class') - raise - try: - save(args) - save(kwargs) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} __new__ arguments') - raise - write(NEWOBJ_EX) - else: - func = partial(cls.__new__, cls, *args, **kwargs) - try: - save(func) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} reconstructor') - raise - save(()) - write(REDUCE) - elif self.proto >= 2 and func_name == "__newobj__": - # A __reduce__ implementation can direct protocol 2 or newer to - # use the more efficient NEWOBJ opcode, while still - # allowing protocol 0 and 1 to work normally. For this to - # work, the function returned by __reduce__ should be - # called __newobj__, and its first argument should be a - # class. The implementation for __newobj__ - # should be as follows, although pickle has no way to - # verify this: - # - # def __newobj__(cls, *args): - # return cls.__new__(cls, *args) - # - # Protocols 0 and 1 will pickle a reference to __newobj__, - # while protocol 2 (and above) will pickle a reference to - # cls, the remaining args tuple, and the NEWOBJ code, - # which calls cls.__new__(cls, *args) at unpickling time - # (see load_newobj below). If __reduce__ returns a - # three-tuple, the state from the third tuple item will be - # pickled regardless of the protocol, calling __setstate__ - # at unpickling time (see load_build below). - # - # Note that no standard __newobj__ implementation exists; - # you have to provide your own. This is to enforce - # compatibility with Python 2.2 (pickles written using - # protocol 0 or 1 in Python 2.3 should be unpicklable by - # Python 2.2). - cls = args[0] - if not hasattr(cls, "__new__"): - raise PicklingError("first argument to __newobj__() has no __new__") - if obj is not None and cls is not obj.__class__: - raise PicklingError(f"first argument to __newobj__() " - f"must be {obj.__class__!r}, not {cls!r}") - args = args[1:] - try: - save(cls) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} class') - raise - try: - save(args) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} __new__ arguments') - raise - write(NEWOBJ) - else: - try: - save(func) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} reconstructor') - raise - try: - save(args) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} reconstructor arguments') - raise - write(REDUCE) - - if obj is not None: - # If the object is already in the memo, this means it is - # recursive. In this case, throw away everything we put on the - # stack, and fetch the object back from the memo. - if id(obj) in self.memo: - write(POP + self.get(self.memo[id(obj)][0])) - else: - self.memoize(obj) - - # More new special cases (that work with older protocols as - # well): when __reduce__ returns a tuple with 4 or 5 items, - # the 4th and 5th item should be iterators that provide list - # items and dict items (as (key, value) tuples), or None. - - if listitems is not None: - self._batch_appends(listitems, obj) - - if dictitems is not None: - self._batch_setitems(dictitems, obj) - - if state is not None: - if state_setter is None: - try: - save(state) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} state') - raise - write(BUILD) - else: - # If a state_setter is specified, call it instead of load_build - # to update obj's with its previous state. - # First, push state_setter and its tuple of expected arguments - # (obj, state) onto the stack. - try: - save(state_setter) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} state setter') - raise - save(obj) # simple BINGET opcode as obj is already memoized. - try: - save(state) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} state') - raise - write(TUPLE2) - # Trigger a state_setter(obj, state) function call. - write(REDUCE) - # The purpose of state_setter is to carry-out an - # inplace modification of obj. We do not care about what the - # method might return, so its output is eventually removed from - # the stack. - write(POP) - - # Methods below this point are dispatched through the dispatch table - - dispatch = {} - - def save_none(self, obj): - self.write(NONE) - dispatch[type(None)] = save_none - - def save_bool(self, obj): - if self.proto >= 2: - self.write(NEWTRUE if obj else NEWFALSE) - else: - self.write(TRUE if obj else FALSE) - dispatch[bool] = save_bool - - def save_long(self, obj): - if self.bin: - # If the int is small enough to fit in a signed 4-byte 2's-comp - # format, we can store it more efficiently than the general - # case. - # First one- and two-byte unsigned ints: - if obj >= 0: - if obj <= 0xff: - self.write(BININT1 + pack("<B", obj)) - return - if obj <= 0xffff: - self.write(BININT2 + pack("<H", obj)) - return - # Next check for 4-byte signed ints: - if -0x80000000 <= obj <= 0x7fffffff: - self.write(BININT + pack("<i", obj)) - return - if self.proto >= 2: - encoded = encode_long(obj) - n = len(encoded) - if n < 256: - self.write(LONG1 + pack("<B", n) + encoded) - else: - self.write(LONG4 + pack("<i", n) + encoded) - return - if -0x80000000 <= obj <= 0x7fffffff: - self.write(INT + repr(obj).encode("ascii") + b'\n') - else: - self.write(LONG + repr(obj).encode("ascii") + b'L\n') - dispatch[int] = save_long - - def save_float(self, obj): - if self.bin: - self.write(BINFLOAT + pack('>d', obj)) - else: - self.write(FLOAT + repr(obj).encode("ascii") + b'\n') - dispatch[float] = save_float - - def _save_bytes_no_memo(self, obj): - # helper for writing bytes objects for protocol >= 3 - # without memoizing them - assert self.proto >= 3 - n = len(obj) - if n <= 0xff: - self.write(SHORT_BINBYTES + pack("<B", n) + obj) - elif n > 0xffffffff and self.proto >= 4: - self._write_large_bytes(BINBYTES8 + pack("<Q", n), obj) - elif n >= self.framer._FRAME_SIZE_TARGET: - self._write_large_bytes(BINBYTES + pack("<I", n), obj) - else: - self.write(BINBYTES + pack("<I", n) + obj) - - def save_bytes(self, obj): - if self.proto < 3: - if not obj: # bytes object is empty - self.save_reduce(bytes, (), obj=obj) - else: - self.save_reduce(codecs.encode, - (str(obj, 'latin1'), 'latin1'), obj=obj) - return - self._save_bytes_no_memo(obj) - self.memoize(obj) - dispatch[bytes] = save_bytes - - def _save_bytearray_no_memo(self, obj): - # helper for writing bytearray objects for protocol >= 5 - # without memoizing them - assert self.proto >= 5 - n = len(obj) - if n >= self.framer._FRAME_SIZE_TARGET: - self._write_large_bytes(BYTEARRAY8 + pack("<Q", n), obj) - else: - self.write(BYTEARRAY8 + pack("<Q", n) + obj) - - def save_bytearray(self, obj): - if self.proto < 5: - if not obj: # bytearray is empty - self.save_reduce(bytearray, (), obj=obj) - else: - self.save_reduce(bytearray, (bytes(obj),), obj=obj) - return - self._save_bytearray_no_memo(obj) - self.memoize(obj) - dispatch[bytearray] = save_bytearray - - if _HAVE_PICKLE_BUFFER: - def save_picklebuffer(self, obj): - if self.proto < 5: - raise PicklingError("PickleBuffer can only be pickled with " - "protocol >= 5") - with obj.raw() as m: - if not m.contiguous: - raise PicklingError("PickleBuffer can not be pickled when " - "pointing to a non-contiguous buffer") - in_band = True - if self._buffer_callback is not None: - in_band = bool(self._buffer_callback(obj)) - if in_band: - # Write data in-band - # XXX The C implementation avoids a copy here - buf = m.tobytes() - in_memo = id(buf) in self.memo - if m.readonly: - if in_memo: - self._save_bytes_no_memo(buf) - else: - self.save_bytes(buf) - else: - if in_memo: - self._save_bytearray_no_memo(buf) - else: - self.save_bytearray(buf) - else: - # Write data out-of-band - self.write(NEXT_BUFFER) - if m.readonly: - self.write(READONLY_BUFFER) - - dispatch[PickleBuffer] = save_picklebuffer - - def save_str(self, obj): - if self.bin: - encoded = obj.encode('utf-8', 'surrogatepass') - n = len(encoded) - if n <= 0xff and self.proto >= 4: - self.write(SHORT_BINUNICODE + pack("<B", n) + encoded) - elif n > 0xffffffff and self.proto >= 4: - self._write_large_bytes(BINUNICODE8 + pack("<Q", n), encoded) - elif n >= self.framer._FRAME_SIZE_TARGET: - self._write_large_bytes(BINUNICODE + pack("<I", n), encoded) - else: - self.write(BINUNICODE + pack("<I", n) + encoded) - else: - # Escape what raw-unicode-escape doesn't, but memoize the original. - tmp = obj.replace("\\", "\\u005c") - tmp = tmp.replace("\0", "\\u0000") - tmp = tmp.replace("\n", "\\u000a") - tmp = tmp.replace("\r", "\\u000d") - tmp = tmp.replace("\x1a", "\\u001a") # EOF on DOS - self.write(UNICODE + tmp.encode('raw-unicode-escape') + b'\n') - self.memoize(obj) - dispatch[str] = save_str - - def save_tuple(self, obj): - if not obj: # tuple is empty - if self.bin: - self.write(EMPTY_TUPLE) - else: - self.write(MARK + TUPLE) - return - - n = len(obj) - save = self.save - memo = self.memo - if n <= 3 and self.proto >= 2: - for i, element in enumerate(obj): - try: - save(element) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {i}') - raise - # Subtle. Same as in the big comment below. - if id(obj) in memo: - get = self.get(memo[id(obj)][0]) - self.write(POP * n + get) - else: - self.write(_tuplesize2code[n]) - self.memoize(obj) - return - - # proto 0 or proto 1 and tuple isn't empty, or proto > 1 and tuple - # has more than 3 elements. - write = self.write - write(MARK) - for i, element in enumerate(obj): - try: - save(element) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {i}') - raise - - if id(obj) in memo: - # Subtle. d was not in memo when we entered save_tuple(), so - # the process of saving the tuple's elements must have saved - # the tuple itself: the tuple is recursive. The proper action - # now is to throw away everything we put on the stack, and - # simply GET the tuple (it's already constructed). This check - # could have been done in the "for element" loop instead, but - # recursive tuples are a rare thing. - get = self.get(memo[id(obj)][0]) - if self.bin: - write(POP_MARK + get) - else: # proto 0 -- POP_MARK not available - write(POP * (n+1) + get) - return - - # No recursion. - write(TUPLE) - self.memoize(obj) - - dispatch[tuple] = save_tuple - - def save_list(self, obj): - if self.bin: - self.write(EMPTY_LIST) - else: # proto 0 -- can't use EMPTY_LIST - self.write(MARK + LIST) - - self.memoize(obj) - self._batch_appends(obj, obj) - - dispatch[list] = save_list - - _BATCHSIZE = 1000 - - def _batch_appends(self, items, obj): - # Helper to batch up APPENDS sequences - save = self.save - write = self.write - - if not self.bin: - for i, x in enumerate(items): - try: - save(x) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {i}') - raise - write(APPEND) - return - - start = 0 - for batch in batched(items, self._BATCHSIZE): - batch_len = len(batch) - if batch_len != 1: - write(MARK) - for i, x in enumerate(batch, start): - try: - save(x) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {i}') - raise - write(APPENDS) - else: - try: - save(batch[0]) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {start}') - raise - write(APPEND) - start += batch_len - - def save_dict(self, obj): - if self.bin: - self.write(EMPTY_DICT) - else: # proto 0 -- can't use EMPTY_DICT - self.write(MARK + DICT) - - self.memoize(obj) - self._batch_setitems(obj.items(), obj) - - dispatch[dict] = save_dict - - def _batch_setitems(self, items, obj): - # Helper to batch up SETITEMS sequences; proto >= 1 only - save = self.save - write = self.write - - if not self.bin: - for k, v in items: - save(k) - try: - save(v) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {k!r}') - raise - write(SETITEM) - return - - for batch in batched(items, self._BATCHSIZE): - if len(batch) != 1: - write(MARK) - for k, v in batch: - save(k) - try: - save(v) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {k!r}') - raise - write(SETITEMS) - else: - k, v = batch[0] - save(k) - try: - save(v) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} item {k!r}') - raise - write(SETITEM) - - def save_set(self, obj): - save = self.save - write = self.write - - if self.proto < 4: - self.save_reduce(set, (list(obj),), obj=obj) - return - - write(EMPTY_SET) - self.memoize(obj) - - for batch in batched(obj, self._BATCHSIZE): - write(MARK) - try: - for item in batch: - save(item) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} element') - raise - write(ADDITEMS) - dispatch[set] = save_set - - def save_frozenset(self, obj): - save = self.save - write = self.write - - if self.proto < 4: - self.save_reduce(frozenset, (list(obj),), obj=obj) - return - - write(MARK) - try: - for item in obj: - save(item) - except BaseException as exc: - exc.add_note(f'when serializing {_T(obj)} element') - raise - - if id(obj) in self.memo: - # If the object is already in the memo, this means it is - # recursive. In this case, throw away everything we put on the - # stack, and fetch the object back from the memo. - write(POP_MARK + self.get(self.memo[id(obj)][0])) - return - - write(FROZENSET) - self.memoize(obj) - dispatch[frozenset] = save_frozenset - - def save_global(self, obj, name=None): - write = self.write - memo = self.memo - - if name is None: - name = getattr(obj, '__qualname__', None) - if name is None: - name = obj.__name__ - - module_name = whichmodule(obj, name) - if self.proto >= 2: - code = _extension_registry.get((module_name, name), _NoValue) - if code is not _NoValue: - if code <= 0xff: - data = pack("<B", code) - if data == b'\0': - # Should never happen in normal circumstances, - # since the type and the value of the code are - # checked in copyreg.add_extension(). - raise RuntimeError("extension code 0 is out of range") - write(EXT1 + data) - elif code <= 0xffff: - write(EXT2 + pack("<H", code)) - else: - write(EXT4 + pack("<i", code)) - return - - if self.proto >= 4: - self.save(module_name) - self.save(name) - write(STACK_GLOBAL) - elif '.' in name: - # In protocol < 4, objects with multi-part __qualname__ - # are represented as - # getattr(getattr(..., attrname1), attrname2). - dotted_path = name.split('.') - name = dotted_path.pop(0) - save = self.save - for attrname in dotted_path: - save(getattr) - if self.proto < 2: - write(MARK) - self._save_toplevel_by_name(module_name, name) - for attrname in dotted_path: - save(attrname) - if self.proto < 2: - write(TUPLE) - else: - write(TUPLE2) - write(REDUCE) - else: - self._save_toplevel_by_name(module_name, name) - - self.memoize(obj) - - def _save_toplevel_by_name(self, module_name, name): - if self.proto >= 3: - # Non-ASCII identifiers are supported only with protocols >= 3. - encoding = "utf-8" - else: - if self.fix_imports: - r_name_mapping = _compat_pickle.REVERSE_NAME_MAPPING - r_import_mapping = _compat_pickle.REVERSE_IMPORT_MAPPING - if (module_name, name) in r_name_mapping: - module_name, name = r_name_mapping[(module_name, name)] - elif module_name in r_import_mapping: - module_name = r_import_mapping[module_name] - encoding = "ascii" - try: - self.write(GLOBAL + bytes(module_name, encoding) + b'\n') - except UnicodeEncodeError: - raise PicklingError( - f"can't pickle module identifier {module_name!r} using " - f"pickle protocol {self.proto}") - try: - self.write(bytes(name, encoding) + b'\n') - except UnicodeEncodeError: - raise PicklingError( - f"can't pickle global identifier {name!r} using " - f"pickle protocol {self.proto}") - - def save_type(self, obj): - if obj is type(None): - return self.save_reduce(type, (None,), obj=obj) - elif obj is type(NotImplemented): - return self.save_reduce(type, (NotImplemented,), obj=obj) - elif obj is type(...): - return self.save_reduce(type, (...,), obj=obj) - return self.save_global(obj) - - dispatch[FunctionType] = save_global - dispatch[type] = save_type - - -# Unpickling machinery - -class _Unpickler: - - def __init__(self, file, *, fix_imports=True, - encoding="ASCII", errors="strict", buffers=None): - """This takes a binary file for reading a pickle data stream. - - The protocol version of the pickle is detected automatically, so - no proto argument is needed. - - The argument *file* must have two methods, a read() method that - takes an integer argument, and a readline() method that requires - no arguments. Both methods should return bytes. Thus *file* - can be a binary file object opened for reading, an io.BytesIO - object, or any other custom object that meets this interface. - - The file-like object must have two methods, a read() method - that takes an integer argument, and a readline() method that - requires no arguments. Both methods should return bytes. - Thus file-like object can be a binary file object opened for - reading, a BytesIO object, or any other custom object that - meets this interface. - - If *buffers* is not None, it should be an iterable of buffer-enabled - objects that is consumed each time the pickle stream references - an out-of-band buffer view. Such buffers have been given in order - to the *buffer_callback* of a Pickler object. - - If *buffers* is None (the default), then the buffers are taken - from the pickle stream, assuming they are serialized there. - It is an error for *buffers* to be None if the pickle stream - was produced with a non-None *buffer_callback*. - - Other optional arguments are *fix_imports*, *encoding* and - *errors*, which are used to control compatibility support for - pickle stream generated by Python 2. If *fix_imports* is True, - pickle will try to map the old Python 2 names to the new names - used in Python 3. The *encoding* and *errors* tell pickle how - to decode 8-bit string instances pickled by Python 2; these - default to 'ASCII' and 'strict', respectively. *encoding* can be - 'bytes' to read these 8-bit string instances as bytes objects. - """ - self._buffers = iter(buffers) if buffers is not None else None - self._file_readline = file.readline - self._file_read = file.read - self.memo = {} - self.encoding = encoding - self.errors = errors - self.proto = 0 - self.fix_imports = fix_imports - - def load(self): - """Read a pickled object representation from the open file. - - Return the reconstituted object hierarchy specified in the file. - """ - # Check whether Unpickler was initialized correctly. This is - # only needed to mimic the behavior of _pickle.Unpickler.dump(). - if not hasattr(self, "_file_read"): - raise UnpicklingError("Unpickler.__init__() was not called by " - "%s.__init__()" % (self.__class__.__name__,)) - self._unframer = _Unframer(self._file_read, self._file_readline) - self.read = self._unframer.read - self.readinto = self._unframer.readinto - self.readline = self._unframer.readline - self.metastack = [] - self.stack = [] - self.append = self.stack.append - self.proto = 0 - read = self.read - dispatch = self.dispatch - try: - while True: - key = read(1) - if not key: - raise EOFError - assert isinstance(key, bytes_types) - dispatch[key[0]](self) - except _Stop as stopinst: - return stopinst.value - - # Return a list of items pushed in the stack after last MARK instruction. - def pop_mark(self): - items = self.stack - self.stack = self.metastack.pop() - self.append = self.stack.append - return items - - def persistent_load(self, pid): - raise UnpicklingError("unsupported persistent id encountered") - - dispatch = {} - - def load_proto(self): - proto = self.read(1)[0] - if not 0 <= proto <= HIGHEST_PROTOCOL: - raise ValueError("unsupported pickle protocol: %d" % proto) - self.proto = proto - dispatch[PROTO[0]] = load_proto - - def load_frame(self): - frame_size, = unpack('<Q', self.read(8)) - if frame_size > sys.maxsize: - raise ValueError("frame size > sys.maxsize: %d" % frame_size) - self._unframer.load_frame(frame_size) - dispatch[FRAME[0]] = load_frame - - def load_persid(self): - try: - pid = self.readline()[:-1].decode("ascii") - except UnicodeDecodeError: - raise UnpicklingError( - "persistent IDs in protocol 0 must be ASCII strings") - self.append(self.persistent_load(pid)) - dispatch[PERSID[0]] = load_persid - - def load_binpersid(self): - pid = self.stack.pop() - self.append(self.persistent_load(pid)) - dispatch[BINPERSID[0]] = load_binpersid - - def load_none(self): - self.append(None) - dispatch[NONE[0]] = load_none - - def load_false(self): - self.append(False) - dispatch[NEWFALSE[0]] = load_false - - def load_true(self): - self.append(True) - dispatch[NEWTRUE[0]] = load_true - - def load_int(self): - data = self.readline() - if data == FALSE[1:]: - val = False - elif data == TRUE[1:]: - val = True - else: - val = int(data) - self.append(val) - dispatch[INT[0]] = load_int - - def load_binint(self): - self.append(unpack('<i', self.read(4))[0]) - dispatch[BININT[0]] = load_binint - - def load_binint1(self): - self.append(self.read(1)[0]) - dispatch[BININT1[0]] = load_binint1 - - def load_binint2(self): - self.append(unpack('<H', self.read(2))[0]) - dispatch[BININT2[0]] = load_binint2 - - def load_long(self): - val = self.readline()[:-1] - if val and val[-1] == b'L'[0]: - val = val[:-1] - self.append(int(val)) - dispatch[LONG[0]] = load_long - - def load_long1(self): - n = self.read(1)[0] - data = self.read(n) - self.append(decode_long(data)) - dispatch[LONG1[0]] = load_long1 - - def load_long4(self): - n, = unpack('<i', self.read(4)) - if n < 0: - # Corrupt or hostile pickle -- we never write one like this - raise UnpicklingError("LONG pickle has negative byte count") - data = self.read(n) - self.append(decode_long(data)) - dispatch[LONG4[0]] = load_long4 - - def load_float(self): - self.append(float(self.readline()[:-1])) - dispatch[FLOAT[0]] = load_float - - def load_binfloat(self): - self.append(unpack('>d', self.read(8))[0]) - dispatch[BINFLOAT[0]] = load_binfloat - - def _decode_string(self, value): - # Used to allow strings from Python 2 to be decoded either as - # bytes or Unicode strings. This should be used only with the - # STRING, BINSTRING and SHORT_BINSTRING opcodes. - if self.encoding == "bytes": - return value - else: - return value.decode(self.encoding, self.errors) - - def load_string(self): - data = self.readline()[:-1] - # Strip outermost quotes - if len(data) >= 2 and data[0] == data[-1] and data[0] in b'"\'': - data = data[1:-1] - else: - raise UnpicklingError("the STRING opcode argument must be quoted") - self.append(self._decode_string(codecs.escape_decode(data)[0])) - dispatch[STRING[0]] = load_string - - def load_binstring(self): - # Deprecated BINSTRING uses signed 32-bit length - len, = unpack('<i', self.read(4)) - if len < 0: - raise UnpicklingError("BINSTRING pickle has negative byte count") - data = self.read(len) - self.append(self._decode_string(data)) - dispatch[BINSTRING[0]] = load_binstring - - def load_binbytes(self): - len, = unpack('<I', self.read(4)) - if len > maxsize: - raise UnpicklingError("BINBYTES exceeds system's maximum size " - "of %d bytes" % maxsize) - self.append(self.read(len)) - dispatch[BINBYTES[0]] = load_binbytes - - def load_unicode(self): - self.append(str(self.readline()[:-1], 'raw-unicode-escape')) - dispatch[UNICODE[0]] = load_unicode - - def load_binunicode(self): - len, = unpack('<I', self.read(4)) - if len > maxsize: - raise UnpicklingError("BINUNICODE exceeds system's maximum size " - "of %d bytes" % maxsize) - self.append(str(self.read(len), 'utf-8', 'surrogatepass')) - dispatch[BINUNICODE[0]] = load_binunicode - - def load_binunicode8(self): - len, = unpack('<Q', self.read(8)) - if len > maxsize: - raise UnpicklingError("BINUNICODE8 exceeds system's maximum size " - "of %d bytes" % maxsize) - self.append(str(self.read(len), 'utf-8', 'surrogatepass')) - dispatch[BINUNICODE8[0]] = load_binunicode8 - - def load_binbytes8(self): - len, = unpack('<Q', self.read(8)) - if len > maxsize: - raise UnpicklingError("BINBYTES8 exceeds system's maximum size " - "of %d bytes" % maxsize) - self.append(self.read(len)) - dispatch[BINBYTES8[0]] = load_binbytes8 - - def load_bytearray8(self): - len, = unpack('<Q', self.read(8)) - if len > maxsize: - raise UnpicklingError("BYTEARRAY8 exceeds system's maximum size " - "of %d bytes" % maxsize) - b = bytearray(len) - self.readinto(b) - self.append(b) - dispatch[BYTEARRAY8[0]] = load_bytearray8 - - def load_next_buffer(self): - if self._buffers is None: - raise UnpicklingError("pickle stream refers to out-of-band data " - "but no *buffers* argument was given") - try: - buf = next(self._buffers) - except StopIteration: - raise UnpicklingError("not enough out-of-band buffers") - self.append(buf) - dispatch[NEXT_BUFFER[0]] = load_next_buffer - - def load_readonly_buffer(self): - buf = self.stack[-1] - with memoryview(buf) as m: - if not m.readonly: - self.stack[-1] = m.toreadonly() - dispatch[READONLY_BUFFER[0]] = load_readonly_buffer - - def load_short_binstring(self): - len = self.read(1)[0] - data = self.read(len) - self.append(self._decode_string(data)) - dispatch[SHORT_BINSTRING[0]] = load_short_binstring - - def load_short_binbytes(self): - len = self.read(1)[0] - self.append(self.read(len)) - dispatch[SHORT_BINBYTES[0]] = load_short_binbytes - - def load_short_binunicode(self): - len = self.read(1)[0] - self.append(str(self.read(len), 'utf-8', 'surrogatepass')) - dispatch[SHORT_BINUNICODE[0]] = load_short_binunicode - - def load_tuple(self): - items = self.pop_mark() - self.append(tuple(items)) - dispatch[TUPLE[0]] = load_tuple - - def load_empty_tuple(self): - self.append(()) - dispatch[EMPTY_TUPLE[0]] = load_empty_tuple - - def load_tuple1(self): - self.stack[-1] = (self.stack[-1],) - dispatch[TUPLE1[0]] = load_tuple1 - - def load_tuple2(self): - self.stack[-2:] = [(self.stack[-2], self.stack[-1])] - dispatch[TUPLE2[0]] = load_tuple2 - - def load_tuple3(self): - self.stack[-3:] = [(self.stack[-3], self.stack[-2], self.stack[-1])] - dispatch[TUPLE3[0]] = load_tuple3 - - def load_empty_list(self): - self.append([]) - dispatch[EMPTY_LIST[0]] = load_empty_list - - def load_empty_dictionary(self): - self.append({}) - dispatch[EMPTY_DICT[0]] = load_empty_dictionary - - def load_empty_set(self): - self.append(set()) - dispatch[EMPTY_SET[0]] = load_empty_set - - def load_frozenset(self): - items = self.pop_mark() - self.append(frozenset(items)) - dispatch[FROZENSET[0]] = load_frozenset - - def load_list(self): - items = self.pop_mark() - self.append(items) - dispatch[LIST[0]] = load_list - - def load_dict(self): - items = self.pop_mark() - d = {items[i]: items[i+1] - for i in range(0, len(items), 2)} - self.append(d) - dispatch[DICT[0]] = load_dict - - # INST and OBJ differ only in how they get a class object. It's not - # only sensible to do the rest in a common routine, the two routines - # previously diverged and grew different bugs. - # klass is the class to instantiate, and k points to the topmost mark - # object, following which are the arguments for klass.__init__. - def _instantiate(self, klass, args): - if (args or not isinstance(klass, type) or - hasattr(klass, "__getinitargs__")): - try: - value = klass(*args) - except TypeError as err: - raise TypeError("in constructor for %s: %s" % - (klass.__name__, str(err)), err.__traceback__) - else: - value = klass.__new__(klass) - self.append(value) - - def load_inst(self): - module = self.readline()[:-1].decode("ascii") - name = self.readline()[:-1].decode("ascii") - klass = self.find_class(module, name) - self._instantiate(klass, self.pop_mark()) - dispatch[INST[0]] = load_inst - - def load_obj(self): - # Stack is ... markobject classobject arg1 arg2 ... - args = self.pop_mark() - cls = args.pop(0) - self._instantiate(cls, args) - dispatch[OBJ[0]] = load_obj - - def load_newobj(self): - args = self.stack.pop() - cls = self.stack.pop() - obj = cls.__new__(cls, *args) - self.append(obj) - dispatch[NEWOBJ[0]] = load_newobj - - def load_newobj_ex(self): - kwargs = self.stack.pop() - args = self.stack.pop() - cls = self.stack.pop() - obj = cls.__new__(cls, *args, **kwargs) - self.append(obj) - dispatch[NEWOBJ_EX[0]] = load_newobj_ex - - def load_global(self): - module = self.readline()[:-1].decode("utf-8") - name = self.readline()[:-1].decode("utf-8") - klass = self.find_class(module, name) - self.append(klass) - dispatch[GLOBAL[0]] = load_global - - def load_stack_global(self): - name = self.stack.pop() - module = self.stack.pop() - if type(name) is not str or type(module) is not str: - raise UnpicklingError("STACK_GLOBAL requires str") - self.append(self.find_class(module, name)) - dispatch[STACK_GLOBAL[0]] = load_stack_global - - def load_ext1(self): - code = self.read(1)[0] - self.get_extension(code) - dispatch[EXT1[0]] = load_ext1 - - def load_ext2(self): - code, = unpack('<H', self.read(2)) - self.get_extension(code) - dispatch[EXT2[0]] = load_ext2 - - def load_ext4(self): - code, = unpack('<i', self.read(4)) - self.get_extension(code) - dispatch[EXT4[0]] = load_ext4 - - def get_extension(self, code): - obj = _extension_cache.get(code, _NoValue) - if obj is not _NoValue: - self.append(obj) - return - key = _inverted_registry.get(code) - if not key: - if code <= 0: # note that 0 is forbidden - # Corrupt or hostile pickle. - raise UnpicklingError("EXT specifies code <= 0") - raise ValueError("unregistered extension code %d" % code) - obj = self.find_class(*key) - _extension_cache[code] = obj - self.append(obj) - - def find_class(self, module, name): - # Subclasses may override this. - sys.audit('pickle.find_class', module, name) - if self.proto < 3 and self.fix_imports: - if (module, name) in _compat_pickle.NAME_MAPPING: - module, name = _compat_pickle.NAME_MAPPING[(module, name)] - elif module in _compat_pickle.IMPORT_MAPPING: - module = _compat_pickle.IMPORT_MAPPING[module] - __import__(module, level=0) - if self.proto >= 4 and '.' in name: - dotted_path = name.split('.') - try: - return _getattribute(sys.modules[module], dotted_path) - except AttributeError: - raise AttributeError( - f"Can't resolve path {name!r} on module {module!r}") - else: - return getattr(sys.modules[module], name) - - def load_reduce(self): - stack = self.stack - args = stack.pop() - func = stack[-1] - stack[-1] = func(*args) - dispatch[REDUCE[0]] = load_reduce - - def load_pop(self): - if self.stack: - del self.stack[-1] - else: - self.pop_mark() - dispatch[POP[0]] = load_pop - - def load_pop_mark(self): - self.pop_mark() - dispatch[POP_MARK[0]] = load_pop_mark - - def load_dup(self): - self.append(self.stack[-1]) - dispatch[DUP[0]] = load_dup - - def load_get(self): - i = int(self.readline()[:-1]) - try: - self.append(self.memo[i]) - except KeyError: - msg = f'Memo value not found at index {i}' - raise UnpicklingError(msg) from None - dispatch[GET[0]] = load_get - - def load_binget(self): - i = self.read(1)[0] - try: - self.append(self.memo[i]) - except KeyError as exc: - msg = f'Memo value not found at index {i}' - raise UnpicklingError(msg) from None - dispatch[BINGET[0]] = load_binget - - def load_long_binget(self): - i, = unpack('<I', self.read(4)) - try: - self.append(self.memo[i]) - except KeyError as exc: - msg = f'Memo value not found at index {i}' - raise UnpicklingError(msg) from None - dispatch[LONG_BINGET[0]] = load_long_binget - - def load_put(self): - i = int(self.readline()[:-1]) - if i < 0: - raise ValueError("negative PUT argument") - self.memo[i] = self.stack[-1] - dispatch[PUT[0]] = load_put - - def load_binput(self): - i = self.read(1)[0] - if i < 0: - raise ValueError("negative BINPUT argument") - self.memo[i] = self.stack[-1] - dispatch[BINPUT[0]] = load_binput - - def load_long_binput(self): - i, = unpack('<I', self.read(4)) - if i > maxsize: - raise ValueError("negative LONG_BINPUT argument") - self.memo[i] = self.stack[-1] - dispatch[LONG_BINPUT[0]] = load_long_binput - - def load_memoize(self): - memo = self.memo - memo[len(memo)] = self.stack[-1] - dispatch[MEMOIZE[0]] = load_memoize - - def load_append(self): - stack = self.stack - value = stack.pop() - list = stack[-1] - list.append(value) - dispatch[APPEND[0]] = load_append - - def load_appends(self): - items = self.pop_mark() - list_obj = self.stack[-1] - try: - extend = list_obj.extend - except AttributeError: - pass - else: - extend(items) - return - # Even if the PEP 307 requires extend() and append() methods, - # fall back on append() if the object has no extend() method - # for backward compatibility. - append = list_obj.append - for item in items: - append(item) - dispatch[APPENDS[0]] = load_appends - - def load_setitem(self): - stack = self.stack - value = stack.pop() - key = stack.pop() - dict = stack[-1] - dict[key] = value - dispatch[SETITEM[0]] = load_setitem - - def load_setitems(self): - items = self.pop_mark() - dict = self.stack[-1] - for i in range(0, len(items), 2): - dict[items[i]] = items[i + 1] - dispatch[SETITEMS[0]] = load_setitems - - def load_additems(self): - items = self.pop_mark() - set_obj = self.stack[-1] - if isinstance(set_obj, set): - set_obj.update(items) - else: - add = set_obj.add - for item in items: - add(item) - dispatch[ADDITEMS[0]] = load_additems - - def load_build(self): - stack = self.stack - state = stack.pop() - inst = stack[-1] - setstate = getattr(inst, "__setstate__", _NoValue) - if setstate is not _NoValue: - setstate(state) - return - slotstate = None - if isinstance(state, tuple) and len(state) == 2: - state, slotstate = state - if state: - inst_dict = inst.__dict__ - intern = sys.intern - for k, v in state.items(): - if type(k) is str: - inst_dict[intern(k)] = v - else: - inst_dict[k] = v - if slotstate: - for k, v in slotstate.items(): - setattr(inst, k, v) - dispatch[BUILD[0]] = load_build - - def load_mark(self): - self.metastack.append(self.stack) - self.stack = [] - self.append = self.stack.append - dispatch[MARK[0]] = load_mark - - def load_stop(self): - value = self.stack.pop() - raise _Stop(value) - dispatch[STOP[0]] = load_stop - - -# Shorthands - -def _dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None): - _Pickler(file, protocol, fix_imports=fix_imports, - buffer_callback=buffer_callback).dump(obj) - -def _dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None): - f = io.BytesIO() - _Pickler(f, protocol, fix_imports=fix_imports, - buffer_callback=buffer_callback).dump(obj) - res = f.getvalue() - assert isinstance(res, bytes_types) - return res - -def _load(file, *, fix_imports=True, encoding="ASCII", errors="strict", - buffers=None): - return _Unpickler(file, fix_imports=fix_imports, buffers=buffers, - encoding=encoding, errors=errors).load() - -def _loads(s, /, *, fix_imports=True, encoding="ASCII", errors="strict", - buffers=None): - if isinstance(s, str): - raise TypeError("Can't load pickle from unicode string") - file = io.BytesIO(s) - return _Unpickler(file, fix_imports=fix_imports, buffers=buffers, - encoding=encoding, errors=errors).load() - -# Use the faster _pickle if possible -try: - from _pickle import ( - PickleError, - PicklingError, - UnpicklingError, - Pickler, - Unpickler, - dump, - dumps, - load, - loads - ) -except ImportError: - Pickler, Unpickler = _Pickler, _Unpickler - dump, dumps, load, loads = _dump, _dumps, _load, _loads - - -def _main(args=None): - import argparse - import pprint - parser = argparse.ArgumentParser( - description='display contents of the pickle files', - color=True, - ) - parser.add_argument( - 'pickle_file', - nargs='+', help='the pickle file') - args = parser.parse_args(args) - for fn in args.pickle_file: - if fn == '-': - obj = load(sys.stdin.buffer) - else: - with open(fn, 'rb') as f: - obj = load(f) - pprint.pprint(obj) - - -if __name__ == "__main__": - _main() diff --git a/Python314_4_x86_Template/Lib/pickletools.py b/Python314_4_x86_Template/Lib/pickletools.py deleted file mode 100644 index 254b6c7fc..000000000 --- a/Python314_4_x86_Template/Lib/pickletools.py +++ /dev/null @@ -1,2887 +0,0 @@ -'''"Executable documentation" for the pickle module. - -Extensive comments about the pickle protocols and pickle-machine opcodes -can be found here. Some functions meant for external use: - -genops(pickle) - Generate all the opcodes in a pickle, as (opcode, arg, position) triples. - -dis(pickle, out=None, memo=None, indentlevel=4) - Print a symbolic disassembly of a pickle. -''' - -import codecs -import io -import pickle -import re -import sys - -__all__ = ['dis', 'genops', 'optimize'] - -bytes_types = pickle.bytes_types - -# Other ideas: -# -# - A pickle verifier: read a pickle and check it exhaustively for -# well-formedness. dis() does a lot of this already. -# -# - A protocol identifier: examine a pickle and return its protocol number -# (== the highest .proto attr value among all the opcodes in the pickle). -# dis() already prints this info at the end. -# -# - A pickle optimizer: for example, tuple-building code is sometimes more -# elaborate than necessary, catering for the possibility that the tuple -# is recursive. Or lots of times a PUT is generated that's never accessed -# by a later GET. - - -# "A pickle" is a program for a virtual pickle machine (PM, but more accurately -# called an unpickling machine). It's a sequence of opcodes, interpreted by the -# PM, building an arbitrarily complex Python object. -# -# For the most part, the PM is very simple: there are no looping, testing, or -# conditional instructions, no arithmetic and no function calls. Opcodes are -# executed once each, from first to last, until a STOP opcode is reached. -# -# The PM has two data areas, "the stack" and "the memo". -# -# Many opcodes push Python objects onto the stack; e.g., INT pushes a Python -# integer object on the stack, whose value is gotten from a decimal string -# literal immediately following the INT opcode in the pickle bytestream. Other -# opcodes take Python objects off the stack. The result of unpickling is -# whatever object is left on the stack when the final STOP opcode is executed. -# -# The memo is simply an array of objects, or it can be implemented as a dict -# mapping little integers to objects. The memo serves as the PM's "long term -# memory", and the little integers indexing the memo are akin to variable -# names. Some opcodes pop a stack object into the memo at a given index, -# and others push a memo object at a given index onto the stack again. -# -# At heart, that's all the PM has. Subtleties arise for these reasons: -# -# + Object identity. Objects can be arbitrarily complex, and subobjects -# may be shared (for example, the list [a, a] refers to the same object a -# twice). It can be vital that unpickling recreate an isomorphic object -# graph, faithfully reproducing sharing. -# -# + Recursive objects. For example, after "L = []; L.append(L)", L is a -# list, and L[0] is the same list. This is related to the object identity -# point, and some sequences of pickle opcodes are subtle in order to -# get the right result in all cases. -# -# + Things pickle doesn't know everything about. Examples of things pickle -# does know everything about are Python's builtin scalar and container -# types, like ints and tuples. They generally have opcodes dedicated to -# them. For things like module references and instances of user-defined -# classes, pickle's knowledge is limited. Historically, many enhancements -# have been made to the pickle protocol in order to do a better (faster, -# and/or more compact) job on those. -# -# + Backward compatibility and micro-optimization. As explained below, -# pickle opcodes never go away, not even when better ways to do a thing -# get invented. The repertoire of the PM just keeps growing over time. -# For example, protocol 0 had two opcodes for building Python integers (INT -# and LONG), protocol 1 added three more for more-efficient pickling of short -# integers, and protocol 2 added two more for more-efficient pickling of -# long integers (before protocol 2, the only ways to pickle a Python long -# took time quadratic in the number of digits, for both pickling and -# unpickling). "Opcode bloat" isn't so much a subtlety as a source of -# wearying complication. -# -# -# Pickle protocols: -# -# For compatibility, the meaning of a pickle opcode never changes. Instead new -# pickle opcodes get added, and each version's unpickler can handle all the -# pickle opcodes in all protocol versions to date. So old pickles continue to -# be readable forever. The pickler can generally be told to restrict itself to -# the subset of opcodes available under previous protocol versions too, so that -# users can create pickles under the current version readable by older -# versions. However, a pickle does not contain its version number embedded -# within it. If an older unpickler tries to read a pickle using a later -# protocol, the result is most likely an exception due to seeing an unknown (in -# the older unpickler) opcode. -# -# The original pickle used what's now called "protocol 0", and what was called -# "text mode" before Python 2.3. The entire pickle bytestream is made up of -# printable 7-bit ASCII characters, plus the newline character, in protocol 0. -# That's why it was called text mode. Protocol 0 is small and elegant, but -# sometimes painfully inefficient. -# -# The second major set of additions is now called "protocol 1", and was called -# "binary mode" before Python 2.3. This added many opcodes with arguments -# consisting of arbitrary bytes, including NUL bytes and unprintable "high bit" -# bytes. Binary mode pickles can be substantially smaller than equivalent -# text mode pickles, and sometimes faster too; e.g., BININT represents a 4-byte -# int as 4 bytes following the opcode, which is cheaper to unpickle than the -# (perhaps) 11-character decimal string attached to INT. Protocol 1 also added -# a number of opcodes that operate on many stack elements at once (like APPENDS -# and SETITEMS), and "shortcut" opcodes (like EMPTY_DICT and EMPTY_TUPLE). -# -# The third major set of additions came in Python 2.3, and is called "protocol -# 2". This added: -# -# - A better way to pickle instances of new-style classes (NEWOBJ). -# -# - A way for a pickle to identify its protocol (PROTO). -# -# - Time- and space- efficient pickling of long ints (LONG{1,4}). -# -# - Shortcuts for small tuples (TUPLE{1,2,3}}. -# -# - Dedicated opcodes for bools (NEWTRUE, NEWFALSE). -# -# - The "extension registry", a vector of popular objects that can be pushed -# efficiently by index (EXT{1,2,4}). This is akin to the memo and GET, but -# the registry contents are predefined (there's nothing akin to the memo's -# PUT). -# -# Another independent change with Python 2.3 is the abandonment of any -# pretense that it might be safe to load pickles received from untrusted -# parties -- no sufficient security analysis has been done to guarantee -# this and there isn't a use case that warrants the expense of such an -# analysis. -# -# To this end, all tests for __safe_for_unpickling__ or for -# copyreg.safe_constructors are removed from the unpickling code. -# References to these variables in the descriptions below are to be seen -# as describing unpickling in Python 2.2 and before. - - -# Meta-rule: Descriptions are stored in instances of descriptor objects, -# with plain constructors. No meta-language is defined from which -# descriptors could be constructed. If you want, e.g., XML, write a little -# program to generate XML from the objects. - -############################################################################## -# Some pickle opcodes have an argument, following the opcode in the -# bytestream. An argument is of a specific type, described by an instance -# of ArgumentDescriptor. These are not to be confused with arguments taken -# off the stack -- ArgumentDescriptor applies only to arguments embedded in -# the opcode stream, immediately following an opcode. - -# Represents the number of bytes consumed by an argument delimited by the -# next newline character. -UP_TO_NEWLINE = -1 - -# Represents the number of bytes consumed by a two-argument opcode where -# the first argument gives the number of bytes in the second argument. -TAKEN_FROM_ARGUMENT1 = -2 # num bytes is 1-byte unsigned int -TAKEN_FROM_ARGUMENT4 = -3 # num bytes is 4-byte signed little-endian int -TAKEN_FROM_ARGUMENT4U = -4 # num bytes is 4-byte unsigned little-endian int -TAKEN_FROM_ARGUMENT8U = -5 # num bytes is 8-byte unsigned little-endian int - -class ArgumentDescriptor(object): - __slots__ = ( - # name of descriptor record, also a module global name; a string - 'name', - - # length of argument, in bytes; an int; UP_TO_NEWLINE and - # TAKEN_FROM_ARGUMENT{1,4,8} are negative values for variable-length - # cases - 'n', - - # a function taking a file-like object, reading this kind of argument - # from the object at the current position, advancing the current - # position by n bytes, and returning the value of the argument - 'reader', - - # human-readable docs for this arg descriptor; a string - 'doc', - ) - - def __init__(self, name, n, reader, doc): - assert isinstance(name, str) - self.name = name - - assert isinstance(n, int) and (n >= 0 or - n in (UP_TO_NEWLINE, - TAKEN_FROM_ARGUMENT1, - TAKEN_FROM_ARGUMENT4, - TAKEN_FROM_ARGUMENT4U, - TAKEN_FROM_ARGUMENT8U)) - self.n = n - - self.reader = reader - - assert isinstance(doc, str) - self.doc = doc - -from struct import unpack as _unpack - -def read_uint1(f): - r""" - >>> import io - >>> read_uint1(io.BytesIO(b'\xff')) - 255 - """ - - data = f.read(1) - if data: - return data[0] - raise ValueError("not enough data in stream to read uint1") - -uint1 = ArgumentDescriptor( - name='uint1', - n=1, - reader=read_uint1, - doc="One-byte unsigned integer.") - - -def read_uint2(f): - r""" - >>> import io - >>> read_uint2(io.BytesIO(b'\xff\x00')) - 255 - >>> read_uint2(io.BytesIO(b'\xff\xff')) - 65535 - """ - - data = f.read(2) - if len(data) == 2: - return _unpack("<H", data)[0] - raise ValueError("not enough data in stream to read uint2") - -uint2 = ArgumentDescriptor( - name='uint2', - n=2, - reader=read_uint2, - doc="Two-byte unsigned integer, little-endian.") - - -def read_int4(f): - r""" - >>> import io - >>> read_int4(io.BytesIO(b'\xff\x00\x00\x00')) - 255 - >>> read_int4(io.BytesIO(b'\x00\x00\x00\x80')) == -(2**31) - True - """ - - data = f.read(4) - if len(data) == 4: - return _unpack("<i", data)[0] - raise ValueError("not enough data in stream to read int4") - -int4 = ArgumentDescriptor( - name='int4', - n=4, - reader=read_int4, - doc="Four-byte signed integer, little-endian, 2's complement.") - - -def read_uint4(f): - r""" - >>> import io - >>> read_uint4(io.BytesIO(b'\xff\x00\x00\x00')) - 255 - >>> read_uint4(io.BytesIO(b'\x00\x00\x00\x80')) == 2**31 - True - """ - - data = f.read(4) - if len(data) == 4: - return _unpack("<I", data)[0] - raise ValueError("not enough data in stream to read uint4") - -uint4 = ArgumentDescriptor( - name='uint4', - n=4, - reader=read_uint4, - doc="Four-byte unsigned integer, little-endian.") - - -def read_uint8(f): - r""" - >>> import io - >>> read_uint8(io.BytesIO(b'\xff\x00\x00\x00\x00\x00\x00\x00')) - 255 - >>> read_uint8(io.BytesIO(b'\xff' * 8)) == 2**64-1 - True - """ - - data = f.read(8) - if len(data) == 8: - return _unpack("<Q", data)[0] - raise ValueError("not enough data in stream to read uint8") - -uint8 = ArgumentDescriptor( - name='uint8', - n=8, - reader=read_uint8, - doc="Eight-byte unsigned integer, little-endian.") - - -def read_stringnl(f, decode=True, stripquotes=True, *, encoding='latin-1'): - r""" - >>> import io - >>> read_stringnl(io.BytesIO(b"'abcd'\nefg\n")) - 'abcd' - - >>> read_stringnl(io.BytesIO(b"\n")) - Traceback (most recent call last): - ... - ValueError: no string quotes around b'' - - >>> read_stringnl(io.BytesIO(b"\n"), stripquotes=False) - '' - - >>> read_stringnl(io.BytesIO(b"''\n")) - '' - - >>> read_stringnl(io.BytesIO(b'"abcd"')) - Traceback (most recent call last): - ... - ValueError: no newline found when trying to read stringnl - - Embedded escapes are undone in the result. - >>> read_stringnl(io.BytesIO(br"'a\n\\b\x00c\td'" + b"\n'e'")) - 'a\n\\b\x00c\td' - """ - - data = f.readline() - if not data.endswith(b'\n'): - raise ValueError("no newline found when trying to read stringnl") - data = data[:-1] # lose the newline - - if stripquotes: - for q in (b'"', b"'"): - if data.startswith(q): - if not data.endswith(q): - raise ValueError("string quote %r not found at both " - "ends of %r" % (q, data)) - data = data[1:-1] - break - else: - raise ValueError("no string quotes around %r" % data) - - if decode: - data = codecs.escape_decode(data)[0].decode(encoding) - return data - -stringnl = ArgumentDescriptor( - name='stringnl', - n=UP_TO_NEWLINE, - reader=read_stringnl, - doc="""A newline-terminated string. - - This is a repr-style string, with embedded escapes, and - bracketing quotes. - """) - -def read_stringnl_noescape(f): - return read_stringnl(f, stripquotes=False, encoding='utf-8') - -stringnl_noescape = ArgumentDescriptor( - name='stringnl_noescape', - n=UP_TO_NEWLINE, - reader=read_stringnl_noescape, - doc="""A newline-terminated string. - - This is a str-style string, without embedded escapes, - or bracketing quotes. It should consist solely of - printable ASCII characters. - """) - -def read_stringnl_noescape_pair(f): - r""" - >>> import io - >>> read_stringnl_noescape_pair(io.BytesIO(b"Queue\nEmpty\njunk")) - 'Queue Empty' - """ - - return "%s %s" % (read_stringnl_noescape(f), read_stringnl_noescape(f)) - -stringnl_noescape_pair = ArgumentDescriptor( - name='stringnl_noescape_pair', - n=UP_TO_NEWLINE, - reader=read_stringnl_noescape_pair, - doc="""A pair of newline-terminated strings. - - These are str-style strings, without embedded - escapes, or bracketing quotes. They should - consist solely of printable ASCII characters. - The pair is returned as a single string, with - a single blank separating the two strings. - """) - - -def read_string1(f): - r""" - >>> import io - >>> read_string1(io.BytesIO(b"\x00")) - '' - >>> read_string1(io.BytesIO(b"\x03abcdef")) - 'abc' - """ - - n = read_uint1(f) - assert n >= 0 - data = f.read(n) - if len(data) == n: - return data.decode("latin-1") - raise ValueError("expected %d bytes in a string1, but only %d remain" % - (n, len(data))) - -string1 = ArgumentDescriptor( - name="string1", - n=TAKEN_FROM_ARGUMENT1, - reader=read_string1, - doc="""A counted string. - - The first argument is a 1-byte unsigned int giving the number - of bytes in the string, and the second argument is that many - bytes. - """) - - -def read_string4(f): - r""" - >>> import io - >>> read_string4(io.BytesIO(b"\x00\x00\x00\x00abc")) - '' - >>> read_string4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) - 'abc' - >>> read_string4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) - Traceback (most recent call last): - ... - ValueError: expected 50331648 bytes in a string4, but only 6 remain - """ - - n = read_int4(f) - if n < 0: - raise ValueError("string4 byte count < 0: %d" % n) - data = f.read(n) - if len(data) == n: - return data.decode("latin-1") - raise ValueError("expected %d bytes in a string4, but only %d remain" % - (n, len(data))) - -string4 = ArgumentDescriptor( - name="string4", - n=TAKEN_FROM_ARGUMENT4, - reader=read_string4, - doc="""A counted string. - - The first argument is a 4-byte little-endian signed int giving - the number of bytes in the string, and the second argument is - that many bytes. - """) - - -def read_bytes1(f): - r""" - >>> import io - >>> read_bytes1(io.BytesIO(b"\x00")) - b'' - >>> read_bytes1(io.BytesIO(b"\x03abcdef")) - b'abc' - """ - - n = read_uint1(f) - assert n >= 0 - data = f.read(n) - if len(data) == n: - return data - raise ValueError("expected %d bytes in a bytes1, but only %d remain" % - (n, len(data))) - -bytes1 = ArgumentDescriptor( - name="bytes1", - n=TAKEN_FROM_ARGUMENT1, - reader=read_bytes1, - doc="""A counted bytes string. - - The first argument is a 1-byte unsigned int giving the number - of bytes, and the second argument is that many bytes. - """) - - -def read_bytes4(f): - r""" - >>> import io - >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x00abc")) - b'' - >>> read_bytes4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) - b'abc' - >>> read_bytes4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) - Traceback (most recent call last): - ... - ValueError: expected 50331648 bytes in a bytes4, but only 6 remain - """ - - n = read_uint4(f) - assert n >= 0 - if n > sys.maxsize: - raise ValueError("bytes4 byte count > sys.maxsize: %d" % n) - data = f.read(n) - if len(data) == n: - return data - raise ValueError("expected %d bytes in a bytes4, but only %d remain" % - (n, len(data))) - -bytes4 = ArgumentDescriptor( - name="bytes4", - n=TAKEN_FROM_ARGUMENT4U, - reader=read_bytes4, - doc="""A counted bytes string. - - The first argument is a 4-byte little-endian unsigned int giving - the number of bytes, and the second argument is that many bytes. - """) - - -def read_bytes8(f): - r""" - >>> import io, struct, sys - >>> read_bytes8(io.BytesIO(b"\x00\x00\x00\x00\x00\x00\x00\x00abc")) - b'' - >>> read_bytes8(io.BytesIO(b"\x03\x00\x00\x00\x00\x00\x00\x00abcdef")) - b'abc' - >>> bigsize8 = struct.pack("<Q", sys.maxsize//3) - >>> read_bytes8(io.BytesIO(bigsize8 + b"abcdef")) #doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: expected ... bytes in a bytes8, but only 6 remain - """ - - n = read_uint8(f) - assert n >= 0 - if n > sys.maxsize: - raise ValueError("bytes8 byte count > sys.maxsize: %d" % n) - data = f.read(n) - if len(data) == n: - return data - raise ValueError("expected %d bytes in a bytes8, but only %d remain" % - (n, len(data))) - -bytes8 = ArgumentDescriptor( - name="bytes8", - n=TAKEN_FROM_ARGUMENT8U, - reader=read_bytes8, - doc="""A counted bytes string. - - The first argument is an 8-byte little-endian unsigned int giving - the number of bytes, and the second argument is that many bytes. - """) - - -def read_bytearray8(f): - r""" - >>> import io, struct, sys - >>> read_bytearray8(io.BytesIO(b"\x00\x00\x00\x00\x00\x00\x00\x00abc")) - bytearray(b'') - >>> read_bytearray8(io.BytesIO(b"\x03\x00\x00\x00\x00\x00\x00\x00abcdef")) - bytearray(b'abc') - >>> bigsize8 = struct.pack("<Q", sys.maxsize//3) - >>> read_bytearray8(io.BytesIO(bigsize8 + b"abcdef")) #doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: expected ... bytes in a bytearray8, but only 6 remain - """ - - n = read_uint8(f) - assert n >= 0 - if n > sys.maxsize: - raise ValueError("bytearray8 byte count > sys.maxsize: %d" % n) - data = f.read(n) - if len(data) == n: - return bytearray(data) - raise ValueError("expected %d bytes in a bytearray8, but only %d remain" % - (n, len(data))) - -bytearray8 = ArgumentDescriptor( - name="bytearray8", - n=TAKEN_FROM_ARGUMENT8U, - reader=read_bytearray8, - doc="""A counted bytearray. - - The first argument is an 8-byte little-endian unsigned int giving - the number of bytes, and the second argument is that many bytes. - """) - -def read_unicodestringnl(f): - r""" - >>> import io - >>> read_unicodestringnl(io.BytesIO(b"abc\\uabcd\njunk")) == 'abc\uabcd' - True - """ - - data = f.readline() - if not data.endswith(b'\n'): - raise ValueError("no newline found when trying to read " - "unicodestringnl") - data = data[:-1] # lose the newline - return str(data, 'raw-unicode-escape') - -unicodestringnl = ArgumentDescriptor( - name='unicodestringnl', - n=UP_TO_NEWLINE, - reader=read_unicodestringnl, - doc="""A newline-terminated Unicode string. - - This is raw-unicode-escape encoded, so consists of - printable ASCII characters, and may contain embedded - escape sequences. - """) - - -def read_unicodestring1(f): - r""" - >>> import io - >>> s = 'abcd\uabcd' - >>> enc = s.encode('utf-8') - >>> enc - b'abcd\xea\xaf\x8d' - >>> n = bytes([len(enc)]) # little-endian 1-byte length - >>> t = read_unicodestring1(io.BytesIO(n + enc + b'junk')) - >>> s == t - True - - >>> read_unicodestring1(io.BytesIO(n + enc[:-1])) - Traceback (most recent call last): - ... - ValueError: expected 7 bytes in a unicodestring1, but only 6 remain - """ - - n = read_uint1(f) - assert n >= 0 - data = f.read(n) - if len(data) == n: - return str(data, 'utf-8', 'surrogatepass') - raise ValueError("expected %d bytes in a unicodestring1, but only %d " - "remain" % (n, len(data))) - -unicodestring1 = ArgumentDescriptor( - name="unicodestring1", - n=TAKEN_FROM_ARGUMENT1, - reader=read_unicodestring1, - doc="""A counted Unicode string. - - The first argument is a 1-byte little-endian signed int - giving the number of bytes in the string, and the second - argument-- the UTF-8 encoding of the Unicode string -- - contains that many bytes. - """) - - -def read_unicodestring4(f): - r""" - >>> import io - >>> s = 'abcd\uabcd' - >>> enc = s.encode('utf-8') - >>> enc - b'abcd\xea\xaf\x8d' - >>> n = bytes([len(enc), 0, 0, 0]) # little-endian 4-byte length - >>> t = read_unicodestring4(io.BytesIO(n + enc + b'junk')) - >>> s == t - True - - >>> read_unicodestring4(io.BytesIO(n + enc[:-1])) - Traceback (most recent call last): - ... - ValueError: expected 7 bytes in a unicodestring4, but only 6 remain - """ - - n = read_uint4(f) - assert n >= 0 - if n > sys.maxsize: - raise ValueError("unicodestring4 byte count > sys.maxsize: %d" % n) - data = f.read(n) - if len(data) == n: - return str(data, 'utf-8', 'surrogatepass') - raise ValueError("expected %d bytes in a unicodestring4, but only %d " - "remain" % (n, len(data))) - -unicodestring4 = ArgumentDescriptor( - name="unicodestring4", - n=TAKEN_FROM_ARGUMENT4U, - reader=read_unicodestring4, - doc="""A counted Unicode string. - - The first argument is a 4-byte little-endian signed int - giving the number of bytes in the string, and the second - argument-- the UTF-8 encoding of the Unicode string -- - contains that many bytes. - """) - - -def read_unicodestring8(f): - r""" - >>> import io - >>> s = 'abcd\uabcd' - >>> enc = s.encode('utf-8') - >>> enc - b'abcd\xea\xaf\x8d' - >>> n = bytes([len(enc)]) + b'\0' * 7 # little-endian 8-byte length - >>> t = read_unicodestring8(io.BytesIO(n + enc + b'junk')) - >>> s == t - True - - >>> read_unicodestring8(io.BytesIO(n + enc[:-1])) - Traceback (most recent call last): - ... - ValueError: expected 7 bytes in a unicodestring8, but only 6 remain - """ - - n = read_uint8(f) - assert n >= 0 - if n > sys.maxsize: - raise ValueError("unicodestring8 byte count > sys.maxsize: %d" % n) - data = f.read(n) - if len(data) == n: - return str(data, 'utf-8', 'surrogatepass') - raise ValueError("expected %d bytes in a unicodestring8, but only %d " - "remain" % (n, len(data))) - -unicodestring8 = ArgumentDescriptor( - name="unicodestring8", - n=TAKEN_FROM_ARGUMENT8U, - reader=read_unicodestring8, - doc="""A counted Unicode string. - - The first argument is an 8-byte little-endian signed int - giving the number of bytes in the string, and the second - argument-- the UTF-8 encoding of the Unicode string -- - contains that many bytes. - """) - - -def read_decimalnl_short(f): - r""" - >>> import io - >>> read_decimalnl_short(io.BytesIO(b"1234\n56")) - 1234 - - >>> read_decimalnl_short(io.BytesIO(b"1234L\n56")) - Traceback (most recent call last): - ... - ValueError: invalid literal for int() with base 10: b'1234L' - """ - - s = read_stringnl(f, decode=False, stripquotes=False) - - # There's a hack for True and False here. - if s == b"00": - return False - elif s == b"01": - return True - - return int(s) - -def read_decimalnl_long(f): - r""" - >>> import io - - >>> read_decimalnl_long(io.BytesIO(b"1234L\n56")) - 1234 - - >>> read_decimalnl_long(io.BytesIO(b"123456789012345678901234L\n6")) - 123456789012345678901234 - """ - - s = read_stringnl(f, decode=False, stripquotes=False) - if s[-1:] == b'L': - s = s[:-1] - return int(s) - - -decimalnl_short = ArgumentDescriptor( - name='decimalnl_short', - n=UP_TO_NEWLINE, - reader=read_decimalnl_short, - doc="""A newline-terminated decimal integer literal. - - This never has a trailing 'L', and the integer fit - in a short Python int on the box where the pickle - was written -- but there's no guarantee it will fit - in a short Python int on the box where the pickle - is read. - """) - -decimalnl_long = ArgumentDescriptor( - name='decimalnl_long', - n=UP_TO_NEWLINE, - reader=read_decimalnl_long, - doc="""A newline-terminated decimal integer literal. - - This has a trailing 'L', and can represent integers - of any size. - """) - - -def read_floatnl(f): - r""" - >>> import io - >>> read_floatnl(io.BytesIO(b"-1.25\n6")) - -1.25 - """ - s = read_stringnl(f, decode=False, stripquotes=False) - return float(s) - -floatnl = ArgumentDescriptor( - name='floatnl', - n=UP_TO_NEWLINE, - reader=read_floatnl, - doc="""A newline-terminated decimal floating literal. - - In general this requires 17 significant digits for roundtrip - identity, and pickling then unpickling infinities, NaNs, and - minus zero doesn't work across boxes, or on some boxes even - on itself (e.g., Windows can't read the strings it produces - for infinities or NaNs). - """) - -def read_float8(f): - r""" - >>> import io, struct - >>> raw = struct.pack(">d", -1.25) - >>> raw - b'\xbf\xf4\x00\x00\x00\x00\x00\x00' - >>> read_float8(io.BytesIO(raw + b"\n")) - -1.25 - """ - - data = f.read(8) - if len(data) == 8: - return _unpack(">d", data)[0] - raise ValueError("not enough data in stream to read float8") - - -float8 = ArgumentDescriptor( - name='float8', - n=8, - reader=read_float8, - doc="""An 8-byte binary representation of a float, big-endian. - - The format is unique to Python, and shared with the struct - module (format string '>d') "in theory" (the struct and pickle - implementations don't share the code -- they should). It's - strongly related to the IEEE-754 double format, and, in normal - cases, is in fact identical to the big-endian 754 double format. - On other boxes the dynamic range is limited to that of a 754 - double, and "add a half and chop" rounding is used to reduce - the precision to 53 bits. However, even on a 754 box, - infinities, NaNs, and minus zero may not be handled correctly - (may not survive roundtrip pickling intact). - """) - -# Protocol 2 formats - -from pickle import decode_long - -def read_long1(f): - r""" - >>> import io - >>> read_long1(io.BytesIO(b"\x00")) - 0 - >>> read_long1(io.BytesIO(b"\x02\xff\x00")) - 255 - >>> read_long1(io.BytesIO(b"\x02\xff\x7f")) - 32767 - >>> read_long1(io.BytesIO(b"\x02\x00\xff")) - -256 - >>> read_long1(io.BytesIO(b"\x02\x00\x80")) - -32768 - """ - - n = read_uint1(f) - data = f.read(n) - if len(data) != n: - raise ValueError("not enough data in stream to read long1") - return decode_long(data) - -long1 = ArgumentDescriptor( - name="long1", - n=TAKEN_FROM_ARGUMENT1, - reader=read_long1, - doc="""A binary long, little-endian, using 1-byte size. - - This first reads one byte as an unsigned size, then reads that - many bytes and interprets them as a little-endian 2's-complement long. - If the size is 0, that's taken as a shortcut for the long 0L. - """) - -def read_long4(f): - r""" - >>> import io - >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x00")) - 255 - >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x7f")) - 32767 - >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\xff")) - -256 - >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\x80")) - -32768 - >>> read_long1(io.BytesIO(b"\x00\x00\x00\x00")) - 0 - """ - - n = read_int4(f) - if n < 0: - raise ValueError("long4 byte count < 0: %d" % n) - data = f.read(n) - if len(data) != n: - raise ValueError("not enough data in stream to read long4") - return decode_long(data) - -long4 = ArgumentDescriptor( - name="long4", - n=TAKEN_FROM_ARGUMENT4, - reader=read_long4, - doc="""A binary representation of a long, little-endian. - - This first reads four bytes as a signed size (but requires the - size to be >= 0), then reads that many bytes and interprets them - as a little-endian 2's-complement long. If the size is 0, that's taken - as a shortcut for the int 0, although LONG1 should really be used - then instead (and in any case where # of bytes < 256). - """) - - -############################################################################## -# Object descriptors. The stack used by the pickle machine holds objects, -# and in the stack_before and stack_after attributes of OpcodeInfo -# descriptors we need names to describe the various types of objects that can -# appear on the stack. - -class StackObject(object): - __slots__ = ( - # name of descriptor record, for info only - 'name', - - # type of object, or tuple of type objects (meaning the object can - # be of any type in the tuple) - 'obtype', - - # human-readable docs for this kind of stack object; a string - 'doc', - ) - - def __init__(self, name, obtype, doc): - assert isinstance(name, str) - self.name = name - - assert isinstance(obtype, type) or isinstance(obtype, tuple) - if isinstance(obtype, tuple): - for contained in obtype: - assert isinstance(contained, type) - self.obtype = obtype - - assert isinstance(doc, str) - self.doc = doc - - def __repr__(self): - return self.name - - -pyint = pylong = StackObject( - name='int', - obtype=int, - doc="A Python integer object.") - -pyinteger_or_bool = StackObject( - name='int_or_bool', - obtype=(int, bool), - doc="A Python integer or boolean object.") - -pybool = StackObject( - name='bool', - obtype=bool, - doc="A Python boolean object.") - -pyfloat = StackObject( - name='float', - obtype=float, - doc="A Python float object.") - -pybytes_or_str = pystring = StackObject( - name='bytes_or_str', - obtype=(bytes, str), - doc="A Python bytes or (Unicode) string object.") - -pybytes = StackObject( - name='bytes', - obtype=bytes, - doc="A Python bytes object.") - -pybytearray = StackObject( - name='bytearray', - obtype=bytearray, - doc="A Python bytearray object.") - -pyunicode = StackObject( - name='str', - obtype=str, - doc="A Python (Unicode) string object.") - -pynone = StackObject( - name="None", - obtype=type(None), - doc="The Python None object.") - -pytuple = StackObject( - name="tuple", - obtype=tuple, - doc="A Python tuple object.") - -pylist = StackObject( - name="list", - obtype=list, - doc="A Python list object.") - -pydict = StackObject( - name="dict", - obtype=dict, - doc="A Python dict object.") - -pyset = StackObject( - name="set", - obtype=set, - doc="A Python set object.") - -pyfrozenset = StackObject( - name="frozenset", - obtype=set, - doc="A Python frozenset object.") - -pybuffer = StackObject( - name='buffer', - obtype=object, - doc="A Python buffer-like object.") - -anyobject = StackObject( - name='any', - obtype=object, - doc="Any kind of object whatsoever.") - -markobject = StackObject( - name="mark", - obtype=StackObject, - doc="""'The mark' is a unique object. - -Opcodes that operate on a variable number of objects -generally don't embed the count of objects in the opcode, -or pull it off the stack. Instead the MARK opcode is used -to push a special marker object on the stack, and then -some other opcodes grab all the objects from the top of -the stack down to (but not including) the topmost marker -object. -""") - -stackslice = StackObject( - name="stackslice", - obtype=StackObject, - doc="""An object representing a contiguous slice of the stack. - -This is used in conjunction with markobject, to represent all -of the stack following the topmost markobject. For example, -the POP_MARK opcode changes the stack from - - [..., markobject, stackslice] -to - [...] - -No matter how many object are on the stack after the topmost -markobject, POP_MARK gets rid of all of them (including the -topmost markobject too). -""") - -############################################################################## -# Descriptors for pickle opcodes. - -class OpcodeInfo(object): - - __slots__ = ( - # symbolic name of opcode; a string - 'name', - - # the code used in a bytestream to represent the opcode; a - # one-character string - 'code', - - # If the opcode has an argument embedded in the byte string, an - # instance of ArgumentDescriptor specifying its type. Note that - # arg.reader(s) can be used to read and decode the argument from - # the bytestream s, and arg.doc documents the format of the raw - # argument bytes. If the opcode doesn't have an argument embedded - # in the bytestream, arg should be None. - 'arg', - - # what the stack looks like before this opcode runs; a list - 'stack_before', - - # what the stack looks like after this opcode runs; a list - 'stack_after', - - # the protocol number in which this opcode was introduced; an int - 'proto', - - # human-readable docs for this opcode; a string - 'doc', - ) - - def __init__(self, name, code, arg, - stack_before, stack_after, proto, doc): - assert isinstance(name, str) - self.name = name - - assert isinstance(code, str) - assert len(code) == 1 - self.code = code - - assert arg is None or isinstance(arg, ArgumentDescriptor) - self.arg = arg - - assert isinstance(stack_before, list) - for x in stack_before: - assert isinstance(x, StackObject) - self.stack_before = stack_before - - assert isinstance(stack_after, list) - for x in stack_after: - assert isinstance(x, StackObject) - self.stack_after = stack_after - - assert isinstance(proto, int) and 0 <= proto <= pickle.HIGHEST_PROTOCOL - self.proto = proto - - assert isinstance(doc, str) - self.doc = doc - -I = OpcodeInfo -opcodes = [ - - # Ways to spell integers. - - I(name='INT', - code='I', - arg=decimalnl_short, - stack_before=[], - stack_after=[pyinteger_or_bool], - proto=0, - doc="""Push an integer or bool. - - The argument is a newline-terminated decimal literal string. - - The intent may have been that this always fit in a short Python int, - but INT can be generated in pickles written on a 64-bit box that - require a Python long on a 32-bit box. The difference between this - and LONG then is that INT skips a trailing 'L', and produces a short - int whenever possible. - - Another difference is due to that, when bool was introduced as a - distinct type in 2.3, builtin names True and False were also added to - 2.2.2, mapping to ints 1 and 0. For compatibility in both directions, - True gets pickled as INT + "I01\\n", and False as INT + "I00\\n". - Leading zeroes are never produced for a genuine integer. The 2.3 - (and later) unpicklers special-case these and return bool instead; - earlier unpicklers ignore the leading "0" and return the int. - """), - - I(name='BININT', - code='J', - arg=int4, - stack_before=[], - stack_after=[pyint], - proto=1, - doc="""Push a four-byte signed integer. - - This handles the full range of Python (short) integers on a 32-bit - box, directly as binary bytes (1 for the opcode and 4 for the integer). - If the integer is non-negative and fits in 1 or 2 bytes, pickling via - BININT1 or BININT2 saves space. - """), - - I(name='BININT1', - code='K', - arg=uint1, - stack_before=[], - stack_after=[pyint], - proto=1, - doc="""Push a one-byte unsigned integer. - - This is a space optimization for pickling very small non-negative ints, - in range(256). - """), - - I(name='BININT2', - code='M', - arg=uint2, - stack_before=[], - stack_after=[pyint], - proto=1, - doc="""Push a two-byte unsigned integer. - - This is a space optimization for pickling small positive ints, in - range(256, 2**16). Integers in range(256) can also be pickled via - BININT2, but BININT1 instead saves a byte. - """), - - I(name='LONG', - code='L', - arg=decimalnl_long, - stack_before=[], - stack_after=[pyint], - proto=0, - doc="""Push a long integer. - - The same as INT, except that the literal ends with 'L', and always - unpickles to a Python long. There doesn't seem a real purpose to the - trailing 'L'. - - Note that LONG takes time quadratic in the number of digits when - unpickling (this is simply due to the nature of decimal->binary - conversion). Proto 2 added linear-time (in C; still quadratic-time - in Python) LONG1 and LONG4 opcodes. - """), - - I(name="LONG1", - code='\x8a', - arg=long1, - stack_before=[], - stack_after=[pyint], - proto=2, - doc="""Long integer using one-byte length. - - A more efficient encoding of a Python long; the long1 encoding - says it all."""), - - I(name="LONG4", - code='\x8b', - arg=long4, - stack_before=[], - stack_after=[pyint], - proto=2, - doc="""Long integer using four-byte length. - - A more efficient encoding of a Python long; the long4 encoding - says it all."""), - - # Ways to spell strings (8-bit, not Unicode). - - I(name='STRING', - code='S', - arg=stringnl, - stack_before=[], - stack_after=[pybytes_or_str], - proto=0, - doc="""Push a Python string object. - - The argument is a repr-style string, with bracketing quote characters, - and perhaps embedded escapes. The argument extends until the next - newline character. These are usually decoded into a str instance - using the encoding given to the Unpickler constructor. or the default, - 'ASCII'. If the encoding given was 'bytes' however, they will be - decoded as bytes object instead. - """), - - I(name='BINSTRING', - code='T', - arg=string4, - stack_before=[], - stack_after=[pybytes_or_str], - proto=1, - doc="""Push a Python string object. - - There are two arguments: the first is a 4-byte little-endian - signed int giving the number of bytes in the string, and the - second is that many bytes, which are taken literally as the string - content. These are usually decoded into a str instance using the - encoding given to the Unpickler constructor. or the default, - 'ASCII'. If the encoding given was 'bytes' however, they will be - decoded as bytes object instead. - """), - - I(name='SHORT_BINSTRING', - code='U', - arg=string1, - stack_before=[], - stack_after=[pybytes_or_str], - proto=1, - doc="""Push a Python string object. - - There are two arguments: the first is a 1-byte unsigned int giving - the number of bytes in the string, and the second is that many - bytes, which are taken literally as the string content. These are - usually decoded into a str instance using the encoding given to - the Unpickler constructor. or the default, 'ASCII'. If the - encoding given was 'bytes' however, they will be decoded as bytes - object instead. - """), - - # Bytes (protocol 3 and higher) - - I(name='BINBYTES', - code='B', - arg=bytes4, - stack_before=[], - stack_after=[pybytes], - proto=3, - doc="""Push a Python bytes object. - - There are two arguments: the first is a 4-byte little-endian unsigned int - giving the number of bytes, and the second is that many bytes, which are - taken literally as the bytes content. - """), - - I(name='SHORT_BINBYTES', - code='C', - arg=bytes1, - stack_before=[], - stack_after=[pybytes], - proto=3, - doc="""Push a Python bytes object. - - There are two arguments: the first is a 1-byte unsigned int giving - the number of bytes, and the second is that many bytes, which are taken - literally as the string content. - """), - - I(name='BINBYTES8', - code='\x8e', - arg=bytes8, - stack_before=[], - stack_after=[pybytes], - proto=4, - doc="""Push a Python bytes object. - - There are two arguments: the first is an 8-byte unsigned int giving - the number of bytes in the string, and the second is that many bytes, - which are taken literally as the string content. - """), - - # Bytearray (protocol 5 and higher) - - I(name='BYTEARRAY8', - code='\x96', - arg=bytearray8, - stack_before=[], - stack_after=[pybytearray], - proto=5, - doc="""Push a Python bytearray object. - - There are two arguments: the first is an 8-byte unsigned int giving - the number of bytes in the bytearray, and the second is that many bytes, - which are taken literally as the bytearray content. - """), - - # Out-of-band buffer (protocol 5 and higher) - - I(name='NEXT_BUFFER', - code='\x97', - arg=None, - stack_before=[], - stack_after=[pybuffer], - proto=5, - doc="Push an out-of-band buffer object."), - - I(name='READONLY_BUFFER', - code='\x98', - arg=None, - stack_before=[pybuffer], - stack_after=[pybuffer], - proto=5, - doc="Make an out-of-band buffer object read-only."), - - # Ways to spell None. - - I(name='NONE', - code='N', - arg=None, - stack_before=[], - stack_after=[pynone], - proto=0, - doc="Push None on the stack."), - - # Ways to spell bools, starting with proto 2. See INT for how this was - # done before proto 2. - - I(name='NEWTRUE', - code='\x88', - arg=None, - stack_before=[], - stack_after=[pybool], - proto=2, - doc="Push True onto the stack."), - - I(name='NEWFALSE', - code='\x89', - arg=None, - stack_before=[], - stack_after=[pybool], - proto=2, - doc="Push False onto the stack."), - - # Ways to spell Unicode strings. - - I(name='UNICODE', - code='V', - arg=unicodestringnl, - stack_before=[], - stack_after=[pyunicode], - proto=0, # this may be pure-text, but it's a later addition - doc="""Push a Python Unicode string object. - - The argument is a raw-unicode-escape encoding of a Unicode string, - and so may contain embedded escape sequences. The argument extends - until the next newline character. - """), - - I(name='SHORT_BINUNICODE', - code='\x8c', - arg=unicodestring1, - stack_before=[], - stack_after=[pyunicode], - proto=4, - doc="""Push a Python Unicode string object. - - There are two arguments: the first is a 1-byte little-endian signed int - giving the number of bytes in the string. The second is that many - bytes, and is the UTF-8 encoding of the Unicode string. - """), - - I(name='BINUNICODE', - code='X', - arg=unicodestring4, - stack_before=[], - stack_after=[pyunicode], - proto=1, - doc="""Push a Python Unicode string object. - - There are two arguments: the first is a 4-byte little-endian unsigned int - giving the number of bytes in the string. The second is that many - bytes, and is the UTF-8 encoding of the Unicode string. - """), - - I(name='BINUNICODE8', - code='\x8d', - arg=unicodestring8, - stack_before=[], - stack_after=[pyunicode], - proto=4, - doc="""Push a Python Unicode string object. - - There are two arguments: the first is an 8-byte little-endian signed int - giving the number of bytes in the string. The second is that many - bytes, and is the UTF-8 encoding of the Unicode string. - """), - - # Ways to spell floats. - - I(name='FLOAT', - code='F', - arg=floatnl, - stack_before=[], - stack_after=[pyfloat], - proto=0, - doc="""Newline-terminated decimal float literal. - - The argument is repr(a_float), and in general requires 17 significant - digits for roundtrip conversion to be an identity (this is so for - IEEE-754 double precision values, which is what Python float maps to - on most boxes). - - In general, FLOAT cannot be used to transport infinities, NaNs, or - minus zero across boxes (or even on a single box, if the platform C - library can't read the strings it produces for such things -- Windows - is like that), but may do less damage than BINFLOAT on boxes with - greater precision or dynamic range than IEEE-754 double. - """), - - I(name='BINFLOAT', - code='G', - arg=float8, - stack_before=[], - stack_after=[pyfloat], - proto=1, - doc="""Float stored in binary form, with 8 bytes of data. - - This generally requires less than half the space of FLOAT encoding. - In general, BINFLOAT cannot be used to transport infinities, NaNs, or - minus zero, raises an exception if the exponent exceeds the range of - an IEEE-754 double, and retains no more than 53 bits of precision (if - there are more than that, "add a half and chop" rounding is used to - cut it back to 53 significant bits). - """), - - # Ways to build lists. - - I(name='EMPTY_LIST', - code=']', - arg=None, - stack_before=[], - stack_after=[pylist], - proto=1, - doc="Push an empty list."), - - I(name='APPEND', - code='a', - arg=None, - stack_before=[pylist, anyobject], - stack_after=[pylist], - proto=0, - doc="""Append an object to a list. - - Stack before: ... pylist anyobject - Stack after: ... pylist+[anyobject] - - although pylist is really extended in-place. - """), - - I(name='APPENDS', - code='e', - arg=None, - stack_before=[pylist, markobject, stackslice], - stack_after=[pylist], - proto=1, - doc="""Extend a list by a slice of stack objects. - - Stack before: ... pylist markobject stackslice - Stack after: ... pylist+stackslice - - although pylist is really extended in-place. - """), - - I(name='LIST', - code='l', - arg=None, - stack_before=[markobject, stackslice], - stack_after=[pylist], - proto=0, - doc="""Build a list out of the topmost stack slice, after markobject. - - All the stack entries following the topmost markobject are placed into - a single Python list, which single list object replaces all of the - stack from the topmost markobject onward. For example, - - Stack before: ... markobject 1 2 3 'abc' - Stack after: ... [1, 2, 3, 'abc'] - """), - - # Ways to build tuples. - - I(name='EMPTY_TUPLE', - code=')', - arg=None, - stack_before=[], - stack_after=[pytuple], - proto=1, - doc="Push an empty tuple."), - - I(name='TUPLE', - code='t', - arg=None, - stack_before=[markobject, stackslice], - stack_after=[pytuple], - proto=0, - doc="""Build a tuple out of the topmost stack slice, after markobject. - - All the stack entries following the topmost markobject are placed into - a single Python tuple, which single tuple object replaces all of the - stack from the topmost markobject onward. For example, - - Stack before: ... markobject 1 2 3 'abc' - Stack after: ... (1, 2, 3, 'abc') - """), - - I(name='TUPLE1', - code='\x85', - arg=None, - stack_before=[anyobject], - stack_after=[pytuple], - proto=2, - doc="""Build a one-tuple out of the topmost item on the stack. - - This code pops one value off the stack and pushes a tuple of - length 1 whose one item is that value back onto it. In other - words: - - stack[-1] = tuple(stack[-1:]) - """), - - I(name='TUPLE2', - code='\x86', - arg=None, - stack_before=[anyobject, anyobject], - stack_after=[pytuple], - proto=2, - doc="""Build a two-tuple out of the top two items on the stack. - - This code pops two values off the stack and pushes a tuple of - length 2 whose items are those values back onto it. In other - words: - - stack[-2:] = [tuple(stack[-2:])] - """), - - I(name='TUPLE3', - code='\x87', - arg=None, - stack_before=[anyobject, anyobject, anyobject], - stack_after=[pytuple], - proto=2, - doc="""Build a three-tuple out of the top three items on the stack. - - This code pops three values off the stack and pushes a tuple of - length 3 whose items are those values back onto it. In other - words: - - stack[-3:] = [tuple(stack[-3:])] - """), - - # Ways to build dicts. - - I(name='EMPTY_DICT', - code='}', - arg=None, - stack_before=[], - stack_after=[pydict], - proto=1, - doc="Push an empty dict."), - - I(name='DICT', - code='d', - arg=None, - stack_before=[markobject, stackslice], - stack_after=[pydict], - proto=0, - doc="""Build a dict out of the topmost stack slice, after markobject. - - All the stack entries following the topmost markobject are placed into - a single Python dict, which single dict object replaces all of the - stack from the topmost markobject onward. The stack slice alternates - key, value, key, value, .... For example, - - Stack before: ... markobject 1 2 3 'abc' - Stack after: ... {1: 2, 3: 'abc'} - """), - - I(name='SETITEM', - code='s', - arg=None, - stack_before=[pydict, anyobject, anyobject], - stack_after=[pydict], - proto=0, - doc="""Add a key+value pair to an existing dict. - - Stack before: ... pydict key value - Stack after: ... pydict - - where pydict has been modified via pydict[key] = value. - """), - - I(name='SETITEMS', - code='u', - arg=None, - stack_before=[pydict, markobject, stackslice], - stack_after=[pydict], - proto=1, - doc="""Add an arbitrary number of key+value pairs to an existing dict. - - The slice of the stack following the topmost markobject is taken as - an alternating sequence of keys and values, added to the dict - immediately under the topmost markobject. Everything at and after the - topmost markobject is popped, leaving the mutated dict at the top - of the stack. - - Stack before: ... pydict markobject key_1 value_1 ... key_n value_n - Stack after: ... pydict - - where pydict has been modified via pydict[key_i] = value_i for i in - 1, 2, ..., n, and in that order. - """), - - # Ways to build sets - - I(name='EMPTY_SET', - code='\x8f', - arg=None, - stack_before=[], - stack_after=[pyset], - proto=4, - doc="Push an empty set."), - - I(name='ADDITEMS', - code='\x90', - arg=None, - stack_before=[pyset, markobject, stackslice], - stack_after=[pyset], - proto=4, - doc="""Add an arbitrary number of items to an existing set. - - The slice of the stack following the topmost markobject is taken as - a sequence of items, added to the set immediately under the topmost - markobject. Everything at and after the topmost markobject is popped, - leaving the mutated set at the top of the stack. - - Stack before: ... pyset markobject item_1 ... item_n - Stack after: ... pyset - - where pyset has been modified via pyset.add(item_i) = item_i for i in - 1, 2, ..., n, and in that order. - """), - - # Way to build frozensets - - I(name='FROZENSET', - code='\x91', - arg=None, - stack_before=[markobject, stackslice], - stack_after=[pyfrozenset], - proto=4, - doc="""Build a frozenset out of the topmost slice, after markobject. - - All the stack entries following the topmost markobject are placed into - a single Python frozenset, which single frozenset object replaces all - of the stack from the topmost markobject onward. For example, - - Stack before: ... markobject 1 2 3 - Stack after: ... frozenset({1, 2, 3}) - """), - - # Stack manipulation. - - I(name='POP', - code='0', - arg=None, - stack_before=[anyobject], - stack_after=[], - proto=0, - doc="Discard the top stack item, shrinking the stack by one item."), - - I(name='DUP', - code='2', - arg=None, - stack_before=[anyobject], - stack_after=[anyobject, anyobject], - proto=0, - doc="Push the top stack item onto the stack again, duplicating it."), - - I(name='MARK', - code='(', - arg=None, - stack_before=[], - stack_after=[markobject], - proto=0, - doc="""Push markobject onto the stack. - - markobject is a unique object, used by other opcodes to identify a - region of the stack containing a variable number of objects for them - to work on. See markobject.doc for more detail. - """), - - I(name='POP_MARK', - code='1', - arg=None, - stack_before=[markobject, stackslice], - stack_after=[], - proto=1, - doc="""Pop all the stack objects at and above the topmost markobject. - - When an opcode using a variable number of stack objects is done, - POP_MARK is used to remove those objects, and to remove the markobject - that delimited their starting position on the stack. - """), - - # Memo manipulation. There are really only two operations (get and put), - # each in all-text, "short binary", and "long binary" flavors. - - I(name='GET', - code='g', - arg=decimalnl_short, - stack_before=[], - stack_after=[anyobject], - proto=0, - doc="""Read an object from the memo and push it on the stack. - - The index of the memo object to push is given by the newline-terminated - decimal string following. BINGET and LONG_BINGET are space-optimized - versions. - """), - - I(name='BINGET', - code='h', - arg=uint1, - stack_before=[], - stack_after=[anyobject], - proto=1, - doc="""Read an object from the memo and push it on the stack. - - The index of the memo object to push is given by the 1-byte unsigned - integer following. - """), - - I(name='LONG_BINGET', - code='j', - arg=uint4, - stack_before=[], - stack_after=[anyobject], - proto=1, - doc="""Read an object from the memo and push it on the stack. - - The index of the memo object to push is given by the 4-byte unsigned - little-endian integer following. - """), - - I(name='PUT', - code='p', - arg=decimalnl_short, - stack_before=[], - stack_after=[], - proto=0, - doc="""Store the stack top into the memo. The stack is not popped. - - The index of the memo location to write into is given by the newline- - terminated decimal string following. BINPUT and LONG_BINPUT are - space-optimized versions. - """), - - I(name='BINPUT', - code='q', - arg=uint1, - stack_before=[], - stack_after=[], - proto=1, - doc="""Store the stack top into the memo. The stack is not popped. - - The index of the memo location to write into is given by the 1-byte - unsigned integer following. - """), - - I(name='LONG_BINPUT', - code='r', - arg=uint4, - stack_before=[], - stack_after=[], - proto=1, - doc="""Store the stack top into the memo. The stack is not popped. - - The index of the memo location to write into is given by the 4-byte - unsigned little-endian integer following. - """), - - I(name='MEMOIZE', - code='\x94', - arg=None, - stack_before=[anyobject], - stack_after=[anyobject], - proto=4, - doc="""Store the stack top into the memo. The stack is not popped. - - The index of the memo location to write is the number of - elements currently present in the memo. - """), - - # Access the extension registry (predefined objects). Akin to the GET - # family. - - I(name='EXT1', - code='\x82', - arg=uint1, - stack_before=[], - stack_after=[anyobject], - proto=2, - doc="""Extension code. - - This code and the similar EXT2 and EXT4 allow using a registry - of popular objects that are pickled by name, typically classes. - It is envisioned that through a global negotiation and - registration process, third parties can set up a mapping between - ints and object names. - - In order to guarantee pickle interchangeability, the extension - code registry ought to be global, although a range of codes may - be reserved for private use. - - EXT1 has a 1-byte integer argument. This is used to index into the - extension registry, and the object at that index is pushed on the stack. - """), - - I(name='EXT2', - code='\x83', - arg=uint2, - stack_before=[], - stack_after=[anyobject], - proto=2, - doc="""Extension code. - - See EXT1. EXT2 has a two-byte integer argument. - """), - - I(name='EXT4', - code='\x84', - arg=int4, - stack_before=[], - stack_after=[anyobject], - proto=2, - doc="""Extension code. - - See EXT1. EXT4 has a four-byte integer argument. - """), - - # Push a class object, or module function, on the stack, via its module - # and name. - - I(name='GLOBAL', - code='c', - arg=stringnl_noescape_pair, - stack_before=[], - stack_after=[anyobject], - proto=0, - doc="""Push a global object (module.attr) on the stack. - - Two newline-terminated strings follow the GLOBAL opcode. The first is - taken as a module name, and the second as a class name. The class - object module.class is pushed on the stack. More accurately, the - object returned by self.find_class(module, class) is pushed on the - stack, so unpickling subclasses can override this form of lookup. - """), - - I(name='STACK_GLOBAL', - code='\x93', - arg=None, - stack_before=[pyunicode, pyunicode], - stack_after=[anyobject], - proto=4, - doc="""Push a global object (module.attr) on the stack. - """), - - # Ways to build objects of classes pickle doesn't know about directly - # (user-defined classes). I despair of documenting this accurately - # and comprehensibly -- you really have to read the pickle code to - # find all the special cases. - - I(name='REDUCE', - code='R', - arg=None, - stack_before=[anyobject, anyobject], - stack_after=[anyobject], - proto=0, - doc="""Push an object built from a callable and an argument tuple. - - The opcode is named to remind of the __reduce__() method. - - Stack before: ... callable pytuple - Stack after: ... callable(*pytuple) - - The callable and the argument tuple are the first two items returned - by a __reduce__ method. Applying the callable to the argtuple is - supposed to reproduce the original object, or at least get it started. - If the __reduce__ method returns a 3-tuple, the last component is an - argument to be passed to the object's __setstate__, and then the REDUCE - opcode is followed by code to create setstate's argument, and then a - BUILD opcode to apply __setstate__ to that argument. - - If not isinstance(callable, type), REDUCE complains unless the - callable has been registered with the copyreg module's - safe_constructors dict, or the callable has a magic - '__safe_for_unpickling__' attribute with a true value. I'm not sure - why it does this, but I've sure seen this complaint often enough when - I didn't want to <wink>. - """), - - I(name='BUILD', - code='b', - arg=None, - stack_before=[anyobject, anyobject], - stack_after=[anyobject], - proto=0, - doc="""Finish building an object, via __setstate__ or dict update. - - Stack before: ... anyobject argument - Stack after: ... anyobject - - where anyobject may have been mutated, as follows: - - If the object has a __setstate__ method, - - anyobject.__setstate__(argument) - - is called. - - Else the argument must be a dict, the object must have a __dict__, and - the object is updated via - - anyobject.__dict__.update(argument) - """), - - I(name='INST', - code='i', - arg=stringnl_noescape_pair, - stack_before=[markobject, stackslice], - stack_after=[anyobject], - proto=0, - doc="""Build a class instance. - - This is the protocol 0 version of protocol 1's OBJ opcode. - INST is followed by two newline-terminated strings, giving a - module and class name, just as for the GLOBAL opcode (and see - GLOBAL for more details about that). self.find_class(module, name) - is used to get a class object. - - In addition, all the objects on the stack following the topmost - markobject are gathered into a tuple and popped (along with the - topmost markobject), just as for the TUPLE opcode. - - Now it gets complicated. If all of these are true: - - + The argtuple is empty (markobject was at the top of the stack - at the start). - - + The class object does not have a __getinitargs__ attribute. - - then we want to create an old-style class instance without invoking - its __init__() method (pickle has waffled on this over the years; not - calling __init__() is current wisdom). In this case, an instance of - an old-style dummy class is created, and then we try to rebind its - __class__ attribute to the desired class object. If this succeeds, - the new instance object is pushed on the stack, and we're done. - - Else (the argtuple is not empty, it's not an old-style class object, - or the class object does have a __getinitargs__ attribute), the code - first insists that the class object have a __safe_for_unpickling__ - attribute. Unlike as for the __safe_for_unpickling__ check in REDUCE, - it doesn't matter whether this attribute has a true or false value, it - only matters whether it exists (XXX this is a bug). If - __safe_for_unpickling__ doesn't exist, UnpicklingError is raised. - - Else (the class object does have a __safe_for_unpickling__ attr), - the class object obtained from INST's arguments is applied to the - argtuple obtained from the stack, and the resulting instance object - is pushed on the stack. - - NOTE: checks for __safe_for_unpickling__ went away in Python 2.3. - NOTE: the distinction between old-style and new-style classes does - not make sense in Python 3. - """), - - I(name='OBJ', - code='o', - arg=None, - stack_before=[markobject, anyobject, stackslice], - stack_after=[anyobject], - proto=1, - doc="""Build a class instance. - - This is the protocol 1 version of protocol 0's INST opcode, and is - very much like it. The major difference is that the class object - is taken off the stack, allowing it to be retrieved from the memo - repeatedly if several instances of the same class are created. This - can be much more efficient (in both time and space) than repeatedly - embedding the module and class names in INST opcodes. - - Unlike INST, OBJ takes no arguments from the opcode stream. Instead - the class object is taken off the stack, immediately above the - topmost markobject: - - Stack before: ... markobject classobject stackslice - Stack after: ... new_instance_object - - As for INST, the remainder of the stack above the markobject is - gathered into an argument tuple, and then the logic seems identical, - except that no __safe_for_unpickling__ check is done (XXX this is - a bug). See INST for the gory details. - - NOTE: In Python 2.3, INST and OBJ are identical except for how they - get the class object. That was always the intent; the implementations - had diverged for accidental reasons. - """), - - I(name='NEWOBJ', - code='\x81', - arg=None, - stack_before=[anyobject, anyobject], - stack_after=[anyobject], - proto=2, - doc="""Build an object instance. - - The stack before should be thought of as containing a class - object followed by an argument tuple (the tuple being the stack - top). Call these cls and args. They are popped off the stack, - and the value returned by cls.__new__(cls, *args) is pushed back - onto the stack. - """), - - I(name='NEWOBJ_EX', - code='\x92', - arg=None, - stack_before=[anyobject, anyobject, anyobject], - stack_after=[anyobject], - proto=4, - doc="""Build an object instance. - - The stack before should be thought of as containing a class - object followed by an argument tuple and by a keyword argument dict - (the dict being the stack top). Call these cls and args. They are - popped off the stack, and the value returned by - cls.__new__(cls, *args, *kwargs) is pushed back onto the stack. - """), - - # Machine control. - - I(name='PROTO', - code='\x80', - arg=uint1, - stack_before=[], - stack_after=[], - proto=2, - doc="""Protocol version indicator. - - For protocol 2 and above, a pickle must start with this opcode. - The argument is the protocol version, an int in range(2, 256). - """), - - I(name='STOP', - code='.', - arg=None, - stack_before=[anyobject], - stack_after=[], - proto=0, - doc="""Stop the unpickling machine. - - Every pickle ends with this opcode. The object at the top of the stack - is popped, and that's the result of unpickling. The stack should be - empty then. - """), - - # Framing support. - - I(name='FRAME', - code='\x95', - arg=uint8, - stack_before=[], - stack_after=[], - proto=4, - doc="""Indicate the beginning of a new frame. - - The unpickler may use this opcode to safely prefetch data from its - underlying stream. - """), - - # Ways to deal with persistent IDs. - - I(name='PERSID', - code='P', - arg=stringnl_noescape, - stack_before=[], - stack_after=[anyobject], - proto=0, - doc="""Push an object identified by a persistent ID. - - The pickle module doesn't define what a persistent ID means. PERSID's - argument is a newline-terminated str-style (no embedded escapes, no - bracketing quote characters) string, which *is* "the persistent ID". - The unpickler passes this string to self.persistent_load(). Whatever - object that returns is pushed on the stack. There is no implementation - of persistent_load() in Python's unpickler: it must be supplied by an - unpickler subclass. - """), - - I(name='BINPERSID', - code='Q', - arg=None, - stack_before=[anyobject], - stack_after=[anyobject], - proto=1, - doc="""Push an object identified by a persistent ID. - - Like PERSID, except the persistent ID is popped off the stack (instead - of being a string embedded in the opcode bytestream). The persistent - ID is passed to self.persistent_load(), and whatever object that - returns is pushed on the stack. See PERSID for more detail. - """), -] -del I - -# Verify uniqueness of .name and .code members. -name2i = {} -code2i = {} - -for i, d in enumerate(opcodes): - if d.name in name2i: - raise ValueError("repeated name %r at indices %d and %d" % - (d.name, name2i[d.name], i)) - if d.code in code2i: - raise ValueError("repeated code %r at indices %d and %d" % - (d.code, code2i[d.code], i)) - - name2i[d.name] = i - code2i[d.code] = i - -del name2i, code2i, i, d - -############################################################################## -# Build a code2op dict, mapping opcode characters to OpcodeInfo records. -# Also ensure we've got the same stuff as pickle.py, although the -# introspection here is dicey. - -code2op = {} -for d in opcodes: - code2op[d.code] = d -del d - -def assure_pickle_consistency(verbose=False): - - copy = code2op.copy() - for name in pickle.__all__: - if not re.match("[A-Z][A-Z0-9_]+$", name): - if verbose: - print("skipping %r: it doesn't look like an opcode name" % name) - continue - picklecode = getattr(pickle, name) - if not isinstance(picklecode, bytes) or len(picklecode) != 1: - if verbose: - print(("skipping %r: value %r doesn't look like a pickle " - "code" % (name, picklecode))) - continue - picklecode = picklecode.decode("latin-1") - if picklecode in copy: - if verbose: - print("checking name %r w/ code %r for consistency" % ( - name, picklecode)) - d = copy[picklecode] - if d.name != name: - raise ValueError("for pickle code %r, pickle.py uses name %r " - "but we're using name %r" % (picklecode, - name, - d.name)) - # Forget this one. Any left over in copy at the end are a problem - # of a different kind. - del copy[picklecode] - else: - raise ValueError("pickle.py appears to have a pickle opcode with " - "name %r and code %r, but we don't" % - (name, picklecode)) - if copy: - msg = ["we appear to have pickle opcodes that pickle.py doesn't have:"] - for code, d in copy.items(): - msg.append(" name %r with code %r" % (d.name, code)) - raise ValueError("\n".join(msg)) - -assure_pickle_consistency() -del assure_pickle_consistency - -############################################################################## -# A pickle opcode generator. - -def _genops(data, yield_end_pos=False): - if isinstance(data, bytes_types): - data = io.BytesIO(data) - - if hasattr(data, "tell"): - getpos = data.tell - else: - getpos = lambda: None - - while True: - pos = getpos() - code = data.read(1) - opcode = code2op.get(code.decode("latin-1")) - if opcode is None: - if code == b"": - raise ValueError("pickle exhausted before seeing STOP") - else: - raise ValueError("at position %s, opcode %r unknown" % ( - "<unknown>" if pos is None else pos, - code)) - if opcode.arg is None: - arg = None - else: - arg = opcode.arg.reader(data) - if yield_end_pos: - yield opcode, arg, pos, getpos() - else: - yield opcode, arg, pos - if code == b'.': - assert opcode.name == 'STOP' - break - -def genops(pickle): - """Generate all the opcodes in a pickle. - - 'pickle' is a file-like object, or string, containing the pickle. - - Each opcode in the pickle is generated, from the current pickle position, - stopping after a STOP opcode is delivered. A triple is generated for - each opcode: - - opcode, arg, pos - - opcode is an OpcodeInfo record, describing the current opcode. - - If the opcode has an argument embedded in the pickle, arg is its decoded - value, as a Python object. If the opcode doesn't have an argument, arg - is None. - - If the pickle has a tell() method, pos was the value of pickle.tell() - before reading the current opcode. If the pickle is a bytes object, - it's wrapped in a BytesIO object, and the latter's tell() result is - used. Else (the pickle doesn't have a tell(), and it's not obvious how - to query its current position) pos is None. - """ - return _genops(pickle) - -############################################################################## -# A pickle optimizer. - -def optimize(p): - 'Optimize a pickle string by removing unused PUT opcodes' - put = 'PUT' - get = 'GET' - oldids = set() # set of all PUT ids - newids = {} # set of ids used by a GET opcode - opcodes = [] # (op, idx) or (pos, end_pos) - proto = 0 - protoheader = b'' - for opcode, arg, pos, end_pos in _genops(p, yield_end_pos=True): - if 'PUT' in opcode.name: - oldids.add(arg) - opcodes.append((put, arg)) - elif opcode.name == 'MEMOIZE': - idx = len(oldids) - oldids.add(idx) - opcodes.append((put, idx)) - elif 'FRAME' in opcode.name: - pass - elif 'GET' in opcode.name: - if opcode.proto > proto: - proto = opcode.proto - newids[arg] = None - opcodes.append((get, arg)) - elif opcode.name == 'PROTO': - if arg > proto: - proto = arg - if pos == 0: - protoheader = p[pos:end_pos] - else: - opcodes.append((pos, end_pos)) - else: - opcodes.append((pos, end_pos)) - del oldids - - # Copy the opcodes except for PUTS without a corresponding GET - out = io.BytesIO() - # Write the PROTO header before any framing - out.write(protoheader) - pickler = pickle._Pickler(out, proto) - if proto >= 4: - pickler.framer.start_framing() - idx = 0 - for op, arg in opcodes: - frameless = False - if op is put: - if arg not in newids: - continue - data = pickler.put(idx) - newids[arg] = idx - idx += 1 - elif op is get: - data = pickler.get(newids[arg]) - else: - data = p[op:arg] - frameless = len(data) > pickler.framer._FRAME_SIZE_TARGET - pickler.framer.commit_frame(force=frameless) - if frameless: - pickler.framer.file_write(data) - else: - pickler.write(data) - pickler.framer.end_framing() - return out.getvalue() - -############################################################################## -# A symbolic pickle disassembler. - -def dis(pickle, out=None, memo=None, indentlevel=4, annotate=0): - """Produce a symbolic disassembly of a pickle. - - 'pickle' is a file-like object, or string, containing a (at least one) - pickle. The pickle is disassembled from the current position, through - the first STOP opcode encountered. - - Optional arg 'out' is a file-like object to which the disassembly is - printed. It defaults to sys.stdout. - - Optional arg 'memo' is a Python dict, used as the pickle's memo. It - may be mutated by dis(), if the pickle contains PUT or BINPUT opcodes. - Passing the same memo object to another dis() call then allows disassembly - to proceed across multiple pickles that were all created by the same - pickler with the same memo. Ordinarily you don't need to worry about this. - - Optional arg 'indentlevel' is the number of blanks by which to indent - a new MARK level. It defaults to 4. - - Optional arg 'annotate' if nonzero instructs dis() to add short - description of the opcode on each line of disassembled output. - The value given to 'annotate' must be an integer and is used as a - hint for the column where annotation should start. The default - value is 0, meaning no annotations. - - In addition to printing the disassembly, some sanity checks are made: - - + All embedded opcode arguments "make sense". - - + Explicit and implicit pop operations have enough items on the stack. - - + When an opcode implicitly refers to a markobject, a markobject is - actually on the stack. - - + A memo entry isn't referenced before it's defined. - - + The markobject isn't stored in the memo. - """ - - # Most of the hair here is for sanity checks, but most of it is needed - # anyway to detect when a protocol 0 POP takes a MARK off the stack - # (which in turn is needed to indent MARK blocks correctly). - - stack = [] # crude emulation of unpickler stack - if memo is None: - memo = {} # crude emulation of unpickler memo - maxproto = -1 # max protocol number seen - markstack = [] # bytecode positions of MARK opcodes - indentchunk = ' ' * indentlevel - errormsg = None - annocol = annotate # column hint for annotations - for opcode, arg, pos in genops(pickle): - if pos is not None: - print("%5d:" % pos, end=' ', file=out) - - line = "%-4s %s%s" % (repr(opcode.code)[1:-1], - indentchunk * len(markstack), - opcode.name) - - maxproto = max(maxproto, opcode.proto) - before = opcode.stack_before # don't mutate - after = opcode.stack_after # don't mutate - numtopop = len(before) - - # See whether a MARK should be popped. - markmsg = None - if markobject in before or (opcode.name == "POP" and - stack and - stack[-1] is markobject): - assert markobject not in after - if __debug__: - if markobject in before: - assert before[-1] is stackslice - if markstack: - markpos = markstack.pop() - if markpos is None: - markmsg = "(MARK at unknown opcode offset)" - else: - markmsg = "(MARK at %d)" % markpos - # Pop everything at and after the topmost markobject. - while stack[-1] is not markobject: - stack.pop() - stack.pop() - # Stop later code from popping too much. - try: - numtopop = before.index(markobject) - except ValueError: - assert opcode.name == "POP" - numtopop = 0 - else: - errormsg = "no MARK exists on stack" - - # Check for correct memo usage. - if opcode.name in ("PUT", "BINPUT", "LONG_BINPUT", "MEMOIZE"): - if opcode.name == "MEMOIZE": - memo_idx = len(memo) - markmsg = "(as %d)" % memo_idx - else: - assert arg is not None - memo_idx = arg - if not stack: - errormsg = "stack is empty -- can't store into memo" - elif stack[-1] is markobject: - errormsg = "can't store markobject in the memo" - else: - memo[memo_idx] = stack[-1] - elif opcode.name in ("GET", "BINGET", "LONG_BINGET"): - if arg in memo: - assert len(after) == 1 - after = [memo[arg]] # for better stack emulation - else: - errormsg = "memo key %r has never been stored into" % arg - - if arg is not None or markmsg: - # make a mild effort to align arguments - line += ' ' * (10 - len(opcode.name)) - if arg is not None: - if opcode.name in ("STRING", "BINSTRING", "SHORT_BINSTRING"): - line += ' ' + ascii(arg) - else: - line += ' ' + repr(arg) - if markmsg: - line += ' ' + markmsg - if annotate: - line += ' ' * (annocol - len(line)) - # make a mild effort to align annotations - annocol = len(line) - if annocol > 50: - annocol = annotate - line += ' ' + opcode.doc.split('\n', 1)[0] - print(line, file=out) - - if errormsg: - # Note that we delayed complaining until the offending opcode - # was printed. - raise ValueError(errormsg) - - # Emulate the stack effects. - if len(stack) < numtopop: - raise ValueError("tries to pop %d items from stack with " - "only %d items" % (numtopop, len(stack))) - if numtopop: - del stack[-numtopop:] - if markobject in after: - assert markobject not in before - markstack.append(pos) - - stack.extend(after) - - print("highest protocol among opcodes =", maxproto, file=out) - if stack: - raise ValueError("stack not empty after STOP: %r" % stack) - -# For use in the doctest, simply as an example of a class to pickle. -class _Example: - def __init__(self, value): - self.value = value - -_dis_test = r""" ->>> import pickle ->>> x = [1, 2, (3, 4), {b'abc': "def"}] ->>> pkl0 = pickle.dumps(x, 0) ->>> dis(pkl0) - 0: ( MARK - 1: l LIST (MARK at 0) - 2: p PUT 0 - 5: I INT 1 - 8: a APPEND - 9: I INT 2 - 12: a APPEND - 13: ( MARK - 14: I INT 3 - 17: I INT 4 - 20: t TUPLE (MARK at 13) - 21: p PUT 1 - 24: a APPEND - 25: ( MARK - 26: d DICT (MARK at 25) - 27: p PUT 2 - 30: c GLOBAL '_codecs encode' - 46: p PUT 3 - 49: ( MARK - 50: V UNICODE 'abc' - 55: p PUT 4 - 58: V UNICODE 'latin1' - 66: p PUT 5 - 69: t TUPLE (MARK at 49) - 70: p PUT 6 - 73: R REDUCE - 74: p PUT 7 - 77: V UNICODE 'def' - 82: p PUT 8 - 85: s SETITEM - 86: a APPEND - 87: . STOP -highest protocol among opcodes = 0 - -Try again with a "binary" pickle. - ->>> pkl1 = pickle.dumps(x, 1) ->>> dis(pkl1) - 0: ] EMPTY_LIST - 1: q BINPUT 0 - 3: ( MARK - 4: K BININT1 1 - 6: K BININT1 2 - 8: ( MARK - 9: K BININT1 3 - 11: K BININT1 4 - 13: t TUPLE (MARK at 8) - 14: q BINPUT 1 - 16: } EMPTY_DICT - 17: q BINPUT 2 - 19: c GLOBAL '_codecs encode' - 35: q BINPUT 3 - 37: ( MARK - 38: X BINUNICODE 'abc' - 46: q BINPUT 4 - 48: X BINUNICODE 'latin1' - 59: q BINPUT 5 - 61: t TUPLE (MARK at 37) - 62: q BINPUT 6 - 64: R REDUCE - 65: q BINPUT 7 - 67: X BINUNICODE 'def' - 75: q BINPUT 8 - 77: s SETITEM - 78: e APPENDS (MARK at 3) - 79: . STOP -highest protocol among opcodes = 1 - -Exercise the INST/OBJ/BUILD family. - ->>> import pickletools ->>> dis(pickle.dumps(pickletools.dis, 0)) - 0: c GLOBAL 'pickletools dis' - 17: p PUT 0 - 20: . STOP -highest protocol among opcodes = 0 - ->>> from pickletools import _Example ->>> x = [_Example(42)] * 2 ->>> dis(pickle.dumps(x, 0)) - 0: ( MARK - 1: l LIST (MARK at 0) - 2: p PUT 0 - 5: c GLOBAL 'copy_reg _reconstructor' - 30: p PUT 1 - 33: ( MARK - 34: c GLOBAL 'pickletools _Example' - 56: p PUT 2 - 59: c GLOBAL '__builtin__ object' - 79: p PUT 3 - 82: N NONE - 83: t TUPLE (MARK at 33) - 84: p PUT 4 - 87: R REDUCE - 88: p PUT 5 - 91: ( MARK - 92: d DICT (MARK at 91) - 93: p PUT 6 - 96: V UNICODE 'value' - 103: p PUT 7 - 106: I INT 42 - 110: s SETITEM - 111: b BUILD - 112: a APPEND - 113: g GET 5 - 116: a APPEND - 117: . STOP -highest protocol among opcodes = 0 - ->>> dis(pickle.dumps(x, 1)) - 0: ] EMPTY_LIST - 1: q BINPUT 0 - 3: ( MARK - 4: c GLOBAL 'copy_reg _reconstructor' - 29: q BINPUT 1 - 31: ( MARK - 32: c GLOBAL 'pickletools _Example' - 54: q BINPUT 2 - 56: c GLOBAL '__builtin__ object' - 76: q BINPUT 3 - 78: N NONE - 79: t TUPLE (MARK at 31) - 80: q BINPUT 4 - 82: R REDUCE - 83: q BINPUT 5 - 85: } EMPTY_DICT - 86: q BINPUT 6 - 88: X BINUNICODE 'value' - 98: q BINPUT 7 - 100: K BININT1 42 - 102: s SETITEM - 103: b BUILD - 104: h BINGET 5 - 106: e APPENDS (MARK at 3) - 107: . STOP -highest protocol among opcodes = 1 - -Try "the canonical" recursive-object test. - ->>> L = [] ->>> T = L, ->>> L.append(T) ->>> L[0] is T -True ->>> T[0] is L -True ->>> L[0][0] is L -True ->>> T[0][0] is T -True ->>> dis(pickle.dumps(L, 0)) - 0: ( MARK - 1: l LIST (MARK at 0) - 2: p PUT 0 - 5: ( MARK - 6: g GET 0 - 9: t TUPLE (MARK at 5) - 10: p PUT 1 - 13: a APPEND - 14: . STOP -highest protocol among opcodes = 0 - ->>> dis(pickle.dumps(L, 1)) - 0: ] EMPTY_LIST - 1: q BINPUT 0 - 3: ( MARK - 4: h BINGET 0 - 6: t TUPLE (MARK at 3) - 7: q BINPUT 1 - 9: a APPEND - 10: . STOP -highest protocol among opcodes = 1 - -Note that, in the protocol 0 pickle of the recursive tuple, the disassembler -has to emulate the stack in order to realize that the POP opcode at 16 gets -rid of the MARK at 0. - ->>> dis(pickle.dumps(T, 0)) - 0: ( MARK - 1: ( MARK - 2: l LIST (MARK at 1) - 3: p PUT 0 - 6: ( MARK - 7: g GET 0 - 10: t TUPLE (MARK at 6) - 11: p PUT 1 - 14: a APPEND - 15: 0 POP - 16: 0 POP (MARK at 0) - 17: g GET 1 - 20: . STOP -highest protocol among opcodes = 0 - ->>> dis(pickle.dumps(T, 1)) - 0: ( MARK - 1: ] EMPTY_LIST - 2: q BINPUT 0 - 4: ( MARK - 5: h BINGET 0 - 7: t TUPLE (MARK at 4) - 8: q BINPUT 1 - 10: a APPEND - 11: 1 POP_MARK (MARK at 0) - 12: h BINGET 1 - 14: . STOP -highest protocol among opcodes = 1 - -Try protocol 2. - ->>> dis(pickle.dumps(L, 2)) - 0: \x80 PROTO 2 - 2: ] EMPTY_LIST - 3: q BINPUT 0 - 5: h BINGET 0 - 7: \x85 TUPLE1 - 8: q BINPUT 1 - 10: a APPEND - 11: . STOP -highest protocol among opcodes = 2 - ->>> dis(pickle.dumps(T, 2)) - 0: \x80 PROTO 2 - 2: ] EMPTY_LIST - 3: q BINPUT 0 - 5: h BINGET 0 - 7: \x85 TUPLE1 - 8: q BINPUT 1 - 10: a APPEND - 11: 0 POP - 12: h BINGET 1 - 14: . STOP -highest protocol among opcodes = 2 - -Try protocol 3 with annotations: - ->>> dis(pickle.dumps(T, 3), annotate=1) - 0: \x80 PROTO 3 Protocol version indicator. - 2: ] EMPTY_LIST Push an empty list. - 3: q BINPUT 0 Store the stack top into the memo. The stack is not popped. - 5: h BINGET 0 Read an object from the memo and push it on the stack. - 7: \x85 TUPLE1 Build a one-tuple out of the topmost item on the stack. - 8: q BINPUT 1 Store the stack top into the memo. The stack is not popped. - 10: a APPEND Append an object to a list. - 11: 0 POP Discard the top stack item, shrinking the stack by one item. - 12: h BINGET 1 Read an object from the memo and push it on the stack. - 14: . STOP Stop the unpickling machine. -highest protocol among opcodes = 2 - -""" - -_memo_test = r""" ->>> import pickle ->>> import io ->>> f = io.BytesIO() ->>> p = pickle.Pickler(f, 2) ->>> x = [1, 2, 3] ->>> p.dump(x) ->>> p.dump(x) ->>> f.seek(0) -0 ->>> memo = {} ->>> dis(f, memo=memo) - 0: \x80 PROTO 2 - 2: ] EMPTY_LIST - 3: q BINPUT 0 - 5: ( MARK - 6: K BININT1 1 - 8: K BININT1 2 - 10: K BININT1 3 - 12: e APPENDS (MARK at 5) - 13: . STOP -highest protocol among opcodes = 2 ->>> dis(f, memo=memo) - 14: \x80 PROTO 2 - 16: h BINGET 0 - 18: . STOP -highest protocol among opcodes = 2 -""" - -__test__ = {'disassembler_test': _dis_test, - 'disassembler_memo_test': _memo_test, - } - - -if __name__ == "__main__": - import argparse - parser = argparse.ArgumentParser( - description='disassemble one or more pickle files', - color=True, - ) - parser.add_argument( - 'pickle_file', - nargs='+', help='the pickle file') - parser.add_argument( - '-o', '--output', - help='the file where the output should be written') - parser.add_argument( - '-m', '--memo', action='store_true', - help='preserve memo between disassemblies') - parser.add_argument( - '-l', '--indentlevel', default=4, type=int, - help='the number of blanks by which to indent a new MARK level') - parser.add_argument( - '-a', '--annotate', action='store_true', - help='annotate each line with a short opcode description') - parser.add_argument( - '-p', '--preamble', default="==> {name} <==", - help='if more than one pickle file is specified, print this before' - ' each disassembly') - args = parser.parse_args() - annotate = 30 if args.annotate else 0 - memo = {} if args.memo else None - if args.output is None: - output = sys.stdout - else: - output = open(args.output, 'w') - try: - for arg in args.pickle_file: - if len(args.pickle_file) > 1: - name = '<stdin>' if arg == '-' else arg - preamble = args.preamble.format(name=name) - output.write(preamble + '\n') - if arg == '-': - dis(sys.stdin.buffer, output, memo, args.indentlevel, annotate) - else: - with open(arg, 'rb') as f: - dis(f, output, memo, args.indentlevel, annotate) - finally: - if output is not sys.stdout: - output.close() diff --git a/Python314_4_x86_Template/Lib/pkgutil.py b/Python314_4_x86_Template/Lib/pkgutil.py deleted file mode 100644 index 8772a6679..000000000 --- a/Python314_4_x86_Template/Lib/pkgutil.py +++ /dev/null @@ -1,474 +0,0 @@ -"""Utilities to support packages.""" - -from collections import namedtuple -from functools import singledispatch as simplegeneric -import importlib -import importlib.util -import importlib.machinery -import os -import os.path -import sys - -__all__ = [ - 'get_importer', 'iter_importers', - 'walk_packages', 'iter_modules', 'get_data', - 'read_code', 'extend_path', - 'ModuleInfo', -] - - -ModuleInfo = namedtuple('ModuleInfo', 'module_finder name ispkg') -ModuleInfo.__doc__ = 'A namedtuple with minimal info about a module.' - - -def read_code(stream): - # This helper is needed in order for the PEP 302 emulation to - # correctly handle compiled files - import marshal - - magic = stream.read(4) - if magic != importlib.util.MAGIC_NUMBER: - return None - - stream.read(12) # Skip rest of the header - return marshal.load(stream) - - -def walk_packages(path=None, prefix='', onerror=None): - """Yields ModuleInfo for all modules recursively - on path, or, if path is None, all accessible modules. - - 'path' should be either None or a list of paths to look for - modules in. - - 'prefix' is a string to output on the front of every module name - on output. - - Note that this function must import all *packages* (NOT all - modules!) on the given path, in order to access the __path__ - attribute to find submodules. - - 'onerror' is a function which gets called with one argument (the - name of the package which was being imported) if any exception - occurs while trying to import a package. If no onerror function is - supplied, ImportErrors are caught and ignored, while all other - exceptions are propagated, terminating the search. - - Examples: - - # list all modules python can access - walk_packages() - - # list all submodules of ctypes - walk_packages(ctypes.__path__, ctypes.__name__+'.') - """ - - def seen(p, m={}): - if p in m: - return True - m[p] = True - - for info in iter_modules(path, prefix): - yield info - - if info.ispkg: - try: - __import__(info.name) - except ImportError: - if onerror is not None: - onerror(info.name) - except Exception: - if onerror is not None: - onerror(info.name) - else: - raise - else: - path = getattr(sys.modules[info.name], '__path__', None) or [] - - # don't traverse path items we've seen before - path = [p for p in path if not seen(p)] - - yield from walk_packages(path, info.name+'.', onerror) - - -def iter_modules(path=None, prefix=''): - """Yields ModuleInfo for all submodules on path, - or, if path is None, all top-level modules on sys.path. - - 'path' should be either None or a list of paths to look for - modules in. - - 'prefix' is a string to output on the front of every module name - on output. - """ - if path is None: - importers = iter_importers() - elif isinstance(path, str): - raise ValueError("path must be None or list of paths to look for " - "modules in") - else: - importers = map(get_importer, path) - - yielded = {} - for i in importers: - for name, ispkg in iter_importer_modules(i, prefix): - if name not in yielded: - yielded[name] = 1 - yield ModuleInfo(i, name, ispkg) - - -@simplegeneric -def iter_importer_modules(importer, prefix=''): - if not hasattr(importer, 'iter_modules'): - return [] - return importer.iter_modules(prefix) - - -# Implement a file walker for the normal importlib path hook -def _iter_file_finder_modules(importer, prefix=''): - if importer.path is None or not os.path.isdir(importer.path): - return - - yielded = {} - import inspect - try: - filenames = os.listdir(importer.path) - except OSError: - # ignore unreadable directories like import does - filenames = [] - filenames.sort() # handle packages before same-named modules - - for fn in filenames: - modname = inspect.getmodulename(fn) - if modname=='__init__' or modname in yielded: - continue - - path = os.path.join(importer.path, fn) - ispkg = False - - if not modname and os.path.isdir(path) and '.' not in fn: - modname = fn - try: - dircontents = os.listdir(path) - except OSError: - # ignore unreadable directories like import does - dircontents = [] - for fn in dircontents: - subname = inspect.getmodulename(fn) - if subname=='__init__': - ispkg = True - break - else: - continue # not a package - - if modname and '.' not in modname: - yielded[modname] = 1 - yield prefix + modname, ispkg - -iter_importer_modules.register( - importlib.machinery.FileFinder, _iter_file_finder_modules) - - -try: - import zipimport - from zipimport import zipimporter - - def iter_zipimport_modules(importer, prefix=''): - dirlist = sorted(zipimport._zip_directory_cache[importer.archive]) - _prefix = importer.prefix - plen = len(_prefix) - yielded = {} - import inspect - for fn in dirlist: - if not fn.startswith(_prefix): - continue - - fn = fn[plen:].split(os.sep) - - if len(fn)==2 and fn[1].startswith('__init__.py'): - if fn[0] not in yielded: - yielded[fn[0]] = 1 - yield prefix + fn[0], True - - if len(fn)!=1: - continue - - modname = inspect.getmodulename(fn[0]) - if modname=='__init__': - continue - - if modname and '.' not in modname and modname not in yielded: - yielded[modname] = 1 - yield prefix + modname, False - - iter_importer_modules.register(zipimporter, iter_zipimport_modules) - -except ImportError: - pass - - -def get_importer(path_item): - """Retrieve a finder for the given path item - - The returned finder is cached in sys.path_importer_cache - if it was newly created by a path hook. - - The cache (or part of it) can be cleared manually if a - rescan of sys.path_hooks is necessary. - """ - path_item = os.fsdecode(path_item) - try: - importer = sys.path_importer_cache[path_item] - except KeyError: - for path_hook in sys.path_hooks: - try: - importer = path_hook(path_item) - sys.path_importer_cache.setdefault(path_item, importer) - break - except ImportError: - pass - else: - importer = None - return importer - - -def iter_importers(fullname=""): - """Yield finders for the given module name - - If fullname contains a '.', the finders will be for the package - containing fullname, otherwise they will be all registered top level - finders (i.e. those on both sys.meta_path and sys.path_hooks). - - If the named module is in a package, that package is imported as a side - effect of invoking this function. - - If no module name is specified, all top level finders are produced. - """ - if fullname.startswith('.'): - msg = "Relative module name {!r} not supported".format(fullname) - raise ImportError(msg) - if '.' in fullname: - # Get the containing package's __path__ - pkg_name = fullname.rpartition(".")[0] - pkg = importlib.import_module(pkg_name) - path = getattr(pkg, '__path__', None) - if path is None: - return - else: - yield from sys.meta_path - path = sys.path - for item in path: - yield get_importer(item) - - -def extend_path(path, name): - """Extend a package's path. - - Intended use is to place the following code in a package's __init__.py: - - from pkgutil import extend_path - __path__ = extend_path(__path__, __name__) - - For each directory on sys.path that has a subdirectory that - matches the package name, add the subdirectory to the package's - __path__. This is useful if one wants to distribute different - parts of a single logical package as multiple directories. - - It also looks for *.pkg files beginning where * matches the name - argument. This feature is similar to *.pth files (see site.py), - except that it doesn't special-case lines starting with 'import'. - A *.pkg file is trusted at face value: apart from checking for - duplicates, all entries found in a *.pkg file are added to the - path, regardless of whether they are exist the filesystem. (This - is a feature.) - - If the input path is not a list (as is the case for frozen - packages) it is returned unchanged. The input path is not - modified; an extended copy is returned. Items are only appended - to the copy at the end. - - It is assumed that sys.path is a sequence. Items of sys.path that - are not (unicode or 8-bit) strings referring to existing - directories are ignored. Unicode items of sys.path that cause - errors when used as filenames may cause this function to raise an - exception (in line with os.path.isdir() behavior). - """ - - if not isinstance(path, list): - # This could happen e.g. when this is called from inside a - # frozen package. Return the path unchanged in that case. - return path - - sname_pkg = name + ".pkg" - - path = path[:] # Start with a copy of the existing path - - parent_package, _, final_name = name.rpartition('.') - if parent_package: - try: - search_path = sys.modules[parent_package].__path__ - except (KeyError, AttributeError): - # We can't do anything: find_loader() returns None when - # passed a dotted name. - return path - else: - search_path = sys.path - - for dir in search_path: - if not isinstance(dir, str): - continue - - finder = get_importer(dir) - if finder is not None: - portions = [] - if hasattr(finder, 'find_spec'): - spec = finder.find_spec(final_name) - if spec is not None: - portions = spec.submodule_search_locations or [] - # Is this finder PEP 420 compliant? - elif hasattr(finder, 'find_loader'): - _, portions = finder.find_loader(final_name) - - for portion in portions: - # XXX This may still add duplicate entries to path on - # case-insensitive filesystems - if portion not in path: - path.append(portion) - - # XXX Is this the right thing for subpackages like zope.app? - # It looks for a file named "zope.app.pkg" - pkgfile = os.path.join(dir, sname_pkg) - if os.path.isfile(pkgfile): - try: - f = open(pkgfile) - except OSError as msg: - sys.stderr.write("Can't open %s: %s\n" % - (pkgfile, msg)) - else: - with f: - for line in f: - line = line.rstrip('\n') - if not line or line.startswith('#'): - continue - path.append(line) # Don't check for existence! - - return path - - -def get_data(package, resource): - """Get a resource from a package. - - This is a wrapper round the PEP 302 loader get_data API. The package - argument should be the name of a package, in standard module format - (foo.bar). The resource argument should be in the form of a relative - filename, using '/' as the path separator. The parent directory name '..' - is not allowed, and nor is a rooted name (starting with a '/'). - - The function returns a binary string, which is the contents of the - specified resource. - - For packages located in the filesystem, which have already been imported, - this is the rough equivalent of - - d = os.path.dirname(sys.modules[package].__file__) - data = open(os.path.join(d, resource), 'rb').read() - - If the package cannot be located or loaded, or it uses a PEP 302 loader - which does not support get_data(), then None is returned. - """ - - spec = importlib.util.find_spec(package) - if spec is None: - return None - loader = spec.loader - if loader is None or not hasattr(loader, 'get_data'): - return None - # XXX needs test - mod = (sys.modules.get(package) or - importlib._bootstrap._load(spec)) - if mod is None or not hasattr(mod, '__file__'): - return None - - # Modify the resource name to be compatible with the loader.get_data - # signature - an os.path format "filename" starting with the dirname of - # the package's __file__ - parts = resource.split('/') - parts.insert(0, os.path.dirname(mod.__file__)) - resource_name = os.path.join(*parts) - return loader.get_data(resource_name) - - -_NAME_PATTERN = None - -def resolve_name(name): - """ - Resolve a name to an object. - - It is expected that `name` will be a string in one of the following - formats, where W is shorthand for a valid Python identifier and dot stands - for a literal period in these pseudo-regexes: - - W(.W)* - W(.W)*:(W(.W)*)? - - The first form is intended for backward compatibility only. It assumes that - some part of the dotted name is a package, and the rest is an object - somewhere within that package, possibly nested inside other objects. - Because the place where the package stops and the object hierarchy starts - can't be inferred by inspection, repeated attempts to import must be done - with this form. - - In the second form, the caller makes the division point clear through the - provision of a single colon: the dotted name to the left of the colon is a - package to be imported, and the dotted name to the right is the object - hierarchy within that package. Only one import is needed in this form. If - it ends with the colon, then a module object is returned. - - The function will return an object (which might be a module), or raise one - of the following exceptions: - - ValueError - if `name` isn't in a recognised format - ImportError - if an import failed when it shouldn't have - AttributeError - if a failure occurred when traversing the object hierarchy - within the imported package to get to the desired object. - """ - global _NAME_PATTERN - if _NAME_PATTERN is None: - # Lazy import to speedup Python startup time - import re - dotted_words = r'(?!\d)(\w+)(\.(?!\d)(\w+))*' - _NAME_PATTERN = re.compile(f'^(?P<pkg>{dotted_words})' - f'(?P<cln>:(?P<obj>{dotted_words})?)?$', - re.UNICODE) - - m = _NAME_PATTERN.match(name) - if not m: - raise ValueError(f'invalid format: {name!r}') - gd = m.groupdict() - if gd.get('cln'): - # there is a colon - a one-step import is all that's needed - mod = importlib.import_module(gd['pkg']) - parts = gd.get('obj') - parts = parts.split('.') if parts else [] - else: - # no colon - have to iterate to find the package boundary - parts = name.split('.') - modname = parts.pop(0) - # first part *must* be a module/package. - mod = importlib.import_module(modname) - while parts: - p = parts[0] - s = f'{modname}.{p}' - try: - mod = importlib.import_module(s) - parts.pop(0) - modname = s - except ImportError: - break - # if we reach this point, mod is the module, already imported, and - # parts is the list of parts in the object hierarchy to be traversed, or - # an empty list if just the module is wanted. - result = mod - for p in parts: - result = getattr(result, p) - return result diff --git a/Python314_4_x86_Template/Lib/platform.py b/Python314_4_x86_Template/Lib/platform.py deleted file mode 100644 index b017b8413..000000000 --- a/Python314_4_x86_Template/Lib/platform.py +++ /dev/null @@ -1,1515 +0,0 @@ -""" This module tries to retrieve as much platform-identifying data as - possible. It makes this information available via function APIs. - - If called from the command line, it prints the platform - information concatenated as single string to stdout. The output - format is usable as part of a filename. - -""" -# This module is maintained by Marc-Andre Lemburg <mal@egenix.com>. -# If you find problems, please submit bug reports/patches via the -# Python issue tracker (https://github.com/python/cpython/issues) and -# mention "@malemburg". -# -# Still needed: -# * support for MS-DOS (PythonDX ?) -# * support for Amiga and other still unsupported platforms running Python -# * support for additional Linux distributions -# -# Many thanks to all those who helped adding platform-specific -# checks (in no particular order): -# -# Charles G Waldman, David Arnold, Gordon McMillan, Ben Darnell, -# Jeff Bauer, Cliff Crawford, Ivan Van Laningham, Josef -# Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg -# Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark -# Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support), -# Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter, Steve -# Dower -# -# History: -# -# <see CVS and SVN checkin messages for history> -# -# 1.0.9 - added invalidate_caches() function to invalidate cached values -# 1.0.8 - changed Windows support to read version from kernel32.dll -# 1.0.7 - added DEV_NULL -# 1.0.6 - added linux_distribution() -# 1.0.5 - fixed Java support to allow running the module on Jython -# 1.0.4 - added IronPython support -# 1.0.3 - added normalization of Windows system name -# 1.0.2 - added more Windows support -# 1.0.1 - reformatted to make doc.py happy -# 1.0.0 - reformatted a bit and checked into Python CVS -# 0.8.0 - added sys.version parser and various new access -# APIs (python_version(), python_compiler(), etc.) -# 0.7.2 - fixed architecture() to use sizeof(pointer) where available -# 0.7.1 - added support for Caldera OpenLinux -# 0.7.0 - some fixes for WinCE; untabified the source file -# 0.6.2 - support for OpenVMS - requires version 1.5.2-V006 or higher and -# vms_lib.getsyi() configured -# 0.6.1 - added code to prevent 'uname -p' on platforms which are -# known not to support it -# 0.6.0 - fixed win32_ver() to hopefully work on Win95,98,NT and Win2k; -# did some cleanup of the interfaces - some APIs have changed -# 0.5.5 - fixed another type in the MacOS code... should have -# used more coffee today ;-) -# 0.5.4 - fixed a few typos in the MacOS code -# 0.5.3 - added experimental MacOS support; added better popen() -# workarounds in _syscmd_ver() -- still not 100% elegant -# though -# 0.5.2 - fixed uname() to return '' instead of 'unknown' in all -# return values (the system uname command tends to return -# 'unknown' instead of just leaving the field empty) -# 0.5.1 - included code for slackware dist; added exception handlers -# to cover up situations where platforms don't have os.popen -# (e.g. Mac) or fail on socket.gethostname(); fixed libc -# detection RE -# 0.5.0 - changed the API names referring to system commands to *syscmd*; -# added java_ver(); made syscmd_ver() a private -# API (was system_ver() in previous versions) -- use uname() -# instead; extended the win32_ver() to also return processor -# type information -# 0.4.0 - added win32_ver() and modified the platform() output for WinXX -# 0.3.4 - fixed a bug in _follow_symlinks() -# 0.3.3 - fixed popen() and "file" command invocation bugs -# 0.3.2 - added architecture() API and support for it in platform() -# 0.3.1 - fixed syscmd_ver() RE to support Windows NT -# 0.3.0 - added system alias support -# 0.2.3 - removed 'wince' again... oh well. -# 0.2.2 - added 'wince' to syscmd_ver() supported platforms -# 0.2.1 - added cache logic and changed the platform string format -# 0.2.0 - changed the API to use functions instead of module globals -# since some action take too long to be run on module import -# 0.1.0 - first release -# -# You can always get the latest version of this module at: -# -# http://www.egenix.com/files/python/platform.py -# -# If that URL should fail, try contacting the author. - -__copyright__ = """ - Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com - Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee or royalty is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation or portions thereof, including modifications, - that you make. - - EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO - THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, - INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! - -""" - -__version__ = '1.0.9' - -import collections -import os -import re -import sys -import functools -import itertools -try: - import _wmi -except ImportError: - _wmi = None - -### Globals & Constants - -# Helper for comparing two version number strings. -# Based on the description of the PHP's version_compare(): -# http://php.net/manual/en/function.version-compare.php - -_ver_stages = { - # any string not found in this dict, will get 0 assigned - 'dev': 10, - 'alpha': 20, 'a': 20, - 'beta': 30, 'b': 30, - 'c': 40, - 'RC': 50, 'rc': 50, - # number, will get 100 assigned - 'pl': 200, 'p': 200, -} - - -def _comparable_version(version): - component_re = re.compile(r'([0-9]+|[._+-])') - result = [] - for v in component_re.split(version): - if v not in '._+-': - try: - v = int(v, 10) - t = 100 - except ValueError: - t = _ver_stages.get(v, 0) - result.extend((t, v)) - return result - -### Platform specific APIs - - -def libc_ver(executable=None, lib='', version='', chunksize=16384): - - """ Tries to determine the libc version that the file executable - (which defaults to the Python interpreter) is linked against. - - Returns a tuple of strings (lib,version) which default to the - given parameters in case the lookup fails. - - Note that the function has intimate knowledge of how different - libc versions add symbols to the executable and thus is probably - only usable for executables compiled using gcc. - - The file is read and scanned in chunks of chunksize bytes. - - """ - if not executable: - if sys.platform == "emscripten": - # Emscripten's os.confstr reports that it is glibc, so special case - # it. - ver = ".".join(str(x) for x in sys._emscripten_info.emscripten_version) - return ("emscripten", ver) - try: - ver = os.confstr('CS_GNU_LIBC_VERSION') - # parse 'glibc 2.28' as ('glibc', '2.28') - parts = ver.split(maxsplit=1) - if len(parts) == 2: - return tuple(parts) - except (AttributeError, ValueError, OSError): - # os.confstr() or CS_GNU_LIBC_VERSION value not available - pass - - executable = sys.executable - - if not executable: - # sys.executable is not set. - return lib, version - - libc_search = re.compile(br""" - (__libc_init) - | (GLIBC_([0-9.]+)) - | (libc(_\w+)?\.so(?:\.(\d[0-9.]*))?) - | (musl-([0-9.]+)) - | ((?:libc\.|ld-)musl(?:-\w+)?.so(?:\.(\d[0-9.]*))?) - """, - re.ASCII | re.VERBOSE) - - V = _comparable_version - # We use os.path.realpath() - # here to work around problems with Cygwin not being - # able to open symlinks for reading - executable = os.path.realpath(executable) - ver = None - with open(executable, 'rb') as f: - binary = f.read(chunksize) - pos = 0 - while pos < len(binary): - if b'libc' in binary or b'GLIBC' in binary or b'musl' in binary: - m = libc_search.search(binary, pos) - else: - m = None - if not m or m.end() == len(binary): - chunk = f.read(chunksize) - if chunk: - binary = binary[max(pos, len(binary) - 1000):] + chunk - pos = 0 - continue - if not m: - break - decoded_groups = [s.decode('latin1') if s is not None else s - for s in m.groups()] - (libcinit, glibc, glibcversion, so, threads, soversion, - musl, muslversion, musl_so, musl_sover) = decoded_groups - if libcinit and not lib: - lib = 'libc' - elif glibc: - if lib != 'glibc': - lib = 'glibc' - ver = glibcversion - elif V(glibcversion) > V(ver): - ver = glibcversion - elif so: - if lib not in ('glibc', 'musl'): - lib = 'libc' - if soversion and (not ver or V(soversion) > V(ver)): - ver = soversion - if threads and ver[-len(threads):] != threads: - ver = ver + threads - elif musl: - lib = 'musl' - if not ver or V(muslversion) > V(ver): - ver = muslversion - elif musl_so: - lib = 'musl' - if musl_sover and (not ver or V(musl_sover) > V(ver)): - ver = musl_sover - pos = m.end() - return lib, version if ver is None else ver - -def _norm_version(version, build=''): - - """ Normalize the version and build strings and return a single - version string using the format major.minor.build (or patchlevel). - """ - l = version.split('.') - if build: - l.append(build) - try: - strings = list(map(str, map(int, l))) - except ValueError: - strings = l - version = '.'.join(strings[:3]) - return version - - -# Examples of VER command output: -# -# Windows 2000: Microsoft Windows 2000 [Version 5.00.2195] -# Windows XP: Microsoft Windows XP [Version 5.1.2600] -# Windows Vista: Microsoft Windows [Version 6.0.6002] -# -# Note that the "Version" string gets localized on different -# Windows versions. - -def _syscmd_ver(system='', release='', version='', - - supported_platforms=('win32', 'win16', 'dos')): - - """ Tries to figure out the OS version used and returns - a tuple (system, release, version). - - It uses the "ver" shell command for this which is known - to exists on Windows, DOS. XXX Others too ? - - In case this fails, the given parameters are used as - defaults. - - """ - if sys.platform not in supported_platforms: - return system, release, version - - # Try some common cmd strings - import subprocess - for cmd in ('ver', 'command /c ver', 'cmd /c ver'): - try: - info = subprocess.check_output(cmd, - stdin=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - text=True, - encoding="locale", - shell=True) - except (OSError, subprocess.CalledProcessError) as why: - #print('Command %s failed: %s' % (cmd, why)) - continue - else: - break - else: - return system, release, version - - ver_output = re.compile(r'(?:([\w ]+) ([\w.]+) ' - r'.*' - r'\[.* ([\d.]+)\])') - - # Parse the output - info = info.strip() - m = ver_output.match(info) - if m is not None: - system, release, version = m.groups() - # Strip trailing dots from version and release - if release[-1] == '.': - release = release[:-1] - if version[-1] == '.': - version = version[:-1] - # Normalize the version and build strings (eliminating additional - # zeros) - version = _norm_version(version) - return system, release, version - - -def _wmi_query(table, *keys): - global _wmi - if not _wmi: - raise OSError("not supported") - table = { - "OS": "Win32_OperatingSystem", - "CPU": "Win32_Processor", - }[table] - try: - data = _wmi.exec_query("SELECT {} FROM {}".format( - ",".join(keys), - table, - )).split("\0") - except OSError: - _wmi = None - raise OSError("not supported") - split_data = (i.partition("=") for i in data) - dict_data = {i[0]: i[2] for i in split_data} - return (dict_data[k] for k in keys) - - -_WIN32_CLIENT_RELEASES = [ - ((10, 1, 0), "post11"), - ((10, 0, 22000), "11"), - ((6, 4, 0), "10"), - ((6, 3, 0), "8.1"), - ((6, 2, 0), "8"), - ((6, 1, 0), "7"), - ((6, 0, 0), "Vista"), - ((5, 2, 3790), "XP64"), - ((5, 2, 0), "XPMedia"), - ((5, 1, 0), "XP"), - ((5, 0, 0), "2000"), -] - -_WIN32_SERVER_RELEASES = [ - ((10, 1, 0), "post2025Server"), - ((10, 0, 26100), "2025Server"), - ((10, 0, 20348), "2022Server"), - ((10, 0, 17763), "2019Server"), - ((6, 4, 0), "2016Server"), - ((6, 3, 0), "2012ServerR2"), - ((6, 2, 0), "2012Server"), - ((6, 1, 0), "2008ServerR2"), - ((6, 0, 0), "2008Server"), - ((5, 2, 0), "2003Server"), - ((5, 0, 0), "2000Server"), -] - -def win32_is_iot(): - return win32_edition() in ('IoTUAP', 'NanoServer', 'WindowsCoreHeadless', 'IoTEdgeOS') - -def win32_edition(): - try: - import winreg - except ImportError: - pass - else: - try: - cvkey = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion' - with winreg.OpenKeyEx(winreg.HKEY_LOCAL_MACHINE, cvkey) as key: - return winreg.QueryValueEx(key, 'EditionId')[0] - except OSError: - pass - - return None - -def _win32_ver(version, csd, ptype): - # Try using WMI first, as this is the canonical source of data - try: - (version, product_type, ptype, spmajor, spminor) = _wmi_query( - 'OS', - 'Version', - 'ProductType', - 'BuildType', - 'ServicePackMajorVersion', - 'ServicePackMinorVersion', - ) - is_client = (int(product_type) == 1) - if spminor and spminor != '0': - csd = f'SP{spmajor}.{spminor}' - else: - csd = f'SP{spmajor}' - return version, csd, ptype, is_client - except OSError: - pass - - # Fall back to a combination of sys.getwindowsversion and "ver" - try: - from sys import getwindowsversion - except ImportError: - return version, csd, ptype, True - - winver = getwindowsversion() - is_client = (getattr(winver, 'product_type', 1) == 1) - try: - version = _syscmd_ver()[2] - major, minor, build = map(int, version.split('.')) - except ValueError: - major, minor, build = winver.platform_version or winver[:3] - version = '{0}.{1}.{2}'.format(major, minor, build) - - # getwindowsversion() reflect the compatibility mode Python is - # running under, and so the service pack value is only going to be - # valid if the versions match. - if winver[:2] == (major, minor): - try: - csd = 'SP{}'.format(winver.service_pack_major) - except AttributeError: - if csd[:13] == 'Service Pack ': - csd = 'SP' + csd[13:] - - try: - import winreg - except ImportError: - pass - else: - try: - cvkey = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion' - with winreg.OpenKeyEx(winreg.HKEY_LOCAL_MACHINE, cvkey) as key: - ptype = winreg.QueryValueEx(key, 'CurrentType')[0] - except OSError: - pass - - return version, csd, ptype, is_client - -def win32_ver(release='', version='', csd='', ptype=''): - is_client = False - - version, csd, ptype, is_client = _win32_ver(version, csd, ptype) - - if version: - intversion = tuple(map(int, version.split('.'))) - releases = _WIN32_CLIENT_RELEASES if is_client else _WIN32_SERVER_RELEASES - release = next((r for v, r in releases if v <= intversion), release) - - return release, version, csd, ptype - - -def _mac_ver_xml(): - fn = '/System/Library/CoreServices/SystemVersion.plist' - if not os.path.exists(fn): - return None - - try: - import plistlib - except ImportError: - return None - - with open(fn, 'rb') as f: - pl = plistlib.load(f) - release = pl['ProductVersion'] - versioninfo = ('', '', '') - machine = os.uname().machine - if machine in ('ppc', 'Power Macintosh'): - # Canonical name - machine = 'PowerPC' - - return release, versioninfo, machine - - -def mac_ver(release='', versioninfo=('', '', ''), machine=''): - - """ Get macOS version information and return it as tuple (release, - versioninfo, machine) with versioninfo being a tuple (version, - dev_stage, non_release_version). - - Entries which cannot be determined are set to the parameter values - which default to ''. All tuple entries are strings. - """ - - # First try reading the information from an XML file which should - # always be present - info = _mac_ver_xml() - if info is not None: - return info - - # If that also doesn't work return the default values - return release, versioninfo, machine - - -# A namedtuple for iOS version information. -IOSVersionInfo = collections.namedtuple( - "IOSVersionInfo", - ["system", "release", "model", "is_simulator"] -) - - -def ios_ver(system="", release="", model="", is_simulator=False): - """Get iOS version information, and return it as a namedtuple: - (system, release, model, is_simulator). - - If values can't be determined, they are set to values provided as - parameters. - """ - if sys.platform == "ios": - import _ios_support - result = _ios_support.get_platform_ios() - if result is not None: - return IOSVersionInfo(*result) - - return IOSVersionInfo(system, release, model, is_simulator) - - -def _java_getprop(name, default): - """This private helper is deprecated in 3.13 and will be removed in 3.15""" - from java.lang import System - try: - value = System.getProperty(name) - if value is None: - return default - return value - except AttributeError: - return default - -def java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', '')): - - """ Version interface for Jython. - - Returns a tuple (release, vendor, vminfo, osinfo) with vminfo being - a tuple (vm_name, vm_release, vm_vendor) and osinfo being a - tuple (os_name, os_version, os_arch). - - Values which cannot be determined are set to the defaults - given as parameters (which all default to ''). - - """ - import warnings - warnings._deprecated('java_ver', remove=(3, 15)) - # Import the needed APIs - try: - import java.lang # noqa: F401 - except ImportError: - return release, vendor, vminfo, osinfo - - vendor = _java_getprop('java.vendor', vendor) - release = _java_getprop('java.version', release) - vm_name, vm_release, vm_vendor = vminfo - vm_name = _java_getprop('java.vm.name', vm_name) - vm_vendor = _java_getprop('java.vm.vendor', vm_vendor) - vm_release = _java_getprop('java.vm.version', vm_release) - vminfo = vm_name, vm_release, vm_vendor - os_name, os_version, os_arch = osinfo - os_arch = _java_getprop('java.os.arch', os_arch) - os_name = _java_getprop('java.os.name', os_name) - os_version = _java_getprop('java.os.version', os_version) - osinfo = os_name, os_version, os_arch - - return release, vendor, vminfo, osinfo - - -AndroidVer = collections.namedtuple( - "AndroidVer", "release api_level manufacturer model device is_emulator") - -def android_ver(release="", api_level=0, manufacturer="", model="", device="", - is_emulator=False): - if sys.platform == "android": - try: - from ctypes import CDLL, c_char_p, create_string_buffer - except ImportError: - pass - else: - # An NDK developer confirmed that this is an officially-supported - # API (https://stackoverflow.com/a/28416743). Use `getattr` to avoid - # private name mangling. - system_property_get = getattr(CDLL("libc.so"), "__system_property_get") - system_property_get.argtypes = (c_char_p, c_char_p) - - def getprop(name, default): - # https://android.googlesource.com/platform/bionic/+/refs/tags/android-5.0.0_r1/libc/include/sys/system_properties.h#39 - PROP_VALUE_MAX = 92 - buffer = create_string_buffer(PROP_VALUE_MAX) - length = system_property_get(name.encode("UTF-8"), buffer) - if length == 0: - # This API doesn’t distinguish between an empty property and - # a missing one. - return default - else: - return buffer.value.decode("UTF-8", "backslashreplace") - - release = getprop("ro.build.version.release", release) - api_level = int(getprop("ro.build.version.sdk", api_level)) - manufacturer = getprop("ro.product.manufacturer", manufacturer) - model = getprop("ro.product.model", model) - device = getprop("ro.product.device", device) - is_emulator = getprop("ro.kernel.qemu", "0") == "1" - - return AndroidVer( - release, api_level, manufacturer, model, device, is_emulator) - - -### System name aliasing - -def system_alias(system, release, version): - - """ Returns (system, release, version) aliased to common - marketing names used for some systems. - - It also does some reordering of the information in some cases - where it would otherwise cause confusion. - - """ - if system == 'SunOS': - # Sun's OS - if release < '5': - # These releases use the old name SunOS - return system, release, version - # Modify release (marketing release = SunOS release - 3) - l = release.split('.') - if l: - try: - major = int(l[0]) - except ValueError: - pass - else: - major = major - 3 - l[0] = str(major) - release = '.'.join(l) - if release < '6': - system = 'Solaris' - else: - # XXX Whatever the new SunOS marketing name is... - system = 'Solaris' - - elif system in ('win32', 'win16'): - # In case one of the other tricks - system = 'Windows' - - # bpo-35516: Don't replace Darwin with macOS since input release and - # version arguments can be different than the currently running version. - - return system, release, version - -### Various internal helpers - -def _platform(*args): - - """ Helper to format the platform string in a filename - compatible format e.g. "system-version-machine". - """ - # Format the platform string - platform = '-'.join(x.strip() for x in filter(len, args)) - - # Cleanup some possible filename obstacles... - platform = platform.replace(' ', '_') - platform = platform.replace('/', '-') - platform = platform.replace('\\', '-') - platform = platform.replace(':', '-') - platform = platform.replace(';', '-') - platform = platform.replace('"', '-') - platform = platform.replace('(', '-') - platform = platform.replace(')', '-') - - # No need to report 'unknown' information... - platform = platform.replace('unknown', '') - - # Fold '--'s and remove trailing '-' - while True: - cleaned = platform.replace('--', '-') - if cleaned == platform: - break - platform = cleaned - while platform and platform[-1] == '-': - platform = platform[:-1] - - return platform - -def _node(default=''): - - """ Helper to determine the node name of this machine. - """ - try: - import socket - except ImportError: - # No sockets... - return default - try: - return socket.gethostname() - except OSError: - # Still not working... - return default - -def _follow_symlinks(filepath): - - """ In case filepath is a symlink, follow it until a - real file is reached. - """ - filepath = os.path.abspath(filepath) - while os.path.islink(filepath): - filepath = os.path.normpath( - os.path.join(os.path.dirname(filepath), os.readlink(filepath))) - return filepath - - -def _syscmd_file(target, default=''): - - """ Interface to the system's file command. - - The function uses the -b option of the file command to have it - omit the filename in its output. Follow the symlinks. It returns - default in case the command should fail. - - """ - if sys.platform in {'dos', 'win32', 'win16', 'ios', 'tvos', 'watchos'}: - # XXX Others too ? - return default - - try: - import subprocess - except ImportError: - return default - target = _follow_symlinks(target) - # "file" output is locale dependent: force the usage of the C locale - # to get deterministic behavior. - env = dict(os.environ, LC_ALL='C') - try: - # -b: do not prepend filenames to output lines (brief mode) - output = subprocess.check_output(['file', '-b', target], - stderr=subprocess.DEVNULL, - env=env) - except (OSError, subprocess.CalledProcessError): - return default - if not output: - return default - # With the C locale, the output should be mostly ASCII-compatible. - # Decode from Latin-1 to prevent Unicode decode error. - return output.decode('latin-1') - -### Information about the used architecture - -# Default values for architecture; non-empty strings override the -# defaults given as parameters -_default_architecture = { - 'win32': ('', 'WindowsPE'), - 'win16': ('', 'Windows'), - 'dos': ('', 'MSDOS'), -} - -def architecture(executable=sys.executable, bits='', linkage=''): - - """ Queries the given executable (defaults to the Python interpreter - binary) for various architecture information. - - Returns a tuple (bits, linkage) which contains information about - the bit architecture and the linkage format used for the - executable. Both values are returned as strings. - - Values that cannot be determined are returned as given by the - parameter presets. If bits is given as '', the sizeof(pointer) - (or sizeof(long) on Python version < 1.5.2) is used as - indicator for the supported pointer size. - - The function relies on the system's "file" command to do the - actual work. This is available on most if not all Unix - platforms. On some non-Unix platforms where the "file" command - does not exist and the executable is set to the Python interpreter - binary defaults from _default_architecture are used. - - """ - # Use the sizeof(pointer) as default number of bits if nothing - # else is given as default. - if not bits: - import struct - size = struct.calcsize('P') - bits = str(size * 8) + 'bit' - - # Get data from the 'file' system command - if executable: - fileout = _syscmd_file(executable, '') - else: - fileout = '' - - if not fileout and \ - executable == sys.executable: - # "file" command did not return anything; we'll try to provide - # some sensible defaults then... - if sys.platform in _default_architecture: - b, l = _default_architecture[sys.platform] - if b: - bits = b - if l: - linkage = l - return bits, linkage - - if 'executable' not in fileout and 'shared object' not in fileout: - # Format not supported - return bits, linkage - - # Bits - if '32-bit' in fileout: - bits = '32bit' - elif '64-bit' in fileout: - bits = '64bit' - - # Linkage - if 'ELF' in fileout: - linkage = 'ELF' - elif 'Mach-O' in fileout: - linkage = "Mach-O" - elif 'PE' in fileout: - # E.g. Windows uses this format - if 'Windows' in fileout: - linkage = 'WindowsPE' - else: - linkage = 'PE' - elif 'COFF' in fileout: - linkage = 'COFF' - elif 'MS-DOS' in fileout: - linkage = 'MSDOS' - else: - # XXX the A.OUT format also falls under this class... - pass - - return bits, linkage - - -def _get_machine_win32(): - # Try to use the PROCESSOR_* environment variables - # available on Win XP and later; see - # http://support.microsoft.com/kb/888731 and - # http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM - - # WOW64 processes mask the native architecture - try: - [arch, *_] = _wmi_query('CPU', 'Architecture') - except OSError: - pass - else: - try: - arch = ['x86', 'MIPS', 'Alpha', 'PowerPC', None, - 'ARM', 'ia64', None, None, - 'AMD64', None, None, 'ARM64', - ][int(arch)] - except (ValueError, IndexError): - pass - else: - if arch: - return arch - return ( - os.environ.get('PROCESSOR_ARCHITEW6432', '') or - os.environ.get('PROCESSOR_ARCHITECTURE', '') - ) - - -class _Processor: - @classmethod - def get(cls): - func = getattr(cls, f'get_{sys.platform}', cls.from_subprocess) - return func() or '' - - def get_win32(): - try: - manufacturer, caption = _wmi_query('CPU', 'Manufacturer', 'Caption') - except OSError: - return os.environ.get('PROCESSOR_IDENTIFIER', _get_machine_win32()) - else: - return f'{caption}, {manufacturer}' - - def get_OpenVMS(): - try: - import vms_lib - except ImportError: - pass - else: - csid, cpu_number = vms_lib.getsyi('SYI$_CPU', 0) - return 'Alpha' if cpu_number >= 128 else 'VAX' - - # On the iOS simulator, os.uname returns the architecture as uname.machine. - # On device it returns the model name for some reason; but there's only one - # CPU architecture for iOS devices, so we know the right answer. - def get_ios(): - if sys.implementation._multiarch.endswith("simulator"): - return os.uname().machine - return 'arm64' - - def from_subprocess(): - """ - Fall back to `uname -p` - """ - try: - import subprocess - except ImportError: - return None - try: - return subprocess.check_output( - ['uname', '-p'], - stderr=subprocess.DEVNULL, - text=True, - encoding="utf8", - ).strip() - except (OSError, subprocess.CalledProcessError): - pass - - -def _unknown_as_blank(val): - return '' if val == 'unknown' else val - - -### Portable uname() interface - -class uname_result( - collections.namedtuple( - "uname_result_base", - "system node release version machine") - ): - """ - A uname_result that's largely compatible with a - simple namedtuple except that 'processor' is - resolved late and cached to avoid calling "uname" - except when needed. - """ - - _fields = ('system', 'node', 'release', 'version', 'machine', 'processor') - - @functools.cached_property - def processor(self): - return _unknown_as_blank(_Processor.get()) - - def __iter__(self): - return itertools.chain( - super().__iter__(), - (self.processor,) - ) - - @classmethod - def _make(cls, iterable): - # override factory to affect length check - num_fields = len(cls._fields) - 1 - result = cls.__new__(cls, *iterable) - if len(result) != num_fields + 1: - msg = f'Expected {num_fields} arguments, got {len(result)}' - raise TypeError(msg) - return result - - def __getitem__(self, key): - return tuple(self)[key] - - def __len__(self): - return len(tuple(iter(self))) - - def __reduce__(self): - return uname_result, tuple(self)[:len(self._fields) - 1] - - -_uname_cache = None - - -def uname(): - - """ Fairly portable uname interface. Returns a tuple - of strings (system, node, release, version, machine, processor) - identifying the underlying platform. - - Note that unlike the os.uname function this also returns - possible processor information as an additional tuple entry. - - Entries which cannot be determined are set to ''. - - """ - global _uname_cache - - if _uname_cache is not None: - return _uname_cache - - # Get some infos from the builtin os.uname API... - try: - system, node, release, version, machine = infos = os.uname() - except AttributeError: - system = sys.platform - node = _node() - release = version = machine = '' - infos = () - - if not any(infos): - # uname is not available - - # Try win32_ver() on win32 platforms - if system == 'win32': - release, version, csd, ptype = win32_ver() - machine = machine or _get_machine_win32() - - # Try the 'ver' system command available on some - # platforms - if not (release and version): - system, release, version = _syscmd_ver(system) - # Normalize system to what win32_ver() normally returns - # (_syscmd_ver() tends to return the vendor name as well) - if system == 'Microsoft Windows': - system = 'Windows' - elif system == 'Microsoft' and release == 'Windows': - # Under Windows Vista and Windows Server 2008, - # Microsoft changed the output of the ver command. The - # release is no longer printed. This causes the - # system and release to be misidentified. - system = 'Windows' - if '6.0' == version[:3]: - release = 'Vista' - else: - release = '' - - # In case we still don't know anything useful, we'll try to - # help ourselves - if system in ('win32', 'win16'): - if not version: - if system == 'win32': - version = '32bit' - else: - version = '16bit' - system = 'Windows' - - elif system[:4] == 'java': - release, vendor, vminfo, osinfo = java_ver() - system = 'Java' - version = ', '.join(vminfo) - if not version: - version = vendor - - # System specific extensions - if system == 'OpenVMS': - # OpenVMS seems to have release and version mixed up - if not release or release == '0': - release = version - version = '' - - # normalize name - if system == 'Microsoft' and release == 'Windows': - system = 'Windows' - release = 'Vista' - - # On Android, return the name and version of the OS rather than the kernel. - if sys.platform == 'android': - system = 'Android' - release = android_ver().release - - # Normalize responses on iOS - if sys.platform == 'ios': - system, release, _, _ = ios_ver() - - vals = system, node, release, version, machine - # Replace 'unknown' values with the more portable '' - _uname_cache = uname_result(*map(_unknown_as_blank, vals)) - return _uname_cache - -### Direct interfaces to some of the uname() return values - -def system(): - - """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. - - An empty string is returned if the value cannot be determined. - - """ - return uname().system - -def node(): - - """ Returns the computer's network name (which may not be fully - qualified) - - An empty string is returned if the value cannot be determined. - - """ - return uname().node - -def release(): - - """ Returns the system's release, e.g. '2.2.0' or 'NT' - - An empty string is returned if the value cannot be determined. - - """ - return uname().release - -def version(): - - """ Returns the system's release version, e.g. '#3 on degas' - - An empty string is returned if the value cannot be determined. - - """ - return uname().version - -def machine(): - - """ Returns the machine type, e.g. 'i386' - - An empty string is returned if the value cannot be determined. - - """ - return uname().machine - -def processor(): - - """ Returns the (true) processor name, e.g. 'amdk6' - - An empty string is returned if the value cannot be - determined. Note that many platforms do not provide this - information or simply return the same value as for machine(), - e.g. NetBSD does this. - - """ - return uname().processor - -### Various APIs for extracting information from sys.version - -_sys_version_cache = {} - -def _sys_version(sys_version=None): - - """ Returns a parsed version of Python's sys.version as tuple - (name, version, branch, revision, buildno, builddate, compiler) - referring to the Python implementation name, version, branch, - revision, build number, build date/time as string and the compiler - identification string. - - Note that unlike the Python sys.version, the returned value - for the Python version will always include the patchlevel (it - defaults to '.0'). - - The function returns empty strings for tuple entries that - cannot be determined. - - sys_version may be given to parse an alternative version - string, e.g. if the version was read from a different Python - interpreter. - - """ - # Get the Python version - if sys_version is None: - sys_version = sys.version - - # Try the cache first - result = _sys_version_cache.get(sys_version, None) - if result is not None: - return result - - if sys.platform.startswith('java'): - # Jython - jython_sys_version_parser = re.compile( - r'([\w.+]+)\s*' # "version<space>" - r'\(#?([^,]+)' # "(#buildno" - r'(?:,\s*([\w ]*)' # ", builddate" - r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>" - r'\[([^\]]+)\]?', re.ASCII) # "[compiler]" - name = 'Jython' - match = jython_sys_version_parser.match(sys_version) - if match is None: - raise ValueError( - 'failed to parse Jython sys.version: %s' % - repr(sys_version)) - version, buildno, builddate, buildtime, _ = match.groups() - if builddate is None: - builddate = '' - compiler = sys.platform - - elif "PyPy" in sys_version: - # PyPy - pypy_sys_version_parser = re.compile( - r'([\w.+]+)\s*' - r'\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' - r'\[PyPy [^\]]+\]?') - - name = "PyPy" - match = pypy_sys_version_parser.match(sys_version) - if match is None: - raise ValueError("failed to parse PyPy sys.version: %s" % - repr(sys_version)) - version, buildno, builddate, buildtime = match.groups() - compiler = "" - - else: - # CPython - cpython_sys_version_parser = re.compile( - r'([\w.+]+)\s*' # "version<space>" - r'(?:free-threading build\s+)?' # "free-threading-build<space>" - r'\(#?([^,]+)' # "(#buildno" - r'(?:,\s*([\w ]*)' # ", builddate" - r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>" - r'\[([^\]]+)\]?', re.ASCII) # "[compiler]" - match = cpython_sys_version_parser.match(sys_version) - if match is None: - raise ValueError( - 'failed to parse CPython sys.version: %s' % - repr(sys_version)) - version, buildno, builddate, buildtime, compiler = \ - match.groups() - name = 'CPython' - if builddate is None: - builddate = '' - elif buildtime: - builddate = builddate + ' ' + buildtime - - if hasattr(sys, '_git'): - _, branch, revision = sys._git - elif hasattr(sys, '_mercurial'): - _, branch, revision = sys._mercurial - else: - branch = '' - revision = '' - - # Add the patchlevel version if missing - l = version.split('.') - if len(l) == 2: - l.append('0') - version = '.'.join(l) - - # Build and cache the result - result = (name, version, branch, revision, buildno, builddate, compiler) - _sys_version_cache[sys_version] = result - return result - -def python_implementation(): - - """ Returns a string identifying the Python implementation. - - Currently, the following implementations are identified: - 'CPython' (C implementation of Python), - 'Jython' (Java implementation of Python), - 'PyPy' (Python implementation of Python). - - """ - return _sys_version()[0] - -def python_version(): - - """ Returns the Python version as string 'major.minor.patchlevel' - - Note that unlike the Python sys.version, the returned value - will always include the patchlevel (it defaults to 0). - - """ - return _sys_version()[1] - -def python_version_tuple(): - - """ Returns the Python version as tuple (major, minor, patchlevel) - of strings. - - Note that unlike the Python sys.version, the returned value - will always include the patchlevel (it defaults to 0). - - """ - return tuple(_sys_version()[1].split('.')) - -def python_branch(): - - """ Returns a string identifying the Python implementation - branch. - - For CPython this is the SCM branch from which the - Python binary was built. - - If not available, an empty string is returned. - - """ - - return _sys_version()[2] - -def python_revision(): - - """ Returns a string identifying the Python implementation - revision. - - For CPython this is the SCM revision from which the - Python binary was built. - - If not available, an empty string is returned. - - """ - return _sys_version()[3] - -def python_build(): - - """ Returns a tuple (buildno, builddate) stating the Python - build number and date as strings. - - """ - return _sys_version()[4:6] - -def python_compiler(): - - """ Returns a string identifying the compiler used for compiling - Python. - - """ - return _sys_version()[6] - -### The Opus Magnum of platform strings :-) - -_platform_cache = {} - -def platform(aliased=False, terse=False): - - """ Returns a single string identifying the underlying platform - with as much useful information as possible (but no more :). - - The output is intended to be human readable rather than - machine parseable. It may look different on different - platforms and this is intended. - - If "aliased" is true, the function will use aliases for - various platforms that report system names which differ from - their common names, e.g. SunOS will be reported as - Solaris. The system_alias() function is used to implement - this. - - Setting terse to true causes the function to return only the - absolute minimum information needed to identify the platform. - - """ - result = _platform_cache.get((aliased, terse), None) - if result is not None: - return result - - # Get uname information and then apply platform specific cosmetics - # to it... - system, node, release, version, machine, processor = uname() - if machine == processor: - processor = '' - if aliased: - system, release, version = system_alias(system, release, version) - - if system == 'Darwin': - # macOS and iOS both report as a "Darwin" kernel - if sys.platform == "ios": - system, release, _, _ = ios_ver() - else: - macos_release = mac_ver()[0] - if macos_release: - system = 'macOS' - release = macos_release - - if system == 'Windows': - # MS platforms - rel, vers, csd, ptype = win32_ver(version) - if terse: - platform = _platform(system, release) - else: - platform = _platform(system, release, version, csd) - - elif system == 'Linux': - # check for libc vs. glibc - libcname, libcversion = libc_ver() - platform = _platform(system, release, machine, processor, - 'with', - libcname+libcversion) - elif system == 'Java': - # Java platforms - r, v, vminfo, (os_name, os_version, os_arch) = java_ver() - if terse or not os_name: - platform = _platform(system, release, version) - else: - platform = _platform(system, release, version, - 'on', - os_name, os_version, os_arch) - - else: - # Generic handler - if terse: - platform = _platform(system, release) - else: - bits, linkage = architecture(sys.executable) - platform = _platform(system, release, machine, - processor, bits, linkage) - - _platform_cache[(aliased, terse)] = platform - return platform - -### freedesktop.org os-release standard -# https://www.freedesktop.org/software/systemd/man/os-release.html - -# /etc takes precedence over /usr/lib -_os_release_candidates = ("/etc/os-release", "/usr/lib/os-release") -_os_release_cache = None - - -def _parse_os_release(lines): - # These fields are mandatory fields with well-known defaults - # in practice all Linux distributions override NAME, ID, and PRETTY_NAME. - info = { - "NAME": "Linux", - "ID": "linux", - "PRETTY_NAME": "Linux", - } - - # NAME=value with optional quotes (' or "). The regular expression is less - # strict than shell lexer, but that's ok. - os_release_line = re.compile( - "^(?P<name>[a-zA-Z0-9_]+)=(?P<quote>[\"\']?)(?P<value>.*)(?P=quote)$" - ) - # unescape five special characters mentioned in the standard - os_release_unescape = re.compile(r"\\([\\\$\"\'`])") - - for line in lines: - mo = os_release_line.match(line) - if mo is not None: - info[mo.group('name')] = os_release_unescape.sub( - r"\1", mo.group('value') - ) - - return info - - -def freedesktop_os_release(): - """Return operation system identification from freedesktop.org os-release - """ - global _os_release_cache - - if _os_release_cache is None: - errno = None - for candidate in _os_release_candidates: - try: - with open(candidate, encoding="utf-8") as f: - _os_release_cache = _parse_os_release(f) - break - except OSError as e: - errno = e.errno - else: - raise OSError( - errno, - f"Unable to read files {', '.join(_os_release_candidates)}" - ) - - return _os_release_cache.copy() - - -def invalidate_caches(): - """Invalidate the cached results.""" - global _uname_cache - _uname_cache = None - - global _os_release_cache - _os_release_cache = None - - _sys_version_cache.clear() - _platform_cache.clear() - - -### Command line interface - -def _parse_args(args: list[str] | None): - import argparse - - parser = argparse.ArgumentParser(color=True) - parser.add_argument("args", nargs="*", choices=["nonaliased", "terse"]) - parser.add_argument( - "--terse", - action="store_true", - help=( - "return only the absolute minimum information needed " - "to identify the platform" - ), - ) - parser.add_argument( - "--nonaliased", - dest="aliased", - action="store_false", - help=( - "disable system/OS name aliasing. If aliasing is enabled, " - "some platforms report system names different from " - "their common names, e.g. SunOS is reported as Solaris" - ), - ) - - return parser.parse_args(args) - - -def _main(args: list[str] | None = None): - args = _parse_args(args) - - terse = args.terse or ("terse" in args.args) - aliased = args.aliased and ('nonaliased' not in args.args) - - print(platform(aliased, terse)) - - -if __name__ == "__main__": - _main() diff --git a/Python314_4_x86_Template/Lib/plistlib.py b/Python314_4_x86_Template/Lib/plistlib.py deleted file mode 100644 index c3aee1e15..000000000 --- a/Python314_4_x86_Template/Lib/plistlib.py +++ /dev/null @@ -1,948 +0,0 @@ -r"""plistlib.py -- a tool to generate and parse MacOSX .plist files. - -The property list (.plist) file format is a simple XML pickle supporting -basic object types, like dictionaries, lists, numbers and strings. -Usually the top level object is a dictionary. - -To write out a plist file, use the dump(value, file) -function. 'value' is the top level object, 'file' is -a (writable) file object. - -To parse a plist from a file, use the load(file) function, -with a (readable) file object as the only argument. It -returns the top level object (again, usually a dictionary). - -To work with plist data in bytes objects, you can use loads() -and dumps(). - -Values can be strings, integers, floats, booleans, tuples, lists, -dictionaries (but only with string keys), Data, bytes, bytearray, or -datetime.datetime objects. - -Generate Plist example: - - import datetime as dt - import plistlib - - pl = dict( - aString = "Doodah", - aList = ["A", "B", 12, 32.1, [1, 2, 3]], - aFloat = 0.1, - anInt = 728, - aDict = dict( - anotherString = "<hello & hi there!>", - aThirdString = "M\xe4ssig, Ma\xdf", - aTrueValue = True, - aFalseValue = False, - ), - someData = b"<binary gunk>", - someMoreData = b"<lots of binary gunk>" * 10, - aDate = dt.datetime.now() - ) - print(plistlib.dumps(pl).decode()) - -Parse Plist example: - - import plistlib - - plist = b'''<plist version="1.0"> - <dict> - <key>foo</key> - <string>bar</string> - </dict> - </plist>''' - pl = plistlib.loads(plist) - print(pl["foo"]) -""" -__all__ = [ - "InvalidFileException", "FMT_XML", "FMT_BINARY", "load", "dump", "loads", "dumps", "UID" -] - -import binascii -import codecs -import datetime -import enum -from io import BytesIO -import itertools -import os -import re -import struct -from xml.parsers.expat import ParserCreate - - -PlistFormat = enum.Enum('PlistFormat', 'FMT_XML FMT_BINARY', module=__name__) -globals().update(PlistFormat.__members__) - -# Data larger than this will be read in chunks, to prevent extreme -# overallocation. -_MIN_READ_BUF_SIZE = 1 << 20 - -class UID: - def __init__(self, data): - if not isinstance(data, int): - raise TypeError("data must be an int") - if data >= 1 << 64: - raise ValueError("UIDs cannot be >= 2**64") - if data < 0: - raise ValueError("UIDs must be positive") - self.data = data - - def __index__(self): - return self.data - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self.data)) - - def __reduce__(self): - return self.__class__, (self.data,) - - def __eq__(self, other): - if not isinstance(other, UID): - return NotImplemented - return self.data == other.data - - def __hash__(self): - return hash(self.data) - -# -# XML support -# - - -# XML 'header' -PLISTHEADER = b"""\ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -""" - - -# Regex to find any control chars, except for \t \n and \r -_controlCharPat = re.compile( - r"[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f" - r"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]") - -def _encode_base64(s, maxlinelength=76): - # copied from base64.encodebytes(), with added maxlinelength argument - maxbinsize = (maxlinelength//4)*3 - pieces = [] - for i in range(0, len(s), maxbinsize): - chunk = s[i : i + maxbinsize] - pieces.append(binascii.b2a_base64(chunk)) - return b''.join(pieces) - -def _decode_base64(s): - if isinstance(s, str): - return binascii.a2b_base64(s.encode("utf-8")) - - else: - return binascii.a2b_base64(s) - -# Contents should conform to a subset of ISO 8601 -# (in particular, YYYY '-' MM '-' DD 'T' HH ':' MM ':' SS 'Z'. Smaller units -# may be omitted with # a loss of precision) -_dateParser = re.compile(r"(?P<year>\d\d\d\d)(?:-(?P<month>\d\d)(?:-(?P<day>\d\d)(?:T(?P<hour>\d\d)(?::(?P<minute>\d\d)(?::(?P<second>\d\d))?)?)?)?)?Z", re.ASCII) - - -def _date_from_string(s, aware_datetime): - order = ('year', 'month', 'day', 'hour', 'minute', 'second') - gd = _dateParser.match(s).groupdict() - lst = [] - for key in order: - val = gd[key] - if val is None: - break - lst.append(int(val)) - if aware_datetime: - return datetime.datetime(*lst, tzinfo=datetime.UTC) - return datetime.datetime(*lst) - - -def _date_to_string(d, aware_datetime): - if aware_datetime: - d = d.astimezone(datetime.UTC) - return '%04d-%02d-%02dT%02d:%02d:%02dZ' % ( - d.year, d.month, d.day, - d.hour, d.minute, d.second - ) - -def _escape(text): - m = _controlCharPat.search(text) - if m is not None: - raise ValueError("strings can't contain control characters; " - "use bytes instead") - text = text.replace("\r\n", "\n") # convert DOS line endings - text = text.replace("\r", "\n") # convert Mac line endings - text = text.replace("&", "&amp;") # escape '&' - text = text.replace("<", "&lt;") # escape '<' - text = text.replace(">", "&gt;") # escape '>' - return text - -class _PlistParser: - def __init__(self, dict_type, aware_datetime=False): - self.stack = [] - self.current_key = None - self.root = None - self._dict_type = dict_type - self._aware_datetime = aware_datetime - - def parse(self, fileobj): - self.parser = ParserCreate() - self.parser.StartElementHandler = self.handle_begin_element - self.parser.EndElementHandler = self.handle_end_element - self.parser.CharacterDataHandler = self.handle_data - self.parser.EntityDeclHandler = self.handle_entity_decl - self.parser.ParseFile(fileobj) - return self.root - - def handle_entity_decl(self, entity_name, is_parameter_entity, value, base, system_id, public_id, notation_name): - # Reject plist files with entity declarations to avoid XML vulnerabilities in expat. - # Regular plist files don't contain those declarations, and Apple's plutil tool does not - # accept them either. - raise InvalidFileException("XML entity declarations are not supported in plist files") - - def handle_begin_element(self, element, attrs): - self.data = [] - handler = getattr(self, "begin_" + element, None) - if handler is not None: - handler(attrs) - - def handle_end_element(self, element): - handler = getattr(self, "end_" + element, None) - if handler is not None: - handler() - - def handle_data(self, data): - self.data.append(data) - - def add_object(self, value): - if self.current_key is not None: - if not isinstance(self.stack[-1], dict): - raise ValueError("unexpected element at line %d" % - self.parser.CurrentLineNumber) - self.stack[-1][self.current_key] = value - self.current_key = None - elif not self.stack: - # this is the root object - self.root = value - else: - if not isinstance(self.stack[-1], list): - raise ValueError("unexpected element at line %d" % - self.parser.CurrentLineNumber) - self.stack[-1].append(value) - - def get_data(self): - data = ''.join(self.data) - self.data = [] - return data - - # element handlers - - def begin_dict(self, attrs): - d = self._dict_type() - self.add_object(d) - self.stack.append(d) - - def end_dict(self): - if self.current_key: - raise ValueError("missing value for key '%s' at line %d" % - (self.current_key,self.parser.CurrentLineNumber)) - self.stack.pop() - - def end_key(self): - if self.current_key or not isinstance(self.stack[-1], dict): - raise ValueError("unexpected key at line %d" % - self.parser.CurrentLineNumber) - self.current_key = self.get_data() - - def begin_array(self, attrs): - a = [] - self.add_object(a) - self.stack.append(a) - - def end_array(self): - self.stack.pop() - - def end_true(self): - self.add_object(True) - - def end_false(self): - self.add_object(False) - - def end_integer(self): - raw = self.get_data() - if raw.startswith('0x') or raw.startswith('0X'): - self.add_object(int(raw, 16)) - else: - self.add_object(int(raw)) - - def end_real(self): - self.add_object(float(self.get_data())) - - def end_string(self): - self.add_object(self.get_data()) - - def end_data(self): - self.add_object(_decode_base64(self.get_data())) - - def end_date(self): - self.add_object(_date_from_string(self.get_data(), - aware_datetime=self._aware_datetime)) - - -class _DumbXMLWriter: - def __init__(self, file, indent_level=0, indent="\t"): - self.file = file - self.stack = [] - self._indent_level = indent_level - self.indent = indent - - def begin_element(self, element): - self.stack.append(element) - self.writeln("<%s>" % element) - self._indent_level += 1 - - def end_element(self, element): - assert self._indent_level > 0 - assert self.stack.pop() == element - self._indent_level -= 1 - self.writeln("</%s>" % element) - - def simple_element(self, element, value=None): - if value is not None: - value = _escape(value) - self.writeln("<%s>%s</%s>" % (element, value, element)) - - else: - self.writeln("<%s/>" % element) - - def writeln(self, line): - if line: - # plist has fixed encoding of utf-8 - - # XXX: is this test needed? - if isinstance(line, str): - line = line.encode('utf-8') - self.file.write(self._indent_level * self.indent) - self.file.write(line) - self.file.write(b'\n') - - -class _PlistWriter(_DumbXMLWriter): - def __init__( - self, file, indent_level=0, indent=b"\t", writeHeader=1, - sort_keys=True, skipkeys=False, aware_datetime=False): - - if writeHeader: - file.write(PLISTHEADER) - _DumbXMLWriter.__init__(self, file, indent_level, indent) - self._sort_keys = sort_keys - self._skipkeys = skipkeys - self._aware_datetime = aware_datetime - - def write(self, value): - self.writeln("<plist version=\"1.0\">") - self.write_value(value) - self.writeln("</plist>") - - def write_value(self, value): - if isinstance(value, str): - self.simple_element("string", value) - - elif value is True: - self.simple_element("true") - - elif value is False: - self.simple_element("false") - - elif isinstance(value, int): - if -1 << 63 <= value < 1 << 64: - self.simple_element("integer", "%d" % value) - else: - raise OverflowError(value) - - elif isinstance(value, float): - self.simple_element("real", repr(value)) - - elif isinstance(value, dict): - self.write_dict(value) - - elif isinstance(value, (bytes, bytearray)): - self.write_bytes(value) - - elif isinstance(value, datetime.datetime): - self.simple_element("date", - _date_to_string(value, self._aware_datetime)) - - elif isinstance(value, (tuple, list)): - self.write_array(value) - - else: - raise TypeError("unsupported type: %s" % type(value)) - - def write_bytes(self, data): - self.begin_element("data") - self._indent_level -= 1 - maxlinelength = max( - 16, - 76 - len((self.indent * self._indent_level).expandtabs())) - - for line in _encode_base64(data, maxlinelength).split(b"\n"): - if line: - self.writeln(line) - self._indent_level += 1 - self.end_element("data") - - def write_dict(self, d): - if d: - self.begin_element("dict") - if self._sort_keys: - items = sorted(d.items()) - else: - items = d.items() - - for key, value in items: - if not isinstance(key, str): - if self._skipkeys: - continue - raise TypeError("keys must be strings") - self.simple_element("key", key) - self.write_value(value) - self.end_element("dict") - - else: - self.simple_element("dict") - - def write_array(self, array): - if array: - self.begin_element("array") - for value in array: - self.write_value(value) - self.end_element("array") - - else: - self.simple_element("array") - - -def _is_fmt_xml(header): - prefixes = (b'<?xml', b'<plist') - - for pfx in prefixes: - if header.startswith(pfx): - return True - - # Also check for alternative XML encodings, this is slightly - # overkill because the Apple tools (and plistlib) will not - # generate files with these encodings. - for bom, encoding in ( - (codecs.BOM_UTF8, "utf-8"), - (codecs.BOM_UTF16_BE, "utf-16-be"), - (codecs.BOM_UTF16_LE, "utf-16-le"), - # expat does not support utf-32 - #(codecs.BOM_UTF32_BE, "utf-32-be"), - #(codecs.BOM_UTF32_LE, "utf-32-le"), - ): - if not header.startswith(bom): - continue - - for start in prefixes: - prefix = bom + start.decode('ascii').encode(encoding) - if header[:len(prefix)] == prefix: - return True - - return False - -# -# Binary Plist -# - - -class InvalidFileException (ValueError): - def __init__(self, message="Invalid file"): - ValueError.__init__(self, message) - -_BINARY_FORMAT = {1: 'B', 2: 'H', 4: 'L', 8: 'Q'} - -_undefined = object() - -class _BinaryPlistParser: - """ - Read or write a binary plist file, following the description of the binary - format. Raise InvalidFileException in case of error, otherwise return the - root object. - - see also: http://opensource.apple.com/source/CF/CF-744.18/CFBinaryPList.c - """ - def __init__(self, dict_type, aware_datetime=False): - self._dict_type = dict_type - self._aware_datime = aware_datetime - - def parse(self, fp): - try: - # The basic file format: - # HEADER - # object... - # refid->offset... - # TRAILER - self._fp = fp - self._fp.seek(-32, os.SEEK_END) - trailer = self._fp.read(32) - if len(trailer) != 32: - raise InvalidFileException() - ( - offset_size, self._ref_size, num_objects, top_object, - offset_table_offset - ) = struct.unpack('>6xBBQQQ', trailer) - self._fp.seek(offset_table_offset) - self._object_offsets = self._read_ints(num_objects, offset_size) - self._objects = [_undefined] * num_objects - return self._read_object(top_object) - - except (OSError, IndexError, struct.error, OverflowError, - ValueError): - raise InvalidFileException() - - def _get_size(self, tokenL): - """ return the size of the next object.""" - if tokenL == 0xF: - m = self._fp.read(1)[0] & 0x3 - s = 1 << m - f = '>' + _BINARY_FORMAT[s] - return struct.unpack(f, self._fp.read(s))[0] - - return tokenL - - def _read(self, size): - cursize = min(size, _MIN_READ_BUF_SIZE) - data = self._fp.read(cursize) - while True: - if len(data) != cursize: - raise InvalidFileException - if cursize == size: - return data - delta = min(cursize, size - cursize) - data += self._fp.read(delta) - cursize += delta - - def _read_ints(self, n, size): - data = self._read(size * n) - if size in _BINARY_FORMAT: - return struct.unpack(f'>{n}{_BINARY_FORMAT[size]}', data) - else: - if not size: - raise InvalidFileException() - return tuple(int.from_bytes(data[i: i + size], 'big') - for i in range(0, size * n, size)) - - def _read_refs(self, n): - return self._read_ints(n, self._ref_size) - - def _read_object(self, ref): - """ - read the object by reference. - - May recursively read sub-objects (content of an array/dict/set) - """ - result = self._objects[ref] - if result is not _undefined: - return result - - offset = self._object_offsets[ref] - self._fp.seek(offset) - token = self._fp.read(1)[0] - tokenH, tokenL = token & 0xF0, token & 0x0F - - if token == 0x00: - result = None - - elif token == 0x08: - result = False - - elif token == 0x09: - result = True - - # The referenced source code also mentions URL (0x0c, 0x0d) and - # UUID (0x0e), but neither can be generated using the Cocoa libraries. - - elif token == 0x0f: - result = b'' - - elif tokenH == 0x10: # int - result = int.from_bytes(self._fp.read(1 << tokenL), - 'big', signed=tokenL >= 3) - - elif token == 0x22: # real - result = struct.unpack('>f', self._fp.read(4))[0] - - elif token == 0x23: # real - result = struct.unpack('>d', self._fp.read(8))[0] - - elif token == 0x33: # date - f = struct.unpack('>d', self._fp.read(8))[0] - # timestamp 0 of binary plists corresponds to 1/1/2001 - # (year of Mac OS X 10.0), instead of 1/1/1970. - if self._aware_datime: - epoch = datetime.datetime(2001, 1, 1, tzinfo=datetime.UTC) - else: - epoch = datetime.datetime(2001, 1, 1) - result = epoch + datetime.timedelta(seconds=f) - - elif tokenH == 0x40: # data - s = self._get_size(tokenL) - result = self._read(s) - - elif tokenH == 0x50: # ascii string - s = self._get_size(tokenL) - data = self._read(s) - result = data.decode('ascii') - - elif tokenH == 0x60: # unicode string - s = self._get_size(tokenL) * 2 - data = self._read(s) - result = data.decode('utf-16be') - - elif tokenH == 0x80: # UID - # used by Key-Archiver plist files - result = UID(int.from_bytes(self._fp.read(1 + tokenL), 'big')) - - elif tokenH == 0xA0: # array - s = self._get_size(tokenL) - obj_refs = self._read_refs(s) - result = [] - self._objects[ref] = result - for x in obj_refs: - result.append(self._read_object(x)) - - # tokenH == 0xB0 is documented as 'ordset', but is not actually - # implemented in the Apple reference code. - - # tokenH == 0xC0 is documented as 'set', but sets cannot be used in - # plists. - - elif tokenH == 0xD0: # dict - s = self._get_size(tokenL) - key_refs = self._read_refs(s) - obj_refs = self._read_refs(s) - result = self._dict_type() - self._objects[ref] = result - try: - for k, o in zip(key_refs, obj_refs): - result[self._read_object(k)] = self._read_object(o) - except TypeError: - raise InvalidFileException() - else: - raise InvalidFileException() - - self._objects[ref] = result - return result - -def _count_to_size(count): - if count < 1 << 8: - return 1 - - elif count < 1 << 16: - return 2 - - elif count < 1 << 32: - return 4 - - else: - return 8 - -_scalars = (str, int, float, datetime.datetime, bytes) - -class _BinaryPlistWriter (object): - def __init__(self, fp, sort_keys, skipkeys, aware_datetime=False): - self._fp = fp - self._sort_keys = sort_keys - self._skipkeys = skipkeys - self._aware_datetime = aware_datetime - - def write(self, value): - - # Flattened object list: - self._objlist = [] - - # Mappings from object->objectid - # First dict has (type(object), object) as the key, - # second dict is used when object is not hashable and - # has id(object) as the key. - self._objtable = {} - self._objidtable = {} - - # Create list of all objects in the plist - self._flatten(value) - - # Size of object references in serialized containers - # depends on the number of objects in the plist. - num_objects = len(self._objlist) - self._object_offsets = [0]*num_objects - self._ref_size = _count_to_size(num_objects) - - self._ref_format = _BINARY_FORMAT[self._ref_size] - - # Write file header - self._fp.write(b'bplist00') - - # Write object list - for obj in self._objlist: - self._write_object(obj) - - # Write refnum->object offset table - top_object = self._getrefnum(value) - offset_table_offset = self._fp.tell() - offset_size = _count_to_size(offset_table_offset) - offset_format = '>' + _BINARY_FORMAT[offset_size] * num_objects - self._fp.write(struct.pack(offset_format, *self._object_offsets)) - - # Write trailer - sort_version = 0 - trailer = ( - sort_version, offset_size, self._ref_size, num_objects, - top_object, offset_table_offset - ) - self._fp.write(struct.pack('>5xBBBQQQ', *trailer)) - - def _flatten(self, value): - # First check if the object is in the object table, not used for - # containers to ensure that two subcontainers with the same contents - # will be serialized as distinct values. - if isinstance(value, _scalars): - if (type(value), value) in self._objtable: - return - - elif id(value) in self._objidtable: - return - - # Add to objectreference map - refnum = len(self._objlist) - self._objlist.append(value) - if isinstance(value, _scalars): - self._objtable[(type(value), value)] = refnum - else: - self._objidtable[id(value)] = refnum - - # And finally recurse into containers - if isinstance(value, dict): - keys = [] - values = [] - items = value.items() - if self._sort_keys: - items = sorted(items) - - for k, v in items: - if not isinstance(k, str): - if self._skipkeys: - continue - raise TypeError("keys must be strings") - keys.append(k) - values.append(v) - - for o in itertools.chain(keys, values): - self._flatten(o) - - elif isinstance(value, (list, tuple)): - for o in value: - self._flatten(o) - - def _getrefnum(self, value): - if isinstance(value, _scalars): - return self._objtable[(type(value), value)] - else: - return self._objidtable[id(value)] - - def _write_size(self, token, size): - if size < 15: - self._fp.write(struct.pack('>B', token | size)) - - elif size < 1 << 8: - self._fp.write(struct.pack('>BBB', token | 0xF, 0x10, size)) - - elif size < 1 << 16: - self._fp.write(struct.pack('>BBH', token | 0xF, 0x11, size)) - - elif size < 1 << 32: - self._fp.write(struct.pack('>BBL', token | 0xF, 0x12, size)) - - else: - self._fp.write(struct.pack('>BBQ', token | 0xF, 0x13, size)) - - def _write_object(self, value): - ref = self._getrefnum(value) - self._object_offsets[ref] = self._fp.tell() - if value is None: - self._fp.write(b'\x00') - - elif value is False: - self._fp.write(b'\x08') - - elif value is True: - self._fp.write(b'\x09') - - elif isinstance(value, int): - if value < 0: - try: - self._fp.write(struct.pack('>Bq', 0x13, value)) - except struct.error: - raise OverflowError(value) from None - elif value < 1 << 8: - self._fp.write(struct.pack('>BB', 0x10, value)) - elif value < 1 << 16: - self._fp.write(struct.pack('>BH', 0x11, value)) - elif value < 1 << 32: - self._fp.write(struct.pack('>BL', 0x12, value)) - elif value < 1 << 63: - self._fp.write(struct.pack('>BQ', 0x13, value)) - elif value < 1 << 64: - self._fp.write(b'\x14' + value.to_bytes(16, 'big', signed=True)) - else: - raise OverflowError(value) - - elif isinstance(value, float): - self._fp.write(struct.pack('>Bd', 0x23, value)) - - elif isinstance(value, datetime.datetime): - if self._aware_datetime: - dt = value.astimezone(datetime.UTC) - offset = dt - datetime.datetime(2001, 1, 1, tzinfo=datetime.UTC) - f = offset.total_seconds() - else: - f = (value - datetime.datetime(2001, 1, 1)).total_seconds() - self._fp.write(struct.pack('>Bd', 0x33, f)) - - elif isinstance(value, (bytes, bytearray)): - self._write_size(0x40, len(value)) - self._fp.write(value) - - elif isinstance(value, str): - try: - t = value.encode('ascii') - self._write_size(0x50, len(value)) - except UnicodeEncodeError: - t = value.encode('utf-16be') - self._write_size(0x60, len(t) // 2) - - self._fp.write(t) - - elif isinstance(value, UID): - if value.data < 0: - raise ValueError("UIDs must be positive") - elif value.data < 1 << 8: - self._fp.write(struct.pack('>BB', 0x80, value)) - elif value.data < 1 << 16: - self._fp.write(struct.pack('>BH', 0x81, value)) - elif value.data < 1 << 32: - self._fp.write(struct.pack('>BL', 0x83, value)) - elif value.data < 1 << 64: - self._fp.write(struct.pack('>BQ', 0x87, value)) - else: - raise OverflowError(value) - - elif isinstance(value, (list, tuple)): - refs = [self._getrefnum(o) for o in value] - s = len(refs) - self._write_size(0xA0, s) - self._fp.write(struct.pack('>' + self._ref_format * s, *refs)) - - elif isinstance(value, dict): - keyRefs, valRefs = [], [] - - if self._sort_keys: - rootItems = sorted(value.items()) - else: - rootItems = value.items() - - for k, v in rootItems: - if not isinstance(k, str): - if self._skipkeys: - continue - raise TypeError("keys must be strings") - keyRefs.append(self._getrefnum(k)) - valRefs.append(self._getrefnum(v)) - - s = len(keyRefs) - self._write_size(0xD0, s) - self._fp.write(struct.pack('>' + self._ref_format * s, *keyRefs)) - self._fp.write(struct.pack('>' + self._ref_format * s, *valRefs)) - - else: - raise TypeError(value) - - -def _is_fmt_binary(header): - return header[:8] == b'bplist00' - - -# -# Generic bits -# - -_FORMATS={ - FMT_XML: dict( - detect=_is_fmt_xml, - parser=_PlistParser, - writer=_PlistWriter, - ), - FMT_BINARY: dict( - detect=_is_fmt_binary, - parser=_BinaryPlistParser, - writer=_BinaryPlistWriter, - ) -} - - -def load(fp, *, fmt=None, dict_type=dict, aware_datetime=False): - """Read a .plist file. 'fp' should be a readable and binary file object. - Return the unpacked root object (which usually is a dictionary). - """ - if fmt is None: - header = fp.read(32) - fp.seek(0) - for info in _FORMATS.values(): - if info['detect'](header): - P = info['parser'] - break - - else: - raise InvalidFileException() - - else: - P = _FORMATS[fmt]['parser'] - - p = P(dict_type=dict_type, aware_datetime=aware_datetime) - return p.parse(fp) - - -def loads(value, *, fmt=None, dict_type=dict, aware_datetime=False): - """Read a .plist file from a bytes object. - Return the unpacked root object (which usually is a dictionary). - """ - if isinstance(value, str): - if fmt == FMT_BINARY: - raise TypeError("value must be bytes-like object when fmt is " - "FMT_BINARY") - value = value.encode() - fp = BytesIO(value) - return load(fp, fmt=fmt, dict_type=dict_type, aware_datetime=aware_datetime) - - -def dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, - aware_datetime=False): - """Write 'value' to a .plist file. 'fp' should be a writable, - binary file object. - """ - if fmt not in _FORMATS: - raise ValueError("Unsupported format: %r"%(fmt,)) - - writer = _FORMATS[fmt]["writer"](fp, sort_keys=sort_keys, skipkeys=skipkeys, - aware_datetime=aware_datetime) - writer.write(value) - - -def dumps(value, *, fmt=FMT_XML, skipkeys=False, sort_keys=True, - aware_datetime=False): - """Return a bytes object with the contents for a .plist file. - """ - fp = BytesIO() - dump(value, fp, fmt=fmt, skipkeys=skipkeys, sort_keys=sort_keys, - aware_datetime=aware_datetime) - return fp.getvalue() diff --git a/Python314_4_x86_Template/Lib/poplib.py b/Python314_4_x86_Template/Lib/poplib.py deleted file mode 100644 index 4469bff44..000000000 --- a/Python314_4_x86_Template/Lib/poplib.py +++ /dev/null @@ -1,477 +0,0 @@ -"""A POP3 client class. - -Based on the J. Myers POP3 draft, Jan. 96 -""" - -# Author: David Ascher <david_ascher@brown.edu> -# [heavily stealing from nntplib.py] -# Updated: Piers Lauder <piers@cs.su.oz.au> [Jul '97] -# String method conversion and test jig improvements by ESR, February 2001. -# Added the POP3_SSL class. Methods loosely based on IMAP_SSL. Hector Urtubia <urtubia@mrbook.org> Aug 2003 - -# Example (see the test function at the end of this file) - -# Imports - -import errno -import re -import socket -import sys - -try: - import ssl - HAVE_SSL = True -except ImportError: - HAVE_SSL = False - -__all__ = ["POP3","error_proto"] - -# Exception raised when an error or invalid response is received: - -class error_proto(Exception): pass - -# Standard Port -POP3_PORT = 110 - -# POP SSL PORT -POP3_SSL_PORT = 995 - -# Line terminators (we always output CRLF, but accept any of CRLF, LFCR, LF) -CR = b'\r' -LF = b'\n' -CRLF = CR+LF - -# maximal line length when calling readline(). This is to prevent -# reading arbitrary length lines. RFC 1939 limits POP3 line length to -# 512 characters, including CRLF. We have selected 2048 just to be on -# the safe side. -_MAXLINE = 2048 - - -class POP3: - - """This class supports both the minimal and optional command sets. - Arguments can be strings or integers (where appropriate) - (e.g.: retr(1) and retr('1') both work equally well. - - Minimal Command Set: - USER name user(name) - PASS string pass_(string) - STAT stat() - LIST [msg] list(msg = None) - RETR msg retr(msg) - DELE msg dele(msg) - NOOP noop() - RSET rset() - QUIT quit() - - Optional Commands (some servers support these): - RPOP name rpop(name) - APOP name digest apop(name, digest) - TOP msg n top(msg, n) - UIDL [msg] uidl(msg = None) - CAPA capa() - STLS stls() - UTF8 utf8() - - Raises one exception: 'error_proto'. - - Instantiate with: - POP3(hostname, port=110) - - NB: the POP protocol locks the mailbox from user - authorization until QUIT, so be sure to get in, suck - the messages, and quit, each time you access the - mailbox. - - POP is a line-based protocol, which means large mail - messages consume lots of python cycles reading them - line-by-line. - - If it's available on your mail server, use IMAP4 - instead, it doesn't suffer from the two problems - above. - """ - - encoding = 'UTF-8' - - def __init__(self, host, port=POP3_PORT, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT): - self.host = host - self.port = port - self._tls_established = False - sys.audit("poplib.connect", self, host, port) - self.sock = self._create_socket(timeout) - self.file = self.sock.makefile('rb') - self._debugging = 0 - self.welcome = self._getresp() - - def _create_socket(self, timeout): - if timeout is not None and not timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') - return socket.create_connection((self.host, self.port), timeout) - - def _putline(self, line): - if self._debugging > 1: print('*put*', repr(line)) - sys.audit("poplib.putline", self, line) - self.sock.sendall(line + CRLF) - - - # Internal: send one command to the server (through _putline()) - - def _putcmd(self, line): - if self._debugging: print('*cmd*', repr(line)) - line = bytes(line, self.encoding) - self._putline(line) - - - # Internal: return one line from the server, stripping CRLF. - # This is where all the CPU time of this module is consumed. - # Raise error_proto('-ERR EOF') if the connection is closed. - - def _getline(self): - line = self.file.readline(_MAXLINE + 1) - if len(line) > _MAXLINE: - raise error_proto('line too long') - - if self._debugging > 1: print('*get*', repr(line)) - if not line: raise error_proto('-ERR EOF') - octets = len(line) - # server can send any combination of CR & LF - # however, 'readline()' returns lines ending in LF - # so only possibilities are ...LF, ...CRLF, CR...LF - if line[-2:] == CRLF: - return line[:-2], octets - if line[:1] == CR: - return line[1:-1], octets - return line[:-1], octets - - - # Internal: get a response from the server. - # Raise 'error_proto' if the response doesn't start with '+'. - - def _getresp(self): - resp, o = self._getline() - if self._debugging > 1: print('*resp*', repr(resp)) - if not resp.startswith(b'+'): - raise error_proto(resp) - return resp - - - # Internal: get a response plus following text from the server. - - def _getlongresp(self): - resp = self._getresp() - list = []; octets = 0 - line, o = self._getline() - while line != b'.': - if line.startswith(b'..'): - o = o-1 - line = line[1:] - octets = octets + o - list.append(line) - line, o = self._getline() - return resp, list, octets - - - # Internal: send a command and get the response - - def _shortcmd(self, line): - self._putcmd(line) - return self._getresp() - - - # Internal: send a command and get the response plus following text - - def _longcmd(self, line): - self._putcmd(line) - return self._getlongresp() - - - # These can be useful: - - def getwelcome(self): - return self.welcome - - - def set_debuglevel(self, level): - self._debugging = level - - - # Here are all the POP commands: - - def user(self, user): - """Send user name, return response - - (should indicate password required). - """ - return self._shortcmd('USER %s' % user) - - - def pass_(self, pswd): - """Send password, return response - - (response includes message count, mailbox size). - - NB: mailbox is locked by server from here to 'quit()' - """ - return self._shortcmd('PASS %s' % pswd) - - - def stat(self): - """Get mailbox status. - - Result is tuple of 2 ints (message count, mailbox size) - """ - retval = self._shortcmd('STAT') - rets = retval.split() - if self._debugging: print('*stat*', repr(rets)) - - # Check if the response has enough elements - # RFC 1939 requires at least 3 elements (+OK, message count, mailbox size) - # but allows additional data after the required fields - if len(rets) < 3: - raise error_proto("Invalid STAT response format") - - try: - numMessages = int(rets[1]) - sizeMessages = int(rets[2]) - except ValueError: - raise error_proto("Invalid STAT response data: non-numeric values") - - return (numMessages, sizeMessages) - - - def list(self, which=None): - """Request listing, return result. - - Result without a message number argument is in form - ['response', ['mesg_num octets', ...], octets]. - - Result when a message number argument is given is a - single response: the "scan listing" for that message. - """ - if which is not None: - return self._shortcmd('LIST %s' % which) - return self._longcmd('LIST') - - - def retr(self, which): - """Retrieve whole message number 'which'. - - Result is in form ['response', ['line', ...], octets]. - """ - return self._longcmd('RETR %s' % which) - - - def dele(self, which): - """Delete message number 'which'. - - Result is 'response'. - """ - return self._shortcmd('DELE %s' % which) - - - def noop(self): - """Does nothing. - - One supposes the response indicates the server is alive. - """ - return self._shortcmd('NOOP') - - - def rset(self): - """Unmark all messages marked for deletion.""" - return self._shortcmd('RSET') - - - def quit(self): - """Signoff: commit changes on server, unlock mailbox, close connection.""" - resp = self._shortcmd('QUIT') - self.close() - return resp - - def close(self): - """Close the connection without assuming anything about it.""" - try: - file = self.file - self.file = None - if file is not None: - file.close() - finally: - sock = self.sock - self.sock = None - if sock is not None: - try: - sock.shutdown(socket.SHUT_RDWR) - except OSError as exc: - # The server might already have closed the connection. - # On Windows, this may result in WSAEINVAL (error 10022): - # An invalid operation was attempted. - if (exc.errno != errno.ENOTCONN - and getattr(exc, 'winerror', 0) != 10022): - raise - finally: - sock.close() - - #__del__ = quit - - - # optional commands: - - def rpop(self, user): - """Send RPOP command to access the mailbox with an alternate user.""" - return self._shortcmd('RPOP %s' % user) - - - timestamp = re.compile(br'\+OK.[^<]*(<.*>)') - - def apop(self, user, password): - """Authorisation - - - only possible if server has supplied a timestamp in initial greeting. - - Args: - user - mailbox user; - password - mailbox password. - - NB: mailbox is locked by server from here to 'quit()' - """ - secret = bytes(password, self.encoding) - m = self.timestamp.match(self.welcome) - if not m: - raise error_proto('-ERR APOP not supported by server') - import hashlib - digest = m.group(1)+secret - digest = hashlib.md5(digest).hexdigest() - return self._shortcmd('APOP %s %s' % (user, digest)) - - - def top(self, which, howmuch): - """Retrieve message header of message number 'which' - and first 'howmuch' lines of message body. - - Result is in form ['response', ['line', ...], octets]. - """ - return self._longcmd('TOP %s %s' % (which, howmuch)) - - - def uidl(self, which=None): - """Return message digest (unique id) list. - - If 'which', result contains unique id for that message - in the form 'response mesgnum uid', otherwise result is - the list ['response', ['mesgnum uid', ...], octets] - """ - if which is not None: - return self._shortcmd('UIDL %s' % which) - return self._longcmd('UIDL') - - - def utf8(self): - """Try to enter UTF-8 mode (see RFC 6856). Returns server response. - """ - return self._shortcmd('UTF8') - - - def capa(self): - """Return server capabilities (RFC 2449) as a dictionary - >>> c=poplib.POP3('localhost') - >>> c.capa() - {'IMPLEMENTATION': ['Cyrus', 'POP3', 'server', 'v2.2.12'], - 'TOP': [], 'LOGIN-DELAY': ['0'], 'AUTH-RESP-CODE': [], - 'EXPIRE': ['NEVER'], 'USER': [], 'STLS': [], 'PIPELINING': [], - 'UIDL': [], 'RESP-CODES': []} - >>> - - Really, according to RFC 2449, the cyrus folks should avoid - having the implementation split into multiple arguments... - """ - def _parsecap(line): - lst = line.decode('ascii').split() - return lst[0], lst[1:] - - caps = {} - try: - resp = self._longcmd('CAPA') - rawcaps = resp[1] - for capline in rawcaps: - capnm, capargs = _parsecap(capline) - caps[capnm] = capargs - except error_proto: - raise error_proto('-ERR CAPA not supported by server') - return caps - - - def stls(self, context=None): - """Start a TLS session on the active connection as specified in RFC 2595. - - context - a ssl.SSLContext - """ - if not HAVE_SSL: - raise error_proto('-ERR TLS support missing') - if self._tls_established: - raise error_proto('-ERR TLS session already established') - caps = self.capa() - if not 'STLS' in caps: - raise error_proto('-ERR STLS not supported by server') - if context is None: - context = ssl._create_stdlib_context() - resp = self._shortcmd('STLS') - self.sock = context.wrap_socket(self.sock, - server_hostname=self.host) - self.file = self.sock.makefile('rb') - self._tls_established = True - return resp - - -if HAVE_SSL: - - class POP3_SSL(POP3): - """POP3 client class over SSL connection - - Instantiate with: POP3_SSL(hostname, port=995, context=None) - - hostname - the hostname of the pop3 over ssl server - port - port number - context - a ssl.SSLContext - - See the methods of the parent class POP3 for more documentation. - """ - - def __init__(self, host, port=POP3_SSL_PORT, - *, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, context=None): - if context is None: - context = ssl._create_stdlib_context() - self.context = context - POP3.__init__(self, host, port, timeout) - - def _create_socket(self, timeout): - sock = POP3._create_socket(self, timeout) - sock = self.context.wrap_socket(sock, - server_hostname=self.host) - return sock - - def stls(self, context=None): - """The method unconditionally raises an exception since the - STLS command doesn't make any sense on an already established - SSL/TLS session. - """ - raise error_proto('-ERR TLS session already established') - - __all__.append("POP3_SSL") - -if __name__ == "__main__": - a = POP3(sys.argv[1]) - print(a.getwelcome()) - a.user(sys.argv[2]) - a.pass_(sys.argv[3]) - a.list() - (numMsgs, totalSize) = a.stat() - for i in range(1, numMsgs + 1): - (header, msg, octets) = a.retr(i) - print("Message %d:" % i) - for line in msg: - print(' ' + line) - print('-----------------------') - a.quit() diff --git a/Python314_4_x86_Template/Lib/posixpath.py b/Python314_4_x86_Template/Lib/posixpath.py deleted file mode 100644 index ad86cc06c..000000000 --- a/Python314_4_x86_Template/Lib/posixpath.py +++ /dev/null @@ -1,592 +0,0 @@ -"""Common operations on Posix pathnames. - -Instead of importing this module directly, import os and refer to -this module as os.path. The "os.path" name is an alias for this -module on Posix systems; on other systems (e.g. Windows), -os.path provides the same operations in a manner specific to that -platform, and is an alias to another module (e.g. ntpath). - -Some of this can actually be useful on non-Posix systems too, e.g. -for manipulation of the pathname component of URLs. -""" - -# Strings representing various path-related bits and pieces. -# These are primarily for export; internally, they are hardcoded. -# Should be set before imports for resolving cyclic dependency. -curdir = '.' -pardir = '..' -extsep = '.' -sep = '/' -pathsep = ':' -defpath = '/bin:/usr/bin' -altsep = None -devnull = '/dev/null' - -import errno -import os -import sys -import stat -import genericpath -from genericpath import * - -__all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext", - "basename","dirname","commonprefix","getsize","getmtime", - "getatime","getctime","islink","exists","lexists","isdir","isfile", - "ismount", "expanduser","expandvars","normpath","abspath", - "samefile","sameopenfile","samestat", - "curdir","pardir","sep","pathsep","defpath","altsep","extsep", - "devnull","realpath","supports_unicode_filenames","relpath", - "commonpath", "isjunction","isdevdrive","ALLOW_MISSING"] - - -def _get_sep(path): - if isinstance(path, bytes): - return b'/' - else: - return '/' - -# Normalize the case of a pathname. Trivial in Posix, string.lower on Mac. -# On MS-DOS this may also turn slashes into backslashes; however, other -# normalizations (such as optimizing '../' away) are not allowed -# (another function should be defined to do that). - -def normcase(s): - """Normalize case of pathname. Has no effect under Posix""" - return os.fspath(s) - - -# Return whether a path is absolute. -# Trivial in Posix, harder on the Mac or MS-DOS. - -def isabs(s): - """Test whether a path is absolute""" - s = os.fspath(s) - sep = _get_sep(s) - return s.startswith(sep) - - -# Join pathnames. -# Ignore the previous parts if a part is absolute. -# Insert a '/' unless the first part is empty or already ends in '/'. - -def join(a, *p): - """Join two or more pathname components, inserting '/' as needed. - If any component is an absolute path, all previous path components - will be discarded. An empty last part will result in a path that - ends with a separator.""" - a = os.fspath(a) - sep = _get_sep(a) - path = a - try: - for b in p: - b = os.fspath(b) - if b.startswith(sep) or not path: - path = b - elif path.endswith(sep): - path += b - else: - path += sep + b - except (TypeError, AttributeError, BytesWarning): - genericpath._check_arg_types('join', a, *p) - raise - return path - - -# Split a path in head (everything up to the last '/') and tail (the -# rest). If the path ends in '/', tail will be empty. If there is no -# '/' in the path, head will be empty. -# Trailing '/'es are stripped from head unless it is the root. - -def split(p): - """Split a pathname. Returns tuple "(head, tail)" where "tail" is - everything after the final slash. Either part may be empty.""" - p = os.fspath(p) - sep = _get_sep(p) - i = p.rfind(sep) + 1 - head, tail = p[:i], p[i:] - if head and head != sep*len(head): - head = head.rstrip(sep) - return head, tail - - -# Split a path in root and extension. -# The extension is everything starting at the last dot in the last -# pathname component; the root is everything before that. -# It is always true that root + ext == p. - -def splitext(p): - p = os.fspath(p) - if isinstance(p, bytes): - sep = b'/' - extsep = b'.' - else: - sep = '/' - extsep = '.' - return genericpath._splitext(p, sep, None, extsep) -splitext.__doc__ = genericpath._splitext.__doc__ - -# Split a pathname into a drive specification and the rest of the -# path. Useful on DOS/Windows/NT; on Unix, the drive is always empty. - -def splitdrive(p): - """Split a pathname into drive and path. On Posix, drive is always - empty.""" - p = os.fspath(p) - return p[:0], p - - -try: - from posix import _path_splitroot_ex as splitroot -except ImportError: - def splitroot(p): - """Split a pathname into drive, root and tail. - - The tail contains anything after the root.""" - p = os.fspath(p) - if isinstance(p, bytes): - sep = b'/' - empty = b'' - else: - sep = '/' - empty = '' - if p[:1] != sep: - # Relative path, e.g.: 'foo' - return empty, empty, p - elif p[1:2] != sep or p[2:3] == sep: - # Absolute path, e.g.: '/foo', '///foo', '////foo', etc. - return empty, sep, p[1:] - else: - # Precisely two leading slashes, e.g.: '//foo'. Implementation defined per POSIX, see - # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13 - return empty, p[:2], p[2:] - - -# Return the tail (basename) part of a path, same as split(path)[1]. - -def basename(p): - """Returns the final component of a pathname""" - p = os.fspath(p) - sep = _get_sep(p) - i = p.rfind(sep) + 1 - return p[i:] - - -# Return the head (dirname) part of a path, same as split(path)[0]. - -def dirname(p): - """Returns the directory component of a pathname""" - p = os.fspath(p) - sep = _get_sep(p) - i = p.rfind(sep) + 1 - head = p[:i] - if head and head != sep*len(head): - head = head.rstrip(sep) - return head - - -# Is a path a mount point? -# (Does this work for all UNIXes? Is it even guaranteed to work by Posix?) - -def ismount(path): - """Test whether a path is a mount point""" - try: - s1 = os.lstat(path) - except (OSError, ValueError): - # It doesn't exist -- so not a mount point. :-) - return False - else: - # A symlink can never be a mount point - if stat.S_ISLNK(s1.st_mode): - return False - - path = os.fspath(path) - if isinstance(path, bytes): - parent = join(path, b'..') - else: - parent = join(path, '..') - try: - s2 = os.lstat(parent) - except OSError: - parent = realpath(parent) - try: - s2 = os.lstat(parent) - except OSError: - return False - - # path/.. on a different device as path or the same i-node as path - return s1.st_dev != s2.st_dev or s1.st_ino == s2.st_ino - - -# Expand paths beginning with '~' or '~user'. -# '~' means $HOME; '~user' means that user's home directory. -# If the path doesn't begin with '~', or if the user or $HOME is unknown, -# the path is returned unchanged (leaving error reporting to whatever -# function is called with the expanded path as argument). -# See also module 'glob' for expansion of *, ? and [...] in pathnames. -# (A function should also be defined to do full *sh-style environment -# variable expansion.) - -def expanduser(path): - """Expand ~ and ~user constructions. If user or $HOME is unknown, - do nothing.""" - path = os.fspath(path) - if isinstance(path, bytes): - tilde = b'~' - else: - tilde = '~' - if not path.startswith(tilde): - return path - sep = _get_sep(path) - i = path.find(sep, 1) - if i < 0: - i = len(path) - if i == 1: - if 'HOME' not in os.environ: - try: - import pwd - except ImportError: - # pwd module unavailable, return path unchanged - return path - try: - userhome = pwd.getpwuid(os.getuid()).pw_dir - except KeyError: - # bpo-10496: if the current user identifier doesn't exist in the - # password database, return the path unchanged - return path - else: - userhome = os.environ['HOME'] - else: - try: - import pwd - except ImportError: - # pwd module unavailable, return path unchanged - return path - name = path[1:i] - if isinstance(name, bytes): - name = os.fsdecode(name) - try: - pwent = pwd.getpwnam(name) - except KeyError: - # bpo-10496: if the user name from the path doesn't exist in the - # password database, return the path unchanged - return path - userhome = pwent.pw_dir - # if no user home, return the path unchanged on VxWorks - if userhome is None and sys.platform == "vxworks": - return path - if isinstance(path, bytes): - userhome = os.fsencode(userhome) - userhome = userhome.rstrip(sep) - return (userhome + path[i:]) or sep - - -# Expand paths containing shell variable substitutions. -# This expands the forms $variable and ${variable} only. -# Non-existent variables are left unchanged. - -_varpattern = r'\$(\w+|\{[^}]*\}?)' -_varsub = None -_varsubb = None - -def expandvars(path): - """Expand shell variables of form $var and ${var}. Unknown variables - are left unchanged.""" - path = os.fspath(path) - global _varsub, _varsubb - if isinstance(path, bytes): - if b'$' not in path: - return path - if not _varsubb: - import re - _varsubb = re.compile(_varpattern.encode(), re.ASCII).sub - sub = _varsubb - start = b'{' - end = b'}' - environ = getattr(os, 'environb', None) - else: - if '$' not in path: - return path - if not _varsub: - import re - _varsub = re.compile(_varpattern, re.ASCII).sub - sub = _varsub - start = '{' - end = '}' - environ = os.environ - - def repl(m): - name = m[1] - if name.startswith(start): - if not name.endswith(end): - return m[0] - name = name[1:-1] - try: - if environ is None: - value = os.fsencode(os.environ[os.fsdecode(name)]) - else: - value = environ[name] - except KeyError: - return m[0] - else: - return value - - return sub(repl, path) - - -# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B. -# It should be understood that this may change the meaning of the path -# if it contains symbolic links! - -try: - from posix import _path_normpath as normpath - -except ImportError: - def normpath(path): - """Normalize path, eliminating double slashes, etc.""" - path = os.fspath(path) - if isinstance(path, bytes): - sep = b'/' - dot = b'.' - dotdot = b'..' - else: - sep = '/' - dot = '.' - dotdot = '..' - if not path: - return dot - _, initial_slashes, path = splitroot(path) - comps = path.split(sep) - new_comps = [] - for comp in comps: - if not comp or comp == dot: - continue - if (comp != dotdot or (not initial_slashes and not new_comps) or - (new_comps and new_comps[-1] == dotdot)): - new_comps.append(comp) - elif new_comps: - new_comps.pop() - comps = new_comps - path = initial_slashes + sep.join(comps) - return path or dot - - -def abspath(path): - """Return an absolute path.""" - path = os.fspath(path) - if isinstance(path, bytes): - if not path.startswith(b'/'): - path = join(os.getcwdb(), path) - else: - if not path.startswith('/'): - path = join(os.getcwd(), path) - return normpath(path) - - -# Return a canonical path (i.e. the absolute location of a file on the -# filesystem). - -def realpath(filename, *, strict=False): - """Return the canonical path of the specified filename, eliminating any -symbolic links encountered in the path.""" - filename = os.fspath(filename) - if isinstance(filename, bytes): - sep = b'/' - curdir = b'.' - pardir = b'..' - getcwd = os.getcwdb - else: - sep = '/' - curdir = '.' - pardir = '..' - getcwd = os.getcwd - if strict is ALLOW_MISSING: - ignored_error = FileNotFoundError - strict = True - elif strict: - ignored_error = () - else: - ignored_error = OSError - - lstat = os.lstat - readlink = os.readlink - maxlinks = None - - # The stack of unresolved path parts. When popped, a special value of None - # indicates that a symlink target has been resolved, and that the original - # symlink path can be retrieved by popping again. The [::-1] slice is a - # very fast way of spelling list(reversed(...)). - rest = filename.split(sep)[::-1] - - # Number of unprocessed parts in 'rest'. This can differ from len(rest) - # later, because 'rest' might contain markers for unresolved symlinks. - part_count = len(rest) - - # The resolved path, which is absolute throughout this function. - # Note: getcwd() returns a normalized and symlink-free path. - path = sep if filename.startswith(sep) else getcwd() - - # Mapping from symlink paths to *fully resolved* symlink targets. If a - # symlink is encountered but not yet resolved, the value is None. This is - # used both to detect symlink loops and to speed up repeated traversals of - # the same links. - seen = {} - - # Number of symlinks traversed. When the number of traversals is limited - # by *maxlinks*, this is used instead of *seen* to detect symlink loops. - link_count = 0 - - while part_count: - name = rest.pop() - if name is None: - # resolved symlink target - seen[rest.pop()] = path - continue - part_count -= 1 - if not name or name == curdir: - # current dir - continue - if name == pardir: - # parent dir - path = path[:path.rindex(sep)] or sep - continue - if path == sep: - newpath = path + name - else: - newpath = path + sep + name - try: - st_mode = lstat(newpath).st_mode - if not stat.S_ISLNK(st_mode): - if strict and part_count and not stat.S_ISDIR(st_mode): - raise OSError(errno.ENOTDIR, os.strerror(errno.ENOTDIR), - newpath) - path = newpath - continue - elif maxlinks is not None: - link_count += 1 - if link_count > maxlinks: - if strict: - raise OSError(errno.ELOOP, os.strerror(errno.ELOOP), - newpath) - path = newpath - continue - elif newpath in seen: - # Already seen this path - path = seen[newpath] - if path is not None: - # use cached value - continue - # The symlink is not resolved, so we must have a symlink loop. - if strict: - raise OSError(errno.ELOOP, os.strerror(errno.ELOOP), - newpath) - path = newpath - continue - target = readlink(newpath) - except ignored_error: - pass - else: - # Resolve the symbolic link - if target.startswith(sep): - # Symlink target is absolute; reset resolved path. - path = sep - if maxlinks is None: - # Mark this symlink as seen but not fully resolved. - seen[newpath] = None - # Push the symlink path onto the stack, and signal its specialness - # by also pushing None. When these entries are popped, we'll - # record the fully-resolved symlink target in the 'seen' mapping. - rest.append(newpath) - rest.append(None) - # Push the unresolved symlink target parts onto the stack. - target_parts = target.split(sep)[::-1] - rest.extend(target_parts) - part_count += len(target_parts) - continue - # An error occurred and was ignored. - path = newpath - - return path - - -supports_unicode_filenames = (sys.platform == 'darwin') - -def relpath(path, start=None): - """Return a relative version of a path""" - - path = os.fspath(path) - if not path: - raise ValueError("no path specified") - - if isinstance(path, bytes): - curdir = b'.' - sep = b'/' - pardir = b'..' - else: - curdir = '.' - sep = '/' - pardir = '..' - - if start is None: - start = curdir - else: - start = os.fspath(start) - - try: - start_tail = abspath(start).lstrip(sep) - path_tail = abspath(path).lstrip(sep) - start_list = start_tail.split(sep) if start_tail else [] - path_list = path_tail.split(sep) if path_tail else [] - # Work out how much of the filepath is shared by start and path. - i = len(commonprefix([start_list, path_list])) - - rel_list = [pardir] * (len(start_list)-i) + path_list[i:] - if not rel_list: - return curdir - return sep.join(rel_list) - except (TypeError, AttributeError, BytesWarning, DeprecationWarning): - genericpath._check_arg_types('relpath', path, start) - raise - - -# Return the longest common sub-path of the sequence of paths given as input. -# The paths are not normalized before comparing them (this is the -# responsibility of the caller). Any trailing separator is stripped from the -# returned path. - -def commonpath(paths): - """Given a sequence of path names, returns the longest common sub-path.""" - - paths = tuple(map(os.fspath, paths)) - - if not paths: - raise ValueError('commonpath() arg is an empty sequence') - - if isinstance(paths[0], bytes): - sep = b'/' - curdir = b'.' - else: - sep = '/' - curdir = '.' - - try: - split_paths = [path.split(sep) for path in paths] - - try: - isabs, = {p.startswith(sep) for p in paths} - except ValueError: - raise ValueError("Can't mix absolute and relative paths") from None - - split_paths = [[c for c in s if c and c != curdir] for s in split_paths] - s1 = min(split_paths) - s2 = max(split_paths) - common = s1 - for i, c in enumerate(s1): - if c != s2[i]: - common = s1[:i] - break - - prefix = sep if isabs else sep[:0] - return prefix + sep.join(common) - except (TypeError, AttributeError): - genericpath._check_arg_types('commonpath', *paths) - raise diff --git a/Python314_4_x86_Template/Lib/pprint.py b/Python314_4_x86_Template/Lib/pprint.py deleted file mode 100644 index dc0953cec..000000000 --- a/Python314_4_x86_Template/Lib/pprint.py +++ /dev/null @@ -1,675 +0,0 @@ -# Author: Fred L. Drake, Jr. -# fdrake@acm.org -# -# This is a simple little module I wrote to make life easier. I didn't -# see anything quite like it in the library, though I may have overlooked -# something. I wrote this when I was trying to read some heavily nested -# tuples with fairly non-descriptive content. This is modeled very much -# after Lisp/Scheme - style pretty-printing of lists. If you find it -# useful, thank small children who sleep at night. - -"""Support to pretty-print lists, tuples, & dictionaries recursively. - -Very simple, but useful, especially in debugging data structures. - -Classes -------- - -PrettyPrinter() - Handle pretty-printing operations onto a stream using a configured - set of formatting parameters. - -Functions ---------- - -pformat() - Format a Python object into a pretty-printed representation. - -pprint() - Pretty-print a Python object to a stream [default is sys.stdout]. - -saferepr() - Generate a 'standard' repr()-like value, but protect against recursive - data structures. - -""" - -import collections as _collections -import sys as _sys -import types as _types -from io import StringIO as _StringIO - -__all__ = ["pprint","pformat","isreadable","isrecursive","saferepr", - "PrettyPrinter", "pp"] - - -def pprint(object, stream=None, indent=1, width=80, depth=None, *, - compact=False, sort_dicts=True, underscore_numbers=False): - """Pretty-print a Python object to a stream [default is sys.stdout].""" - printer = PrettyPrinter( - stream=stream, indent=indent, width=width, depth=depth, - compact=compact, sort_dicts=sort_dicts, - underscore_numbers=underscore_numbers) - printer.pprint(object) - - -def pformat(object, indent=1, width=80, depth=None, *, - compact=False, sort_dicts=True, underscore_numbers=False): - """Format a Python object into a pretty-printed representation.""" - return PrettyPrinter(indent=indent, width=width, depth=depth, - compact=compact, sort_dicts=sort_dicts, - underscore_numbers=underscore_numbers).pformat(object) - - -def pp(object, *args, sort_dicts=False, **kwargs): - """Pretty-print a Python object""" - pprint(object, *args, sort_dicts=sort_dicts, **kwargs) - - -def saferepr(object): - """Version of repr() which can handle recursive data structures.""" - return PrettyPrinter()._safe_repr(object, {}, None, 0)[0] - - -def isreadable(object): - """Determine if saferepr(object) is readable by eval().""" - return PrettyPrinter()._safe_repr(object, {}, None, 0)[1] - - -def isrecursive(object): - """Determine if object requires a recursive representation.""" - return PrettyPrinter()._safe_repr(object, {}, None, 0)[2] - - -class _safe_key: - """Helper function for key functions when sorting unorderable objects. - - The wrapped-object will fallback to a Py2.x style comparison for - unorderable types (sorting first comparing the type name and then by - the obj ids). Does not work recursively, so dict.items() must have - _safe_key applied to both the key and the value. - - """ - - __slots__ = ['obj'] - - def __init__(self, obj): - self.obj = obj - - def __lt__(self, other): - try: - return self.obj < other.obj - except TypeError: - return ((str(type(self.obj)), id(self.obj)) < \ - (str(type(other.obj)), id(other.obj))) - - -def _safe_tuple(t): - "Helper function for comparing 2-tuples" - return _safe_key(t[0]), _safe_key(t[1]) - - -class PrettyPrinter: - def __init__(self, indent=1, width=80, depth=None, stream=None, *, - compact=False, sort_dicts=True, underscore_numbers=False): - """Handle pretty printing operations onto a stream using a set of - configured parameters. - - indent - Number of spaces to indent for each level of nesting. - - width - Attempted maximum number of columns in the output. - - depth - The maximum depth to print out nested structures. - - stream - The desired output stream. If omitted (or false), the standard - output stream available at construction will be used. - - compact - If true, several items will be combined in one line. - - sort_dicts - If true, dict keys are sorted. - - underscore_numbers - If true, digit groups are separated with underscores. - - """ - indent = int(indent) - width = int(width) - if indent < 0: - raise ValueError('indent must be >= 0') - if depth is not None and depth <= 0: - raise ValueError('depth must be > 0') - if not width: - raise ValueError('width must be != 0') - self._depth = depth - self._indent_per_level = indent - self._width = width - if stream is not None: - self._stream = stream - else: - self._stream = _sys.stdout - self._compact = bool(compact) - self._sort_dicts = sort_dicts - self._underscore_numbers = underscore_numbers - - def pprint(self, object): - if self._stream is not None: - self._format(object, self._stream, 0, 0, {}, 0) - self._stream.write("\n") - - def pformat(self, object): - sio = _StringIO() - self._format(object, sio, 0, 0, {}, 0) - return sio.getvalue() - - def isrecursive(self, object): - return self.format(object, {}, 0, 0)[2] - - def isreadable(self, object): - s, readable, recursive = self.format(object, {}, 0, 0) - return readable and not recursive - - def _format(self, object, stream, indent, allowance, context, level): - objid = id(object) - if objid in context: - stream.write(_recursion(object)) - self._recursive = True - self._readable = False - return - rep = self._repr(object, context, level) - max_width = self._width - indent - allowance - if len(rep) > max_width: - p = self._dispatch.get(type(object).__repr__, None) - # Lazy import to improve module import time - from dataclasses import is_dataclass - - if p is not None: - context[objid] = 1 - p(self, object, stream, indent, allowance, context, level + 1) - del context[objid] - return - elif (is_dataclass(object) and - not isinstance(object, type) and - object.__dataclass_params__.repr and - # Check dataclass has generated repr method. - hasattr(object.__repr__, "__wrapped__") and - "__create_fn__" in object.__repr__.__wrapped__.__qualname__): - context[objid] = 1 - self._pprint_dataclass(object, stream, indent, allowance, context, level + 1) - del context[objid] - return - stream.write(rep) - - def _pprint_dataclass(self, object, stream, indent, allowance, context, level): - # Lazy import to improve module import time - from dataclasses import fields as dataclass_fields - - cls_name = object.__class__.__name__ - indent += len(cls_name) + 1 - items = [(f.name, getattr(object, f.name)) for f in dataclass_fields(object) if f.repr] - stream.write(cls_name + '(') - self._format_namespace_items(items, stream, indent, allowance, context, level) - stream.write(')') - - _dispatch = {} - - def _pprint_dict(self, object, stream, indent, allowance, context, level): - write = stream.write - write('{') - if self._indent_per_level > 1: - write((self._indent_per_level - 1) * ' ') - length = len(object) - if length: - if self._sort_dicts: - items = sorted(object.items(), key=_safe_tuple) - else: - items = object.items() - self._format_dict_items(items, stream, indent, allowance + 1, - context, level) - write('}') - - _dispatch[dict.__repr__] = _pprint_dict - - def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level): - if not len(object): - stream.write(repr(object)) - return - cls = object.__class__ - stream.write(cls.__name__ + '(') - self._format(list(object.items()), stream, - indent + len(cls.__name__) + 1, allowance + 1, - context, level) - stream.write(')') - - _dispatch[_collections.OrderedDict.__repr__] = _pprint_ordered_dict - - def _pprint_list(self, object, stream, indent, allowance, context, level): - stream.write('[') - self._format_items(object, stream, indent, allowance + 1, - context, level) - stream.write(']') - - _dispatch[list.__repr__] = _pprint_list - - def _pprint_tuple(self, object, stream, indent, allowance, context, level): - stream.write('(') - endchar = ',)' if len(object) == 1 else ')' - self._format_items(object, stream, indent, allowance + len(endchar), - context, level) - stream.write(endchar) - - _dispatch[tuple.__repr__] = _pprint_tuple - - def _pprint_set(self, object, stream, indent, allowance, context, level): - if not len(object): - stream.write(repr(object)) - return - typ = object.__class__ - if typ is set: - stream.write('{') - endchar = '}' - else: - stream.write(typ.__name__ + '({') - endchar = '})' - indent += len(typ.__name__) + 1 - object = sorted(object, key=_safe_key) - self._format_items(object, stream, indent, allowance + len(endchar), - context, level) - stream.write(endchar) - - _dispatch[set.__repr__] = _pprint_set - _dispatch[frozenset.__repr__] = _pprint_set - - def _pprint_str(self, object, stream, indent, allowance, context, level): - write = stream.write - if not len(object): - write(repr(object)) - return - chunks = [] - lines = object.splitlines(True) - if level == 1: - indent += 1 - allowance += 1 - max_width1 = max_width = self._width - indent - for i, line in enumerate(lines): - rep = repr(line) - if i == len(lines) - 1: - max_width1 -= allowance - if len(rep) <= max_width1: - chunks.append(rep) - else: - # Lazy import to improve module import time - import re - - # A list of alternating (non-space, space) strings - parts = re.findall(r'\S*\s*', line) - assert parts - assert not parts[-1] - parts.pop() # drop empty last part - max_width2 = max_width - current = '' - for j, part in enumerate(parts): - candidate = current + part - if j == len(parts) - 1 and i == len(lines) - 1: - max_width2 -= allowance - if len(repr(candidate)) > max_width2: - if current: - chunks.append(repr(current)) - current = part - else: - current = candidate - if current: - chunks.append(repr(current)) - if len(chunks) == 1: - write(rep) - return - if level == 1: - write('(') - for i, rep in enumerate(chunks): - if i > 0: - write('\n' + ' '*indent) - write(rep) - if level == 1: - write(')') - - _dispatch[str.__repr__] = _pprint_str - - def _pprint_bytes(self, object, stream, indent, allowance, context, level): - write = stream.write - if len(object) <= 4: - write(repr(object)) - return - parens = level == 1 - if parens: - indent += 1 - allowance += 1 - write('(') - delim = '' - for rep in _wrap_bytes_repr(object, self._width - indent, allowance): - write(delim) - write(rep) - if not delim: - delim = '\n' + ' '*indent - if parens: - write(')') - - _dispatch[bytes.__repr__] = _pprint_bytes - - def _pprint_bytearray(self, object, stream, indent, allowance, context, level): - write = stream.write - write('bytearray(') - self._pprint_bytes(bytes(object), stream, indent + 10, - allowance + 1, context, level + 1) - write(')') - - _dispatch[bytearray.__repr__] = _pprint_bytearray - - def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level): - stream.write('mappingproxy(') - self._format(object.copy(), stream, indent + 13, allowance + 1, - context, level) - stream.write(')') - - _dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy - - def _pprint_simplenamespace(self, object, stream, indent, allowance, context, level): - if type(object) is _types.SimpleNamespace: - # The SimpleNamespace repr is "namespace" instead of the class - # name, so we do the same here. For subclasses; use the class name. - cls_name = 'namespace' - else: - cls_name = object.__class__.__name__ - indent += len(cls_name) + 1 - items = object.__dict__.items() - stream.write(cls_name + '(') - self._format_namespace_items(items, stream, indent, allowance, context, level) - stream.write(')') - - _dispatch[_types.SimpleNamespace.__repr__] = _pprint_simplenamespace - - def _format_dict_items(self, items, stream, indent, allowance, context, - level): - write = stream.write - indent += self._indent_per_level - delimnl = ',\n' + ' ' * indent - last_index = len(items) - 1 - for i, (key, ent) in enumerate(items): - last = i == last_index - rep = self._repr(key, context, level) - write(rep) - write(': ') - self._format(ent, stream, indent + len(rep) + 2, - allowance if last else 1, - context, level) - if not last: - write(delimnl) - - def _format_namespace_items(self, items, stream, indent, allowance, context, level): - write = stream.write - delimnl = ',\n' + ' ' * indent - last_index = len(items) - 1 - for i, (key, ent) in enumerate(items): - last = i == last_index - write(key) - write('=') - if id(ent) in context: - # Special-case representation of recursion to match standard - # recursive dataclass repr. - write("...") - else: - self._format(ent, stream, indent + len(key) + 1, - allowance if last else 1, - context, level) - if not last: - write(delimnl) - - def _format_items(self, items, stream, indent, allowance, context, level): - write = stream.write - indent += self._indent_per_level - if self._indent_per_level > 1: - write((self._indent_per_level - 1) * ' ') - delimnl = ',\n' + ' ' * indent - delim = '' - width = max_width = self._width - indent + 1 - it = iter(items) - try: - next_ent = next(it) - except StopIteration: - return - last = False - while not last: - ent = next_ent - try: - next_ent = next(it) - except StopIteration: - last = True - max_width -= allowance - width -= allowance - if self._compact: - rep = self._repr(ent, context, level) - w = len(rep) + 2 - if width < w: - width = max_width - if delim: - delim = delimnl - if width >= w: - width -= w - write(delim) - delim = ', ' - write(rep) - continue - write(delim) - delim = delimnl - self._format(ent, stream, indent, - allowance if last else 1, - context, level) - - def _repr(self, object, context, level): - repr, readable, recursive = self.format(object, context.copy(), - self._depth, level) - if not readable: - self._readable = False - if recursive: - self._recursive = True - return repr - - def format(self, object, context, maxlevels, level): - """Format object for a specific context, returning a string - and flags indicating whether the representation is 'readable' - and whether the object represents a recursive construct. - """ - return self._safe_repr(object, context, maxlevels, level) - - def _pprint_default_dict(self, object, stream, indent, allowance, context, level): - if not len(object): - stream.write(repr(object)) - return - rdf = self._repr(object.default_factory, context, level) - cls = object.__class__ - indent += len(cls.__name__) + 1 - stream.write('%s(%s,\n%s' % (cls.__name__, rdf, ' ' * indent)) - self._pprint_dict(object, stream, indent, allowance + 1, context, level) - stream.write(')') - - _dispatch[_collections.defaultdict.__repr__] = _pprint_default_dict - - def _pprint_counter(self, object, stream, indent, allowance, context, level): - if not len(object): - stream.write(repr(object)) - return - cls = object.__class__ - stream.write(cls.__name__ + '({') - if self._indent_per_level > 1: - stream.write((self._indent_per_level - 1) * ' ') - items = object.most_common() - self._format_dict_items(items, stream, - indent + len(cls.__name__) + 1, allowance + 2, - context, level) - stream.write('})') - - _dispatch[_collections.Counter.__repr__] = _pprint_counter - - def _pprint_chain_map(self, object, stream, indent, allowance, context, level): - if not len(object.maps): - stream.write(repr(object)) - return - cls = object.__class__ - stream.write(cls.__name__ + '(') - indent += len(cls.__name__) + 1 - for i, m in enumerate(object.maps): - if i == len(object.maps) - 1: - self._format(m, stream, indent, allowance + 1, context, level) - stream.write(')') - else: - self._format(m, stream, indent, 1, context, level) - stream.write(',\n' + ' ' * indent) - - _dispatch[_collections.ChainMap.__repr__] = _pprint_chain_map - - def _pprint_deque(self, object, stream, indent, allowance, context, level): - if not len(object): - stream.write(repr(object)) - return - cls = object.__class__ - stream.write(cls.__name__ + '(') - indent += len(cls.__name__) + 1 - stream.write('[') - if object.maxlen is None: - self._format_items(object, stream, indent, allowance + 2, - context, level) - stream.write('])') - else: - self._format_items(object, stream, indent, 2, - context, level) - rml = self._repr(object.maxlen, context, level) - stream.write('],\n%smaxlen=%s)' % (' ' * indent, rml)) - - _dispatch[_collections.deque.__repr__] = _pprint_deque - - def _pprint_user_dict(self, object, stream, indent, allowance, context, level): - self._format(object.data, stream, indent, allowance, context, level - 1) - - _dispatch[_collections.UserDict.__repr__] = _pprint_user_dict - - def _pprint_user_list(self, object, stream, indent, allowance, context, level): - self._format(object.data, stream, indent, allowance, context, level - 1) - - _dispatch[_collections.UserList.__repr__] = _pprint_user_list - - def _pprint_user_string(self, object, stream, indent, allowance, context, level): - self._format(object.data, stream, indent, allowance, context, level - 1) - - _dispatch[_collections.UserString.__repr__] = _pprint_user_string - - def _safe_repr(self, object, context, maxlevels, level): - # Return triple (repr_string, isreadable, isrecursive). - typ = type(object) - if typ in _builtin_scalars: - return repr(object), True, False - - r = getattr(typ, "__repr__", None) - - if issubclass(typ, int) and r is int.__repr__: - if self._underscore_numbers: - return f"{object:_d}", True, False - else: - return repr(object), True, False - - if issubclass(typ, dict) and r is dict.__repr__: - if not object: - return "{}", True, False - objid = id(object) - if maxlevels and level >= maxlevels: - return "{...}", False, objid in context - if objid in context: - return _recursion(object), False, True - context[objid] = 1 - readable = True - recursive = False - components = [] - append = components.append - level += 1 - if self._sort_dicts: - items = sorted(object.items(), key=_safe_tuple) - else: - items = object.items() - for k, v in items: - krepr, kreadable, krecur = self.format( - k, context, maxlevels, level) - vrepr, vreadable, vrecur = self.format( - v, context, maxlevels, level) - append("%s: %s" % (krepr, vrepr)) - readable = readable and kreadable and vreadable - if krecur or vrecur: - recursive = True - del context[objid] - return "{%s}" % ", ".join(components), readable, recursive - - if (issubclass(typ, list) and r is list.__repr__) or \ - (issubclass(typ, tuple) and r is tuple.__repr__): - if issubclass(typ, list): - if not object: - return "[]", True, False - format = "[%s]" - elif len(object) == 1: - format = "(%s,)" - else: - if not object: - return "()", True, False - format = "(%s)" - objid = id(object) - if maxlevels and level >= maxlevels: - return format % "...", False, objid in context - if objid in context: - return _recursion(object), False, True - context[objid] = 1 - readable = True - recursive = False - components = [] - append = components.append - level += 1 - for o in object: - orepr, oreadable, orecur = self.format( - o, context, maxlevels, level) - append(orepr) - if not oreadable: - readable = False - if orecur: - recursive = True - del context[objid] - return format % ", ".join(components), readable, recursive - - rep = repr(object) - return rep, (rep and not rep.startswith('<')), False - - -_builtin_scalars = frozenset({str, bytes, bytearray, float, complex, - bool, type(None)}) - - -def _recursion(object): - return ("<Recursion on %s with id=%s>" - % (type(object).__name__, id(object))) - - -def _wrap_bytes_repr(object, width, allowance): - current = b'' - last = len(object) // 4 * 4 - for i in range(0, len(object), 4): - part = object[i: i+4] - candidate = current + part - if i == last: - width -= allowance - if len(repr(candidate)) > width: - if current: - yield repr(current) - current = part - else: - current = candidate - if current: - yield repr(current) diff --git a/Python314_4_x86_Template/Lib/profile.py b/Python314_4_x86_Template/Lib/profile.py deleted file mode 100644 index a5afb12c9..000000000 --- a/Python314_4_x86_Template/Lib/profile.py +++ /dev/null @@ -1,615 +0,0 @@ -# -# Class for profiling python code. rev 1.0 6/2/94 -# -# Written by James Roskind -# Based on prior profile module by Sjoerd Mullender... -# which was hacked somewhat by: Guido van Rossum - -"""Class for profiling Python code.""" - -# Copyright Disney Enterprises, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -# either express or implied. See the License for the specific language -# governing permissions and limitations under the License. - - -import importlib.machinery -import io -import sys -import time -import marshal - -__all__ = ["run", "runctx", "Profile"] - -# Sample timer for use with -#i_count = 0 -#def integer_timer(): -# global i_count -# i_count = i_count + 1 -# return i_count -#itimes = integer_timer # replace with C coded timer returning integers - -class _Utils: - """Support class for utility functions which are shared by - profile.py and cProfile.py modules. - Not supposed to be used directly. - """ - - def __init__(self, profiler): - self.profiler = profiler - - def run(self, statement, filename, sort): - prof = self.profiler() - try: - prof.run(statement) - except SystemExit: - pass - finally: - self._show(prof, filename, sort) - - def runctx(self, statement, globals, locals, filename, sort): - prof = self.profiler() - try: - prof.runctx(statement, globals, locals) - except SystemExit: - pass - finally: - self._show(prof, filename, sort) - - def _show(self, prof, filename, sort): - if filename is not None: - prof.dump_stats(filename) - else: - prof.print_stats(sort) - - -#************************************************************************** -# The following are the static member functions for the profiler class -# Note that an instance of Profile() is *not* needed to call them. -#************************************************************************** - -def run(statement, filename=None, sort=-1): - """Run statement under profiler optionally saving results in filename - - This function takes a single argument that can be passed to the - "exec" statement, and an optional file name. In all cases this - routine attempts to "exec" its first argument and gather profiling - statistics from the execution. If no file name is present, then this - function automatically prints a simple profiling report, sorted by the - standard name string (file/line/function-name) that is presented in - each line. - """ - return _Utils(Profile).run(statement, filename, sort) - -def runctx(statement, globals, locals, filename=None, sort=-1): - """Run statement under profiler, supplying your own globals and locals, - optionally saving results in filename. - - statement and filename have the same semantics as profile.run - """ - return _Utils(Profile).runctx(statement, globals, locals, filename, sort) - - -class Profile: - """Profiler class. - - self.cur is always a tuple. Each such tuple corresponds to a stack - frame that is currently active (self.cur[-2]). The following are the - definitions of its members. We use this external "parallel stack" to - avoid contaminating the program that we are profiling. (old profiler - used to write into the frames local dictionary!!) Derived classes - can change the definition of some entries, as long as they leave - [-2:] intact (frame and previous tuple). In case an internal error is - detected, the -3 element is used as the function name. - - [ 0] = Time that needs to be charged to the parent frame's function. - It is used so that a function call will not have to access the - timing data for the parent frame. - [ 1] = Total time spent in this frame's function, excluding time in - subfunctions (this latter is tallied in cur[2]). - [ 2] = Total time spent in subfunctions, excluding time executing the - frame's function (this latter is tallied in cur[1]). - [-3] = Name of the function that corresponds to this frame. - [-2] = Actual frame that we correspond to (used to sync exception handling). - [-1] = Our parent 6-tuple (corresponds to frame.f_back). - - Timing data for each function is stored as a 5-tuple in the dictionary - self.timings[]. The index is always the name stored in self.cur[-3]. - The following are the definitions of the members: - - [0] = The number of times this function was called, not counting direct - or indirect recursion, - [1] = Number of times this function appears on the stack, minus one - [2] = Total time spent internal to this function - [3] = Cumulative time that this function was present on the stack. In - non-recursive functions, this is the total execution time from start - to finish of each invocation of a function, including time spent in - all subfunctions. - [4] = A dictionary indicating for each function name, the number of times - it was called by us. - """ - - bias = 0 # calibration constant - - def __init__(self, timer=None, bias=None): - self.timings = {} - self.cur = None - self.cmd = "" - self.c_func_name = "" - - if bias is None: - bias = self.bias - self.bias = bias # Materialize in local dict for lookup speed. - - if not timer: - self.timer = self.get_time = time.process_time - self.dispatcher = self.trace_dispatch_i - else: - self.timer = timer - t = self.timer() # test out timer function - try: - length = len(t) - except TypeError: - self.get_time = timer - self.dispatcher = self.trace_dispatch_i - else: - if length == 2: - self.dispatcher = self.trace_dispatch - else: - self.dispatcher = self.trace_dispatch_l - # This get_time() implementation needs to be defined - # here to capture the passed-in timer in the parameter - # list (for performance). Note that we can't assume - # the timer() result contains two values in all - # cases. - def get_time_timer(timer=timer, sum=sum): - return sum(timer()) - self.get_time = get_time_timer - self.t = self.get_time() - self.simulate_call('profiler') - - # Heavily optimized dispatch routine for time.process_time() timer - - def trace_dispatch(self, frame, event, arg): - timer = self.timer - t = timer() - t = t[0] + t[1] - self.t - self.bias - - if event == "c_call": - self.c_func_name = arg.__name__ - - if self.dispatch[event](self, frame,t): - t = timer() - self.t = t[0] + t[1] - else: - r = timer() - self.t = r[0] + r[1] - t # put back unrecorded delta - - # Dispatch routine for best timer program (return = scalar, fastest if - # an integer but float works too -- and time.process_time() relies on that). - - def trace_dispatch_i(self, frame, event, arg): - timer = self.timer - t = timer() - self.t - self.bias - - if event == "c_call": - self.c_func_name = arg.__name__ - - if self.dispatch[event](self, frame, t): - self.t = timer() - else: - self.t = timer() - t # put back unrecorded delta - - # Dispatch routine for macintosh (timer returns time in ticks of - # 1/60th second) - - def trace_dispatch_mac(self, frame, event, arg): - timer = self.timer - t = timer()/60.0 - self.t - self.bias - - if event == "c_call": - self.c_func_name = arg.__name__ - - if self.dispatch[event](self, frame, t): - self.t = timer()/60.0 - else: - self.t = timer()/60.0 - t # put back unrecorded delta - - # SLOW generic dispatch routine for timer returning lists of numbers - - def trace_dispatch_l(self, frame, event, arg): - get_time = self.get_time - t = get_time() - self.t - self.bias - - if event == "c_call": - self.c_func_name = arg.__name__ - - if self.dispatch[event](self, frame, t): - self.t = get_time() - else: - self.t = get_time() - t # put back unrecorded delta - - # In the event handlers, the first 3 elements of self.cur are unpacked - # into vrbls w/ 3-letter names. The last two characters are meant to be - # mnemonic: - # _pt self.cur[0] "parent time" time to be charged to parent frame - # _it self.cur[1] "internal time" time spent directly in the function - # _et self.cur[2] "external time" time spent in subfunctions - - def trace_dispatch_exception(self, frame, t): - rpt, rit, ret, rfn, rframe, rcur = self.cur - if (rframe is not frame) and rcur: - return self.trace_dispatch_return(rframe, t) - self.cur = rpt, rit+t, ret, rfn, rframe, rcur - return 1 - - - def trace_dispatch_call(self, frame, t): - if self.cur and frame.f_back is not self.cur[-2]: - rpt, rit, ret, rfn, rframe, rcur = self.cur - if not isinstance(rframe, Profile.fake_frame): - assert rframe.f_back is frame.f_back, ("Bad call", rfn, - rframe, rframe.f_back, - frame, frame.f_back) - self.trace_dispatch_return(rframe, 0) - assert (self.cur is None or \ - frame.f_back is self.cur[-2]), ("Bad call", - self.cur[-3]) - fcode = frame.f_code - fn = (fcode.co_filename, fcode.co_firstlineno, fcode.co_name) - self.cur = (t, 0, 0, fn, frame, self.cur) - timings = self.timings - if fn in timings: - cc, ns, tt, ct, callers = timings[fn] - timings[fn] = cc, ns + 1, tt, ct, callers - else: - timings[fn] = 0, 0, 0, 0, {} - return 1 - - def trace_dispatch_c_call (self, frame, t): - fn = ("", 0, self.c_func_name) - self.cur = (t, 0, 0, fn, frame, self.cur) - timings = self.timings - if fn in timings: - cc, ns, tt, ct, callers = timings[fn] - timings[fn] = cc, ns+1, tt, ct, callers - else: - timings[fn] = 0, 0, 0, 0, {} - return 1 - - def trace_dispatch_return(self, frame, t): - if frame is not self.cur[-2]: - assert frame is self.cur[-2].f_back, ("Bad return", self.cur[-3]) - self.trace_dispatch_return(self.cur[-2], 0) - - # Prefix "r" means part of the Returning or exiting frame. - # Prefix "p" means part of the Previous or Parent or older frame. - - rpt, rit, ret, rfn, frame, rcur = self.cur - rit = rit + t - frame_total = rit + ret - - ppt, pit, pet, pfn, pframe, pcur = rcur - self.cur = ppt, pit + rpt, pet + frame_total, pfn, pframe, pcur - - timings = self.timings - cc, ns, tt, ct, callers = timings[rfn] - if not ns: - # This is the only occurrence of the function on the stack. - # Else this is a (directly or indirectly) recursive call, and - # its cumulative time will get updated when the topmost call to - # it returns. - ct = ct + frame_total - cc = cc + 1 - - if pfn in callers: - callers[pfn] = callers[pfn] + 1 # hack: gather more - # stats such as the amount of time added to ct courtesy - # of this specific call, and the contribution to cc - # courtesy of this call. - else: - callers[pfn] = 1 - - timings[rfn] = cc, ns - 1, tt + rit, ct, callers - - return 1 - - - dispatch = { - "call": trace_dispatch_call, - "exception": trace_dispatch_exception, - "return": trace_dispatch_return, - "c_call": trace_dispatch_c_call, - "c_exception": trace_dispatch_return, # the C function returned - "c_return": trace_dispatch_return, - } - - - # The next few functions play with self.cmd. By carefully preloading - # our parallel stack, we can force the profiled result to include - # an arbitrary string as the name of the calling function. - # We use self.cmd as that string, and the resulting stats look - # very nice :-). - - def set_cmd(self, cmd): - if self.cur[-1]: return # already set - self.cmd = cmd - self.simulate_call(cmd) - - class fake_code: - def __init__(self, filename, line, name): - self.co_filename = filename - self.co_line = line - self.co_name = name - self.co_firstlineno = 0 - - def __repr__(self): - return repr((self.co_filename, self.co_line, self.co_name)) - - class fake_frame: - def __init__(self, code, prior): - self.f_code = code - self.f_back = prior - - def simulate_call(self, name): - code = self.fake_code('profile', 0, name) - if self.cur: - pframe = self.cur[-2] - else: - pframe = None - frame = self.fake_frame(code, pframe) - self.dispatch['call'](self, frame, 0) - - # collect stats from pending stack, including getting final - # timings for self.cmd frame. - - def simulate_cmd_complete(self): - get_time = self.get_time - t = get_time() - self.t - while self.cur[-1]: - # We *can* cause assertion errors here if - # dispatch_trace_return checks for a frame match! - self.dispatch['return'](self, self.cur[-2], t) - t = 0 - self.t = get_time() - t - - - def print_stats(self, sort=-1): - import pstats - if not isinstance(sort, tuple): - sort = (sort,) - pstats.Stats(self).strip_dirs().sort_stats(*sort).print_stats() - - def dump_stats(self, file): - with open(file, 'wb') as f: - self.create_stats() - marshal.dump(self.stats, f) - - def create_stats(self): - self.simulate_cmd_complete() - self.snapshot_stats() - - def snapshot_stats(self): - self.stats = {} - for func, (cc, ns, tt, ct, callers) in self.timings.items(): - callers = callers.copy() - nc = 0 - for callcnt in callers.values(): - nc += callcnt - self.stats[func] = cc, nc, tt, ct, callers - - - # The following two methods can be called by clients to use - # a profiler to profile a statement, given as a string. - - def run(self, cmd): - import __main__ - dict = __main__.__dict__ - return self.runctx(cmd, dict, dict) - - def runctx(self, cmd, globals, locals): - self.set_cmd(cmd) - sys.setprofile(self.dispatcher) - try: - exec(cmd, globals, locals) - finally: - sys.setprofile(None) - return self - - # This method is more useful to profile a single function call. - def runcall(self, func, /, *args, **kw): - self.set_cmd(repr(func)) - sys.setprofile(self.dispatcher) - try: - return func(*args, **kw) - finally: - sys.setprofile(None) - - - #****************************************************************** - # The following calculates the overhead for using a profiler. The - # problem is that it takes a fair amount of time for the profiler - # to stop the stopwatch (from the time it receives an event). - # Similarly, there is a delay from the time that the profiler - # re-starts the stopwatch before the user's code really gets to - # continue. The following code tries to measure the difference on - # a per-event basis. - # - # Note that this difference is only significant if there are a lot of - # events, and relatively little user code per event. For example, - # code with small functions will typically benefit from having the - # profiler calibrated for the current platform. This *could* be - # done on the fly during init() time, but it is not worth the - # effort. Also note that if too large a value specified, then - # execution time on some functions will actually appear as a - # negative number. It is *normal* for some functions (with very - # low call counts) to have such negative stats, even if the - # calibration figure is "correct." - # - # One alternative to profile-time calibration adjustments (i.e., - # adding in the magic little delta during each event) is to track - # more carefully the number of events (and cumulatively, the number - # of events during sub functions) that are seen. If this were - # done, then the arithmetic could be done after the fact (i.e., at - # display time). Currently, we track only call/return events. - # These values can be deduced by examining the callees and callers - # vectors for each functions. Hence we *can* almost correct the - # internal time figure at print time (note that we currently don't - # track exception event processing counts). Unfortunately, there - # is currently no similar information for cumulative sub-function - # time. It would not be hard to "get all this info" at profiler - # time. Specifically, we would have to extend the tuples to keep - # counts of this in each frame, and then extend the defs of timing - # tuples to include the significant two figures. I'm a bit fearful - # that this additional feature will slow the heavily optimized - # event/time ratio (i.e., the profiler would run slower, fur a very - # low "value added" feature.) - #************************************************************** - - def calibrate(self, m, verbose=0): - if self.__class__ is not Profile: - raise TypeError("Subclasses must override .calibrate().") - - saved_bias = self.bias - self.bias = 0 - try: - return self._calibrate_inner(m, verbose) - finally: - self.bias = saved_bias - - def _calibrate_inner(self, m, verbose): - get_time = self.get_time - - # Set up a test case to be run with and without profiling. Include - # lots of calls, because we're trying to quantify stopwatch overhead. - # Do not raise any exceptions, though, because we want to know - # exactly how many profile events are generated (one call event, + - # one return event, per Python-level call). - - def f1(n): - for i in range(n): - x = 1 - - def f(m, f1=f1): - for i in range(m): - f1(100) - - f(m) # warm up the cache - - # elapsed_noprofile <- time f(m) takes without profiling. - t0 = get_time() - f(m) - t1 = get_time() - elapsed_noprofile = t1 - t0 - if verbose: - print("elapsed time without profiling =", elapsed_noprofile) - - # elapsed_profile <- time f(m) takes with profiling. The difference - # is profiling overhead, only some of which the profiler subtracts - # out on its own. - p = Profile() - t0 = get_time() - p.runctx('f(m)', globals(), locals()) - t1 = get_time() - elapsed_profile = t1 - t0 - if verbose: - print("elapsed time with profiling =", elapsed_profile) - - # reported_time <- "CPU seconds" the profiler charged to f and f1. - total_calls = 0.0 - reported_time = 0.0 - for (filename, line, funcname), (cc, ns, tt, ct, callers) in \ - p.timings.items(): - if funcname in ("f", "f1"): - total_calls += cc - reported_time += tt - - if verbose: - print("'CPU seconds' profiler reported =", reported_time) - print("total # calls =", total_calls) - if total_calls != m + 1: - raise ValueError("internal error: total calls = %d" % total_calls) - - # reported_time - elapsed_noprofile = overhead the profiler wasn't - # able to measure. Divide by twice the number of calls (since there - # are two profiler events per call in this test) to get the hidden - # overhead per event. - mean = (reported_time - elapsed_noprofile) / 2.0 / total_calls - if verbose: - print("mean stopwatch overhead per profile event =", mean) - return mean - -#**************************************************************************** - -def main(): - import os - from optparse import OptionParser - - usage = "profile.py [-o output_file_path] [-s sort] [-m module | scriptfile] [arg] ..." - parser = OptionParser(usage=usage) - parser.allow_interspersed_args = False - parser.add_option('-o', '--outfile', dest="outfile", - help="Save stats to <outfile>", default=None) - parser.add_option('-m', dest="module", action="store_true", - help="Profile a library module.", default=False) - parser.add_option('-s', '--sort', dest="sort", - help="Sort order when printing to stdout, based on pstats.Stats class", - default=-1) - - if not sys.argv[1:]: - parser.print_usage() - sys.exit(2) - - (options, args) = parser.parse_args() - sys.argv[:] = args - - # The script that we're profiling may chdir, so capture the absolute path - # to the output file at startup. - if options.outfile is not None: - options.outfile = os.path.abspath(options.outfile) - - if len(args) > 0: - if options.module: - import runpy - code = "run_module(modname, run_name='__main__')" - globs = { - 'run_module': runpy.run_module, - 'modname': args[0] - } - else: - progname = args[0] - sys.path.insert(0, os.path.dirname(progname)) - with io.open_code(progname) as fp: - code = compile(fp.read(), progname, 'exec') - spec = importlib.machinery.ModuleSpec(name='__main__', loader=None, - origin=progname) - globs = { - '__spec__': spec, - '__file__': spec.origin, - '__name__': spec.name, - '__package__': None, - '__cached__': None, - } - try: - runctx(code, globs, None, options.outfile, options.sort) - except BrokenPipeError as exc: - # Prevent "Exception ignored" during interpreter shutdown. - sys.stdout = None - sys.exit(exc.errno) - else: - parser.print_usage() - return parser - -# When invoked as main program, invoke the profiler on a script -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/pstats.py b/Python314_4_x86_Template/Lib/pstats.py deleted file mode 100644 index becaf3558..000000000 --- a/Python314_4_x86_Template/Lib/pstats.py +++ /dev/null @@ -1,777 +0,0 @@ -"""Class for printing reports on profiled python code.""" - -# Written by James Roskind -# Based on prior profile module by Sjoerd Mullender... -# which was hacked somewhat by: Guido van Rossum - -# Copyright Disney Enterprises, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -# either express or implied. See the License for the specific language -# governing permissions and limitations under the License. - - -import sys -import os -import time -import marshal -import re - -from enum import StrEnum, _simple_enum -from functools import cmp_to_key -from dataclasses import dataclass - -__all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"] - -@_simple_enum(StrEnum) -class SortKey: - CALLS = 'calls', 'ncalls' - CUMULATIVE = 'cumulative', 'cumtime' - FILENAME = 'filename', 'module' - LINE = 'line' - NAME = 'name' - NFL = 'nfl' - PCALLS = 'pcalls' - STDNAME = 'stdname' - TIME = 'time', 'tottime' - - def __new__(cls, *values): - value = values[0] - obj = str.__new__(cls, value) - obj._value_ = value - for other_value in values[1:]: - cls._value2member_map_[other_value] = obj - obj._all_values = values - return obj - - -@dataclass(unsafe_hash=True) -class FunctionProfile: - ncalls: str - tottime: float - percall_tottime: float - cumtime: float - percall_cumtime: float - file_name: str - line_number: int - -@dataclass(unsafe_hash=True) -class StatsProfile: - '''Class for keeping track of an item in inventory.''' - total_tt: float - func_profiles: dict[str, FunctionProfile] - -class Stats: - """This class is used for creating reports from data generated by the - Profile class. It is a "friend" of that class, and imports data either - by direct access to members of Profile class, or by reading in a dictionary - that was emitted (via marshal) from the Profile class. - - The big change from the previous Profiler (in terms of raw functionality) - is that an "add()" method has been provided to combine Stats from - several distinct profile runs. Both the constructor and the add() - method now take arbitrarily many file names as arguments. - - All the print methods now take an argument that indicates how many lines - to print. If the arg is a floating-point number between 0 and 1.0, then - it is taken as a decimal percentage of the available lines to be printed - (e.g., .1 means print 10% of all available lines). If it is an integer, - it is taken to mean the number of lines of data that you wish to have - printed. - - The sort_stats() method now processes some additional options (i.e., in - addition to the old -1, 0, 1, or 2 that are respectively interpreted as - 'stdname', 'calls', 'time', and 'cumulative'). It takes either an - arbitrary number of quoted strings or SortKey enum to select the sort - order. - - For example sort_stats('time', 'name') or sort_stats(SortKey.TIME, - SortKey.NAME) sorts on the major key of 'internal function time', and on - the minor key of 'the name of the function'. Look at the two tables in - sort_stats() and get_sort_arg_defs(self) for more examples. - - All methods return self, so you can string together commands like: - Stats('foo', 'goo').strip_dirs().sort_stats('calls').\ - print_stats(5).print_callers(5) - """ - - def __init__(self, *args, stream=None): - self.stream = stream or sys.stdout - if not len(args): - arg = None - else: - arg = args[0] - args = args[1:] - self.init(arg) - self.add(*args) - - def init(self, arg): - self.all_callees = None # calc only if needed - self.files = [] - self.fcn_list = None - self.total_tt = 0 - self.total_calls = 0 - self.prim_calls = 0 - self.max_name_len = 0 - self.top_level = set() - self.stats = {} - self.sort_arg_dict = {} - self.load_stats(arg) - try: - self.get_top_level_stats() - except Exception: - print("Invalid timing data %s" % - (self.files[-1] if self.files else ''), file=self.stream) - raise - - def load_stats(self, arg): - if arg is None: - self.stats = {} - return - elif isinstance(arg, str): - with open(arg, 'rb') as f: - self.stats = marshal.load(f) - try: - file_stats = os.stat(arg) - arg = time.ctime(file_stats.st_mtime) + " " + arg - except: # in case this is not unix - pass - self.files = [arg] - elif hasattr(arg, 'create_stats'): - arg.create_stats() - self.stats = arg.stats - arg.stats = {} - if not self.stats: - raise TypeError("Cannot create or construct a %r object from %r" - % (self.__class__, arg)) - return - - def get_top_level_stats(self): - for func, (cc, nc, tt, ct, callers) in self.stats.items(): - self.total_calls += nc - self.prim_calls += cc - self.total_tt += tt - if ("jprofile", 0, "profiler") in callers: - self.top_level.add(func) - if len(func_std_string(func)) > self.max_name_len: - self.max_name_len = len(func_std_string(func)) - - def add(self, *arg_list): - if not arg_list: - return self - for item in reversed(arg_list): - if type(self) != type(item): - item = Stats(item) - self.files += item.files - self.total_calls += item.total_calls - self.prim_calls += item.prim_calls - self.total_tt += item.total_tt - for func in item.top_level: - self.top_level.add(func) - - if self.max_name_len < item.max_name_len: - self.max_name_len = item.max_name_len - - self.fcn_list = None - - for func, stat in item.stats.items(): - if func in self.stats: - old_func_stat = self.stats[func] - else: - old_func_stat = (0, 0, 0, 0, {},) - self.stats[func] = add_func_stats(old_func_stat, stat) - return self - - def dump_stats(self, filename): - """Write the profile data to a file we know how to load back.""" - with open(filename, 'wb') as f: - marshal.dump(self.stats, f) - - # list the tuple indices and directions for sorting, - # along with some printable description - sort_arg_dict_default = { - "calls" : (((1,-1), ), "call count"), - "ncalls" : (((1,-1), ), "call count"), - "cumtime" : (((3,-1), ), "cumulative time"), - "cumulative": (((3,-1), ), "cumulative time"), - "filename" : (((4, 1), ), "file name"), - "line" : (((5, 1), ), "line number"), - "module" : (((4, 1), ), "file name"), - "name" : (((6, 1), ), "function name"), - "nfl" : (((6, 1),(4, 1),(5, 1),), "name/file/line"), - "pcalls" : (((0,-1), ), "primitive call count"), - "stdname" : (((7, 1), ), "standard name"), - "time" : (((2,-1), ), "internal time"), - "tottime" : (((2,-1), ), "internal time"), - } - - def get_sort_arg_defs(self): - """Expand all abbreviations that are unique.""" - if not self.sort_arg_dict: - self.sort_arg_dict = dict = {} - bad_list = {} - for word, tup in self.sort_arg_dict_default.items(): - fragment = word - while fragment: - if fragment in dict: - bad_list[fragment] = 0 - break - dict[fragment] = tup - fragment = fragment[:-1] - for word in bad_list: - del dict[word] - return self.sort_arg_dict - - def sort_stats(self, *field): - if not field: - self.fcn_list = 0 - return self - if len(field) == 1 and isinstance(field[0], int): - # Be compatible with old profiler - field = [ {-1: "stdname", - 0: "calls", - 1: "time", - 2: "cumulative"}[field[0]] ] - elif len(field) >= 2: - for arg in field[1:]: - if type(arg) != type(field[0]): - raise TypeError("Can't have mixed argument type") - - sort_arg_defs = self.get_sort_arg_defs() - - sort_tuple = () - self.sort_type = "" - connector = "" - for word in field: - if isinstance(word, SortKey): - word = word.value - sort_tuple = sort_tuple + sort_arg_defs[word][0] - self.sort_type += connector + sort_arg_defs[word][1] - connector = ", " - - stats_list = [] - for func, (cc, nc, tt, ct, callers) in self.stats.items(): - stats_list.append((cc, nc, tt, ct) + func + - (func_std_string(func), func)) - - stats_list.sort(key=cmp_to_key(TupleComp(sort_tuple).compare)) - - self.fcn_list = fcn_list = [] - for tuple in stats_list: - fcn_list.append(tuple[-1]) - return self - - def reverse_order(self): - if self.fcn_list: - self.fcn_list.reverse() - return self - - def strip_dirs(self): - oldstats = self.stats - self.stats = newstats = {} - max_name_len = 0 - for func, (cc, nc, tt, ct, callers) in oldstats.items(): - newfunc = func_strip_path(func) - if len(func_std_string(newfunc)) > max_name_len: - max_name_len = len(func_std_string(newfunc)) - newcallers = {} - for func2, caller in callers.items(): - newcallers[func_strip_path(func2)] = caller - - if newfunc in newstats: - newstats[newfunc] = add_func_stats( - newstats[newfunc], - (cc, nc, tt, ct, newcallers)) - else: - newstats[newfunc] = (cc, nc, tt, ct, newcallers) - old_top = self.top_level - self.top_level = new_top = set() - for func in old_top: - new_top.add(func_strip_path(func)) - - self.max_name_len = max_name_len - - self.fcn_list = None - self.all_callees = None - return self - - def calc_callees(self): - if self.all_callees: - return - self.all_callees = all_callees = {} - for func, (cc, nc, tt, ct, callers) in self.stats.items(): - if not func in all_callees: - all_callees[func] = {} - for func2, caller in callers.items(): - if not func2 in all_callees: - all_callees[func2] = {} - all_callees[func2][func] = caller - return - - #****************************************************************** - # The following functions support actual printing of reports - #****************************************************************** - - # Optional "amount" is either a line count, or a percentage of lines. - - def eval_print_amount(self, sel, list, msg): - new_list = list - if isinstance(sel, str): - try: - rex = re.compile(sel) - except re.PatternError: - msg += " <Invalid regular expression %r>\n" % sel - return new_list, msg - new_list = [] - for func in list: - if rex.search(func_std_string(func)): - new_list.append(func) - else: - count = len(list) - if isinstance(sel, float) and 0.0 <= sel < 1.0: - count = int(count * sel + .5) - new_list = list[:count] - elif isinstance(sel, int) and 0 <= sel < count: - count = sel - new_list = list[:count] - if len(list) != len(new_list): - msg += " List reduced from %r to %r due to restriction <%r>\n" % ( - len(list), len(new_list), sel) - - return new_list, msg - - def get_stats_profile(self): - """This method returns an instance of StatsProfile, which contains a mapping - of function names to instances of FunctionProfile. Each FunctionProfile - instance holds information related to the function's profile such as how - long the function took to run, how many times it was called, etc... - """ - func_list = self.fcn_list[:] if self.fcn_list else list(self.stats.keys()) - if not func_list: - return StatsProfile(0, {}) - - total_tt = float(f8(self.total_tt)) - func_profiles = {} - stats_profile = StatsProfile(total_tt, func_profiles) - - for func in func_list: - cc, nc, tt, ct, callers = self.stats[func] - file_name, line_number, func_name = func - ncalls = str(nc) if nc == cc else (str(nc) + '/' + str(cc)) - tottime = float(f8(tt)) - percall_tottime = -1 if nc == 0 else float(f8(tt/nc)) - cumtime = float(f8(ct)) - percall_cumtime = -1 if cc == 0 else float(f8(ct/cc)) - func_profile = FunctionProfile( - ncalls, - tottime, # time spent in this function alone - percall_tottime, - cumtime, # time spent in the function plus all functions that this function called, - percall_cumtime, - file_name, - line_number - ) - func_profiles[func_name] = func_profile - - return stats_profile - - def get_print_list(self, sel_list): - width = self.max_name_len - if self.fcn_list: - stat_list = self.fcn_list[:] - msg = " Ordered by: " + self.sort_type + '\n' - else: - stat_list = list(self.stats.keys()) - msg = " Random listing order was used\n" - - for selection in sel_list: - stat_list, msg = self.eval_print_amount(selection, stat_list, msg) - - count = len(stat_list) - - if not stat_list: - return 0, stat_list - print(msg, file=self.stream) - if count < len(self.stats): - width = 0 - for func in stat_list: - if len(func_std_string(func)) > width: - width = len(func_std_string(func)) - return width+2, stat_list - - def print_stats(self, *amount): - for filename in self.files: - print(filename, file=self.stream) - if self.files: - print(file=self.stream) - indent = ' ' * 8 - for func in self.top_level: - print(indent, func_get_function_name(func), file=self.stream) - - print(indent, self.total_calls, "function calls", end=' ', file=self.stream) - if self.total_calls != self.prim_calls: - print("(%d primitive calls)" % self.prim_calls, end=' ', file=self.stream) - print("in %.3f seconds" % self.total_tt, file=self.stream) - print(file=self.stream) - width, list = self.get_print_list(amount) - if list: - self.print_title() - for func in list: - self.print_line(func) - print(file=self.stream) - print(file=self.stream) - return self - - def print_callees(self, *amount): - width, list = self.get_print_list(amount) - if list: - self.calc_callees() - - self.print_call_heading(width, "called...") - for func in list: - if func in self.all_callees: - self.print_call_line(width, func, self.all_callees[func]) - else: - self.print_call_line(width, func, {}) - print(file=self.stream) - print(file=self.stream) - return self - - def print_callers(self, *amount): - width, list = self.get_print_list(amount) - if list: - self.print_call_heading(width, "was called by...") - for func in list: - cc, nc, tt, ct, callers = self.stats[func] - self.print_call_line(width, func, callers, "<-") - print(file=self.stream) - print(file=self.stream) - return self - - def print_call_heading(self, name_size, column_title): - print("Function ".ljust(name_size) + column_title, file=self.stream) - # print sub-header only if we have new-style callers - subheader = False - for cc, nc, tt, ct, callers in self.stats.values(): - if callers: - value = next(iter(callers.values())) - subheader = isinstance(value, tuple) - break - if subheader: - print(" "*name_size + " ncalls tottime cumtime", file=self.stream) - - def print_call_line(self, name_size, source, call_dict, arrow="->"): - print(func_std_string(source).ljust(name_size) + arrow, end=' ', file=self.stream) - if not call_dict: - print(file=self.stream) - return - clist = sorted(call_dict.keys()) - indent = "" - for func in clist: - name = func_std_string(func) - value = call_dict[func] - if isinstance(value, tuple): - nc, cc, tt, ct = value - if nc != cc: - substats = '%d/%d' % (nc, cc) - else: - substats = '%d' % (nc,) - substats = '%s %s %s %s' % (substats.rjust(7+2*len(indent)), - f8(tt), f8(ct), name) - left_width = name_size + 1 - else: - substats = '%s(%r) %s' % (name, value, f8(self.stats[func][3])) - left_width = name_size + 3 - print(indent*left_width + substats, file=self.stream) - indent = " " - - def print_title(self): - print(' ncalls tottime percall cumtime percall', end=' ', file=self.stream) - print('filename:lineno(function)', file=self.stream) - - def print_line(self, func): # hack: should print percentages - cc, nc, tt, ct, callers = self.stats[func] - c = str(nc) - if nc != cc: - c = c + '/' + str(cc) - print(c.rjust(9), end=' ', file=self.stream) - print(f8(tt), end=' ', file=self.stream) - if nc == 0: - print(' '*8, end=' ', file=self.stream) - else: - print(f8(tt/nc), end=' ', file=self.stream) - print(f8(ct), end=' ', file=self.stream) - if cc == 0: - print(' '*8, end=' ', file=self.stream) - else: - print(f8(ct/cc), end=' ', file=self.stream) - print(func_std_string(func), file=self.stream) - -class TupleComp: - """This class provides a generic function for comparing any two tuples. - Each instance records a list of tuple-indices (from most significant - to least significant), and sort direction (ascending or descending) for - each tuple-index. The compare functions can then be used as the function - argument to the system sort() function when a list of tuples need to be - sorted in the instances order.""" - - def __init__(self, comp_select_list): - self.comp_select_list = comp_select_list - - def compare (self, left, right): - for index, direction in self.comp_select_list: - l = left[index] - r = right[index] - if l < r: - return -direction - if l > r: - return direction - return 0 - - -#************************************************************************** -# func_name is a triple (file:string, line:int, name:string) - -def func_strip_path(func_name): - filename, line, name = func_name - return os.path.basename(filename), line, name - -def func_get_function_name(func): - return func[2] - -def func_std_string(func_name): # match what old profile produced - if func_name[:2] == ('~', 0): - # special case for built-in functions - name = func_name[2] - if name.startswith('<') and name.endswith('>'): - return '{%s}' % name[1:-1] - else: - return name - else: - return "%s:%d(%s)" % func_name - -#************************************************************************** -# The following functions combine statistics for pairs functions. -# The bulk of the processing involves correctly handling "call" lists, -# such as callers and callees. -#************************************************************************** - -def add_func_stats(target, source): - """Add together all the stats for two profile entries.""" - cc, nc, tt, ct, callers = source - t_cc, t_nc, t_tt, t_ct, t_callers = target - return (cc+t_cc, nc+t_nc, tt+t_tt, ct+t_ct, - add_callers(t_callers, callers)) - -def add_callers(target, source): - """Combine two caller lists in a single list.""" - new_callers = {} - for func, caller in target.items(): - new_callers[func] = caller - for func, caller in source.items(): - if func in new_callers: - if isinstance(caller, tuple): - # format used by cProfile - new_callers[func] = tuple(i + j for i, j in zip(caller, new_callers[func])) - else: - # format used by profile - new_callers[func] += caller - else: - new_callers[func] = caller - return new_callers - -def count_calls(callers): - """Sum the caller statistics to get total number of calls received.""" - nc = 0 - for calls in callers.values(): - nc += calls - return nc - -#************************************************************************** -# The following functions support printing of reports -#************************************************************************** - -def f8(x): - return "%8.3f" % x - -#************************************************************************** -# Statistics browser added by ESR, April 2001 -#************************************************************************** - -if __name__ == '__main__': - import cmd - try: - import readline # noqa: F401 - except ImportError: - pass - - class ProfileBrowser(cmd.Cmd): - def __init__(self, profile=None): - cmd.Cmd.__init__(self) - self.prompt = "% " - self.stats = None - self.stream = sys.stdout - if profile is not None: - self.do_read(profile) - - def generic(self, fn, line): - args = line.split() - processed = [] - for term in args: - try: - processed.append(int(term)) - continue - except ValueError: - pass - try: - frac = float(term) - if frac > 1 or frac < 0: - print("Fraction argument must be in [0, 1]", file=self.stream) - continue - processed.append(frac) - continue - except ValueError: - pass - processed.append(term) - if self.stats: - getattr(self.stats, fn)(*processed) - else: - print("No statistics object is loaded.", file=self.stream) - return 0 - def generic_help(self): - print("Arguments may be:", file=self.stream) - print("* An integer maximum number of entries to print.", file=self.stream) - print("* A decimal fractional number between 0 and 1, controlling", file=self.stream) - print(" what fraction of selected entries to print.", file=self.stream) - print("* A regular expression; only entries with function names", file=self.stream) - print(" that match it are printed.", file=self.stream) - - def do_add(self, line): - if self.stats: - try: - self.stats.add(line) - except OSError as e: - print("Failed to load statistics for %s: %s" % (line, e), file=self.stream) - else: - print("No statistics object is loaded.", file=self.stream) - return 0 - def help_add(self): - print("Add profile info from given file to current statistics object.", file=self.stream) - - def do_callees(self, line): - return self.generic('print_callees', line) - def help_callees(self): - print("Print callees statistics from the current stat object.", file=self.stream) - self.generic_help() - - def do_callers(self, line): - return self.generic('print_callers', line) - def help_callers(self): - print("Print callers statistics from the current stat object.", file=self.stream) - self.generic_help() - - def do_EOF(self, line): - print("", file=self.stream) - return 1 - def help_EOF(self): - print("Leave the profile browser.", file=self.stream) - - def do_quit(self, line): - return 1 - def help_quit(self): - print("Leave the profile browser.", file=self.stream) - - def do_read(self, line): - if line: - try: - self.stats = Stats(line) - except OSError as err: - print(err.args[1], file=self.stream) - return - except Exception as err: - print(err.__class__.__name__ + ':', err, file=self.stream) - return - self.prompt = line + "% " - elif len(self.prompt) > 2: - line = self.prompt[:-2] - self.do_read(line) - else: - print("No statistics object is current -- cannot reload.", file=self.stream) - return 0 - def help_read(self): - print("Read in profile data from a specified file.", file=self.stream) - print("Without argument, reload the current file.", file=self.stream) - - def do_reverse(self, line): - if self.stats: - self.stats.reverse_order() - else: - print("No statistics object is loaded.", file=self.stream) - return 0 - def help_reverse(self): - print("Reverse the sort order of the profiling report.", file=self.stream) - - def do_sort(self, line): - if not self.stats: - print("No statistics object is loaded.", file=self.stream) - return - abbrevs = self.stats.get_sort_arg_defs() - if line and all((x in abbrevs) for x in line.split()): - self.stats.sort_stats(*line.split()) - else: - print("Valid sort keys (unique prefixes are accepted):", file=self.stream) - for (key, value) in Stats.sort_arg_dict_default.items(): - print("%s -- %s" % (key, value[1]), file=self.stream) - return 0 - def help_sort(self): - print("Sort profile data according to specified keys.", file=self.stream) - print("(Typing `sort' without arguments lists valid keys.)", file=self.stream) - def complete_sort(self, text, *args): - return [a for a in Stats.sort_arg_dict_default if a.startswith(text)] - - def do_stats(self, line): - return self.generic('print_stats', line) - def help_stats(self): - print("Print statistics from the current stat object.", file=self.stream) - self.generic_help() - - def do_strip(self, line): - if self.stats: - self.stats.strip_dirs() - else: - print("No statistics object is loaded.", file=self.stream) - def help_strip(self): - print("Strip leading path information from filenames in the report.", file=self.stream) - - def help_help(self): - print("Show help for a given command.", file=self.stream) - - def postcmd(self, stop, line): - if stop: - return stop - return None - - if len(sys.argv) > 1: - initprofile = sys.argv[1] - else: - initprofile = None - try: - browser = ProfileBrowser(initprofile) - for profile in sys.argv[2:]: - browser.do_add(profile) - print("Welcome to the profile statistics browser.", file=browser.stream) - browser.cmdloop() - print("Goodbye.", file=browser.stream) - except KeyboardInterrupt: - pass - -# That's all, folks. diff --git a/Python314_4_x86_Template/Lib/pty.py b/Python314_4_x86_Template/Lib/pty.py deleted file mode 100644 index 4b25ac32c..000000000 --- a/Python314_4_x86_Template/Lib/pty.py +++ /dev/null @@ -1,182 +0,0 @@ -"""Pseudo terminal utilities.""" - -# Bugs: No signal handling. Doesn't set slave termios and window size. -# Only tested on Linux, FreeBSD, and macOS. -# See: W. Richard Stevens. 1992. Advanced Programming in the -# UNIX Environment. Chapter 19. -# Author: Steen Lumholt -- with additions by Guido. - -from select import select -import os -import sys -import tty - -# names imported directly for test mocking purposes -from os import close, waitpid -from tty import setraw, tcgetattr, tcsetattr - -__all__ = ["openpty", "fork", "spawn"] - -STDIN_FILENO = 0 -STDOUT_FILENO = 1 -STDERR_FILENO = 2 - -CHILD = 0 - -def openpty(): - """openpty() -> (master_fd, slave_fd) - Open a pty master/slave pair, using os.openpty() if possible.""" - - try: - return os.openpty() - except (AttributeError, OSError): - pass - master_fd, slave_name = _open_terminal() - - slave_fd = os.open(slave_name, os.O_RDWR) - try: - from fcntl import ioctl, I_PUSH - except ImportError: - return master_fd, slave_fd - try: - ioctl(slave_fd, I_PUSH, "ptem") - ioctl(slave_fd, I_PUSH, "ldterm") - except OSError: - pass - return master_fd, slave_fd - -def _open_terminal(): - """Open pty master and return (master_fd, tty_name).""" - for x in 'pqrstuvwxyzPQRST': - for y in '0123456789abcdef': - pty_name = '/dev/pty' + x + y - try: - fd = os.open(pty_name, os.O_RDWR) - except OSError: - continue - return (fd, '/dev/tty' + x + y) - raise OSError('out of pty devices') - - -def fork(): - """fork() -> (pid, master_fd) - Fork and make the child a session leader with a controlling terminal.""" - - try: - pid, fd = os.forkpty() - except (AttributeError, OSError): - pass - else: - if pid == CHILD: - try: - os.setsid() - except OSError: - # os.forkpty() already set us session leader - pass - return pid, fd - - master_fd, slave_fd = openpty() - pid = os.fork() - if pid == CHILD: - os.close(master_fd) - os.login_tty(slave_fd) - else: - os.close(slave_fd) - - # Parent and child process. - return pid, master_fd - -def _read(fd): - """Default read function.""" - return os.read(fd, 1024) - -def _copy(master_fd, master_read=_read, stdin_read=_read): - """Parent copy loop. - Copies - pty master -> standard output (master_read) - standard input -> pty master (stdin_read)""" - if os.get_blocking(master_fd): - # If we write more than tty/ndisc is willing to buffer, we may block - # indefinitely. So we set master_fd to non-blocking temporarily during - # the copy operation. - os.set_blocking(master_fd, False) - try: - _copy(master_fd, master_read=master_read, stdin_read=stdin_read) - finally: - # restore blocking mode for backwards compatibility - os.set_blocking(master_fd, True) - return - high_waterlevel = 4096 - stdin_avail = master_fd != STDIN_FILENO - stdout_avail = master_fd != STDOUT_FILENO - i_buf = b'' - o_buf = b'' - while 1: - rfds = [] - wfds = [] - if stdin_avail and len(i_buf) < high_waterlevel: - rfds.append(STDIN_FILENO) - if stdout_avail and len(o_buf) < high_waterlevel: - rfds.append(master_fd) - if stdout_avail and len(o_buf) > 0: - wfds.append(STDOUT_FILENO) - if len(i_buf) > 0: - wfds.append(master_fd) - - rfds, wfds, _xfds = select(rfds, wfds, []) - - if STDOUT_FILENO in wfds: - try: - n = os.write(STDOUT_FILENO, o_buf) - o_buf = o_buf[n:] - except OSError: - stdout_avail = False - - if master_fd in rfds: - # Some OSes signal EOF by returning an empty byte string, - # some throw OSErrors. - try: - data = master_read(master_fd) - except OSError: - data = b"" - if not data: # Reached EOF. - return # Assume the child process has exited and is - # unreachable, so we clean up. - o_buf += data - - if master_fd in wfds: - n = os.write(master_fd, i_buf) - i_buf = i_buf[n:] - - if stdin_avail and STDIN_FILENO in rfds: - data = stdin_read(STDIN_FILENO) - if not data: - stdin_avail = False - else: - i_buf += data - -def spawn(argv, master_read=_read, stdin_read=_read): - """Create a spawned process.""" - if isinstance(argv, str): - argv = (argv,) - sys.audit('pty.spawn', argv) - - pid, master_fd = fork() - if pid == CHILD: - os.execlp(argv[0], *argv) - - try: - mode = tcgetattr(STDIN_FILENO) - setraw(STDIN_FILENO) - restore = True - except tty.error: # This is the same as termios.error - restore = False - - try: - _copy(master_fd, master_read, stdin_read) - finally: - if restore: - tcsetattr(STDIN_FILENO, tty.TCSAFLUSH, mode) - - close(master_fd) - return waitpid(pid, 0)[1] diff --git a/Python314_4_x86_Template/Lib/py_compile.py b/Python314_4_x86_Template/Lib/py_compile.py deleted file mode 100644 index 43d8ec90f..000000000 --- a/Python314_4_x86_Template/Lib/py_compile.py +++ /dev/null @@ -1,212 +0,0 @@ -"""Routine to "compile" a .py file to a .pyc file. - -This module has intimate knowledge of the format of .pyc files. -""" - -import enum -import importlib._bootstrap_external -import importlib.machinery -import importlib.util -import os -import os.path -import sys -import traceback - -__all__ = ["compile", "main", "PyCompileError", "PycInvalidationMode"] - - -class PyCompileError(Exception): - """Exception raised when an error occurs while attempting to - compile the file. - - To raise this exception, use - - raise PyCompileError(exc_type,exc_value,file[,msg]) - - where - - exc_type: exception type to be used in error message - type name can be accesses as class variable - 'exc_type_name' - - exc_value: exception value to be used in error message - can be accesses as class variable 'exc_value' - - file: name of file being compiled to be used in error message - can be accesses as class variable 'file' - - msg: string message to be written as error message - If no value is given, a default exception message will be - given, consistent with 'standard' py_compile output. - message (or default) can be accesses as class variable - 'msg' - - """ - - def __init__(self, exc_type, exc_value, file, msg=''): - exc_type_name = exc_type.__name__ - if exc_type is SyntaxError: - tbtext = ''.join(traceback.format_exception_only( - exc_type, exc_value)) - errmsg = tbtext.replace('File "<string>"', 'File "%s"' % file) - else: - errmsg = "Sorry: %s: %s" % (exc_type_name,exc_value) - - Exception.__init__(self,msg or errmsg,exc_type_name,exc_value,file) - - self.exc_type_name = exc_type_name - self.exc_value = exc_value - self.file = file - self.msg = msg or errmsg - - def __str__(self): - return self.msg - - -class PycInvalidationMode(enum.Enum): - TIMESTAMP = 1 - CHECKED_HASH = 2 - UNCHECKED_HASH = 3 - - -def _get_default_invalidation_mode(): - if os.environ.get('SOURCE_DATE_EPOCH'): - return PycInvalidationMode.CHECKED_HASH - else: - return PycInvalidationMode.TIMESTAMP - - -def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1, - invalidation_mode=None, quiet=0): - """Byte-compile one Python source file to Python bytecode. - - :param file: The source file name. - :param cfile: The target byte compiled file name. When not given, this - defaults to the PEP 3147/PEP 488 location. - :param dfile: Purported file name, i.e. the file name that shows up in - error messages. Defaults to the source file name. - :param doraise: Flag indicating whether or not an exception should be - raised when a compile error is found. If an exception occurs and this - flag is set to False, a string indicating the nature of the exception - will be printed, and the function will return to the caller. If an - exception occurs and this flag is set to True, a PyCompileError - exception will be raised. - :param optimize: The optimization level for the compiler. Valid values - are -1, 0, 1 and 2. A value of -1 means to use the optimization - level of the current interpreter, as given by -O command line options. - :param invalidation_mode: - :param quiet: Return full output with False or 0, errors only with 1, - and no output with 2. - - :return: Path to the resulting byte compiled file. - - Note that it isn't necessary to byte-compile Python modules for - execution efficiency -- Python itself byte-compiles a module when - it is loaded, and if it can, writes out the bytecode to the - corresponding .pyc file. - - However, if a Python installation is shared between users, it is a - good idea to byte-compile all modules upon installation, since - other users may not be able to write in the source directories, - and thus they won't be able to write the .pyc file, and then - they would be byte-compiling every module each time it is loaded. - This can slow down program start-up considerably. - - See compileall.py for a script/module that uses this module to - byte-compile all installed files (or all files in selected - directories). - - Do note that FileExistsError is raised if cfile ends up pointing at a - non-regular file or symlink. Because the compilation uses a file renaming, - the resulting file would be regular and thus not the same type of file as - it was previously. - """ - if invalidation_mode is None: - invalidation_mode = _get_default_invalidation_mode() - if cfile is None: - if optimize >= 0: - optimization = optimize if optimize >= 1 else '' - cfile = importlib.util.cache_from_source(file, - optimization=optimization) - else: - cfile = importlib.util.cache_from_source(file) - if os.path.islink(cfile): - msg = ('{} is a symlink and will be changed into a regular file if ' - 'import writes a byte-compiled file to it') - raise FileExistsError(msg.format(cfile)) - elif os.path.exists(cfile) and not os.path.isfile(cfile): - msg = ('{} is a non-regular file and will be changed into a regular ' - 'one if import writes a byte-compiled file to it') - raise FileExistsError(msg.format(cfile)) - loader = importlib.machinery.SourceFileLoader('<py_compile>', file) - source_bytes = loader.get_data(file) - try: - code = loader.source_to_code(source_bytes, dfile or file, - _optimize=optimize) - except Exception as err: - py_exc = PyCompileError(err.__class__, err, dfile or file) - if quiet < 2: - if doraise: - raise py_exc - else: - sys.stderr.write(py_exc.msg + '\n') - return - try: - dirname = os.path.dirname(cfile) - if dirname: - os.makedirs(dirname) - except FileExistsError: - pass - if invalidation_mode == PycInvalidationMode.TIMESTAMP: - source_stats = loader.path_stats(file) - bytecode = importlib._bootstrap_external._code_to_timestamp_pyc( - code, source_stats['mtime'], source_stats['size']) - else: - source_hash = importlib.util.source_hash(source_bytes) - bytecode = importlib._bootstrap_external._code_to_hash_pyc( - code, - source_hash, - (invalidation_mode == PycInvalidationMode.CHECKED_HASH), - ) - mode = importlib._bootstrap_external._calc_mode(file) - importlib._bootstrap_external._write_atomic(cfile, bytecode, mode) - return cfile - - -def main(): - import argparse - - description = 'A simple command-line interface for py_compile module.' - parser = argparse.ArgumentParser(description=description, color=True) - parser.add_argument( - '-q', '--quiet', - action='store_true', - help='Suppress error output', - ) - parser.add_argument( - 'filenames', - nargs='+', - help='Files to compile', - ) - args = parser.parse_args() - if args.filenames == ['-']: - filenames = [filename.rstrip('\n') for filename in sys.stdin.readlines()] - else: - filenames = args.filenames - for filename in filenames: - try: - compile(filename, doraise=True) - except PyCompileError as error: - if args.quiet: - parser.exit(1) - else: - parser.exit(1, error.msg) - except OSError as error: - if args.quiet: - parser.exit(1) - else: - parser.exit(1, str(error)) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/pyclbr.py b/Python314_4_x86_Template/Lib/pyclbr.py deleted file mode 100644 index 37f86995d..000000000 --- a/Python314_4_x86_Template/Lib/pyclbr.py +++ /dev/null @@ -1,314 +0,0 @@ -"""Parse a Python module and describe its classes and functions. - -Parse enough of a Python file to recognize imports and class and -function definitions, and to find out the superclasses of a class. - -The interface consists of a single function: - readmodule_ex(module, path=None) -where module is the name of a Python module, and path is an optional -list of directories where the module is to be searched. If present, -path is prepended to the system search path sys.path. The return value -is a dictionary. The keys of the dictionary are the names of the -classes and functions defined in the module (including classes that are -defined via the from XXX import YYY construct). The values are -instances of classes Class and Function. One special key/value pair is -present for packages: the key '__path__' has a list as its value which -contains the package search path. - -Classes and Functions have a common superclass: _Object. Every instance -has the following attributes: - module -- name of the module; - name -- name of the object; - file -- file in which the object is defined; - lineno -- line in the file where the object's definition starts; - end_lineno -- line in the file where the object's definition ends; - parent -- parent of this object, if any; - children -- nested objects contained in this object. -The 'children' attribute is a dictionary mapping names to objects. - -Instances of Function describe functions with the attributes from _Object, -plus the following: - is_async -- if a function is defined with an 'async' prefix - -Instances of Class describe classes with the attributes from _Object, -plus the following: - super -- list of super classes (Class instances if possible); - methods -- mapping of method names to beginning line numbers. -If the name of a super class is not recognized, the corresponding -entry in the list of super classes is not a class instance but a -string giving the name of the super class. Since import statements -are recognized and imported modules are scanned as well, this -shouldn't happen often. -""" - -import ast -import sys -import importlib.util - -__all__ = ["readmodule", "readmodule_ex", "Class", "Function"] - -_modules = {} # Initialize cache of modules we've seen. - - -class _Object: - "Information about Python class or function." - def __init__(self, module, name, file, lineno, end_lineno, parent): - self.module = module - self.name = name - self.file = file - self.lineno = lineno - self.end_lineno = end_lineno - self.parent = parent - self.children = {} - if parent is not None: - parent.children[name] = self - - -# Odd Function and Class signatures are for back-compatibility. -class Function(_Object): - "Information about a Python function, including methods." - def __init__(self, module, name, file, lineno, - parent=None, is_async=False, *, end_lineno=None): - super().__init__(module, name, file, lineno, end_lineno, parent) - self.is_async = is_async - if isinstance(parent, Class): - parent.methods[name] = lineno - - -class Class(_Object): - "Information about a Python class." - def __init__(self, module, name, super_, file, lineno, - parent=None, *, end_lineno=None): - super().__init__(module, name, file, lineno, end_lineno, parent) - self.super = super_ or [] - self.methods = {} - - -# These 2 functions are used in these tests -# Lib/test/test_pyclbr, Lib/idlelib/idle_test/test_browser.py -def _nest_function(ob, func_name, lineno, end_lineno, is_async=False): - "Return a Function after nesting within ob." - return Function(ob.module, func_name, ob.file, lineno, - parent=ob, is_async=is_async, end_lineno=end_lineno) - -def _nest_class(ob, class_name, lineno, end_lineno, super=None): - "Return a Class after nesting within ob." - return Class(ob.module, class_name, super, ob.file, lineno, - parent=ob, end_lineno=end_lineno) - - -def readmodule(module, path=None): - """Return Class objects for the top-level classes in module. - - This is the original interface, before Functions were added. - """ - - res = {} - for key, value in _readmodule(module, path or []).items(): - if isinstance(value, Class): - res[key] = value - return res - -def readmodule_ex(module, path=None): - """Return a dictionary with all functions and classes in module. - - Search for module in PATH + sys.path. - If possible, include imported superclasses. - Do this by reading source, without importing (and executing) it. - """ - return _readmodule(module, path or []) - - -def _readmodule(module, path, inpackage=None): - """Do the hard work for readmodule[_ex]. - - If inpackage is given, it must be the dotted name of the package in - which we are searching for a submodule, and then PATH must be the - package search path; otherwise, we are searching for a top-level - module, and path is combined with sys.path. - """ - # Compute the full module name (prepending inpackage if set). - if inpackage is not None: - fullmodule = "%s.%s" % (inpackage, module) - else: - fullmodule = module - - # Check in the cache. - if fullmodule in _modules: - return _modules[fullmodule] - - # Initialize the dict for this module's contents. - tree = {} - - # Check if it is a built-in module; we don't do much for these. - if module in sys.builtin_module_names and inpackage is None: - _modules[module] = tree - return tree - - # Check for a dotted module name. - i = module.rfind('.') - if i >= 0: - package = module[:i] - submodule = module[i+1:] - parent = _readmodule(package, path, inpackage) - if inpackage is not None: - package = "%s.%s" % (inpackage, package) - if not '__path__' in parent: - raise ImportError('No package named {}'.format(package)) - return _readmodule(submodule, parent['__path__'], package) - - # Search the path for the module. - f = None - if inpackage is not None: - search_path = path - else: - search_path = path + sys.path - spec = importlib.util._find_spec_from_path(fullmodule, search_path) - if spec is None: - raise ModuleNotFoundError(f"no module named {fullmodule!r}", name=fullmodule) - _modules[fullmodule] = tree - # Is module a package? - if spec.submodule_search_locations is not None: - tree['__path__'] = spec.submodule_search_locations - try: - source = spec.loader.get_source(fullmodule) - except (AttributeError, ImportError): - # If module is not Python source, we cannot do anything. - return tree - else: - if source is None: - return tree - - fname = spec.loader.get_filename(fullmodule) - return _create_tree(fullmodule, path, fname, source, tree, inpackage) - - -class _ModuleBrowser(ast.NodeVisitor): - def __init__(self, module, path, file, tree, inpackage): - self.path = path - self.tree = tree - self.file = file - self.module = module - self.inpackage = inpackage - self.stack = [] - - def visit_ClassDef(self, node): - bases = [] - for base in node.bases: - name = ast.unparse(base) - if name in self.tree: - # We know this super class. - bases.append(self.tree[name]) - elif len(names := name.split(".")) > 1: - # Super class form is module.class: - # look in module for class. - *_, module, class_ = names - if module in _modules: - bases.append(_modules[module].get(class_, name)) - else: - bases.append(name) - - parent = self.stack[-1] if self.stack else None - class_ = Class(self.module, node.name, bases, self.file, node.lineno, - parent=parent, end_lineno=node.end_lineno) - if parent is None: - self.tree[node.name] = class_ - self.stack.append(class_) - self.generic_visit(node) - self.stack.pop() - - def visit_FunctionDef(self, node, *, is_async=False): - parent = self.stack[-1] if self.stack else None - function = Function(self.module, node.name, self.file, node.lineno, - parent, is_async, end_lineno=node.end_lineno) - if parent is None: - self.tree[node.name] = function - self.stack.append(function) - self.generic_visit(node) - self.stack.pop() - - def visit_AsyncFunctionDef(self, node): - self.visit_FunctionDef(node, is_async=True) - - def visit_Import(self, node): - if node.col_offset != 0: - return - - for module in node.names: - try: - try: - _readmodule(module.name, self.path, self.inpackage) - except ImportError: - _readmodule(module.name, []) - except (ImportError, SyntaxError): - # If we can't find or parse the imported module, - # too bad -- don't die here. - continue - - def visit_ImportFrom(self, node): - if node.col_offset != 0: - return - try: - module = "." * node.level - if node.module: - module += node.module - module = _readmodule(module, self.path, self.inpackage) - except (ImportError, SyntaxError): - return - - for name in node.names: - if name.name in module: - self.tree[name.asname or name.name] = module[name.name] - elif name.name == "*": - for import_name, import_value in module.items(): - if import_name.startswith("_"): - continue - self.tree[import_name] = import_value - - -def _create_tree(fullmodule, path, fname, source, tree, inpackage): - mbrowser = _ModuleBrowser(fullmodule, path, fname, tree, inpackage) - mbrowser.visit(ast.parse(source)) - return mbrowser.tree - - -def _main(): - "Print module output (default this file) for quick visual check." - import os - try: - mod = sys.argv[1] - except: - mod = __file__ - if os.path.exists(mod): - path = [os.path.dirname(mod)] - mod = os.path.basename(mod) - if mod.lower().endswith(".py"): - mod = mod[:-3] - else: - path = [] - tree = readmodule_ex(mod, path) - lineno_key = lambda a: getattr(a, 'lineno', 0) - objs = sorted(tree.values(), key=lineno_key, reverse=True) - indent_level = 2 - while objs: - obj = objs.pop() - if isinstance(obj, list): - # Value is a __path__ key. - continue - if not hasattr(obj, 'indent'): - obj.indent = 0 - - if isinstance(obj, _Object): - new_objs = sorted(obj.children.values(), - key=lineno_key, reverse=True) - for ob in new_objs: - ob.indent = obj.indent + indent_level - objs.extend(new_objs) - if isinstance(obj, Class): - print("{}class {} {} {}" - .format(' ' * obj.indent, obj.name, obj.super, obj.lineno)) - elif isinstance(obj, Function): - print("{}def {} {}".format(' ' * obj.indent, obj.name, obj.lineno)) - -if __name__ == "__main__": - _main() diff --git a/Python314_4_x86_Template/Lib/pydoc.py b/Python314_4_x86_Template/Lib/pydoc.py deleted file mode 100644 index 1f8a6ef3d..000000000 --- a/Python314_4_x86_Template/Lib/pydoc.py +++ /dev/null @@ -1,2887 +0,0 @@ -"""Generate Python documentation in HTML or text for interactive use. - -At the Python interactive prompt, calling help(thing) on a Python object -documents the object, and calling help() starts up an interactive -help session. - -Or, at the shell command line outside of Python: - -Run "pydoc <name>" to show documentation on something. <name> may be -the name of a function, module, package, or a dotted reference to a -class or function within a module or module in a package. If the -argument contains a path segment delimiter (e.g. slash on Unix, -backslash on Windows) it is treated as the path to a Python source file. - -Run "pydoc -k <keyword>" to search for a keyword in the synopsis lines -of all available modules. - -Run "pydoc -n <hostname>" to start an HTTP server with the given -hostname (default: localhost) on the local machine. - -Run "pydoc -p <port>" to start an HTTP server on the given port on the -local machine. Port number 0 can be used to get an arbitrary unused port. - -Run "pydoc -b" to start an HTTP server on an arbitrary unused port and -open a web browser to interactively browse documentation. Combine with -the -n and -p options to control the hostname and port used. - -Run "pydoc -w <name>" to write out the HTML documentation for a module -to a file named "<name>.html". - -Module docs for core modules are assumed to be in - - https://docs.python.org/X.Y/library/ - -This can be overridden by setting the PYTHONDOCS environment variable -to a different URL or to a local directory containing the Library -Reference Manual pages. -""" -__all__ = ['help'] -__author__ = "Ka-Ping Yee <ping@lfw.org>" -__date__ = "26 February 2001" - -__credits__ = """Guido van Rossum, for an excellent programming language. -Tommy Burnette, the original creator of manpy. -Paul Prescod, for all his work on onlinehelp. -Richard Chamberlain, for the first implementation of textdoc. -""" - -# Known bugs that can't be fixed here: -# - synopsis() cannot be prevented from clobbering existing -# loaded modules. -# - If the __file__ attribute on a module is a relative path and -# the current directory is changed with os.chdir(), an incorrect -# path will be displayed. - -import ast -import __future__ -import builtins -import importlib._bootstrap -import importlib._bootstrap_external -import importlib.machinery -import importlib.util -import inspect -import io -import os -import pkgutil -import platform -import re -import sys -import sysconfig -import textwrap -import time -import tokenize -import urllib.parse -import warnings -from annotationlib import Format -from collections import deque -from reprlib import Repr -from traceback import format_exception_only - -from _pyrepl.pager import (get_pager, pipe_pager, - plain_pager, tempfile_pager, tty_pager) - -# Expose plain() as pydoc.plain() -from _pyrepl.pager import plain # noqa: F401 - - -# --------------------------------------------------------- old names - -getpager = get_pager -pipepager = pipe_pager -plainpager = plain_pager -tempfilepager = tempfile_pager -ttypager = tty_pager - - -# --------------------------------------------------------- common routines - -def pathdirs(): - """Convert sys.path into a list of absolute, existing, unique paths.""" - dirs = [] - normdirs = [] - for dir in sys.path: - dir = os.path.abspath(dir or '.') - normdir = os.path.normcase(dir) - if normdir not in normdirs and os.path.isdir(dir): - dirs.append(dir) - normdirs.append(normdir) - return dirs - -def _findclass(func): - cls = sys.modules.get(func.__module__) - if cls is None: - return None - for name in func.__qualname__.split('.')[:-1]: - cls = getattr(cls, name) - if not inspect.isclass(cls): - return None - return cls - -def _finddoc(obj): - if inspect.ismethod(obj): - name = obj.__func__.__name__ - self = obj.__self__ - if (inspect.isclass(self) and - getattr(getattr(self, name, None), '__func__') is obj.__func__): - # classmethod - cls = self - else: - cls = self.__class__ - elif inspect.isfunction(obj): - name = obj.__name__ - cls = _findclass(obj) - if cls is None or getattr(cls, name) is not obj: - return None - elif inspect.isbuiltin(obj): - name = obj.__name__ - self = obj.__self__ - if (inspect.isclass(self) and - self.__qualname__ + '.' + name == obj.__qualname__): - # classmethod - cls = self - else: - cls = self.__class__ - # Should be tested before isdatadescriptor(). - elif isinstance(obj, property): - name = obj.__name__ - cls = _findclass(obj.fget) - if cls is None or getattr(cls, name) is not obj: - return None - elif inspect.ismethoddescriptor(obj) or inspect.isdatadescriptor(obj): - name = obj.__name__ - cls = obj.__objclass__ - if getattr(cls, name) is not obj: - return None - if inspect.ismemberdescriptor(obj): - slots = getattr(cls, '__slots__', None) - if isinstance(slots, dict) and name in slots: - return slots[name] - else: - return None - for base in cls.__mro__: - try: - doc = _getowndoc(getattr(base, name)) - except AttributeError: - continue - if doc is not None: - return doc - return None - -def _getowndoc(obj): - """Get the documentation string for an object if it is not - inherited from its class.""" - try: - doc = object.__getattribute__(obj, '__doc__') - if doc is None: - return None - if obj is not type: - typedoc = type(obj).__doc__ - if isinstance(typedoc, str) and typedoc == doc: - return None - return doc - except AttributeError: - return None - -def _getdoc(object): - """Get the documentation string for an object. - - All tabs are expanded to spaces. To clean up docstrings that are - indented to line up with blocks of code, any whitespace than can be - uniformly removed from the second line onwards is removed.""" - doc = _getowndoc(object) - if doc is None: - try: - doc = _finddoc(object) - except (AttributeError, TypeError): - return None - if not isinstance(doc, str): - return None - return inspect.cleandoc(doc) - -def getdoc(object): - """Get the doc string or comments for an object.""" - result = _getdoc(object) or inspect.getcomments(object) - return result and re.sub('^ *\n', '', result.rstrip()) or '' - -def splitdoc(doc): - """Split a doc string into a synopsis line (if any) and the rest.""" - lines = doc.strip().split('\n') - if len(lines) == 1: - return lines[0], '' - elif len(lines) >= 2 and not lines[1].rstrip(): - return lines[0], '\n'.join(lines[2:]) - return '', '\n'.join(lines) - -def _getargspec(object): - try: - signature = inspect.signature(object, annotation_format=Format.STRING) - if signature: - name = getattr(object, '__name__', '') - # <lambda> function are always single-line and should not be formatted - max_width = (80 - len(name)) if name != '<lambda>' else None - return signature.format(max_width=max_width, quote_annotation_strings=False) - except (ValueError, TypeError): - argspec = getattr(object, '__text_signature__', None) - if argspec: - if argspec[:2] == '($': - argspec = '(' + argspec[2:] - if getattr(object, '__self__', None) is not None: - # Strip the bound argument. - m = re.match(r'\(\w+(?:(?=\))|,\s*(?:/(?:(?=\))|,\s*))?)', argspec) - if m: - argspec = '(' + argspec[m.end():] - return argspec - return None - -def classname(object, modname): - """Get a class name and qualify it with a module name if necessary.""" - name = object.__name__ - if object.__module__ != modname: - name = object.__module__ + '.' + name - return name - -def parentname(object, modname): - """Get a name of the enclosing class (qualified it with a module name - if necessary) or module.""" - if '.' in object.__qualname__: - name = object.__qualname__.rpartition('.')[0] - if object.__module__ != modname and object.__module__ is not None: - return object.__module__ + '.' + name - else: - return name - else: - if object.__module__ != modname: - return object.__module__ - -def isdata(object): - """Check if an object is of a type that probably means it's data.""" - return not (inspect.ismodule(object) or inspect.isclass(object) or - inspect.isroutine(object) or inspect.isframe(object) or - inspect.istraceback(object) or inspect.iscode(object)) - -def replace(text, *pairs): - """Do a series of global replacements on a string.""" - while pairs: - text = pairs[1].join(text.split(pairs[0])) - pairs = pairs[2:] - return text - -def cram(text, maxlen): - """Omit part of a string if needed to make it fit in a maximum length.""" - if len(text) > maxlen: - pre = max(0, (maxlen-3)//2) - post = max(0, maxlen-3-pre) - return text[:pre] + '...' + text[len(text)-post:] - return text - -_re_stripid = re.compile(r' at 0x[0-9a-f]{6,16}(>+)$', re.IGNORECASE) -def stripid(text): - """Remove the hexadecimal id from a Python object representation.""" - # The behaviour of %p is implementation-dependent in terms of case. - return _re_stripid.sub(r'\1', text) - -def _is_bound_method(fn): - """ - Returns True if fn is a bound method, regardless of whether - fn was implemented in Python or in C. - """ - if inspect.ismethod(fn): - return True - if inspect.isbuiltin(fn): - self = getattr(fn, '__self__', None) - return not (inspect.ismodule(self) or (self is None)) - return False - - -def allmethods(cl): - methods = {} - for key, value in inspect.getmembers(cl, inspect.isroutine): - methods[key] = 1 - for base in cl.__bases__: - methods.update(allmethods(base)) # all your base are belong to us - for key in methods.keys(): - methods[key] = getattr(cl, key) - return methods - -def _split_list(s, predicate): - """Split sequence s via predicate, and return pair ([true], [false]). - - The return value is a 2-tuple of lists, - ([x for x in s if predicate(x)], - [x for x in s if not predicate(x)]) - """ - - yes = [] - no = [] - for x in s: - if predicate(x): - yes.append(x) - else: - no.append(x) - return yes, no - -_future_feature_names = set(__future__.all_feature_names) - -def visiblename(name, all=None, obj=None): - """Decide whether to show documentation on a variable.""" - # Certain special names are redundant or internal. - # XXX Remove __initializing__? - if name in {'__author__', '__builtins__', '__cached__', '__credits__', - '__date__', '__doc__', '__file__', '__spec__', - '__loader__', '__module__', '__name__', '__package__', - '__path__', '__qualname__', '__slots__', '__version__', - '__static_attributes__', '__firstlineno__', - '__annotate_func__', '__annotations_cache__'}: - return 0 - # Private names are hidden, but special names are displayed. - if name.startswith('__') and name.endswith('__'): return 1 - # Namedtuples have public fields and methods with a single leading underscore - if name.startswith('_') and hasattr(obj, '_fields'): - return True - # Ignore __future__ imports. - if obj is not __future__ and name in _future_feature_names: - if isinstance(getattr(obj, name, None), __future__._Feature): - return False - if all is not None: - # only document that which the programmer exported in __all__ - return name in all - else: - return not name.startswith('_') - -def classify_class_attrs(object): - """Wrap inspect.classify_class_attrs, with fixup for data descriptors and bound methods.""" - results = [] - for (name, kind, cls, value) in inspect.classify_class_attrs(object): - if inspect.isdatadescriptor(value): - kind = 'data descriptor' - if isinstance(value, property) and value.fset is None: - kind = 'readonly property' - elif kind == 'method' and _is_bound_method(value): - kind = 'static method' - results.append((name, kind, cls, value)) - return results - -def sort_attributes(attrs, object): - 'Sort the attrs list in-place by _fields and then alphabetically by name' - # This allows data descriptors to be ordered according - # to a _fields attribute if present. - fields = getattr(object, '_fields', []) - try: - field_order = {name : i-len(fields) for (i, name) in enumerate(fields)} - except TypeError: - field_order = {} - keyfunc = lambda attr: (field_order.get(attr[0], 0), attr[0]) - attrs.sort(key=keyfunc) - -# ----------------------------------------------------- module manipulation - -def ispackage(path): - """Guess whether a path refers to a package directory.""" - warnings.warn('The pydoc.ispackage() function is deprecated', - DeprecationWarning, stacklevel=2) - if os.path.isdir(path): - for ext in ('.py', '.pyc'): - if os.path.isfile(os.path.join(path, '__init__' + ext)): - return True - return False - -def source_synopsis(file): - """Return the one-line summary of a file object, if present""" - - string = '' - try: - tokens = tokenize.generate_tokens(file.readline) - for tok_type, tok_string, _, _, _ in tokens: - if tok_type == tokenize.STRING: - string += tok_string - elif tok_type == tokenize.NEWLINE: - with warnings.catch_warnings(): - # Ignore the "invalid escape sequence" warning. - warnings.simplefilter("ignore", SyntaxWarning) - docstring = ast.literal_eval(string) - if not isinstance(docstring, str): - return None - return docstring.strip().split('\n')[0].strip() - elif tok_type == tokenize.OP and tok_string in ('(', ')'): - string += tok_string - elif tok_type not in (tokenize.COMMENT, tokenize.NL, tokenize.ENCODING): - return None - except (tokenize.TokenError, UnicodeDecodeError, SyntaxError): - return None - return None - -def synopsis(filename, cache={}): - """Get the one-line summary out of a module file.""" - mtime = os.stat(filename).st_mtime - lastupdate, result = cache.get(filename, (None, None)) - if lastupdate is None or lastupdate < mtime: - # Look for binary suffixes first, falling back to source. - if filename.endswith(tuple(importlib.machinery.BYTECODE_SUFFIXES)): - loader_cls = importlib.machinery.SourcelessFileLoader - elif filename.endswith(tuple(importlib.machinery.EXTENSION_SUFFIXES)): - loader_cls = importlib.machinery.ExtensionFileLoader - else: - loader_cls = None - # Now handle the choice. - if loader_cls is None: - # Must be a source file. - try: - file = tokenize.open(filename) - except OSError: - # module can't be opened, so skip it - return None - # text modules can be directly examined - with file: - result = source_synopsis(file) - else: - # Must be a binary module, which has to be imported. - loader = loader_cls('__temp__', filename) - # XXX We probably don't need to pass in the loader here. - spec = importlib.util.spec_from_file_location('__temp__', filename, - loader=loader) - try: - module = importlib._bootstrap._load(spec) - except: - return None - del sys.modules['__temp__'] - result = module.__doc__.splitlines()[0] if module.__doc__ else None - # Cache the result. - cache[filename] = (mtime, result) - return result - -class ErrorDuringImport(Exception): - """Errors that occurred while trying to import something to document it.""" - def __init__(self, filename, exc_info): - if not isinstance(exc_info, tuple): - assert isinstance(exc_info, BaseException) - self.exc = type(exc_info) - self.value = exc_info - self.tb = exc_info.__traceback__ - else: - warnings.warn("A tuple value for exc_info is deprecated, use an exception instance", - DeprecationWarning) - - self.exc, self.value, self.tb = exc_info - self.filename = filename - - def __str__(self): - exc = self.exc.__name__ - return 'problem in %s - %s: %s' % (self.filename, exc, self.value) - -def importfile(path): - """Import a Python source file or compiled file given its path.""" - magic = importlib.util.MAGIC_NUMBER - with open(path, 'rb') as file: - is_bytecode = magic == file.read(len(magic)) - filename = os.path.basename(path) - name, ext = os.path.splitext(filename) - if is_bytecode: - loader = importlib._bootstrap_external.SourcelessFileLoader(name, path) - else: - loader = importlib._bootstrap_external.SourceFileLoader(name, path) - # XXX We probably don't need to pass in the loader here. - spec = importlib.util.spec_from_file_location(name, path, loader=loader) - try: - return importlib._bootstrap._load(spec) - except BaseException as err: - raise ErrorDuringImport(path, err) - -def safeimport(path, forceload=0, cache={}): - """Import a module; handle errors; return None if the module isn't found. - - If the module *is* found but an exception occurs, it's wrapped in an - ErrorDuringImport exception and reraised. Unlike __import__, if a - package path is specified, the module at the end of the path is returned, - not the package at the beginning. If the optional 'forceload' argument - is 1, we reload the module from disk (unless it's a dynamic extension).""" - try: - # If forceload is 1 and the module has been previously loaded from - # disk, we always have to reload the module. Checking the file's - # mtime isn't good enough (e.g. the module could contain a class - # that inherits from another module that has changed). - if forceload and path in sys.modules: - if path not in sys.builtin_module_names: - # Remove the module from sys.modules and re-import to try - # and avoid problems with partially loaded modules. - # Also remove any submodules because they won't appear - # in the newly loaded module's namespace if they're already - # in sys.modules. - subs = [m for m in sys.modules if m.startswith(path + '.')] - for key in [path] + subs: - # Prevent garbage collection. - cache[key] = sys.modules[key] - del sys.modules[key] - module = importlib.import_module(path) - except BaseException as err: - # Did the error occur before or after the module was found? - if path in sys.modules: - # An error occurred while executing the imported module. - raise ErrorDuringImport(sys.modules[path].__file__, err) - elif type(err) is SyntaxError: - # A SyntaxError occurred before we could execute the module. - raise ErrorDuringImport(err.filename, err) - elif isinstance(err, ImportError) and err.name == path: - # No such module in the path. - return None - else: - # Some other error occurred during the importing process. - raise ErrorDuringImport(path, err) - return module - -# ---------------------------------------------------- formatter base class - -class Doc: - - PYTHONDOCS = os.environ.get("PYTHONDOCS", - "https://docs.python.org/%d.%d/library" - % sys.version_info[:2]) - - def document(self, object, name=None, *args): - """Generate documentation for an object.""" - args = (object, name) + args - # 'try' clause is to attempt to handle the possibility that inspect - # identifies something in a way that pydoc itself has issues handling; - # think 'super' and how it is a descriptor (which raises the exception - # by lacking a __name__ attribute) and an instance. - try: - if inspect.ismodule(object): return self.docmodule(*args) - if inspect.isclass(object): return self.docclass(*args) - if inspect.isroutine(object): return self.docroutine(*args) - except AttributeError: - pass - if inspect.isdatadescriptor(object): return self.docdata(*args) - return self.docother(*args) - - def fail(self, object, name=None, *args): - """Raise an exception for unimplemented types.""" - message = "don't know how to document object%s of type %s" % ( - name and ' ' + repr(name), type(object).__name__) - raise TypeError(message) - - docmodule = docclass = docroutine = docother = docproperty = docdata = fail - - def getdocloc(self, object, basedir=sysconfig.get_path('stdlib')): - """Return the location of module docs or None""" - - try: - file = inspect.getabsfile(object) - except TypeError: - file = '(built-in)' - - docloc = os.environ.get("PYTHONDOCS", self.PYTHONDOCS) - - basedir = os.path.normcase(basedir) - if (isinstance(object, type(os)) and - (object.__name__ in ('errno', 'exceptions', 'gc', - 'marshal', 'posix', 'signal', 'sys', - '_thread', 'zipimport') or - (file.startswith(basedir) and - not file.startswith(os.path.join(basedir, 'site-packages')))) and - object.__name__ not in ('xml.etree', 'test.test_pydoc.pydoc_mod')): - - try: - from pydoc_data import module_docs - except ImportError: - module_docs = None - - if module_docs and object.__name__ in module_docs.module_docs: - doc_name = module_docs.module_docs[object.__name__] - if docloc.startswith(("http://", "https://")): - docloc = "{}/{}".format(docloc.rstrip("/"), doc_name) - else: - docloc = os.path.join(docloc, doc_name) - else: - docloc = None - else: - docloc = None - return docloc - -# -------------------------------------------- HTML documentation generator - -class HTMLRepr(Repr): - """Class for safely making an HTML representation of a Python object.""" - def __init__(self): - Repr.__init__(self) - self.maxlist = self.maxtuple = 20 - self.maxdict = 10 - self.maxstring = self.maxother = 100 - - def escape(self, text): - return replace(text, '&', '&amp;', '<', '&lt;', '>', '&gt;') - - def repr(self, object): - return Repr.repr(self, object) - - def repr1(self, x, level): - if hasattr(type(x), '__name__'): - methodname = 'repr_' + '_'.join(type(x).__name__.split()) - if hasattr(self, methodname): - return getattr(self, methodname)(x, level) - return self.escape(cram(stripid(repr(x)), self.maxother)) - - def repr_string(self, x, level): - test = cram(x, self.maxstring) - testrepr = repr(test) - if '\\' in test and '\\' not in replace(testrepr, r'\\', ''): - # Backslashes are only literal in the string and are never - # needed to make any special characters, so show a raw string. - return 'r' + testrepr[0] + self.escape(test) + testrepr[0] - return re.sub(r'((\\[\\abfnrtv\'"]|\\[0-9]..|\\x..|\\u....)+)', - r'<span class="repr">\1</span>', - self.escape(testrepr)) - - repr_str = repr_string - - def repr_instance(self, x, level): - try: - return self.escape(cram(stripid(repr(x)), self.maxstring)) - except: - return self.escape('<%s instance>' % x.__class__.__name__) - - repr_unicode = repr_string - -class HTMLDoc(Doc): - """Formatter class for HTML documentation.""" - - # ------------------------------------------- HTML formatting utilities - - _repr_instance = HTMLRepr() - repr = _repr_instance.repr - escape = _repr_instance.escape - - def page(self, title, contents): - """Format an HTML page.""" - return '''\ -<!DOCTYPE html> -<html lang="en"> -<head> -<meta charset="utf-8"> -<title>Python: %s</title> -</head><body> -%s -</body></html>''' % (title, contents) - - def heading(self, title, extras=''): - """Format a page heading.""" - return ''' -<table class="heading"> -<tr class="heading-text decor"> -<td class="title">&nbsp;<br>%s</td> -<td class="extra">%s</td></tr></table> - ''' % (title, extras or '&nbsp;') - - def section(self, title, cls, contents, width=6, - prelude='', marginalia=None, gap='&nbsp;'): - """Format a section with a heading.""" - if marginalia is None: - marginalia = '<span class="code">' + '&nbsp;' * width + '</span>' - result = '''<p> -<table class="section"> -<tr class="decor %s-decor heading-text"> -<td class="section-title" colspan=3>&nbsp;<br>%s</td></tr> - ''' % (cls, title) - if prelude: - result = result + ''' -<tr><td class="decor %s-decor" rowspan=2>%s</td> -<td class="decor %s-decor" colspan=2>%s</td></tr> -<tr><td>%s</td>''' % (cls, marginalia, cls, prelude, gap) - else: - result = result + ''' -<tr><td class="decor %s-decor">%s</td><td>%s</td>''' % (cls, marginalia, gap) - - return result + '\n<td class="singlecolumn">%s</td></tr></table>' % contents - - def bigsection(self, title, *args): - """Format a section with a big heading.""" - title = '<strong class="bigsection">%s</strong>' % title - return self.section(title, *args) - - def preformat(self, text): - """Format literal preformatted text.""" - text = self.escape(text.expandtabs()) - return replace(text, '\n\n', '\n \n', '\n\n', '\n \n', - ' ', '&nbsp;', '\n', '<br>\n') - - def multicolumn(self, list, format): - """Format a list of items into a multi-column list.""" - result = '' - rows = (len(list) + 3) // 4 - for col in range(4): - result = result + '<td class="multicolumn">' - for i in range(rows*col, rows*col+rows): - if i < len(list): - result = result + format(list[i]) + '<br>\n' - result = result + '</td>' - return '<table><tr>%s</tr></table>' % result - - def grey(self, text): return '<span class="grey">%s</span>' % text - - def namelink(self, name, *dicts): - """Make a link for an identifier, given name-to-URL mappings.""" - for dict in dicts: - if name in dict: - return '<a href="%s">%s</a>' % (dict[name], name) - return name - - def classlink(self, object, modname): - """Make a link for a class.""" - name, module = object.__name__, sys.modules.get(object.__module__) - if hasattr(module, name) and getattr(module, name) is object: - return '<a href="%s.html#%s">%s</a>' % ( - module.__name__, name, classname(object, modname)) - return classname(object, modname) - - def parentlink(self, object, modname): - """Make a link for the enclosing class or module.""" - link = None - name, module = object.__name__, sys.modules.get(object.__module__) - if hasattr(module, name) and getattr(module, name) is object: - if '.' in object.__qualname__: - name = object.__qualname__.rpartition('.')[0] - if object.__module__ != modname: - link = '%s.html#%s' % (module.__name__, name) - else: - link = '#%s' % name - else: - if object.__module__ != modname: - link = '%s.html' % module.__name__ - if link: - return '<a href="%s">%s</a>' % (link, parentname(object, modname)) - else: - return parentname(object, modname) - - def modulelink(self, object): - """Make a link for a module.""" - return '<a href="%s.html">%s</a>' % (object.__name__, object.__name__) - - def modpkglink(self, modpkginfo): - """Make a link for a module or package to display in an index.""" - name, path, ispackage, shadowed = modpkginfo - if shadowed: - return self.grey(name) - if path: - url = '%s.%s.html' % (path, name) - else: - url = '%s.html' % name - if ispackage: - text = '<strong>%s</strong>&nbsp;(package)' % name - else: - text = name - return '<a href="%s">%s</a>' % (url, text) - - def filelink(self, url, path): - """Make a link to source file.""" - return '<a href="file:%s">%s</a>' % (url, path) - - def markup(self, text, escape=None, funcs={}, classes={}, methods={}): - """Mark up some plain text, given a context of symbols to look for. - Each context dictionary maps object names to anchor names.""" - escape = escape or self.escape - results = [] - here = 0 - pattern = re.compile(r'\b((http|https|ftp)://\S+[\w/]|' - r'RFC[- ]?(\d+)|' - r'PEP[- ]?(\d+)|' - r'(self\.)?(\w+))') - while match := pattern.search(text, here): - start, end = match.span() - results.append(escape(text[here:start])) - - all, scheme, rfc, pep, selfdot, name = match.groups() - if scheme: - url = escape(all).replace('"', '&quot;') - results.append('<a href="%s">%s</a>' % (url, url)) - elif rfc: - url = 'https://www.rfc-editor.org/rfc/rfc%d.txt' % int(rfc) - results.append('<a href="%s">%s</a>' % (url, escape(all))) - elif pep: - url = 'https://peps.python.org/pep-%04d/' % int(pep) - results.append('<a href="%s">%s</a>' % (url, escape(all))) - elif selfdot: - # Create a link for methods like 'self.method(...)' - # and use <strong> for attributes like 'self.attr' - if text[end:end+1] == '(': - results.append('self.' + self.namelink(name, methods)) - else: - results.append('self.<strong>%s</strong>' % name) - elif text[end:end+1] == '(': - results.append(self.namelink(name, methods, funcs, classes)) - else: - results.append(self.namelink(name, classes)) - here = end - results.append(escape(text[here:])) - return ''.join(results) - - # ---------------------------------------------- type-specific routines - - def formattree(self, tree, modname, parent=None): - """Produce HTML for a class tree as given by inspect.getclasstree().""" - result = '' - for entry in tree: - if isinstance(entry, tuple): - c, bases = entry - result = result + '<dt class="heading-text">' - result = result + self.classlink(c, modname) - if bases and bases != (parent,): - parents = [] - for base in bases: - parents.append(self.classlink(base, modname)) - result = result + '(' + ', '.join(parents) + ')' - result = result + '\n</dt>' - elif isinstance(entry, list): - result = result + '<dd>\n%s</dd>\n' % self.formattree( - entry, modname, c) - return '<dl>\n%s</dl>\n' % result - - def docmodule(self, object, name=None, mod=None, *ignored): - """Produce HTML documentation for a module object.""" - name = object.__name__ # ignore the passed-in name - try: - all = object.__all__ - except AttributeError: - all = None - parts = name.split('.') - links = [] - for i in range(len(parts)-1): - links.append( - '<a href="%s.html" class="white">%s</a>' % - ('.'.join(parts[:i+1]), parts[i])) - linkedname = '.'.join(links + parts[-1:]) - head = '<strong class="title">%s</strong>' % linkedname - try: - path = inspect.getabsfile(object) - url = urllib.parse.quote(path) - filelink = self.filelink(url, path) - except TypeError: - filelink = '(built-in)' - info = [] - if hasattr(object, '__version__'): - version = str(object.__version__) - if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': - version = version[11:-1].strip() - info.append('version %s' % self.escape(version)) - if hasattr(object, '__date__'): - info.append(self.escape(str(object.__date__))) - if info: - head = head + ' (%s)' % ', '.join(info) - docloc = self.getdocloc(object) - if docloc is not None: - docloc = '<br><a href="%(docloc)s">Module Reference</a>' % locals() - else: - docloc = '' - result = self.heading(head, '<a href=".">index</a><br>' + filelink + docloc) - - modules = inspect.getmembers(object, inspect.ismodule) - - classes, cdict = [], {} - for key, value in inspect.getmembers(object, inspect.isclass): - # if __all__ exists, believe it. Otherwise use old heuristic. - if (all is not None or - (inspect.getmodule(value) or object) is object): - if visiblename(key, all, object): - classes.append((key, value)) - cdict[key] = cdict[value] = '#' + key - for key, value in classes: - for base in value.__bases__: - key, modname = base.__name__, base.__module__ - module = sys.modules.get(modname) - if modname != name and module and hasattr(module, key): - if getattr(module, key) is base: - if not key in cdict: - cdict[key] = cdict[base] = modname + '.html#' + key - funcs, fdict = [], {} - for key, value in inspect.getmembers(object, inspect.isroutine): - # if __all__ exists, believe it. Otherwise use a heuristic. - if (all is not None - or inspect.isbuiltin(value) - or (inspect.getmodule(value) or object) is object): - if visiblename(key, all, object): - funcs.append((key, value)) - fdict[key] = '#-' + key - if inspect.isfunction(value): fdict[value] = fdict[key] - data = [] - for key, value in inspect.getmembers(object, isdata): - if visiblename(key, all, object): - data.append((key, value)) - - doc = self.markup(getdoc(object), self.preformat, fdict, cdict) - doc = doc and '<span class="code">%s</span>' % doc - result = result + '<p>%s</p>\n' % doc - - if hasattr(object, '__path__'): - modpkgs = [] - for importer, modname, ispkg in pkgutil.iter_modules(object.__path__): - modpkgs.append((modname, name, ispkg, 0)) - modpkgs.sort() - contents = self.multicolumn(modpkgs, self.modpkglink) - result = result + self.bigsection( - 'Package Contents', 'pkg-content', contents) - elif modules: - contents = self.multicolumn( - modules, lambda t: self.modulelink(t[1])) - result = result + self.bigsection( - 'Modules', 'pkg-content', contents) - - if classes: - classlist = [value for (key, value) in classes] - contents = [ - self.formattree(inspect.getclasstree(classlist, 1), name)] - for key, value in classes: - contents.append(self.document(value, key, name, fdict, cdict)) - result = result + self.bigsection( - 'Classes', 'index', ' '.join(contents)) - if funcs: - contents = [] - for key, value in funcs: - contents.append(self.document(value, key, name, fdict, cdict)) - result = result + self.bigsection( - 'Functions', 'functions', ' '.join(contents)) - if data: - contents = [] - for key, value in data: - contents.append(self.document(value, key)) - result = result + self.bigsection( - 'Data', 'data', '<br>\n'.join(contents)) - if hasattr(object, '__author__'): - contents = self.markup(str(object.__author__), self.preformat) - result = result + self.bigsection('Author', 'author', contents) - if hasattr(object, '__credits__'): - contents = self.markup(str(object.__credits__), self.preformat) - result = result + self.bigsection('Credits', 'credits', contents) - - return result - - def docclass(self, object, name=None, mod=None, funcs={}, classes={}, - *ignored): - """Produce HTML documentation for a class object.""" - realname = object.__name__ - name = name or realname - bases = object.__bases__ - - contents = [] - push = contents.append - - # Cute little class to pump out a horizontal rule between sections. - class HorizontalRule: - def __init__(self): - self.needone = 0 - def maybe(self): - if self.needone: - push('<hr>\n') - self.needone = 1 - hr = HorizontalRule() - - # List the mro, if non-trivial. - mro = deque(inspect.getmro(object)) - if len(mro) > 2: - hr.maybe() - push('<dl><dt>Method resolution order:</dt>\n') - for base in mro: - push('<dd>%s</dd>\n' % self.classlink(base, - object.__module__)) - push('</dl>\n') - - def spill(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - try: - value = getattr(object, name) - except Exception: - # Some descriptors may meet a failure in their __get__. - # (bug #1785) - push(self.docdata(value, name, mod)) - else: - push(self.document(value, name, mod, - funcs, classes, mdict, object, homecls)) - push('\n') - return attrs - - def spilldescriptors(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - push(self.docdata(value, name, mod)) - return attrs - - def spilldata(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - base = self.docother(getattr(object, name), name, mod) - doc = getdoc(value) - if not doc: - push('<dl><dt>%s</dl>\n' % base) - else: - doc = self.markup(getdoc(value), self.preformat, - funcs, classes, mdict) - doc = '<dd><span class="code">%s</span>' % doc - push('<dl><dt>%s%s</dl>\n' % (base, doc)) - push('\n') - return attrs - - attrs = [(name, kind, cls, value) - for name, kind, cls, value in classify_class_attrs(object) - if visiblename(name, obj=object)] - - mdict = {} - for key, kind, homecls, value in attrs: - mdict[key] = anchor = '#' + name + '-' + key - try: - value = getattr(object, name) - except Exception: - # Some descriptors may meet a failure in their __get__. - # (bug #1785) - pass - try: - # The value may not be hashable (e.g., a data attr with - # a dict or list value). - mdict[value] = anchor - except TypeError: - pass - - while attrs: - if mro: - thisclass = mro.popleft() - else: - thisclass = attrs[0][2] - attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass) - - if object is not builtins.object and thisclass is builtins.object: - attrs = inherited - continue - elif thisclass is object: - tag = 'defined here' - else: - tag = 'inherited from %s' % self.classlink(thisclass, - object.__module__) - tag += ':<br>\n' - - sort_attributes(attrs, object) - - # Pump out the attrs, segregated by kind. - attrs = spill('Methods %s' % tag, attrs, - lambda t: t[1] == 'method') - attrs = spill('Class methods %s' % tag, attrs, - lambda t: t[1] == 'class method') - attrs = spill('Static methods %s' % tag, attrs, - lambda t: t[1] == 'static method') - attrs = spilldescriptors("Readonly properties %s" % tag, attrs, - lambda t: t[1] == 'readonly property') - attrs = spilldescriptors('Data descriptors %s' % tag, attrs, - lambda t: t[1] == 'data descriptor') - attrs = spilldata('Data and other attributes %s' % tag, attrs, - lambda t: t[1] == 'data') - assert attrs == [] - attrs = inherited - - contents = ''.join(contents) - - if name == realname: - title = '<a name="%s">class <strong>%s</strong></a>' % ( - name, realname) - else: - title = '<strong>%s</strong> = <a name="%s">class %s</a>' % ( - name, name, realname) - if bases: - parents = [] - for base in bases: - parents.append(self.classlink(base, object.__module__)) - title = title + '(%s)' % ', '.join(parents) - - decl = '' - argspec = _getargspec(object) - if argspec and argspec != '()': - decl = name + self.escape(argspec) + '\n\n' - - doc = getdoc(object) - if decl: - doc = decl + (doc or '') - doc = self.markup(doc, self.preformat, funcs, classes, mdict) - doc = doc and '<span class="code">%s<br>&nbsp;</span>' % doc - - return self.section(title, 'title', contents, 3, doc) - - def formatvalue(self, object): - """Format an argument default value as text.""" - return self.grey('=' + self.repr(object)) - - def docroutine(self, object, name=None, mod=None, - funcs={}, classes={}, methods={}, cl=None, homecls=None): - """Produce HTML documentation for a function or method object.""" - realname = object.__name__ - name = name or realname - if homecls is None: - homecls = cl - anchor = ('' if cl is None else cl.__name__) + '-' + name - note = '' - skipdocs = False - imfunc = None - if _is_bound_method(object): - imself = object.__self__ - if imself is cl: - imfunc = getattr(object, '__func__', None) - elif inspect.isclass(imself): - note = ' class method of %s' % self.classlink(imself, mod) - else: - note = ' method of %s instance' % self.classlink( - imself.__class__, mod) - elif (inspect.ismethoddescriptor(object) or - inspect.ismethodwrapper(object)): - try: - objclass = object.__objclass__ - except AttributeError: - pass - else: - if cl is None: - note = ' unbound %s method' % self.classlink(objclass, mod) - elif objclass is not homecls: - note = ' from ' + self.classlink(objclass, mod) - else: - imfunc = object - if inspect.isfunction(imfunc) and homecls is not None and ( - imfunc.__module__ != homecls.__module__ or - imfunc.__qualname__ != homecls.__qualname__ + '.' + realname): - pname = self.parentlink(imfunc, mod) - if pname: - note = ' from %s' % pname - - if (inspect.iscoroutinefunction(object) or - inspect.isasyncgenfunction(object)): - asyncqualifier = 'async ' - else: - asyncqualifier = '' - - if name == realname: - title = '<a name="%s"><strong>%s</strong></a>' % (anchor, realname) - else: - if (cl is not None and - inspect.getattr_static(cl, realname, []) is object): - reallink = '<a href="#%s">%s</a>' % ( - cl.__name__ + '-' + realname, realname) - skipdocs = True - if note.startswith(' from '): - note = '' - else: - reallink = realname - title = '<a name="%s"><strong>%s</strong></a> = %s' % ( - anchor, name, reallink) - argspec = None - if inspect.isroutine(object): - argspec = _getargspec(object) - if argspec and realname == '<lambda>': - title = '<strong>%s</strong> <em>lambda</em> ' % name - # XXX lambda's won't usually have func_annotations['return'] - # since the syntax doesn't support but it is possible. - # So removing parentheses isn't truly safe. - if not object.__annotations__: - argspec = argspec[1:-1] # remove parentheses - if not argspec: - argspec = '(...)' - - decl = asyncqualifier + title + self.escape(argspec) + (note and - self.grey('<span class="heading-text">%s</span>' % note)) - - if skipdocs: - return '<dl><dt>%s</dt></dl>\n' % decl - else: - doc = self.markup( - getdoc(object), self.preformat, funcs, classes, methods) - doc = doc and '<dd><span class="code">%s</span></dd>' % doc - return '<dl><dt>%s</dt>%s</dl>\n' % (decl, doc) - - def docdata(self, object, name=None, mod=None, cl=None, *ignored): - """Produce html documentation for a data descriptor.""" - results = [] - push = results.append - - if name: - push('<dl><dt><strong>%s</strong></dt>\n' % name) - doc = self.markup(getdoc(object), self.preformat) - if doc: - push('<dd><span class="code">%s</span></dd>\n' % doc) - push('</dl>\n') - - return ''.join(results) - - docproperty = docdata - - def docother(self, object, name=None, mod=None, *ignored): - """Produce HTML documentation for a data object.""" - lhs = name and '<strong>%s</strong> = ' % name or '' - return lhs + self.repr(object) - - def index(self, dir, shadowed=None): - """Generate an HTML index for a directory of modules.""" - modpkgs = [] - if shadowed is None: shadowed = {} - for importer, name, ispkg in pkgutil.iter_modules([dir]): - if any((0xD800 <= ord(ch) <= 0xDFFF) for ch in name): - # ignore a module if its name contains a surrogate character - continue - modpkgs.append((name, '', ispkg, name in shadowed)) - shadowed[name] = 1 - - modpkgs.sort() - contents = self.multicolumn(modpkgs, self.modpkglink) - return self.bigsection(dir, 'index', contents) - -# -------------------------------------------- text documentation generator - -class TextRepr(Repr): - """Class for safely making a text representation of a Python object.""" - def __init__(self): - Repr.__init__(self) - self.maxlist = self.maxtuple = 20 - self.maxdict = 10 - self.maxstring = self.maxother = 100 - - def repr1(self, x, level): - if hasattr(type(x), '__name__'): - methodname = 'repr_' + '_'.join(type(x).__name__.split()) - if hasattr(self, methodname): - return getattr(self, methodname)(x, level) - return cram(stripid(repr(x)), self.maxother) - - def repr_string(self, x, level): - test = cram(x, self.maxstring) - testrepr = repr(test) - if '\\' in test and '\\' not in replace(testrepr, r'\\', ''): - # Backslashes are only literal in the string and are never - # needed to make any special characters, so show a raw string. - return 'r' + testrepr[0] + test + testrepr[0] - return testrepr - - repr_str = repr_string - - def repr_instance(self, x, level): - try: - return cram(stripid(repr(x)), self.maxstring) - except: - return '<%s instance>' % x.__class__.__name__ - -class TextDoc(Doc): - """Formatter class for text documentation.""" - - # ------------------------------------------- text formatting utilities - - _repr_instance = TextRepr() - repr = _repr_instance.repr - - def bold(self, text): - """Format a string in bold by overstriking.""" - return ''.join(ch + '\b' + ch for ch in text) - - def indent(self, text, prefix=' '): - """Indent text by prepending a given prefix to each line.""" - if not text: return '' - lines = [(prefix + line).rstrip() for line in text.split('\n')] - return '\n'.join(lines) - - def section(self, title, contents): - """Format a section with a given heading.""" - clean_contents = self.indent(contents).rstrip() - return self.bold(title) + '\n' + clean_contents + '\n\n' - - # ---------------------------------------------- type-specific routines - - def formattree(self, tree, modname, parent=None, prefix=''): - """Render in text a class tree as returned by inspect.getclasstree().""" - result = '' - for entry in tree: - if isinstance(entry, tuple): - c, bases = entry - result = result + prefix + classname(c, modname) - if bases and bases != (parent,): - parents = (classname(c, modname) for c in bases) - result = result + '(%s)' % ', '.join(parents) - result = result + '\n' - elif isinstance(entry, list): - result = result + self.formattree( - entry, modname, c, prefix + ' ') - return result - - def docmodule(self, object, name=None, mod=None, *ignored): - """Produce text documentation for a given module object.""" - name = object.__name__ # ignore the passed-in name - synop, desc = splitdoc(getdoc(object)) - result = self.section('NAME', name + (synop and ' - ' + synop)) - all = getattr(object, '__all__', None) - docloc = self.getdocloc(object) - if docloc is not None: - result = result + self.section('MODULE REFERENCE', docloc + """ - -The following documentation is automatically generated from the Python -source files. It may be incomplete, incorrect or include features that -are considered implementation detail and may vary between Python -implementations. When in doubt, consult the module reference at the -location listed above. -""") - - if desc: - result = result + self.section('DESCRIPTION', desc) - - classes = [] - for key, value in inspect.getmembers(object, inspect.isclass): - # if __all__ exists, believe it. Otherwise use old heuristic. - if (all is not None - or (inspect.getmodule(value) or object) is object): - if visiblename(key, all, object): - classes.append((key, value)) - funcs = [] - for key, value in inspect.getmembers(object, inspect.isroutine): - # if __all__ exists, believe it. Otherwise use a heuristic. - if (all is not None - or inspect.isbuiltin(value) - or (inspect.getmodule(value) or object) is object): - if visiblename(key, all, object): - funcs.append((key, value)) - data = [] - for key, value in inspect.getmembers(object, isdata): - if visiblename(key, all, object): - data.append((key, value)) - - modpkgs = [] - modpkgs_names = set() - if hasattr(object, '__path__'): - for importer, modname, ispkg in pkgutil.iter_modules(object.__path__): - modpkgs_names.add(modname) - if ispkg: - modpkgs.append(modname + ' (package)') - else: - modpkgs.append(modname) - - modpkgs.sort() - result = result + self.section( - 'PACKAGE CONTENTS', '\n'.join(modpkgs)) - - # Detect submodules as sometimes created by C extensions - submodules = [] - for key, value in inspect.getmembers(object, inspect.ismodule): - if value.__name__.startswith(name + '.') and key not in modpkgs_names: - submodules.append(key) - if submodules: - submodules.sort() - result = result + self.section( - 'SUBMODULES', '\n'.join(submodules)) - - if classes: - classlist = [value for key, value in classes] - contents = [self.formattree( - inspect.getclasstree(classlist, 1), name)] - for key, value in classes: - contents.append(self.document(value, key, name)) - result = result + self.section('CLASSES', '\n'.join(contents)) - - if funcs: - contents = [] - for key, value in funcs: - contents.append(self.document(value, key, name)) - result = result + self.section('FUNCTIONS', '\n'.join(contents)) - - if data: - contents = [] - for key, value in data: - contents.append(self.docother(value, key, name, maxlen=70)) - result = result + self.section('DATA', '\n'.join(contents)) - - if hasattr(object, '__version__'): - version = str(object.__version__) - if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': - version = version[11:-1].strip() - result = result + self.section('VERSION', version) - if hasattr(object, '__date__'): - result = result + self.section('DATE', str(object.__date__)) - if hasattr(object, '__author__'): - result = result + self.section('AUTHOR', str(object.__author__)) - if hasattr(object, '__credits__'): - result = result + self.section('CREDITS', str(object.__credits__)) - try: - file = inspect.getabsfile(object) - except TypeError: - file = '(built-in)' - result = result + self.section('FILE', file) - return result - - def docclass(self, object, name=None, mod=None, *ignored): - """Produce text documentation for a given class object.""" - realname = object.__name__ - name = name or realname - bases = object.__bases__ - - def makename(c, m=object.__module__): - return classname(c, m) - - if name == realname: - title = 'class ' + self.bold(realname) - else: - title = self.bold(name) + ' = class ' + realname - if bases: - parents = map(makename, bases) - title = title + '(%s)' % ', '.join(parents) - - contents = [] - push = contents.append - - argspec = _getargspec(object) - if argspec and argspec != '()': - push(name + argspec + '\n') - - doc = getdoc(object) - if doc: - push(doc + '\n') - - # List the mro, if non-trivial. - mro = deque(inspect.getmro(object)) - if len(mro) > 2: - push("Method resolution order:") - for base in mro: - push(' ' + makename(base)) - push('') - - # List the built-in subclasses, if any: - subclasses = sorted( - (str(cls.__name__) for cls in type.__subclasses__(object) - if (not cls.__name__.startswith("_") and - getattr(cls, '__module__', '') == "builtins")), - key=str.lower - ) - no_of_subclasses = len(subclasses) - MAX_SUBCLASSES_TO_DISPLAY = 4 - if subclasses: - push("Built-in subclasses:") - for subclassname in subclasses[:MAX_SUBCLASSES_TO_DISPLAY]: - push(' ' + subclassname) - if no_of_subclasses > MAX_SUBCLASSES_TO_DISPLAY: - push(' ... and ' + - str(no_of_subclasses - MAX_SUBCLASSES_TO_DISPLAY) + - ' other subclasses') - push('') - - # Cute little class to pump out a horizontal rule between sections. - class HorizontalRule: - def __init__(self): - self.needone = 0 - def maybe(self): - if self.needone: - push('-' * 70) - self.needone = 1 - hr = HorizontalRule() - - def spill(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - try: - value = getattr(object, name) - except Exception: - # Some descriptors may meet a failure in their __get__. - # (bug #1785) - push(self.docdata(value, name, mod)) - else: - push(self.document(value, - name, mod, object, homecls)) - return attrs - - def spilldescriptors(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - push(self.docdata(value, name, mod)) - return attrs - - def spilldata(msg, attrs, predicate): - ok, attrs = _split_list(attrs, predicate) - if ok: - hr.maybe() - push(msg) - for name, kind, homecls, value in ok: - doc = getdoc(value) - try: - obj = getattr(object, name) - except AttributeError: - obj = homecls.__dict__[name] - push(self.docother(obj, name, mod, maxlen=70, doc=doc) + - '\n') - return attrs - - attrs = [(name, kind, cls, value) - for name, kind, cls, value in classify_class_attrs(object) - if visiblename(name, obj=object)] - - while attrs: - if mro: - thisclass = mro.popleft() - else: - thisclass = attrs[0][2] - attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass) - - if object is not builtins.object and thisclass is builtins.object: - attrs = inherited - continue - elif thisclass is object: - tag = "defined here" - else: - tag = "inherited from %s" % classname(thisclass, - object.__module__) - - sort_attributes(attrs, object) - - # Pump out the attrs, segregated by kind. - attrs = spill("Methods %s:\n" % tag, attrs, - lambda t: t[1] == 'method') - attrs = spill("Class methods %s:\n" % tag, attrs, - lambda t: t[1] == 'class method') - attrs = spill("Static methods %s:\n" % tag, attrs, - lambda t: t[1] == 'static method') - attrs = spilldescriptors("Readonly properties %s:\n" % tag, attrs, - lambda t: t[1] == 'readonly property') - attrs = spilldescriptors("Data descriptors %s:\n" % tag, attrs, - lambda t: t[1] == 'data descriptor') - attrs = spilldata("Data and other attributes %s:\n" % tag, attrs, - lambda t: t[1] == 'data') - - assert attrs == [] - attrs = inherited - - contents = '\n'.join(contents) - if not contents: - return title + '\n' - return title + '\n' + self.indent(contents.rstrip(), ' | ') + '\n' - - def formatvalue(self, object): - """Format an argument default value as text.""" - return '=' + self.repr(object) - - def docroutine(self, object, name=None, mod=None, cl=None, homecls=None): - """Produce text documentation for a function or method object.""" - realname = object.__name__ - name = name or realname - if homecls is None: - homecls = cl - note = '' - skipdocs = False - imfunc = None - if _is_bound_method(object): - imself = object.__self__ - if imself is cl: - imfunc = getattr(object, '__func__', None) - elif inspect.isclass(imself): - note = ' class method of %s' % classname(imself, mod) - else: - note = ' method of %s instance' % classname( - imself.__class__, mod) - elif (inspect.ismethoddescriptor(object) or - inspect.ismethodwrapper(object)): - try: - objclass = object.__objclass__ - except AttributeError: - pass - else: - if cl is None: - note = ' unbound %s method' % classname(objclass, mod) - elif objclass is not homecls: - note = ' from ' + classname(objclass, mod) - else: - imfunc = object - if inspect.isfunction(imfunc) and homecls is not None and ( - imfunc.__module__ != homecls.__module__ or - imfunc.__qualname__ != homecls.__qualname__ + '.' + realname): - pname = parentname(imfunc, mod) - if pname: - note = ' from %s' % pname - - if (inspect.iscoroutinefunction(object) or - inspect.isasyncgenfunction(object)): - asyncqualifier = 'async ' - else: - asyncqualifier = '' - - if name == realname: - title = self.bold(realname) - else: - if (cl is not None and - inspect.getattr_static(cl, realname, []) is object): - skipdocs = True - if note.startswith(' from '): - note = '' - title = self.bold(name) + ' = ' + realname - argspec = None - - if inspect.isroutine(object): - argspec = _getargspec(object) - if argspec and realname == '<lambda>': - title = self.bold(name) + ' lambda ' - # XXX lambda's won't usually have func_annotations['return'] - # since the syntax doesn't support but it is possible. - # So removing parentheses isn't truly safe. - if not object.__annotations__: - argspec = argspec[1:-1] - if not argspec: - argspec = '(...)' - decl = asyncqualifier + title + argspec + note - - if skipdocs: - return decl + '\n' - else: - doc = getdoc(object) or '' - return decl + '\n' + (doc and self.indent(doc).rstrip() + '\n') - - def docdata(self, object, name=None, mod=None, cl=None, *ignored): - """Produce text documentation for a data descriptor.""" - results = [] - push = results.append - - if name: - push(self.bold(name)) - push('\n') - doc = getdoc(object) or '' - if doc: - push(self.indent(doc)) - push('\n') - return ''.join(results) - - docproperty = docdata - - def docother(self, object, name=None, mod=None, parent=None, *ignored, - maxlen=None, doc=None): - """Produce text documentation for a data object.""" - repr = self.repr(object) - if maxlen: - line = (name and name + ' = ' or '') + repr - chop = maxlen - len(line) - if chop < 0: repr = repr[:chop] + '...' - line = (name and self.bold(name) + ' = ' or '') + repr - if not doc: - doc = getdoc(object) - if doc: - line += '\n' + self.indent(str(doc)) + '\n' - return line - -class _PlainTextDoc(TextDoc): - """Subclass of TextDoc which overrides string styling""" - def bold(self, text): - return text - -# --------------------------------------------------------- user interfaces - -def pager(text, title=''): - """The first time this is called, determine what kind of pager to use.""" - global pager - pager = get_pager() - pager(text, title) - -def describe(thing): - """Produce a short description of the given thing.""" - if inspect.ismodule(thing): - if thing.__name__ in sys.builtin_module_names: - return 'built-in module ' + thing.__name__ - if hasattr(thing, '__path__'): - return 'package ' + thing.__name__ - else: - return 'module ' + thing.__name__ - if inspect.isbuiltin(thing): - return 'built-in function ' + thing.__name__ - if inspect.isgetsetdescriptor(thing): - return 'getset descriptor %s.%s.%s' % ( - thing.__objclass__.__module__, thing.__objclass__.__name__, - thing.__name__) - if inspect.ismemberdescriptor(thing): - return 'member descriptor %s.%s.%s' % ( - thing.__objclass__.__module__, thing.__objclass__.__name__, - thing.__name__) - if inspect.isclass(thing): - return 'class ' + thing.__name__ - if inspect.isfunction(thing): - return 'function ' + thing.__name__ - if inspect.ismethod(thing): - return 'method ' + thing.__name__ - if inspect.ismethodwrapper(thing): - return 'method wrapper ' + thing.__name__ - if inspect.ismethoddescriptor(thing): - try: - return 'method descriptor ' + thing.__name__ - except AttributeError: - pass - return type(thing).__name__ - -def locate(path, forceload=0): - """Locate an object by name or dotted path, importing as necessary.""" - parts = [part for part in path.split('.') if part] - module, n = None, 0 - while n < len(parts): - nextmodule = safeimport('.'.join(parts[:n+1]), forceload) - if nextmodule: module, n = nextmodule, n + 1 - else: break - if module: - object = module - else: - object = builtins - for part in parts[n:]: - try: - object = getattr(object, part) - except AttributeError: - return None - return object - -# --------------------------------------- interactive interpreter interface - -text = TextDoc() -plaintext = _PlainTextDoc() -html = HTMLDoc() - -def resolve(thing, forceload=0): - """Given an object or a path to an object, get the object and its name.""" - if isinstance(thing, str): - object = locate(thing, forceload) - if object is None: - raise ImportError('''\ -No Python documentation found for %r. -Use help() to get the interactive help utility. -Use help(str) for help on the str class.''' % thing) - return object, thing - else: - name = getattr(thing, '__name__', None) - return thing, name if isinstance(name, str) else None - -def render_doc(thing, title='Python Library Documentation: %s', forceload=0, - renderer=None): - """Render text documentation, given an object or a path to an object.""" - if renderer is None: - renderer = text - object, name = resolve(thing, forceload) - desc = describe(object) - module = inspect.getmodule(object) - if name and '.' in name: - desc += ' in ' + name[:name.rfind('.')] - elif module and module is not object: - desc += ' in module ' + module.__name__ - - if not (inspect.ismodule(object) or - inspect.isclass(object) or - inspect.isroutine(object) or - inspect.isdatadescriptor(object) or - _getdoc(object)): - # If the passed object is a piece of data or an instance, - # document its available methods instead of its value. - if hasattr(object, '__origin__'): - object = object.__origin__ - else: - object = type(object) - desc += ' object' - return title % desc + '\n\n' + renderer.document(object, name) - -def doc(thing, title='Python Library Documentation: %s', forceload=0, - output=None, is_cli=False): - """Display text documentation, given an object or a path to an object.""" - if output is None: - try: - if isinstance(thing, str): - what = thing - else: - what = getattr(thing, '__qualname__', None) - if not isinstance(what, str): - what = getattr(thing, '__name__', None) - if not isinstance(what, str): - what = type(thing).__name__ + ' object' - pager(render_doc(thing, title, forceload), f'Help on {what!s}') - except ImportError as exc: - if is_cli: - raise - print(exc) - else: - try: - s = render_doc(thing, title, forceload, plaintext) - except ImportError as exc: - s = str(exc) - output.write(s) - -def writedoc(thing, forceload=0): - """Write HTML documentation to a file in the current directory.""" - object, name = resolve(thing, forceload) - page = html.page(describe(object), html.document(object, name)) - with open(name + '.html', 'w', encoding='utf-8') as file: - file.write(page) - print('wrote', name + '.html') - -def writedocs(dir, pkgpath='', done=None): - """Write out HTML documentation for all modules in a directory tree.""" - if done is None: done = {} - for importer, modname, ispkg in pkgutil.walk_packages([dir], pkgpath): - writedoc(modname) - return - - -def _introdoc(): - import textwrap - ver = '%d.%d' % sys.version_info[:2] - if os.environ.get('PYTHON_BASIC_REPL'): - pyrepl_keys = '' - else: - # Additional help for keyboard shortcuts if enhanced REPL is used. - pyrepl_keys = ''' - You can use the following keyboard shortcuts at the main interpreter prompt. - F1: enter interactive help, F2: enter history browsing mode, F3: enter paste - mode (press again to exit). - ''' - return textwrap.dedent(f'''\ - Welcome to Python {ver}'s help utility! If this is your first time using - Python, you should definitely check out the tutorial at - https://docs.python.org/{ver}/tutorial/. - - Enter the name of any module, keyword, or topic to get help on writing - Python programs and using Python modules. To get a list of available - modules, keywords, symbols, or topics, enter "modules", "keywords", - "symbols", or "topics". - {pyrepl_keys} - Each module also comes with a one-line summary of what it does; to list - the modules whose name or summary contain a given string such as "spam", - enter "modules spam". - - To quit this help utility and return to the interpreter, - enter "q", "quit" or "exit". - ''') - -class Helper: - - # These dictionaries map a topic name to either an alias, or a tuple - # (label, seealso-items). The "label" is the label of the corresponding - # section in the .rst file under Doc/ and an index into the dictionary - # in pydoc_data/topics.py. - # - # CAUTION: if you change one of these dictionaries, be sure to adapt the - # list of needed labels in Doc/tools/extensions/pyspecific.py and - # regenerate the pydoc_data/topics.py file by running - # make pydoc-topics - # in Doc/ and copying the output file into the Lib/ directory. - - keywords = { - 'False': '', - 'None': '', - 'True': '', - 'and': 'BOOLEAN', - 'as': 'with', - 'assert': ('assert', ''), - 'async': ('async', ''), - 'await': ('await', ''), - 'break': ('break', 'while for'), - 'class': ('class', 'CLASSES SPECIALMETHODS'), - 'continue': ('continue', 'while for'), - 'def': ('function', ''), - 'del': ('del', 'BASICMETHODS'), - 'elif': 'if', - 'else': ('else', 'while for'), - 'except': 'try', - 'finally': 'try', - 'for': ('for', 'break continue while'), - 'from': 'import', - 'global': ('global', 'nonlocal NAMESPACES'), - 'if': ('if', 'TRUTHVALUE'), - 'import': ('import', 'MODULES'), - 'in': ('in', 'SEQUENCEMETHODS'), - 'is': 'COMPARISON', - 'lambda': ('lambda', 'FUNCTIONS'), - 'nonlocal': ('nonlocal', 'global NAMESPACES'), - 'not': 'BOOLEAN', - 'or': 'BOOLEAN', - 'pass': ('pass', ''), - 'raise': ('raise', 'EXCEPTIONS'), - 'return': ('return', 'FUNCTIONS'), - 'try': ('try', 'EXCEPTIONS'), - 'while': ('while', 'break continue if TRUTHVALUE'), - 'with': ('with', 'CONTEXTMANAGERS EXCEPTIONS yield'), - 'yield': ('yield', ''), - } - # Either add symbols to this dictionary or to the symbols dictionary - # directly: Whichever is easier. They are merged later. - _strprefixes = [p + q for p in ('b', 'f', 'r', 'u') for q in ("'", '"')] - _symbols_inverse = { - 'STRINGS' : ("'", "'''", '"', '"""', *_strprefixes), - 'OPERATORS' : ('+', '-', '*', '**', '/', '//', '%', '<<', '>>', '&', - '|', '^', '~', '<', '>', '<=', '>=', '==', '!=', '<>'), - 'COMPARISON' : ('<', '>', '<=', '>=', '==', '!=', '<>'), - 'UNARY' : ('-', '~'), - 'AUGMENTEDASSIGNMENT' : ('+=', '-=', '*=', '/=', '%=', '&=', '|=', - '^=', '<<=', '>>=', '**=', '//='), - 'BITWISE' : ('<<', '>>', '&', '|', '^', '~'), - 'COMPLEX' : ('j', 'J') - } - symbols = { - '%': 'OPERATORS FORMATTING', - '**': 'POWER', - ',': 'TUPLES LISTS FUNCTIONS', - '.': 'ATTRIBUTES FLOAT MODULES OBJECTS', - '...': 'ELLIPSIS', - ':': 'SLICINGS DICTIONARYLITERALS', - '@': 'def class', - '\\': 'STRINGS', - ':=': 'ASSIGNMENTEXPRESSIONS', - '_': 'PRIVATENAMES', - '__': 'PRIVATENAMES SPECIALMETHODS', - '`': 'BACKQUOTES', - '(': 'TUPLES FUNCTIONS CALLS', - ')': 'TUPLES FUNCTIONS CALLS', - '[': 'LISTS SUBSCRIPTS SLICINGS', - ']': 'LISTS SUBSCRIPTS SLICINGS' - } - for topic, symbols_ in _symbols_inverse.items(): - for symbol in symbols_: - topics = symbols.get(symbol, topic) - if topic not in topics: - topics = topics + ' ' + topic - symbols[symbol] = topics - del topic, symbols_, symbol, topics - - topics = { - 'TYPES': ('types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS ' - 'FUNCTIONS CLASSES MODULES FILES inspect'), - 'STRINGS': ('strings', 'str UNICODE SEQUENCES STRINGMETHODS ' - 'FORMATTING TYPES'), - 'STRINGMETHODS': ('string-methods', 'STRINGS FORMATTING'), - 'FORMATTING': ('formatstrings', 'OPERATORS'), - 'UNICODE': ('strings', 'encodings unicode SEQUENCES STRINGMETHODS ' - 'FORMATTING TYPES'), - 'NUMBERS': ('numbers', 'INTEGER FLOAT COMPLEX TYPES'), - 'INTEGER': ('integers', 'int range'), - 'FLOAT': ('floating', 'float math'), - 'COMPLEX': ('imaginary', 'complex cmath'), - 'SEQUENCES': ('typesseq', 'STRINGMETHODS FORMATTING range LISTS'), - 'MAPPINGS': 'DICTIONARIES', - 'FUNCTIONS': ('typesfunctions', 'def TYPES'), - 'METHODS': ('typesmethods', 'class def CLASSES TYPES'), - 'CODEOBJECTS': ('bltin-code-objects', 'compile FUNCTIONS TYPES'), - 'TYPEOBJECTS': ('bltin-type-objects', 'types TYPES'), - 'FRAMEOBJECTS': 'TYPES', - 'TRACEBACKS': 'TYPES', - 'NONE': ('bltin-null-object', ''), - 'ELLIPSIS': ('bltin-ellipsis-object', 'SLICINGS'), - 'SPECIALATTRIBUTES': ('specialattrs', ''), - 'CLASSES': ('types', 'class SPECIALMETHODS PRIVATENAMES'), - 'MODULES': ('typesmodules', 'import'), - 'PACKAGES': 'import', - 'EXPRESSIONS': ('operator-summary', 'lambda or and not in is BOOLEAN ' - 'COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER ' - 'UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES ' - 'LISTS DICTIONARIES'), - 'OPERATORS': 'EXPRESSIONS', - 'PRECEDENCE': 'EXPRESSIONS', - 'OBJECTS': ('objects', 'TYPES'), - 'SPECIALMETHODS': ('specialnames', 'BASICMETHODS ATTRIBUTEMETHODS ' - 'CALLABLEMETHODS SEQUENCEMETHODS MAPPINGMETHODS ' - 'NUMBERMETHODS CLASSES'), - 'BASICMETHODS': ('customization', 'hash repr str SPECIALMETHODS'), - 'ATTRIBUTEMETHODS': ('attribute-access', 'ATTRIBUTES SPECIALMETHODS'), - 'CALLABLEMETHODS': ('callable-types', 'CALLS SPECIALMETHODS'), - 'SEQUENCEMETHODS': ('sequence-types', 'SEQUENCES SEQUENCEMETHODS ' - 'SPECIALMETHODS'), - 'MAPPINGMETHODS': ('sequence-types', 'MAPPINGS SPECIALMETHODS'), - 'NUMBERMETHODS': ('numeric-types', 'NUMBERS AUGMENTEDASSIGNMENT ' - 'SPECIALMETHODS'), - 'EXECUTION': ('execmodel', 'NAMESPACES DYNAMICFEATURES EXCEPTIONS'), - 'NAMESPACES': ('naming', 'global nonlocal ASSIGNMENT DELETION DYNAMICFEATURES'), - 'DYNAMICFEATURES': ('dynamic-features', ''), - 'SCOPING': 'NAMESPACES', - 'FRAMES': 'NAMESPACES', - 'EXCEPTIONS': ('exceptions', 'try except finally raise'), - 'CONVERSIONS': ('conversions', ''), - 'IDENTIFIERS': ('identifiers', 'keywords SPECIALIDENTIFIERS'), - 'SPECIALIDENTIFIERS': ('id-classes', ''), - 'PRIVATENAMES': ('atom-identifiers', ''), - 'LITERALS': ('atom-literals', 'STRINGS NUMBERS TUPLELITERALS ' - 'LISTLITERALS DICTIONARYLITERALS'), - 'TUPLES': 'SEQUENCES', - 'TUPLELITERALS': ('exprlists', 'TUPLES LITERALS'), - 'LISTS': ('typesseq-mutable', 'LISTLITERALS'), - 'LISTLITERALS': ('lists', 'LISTS LITERALS'), - 'DICTIONARIES': ('typesmapping', 'DICTIONARYLITERALS'), - 'DICTIONARYLITERALS': ('dict', 'DICTIONARIES LITERALS'), - 'ATTRIBUTES': ('attribute-references', 'getattr hasattr setattr ATTRIBUTEMETHODS'), - 'SUBSCRIPTS': ('subscriptions', 'SEQUENCEMETHODS'), - 'SLICINGS': ('slicings', 'SEQUENCEMETHODS'), - 'CALLS': ('calls', 'EXPRESSIONS'), - 'POWER': ('power', 'EXPRESSIONS'), - 'UNARY': ('unary', 'EXPRESSIONS'), - 'BINARY': ('binary', 'EXPRESSIONS'), - 'SHIFTING': ('shifting', 'EXPRESSIONS'), - 'BITWISE': ('bitwise', 'EXPRESSIONS'), - 'COMPARISON': ('comparisons', 'EXPRESSIONS BASICMETHODS'), - 'BOOLEAN': ('booleans', 'EXPRESSIONS TRUTHVALUE'), - 'ASSERTION': 'assert', - 'ASSIGNMENT': ('assignment', 'AUGMENTEDASSIGNMENT'), - 'AUGMENTEDASSIGNMENT': ('augassign', 'NUMBERMETHODS'), - 'ASSIGNMENTEXPRESSIONS': ('assignment-expressions', ''), - 'DELETION': 'del', - 'RETURNING': 'return', - 'IMPORTING': 'import', - 'CONDITIONAL': 'if', - 'LOOPING': ('compound', 'for while break continue'), - 'TRUTHVALUE': ('truth', 'if while and or not BASICMETHODS'), - 'DEBUGGING': ('debugger', 'pdb'), - 'CONTEXTMANAGERS': ('context-managers', 'with'), - } - - def __init__(self, input=None, output=None): - self._input = input - self._output = output - - @property - def input(self): - return self._input or sys.stdin - - @property - def output(self): - return self._output or sys.stdout - - def __repr__(self): - if inspect.stack()[1][3] == '?': - self() - return '' - return '<%s.%s instance>' % (self.__class__.__module__, - self.__class__.__qualname__) - - _GoInteractive = object() - def __call__(self, request=_GoInteractive): - if request is not self._GoInteractive: - try: - self.help(request) - except ImportError as err: - self.output.write(f'{err}\n') - else: - self.intro() - self.interact() - self.output.write(''' -You are now leaving help and returning to the Python interpreter. -If you want to ask for help on a particular object directly from the -interpreter, you can type "help(object)". Executing "help('string')" -has the same effect as typing a particular string at the help> prompt. -''') - - def interact(self): - self.output.write('\n') - while True: - try: - request = self.getline('help> ') - except (KeyboardInterrupt, EOFError): - break - request = request.strip() - if not request: - continue # back to the prompt - - # Make sure significant trailing quoting marks of literals don't - # get deleted while cleaning input - if (len(request) > 2 and request[0] == request[-1] in ("'", '"') - and request[0] not in request[1:-1]): - request = request[1:-1] - if request.lower() in ('q', 'quit', 'exit'): break - if request == 'help': - self.intro() - else: - self.help(request) - - def getline(self, prompt): - """Read one line, using input() when appropriate.""" - if self.input is sys.stdin: - return input(prompt) - else: - self.output.write(prompt) - self.output.flush() - return self.input.readline() - - def help(self, request, is_cli=False): - if isinstance(request, str): - request = request.strip() - if request == 'keywords': self.listkeywords() - elif request == 'symbols': self.listsymbols() - elif request == 'topics': self.listtopics() - elif request == 'modules': self.listmodules() - elif request[:8] == 'modules ': - self.listmodules(request.split()[1]) - elif request in self.symbols: self.showsymbol(request) - elif request in ['True', 'False', 'None']: - # special case these keywords since they are objects too - doc(eval(request), 'Help on %s:', output=self._output, is_cli=is_cli) - elif request in self.keywords: self.showtopic(request) - elif request in self.topics: self.showtopic(request) - elif request: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli) - else: doc(str, 'Help on %s:', output=self._output, is_cli=is_cli) - elif isinstance(request, Helper): self() - else: doc(request, 'Help on %s:', output=self._output, is_cli=is_cli) - self.output.write('\n') - - def intro(self): - self.output.write(_introdoc()) - - def list(self, items, columns=4, width=80): - items = sorted(items) - colw = width // columns - rows = (len(items) + columns - 1) // columns - for row in range(rows): - for col in range(columns): - i = col * rows + row - if i < len(items): - self.output.write(items[i]) - if col < columns - 1: - self.output.write(' ' + ' ' * (colw - 1 - len(items[i]))) - self.output.write('\n') - - def listkeywords(self): - self.output.write(''' -Here is a list of the Python keywords. Enter any keyword to get more help. - -''') - self.list(self.keywords.keys()) - - def listsymbols(self): - self.output.write(''' -Here is a list of the punctuation symbols which Python assigns special meaning -to. Enter any symbol to get more help. - -''') - self.list(self.symbols.keys()) - - def listtopics(self): - self.output.write(''' -Here is a list of available topics. Enter any topic name to get more help. - -''') - self.list(self.topics.keys(), columns=3) - - def showtopic(self, topic, more_xrefs=''): - try: - import pydoc_data.topics - except ImportError: - self.output.write(''' -Sorry, topic and keyword documentation is not available because the -module "pydoc_data.topics" could not be found. -''') - return - target = self.topics.get(topic, self.keywords.get(topic)) - if not target: - self.output.write('no documentation found for %s\n' % repr(topic)) - return - if isinstance(target, str): - return self.showtopic(target, more_xrefs) - - label, xrefs = target - try: - doc = pydoc_data.topics.topics[label] - except KeyError: - self.output.write('no documentation found for %s\n' % repr(topic)) - return - doc = doc.strip() + '\n' - if more_xrefs: - xrefs = (xrefs or '') + ' ' + more_xrefs - if xrefs: - import textwrap - text = 'Related help topics: ' + ', '.join(xrefs.split()) + '\n' - wrapped_text = textwrap.wrap(text, 72) - doc += '\n%s\n' % '\n'.join(wrapped_text) - - if self._output is None: - pager(doc, f'Help on {topic!s}') - else: - self.output.write(doc) - - def _gettopic(self, topic, more_xrefs=''): - """Return unbuffered tuple of (topic, xrefs). - - If an error occurs here, the exception is caught and displayed by - the url handler. - - This function duplicates the showtopic method but returns its - result directly so it can be formatted for display in an html page. - """ - try: - import pydoc_data.topics - except ImportError: - return(''' -Sorry, topic and keyword documentation is not available because the -module "pydoc_data.topics" could not be found. -''' , '') - target = self.topics.get(topic, self.keywords.get(topic)) - if not target: - raise ValueError('could not find topic') - if isinstance(target, str): - return self._gettopic(target, more_xrefs) - label, xrefs = target - doc = pydoc_data.topics.topics[label] - if more_xrefs: - xrefs = (xrefs or '') + ' ' + more_xrefs - return doc, xrefs - - def showsymbol(self, symbol): - target = self.symbols[symbol] - topic, _, xrefs = target.partition(' ') - self.showtopic(topic, xrefs) - - def listmodules(self, key=''): - if key: - self.output.write(''' -Here is a list of modules whose name or summary contains '{}'. -If there are any, enter a module name to get more help. - -'''.format(key)) - apropos(key) - else: - self.output.write(''' -Please wait a moment while I gather a list of all available modules... - -''') - modules = {} - def callback(path, modname, desc, modules=modules): - if modname and modname[-9:] == '.__init__': - modname = modname[:-9] + ' (package)' - if modname.find('.') < 0: - modules[modname] = 1 - def onerror(modname): - callback(None, modname, None) - ModuleScanner().run(callback, onerror=onerror) - self.list(modules.keys()) - self.output.write(''' -Enter any module name to get more help. Or, type "modules spam" to search -for modules whose name or summary contain the string "spam". -''') - -help = Helper() - -class ModuleScanner: - """An interruptible scanner that searches module synopses.""" - - def run(self, callback, key=None, completer=None, onerror=None): - if key: key = key.lower() - self.quit = False - seen = {} - - for modname in sys.builtin_module_names: - if modname != '__main__': - seen[modname] = 1 - if key is None: - callback(None, modname, '') - else: - name = __import__(modname).__doc__ or '' - desc = name.split('\n')[0] - name = modname + ' - ' + desc - if name.lower().find(key) >= 0: - callback(None, modname, desc) - - for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror): - if self.quit: - break - - if key is None: - callback(None, modname, '') - else: - try: - spec = importer.find_spec(modname) - except SyntaxError: - # raised by tests for bad coding cookies or BOM - continue - loader = spec.loader - if hasattr(loader, 'get_source'): - try: - source = loader.get_source(modname) - except Exception: - if onerror: - onerror(modname) - continue - desc = source_synopsis(io.StringIO(source)) or '' - if hasattr(loader, 'get_filename'): - path = loader.get_filename(modname) - else: - path = None - else: - try: - module = importlib._bootstrap._load(spec) - except ImportError: - if onerror: - onerror(modname) - continue - desc = module.__doc__.splitlines()[0] if module.__doc__ else '' - path = getattr(module,'__file__',None) - name = modname + ' - ' + desc - if name.lower().find(key) >= 0: - callback(path, modname, desc) - - if completer: - completer() - -def apropos(key): - """Print all the one-line module summaries that contain a substring.""" - def callback(path, modname, desc): - if modname[-9:] == '.__init__': - modname = modname[:-9] + ' (package)' - print(modname, desc and '- ' + desc) - def onerror(modname): - pass - with warnings.catch_warnings(): - warnings.filterwarnings('ignore') # ignore problems during import - ModuleScanner().run(callback, key, onerror=onerror) - -# --------------------------------------- enhanced web browser interface - -def _start_server(urlhandler, hostname, port): - """Start an HTTP server thread on a specific port. - - Start an HTML/text server thread, so HTML or text documents can be - browsed dynamically and interactively with a web browser. Example use: - - >>> import time - >>> import pydoc - - Define a URL handler. To determine what the client is asking - for, check the URL and content_type. - - Then get or generate some text or HTML code and return it. - - >>> def my_url_handler(url, content_type): - ... text = 'the URL sent was: (%s, %s)' % (url, content_type) - ... return text - - Start server thread on port 0. - If you use port 0, the server will pick a random port number. - You can then use serverthread.port to get the port number. - - >>> port = 0 - >>> serverthread = pydoc._start_server(my_url_handler, port) - - Check that the server is really started. If it is, open browser - and get first page. Use serverthread.url as the starting page. - - >>> if serverthread.serving: - ... import webbrowser - - The next two lines are commented out so a browser doesn't open if - doctest is run on this module. - - #... webbrowser.open(serverthread.url) - #True - - Let the server do its thing. We just need to monitor its status. - Use time.sleep so the loop doesn't hog the CPU. - - >>> starttime = time.monotonic() - >>> timeout = 1 #seconds - - This is a short timeout for testing purposes. - - >>> while serverthread.serving: - ... time.sleep(.01) - ... if serverthread.serving and time.monotonic() - starttime > timeout: - ... serverthread.stop() - ... break - - Print any errors that may have occurred. - - >>> print(serverthread.error) - None - """ - import http.server - import email.message - import select - import threading - - class DocHandler(http.server.BaseHTTPRequestHandler): - - def do_GET(self): - """Process a request from an HTML browser. - - The URL received is in self.path. - Get an HTML page from self.urlhandler and send it. - """ - if self.path.endswith('.css'): - content_type = 'text/css' - else: - content_type = 'text/html' - self.send_response(200) - self.send_header('Content-Type', '%s; charset=UTF-8' % content_type) - self.end_headers() - self.wfile.write(self.urlhandler( - self.path, content_type).encode('utf-8')) - - def log_message(self, *args): - # Don't log messages. - pass - - class DocServer(http.server.HTTPServer): - - def __init__(self, host, port, callback): - self.host = host - self.address = (self.host, port) - self.callback = callback - self.base.__init__(self, self.address, self.handler) - self.quit = False - - def serve_until_quit(self): - while not self.quit: - rd, wr, ex = select.select([self.socket.fileno()], [], [], 1) - if rd: - self.handle_request() - self.server_close() - - def server_activate(self): - self.base.server_activate(self) - if self.callback: - self.callback(self) - - class ServerThread(threading.Thread): - - def __init__(self, urlhandler, host, port): - self.urlhandler = urlhandler - self.host = host - self.port = int(port) - threading.Thread.__init__(self) - self.serving = False - self.error = None - self.docserver = None - - def run(self): - """Start the server.""" - try: - DocServer.base = http.server.HTTPServer - DocServer.handler = DocHandler - DocHandler.MessageClass = email.message.Message - DocHandler.urlhandler = staticmethod(self.urlhandler) - docsvr = DocServer(self.host, self.port, self.ready) - self.docserver = docsvr - docsvr.serve_until_quit() - except Exception as err: - self.error = err - - def ready(self, server): - self.serving = True - self.host = server.host - self.port = server.server_port - self.url = 'http://%s:%d/' % (self.host, self.port) - - def stop(self): - """Stop the server and this thread nicely""" - self.docserver.quit = True - self.join() - # explicitly break a reference cycle: DocServer.callback - # has indirectly a reference to ServerThread. - self.docserver = None - self.serving = False - self.url = None - - thread = ServerThread(urlhandler, hostname, port) - thread.start() - # Wait until thread.serving is True and thread.docserver is set - # to make sure we are really up before returning. - while not thread.error and not (thread.serving and thread.docserver): - time.sleep(.01) - return thread - - -def _url_handler(url, content_type="text/html"): - """The pydoc url handler for use with the pydoc server. - - If the content_type is 'text/css', the _pydoc.css style - sheet is read and returned if it exits. - - If the content_type is 'text/html', then the result of - get_html_page(url) is returned. - """ - class _HTMLDoc(HTMLDoc): - - def page(self, title, contents): - """Format an HTML page.""" - css_path = "pydoc_data/_pydoc.css" - css_link = ( - '<link rel="stylesheet" type="text/css" href="%s">' % - css_path) - return '''\ -<!DOCTYPE> -<html lang="en"> -<head> -<meta charset="utf-8"> -<title>Pydoc: %s</title> -%s</head><body>%s<div style="clear:both;padding-top:.5em;">%s</div> -</body></html>''' % (title, css_link, html_navbar(), contents) - - - html = _HTMLDoc() - - def html_navbar(): - version = html.escape("%s [%s, %s]" % (platform.python_version(), - platform.python_build()[0], - platform.python_compiler())) - return """ - <div style='float:left'> - Python %s<br>%s - </div> - <div style='float:right'> - <div style='text-align:center'> - <a href="index.html">Module Index</a> - : <a href="topics.html">Topics</a> - : <a href="keywords.html">Keywords</a> - </div> - <div> - <form action="get" style='display:inline;'> - <input type=text name=key size=15> - <input type=submit value="Get"> - </form>&nbsp; - <form action="search" style='display:inline;'> - <input type=text name=key size=15> - <input type=submit value="Search"> - </form> - </div> - </div> - """ % (version, html.escape(platform.platform(terse=True))) - - def html_index(): - """Module Index page.""" - - def bltinlink(name): - return '<a href="%s.html">%s</a>' % (name, name) - - heading = html.heading( - '<strong class="title">Index of Modules</strong>' - ) - names = [name for name in sys.builtin_module_names - if name != '__main__'] - contents = html.multicolumn(names, bltinlink) - contents = [heading, '<p>' + html.bigsection( - 'Built-in Modules', 'index', contents)] - - seen = {} - for dir in sys.path: - contents.append(html.index(dir, seen)) - - contents.append( - '<p align=right class="heading-text grey"><strong>pydoc</strong> by Ka-Ping Yee' - '&lt;ping@lfw.org&gt;</p>') - return 'Index of Modules', ''.join(contents) - - def html_search(key): - """Search results page.""" - # scan for modules - search_result = [] - - def callback(path, modname, desc): - if modname[-9:] == '.__init__': - modname = modname[:-9] + ' (package)' - search_result.append((modname, desc and '- ' + desc)) - - with warnings.catch_warnings(): - warnings.filterwarnings('ignore') # ignore problems during import - def onerror(modname): - pass - ModuleScanner().run(callback, key, onerror=onerror) - - # format page - def bltinlink(name): - return '<a href="%s.html">%s</a>' % (name, name) - - results = [] - heading = html.heading( - '<strong class="title">Search Results</strong>', - ) - for name, desc in search_result: - results.append(bltinlink(name) + desc) - contents = heading + html.bigsection( - 'key = %s' % key, 'index', '<br>'.join(results)) - return 'Search Results', contents - - def html_topics(): - """Index of topic texts available.""" - - def bltinlink(name): - return '<a href="topic?key=%s">%s</a>' % (name, name) - - heading = html.heading( - '<strong class="title">INDEX</strong>', - ) - names = sorted(Helper.topics.keys()) - - contents = html.multicolumn(names, bltinlink) - contents = heading + html.bigsection( - 'Topics', 'index', contents) - return 'Topics', contents - - def html_keywords(): - """Index of keywords.""" - heading = html.heading( - '<strong class="title">INDEX</strong>', - ) - names = sorted(Helper.keywords.keys()) - - def bltinlink(name): - return '<a href="topic?key=%s">%s</a>' % (name, name) - - contents = html.multicolumn(names, bltinlink) - contents = heading + html.bigsection( - 'Keywords', 'index', contents) - return 'Keywords', contents - - def html_topicpage(topic): - """Topic or keyword help page.""" - buf = io.StringIO() - htmlhelp = Helper(buf, buf) - contents, xrefs = htmlhelp._gettopic(topic) - if topic in htmlhelp.keywords: - title = 'KEYWORD' - else: - title = 'TOPIC' - heading = html.heading( - '<strong class="title">%s</strong>' % title, - ) - contents = '<pre>%s</pre>' % html.markup(contents) - contents = html.bigsection(topic , 'index', contents) - if xrefs: - xrefs = sorted(xrefs.split()) - - def bltinlink(name): - return '<a href="topic?key=%s">%s</a>' % (name, name) - - xrefs = html.multicolumn(xrefs, bltinlink) - xrefs = html.section('Related help topics: ', 'index', xrefs) - return ('%s %s' % (title, topic), - ''.join((heading, contents, xrefs))) - - def html_getobj(url): - obj = locate(url, forceload=1) - if obj is None and url != 'None': - raise ValueError('could not find object') - title = describe(obj) - content = html.document(obj, url) - return title, content - - def html_error(url, exc): - heading = html.heading( - '<strong class="title">Error</strong>', - ) - contents = '<br>'.join(html.escape(line) for line in - format_exception_only(type(exc), exc)) - contents = heading + html.bigsection(url, 'error', contents) - return "Error - %s" % url, contents - - def get_html_page(url): - """Generate an HTML page for url.""" - complete_url = url - if url.endswith('.html'): - url = url[:-5] - try: - if url in ("", "index"): - title, content = html_index() - elif url == "topics": - title, content = html_topics() - elif url == "keywords": - title, content = html_keywords() - elif '=' in url: - op, _, url = url.partition('=') - if op == "search?key": - title, content = html_search(url) - elif op == "topic?key": - # try topics first, then objects. - try: - title, content = html_topicpage(url) - except ValueError: - title, content = html_getobj(url) - elif op == "get?key": - # try objects first, then topics. - if url in ("", "index"): - title, content = html_index() - else: - try: - title, content = html_getobj(url) - except ValueError: - title, content = html_topicpage(url) - else: - raise ValueError('bad pydoc url') - else: - title, content = html_getobj(url) - except Exception as exc: - # Catch any errors and display them in an error page. - title, content = html_error(complete_url, exc) - return html.page(title, content) - - if url.startswith('/'): - url = url[1:] - if content_type == 'text/css': - path_here = os.path.dirname(os.path.realpath(__file__)) - css_path = os.path.join(path_here, url) - with open(css_path) as fp: - return ''.join(fp.readlines()) - elif content_type == 'text/html': - return get_html_page(url) - # Errors outside the url handler are caught by the server. - raise TypeError('unknown content type %r for url %s' % (content_type, url)) - - -def browse(port=0, *, open_browser=True, hostname='localhost'): - """Start the enhanced pydoc web server and open a web browser. - - Use port '0' to start the server on an arbitrary port. - Set open_browser to False to suppress opening a browser. - """ - import webbrowser - serverthread = _start_server(_url_handler, hostname, port) - if serverthread.error: - print(serverthread.error) - return - if serverthread.serving: - server_help_msg = 'Server commands: [b]rowser, [q]uit' - if open_browser: - webbrowser.open(serverthread.url) - try: - print('Server ready at', serverthread.url) - print(server_help_msg) - while serverthread.serving: - cmd = input('server> ') - cmd = cmd.lower() - if cmd == 'q': - break - elif cmd == 'b': - webbrowser.open(serverthread.url) - else: - print(server_help_msg) - except (KeyboardInterrupt, EOFError): - print() - finally: - if serverthread.serving: - serverthread.stop() - print('Server stopped') - - -# -------------------------------------------------- command-line interface - -def ispath(x): - return isinstance(x, str) and x.find(os.sep) >= 0 - -def _get_revised_path(given_path, argv0): - """Ensures current directory is on returned path, and argv0 directory is not - - Exception: argv0 dir is left alone if it's also pydoc's directory. - - Returns a new path entry list, or None if no adjustment is needed. - """ - # Scripts may get the current directory in their path by default if they're - # run with the -m switch, or directly from the current directory. - # The interactive prompt also allows imports from the current directory. - - # Accordingly, if the current directory is already present, don't make - # any changes to the given_path - if '' in given_path or os.curdir in given_path or os.getcwd() in given_path: - return None - - # Otherwise, add the current directory to the given path, and remove the - # script directory (as long as the latter isn't also pydoc's directory. - stdlib_dir = os.path.dirname(__file__) - script_dir = os.path.dirname(argv0) - revised_path = given_path.copy() - if script_dir in given_path and not os.path.samefile(script_dir, stdlib_dir): - revised_path.remove(script_dir) - revised_path.insert(0, os.getcwd()) - return revised_path - - -# Note: the tests only cover _get_revised_path, not _adjust_cli_path itself -def _adjust_cli_sys_path(): - """Ensures current directory is on sys.path, and __main__ directory is not. - - Exception: __main__ dir is left alone if it's also pydoc's directory. - """ - revised_path = _get_revised_path(sys.path, sys.argv[0]) - if revised_path is not None: - sys.path[:] = revised_path - - -def cli(): - """Command-line interface (looks at sys.argv to decide what to do).""" - import getopt - class BadUsage(Exception): pass - - _adjust_cli_sys_path() - - try: - opts, args = getopt.getopt(sys.argv[1:], 'bk:n:p:w') - writing = False - start_server = False - open_browser = False - port = 0 - hostname = 'localhost' - for opt, val in opts: - if opt == '-b': - start_server = True - open_browser = True - if opt == '-k': - apropos(val) - return - if opt == '-p': - start_server = True - port = val - if opt == '-w': - writing = True - if opt == '-n': - start_server = True - hostname = val - - if start_server: - browse(port, hostname=hostname, open_browser=open_browser) - return - - if not args: raise BadUsage - for arg in args: - if ispath(arg) and not os.path.exists(arg): - print('file %r does not exist' % arg) - sys.exit(1) - try: - if ispath(arg) and os.path.isfile(arg): - arg = importfile(arg) - if writing: - if ispath(arg) and os.path.isdir(arg): - writedocs(arg) - else: - writedoc(arg) - else: - help.help(arg, is_cli=True) - except (ImportError, ErrorDuringImport) as value: - print(value) - sys.exit(1) - - except (getopt.error, BadUsage): - cmd = os.path.splitext(os.path.basename(sys.argv[0]))[0] - print("""pydoc - the Python documentation tool - -{cmd} <name> ... - Show text documentation on something. <name> may be the name of a - Python keyword, topic, function, module, or package, or a dotted - reference to a class or function within a module or module in a - package. If <name> contains a '{sep}', it is used as the path to a - Python source file to document. If name is 'keywords', 'topics', - or 'modules', a listing of these things is displayed. - -{cmd} -k <keyword> - Search for a keyword in the synopsis lines of all available modules. - -{cmd} -n <hostname> - Start an HTTP server with the given hostname (default: localhost). - -{cmd} -p <port> - Start an HTTP server on the given port on the local machine. Port - number 0 can be used to get an arbitrary unused port. - -{cmd} -b - Start an HTTP server on an arbitrary unused port and open a web browser - to interactively browse documentation. This option can be used in - combination with -n and/or -p. - -{cmd} -w <name> ... - Write out the HTML documentation for a module to a file in the current - directory. If <name> contains a '{sep}', it is treated as a filename; if - it names a directory, documentation is written for all the contents. -""".format(cmd=cmd, sep=os.sep)) - -if __name__ == '__main__': - cli() diff --git a/Python314_4_x86_Template/Lib/pydoc_data/__init__.py b/Python314_4_x86_Template/Lib/pydoc_data/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/pydoc_data/_pydoc.css b/Python314_4_x86_Template/Lib/pydoc_data/_pydoc.css deleted file mode 100644 index a6aa2e4c1..000000000 --- a/Python314_4_x86_Template/Lib/pydoc_data/_pydoc.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - CSS file for pydoc. - - Contents of this file are subject to change without notice. - -*/ - -body { - background-color: #f0f0f8; -} - -table.heading tr { - background-color: #7799ee; -} - -.decor { - color: #ffffff; -} - -.title-decor { - background-color: #ffc8d8; - color: #000000; -} - -.pkg-content-decor { - background-color: #aa55cc; -} - -.index-decor { - background-color: #ee77aa; -} - -.functions-decor { - background-color: #eeaa77; -} - -.data-decor { - background-color: #55aa55; -} - -.author-decor { - background-color: #7799ee; -} - -.credits-decor { - background-color: #7799ee; -} - -.error-decor { - background-color: #bb0000; -} - -.grey { - color: #909090; -} - -.white { - color: #ffffff; -} - -.repr { - color: #c040c0; -} - -table.heading tr td.title { - vertical-align: bottom; -} - -table.heading tr td.extra { - vertical-align: bottom; - text-align: right; -} - -.heading-text { - font-family: helvetica, arial; -} - -.bigsection { - font-size: larger; -} - -.title { - font-size: x-large; -} - -.code { - font-family: monospace; -} - -table { - width: 100%; - border-spacing : 0; - border-collapse : collapse; - border: 0; -} - -td { - padding: 2; -} - -td.section-title { - vertical-align: bottom; -} - -td.multicolumn { - width: 25%; - vertical-align: bottom; -} - -td.singlecolumn { - width: 100%; -} diff --git a/Python314_4_x86_Template/Lib/pydoc_data/module_docs.py b/Python314_4_x86_Template/Lib/pydoc_data/module_docs.py deleted file mode 100644 index d65837838..000000000 --- a/Python314_4_x86_Template/Lib/pydoc_data/module_docs.py +++ /dev/null @@ -1,320 +0,0 @@ -# Autogenerated by Sphinx on Tue Apr 7 16:13:12 2026 -# as part of the release process. - -module_docs = { - '__future__': '__future__#module-__future__', - '__main__': '__main__#module-__main__', - '_thread': '_thread#module-_thread', - '_tkinter': 'tkinter#module-_tkinter', - 'abc': 'abc#module-abc', - 'aifc': 'aifc#module-aifc', - 'annotationlib': 'annotationlib#module-annotationlib', - 'argparse': 'argparse#module-argparse', - 'array': 'array#module-array', - 'ast': 'ast#module-ast', - 'asynchat': 'asynchat#module-asynchat', - 'asyncio': 'asyncio#module-asyncio', - 'asyncore': 'asyncore#module-asyncore', - 'atexit': 'atexit#module-atexit', - 'audioop': 'audioop#module-audioop', - 'base64': 'base64#module-base64', - 'bdb': 'bdb#module-bdb', - 'binascii': 'binascii#module-binascii', - 'bisect': 'bisect#module-bisect', - 'builtins': 'builtins#module-builtins', - 'bz2': 'bz2#module-bz2', - 'cProfile': 'profile#module-cProfile', - 'calendar': 'calendar#module-calendar', - 'cgi': 'cgi#module-cgi', - 'cgitb': 'cgitb#module-cgitb', - 'chunk': 'chunk#module-chunk', - 'cmath': 'cmath#module-cmath', - 'cmd': 'cmd#module-cmd', - 'code': 'code#module-code', - 'codecs': 'codecs#module-codecs', - 'codeop': 'codeop#module-codeop', - 'collections': 'collections#module-collections', - 'collections.abc': 'collections.abc#module-collections.abc', - 'colorsys': 'colorsys#module-colorsys', - 'compileall': 'compileall#module-compileall', - 'compression': 'compression#module-compression', - 'compression.zstd': 'compression.zstd#module-compression.zstd', - 'concurrent.futures': 'concurrent.futures#module-concurrent.futures', - 'concurrent.interpreters': 'concurrent.interpreters#module-concurrent.interpreters', - 'configparser': 'configparser#module-configparser', - 'contextlib': 'contextlib#module-contextlib', - 'contextvars': 'contextvars#module-contextvars', - 'copy': 'copy#module-copy', - 'copyreg': 'copyreg#module-copyreg', - 'crypt': 'crypt#module-crypt', - 'csv': 'csv#module-csv', - 'ctypes': 'ctypes#module-ctypes', - 'curses': 'curses#module-curses', - 'curses.ascii': 'curses.ascii#module-curses.ascii', - 'curses.panel': 'curses.panel#module-curses.panel', - 'curses.textpad': 'curses#module-curses.textpad', - 'dataclasses': 'dataclasses#module-dataclasses', - 'datetime': 'datetime#module-datetime', - 'dbm': 'dbm#module-dbm', - 'dbm.dumb': 'dbm#module-dbm.dumb', - 'dbm.gnu': 'dbm#module-dbm.gnu', - 'dbm.ndbm': 'dbm#module-dbm.ndbm', - 'dbm.sqlite3': 'dbm#module-dbm.sqlite3', - 'decimal': 'decimal#module-decimal', - 'difflib': 'difflib#module-difflib', - 'dis': 'dis#module-dis', - 'distutils': 'distutils#module-distutils', - 'doctest': 'doctest#module-doctest', - 'email': 'email#module-email', - 'email.charset': 'email.charset#module-email.charset', - 'email.contentmanager': 'email.contentmanager#module-email.contentmanager', - 'email.encoders': 'email.encoders#module-email.encoders', - 'email.errors': 'email.errors#module-email.errors', - 'email.generator': 'email.generator#module-email.generator', - 'email.header': 'email.header#module-email.header', - 'email.headerregistry': 'email.headerregistry#module-email.headerregistry', - 'email.iterators': 'email.iterators#module-email.iterators', - 'email.message': 'email.message#module-email.message', - 'email.mime': 'email.mime#module-email.mime', - 'email.mime.application': 'email.mime#module-email.mime.application', - 'email.mime.audio': 'email.mime#module-email.mime.audio', - 'email.mime.base': 'email.mime#module-email.mime.base', - 'email.mime.image': 'email.mime#module-email.mime.image', - 'email.mime.message': 'email.mime#module-email.mime.message', - 'email.mime.multipart': 'email.mime#module-email.mime.multipart', - 'email.mime.nonmultipart': 'email.mime#module-email.mime.nonmultipart', - 'email.mime.text': 'email.mime#module-email.mime.text', - 'email.parser': 'email.parser#module-email.parser', - 'email.policy': 'email.policy#module-email.policy', - 'email.utils': 'email.utils#module-email.utils', - 'encodings': 'codecs#module-encodings', - 'encodings.idna': 'codecs#module-encodings.idna', - 'encodings.mbcs': 'codecs#module-encodings.mbcs', - 'encodings.utf_8_sig': 'codecs#module-encodings.utf_8_sig', - 'ensurepip': 'ensurepip#module-ensurepip', - 'enum': 'enum#module-enum', - 'errno': 'errno#module-errno', - 'faulthandler': 'faulthandler#module-faulthandler', - 'fcntl': 'fcntl#module-fcntl', - 'filecmp': 'filecmp#module-filecmp', - 'fileinput': 'fileinput#module-fileinput', - 'fnmatch': 'fnmatch#module-fnmatch', - 'fractions': 'fractions#module-fractions', - 'ftplib': 'ftplib#module-ftplib', - 'functools': 'functools#module-functools', - 'gc': 'gc#module-gc', - 'getopt': 'getopt#module-getopt', - 'getpass': 'getpass#module-getpass', - 'gettext': 'gettext#module-gettext', - 'glob': 'glob#module-glob', - 'graphlib': 'graphlib#module-graphlib', - 'grp': 'grp#module-grp', - 'gzip': 'gzip#module-gzip', - 'hashlib': 'hashlib#module-hashlib', - 'heapq': 'heapq#module-heapq', - 'hmac': 'hmac#module-hmac', - 'html': 'html#module-html', - 'html.entities': 'html.entities#module-html.entities', - 'html.parser': 'html.parser#module-html.parser', - 'http': 'http#module-http', - 'http.client': 'http.client#module-http.client', - 'http.cookiejar': 'http.cookiejar#module-http.cookiejar', - 'http.cookies': 'http.cookies#module-http.cookies', - 'http.server': 'http.server#module-http.server', - 'idlelib': 'idle#module-idlelib', - 'imaplib': 'imaplib#module-imaplib', - 'imghdr': 'imghdr#module-imghdr', - 'imp': 'imp#module-imp', - 'importlib': 'importlib#module-importlib', - 'importlib.abc': 'importlib#module-importlib.abc', - 'importlib.machinery': 'importlib#module-importlib.machinery', - 'importlib.metadata': 'importlib.metadata#module-importlib.metadata', - 'importlib.resources': 'importlib.resources#module-importlib.resources', - 'importlib.resources.abc': 'importlib.resources.abc#module-importlib.resources.abc', - 'importlib.util': 'importlib#module-importlib.util', - 'inspect': 'inspect#module-inspect', - 'io': 'io#module-io', - 'ipaddress': 'ipaddress#module-ipaddress', - 'itertools': 'itertools#module-itertools', - 'json': 'json#module-json', - 'json.tool': 'json#module-json.tool', - 'keyword': 'keyword#module-keyword', - 'linecache': 'linecache#module-linecache', - 'locale': 'locale#module-locale', - 'logging': 'logging#module-logging', - 'logging.config': 'logging.config#module-logging.config', - 'logging.handlers': 'logging.handlers#module-logging.handlers', - 'lzma': 'lzma#module-lzma', - 'mailbox': 'mailbox#module-mailbox', - 'mailcap': 'mailcap#module-mailcap', - 'marshal': 'marshal#module-marshal', - 'math': 'math#module-math', - 'mimetypes': 'mimetypes#module-mimetypes', - 'mmap': 'mmap#module-mmap', - 'modulefinder': 'modulefinder#module-modulefinder', - 'msilib': 'msilib#module-msilib', - 'msvcrt': 'msvcrt#module-msvcrt', - 'multiprocessing': 'multiprocessing#module-multiprocessing', - 'multiprocessing.connection': 'multiprocessing#module-multiprocessing.connection', - 'multiprocessing.dummy': 'multiprocessing#module-multiprocessing.dummy', - 'multiprocessing.managers': 'multiprocessing#module-multiprocessing.managers', - 'multiprocessing.pool': 'multiprocessing#module-multiprocessing.pool', - 'multiprocessing.shared_memory': 'multiprocessing.shared_memory#module-multiprocessing.shared_memory', - 'multiprocessing.sharedctypes': 'multiprocessing#module-multiprocessing.sharedctypes', - 'netrc': 'netrc#module-netrc', - 'nis': 'nis#module-nis', - 'nntplib': 'nntplib#module-nntplib', - 'numbers': 'numbers#module-numbers', - 'operator': 'operator#module-operator', - 'optparse': 'optparse#module-optparse', - 'os': 'os#module-os', - 'os.path': 'os.path#module-os.path', - 'ossaudiodev': 'ossaudiodev#module-ossaudiodev', - 'pathlib': 'pathlib#module-pathlib', - 'pathlib.types': 'pathlib#module-pathlib.types', - 'pdb': 'pdb#module-pdb', - 'pickle': 'pickle#module-pickle', - 'pickletools': 'pickletools#module-pickletools', - 'pipes': 'pipes#module-pipes', - 'pkgutil': 'pkgutil#module-pkgutil', - 'platform': 'platform#module-platform', - 'plistlib': 'plistlib#module-plistlib', - 'poplib': 'poplib#module-poplib', - 'posix': 'posix#module-posix', - 'pprint': 'pprint#module-pprint', - 'profile': 'profile#module-profile', - 'pstats': 'profile#module-pstats', - 'pty': 'pty#module-pty', - 'pwd': 'pwd#module-pwd', - 'py_compile': 'py_compile#module-py_compile', - 'pyclbr': 'pyclbr#module-pyclbr', - 'pydoc': 'pydoc#module-pydoc', - 'queue': 'queue#module-queue', - 'quopri': 'quopri#module-quopri', - 'random': 'random#module-random', - 're': 're#module-re', - 'readline': 'readline#module-readline', - 'reprlib': 'reprlib#module-reprlib', - 'resource': 'resource#module-resource', - 'rlcompleter': 'rlcompleter#module-rlcompleter', - 'runpy': 'runpy#module-runpy', - 'sched': 'sched#module-sched', - 'secrets': 'secrets#module-secrets', - 'select': 'select#module-select', - 'selectors': 'selectors#module-selectors', - 'shelve': 'shelve#module-shelve', - 'shlex': 'shlex#module-shlex', - 'shutil': 'shutil#module-shutil', - 'signal': 'signal#module-signal', - 'site': 'site#module-site', - 'sitecustomize': 'site#module-sitecustomize', - 'smtpd': 'smtpd#module-smtpd', - 'smtplib': 'smtplib#module-smtplib', - 'sndhdr': 'sndhdr#module-sndhdr', - 'socket': 'socket#module-socket', - 'socketserver': 'socketserver#module-socketserver', - 'spwd': 'spwd#module-spwd', - 'sqlite3': 'sqlite3#module-sqlite3', - 'ssl': 'ssl#module-ssl', - 'stat': 'stat#module-stat', - 'statistics': 'statistics#module-statistics', - 'string': 'string#module-string', - 'string.templatelib': 'string.templatelib#module-string.templatelib', - 'stringprep': 'stringprep#module-stringprep', - 'struct': 'struct#module-struct', - 'subprocess': 'subprocess#module-subprocess', - 'sunau': 'sunau#module-sunau', - 'symtable': 'symtable#module-symtable', - 'sys': 'sys#module-sys', - 'sys.monitoring': 'sys.monitoring#module-sys.monitoring', - 'sysconfig': 'sysconfig#module-sysconfig', - 'syslog': 'syslog#module-syslog', - 'tabnanny': 'tabnanny#module-tabnanny', - 'tarfile': 'tarfile#module-tarfile', - 'telnetlib': 'telnetlib#module-telnetlib', - 'tempfile': 'tempfile#module-tempfile', - 'termios': 'termios#module-termios', - 'test': 'test#module-test', - 'test.regrtest': 'test#module-test.regrtest', - 'test.support': 'test#module-test.support', - 'test.support.bytecode_helper': 'test#module-test.support.bytecode_helper', - 'test.support.import_helper': 'test#module-test.support.import_helper', - 'test.support.os_helper': 'test#module-test.support.os_helper', - 'test.support.script_helper': 'test#module-test.support.script_helper', - 'test.support.socket_helper': 'test#module-test.support.socket_helper', - 'test.support.threading_helper': 'test#module-test.support.threading_helper', - 'test.support.warnings_helper': 'test#module-test.support.warnings_helper', - 'textwrap': 'textwrap#module-textwrap', - 'threading': 'threading#module-threading', - 'time': 'time#module-time', - 'timeit': 'timeit#module-timeit', - 'tkinter': 'tkinter#module-tkinter', - 'tkinter.colorchooser': 'tkinter.colorchooser#module-tkinter.colorchooser', - 'tkinter.commondialog': 'dialog#module-tkinter.commondialog', - 'tkinter.dnd': 'tkinter.dnd#module-tkinter.dnd', - 'tkinter.filedialog': 'dialog#module-tkinter.filedialog', - 'tkinter.font': 'tkinter.font#module-tkinter.font', - 'tkinter.messagebox': 'tkinter.messagebox#module-tkinter.messagebox', - 'tkinter.scrolledtext': 'tkinter.scrolledtext#module-tkinter.scrolledtext', - 'tkinter.simpledialog': 'dialog#module-tkinter.simpledialog', - 'tkinter.ttk': 'tkinter.ttk#module-tkinter.ttk', - 'token': 'token#module-token', - 'tokenize': 'tokenize#module-tokenize', - 'tomllib': 'tomllib#module-tomllib', - 'trace': 'trace#module-trace', - 'traceback': 'traceback#module-traceback', - 'tracemalloc': 'tracemalloc#module-tracemalloc', - 'tty': 'tty#module-tty', - 'turtle': 'turtle#module-turtle', - 'turtledemo': 'turtle#module-turtledemo', - 'types': 'types#module-types', - 'typing': 'typing#module-typing', - 'unicodedata': 'unicodedata#module-unicodedata', - 'unittest': 'unittest#module-unittest', - 'unittest.mock': 'unittest.mock#module-unittest.mock', - 'urllib': 'urllib#module-urllib', - 'urllib.error': 'urllib.error#module-urllib.error', - 'urllib.parse': 'urllib.parse#module-urllib.parse', - 'urllib.request': 'urllib.request#module-urllib.request', - 'urllib.response': 'urllib.request#module-urllib.response', - 'urllib.robotparser': 'urllib.robotparser#module-urllib.robotparser', - 'usercustomize': 'site#module-usercustomize', - 'uu': 'uu#module-uu', - 'uuid': 'uuid#module-uuid', - 'venv': 'venv#module-venv', - 'warnings': 'warnings#module-warnings', - 'wave': 'wave#module-wave', - 'weakref': 'weakref#module-weakref', - 'webbrowser': 'webbrowser#module-webbrowser', - 'winreg': 'winreg#module-winreg', - 'winsound': 'winsound#module-winsound', - 'wsgiref': 'wsgiref#module-wsgiref', - 'wsgiref.handlers': 'wsgiref#module-wsgiref.handlers', - 'wsgiref.headers': 'wsgiref#module-wsgiref.headers', - 'wsgiref.simple_server': 'wsgiref#module-wsgiref.simple_server', - 'wsgiref.types': 'wsgiref#module-wsgiref.types', - 'wsgiref.util': 'wsgiref#module-wsgiref.util', - 'wsgiref.validate': 'wsgiref#module-wsgiref.validate', - 'xdrlib': 'xdrlib#module-xdrlib', - 'xml': 'xml#module-xml', - 'xml.dom': 'xml.dom#module-xml.dom', - 'xml.dom.minidom': 'xml.dom.minidom#module-xml.dom.minidom', - 'xml.dom.pulldom': 'xml.dom.pulldom#module-xml.dom.pulldom', - 'xml.etree.ElementInclude': 'xml.etree.elementtree#module-xml.etree.ElementInclude', - 'xml.etree.ElementTree': 'xml.etree.elementtree#module-xml.etree.ElementTree', - 'xml.parsers.expat': 'pyexpat#module-xml.parsers.expat', - 'xml.parsers.expat.errors': 'pyexpat#module-xml.parsers.expat.errors', - 'xml.parsers.expat.model': 'pyexpat#module-xml.parsers.expat.model', - 'xml.sax': 'xml.sax#module-xml.sax', - 'xml.sax.handler': 'xml.sax.handler#module-xml.sax.handler', - 'xml.sax.saxutils': 'xml.sax.utils#module-xml.sax.saxutils', - 'xml.sax.xmlreader': 'xml.sax.reader#module-xml.sax.xmlreader', - 'xmlrpc': 'xmlrpc#module-xmlrpc', - 'xmlrpc.client': 'xmlrpc.client#module-xmlrpc.client', - 'xmlrpc.server': 'xmlrpc.server#module-xmlrpc.server', - 'zipapp': 'zipapp#module-zipapp', - 'zipfile': 'zipfile#module-zipfile', - 'zipimport': 'zipimport#module-zipimport', - 'zlib': 'zlib#module-zlib', - 'zoneinfo': 'zoneinfo#module-zoneinfo', -} diff --git a/Python314_4_x86_Template/Lib/pydoc_data/topics.py b/Python314_4_x86_Template/Lib/pydoc_data/topics.py deleted file mode 100644 index 6dca99ce9..000000000 --- a/Python314_4_x86_Template/Lib/pydoc_data/topics.py +++ /dev/null @@ -1,14506 +0,0 @@ -# Autogenerated by Sphinx on Tue Apr 7 16:13:12 2026 -# as part of the release process. - -topics = { - 'assert': r'''The "assert" statement -********************** - -Assert statements are a convenient way to insert debugging assertions -into a program: - - assert_stmt: "assert" expression ["," expression] - -The simple form, "assert expression", is equivalent to - - if __debug__: - if not expression: raise AssertionError - -The extended form, "assert expression1, expression2", is equivalent to - - if __debug__: - if not expression1: raise AssertionError(expression2) - -These equivalences assume that "__debug__" and "AssertionError" refer -to the built-in variables with those names. In the current -implementation, the built-in variable "__debug__" is "True" under -normal circumstances, "False" when optimization is requested (command -line option "-O"). The current code generator emits no code for an -"assert" statement when optimization is requested at compile time. -Note that it is unnecessary to include the source code for the -expression that failed in the error message; it will be displayed as -part of the stack trace. - -Assignments to "__debug__" are illegal. The value for the built-in -variable is determined when the interpreter starts. -''', - 'assignment': r'''Assignment statements -********************* - -Assignment statements are used to (re)bind names to values and to -modify attributes or items of mutable objects: - - assignment_stmt: (target_list "=")+ (starred_expression | yield_expression) - target_list: target ("," target)* [","] - target: identifier - | "(" [target_list] ")" - | "[" [target_list] "]" - | attributeref - | subscription - | "*" target - -(See section Primaries for the syntax definitions for *attributeref* -and *subscription*.) - -An assignment statement evaluates the expression list (remember that -this can be a single expression or a comma-separated list, the latter -yielding a tuple) and assigns the single resulting object to each of -the target lists, from left to right. - -Assignment is defined recursively depending on the form of the target -(list). When a target is part of a mutable object (an attribute -reference or subscription), the mutable object must ultimately perform -the assignment and decide about its validity, and may raise an -exception if the assignment is unacceptable. The rules observed by -various types and the exceptions raised are given with the definition -of the object types (see section The standard type hierarchy). - -Assignment of an object to a target list, optionally enclosed in -parentheses or square brackets, is recursively defined as follows. - -* If the target list is a single target with no trailing comma, - optionally in parentheses, the object is assigned to that target. - -* Else: - - * If the target list contains one target prefixed with an asterisk, - called a “starred” target: The object must be an iterable with at - least as many items as there are targets in the target list, minus - one. The first items of the iterable are assigned, from left to - right, to the targets before the starred target. The final items - of the iterable are assigned to the targets after the starred - target. A list of the remaining items in the iterable is then - assigned to the starred target (the list can be empty). - - * Else: The object must be an iterable with the same number of items - as there are targets in the target list, and the items are - assigned, from left to right, to the corresponding targets. - -Assignment of an object to a single target is recursively defined as -follows. - -* If the target is an identifier (name): - - * If the name does not occur in a "global" or "nonlocal" statement - in the current code block: the name is bound to the object in the - current local namespace. - - * Otherwise: the name is bound to the object in the global namespace - or the outer namespace determined by "nonlocal", respectively. - - The name is rebound if it was already bound. This may cause the - reference count for the object previously bound to the name to reach - zero, causing the object to be deallocated and its destructor (if it - has one) to be called. - -* If the target is an attribute reference: The primary expression in - the reference is evaluated. It should yield an object with - assignable attributes; if this is not the case, "TypeError" is - raised. That object is then asked to assign the assigned object to - the given attribute; if it cannot perform the assignment, it raises - an exception (usually but not necessarily "AttributeError"). - - Note: If the object is a class instance and the attribute reference - occurs on both sides of the assignment operator, the right-hand side - expression, "a.x" can access either an instance attribute or (if no - instance attribute exists) a class attribute. The left-hand side - target "a.x" is always set as an instance attribute, creating it if - necessary. Thus, the two occurrences of "a.x" do not necessarily - refer to the same attribute: if the right-hand side expression - refers to a class attribute, the left-hand side creates a new - instance attribute as the target of the assignment: - - class Cls: - x = 3 # class variable - inst = Cls() - inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3 - - This description does not necessarily apply to descriptor - attributes, such as properties created with "property()". - -* If the target is a subscription: The primary expression in the - reference is evaluated. Next, the subscript expression is evaluated. - Then, the primary’s "__setitem__()" method is called with two - arguments: the subscript and the assigned object. - - Typically, "__setitem__()" is defined on mutable sequence objects - (such as lists) and mapping objects (such as dictionaries), and - behaves as follows. - - If the primary is a mutable sequence object (such as a list), the - subscript must yield an integer. If it is negative, the sequence’s - length is added to it. The resulting value must be a nonnegative - integer less than the sequence’s length, and the sequence is asked - to assign the assigned object to its item with that index. If the - index is out of range, "IndexError" is raised (assignment to a - subscripted sequence cannot add new items to a list). - - If the primary is a mapping object (such as a dictionary), the - subscript must have a type compatible with the mapping’s key type, - and the mapping is then asked to create a key/value pair which maps - the subscript to the assigned object. This can either replace an - existing key/value pair with the same key value, or insert a new - key/value pair (if no key with the same value existed). - - If the target is a slicing: The primary expression should evaluate - to a mutable sequence object (such as a list). The assigned object - should be *iterable*. The slicing’s lower and upper bounds should be - integers; if they are "None" (or not present), the defaults are zero - and the sequence’s length. If either bound is negative, the - sequence’s length is added to it. The resulting bounds are clipped - to lie between zero and the sequence’s length, inclusive. Finally, - the sequence object is asked to replace the slice with the items of - the assigned sequence. The length of the slice may be different - from the length of the assigned sequence, thus changing the length - of the target sequence, if the target sequence allows it. - -Although the definition of assignment implies that overlaps between -the left-hand side and the right-hand side are ‘simultaneous’ (for -example "a, b = b, a" swaps two variables), overlaps *within* the -collection of assigned-to variables occur left-to-right, sometimes -resulting in confusion. For instance, the following program prints -"[0, 2]": - - x = [0, 1] - i = 0 - i, x[i] = 1, 2 # i is updated, then x[i] is updated - print(x) - -See also: - - **PEP 3132** - Extended Iterable Unpacking - The specification for the "*target" feature. - - -Augmented assignment statements -=============================== - -Augmented assignment is the combination, in a single statement, of a -binary operation and an assignment statement: - - augmented_assignment_stmt: augtarget augop (expression_list | yield_expression) - augtarget: identifier | attributeref | subscription - augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" - | ">>=" | "<<=" | "&=" | "^=" | "|=" - -(See section Primaries for the syntax definitions of the last three -symbols.) - -An augmented assignment evaluates the target (which, unlike normal -assignment statements, cannot be an unpacking) and the expression -list, performs the binary operation specific to the type of assignment -on the two operands, and assigns the result to the original target. -The target is only evaluated once. - -An augmented assignment statement like "x += 1" can be rewritten as "x -= x + 1" to achieve a similar, but not exactly equal effect. In the -augmented version, "x" is only evaluated once. Also, when possible, -the actual operation is performed *in-place*, meaning that rather than -creating a new object and assigning that to the target, the old object -is modified instead. - -Unlike normal assignments, augmented assignments evaluate the left- -hand side *before* evaluating the right-hand side. For example, "a[i] -+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs -the addition, and lastly, it writes the result back to "a[i]". - -With the exception of assigning to tuples and multiple targets in a -single statement, the assignment done by augmented assignment -statements is handled the same way as normal assignments. Similarly, -with the exception of the possible *in-place* behavior, the binary -operation performed by augmented assignment is the same as the normal -binary operations. - -For targets which are attribute references, the same caveat about -class and instance attributes applies as for regular assignments. - - -Annotated assignment statements -=============================== - -*Annotation* assignment is the combination, in a single statement, of -a variable or attribute annotation and an optional assignment -statement: - - annotated_assignment_stmt: augtarget ":" expression - ["=" (starred_expression | yield_expression)] - -The difference from normal Assignment statements is that only a single -target is allowed. - -The assignment target is considered “simple” if it consists of a -single name that is not enclosed in parentheses. For simple assignment -targets, if in class or module scope, the annotations are gathered in -a lazily evaluated annotation scope. The annotations can be evaluated -using the "__annotations__" attribute of a class or module, or using -the facilities in the "annotationlib" module. - -If the assignment target is not simple (an attribute, subscript node, -or parenthesized name), the annotation is never evaluated. - -If a name is annotated in a function scope, then this name is local -for that scope. Annotations are never evaluated and stored in function -scopes. - -If the right hand side is present, an annotated assignment performs -the actual assignment as if there was no annotation present. If the -right hand side is not present for an expression target, then the -interpreter evaluates the target except for the last "__setitem__()" -or "__setattr__()" call. - -See also: - - **PEP 526** - Syntax for Variable Annotations - The proposal that added syntax for annotating the types of - variables (including class variables and instance variables), - instead of expressing them through comments. - - **PEP 484** - Type hints - The proposal that added the "typing" module to provide a standard - syntax for type annotations that can be used in static analysis - tools and IDEs. - -Changed in version 3.8: Now annotated assignments allow the same -expressions in the right hand side as regular assignments. Previously, -some expressions (like un-parenthesized tuple expressions) caused a -syntax error. - -Changed in version 3.14: Annotations are now lazily evaluated in a -separate annotation scope. If the assignment target is not simple, -annotations are never evaluated. -''', - 'assignment-expressions': r'''Assignment expressions -********************** - - assignment_expression: [identifier ":="] expression - -An assignment expression (sometimes also called a “named expression” -or “walrus”) assigns an "expression" to an "identifier", while also -returning the value of the "expression". - -One common use case is when handling matched regular expressions: - - if matching := pattern.search(data): - do_something(matching) - -Or, when processing a file stream in chunks: - - while chunk := file.read(9000): - process(chunk) - -Assignment expressions must be surrounded by parentheses when used as -expression statements and when used as sub-expressions in slicing, -conditional, lambda, keyword-argument, and comprehension-if -expressions and in "assert", "with", and "assignment" statements. In -all other places where they can be used, parentheses are not required, -including in "if" and "while" statements. - -Added in version 3.8: See **PEP 572** for more details about -assignment expressions. -''', - 'async': r'''Coroutines -********** - -Added in version 3.5. - - -Coroutine function definition -============================= - - async_funcdef: [decorators] "async" "def" funcname "(" [parameter_list] ")" - ["->" expression] ":" suite - -Execution of Python coroutines can be suspended and resumed at many -points (see *coroutine*). "await" expressions, "async for" and "async -with" can only be used in the body of a coroutine function. - -Functions defined with "async def" syntax are always coroutine -functions, even if they do not contain "await" or "async" keywords. - -It is a "SyntaxError" to use a "yield from" expression inside the body -of a coroutine function. - -An example of a coroutine function: - - async def func(param1, param2): - do_stuff() - await some_coroutine() - -Changed in version 3.7: "await" and "async" are now keywords; -previously they were only treated as such inside the body of a -coroutine function. - - -The "async for" statement -========================= - - async_for_stmt: "async" for_stmt - -An *asynchronous iterable* provides an "__aiter__" method that -directly returns an *asynchronous iterator*, which can call -asynchronous code in its "__anext__" method. - -The "async for" statement allows convenient iteration over -asynchronous iterables. - -The following code: - - async for TARGET in ITER: - SUITE - else: - SUITE2 - -Is semantically equivalent to: - - iter = (ITER).__aiter__() - running = True - - while running: - try: - TARGET = await iter.__anext__() - except StopAsyncIteration: - running = False - else: - SUITE - else: - SUITE2 - -except that implicit special method lookup is used for "__aiter__()" -and "__anext__()". - -It is a "SyntaxError" to use an "async for" statement outside the body -of a coroutine function. - - -The "async with" statement -========================== - - async_with_stmt: "async" with_stmt - -An *asynchronous context manager* is a *context manager* that is able -to suspend execution in its *enter* and *exit* methods. - -The following code: - - async with EXPRESSION as TARGET: - SUITE - -is semantically equivalent to: - - manager = (EXPRESSION) - aenter = manager.__aenter__ - aexit = manager.__aexit__ - value = await aenter() - hit_except = False - - try: - TARGET = value - SUITE - except: - hit_except = True - if not await aexit(*sys.exc_info()): - raise - finally: - if not hit_except: - await aexit(None, None, None) - -except that implicit special method lookup is used for "__aenter__()" -and "__aexit__()". - -It is a "SyntaxError" to use an "async with" statement outside the -body of a coroutine function. - -See also: - - **PEP 492** - Coroutines with async and await syntax - The proposal that made coroutines a proper standalone concept in - Python, and added supporting syntax. -''', - 'atom-identifiers': r'''Identifiers (Names) -******************* - -An identifier occurring as an atom is a name. See section Names -(identifiers and keywords) for lexical definition and section Naming -and binding for documentation of naming and binding. - -When the name is bound to an object, evaluation of the atom yields -that object. When a name is not bound, an attempt to evaluate it -raises a "NameError" exception. - - -Private name mangling -===================== - -When an identifier that textually occurs in a class definition begins -with two or more underscore characters and does not end in two or more -underscores, it is considered a *private name* of that class. - -See also: The class specifications. - -More precisely, private names are transformed to a longer form before -code is generated for them. If the transformed name is longer than -255 characters, implementation-defined truncation may happen. - -The transformation is independent of the syntactical context in which -the identifier is used but only the following private identifiers are -mangled: - -* Any name used as the name of a variable that is assigned or read or - any name of an attribute being accessed. - - The "__name__" attribute of nested functions, classes, and type - aliases is however not mangled. - -* The name of imported modules, e.g., "__spam" in "import __spam". If - the module is part of a package (i.e., its name contains a dot), the - name is *not* mangled, e.g., the "__foo" in "import __foo.bar" is - not mangled. - -* The name of an imported member, e.g., "__f" in "from spam import - __f". - -The transformation rule is defined as follows: - -* The class name, with leading underscores removed and a single - leading underscore inserted, is inserted in front of the identifier, - e.g., the identifier "__spam" occurring in a class named "Foo", - "_Foo" or "__Foo" is transformed to "_Foo__spam". - -* If the class name consists only of underscores, the transformation - is the identity, e.g., the identifier "__spam" occurring in a class - named "_" or "__" is left as is. -''', - 'atom-literals': r'''Literals -******** - -A *literal* is a textual representation of a value. Python supports -numeric, string and bytes literals. Format strings and template -strings are treated as string literals. - -Numeric literals consist of a single "NUMBER" token, which names an -integer, floating-point number, or an imaginary number. See the -Numeric literals section in Lexical analysis documentation for -details. - -String and bytes literals may consist of several tokens. See section -String literal concatenation for details. - -Note that negative and complex numbers, like "-3" or "3+4.2j", are -syntactically not literals, but unary or binary arithmetic operations -involving the "-" or "+" operator. - -Evaluation of a literal yields an object of the given type ("int", -"float", "complex", "str", "bytes", or "Template") with the given -value. The value may be approximated in the case of floating-point and -imaginary literals. - -The formal grammar for literals is: - - literal: strings | NUMBER - - -Literals and object identity -============================ - -All literals correspond to immutable data types, and hence the -object’s identity is less important than its value. Multiple -evaluations of literals with the same value (either the same -occurrence in the program text or a different occurrence) may obtain -the same object or a different object with the same value. - -CPython implementation detail: For example, in CPython, *small* -integers with the same value evaluate to the same object: - - >>> x = 7 - >>> y = 7 - >>> x is y - True - -However, large integers evaluate to different objects: - - >>> x = 123456789 - >>> y = 123456789 - >>> x is y - False - -This behavior may change in future versions of CPython. In particular, -the boundary between “small” and “large” integers has already changed -in the past.CPython will emit a "SyntaxWarning" when you compare -literals using "is": - - >>> x = 7 - >>> x is 7 - <input>:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="? - True - -See When can I rely on identity tests with the is operator? for more -information. - -Template strings are immutable but may reference mutable objects as -"Interpolation" values. For the purposes of this section, two -t-strings have the “same value” if both their structure and the -*identity* of the values match. - -**CPython implementation detail:** Currently, each evaluation of a -template string results in a different object. - - -String literal concatenation -============================ - -Multiple adjacent string or bytes literals, possibly using different -quoting conventions, are allowed, and their meaning is the same as -their concatenation: - - >>> "hello" 'world' - "helloworld" - -This feature is defined at the syntactical level, so it only works -with literals. To concatenate string expressions at run time, the ‘+’ -operator may be used: - - >>> greeting = "Hello" - >>> space = " " - >>> name = "Blaise" - >>> print(greeting + space + name) # not: print(greeting space name) - Hello Blaise - -Literal concatenation can freely mix raw strings, triple-quoted -strings, and formatted string literals. For example: - - >>> "Hello" r', ' f"{name}!" - "Hello, Blaise!" - -This feature can be used to reduce the number of backslashes needed, -to split long strings conveniently across long lines, or even to add -comments to parts of strings. For example: - - re.compile("[A-Za-z_]" # letter or underscore - "[A-Za-z0-9_]*" # letter, digit or underscore - ) - -However, bytes literals may only be combined with other byte literals; -not with string literals of any kind. Also, template string literals -may only be combined with other template string literals: - - >>> t"Hello" t"{name}!" - Template(strings=('Hello', '!'), interpolations=(...)) - -Formally: - - strings: (STRING | fstring)+ | tstring+ -''', - 'attribute-access': r'''Customizing attribute access -**************************** - -The following methods can be defined to customize the meaning of -attribute access (use of, assignment to, or deletion of "x.name") for -class instances. - -object.__getattr__(self, name) - - Called when the default attribute access fails with an - "AttributeError" (either "__getattribute__()" raises an - "AttributeError" because *name* is not an instance attribute or an - attribute in the class tree for "self"; or "__get__()" of a *name* - property raises "AttributeError"). This method should either - return the (computed) attribute value or raise an "AttributeError" - exception. The "object" class itself does not provide this method. - - Note that if the attribute is found through the normal mechanism, - "__getattr__()" is not called. (This is an intentional asymmetry - between "__getattr__()" and "__setattr__()".) This is done both for - efficiency reasons and because otherwise "__getattr__()" would have - no way to access other attributes of the instance. Note that at - least for instance variables, you can take total control by not - inserting any values in the instance attribute dictionary (but - instead inserting them in another object). See the - "__getattribute__()" method below for a way to actually get total - control over attribute access. - -object.__getattribute__(self, name) - - Called unconditionally to implement attribute accesses for - instances of the class. If the class also defines "__getattr__()", - the latter will not be called unless "__getattribute__()" either - calls it explicitly or raises an "AttributeError". This method - should return the (computed) attribute value or raise an - "AttributeError" exception. In order to avoid infinite recursion in - this method, its implementation should always call the base class - method with the same name to access any attributes it needs, for - example, "object.__getattribute__(self, name)". - - Note: - - This method may still be bypassed when looking up special methods - as the result of implicit invocation via language syntax or - built-in functions. See Special method lookup. - - For certain sensitive attribute accesses, raises an auditing event - "object.__getattr__" with arguments "obj" and "name". - -object.__setattr__(self, name, value) - - Called when an attribute assignment is attempted. This is called - instead of the normal mechanism (i.e. store the value in the - instance dictionary). *name* is the attribute name, *value* is the - value to be assigned to it. - - If "__setattr__()" wants to assign to an instance attribute, it - should call the base class method with the same name, for example, - "object.__setattr__(self, name, value)". - - For certain sensitive attribute assignments, raises an auditing - event "object.__setattr__" with arguments "obj", "name", "value". - -object.__delattr__(self, name) - - Like "__setattr__()" but for attribute deletion instead of - assignment. This should only be implemented if "del obj.name" is - meaningful for the object. - - For certain sensitive attribute deletions, raises an auditing event - "object.__delattr__" with arguments "obj" and "name". - -object.__dir__(self) - - Called when "dir()" is called on the object. An iterable must be - returned. "dir()" converts the returned iterable to a list and - sorts it. - - -Customizing module attribute access -=================================== - -module.__getattr__() -module.__dir__() - -Special names "__getattr__" and "__dir__" can be also used to -customize access to module attributes. The "__getattr__" function at -the module level should accept one argument which is the name of an -attribute and return the computed value or raise an "AttributeError". -If an attribute is not found on a module object through the normal -lookup, i.e. "object.__getattribute__()", then "__getattr__" is -searched in the module "__dict__" before raising an "AttributeError". -If found, it is called with the attribute name and the result is -returned. - -The "__dir__" function should accept no arguments, and return an -iterable of strings that represents the names accessible on module. If -present, this function overrides the standard "dir()" search on a -module. - -module.__class__ - -For a more fine grained customization of the module behavior (setting -attributes, properties, etc.), one can set the "__class__" attribute -of a module object to a subclass of "types.ModuleType". For example: - - import sys - from types import ModuleType - - class VerboseModule(ModuleType): - def __repr__(self): - return f'Verbose {self.__name__}' - - def __setattr__(self, attr, value): - print(f'Setting {attr}...') - super().__setattr__(attr, value) - - sys.modules[__name__].__class__ = VerboseModule - -Note: - - Defining module "__getattr__" and setting module "__class__" only - affect lookups made using the attribute access syntax – directly - accessing the module globals (whether by code within the module, or - via a reference to the module’s globals dictionary) is unaffected. - -Changed in version 3.5: "__class__" module attribute is now writable. - -Added in version 3.7: "__getattr__" and "__dir__" module attributes. - -See also: - - **PEP 562** - Module __getattr__ and __dir__ - Describes the "__getattr__" and "__dir__" functions on modules. - - -Implementing Descriptors -======================== - -The following methods only apply when an instance of the class -containing the method (a so-called *descriptor* class) appears in an -*owner* class (the descriptor must be in either the owner’s class -dictionary or in the class dictionary for one of its parents). In the -examples below, “the attribute” refers to the attribute whose name is -the key of the property in the owner class’ "__dict__". The "object" -class itself does not implement any of these protocols. - -object.__get__(self, instance, owner=None) - - Called to get the attribute of the owner class (class attribute - access) or of an instance of that class (instance attribute - access). The optional *owner* argument is the owner class, while - *instance* is the instance that the attribute was accessed through, - or "None" when the attribute is accessed through the *owner*. - - This method should return the computed attribute value or raise an - "AttributeError" exception. - - **PEP 252** specifies that "__get__()" is callable with one or two - arguments. Python’s own built-in descriptors support this - specification; however, it is likely that some third-party tools - have descriptors that require both arguments. Python’s own - "__getattribute__()" implementation always passes in both arguments - whether they are required or not. - -object.__set__(self, instance, value) - - Called to set the attribute on an instance *instance* of the owner - class to a new value, *value*. - - Note, adding "__set__()" or "__delete__()" changes the kind of - descriptor to a “data descriptor”. See Invoking Descriptors for - more details. - -object.__delete__(self, instance) - - Called to delete the attribute on an instance *instance* of the - owner class. - -Instances of descriptors may also have the "__objclass__" attribute -present: - -object.__objclass__ - - The attribute "__objclass__" is interpreted by the "inspect" module - as specifying the class where this object was defined (setting this - appropriately can assist in runtime introspection of dynamic class - attributes). For callables, it may indicate that an instance of the - given type (or a subclass) is expected or required as the first - positional argument (for example, CPython sets this attribute for - unbound methods that are implemented in C). - - -Invoking Descriptors -==================== - -In general, a descriptor is an object attribute with “binding -behavior”, one whose attribute access has been overridden by methods -in the descriptor protocol: "__get__()", "__set__()", and -"__delete__()". If any of those methods are defined for an object, it -is said to be a descriptor. - -The default behavior for attribute access is to get, set, or delete -the attribute from an object’s dictionary. For instance, "a.x" has a -lookup chain starting with "a.__dict__['x']", then -"type(a).__dict__['x']", and continuing through the base classes of -"type(a)" excluding metaclasses. - -However, if the looked-up value is an object defining one of the -descriptor methods, then Python may override the default behavior and -invoke the descriptor method instead. Where this occurs in the -precedence chain depends on which descriptor methods were defined and -how they were called. - -The starting point for descriptor invocation is a binding, "a.x". How -the arguments are assembled depends on "a": - -Direct Call - The simplest and least common call is when user code directly - invokes a descriptor method: "x.__get__(a)". - -Instance Binding - If binding to an object instance, "a.x" is transformed into the - call: "type(a).__dict__['x'].__get__(a, type(a))". - -Class Binding - If binding to a class, "A.x" is transformed into the call: - "A.__dict__['x'].__get__(None, A)". - -Super Binding - A dotted lookup such as "super(A, a).x" searches - "a.__class__.__mro__" for a base class "B" following "A" and then - returns "B.__dict__['x'].__get__(a, A)". If not a descriptor, "x" - is returned unchanged. - -For instance bindings, the precedence of descriptor invocation depends -on which descriptor methods are defined. A descriptor can define any -combination of "__get__()", "__set__()" and "__delete__()". If it -does not define "__get__()", then accessing the attribute will return -the descriptor object itself unless there is a value in the object’s -instance dictionary. If the descriptor defines "__set__()" and/or -"__delete__()", it is a data descriptor; if it defines neither, it is -a non-data descriptor. Normally, data descriptors define both -"__get__()" and "__set__()", while non-data descriptors have just the -"__get__()" method. Data descriptors with "__get__()" and "__set__()" -(and/or "__delete__()") defined always override a redefinition in an -instance dictionary. In contrast, non-data descriptors can be -overridden by instances. - -Python methods (including those decorated with "@staticmethod" and -"@classmethod") are implemented as non-data descriptors. Accordingly, -instances can redefine and override methods. This allows individual -instances to acquire behaviors that differ from other instances of the -same class. - -The "property()" function is implemented as a data descriptor. -Accordingly, instances cannot override the behavior of a property. - - -__slots__ -========= - -*__slots__* allow us to explicitly declare data members (like -properties) and deny the creation of "__dict__" and *__weakref__* -(unless explicitly declared in *__slots__* or available in a parent.) - -The space saved over using "__dict__" can be significant. Attribute -lookup speed can be significantly improved as well. - -object.__slots__ - - This class variable can be assigned a string, iterable, or sequence - of strings with variable names used by instances. *__slots__* - reserves space for the declared variables and prevents the - automatic creation of "__dict__" and *__weakref__* for each - instance. - -Notes on using *__slots__*: - -* When inheriting from a class without *__slots__*, the "__dict__" and - *__weakref__* attribute of the instances will always be accessible. - -* Without a "__dict__" variable, instances cannot be assigned new - variables not listed in the *__slots__* definition. Attempts to - assign to an unlisted variable name raises "AttributeError". If - dynamic assignment of new variables is desired, then add - "'__dict__'" to the sequence of strings in the *__slots__* - declaration. - -* Without a *__weakref__* variable for each instance, classes defining - *__slots__* do not support "weak references" to its instances. If - weak reference support is needed, then add "'__weakref__'" to the - sequence of strings in the *__slots__* declaration. - -* *__slots__* are implemented at the class level by creating - descriptors for each variable name. As a result, class attributes - cannot be used to set default values for instance variables defined - by *__slots__*; otherwise, the class attribute would overwrite the - descriptor assignment. - -* The action of a *__slots__* declaration is not limited to the class - where it is defined. *__slots__* declared in parents are available - in child classes. However, instances of a child subclass will get a - "__dict__" and *__weakref__* unless the subclass also defines - *__slots__* (which should only contain names of any *additional* - slots). - -* If a class defines a slot also defined in a base class, the instance - variable defined by the base class slot is inaccessible (except by - retrieving its descriptor directly from the base class). This - renders the meaning of the program undefined. In the future, a - check may be added to prevent this. - -* "TypeError" will be raised if nonempty *__slots__* are defined for a - class derived from a ""variable-length" built-in type" such as - "int", "bytes", and "tuple". - -* Any non-string *iterable* may be assigned to *__slots__*. - -* If a "dictionary" is used to assign *__slots__*, the dictionary keys - will be used as the slot names. The values of the dictionary can be - used to provide per-attribute docstrings that will be recognised by - "inspect.getdoc()" and displayed in the output of "help()". - -* "__class__" assignment works only if both classes have the same - *__slots__*. - -* Multiple inheritance with multiple slotted parent classes can be - used, but only one parent is allowed to have attributes created by - slots (the other bases must have empty slot layouts) - violations - raise "TypeError". - -* If an *iterator* is used for *__slots__* then a *descriptor* is - created for each of the iterator’s values. However, the *__slots__* - attribute will be an empty iterator. -''', - 'attribute-references': r'''Attribute references -******************** - -An attribute reference is a primary followed by a period and a name: - - attributeref: primary "." identifier - -The primary must evaluate to an object of a type that supports -attribute references, which most objects do. This object is then -asked to produce the attribute whose name is the identifier. The type -and value produced is determined by the object. Multiple evaluations -of the same attribute reference may yield different objects. - -This production can be customized by overriding the -"__getattribute__()" method or the "__getattr__()" method. The -"__getattribute__()" method is called first and either returns a value -or raises "AttributeError" if the attribute is not available. - -If an "AttributeError" is raised and the object has a "__getattr__()" -method, that method is called as a fallback. -''', - 'augassign': r'''Augmented assignment statements -******************************* - -Augmented assignment is the combination, in a single statement, of a -binary operation and an assignment statement: - - augmented_assignment_stmt: augtarget augop (expression_list | yield_expression) - augtarget: identifier | attributeref | subscription - augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" - | ">>=" | "<<=" | "&=" | "^=" | "|=" - -(See section Primaries for the syntax definitions of the last three -symbols.) - -An augmented assignment evaluates the target (which, unlike normal -assignment statements, cannot be an unpacking) and the expression -list, performs the binary operation specific to the type of assignment -on the two operands, and assigns the result to the original target. -The target is only evaluated once. - -An augmented assignment statement like "x += 1" can be rewritten as "x -= x + 1" to achieve a similar, but not exactly equal effect. In the -augmented version, "x" is only evaluated once. Also, when possible, -the actual operation is performed *in-place*, meaning that rather than -creating a new object and assigning that to the target, the old object -is modified instead. - -Unlike normal assignments, augmented assignments evaluate the left- -hand side *before* evaluating the right-hand side. For example, "a[i] -+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs -the addition, and lastly, it writes the result back to "a[i]". - -With the exception of assigning to tuples and multiple targets in a -single statement, the assignment done by augmented assignment -statements is handled the same way as normal assignments. Similarly, -with the exception of the possible *in-place* behavior, the binary -operation performed by augmented assignment is the same as the normal -binary operations. - -For targets which are attribute references, the same caveat about -class and instance attributes applies as for regular assignments. -''', - 'await': r'''Await expression -**************** - -Suspend the execution of *coroutine* on an *awaitable* object. Can -only be used inside a *coroutine function*. - - await_expr: "await" primary - -Added in version 3.5. -''', - 'binary': r'''Binary arithmetic operations -**************************** - -The binary arithmetic operations have the conventional priority -levels. Note that some of these operations also apply to certain non- -numeric types. Apart from the power operator, there are only two -levels, one for multiplicative operators and one for additive -operators: - - m_expr: u_expr | m_expr "*" u_expr | m_expr "@" m_expr | - m_expr "//" u_expr | m_expr "/" u_expr | - m_expr "%" u_expr - a_expr: m_expr | a_expr "+" m_expr | a_expr "-" m_expr - -The "*" (multiplication) operator yields the product of its arguments. -The arguments must either both be numbers, or one argument must be an -integer and the other must be a sequence. In the former case, the -numbers are converted to a common real type and then multiplied -together. In the latter case, sequence repetition is performed; a -negative repetition factor yields an empty sequence. - -This operation can be customized using the special "__mul__()" and -"__rmul__()" methods. - -Changed in version 3.14: If only one operand is a complex number, the -other operand is converted to a floating-point number. - -The "@" (at) operator is intended to be used for matrix -multiplication. No builtin Python types implement this operator. - -This operation can be customized using the special "__matmul__()" and -"__rmatmul__()" methods. - -Added in version 3.5. - -The "/" (division) and "//" (floor division) operators yield the -quotient of their arguments. The numeric arguments are first -converted to a common type. Division of integers yields a float, while -floor division of integers results in an integer; the result is that -of mathematical division with the ‘floor’ function applied to the -result. Division by zero raises the "ZeroDivisionError" exception. - -The division operation can be customized using the special -"__truediv__()" and "__rtruediv__()" methods. The floor division -operation can be customized using the special "__floordiv__()" and -"__rfloordiv__()" methods. - -The "%" (modulo) operator yields the remainder from the division of -the first argument by the second. The numeric arguments are first -converted to a common type. A zero right argument raises the -"ZeroDivisionError" exception. The arguments may be floating-point -numbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals "4*0.7 + -0.34".) The modulo operator always yields a result with the same sign -as its second operand (or zero); the absolute value of the result is -strictly smaller than the absolute value of the second operand [1]. - -The floor division and modulo operators are connected by the following -identity: "x == (x//y)*y + (x%y)". Floor division and modulo are also -connected with the built-in function "divmod()": "divmod(x, y) == -(x//y, x%y)". [2]. - -In addition to performing the modulo operation on numbers, the "%" -operator is also overloaded by string objects to perform old-style -string formatting (also known as interpolation). The syntax for -string formatting is described in the Python Library Reference, -section printf-style String Formatting. - -The *modulo* operation can be customized using the special "__mod__()" -and "__rmod__()" methods. - -The floor division operator, the modulo operator, and the "divmod()" -function are not defined for complex numbers. Instead, convert to a -floating-point number using the "abs()" function if appropriate. - -The "+" (addition) operator yields the sum of its arguments. The -arguments must either both be numbers or both be sequences of the same -type. In the former case, the numbers are converted to a common real -type and then added together. In the latter case, the sequences are -concatenated. - -This operation can be customized using the special "__add__()" and -"__radd__()" methods. - -Changed in version 3.14: If only one operand is a complex number, the -other operand is converted to a floating-point number. - -The "-" (subtraction) operator yields the difference of its arguments. -The numeric arguments are first converted to a common real type. - -This operation can be customized using the special "__sub__()" and -"__rsub__()" methods. - -Changed in version 3.14: If only one operand is a complex number, the -other operand is converted to a floating-point number. -''', - 'bitwise': r'''Binary bitwise operations -************************* - -Each of the three bitwise operations has a different priority level: - - and_expr: shift_expr | and_expr "&" shift_expr - xor_expr: and_expr | xor_expr "^" and_expr - or_expr: xor_expr | or_expr "|" xor_expr - -The "&" operator yields the bitwise AND of its arguments, which must -be integers or one of them must be a custom object overriding -"__and__()" or "__rand__()" special methods. - -The "^" operator yields the bitwise XOR (exclusive OR) of its -arguments, which must be integers or one of them must be a custom -object overriding "__xor__()" or "__rxor__()" special methods. - -The "|" operator yields the bitwise (inclusive) OR of its arguments, -which must be integers or one of them must be a custom object -overriding "__or__()" or "__ror__()" special methods. -''', - 'bltin-code-objects': r'''Code Objects -************ - -Code objects are used by the implementation to represent “pseudo- -compiled” executable Python code such as a function body. They differ -from function objects because they don’t contain a reference to their -global execution environment. Code objects are returned by the built- -in "compile()" function and can be extracted from function objects -through their "__code__" attribute. See also the "code" module. - -Accessing "__code__" raises an auditing event "object.__getattr__" -with arguments "obj" and ""__code__"". - -A code object can be executed or evaluated by passing it (instead of a -source string) to the "exec()" or "eval()" built-in functions. - -See The standard type hierarchy for more information. -''', - 'bltin-ellipsis-object': r'''The Ellipsis Object -******************* - -This object is commonly used to indicate that something is omitted. It -supports no special operations. There is exactly one ellipsis object, -named "Ellipsis" (a built-in name). "type(Ellipsis)()" produces the -"Ellipsis" singleton. - -It is written as "Ellipsis" or "...". - -In typical use, "..." as the "Ellipsis" object appears in a few -different places, for instance: - -* In type annotations, such as callable arguments or tuple elements. - -* As the body of a function instead of a pass statement. - -* In third-party libraries, such as Numpy’s slicing and striding. - -Python also uses three dots in ways that are not "Ellipsis" objects, -for instance: - -* Doctest’s "ELLIPSIS", as a pattern for missing content. - -* The default Python prompt of the *interactive* shell when partial - input is incomplete. - -Lastly, the Python documentation often uses three dots in conventional -English usage to mean omitted content, even in code examples that also -use them as the "Ellipsis". -''', - 'bltin-null-object': r'''The Null Object -*************** - -This object is returned by functions that don’t explicitly return a -value. It supports no special operations. There is exactly one null -object, named "None" (a built-in name). "type(None)()" produces the -same singleton. - -It is written as "None". -''', - 'bltin-type-objects': r'''Type Objects -************ - -Type objects represent the various object types. An object’s type is -accessed by the built-in function "type()". There are no special -operations on types. The standard module "types" defines names for -all standard built-in types. - -Types are written like this: "<class 'int'>". -''', - 'booleans': r'''Boolean operations -****************** - - or_test: and_test | or_test "or" and_test - and_test: not_test | and_test "and" not_test - not_test: comparison | "not" not_test - -In the context of Boolean operations, and also when expressions are -used by control flow statements, the following values are interpreted -as false: "False", "None", numeric zero of all types, and empty -strings and containers (including strings, tuples, lists, -dictionaries, sets and frozensets). All other values are interpreted -as true. User-defined objects can customize their truth value by -providing a "__bool__()" method. - -The operator "not" yields "True" if its argument is false, "False" -otherwise. - -The expression "x and y" first evaluates *x*; if *x* is false, its -value is returned; otherwise, *y* is evaluated and the resulting value -is returned. - -The expression "x or y" first evaluates *x*; if *x* is true, its value -is returned; otherwise, *y* is evaluated and the resulting value is -returned. - -Note that neither "and" nor "or" restrict the value and type they -return to "False" and "True", but rather return the last evaluated -argument. This is sometimes useful, e.g., if "s" is a string that -should be replaced by a default value if it is empty, the expression -"s or 'foo'" yields the desired value. Because "not" has to create a -new value, it returns a boolean value regardless of the type of its -argument (for example, "not 'foo'" produces "False" rather than "''".) -''', - 'break': r'''The "break" statement -********************* - - break_stmt: "break" - -"break" may only occur syntactically nested in a "for" or "while" -loop, but not nested in a function or class definition within that -loop. - -It terminates the nearest enclosing loop, skipping the optional "else" -clause if the loop has one. - -If a "for" loop is terminated by "break", the loop control target -keeps its current value. - -When "break" passes control out of a "try" statement with a "finally" -clause, that "finally" clause is executed before really leaving the -loop. -''', - 'callable-types': r'''Emulating callable objects -************************** - -object.__call__(self[, args...]) - - Called when the instance is “called” as a function; if this method - is defined, "x(arg1, arg2, ...)" roughly translates to - "type(x).__call__(x, arg1, ...)". The "object" class itself does - not provide this method. -''', - 'calls': r'''Calls -***** - -A call calls a callable object (e.g., a *function*) with a possibly -empty series of *arguments*: - - call: primary "(" [argument_list [","] | comprehension] ")" - argument_list: positional_arguments ["," starred_and_keywords] - ["," keywords_arguments] - | starred_and_keywords ["," keywords_arguments] - | keywords_arguments - positional_arguments: positional_item ("," positional_item)* - positional_item: assignment_expression | "*" expression - starred_and_keywords: ("*" expression | keyword_item) - ("," "*" expression | "," keyword_item)* - keywords_arguments: (keyword_item | "**" expression) - ("," keyword_item | "," "**" expression)* - keyword_item: identifier "=" expression - -An optional trailing comma may be present after the positional and -keyword arguments but does not affect the semantics. - -The primary must evaluate to a callable object (user-defined -functions, built-in functions, methods of built-in objects, class -objects, methods of class instances, and all objects having a -"__call__()" method are callable). All argument expressions are -evaluated before the call is attempted. Please refer to section -Function definitions for the syntax of formal *parameter* lists. - -If keyword arguments are present, they are first converted to -positional arguments, as follows. First, a list of unfilled slots is -created for the formal parameters. If there are N positional -arguments, they are placed in the first N slots. Next, for each -keyword argument, the identifier is used to determine the -corresponding slot (if the identifier is the same as the first formal -parameter name, the first slot is used, and so on). If the slot is -already filled, a "TypeError" exception is raised. Otherwise, the -argument is placed in the slot, filling it (even if the expression is -"None", it fills the slot). When all arguments have been processed, -the slots that are still unfilled are filled with the corresponding -default value from the function definition. (Default values are -calculated, once, when the function is defined; thus, a mutable object -such as a list or dictionary used as default value will be shared by -all calls that don’t specify an argument value for the corresponding -slot; this should usually be avoided.) If there are any unfilled -slots for which no default value is specified, a "TypeError" exception -is raised. Otherwise, the list of filled slots is used as the -argument list for the call. - -**CPython implementation detail:** An implementation may provide -built-in functions whose positional parameters do not have names, even -if they are ‘named’ for the purpose of documentation, and which -therefore cannot be supplied by keyword. In CPython, this is the case -for functions implemented in C that use "PyArg_ParseTuple()" to parse -their arguments. - -If there are more positional arguments than there are formal parameter -slots, a "TypeError" exception is raised, unless a formal parameter -using the syntax "*identifier" is present; in this case, that formal -parameter receives a tuple containing the excess positional arguments -(or an empty tuple if there were no excess positional arguments). - -If any keyword argument does not correspond to a formal parameter -name, a "TypeError" exception is raised, unless a formal parameter -using the syntax "**identifier" is present; in this case, that formal -parameter receives a dictionary containing the excess keyword -arguments (using the keywords as keys and the argument values as -corresponding values), or a (new) empty dictionary if there were no -excess keyword arguments. - -If the syntax "*expression" appears in the function call, "expression" -must evaluate to an *iterable*. Elements from these iterables are -treated as if they were additional positional arguments. For the call -"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, …, *yM*, -this is equivalent to a call with M+4 positional arguments *x1*, *x2*, -*y1*, …, *yM*, *x3*, *x4*. - -A consequence of this is that although the "*expression" syntax may -appear *after* explicit keyword arguments, it is processed *before* -the keyword arguments (and any "**expression" arguments – see below). -So: - - >>> def f(a, b): - ... print(a, b) - ... - >>> f(b=1, *(2,)) - 2 1 - >>> f(a=1, *(2,)) - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - TypeError: f() got multiple values for keyword argument 'a' - >>> f(1, *(2,)) - 1 2 - -It is unusual for both keyword arguments and the "*expression" syntax -to be used in the same call, so in practice this confusion does not -often arise. - -If the syntax "**expression" appears in the function call, -"expression" must evaluate to a *mapping*, the contents of which are -treated as additional keyword arguments. If a parameter matching a key -has already been given a value (by an explicit keyword argument, or -from another unpacking), a "TypeError" exception is raised. - -When "**expression" is used, each key in this mapping must be a -string. Each value from the mapping is assigned to the first formal -parameter eligible for keyword assignment whose name is equal to the -key. A key need not be a Python identifier (e.g. ""max-temp °F"" is -acceptable, although it will not match any formal parameter that could -be declared). If there is no match to a formal parameter the key-value -pair is collected by the "**" parameter, if there is one, or if there -is not, a "TypeError" exception is raised. - -Formal parameters using the syntax "*identifier" or "**identifier" -cannot be used as positional argument slots or as keyword argument -names. - -Changed in version 3.5: Function calls accept any number of "*" and -"**" unpackings, positional arguments may follow iterable unpackings -("*"), and keyword arguments may follow dictionary unpackings ("**"). -Originally proposed by **PEP 448**. - -A call always returns some value, possibly "None", unless it raises an -exception. How this value is computed depends on the type of the -callable object. - -If it is— - -a user-defined function: - The code block for the function is executed, passing it the - argument list. The first thing the code block will do is bind the - formal parameters to the arguments; this is described in section - Function definitions. When the code block executes a "return" - statement, this specifies the return value of the function call. - If execution reaches the end of the code block without executing a - "return" statement, the return value is "None". - -a built-in function or method: - The result is up to the interpreter; see Built-in Functions for the - descriptions of built-in functions and methods. - -a class object: - A new instance of that class is returned. - -a class instance method: - The corresponding user-defined function is called, with an argument - list that is one longer than the argument list of the call: the - instance becomes the first argument. - -a class instance: - The class must define a "__call__()" method; the effect is then the - same as if that method was called. -''', - 'class': r'''Class definitions -***************** - -A class definition defines a class object (see section The standard -type hierarchy): - - classdef: [decorators] "class" classname [type_params] [inheritance] ":" suite - inheritance: "(" [argument_list] ")" - classname: identifier - -A class definition is an executable statement. The inheritance list -usually gives a list of base classes (see Metaclasses for more -advanced uses), so each item in the list should evaluate to a class -object which allows subclassing. Classes without an inheritance list -inherit, by default, from the base class "object"; hence, - - class Foo: - pass - -is equivalent to - - class Foo(object): - pass - -The class’s suite is then executed in a new execution frame (see -Naming and binding), using a newly created local namespace and the -original global namespace. (Usually, the suite contains mostly -function definitions.) When the class’s suite finishes execution, its -execution frame is discarded but its local namespace is saved. [5] A -class object is then created using the inheritance list for the base -classes and the saved local namespace for the attribute dictionary. -The class name is bound to this class object in the original local -namespace. - -The order in which attributes are defined in the class body is -preserved in the new class’s "__dict__". Note that this is reliable -only right after the class is created and only for classes that were -defined using the definition syntax. - -Class creation can be customized heavily using metaclasses. - -Classes can also be decorated: just like when decorating functions, - - @f1(arg) - @f2 - class Foo: pass - -is roughly equivalent to - - class Foo: pass - Foo = f1(arg)(f2(Foo)) - -The evaluation rules for the decorator expressions are the same as for -function decorators. The result is then bound to the class name. - -Changed in version 3.9: Classes may be decorated with any valid -"assignment_expression". Previously, the grammar was much more -restrictive; see **PEP 614** for details. - -A list of type parameters may be given in square brackets immediately -after the class’s name. This indicates to static type checkers that -the class is generic. At runtime, the type parameters can be retrieved -from the class’s "__type_params__" attribute. See Generic classes for -more. - -Changed in version 3.12: Type parameter lists are new in Python 3.12. - -**Programmer’s note:** Variables defined in the class definition are -class attributes; they are shared by instances. Instance attributes -can be set in a method with "self.name = value". Both class and -instance attributes are accessible through the notation “"self.name"”, -and an instance attribute hides a class attribute with the same name -when accessed in this way. Class attributes can be used as defaults -for instance attributes, but using mutable values there can lead to -unexpected results. Descriptors can be used to create instance -variables with different implementation details. - -See also: - - **PEP 3115** - Metaclasses in Python 3000 - The proposal that changed the declaration of metaclasses to the - current syntax, and the semantics for how classes with - metaclasses are constructed. - - **PEP 3129** - Class Decorators - The proposal that added class decorators. Function and method - decorators were introduced in **PEP 318**. -''', - 'comparisons': r'''Comparisons -*********** - -Unlike C, all comparison operations in Python have the same priority, -which is lower than that of any arithmetic, shifting or bitwise -operation. Also unlike C, expressions like "a < b < c" have the -interpretation that is conventional in mathematics: - - comparison: or_expr (comp_operator or_expr)* - comp_operator: "<" | ">" | "==" | ">=" | "<=" | "!=" - | "is" ["not"] | ["not"] "in" - -Comparisons yield boolean values: "True" or "False". Custom *rich -comparison methods* may return non-boolean values. In this case Python -will call "bool()" on such value in boolean contexts. - -Comparisons can be chained arbitrarily, e.g., "x < y <= z" is -equivalent to "x < y and y <= z", except that "y" is evaluated only -once (but in both cases "z" is not evaluated at all when "x < y" is -found to be false). - -Formally, if *a*, *b*, *c*, …, *y*, *z* are expressions and *op1*, -*op2*, …, *opN* are comparison operators, then "a op1 b op2 c ... y -opN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except -that each expression is evaluated at most once. - -Note that "a op1 b op2 c" doesn’t imply any kind of comparison between -*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though -perhaps not pretty). - - -Value comparisons -================= - -The operators "<", ">", "==", ">=", "<=", and "!=" compare the values -of two objects. The objects do not need to have the same type. - -Chapter Objects, values and types states that objects have a value (in -addition to type and identity). The value of an object is a rather -abstract notion in Python: For example, there is no canonical access -method for an object’s value. Also, there is no requirement that the -value of an object should be constructed in a particular way, e.g. -comprised of all its data attributes. Comparison operators implement a -particular notion of what the value of an object is. One can think of -them as defining the value of an object indirectly, by means of their -comparison implementation. - -Because all types are (direct or indirect) subtypes of "object", they -inherit the default comparison behavior from "object". Types can -customize their comparison behavior by implementing *rich comparison -methods* like "__lt__()", described in Basic customization. - -The default behavior for equality comparison ("==" and "!=") is based -on the identity of the objects. Hence, equality comparison of -instances with the same identity results in equality, and equality -comparison of instances with different identities results in -inequality. A motivation for this default behavior is the desire that -all objects should be reflexive (i.e. "x is y" implies "x == y"). - -A default order comparison ("<", ">", "<=", and ">=") is not provided; -an attempt raises "TypeError". A motivation for this default behavior -is the lack of a similar invariant as for equality. - -The behavior of the default equality comparison, that instances with -different identities are always unequal, may be in contrast to what -types will need that have a sensible definition of object value and -value-based equality. Such types will need to customize their -comparison behavior, and in fact, a number of built-in types have done -that. - -The following list describes the comparison behavior of the most -important built-in types. - -* Numbers of built-in numeric types (Numeric Types — int, float, - complex) and of the standard library types "fractions.Fraction" and - "decimal.Decimal" can be compared within and across their types, - with the restriction that complex numbers do not support order - comparison. Within the limits of the types involved, they compare - mathematically (algorithmically) correct without loss of precision. - - The not-a-number values "float('NaN')" and "decimal.Decimal('NaN')" - are special. Any ordered comparison of a number to a not-a-number - value is false. A counter-intuitive implication is that not-a-number - values are not equal to themselves. For example, if "x = - float('NaN')", "3 < x", "x < 3" and "x == x" are all false, while "x - != x" is true. This behavior is compliant with IEEE 754. - -* "None" and "NotImplemented" are singletons. **PEP 8** advises that - comparisons for singletons should always be done with "is" or "is - not", never the equality operators. - -* Binary sequences (instances of "bytes" or "bytearray") can be - compared within and across their types. They compare - lexicographically using the numeric values of their elements. - -* Strings (instances of "str") compare lexicographically using the - numerical Unicode code points (the result of the built-in function - "ord()") of their characters. [3] - - Strings and binary sequences cannot be directly compared. - -* Sequences (instances of "tuple", "list", or "range") can be compared - only within each of their types, with the restriction that ranges do - not support order comparison. Equality comparison across these - types results in inequality, and ordering comparison across these - types raises "TypeError". - - Sequences compare lexicographically using comparison of - corresponding elements. The built-in containers typically assume - identical objects are equal to themselves. That lets them bypass - equality tests for identical objects to improve performance and to - maintain their internal invariants. - - Lexicographical comparison between built-in collections works as - follows: - - * For two collections to compare equal, they must be of the same - type, have the same length, and each pair of corresponding - elements must compare equal (for example, "[1,2] == (1,2)" is - false because the type is not the same). - - * Collections that support order comparison are ordered the same as - their first unequal elements (for example, "[1,2,x] <= [1,2,y]" - has the same value as "x <= y"). If a corresponding element does - not exist, the shorter collection is ordered first (for example, - "[1,2] < [1,2,3]" is true). - -* Mappings (instances of "dict") compare equal if and only if they - have equal "(key, value)" pairs. Equality comparison of the keys and - values enforces reflexivity. - - Order comparisons ("<", ">", "<=", and ">=") raise "TypeError". - -* Sets (instances of "set" or "frozenset") can be compared within and - across their types. - - They define order comparison operators to mean subset and superset - tests. Those relations do not define total orderings (for example, - the two sets "{1,2}" and "{2,3}" are not equal, nor subsets of one - another, nor supersets of one another). Accordingly, sets are not - appropriate arguments for functions which depend on total ordering - (for example, "min()", "max()", and "sorted()" produce undefined - results given a list of sets as inputs). - - Comparison of sets enforces reflexivity of its elements. - -* Most other built-in types have no comparison methods implemented, so - they inherit the default comparison behavior. - -User-defined classes that customize their comparison behavior should -follow some consistency rules, if possible: - -* Equality comparison should be reflexive. In other words, identical - objects should compare equal: - - "x is y" implies "x == y" - -* Comparison should be symmetric. In other words, the following - expressions should have the same result: - - "x == y" and "y == x" - - "x != y" and "y != x" - - "x < y" and "y > x" - - "x <= y" and "y >= x" - -* Comparison should be transitive. The following (non-exhaustive) - examples illustrate that: - - "x > y and y > z" implies "x > z" - - "x < y and y <= z" implies "x < z" - -* Inverse comparison should result in the boolean negation. In other - words, the following expressions should have the same result: - - "x == y" and "not x != y" - - "x < y" and "not x >= y" (for total ordering) - - "x > y" and "not x <= y" (for total ordering) - - The last two expressions apply to totally ordered collections (e.g. - to sequences, but not to sets or mappings). See also the - "total_ordering()" decorator. - -* The "hash()" result should be consistent with equality. Objects that - are equal should either have the same hash value, or be marked as - unhashable. - -Python does not enforce these consistency rules. In fact, the -not-a-number values are an example for not following these rules. - - -Membership test operations -========================== - -The operators "in" and "not in" test for membership. "x in s" -evaluates to "True" if *x* is a member of *s*, and "False" otherwise. -"x not in s" returns the negation of "x in s". All built-in sequences -and set types support this as well as dictionary, for which "in" tests -whether the dictionary has a given key. For container types such as -list, tuple, set, frozenset, dict, or collections.deque, the -expression "x in y" is equivalent to "any(x is e or x == e for e in -y)". - -For the string and bytes types, "x in y" is "True" if and only if *x* -is a substring of *y*. An equivalent test is "y.find(x) != -1". -Empty strings are always considered to be a substring of any other -string, so """ in "abc"" will return "True". - -For user-defined classes which define the "__contains__()" method, "x -in y" returns "True" if "y.__contains__(x)" returns a true value, and -"False" otherwise. - -For user-defined classes which do not define "__contains__()" but do -define "__iter__()", "x in y" is "True" if some value "z", for which -the expression "x is z or x == z" is true, is produced while iterating -over "y". If an exception is raised during the iteration, it is as if -"in" raised that exception. - -Lastly, the old-style iteration protocol is tried: if a class defines -"__getitem__()", "x in y" is "True" if and only if there is a non- -negative integer index *i* such that "x is y[i] or x == y[i]", and no -lower integer index raises the "IndexError" exception. (If any other -exception is raised, it is as if "in" raised that exception). - -The operator "not in" is defined to have the inverse truth value of -"in". - - -Identity comparisons -==================== - -The operators "is" and "is not" test for an object’s identity: "x is -y" is true if and only if *x* and *y* are the same object. An -Object’s identity is determined using the "id()" function. "x is not -y" yields the inverse truth value. [4] -''', - 'compound': r'''Compound statements -******************* - -Compound statements contain (groups of) other statements; they affect -or control the execution of those other statements in some way. In -general, compound statements span multiple lines, although in simple -incarnations a whole compound statement may be contained in one line. - -The "if", "while" and "for" statements implement traditional control -flow constructs. "try" specifies exception handlers and/or cleanup -code for a group of statements, while the "with" statement allows the -execution of initialization and finalization code around a block of -code. Function and class definitions are also syntactically compound -statements. - -A compound statement consists of one or more ‘clauses.’ A clause -consists of a header and a ‘suite.’ The clause headers of a -particular compound statement are all at the same indentation level. -Each clause header begins with a uniquely identifying keyword and ends -with a colon. A suite is a group of statements controlled by a -clause. A suite can be one or more semicolon-separated simple -statements on the same line as the header, following the header’s -colon, or it can be one or more indented statements on subsequent -lines. Only the latter form of a suite can contain nested compound -statements; the following is illegal, mostly because it wouldn’t be -clear to which "if" clause a following "else" clause would belong: - - if test1: if test2: print(x) - -Also note that the semicolon binds tighter than the colon in this -context, so that in the following example, either all or none of the -"print()" calls are executed: - - if x < y < z: print(x); print(y); print(z) - -Summarizing: - - compound_stmt: if_stmt - | while_stmt - | for_stmt - | try_stmt - | with_stmt - | match_stmt - | funcdef - | classdef - | async_with_stmt - | async_for_stmt - | async_funcdef - suite: stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT - statement: stmt_list NEWLINE | compound_stmt - stmt_list: simple_stmt (";" simple_stmt)* [";"] - -Note that statements always end in a "NEWLINE" possibly followed by a -"DEDENT". Also note that optional continuation clauses always begin -with a keyword that cannot start a statement, thus there are no -ambiguities (the ‘dangling "else"’ problem is solved in Python by -requiring nested "if" statements to be indented). - -The formatting of the grammar rules in the following sections places -each clause on a separate line for clarity. - - -The "if" statement -================== - -The "if" statement is used for conditional execution: - - if_stmt: "if" assignment_expression ":" suite - ("elif" assignment_expression ":" suite)* - ["else" ":" suite] - -It selects exactly one of the suites by evaluating the expressions one -by one until one is found to be true (see section Boolean operations -for the definition of true and false); then that suite is executed -(and no other part of the "if" statement is executed or evaluated). -If all expressions are false, the suite of the "else" clause, if -present, is executed. - - -The "while" statement -===================== - -The "while" statement is used for repeated execution as long as an -expression is true: - - while_stmt: "while" assignment_expression ":" suite - ["else" ":" suite] - -This repeatedly tests the expression and, if it is true, executes the -first suite; if the expression is false (which may be the first time -it is tested) the suite of the "else" clause, if present, is executed -and the loop terminates. - -A "break" statement executed in the first suite terminates the loop -without executing the "else" clause’s suite. A "continue" statement -executed in the first suite skips the rest of the suite and goes back -to testing the expression. - - -The "for" statement -=================== - -The "for" statement is used to iterate over the elements of a sequence -(such as a string, tuple or list) or other iterable object: - - for_stmt: "for" target_list "in" starred_expression_list ":" suite - ["else" ":" suite] - -The "starred_expression_list" expression is evaluated once; it should -yield an *iterable* object. An *iterator* is created for that -iterable. The first item provided by the iterator is then assigned to -the target list using the standard rules for assignments (see -Assignment statements), and the suite is executed. This repeats for -each item provided by the iterator. When the iterator is exhausted, -the suite in the "else" clause, if present, is executed, and the loop -terminates. - -A "break" statement executed in the first suite terminates the loop -without executing the "else" clause’s suite. A "continue" statement -executed in the first suite skips the rest of the suite and continues -with the next item, or with the "else" clause if there is no next -item. - -The for-loop makes assignments to the variables in the target list. -This overwrites all previous assignments to those variables including -those made in the suite of the for-loop: - - for i in range(10): - print(i) - i = 5 # this will not affect the for-loop - # because i will be overwritten with the next - # index in the range - -Names in the target list are not deleted when the loop is finished, -but if the sequence is empty, they will not have been assigned to at -all by the loop. Hint: the built-in type "range()" represents -immutable arithmetic sequences of integers. For instance, iterating -"range(3)" successively yields 0, 1, and then 2. - -Changed in version 3.11: Starred elements are now allowed in the -expression list. - - -The "try" statement -=================== - -The "try" statement specifies exception handlers and/or cleanup code -for a group of statements: - - try_stmt: try1_stmt | try2_stmt | try3_stmt - try1_stmt: "try" ":" suite - ("except" [expression ["as" identifier]] ":" suite)+ - ["else" ":" suite] - ["finally" ":" suite] - try2_stmt: "try" ":" suite - ("except" "*" expression ["as" identifier] ":" suite)+ - ["else" ":" suite] - ["finally" ":" suite] - try3_stmt: "try" ":" suite - "finally" ":" suite - -Additional information on exceptions can be found in section -Exceptions, and information on using the "raise" statement to generate -exceptions may be found in section The raise statement. - -Changed in version 3.14: Support for optionally dropping grouping -parentheses when using multiple exception types. See **PEP 758**. - - -"except" clause ---------------- - -The "except" clause(s) specify one or more exception handlers. When no -exception occurs in the "try" clause, no exception handler is -executed. When an exception occurs in the "try" suite, a search for an -exception handler is started. This search inspects the "except" -clauses in turn until one is found that matches the exception. An -expression-less "except" clause, if present, must be last; it matches -any exception. - -For an "except" clause with an expression, the expression must -evaluate to an exception type or a tuple of exception types. -Parentheses can be dropped if multiple exception types are provided -and the "as" clause is not used. The raised exception matches an -"except" clause whose expression evaluates to the class or a *non- -virtual base class* of the exception object, or to a tuple that -contains such a class. - -If no "except" clause matches the exception, the search for an -exception handler continues in the surrounding code and on the -invocation stack. [1] - -If the evaluation of an expression in the header of an "except" clause -raises an exception, the original search for a handler is canceled and -a search starts for the new exception in the surrounding code and on -the call stack (it is treated as if the entire "try" statement raised -the exception). - -When a matching "except" clause is found, the exception is assigned to -the target specified after the "as" keyword in that "except" clause, -if present, and the "except" clause’s suite is executed. All "except" -clauses must have an executable block. When the end of this block is -reached, execution continues normally after the entire "try" -statement. (This means that if two nested handlers exist for the same -exception, and the exception occurs in the "try" clause of the inner -handler, the outer handler will not handle the exception.) - -When an exception has been assigned using "as target", it is cleared -at the end of the "except" clause. This is as if - - except E as N: - foo - -was translated to - - except E as N: - try: - foo - finally: - del N - -This means the exception must be assigned to a different name to be -able to refer to it after the "except" clause. Exceptions are cleared -because with the traceback attached to them, they form a reference -cycle with the stack frame, keeping all locals in that frame alive -until the next garbage collection occurs. - -Before an "except" clause’s suite is executed, the exception is stored -in the "sys" module, where it can be accessed from within the body of -the "except" clause by calling "sys.exception()". When leaving an -exception handler, the exception stored in the "sys" module is reset -to its previous value: - - >>> print(sys.exception()) - None - >>> try: - ... raise TypeError - ... except: - ... print(repr(sys.exception())) - ... try: - ... raise ValueError - ... except: - ... print(repr(sys.exception())) - ... print(repr(sys.exception())) - ... - TypeError() - ValueError() - TypeError() - >>> print(sys.exception()) - None - - -"except*" clause ----------------- - -The "except*" clause(s) specify one or more handlers for groups of -exceptions ("BaseExceptionGroup" instances). A "try" statement can -have either "except" or "except*" clauses, but not both. The exception -type for matching is mandatory in the case of "except*", so "except*:" -is a syntax error. The type is interpreted as in the case of "except", -but matching is performed on the exceptions contained in the group -that is being handled. An "TypeError" is raised if a matching type is -a subclass of "BaseExceptionGroup", because that would have ambiguous -semantics. - -When an exception group is raised in the try block, each "except*" -clause splits (see "split()") it into the subgroups of matching and -non-matching exceptions. If the matching subgroup is not empty, it -becomes the handled exception (the value returned from -"sys.exception()") and assigned to the target of the "except*" clause -(if there is one). Then, the body of the "except*" clause executes. If -the non-matching subgroup is not empty, it is processed by the next -"except*" in the same manner. This continues until all exceptions in -the group have been matched, or the last "except*" clause has run. - -After all "except*" clauses execute, the group of unhandled exceptions -is merged with any exceptions that were raised or re-raised from -within "except*" clauses. This merged exception group propagates on.: - - >>> try: - ... raise ExceptionGroup("eg", - ... [ValueError(1), TypeError(2), OSError(3), OSError(4)]) - ... except* TypeError as e: - ... print(f'caught {type(e)} with nested {e.exceptions}') - ... except* OSError as e: - ... print(f'caught {type(e)} with nested {e.exceptions}') - ... - caught <class 'ExceptionGroup'> with nested (TypeError(2),) - caught <class 'ExceptionGroup'> with nested (OSError(3), OSError(4)) - + Exception Group Traceback (most recent call last): - | File "<doctest default[0]>", line 2, in <module> - | raise ExceptionGroup("eg", - | [ValueError(1), TypeError(2), OSError(3), OSError(4)]) - | ExceptionGroup: eg (1 sub-exception) - +-+---------------- 1 ---------------- - | ValueError: 1 - +------------------------------------ - -If the exception raised from the "try" block is not an exception group -and its type matches one of the "except*" clauses, it is caught and -wrapped by an exception group with an empty message string. This -ensures that the type of the target "e" is consistently -"BaseExceptionGroup": - - >>> try: - ... raise BlockingIOError - ... except* BlockingIOError as e: - ... print(repr(e)) - ... - ExceptionGroup('', (BlockingIOError(),)) - -"break", "continue" and "return" cannot appear in an "except*" clause. - - -"else" clause -------------- - -The optional "else" clause is executed if the control flow leaves the -"try" suite, no exception was raised, and no "return", "continue", or -"break" statement was executed. Exceptions in the "else" clause are -not handled by the preceding "except" clauses. - - -"finally" clause ----------------- - -If "finally" is present, it specifies a ‘cleanup’ handler. The "try" -clause is executed, including any "except" and "else" clauses. If an -exception occurs in any of the clauses and is not handled, the -exception is temporarily saved. The "finally" clause is executed. If -there is a saved exception it is re-raised at the end of the "finally" -clause. If the "finally" clause raises another exception, the saved -exception is set as the context of the new exception. If the "finally" -clause executes a "return", "break" or "continue" statement, the saved -exception is discarded. For example, this function returns 42. - - def f(): - try: - 1/0 - finally: - return 42 - -The exception information is not available to the program during -execution of the "finally" clause. - -When a "return", "break" or "continue" statement is executed in the -"try" suite of a "try"…"finally" statement, the "finally" clause is -also executed ‘on the way out.’ - -The return value of a function is determined by the last "return" -statement executed. Since the "finally" clause always executes, a -"return" statement executed in the "finally" clause will always be the -last one executed. The following function returns ‘finally’. - - def foo(): - try: - return 'try' - finally: - return 'finally' - -Changed in version 3.8: Prior to Python 3.8, a "continue" statement -was illegal in the "finally" clause due to a problem with the -implementation. - -Changed in version 3.14: The compiler emits a "SyntaxWarning" when a -"return", "break" or "continue" appears in a "finally" block (see -**PEP 765**). - - -The "with" statement -==================== - -The "with" statement is used to wrap the execution of a block with -methods defined by a context manager (see section With Statement -Context Managers). This allows common "try"…"except"…"finally" usage -patterns to be encapsulated for convenient reuse. - - with_stmt: "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite - with_stmt_contents: with_item ("," with_item)* - with_item: expression ["as" target] - -The execution of the "with" statement with one “item” proceeds as -follows: - -1. The context expression (the expression given in the "with_item") is - evaluated to obtain a context manager. - -2. The context manager’s "__enter__()" is loaded for later use. - -3. The context manager’s "__exit__()" is loaded for later use. - -4. The context manager’s "__enter__()" method is invoked. - -5. If a target was included in the "with" statement, the return value - from "__enter__()" is assigned to it. - - Note: - - The "with" statement guarantees that if the "__enter__()" method - returns without an error, then "__exit__()" will always be - called. Thus, if an error occurs during the assignment to the - target list, it will be treated the same as an error occurring - within the suite would be. See step 7 below. - -6. The suite is executed. - -7. The context manager’s "__exit__()" method is invoked. If an - exception caused the suite to be exited, its type, value, and - traceback are passed as arguments to "__exit__()". Otherwise, three - "None" arguments are supplied. - - If the suite was exited due to an exception, and the return value - from the "__exit__()" method was false, the exception is reraised. - If the return value was true, the exception is suppressed, and - execution continues with the statement following the "with" - statement. - - If the suite was exited for any reason other than an exception, the - return value from "__exit__()" is ignored, and execution proceeds - at the normal location for the kind of exit that was taken. - -The following code: - - with EXPRESSION as TARGET: - SUITE - -is semantically equivalent to: - - manager = (EXPRESSION) - enter = manager.__enter__ - exit = manager.__exit__ - value = enter() - hit_except = False - - try: - TARGET = value - SUITE - except: - hit_except = True - if not exit(*sys.exc_info()): - raise - finally: - if not hit_except: - exit(None, None, None) - -except that implicit special method lookup is used for "__enter__()" -and "__exit__()". - -With more than one item, the context managers are processed as if -multiple "with" statements were nested: - - with A() as a, B() as b: - SUITE - -is semantically equivalent to: - - with A() as a: - with B() as b: - SUITE - -You can also write multi-item context managers in multiple lines if -the items are surrounded by parentheses. For example: - - with ( - A() as a, - B() as b, - ): - SUITE - -Changed in version 3.1: Support for multiple context expressions. - -Changed in version 3.10: Support for using grouping parentheses to -break the statement in multiple lines. - -See also: - - **PEP 343** - The “with” statement - The specification, background, and examples for the Python "with" - statement. - - -The "match" statement -===================== - -Added in version 3.10. - -The match statement is used for pattern matching. Syntax: - - match_stmt: 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT - subject_expr: `!star_named_expression` "," `!star_named_expressions`? - | `!named_expression` - case_block: 'case' patterns [guard] ":" `!block` - -Note: - - This section uses single quotes to denote soft keywords. - -Pattern matching takes a pattern as input (following "case") and a -subject value (following "match"). The pattern (which may contain -subpatterns) is matched against the subject value. The outcomes are: - -* A match success or failure (also termed a pattern success or - failure). - -* Possible binding of matched values to a name. The prerequisites for - this are further discussed below. - -The "match" and "case" keywords are soft keywords. - -See also: - - * **PEP 634** – Structural Pattern Matching: Specification - - * **PEP 636** – Structural Pattern Matching: Tutorial - - -Overview --------- - -Here’s an overview of the logical flow of a match statement: - -1. The subject expression "subject_expr" is evaluated and a resulting - subject value obtained. If the subject expression contains a comma, - a tuple is constructed using the standard rules. - -2. Each pattern in a "case_block" is attempted to match with the - subject value. The specific rules for success or failure are - described below. The match attempt can also bind some or all of the - standalone names within the pattern. The precise pattern binding - rules vary per pattern type and are specified below. **Name - bindings made during a successful pattern match outlive the - executed block and can be used after the match statement**. - - Note: - - During failed pattern matches, some subpatterns may succeed. Do - not rely on bindings being made for a failed match. Conversely, - do not rely on variables remaining unchanged after a failed - match. The exact behavior is dependent on implementation and may - vary. This is an intentional decision made to allow different - implementations to add optimizations. - -3. If the pattern succeeds, the corresponding guard (if present) is - evaluated. In this case all name bindings are guaranteed to have - happened. - - * If the guard evaluates as true or is missing, the "block" inside - "case_block" is executed. - - * Otherwise, the next "case_block" is attempted as described above. - - * If there are no further case blocks, the match statement is - completed. - -Note: - - Users should generally never rely on a pattern being evaluated. - Depending on implementation, the interpreter may cache values or use - other optimizations which skip repeated evaluations. - -A sample match statement: - - >>> flag = False - >>> match (100, 200): - ... case (100, 300): # Mismatch: 200 != 300 - ... print('Case 1') - ... case (100, 200) if flag: # Successful match, but guard fails - ... print('Case 2') - ... case (100, y): # Matches and binds y to 200 - ... print(f'Case 3, y: {y}') - ... case _: # Pattern not attempted - ... print('Case 4, I match anything!') - ... - Case 3, y: 200 - -In this case, "if flag" is a guard. Read more about that in the next -section. - - -Guards ------- - - guard: "if" `!named_expression` - -A "guard" (which is part of the "case") must succeed for code inside -the "case" block to execute. It takes the form: "if" followed by an -expression. - -The logical flow of a "case" block with a "guard" follows: - -1. Check that the pattern in the "case" block succeeded. If the - pattern failed, the "guard" is not evaluated and the next "case" - block is checked. - -2. If the pattern succeeded, evaluate the "guard". - - * If the "guard" condition evaluates as true, the case block is - selected. - - * If the "guard" condition evaluates as false, the case block is - not selected. - - * If the "guard" raises an exception during evaluation, the - exception bubbles up. - -Guards are allowed to have side effects as they are expressions. -Guard evaluation must proceed from the first to the last case block, -one at a time, skipping case blocks whose pattern(s) don’t all -succeed. (I.e., guard evaluation must happen in order.) Guard -evaluation must stop once a case block is selected. - - -Irrefutable Case Blocks ------------------------ - -An irrefutable case block is a match-all case block. A match -statement may have at most one irrefutable case block, and it must be -last. - -A case block is considered irrefutable if it has no guard and its -pattern is irrefutable. A pattern is considered irrefutable if we can -prove from its syntax alone that it will always succeed. Only the -following patterns are irrefutable: - -* AS Patterns whose left-hand side is irrefutable - -* OR Patterns containing at least one irrefutable pattern - -* Capture Patterns - -* Wildcard Patterns - -* parenthesized irrefutable patterns - - -Patterns --------- - -Note: - - This section uses grammar notations beyond standard EBNF: - - * the notation "SEP.RULE+" is shorthand for "RULE (SEP RULE)*" - - * the notation "!RULE" is shorthand for a negative lookahead - assertion - -The top-level syntax for "patterns" is: - - patterns: open_sequence_pattern | pattern - pattern: as_pattern | or_pattern - closed_pattern: | literal_pattern - | capture_pattern - | wildcard_pattern - | value_pattern - | group_pattern - | sequence_pattern - | mapping_pattern - | class_pattern - -The descriptions below will include a description “in simple terms” of -what a pattern does for illustration purposes (credits to Raymond -Hettinger for a document that inspired most of the descriptions). Note -that these descriptions are purely for illustration purposes and **may -not** reflect the underlying implementation. Furthermore, they do not -cover all valid forms. - - -OR Patterns -~~~~~~~~~~~ - -An OR pattern is two or more patterns separated by vertical bars "|". -Syntax: - - or_pattern: "|".closed_pattern+ - -Only the final subpattern may be irrefutable, and each subpattern must -bind the same set of names to avoid ambiguity. - -An OR pattern matches each of its subpatterns in turn to the subject -value, until one succeeds. The OR pattern is then considered -successful. Otherwise, if none of the subpatterns succeed, the OR -pattern fails. - -In simple terms, "P1 | P2 | ..." will try to match "P1", if it fails -it will try to match "P2", succeeding immediately if any succeeds, -failing otherwise. - - -AS Patterns -~~~~~~~~~~~ - -An AS pattern matches an OR pattern on the left of the "as" keyword -against a subject. Syntax: - - as_pattern: or_pattern "as" capture_pattern - -If the OR pattern fails, the AS pattern fails. Otherwise, the AS -pattern binds the subject to the name on the right of the as keyword -and succeeds. "capture_pattern" cannot be a "_". - -In simple terms "P as NAME" will match with "P", and on success it -will set "NAME = <subject>". - - -Literal Patterns -~~~~~~~~~~~~~~~~ - -A literal pattern corresponds to most literals in Python. Syntax: - - literal_pattern: signed_number - | signed_number "+" NUMBER - | signed_number "-" NUMBER - | strings - | "None" - | "True" - | "False" - signed_number: ["-"] NUMBER - -The rule "strings" and the token "NUMBER" are defined in the standard -Python grammar. Triple-quoted strings are supported. Raw strings and -byte strings are supported. f-strings and t-strings are not -supported. - -The forms "signed_number '+' NUMBER" and "signed_number '-' NUMBER" -are for expressing complex numbers; they require a real number on the -left and an imaginary number on the right. E.g. "3 + 4j". - -In simple terms, "LITERAL" will succeed only if "<subject> == -LITERAL". For the singletons "None", "True" and "False", the "is" -operator is used. - - -Capture Patterns -~~~~~~~~~~~~~~~~ - -A capture pattern binds the subject value to a name. Syntax: - - capture_pattern: !'_' NAME - -A single underscore "_" is not a capture pattern (this is what "!'_'" -expresses). It is instead treated as a "wildcard_pattern". - -In a given pattern, a given name can only be bound once. E.g. "case -x, x: ..." is invalid while "case [x] | x: ..." is allowed. - -Capture patterns always succeed. The binding follows scoping rules -established by the assignment expression operator in **PEP 572**; the -name becomes a local variable in the closest containing function scope -unless there’s an applicable "global" or "nonlocal" statement. - -In simple terms "NAME" will always succeed and it will set "NAME = -<subject>". - - -Wildcard Patterns -~~~~~~~~~~~~~~~~~ - -A wildcard pattern always succeeds (matches anything) and binds no -name. Syntax: - - wildcard_pattern: '_' - -"_" is a soft keyword within any pattern, but only within patterns. -It is an identifier, as usual, even within "match" subject -expressions, "guard"s, and "case" blocks. - -In simple terms, "_" will always succeed. - - -Value Patterns -~~~~~~~~~~~~~~ - -A value pattern represents a named value in Python. Syntax: - - value_pattern: attr - attr: name_or_attr "." NAME - name_or_attr: attr | NAME - -The dotted name in the pattern is looked up using standard Python name -resolution rules. The pattern succeeds if the value found compares -equal to the subject value (using the "==" equality operator). - -In simple terms "NAME1.NAME2" will succeed only if "<subject> == -NAME1.NAME2" - -Note: - - If the same value occurs multiple times in the same match statement, - the interpreter may cache the first value found and reuse it rather - than repeat the same lookup. This cache is strictly tied to a given - execution of a given match statement. - - -Group Patterns -~~~~~~~~~~~~~~ - -A group pattern allows users to add parentheses around patterns to -emphasize the intended grouping. Otherwise, it has no additional -syntax. Syntax: - - group_pattern: "(" pattern ")" - -In simple terms "(P)" has the same effect as "P". - - -Sequence Patterns -~~~~~~~~~~~~~~~~~ - -A sequence pattern contains several subpatterns to be matched against -sequence elements. The syntax is similar to the unpacking of a list or -tuple. - - sequence_pattern: "[" [maybe_sequence_pattern] "]" - | "(" [open_sequence_pattern] ")" - open_sequence_pattern: maybe_star_pattern "," [maybe_sequence_pattern] - maybe_sequence_pattern: ",".maybe_star_pattern+ ","? - maybe_star_pattern: star_pattern | pattern - star_pattern: "*" (capture_pattern | wildcard_pattern) - -There is no difference if parentheses or square brackets are used for -sequence patterns (i.e. "(...)" vs "[...]" ). - -Note: - - A single pattern enclosed in parentheses without a trailing comma - (e.g. "(3 | 4)") is a group pattern. While a single pattern enclosed - in square brackets (e.g. "[3 | 4]") is still a sequence pattern. - -At most one star subpattern may be in a sequence pattern. The star -subpattern may occur in any position. If no star subpattern is -present, the sequence pattern is a fixed-length sequence pattern; -otherwise it is a variable-length sequence pattern. - -The following is the logical flow for matching a sequence pattern -against a subject value: - -1. If the subject value is not a sequence [2], the sequence pattern - fails. - -2. If the subject value is an instance of "str", "bytes" or - "bytearray" the sequence pattern fails. - -3. The subsequent steps depend on whether the sequence pattern is - fixed or variable-length. - - If the sequence pattern is fixed-length: - - 1. If the length of the subject sequence is not equal to the number - of subpatterns, the sequence pattern fails - - 2. Subpatterns in the sequence pattern are matched to their - corresponding items in the subject sequence from left to right. - Matching stops as soon as a subpattern fails. If all - subpatterns succeed in matching their corresponding item, the - sequence pattern succeeds. - - Otherwise, if the sequence pattern is variable-length: - - 1. If the length of the subject sequence is less than the number of - non-star subpatterns, the sequence pattern fails. - - 2. The leading non-star subpatterns are matched to their - corresponding items as for fixed-length sequences. - - 3. If the previous step succeeds, the star subpattern matches a - list formed of the remaining subject items, excluding the - remaining items corresponding to non-star subpatterns following - the star subpattern. - - 4. Remaining non-star subpatterns are matched to their - corresponding subject items, as for a fixed-length sequence. - - Note: - - The length of the subject sequence is obtained via "len()" (i.e. - via the "__len__()" protocol). This length may be cached by the - interpreter in a similar manner as value patterns. - -In simple terms "[P1, P2, P3," … ", P<N>]" matches only if all the -following happens: - -* check "<subject>" is a sequence - -* "len(subject) == <N>" - -* "P1" matches "<subject>[0]" (note that this match can also bind - names) - -* "P2" matches "<subject>[1]" (note that this match can also bind - names) - -* … and so on for the corresponding pattern/element. - - -Mapping Patterns -~~~~~~~~~~~~~~~~ - -A mapping pattern contains one or more key-value patterns. The syntax -is similar to the construction of a dictionary. Syntax: - - mapping_pattern: "{" [items_pattern] "}" - items_pattern: ",".key_value_pattern+ ","? - key_value_pattern: (literal_pattern | value_pattern) ":" pattern - | double_star_pattern - double_star_pattern: "**" capture_pattern - -At most one double star pattern may be in a mapping pattern. The -double star pattern must be the last subpattern in the mapping -pattern. - -Duplicate keys in mapping patterns are disallowed. Duplicate literal -keys will raise a "SyntaxError". Two keys that otherwise have the same -value will raise a "ValueError" at runtime. - -The following is the logical flow for matching a mapping pattern -against a subject value: - -1. If the subject value is not a mapping [3],the mapping pattern - fails. - -2. If every key given in the mapping pattern is present in the subject - mapping, and the pattern for each key matches the corresponding - item of the subject mapping, the mapping pattern succeeds. - -3. If duplicate keys are detected in the mapping pattern, the pattern - is considered invalid. A "SyntaxError" is raised for duplicate - literal values; or a "ValueError" for named keys of the same value. - -Note: - - Key-value pairs are matched using the two-argument form of the - mapping subject’s "get()" method. Matched key-value pairs must - already be present in the mapping, and not created on-the-fly via - "__missing__()" or "__getitem__()". - -In simple terms "{KEY1: P1, KEY2: P2, ... }" matches only if all the -following happens: - -* check "<subject>" is a mapping - -* "KEY1 in <subject>" - -* "P1" matches "<subject>[KEY1]" - -* … and so on for the corresponding KEY/pattern pair. - - -Class Patterns -~~~~~~~~~~~~~~ - -A class pattern represents a class and its positional and keyword -arguments (if any). Syntax: - - class_pattern: name_or_attr "(" [pattern_arguments ","?] ")" - pattern_arguments: positional_patterns ["," keyword_patterns] - | keyword_patterns - positional_patterns: ",".pattern+ - keyword_patterns: ",".keyword_pattern+ - keyword_pattern: NAME "=" pattern - -The same keyword should not be repeated in class patterns. - -The following is the logical flow for matching a class pattern against -a subject value: - -1. If "name_or_attr" is not an instance of the builtin "type" , raise - "TypeError". - -2. If the subject value is not an instance of "name_or_attr" (tested - via "isinstance()"), the class pattern fails. - -3. If no pattern arguments are present, the pattern succeeds. - Otherwise, the subsequent steps depend on whether keyword or - positional argument patterns are present. - - For a number of built-in types (specified below), a single - positional subpattern is accepted which will match the entire - subject; for these types keyword patterns also work as for other - types. - - If only keyword patterns are present, they are processed as - follows, one by one: - - 1. The keyword is looked up as an attribute on the subject. - - * If this raises an exception other than "AttributeError", the - exception bubbles up. - - * If this raises "AttributeError", the class pattern has failed. - - * Else, the subpattern associated with the keyword pattern is - matched against the subject’s attribute value. If this fails, - the class pattern fails; if this succeeds, the match proceeds - to the next keyword. - - 2. If all keyword patterns succeed, the class pattern succeeds. - - If any positional patterns are present, they are converted to - keyword patterns using the "__match_args__" attribute on the class - "name_or_attr" before matching: - - 1. The equivalent of "getattr(cls, "__match_args__", ())" is - called. - - * If this raises an exception, the exception bubbles up. - - * If the returned value is not a tuple, the conversion fails and - "TypeError" is raised. - - * If there are more positional patterns than - "len(cls.__match_args__)", "TypeError" is raised. - - * Otherwise, positional pattern "i" is converted to a keyword - pattern using "__match_args__[i]" as the keyword. - "__match_args__[i]" must be a string; if not "TypeError" is - raised. - - * If there are duplicate keywords, "TypeError" is raised. - - See also: - - Customizing positional arguments in class pattern matching - - 2. Once all positional patterns have been converted to keyword - patterns, the match proceeds as if there were only keyword - patterns. - - For the following built-in types the handling of positional - subpatterns is different: - - * "bool" - - * "bytearray" - - * "bytes" - - * "dict" - - * "float" - - * "frozenset" - - * "int" - - * "list" - - * "set" - - * "str" - - * "tuple" - - These classes accept a single positional argument, and the pattern - there is matched against the whole object rather than an attribute. - For example "int(0|1)" matches the value "0", but not the value - "0.0". - -In simple terms "CLS(P1, attr=P2)" matches only if the following -happens: - -* "isinstance(<subject>, CLS)" - -* convert "P1" to a keyword pattern using "CLS.__match_args__" - -* For each keyword argument "attr=P2": - - * "hasattr(<subject>, "attr")" - - * "P2" matches "<subject>.attr" - -* … and so on for the corresponding keyword argument/pattern pair. - -See also: - - * **PEP 634** – Structural Pattern Matching: Specification - - * **PEP 636** – Structural Pattern Matching: Tutorial - - -Function definitions -==================== - -A function definition defines a user-defined function object (see -section The standard type hierarchy): - - funcdef: [decorators] "def" funcname [type_params] "(" [parameter_list] ")" - ["->" expression] ":" suite - decorators: decorator+ - decorator: "@" assignment_expression NEWLINE - parameter_list: defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]] - | parameter_list_no_posonly - parameter_list_no_posonly: defparameter ("," defparameter)* ["," [parameter_list_starargs]] - | parameter_list_starargs - parameter_list_starargs: "*" [star_parameter] ("," defparameter)* ["," [parameter_star_kwargs]] - | "*" ("," defparameter)+ ["," [parameter_star_kwargs]] - | parameter_star_kwargs - parameter_star_kwargs: "**" parameter [","] - parameter: identifier [":" expression] - star_parameter: identifier [":" ["*"] expression] - defparameter: parameter ["=" expression] - funcname: identifier - -A function definition is an executable statement. Its execution binds -the function name in the current local namespace to a function object -(a wrapper around the executable code for the function). This -function object contains a reference to the current global namespace -as the global namespace to be used when the function is called. - -The function definition does not execute the function body; this gets -executed only when the function is called. [4] - -A function definition may be wrapped by one or more *decorator* -expressions. Decorator expressions are evaluated when the function is -defined, in the scope that contains the function definition. The -result must be a callable, which is invoked with the function object -as the only argument. The returned value is bound to the function name -instead of the function object. Multiple decorators are applied in -nested fashion. For example, the following code - - @f1(arg) - @f2 - def func(): pass - -is roughly equivalent to - - def func(): pass - func = f1(arg)(f2(func)) - -except that the original function is not temporarily bound to the name -"func". - -Changed in version 3.9: Functions may be decorated with any valid -"assignment_expression". Previously, the grammar was much more -restrictive; see **PEP 614** for details. - -A list of type parameters may be given in square brackets between the -function’s name and the opening parenthesis for its parameter list. -This indicates to static type checkers that the function is generic. -At runtime, the type parameters can be retrieved from the function’s -"__type_params__" attribute. See Generic functions for more. - -Changed in version 3.12: Type parameter lists are new in Python 3.12. - -When one or more *parameters* have the form *parameter* "=" -*expression*, the function is said to have “default parameter values.” -For a parameter with a default value, the corresponding *argument* may -be omitted from a call, in which case the parameter’s default value is -substituted. If a parameter has a default value, all following -parameters up until the “"*"” must also have a default value — this is -a syntactic restriction that is not expressed by the grammar. - -**Default parameter values are evaluated from left to right when the -function definition is executed.** This means that the expression is -evaluated once, when the function is defined, and that the same “pre- -computed” value is used for each call. This is especially important -to understand when a default parameter value is a mutable object, such -as a list or a dictionary: if the function modifies the object (e.g. -by appending an item to a list), the default parameter value is in -effect modified. This is generally not what was intended. A way -around this is to use "None" as the default, and explicitly test for -it in the body of the function, e.g.: - - def whats_on_the_telly(penguin=None): - if penguin is None: - penguin = [] - penguin.append("property of the zoo") - return penguin - -Function call semantics are described in more detail in section Calls. -A function call always assigns values to all parameters mentioned in -the parameter list, either from positional arguments, from keyword -arguments, or from default values. If the form “"*identifier"” is -present, it is initialized to a tuple receiving any excess positional -parameters, defaulting to the empty tuple. If the form -“"**identifier"” is present, it is initialized to a new ordered -mapping receiving any excess keyword arguments, defaulting to a new -empty mapping of the same type. Parameters after “"*"” or -“"*identifier"” are keyword-only parameters and may only be passed by -keyword arguments. Parameters before “"/"” are positional-only -parameters and may only be passed by positional arguments. - -Changed in version 3.8: The "/" function parameter syntax may be used -to indicate positional-only parameters. See **PEP 570** for details. - -Parameters may have an *annotation* of the form “": expression"” -following the parameter name. Any parameter may have an annotation, -even those of the form "*identifier" or "**identifier". (As a special -case, parameters of the form "*identifier" may have an annotation “": -*expression"”.) Functions may have “return” annotation of the form -“"-> expression"” after the parameter list. These annotations can be -any valid Python expression. The presence of annotations does not -change the semantics of a function. See Annotations for more -information on annotations. - -Changed in version 3.11: Parameters of the form “"*identifier"” may -have an annotation “": *expression"”. See **PEP 646**. - -It is also possible to create anonymous functions (functions not bound -to a name), for immediate use in expressions. This uses lambda -expressions, described in section Lambdas. Note that the lambda -expression is merely a shorthand for a simplified function definition; -a function defined in a “"def"” statement can be passed around or -assigned to another name just like a function defined by a lambda -expression. The “"def"” form is actually more powerful since it -allows the execution of multiple statements and annotations. - -**Programmer’s note:** Functions are first-class objects. A “"def"” -statement executed inside a function definition defines a local -function that can be returned or passed around. Free variables used -in the nested function can access the local variables of the function -containing the def. See section Naming and binding for details. - -See also: - - **PEP 3107** - Function Annotations - The original specification for function annotations. - - **PEP 484** - Type Hints - Definition of a standard meaning for annotations: type hints. - - **PEP 526** - Syntax for Variable Annotations - Ability to type hint variable declarations, including class - variables and instance variables. - - **PEP 563** - Postponed Evaluation of Annotations - Support for forward references within annotations by preserving - annotations in a string form at runtime instead of eager - evaluation. - - **PEP 318** - Decorators for Functions and Methods - Function and method decorators were introduced. Class decorators - were introduced in **PEP 3129**. - - -Class definitions -================= - -A class definition defines a class object (see section The standard -type hierarchy): - - classdef: [decorators] "class" classname [type_params] [inheritance] ":" suite - inheritance: "(" [argument_list] ")" - classname: identifier - -A class definition is an executable statement. The inheritance list -usually gives a list of base classes (see Metaclasses for more -advanced uses), so each item in the list should evaluate to a class -object which allows subclassing. Classes without an inheritance list -inherit, by default, from the base class "object"; hence, - - class Foo: - pass - -is equivalent to - - class Foo(object): - pass - -The class’s suite is then executed in a new execution frame (see -Naming and binding), using a newly created local namespace and the -original global namespace. (Usually, the suite contains mostly -function definitions.) When the class’s suite finishes execution, its -execution frame is discarded but its local namespace is saved. [5] A -class object is then created using the inheritance list for the base -classes and the saved local namespace for the attribute dictionary. -The class name is bound to this class object in the original local -namespace. - -The order in which attributes are defined in the class body is -preserved in the new class’s "__dict__". Note that this is reliable -only right after the class is created and only for classes that were -defined using the definition syntax. - -Class creation can be customized heavily using metaclasses. - -Classes can also be decorated: just like when decorating functions, - - @f1(arg) - @f2 - class Foo: pass - -is roughly equivalent to - - class Foo: pass - Foo = f1(arg)(f2(Foo)) - -The evaluation rules for the decorator expressions are the same as for -function decorators. The result is then bound to the class name. - -Changed in version 3.9: Classes may be decorated with any valid -"assignment_expression". Previously, the grammar was much more -restrictive; see **PEP 614** for details. - -A list of type parameters may be given in square brackets immediately -after the class’s name. This indicates to static type checkers that -the class is generic. At runtime, the type parameters can be retrieved -from the class’s "__type_params__" attribute. See Generic classes for -more. - -Changed in version 3.12: Type parameter lists are new in Python 3.12. - -**Programmer’s note:** Variables defined in the class definition are -class attributes; they are shared by instances. Instance attributes -can be set in a method with "self.name = value". Both class and -instance attributes are accessible through the notation “"self.name"”, -and an instance attribute hides a class attribute with the same name -when accessed in this way. Class attributes can be used as defaults -for instance attributes, but using mutable values there can lead to -unexpected results. Descriptors can be used to create instance -variables with different implementation details. - -See also: - - **PEP 3115** - Metaclasses in Python 3000 - The proposal that changed the declaration of metaclasses to the - current syntax, and the semantics for how classes with - metaclasses are constructed. - - **PEP 3129** - Class Decorators - The proposal that added class decorators. Function and method - decorators were introduced in **PEP 318**. - - -Coroutines -========== - -Added in version 3.5. - - -Coroutine function definition ------------------------------ - - async_funcdef: [decorators] "async" "def" funcname "(" [parameter_list] ")" - ["->" expression] ":" suite - -Execution of Python coroutines can be suspended and resumed at many -points (see *coroutine*). "await" expressions, "async for" and "async -with" can only be used in the body of a coroutine function. - -Functions defined with "async def" syntax are always coroutine -functions, even if they do not contain "await" or "async" keywords. - -It is a "SyntaxError" to use a "yield from" expression inside the body -of a coroutine function. - -An example of a coroutine function: - - async def func(param1, param2): - do_stuff() - await some_coroutine() - -Changed in version 3.7: "await" and "async" are now keywords; -previously they were only treated as such inside the body of a -coroutine function. - - -The "async for" statement -------------------------- - - async_for_stmt: "async" for_stmt - -An *asynchronous iterable* provides an "__aiter__" method that -directly returns an *asynchronous iterator*, which can call -asynchronous code in its "__anext__" method. - -The "async for" statement allows convenient iteration over -asynchronous iterables. - -The following code: - - async for TARGET in ITER: - SUITE - else: - SUITE2 - -Is semantically equivalent to: - - iter = (ITER).__aiter__() - running = True - - while running: - try: - TARGET = await iter.__anext__() - except StopAsyncIteration: - running = False - else: - SUITE - else: - SUITE2 - -except that implicit special method lookup is used for "__aiter__()" -and "__anext__()". - -It is a "SyntaxError" to use an "async for" statement outside the body -of a coroutine function. - - -The "async with" statement --------------------------- - - async_with_stmt: "async" with_stmt - -An *asynchronous context manager* is a *context manager* that is able -to suspend execution in its *enter* and *exit* methods. - -The following code: - - async with EXPRESSION as TARGET: - SUITE - -is semantically equivalent to: - - manager = (EXPRESSION) - aenter = manager.__aenter__ - aexit = manager.__aexit__ - value = await aenter() - hit_except = False - - try: - TARGET = value - SUITE - except: - hit_except = True - if not await aexit(*sys.exc_info()): - raise - finally: - if not hit_except: - await aexit(None, None, None) - -except that implicit special method lookup is used for "__aenter__()" -and "__aexit__()". - -It is a "SyntaxError" to use an "async with" statement outside the -body of a coroutine function. - -See also: - - **PEP 492** - Coroutines with async and await syntax - The proposal that made coroutines a proper standalone concept in - Python, and added supporting syntax. - - -Type parameter lists -==================== - -Added in version 3.12. - -Changed in version 3.13: Support for default values was added (see -**PEP 696**). - - type_params: "[" type_param ("," type_param)* "]" - type_param: typevar | typevartuple | paramspec - typevar: identifier (":" expression)? ("=" expression)? - typevartuple: "*" identifier ("=" expression)? - paramspec: "**" identifier ("=" expression)? - -Functions (including coroutines), classes and type aliases may contain -a type parameter list: - - def max[T](args: list[T]) -> T: - ... - - async def amax[T](args: list[T]) -> T: - ... - - class Bag[T]: - def __iter__(self) -> Iterator[T]: - ... - - def add(self, arg: T) -> None: - ... - - type ListOrSet[T] = list[T] | set[T] - -Semantically, this indicates that the function, class, or type alias -is generic over a type variable. This information is primarily used by -static type checkers, and at runtime, generic objects behave much like -their non-generic counterparts. - -Type parameters are declared in square brackets ("[]") immediately -after the name of the function, class, or type alias. The type -parameters are accessible within the scope of the generic object, but -not elsewhere. Thus, after a declaration "def func[T](): pass", the -name "T" is not available in the module scope. Below, the semantics of -generic objects are described with more precision. The scope of type -parameters is modeled with a special function (technically, an -annotation scope) that wraps the creation of the generic object. - -Generic functions, classes, and type aliases have a "__type_params__" -attribute listing their type parameters. - -Type parameters come in three kinds: - -* "typing.TypeVar", introduced by a plain name (e.g., "T"). - Semantically, this represents a single type to a type checker. - -* "typing.TypeVarTuple", introduced by a name prefixed with a single - asterisk (e.g., "*Ts"). Semantically, this stands for a tuple of any - number of types. - -* "typing.ParamSpec", introduced by a name prefixed with two asterisks - (e.g., "**P"). Semantically, this stands for the parameters of a - callable. - -"typing.TypeVar" declarations can define *bounds* and *constraints* -with a colon (":") followed by an expression. A single expression -after the colon indicates a bound (e.g. "T: int"). Semantically, this -means that the "typing.TypeVar" can only represent types that are a -subtype of this bound. A parenthesized tuple of expressions after the -colon indicates a set of constraints (e.g. "T: (str, bytes)"). Each -member of the tuple should be a type (again, this is not enforced at -runtime). Constrained type variables can only take on one of the types -in the list of constraints. - -For "typing.TypeVar"s declared using the type parameter list syntax, -the bound and constraints are not evaluated when the generic object is -created, but only when the value is explicitly accessed through the -attributes "__bound__" and "__constraints__". To accomplish this, the -bounds or constraints are evaluated in a separate annotation scope. - -"typing.TypeVarTuple"s and "typing.ParamSpec"s cannot have bounds or -constraints. - -All three flavors of type parameters can also have a *default value*, -which is used when the type parameter is not explicitly provided. This -is added by appending a single equals sign ("=") followed by an -expression. Like the bounds and constraints of type variables, the -default value is not evaluated when the object is created, but only -when the type parameter’s "__default__" attribute is accessed. To this -end, the default value is evaluated in a separate annotation scope. If -no default value is specified for a type parameter, the "__default__" -attribute is set to the special sentinel object "typing.NoDefault". - -The following example indicates the full set of allowed type parameter -declarations: - - def overly_generic[ - SimpleTypeVar, - TypeVarWithDefault = int, - TypeVarWithBound: int, - TypeVarWithConstraints: (str, bytes), - *SimpleTypeVarTuple = (int, float), - **SimpleParamSpec = (str, bytearray), - ]( - a: SimpleTypeVar, - b: TypeVarWithDefault, - c: TypeVarWithBound, - d: Callable[SimpleParamSpec, TypeVarWithConstraints], - *e: SimpleTypeVarTuple, - ): ... - - -Generic functions ------------------ - -Generic functions are declared as follows: - - def func[T](arg: T): ... - -This syntax is equivalent to: - - annotation-def TYPE_PARAMS_OF_func(): - T = typing.TypeVar("T") - def func(arg: T): ... - func.__type_params__ = (T,) - return func - func = TYPE_PARAMS_OF_func() - -Here "annotation-def" indicates an annotation scope, which is not -actually bound to any name at runtime. (One other liberty is taken in -the translation: the syntax does not go through attribute access on -the "typing" module, but creates an instance of "typing.TypeVar" -directly.) - -The annotations of generic functions are evaluated within the -annotation scope used for declaring the type parameters, but the -function’s defaults and decorators are not. - -The following example illustrates the scoping rules for these cases, -as well as for additional flavors of type parameters: - - @decorator - def func[T: int, *Ts, **P](*args: *Ts, arg: Callable[P, T] = some_default): - ... - -Except for the lazy evaluation of the "TypeVar" bound, this is -equivalent to: - - DEFAULT_OF_arg = some_default - - annotation-def TYPE_PARAMS_OF_func(): - - annotation-def BOUND_OF_T(): - return int - # In reality, BOUND_OF_T() is evaluated only on demand. - T = typing.TypeVar("T", bound=BOUND_OF_T()) - - Ts = typing.TypeVarTuple("Ts") - P = typing.ParamSpec("P") - - def func(*args: *Ts, arg: Callable[P, T] = DEFAULT_OF_arg): - ... - - func.__type_params__ = (T, Ts, P) - return func - func = decorator(TYPE_PARAMS_OF_func()) - -The capitalized names like "DEFAULT_OF_arg" are not actually bound at -runtime. - - -Generic classes ---------------- - -Generic classes are declared as follows: - - class Bag[T]: ... - -This syntax is equivalent to: - - annotation-def TYPE_PARAMS_OF_Bag(): - T = typing.TypeVar("T") - class Bag(typing.Generic[T]): - __type_params__ = (T,) - ... - return Bag - Bag = TYPE_PARAMS_OF_Bag() - -Here again "annotation-def" (not a real keyword) indicates an -annotation scope, and the name "TYPE_PARAMS_OF_Bag" is not actually -bound at runtime. - -Generic classes implicitly inherit from "typing.Generic". The base -classes and keyword arguments of generic classes are evaluated within -the type scope for the type parameters, and decorators are evaluated -outside that scope. This is illustrated by this example: - - @decorator - class Bag(Base[T], arg=T): ... - -This is equivalent to: - - annotation-def TYPE_PARAMS_OF_Bag(): - T = typing.TypeVar("T") - class Bag(Base[T], typing.Generic[T], arg=T): - __type_params__ = (T,) - ... - return Bag - Bag = decorator(TYPE_PARAMS_OF_Bag()) - - -Generic type aliases --------------------- - -The "type" statement can also be used to create a generic type alias: - - type ListOrSet[T] = list[T] | set[T] - -Except for the lazy evaluation of the value, this is equivalent to: - - annotation-def TYPE_PARAMS_OF_ListOrSet(): - T = typing.TypeVar("T") - - annotation-def VALUE_OF_ListOrSet(): - return list[T] | set[T] - # In reality, the value is lazily evaluated - return typing.TypeAliasType("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,)) - ListOrSet = TYPE_PARAMS_OF_ListOrSet() - -Here, "annotation-def" (not a real keyword) indicates an annotation -scope. The capitalized names like "TYPE_PARAMS_OF_ListOrSet" are not -actually bound at runtime. - - -Annotations -=========== - -Changed in version 3.14: Annotations are now lazily evaluated by -default. - -Variables and function parameters may carry *annotations*, created by -adding a colon after the name, followed by an expression: - - x: annotation = 1 - def f(param: annotation): ... - -Functions may also carry a return annotation following an arrow: - - def f() -> annotation: ... - -Annotations are conventionally used for *type hints*, but this is not -enforced by the language, and in general annotations may contain -arbitrary expressions. The presence of annotations does not change the -runtime semantics of the code, except if some mechanism is used that -introspects and uses the annotations (such as "dataclasses" or -"functools.singledispatch()"). - -By default, annotations are lazily evaluated in an annotation scope. -This means that they are not evaluated when the code containing the -annotation is evaluated. Instead, the interpreter saves information -that can be used to evaluate the annotation later if requested. The -"annotationlib" module provides tools for evaluating annotations. - -If the future statement "from __future__ import annotations" is -present, all annotations are instead stored as strings: - - >>> from __future__ import annotations - >>> def f(param: annotation): ... - >>> f.__annotations__ - {'param': 'annotation'} - -This future statement will be deprecated and removed in a future -version of Python, but not before Python 3.13 reaches its end of life -(see **PEP 749**). When it is used, introspection tools like -"annotationlib.get_annotations()" and "typing.get_type_hints()" are -less likely to be able to resolve annotations at runtime. - --[ Footnotes ]- - -[1] The exception is propagated to the invocation stack unless there - is a "finally" clause which happens to raise another exception. - That new exception causes the old one to be lost. - -[2] In pattern matching, a sequence is defined as one of the - following: - - * a class that inherits from "collections.abc.Sequence" - - * a Python class that has been registered as - "collections.abc.Sequence" - - * a builtin class that has its (CPython) "Py_TPFLAGS_SEQUENCE" bit - set - - * a class that inherits from any of the above - - The following standard library classes are sequences: - - * "array.array" - - * "collections.deque" - - * "list" - - * "memoryview" - - * "range" - - * "tuple" - - Note: - - Subject values of type "str", "bytes", and "bytearray" do not - match sequence patterns. - -[3] In pattern matching, a mapping is defined as one of the following: - - * a class that inherits from "collections.abc.Mapping" - - * a Python class that has been registered as - "collections.abc.Mapping" - - * a builtin class that has its (CPython) "Py_TPFLAGS_MAPPING" bit - set - - * a class that inherits from any of the above - - The standard library classes "dict" and "types.MappingProxyType" - are mappings. - -[4] A string literal appearing as the first statement in the function - body is transformed into the function’s "__doc__" attribute and - therefore the function’s *docstring*. - -[5] A string literal appearing as the first statement in the class - body is transformed into the namespace’s "__doc__" item and - therefore the class’s *docstring*. -''', - 'context-managers': r'''With Statement Context Managers -******************************* - -A *context manager* is an object that defines the runtime context to -be established when executing a "with" statement. The context manager -handles the entry into, and the exit from, the desired runtime context -for the execution of the block of code. Context managers are normally -invoked using the "with" statement (described in section The with -statement), but can also be used by directly invoking their methods. - -Typical uses of context managers include saving and restoring various -kinds of global state, locking and unlocking resources, closing opened -files, etc. - -For more information on context managers, see Context Manager Types. -The "object" class itself does not provide the context manager -methods. - -object.__enter__(self) - - Enter the runtime context related to this object. The "with" - statement will bind this method’s return value to the target(s) - specified in the "as" clause of the statement, if any. - -object.__exit__(self, exc_type, exc_value, traceback) - - Exit the runtime context related to this object. The parameters - describe the exception that caused the context to be exited. If the - context was exited without an exception, all three arguments will - be "None". - - If an exception is supplied, and the method wishes to suppress the - exception (i.e., prevent it from being propagated), it should - return a true value. Otherwise, the exception will be processed - normally upon exit from this method. - - Note that "__exit__()" methods should not reraise the passed-in - exception; this is the caller’s responsibility. - -See also: - - **PEP 343** - The “with” statement - The specification, background, and examples for the Python "with" - statement. -''', - 'continue': r'''The "continue" statement -************************ - - continue_stmt: "continue" - -"continue" may only occur syntactically nested in a "for" or "while" -loop, but not nested in a function or class definition within that -loop. It continues with the next cycle of the nearest enclosing loop. - -When "continue" passes control out of a "try" statement with a -"finally" clause, that "finally" clause is executed before really -starting the next loop cycle. -''', - 'conversions': r'''Arithmetic conversions -********************** - -When a description of an arithmetic operator below uses the phrase -“the numeric arguments are converted to a common real type”, this -means that the operator implementation for built-in numeric types -works as described in the Numeric Types section of the standard -library documentation. - -Some additional rules apply for certain operators and non-numeric -operands (for example, a string as a left argument to the "%" -operator). Extensions must define their own conversion behavior. -''', - 'customization': r'''Basic customization -******************* - -object.__new__(cls[, ...]) - - Called to create a new instance of class *cls*. "__new__()" is a - static method (special-cased so you need not declare it as such) - that takes the class of which an instance was requested as its - first argument. The remaining arguments are those passed to the - object constructor expression (the call to the class). The return - value of "__new__()" should be the new object instance (usually an - instance of *cls*). - - Typical implementations create a new instance of the class by - invoking the superclass’s "__new__()" method using - "super().__new__(cls[, ...])" with appropriate arguments and then - modifying the newly created instance as necessary before returning - it. - - If "__new__()" is invoked during object construction and it returns - an instance of *cls*, then the new instance’s "__init__()" method - will be invoked like "__init__(self[, ...])", where *self* is the - new instance and the remaining arguments are the same as were - passed to the object constructor. - - If "__new__()" does not return an instance of *cls*, then the new - instance’s "__init__()" method will not be invoked. - - "__new__()" is intended mainly to allow subclasses of immutable - types (like int, str, or tuple) to customize instance creation. It - is also commonly overridden in custom metaclasses in order to - customize class creation. - -object.__init__(self[, ...]) - - Called after the instance has been created (by "__new__()"), but - before it is returned to the caller. The arguments are those - passed to the class constructor expression. If a base class has an - "__init__()" method, the derived class’s "__init__()" method, if - any, must explicitly call it to ensure proper initialization of the - base class part of the instance; for example: - "super().__init__([args...])". - - Because "__new__()" and "__init__()" work together in constructing - objects ("__new__()" to create it, and "__init__()" to customize - it), no non-"None" value may be returned by "__init__()"; doing so - will cause a "TypeError" to be raised at runtime. - -object.__del__(self) - - Called when the instance is about to be destroyed. This is also - called a finalizer or (improperly) a destructor. If a base class - has a "__del__()" method, the derived class’s "__del__()" method, - if any, must explicitly call it to ensure proper deletion of the - base class part of the instance. - - It is possible (though not recommended!) for the "__del__()" method - to postpone destruction of the instance by creating a new reference - to it. This is called object *resurrection*. It is - implementation-dependent whether "__del__()" is called a second - time when a resurrected object is about to be destroyed; the - current *CPython* implementation only calls it once. - - It is not guaranteed that "__del__()" methods are called for - objects that still exist when the interpreter exits. - "weakref.finalize" provides a straightforward way to register a - cleanup function to be called when an object is garbage collected. - - Note: - - "del x" doesn’t directly call "x.__del__()" — the former - decrements the reference count for "x" by one, and the latter is - only called when "x"’s reference count reaches zero. - - **CPython implementation detail:** It is possible for a reference - cycle to prevent the reference count of an object from going to - zero. In this case, the cycle will be later detected and deleted - by the *cyclic garbage collector*. A common cause of reference - cycles is when an exception has been caught in a local variable. - The frame’s locals then reference the exception, which references - its own traceback, which references the locals of all frames caught - in the traceback. - - See also: Documentation for the "gc" module. - - Warning: - - Due to the precarious circumstances under which "__del__()" - methods are invoked, exceptions that occur during their execution - are ignored, and a warning is printed to "sys.stderr" instead. - In particular: - - * "__del__()" can be invoked when arbitrary code is being - executed, including from any arbitrary thread. If "__del__()" - needs to take a lock or invoke any other blocking resource, it - may deadlock as the resource may already be taken by the code - that gets interrupted to execute "__del__()". - - * "__del__()" can be executed during interpreter shutdown. As a - consequence, the global variables it needs to access (including - other modules) may already have been deleted or set to "None". - Python guarantees that globals whose name begins with a single - underscore are deleted from their module before other globals - are deleted; if no other references to such globals exist, this - may help in assuring that imported modules are still available - at the time when the "__del__()" method is called. - -object.__repr__(self) - - Called by the "repr()" built-in function to compute the “official” - string representation of an object. If at all possible, this - should look like a valid Python expression that could be used to - recreate an object with the same value (given an appropriate - environment). If this is not possible, a string of the form - "<...some useful description...>" should be returned. The return - value must be a string object. If a class defines "__repr__()" but - not "__str__()", then "__repr__()" is also used when an “informal” - string representation of instances of that class is required. - - This is typically used for debugging, so it is important that the - representation is information-rich and unambiguous. A default - implementation is provided by the "object" class itself. - -object.__str__(self) - - Called by "str(object)", the default "__format__()" implementation, - and the built-in function "print()", to compute the “informal” or - nicely printable string representation of an object. The return - value must be a str object. - - This method differs from "object.__repr__()" in that there is no - expectation that "__str__()" return a valid Python expression: a - more convenient or concise representation can be used. - - The default implementation defined by the built-in type "object" - calls "object.__repr__()". - -object.__bytes__(self) - - Called by bytes to compute a byte-string representation of an - object. This should return a "bytes" object. The "object" class - itself does not provide this method. - -object.__format__(self, format_spec) - - Called by the "format()" built-in function, and by extension, - evaluation of formatted string literals and the "str.format()" - method, to produce a “formatted” string representation of an - object. The *format_spec* argument is a string that contains a - description of the formatting options desired. The interpretation - of the *format_spec* argument is up to the type implementing - "__format__()", however most classes will either delegate - formatting to one of the built-in types, or use a similar - formatting option syntax. - - See Format specification mini-language for a description of the - standard formatting syntax. - - The return value must be a string object. - - The default implementation by the "object" class should be given an - empty *format_spec* string. It delegates to "__str__()". - - Changed in version 3.4: The __format__ method of "object" itself - raises a "TypeError" if passed any non-empty string. - - Changed in version 3.7: "object.__format__(x, '')" is now - equivalent to "str(x)" rather than "format(str(x), '')". - -object.__lt__(self, other) -object.__le__(self, other) -object.__eq__(self, other) -object.__ne__(self, other) -object.__gt__(self, other) -object.__ge__(self, other) - - These are the so-called “rich comparison” methods. The - correspondence between operator symbols and method names is as - follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)", - "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", "x>y" calls - "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)". - - A rich comparison method may return the singleton "NotImplemented" - if it does not implement the operation for a given pair of - arguments. By convention, "False" and "True" are returned for a - successful comparison. However, these methods can return any value, - so if the comparison operator is used in a Boolean context (e.g., - in the condition of an "if" statement), Python will call "bool()" - on the value to determine if the result is true or false. - - By default, "object" implements "__eq__()" by using "is", returning - "NotImplemented" in the case of a false comparison: "True if x is y - else NotImplemented". For "__ne__()", by default it delegates to - "__eq__()" and inverts the result unless it is "NotImplemented". - There are no other implied relationships among the comparison - operators or default implementations; for example, the truth of - "(x<y or x==y)" does not imply "x<=y". To automatically generate - ordering operations from a single root operation, see - "functools.total_ordering()". - - By default, the "object" class provides implementations consistent - with Value comparisons: equality compares according to object - identity, and order comparisons raise "TypeError". Each default - method may generate these results directly, but may also return - "NotImplemented". - - See the paragraph on "__hash__()" for some important notes on - creating *hashable* objects which support custom comparison - operations and are usable as dictionary keys. - - There are no swapped-argument versions of these methods (to be used - when the left argument does not support the operation but the right - argument does); rather, "__lt__()" and "__gt__()" are each other’s - reflection, "__le__()" and "__ge__()" are each other’s reflection, - and "__eq__()" and "__ne__()" are their own reflection. If the - operands are of different types, and the right operand’s type is a - direct or indirect subclass of the left operand’s type, the - reflected method of the right operand has priority, otherwise the - left operand’s method has priority. Virtual subclassing is not - considered. - - When no appropriate method returns any value other than - "NotImplemented", the "==" and "!=" operators will fall back to - "is" and "is not", respectively. - -object.__hash__(self) - - Called by built-in function "hash()" and for operations on members - of hashed collections including "set", "frozenset", and "dict". - The "__hash__()" method should return an integer. The only required - property is that objects which compare equal have the same hash - value; it is advised to mix together the hash values of the - components of the object that also play a part in comparison of - objects by packing them into a tuple and hashing the tuple. - Example: - - def __hash__(self): - return hash((self.name, self.nick, self.color)) - - Note: - - "hash()" truncates the value returned from an object’s custom - "__hash__()" method to the size of a "Py_ssize_t". This is - typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds. - If an object’s "__hash__()" must interoperate on builds of - different bit sizes, be sure to check the width on all supported - builds. An easy way to do this is with "python -c "import sys; - print(sys.hash_info.width)"". - - If a class does not define an "__eq__()" method it should not - define a "__hash__()" operation either; if it defines "__eq__()" - but not "__hash__()", its instances will not be usable as items in - hashable collections. If a class defines mutable objects and - implements an "__eq__()" method, it should not implement - "__hash__()", since the implementation of *hashable* collections - requires that a key’s hash value is immutable (if the object’s hash - value changes, it will be in the wrong hash bucket). - - User-defined classes have "__eq__()" and "__hash__()" methods by - default (inherited from the "object" class); with them, all objects - compare unequal (except with themselves) and "x.__hash__()" returns - an appropriate value such that "x == y" implies both that "x is y" - and "hash(x) == hash(y)". - - A class that overrides "__eq__()" and does not define "__hash__()" - will have its "__hash__()" implicitly set to "None". When the - "__hash__()" method of a class is "None", instances of the class - will raise an appropriate "TypeError" when a program attempts to - retrieve their hash value, and will also be correctly identified as - unhashable when checking "isinstance(obj, - collections.abc.Hashable)". - - If a class that overrides "__eq__()" needs to retain the - implementation of "__hash__()" from a parent class, the interpreter - must be told this explicitly by setting "__hash__ = - <ParentClass>.__hash__". - - If a class that does not override "__eq__()" wishes to suppress - hash support, it should include "__hash__ = None" in the class - definition. A class which defines its own "__hash__()" that - explicitly raises a "TypeError" would be incorrectly identified as - hashable by an "isinstance(obj, collections.abc.Hashable)" call. - - Note: - - By default, the "__hash__()" values of str and bytes objects are - “salted” with an unpredictable random value. Although they - remain constant within an individual Python process, they are not - predictable between repeated invocations of Python.This is - intended to provide protection against a denial-of-service caused - by carefully chosen inputs that exploit the worst case - performance of a dict insertion, *O*(*n*^2) complexity. See - https://ocert.org/advisories/ocert-2011-003.html for - details.Changing hash values affects the iteration order of sets. - Python has never made guarantees about this ordering (and it - typically varies between 32-bit and 64-bit builds).See also - "PYTHONHASHSEED". - - Changed in version 3.3: Hash randomization is enabled by default. - -object.__bool__(self) - - Called to implement truth value testing and the built-in operation - "bool()"; should return "False" or "True". When this method is not - defined, "__len__()" is called, if it is defined, and the object is - considered true if its result is nonzero. If a class defines - neither "__len__()" nor "__bool__()" (which is true of the "object" - class itself), all its instances are considered true. -''', - 'debugger': r'''"pdb" — The Python Debugger -*************************** - -**Source code:** Lib/pdb.py - -====================================================================== - -The module "pdb" defines an interactive source code debugger for -Python programs. It supports setting (conditional) breakpoints and -single stepping at the source line level, inspection of stack frames, -source code listing, and evaluation of arbitrary Python code in the -context of any stack frame. It also supports post-mortem debugging -and can be called under program control. - -The debugger is extensible – it is actually defined as the class -"Pdb". This is currently undocumented but easily understood by reading -the source. The extension interface uses the modules "bdb" and "cmd". - -See also: - - Module "faulthandler" - Used to dump Python tracebacks explicitly, on a fault, after a - timeout, or on a user signal. - - Module "traceback" - Standard interface to extract, format and print stack traces of - Python programs. - -The typical usage to break into the debugger is to insert: - - import pdb; pdb.set_trace() - -Or: - - breakpoint() - -at the location you want to break into the debugger, and then run the -program. You can then step through the code following this statement, -and continue running without the debugger using the "continue" -command. - -Changed in version 3.7: The built-in "breakpoint()", when called with -defaults, can be used instead of "import pdb; pdb.set_trace()". - - def double(x): - breakpoint() - return x * 2 - val = 3 - print(f"{val} * 2 is {double(val)}") - -The debugger’s prompt is "(Pdb)", which is the indicator that you are -in debug mode: - - > ...(2)double() - -> breakpoint() - (Pdb) p x - 3 - (Pdb) continue - 3 * 2 is 6 - -Changed in version 3.3: Tab-completion via the "readline" module is -available for commands and command arguments, e.g. the current global -and local names are offered as arguments of the "p" command. - - -Command-line interface -====================== - -You can also invoke "pdb" from the command line to debug other -scripts. For example: - - python -m pdb [-c command] (-m module | -p pid | pyfile) [args ...] - -When invoked as a module, pdb will automatically enter post-mortem -debugging if the program being debugged exits abnormally. After post- -mortem debugging (or after normal exit of the program), pdb will -restart the program. Automatic restarting preserves pdb’s state (such -as breakpoints) and in most cases is more useful than quitting the -debugger upon program’s exit. - --c, --command <command> - - To execute commands as if given in a ".pdbrc" file; see Debugger - commands. - - Changed in version 3.2: Added the "-c" option. - --m <module> - - To execute modules similar to the way "python -m" does. As with a - script, the debugger will pause execution just before the first - line of the module. - - Changed in version 3.7: Added the "-m" option. - --p, --pid <pid> - - Attach to the process with the specified PID. - - Added in version 3.14. - -To attach to a running Python process for remote debugging, use the -"-p" or "--pid" option with the target process’s PID: - - python -m pdb -p 1234 - -Note: - - Attaching to a process that is blocked in a system call or waiting - for I/O will only work once the next bytecode instruction is - executed or when the process receives a signal. - -Typical usage to execute a statement under control of the debugger is: - - >>> import pdb - >>> def f(x): - ... print(1 / x) - >>> pdb.run("f(2)") - > <string>(1)<module>() - (Pdb) continue - 0.5 - >>> - -The typical usage to inspect a crashed program is: - - >>> import pdb - >>> def f(x): - ... print(1 / x) - ... - >>> f(0) - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - File "<stdin>", line 2, in f - ZeroDivisionError: division by zero - >>> pdb.pm() - > <stdin>(2)f() - (Pdb) p x - 0 - (Pdb) - -Changed in version 3.13: The implementation of **PEP 667** means that -name assignments made via "pdb" will immediately affect the active -scope, even when running inside an *optimized scope*. - -The module defines the following functions; each enters the debugger -in a slightly different way: - -pdb.run(statement, globals=None, locals=None) - - Execute the *statement* (given as a string or a code object) under - debugger control. The debugger prompt appears before any code is - executed; you can set breakpoints and type "continue", or you can - step through the statement using "step" or "next" (all these - commands are explained below). The optional *globals* and *locals* - arguments specify the environment in which the code is executed; by - default the dictionary of the module "__main__" is used. (See the - explanation of the built-in "exec()" or "eval()" functions.) - -pdb.runeval(expression, globals=None, locals=None) - - Evaluate the *expression* (given as a string or a code object) - under debugger control. When "runeval()" returns, it returns the - value of the *expression*. Otherwise this function is similar to - "run()". - -pdb.runcall(function, *args, **kwds) - - Call the *function* (a function or method object, not a string) - with the given arguments. When "runcall()" returns, it returns - whatever the function call returned. The debugger prompt appears - as soon as the function is entered. - -pdb.set_trace(*, header=None, commands=None) - - Enter the debugger at the calling stack frame. This is useful to - hard-code a breakpoint at a given point in a program, even if the - code is not otherwise being debugged (e.g. when an assertion - fails). If given, *header* is printed to the console just before - debugging begins. The *commands* argument, if given, is a list of - commands to execute when the debugger starts. - - Changed in version 3.7: The keyword-only argument *header*. - - Changed in version 3.13: "set_trace()" will enter the debugger - immediately, rather than on the next line of code to be executed. - - Added in version 3.14: The *commands* argument. - -awaitable pdb.set_trace_async(*, header=None, commands=None) - - async version of "set_trace()". This function should be used inside - an async function with "await". - - async def f(): - await pdb.set_trace_async() - - "await" statements are supported if the debugger is invoked by this - function. - - Added in version 3.14. - -pdb.post_mortem(t=None) - - Enter post-mortem debugging of the given exception or traceback - object. If no value is given, it uses the exception that is - currently being handled, or raises "ValueError" if there isn’t one. - - Changed in version 3.13: Support for exception objects was added. - -pdb.pm() - - Enter post-mortem debugging of the exception found in - "sys.last_exc". - -pdb.set_default_backend(backend) - - There are two supported backends for pdb: "'settrace'" and - "'monitoring'". See "bdb.Bdb" for details. The user can set the - default backend to use if none is specified when instantiating - "Pdb". If no backend is specified, the default is "'settrace'". - - Note: - - "breakpoint()" and "set_trace()" will not be affected by this - function. They always use "'monitoring'" backend. - - Added in version 3.14. - -pdb.get_default_backend() - - Returns the default backend for pdb. - - Added in version 3.14. - -The "run*" functions and "set_trace()" are aliases for instantiating -the "Pdb" class and calling the method of the same name. If you want -to access further features, you have to do this yourself: - -class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True, mode=None, backend=None, colorize=False) - - "Pdb" is the debugger class. - - The *completekey*, *stdin* and *stdout* arguments are passed to the - underlying "cmd.Cmd" class; see the description there. - - The *skip* argument, if given, must be an iterable of glob-style - module name patterns. The debugger will not step into frames that - originate in a module that matches one of these patterns. [1] - - By default, Pdb sets a handler for the SIGINT signal (which is sent - when the user presses "Ctrl"-"C" on the console) when you give a - "continue" command. This allows you to break into the debugger - again by pressing "Ctrl"-"C". If you want Pdb not to touch the - SIGINT handler, set *nosigint* to true. - - The *readrc* argument defaults to true and controls whether Pdb - will load .pdbrc files from the filesystem. - - The *mode* argument specifies how the debugger was invoked. It - impacts the workings of some debugger commands. Valid values are - "'inline'" (used by the breakpoint() builtin), "'cli'" (used by the - command line invocation) or "None" (for backwards compatible - behaviour, as before the *mode* argument was added). - - The *backend* argument specifies the backend to use for the - debugger. If "None" is passed, the default backend will be used. - See "set_default_backend()". Otherwise the supported backends are - "'settrace'" and "'monitoring'". - - The *colorize* argument, if set to "True", will enable colorized - output in the debugger, if color is supported. This will highlight - source code displayed in pdb. - - Example call to enable tracing with *skip*: - - import pdb; pdb.Pdb(skip=['django.*']).set_trace() - - Raises an auditing event "pdb.Pdb" with no arguments. - - Changed in version 3.1: Added the *skip* parameter. - - Changed in version 3.2: Added the *nosigint* parameter. Previously, - a SIGINT handler was never set by Pdb. - - Changed in version 3.6: The *readrc* argument. - - Added in version 3.14: Added the *mode* argument. - - Added in version 3.14: Added the *backend* argument. - - Added in version 3.14: Added the *colorize* argument. - - Changed in version 3.14: Inline breakpoints like "breakpoint()" or - "pdb.set_trace()" will always stop the program at calling frame, - ignoring the *skip* pattern (if any). - - run(statement, globals=None, locals=None) - runeval(expression, globals=None, locals=None) - runcall(function, *args, **kwds) - set_trace() - - See the documentation for the functions explained above. - - -Debugger commands -================= - -The commands recognized by the debugger are listed below. Most -commands can be abbreviated to one or two letters as indicated; e.g. -"h(elp)" means that either "h" or "help" can be used to enter the help -command (but not "he" or "hel", nor "H" or "Help" or "HELP"). -Arguments to commands must be separated by whitespace (spaces or -tabs). Optional arguments are enclosed in square brackets ("[]") in -the command syntax; the square brackets must not be typed. -Alternatives in the command syntax are separated by a vertical bar -("|"). - -Entering a blank line repeats the last command entered. Exception: if -the last command was a "list" command, the next 11 lines are listed. - -Commands that the debugger doesn’t recognize are assumed to be Python -statements and are executed in the context of the program being -debugged. Python statements can also be prefixed with an exclamation -point ("!"). This is a powerful way to inspect the program being -debugged; it is even possible to change a variable or call a function. -When an exception occurs in such a statement, the exception name is -printed but the debugger’s state is not changed. - -Changed in version 3.13: Expressions/Statements whose prefix is a pdb -command are now correctly identified and executed. - -The debugger supports aliases. Aliases can have parameters which -allows one a certain level of adaptability to the context under -examination. - -Multiple commands may be entered on a single line, separated by ";;". -(A single ";" is not used as it is the separator for multiple commands -in a line that is passed to the Python parser.) No intelligence is -applied to separating the commands; the input is split at the first -";;" pair, even if it is in the middle of a quoted string. A -workaround for strings with double semicolons is to use implicit -string concatenation "';'';'" or "";"";"". - -To set a temporary global variable, use a *convenience variable*. A -*convenience variable* is a variable whose name starts with "$". For -example, "$foo = 1" sets a global variable "$foo" which you can use in -the debugger session. The *convenience variables* are cleared when -the program resumes execution so it’s less likely to interfere with -your program compared to using normal variables like "foo = 1". - -There are four preset *convenience variables*: - -* "$_frame": the current frame you are debugging - -* "$_retval": the return value if the frame is returning - -* "$_exception": the exception if the frame is raising an exception - -* "$_asynctask": the asyncio task if pdb stops in an async function - -Added in version 3.12: Added the *convenience variable* feature. - -Added in version 3.14: Added the "$_asynctask" convenience variable. - -If a file ".pdbrc" exists in the user’s home directory or in the -current directory, it is read with "'utf-8'" encoding and executed as -if it had been typed at the debugger prompt, with the exception that -empty lines and lines starting with "#" are ignored. This is -particularly useful for aliases. If both files exist, the one in the -home directory is read first and aliases defined there can be -overridden by the local file. - -Changed in version 3.2: ".pdbrc" can now contain commands that -continue debugging, such as "continue" or "next". Previously, these -commands had no effect. - -Changed in version 3.11: ".pdbrc" is now read with "'utf-8'" encoding. -Previously, it was read with the system locale encoding. - -h(elp) [command] - - Without argument, print the list of available commands. With a - *command* as argument, print help about that command. "help pdb" - displays the full documentation (the docstring of the "pdb" - module). Since the *command* argument must be an identifier, "help - exec" must be entered to get help on the "!" command. - -w(here) [count] - - Print a stack trace, with the most recent frame at the bottom. if - *count* is 0, print the current frame entry. If *count* is - negative, print the least recent - *count* frames. If *count* is - positive, print the most recent *count* frames. An arrow (">") - indicates the current frame, which determines the context of most - commands. - - Changed in version 3.14: *count* argument is added. - -d(own) [count] - - Move the current frame *count* (default one) levels down in the - stack trace (to a newer frame). - -u(p) [count] - - Move the current frame *count* (default one) levels up in the stack - trace (to an older frame). - -b(reak) [([filename:]lineno | function) [, condition]] - - With a *lineno* argument, set a break at line *lineno* in the - current file. The line number may be prefixed with a *filename* and - a colon, to specify a breakpoint in another file (possibly one that - hasn’t been loaded yet). The file is searched on "sys.path". - Acceptable forms of *filename* are "/abspath/to/file.py", - "relpath/file.py", "module" and "package.module". - - With a *function* argument, set a break at the first executable - statement within that function. *function* can be any expression - that evaluates to a function in the current namespace. - - If a second argument is present, it is an expression which must - evaluate to true before the breakpoint is honored. - - Without argument, list all breaks, including for each breakpoint, - the number of times that breakpoint has been hit, the current - ignore count, and the associated condition if any. - - Each breakpoint is assigned a number to which all the other - breakpoint commands refer. - -tbreak [([filename:]lineno | function) [, condition]] - - Temporary breakpoint, which is removed automatically when it is - first hit. The arguments are the same as for "break". - -cl(ear) [filename:lineno | bpnumber ...] - - With a *filename:lineno* argument, clear all the breakpoints at - this line. With a space separated list of breakpoint numbers, clear - those breakpoints. Without argument, clear all breaks (but first - ask confirmation). - -disable bpnumber [bpnumber ...] - - Disable the breakpoints given as a space separated list of - breakpoint numbers. Disabling a breakpoint means it cannot cause - the program to stop execution, but unlike clearing a breakpoint, it - remains in the list of breakpoints and can be (re-)enabled. - -enable bpnumber [bpnumber ...] - - Enable the breakpoints specified. - -ignore bpnumber [count] - - Set the ignore count for the given breakpoint number. If *count* - is omitted, the ignore count is set to 0. A breakpoint becomes - active when the ignore count is zero. When non-zero, the *count* - is decremented each time the breakpoint is reached and the - breakpoint is not disabled and any associated condition evaluates - to true. - -condition bpnumber [condition] - - Set a new *condition* for the breakpoint, an expression which must - evaluate to true before the breakpoint is honored. If *condition* - is absent, any existing condition is removed; i.e., the breakpoint - is made unconditional. - -commands [bpnumber] - - Specify a list of commands for breakpoint number *bpnumber*. The - commands themselves appear on the following lines. Type a line - containing just "end" to terminate the commands. An example: - - (Pdb) commands 1 - (com) p some_variable - (com) end - (Pdb) - - To remove all commands from a breakpoint, type "commands" and - follow it immediately with "end"; that is, give no commands. - - With no *bpnumber* argument, "commands" refers to the last - breakpoint set. - - You can use breakpoint commands to start your program up again. - Simply use the "continue" command, or "step", or any other command - that resumes execution. - - Specifying any command resuming execution (currently "continue", - "step", "next", "return", "until", "jump", "quit" and their - abbreviations) terminates the command list (as if that command was - immediately followed by end). This is because any time you resume - execution (even with a simple next or step), you may encounter - another breakpoint—which could have its own command list, leading - to ambiguities about which list to execute. - - If the list of commands contains the "silent" command, or a command - that resumes execution, then the breakpoint message containing - information about the frame is not displayed. - - Changed in version 3.14: Frame information will not be displayed if - a command that resumes execution is present in the command list. - -s(tep) - - Execute the current line, stop at the first possible occasion - (either in a function that is called or on the next line in the - current function). - -n(ext) - - Continue execution until the next line in the current function is - reached or it returns. (The difference between "next" and "step" - is that "step" stops inside a called function, while "next" - executes called functions at (nearly) full speed, only stopping at - the next line in the current function.) - -unt(il) [lineno] - - Without argument, continue execution until the line with a number - greater than the current one is reached. - - With *lineno*, continue execution until a line with a number - greater or equal to *lineno* is reached. In both cases, also stop - when the current frame returns. - - Changed in version 3.2: Allow giving an explicit line number. - -r(eturn) - - Continue execution until the current function returns. - -c(ont(inue)) - - Continue execution, only stop when a breakpoint is encountered. - -j(ump) lineno - - Set the next line that will be executed. Only available in the - bottom-most frame. This lets you jump back and execute code again, - or jump forward to skip code that you don’t want to run. - - It should be noted that not all jumps are allowed – for instance it - is not possible to jump into the middle of a "for" loop or out of a - "finally" clause. - -l(ist) [first[, last]] - - List source code for the current file. Without arguments, list 11 - lines around the current line or continue the previous listing. - With "." as argument, list 11 lines around the current line. With - one argument, list 11 lines around at that line. With two - arguments, list the given range; if the second argument is less - than the first, it is interpreted as a count. - - The current line in the current frame is indicated by "->". If an - exception is being debugged, the line where the exception was - originally raised or propagated is indicated by ">>", if it differs - from the current line. - - Changed in version 3.2: Added the ">>" marker. - -ll | longlist - - List all source code for the current function or frame. - Interesting lines are marked as for "list". - - Added in version 3.2. - -a(rgs) - - Print the arguments of the current function and their current - values. - -p expression - - Evaluate *expression* in the current context and print its value. - - Note: - - "print()" can also be used, but is not a debugger command — this - executes the Python "print()" function. - -pp expression - - Like the "p" command, except the value of *expression* is pretty- - printed using the "pprint" module. - -whatis expression - - Print the type of *expression*. - -source expression - - Try to get source code of *expression* and display it. - - Added in version 3.2. - -display [expression] - - Display the value of *expression* if it changed, each time - execution stops in the current frame. - - Without *expression*, list all display expressions for the current - frame. - - Note: - - Display evaluates *expression* and compares to the result of the - previous evaluation of *expression*, so when the result is - mutable, display may not be able to pick up the changes. - - Example: - - lst = [] - breakpoint() - pass - lst.append(1) - print(lst) - - Display won’t realize "lst" has been changed because the result of - evaluation is modified in place by "lst.append(1)" before being - compared: - - > example.py(3)<module>() - -> pass - (Pdb) display lst - display lst: [] - (Pdb) n - > example.py(4)<module>() - -> lst.append(1) - (Pdb) n - > example.py(5)<module>() - -> print(lst) - (Pdb) - - You can do some tricks with copy mechanism to make it work: - - > example.py(3)<module>() - -> pass - (Pdb) display lst[:] - display lst[:]: [] - (Pdb) n - > example.py(4)<module>() - -> lst.append(1) - (Pdb) n - > example.py(5)<module>() - -> print(lst) - display lst[:]: [1] [old: []] - (Pdb) - - Added in version 3.2. - -undisplay [expression] - - Do not display *expression* anymore in the current frame. Without - *expression*, clear all display expressions for the current frame. - - Added in version 3.2. - -interact - - Start an interactive interpreter (using the "code" module) in a new - global namespace initialised from the local and global namespaces - for the current scope. Use "exit()" or "quit()" to exit the - interpreter and return to the debugger. - - Note: - - As "interact" creates a new dedicated namespace for code - execution, assignments to variables will not affect the original - namespaces. However, modifications to any referenced mutable - objects will be reflected in the original namespaces as usual. - - Added in version 3.2. - - Changed in version 3.13: "exit()" and "quit()" can be used to exit - the "interact" command. - - Changed in version 3.13: "interact" directs its output to the - debugger’s output channel rather than "sys.stderr". - -alias [name [command]] - - Create an alias called *name* that executes *command*. The - *command* must *not* be enclosed in quotes. Replaceable parameters - can be indicated by "%1", "%2", … and "%9", while "%*" is replaced - by all the parameters. If *command* is omitted, the current alias - for *name* is shown. If no arguments are given, all aliases are - listed. - - Aliases may be nested and can contain anything that can be legally - typed at the pdb prompt. Note that internal pdb commands *can* be - overridden by aliases. Such a command is then hidden until the - alias is removed. Aliasing is recursively applied to the first - word of the command line; all other words in the line are left - alone. - - As an example, here are two useful aliases (especially when placed - in the ".pdbrc" file): - - # Print instance variables (usage "pi classInst") - alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}") - # Print instance variables in self - alias ps pi self - -unalias name - - Delete the specified alias *name*. - -! statement - - Execute the (one-line) *statement* in the context of the current - stack frame. The exclamation point can be omitted unless the first - word of the statement resembles a debugger command, e.g.: - - (Pdb) ! n=42 - (Pdb) - - To set a global variable, you can prefix the assignment command - with a "global" statement on the same line, e.g.: - - (Pdb) global list_options; list_options = ['-l'] - (Pdb) - -run [args ...] -restart [args ...] - - Restart the debugged Python program. If *args* is supplied, it is - split with "shlex" and the result is used as the new "sys.argv". - History, breakpoints, actions and debugger options are preserved. - "restart" is an alias for "run". - - Changed in version 3.14: "run" and "restart" commands are disabled - when the debugger is invoked in "'inline'" mode. - -q(uit) - - Quit from the debugger. The program being executed is aborted. An - end-of-file input is equivalent to "quit". - - A confirmation prompt will be shown if the debugger is invoked in - "'inline'" mode. Either "y", "Y", "<Enter>" or "EOF" will confirm - the quit. - - Changed in version 3.14: A confirmation prompt will be shown if the - debugger is invoked in "'inline'" mode. After the confirmation, the - debugger will call "sys.exit()" immediately, instead of raising - "bdb.BdbQuit" in the next trace event. - -debug code - - Enter a recursive debugger that steps through *code* (which is an - arbitrary expression or statement to be executed in the current - environment). - -retval - - Print the return value for the last return of the current function. - -exceptions [excnumber] - - List or jump between chained exceptions. - - When using "pdb.pm()" or "Pdb.post_mortem(...)" with a chained - exception instead of a traceback, it allows the user to move - between the chained exceptions using "exceptions" command to list - exceptions, and "exceptions <number>" to switch to that exception. - - Example: - - def out(): - try: - middle() - except Exception as e: - raise ValueError("reraise middle() error") from e - - def middle(): - try: - return inner(0) - except Exception as e: - raise ValueError("Middle fail") - - def inner(x): - 1 / x - - out() - - calling "pdb.pm()" will allow to move between exceptions: - - > example.py(5)out() - -> raise ValueError("reraise middle() error") from e - - (Pdb) exceptions - 0 ZeroDivisionError('division by zero') - 1 ValueError('Middle fail') - > 2 ValueError('reraise middle() error') - - (Pdb) exceptions 0 - > example.py(16)inner() - -> 1 / x - - (Pdb) up - > example.py(10)middle() - -> return inner(0) - - Added in version 3.13. - --[ Footnotes ]- - -[1] Whether a frame is considered to originate in a certain module is - determined by the "__name__" in the frame globals. -''', - 'del': r'''The "del" statement -******************* - - del_stmt: "del" target_list - -Deletion is recursively defined very similar to the way assignment is -defined. Rather than spelling it out in full details, here are some -hints. - -Deletion of a target list recursively deletes each target, from left -to right. - -Deletion of a name removes the binding of that name from the local or -global namespace, depending on whether the name occurs in a "global" -statement in the same code block. Trying to delete an unbound name -raises a "NameError" exception. - -Deletion of attribute references and subscriptions is passed to the -primary object involved; deletion of a slicing is in general -equivalent to assignment of an empty slice of the right type (but even -this is determined by the sliced object). - -Changed in version 3.2: Previously it was illegal to delete a name -from the local namespace if it occurs as a free variable in a nested -block. -''', - 'dict': r'''Dictionary displays -******************* - -A dictionary display is a possibly empty series of dict items -(key/value pairs) enclosed in curly braces: - - dict_display: "{" [dict_item_list | dict_comprehension] "}" - dict_item_list: dict_item ("," dict_item)* [","] - dict_item: expression ":" expression | "**" or_expr - dict_comprehension: expression ":" expression comp_for - -A dictionary display yields a new dictionary object. - -If a comma-separated sequence of dict items is given, they are -evaluated from left to right to define the entries of the dictionary: -each key object is used as a key into the dictionary to store the -corresponding value. This means that you can specify the same key -multiple times in the dict item list, and the final dictionary’s value -for that key will be the last one given. - -A double asterisk "**" denotes *dictionary unpacking*. Its operand -must be a *mapping*. Each mapping item is added to the new -dictionary. Later values replace values already set by earlier dict -items and earlier dictionary unpackings. - -Added in version 3.5: Unpacking into dictionary displays, originally -proposed by **PEP 448**. - -A dict comprehension, in contrast to list and set comprehensions, -needs two expressions separated with a colon followed by the usual -“for” and “if” clauses. When the comprehension is run, the resulting -key and value elements are inserted in the new dictionary in the order -they are produced. - -Restrictions on the types of the key values are listed earlier in -section The standard type hierarchy. (To summarize, the key type -should be *hashable*, which excludes all mutable objects.) Clashes -between duplicate keys are not detected; the last value (textually -rightmost in the display) stored for a given key value prevails. - -Changed in version 3.8: Prior to Python 3.8, in dict comprehensions, -the evaluation order of key and value was not well-defined. In -CPython, the value was evaluated before the key. Starting with 3.8, -the key is evaluated before the value, as proposed by **PEP 572**. -''', - 'dynamic-features': r'''Interaction with dynamic features -********************************* - -Name resolution of free variables occurs at runtime, not at compile -time. This means that the following code will print 42: - - i = 10 - def f(): - print(i) - i = 42 - f() - -The "eval()" and "exec()" functions do not have access to the full -environment for resolving names. Names may be resolved in the local -and global namespaces of the caller. Free variables are not resolved -in the nearest enclosing namespace, but in the global namespace. [1] -The "exec()" and "eval()" functions have optional arguments to -override the global and local namespace. If only one namespace is -specified, it is used for both. -''', - 'else': r'''The "if" statement -****************** - -The "if" statement is used for conditional execution: - - if_stmt: "if" assignment_expression ":" suite - ("elif" assignment_expression ":" suite)* - ["else" ":" suite] - -It selects exactly one of the suites by evaluating the expressions one -by one until one is found to be true (see section Boolean operations -for the definition of true and false); then that suite is executed -(and no other part of the "if" statement is executed or evaluated). -If all expressions are false, the suite of the "else" clause, if -present, is executed. -''', - 'exceptions': r'''Exceptions -********** - -Exceptions are a means of breaking out of the normal flow of control -of a code block in order to handle errors or other exceptional -conditions. An exception is *raised* at the point where the error is -detected; it may be *handled* by the surrounding code block or by any -code block that directly or indirectly invoked the code block where -the error occurred. - -The Python interpreter raises an exception when it detects a run-time -error (such as division by zero). A Python program can also -explicitly raise an exception with the "raise" statement. Exception -handlers are specified with the "try" … "except" statement. The -"finally" clause of such a statement can be used to specify cleanup -code which does not handle the exception, but is executed whether an -exception occurred or not in the preceding code. - -Python uses the “termination” model of error handling: an exception -handler can find out what happened and continue execution at an outer -level, but it cannot repair the cause of the error and retry the -failing operation (except by re-entering the offending piece of code -from the top). - -When an exception is not handled at all, the interpreter terminates -execution of the program, or returns to its interactive main loop. In -either case, it prints a stack traceback, except when the exception is -"SystemExit". - -Exceptions are identified by class instances. The "except" clause is -selected depending on the class of the instance: it must reference the -class of the instance or a *non-virtual base class* thereof. The -instance can be received by the handler and can carry additional -information about the exceptional condition. - -Note: - - Exception messages are not part of the Python API. Their contents - may change from one version of Python to the next without warning - and should not be relied on by code which will run under multiple - versions of the interpreter. - -See also the description of the "try" statement in section The try -statement and "raise" statement in section The raise statement. -''', - 'execmodel': r'''Execution model -*************** - - -Structure of a program -====================== - -A Python program is constructed from code blocks. A *block* is a piece -of Python program text that is executed as a unit. The following are -blocks: a module, a function body, and a class definition. Each -command typed interactively is a block. A script file (a file given -as standard input to the interpreter or specified as a command line -argument to the interpreter) is a code block. A script command (a -command specified on the interpreter command line with the "-c" -option) is a code block. A module run as a top level script (as module -"__main__") from the command line using a "-m" argument is also a code -block. The string argument passed to the built-in functions "eval()" -and "exec()" is a code block. - -A code block is executed in an *execution frame*. A frame contains -some administrative information (used for debugging) and determines -where and how execution continues after the code block’s execution has -completed. - - -Naming and binding -================== - - -Binding of names ----------------- - -*Names* refer to objects. Names are introduced by name binding -operations. - -The following constructs bind names: - -* formal parameters to functions, - -* class definitions, - -* function definitions, - -* assignment expressions, - -* targets that are identifiers if occurring in an assignment: - - * "for" loop header, - - * after "as" in a "with" statement, "except" clause, "except*" - clause, or in the as-pattern in structural pattern matching, - - * in a capture pattern in structural pattern matching - -* "import" statements. - -* "type" statements. - -* type parameter lists. - -The "import" statement of the form "from ... import *" binds all names -defined in the imported module, except those beginning with an -underscore. This form may only be used at the module level. - -A target occurring in a "del" statement is also considered bound for -this purpose (though the actual semantics are to unbind the name). - -Each assignment or import statement occurs within a block defined by a -class or function definition or at the module level (the top-level -code block). - -If a name is bound in a block, it is a local variable of that block, -unless declared as "nonlocal" or "global". If a name is bound at the -module level, it is a global variable. (The variables of the module -code block are local and global.) If a variable is used in a code -block but not defined there, it is a *free variable*. - -Each occurrence of a name in the program text refers to the *binding* -of that name established by the following name resolution rules. - - -Resolution of names -------------------- - -A *scope* defines the visibility of a name within a block. If a local -variable is defined in a block, its scope includes that block. If the -definition occurs in a function block, the scope extends to any blocks -contained within the defining one, unless a contained block introduces -a different binding for the name. - -When a name is used in a code block, it is resolved using the nearest -enclosing scope. The set of all such scopes visible to a code block -is called the block’s *environment*. - -When a name is not found at all, a "NameError" exception is raised. If -the current scope is a function scope, and the name refers to a local -variable that has not yet been bound to a value at the point where the -name is used, an "UnboundLocalError" exception is raised. -"UnboundLocalError" is a subclass of "NameError". - -If a name binding operation occurs anywhere within a code block, all -uses of the name within the block are treated as references to the -current block. This can lead to errors when a name is used within a -block before it is bound. This rule is subtle. Python lacks -declarations and allows name binding operations to occur anywhere -within a code block. The local variables of a code block can be -determined by scanning the entire text of the block for name binding -operations. See the FAQ entry on UnboundLocalError for examples. - -If the "global" statement occurs within a block, all uses of the names -specified in the statement refer to the bindings of those names in the -top-level namespace. Names are resolved in the top-level namespace by -searching the global namespace, i.e. the namespace of the module -containing the code block, and the builtins namespace, the namespace -of the module "builtins". The global namespace is searched first. If -the names are not found there, the builtins namespace is searched -next. If the names are also not found in the builtins namespace, new -variables are created in the global namespace. The global statement -must precede all uses of the listed names. - -The "global" statement has the same scope as a name binding operation -in the same block. If the nearest enclosing scope for a free variable -contains a global statement, the free variable is treated as a global. - -The "nonlocal" statement causes corresponding names to refer to -previously bound variables in the nearest enclosing function scope. -"SyntaxError" is raised at compile time if the given name does not -exist in any enclosing function scope. Type parameters cannot be -rebound with the "nonlocal" statement. - -The namespace for a module is automatically created the first time a -module is imported. The main module for a script is always called -"__main__". - -Class definition blocks and arguments to "exec()" and "eval()" are -special in the context of name resolution. A class definition is an -executable statement that may use and define names. These references -follow the normal rules for name resolution with an exception that -unbound local variables are looked up in the global namespace. The -namespace of the class definition becomes the attribute dictionary of -the class. The scope of names defined in a class block is limited to -the class block; it does not extend to the code blocks of methods. -This includes comprehensions and generator expressions, but it does -not include annotation scopes, which have access to their enclosing -class scopes. This means that the following will fail: - - class A: - a = 42 - b = list(a + i for i in range(10)) - -However, the following will succeed: - - class A: - type Alias = Nested - class Nested: pass - - print(A.Alias.__value__) # <type 'A.Nested'> - - -Annotation scopes ------------------ - -*Annotations*, type parameter lists and "type" statements introduce -*annotation scopes*, which behave mostly like function scopes, but -with some exceptions discussed below. - -Annotation scopes are used in the following contexts: - -* *Function annotations*. - -* *Variable annotations*. - -* Type parameter lists for generic type aliases. - -* Type parameter lists for generic functions. A generic function’s - annotations are executed within the annotation scope, but its - defaults and decorators are not. - -* Type parameter lists for generic classes. A generic class’s base - classes and keyword arguments are executed within the annotation - scope, but its decorators are not. - -* The bounds, constraints, and default values for type parameters - (lazily evaluated). - -* The value of type aliases (lazily evaluated). - -Annotation scopes differ from function scopes in the following ways: - -* Annotation scopes have access to their enclosing class namespace. If - an annotation scope is immediately within a class scope, or within - another annotation scope that is immediately within a class scope, - the code in the annotation scope can use names defined in the class - scope as if it were executed directly within the class body. This - contrasts with regular functions defined within classes, which - cannot access names defined in the class scope. - -* Expressions in annotation scopes cannot contain "yield", "yield - from", "await", or ":=" expressions. (These expressions are allowed - in other scopes contained within the annotation scope.) - -* Names defined in annotation scopes cannot be rebound with "nonlocal" - statements in inner scopes. This includes only type parameters, as - no other syntactic elements that can appear within annotation scopes - can introduce new names. - -* While annotation scopes have an internal name, that name is not - reflected in the *qualified name* of objects defined within the - scope. Instead, the "__qualname__" of such objects is as if the - object were defined in the enclosing scope. - -Added in version 3.12: Annotation scopes were introduced in Python -3.12 as part of **PEP 695**. - -Changed in version 3.13: Annotation scopes are also used for type -parameter defaults, as introduced by **PEP 696**. - -Changed in version 3.14: Annotation scopes are now also used for -annotations, as specified in **PEP 649** and **PEP 749**. - - -Lazy evaluation ---------------- - -Most annotation scopes are *lazily evaluated*. This includes -annotations, the values of type aliases created through the "type" -statement, and the bounds, constraints, and default values of type -variables created through the type parameter syntax. This means that -they are not evaluated when the type alias or type variable is -created, or when the object carrying annotations is created. Instead, -they are only evaluated when necessary, for example when the -"__value__" attribute on a type alias is accessed. - -Example: - - >>> type Alias = 1/0 - >>> Alias.__value__ - Traceback (most recent call last): - ... - ZeroDivisionError: division by zero - >>> def func[T: 1/0](): pass - >>> T = func.__type_params__[0] - >>> T.__bound__ - Traceback (most recent call last): - ... - ZeroDivisionError: division by zero - -Here the exception is raised only when the "__value__" attribute of -the type alias or the "__bound__" attribute of the type variable is -accessed. - -This behavior is primarily useful for references to types that have -not yet been defined when the type alias or type variable is created. -For example, lazy evaluation enables creation of mutually recursive -type aliases: - - from typing import Literal - - type SimpleExpr = int | Parenthesized - type Parenthesized = tuple[Literal["("], Expr, Literal[")"]] - type Expr = SimpleExpr | tuple[SimpleExpr, Literal["+", "-"], Expr] - -Lazily evaluated values are evaluated in annotation scope, which means -that names that appear inside the lazily evaluated value are looked up -as if they were used in the immediately enclosing scope. - -Added in version 3.12. - - -Builtins and restricted execution ---------------------------------- - -**CPython implementation detail:** Users should not touch -"__builtins__"; it is strictly an implementation detail. Users -wanting to override values in the builtins namespace should "import" -the "builtins" module and modify its attributes appropriately. - -The builtins namespace associated with the execution of a code block -is actually found by looking up the name "__builtins__" in its global -namespace; this should be a dictionary or a module (in the latter case -the module’s dictionary is used). By default, when in the "__main__" -module, "__builtins__" is the built-in module "builtins"; when in any -other module, "__builtins__" is an alias for the dictionary of the -"builtins" module itself. - - -Interaction with dynamic features ---------------------------------- - -Name resolution of free variables occurs at runtime, not at compile -time. This means that the following code will print 42: - - i = 10 - def f(): - print(i) - i = 42 - f() - -The "eval()" and "exec()" functions do not have access to the full -environment for resolving names. Names may be resolved in the local -and global namespaces of the caller. Free variables are not resolved -in the nearest enclosing namespace, but in the global namespace. [1] -The "exec()" and "eval()" functions have optional arguments to -override the global and local namespace. If only one namespace is -specified, it is used for both. - - -Exceptions -========== - -Exceptions are a means of breaking out of the normal flow of control -of a code block in order to handle errors or other exceptional -conditions. An exception is *raised* at the point where the error is -detected; it may be *handled* by the surrounding code block or by any -code block that directly or indirectly invoked the code block where -the error occurred. - -The Python interpreter raises an exception when it detects a run-time -error (such as division by zero). A Python program can also -explicitly raise an exception with the "raise" statement. Exception -handlers are specified with the "try" … "except" statement. The -"finally" clause of such a statement can be used to specify cleanup -code which does not handle the exception, but is executed whether an -exception occurred or not in the preceding code. - -Python uses the “termination” model of error handling: an exception -handler can find out what happened and continue execution at an outer -level, but it cannot repair the cause of the error and retry the -failing operation (except by re-entering the offending piece of code -from the top). - -When an exception is not handled at all, the interpreter terminates -execution of the program, or returns to its interactive main loop. In -either case, it prints a stack traceback, except when the exception is -"SystemExit". - -Exceptions are identified by class instances. The "except" clause is -selected depending on the class of the instance: it must reference the -class of the instance or a *non-virtual base class* thereof. The -instance can be received by the handler and can carry additional -information about the exceptional condition. - -Note: - - Exception messages are not part of the Python API. Their contents - may change from one version of Python to the next without warning - and should not be relied on by code which will run under multiple - versions of the interpreter. - -See also the description of the "try" statement in section The try -statement and "raise" statement in section The raise statement. - - -Runtime Components -================== - - -General Computing Model ------------------------ - -Python’s execution model does not operate in a vacuum. It runs on a -host machine and through that host’s runtime environment, including -its operating system (OS), if there is one. When a program runs, the -conceptual layers of how it runs on the host look something like this: - - **host machine** - **process** (global resources) - **thread** (runs machine code) - -Each process represents a program running on the host. Think of each -process itself as the data part of its program. Think of the process’ -threads as the execution part of the program. This distinction will -be important to understand the conceptual Python runtime. - -The process, as the data part, is the execution context in which the -program runs. It mostly consists of the set of resources assigned to -the program by the host, including memory, signals, file handles, -sockets, and environment variables. - -Processes are isolated and independent from one another. (The same is -true for hosts.) The host manages the process’ access to its assigned -resources, in addition to coordinating between processes. - -Each thread represents the actual execution of the program’s machine -code, running relative to the resources assigned to the program’s -process. It’s strictly up to the host how and when that execution -takes place. - -From the point of view of Python, a program always starts with exactly -one thread. However, the program may grow to run in multiple -simultaneous threads. Not all hosts support multiple threads per -process, but most do. Unlike processes, threads in a process are not -isolated and independent from one another. Specifically, all threads -in a process share all of the process’ resources. - -The fundamental point of threads is that each one does *run* -independently, at the same time as the others. That may be only -conceptually at the same time (“concurrently”) or physically (“in -parallel”). Either way, the threads effectively run at a non- -synchronized rate. - -Note: - - That non-synchronized rate means none of the process’ memory is - guaranteed to stay consistent for the code running in any given - thread. Thus multi-threaded programs must take care to coordinate - access to intentionally shared resources. Likewise, they must take - care to be absolutely diligent about not accessing any *other* - resources in multiple threads; otherwise two threads running at the - same time might accidentally interfere with each other’s use of some - shared data. All this is true for both Python programs and the - Python runtime.The cost of this broad, unstructured requirement is - the tradeoff for the kind of raw concurrency that threads provide. - The alternative to the required discipline generally means dealing - with non-deterministic bugs and data corruption. - - -Python Runtime Model --------------------- - -The same conceptual layers apply to each Python program, with some -extra data layers specific to Python: - - **host machine** - **process** (global resources) - Python global runtime (*state*) - Python interpreter (*state*) - **thread** (runs Python bytecode and “C-API”) - Python thread *state* - -At the conceptual level: when a Python program starts, it looks -exactly like that diagram, with one of each. The runtime may grow to -include multiple interpreters, and each interpreter may grow to -include multiple thread states. - -Note: - - A Python implementation won’t necessarily implement the runtime - layers distinctly or even concretely. The only exception is places - where distinct layers are directly specified or exposed to users, - like through the "threading" module. - -Note: - - The initial interpreter is typically called the “main” interpreter. - Some Python implementations, like CPython, assign special roles to - the main interpreter.Likewise, the host thread where the runtime was - initialized is known as the “main” thread. It may be different from - the process’ initial thread, though they are often the same. In - some cases “main thread” may be even more specific and refer to the - initial thread state. A Python runtime might assign specific - responsibilities to the main thread, such as handling signals. - -As a whole, the Python runtime consists of the global runtime state, -interpreters, and thread states. The runtime ensures all that state -stays consistent over its lifetime, particularly when used with -multiple host threads. - -The global runtime, at the conceptual level, is just a set of -interpreters. While those interpreters are otherwise isolated and -independent from one another, they may share some data or other -resources. The runtime is responsible for managing these global -resources safely. The actual nature and management of these resources -is implementation-specific. Ultimately, the external utility of the -global runtime is limited to managing interpreters. - -In contrast, an “interpreter” is conceptually what we would normally -think of as the (full-featured) “Python runtime”. When machine code -executing in a host thread interacts with the Python runtime, it calls -into Python in the context of a specific interpreter. - -Note: - - The term “interpreter” here is not the same as the “bytecode - interpreter”, which is what regularly runs in threads, executing - compiled Python code.In an ideal world, “Python runtime” would refer - to what we currently call “interpreter”. However, it’s been called - “interpreter” at least since introduced in 1997 (CPython:a027efa5b). - -Each interpreter completely encapsulates all of the non-process- -global, non-thread-specific state needed for the Python runtime to -work. Notably, the interpreter’s state persists between uses. It -includes fundamental data like "sys.modules". The runtime ensures -multiple threads using the same interpreter will safely share it -between them. - -A Python implementation may support using multiple interpreters at the -same time in the same process. They are independent and isolated from -one another. For example, each interpreter has its own "sys.modules". - -For thread-specific runtime state, each interpreter has a set of -thread states, which it manages, in the same way the global runtime -contains a set of interpreters. It can have thread states for as many -host threads as it needs. It may even have multiple thread states for -the same host thread, though that isn’t as common. - -Each thread state, conceptually, has all the thread-specific runtime -data an interpreter needs to operate in one host thread. The thread -state includes the current raised exception and the thread’s Python -call stack. It may include other thread-specific resources. - -Note: - - The term “Python thread” can sometimes refer to a thread state, but - normally it means a thread created using the "threading" module. - -Each thread state, over its lifetime, is always tied to exactly one -interpreter and exactly one host thread. It will only ever be used in -that thread and with that interpreter. - -Multiple thread states may be tied to the same host thread, whether -for different interpreters or even the same interpreter. However, for -any given host thread, only one of the thread states tied to it can be -used by the thread at a time. - -Thread states are isolated and independent from one another and don’t -share any data, except for possibly sharing an interpreter and objects -or other resources belonging to that interpreter. - -Once a program is running, new Python threads can be created using the -"threading" module (on platforms and Python implementations that -support threads). Additional processes can be created using the "os", -"subprocess", and "multiprocessing" modules. Interpreters can be -created and used with the "interpreters" module. Coroutines (async) -can be run using "asyncio" in each interpreter, typically only in a -single thread (often the main thread). - --[ Footnotes ]- - -[1] This limitation occurs because the code that is executed by these - operations is not available at the time the module is compiled. -''', - 'exprlists': r'''Expression lists -**************** - - starred_expression: "*" or_expr | expression - flexible_expression: assignment_expression | starred_expression - flexible_expression_list: flexible_expression ("," flexible_expression)* [","] - starred_expression_list: starred_expression ("," starred_expression)* [","] - expression_list: expression ("," expression)* [","] - yield_list: expression_list | starred_expression "," [starred_expression_list] - -Except when part of a list or set display, an expression list -containing at least one comma yields a tuple. The length of the tuple -is the number of expressions in the list. The expressions are -evaluated from left to right. - -An asterisk "*" denotes *iterable unpacking*. Its operand must be an -*iterable*. The iterable is expanded into a sequence of items, which -are included in the new tuple, list, or set, at the site of the -unpacking. - -Added in version 3.5: Iterable unpacking in expression lists, -originally proposed by **PEP 448**. - -Added in version 3.11: Any item in an expression list may be starred. -See **PEP 646**. - -A trailing comma is required only to create a one-item tuple, such as -"1,"; it is optional in all other cases. A single expression without a -trailing comma doesn’t create a tuple, but rather yields the value of -that expression. (To create an empty tuple, use an empty pair of -parentheses: "()".) -''', - 'floating': r'''Floating-point literals -*********************** - -Floating-point (float) literals, such as "3.14" or "1.5", denote -approximations of real numbers. - -They consist of *integer* and *fraction* parts, each composed of -decimal digits. The parts are separated by a decimal point, ".": - - 2.71828 - 4.0 - -Unlike in integer literals, leading zeros are allowed. For example, -"077.010" is legal, and denotes the same number as "77.01". - -As in integer literals, single underscores may occur between digits to -help readability: - - 96_485.332_123 - 3.14_15_93 - -Either of these parts, but not both, can be empty. For example: - - 10. # (equivalent to 10.0) - .001 # (equivalent to 0.001) - -Optionally, the integer and fraction may be followed by an *exponent*: -the letter "e" or "E", followed by an optional sign, "+" or "-", and a -number in the same format as the integer and fraction parts. The "e" -or "E" represents “times ten raised to the power of”: - - 1.0e3 # (represents 1.0×10³, or 1000.0) - 1.166e-5 # (represents 1.166×10⁻⁵, or 0.00001166) - 6.02214076e+23 # (represents 6.02214076×10²³, or 602214076000000000000000.) - -In floats with only integer and exponent parts, the decimal point may -be omitted: - - 1e3 # (equivalent to 1.e3 and 1.0e3) - 0e0 # (equivalent to 0.) - -Formally, floating-point literals are described by the following -lexical definitions: - - floatnumber: - | digitpart "." [digitpart] [exponent] - | "." digitpart [exponent] - | digitpart exponent - digitpart: digit (["_"] digit)* - exponent: ("e" | "E") ["+" | "-"] digitpart - -Changed in version 3.6: Underscores are now allowed for grouping -purposes in literals. -''', - 'for': r'''The "for" statement -******************* - -The "for" statement is used to iterate over the elements of a sequence -(such as a string, tuple or list) or other iterable object: - - for_stmt: "for" target_list "in" starred_expression_list ":" suite - ["else" ":" suite] - -The "starred_expression_list" expression is evaluated once; it should -yield an *iterable* object. An *iterator* is created for that -iterable. The first item provided by the iterator is then assigned to -the target list using the standard rules for assignments (see -Assignment statements), and the suite is executed. This repeats for -each item provided by the iterator. When the iterator is exhausted, -the suite in the "else" clause, if present, is executed, and the loop -terminates. - -A "break" statement executed in the first suite terminates the loop -without executing the "else" clause’s suite. A "continue" statement -executed in the first suite skips the rest of the suite and continues -with the next item, or with the "else" clause if there is no next -item. - -The for-loop makes assignments to the variables in the target list. -This overwrites all previous assignments to those variables including -those made in the suite of the for-loop: - - for i in range(10): - print(i) - i = 5 # this will not affect the for-loop - # because i will be overwritten with the next - # index in the range - -Names in the target list are not deleted when the loop is finished, -but if the sequence is empty, they will not have been assigned to at -all by the loop. Hint: the built-in type "range()" represents -immutable arithmetic sequences of integers. For instance, iterating -"range(3)" successively yields 0, 1, and then 2. - -Changed in version 3.11: Starred elements are now allowed in the -expression list. -''', - 'formatstrings': r'''Format string syntax -******************** - -The "str.format()" method and the "Formatter" class share the same -syntax for format strings (although in the case of "Formatter", -subclasses can define their own format string syntax). The syntax is -related to that of formatted string literals and template string -literals, but it is less sophisticated and, in particular, does not -support arbitrary expressions in interpolations. - -Format strings contain “replacement fields” surrounded by curly braces -"{}". Anything that is not contained in braces is considered literal -text, which is copied unchanged to the output. If you need to include -a brace character in the literal text, it can be escaped by doubling: -"{{" and "}}". - -The grammar for a replacement field is as follows: - - replacement_field: "{" [field_name] ["!" conversion] [":" format_spec] "}" - field_name: arg_name ("." attribute_name | "[" element_index "]")* - arg_name: [identifier | digit+] - attribute_name: identifier - element_index: digit+ | index_string - index_string: <any source character except "]"> + - conversion: "r" | "s" | "a" - format_spec: format-spec:format_spec - -In less formal terms, the replacement field can start with a -*field_name* that specifies the object whose value is to be formatted -and inserted into the output instead of the replacement field. The -*field_name* is optionally followed by a *conversion* field, which is -preceded by an exclamation point "'!'", and a *format_spec*, which is -preceded by a colon "':'". These specify a non-default format for the -replacement value. - -See also the Format specification mini-language section. - -The *field_name* itself begins with an *arg_name* that is either a -number or a keyword. If it’s a number, it refers to a positional -argument, and if it’s a keyword, it refers to a named keyword -argument. An *arg_name* is treated as a number if a call to -"str.isdecimal()" on the string would return true. If the numerical -arg_names in a format string are 0, 1, 2, … in sequence, they can all -be omitted (not just some) and the numbers 0, 1, 2, … will be -automatically inserted in that order. Because *arg_name* is not quote- -delimited, it is not possible to specify arbitrary dictionary keys -(e.g., the strings "'10'" or "':-]'") within a format string. The -*arg_name* can be followed by any number of index or attribute -expressions. An expression of the form "'.name'" selects the named -attribute using "getattr()", while an expression of the form -"'[index]'" does an index lookup using "__getitem__()". - -Changed in version 3.1: The positional argument specifiers can be -omitted for "str.format()", so "'{} {}'.format(a, b)" is equivalent to -"'{0} {1}'.format(a, b)". - -Changed in version 3.4: The positional argument specifiers can be -omitted for "Formatter". - -Some simple format string examples: - - "First, thou shalt count to {0}" # References first positional argument - "Bring me a {}" # Implicitly references the first positional argument - "From {} to {}" # Same as "From {0} to {1}" - "My quest is {name}" # References keyword argument 'name' - "Weight in tons {0.weight}" # 'weight' attribute of first positional arg - "Units destroyed: {players[0]}" # First element of keyword argument 'players'. - -The *conversion* field causes a type coercion before formatting. -Normally, the job of formatting a value is done by the "__format__()" -method of the value itself. However, in some cases it is desirable to -force a type to be formatted as a string, overriding its own -definition of formatting. By converting the value to a string before -calling "__format__()", the normal formatting logic is bypassed. - -Three conversion flags are currently supported: "'!s'" which calls -"str()" on the value, "'!r'" which calls "repr()" and "'!a'" which -calls "ascii()". - -Some examples: - - "Harold's a clever {0!s}" # Calls str() on the argument first - "Bring out the holy {name!r}" # Calls repr() on the argument first - "More {!a}" # Calls ascii() on the argument first - -The *format_spec* field contains a specification of how the value -should be presented, including such details as field width, alignment, -padding, decimal precision and so on. Each value type can define its -own “formatting mini-language” or interpretation of the *format_spec*. - -Most built-in types support a common formatting mini-language, which -is described in the next section. - -A *format_spec* field can also include nested replacement fields -within it. These nested replacement fields may contain a field name, -conversion flag and format specification, but deeper nesting is not -allowed. The replacement fields within the format_spec are -substituted before the *format_spec* string is interpreted. This -allows the formatting of a value to be dynamically specified. - -See the Format examples section for some examples. - - -Format specification mini-language -================================== - -“Format specifications” are used within replacement fields contained -within a format string to define how individual values are presented -(see Format string syntax, f-strings, and t-strings). They can also be -passed directly to the built-in "format()" function. Each formattable -type may define how the format specification is to be interpreted. - -Most built-in types implement the following options for format -specifications, although some of the formatting options are only -supported by the numeric types. - -A general convention is that an empty format specification produces -the same result as if you had called "str()" on the value. A non-empty -format specification typically modifies the result. - -The general form of a *standard format specifier* is: - - format_spec: [options][width_and_precision][type] - options: [[fill]align][sign]["z"]["#"]["0"] - fill: <any character> - align: "<" | ">" | "=" | "^" - sign: "+" | "-" | " " - width_and_precision: [width_with_grouping][precision_with_grouping] - width_with_grouping: [width][grouping] - precision_with_grouping: "." [precision][grouping] | "." grouping - width: digit+ - precision: digit+ - grouping: "," | "_" - type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" - | "G" | "n" | "o" | "s" | "x" | "X" | "%" - -If a valid *align* value is specified, it can be preceded by a *fill* -character that can be any character and defaults to a space if -omitted. It is not possible to use a literal curly brace (”"{"” or -“"}"”) as the *fill* character in a formatted string literal or when -using the "str.format()" method. However, it is possible to insert a -curly brace with a nested replacement field. This limitation doesn’t -affect the "format()" function. - -The meaning of the various alignment options is as follows: - -+-----------+------------------------------------------------------------+ -| Option | Meaning | -|===========|============================================================| -| "'<'" | Forces the field to be left-aligned within the available | -| | space (this is the default for most objects). | -+-----------+------------------------------------------------------------+ -| "'>'" | Forces the field to be right-aligned within the available | -| | space (this is the default for numbers). | -+-----------+------------------------------------------------------------+ -| "'='" | Forces the padding to be placed after the sign (if any) | -| | but before the digits. This is used for printing fields | -| | in the form ‘+000000120’. This alignment option is only | -| | valid for numeric types, excluding "complex". It becomes | -| | the default for numbers when ‘0’ immediately precedes the | -| | field width. | -+-----------+------------------------------------------------------------+ -| "'^'" | Forces the field to be centered within the available | -| | space. | -+-----------+------------------------------------------------------------+ - -Note that unless a minimum field width is defined, the field width -will always be the same size as the data to fill it, so that the -alignment option has no meaning in this case. - -The *sign* option is only valid for number types, and can be one of -the following: - -+-----------+------------------------------------------------------------+ -| Option | Meaning | -|===========|============================================================| -| "'+'" | Indicates that a sign should be used for both positive as | -| | well as negative numbers. | -+-----------+------------------------------------------------------------+ -| "'-'" | Indicates that a sign should be used only for negative | -| | numbers (this is the default behavior). | -+-----------+------------------------------------------------------------+ -| space | Indicates that a leading space should be used on positive | -| | numbers, and a minus sign on negative numbers. | -+-----------+------------------------------------------------------------+ - -The "'z'" option coerces negative zero floating-point values to -positive zero after rounding to the format precision. This option is -only valid for floating-point presentation types. - -Changed in version 3.11: Added the "'z'" option (see also **PEP -682**). - -The "'#'" option causes the “alternate form” to be used for the -conversion. The alternate form is defined differently for different -types. This option is only valid for integer, float and complex -types. For integers, when binary, octal, or hexadecimal output is -used, this option adds the respective prefix "'0b'", "'0o'", "'0x'", -or "'0X'" to the output value. For float and complex the alternate -form causes the result of the conversion to always contain a decimal- -point character, even if no digits follow it. Normally, a decimal- -point character appears in the result of these conversions only if a -digit follows it. In addition, for "'g'" and "'G'" conversions, -trailing zeros are not removed from the result. - -The *width* is a decimal integer defining the minimum total field -width, including any prefixes, separators, and other formatting -characters. If not specified, then the field width will be determined -by the content. - -When no explicit alignment is given, preceding the *width* field by a -zero ("'0'") character enables sign-aware zero-padding for numeric -types, excluding "complex". This is equivalent to a *fill* character -of "'0'" with an *alignment* type of "'='". - -Changed in version 3.10: Preceding the *width* field by "'0'" no -longer affects the default alignment for strings. - -The *precision* is a decimal integer indicating how many digits should -be displayed after the decimal point for presentation types "'f'" and -"'F'", or before and after the decimal point for presentation types -"'g'" or "'G'". For string presentation types the field indicates the -maximum field size - in other words, how many characters will be used -from the field content. The *precision* is not allowed for integer -presentation types. - -The *grouping* option after *width* and *precision* fields specifies a -digit group separator for the integral and fractional parts of a -number respectively. It can be one of the following: - -+-----------+------------------------------------------------------------+ -| Option | Meaning | -|===========|============================================================| -| "','" | Inserts a comma every 3 digits for integer presentation | -| | type "'d'" and floating-point presentation types, | -| | excluding "'n'". For other presentation types, this option | -| | is not supported. | -+-----------+------------------------------------------------------------+ -| "'_'" | Inserts an underscore every 3 digits for integer | -| | presentation type "'d'" and floating-point presentation | -| | types, excluding "'n'". For integer presentation types | -| | "'b'", "'o'", "'x'", and "'X'", underscores are inserted | -| | every 4 digits. For other presentation types, this option | -| | is not supported. | -+-----------+------------------------------------------------------------+ - -For a locale aware separator, use the "'n'" presentation type instead. - -Changed in version 3.1: Added the "','" option (see also **PEP 378**). - -Changed in version 3.6: Added the "'_'" option (see also **PEP 515**). - -Changed in version 3.14: Support the *grouping* option for the -fractional part. - -Finally, the *type* determines how the data should be presented. - -The available string presentation types are: - - +-----------+------------------------------------------------------------+ - | Type | Meaning | - |===========|============================================================| - | "'s'" | String format. This is the default type for strings and | - | | may be omitted. | - +-----------+------------------------------------------------------------+ - | None | The same as "'s'". | - +-----------+------------------------------------------------------------+ - -The available integer presentation types are: - - +-----------+------------------------------------------------------------+ - | Type | Meaning | - |===========|============================================================| - | "'b'" | Binary format. Outputs the number in base 2. | - +-----------+------------------------------------------------------------+ - | "'c'" | Character. Converts the integer to the corresponding | - | | unicode character before printing. | - +-----------+------------------------------------------------------------+ - | "'d'" | Decimal Integer. Outputs the number in base 10. | - +-----------+------------------------------------------------------------+ - | "'o'" | Octal format. Outputs the number in base 8. | - +-----------+------------------------------------------------------------+ - | "'x'" | Hex format. Outputs the number in base 16, using lower- | - | | case letters for the digits above 9. | - +-----------+------------------------------------------------------------+ - | "'X'" | Hex format. Outputs the number in base 16, using upper- | - | | case letters for the digits above 9. In case "'#'" is | - | | specified, the prefix "'0x'" will be upper-cased to "'0X'" | - | | as well. | - +-----------+------------------------------------------------------------+ - | "'n'" | Number. This is the same as "'d'", except that it uses the | - | | current locale setting to insert the appropriate digit | - | | group separators. | - +-----------+------------------------------------------------------------+ - | None | The same as "'d'". | - +-----------+------------------------------------------------------------+ - -In addition to the above presentation types, integers can be formatted -with the floating-point presentation types listed below (except "'n'" -and "None"). When doing so, "float()" is used to convert the integer -to a floating-point number before formatting. - -The available presentation types for "float" and "Decimal" values are: - - +-----------+------------------------------------------------------------+ - | Type | Meaning | - |===========|============================================================| - | "'e'" | Scientific notation. For a given precision "p", formats | - | | the number in scientific notation with the letter ‘e’ | - | | separating the coefficient from the exponent. The | - | | coefficient has one digit before and "p" digits after the | - | | decimal point, for a total of "p + 1" significant digits. | - | | With no precision given, uses a precision of "6" digits | - | | after the decimal point for "float", and shows all | - | | coefficient digits for "Decimal". If "p=0", the decimal | - | | point is omitted unless the "#" option is used. For | - | | "float", the exponent always contains at least two digits, | - | | and is zero if the value is zero. | - +-----------+------------------------------------------------------------+ - | "'E'" | Scientific notation. Same as "'e'" except it uses an upper | - | | case ‘E’ as the separator character. | - +-----------+------------------------------------------------------------+ - | "'f'" | Fixed-point notation. For a given precision "p", formats | - | | the number as a decimal number with exactly "p" digits | - | | following the decimal point. With no precision given, uses | - | | a precision of "6" digits after the decimal point for | - | | "float", and uses a precision large enough to show all | - | | coefficient digits for "Decimal". If "p=0", the decimal | - | | point is omitted unless the "#" option is used. | - +-----------+------------------------------------------------------------+ - | "'F'" | Fixed-point notation. Same as "'f'", but converts "nan" to | - | | "NAN" and "inf" to "INF". | - +-----------+------------------------------------------------------------+ - | "'g'" | General format. For a given precision "p >= 1", this | - | | rounds the number to "p" significant digits and then | - | | formats the result in either fixed-point format or in | - | | scientific notation, depending on its magnitude. A | - | | precision of "0" is treated as equivalent to a precision | - | | of "1". The precise rules are as follows: suppose that | - | | the result formatted with presentation type "'e'" and | - | | precision "p-1" would have exponent "exp". Then, if "m <= | - | | exp < p", where "m" is -4 for floats and -6 for | - | | "Decimals", the number is formatted with presentation type | - | | "'f'" and precision "p-1-exp". Otherwise, the number is | - | | formatted with presentation type "'e'" and precision | - | | "p-1". In both cases insignificant trailing zeros are | - | | removed from the significand, and the decimal point is | - | | also removed if there are no remaining digits following | - | | it, unless the "'#'" option is used. With no precision | - | | given, uses a precision of "6" significant digits for | - | | "float". For "Decimal", the coefficient of the result is | - | | formed from the coefficient digits of the value; | - | | scientific notation is used for values smaller than "1e-6" | - | | in absolute value and values where the place value of the | - | | least significant digit is larger than 1, and fixed-point | - | | notation is used otherwise. Positive and negative | - | | infinity, positive and negative zero, and nans, are | - | | formatted as "inf", "-inf", "0", "-0" and "nan" | - | | respectively, regardless of the precision. | - +-----------+------------------------------------------------------------+ - | "'G'" | General format. Same as "'g'" except switches to "'E'" if | - | | the number gets too large. The representations of infinity | - | | and NaN are uppercased, too. | - +-----------+------------------------------------------------------------+ - | "'n'" | Number. This is the same as "'g'", except that it uses the | - | | current locale setting to insert the appropriate digit | - | | group separators for the integral part of a number. | - +-----------+------------------------------------------------------------+ - | "'%'" | Percentage. Multiplies the number by 100 and displays in | - | | fixed ("'f'") format, followed by a percent sign. | - +-----------+------------------------------------------------------------+ - | None | For "float" this is like the "'g'" type, except that when | - | | fixed- point notation is used to format the result, it | - | | always includes at least one digit past the decimal point, | - | | and switches to the scientific notation when "exp >= p - | - | | 1". When the precision is not specified, the latter will | - | | be as large as needed to represent the given value | - | | faithfully. For "Decimal", this is the same as either | - | | "'g'" or "'G'" depending on the value of | - | | "context.capitals" for the current decimal context. The | - | | overall effect is to match the output of "str()" as | - | | altered by the other format modifiers. | - +-----------+------------------------------------------------------------+ - -The result should be correctly rounded to a given precision "p" of -digits after the decimal point. The rounding mode for "float" matches -that of the "round()" builtin. For "Decimal", the rounding mode of -the current context will be used. - -The available presentation types for "complex" are the same as those -for "float" ("'%'" is not allowed). Both the real and imaginary -components of a complex number are formatted as floating-point -numbers, according to the specified presentation type. They are -separated by the mandatory sign of the imaginary part, the latter -being terminated by a "j" suffix. If the presentation type is -missing, the result will match the output of "str()" (complex numbers -with a non-zero real part are also surrounded by parentheses), -possibly altered by other format modifiers. - - -Format examples -=============== - -This section contains examples of the "str.format()" syntax and -comparison with the old "%"-formatting. - -In most of the cases the syntax is similar to the old "%"-formatting, -with the addition of the "{}" and with ":" used instead of "%". For -example, "'%03.2f'" can be translated to "'{:03.2f}'". - -The new format syntax also supports new and different options, shown -in the following examples. - -Accessing arguments by position: - - >>> '{0}, {1}, {2}'.format('a', 'b', 'c') - 'a, b, c' - >>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only - 'a, b, c' - >>> '{2}, {1}, {0}'.format('a', 'b', 'c') - 'c, b, a' - >>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence - 'c, b, a' - >>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated - 'abracadabra' - -Accessing arguments by name: - - >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W') - 'Coordinates: 37.24N, -115.81W' - >>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'} - >>> 'Coordinates: {latitude}, {longitude}'.format(**coord) - 'Coordinates: 37.24N, -115.81W' - -Accessing arguments’ attributes: - - >>> c = 3-5j - >>> ('The complex number {0} is formed from the real part {0.real} ' - ... 'and the imaginary part {0.imag}.').format(c) - 'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.' - >>> class Point: - ... def __init__(self, x, y): - ... self.x, self.y = x, y - ... def __str__(self): - ... return 'Point({self.x}, {self.y})'.format(self=self) - ... - >>> str(Point(4, 2)) - 'Point(4, 2)' - -Accessing arguments’ items: - - >>> coord = (3, 5) - >>> 'X: {0[0]}; Y: {0[1]}'.format(coord) - 'X: 3; Y: 5' - -Replacing "%s" and "%r": - - >>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2') - "repr() shows quotes: 'test1'; str() doesn't: test2" - -Aligning the text and specifying a width: - - >>> '{:<30}'.format('left aligned') - 'left aligned ' - >>> '{:>30}'.format('right aligned') - ' right aligned' - >>> '{:^30}'.format('centered') - ' centered ' - >>> '{:*^30}'.format('centered') # use '*' as a fill char - '***********centered***********' - -Replacing "%+f", "%-f", and "% f" and specifying a sign: - - >>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always - '+3.140000; -3.140000' - >>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers - ' 3.140000; -3.140000' - >>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}' - '3.140000; -3.140000' - -Replacing "%x" and "%o" and converting the value to different bases: - - >>> # format also supports binary numbers - >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) - 'int: 42; hex: 2a; oct: 52; bin: 101010' - >>> # with 0x, 0o, or 0b as prefix: - >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) - 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' - -Using the comma or the underscore as a digit group separator: - - >>> '{:,}'.format(1234567890) - '1,234,567,890' - >>> '{:_}'.format(1234567890) - '1_234_567_890' - >>> '{:_b}'.format(1234567890) - '100_1001_1001_0110_0000_0010_1101_0010' - >>> '{:_x}'.format(1234567890) - '4996_02d2' - >>> '{:_}'.format(123456789.123456789) - '123_456_789.12345679' - >>> '{:.,}'.format(123456789.123456789) - '123456789.123,456,79' - >>> '{:,._}'.format(123456789.123456789) - '123,456,789.123_456_79' - -Expressing a percentage: - - >>> points = 19 - >>> total = 22 - >>> 'Correct answers: {:.2%}'.format(points/total) - 'Correct answers: 86.36%' - -Using type-specific formatting: - - >>> import datetime as dt - >>> d = dt.datetime(2010, 7, 4, 12, 15, 58) - >>> '{:%Y-%m-%d %H:%M:%S}'.format(d) - '2010-07-04 12:15:58' - -Nesting arguments and more complex examples: - - >>> for align, text in zip('<^>', ['left', 'center', 'right']): - ... '{0:{fill}{align}16}'.format(text, fill=align, align=align) - ... - 'left<<<<<<<<<<<<' - '^^^^^center^^^^^' - '>>>>>>>>>>>right' - >>> - >>> octets = [192, 168, 0, 1] - >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets) - 'C0A80001' - >>> int(_, 16) - 3232235521 - >>> - >>> width = 5 - >>> for num in range(5,12): - ... for base in 'dXob': - ... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ') - ... print() - ... - 5 5 5 101 - 6 6 6 110 - 7 7 7 111 - 8 8 10 1000 - 9 9 11 1001 - 10 A 12 1010 - 11 B 13 1011 -''', - 'function': r'''Function definitions -******************** - -A function definition defines a user-defined function object (see -section The standard type hierarchy): - - funcdef: [decorators] "def" funcname [type_params] "(" [parameter_list] ")" - ["->" expression] ":" suite - decorators: decorator+ - decorator: "@" assignment_expression NEWLINE - parameter_list: defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]] - | parameter_list_no_posonly - parameter_list_no_posonly: defparameter ("," defparameter)* ["," [parameter_list_starargs]] - | parameter_list_starargs - parameter_list_starargs: "*" [star_parameter] ("," defparameter)* ["," [parameter_star_kwargs]] - | "*" ("," defparameter)+ ["," [parameter_star_kwargs]] - | parameter_star_kwargs - parameter_star_kwargs: "**" parameter [","] - parameter: identifier [":" expression] - star_parameter: identifier [":" ["*"] expression] - defparameter: parameter ["=" expression] - funcname: identifier - -A function definition is an executable statement. Its execution binds -the function name in the current local namespace to a function object -(a wrapper around the executable code for the function). This -function object contains a reference to the current global namespace -as the global namespace to be used when the function is called. - -The function definition does not execute the function body; this gets -executed only when the function is called. [4] - -A function definition may be wrapped by one or more *decorator* -expressions. Decorator expressions are evaluated when the function is -defined, in the scope that contains the function definition. The -result must be a callable, which is invoked with the function object -as the only argument. The returned value is bound to the function name -instead of the function object. Multiple decorators are applied in -nested fashion. For example, the following code - - @f1(arg) - @f2 - def func(): pass - -is roughly equivalent to - - def func(): pass - func = f1(arg)(f2(func)) - -except that the original function is not temporarily bound to the name -"func". - -Changed in version 3.9: Functions may be decorated with any valid -"assignment_expression". Previously, the grammar was much more -restrictive; see **PEP 614** for details. - -A list of type parameters may be given in square brackets between the -function’s name and the opening parenthesis for its parameter list. -This indicates to static type checkers that the function is generic. -At runtime, the type parameters can be retrieved from the function’s -"__type_params__" attribute. See Generic functions for more. - -Changed in version 3.12: Type parameter lists are new in Python 3.12. - -When one or more *parameters* have the form *parameter* "=" -*expression*, the function is said to have “default parameter values.” -For a parameter with a default value, the corresponding *argument* may -be omitted from a call, in which case the parameter’s default value is -substituted. If a parameter has a default value, all following -parameters up until the “"*"” must also have a default value — this is -a syntactic restriction that is not expressed by the grammar. - -**Default parameter values are evaluated from left to right when the -function definition is executed.** This means that the expression is -evaluated once, when the function is defined, and that the same “pre- -computed” value is used for each call. This is especially important -to understand when a default parameter value is a mutable object, such -as a list or a dictionary: if the function modifies the object (e.g. -by appending an item to a list), the default parameter value is in -effect modified. This is generally not what was intended. A way -around this is to use "None" as the default, and explicitly test for -it in the body of the function, e.g.: - - def whats_on_the_telly(penguin=None): - if penguin is None: - penguin = [] - penguin.append("property of the zoo") - return penguin - -Function call semantics are described in more detail in section Calls. -A function call always assigns values to all parameters mentioned in -the parameter list, either from positional arguments, from keyword -arguments, or from default values. If the form “"*identifier"” is -present, it is initialized to a tuple receiving any excess positional -parameters, defaulting to the empty tuple. If the form -“"**identifier"” is present, it is initialized to a new ordered -mapping receiving any excess keyword arguments, defaulting to a new -empty mapping of the same type. Parameters after “"*"” or -“"*identifier"” are keyword-only parameters and may only be passed by -keyword arguments. Parameters before “"/"” are positional-only -parameters and may only be passed by positional arguments. - -Changed in version 3.8: The "/" function parameter syntax may be used -to indicate positional-only parameters. See **PEP 570** for details. - -Parameters may have an *annotation* of the form “": expression"” -following the parameter name. Any parameter may have an annotation, -even those of the form "*identifier" or "**identifier". (As a special -case, parameters of the form "*identifier" may have an annotation “": -*expression"”.) Functions may have “return” annotation of the form -“"-> expression"” after the parameter list. These annotations can be -any valid Python expression. The presence of annotations does not -change the semantics of a function. See Annotations for more -information on annotations. - -Changed in version 3.11: Parameters of the form “"*identifier"” may -have an annotation “": *expression"”. See **PEP 646**. - -It is also possible to create anonymous functions (functions not bound -to a name), for immediate use in expressions. This uses lambda -expressions, described in section Lambdas. Note that the lambda -expression is merely a shorthand for a simplified function definition; -a function defined in a “"def"” statement can be passed around or -assigned to another name just like a function defined by a lambda -expression. The “"def"” form is actually more powerful since it -allows the execution of multiple statements and annotations. - -**Programmer’s note:** Functions are first-class objects. A “"def"” -statement executed inside a function definition defines a local -function that can be returned or passed around. Free variables used -in the nested function can access the local variables of the function -containing the def. See section Naming and binding for details. - -See also: - - **PEP 3107** - Function Annotations - The original specification for function annotations. - - **PEP 484** - Type Hints - Definition of a standard meaning for annotations: type hints. - - **PEP 526** - Syntax for Variable Annotations - Ability to type hint variable declarations, including class - variables and instance variables. - - **PEP 563** - Postponed Evaluation of Annotations - Support for forward references within annotations by preserving - annotations in a string form at runtime instead of eager - evaluation. - - **PEP 318** - Decorators for Functions and Methods - Function and method decorators were introduced. Class decorators - were introduced in **PEP 3129**. -''', - 'global': r'''The "global" statement -********************** - - global_stmt: "global" identifier ("," identifier)* - -The "global" statement causes the listed identifiers to be interpreted -as globals. It would be impossible to assign to a global variable -without "global", although free variables may refer to globals without -being declared global. - -The "global" statement applies to the entire current scope (module, -function body or class definition). A "SyntaxError" is raised if a -variable is used or assigned to prior to its global declaration in the -scope. - -At the module level, all variables are global, so a "global" statement -has no effect. However, variables must still not be used or assigned -to prior to their "global" declaration. This requirement is relaxed in -the interactive prompt (*REPL*). - -**Programmer’s note:** "global" is a directive to the parser. It -applies only to code parsed at the same time as the "global" -statement. In particular, a "global" statement contained in a string -or code object supplied to the built-in "exec()" function does not -affect the code block *containing* the function call, and code -contained in such a string is unaffected by "global" statements in the -code containing the function call. The same applies to the "eval()" -and "compile()" functions. -''', - 'id-classes': r'''Reserved classes of identifiers -******************************* - -Certain classes of identifiers (besides keywords) have special -meanings. These classes are identified by the patterns of leading and -trailing underscore characters: - -"_*" - Not imported by "from module import *". - -"_" - In a "case" pattern within a "match" statement, "_" is a soft - keyword that denotes a wildcard. - - Separately, the interactive interpreter makes the result of the - last evaluation available in the variable "_". (It is stored in the - "builtins" module, alongside built-in functions like "print".) - - Elsewhere, "_" is a regular identifier. It is often used to name - “special” items, but it is not special to Python itself. - - Note: - - The name "_" is often used in conjunction with - internationalization; refer to the documentation for the - "gettext" module for more information on this convention.It is - also commonly used for unused variables. - -"__*__" - System-defined names, informally known as “dunder” names. These - names are defined by the interpreter and its implementation - (including the standard library). Current system names are - discussed in the Special method names section and elsewhere. More - will likely be defined in future versions of Python. *Any* use of - "__*__" names, in any context, that does not follow explicitly - documented use, is subject to breakage without warning. - -"__*" - Class-private names. Names in this category, when used within the - context of a class definition, are re-written to use a mangled form - to help avoid name clashes between “private” attributes of base and - derived classes. See section Identifiers (Names). -''', - 'identifiers': r'''Names (identifiers and keywords) -******************************** - -"NAME" tokens represent *identifiers*, *keywords*, and *soft -keywords*. - -Names are composed of the following characters: - -* uppercase and lowercase letters ("A-Z" and "a-z"), - -* the underscore ("_"), - -* digits ("0" through "9"), which cannot appear as the first - character, and - -* non-ASCII characters. Valid names may only contain “letter-like” and - “digit-like” characters; see Non-ASCII characters in names for - details. - -Names must contain at least one character, but have no upper length -limit. Case is significant. - -Formally, names are described by the following lexical definitions: - - NAME: name_start name_continue* - name_start: "a"..."z" | "A"..."Z" | "_" | <non-ASCII character> - name_continue: name_start | "0"..."9" - identifier: <NAME, except keywords> - -Note that not all names matched by this grammar are valid; see Non- -ASCII characters in names for details. - - -Keywords -======== - -The following names are used as reserved words, or *keywords* of the -language, and cannot be used as ordinary identifiers. They must be -spelled exactly as written here: - - False await else import pass - None break except in raise - True class finally is return - and continue for lambda try - as def from nonlocal while - assert del global not with - async elif if or yield - - -Soft Keywords -============= - -Added in version 3.10. - -Some names are only reserved under specific contexts. These are known -as *soft keywords*: - -* "match", "case", and "_", when used in the "match" statement. - -* "type", when used in the "type" statement. - -These syntactically act as keywords in their specific contexts, but -this distinction is done at the parser level, not when tokenizing. - -As soft keywords, their use in the grammar is possible while still -preserving compatibility with existing code that uses these names as -identifier names. - -Changed in version 3.12: "type" is now a soft keyword. - - -Reserved classes of identifiers -=============================== - -Certain classes of identifiers (besides keywords) have special -meanings. These classes are identified by the patterns of leading and -trailing underscore characters: - -"_*" - Not imported by "from module import *". - -"_" - In a "case" pattern within a "match" statement, "_" is a soft - keyword that denotes a wildcard. - - Separately, the interactive interpreter makes the result of the - last evaluation available in the variable "_". (It is stored in the - "builtins" module, alongside built-in functions like "print".) - - Elsewhere, "_" is a regular identifier. It is often used to name - “special” items, but it is not special to Python itself. - - Note: - - The name "_" is often used in conjunction with - internationalization; refer to the documentation for the - "gettext" module for more information on this convention.It is - also commonly used for unused variables. - -"__*__" - System-defined names, informally known as “dunder” names. These - names are defined by the interpreter and its implementation - (including the standard library). Current system names are - discussed in the Special method names section and elsewhere. More - will likely be defined in future versions of Python. *Any* use of - "__*__" names, in any context, that does not follow explicitly - documented use, is subject to breakage without warning. - -"__*" - Class-private names. Names in this category, when used within the - context of a class definition, are re-written to use a mangled form - to help avoid name clashes between “private” attributes of base and - derived classes. See section Identifiers (Names). - - -Non-ASCII characters in names -============================= - -Names that contain non-ASCII characters need additional normalization -and validation beyond the rules and grammar explained above. For -example, "ř_1", "蛇", or "साँप" are valid names, but "r〰2", "€", or -"🐍" are not. - -This section explains the exact rules. - -All names are converted into the normalization form NFKC while -parsing. This means that, for example, some typographic variants of -characters are converted to their “basic” form. For example, -"fiⁿₐˡᵢᶻₐᵗᵢᵒₙ" normalizes to "finalization", so Python treats them as -the same name: - - >>> fiⁿₐˡᵢᶻₐᵗᵢᵒₙ = 3 - >>> finalization - 3 - -Note: - - Normalization is done at the lexical level only. Run-time functions - that take names as *strings* generally do not normalize their - arguments. For example, the variable defined above is accessible at - run time in the "globals()" dictionary as - "globals()["finalization"]" but not "globals()["fiⁿₐˡᵢᶻₐᵗᵢᵒₙ"]". - -Similarly to how ASCII-only names must contain only letters, digits -and the underscore, and cannot start with a digit, a valid name must -start with a character in the “letter-like” set "xid_start", and the -remaining characters must be in the “letter- and digit-like” set -"xid_continue". - -These sets are based on the *XID_Start* and *XID_Continue* sets as -defined by the Unicode standard annex UAX-31. Python’s "xid_start" -additionally includes the underscore ("_"). Note that Python does not -necessarily conform to UAX-31. - -A non-normative listing of characters in the *XID_Start* and -*XID_Continue* sets as defined by Unicode is available in the -DerivedCoreProperties.txt file in the Unicode Character Database. For -reference, the construction rules for the "xid_*" sets are given -below. - -The set "id_start" is defined as the union of: - -* Unicode category "<Lu>" - uppercase letters (includes "A" to "Z") - -* Unicode category "<Ll>" - lowercase letters (includes "a" to "z") - -* Unicode category "<Lt>" - titlecase letters - -* Unicode category "<Lm>" - modifier letters - -* Unicode category "<Lo>" - other letters - -* Unicode category "<Nl>" - letter numbers - -* {""_""} - the underscore - -* "<Other_ID_Start>" - an explicit set of characters in PropList.txt - to support backwards compatibility - -The set "xid_start" then closes this set under NFKC normalization, by -removing all characters whose normalization is not of the form -"id_start id_continue*". - -The set "id_continue" is defined as the union of: - -* "id_start" (see above) - -* Unicode category "<Nd>" - decimal numbers (includes "0" to "9") - -* Unicode category "<Pc>" - connector punctuations - -* Unicode category "<Mn>" - nonspacing marks - -* Unicode category "<Mc>" - spacing combining marks - -* "<Other_ID_Continue>" - another explicit set of characters in - PropList.txt to support backwards compatibility - -Again, "xid_continue" closes this set under NFKC normalization. - -Unicode categories use the version of the Unicode Character Database -as included in the "unicodedata" module. - -See also: - - * **PEP 3131** – Supporting Non-ASCII Identifiers - - * **PEP 672** – Unicode-related Security Considerations for Python -''', - 'if': r'''The "if" statement -****************** - -The "if" statement is used for conditional execution: - - if_stmt: "if" assignment_expression ":" suite - ("elif" assignment_expression ":" suite)* - ["else" ":" suite] - -It selects exactly one of the suites by evaluating the expressions one -by one until one is found to be true (see section Boolean operations -for the definition of true and false); then that suite is executed -(and no other part of the "if" statement is executed or evaluated). -If all expressions are false, the suite of the "else" clause, if -present, is executed. -''', - 'imaginary': r'''Imaginary literals -****************** - -Python has complex number objects, but no complex literals. Instead, -*imaginary literals* denote complex numbers with a zero real part. - -For example, in math, the complex number 3+4.2*i* is written as the -real number 3 added to the imaginary number 4.2*i*. Python uses a -similar syntax, except the imaginary unit is written as "j" rather -than *i*: - - 3+4.2j - -This is an expression composed of the integer literal "3", the -operator ‘"+"’, and the imaginary literal "4.2j". Since these are -three separate tokens, whitespace is allowed between them: - - 3 + 4.2j - -No whitespace is allowed *within* each token. In particular, the "j" -suffix, may not be separated from the number before it. - -The number before the "j" has the same syntax as a floating-point -literal. Thus, the following are valid imaginary literals: - - 4.2j - 3.14j - 10.j - .001j - 1e100j - 3.14e-10j - 3.14_15_93j - -Unlike in a floating-point literal the decimal point can be omitted if -the imaginary number only has an integer part. The number is still -evaluated as a floating-point number, not an integer: - - 10j - 0j - 1000000000000000000000000j # equivalent to 1e+24j - -The "j" suffix is case-insensitive. That means you can use "J" -instead: - - 3.14J # equivalent to 3.14j - -Formally, imaginary literals are described by the following lexical -definition: - - imagnumber: (floatnumber | digitpart) ("j" | "J") -''', - 'import': r'''The "import" statement -********************** - - import_stmt: "import" module ["as" identifier] ("," module ["as" identifier])* - | "from" relative_module "import" identifier ["as" identifier] - ("," identifier ["as" identifier])* - | "from" relative_module "import" "(" identifier ["as" identifier] - ("," identifier ["as" identifier])* [","] ")" - | "from" relative_module "import" "*" - module: (identifier ".")* identifier - relative_module: "."* module | "."+ - -The basic import statement (no "from" clause) is executed in two -steps: - -1. find a module, loading and initializing it if necessary - -2. define a name or names in the local namespace for the scope where - the "import" statement occurs. - -When the statement contains multiple clauses (separated by commas) the -two steps are carried out separately for each clause, just as though -the clauses had been separated out into individual import statements. - -The details of the first step, finding and loading modules, are -described in greater detail in the section on the import system, which -also describes the various types of packages and modules that can be -imported, as well as all the hooks that can be used to customize the -import system. Note that failures in this step may indicate either -that the module could not be located, *or* that an error occurred -while initializing the module, which includes execution of the -module’s code. - -If the requested module is retrieved successfully, it will be made -available in the local namespace in one of three ways: - -* If the module name is followed by "as", then the name following "as" - is bound directly to the imported module. - -* If no other name is specified, and the module being imported is a - top level module, the module’s name is bound in the local namespace - as a reference to the imported module - -* If the module being imported is *not* a top level module, then the - name of the top level package that contains the module is bound in - the local namespace as a reference to the top level package. The - imported module must be accessed using its full qualified name - rather than directly - -The "from" form uses a slightly more complex process: - -1. find the module specified in the "from" clause, loading and - initializing it if necessary; - -2. for each of the identifiers specified in the "import" clauses: - - 1. check if the imported module has an attribute by that name - - 2. if not, attempt to import a submodule with that name and then - check the imported module again for that attribute - - 3. if the attribute is not found, "ImportError" is raised. - - 4. otherwise, a reference to that value is stored in the local - namespace, using the name in the "as" clause if it is present, - otherwise using the attribute name - -Examples: - - import foo # foo imported and bound locally - import foo.bar.baz # foo, foo.bar, and foo.bar.baz imported, foo bound locally - import foo.bar.baz as fbb # foo, foo.bar, and foo.bar.baz imported, foo.bar.baz bound as fbb - from foo.bar import baz # foo, foo.bar, and foo.bar.baz imported, foo.bar.baz bound as baz - from foo import attr # foo imported and foo.attr bound as attr - -If the list of identifiers is replaced by a star ("'*'"), all public -names defined in the module are bound in the local namespace for the -scope where the "import" statement occurs. - -The *public names* defined by a module are determined by checking the -module’s namespace for a variable named "__all__"; if defined, it must -be a sequence of strings which are names defined or imported by that -module. Names containing non-ASCII characters must be in the -normalization form NFKC; see Non-ASCII characters in names for -details. The names given in "__all__" are all considered public and -are required to exist. If "__all__" is not defined, the set of public -names includes all names found in the module’s namespace which do not -begin with an underscore character ("'_'"). "__all__" should contain -the entire public API. It is intended to avoid accidentally exporting -items that are not part of the API (such as library modules which were -imported and used within the module). - -The wild card form of import — "from module import *" — is only -allowed at the module level. Attempting to use it in class or -function definitions will raise a "SyntaxError". - -When specifying what module to import you do not have to specify the -absolute name of the module. When a module or package is contained -within another package it is possible to make a relative import within -the same top package without having to mention the package name. By -using leading dots in the specified module or package after "from" you -can specify how high to traverse up the current package hierarchy -without specifying exact names. One leading dot means the current -package where the module making the import exists. Two dots means up -one package level. Three dots is up two levels, etc. So if you execute -"from . import mod" from a module in the "pkg" package then you will -end up importing "pkg.mod". If you execute "from ..subpkg2 import mod" -from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The -specification for relative imports is contained in the Package -Relative Imports section. - -"importlib.import_module()" is provided to support applications that -determine dynamically the modules to be loaded. - -Raises an auditing event "import" with arguments "module", "filename", -"sys.path", "sys.meta_path", "sys.path_hooks". - - -Future statements -================= - -A *future statement* is a directive to the compiler that a particular -module should be compiled using syntax or semantics that will be -available in a specified future release of Python where the feature -becomes standard. - -The future statement is intended to ease migration to future versions -of Python that introduce incompatible changes to the language. It -allows use of the new features on a per-module basis before the -release in which the feature becomes standard. - - future_stmt: "from" "__future__" "import" feature ["as" identifier] - ("," feature ["as" identifier])* - | "from" "__future__" "import" "(" feature ["as" identifier] - ("," feature ["as" identifier])* [","] ")" - feature: identifier - -A future statement must appear near the top of the module. The only -lines that can appear before a future statement are: - -* the module docstring (if any), - -* comments, - -* blank lines, and - -* other future statements. - -The only feature that requires using the future statement is -"annotations" (see **PEP 563**). - -All historical features enabled by the future statement are still -recognized by Python 3. The list includes "absolute_import", -"division", "generators", "generator_stop", "unicode_literals", -"print_function", "nested_scopes" and "with_statement". They are all -redundant because they are always enabled, and only kept for backwards -compatibility. - -A future statement is recognized and treated specially at compile -time: Changes to the semantics of core constructs are often -implemented by generating different code. It may even be the case -that a new feature introduces new incompatible syntax (such as a new -reserved word), in which case the compiler may need to parse the -module differently. Such decisions cannot be pushed off until -runtime. - -For any given release, the compiler knows which feature names have -been defined, and raises a compile-time error if a future statement -contains a feature not known to it. - -The direct runtime semantics are the same as for any import statement: -there is a standard module "__future__", described later, and it will -be imported in the usual way at the time the future statement is -executed. - -The interesting runtime semantics depend on the specific feature -enabled by the future statement. - -Note that there is nothing special about the statement: - - import __future__ [as name] - -That is not a future statement; it’s an ordinary import statement with -no special semantics or syntax restrictions. - -Code compiled by calls to the built-in functions "exec()" and -"compile()" that occur in a module "M" containing a future statement -will, by default, use the new syntax or semantics associated with the -future statement. This can be controlled by optional arguments to -"compile()" — see the documentation of that function for details. - -A future statement typed at an interactive interpreter prompt will -take effect for the rest of the interpreter session. If an -interpreter is started with the "-i" option, is passed a script name -to execute, and the script includes a future statement, it will be in -effect in the interactive session started after the script is -executed. - -See also: - - **PEP 236** - Back to the __future__ - The original proposal for the __future__ mechanism. -''', - 'in': r'''Membership test operations -************************** - -The operators "in" and "not in" test for membership. "x in s" -evaluates to "True" if *x* is a member of *s*, and "False" otherwise. -"x not in s" returns the negation of "x in s". All built-in sequences -and set types support this as well as dictionary, for which "in" tests -whether the dictionary has a given key. For container types such as -list, tuple, set, frozenset, dict, or collections.deque, the -expression "x in y" is equivalent to "any(x is e or x == e for e in -y)". - -For the string and bytes types, "x in y" is "True" if and only if *x* -is a substring of *y*. An equivalent test is "y.find(x) != -1". -Empty strings are always considered to be a substring of any other -string, so """ in "abc"" will return "True". - -For user-defined classes which define the "__contains__()" method, "x -in y" returns "True" if "y.__contains__(x)" returns a true value, and -"False" otherwise. - -For user-defined classes which do not define "__contains__()" but do -define "__iter__()", "x in y" is "True" if some value "z", for which -the expression "x is z or x == z" is true, is produced while iterating -over "y". If an exception is raised during the iteration, it is as if -"in" raised that exception. - -Lastly, the old-style iteration protocol is tried: if a class defines -"__getitem__()", "x in y" is "True" if and only if there is a non- -negative integer index *i* such that "x is y[i] or x == y[i]", and no -lower integer index raises the "IndexError" exception. (If any other -exception is raised, it is as if "in" raised that exception). - -The operator "not in" is defined to have the inverse truth value of -"in". -''', - 'integers': r'''Integer literals -**************** - -Integer literals denote whole numbers. For example: - - 7 - 3 - 2147483647 - -There is no limit for the length of integer literals apart from what -can be stored in available memory: - - 7922816251426433759354395033679228162514264337593543950336 - -Underscores can be used to group digits for enhanced readability, and -are ignored for determining the numeric value of the literal. For -example, the following literals are equivalent: - - 100_000_000_000 - 100000000000 - 1_00_00_00_00_000 - -Underscores can only occur between digits. For example, "_123", -"321_", and "123__321" are *not* valid literals. - -Integers can be specified in binary (base 2), octal (base 8), or -hexadecimal (base 16) using the prefixes "0b", "0o" and "0x", -respectively. Hexadecimal digits 10 through 15 are represented by -letters "A"-"F", case-insensitive. For example: - - 0b100110111 - 0b_1110_0101 - 0o177 - 0o377 - 0xdeadbeef - 0xDead_Beef - -An underscore can follow the base specifier. For example, "0x_1f" is a -valid literal, but "0_x1f" and "0x__1f" are not. - -Leading zeros in a non-zero decimal number are not allowed. For -example, "0123" is not a valid literal. This is for disambiguation -with C-style octal literals, which Python used before version 3.0. - -Formally, integer literals are described by the following lexical -definitions: - - integer: decinteger | bininteger | octinteger | hexinteger | zerointeger - decinteger: nonzerodigit (["_"] digit)* - bininteger: "0" ("b" | "B") (["_"] bindigit)+ - octinteger: "0" ("o" | "O") (["_"] octdigit)+ - hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ - zerointeger: "0"+ (["_"] "0")* - nonzerodigit: "1"..."9" - digit: "0"..."9" - bindigit: "0" | "1" - octdigit: "0"..."7" - hexdigit: digit | "a"..."f" | "A"..."F" - -Changed in version 3.6: Underscores are now allowed for grouping -purposes in literals. -''', - 'lambda': r'''Lambdas -******* - - lambda_expr: "lambda" [parameter_list] ":" expression - -Lambda expressions (sometimes called lambda forms) are used to create -anonymous functions. The expression "lambda parameters: expression" -yields a function object. The unnamed object behaves like a function -object defined with: - - def <lambda>(parameters): - return expression - -See section Function definitions for the syntax of parameter lists. -Note that functions created with lambda expressions cannot contain -statements or annotations. -''', - 'lists': r'''List displays -************* - -A list display is a possibly empty series of expressions enclosed in -square brackets: - - list_display: "[" [flexible_expression_list | comprehension] "]" - -A list display yields a new list object, the contents being specified -by either a list of expressions or a comprehension. When a comma- -separated list of expressions is supplied, its elements are evaluated -from left to right and placed into the list object in that order. -When a comprehension is supplied, the list is constructed from the -elements resulting from the comprehension. -''', - 'naming': r'''Naming and binding -****************** - - -Binding of names -================ - -*Names* refer to objects. Names are introduced by name binding -operations. - -The following constructs bind names: - -* formal parameters to functions, - -* class definitions, - -* function definitions, - -* assignment expressions, - -* targets that are identifiers if occurring in an assignment: - - * "for" loop header, - - * after "as" in a "with" statement, "except" clause, "except*" - clause, or in the as-pattern in structural pattern matching, - - * in a capture pattern in structural pattern matching - -* "import" statements. - -* "type" statements. - -* type parameter lists. - -The "import" statement of the form "from ... import *" binds all names -defined in the imported module, except those beginning with an -underscore. This form may only be used at the module level. - -A target occurring in a "del" statement is also considered bound for -this purpose (though the actual semantics are to unbind the name). - -Each assignment or import statement occurs within a block defined by a -class or function definition or at the module level (the top-level -code block). - -If a name is bound in a block, it is a local variable of that block, -unless declared as "nonlocal" or "global". If a name is bound at the -module level, it is a global variable. (The variables of the module -code block are local and global.) If a variable is used in a code -block but not defined there, it is a *free variable*. - -Each occurrence of a name in the program text refers to the *binding* -of that name established by the following name resolution rules. - - -Resolution of names -=================== - -A *scope* defines the visibility of a name within a block. If a local -variable is defined in a block, its scope includes that block. If the -definition occurs in a function block, the scope extends to any blocks -contained within the defining one, unless a contained block introduces -a different binding for the name. - -When a name is used in a code block, it is resolved using the nearest -enclosing scope. The set of all such scopes visible to a code block -is called the block’s *environment*. - -When a name is not found at all, a "NameError" exception is raised. If -the current scope is a function scope, and the name refers to a local -variable that has not yet been bound to a value at the point where the -name is used, an "UnboundLocalError" exception is raised. -"UnboundLocalError" is a subclass of "NameError". - -If a name binding operation occurs anywhere within a code block, all -uses of the name within the block are treated as references to the -current block. This can lead to errors when a name is used within a -block before it is bound. This rule is subtle. Python lacks -declarations and allows name binding operations to occur anywhere -within a code block. The local variables of a code block can be -determined by scanning the entire text of the block for name binding -operations. See the FAQ entry on UnboundLocalError for examples. - -If the "global" statement occurs within a block, all uses of the names -specified in the statement refer to the bindings of those names in the -top-level namespace. Names are resolved in the top-level namespace by -searching the global namespace, i.e. the namespace of the module -containing the code block, and the builtins namespace, the namespace -of the module "builtins". The global namespace is searched first. If -the names are not found there, the builtins namespace is searched -next. If the names are also not found in the builtins namespace, new -variables are created in the global namespace. The global statement -must precede all uses of the listed names. - -The "global" statement has the same scope as a name binding operation -in the same block. If the nearest enclosing scope for a free variable -contains a global statement, the free variable is treated as a global. - -The "nonlocal" statement causes corresponding names to refer to -previously bound variables in the nearest enclosing function scope. -"SyntaxError" is raised at compile time if the given name does not -exist in any enclosing function scope. Type parameters cannot be -rebound with the "nonlocal" statement. - -The namespace for a module is automatically created the first time a -module is imported. The main module for a script is always called -"__main__". - -Class definition blocks and arguments to "exec()" and "eval()" are -special in the context of name resolution. A class definition is an -executable statement that may use and define names. These references -follow the normal rules for name resolution with an exception that -unbound local variables are looked up in the global namespace. The -namespace of the class definition becomes the attribute dictionary of -the class. The scope of names defined in a class block is limited to -the class block; it does not extend to the code blocks of methods. -This includes comprehensions and generator expressions, but it does -not include annotation scopes, which have access to their enclosing -class scopes. This means that the following will fail: - - class A: - a = 42 - b = list(a + i for i in range(10)) - -However, the following will succeed: - - class A: - type Alias = Nested - class Nested: pass - - print(A.Alias.__value__) # <type 'A.Nested'> - - -Annotation scopes -================= - -*Annotations*, type parameter lists and "type" statements introduce -*annotation scopes*, which behave mostly like function scopes, but -with some exceptions discussed below. - -Annotation scopes are used in the following contexts: - -* *Function annotations*. - -* *Variable annotations*. - -* Type parameter lists for generic type aliases. - -* Type parameter lists for generic functions. A generic function’s - annotations are executed within the annotation scope, but its - defaults and decorators are not. - -* Type parameter lists for generic classes. A generic class’s base - classes and keyword arguments are executed within the annotation - scope, but its decorators are not. - -* The bounds, constraints, and default values for type parameters - (lazily evaluated). - -* The value of type aliases (lazily evaluated). - -Annotation scopes differ from function scopes in the following ways: - -* Annotation scopes have access to their enclosing class namespace. If - an annotation scope is immediately within a class scope, or within - another annotation scope that is immediately within a class scope, - the code in the annotation scope can use names defined in the class - scope as if it were executed directly within the class body. This - contrasts with regular functions defined within classes, which - cannot access names defined in the class scope. - -* Expressions in annotation scopes cannot contain "yield", "yield - from", "await", or ":=" expressions. (These expressions are allowed - in other scopes contained within the annotation scope.) - -* Names defined in annotation scopes cannot be rebound with "nonlocal" - statements in inner scopes. This includes only type parameters, as - no other syntactic elements that can appear within annotation scopes - can introduce new names. - -* While annotation scopes have an internal name, that name is not - reflected in the *qualified name* of objects defined within the - scope. Instead, the "__qualname__" of such objects is as if the - object were defined in the enclosing scope. - -Added in version 3.12: Annotation scopes were introduced in Python -3.12 as part of **PEP 695**. - -Changed in version 3.13: Annotation scopes are also used for type -parameter defaults, as introduced by **PEP 696**. - -Changed in version 3.14: Annotation scopes are now also used for -annotations, as specified in **PEP 649** and **PEP 749**. - - -Lazy evaluation -=============== - -Most annotation scopes are *lazily evaluated*. This includes -annotations, the values of type aliases created through the "type" -statement, and the bounds, constraints, and default values of type -variables created through the type parameter syntax. This means that -they are not evaluated when the type alias or type variable is -created, or when the object carrying annotations is created. Instead, -they are only evaluated when necessary, for example when the -"__value__" attribute on a type alias is accessed. - -Example: - - >>> type Alias = 1/0 - >>> Alias.__value__ - Traceback (most recent call last): - ... - ZeroDivisionError: division by zero - >>> def func[T: 1/0](): pass - >>> T = func.__type_params__[0] - >>> T.__bound__ - Traceback (most recent call last): - ... - ZeroDivisionError: division by zero - -Here the exception is raised only when the "__value__" attribute of -the type alias or the "__bound__" attribute of the type variable is -accessed. - -This behavior is primarily useful for references to types that have -not yet been defined when the type alias or type variable is created. -For example, lazy evaluation enables creation of mutually recursive -type aliases: - - from typing import Literal - - type SimpleExpr = int | Parenthesized - type Parenthesized = tuple[Literal["("], Expr, Literal[")"]] - type Expr = SimpleExpr | tuple[SimpleExpr, Literal["+", "-"], Expr] - -Lazily evaluated values are evaluated in annotation scope, which means -that names that appear inside the lazily evaluated value are looked up -as if they were used in the immediately enclosing scope. - -Added in version 3.12. - - -Builtins and restricted execution -================================= - -**CPython implementation detail:** Users should not touch -"__builtins__"; it is strictly an implementation detail. Users -wanting to override values in the builtins namespace should "import" -the "builtins" module and modify its attributes appropriately. - -The builtins namespace associated with the execution of a code block -is actually found by looking up the name "__builtins__" in its global -namespace; this should be a dictionary or a module (in the latter case -the module’s dictionary is used). By default, when in the "__main__" -module, "__builtins__" is the built-in module "builtins"; when in any -other module, "__builtins__" is an alias for the dictionary of the -"builtins" module itself. - - -Interaction with dynamic features -================================= - -Name resolution of free variables occurs at runtime, not at compile -time. This means that the following code will print 42: - - i = 10 - def f(): - print(i) - i = 42 - f() - -The "eval()" and "exec()" functions do not have access to the full -environment for resolving names. Names may be resolved in the local -and global namespaces of the caller. Free variables are not resolved -in the nearest enclosing namespace, but in the global namespace. [1] -The "exec()" and "eval()" functions have optional arguments to -override the global and local namespace. If only one namespace is -specified, it is used for both. -''', - 'nonlocal': r'''The "nonlocal" statement -************************ - - nonlocal_stmt: "nonlocal" identifier ("," identifier)* - -When the definition of a function or class is nested (enclosed) within -the definitions of other functions, its nonlocal scopes are the local -scopes of the enclosing functions. The "nonlocal" statement causes the -listed identifiers to refer to names previously bound in nonlocal -scopes. It allows encapsulated code to rebind such nonlocal -identifiers. If a name is bound in more than one nonlocal scope, the -nearest binding is used. If a name is not bound in any nonlocal scope, -or if there is no nonlocal scope, a "SyntaxError" is raised. - -The "nonlocal" statement applies to the entire scope of a function or -class body. A "SyntaxError" is raised if a variable is used or -assigned to prior to its nonlocal declaration in the scope. - -See also: - - **PEP 3104** - Access to Names in Outer Scopes - The specification for the "nonlocal" statement. - -**Programmer’s note:** "nonlocal" is a directive to the parser and -applies only to code parsed along with it. See the note for the -"global" statement. -''', - 'numbers': r'''Numeric literals -**************** - -"NUMBER" tokens represent numeric literals, of which there are three -types: integers, floating-point numbers, and imaginary numbers. - - NUMBER: integer | floatnumber | imagnumber - -The numeric value of a numeric literal is the same as if it were -passed as a string to the "int", "float" or "complex" class -constructor, respectively. Note that not all valid inputs for those -constructors are also valid literals. - -Numeric literals do not include a sign; a phrase like "-1" is actually -an expression composed of the unary operator ‘"-"’ and the literal -"1". - - -Integer literals -================ - -Integer literals denote whole numbers. For example: - - 7 - 3 - 2147483647 - -There is no limit for the length of integer literals apart from what -can be stored in available memory: - - 7922816251426433759354395033679228162514264337593543950336 - -Underscores can be used to group digits for enhanced readability, and -are ignored for determining the numeric value of the literal. For -example, the following literals are equivalent: - - 100_000_000_000 - 100000000000 - 1_00_00_00_00_000 - -Underscores can only occur between digits. For example, "_123", -"321_", and "123__321" are *not* valid literals. - -Integers can be specified in binary (base 2), octal (base 8), or -hexadecimal (base 16) using the prefixes "0b", "0o" and "0x", -respectively. Hexadecimal digits 10 through 15 are represented by -letters "A"-"F", case-insensitive. For example: - - 0b100110111 - 0b_1110_0101 - 0o177 - 0o377 - 0xdeadbeef - 0xDead_Beef - -An underscore can follow the base specifier. For example, "0x_1f" is a -valid literal, but "0_x1f" and "0x__1f" are not. - -Leading zeros in a non-zero decimal number are not allowed. For -example, "0123" is not a valid literal. This is for disambiguation -with C-style octal literals, which Python used before version 3.0. - -Formally, integer literals are described by the following lexical -definitions: - - integer: decinteger | bininteger | octinteger | hexinteger | zerointeger - decinteger: nonzerodigit (["_"] digit)* - bininteger: "0" ("b" | "B") (["_"] bindigit)+ - octinteger: "0" ("o" | "O") (["_"] octdigit)+ - hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ - zerointeger: "0"+ (["_"] "0")* - nonzerodigit: "1"..."9" - digit: "0"..."9" - bindigit: "0" | "1" - octdigit: "0"..."7" - hexdigit: digit | "a"..."f" | "A"..."F" - -Changed in version 3.6: Underscores are now allowed for grouping -purposes in literals. - - -Floating-point literals -======================= - -Floating-point (float) literals, such as "3.14" or "1.5", denote -approximations of real numbers. - -They consist of *integer* and *fraction* parts, each composed of -decimal digits. The parts are separated by a decimal point, ".": - - 2.71828 - 4.0 - -Unlike in integer literals, leading zeros are allowed. For example, -"077.010" is legal, and denotes the same number as "77.01". - -As in integer literals, single underscores may occur between digits to -help readability: - - 96_485.332_123 - 3.14_15_93 - -Either of these parts, but not both, can be empty. For example: - - 10. # (equivalent to 10.0) - .001 # (equivalent to 0.001) - -Optionally, the integer and fraction may be followed by an *exponent*: -the letter "e" or "E", followed by an optional sign, "+" or "-", and a -number in the same format as the integer and fraction parts. The "e" -or "E" represents “times ten raised to the power of”: - - 1.0e3 # (represents 1.0×10³, or 1000.0) - 1.166e-5 # (represents 1.166×10⁻⁵, or 0.00001166) - 6.02214076e+23 # (represents 6.02214076×10²³, or 602214076000000000000000.) - -In floats with only integer and exponent parts, the decimal point may -be omitted: - - 1e3 # (equivalent to 1.e3 and 1.0e3) - 0e0 # (equivalent to 0.) - -Formally, floating-point literals are described by the following -lexical definitions: - - floatnumber: - | digitpart "." [digitpart] [exponent] - | "." digitpart [exponent] - | digitpart exponent - digitpart: digit (["_"] digit)* - exponent: ("e" | "E") ["+" | "-"] digitpart - -Changed in version 3.6: Underscores are now allowed for grouping -purposes in literals. - - -Imaginary literals -================== - -Python has complex number objects, but no complex literals. Instead, -*imaginary literals* denote complex numbers with a zero real part. - -For example, in math, the complex number 3+4.2*i* is written as the -real number 3 added to the imaginary number 4.2*i*. Python uses a -similar syntax, except the imaginary unit is written as "j" rather -than *i*: - - 3+4.2j - -This is an expression composed of the integer literal "3", the -operator ‘"+"’, and the imaginary literal "4.2j". Since these are -three separate tokens, whitespace is allowed between them: - - 3 + 4.2j - -No whitespace is allowed *within* each token. In particular, the "j" -suffix, may not be separated from the number before it. - -The number before the "j" has the same syntax as a floating-point -literal. Thus, the following are valid imaginary literals: - - 4.2j - 3.14j - 10.j - .001j - 1e100j - 3.14e-10j - 3.14_15_93j - -Unlike in a floating-point literal the decimal point can be omitted if -the imaginary number only has an integer part. The number is still -evaluated as a floating-point number, not an integer: - - 10j - 0j - 1000000000000000000000000j # equivalent to 1e+24j - -The "j" suffix is case-insensitive. That means you can use "J" -instead: - - 3.14J # equivalent to 3.14j - -Formally, imaginary literals are described by the following lexical -definition: - - imagnumber: (floatnumber | digitpart) ("j" | "J") -''', - 'numeric-types': r'''Emulating numeric types -*********************** - -The following methods can be defined to emulate numeric objects. -Methods corresponding to operations that are not supported by the -particular kind of number implemented (e.g., bitwise operations for -non-integral numbers) should be left undefined. - -object.__add__(self, other) -object.__sub__(self, other) -object.__mul__(self, other) -object.__matmul__(self, other) -object.__truediv__(self, other) -object.__floordiv__(self, other) -object.__mod__(self, other) -object.__divmod__(self, other) -object.__pow__(self, other[, modulo]) -object.__lshift__(self, other) -object.__rshift__(self, other) -object.__and__(self, other) -object.__xor__(self, other) -object.__or__(self, other) - - These methods are called to implement the binary arithmetic - operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", - "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to - evaluate the expression "x + y", where *x* is an instance of a - class that has an "__add__()" method, "type(x).__add__(x, y)" is - called. The "__divmod__()" method should be the equivalent to - using "__floordiv__()" and "__mod__()"; it should not be related to - "__truediv__()". Note that "__pow__()" should be defined to accept - an optional third argument if the three-argument version of the - built-in "pow()" function is to be supported. - - If one of those methods does not support the operation with the - supplied arguments, it should return "NotImplemented". - -object.__radd__(self, other) -object.__rsub__(self, other) -object.__rmul__(self, other) -object.__rmatmul__(self, other) -object.__rtruediv__(self, other) -object.__rfloordiv__(self, other) -object.__rmod__(self, other) -object.__rdivmod__(self, other) -object.__rpow__(self, other[, modulo]) -object.__rlshift__(self, other) -object.__rrshift__(self, other) -object.__rand__(self, other) -object.__rxor__(self, other) -object.__ror__(self, other) - - These methods are called to implement the binary arithmetic - operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", - "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped) - operands. These functions are only called if the operands are of - different types, when the left operand does not support the - corresponding operation [3], or the right operand’s class is - derived from the left operand’s class. [4] For instance, to - evaluate the expression "x - y", where *y* is an instance of a - class that has an "__rsub__()" method, "type(y).__rsub__(y, x)" is - called if "type(x).__sub__(x, y)" returns "NotImplemented" or - "type(y)" is a subclass of "type(x)". [5] - - Note that "__rpow__()" should be defined to accept an optional - third argument if the three-argument version of the built-in - "pow()" function is to be supported. - - Changed in version 3.14: Three-argument "pow()" now try calling - "__rpow__()" if necessary. Previously it was only called in two- - argument "pow()" and the binary power operator. - - Note: - - If the right operand’s type is a subclass of the left operand’s - type and that subclass provides a different implementation of the - reflected method for the operation, this method will be called - before the left operand’s non-reflected method. This behavior - allows subclasses to override their ancestors’ operations. - -object.__iadd__(self, other) -object.__isub__(self, other) -object.__imul__(self, other) -object.__imatmul__(self, other) -object.__itruediv__(self, other) -object.__ifloordiv__(self, other) -object.__imod__(self, other) -object.__ipow__(self, other[, modulo]) -object.__ilshift__(self, other) -object.__irshift__(self, other) -object.__iand__(self, other) -object.__ixor__(self, other) -object.__ior__(self, other) - - These methods are called to implement the augmented arithmetic - assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=", - "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to - do the operation in-place (modifying *self*) and return the result - (which could be, but does not have to be, *self*). If a specific - method is not defined, or if that method returns "NotImplemented", - the augmented assignment falls back to the normal methods. For - instance, if *x* is an instance of a class with an "__iadd__()" - method, "x += y" is equivalent to "x = x.__iadd__(y)" . If - "__iadd__()" does not exist, or if "x.__iadd__(y)" returns - "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" are - considered, as with the evaluation of "x + y". In certain - situations, augmented assignment can result in unexpected errors - (see Why does a_tuple[i] += [‘item’] raise an exception when the - addition works?), but this behavior is in fact part of the data - model. - -object.__neg__(self) -object.__pos__(self) -object.__abs__(self) -object.__invert__(self) - - Called to implement the unary arithmetic operations ("-", "+", - "abs()" and "~"). - -object.__complex__(self) -object.__int__(self) -object.__float__(self) - - Called to implement the built-in functions "complex()", "int()" and - "float()". Should return a value of the appropriate type. - -object.__index__(self) - - Called to implement "operator.index()", and whenever Python needs - to losslessly convert the numeric object to an integer object (such - as in slicing, or in the built-in "bin()", "hex()" and "oct()" - functions). Presence of this method indicates that the numeric - object is an integer type. Must return an integer. - - If "__int__()", "__float__()" and "__complex__()" are not defined - then corresponding built-in functions "int()", "float()" and - "complex()" fall back to "__index__()". - -object.__round__(self[, ndigits]) -object.__trunc__(self) -object.__floor__(self) -object.__ceil__(self) - - Called to implement the built-in function "round()" and "math" - functions "trunc()", "floor()" and "ceil()". Unless *ndigits* is - passed to "__round__()" all these methods should return the value - of the object truncated to an "Integral" (typically an "int"). - - Changed in version 3.14: "int()" no longer delegates to the - "__trunc__()" method. -''', - 'objects': r'''Objects, values and types -************************* - -*Objects* are Python’s abstraction for data. All data in a Python -program is represented by objects or by relations between objects. -Even code is represented by objects. - -Every object has an identity, a type and a value. An object’s -*identity* never changes once it has been created; you may think of it -as the object’s address in memory. The "is" operator compares the -identity of two objects; the "id()" function returns an integer -representing its identity. - -**CPython implementation detail:** For CPython, "id(x)" is the memory -address where "x" is stored. - -An object’s type determines the operations that the object supports -(e.g., “does it have a length?”) and also defines the possible values -for objects of that type. The "type()" function returns an object’s -type (which is an object itself). Like its identity, an object’s -*type* is also unchangeable. [1] - -The *value* of some objects can change. Objects whose value can -change are said to be *mutable*; objects whose value is unchangeable -once they are created are called *immutable*. (The value of an -immutable container object that contains a reference to a mutable -object can change when the latter’s value is changed; however the -container is still considered immutable, because the collection of -objects it contains cannot be changed. So, immutability is not -strictly the same as having an unchangeable value, it is more subtle.) -An object’s mutability is determined by its type; for instance, -numbers, strings and tuples are immutable, while dictionaries and -lists are mutable. - -Objects are never explicitly destroyed; however, when they become -unreachable they may be garbage-collected. An implementation is -allowed to postpone garbage collection or omit it altogether — it is a -matter of implementation quality how garbage collection is -implemented, as long as no objects are collected that are still -reachable. - -**CPython implementation detail:** CPython currently uses a reference- -counting scheme with (optional) delayed detection of cyclically linked -garbage, which collects most objects as soon as they become -unreachable, but is not guaranteed to collect garbage containing -circular references. See the documentation of the "gc" module for -information on controlling the collection of cyclic garbage. Other -implementations act differently and CPython may change. Do not depend -on immediate finalization of objects when they become unreachable (so -you should always close files explicitly). - -Note that the use of the implementation’s tracing or debugging -facilities may keep objects alive that would normally be collectable. -Also note that catching an exception with a "try"…"except" statement -may keep objects alive. - -Some objects contain references to “external” resources such as open -files or windows. It is understood that these resources are freed -when the object is garbage-collected, but since garbage collection is -not guaranteed to happen, such objects also provide an explicit way to -release the external resource, usually a "close()" method. Programs -are strongly recommended to explicitly close such objects. The -"try"…"finally" statement and the "with" statement provide convenient -ways to do this. - -Some objects contain references to other objects; these are called -*containers*. Examples of containers are tuples, lists and -dictionaries. The references are part of a container’s value. In -most cases, when we talk about the value of a container, we imply the -values, not the identities of the contained objects; however, when we -talk about the mutability of a container, only the identities of the -immediately contained objects are implied. So, if an immutable -container (like a tuple) contains a reference to a mutable object, its -value changes if that mutable object is changed. - -Types affect almost all aspects of object behavior. Even the -importance of object identity is affected in some sense: for immutable -types, operations that compute new values may actually return a -reference to any existing object with the same type and value, while -for mutable objects this is not allowed. For example, after "a = 1; b -= 1", *a* and *b* may or may not refer to the same object with the -value one, depending on the implementation. This is because "int" is -an immutable type, so the reference to "1" can be reused. This -behaviour depends on the implementation used, so should not be relied -upon, but is something to be aware of when making use of object -identity tests. However, after "c = []; d = []", *c* and *d* are -guaranteed to refer to two different, unique, newly created empty -lists. (Note that "e = f = []" assigns the *same* object to both *e* -and *f*.) -''', - 'operator-summary': r'''Operator precedence -******************* - -The following table summarizes the operator precedence in Python, from -highest precedence (most binding) to lowest precedence (least -binding). Operators in the same box have the same precedence. Unless -the syntax is explicitly given, operators are binary. Operators in -the same box group left to right (except for exponentiation and -conditional expressions, which group from right to left). - -Note that comparisons, membership tests, and identity tests, all have -the same precedence and have a left-to-right chaining feature as -described in the Comparisons section. - -+-------------------------------------------------+---------------------------------------+ -| Operator | Description | -|=================================================|=======================================| -| "(expressions...)", "[expressions...]", "{key: | Binding or parenthesized expression, | -| value...}", "{expressions...}" | list display, dictionary display, set | -| | display | -+-------------------------------------------------+---------------------------------------+ -| "x[index]", "x[index:index]" "x(arguments...)", | Subscription (including slicing), | -| "x.attribute" | call, attribute reference | -+-------------------------------------------------+---------------------------------------+ -| "await x" | Await expression | -+-------------------------------------------------+---------------------------------------+ -| "**" | Exponentiation [5] | -+-------------------------------------------------+---------------------------------------+ -| "+x", "-x", "~x" | Positive, negative, bitwise NOT | -+-------------------------------------------------+---------------------------------------+ -| "*", "@", "/", "//", "%" | Multiplication, matrix | -| | multiplication, division, floor | -| | division, remainder [6] | -+-------------------------------------------------+---------------------------------------+ -| "+", "-" | Addition and subtraction | -+-------------------------------------------------+---------------------------------------+ -| "<<", ">>" | Shifts | -+-------------------------------------------------+---------------------------------------+ -| "&" | Bitwise AND | -+-------------------------------------------------+---------------------------------------+ -| "^" | Bitwise XOR | -+-------------------------------------------------+---------------------------------------+ -| "|" | Bitwise OR | -+-------------------------------------------------+---------------------------------------+ -| "in", "not in", "is", "is not", "<", "<=", ">", | Comparisons, including membership | -| ">=", "!=", "==" | tests and identity tests | -+-------------------------------------------------+---------------------------------------+ -| "not x" | Boolean NOT | -+-------------------------------------------------+---------------------------------------+ -| "and" | Boolean AND | -+-------------------------------------------------+---------------------------------------+ -| "or" | Boolean OR | -+-------------------------------------------------+---------------------------------------+ -| "if" – "else" | Conditional expression | -+-------------------------------------------------+---------------------------------------+ -| "lambda" | Lambda expression | -+-------------------------------------------------+---------------------------------------+ -| ":=" | Assignment expression | -+-------------------------------------------------+---------------------------------------+ - --[ Footnotes ]- - -[1] While "abs(x%y) < abs(y)" is true mathematically, for floats it - may not be true numerically due to roundoff. For example, and - assuming a platform on which a Python float is an IEEE 754 double- - precision number, in order that "-1e-100 % 1e100" have the same - sign as "1e100", the computed result is "-1e-100 + 1e100", which - is numerically exactly equal to "1e100". The function - "math.fmod()" returns a result whose sign matches the sign of the - first argument instead, and so returns "-1e-100" in this case. - Which approach is more appropriate depends on the application. - -[2] If x is very close to an exact integer multiple of y, it’s - possible for "x//y" to be one larger than "(x-x%y)//y" due to - rounding. In such cases, Python returns the latter result, in - order to preserve that "divmod(x,y)[0] * y + x % y" be very close - to "x". - -[3] The Unicode standard distinguishes between *code points* (e.g. - U+0041) and *abstract characters* (e.g. “LATIN CAPITAL LETTER A”). - While most abstract characters in Unicode are only represented - using one code point, there is a number of abstract characters - that can in addition be represented using a sequence of more than - one code point. For example, the abstract character “LATIN - CAPITAL LETTER C WITH CEDILLA” can be represented as a single - *precomposed character* at code position U+00C7, or as a sequence - of a *base character* at code position U+0043 (LATIN CAPITAL - LETTER C), followed by a *combining character* at code position - U+0327 (COMBINING CEDILLA). - - The comparison operators on strings compare at the level of - Unicode code points. This may be counter-intuitive to humans. For - example, ""\u00C7" == "\u0043\u0327"" is "False", even though both - strings represent the same abstract character “LATIN CAPITAL - LETTER C WITH CEDILLA”. - - To compare strings at the level of abstract characters (that is, - in a way intuitive to humans), use "unicodedata.normalize()". - -[4] Due to automatic garbage-collection, free lists, and the dynamic - nature of descriptors, you may notice seemingly unusual behaviour - in certain uses of the "is" operator, like those involving - comparisons between instance methods, or constants. Check their - documentation for more info. - -[5] The power operator "**" binds less tightly than an arithmetic or - bitwise unary operator on its right, that is, "2**-1" is "0.5". - -[6] The "%" operator is also used for string formatting; the same - precedence applies. -''', - 'pass': r'''The "pass" statement -******************** - - pass_stmt: "pass" - -"pass" is a null operation — when it is executed, nothing happens. It -is useful as a placeholder when a statement is required syntactically, -but no code needs to be executed, for example: - - def f(arg): pass # a function that does nothing (yet) - - class C: pass # a class with no methods (yet) -''', - 'power': r'''The power operator -****************** - -The power operator binds more tightly than unary operators on its -left; it binds less tightly than unary operators on its right. The -syntax is: - - power: (await_expr | primary) ["**" u_expr] - -Thus, in an unparenthesized sequence of power and unary operators, the -operators are evaluated from right to left (this does not constrain -the evaluation order for the operands): "-1**2" results in "-1". - -The power operator has the same semantics as the built-in "pow()" -function, when called with two arguments: it yields its left argument -raised to the power of its right argument. Numeric arguments are first -converted to a common type, and the result is of that type. - -For int operands, the result has the same type as the operands unless -the second argument is negative; in that case, all arguments are -converted to float and a float result is delivered. For example, -"10**2" returns "100", but "10**-2" returns "0.01". - -Raising "0.0" to a negative power results in a "ZeroDivisionError". -Raising a negative number to a fractional power results in a "complex" -number. (In earlier versions it raised a "ValueError".) - -This operation can be customized using the special "__pow__()" and -"__rpow__()" methods. -''', - 'raise': r'''The "raise" statement -********************* - - raise_stmt: "raise" [expression ["from" expression]] - -If no expressions are present, "raise" re-raises the exception that is -currently being handled, which is also known as the *active -exception*. If there isn’t currently an active exception, a -"RuntimeError" exception is raised indicating that this is an error. - -Otherwise, "raise" evaluates the first expression as the exception -object. It must be either a subclass or an instance of -"BaseException". If it is a class, the exception instance will be -obtained when needed by instantiating the class with no arguments. - -The *type* of the exception is the exception instance’s class, the -*value* is the instance itself. - -A traceback object is normally created automatically when an exception -is raised and attached to it as the "__traceback__" attribute. You can -create an exception and set your own traceback in one step using the -"with_traceback()" exception method (which returns the same exception -instance, with its traceback set to its argument), like so: - - raise Exception("foo occurred").with_traceback(tracebackobj) - -The "from" clause is used for exception chaining: if given, the second -*expression* must be another exception class or instance. If the -second expression is an exception instance, it will be attached to the -raised exception as the "__cause__" attribute (which is writable). If -the expression is an exception class, the class will be instantiated -and the resulting exception instance will be attached to the raised -exception as the "__cause__" attribute. If the raised exception is not -handled, both exceptions will be printed: - - >>> try: - ... print(1 / 0) - ... except Exception as exc: - ... raise RuntimeError("Something bad happened") from exc - ... - Traceback (most recent call last): - File "<stdin>", line 2, in <module> - print(1 / 0) - ~~^~~ - ZeroDivisionError: division by zero - - The above exception was the direct cause of the following exception: - - Traceback (most recent call last): - File "<stdin>", line 4, in <module> - raise RuntimeError("Something bad happened") from exc - RuntimeError: Something bad happened - -A similar mechanism works implicitly if a new exception is raised when -an exception is already being handled. An exception may be handled -when an "except" or "finally" clause, or a "with" statement, is used. -The previous exception is then attached as the new exception’s -"__context__" attribute: - - >>> try: - ... print(1 / 0) - ... except: - ... raise RuntimeError("Something bad happened") - ... - Traceback (most recent call last): - File "<stdin>", line 2, in <module> - print(1 / 0) - ~~^~~ - ZeroDivisionError: division by zero - - During handling of the above exception, another exception occurred: - - Traceback (most recent call last): - File "<stdin>", line 4, in <module> - raise RuntimeError("Something bad happened") - RuntimeError: Something bad happened - -Exception chaining can be explicitly suppressed by specifying "None" -in the "from" clause: - - >>> try: - ... print(1 / 0) - ... except: - ... raise RuntimeError("Something bad happened") from None - ... - Traceback (most recent call last): - File "<stdin>", line 4, in <module> - RuntimeError: Something bad happened - -Additional information on exceptions can be found in section -Exceptions, and information about handling exceptions is in section -The try statement. - -Changed in version 3.3: "None" is now permitted as "Y" in "raise X -from Y".Added the "__suppress_context__" attribute to suppress -automatic display of the exception context. - -Changed in version 3.11: If the traceback of the active exception is -modified in an "except" clause, a subsequent "raise" statement re- -raises the exception with the modified traceback. Previously, the -exception was re-raised with the traceback it had when it was caught. -''', - 'return': r'''The "return" statement -********************** - - return_stmt: "return" [expression_list] - -"return" may only occur syntactically nested in a function definition, -not within a nested class definition. - -If an expression list is present, it is evaluated, else "None" is -substituted. - -"return" leaves the current function call with the expression list (or -"None") as return value. - -When "return" passes control out of a "try" statement with a "finally" -clause, that "finally" clause is executed before really leaving the -function. - -In a generator function, the "return" statement indicates that the -generator is done and will cause "StopIteration" to be raised. The -returned value (if any) is used as an argument to construct -"StopIteration" and becomes the "StopIteration.value" attribute. - -In an asynchronous generator function, an empty "return" statement -indicates that the asynchronous generator is done and will cause -"StopAsyncIteration" to be raised. A non-empty "return" statement is -a syntax error in an asynchronous generator function. -''', - 'sequence-types': r'''Emulating container types -************************* - -The following methods can be defined to implement container objects. -None of them are provided by the "object" class itself. Containers -usually are *sequences* (such as "lists" or "tuples") or *mappings* -(like *dictionaries*), but can represent other containers as well. -The first set of methods is used either to emulate a sequence or to -emulate a mapping; the difference is that for a sequence, the -allowable keys should be the integers *k* for which "0 <= k < N" where -*N* is the length of the sequence, or "slice" objects, which define a -range of items. It is also recommended that mappings provide the -methods "keys()", "values()", "items()", "get()", "clear()", -"setdefault()", "pop()", "popitem()", "copy()", and "update()" -behaving similar to those for Python’s standard "dictionary" objects. -The "collections.abc" module provides a "MutableMapping" *abstract -base class* to help create those methods from a base set of -"__getitem__()", "__setitem__()", "__delitem__()", and "keys()". - -Mutable sequences should provide methods "append()", "clear()", -"count()", "extend()", "index()", "insert()", "pop()", "remove()", and -"reverse()", like Python standard "list" objects. Finally, sequence -types should implement addition (meaning concatenation) and -multiplication (meaning repetition) by defining the methods -"__add__()", "__radd__()", "__iadd__()", "__mul__()", "__rmul__()" and -"__imul__()" described below; they should not define other numerical -operators. - -It is recommended that both mappings and sequences implement the -"__contains__()" method to allow efficient use of the "in" operator; -for mappings, "in" should search the mapping’s keys; for sequences, it -should search through the values. It is further recommended that both -mappings and sequences implement the "__iter__()" method to allow -efficient iteration through the container; for mappings, "__iter__()" -should iterate through the object’s keys; for sequences, it should -iterate through the values. - -object.__len__(self) - - Called to implement the built-in function "len()". Should return - the length of the object, an integer ">=" 0. Also, an object that - doesn’t define a "__bool__()" method and whose "__len__()" method - returns zero is considered to be false in a Boolean context. - - **CPython implementation detail:** In CPython, the length is - required to be at most "sys.maxsize". If the length is larger than - "sys.maxsize" some features (such as "len()") may raise - "OverflowError". To prevent raising "OverflowError" by truth value - testing, an object must define a "__bool__()" method. - -object.__length_hint__(self) - - Called to implement "operator.length_hint()". Should return an - estimated length for the object (which may be greater or less than - the actual length). The length must be an integer ">=" 0. The - return value may also be "NotImplemented", which is treated the - same as if the "__length_hint__" method didn’t exist at all. This - method is purely an optimization and is never required for - correctness. - - Added in version 3.4. - -object.__getitem__(self, subscript) - - Called to implement *subscription*, that is, "self[subscript]". See - Subscriptions and slicings for details on the syntax. - - There are two types of built-in objects that support subscription - via "__getitem__()": - - * **sequences**, where *subscript* (also called *index*) should be - an integer or a "slice" object. See the sequence documentation - for the expected behavior, including handling "slice" objects and - negative indices. - - * **mappings**, where *subscript* is also called the *key*. See - mapping documentation for the expected behavior. - - If *subscript* is of an inappropriate type, "__getitem__()" should - raise "TypeError". If *subscript* has an inappropriate value, - "__getitem__()" should raise an "LookupError" or one of its - subclasses ("IndexError" for sequences; "KeyError" for mappings). - - Note: - - Slicing is handled by "__getitem__()", "__setitem__()", and - "__delitem__()". A call like - - a[1:2] = b - - is translated to - - a[slice(1, 2, None)] = b - - and so forth. Missing slice items are always filled in with - "None". - - Note: - - The sequence iteration protocol (used, for example, in "for" - loops), expects that an "IndexError" will be raised for illegal - indexes to allow proper detection of the end of a sequence. - - Note: - - When subscripting a *class*, the special class method - "__class_getitem__()" may be called instead of "__getitem__()". - See __class_getitem__ versus __getitem__ for more details. - -object.__setitem__(self, key, value) - - Called to implement assignment to "self[key]". Same note as for - "__getitem__()". This should only be implemented for mappings if - the objects support changes to the values for keys, or if new keys - can be added, or for sequences if elements can be replaced. The - same exceptions should be raised for improper *key* values as for - the "__getitem__()" method. - -object.__delitem__(self, key) - - Called to implement deletion of "self[key]". Same note as for - "__getitem__()". This should only be implemented for mappings if - the objects support removal of keys, or for sequences if elements - can be removed from the sequence. The same exceptions should be - raised for improper *key* values as for the "__getitem__()" method. - -object.__missing__(self, key) - - Called by "dict"."__getitem__()" to implement "self[key]" for dict - subclasses when key is not in the dictionary. - -object.__iter__(self) - - This method is called when an *iterator* is required for a - container. This method should return a new iterator object that can - iterate over all the objects in the container. For mappings, it - should iterate over the keys of the container. - -object.__reversed__(self) - - Called (if present) by the "reversed()" built-in to implement - reverse iteration. It should return a new iterator object that - iterates over all the objects in the container in reverse order. - - If the "__reversed__()" method is not provided, the "reversed()" - built-in will fall back to using the sequence protocol ("__len__()" - and "__getitem__()"). Objects that support the sequence protocol - should only provide "__reversed__()" if they can provide an - implementation that is more efficient than the one provided by - "reversed()". - -The membership test operators ("in" and "not in") are normally -implemented as an iteration through a container. However, container -objects can supply the following special method with a more efficient -implementation, which also does not require the object be iterable. - -object.__contains__(self, item) - - Called to implement membership test operators. Should return true - if *item* is in *self*, false otherwise. For mapping objects, this - should consider the keys of the mapping rather than the values or - the key-item pairs. - - For objects that don’t define "__contains__()", the membership test - first tries iteration via "__iter__()", then the old sequence - iteration protocol via "__getitem__()", see this section in the - language reference. -''', - 'shifting': r'''Shifting operations -******************* - -The shifting operations have lower priority than the arithmetic -operations: - - shift_expr: a_expr | shift_expr ("<<" | ">>") a_expr - -These operators accept integers as arguments. They shift the first -argument to the left or right by the number of bits given by the -second argument. - -The left shift operation can be customized using the special -"__lshift__()" and "__rlshift__()" methods. The right shift operation -can be customized using the special "__rshift__()" and "__rrshift__()" -methods. - -A right shift by *n* bits is defined as floor division by "pow(2,n)". -A left shift by *n* bits is defined as multiplication with "pow(2,n)". -''', - 'slicings': r'''Slicings -******** - -A more advanced form of subscription, *slicing*, is commonly used to -extract a portion of a sequence. In this form, the subscript is a -*slice*: up to three expressions separated by colons. Any of the -expressions may be omitted, but a slice must contain at least one -colon: - - >>> number_names = ['zero', 'one', 'two', 'three', 'four', 'five'] - >>> number_names[1:3] - ['one', 'two'] - >>> number_names[1:] - ['one', 'two', 'three', 'four', 'five'] - >>> number_names[:3] - ['zero', 'one', 'two'] - >>> number_names[:] - ['zero', 'one', 'two', 'three', 'four', 'five'] - >>> number_names[::2] - ['zero', 'two', 'four'] - >>> number_names[:-3] - ['zero', 'one', 'two'] - >>> del number_names[4:] - >>> number_names - ['zero', 'one', 'two', 'three'] - -When a slice is evaluated, the interpreter constructs a "slice" object -whose "start", "stop" and "step" attributes, respectively, are the -results of the expressions between the colons. Any missing expression -evaluates to "None". This "slice" object is then passed to the -"__getitem__()" or "__class_getitem__()" *special method*, as above. - - # continuing with the SubscriptionDemo instance defined above: - >>> demo[2:3] - subscripted with: slice(2, 3, None) - >>> demo[::'spam'] - subscripted with: slice(None, None, 'spam') -''', - 'specialattrs': r'''Special Attributes -****************** - -The implementation adds a few special read-only attributes to several -object types, where they are relevant. Some of these are not reported -by the "dir()" built-in function. - -definition.__name__ - - The name of the class, function, method, descriptor, or generator - instance. - -definition.__qualname__ - - The *qualified name* of the class, function, method, descriptor, or - generator instance. - - Added in version 3.3. - -definition.__module__ - - The name of the module in which a class or function was defined. - -definition.__doc__ - - The documentation string of a class or function, or "None" if - undefined. - -definition.__type_params__ - - The type parameters of generic classes, functions, and type - aliases. For classes and functions that are not generic, this will - be an empty tuple. - - Added in version 3.12. -''', - 'specialnames': r'''Special method names -******************** - -A class can implement certain operations that are invoked by special -syntax (such as arithmetic operations or subscripting and slicing) by -defining methods with special names. This is Python’s approach to -*operator overloading*, allowing classes to define their own behavior -with respect to language operators. For instance, if a class defines -a method named "__getitem__()", and "x" is an instance of this class, -then "x[i]" is roughly equivalent to "type(x).__getitem__(x, i)". -Except where mentioned, attempts to execute an operation raise an -exception when no appropriate method is defined (typically -"AttributeError" or "TypeError"). - -Setting a special method to "None" indicates that the corresponding -operation is not available. For example, if a class sets "__iter__()" -to "None", the class is not iterable, so calling "iter()" on its -instances will raise a "TypeError" (without falling back to -"__getitem__()"). [2] - -When implementing a class that emulates any built-in type, it is -important that the emulation only be implemented to the degree that it -makes sense for the object being modelled. For example, some -sequences may work well with retrieval of individual elements, but -extracting a slice may not make sense. (One example of this is the -NodeList interface in the W3C’s Document Object Model.) - - -Basic customization -=================== - -object.__new__(cls[, ...]) - - Called to create a new instance of class *cls*. "__new__()" is a - static method (special-cased so you need not declare it as such) - that takes the class of which an instance was requested as its - first argument. The remaining arguments are those passed to the - object constructor expression (the call to the class). The return - value of "__new__()" should be the new object instance (usually an - instance of *cls*). - - Typical implementations create a new instance of the class by - invoking the superclass’s "__new__()" method using - "super().__new__(cls[, ...])" with appropriate arguments and then - modifying the newly created instance as necessary before returning - it. - - If "__new__()" is invoked during object construction and it returns - an instance of *cls*, then the new instance’s "__init__()" method - will be invoked like "__init__(self[, ...])", where *self* is the - new instance and the remaining arguments are the same as were - passed to the object constructor. - - If "__new__()" does not return an instance of *cls*, then the new - instance’s "__init__()" method will not be invoked. - - "__new__()" is intended mainly to allow subclasses of immutable - types (like int, str, or tuple) to customize instance creation. It - is also commonly overridden in custom metaclasses in order to - customize class creation. - -object.__init__(self[, ...]) - - Called after the instance has been created (by "__new__()"), but - before it is returned to the caller. The arguments are those - passed to the class constructor expression. If a base class has an - "__init__()" method, the derived class’s "__init__()" method, if - any, must explicitly call it to ensure proper initialization of the - base class part of the instance; for example: - "super().__init__([args...])". - - Because "__new__()" and "__init__()" work together in constructing - objects ("__new__()" to create it, and "__init__()" to customize - it), no non-"None" value may be returned by "__init__()"; doing so - will cause a "TypeError" to be raised at runtime. - -object.__del__(self) - - Called when the instance is about to be destroyed. This is also - called a finalizer or (improperly) a destructor. If a base class - has a "__del__()" method, the derived class’s "__del__()" method, - if any, must explicitly call it to ensure proper deletion of the - base class part of the instance. - - It is possible (though not recommended!) for the "__del__()" method - to postpone destruction of the instance by creating a new reference - to it. This is called object *resurrection*. It is - implementation-dependent whether "__del__()" is called a second - time when a resurrected object is about to be destroyed; the - current *CPython* implementation only calls it once. - - It is not guaranteed that "__del__()" methods are called for - objects that still exist when the interpreter exits. - "weakref.finalize" provides a straightforward way to register a - cleanup function to be called when an object is garbage collected. - - Note: - - "del x" doesn’t directly call "x.__del__()" — the former - decrements the reference count for "x" by one, and the latter is - only called when "x"’s reference count reaches zero. - - **CPython implementation detail:** It is possible for a reference - cycle to prevent the reference count of an object from going to - zero. In this case, the cycle will be later detected and deleted - by the *cyclic garbage collector*. A common cause of reference - cycles is when an exception has been caught in a local variable. - The frame’s locals then reference the exception, which references - its own traceback, which references the locals of all frames caught - in the traceback. - - See also: Documentation for the "gc" module. - - Warning: - - Due to the precarious circumstances under which "__del__()" - methods are invoked, exceptions that occur during their execution - are ignored, and a warning is printed to "sys.stderr" instead. - In particular: - - * "__del__()" can be invoked when arbitrary code is being - executed, including from any arbitrary thread. If "__del__()" - needs to take a lock or invoke any other blocking resource, it - may deadlock as the resource may already be taken by the code - that gets interrupted to execute "__del__()". - - * "__del__()" can be executed during interpreter shutdown. As a - consequence, the global variables it needs to access (including - other modules) may already have been deleted or set to "None". - Python guarantees that globals whose name begins with a single - underscore are deleted from their module before other globals - are deleted; if no other references to such globals exist, this - may help in assuring that imported modules are still available - at the time when the "__del__()" method is called. - -object.__repr__(self) - - Called by the "repr()" built-in function to compute the “official” - string representation of an object. If at all possible, this - should look like a valid Python expression that could be used to - recreate an object with the same value (given an appropriate - environment). If this is not possible, a string of the form - "<...some useful description...>" should be returned. The return - value must be a string object. If a class defines "__repr__()" but - not "__str__()", then "__repr__()" is also used when an “informal” - string representation of instances of that class is required. - - This is typically used for debugging, so it is important that the - representation is information-rich and unambiguous. A default - implementation is provided by the "object" class itself. - -object.__str__(self) - - Called by "str(object)", the default "__format__()" implementation, - and the built-in function "print()", to compute the “informal” or - nicely printable string representation of an object. The return - value must be a str object. - - This method differs from "object.__repr__()" in that there is no - expectation that "__str__()" return a valid Python expression: a - more convenient or concise representation can be used. - - The default implementation defined by the built-in type "object" - calls "object.__repr__()". - -object.__bytes__(self) - - Called by bytes to compute a byte-string representation of an - object. This should return a "bytes" object. The "object" class - itself does not provide this method. - -object.__format__(self, format_spec) - - Called by the "format()" built-in function, and by extension, - evaluation of formatted string literals and the "str.format()" - method, to produce a “formatted” string representation of an - object. The *format_spec* argument is a string that contains a - description of the formatting options desired. The interpretation - of the *format_spec* argument is up to the type implementing - "__format__()", however most classes will either delegate - formatting to one of the built-in types, or use a similar - formatting option syntax. - - See Format specification mini-language for a description of the - standard formatting syntax. - - The return value must be a string object. - - The default implementation by the "object" class should be given an - empty *format_spec* string. It delegates to "__str__()". - - Changed in version 3.4: The __format__ method of "object" itself - raises a "TypeError" if passed any non-empty string. - - Changed in version 3.7: "object.__format__(x, '')" is now - equivalent to "str(x)" rather than "format(str(x), '')". - -object.__lt__(self, other) -object.__le__(self, other) -object.__eq__(self, other) -object.__ne__(self, other) -object.__gt__(self, other) -object.__ge__(self, other) - - These are the so-called “rich comparison” methods. The - correspondence between operator symbols and method names is as - follows: "x<y" calls "x.__lt__(y)", "x<=y" calls "x.__le__(y)", - "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", "x>y" calls - "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)". - - A rich comparison method may return the singleton "NotImplemented" - if it does not implement the operation for a given pair of - arguments. By convention, "False" and "True" are returned for a - successful comparison. However, these methods can return any value, - so if the comparison operator is used in a Boolean context (e.g., - in the condition of an "if" statement), Python will call "bool()" - on the value to determine if the result is true or false. - - By default, "object" implements "__eq__()" by using "is", returning - "NotImplemented" in the case of a false comparison: "True if x is y - else NotImplemented". For "__ne__()", by default it delegates to - "__eq__()" and inverts the result unless it is "NotImplemented". - There are no other implied relationships among the comparison - operators or default implementations; for example, the truth of - "(x<y or x==y)" does not imply "x<=y". To automatically generate - ordering operations from a single root operation, see - "functools.total_ordering()". - - By default, the "object" class provides implementations consistent - with Value comparisons: equality compares according to object - identity, and order comparisons raise "TypeError". Each default - method may generate these results directly, but may also return - "NotImplemented". - - See the paragraph on "__hash__()" for some important notes on - creating *hashable* objects which support custom comparison - operations and are usable as dictionary keys. - - There are no swapped-argument versions of these methods (to be used - when the left argument does not support the operation but the right - argument does); rather, "__lt__()" and "__gt__()" are each other’s - reflection, "__le__()" and "__ge__()" are each other’s reflection, - and "__eq__()" and "__ne__()" are their own reflection. If the - operands are of different types, and the right operand’s type is a - direct or indirect subclass of the left operand’s type, the - reflected method of the right operand has priority, otherwise the - left operand’s method has priority. Virtual subclassing is not - considered. - - When no appropriate method returns any value other than - "NotImplemented", the "==" and "!=" operators will fall back to - "is" and "is not", respectively. - -object.__hash__(self) - - Called by built-in function "hash()" and for operations on members - of hashed collections including "set", "frozenset", and "dict". - The "__hash__()" method should return an integer. The only required - property is that objects which compare equal have the same hash - value; it is advised to mix together the hash values of the - components of the object that also play a part in comparison of - objects by packing them into a tuple and hashing the tuple. - Example: - - def __hash__(self): - return hash((self.name, self.nick, self.color)) - - Note: - - "hash()" truncates the value returned from an object’s custom - "__hash__()" method to the size of a "Py_ssize_t". This is - typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds. - If an object’s "__hash__()" must interoperate on builds of - different bit sizes, be sure to check the width on all supported - builds. An easy way to do this is with "python -c "import sys; - print(sys.hash_info.width)"". - - If a class does not define an "__eq__()" method it should not - define a "__hash__()" operation either; if it defines "__eq__()" - but not "__hash__()", its instances will not be usable as items in - hashable collections. If a class defines mutable objects and - implements an "__eq__()" method, it should not implement - "__hash__()", since the implementation of *hashable* collections - requires that a key’s hash value is immutable (if the object’s hash - value changes, it will be in the wrong hash bucket). - - User-defined classes have "__eq__()" and "__hash__()" methods by - default (inherited from the "object" class); with them, all objects - compare unequal (except with themselves) and "x.__hash__()" returns - an appropriate value such that "x == y" implies both that "x is y" - and "hash(x) == hash(y)". - - A class that overrides "__eq__()" and does not define "__hash__()" - will have its "__hash__()" implicitly set to "None". When the - "__hash__()" method of a class is "None", instances of the class - will raise an appropriate "TypeError" when a program attempts to - retrieve their hash value, and will also be correctly identified as - unhashable when checking "isinstance(obj, - collections.abc.Hashable)". - - If a class that overrides "__eq__()" needs to retain the - implementation of "__hash__()" from a parent class, the interpreter - must be told this explicitly by setting "__hash__ = - <ParentClass>.__hash__". - - If a class that does not override "__eq__()" wishes to suppress - hash support, it should include "__hash__ = None" in the class - definition. A class which defines its own "__hash__()" that - explicitly raises a "TypeError" would be incorrectly identified as - hashable by an "isinstance(obj, collections.abc.Hashable)" call. - - Note: - - By default, the "__hash__()" values of str and bytes objects are - “salted” with an unpredictable random value. Although they - remain constant within an individual Python process, they are not - predictable between repeated invocations of Python.This is - intended to provide protection against a denial-of-service caused - by carefully chosen inputs that exploit the worst case - performance of a dict insertion, *O*(*n*^2) complexity. See - https://ocert.org/advisories/ocert-2011-003.html for - details.Changing hash values affects the iteration order of sets. - Python has never made guarantees about this ordering (and it - typically varies between 32-bit and 64-bit builds).See also - "PYTHONHASHSEED". - - Changed in version 3.3: Hash randomization is enabled by default. - -object.__bool__(self) - - Called to implement truth value testing and the built-in operation - "bool()"; should return "False" or "True". When this method is not - defined, "__len__()" is called, if it is defined, and the object is - considered true if its result is nonzero. If a class defines - neither "__len__()" nor "__bool__()" (which is true of the "object" - class itself), all its instances are considered true. - - -Customizing attribute access -============================ - -The following methods can be defined to customize the meaning of -attribute access (use of, assignment to, or deletion of "x.name") for -class instances. - -object.__getattr__(self, name) - - Called when the default attribute access fails with an - "AttributeError" (either "__getattribute__()" raises an - "AttributeError" because *name* is not an instance attribute or an - attribute in the class tree for "self"; or "__get__()" of a *name* - property raises "AttributeError"). This method should either - return the (computed) attribute value or raise an "AttributeError" - exception. The "object" class itself does not provide this method. - - Note that if the attribute is found through the normal mechanism, - "__getattr__()" is not called. (This is an intentional asymmetry - between "__getattr__()" and "__setattr__()".) This is done both for - efficiency reasons and because otherwise "__getattr__()" would have - no way to access other attributes of the instance. Note that at - least for instance variables, you can take total control by not - inserting any values in the instance attribute dictionary (but - instead inserting them in another object). See the - "__getattribute__()" method below for a way to actually get total - control over attribute access. - -object.__getattribute__(self, name) - - Called unconditionally to implement attribute accesses for - instances of the class. If the class also defines "__getattr__()", - the latter will not be called unless "__getattribute__()" either - calls it explicitly or raises an "AttributeError". This method - should return the (computed) attribute value or raise an - "AttributeError" exception. In order to avoid infinite recursion in - this method, its implementation should always call the base class - method with the same name to access any attributes it needs, for - example, "object.__getattribute__(self, name)". - - Note: - - This method may still be bypassed when looking up special methods - as the result of implicit invocation via language syntax or - built-in functions. See Special method lookup. - - For certain sensitive attribute accesses, raises an auditing event - "object.__getattr__" with arguments "obj" and "name". - -object.__setattr__(self, name, value) - - Called when an attribute assignment is attempted. This is called - instead of the normal mechanism (i.e. store the value in the - instance dictionary). *name* is the attribute name, *value* is the - value to be assigned to it. - - If "__setattr__()" wants to assign to an instance attribute, it - should call the base class method with the same name, for example, - "object.__setattr__(self, name, value)". - - For certain sensitive attribute assignments, raises an auditing - event "object.__setattr__" with arguments "obj", "name", "value". - -object.__delattr__(self, name) - - Like "__setattr__()" but for attribute deletion instead of - assignment. This should only be implemented if "del obj.name" is - meaningful for the object. - - For certain sensitive attribute deletions, raises an auditing event - "object.__delattr__" with arguments "obj" and "name". - -object.__dir__(self) - - Called when "dir()" is called on the object. An iterable must be - returned. "dir()" converts the returned iterable to a list and - sorts it. - - -Customizing module attribute access ------------------------------------ - -module.__getattr__() -module.__dir__() - -Special names "__getattr__" and "__dir__" can be also used to -customize access to module attributes. The "__getattr__" function at -the module level should accept one argument which is the name of an -attribute and return the computed value or raise an "AttributeError". -If an attribute is not found on a module object through the normal -lookup, i.e. "object.__getattribute__()", then "__getattr__" is -searched in the module "__dict__" before raising an "AttributeError". -If found, it is called with the attribute name and the result is -returned. - -The "__dir__" function should accept no arguments, and return an -iterable of strings that represents the names accessible on module. If -present, this function overrides the standard "dir()" search on a -module. - -module.__class__ - -For a more fine grained customization of the module behavior (setting -attributes, properties, etc.), one can set the "__class__" attribute -of a module object to a subclass of "types.ModuleType". For example: - - import sys - from types import ModuleType - - class VerboseModule(ModuleType): - def __repr__(self): - return f'Verbose {self.__name__}' - - def __setattr__(self, attr, value): - print(f'Setting {attr}...') - super().__setattr__(attr, value) - - sys.modules[__name__].__class__ = VerboseModule - -Note: - - Defining module "__getattr__" and setting module "__class__" only - affect lookups made using the attribute access syntax – directly - accessing the module globals (whether by code within the module, or - via a reference to the module’s globals dictionary) is unaffected. - -Changed in version 3.5: "__class__" module attribute is now writable. - -Added in version 3.7: "__getattr__" and "__dir__" module attributes. - -See also: - - **PEP 562** - Module __getattr__ and __dir__ - Describes the "__getattr__" and "__dir__" functions on modules. - - -Implementing Descriptors ------------------------- - -The following methods only apply when an instance of the class -containing the method (a so-called *descriptor* class) appears in an -*owner* class (the descriptor must be in either the owner’s class -dictionary or in the class dictionary for one of its parents). In the -examples below, “the attribute” refers to the attribute whose name is -the key of the property in the owner class’ "__dict__". The "object" -class itself does not implement any of these protocols. - -object.__get__(self, instance, owner=None) - - Called to get the attribute of the owner class (class attribute - access) or of an instance of that class (instance attribute - access). The optional *owner* argument is the owner class, while - *instance* is the instance that the attribute was accessed through, - or "None" when the attribute is accessed through the *owner*. - - This method should return the computed attribute value or raise an - "AttributeError" exception. - - **PEP 252** specifies that "__get__()" is callable with one or two - arguments. Python’s own built-in descriptors support this - specification; however, it is likely that some third-party tools - have descriptors that require both arguments. Python’s own - "__getattribute__()" implementation always passes in both arguments - whether they are required or not. - -object.__set__(self, instance, value) - - Called to set the attribute on an instance *instance* of the owner - class to a new value, *value*. - - Note, adding "__set__()" or "__delete__()" changes the kind of - descriptor to a “data descriptor”. See Invoking Descriptors for - more details. - -object.__delete__(self, instance) - - Called to delete the attribute on an instance *instance* of the - owner class. - -Instances of descriptors may also have the "__objclass__" attribute -present: - -object.__objclass__ - - The attribute "__objclass__" is interpreted by the "inspect" module - as specifying the class where this object was defined (setting this - appropriately can assist in runtime introspection of dynamic class - attributes). For callables, it may indicate that an instance of the - given type (or a subclass) is expected or required as the first - positional argument (for example, CPython sets this attribute for - unbound methods that are implemented in C). - - -Invoking Descriptors --------------------- - -In general, a descriptor is an object attribute with “binding -behavior”, one whose attribute access has been overridden by methods -in the descriptor protocol: "__get__()", "__set__()", and -"__delete__()". If any of those methods are defined for an object, it -is said to be a descriptor. - -The default behavior for attribute access is to get, set, or delete -the attribute from an object’s dictionary. For instance, "a.x" has a -lookup chain starting with "a.__dict__['x']", then -"type(a).__dict__['x']", and continuing through the base classes of -"type(a)" excluding metaclasses. - -However, if the looked-up value is an object defining one of the -descriptor methods, then Python may override the default behavior and -invoke the descriptor method instead. Where this occurs in the -precedence chain depends on which descriptor methods were defined and -how they were called. - -The starting point for descriptor invocation is a binding, "a.x". How -the arguments are assembled depends on "a": - -Direct Call - The simplest and least common call is when user code directly - invokes a descriptor method: "x.__get__(a)". - -Instance Binding - If binding to an object instance, "a.x" is transformed into the - call: "type(a).__dict__['x'].__get__(a, type(a))". - -Class Binding - If binding to a class, "A.x" is transformed into the call: - "A.__dict__['x'].__get__(None, A)". - -Super Binding - A dotted lookup such as "super(A, a).x" searches - "a.__class__.__mro__" for a base class "B" following "A" and then - returns "B.__dict__['x'].__get__(a, A)". If not a descriptor, "x" - is returned unchanged. - -For instance bindings, the precedence of descriptor invocation depends -on which descriptor methods are defined. A descriptor can define any -combination of "__get__()", "__set__()" and "__delete__()". If it -does not define "__get__()", then accessing the attribute will return -the descriptor object itself unless there is a value in the object’s -instance dictionary. If the descriptor defines "__set__()" and/or -"__delete__()", it is a data descriptor; if it defines neither, it is -a non-data descriptor. Normally, data descriptors define both -"__get__()" and "__set__()", while non-data descriptors have just the -"__get__()" method. Data descriptors with "__get__()" and "__set__()" -(and/or "__delete__()") defined always override a redefinition in an -instance dictionary. In contrast, non-data descriptors can be -overridden by instances. - -Python methods (including those decorated with "@staticmethod" and -"@classmethod") are implemented as non-data descriptors. Accordingly, -instances can redefine and override methods. This allows individual -instances to acquire behaviors that differ from other instances of the -same class. - -The "property()" function is implemented as a data descriptor. -Accordingly, instances cannot override the behavior of a property. - - -__slots__ ---------- - -*__slots__* allow us to explicitly declare data members (like -properties) and deny the creation of "__dict__" and *__weakref__* -(unless explicitly declared in *__slots__* or available in a parent.) - -The space saved over using "__dict__" can be significant. Attribute -lookup speed can be significantly improved as well. - -object.__slots__ - - This class variable can be assigned a string, iterable, or sequence - of strings with variable names used by instances. *__slots__* - reserves space for the declared variables and prevents the - automatic creation of "__dict__" and *__weakref__* for each - instance. - -Notes on using *__slots__*: - -* When inheriting from a class without *__slots__*, the "__dict__" and - *__weakref__* attribute of the instances will always be accessible. - -* Without a "__dict__" variable, instances cannot be assigned new - variables not listed in the *__slots__* definition. Attempts to - assign to an unlisted variable name raises "AttributeError". If - dynamic assignment of new variables is desired, then add - "'__dict__'" to the sequence of strings in the *__slots__* - declaration. - -* Without a *__weakref__* variable for each instance, classes defining - *__slots__* do not support "weak references" to its instances. If - weak reference support is needed, then add "'__weakref__'" to the - sequence of strings in the *__slots__* declaration. - -* *__slots__* are implemented at the class level by creating - descriptors for each variable name. As a result, class attributes - cannot be used to set default values for instance variables defined - by *__slots__*; otherwise, the class attribute would overwrite the - descriptor assignment. - -* The action of a *__slots__* declaration is not limited to the class - where it is defined. *__slots__* declared in parents are available - in child classes. However, instances of a child subclass will get a - "__dict__" and *__weakref__* unless the subclass also defines - *__slots__* (which should only contain names of any *additional* - slots). - -* If a class defines a slot also defined in a base class, the instance - variable defined by the base class slot is inaccessible (except by - retrieving its descriptor directly from the base class). This - renders the meaning of the program undefined. In the future, a - check may be added to prevent this. - -* "TypeError" will be raised if nonempty *__slots__* are defined for a - class derived from a ""variable-length" built-in type" such as - "int", "bytes", and "tuple". - -* Any non-string *iterable* may be assigned to *__slots__*. - -* If a "dictionary" is used to assign *__slots__*, the dictionary keys - will be used as the slot names. The values of the dictionary can be - used to provide per-attribute docstrings that will be recognised by - "inspect.getdoc()" and displayed in the output of "help()". - -* "__class__" assignment works only if both classes have the same - *__slots__*. - -* Multiple inheritance with multiple slotted parent classes can be - used, but only one parent is allowed to have attributes created by - slots (the other bases must have empty slot layouts) - violations - raise "TypeError". - -* If an *iterator* is used for *__slots__* then a *descriptor* is - created for each of the iterator’s values. However, the *__slots__* - attribute will be an empty iterator. - - -Customizing class creation -========================== - -Whenever a class inherits from another class, "__init_subclass__()" is -called on the parent class. This way, it is possible to write classes -which change the behavior of subclasses. This is closely related to -class decorators, but where class decorators only affect the specific -class they’re applied to, "__init_subclass__" solely applies to future -subclasses of the class defining the method. - -classmethod object.__init_subclass__(cls) - - This method is called whenever the containing class is subclassed. - *cls* is then the new subclass. If defined as a normal instance - method, this method is implicitly converted to a class method. - - Keyword arguments which are given to a new class are passed to the - parent class’s "__init_subclass__". For compatibility with other - classes using "__init_subclass__", one should take out the needed - keyword arguments and pass the others over to the base class, as - in: - - class Philosopher: - def __init_subclass__(cls, /, default_name, **kwargs): - super().__init_subclass__(**kwargs) - cls.default_name = default_name - - class AustralianPhilosopher(Philosopher, default_name="Bruce"): - pass - - The default implementation "object.__init_subclass__" does nothing, - but raises an error if it is called with any arguments. - - Note: - - The metaclass hint "metaclass" is consumed by the rest of the - type machinery, and is never passed to "__init_subclass__" - implementations. The actual metaclass (rather than the explicit - hint) can be accessed as "type(cls)". - - Added in version 3.6. - -When a class is created, "type.__new__()" scans the class variables -and makes callbacks to those with a "__set_name__()" hook. - -object.__set_name__(self, owner, name) - - Automatically called at the time the owning class *owner* is - created. The object has been assigned to *name* in that class: - - class A: - x = C() # Automatically calls: x.__set_name__(A, 'x') - - If the class variable is assigned after the class is created, - "__set_name__()" will not be called automatically. If needed, - "__set_name__()" can be called directly: - - class A: - pass - - c = C() - A.x = c # The hook is not called - c.__set_name__(A, 'x') # Manually invoke the hook - - See Creating the class object for more details. - - Added in version 3.6. - - -Metaclasses ------------ - -By default, classes are constructed using "type()". The class body is -executed in a new namespace and the class name is bound locally to the -result of "type(name, bases, namespace)". - -The class creation process can be customized by passing the -"metaclass" keyword argument in the class definition line, or by -inheriting from an existing class that included such an argument. In -the following example, both "MyClass" and "MySubclass" are instances -of "Meta": - - class Meta(type): - pass - - class MyClass(metaclass=Meta): - pass - - class MySubclass(MyClass): - pass - -Any other keyword arguments that are specified in the class definition -are passed through to all metaclass operations described below. - -When a class definition is executed, the following steps occur: - -* MRO entries are resolved; - -* the appropriate metaclass is determined; - -* the class namespace is prepared; - -* the class body is executed; - -* the class object is created. - - -Resolving MRO entries ---------------------- - -object.__mro_entries__(self, bases) - - If a base that appears in a class definition is not an instance of - "type", then an "__mro_entries__()" method is searched on the base. - If an "__mro_entries__()" method is found, the base is substituted - with the result of a call to "__mro_entries__()" when creating the - class. The method is called with the original bases tuple passed to - the *bases* parameter, and must return a tuple of classes that will - be used instead of the base. The returned tuple may be empty: in - these cases, the original base is ignored. - -See also: - - "types.resolve_bases()" - Dynamically resolve bases that are not instances of "type". - - "types.get_original_bases()" - Retrieve a class’s “original bases” prior to modifications by - "__mro_entries__()". - - **PEP 560** - Core support for typing module and generic types. - - -Determining the appropriate metaclass -------------------------------------- - -The appropriate metaclass for a class definition is determined as -follows: - -* if no bases and no explicit metaclass are given, then "type()" is - used; - -* if an explicit metaclass is given and it is *not* an instance of - "type()", then it is used directly as the metaclass; - -* if an instance of "type()" is given as the explicit metaclass, or - bases are defined, then the most derived metaclass is used. - -The most derived metaclass is selected from the explicitly specified -metaclass (if any) and the metaclasses (i.e. "type(cls)") of all -specified base classes. The most derived metaclass is one which is a -subtype of *all* of these candidate metaclasses. If none of the -candidate metaclasses meets that criterion, then the class definition -will fail with "TypeError". - - -Preparing the class namespace ------------------------------ - -Once the appropriate metaclass has been identified, then the class -namespace is prepared. If the metaclass has a "__prepare__" attribute, -it is called as "namespace = metaclass.__prepare__(name, bases, -**kwds)" (where the additional keyword arguments, if any, come from -the class definition). The "__prepare__" method should be implemented -as a "classmethod". The namespace returned by "__prepare__" is passed -in to "__new__", but when the final class object is created the -namespace is copied into a new "dict". - -If the metaclass has no "__prepare__" attribute, then the class -namespace is initialised as an empty ordered mapping. - -See also: - - **PEP 3115** - Metaclasses in Python 3000 - Introduced the "__prepare__" namespace hook - - -Executing the class body ------------------------- - -The class body is executed (approximately) as "exec(body, globals(), -namespace)". The key difference from a normal call to "exec()" is that -lexical scoping allows the class body (including any methods) to -reference names from the current and outer scopes when the class -definition occurs inside a function. - -However, even when the class definition occurs inside the function, -methods defined inside the class still cannot see names defined at the -class scope. Class variables must be accessed through the first -parameter of instance or class methods, or through the implicit -lexically scoped "__class__" reference described in the next section. - - -Creating the class object -------------------------- - -Once the class namespace has been populated by executing the class -body, the class object is created by calling "metaclass(name, bases, -namespace, **kwds)" (the additional keywords passed here are the same -as those passed to "__prepare__"). - -This class object is the one that will be referenced by the zero- -argument form of "super()". "__class__" is an implicit closure -reference created by the compiler if any methods in a class body refer -to either "__class__" or "super". This allows the zero argument form -of "super()" to correctly identify the class being defined based on -lexical scoping, while the class or instance that was used to make the -current call is identified based on the first argument passed to the -method. - -**CPython implementation detail:** In CPython 3.6 and later, the -"__class__" cell is passed to the metaclass as a "__classcell__" entry -in the class namespace. If present, this must be propagated up to the -"type.__new__" call in order for the class to be initialised -correctly. Failing to do so will result in a "RuntimeError" in Python -3.8. - -When using the default metaclass "type", or any metaclass that -ultimately calls "type.__new__", the following additional -customization steps are invoked after creating the class object: - -1. The "type.__new__" method collects all of the attributes in the - class namespace that define a "__set_name__()" method; - -2. Those "__set_name__" methods are called with the class being - defined and the assigned name of that particular attribute; - -3. The "__init_subclass__()" hook is called on the immediate parent of - the new class in its method resolution order. - -After the class object is created, it is passed to the class -decorators included in the class definition (if any) and the resulting -object is bound in the local namespace as the defined class. - -When a new class is created by "type.__new__", the object provided as -the namespace parameter is copied to a new ordered mapping and the -original object is discarded. The new copy is wrapped in a read-only -proxy, which becomes the "__dict__" attribute of the class object. - -See also: - - **PEP 3135** - New super - Describes the implicit "__class__" closure reference - - -Uses for metaclasses --------------------- - -The potential uses for metaclasses are boundless. Some ideas that have -been explored include enum, logging, interface checking, automatic -delegation, automatic property creation, proxies, frameworks, and -automatic resource locking/synchronization. - - -Customizing instance and subclass checks -======================================== - -The following methods are used to override the default behavior of the -"isinstance()" and "issubclass()" built-in functions. - -In particular, the metaclass "abc.ABCMeta" implements these methods in -order to allow the addition of Abstract Base Classes (ABCs) as -“virtual base classes” to any class or type (including built-in -types), including other ABCs. - -type.__instancecheck__(self, instance) - - Return true if *instance* should be considered a (direct or - indirect) instance of *class*. If defined, called to implement - "isinstance(instance, class)". - -type.__subclasscheck__(self, subclass) - - Return true if *subclass* should be considered a (direct or - indirect) subclass of *class*. If defined, called to implement - "issubclass(subclass, class)". - -Note that these methods are looked up on the type (metaclass) of a -class. They cannot be defined as class methods in the actual class. -This is consistent with the lookup of special methods that are called -on instances, only in this case the instance is itself a class. - -See also: - - **PEP 3119** - Introducing Abstract Base Classes - Includes the specification for customizing "isinstance()" and - "issubclass()" behavior through "__instancecheck__()" and - "__subclasscheck__()", with motivation for this functionality in - the context of adding Abstract Base Classes (see the "abc" - module) to the language. - - -Emulating generic types -======================= - -When using *type annotations*, it is often useful to *parameterize* a -*generic type* using Python’s square-brackets notation. For example, -the annotation "list[int]" might be used to signify a "list" in which -all the elements are of type "int". - -See also: - - **PEP 484** - Type Hints - Introducing Python’s framework for type annotations - - Generic Alias Types - Documentation for objects representing parameterized generic - classes - - Generics, user-defined generics and "typing.Generic" - Documentation on how to implement generic classes that can be - parameterized at runtime and understood by static type-checkers. - -A class can *generally* only be parameterized if it defines the -special class method "__class_getitem__()". - -classmethod object.__class_getitem__(cls, key) - - Return an object representing the specialization of a generic class - by type arguments found in *key*. - - When defined on a class, "__class_getitem__()" is automatically a - class method. As such, there is no need for it to be decorated with - "@classmethod" when it is defined. - - -The purpose of *__class_getitem__* ----------------------------------- - -The purpose of "__class_getitem__()" is to allow runtime -parameterization of standard-library generic classes in order to more -easily apply *type hints* to these classes. - -To implement custom generic classes that can be parameterized at -runtime and understood by static type-checkers, users should either -inherit from a standard library class that already implements -"__class_getitem__()", or inherit from "typing.Generic", which has its -own implementation of "__class_getitem__()". - -Custom implementations of "__class_getitem__()" on classes defined -outside of the standard library may not be understood by third-party -type-checkers such as mypy. Using "__class_getitem__()" on any class -for purposes other than type hinting is discouraged. - - -*__class_getitem__* versus *__getitem__* ----------------------------------------- - -Usually, the subscription of an object using square brackets will call -the "__getitem__()" instance method defined on the object’s class. -However, if the object being subscribed is itself a class, the class -method "__class_getitem__()" may be called instead. -"__class_getitem__()" should return a GenericAlias object if it is -properly defined. - -Presented with the *expression* "obj[x]", the Python interpreter -follows something like the following process to decide whether -"__getitem__()" or "__class_getitem__()" should be called: - - from inspect import isclass - - def subscribe(obj, x): - """Return the result of the expression 'obj[x]'""" - - class_of_obj = type(obj) - - # If the class of obj defines __getitem__, - # call class_of_obj.__getitem__(obj, x) - if hasattr(class_of_obj, '__getitem__'): - return class_of_obj.__getitem__(obj, x) - - # Else, if obj is a class and defines __class_getitem__, - # call obj.__class_getitem__(x) - elif isclass(obj) and hasattr(obj, '__class_getitem__'): - return obj.__class_getitem__(x) - - # Else, raise an exception - else: - raise TypeError( - f"'{class_of_obj.__name__}' object is not subscriptable" - ) - -In Python, all classes are themselves instances of other classes. The -class of a class is known as that class’s *metaclass*, and most -classes have the "type" class as their metaclass. "type" does not -define "__getitem__()", meaning that expressions such as "list[int]", -"dict[str, float]" and "tuple[str, bytes]" all result in -"__class_getitem__()" being called: - - >>> # list has class "type" as its metaclass, like most classes: - >>> type(list) - <class 'type'> - >>> type(dict) == type(list) == type(tuple) == type(str) == type(bytes) - True - >>> # "list[int]" calls "list.__class_getitem__(int)" - >>> list[int] - list[int] - >>> # list.__class_getitem__ returns a GenericAlias object: - >>> type(list[int]) - <class 'types.GenericAlias'> - -However, if a class has a custom metaclass that defines -"__getitem__()", subscribing the class may result in different -behaviour. An example of this can be found in the "enum" module: - - >>> from enum import Enum - >>> class Menu(Enum): - ... """A breakfast menu""" - ... SPAM = 'spam' - ... BACON = 'bacon' - ... - >>> # Enum classes have a custom metaclass: - >>> type(Menu) - <class 'enum.EnumMeta'> - >>> # EnumMeta defines __getitem__, - >>> # so __class_getitem__ is not called, - >>> # and the result is not a GenericAlias object: - >>> Menu['SPAM'] - <Menu.SPAM: 'spam'> - >>> type(Menu['SPAM']) - <enum 'Menu'> - -See also: - - **PEP 560** - Core Support for typing module and generic types - Introducing "__class_getitem__()", and outlining when a - subscription results in "__class_getitem__()" being called - instead of "__getitem__()" - - -Emulating callable objects -========================== - -object.__call__(self[, args...]) - - Called when the instance is “called” as a function; if this method - is defined, "x(arg1, arg2, ...)" roughly translates to - "type(x).__call__(x, arg1, ...)". The "object" class itself does - not provide this method. - - -Emulating container types -========================= - -The following methods can be defined to implement container objects. -None of them are provided by the "object" class itself. Containers -usually are *sequences* (such as "lists" or "tuples") or *mappings* -(like *dictionaries*), but can represent other containers as well. -The first set of methods is used either to emulate a sequence or to -emulate a mapping; the difference is that for a sequence, the -allowable keys should be the integers *k* for which "0 <= k < N" where -*N* is the length of the sequence, or "slice" objects, which define a -range of items. It is also recommended that mappings provide the -methods "keys()", "values()", "items()", "get()", "clear()", -"setdefault()", "pop()", "popitem()", "copy()", and "update()" -behaving similar to those for Python’s standard "dictionary" objects. -The "collections.abc" module provides a "MutableMapping" *abstract -base class* to help create those methods from a base set of -"__getitem__()", "__setitem__()", "__delitem__()", and "keys()". - -Mutable sequences should provide methods "append()", "clear()", -"count()", "extend()", "index()", "insert()", "pop()", "remove()", and -"reverse()", like Python standard "list" objects. Finally, sequence -types should implement addition (meaning concatenation) and -multiplication (meaning repetition) by defining the methods -"__add__()", "__radd__()", "__iadd__()", "__mul__()", "__rmul__()" and -"__imul__()" described below; they should not define other numerical -operators. - -It is recommended that both mappings and sequences implement the -"__contains__()" method to allow efficient use of the "in" operator; -for mappings, "in" should search the mapping’s keys; for sequences, it -should search through the values. It is further recommended that both -mappings and sequences implement the "__iter__()" method to allow -efficient iteration through the container; for mappings, "__iter__()" -should iterate through the object’s keys; for sequences, it should -iterate through the values. - -object.__len__(self) - - Called to implement the built-in function "len()". Should return - the length of the object, an integer ">=" 0. Also, an object that - doesn’t define a "__bool__()" method and whose "__len__()" method - returns zero is considered to be false in a Boolean context. - - **CPython implementation detail:** In CPython, the length is - required to be at most "sys.maxsize". If the length is larger than - "sys.maxsize" some features (such as "len()") may raise - "OverflowError". To prevent raising "OverflowError" by truth value - testing, an object must define a "__bool__()" method. - -object.__length_hint__(self) - - Called to implement "operator.length_hint()". Should return an - estimated length for the object (which may be greater or less than - the actual length). The length must be an integer ">=" 0. The - return value may also be "NotImplemented", which is treated the - same as if the "__length_hint__" method didn’t exist at all. This - method is purely an optimization and is never required for - correctness. - - Added in version 3.4. - -object.__getitem__(self, subscript) - - Called to implement *subscription*, that is, "self[subscript]". See - Subscriptions and slicings for details on the syntax. - - There are two types of built-in objects that support subscription - via "__getitem__()": - - * **sequences**, where *subscript* (also called *index*) should be - an integer or a "slice" object. See the sequence documentation - for the expected behavior, including handling "slice" objects and - negative indices. - - * **mappings**, where *subscript* is also called the *key*. See - mapping documentation for the expected behavior. - - If *subscript* is of an inappropriate type, "__getitem__()" should - raise "TypeError". If *subscript* has an inappropriate value, - "__getitem__()" should raise an "LookupError" or one of its - subclasses ("IndexError" for sequences; "KeyError" for mappings). - - Note: - - Slicing is handled by "__getitem__()", "__setitem__()", and - "__delitem__()". A call like - - a[1:2] = b - - is translated to - - a[slice(1, 2, None)] = b - - and so forth. Missing slice items are always filled in with - "None". - - Note: - - The sequence iteration protocol (used, for example, in "for" - loops), expects that an "IndexError" will be raised for illegal - indexes to allow proper detection of the end of a sequence. - - Note: - - When subscripting a *class*, the special class method - "__class_getitem__()" may be called instead of "__getitem__()". - See __class_getitem__ versus __getitem__ for more details. - -object.__setitem__(self, key, value) - - Called to implement assignment to "self[key]". Same note as for - "__getitem__()". This should only be implemented for mappings if - the objects support changes to the values for keys, or if new keys - can be added, or for sequences if elements can be replaced. The - same exceptions should be raised for improper *key* values as for - the "__getitem__()" method. - -object.__delitem__(self, key) - - Called to implement deletion of "self[key]". Same note as for - "__getitem__()". This should only be implemented for mappings if - the objects support removal of keys, or for sequences if elements - can be removed from the sequence. The same exceptions should be - raised for improper *key* values as for the "__getitem__()" method. - -object.__missing__(self, key) - - Called by "dict"."__getitem__()" to implement "self[key]" for dict - subclasses when key is not in the dictionary. - -object.__iter__(self) - - This method is called when an *iterator* is required for a - container. This method should return a new iterator object that can - iterate over all the objects in the container. For mappings, it - should iterate over the keys of the container. - -object.__reversed__(self) - - Called (if present) by the "reversed()" built-in to implement - reverse iteration. It should return a new iterator object that - iterates over all the objects in the container in reverse order. - - If the "__reversed__()" method is not provided, the "reversed()" - built-in will fall back to using the sequence protocol ("__len__()" - and "__getitem__()"). Objects that support the sequence protocol - should only provide "__reversed__()" if they can provide an - implementation that is more efficient than the one provided by - "reversed()". - -The membership test operators ("in" and "not in") are normally -implemented as an iteration through a container. However, container -objects can supply the following special method with a more efficient -implementation, which also does not require the object be iterable. - -object.__contains__(self, item) - - Called to implement membership test operators. Should return true - if *item* is in *self*, false otherwise. For mapping objects, this - should consider the keys of the mapping rather than the values or - the key-item pairs. - - For objects that don’t define "__contains__()", the membership test - first tries iteration via "__iter__()", then the old sequence - iteration protocol via "__getitem__()", see this section in the - language reference. - - -Emulating numeric types -======================= - -The following methods can be defined to emulate numeric objects. -Methods corresponding to operations that are not supported by the -particular kind of number implemented (e.g., bitwise operations for -non-integral numbers) should be left undefined. - -object.__add__(self, other) -object.__sub__(self, other) -object.__mul__(self, other) -object.__matmul__(self, other) -object.__truediv__(self, other) -object.__floordiv__(self, other) -object.__mod__(self, other) -object.__divmod__(self, other) -object.__pow__(self, other[, modulo]) -object.__lshift__(self, other) -object.__rshift__(self, other) -object.__and__(self, other) -object.__xor__(self, other) -object.__or__(self, other) - - These methods are called to implement the binary arithmetic - operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", - "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to - evaluate the expression "x + y", where *x* is an instance of a - class that has an "__add__()" method, "type(x).__add__(x, y)" is - called. The "__divmod__()" method should be the equivalent to - using "__floordiv__()" and "__mod__()"; it should not be related to - "__truediv__()". Note that "__pow__()" should be defined to accept - an optional third argument if the three-argument version of the - built-in "pow()" function is to be supported. - - If one of those methods does not support the operation with the - supplied arguments, it should return "NotImplemented". - -object.__radd__(self, other) -object.__rsub__(self, other) -object.__rmul__(self, other) -object.__rmatmul__(self, other) -object.__rtruediv__(self, other) -object.__rfloordiv__(self, other) -object.__rmod__(self, other) -object.__rdivmod__(self, other) -object.__rpow__(self, other[, modulo]) -object.__rlshift__(self, other) -object.__rrshift__(self, other) -object.__rand__(self, other) -object.__rxor__(self, other) -object.__ror__(self, other) - - These methods are called to implement the binary arithmetic - operations ("+", "-", "*", "@", "/", "//", "%", "divmod()", - "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped) - operands. These functions are only called if the operands are of - different types, when the left operand does not support the - corresponding operation [3], or the right operand’s class is - derived from the left operand’s class. [4] For instance, to - evaluate the expression "x - y", where *y* is an instance of a - class that has an "__rsub__()" method, "type(y).__rsub__(y, x)" is - called if "type(x).__sub__(x, y)" returns "NotImplemented" or - "type(y)" is a subclass of "type(x)". [5] - - Note that "__rpow__()" should be defined to accept an optional - third argument if the three-argument version of the built-in - "pow()" function is to be supported. - - Changed in version 3.14: Three-argument "pow()" now try calling - "__rpow__()" if necessary. Previously it was only called in two- - argument "pow()" and the binary power operator. - - Note: - - If the right operand’s type is a subclass of the left operand’s - type and that subclass provides a different implementation of the - reflected method for the operation, this method will be called - before the left operand’s non-reflected method. This behavior - allows subclasses to override their ancestors’ operations. - -object.__iadd__(self, other) -object.__isub__(self, other) -object.__imul__(self, other) -object.__imatmul__(self, other) -object.__itruediv__(self, other) -object.__ifloordiv__(self, other) -object.__imod__(self, other) -object.__ipow__(self, other[, modulo]) -object.__ilshift__(self, other) -object.__irshift__(self, other) -object.__iand__(self, other) -object.__ixor__(self, other) -object.__ior__(self, other) - - These methods are called to implement the augmented arithmetic - assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=", - "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to - do the operation in-place (modifying *self*) and return the result - (which could be, but does not have to be, *self*). If a specific - method is not defined, or if that method returns "NotImplemented", - the augmented assignment falls back to the normal methods. For - instance, if *x* is an instance of a class with an "__iadd__()" - method, "x += y" is equivalent to "x = x.__iadd__(y)" . If - "__iadd__()" does not exist, or if "x.__iadd__(y)" returns - "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" are - considered, as with the evaluation of "x + y". In certain - situations, augmented assignment can result in unexpected errors - (see Why does a_tuple[i] += [‘item’] raise an exception when the - addition works?), but this behavior is in fact part of the data - model. - -object.__neg__(self) -object.__pos__(self) -object.__abs__(self) -object.__invert__(self) - - Called to implement the unary arithmetic operations ("-", "+", - "abs()" and "~"). - -object.__complex__(self) -object.__int__(self) -object.__float__(self) - - Called to implement the built-in functions "complex()", "int()" and - "float()". Should return a value of the appropriate type. - -object.__index__(self) - - Called to implement "operator.index()", and whenever Python needs - to losslessly convert the numeric object to an integer object (such - as in slicing, or in the built-in "bin()", "hex()" and "oct()" - functions). Presence of this method indicates that the numeric - object is an integer type. Must return an integer. - - If "__int__()", "__float__()" and "__complex__()" are not defined - then corresponding built-in functions "int()", "float()" and - "complex()" fall back to "__index__()". - -object.__round__(self[, ndigits]) -object.__trunc__(self) -object.__floor__(self) -object.__ceil__(self) - - Called to implement the built-in function "round()" and "math" - functions "trunc()", "floor()" and "ceil()". Unless *ndigits* is - passed to "__round__()" all these methods should return the value - of the object truncated to an "Integral" (typically an "int"). - - Changed in version 3.14: "int()" no longer delegates to the - "__trunc__()" method. - - -With Statement Context Managers -=============================== - -A *context manager* is an object that defines the runtime context to -be established when executing a "with" statement. The context manager -handles the entry into, and the exit from, the desired runtime context -for the execution of the block of code. Context managers are normally -invoked using the "with" statement (described in section The with -statement), but can also be used by directly invoking their methods. - -Typical uses of context managers include saving and restoring various -kinds of global state, locking and unlocking resources, closing opened -files, etc. - -For more information on context managers, see Context Manager Types. -The "object" class itself does not provide the context manager -methods. - -object.__enter__(self) - - Enter the runtime context related to this object. The "with" - statement will bind this method’s return value to the target(s) - specified in the "as" clause of the statement, if any. - -object.__exit__(self, exc_type, exc_value, traceback) - - Exit the runtime context related to this object. The parameters - describe the exception that caused the context to be exited. If the - context was exited without an exception, all three arguments will - be "None". - - If an exception is supplied, and the method wishes to suppress the - exception (i.e., prevent it from being propagated), it should - return a true value. Otherwise, the exception will be processed - normally upon exit from this method. - - Note that "__exit__()" methods should not reraise the passed-in - exception; this is the caller’s responsibility. - -See also: - - **PEP 343** - The “with” statement - The specification, background, and examples for the Python "with" - statement. - - -Customizing positional arguments in class pattern matching -========================================================== - -When using a class name in a pattern, positional arguments in the -pattern are not allowed by default, i.e. "case MyClass(x, y)" is -typically invalid without special support in "MyClass". To be able to -use that kind of pattern, the class needs to define a *__match_args__* -attribute. - -object.__match_args__ - - This class variable can be assigned a tuple of strings. When this - class is used in a class pattern with positional arguments, each - positional argument will be converted into a keyword argument, - using the corresponding value in *__match_args__* as the keyword. - The absence of this attribute is equivalent to setting it to "()". - -For example, if "MyClass.__match_args__" is "("left", "center", -"right")" that means that "case MyClass(x, y)" is equivalent to "case -MyClass(left=x, center=y)". Note that the number of arguments in the -pattern must be smaller than or equal to the number of elements in -*__match_args__*; if it is larger, the pattern match attempt will -raise a "TypeError". - -Added in version 3.10. - -See also: - - **PEP 634** - Structural Pattern Matching - The specification for the Python "match" statement. - - -Emulating buffer types -====================== - -The buffer protocol provides a way for Python objects to expose -efficient access to a low-level memory array. This protocol is -implemented by builtin types such as "bytes" and "memoryview", and -third-party libraries may define additional buffer types. - -While buffer types are usually implemented in C, it is also possible -to implement the protocol in Python. - -object.__buffer__(self, flags) - - Called when a buffer is requested from *self* (for example, by the - "memoryview" constructor). The *flags* argument is an integer - representing the kind of buffer requested, affecting for example - whether the returned buffer is read-only or writable. - "inspect.BufferFlags" provides a convenient way to interpret the - flags. The method must return a "memoryview" object. - - **Thread safety:** In *free-threaded* Python, implementations must - manage any internal export counter using atomic operations. The - method must be safe to call concurrently from multiple threads, and - the returned buffer’s underlying data must remain valid until the - corresponding "__release_buffer__()" call completes. See Thread - safety for memoryview objects for details. - -object.__release_buffer__(self, buffer) - - Called when a buffer is no longer needed. The *buffer* argument is - a "memoryview" object that was previously returned by - "__buffer__()". The method must release any resources associated - with the buffer. This method should return "None". - - **Thread safety:** In *free-threaded* Python, any export counter - decrement must use atomic operations. Resource cleanup must be - thread-safe, as the final release may race with concurrent releases - from other threads. - - Buffer objects that do not need to perform any cleanup are not - required to implement this method. - -Added in version 3.12. - -See also: - - **PEP 688** - Making the buffer protocol accessible in Python - Introduces the Python "__buffer__" and "__release_buffer__" - methods. - - "collections.abc.Buffer" - ABC for buffer types. - - -Annotations -=========== - -Functions, classes, and modules may contain *annotations*, which are a -way to associate information (usually *type hints*) with a symbol. - -object.__annotations__ - - This attribute contains the annotations for an object. It is lazily - evaluated, so accessing the attribute may execute arbitrary code - and raise exceptions. If evaluation is successful, the attribute is - set to a dictionary mapping from variable names to annotations. - - Changed in version 3.14: Annotations are now lazily evaluated. - -object.__annotate__(format) - - An *annotate function*. Returns a new dictionary object mapping - attribute/parameter names to their annotation values. - - Takes a format parameter specifying the format in which annotations - values should be provided. It must be a member of the - "annotationlib.Format" enum, or an integer with a value - corresponding to a member of the enum. - - If an annotate function doesn’t support the requested format, it - must raise "NotImplementedError". Annotate functions must always - support "VALUE" format; they must not raise "NotImplementedError()" - when called with this format. - - When called with "VALUE" format, an annotate function may raise - "NameError"; it must not raise "NameError" when called requesting - any other format. - - If an object does not have any annotations, "__annotate__" should - preferably be set to "None" (it can’t be deleted), rather than set - to a function that returns an empty dict. - - Added in version 3.14. - -See also: - - **PEP 649** — Deferred evaluation of annotation using descriptors - Introduces lazy evaluation of annotations and the "__annotate__" - function. - - -Special method lookup -===================== - -For custom classes, implicit invocations of special methods are only -guaranteed to work correctly if defined on an object’s type, not in -the object’s instance dictionary. That behaviour is the reason why -the following code raises an exception: - - >>> class C: - ... pass - ... - >>> c = C() - >>> c.__len__ = lambda: 5 - >>> len(c) - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - TypeError: object of type 'C' has no len() - -The rationale behind this behaviour lies with a number of special -methods such as "__hash__()" and "__repr__()" that are implemented by -all objects, including type objects. If the implicit lookup of these -methods used the conventional lookup process, they would fail when -invoked on the type object itself: - - >>> 1 .__hash__() == hash(1) - True - >>> int.__hash__() == hash(int) - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - TypeError: descriptor '__hash__' of 'int' object needs an argument - -Incorrectly attempting to invoke an unbound method of a class in this -way is sometimes referred to as ‘metaclass confusion’, and is avoided -by bypassing the instance when looking up special methods: - - >>> type(1).__hash__(1) == hash(1) - True - >>> type(int).__hash__(int) == hash(int) - True - -In addition to bypassing any instance attributes in the interest of -correctness, implicit special method lookup generally also bypasses -the "__getattribute__()" method even of the object’s metaclass: - - >>> class Meta(type): - ... def __getattribute__(*args): - ... print("Metaclass getattribute invoked") - ... return type.__getattribute__(*args) - ... - >>> class C(object, metaclass=Meta): - ... def __len__(self): - ... return 10 - ... def __getattribute__(*args): - ... print("Class getattribute invoked") - ... return object.__getattribute__(*args) - ... - >>> c = C() - >>> c.__len__() # Explicit lookup via instance - Class getattribute invoked - 10 - >>> type(c).__len__(c) # Explicit lookup via type - Metaclass getattribute invoked - 10 - >>> len(c) # Implicit lookup - 10 - -Bypassing the "__getattribute__()" machinery in this fashion provides -significant scope for speed optimisations within the interpreter, at -the cost of some flexibility in the handling of special methods (the -special method *must* be set on the class object itself in order to be -consistently invoked by the interpreter). -''', - 'string-methods': r'''String Methods -************** - -Strings implement all of the common sequence operations, along with -the additional methods described below. - -Strings also support two styles of string formatting, one providing a -large degree of flexibility and customization (see "str.format()", -Format string syntax and Custom string formatting) and the other based -on C "printf" style formatting that handles a narrower range of types -and is slightly harder to use correctly, but is often faster for the -cases it can handle (printf-style String Formatting). - -The Text Processing Services section of the standard library covers a -number of other modules that provide various text related utilities -(including regular expression support in the "re" module). - -str.capitalize() - - Return a copy of the string with its first character capitalized - and the rest lowercased. - - Changed in version 3.8: The first character is now put into - titlecase rather than uppercase. This means that characters like - digraphs will only have their first letter capitalized, instead of - the full character. - -str.casefold() - - Return a casefolded copy of the string. Casefolded strings may be - used for caseless matching. - - Casefolding is similar to lowercasing but more aggressive because - it is intended to remove all case distinctions in a string. For - example, the German lowercase letter "'ß'" is equivalent to ""ss"". - Since it is already lowercase, "lower()" would do nothing to "'ß'"; - "casefold()" converts it to ""ss"". For example: - - >>> 'straße'.lower() - 'straße' - >>> 'straße'.casefold() - 'strasse' - - The casefolding algorithm is described in section 3.13 ‘Default - Case Folding’ of the Unicode Standard. - - Added in version 3.3. - -str.center(width, fillchar=' ', /) - - Return centered in a string of length *width*. Padding is done - using the specified *fillchar* (default is an ASCII space). The - original string is returned if *width* is less than or equal to - "len(s)". For example: - - >>> 'Python'.center(10) - ' Python ' - >>> 'Python'.center(10, '-') - '--Python--' - >>> 'Python'.center(4) - 'Python' - -str.count(sub[, start[, end]]) - - Return the number of non-overlapping occurrences of substring *sub* - in the range [*start*, *end*]. Optional arguments *start* and - *end* are interpreted as in slice notation. - - If *sub* is empty, returns the number of empty strings between - characters which is the length of the string plus one. For example: - - >>> 'spam, spam, spam'.count('spam') - 3 - >>> 'spam, spam, spam'.count('spam', 5) - 2 - >>> 'spam, spam, spam'.count('spam', 5, 10) - 1 - >>> 'spam, spam, spam'.count('eggs') - 0 - >>> 'spam, spam, spam'.count('') - 17 - -str.encode(encoding='utf-8', errors='strict') - - Return the string encoded to "bytes". - - *encoding* defaults to "'utf-8'"; see Standard Encodings for - possible values. - - *errors* controls how encoding errors are handled. If "'strict'" - (the default), a "UnicodeError" exception is raised. Other possible - values are "'ignore'", "'replace'", "'xmlcharrefreplace'", - "'backslashreplace'" and any other name registered via - "codecs.register_error()". See Error Handlers for details. - - For performance reasons, the value of *errors* is not checked for - validity unless an encoding error actually occurs, Python - Development Mode is enabled or a debug build is used. For example: - - >>> encoded_str_to_bytes = 'Python'.encode() - >>> type(encoded_str_to_bytes) - <class 'bytes'> - >>> encoded_str_to_bytes - b'Python' - - Changed in version 3.1: Added support for keyword arguments. - - Changed in version 3.9: The value of the *errors* argument is now - checked in Python Development Mode and in debug mode. - -str.endswith(suffix[, start[, end]]) - - Return "True" if the string ends with the specified *suffix*, - otherwise return "False". *suffix* can also be a tuple of suffixes - to look for. With optional *start*, test beginning at that - position. With optional *end*, stop comparing at that position. - Using *start* and *end* is equivalent to - "str[start:end].endswith(suffix)". For example: - - >>> 'Python'.endswith('on') - True - >>> 'a tuple of suffixes'.endswith(('at', 'in')) - False - >>> 'a tuple of suffixes'.endswith(('at', 'es')) - True - >>> 'Python is amazing'.endswith('is', 0, 9) - True - - See also "startswith()" and "removesuffix()". - -str.expandtabs(tabsize=8) - - Return a copy of the string where all tab characters are replaced - by one or more spaces, depending on the current column and the - given tab size. Tab positions occur every *tabsize* characters - (default is 8, giving tab positions at columns 0, 8, 16 and so on). - To expand the string, the current column is set to zero and the - string is examined character by character. If the character is a - tab ("\t"), one or more space characters are inserted in the result - until the current column is equal to the next tab position. (The - tab character itself is not copied.) If the character is a newline - ("\n") or return ("\r"), it is copied and the current column is - reset to zero. Any other character is copied unchanged and the - current column is incremented by one regardless of how the - character is represented when printed. For example: - - >>> '01\t012\t0123\t01234'.expandtabs() - '01 012 0123 01234' - >>> '01\t012\t0123\t01234'.expandtabs(4) - '01 012 0123 01234' - >>> print('01\t012\n0123\t01234'.expandtabs(4)) - 01 012 - 0123 01234 - -str.find(sub[, start[, end]]) - - Return the lowest index in the string where substring *sub* is - found within the slice "s[start:end]". Optional arguments *start* - and *end* are interpreted as in slice notation. Return "-1" if - *sub* is not found. For example: - - >>> 'spam, spam, spam'.find('sp') - 0 - >>> 'spam, spam, spam'.find('sp', 5) - 6 - - See also "rfind()" and "index()". - - Note: - - The "find()" method should be used only if you need to know the - position of *sub*. To check if *sub* is a substring or not, use - the "in" operator: - - >>> 'Py' in 'Python' - True - -str.format(*args, **kwargs) - - Perform a string formatting operation. The string on which this - method is called can contain literal text or replacement fields - delimited by braces "{}". Each replacement field contains either - the numeric index of a positional argument, or the name of a - keyword argument. Returns a copy of the string where each - replacement field is replaced with the string value of the - corresponding argument. For example: - - >>> "The sum of 1 + 2 is {0}".format(1+2) - 'The sum of 1 + 2 is 3' - >>> "The sum of {a} + {b} is {answer}".format(answer=1+2, a=1, b=2) - 'The sum of 1 + 2 is 3' - >>> "{1} expects the {0} Inquisition!".format("Spanish", "Nobody") - 'Nobody expects the Spanish Inquisition!' - - See Format string syntax for a description of the various - formatting options that can be specified in format strings. - - Note: - - When formatting a number ("int", "float", "complex", - "decimal.Decimal" and subclasses) with the "n" type (ex: - "'{:n}'.format(1234)"), the function temporarily sets the - "LC_CTYPE" locale to the "LC_NUMERIC" locale to decode - "decimal_point" and "thousands_sep" fields of "localeconv()" if - they are non-ASCII or longer than 1 byte, and the "LC_NUMERIC" - locale is different than the "LC_CTYPE" locale. This temporary - change affects other threads. - - Changed in version 3.7: When formatting a number with the "n" type, - the function sets temporarily the "LC_CTYPE" locale to the - "LC_NUMERIC" locale in some cases. - -str.format_map(mapping, /) - - Similar to "str.format(**mapping)", except that "mapping" is used - directly and not copied to a "dict". This is useful if for example - "mapping" is a dict subclass: - - >>> class Default(dict): - ... def __missing__(self, key): - ... return key - ... - >>> '{name} was born in {country}'.format_map(Default(name='Guido')) - 'Guido was born in country' - - Added in version 3.2. - -str.index(sub[, start[, end]]) - - Like "find()", but raise "ValueError" when the substring is not - found. For example: - - >>> 'spam, spam, spam'.index('spam') - 0 - >>> 'spam, spam, spam'.index('eggs') - Traceback (most recent call last): - File "<python-input-0>", line 1, in <module> - 'spam, spam, spam'.index('eggs') - ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ - ValueError: substring not found - - See also "rindex()". - -str.isalnum() - - Return "True" if all characters in the string are alphanumeric and - there is at least one character, "False" otherwise. A character - "c" is alphanumeric if one of the following returns "True": - "c.isalpha()", "c.isdecimal()", "c.isdigit()", or "c.isnumeric()". - For example: - - >>> 'abc123'.isalnum() - True - >>> 'abc123!@#'.isalnum() - False - >>> ''.isalnum() - False - >>> ' '.isalnum() - False - -str.isalpha() - - Return "True" if all characters in the string are alphabetic and - there is at least one character, "False" otherwise. Alphabetic - characters are those characters defined in the Unicode character - database as “Letter”, i.e., those with general category property - being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”. Note that this is - different from the Alphabetic property defined in the section 4.10 - ‘Letters, Alphabetic, and Ideographic’ of the Unicode Standard. For - example: - - >>> 'Letters and spaces'.isalpha() - False - >>> 'LettersOnly'.isalpha() - True - >>> 'µ'.isalpha() # non-ASCII characters can be considered alphabetical too - True - - See Unicode Properties. - -str.isascii() - - Return "True" if the string is empty or all characters in the - string are ASCII, "False" otherwise. ASCII characters have code - points in the range U+0000-U+007F. For example: - - >>> 'ASCII characters'.isascii() - True - >>> 'µ'.isascii() - False - - Added in version 3.7. - -str.isdecimal() - - Return "True" if all characters in the string are decimal - characters and there is at least one character, "False" otherwise. - Decimal characters are those that can be used to form numbers in - base 10, such as U+0660, ARABIC-INDIC DIGIT ZERO. Formally a - decimal character is a character in the Unicode General Category - “Nd”. For example: - - >>> '0123456789'.isdecimal() - True - >>> '٠١٢٣٤٥٦٧٨٩'.isdecimal() # Arabic-Indic digits zero to nine - True - >>> 'alphabetic'.isdecimal() - False - -str.isdigit() - - Return "True" if all characters in the string are digits and there - is at least one character, "False" otherwise. Digits include - decimal characters and digits that need special handling, such as - the compatibility superscript digits. This covers digits which - cannot be used to form numbers in base 10, like the Kharosthi - numbers. Formally, a digit is a character that has the property - value Numeric_Type=Digit or Numeric_Type=Decimal. - -str.isidentifier() - - Return "True" if the string is a valid identifier according to the - language definition, section Names (identifiers and keywords). - - "keyword.iskeyword()" can be used to test whether string "s" is a - reserved identifier, such as "def" and "class". - - Example: - - >>> from keyword import iskeyword - - >>> 'hello'.isidentifier(), iskeyword('hello') - (True, False) - >>> 'def'.isidentifier(), iskeyword('def') - (True, True) - -str.islower() - - Return "True" if all cased characters [4] in the string are - lowercase and there is at least one cased character, "False" - otherwise. - -str.isnumeric() - - Return "True" if all characters in the string are numeric - characters, and there is at least one character, "False" otherwise. - Numeric characters include digit characters, and all characters - that have the Unicode numeric value property, e.g. U+2155, VULGAR - FRACTION ONE FIFTH. Formally, numeric characters are those with - the property value Numeric_Type=Digit, Numeric_Type=Decimal or - Numeric_Type=Numeric. For example: - - >>> '0123456789'.isnumeric() - True - >>> '٠١٢٣٤٥٦٧٨٩'.isnumeric() # Arabic-indic digit zero to nine - True - >>> '⅕'.isnumeric() # Vulgar fraction one fifth - True - >>> '²'.isdecimal(), '²'.isdigit(), '²'.isnumeric() - (False, True, True) - - See also "isdecimal()" and "isdigit()". Numeric characters are a - superset of decimal numbers. - -str.isprintable() - - Return "True" if all characters in the string are printable, - "False" if it contains at least one non-printable character. - - Here “printable” means the character is suitable for "repr()" to - use in its output; “non-printable” means that "repr()" on built-in - types will hex-escape the character. It has no bearing on the - handling of strings written to "sys.stdout" or "sys.stderr". - - The printable characters are those which in the Unicode character - database (see "unicodedata") have a general category in group - Letter, Mark, Number, Punctuation, or Symbol (L, M, N, P, or S); - plus the ASCII space 0x20. Nonprintable characters are those in - group Separator or Other (Z or C), except the ASCII space. - - For example: - - >>> ''.isprintable(), ' '.isprintable() - (True, True) - >>> '\t'.isprintable(), '\n'.isprintable() - (False, False) - - See also "isspace()". - -str.isspace() - - Return "True" if there are only whitespace characters in the string - and there is at least one character, "False" otherwise. - - For example: - - >>> ''.isspace() - False - >>> ' '.isspace() - True - >>> '\t\n'.isspace() # TAB and BREAK LINE - True - >>> '\u3000'.isspace() # IDEOGRAPHIC SPACE - True - - A character is *whitespace* if in the Unicode character database - (see "unicodedata"), either its general category is "Zs" - (“Separator, space”), or its bidirectional class is one of "WS", - "B", or "S". - - See also "isprintable()". - -str.istitle() - - Return "True" if the string is a titlecased string and there is at - least one character, for example uppercase characters may only - follow uncased characters and lowercase characters only cased ones. - Return "False" otherwise. - - For example: - - >>> 'Spam, Spam, Spam'.istitle() - True - >>> 'spam, spam, spam'.istitle() - False - >>> 'SPAM, SPAM, SPAM'.istitle() - False - - See also "title()". - -str.isupper() - - Return "True" if all cased characters [4] in the string are - uppercase and there is at least one cased character, "False" - otherwise. - - >>> 'BANANA'.isupper() - True - >>> 'banana'.isupper() - False - >>> 'baNana'.isupper() - False - >>> ' '.isupper() - False - -str.join(iterable, /) - - Return a string which is the concatenation of the strings in - *iterable*. A "TypeError" will be raised if there are any non- - string values in *iterable*, including "bytes" objects. The - separator between elements is the string providing this method. For - example: - - >>> ', '.join(['spam', 'spam', 'spam']) - 'spam, spam, spam' - >>> '-'.join('Python') - 'P-y-t-h-o-n' - - See also "split()". - -str.ljust(width, fillchar=' ', /) - - Return the string left justified in a string of length *width*. - Padding is done using the specified *fillchar* (default is an ASCII - space). The original string is returned if *width* is less than or - equal to "len(s)". - - For example: - - >>> 'Python'.ljust(10) - 'Python ' - >>> 'Python'.ljust(10, '.') - 'Python....' - >>> 'Monty Python'.ljust(10, '.') - 'Monty Python' - - See also "rjust()". - -str.lower() - - Return a copy of the string with all the cased characters [4] - converted to lowercase. For example: - - >>> 'Lower Method Example'.lower() - 'lower method example' - - The lowercasing algorithm used is described in section 3.13 - ‘Default Case Folding’ of the Unicode Standard. - -str.lstrip(chars=None, /) - - Return a copy of the string with leading characters removed. The - *chars* argument is a string specifying the set of characters to be - removed. If omitted or "None", the *chars* argument defaults to - removing whitespace. The *chars* argument is not a prefix; rather, - all combinations of its values are stripped: - - >>> ' spacious '.lstrip() - 'spacious ' - >>> 'www.example.com'.lstrip('cmowz.') - 'example.com' - - See "str.removeprefix()" for a method that will remove a single - prefix string rather than all of a set of characters. For example: - - >>> 'Arthur: three!'.lstrip('Arthur: ') - 'ee!' - >>> 'Arthur: three!'.removeprefix('Arthur: ') - 'three!' - -static str.maketrans(dict, /) -static str.maketrans(from, to, remove='', /) - - This static method returns a translation table usable for - "str.translate()". - - If there is only one argument, it must be a dictionary mapping - Unicode ordinals (integers) or characters (strings of length 1) to - Unicode ordinals, strings (of arbitrary lengths) or "None". - Character keys will then be converted to ordinals. - - If there are two arguments, they must be strings of equal length, - and in the resulting dictionary, each character in *from* will be - mapped to the character at the same position in *to*. If there is - a third argument, it must be a string, whose characters will be - mapped to "None" in the result. - -str.partition(sep, /) - - Split the string at the first occurrence of *sep*, and return a - 3-tuple containing the part before the separator, the separator - itself, and the part after the separator. If the separator is not - found, return a 3-tuple containing the string itself, followed by - two empty strings. - - For example: - - >>> 'Monty Python'.partition(' ') - ('Monty', ' ', 'Python') - >>> "Monty Python's Flying Circus".partition(' ') - ('Monty', ' ', "Python's Flying Circus") - >>> 'Monty Python'.partition('-') - ('Monty Python', '', '') - - See also "rpartition()". - -str.removeprefix(prefix, /) - - If the string starts with the *prefix* string, return - "string[len(prefix):]". Otherwise, return a copy of the original - string: - - >>> 'TestHook'.removeprefix('Test') - 'Hook' - >>> 'BaseTestCase'.removeprefix('Test') - 'BaseTestCase' - - Added in version 3.9. - - See also "removesuffix()" and "startswith()". - -str.removesuffix(suffix, /) - - If the string ends with the *suffix* string and that *suffix* is - not empty, return "string[:-len(suffix)]". Otherwise, return a copy - of the original string: - - >>> 'MiscTests'.removesuffix('Tests') - 'Misc' - >>> 'TmpDirMixin'.removesuffix('Tests') - 'TmpDirMixin' - - Added in version 3.9. - - See also "removeprefix()" and "endswith()". - -str.replace(old, new, /, count=-1) - - Return a copy of the string with all occurrences of substring *old* - replaced by *new*. If *count* is given, only the first *count* - occurrences are replaced. If *count* is not specified or "-1", then - all occurrences are replaced. For example: - - >>> 'spam, spam, spam'.replace('spam', 'eggs') - 'eggs, eggs, eggs' - >>> 'spam, spam, spam'.replace('spam', 'eggs', 1) - 'eggs, spam, spam' - - Changed in version 3.13: *count* is now supported as a keyword - argument. - -str.rfind(sub[, start[, end]]) - - Return the highest index in the string where substring *sub* is - found, such that *sub* is contained within "s[start:end]". - Optional arguments *start* and *end* are interpreted as in slice - notation. Return "-1" on failure. For example: - - >>> 'spam, spam, spam'.rfind('sp') - 12 - >>> 'spam, spam, spam'.rfind('sp', 0, 10) - 6 - - See also "find()" and "rindex()". - -str.rindex(sub[, start[, end]]) - - Like "rfind()" but raises "ValueError" when the substring *sub* is - not found. For example: - - >>> 'spam, spam, spam'.rindex('spam') - 12 - >>> 'spam, spam, spam'.rindex('eggs') - Traceback (most recent call last): - File "<stdin-0>", line 1, in <module> - 'spam, spam, spam'.rindex('eggs') - ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ - ValueError: substring not found - - See also "index()" and "find()". - -str.rjust(width, fillchar=' ', /) - - Return the string right justified in a string of length *width*. - Padding is done using the specified *fillchar* (default is an ASCII - space). The original string is returned if *width* is less than or - equal to "len(s)". - - For example: - - >>> 'Python'.rjust(10) - ' Python' - >>> 'Python'.rjust(10, '.') - '....Python' - >>> 'Monty Python'.rjust(10, '.') - 'Monty Python' - - See also "ljust()" and "zfill()". - -str.rpartition(sep, /) - - Split the string at the last occurrence of *sep*, and return a - 3-tuple containing the part before the separator, the separator - itself, and the part after the separator. If the separator is not - found, return a 3-tuple containing two empty strings, followed by - the string itself. - - For example: - - >>> 'Monty Python'.rpartition(' ') - ('Monty', ' ', 'Python') - >>> "Monty Python's Flying Circus".rpartition(' ') - ("Monty Python's Flying", ' ', 'Circus') - >>> 'Monty Python'.rpartition('-') - ('', '', 'Monty Python') - - See also "partition()". - -str.rsplit(sep=None, maxsplit=-1) - - Return a list of the words in the string, using *sep* as the - delimiter string. If *maxsplit* is given, at most *maxsplit* splits - are done, the *rightmost* ones. If *sep* is not specified or - "None", any whitespace string is a separator. Except for splitting - from the right, "rsplit()" behaves like "split()" which is - described in detail below. - -str.rstrip(chars=None, /) - - Return a copy of the string with trailing characters removed. The - *chars* argument is a string specifying the set of characters to be - removed. If omitted or "None", the *chars* argument defaults to - removing whitespace. The *chars* argument is not a suffix; rather, - all combinations of its values are stripped. For example: - - >>> ' spacious '.rstrip() - ' spacious' - >>> 'mississippi'.rstrip('ipz') - 'mississ' - - See "removesuffix()" for a method that will remove a single suffix - string rather than all of a set of characters. For example: - - >>> 'Monty Python'.rstrip(' Python') - 'M' - >>> 'Monty Python'.removesuffix(' Python') - 'Monty' - - See also "strip()". - -str.split(sep=None, maxsplit=-1) - - Return a list of the words in the string, using *sep* as the - delimiter string. If *maxsplit* is given, at most *maxsplit* - splits are done (thus, the list will have at most "maxsplit+1" - elements). If *maxsplit* is not specified or "-1", then there is - no limit on the number of splits (all possible splits are made). - - If *sep* is given, consecutive delimiters are not grouped together - and are deemed to delimit empty strings (for example, - "'1,,2'.split(',')" returns "['1', '', '2']"). The *sep* argument - may consist of multiple characters as a single delimiter (to split - with multiple delimiters, use "re.split()"). Splitting an empty - string with a specified separator returns "['']". - - For example: - - >>> '1,2,3'.split(',') - ['1', '2', '3'] - >>> '1,2,3'.split(',', maxsplit=1) - ['1', '2,3'] - >>> '1,2,,3,'.split(',') - ['1', '2', '', '3', ''] - >>> '1<>2<>3<4'.split('<>') - ['1', '2', '3<4'] - - If *sep* is not specified or is "None", a different splitting - algorithm is applied: runs of consecutive whitespace are regarded - as a single separator, and the result will contain no empty strings - at the start or end if the string has leading or trailing - whitespace. Consequently, splitting an empty string or a string - consisting of just whitespace with a "None" separator returns "[]". - - For example: - - >>> '1 2 3'.split() - ['1', '2', '3'] - >>> '1 2 3'.split(maxsplit=1) - ['1', '2 3'] - >>> ' 1 2 3 '.split() - ['1', '2', '3'] - - If *sep* is not specified or is "None" and *maxsplit* is "0", only - leading runs of consecutive whitespace are considered. - - For example: - - >>> "".split(None, 0) - [] - >>> " ".split(None, 0) - [] - >>> " foo ".split(maxsplit=0) - ['foo '] - - See also "join()". - -str.splitlines(keepends=False) - - Return a list of the lines in the string, breaking at line - boundaries. Line breaks are not included in the resulting list - unless *keepends* is given and true. - - This method splits on the following line boundaries. In - particular, the boundaries are a superset of *universal newlines*. - - +-------------------------+-------------------------------+ - | Representation | Description | - |=========================|===============================| - | "\n" | Line Feed | - +-------------------------+-------------------------------+ - | "\r" | Carriage Return | - +-------------------------+-------------------------------+ - | "\r\n" | Carriage Return + Line Feed | - +-------------------------+-------------------------------+ - | "\v" or "\x0b" | Line Tabulation | - +-------------------------+-------------------------------+ - | "\f" or "\x0c" | Form Feed | - +-------------------------+-------------------------------+ - | "\x1c" | File Separator | - +-------------------------+-------------------------------+ - | "\x1d" | Group Separator | - +-------------------------+-------------------------------+ - | "\x1e" | Record Separator | - +-------------------------+-------------------------------+ - | "\x85" | Next Line (C1 Control Code) | - +-------------------------+-------------------------------+ - | "\u2028" | Line Separator | - +-------------------------+-------------------------------+ - | "\u2029" | Paragraph Separator | - +-------------------------+-------------------------------+ - - Changed in version 3.2: "\v" and "\f" added to list of line - boundaries. - - For example: - - >>> 'ab c\n\nde fg\rkl\r\n'.splitlines() - ['ab c', '', 'de fg', 'kl'] - >>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True) - ['ab c\n', '\n', 'de fg\r', 'kl\r\n'] - - Unlike "split()" when a delimiter string *sep* is given, this - method returns an empty list for the empty string, and a terminal - line break does not result in an extra line: - - >>> "".splitlines() - [] - >>> "One line\n".splitlines() - ['One line'] - - For comparison, "split('\n')" gives: - - >>> ''.split('\n') - [''] - >>> 'Two lines\n'.split('\n') - ['Two lines', ''] - -str.startswith(prefix[, start[, end]]) - - Return "True" if string starts with the *prefix*, otherwise return - "False". *prefix* can also be a tuple of prefixes to look for. - With optional *start*, test string beginning at that position. - With optional *end*, stop comparing string at that position. - - For example: - - >>> 'Python'.startswith('Py') - True - >>> 'a tuple of prefixes'.startswith(('at', 'a')) - True - >>> 'Python is amazing'.startswith('is', 7) - True - - See also "endswith()" and "removeprefix()". - -str.strip(chars=None, /) - - Return a copy of the string with the leading and trailing - characters removed. The *chars* argument is a string specifying the - set of characters to be removed. If omitted or "None", the *chars* - argument defaults to removing whitespace. The *chars* argument is - not a prefix or suffix; rather, all combinations of its values are - stripped. - - For example: - - >>> ' spacious '.strip() - 'spacious' - >>> 'www.example.com'.strip('cmowz.') - 'example' - - The outermost leading and trailing *chars* argument values are - stripped from the string. Characters are removed from the leading - end until reaching a string character that is not contained in the - set of characters in *chars*. A similar action takes place on the - trailing end. - - For example: - - >>> comment_string = '#....... Section 3.2.1 Issue #32 .......' - >>> comment_string.strip('.#! ') - 'Section 3.2.1 Issue #32' - - See also "rstrip()". - -str.swapcase() - - Return a copy of the string with uppercase characters converted to - lowercase and vice versa. Note that it is not necessarily true that - "s.swapcase().swapcase() == s". - -str.title() - - Return a titlecased version of the string where words start with an - uppercase character and the remaining characters are lowercase. - - For example: - - >>> 'Hello world'.title() - 'Hello World' - - The algorithm uses a simple language-independent definition of a - word as groups of consecutive letters. The definition works in - many contexts but it means that apostrophes in contractions and - possessives form word boundaries, which may not be the desired - result: - - >>> "they're bill's friends from the UK".title() - "They'Re Bill'S Friends From The Uk" - - The "string.capwords()" function does not have this problem, as it - splits words on spaces only. - - Alternatively, a workaround for apostrophes can be constructed - using regular expressions: - - >>> import re - >>> def titlecase(s): - ... return re.sub(r"[A-Za-z]+('[A-Za-z]+)?", - ... lambda mo: mo.group(0).capitalize(), - ... s) - ... - >>> titlecase("they're bill's friends.") - "They're Bill's Friends." - - See also "istitle()". - -str.translate(table, /) - - Return a copy of the string in which each character has been mapped - through the given translation table. The table must be an object - that implements indexing via "__getitem__()", typically a *mapping* - or *sequence*. When indexed by a Unicode ordinal (an integer), the - table object can do any of the following: return a Unicode ordinal - or a string, to map the character to one or more other characters; - return "None", to delete the character from the return string; or - raise a "LookupError" exception, to map the character to itself. - - You can use "str.maketrans()" to create a translation map from - character-to-character mappings in different formats. - - See also the "codecs" module for a more flexible approach to custom - character mappings. - -str.upper() - - Return a copy of the string with all the cased characters [4] - converted to uppercase. Note that "s.upper().isupper()" might be - "False" if "s" contains uncased characters or if the Unicode - category of the resulting character(s) is not “Lu” (Letter, - uppercase), but e.g. “Lt” (Letter, titlecase). - - The uppercasing algorithm used is described in section 3.13 - ‘Default Case Folding’ of the Unicode Standard. - -str.zfill(width, /) - - Return a copy of the string left filled with ASCII "'0'" digits to - make a string of length *width*. A leading sign prefix - ("'+'"/"'-'") is handled by inserting the padding *after* the sign - character rather than before. The original string is returned if - *width* is less than or equal to "len(s)". - - For example: - - >>> "42".zfill(5) - '00042' - >>> "-42".zfill(5) - '-0042' - - See also "rjust()". -''', - 'strings': '''String and Bytes literals -************************* - -String literals are text enclosed in single quotes ("'") or double -quotes ("""). For example: - - "spam" - 'eggs' - -The quote used to start the literal also terminates it, so a string -literal can only contain the other quote (except with escape -sequences, see below). For example: - - 'Say "Hello", please.' - "Don't do that!" - -Except for this limitation, the choice of quote character ("'" or """) -does not affect how the literal is parsed. - -Inside a string literal, the backslash ("\\") character introduces an -*escape sequence*, which has special meaning depending on the -character after the backslash. For example, "\\"" denotes the double -quote character, and does *not* end the string: - - >>> print("Say \\"Hello\\" to everyone!") - Say "Hello" to everyone! - -See escape sequences below for a full list of such sequences, and more -details. - - -Triple-quoted strings -===================== - -Strings can also be enclosed in matching groups of three single or -double quotes. These are generally referred to as *triple-quoted -strings*: - - """This is a triple-quoted string.""" - -In triple-quoted literals, unescaped quotes are allowed (and are -retained), except that three unescaped quotes in a row terminate the -literal, if they are of the same kind ("'" or """) used at the start: - - """This string has "quotes" inside.""" - -Unescaped newlines are also allowed and retained: - - \'\'\'This triple-quoted string - continues on the next line.\'\'\' - - -String prefixes -=============== - -String literals can have an optional *prefix* that influences how the -content of the literal is parsed, for example: - - b"data" - f'{result=}' - -The allowed prefixes are: - -* "b": Bytes literal - -* "r": Raw string - -* "f": Formatted string literal (“f-string”) - -* "t": Template string literal (“t-string”) - -* "u": No effect (allowed for backwards compatibility) - -See the linked sections for details on each type. - -Prefixes are case-insensitive (for example, ‘"B"’ works the same as -‘"b"’). The ‘"r"’ prefix can be combined with ‘"f"’, ‘"t"’ or ‘"b"’, -so ‘"fr"’, ‘"rf"’, ‘"tr"’, ‘"rt"’, ‘"br"’, and ‘"rb"’ are also valid -prefixes. - -Added in version 3.3: The "'rb'" prefix of raw bytes literals has been -added as a synonym of "'br'".Support for the unicode legacy literal -("u'value'") was reintroduced to simplify the maintenance of dual -Python 2.x and 3.x codebases. See **PEP 414** for more information. - - -Formal grammar -============== - -String literals, except “f-strings” and “t-strings”, are described by -the following lexical definitions. - -These definitions use negative lookaheads ("!") to indicate that an -ending quote ends the literal. - - STRING: [stringprefix] (stringcontent) - stringprefix: <("r" | "u" | "b" | "br" | "rb"), case-insensitive> - stringcontent: - | "\'\'\'" ( !"\'\'\'" longstringitem)* "\'\'\'" - | '"""' ( !'"""' longstringitem)* '"""' - | "'" ( !"'" stringitem)* "'" - | '"' ( !'"' stringitem)* '"' - stringitem: stringchar | stringescapeseq - stringchar: <any source_character, except backslash and newline> - longstringitem: stringitem | newline - stringescapeseq: "\\" <any source_character> - -Note that as in all lexical definitions, whitespace is significant. In -particular, the prefix (if any) must be immediately followed by the -starting quote. - - -Escape sequences -================ - -Unless an ‘"r"’ or ‘"R"’ prefix is present, escape sequences in string -and bytes literals are interpreted according to rules similar to those -used by Standard C. The recognized escape sequences are: - -+----------------------------------------------------+----------------------------------------------------+ -| Escape Sequence | Meaning | -|====================================================|====================================================| -| "\\"<newline> | Ignored end of line | -+----------------------------------------------------+----------------------------------------------------+ -| "\\\\" | Backslash | -+----------------------------------------------------+----------------------------------------------------+ -| "\\'" | Single quote | -+----------------------------------------------------+----------------------------------------------------+ -| "\\"" | Double quote | -+----------------------------------------------------+----------------------------------------------------+ -| "\\a" | ASCII Bell (BEL) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\b" | ASCII Backspace (BS) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\f" | ASCII Formfeed (FF) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\n" | ASCII Linefeed (LF) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\r" | ASCII Carriage Return (CR) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\t" | ASCII Horizontal Tab (TAB) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\v" | ASCII Vertical Tab (VT) | -+----------------------------------------------------+----------------------------------------------------+ -| "\\*ooo*" | Octal character | -+----------------------------------------------------+----------------------------------------------------+ -| "\\x*hh*" | Hexadecimal character | -+----------------------------------------------------+----------------------------------------------------+ -| "\\N{*name*}" | Named Unicode character | -+----------------------------------------------------+----------------------------------------------------+ -| "\\u*xxxx*" | Hexadecimal Unicode character | -+----------------------------------------------------+----------------------------------------------------+ -| "\\U*xxxxxxxx*" | Hexadecimal Unicode character | -+----------------------------------------------------+----------------------------------------------------+ - - -Ignored end of line -------------------- - -A backslash can be added at the end of a line to ignore the newline: - - >>> 'This string will not include \\ - ... backslashes or newline characters.' - 'This string will not include backslashes or newline characters.' - -The same result can be achieved using triple-quoted strings, or -parentheses and string literal concatenation. - - -Escaped characters ------------------- - -To include a backslash in a non-raw Python string literal, it must be -doubled. The "\\\\" escape sequence denotes a single backslash -character: - - >>> print('C:\\\\Program Files') - C:\\Program Files - -Similarly, the "\\'" and "\\"" sequences denote the single and double -quote character, respectively: - - >>> print('\\' and \\"') - ' and " - - -Octal character ---------------- - -The sequence "\\*ooo*" denotes a *character* with the octal (base 8) -value *ooo*: - - >>> '\\120' - 'P' - -Up to three octal digits (0 through 7) are accepted. - -In a bytes literal, *character* means a *byte* with the given value. -In a string literal, it means a Unicode character with the given -value. - -Changed in version 3.11: Octal escapes with value larger than "0o377" -(255) produce a "DeprecationWarning". - -Changed in version 3.12: Octal escapes with value larger than "0o377" -(255) produce a "SyntaxWarning". In a future Python version they will -raise a "SyntaxError". - - -Hexadecimal character ---------------------- - -The sequence "\\x*hh*" denotes a *character* with the hex (base 16) -value *hh*: - - >>> '\\x50' - 'P' - -Unlike in Standard C, exactly two hex digits are required. - -In a bytes literal, *character* means a *byte* with the given value. -In a string literal, it means a Unicode character with the given -value. - - -Named Unicode character ------------------------ - -The sequence "\\N{*name*}" denotes a Unicode character with the given -*name*: - - >>> '\\N{LATIN CAPITAL LETTER P}' - 'P' - >>> '\\N{SNAKE}' - '🐍' - -This sequence cannot appear in bytes literals. - -Changed in version 3.3: Support for name aliases has been added. - - -Hexadecimal Unicode characters ------------------------------- - -These sequences "\\u*xxxx*" and "\\U*xxxxxxxx*" denote the Unicode -character with the given hex (base 16) value. Exactly four digits are -required for "\\u"; exactly eight digits are required for "\\U". The -latter can encode any Unicode character. - - >>> '\\u1234' - 'ሴ' - >>> '\\U0001f40d' - '🐍' - -These sequences cannot appear in bytes literals. - - -Unrecognized escape sequences ------------------------------ - -Unlike in Standard C, all unrecognized escape sequences are left in -the string unchanged, that is, *the backslash is left in the result*: - - >>> print('\\q') - \\q - >>> list('\\q') - ['\\\\', 'q'] - -Note that for bytes literals, the escape sequences only recognized in -string literals ("\\N...", "\\u...", "\\U...") fall into the category of -unrecognized escapes. - -Changed in version 3.6: Unrecognized escape sequences produce a -"DeprecationWarning". - -Changed in version 3.12: Unrecognized escape sequences produce a -"SyntaxWarning". In a future Python version they will raise a -"SyntaxError". - - -Bytes literals -============== - -*Bytes literals* are always prefixed with ‘"b"’ or ‘"B"’; they produce -an instance of the "bytes" type instead of the "str" type. They may -only contain ASCII characters; bytes with a numeric value of 128 or -greater must be expressed with escape sequences (typically Hexadecimal -character or Octal character): - - >>> b'\\x89PNG\\r\\n\\x1a\\n' - b'\\x89PNG\\r\\n\\x1a\\n' - >>> list(b'\\x89PNG\\r\\n\\x1a\\n') - [137, 80, 78, 71, 13, 10, 26, 10] - -Similarly, a zero byte must be expressed using an escape sequence -(typically "\\0" or "\\x00"). - - -Raw string literals -=================== - -Both string and bytes literals may optionally be prefixed with a -letter ‘"r"’ or ‘"R"’; such constructs are called *raw string -literals* and *raw bytes literals* respectively and treat backslashes -as literal characters. As a result, in raw string literals, escape -sequences are not treated specially: - - >>> r'\\d{4}-\\d{2}-\\d{2}' - '\\\\d{4}-\\\\d{2}-\\\\d{2}' - -Even in a raw literal, quotes can be escaped with a backslash, but the -backslash remains in the result; for example, "r"\\""" is a valid -string literal consisting of two characters: a backslash and a double -quote; "r"\\"" is not a valid string literal (even a raw string cannot -end in an odd number of backslashes). Specifically, *a raw literal -cannot end in a single backslash* (since the backslash would escape -the following quote character). Note also that a single backslash -followed by a newline is interpreted as those two characters as part -of the literal, *not* as a line continuation. - - -f-strings -========= - -Added in version 3.6. - -Changed in version 3.7: The "await" and "async for" can be used in -expressions within f-strings. - -Changed in version 3.8: Added the debug specifier ("=") - -Changed in version 3.12: Many restrictions on expressions within -f-strings have been removed. Notably, nested strings, comments, and -backslashes are now permitted. - -A *formatted string literal* or *f-string* is a string literal that is -prefixed with ‘"f"’ or ‘"F"’. Unlike other string literals, f-strings -do not have a constant value. They may contain *replacement fields* -delimited by curly braces "{}". Replacement fields contain expressions -which are evaluated at run time. For example: - - >>> who = 'nobody' - >>> nationality = 'Spanish' - >>> f'{who.title()} expects the {nationality} Inquisition!' - 'Nobody expects the Spanish Inquisition!' - -Any doubled curly braces ("{{" or "}}") outside replacement fields are -replaced with the corresponding single curly brace: - - >>> print(f'{{...}}') - {...} - -Other characters outside replacement fields are treated like in -ordinary string literals. This means that escape sequences are decoded -(except when a literal is also marked as a raw string), and newlines -are possible in triple-quoted f-strings: - - >>> name = 'Galahad' - >>> favorite_color = 'blue' - >>> print(f'{name}:\\t{favorite_color}') - Galahad: blue - >>> print(rf"C:\\Users\\{name}") - C:\\Users\\Galahad - >>> print(f\'\'\'Three shall be the number of the counting - ... and the number of the counting shall be three.\'\'\') - Three shall be the number of the counting - and the number of the counting shall be three. - -Expressions in formatted string literals are treated like regular -Python expressions. Each expression is evaluated in the context where -the formatted string literal appears, in order from left to right. An -empty expression is not allowed, and both "lambda" and assignment -expressions ":=" must be surrounded by explicit parentheses: - - >>> f'{(half := 1/2)}, {half * 42}' - '0.5, 21.0' - -Reusing the outer f-string quoting type inside a replacement field is -permitted: - - >>> a = dict(x=2) - >>> f"abc {a["x"]} def" - 'abc 2 def' - -Backslashes are also allowed in replacement fields and are evaluated -the same way as in any other context: - - >>> a = ["a", "b", "c"] - >>> print(f"List a contains:\\n{"\\n".join(a)}") - List a contains: - a - b - c - -It is possible to nest f-strings: - - >>> name = 'world' - >>> f'Repeated:{f' hello {name}' * 3}' - 'Repeated: hello world hello world hello world' - -Portable Python programs should not use more than 5 levels of nesting. - -**CPython implementation detail:** CPython does not limit nesting of -f-strings. - -Replacement expressions can contain newlines in both single-quoted and -triple-quoted f-strings and they can contain comments. Everything that -comes after a "#" inside a replacement field is a comment (even -closing braces and quotes). This means that replacement fields with -comments must be closed in a different line: - - >>> a = 2 - >>> f"abc{a # This comment }" continues until the end of the line - ... + 3}" - 'abc5' - -After the expression, replacement fields may optionally contain: - -* a *debug specifier* – an equal sign ("="), optionally surrounded by - whitespace on one or both sides; - -* a *conversion specifier* – "!s", "!r" or "!a"; and/or - -* a *format specifier* prefixed with a colon (":"). - -See the Standard Library section on f-strings for details on how these -fields are evaluated. - -As that section explains, *format specifiers* are passed as the second -argument to the "format()" function to format a replacement field -value. For example, they can be used to specify a field width and -padding characters using the Format Specification Mini-Language: - - >>> number = 14.3 - >>> f'{number:20.7f}' - ' 14.3000000' - -Top-level format specifiers may include nested replacement fields: - - >>> field_size = 20 - >>> precision = 7 - >>> f'{number:{field_size}.{precision}f}' - ' 14.3000000' - -These nested fields may include their own conversion fields and format -specifiers: - - >>> number = 3 - >>> f'{number:{field_size}}' - ' 3' - >>> f'{number:{field_size:05}}' - '00000000000000000003' - -However, these nested fields may not include more deeply nested -replacement fields. - -Formatted string literals cannot be used as *docstrings*, even if they -do not include expressions: - - >>> def foo(): - ... f"Not a docstring" - ... - >>> print(foo.__doc__) - None - -See also: - - * **PEP 498** – Literal String Interpolation - - * **PEP 701** – Syntactic formalization of f-strings - - * "str.format()", which uses a related format string mechanism. - - -t-strings -========= - -Added in version 3.14. - -A *template string literal* or *t-string* is a string literal that is -prefixed with ‘"t"’ or ‘"T"’. These strings follow the same syntax -rules as formatted string literals. For differences in evaluation -rules, see the Standard Library section on t-strings - - -Formal grammar for f-strings -============================ - -F-strings are handled partly by the *lexical analyzer*, which produces -the tokens "FSTRING_START", "FSTRING_MIDDLE" and "FSTRING_END", and -partly by the parser, which handles expressions in the replacement -field. The exact way the work is split is a CPython implementation -detail. - -Correspondingly, the f-string grammar is a mix of lexical and -syntactic definitions. - -Whitespace is significant in these situations: - -* There may be no whitespace in "FSTRING_START" (between the prefix - and quote). - -* Whitespace in "FSTRING_MIDDLE" is part of the literal string - contents. - -* In "fstring_replacement_field", if "f_debug_specifier" is present, - all whitespace after the opening brace until the - "f_debug_specifier", as well as whitespace immediately following - "f_debug_specifier", is retained as part of the expression. - - **CPython implementation detail:** The expression is not handled in - the tokenization phase; it is retrieved from the source code using - locations of the "{" token and the token after "=". - -The "FSTRING_MIDDLE" definition uses negative lookaheads ("!") to -indicate special characters (backslash, newline, "{", "}") and -sequences ("f_quote"). - - fstring: FSTRING_START fstring_middle* FSTRING_END - - FSTRING_START: fstringprefix ("'" | '"' | "\'\'\'" | '"""') - FSTRING_END: f_quote - fstringprefix: <("f" | "fr" | "rf"), case-insensitive> - f_debug_specifier: '=' - f_quote: <the quote character(s) used in FSTRING_START> - - fstring_middle: - | fstring_replacement_field - | FSTRING_MIDDLE - FSTRING_MIDDLE: - | (!"\\" !newline !'{' !'}' !f_quote) source_character - | stringescapeseq - | "{{" - | "}}" - | <newline, in triple-quoted f-strings only> - fstring_replacement_field: - | '{' f_expression [f_debug_specifier] [fstring_conversion] - [fstring_full_format_spec] '}' - fstring_conversion: - | "!" ("s" | "r" | "a") - fstring_full_format_spec: - | ':' fstring_format_spec* - fstring_format_spec: - | FSTRING_MIDDLE - | fstring_replacement_field - f_expression: - | ','.(conditional_expression | "*" or_expr)+ [","] - | yield_expression - -Note: - - In the above grammar snippet, the "f_quote" and "FSTRING_MIDDLE" - rules are context-sensitive – they depend on the contents of - "FSTRING_START" of the nearest enclosing "fstring".Constructing a - more traditional formal grammar from this template is left as an - exercise for the reader. - -The grammar for t-strings is identical to the one for f-strings, with -*t* instead of *f* at the beginning of rule and token names and in the -prefix. - - tstring: TSTRING_START tstring_middle* TSTRING_END - - <rest of the t-string grammar is omitted; see above> -''', - 'subscriptions': r'''Subscriptions and slicings -************************** - -The *subscription* syntax is usually used for selecting an element -from a container – for example, to get a value from a "dict": - - >>> digits_by_name = {'one': 1, 'two': 2} - >>> digits_by_name['two'] # Subscripting a dictionary using the key 'two' - 2 - -In the subscription syntax, the object being subscribed – a primary – -is followed by a *subscript* in square brackets. In the simplest case, -the subscript is a single expression. - -Depending on the type of the object being subscribed, the subscript is -sometimes called a *key* (for mappings), *index* (for sequences), or -*type argument* (for *generic types*). Syntactically, these are all -equivalent: - - >>> colors = ['red', 'blue', 'green', 'black'] - >>> colors[3] # Subscripting a list using the index 3 - 'black' - - >>> list[str] # Parameterizing the list type using the type argument str - list[str] - -At runtime, the interpreter will evaluate the primary and the -subscript, and call the primary’s "__getitem__()" or -"__class_getitem__()" *special method* with the subscript as argument. -For more details on which of these methods is called, see -__class_getitem__ versus __getitem__. - -To show how subscription works, we can define a custom object that -implements "__getitem__()" and prints out the value of the subscript: - - >>> class SubscriptionDemo: - ... def __getitem__(self, key): - ... print(f'subscripted with: {key!r}') - ... - >>> demo = SubscriptionDemo() - >>> demo[1] - subscripted with: 1 - >>> demo['a' * 3] - subscripted with: 'aaa' - -See "__getitem__()" documentation for how built-in types handle -subscription. - -Subscriptions may also be used as targets in assignment or deletion -statements. In these cases, the interpreter will call the subscripted -object’s "__setitem__()" or "__delitem__()" *special method*, -respectively, instead of "__getitem__()". - - >>> colors = ['red', 'blue', 'green', 'black'] - >>> colors[3] = 'white' # Setting item at index - >>> colors - ['red', 'blue', 'green', 'white'] - >>> del colors[3] # Deleting item at index 3 - >>> colors - ['red', 'blue', 'green'] - -All advanced forms of *subscript* documented in the following sections -are also usable for assignment and deletion. - - -Slicings -======== - -A more advanced form of subscription, *slicing*, is commonly used to -extract a portion of a sequence. In this form, the subscript is a -*slice*: up to three expressions separated by colons. Any of the -expressions may be omitted, but a slice must contain at least one -colon: - - >>> number_names = ['zero', 'one', 'two', 'three', 'four', 'five'] - >>> number_names[1:3] - ['one', 'two'] - >>> number_names[1:] - ['one', 'two', 'three', 'four', 'five'] - >>> number_names[:3] - ['zero', 'one', 'two'] - >>> number_names[:] - ['zero', 'one', 'two', 'three', 'four', 'five'] - >>> number_names[::2] - ['zero', 'two', 'four'] - >>> number_names[:-3] - ['zero', 'one', 'two'] - >>> del number_names[4:] - >>> number_names - ['zero', 'one', 'two', 'three'] - -When a slice is evaluated, the interpreter constructs a "slice" object -whose "start", "stop" and "step" attributes, respectively, are the -results of the expressions between the colons. Any missing expression -evaluates to "None". This "slice" object is then passed to the -"__getitem__()" or "__class_getitem__()" *special method*, as above. - - # continuing with the SubscriptionDemo instance defined above: - >>> demo[2:3] - subscripted with: slice(2, 3, None) - >>> demo[::'spam'] - subscripted with: slice(None, None, 'spam') - - -Comma-separated subscripts -========================== - -The subscript can also be given as two or more comma-separated -expressions or slices: - - # continuing with the SubscriptionDemo instance defined above: - >>> demo[1, 2, 3] - subscripted with: (1, 2, 3) - >>> demo[1:2, 3] - subscripted with: (slice(1, 2, None), 3) - -This form is commonly used with numerical libraries for slicing multi- -dimensional data. In this case, the interpreter constructs a "tuple" -of the results of the expressions or slices, and passes this tuple to -the "__getitem__()" or "__class_getitem__()" *special method*, as -above. - -The subscript may also be given as a single expression or slice -followed by a comma, to specify a one-element tuple: - - >>> demo['spam',] - subscripted with: ('spam',) - - -“Starred” subscriptions -======================= - -Added in version 3.11: Expressions in *tuple_slices* may be starred. -See **PEP 646**. - -The subscript can also contain a starred expression. In this case, the -interpreter unpacks the result into a tuple, and passes this tuple to -"__getitem__()" or "__class_getitem__()": - - # continuing with the SubscriptionDemo instance defined above: - >>> demo[*range(10)] - subscripted with: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - -Starred expressions may be combined with comma-separated expressions -and slices: - - >>> demo['a', 'b', *range(3), 'c'] - subscripted with: ('a', 'b', 0, 1, 2, 'c') - - -Formal subscription grammar -=========================== - - subscription: primary '[' subscript ']' - subscript: single_subscript | tuple_subscript - single_subscript: proper_slice | assignment_expression - proper_slice: [expression] ":" [expression] [ ":" [expression] ] - tuple_subscript: ','.(single_subscript | starred_expression)+ [','] - -Recall that the "|" operator denotes ordered choice. Specifically, in -"subscript", if both alternatives would match, the first -("single_subscript") has priority. -''', - 'truth': r'''Truth Value Testing -******************* - -Any object can be tested for truth value, for use in an "if" or -"while" condition or as operand of the Boolean operations below. - -By default, an object is considered true unless its class defines -either a "__bool__()" method that returns "False" or a "__len__()" -method that returns zero, when called with the object. [1] If one of -the methods raises an exception when called, the exception is -propagated and the object does not have a truth value (for example, -"NotImplemented"). Here are most of the built-in objects considered -false: - -* constants defined to be false: "None" and "False" - -* zero of any numeric type: "0", "0.0", "0j", "Decimal(0)", - "Fraction(0, 1)" - -* empty sequences and collections: "''", "()", "[]", "{}", "set()", - "range(0)" - -Operations and built-in functions that have a Boolean result always -return "0" or "False" for false and "1" or "True" for true, unless -otherwise stated. (Important exception: the Boolean operations "or" -and "and" always return one of their operands.) -''', - 'try': r'''The "try" statement -******************* - -The "try" statement specifies exception handlers and/or cleanup code -for a group of statements: - - try_stmt: try1_stmt | try2_stmt | try3_stmt - try1_stmt: "try" ":" suite - ("except" [expression ["as" identifier]] ":" suite)+ - ["else" ":" suite] - ["finally" ":" suite] - try2_stmt: "try" ":" suite - ("except" "*" expression ["as" identifier] ":" suite)+ - ["else" ":" suite] - ["finally" ":" suite] - try3_stmt: "try" ":" suite - "finally" ":" suite - -Additional information on exceptions can be found in section -Exceptions, and information on using the "raise" statement to generate -exceptions may be found in section The raise statement. - -Changed in version 3.14: Support for optionally dropping grouping -parentheses when using multiple exception types. See **PEP 758**. - - -"except" clause -=============== - -The "except" clause(s) specify one or more exception handlers. When no -exception occurs in the "try" clause, no exception handler is -executed. When an exception occurs in the "try" suite, a search for an -exception handler is started. This search inspects the "except" -clauses in turn until one is found that matches the exception. An -expression-less "except" clause, if present, must be last; it matches -any exception. - -For an "except" clause with an expression, the expression must -evaluate to an exception type or a tuple of exception types. -Parentheses can be dropped if multiple exception types are provided -and the "as" clause is not used. The raised exception matches an -"except" clause whose expression evaluates to the class or a *non- -virtual base class* of the exception object, or to a tuple that -contains such a class. - -If no "except" clause matches the exception, the search for an -exception handler continues in the surrounding code and on the -invocation stack. [1] - -If the evaluation of an expression in the header of an "except" clause -raises an exception, the original search for a handler is canceled and -a search starts for the new exception in the surrounding code and on -the call stack (it is treated as if the entire "try" statement raised -the exception). - -When a matching "except" clause is found, the exception is assigned to -the target specified after the "as" keyword in that "except" clause, -if present, and the "except" clause’s suite is executed. All "except" -clauses must have an executable block. When the end of this block is -reached, execution continues normally after the entire "try" -statement. (This means that if two nested handlers exist for the same -exception, and the exception occurs in the "try" clause of the inner -handler, the outer handler will not handle the exception.) - -When an exception has been assigned using "as target", it is cleared -at the end of the "except" clause. This is as if - - except E as N: - foo - -was translated to - - except E as N: - try: - foo - finally: - del N - -This means the exception must be assigned to a different name to be -able to refer to it after the "except" clause. Exceptions are cleared -because with the traceback attached to them, they form a reference -cycle with the stack frame, keeping all locals in that frame alive -until the next garbage collection occurs. - -Before an "except" clause’s suite is executed, the exception is stored -in the "sys" module, where it can be accessed from within the body of -the "except" clause by calling "sys.exception()". When leaving an -exception handler, the exception stored in the "sys" module is reset -to its previous value: - - >>> print(sys.exception()) - None - >>> try: - ... raise TypeError - ... except: - ... print(repr(sys.exception())) - ... try: - ... raise ValueError - ... except: - ... print(repr(sys.exception())) - ... print(repr(sys.exception())) - ... - TypeError() - ValueError() - TypeError() - >>> print(sys.exception()) - None - - -"except*" clause -================ - -The "except*" clause(s) specify one or more handlers for groups of -exceptions ("BaseExceptionGroup" instances). A "try" statement can -have either "except" or "except*" clauses, but not both. The exception -type for matching is mandatory in the case of "except*", so "except*:" -is a syntax error. The type is interpreted as in the case of "except", -but matching is performed on the exceptions contained in the group -that is being handled. An "TypeError" is raised if a matching type is -a subclass of "BaseExceptionGroup", because that would have ambiguous -semantics. - -When an exception group is raised in the try block, each "except*" -clause splits (see "split()") it into the subgroups of matching and -non-matching exceptions. If the matching subgroup is not empty, it -becomes the handled exception (the value returned from -"sys.exception()") and assigned to the target of the "except*" clause -(if there is one). Then, the body of the "except*" clause executes. If -the non-matching subgroup is not empty, it is processed by the next -"except*" in the same manner. This continues until all exceptions in -the group have been matched, or the last "except*" clause has run. - -After all "except*" clauses execute, the group of unhandled exceptions -is merged with any exceptions that were raised or re-raised from -within "except*" clauses. This merged exception group propagates on.: - - >>> try: - ... raise ExceptionGroup("eg", - ... [ValueError(1), TypeError(2), OSError(3), OSError(4)]) - ... except* TypeError as e: - ... print(f'caught {type(e)} with nested {e.exceptions}') - ... except* OSError as e: - ... print(f'caught {type(e)} with nested {e.exceptions}') - ... - caught <class 'ExceptionGroup'> with nested (TypeError(2),) - caught <class 'ExceptionGroup'> with nested (OSError(3), OSError(4)) - + Exception Group Traceback (most recent call last): - | File "<doctest default[0]>", line 2, in <module> - | raise ExceptionGroup("eg", - | [ValueError(1), TypeError(2), OSError(3), OSError(4)]) - | ExceptionGroup: eg (1 sub-exception) - +-+---------------- 1 ---------------- - | ValueError: 1 - +------------------------------------ - -If the exception raised from the "try" block is not an exception group -and its type matches one of the "except*" clauses, it is caught and -wrapped by an exception group with an empty message string. This -ensures that the type of the target "e" is consistently -"BaseExceptionGroup": - - >>> try: - ... raise BlockingIOError - ... except* BlockingIOError as e: - ... print(repr(e)) - ... - ExceptionGroup('', (BlockingIOError(),)) - -"break", "continue" and "return" cannot appear in an "except*" clause. - - -"else" clause -============= - -The optional "else" clause is executed if the control flow leaves the -"try" suite, no exception was raised, and no "return", "continue", or -"break" statement was executed. Exceptions in the "else" clause are -not handled by the preceding "except" clauses. - - -"finally" clause -================ - -If "finally" is present, it specifies a ‘cleanup’ handler. The "try" -clause is executed, including any "except" and "else" clauses. If an -exception occurs in any of the clauses and is not handled, the -exception is temporarily saved. The "finally" clause is executed. If -there is a saved exception it is re-raised at the end of the "finally" -clause. If the "finally" clause raises another exception, the saved -exception is set as the context of the new exception. If the "finally" -clause executes a "return", "break" or "continue" statement, the saved -exception is discarded. For example, this function returns 42. - - def f(): - try: - 1/0 - finally: - return 42 - -The exception information is not available to the program during -execution of the "finally" clause. - -When a "return", "break" or "continue" statement is executed in the -"try" suite of a "try"…"finally" statement, the "finally" clause is -also executed ‘on the way out.’ - -The return value of a function is determined by the last "return" -statement executed. Since the "finally" clause always executes, a -"return" statement executed in the "finally" clause will always be the -last one executed. The following function returns ‘finally’. - - def foo(): - try: - return 'try' - finally: - return 'finally' - -Changed in version 3.8: Prior to Python 3.8, a "continue" statement -was illegal in the "finally" clause due to a problem with the -implementation. - -Changed in version 3.14: The compiler emits a "SyntaxWarning" when a -"return", "break" or "continue" appears in a "finally" block (see -**PEP 765**). -''', - 'types': r'''The standard type hierarchy -*************************** - -Below is a list of the types that are built into Python. Extension -modules (written in C, Java, or other languages, depending on the -implementation) can define additional types. Future versions of -Python may add types to the type hierarchy (e.g., rational numbers, -efficiently stored arrays of integers, etc.), although such additions -will often be provided via the standard library instead. - -Some of the type descriptions below contain a paragraph listing -‘special attributes.’ These are attributes that provide access to the -implementation and are not intended for general use. Their definition -may change in the future. - - -None -==== - -This type has a single value. There is a single object with this -value. This object is accessed through the built-in name "None". It is -used to signify the absence of a value in many situations, e.g., it is -returned from functions that don’t explicitly return anything. Its -truth value is false. - - -NotImplemented -============== - -This type has a single value. There is a single object with this -value. This object is accessed through the built-in name -"NotImplemented". Numeric methods and rich comparison methods should -return this value if they do not implement the operation for the -operands provided. (The interpreter will then try the reflected -operation, or some other fallback, depending on the operator.) It -should not be evaluated in a boolean context. - -See Implementing the arithmetic operations for more details. - -Changed in version 3.9: Evaluating "NotImplemented" in a boolean -context was deprecated. - -Changed in version 3.14: Evaluating "NotImplemented" in a boolean -context now raises a "TypeError". It previously evaluated to "True" -and emitted a "DeprecationWarning" since Python 3.9. - - -Ellipsis -======== - -This type has a single value. There is a single object with this -value. This object is accessed through the literal "..." or the built- -in name "Ellipsis". Its truth value is true. - - -"numbers.Number" -================ - -These are created by numeric literals and returned as results by -arithmetic operators and arithmetic built-in functions. Numeric -objects are immutable; once created their value never changes. Python -numbers are of course strongly related to mathematical numbers, but -subject to the limitations of numerical representation in computers. - -The string representations of the numeric classes, computed by -"__repr__()" and "__str__()", have the following properties: - -* They are valid numeric literals which, when passed to their class - constructor, produce an object having the value of the original - numeric. - -* The representation is in base 10, when possible. - -* Leading zeros, possibly excepting a single zero before a decimal - point, are not shown. - -* Trailing zeros, possibly excepting a single zero after a decimal - point, are not shown. - -* A sign is shown only when the number is negative. - -Python distinguishes between integers, floating-point numbers, and -complex numbers: - - -"numbers.Integral" ------------------- - -These represent elements from the mathematical set of integers -(positive and negative). - -Note: - - The rules for integer representation are intended to give the most - meaningful interpretation of shift and mask operations involving - negative integers. - -There are two types of integers: - -Integers ("int") - These represent numbers in an unlimited range, subject to available - (virtual) memory only. For the purpose of shift and mask - operations, a binary representation is assumed, and negative - numbers are represented in a variant of 2’s complement which gives - the illusion of an infinite string of sign bits extending to the - left. - -Booleans ("bool") - These represent the truth values False and True. The two objects - representing the values "False" and "True" are the only Boolean - objects. The Boolean type is a subtype of the integer type, and - Boolean values behave like the values 0 and 1, respectively, in - almost all contexts, the exception being that when converted to a - string, the strings ""False"" or ""True"" are returned, - respectively. - - -"numbers.Real" ("float") ------------------------- - -These represent machine-level double precision floating-point numbers. -You are at the mercy of the underlying machine architecture (and C or -Java implementation) for the accepted range and handling of overflow. -Python does not support single-precision floating-point numbers; the -savings in processor and memory usage that are usually the reason for -using these are dwarfed by the overhead of using objects in Python, so -there is no reason to complicate the language with two kinds of -floating-point numbers. - - -"numbers.Complex" ("complex") ------------------------------ - -These represent complex numbers as a pair of machine-level double -precision floating-point numbers. The same caveats apply as for -floating-point numbers. The real and imaginary parts of a complex -number "z" can be retrieved through the read-only attributes "z.real" -and "z.imag". - - -Sequences -========= - -These represent finite ordered sets indexed by non-negative numbers. -The built-in function "len()" returns the number of items of a -sequence. When the length of a sequence is *n*, the index set contains -the numbers 0, 1, …, *n*-1. Item *i* of sequence *a* is selected by -"a[i]". Some sequences, including built-in sequences, interpret -negative subscripts by adding the sequence length. For example, -"a[-2]" equals "a[n-2]", the second to last item of sequence a with -length "n". - -The resulting value must be a nonnegative integer less than the number -of items in the sequence. If it is not, an "IndexError" is raised. - -Sequences also support slicing: "a[start:stop]" selects all items with -index *k* such that *start* "<=" *k* "<" *stop*. When used as an -expression, a slice is a sequence of the same type. The comment above -about negative subscripts also applies to negative slice positions. -Note that no error is raised if a slice position is less than zero or -larger than the length of the sequence. - -If *start* is missing or "None", slicing behaves as if *start* was -zero. If *stop* is missing or "None", slicing behaves as if *stop* was -equal to the length of the sequence. - -Some sequences also support “extended slicing” with a third “step” -parameter: "a[i:j:k]" selects all items of *a* with index *x* where "x -= i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*. - -Sequences are distinguished according to their mutability: - - -Immutable sequences -------------------- - -An object of an immutable sequence type cannot change once it is -created. (If the object contains references to other objects, these -other objects may be mutable and may be changed; however, the -collection of objects directly referenced by an immutable object -cannot change.) - -The following types are immutable sequences: - -Strings - A string ("str") is a sequence of values that represent - *characters*, or more formally, *Unicode code points*. All the code - points in the range "0" to "0x10FFFF" can be represented in a - string. - - Python doesn’t have a dedicated *character* type. Instead, every - code point in the string is represented as a string object with - length "1". - - The built-in function "ord()" converts a code point from its string - form to an integer in the range "0" to "0x10FFFF"; "chr()" converts - an integer in the range "0" to "0x10FFFF" to the corresponding - length "1" string object. "str.encode()" can be used to convert a - "str" to "bytes" using the given text encoding, and - "bytes.decode()" can be used to achieve the opposite. - -Tuples - The items of a "tuple" are arbitrary Python objects. Tuples of two - or more items are formed by comma-separated lists of expressions. - A tuple of one item (a ‘singleton’) can be formed by affixing a - comma to an expression (an expression by itself does not create a - tuple, since parentheses must be usable for grouping of - expressions). An empty tuple can be formed by an empty pair of - parentheses. - -Bytes - A "bytes" object is an immutable array. The items are 8-bit bytes, - represented by integers in the range 0 <= x < 256. Bytes literals - (like "b'abc'") and the built-in "bytes()" constructor can be used - to create bytes objects. Also, bytes objects can be decoded to - strings via the "decode()" method. - - -Mutable sequences ------------------ - -Mutable sequences can be changed after they are created. The -subscription and slicing notations can be used as the target of -assignment and "del" (delete) statements. - -Note: - - The "collections" and "array" module provide additional examples of - mutable sequence types. - -There are currently two intrinsic mutable sequence types: - -Lists - The items of a list are arbitrary Python objects. Lists are formed - by placing a comma-separated list of expressions in square - brackets. (Note that there are no special cases needed to form - lists of length 0 or 1.) - -Byte Arrays - A bytearray object is a mutable array. They are created by the - built-in "bytearray()" constructor. Aside from being mutable (and - hence unhashable), byte arrays otherwise provide the same interface - and functionality as immutable "bytes" objects. - - -Set types -========= - -These represent unordered, finite sets of unique, immutable objects. -As such, they cannot be indexed by any subscript. However, they can be -iterated over, and the built-in function "len()" returns the number of -items in a set. Common uses for sets are fast membership testing, -removing duplicates from a sequence, and computing mathematical -operations such as intersection, union, difference, and symmetric -difference. - -For set elements, the same immutability rules apply as for dictionary -keys. Note that numeric types obey the normal rules for numeric -comparison: if two numbers compare equal (e.g., "1" and "1.0"), only -one of them can be contained in a set. - -There are currently two intrinsic set types: - -Sets - These represent a mutable set. They are created by the built-in - "set()" constructor and can be modified afterwards by several - methods, such as "add()". - -Frozen sets - These represent an immutable set. They are created by the built-in - "frozenset()" constructor. As a frozenset is immutable and - *hashable*, it can be used again as an element of another set, or - as a dictionary key. - - -Mappings -======== - -These represent finite sets of objects indexed by arbitrary index -sets. The subscript notation "a[k]" selects the item indexed by "k" -from the mapping "a"; this can be used in expressions and as the -target of assignments or "del" statements. The built-in function -"len()" returns the number of items in a mapping. - -There is currently a single intrinsic mapping type: - - -Dictionaries ------------- - -These represent finite sets of objects indexed by nearly arbitrary -values. The only types of values not acceptable as keys are values -containing lists or dictionaries or other mutable types that are -compared by value rather than by object identity, the reason being -that the efficient implementation of dictionaries requires a key’s -hash value to remain constant. Numeric types used for keys obey the -normal rules for numeric comparison: if two numbers compare equal -(e.g., "1" and "1.0") then they can be used interchangeably to index -the same dictionary entry. - -Dictionaries preserve insertion order, meaning that keys will be -produced in the same order they were added sequentially over the -dictionary. Replacing an existing key does not change the order, -however removing a key and re-inserting it will add it to the end -instead of keeping its old place. - -Dictionaries are mutable; they can be created by the "{}" notation -(see section Dictionary displays). - -The extension modules "dbm.ndbm" and "dbm.gnu" provide additional -examples of mapping types, as does the "collections" module. - -Changed in version 3.7: Dictionaries did not preserve insertion order -in versions of Python before 3.6. In CPython 3.6, insertion order was -preserved, but it was considered an implementation detail at that time -rather than a language guarantee. - - -Callable types -============== - -These are the types to which the function call operation (see section -Calls) can be applied: - - -User-defined functions ----------------------- - -A user-defined function object is created by a function definition -(see section Function definitions). It should be called with an -argument list containing the same number of items as the function’s -formal parameter list. - - -Special read-only attributes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -+----------------------------------------------------+----------------------------------------------------+ -| Attribute | Meaning | -|====================================================|====================================================| -| function.__builtins__ | A reference to the "dictionary" that holds the | -| | function’s builtins namespace. Added in version | -| | 3.10. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__globals__ | A reference to the "dictionary" that holds the | -| | function’s global variables – the global namespace | -| | of the module in which the function was defined. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__closure__ | "None" or a "tuple" of cells that contain bindings | -| | for the names specified in the "co_freevars" | -| | attribute of the function’s "code object". A cell | -| | object has the attribute "cell_contents". This can | -| | be used to get the value of the cell, as well as | -| | set the value. | -+----------------------------------------------------+----------------------------------------------------+ - - -Special writable attributes -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Most of these attributes check the type of the assigned value: - -+----------------------------------------------------+----------------------------------------------------+ -| Attribute | Meaning | -|====================================================|====================================================| -| function.__doc__ | The function’s documentation string, or "None" if | -| | unavailable. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__name__ | The function’s name. See also: "__name__ | -| | attributes". | -+----------------------------------------------------+----------------------------------------------------+ -| function.__qualname__ | The function’s *qualified name*. See also: | -| | "__qualname__ attributes". Added in version 3.3. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__module__ | The name of the module the function was defined | -| | in, or "None" if unavailable. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__defaults__ | A "tuple" containing default *parameter* values | -| | for those parameters that have defaults, or "None" | -| | if no parameters have a default value. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__code__ | The code object representing the compiled function | -| | body. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__dict__ | The namespace supporting arbitrary function | -| | attributes. See also: "__dict__ attributes". | -+----------------------------------------------------+----------------------------------------------------+ -| function.__annotations__ | A "dictionary" containing annotations of | -| | *parameters*. The keys of the dictionary are the | -| | parameter names, and "'return'" for the return | -| | annotation, if provided. See also: | -| | "object.__annotations__". Changed in version | -| | 3.14: Annotations are now lazily evaluated. See | -| | **PEP 649**. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__annotate__ | The *annotate function* for this function, or | -| | "None" if the function has no annotations. See | -| | "object.__annotate__". Added in version 3.14. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__kwdefaults__ | A "dictionary" containing defaults for keyword- | -| | only *parameters*. | -+----------------------------------------------------+----------------------------------------------------+ -| function.__type_params__ | A "tuple" containing the type parameters of a | -| | generic function. Added in version 3.12. | -+----------------------------------------------------+----------------------------------------------------+ - -Function objects also support getting and setting arbitrary -attributes, which can be used, for example, to attach metadata to -functions. Regular attribute dot-notation is used to get and set such -attributes. - -**CPython implementation detail:** CPython’s current implementation -only supports function attributes on user-defined functions. Function -attributes on built-in functions may be supported in the future. - -Additional information about a function’s definition can be retrieved -from its code object (accessible via the "__code__" attribute). - - -Instance methods ----------------- - -An instance method object combines a class, a class instance and any -callable object (normally a user-defined function). - -Special read-only attributes: - -+----------------------------------------------------+----------------------------------------------------+ -| method.__self__ | Refers to the class instance object to which the | -| | method is bound | -+----------------------------------------------------+----------------------------------------------------+ -| method.__func__ | Refers to the original function object | -+----------------------------------------------------+----------------------------------------------------+ -| method.__doc__ | The method’s documentation (same as | -| | "method.__func__.__doc__"). A "string" if the | -| | original function had a docstring, else "None". | -+----------------------------------------------------+----------------------------------------------------+ -| method.__name__ | The name of the method (same as | -| | "method.__func__.__name__") | -+----------------------------------------------------+----------------------------------------------------+ -| method.__module__ | The name of the module the method was defined in, | -| | or "None" if unavailable. | -+----------------------------------------------------+----------------------------------------------------+ - -Methods also support accessing (but not setting) the arbitrary -function attributes on the underlying function object. - -User-defined method objects may be created when getting an attribute -of a class (perhaps via an instance of that class), if that attribute -is a user-defined function object or a "classmethod" object. - -When an instance method object is created by retrieving a user-defined -function object from a class via one of its instances, its "__self__" -attribute is the instance, and the method object is said to be -*bound*. The new method’s "__func__" attribute is the original -function object. - -When an instance method object is created by retrieving a -"classmethod" object from a class or instance, its "__self__" -attribute is the class itself, and its "__func__" attribute is the -function object underlying the class method. - -When an instance method object is called, the underlying function -("__func__") is called, inserting the class instance ("__self__") in -front of the argument list. For instance, when "C" is a class which -contains a definition for a function "f()", and "x" is an instance of -"C", calling "x.f(1)" is equivalent to calling "C.f(x, 1)". - -When an instance method object is derived from a "classmethod" object, -the “class instance” stored in "__self__" will actually be the class -itself, so that calling either "x.f(1)" or "C.f(1)" is equivalent to -calling "f(C,1)" where "f" is the underlying function. - -It is important to note that user-defined functions which are -attributes of a class instance are not converted to bound methods; -this *only* happens when the function is an attribute of the class. - - -Generator functions -------------------- - -A function or method which uses the "yield" statement (see section The -yield statement) is called a *generator function*. Such a function, -when called, always returns an *iterator* object which can be used to -execute the body of the function: calling the iterator’s -"iterator.__next__()" method will cause the function to execute until -it provides a value using the "yield" statement. When the function -executes a "return" statement or falls off the end, a "StopIteration" -exception is raised and the iterator will have reached the end of the -set of values to be returned. - - -Coroutine functions -------------------- - -A function or method which is defined using "async def" is called a -*coroutine function*. Such a function, when called, returns a -*coroutine* object. It may contain "await" expressions, as well as -"async with" and "async for" statements. See also the Coroutine -Objects section. - - -Asynchronous generator functions --------------------------------- - -A function or method which is defined using "async def" and which uses -the "yield" statement is called a *asynchronous generator function*. -Such a function, when called, returns an *asynchronous iterator* -object which can be used in an "async for" statement to execute the -body of the function. - -Calling the asynchronous iterator’s "aiterator.__anext__" method will -return an *awaitable* which when awaited will execute until it -provides a value using the "yield" expression. When the function -executes an empty "return" statement or falls off the end, a -"StopAsyncIteration" exception is raised and the asynchronous iterator -will have reached the end of the set of values to be yielded. - - -Built-in functions ------------------- - -A built-in function object is a wrapper around a C function. Examples -of built-in functions are "len()" and "math.sin()" ("math" is a -standard built-in module). The number and type of the arguments are -determined by the C function. Special read-only attributes: - -* "__doc__" is the function’s documentation string, or "None" if - unavailable. See "function.__doc__". - -* "__name__" is the function’s name. See "function.__name__". - -* "__self__" is set to "None" (but see the next item). - -* "__module__" is the name of the module the function was defined in - or "None" if unavailable. See "function.__module__". - - -Built-in methods ----------------- - -This is really a different disguise of a built-in function, this time -containing an object passed to the C function as an implicit extra -argument. An example of a built-in method is "alist.append()", -assuming *alist* is a list object. In this case, the special read-only -attribute "__self__" is set to the object denoted by *alist*. (The -attribute has the same semantics as it does with "other instance -methods".) - - -Classes -------- - -Classes are callable. These objects normally act as factories for new -instances of themselves, but variations are possible for class types -that override "__new__()". The arguments of the call are passed to -"__new__()" and, in the typical case, to "__init__()" to initialize -the new instance. - - -Class Instances ---------------- - -Instances of arbitrary classes can be made callable by defining a -"__call__()" method in their class. - - -Modules -======= - -Modules are a basic organizational unit of Python code, and are -created by the import system as invoked either by the "import" -statement, or by calling functions such as "importlib.import_module()" -and built-in "__import__()". A module object has a namespace -implemented by a "dictionary" object (this is the dictionary -referenced by the "__globals__" attribute of functions defined in the -module). Attribute references are translated to lookups in this -dictionary, e.g., "m.x" is equivalent to "m.__dict__["x"]". A module -object does not contain the code object used to initialize the module -(since it isn’t needed once the initialization is done). - -Attribute assignment updates the module’s namespace dictionary, e.g., -"m.x = 1" is equivalent to "m.__dict__["x"] = 1". - - -Import-related attributes on module objects -------------------------------------------- - -Module objects have the following attributes that relate to the import -system. When a module is created using the machinery associated with -the import system, these attributes are filled in based on the -module’s *spec*, before the *loader* executes and loads the module. - -To create a module dynamically rather than using the import system, -it’s recommended to use "importlib.util.module_from_spec()", which -will set the various import-controlled attributes to appropriate -values. It’s also possible to use the "types.ModuleType" constructor -to create modules directly, but this technique is more error-prone, as -most attributes must be manually set on the module object after it has -been created when using this approach. - -Caution: - - With the exception of "__name__", it is **strongly** recommended - that you rely on "__spec__" and its attributes instead of any of the - other individual attributes listed in this subsection. Note that - updating an attribute on "__spec__" will not update the - corresponding attribute on the module itself: - - >>> import typing - >>> typing.__name__, typing.__spec__.name - ('typing', 'typing') - >>> typing.__spec__.name = 'spelling' - >>> typing.__name__, typing.__spec__.name - ('typing', 'spelling') - >>> typing.__name__ = 'keyboard_smashing' - >>> typing.__name__, typing.__spec__.name - ('keyboard_smashing', 'spelling') - -module.__name__ - - The name used to uniquely identify the module in the import system. - For a directly executed module, this will be set to ""__main__"". - - This attribute must be set to the fully qualified name of the - module. It is expected to match the value of - "module.__spec__.name". - -module.__spec__ - - A record of the module’s import-system-related state. - - Set to the "module spec" that was used when importing the module. - See Module specs for more details. - - Added in version 3.4. - -module.__package__ - - The *package* a module belongs to. - - If the module is top-level (that is, not a part of any specific - package) then the attribute should be set to "''" (the empty - string). Otherwise, it should be set to the name of the module’s - package (which can be equal to "module.__name__" if the module - itself is a package). See **PEP 366** for further details. - - This attribute is used instead of "__name__" to calculate explicit - relative imports for main modules. It defaults to "None" for - modules created dynamically using the "types.ModuleType" - constructor; use "importlib.util.module_from_spec()" instead to - ensure the attribute is set to a "str". - - It is **strongly** recommended that you use - "module.__spec__.parent" instead of "module.__package__". - "__package__" is now only used as a fallback if "__spec__.parent" - is not set, and this fallback path is deprecated. - - Changed in version 3.4: This attribute now defaults to "None" for - modules created dynamically using the "types.ModuleType" - constructor. Previously the attribute was optional. - - Changed in version 3.6: The value of "__package__" is expected to - be the same as "__spec__.parent". "__package__" is now only used as - a fallback during import resolution if "__spec__.parent" is not - defined. - - Changed in version 3.10: "ImportWarning" is raised if an import - resolution falls back to "__package__" instead of - "__spec__.parent". - - Changed in version 3.12: Raise "DeprecationWarning" instead of - "ImportWarning" when falling back to "__package__" during import - resolution. - - Deprecated since version 3.13, will be removed in version 3.15: - "__package__" will cease to be set or taken into consideration by - the import system or standard library. - -module.__loader__ - - The *loader* object that the import machinery used to load the - module. - - This attribute is mostly useful for introspection, but can be used - for additional loader-specific functionality, for example getting - data associated with a loader. - - "__loader__" defaults to "None" for modules created dynamically - using the "types.ModuleType" constructor; use - "importlib.util.module_from_spec()" instead to ensure the attribute - is set to a *loader* object. - - It is **strongly** recommended that you use - "module.__spec__.loader" instead of "module.__loader__". - - Changed in version 3.4: This attribute now defaults to "None" for - modules created dynamically using the "types.ModuleType" - constructor. Previously the attribute was optional. - - Deprecated since version 3.12, will be removed in version 3.16: - Setting "__loader__" on a module while failing to set - "__spec__.loader" is deprecated. In Python 3.16, "__loader__" will - cease to be set or taken into consideration by the import system or - the standard library. - -module.__path__ - - A (possibly empty) *sequence* of strings enumerating the locations - where the package’s submodules will be found. Non-package modules - should not have a "__path__" attribute. See __path__ attributes on - modules for more details. - - It is **strongly** recommended that you use - "module.__spec__.submodule_search_locations" instead of - "module.__path__". - -module.__file__ - -module.__cached__ - - "__file__" and "__cached__" are both optional attributes that may - or may not be set. Both attributes should be a "str" when they are - available. - - "__file__" indicates the pathname of the file from which the module - was loaded (if loaded from a file), or the pathname of the shared - library file for extension modules loaded dynamically from a shared - library. It might be missing for certain types of modules, such as - C modules that are statically linked into the interpreter, and the - import system may opt to leave it unset if it has no semantic - meaning (for example, a module loaded from a database). - - If "__file__" is set then the "__cached__" attribute might also be - set, which is the path to any compiled version of the code (for - example, a byte-compiled file). The file does not need to exist to - set this attribute; the path can simply point to where the compiled - file *would* exist (see **PEP 3147**). - - Note that "__cached__" may be set even if "__file__" is not set. - However, that scenario is quite atypical. Ultimately, the *loader* - is what makes use of the module spec provided by the *finder* (from - which "__file__" and "__cached__" are derived). So if a loader can - load from a cached module but otherwise does not load from a file, - that atypical scenario may be appropriate. - - It is **strongly** recommended that you use - "module.__spec__.cached" instead of "module.__cached__". - - Deprecated since version 3.13, will be removed in version 3.15: - Setting "__cached__" on a module while failing to set - "__spec__.cached" is deprecated. In Python 3.15, "__cached__" will - cease to be set or taken into consideration by the import system or - standard library. - - -Other writable attributes on module objects -------------------------------------------- - -As well as the import-related attributes listed above, module objects -also have the following writable attributes: - -module.__doc__ - - The module’s documentation string, or "None" if unavailable. See - also: "__doc__ attributes". - -module.__annotations__ - - A dictionary containing *variable annotations* collected during - module body execution. For best practices on working with - "__annotations__", see "annotationlib". - - Changed in version 3.14: Annotations are now lazily evaluated. See - **PEP 649**. - -module.__annotate__ - - The *annotate function* for this module, or "None" if the module - has no annotations. See also: "__annotate__" attributes. - - Added in version 3.14. - - -Module dictionaries -------------------- - -Module objects also have the following special read-only attribute: - -module.__dict__ - - The module’s namespace as a dictionary object. Uniquely among the - attributes listed here, "__dict__" cannot be accessed as a global - variable from within a module; it can only be accessed as an - attribute on module objects. - - **CPython implementation detail:** Because of the way CPython - clears module dictionaries, the module dictionary will be cleared - when the module falls out of scope even if the dictionary still has - live references. To avoid this, copy the dictionary or keep the - module around while using its dictionary directly. - - -Custom classes -============== - -Custom class types are typically created by class definitions (see -section Class definitions). A class has a namespace implemented by a -dictionary object. Class attribute references are translated to -lookups in this dictionary, e.g., "C.x" is translated to -"C.__dict__["x"]" (although there are a number of hooks which allow -for other means of locating attributes). When the attribute name is -not found there, the attribute search continues in the base classes. -This search of the base classes uses the C3 method resolution order -which behaves correctly even in the presence of ‘diamond’ inheritance -structures where there are multiple inheritance paths leading back to -a common ancestor. Additional details on the C3 MRO used by Python can -be found at The Python 2.3 Method Resolution Order. - -When a class attribute reference (for class "C", say) would yield a -class method object, it is transformed into an instance method object -whose "__self__" attribute is "C". When it would yield a -"staticmethod" object, it is transformed into the object wrapped by -the static method object. See section Implementing Descriptors for -another way in which attributes retrieved from a class may differ from -those actually contained in its "__dict__". - -Class attribute assignments update the class’s dictionary, never the -dictionary of a base class. - -A class object can be called (see above) to yield a class instance -(see below). - - -Special attributes ------------------- - -+----------------------------------------------------+----------------------------------------------------+ -| Attribute | Meaning | -|====================================================|====================================================| -| type.__name__ | The class’s name. See also: "__name__ attributes". | -+----------------------------------------------------+----------------------------------------------------+ -| type.__qualname__ | The class’s *qualified name*. See also: | -| | "__qualname__ attributes". | -+----------------------------------------------------+----------------------------------------------------+ -| type.__module__ | The name of the module in which the class was | -| | defined. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__dict__ | A "mapping proxy" providing a read-only view of | -| | the class’s namespace. See also: "__dict__ | -| | attributes". | -+----------------------------------------------------+----------------------------------------------------+ -| type.__bases__ | A "tuple" containing the class’s bases. In most | -| | cases, for a class defined as "class X(A, B, C)", | -| | "X.__bases__" will be exactly equal to "(A, B, | -| | C)". | -+----------------------------------------------------+----------------------------------------------------+ -| type.__base__ | **CPython implementation detail:** The single base | -| | class in the inheritance chain that is responsible | -| | for the memory layout of instances. This attribute | -| | corresponds to "tp_base" at the C level. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__doc__ | The class’s documentation string, or "None" if | -| | undefined. Not inherited by subclasses. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__annotations__ | A dictionary containing *variable annotations* | -| | collected during class body execution. See also: | -| | "__annotations__ attributes". For best practices | -| | on working with "__annotations__", please see | -| | "annotationlib". Use | -| | "annotationlib.get_annotations()" instead of | -| | accessing this attribute directly. Warning: | -| | Accessing the "__annotations__" attribute directly | -| | on a class object may return annotations for the | -| | wrong class, specifically in certain cases where | -| | the class, its base class, or a metaclass is | -| | defined under "from __future__ import | -| | annotations". See **749** for details.This | -| | attribute does not exist on certain builtin | -| | classes. On user-defined classes without | -| | "__annotations__", it is an empty dictionary. | -| | Changed in version 3.14: Annotations are now | -| | lazily evaluated. See **PEP 649**. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__annotate__() | The *annotate function* for this class, or "None" | -| | if the class has no annotations. See also: | -| | "__annotate__ attributes". Added in version 3.14. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__type_params__ | A "tuple" containing the type parameters of a | -| | generic class. Added in version 3.12. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__static_attributes__ | A "tuple" containing names of attributes of this | -| | class which are assigned through "self.X" from any | -| | function in its body. Added in version 3.13. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__firstlineno__ | The line number of the first line of the class | -| | definition, including decorators. Setting the | -| | "__module__" attribute removes the | -| | "__firstlineno__" item from the type’s dictionary. | -| | Added in version 3.13. | -+----------------------------------------------------+----------------------------------------------------+ -| type.__mro__ | The "tuple" of classes that are considered when | -| | looking for base classes during method resolution. | -+----------------------------------------------------+----------------------------------------------------+ - - -Special methods ---------------- - -In addition to the special attributes described above, all Python -classes also have the following two methods available: - -type.mro() - - This method can be overridden by a metaclass to customize the - method resolution order for its instances. It is called at class - instantiation, and its result is stored in "__mro__". - -type.__subclasses__() - - Each class keeps a list of weak references to its immediate - subclasses. This method returns a list of all those references - still alive. The list is in definition order. Example: - - >>> class A: pass - >>> class B(A): pass - >>> A.__subclasses__() - [<class 'B'>] - - -Class instances -=============== - -A class instance is created by calling a class object (see above). A -class instance has a namespace implemented as a dictionary which is -the first place in which attribute references are searched. When an -attribute is not found there, and the instance’s class has an -attribute by that name, the search continues with the class -attributes. If a class attribute is found that is a user-defined -function object, it is transformed into an instance method object -whose "__self__" attribute is the instance. Static method and class -method objects are also transformed; see above under “Classes”. See -section Implementing Descriptors for another way in which attributes -of a class retrieved via its instances may differ from the objects -actually stored in the class’s "__dict__". If no class attribute is -found, and the object’s class has a "__getattr__()" method, that is -called to satisfy the lookup. - -Attribute assignments and deletions update the instance’s dictionary, -never a class’s dictionary. If the class has a "__setattr__()" or -"__delattr__()" method, this is called instead of updating the -instance dictionary directly. - -Class instances can pretend to be numbers, sequences, or mappings if -they have methods with certain special names. See section Special -method names. - - -Special attributes ------------------- - -object.__class__ - - The class to which a class instance belongs. - -object.__dict__ - - A dictionary or other mapping object used to store an object’s - (writable) attributes. Not all instances have a "__dict__" - attribute; see the section on __slots__ for more details. - - -I/O objects (also known as file objects) -======================================== - -A *file object* represents an open file. Various shortcuts are -available to create file objects: the "open()" built-in function, and -also "os.popen()", "os.fdopen()", and the "makefile()" method of -socket objects (and perhaps by other functions or methods provided by -extension modules). - -File objects implement common methods, listed below, to simplify usage -in generic code. They are expected to be With Statement Context -Managers. - -The objects "sys.stdin", "sys.stdout" and "sys.stderr" are initialized -to file objects corresponding to the interpreter’s standard input, -output and error streams; they are all open in text mode and therefore -follow the interface defined by the "io.TextIOBase" abstract class. - -file.read(size=-1, /) - - Retrieve up to *size* data from the file. As a convenience if - *size* is unspecified or -1 retrieve all data available. - -file.write(data, /) - - Store *data* to the file. - -file.close() - - Flush any buffers and close the underlying file. - - -Internal types -============== - -A few types used internally by the interpreter are exposed to the -user. Their definitions may change with future versions of the -interpreter, but they are mentioned here for completeness. - - -Code objects ------------- - -Code objects represent *byte-compiled* executable Python code, or -*bytecode*. The difference between a code object and a function object -is that the function object contains an explicit reference to the -function’s globals (the module in which it was defined), while a code -object contains no context; also the default argument values are -stored in the function object, not in the code object (because they -represent values calculated at run-time). Unlike function objects, -code objects are immutable and contain no references (directly or -indirectly) to mutable objects. - - -Special read-only attributes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_name | The function name | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_qualname | The fully qualified function name Added in | -| | version 3.11. | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_argcount | The total number of positional *parameters* | -| | (including positional-only parameters and | -| | parameters with default values) that the function | -| | has | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_posonlyargcount | The number of positional-only *parameters* | -| | (including arguments with default values) that the | -| | function has | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_kwonlyargcount | The number of keyword-only *parameters* (including | -| | arguments with default values) that the function | -| | has | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_nlocals | The number of local variables used by the function | -| | (including parameters) | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_varnames | A "tuple" containing the names of the local | -| | variables in the function (starting with the | -| | parameter names) | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_cellvars | A "tuple" containing the names of local variables | -| | that are referenced from at least one *nested | -| | scope* inside the function | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_freevars | A "tuple" containing the names of *free (closure) | -| | variables* that a *nested scope* references in an | -| | outer scope. See also "function.__closure__". | -| | Note: references to global and builtin names are | -| | *not* included. | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_code | A string representing the sequence of *bytecode* | -| | instructions in the function | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_consts | A "tuple" containing the literals used by the | -| | *bytecode* in the function | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_names | A "tuple" containing the names used by the | -| | *bytecode* in the function | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_filename | The name of the file from which the code was | -| | compiled | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_firstlineno | The line number of the first line of the function | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_lnotab | A string encoding the mapping from *bytecode* | -| | offsets to line numbers. For details, see the | -| | source code of the interpreter. Deprecated since | -| | version 3.12: This attribute of code objects is | -| | deprecated, and may be removed in Python 3.15. | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_stacksize | The required stack size of the code object | -+----------------------------------------------------+----------------------------------------------------+ -| codeobject.co_flags | An "integer" encoding a number of flags for the | -| | interpreter. | -+----------------------------------------------------+----------------------------------------------------+ - -The following flag bits are defined for "co_flags": bit "0x04" is set -if the function uses the "*arguments" syntax to accept an arbitrary -number of positional arguments; bit "0x08" is set if the function uses -the "**keywords" syntax to accept arbitrary keyword arguments; bit -"0x20" is set if the function is a generator. See Code Objects Bit -Flags for details on the semantics of each flags that might be -present. - -Future feature declarations (for example, "from __future__ import -division") also use bits in "co_flags" to indicate whether a code -object was compiled with a particular feature enabled. See -"compiler_flag". - -Other bits in "co_flags" are reserved for internal use. - -If a code object represents a function and has a docstring, the -"CO_HAS_DOCSTRING" bit is set in "co_flags" and the first item in -"co_consts" is the docstring of the function. - - -Methods on code objects -~~~~~~~~~~~~~~~~~~~~~~~ - -codeobject.co_positions() - - Returns an iterable over the source code positions of each - *bytecode* instruction in the code object. - - The iterator returns "tuple"s containing the "(start_line, - end_line, start_column, end_column)". The *i-th* tuple corresponds - to the position of the source code that compiled to the *i-th* code - unit. Column information is 0-indexed utf-8 byte offsets on the - given source line. - - This positional information can be missing. A non-exhaustive lists - of cases where this may happen: - - * Running the interpreter with "-X" "no_debug_ranges". - - * Loading a pyc file compiled while using "-X" "no_debug_ranges". - - * Position tuples corresponding to artificial instructions. - - * Line and column numbers that can’t be represented due to - implementation specific limitations. - - When this occurs, some or all of the tuple elements can be "None". - - Added in version 3.11. - - Note: - - This feature requires storing column positions in code objects - which may result in a small increase of disk usage of compiled - Python files or interpreter memory usage. To avoid storing the - extra information and/or deactivate printing the extra traceback - information, the "-X" "no_debug_ranges" command line flag or the - "PYTHONNODEBUGRANGES" environment variable can be used. - -codeobject.co_lines() - - Returns an iterator that yields information about successive ranges - of *bytecode*s. Each item yielded is a "(start, end, lineno)" - "tuple": - - * "start" (an "int") represents the offset (inclusive) of the start - of the *bytecode* range - - * "end" (an "int") represents the offset (exclusive) of the end of - the *bytecode* range - - * "lineno" is an "int" representing the line number of the - *bytecode* range, or "None" if the bytecodes in the given range - have no line number - - The items yielded will have the following properties: - - * The first range yielded will have a "start" of 0. - - * The "(start, end)" ranges will be non-decreasing and consecutive. - That is, for any pair of "tuple"s, the "start" of the second will - be equal to the "end" of the first. - - * No range will be backwards: "end >= start" for all triples. - - * The last "tuple" yielded will have "end" equal to the size of the - *bytecode*. - - Zero-width ranges, where "start == end", are allowed. Zero-width - ranges are used for lines that are present in the source code, but - have been eliminated by the *bytecode* compiler. - - Added in version 3.10. - - See also: - - **PEP 626** - Precise line numbers for debugging and other tools. - The PEP that introduced the "co_lines()" method. - -codeobject.replace(**kwargs) - - Return a copy of the code object with new values for the specified - fields. - - Code objects are also supported by the generic function - "copy.replace()". - - Added in version 3.8. - - -Frame objects -------------- - -Frame objects represent execution frames. They may occur in traceback -objects, and are also passed to registered trace functions. - - -Special read-only attributes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_back | Points to the previous stack frame (towards the | -| | caller), or "None" if this is the bottom stack | -| | frame | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_code | The code object being executed in this frame. | -| | Accessing this attribute raises an auditing event | -| | "object.__getattr__" with arguments "obj" and | -| | ""f_code"". | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_locals | The mapping used by the frame to look up local | -| | variables. If the frame refers to an *optimized | -| | scope*, this may return a write-through proxy | -| | object. Changed in version 3.13: Return a proxy | -| | for optimized scopes. | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_globals | The dictionary used by the frame to look up global | -| | variables | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_builtins | The dictionary used by the frame to look up built- | -| | in (intrinsic) names | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_lasti | The “precise instruction” of the frame object | -| | (this is an index into the *bytecode* string of | -| | the code object) | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_generator | The *generator* or *coroutine* object that owns | -| | this frame, or "None" if the frame is a normal | -| | function. Added in version 3.14. | -+----------------------------------------------------+----------------------------------------------------+ - - -Special writable attributes -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_trace | If not "None", this is a function called for | -| | various events during code execution (this is used | -| | by debuggers). Normally an event is triggered for | -| | each new source line (see "f_trace_lines"). | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_trace_lines | Set this attribute to "False" to disable | -| | triggering a tracing event for each source line. | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_trace_opcodes | Set this attribute to "True" to allow per-opcode | -| | events to be requested. Note that this may lead to | -| | undefined interpreter behaviour if exceptions | -| | raised by the trace function escape to the | -| | function being traced. | -+----------------------------------------------------+----------------------------------------------------+ -| frame.f_lineno | The current line number of the frame – writing to | -| | this from within a trace function jumps to the | -| | given line (only for the bottom-most frame). A | -| | debugger can implement a Jump command (aka Set | -| | Next Statement) by writing to this attribute. | -+----------------------------------------------------+----------------------------------------------------+ - - -Frame object methods -~~~~~~~~~~~~~~~~~~~~ - -Frame objects support one method: - -frame.clear() - - This method clears all references to local variables held by the - frame. Also, if the frame belonged to a *generator*, the generator - is finalized. This helps break reference cycles involving frame - objects (for example when catching an exception and storing its - traceback for later use). - - "RuntimeError" is raised if the frame is currently executing or - suspended. - - Added in version 3.4. - - Changed in version 3.13: Attempting to clear a suspended frame - raises "RuntimeError" (as has always been the case for executing - frames). - - -Traceback objects ------------------ - -Traceback objects represent the stack trace of an exception. A -traceback object is implicitly created when an exception occurs, and -may also be explicitly created by calling "types.TracebackType". - -Changed in version 3.7: Traceback objects can now be explicitly -instantiated from Python code. - -For implicitly created tracebacks, when the search for an exception -handler unwinds the execution stack, at each unwound level a traceback -object is inserted in front of the current traceback. When an -exception handler is entered, the stack trace is made available to the -program. (See section The try statement.) It is accessible as the -third item of the tuple returned by "sys.exc_info()", and as the -"__traceback__" attribute of the caught exception. - -When the program contains no suitable handler, the stack trace is -written (nicely formatted) to the standard error stream; if the -interpreter is interactive, it is also made available to the user as -"sys.last_traceback". - -For explicitly created tracebacks, it is up to the creator of the -traceback to determine how the "tb_next" attributes should be linked -to form a full stack trace. - -Special read-only attributes: - -+----------------------------------------------------+----------------------------------------------------+ -| traceback.tb_frame | Points to the execution frame of the current | -| | level. Accessing this attribute raises an | -| | auditing event "object.__getattr__" with arguments | -| | "obj" and ""tb_frame"". | -+----------------------------------------------------+----------------------------------------------------+ -| traceback.tb_lineno | Gives the line number where the exception occurred | -+----------------------------------------------------+----------------------------------------------------+ -| traceback.tb_lasti | Indicates the “precise instruction”. | -+----------------------------------------------------+----------------------------------------------------+ - -The line number and last instruction in the traceback may differ from -the line number of its frame object if the exception occurred in a -"try" statement with no matching except clause or with a "finally" -clause. - -traceback.tb_next - - The special writable attribute "tb_next" is the next level in the - stack trace (towards the frame where the exception occurred), or - "None" if there is no next level. - - Changed in version 3.7: This attribute is now writable - - -Slice objects -------------- - -Slice objects are used to represent slices for "__getitem__()" -methods. They are also created by the built-in "slice()" function. - -Special read-only attributes: "start" is the lower bound; "stop" is -the upper bound; "step" is the step value; each is "None" if omitted. -These attributes can have any type. - -Slice objects support one method: - -slice.indices(self, length) - - This method takes a single integer argument *length* and computes - information about the slice that the slice object would describe if - applied to a sequence of *length* items. It returns a tuple of - three integers; respectively these are the *start* and *stop* - indices and the *step* or stride length of the slice. Missing or - out-of-bounds indices are handled in a manner consistent with - regular slices. - - -Static method objects ---------------------- - -Static method objects provide a way of defeating the transformation of -function objects to method objects described above. A static method -object is a wrapper around any other object, usually a user-defined -method object. When a static method object is retrieved from a class -or a class instance, the object actually returned is the wrapped -object, which is not subject to any further transformation. Static -method objects are also callable. Static method objects are created by -the built-in "staticmethod()" constructor. - - -Class method objects --------------------- - -A class method object, like a static method object, is a wrapper -around another object that alters the way in which that object is -retrieved from classes and class instances. The behaviour of class -method objects upon such retrieval is described above, under “instance -methods”. Class method objects are created by the built-in -"classmethod()" constructor. -''', - 'typesfunctions': r'''Functions -********* - -Function objects are created by function definitions. The only -operation on a function object is to call it: "func(argument-list)". - -There are really two flavors of function objects: built-in functions -and user-defined functions. Both support the same operation (to call -the function), but the implementation is different, hence the -different object types. - -See Function definitions for more information. -''', - 'typesmapping': r'''Mapping Types — "dict" -********************** - -A *mapping* object maps *hashable* values to arbitrary objects. -Mappings are mutable objects. There is currently only one standard -mapping type, the *dictionary*. (For other containers see the built- -in "list", "set", and "tuple" classes, and the "collections" module.) - -A dictionary’s keys are *almost* arbitrary values. Values that are -not *hashable*, that is, values containing lists, dictionaries or -other mutable types (that are compared by value rather than by object -identity) may not be used as keys. Values that compare equal (such as -"1", "1.0", and "True") can be used interchangeably to index the same -dictionary entry. - -class dict(**kwargs) -class dict(mapping, /, **kwargs) -class dict(iterable, /, **kwargs) - - Return a new dictionary initialized from an optional positional - argument and a possibly empty set of keyword arguments. - - Dictionaries can be created by several means: - - * Use a comma-separated list of "key: value" pairs within braces: - "{'jack': 4098, 'sjoerd': 4127}" or "{4098: 'jack', 4127: - 'sjoerd'}" - - * Use a dict comprehension: "{}", "{x: x ** 2 for x in range(10)}" - - * Use the type constructor: "dict()", "dict([('foo', 100), ('bar', - 200)])", "dict(foo=100, bar=200)" - - If no positional argument is given, an empty dictionary is created. - If a positional argument is given and it defines a "keys()" method, - a dictionary is created by calling "__getitem__()" on the argument - with each returned key from the method. Otherwise, the positional - argument must be an *iterable* object. Each item in the iterable - must itself be an iterable with exactly two elements. The first - element of each item becomes a key in the new dictionary, and the - second element the corresponding value. If a key occurs more than - once, the last value for that key becomes the corresponding value - in the new dictionary. - - If keyword arguments are given, the keyword arguments and their - values are added to the dictionary created from the positional - argument. If a key being added is already present, the value from - the keyword argument replaces the value from the positional - argument. - - Dictionaries compare equal if and only if they have the same "(key, - value)" pairs (regardless of ordering). Order comparisons (‘<’, - ‘<=’, ‘>=’, ‘>’) raise "TypeError". To illustrate dictionary - creation and equality, the following examples all return a - dictionary equal to "{"one": 1, "two": 2, "three": 3}": - - >>> a = dict(one=1, two=2, three=3) - >>> b = {'one': 1, 'two': 2, 'three': 3} - >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) - >>> d = dict([('two', 2), ('one', 1), ('three', 3)]) - >>> e = dict({'three': 3, 'one': 1, 'two': 2}) - >>> f = dict({'one': 1, 'three': 3}, two=2) - >>> a == b == c == d == e == f - True - - Providing keyword arguments as in the first example only works for - keys that are valid Python identifiers. Otherwise, any valid keys - can be used. - - Dictionaries preserve insertion order. Note that updating a key - does not affect the order. Keys added after deletion are inserted - at the end. - - >>> d = {"one": 1, "two": 2, "three": 3, "four": 4} - >>> d - {'one': 1, 'two': 2, 'three': 3, 'four': 4} - >>> list(d) - ['one', 'two', 'three', 'four'] - >>> list(d.values()) - [1, 2, 3, 4] - >>> d["one"] = 42 - >>> d - {'one': 42, 'two': 2, 'three': 3, 'four': 4} - >>> del d["two"] - >>> d["two"] = None - >>> d - {'one': 42, 'three': 3, 'four': 4, 'two': None} - - Changed in version 3.7: Dictionary order is guaranteed to be - insertion order. This behavior was an implementation detail of - CPython from 3.6. - - These are the operations that dictionaries support (and therefore, - custom mapping types should support too): - - list(d) - - Return a list of all the keys used in the dictionary *d*. - - len(d) - - Return the number of items in the dictionary *d*. - - d[key] - - Return the item of *d* with key *key*. Raises a "KeyError" if - *key* is not in the map. - - If a subclass of dict defines a method "__missing__()" and *key* - is not present, the "d[key]" operation calls that method with - the key *key* as argument. The "d[key]" operation then returns - or raises whatever is returned or raised by the - "__missing__(key)" call. No other operations or methods invoke - "__missing__()". If "__missing__()" is not defined, "KeyError" - is raised. "__missing__()" must be a method; it cannot be an - instance variable: - - >>> class Counter(dict): - ... def __missing__(self, key): - ... return 0 - ... - >>> c = Counter() - >>> c['red'] - 0 - >>> c['red'] += 1 - >>> c['red'] - 1 - - The example above shows part of the implementation of - "collections.Counter". A different "__missing__()" method is - used by "collections.defaultdict". - - d[key] = value - - Set "d[key]" to *value*. - - del d[key] - - Remove "d[key]" from *d*. Raises a "KeyError" if *key* is not - in the map. - - key in d - - Return "True" if *d* has a key *key*, else "False". - - key not in d - - Equivalent to "not key in d". - - iter(d) - - Return an iterator over the keys of the dictionary. This is a - shortcut for "iter(d.keys())". - - clear() - - Remove all items from the dictionary. - - copy() - - Return a shallow copy of the dictionary. - - classmethod fromkeys(iterable, value=None, /) - - Create a new dictionary with keys from *iterable* and values set - to *value*. - - "fromkeys()" is a class method that returns a new dictionary. - *value* defaults to "None". All of the values refer to just a - single instance, so it generally doesn’t make sense for *value* - to be a mutable object such as an empty list. To get distinct - values, use a dict comprehension instead. - - get(key, default=None, /) - - Return the value for *key* if *key* is in the dictionary, else - *default*. If *default* is not given, it defaults to "None", so - that this method never raises a "KeyError". - - items() - - Return a new view of the dictionary’s items ("(key, value)" - pairs). See the documentation of view objects. - - keys() - - Return a new view of the dictionary’s keys. See the - documentation of view objects. - - pop(key, /) - pop(key, default, /) - - If *key* is in the dictionary, remove it and return its value, - else return *default*. If *default* is not given and *key* is - not in the dictionary, a "KeyError" is raised. - - popitem() - - Remove and return a "(key, value)" pair from the dictionary. - Pairs are returned in LIFO (last-in, first-out) order. - - "popitem()" is useful to destructively iterate over a - dictionary, as often used in set algorithms. If the dictionary - is empty, calling "popitem()" raises a "KeyError". - - Changed in version 3.7: LIFO order is now guaranteed. In prior - versions, "popitem()" would return an arbitrary key/value pair. - - reversed(d) - - Return a reverse iterator over the keys of the dictionary. This - is a shortcut for "reversed(d.keys())". - - Added in version 3.8. - - setdefault(key, default=None, /) - - If *key* is in the dictionary, return its value. If not, insert - *key* with a value of *default* and return *default*. *default* - defaults to "None". - - update(**kwargs) - update(mapping, /, **kwargs) - update(iterable, /, **kwargs) - - Update the dictionary with the key/value pairs from *mapping* or - *iterable* and *kwargs*, overwriting existing keys. Return - "None". - - "update()" accepts either another object with a "keys()" method - (in which case "__getitem__()" is called with every key returned - from the method) or an iterable of key/value pairs (as tuples or - other iterables of length two). If keyword arguments are - specified, the dictionary is then updated with those key/value - pairs: "d.update(red=1, blue=2)". - - values() - - Return a new view of the dictionary’s values. See the - documentation of view objects. - - An equality comparison between one "dict.values()" view and - another will always return "False". This also applies when - comparing "dict.values()" to itself: - - >>> d = {'a': 1} - >>> d.values() == d.values() - False - - d | other - - Create a new dictionary with the merged keys and values of *d* - and *other*, which must both be dictionaries. The values of - *other* take priority when *d* and *other* share keys. - - Added in version 3.9. - - d |= other - - Update the dictionary *d* with keys and values from *other*, - which may be either a *mapping* or an *iterable* of key/value - pairs. The values of *other* take priority when *d* and *other* - share keys. - - Added in version 3.9. - - Dictionaries and dictionary views are reversible. - - >>> d = {"one": 1, "two": 2, "three": 3, "four": 4} - >>> d - {'one': 1, 'two': 2, 'three': 3, 'four': 4} - >>> list(reversed(d)) - ['four', 'three', 'two', 'one'] - >>> list(reversed(d.values())) - [4, 3, 2, 1] - >>> list(reversed(d.items())) - [('four', 4), ('three', 3), ('two', 2), ('one', 1)] - - Changed in version 3.8: Dictionaries are now reversible. - -See also: - - "types.MappingProxyType" can be used to create a read-only view of a - "dict". - -See also: - - For detailed information on thread-safety guarantees for "dict" - objects, see Thread safety for dict objects. - - -Dictionary view objects -======================= - -The objects returned by "dict.keys()", "dict.values()" and -"dict.items()" are *view objects*. They provide a dynamic view on the -dictionary’s entries, which means that when the dictionary changes, -the view reflects these changes. - -Dictionary views can be iterated over to yield their respective data, -and support membership tests: - -len(dictview) - - Return the number of entries in the dictionary. - -iter(dictview) - - Return an iterator over the keys, values or items (represented as - tuples of "(key, value)") in the dictionary. - - Keys and values are iterated over in insertion order. This allows - the creation of "(value, key)" pairs using "zip()": "pairs = - zip(d.values(), d.keys())". Another way to create the same list is - "pairs = [(v, k) for (k, v) in d.items()]". - - Iterating views while adding or deleting entries in the dictionary - may raise a "RuntimeError" or fail to iterate over all entries. - - Changed in version 3.7: Dictionary order is guaranteed to be - insertion order. - -x in dictview - - Return "True" if *x* is in the underlying dictionary’s keys, values - or items (in the latter case, *x* should be a "(key, value)" - tuple). - -reversed(dictview) - - Return a reverse iterator over the keys, values or items of the - dictionary. The view will be iterated in reverse order of the - insertion. - - Changed in version 3.8: Dictionary views are now reversible. - -dictview.mapping - - Return a "types.MappingProxyType" that wraps the original - dictionary to which the view refers. - - Added in version 3.10. - -Keys views are set-like since their entries are unique and *hashable*. -Items views also have set-like operations since the (key, value) pairs -are unique and the keys are hashable. If all values in an items view -are hashable as well, then the items view can interoperate with other -sets. (Values views are not treated as set-like since the entries are -generally not unique.) For set-like views, all of the operations -defined for the abstract base class "collections.abc.Set" are -available (for example, "==", "<", or "^"). While using set -operators, set-like views accept any iterable as the other operand, -unlike sets which only accept sets as the input. - -An example of dictionary view usage: - - >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500} - >>> keys = dishes.keys() - >>> values = dishes.values() - - >>> # iteration - >>> n = 0 - >>> for val in values: - ... n += val - ... - >>> print(n) - 504 - - >>> # keys and values are iterated over in the same order (insertion order) - >>> list(keys) - ['eggs', 'sausage', 'bacon', 'spam'] - >>> list(values) - [2, 1, 1, 500] - - >>> # view objects are dynamic and reflect dict changes - >>> del dishes['eggs'] - >>> del dishes['sausage'] - >>> list(keys) - ['bacon', 'spam'] - - >>> # set operations - >>> keys & {'eggs', 'bacon', 'salad'} - {'bacon'} - >>> keys ^ {'sausage', 'juice'} == {'juice', 'sausage', 'bacon', 'spam'} - True - >>> keys | ['juice', 'juice', 'juice'] == {'bacon', 'spam', 'juice'} - True - - >>> # get back a read-only proxy for the original dictionary - >>> values.mapping - mappingproxy({'bacon': 1, 'spam': 500}) - >>> values.mapping['spam'] - 500 -''', - 'typesmethods': r'''Methods -******* - -Methods are functions that are called using the attribute notation. -There are two flavors: built-in methods (such as "append()" on lists) -and class instance method. Built-in methods are described with the -types that support them. - -If you access a method (a function defined in a class namespace) -through an instance, you get a special object: a *bound method* (also -called instance method) object. When called, it will add the "self" -argument to the argument list. Bound methods have two special read- -only attributes: "m.__self__" is the object on which the method -operates, and "m.__func__" is the function implementing the method. -Calling "m(arg-1, arg-2, ..., arg-n)" is completely equivalent to -calling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)". - -Like function objects, bound method objects support getting arbitrary -attributes. However, since method attributes are actually stored on -the underlying function object ("method.__func__"), setting method -attributes on bound methods is disallowed. Attempting to set an -attribute on a method results in an "AttributeError" being raised. In -order to set a method attribute, you need to explicitly set it on the -underlying function object: - - >>> class C: - ... def method(self): - ... pass - ... - >>> c = C() - >>> c.method.whoami = 'my name is method' # can't set on the method - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - AttributeError: 'method' object has no attribute 'whoami' - >>> c.method.__func__.whoami = 'my name is method' - >>> c.method.whoami - 'my name is method' - -See Instance methods for more information. -''', - 'typesmodules': r'''Modules -******* - -The only special operation on a module is attribute access: "m.name", -where *m* is a module and *name* accesses a name defined in *m*’s -symbol table. Module attributes can be assigned to. (Note that the -"import" statement is not, strictly speaking, an operation on a module -object; "import foo" does not require a module object named *foo* to -exist, rather it requires an (external) *definition* for a module -named *foo* somewhere.) - -A special attribute of every module is "__dict__". This is the -dictionary containing the module’s symbol table. Modifying this -dictionary will actually change the module’s symbol table, but direct -assignment to the "__dict__" attribute is not possible (you can write -"m.__dict__['a'] = 1", which defines "m.a" to be "1", but you can’t -write "m.__dict__ = {}"). Modifying "__dict__" directly is not -recommended. - -Modules built into the interpreter are written like this: "<module -'sys' (built-in)>". If loaded from a file, they are written as -"<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>". -''', - 'typesseq': r'''Sequence Types — "list", "tuple", "range" -***************************************** - -There are three basic sequence types: lists, tuples, and range -objects. Additional sequence types tailored for processing of binary -data and text strings are described in dedicated sections. - - -Common Sequence Operations -========================== - -The operations in the following table are supported by most sequence -types, both mutable and immutable. The "collections.abc.Sequence" ABC -is provided to make it easier to correctly implement these operations -on custom sequence types. - -This table lists the sequence operations sorted in ascending priority. -In the table, *s* and *t* are sequences of the same type, *n*, *i*, -*j* and *k* are integers and *x* is an arbitrary object that meets any -type and value restrictions imposed by *s*. - -The "in" and "not in" operations have the same priorities as the -comparison operations. The "+" (concatenation) and "*" (repetition) -operations have the same priority as the corresponding numeric -operations. [3] - -+----------------------------+----------------------------------+------------+ -| Operation | Result | Notes | -|============================|==================================|============| -| "x in s" | "True" if an item of *s* is | (1) | -| | equal to *x*, else "False" | | -+----------------------------+----------------------------------+------------+ -| "x not in s" | "False" if an item of *s* is | (1) | -| | equal to *x*, else "True" | | -+----------------------------+----------------------------------+------------+ -| "s + t" | the concatenation of *s* and *t* | (6)(7) | -+----------------------------+----------------------------------+------------+ -| "s * n" or "n * s" | equivalent to adding *s* to | (2)(7) | -| | itself *n* times | | -+----------------------------+----------------------------------+------------+ -| "s[i]" | *i*th item of *s*, origin 0 | (3)(8) | -+----------------------------+----------------------------------+------------+ -| "s[i:j]" | slice of *s* from *i* to *j* | (3)(4) | -+----------------------------+----------------------------------+------------+ -| "s[i:j:k]" | slice of *s* from *i* to *j* | (3)(5) | -| | with step *k* | | -+----------------------------+----------------------------------+------------+ -| "len(s)" | length of *s* | | -+----------------------------+----------------------------------+------------+ -| "min(s)" | smallest item of *s* | | -+----------------------------+----------------------------------+------------+ -| "max(s)" | largest item of *s* | | -+----------------------------+----------------------------------+------------+ - -Sequences of the same type also support comparisons. In particular, -tuples and lists are compared lexicographically by comparing -corresponding elements. This means that to compare equal, every -element must compare equal and the two sequences must be of the same -type and have the same length. (For full details see Comparisons in -the language reference.) - -Forward and reversed iterators over mutable sequences access values -using an index. That index will continue to march forward (or -backward) even if the underlying sequence is mutated. The iterator -terminates only when an "IndexError" or a "StopIteration" is -encountered (or when the index drops below zero). - -Notes: - -1. While the "in" and "not in" operations are used only for simple - containment testing in the general case, some specialised sequences - (such as "str", "bytes" and "bytearray") also use them for - subsequence testing: - - >>> "gg" in "eggs" - True - -2. Values of *n* less than "0" are treated as "0" (which yields an - empty sequence of the same type as *s*). Note that items in the - sequence *s* are not copied; they are referenced multiple times. - This often haunts new Python programmers; consider: - - >>> lists = [[]] * 3 - >>> lists - [[], [], []] - >>> lists[0].append(3) - >>> lists - [[3], [3], [3]] - - What has happened is that "[[]]" is a one-element list containing - an empty list, so all three elements of "[[]] * 3" are references - to this single empty list. Modifying any of the elements of - "lists" modifies this single list. You can create a list of - different lists this way: - - >>> lists = [[] for i in range(3)] - >>> lists[0].append(3) - >>> lists[1].append(5) - >>> lists[2].append(7) - >>> lists - [[3], [5], [7]] - - Further explanation is available in the FAQ entry How do I create a - multidimensional list?. - -3. If *i* or *j* is negative, the index is relative to the end of - sequence *s*: "len(s) + i" or "len(s) + j" is substituted. But - note that "-0" is still "0". - -4. The slice of *s* from *i* to *j* is defined as the sequence of - items with index *k* such that "i <= k < j". - - * If *i* is omitted or "None", use "0". - - * If *j* is omitted or "None", use "len(s)". - - * If *i* or *j* is less than "-len(s)", use "0". - - * If *i* or *j* is greater than "len(s)", use "len(s)". - - * If *i* is greater than or equal to *j*, the slice is empty. - -5. The slice of *s* from *i* to *j* with step *k* is defined as the - sequence of items with index "x = i + n*k" such that "0 <= n < - (j-i)/k". In other words, the indices are "i", "i+k", "i+2*k", - "i+3*k" and so on, stopping when *j* is reached (but never - including *j*). When *k* is positive, *i* and *j* are reduced to - "len(s)" if they are greater. When *k* is negative, *i* and *j* are - reduced to "len(s) - 1" if they are greater. If *i* or *j* are - omitted or "None", they become “end” values (which end depends on - the sign of *k*). Note, *k* cannot be zero. If *k* is "None", it - is treated like "1". - -6. Concatenating immutable sequences always results in a new object. - This means that building up a sequence by repeated concatenation - will have a quadratic runtime cost in the total sequence length. - To get a linear runtime cost, you must switch to one of the - alternatives below: - - * if concatenating "str" objects, you can build a list and use - "str.join()" at the end or else write to an "io.StringIO" - instance and retrieve its value when complete - - * if concatenating "bytes" objects, you can similarly use - "bytes.join()" or "io.BytesIO", or you can do in-place - concatenation with a "bytearray" object. "bytearray" objects are - mutable and have an efficient overallocation mechanism - - * if concatenating "tuple" objects, extend a "list" instead - - * for other types, investigate the relevant class documentation - -7. Some sequence types (such as "range") only support item sequences - that follow specific patterns, and hence don’t support sequence - concatenation or repetition. - -8. An "IndexError" is raised if *i* is outside the sequence range. - --[ Sequence Methods ]- - -Sequence types also support the following methods: - -sequence.count(value, /) - - Return the total number of occurrences of *value* in *sequence*. - -sequence.index(value[, start[, stop]]) - - Return the index of the first occurrence of *value* in *sequence*. - - Raises "ValueError" if *value* is not found in *sequence*. - - The *start* or *stop* arguments allow for efficient searching of - subsections of the sequence, beginning at *start* and ending at - *stop*. This is roughly equivalent to "start + - sequence[start:stop].index(value)", only without copying any data. - - Caution: - - Not all sequence types support passing the *start* and *stop* - arguments. - - -Immutable Sequence Types -======================== - -The only operation that immutable sequence types generally implement -that is not also implemented by mutable sequence types is support for -the "hash()" built-in. - -This support allows immutable sequences, such as "tuple" instances, to -be used as "dict" keys and stored in "set" and "frozenset" instances. - -Attempting to hash an immutable sequence that contains unhashable -values will result in "TypeError". - - -Mutable Sequence Types -====================== - -The operations in the following table are defined on mutable sequence -types. The "collections.abc.MutableSequence" ABC is provided to make -it easier to correctly implement these operations on custom sequence -types. - -In the table *s* is an instance of a mutable sequence type, *t* is any -iterable object and *x* is an arbitrary object that meets any type and -value restrictions imposed by *s* (for example, "bytearray" only -accepts integers that meet the value restriction "0 <= x <= 255"). - -+--------------------------------+----------------------------------+-----------------------+ -| Operation | Result | Notes | -|================================|==================================|=======================| -| "s[i] = x" | item *i* of *s* is replaced by | | -| | *x* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i]" | removes item *i* of *s* | | -+--------------------------------+----------------------------------+-----------------------+ -| "s[i:j] = t" | slice of *s* from *i* to *j* is | | -| | replaced by the contents of the | | -| | iterable *t* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i:j]" | removes the elements of "s[i:j]" | | -| | from the list (same as "s[i:j] = | | -| | []") | | -+--------------------------------+----------------------------------+-----------------------+ -| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) | -| | replaced by those of *t* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i:j:k]" | removes the elements of | | -| | "s[i:j:k]" from the list | | -+--------------------------------+----------------------------------+-----------------------+ -| "s += t" | extends *s* with the contents of | | -| | *t* (for the most part the same | | -| | as "s[len(s):len(s)] = t") | | -+--------------------------------+----------------------------------+-----------------------+ -| "s *= n" | updates *s* with its contents | (2) | -| | repeated *n* times | | -+--------------------------------+----------------------------------+-----------------------+ - -Notes: - -1. If *k* is not equal to "1", *t* must have the same length as the - slice it is replacing. - -2. The value *n* is an integer, or an object implementing - "__index__()". Zero and negative values of *n* clear the sequence. - Items in the sequence are not copied; they are referenced multiple - times, as explained for "s * n" under Common Sequence Operations. - --[ Mutable Sequence Methods ]- - -Mutable sequence types also support the following methods: - -sequence.append(value, /) - - Append *value* to the end of the sequence. This is equivalent to - writing "seq[len(seq):len(seq)] = [value]". - -sequence.clear() - - Added in version 3.3. - - Remove all items from *sequence*. This is equivalent to writing - "del sequence[:]". - -sequence.copy() - - Added in version 3.3. - - Create a shallow copy of *sequence*. This is equivalent to writing - "sequence[:]". - - Hint: - - The "copy()" method is not part of the "MutableSequence" "ABC", - but most concrete mutable sequence types provide it. - -sequence.extend(iterable, /) - - Extend *sequence* with the contents of *iterable*. For the most - part, this is the same as writing "seq[len(seq):len(seq)] = - iterable". - -sequence.insert(index, value, /) - - Insert *value* into *sequence* at the given *index*. This is - equivalent to writing "sequence[index:index] = [value]". - -sequence.pop(index=-1, /) - - Retrieve the item at *index* and also removes it from *sequence*. - By default, the last item in *sequence* is removed and returned. - -sequence.remove(value, /) - - Remove the first item from *sequence* where "sequence[i] == value". - - Raises "ValueError" if *value* is not found in *sequence*. - -sequence.reverse() - - Reverse the items of *sequence* in place. This method maintains - economy of space when reversing a large sequence. To remind users - that it operates by side-effect, it returns "None". - - -Lists -===== - -Lists are mutable sequences, typically used to store collections of -homogeneous items (where the precise degree of similarity will vary by -application). - -class list(iterable=(), /) - - Lists may be constructed in several ways: - - * Using a pair of square brackets to denote the empty list: "[]" - - * Using square brackets, separating items with commas: "[a]", "[a, - b, c]" - - * Using a list comprehension: "[x for x in iterable]" - - * Using the type constructor: "list()" or "list(iterable)" - - The constructor builds a list whose items are the same and in the - same order as *iterable*’s items. *iterable* may be either a - sequence, a container that supports iteration, or an iterator - object. If *iterable* is already a list, a copy is made and - returned, similar to "iterable[:]". For example, "list('abc')" - returns "['a', 'b', 'c']" and "list( (1, 2, 3) )" returns "[1, 2, - 3]". If no argument is given, the constructor creates a new empty - list, "[]". - - Many other operations also produce lists, including the "sorted()" - built-in. - - Lists implement all of the common and mutable sequence operations. - Lists also provide the following additional method: - - sort(*, key=None, reverse=False) - - This method sorts the list in place, using only "<" comparisons - between items. Exceptions are not suppressed - if any comparison - operations fail, the entire sort operation will fail (and the - list will likely be left in a partially modified state). - - "sort()" accepts two arguments that can only be passed by - keyword (keyword-only arguments): - - *key* specifies a function of one argument that is used to - extract a comparison key from each list element (for example, - "key=str.lower"). The key corresponding to each item in the list - is calculated once and then used for the entire sorting process. - The default value of "None" means that list items are sorted - directly without calculating a separate key value. - - The "functools.cmp_to_key()" utility is available to convert a - 2.x style *cmp* function to a *key* function. - - *reverse* is a boolean value. If set to "True", then the list - elements are sorted as if each comparison were reversed. - - This method modifies the sequence in place for economy of space - when sorting a large sequence. To remind users that it operates - by side effect, it does not return the sorted sequence (use - "sorted()" to explicitly request a new sorted list instance). - - The "sort()" method is guaranteed to be stable. A sort is - stable if it guarantees not to change the relative order of - elements that compare equal — this is helpful for sorting in - multiple passes (for example, sort by department, then by salary - grade). - - For sorting examples and a brief sorting tutorial, see Sorting - Techniques. - - **CPython implementation detail:** While a list is being sorted, - the effect of attempting to mutate, or even inspect, the list is - undefined. The C implementation of Python makes the list appear - empty for the duration, and raises "ValueError" if it can detect - that the list has been mutated during a sort. - -See also: - - For detailed information on thread-safety guarantees for "list" - objects, see Thread safety for list objects. - - -Tuples -====== - -Tuples are immutable sequences, typically used to store collections of -heterogeneous data (such as the 2-tuples produced by the "enumerate()" -built-in). Tuples are also used for cases where an immutable sequence -of homogeneous data is needed (such as allowing storage in a "set" or -"dict" instance). - -class tuple(iterable=(), /) - - Tuples may be constructed in a number of ways: - - * Using a pair of parentheses to denote the empty tuple: "()" - - * Using a trailing comma for a singleton tuple: "a," or "(a,)" - - * Separating items with commas: "a, b, c" or "(a, b, c)" - - * Using the "tuple()" built-in: "tuple()" or "tuple(iterable)" - - The constructor builds a tuple whose items are the same and in the - same order as *iterable*’s items. *iterable* may be either a - sequence, a container that supports iteration, or an iterator - object. If *iterable* is already a tuple, it is returned - unchanged. For example, "tuple('abc')" returns "('a', 'b', 'c')" - and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument is - given, the constructor creates a new empty tuple, "()". - - Note that it is actually the comma which makes a tuple, not the - parentheses. The parentheses are optional, except in the empty - tuple case, or when they are needed to avoid syntactic ambiguity. - For example, "f(a, b, c)" is a function call with three arguments, - while "f((a, b, c))" is a function call with a 3-tuple as the sole - argument. - - Tuples implement all of the common sequence operations. - -For heterogeneous collections of data where access by name is clearer -than access by index, "collections.namedtuple()" may be a more -appropriate choice than a simple tuple object. - - -Ranges -====== - -The "range" type represents an immutable sequence of numbers and is -commonly used for looping a specific number of times in "for" loops. - -class range(stop, /) -class range(start, stop, step=1, /) - - The arguments to the range constructor must be integers (either - built-in "int" or any object that implements the "__index__()" - special method). If the *step* argument is omitted, it defaults to - "1". If the *start* argument is omitted, it defaults to "0". If - *step* is zero, "ValueError" is raised. - - For a positive *step*, the contents of a range "r" are determined - by the formula "r[i] = start + step*i" where "i >= 0" and "r[i] < - stop". - - For a negative *step*, the contents of the range are still - determined by the formula "r[i] = start + step*i", but the - constraints are "i >= 0" and "r[i] > stop". - - A range object will be empty if "r[0]" does not meet the value - constraint. Ranges do support negative indices, but these are - interpreted as indexing from the end of the sequence determined by - the positive indices. - - Ranges containing absolute values larger than "sys.maxsize" are - permitted but some features (such as "len()") may raise - "OverflowError". - - Range examples: - - >>> list(range(10)) - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - >>> list(range(1, 11)) - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - >>> list(range(0, 30, 5)) - [0, 5, 10, 15, 20, 25] - >>> list(range(0, 10, 3)) - [0, 3, 6, 9] - >>> list(range(0, -10, -1)) - [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] - >>> list(range(0)) - [] - >>> list(range(1, 0)) - [] - - Ranges implement all of the common sequence operations except - concatenation and repetition (due to the fact that range objects - can only represent sequences that follow a strict pattern and - repetition and concatenation will usually violate that pattern). - - start - - The value of the *start* parameter (or "0" if the parameter was - not supplied) - - stop - - The value of the *stop* parameter - - step - - The value of the *step* parameter (or "1" if the parameter was - not supplied) - -The advantage of the "range" type over a regular "list" or "tuple" is -that a "range" object will always take the same (small) amount of -memory, no matter the size of the range it represents (as it only -stores the "start", "stop" and "step" values, calculating individual -items and subranges as needed). - -Range objects implement the "collections.abc.Sequence" ABC, and -provide features such as containment tests, element index lookup, -slicing and support for negative indices (see Sequence Types — list, -tuple, range): - ->>> r = range(0, 20, 2) ->>> r -range(0, 20, 2) ->>> 11 in r -False ->>> 10 in r -True ->>> r.index(10) -5 ->>> r[5] -10 ->>> r[:5] -range(0, 10, 2) ->>> r[-1] -18 - -Testing range objects for equality with "==" and "!=" compares them as -sequences. That is, two range objects are considered equal if they -represent the same sequence of values. (Note that two range objects -that compare equal might have different "start", "stop" and "step" -attributes, for example "range(0) == range(2, 1, 3)" or "range(0, 3, -2) == range(0, 4, 2)".) - -Changed in version 3.2: Implement the Sequence ABC. Support slicing -and negative indices. Test "int" objects for membership in constant -time instead of iterating through all items. - -Changed in version 3.3: Define ‘==’ and ‘!=’ to compare range objects -based on the sequence of values they define (instead of comparing -based on object identity).Added the "start", "stop" and "step" -attributes. - -See also: - - * The linspace recipe shows how to implement a lazy version of range - suitable for floating-point applications. -''', - 'typesseq-mutable': r'''Mutable Sequence Types -********************** - -The operations in the following table are defined on mutable sequence -types. The "collections.abc.MutableSequence" ABC is provided to make -it easier to correctly implement these operations on custom sequence -types. - -In the table *s* is an instance of a mutable sequence type, *t* is any -iterable object and *x* is an arbitrary object that meets any type and -value restrictions imposed by *s* (for example, "bytearray" only -accepts integers that meet the value restriction "0 <= x <= 255"). - -+--------------------------------+----------------------------------+-----------------------+ -| Operation | Result | Notes | -|================================|==================================|=======================| -| "s[i] = x" | item *i* of *s* is replaced by | | -| | *x* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i]" | removes item *i* of *s* | | -+--------------------------------+----------------------------------+-----------------------+ -| "s[i:j] = t" | slice of *s* from *i* to *j* is | | -| | replaced by the contents of the | | -| | iterable *t* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i:j]" | removes the elements of "s[i:j]" | | -| | from the list (same as "s[i:j] = | | -| | []") | | -+--------------------------------+----------------------------------+-----------------------+ -| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) | -| | replaced by those of *t* | | -+--------------------------------+----------------------------------+-----------------------+ -| "del s[i:j:k]" | removes the elements of | | -| | "s[i:j:k]" from the list | | -+--------------------------------+----------------------------------+-----------------------+ -| "s += t" | extends *s* with the contents of | | -| | *t* (for the most part the same | | -| | as "s[len(s):len(s)] = t") | | -+--------------------------------+----------------------------------+-----------------------+ -| "s *= n" | updates *s* with its contents | (2) | -| | repeated *n* times | | -+--------------------------------+----------------------------------+-----------------------+ - -Notes: - -1. If *k* is not equal to "1", *t* must have the same length as the - slice it is replacing. - -2. The value *n* is an integer, or an object implementing - "__index__()". Zero and negative values of *n* clear the sequence. - Items in the sequence are not copied; they are referenced multiple - times, as explained for "s * n" under Common Sequence Operations. - --[ Mutable Sequence Methods ]- - -Mutable sequence types also support the following methods: - -sequence.append(value, /) - - Append *value* to the end of the sequence. This is equivalent to - writing "seq[len(seq):len(seq)] = [value]". - -sequence.clear() - - Added in version 3.3. - - Remove all items from *sequence*. This is equivalent to writing - "del sequence[:]". - -sequence.copy() - - Added in version 3.3. - - Create a shallow copy of *sequence*. This is equivalent to writing - "sequence[:]". - - Hint: - - The "copy()" method is not part of the "MutableSequence" "ABC", - but most concrete mutable sequence types provide it. - -sequence.extend(iterable, /) - - Extend *sequence* with the contents of *iterable*. For the most - part, this is the same as writing "seq[len(seq):len(seq)] = - iterable". - -sequence.insert(index, value, /) - - Insert *value* into *sequence* at the given *index*. This is - equivalent to writing "sequence[index:index] = [value]". - -sequence.pop(index=-1, /) - - Retrieve the item at *index* and also removes it from *sequence*. - By default, the last item in *sequence* is removed and returned. - -sequence.remove(value, /) - - Remove the first item from *sequence* where "sequence[i] == value". - - Raises "ValueError" if *value* is not found in *sequence*. - -sequence.reverse() - - Reverse the items of *sequence* in place. This method maintains - economy of space when reversing a large sequence. To remind users - that it operates by side-effect, it returns "None". -''', - 'unary': r'''Unary arithmetic and bitwise operations -*************************************** - -All unary arithmetic and bitwise operations have the same priority: - - u_expr: power | "-" u_expr | "+" u_expr | "~" u_expr - -The unary "-" (minus) operator yields the negation of its numeric -argument; the operation can be overridden with the "__neg__()" special -method. - -The unary "+" (plus) operator yields its numeric argument unchanged; -the operation can be overridden with the "__pos__()" special method. - -The unary "~" (invert) operator yields the bitwise inversion of its -integer argument. The bitwise inversion of "x" is defined as -"-(x+1)". It only applies to integral numbers or to custom objects -that override the "__invert__()" special method. - -In all three cases, if the argument does not have the proper type, a -"TypeError" exception is raised. -''', - 'while': r'''The "while" statement -********************* - -The "while" statement is used for repeated execution as long as an -expression is true: - - while_stmt: "while" assignment_expression ":" suite - ["else" ":" suite] - -This repeatedly tests the expression and, if it is true, executes the -first suite; if the expression is false (which may be the first time -it is tested) the suite of the "else" clause, if present, is executed -and the loop terminates. - -A "break" statement executed in the first suite terminates the loop -without executing the "else" clause’s suite. A "continue" statement -executed in the first suite skips the rest of the suite and goes back -to testing the expression. -''', - 'with': r'''The "with" statement -******************** - -The "with" statement is used to wrap the execution of a block with -methods defined by a context manager (see section With Statement -Context Managers). This allows common "try"…"except"…"finally" usage -patterns to be encapsulated for convenient reuse. - - with_stmt: "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" suite - with_stmt_contents: with_item ("," with_item)* - with_item: expression ["as" target] - -The execution of the "with" statement with one “item” proceeds as -follows: - -1. The context expression (the expression given in the "with_item") is - evaluated to obtain a context manager. - -2. The context manager’s "__enter__()" is loaded for later use. - -3. The context manager’s "__exit__()" is loaded for later use. - -4. The context manager’s "__enter__()" method is invoked. - -5. If a target was included in the "with" statement, the return value - from "__enter__()" is assigned to it. - - Note: - - The "with" statement guarantees that if the "__enter__()" method - returns without an error, then "__exit__()" will always be - called. Thus, if an error occurs during the assignment to the - target list, it will be treated the same as an error occurring - within the suite would be. See step 7 below. - -6. The suite is executed. - -7. The context manager’s "__exit__()" method is invoked. If an - exception caused the suite to be exited, its type, value, and - traceback are passed as arguments to "__exit__()". Otherwise, three - "None" arguments are supplied. - - If the suite was exited due to an exception, and the return value - from the "__exit__()" method was false, the exception is reraised. - If the return value was true, the exception is suppressed, and - execution continues with the statement following the "with" - statement. - - If the suite was exited for any reason other than an exception, the - return value from "__exit__()" is ignored, and execution proceeds - at the normal location for the kind of exit that was taken. - -The following code: - - with EXPRESSION as TARGET: - SUITE - -is semantically equivalent to: - - manager = (EXPRESSION) - enter = manager.__enter__ - exit = manager.__exit__ - value = enter() - hit_except = False - - try: - TARGET = value - SUITE - except: - hit_except = True - if not exit(*sys.exc_info()): - raise - finally: - if not hit_except: - exit(None, None, None) - -except that implicit special method lookup is used for "__enter__()" -and "__exit__()". - -With more than one item, the context managers are processed as if -multiple "with" statements were nested: - - with A() as a, B() as b: - SUITE - -is semantically equivalent to: - - with A() as a: - with B() as b: - SUITE - -You can also write multi-item context managers in multiple lines if -the items are surrounded by parentheses. For example: - - with ( - A() as a, - B() as b, - ): - SUITE - -Changed in version 3.1: Support for multiple context expressions. - -Changed in version 3.10: Support for using grouping parentheses to -break the statement in multiple lines. - -See also: - - **PEP 343** - The “with” statement - The specification, background, and examples for the Python "with" - statement. -''', - 'yield': r'''The "yield" statement -********************* - - yield_stmt: yield_expression - -A "yield" statement is semantically equivalent to a yield expression. -The "yield" statement can be used to omit the parentheses that would -otherwise be required in the equivalent yield expression statement. -For example, the yield statements - - yield <expr> - yield from <expr> - -are equivalent to the yield expression statements - - (yield <expr>) - (yield from <expr>) - -Yield expressions and statements are only used when defining a -*generator* function, and are only used in the body of the generator -function. Using "yield" in a function definition is sufficient to -cause that definition to create a generator function instead of a -normal function. - -For full details of "yield" semantics, refer to the Yield expressions -section. -''', -} diff --git a/Python314_4_x86_Template/Lib/queue.py b/Python314_4_x86_Template/Lib/queue.py deleted file mode 100644 index c0b359876..000000000 --- a/Python314_4_x86_Template/Lib/queue.py +++ /dev/null @@ -1,383 +0,0 @@ -'''A multi-producer, multi-consumer queue.''' - -import threading -import types -from collections import deque -from heapq import heappush, heappop -from time import monotonic as time -try: - from _queue import SimpleQueue -except ImportError: - SimpleQueue = None - -__all__ = [ - 'Empty', - 'Full', - 'ShutDown', - 'Queue', - 'PriorityQueue', - 'LifoQueue', - 'SimpleQueue', -] - - -try: - from _queue import Empty -except ImportError: - class Empty(Exception): - 'Exception raised by Queue.get(block=0)/get_nowait().' - pass - -class Full(Exception): - 'Exception raised by Queue.put(block=0)/put_nowait().' - pass - - -class ShutDown(Exception): - '''Raised when put/get with shut-down queue.''' - - -class Queue: - '''Create a queue object with a given maximum size. - - If maxsize is <= 0, the queue size is infinite. - ''' - - def __init__(self, maxsize=0): - self.maxsize = maxsize - self._init(maxsize) - - # mutex must be held whenever the queue is mutating. All methods - # that acquire mutex must release it before returning. mutex - # is shared between the three conditions, so acquiring and - # releasing the conditions also acquires and releases mutex. - self.mutex = threading.Lock() - - # Notify not_empty whenever an item is added to the queue; a - # thread waiting to get is notified then. - self.not_empty = threading.Condition(self.mutex) - - # Notify not_full whenever an item is removed from the queue; - # a thread waiting to put is notified then. - self.not_full = threading.Condition(self.mutex) - - # Notify all_tasks_done whenever the number of unfinished tasks - # drops to zero; thread waiting to join() is notified to resume - self.all_tasks_done = threading.Condition(self.mutex) - self.unfinished_tasks = 0 - - # Queue shutdown state - self.is_shutdown = False - - def task_done(self): - '''Indicate that a formerly enqueued task is complete. - - Used by Queue consumer threads. For each get() used to fetch a task, - a subsequent call to task_done() tells the queue that the processing - on the task is complete. - - If a join() is currently blocking, it will resume when all items - have been processed (meaning that a task_done() call was received - for every item that had been put() into the queue). - - Raises a ValueError if called more times than there were items - placed in the queue. - ''' - with self.all_tasks_done: - unfinished = self.unfinished_tasks - 1 - if unfinished <= 0: - if unfinished < 0: - raise ValueError('task_done() called too many times') - self.all_tasks_done.notify_all() - self.unfinished_tasks = unfinished - - def join(self): - '''Blocks until all items in the Queue have been gotten and processed. - - The count of unfinished tasks goes up whenever an item is added to the - queue. The count goes down whenever a consumer thread calls task_done() - to indicate the item was retrieved and all work on it is complete. - - When the count of unfinished tasks drops to zero, join() unblocks. - ''' - with self.all_tasks_done: - while self.unfinished_tasks: - self.all_tasks_done.wait() - - def qsize(self): - '''Return the approximate size of the queue (not reliable!).''' - with self.mutex: - return self._qsize() - - def empty(self): - '''Return True if the queue is empty, False otherwise (not reliable!). - - This method is likely to be removed at some point. Use qsize() == 0 - as a direct substitute, but be aware that either approach risks a race - condition where a queue can grow before the result of empty() or - qsize() can be used. - - To create code that needs to wait for all queued tasks to be - completed, the preferred technique is to use the join() method. - ''' - with self.mutex: - return not self._qsize() - - def full(self): - '''Return True if the queue is full, False otherwise (not reliable!). - - This method is likely to be removed at some point. Use qsize() >= n - as a direct substitute, but be aware that either approach risks a race - condition where a queue can shrink before the result of full() or - qsize() can be used. - ''' - with self.mutex: - return 0 < self.maxsize <= self._qsize() - - def put(self, item, block=True, timeout=None): - '''Put an item into the queue. - - If optional args 'block' is true and 'timeout' is None (the default), - block if necessary until a free slot is available. If 'timeout' is - a non-negative number, it blocks at most 'timeout' seconds and raises - the Full exception if no free slot was available within that time. - Otherwise ('block' is false), put an item on the queue if a free slot - is immediately available, else raise the Full exception ('timeout' - is ignored in that case). - - Raises ShutDown if the queue has been shut down. - ''' - with self.not_full: - if self.is_shutdown: - raise ShutDown - if self.maxsize > 0: - if not block: - if self._qsize() >= self.maxsize: - raise Full - elif timeout is None: - while self._qsize() >= self.maxsize: - self.not_full.wait() - if self.is_shutdown: - raise ShutDown - elif timeout < 0: - raise ValueError("'timeout' must be a non-negative number") - else: - endtime = time() + timeout - while self._qsize() >= self.maxsize: - remaining = endtime - time() - if remaining <= 0.0: - raise Full - self.not_full.wait(remaining) - if self.is_shutdown: - raise ShutDown - self._put(item) - self.unfinished_tasks += 1 - self.not_empty.notify() - - def get(self, block=True, timeout=None): - '''Remove and return an item from the queue. - - If optional args 'block' is true and 'timeout' is None (the default), - block if necessary until an item is available. If 'timeout' is - a non-negative number, it blocks at most 'timeout' seconds and raises - the Empty exception if no item was available within that time. - Otherwise ('block' is false), return an item if one is immediately - available, else raise the Empty exception ('timeout' is ignored - in that case). - - Raises ShutDown if the queue has been shut down and is empty, - or if the queue has been shut down immediately. - ''' - with self.not_empty: - if self.is_shutdown and not self._qsize(): - raise ShutDown - if not block: - if not self._qsize(): - raise Empty - elif timeout is None: - while not self._qsize(): - self.not_empty.wait() - if self.is_shutdown and not self._qsize(): - raise ShutDown - elif timeout < 0: - raise ValueError("'timeout' must be a non-negative number") - else: - endtime = time() + timeout - while not self._qsize(): - remaining = endtime - time() - if remaining <= 0.0: - raise Empty - self.not_empty.wait(remaining) - if self.is_shutdown and not self._qsize(): - raise ShutDown - item = self._get() - self.not_full.notify() - return item - - def put_nowait(self, item): - '''Put an item into the queue without blocking. - - Only enqueue the item if a free slot is immediately available. - Otherwise raise the Full exception. - ''' - return self.put(item, block=False) - - def get_nowait(self): - '''Remove and return an item from the queue without blocking. - - Only get an item if one is immediately available. Otherwise - raise the Empty exception. - ''' - return self.get(block=False) - - def shutdown(self, immediate=False): - '''Shut-down the queue, making queue gets and puts raise ShutDown. - - By default, gets will only raise once the queue is empty. Set - 'immediate' to True to make gets raise immediately instead. - - All blocked callers of put() and get() will be unblocked. - - If 'immediate', the queue is drained and unfinished tasks - is reduced by the number of drained tasks. If unfinished tasks - is reduced to zero, callers of Queue.join are unblocked. - ''' - with self.mutex: - self.is_shutdown = True - if immediate: - while self._qsize(): - self._get() - if self.unfinished_tasks > 0: - self.unfinished_tasks -= 1 - # release all blocked threads in `join()` - self.all_tasks_done.notify_all() - # All getters need to re-check queue-empty to raise ShutDown - self.not_empty.notify_all() - self.not_full.notify_all() - - # Override these methods to implement other queue organizations - # (e.g. stack or priority queue). - # These will only be called with appropriate locks held - - # Initialize the queue representation - def _init(self, maxsize): - self.queue = deque() - - def _qsize(self): - return len(self.queue) - - # Put a new item in the queue - def _put(self, item): - self.queue.append(item) - - # Get an item from the queue - def _get(self): - return self.queue.popleft() - - __class_getitem__ = classmethod(types.GenericAlias) - - -class PriorityQueue(Queue): - '''Variant of Queue that retrieves open entries in priority order (lowest first). - - Entries are typically tuples of the form: (priority number, data). - ''' - - def _init(self, maxsize): - self.queue = [] - - def _qsize(self): - return len(self.queue) - - def _put(self, item): - heappush(self.queue, item) - - def _get(self): - return heappop(self.queue) - - -class LifoQueue(Queue): - '''Variant of Queue that retrieves most recently added entries first.''' - - def _init(self, maxsize): - self.queue = [] - - def _qsize(self): - return len(self.queue) - - def _put(self, item): - self.queue.append(item) - - def _get(self): - return self.queue.pop() - - -class _PySimpleQueue: - '''Simple, unbounded FIFO queue. - - This pure Python implementation is not reentrant. - ''' - # Note: while this pure Python version provides fairness - # (by using a threading.Semaphore which is itself fair, being based - # on threading.Condition), fairness is not part of the API contract. - # This allows the C version to use a different implementation. - - def __init__(self): - self._queue = deque() - self._count = threading.Semaphore(0) - - def put(self, item, block=True, timeout=None): - '''Put the item on the queue. - - The optional 'block' and 'timeout' arguments are ignored, as this method - never blocks. They are provided for compatibility with the Queue class. - ''' - self._queue.append(item) - self._count.release() - - def get(self, block=True, timeout=None): - '''Remove and return an item from the queue. - - If optional args 'block' is true and 'timeout' is None (the default), - block if necessary until an item is available. If 'timeout' is - a non-negative number, it blocks at most 'timeout' seconds and raises - the Empty exception if no item was available within that time. - Otherwise ('block' is false), return an item if one is immediately - available, else raise the Empty exception ('timeout' is ignored - in that case). - ''' - if timeout is not None and timeout < 0: - raise ValueError("'timeout' must be a non-negative number") - if not self._count.acquire(block, timeout): - raise Empty - return self._queue.popleft() - - def put_nowait(self, item): - '''Put an item into the queue without blocking. - - This is exactly equivalent to `put(item, block=False)` and is only provided - for compatibility with the Queue class. - ''' - return self.put(item, block=False) - - def get_nowait(self): - '''Remove and return an item from the queue without blocking. - - Only get an item if one is immediately available. Otherwise - raise the Empty exception. - ''' - return self.get(block=False) - - def empty(self): - '''Return True if the queue is empty, False otherwise (not reliable!).''' - return len(self._queue) == 0 - - def qsize(self): - '''Return the approximate size of the queue (not reliable!).''' - return len(self._queue) - - __class_getitem__ = classmethod(types.GenericAlias) - - -if SimpleQueue is None: - SimpleQueue = _PySimpleQueue diff --git a/Python314_4_x86_Template/Lib/quopri.py b/Python314_4_x86_Template/Lib/quopri.py deleted file mode 100644 index 129fd2f5c..000000000 --- a/Python314_4_x86_Template/Lib/quopri.py +++ /dev/null @@ -1,235 +0,0 @@ -"""Conversions to/from quoted-printable transport encoding as per RFC 1521.""" - -# (Dec 1991 version). - -__all__ = ["encode", "decode", "encodestring", "decodestring"] - -ESCAPE = b'=' -MAXLINESIZE = 76 -HEX = b'0123456789ABCDEF' -EMPTYSTRING = b'' - -try: - from binascii import a2b_qp, b2a_qp -except ImportError: - a2b_qp = None - b2a_qp = None - - -def needsquoting(c, quotetabs, header): - """Decide whether a particular byte ordinal needs to be quoted. - - The 'quotetabs' flag indicates whether embedded tabs and spaces should be - quoted. Note that line-ending tabs and spaces are always encoded, as per - RFC 1521. - """ - assert isinstance(c, bytes) - if c in b' \t': - return quotetabs - # if header, we have to escape _ because _ is used to escape space - if c == b'_': - return header - return c == ESCAPE or not (b' ' <= c <= b'~') - -def quote(c): - """Quote a single character.""" - assert isinstance(c, bytes) and len(c)==1 - c = ord(c) - return ESCAPE + bytes((HEX[c//16], HEX[c%16])) - - - -def encode(input, output, quotetabs, header=False): - """Read 'input', apply quoted-printable encoding, and write to 'output'. - - 'input' and 'output' are binary file objects. The 'quotetabs' flag - indicates whether embedded tabs and spaces should be quoted. Note that - line-ending tabs and spaces are always encoded, as per RFC 1521. - The 'header' flag indicates whether we are encoding spaces as _ as per RFC - 1522.""" - - if b2a_qp is not None: - data = input.read() - odata = b2a_qp(data, quotetabs=quotetabs, header=header) - output.write(odata) - return - - def write(s, output=output, lineEnd=b'\n'): - # RFC 1521 requires that the line ending in a space or tab must have - # that trailing character encoded. - if s and s[-1:] in b' \t': - output.write(s[:-1] + quote(s[-1:]) + lineEnd) - elif s == b'.': - output.write(quote(s) + lineEnd) - else: - output.write(s + lineEnd) - - prevline = None - while line := input.readline(): - outline = [] - # Strip off any readline induced trailing newline - stripped = b'' - if line[-1:] == b'\n': - line = line[:-1] - stripped = b'\n' - # Calculate the un-length-limited encoded line - for c in line: - c = bytes((c,)) - if needsquoting(c, quotetabs, header): - c = quote(c) - if header and c == b' ': - outline.append(b'_') - else: - outline.append(c) - # First, write out the previous line - if prevline is not None: - write(prevline) - # Now see if we need any soft line breaks because of RFC-imposed - # length limitations. Then do the thisline->prevline dance. - thisline = EMPTYSTRING.join(outline) - while len(thisline) > MAXLINESIZE: - # Don't forget to include the soft line break `=' sign in the - # length calculation! - write(thisline[:MAXLINESIZE-1], lineEnd=b'=\n') - thisline = thisline[MAXLINESIZE-1:] - # Write out the current line - prevline = thisline - # Write out the last line, without a trailing newline - if prevline is not None: - write(prevline, lineEnd=stripped) - -def encodestring(s, quotetabs=False, header=False): - if b2a_qp is not None: - return b2a_qp(s, quotetabs=quotetabs, header=header) - from io import BytesIO - infp = BytesIO(s) - outfp = BytesIO() - encode(infp, outfp, quotetabs, header) - return outfp.getvalue() - - - -def decode(input, output, header=False): - """Read 'input', apply quoted-printable decoding, and write to 'output'. - 'input' and 'output' are binary file objects. - If 'header' is true, decode underscore as space (per RFC 1522).""" - - if a2b_qp is not None: - data = input.read() - odata = a2b_qp(data, header=header) - output.write(odata) - return - - new = b'' - while line := input.readline(): - i, n = 0, len(line) - if n > 0 and line[n-1:n] == b'\n': - partial = 0; n = n-1 - # Strip trailing whitespace - while n > 0 and line[n-1:n] in b" \t\r": - n = n-1 - else: - partial = 1 - while i < n: - c = line[i:i+1] - if c == b'_' and header: - new = new + b' '; i = i+1 - elif c != ESCAPE: - new = new + c; i = i+1 - elif i+1 == n and not partial: - partial = 1; break - elif i+1 < n and line[i+1:i+2] == ESCAPE: - new = new + ESCAPE; i = i+2 - elif i+2 < n and ishex(line[i+1:i+2]) and ishex(line[i+2:i+3]): - new = new + bytes((unhex(line[i+1:i+3]),)); i = i+3 - else: # Bad escape sequence -- leave it in - new = new + c; i = i+1 - if not partial: - output.write(new + b'\n') - new = b'' - if new: - output.write(new) - -def decodestring(s, header=False): - if a2b_qp is not None: - return a2b_qp(s, header=header) - from io import BytesIO - infp = BytesIO(s) - outfp = BytesIO() - decode(infp, outfp, header=header) - return outfp.getvalue() - - - -# Other helper functions -def ishex(c): - """Return true if the byte ordinal 'c' is a hexadecimal digit in ASCII.""" - assert isinstance(c, bytes) - return b'0' <= c <= b'9' or b'a' <= c <= b'f' or b'A' <= c <= b'F' - -def unhex(s): - """Get the integer value of a hexadecimal number.""" - bits = 0 - for c in s: - c = bytes((c,)) - if b'0' <= c <= b'9': - i = ord('0') - elif b'a' <= c <= b'f': - i = ord('a')-10 - elif b'A' <= c <= b'F': - i = ord(b'A')-10 - else: - assert False, "non-hex digit "+repr(c) - bits = bits*16 + (ord(c) - i) - return bits - - - -def main(): - import sys - import getopt - try: - opts, args = getopt.getopt(sys.argv[1:], 'td') - except getopt.error as msg: - sys.stdout = sys.stderr - print(msg) - print("usage: quopri [-t | -d] [file] ...") - print("-t: quote tabs") - print("-d: decode; default encode") - sys.exit(2) - deco = False - tabs = False - for o, a in opts: - if o == '-t': tabs = True - if o == '-d': deco = True - if tabs and deco: - sys.stdout = sys.stderr - print("-t and -d are mutually exclusive") - sys.exit(2) - if not args: args = ['-'] - sts = 0 - for file in args: - if file == '-': - fp = sys.stdin.buffer - else: - try: - fp = open(file, "rb") - except OSError as msg: - sys.stderr.write("%s: can't open (%s)\n" % (file, msg)) - sts = 1 - continue - try: - if deco: - decode(fp, sys.stdout.buffer) - else: - encode(fp, sys.stdout.buffer, tabs) - finally: - if file != '-': - fp.close() - if sts: - sys.exit(sts) - - - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/random.py b/Python314_4_x86_Template/Lib/random.py deleted file mode 100644 index 86d562f0b..000000000 --- a/Python314_4_x86_Template/Lib/random.py +++ /dev/null @@ -1,1078 +0,0 @@ -"""Random variable generators. - - bytes - ----- - uniform bytes (values between 0 and 255) - - integers - -------- - uniform within range - - sequences - --------- - pick random element - pick random sample - pick weighted random sample - generate random permutation - - distributions on the real line: - ------------------------------ - uniform - triangular - normal (Gaussian) - lognormal - negative exponential - gamma - beta - pareto - Weibull - - distributions on the circle (angles 0 to 2pi) - --------------------------------------------- - circular uniform - von Mises - - discrete distributions - ---------------------- - binomial - - -General notes on the underlying Mersenne Twister core generator: - -* The period is 2**19937-1. -* It is one of the most extensively tested generators in existence. -* The random() method is implemented in C, executes in a single Python step, - and is, therefore, threadsafe. - -""" - -# Translated by Guido van Rossum from C source provided by -# Adrian Baddeley. Adapted by Raymond Hettinger for use with -# the Mersenne Twister and os.urandom() core generators. - -from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil -from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin -from math import tau as TWOPI, floor as _floor, isfinite as _isfinite -from math import lgamma as _lgamma, fabs as _fabs, log2 as _log2 -from os import urandom as _urandom -from _collections_abc import Sequence as _Sequence -from operator import index as _index -from itertools import accumulate as _accumulate, repeat as _repeat -from bisect import bisect as _bisect -import os as _os -import _random - -__all__ = [ - "Random", - "SystemRandom", - "betavariate", - "binomialvariate", - "choice", - "choices", - "expovariate", - "gammavariate", - "gauss", - "getrandbits", - "getstate", - "lognormvariate", - "normalvariate", - "paretovariate", - "randbytes", - "randint", - "random", - "randrange", - "sample", - "seed", - "setstate", - "shuffle", - "triangular", - "uniform", - "vonmisesvariate", - "weibullvariate", -] - -NV_MAGICCONST = 4 * _exp(-0.5) / _sqrt(2.0) -LOG4 = _log(4.0) -SG_MAGICCONST = 1.0 + _log(4.5) -BPF = 53 # Number of bits in a float -RECIP_BPF = 2 ** -BPF -_ONE = 1 -_sha512 = None - - -class Random(_random.Random): - """Random number generator base class used by bound module functions. - - Used to instantiate instances of Random to get generators that don't - share state. - - Class Random can also be subclassed if you want to use a different basic - generator of your own devising: in that case, override the following - methods: random(), seed(), getstate(), and setstate(). - Optionally, implement a getrandbits() method so that randrange() - can cover arbitrarily large ranges. - - """ - - VERSION = 3 # used by getstate/setstate - - def __init__(self, x=None): - """Initialize an instance. - - Optional argument x controls seeding, as for Random.seed(). - """ - - self.seed(x) - self.gauss_next = None - - def seed(self, a=None, version=2): - """Initialize internal state from a seed. - - The only supported seed types are None, int, float, - str, bytes, and bytearray. - - None or no argument seeds from current time or from an operating - system specific randomness source if available. - - If *a* is an int, all bits are used. - - For version 2 (the default), all of the bits are used if *a* is a str, - bytes, or bytearray. For version 1 (provided for reproducing random - sequences from older versions of Python), the algorithm for str and - bytes generates a narrower range of seeds. - - """ - - if version == 1 and isinstance(a, (str, bytes)): - a = a.decode('latin-1') if isinstance(a, bytes) else a - x = ord(a[0]) << 7 if a else 0 - for c in map(ord, a): - x = ((1000003 * x) ^ c) & 0xFFFFFFFFFFFFFFFF - x ^= len(a) - a = -2 if x == -1 else x - - elif version == 2 and isinstance(a, (str, bytes, bytearray)): - global _sha512 - if _sha512 is None: - try: - # hashlib is pretty heavy to load, try lean internal - # module first - from _sha2 import sha512 as _sha512 - except ImportError: - # fallback to official implementation - from hashlib import sha512 as _sha512 - - if isinstance(a, str): - a = a.encode() - a = int.from_bytes(a + _sha512(a).digest()) - - elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): - raise TypeError('The only supported seed types are:\n' - 'None, int, float, str, bytes, and bytearray.') - - super().seed(a) - self.gauss_next = None - - def getstate(self): - """Return internal state; can be passed to setstate() later.""" - return self.VERSION, super().getstate(), self.gauss_next - - def setstate(self, state): - """Restore internal state from object returned by getstate().""" - version = state[0] - if version == 3: - version, internalstate, self.gauss_next = state - super().setstate(internalstate) - elif version == 2: - version, internalstate, self.gauss_next = state - # In version 2, the state was saved as signed ints, which causes - # inconsistencies between 32/64-bit systems. The state is - # really unsigned 32-bit ints, so we convert negative ints from - # version 2 to positive longs for version 3. - try: - internalstate = tuple(x % (2 ** 32) for x in internalstate) - except ValueError as e: - raise TypeError from e - super().setstate(internalstate) - else: - raise ValueError("state with version %s passed to " - "Random.setstate() of version %s" % - (version, self.VERSION)) - - - ## ------------------------------------------------------- - ## ---- Methods below this point do not need to be overridden or extended - ## ---- when subclassing for the purpose of using a different core generator. - - - ## -------------------- pickle support ------------------- - - # Issue 17489: Since __reduce__ was defined to fix #759889 this is no - # longer called; we leave it here because it has been here since random was - # rewritten back in 2001 and why risk breaking something. - def __getstate__(self): # for pickle - return self.getstate() - - def __setstate__(self, state): # for pickle - self.setstate(state) - - def __reduce__(self): - return self.__class__, (), self.getstate() - - - ## ---- internal support method for evenly distributed integers ---- - - def __init_subclass__(cls, /, **kwargs): - """Control how subclasses generate random integers. - - The algorithm a subclass can use depends on the random() and/or - getrandbits() implementation available to it and determines - whether it can generate random integers from arbitrarily large - ranges. - """ - - for c in cls.__mro__: - if '_randbelow' in c.__dict__: - # just inherit it - break - if 'getrandbits' in c.__dict__: - cls._randbelow = cls._randbelow_with_getrandbits - break - if 'random' in c.__dict__: - cls._randbelow = cls._randbelow_without_getrandbits - break - - def _randbelow_with_getrandbits(self, n): - "Return a random int in the range [0,n). Defined for n > 0." - - k = n.bit_length() - r = self.getrandbits(k) # 0 <= r < 2**k - while r >= n: - r = self.getrandbits(k) - return r - - def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF): - """Return a random int in the range [0,n). Defined for n > 0. - - The implementation does not use getrandbits, but only random. - """ - - random = self.random - if n >= maxsize: - from warnings import warn - warn("Underlying random() generator does not supply \n" - "enough bits to choose from a population range this large.\n" - "To remove the range limitation, add a getrandbits() method.") - return _floor(random() * n) - rem = maxsize % n - limit = (maxsize - rem) / maxsize # int(limit * maxsize) % n == 0 - r = random() - while r >= limit: - r = random() - return _floor(r * maxsize) % n - - _randbelow = _randbelow_with_getrandbits - - - ## -------------------------------------------------------- - ## ---- Methods below this point generate custom distributions - ## ---- based on the methods defined above. They do not - ## ---- directly touch the underlying generator and only - ## ---- access randomness through the methods: random(), - ## ---- getrandbits(), or _randbelow(). - - - ## -------------------- bytes methods --------------------- - - def randbytes(self, n): - """Generate n random bytes.""" - return self.getrandbits(n * 8).to_bytes(n, 'little') - - - ## -------------------- integer methods ------------------- - - def randrange(self, start, stop=None, step=_ONE): - """Choose a random item from range(stop) or range(start, stop[, step]). - - Roughly equivalent to ``choice(range(start, stop, step))`` but - supports arbitrarily large ranges and is optimized for common cases. - - """ - - # This code is a bit messy to make it fast for the - # common case while still doing adequate error checking. - istart = _index(start) - if stop is None: - # We don't check for "step != 1" because it hasn't been - # type checked and converted to an integer yet. - if step is not _ONE: - raise TypeError("Missing a non-None stop argument") - if istart > 0: - return self._randbelow(istart) - raise ValueError("empty range for randrange()") - - # Stop argument supplied. - istop = _index(stop) - width = istop - istart - istep = _index(step) - # Fast path. - if istep == 1: - if width > 0: - return istart + self._randbelow(width) - raise ValueError(f"empty range in randrange({start}, {stop})") - - # Non-unit step argument supplied. - if istep > 0: - n = (width + istep - 1) // istep - elif istep < 0: - n = (width + istep + 1) // istep - else: - raise ValueError("zero step for randrange()") - if n <= 0: - raise ValueError(f"empty range in randrange({start}, {stop}, {step})") - return istart + istep * self._randbelow(n) - - def randint(self, a, b): - """Return random integer in range [a, b], including both end points. - """ - a = _index(a) - b = _index(b) - if b < a: - raise ValueError(f"empty range in randint({a}, {b})") - return a + self._randbelow(b - a + 1) - - - ## -------------------- sequence methods ------------------- - - def choice(self, seq): - """Choose a random element from a non-empty sequence.""" - - # As an accommodation for NumPy, we don't use "if not seq" - # because bool(numpy.array()) raises a ValueError. - if not len(seq): - raise IndexError('Cannot choose from an empty sequence') - return seq[self._randbelow(len(seq))] - - def shuffle(self, x): - """Shuffle list x in place, and return None.""" - - randbelow = self._randbelow - for i in reversed(range(1, len(x))): - # pick an element in x[:i+1] with which to exchange x[i] - j = randbelow(i + 1) - x[i], x[j] = x[j], x[i] - - def sample(self, population, k, *, counts=None): - """Chooses k unique random elements from a population sequence. - - Returns a new list containing elements from the population while - leaving the original population unchanged. The resulting list is - in selection order so that all sub-slices will also be valid random - samples. This allows raffle winners (the sample) to be partitioned - into grand prize and second place winners (the subslices). - - Members of the population need not be hashable or unique. If the - population contains repeats, then each occurrence is a possible - selection in the sample. - - Repeated elements can be specified one at a time or with the optional - counts parameter. For example: - - sample(['red', 'blue'], counts=[4, 2], k=5) - - is equivalent to: - - sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5) - - To choose a sample from a range of integers, use range() for the - population argument. This is especially fast and space efficient - for sampling from a large population: - - sample(range(10000000), 60) - - """ - - # Sampling without replacement entails tracking either potential - # selections (the pool) in a list or previous selections in a set. - - # When the number of selections is small compared to the - # population, then tracking selections is efficient, requiring - # only a small set and an occasional reselection. For - # a larger number of selections, the pool tracking method is - # preferred since the list takes less space than the - # set and it doesn't suffer from frequent reselections. - - # The number of calls to _randbelow() is kept at or near k, the - # theoretical minimum. This is important because running time - # is dominated by _randbelow() and because it extracts the - # least entropy from the underlying random number generators. - - # Memory requirements are kept to the smaller of a k-length - # set or an n-length list. - - # There are other sampling algorithms that do not require - # auxiliary memory, but they were rejected because they made - # too many calls to _randbelow(), making them slower and - # causing them to eat more entropy than necessary. - - if not isinstance(population, _Sequence): - raise TypeError("Population must be a sequence. " - "For dicts or sets, use sorted(d).") - n = len(population) - if counts is not None: - cum_counts = list(_accumulate(counts)) - if len(cum_counts) != n: - raise ValueError('The number of counts does not match the population') - total = cum_counts.pop() if cum_counts else 0 - if not isinstance(total, int): - raise TypeError('Counts must be integers') - if total < 0: - raise ValueError('Counts must be non-negative') - selections = self.sample(range(total), k=k) - bisect = _bisect - return [population[bisect(cum_counts, s)] for s in selections] - randbelow = self._randbelow - if not 0 <= k <= n: - raise ValueError("Sample larger than population or is negative") - result = [None] * k - setsize = 21 # size of a small set minus size of an empty list - if k > 5: - setsize += 4 ** _ceil(_log(k * 3, 4)) # table size for big sets - if n <= setsize: - # An n-length list is smaller than a k-length set. - # Invariant: non-selected at pool[0 : n-i] - pool = list(population) - for i in range(k): - j = randbelow(n - i) - result[i] = pool[j] - pool[j] = pool[n - i - 1] # move non-selected item into vacancy - else: - selected = set() - selected_add = selected.add - for i in range(k): - j = randbelow(n) - while j in selected: - j = randbelow(n) - selected_add(j) - result[i] = population[j] - return result - - def choices(self, population, weights=None, *, cum_weights=None, k=1): - """Return a k sized list of population elements chosen with replacement. - - If the relative weights or cumulative weights are not specified, - the selections are made with equal probability. - - """ - random = self.random - n = len(population) - if cum_weights is None: - if weights is None: - floor = _floor - n += 0.0 # convert to float for a small speed improvement - return [population[floor(random() * n)] for i in _repeat(None, k)] - try: - cum_weights = list(_accumulate(weights)) - except TypeError: - if not isinstance(weights, int): - raise - k = weights - raise TypeError( - f'The number of choices must be a keyword argument: {k=}' - ) from None - elif weights is not None: - raise TypeError('Cannot specify both weights and cumulative weights') - if len(cum_weights) != n: - raise ValueError('The number of weights does not match the population') - total = cum_weights[-1] + 0.0 # convert to float - if total <= 0.0: - raise ValueError('Total of weights must be greater than zero') - if not _isfinite(total): - raise ValueError('Total of weights must be finite') - bisect = _bisect - hi = n - 1 - return [population[bisect(cum_weights, random() * total, 0, hi)] - for i in _repeat(None, k)] - - - ## -------------------- real-valued distributions ------------------- - - def uniform(self, a, b): - """Get a random number in the range [a, b) or [a, b] depending on rounding. - - The mean (expected value) and variance of the random variable are: - - E[X] = (a + b) / 2 - Var[X] = (b - a) ** 2 / 12 - - """ - return a + (b - a) * self.random() - - def triangular(self, low=0.0, high=1.0, mode=None): - """Triangular distribution. - - Continuous distribution bounded by given lower and upper limits, - and having a given mode value in-between. - - http://en.wikipedia.org/wiki/Triangular_distribution - - The mean (expected value) and variance of the random variable are: - - E[X] = (low + high + mode) / 3 - Var[X] = (low**2 + high**2 + mode**2 - low*high - low*mode - high*mode) / 18 - - """ - u = self.random() - try: - c = 0.5 if mode is None else (mode - low) / (high - low) - except ZeroDivisionError: - return low - if u > c: - u = 1.0 - u - c = 1.0 - c - low, high = high, low - return low + (high - low) * _sqrt(u * c) - - def normalvariate(self, mu=0.0, sigma=1.0): - """Normal distribution. - - mu is the mean, and sigma is the standard deviation. - - """ - # Uses Kinderman and Monahan method. Reference: Kinderman, - # A.J. and Monahan, J.F., "Computer generation of random - # variables using the ratio of uniform deviates", ACM Trans - # Math Software, 3, (1977), pp257-260. - - random = self.random - while True: - u1 = random() - u2 = 1.0 - random() - z = NV_MAGICCONST * (u1 - 0.5) / u2 - zz = z * z / 4.0 - if zz <= -_log(u2): - break - return mu + z * sigma - - def gauss(self, mu=0.0, sigma=1.0): - """Gaussian distribution. - - mu is the mean, and sigma is the standard deviation. This is - slightly faster than the normalvariate() function. - - Not thread-safe without a lock around calls. - - """ - # When x and y are two variables from [0, 1), uniformly - # distributed, then - # - # cos(2*pi*x)*sqrt(-2*log(1-y)) - # sin(2*pi*x)*sqrt(-2*log(1-y)) - # - # are two *independent* variables with normal distribution - # (mu = 0, sigma = 1). - # (Lambert Meertens) - # (corrected version; bug discovered by Mike Miller, fixed by LM) - - # Multithreading note: When two threads call this function - # simultaneously, it is possible that they will receive the - # same return value. The window is very small though. To - # avoid this, you have to use a lock around all calls. (I - # didn't want to slow this down in the serial case by using a - # lock here.) - - random = self.random - z = self.gauss_next - self.gauss_next = None - if z is None: - x2pi = random() * TWOPI - g2rad = _sqrt(-2.0 * _log(1.0 - random())) - z = _cos(x2pi) * g2rad - self.gauss_next = _sin(x2pi) * g2rad - - return mu + z * sigma - - def lognormvariate(self, mu, sigma): - """Log normal distribution. - - If you take the natural logarithm of this distribution, you'll get a - normal distribution with mean mu and standard deviation sigma. - mu can have any value, and sigma must be greater than zero. - - """ - return _exp(self.normalvariate(mu, sigma)) - - def expovariate(self, lambd=1.0): - """Exponential distribution. - - lambd is 1.0 divided by the desired mean. It should be - nonzero. (The parameter would be called "lambda", but that is - a reserved word in Python.) Returned values range from 0 to - positive infinity if lambd is positive, and from negative - infinity to 0 if lambd is negative. - - The mean (expected value) and variance of the random variable are: - - E[X] = 1 / lambd - Var[X] = 1 / lambd ** 2 - - """ - # we use 1-random() instead of random() to preclude the - # possibility of taking the log of zero. - - return -_log(1.0 - self.random()) / lambd - - def vonmisesvariate(self, mu, kappa): - """Circular data distribution. - - mu is the mean angle, expressed in radians between 0 and 2*pi, and - kappa is the concentration parameter, which must be greater than or - equal to zero. If kappa is equal to zero, this distribution reduces - to a uniform random angle over the range 0 to 2*pi. - - """ - # Based upon an algorithm published in: Fisher, N.I., - # "Statistical Analysis of Circular Data", Cambridge - # University Press, 1993. - - # Thanks to Magnus Kessler for a correction to the - # implementation of step 4. - - random = self.random - if kappa <= 1e-6: - return TWOPI * random() - - s = 0.5 / kappa - r = s + _sqrt(1.0 + s * s) - - while True: - u1 = random() - z = _cos(_pi * u1) - - d = z / (r + z) - u2 = random() - if u2 < 1.0 - d * d or u2 <= (1.0 - d) * _exp(d): - break - - q = 1.0 / r - f = (q + z) / (1.0 + q * z) - u3 = random() - if u3 > 0.5: - theta = (mu + _acos(f)) % TWOPI - else: - theta = (mu - _acos(f)) % TWOPI - - return theta - - def gammavariate(self, alpha, beta): - """Gamma distribution. Not the gamma function! - - Conditions on the parameters are alpha > 0 and beta > 0. - - The probability distribution function is: - - x ** (alpha - 1) * math.exp(-x / beta) - pdf(x) = -------------------------------------- - math.gamma(alpha) * beta ** alpha - - The mean (expected value) and variance of the random variable are: - - E[X] = alpha * beta - Var[X] = alpha * beta ** 2 - - """ - - # Warning: a few older sources define the gamma distribution in terms - # of alpha > -1.0 - if alpha <= 0.0 or beta <= 0.0: - raise ValueError('gammavariate: alpha and beta must be > 0.0') - - random = self.random - if alpha > 1.0: - - # Uses R.C.H. Cheng, "The generation of Gamma - # variables with non-integral shape parameters", - # Applied Statistics, (1977), 26, No. 1, p71-74 - - ainv = _sqrt(2.0 * alpha - 1.0) - bbb = alpha - LOG4 - ccc = alpha + ainv - - while True: - u1 = random() - if not 1e-7 < u1 < 0.9999999: - continue - u2 = 1.0 - random() - v = _log(u1 / (1.0 - u1)) / ainv - x = alpha * _exp(v) - z = u1 * u1 * u2 - r = bbb + ccc * v - x - if r + SG_MAGICCONST - 4.5 * z >= 0.0 or r >= _log(z): - return x * beta - - elif alpha == 1.0: - # expovariate(1/beta) - return -_log(1.0 - random()) * beta - - else: - # alpha is between 0 and 1 (exclusive) - # Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle - while True: - u = random() - b = (_e + alpha) / _e - p = b * u - if p <= 1.0: - x = p ** (1.0 / alpha) - else: - x = -_log((b - p) / alpha) - u1 = random() - if p > 1.0: - if u1 <= x ** (alpha - 1.0): - break - elif u1 <= _exp(-x): - break - return x * beta - - def betavariate(self, alpha, beta): - """Beta distribution. - - Conditions on the parameters are alpha > 0 and beta > 0. - Returned values range between 0 and 1. - - The mean (expected value) and variance of the random variable are: - - E[X] = alpha / (alpha + beta) - Var[X] = alpha * beta / ((alpha + beta)**2 * (alpha + beta + 1)) - - """ - ## See - ## http://mail.python.org/pipermail/python-bugs-list/2001-January/003752.html - ## for Ivan Frohne's insightful analysis of why the original implementation: - ## - ## def betavariate(self, alpha, beta): - ## # Discrete Event Simulation in C, pp 87-88. - ## - ## y = self.expovariate(alpha) - ## z = self.expovariate(1.0/beta) - ## return z/(y+z) - ## - ## was dead wrong, and how it probably got that way. - - # This version due to Janne Sinkkonen, and matches all the std - # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution"). - y = self.gammavariate(alpha, 1.0) - if y: - return y / (y + self.gammavariate(beta, 1.0)) - return 0.0 - - def paretovariate(self, alpha): - """Pareto distribution. alpha is the shape parameter.""" - # Jain, pg. 495 - - u = 1.0 - self.random() - return u ** (-1.0 / alpha) - - def weibullvariate(self, alpha, beta): - """Weibull distribution. - - alpha is the scale parameter and beta is the shape parameter. - - """ - # Jain, pg. 499; bug fix courtesy Bill Arms - - u = 1.0 - self.random() - return alpha * (-_log(u)) ** (1.0 / beta) - - - ## -------------------- discrete distributions --------------------- - - def binomialvariate(self, n=1, p=0.5): - """Binomial random variable. - - Gives the number of successes for *n* independent trials - with the probability of success in each trial being *p*: - - sum(random() < p for i in range(n)) - - Returns an integer in the range: - - 0 <= X <= n - - The integer is chosen with the probability: - - P(X == k) = math.comb(n, k) * p ** k * (1 - p) ** (n - k) - - The mean (expected value) and variance of the random variable are: - - E[X] = n * p - Var[X] = n * p * (1 - p) - - """ - # Error check inputs and handle edge cases - if n < 0: - raise ValueError("n must be non-negative") - if p <= 0.0 or p >= 1.0: - if p == 0.0: - return 0 - if p == 1.0: - return n - raise ValueError("p must be in the range 0.0 <= p <= 1.0") - - random = self.random - - # Fast path for a common case - if n == 1: - return _index(random() < p) - - # Exploit symmetry to establish: p <= 0.5 - if p > 0.5: - return n - self.binomialvariate(n, 1.0 - p) - - if n * p < 10.0: - # BG: Geometric method by Devroye with running time of O(np). - # https://dl.acm.org/doi/pdf/10.1145/42372.42381 - x = y = 0 - c = _log2(1.0 - p) - if not c: - return x - while True: - y += _floor(_log2(random()) / c) + 1 - if y > n: - return x - x += 1 - - # BTRS: Transformed rejection with squeeze method by Wolfgang Hörmann - # https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.8407&rep=rep1&type=pdf - assert n*p >= 10.0 and p <= 0.5 - setup_complete = False - - spq = _sqrt(n * p * (1.0 - p)) # Standard deviation of the distribution - b = 1.15 + 2.53 * spq - a = -0.0873 + 0.0248 * b + 0.01 * p - c = n * p + 0.5 - vr = 0.92 - 4.2 / b - - while True: - - u = random() - u -= 0.5 - us = 0.5 - _fabs(u) - k = _floor((2.0 * a / us + b) * u + c) - if k < 0 or k > n: - continue - - # The early-out "squeeze" test substantially reduces - # the number of acceptance condition evaluations. - v = random() - if us >= 0.07 and v <= vr: - return k - - # Acceptance-rejection test. - # Note, the original paper erroneously omits the call to log(v) - # when comparing to the log of the rescaled binomial distribution. - if not setup_complete: - alpha = (2.83 + 5.1 / b) * spq - lpq = _log(p / (1.0 - p)) - m = _floor((n + 1) * p) # Mode of the distribution - h = _lgamma(m + 1) + _lgamma(n - m + 1) - setup_complete = True # Only needs to be done once - v *= alpha / (a / (us * us) + b) - if _log(v) <= h - _lgamma(k + 1) - _lgamma(n - k + 1) + (k - m) * lpq: - return k - - -## ------------------------------------------------------------------ -## --------------- Operating System Random Source ------------------ - - -class SystemRandom(Random): - """Alternate random number generator using sources provided - by the operating system (such as /dev/urandom on Unix or - CryptGenRandom on Windows). - - Not available on all systems (see os.urandom() for details). - - """ - - def random(self): - """Get the next random number in the range 0.0 <= X < 1.0.""" - return (int.from_bytes(_urandom(7)) >> 3) * RECIP_BPF - - def getrandbits(self, k): - """getrandbits(k) -> x. Generates an int with k random bits.""" - if k < 0: - raise ValueError('number of bits must be non-negative') - numbytes = (k + 7) // 8 # bits / 8 and rounded up - x = int.from_bytes(_urandom(numbytes)) - return x >> (numbytes * 8 - k) # trim excess bits - - def randbytes(self, n): - """Generate n random bytes.""" - # os.urandom(n) fails with ValueError for n < 0 - # and returns an empty bytes string for n == 0. - return _urandom(n) - - def seed(self, *args, **kwds): - "Stub method. Not used for a system random number generator." - return None - - def _notimplemented(self, *args, **kwds): - "Method should not be called for a system random number generator." - raise NotImplementedError('System entropy source does not have state.') - getstate = setstate = _notimplemented - - -# ---------------------------------------------------------------------- -# Create one instance, seeded from current time, and export its methods -# as module-level functions. The functions share state across all uses -# (both in the user's code and in the Python libraries), but that's fine -# for most programs and is easier for the casual user than making them -# instantiate their own Random() instance. - -_inst = Random() -seed = _inst.seed -random = _inst.random -uniform = _inst.uniform -triangular = _inst.triangular -randint = _inst.randint -choice = _inst.choice -randrange = _inst.randrange -sample = _inst.sample -shuffle = _inst.shuffle -choices = _inst.choices -normalvariate = _inst.normalvariate -lognormvariate = _inst.lognormvariate -expovariate = _inst.expovariate -vonmisesvariate = _inst.vonmisesvariate -gammavariate = _inst.gammavariate -gauss = _inst.gauss -betavariate = _inst.betavariate -binomialvariate = _inst.binomialvariate -paretovariate = _inst.paretovariate -weibullvariate = _inst.weibullvariate -getstate = _inst.getstate -setstate = _inst.setstate -getrandbits = _inst.getrandbits -randbytes = _inst.randbytes - - -## ------------------------------------------------------ -## ----------------- test program ----------------------- - -def _test_generator(n, func, args): - from statistics import stdev, fmean as mean - from time import perf_counter - - t0 = perf_counter() - data = [func(*args) for i in _repeat(None, n)] - t1 = perf_counter() - - xbar = mean(data) - sigma = stdev(data, xbar) - low = min(data) - high = max(data) - - print(f'{t1 - t0:.3f} sec, {n} times {func.__name__}{args!r}') - print('avg %g, stddev %g, min %g, max %g\n' % (xbar, sigma, low, high)) - - -def _test(N=10_000): - _test_generator(N, random, ()) - _test_generator(N, normalvariate, (0.0, 1.0)) - _test_generator(N, lognormvariate, (0.0, 1.0)) - _test_generator(N, vonmisesvariate, (0.0, 1.0)) - _test_generator(N, binomialvariate, (15, 0.60)) - _test_generator(N, binomialvariate, (100, 0.75)) - _test_generator(N, gammavariate, (0.01, 1.0)) - _test_generator(N, gammavariate, (0.1, 1.0)) - _test_generator(N, gammavariate, (0.1, 2.0)) - _test_generator(N, gammavariate, (0.5, 1.0)) - _test_generator(N, gammavariate, (0.9, 1.0)) - _test_generator(N, gammavariate, (1.0, 1.0)) - _test_generator(N, gammavariate, (2.0, 1.0)) - _test_generator(N, gammavariate, (20.0, 1.0)) - _test_generator(N, gammavariate, (200.0, 1.0)) - _test_generator(N, gauss, (0.0, 1.0)) - _test_generator(N, betavariate, (3.0, 3.0)) - _test_generator(N, triangular, (0.0, 1.0, 1.0 / 3.0)) - - -## ------------------------------------------------------ -## ------------------ fork support --------------------- - -if hasattr(_os, "fork"): - _os.register_at_fork(after_in_child=_inst.seed) - - -# ------------------------------------------------------ -# -------------- command-line interface ---------------- - - -def _parse_args(arg_list: list[str] | None): - import argparse - parser = argparse.ArgumentParser( - formatter_class=argparse.RawTextHelpFormatter, color=True) - group = parser.add_mutually_exclusive_group() - group.add_argument( - "-c", "--choice", nargs="+", - help="print a random choice") - group.add_argument( - "-i", "--integer", type=int, metavar="N", - help="print a random integer between 1 and N inclusive") - group.add_argument( - "-f", "--float", type=float, metavar="N", - help="print a random floating-point number between 0 and N inclusive") - group.add_argument( - "--test", type=int, const=10_000, nargs="?", - help=argparse.SUPPRESS) - parser.add_argument("input", nargs="*", - help="""\ -if no options given, output depends on the input - string or multiple: same as --choice - integer: same as --integer - float: same as --float""") - args = parser.parse_args(arg_list) - return args, parser.format_help() - - -def main(arg_list: list[str] | None = None) -> int | str: - args, help_text = _parse_args(arg_list) - - # Explicit arguments - if args.choice: - return choice(args.choice) - - if args.integer is not None: - return randint(1, args.integer) - - if args.float is not None: - return uniform(0, args.float) - - if args.test: - _test(args.test) - return "" - - # No explicit argument, select based on input - if len(args.input) == 1: - val = args.input[0] - try: - # Is it an integer? - val = int(val) - return randint(1, val) - except ValueError: - try: - # Is it a float? - val = float(val) - return uniform(0, val) - except ValueError: - # Split in case of space-separated string: "a b c" - return choice(val.split()) - - if len(args.input) >= 2: - return choice(args.input) - - return help_text - - -if __name__ == '__main__': - print(main()) diff --git a/Python314_4_x86_Template/Lib/re/__init__.py b/Python314_4_x86_Template/Lib/re/__init__.py deleted file mode 100644 index af2808a77..000000000 --- a/Python314_4_x86_Template/Lib/re/__init__.py +++ /dev/null @@ -1,428 +0,0 @@ -# -# Secret Labs' Regular Expression Engine -# -# re-compatible interface for the sre matching engine -# -# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. -# -# This version of the SRE library can be redistributed under CNRI's -# Python 1.6 license. For any other use, please contact Secret Labs -# AB (info@pythonware.com). -# -# Portions of this engine have been developed in cooperation with -# CNRI. Hewlett-Packard provided funding for 1.6 integration and -# other compatibility work. -# - -r"""Support for regular expressions (RE). - -This module provides regular expression matching operations similar to -those found in Perl. It supports both 8-bit and Unicode strings; both -the pattern and the strings being processed can contain null bytes and -characters outside the US ASCII range. - -Regular expressions can contain both special and ordinary characters. -Most ordinary characters, like "A", "a", or "0", are the simplest -regular expressions; they simply match themselves. You can -concatenate ordinary characters, so last matches the string 'last'. - -The special characters are: - "." Matches any character except a newline. - "^" Matches the start of the string. - "$" Matches the end of the string or just before the newline at - the end of the string. - "*" Matches 0 or more (greedy) repetitions of the preceding RE. - Greedy means that it will match as many repetitions as possible. - "+" Matches 1 or more (greedy) repetitions of the preceding RE. - "?" Matches 0 or 1 (greedy) of the preceding RE. - *?,+?,?? Non-greedy versions of the previous three special characters. - {m,n} Matches from m to n repetitions of the preceding RE. - {m,n}? Non-greedy version of the above. - "\\" Either escapes special characters or signals a special sequence. - [] Indicates a set of characters. - A "^" as the first character indicates a complementing set. - "|" A|B, creates an RE that will match either A or B. - (...) Matches the RE inside the parentheses. - The contents can be retrieved or matched later in the string. - (?aiLmsux) The letters set the corresponding flags defined below. - (?:...) Non-grouping version of regular parentheses. - (?P<name>...) The substring matched by the group is accessible by name. - (?P=name) Matches the text matched earlier by the group named name. - (?#...) A comment; ignored. - (?=...) Matches if ... matches next, but doesn't consume the string. - (?!...) Matches if ... doesn't match next. - (?<=...) Matches if preceded by ... (must be fixed length). - (?<!...) Matches if not preceded by ... (must be fixed length). - (?(id/name)yes|no) Matches yes pattern if the group with id/name matched, - the (optional) no pattern otherwise. - -The special sequences consist of "\\" and a character from the list -below. If the ordinary character is not on the list, then the -resulting RE will match the second character. - \number Matches the contents of the group of the same number. - \A Matches only at the start of the string. - \z Matches only at the end of the string. - \b Matches the empty string, but only at the start or end of a word. - \B Matches the empty string, but not at the start or end of a word. - \d Matches any decimal digit; equivalent to the set [0-9] in - bytes patterns or string patterns with the ASCII flag. - In string patterns without the ASCII flag, it will match the whole - range of Unicode digits. - \D Matches any non-digit character; equivalent to [^\d]. - \s Matches any whitespace character; equivalent to [ \t\n\r\f\v] in - bytes patterns or string patterns with the ASCII flag. - In string patterns without the ASCII flag, it will match the whole - range of Unicode whitespace characters. - \S Matches any non-whitespace character; equivalent to [^\s]. - \w Matches any alphanumeric character; equivalent to [a-zA-Z0-9_] - in bytes patterns or string patterns with the ASCII flag. - In string patterns without the ASCII flag, it will match the - range of Unicode alphanumeric characters (letters plus digits - plus underscore). - With LOCALE, it will match the set [0-9_] plus characters defined - as letters for the current locale. - \W Matches the complement of \w. - \\ Matches a literal backslash. - -This module exports the following functions: - match Match a regular expression pattern to the beginning of a string. - fullmatch Match a regular expression pattern to all of a string. - search Search a string for the presence of a pattern. - sub Substitute occurrences of a pattern found in a string. - subn Same as sub, but also return the number of substitutions made. - split Split a string by the occurrences of a pattern. - findall Find all occurrences of a pattern in a string. - finditer Return an iterator yielding a Match object for each match. - compile Compile a pattern into a Pattern object. - purge Clear the regular expression cache. - escape Backslash all non-alphanumerics in a string. - -Each function other than purge and escape can take an optional 'flags' argument -consisting of one or more of the following module constants, joined by "|". -A, L, and U are mutually exclusive. - A ASCII For string patterns, make \w, \W, \b, \B, \d, \D - match the corresponding ASCII character categories - (rather than the whole Unicode categories, which is the - default). - For bytes patterns, this flag is the only available - behaviour and needn't be specified. - I IGNORECASE Perform case-insensitive matching. - L LOCALE Make \w, \W, \b, \B, dependent on the current locale. - M MULTILINE "^" matches the beginning of lines (after a newline) - as well as the string. - "$" matches the end of lines (before a newline) as well - as the end of the string. - S DOTALL "." matches any character at all, including the newline. - X VERBOSE Ignore whitespace and comments for nicer looking RE's. - U UNICODE For compatibility only. Ignored for string patterns (it - is the default), and forbidden for bytes patterns. - -This module also defines exception 'PatternError', aliased to 'error' for -backward compatibility. - -""" - -import enum -from . import _compiler, _parser -import functools -import _sre - - -# public symbols -__all__ = [ - "match", "fullmatch", "search", "sub", "subn", "split", - "findall", "finditer", "compile", "purge", "escape", - "error", "Pattern", "Match", "A", "I", "L", "M", "S", "X", "U", - "ASCII", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE", - "UNICODE", "NOFLAG", "RegexFlag", "PatternError" -] - -__version__ = "2.2.1" - -@enum.global_enum -@enum._simple_enum(enum.IntFlag, boundary=enum.KEEP) -class RegexFlag: - NOFLAG = 0 - ASCII = A = _compiler.SRE_FLAG_ASCII # assume ascii "locale" - IGNORECASE = I = _compiler.SRE_FLAG_IGNORECASE # ignore case - LOCALE = L = _compiler.SRE_FLAG_LOCALE # assume current 8-bit locale - UNICODE = U = _compiler.SRE_FLAG_UNICODE # assume unicode "locale" - MULTILINE = M = _compiler.SRE_FLAG_MULTILINE # make anchors look for newline - DOTALL = S = _compiler.SRE_FLAG_DOTALL # make dot match newline - VERBOSE = X = _compiler.SRE_FLAG_VERBOSE # ignore whitespace and comments - # sre extensions (experimental, don't rely on these) - DEBUG = _compiler.SRE_FLAG_DEBUG # dump pattern after compilation - __str__ = object.__str__ - _numeric_repr_ = hex - -# sre exception -PatternError = error = _compiler.PatternError - -# -------------------------------------------------------------------- -# public interface - -def match(pattern, string, flags=0): - """Try to apply the pattern at the start of the string, returning - a Match object, or None if no match was found.""" - return _compile(pattern, flags).match(string) - -def fullmatch(pattern, string, flags=0): - """Try to apply the pattern to all of the string, returning - a Match object, or None if no match was found.""" - return _compile(pattern, flags).fullmatch(string) - -def search(pattern, string, flags=0): - """Scan through string looking for a match to the pattern, returning - a Match object, or None if no match was found.""" - return _compile(pattern, flags).search(string) - -class _ZeroSentinel(int): - pass -_zero_sentinel = _ZeroSentinel() - -def sub(pattern, repl, string, *args, count=_zero_sentinel, flags=_zero_sentinel): - """Return the string obtained by replacing the leftmost - non-overlapping occurrences of the pattern in string by the - replacement repl. repl can be either a string or a callable; - if a string, backslash escapes in it are processed. If it is - a callable, it's passed the Match object and must return - a replacement string to be used.""" - if args: - if count is not _zero_sentinel: - raise TypeError("sub() got multiple values for argument 'count'") - count, *args = args - if args: - if flags is not _zero_sentinel: - raise TypeError("sub() got multiple values for argument 'flags'") - flags, *args = args - if args: - raise TypeError("sub() takes from 3 to 5 positional arguments " - "but %d were given" % (5 + len(args))) - - import warnings - warnings.warn( - "'count' is passed as positional argument", - DeprecationWarning, stacklevel=2 - ) - - return _compile(pattern, flags).sub(repl, string, count) -sub.__text_signature__ = '(pattern, repl, string, count=0, flags=0)' - -def subn(pattern, repl, string, *args, count=_zero_sentinel, flags=_zero_sentinel): - """Return a 2-tuple containing (new_string, number). - new_string is the string obtained by replacing the leftmost - non-overlapping occurrences of the pattern in the source - string by the replacement repl. number is the number of - substitutions that were made. repl can be either a string or a - callable; if a string, backslash escapes in it are processed. - If it is a callable, it's passed the Match object and must - return a replacement string to be used.""" - if args: - if count is not _zero_sentinel: - raise TypeError("subn() got multiple values for argument 'count'") - count, *args = args - if args: - if flags is not _zero_sentinel: - raise TypeError("subn() got multiple values for argument 'flags'") - flags, *args = args - if args: - raise TypeError("subn() takes from 3 to 5 positional arguments " - "but %d were given" % (5 + len(args))) - - import warnings - warnings.warn( - "'count' is passed as positional argument", - DeprecationWarning, stacklevel=2 - ) - - return _compile(pattern, flags).subn(repl, string, count) -subn.__text_signature__ = '(pattern, repl, string, count=0, flags=0)' - -def split(pattern, string, *args, maxsplit=_zero_sentinel, flags=_zero_sentinel): - """Split the source string by the occurrences of the pattern, - returning a list containing the resulting substrings. If - capturing parentheses are used in pattern, then the text of all - groups in the pattern are also returned as part of the resulting - list. If maxsplit is nonzero, at most maxsplit splits occur, - and the remainder of the string is returned as the final element - of the list.""" - if args: - if maxsplit is not _zero_sentinel: - raise TypeError("split() got multiple values for argument 'maxsplit'") - maxsplit, *args = args - if args: - if flags is not _zero_sentinel: - raise TypeError("split() got multiple values for argument 'flags'") - flags, *args = args - if args: - raise TypeError("split() takes from 2 to 4 positional arguments " - "but %d were given" % (4 + len(args))) - - import warnings - warnings.warn( - "'maxsplit' is passed as positional argument", - DeprecationWarning, stacklevel=2 - ) - - return _compile(pattern, flags).split(string, maxsplit) -split.__text_signature__ = '(pattern, string, maxsplit=0, flags=0)' - -def findall(pattern, string, flags=0): - """Return a list of all non-overlapping matches in the string. - - If one or more capturing groups are present in the pattern, return - a list of groups; this will be a list of tuples if the pattern - has more than one group. - - Empty matches are included in the result.""" - return _compile(pattern, flags).findall(string) - -def finditer(pattern, string, flags=0): - """Return an iterator over all non-overlapping matches in the - string. For each match, the iterator returns a Match object. - - Empty matches are included in the result.""" - return _compile(pattern, flags).finditer(string) - -def compile(pattern, flags=0): - "Compile a regular expression pattern, returning a Pattern object." - return _compile(pattern, flags) - -def purge(): - "Clear the regular expression caches" - _cache.clear() - _cache2.clear() - _compile_template.cache_clear() - - -# SPECIAL_CHARS -# closing ')', '}' and ']' -# '-' (a range in character set) -# '&', '~', (extended character set operations) -# '#' (comment) and WHITESPACE (ignored) in verbose mode -_special_chars_map = {i: '\\' + chr(i) for i in b'()[]{}?*+-|^$\\.&~# \t\n\r\v\f'} - -def escape(pattern): - """ - Escape special characters in a string. - """ - if isinstance(pattern, str): - return pattern.translate(_special_chars_map) - else: - pattern = str(pattern, 'latin1') - return pattern.translate(_special_chars_map).encode('latin1') - -Pattern = type(_compiler.compile('', 0)) -Match = type(_compiler.compile('', 0).match('')) - -# -------------------------------------------------------------------- -# internals - -# Use the fact that dict keeps the insertion order. -# _cache2 uses the simple FIFO policy which has better latency. -# _cache uses the LRU policy which has better hit rate. -_cache = {} # LRU -_cache2 = {} # FIFO -_MAXCACHE = 512 -_MAXCACHE2 = 256 -assert _MAXCACHE2 < _MAXCACHE - -def _compile(pattern, flags): - # internal: compile pattern - if isinstance(flags, RegexFlag): - flags = flags.value - try: - return _cache2[type(pattern), pattern, flags] - except KeyError: - pass - - key = (type(pattern), pattern, flags) - # Item in _cache should be moved to the end if found. - p = _cache.pop(key, None) - if p is None: - if isinstance(pattern, Pattern): - if flags: - raise ValueError( - "cannot process flags argument with a compiled pattern") - return pattern - if not _compiler.isstring(pattern): - raise TypeError("first argument must be string or compiled pattern") - p = _compiler.compile(pattern, flags) - if flags & DEBUG: - return p - if len(_cache) >= _MAXCACHE: - # Drop the least recently used item. - # next(iter(_cache)) is known to have linear amortized time, - # but it is used here to avoid a dependency from using OrderedDict. - # For the small _MAXCACHE value it doesn't make much of a difference. - try: - del _cache[next(iter(_cache))] - except (StopIteration, RuntimeError, KeyError): - pass - # Append to the end. - _cache[key] = p - - if len(_cache2) >= _MAXCACHE2: - # Drop the oldest item. - try: - del _cache2[next(iter(_cache2))] - except (StopIteration, RuntimeError, KeyError): - pass - _cache2[key] = p - return p - -@functools.lru_cache(_MAXCACHE) -def _compile_template(pattern, repl): - # internal: compile replacement pattern - return _sre.template(pattern, _parser.parse_template(repl, pattern)) - -# register myself for pickling - -import copyreg - -def _pickle(p): - return _compile, (p.pattern, p.flags) - -copyreg.pickle(Pattern, _pickle, _compile) - -# -------------------------------------------------------------------- -# experimental stuff (see python-dev discussions for details) - -class Scanner: - def __init__(self, lexicon, flags=0): - from ._constants import BRANCH, SUBPATTERN - if isinstance(flags, RegexFlag): - flags = flags.value - self.lexicon = lexicon - # combine phrases into a compound pattern - p = [] - s = _parser.State() - s.flags = flags - for phrase, action in lexicon: - gid = s.opengroup() - p.append(_parser.SubPattern(s, [ - (SUBPATTERN, (gid, 0, 0, _parser.parse(phrase, flags))), - ])) - s.closegroup(gid, p[-1]) - p = _parser.SubPattern(s, [(BRANCH, (None, p))]) - self.scanner = _compiler.compile(p) - def scan(self, string): - result = [] - append = result.append - match = self.scanner.scanner(string).match - i = 0 - while True: - m = match() - if not m: - break - j = m.end() - if i == j: - break - action = self.lexicon[m.lastindex-1][1] - if callable(action): - self.match = m - action = action(self, m.group()) - if action is not None: - append(action) - i = j - return result, string[i:] diff --git a/Python314_4_x86_Template/Lib/re/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/re/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index c116b7ce0e0f4ee83b1d5d17c48fa8d087df6ba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20037 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 C{+d?+ diff --git a/Python314_4_x86_Template/Lib/re/__pycache__/_casefix.cpython-314.pyc b/Python314_4_x86_Template/Lib/re/__pycache__/_casefix.cpython-314.pyc deleted file mode 100644 index 36a1f37843af1118915711f88d027368d44a8594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1880 zcmXw%O-vkR7{_OJS<1&kp@kM&XrVw0g$1^y2$dp~uCgsucmM?*Sax9yTbHt(T_PlH zto4hdckd=%j4>fmV~ih(=NeNFoHRY{ZL#s>#s4$^mp%M`&u`zEd3R=~ySl2v!e=k^ zEd5ozWj)t8`jnXA#i(srkF7pyB`wjEy^@nF;J#c<*<#B87?5jVi420r<R!3NhQLZ0 z2CL*ccwAlvLox!^$_+3mqu@z-1+14b@U)Dl>^@5x<R+?7Ccv=V0&64&o{?9<I(ZE| zA(P-KiG$U08$2s_z-E~O&&xE}DtEy)c^$kcGhnC8f=wbRdqQ_QCv)f)nFlY(0@yBZ zfF1HCcu5w)E?ELE%UfWNybVUg0ZU~WERz+mLK0xNtb)Cg1p6eVd*m(YZ?n4A3TZse zLKIK3@V?@QAP`f0r}*(a@R?43==8Nt&vp7nr>Ba2#lMPg6~8OKR}>XLDgIRatT<Hs zqWD$uo8p<`3jWo?<0fE0rw?=*)#-^&<2rq)(@mW|(&=NxZOu<~TGQ!Mo%R%Wz5tTv zfX@}7|A129ZkO$0KMTSMst^_MRmiCV-Z984<BGnCI4(?8Q#I5HRlqBSjt;N$R|@+) z;1tzBouL{j{7$`a6;(@}rSQ`0+DYm(b)3Qt=~@eQfofL;yo-=`iC=Y5-BdG$KTl6? zrP@>huLI&)X4cE#s7~rK6`}g5UX{6ZeOx%aoT{XHs3_I%>mZznEzZk$Vq$zQHut6V z0^eE(_a?483pv-zImva`iw+O>JMV3I?>bp;>z=!o&pB(Et?l(xGUrCp_tSYGmrrIg zt`~_qGrReXt@~G_1Brpe&d^|D-rdY*l6g0g-^@Bw>6GKSPGSwGzLVbR&F&tQjcjhM zZ)e<5ZwOoCmA7(#<G(KkZQCwZxOPq8uab(rcrm17vCIlpBFg;;GphWkVbuCj$Ef$C z0r524RBZICiA&9Xv@lxzXlHcz(aGrYqlXdkqaUG{i~2RdrE7i+F^2sZVchUz%w~<- ze%@jp#+Z|4HO`zeInA6gIm?_kxxidBxx{o#E;Cn6CYkFdUFL?#G&5szlbJR7fSEVB z&D=4$%Y3M*kL3}2EMRUpz#BFhV@@*vi8H6n>NIo4<ScXE<N|Y1Q+HZoJ4e0DUNwg& znd>H9=7z~MGh=d-nKk)<nb*{<w%I#od6)Un<Rj)-(A;v6w`?-ToMaxx{d^Mk2Jx!@ E4<vrPxc~qF diff --git a/Python314_4_x86_Template/Lib/re/__pycache__/_compiler.cpython-314.pyc b/Python314_4_x86_Template/Lib/re/__pycache__/_compiler.cpython-314.pyc deleted file mode 100644 index ff4d7bbadc152eefc6e3115e7f22839965782c4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29735 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 E59DGPBme*a diff --git a/Python314_4_x86_Template/Lib/re/__pycache__/_constants.cpython-314.pyc b/Python314_4_x86_Template/Lib/re/__pycache__/_constants.cpython-314.pyc deleted file mode 100644 index 79aae925b5a7520ba10d080017ca5ff383cc7fa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5695 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 diff --git a/Python314_4_x86_Template/Lib/re/__pycache__/_parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/re/__pycache__/_parser.cpython-314.pyc deleted file mode 100644 index cc6aaf8a7e371438838036dd174c2a173b9060ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45325 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 X4X;!9)cdwfKKcIEgFK(caP0pDoW6*< diff --git a/Python314_4_x86_Template/Lib/re/_casefix.py b/Python314_4_x86_Template/Lib/re/_casefix.py deleted file mode 100644 index fed2d84fc..000000000 --- a/Python314_4_x86_Template/Lib/re/_casefix.py +++ /dev/null @@ -1,106 +0,0 @@ -# Auto-generated by Tools/build/generate_re_casefix.py. - -# Maps the code of lowercased character to codes of different lowercased -# characters which have the same uppercase. -_EXTRA_CASES = { - # LATIN SMALL LETTER I: LATIN SMALL LETTER DOTLESS I - 0x0069: (0x0131,), # 'i': 'ı' - # LATIN SMALL LETTER S: LATIN SMALL LETTER LONG S - 0x0073: (0x017f,), # 's': 'ſ' - # MICRO SIGN: GREEK SMALL LETTER MU - 0x00b5: (0x03bc,), # 'µ': 'μ' - # LATIN SMALL LETTER DOTLESS I: LATIN SMALL LETTER I - 0x0131: (0x0069,), # 'ı': 'i' - # LATIN SMALL LETTER LONG S: LATIN SMALL LETTER S - 0x017f: (0x0073,), # 'ſ': 's' - # COMBINING GREEK YPOGEGRAMMENI: GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI - 0x0345: (0x03b9, 0x1fbe), # '\u0345': 'ιι' - # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - 0x0390: (0x1fd3,), # 'ΐ': 'ΐ' - # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA - 0x03b0: (0x1fe3,), # 'ΰ': 'ΰ' - # GREEK SMALL LETTER BETA: GREEK BETA SYMBOL - 0x03b2: (0x03d0,), # 'β': 'ϐ' - # GREEK SMALL LETTER EPSILON: GREEK LUNATE EPSILON SYMBOL - 0x03b5: (0x03f5,), # 'ε': 'ϵ' - # GREEK SMALL LETTER THETA: GREEK THETA SYMBOL - 0x03b8: (0x03d1,), # 'θ': 'ϑ' - # GREEK SMALL LETTER IOTA: COMBINING GREEK YPOGEGRAMMENI, GREEK PROSGEGRAMMENI - 0x03b9: (0x0345, 0x1fbe), # 'ι': '\u0345ι' - # GREEK SMALL LETTER KAPPA: GREEK KAPPA SYMBOL - 0x03ba: (0x03f0,), # 'κ': 'ϰ' - # GREEK SMALL LETTER MU: MICRO SIGN - 0x03bc: (0x00b5,), # 'μ': 'µ' - # GREEK SMALL LETTER PI: GREEK PI SYMBOL - 0x03c0: (0x03d6,), # 'π': 'ϖ' - # GREEK SMALL LETTER RHO: GREEK RHO SYMBOL - 0x03c1: (0x03f1,), # 'ρ': 'ϱ' - # GREEK SMALL LETTER FINAL SIGMA: GREEK SMALL LETTER SIGMA - 0x03c2: (0x03c3,), # 'ς': 'σ' - # GREEK SMALL LETTER SIGMA: GREEK SMALL LETTER FINAL SIGMA - 0x03c3: (0x03c2,), # 'σ': 'ς' - # GREEK SMALL LETTER PHI: GREEK PHI SYMBOL - 0x03c6: (0x03d5,), # 'φ': 'ϕ' - # GREEK BETA SYMBOL: GREEK SMALL LETTER BETA - 0x03d0: (0x03b2,), # 'ϐ': 'β' - # GREEK THETA SYMBOL: GREEK SMALL LETTER THETA - 0x03d1: (0x03b8,), # 'ϑ': 'θ' - # GREEK PHI SYMBOL: GREEK SMALL LETTER PHI - 0x03d5: (0x03c6,), # 'ϕ': 'φ' - # GREEK PI SYMBOL: GREEK SMALL LETTER PI - 0x03d6: (0x03c0,), # 'ϖ': 'π' - # GREEK KAPPA SYMBOL: GREEK SMALL LETTER KAPPA - 0x03f0: (0x03ba,), # 'ϰ': 'κ' - # GREEK RHO SYMBOL: GREEK SMALL LETTER RHO - 0x03f1: (0x03c1,), # 'ϱ': 'ρ' - # GREEK LUNATE EPSILON SYMBOL: GREEK SMALL LETTER EPSILON - 0x03f5: (0x03b5,), # 'ϵ': 'ε' - # CYRILLIC SMALL LETTER VE: CYRILLIC SMALL LETTER ROUNDED VE - 0x0432: (0x1c80,), # 'в': 'ᲀ' - # CYRILLIC SMALL LETTER DE: CYRILLIC SMALL LETTER LONG-LEGGED DE - 0x0434: (0x1c81,), # 'д': 'ᲁ' - # CYRILLIC SMALL LETTER O: CYRILLIC SMALL LETTER NARROW O - 0x043e: (0x1c82,), # 'о': 'ᲂ' - # CYRILLIC SMALL LETTER ES: CYRILLIC SMALL LETTER WIDE ES - 0x0441: (0x1c83,), # 'с': 'ᲃ' - # CYRILLIC SMALL LETTER TE: CYRILLIC SMALL LETTER TALL TE, CYRILLIC SMALL LETTER THREE-LEGGED TE - 0x0442: (0x1c84, 0x1c85), # 'т': 'ᲄᲅ' - # CYRILLIC SMALL LETTER HARD SIGN: CYRILLIC SMALL LETTER TALL HARD SIGN - 0x044a: (0x1c86,), # 'ъ': 'ᲆ' - # CYRILLIC SMALL LETTER YAT: CYRILLIC SMALL LETTER TALL YAT - 0x0463: (0x1c87,), # 'ѣ': 'ᲇ' - # CYRILLIC SMALL LETTER ROUNDED VE: CYRILLIC SMALL LETTER VE - 0x1c80: (0x0432,), # 'ᲀ': 'в' - # CYRILLIC SMALL LETTER LONG-LEGGED DE: CYRILLIC SMALL LETTER DE - 0x1c81: (0x0434,), # 'ᲁ': 'д' - # CYRILLIC SMALL LETTER NARROW O: CYRILLIC SMALL LETTER O - 0x1c82: (0x043e,), # 'ᲂ': 'о' - # CYRILLIC SMALL LETTER WIDE ES: CYRILLIC SMALL LETTER ES - 0x1c83: (0x0441,), # 'ᲃ': 'с' - # CYRILLIC SMALL LETTER TALL TE: CYRILLIC SMALL LETTER TE, CYRILLIC SMALL LETTER THREE-LEGGED TE - 0x1c84: (0x0442, 0x1c85), # 'ᲄ': 'тᲅ' - # CYRILLIC SMALL LETTER THREE-LEGGED TE: CYRILLIC SMALL LETTER TE, CYRILLIC SMALL LETTER TALL TE - 0x1c85: (0x0442, 0x1c84), # 'ᲅ': 'тᲄ' - # CYRILLIC SMALL LETTER TALL HARD SIGN: CYRILLIC SMALL LETTER HARD SIGN - 0x1c86: (0x044a,), # 'ᲆ': 'ъ' - # CYRILLIC SMALL LETTER TALL YAT: CYRILLIC SMALL LETTER YAT - 0x1c87: (0x0463,), # 'ᲇ': 'ѣ' - # CYRILLIC SMALL LETTER UNBLENDED UK: CYRILLIC SMALL LETTER MONOGRAPH UK - 0x1c88: (0xa64b,), # 'ᲈ': 'ꙋ' - # LATIN SMALL LETTER S WITH DOT ABOVE: LATIN SMALL LETTER LONG S WITH DOT ABOVE - 0x1e61: (0x1e9b,), # 'ṡ': 'ẛ' - # LATIN SMALL LETTER LONG S WITH DOT ABOVE: LATIN SMALL LETTER S WITH DOT ABOVE - 0x1e9b: (0x1e61,), # 'ẛ': 'ṡ' - # GREEK PROSGEGRAMMENI: COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA - 0x1fbe: (0x0345, 0x03b9), # 'ι': '\u0345ι' - # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - 0x1fd3: (0x0390,), # 'ΐ': 'ΐ' - # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - 0x1fe3: (0x03b0,), # 'ΰ': 'ΰ' - # CYRILLIC SMALL LETTER MONOGRAPH UK: CYRILLIC SMALL LETTER UNBLENDED UK - 0xa64b: (0x1c88,), # 'ꙋ': 'ᲈ' - # LATIN SMALL LIGATURE LONG S T: LATIN SMALL LIGATURE ST - 0xfb05: (0xfb06,), # 'ſt': 'st' - # LATIN SMALL LIGATURE ST: LATIN SMALL LIGATURE LONG S T - 0xfb06: (0xfb05,), # 'st': 'ſt' -} diff --git a/Python314_4_x86_Template/Lib/re/_compiler.py b/Python314_4_x86_Template/Lib/re/_compiler.py deleted file mode 100644 index 20dd561d1..000000000 --- a/Python314_4_x86_Template/Lib/re/_compiler.py +++ /dev/null @@ -1,782 +0,0 @@ -# -# Secret Labs' Regular Expression Engine -# -# convert template to internal format -# -# Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. -# -# See the __init__.py file for information on usage and redistribution. -# - -"""Internal support module for sre""" - -import _sre -from . import _parser -from ._constants import * -from ._casefix import _EXTRA_CASES - -assert _sre.MAGIC == MAGIC, "SRE module mismatch" - -_LITERAL_CODES = {LITERAL, NOT_LITERAL} -_SUCCESS_CODES = {SUCCESS, FAILURE} -_ASSERT_CODES = {ASSERT, ASSERT_NOT} -_UNIT_CODES = _LITERAL_CODES | {ANY, IN} - -_REPEATING_CODES = { - MIN_REPEAT: (REPEAT, MIN_UNTIL, MIN_REPEAT_ONE), - MAX_REPEAT: (REPEAT, MAX_UNTIL, REPEAT_ONE), - POSSESSIVE_REPEAT: (POSSESSIVE_REPEAT, SUCCESS, POSSESSIVE_REPEAT_ONE), -} - -_CHARSET_ALL = [(NEGATE, None)] - -def _combine_flags(flags, add_flags, del_flags, - TYPE_FLAGS=_parser.TYPE_FLAGS): - if add_flags & TYPE_FLAGS: - flags &= ~TYPE_FLAGS - return (flags | add_flags) & ~del_flags - -def _compile(code, pattern, flags): - # internal: compile a (sub)pattern - emit = code.append - _len = len - LITERAL_CODES = _LITERAL_CODES - REPEATING_CODES = _REPEATING_CODES - SUCCESS_CODES = _SUCCESS_CODES - ASSERT_CODES = _ASSERT_CODES - iscased = None - tolower = None - fixes = None - if flags & SRE_FLAG_IGNORECASE and not flags & SRE_FLAG_LOCALE: - if flags & SRE_FLAG_UNICODE: - iscased = _sre.unicode_iscased - tolower = _sre.unicode_tolower - fixes = _EXTRA_CASES - else: - iscased = _sre.ascii_iscased - tolower = _sre.ascii_tolower - for op, av in pattern: - if op in LITERAL_CODES: - if not flags & SRE_FLAG_IGNORECASE: - emit(op) - emit(av) - elif flags & SRE_FLAG_LOCALE: - emit(OP_LOCALE_IGNORE[op]) - emit(av) - elif not iscased(av): - emit(op) - emit(av) - else: - lo = tolower(av) - if not fixes: # ascii - emit(OP_IGNORE[op]) - emit(lo) - elif lo not in fixes: - emit(OP_UNICODE_IGNORE[op]) - emit(lo) - else: - emit(IN_UNI_IGNORE) - skip = _len(code); emit(0) - if op is NOT_LITERAL: - emit(NEGATE) - for k in (lo,) + fixes[lo]: - emit(LITERAL) - emit(k) - emit(FAILURE) - code[skip] = _len(code) - skip - elif op is IN: - charset, hascased = _optimize_charset(av, iscased, tolower, fixes) - if not charset: - emit(FAILURE) - elif charset == _CHARSET_ALL: - emit(ANY_ALL) - else: - if flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE: - emit(IN_LOC_IGNORE) - elif not hascased: - emit(IN) - elif not fixes: # ascii - emit(IN_IGNORE) - else: - emit(IN_UNI_IGNORE) - skip = _len(code); emit(0) - _compile_charset(charset, flags, code) - code[skip] = _len(code) - skip - elif op is ANY: - if flags & SRE_FLAG_DOTALL: - emit(ANY_ALL) - else: - emit(ANY) - elif op in REPEATING_CODES: - if _simple(av[2]): - emit(REPEATING_CODES[op][2]) - skip = _len(code); emit(0) - emit(av[0]) - emit(av[1]) - _compile(code, av[2], flags) - emit(SUCCESS) - code[skip] = _len(code) - skip - else: - emit(REPEATING_CODES[op][0]) - skip = _len(code); emit(0) - emit(av[0]) - emit(av[1]) - _compile(code, av[2], flags) - code[skip] = _len(code) - skip - emit(REPEATING_CODES[op][1]) - elif op is SUBPATTERN: - group, add_flags, del_flags, p = av - if group: - emit(MARK) - emit((group-1)*2) - # _compile_info(code, p, _combine_flags(flags, add_flags, del_flags)) - _compile(code, p, _combine_flags(flags, add_flags, del_flags)) - if group: - emit(MARK) - emit((group-1)*2+1) - elif op is ATOMIC_GROUP: - # Atomic Groups are handled by starting with an Atomic - # Group op code, then putting in the atomic group pattern - # and finally a success op code to tell any repeat - # operations within the Atomic Group to stop eating and - # pop their stack if they reach it - emit(ATOMIC_GROUP) - skip = _len(code); emit(0) - _compile(code, av, flags) - emit(SUCCESS) - code[skip] = _len(code) - skip - elif op in SUCCESS_CODES: - emit(op) - elif op in ASSERT_CODES: - emit(op) - skip = _len(code); emit(0) - if av[0] >= 0: - emit(0) # look ahead - else: - lo, hi = av[1].getwidth() - if lo > MAXCODE: - raise error("looks too much behind") - if lo != hi: - raise PatternError("look-behind requires fixed-width pattern") - emit(lo) # look behind - _compile(code, av[1], flags) - emit(SUCCESS) - code[skip] = _len(code) - skip - elif op is AT: - emit(op) - if flags & SRE_FLAG_MULTILINE: - av = AT_MULTILINE.get(av, av) - if flags & SRE_FLAG_LOCALE: - av = AT_LOCALE.get(av, av) - elif flags & SRE_FLAG_UNICODE: - av = AT_UNICODE.get(av, av) - emit(av) - elif op is BRANCH: - emit(op) - tail = [] - tailappend = tail.append - for av in av[1]: - skip = _len(code); emit(0) - # _compile_info(code, av, flags) - _compile(code, av, flags) - emit(JUMP) - tailappend(_len(code)); emit(0) - code[skip] = _len(code) - skip - emit(FAILURE) # end of branch - for tail in tail: - code[tail] = _len(code) - tail - elif op is CATEGORY: - emit(op) - if flags & SRE_FLAG_LOCALE: - av = CH_LOCALE[av] - elif flags & SRE_FLAG_UNICODE: - av = CH_UNICODE[av] - emit(av) - elif op is GROUPREF: - if not flags & SRE_FLAG_IGNORECASE: - emit(op) - elif flags & SRE_FLAG_LOCALE: - emit(GROUPREF_LOC_IGNORE) - elif not fixes: # ascii - emit(GROUPREF_IGNORE) - else: - emit(GROUPREF_UNI_IGNORE) - emit(av-1) - elif op is GROUPREF_EXISTS: - emit(op) - emit(av[0]-1) - skipyes = _len(code); emit(0) - _compile(code, av[1], flags) - if av[2]: - emit(JUMP) - skipno = _len(code); emit(0) - code[skipyes] = _len(code) - skipyes + 1 - _compile(code, av[2], flags) - code[skipno] = _len(code) - skipno - else: - code[skipyes] = _len(code) - skipyes + 1 - else: - raise PatternError(f"internal: unsupported operand type {op!r}") - -def _compile_charset(charset, flags, code): - # compile charset subprogram - emit = code.append - for op, av in charset: - emit(op) - if op is NEGATE: - pass - elif op is LITERAL: - emit(av) - elif op is RANGE or op is RANGE_UNI_IGNORE: - emit(av[0]) - emit(av[1]) - elif op is CHARSET: - code.extend(av) - elif op is BIGCHARSET: - code.extend(av) - elif op is CATEGORY: - if flags & SRE_FLAG_LOCALE: - emit(CH_LOCALE[av]) - elif flags & SRE_FLAG_UNICODE: - emit(CH_UNICODE[av]) - else: - emit(av) - else: - raise PatternError(f"internal: unsupported set operator {op!r}") - emit(FAILURE) - -def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): - # internal: optimize character set - out = [] - tail = [] - charmap = bytearray(256) - hascased = False - for op, av in charset: - while True: - try: - if op is LITERAL: - if fixup: # IGNORECASE and not LOCALE - av = fixup(av) - charmap[av] = 1 - if fixes and av in fixes: - for k in fixes[av]: - charmap[k] = 1 - if not hascased and iscased(av): - hascased = True - else: - charmap[av] = 1 - elif op is RANGE: - r = range(av[0], av[1]+1) - if fixup: # IGNORECASE and not LOCALE - if fixes: - for i in map(fixup, r): - charmap[i] = 1 - if i in fixes: - for k in fixes[i]: - charmap[k] = 1 - else: - for i in map(fixup, r): - charmap[i] = 1 - if not hascased: - hascased = any(map(iscased, r)) - else: - for i in r: - charmap[i] = 1 - elif op is NEGATE: - out.append((op, av)) - elif op is CATEGORY and tail and (CATEGORY, CH_NEGATE[av]) in tail: - # Optimize [\s\S] etc. - out = [] if out else _CHARSET_ALL - return out, False - else: - tail.append((op, av)) - except IndexError: - if len(charmap) == 256: - # character set contains non-UCS1 character codes - charmap += b'\0' * 0xff00 - continue - # Character set contains non-BMP character codes. - # For range, all BMP characters in the range are already - # proceeded. - if fixup: # IGNORECASE and not LOCALE - # For now, IN_UNI_IGNORE+LITERAL and - # IN_UNI_IGNORE+RANGE_UNI_IGNORE work for all non-BMP - # characters, because two characters (at least one of - # which is not in the BMP) match case-insensitively - # if and only if: - # 1) c1.lower() == c2.lower() - # 2) c1.lower() == c2 or c1.lower().upper() == c2 - # Also, both c.lower() and c.lower().upper() are single - # characters for every non-BMP character. - if op is RANGE: - if fixes: # not ASCII - op = RANGE_UNI_IGNORE - hascased = True - else: - assert op is LITERAL - if not hascased and iscased(av): - hascased = True - tail.append((op, av)) - break - - # compress character map - runs = [] - q = 0 - while True: - p = charmap.find(1, q) - if p < 0: - break - if len(runs) >= 2: - runs = None - break - q = charmap.find(0, p) - if q < 0: - runs.append((p, len(charmap))) - break - runs.append((p, q)) - if runs is not None: - # use literal/range - for p, q in runs: - if q - p == 1: - out.append((LITERAL, p)) - else: - out.append((RANGE, (p, q - 1))) - out += tail - # if the case was changed or new representation is more compact - if hascased or len(out) < len(charset): - return out, hascased - # else original character set is good enough - return charset, hascased - - # use bitmap - if len(charmap) == 256: - data = _mk_bitmap(charmap) - out.append((CHARSET, data)) - out += tail - return out, hascased - - # To represent a big charset, first a bitmap of all characters in the - # set is constructed. Then, this bitmap is sliced into chunks of 256 - # characters, duplicate chunks are eliminated, and each chunk is - # given a number. In the compiled expression, the charset is - # represented by a 32-bit word sequence, consisting of one word for - # the number of different chunks, a sequence of 256 bytes (64 words) - # of chunk numbers indexed by their original chunk position, and a - # sequence of 256-bit chunks (8 words each). - - # Compression is normally good: in a typical charset, large ranges of - # Unicode will be either completely excluded (e.g. if only cyrillic - # letters are to be matched), or completely included (e.g. if large - # subranges of Kanji match). These ranges will be represented by - # chunks of all one-bits or all zero-bits. - - # Matching can be also done efficiently: the more significant byte of - # the Unicode character is an index into the chunk number, and the - # less significant byte is a bit index in the chunk (just like the - # CHARSET matching). - - charmap = bytes(charmap) # should be hashable - comps = {} - mapping = bytearray(256) - block = 0 - data = bytearray() - for i in range(0, 65536, 256): - chunk = charmap[i: i + 256] - if chunk in comps: - mapping[i // 256] = comps[chunk] - else: - mapping[i // 256] = comps[chunk] = block - block += 1 - data += chunk - data = _mk_bitmap(data) - data[0:0] = [block] + _bytes_to_codes(mapping) - out.append((BIGCHARSET, data)) - out += tail - return out, hascased - -_CODEBITS = _sre.CODESIZE * 8 -MAXCODE = (1 << _CODEBITS) - 1 -_BITS_TRANS = b'0' + b'1' * 255 -def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int): - s = bits.translate(_BITS_TRANS)[::-1] - return [_int(s[i - _CODEBITS: i], 2) - for i in range(len(s), 0, -_CODEBITS)] - -def _bytes_to_codes(b): - # Convert block indices to word array - a = memoryview(b).cast('I') - assert a.itemsize == _sre.CODESIZE - assert len(a) * a.itemsize == len(b) - return a.tolist() - -def _simple(p): - # check if this subpattern is a "simple" operator - if len(p) != 1: - return False - op, av = p[0] - if op is SUBPATTERN: - return av[0] is None and _simple(av[-1]) - return op in _UNIT_CODES - -def _generate_overlap_table(prefix): - """ - Generate an overlap table for the following prefix. - An overlap table is a table of the same size as the prefix which - informs about the potential self-overlap for each index in the prefix: - - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] - - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with - prefix[0:k] - """ - table = [0] * len(prefix) - for i in range(1, len(prefix)): - idx = table[i - 1] - while prefix[i] != prefix[idx]: - if idx == 0: - table[i] = 0 - break - idx = table[idx - 1] - else: - table[i] = idx + 1 - return table - -def _get_iscased(flags): - if not flags & SRE_FLAG_IGNORECASE: - return None - elif flags & SRE_FLAG_UNICODE: - return _sre.unicode_iscased - else: - return _sre.ascii_iscased - -def _get_literal_prefix(pattern, flags): - # look for literal prefix - prefix = [] - prefixappend = prefix.append - prefix_skip = None - iscased = _get_iscased(flags) - for op, av in pattern.data: - if op is LITERAL: - if iscased and iscased(av): - break - prefixappend(av) - elif op is SUBPATTERN: - group, add_flags, del_flags, p = av - flags1 = _combine_flags(flags, add_flags, del_flags) - if flags1 & SRE_FLAG_IGNORECASE and flags1 & SRE_FLAG_LOCALE: - break - prefix1, prefix_skip1, got_all = _get_literal_prefix(p, flags1) - if prefix_skip is None: - if group is not None: - prefix_skip = len(prefix) - elif prefix_skip1 is not None: - prefix_skip = len(prefix) + prefix_skip1 - prefix.extend(prefix1) - if not got_all: - break - else: - break - else: - return prefix, prefix_skip, True - return prefix, prefix_skip, False - -def _get_charset_prefix(pattern, flags): - while True: - if not pattern.data: - return None - op, av = pattern.data[0] - if op is not SUBPATTERN: - break - group, add_flags, del_flags, pattern = av - flags = _combine_flags(flags, add_flags, del_flags) - if flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE: - return None - - iscased = _get_iscased(flags) - if op is LITERAL: - if iscased and iscased(av): - return None - return [(op, av)] - elif op is BRANCH: - charset = [] - charsetappend = charset.append - for p in av[1]: - if not p: - return None - op, av = p[0] - if op is LITERAL and not (iscased and iscased(av)): - charsetappend((op, av)) - else: - return None - return charset - elif op is IN: - charset = av - if iscased: - for op, av in charset: - if op is LITERAL: - if iscased(av): - return None - elif op is RANGE: - if av[1] > 0xffff: - return None - if any(map(iscased, range(av[0], av[1]+1))): - return None - return charset - return None - -def _compile_info(code, pattern, flags): - # internal: compile an info block. in the current version, - # this contains min/max pattern width, and an optional literal - # prefix or a character map - lo, hi = pattern.getwidth() - if hi > MAXCODE: - hi = MAXCODE - if lo == 0: - code.extend([INFO, 4, 0, lo, hi]) - return - # look for a literal prefix - prefix = [] - prefix_skip = 0 - charset = None # not used - if not (flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE): - # look for literal prefix - prefix, prefix_skip, got_all = _get_literal_prefix(pattern, flags) - # if no prefix, look for charset prefix - if not prefix: - charset = _get_charset_prefix(pattern, flags) - if charset: - charset, hascased = _optimize_charset(charset) - assert not hascased - if charset == _CHARSET_ALL: - charset = None -## if prefix: -## print("*** PREFIX", prefix, prefix_skip) -## if charset: -## print("*** CHARSET", charset) - # add an info block - emit = code.append - emit(INFO) - skip = len(code); emit(0) - # literal flag - mask = 0 - if prefix: - mask = SRE_INFO_PREFIX - if prefix_skip is None and got_all: - mask = mask | SRE_INFO_LITERAL - elif charset: - mask = mask | SRE_INFO_CHARSET - emit(mask) - # pattern length - if lo < MAXCODE: - emit(lo) - else: - emit(MAXCODE) - prefix = prefix[:MAXCODE] - emit(hi) - # add literal prefix - if prefix: - emit(len(prefix)) # length - if prefix_skip is None: - prefix_skip = len(prefix) - emit(prefix_skip) # skip - code.extend(prefix) - # generate overlap table - code.extend(_generate_overlap_table(prefix)) - elif charset: - _compile_charset(charset, flags, code) - code[skip] = len(code) - skip - -def isstring(obj): - return isinstance(obj, (str, bytes)) - -def _code(p, flags): - - flags = p.state.flags | flags - code = [] - - # compile info block - _compile_info(code, p, flags) - - # compile the pattern - _compile(code, p.data, flags) - - code.append(SUCCESS) - - return code - -def _hex_code(code): - return '[%s]' % ', '.join('%#0*x' % (_sre.CODESIZE*2+2, x) for x in code) - -def dis(code): - import sys - - labels = set() - level = 0 - offset_width = len(str(len(code) - 1)) - - def dis_(start, end): - def print_(*args, to=None): - if to is not None: - labels.add(to) - args += ('(to %d)' % (to,),) - print('%*d%s ' % (offset_width, start, ':' if start in labels else '.'), - end=' '*(level-1)) - print(*args) - - def print_2(*args): - print(end=' '*(offset_width + 2*level)) - print(*args) - - nonlocal level - level += 1 - i = start - while i < end: - start = i - op = code[i] - i += 1 - op = OPCODES[op] - if op in (SUCCESS, FAILURE, ANY, ANY_ALL, - MAX_UNTIL, MIN_UNTIL, NEGATE): - print_(op) - elif op in (LITERAL, NOT_LITERAL, - LITERAL_IGNORE, NOT_LITERAL_IGNORE, - LITERAL_UNI_IGNORE, NOT_LITERAL_UNI_IGNORE, - LITERAL_LOC_IGNORE, NOT_LITERAL_LOC_IGNORE): - arg = code[i] - i += 1 - print_(op, '%#02x (%r)' % (arg, chr(arg))) - elif op is AT: - arg = code[i] - i += 1 - arg = str(ATCODES[arg]) - assert arg[:3] == 'AT_' - print_(op, arg[3:]) - elif op is CATEGORY: - arg = code[i] - i += 1 - arg = str(CHCODES[arg]) - assert arg[:9] == 'CATEGORY_' - print_(op, arg[9:]) - elif op in (IN, IN_IGNORE, IN_UNI_IGNORE, IN_LOC_IGNORE): - skip = code[i] - print_(op, skip, to=i+skip) - dis_(i+1, i+skip) - i += skip - elif op in (RANGE, RANGE_UNI_IGNORE): - lo, hi = code[i: i+2] - i += 2 - print_(op, '%#02x %#02x (%r-%r)' % (lo, hi, chr(lo), chr(hi))) - elif op is CHARSET: - print_(op, _hex_code(code[i: i + 256//_CODEBITS])) - i += 256//_CODEBITS - elif op is BIGCHARSET: - arg = code[i] - i += 1 - mapping = list(b''.join(x.to_bytes(_sre.CODESIZE, sys.byteorder) - for x in code[i: i + 256//_sre.CODESIZE])) - print_(op, arg, mapping) - i += 256//_sre.CODESIZE - level += 1 - for j in range(arg): - print_2(_hex_code(code[i: i + 256//_CODEBITS])) - i += 256//_CODEBITS - level -= 1 - elif op in (MARK, GROUPREF, GROUPREF_IGNORE, GROUPREF_UNI_IGNORE, - GROUPREF_LOC_IGNORE): - arg = code[i] - i += 1 - print_(op, arg) - elif op is JUMP: - skip = code[i] - print_(op, skip, to=i+skip) - i += 1 - elif op is BRANCH: - skip = code[i] - print_(op, skip, to=i+skip) - while skip: - dis_(i+1, i+skip) - i += skip - start = i - skip = code[i] - if skip: - print_('branch', skip, to=i+skip) - else: - print_(FAILURE) - i += 1 - elif op in (REPEAT, REPEAT_ONE, MIN_REPEAT_ONE, - POSSESSIVE_REPEAT, POSSESSIVE_REPEAT_ONE): - skip, min, max = code[i: i+3] - if max == MAXREPEAT: - max = 'MAXREPEAT' - print_(op, skip, min, max, to=i+skip) - dis_(i+3, i+skip) - i += skip - elif op is GROUPREF_EXISTS: - arg, skip = code[i: i+2] - print_(op, arg, skip, to=i+skip) - i += 2 - elif op in (ASSERT, ASSERT_NOT): - skip, arg = code[i: i+2] - print_(op, skip, arg, to=i+skip) - dis_(i+2, i+skip) - i += skip - elif op is ATOMIC_GROUP: - skip = code[i] - print_(op, skip, to=i+skip) - dis_(i+1, i+skip) - i += skip - elif op is INFO: - skip, flags, min, max = code[i: i+4] - if max == MAXREPEAT: - max = 'MAXREPEAT' - print_(op, skip, bin(flags), min, max, to=i+skip) - start = i+4 - if flags & SRE_INFO_PREFIX: - prefix_len, prefix_skip = code[i+4: i+6] - print_2(' prefix_skip', prefix_skip) - start = i + 6 - prefix = code[start: start+prefix_len] - print_2(' prefix', - '[%s]' % ', '.join('%#02x' % x for x in prefix), - '(%r)' % ''.join(map(chr, prefix))) - start += prefix_len - print_2(' overlap', code[start: start+prefix_len]) - start += prefix_len - if flags & SRE_INFO_CHARSET: - level += 1 - print_2('in') - dis_(start, i+skip) - level -= 1 - i += skip - else: - raise ValueError(op) - - level -= 1 - - dis_(0, len(code)) - - -def compile(p, flags=0): - # internal: convert pattern list to internal format - - if isstring(p): - pattern = p - p = _parser.parse(p, flags) - else: - pattern = None - - code = _code(p, flags) - - if flags & SRE_FLAG_DEBUG: - print() - dis(code) - - # map in either direction - groupindex = p.state.groupdict - indexgroup = [None] * p.state.groups - for k, i in groupindex.items(): - indexgroup[i] = k - - return _sre.compile( - pattern, flags | p.state.flags, code, - p.state.groups-1, - groupindex, tuple(indexgroup) - ) diff --git a/Python314_4_x86_Template/Lib/re/_constants.py b/Python314_4_x86_Template/Lib/re/_constants.py deleted file mode 100644 index d6f32302d..000000000 --- a/Python314_4_x86_Template/Lib/re/_constants.py +++ /dev/null @@ -1,224 +0,0 @@ -# -# Secret Labs' Regular Expression Engine -# -# various symbols used by the regular expression engine. -# run this script to update the _sre include files! -# -# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. -# -# See the __init__.py file for information on usage and redistribution. -# - -"""Internal support module for sre""" - -# update when constants are added or removed - -MAGIC = 20230612 - -from _sre import MAXREPEAT, MAXGROUPS # noqa: F401 - -# SRE standard exception (access as sre.error) -# should this really be here? - -class PatternError(Exception): - """Exception raised for invalid regular expressions. - - Attributes: - - msg: The unformatted error message - pattern: The regular expression pattern - pos: The index in the pattern where compilation failed (may be None) - lineno: The line corresponding to pos (may be None) - colno: The column corresponding to pos (may be None) - """ - - __module__ = 're' - - def __init__(self, msg, pattern=None, pos=None): - self.msg = msg - self.pattern = pattern - self.pos = pos - if pattern is not None and pos is not None: - msg = '%s at position %d' % (msg, pos) - if isinstance(pattern, str): - newline = '\n' - else: - newline = b'\n' - self.lineno = pattern.count(newline, 0, pos) + 1 - self.colno = pos - pattern.rfind(newline, 0, pos) - if newline in pattern: - msg = '%s (line %d, column %d)' % (msg, self.lineno, self.colno) - else: - self.lineno = self.colno = None - super().__init__(msg) - - -# Backward compatibility after renaming in 3.13 -error = PatternError - -class _NamedIntConstant(int): - def __new__(cls, value, name): - self = super(_NamedIntConstant, cls).__new__(cls, value) - self.name = name - return self - - def __repr__(self): - return self.name - - __reduce__ = None - -MAXREPEAT = _NamedIntConstant(MAXREPEAT, 'MAXREPEAT') - -def _makecodes(*names): - items = [_NamedIntConstant(i, name) for i, name in enumerate(names)] - globals().update({item.name: item for item in items}) - return items - -# operators -OPCODES = _makecodes( - # failure=0 success=1 (just because it looks better that way :-) - 'FAILURE', 'SUCCESS', - - 'ANY', 'ANY_ALL', - 'ASSERT', 'ASSERT_NOT', - 'AT', - 'BRANCH', - 'CATEGORY', - 'CHARSET', 'BIGCHARSET', - 'GROUPREF', 'GROUPREF_EXISTS', - 'IN', - 'INFO', - 'JUMP', - 'LITERAL', - 'MARK', - 'MAX_UNTIL', - 'MIN_UNTIL', - 'NOT_LITERAL', - 'NEGATE', - 'RANGE', - 'REPEAT', - 'REPEAT_ONE', - 'SUBPATTERN', - 'MIN_REPEAT_ONE', - 'ATOMIC_GROUP', - 'POSSESSIVE_REPEAT', - 'POSSESSIVE_REPEAT_ONE', - - 'GROUPREF_IGNORE', - 'IN_IGNORE', - 'LITERAL_IGNORE', - 'NOT_LITERAL_IGNORE', - - 'GROUPREF_LOC_IGNORE', - 'IN_LOC_IGNORE', - 'LITERAL_LOC_IGNORE', - 'NOT_LITERAL_LOC_IGNORE', - - 'GROUPREF_UNI_IGNORE', - 'IN_UNI_IGNORE', - 'LITERAL_UNI_IGNORE', - 'NOT_LITERAL_UNI_IGNORE', - 'RANGE_UNI_IGNORE', - - # The following opcodes are only occurred in the parser output, - # but not in the compiled code. - 'MIN_REPEAT', 'MAX_REPEAT', -) -del OPCODES[-2:] # remove MIN_REPEAT and MAX_REPEAT - -# positions -ATCODES = _makecodes( - 'AT_BEGINNING', 'AT_BEGINNING_LINE', 'AT_BEGINNING_STRING', - 'AT_BOUNDARY', 'AT_NON_BOUNDARY', - 'AT_END', 'AT_END_LINE', 'AT_END_STRING', - - 'AT_LOC_BOUNDARY', 'AT_LOC_NON_BOUNDARY', - - 'AT_UNI_BOUNDARY', 'AT_UNI_NON_BOUNDARY', -) - -# categories -CHCODES = _makecodes( - 'CATEGORY_DIGIT', 'CATEGORY_NOT_DIGIT', - 'CATEGORY_SPACE', 'CATEGORY_NOT_SPACE', - 'CATEGORY_WORD', 'CATEGORY_NOT_WORD', - 'CATEGORY_LINEBREAK', 'CATEGORY_NOT_LINEBREAK', - - 'CATEGORY_LOC_WORD', 'CATEGORY_LOC_NOT_WORD', - - 'CATEGORY_UNI_DIGIT', 'CATEGORY_UNI_NOT_DIGIT', - 'CATEGORY_UNI_SPACE', 'CATEGORY_UNI_NOT_SPACE', - 'CATEGORY_UNI_WORD', 'CATEGORY_UNI_NOT_WORD', - 'CATEGORY_UNI_LINEBREAK', 'CATEGORY_UNI_NOT_LINEBREAK', -) - - -# replacement operations for "ignore case" mode -OP_IGNORE = { - LITERAL: LITERAL_IGNORE, - NOT_LITERAL: NOT_LITERAL_IGNORE, -} - -OP_LOCALE_IGNORE = { - LITERAL: LITERAL_LOC_IGNORE, - NOT_LITERAL: NOT_LITERAL_LOC_IGNORE, -} - -OP_UNICODE_IGNORE = { - LITERAL: LITERAL_UNI_IGNORE, - NOT_LITERAL: NOT_LITERAL_UNI_IGNORE, -} - -AT_MULTILINE = { - AT_BEGINNING: AT_BEGINNING_LINE, - AT_END: AT_END_LINE -} - -AT_LOCALE = { - AT_BOUNDARY: AT_LOC_BOUNDARY, - AT_NON_BOUNDARY: AT_LOC_NON_BOUNDARY -} - -AT_UNICODE = { - AT_BOUNDARY: AT_UNI_BOUNDARY, - AT_NON_BOUNDARY: AT_UNI_NON_BOUNDARY -} - -CH_LOCALE = { - CATEGORY_DIGIT: CATEGORY_DIGIT, - CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT, - CATEGORY_SPACE: CATEGORY_SPACE, - CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE, - CATEGORY_WORD: CATEGORY_LOC_WORD, - CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD, - CATEGORY_LINEBREAK: CATEGORY_LINEBREAK, - CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK -} - -CH_UNICODE = { - CATEGORY_DIGIT: CATEGORY_UNI_DIGIT, - CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT, - CATEGORY_SPACE: CATEGORY_UNI_SPACE, - CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE, - CATEGORY_WORD: CATEGORY_UNI_WORD, - CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD, - CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK, - CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK -} - -CH_NEGATE = dict(zip(CHCODES[::2] + CHCODES[1::2], CHCODES[1::2] + CHCODES[::2])) - -# flags -SRE_FLAG_IGNORECASE = 2 # case insensitive -SRE_FLAG_LOCALE = 4 # honour system locale -SRE_FLAG_MULTILINE = 8 # treat target as multiline string -SRE_FLAG_DOTALL = 16 # treat target as a single string -SRE_FLAG_UNICODE = 32 # use unicode "locale" -SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments -SRE_FLAG_DEBUG = 128 # debugging -SRE_FLAG_ASCII = 256 # use ascii "locale" - -# flags for INFO primitive -SRE_INFO_PREFIX = 1 # has prefix -SRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix) -SRE_INFO_CHARSET = 4 # pattern starts with character from given set diff --git a/Python314_4_x86_Template/Lib/re/_parser.py b/Python314_4_x86_Template/Lib/re/_parser.py deleted file mode 100644 index 35ab7ede2..000000000 --- a/Python314_4_x86_Template/Lib/re/_parser.py +++ /dev/null @@ -1,1066 +0,0 @@ -# -# Secret Labs' Regular Expression Engine -# -# convert re-style regular expression to sre pattern -# -# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. -# -# See the __init__.py file for information on usage and redistribution. -# - -"""Internal support module for sre""" - -# XXX: show string offset and offending character for all errors - -from ._constants import * - -SPECIAL_CHARS = ".\\[{()*+?^$|" -REPEAT_CHARS = "*+?{" - -DIGITS = frozenset("0123456789") - -OCTDIGITS = frozenset("01234567") -HEXDIGITS = frozenset("0123456789abcdefABCDEF") -ASCIILETTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - -WHITESPACE = frozenset(" \t\n\r\v\f") - -_REPEATCODES = frozenset({MIN_REPEAT, MAX_REPEAT, POSSESSIVE_REPEAT}) -_UNITCODES = frozenset({ANY, RANGE, IN, LITERAL, NOT_LITERAL, CATEGORY}) - -ESCAPES = { - r"\a": (LITERAL, ord("\a")), - r"\b": (LITERAL, ord("\b")), - r"\f": (LITERAL, ord("\f")), - r"\n": (LITERAL, ord("\n")), - r"\r": (LITERAL, ord("\r")), - r"\t": (LITERAL, ord("\t")), - r"\v": (LITERAL, ord("\v")), - r"\\": (LITERAL, ord("\\")) -} - -CATEGORIES = { - r"\A": (AT, AT_BEGINNING_STRING), # start of string - r"\b": (AT, AT_BOUNDARY), - r"\B": (AT, AT_NON_BOUNDARY), - r"\d": (IN, [(CATEGORY, CATEGORY_DIGIT)]), - r"\D": (IN, [(CATEGORY, CATEGORY_NOT_DIGIT)]), - r"\s": (IN, [(CATEGORY, CATEGORY_SPACE)]), - r"\S": (IN, [(CATEGORY, CATEGORY_NOT_SPACE)]), - r"\w": (IN, [(CATEGORY, CATEGORY_WORD)]), - r"\W": (IN, [(CATEGORY, CATEGORY_NOT_WORD)]), - r"\z": (AT, AT_END_STRING), # end of string - r"\Z": (AT, AT_END_STRING), # end of string (obsolete) -} - -FLAGS = { - # standard flags - "i": SRE_FLAG_IGNORECASE, - "L": SRE_FLAG_LOCALE, - "m": SRE_FLAG_MULTILINE, - "s": SRE_FLAG_DOTALL, - "x": SRE_FLAG_VERBOSE, - # extensions - "a": SRE_FLAG_ASCII, - "u": SRE_FLAG_UNICODE, -} - -TYPE_FLAGS = SRE_FLAG_ASCII | SRE_FLAG_LOCALE | SRE_FLAG_UNICODE -GLOBAL_FLAGS = SRE_FLAG_DEBUG - -# Maximal value returned by SubPattern.getwidth(). -# Must be larger than MAXREPEAT, MAXCODE and sys.maxsize. -MAXWIDTH = 1 << 64 - -class State: - # keeps track of state for parsing - def __init__(self): - self.flags = 0 - self.groupdict = {} - self.groupwidths = [None] # group 0 - self.lookbehindgroups = None - self.grouprefpos = {} - @property - def groups(self): - return len(self.groupwidths) - def opengroup(self, name=None): - gid = self.groups - self.groupwidths.append(None) - if self.groups > MAXGROUPS: - raise error("too many groups") - if name is not None: - ogid = self.groupdict.get(name, None) - if ogid is not None: - raise error("redefinition of group name %r as group %d; " - "was group %d" % (name, gid, ogid)) - self.groupdict[name] = gid - return gid - def closegroup(self, gid, p): - self.groupwidths[gid] = p.getwidth() - def checkgroup(self, gid): - return gid < self.groups and self.groupwidths[gid] is not None - - def checklookbehindgroup(self, gid, source): - if self.lookbehindgroups is not None: - if not self.checkgroup(gid): - raise source.error('cannot refer to an open group') - if gid >= self.lookbehindgroups: - raise source.error('cannot refer to group defined in the same ' - 'lookbehind subpattern') - -class SubPattern: - # a subpattern, in intermediate form - def __init__(self, state, data=None): - self.state = state - if data is None: - data = [] - self.data = data - self.width = None - - def dump(self, level=0): - seqtypes = (tuple, list) - for op, av in self.data: - print(level*" " + str(op), end='') - if op is IN: - # member sublanguage - print() - for op, a in av: - print((level+1)*" " + str(op), a) - elif op is BRANCH: - print() - for i, a in enumerate(av[1]): - if i: - print(level*" " + "OR") - a.dump(level+1) - elif op is GROUPREF_EXISTS: - condgroup, item_yes, item_no = av - print('', condgroup) - item_yes.dump(level+1) - if item_no: - print(level*" " + "ELSE") - item_no.dump(level+1) - elif isinstance(av, SubPattern): - print() - av.dump(level+1) - elif isinstance(av, seqtypes): - nl = False - for a in av: - if isinstance(a, SubPattern): - if not nl: - print() - a.dump(level+1) - nl = True - else: - if not nl: - print(' ', end='') - print(a, end='') - nl = False - if not nl: - print() - else: - print('', av) - def __repr__(self): - return repr(self.data) - def __len__(self): - return len(self.data) - def __delitem__(self, index): - del self.data[index] - def __getitem__(self, index): - if isinstance(index, slice): - return SubPattern(self.state, self.data[index]) - return self.data[index] - def __setitem__(self, index, code): - self.data[index] = code - def insert(self, index, code): - self.data.insert(index, code) - def append(self, code): - self.data.append(code) - def getwidth(self): - # determine the width (min, max) for this subpattern - if self.width is not None: - return self.width - lo = hi = 0 - for op, av in self.data: - if op is BRANCH: - i = MAXWIDTH - j = 0 - for av in av[1]: - l, h = av.getwidth() - i = min(i, l) - j = max(j, h) - lo = lo + i - hi = hi + j - elif op is ATOMIC_GROUP: - i, j = av.getwidth() - lo = lo + i - hi = hi + j - elif op is SUBPATTERN: - i, j = av[-1].getwidth() - lo = lo + i - hi = hi + j - elif op in _REPEATCODES: - i, j = av[2].getwidth() - lo = lo + i * av[0] - if av[1] == MAXREPEAT and j: - hi = MAXWIDTH - else: - hi = hi + j * av[1] - elif op in _UNITCODES: - lo = lo + 1 - hi = hi + 1 - elif op is GROUPREF: - i, j = self.state.groupwidths[av] - lo = lo + i - hi = hi + j - elif op is GROUPREF_EXISTS: - i, j = av[1].getwidth() - if av[2] is not None: - l, h = av[2].getwidth() - i = min(i, l) - j = max(j, h) - else: - i = 0 - lo = lo + i - hi = hi + j - elif op is SUCCESS: - break - self.width = min(lo, MAXWIDTH), min(hi, MAXWIDTH) - return self.width - -class Tokenizer: - def __init__(self, string): - self.istext = isinstance(string, str) - self.string = string - if not self.istext: - string = str(string, 'latin1') - self.decoded_string = string - self.index = 0 - self.next = None - self.__next() - def __next(self): - index = self.index - try: - char = self.decoded_string[index] - except IndexError: - self.next = None - return - if char == "\\": - index += 1 - try: - char += self.decoded_string[index] - except IndexError: - raise error("bad escape (end of pattern)", - self.string, len(self.string) - 1) from None - self.index = index + 1 - self.next = char - def match(self, char): - if char == self.next: - self.__next() - return True - return False - def get(self): - this = self.next - self.__next() - return this - def getwhile(self, n, charset): - result = '' - for _ in range(n): - c = self.next - if c not in charset: - break - result += c - self.__next() - return result - def getuntil(self, terminator, name): - result = '' - while True: - c = self.next - self.__next() - if c is None: - if not result: - raise self.error("missing " + name) - raise self.error("missing %s, unterminated name" % terminator, - len(result)) - if c == terminator: - if not result: - raise self.error("missing " + name, 1) - break - result += c - return result - @property - def pos(self): - return self.index - len(self.next or '') - def tell(self): - return self.index - len(self.next or '') - def seek(self, index): - self.index = index - self.__next() - - def error(self, msg, offset=0): - if not self.istext: - msg = msg.encode('ascii', 'backslashreplace').decode('ascii') - return error(msg, self.string, self.tell() - offset) - - def checkgroupname(self, name, offset): - if not (self.istext or name.isascii()): - msg = "bad character in group name %a" % name - raise self.error(msg, len(name) + offset) - if not name.isidentifier(): - msg = "bad character in group name %r" % name - raise self.error(msg, len(name) + offset) - -def _class_escape(source, escape): - # handle escape code inside character class - code = ESCAPES.get(escape) - if code: - return code - code = CATEGORIES.get(escape) - if code and code[0] is IN: - return code - try: - c = escape[1:2] - if c == "x": - # hexadecimal escape (exactly two digits) - escape += source.getwhile(2, HEXDIGITS) - if len(escape) != 4: - raise source.error("incomplete escape %s" % escape, len(escape)) - return LITERAL, int(escape[2:], 16) - elif c == "u" and source.istext: - # unicode escape (exactly four digits) - escape += source.getwhile(4, HEXDIGITS) - if len(escape) != 6: - raise source.error("incomplete escape %s" % escape, len(escape)) - return LITERAL, int(escape[2:], 16) - elif c == "U" and source.istext: - # unicode escape (exactly eight digits) - escape += source.getwhile(8, HEXDIGITS) - if len(escape) != 10: - raise source.error("incomplete escape %s" % escape, len(escape)) - c = int(escape[2:], 16) - chr(c) # raise ValueError for invalid code - return LITERAL, c - elif c == "N" and source.istext: - import unicodedata - # named unicode escape e.g. \N{EM DASH} - if not source.match('{'): - raise source.error("missing {") - charname = source.getuntil('}', 'character name') - try: - c = ord(unicodedata.lookup(charname)) - except (KeyError, TypeError): - raise source.error("undefined character name %r" % charname, - len(charname) + len(r'\N{}')) from None - return LITERAL, c - elif c in OCTDIGITS: - # octal escape (up to three digits) - escape += source.getwhile(2, OCTDIGITS) - c = int(escape[1:], 8) - if c > 0o377: - raise source.error('octal escape value %s outside of ' - 'range 0-0o377' % escape, len(escape)) - return LITERAL, c - elif c in DIGITS: - raise ValueError - if len(escape) == 2: - if c in ASCIILETTERS: - raise source.error('bad escape %s' % escape, len(escape)) - return LITERAL, ord(escape[1]) - except ValueError: - pass - raise source.error("bad escape %s" % escape, len(escape)) - -def _escape(source, escape, state): - # handle escape code in expression - code = CATEGORIES.get(escape) - if code: - return code - code = ESCAPES.get(escape) - if code: - return code - try: - c = escape[1:2] - if c == "x": - # hexadecimal escape - escape += source.getwhile(2, HEXDIGITS) - if len(escape) != 4: - raise source.error("incomplete escape %s" % escape, len(escape)) - return LITERAL, int(escape[2:], 16) - elif c == "u" and source.istext: - # unicode escape (exactly four digits) - escape += source.getwhile(4, HEXDIGITS) - if len(escape) != 6: - raise source.error("incomplete escape %s" % escape, len(escape)) - return LITERAL, int(escape[2:], 16) - elif c == "U" and source.istext: - # unicode escape (exactly eight digits) - escape += source.getwhile(8, HEXDIGITS) - if len(escape) != 10: - raise source.error("incomplete escape %s" % escape, len(escape)) - c = int(escape[2:], 16) - chr(c) # raise ValueError for invalid code - return LITERAL, c - elif c == "N" and source.istext: - import unicodedata - # named unicode escape e.g. \N{EM DASH} - if not source.match('{'): - raise source.error("missing {") - charname = source.getuntil('}', 'character name') - try: - c = ord(unicodedata.lookup(charname)) - except (KeyError, TypeError): - raise source.error("undefined character name %r" % charname, - len(charname) + len(r'\N{}')) from None - return LITERAL, c - elif c == "0": - # octal escape - escape += source.getwhile(2, OCTDIGITS) - return LITERAL, int(escape[1:], 8) - elif c in DIGITS: - # octal escape *or* decimal group reference (sigh) - if source.next in DIGITS: - escape += source.get() - if (escape[1] in OCTDIGITS and escape[2] in OCTDIGITS and - source.next in OCTDIGITS): - # got three octal digits; this is an octal escape - escape += source.get() - c = int(escape[1:], 8) - if c > 0o377: - raise source.error('octal escape value %s outside of ' - 'range 0-0o377' % escape, - len(escape)) - return LITERAL, c - # not an octal escape, so this is a group reference - group = int(escape[1:]) - if group < state.groups: - if not state.checkgroup(group): - raise source.error("cannot refer to an open group", - len(escape)) - state.checklookbehindgroup(group, source) - return GROUPREF, group - raise source.error("invalid group reference %d" % group, len(escape) - 1) - if len(escape) == 2: - if c in ASCIILETTERS: - raise source.error("bad escape %s" % escape, len(escape)) - return LITERAL, ord(escape[1]) - except ValueError: - pass - raise source.error("bad escape %s" % escape, len(escape)) - -def _uniq(items): - return list(dict.fromkeys(items)) - -def _parse_sub(source, state, verbose, nested): - # parse an alternation: a|b|c - - items = [] - itemsappend = items.append - sourcematch = source.match - start = source.tell() - while True: - itemsappend(_parse(source, state, verbose, nested + 1, - not nested and not items)) - if not sourcematch("|"): - break - if not nested: - verbose = state.flags & SRE_FLAG_VERBOSE - - if len(items) == 1: - return items[0] - - subpattern = SubPattern(state) - - # check if all items share a common prefix - while True: - prefix = None - for item in items: - if not item: - break - if prefix is None: - prefix = item[0] - elif item[0] != prefix: - break - else: - # all subitems start with a common "prefix". - # move it out of the branch - for item in items: - del item[0] - subpattern.append(prefix) - continue # check next one - break - - # check if the branch can be replaced by a character set - set = [] - for item in items: - if len(item) != 1: - break - op, av = item[0] - if op is LITERAL: - set.append((op, av)) - elif op is IN and av[0][0] is not NEGATE: - set.extend(av) - else: - break - else: - # we can store this as a character set instead of a - # branch (the compiler may optimize this even more) - subpattern.append((IN, _uniq(set))) - return subpattern - - subpattern.append((BRANCH, (None, items))) - return subpattern - -def _parse(source, state, verbose, nested, first=False): - # parse a simple pattern - subpattern = SubPattern(state) - - # precompute constants into local variables - subpatternappend = subpattern.append - sourceget = source.get - sourcematch = source.match - _len = len - _ord = ord - - while True: - - this = source.next - if this is None: - break # end of pattern - if this in "|)": - break # end of subpattern - sourceget() - - if verbose: - # skip whitespace and comments - if this in WHITESPACE: - continue - if this == "#": - while True: - this = sourceget() - if this is None or this == "\n": - break - continue - - if this[0] == "\\": - code = _escape(source, this, state) - subpatternappend(code) - - elif this not in SPECIAL_CHARS: - subpatternappend((LITERAL, _ord(this))) - - elif this == "[": - here = source.tell() - 1 - # character set - set = [] - setappend = set.append -## if sourcematch(":"): -## pass # handle character classes - if source.next == '[': - import warnings - warnings.warn( - 'Possible nested set at position %d' % source.tell(), - FutureWarning, stacklevel=nested + 6 - ) - negate = sourcematch("^") - # check remaining characters - while True: - this = sourceget() - if this is None: - raise source.error("unterminated character set", - source.tell() - here) - if this == "]" and set: - break - elif this[0] == "\\": - code1 = _class_escape(source, this) - else: - if set and this in '-&~|' and source.next == this: - import warnings - warnings.warn( - 'Possible set %s at position %d' % ( - 'difference' if this == '-' else - 'intersection' if this == '&' else - 'symmetric difference' if this == '~' else - 'union', - source.tell() - 1), - FutureWarning, stacklevel=nested + 6 - ) - code1 = LITERAL, _ord(this) - if sourcematch("-"): - # potential range - that = sourceget() - if that is None: - raise source.error("unterminated character set", - source.tell() - here) - if that == "]": - if code1[0] is IN: - code1 = code1[1][0] - setappend(code1) - setappend((LITERAL, _ord("-"))) - break - if that[0] == "\\": - code2 = _class_escape(source, that) - else: - if that == '-': - import warnings - warnings.warn( - 'Possible set difference at position %d' % ( - source.tell() - 2), - FutureWarning, stacklevel=nested + 6 - ) - code2 = LITERAL, _ord(that) - if code1[0] != LITERAL or code2[0] != LITERAL: - msg = "bad character range %s-%s" % (this, that) - raise source.error(msg, len(this) + 1 + len(that)) - lo = code1[1] - hi = code2[1] - if hi < lo: - msg = "bad character range %s-%s" % (this, that) - raise source.error(msg, len(this) + 1 + len(that)) - setappend((RANGE, (lo, hi))) - else: - if code1[0] is IN: - code1 = code1[1][0] - setappend(code1) - - set = _uniq(set) - # XXX: <fl> should move set optimization to compiler! - if _len(set) == 1 and set[0][0] is LITERAL: - # optimization - if negate: - subpatternappend((NOT_LITERAL, set[0][1])) - else: - subpatternappend(set[0]) - else: - if negate: - set.insert(0, (NEGATE, None)) - # charmap optimization can't be added here because - # global flags still are not known - subpatternappend((IN, set)) - - elif this in REPEAT_CHARS: - # repeat previous item - here = source.tell() - if this == "?": - min, max = 0, 1 - elif this == "*": - min, max = 0, MAXREPEAT - - elif this == "+": - min, max = 1, MAXREPEAT - elif this == "{": - if source.next == "}": - subpatternappend((LITERAL, _ord(this))) - continue - - min, max = 0, MAXREPEAT - lo = hi = "" - while source.next in DIGITS: - lo += sourceget() - if sourcematch(","): - while source.next in DIGITS: - hi += sourceget() - else: - hi = lo - if not sourcematch("}"): - subpatternappend((LITERAL, _ord(this))) - source.seek(here) - continue - - if lo: - min = int(lo) - if min >= MAXREPEAT: - raise OverflowError("the repetition number is too large") - if hi: - max = int(hi) - if max >= MAXREPEAT: - raise OverflowError("the repetition number is too large") - if max < min: - raise source.error("min repeat greater than max repeat", - source.tell() - here) - else: - raise AssertionError("unsupported quantifier %r" % (char,)) - # figure out which item to repeat - if subpattern: - item = subpattern[-1:] - else: - item = None - if not item or item[0][0] is AT: - raise source.error("nothing to repeat", - source.tell() - here + len(this)) - if item[0][0] in _REPEATCODES: - raise source.error("multiple repeat", - source.tell() - here + len(this)) - if item[0][0] is SUBPATTERN: - group, add_flags, del_flags, p = item[0][1] - if group is None and not add_flags and not del_flags: - item = p - if sourcematch("?"): - # Non-Greedy Match - subpattern[-1] = (MIN_REPEAT, (min, max, item)) - elif sourcematch("+"): - # Possessive Match (Always Greedy) - subpattern[-1] = (POSSESSIVE_REPEAT, (min, max, item)) - else: - # Greedy Match - subpattern[-1] = (MAX_REPEAT, (min, max, item)) - - elif this == ".": - subpatternappend((ANY, None)) - - elif this == "(": - start = source.tell() - 1 - capture = True - atomic = False - name = None - add_flags = 0 - del_flags = 0 - if sourcematch("?"): - # options - char = sourceget() - if char is None: - raise source.error("unexpected end of pattern") - if char == "P": - # python extensions - if sourcematch("<"): - # named group: skip forward to end of name - name = source.getuntil(">", "group name") - source.checkgroupname(name, 1) - elif sourcematch("="): - # named backreference - name = source.getuntil(")", "group name") - source.checkgroupname(name, 1) - gid = state.groupdict.get(name) - if gid is None: - msg = "unknown group name %r" % name - raise source.error(msg, len(name) + 1) - if not state.checkgroup(gid): - raise source.error("cannot refer to an open group", - len(name) + 1) - state.checklookbehindgroup(gid, source) - subpatternappend((GROUPREF, gid)) - continue - - else: - char = sourceget() - if char is None: - raise source.error("unexpected end of pattern") - raise source.error("unknown extension ?P" + char, - len(char) + 2) - elif char == ":": - # non-capturing group - capture = False - elif char == "#": - # comment - while True: - if source.next is None: - raise source.error("missing ), unterminated comment", - source.tell() - start) - if sourceget() == ")": - break - continue - - elif char in "=!<": - # lookahead assertions - dir = 1 - if char == "<": - char = sourceget() - if char is None: - raise source.error("unexpected end of pattern") - if char not in "=!": - raise source.error("unknown extension ?<" + char, - len(char) + 2) - dir = -1 # lookbehind - lookbehindgroups = state.lookbehindgroups - if lookbehindgroups is None: - state.lookbehindgroups = state.groups - p = _parse_sub(source, state, verbose, nested + 1) - if dir < 0: - if lookbehindgroups is None: - state.lookbehindgroups = None - if not sourcematch(")"): - raise source.error("missing ), unterminated subpattern", - source.tell() - start) - if char == "=": - subpatternappend((ASSERT, (dir, p))) - elif p: - subpatternappend((ASSERT_NOT, (dir, p))) - else: - subpatternappend((FAILURE, ())) - continue - - elif char == "(": - # conditional backreference group - condname = source.getuntil(")", "group name") - if not (condname.isdecimal() and condname.isascii()): - source.checkgroupname(condname, 1) - condgroup = state.groupdict.get(condname) - if condgroup is None: - msg = "unknown group name %r" % condname - raise source.error(msg, len(condname) + 1) - else: - condgroup = int(condname) - if not condgroup: - raise source.error("bad group number", - len(condname) + 1) - if condgroup >= MAXGROUPS: - msg = "invalid group reference %d" % condgroup - raise source.error(msg, len(condname) + 1) - if condgroup not in state.grouprefpos: - state.grouprefpos[condgroup] = ( - source.tell() - len(condname) - 1 - ) - state.checklookbehindgroup(condgroup, source) - item_yes = _parse(source, state, verbose, nested + 1) - if source.match("|"): - item_no = _parse(source, state, verbose, nested + 1) - if source.next == "|": - raise source.error("conditional backref with more than two branches") - else: - item_no = None - if not source.match(")"): - raise source.error("missing ), unterminated subpattern", - source.tell() - start) - subpatternappend((GROUPREF_EXISTS, (condgroup, item_yes, item_no))) - continue - - elif char == ">": - # non-capturing, atomic group - capture = False - atomic = True - elif char in FLAGS or char == "-": - # flags - flags = _parse_flags(source, state, char) - if flags is None: # global flags - if not first or subpattern: - raise source.error('global flags not at the start ' - 'of the expression', - source.tell() - start) - verbose = state.flags & SRE_FLAG_VERBOSE - continue - - add_flags, del_flags = flags - capture = False - else: - raise source.error("unknown extension ?" + char, - len(char) + 1) - - # parse group contents - if capture: - try: - group = state.opengroup(name) - except error as err: - raise source.error(err.msg, len(name) + 1) from None - else: - group = None - sub_verbose = ((verbose or (add_flags & SRE_FLAG_VERBOSE)) and - not (del_flags & SRE_FLAG_VERBOSE)) - p = _parse_sub(source, state, sub_verbose, nested + 1) - if not source.match(")"): - raise source.error("missing ), unterminated subpattern", - source.tell() - start) - if group is not None: - state.closegroup(group, p) - if atomic: - assert group is None - subpatternappend((ATOMIC_GROUP, p)) - else: - subpatternappend((SUBPATTERN, (group, add_flags, del_flags, p))) - - elif this == "^": - subpatternappend((AT, AT_BEGINNING)) - - elif this == "$": - subpatternappend((AT, AT_END)) - - else: - raise AssertionError("unsupported special character %r" % (char,)) - - # unpack non-capturing groups - for i in range(len(subpattern))[::-1]: - op, av = subpattern[i] - if op is SUBPATTERN: - group, add_flags, del_flags, p = av - if group is None and not add_flags and not del_flags: - subpattern[i: i+1] = p - - return subpattern - -def _parse_flags(source, state, char): - sourceget = source.get - add_flags = 0 - del_flags = 0 - if char != "-": - while True: - flag = FLAGS[char] - if source.istext: - if char == 'L': - msg = "bad inline flags: cannot use 'L' flag with a str pattern" - raise source.error(msg) - else: - if char == 'u': - msg = "bad inline flags: cannot use 'u' flag with a bytes pattern" - raise source.error(msg) - add_flags |= flag - if (flag & TYPE_FLAGS) and (add_flags & TYPE_FLAGS) != flag: - msg = "bad inline flags: flags 'a', 'u' and 'L' are incompatible" - raise source.error(msg) - char = sourceget() - if char is None: - raise source.error("missing -, : or )") - if char in ")-:": - break - if char not in FLAGS: - msg = "unknown flag" if char.isalpha() else "missing -, : or )" - raise source.error(msg, len(char)) - if char == ")": - state.flags |= add_flags - return None - if add_flags & GLOBAL_FLAGS: - raise source.error("bad inline flags: cannot turn on global flag", 1) - if char == "-": - char = sourceget() - if char is None: - raise source.error("missing flag") - if char not in FLAGS: - msg = "unknown flag" if char.isalpha() else "missing flag" - raise source.error(msg, len(char)) - while True: - flag = FLAGS[char] - if flag & TYPE_FLAGS: - msg = "bad inline flags: cannot turn off flags 'a', 'u' and 'L'" - raise source.error(msg) - del_flags |= flag - char = sourceget() - if char is None: - raise source.error("missing :") - if char == ":": - break - if char not in FLAGS: - msg = "unknown flag" if char.isalpha() else "missing :" - raise source.error(msg, len(char)) - assert char == ":" - if del_flags & GLOBAL_FLAGS: - raise source.error("bad inline flags: cannot turn off global flag", 1) - if add_flags & del_flags: - raise source.error("bad inline flags: flag turned on and off", 1) - return add_flags, del_flags - -def fix_flags(src, flags): - # Check and fix flags according to the type of pattern (str or bytes) - if isinstance(src, str): - if flags & SRE_FLAG_LOCALE: - raise ValueError("cannot use LOCALE flag with a str pattern") - if not flags & SRE_FLAG_ASCII: - flags |= SRE_FLAG_UNICODE - elif flags & SRE_FLAG_UNICODE: - raise ValueError("ASCII and UNICODE flags are incompatible") - else: - if flags & SRE_FLAG_UNICODE: - raise ValueError("cannot use UNICODE flag with a bytes pattern") - if flags & SRE_FLAG_LOCALE and flags & SRE_FLAG_ASCII: - raise ValueError("ASCII and LOCALE flags are incompatible") - return flags - -def parse(str, flags=0, state=None): - # parse 're' pattern into list of (opcode, argument) tuples - - source = Tokenizer(str) - - if state is None: - state = State() - state.flags = flags - state.str = str - - p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0) - p.state.flags = fix_flags(str, p.state.flags) - - if source.next is not None: - assert source.next == ")" - raise source.error("unbalanced parenthesis") - - for g in p.state.grouprefpos: - if g >= p.state.groups: - msg = "invalid group reference %d" % g - raise error(msg, str, p.state.grouprefpos[g]) - - if flags & SRE_FLAG_DEBUG: - p.dump() - - return p - -def parse_template(source, pattern): - # parse 're' replacement string into list of literals and - # group references - s = Tokenizer(source) - sget = s.get - result = [] - literal = [] - lappend = literal.append - def addliteral(): - if s.istext: - result.append(''.join(literal)) - else: - # The tokenizer implicitly decodes bytes objects as latin-1, we must - # therefore re-encode the final representation. - result.append(''.join(literal).encode('latin-1')) - del literal[:] - def addgroup(index, pos): - if index > pattern.groups: - raise s.error("invalid group reference %d" % index, pos) - addliteral() - result.append(index) - groupindex = pattern.groupindex - while True: - this = sget() - if this is None: - break # end of replacement string - if this[0] == "\\": - # group - c = this[1] - if c == "g": - if not s.match("<"): - raise s.error("missing <") - name = s.getuntil(">", "group name") - if not (name.isdecimal() and name.isascii()): - s.checkgroupname(name, 1) - try: - index = groupindex[name] - except KeyError: - raise IndexError("unknown group name %r" % name) from None - else: - index = int(name) - if index >= MAXGROUPS: - raise s.error("invalid group reference %d" % index, - len(name) + 1) - addgroup(index, len(name) + 1) - elif c == "0": - if s.next in OCTDIGITS: - this += sget() - if s.next in OCTDIGITS: - this += sget() - lappend(chr(int(this[1:], 8) & 0xff)) - elif c in DIGITS: - isoctal = False - if s.next in DIGITS: - this += sget() - if (c in OCTDIGITS and this[2] in OCTDIGITS and - s.next in OCTDIGITS): - this += sget() - isoctal = True - c = int(this[1:], 8) - if c > 0o377: - raise s.error('octal escape value %s outside of ' - 'range 0-0o377' % this, len(this)) - lappend(chr(c)) - if not isoctal: - addgroup(int(this[1:]), len(this) - 1) - else: - try: - this = chr(ESCAPES[this][1]) - except KeyError: - if c in ASCIILETTERS: - raise s.error('bad escape %s' % this, len(this)) from None - lappend(this) - else: - lappend(this) - addliteral() - return result diff --git a/Python314_4_x86_Template/Lib/reprlib.py b/Python314_4_x86_Template/Lib/reprlib.py deleted file mode 100644 index ab1824768..000000000 --- a/Python314_4_x86_Template/Lib/reprlib.py +++ /dev/null @@ -1,230 +0,0 @@ -"""Redo the builtin repr() (representation) but with limits on most sizes.""" - -__all__ = ["Repr", "repr", "recursive_repr"] - -import builtins -from itertools import islice -from _thread import get_ident - -def recursive_repr(fillvalue='...'): - 'Decorator to make a repr function return fillvalue for a recursive call' - - def decorating_function(user_function): - repr_running = set() - - def wrapper(self): - key = id(self), get_ident() - if key in repr_running: - return fillvalue - repr_running.add(key) - try: - result = user_function(self) - finally: - repr_running.discard(key) - return result - - # Can't use functools.wraps() here because of bootstrap issues - wrapper.__module__ = getattr(user_function, '__module__') - wrapper.__doc__ = getattr(user_function, '__doc__') - wrapper.__name__ = getattr(user_function, '__name__') - wrapper.__qualname__ = getattr(user_function, '__qualname__') - wrapper.__annotate__ = getattr(user_function, '__annotate__', None) - wrapper.__type_params__ = getattr(user_function, '__type_params__', ()) - wrapper.__wrapped__ = user_function - return wrapper - - return decorating_function - -class Repr: - _lookup = { - 'tuple': 'builtins', - 'list': 'builtins', - 'array': 'array', - 'set': 'builtins', - 'frozenset': 'builtins', - 'deque': 'collections', - 'dict': 'builtins', - 'str': 'builtins', - 'int': 'builtins' - } - - def __init__( - self, *, maxlevel=6, maxtuple=6, maxlist=6, maxarray=5, maxdict=4, - maxset=6, maxfrozenset=6, maxdeque=6, maxstring=30, maxlong=40, - maxother=30, fillvalue='...', indent=None, - ): - self.maxlevel = maxlevel - self.maxtuple = maxtuple - self.maxlist = maxlist - self.maxarray = maxarray - self.maxdict = maxdict - self.maxset = maxset - self.maxfrozenset = maxfrozenset - self.maxdeque = maxdeque - self.maxstring = maxstring - self.maxlong = maxlong - self.maxother = maxother - self.fillvalue = fillvalue - self.indent = indent - - def repr(self, x): - return self.repr1(x, self.maxlevel) - - def repr1(self, x, level): - cls = type(x) - typename = cls.__name__ - - if ' ' in typename: - parts = typename.split() - typename = '_'.join(parts) - - method = getattr(self, 'repr_' + typename, None) - if method: - # not defined in this class - if typename not in self._lookup: - return method(x, level) - module = getattr(cls, '__module__', None) - # defined in this class and is the module intended - if module == self._lookup[typename]: - return method(x, level) - - return self.repr_instance(x, level) - - def _join(self, pieces, level): - if self.indent is None: - return ', '.join(pieces) - if not pieces: - return '' - indent = self.indent - if isinstance(indent, int): - if indent < 0: - raise ValueError( - f'Repr.indent cannot be negative int (was {indent!r})' - ) - indent *= ' ' - try: - sep = ',\n' + (self.maxlevel - level + 1) * indent - except TypeError as error: - raise TypeError( - f'Repr.indent must be a str, int or None, not {type(indent)}' - ) from error - return sep.join(('', *pieces, ''))[1:-len(indent) or None] - - def _repr_iterable(self, x, level, left, right, maxiter, trail=''): - n = len(x) - if level <= 0 and n: - s = self.fillvalue - else: - newlevel = level - 1 - repr1 = self.repr1 - pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)] - if n > maxiter: - pieces.append(self.fillvalue) - s = self._join(pieces, level) - if n == 1 and trail and self.indent is None: - right = trail + right - return '%s%s%s' % (left, s, right) - - def repr_tuple(self, x, level): - return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',') - - def repr_list(self, x, level): - return self._repr_iterable(x, level, '[', ']', self.maxlist) - - def repr_array(self, x, level): - if not x: - return "array('%s')" % x.typecode - header = "array('%s', [" % x.typecode - return self._repr_iterable(x, level, header, '])', self.maxarray) - - def repr_set(self, x, level): - if not x: - return 'set()' - x = _possibly_sorted(x) - return self._repr_iterable(x, level, '{', '}', self.maxset) - - def repr_frozenset(self, x, level): - if not x: - return 'frozenset()' - x = _possibly_sorted(x) - return self._repr_iterable(x, level, 'frozenset({', '})', - self.maxfrozenset) - - def repr_deque(self, x, level): - return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque) - - def repr_dict(self, x, level): - n = len(x) - if n == 0: - return '{}' - if level <= 0: - return '{' + self.fillvalue + '}' - newlevel = level - 1 - repr1 = self.repr1 - pieces = [] - for key in islice(_possibly_sorted(x), self.maxdict): - keyrepr = repr1(key, newlevel) - valrepr = repr1(x[key], newlevel) - pieces.append('%s: %s' % (keyrepr, valrepr)) - if n > self.maxdict: - pieces.append(self.fillvalue) - s = self._join(pieces, level) - return '{%s}' % (s,) - - def repr_str(self, x, level): - s = builtins.repr(x[:self.maxstring]) - if len(s) > self.maxstring: - i = max(0, (self.maxstring-3)//2) - j = max(0, self.maxstring-3-i) - s = builtins.repr(x[:i] + x[len(x)-j:]) - s = s[:i] + self.fillvalue + s[len(s)-j:] - return s - - def repr_int(self, x, level): - try: - s = builtins.repr(x) - except ValueError as exc: - assert 'sys.set_int_max_str_digits()' in str(exc) - # Those imports must be deferred due to Python's build system - # where the reprlib module is imported before the math module. - import math, sys - # Integers with more than sys.get_int_max_str_digits() digits - # are rendered differently as their repr() raises a ValueError. - # See https://github.com/python/cpython/issues/135487. - k = 1 + int(math.log10(abs(x))) - # Note: math.log10(abs(x)) may be overestimated or underestimated, - # but for simplicity, we do not compute the exact number of digits. - max_digits = sys.get_int_max_str_digits() - return (f'<{x.__class__.__name__} instance with roughly {k} ' - f'digits (limit at {max_digits}) at 0x{id(x):x}>') - if len(s) > self.maxlong: - i = max(0, (self.maxlong-3)//2) - j = max(0, self.maxlong-3-i) - s = s[:i] + self.fillvalue + s[len(s)-j:] - return s - - def repr_instance(self, x, level): - try: - s = builtins.repr(x) - # Bugs in x.__repr__() can cause arbitrary - # exceptions -- then make up something - except Exception: - return '<%s instance at %#x>' % (x.__class__.__name__, id(x)) - if len(s) > self.maxother: - i = max(0, (self.maxother-3)//2) - j = max(0, self.maxother-3-i) - s = s[:i] + self.fillvalue + s[len(s)-j:] - return s - - -def _possibly_sorted(x): - # Since not all sequences of items can be sorted and comparison - # functions may raise arbitrary exceptions, return an unsorted - # sequence in that case. - try: - return sorted(x) - except Exception: - return list(x) - -aRepr = Repr() -repr = aRepr.repr diff --git a/Python314_4_x86_Template/Lib/rlcompleter.py b/Python314_4_x86_Template/Lib/rlcompleter.py deleted file mode 100644 index 23eb0020f..000000000 --- a/Python314_4_x86_Template/Lib/rlcompleter.py +++ /dev/null @@ -1,221 +0,0 @@ -"""Word completion for GNU readline. - -The completer completes keywords, built-ins and globals in a selectable -namespace (which defaults to __main__); when completing NAME.NAME..., it -evaluates (!) the expression up to the last dot and completes its attributes. - -It's very cool to do "import sys" type "sys.", hit the completion key (twice), -and see the list of names defined by the sys module! - -Tip: to use the tab key as the completion key, call - - readline.parse_and_bind("tab: complete") - -Notes: - -- Exceptions raised by the completer function are *ignored* (and generally cause - the completion to fail). This is a feature -- since readline sets the tty - device in raw (or cbreak) mode, printing a traceback wouldn't work well - without some complicated hoopla to save, reset and restore the tty state. - -- The evaluation of the NAME.NAME... form may cause arbitrary application - defined code to be executed if an object with a __getattr__ hook is found. - Since it is the responsibility of the application (or the user) to enable this - feature, I consider this an acceptable risk. More complicated expressions - (e.g. function calls or indexing operations) are *not* evaluated. - -- When the original stdin is not a tty device, GNU readline is never - used, and this module (and the readline module) are silently inactive. - -""" - -import atexit -import builtins -import inspect -import keyword -import re -import __main__ -import warnings - -__all__ = ["Completer"] - -class Completer: - def __init__(self, namespace = None): - """Create a new completer for the command line. - - Completer([namespace]) -> completer instance. - - If unspecified, the default namespace where completions are performed - is __main__ (technically, __main__.__dict__). Namespaces should be - given as dictionaries. - - Completer instances should be used as the completion mechanism of - readline via the set_completer() call: - - readline.set_completer(Completer(my_namespace).complete) - """ - - if namespace and not isinstance(namespace, dict): - raise TypeError('namespace must be a dictionary') - - # Don't bind to namespace quite yet, but flag whether the user wants a - # specific namespace or to use __main__.__dict__. This will allow us - # to bind to __main__.__dict__ at completion time, not now. - if namespace is None: - self.use_main_ns = 1 - else: - self.use_main_ns = 0 - self.namespace = namespace - - def complete(self, text, state): - """Return the next possible completion for 'text'. - - This is called successively with state == 0, 1, 2, ... until it - returns None. The completion should begin with 'text'. - - """ - if self.use_main_ns: - self.namespace = __main__.__dict__ - - if not text.strip(): - if state == 0: - if _readline_available: - readline.insert_text('\t') - readline.redisplay() - return '' - else: - return '\t' - else: - return None - - if state == 0: - with warnings.catch_warnings(action="ignore"): - if "." in text: - self.matches = self.attr_matches(text) - else: - self.matches = self.global_matches(text) - try: - return self.matches[state] - except IndexError: - return None - - def _callable_postfix(self, val, word): - if callable(val): - word += "(" - try: - if not inspect.signature(val).parameters: - word += ")" - except ValueError: - pass - - return word - - def global_matches(self, text): - """Compute matches when text is a simple name. - - Return a list of all keywords, built-in functions and names currently - defined in self.namespace that match. - - """ - matches = [] - seen = {"__builtins__"} - n = len(text) - for word in keyword.kwlist + keyword.softkwlist: - if word[:n] == text: - seen.add(word) - if word in {'finally', 'try'}: - word = word + ':' - elif word not in {'False', 'None', 'True', - 'break', 'continue', 'pass', - 'else', '_'}: - word = word + ' ' - matches.append(word) - for nspace in [self.namespace, builtins.__dict__]: - for word, val in nspace.items(): - if word[:n] == text and word not in seen: - seen.add(word) - matches.append(self._callable_postfix(val, word)) - return matches - - def attr_matches(self, text): - """Compute matches when text contains a dot. - - Assuming the text is of the form NAME.NAME....[NAME], and is - evaluable in self.namespace, it will be evaluated and its attributes - (as revealed by dir()) are used as possible completions. (For class - instances, class members are also considered.) - - WARNING: this can still invoke arbitrary C code, if an object - with a __getattr__ hook is evaluated. - - """ - m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) - if not m: - return [] - expr, attr = m.group(1, 3) - try: - thisobject = eval(expr, self.namespace) - except Exception: - return [] - - # get the content of the object, except __builtins__ - words = set(dir(thisobject)) - words.discard("__builtins__") - - if hasattr(thisobject, '__class__'): - words.add('__class__') - words.update(get_class_members(thisobject.__class__)) - matches = [] - n = len(attr) - if attr == '': - noprefix = '_' - elif attr == '_': - noprefix = '__' - else: - noprefix = None - while True: - for word in words: - if (word[:n] == attr and - not (noprefix and word[:n+1] == noprefix)): - match = "%s.%s" % (expr, word) - if isinstance(getattr(type(thisobject), word, None), - property): - # bpo-44752: thisobject.word is a method decorated by - # `@property`. What follows applies a postfix if - # thisobject.word is callable, but know we know that - # this is not callable (because it is a property). - # Also, getattr(thisobject, word) will evaluate the - # property method, which is not desirable. - matches.append(match) - continue - if (value := getattr(thisobject, word, None)) is not None: - matches.append(self._callable_postfix(value, match)) - else: - matches.append(match) - if matches or not noprefix: - break - if noprefix == '_': - noprefix = '__' - else: - noprefix = None - matches.sort() - return matches - -def get_class_members(klass): - ret = dir(klass) - if hasattr(klass,'__bases__'): - for base in klass.__bases__: - ret = ret + get_class_members(base) - return ret - -try: - import readline -except ImportError: - _readline_available = False -else: - readline.set_completer(Completer().complete) - # Release references early at shutdown (the readline module's - # contents are quasi-immortal, and the completer function holds a - # reference to globals). - atexit.register(lambda: readline.set_completer(None)) - _readline_available = True diff --git a/Python314_4_x86_Template/Lib/runpy.py b/Python314_4_x86_Template/Lib/runpy.py deleted file mode 100644 index ef54d3282..000000000 --- a/Python314_4_x86_Template/Lib/runpy.py +++ /dev/null @@ -1,319 +0,0 @@ -"""runpy.py - locating and running Python code using the module namespace - -Provides support for locating and running Python scripts using the Python -module namespace instead of the native filesystem. - -This allows Python code to play nicely with non-filesystem based PEP 302 -importers when locating support scripts as well as when importing modules. -""" -# Written by Nick Coghlan <ncoghlan at gmail.com> -# to implement PEP 338 (Executing Modules as Scripts) - - -import sys -import importlib.machinery # importlib first so we can test #15386 via -m -import importlib.util -import io -import os - -__all__ = [ - "run_module", "run_path", -] - -# avoid 'import types' just for ModuleType -ModuleType = type(sys) - -class _TempModule(object): - """Temporarily replace a module in sys.modules with an empty namespace""" - def __init__(self, mod_name): - self.mod_name = mod_name - self.module = ModuleType(mod_name) - self._saved_module = [] - - def __enter__(self): - mod_name = self.mod_name - try: - self._saved_module.append(sys.modules[mod_name]) - except KeyError: - pass - sys.modules[mod_name] = self.module - return self - - def __exit__(self, *args): - if self._saved_module: - sys.modules[self.mod_name] = self._saved_module[0] - else: - del sys.modules[self.mod_name] - self._saved_module = [] - -class _ModifiedArgv0(object): - def __init__(self, value): - self.value = value - self._saved_value = self._sentinel = object() - - def __enter__(self): - if self._saved_value is not self._sentinel: - raise RuntimeError("Already preserving saved value") - self._saved_value = sys.argv[0] - sys.argv[0] = self.value - - def __exit__(self, *args): - self.value = self._sentinel - sys.argv[0] = self._saved_value - -# TODO: Replace these helpers with importlib._bootstrap_external functions. -def _run_code(code, run_globals, init_globals=None, - mod_name=None, mod_spec=None, - pkg_name=None, script_name=None): - """Helper to run code in nominated namespace""" - if init_globals is not None: - run_globals.update(init_globals) - if mod_spec is None: - loader = None - fname = script_name - cached = None - else: - loader = mod_spec.loader - fname = mod_spec.origin - cached = mod_spec.cached - if pkg_name is None: - pkg_name = mod_spec.parent - run_globals.update(__name__ = mod_name, - __file__ = fname, - __cached__ = cached, - __doc__ = None, - __loader__ = loader, - __package__ = pkg_name, - __spec__ = mod_spec) - exec(code, run_globals) - return run_globals - -def _run_module_code(code, init_globals=None, - mod_name=None, mod_spec=None, - pkg_name=None, script_name=None): - """Helper to run code in new namespace with sys modified""" - fname = script_name if mod_spec is None else mod_spec.origin - with _TempModule(mod_name) as temp_module, _ModifiedArgv0(fname): - mod_globals = temp_module.module.__dict__ - _run_code(code, mod_globals, init_globals, - mod_name, mod_spec, pkg_name, script_name) - # Copy the globals of the temporary module, as they - # may be cleared when the temporary module goes away - return mod_globals.copy() - -# Helper to get the full name, spec and code for a module -def _get_module_details(mod_name, error=ImportError): - if mod_name.startswith("."): - raise error("Relative module names not supported") - pkg_name, _, _ = mod_name.rpartition(".") - if pkg_name: - # Try importing the parent to avoid catching initialization errors - try: - __import__(pkg_name) - except ImportError as e: - # If the parent or higher ancestor package is missing, let the - # error be raised by find_spec() below and then be caught. But do - # not allow other errors to be caught. - if e.name is None or (e.name != pkg_name and - not pkg_name.startswith(e.name + ".")): - raise - # Warn if the module has already been imported under its normal name - existing = sys.modules.get(mod_name) - if existing is not None and not hasattr(existing, "__path__"): - from warnings import warn - msg = "{mod_name!r} found in sys.modules after import of " \ - "package {pkg_name!r}, but prior to execution of " \ - "{mod_name!r}; this may result in unpredictable " \ - "behaviour".format(mod_name=mod_name, pkg_name=pkg_name) - warn(RuntimeWarning(msg)) - - try: - spec = importlib.util.find_spec(mod_name) - except (ImportError, AttributeError, TypeError, ValueError) as ex: - # This hack fixes an impedance mismatch between pkgutil and - # importlib, where the latter raises other errors for cases where - # pkgutil previously raised ImportError - msg = "Error while finding module specification for {!r} ({}: {})" - if mod_name.endswith(".py"): - msg += (f". Try using '{mod_name[:-3]}' instead of " - f"'{mod_name}' as the module name.") - raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex - if spec is None: - raise error("No module named %s" % mod_name) - if spec.submodule_search_locations is not None: - if mod_name == "__main__" or mod_name.endswith(".__main__"): - raise error("Cannot use package as __main__ module") - try: - pkg_main_name = mod_name + ".__main__" - return _get_module_details(pkg_main_name, error) - except error as e: - if mod_name not in sys.modules: - raise # No module loaded; being a package is irrelevant - raise error(("%s; %r is a package and cannot " + - "be directly executed") %(e, mod_name)) - loader = spec.loader - if loader is None: - raise error("%r is a namespace package and cannot be executed" - % mod_name) - try: - code = loader.get_code(mod_name) - except ImportError as e: - raise error(format(e)) from e - if code is None: - raise error("No code object available for %s" % mod_name) - return mod_name, spec, code - -class _Error(Exception): - """Error that _run_module_as_main() should report without a traceback""" - -# XXX ncoghlan: Should this be documented and made public? -# (Current thoughts: don't repeat the mistake that lead to its -# creation when run_module() no longer met the needs of -# mainmodule.c, but couldn't be changed because it was public) -def _run_module_as_main(mod_name, alter_argv=True): - """Runs the designated module in the __main__ namespace - - Note that the executed module will have full access to the - __main__ namespace. If this is not desirable, the run_module() - function should be used to run the module code in a fresh namespace. - - At the very least, these variables in __main__ will be overwritten: - __name__ - __file__ - __cached__ - __loader__ - __package__ - """ - try: - if alter_argv or mod_name != "__main__": # i.e. -m switch - mod_name, mod_spec, code = _get_module_details(mod_name, _Error) - else: # i.e. directory or zipfile execution - mod_name, mod_spec, code = _get_main_module_details(_Error) - except _Error as exc: - msg = "%s: %s" % (sys.executable, exc) - sys.exit(msg) - main_globals = sys.modules["__main__"].__dict__ - if alter_argv: - sys.argv[0] = mod_spec.origin - return _run_code(code, main_globals, None, - "__main__", mod_spec) - -def run_module(mod_name, init_globals=None, - run_name=None, alter_sys=False): - """Execute a module's code without importing it. - - mod_name -- an absolute module name or package name. - - Optional arguments: - init_globals -- dictionary used to pre-populate the module’s - globals dictionary before the code is executed. - - run_name -- if not None, this will be used for setting __name__; - otherwise, __name__ will be set to mod_name + '__main__' if the - named module is a package and to just mod_name otherwise. - - alter_sys -- if True, sys.argv[0] is updated with the value of - __file__ and sys.modules[__name__] is updated with a temporary - module object for the module being executed. Both are - restored to their original values before the function returns. - - Returns the resulting module globals dictionary. - """ - mod_name, mod_spec, code = _get_module_details(mod_name) - if run_name is None: - run_name = mod_name - if alter_sys: - return _run_module_code(code, init_globals, run_name, mod_spec) - else: - # Leave the sys module alone - return _run_code(code, {}, init_globals, run_name, mod_spec) - -def _get_main_module_details(error=ImportError): - # Helper that gives a nicer error message when attempting to - # execute a zipfile or directory by invoking __main__.py - # Also moves the standard __main__ out of the way so that the - # preexisting __loader__ entry doesn't cause issues - main_name = "__main__" - saved_main = sys.modules[main_name] - del sys.modules[main_name] - try: - return _get_module_details(main_name) - except ImportError as exc: - if main_name in str(exc): - raise error("can't find %r module in %r" % - (main_name, sys.path[0])) from exc - raise - finally: - sys.modules[main_name] = saved_main - - -def _get_code_from_file(fname): - # Check for a compiled file first - from pkgutil import read_code - code_path = os.path.abspath(fname) - with io.open_code(code_path) as f: - code = read_code(f) - if code is None: - # That didn't work, so try it as normal source code - with io.open_code(code_path) as f: - code = compile(f.read(), fname, 'exec') - return code - -def run_path(path_name, init_globals=None, run_name=None): - """Execute code located at the specified filesystem location. - - path_name -- filesystem location of a Python script, zipfile, - or directory containing a top level __main__.py script. - - Optional arguments: - init_globals -- dictionary used to pre-populate the module’s - globals dictionary before the code is executed. - - run_name -- if not None, this will be used to set __name__; - otherwise, '<run_path>' will be used for __name__. - - Returns the resulting module globals dictionary. - """ - if run_name is None: - run_name = "<run_path>" - pkg_name = run_name.rpartition(".")[0] - from pkgutil import get_importer - importer = get_importer(path_name) - path_name = os.fsdecode(path_name) - if isinstance(importer, type(None)): - # Not a valid sys.path entry, so run the code directly - # execfile() doesn't help as we want to allow compiled files - code = _get_code_from_file(path_name) - return _run_module_code(code, init_globals, run_name, - pkg_name=pkg_name, script_name=path_name) - else: - # Finder is defined for path, so add it to - # the start of sys.path - sys.path.insert(0, path_name) - try: - # Here's where things are a little different from the run_module - # case. There, we only had to replace the module in sys while the - # code was running and doing so was somewhat optional. Here, we - # have no choice and we have to remove it even while we read the - # code. If we don't do this, a __loader__ attribute in the - # existing __main__ module may prevent location of the new module. - mod_name, mod_spec, code = _get_main_module_details() - with _TempModule(run_name) as temp_module, \ - _ModifiedArgv0(path_name): - mod_globals = temp_module.module.__dict__ - return _run_code(code, mod_globals, init_globals, - run_name, mod_spec, pkg_name).copy() - finally: - try: - sys.path.remove(path_name) - except ValueError: - pass - - -if __name__ == "__main__": - # Run the module specified as the next command line argument - if len(sys.argv) < 2: - print("No module specified for execution", file=sys.stderr) - else: - del sys.argv[0] # Make the requested module sys.argv[0] - _run_module_as_main(sys.argv[0]) diff --git a/Python314_4_x86_Template/Lib/sched.py b/Python314_4_x86_Template/Lib/sched.py deleted file mode 100644 index fb20639d4..000000000 --- a/Python314_4_x86_Template/Lib/sched.py +++ /dev/null @@ -1,167 +0,0 @@ -"""A generally useful event scheduler class. - -Each instance of this class manages its own queue. -No multi-threading is implied; you are supposed to hack that -yourself, or use a single instance per application. - -Each instance is parametrized with two functions, one that is -supposed to return the current time, one that is supposed to -implement a delay. You can implement real-time scheduling by -substituting time and sleep from built-in module time, or you can -implement simulated time by writing your own functions. This can -also be used to integrate scheduling with STDWIN events; the delay -function is allowed to modify the queue. Time can be expressed as -integers or floating-point numbers, as long as it is consistent. - -Events are specified by tuples (time, priority, action, argument, kwargs). -As in UNIX, lower priority numbers mean higher priority; in this -way the queue can be maintained as a priority queue. Execution of the -event means calling the action function, passing it the argument -sequence in "argument" (remember that in Python, multiple function -arguments are be packed in a sequence) and keyword parameters in "kwargs". -The action function may be an instance method so it -has another way to reference private data (besides global variables). -""" - -import time -import heapq -from collections import namedtuple -from itertools import count -import threading -from time import monotonic as _time - -__all__ = ["scheduler"] - -Event = namedtuple('Event', 'time, priority, sequence, action, argument, kwargs') -Event.time.__doc__ = ('''Numeric type compatible with the return value of the -timefunc function passed to the constructor.''') -Event.priority.__doc__ = ('''Events scheduled for the same time will be executed -in the order of their priority.''') -Event.sequence.__doc__ = ('''A continually increasing sequence number that - separates events if time and priority are equal.''') -Event.action.__doc__ = ('''Executing the event means executing -action(*argument, **kwargs)''') -Event.argument.__doc__ = ('''argument is a sequence holding the positional -arguments for the action.''') -Event.kwargs.__doc__ = ('''kwargs is a dictionary holding the keyword -arguments for the action.''') - -_sentinel = object() - -class scheduler: - - def __init__(self, timefunc=_time, delayfunc=time.sleep): - """Initialize a new instance, passing the time and delay - functions""" - self._queue = [] - self._lock = threading.RLock() - self.timefunc = timefunc - self.delayfunc = delayfunc - self._sequence_generator = count() - - def enterabs(self, time, priority, action, argument=(), kwargs=_sentinel): - """Enter a new event in the queue at an absolute time. - - Returns an ID for the event which can be used to remove it, - if necessary. - - """ - if kwargs is _sentinel: - kwargs = {} - - with self._lock: - event = Event(time, priority, next(self._sequence_generator), - action, argument, kwargs) - heapq.heappush(self._queue, event) - return event # The ID - - def enter(self, delay, priority, action, argument=(), kwargs=_sentinel): - """A variant that specifies the time as a relative time. - - This is actually the more commonly used interface. - - """ - time = self.timefunc() + delay - return self.enterabs(time, priority, action, argument, kwargs) - - def cancel(self, event): - """Remove an event from the queue. - - This must be presented the ID as returned by enter(). - If the event is not in the queue, this raises ValueError. - - """ - with self._lock: - self._queue.remove(event) - heapq.heapify(self._queue) - - def empty(self): - """Check whether the queue is empty.""" - with self._lock: - return not self._queue - - def run(self, blocking=True): - """Execute events until the queue is empty. - If blocking is False executes the scheduled events due to - expire soonest (if any) and then return the deadline of the - next scheduled call in the scheduler. - - When there is a positive delay until the first event, the - delay function is called and the event is left in the queue; - otherwise, the event is removed from the queue and executed - (its action function is called, passing it the argument). If - the delay function returns prematurely, it is simply - restarted. - - It is legal for both the delay function and the action - function to modify the queue or to raise an exception; - exceptions are not caught but the scheduler's state remains - well-defined so run() may be called again. - - A questionable hack is added to allow other threads to run: - just after an event is executed, a delay of 0 is executed, to - avoid monopolizing the CPU when other threads are also - runnable. - - """ - # localize variable access to minimize overhead - # and to improve thread safety - lock = self._lock - q = self._queue - delayfunc = self.delayfunc - timefunc = self.timefunc - pop = heapq.heappop - while True: - with lock: - if not q: - break - (time, priority, sequence, action, - argument, kwargs) = q[0] - now = timefunc() - if time > now: - delay = True - else: - delay = False - pop(q) - if delay: - if not blocking: - return time - now - delayfunc(time - now) - else: - action(*argument, **kwargs) - delayfunc(0) # Let other threads run - - @property - def queue(self): - """An ordered list of upcoming events. - - Events are named tuples with fields for: - time, priority, action, arguments, kwargs - - """ - # Use heapq to sort the queue rather than using 'sorted(self._queue)'. - # With heapq, two events scheduled at the same time will show in - # the actual order they would be retrieved. - with self._lock: - events = self._queue[:] - return list(map(heapq.heappop, [events]*len(events))) diff --git a/Python314_4_x86_Template/Lib/secrets.py b/Python314_4_x86_Template/Lib/secrets.py deleted file mode 100644 index 566a09b73..000000000 --- a/Python314_4_x86_Template/Lib/secrets.py +++ /dev/null @@ -1,71 +0,0 @@ -"""Generate cryptographically strong pseudo-random numbers suitable for -managing secrets such as account authentication, tokens, and similar. - -See PEP 506 for more information. -https://peps.python.org/pep-0506/ - -""" - -__all__ = ['choice', 'randbelow', 'randbits', 'SystemRandom', - 'token_bytes', 'token_hex', 'token_urlsafe', - 'compare_digest', - ] - - -import base64 - -from hmac import compare_digest -from random import SystemRandom - -_sysrand = SystemRandom() - -randbits = _sysrand.getrandbits -choice = _sysrand.choice - -def randbelow(exclusive_upper_bound): - """Return a random int in the range [0, n).""" - if exclusive_upper_bound <= 0: - raise ValueError("Upper bound must be positive.") - return _sysrand._randbelow(exclusive_upper_bound) - -DEFAULT_ENTROPY = 32 # number of bytes to return by default - -def token_bytes(nbytes=None): - """Return a random byte string containing *nbytes* bytes. - - If *nbytes* is ``None`` or not supplied, a reasonable - default is used. - - >>> token_bytes(16) #doctest:+SKIP - b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b' - - """ - if nbytes is None: - nbytes = DEFAULT_ENTROPY - return _sysrand.randbytes(nbytes) - -def token_hex(nbytes=None): - """Return a random text string, in hexadecimal. - - The string has *nbytes* random bytes, each byte converted to two - hex digits. If *nbytes* is ``None`` or not supplied, a reasonable - default is used. - - >>> token_hex(16) #doctest:+SKIP - 'f9bf78b9a18ce6d46a0cd2b0b86df9da' - - """ - return token_bytes(nbytes).hex() - -def token_urlsafe(nbytes=None): - """Return a random URL-safe text string, in Base64 encoding. - - The string has *nbytes* random bytes. If *nbytes* is ``None`` - or not supplied, a reasonable default is used. - - >>> token_urlsafe(16) #doctest:+SKIP - 'Drmhze6EPcv0fN_81Bj-nA' - - """ - tok = token_bytes(nbytes) - return base64.urlsafe_b64encode(tok).rstrip(b'=').decode('ascii') diff --git a/Python314_4_x86_Template/Lib/selectors.py b/Python314_4_x86_Template/Lib/selectors.py deleted file mode 100644 index b8e5f6a4f..000000000 --- a/Python314_4_x86_Template/Lib/selectors.py +++ /dev/null @@ -1,603 +0,0 @@ -"""Selectors module. - -This module allows high-level and efficient I/O multiplexing, built upon the -`select` module primitives. -""" - - -from abc import ABCMeta, abstractmethod -from collections import namedtuple -from collections.abc import Mapping -import math -import select -import sys - - -# generic events, that must be mapped to implementation-specific ones -EVENT_READ = (1 << 0) -EVENT_WRITE = (1 << 1) - - -def _fileobj_to_fd(fileobj): - """Return a file descriptor from a file object. - - Parameters: - fileobj -- file object or file descriptor - - Returns: - corresponding file descriptor - - Raises: - ValueError if the object is invalid - """ - if isinstance(fileobj, int): - fd = fileobj - else: - try: - fd = int(fileobj.fileno()) - except (AttributeError, TypeError, ValueError): - raise ValueError("Invalid file object: " - "{!r}".format(fileobj)) from None - if fd < 0: - raise ValueError("Invalid file descriptor: {}".format(fd)) - return fd - - -SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data']) - -SelectorKey.__doc__ = """SelectorKey(fileobj, fd, events, data) - - Object used to associate a file object to its backing - file descriptor, selected event mask, and attached data. -""" -SelectorKey.fileobj.__doc__ = 'File object registered.' -SelectorKey.fd.__doc__ = 'Underlying file descriptor.' -SelectorKey.events.__doc__ = 'Events that must be waited for on this file object.' -SelectorKey.data.__doc__ = ('''Optional opaque data associated to this file object. -For example, this could be used to store a per-client session ID.''') - - -class _SelectorMapping(Mapping): - """Mapping of file objects to selector keys.""" - - def __init__(self, selector): - self._selector = selector - - def __len__(self): - return len(self._selector._fd_to_key) - - def get(self, fileobj, default=None): - fd = self._selector._fileobj_lookup(fileobj) - return self._selector._fd_to_key.get(fd, default) - - def __getitem__(self, fileobj): - fd = self._selector._fileobj_lookup(fileobj) - key = self._selector._fd_to_key.get(fd) - if key is None: - raise KeyError("{!r} is not registered".format(fileobj)) - return key - - def __iter__(self): - return iter(self._selector._fd_to_key) - - -class BaseSelector(metaclass=ABCMeta): - """Selector abstract base class. - - A selector supports registering file objects to be monitored for specific - I/O events. - - A file object is a file descriptor or any object with a `fileno()` method. - An arbitrary object can be attached to the file object, which can be used - for example to store context information, a callback, etc. - - A selector can use various implementations (select(), poll(), epoll()...) - depending on the platform. The default `Selector` class uses the most - efficient implementation on the current platform. - """ - - @abstractmethod - def register(self, fileobj, events, data=None): - """Register a file object. - - Parameters: - fileobj -- file object or file descriptor - events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) - data -- attached data - - Returns: - SelectorKey instance - - Raises: - ValueError if events is invalid - KeyError if fileobj is already registered - OSError if fileobj is closed or otherwise is unacceptable to - the underlying system call (if a system call is made) - - Note: - OSError may or may not be raised - """ - raise NotImplementedError - - @abstractmethod - def unregister(self, fileobj): - """Unregister a file object. - - Parameters: - fileobj -- file object or file descriptor - - Returns: - SelectorKey instance - - Raises: - KeyError if fileobj is not registered - - Note: - If fileobj is registered but has since been closed this does - *not* raise OSError (even if the wrapped syscall does) - """ - raise NotImplementedError - - def modify(self, fileobj, events, data=None): - """Change a registered file object monitored events or attached data. - - Parameters: - fileobj -- file object or file descriptor - events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) - data -- attached data - - Returns: - SelectorKey instance - - Raises: - Anything that unregister() or register() raises - """ - self.unregister(fileobj) - return self.register(fileobj, events, data) - - @abstractmethod - def select(self, timeout=None): - """Perform the actual selection, until some monitored file objects are - ready or a timeout expires. - - Parameters: - timeout -- if timeout > 0, this specifies the maximum wait time, in - seconds - if timeout <= 0, the select() call won't block, and will - report the currently ready file objects - if timeout is None, select() will block until a monitored - file object becomes ready - - Returns: - list of (key, events) for ready file objects - `events` is a bitwise mask of EVENT_READ|EVENT_WRITE - """ - raise NotImplementedError - - def close(self): - """Close the selector. - - This must be called to make sure that any underlying resource is freed. - """ - pass - - def get_key(self, fileobj): - """Return the key associated to a registered file object. - - Returns: - SelectorKey for this file object - """ - mapping = self.get_map() - if mapping is None: - raise RuntimeError('Selector is closed') - try: - return mapping[fileobj] - except KeyError: - raise KeyError("{!r} is not registered".format(fileobj)) from None - - @abstractmethod - def get_map(self): - """Return a mapping of file objects to selector keys.""" - raise NotImplementedError - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - -class _BaseSelectorImpl(BaseSelector): - """Base selector implementation.""" - - def __init__(self): - # this maps file descriptors to keys - self._fd_to_key = {} - # read-only mapping returned by get_map() - self._map = _SelectorMapping(self) - - def _fileobj_lookup(self, fileobj): - """Return a file descriptor from a file object. - - This wraps _fileobj_to_fd() to do an exhaustive search in case - the object is invalid but we still have it in our map. This - is used by unregister() so we can unregister an object that - was previously registered even if it is closed. It is also - used by _SelectorMapping. - """ - try: - return _fileobj_to_fd(fileobj) - except ValueError: - # Do an exhaustive search. - for key in self._fd_to_key.values(): - if key.fileobj is fileobj: - return key.fd - # Raise ValueError after all. - raise - - def register(self, fileobj, events, data=None): - if (not events) or (events & ~(EVENT_READ | EVENT_WRITE)): - raise ValueError("Invalid events: {!r}".format(events)) - - key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data) - - if key.fd in self._fd_to_key: - raise KeyError("{!r} (FD {}) is already registered" - .format(fileobj, key.fd)) - - self._fd_to_key[key.fd] = key - return key - - def unregister(self, fileobj): - try: - key = self._fd_to_key.pop(self._fileobj_lookup(fileobj)) - except KeyError: - raise KeyError("{!r} is not registered".format(fileobj)) from None - return key - - def modify(self, fileobj, events, data=None): - try: - key = self._fd_to_key[self._fileobj_lookup(fileobj)] - except KeyError: - raise KeyError("{!r} is not registered".format(fileobj)) from None - if events != key.events: - self.unregister(fileobj) - key = self.register(fileobj, events, data) - elif data != key.data: - # Use a shortcut to update the data. - key = key._replace(data=data) - self._fd_to_key[key.fd] = key - return key - - def close(self): - self._fd_to_key.clear() - self._map = None - - def get_map(self): - return self._map - - - -class SelectSelector(_BaseSelectorImpl): - """Select-based selector.""" - - def __init__(self): - super().__init__() - self._readers = set() - self._writers = set() - - def register(self, fileobj, events, data=None): - key = super().register(fileobj, events, data) - if events & EVENT_READ: - self._readers.add(key.fd) - if events & EVENT_WRITE: - self._writers.add(key.fd) - return key - - def unregister(self, fileobj): - key = super().unregister(fileobj) - self._readers.discard(key.fd) - self._writers.discard(key.fd) - return key - - if sys.platform == 'win32': - def _select(self, r, w, _, timeout=None): - r, w, x = select.select(r, w, w, timeout) - return r, w + x, [] - else: - _select = select.select - - def select(self, timeout=None): - timeout = None if timeout is None else max(timeout, 0) - ready = [] - try: - r, w, _ = self._select(self._readers, self._writers, [], timeout) - except InterruptedError: - return ready - r = frozenset(r) - w = frozenset(w) - rw = r | w - fd_to_key_get = self._fd_to_key.get - for fd in rw: - key = fd_to_key_get(fd) - if key: - events = ((fd in r and EVENT_READ) - | (fd in w and EVENT_WRITE)) - ready.append((key, events & key.events)) - return ready - - -class _PollLikeSelector(_BaseSelectorImpl): - """Base class shared between poll, epoll and devpoll selectors.""" - _selector_cls = None - _EVENT_READ = None - _EVENT_WRITE = None - - def __init__(self): - super().__init__() - self._selector = self._selector_cls() - - def register(self, fileobj, events, data=None): - key = super().register(fileobj, events, data) - poller_events = ((events & EVENT_READ and self._EVENT_READ) - | (events & EVENT_WRITE and self._EVENT_WRITE) ) - try: - self._selector.register(key.fd, poller_events) - except: - super().unregister(fileobj) - raise - return key - - def unregister(self, fileobj): - key = super().unregister(fileobj) - try: - self._selector.unregister(key.fd) - except OSError: - # This can happen if the FD was closed since it - # was registered. - pass - return key - - def modify(self, fileobj, events, data=None): - try: - key = self._fd_to_key[self._fileobj_lookup(fileobj)] - except KeyError: - raise KeyError(f"{fileobj!r} is not registered") from None - - changed = False - if events != key.events: - selector_events = ((events & EVENT_READ and self._EVENT_READ) - | (events & EVENT_WRITE and self._EVENT_WRITE)) - try: - self._selector.modify(key.fd, selector_events) - except: - super().unregister(fileobj) - raise - changed = True - if data != key.data: - changed = True - - if changed: - key = key._replace(events=events, data=data) - self._fd_to_key[key.fd] = key - return key - - def select(self, timeout=None): - # This is shared between poll() and epoll(). - # epoll() has a different signature and handling of timeout parameter. - if timeout is None: - timeout = None - elif timeout <= 0: - timeout = 0 - else: - # poll() has a resolution of 1 millisecond, round away from - # zero to wait *at least* timeout seconds. - timeout = math.ceil(timeout * 1e3) - ready = [] - try: - fd_event_list = self._selector.poll(timeout) - except InterruptedError: - return ready - - fd_to_key_get = self._fd_to_key.get - for fd, event in fd_event_list: - key = fd_to_key_get(fd) - if key: - events = ((event & ~self._EVENT_READ and EVENT_WRITE) - | (event & ~self._EVENT_WRITE and EVENT_READ)) - ready.append((key, events & key.events)) - return ready - - -if hasattr(select, 'poll'): - - class PollSelector(_PollLikeSelector): - """Poll-based selector.""" - _selector_cls = select.poll - _EVENT_READ = select.POLLIN - _EVENT_WRITE = select.POLLOUT - - -if hasattr(select, 'epoll'): - - _NOT_EPOLLIN = ~select.EPOLLIN - _NOT_EPOLLOUT = ~select.EPOLLOUT - - class EpollSelector(_PollLikeSelector): - """Epoll-based selector.""" - _selector_cls = select.epoll - _EVENT_READ = select.EPOLLIN - _EVENT_WRITE = select.EPOLLOUT - - def fileno(self): - return self._selector.fileno() - - def select(self, timeout=None): - if timeout is None: - timeout = -1 - elif timeout <= 0: - timeout = 0 - else: - # epoll_wait() has a resolution of 1 millisecond, round away - # from zero to wait *at least* timeout seconds. - timeout = math.ceil(timeout * 1e3) * 1e-3 - - # epoll_wait() expects `maxevents` to be greater than zero; - # we want to make sure that `select()` can be called when no - # FD is registered. - max_ev = len(self._fd_to_key) or 1 - - ready = [] - try: - fd_event_list = self._selector.poll(timeout, max_ev) - except InterruptedError: - return ready - - fd_to_key = self._fd_to_key - for fd, event in fd_event_list: - key = fd_to_key.get(fd) - if key: - events = ((event & _NOT_EPOLLIN and EVENT_WRITE) - | (event & _NOT_EPOLLOUT and EVENT_READ)) - ready.append((key, events & key.events)) - return ready - - def close(self): - self._selector.close() - super().close() - - -if hasattr(select, 'devpoll'): - - class DevpollSelector(_PollLikeSelector): - """Solaris /dev/poll selector.""" - _selector_cls = select.devpoll - _EVENT_READ = select.POLLIN - _EVENT_WRITE = select.POLLOUT - - def fileno(self): - return self._selector.fileno() - - def close(self): - self._selector.close() - super().close() - - -if hasattr(select, 'kqueue'): - - class KqueueSelector(_BaseSelectorImpl): - """Kqueue-based selector.""" - - def __init__(self): - super().__init__() - self._selector = select.kqueue() - self._max_events = 0 - - def fileno(self): - return self._selector.fileno() - - def register(self, fileobj, events, data=None): - key = super().register(fileobj, events, data) - try: - if events & EVENT_READ: - kev = select.kevent(key.fd, select.KQ_FILTER_READ, - select.KQ_EV_ADD) - self._selector.control([kev], 0, 0) - self._max_events += 1 - if events & EVENT_WRITE: - kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, - select.KQ_EV_ADD) - self._selector.control([kev], 0, 0) - self._max_events += 1 - except: - super().unregister(fileobj) - raise - return key - - def unregister(self, fileobj): - key = super().unregister(fileobj) - if key.events & EVENT_READ: - kev = select.kevent(key.fd, select.KQ_FILTER_READ, - select.KQ_EV_DELETE) - self._max_events -= 1 - try: - self._selector.control([kev], 0, 0) - except OSError: - # This can happen if the FD was closed since it - # was registered. - pass - if key.events & EVENT_WRITE: - kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, - select.KQ_EV_DELETE) - self._max_events -= 1 - try: - self._selector.control([kev], 0, 0) - except OSError: - # See comment above. - pass - return key - - def select(self, timeout=None): - timeout = None if timeout is None else max(timeout, 0) - # If max_ev is 0, kqueue will ignore the timeout. For consistent - # behavior with the other selector classes, we prevent that here - # (using max). See https://bugs.python.org/issue29255 - max_ev = self._max_events or 1 - ready = [] - try: - kev_list = self._selector.control(None, max_ev, timeout) - except InterruptedError: - return ready - - fd_to_key_get = self._fd_to_key.get - for kev in kev_list: - fd = kev.ident - flag = kev.filter - key = fd_to_key_get(fd) - if key: - events = ((flag == select.KQ_FILTER_READ and EVENT_READ) - | (flag == select.KQ_FILTER_WRITE and EVENT_WRITE)) - ready.append((key, events & key.events)) - return ready - - def close(self): - self._selector.close() - super().close() - - -def _can_use(method): - """Check if we can use the selector depending upon the - operating system. """ - # Implementation based upon https://github.com/sethmlarson/selectors2/blob/master/selectors2.py - selector = getattr(select, method, None) - if selector is None: - # select module does not implement method - return False - # check if the OS and Kernel actually support the method. Call may fail with - # OSError: [Errno 38] Function not implemented - try: - selector_obj = selector() - if method == 'poll': - # check that poll actually works - selector_obj.poll(0) - else: - # close epoll, kqueue, and devpoll fd - selector_obj.close() - return True - except OSError: - return False - - -# Choose the best implementation, roughly: -# epoll|kqueue|devpoll > poll > select. -# select() also can't accept a FD > FD_SETSIZE (usually around 1024) -if _can_use('kqueue'): - DefaultSelector = KqueueSelector -elif _can_use('epoll'): - DefaultSelector = EpollSelector -elif _can_use('devpoll'): - DefaultSelector = DevpollSelector -elif _can_use('poll'): - DefaultSelector = PollSelector -else: - DefaultSelector = SelectSelector diff --git a/Python314_4_x86_Template/Lib/shelve.py b/Python314_4_x86_Template/Lib/shelve.py deleted file mode 100644 index 50584716e..000000000 --- a/Python314_4_x86_Template/Lib/shelve.py +++ /dev/null @@ -1,250 +0,0 @@ -"""Manage shelves of pickled objects. - -A "shelf" is a persistent, dictionary-like object. The difference -with dbm databases is that the values (not the keys!) in a shelf can -be essentially arbitrary Python objects -- anything that the "pickle" -module can handle. This includes most class instances, recursive data -types, and objects containing lots of shared sub-objects. The keys -are ordinary strings. - -To summarize the interface (key is a string, data is an arbitrary -object): - - import shelve - d = shelve.open(filename) # open, with (g)dbm filename -- no suffix - - d[key] = data # store data at key (overwrites old data if - # using an existing key) - data = d[key] # retrieve a COPY of the data at key (raise - # KeyError if no such key) -- NOTE that this - # access returns a *copy* of the entry! - del d[key] # delete data stored at key (raises KeyError - # if no such key) - flag = key in d # true if the key exists - list = d.keys() # a list of all existing keys (slow!) - - d.close() # close it - -Dependent on the implementation, closing a persistent dictionary may -or may not be necessary to flush changes to disk. - -Normally, d[key] returns a COPY of the entry. This needs care when -mutable entries are mutated: for example, if d[key] is a list, - d[key].append(anitem) -does NOT modify the entry d[key] itself, as stored in the persistent -mapping -- it only modifies the copy, which is then immediately -discarded, so that the append has NO effect whatsoever. To append an -item to d[key] in a way that will affect the persistent mapping, use: - data = d[key] - data.append(anitem) - d[key] = data - -To avoid the problem with mutable entries, you may pass the keyword -argument writeback=True in the call to shelve.open. When you use: - d = shelve.open(filename, writeback=True) -then d keeps a cache of all entries you access, and writes them all back -to the persistent mapping when you call d.close(). This ensures that -such usage as d[key].append(anitem) works as intended. - -However, using keyword argument writeback=True may consume vast amount -of memory for the cache, and it may make d.close() very slow, if you -access many of d's entries after opening it in this way: d has no way to -check which of the entries you access are mutable and/or which ones you -actually mutate, so it must cache, and write back at close, all of the -entries that you access. You can call d.sync() to write back all the -entries in the cache, and empty the cache (d.sync() also synchronizes -the persistent dictionary on disk, if feasible). -""" - -from pickle import DEFAULT_PROTOCOL, Pickler, Unpickler -from io import BytesIO - -import collections.abc - -__all__ = ["Shelf", "BsdDbShelf", "DbfilenameShelf", "open"] - -class _ClosedDict(collections.abc.MutableMapping): - 'Marker for a closed dict. Access attempts raise a ValueError.' - - def closed(self, *args): - raise ValueError('invalid operation on closed shelf') - __iter__ = __len__ = __getitem__ = __setitem__ = __delitem__ = keys = closed - - def __repr__(self): - return '<Closed Dictionary>' - - -class Shelf(collections.abc.MutableMapping): - """Base class for shelf implementations. - - This is initialized with a dictionary-like object. - See the module's __doc__ string for an overview of the interface. - """ - - def __init__(self, dict, protocol=None, writeback=False, - keyencoding="utf-8"): - self.dict = dict - if protocol is None: - protocol = DEFAULT_PROTOCOL - self._protocol = protocol - self.writeback = writeback - self.cache = {} - self.keyencoding = keyencoding - - def __iter__(self): - for k in self.dict.keys(): - yield k.decode(self.keyencoding) - - def __len__(self): - return len(self.dict) - - def __contains__(self, key): - return key.encode(self.keyencoding) in self.dict - - def get(self, key, default=None): - if key.encode(self.keyencoding) in self.dict: - return self[key] - return default - - def __getitem__(self, key): - try: - value = self.cache[key] - except KeyError: - f = BytesIO(self.dict[key.encode(self.keyencoding)]) - value = Unpickler(f).load() - if self.writeback: - self.cache[key] = value - return value - - def __setitem__(self, key, value): - if self.writeback: - self.cache[key] = value - f = BytesIO() - p = Pickler(f, self._protocol) - p.dump(value) - self.dict[key.encode(self.keyencoding)] = f.getvalue() - - def __delitem__(self, key): - del self.dict[key.encode(self.keyencoding)] - try: - del self.cache[key] - except KeyError: - pass - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - self.close() - - def close(self): - if self.dict is None: - return - try: - self.sync() - try: - self.dict.close() - except AttributeError: - pass - finally: - # Catch errors that may happen when close is called from __del__ - # because CPython is in interpreter shutdown. - try: - self.dict = _ClosedDict() - except: - self.dict = None - - def __del__(self): - if not hasattr(self, 'writeback'): - # __init__ didn't succeed, so don't bother closing - # see http://bugs.python.org/issue1339007 for details - return - self.close() - - def sync(self): - if self.writeback and self.cache: - self.writeback = False - for key, entry in self.cache.items(): - self[key] = entry - self.writeback = True - self.cache = {} - if hasattr(self.dict, 'sync'): - self.dict.sync() - - -class BsdDbShelf(Shelf): - """Shelf implementation using the "BSD" db interface. - - This adds methods first(), next(), previous(), last() and - set_location() that have no counterpart in [g]dbm databases. - - The actual database must be opened using one of the "bsddb" - modules "open" routines (i.e. bsddb.hashopen, bsddb.btopen or - bsddb.rnopen) and passed to the constructor. - - See the module's __doc__ string for an overview of the interface. - """ - - def __init__(self, dict, protocol=None, writeback=False, - keyencoding="utf-8"): - Shelf.__init__(self, dict, protocol, writeback, keyencoding) - - def set_location(self, key): - (key, value) = self.dict.set_location(key) - f = BytesIO(value) - return (key.decode(self.keyencoding), Unpickler(f).load()) - - def next(self): - (key, value) = next(self.dict) - f = BytesIO(value) - return (key.decode(self.keyencoding), Unpickler(f).load()) - - def previous(self): - (key, value) = self.dict.previous() - f = BytesIO(value) - return (key.decode(self.keyencoding), Unpickler(f).load()) - - def first(self): - (key, value) = self.dict.first() - f = BytesIO(value) - return (key.decode(self.keyencoding), Unpickler(f).load()) - - def last(self): - (key, value) = self.dict.last() - f = BytesIO(value) - return (key.decode(self.keyencoding), Unpickler(f).load()) - - -class DbfilenameShelf(Shelf): - """Shelf implementation using the "dbm" generic dbm interface. - - This is initialized with the filename for the dbm database. - See the module's __doc__ string for an overview of the interface. - """ - - def __init__(self, filename, flag='c', protocol=None, writeback=False): - import dbm - Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback) - - def clear(self): - """Remove all items from the shelf.""" - # Call through to the clear method on dbm-backed shelves. - # see https://github.com/python/cpython/issues/107089 - self.cache.clear() - self.dict.clear() - - -def open(filename, flag='c', protocol=None, writeback=False): - """Open a persistent dictionary for reading and writing. - - The filename parameter is the base filename for the underlying - database. As a side-effect, an extension may be added to the - filename and more than one file may be created. The optional flag - parameter has the same interpretation as the flag parameter of - dbm.open(). The optional protocol parameter specifies the - version of the pickle protocol. - - See the module's __doc__ string for an overview of the interface. - """ - - return DbfilenameShelf(filename, flag, protocol, writeback) diff --git a/Python314_4_x86_Template/Lib/shlex.py b/Python314_4_x86_Template/Lib/shlex.py deleted file mode 100644 index 5959f52dd..000000000 --- a/Python314_4_x86_Template/Lib/shlex.py +++ /dev/null @@ -1,351 +0,0 @@ -"""A lexical analyzer class for simple shell-like syntaxes.""" - -# Module and documentation by Eric S. Raymond, 21 Dec 1998 -# Input stacking and error message cleanup added by ESR, March 2000 -# push_source() and pop_source() made explicit by ESR, January 2001. -# Posix compliance, split(), string arguments, and -# iterator interface by Gustavo Niemeyer, April 2003. -# changes to tokenize more like Posix shells by Vinay Sajip, July 2016. - -import sys -from io import StringIO - -__all__ = ["shlex", "split", "quote", "join"] - -class shlex: - "A lexical analyzer class for simple shell-like syntaxes." - def __init__(self, instream=None, infile=None, posix=False, - punctuation_chars=False): - from collections import deque # deferred import for performance - - if isinstance(instream, str): - instream = StringIO(instream) - if instream is not None: - self.instream = instream - self.infile = infile - else: - self.instream = sys.stdin - self.infile = None - self.posix = posix - if posix: - self.eof = None - else: - self.eof = '' - self.commenters = '#' - self.wordchars = ('abcdfeghijklmnopqrstuvwxyz' - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_') - if self.posix: - self.wordchars += ('ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' - 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ') - self.whitespace = ' \t\r\n' - self.whitespace_split = False - self.quotes = '\'"' - self.escape = '\\' - self.escapedquotes = '"' - self.state = ' ' - self.pushback = deque() - self.lineno = 1 - self.debug = 0 - self.token = '' - self.filestack = deque() - self.source = None - if not punctuation_chars: - punctuation_chars = '' - elif punctuation_chars is True: - punctuation_chars = '();<>|&' - self._punctuation_chars = punctuation_chars - if punctuation_chars: - # _pushback_chars is a push back queue used by lookahead logic - self._pushback_chars = deque() - # these chars added because allowed in file names, args, wildcards - self.wordchars += '~-./*?=' - #remove any punctuation chars from wordchars - t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars)) - self.wordchars = self.wordchars.translate(t) - - @property - def punctuation_chars(self): - return self._punctuation_chars - - def push_token(self, tok): - "Push a token onto the stack popped by the get_token method" - if self.debug >= 1: - print("shlex: pushing token " + repr(tok)) - self.pushback.appendleft(tok) - - def push_source(self, newstream, newfile=None): - "Push an input source onto the lexer's input source stack." - if isinstance(newstream, str): - newstream = StringIO(newstream) - self.filestack.appendleft((self.infile, self.instream, self.lineno)) - self.infile = newfile - self.instream = newstream - self.lineno = 1 - if self.debug: - if newfile is not None: - print('shlex: pushing to file %s' % (self.infile,)) - else: - print('shlex: pushing to stream %s' % (self.instream,)) - - def pop_source(self): - "Pop the input source stack." - self.instream.close() - (self.infile, self.instream, self.lineno) = self.filestack.popleft() - if self.debug: - print('shlex: popping to %s, line %d' \ - % (self.instream, self.lineno)) - self.state = ' ' - - def get_token(self): - "Get a token from the input stream (or from stack if it's nonempty)" - if self.pushback: - tok = self.pushback.popleft() - if self.debug >= 1: - print("shlex: popping token " + repr(tok)) - return tok - # No pushback. Get a token. - raw = self.read_token() - # Handle inclusions - if self.source is not None: - while raw == self.source: - spec = self.sourcehook(self.read_token()) - if spec: - (newfile, newstream) = spec - self.push_source(newstream, newfile) - raw = self.get_token() - # Maybe we got EOF instead? - while raw == self.eof: - if not self.filestack: - return self.eof - else: - self.pop_source() - raw = self.get_token() - # Neither inclusion nor EOF - if self.debug >= 1: - if raw != self.eof: - print("shlex: token=" + repr(raw)) - else: - print("shlex: token=EOF") - return raw - - def read_token(self): - quoted = False - escapedstate = ' ' - while True: - if self.punctuation_chars and self._pushback_chars: - nextchar = self._pushback_chars.pop() - else: - nextchar = self.instream.read(1) - if nextchar == '\n': - self.lineno += 1 - if self.debug >= 3: - print("shlex: in state %r I see character: %r" % (self.state, - nextchar)) - if self.state is None: - self.token = '' # past end of file - break - elif self.state == ' ': - if not nextchar: - self.state = None # end of file - break - elif nextchar in self.whitespace: - if self.debug >= 2: - print("shlex: I see whitespace in whitespace state") - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif nextchar in self.commenters: - self.instream.readline() - self.lineno += 1 - elif self.posix and nextchar in self.escape: - escapedstate = 'a' - self.state = nextchar - elif nextchar in self.wordchars: - self.token = nextchar - self.state = 'a' - elif nextchar in self.punctuation_chars: - self.token = nextchar - self.state = 'c' - elif nextchar in self.quotes: - if not self.posix: - self.token = nextchar - self.state = nextchar - elif self.whitespace_split: - self.token = nextchar - self.state = 'a' - else: - self.token = nextchar - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif self.state in self.quotes: - quoted = True - if not nextchar: # end of file - if self.debug >= 2: - print("shlex: I see EOF in quotes state") - # XXX what error should be raised here? - raise ValueError("No closing quotation") - if nextchar == self.state: - if not self.posix: - self.token += nextchar - self.state = ' ' - break - else: - self.state = 'a' - elif (self.posix and nextchar in self.escape and self.state - in self.escapedquotes): - escapedstate = self.state - self.state = nextchar - else: - self.token += nextchar - elif self.state in self.escape: - if not nextchar: # end of file - if self.debug >= 2: - print("shlex: I see EOF in escape state") - # XXX what error should be raised here? - raise ValueError("No escaped character") - # In posix shells, only the quote itself or the escape - # character may be escaped within quotes. - if (escapedstate in self.quotes and - nextchar != self.state and nextchar != escapedstate): - self.token += self.state - self.token += nextchar - self.state = escapedstate - elif self.state in ('a', 'c'): - if not nextchar: - self.state = None # end of file - break - elif nextchar in self.whitespace: - if self.debug >= 2: - print("shlex: I see whitespace in word state") - self.state = ' ' - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif nextchar in self.commenters: - self.instream.readline() - self.lineno += 1 - if self.posix: - self.state = ' ' - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - elif self.state == 'c': - if nextchar in self.punctuation_chars: - self.token += nextchar - else: - if nextchar not in self.whitespace: - self._pushback_chars.append(nextchar) - self.state = ' ' - break - elif self.posix and nextchar in self.quotes: - self.state = nextchar - elif self.posix and nextchar in self.escape: - escapedstate = 'a' - self.state = nextchar - elif (nextchar in self.wordchars or nextchar in self.quotes - or (self.whitespace_split and - nextchar not in self.punctuation_chars)): - self.token += nextchar - else: - if self.punctuation_chars: - self._pushback_chars.append(nextchar) - else: - self.pushback.appendleft(nextchar) - if self.debug >= 2: - print("shlex: I see punctuation in word state") - self.state = ' ' - if self.token or (self.posix and quoted): - break # emit current token - else: - continue - result = self.token - self.token = '' - if self.posix and not quoted and result == '': - result = None - if self.debug > 1: - if result: - print("shlex: raw token=" + repr(result)) - else: - print("shlex: raw token=EOF") - return result - - def sourcehook(self, newfile): - "Hook called on a filename to be sourced." - import os.path - if newfile[0] == '"': - newfile = newfile[1:-1] - # This implements cpp-like semantics for relative-path inclusion. - if isinstance(self.infile, str) and not os.path.isabs(newfile): - newfile = os.path.join(os.path.dirname(self.infile), newfile) - return (newfile, open(newfile, "r")) - - def error_leader(self, infile=None, lineno=None): - "Emit a C-compiler-like, Emacs-friendly error-message leader." - if infile is None: - infile = self.infile - if lineno is None: - lineno = self.lineno - return "\"%s\", line %d: " % (infile, lineno) - - def __iter__(self): - return self - - def __next__(self): - token = self.get_token() - if token == self.eof: - raise StopIteration - return token - -def split(s, comments=False, posix=True): - """Split the string *s* using shell-like syntax.""" - if s is None: - raise ValueError("s argument must not be None") - lex = shlex(s, posix=posix) - lex.whitespace_split = True - if not comments: - lex.commenters = '' - return list(lex) - - -def join(split_command): - """Return a shell-escaped string from *split_command*.""" - return ' '.join(quote(arg) for arg in split_command) - - -def quote(s): - """Return a shell-escaped version of the string *s*.""" - if not s: - return "''" - - if not isinstance(s, str): - raise TypeError(f"expected string object, got {type(s).__name__!r}") - - # Use bytes.translate() for performance - safe_chars = (b'%+,-./0123456789:=@' - b'ABCDEFGHIJKLMNOPQRSTUVWXYZ_' - b'abcdefghijklmnopqrstuvwxyz') - # No quoting is needed if `s` is an ASCII string consisting only of `safe_chars` - if s.isascii() and not s.encode().translate(None, delete=safe_chars): - return s - - # use single quotes, and put single quotes into double quotes - # the string $'b is then quoted as '$'"'"'b' - return "'" + s.replace("'", "'\"'\"'") + "'" - - -def _print_tokens(lexer): - while tt := lexer.get_token(): - print("Token: " + repr(tt)) - -if __name__ == '__main__': - if len(sys.argv) == 1: - _print_tokens(shlex()) - else: - fn = sys.argv[1] - with open(fn) as f: - _print_tokens(shlex(f, fn)) diff --git a/Python314_4_x86_Template/Lib/shutil.py b/Python314_4_x86_Template/Lib/shutil.py deleted file mode 100644 index 8d8fe1455..000000000 --- a/Python314_4_x86_Template/Lib/shutil.py +++ /dev/null @@ -1,1667 +0,0 @@ -"""Utility functions for copying and archiving files and directory trees. - -XXX The functions here don't copy the resource fork or other metadata on Mac. - -""" - -import os -import sys -import stat -import fnmatch -import collections -import errno - -try: - import zlib - del zlib - _ZLIB_SUPPORTED = True -except ImportError: - _ZLIB_SUPPORTED = False - -try: - import bz2 - del bz2 - _BZ2_SUPPORTED = True -except ImportError: - _BZ2_SUPPORTED = False - -try: - import lzma - del lzma - _LZMA_SUPPORTED = True -except ImportError: - _LZMA_SUPPORTED = False - -try: - from compression import zstd - del zstd - _ZSTD_SUPPORTED = True -except ImportError: - _ZSTD_SUPPORTED = False - -_WINDOWS = os.name == 'nt' -posix = nt = None -if os.name == 'posix': - import posix -elif _WINDOWS: - import nt - -if sys.platform == 'win32': - import _winapi -else: - _winapi = None - -COPY_BUFSIZE = 1024 * 1024 if _WINDOWS else 256 * 1024 -# This should never be removed, see rationale in: -# https://bugs.python.org/issue43743#msg393429 -_USE_CP_SENDFILE = (hasattr(os, "sendfile") - and sys.platform.startswith(("linux", "android", "sunos"))) -_USE_CP_COPY_FILE_RANGE = hasattr(os, "copy_file_range") -_HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS - -# CMD defaults in Windows 10 -_WIN_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC" - -__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", - "copytree", "move", "rmtree", "Error", "SpecialFileError", - "make_archive", "get_archive_formats", - "register_archive_format", "unregister_archive_format", - "get_unpack_formats", "register_unpack_format", - "unregister_unpack_format", "unpack_archive", - "ignore_patterns", "chown", "which", "get_terminal_size", - "SameFileError"] - # disk_usage is added later, if available on the platform - -class Error(OSError): - pass - -class SameFileError(Error): - """Raised when source and destination are the same file.""" - -class SpecialFileError(OSError): - """Raised when trying to do a kind of operation (e.g. copying) which is - not supported on a special file (e.g. a named pipe)""" - - -class ReadError(OSError): - """Raised when an archive cannot be read""" - -class RegistryError(Exception): - """Raised when a registry operation with the archiving - and unpacking registries fails""" - -class _GiveupOnFastCopy(Exception): - """Raised as a signal to fallback on using raw read()/write() - file copy when fast-copy functions fail to do so. - """ - -def _fastcopy_fcopyfile(fsrc, fdst, flags): - """Copy a regular file content or metadata by using high-performance - fcopyfile(3) syscall (macOS). - """ - try: - infd = fsrc.fileno() - outfd = fdst.fileno() - except Exception as err: - raise _GiveupOnFastCopy(err) # not a regular file - - try: - posix._fcopyfile(infd, outfd, flags) - except OSError as err: - err.filename = fsrc.name - err.filename2 = fdst.name - if err.errno in {errno.EINVAL, errno.ENOTSUP}: - raise _GiveupOnFastCopy(err) - else: - raise err from None - -def _determine_linux_fastcopy_blocksize(infd): - """Determine blocksize for fastcopying on Linux. - - Hopefully the whole file will be copied in a single call. - The copying itself should be performed in a loop 'till EOF is - reached (0 return) so a blocksize smaller or bigger than the actual - file size should not make any difference, also in case the file - content changes while being copied. - """ - try: - blocksize = max(os.fstat(infd).st_size, 2 ** 23) # min 8 MiB - except OSError: - blocksize = 2 ** 27 # 128 MiB - # On 32-bit architectures truncate to 1 GiB to avoid OverflowError, - # see gh-82500. - if sys.maxsize < 2 ** 32: - blocksize = min(blocksize, 2 ** 30) - return blocksize - -def _fastcopy_copy_file_range(fsrc, fdst): - """Copy data from one regular mmap-like fd to another by using - a high-performance copy_file_range(2) syscall that gives filesystems - an opportunity to implement the use of reflinks or server-side copy. - - This should work on Linux >= 4.5 only. - """ - try: - infd = fsrc.fileno() - outfd = fdst.fileno() - except Exception as err: - raise _GiveupOnFastCopy(err) # not a regular file - - blocksize = _determine_linux_fastcopy_blocksize(infd) - offset = 0 - while True: - try: - n_copied = os.copy_file_range(infd, outfd, blocksize, offset_dst=offset) - except OSError as err: - # ...in oder to have a more informative exception. - err.filename = fsrc.name - err.filename2 = fdst.name - - if err.errno == errno.ENOSPC: # filesystem is full - raise err from None - - # Give up on first call and if no data was copied. - if offset == 0 and os.lseek(outfd, 0, os.SEEK_CUR) == 0: - raise _GiveupOnFastCopy(err) - - raise err - else: - if n_copied == 0: - # If no bytes have been copied yet, copy_file_range - # might silently fail. - # https://lore.kernel.org/linux-fsdevel/20210126233840.GG4626@dread.disaster.area/T/#m05753578c7f7882f6e9ffe01f981bc223edef2b0 - if offset == 0: - raise _GiveupOnFastCopy() - break - offset += n_copied - -def _fastcopy_sendfile(fsrc, fdst): - """Copy data from one regular mmap-like fd to another by using - high-performance sendfile(2) syscall. - This should work on Linux >= 2.6.33, Android and Solaris. - """ - # Note: copyfileobj() is left alone in order to not introduce any - # unexpected breakage. Possible risks by using zero-copy calls - # in copyfileobj() are: - # - fdst cannot be open in "a"(ppend) mode - # - fsrc and fdst may be open in "t"(ext) mode - # - fsrc may be a BufferedReader (which hides unread data in a buffer), - # GzipFile (which decompresses data), HTTPResponse (which decodes - # chunks). - # - possibly others (e.g. encrypted fs/partition?) - global _USE_CP_SENDFILE - try: - infd = fsrc.fileno() - outfd = fdst.fileno() - except Exception as err: - raise _GiveupOnFastCopy(err) # not a regular file - - blocksize = _determine_linux_fastcopy_blocksize(infd) - offset = 0 - while True: - try: - sent = os.sendfile(outfd, infd, offset, blocksize) - except OSError as err: - # ...in order to have a more informative exception. - err.filename = fsrc.name - err.filename2 = fdst.name - - if err.errno == errno.ENOTSOCK: - # sendfile() on this platform (probably Linux < 2.6.33) - # does not support copies between regular files (only - # sockets). - _USE_CP_SENDFILE = False - raise _GiveupOnFastCopy(err) - - if err.errno == errno.ENOSPC: # filesystem is full - raise err from None - - # Give up on first call and if no data was copied. - if offset == 0 and os.lseek(outfd, 0, os.SEEK_CUR) == 0: - raise _GiveupOnFastCopy(err) - - raise err - else: - if sent == 0: - break # EOF - offset += sent - -def _copyfileobj_readinto(fsrc, fdst, length=COPY_BUFSIZE): - """readinto()/memoryview() based variant of copyfileobj(). - *fsrc* must support readinto() method and both files must be - open in binary mode. - """ - # Localize variable access to minimize overhead. - fsrc_readinto = fsrc.readinto - fdst_write = fdst.write - with memoryview(bytearray(length)) as mv: - while True: - n = fsrc_readinto(mv) - if not n: - break - elif n < length: - with mv[:n] as smv: - fdst_write(smv) - break - else: - fdst_write(mv) - -def copyfileobj(fsrc, fdst, length=0): - """copy data from file-like object fsrc to file-like object fdst""" - if not length: - length = COPY_BUFSIZE - # Localize variable access to minimize overhead. - fsrc_read = fsrc.read - fdst_write = fdst.write - while buf := fsrc_read(length): - fdst_write(buf) - -def _samefile(src, dst): - # Macintosh, Unix. - if isinstance(src, os.DirEntry) and hasattr(os.path, 'samestat'): - try: - return os.path.samestat(src.stat(), os.stat(dst)) - except OSError: - return False - - if hasattr(os.path, 'samefile'): - try: - return os.path.samefile(src, dst) - except OSError: - return False - - # All other platforms: check for same pathname. - return (os.path.normcase(os.path.abspath(src)) == - os.path.normcase(os.path.abspath(dst))) - -def _stat(fn): - return fn.stat() if isinstance(fn, os.DirEntry) else os.stat(fn) - -def _islink(fn): - return fn.is_symlink() if isinstance(fn, os.DirEntry) else os.path.islink(fn) - -def copyfile(src, dst, *, follow_symlinks=True): - """Copy data from src to dst in the most efficient way possible. - - If follow_symlinks is not set and src is a symbolic link, a new - symlink will be created instead of copying the file it points to. - - """ - sys.audit("shutil.copyfile", src, dst) - - if _samefile(src, dst): - raise SameFileError("{!r} and {!r} are the same file".format(src, dst)) - - file_size = 0 - for i, fn in enumerate([src, dst]): - try: - st = _stat(fn) - except OSError: - # File most likely does not exist - pass - else: - # XXX What about other special files? (sockets, devices...) - if stat.S_ISFIFO(st.st_mode): - fn = fn.path if isinstance(fn, os.DirEntry) else fn - raise SpecialFileError("`%s` is a named pipe" % fn) - if _WINDOWS and i == 0: - file_size = st.st_size - - if not follow_symlinks and _islink(src): - os.symlink(os.readlink(src), dst) - else: - with open(src, 'rb') as fsrc: - try: - with open(dst, 'wb') as fdst: - # macOS - if _HAS_FCOPYFILE: - try: - _fastcopy_fcopyfile(fsrc, fdst, posix._COPYFILE_DATA) - return dst - except _GiveupOnFastCopy: - pass - # Linux / Android / Solaris - elif _USE_CP_SENDFILE or _USE_CP_COPY_FILE_RANGE: - # reflink may be implicit in copy_file_range. - if _USE_CP_COPY_FILE_RANGE: - try: - _fastcopy_copy_file_range(fsrc, fdst) - return dst - except _GiveupOnFastCopy: - pass - if _USE_CP_SENDFILE: - try: - _fastcopy_sendfile(fsrc, fdst) - return dst - except _GiveupOnFastCopy: - pass - # Windows, see: - # https://github.com/python/cpython/pull/7160#discussion_r195405230 - elif _WINDOWS and file_size > 0: - _copyfileobj_readinto(fsrc, fdst, min(file_size, COPY_BUFSIZE)) - return dst - - copyfileobj(fsrc, fdst) - - # Issue 43219, raise a less confusing exception - except IsADirectoryError as e: - if not os.path.exists(dst): - raise FileNotFoundError(f'Directory does not exist: {dst}') from e - else: - raise - - return dst - -def copymode(src, dst, *, follow_symlinks=True): - """Copy mode bits from src to dst. - - If follow_symlinks is not set, symlinks aren't followed if and only - if both `src` and `dst` are symlinks. If `lchmod` isn't available - (e.g. Linux) this method does nothing. - - """ - sys.audit("shutil.copymode", src, dst) - - if not follow_symlinks and _islink(src) and os.path.islink(dst): - if hasattr(os, 'lchmod'): - stat_func, chmod_func = os.lstat, os.lchmod - else: - return - else: - stat_func = _stat - if os.name == 'nt' and os.path.islink(dst): - def chmod_func(*args): - os.chmod(*args, follow_symlinks=True) - else: - chmod_func = os.chmod - - st = stat_func(src) - chmod_func(dst, stat.S_IMODE(st.st_mode)) - -if hasattr(os, 'listxattr'): - def _copyxattr(src, dst, *, follow_symlinks=True): - """Copy extended filesystem attributes from `src` to `dst`. - - Overwrite existing attributes. - - If `follow_symlinks` is false, symlinks won't be followed. - - """ - - try: - names = os.listxattr(src, follow_symlinks=follow_symlinks) - except OSError as e: - if e.errno not in (errno.ENOTSUP, errno.ENODATA, errno.EINVAL): - raise - return - for name in names: - try: - value = os.getxattr(src, name, follow_symlinks=follow_symlinks) - os.setxattr(dst, name, value, follow_symlinks=follow_symlinks) - except OSError as e: - if e.errno not in (errno.EPERM, errno.ENOTSUP, errno.ENODATA, - errno.EINVAL, errno.EACCES): - raise -else: - def _copyxattr(*args, **kwargs): - pass - -def copystat(src, dst, *, follow_symlinks=True): - """Copy file metadata - - Copy the permission bits, last access time, last modification time, and - flags from `src` to `dst`. On Linux, copystat() also copies the "extended - attributes" where possible. The file contents, owner, and group are - unaffected. `src` and `dst` are path-like objects or path names given as - strings. - - If the optional flag `follow_symlinks` is not set, symlinks aren't - followed if and only if both `src` and `dst` are symlinks. - """ - sys.audit("shutil.copystat", src, dst) - - def _nop(*args, ns=None, follow_symlinks=None): - pass - - # follow symlinks (aka don't not follow symlinks) - follow = follow_symlinks or not (_islink(src) and os.path.islink(dst)) - if follow: - # use the real function if it exists - def lookup(name): - return getattr(os, name, _nop) - else: - # use the real function only if it exists - # *and* it supports follow_symlinks - def lookup(name): - fn = getattr(os, name, _nop) - if fn in os.supports_follow_symlinks: - return fn - return _nop - - if isinstance(src, os.DirEntry): - st = src.stat(follow_symlinks=follow) - else: - st = lookup("stat")(src, follow_symlinks=follow) - mode = stat.S_IMODE(st.st_mode) - lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns), - follow_symlinks=follow) - # We must copy extended attributes before the file is (potentially) - # chmod()'ed read-only, otherwise setxattr() will error with -EACCES. - _copyxattr(src, dst, follow_symlinks=follow) - try: - lookup("chmod")(dst, mode, follow_symlinks=follow) - except NotImplementedError: - # if we got a NotImplementedError, it's because - # * follow_symlinks=False, - # * lchown() is unavailable, and - # * either - # * fchownat() is unavailable or - # * fchownat() doesn't implement AT_SYMLINK_NOFOLLOW. - # (it returned ENOSUP.) - # therefore we're out of options--we simply cannot chown the - # symlink. give up, suppress the error. - # (which is what shutil always did in this circumstance.) - pass - if hasattr(st, 'st_flags'): - try: - lookup("chflags")(dst, st.st_flags, follow_symlinks=follow) - except OSError as why: - for err in 'EOPNOTSUPP', 'ENOTSUP': - if hasattr(errno, err) and why.errno == getattr(errno, err): - break - else: - raise - -def copy(src, dst, *, follow_symlinks=True): - """Copy data and mode bits ("cp src dst"). Return the file's destination. - - The destination may be a directory. - - If follow_symlinks is false, symlinks won't be followed. This - resembles GNU's "cp -P src dst". - - If source and destination are the same file, a SameFileError will be - raised. - - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - copyfile(src, dst, follow_symlinks=follow_symlinks) - copymode(src, dst, follow_symlinks=follow_symlinks) - return dst - -def copy2(src, dst, *, follow_symlinks=True): - """Copy data and metadata. Return the file's destination. - - Metadata is copied with copystat(). Please see the copystat function - for more information. - - The destination may be a directory. - - If follow_symlinks is false, symlinks won't be followed. This - resembles GNU's "cp -P src dst". - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - - if hasattr(_winapi, "CopyFile2"): - src_ = os.fsdecode(src) - dst_ = os.fsdecode(dst) - flags = _winapi.COPY_FILE_ALLOW_DECRYPTED_DESTINATION # for compat - if not follow_symlinks: - flags |= _winapi.COPY_FILE_COPY_SYMLINK - try: - _winapi.CopyFile2(src_, dst_, flags) - return dst - except OSError as exc: - if (exc.winerror == _winapi.ERROR_PRIVILEGE_NOT_HELD - and not follow_symlinks): - # Likely encountered a symlink we aren't allowed to create. - # Fall back on the old code - pass - elif exc.winerror == _winapi.ERROR_ACCESS_DENIED: - # Possibly encountered a hidden or readonly file we can't - # overwrite. Fall back on old code - pass - else: - raise - - copyfile(src, dst, follow_symlinks=follow_symlinks) - copystat(src, dst, follow_symlinks=follow_symlinks) - return dst - -def ignore_patterns(*patterns): - """Function that can be used as copytree() ignore parameter. - - Patterns is a sequence of glob-style patterns - that are used to exclude files""" - def _ignore_patterns(path, names): - ignored_names = [] - for pattern in patterns: - ignored_names.extend(fnmatch.filter(names, pattern)) - return set(ignored_names) - return _ignore_patterns - -def _copytree(entries, src, dst, symlinks, ignore, copy_function, - ignore_dangling_symlinks, dirs_exist_ok=False): - if ignore is not None: - ignored_names = ignore(os.fspath(src), [x.name for x in entries]) - else: - ignored_names = () - - os.makedirs(dst, exist_ok=dirs_exist_ok) - errors = [] - use_srcentry = copy_function is copy2 or copy_function is copy - - for srcentry in entries: - if srcentry.name in ignored_names: - continue - srcname = os.path.join(src, srcentry.name) - dstname = os.path.join(dst, srcentry.name) - srcobj = srcentry if use_srcentry else srcname - try: - is_symlink = srcentry.is_symlink() - if is_symlink and os.name == 'nt': - # Special check for directory junctions, which appear as - # symlinks but we want to recurse. - lstat = srcentry.stat(follow_symlinks=False) - if lstat.st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT: - is_symlink = False - if is_symlink: - linkto = os.readlink(srcname) - if symlinks: - # We can't just leave it to `copy_function` because legacy - # code with a custom `copy_function` may rely on copytree - # doing the right thing. - os.symlink(linkto, dstname) - copystat(srcobj, dstname, follow_symlinks=not symlinks) - else: - # ignore dangling symlink if the flag is on - if not os.path.exists(linkto) and ignore_dangling_symlinks: - continue - # otherwise let the copy occur. copy2 will raise an error - if srcentry.is_dir(): - copytree(srcobj, dstname, symlinks, ignore, - copy_function, ignore_dangling_symlinks, - dirs_exist_ok) - else: - copy_function(srcobj, dstname) - elif srcentry.is_dir(): - copytree(srcobj, dstname, symlinks, ignore, copy_function, - ignore_dangling_symlinks, dirs_exist_ok) - else: - # Will raise a SpecialFileError for unsupported file types - copy_function(srcobj, dstname) - # catch the Error from the recursive copytree so that we can - # continue with other files - except Error as err: - errors.extend(err.args[0]) - except OSError as why: - errors.append((srcname, dstname, str(why))) - try: - copystat(src, dst) - except OSError as why: - # Copying file access times may fail on Windows - if getattr(why, 'winerror', None) is None: - errors.append((src, dst, str(why))) - if errors: - raise Error(errors) - return dst - -def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, - ignore_dangling_symlinks=False, dirs_exist_ok=False): - """Recursively copy a directory tree and return the destination directory. - - If exception(s) occur, an Error is raised with a list of reasons. - - If the optional symlinks flag is true, symbolic links in the - source tree result in symbolic links in the destination tree; if - it is false, the contents of the files pointed to by symbolic - links are copied. If the file pointed to by the symlink doesn't - exist, an exception will be added in the list of errors raised in - an Error exception at the end of the copy process. - - You can set the optional ignore_dangling_symlinks flag to true if you - want to silence this exception. Notice that this has no effect on - platforms that don't support os.symlink. - - The optional ignore argument is a callable. If given, it - is called with the `src` parameter, which is the directory - being visited by copytree(), and `names` which is the list of - `src` contents, as returned by os.listdir(): - - callable(src, names) -> ignored_names - - Since copytree() is called recursively, the callable will be - called once for each directory that is copied. It returns a - list of names relative to the `src` directory that should - not be copied. - - The optional copy_function argument is a callable that will be used - to copy each file. It will be called with the source path and the - destination path as arguments. By default, copy2() is used, but any - function that supports the same signature (like copy()) can be used. - - If dirs_exist_ok is false (the default) and `dst` already exists, a - `FileExistsError` is raised. If `dirs_exist_ok` is true, the copying - operation will continue if it encounters existing directories, and files - within the `dst` tree will be overwritten by corresponding files from the - `src` tree. - """ - sys.audit("shutil.copytree", src, dst) - with os.scandir(src) as itr: - entries = list(itr) - return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, - ignore=ignore, copy_function=copy_function, - ignore_dangling_symlinks=ignore_dangling_symlinks, - dirs_exist_ok=dirs_exist_ok) - -if hasattr(os.stat_result, 'st_file_attributes'): - def _rmtree_islink(st): - return (stat.S_ISLNK(st.st_mode) or - (st.st_file_attributes & stat.FILE_ATTRIBUTE_REPARSE_POINT - and st.st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT)) -else: - def _rmtree_islink(st): - return stat.S_ISLNK(st.st_mode) - -# version vulnerable to race conditions -def _rmtree_unsafe(path, dir_fd, onexc): - if dir_fd is not None: - raise NotImplementedError("dir_fd unavailable on this platform") - try: - st = os.lstat(path) - except OSError as err: - onexc(os.lstat, path, err) - return - try: - if _rmtree_islink(st): - # symlinks to directories are forbidden, see bug #1669 - raise OSError("Cannot call rmtree on a symbolic link") - except OSError as err: - onexc(os.path.islink, path, err) - # can't continue even if onexc hook returns - return - def onerror(err): - if not isinstance(err, FileNotFoundError): - onexc(os.scandir, err.filename, err) - results = os.walk(path, topdown=False, onerror=onerror, followlinks=os._walk_symlinks_as_files) - for dirpath, dirnames, filenames in results: - for name in dirnames: - fullname = os.path.join(dirpath, name) - try: - os.rmdir(fullname) - except FileNotFoundError: - continue - except OSError as err: - onexc(os.rmdir, fullname, err) - for name in filenames: - fullname = os.path.join(dirpath, name) - try: - os.unlink(fullname) - except FileNotFoundError: - continue - except OSError as err: - onexc(os.unlink, fullname, err) - try: - os.rmdir(path) - except FileNotFoundError: - pass - except OSError as err: - onexc(os.rmdir, path, err) - -# Version using fd-based APIs to protect against races -def _rmtree_safe_fd(path, dir_fd, onexc): - # While the unsafe rmtree works fine on bytes, the fd based does not. - if isinstance(path, bytes): - path = os.fsdecode(path) - stack = [(os.lstat, dir_fd, path, None)] - try: - while stack: - _rmtree_safe_fd_step(stack, onexc) - finally: - # Close any file descriptors still on the stack. - while stack: - func, fd, path, entry = stack.pop() - if func is not os.close: - continue - try: - os.close(fd) - except OSError as err: - onexc(os.close, path, err) - -def _rmtree_safe_fd_step(stack, onexc): - # Each stack item has four elements: - # * func: The first operation to perform: os.lstat, os.close or os.rmdir. - # Walking a directory starts with an os.lstat() to detect symlinks; in - # this case, func is updated before subsequent operations and passed to - # onexc() if an error occurs. - # * dirfd: Open file descriptor, or None if we're processing the top-level - # directory given to rmtree() and the user didn't supply dir_fd. - # * path: Path of file to operate upon. This is passed to onexc() if an - # error occurs. - # * orig_entry: os.DirEntry, or None if we're processing the top-level - # directory given to rmtree(). We used the cached stat() of the entry to - # save a call to os.lstat() when walking subdirectories. - func, dirfd, path, orig_entry = stack.pop() - name = path if orig_entry is None else orig_entry.name - try: - if func is os.close: - os.close(dirfd) - return - if func is os.rmdir: - os.rmdir(name, dir_fd=dirfd) - return - - # Note: To guard against symlink races, we use the standard - # lstat()/open()/fstat() trick. - assert func is os.lstat - if orig_entry is None: - orig_st = os.lstat(name, dir_fd=dirfd) - else: - orig_st = orig_entry.stat(follow_symlinks=False) - - func = os.open # For error reporting. - topfd = os.open(name, os.O_RDONLY | os.O_NONBLOCK, dir_fd=dirfd) - - func = os.path.islink # For error reporting. - try: - if not os.path.samestat(orig_st, os.fstat(topfd)): - # Symlinks to directories are forbidden, see GH-46010. - raise OSError("Cannot call rmtree on a symbolic link") - stack.append((os.rmdir, dirfd, path, orig_entry)) - finally: - stack.append((os.close, topfd, path, orig_entry)) - - func = os.scandir # For error reporting. - with os.scandir(topfd) as scandir_it: - entries = list(scandir_it) - for entry in entries: - fullname = os.path.join(path, entry.name) - try: - if entry.is_dir(follow_symlinks=False): - # Traverse into sub-directory. - stack.append((os.lstat, topfd, fullname, entry)) - continue - except FileNotFoundError: - continue - except OSError: - pass - try: - os.unlink(entry.name, dir_fd=topfd) - except FileNotFoundError: - continue - except OSError as err: - onexc(os.unlink, fullname, err) - except FileNotFoundError as err: - if orig_entry is None or func is os.close: - err.filename = path - onexc(func, path, err) - except OSError as err: - err.filename = path - onexc(func, path, err) - -_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <= - os.supports_dir_fd and - os.scandir in os.supports_fd and - os.stat in os.supports_follow_symlinks) -_rmtree_impl = _rmtree_safe_fd if _use_fd_functions else _rmtree_unsafe - -def rmtree(path, ignore_errors=False, onerror=None, *, onexc=None, dir_fd=None): - """Recursively delete a directory tree. - - If dir_fd is not None, it should be a file descriptor open to a directory; - path will then be relative to that directory. - dir_fd may not be implemented on your platform. - If it is unavailable, using it will raise a NotImplementedError. - - If ignore_errors is set, errors are ignored; otherwise, if onexc or - onerror is set, it is called to handle the error with arguments (func, - path, exc_info) where func is platform and implementation dependent; - path is the argument to that function that caused it to fail; and - the value of exc_info describes the exception. For onexc it is the - exception instance, and for onerror it is a tuple as returned by - sys.exc_info(). If ignore_errors is false and both onexc and - onerror are None, the exception is reraised. - - onerror is deprecated and only remains for backwards compatibility. - If both onerror and onexc are set, onerror is ignored and onexc is used. - """ - - sys.audit("shutil.rmtree", path, dir_fd) - if ignore_errors: - def onexc(*args): - pass - elif onerror is None and onexc is None: - def onexc(*args): - raise - elif onexc is None: - if onerror is None: - def onexc(*args): - raise - else: - # delegate to onerror - def onexc(*args): - func, path, exc = args - if exc is None: - exc_info = None, None, None - else: - exc_info = type(exc), exc, exc.__traceback__ - return onerror(func, path, exc_info) - - _rmtree_impl(path, dir_fd, onexc) - -# Allow introspection of whether or not the hardening against symlink -# attacks is supported on the current platform -rmtree.avoids_symlink_attacks = _use_fd_functions - -def _basename(path): - """A basename() variant which first strips the trailing slash, if present. - Thus we always get the last component of the path, even for directories. - - path: Union[PathLike, str] - - e.g. - >>> os.path.basename('/bar/foo') - 'foo' - >>> os.path.basename('/bar/foo/') - '' - >>> _basename('/bar/foo/') - 'foo' - """ - path = os.fspath(path) - sep = os.path.sep + (os.path.altsep or '') - return os.path.basename(path.rstrip(sep)) - -def move(src, dst, copy_function=copy2): - """Recursively move a file or directory to another location. This is - similar to the Unix "mv" command. Return the file or directory's - destination. - - If dst is an existing directory or a symlink to a directory, then src is - moved inside that directory. The destination path in that directory must - not already exist. - - If dst already exists but is not a directory, it may be overwritten - depending on os.rename() semantics. - - If the destination is on our current filesystem, then rename() is used. - Otherwise, src is copied to the destination and then removed. Symlinks are - recreated under the new name if os.rename() fails because of cross - filesystem renames. - - The optional `copy_function` argument is a callable that will be used - to copy the source or it will be delegated to `copytree`. - By default, copy2() is used, but any function that supports the same - signature (like copy()) can be used. - - A lot more could be done here... A look at a mv.c shows a lot of - the issues this implementation glosses over. - - """ - sys.audit("shutil.move", src, dst) - real_dst = dst - if os.path.isdir(dst): - if _samefile(src, dst) and not os.path.islink(src): - # We might be on a case insensitive filesystem, - # perform the rename anyway. - os.rename(src, dst) - return - - # Using _basename instead of os.path.basename is important, as we must - # ignore any trailing slash to avoid the basename returning '' - real_dst = os.path.join(dst, _basename(src)) - - if os.path.exists(real_dst): - raise Error("Destination path '%s' already exists" % real_dst) - try: - os.rename(src, real_dst) - except OSError: - if os.path.islink(src): - linkto = os.readlink(src) - os.symlink(linkto, real_dst) - os.unlink(src) - elif os.path.isdir(src): - if _destinsrc(src, dst): - raise Error("Cannot move a directory '%s' into itself" - " '%s'." % (src, dst)) - if (_is_immutable(src) - or (not os.access(src, os.W_OK) and os.listdir(src) - and sys.platform == 'darwin')): - raise PermissionError("Cannot move the non-empty directory " - "'%s': Lacking write permission to '%s'." - % (src, src)) - copytree(src, real_dst, copy_function=copy_function, - symlinks=True) - rmtree(src) - else: - copy_function(src, real_dst) - os.unlink(src) - return real_dst - -def _destinsrc(src, dst): - src = os.path.abspath(src) - dst = os.path.abspath(dst) - if not src.endswith(os.path.sep): - src += os.path.sep - if not dst.endswith(os.path.sep): - dst += os.path.sep - return dst.startswith(src) - -def _is_immutable(src): - st = _stat(src) - immutable_states = [stat.UF_IMMUTABLE, stat.SF_IMMUTABLE] - return hasattr(st, 'st_flags') and st.st_flags in immutable_states - -def _get_gid(name): - """Returns a gid, given a group name.""" - if name is None: - return None - - try: - from grp import getgrnam - except ImportError: - return None - - try: - result = getgrnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _get_uid(name): - """Returns an uid, given a user name.""" - if name is None: - return None - - try: - from pwd import getpwnam - except ImportError: - return None - - try: - result = getpwnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, - owner=None, group=None, logger=None, root_dir=None): - """Create a (possibly compressed) tar file from all the files under - 'base_dir'. - - 'compress' must be "gzip" (the default), "bzip2", "xz", "zst", or None. - - 'owner' and 'group' can be used to define an owner and a group for the - archive that is being built. If not provided, the current owner and group - will be used. - - The output tar file will be named 'base_name' + ".tar", possibly plus - the appropriate compression extension (".gz", ".bz2", ".xz", or ".zst"). - - Returns the output filename. - """ - if compress is None: - tar_compression = '' - elif _ZLIB_SUPPORTED and compress == 'gzip': - tar_compression = 'gz' - elif _BZ2_SUPPORTED and compress == 'bzip2': - tar_compression = 'bz2' - elif _LZMA_SUPPORTED and compress == 'xz': - tar_compression = 'xz' - elif _ZSTD_SUPPORTED and compress == 'zst': - tar_compression = 'zst' - else: - raise ValueError("bad value for 'compress', or compression format not " - "supported : {0}".format(compress)) - - import tarfile # late import for breaking circular dependency - - compress_ext = '.' + tar_compression if compress else '' - archive_name = base_name + '.tar' + compress_ext - archive_dir = os.path.dirname(archive_name) - - if archive_dir and not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - # creating the tarball - if logger is not None: - logger.info('Creating tar archive') - - uid = _get_uid(owner) - gid = _get_gid(group) - - def _set_uid_gid(tarinfo): - if gid is not None: - tarinfo.gid = gid - tarinfo.gname = group - if uid is not None: - tarinfo.uid = uid - tarinfo.uname = owner - return tarinfo - - if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression) - arcname = base_dir - if root_dir is not None: - base_dir = os.path.join(root_dir, base_dir) - try: - tar.add(base_dir, arcname, filter=_set_uid_gid) - finally: - tar.close() - - if root_dir is not None: - archive_name = os.path.abspath(archive_name) - return archive_name - -def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, - logger=None, owner=None, group=None, root_dir=None): - """Create a zip file from all the files under 'base_dir'. - - The output zip file will be named 'base_name' + ".zip". Returns the - name of the output zip file. - """ - import zipfile # late import for breaking circular dependency - - zip_filename = base_name + ".zip" - archive_dir = os.path.dirname(base_name) - - if archive_dir and not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - if logger is not None: - logger.info("creating '%s' and adding '%s' to it", - zip_filename, base_dir) - - if not dry_run: - with zipfile.ZipFile(zip_filename, "w", - compression=zipfile.ZIP_DEFLATED) as zf: - arcname = os.path.normpath(base_dir) - if root_dir is not None: - base_dir = os.path.join(root_dir, base_dir) - base_dir = os.path.normpath(base_dir) - if arcname != os.curdir: - zf.write(base_dir, arcname) - if logger is not None: - logger.info("adding '%s'", base_dir) - for dirpath, dirnames, filenames in os.walk(base_dir): - arcdirpath = dirpath - if root_dir is not None: - arcdirpath = os.path.relpath(arcdirpath, root_dir) - arcdirpath = os.path.normpath(arcdirpath) - for name in sorted(dirnames): - path = os.path.join(dirpath, name) - arcname = os.path.join(arcdirpath, name) - zf.write(path, arcname) - if logger is not None: - logger.info("adding '%s'", path) - for name in filenames: - path = os.path.join(dirpath, name) - path = os.path.normpath(path) - if os.path.isfile(path): - arcname = os.path.join(arcdirpath, name) - zf.write(path, arcname) - if logger is not None: - logger.info("adding '%s'", path) - - if root_dir is not None: - zip_filename = os.path.abspath(zip_filename) - return zip_filename - -_make_tarball.supports_root_dir = True -_make_zipfile.supports_root_dir = True - -# Maps the name of the archive format to a tuple containing: -# * the archiving function -# * extra keyword arguments -# * description -_ARCHIVE_FORMATS = { - 'tar': (_make_tarball, [('compress', None)], - "uncompressed tar file"), -} - -if _ZLIB_SUPPORTED: - _ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gzip')], - "gzip'ed tar-file") - _ARCHIVE_FORMATS['zip'] = (_make_zipfile, [], "ZIP file") - -if _BZ2_SUPPORTED: - _ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bzip2')], - "bzip2'ed tar-file") - -if _LZMA_SUPPORTED: - _ARCHIVE_FORMATS['xztar'] = (_make_tarball, [('compress', 'xz')], - "xz'ed tar-file") - -if _ZSTD_SUPPORTED: - _ARCHIVE_FORMATS['zstdtar'] = (_make_tarball, [('compress', 'zst')], - "zstd'ed tar-file") - -def get_archive_formats(): - """Returns a list of supported formats for archiving and unarchiving. - - Each element of the returned sequence is a tuple (name, description) - """ - formats = [(name, registry[2]) for name, registry in - _ARCHIVE_FORMATS.items()] - formats.sort() - return formats - -def register_archive_format(name, function, extra_args=None, description=''): - """Registers an archive format. - - name is the name of the format. function is the callable that will be - used to create archives. If provided, extra_args is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_archive_formats() function. - """ - if extra_args is None: - extra_args = [] - if not callable(function): - raise TypeError('The %s object is not callable' % function) - if not isinstance(extra_args, (tuple, list)): - raise TypeError('extra_args needs to be a sequence') - for element in extra_args: - if not isinstance(element, (tuple, list)) or len(element) !=2: - raise TypeError('extra_args elements are : (arg_name, value)') - - _ARCHIVE_FORMATS[name] = (function, extra_args, description) - -def unregister_archive_format(name): - del _ARCHIVE_FORMATS[name] - -def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, - dry_run=0, owner=None, group=None, logger=None): - """Create an archive file (eg. zip or tar). - - 'base_name' is the name of the file to create, minus any format-specific - extension; 'format' is the archive format: one of "zip", "tar", "gztar", - "bztar", "xztar", or "zstdtar". Or any other registered format. - - 'root_dir' is a directory that will be the root directory of the - archive; ie. we typically chdir into 'root_dir' before creating the - archive. 'base_dir' is the directory where we start archiving from; - ie. 'base_dir' will be the common prefix of all files and - directories in the archive. 'root_dir' and 'base_dir' both default - to the current directory. Returns the name of the archive file. - - 'owner' and 'group' are used when creating a tar archive. By default, - uses the current owner and group. - """ - sys.audit("shutil.make_archive", base_name, format, root_dir, base_dir) - try: - format_info = _ARCHIVE_FORMATS[format] - except KeyError: - raise ValueError("unknown archive format '%s'" % format) from None - - kwargs = {'dry_run': dry_run, 'logger': logger, - 'owner': owner, 'group': group} - - func = format_info[0] - for arg, val in format_info[1]: - kwargs[arg] = val - - if base_dir is None: - base_dir = os.curdir - - supports_root_dir = getattr(func, 'supports_root_dir', False) - save_cwd = None - if root_dir is not None: - stmd = os.stat(root_dir).st_mode - if not stat.S_ISDIR(stmd): - raise NotADirectoryError(errno.ENOTDIR, 'Not a directory', root_dir) - - if supports_root_dir: - # Support path-like base_name here for backwards-compatibility. - base_name = os.fspath(base_name) - kwargs['root_dir'] = root_dir - else: - save_cwd = os.getcwd() - if logger is not None: - logger.debug("changing into '%s'", root_dir) - base_name = os.path.abspath(base_name) - if not dry_run: - os.chdir(root_dir) - - try: - filename = func(base_name, base_dir, **kwargs) - finally: - if save_cwd is not None: - if logger is not None: - logger.debug("changing back to '%s'", save_cwd) - os.chdir(save_cwd) - - return filename - - -def get_unpack_formats(): - """Returns a list of supported formats for unpacking. - - Each element of the returned sequence is a tuple - (name, extensions, description) - """ - formats = [(name, info[0], info[3]) for name, info in - _UNPACK_FORMATS.items()] - formats.sort() - return formats - -def _check_unpack_options(extensions, function, extra_args): - """Checks what gets registered as an unpacker.""" - # first make sure no other unpacker is registered for this extension - existing_extensions = {} - for name, info in _UNPACK_FORMATS.items(): - for ext in info[0]: - existing_extensions[ext] = name - - for extension in extensions: - if extension in existing_extensions: - msg = '%s is already registered for "%s"' - raise RegistryError(msg % (extension, - existing_extensions[extension])) - - if not callable(function): - raise TypeError('The registered function must be a callable') - - -def register_unpack_format(name, extensions, function, extra_args=None, - description=''): - """Registers an unpack format. - - `name` is the name of the format. `extensions` is a list of extensions - corresponding to the format. - - `function` is the callable that will be - used to unpack archives. The callable will receive archives to unpack. - If it's unable to handle an archive, it needs to raise a ReadError - exception. - - If provided, `extra_args` is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_unpack_formats() function. - """ - if extra_args is None: - extra_args = [] - _check_unpack_options(extensions, function, extra_args) - _UNPACK_FORMATS[name] = extensions, function, extra_args, description - -def unregister_unpack_format(name): - """Removes the pack format from the registry.""" - del _UNPACK_FORMATS[name] - -def _ensure_directory(path): - """Ensure that the parent directory of `path` exists""" - dirname = os.path.dirname(path) - if not os.path.isdir(dirname): - os.makedirs(dirname) - -def _unpack_zipfile(filename, extract_dir): - """Unpack zip `filename` to `extract_dir` - """ - import zipfile # late import for breaking circular dependency - - if not zipfile.is_zipfile(filename): - raise ReadError("%s is not a zip file" % filename) - - zip = zipfile.ZipFile(filename) - try: - for info in zip.infolist(): - name = info.filename - - # don't extract absolute paths or ones with .. in them - if name.startswith('/') or '..' in name: - continue - - targetpath = os.path.join(extract_dir, *name.split('/')) - if not targetpath: - continue - - _ensure_directory(targetpath) - if not name.endswith('/'): - # file - with zip.open(name, 'r') as source, \ - open(targetpath, 'wb') as target: - copyfileobj(source, target) - finally: - zip.close() - -def _unpack_tarfile(filename, extract_dir, *, filter=None): - """Unpack tar/tar.gz/tar.bz2/tar.xz/tar.zst `filename` to `extract_dir` - """ - import tarfile # late import for breaking circular dependency - try: - tarobj = tarfile.open(filename) - except tarfile.TarError: - raise ReadError( - "%s is not a compressed or uncompressed tar file" % filename) - try: - tarobj.extractall(extract_dir, filter=filter) - finally: - tarobj.close() - -# Maps the name of the unpack format to a tuple containing: -# * extensions -# * the unpacking function -# * extra keyword arguments -# * description -_UNPACK_FORMATS = { - 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), - 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file"), -} - -if _ZLIB_SUPPORTED: - _UNPACK_FORMATS['gztar'] = (['.tar.gz', '.tgz'], _unpack_tarfile, [], - "gzip'ed tar-file") - -if _BZ2_SUPPORTED: - _UNPACK_FORMATS['bztar'] = (['.tar.bz2', '.tbz2'], _unpack_tarfile, [], - "bzip2'ed tar-file") - -if _LZMA_SUPPORTED: - _UNPACK_FORMATS['xztar'] = (['.tar.xz', '.txz'], _unpack_tarfile, [], - "xz'ed tar-file") - -if _ZSTD_SUPPORTED: - _UNPACK_FORMATS['zstdtar'] = (['.tar.zst', '.tzst'], _unpack_tarfile, [], - "zstd'ed tar-file") - -def _find_unpack_format(filename): - for name, info in _UNPACK_FORMATS.items(): - for extension in info[0]: - if filename.endswith(extension): - return name - return None - -def unpack_archive(filename, extract_dir=None, format=None, *, filter=None): - """Unpack an archive. - - `filename` is the name of the archive. - - `extract_dir` is the name of the target directory, where the archive - is unpacked. If not provided, the current working directory is used. - - `format` is the archive format: one of "zip", "tar", "gztar", "bztar", - "xztar", or "zstdtar". Or any other registered format. If not provided, - unpack_archive will use the filename extension and see if an unpacker - was registered for that extension. - - In case none is found, a ValueError is raised. - - If `filter` is given, it is passed to the underlying - extraction function. - """ - sys.audit("shutil.unpack_archive", filename, extract_dir, format) - - if extract_dir is None: - extract_dir = os.getcwd() - - extract_dir = os.fspath(extract_dir) - filename = os.fspath(filename) - - if filter is None: - filter_kwargs = {} - else: - filter_kwargs = {'filter': filter} - if format is not None: - try: - format_info = _UNPACK_FORMATS[format] - except KeyError: - raise ValueError("Unknown unpack format '{0}'".format(format)) from None - - func = format_info[1] - func(filename, extract_dir, **dict(format_info[2]), **filter_kwargs) - else: - # we need to look at the registered unpackers supported extensions - format = _find_unpack_format(filename) - if format is None: - raise ReadError("Unknown archive format '{0}'".format(filename)) - - func = _UNPACK_FORMATS[format][1] - kwargs = dict(_UNPACK_FORMATS[format][2]) | filter_kwargs - func(filename, extract_dir, **kwargs) - - -if hasattr(os, 'statvfs'): - - __all__.append('disk_usage') - _ntuple_diskusage = collections.namedtuple('usage', 'total used free') - _ntuple_diskusage.total.__doc__ = 'Total space in bytes' - _ntuple_diskusage.used.__doc__ = 'Used space in bytes' - _ntuple_diskusage.free.__doc__ = 'Free space in bytes' - - def disk_usage(path): - """Return disk usage statistics about the given path. - - Returned value is a named tuple with attributes 'total', 'used' and - 'free', which are the amount of total, used and free space, in bytes. - """ - st = os.statvfs(path) - free = st.f_bavail * st.f_frsize - total = st.f_blocks * st.f_frsize - used = (st.f_blocks - st.f_bfree) * st.f_frsize - return _ntuple_diskusage(total, used, free) - -elif _WINDOWS: - - __all__.append('disk_usage') - _ntuple_diskusage = collections.namedtuple('usage', 'total used free') - - def disk_usage(path): - """Return disk usage statistics about the given path. - - Returned values is a named tuple with attributes 'total', 'used' and - 'free', which are the amount of total, used and free space, in bytes. - """ - total, free = nt._getdiskusage(path) - used = total - free - return _ntuple_diskusage(total, used, free) - - -def chown(path, user=None, group=None, *, dir_fd=None, follow_symlinks=True): - """Change owner user and group of the given path. - - user and group can be the uid/gid or the user/group names, and in that case, - they are converted to their respective uid/gid. - - If dir_fd is set, it should be an open file descriptor to the directory to - be used as the root of *path* if it is relative. - - If follow_symlinks is set to False and the last element of the path is a - symbolic link, chown will modify the link itself and not the file being - referenced by the link. - """ - sys.audit('shutil.chown', path, user, group) - - if user is None and group is None: - raise ValueError("user and/or group must be set") - - _user = user - _group = group - - # -1 means don't change it - if user is None: - _user = -1 - # user can either be an int (the uid) or a string (the system username) - elif isinstance(user, str): - _user = _get_uid(user) - if _user is None: - raise LookupError("no such user: {!r}".format(user)) - - if group is None: - _group = -1 - elif not isinstance(group, int): - _group = _get_gid(group) - if _group is None: - raise LookupError("no such group: {!r}".format(group)) - - os.chown(path, _user, _group, dir_fd=dir_fd, - follow_symlinks=follow_symlinks) - -def get_terminal_size(fallback=(80, 24)): - """Get the size of the terminal window. - - For each of the two dimensions, the environment variable, COLUMNS - and LINES respectively, is checked. If the variable is defined and - the value is a positive integer, it is used. - - When COLUMNS or LINES is not defined, which is the common case, - the terminal connected to sys.__stdout__ is queried - by invoking os.get_terminal_size. - - If the terminal size cannot be successfully queried, either because - the system doesn't support querying, or because we are not - connected to a terminal, the value given in fallback parameter - is used. Fallback defaults to (80, 24) which is the default - size used by many terminal emulators. - - The value returned is a named tuple of type os.terminal_size. - """ - # columns, lines are the working values - try: - columns = int(os.environ['COLUMNS']) - except (KeyError, ValueError): - columns = 0 - - try: - lines = int(os.environ['LINES']) - except (KeyError, ValueError): - lines = 0 - - # only query if necessary - if columns <= 0 or lines <= 0: - try: - size = os.get_terminal_size(sys.__stdout__.fileno()) - except (AttributeError, ValueError, OSError): - # stdout is None, closed, detached, or not a terminal, or - # os.get_terminal_size() is unsupported - size = os.terminal_size(fallback) - if columns <= 0: - columns = size.columns or fallback[0] - if lines <= 0: - lines = size.lines or fallback[1] - - return os.terminal_size((columns, lines)) - - -# Check that a given file can be accessed with the correct mode. -# Additionally check that `file` is not a directory, as on Windows -# directories pass the os.access check. -def _access_check(fn, mode): - return (os.path.exists(fn) and os.access(fn, mode) - and not os.path.isdir(fn)) - - -def _win_path_needs_curdir(cmd, mode): - """ - On Windows, we can use NeedCurrentDirectoryForExePath to figure out - if we should add the cwd to PATH when searching for executables if - the mode is executable. - """ - return (not (mode & os.X_OK)) or _winapi.NeedCurrentDirectoryForExePath( - os.fsdecode(cmd)) - - -def which(cmd, mode=os.F_OK | os.X_OK, path=None): - """Given a command, mode, and a PATH string, return the path which - conforms to the given mode on the PATH, or None if there is no such - file. - - `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result - of os.environ.get("PATH"), or can be overridden with a custom search - path. - - """ - use_bytes = isinstance(cmd, bytes) - - # If we're given a path with a directory part, look it up directly rather - # than referring to PATH directories. This includes checking relative to - # the current directory, e.g. ./script - dirname, cmd = os.path.split(cmd) - if dirname: - path = [dirname] - else: - if path is None: - path = os.environ.get("PATH", None) - if path is None: - try: - path = os.confstr("CS_PATH") - except (AttributeError, ValueError): - # os.confstr() or CS_PATH is not available - path = os.defpath - # bpo-35755: Don't use os.defpath if the PATH environment variable - # is set to an empty string - - # PATH='' doesn't match, whereas PATH=':' looks in the current - # directory - if not path: - return None - - if use_bytes: - path = os.fsencode(path) - path = path.split(os.fsencode(os.pathsep)) - else: - path = os.fsdecode(path) - path = path.split(os.pathsep) - - if sys.platform == "win32" and _win_path_needs_curdir(cmd, mode): - curdir = os.curdir - if use_bytes: - curdir = os.fsencode(curdir) - path.insert(0, curdir) - - if sys.platform == "win32": - # PATHEXT is necessary to check on Windows. - pathext_source = os.getenv("PATHEXT") or _WIN_DEFAULT_PATHEXT - pathext = pathext_source.split(os.pathsep) - pathext = [ext.rstrip('.') for ext in pathext if ext] - - if use_bytes: - pathext = [os.fsencode(ext) for ext in pathext] - - files = [cmd + ext for ext in pathext] - - # If X_OK in mode, simulate the cmd.exe behavior: look at direct - # match if and only if the extension is in PATHEXT. - # If X_OK not in mode, simulate the first result of where.exe: - # always look at direct match before a PATHEXT match. - normcmd = cmd.upper() - if not (mode & os.X_OK) or any(normcmd.endswith(ext.upper()) for ext in pathext): - files.insert(0, cmd) - else: - # On other platforms you don't have things like PATHEXT to tell you - # what file suffixes are executable, so just pass on cmd as-is. - files = [cmd] - - seen = set() - for dir in path: - normdir = os.path.normcase(dir) - if normdir not in seen: - seen.add(normdir) - for thefile in files: - name = os.path.join(dir, thefile) - if _access_check(name, mode): - return name - return None - -def __getattr__(name): - if name == "ExecError": - import warnings - warnings._deprecated( - "shutil.ExecError", - f"{warnings._DEPRECATED_MSG}; it " - "isn't raised by any shutil function.", - remove=(3, 16) - ) - return RuntimeError - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/Python314_4_x86_Template/Lib/signal.py b/Python314_4_x86_Template/Lib/signal.py deleted file mode 100644 index c8cd3d4f5..000000000 --- a/Python314_4_x86_Template/Lib/signal.py +++ /dev/null @@ -1,94 +0,0 @@ -import _signal -from _signal import * -from enum import IntEnum as _IntEnum - -_globals = globals() - -_IntEnum._convert_( - 'Signals', __name__, - lambda name: - name.isupper() - and (name.startswith('SIG') and not name.startswith('SIG_')) - or name.startswith('CTRL_')) - -_IntEnum._convert_( - 'Handlers', __name__, - lambda name: name in ('SIG_DFL', 'SIG_IGN')) - -if 'pthread_sigmask' in _globals: - _IntEnum._convert_( - 'Sigmasks', __name__, - lambda name: name in ('SIG_BLOCK', 'SIG_UNBLOCK', 'SIG_SETMASK')) - - -def _int_to_enum(value, enum_klass): - """Convert a possible numeric value to an IntEnum member. - If it's not a known member, return the value itself. - """ - if not isinstance(value, int): - return value - try: - return enum_klass(value) - except ValueError: - return value - - -def _enum_to_int(value): - """Convert an IntEnum member to a numeric value. - If it's not an IntEnum member return the value itself. - """ - try: - return int(value) - except (ValueError, TypeError): - return value - - -# Similar to functools.wraps(), but only assign __doc__. -# __module__ should be preserved, -# __name__ and __qualname__ are already fine, -# __annotations__ is not set. -def _wraps(wrapped): - def decorator(wrapper): - wrapper.__doc__ = wrapped.__doc__ - return wrapper - return decorator - -@_wraps(_signal.signal) -def signal(signalnum, handler): - handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler)) - return _int_to_enum(handler, Handlers) - - -@_wraps(_signal.getsignal) -def getsignal(signalnum): - handler = _signal.getsignal(signalnum) - return _int_to_enum(handler, Handlers) - - -if 'pthread_sigmask' in _globals: - @_wraps(_signal.pthread_sigmask) - def pthread_sigmask(how, mask): - sigs_set = _signal.pthread_sigmask(how, mask) - return set(_int_to_enum(x, Signals) for x in sigs_set) - - -if 'sigpending' in _globals: - @_wraps(_signal.sigpending) - def sigpending(): - return {_int_to_enum(x, Signals) for x in _signal.sigpending()} - - -if 'sigwait' in _globals: - @_wraps(_signal.sigwait) - def sigwait(sigset): - retsig = _signal.sigwait(sigset) - return _int_to_enum(retsig, Signals) - - -if 'valid_signals' in _globals: - @_wraps(_signal.valid_signals) - def valid_signals(): - return {_int_to_enum(x, Signals) for x in _signal.valid_signals()} - - -del _globals, _wraps diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/INSTALLER b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e38..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/METADATA b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/METADATA deleted file mode 100644 index e56d5d1f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/METADATA +++ /dev/null @@ -1,111 +0,0 @@ -Metadata-Version: 2.4 -Name: pip -Version: 26.0.1 -Summary: The PyPA recommended tool for installing Python packages. -Author-email: The pip developers <distutils-sig@python.org> -Requires-Python: >=3.9 -Description-Content-Type: text/x-rst -License-Expression: MIT -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Topic :: Software Development :: Build Tools -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3.13 -Classifier: Programming Language :: Python :: 3.14 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -License-File: AUTHORS.txt -License-File: LICENSE.txt -License-File: src/pip/_vendor/cachecontrol/LICENSE.txt -License-File: src/pip/_vendor/certifi/LICENSE -License-File: src/pip/_vendor/dependency_groups/LICENSE.txt -License-File: src/pip/_vendor/distlib/LICENSE.txt -License-File: src/pip/_vendor/distro/LICENSE -License-File: src/pip/_vendor/idna/LICENSE.md -License-File: src/pip/_vendor/msgpack/COPYING -License-File: src/pip/_vendor/packaging/LICENSE -License-File: src/pip/_vendor/packaging/LICENSE.APACHE -License-File: src/pip/_vendor/packaging/LICENSE.BSD -License-File: src/pip/_vendor/pkg_resources/LICENSE -License-File: src/pip/_vendor/platformdirs/LICENSE -License-File: src/pip/_vendor/pygments/LICENSE -License-File: src/pip/_vendor/pyproject_hooks/LICENSE -License-File: src/pip/_vendor/requests/LICENSE -License-File: src/pip/_vendor/resolvelib/LICENSE -License-File: src/pip/_vendor/rich/LICENSE -License-File: src/pip/_vendor/tomli/LICENSE -License-File: src/pip/_vendor/tomli_w/LICENSE -License-File: src/pip/_vendor/truststore/LICENSE -License-File: src/pip/_vendor/urllib3/LICENSE.txt -Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ -Project-URL: Documentation, https://pip.pypa.io -Project-URL: Homepage, https://pip.pypa.io/ -Project-URL: Source, https://github.com/pypa/pip - -pip - The Python Package Installer -================================== - -.. |pypi-version| image:: https://img.shields.io/pypi/v/pip.svg - :target: https://pypi.org/project/pip/ - :alt: PyPI - -.. |python-versions| image:: https://img.shields.io/pypi/pyversions/pip - :target: https://pypi.org/project/pip - :alt: PyPI - Python Version - -.. |docs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest - :target: https://pip.pypa.io/en/latest - :alt: Documentation - -|pypi-version| |python-versions| |docs-badge| - -pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. - -Please take a look at our documentation for how to install and use pip: - -* `Installation`_ -* `Usage`_ - -We release updates regularly, with a new version every 3 months. Find more details in our documentation: - -* `Release notes`_ -* `Release process`_ - -If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: - -* `Issue tracking`_ -* `Discourse channel`_ -* `User IRC`_ - -If you want to get involved, head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: - -* `GitHub page`_ -* `Development documentation`_ -* `Development IRC`_ - -Code of Conduct ---------------- - -Everyone interacting in the pip project's codebases, issue trackers, chat -rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. - -.. _package installer: https://packaging.python.org/guides/tool-recommendations/ -.. _Python Package Index: https://pypi.org -.. _Installation: https://pip.pypa.io/en/stable/installation/ -.. _Usage: https://pip.pypa.io/en/stable/ -.. _Release notes: https://pip.pypa.io/en/stable/news.html -.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ -.. _GitHub page: https://github.com/pypa/pip -.. _Development documentation: https://pip.pypa.io/en/latest/development -.. _Issue tracking: https://github.com/pypa/pip/issues -.. _Discourse channel: https://discuss.python.org/c/packaging -.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa -.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev -.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/RECORD b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/RECORD deleted file mode 100644 index f37513d28..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/RECORD +++ /dev/null @@ -1,878 +0,0 @@ -../../Scripts/pip.exe,sha256=NlQzunciK_04cYI_aNbXieP_dnjvl6v4CzpjA3KEoQM,98163 -../../Scripts/pip3.14.exe,sha256=NlQzunciK_04cYI_aNbXieP_dnjvl6v4CzpjA3KEoQM,98163 -../../Scripts/pip3.exe,sha256=NlQzunciK_04cYI_aNbXieP_dnjvl6v4CzpjA3KEoQM,98163 -pip-26.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pip-26.0.1.dist-info/METADATA,sha256=ZqIZuNGsG6l2gHiKlQjVQghFQhgSWfhEDHuCVPW3aN8,4675 -pip-26.0.1.dist-info/RECORD,, -pip-26.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip-26.0.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 -pip-26.0.1.dist-info/entry_points.txt,sha256=Vhf8s0IYgX37mtd4vGL73BPcxdKnqeCFPzB5-d30x8o,84 -pip-26.0.1.dist-info/licenses/AUTHORS.txt,sha256=grSl9YDNOpOFFJTX8ZYKSdgfouXi_DzlRyYGE2-u5aI,11731 -pip-26.0.1.dist-info/licenses/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt,sha256=hu7uh74qQ_P_H1ZJb0UfaSQ5JvAl_tuwM2ZsMExMFhs,558 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt,sha256=GrNuPipLqGMWJThPh-ngkdsfrtA0xbIzJbMjmr8sxSU,1099 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md,sha256=t6M2q_OwThgOwGXN0W5wXQeeHMehT5EKpukYfza5zYc,1541 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING,sha256=SS3tuoXaWHL3jmCRvNH-pHTWYNNay03ulkuKqz8AdCc,614 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE,sha256=qdZvHVJt8C4p3Oc0NtNOVuhjL0bCdbvf_HBWnogvnxc,1331 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE,sha256=GyKwSbUmfW38I6Z79KhNjsBLn9-xpR02DkK0NCyLQVQ,1081 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE,sha256=84j9OMrRMRLB3A9mm76A5_hFQe26-3LzAw0sp2QsPJ0,751 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE,sha256=3u18F6QxgVgZCj6iOcyHmlpQJxzruYrnAl9I--WNyhU,1056 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086 -pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115 -pip/__init__.py,sha256=3EhKF2588Ab15tmBszgD3Bp0N26sJx7VhS2Akn_qY38,355 -pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854 -pip/__pip-runner__.py,sha256=JOoEZTwrtv7jRaXBkgSQKAE04yNyfFmGHxqpHiGHvL0,1450 -pip/__pycache__/__init__.cpython-314.pyc,, -pip/__pycache__/__main__.cpython-314.pyc,, -pip/__pycache__/__pip-runner__.cpython-314.pyc,, -pip/_internal/__init__.py,sha256=S7i9Dn9aSZS0MG-2Wrve3dV9TImPzvQn5jjhp9t_uf0,511 -pip/_internal/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/__pycache__/build_env.cpython-314.pyc,, -pip/_internal/__pycache__/cache.cpython-314.pyc,, -pip/_internal/__pycache__/configuration.cpython-314.pyc,, -pip/_internal/__pycache__/exceptions.cpython-314.pyc,, -pip/_internal/__pycache__/main.cpython-314.pyc,, -pip/_internal/__pycache__/pyproject.cpython-314.pyc,, -pip/_internal/__pycache__/self_outdated_check.cpython-314.pyc,, -pip/_internal/__pycache__/wheel_builder.cpython-314.pyc,, -pip/_internal/build_env.py,sha256=XpgOIlTQLgz3PvDT2n7j2NzX_rVFZLCIG7t7b2ddhcM,21911 -pip/_internal/cache.py,sha256=nMh48Yv3yu1HS1yCdscouu6B6B5zYBWdV6bhqs7gL-E,10345 -pip/_internal/cli/__init__.py,sha256=Iqg_tKA771XuMO1P4t_sDHnSKPzkUb9D0DqunAmw_ko,131 -pip/_internal/cli/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/cli/__pycache__/autocompletion.cpython-314.pyc,, -pip/_internal/cli/__pycache__/base_command.cpython-314.pyc,, -pip/_internal/cli/__pycache__/cmdoptions.cpython-314.pyc,, -pip/_internal/cli/__pycache__/command_context.cpython-314.pyc,, -pip/_internal/cli/__pycache__/index_command.cpython-314.pyc,, -pip/_internal/cli/__pycache__/main.cpython-314.pyc,, -pip/_internal/cli/__pycache__/main_parser.cpython-314.pyc,, -pip/_internal/cli/__pycache__/parser.cpython-314.pyc,, -pip/_internal/cli/__pycache__/progress_bars.cpython-314.pyc,, -pip/_internal/cli/__pycache__/req_command.cpython-314.pyc,, -pip/_internal/cli/__pycache__/spinners.cpython-314.pyc,, -pip/_internal/cli/__pycache__/status_codes.cpython-314.pyc,, -pip/_internal/cli/autocompletion.py,sha256=ZG2cM03nlcNrs-WG_SFTW46isx9s2Go5lUD_8-iv70o,7193 -pip/_internal/cli/base_command.py,sha256=6OW75PSGzkH8Fz761WZ3OSz1TsuO3-suc6iap-sQjTM,9168 -pip/_internal/cli/cmdoptions.py,sha256=hfA9B29Nnq2vYMWhFVg7EcWjdlfdPBPU4WwWT2Lkq4A,36164 -pip/_internal/cli/command_context.py,sha256=kmu3EWZbfBega1oDamnGJTA_UaejhIQNuMj2CVmMXu0,817 -pip/_internal/cli/index_command.py,sha256=s3x75lpDXWJtCkBacTQ3qAAprldHMJCniEQ5qkQ0FiI,6484 -pip/_internal/cli/main.py,sha256=ljDQBkvBtC8xTjOdb6rDJzJUNi1s-PnVR_W5C-Mq0Dk,3137 -pip/_internal/cli/main_parser.py,sha256=YjzJAjqf78ARNsLlnJT9l6fNbpyDPJA-arOIXYsK5Ik,4403 -pip/_internal/cli/parser.py,sha256=EIFExrWX_1nrl1Ib--GOor70WYqLtduHByenb1u9xH4,13827 -pip/_internal/cli/progress_bars.py,sha256=IW1PH5n2FPqUBTP7ULQ5Yu-wyNNO9XGY3g1PT4RMu44,4706 -pip/_internal/cli/req_command.py,sha256=QjDXId0hFdopwE8hNx2eustumxUNbnOCvG_ORmUC7vM,16482 -pip/_internal/cli/spinners.py,sha256=EJzZIZNyUtJljp3-WjcsyIrqxW-HUsfWzhuW84n_Tqw,7362 -pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 -pip/_internal/commands/__init__.py,sha256=aNeCbQurGWihfhQq7BqaLXHqWDQ0i3I04OS7kxK6plQ,4026 -pip/_internal/commands/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/commands/__pycache__/cache.cpython-314.pyc,, -pip/_internal/commands/__pycache__/check.cpython-314.pyc,, -pip/_internal/commands/__pycache__/completion.cpython-314.pyc,, -pip/_internal/commands/__pycache__/configuration.cpython-314.pyc,, -pip/_internal/commands/__pycache__/debug.cpython-314.pyc,, -pip/_internal/commands/__pycache__/download.cpython-314.pyc,, -pip/_internal/commands/__pycache__/freeze.cpython-314.pyc,, -pip/_internal/commands/__pycache__/hash.cpython-314.pyc,, -pip/_internal/commands/__pycache__/help.cpython-314.pyc,, -pip/_internal/commands/__pycache__/index.cpython-314.pyc,, -pip/_internal/commands/__pycache__/inspect.cpython-314.pyc,, -pip/_internal/commands/__pycache__/install.cpython-314.pyc,, -pip/_internal/commands/__pycache__/list.cpython-314.pyc,, -pip/_internal/commands/__pycache__/lock.cpython-314.pyc,, -pip/_internal/commands/__pycache__/search.cpython-314.pyc,, -pip/_internal/commands/__pycache__/show.cpython-314.pyc,, -pip/_internal/commands/__pycache__/uninstall.cpython-314.pyc,, -pip/_internal/commands/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/commands/cache.py,sha256=XjT7kjY8GSISMksFHsLvjS9Ogfi5extNlUUv-dUoWCM,9142 -pip/_internal/commands/check.py,sha256=hVFBQezQ3zj4EydoWbFQj_afPUppMt7r9JPAlY22U6Y,2244 -pip/_internal/commands/completion.py,sha256=LjvRIZ6QUiDXJL3IOMFeD-_J97HfjMGgEk0j2tWGu1U,4565 -pip/_internal/commands/configuration.py,sha256=6gNOGrVWnOLU15zUnAiNuOMhf76RRIZvCdVD0degPRk,10105 -pip/_internal/commands/debug.py,sha256=_8IqM8Fx1_lY2STu_qspr63tufF7zyFJCyYAXtxz0N4,6805 -pip/_internal/commands/download.py,sha256=LUNVobuvCdagjLBuPBaxHeBiHEiIe03fTO2m6ahC8qw,5178 -pip/_internal/commands/freeze.py,sha256=fxoW8AAc-bAqB_fXdNq2VnZ3JfWkFMg-bR6LcdDVO7A,3099 -pip/_internal/commands/hash.py,sha256=GO9pRN3wXC2kQaovK57TaLYBMc3IltOH92O6QEw6YE0,1679 -pip/_internal/commands/help.py,sha256=Bz3LcjNQXkz4Cu__pL4CZ86o4-HNLZj1NZWdlJhjuu0,1108 -pip/_internal/commands/index.py,sha256=kDpx2MO6ZxTt5PpeY4jqcssVbYhzxpkpreDe_6PPhks,5520 -pip/_internal/commands/inspect.py,sha256=ogm4UT7LRo8bIQcWUS1IiA25QdD4VHLa7JaPAodDttM,3177 -pip/_internal/commands/install.py,sha256=L6X1qi49ROVTGABhwwxDgBBTijlOpVn6XSDVZ7QW1Kc,30588 -pip/_internal/commands/list.py,sha256=L5nWuwawqSrBNsuxfyHLAagfz7XJP86tC9nK3L9YiI8,13497 -pip/_internal/commands/lock.py,sha256=145ihjUK_-7gP8O65XPDi_xMhlh5hne1ptkHdfnbAnQ,6027 -pip/_internal/commands/search.py,sha256=zbMsX_YASj6kXA6XIBgTDv0bGK51xG-CV3IynZJcE-c,5782 -pip/_internal/commands/show.py,sha256=oLVJIfKWmDKm0SsQGEi3pozNiqrXjTras_fbBSYKpBA,8066 -pip/_internal/commands/uninstall.py,sha256=CsOihqvb6ZA6O67L70oXeoLHeOfNzMM88H9g-9aocgw,3868 -pip/_internal/commands/wheel.py,sha256=L9vEzJ_E42scF_Hgh5X4Hk39nqJDKxGg4u7glDYbNWc,5880 -pip/_internal/configuration.py,sha256=WxwwSwY_Bm6QzDgf32BsujEyO8dgRedegCpgbUfDvM8,14568 -pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 -pip/_internal/distributions/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/distributions/__pycache__/base.cpython-314.pyc,, -pip/_internal/distributions/__pycache__/installed.cpython-314.pyc,, -pip/_internal/distributions/__pycache__/sdist.cpython-314.pyc,, -pip/_internal/distributions/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/distributions/base.py,sha256=l-OTCAIs25lsapejA6IYpPZxSM5-BET4sdZDkql8jiY,1830 -pip/_internal/distributions/installed.py,sha256=kgIEE_1NzjZxLBSC-v5s64uOFZlVEt3aPrjTtL6x2XY,929 -pip/_internal/distributions/sdist.py,sha256=RYwQIbuxpKy6OjlBZCAefxpMDaoocUQ4dFtheGsiTOQ,6627 -pip/_internal/distributions/wheel.py,sha256=_HbG0OehF8dwj4UX-xV__tXLwgPus9OjMEf2NTRqBbE,1364 -pip/_internal/exceptions.py,sha256=JdPCrQ9iTLvE-GBebzBEeGP3hoTffWEKqbYEsa6cEZc,32165 -pip/_internal/index/__init__.py,sha256=tzwMH_fhQeubwMqHdSivasg1cRgTSbNg2CiMVnzMmyU,29 -pip/_internal/index/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/index/__pycache__/collector.cpython-314.pyc,, -pip/_internal/index/__pycache__/package_finder.cpython-314.pyc,, -pip/_internal/index/__pycache__/sources.cpython-314.pyc,, -pip/_internal/index/collector.py,sha256=R7Gcx_4GEoSEI-iazfAZVEPG3Lp6mbZT4lbAD6NjAc0,16144 -pip/_internal/index/package_finder.py,sha256=a3_L4FDNsuDf3y8Af9J7sfsHR1ahs8o13Ths-WYwFh0,41776 -pip/_internal/index/sources.py,sha256=nXJkOjhLy-O2FsrKU9RIqCOqgY2PsoKWybtZjjRgqU0,8639 -pip/_internal/locations/__init__.py,sha256=Sd67ap1LIemvXArUDFqm8U-HuZvj9i3ApEuiIwUc9UE,14157 -pip/_internal/locations/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/locations/__pycache__/_distutils.cpython-314.pyc,, -pip/_internal/locations/__pycache__/_sysconfig.cpython-314.pyc,, -pip/_internal/locations/__pycache__/base.cpython-314.pyc,, -pip/_internal/locations/_distutils.py,sha256=jpFj4V00rD9IR3vA9TqrGkwcdNVFc58LsChZavge9JY,5975 -pip/_internal/locations/_sysconfig.py,sha256=8CpTjtxaCzHSCrKpaxWnHE7aKcJrRJRmntR1ZLVysLk,7779 -pip/_internal/locations/base.py,sha256=AImjYJWxOtDkc0KKc6Y4Gz677cg91caMA4L94B9FZEg,2550 -pip/_internal/main.py,sha256=1cHqjsfFCrMFf3B5twzocxTJUdHMLoXUpy5lJoFqUi8,338 -pip/_internal/metadata/__init__.py,sha256=vp-JAxiWg_-l5F8AT0Jcey72uUnh8CDwwol9-KktHZ8,5824 -pip/_internal/metadata/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/metadata/__pycache__/_json.cpython-314.pyc,, -pip/_internal/metadata/__pycache__/base.cpython-314.pyc,, -pip/_internal/metadata/__pycache__/pkg_resources.cpython-314.pyc,, -pip/_internal/metadata/_json.py,sha256=hNvnMHOXLAyNlzirWhPL9Nx2CvCqa1iRma6Osq1YfV8,2711 -pip/_internal/metadata/base.py,sha256=BGuMenlcQT8i7j9iclrfdC3vSwgvhr8gjn955cCy16s,25420 -pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135 -pip/_internal/metadata/importlib/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/metadata/importlib/__pycache__/_compat.cpython-314.pyc,, -pip/_internal/metadata/importlib/__pycache__/_dists.cpython-314.pyc,, -pip/_internal/metadata/importlib/__pycache__/_envs.cpython-314.pyc,, -pip/_internal/metadata/importlib/_compat.py,sha256=sneVh4_6WxQZK4ljdl3ylVuP-q0ttSqbgl9mWt0HnOg,2804 -pip/_internal/metadata/importlib/_dists.py,sha256=znZD7MN4RC73-87KXAn6tKZv9lAQRI0AxxK2bubDvPw,8420 -pip/_internal/metadata/importlib/_envs.py,sha256=H3qVLXVh4LWvrPvu_ekXf3dfbtwnlhNJQP2pxXpccfU,5333 -pip/_internal/metadata/pkg_resources.py,sha256=NO76ZrfR2-LKJTyaXrmQoGhmJMArALvacrlZHViSDT8,10544 -pip/_internal/models/__init__.py,sha256=AjmCEBxX_MH9f_jVjIGNCFJKYCYeSEe18yyvNx4uRKQ,62 -pip/_internal/models/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/models/__pycache__/candidate.cpython-314.pyc,, -pip/_internal/models/__pycache__/direct_url.cpython-314.pyc,, -pip/_internal/models/__pycache__/format_control.cpython-314.pyc,, -pip/_internal/models/__pycache__/index.cpython-314.pyc,, -pip/_internal/models/__pycache__/installation_report.cpython-314.pyc,, -pip/_internal/models/__pycache__/link.cpython-314.pyc,, -pip/_internal/models/__pycache__/release_control.cpython-314.pyc,, -pip/_internal/models/__pycache__/scheme.cpython-314.pyc,, -pip/_internal/models/__pycache__/search_scope.cpython-314.pyc,, -pip/_internal/models/__pycache__/selection_prefs.cpython-314.pyc,, -pip/_internal/models/__pycache__/target_python.cpython-314.pyc,, -pip/_internal/models/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/models/candidate.py,sha256=zzgFRuw_kWPjKpGw7LC0ZUMD2CQ2EberUIYs8izjdCA,753 -pip/_internal/models/direct_url.py,sha256=4NMWacu_QzPPWREC1te7v6Wfv-2HkI4tvSJF-CBgLh4,6555 -pip/_internal/models/format_control.py,sha256=PwemYG1L27BM0f1KP61rm24wShENFyxqlD1TWu34alc,2471 -pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 -pip/_internal/models/installation_report.py,sha256=cqfWJ93ThCxjcacqSWryOCD2XtIn1CZrgzZxAv5FQZ0,2839 -pip/_internal/models/link.py,sha256=zti5UCx1hT03etYqm6MCqFd714clmTgX8rTZT9CKZDQ,21992 -pip/_internal/models/release_control.py,sha256=XD14Hy_XLh9xWR1p7JHqPZPEv3Nnb1BZGMpClk76sLs,3403 -pip/_internal/models/scheme.py,sha256=PakmHJM3e8OOWSZFtfz1Az7f1meONJnkGuQxFlt3wBE,575 -pip/_internal/models/search_scope.py,sha256=1hxU2IVsAaLZVjp0CbzJbYaYzCxv72_Qbg3JL0qhXo0,4507 -pip/_internal/models/selection_prefs.py,sha256=IDOA3euRtyqWUyIK7lX2bzIZasYiEvunKA6H3Mngk-M,2221 -pip/_internal/models/target_python.py,sha256=I0eFS-eia3kwhrOvgsphFZtNAB2IwXZ9Sr9fp6IjBP4,4243 -pip/_internal/models/wheel.py,sha256=1SdfDvN7ALTsbyZ9EOsNy1GPirP1n6EjHyzPrZyLSh8,2920 -pip/_internal/network/__init__.py,sha256=FMy06P__y6jMjUc8z3ZcQdKF-pmZ2zM14_vBeHPGhUI,49 -pip/_internal/network/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/network/__pycache__/auth.cpython-314.pyc,, -pip/_internal/network/__pycache__/cache.cpython-314.pyc,, -pip/_internal/network/__pycache__/download.cpython-314.pyc,, -pip/_internal/network/__pycache__/lazy_wheel.cpython-314.pyc,, -pip/_internal/network/__pycache__/session.cpython-314.pyc,, -pip/_internal/network/__pycache__/utils.cpython-314.pyc,, -pip/_internal/network/__pycache__/xmlrpc.cpython-314.pyc,, -pip/_internal/network/auth.py,sha256=azFp14I9cyWAAzkxF2VM0Q_xtHnbNz3_NQXszy87KQo,20806 -pip/_internal/network/cache.py,sha256=kmRXKQrG9E26xQRj211LHeEGpDg_SlYU9Dn1fJ-AMeI,4862 -pip/_internal/network/download.py,sha256=8sVwIc9MWwpGlMPYCkO1S9U-FD8TA2utw42tj00skjM,12667 -pip/_internal/network/lazy_wheel.py,sha256=y9gVksdJCSjnLfYzs_m3DYUAtl3hc_k-xFPDBd9DgOs,7646 -pip/_internal/network/session.py,sha256=7zK7EeQCSRFipu4ZzcWl1V3AMKkiXdtGqFr7GvU2LrY,19555 -pip/_internal/network/utils.py,sha256=ACsXd1msqNCidHVXsu7LHUSr8NgaypcOKQ4KG-Z_wJM,4091 -pip/_internal/network/xmlrpc.py,sha256=_-Rnk3vOff8uF9hAGmT6SLALflY1gMBcbGwS12fb_Y4,1830 -pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/operations/__pycache__/check.cpython-314.pyc,, -pip/_internal/operations/__pycache__/freeze.cpython-314.pyc,, -pip/_internal/operations/__pycache__/prepare.cpython-314.pyc,, -pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/build/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/operations/build/__pycache__/build_tracker.cpython-314.pyc,, -pip/_internal/operations/build/__pycache__/metadata.cpython-314.pyc,, -pip/_internal/operations/build/__pycache__/metadata_editable.cpython-314.pyc,, -pip/_internal/operations/build/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/operations/build/__pycache__/wheel_editable.cpython-314.pyc,, -pip/_internal/operations/build/build_tracker.py,sha256=W3b5cmkMWPaE6QIwfzsTayJo7-OlxFHWDxfPuax1KcE,4771 -pip/_internal/operations/build/metadata.py,sha256=INHaeiRfOiLYCXApfDNRo9Cw2xI4VwTc0KItvfdfOjk,1421 -pip/_internal/operations/build/metadata_editable.py,sha256=oWudMsnjy4loO_Jy7g4N9nxsnaEX_iDlVRgCy7pu1rs,1509 -pip/_internal/operations/build/wheel.py,sha256=3bP-nNiJ4S8JvMaBnyessXQUBhxTqt1GBx6DQ1iPJDY,1136 -pip/_internal/operations/build/wheel_editable.py,sha256=q3kfElclM6FutVbFwE87JOTpVWt5ixDf3_UkHAIVfz4,1478 -pip/_internal/operations/check.py,sha256=yC2XWth6iehGGE_fj7XRJLjVKBsTIG3ZoWRkFi3rOwc,5894 -pip/_internal/operations/freeze.py,sha256=PDdY-y_ZtZZJLAKcaWPIGRKAGW7DXR48f0aMRU0j7BA,9854 -pip/_internal/operations/install/__init__.py,sha256=ak-UETcQPKlFZaWoYKWu5QVXbpFBvg0sXc3i0O4vSYY,50 -pip/_internal/operations/install/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/operations/install/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/operations/install/wheel.py,sha256=FQIl2AnNadHV5YGGOVEmOHtUUNO8lpzj3Icoo4S2xis,27923 -pip/_internal/operations/prepare.py,sha256=ptVsmQf0Mo6jirk1Q5Djdse_wJw5Zdh1Fla2iL9HAJM,28830 -pip/_internal/pyproject.py,sha256=J-sTWqC-XfsKQgz9m1bypMWZPHItsSHzIN_NWeIRmhM,4555 -pip/_internal/req/__init__.py,sha256=WcY9z7D3rlIKX1QY8_tRnAsS_poebiGGdtQ7EJ5JQQo,3041 -pip/_internal/req/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/req/__pycache__/constructors.cpython-314.pyc,, -pip/_internal/req/__pycache__/pep723.cpython-314.pyc,, -pip/_internal/req/__pycache__/req_dependency_group.cpython-314.pyc,, -pip/_internal/req/__pycache__/req_file.cpython-314.pyc,, -pip/_internal/req/__pycache__/req_install.cpython-314.pyc,, -pip/_internal/req/__pycache__/req_set.cpython-314.pyc,, -pip/_internal/req/__pycache__/req_uninstall.cpython-314.pyc,, -pip/_internal/req/constructors.py,sha256=R-6n8irjnaa2DMMXlR4YMouXzykFBlzUFjhOZ1NcUUg,18688 -pip/_internal/req/pep723.py,sha256=olZL3tLmHWJhyLNfbD6U9UuikuzTcLDB06qd9WavTjs,1225 -pip/_internal/req/req_dependency_group.py,sha256=0yEQCUaO5Bza66Y3D5o9JRf0qII5QgCRugn1x5aRivA,2618 -pip/_internal/req/req_file.py,sha256=e32ZQ3kJaL_Sdtf32twGKqIau_AqR43MeSycl0iS2Mw,20685 -pip/_internal/req/req_install.py,sha256=vv5cbs3P5gf43e_1v72gwSQ2N_D_qpsfuXOyerMhDuI,31273 -pip/_internal/req/req_set.py,sha256=awkqIXnYA4Prmsj0Qb3zhqdbYUmXd-1o0P-KZ3mvRQs,2828 -pip/_internal/req/req_uninstall.py,sha256=dCmOHt-9RaJBq921L4tMH3PmIBDetGplnbjRKXmGt00,24099 -pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/resolution/__pycache__/base.cpython-314.pyc,, -pip/_internal/resolution/base.py,sha256=RIsqSP79olPdOgtPKW-oOQ364ICVopehA6RfGkRfe2s,577 -pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/legacy/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/resolution/legacy/__pycache__/resolver.cpython-314.pyc,, -pip/_internal/resolution/legacy/resolver.py,sha256=bwUqE66etz2bcPabqxed18-iyqqb-kx3Er2aT6GeUJY,24060 -pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/base.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-314.pyc,, -pip/_internal/resolution/resolvelib/base.py,sha256=_AoP0ZWlaSct8CRDn2ol3CbNn4zDtnh_0zQGjXASDKI,5047 -pip/_internal/resolution/resolvelib/candidates.py,sha256=50AN7BfB-pCfEmbKNlFZSXtdC0C8ms1waJrF2arknQE,20454 -pip/_internal/resolution/resolvelib/factory.py,sha256=82mLwnPlig37mMrDwcgKHJTE9mPczVuJIxeaUb7CQ0Y,34028 -pip/_internal/resolution/resolvelib/found_candidates.py,sha256=8bZYDCZLXSdLHy_s1o5f4r15HmKvqFUhzBUQOF21Lr4,6018 -pip/_internal/resolution/resolvelib/provider.py,sha256=tbVPfFv4Vg780yZ2_XGoGFP5LVo0U2bFnZov3jpSAIk,11441 -pip/_internal/resolution/resolvelib/reporter.py,sha256=faSgjqme0k_uzv1fvM5T0ZatPQ2eEktNvKBqfvXeGjc,3909 -pip/_internal/resolution/resolvelib/requirements.py,sha256=Izl9n8nc188lA1BSPS8QxfudfDQPHgngw-ij6hXt0nQ,8239 -pip/_internal/resolution/resolvelib/resolver.py,sha256=wQ94Hkep-7kWEHAc-NbMJhmzeEzgEAtxeBxyKVzZoeo,13437 -pip/_internal/self_outdated_check.py,sha256=zDKsyLMufFHuEZY16WRu129FBbBp-ADuxyWMIN4ihPE,8284 -pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/utils/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/utils/__pycache__/_jaraco_text.cpython-314.pyc,, -pip/_internal/utils/__pycache__/_log.cpython-314.pyc,, -pip/_internal/utils/__pycache__/appdirs.cpython-314.pyc,, -pip/_internal/utils/__pycache__/compat.cpython-314.pyc,, -pip/_internal/utils/__pycache__/compatibility_tags.cpython-314.pyc,, -pip/_internal/utils/__pycache__/datetime.cpython-314.pyc,, -pip/_internal/utils/__pycache__/deprecation.cpython-314.pyc,, -pip/_internal/utils/__pycache__/direct_url_helpers.cpython-314.pyc,, -pip/_internal/utils/__pycache__/egg_link.cpython-314.pyc,, -pip/_internal/utils/__pycache__/entrypoints.cpython-314.pyc,, -pip/_internal/utils/__pycache__/filesystem.cpython-314.pyc,, -pip/_internal/utils/__pycache__/filetypes.cpython-314.pyc,, -pip/_internal/utils/__pycache__/glibc.cpython-314.pyc,, -pip/_internal/utils/__pycache__/hashes.cpython-314.pyc,, -pip/_internal/utils/__pycache__/logging.cpython-314.pyc,, -pip/_internal/utils/__pycache__/misc.cpython-314.pyc,, -pip/_internal/utils/__pycache__/packaging.cpython-314.pyc,, -pip/_internal/utils/__pycache__/pylock.cpython-314.pyc,, -pip/_internal/utils/__pycache__/retry.cpython-314.pyc,, -pip/_internal/utils/__pycache__/subprocess.cpython-314.pyc,, -pip/_internal/utils/__pycache__/temp_dir.cpython-314.pyc,, -pip/_internal/utils/__pycache__/unpacking.cpython-314.pyc,, -pip/_internal/utils/__pycache__/urls.cpython-314.pyc,, -pip/_internal/utils/__pycache__/virtualenv.cpython-314.pyc,, -pip/_internal/utils/__pycache__/wheel.cpython-314.pyc,, -pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350 -pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 -pip/_internal/utils/appdirs.py,sha256=LrzDPZMKVh0rubtCx9vu3XlZbLCSug6VSj4Qsvt66BA,1681 -pip/_internal/utils/compat.py,sha256=C9LHXJAKkwAH8Hn3nPkz9EYK3rqPBeO_IXkOG2zzsdQ,2514 -pip/_internal/utils/compatibility_tags.py,sha256=DiNSLqpuruXUamGQwOJ2WZByDGLTGaXi9O-Xf8fOi34,6630 -pip/_internal/utils/datetime.py,sha256=kuJOf1mW8G5tRFN6jWardddS-9qSaR53lK1jmx3NTZY,868 -pip/_internal/utils/deprecation.py,sha256=HVhvyO5qiRFcG88PhZlp_87qdKQNwPTUIIHWtsTR2yI,3696 -pip/_internal/utils/direct_url_helpers.py,sha256=ttKv4GMUqlRwPPog9_CUopy6SDgoxVILzeBJzgfn2tg,3200 -pip/_internal/utils/egg_link.py,sha256=YWfsrbmfcrfWgqQYy6OuIjsyb9IfL1q_2v4zsms1WjI,2459 -pip/_internal/utils/entrypoints.py,sha256=uPjAyShKObdotjQjJUzprQ6r3xQvDIZwUYfHHqZ7Dok,3324 -pip/_internal/utils/filesystem.py,sha256=mJ_PP8z1V1x4HMhydWIWDyEmWikLX0f-NXPCXEcjiLo,6892 -pip/_internal/utils/filetypes.py,sha256=sEMa38qaqjvx1Zid3OCAUja31BOBU-USuSMPBvU3yjo,689 -pip/_internal/utils/glibc.py,sha256=sEh8RJJLYSdRvTqAO4THVPPA-YSDVLD4SI9So-bxX1U,3726 -pip/_internal/utils/hashes.py,sha256=d32UI1en8nyqZzdZQvxUVdfeBoe4ADWx7HtrIM4-XQ4,4998 -pip/_internal/utils/logging.py,sha256=6lJWMC6c7_aD_i4sdgaaeb-Tm3kWpYg0hba_V1-OLnE,13414 -pip/_internal/utils/misc.py,sha256=phFIbHm2kmliHDXJ0eNPxgGP423ZpvZoMKKtJ1_Zvjs,23722 -pip/_internal/utils/packaging.py,sha256=s5tpUmFumwV0H9JSTzryrIY4JwQM8paGt7Sm7eNwt2Y,1601 -pip/_internal/utils/pylock.py,sha256=nKQknZgyswWgzi--hRQX_DLUYQ3g5wGTCwVNQNdoJ54,3817 -pip/_internal/utils/retry.py,sha256=83wReEB2rcntMZ5VLd7ascaYSjn_kLdlQCqxILxWkPM,1461 -pip/_internal/utils/subprocess.py,sha256=r4-Ba_Yc3uZXQpi0K4pZFsCT_QqdSvtF3XJ-204QWaA,8983 -pip/_internal/utils/temp_dir.py,sha256=D9c8D7WOProOO8GGDqpBeVSj10NGFmunG0o2TodjjIU,9307 -pip/_internal/utils/unpacking.py,sha256=4hNg6dqHOn_KzGCzSC76nChG97d_UjtF9AnLSof672o,12972 -pip/_internal/utils/urls.py,sha256=aF_eg9ul5d8bMCxfSSSxQcfs-OpJdbStYqZHoy2K1RE,1601 -pip/_internal/utils/virtualenv.py,sha256=mX-UPyw1MPxhwUxKhbqWWX70J6PHXAJjVVrRnG0h9mc,3455 -pip/_internal/utils/wheel.py,sha256=YdRuj6MicG-Q9Mg03FbUv1WTLam6Lc7AgijY4voVyis,4468 -pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 -pip/_internal/vcs/__pycache__/__init__.cpython-314.pyc,, -pip/_internal/vcs/__pycache__/bazaar.cpython-314.pyc,, -pip/_internal/vcs/__pycache__/git.cpython-314.pyc,, -pip/_internal/vcs/__pycache__/mercurial.cpython-314.pyc,, -pip/_internal/vcs/__pycache__/subversion.cpython-314.pyc,, -pip/_internal/vcs/__pycache__/versioncontrol.cpython-314.pyc,, -pip/_internal/vcs/bazaar.py,sha256=3W1eHjkYx2vc6boeb2NBh4I_rlGAXM-vrzfNhLm1Rxg,3734 -pip/_internal/vcs/git.py,sha256=TTeqDuzS-_BFSNuUStVWmE2nGDpKuvUhBBJk_CCQXV0,19144 -pip/_internal/vcs/mercurial.py,sha256=w1ZJWLKqNP1onEjkfjlwBVnMqPZNSIER8ayjQcnTq4w,5575 -pip/_internal/vcs/subversion.py,sha256=uUgdPvxmvEB8Qwtjr0Hc0XgFjbiNi5cbvI4vARLOJXo,11787 -pip/_internal/vcs/versioncontrol.py,sha256=Ma_HMZBVveSkeYvxacvqeujnkSIaF1XjxTsS3BwcJ8E,22599 -pip/_internal/wheel_builder.py,sha256=yvEULStZtty9Kplp89tDis3hGdyKQ-2BUbFLmJ_5ink,9010 -pip/_vendor/README.rst,sha256=pKKBwCWhu3M3qQ9dDnsmxb3KdsRr-nWmMq2srbH_Bi0,9394 -pip/_vendor/__init__.py,sha256=WzusPTGWIMeQQWSVJ0h2rafGkVTa9WKJ2HT-2-EoZrU,4907 -pip/_vendor/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/cachecontrol/LICENSE.txt,sha256=hu7uh74qQ_P_H1ZJb0UfaSQ5JvAl_tuwM2ZsMExMFhs,558 -pip/_vendor/cachecontrol/__init__.py,sha256=GxwRkm_TQBtPZpfpVK9r6S9dAy2DVnVgDVHJKTiPZ1k,820 -pip/_vendor/cachecontrol/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/adapter.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/cache.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/controller.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/serialize.cpython-314.pyc,, -pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-314.pyc,, -pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737 -pip/_vendor/cachecontrol/adapter.py,sha256=W-HW-l01gyCsnxkOyCbqx7sxrWYoBbKrDsKkVVQN6NE,6586 -pip/_vendor/cachecontrol/cache.py,sha256=OXwv7Fn2AwnKNiahJHnjtvaKLndvVLv_-zO-ltlV9qI,1953 -pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303 -pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-314.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-314.pyc,, -pip/_vendor/cachecontrol/caches/file_cache.py,sha256=d8upFmy_zwaCmlbWEVBlLXFddt8Zw8c5SFpxeOZsdfw,4117 -pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386 -pip/_vendor/cachecontrol/controller.py,sha256=xBauC-vUSu5GsJsxD4-W-JaKqqbBz0MN6Zv8PA2N8hI,19102 -pip/_vendor/cachecontrol/filewrapper.py,sha256=DhxC_rSk-beKdbsYhfvBUDovQHX9r3gHH_jP9-q_mKk,4354 -pip/_vendor/cachecontrol/heuristics.py,sha256=gqMXU8w0gQuEQiSdu3Yg-0vd9kW7nrWKbLca75rheGE,4881 -pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163 -pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417 -pip/_vendor/certifi/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989 -pip/_vendor/certifi/__init__.py,sha256=969deMMS7Uchipr0oO4dbRBUvRi0uNYCn07VmG1aTrg,94 -pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 -pip/_vendor/certifi/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/certifi/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/certifi/__pycache__/core.cpython-314.pyc,, -pip/_vendor/certifi/cacert.pem,sha256=Tzl1_zCrvzVEO0hgZK6Ly0Hf9wf_31dsdtKS-0WKoKk,270954 -pip/_vendor/certifi/core.py,sha256=gu_ECVI1m3Rq0ytpsNE61hgQGcKaOAt9Rs9G8KsTCOI,3442 -pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/dependency_groups/LICENSE.txt,sha256=GrNuPipLqGMWJThPh-ngkdsfrtA0xbIzJbMjmr8sxSU,1099 -pip/_vendor/dependency_groups/__init__.py,sha256=C3OFu0NGwDzQ4LOmmSOFPsRSvkbBn-mdd4j_5YqJw-s,250 -pip/_vendor/dependency_groups/__main__.py,sha256=UNTM7P5mfVtT7wDi9kOTXWgV3fu3e8bTrt1Qp1jvjKo,1709 -pip/_vendor/dependency_groups/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/dependency_groups/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-314.pyc,, -pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-314.pyc,, -pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-314.pyc,, -pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-314.pyc,, -pip/_vendor/dependency_groups/_implementation.py,sha256=Gqb2DlQELRakeHlKf6QtQSW0M-bcEomxHw4JsvID1ls,8041 -pip/_vendor/dependency_groups/_lint_dependency_groups.py,sha256=yp-DDqKXtbkDTNa0ifa-FmOA8ra24lPZEXftW-R5AuI,1710 -pip/_vendor/dependency_groups/_pip_wrapper.py,sha256=nuVW_w_ntVxpE26ELEvngMY0N04sFLsijXRyZZROFG8,1865 -pip/_vendor/dependency_groups/_toml_compat.py,sha256=BHnXnFacm3DeolsA35GjI6qkDApvua-1F20kv3BfZWE,285 -pip/_vendor/dependency_groups/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/distlib/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531 -pip/_vendor/distlib/__init__.py,sha256=Deo3uo98aUyIfdKJNqofeSEFWwDzrV2QeGLXLsgq0Ag,625 -pip/_vendor/distlib/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/distlib/__pycache__/compat.cpython-314.pyc,, -pip/_vendor/distlib/__pycache__/resources.cpython-314.pyc,, -pip/_vendor/distlib/__pycache__/scripts.cpython-314.pyc,, -pip/_vendor/distlib/__pycache__/util.cpython-314.pyc,, -pip/_vendor/distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467 -pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 -pip/_vendor/distlib/scripts.py,sha256=Qvp76E9Jc3IgyYubnpqI9fS7eseGOe4FjpeVKqKt9Iw,18612 -pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792 -pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784 -pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032 -pip/_vendor/distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682 -pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648 -pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448 -pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888 -pip/_vendor/distro/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325 -pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981 -pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64 -pip/_vendor/distro/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/distro/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/distro/__pycache__/distro.cpython-314.pyc,, -pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430 -pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/idna/LICENSE.md,sha256=t6M2q_OwThgOwGXN0W5wXQeeHMehT5EKpukYfza5zYc,1541 -pip/_vendor/idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868 -pip/_vendor/idna/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/codec.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/compat.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/core.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/idnadata.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/intranges.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/package_data.cpython-314.pyc,, -pip/_vendor/idna/__pycache__/uts46data.cpython-314.pyc,, -pip/_vendor/idna/codec.py,sha256=M2SGWN7cs_6B32QmKTyTN6xQGZeYQgQ2wiX3_DR6loE,3438 -pip/_vendor/idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316 -pip/_vendor/idna/core.py,sha256=P26_XVycuMTZ1R2mNK1ZREVzM5mvTzdabBXfyZVU1Lc,13246 -pip/_vendor/idna/idnadata.py,sha256=SG8jhaGE53iiD6B49pt2pwTv_UvClciWE-N54oR2p4U,79623 -pip/_vendor/idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898 -pip/_vendor/idna/package_data.py,sha256=_CUavOxobnbyNG2FLyHoN8QHP3QM9W1tKuw7eq9QwBk,21 -pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/idna/uts46data.py,sha256=H9J35VkD0F9L9mKOqjeNGd2A-Va6FlPoz6Jz4K7h-ps,243725 -pip/_vendor/msgpack/COPYING,sha256=SS3tuoXaWHL3jmCRvNH-pHTWYNNay03ulkuKqz8AdCc,614 -pip/_vendor/msgpack/__init__.py,sha256=RA8gcqK17YpkxBnNwXJVa1oa2LygWDgfF1nA1NPw3mo,1109 -pip/_vendor/msgpack/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/msgpack/__pycache__/exceptions.cpython-314.pyc,, -pip/_vendor/msgpack/__pycache__/ext.cpython-314.pyc,, -pip/_vendor/msgpack/__pycache__/fallback.cpython-314.pyc,, -pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 -pip/_vendor/msgpack/ext.py,sha256=kteJv03n9tYzd5oo3xYopVTo4vRaAxonBQQJhXohZZo,5726 -pip/_vendor/msgpack/fallback.py,sha256=0g1Pzp0vtmBEmJ5w9F3s_-JMVURP8RS4G1cc5TRaAsI,32390 -pip/_vendor/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 -pip/_vendor/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 -pip/_vendor/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 -pip/_vendor/packaging/__init__.py,sha256=y4lVbpeBzCGk-IPDw5BGBZ_b0P3ukEEJZAbGYc6Ey8c,494 -pip/_vendor/packaging/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_elffile.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_manylinux.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_musllinux.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_parser.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_structures.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/_tokenizer.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/markers.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/metadata.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/pylock.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/requirements.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/specifiers.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/tags.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/utils.cpython-314.pyc,, -pip/_vendor/packaging/__pycache__/version.cpython-314.pyc,, -pip/_vendor/packaging/_elffile.py,sha256=-sKkptYqzYw2-x3QByJa5mB4rfPWu1pxkZHRx1WAFCY,3211 -pip/_vendor/packaging/_manylinux.py,sha256=Hf6nB0cOrayEs96-p3oIXAgGnFquv20DO5l-o2_Xnv0,9559 -pip/_vendor/packaging/_musllinux.py,sha256=Z6swjH3MA7XS3qXnmMN7QPhqP3fnoYI0eQ18e9-HgAE,2707 -pip/_vendor/packaging/_parser.py,sha256=U_DajsEx2VoC_F46fSVV3hDKNCWoQYkPkasO3dld0ig,10518 -pip/_vendor/packaging/_structures.py,sha256=Hn49Ta8zV9Wo8GiCL8Nl2ARZY983Un3pruZGVNldPwE,1514 -pip/_vendor/packaging/_tokenizer.py,sha256=M8EwNIdXeL9NMFuFrQtiOKwjka_xFx8KjRQnfE8O_z8,5421 -pip/_vendor/packaging/licenses/__init__.py,sha256=TwXLHZCXwSgdFwRLPxW602T6mSieunSFHM6fp8pgW78,5819 -pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-314.pyc,, -pip/_vendor/packaging/licenses/_spdx.py,sha256=WW7DXiyg68up_YND_wpRYlr1SHhiV4FfJLQffghhMxQ,51122 -pip/_vendor/packaging/markers.py,sha256=ZX-cLvW1S3cZcEc0fHI4z7zSx5U2T19yMpDP_mE-CYw,12771 -pip/_vendor/packaging/metadata.py,sha256=CWVZpN_HfoYMSSDuCP7igOvGgqA9AOmpW8f3qTisfnc,39360 -pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/packaging/pylock.py,sha256=-R1uNfJ4PaLto7Mg62YsGOHgvskuiIEqPwxOywl42Jk,22537 -pip/_vendor/packaging/requirements.py,sha256=PMCAWD8aNMnVD-6uZMedhBuAVX2573eZ4yPBLXmz04I,2870 -pip/_vendor/packaging/specifiers.py,sha256=tF2nC-jwW94FYe6So9dNGenQx1Hdif7ErmWlVp1QiXE,40821 -pip/_vendor/packaging/tags.py,sha256=cXLV1pJD3UtJlDg7Wz3zrfdQhRZqr8jumSAKKAAd2xE,22856 -pip/_vendor/packaging/utils.py,sha256=N4c6oZzFJy6klTZ3AnkNz7sSkJesuFWPp68LA3B5dAo,5040 -pip/_vendor/packaging/version.py,sha256=RVRKq8_GD5Bcak6E1kGG8K7siNZYW9n_XK8M2ZLl0H8,23284 -pip/_vendor/pkg_resources/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023 -pip/_vendor/pkg_resources/__init__.py,sha256=vbTJ0_ruUgGxQjlEqsruFmiNPVyh2t9q-zyTDT053xI,124451 -pip/_vendor/pkg_resources/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/platformdirs/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089 -pip/_vendor/platformdirs/__init__.py,sha256=UfeSHWl8AeTtbOBOoHAxK4dODOWkZtfy-m_i7cWdJ8c,22344 -pip/_vendor/platformdirs/__main__.py,sha256=jBJ8zb7Mpx5ebcqF83xrpO94MaeCpNGHVf9cvDN2JLg,1505 -pip/_vendor/platformdirs/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/android.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/api.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/macos.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/unix.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/version.cpython-314.pyc,, -pip/_vendor/platformdirs/__pycache__/windows.cpython-314.pyc,, -pip/_vendor/platformdirs/android.py,sha256=r0DshVBf-RO1jXJGX8C4Til7F1XWt-bkdWMgmvEiaYg,9013 -pip/_vendor/platformdirs/api.py,sha256=wPHOlwOsfz2oqQZ6A2FcCu5kEAj-JondzoNOHYFQ0h8,9281 -pip/_vendor/platformdirs/macos.py,sha256=0XoOgin1NK7Qki7iskD-oS8xKxw6bXgoKEgdqpCRAFQ,6322 -pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/platformdirs/unix.py,sha256=WZmkUA--L3JNRGmz32s35YfoD3ica6xKIPdCV_HhLcs,10458 -pip/_vendor/platformdirs/version.py,sha256=BI_dKLSMwlkl57vlxZnT8oVjPiUC2W_sdx_8_h99HeQ,704 -pip/_vendor/platformdirs/windows.py,sha256=XvCfklGUMVxJbXit51jpYMN-lNeScPB82qS1CAeplL0,10362 -pip/_vendor/pygments/LICENSE,sha256=qdZvHVJt8C4p3Oc0NtNOVuhjL0bCdbvf_HBWnogvnxc,1331 -pip/_vendor/pygments/__init__.py,sha256=8uNqJCCwXqbEx5aSsBr0FykUQOBDKBihO5mPqiw1aqo,2983 -pip/_vendor/pygments/__main__.py,sha256=WrndpSe6i1ckX_SQ1KaxD9CTKGzD0EuCOFxcbwFpoLU,353 -pip/_vendor/pygments/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/console.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/filter.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/formatter.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/lexer.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/modeline.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/plugin.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/regexopt.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/scanner.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/sphinxext.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/style.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/token.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/unistring.cpython-314.pyc,, -pip/_vendor/pygments/__pycache__/util.cpython-314.pyc,, -pip/_vendor/pygments/console.py,sha256=AagDWqwea2yBWf10KC9ptBgMpMjxKp8yABAmh-NQOVk,1718 -pip/_vendor/pygments/filter.py,sha256=YLtpTnZiu07nY3oK9nfR6E9Y1FBHhP5PX8gvkJWcfag,1910 -pip/_vendor/pygments/filters/__init__.py,sha256=4U4jtA0X3iP83uQnB9-TI-HDSw8E8y8zMYHa0UjbbaI,40392 -pip/_vendor/pygments/filters/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pygments/formatter.py,sha256=KZQMmyo_xkOIkQG8g66LYEkBh1bx7a0HyGCBcvhI9Ew,4390 -pip/_vendor/pygments/formatters/__init__.py,sha256=KTwBmnXlaopJhQDOemVHYHskiDghuq-08YtP6xPNJPg,5385 -pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-314.pyc,, -pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176 -pip/_vendor/pygments/lexer.py,sha256=_kBrOJ_NT5Tl0IVM0rA9c8eysP6_yrlGzEQI0eVYB-A,35349 -pip/_vendor/pygments/lexers/__init__.py,sha256=wbIME35GH7bI1B9rNPJFqWT-ij_RApZDYPUlZycaLzA,12115 -pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-314.pyc,, -pip/_vendor/pygments/lexers/__pycache__/python.cpython-314.pyc,, -pip/_vendor/pygments/lexers/_mapping.py,sha256=l4tCXM8e9aPC2BD6sjIr0deT-J-z5tHgCwL-p1fS0PE,77602 -pip/_vendor/pygments/lexers/python.py,sha256=vxjn1cOHclIKJKxoyiBsQTY65GHbkZtZRuKQ2AVCKaw,53853 -pip/_vendor/pygments/modeline.py,sha256=K5eSkR8GS1r5OkXXTHOcV0aM_6xpk9eWNEIAW-OOJ2g,1005 -pip/_vendor/pygments/plugin.py,sha256=tPx0rJCTIZ9ioRgLNYG4pifCbAwTRUZddvLw-NfAk2w,1891 -pip/_vendor/pygments/regexopt.py,sha256=wXaP9Gjp_hKAdnICqoDkRxAOQJSc4v3X6mcxx3z-TNs,3072 -pip/_vendor/pygments/scanner.py,sha256=nNcETRR1tRuiTaHmHSTTECVYFPcLf6mDZu1e4u91A9E,3092 -pip/_vendor/pygments/sphinxext.py,sha256=5x7Zh9YlU6ISJ31dMwduiaanb5dWZnKg3MyEQsseNnQ,7981 -pip/_vendor/pygments/style.py,sha256=PlOZqlsnTVd58RGy50vkA2cXQ_lP5bF5EGMEBTno6DA,6420 -pip/_vendor/pygments/styles/__init__.py,sha256=x9ebctfyvCAFpMTlMJ5YxwcNYBzjgq6zJaKkNm78r4M,2042 -pip/_vendor/pygments/styles/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-314.pyc,, -pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312 -pip/_vendor/pygments/token.py,sha256=WbdWGhYm_Vosb0DDxW9lHNPgITXfWTsQmHt6cy9RbcM,6226 -pip/_vendor/pygments/unistring.py,sha256=al-_rBemRuGvinsrM6atNsHTmJ6DUbw24q2O2Ru1cBc,63208 -pip/_vendor/pygments/util.py,sha256=oRtSpiAo5jM9ulntkvVbgXUdiAW57jnuYGB7t9fYuhc,10031 -pip/_vendor/pyproject_hooks/LICENSE,sha256=GyKwSbUmfW38I6Z79KhNjsBLn9-xpR02DkK0NCyLQVQ,1081 -pip/_vendor/pyproject_hooks/__init__.py,sha256=cPB_a9LXz5xvsRbX1o2qyAdjLatZJdQ_Lc5McNX-X7Y,691 -pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-314.pyc,, -pip/_vendor/pyproject_hooks/_impl.py,sha256=jY-raxnmyRyB57ruAitrJRUzEexuAhGTpgMygqx67Z4,14936 -pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=MJNPpfIxcO-FghxpBbxkG1rFiQf6HOUbV4U5mq0HFns,557 -pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-314.pyc,, -pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=qcXMhmx__MIJq10gGHW3mA4Tl8dy8YzHMccwnNoKlw0,12216 -pip/_vendor/pyproject_hooks/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/requests/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142 -pip/_vendor/requests/__init__.py,sha256=HlB_HzhrzGtfD_aaYUwUh1zWXLZ75_YCLyit75d0Vz8,5057 -pip/_vendor/requests/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/__version__.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/_internal_utils.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/adapters.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/api.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/auth.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/certs.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/compat.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/cookies.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/exceptions.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/help.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/hooks.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/models.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/packages.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/sessions.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/status_codes.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/structures.cpython-314.pyc,, -pip/_vendor/requests/__pycache__/utils.cpython-314.pyc,, -pip/_vendor/requests/__version__.py,sha256=QKDceK8K_ujqwDDc3oYrR0odOBYgKVOQQ5vFap_G_cg,435 -pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495 -pip/_vendor/requests/adapters.py,sha256=2MLFOK9GpYNhiTd6zLDUrAgSkIB-76i6pmSuUJjHC2w,26429 -pip/_vendor/requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449 -pip/_vendor/requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186 -pip/_vendor/requests/certs.py,sha256=kHDlkK_beuHXeMPc5jta2wgl8gdKeUWt5f2nTDVrvt8,441 -pip/_vendor/requests/compat.py,sha256=QfbmdTFiZzjSHMXiMrd4joCRU6RabtQ9zIcPoVaHIus,1822 -pip/_vendor/requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590 -pip/_vendor/requests/exceptions.py,sha256=D1wqzYWne1mS2rU43tP9CeN1G7QAy7eqL9o1god6Ejw,4272 -pip/_vendor/requests/help.py,sha256=hRKaf9u0G7fdwrqMHtF3oG16RKktRf6KiwtSq2Fo1_0,3813 -pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 -pip/_vendor/requests/models.py,sha256=taljlg6vJ4b-xMu2TaMNFFkaiwMex_VsEQ6qUTN3wzY,35575 -pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057 -pip/_vendor/requests/sessions.py,sha256=Cl1dpEnOfwrzzPbku-emepNeN4Rt_0_58Iy2x-JGTm8,30503 -pip/_vendor/requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322 -pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 -pip/_vendor/requests/utils.py,sha256=WS3wHSQaaEfceu1syiFo5jf4e_CWKUTep_IabOVI_J0,33225 -pip/_vendor/resolvelib/LICENSE,sha256=84j9OMrRMRLB3A9mm76A5_hFQe26-3LzAw0sp2QsPJ0,751 -pip/_vendor/resolvelib/__init__.py,sha256=yoX-d4STvwGGCiQRE5cJC9Cter69SgVgqClxOCvSP7M,541 -pip/_vendor/resolvelib/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/resolvelib/__pycache__/providers.cpython-314.pyc,, -pip/_vendor/resolvelib/__pycache__/reporters.cpython-314.pyc,, -pip/_vendor/resolvelib/__pycache__/structs.cpython-314.pyc,, -pip/_vendor/resolvelib/providers.py,sha256=pIWJbIdJJ9GFtNbtwTH0Ia43Vj6hYCEJj2DOLue15FM,8914 -pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/resolvelib/reporters.py,sha256=pNJf4nFxLpAeKxlBUi2GEj0a2Ij1nikY0UabTKXesT4,2037 -pip/_vendor/resolvelib/resolvers/__init__.py,sha256=728M3EvmnPbVXS7ExXlv2kMu6b7wEsoPutEfl-uVk_I,640 -pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-314.pyc,, -pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-314.pyc,, -pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-314.pyc,, -pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-314.pyc,, -pip/_vendor/resolvelib/resolvers/abstract.py,sha256=CNeQPnpAudY77nmzOkONSmAgRlzIf06X-X9mvRYODms,1543 -pip/_vendor/resolvelib/resolvers/criterion.py,sha256=lcmZGv5sKHOnFD_RzZwvlGSj19MeA-5rCMpdf2Sgw7Y,1768 -pip/_vendor/resolvelib/resolvers/exceptions.py,sha256=ln_jaQtgLlRUSFY627yiHG2gD7AgaXzRKaElFVh7fDQ,1768 -pip/_vendor/resolvelib/resolvers/resolution.py,sha256=3J_zkW-sD3EY-BlNXjyln__njpyH5n0UZJT6uV7CheA,24212 -pip/_vendor/resolvelib/structs.py,sha256=pu-EJiR2IBITr2SQeNPRa0rXhjlStfmO_GEgAhr3004,6420 -pip/_vendor/rich/LICENSE,sha256=3u18F6QxgVgZCj6iOcyHmlpQJxzruYrnAl9I--WNyhU,1056 -pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090 -pip/_vendor/rich/__main__.py,sha256=e_aVC-tDzarWQW9SuZMuCgBr6ODV_iDNV2Wh2xkxOlw,7896 -pip/_vendor/rich/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/__main__.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_cell_widths.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_emoji_replace.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_export_format.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_extension.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_fileno.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_inspect.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_log_render.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_loop.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_null_file.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_palettes.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_pick.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_ratio.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_spinners.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_stack.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_timer.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_win32_console.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_windows.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_windows_renderer.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/_wrap.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/abc.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/align.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/ansi.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/bar.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/box.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/cells.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/color.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/color_triplet.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/columns.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/console.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/constrain.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/containers.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/control.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/default_styles.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/diagnose.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/emoji.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/errors.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/file_proxy.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/filesize.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/highlighter.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/json.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/jupyter.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/layout.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/live.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/live_render.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/logging.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/markup.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/measure.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/padding.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/pager.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/palette.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/panel.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/pretty.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/progress.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/progress_bar.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/prompt.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/protocol.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/region.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/repr.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/rule.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/scope.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/screen.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/segment.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/spinner.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/status.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/style.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/styled.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/syntax.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/table.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/terminal_theme.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/text.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/theme.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/themes.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/traceback.cpython-314.pyc,, -pip/_vendor/rich/__pycache__/tree.cpython-314.pyc,, -pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209 -pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 -pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 -pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128 -pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 -pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799 -pip/_vendor/rich/_inspect.py,sha256=ROT0PLC2GMWialWZkqJIjmYq7INRijQQkoSokWTaAiI,9656 -pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 -pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 -pip/_vendor/rich/_null_file.py,sha256=ADGKp1yt-k70FMKV6tnqCqecB-rSJzp-WQsD7LPL-kg,1394 -pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 -pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 -pip/_vendor/rich/_ratio.py,sha256=IOtl78sQCYZsmHyxhe45krkb68u9xVz7zFsXVJD-b2Y,5325 -pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919 -pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 -pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 -pip/_vendor/rich/_win32_console.py,sha256=BSaDRIMwBLITn_m0mTRLPqME5q-quGdSMuYMpYeYJwc,22755 -pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925 -pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783 -pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404 -pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 -pip/_vendor/rich/align.py,sha256=dg-7uY0ukMLLlUEsBDRLva22_sQgIJD4BK0dmZHFHug,10324 -pip/_vendor/rich/ansi.py,sha256=Avs1LHbSdcyOvDOdpELZUoULcBiYewY76eNBp6uFBhs,6921 -pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263 -pip/_vendor/rich/box.py,sha256=kmavBc_dn73L_g_8vxWSwYJD2uzBXOUFTtJOfpbczcM,10686 -pip/_vendor/rich/cells.py,sha256=KrQkj5-LghCCpJLSNQIyAZjndc4bnEqOEmi5YuZ9UCY,5130 -pip/_vendor/rich/color.py,sha256=3HSULVDj7qQkXUdFWv78JOiSZzfy5y1nkcYhna296V0,18211 -pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 -pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 -pip/_vendor/rich/console.py,sha256=t9azZpmRMVU5cphVBZSShNsmBxd2-IAWcTTlhor-E1s,100849 -pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 -pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502 -pip/_vendor/rich/control.py,sha256=EUTSUFLQbxY6Zmo_sdM-5Ls323vIHTBfN8TPulqeHUY,6487 -pip/_vendor/rich/default_styles.py,sha256=khQFqqaoDs3bprMqWpHw8nO5UpG2DN6QtuTd6LzZwYc,8257 -pip/_vendor/rich/diagnose.py,sha256=fJl1TItRn19gGwouqTg-8zPUW3YqQBqGltrfPQs1H9w,1025 -pip/_vendor/rich/emoji.py,sha256=Wd4bQubZdSy6-PyrRQNuMHtn2VkljK9uPZPVlu2cmx0,2367 -pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 -pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683 -pip/_vendor/rich/filesize.py,sha256=_iz9lIpRgvW7MNSeCZnLg-HwzbP4GETg543WqD8SFs0,2484 -pip/_vendor/rich/highlighter.py,sha256=G_sn-8DKjM1sEjLG_oc4ovkWmiUpWvj8bXi0yed2LnY,9586 -pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031 -pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252 -pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004 -pip/_vendor/rich/live.py,sha256=tF3ukAAJZ_N2ZbGclqZ-iwLoIoZ8f0HHUz79jAyJqj8,15180 -pip/_vendor/rich/live_render.py,sha256=It_39YdzrBm8o3LL0kaGorPFg-BfZWAcrBjLjFokbx4,3521 -pip/_vendor/rich/logging.py,sha256=5KaPPSMP9FxcXPBcKM4cGd_zW78PMgf-YbMVnvfSw0o,12468 -pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451 -pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305 -pip/_vendor/rich/padding.py,sha256=KVEI3tOwo9sgK1YNSuH__M1_jUWmLZwRVV_KmOtVzyM,4908 -pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828 -pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 -pip/_vendor/rich/panel.py,sha256=9sQl00hPIqH5G2gALQo4NepFwpP0k9wT-s_gOms5pIc,11157 -pip/_vendor/rich/pretty.py,sha256=gy3S72u4FRg2ytoo7N1ZDWDIvB4unbzd5iUGdgm-8fc,36391 -pip/_vendor/rich/progress.py,sha256=CUc2lkU-X59mVdGfjMCBkZeiGPL3uxdONjhNJF2T7wY,60408 -pip/_vendor/rich/progress_bar.py,sha256=mZTPpJUwcfcdgQCTTz3kyY-fc79ddLwtx6Ghhxfo064,8162 -pip/_vendor/rich/prompt.py,sha256=l0RhQU-0UVTV9e08xW1BbIj0Jq2IXyChX4lC0lFNzt4,12447 -pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391 -pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 -pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431 -pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602 -pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843 -pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 -pip/_vendor/rich/segment.py,sha256=otnKeKGEV-WRlQVosfJVeFDcDxAKHpvJ_hLzSu5lumM,24743 -pip/_vendor/rich/spinner.py,sha256=onIhpKlljRHppTZasxO8kXgtYyCHUkpSgKglRJ3o51g,4214 -pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424 -pip/_vendor/rich/style.py,sha256=W9Ccy8Py8lNICtlfcp-ryzMTuQaGxAU3av7-g5fHu0s,26990 -pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 -pip/_vendor/rich/syntax.py,sha256=eDKIRwl--eZ0Lwo2da2RRtfutXGavrJO61Cl5OkS59U,36371 -pip/_vendor/rich/table.py,sha256=ZmT7V7MMCOYKw7TGY9SZLyYDf6JdM-WVf07FdVuVhTI,40049 -pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370 -pip/_vendor/rich/text.py,sha256=AO7JPCz6-gaN1thVLXMBntEmDPVYFgFNG1oM61_sanU,47552 -pip/_vendor/rich/theme.py,sha256=oNyhXhGagtDlbDye3tVu3esWOWk0vNkuxFw-_unlaK0,3771 -pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 -pip/_vendor/rich/traceback.py,sha256=c0WmB_L04_UfZbLaoH982_U_s7eosxKMUiAVmDPdRYU,35861 -pip/_vendor/rich/tree.py,sha256=yWnQ6rAvRGJ3qZGqBrxS2SW2TKBTNrP0SdY8QxOFPuw,9451 -pip/_vendor/tomli/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072 -pip/_vendor/tomli/__init__.py,sha256=qzEGl8QHhqgQPCuLzfKyPIuH3KKPspf-UVPbZ0ppBD4,314 -pip/_vendor/tomli/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/tomli/__pycache__/_parser.cpython-314.pyc,, -pip/_vendor/tomli/__pycache__/_re.cpython-314.pyc,, -pip/_vendor/tomli/__pycache__/_types.cpython-314.pyc,, -pip/_vendor/tomli/_parser.py,sha256=bO8tUYmnyA2K6m4TnbQbfUqmIFcDv7mG1KuC9gqRVmA,25778 -pip/_vendor/tomli/_re.py,sha256=n8-Io8ZK1U-F6jzlg7Pabc40hLFJsawE2uNLKH9w7iU,3235 -pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 -pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 -pip/_vendor/tomli_w/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072 -pip/_vendor/tomli_w/__init__.py,sha256=0F8yDtXx3Uunhm874KrAcP76srsM98y7WyHQwCulZbo,169 -pip/_vendor/tomli_w/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/tomli_w/__pycache__/_writer.cpython-314.pyc,, -pip/_vendor/tomli_w/_writer.py,sha256=dsifFS2xYf1i76mmRyfz9y125xC7Z_HQ845ZKhJsYXs,6961 -pip/_vendor/tomli_w/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26 -pip/_vendor/truststore/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086 -pip/_vendor/truststore/__init__.py,sha256=Bu7kqkmpunhLsj5xCu8gT_25ktoPXcSnwe8VHk1GmJo,1320 -pip/_vendor/truststore/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/truststore/__pycache__/_api.cpython-314.pyc,, -pip/_vendor/truststore/__pycache__/_macos.cpython-314.pyc,, -pip/_vendor/truststore/__pycache__/_openssl.cpython-314.pyc,, -pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-314.pyc,, -pip/_vendor/truststore/__pycache__/_windows.cpython-314.pyc,, -pip/_vendor/truststore/_api.py,sha256=CYJCV5BTfttZYfqY3movdMBE-8az7uhET_LYbKT2Nn4,11413 -pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503 -pip/_vendor/truststore/_openssl.py,sha256=zB-SQvJydks7tQ0yIwrP6GD3fQNSSaPiq7zw4yF5T40,2412 -pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130 -pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993 -pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115 -pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333 -pip/_vendor/urllib3/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/_collections.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/_version.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/connection.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/connectionpool.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/exceptions.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/fields.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/filepost.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/poolmanager.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/request.cpython-314.pyc,, -pip/_vendor/urllib3/__pycache__/response.cpython-314.pyc,, -pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372 -pip/_vendor/urllib3/_version.py,sha256=t9wGB6ooOTXXgiY66K1m6BZS1CJyXHAU8EoWDTe6Shk,64 -pip/_vendor/urllib3/connection.py,sha256=ttIA909BrbTUzwkqEe_TzZVh4JOOj7g61Ysei2mrwGg,20314 -pip/_vendor/urllib3/connectionpool.py,sha256=e2eiAwNbFNCKxj4bwDKNK-w7HIdSz3OmMxU_TIt-evQ,40408 -pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 -pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-314.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 -pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 -pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036 -pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528 -pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081 -pip/_vendor/urllib3/contrib/securetransport.py,sha256=Fef1IIUUFHqpevzXiDPbIGkDKchY2FVKeVeLGR1Qq3g,34446 -pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 -pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 -pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 -pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 -pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/packages/__pycache__/six.cpython-314.pyc,, -pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-314.pyc,, -pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-314.pyc,, -pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 -pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343 -pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665 -pip/_vendor/urllib3/poolmanager.py,sha256=aWyhXRtNO4JUnCSVVqKTKQd8EXTvUm1VN9pgs2bcONo,19990 -pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691 -pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641 -pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 -pip/_vendor/urllib3/util/__pycache__/__init__.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/connection.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/proxy.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/queue.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/request.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/response.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/retry.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/timeout.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/url.cpython-314.pyc,, -pip/_vendor/urllib3/util/__pycache__/wait.cpython-314.pyc,, -pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 -pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 -pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 -pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997 -pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 -pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050 -pip/_vendor/urllib3/util/ssl_.py,sha256=QDuuTxPSCj1rYtZ4xpD7Ux-r20TD50aHyqKyhQ7Bq4A,17460 -pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758 -pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 -pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168 -pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296 -pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403 -pip/_vendor/vendor.txt,sha256=f2msFLZ-chXWIZSKW31NLGyMWmt_-Vfy7sY5dHYgmnw,342 -pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/REQUESTED b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/REQUESTED deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/WHEEL b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/WHEEL deleted file mode 100644 index d8b9936da..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: flit 3.12.0 -Root-Is-Purelib: true -Tag: py3-none-any diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/entry_points.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/entry_points.txt deleted file mode 100644 index c6436d21f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/entry_points.txt +++ /dev/null @@ -1,4 +0,0 @@ -[console_scripts] -pip=pip._internal.cli.main:main -pip3=pip._internal.cli.main:main - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt deleted file mode 100644 index 73b4dc8b3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/AUTHORS.txt +++ /dev/null @@ -1,860 +0,0 @@ -@Switch01 -A_Rog -Aakanksha Agrawal -Aarni Koskela -Abhinav Sagar -ABHYUDAY PRATAP SINGH -abs51295 -AceGentile -Adam Chainz -Adam Tse -Adam Turner -Adam Wentz -admin -Adolfo Ochagavía -Adrien Morison -Agus -ahayrapetyan -Ahilya -AinsworthK -Akash Srivastava -Alan Yee -Albert Tugushev -Albert-Guan -albertg -Alberto Sottile -Aleks Bunin -Ales Erjavec -Alessandro Molina -Alethea Flowers -Alex Gaynor -Alex Grönholm -Alex Hedges -Alex Loosley -Alex Morega -Alex Stachowiak -Alexander Regueiro -Alexander Shtyrov -Alexandre Conrad -Alexey Popravka -Aleš Erjavec -Alli -Aman -Ami Fischman -Ananya Maiti -Anatoly Techtonik -Anders Kaseorg -Andre Aguiar -Andreas Lutro -Andrei Geacar -Andrew Gaul -Andrew Shymanel -Andrey Bienkowski -Andrey Bulgakov -Andrés Delfino -Andy Freeland -Andy Kluger -Ani Hayrapetyan -Aniruddha Basak -Anish Tambe -Anrs Hu -Anthony Sottile -Antoine Lambert -Antoine Musso -Anton Ovchinnikov -Anton Patrushev -Anton Zelenov -Antonio Alvarado Hernandez -Antony Lee -Antti Kaihola -Anubhav Patel -Anudit Nagar -Anuj Godase -AQNOUCH Mohammed -AraHaan -arena -arenasys -Arindam Choudhury -Armin Ronacher -Arnon Yaari -Artem -Arun Babu Neelicattu -Ashley Manton -Ashwin Ramaswami -atse -Atsushi Odagiri -Avinash Karhana -Avner Cohen -Awit (Ah-Wit) Ghirmai -Baptiste Mispelon -Barney Gale -barneygale -Bartek Ogryczak -Bastian Venthur -Ben Bodenmiller -Ben Darnell -Ben Hoyt -Ben Mares -Ben Rosser -Bence Nagy -Benjamin Peterson -Benjamin VanEvery -Benoit Pierre -Berker Peksag -Bernard -Bernard Tyers -Bernardo B. Marques -Bernhard M. Wiedemann -Bertil Hatt -Bhavam Vidyarthi -Blazej Michalik -Bogdan Opanchuk -BorisZZZ -Brad Erickson -Bradley Ayers -Bradley Reynolds -Branch Vincent -Brandon L. Reiss -Brandt Bucher -Brannon Dorsey -Brett Randall -Brett Rosen -Brian Cristante -Brian Rosner -briantracy -BrownTruck -Bruno Oliveira -Bruno Renié -Bruno S -Bstrdsmkr -Buck Golemon -burrows -Bussonnier Matthias -bwoodsend -c22 -Caleb Brown -Caleb Martinez -Calvin Smith -Carl Meyer -Carlos Liam -Carol Willing -Carter Thayer -Cass -Chandrasekhar Atina -Charlie Marsh -charwick -Chih-Hsuan Yen -Chris Brinker -Chris Hunt -Chris Jerdonek -Chris Kuehl -Chris Markiewicz -Chris McDonough -Chris Pawley -Chris Pryer -Chris Wolfe -Christian Clauss -Christian Heimes -Christian Oudard -Christoph Reiter -Christopher Hunt -Christopher Snyder -chrysle -cjc7373 -Clark Boylan -Claudio Jolowicz -Clay McClure -Cody -Cody Soyland -Colin Watson -Collin Anderson -Connor Osborn -Cooper Lees -Cooper Ry Lees -Cory Benfield -Cory Wright -Craig Kerstiens -Cristian Sorinel -Cristina -Cristina Muñoz -ctg123 -Curtis Doty -cytolentino -Daan De Meyer -Dale -Damian -Damian Quiroga -Damian Shaw -Dan Black -Dan Savilonis -Dan Sully -Dane Hillard -daniel -Daniel Collins -Daniel Hahler -Daniel Hollas -Daniel Holth -Daniel Jost -Daniel Katz -Daniel Shaulov -Daniele Esposti -Daniele Nicolodi -Daniele Procida -Daniil Konovalenko -Danny Hermes -Danny McClanahan -Darren Kavanagh -Dav Clark -Dave Abrahams -Dave Jones -David Aguilar -David Black -David Bordeynik -David Caro -David D Lowe -David Evans -David Hewitt -David Linke -David Poggi -David Poznik -David Pursehouse -David Runge -David Tucker -David Wales -Davidovich -ddelange -Deepak Sharma -Deepyaman Datta -Denis Roussel (ACSONE) -Denise Yu -dependabot[bot] -derwolfe -Desetude -developer -Devesh Kumar -Devesh Kumar Singh -devsagul -Diego Caraballo -Diego Ramirez -DiegoCaraballo -Dimitri Merejkowsky -Dimitri Papadopoulos -Dimitri Papadopoulos Orfanos -Dirk Stolle -dkjsone -Dmitry Gladkov -Dmitry Volodin -Domen Kožar -Dominic Davis-Foster -Donald Stufft -Dongweiming -doron zarhi -Dos Moonen -Douglas Thor -DrFeathers -Dustin Ingram -Dustin Rodrigues -Dwayne Bailey -Ed Morley -Edgar Ramírez -Edgar Ramírez Mondragón -Ee Durbin -Efflam Lemaillet -efflamlemaillet -Eitan Adler -ekristina -elainechan -Eli Schwartz -Elisha Hollander -Ellen Marie Dash -Emil Burzo -Emil Styrke -Emmanuel Arias -Endoh Takanao -enoch -Erdinc Mutlu -Eric Cousineau -Eric Gillingham -Eric Hanchrow -Eric Hopper -Erik M. Bray -Erik Rose -Erwin Janssen -Eugene Vereshchagin -everdimension -Federico -Felipe Peter -Felix Yan -fiber-space -Filip Kokosiński -Filipe Laíns -Finn Womack -finnagin -Flavio Amurrio -Florian Briand -Florian Rathgeber -Francesco -Francesco Montesano -Fredrik Orderud -Fredrik Roubert -Frost Ming -Gabriel Curio -Gabriel de Perthuis -Garry Polley -gavin -gdanielson -Gene Wood -Geoffrey Sneddon -George Margaritis -George Song -Georgi Valkov -Georgy Pchelkin -ghost -Giftlin Rajaiah -gizmoguy1 -gkdoc -Godefroid Chapelle -Gopinath M -GOTO Hayato -gousaiyang -gpiks -Greg Roodt -Greg Ward -Guido Diepen -Guilherme Espada -Guillaume Seguin -gutsytechster -Guy Rozendorn -Guy Tuval -gzpan123 -Hanjun Kim -Hari Charan -Harsh Vardhan -Harsha Sai -harupy -Harutaka Kawamura -Hasan-8326 -hauntsaninja -Henrich Hartzer -Henry Schreiner -Herbert Pfennig -Holly Stotelmyer -Honnix -Hsiaoming Yang -Hugo Lopes Tavares -Hugo van Kemenade -Hugues Bruant -Hynek Schlawack -iamsrp-deshaw -Ian Bicking -Ian Cordasco -Ian Lee -Ian Stapleton Cordasco -Ian Wienand -Igor Kuzmitshov -Igor Sobreira -Ikko Ashimine -Ilan Schnell -Illia Volochii -Ilya Abdolmanafi -Ilya Baryshev -Inada Naoki -Ionel Cristian Mărieș -Ionel Maries Cristian -Itamar Turner-Trauring -iTrooz -Ivan Pozdeev -J. Nick Koston -Jacob Kim -Jacob Walls -Jaime Sanz -Jake Lishman -jakirkham -Jakub Kuczys -Jakub Stasiak -Jakub Vysoky -Jakub Wilk -James -James Cleveland -James Curtin -James Firth -James Gerity -James Polley -Jan Pokorný -Jannis Leidel -Jarek Potiuk -jarondl -Jason Curtis -Jason R. Coombs -JasonMo -JasonMo1 -Jay Graves -Jean Abou Samra -Jean-Christophe Fillion-Robin -Jeff Barber -Jeff Dairiki -Jeff Widman -Jelmer Vernooij -jenix21 -Jeremy Fleischman -Jeremy Stanley -Jeremy Zafran -Jesse Rittner -Jiashuo Li -Jim Fisher -Jim Garrison -Jinzhe Zeng -Jiun Bae -Jivan Amara -Joa -Joe Bylund -Joe Michelini -Johannes Altmanninger -John Paton -John Sirois -John T. Wodder II -John-Scott Atlakson -johnthagen -Jon Banafato -Jon Dufresne -Jon Parise -Jonas Nockert -Jonathan Herbert -Joonatan Partanen -Joost Molenaar -Jorge Niedbalski -Joseph Bylund -Joseph Long -Josh Bronson -Josh Cannon -Josh Hansen -Josh Schneier -Joshua -JoshuaPerdue -Jost Migenda -Juan Luis Cano Rodríguez -Juanjo Bazán -Judah Rand -Julian Berman -Julian Gethmann -Julien Demoor -Julien Stephan -July Tikhonov -Jussi Kukkonen -Justin van Heek -jwg4 -Jyrki Pulliainen -Kai Chen -Kai Mueller -Kamal Bin Mustafa -Karolina Surma -kasium -kaustav haldar -Kaz Nishimura -keanemind -Keith Maxwell -Kelsey Hightower -Kenneth Belitzky -Kenneth Reitz -Kevin Burke -Kevin Carter -Kevin Frommelt -Kevin R Patterson -Kexuan Sun -Kit Randel -Klaas van Schelven -KOLANICH -konstin -kpinc -Krishan Bhasin -Krishna Oza -Kumar McMillan -Kuntal Majumder -Kurt McKee -Kyle Persohn -lakshmanaram -Laszlo Kiss-Kollar -Laurent Bristiel -Laurent LAPORTE -Laurie O -Laurie Opperman -layday -Leon Sasson -Lev Givon -Lincoln de Sousa -Lipis -lorddavidiii -Loren Carvalho -Lucas Cimon -Ludovic Gasc -Luis Medel -Lukas Geiger -Lukas Juhrich -Luke Macken -Luo Jiebin -luojiebin -luz.paz -László Kiss Kollár -M00nL1ght -MajorTanya -Malcolm Smith -Marc Abramowitz -Marc Tamlyn -Marcus Smith -Mariatta -Mark Kohler -Mark McLoughlin -Mark Williams -Markus Hametner -Martey Dodoo -Martin Fischer -Martin Häcker -Martin Pavlasek -Masaki -Masklinn -Matej Stuchlik -Mateusz Sokół -Mathew Jennings -Mathieu Bridon -Mathieu Kniewallner -Matt Bacchi -Matt Good -Matt Maker -Matt Robenolt -Matt Wozniski -matthew -Matthew Einhorn -Matthew Feickert -Matthew Gilliard -Matthew Hughes -Matthew Iversen -Matthew Treinish -Matthew Trumbell -Matthew Willson -Matthias Bussonnier -mattip -Maurits van Rees -Max W Chase -Maxim Kurnikov -Maxime Rouyrre -mayeut -mbaluna -Md Sujauddin Sekh -mdebi -Meet Vasita -memoselyk -meowmeowcat -Michael -Michael Aquilina -Michael E. Karpeles -Michael Klich -Michael Mintz -Michael Williamson -michaelpacer -Michał Górny -Mickaël Schoentgen -Miguel Araujo Perez -Mihir Singh -Mike -Mike Hendricks -Min RK -MinRK -Miro Hrončok -Monica Baluna -montefra -Monty Taylor -morotti -mrKazzila -Muha Ajjan -MUTHUSRIHEMADHARSHINI S A -Nadav Wexler -Nahuel Ambrosini -Nate Coraor -Nate Prewitt -Nathan Houghton -Nathaniel J. Smith -Nehal J Wani -Neil Botelho -Nguyễn Gia Phong -Nicholas Serra -Nick Coghlan -Nick Stenning -Nick Timkovich -Nicolas Bock -Nicole Harris -Nikhil Benesch -Nikhil Ladha -Nikita Chepanov -Nikolay Korolev -Nipunn Koorapati -Nitesh Sharma -Niyas Sait -Noah -Noah Gorny -Nothing-991 -Nowell Strite -NtaleGrey -nucccc -nvdv -OBITORASU -Ofek Lev -ofrinevo -Oleg Burnaev -Oliver Freund -Oliver Jeeves -Oliver Mannion -Oliver Tonnhofer -Olivier Girardot -Olivier Grisel -Ollie Rutherfurd -OMOTO Kenji -Omry Yadan -onlinejudge95 -Oren Held -Oscar Benjamin -oxygen dioxide -Oz N Tiram -Pachwenko -Paresh Joshi -Patrick Dubroy -Patrick Jenkins -Patrick Lawson -patricktokeeffe -Patrik Kopkan -Paul Ganssle -Paul Kehrer -Paul Moore -Paul Nasrat -Paul Oswald -Paul van der Linden -Paulus Schoutsen -Pavel Safronov -Pavithra Eswaramoorthy -Pawel Jasinski -Paweł Szramowski -Pekka Klärck -Peter Gessler -Peter Lisák -Peter Shen -Peter Waller -Petr Viktorin -petr-tik -Phaneendra Chiruvella -Phil Elson -Phil Freo -Phil Pennock -Phil Whelan -Philip Jägenstedt -Philip Molloy -Philippe Ombredanne -Pi Delport -Pierre-Yves Rofes -Pieter Degroote -pip -Prabakaran Kumaresshan -Prabhjyotsing Surjit Singh Sodhi -Prabhu Marappan -Pradyun Gedam -Prashant Sharma -Pratik Mallya -pre-commit-ci[bot] -Preet Thakkar -Preston Holmes -Przemek Wrzos -Pulkit Goyal -q0w -Qiangning Hong -Qiming Xu -qraqras -Quentin Lee -Quentin Pradet -R. David Murray -Rafael Caricio -Ralf Schmitt -Ran Benita -Randy Döring -Razzi Abuissa -rdb -Reece Dunham -Remi Rampin -Rene Dudfield -Riccardo Magliocchetti -Riccardo Schirone -Richard Jones -Richard Si -Ricky Ng-Adam -Rishi -rmorotti -RobberPhex -Robert Collins -Robert McGibbon -Robert Pollak -Robert T. McGibbon -robin elisha robinson -Rodney, Tiara -Roey Berman -Rohan Jain -Roman Bogorodskiy -Roman Donchenko -Romuald Brunet -ronaudinho -Ronny Pfannschmidt -Rory McCann -Ross Brattain -Roy Wellington Ⅳ -Ruairidh MacLeod -Russell Keith-Magee -Ryan Shepherd -Ryan Wooden -ryneeverett -Ryuma Asai -S. Guliaev -Sachi King -Salvatore Rinchiera -sandeepkiran-js -Sander Van Balen -Savio Jomton -schlamar -Scott Kitterman -Sean -seanj -Sebastian Jordan -Sebastian Schaetz -Segev Finer -SeongSoo Cho -Sepehr Rasouli -sepehrrasooli -Sergey Vasilyev -Seth Michael Larson -Seth Woodworth -Shahar Epstein -Shantanu -shenxianpeng -shireenrao -Shivansh-007 -Shixian Sheng -Shlomi Fish -Shovan Maity -Shubham Nagure -Simeon Visser -Simon Cross -Simon Pichugin -sinoroc -sinscary -snook92 -socketubs -Sorin Sbarnea -Srinivas Nyayapati -Srishti Hegde -Stavros Korokithakis -Stefan Scherfke -Stefano Rivera -Stephan Erb -Stephane Chazelas -Stephen Payne -Stephen Rosen -stepshal -Steve (Gadget) Barnes -Steve Barnes -Steve Dower -Steve Kowalik -Steven Myint -Steven Silvester -stonebig -studioj -Stéphane Bidoul -Stéphane Bidoul (ACSONE) -Stéphane Klein -Sumana Harihareswara -Surbhi Sharma -Sviatoslav Sydorenko -Sviatoslav Sydorenko (Святослав Сидоренко) -Swat009 -Sylvain -Takayuki SHIMIZUKAWA -Taneli Hukkinen -tbeswick -Terrance -Thiago -Thijs Triemstra -Thomas Fenzl -Thomas Grainger -Thomas Guettler -Thomas Johansson -Thomas Kluyver -Thomas Smith -Thomas VINCENT -Tim D. Smith -Tim Gates -Tim Harder -Tim Heap -tim smith -tinruufu -Tobias Hermann -Tom Forbes -Tom Freudenheim -Tom V -Tomas Hrnciar -Tomas Orsava -Tomer Chachamu -Tommi Enenkel | AnB -Tomáš Hrnčiar -Tony Beswick -Tony Narlock -Tony Zhaocheng Tan -TonyBeswick -toonarmycaptain -Toshio Kuratomi -toxinu -Travis Swicegood -Tushar Sadhwani -Tzu-ping Chung -Valentin Haenel -Victor Stinner -victorvpaulo -Vikram - Google -Viktor Szépe -Ville Skyttä -Vinay Sajip -Vincent Philippon -Vinicyus Macedo -Vipul Kumar -Vitaly Babiy -Vladimir Fokow -Vladimir Rutsky -W. Trevor King -Weida Hong -Wil Tan -Wilfred Hughes -William Edwards -William ML Leslie -William T Olson -William Woodruff -Wilson Mo -wim glenn -Winson Luk -Wolfgang Maier -Wu Zhenyu -XAMES3 -Xavier Fernandez -Xianpeng Shen -xoviat -xtreak -YAMAMOTO Takashi -Yash -Yashraj -Yen Chi Hsuan -Yeray Diaz Diaz -Yoval P -Yu Jian -Yuan Jing Vincent Yan -Yuki Kobayashi -Yusuke Hayashi -zackzack38 -Zearin -Zhiping Deng -ziebam -Zvezdan Petkovic -Łukasz Langa -Роман Донченко -Семён Марьясин diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt deleted file mode 100644 index 8e7b65eaf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt deleted file mode 100644 index d8b3b56d3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2012-2021 Eric Larson - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE deleted file mode 100644 index 62b076cde..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -This package contains a modified version of ca-bundle.crt: - -ca-bundle.crt -- Bundle of CA Root Certificates - -This is a bundle of X.509 certificates of public Certificate Authorities -(CA). These were automatically extracted from Mozilla's root certificates -file (certdata.txt). This file can be found in the mozilla source tree: -https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt -It contains the certificates in PEM format and therefore -can be directly used with curl / libcurl / php_curl, or with -an Apache+mod_ssl webserver for SSL client authentication. -Just configure this file as the SSLCACertificateFile.# - -***** BEGIN LICENSE BLOCK ***** -This Source Code Form is subject to the terms of the Mozilla Public License, -v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain -one at http://mozilla.org/MPL/2.0/. - -***** END LICENSE BLOCK ***** -@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt deleted file mode 100644 index b9723b85e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2024-present Stephen Rosen <sirosen0@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt deleted file mode 100644 index c31ac56d7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +++ /dev/null @@ -1,284 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations (now Zope -Corporation, see http://www.zope.com). In 2001, the Python Software -Foundation (PSF, see http://www.python.org/psf/) was formed, a -non-profit organization created specifically to own Python-related -Intellectual Property. Zope Corporation is a sponsoring member of -the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.2 2.1.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2.1 2.2 2002 PSF yes - 2.2.2 2.2.1 2002 PSF yes - 2.2.3 2.2.2 2003 PSF yes - 2.3 2.2.2 2002-2003 PSF yes - 2.3.1 2.3 2002-2003 PSF yes - 2.3.2 2.3.1 2002-2003 PSF yes - 2.3.3 2.3.2 2002-2003 PSF yes - 2.3.4 2.3.3 2004 PSF yes - 2.3.5 2.3.4 2005 PSF yes - 2.4 2.3 2004 PSF yes - 2.4.1 2.4 2005 PSF yes - 2.4.2 2.4.1 2005 PSF yes - 2.4.3 2.4.2 2006 PSF yes - 2.4.4 2.4.3 2006 PSF yes - 2.5 2.4 2006 PSF yes - 2.5.1 2.5 2007 PSF yes - 2.5.2 2.5.1 2008 PSF yes - 2.5.3 2.5.2 2008 PSF yes - 2.6 2.5 2008 PSF yes - 2.6.1 2.6 2008 PSF yes - 2.6.2 2.6.1 2009 PSF yes - 2.6.3 2.6.2 2009 PSF yes - 2.6.4 2.6.3 2009 PSF yes - 2.6.5 2.6.4 2010 PSF yes - 3.0 2.6 2008 PSF yes - 3.0.1 3.0 2009 PSF yes - 3.1 3.0.1 2009 PSF yes - 3.1.1 3.1 2009 PSF yes - 3.1.2 3.1 2010 PSF yes - 3.2 3.1 2010 PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -Python Software Foundation; All Rights Reserved" are retained in Python alone or -in any derivative version prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE deleted file mode 100644 index e06d20818..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/distro/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md deleted file mode 100644 index 256ba90cd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +++ /dev/null @@ -1,31 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2013-2025, Kim Davies and contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING deleted file mode 100644 index f067af3aa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (C) 2008-2011 INADA Naoki <songofacandy@gmail.com> - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE deleted file mode 100644 index 6f62d44e4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made -under the terms of *both* these licenses. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE deleted file mode 100644 index f433b1a53..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD deleted file mode 100644 index 42ce7b75c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) Donald Stufft and individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE deleted file mode 100644 index 1bb5a4435..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE deleted file mode 100644 index f35fed919..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2010-202x The platformdirs developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE deleted file mode 100644 index 446a1a805..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2006-2022 by the respective authors (see AUTHORS file). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE deleted file mode 100644 index b0ae9dbc2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Thomas Kluyver - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE deleted file mode 100644 index 67db85882..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/requests/LICENSE +++ /dev/null @@ -1,175 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE deleted file mode 100644 index b9077766e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2018, Tzu-ping Chung <uranusjr@gmail.com> - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE deleted file mode 100644 index 441550556..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/rich/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020 Will McGugan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE deleted file mode 100644 index e859590f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Taneli Hukkinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE deleted file mode 100644 index e859590f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Taneli Hukkinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE deleted file mode 100644 index 7ec568c11..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2022 Seth Michael Larson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt deleted file mode 100644 index 429a1767e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip-26.0.1.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2008-2020 Andrey Petrov and contributors (see CONTRIBUTORS.txt) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/__init__.py deleted file mode 100644 index 978b41292..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from __future__ import annotations - -__version__ = "26.0.1" - - -def main(args: list[str] | None = None) -> int: - """This is an internal API only meant for use by pip's own console scripts. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/__main__.py deleted file mode 100644 index 599132611..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/__main__.py +++ /dev/null @@ -1,24 +0,0 @@ -import os -import sys - -# Remove '' and current working directory from the first entry -# of sys.path, if present to avoid using current directory -# in pip commands check, freeze, install, list and show, -# when invoked as python -m pip <command> -if sys.path[0] in ("", os.getcwd()): - sys.path.pop(0) - -# If we are running from a wheel, add the wheel to sys.path -# This allows the usage python pip-*.whl/pip install pip-*.whl -if __package__ == "": - # __file__ is pip-*.whl/pip/__main__.py - # first dirname call strips of '/__main__.py', second strips off '/pip' - # Resulting path is the name of the wheel itself - # Add that to sys.path so we can import pip - path = os.path.dirname(os.path.dirname(__file__)) - sys.path.insert(0, path) - -if __name__ == "__main__": - from pip._internal.cli.main import main as _main - - sys.exit(_main()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__pip-runner__.py b/Python314_4_x86_Template/Lib/site-packages/pip/__pip-runner__.py deleted file mode 100644 index d6be15783..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/__pip-runner__.py +++ /dev/null @@ -1,50 +0,0 @@ -"""Execute exactly this copy of pip, within a different environment. - -This file is named as it is, to ensure that this module can't be imported via -an import statement. -""" - -# /!\ This version compatibility check section must be Python 2 compatible. /!\ - -import sys - -# Copied from pyproject.toml -PYTHON_REQUIRES = (3, 9) - - -def version_str(version): # type: ignore - return ".".join(str(v) for v in version) - - -if sys.version_info[:2] < PYTHON_REQUIRES: - raise SystemExit( - "This version of pip does not support python {} (requires >={}).".format( - version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES) - ) - ) - -# From here on, we can use Python 3 features, but the syntax must remain -# Python 2 compatible. - -import runpy # noqa: E402 -from importlib.machinery import PathFinder # noqa: E402 -from os.path import dirname # noqa: E402 - -PIP_SOURCES_ROOT = dirname(dirname(__file__)) - - -class PipImportRedirectingFinder: - @classmethod - def find_spec(self, fullname, path=None, target=None): # type: ignore - if fullname != "pip": - return None - - spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target) - assert spec, (PIP_SOURCES_ROOT, fullname) - return spec - - -sys.meta_path.insert(0, PipImportRedirectingFinder()) - -assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module" -runpy.run_module("pip", run_name="__main__", alter_sys=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 20f065e787145fe2a1d9d91d8224a4024b474d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmYLH&1)1f6i;S9T6g;;ip39XRH!W4nXX-Gw@5)0u^^=mwHL>R>~7kPoy~+KW1Zq* z58gcJpP@(plX@Kx6fgExS)^BAwk<v;FTcFWdoTI@a%W<^g229g{Vm!Up<ixsW`z@g z2eSbBXbXjS6+Oik&!Et=URVx`(<m%Wqj)ODwh$I>q1woyORC|#%A`yzvm%jZzkF}e zpZDu)t_5<#SrG=bzykuHk2cYkxAY#N4#cjZ=eUbQ9C~3PECwDFE**NXEiW>?WA>+F zVeCs|^(*p@tR<4?WzB7>WnK`{esTTF+llTmYh1URdG=^IdSSRW5$kYWZ#L(ny+rRu zN++**+nT5yCuyg}44)HHSa8O&IOck;9<67#o5+QFgEr{frA4~Idn#s@Q`=L~Gtr8S zuzXIj_AcAuCQ?ELl)5UE`YOxEC_SZuQ>w?{IAs{-D!4v6MkDyjALkAxXO7(bd11I5 zz;869%K>Lj4H%`tbpZd>P@u*pz5(<#PKgDwy#0?GU111(OcJ1kYsq5raD9~|GR{bk zGieDhL{h^^D<g2|+lC~2lC(juB<94lwNTdhmC6&?#yTD0q=X_JZkdS9U1B&VU2BzD z4uTzFyJ^dBC%r&riUp1YVNA+RaKF)9@++XoDBaUcDXwc?J_8$kAnD{_erlnj&!yFw zN+4?VBwVuQX-Cx%8>jv((N&o8Vvh-_&jTD%=|CU-t)No#XZ6CT#~)S>ikI~`L~D4h zR?I7uZl~}%9RH5Ryh`aCcnfeJh`4Nh&N-KH(qQyKFX^N)U(pvK=6E&J;EoCy<L~I^ PkBLkD>T&r@x?$o!%WK>M diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index 37ed33095072ba0b6149af856a3a9f9f55517f68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmZ`%&rcIU6n^`oE&TxogCrseVoyX{1y)<s*bqIGgh*{fJ#0H!+7U*!-OcV0s9vbi zK;wZ155kG79{o==G{y`uA@L%&8vX%i+HTrIeaXJ}&Ad0?`}WOT9~uk+x9?y7kY@_O zZ?W*q*8%4T62La(AuBBaZAXbpIVq!hrQMi^8)My7R?b1j-(7oX60{DSmFGArjsuKC zf5uGEJJpSO(6}aH6Oi*|<>U*_@ubB8{ZwTJ+tt0EE9;}bZ)L#i=0z(1N9%BJhc?bb zPS)f$=4yjkrKR?&P|IhkE`-uy8sQl!(=$1bXA*Le?zFuA6Z|fst#8VACQ2VOU;_x1 z3{pmDN@A)&Q$tL)T&B1cm#MZv*O-45)52zvDYj*^FhaIbST|NNLM%`uPT447!Sa%r zV#`m;E_SHc5gEQSY7;w-NSR_@YsL#EiHkmtcqz=+>dsWWMd%ke7phq0;az>1leoH3 z#Lo2G+%0|6a@KX*v0mW<b@hU2Z4_4w7sp7MQ0`o6m?m~&(|V>t*R1mFw1zaamAr$V z;*xC|6eC))^+mFxyM*Fc=MP++OS|a}AZ}OK!2Oa{+%WM2XOt@uuf^TxuBk|pbOON> z2sI<126mFw<nH|Yd-a*R^Qp35`S|AB#b`r`{^Y52HNCS~U91nkTWSt~dZB);p^P*` z5E<G_)DnBCTIyitC~=rLN*$&?Cy%da$Kl)CkGzvh)usA;oi^0*Qzg9nx}jYDrD~^w W_HDYh{Necz_0rz}sAJ9um-P?0)xWR+ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-314.pyc deleted file mode 100644 index 515e4a26c229b536bf51b63a92d96e7436c17327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2393 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 XO^9zm?_KC!>AyYnHQRvWL9G7*t$|2~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__init__.py deleted file mode 100644 index 24d0baf0c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from __future__ import annotations - -from pip._internal.utils import _log - -# init_logging() must be called before any call to logging.getLogger() -# which happens at import of most modules. -_log.init_logging() - - -def main(args: list[str] | None = None) -> int: - """This is preserved for old console scripts that may still be referencing - it. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 6faecc696ecfbe60055505f5f6c0725a90bba362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmZuv&ubGw6rS1Lq#;dfYr*0V%(N9DXcJ3=Hbr_-qy;H;slB-EFxj0ZV>i3Y%*2}F zA)q%e;$NXh|C1_$u;4*Nu(wK(9`(((wHF^d?|pCH%)Hs}n;WAeMFjTo!%y)CBlO)Q zr)D1mJXizJM_b6nD`**OTsGKRv6gLZm(ixZRyf^q7N=1CBq<{|?>dvn%}t_kEW|qJ z+B2v!bYSWgoDQ=niZ#<BjufO04dd3T50^n^7;|92W$=Ii=%Wp^Wi7lyD1f;u=n-yX z7rT~gyH3r5gL4NKEK40GTWW7C6iPo)T5ggTWHpX>nwMO6Wt7??((g_G{B|rmOe@oE zI(>O>(R-}8R2~bsoNF|0dAqUP@e&z7<-S&)AI9CF$rPUzk<j3jW?{(X?3}mO)9pB# zpR3b4eZFv;uJcY3GR>*(B;G^O^pwziHevn_YjNczBB@ch1(y*EYZRc+lva~oTB7uX z6i%refr}ZH)Mapebc71{(l6uo&y^2Nd^ew^11O`6I0K9s1!3d{R{@+Un1F&CcnXND zpHK|6S$l8S+d>ie63KyqXFMQ44T-~m_@GT3a-w`G60L}CGfg_IN0b&}NSd5TzRe|% zd=a&ZLRX8$2e6d|fiSwVkOW*a5vrR+aZcJ=Cu*@)YYE-%HmiQzsU^LH)eIv-sV-Nw zJN3pwwFvSQ=&oc*!ezxu%dnvOkFshPnyV_0wCp7@5UJ!C{Ab0ILl82o%u~2dWC=p* zbeM?bd4L(4;{f{TcM0Vh--ajN+<(2a?_89lFk8W^m3&&Hbh`^r#YkX?Oeg-+T{@;x z%A|vL+k)TEI!MzZJM6f3;ch1mx*=bZ7ocERS2N%aZH)0(H2nizJ1iia`+~+lq4CdX L;wXPAa(2jH9Gdd8 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-314.pyc deleted file mode 100644 index 4a3291d4cc01f82569d583d3719e6212a5865cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29873 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 YF?j6p<e%y5HErp-E&ssb$wuV=0&Apx9RL6T diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-314.pyc deleted file mode 100644 index 2f5a64a9b17c82875d07e13760bdfda00e1e95c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15168 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-314.pyc deleted file mode 100644 index a89d6b17294b3234a9e04db1ba0849c208450ba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22130 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-314.pyc deleted file mode 100644 index ecbbed3a083ea86fd241774ecf2a54101caf3537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52087 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 G|Nj9RF%oG2 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/main.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 02b96096f9abc9f0b53dd9a3cfcac0c9ab8521ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmYLH&ubJh6i#M;P`9mCdno?E#tOosow0P$ZjoLTQIMiT?ZvS}b|&48&CG<ntaXdv z9=v%G{|Y_&pVaGs2k~NWl|_2>W!vgw^4^zB-h0XS<>uMx20{Dw^_L7OAwS*Z)GEh- zjusFM$rcIeWAcbvI#0q{SeYYXb&jYRMXeWl*GaQ};1Zg&oaA|4SZ-yJ!+L^ci5t$U zIIt`oF$6=hNw&O|_k^Ulc7;5nJsQ%`3oBtYa0P1z9&RhE+;m}YMoF+Qz?zrrEn6>g zQPz#HeUq0JncFX}Z+*Kk8MolNEtK!>uSU;77>IZ(%u>63JK8PGPNYroN+cGdL>2wC z!$B;{Tv~Ksxl+O`E=5lVwpZlKORcySzgf8xZ-`7QZbfV}9X*kq2&5H@nkPHFD<INR z2Qi*Pn4GI1<1+X4pqz^16Cy+$n<+e$yFOe-HzY@7f?oRV-2S=wLl-|UkEbL2O~#}- z;LPcOqc*yV;J*$Ub=aiWki^yry-1n2_i3Xif#Ii(z}vqTDMMOVp;DHh9)%JN5+k(* zW_#SSj1L%CsTAu7X2iBIB2Q%AZAj}k8V@m*r>S&Wa>Y_%xm0kAfe@@`t%lVg=t|q` zcl@Nt0zJ??aBN6`zJTCvtG(hkP@0K&*Kn<cX?o>6Zt(xn<@d2U_#(GvpbI1s%sISg z(=&ApV+`&Y++b!BLs@n7n)3+9Y&tL`f2K&S{bO?W<AV=t`_+qP8dsZiy;&(6alGBf uXW}GqM2<7f8He1a<C+uqvLfv(v1Vp*&9Mm=&>dDNrQgZIQT<e_an4^t8P?GN diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-314.pyc deleted file mode 100644 index 0b1f5a6799a5f55576cfa6bbd7f667921603b2cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4694 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-314.pyc deleted file mode 100644 index effc141e54fe1d0a507b85e35e8c0a2bdf4312a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11805 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-314.pyc deleted file mode 100644 index 1dc00e0675678a92f7b85ad2e560d195ef85a1c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12146 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 V0S`yvSmfaW1_FSOW*EgI_<!?9;C}!B diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/build_env.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/build_env.py deleted file mode 100644 index 1a42a9d41..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/build_env.py +++ /dev/null @@ -1,606 +0,0 @@ -"""Build Environment used for isolation during sdist building""" - -from __future__ import annotations - -import logging -import os -import pathlib -import site -import sys -import textwrap -from collections import OrderedDict -from collections.abc import Iterable, Sequence -from contextlib import AbstractContextManager as ContextManager -from contextlib import nullcontext -from io import StringIO -from types import TracebackType -from typing import TYPE_CHECKING, Protocol, TypedDict - -from pip._vendor.packaging.version import Version - -from pip import __file__ as pip_location -from pip._internal.cli.spinners import open_rich_spinner, open_spinner -from pip._internal.exceptions import ( - BuildDependencyInstallError, - DiagnosticPipError, - InstallWheelBuildError, - PipError, -) -from pip._internal.locations import get_platlib, get_purelib, get_scheme -from pip._internal.metadata import get_default_environment, get_environment -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.logging import VERBOSE, capture_logging -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.subprocess import call_subprocess -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds - -if TYPE_CHECKING: - from pip._internal.cache import WheelCache - from pip._internal.index.package_finder import PackageFinder - from pip._internal.operations.build.build_tracker import BuildTracker - from pip._internal.req.req_install import InstallRequirement - from pip._internal.resolution.base import BaseResolver - - class ExtraEnviron(TypedDict, total=False): - extra_environ: dict[str, str] - - -logger = logging.getLogger(__name__) - - -def _dedup(a: str, b: str) -> tuple[str] | tuple[str, str]: - return (a, b) if a != b else (a,) - - -class _Prefix: - def __init__(self, path: str) -> None: - self.path = path - self.setup = False - scheme = get_scheme("", prefix=path) - self.bin_dir = scheme.scripts - self.lib_dirs = _dedup(scheme.purelib, scheme.platlib) - - -def get_runnable_pip() -> str: - """Get a file to pass to a Python executable, to run the currently-running pip. - - This is used to run a pip subprocess, for installing requirements into the build - environment. - """ - source = pathlib.Path(pip_location).resolve().parent - - if not source.is_dir(): - # This would happen if someone is using pip from inside a zip file. In that - # case, we can use that directly. - return str(source) - - return os.fsdecode(source / "__pip-runner__.py") - - -def _get_system_sitepackages() -> set[str]: - """Get system site packages - - Usually from site.getsitepackages, - but fallback on `get_purelib()/get_platlib()` if unavailable - (e.g. in a virtualenv created by virtualenv<20) - - Returns normalized set of strings. - """ - if hasattr(site, "getsitepackages"): - system_sites = site.getsitepackages() - else: - # virtualenv < 20 overwrites site.py without getsitepackages - # fallback on get_purelib/get_platlib. - # this is known to miss things, but shouldn't in the cases - # where getsitepackages() has been removed (inside a virtualenv) - system_sites = [get_purelib(), get_platlib()] - return {os.path.normcase(path) for path in system_sites} - - -class BuildEnvironmentInstaller(Protocol): - """ - Interface for installing build dependencies into an isolated build - environment. - """ - - def install( - self, - requirements: Iterable[str], - prefix: _Prefix, - *, - kind: str, - for_req: InstallRequirement | None, - ) -> None: ... - - -class SubprocessBuildEnvironmentInstaller: - """ - Install build dependencies by calling pip in a subprocess. - """ - - def __init__( - self, - finder: PackageFinder, - build_constraints: list[str] | None = None, - build_constraint_feature_enabled: bool = False, - ) -> None: - self.finder = finder - self._build_constraints = build_constraints or [] - self._build_constraint_feature_enabled = build_constraint_feature_enabled - - def _deprecation_constraint_check(self) -> None: - """ - Check for deprecation warning: PIP_CONSTRAINT affecting build environments. - - This warns when build-constraint feature is NOT enabled and PIP_CONSTRAINT - is not empty. - """ - if self._build_constraint_feature_enabled or self._build_constraints: - return - - pip_constraint = os.environ.get("PIP_CONSTRAINT") - if not pip_constraint or not pip_constraint.strip(): - return - - deprecated( - reason=( - "Setting PIP_CONSTRAINT will not affect " - "build constraints in the future," - ), - replacement=( - "to specify build constraints using --build-constraint or " - "PIP_BUILD_CONSTRAINT. To disable this warning without " - "any build constraints set --use-feature=build-constraint or " - 'PIP_USE_FEATURE="build-constraint"' - ), - gone_in="26.2", - issue=None, - ) - - def install( - self, - requirements: Iterable[str], - prefix: _Prefix, - *, - kind: str, - for_req: InstallRequirement | None, - ) -> None: - self._deprecation_constraint_check() - - finder = self.finder - args: list[str] = [ - sys.executable, - get_runnable_pip(), - "install", - "--ignore-installed", - "--no-user", - "--prefix", - prefix.path, - "--no-warn-script-location", - "--disable-pip-version-check", - # As the build environment is ephemeral, it's wasteful to - # pre-compile everything, especially as not every Python - # module will be used/compiled in most cases. - "--no-compile", - # The prefix specified two lines above, thus - # target from config file or env var should be ignored - "--target", - "", - ] - if logger.getEffectiveLevel() <= logging.DEBUG: - args.append("-vv") - elif logger.getEffectiveLevel() <= VERBOSE: - args.append("-v") - for format_control in ("no_binary", "only_binary"): - formats = getattr(finder.format_control, format_control) - args.extend( - ( - "--" + format_control.replace("_", "-"), - ",".join(sorted(formats or {":none:"})), - ) - ) - - if finder.release_control is not None: - # Use ordered args to preserve the user's original command-line order - # This is important because later flags can override earlier ones - for attr_name, value in finder.release_control.get_ordered_args(): - args.extend(("--" + attr_name.replace("_", "-"), value)) - - index_urls = finder.index_urls - if index_urls: - args.extend(["-i", index_urls[0]]) - for extra_index in index_urls[1:]: - args.extend(["--extra-index-url", extra_index]) - else: - args.append("--no-index") - for link in finder.find_links: - args.extend(["--find-links", link]) - - if finder.proxy: - args.extend(["--proxy", finder.proxy]) - for host in finder.trusted_hosts: - args.extend(["--trusted-host", host]) - if finder.custom_cert: - args.extend(["--cert", finder.custom_cert]) - if finder.client_cert: - args.extend(["--client-cert", finder.client_cert]) - if finder.prefer_binary: - args.append("--prefer-binary") - - # Handle build constraints - if self._build_constraint_feature_enabled: - args.extend(["--use-feature", "build-constraint"]) - - if self._build_constraints: - # Build constraints must be passed as both constraints - # and build constraints, so that nested builds receive - # build constraints - for constraint_file in self._build_constraints: - args.extend(["--constraint", constraint_file]) - args.extend(["--build-constraint", constraint_file]) - - extra_environ: ExtraEnviron = {} - if self._build_constraint_feature_enabled and not self._build_constraints: - # If there are no build constraints but the build constraints - # feature is enabled then we must ignore regular constraints - # in the isolated build environment - extra_environ = {"extra_environ": {"_PIP_IN_BUILD_IGNORE_CONSTRAINTS": "1"}} - - if finder.uploaded_prior_to: - args.extend(["--uploaded-prior-to", finder.uploaded_prior_to.isoformat()]) - args.append("--") - args.extend(requirements) - - identify_requirement = ( - f" for {for_req.name}" if for_req and for_req.name else "" - ) - with open_spinner(f"Installing {kind}") as spinner: - call_subprocess( - args, - command_desc=f"installing {kind}{identify_requirement}", - spinner=spinner, - **extra_environ, - ) - - -class InprocessBuildEnvironmentInstaller: - """ - Build dependency installer that runs in the same pip process. - - This contains a stripped down version of the install command with - only the logic necessary for installing build dependencies. The - finder, session, build tracker, and wheel cache are reused, but new - instances of everything else are created as needed. - - Options are inherited from the parent install command unless - they don't make sense for build dependencies (in which case, they - are hard-coded, see comments below). - """ - - def __init__( - self, - *, - finder: PackageFinder, - build_tracker: BuildTracker, - wheel_cache: WheelCache, - build_constraints: Sequence[InstallRequirement] = (), - verbosity: int = 0, - ) -> None: - from pip._internal.operations.prepare import RequirementPreparer - - self._finder = finder - self._build_constraints = build_constraints - self._wheel_cache = wheel_cache - self._level = 0 - - build_dir = TempDirectory(kind="build-env-install", globally_managed=True) - self._preparer = RequirementPreparer( - build_isolation_installer=self, - # Inherited options or state. - finder=finder, - session=finder._link_collector.session, - build_dir=build_dir.path, - build_tracker=build_tracker, - verbosity=verbosity, - # This is irrelevant as it only applies to editable requirements. - src_dir="", - # Hard-coded options (that should NOT be inherited). - download_dir=None, - build_isolation=True, - check_build_deps=False, - progress_bar="off", - # TODO: hash-checking should be extended to build deps, but that is - # deferred for later as it'd be a breaking change. - require_hashes=False, - use_user_site=False, - lazy_wheel=False, - legacy_resolver=False, - ) - - def install( - self, - requirements: Iterable[str], - prefix: _Prefix, - *, - kind: str, - for_req: InstallRequirement | None, - ) -> None: - """Install entrypoint. Manages output capturing and error handling.""" - capture_logs = not logger.isEnabledFor(VERBOSE) and self._level == 0 - if capture_logs: - # Hide the logs from the installation of build dependencies. - # They will be shown only if an error occurs. - capture_ctx: ContextManager[StringIO] = capture_logging() - spinner: ContextManager[None] = open_rich_spinner(f"Installing {kind}") - else: - # Otherwise, pass-through all logs (with a header). - capture_ctx, spinner = nullcontext(StringIO()), nullcontext() - logger.info("Installing %s ...", kind) - - try: - self._level += 1 - with spinner, capture_ctx as stream: - self._install_impl(requirements, prefix) - - except DiagnosticPipError as exc: - # Format similar to a nested subprocess error, where the - # causing error is shown first, followed by the build error. - logger.info(textwrap.dedent(stream.getvalue())) - logger.error("%s", exc, extra={"rich": True}) - logger.info("") - raise BuildDependencyInstallError( - for_req, requirements, cause=exc, log_lines=None - ) - - except Exception as exc: - logs: list[str] | None = textwrap.dedent(stream.getvalue()).splitlines() - if not capture_logs: - # If logs aren't being captured, then display the error inline - # with the rest of the logs. - logs = None - if isinstance(exc, PipError): - logger.error("%s", exc) - else: - logger.exception("pip crashed unexpectedly") - raise BuildDependencyInstallError( - for_req, requirements, cause=exc, log_lines=logs - ) - - finally: - self._level -= 1 - - def _install_impl(self, requirements: Iterable[str], prefix: _Prefix) -> None: - """Core build dependency install logic.""" - from pip._internal.commands.install import installed_packages_summary - from pip._internal.req import install_given_reqs - from pip._internal.req.constructors import install_req_from_line - from pip._internal.wheel_builder import build - - ireqs = [install_req_from_line(req, user_supplied=True) for req in requirements] - ireqs.extend(self._build_constraints) - - resolver = self._make_resolver() - resolved_set = resolver.resolve(ireqs, check_supported_wheels=True) - self._preparer.prepare_linked_requirements_more( - resolved_set.requirements.values() - ) - - reqs_to_build = [ - r for r in resolved_set.requirements_to_install if not r.is_wheel - ] - _, build_failures = build(reqs_to_build, self._wheel_cache, verify=True) - if build_failures: - raise InstallWheelBuildError(build_failures) - - installed = install_given_reqs( - resolver.get_installation_order(resolved_set), - prefix=prefix.path, - # Hard-coded options (that should NOT be inherited). - root=None, - home=None, - warn_script_location=False, - use_user_site=False, - # As the build environment is ephemeral, it's wasteful to - # pre-compile everything since not all modules will be used. - pycompile=False, - progress_bar="off", - ) - - env = get_environment(list(prefix.lib_dirs)) - if summary := installed_packages_summary(installed, env): - logger.info(summary) - - def _make_resolver(self) -> BaseResolver: - """Create a new resolver for one time use.""" - # Legacy installer never used the legacy resolver so create a - # resolvelib resolver directly. Yuck. - from pip._internal.req.constructors import install_req_from_req_string - from pip._internal.resolution.resolvelib.resolver import Resolver - - return Resolver( - make_install_req=install_req_from_req_string, - # Inherited state. - preparer=self._preparer, - finder=self._finder, - wheel_cache=self._wheel_cache, - # Hard-coded options (that should NOT be inherited). - ignore_requires_python=False, - use_user_site=False, - ignore_dependencies=False, - ignore_installed=True, - force_reinstall=False, - upgrade_strategy="to-satisfy-only", - py_version_info=None, - ) - - -class BuildEnvironment: - """Creates and manages an isolated environment to install build deps""" - - def __init__(self, installer: BuildEnvironmentInstaller) -> None: - self.installer = installer - temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True) - - self._prefixes = OrderedDict( - (name, _Prefix(os.path.join(temp_dir.path, name))) - for name in ("normal", "overlay") - ) - - self._bin_dirs: list[str] = [] - self._lib_dirs: list[str] = [] - for prefix in reversed(list(self._prefixes.values())): - self._bin_dirs.append(prefix.bin_dir) - self._lib_dirs.extend(prefix.lib_dirs) - - # Customize site to: - # - ensure .pth files are honored - # - prevent access to system site packages - system_sites = _get_system_sitepackages() - - self._site_dir = os.path.join(temp_dir.path, "site") - if not os.path.exists(self._site_dir): - os.mkdir(self._site_dir) - with open( - os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8" - ) as fp: - fp.write( - textwrap.dedent( - """ - import os, site, sys - - # First, drop system-sites related paths. - original_sys_path = sys.path[:] - known_paths = set() - for path in {system_sites!r}: - site.addsitedir(path, known_paths=known_paths) - system_paths = set( - os.path.normcase(path) - for path in sys.path[len(original_sys_path):] - ) - original_sys_path = [ - path for path in original_sys_path - if os.path.normcase(path) not in system_paths - ] - sys.path = original_sys_path - - # Second, add lib directories. - # ensuring .pth file are processed. - for path in {lib_dirs!r}: - assert not path in sys.path - site.addsitedir(path) - """ - ).format(system_sites=system_sites, lib_dirs=self._lib_dirs) - ) - - def __enter__(self) -> None: - self._save_env = { - name: os.environ.get(name, None) - for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH") - } - - path = self._bin_dirs[:] - old_path = self._save_env["PATH"] - if old_path: - path.extend(old_path.split(os.pathsep)) - - pythonpath = [self._site_dir] - - os.environ.update( - { - "PATH": os.pathsep.join(path), - "PYTHONNOUSERSITE": "1", - "PYTHONPATH": os.pathsep.join(pythonpath), - } - ) - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> None: - for varname, old_value in self._save_env.items(): - if old_value is None: - os.environ.pop(varname, None) - else: - os.environ[varname] = old_value - - def check_requirements( - self, reqs: Iterable[str] - ) -> tuple[set[tuple[str, str]], set[str]]: - """Return 2 sets: - - conflicting requirements: set of (installed, wanted) reqs tuples - - missing requirements: set of reqs - """ - missing = set() - conflicting = set() - if reqs: - env = ( - get_environment(self._lib_dirs) - if hasattr(self, "_lib_dirs") - else get_default_environment() - ) - for req_str in reqs: - req = get_requirement(req_str) - # We're explicitly evaluating with an empty extra value, since build - # environments are not provided any mechanism to select specific extras. - if req.marker is not None and not req.marker.evaluate({"extra": ""}): - continue - dist = env.get_distribution(req.name) - if not dist: - missing.add(req_str) - continue - if isinstance(dist.version, Version): - installed_req_str = f"{req.name}=={dist.version}" - else: - installed_req_str = f"{req.name}==={dist.version}" - if not req.specifier.contains(dist.version, prereleases=True): - conflicting.add((installed_req_str, req_str)) - # FIXME: Consider direct URL? - return conflicting, missing - - def install_requirements( - self, - requirements: Iterable[str], - prefix_as_string: str, - *, - kind: str, - for_req: InstallRequirement | None = None, - ) -> None: - prefix = self._prefixes[prefix_as_string] - assert not prefix.setup - prefix.setup = True - if not requirements: - return - self.installer.install(requirements, prefix, kind=kind, for_req=for_req) - - -class NoOpBuildEnvironment(BuildEnvironment): - """A no-op drop-in replacement for BuildEnvironment""" - - def __init__(self) -> None: - pass - - def __enter__(self) -> None: - pass - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> None: - pass - - def cleanup(self) -> None: - pass - - def install_requirements( - self, - requirements: Iterable[str], - prefix_as_string: str, - *, - kind: str, - for_req: InstallRequirement | None = None, - ) -> None: - raise NotImplementedError() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cache.py deleted file mode 100644 index 0bcb69754..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cache.py +++ /dev/null @@ -1,291 +0,0 @@ -"""Cache Management""" - -from __future__ import annotations - -import hashlib -import json -import logging -import os -from pathlib import Path -from typing import Any - -from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import InvalidWheelFilename -from pip._internal.models.direct_url import DirectUrl -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds -from pip._internal.utils.urls import path_to_url - -logger = logging.getLogger(__name__) - -ORIGIN_JSON_NAME = "origin.json" - - -def _hash_dict(d: dict[str, str]) -> str: - """Return a stable sha224 of a dictionary.""" - s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True) - return hashlib.sha224(s.encode("ascii")).hexdigest() - - -class Cache: - """An abstract class - provides cache directories for data from links - - :param cache_dir: The root of the cache. - """ - - def __init__(self, cache_dir: str) -> None: - super().__init__() - assert not cache_dir or os.path.isabs(cache_dir) - self.cache_dir = cache_dir or None - - def _get_cache_path_parts(self, link: Link) -> list[str]: - """Get parts of part that must be os.path.joined with cache_dir""" - - # We want to generate an url to use as our cache key, we don't want to - # just reuse the URL because it might have other items in the fragment - # and we don't care about those. - key_parts = {"url": link.url_without_fragment} - if link.hash_name is not None and link.hash is not None: - key_parts[link.hash_name] = link.hash - if link.subdirectory_fragment: - key_parts["subdirectory"] = link.subdirectory_fragment - - # Include interpreter name, major and minor version in cache key - # to cope with ill-behaved sdists that build a different wheel - # depending on the python version their setup.py is being run on, - # and don't encode the difference in compatibility tags. - # https://github.com/pypa/pip/issues/7296 - key_parts["interpreter_name"] = interpreter_name() - key_parts["interpreter_version"] = interpreter_version() - - # Encode our key url with sha224, we'll use this because it has similar - # security properties to sha256, but with a shorter total output (and - # thus less secure). However the differences don't make a lot of - # difference for our use case here. - hashed = _hash_dict(key_parts) - - # We want to nest the directories some to prevent having a ton of top - # level directories where we might run out of sub directories on some - # FS. - parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] - - return parts - - def _get_candidates(self, link: Link, canonical_package_name: str) -> list[Any]: - can_not_cache = not self.cache_dir or not canonical_package_name or not link - if can_not_cache: - return [] - - path = self.get_path_for_link(link) - if os.path.isdir(path): - return [(candidate, path) for candidate in os.listdir(path)] - return [] - - def get_path_for_link(self, link: Link) -> str: - """Return a directory to store cached items in for link.""" - raise NotImplementedError() - - def get( - self, - link: Link, - package_name: str | None, - supported_tags: list[Tag], - ) -> Link: - """Returns a link to a cached item if it exists, otherwise returns the - passed link. - """ - raise NotImplementedError() - - -class SimpleWheelCache(Cache): - """A cache of wheels for future installs.""" - - def __init__(self, cache_dir: str) -> None: - super().__init__(cache_dir) - - def get_path_for_link(self, link: Link) -> str: - """Return a directory to store cached wheels for link - - Because there are M wheels for any one sdist, we provide a directory - to cache them in, and then consult that directory when looking up - cache hits. - - We only insert things into the cache if they have plausible version - numbers, so that we don't contaminate the cache with things that were - not unique. E.g. ./package might have dozens of installs done for it - and build a version of 0.0...and if we built and cached a wheel, we'd - end up using the same wheel even if the source has been edited. - - :param link: The link of the sdist for which this will cache wheels. - """ - parts = self._get_cache_path_parts(link) - assert self.cache_dir - # Store wheels within the root cache_dir - return os.path.join(self.cache_dir, "wheels", *parts) - - def get( - self, - link: Link, - package_name: str | None, - supported_tags: list[Tag], - ) -> Link: - candidates = [] - - if not package_name: - return link - - canonical_package_name = canonicalize_name(package_name) - for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name): - try: - wheel = Wheel(wheel_name) - except InvalidWheelFilename: - continue - if wheel.name != canonical_package_name: - logger.debug( - "Ignoring cached wheel %s for %s as it " - "does not match the expected distribution name %s.", - wheel_name, - link, - package_name, - ) - continue - if not wheel.supported(supported_tags): - # Built for a different python/arch/etc - continue - candidates.append( - ( - wheel.support_index_min(supported_tags), - wheel_name, - wheel_dir, - ) - ) - - if not candidates: - return link - - _, wheel_name, wheel_dir = min(candidates) - return Link(path_to_url(os.path.join(wheel_dir, wheel_name))) - - -class EphemWheelCache(SimpleWheelCache): - """A SimpleWheelCache that creates it's own temporary cache directory""" - - def __init__(self) -> None: - self._temp_dir = TempDirectory( - kind=tempdir_kinds.EPHEM_WHEEL_CACHE, - globally_managed=True, - ) - - super().__init__(self._temp_dir.path) - - -class CacheEntry: - def __init__( - self, - link: Link, - persistent: bool, - ): - self.link = link - self.persistent = persistent - self.origin: DirectUrl | None = None - origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME - if origin_direct_url_path.exists(): - try: - self.origin = DirectUrl.from_json( - origin_direct_url_path.read_text(encoding="utf-8") - ) - except Exception as e: - logger.warning( - "Ignoring invalid cache entry origin file %s for %s (%s)", - origin_direct_url_path, - link.filename, - e, - ) - - -class WheelCache(Cache): - """Wraps EphemWheelCache and SimpleWheelCache into a single Cache - - This Cache allows for gracefully degradation, using the ephem wheel cache - when a certain link is not found in the simple wheel cache first. - """ - - def __init__(self, cache_dir: str) -> None: - super().__init__(cache_dir) - self._wheel_cache = SimpleWheelCache(cache_dir) - self._ephem_cache = EphemWheelCache() - - def get_path_for_link(self, link: Link) -> str: - return self._wheel_cache.get_path_for_link(link) - - def get_ephem_path_for_link(self, link: Link) -> str: - return self._ephem_cache.get_path_for_link(link) - - def get( - self, - link: Link, - package_name: str | None, - supported_tags: list[Tag], - ) -> Link: - cache_entry = self.get_cache_entry(link, package_name, supported_tags) - if cache_entry is None: - return link - return cache_entry.link - - def get_cache_entry( - self, - link: Link, - package_name: str | None, - supported_tags: list[Tag], - ) -> CacheEntry | None: - """Returns a CacheEntry with a link to a cached item if it exists or - None. The cache entry indicates if the item was found in the persistent - or ephemeral cache. - """ - retval = self._wheel_cache.get( - link=link, - package_name=package_name, - supported_tags=supported_tags, - ) - if retval is not link: - return CacheEntry(retval, persistent=True) - - retval = self._ephem_cache.get( - link=link, - package_name=package_name, - supported_tags=supported_tags, - ) - if retval is not link: - return CacheEntry(retval, persistent=False) - - return None - - @staticmethod - def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None: - origin_path = Path(cache_dir) / ORIGIN_JSON_NAME - if origin_path.exists(): - try: - origin = DirectUrl.from_json(origin_path.read_text(encoding="utf-8")) - except Exception as e: - logger.warning( - "Could not read origin file %s in cache entry (%s). " - "Will attempt to overwrite it.", - origin_path, - e, - ) - else: - # TODO: use DirectUrl.equivalent when - # https://github.com/pypa/pip/pull/10564 is merged. - if origin.url != download_info.url: - logger.warning( - "Origin URL %s in cache entry %s does not match download URL " - "%s. This is likely a pip bug or a cache corruption issue. " - "Will overwrite it with the new value.", - origin.url, - cache_dir, - download_info.url, - ) - origin_path.write_text(download_info.to_json(), encoding="utf-8") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__init__.py deleted file mode 100644 index 5fcddf5d8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Subpackage containing all of pip's command line interface related code""" - -# This file intentionally does not import submodules diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 3165c8c8f156ae0dee683adf09f165e475be9ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmXv~u}TCn5Y4LSA?P;*EaZ@NT|C4Su@S5ekyE?CkWJ>!c-bT*S@f&~3%|wEPqAG~ z8%yDSz^t6Fcr$Ni;5}w<dux*<e7t|FmsGzx@sDiTEV`3tGA5CXvmMf3dAhi6D#yi) zPmv01B3DM4Ddk#IJE2aw-H_&W&5fj58KlZY^b;<Sdel6kOlygk{jA*pkX8V^kws_M zzMh}3+kieWF4336;Q@QFe#V@)_b6guLfb}GJYb$oW1<j~FZ#S>SMzvh&0#r!0X!Zb z!41}~bAwnrHc}M}Dq_A29$3m*z+W=Mbs@AWAW0Pg_T9Ygoz_-18qfTC%GLcM^b-B7 MW?A-0Mt&`cU-^h*UH||9 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-314.pyc deleted file mode 100644 index 2b248ae3871f8629e1c09eb33a3d7ea8a02cda6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10510 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 AKmY&$ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-314.pyc deleted file mode 100644 index 3f459cd525fe80af261391d1b1f216fcf80bebda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13020 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-314.pyc deleted file mode 100644 index be03659109e2981febf149541db4e802b7d6e382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41218 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-314.pyc deleted file mode 100644 index f4150e37ce80ef827aa4166229c04dc231e3eccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2524 zcmah~O>omz5PnaxY{?`zAqkX_kT`#h`H4vh6bjS9fl_CNdZ;iy6oXI{5maQ!eR`(J z&C}^j(@W2Edgz&BhfA+H_LdBRFe*&x^ipnNd~iGMp}Uft8YV5z(rVwnee1Wo-|joS zyE92(tpD)4H7yeI8%|n7ikQYHz|_eNqS85%r<@KUFU$#fk&F2lkL4vU1u}6io=@<^ z5V@X66E&tvYW!Uxw8G^+0<y$DqRKNZnW8GAB$IrBD)*_cd}ul*)49tsqQ5sc?{TIZ z{JiUMbBTYXJNlx@eC2~Bi(lcoamU|ngiDohDMS54ak*-ibmj|Mu?Ta;aPR8O(j9Ju z#|SBS8jOYwAD!s5POcM9Rl<cEG8gv}mzL;ps?vSLmP-UU0Xe&i$F57kiimSH2DED? zGREV<iWIEGafK(;1eZ&cD<yJ<@+9~w`#tB~3LJQ$<(9QH=NJ@h;EMx;g9mIJ1acOR zRw6fqQ(qFY0MY^SF})23Q-v%AbK(os_T$XtHRcrVlZ@cUZ@H|ZbH7v53|sfS1<T-? z=Aq(9-T&tNd*!R1$-J_@V6y4cr;n9CciEkCmARjq2KUN_?ba6Nb<aF%ITi=vaox5} zc67RYd70mKo#WFp+Kjez>ZDdQD^*+Prp7DP@+E7&>{;AAT7}d=ro3|1s%A9{lE)m~ z&KkCrHA2_5C~s5MWxqqybjNWyn$i5>9fC8}uAzVzUN4Y8>ZD0TDf1G^y|Lia067U_ zi3|>mBfN6sGB6m+GD?GSg_g)ofOso?Lqvs0I}tPqDJNQ*Ee%+WwPY$rU$|JvNWSFN zs(?#b179tOwBH4cR?&e(ezG`hgM75hAW<>Tv~T%Jl%^;}6Lr=D+H5~=8Q3`-;r|4o z7zQ;6#Z$TS>%_YJ)`r~wWO#ffwjmEb9h~^?+Dh!P+|Txc(kl>)!a^ETu<~CJyF#x) zl^^K`m1u;JW4mF>Qb00dp-^CGEF-XPl<ol%AuV(RQ^op#puUH;g2c(vp_c^6x7OO^ zsYeG-2a|u#32MQ>6pUi}Hh>u+L(qjv1XKC?csmkAB|@M?FqzwG2XNnZYPZEul^U%H zHBoDa0bL?>=y6bF@S8#RV8C2xw}=23CWlGupBKUU0I`H2G6=f(yR`p|I7loy3_FW$ zXR$~qKOtH)BNhu6?+XkA!wvw+P&NP`51YY65JJDB9X2~xNV^7R$GZyT1w`w4&%Vu` zNqE-aktf$ulh2380(fi*G3C&c?!L|LQFtD9kN(`%*A&T~v8^~6KeTe;aYwqDfGI5g z6^R~or2qEb0n1+u<R<C&y}1GMK*}l7k1}wpL;>NdvMaY=S?vuZ14?dOTpbrd{tEiA zh%l;+lR*9teSkpPjz3jENmjtd7ogDZiYiQl_I1~Sh8E&dU{KhEVTHUInOJGwIFJCD zqBKjfnatAlsSB&>qpAE>F#Aajr6EY$p@go$D>rTe^Co~Uf+qBE0O-zuyo?8bZItLt zbT@$Gv;e+u!^Q73vA?z&4LFPFVdzazh7%!%7^2iq@6=6R*&l@B2<X<ylT^=UY7Cw= zcx0r{QIcLyr8iUA^;CB4*tv(P+?t#VBEr(JE3*r`prco?l_xc=;x5!|<e|xbR@3ch zC8cS%Eaq|Ba!kk7w4m29taUbmBsgpz^h3B5EJM>dXV!d;n;ux|ZoAYB)3!m>y63_v zgkTVjY<Hq_=fY0Zfl?$gyxs{Qe|`miHU+pp8hD9pB}u%uDL_|hh`?<j*X%_k;6*b_ zLmY(OqMbq}>8A`A?nZ-KuH#MV^9Dm~`^gBEwlyCD5&M7OpdaVURm)jqc!&U>!I4-O zPO(jgB`=>1L-#&A4l+!>mjSXRQc9nZ@n1-Oo#da9{$HhzmEyhPhBQ(an(<ybOB)1f GVCo+<njnY( diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-314.pyc deleted file mode 100644 index 187103675a64077b4114f3b27f746256edbcb3a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9391 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 V-j4$P!pQ|`F?{HM7$E-b{uc}~7!m*g diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 30188d5534791d1a42dbdbfef8abbf27a24269aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2459 zcma)8O>7fK6rT0|c>NRGgb<=6R_s6`Oo&5BAP~Y|Nz_D*Tz8eGNHwe$dt$cOyQ|rC z^CJ#X%Yjs?(qoX2%8}mML!}-|3+gq2NGY2{qN0_`&4?hXa_O73H%>|q9m(_l=Dj!b zz1cVJ3f1`$jFs>HR4)V(dPW6zuoZ@RNr0J060*=0Br#*msK@fOQQkAgTC77ki*qP% z@eUO%!J%Hudzni|+>kXIN0)v5OhvZ*5-+j)k;Lssg-C(10+QzdN(ggpX`&VtG8<D2 zqo8ILOVza))+{n>=&EKV6O0{DG)=c0i<!#OfYqRg10IgRyo>=ek0#L-&&itz<v`bp zK47jf5+iveR^obSGXA*-mf4&_^5$HmpqkdlrbRBtZp2c$hHZght3))Lg|y!w$SX|g zq^MXX&DL&zesM7Kp^1r^QF55{o;r0jGp&>B8H4Db;H+h4vIV`AyQ-MDTh&wxCeu<1 z1x&hoGwE6Dny&Tr_RIb9%*hk-1TGo{#lo^xG&1Ar)r_fHxZ6;&*OfdrGlpvP$gm4c zG^Nm!EvP+3Mb(nVtR0l)Di~OnNdPvMfS=g{(>!{Ojxg;n=(HSeD^q%}&k<jO89BgF zh7JLK4saU)$$X{eXp}LSYRx^PtWl{yJI0Oj2J7g#F=5nea1PIpiK9M)Zv)V$nkd|v z1}8F1=|-2UQOSFxxh5GX13s0J-l2DOaU_YER#%dIl7FCjQz0LpZgVX)+FxbC&csno zYC)5pIPB5AhtqIgl5ato!>(`oh|ASze5XBG)4QA$?59@=2IOPo=#n6XE_qLZEQJTE z7Q;X3PY*bYc1@FBcP|G}3{7wX${7?tL)?L2Y?q58qz}BUlL8ZB5FPWl5!-fF;eW=+ z9CYKRJ6*0u|1<KTn%(8%=n7L?8%2^}i08!d?<-VgRCJn+B9)2lME0obU88_T+(E;a zIp%89$6c;QrMd}Utp-j$-#Op-FOUytEngz?oI1hR98^k{p4H*Q!xjd)&QOSnWzZBA zEeDEFmSFl#)-+;THAV>030MO;Y!F=OPpQG@v?ruewxH%Uo#44}^009|FB5F)C6dKv zg0%%DOM96uf)CE?WY!jndahK!bKVh2dS4oh*=Vj~jQXouK89(YSce&#zJ|4!i7kt2 z3wl-o4}W*JYU;FO(2a`Qe5)OUUXk4H6-nq7$sOl}{3HxJwWDt@qb)^tFd&3BZ@ckd zYbwB)WDhkq?Ka|>EH>!zOj1wHdv}{lmRc~$UTR^@S<`8`pW5QILNqv)X@{oN0(7@+ zxqi3??njkHc4M`H%GFhJLC@zgu?5qD{!46rnn2UEJ-TUo3#x`qY}g#0Q7v1jpl163 z#VRX|Uz9J5kK4RcPP)R0#pm$VQr_k$7Ks4iVZ#ny4j|6Ko#RzbB4&#@SyPG_N(vl( zMQj#;uo-N7tCz;4Ex9wcJqUezNv}IO&3Yf)oq6;si1@Rc-04m3_$Jr8$@M(-20pv7 z5w2gHS(sV!e0k#*w*^b;*0`2OT+6TF{j2T$%V$!rSPw6h{fLjOah)q%=PGyTH!gBB zRpxlU;YsxHz5d71qbp+bEwLQo_zTR27+MpX9*IqN8o!R-j^6XEid`>66pk)k`nL7Q zrj_2Y)zEwM?>-IGFAgmXEs2i<@ntUlS2>D;4O@ui8#ctiqJO~;K~}`3rGdMBcRQBa zR>j0F{hj)+n{PL-iU+Ay{6hR{&thO9@TTmA0B^SHQP7FLg*>pM-^I{ka3Q$7Z|DbQ zO+3FMo_|y3so`&v;&i{q|IQh7f3Rct1p4WWces!JnY++2oMay)c@Q3)*f-L}J`6OD zbg~aSdEgUFDiO53vYgYivTXZhd8!2OIDH>!CnjAm!3}|e!__0Sb&(jI+Ns``$JTh| zE{L*ITyX25W~XK%<={UPa_VS{LzOT1EExhFZ2=~IY050aFi%j&AE^Bqs#`~)b>v$| e{&f_7>Wi%TnjiU^mrg$R9h?_l54kV26ZIdUHaVaG diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-314.pyc deleted file mode 100644 index 66295cae3b65f90a50667bbdfaab17be2d507b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5577 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 I|0J9I2aGhISO5S3 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-314.pyc deleted file mode 100644 index 0fc44b6c969aa42a9eb10eff1836402ab1d41b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21580 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 Yk3;5O$B>TS%_l3{e-Bv>DK_Q*4>l>r$p8QV diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-314.pyc deleted file mode 100644 index f33cc9f682f693dbc9dbc35ac90d4d27951f7a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7159 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 B7ViK6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-314.pyc deleted file mode 100644 index efc406f05e027d342bd0e6fb197a43310cd51152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18061 zcmcJ1X>c3ao!`Sn+z0OiJer3{Q6fPdlt|suP~-rkV>l2E*)cURL^MfwKmgO-ltg-* zRqZ+(jdzn7@228$YO^a>TouhGRng{4yp>eNsiZ1f`C>wn2XI@;XxHA#x{?oIQM2-T zzvTCS-3@>cB#)iSE8_LP-+TS;_rD+a`@AlOkpHv4NnJn7*iY%j2sRBc?Ho5VcAG_+ z!ro?4Q^XWDE9O3e%@K=Y;ZLh##nTe8g&ULxo@b5N!w$v4VOzu*b}6o~TXBayiif8) zM7&|2;tTr~e>k87c$z)Z7;aLUIP8cthg*~u4m%^Q;Wnj>!>&ksxI^jSup4lv(#c^@ zq$?a$g5hqZJKUr6@HB6vH{7T6ao86T!u?7=hy9U(@Srlt;Xq_4yhqu?;l{{tctjcD za8qP&cvKnXaC2l|c)zlr!!41q@VGJ_4k@AVgfbC6pd8@ot&xM_L&~A>VdXG?Z;MQZ zk0?ht+#Wd^o>Hbb+!2`$A5)HTxHED*d_p<F;jYNZ@G0dKhl7#R;WNsa@LA<-_?&XC zk6p9Of5TXo%Cnzco0&9e@5=dTcRP#rw6k<TnZ0&y{`V{83<#<J)PO5bq<&a=GoX+~ ziCpvavuJO$FDgu72T)Mni1wqE0p7}m=pf)B4qt3#D7y#meb+iBEqduoQS%@h9o{U> zWHU-4m5~KyRTQG)yXz@QToW_OOm=N8kx2^I6S62Qr4zCoa=8{(Q?m9V07zwogdmH# zgp^Q3VJ(|nPm6+_<uxs7pHsC7MM!3aOjZ#R>6?iS*_9E+q%faYdMB|W&ZRO*Q4*FC zxy1EUI;Cu&Y-U6e)-xG#NtES;luB<1skK~IQmA6r?(fzTORK4jC~XMT*F-ukq!d}W zA!d?U35_Jh96&L%loI7JK~$DPu2GZfPGr!Vgp$f;<jZ)sV+2Ynkp|chOQhFDdDNm> z&Sf@K#|)}WTu+OtePJUf#u5^8I$v8)rIWLn8!0K9p{a^wWCi6!Ngaq}a#EK1{qiz{ zSJtopszT_A>*}f~re`odk=~ZplGz;ZG2WWi67Ps{B_XYdN<6ortY$MvZH!>3w_caB z>p6Y#kl1_$oxwo$luM~wsSL*8(cfn!DJ!Y1^OATYm0j0*eLf{=$sJ$F$m=<pc`-T9 zTZxGhRfc-K7gL#cX0jOdl9H7uVb{VSq2-E5nJA9hmqiJyfQdD!o(0}-twOxJ=2JPn zla$LRZb8EC5UJYcsx66nuu@32s-4)eH0N<id^f%<W!K_jGNtg9YJDLqjUA#6zL1Q% zWHCuK7<*m~zEFtjmlY|MSs68}{`uMYsY8cnZ!L*@EmVI_%poDZCMt<!LP?;*?Y!D} zdFO4!S7=3O<V{*uRf9Y=q75Zl=?9+&oV%zfXVW+MJhWmTEWKlNRyJ1MqIws^wH%g= zufvAgx$BiSZB$%IVFVkhS3${SN{YXOGbb+*cG58vvjPTYFzpBcZnGGB+dK`dmPA@N zd&{(HikhP4s3mHhAgp2gIpG}Du5U<*zE&F~QCXKVs`Yv{oBo(#2o1|wX)U41)X0GP z&6(qiUy!kX785w|2ag>)uy`{oy|aj;@Ky9(UR+9N*OP>8##5P;f=EA9;|CYDy>j^A zWPCDyYx-!M#+U}qi7RWl#fz!yi*ia4$8#D+kr#8R+(bN;QA8<|NKY)KQxmj`Iz|fR zHdIeMuA=}k9+wWFe<$#hdlB7c&zapcYue`Vy&EO|{Qi*kzJn5s&l~|12%q9-+nED! zn=Mir5A!-+Hs0wuuhZ@7w5Z9T6H)VYm@&++W%Ey6Gql`7YFUuPmGyK27!t@zk$|az z-{jTodK#!%6jCc0j_9t7ONn(^blnsMoDdB&r?7c2NhnA7O3-l*N0eGhRh6z~F@fd7 zm$D#c=p4~!3b3~RbyZp6CJwWZ14R&%A(tw|=Ogp+$mRHJUx-{hACJ6#`OWBTeCEx| zR~Dk@B9|AgsHTI!IOeRZ+C>d%sum!wk4@4(Oa$K^!_ovmwO<=pTpJZOJ0Ch$t~_+< z7|QX*>H%<@J@YY-?}Ov-AOGO=`=__MPCj&>`ayHveSXV&UOGrsI^#N~TTq*-PMDsE zU240YUC$(cqtjsKr@<<XQbX3|^~}=dxIr+!{N-}PV}eFh#)LEu;+L_C*RG9WiIi*7 zetap7BN{bHAw0CR!Y6}oOCG&R8Qq9zZ+4oRw<#*Rrb-q(pV|&>+wkP0t-mvAmJ=*t z2A^mG7hoo?AdA!7&SK^mJ8X_xk>W@Pa;BJxPWR^Ad2uNVnx2&e9AWIdwY6+UNM~14 zOW2Ouo>H;`*n`9h5TihN1?8m;7qAP*Lm;;y*9&vn{P{7AHm45k0FJw)VT^&#mTJA6 z1-*a8oT&phQ_5<5DJ>>4>$%X$bap9`mQRPO&wPxgG^kIh*|u++A=(<BE79{WCi&}& zGfJnIkKsK3vU1h~Y_63t%paR4d{7f&rYM`#u|XfZ(9W2X^<phB*XFs)AS-PbW@qQm zy>@XnzA$@f{(K}FU-;7e>=o4|gS;m}MHO+>ES*EOs!5TlreQ%lFkLtr%c&I{+_-_< zjVV(P)Srfzf59h3+h?CPj@&s{^t2Q_eR)scUDMqopLj-hEUam7WmXK@;Xr@*tn3Bw zD%ugXMH`~_sAIy4kvsKMBa7)}={UaR$Uq|{Rxk+iFP-JnqAk1yC+1b_F3q5pe}JE? zb>uno*qXK}`Y=_Z$Gu_x_`Z`rez3&zwDDB0T6vZK8|pfVQ-f6nR2!D@4QL}<#i^-> z>qqntl9-!rcE!^Fl6nm6-^YUNinX6zHO0&Zmp;e@wrDk4ZeU65vToMLYg?$>t4eLF zEX7V(dRWTzvFS4KZ{URu;>cvRQzA8@iBX$$0S|2%E)oP{#H7=RWSWxU;o;l2wOwbw zDJ60_u)96=x0s&I*J25u{^B+(`kM>>p}c?Sf&ajk<G_~xK+)Y)a0l_X<qrPXGkjMm zjGWAmoP6XtRkGThO+RjK|Hyh*dDuL*<r(|MWB<@IW^*=eJD7K*s%X*ESaKu%m$Dn} z{09fl$bVsd=lU$#MzQejOIMJ`M<dfZFAHb2VR)*0FMR=79Mg6J_`BQeGapdFbBD2q zO5M!UeEaf?+n<DVRBPH91Mqpaf7BUuP1tY*+}aTcRLEO=Ih7V==@M!J_rxV5sRb`p zXTvUQ{JaD-qG7~ecJPDpA{Tk>m8XTco_Fw*>F^O{X)|?fQ&ep0D_QV->gg=m@GLbj zUrWhOkc0U;N=|}Ytf6<?4M>}i@*YK9PW<?U{1LA>#B$ac1BRRdhO{jjScAoEQ5M5q zk6EIoDV;AuDa>N7VUgB}hgd_*JYQYAo=)88lwK-lk6GvKdPdbFX0M!v3!tuqbuY|n z&luq#>jESRS7rL8FXC%$uD=9m?qjp+FqkOS3-(HilRT78iOEr`)K7&8U8-KAP#iL_ zs5a2y$RtM{(p4(5yHeFt&Hk$nTJcO`O;lYKaYS_yzp7;8iDXhH^op}LEFft6woMZw zD*e{C%`!^z6-@%T%}O5D(sujePg;iVI39P60h<@wgT>~~VoMNz&)p3{*PS=OKXsid z2D*x!LZLI1?+g`t2cOxkUA{YSV2!<<IstHf;@Q8`i7&P-taVSRmw7t2tnJ#`qp@<( zSIV^Wr$|bm6W5pm>Zh3B{)U2e2FJk;Lz2+=4aIuRMqCKzKLV3_B}&6Jdo&QWA-#b( zm9(jx<3LVh)Q%iSO^!3_M5>EY6&GrC<IO{F<!{~5rl=RGKJ81z6ZI?J7&~E7eAo%i z67iI~7?uVk@NGN<;1%Z@>{HY>VL>Gg{5(q>chZJd&F|dQIK0>J_Nv3E_PxlO?&4Se z5h{>r!_h&t+NQTD`e>;{k9*DhaleHpRuB|Q^FUqkW7qFI1#r?-Eu&nq#MoD?4Emv% zX#(8fYbGnG3+NrvYD2vfwn&?khj~JSHKCswvtK!fzfs+unu_sSukI*hCy7Y)s9m+; zpn^a-;*bMVN<6MQpg@U3V3k!DP8C5=Oh{C-+W3O3E=8#pt40v{dZwtLGY)zQu_qpv zX@Z9LjcEi?TBF=x-8Iyj=j%u06{PU7!~4GdfurN2p)JRry8{m#d!9NxA9&yQ792v} zA$+f^(0}Sd|EY)lXC67u7HhL6AM{T?>_7U6W2&;!22Q0;@hvL=c*U00rFd<-l61h? zE}hGQc=D>PDt#5@e;+@&i#PI|*=*h06x{>&jK_VMzg2pNVmuJvir#s3LK!7)S<k9| zkbtM@9Y{kNrGsVNoIMX7SXzS~M;30brj}MAhiIyiDp?o^IyuJml}Q2e3h6UfQcwj7 zx}GAm=}(I*iKUHk<72f!OCW^Ht4pV@LnI7hLqLup**UJu#d2Jiilu4vuUcm9N*Y~* zysGsnegj&|L`G4^>uiaa7ymt~xdRb!cLVeE+_e{knY=Lb$UXDp=HOrYgOxcoR=f$N z`HG+9pS@gfWANU@d_>(*Pt+UrMg73DjnSqFC&z$XiuDnf80YGNID|QA59+PrKD=5E z^bn+;lc=*2kxGpl;gqfgubf!MHG&Dvj5J1Ro@DlBCY?<rsp3r+_L=aWK*F5rgo^8W z7CM{_=`vNepCV$ze&t5|XDB3R5fNUzY_hqwdHl3vPsv8Fn8&7$lAVJN)-hCaa?r(^ zx=U^jdRSv`$;&|>>*y}|IT&E={iQ|@HnEoWQZolzn5$>Il|XGJh|@8Gz7pP@8`$SK zd!~AOJLil!D{@2Blyl(>VEt+XBmjMdbMBZMdLhhg5*$o7&O?2Eh)zw;6Z4d%jy5X2 zNJNZ>`RcyvX;G`uN*}wlFKWxV&?C>QT1bALS{o|0F1q!mKwF~r5HsYOoHy!t#W;LX z=gV`GQ0ri1UZdu#Ke{?JY1Q6x{zXtaEyQdwOUxg0ERt};1L~wzstHDKqb`FB%>^#` z79nYA0rhxezNov*Z3Y&J_2wZ){iH)s6JmCx6Mn1-u>jJEWvmJ4sTDb-f2;{;-8?VU zB;pl(u_xw;xuTvaeZ)A!-pzBa83~F!C;_WYIfmXGIw$B<p@!#boeF*gKM4*L=M+kt zIq4><-*he~WMv$9P~Q9>P^Xewa9t){Pdc$l1{vclLrr*->=Z_Jcwu2)kP?{{5g7Vi zSW=*^gsLceooq}Ma||px8BIG3DjX8HSxLMFik%{RN+K=PQAaAP(4()c3ghEIEaQ5C zQ{{egy=F?Go|35v(~#WY<AmNbxz6nnp@q#8mGY|zDk+G|%TQU-C^8r#jR)EzPCPW) zP^L5?wNb-<6~<fM4Dh7!O44Ra$}j<qYk4$@5Ux3L{5s}V`fZACBU0Ub?&3?_$YbUi zs-|zP(s>#r$e=)@e$}aU1b9@n%hD3Z)W1a)`n3#A9>LVAoizzyhYVX)K(i?5RiTp- z?;W9Y)q_b}0XdW7*Ao)&y6U6#gnBQId0T~$`VXm`3)^8M&PSn*NT;x6QaIYET5}03 z-3Ap8)KXIr;Oxo@7&ZINgp|SlQti+TClv4?B+W>KwIo6!s*_I=A1Se#8hQ9#g8nf@ z?^E<miinD$Rm)OZmfoWT&ft`XrmX{YUZNS(dfmL6>cx4F{|U0yKrKy|i1*Q!@EcU1 zRhz%c1|SoSta_p8uFSPeIEaKe9!Qd-ph<I`+?J<LF75s}cn_RNOv+faViM97)}fb{ z{zEh&CqOp9J@m4^@j~yxeDA?6N3iH0c;F9hIYL|hP_e7;j{j+}w-7v*4<7se$iv`k zTaJ#RJNVIikKFr<okRERg}rC<`0G4-=Z#POosR=;-}ZgWS29~$2cB6P8k>Gm3b4Mx zJ8u>{d+)qa^ml!<Qs_OJ?>+j+e^f79Y<cUM#oXBR%*A?!?!LY?e)b0g54&f#9Gy=+ zy>~|n1IP3D^BgZ(m~#|Drf1;p)xw@r`8}r|xlcVFI$jL)-<#U8nD_X$JpIoaSkIYa zdrz@<e{o={*fsdLd-(3n!pL-fWcp$Ev1jgv9^d<yo&{LXSyM64Rvb87Jopv_*dE`V zOV2zkFj#CGg|z$aH@}4*?<sZ<7P=4TyAKzK4;Ooe3Oz^iJx7XNBP0@&06d=W9484m zI8X>4%m)urR(n4bBE|0g&-wxZSBV9jI`Jn0ZLnb=iy9kt9>A*@?;17?=o{>q7r!zy z7Hytz1C_UEx*><L7qtCeX0R$One;noa<lPj*;uSIRs4Kvj8{N6rx-^+skW63Ec{3t z)<o40oV+Ar2kS-Ez<O>)g1wGRpdc$N8<K+NVD{XIgJ&aCFgE#ecC$@c&!xpLLqj_z zghHWfMkhEYH;7MuB`5dSC?wxPM4a4FV&o7#Z2}*MC)hY}X?B7f#Lzhja<R6NlA9n8 zF>YRhd@R^k@)Hzb{d-D{1U0d)-cmC`EiBkuY9*+RbsZ?R6V$<6ZQGrIG?uQ+u%IVC z{J@-fckc63RZ(3nk|@JN%u-KOhC)j(0rrj66P#lfgY6)uO=s|+rtBuy9ZSTT^TxdO zMCy5u(Q@TEPyMV3^MRTKyv{=rT^qOp&Kh$QvouefdrbhFVF#Px1fyY{(&uJS>!bVE z>SG-y>HlvZVa7UI%?#<%;^*LiV2XPi)4=(l%TUt(5xww}M@LN!a15*;5JL7EC2ZD@ zR9Tk*6PWZb>C-=^=uarROVM``jd~?)EGG3(^c9LYc^m_$6~cki4A&t}de%u#p@BC< zh^Gc9K^tL|)Wug`ly_T&;Y=H_>WJ!)^gXnr?tN(!8n;ufUb=zeqdtiwtg0#C#FXYi z!!Iuzp!Bb($UjG<TF|0QTht(bc$SHuS0`tBXRDdk8iJ>l_!;Vv{|_Qqeg|0h;A787 zv9-I<x-Z|l@0rcg?E*Ceis<g!P2iB^>E<NvC!RA;o7=v9>RYD@&HMAs`wPuS^UX&K z&1dq>X9~^Xd~>+i*-!MQd!*QZkf_ek{=(3i{LmSC9XVALCI}EFO6{yAV%lMz79Y$> zUf)g^b51|?H+}H+_rG57kL3L$1%D{-4;B1VdH+<we>U$wTWswi>e4Y->=`H0B8(J- z6M5kTy$&7&jUk|WKdKI#qpFGCc<Rv`;()M$eq)=1rlTY?Llq&Z5Eo(rEA|D6>^Q#? zfA;`K$}=cQ_<PetIw6Xm`r1o20(427gAT&xP7Z34I0rq<HL&d^P(#HwRAvN1dl;~H z=dYmWzs+D%sJ0}OrDa3<T^Z#vBEHZ9WGJfvSDsf7#jIt?u_0!wi>Rxl*_a9TiMJqU z+hg{6^7N!$b-5R4znfivnYl_1wnOh_u7}2><|^5hd~HmIv<%d%&qdCGUJ@@^6Jid7 zoWQ;eGD4OPv{FafHTssE<1<u|a_g2hYSryB_A1GjB-}d02zD7;SyKKyy@ggo?`<6t zfp({9z8A?<&qK@}HP>(XrL)&CrLX<xnmt&<^#0V5)6t&{`r};eGx~G&53deI?M4g8 z$6?927W<9-1y}vvVid0V0i#sqSzaHs-p%TlnJ1-OO^B8mic93H<uH2mxyHPxjrl^Z zJoe$5>hW6c+28Y>gA=9&jIT~<W9PhWng#_)Vy8f7L);(_QKyj)>v`Sp-)3V~`jebH z$QH+quVZfG>zrr7Q+GC?<1{=ja=ry$x$j@5ek_>h4;gh;o<^CK2=D6=BWIzEU7%f> zDyRAu{PWnGwE_AVo%Ji%hrNKYpD;>By$kN+W)Cb;sNtlMT6rSJzu==1hswBT)%22a z2B1^Z+k5ehF4!^BUwK9s>SC0IYK)?v(Z$n7FHe}>vcAERe2@0AXd~=;wm{k1Glw?I zqt|dCSVwrgm@hTb*@`w@^1>sz<||`OjW3h1EkWOj)1DEGc4H<ZcjdoQF7{3xtWhrW zXL=d*vo@5=fHC9syaHFQKoh{r)Y<3ddcH<wqRn9UU#o44u?bU-G=Jw`%rU-Co~7@r zPDsoA+>50#YaJ785j#{1u|TwS{(|vVdDd^snBi!fu}8_?XQZy0s#<S<dF!#j?yq8S zWq_9o_J|hXr4ppE<h+&o7QFKZjQq;8(lYeU-ZS2m$?#Yi?cAJ!qc_}hx$_xZyT{3g z7p{#f>!czf*K=qUNrMSTHSoH*Y$i$C$tpDpbeWeIR6i6maFB|_lS)AWSu^;ri86N@ z))@Ubx+LAF=o+F?i^LPS3_z(!_#$O;)|Xf#B=F4gcbf;tVNxo45zFJ`kUTCgNvWIy z&vqD~GEkYqTT?ejK?A$#*FTWQHUDiD&R}XeQFrfEJ-eiA`xULq&0b@mvXBsxDQGa^ zU9AY3o9uC6)4^4sP`JYAQsn{9?b{dt4}>-j6AwvPYyf88+iZc&1sHp`ab7F2E55~U z+rV7lnD8SEQ|l2+$|O-ySj+-Y3UbAuZdjEu7<1@=YQZRXIjlKPu80|EdZp9q(P(AL z3}&DF*{f%=;=Nb??zf21BvJL}=<$~C<j3#bvlRS;pZEv=&3k{x?Xth!(Pf%bt>jg) z`Nc0~*M+rpS>bap;3@*#0`Ug3lQD<1p-4ylHTvM|!rryS29|1rzJmv$A`FoJThII& zw&6SS*9XpwswRP)NBR3^_}6bm7DcV*RWWT;KQOAX*~8q+m1{s%cSW-(s}15U1)e3a zZo?xzC*hpw;^Q9>l%Oa_kw6g%m#Wini<c#$r_yzbK#?@h6>U!wQBymsr(N@?*EX=M zTHv7~VPi0<kD^{GZdsF8G|ARWX+so!mm<QW@MS6Mhg3@<v%!_J(tqMv<kl4D)5bks zRckV}q^Q=fW^pf}vC87kj~hRDTpZyY|IgIIpHn1Kv_w%7k=mg3RrPDnvOm6R5pON2 zZF;Ic#Im}}t5n~hP_5)1P*K&Aiq;64sy0x&J=MX_v4^>2^zT6jp_px9hbHfMe&#=L zzrEl;_P~Gaao2%jpuG?n%m)VV#_q2`?-}&nxd3UY?0e&W<Qe;EbNii{A_UiC-#Yf~ z6Mt~x$AON=@YM-47lVCOt~&#dg^_#qt%I-q;QT`&0_7<8<MCDMB0rw(R@Tx1y_cuC z;2y%?mV4-Nd+6TH!bCVf5&on-@}cE%&vdb+ooh%B<$Del2Zo_i?QQyylx~eZdT-zO zBrvh<WgTyrploXi7Mh11H4ojHdE9x3`qev7?$_>4Ic>aCo|;biS<4<w545lyV~;w< z?t~xrVrDw-w?DU-`+Og|pa||gXDYVzR`&|i)ID4Xj^l4DI1Yt!=U|~@U%q2sp(B*< z2yIQAebjO8X;1$%zmxaAWq0p)f~XoEO`YQ<fltR+!9BL+9((L>`f#eyJehBveCR*& zebXbXQ`^ASVC-Sr)vdtQr=)Q>nr}UN|J@(89=kJFGF!Z3j|UFkAAUG+>_b144Z}wY zd#3Yyrnip0@fWW>-1Fv^XW)PN_uN}4gf8N5D|GR(aOnQjL*c}S-k-IP6`}L)4;A`P z=lf4Tw^=%xb{L{(4i-FI?CQTe{N1jt{gGmDZy|U%A3VI(HF-b0b?Qp~WUOQ{b$-#b zW3dF=O3c#QhSlj9DYWm)x9_`m`um4IX+QmIF6Ei$P0Zu}y~BAzs}FrAKREos;cu4T z3ht8++$W2BM(@1-$TRR9TePw0Z!7o({B8LK4i5qqZ}|r~ytm-ryXD`@;R6NuefkeP zZRz^x{GUX=6WMAWzH^@E^cVd7TmF7baLH_HJ^ktF^MAgKfwj^V42<b#UA-SE_YVKN z>5r%Hzh0P}%TLZd-2eKcuJE=ExjPnHdlTGFU~TZR_Ccy4^l51FV_w6NZDwjcRh&Ap zjp|Neny9Fyu?f=@=!RkB7tcf!YZ-jTOjy3QfxCzQ_0)H#9=7e@3he)T^uRmzOYV*F z-%q&Tbg~~h-EW30KWu4zbJX&~Q5)c0-eOi@Asq3~dx1uCz2Vr6NZIG}663Bn|ANRL zp>oo*IBbL46y5D9(c}Ikf78?_C|3^XnWjE@4*=OG>QQ)d|F7qaV5l{6V8zSqY6oXm zY1BN_Rh^UtCx{3pxbomPYTi8JqRU+(`RU*~L6sR;NZ=+0zvD+&Rc@q`u*GJt^SeP{ z<-oXkWHBKvt;Xf0Y)(|$2^niPWb)G?FMobLPWli%Qms_6!MXj2Qk>-y+zS{wNFAw@ zGm8j2C%VIp8Fi6*ZK3bbG8{y`+|RP3S37lgJjE8F&@!EGnSR)E{EqWecgtf>(+3yc zzwnXs6VCupji<G;I>rk9KWp<isid{2^2PZfUN@T;s;=4@Hkm)B95>z4GEzt`*Zho0 z#(vpVl&>Q1do=8m0BH9G$x4IhX(M!ec#?{*yJRN_zBc<yPJ&#lf2`yt2>QMDZ7(2g z2CCJ2<VJ`+>fL$7t6oH`g?f(laFOq?var||%QZn*G|e{{-&USTEjudiN~M{v2{9`i zi}f1eh+Gz*>-Pk9lLk0%nCjVJptjS`2ll;f^FLOs5&A_nLG$ny;4Um>bMP2bMB+mg zx?@|#jTs^kuHPQ#o*Me4FN0Aw*qP%3jDQe{B&tNSM&NiYW!GTMPT@kAi<p@Konev3 zHDO^uxWO;Hq9kr7fwv6_=f&m3dRp__n8VE(G34S-ZwsR~)q^XS*_-i=MCKhasrt0z zN4^S*lueWPLfo}jPVmBf3E3omJ(a=jAkHu19Q&vtl+o{wf@w1@ijwJjS(a$;s*SKH z!dVPQ8&i{&;0_IkYBFJ|4NKg|MIz;;^gk*3l%l5;acufiK%@4m>kOQOq*^tW^)Ctf zD@3v#k#3XMutBTt`=&1uJgez?vbwhppI5geKOoDf6$Xkf)-?i~@`KLtdn=DRU%%sf z+!ZQz_EfCPWovX-f1zt4-!%a%0GKxTW&2^#4)lPQJ^(EZj*@8r_JZC$h2E)r@6<D= zjZ6bJ-87&H4d%-~N3$6B<++8qxlO;49hb52^76(wiJ!P<bonw|N8k}lat=IVU2$?( z$CYisxDfg7dLpgo_~RJ2Br8}a5qCu5nt!VYjw4EH364Um*`#K$a&vcBJ>@%SUHZ2a z<th3xMSqP*ZH2!q|1?gH9VuKZg!mm-y}CE;l89@(abTTyQJ8yHp5<%7U9x%f4a$%Z z{o;4ob2D6?xx+IMN<-5#Gh9w_F{z=cL=X(X4UK<mCKo+QY%FoG^c6EthLu-O1@u|Y z#LW)3=;LQ*kWalDK+ju%ramLw#&Ol?Wz`;!C$mf1tSzt8O-W1(iO{N@JXoMwkVs>w zI_Vam0^BNd3!mzMOo2m-s{@1!)COfEM`a1YNQ9{*+JU$;yvy*Xxs<?zL?X1MIl&OB zQk!>|<1R6pdrV_ZPCBLeHg~^}9;)0Vmq>O~`(7+UoBkF~DE|)tl8-v!r=lIZi$b>2 z?m^3%c-Tk<xd7O+yCAPGR6g<AF($dX%G#-w*?sQ#aaM<R7o<BDX*pDjGzc50HFfGm zcZqotIcumj9n6RdT}DQw{IWbZeyKI)STG&%fq*qu4)F!j;y7^zhA*rt?CxsSCx#<O zC$-+YyBLr?CWr30!cQ$L>7qK9?z?G9xg=jR_w<c+`J4;nTr^jQU#u79Ubu_S^#f{G z{lau1g=+|E=ZIRQ+H}*mG*D+At4!8(lUo|BQwC;gET6W}bQXrFOwB&k%5bl&vKR6& zO$9NasuQf=Mea8y{S74&$H!GBs#CjzJbO8&HqOq6XD`LChG%Cl#%IpWglAP}boMRn zma;TUpB$&?3ltH?*6<B+K>W~a^uTda!;z;YKUg2)*yR6>2;zasv~9MTte^RqY4E4a z_Y>xP!g`*t;HPXf&qkkHttK-rWSGpKxtMAH6SnsWJMn~_dctDBU{zVuPuR&PY?kLv za^UQ9)N9^hh@N|xY0mV7z43${<K>P%VP`7e6HC=taCSX#c6~Jc&^dIw;j;$1yAJmj zTT{Ur%v*y+Yh%GWn70mcfKp1h-DBQjZQD=_w0wABYvjZu&&k`)&l+%v__Jx;=z4bO RYgUtMt8?GqG6MKy{9oPYlX?IE diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-314.pyc deleted file mode 100644 index 3fdd0101b6296f6879c83569c2e2687fb0442cf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14918 zcmcIrYj70Do$uM_>_fYHqPMg{LSlIcFqnsoF-CwT8w+J2qEakuEz$^WyxLV}MquQZ z&dE8#@da}6o#mJ+s7mS%F1d>H;p&o0>H_%7eY%n?ft0aap(?(r<eP}#l*{GA{r)|V z-IW#za(4~-cTZ1uPxrt7@9y0gDDX0*$)Ef-al3}G-_V1ZoO(f6_^rTLoQ<-rOl3{% zG>ZtGLWfPY)l=ElX;<w$cc>1YJ5?voU8;-cZq<$4-YIr?R1fdt==65@R9}Z*_48+E zXF*3m4Ri$6U`L@^*iobw@p@NhaYu<-!prW?(vC8<jF-jEH67(@IWK!UD>^FGN?!JM zR&`XX)g3izO+7p1>~1rclF1v`sk$9l4<)re;!{Hr|EY#ZK{K9Di|Shb6riUv*1#gc zauzAvVWZY)-^lBVP*;4aafjWgZQ`{hs4dN^UB_$7P`k$J-+ap6-KF=+hLLi#swij4 z!W~Anx}Nv0M17UjJN$^=4UuZJtD*i$!5U#hq*mP+sZ%#SqE|iogmS*QIbv&M;kCb` zIfMnx7f+?qYFtgEQ%V<}JugTpNsg;&Ic(Exokun2;Y2E)3_CP;JDQ}Ek`^!uM~8SX zEfA4Xedu#0DILEsBx!#AIU*^;NfkpnjwH@W^r@GnxH2qDgHnoDAD3RG+<l_6>)_E7 z$M8MhSxJrc8lMT$LjohG^y!T_Hb-CIBD*ket>9R9XIIyuNUXi%`N%P?kRFf4x>0fL zQ2WuYgS`fZd1maZu+WOfQFe-{LWHTd({-vnA^<-&!jI~R*im-yvNPgTT@e@X<i^-T zi4;)MnNlUWKi(_#5?vXz#b|6$h_C>*!q`3Rv~Bk{80$k_4f~QXAVh?SZHv&zZrFcE zZ8euHsl#$gb9ALs(hb@HSASX_jH?O_xmNpTdt3C&iX<!1IB>dc&z`N(^J)2&=#ZTL zs?@70(cWZwxbI9{kv1n%2^Bz5<H@8XZ{8N|zMu}IQ`@)gi0z2Ix_f8rxHLGFjH^;i z9UO`tNt}r)302xW6z_c{epXVVLy4g+Kroht4c^k5Ol(o~r7EpM7c_q?W{`#yi)pn> zvCx|Rx*k(kN;n1<nc!@?PvCMN&lXV4IL@d*$-tRsVGSNeS=7WOGpTw&xFK}i5VVr6 zwAzU!aEg)o4#{#_MzuqclKmWA%`%}K6_~eHwrq-2O;cO&@ej=f8m0n`6Jn!Gl{wq! zKn35%5O0}(8zc6JV+)w)hEpy_GtJ*moDl>5)nP@mE2=D4pkA&dPz4Yc<Z5L4&hn|s zwe+qIU@g6%Mx!i)vTNJt33JzXaLnn`By5@KF)$}Lps`G&->}K+sJszCp`OhKx?Grd zLK)D?mmy4lL7nCG1PD)jC0$?yF&0b32Z<QGvDjd`Z#YS1kjdAE<4NO9Fc#}i$cmaw zq@+|j7L!TD%3A=mvKYryqBj;-RXK5HSd|nsAQb4|p{<llO+YwOiU8hW4{gB7qRXT! zy)`w=;d0tSBw^t+U>27*6PKTIoEA<wHxV5eX}g{Ho_L<*DYzY+A8~T-cSl?(yLnlR zh$wq_*%R@q-UxU(?9+<5IEeSE5N!q;yK*Q>#CJGF5h5QY7>J@G&WJ7IinzBpFtDgo zmU~cA6!56L37s`Ze<CT31UiqN1c{vry&fXbp?QhAW4!}$S<$KoQ5+uXBVOkWeU9i- zf+X!zG-rP@9amQ(NUeVPYI69y1=CQT;tN@1#m<WR1nw1;&O4FMyI8Px-c2Qul~v4p zsN`qO8}ApOq!Y1WWMBlws0_?_7WRViN7;$O6t5=GW9!G3*RUv&D^K0VwwlkB57|zH zQW!x`QIA>bahNK<ho!79Mg%;O(%>l?FiYKqW+{_5upWEX7@3h-w>3hhb$3~&Y?dOn zD9Hw%OmVi!nhRFQy3N;FIc>9<BKGVjb2eo7U>$y|6$7<6x(;hX=#S1&YinyLTmTL= z=mx^*f}*(;wJ$xaYEJMZ)V41I@;H(hgbt9kf*5qX6iXV99yB4DAoXb;datI_Nl;Gj zg<k3y(@Bj#IM2(}fRLxTV&@Zm>Ok133z|KsliLV9Ltrm}LQ8L^q)TeZ5Yk$Z8`XJ9 zPJhYC?Q7^c%H|7MW$3+vSzqwoy>lgNK4|+++t|U`vdZ_obG7Ry!Uv~n4~;pd#j4rL zx-rLlfiJ3?u0Hp@=dQO+Rqv$wihH8}lJ}x_My!|=E5=K%yfsz7^-ks1k9Yj@vp;$E zPUZfayY5uJI4!<3yQX~1@ok?@t)!4lr9||{`8dSq^LUy8m?xdU+4nJZ!afX7XtQ*J z*V%ZV0gNA;r|jBs{-jUPVh?n%*y$b4PWcIpFiOd=OBn1DBE{@+^ad=OSchzAlZOGj z-A3cAtj9)-w%Ul<q}^l7e##K~6MR$1^vV(gRxKFD+(ue$zLjKY1amPa+tyPbi{Z?- zjCBVyWwVs&!>wz(CW!KWyzGKR??5iUOyCfKBLJE`DWym-4=V%m3sm8hB}G!hcAb+V zROLDYLv46SAxYQV9MTyGEJysORpw(K{)!XPU!u<_n=L8-VBZJ(F7KNV8zzDc5Y)wM z#vNCEANuYTHIBJvb9iITwZ`j?ANy|j?yTK@r*iwp{dX$&PK(dxGSHf7F*LWPa=iJw zuYlcrIU^7kivAg~YErD45kr$==&rbSIYSZ6afVvWVwTA~TuE)o#506F%k*?QH{E9d zWO^dYd>oB<vY6#x@JL!YpES;8mIx#*+T~%DZW?V#G6}&P<1Ch1!;CT9OB&-bi)>jp zchYm)m;`R-^?WRD<b_>2X%Pm9e&T%><gZZKk%D6-zl5UP1dwGZb8}29&qF&T;b|b{ zSpZOuFL-I+rF~=je&sKo4VKIV8zzGdGr^Y0V9QJ}{An;u^&lVLMc?}e$4h4_!;_Wa zsnQL1#f=%Ho4n`1kdG}w<qc@P>aLS}ZAnU(v+h0vAnO?!S<lFpOG;uS{CO7s4TUG# zeCoL*^;lAd%L!WJl9W$MMpo}-86BD7OrpZ(Ln3F)B_gY^y-O3k$DxC{oFM|p$QikZ z9$Nvj9RS@P&nH22BY-2f9i5iYfxh3Dk4%dVIgCGEIxW`a)NqAd3xyisy8ue%qL0t; z08NQVO{Y*2jA5U=jVj2(l(!S070YD(%f$p}Mx3@Y{)GHA)h+QJc2OMxayt}KFYhoI zrJ<(Ts+N13TPL<Xe`oXai)5BQTo0Z4umVD2F<{aUpDXX)i=I|8HeXnH5mi}^#Ys38 zzDxiCPQ;QB0vrc85(q88x<?s~1j_D+M-?MpY@A;!gCW117jxVQGCMH=VWEkC{L$tI z+z8heJBD?07eeO77-4|hVKTAx<5?ow+Pt&M@du(9O<Bulw8$LJ(0u~e?DLe}T*tGC zV<&j6&V~jK(St8XXTvjmfNcApjFODXj#~1y$7aeuytl@JRL;XJ*(|0j<HMR8_L!_n zeO+J^PJf&d599l~_H`T1lc|3>^0@s<A2Y32PKH|DqtK(<t{gS%`O0Q1>S4L+hUpS( z6|CgH=)e4xyJEeLAd;1Tp1k}Lt%CUAQPGC8ct@zV<fYyD^nC^}-aAj(H7HAD`aEoC zXeLWp{s1+PCojJQ%ks&UWj%{p?p59`B?X*EIYI^-!~n@Cfc9-8u60UVXdNP%S;|p9 zf%$8$Wcn;TYR!>IA>c+-U<OFY+RBlSU#0f7kJxA3&E^OtNwdt#T4DoDi)-h^04d7L z9pimh2R|IV-g8&nv3%DF^H|O5k;K*QBHD5K%d(5YWDtdQyC|IbI2!RpXvCjq;e8Yy zZ>#@*?V=nmCN*d48YxuNL^2tYhf}FU>MVTTup?su$)_-LnRYI}(NmRwJIU_hs3Ntq zMBlAo_kejP%3AJ<>ochQ^SE~dO?Wl#C5>-!uY;@|0J3(Fk+p+t1@7(VD+321Uz%Es z3f(U>w$$LM?6&aj1V5~gr>yV@IL^Mz7IAcqtT6)#q4NoKAf!9Op%zVOIUcs@+r>92 zzfn??f0y(zIT|RMxn!SoVLDO1`FisD>7Q<!D0_BV+&5d9Wq;W94-?aKfsca@+H|C@ z{b5gD<Aa+Ve5TE4#!aTYCWl0C37o{AQVsA9TeLwBKJ-JVKJ<d?76ay<@m=Drd(qHJ z#QI3WLK|R~g)zL+0Y$cT0joj;k9cHKX*u?T0~Od$VIjnaezg5Sfo*8Vax{Bli=iSb zvXo;doWp1q;o6+*?lXXo56x5dQ>Yze%L&&IgdStc+4cdCftieEh<usacj54;Cbm)( z)E`U671h-9MrfR?c<OJ&r*sWpn!6lbuk)o))C<J7>4j-AJlohb=C~_XE|&nt0#=vg zFgG~9>C`}ToI%WOMN#k?nvLMk66<zn8>#NL%PP+@GeIMsEL0}(h?5qh8Ziv3lqob= z=PyITiNbsi?<Q}iH3ebwMO1eGh(TQI4ys*qsEI*IeiPl~HvkO#O0%cZ=QU@alvLw- zcq62TH@Fbjin8&~{aU_i5|yKDE>L_a@owT<uZ-De3rl9!v`nsPxl`CO=9~?d&Q$D~ z#Q)%)32{#b8793v_O`69U}-1b!k@Jhf^$6`*{r9XK$iJ98u4W9gwEoRyA#>wFiB?} zuQvJX7*t1V6H3`0KDTw2U=WcdK3ko9=W0S%JHOZY(MuWfg=Dt&h(cERyfH2ixss(% z<duaaeYgl3rb$uwh7NDQ<PSwq>7v)f5=YPfk*v!2ImAUHE!Oe%$zxFM+2^*K__>J= zPp!ykwHWCev;-38bUs%q)ZZsC-Z)R$#M(~&xO|)4=+H>w_V=K=wX7b!v$mRuU`cwM z7*Zd+VVsG$%&z%NWHUq%wOBM?=yErxudjfQW(6^OnCV*$2`~Gi<aG0tU0=<jbh^va z%Ih)5dPax|!?t02%n~XHlL)V}QGp^@^e<z&_Xv4UQnErNMEW7Nk(uVoSzxk;C2%#R z7C5GVM;f28*Rq5VVo{<yo?NW2l-kv^<N3c}d6o5SfJKRZ9<N`P5j4OOO#kxJ_Jn{F z8O_m0r*mR&Jk={Dah~Fo=-4`3Ah%<1`5=JiN+>u3y&#i8qZQ$r!=e6uobBT%@rZOz zN@{L$RbZEDj?S*bM|nho8x2~)K%x)#A!5D5vXYkdI8M<^(uFhWxZKAh3G(oes(B8* z+AHzP8DMN;5IDd(Gw5!P5li-`hcK4$M*aZpNUSLT0Ps5y?t=gmecv4Ui;)?3#iYAp z#$ENPyXwlhnfhIm^}D9(_x$3-FQY$;PS<zNHSPTP{8ZC(7u{bJw_JBm6>lAL&)dAt z`niItE8DNOeb_cr(0r$$dA7Ln-Io{bEYLDv%shpc0v7|9&)pU47E4ftCjb3~ujT=4 zg21d8<S$3yJk5#)bH37?>hsfLJ*wxOX!<8*FQ)tU^NsDhgj>xG2in+exAQ=Y^R{24 za%l<bZ@2gk?DE`xir2KQYu{o2BveXphaGQw(cel2hYAZlsLHa$J|asD@g3{PSaoI{ z7~`r4tTFw-7?v2y`hhXxJSh8&!(%@Vj|*UA1+-wSJ24bV^bQyzYGl&eKCGze!H|r~ zkg+2nbs(;Wa5JQLKvM7^!I-{~ltSr#{*aW;#(OWAjg?lfcm0NN=*#>NSb^~kPw9*l z8i=R*K!u@1DijaVfx=liJ)G*p2&7m;XD*<ce>4f|3k}6nQqmhjIzK=&;iL58dPzv; zSA5ooL-AqE6W4{P7M)c-m-rB_rwqvn94UrK<F|VM*G8!3OvcYh$tO5Mg8`U})*Msx z``A#+6m>eckUzYIA|S{p0)k8z=h;Hqj!yXVER1t<$Tme+KB8{O64$0kgf4er7@l~b z%L;ETIij{ivnkXgw(L_mj3Zj(P{hxnvBUCyRCU1v_z1b&N#I2SJcdd~0XXqB=qjet z@c@s2kwKujjZ0RL73-)AjgS)#A<eH<EJv<x7<0t#L=zasWmPzr)sJ9*^z2mi9)1Kn zTU(!fL_1gBJXOB_`u02Jtq2hNGdk3?(@4(&=}#Q;)ZE6+F`2Zm=1%L^(_})H9{MER zxT4~}f(9i1lqLXD{B~yznbtM4<#qFR%EP;Oe$P{O--%~^_CzLTBJyb@l6eXR-2#B? zZLZC1h1}d+=tL*!#70IML^tqoDNJWLGayMwmVW?XoCX@l>4msJ13opc%;8u)w0xU# zTkz$PGA9v_6Tx7~rB^P#@~y#XvHHIh2kPH0D;ILO_s`uAnNOPbg3ml_AN*8T1@Nel zCGEqH@n`LW!?}yX9J}~FP)_@R{GO-uz7zTKeIVw-zIYbM)!`AX74~4rz8X89D8|hY zj7P~d!|n3l;Yp^|Xm)6EgrhhES(^p-2du`iiWst?b<I5+)GtG>uxC~aj*1XI!*{H( z^wMh=U;EY@V~)9C)up%IeQW&u$E8!jofG2D<;+Cnh-p8WFDg@5ebo*6Cp6+lJ~4{J zd0e0!IxdU{^gJ^cwByMjq{lmdI}6(zMz4W#MiF45&Lt^JwpuNtmUPS)GsYF4yr=r8 z4J;WPkNlPd&3j4OVax^6SCF5_OY@xnG|KwH)>SIO)@GU*R}^Uww`1jNRL3QB6H3`` z8&Q(BW-0UPLVzQhJ^~2~c75~Gn`3XzHLSbVH`BaxvU%rJ!>+M|)Bd_I@a~Ow-xxoB zHTq%n`i>vB-Dvyx{7uKq{>bG1$W-vygm^5oCnht{IyilV`1mWwhvZey8i;X!jz3G& z+9_HIK(|<s(JdBa`aH5VtwE;+d4fJ%JDT%F3=%lEk8D1sriXOn2ZnM8R!#_BZYUl? zs4$*1!;Z#vsMh0%56OH(xY`?{8PXTcu+J8hmt$X#I`ZX^N*-nRY8#iHY#PU|*YG}T z+i8ot@}Fu#-NyRTy%5~oq5ga7_>Tm*ETM_yb*(?77X)Z%r5WHIcHic7iVp*@Tpk9X ziynF*2p{^12Nw~0)bY+S%{%_z$aMO=Zj*f<r4jQgxN#|wtJ#rY#s^0@S6bcIzD;Xt z03b<HEa2V~08tFG>-%_iGsY{I6AtN@MiOv0K_bgMZjkoU6eW`9sXHHI8-&(kv^k6M z>HbDWOCJ}W5v;ekK1BXy<`##k)rW*A-svgJleR@kBJk8>%iKlm!8P$+#$5Ax&ei%1 z;5+x&x-Adg90_77%af(Hx&F28Jx7bp_E~;${?T&$+bDc!J+0c$x_?RjwCNYG?6=e0 zvixT!1#*jJsUO#&24X{!Y}{hiZHf0V5BaYMd>a7#l|rWZ6Uw0!{rI5oFnr?g(Cfb@ zKs?JSU#6YVFA{M6dY>Nu1_0I-r)MH%`ELPo?^+dc|CpOkrjz`0G`d9%e+WPp)EB;@ z8DHI`ukOnEtFM3f`iyVWr@l?U5et4L2JQvQW&+I<f#xgKAJvY&Fc+vDm!<+uD0vFT z&Q5P=yZOS5=g3{pk$IcP)A*Uc2zMO|N-uR?>>A&B$G>*5jCo%cCOt>~@W90i8{h$Z zif8>L{C(TBzj@YQG#9MMsopj1Z$vd5V^8rP7YnFAzA)iA@+W0K=KJ>U_B!F`TLEru z6xzMcTbmsR3LLk#6`_3F?nV9Wf_3d~_wDVafS<VSsQ<+4Yp?cvQs%+i5m)ue=bm~x zY2*Vr5{0-56#Qfd4HOI=aT^z#b>UH+D?FYoXg7!Pte{;`Xu8h;#@+LjO*B2nA2T`- zjd>zdv5}_!VjdA<vU=Y#K>&-vU|C}vo|yu`>bIWTF&UwQah4{t&&rm|ZqRMsSy&<^ zGj2w-m=;n!%Mv22J6|9226@W#(M8Ac$8K*jea4mX$YfT@mk1EM%9jabxbz4fHD5>P z!9%h3FGr3YjcC4O9Y;?X53sI?MzSrX?^1sPpV5mL0P*3X$i(2+&wq}vkjQXEaPs2G zOQ+sFb)|o%Zs%m(&Z)ZHzu5K5y+7MKUH1ao7?&E~e+H4Hd7ItS1n#@%FTC{P#TVay z?XJJ^4`T=Q@*RKUpA^srdwczXM&XCg+W>F1Iu3Z)t*6RSzU?VL5VGG6*-_SAw^pq> zM*dh|f_@x@Yxr5euY#?QpHB1-;|D<a>4Z$wqj}Mmyo6-pjPAB`)U@Lj5Atil-ZXyQ zgWw>371bI)(<>7tX)g5w9bC&qy817oD)4Kb*4R0OY0`2l$*k6FZ&-J}xLHq5uvWIL zHN}6ppwyO+WH=(ar?b2(k0%g8X;pmKgz=N2)?u92E11XN5Pp9^WS~{&YhXk>b%9Mp zsCnQ`9pTqC^rHw)I7RdZKQPHbs4mt^@hTH0<tGbTz(DL^JQc^i4<6st)d2}{`CkeA zk^s>X=<FskPG|d#tLl68-?;3P{~d40EKnW-{9)cM2*R(~+6lJyH>~J0R`?kUe8#+= zG2iEG-LF~AqQfcJ78t-oKNDI$XInpK&Huq#f6Wfw^Ayf_sy_8pjqjfFG>y9MmDi0H zj15n*y4kAg308P{-4v@{bU8_I0X!&d73wA`!w(qp2VWJ+@l><v0YkpH!zbXx31Gg4 z+59s?)ud4Mz=pGl1v|4<&r@l!wNZc(2rz#{up0fR4MvsG2&MTAELb(_n+;Ts`VbAs Q3<ZhFTm9aK5|^3(0|y|edjJ3c diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-314.pyc deleted file mode 100644 index 77ac2dd51a3e6b4704258053db36e76159955b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmXw0O-sW-5Z&~{)@r3<r3J-{AQY*!Sj375HH{doNy$gOELqZI(bzNz*)7^z?*0;w z{*&q{<myFlLjQmXt?%&WJ$TFvGlv_+0*LYP{%z5?ekJA~%u>wvVi5ohP@plC(NZ*} zrD<Br(2Q20S&7*PwbV}%7HTU|PF7i#ljSJONs=f<MOC;J#CriPY<a*-irVRM!T<@P zg04kX=tkAP#0_{+mC=>T_qwRdOUryo5Yb&nVQ)Bjk$nU6WK{IZo<o&jpFrKjezV;^ zhR?1)f}Za_VS^HA*zUv}>IBy<$D%P2s@pd9>rL37(nr@hX|_-cy_}sQ1&=*jrx?+( z2Yc2K5{u%xryC>v0Tbw1UISSU#lEB44a2q?aVt6@$Z$<ej=X7<zZkpb#KxEYdc0e5 rIC2ovZ<=A4u&@^7!u)EG4NIFrF|1T)pd9Y(&OkNX+WrJ3KY76)%3yUm diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/autocompletion.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/autocompletion.py deleted file mode 100644 index f22cd1159..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/autocompletion.py +++ /dev/null @@ -1,184 +0,0 @@ -"""Logic that powers autocompletion installed by ``pip completion``.""" - -from __future__ import annotations - -import optparse -import os -import sys -from collections.abc import Iterable -from itertools import chain -from typing import Any - -from pip._internal.cli.main_parser import create_main_parser -from pip._internal.commands import commands_dict, create_command -from pip._internal.metadata import get_default_environment - - -def autocomplete() -> None: - """Entry Point for completion of main and subcommand options.""" - # Don't complete if user hasn't sourced bash_completion file. - if "PIP_AUTO_COMPLETE" not in os.environ: - return - # Don't complete if autocompletion environment variables - # are not present - if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"): - return - cwords = os.environ["COMP_WORDS"].split()[1:] - cword = int(os.environ["COMP_CWORD"]) - try: - current = cwords[cword - 1] - except IndexError: - current = "" - - parser = create_main_parser() - subcommands = list(commands_dict) - options = [] - - # subcommand - subcommand_name: str | None = None - for word in cwords: - if word in subcommands: - subcommand_name = word - break - # subcommand options - if subcommand_name is not None: - # special case: 'help' subcommand has no options - if subcommand_name == "help": - sys.exit(1) - # special case: list locally installed dists for show and uninstall - should_list_installed = not current.startswith("-") and subcommand_name in [ - "show", - "uninstall", - ] - if should_list_installed: - env = get_default_environment() - lc = current.lower() - installed = [ - dist.canonical_name - for dist in env.iter_installed_distributions(local_only=True) - if dist.canonical_name.startswith(lc) - and dist.canonical_name not in cwords[1:] - ] - # if there are no dists installed, fall back to option completion - if installed: - for dist in installed: - print(dist) - sys.exit(1) - - should_list_installables = ( - not current.startswith("-") and subcommand_name == "install" - ) - if should_list_installables: - for path in auto_complete_paths(current, "path"): - print(path) - sys.exit(1) - - subcommand = create_command(subcommand_name) - - for opt in subcommand.parser.option_list_all: - if opt.help != optparse.SUPPRESS_HELP: - options += [ - (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts - ] - - # filter out previously specified options from available options - prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]] - options = [(x, v) for (x, v) in options if x not in prev_opts] - # filter options by current input - options = [(k, v) for k, v in options if k.startswith(current)] - # get completion type given cwords and available subcommand options - completion_type = get_path_completion_type( - cwords, - cword, - subcommand.parser.option_list_all, - ) - # get completion files and directories if ``completion_type`` is - # ``<file>``, ``<dir>`` or ``<path>`` - if completion_type: - paths = auto_complete_paths(current, completion_type) - options = [(path, 0) for path in paths] - for option in options: - opt_label = option[0] - # append '=' to options which require args - if option[1] and option[0][:2] == "--": - opt_label += "=" - print(opt_label) - - # Complete sub-commands (unless one is already given). - if not any(name in cwords for name in subcommand.handler_map()): - for handler_name in subcommand.handler_map(): - if handler_name.startswith(current): - print(handler_name) - else: - # show main parser options only when necessary - - opts = [i.option_list for i in parser.option_groups] - opts.append(parser.option_list) - flattened_opts = chain.from_iterable(opts) - if current.startswith("-"): - for opt in flattened_opts: - if opt.help != optparse.SUPPRESS_HELP: - subcommands += opt._long_opts + opt._short_opts - else: - # get completion type given cwords and all available options - completion_type = get_path_completion_type(cwords, cword, flattened_opts) - if completion_type: - subcommands = list(auto_complete_paths(current, completion_type)) - - print(" ".join([x for x in subcommands if x.startswith(current)])) - sys.exit(1) - - -def get_path_completion_type( - cwords: list[str], cword: int, opts: Iterable[Any] -) -> str | None: - """Get the type of path completion (``file``, ``dir``, ``path`` or None) - - :param cwords: same as the environmental variable ``COMP_WORDS`` - :param cword: same as the environmental variable ``COMP_CWORD`` - :param opts: The available options to check - :return: path completion type (``file``, ``dir``, ``path`` or None) - """ - if cword < 2 or not cwords[cword - 2].startswith("-"): - return None - for opt in opts: - if opt.help == optparse.SUPPRESS_HELP: - continue - for o in str(opt).split("/"): - if cwords[cword - 2].split("=")[0] == o: - if not opt.metavar or any( - x in ("path", "file", "dir") for x in opt.metavar.split("/") - ): - return opt.metavar - return None - - -def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]: - """If ``completion_type`` is ``file`` or ``path``, list all regular files - and directories starting with ``current``; otherwise only list directories - starting with ``current``. - - :param current: The word to be completed - :param completion_type: path completion type(``file``, ``path`` or ``dir``) - :return: A generator of regular files and/or directories - """ - directory, filename = os.path.split(current) - current_path = os.path.abspath(directory) - # Don't complete paths if they can't be accessed - if not os.access(current_path, os.R_OK): - return - filename = os.path.normcase(filename) - # list all files that start with ``filename`` - file_list = ( - x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename) - ) - for f in file_list: - opt = os.path.join(current_path, f) - comp_file = os.path.normcase(os.path.join(directory, f)) - # complete regular files when there is not ``<dir>`` after option - # complete directories when there is ``<file>``, ``<path>`` or - # ``<dir>``after option - if completion_type != "dir" and os.path.isfile(opt): - yield comp_file - elif os.path.isdir(opt): - yield os.path.join(comp_file, "") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/base_command.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/base_command.py deleted file mode 100644 index 499a46f96..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/base_command.py +++ /dev/null @@ -1,255 +0,0 @@ -"""Base Command class, and related routines""" - -from __future__ import annotations - -import logging -import logging.config -import optparse -import os -import sys -import traceback -from optparse import Values -from typing import Callable - -from pip._vendor.rich import reconfigure -from pip._vendor.rich import traceback as rich_traceback - -from pip._internal.cli import cmdoptions -from pip._internal.cli.command_context import CommandContextMixIn -from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter -from pip._internal.cli.status_codes import ( - ERROR, - PREVIOUS_BUILD_DIR_ERROR, - UNKNOWN_ERROR, - VIRTUALENV_NOT_FOUND, -) -from pip._internal.exceptions import ( - BadCommand, - CommandError, - DiagnosticPipError, - InstallationError, - NetworkConnectionError, - PreviousBuildDirError, -) -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging -from pip._internal.utils.misc import get_prog, normalize_path -from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry -from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry -from pip._internal.utils.virtualenv import running_under_virtualenv - -__all__ = ["Command"] - -logger = logging.getLogger(__name__) - - -class Command(CommandContextMixIn): - usage: str = "" - ignore_require_venv: bool = False - - def __init__(self, name: str, summary: str, isolated: bool = False) -> None: - super().__init__() - - self.name = name - self.summary = summary - self.parser = ConfigOptionParser( - usage=self.usage, - prog=f"{get_prog()} {name}", - formatter=UpdatingDefaultsHelpFormatter(), - add_help_option=False, - name=name, - description=self.__doc__, - isolated=isolated, - ) - - self.tempdir_registry: TempDirRegistry | None = None - - # Commands should add options to this option group - optgroup_name = f"{self.name.capitalize()} Options" - self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) - - # Add the general options - gen_opts = cmdoptions.make_option_group( - cmdoptions.general_group, - self.parser, - ) - self.parser.add_option_group(gen_opts) - - self.add_options() - - def add_options(self) -> None: - pass - - def handle_pip_version_check(self, options: Values) -> None: - """ - This is a no-op so that commands by default do not do the pip version - check. - """ - # Make sure we do the pip version check if the index_group options - # are present. - assert not hasattr(options, "no_index") - - def run(self, options: Values, args: list[str]) -> int: - raise NotImplementedError - - def _run_wrapper(self, level_number: int, options: Values, args: list[str]) -> int: - def _inner_run() -> int: - try: - return self.run(options, args) - finally: - self.handle_pip_version_check(options) - - if options.debug_mode: - rich_traceback.install(show_locals=True) - return _inner_run() - - try: - status = _inner_run() - assert isinstance(status, int) - return status - except DiagnosticPipError as exc: - logger.error("%s", exc, extra={"rich": True}) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except PreviousBuildDirError as exc: - logger.critical(str(exc)) - logger.debug("Exception information:", exc_info=True) - - return PREVIOUS_BUILD_DIR_ERROR - except ( - InstallationError, - BadCommand, - NetworkConnectionError, - ) as exc: - logger.critical(str(exc)) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except CommandError as exc: - logger.critical("%s", exc) - logger.debug("Exception information:", exc_info=True) - - return ERROR - except BrokenStdoutLoggingError: - # Bypass our logger and write any remaining messages to - # stderr because stdout no longer works. - print("ERROR: Pipe to stdout was broken", file=sys.stderr) - if level_number <= logging.DEBUG: - traceback.print_exc(file=sys.stderr) - - return ERROR - except KeyboardInterrupt: - logger.critical("Operation cancelled by user") - logger.debug("Exception information:", exc_info=True) - - return ERROR - except BaseException: - logger.critical("Exception:", exc_info=True) - - return UNKNOWN_ERROR - - def parse_args(self, args: list[str]) -> tuple[Values, list[str]]: - # factored out for testability - return self.parser.parse_args(args) - - def main(self, args: list[str]) -> int: - try: - with self.main_context(): - return self._main(args) - finally: - logging.shutdown() - - def _main(self, args: list[str]) -> int: - # We must initialize this before the tempdir manager, otherwise the - # configuration would not be accessible by the time we clean up the - # tempdir manager. - self.tempdir_registry = self.enter_context(tempdir_registry()) - # Intentionally set as early as possible so globally-managed temporary - # directories are available to the rest of the code. - self.enter_context(global_tempdir_manager()) - - options, args = self.parse_args(args) - - # Set verbosity so that it can be used elsewhere. - self.verbosity = options.verbose - options.quiet - if options.debug_mode: - self.verbosity = 2 - - if hasattr(options, "progress_bar") and options.progress_bar == "auto": - options.progress_bar = "on" if self.verbosity >= 0 else "off" - - reconfigure(no_color=options.no_color) - level_number = setup_logging( - verbosity=self.verbosity, - no_color=options.no_color, - user_log_file=options.log, - ) - - always_enabled_features = set(options.features_enabled) & set( - cmdoptions.ALWAYS_ENABLED_FEATURES - ) - if always_enabled_features: - logger.warning( - "The following features are always enabled: %s. ", - ", ".join(sorted(always_enabled_features)), - ) - - # Make sure that the --python argument isn't specified after the - # subcommand. We can tell, because if --python was specified, - # we should only reach this point if we're running in the created - # subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment - # variable set. - if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: - logger.critical( - "The --python option must be placed before the pip subcommand name" - ) - sys.exit(ERROR) - - # TODO: Try to get these passing down from the command? - # without resorting to os.environ to hold these. - # This also affects isolated builds and it should. - - if options.no_input: - os.environ["PIP_NO_INPUT"] = "1" - - if options.exists_action: - os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action) - - if options.require_venv and not self.ignore_require_venv: - # If a venv is required check if it can really be found - if not running_under_virtualenv(): - logger.critical("Could not find an activated virtualenv (required).") - sys.exit(VIRTUALENV_NOT_FOUND) - - if options.cache_dir: - options.cache_dir = normalize_path(options.cache_dir) - if not check_path_owner(options.cache_dir): - logger.warning( - "The directory '%s' or its parent directory is not owned " - "or is not writable by the current user. The cache " - "has been disabled. Check the permissions and owner of " - "that directory. If executing pip with sudo, you should " - "use sudo's -H flag.", - options.cache_dir, - ) - options.cache_dir = None - - if ( - "inprocess-build-deps" in options.features_enabled - and os.environ.get("PIP_CONSTRAINT", "") - and "build-constraint" not in options.features_enabled - ): - logger.warning( - "In-process build dependencies are enabled, " - "PIP_CONSTRAINT will have no effect for build dependencies" - ) - options.features_enabled.append("build-constraint") - - return self._run_wrapper(level_number, options, args) - - def handler_map(self) -> dict[str, Callable[[Values, list[str]], None]]: - """ - map of names to handler actions for commands with sub-actions - """ - return {} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/cmdoptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/cmdoptions.py deleted file mode 100644 index a269f8614..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/cmdoptions.py +++ /dev/null @@ -1,1267 +0,0 @@ -""" -shared options and groups - -The principle here is to define options once, but *not* instantiate them -globally. One reason being that options with action='append' can carry state -between parses. pip parses general options twice internally, and shouldn't -pass on state. To be consistent, all options will follow this design. -""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False -from __future__ import annotations - -import logging -import os -import pathlib -import textwrap -from functools import partial -from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values -from textwrap import dedent -from typing import Any, Callable - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli.parser import ConfigOptionParser -from pip._internal.exceptions import CommandError -from pip._internal.locations import USER_CACHE_DIR, get_src_prefix -from pip._internal.models.format_control import FormatControl -from pip._internal.models.index import PyPI -from pip._internal.models.release_control import ReleaseControl -from pip._internal.models.target_python import TargetPython -from pip._internal.utils.datetime import parse_iso_datetime -from pip._internal.utils.hashes import STRONG_HASHES -from pip._internal.utils.misc import strtobool - -logger = logging.getLogger(__name__) - - -def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None: - """ - Raise an option parsing error using parser.error(). - - Args: - parser: an OptionParser instance. - option: an Option instance. - msg: the error text. - """ - msg = f"{option} error: {msg}" - msg = textwrap.fill(" ".join(msg.split())) - parser.error(msg) - - -def make_option_group(group: dict[str, Any], parser: ConfigOptionParser) -> OptionGroup: - """ - Return an OptionGroup object - group -- assumed to be dict with 'name' and 'options' keys - parser -- an optparse Parser - """ - option_group = OptionGroup(parser, group["name"]) - for option in group["options"]: - option_group.add_option(option()) - return option_group - - -def check_dist_restriction(options: Values, check_target: bool = False) -> None: - """Function for determining if custom platform options are allowed. - - :param options: The OptionParser options. - :param check_target: Whether or not to check if --target is being used. - """ - dist_restriction_set = any( - [ - options.python_version, - options.platforms, - options.abis, - options.implementation, - ] - ) - - binary_only = FormatControl(set(), {":all:"}) - sdist_dependencies_allowed = ( - options.format_control != binary_only and not options.ignore_dependencies - ) - - # Installations or downloads using dist restrictions must not combine - # source distributions and dist-specific wheels, as they are not - # guaranteed to be locally compatible. - if dist_restriction_set and sdist_dependencies_allowed: - raise CommandError( - "When restricting platform and interpreter constraints using " - "--python-version, --platform, --abi, or --implementation, " - "either --no-deps must be set, or --only-binary=:all: must be " - "set and --no-binary must not be set (or must be set to " - ":none:)." - ) - - if check_target: - if not options.dry_run and dist_restriction_set and not options.target_dir: - raise CommandError( - "Can not use any platform or abi specific options unless " - "installing via '--target' or using '--dry-run'" - ) - - -def check_build_constraints(options: Values) -> None: - """Function for validating build constraints options. - - :param options: The OptionParser options. - """ - if hasattr(options, "build_constraints") and options.build_constraints: - if not options.build_isolation: - raise CommandError( - "--build-constraint cannot be used with --no-build-isolation." - ) - - # Import here to avoid circular imports - from pip._internal.network.session import PipSession - from pip._internal.req.req_file import get_file_content - - # Eagerly check build constraints file contents - # is valid so that we don't fail in when trying - # to check constraints in isolated build process - with PipSession() as session: - for constraint_file in options.build_constraints: - get_file_content(constraint_file, session) - - -def _path_option_check(option: Option, opt: str, value: str) -> str: - return os.path.expanduser(value) - - -def _package_name_option_check(option: Option, opt: str, value: str) -> str: - return canonicalize_name(value) - - -class PipOption(Option): - TYPES = Option.TYPES + ("path", "package_name") - TYPE_CHECKER = Option.TYPE_CHECKER.copy() - TYPE_CHECKER["package_name"] = _package_name_option_check - TYPE_CHECKER["path"] = _path_option_check - - -########### -# options # -########### - -help_: Callable[..., Option] = partial( - Option, - "-h", - "--help", - dest="help", - action="help", - help="Show help.", -) - -debug_mode: Callable[..., Option] = partial( - Option, - "--debug", - dest="debug_mode", - action="store_true", - default=False, - help=( - "Let unhandled exceptions propagate outside the main subroutine, " - "instead of logging them to stderr." - ), -) - -isolated_mode: Callable[..., Option] = partial( - Option, - "--isolated", - dest="isolated_mode", - action="store_true", - default=False, - help=( - "Run pip in an isolated mode, ignoring environment variables and user " - "configuration." - ), -) - -require_virtualenv: Callable[..., Option] = partial( - Option, - "--require-virtualenv", - "--require-venv", - dest="require_venv", - action="store_true", - default=False, - help=( - "Allow pip to only run in a virtual environment; exit with an error otherwise." - ), -) - -override_externally_managed: Callable[..., Option] = partial( - Option, - "--break-system-packages", - dest="override_externally_managed", - action="store_true", - help="Allow pip to modify an EXTERNALLY-MANAGED Python installation", -) - -python: Callable[..., Option] = partial( - Option, - "--python", - dest="python", - help="Run pip with the specified Python interpreter.", -) - -verbose: Callable[..., Option] = partial( - Option, - "-v", - "--verbose", - dest="verbose", - action="count", - default=0, - help="Give more output. Option is additive, and can be used up to 3 times.", -) - -no_color: Callable[..., Option] = partial( - Option, - "--no-color", - dest="no_color", - action="store_true", - default=False, - help="Suppress colored output.", -) - -version: Callable[..., Option] = partial( - Option, - "-V", - "--version", - dest="version", - action="store_true", - help="Show version and exit.", -) - -quiet: Callable[..., Option] = partial( - Option, - "-q", - "--quiet", - dest="quiet", - action="count", - default=0, - help=( - "Give less output. Option is additive, and can be used up to 3" - " times (corresponding to WARNING, ERROR, and CRITICAL logging" - " levels)." - ), -) - -progress_bar: Callable[..., Option] = partial( - Option, - "--progress-bar", - dest="progress_bar", - type="choice", - choices=["auto", "on", "off", "raw"], - default="auto", - help=( - "Specify whether the progress bar should be used. In 'auto'" - " mode, --quiet will suppress all progress bars." - " [auto, on, off, raw] (default: auto)" - ), -) - -log: Callable[..., Option] = partial( - PipOption, - "--log", - "--log-file", - "--local-log", - dest="log", - metavar="path", - type="path", - help="Path to a verbose appending log.", -) - -no_input: Callable[..., Option] = partial( - Option, - # Don't ask for input - "--no-input", - dest="no_input", - action="store_true", - default=False, - help="Disable prompting for input.", -) - -keyring_provider: Callable[..., Option] = partial( - Option, - "--keyring-provider", - dest="keyring_provider", - choices=["auto", "disabled", "import", "subprocess"], - default="auto", - help=( - "Enable the credential lookup via the keyring library if user input is allowed." - " Specify which mechanism to use [auto, disabled, import, subprocess]." - " (default: %default)" - ), -) - -proxy: Callable[..., Option] = partial( - Option, - "--proxy", - dest="proxy", - type="str", - default="", - help="Specify a proxy in the form scheme://[user:passwd@]proxy.server:port.", -) - -retries: Callable[..., Option] = partial( - Option, - "--retries", - dest="retries", - type="int", - default=5, - help="Maximum attempts to establish a new HTTP connection. (default: %default)", -) - -resume_retries: Callable[..., Option] = partial( - Option, - "--resume-retries", - dest="resume_retries", - type="int", - default=5, - help="Maximum attempts to resume or restart an incomplete download. " - "(default: %default)", -) - -timeout: Callable[..., Option] = partial( - Option, - "--timeout", - "--default-timeout", - metavar="sec", - dest="timeout", - type="float", - default=15, - help="Set the socket timeout (default %default seconds).", -) - - -def exists_action() -> Option: - return Option( - # Option when path already exist - "--exists-action", - dest="exists_action", - type="choice", - choices=["s", "i", "w", "b", "a"], - default=[], - action="append", - metavar="action", - help="Default action when a path already exists: " - "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.", - ) - - -cert: Callable[..., Option] = partial( - PipOption, - "--cert", - dest="cert", - type="path", - metavar="path", - help=( - "Path to PEM-encoded CA certificate bundle. " - "If provided, overrides the default. " - "See 'SSL Certificate Verification' in pip documentation " - "for more information." - ), -) - -client_cert: Callable[..., Option] = partial( - PipOption, - "--client-cert", - dest="client_cert", - type="path", - default=None, - metavar="path", - help="Path to SSL client certificate, a single file containing the " - "private key and the certificate in PEM format.", -) - -index_url: Callable[..., Option] = partial( - Option, - "-i", - "--index-url", - "--pypi-url", - dest="index_url", - metavar="URL", - default=PyPI.simple_url, - help="Base URL of the Python Package Index (default %default). " - "This should point to a repository compliant with PEP 503 " - "(the simple repository API) or a local directory laid out " - "in the same format.", -) - - -def extra_index_url() -> Option: - return Option( - "--extra-index-url", - dest="extra_index_urls", - metavar="URL", - action="append", - default=[], - help="Extra URLs of package indexes to use in addition to " - "--index-url. Should follow the same rules as " - "--index-url.", - ) - - -no_index: Callable[..., Option] = partial( - Option, - "--no-index", - dest="no_index", - action="store_true", - default=False, - help="Ignore package index (only looking at --find-links URLs instead).", -) - - -def find_links() -> Option: - return Option( - "-f", - "--find-links", - dest="find_links", - action="append", - default=[], - metavar="url", - help="If a URL or path to an html file, then parse for links to " - "archives such as sdist (.tar.gz) or wheel (.whl) files. " - "If a local path or file:// URL that's a directory, " - "then look for archives in the directory listing. " - "Links to VCS project URLs are not supported.", - ) - - -def _handle_uploaded_prior_to( - option: Option, opt: str, value: str, parser: OptionParser -) -> None: - """ - This is an optparse.Option callback for the --uploaded-prior-to option. - - Parses an ISO 8601 datetime string. If no timezone is specified in the string, - local timezone is used. - - Note: This option only works with indexes that provide upload-time metadata - as specified in the simple repository API: - https://packaging.python.org/en/latest/specifications/simple-repository-api/ - """ - if value is None: - return None - - try: - uploaded_prior_to = parse_iso_datetime(value) - # Use local timezone if no offset is given in the ISO string. - if uploaded_prior_to.tzinfo is None: - uploaded_prior_to = uploaded_prior_to.astimezone() - parser.values.uploaded_prior_to = uploaded_prior_to - except ValueError as exc: - msg = ( - f"invalid value: {value!r}: {exc}. " - f"Expected an ISO 8601 datetime string, " - f"e.g '2023-01-01' or '2023-01-01T00:00:00Z'" - ) - raise_option_error(parser, option=option, msg=msg) - - -def uploaded_prior_to() -> Option: - return Option( - "--uploaded-prior-to", - dest="uploaded_prior_to", - metavar="datetime", - action="callback", - callback=_handle_uploaded_prior_to, - type="str", - help=( - "Only consider packages uploaded prior to the given date time. " - "Accepts ISO 8601 strings (e.g., '2023-01-01T00:00:00Z'). " - "Uses local timezone if none specified. Only effective when " - "installing from indexes that provide upload-time metadata." - ), - ) - - -def trusted_host() -> Option: - return Option( - "--trusted-host", - dest="trusted_hosts", - action="append", - metavar="HOSTNAME", - default=[], - help="Mark this host or host:port pair as trusted, even though it " - "does not have valid or any HTTPS.", - ) - - -def constraints() -> Option: - return Option( - "-c", - "--constraint", - dest="constraints", - action="append", - default=[], - metavar="file", - help="Constrain versions using the given constraints file. " - "This option can be used multiple times.", - ) - - -def build_constraints() -> Option: - return Option( - "--build-constraint", - dest="build_constraints", - action="append", - type="str", - default=[], - metavar="file", - help=( - "Constrain build dependencies using the given constraints file. " - "This option can be used multiple times." - ), - ) - - -def requirements() -> Option: - return Option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help="Install from the given requirements file. " - "This option can be used multiple times.", - ) - - -def requirements_from_scripts() -> Option: - return Option( - "--requirements-from-script", - action="append", - default=[], - dest="requirements_from_scripts", - metavar="file", - help="Install dependencies of the given script file" - "as defined by PEP 723 inline metadata. ", - ) - - -def editable() -> Option: - return Option( - "-e", - "--editable", - dest="editables", - action="append", - default=[], - metavar="path/url", - help=( - "Install a project in editable mode (i.e. setuptools " - '"develop mode") from a local project path or a VCS url.' - ), - ) - - -def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None: - value = os.path.abspath(value) - setattr(parser.values, option.dest, value) - - -src: Callable[..., Option] = partial( - PipOption, - "--src", - "--source", - "--source-dir", - "--source-directory", - dest="src_dir", - type="path", - metavar="dir", - default=get_src_prefix(), - action="callback", - callback=_handle_src, - help="Directory to check out editable projects into. " - 'The default in a virtualenv is "<venv path>/src". ' - 'The default for global installs is "<current dir>/src".', -) - - -def _get_format_control(values: Values, option: Option) -> Any: - """Get a format_control object.""" - return getattr(values, option.dest) - - -def _handle_no_binary( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_format_control(parser.values, option) - FormatControl.handle_mutual_excludes( - value, - existing.no_binary, - existing.only_binary, - ) - - -def _handle_only_binary( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_format_control(parser.values, option) - FormatControl.handle_mutual_excludes( - value, - existing.only_binary, - existing.no_binary, - ) - - -def no_binary() -> Option: - format_control = FormatControl(set(), set()) - return Option( - "--no-binary", - dest="format_control", - action="callback", - callback=_handle_no_binary, - type="str", - default=format_control, - help="Do not use binary packages. Can be supplied multiple times, and " - 'each time adds to the existing value. Accepts either ":all:" to ' - 'disable all binary packages, ":none:" to empty the set (notice ' - "the colons), or one or more package names with commas between " - "them (no colons). Note that some packages are tricky to compile " - "and may fail to install when this option is used on them.", - ) - - -def only_binary() -> Option: - format_control = FormatControl(set(), set()) - return Option( - "--only-binary", - dest="format_control", - action="callback", - callback=_handle_only_binary, - type="str", - default=format_control, - help="Do not use source packages. Can be supplied multiple times, and " - 'each time adds to the existing value. Accepts either ":all:" to ' - 'disable all source packages, ":none:" to empty the set, or one ' - "or more package names with commas between them. Packages " - "without binary distributions will fail to install when this " - "option is used on them.", - ) - - -def _get_release_control(values: Values, option: Option) -> Any: - """Get a release_control object.""" - return getattr(values, option.dest) - - -def _handle_all_releases( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_release_control(parser.values, option) - existing.handle_mutual_excludes( - value, - existing.all_releases, - existing.only_final, - "all_releases", - ) - - -def _handle_only_final( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - existing = _get_release_control(parser.values, option) - existing.handle_mutual_excludes( - value, - existing.only_final, - existing.all_releases, - "only_final", - ) - - -def all_releases() -> Option: - release_control = ReleaseControl(set(), set()) - return Option( - "--all-releases", - dest="release_control", - action="callback", - callback=_handle_all_releases, - type="str", - default=release_control, - help="Allow all release types (including pre-releases) for a package. " - "Can be supplied multiple times, and each time adds to the existing " - 'value. Accepts either ":all:" to allow pre-releases for all ' - 'packages, ":none:" to empty the set (notice the colons), or one or ' - "more package names with commas between them (no colons). Cannot be " - "used with --pre.", - ) - - -def only_final() -> Option: - release_control = ReleaseControl(set(), set()) - return Option( - "--only-final", - dest="release_control", - action="callback", - callback=_handle_only_final, - type="str", - default=release_control, - help="Only allow final releases (no pre-releases) for a package. Can be " - "supplied multiple times, and each time adds to the existing value. " - 'Accepts either ":all:" to disable pre-releases for all packages, ' - '":none:" to empty the set, or one or more package names with commas ' - "between them. Cannot be used with --pre.", - ) - - -def check_release_control_exclusive(options: Values) -> None: - """ - Raise an error if --pre is used with --all-releases or --only-final, - and transform --pre into --all-releases :all: if used alone. - """ - if not hasattr(options, "pre") or not options.pre: - return - - release_control = options.release_control - if release_control.all_releases or release_control.only_final: - raise CommandError("--pre cannot be used with --all-releases or --only-final.") - - # Transform --pre into --all-releases :all: - release_control.all_releases.add(":all:") - - -platforms: Callable[..., Option] = partial( - Option, - "--platform", - dest="platforms", - metavar="platform", - action="append", - default=None, - help=( - "Only use wheels compatible with <platform>. Defaults to the " - "platform of the running system. Use this option multiple times to " - "specify multiple platforms supported by the target interpreter." - ), -) - - -# This was made a separate function for unit-testing purposes. -def _convert_python_version(value: str) -> tuple[tuple[int, ...], str | None]: - """ - Convert a version string like "3", "37", or "3.7.3" into a tuple of ints. - - :return: A 2-tuple (version_info, error_msg), where `error_msg` is - non-None if and only if there was a parsing error. - """ - if not value: - # The empty string is the same as not providing a value. - return (None, None) - - parts = value.split(".") - if len(parts) > 3: - return ((), "at most three version parts are allowed") - - if len(parts) == 1: - # Then we are in the case of "3" or "37". - value = parts[0] - if len(value) > 1: - parts = [value[0], value[1:]] - - try: - version_info = tuple(int(part) for part in parts) - except ValueError: - return ((), "each version part must be an integer") - - return (version_info, None) - - -def _handle_python_version( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - """ - Handle a provided --python-version value. - """ - version_info, error_msg = _convert_python_version(value) - if error_msg is not None: - msg = f"invalid --python-version value: {value!r}: {error_msg}" - raise_option_error(parser, option=option, msg=msg) - - parser.values.python_version = version_info - - -python_version: Callable[..., Option] = partial( - Option, - "--python-version", - dest="python_version", - metavar="python_version", - action="callback", - callback=_handle_python_version, - type="str", - default=None, - help=dedent( - """\ - The Python interpreter version to use for wheel and "Requires-Python" - compatibility checks. Defaults to a version derived from the running - interpreter. The version can be specified using up to three dot-separated - integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor - version can also be given as a string without dots (e.g. "37" for 3.7.0). - """ - ), -) - - -implementation: Callable[..., Option] = partial( - Option, - "--implementation", - dest="implementation", - metavar="implementation", - default=None, - help=( - "Only use wheels compatible with Python " - "implementation <implementation>, e.g. 'pp', 'jy', 'cp', " - " or 'ip'. If not specified, then the current " - "interpreter implementation is used. Use 'py' to force " - "implementation-agnostic wheels." - ), -) - - -abis: Callable[..., Option] = partial( - Option, - "--abi", - dest="abis", - metavar="abi", - action="append", - default=None, - help=( - "Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'. " - "If not specified, then the current interpreter abi tag is used. " - "Use this option multiple times to specify multiple abis supported " - "by the target interpreter. Generally you will need to specify " - "--implementation, --platform, and --python-version when using this " - "option." - ), -) - - -def add_target_python_options(cmd_opts: OptionGroup) -> None: - cmd_opts.add_option(platforms()) - cmd_opts.add_option(python_version()) - cmd_opts.add_option(implementation()) - cmd_opts.add_option(abis()) - - -def make_target_python(options: Values) -> TargetPython: - target_python = TargetPython( - platforms=options.platforms, - py_version_info=options.python_version, - abis=options.abis, - implementation=options.implementation, - ) - - return target_python - - -def prefer_binary() -> Option: - return Option( - "--prefer-binary", - dest="prefer_binary", - action="store_true", - default=False, - help=( - "Prefer binary packages over source packages, even if the " - "source packages are newer." - ), - ) - - -cache_dir: Callable[..., Option] = partial( - PipOption, - "--cache-dir", - dest="cache_dir", - default=USER_CACHE_DIR, - metavar="dir", - type="path", - help="Store the cache data in <dir>.", -) - - -def _handle_no_cache_dir( - option: Option, opt: str, value: str, parser: OptionParser -) -> None: - """ - Process a value provided for the --no-cache-dir option. - - This is an optparse.Option callback for the --no-cache-dir option. - """ - # The value argument will be None if --no-cache-dir is passed via the - # command-line, since the option doesn't accept arguments. However, - # the value can be non-None if the option is triggered e.g. by an - # environment variable, like PIP_NO_CACHE_DIR=true. - if value is not None: - # Then parse the string value to get argument error-checking. - try: - strtobool(value) - except ValueError as exc: - raise_option_error(parser, option=option, msg=str(exc)) - - # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool() - # converted to 0 (like "false" or "no") caused cache_dir to be disabled - # rather than enabled (logic would say the latter). Thus, we disable - # the cache directory not just on values that parse to True, but (for - # backwards compatibility reasons) also on values that parse to False. - # In other words, always set it to False if the option is provided in - # some (valid) form. - parser.values.cache_dir = False - - -no_cache: Callable[..., Option] = partial( - Option, - "--no-cache-dir", - dest="cache_dir", - action="callback", - callback=_handle_no_cache_dir, - help="Disable the cache.", -) - -no_deps: Callable[..., Option] = partial( - Option, - "--no-deps", - "--no-dependencies", - dest="ignore_dependencies", - action="store_true", - default=False, - help="Don't install package dependencies.", -) - - -def _handle_dependency_group( - option: Option, opt: str, value: str, parser: OptionParser -) -> None: - """ - Process a value provided for the --group option. - - Splits on the rightmost ":", and validates that the path (if present) ends - in `pyproject.toml`. Defaults the path to `pyproject.toml` when one is not given. - - `:` cannot appear in dependency group names, so this is a safe and simple parse. - - This is an optparse.Option callback for the dependency_groups option. - """ - path, sep, groupname = value.rpartition(":") - if not sep: - path = "pyproject.toml" - else: - # check for 'pyproject.toml' filenames using pathlib - if pathlib.PurePath(path).name != "pyproject.toml": - msg = "group paths use 'pyproject.toml' filenames" - raise_option_error(parser, option=option, msg=msg) - - parser.values.dependency_groups.append((path, groupname)) - - -dependency_groups: Callable[..., Option] = partial( - Option, - "--group", - dest="dependency_groups", - default=[], - type=str, - action="callback", - callback=_handle_dependency_group, - metavar="[path:]group", - help='Install a named dependency-group from a "pyproject.toml" file. ' - 'If a path is given, the name of the file must be "pyproject.toml". ' - 'Defaults to using "pyproject.toml" in the current directory.', -) - -ignore_requires_python: Callable[..., Option] = partial( - Option, - "--ignore-requires-python", - dest="ignore_requires_python", - action="store_true", - help="Ignore the Requires-Python information.", -) - - -no_build_isolation: Callable[..., Option] = partial( - Option, - "--no-build-isolation", - dest="build_isolation", - action="store_false", - default=True, - help="Disable isolation when building a modern source distribution. " - "Build dependencies specified by PEP 518 must be already installed " - "if this option is used.", -) - -check_build_deps: Callable[..., Option] = partial( - Option, - "--check-build-dependencies", - dest="check_build_deps", - action="store_true", - default=False, - help="Check the build dependencies.", -) - - -use_pep517: Any = partial( - Option, - "--use-pep517", - dest="use_pep517", - action="store_true", - default=True, - help=SUPPRESS_HELP, -) - - -def _handle_config_settings( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - key, sep, val = value.partition("=") - if sep != "=": - parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL") - dest = getattr(parser.values, option.dest) - if dest is None: - dest = {} - setattr(parser.values, option.dest, dest) - if key in dest: - if isinstance(dest[key], list): - dest[key].append(val) - else: - dest[key] = [dest[key], val] - else: - dest[key] = val - - -config_settings: Callable[..., Option] = partial( - Option, - "-C", - "--config-settings", - dest="config_settings", - type=str, - action="callback", - callback=_handle_config_settings, - metavar="settings", - help="Configuration settings to be passed to the build backend. " - "Settings take the form KEY=VALUE. Use multiple --config-settings options " - "to pass multiple keys to the backend.", -) - -no_clean: Callable[..., Option] = partial( - Option, - "--no-clean", - action="store_true", - default=False, - help="Don't clean up build directories.", -) - -pre: Callable[..., Option] = partial( - Option, - "--pre", - action="store_true", - default=False, - help="Include pre-release and development versions. By default, " - "pip only finds stable versions.", -) - -json: Callable[..., Option] = partial( - Option, - "--json", - action="store_true", - default=False, - help="Output data in a machine-readable JSON format.", -) - -disable_pip_version_check: Callable[..., Option] = partial( - Option, - "--disable-pip-version-check", - dest="disable_pip_version_check", - action="store_true", - default=False, - help="Don't periodically check PyPI to determine whether a new version " - "of pip is available for download. Implied with --no-index.", -) - -root_user_action: Callable[..., Option] = partial( - Option, - "--root-user-action", - dest="root_user_action", - default="warn", - choices=["warn", "ignore"], - help="Action if pip is run as a root user [warn, ignore] (default: warn)", -) - - -def _handle_merge_hash( - option: Option, opt_str: str, value: str, parser: OptionParser -) -> None: - """Given a value spelled "algo:digest", append the digest to a list - pointed to in a dict by the algo name.""" - if not parser.values.hashes: - parser.values.hashes = {} - try: - algo, digest = value.split(":", 1) - except ValueError: - parser.error( - f"Arguments to {opt_str} must be a hash name " - "followed by a value, like --hash=sha256:" - "abcde..." - ) - if algo not in STRONG_HASHES: - parser.error( - "Allowed hash algorithms for {} are {}.".format( - opt_str, ", ".join(STRONG_HASHES) - ) - ) - parser.values.hashes.setdefault(algo, []).append(digest) - - -hash: Callable[..., Option] = partial( - Option, - "--hash", - # Hash values eventually end up in InstallRequirement.hashes due to - # __dict__ copying in process_line(). - dest="hashes", - action="callback", - callback=_handle_merge_hash, - type="string", - help="Verify that the package's archive matches this " - "hash before installing. Example: --hash=sha256:abcdef...", -) - - -require_hashes: Callable[..., Option] = partial( - Option, - "--require-hashes", - dest="require_hashes", - action="store_true", - default=False, - help="Require a hash to check each requirement against, for " - "repeatable installs. This option is implied when any package in a " - "requirements file has a --hash option.", -) - - -list_path: Callable[..., Option] = partial( - PipOption, - "--path", - dest="path", - type="path", - action="append", - help="Restrict to the specified installation path for listing " - "packages (can be used multiple times).", -) - - -def check_list_path_option(options: Values) -> None: - if options.path and (options.user or options.local): - raise CommandError("Cannot combine '--path' with '--user' or '--local'") - - -list_exclude: Callable[..., Option] = partial( - PipOption, - "--exclude", - dest="excludes", - action="append", - metavar="package", - type="package_name", - help="Exclude specified package from the output", -) - - -no_python_version_warning: Callable[..., Option] = partial( - Option, - "--no-python-version-warning", - dest="no_python_version_warning", - action="store_true", - default=False, - help=SUPPRESS_HELP, # No-op, a hold-over from the Python 2->3 transition. -) - - -# Features that are now always on. A warning is printed if they are used. -ALWAYS_ENABLED_FEATURES = [ - "truststore", # always on since 24.2 - "no-binary-enable-wheel-cache", # always on since 23.1 -] - -use_new_feature: Callable[..., Option] = partial( - Option, - "--use-feature", - dest="features_enabled", - metavar="feature", - action="append", - default=[], - choices=[ - "fast-deps", - "build-constraint", - "inprocess-build-deps", - ] - + ALWAYS_ENABLED_FEATURES, - help="Enable new functionality, that may be backward incompatible.", -) - -use_deprecated_feature: Callable[..., Option] = partial( - Option, - "--use-deprecated", - dest="deprecated_features_enabled", - metavar="feature", - action="append", - default=[], - choices=[ - "legacy-resolver", - "legacy-certs", - ], - help=("Enable deprecated functionality, that will be removed in the future."), -) - -########## -# groups # -########## - -general_group: dict[str, Any] = { - "name": "General Options", - "options": [ - help_, - debug_mode, - isolated_mode, - require_virtualenv, - python, - verbose, - version, - quiet, - log, - no_input, - keyring_provider, - proxy, - retries, - timeout, - exists_action, - trusted_host, - cert, - client_cert, - cache_dir, - no_cache, - disable_pip_version_check, - no_color, - no_python_version_warning, - use_new_feature, - use_deprecated_feature, - resume_retries, - ], -} - -index_group: dict[str, Any] = { - "name": "Package Index Options", - "options": [ - index_url, - extra_index_url, - no_index, - find_links, - uploaded_prior_to, - ], -} - -package_selection_group: dict[str, Any] = { - "name": "Package Selection Options", - "options": [ - pre, - all_releases, - only_final, - no_binary, - only_binary, - prefer_binary, - ], -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/command_context.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/command_context.py deleted file mode 100644 index 9c167bdc3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/command_context.py +++ /dev/null @@ -1,28 +0,0 @@ -from collections.abc import Generator -from contextlib import AbstractContextManager, ExitStack, contextmanager -from typing import TypeVar - -_T = TypeVar("_T", covariant=True) - - -class CommandContextMixIn: - def __init__(self) -> None: - super().__init__() - self._in_main_context = False - self._main_context = ExitStack() - - @contextmanager - def main_context(self) -> Generator[None, None, None]: - assert not self._in_main_context - - self._in_main_context = True - try: - with self._main_context: - yield - finally: - self._in_main_context = False - - def enter_context(self, context_provider: AbstractContextManager[_T]) -> _T: - assert self._in_main_context - - return self._main_context.enter_context(context_provider) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/index_command.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/index_command.py deleted file mode 100644 index 0f1ee1a4f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/index_command.py +++ /dev/null @@ -1,195 +0,0 @@ -""" -Contains command classes which may interact with an index / the network. - -Unlike its sister module, req_command, this module still uses lazy imports -so commands which don't always hit the network (e.g. list w/o --outdated or ---uptodate) don't need waste time importing PipSession and friends. -""" - -from __future__ import annotations - -import logging -import os -import sys -from functools import lru_cache -from optparse import Values -from typing import TYPE_CHECKING - -from pip._vendor import certifi - -from pip._internal.cli.base_command import Command -from pip._internal.cli.command_context import CommandContextMixIn - -if TYPE_CHECKING: - from ssl import SSLContext - - from pip._vendor.packaging.utils import NormalizedName - - from pip._internal.network.session import PipSession - -logger = logging.getLogger(__name__) - - -@lru_cache -def _create_truststore_ssl_context() -> SSLContext | None: - if sys.version_info < (3, 10): - logger.debug("Disabling truststore because Python version isn't 3.10+") - return None - - try: - import ssl - except ImportError: - logger.warning("Disabling truststore since ssl support is missing") - return None - - try: - from pip._vendor import truststore - except ImportError: - logger.warning("Disabling truststore because platform isn't supported") - return None - - ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - ctx.load_verify_locations(certifi.where()) - return ctx - - -class SessionCommandMixin(CommandContextMixIn): - """ - A class mixin for command classes needing _build_session(). - """ - - def __init__(self) -> None: - super().__init__() - self._session: PipSession | None = None - - @classmethod - def _get_index_urls(cls, options: Values) -> list[str] | None: - """Return a list of index urls from user-provided options.""" - index_urls = [] - if not getattr(options, "no_index", False): - url = getattr(options, "index_url", None) - if url: - index_urls.append(url) - urls = getattr(options, "extra_index_urls", None) - if urls: - index_urls.extend(urls) - # Return None rather than an empty list - return index_urls or None - - def get_default_session(self, options: Values) -> PipSession: - """Get a default-managed session.""" - if self._session is None: - self._session = self.enter_context(self._build_session(options)) - # there's no type annotation on requests.Session, so it's - # automatically ContextManager[Any] and self._session becomes Any, - # then https://github.com/python/mypy/issues/7696 kicks in - assert self._session is not None - return self._session - - def _build_session( - self, - options: Values, - retries: int | None = None, - timeout: int | None = None, - ) -> PipSession: - from pip._internal.network.session import PipSession - - cache_dir = options.cache_dir - assert not cache_dir or os.path.isabs(cache_dir) - - if "legacy-certs" not in options.deprecated_features_enabled: - ssl_context = _create_truststore_ssl_context() - else: - ssl_context = None - - session = PipSession( - cache=os.path.join(cache_dir, "http-v2") if cache_dir else None, - retries=retries if retries is not None else options.retries, - resume_retries=options.resume_retries, - trusted_hosts=options.trusted_hosts, - index_urls=self._get_index_urls(options), - ssl_context=ssl_context, - ) - - # Handle custom ca-bundles from the user - if options.cert: - session.verify = options.cert - - # Handle SSL client certificate - if options.client_cert: - session.cert = options.client_cert - - # Handle timeouts - if options.timeout or timeout: - session.timeout = timeout if timeout is not None else options.timeout - - # Handle configured proxies - if options.proxy: - session.proxies = { - "http": options.proxy, - "https": options.proxy, - } - session.trust_env = False - session.pip_proxy = options.proxy - - # Determine if we can prompt the user for authentication or not - session.auth.prompting = not options.no_input - session.auth.keyring_provider = options.keyring_provider - - return session - - -def _pip_self_version_check(session: PipSession, options: Values) -> None: - from pip._internal.self_outdated_check import pip_self_version_check as check - - check(session, options) - - -class IndexGroupCommand(Command, SessionCommandMixin): - """ - Abstract base class for commands with the index_group options. - - This also corresponds to the commands that permit the pip version check. - """ - - def should_exclude_prerelease( - self, options: Values, package_name: NormalizedName - ) -> bool: - """ - Determine if pre-releases should be excluded for a package. - """ - # Check per-package release control settings - if options.release_control: - allow_prereleases = options.release_control.allows_prereleases(package_name) - if allow_prereleases is True: - return False # Include pre-releases - elif allow_prereleases is False: - return True # Exclude pre-releases - - # No specific setting: exclude prereleases by default - return True - - def handle_pip_version_check(self, options: Values) -> None: - """ - Do the pip version check if not disabled. - - This overrides the default behavior of not doing the check. - """ - # Make sure the index_group options are present. - assert hasattr(options, "no_index") - - if options.disable_pip_version_check or options.no_index: - return - - try: - # Otherwise, check if we're using the latest version of pip available. - session = self._build_session( - options, - retries=0, - timeout=min(5, options.timeout), - ) - with session: - _pip_self_version_check(session, options) - except Exception: - logger.warning("There was an error checking the latest version of pip.") - logger.debug("See below for error", exc_info=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main.py deleted file mode 100644 index 78c30c3a9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main.py +++ /dev/null @@ -1,85 +0,0 @@ -"""Primary application entrypoint.""" - -from __future__ import annotations - -import locale -import logging -import os -import sys -import warnings - -logger = logging.getLogger(__name__) - - -# Do not import and use main() directly! Using it directly is actively -# discouraged by pip's maintainers. The name, location and behavior of -# this function is subject to change, so calling it directly is not -# portable across different pip versions. - -# In addition, running pip in-process is unsupported and unsafe. This is -# elaborated in detail at -# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program. -# That document also provides suggestions that should work for nearly -# all users that are considering importing and using main() directly. - -# However, we know that certain users will still want to invoke pip -# in-process. If you understand and accept the implications of using pip -# in an unsupported manner, the best approach is to use runpy to avoid -# depending on the exact location of this entry point. - -# The following example shows how to use runpy to invoke pip in that -# case: -# -# sys.argv = ["pip", your, args, here] -# runpy.run_module("pip", run_name="__main__") -# -# Note that this will exit the process after running, unlike a direct -# call to main. As it is not safe to do any processing after calling -# main, this should not be an issue in practice. - - -def main(args: list[str] | None = None) -> int: - # NOTE: Lazy imports to speed up import of this module, - # which is imported from the pip console script. This doesn't - # speed up normal pip execution, but might be important in the future - # if we use ``multiprocessing`` module, - # which imports __main__ for each spawned subprocess. - from pip._internal.cli.autocompletion import autocomplete - from pip._internal.cli.main_parser import parse_command - from pip._internal.commands import create_command - from pip._internal.exceptions import PipError - from pip._internal.utils import deprecation - - if args is None: - args = sys.argv[1:] - - # Suppress the pkg_resources deprecation warning - # Note - we use a module of .*pkg_resources to cover - # the normal case (pip._vendor.pkg_resources) and the - # devendored case (a bare pkg_resources) - warnings.filterwarnings( - action="ignore", category=DeprecationWarning, module=".*pkg_resources" - ) - - # Configure our deprecation warnings to be sent through loggers - deprecation.install_warning_logger() - - autocomplete() - - try: - cmd_name, cmd_args = parse_command(args) - except PipError as exc: - sys.stderr.write(f"ERROR: {exc}") - sys.stderr.write(os.linesep) - sys.exit(1) - - # Needed for locale.getpreferredencoding(False) to work - # in pip._internal.utils.encoding.auto_decode - try: - locale.setlocale(locale.LC_ALL, "") - except locale.Error as e: - # setlocale can apparently crash if locale are uninitialized - logger.debug("Ignoring error %s when setting locale", e) - command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) - - return command.main(cmd_args) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main_parser.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main_parser.py deleted file mode 100644 index 136852466..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/main_parser.py +++ /dev/null @@ -1,136 +0,0 @@ -"""A single place for constructing and exposing the main parser""" - -from __future__ import annotations - -import os -import subprocess -import sys - -from pip._vendor.rich.markup import escape - -from pip._internal.build_env import get_runnable_pip -from pip._internal.cli import cmdoptions -from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter -from pip._internal.commands import commands_dict, get_similar_commands -from pip._internal.exceptions import CommandError -from pip._internal.utils.misc import get_pip_version, get_prog - -__all__ = ["create_main_parser", "parse_command"] - - -def create_main_parser() -> ConfigOptionParser: - """Creates and returns the main parser for pip's CLI""" - - parser = ConfigOptionParser( - usage="\n%prog <command> [options]", - add_help_option=False, - formatter=UpdatingDefaultsHelpFormatter(), - name="global", - prog=get_prog(), - ) - parser.disable_interspersed_args() - - parser.version = get_pip_version() - - # add the general options - gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) - parser.add_option_group(gen_opts) - - # so the help formatter knows - parser.main = True # type: ignore - - # create command listing for description - description = [""] + [ - f"[optparse.longargs]{name:27}[/] {escape(command_info.summary)}" - for name, command_info in commands_dict.items() - ] - parser.description = "\n".join(description) - - return parser - - -def identify_python_interpreter(python: str) -> str | None: - # If the named file exists, use it. - # If it's a directory, assume it's a virtual environment and - # look for the environment's Python executable. - if os.path.exists(python): - if os.path.isdir(python): - # bin/python for Unix, Scripts/python.exe for Windows - # Try both in case of odd cases like cygwin. - for exe in ("bin/python", "Scripts/python.exe"): - py = os.path.join(python, exe) - if os.path.exists(py): - return py - else: - return python - - # Could not find the interpreter specified - return None - - -def parse_command(args: list[str]) -> tuple[str, list[str]]: - parser = create_main_parser() - - # Note: parser calls disable_interspersed_args(), so the result of this - # call is to split the initial args into the general options before the - # subcommand and everything else. - # For example: - # args: ['--timeout=5', 'install', '--user', 'INITools'] - # general_options: ['--timeout==5'] - # args_else: ['install', '--user', 'INITools'] - general_options, args_else = parser.parse_args(args) - - # --python - if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: - # Re-invoke pip using the specified Python interpreter - interpreter = identify_python_interpreter(general_options.python) - if interpreter is None: - raise CommandError( - f"Could not locate Python interpreter {general_options.python}" - ) - - pip_cmd = [ - interpreter, - get_runnable_pip(), - ] - pip_cmd.extend(args) - - # Set a flag so the child doesn't re-invoke itself, causing - # an infinite loop. - os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1" - returncode = 0 - try: - proc = subprocess.run(pip_cmd) - returncode = proc.returncode - except (subprocess.SubprocessError, OSError) as exc: - raise CommandError(f"Failed to run pip under {interpreter}: {exc}") - sys.exit(returncode) - - # --version - if general_options.version: - sys.stdout.write(parser.version) - sys.stdout.write(os.linesep) - sys.exit() - - # pip || pip help -> print_help() - if not args_else or (args_else[0] == "help" and len(args_else) == 1): - parser.print_help() - sys.exit() - - # the subcommand name - cmd_name = args_else[0] - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = [f'unknown command "{cmd_name}"'] - if guess: - msg.append(f'maybe you meant "{guess}"') - - raise CommandError(" - ".join(msg)) - - # all the args without the subcommand - cmd_args = args[:] - cmd_args.remove(cmd_name) - - return cmd_name, cmd_args diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/parser.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/parser.py deleted file mode 100644 index a49898020..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/parser.py +++ /dev/null @@ -1,358 +0,0 @@ -"""Base option parser setup""" - -from __future__ import annotations - -import logging -import optparse -import os -import re -import shutil -import sys -import textwrap -from collections.abc import Generator -from contextlib import suppress -from typing import Any, NoReturn - -from pip._vendor.rich.markup import escape -from pip._vendor.rich.theme import Theme - -from pip._internal.cli.status_codes import UNKNOWN_ERROR -from pip._internal.configuration import Configuration, ConfigurationError -from pip._internal.utils.logging import PipConsole -from pip._internal.utils.misc import redact_auth_from_url, strtobool - -logger = logging.getLogger(__name__) - - -class PrettyHelpFormatter(optparse.IndentedHelpFormatter): - """A prettier/less verbose help formatter for optparse.""" - - styles = { - "optparse.shortargs": "green", - "optparse.longargs": "cyan", - "optparse.groups": "bold blue", - "optparse.metavar": "yellow", - } - highlights = { - r"\s(-{1}[\w]+[\w-]*)": "shortargs", # highlight -letter as short args - r"\s(-{2}[\w]+[\w-]*)": "longargs", # highlight --words as long args - } - - def __init__(self, *args: Any, **kwargs: Any) -> None: - # help position must be aligned with __init__.parseopts.description - kwargs["max_help_position"] = 30 - kwargs["indent_increment"] = 1 - kwargs["width"] = shutil.get_terminal_size()[0] - 2 - super().__init__(*args, **kwargs) - - def format_option_strings(self, option: optparse.Option) -> str: - """Return a comma-separated list of option strings and metavars.""" - opts = [] - - if option._short_opts: - opts.append(f"[optparse.shortargs]{option._short_opts[0]}[/]") - if option._long_opts: - opts.append(f"[optparse.longargs]{option._long_opts[0]}[/]") - if len(opts) > 1: - opts.insert(1, ", ") - - if option.takes_value(): - assert option.dest is not None - metavar = option.metavar or option.dest.lower() - opts.append(f" [optparse.metavar]<{escape(metavar.lower())}>[/]") - - return "".join(opts) - - def format_option(self, option: optparse.Option) -> str: - """Overridden method with Rich support.""" - # fmt: off - result = [] - opts = self.option_strings[option] - opt_width = self.help_position - self.current_indent - 2 - # Remove the rich style tags before calculating width during - # text wrap calculations. Also store the length removed to adjust - # the padding in the else branch. - stripped = re.sub(r"(\[[a-z.]+\])|(\[\/\])", "", opts) - style_tag_length = len(opts) - len(stripped) - if len(stripped) > opt_width: - opts = "%*s%s\n" % (self.current_indent, "", opts) # noqa: UP031 - indent_first = self.help_position - else: # start help on same line as opts - opts = "%*s%-*s " % (self.current_indent, "", # noqa: UP031 - opt_width + style_tag_length, opts) - indent_first = 0 - result.append(opts) - if option.help: - help_text = self.expand_default(option) - help_lines = textwrap.wrap(help_text, self.help_width) - result.append("%*s%s\n" % (indent_first, "", help_lines[0])) # noqa: UP031 - result.extend(["%*s%s\n" % (self.help_position, "", line) # noqa: UP031 - for line in help_lines[1:]]) - elif opts[-1] != "\n": - result.append("\n") - return "".join(result) - # fmt: on - - def format_heading(self, heading: str) -> str: - if heading == "Options": - return "" - return "[optparse.groups]" + escape(heading) + ":[/]\n" - - def format_usage(self, usage: str) -> str: - """ - Ensure there is only one newline between usage and the first heading - if there is no description. - """ - contents = self.indent_lines(textwrap.dedent(usage), " ") - msg = f"\n[optparse.groups]Usage:[/] {escape(contents)}\n" - return msg - - def format_description(self, description: str | None) -> str: - # leave full control over description to us - if description: - if hasattr(self.parser, "main"): - label = "[optparse.groups]Commands:[/]" - else: - label = "[optparse.groups]Description:[/]" - - # some doc strings have initial newlines, some don't - description = description.lstrip("\n") - # some doc strings have final newlines and spaces, some don't - description = description.rstrip() - # dedent, then reindent - description = self.indent_lines(textwrap.dedent(description), " ") - description = f"{label}\n{description}\n" - return description - else: - return "" - - def format_epilog(self, epilog: str | None) -> str: - # leave full control over epilog to us - if epilog: - return escape(epilog) - else: - return "" - - def expand_default(self, option: optparse.Option) -> str: - """Overridden HelpFormatter.expand_default() which colorizes flags.""" - help = escape(super().expand_default(option)) - for regex, style in self.highlights.items(): - help = re.sub(regex, rf"[optparse.{style}] \1[/]", help) - return help - - def indent_lines(self, text: str, indent: str) -> str: - new_lines = [indent + line for line in text.split("\n")] - return "\n".join(new_lines) - - -class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): - """Custom help formatter for use in ConfigOptionParser. - - This is updates the defaults before expanding them, allowing - them to show up correctly in the help listing. - - Also redact auth from url type options - """ - - def expand_default(self, option: optparse.Option) -> str: - default_values = None - if self.parser is not None: - assert isinstance(self.parser, ConfigOptionParser) - self.parser._update_defaults(self.parser.defaults) - assert option.dest is not None - default_values = self.parser.defaults.get(option.dest) - help_text = super().expand_default(option) - - if default_values and option.metavar == "URL": - if isinstance(default_values, str): - default_values = [default_values] - - # If its not a list, we should abort and just return the help text - if not isinstance(default_values, list): - default_values = [] - - for val in default_values: - help_text = help_text.replace(val, redact_auth_from_url(val)) - - return help_text - - -class CustomOptionParser(optparse.OptionParser): - def insert_option_group( - self, idx: int, *args: Any, **kwargs: Any - ) -> optparse.OptionGroup: - """Insert an OptionGroup at a given position.""" - group = self.add_option_group(*args, **kwargs) - - self.option_groups.pop() - self.option_groups.insert(idx, group) - - return group - - @property - def option_list_all(self) -> list[optparse.Option]: - """Get a list of all options, including those in option groups.""" - res = self.option_list[:] - for i in self.option_groups: - res.extend(i.option_list) - - return res - - -class ConfigOptionParser(CustomOptionParser): - """Custom option parser which updates its defaults by checking the - configuration files and environmental variables""" - - def __init__( - self, - *args: Any, - name: str, - isolated: bool = False, - **kwargs: Any, - ) -> None: - self.name = name - self.config = Configuration(isolated) - - assert self.name - super().__init__(*args, **kwargs) - - def check_default(self, option: optparse.Option, key: str, val: Any) -> Any: - try: - return option.check_value(key, val) - except optparse.OptionValueError as exc: - print(f"An error occurred during configuration: {exc}") - sys.exit(3) - - def _get_ordered_configuration_items( - self, - ) -> Generator[tuple[str, Any], None, None]: - # Configuration gives keys in an unordered manner. Order them. - override_order = ["global", self.name, ":env:"] - - # Pool the options into different groups - # Use a dict because we need to implement the fallthrough logic after PR 12201 - # was merged which removed the fallthrough logic for options - section_items_dict: dict[str, dict[str, Any]] = { - name: {} for name in override_order - } - - for _, value in self.config.items(): - for section_key, val in value.items(): - - section, key = section_key.split(".", 1) - if section in override_order: - section_items_dict[section][key] = val - - # Now that we a dict of items per section, convert to list of tuples - # Make sure we completely remove empty values again - section_items = { - name: [(k, v) for k, v in section_items_dict[name].items() if v] - for name in override_order - } - - # Yield each group in their override order - for section in override_order: - yield from section_items[section] - - def _update_defaults(self, defaults: dict[str, Any]) -> dict[str, Any]: - """Updates the given defaults with values from the config files and - the environ. Does a little special handling for certain types of - options (lists).""" - - # Accumulate complex default state. - self.values = optparse.Values(self.defaults) - late_eval = set() - # Then set the options with those values - for key, val in self._get_ordered_configuration_items(): - # '--' because configuration supports only long names - option = self.get_option("--" + key) - - # Ignore options not present in this parser. E.g. non-globals put - # in [global] by users that want them to apply to all applicable - # commands. - if option is None: - continue - - assert option.dest is not None - - if option.action in ("store_true", "store_false"): - try: - val = strtobool(val) - except ValueError: - self.error( - f"{val} is not a valid value for {key} option, " - "please specify a boolean value like yes/no, " - "true/false or 1/0 instead." - ) - elif option.action == "count": - with suppress(ValueError): - val = strtobool(val) - with suppress(ValueError): - val = int(val) - if not isinstance(val, int) or val < 0: - self.error( - f"{val} is not a valid value for {key} option, " - "please instead specify either a non-negative integer " - "or a boolean value like yes/no or false/true " - "which is equivalent to 1/0." - ) - elif option.action == "append": - val = val.split() - val = [self.check_default(option, key, v) for v in val] - elif option.action == "callback": - assert option.callback is not None - late_eval.add(option.dest) - opt_str = option.get_opt_string() - val = option.convert_value(opt_str, val) - # From take_action - args = option.callback_args or () - kwargs = option.callback_kwargs or {} - option.callback(option, opt_str, val, self, *args, **kwargs) - else: - val = self.check_default(option, key, val) - - defaults[option.dest] = val - - for key in late_eval: - defaults[key] = getattr(self.values, key) - self.values = None - return defaults - - def get_default_values(self) -> optparse.Values: - """Overriding to make updating the defaults after instantiation of - the option parser possible, _update_defaults() does the dirty work.""" - if not self.process_default_values: - # Old, pre-Optik 1.5 behaviour. - return optparse.Values(self.defaults) - - # Load the configuration, or error out in case of an error - try: - self.config.load() - except ConfigurationError as err: - self.exit(UNKNOWN_ERROR, str(err)) - - defaults = self._update_defaults(self.defaults.copy()) # ours - for option in self._get_all_options(): - assert option.dest is not None - default = defaults.get(option.dest) - if isinstance(default, str): - opt_str = option.get_opt_string() - defaults[option.dest] = option.check_value(opt_str, default) - return optparse.Values(defaults) - - def error(self, msg: str) -> NoReturn: - self.print_usage(sys.stderr) - self.exit(UNKNOWN_ERROR, f"{msg}\n") - - def print_help(self, file: Any = None) -> None: - # This is unfortunate but necessary since arguments may have not been - # parsed yet at this point, so detect --no-color manually. - no_color = ( - "--no-color" in sys.argv - or bool(strtobool(os.environ.get("PIP_NO_COLOR", "no") or "no")) - or "NO_COLOR" in os.environ - ) - console = PipConsole( - theme=Theme(PrettyHelpFormatter.styles), no_color=no_color, file=file - ) - console.print(self.format_help().rstrip(), highlight=False) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/progress_bars.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/progress_bars.py deleted file mode 100644 index 4931c85bc..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/progress_bars.py +++ /dev/null @@ -1,153 +0,0 @@ -from __future__ import annotations - -import functools -import sys -from collections.abc import Generator, Iterable, Iterator -from typing import TYPE_CHECKING, Callable, Literal, TypeVar - -from pip._vendor.rich.progress import ( - BarColumn, - DownloadColumn, - FileSizeColumn, - MofNCompleteColumn, - Progress, - ProgressColumn, - SpinnerColumn, - TextColumn, - TimeElapsedColumn, - TimeRemainingColumn, - TransferSpeedColumn, -) - -from pip._internal.cli.spinners import RateLimiter -from pip._internal.utils.logging import get_console, get_indentation - -if TYPE_CHECKING: - from pip._internal.req.req_install import InstallRequirement - -T = TypeVar("T") -ProgressRenderer = Callable[[Iterable[T]], Iterator[T]] -BarType = Literal["on", "off", "raw"] - - -def _rich_download_progress_bar( - iterable: Iterable[bytes], - *, - bar_type: BarType, - size: int | None, - initial_progress: int | None = None, -) -> Generator[bytes, None, None]: - assert bar_type == "on", "This should only be used in the default mode." - - if not size: - total = float("inf") - columns: tuple[ProgressColumn, ...] = ( - TextColumn("[progress.description]{task.description}"), - SpinnerColumn("line", speed=1.5), - FileSizeColumn(), - TransferSpeedColumn(), - TimeElapsedColumn(), - ) - else: - total = size - columns = ( - TextColumn("[progress.description]{task.description}"), - BarColumn(), - DownloadColumn(), - TransferSpeedColumn(), - TextColumn("{task.fields[time_description]}"), - TimeRemainingColumn(elapsed_when_finished=True), - ) - - progress = Progress(*columns, refresh_per_second=5) - task_id = progress.add_task( - " " * (get_indentation() + 2), total=total, time_description="eta" - ) - if initial_progress is not None: - progress.update(task_id, advance=initial_progress) - with progress: - for chunk in iterable: - yield chunk - progress.update(task_id, advance=len(chunk)) - progress.update(task_id, time_description="") - - -def _rich_install_progress_bar( - iterable: Iterable[InstallRequirement], *, total: int -) -> Iterator[InstallRequirement]: - columns = ( - TextColumn("{task.fields[indent]}"), - BarColumn(), - MofNCompleteColumn(), - TextColumn("{task.description}"), - ) - console = get_console() - - bar = Progress(*columns, refresh_per_second=6, console=console, transient=True) - # Hiding the progress bar at initialization forces a refresh cycle to occur - # until the bar appears, avoiding very short flashes. - task = bar.add_task("", total=total, indent=" " * get_indentation(), visible=False) - with bar: - for req in iterable: - bar.update(task, description=rf"\[{req.name}]", visible=True) - yield req - bar.advance(task) - - -def _raw_progress_bar( - iterable: Iterable[bytes], - *, - size: int | None, - initial_progress: int | None = None, -) -> Generator[bytes, None, None]: - def write_progress(current: int, total: int) -> None: - sys.stdout.write(f"Progress {current} of {total}\n") - sys.stdout.flush() - - current = initial_progress or 0 - total = size or 0 - rate_limiter = RateLimiter(0.25) - - write_progress(current, total) - for chunk in iterable: - current += len(chunk) - if rate_limiter.ready() or current == total: - write_progress(current, total) - rate_limiter.reset() - yield chunk - - -def get_download_progress_renderer( - *, bar_type: BarType, size: int | None = None, initial_progress: int | None = None -) -> ProgressRenderer[bytes]: - """Get an object that can be used to render the download progress. - - Returns a callable, that takes an iterable to "wrap". - """ - if bar_type == "on": - return functools.partial( - _rich_download_progress_bar, - bar_type=bar_type, - size=size, - initial_progress=initial_progress, - ) - elif bar_type == "raw": - return functools.partial( - _raw_progress_bar, - size=size, - initial_progress=initial_progress, - ) - else: - return iter # no-op, when passed an iterator - - -def get_install_progress_renderer( - *, bar_type: BarType, total: int -) -> ProgressRenderer[InstallRequirement]: - """Get an object that can be used to render the install progress. - Returns a callable, that takes an iterable to "wrap". - """ - if bar_type == "on": - return functools.partial(_rich_install_progress_bar, total=total) - else: - return iter diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/req_command.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/req_command.py deleted file mode 100644 index 60b82fb99..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/req_command.py +++ /dev/null @@ -1,447 +0,0 @@ -"""Contains the RequirementCommand base class. - -This class is in a separate module so the commands that do not always -need PackageFinder capability don't unnecessarily import the -PackageFinder machinery and all its vendored dependencies, etc. -""" - -from __future__ import annotations - -import logging -import os -from functools import partial -from optparse import Values -from typing import Any, Callable, TypeVar - -from pip._internal.build_env import ( - BuildEnvironmentInstaller, - InprocessBuildEnvironmentInstaller, - SubprocessBuildEnvironmentInstaller, -) -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.index_command import IndexGroupCommand -from pip._internal.cli.index_command import SessionCommandMixin as SessionCommandMixin -from pip._internal.exceptions import ( - CommandError, - PreviousBuildDirError, - UnsupportedPythonVersion, -) -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.network.session import PipSession -from pip._internal.operations.build.build_tracker import BuildTracker -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, - install_req_from_parsed_requirement, - install_req_from_req_string, -) -from pip._internal.req.pep723 import PEP723Exception, pep723_metadata -from pip._internal.req.req_dependency_group import parse_dependency_groups -from pip._internal.req.req_file import parse_requirements -from pip._internal.req.req_install import InstallRequirement -from pip._internal.resolution.base import BaseResolver -from pip._internal.utils.packaging import check_requires_python -from pip._internal.utils.temp_dir import ( - TempDirectory, - TempDirectoryTypeRegistry, - tempdir_kinds, -) - -logger = logging.getLogger(__name__) - - -def should_ignore_regular_constraints(options: Values) -> bool: - """ - Check if regular constraints should be ignored because - we are in a isolated build process and build constraints - feature is enabled but no build constraints were passed. - """ - - return os.environ.get("_PIP_IN_BUILD_IGNORE_CONSTRAINTS") == "1" - - -KEEPABLE_TEMPDIR_TYPES = [ - tempdir_kinds.BUILD_ENV, - tempdir_kinds.EPHEM_WHEEL_CACHE, - tempdir_kinds.REQ_BUILD, -] - - -_CommandT = TypeVar("_CommandT", bound="RequirementCommand") - - -def with_cleanup( - func: Callable[[_CommandT, Values, list[str]], int], -) -> Callable[[_CommandT, Values, list[str]], int]: - """Decorator for common logic related to managing temporary - directories. - """ - - def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None: - for t in KEEPABLE_TEMPDIR_TYPES: - registry.set_delete(t, False) - - def wrapper(self: _CommandT, options: Values, args: list[str]) -> int: - assert self.tempdir_registry is not None - if options.no_clean: - configure_tempdir_registry(self.tempdir_registry) - - try: - return func(self, options, args) - except PreviousBuildDirError: - # This kind of conflict can occur when the user passes an explicit - # build directory with a pre-existing folder. In that case we do - # not want to accidentally remove it. - configure_tempdir_registry(self.tempdir_registry) - raise - - return wrapper - - -def parse_constraint_files( - constraint_files: list[str], - finder: PackageFinder, - options: Values, - session: PipSession, -) -> list[InstallRequirement]: - requirements = [] - for filename in constraint_files: - for parsed_req in parse_requirements( - filename, - constraint=True, - finder=finder, - options=options, - session=session, - ): - req_to_add = install_req_from_parsed_requirement( - parsed_req, - isolated=options.isolated_mode, - user_supplied=False, - ) - requirements.append(req_to_add) - - return requirements - - -class RequirementCommand(IndexGroupCommand): - def __init__(self, *args: Any, **kw: Any) -> None: - super().__init__(*args, **kw) - - self.cmd_opts.add_option(cmdoptions.dependency_groups()) - self.cmd_opts.add_option(cmdoptions.no_clean()) - - @staticmethod - def determine_resolver_variant(options: Values) -> str: - """Determines which resolver should be used, based on the given options.""" - if "legacy-resolver" in options.deprecated_features_enabled: - return "legacy" - - return "resolvelib" - - @classmethod - def make_requirement_preparer( - cls, - temp_build_dir: TempDirectory, - options: Values, - build_tracker: BuildTracker, - session: PipSession, - finder: PackageFinder, - use_user_site: bool, - download_dir: str | None = None, - verbosity: int = 0, - ) -> RequirementPreparer: - """ - Create a RequirementPreparer instance for the given parameters. - """ - temp_build_dir_path = temp_build_dir.path - assert temp_build_dir_path is not None - legacy_resolver = False - - resolver_variant = cls.determine_resolver_variant(options) - if resolver_variant == "resolvelib": - lazy_wheel = "fast-deps" in options.features_enabled - if lazy_wheel: - logger.warning( - "pip is using lazily downloaded wheels using HTTP " - "range requests to obtain dependency information. " - "This experimental feature is enabled through " - "--use-feature=fast-deps and it is not ready for " - "production." - ) - else: - legacy_resolver = True - lazy_wheel = False - if "fast-deps" in options.features_enabled: - logger.warning( - "fast-deps has no effect when used with the legacy resolver." - ) - - # Handle build constraints - build_constraints = getattr(options, "build_constraints", []) - build_constraint_feature_enabled = ( - "build-constraint" in options.features_enabled - ) - - env_installer: BuildEnvironmentInstaller - if "inprocess-build-deps" in options.features_enabled: - build_constraint_reqs = parse_constraint_files( - build_constraints, finder, options, session - ) - env_installer = InprocessBuildEnvironmentInstaller( - finder=finder, - build_tracker=build_tracker, - build_constraints=build_constraint_reqs, - verbosity=verbosity, - wheel_cache=WheelCache(options.cache_dir), - ) - else: - env_installer = SubprocessBuildEnvironmentInstaller( - finder, - build_constraints=build_constraints, - build_constraint_feature_enabled=build_constraint_feature_enabled, - ) - - return RequirementPreparer( - build_dir=temp_build_dir_path, - src_dir=options.src_dir, - download_dir=download_dir, - build_isolation=options.build_isolation, - build_isolation_installer=env_installer, - check_build_deps=options.check_build_deps, - build_tracker=build_tracker, - session=session, - progress_bar=options.progress_bar, - finder=finder, - require_hashes=options.require_hashes, - use_user_site=use_user_site, - lazy_wheel=lazy_wheel, - verbosity=verbosity, - legacy_resolver=legacy_resolver, - ) - - @classmethod - def make_resolver( - cls, - preparer: RequirementPreparer, - finder: PackageFinder, - options: Values, - wheel_cache: WheelCache | None = None, - use_user_site: bool = False, - ignore_installed: bool = True, - ignore_requires_python: bool = False, - force_reinstall: bool = False, - upgrade_strategy: str = "to-satisfy-only", - py_version_info: tuple[int, ...] | None = None, - ) -> BaseResolver: - """ - Create a Resolver instance for the given parameters. - """ - make_install_req = partial( - install_req_from_req_string, - isolated=options.isolated_mode, - ) - resolver_variant = cls.determine_resolver_variant(options) - # The long import name and duplicated invocation is needed to convince - # Mypy into correctly typechecking. Otherwise it would complain the - # "Resolver" class being redefined. - if resolver_variant == "resolvelib": - import pip._internal.resolution.resolvelib.resolver - - return pip._internal.resolution.resolvelib.resolver.Resolver( - preparer=preparer, - finder=finder, - wheel_cache=wheel_cache, - make_install_req=make_install_req, - use_user_site=use_user_site, - ignore_dependencies=options.ignore_dependencies, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - force_reinstall=force_reinstall, - upgrade_strategy=upgrade_strategy, - py_version_info=py_version_info, - ) - import pip._internal.resolution.legacy.resolver - - return pip._internal.resolution.legacy.resolver.Resolver( - preparer=preparer, - finder=finder, - wheel_cache=wheel_cache, - make_install_req=make_install_req, - use_user_site=use_user_site, - ignore_dependencies=options.ignore_dependencies, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - force_reinstall=force_reinstall, - upgrade_strategy=upgrade_strategy, - py_version_info=py_version_info, - ) - - def get_requirements( - self, - args: list[str], - options: Values, - finder: PackageFinder, - session: PipSession, - ) -> list[InstallRequirement]: - """ - Parse command-line arguments into the corresponding requirements. - """ - requirements: list[InstallRequirement] = [] - - if not should_ignore_regular_constraints(options): - constraints = parse_constraint_files( - options.constraints, finder, options, session - ) - requirements.extend(constraints) - - for req in args: - if not req.strip(): - continue - req_to_add = install_req_from_line( - req, - comes_from=None, - isolated=options.isolated_mode, - user_supplied=True, - config_settings=getattr(options, "config_settings", None), - ) - requirements.append(req_to_add) - - if options.dependency_groups: - for req in parse_dependency_groups(options.dependency_groups): - req_to_add = install_req_from_req_string( - req, - isolated=options.isolated_mode, - user_supplied=True, - ) - requirements.append(req_to_add) - - for req in options.editables: - req_to_add = install_req_from_editable( - req, - user_supplied=True, - isolated=options.isolated_mode, - config_settings=getattr(options, "config_settings", None), - ) - requirements.append(req_to_add) - - # NOTE: options.require_hashes may be set if --require-hashes is True - for filename in options.requirements: - for parsed_req in parse_requirements( - filename, finder=finder, options=options, session=session - ): - req_to_add = install_req_from_parsed_requirement( - parsed_req, - isolated=options.isolated_mode, - user_supplied=True, - config_settings=( - parsed_req.options.get("config_settings") - if parsed_req.options - else None - ), - ) - requirements.append(req_to_add) - - if options.requirements_from_scripts: - if len(options.requirements_from_scripts) > 1: - raise CommandError("--requirements-from-script can only be given once") - - script = options.requirements_from_scripts[0] - try: - script_metadata = pep723_metadata(script) - except PEP723Exception as exc: - raise CommandError(exc.msg) - - script_requires_python = script_metadata.get("requires-python", "") - - if script_requires_python and not options.ignore_requires_python: - target_python = make_target_python(options) - - if not check_requires_python( - requires_python=script_requires_python, - version_info=target_python.py_version_info, - ): - raise UnsupportedPythonVersion( - f"Script {script!r} requires a different Python: " - f"{target_python.py_version} not in {script_requires_python!r}" - ) - - for req in script_metadata.get("dependencies", []): - req_to_add = install_req_from_req_string( - req, - isolated=options.isolated_mode, - user_supplied=True, - ) - requirements.append(req_to_add) - - # If any requirement has hash options, enable hash checking. - if any(req.has_hash_options for req in requirements): - options.require_hashes = True - - if not ( - args - or options.editables - or options.requirements - or options.dependency_groups - or options.requirements_from_scripts - ): - opts = {"name": self.name} - if options.find_links: - raise CommandError( - "You must give at least one requirement to {name} " - '(maybe you meant "pip {name} {links}"?)'.format( - **dict(opts, links=" ".join(options.find_links)) - ) - ) - else: - raise CommandError( - "You must give at least one requirement to {name} " - '(see "pip help {name}")'.format(**opts) - ) - - return requirements - - @staticmethod - def trace_basic_info(finder: PackageFinder) -> None: - """ - Trace basic information about the provided objects. - """ - # Display where finder is looking for packages - search_scope = finder.search_scope - locations = search_scope.get_formatted_locations() - if locations: - logger.info(locations) - - def _build_package_finder( - self, - options: Values, - session: PipSession, - target_python: TargetPython | None = None, - ignore_requires_python: bool | None = None, - ) -> PackageFinder: - """ - Create a package finder appropriate to this requirement command. - - :param ignore_requires_python: Whether to ignore incompatible - "Requires-Python" values in links. Defaults to False. - """ - link_collector = LinkCollector.create(session, options=options) - selection_prefs = SelectionPreferences( - allow_yanked=True, - format_control=options.format_control, - release_control=options.release_control, - prefer_binary=options.prefer_binary, - ignore_requires_python=ignore_requires_python, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - target_python=target_python, - uploaded_prior_to=options.uploaded_prior_to, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/spinners.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/spinners.py deleted file mode 100644 index 58aad2853..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/spinners.py +++ /dev/null @@ -1,235 +0,0 @@ -from __future__ import annotations - -import contextlib -import itertools -import logging -import sys -import time -from collections.abc import Generator -from typing import IO, Final - -from pip._vendor.rich.console import ( - Console, - ConsoleOptions, - RenderableType, - RenderResult, -) -from pip._vendor.rich.live import Live -from pip._vendor.rich.measure import Measurement -from pip._vendor.rich.text import Text - -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.logging import get_console, get_indentation - -logger = logging.getLogger(__name__) - -SPINNER_CHARS: Final = r"-\|/" -SPINS_PER_SECOND: Final = 8 - - -class SpinnerInterface: - def spin(self) -> None: - raise NotImplementedError() - - def finish(self, final_status: str) -> None: - raise NotImplementedError() - - -class InteractiveSpinner(SpinnerInterface): - def __init__( - self, - message: str, - file: IO[str] | None = None, - spin_chars: str = SPINNER_CHARS, - # Empirically, 8 updates/second looks nice - min_update_interval_seconds: float = 1 / SPINS_PER_SECOND, - ): - self._message = message - if file is None: - file = sys.stdout - self._file = file - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._finished = False - - self._spin_cycle = itertools.cycle(spin_chars) - - self._file.write(" " * get_indentation() + self._message + " ... ") - self._width = 0 - - def _write(self, status: str) -> None: - assert not self._finished - # Erase what we wrote before by backspacing to the beginning, writing - # spaces to overwrite the old text, and then backspacing again - backup = "\b" * self._width - self._file.write(backup + " " * self._width + backup) - # Now we have a blank slate to add our status - self._file.write(status) - self._width = len(status) - self._file.flush() - self._rate_limiter.reset() - - def spin(self) -> None: - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._write(next(self._spin_cycle)) - - def finish(self, final_status: str) -> None: - if self._finished: - return - self._write(final_status) - self._file.write("\n") - self._file.flush() - self._finished = True - - -# Used for dumb terminals, non-interactive installs (no tty), etc. -# We still print updates occasionally (once every 60 seconds by default) to -# act as a keep-alive for systems like Travis-CI that take lack-of-output as -# an indication that a task has frozen. -class NonInteractiveSpinner(SpinnerInterface): - def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None: - self._message = message - self._finished = False - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._update("started") - - def _update(self, status: str) -> None: - assert not self._finished - self._rate_limiter.reset() - logger.info("%s: %s", self._message, status) - - def spin(self) -> None: - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._update("still running...") - - def finish(self, final_status: str) -> None: - if self._finished: - return - self._update(f"finished with status '{final_status}'") - self._finished = True - - -class RateLimiter: - def __init__(self, min_update_interval_seconds: float) -> None: - self._min_update_interval_seconds = min_update_interval_seconds - self._last_update: float = 0 - - def ready(self) -> bool: - now = time.time() - delta = now - self._last_update - return delta >= self._min_update_interval_seconds - - def reset(self) -> None: - self._last_update = time.time() - - -@contextlib.contextmanager -def open_spinner(message: str) -> Generator[SpinnerInterface, None, None]: - # Interactive spinner goes directly to sys.stdout rather than being routed - # through the logging system, but it acts like it has level INFO, - # i.e. it's only displayed if we're at level INFO or better. - # Non-interactive spinner goes through the logging system, so it is always - # in sync with logging configuration. - if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: - spinner: SpinnerInterface = InteractiveSpinner(message) - else: - spinner = NonInteractiveSpinner(message) - try: - with hidden_cursor(sys.stdout): - yield spinner - except KeyboardInterrupt: - spinner.finish("canceled") - raise - except Exception: - spinner.finish("error") - raise - else: - spinner.finish("done") - - -class _PipRichSpinner: - """ - Custom rich spinner that matches the style of the legacy spinners. - - (*) Updates will be handled in a background thread by a rich live panel - which will call render() automatically at the appropriate time. - """ - - def __init__(self, label: str) -> None: - self.label = label - self._spin_cycle = itertools.cycle(SPINNER_CHARS) - self._spinner_text = "" - self._finished = False - self._indent = get_indentation() * " " - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - yield self.render() - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - text = self.render() - return Measurement.get(console, options, text) - - def render(self) -> RenderableType: - if not self._finished: - self._spinner_text = next(self._spin_cycle) - - return Text.assemble(self._indent, self.label, " ... ", self._spinner_text) - - def finish(self, status: str) -> None: - """Stop spinning and set a final status message.""" - self._spinner_text = status - self._finished = True - - -@contextlib.contextmanager -def open_rich_spinner(label: str, console: Console | None = None) -> Generator[None]: - if not logger.isEnabledFor(logging.INFO): - # Don't show spinner if --quiet is given. - yield - return - - console = console or get_console() - spinner = _PipRichSpinner(label) - with Live(spinner, refresh_per_second=SPINS_PER_SECOND, console=console): - try: - yield - except KeyboardInterrupt: - spinner.finish("canceled") - raise - except Exception: - spinner.finish("error") - raise - else: - spinner.finish("done") - - -HIDE_CURSOR = "\x1b[?25l" -SHOW_CURSOR = "\x1b[?25h" - - -@contextlib.contextmanager -def hidden_cursor(file: IO[str]) -> Generator[None, None, None]: - # The Windows terminal does not support the hide/show cursor ANSI codes, - # even via colorama. So don't even try. - if WINDOWS: - yield - # We don't want to clutter the output with control characters if we're - # writing to a file, or if the user is running with --quiet. - # See https://github.com/pypa/pip/issues/3418 - elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: - yield - else: - file.write(HIDE_CURSOR) - try: - yield - finally: - file.write(SHOW_CURSOR) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/status_codes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/status_codes.py deleted file mode 100644 index 5e29502cd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/cli/status_codes.py +++ /dev/null @@ -1,6 +0,0 @@ -SUCCESS = 0 -ERROR = 1 -UNKNOWN_ERROR = 2 -VIRTUALENV_NOT_FOUND = 3 -PREVIOUS_BUILD_DIR_ERROR = 4 -NO_MATCHES_FOUND = 23 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__init__.py deleted file mode 100644 index bedeca9e9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__init__.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -Package containing all pip commands -""" - -from __future__ import annotations - -import importlib -from collections import namedtuple -from typing import Any - -from pip._internal.cli.base_command import Command - -CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary") - -# This dictionary does a bunch of heavy lifting for help output: -# - Enables avoiding additional (costly) imports for presenting `--help`. -# - The ordering matters for help display. -# -# Even though the module path starts with the same "pip._internal.commands" -# prefix, the full path makes testing easier (specifically when modifying -# `commands_dict` in test setup / teardown). -commands_dict: dict[str, CommandInfo] = { - "install": CommandInfo( - "pip._internal.commands.install", - "InstallCommand", - "Install packages.", - ), - "lock": CommandInfo( - "pip._internal.commands.lock", - "LockCommand", - "Generate a lock file.", - ), - "download": CommandInfo( - "pip._internal.commands.download", - "DownloadCommand", - "Download packages.", - ), - "uninstall": CommandInfo( - "pip._internal.commands.uninstall", - "UninstallCommand", - "Uninstall packages.", - ), - "freeze": CommandInfo( - "pip._internal.commands.freeze", - "FreezeCommand", - "Output installed packages in requirements format.", - ), - "inspect": CommandInfo( - "pip._internal.commands.inspect", - "InspectCommand", - "Inspect the python environment.", - ), - "list": CommandInfo( - "pip._internal.commands.list", - "ListCommand", - "List installed packages.", - ), - "show": CommandInfo( - "pip._internal.commands.show", - "ShowCommand", - "Show information about installed packages.", - ), - "check": CommandInfo( - "pip._internal.commands.check", - "CheckCommand", - "Verify installed packages have compatible dependencies.", - ), - "config": CommandInfo( - "pip._internal.commands.configuration", - "ConfigurationCommand", - "Manage local and global configuration.", - ), - "search": CommandInfo( - "pip._internal.commands.search", - "SearchCommand", - "Search PyPI for packages.", - ), - "cache": CommandInfo( - "pip._internal.commands.cache", - "CacheCommand", - "Inspect and manage pip's wheel cache.", - ), - "index": CommandInfo( - "pip._internal.commands.index", - "IndexCommand", - "Inspect information available from package indexes.", - ), - "wheel": CommandInfo( - "pip._internal.commands.wheel", - "WheelCommand", - "Build wheels from your requirements.", - ), - "hash": CommandInfo( - "pip._internal.commands.hash", - "HashCommand", - "Compute hashes of package archives.", - ), - "completion": CommandInfo( - "pip._internal.commands.completion", - "CompletionCommand", - "A helper command used for command completion.", - ), - "debug": CommandInfo( - "pip._internal.commands.debug", - "DebugCommand", - "Show information useful for debugging.", - ), - "help": CommandInfo( - "pip._internal.commands.help", - "HelpCommand", - "Show help for commands.", - ), -} - - -def create_command(name: str, **kwargs: Any) -> Command: - """ - Create an instance of the Command class with the given name. - """ - module_path, class_name, summary = commands_dict[name] - module = importlib.import_module(module_path) - command_class = getattr(module, class_name) - command = command_class(name=name, summary=summary, **kwargs) - - return command - - -def get_similar_commands(name: str) -> str | None: - """Command name auto-correct.""" - from difflib import get_close_matches - - name = name.lower() - - close_commands = get_close_matches(name, commands_dict.keys()) - - if close_commands: - return close_commands[0] - else: - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 728ad9bc47c2e7cfd3374a8c77b3e2933250d98c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4512 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 O0B*@&_QC1Ilj6T(|0+iS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-314.pyc deleted file mode 100644 index bca3ab68f8f3628d7c83b367cbe08701a171ecaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13861 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-314.pyc deleted file mode 100644 index fe8cd81cd67d4f1571cd5695c614668be276fc67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2965 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-314.pyc deleted file mode 100644 index 72d4ec2d6d4e0d3e5ffb35ba93e94e182a6374f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5980 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-314.pyc deleted file mode 100644 index 15dd06748b83322a88cea84ba5751e0ee19b72a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16090 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-314.pyc deleted file mode 100644 index 8a6c405bd4b5f42d9f9e7e51fb2e39316d275967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11917 zcmb_CYj7LKd3!iK4sQ~qNb!9nMNuFrkd&zRBc@0xq$$Y^L?LMc359?obruLfcLzO? zOvQBChH54wdd3;k6VHU6@r<ddr?whTqfR^1D*2P2pn;n7SsJT}I<5avkyO?G)$iN8 z13-$AVmHg-?stoC_x5(b_qW|1w}U`gy7k}UPwNT!9X=Svq5;gKS%#1qa+U;{Q8L0P zObf!MQIle#EvvA!H7jP?S`-Vk?5K6brr0R1d6XNmD|QN7Mjazg#i`HXQrv)R9rcWO z6))|xjaH0QDn1Hxqg5l-N;QS;qnk!*lo|><Mr%hlE1N0o9IYFvSL!M38f_S9R2nJl z9&H+FR+=g78EqNi6`sQ0(bkbRrH#TBqwOPGlr1gf3_Jd^@!6%em7Li+0N;*9=?qrZ zlAy1aBr23`!76~ODeMn!0=S04UBOy_H&eJfSO;)Dg?oYx05?*2d$0-MW(o&_EdcWr z?hUpA+(zNPO{A3s+u?c3nVJDsUqOG+)K2^zpW~ySQJv9bGNnWnF_n~0!m~9LO=JWa zAjgSRJd+S6uBHWeVh58~p|M;(FG%=oNk=6a0Y_{)o=Vg4@MIfGO;1OYaR7bO(F;OE ziAqy~5=mcG&Zm-yaO(8X(9u(;0CW$fl9S?8Mxt+r4liN~$xEV?N=^$&1t&?Rg=9n# zt|$>nkW(2cM&BtW<M4YVk(x4wrNwmQk|4?O9WmT&eZz?rVEA<A(G~z^NQj&@?fol4 z;?UPfzQvqpf=tj9WP|3QC1~wsVQXxkn*dccC!^DX%F2qQS}x(9NH~>hl>{XtB~|mu zR8qK!J7}FuNz+k9#y7U9*N66pPs^~7a5OGR{rmRyg)gV13*oesdR2%iayXVqW#Z?e zvanrDiV9S+5=|roX?uTooNm(2{(;Cq<jUUNkqKcsoro&1iPP!uaq(PO78PN8IvTqW zof70Qd~$C@Oe%tuj3#<x+Q!Shap7EMDv-Xax*`$%aD_-jYJ}zCzuXGd40%czrt=|I zbEj6ZS*W7TVm0l21V|)?8(|dWW4e($0GJ_Rqo0iHlvV5iAV|K=7!=n691q)S%33?* z{d@;dnMt+6$xR88Y8I1|DZfdohA~nNR5HGD>sF}&8r316PhE~^n~$re%dY@nhTJtf zel+&Ou{myj%g5%eQWJEpId+_et`^7qp=0lbb=_p8DnOBHvD%DP9aMfs0y##sGo_26 z`$sDtf50)giDstnAyx~pZO~{7f!~V71`u6{3c!oE%@7nVBy2Y37)QceSH`(@9q^bY zVW-hMpaTb(2$L~o*a$ItU}m?06=XtWKtE(SCKLXZ9UBM=o^+E=9eoNg8;NLYAx)%( z{-G#2z%~()@w3?~`KlZcfno*ZUCPt@>A{}#+oTqlL*k(Vj=CzVp0#+|`Qyn-c+S97 zRcjF<$c*$fc#Sk_DQUn|k+q1@HW<&tzx)lTigc2z=qQ-C-mPz1uJ2i@?^&+zU#joV znQQObt8O&@r1382o7<gh2o$*9rz~;Q+-SVf__vK;$}X7Wj>$b(XSq}79PF}xJreVm zk=U1>xENEu2U4Ynhw97=sSP*3NNsjz&qD&${9n-KS!%NbHl?;MhEf~US_uLZ8YlfM zO{76CZp6k0%~X)nKt%zPF&*0pbOsVL#O#BKr{G<UWDK?`#Ek2T-gqOn#`tmMf^{Xx zo-MBEEa^dZ)5}TI*e*isq?x2m@Gdj{m8dd|-$+Z)QcJ#Lswlq2;GK3@XAAtN84*a~ zdGvd{Q>R{Q)(O%y02(A2Pf1ya)&`U-%9o}?hg60?Nsr!mGkz*;1oLPZfHq)-88ShR zf&98yIbPgy0~w`Z=~J(e8A}Tp14)A)h>~#^3+!W(dH^34utiQML<MA|DbS~y6Jk=( zWTH;^_JdPGQn-?q4y)T@l7QMlTWkat8<~!#0|yhSSTrFY4iqu_U}_l!;pec>oOkyv z%cA)W$7_!HfrZNDiuPPZ`!6hC$YwzJ%VwVOTO==lsvTyJ)Az%g6iG}=z1VF=0`{{i zGb#1svxTC_KnaBB^+j&laAgvb45jC5003{=8|F_e9$dEXE!g+o9$e+fp1r@kaO=W{ z(~nqFrQ?&`LyPf$Q+}h|`9Z<upB=vO^7WU0e0<r}yyR-0mlp=}uB{6fmtFpx%YSQn zl_hr1DuH27ZN#zfaRqTzEa8{ty}R?y-8u8_FMjVdeuX!FN!8#_tB#l~i}t}o+&^|h zb*I$?&vy=4p#GJ~dBnGt;c<f~bMbWff7q1hMGMP9^@{48rdAXcVA3WSNHtBivSeKG zKj6`pc%dW!f+I5OMbtZ9#`6%XMNr<*<aQmSk0nJ2c(fqr(M9)Ai2!`Q0f83z6i;zo zDVH25CxWKE-!bf`Ae$x)BwXbDpgBZbWQQqS<acA{64x3%V6a>E;FdxGomA9ZVHCQw zjC%~I)Ry!W>ZUNN3|g!t-iETM1sE}Cr7HwI-blhe17p0}fJ$wU+Y7(PVHJ&_(}K2k za-N8WMzgETc9n^M6#^DtT1ll6vg%G>m?|2ga@JKQGy=%G3E`5EP#ubtkri1<Ndg!< zpW~)}jt-LF2^gu%VE5Q00W7<ipgJO`z*3SDiKw=zMCu%HE?P&(!O$Uq9t8uGh4-j7 zozYe2C>?QBl2Ve?0rRRZ-SP!%5X>n?IslziTk3{X0~*#kAx=uEX#+;BD!l^8l(zmF zfEjY%*R<?wU-Gr*eI3ib?MuGxi?I)O=6!o+#_rpEbBThjZKbAT*12ltEFM&x;f3yn zrd(C;hqb?``<G+?Jo1~tf9Fo#_13&Dzw!OozP~V*_x9zuzW=@Jta(f<7SF1cxN7Hn z3eK(X?Og6Yu+)9v_Ee$!s9IIK!ns$SfbpeV2`l-#1B0F9PG{$lD)v{ECaBjaUnHEb z%8PVc%6QNLQtgjrzN7Fy8FdsgpNpw_h}8$|DmJ$r^yyjNL%yJk+)H^cT;x2UVjWI1 z;Udq47|Lt<a~gCk3QH{UEK+F5WIRtv^qCpQZCF<(VLW&?<UCX2!f?@A9H)-@+9Bgb zd$80G`h0`Aja3I214^?Yb{y5kx>ELq=8)M~cN|nC@FX5DEg|!Gkw1+-uo{fLF@;c& znp9`RaP1<IlYR%KSP4CCm5W3s#RR%HC@WM`N><J3sB&Jl#YOOnz=5kk(vOR%z|LjR zOQi&$+H{TqF^$ZkS~c#FK(v903O*?6IpASD!mXg!bj8+;v+4TQ;JGq}lF%!nq#^?V z8qU3Ku_5o?HFNB)XVcu|{Pf~P-m_!ooBw5VzcF>+yXnTY>(@T=cICLPoVV+)r|B)} z=a=8S{PSyXUR%8M{<WLe@-5%UHNTYi49>DEUf;5}eaYKS8EV%2nbUi>rfz=A&wJkN z$=7twe)GQ5H*>N?g9fePDN-8b>5Be1rBzjCQs|#4OI<L*S8$Ui09|gTFMUdU%yH%+ ztv@)sO55L<wdc}`0hJci9k61{qZI(qb$g!1svyTs6LJ|m6Ui53(rh_573rvq0;j;2 zY6KmYW+zN(^NE&{?h2U={IWii(YN<9a3QP=#<C%kiv-O(Sa@5}GaD~jrP@be9khJA zI>Zj>d;~_{w{@e>icyBFd^|P9E9V718dEaS1g~#25784oErDOpL)1fx@+i}JaS~A_ zffr>*l#fB+Bmrg^pOW-n)=v^kWfE~7B0Ky!7(?}i5Dz$1l0Ct1JDrT4O9;G@;!)8k z#T95gU@WAE&&XnO3LeoWMq8Md(?U#~6ot5f<InEkw++2=^4Rgwp^5!#P&44*0|ObD zJUDE)Bv_8h__JJxeCSYzjL`s#YJsrEv`m=?G%UuI41O>9jlig9VNW$~tpEcUf+<4W zz*F6HuOi?i$`Bh-J=&fcKd)!w2I@T)aq#<!sL~X?h7vCbU7$ZOOS=v&`;RR7k9_PO zUgALYt!%EJb>FSqbK9A(8=m!i=51OvGnM^dgSzVhy*Y6G<Xw0D{NcR2>%HmR!Q=VB ziGuqC;?%CxcIIlfEi$VtQ`t=iJm!eqd&7C%Irs8{^Y)pKxv@u0r0XbCVhn?o(NU+Y z{GynK)Q&s#qBw>KNJY=m!t8rUpqh`<MteCR6pPN4%%j`T^_AinC_-r&&|8R8;B2%Q zeb4%&U=tR3s-#UYn1p{Ne-K@$=X-gGq5FBJY`sR#K*9;}oD`L=8U!lu2U0B28+BGB z8j?VQ0HX@YuRH`%twpCOca*5-RluS<i(gh2f9NTgw?C-w&94nRwCA?$DR6t&1Rc;4 z{s-3}XSu^U2kZU>E{IJJ&q^qXzJdh52<Szdr-5mDNT8a#w2IBb7Wz~oQoyAJEe%Sf zJ|I^J_dCGCF$frBxgk%%x-mU3;sADq>3I=_v>BwmrOdJbibA;_GJ|YpK{i{0<`R{G z6xP?^A|VTSC~VqVW)l^C5B(dU30aL1EvSKtK1m7VEJJ+<&C4j#bLmYXX7B5uGk}I+ zU6!;h#0IS)h9PP8gehoC+rmYw>3KX5VnM^TLd=DG{(8%7D$ZEB(Sqgyfq>zLkgZey zfH=qySQi&!V885NZ9jrm{43)?&}T2;K)}#B&>;=O5~M$eD(m34Y3YIeycETbO2{67 z`6g2B6rF-_@x;kvS!W;+aD4BWD9H++_45k+fZF78GQf{VWtrc;9aQJJluR`m{=h>( zJ#fZvm+)Y<tbz<K7N`pxtGcv+ePl`mS)j5BAz5O3Y8c{N8tbFO4)Y{%9y<(<B*bY^ zQQd2@8mgI2TcJ&>y#|vWs#VTRPKsAlc3PfNU5KQO7vd_5PblB0aal4j?Nq4Xj}odM z%7VWIV1}$z_+~~QRBv6loUiVkIkDp0yzJbz<lL5bcFhcfQ?<Ecxwe0)wm)CHGiR<| zaeHTueP*j&scOnK2Xallix+d1{j=8luBNwQ3tN6B&VO&QW|7M|`e%lWSUOuUSKqgJ zest}J*XAn=w)(f^g@K=4UEEh_8Ca=pn02jqtL9#w`?H+4<+}NPZR4!#ffhaew5oP? z=&s9mW9<6aTkQPM&$y3Wtq)mJz4<BldYf0O`GvX#XRdo9=Q~|QoM#KJ#;5MGU@Lk8 zzv6p`c3FO1(SY?X=dkrpApWdqEs0YSdO4c(qhXjAsmB|DUX*?wlzvdnA6ms`@f3Y} zj`Vv8<jsq1*VD{th|Tw5Too*3&58xj3*_heQXWEF8!f$H8sjzYPP1tS<SJ|MxE7s7 z?H2%h^%W*<Mrm@|qDOLJKQ5jQnfJk~G|VwzmyiXbuOOLd^wkOy*1B#s@W?>QvN$RZ zCk9?AyOErRJOb<h7SP!2M)BX0q}1cJEJk}pBX(;MA%vzffvo!^7_mjeQ?+VAlB}tR zhajX)PoL4eBt%}gIEaNrDjN5jrE~CdEo2EfyXn*=K{dac5|faO_yPQ)vKNG_(qV+G zG-@NO4O$yf&PSC9;7gJi7b4pGq(Q{2)gFu=!8(p;V^IF<oUG+1Jh5oxTqYR@-xTe4 z={g`#ih2V8VCMckzihnK_+fLw{nD-Gw=XTov#}fEb#b1Z|5o19vcN2R+H#(@Tg@}a zmfSCW=B)h0+x*+MBRO-+e>Aj0bhO3#Nki*gM=mhB)G>O)GHZErHyD$aMu>p6Sdr`6 zKk?Syw|VDw7i@Jaoacu7x_j<?fooZDdT;EzzHcs+cQ)qCjbA)!Af7?yi{Cq791Xj? zzU9a!>m4_Dq``cr-U@XL7F;Z7f<j>)?T31XoFNLtEFgiups+zkF$YbGCCDn)pc#_R z5S@o4w=HM|*hXP4$SL-q9lRfh>Kev0rJgO$Hadnyh<it`@-%x%eI87zg1;VcWNREK zAbGw6lBiSsLEW4=Jh3JsgiE7_$N$?pR_n^w7AVi6-h`JFZD!We_K-j|KS7&krGZ&n zlKqiNcPk9FR>t*xG@h|-MLPpWtScoxg5Qh&W(jE{&-3gbnoEB#wP`k*%Tb!wfHsN_ z85WC?+Ldr#O!J{eQ|qE})U;)J|A>BMDhHPZ@Bw0+)X$S3(U$~e3;af}5JaY=R3@!4 zsG0IHqnc$QF<BnXbmIKRjGNb-RoO4}sE)vTzzFAj%UsV#T+iaf`)6*RDR2i?I2XEH z%UtIY*SW|n4!nQp=Ai<&uh?I|#MLizElXU>$6RaaWObSLb#4`CX=bz}s2#4FVT0tX zJpoZBOb4E!s!3(R?|-i6_7j-k@8Q3g#&5FJJ|s}h?_R}bv5qz$$h1>idAUBpQ-^2! zqwhlf_58SCS!B_m1S7WyUR%-M3!2Jo)(t3Y!!c~xm<_D%4ab<v#%z!?Xf0(3i}YW% zN=w=3Vm<+ONiQ!LZGC=*;RT~@W$(u859><V*P^*Xi?QQtcA5)gVu%)y5-0)Jm2t2y z))zyvl)a^NcJ?rD;E%T%P^lg7D8U94v_E%7$JdzA@!T1mVZ%6i{t3Incq@RG@h$@@ zwc|Y{*nrCRq_^0o1F-Y`Mqj8H35VVtMlWbMclP$gc~OQ?9lZ|)aXUVhOkCxsg(yV! zz#`Bz-4xgm0e(0|Lv<N+VQ|o8Q8~{?GfGNRffOC(C5GcLJP6K(f-r;xVMrXZL}EgQ z3k6~_hBF9!Dx;(`3dPk0C7;3wV%dVGLD|O6N0U<meI1OzHHa}GKy%?nSS0JjYaM!Q zGV8$y;ffH;C>TP_*5EU&CN4}yGYLgV#!_)uShh~@$KX7G5Z){P)IgJ40**>c!X#K( z0^H@&$GLDE-g!b_DqGbV1J%$;!<`}oBJmcM>I)wI*6E|CCQe0$1|vsKpBz4ZRP_v< z4jwN(XB*1%aySPBEd%uC+BSc7Q~8g>N3|)2{q@udRBe}|QW8EvYK6m;DzQRR*AfGc z(x<DwXFprr1bxqbvYyWq)as4CS>=rHrFU1Tr6|3IuS7Fdnt)2R>6hYE7G{vp*p$Yw zI*vcui{Bu<ik;{;N+>$v-pT6-C$O4_iYDo|8n>%hDU(zy)~HYDp}J)g=s8rIo*SO) zo>dd;?s&{v?2gASVy~Jz^iFTSZD)ZSz~tYdciP|We!IKC1>h-H)&9<@chA0kR{Jqm z)&1V7<?TZsZ6C^SKU(09QIx=k>~i1eM}4FDzOe##9QsyVe()ZbU7a7fI`c07V+#wf zf~aWK+~Ie2zI*WPg9WbdF4t1vS|8v$w!Ig)UHz{O|J1O&Z)|DbSib9cfjdE`?tIVp ze*Mk*_nU7v=k^}Y`%e@g5veUJ`0jV#{w^*pH!z&<C@!Y&!;W8c7P$QstLwd?_s4FI zE%yvA^$ZrcBM-R70@wV2tDFOr`Ul>cSr65xR6j!=3bRj`V}jHzq;d81Y6P#{U4(eP z{)-ngR1mqqTN23>W_cr#cq#^fB|}5iRpL|<62*{JzL*iAg_y)8>8E&P??R<+ibUXo zAn;`bGr^d{5@bksp*qkOgMwfBu~97mAh$#HH{_woWZ_mh#$7ja^nQIa+;)0m25a@H z!>|~%@i^4K1HWK012-EnmxlI&^fpwg4e#k8Hy{~mxn>Roie|f^v8q}WxF0G@s5n$B zz=(`ChFX51hEl6qRnB-iS5jhDo63LD?l;0bhSZTTrYOa5(n^YG+<6Sd5~5~uHb2uJ zz$=y!UHVFBeW;DkB9-p0YO$gX=E2?1$S_kJJ`>qW)uc;l5#_g7X_P^&S^K7G5YX`` zSj03*S-<v2NJ=K;04x*&U)sf+b@OWo#zCNkqHf-3ifK`fQGun}K}tY!2`*SlXa#H0 zEh^7Y4{DL^R}eyvgyuWSB*%5^qx7_v##HX0M&gI1UjqtA2qGgIWHK1$9%=g>aeqoY zpA!40#Bq-_+#`+mNX_qv?;h#6M_&3*vh5z(agQ9J^)6cPqxHajd&RQ7{v&(+{NB8M z%Z&Aj6>g(G;ovsq6A#>Vd$Jksw>;SbdG;sGm_~fk1!;;W6%d1dau7l>kK4ML+POXd JL!hAq{eN~&!2AFJ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-314.pyc deleted file mode 100644 index 53c8b46b0b2ecb773f4cfaadfc0ca2faf9cd61b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7727 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-314.pyc deleted file mode 100644 index 34d4c3844ebcde7019804aed2227d9c5a10b8c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5085 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-314.pyc deleted file mode 100644 index 02527f805d43058247a4eb8083d3ac5ad44869c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3576 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-314.pyc deleted file mode 100644 index 4feaa8e1c1d11ee5e1c739d5fd676e99348a6a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmZuxTW{1x6dtd=Uhn39zY*djYGB)D(}aji8zD**bt54ZoF!7#C6?nIHU_V4X2#_5 z(mYgZT2*TMP!&|E<uN=U!C&AP1c6i-6_u(~DsMqSfcn%k-gOgDN4safIdf*__?+*Y z_Zk~A2*$lTe>(*Qp+ChU9?2TmJp*6^Eh0mjMR|!y0|F;z6M31*5te6_e3B(2tjwzU z6iW@D4m602WEV2j3-Y8~y^Co^Y8Yj;XJVO^xVm7uA*O&*(|)C5c_jho&reU!%+CX? zuW4rp@rhl%qbd`%#qLP}7Pxl-G08wIv8XY*6ZzmQQ;Y;l8ZuKC&=JW{x{#|0humhC zGE}B5AeOGW!|U?c4Qg+#cg`>SEBZ2M^ou^x?W$vRy)&an<DG!`WqqoqKUuIPa6$aV zP~k5=c6SQIl(c~s&|>2F7YLO=djOr2mL)@)mp+34f)pt6elM8Th9QGS9+M$R$}{ne zJmm+>@jc2Fi<Bu>31%VjvI-HeaK&{f<1%H0%Z|sg39f?A6^ro()3jZS(vo8{)1>0A zp$)z{{bBJu#e^2E5+>s(PJB>Y@yX>Pe9|RsGg`D=KP)X-6puQd!$44Gxh^K7<Hfl( zw(NUH#wX25bM^R9vw$msYcXuHN>DuGEETE4@MvJ!m#s3U#lQ*1Oz;U4&vM7&D2|D^ z=7Kd|Z<?0p`Al43^6q^J$nD>00>9}9h}RqF73xWLJs0Bo(H$|}Y`<yW>WSbT8g1-? zC9*|m;vrZJYi;)wq-c-Dft*hSN?s0twS8zIv55AkAy7ZHPk?>t6Opt+au5~N$y$no zl#wW?^~jJX<eU^}h18+iTcys(TAOQ#AK#k|rI4zgiSHReMe%XbFp_gEG2WXCT5KE7 z%Thsk!<Td+J=eN-B1Ur^G1{9aYY^UzYF;ddk&cR5Y@?zQ>>NP*Ey6@USUKn;xgR-F zRwaT+S(!J)2{i@5c%x0Q$Yf2++sl}l)TubGMPemgZwbB2p1<P7HKh-6X=uHrVy!J< zea#Q`3bs6^53S4ksGhCkoxq{oe;mriPm*r%f%FI=N{44=y%JuHdIS;a=BgD0*eelH zj9j_oJ04d9ivaI=CLq8`Q?M|b;R?m>MN%hjsu$v|i#5AaGCiw;d9n;`igLL^%RCkP zA;LH^GE(gdI%yNH$t3i6(|$ICA|mn6unineDCx{|1Y)ONN%uYJ>bv&w4=bDb9SzmD zKd3wWsQvI(_x<*X&6y`1BR5uWT)Hi7w@qxf9@(7!y{Y|SbK8%Z?=#!|xvg-keEZyX z-?0bH$Dg(yycYhletmsw_@~eBw~lSskNwfA-{`*I`tD}xq1N<m<5!KpYJ>N*!3Wy# z)27bN#@8<fP;>7KB&GX)YwP{`?2ZiRA1XNbP5N{i-A%Wg?w9W#kU-u<XCYFW83h7L zHDj6;zZANnY@vv+gqABp1gj>~yyy_hT*t$n4~mp&mV6sPGNjNGc$-u9e1c7auY?ZF zSFv}Mi0a`T(4wFfIJRjqMx3RPVG8G3_BAmZyRK<wB_jAvMKPX=LQVvKBOw4C0P*@u zi1Z^x-%+H7o{gC&y$83Iu2%|ljF+Nq5UA7YiL==>*Py{x$q{wbgKu%pb#kH|#v~>R zoaO&xB-{@vn3XWCvatKjoA9cQtF1iZW!3Gh@Fa34Vvjae4ed#C3^v3!(tZ$-9!YwP Y`u;)_kHv5Ng{n(k-yM31V2Y0a3l<*sJOBUy diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-314.pyc deleted file mode 100644 index e0a73d50055c6bb6ec7b67f428cf3aa36635fb9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8376 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-314.pyc deleted file mode 100644 index 39401311d8f80de30fde2d541d98f0d4e2656392..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4638 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-314.pyc deleted file mode 100644 index c23e94eea6d260044171c27baf11933227c7fd37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32728 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-314.pyc deleted file mode 100644 index 2bf6c6978f250a98d19ad6cd8020e883ab35ce3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19793 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 J;AyO-{}0PvT}J=_ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/lock.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/lock.cpython-314.pyc deleted file mode 100644 index 84c115f64204601a0ff771941723418306fbb767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8489 zcmcIp&2t+^b{~8Y7<_}D;D<;KL`oDW5i})Aq$EnVOiKoBS&M~a*eOAp8UjOdVgNJS z(~v|~4mzYNROR6H=3wWhq_%41Lz3Ow{s}n>1ZshrNL5NjTa~@hA$PsUyw@{BfFG_+ zInt2mdENc`b@%I@*T47rbU5Va;Hm!Rzm>m_aom4l#(p|1Vy6zoW9~keaV&8Z-_9jR z%1NE0NV}F?DK~X9+P&0~@=y<>JC?jDp7M<LEcsG?>SwffDUb@%Afx%EP%2ErsR)g* zyl*L*>ZF~F_Ahm%x@k9~14})rUfRp(;8I^IMq`W)E%m1c=m4X`OM|H)IyB1N>y2~w zj?FsE(bM5xF3x2lF)kCm7oK%lr6U=~7?<e$17>d}9EK+=6)Un1lshfaHF$feS}H2y zLm+z;U3?%Fm4c|P7uEb1qGq!AKU<UK;-ZvalYz^hFBMdcDr#9zIE}81{IiNe<dR&b zi)yJPl?z7jp+eWhd{LIl6%D(%{psT3_1m|B>|B+pxLi?+1(6ad|AkDT&<BM#)zwv& zi6DojXyOBz=+Ft&3)XN}h*}brvQDL9Q6#N?aXO(pa!LCD29l>LS<jo(H&aU&+)ftq z60Gn&jyf_Nb>1JOu0BqM^``EOlXhgebB>HF#ufRD8`3EC-1D-s4p!#DvRO+q<uhLD z%W~A8;X%VbBXAQmW@$kBS6CJQ_0QASGfSUbzjf!@O<_vFdO?FZORKUjfSv@pCM!fJ z$eLU($mP5O#W=-Fe*ct^UQaIxr;tkpHX<m%@(31AsOU<0RcM>NplfnoSy4b;Nobf| zye()%{cBK!P$5ND23<?Vz0!iECFl<un3XC4nI)CVg05CbUKS*hUsE0+iyu})kczr0 z=oL*<3Dt!n%ms&m!xfIV4F+bQ6lMMR8R6lYl3&9<A1DQoRu*JQU-v(h)&&ZJ*pSx+ z3E0%4EXd^t3Q^0riLiQEhWWB(mJ87Toi$llmCG`bs9a!uvt9&67u0fbU0AJ1L@HAm zD$T}h6ALRaC(xacuMh%){n|QRQ_F(2uh<G`MTr7iDe2$X^$YAd0YhFD?pizio^W?c zz9%fegxfTT-^EoSnN0pbn}s%ww3g?paMxP?DYlwZdwu+{q$wh_3p3UGV+1W&>xp|} zdT;!Bv>uiP;haF@x3V(=$%5lCm*ws|=l_=D3Q&5C`>A8ik#S_4(`Zp#e?V@-Lu6VZ z<y+r!U<y2_Nr@UE5x#v%*9%IXilUB;#~&M;i<fer>aa<3Qb8s&7cah(d#I8xa@Jne zbNQlLDJ)C64BAmBB<2PnQ!}|VTe)*Hv*N7yX#RqT-#V<EEYgyeyQwVabcM=O_P3RT z{W=YHg36>U6{qv2Rnn(%(<ZfbBPfbexvWwYAR7I!|LyNK*<SMwj9c%4<j;?}@3}J_ zm%hW~n>*~a1LYjk9uoKj;Rkx+cmBtNr%0Adv*P_p8ufeN$+_)<G_*YUfK3PclyPQU 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 b*U#r`zGIK!WBSzTh&}Hb{}YD<>+*jAH-1^N diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-314.pyc deleted file mode 100644 index 145c1d8f70f49e4f5964a9c47855054c4954986c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9135 zcmb_BTW}lKb$79gH$Z?S_<mq1K14_&X+5k5X;}}F3Ta9-4N{;}gF+x;MXn73@ZE(Z zGV+u&Nopz`SJJepIh}NdZPN)oO(*hK-04RZH<{@tBuFN_rpD^TnQ8vWk{YM(PtUoF z1we&~(x#Whz31M0?)$uVf0^4sAl?7)KjgoxCgc}bF_J|GxUK6PA&cY^339_^h*LQ~ z!lq%9YGNg?@~jk8ft6;}%u0)Dg_0k(4cS#Y8zT%mhMcOC!RBGtkXv;#*fLx;<Wap0 zwhosMRj3sVwhdPf`BWc+?ZZ_=)oS%njatL%j^Wy&I<=0$&f)r@2DO2~uHnX^Cbfyd z?&0Pkzv^dj*|0d&qP8&DGrVW0Rc&Rkcerh+U2XT1D$+uN<uxQ&G37qO>t|Oxrc7g_ z#)TBi7Bba&1a1YB8ek(UVWe-WV#;?!$hYqcRzX{J4T*cz{lOZ5YZ-hXSO;)DgS&$M zU<1?|u@>jl?qCztnps~@(9}u-;;(SJ0H-;li9}M3s&X=+jAH#&8k49L8<3|}s9HkN zcv?~bvQNyX3eDzJlqwRmTKki8bJ0W$z{+t+QDB;U%LVzmoCugS@93+M3uh+!hX%(Z z=U%-yI-ps{FZTBjj*r6_R~~tg(j<j?&5Wc*V$zjpI<7{f#8sIl6LV4mcj7%8Ript~ zQK@`6joXDbVQhYE7|Mz<IraKnoTjEHXf&auk`zZc<U|a{M&ijCsJX6DS(PHmw3<q* z)B0uVdHz+nt)oz1BvVA?f&{3rUgg_>I;Vu7sRMc##4|{MHZy}PsyS$d`?P6gZ0RdW zIw!@3WL4u~r<#z6&Pke8Ny8=4`LFD8*#8^QF{RnAN)&HP`GAZDESfD6LDWb@b3`I@ z$yhp$uqzUII~|SZdpwcI6`3k(Tuw-dBy>YV$?HKwRV1R|TTVx!s(w$B5{b}y*!>os zRr_v#Z}_4DD~F@-$_G!Jcp-c(N#6>mX!1>IT2;c+@nkx78E(2uPRJ@`Fkd__(XNBx zv3YeinK*p#NaRT5`thTY3281BkHVFzbE)uo`Epo+`|V0ar{9XsNJ=;*r+OlCLX~JD z8t<9b$wcW<q$r)9?M}^8A8d$axILu;vUf?&;r`Ze&h7oy`CM7enovVq45S?|W`b5o z+}1hBOJ1y1<%66G?**^ItCpYuRBvWfZw*=iwldfjv;k~qus!Hd9YH6&pi6U)v%Td> za^bXI72!!mq%+Ytns{wCsYoKeiU@uA#}%iO2{j5ACcgA`TB7qWcP}(MM3&m&dS}Ep zk}1YzQwGAsH1c|$-wB=xD3RN0WM>MIOQz%BCL{)JjpQ|MmJ4!0Qx69_<$r~^nuSVg znkF=1G?|dt8v~VFkN~5qg0t?Sdk_zZC{HCwQuR9y*<ISV53rR=$QH?$#9{8;#B6zj z73?9{exaWwJLIr8`_^3m7D<SV>Fqo6F~E2>1%Z=-rXU{{jGi%z0Ts(2aM-bYyB}w_ z75fZm%xOTy^3reF$&ozG_({+LcW7NOb;%3XE}-z3bX_y+1%EMke&H|*8WA8dc?BLG ziC!GjsahOHY_T&hp~Ut)5C{mG5R(*Dv(8Cs^lFr9)_j*H%u4YTWAW*^SOjQ5(Hzkj zgMj_12ez)+Qu8S}lBRLZ!UQYTDuIwBsv<sMMP_I+or32T6e)g%J#L5oxX$8KidMJt zZA-e?(+<N@izH`r-E!Y_ui3==HZkY&=3G^|^4grQZrxY={)Iaia^>eX+{E6pO{{ju zMg_6EZ#i!|*KB+5+xD(<t4Dr(@`IC~*iIA)!XRLLEJna>Y@OW+ILPC}1}!~2J_7B) z(_8b5LCshbqI5=~wE)t+Sm!~8<f)qmprM4cDISaNhYTgR(gGQhZkbu!#BBNK1{SMz zthlSNMt$F<WQnUXLhgi<03n-jSxhr7WWBI)J`yB`a-QWTOer3SvUDDO5Sct^kXlLz z<J>HT1Y>N<9OP1#aDn81U&20;pUK!=tcmRo_Nb?^G6O1>EyNggi5x&Nn@_NQxdBgx zf~I2y<_HOe`K@ezl*=r&k}yi_JRIN`0vBY^_lX&iN^hrSFd0O6xio5Pu~T7^RAhoM z(2aIQ87P7|8B{^!njBMS15S!N*DN|Fbfe-%;T4&cfkk*_UV%<E2KrjF$O`DQd8p5V z=8tRTXeAWpQ{)9nbEhcKNrXxYSPlwB!9dXl1sXe!@JpDTgiJHDO=)(<a%?RDb9x#& z6*x2L=;%PHt@9U8(+RD7CtpDmqqig=FOttamFpGF8UHKUijj<KB<J-lnRCEOBX>qt z%voR0l6~FNv@B;molC-#x~8SFb!XYF-kZH^&c^%B#x-a2184JkQ|nsOiw~M!%r+hS zh<nu3yEOWRt?G8{k*)W0r*FNoera^w<ImXq|9@OZQ5xuM#_k3wl`-5`K4zrE!2Ux^ z<$#Fh%G7f?@EnX+P~RX2dd$8}%$A2Yu()esMW*jn*7}<)m=_)Ptv}1N;BLC)w=rDE zRA8+VhMPQ6U_<l&p4lc}ER41^kdS4}4JUgh1xW~Wa)|3O1x*EPYq-Who3Msaim_z$ z8_YEWf&;WV0YL)Rqez~!!(CY0LSkJwN6HrDCv0P0W2Iv0B0&Lq3JhG@b4W<p!&OGh zgx$D7urkak+bNsO$)t~OA~F}SQ1IXg#barvBwc8F{lfX+SU=->(0JmNs2m60e`7is zlX}Gk)0AU0;HI!QqE(h!^NQ{rP~53zxz4P0%`zRAL11XkafyOKJVuk(=jj>5FrPyo zK(jMfpdaSeoD3WXyEZYS3lE13@&^pm#I&RdNVNfn&h3o0k*qa4Q|wH&TJt;5>`d06 zlb{JG1?UJ{kWG&YTv5<~Md^_j1%@=xcjntE4Ris<$p4>V2q;)z1M1Nw`;&_5wTgZB zEB37(%T^p-vVP&~SeeiIdQl=&-FoNdJ8PcK`<~9#x~%8rC1Jy4v3KSwYu@j>)3;(- zHLuQp)SmI5zSowm{MypMwu^Y{m)m|Ita;iWc-k|z_Kc@J=c!zB{(9R@yw&=2d+vMo zY!kuW`J|%fuK6dP4?UTl)A#s$gKGm9?+;we^oKIu$qk;kecKjN>0iE<t=OA!?fvf! zJB;~CL2~`6z52`v^3xOkeu4kEcJJ9!{Ku!v05btF3SzqfkSN-y6ciAl&5&u<NF<h= z2J6zC#=8USWhRlN5{P4_86sD~m7^yR{XAy)z*NKxbrKT?Oxn^mtYX#*Kcxe*KOvtA zuWSgMyJd0kNquuhsCg=YRr<6R6#JK=A!qa{aNrJ;T7U*%G;T`-08P~0Olq`9de9{{ zGi!tq1AP?+luE;$zTNMZhG>+$4nGAi38i5j*Sd*Wrmky)m50u;dQq4IB1@=#V8iCE z%S;XyO%Fqjr??RDl5_78k}`!%L2idq=b^>4qeXxgen*RW^5AYpi!uKRST_dJrV(uP z5Fa#!grE>IcXK`bWF<bw$SFc5D@$h#3Z=ENg2AI72=kEHkS<`yo5OfUmVVbf#)#u^ zk-DrLxdAJm3GFzI?w60;1TTa%ld#>GImGSe85n0Y=Ef&q_>p5`RuWNmh*xNGPDFVi z$_hv~aC_&)sNMyRfZ?upi<6RgEeb|Xq0dot3}tmzRE-HsMu8Fqeu#;30-g76abgzM z0EZD~RTUiJcy<d3H7SB$Ctj1p>1aYsD^j<kL=s!``=NDkXpqrJ>YDJDgjQ2Dm68%M z%`+>{%z}gl?qiV#`bUUkxvB?rEV|UQ8GF}wu!4#U&{;rMP%krMNVkUQS*Wv&(f8j$ zZIOUv+JE#Px)z5%18KzPJQcT(zW2=~Ay-j#TmD}6lC=OlaeCf==gvES{>KlU9Z$T~ z%R<guw|p!IVr>%a1gp?owlwsoqZ=;bu6l2Dx%ZK)W6jld-_^A`^U!s4!$Q0@-|t!N z{KxK(>L2YJ$kq>j;u*{xIK1rpUfJ?|)*IMtAzt5h8*zDW+urxw@npR%S?8XNu&2mo zK-?_hv4G9Etu_FDmt1((Q?X#Y1MDHxoZ#>Q)qGX+Y*<RXAu@*?RXy#*424{P+ueCV zVWGlLX@!hAFC6&YWnAxSC3r1dZ|2B|UXFnu4t4!7d2=0x5R#V}+|~q>86i%(%?x+r zumu;OkBe|=Q<{$yT7Vz9vC_HNgut-``7Tz=<|%MA+B&;o8@7#~TzIAE@PO=i4t7xz zgbI$;Zq5*1Bqm)hm8<{`SjpP1k{+S72jUIry1|2E0{<Vh3;sm1pBQt`z%4Wq+2kip zfPsIAk+*=%qYKr;qvI22&YvF~=oQ-)u~Vmmz=C^6`@+fdXC?;6CwkF;K(rK<x~LSF zAfV6(yw753;x!Z!-+=H~p{1(}5WfMl?HCRU37s^?i4?6kaB?u}YVfnh!>E9XrV#0E z$P|3aj(lLCQFn-tMj;BvR%St7sDPJs6)+ju%>w`?i`DtSTC?u1xfOmd3|7Uh8#iw( zUw!ClU-vd<nqIuC{^Z7oHy(KhzVJ3KM^<A$j(-q;=<Qpt6j!RVm7Qyq2jD+bd0^cq zZkV{b7oXHNKeY-~)gT(GT2}mbJ0AK@d|5}z>TiZOd19;m++BAoycGUQK^O4-Gl$Ps zn?J60p51Hz!?icFRgpcJ_NEk}=kecn07*f!2Kmp#b!=j`GQNRDrfYyzi$VnOSVDSY zLgY9AizQ(KL(hP&=62JyMQR5P#ErrWqI02nnXwGdRfun!m^jvWFrM_M&HJSFh?##= zDHg#eHpb9z!c-;aS$DK#9j%M~IcM3L(|_OTUlFp-_KeV8JdYtKFuumlgEH$mLQx1> zg4P}Z_HQdOny%n6%2}{_IvG#TC3IJR0pjqgAr(&pj{Y>imuUPhpervxhELPRm2YB} zb2M-8P(G<?*)T&1x}nOyVMWMBERIb(K>GReJP+duK_7~p@2`MO@O%Z{hgPt6fZs#h zm8qSw6RoX_eA?7a(x!7@`=t1AVNS4*cGzErT~Wj+N~91!hI0Cugi+9L&X8foc%wW} zf<0;)Iip)SX$U+S7?*@noV;!Luei%+_m&c%WrwBK$L%~nNIY}O{D0eV$`Ue3<9KtE zEeFtV%BM@_(pt(IvR-l={|k`h5Qu@m8d4lfV<lsZwiYruY1|C>xIk|q?h;>m-U9{A zL`Z4-ZoYcRX53lI91_4YwuLN^+tCl6yaOf&2|7Y%7dgbI91SFlL0OhU4r8336hmeu z!8~Ue1LiDEzGdv!Pey*OzZOze8ng<&nhYAJ7(xU89roV{nx=`2tP@i3x1FQ96^4eL z#&zkAH$V=J1Mgbw)VRO`FLsFmr^e4kuWNi<O3=3unFqO`*;MJedW}X?nxN-zCglWE zA51nd$*)yhOvvc34<=a7KEAnh&*vSOiJrzRfmy-#XKF@ssSx7>>BC}pnmhmLBZ5Y) zqB$As>#7m`ari31)RGG(DtglS$Qm8O=`mwG{u+oO;Bg0-Z=c%Aa@N`hR`Cm$XVXH& zwk<PXUh(h#)@6R1Csnn}{PMZKc4mETKTv*j>Z8N|a_pau-RsSajsIIZ+jlX$Ka|}& zx#pY9_$EK~w{GIlE#B-d1H01Wed@Njz2N`a>$iMhE&istx>nJVspwcayJTH27gs8O zSo1eEtMzxM?_SKd^kvImTC(Jvbq}2FxrV@_hLiWWM-69|&gVQ0%a<Q|#4p6oAG-h6 zy*iT>2X4D_4gQtZOrZCp*B%94ezfP*qlQy!^@I282k*^g>nCnoAr!c5S-!kdy<%JC zGS&N*oVkjoO!L7^`Jub5cW3T?J>xlrK>@S9eBD*M?0e{HUa#z0jb$qjFAc1_I#;Vd zaUI=4oA<x|vm6fj>+M6t3(h}hFV|dfMksZMe))`f;Hd3qo|b_=)6e>xgAVi0?HuHP zxUNMCEe7hDQT$w8`yq@`P$8p0=ePr#m@Ug2SgiK5T2VCt8cWFNOmw#aP^xM}BwR3G zgT#npqgsWCGY{SnDA#Yp7>c$InBcf$1r?rdBr&#O8QT_e{UU+z?9%n`Pd#+*&j|b3 zUIM1k(ZCD%VfIQIzPQ0xG>S?<v%-hv84O09gBtC}>|Jbk>%pyVJ+?(bFcQrP8Zi!E zSn-Rm?yTA1tB3xv2al&&RPa1uF7!>bCa?~>F=`S^(r(>DgT8LVkwaC&j-)j+MB^(f zuGozqZzK87trSIUezqM*5SS_8pxeCLL|`+jX$8>W!xoFBv#7dOyK_nD`n05f*VJQj z)jPZKb66}2QiItz4ZC-;JyTTBTKzK^uy|bQW<fmtQ(5CqgoLEx2kdVB%JtylGppby z1Et$|t8!fBnKS4ZbFwn63rZj2*g?*nhX<A@3wdc4oB=9GgSsP(Mzk(enJhyY{7gVg zv%RE$%YT{vJ@g{wDG;q7z@8lUnC$rlDf^7LKO>IMi03ondrVp%lZMBn@t5TEFUg_D z<mBgM;4wM)nDjm-#~+jZk4fKSY(Kbd;knw|U*9HBfMj!&ui5J#*z1>%XYFl^mTk)+ p&UgE3nWh)E2|!QZ<RJR=^f<VWPxpXL`=tX6q%TKd3kMi|{}1CDvmgKf diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-314.pyc deleted file mode 100644 index 188fbb9b43413c545f27b69d2997ae821dfde7c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12447 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-314.pyc deleted file mode 100644 index d8d07e12763bf9d350af5013202068231cc6f023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5207 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 X@A{wm-w}kK4;LQEXMRKs<Y)d5q)_&r diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index 07ed6078516723d64cc8a5186d7a7321b3b266bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8773 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 CfpFvi diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/cache.py deleted file mode 100644 index 862740f49..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/cache.py +++ /dev/null @@ -1,255 +0,0 @@ -import os -import textwrap -from optparse import Values -from typing import Callable - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.exceptions import CommandError, PipError -from pip._internal.utils import filesystem -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import format_size - -logger = getLogger(__name__) - - -class CacheCommand(Command): - """ - Inspect and manage pip's wheel cache. - - Subcommands: - - - dir: Show the cache directory. - - info: Show information about the cache. - - list: List filenames of packages stored in the cache. - - remove: Remove one or more package from the cache. - - purge: Remove all items from the cache. - - ``<pattern>`` can be a glob expression or a package name. - """ - - ignore_require_venv = True - usage = """ - %prog dir - %prog info - %prog list [<pattern>] [--format=[human, abspath]] - %prog remove <pattern> - %prog purge - """ - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--format", - action="store", - dest="list_format", - default="human", - choices=("human", "abspath"), - help="Select the output format among: human (default) or abspath", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def handler_map(self) -> dict[str, Callable[[Values, list[str]], None]]: - return { - "dir": self.get_cache_dir, - "info": self.get_cache_info, - "list": self.list_cache_items, - "remove": self.remove_cache_items, - "purge": self.purge_cache, - } - - def run(self, options: Values, args: list[str]) -> int: - handler_map = self.handler_map() - - if not options.cache_dir: - logger.error("pip cache commands can not function since cache is disabled.") - return ERROR - - # Determine action - if not args or args[0] not in handler_map: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handler_map)), - ) - return ERROR - - action = args[0] - - # Error handling happens here, not in the action-handlers. - try: - handler_map[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def get_cache_dir(self, options: Values, args: list[str]) -> None: - if args: - raise CommandError("Too many arguments") - - logger.info(options.cache_dir) - - def get_cache_info(self, options: Values, args: list[str]) -> None: - if args: - raise CommandError("Too many arguments") - - num_http_files = len(self._find_http_files(options)) - num_packages = len(self._find_wheels(options, "*")) - - http_cache_location = self._cache_dir(options, "http-v2") - old_http_cache_location = self._cache_dir(options, "http") - wheels_cache_location = self._cache_dir(options, "wheels") - http_cache_size = filesystem.format_size( - filesystem.directory_size(http_cache_location) - + filesystem.directory_size(old_http_cache_location) - ) - wheels_cache_size = filesystem.format_directory_size(wheels_cache_location) - - message = ( - textwrap.dedent( - """ - Package index page cache location (pip v23.3+): {http_cache_location} - Package index page cache location (older pips): {old_http_cache_location} - Package index page cache size: {http_cache_size} - Number of HTTP files: {num_http_files} - Locally built wheels location: {wheels_cache_location} - Locally built wheels size: {wheels_cache_size} - Number of locally built wheels: {package_count} - """ # noqa: E501 - ) - .format( - http_cache_location=http_cache_location, - old_http_cache_location=old_http_cache_location, - http_cache_size=http_cache_size, - num_http_files=num_http_files, - wheels_cache_location=wheels_cache_location, - package_count=num_packages, - wheels_cache_size=wheels_cache_size, - ) - .strip() - ) - - logger.info(message) - - def list_cache_items(self, options: Values, args: list[str]) -> None: - if len(args) > 1: - raise CommandError("Too many arguments") - - if args: - pattern = args[0] - else: - pattern = "*" - - files = self._find_wheels(options, pattern) - if options.list_format == "human": - self.format_for_human(files) - else: - self.format_for_abspath(files) - - def format_for_human(self, files: list[str]) -> None: - if not files: - logger.info("No locally built wheels cached.") - return - - results = [] - for filename in files: - wheel = os.path.basename(filename) - size = filesystem.format_file_size(filename) - results.append(f" - {wheel} ({size})") - logger.info("Cache contents:\n") - logger.info("\n".join(sorted(results))) - - def format_for_abspath(self, files: list[str]) -> None: - if files: - logger.info("\n".join(sorted(files))) - - def remove_cache_items(self, options: Values, args: list[str]) -> None: - if len(args) > 1: - raise CommandError("Too many arguments") - - if not args: - raise CommandError("Please provide a pattern") - - files = self._find_wheels(options, args[0]) - - no_matching_msg = "No matching packages" - if args[0] == "*": - # Only fetch http files if no specific pattern given - files += self._find_http_files(options) - else: - # Add the pattern to the log message - no_matching_msg += f' for pattern "{args[0]}"' - - if not files: - logger.warning(no_matching_msg) - - bytes_removed = 0 - for filename in files: - bytes_removed += os.stat(filename).st_size - os.unlink(filename) - logger.verbose("Removed %s", filename) - - http_dirs = filesystem.subdirs_without_files(self._cache_dir(options, "http")) - wheel_dirs = filesystem.subdirs_without_wheels( - self._cache_dir(options, "wheels") - ) - dirs = [*http_dirs, *wheel_dirs] - - for subdir in dirs: - try: - for file in subdir.iterdir(): - file.unlink(missing_ok=True) - subdir.rmdir() - except FileNotFoundError: - # If the directory is already gone, that's fine. - pass - logger.verbose("Removed %s", subdir) - - # selfcheck.json is no longer used by pip. - selfcheck_json = self._cache_dir(options, "selfcheck.json") - if os.path.isfile(selfcheck_json): - os.remove(selfcheck_json) - logger.verbose("Removed legacy selfcheck.json file") - - logger.info("Files removed: %s (%s)", len(files), format_size(bytes_removed)) - logger.info("Directories removed: %s", len(dirs)) - - def purge_cache(self, options: Values, args: list[str]) -> None: - if args: - raise CommandError("Too many arguments") - - return self.remove_cache_items(options, ["*"]) - - def _cache_dir(self, options: Values, subdir: str) -> str: - return os.path.join(options.cache_dir, subdir) - - def _find_http_files(self, options: Values) -> list[str]: - old_http_dir = self._cache_dir(options, "http") - new_http_dir = self._cache_dir(options, "http-v2") - return filesystem.find_files(old_http_dir, "*") + filesystem.find_files( - new_http_dir, "*" - ) - - def _find_wheels(self, options: Values, pattern: str) -> list[str]: - wheel_dir = self._cache_dir(options, "wheels") - - # The wheel filename format, as specified in PEP 427, is: - # {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl - # - # Additionally, non-alphanumeric values in the distribution are - # normalized to underscores (_), meaning hyphens can never occur - # before `-{version}`. - # - # Given that information: - # - If the pattern we're given contains a hyphen (-), the user is - # providing at least the version. Thus, we can just append `*.whl` - # to match the rest of it. - # - If the pattern we're given doesn't contain a hyphen (-), the - # user is only providing the name. Thus, we append `-*.whl` to - # match the hyphen before the version, followed by anything else. - # - # PEP 427: https://www.python.org/dev/peps/pep-0427/ - pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl") - - return filesystem.find_files(wheel_dir, pattern) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/check.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/check.py deleted file mode 100644 index 516757eea..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/check.py +++ /dev/null @@ -1,66 +0,0 @@ -import logging -from optparse import Values - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.metadata import get_default_environment -from pip._internal.operations.check import ( - check_package_set, - check_unsupported, - create_package_set_from_installed, -) -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -class CheckCommand(Command): - """Verify installed packages have compatible dependencies.""" - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def run(self, options: Values, args: list[str]) -> int: - package_set, parsing_probs = create_package_set_from_installed() - missing, conflicting = check_package_set(package_set) - unsupported = list( - check_unsupported( - get_default_environment().iter_installed_distributions(), - get_supported(), - ) - ) - - for project_name in missing: - version = package_set[project_name].version - for dependency in missing[project_name]: - write_output( - "%s %s requires %s, which is not installed.", - project_name, - version, - dependency[0], - ) - - for project_name in conflicting: - version = package_set[project_name].version - for dep_name, dep_version, req in conflicting[project_name]: - write_output( - "%s %s has requirement %s, but you have %s %s.", - project_name, - version, - req, - dep_name, - dep_version, - ) - for package in unsupported: - write_output( - "%s %s is not supported on this platform", - package.raw_name, - package.version, - ) - if missing or conflicting or parsing_probs or unsupported: - return ERROR - else: - write_output("No broken requirements found.") - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/completion.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/completion.py deleted file mode 100644 index 7ba205d72..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/completion.py +++ /dev/null @@ -1,136 +0,0 @@ -import sys -import textwrap -from optparse import Values - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.utils.misc import get_prog - -BASE_COMPLETION = """ -# pip {shell} completion start{script}# pip {shell} completion end -""" - -COMPLETION_SCRIPTS = { - "bash": """ - _pip_completion() - {{ - local IFS=$' \\t\\n' - COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\ - COMP_CWORD=$COMP_CWORD \\ - PIP_AUTO_COMPLETE=1 "$1" 2>/dev/null ) ) - }} - complete -o default -F _pip_completion {prog} - """, - "zsh": """ - #compdef -P pip[0-9.]# - __pip() {{ - compadd $( COMP_WORDS="$words[*]" \\ - COMP_CWORD=$((CURRENT-1)) \\ - PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ) - }} - if [[ $zsh_eval_context[-1] == loadautofunc ]]; then - # autoload from fpath, call function directly - __pip "$@" - else - # eval/source/. command, register function for later - compdef __pip -P 'pip[0-9.]#' - fi - """, - "fish": """ - function __fish_complete_pip - set -lx COMP_WORDS \\ - (commandline --current-process --tokenize --cut-at-cursor) \\ - (commandline --current-token --cut-at-cursor) - set -lx COMP_CWORD (math (count $COMP_WORDS) - 1) - set -lx PIP_AUTO_COMPLETE 1 - set -l completions - if string match -q '2.*' $version - set completions (eval $COMP_WORDS[1]) - else - set completions ($COMP_WORDS[1]) - end - string split \\ -- $completions - end - complete -fa "(__fish_complete_pip)" -c {prog} - """, - "powershell": """ - if ((Test-Path Function:\\TabExpansion) -and -not ` - (Test-Path Function:\\_pip_completeBackup)) {{ - Rename-Item Function:\\TabExpansion _pip_completeBackup - }} - function TabExpansion($line, $lastWord) {{ - $lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart() - if ($lastBlock.StartsWith("{prog} ")) {{ - $Env:COMP_WORDS=$lastBlock - $Env:COMP_CWORD=$lastBlock.Split().Length - 1 - $Env:PIP_AUTO_COMPLETE=1 - (& {prog}).Split() - Remove-Item Env:COMP_WORDS - Remove-Item Env:COMP_CWORD - Remove-Item Env:PIP_AUTO_COMPLETE - }} - elseif (Test-Path Function:\\_pip_completeBackup) {{ - # Fall back on existing tab expansion - _pip_completeBackup $line $lastWord - }} - }} - """, -} - - -class CompletionCommand(Command): - """A helper command to be used for command completion.""" - - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--bash", - "-b", - action="store_const", - const="bash", - dest="shell", - help="Emit completion code for bash", - ) - self.cmd_opts.add_option( - "--zsh", - "-z", - action="store_const", - const="zsh", - dest="shell", - help="Emit completion code for zsh", - ) - self.cmd_opts.add_option( - "--fish", - "-f", - action="store_const", - const="fish", - dest="shell", - help="Emit completion code for fish", - ) - self.cmd_opts.add_option( - "--powershell", - "-p", - action="store_const", - const="powershell", - dest="shell", - help="Emit completion code for powershell", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - """Prints the completion code of the given shell""" - shells = COMPLETION_SCRIPTS.keys() - shell_options = ["--" + shell for shell in sorted(shells)] - if options.shell in shells: - script = textwrap.dedent( - COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog()) - ) - print(BASE_COMPLETION.format(script=script, shell=options.shell)) - return SUCCESS - else: - sys.stderr.write( - "ERROR: You must pass {}\n".format(" or ".join(shell_options)) - ) - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/configuration.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/configuration.py deleted file mode 100644 index 7bcea0434..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/configuration.py +++ /dev/null @@ -1,288 +0,0 @@ -from __future__ import annotations - -import logging -import os -import subprocess -from optparse import Values -from typing import Any, Callable - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.configuration import ( - Configuration, - Kind, - get_configuration_files, - kinds, -) -from pip._internal.exceptions import PipError -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import get_prog, write_output - -logger = logging.getLogger(__name__) - - -class ConfigurationCommand(Command): - """ - Manage local and global configuration. - - Subcommands: - - - list: List the active configuration (or from the file specified) - - edit: Edit the configuration file in an editor - - get: Get the value associated with command.option - - set: Set the command.option=value - - unset: Unset the value associated with command.option - - debug: List the configuration files and values defined under them - - Configuration keys should be dot separated command and option name, - with the special prefix "global" affecting any command. For example, - "pip config set global.index-url https://example.org/" would configure - the index url for all commands, but "pip config set download.timeout 10" - would configure a 10 second timeout only for "pip download" commands. - - If none of --user, --global and --site are passed, a virtual - environment configuration file is used if one is active and the file - exists. Otherwise, all modifications happen to the user file by - default. - """ - - ignore_require_venv = True - usage = """ - %prog [<file-option>] list - %prog [<file-option>] [--editor <editor-path>] edit - - %prog [<file-option>] get command.option - %prog [<file-option>] set command.option value - %prog [<file-option>] unset command.option - %prog [<file-option>] debug - """ - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--editor", - dest="editor", - action="store", - default=None, - help=( - "Editor to use to edit the file. Uses VISUAL or EDITOR " - "environment variables if not provided." - ), - ) - - self.cmd_opts.add_option( - "--global", - dest="global_file", - action="store_true", - default=False, - help="Use the system-wide configuration file only", - ) - - self.cmd_opts.add_option( - "--user", - dest="user_file", - action="store_true", - default=False, - help="Use the user configuration file only", - ) - - self.cmd_opts.add_option( - "--site", - dest="site_file", - action="store_true", - default=False, - help="Use the current environment configuration file only", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def handler_map(self) -> dict[str, Callable[[Values, list[str]], None]]: - return { - "list": self.list_values, - "edit": self.open_in_editor, - "get": self.get_name, - "set": self.set_name_value, - "unset": self.unset_name, - "debug": self.list_config_values, - } - - def run(self, options: Values, args: list[str]) -> int: - handler_map = self.handler_map() - - # Determine action - if not args or args[0] not in handler_map: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handler_map)), - ) - return ERROR - - action = args[0] - - # Determine which configuration files are to be loaded - # Depends on whether the command is modifying. - try: - load_only = self._determine_file( - options, need_value=(action in ["get", "set", "unset", "edit"]) - ) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - # Load a new configuration - self.configuration = Configuration( - isolated=options.isolated_mode, load_only=load_only - ) - self.configuration.load() - - # Error handling happens here, not in the action-handlers. - try: - handler_map[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def _determine_file(self, options: Values, need_value: bool) -> Kind | None: - file_options = [ - key - for key, value in ( - (kinds.USER, options.user_file), - (kinds.GLOBAL, options.global_file), - (kinds.SITE, options.site_file), - ) - if value - ] - - if not file_options: - if not need_value: - return None - # Default to user, unless there's a site file. - elif any( - os.path.exists(site_config_file) - for site_config_file in get_configuration_files()[kinds.SITE] - ): - return kinds.SITE - else: - return kinds.USER - elif len(file_options) == 1: - return file_options[0] - - raise PipError( - "Need exactly one file to operate upon " - "(--user, --site, --global) to perform." - ) - - def list_values(self, options: Values, args: list[str]) -> None: - self._get_n_args(args, "list", n=0) - - for key, value in sorted(self.configuration.items()): - for key, value in sorted(value.items()): - write_output("%s=%r", key, value) - - def get_name(self, options: Values, args: list[str]) -> None: - key = self._get_n_args(args, "get [name]", n=1) - value = self.configuration.get_value(key) - - write_output("%s", value) - - def set_name_value(self, options: Values, args: list[str]) -> None: - key, value = self._get_n_args(args, "set [name] [value]", n=2) - self.configuration.set_value(key, value) - - self._save_configuration() - - def unset_name(self, options: Values, args: list[str]) -> None: - key = self._get_n_args(args, "unset [name]", n=1) - self.configuration.unset_value(key) - - self._save_configuration() - - def list_config_values(self, options: Values, args: list[str]) -> None: - """List config key-value pairs across different config files""" - self._get_n_args(args, "debug", n=0) - - self.print_env_var_values() - # Iterate over config files and print if they exist, and the - # key-value pairs present in them if they do - for variant, files in sorted(self.configuration.iter_config_files()): - write_output("%s:", variant) - for fname in files: - with indent_log(): - file_exists = os.path.exists(fname) - write_output("%s, exists: %r", fname, file_exists) - if file_exists: - self.print_config_file_values(variant, fname) - - def print_config_file_values(self, variant: Kind, fname: str) -> None: - """Get key-value pairs from the file of a variant""" - for name, value in self.configuration.get_values_in_config(variant).items(): - with indent_log(): - if name == fname: - for confname, confvalue in value.items(): - write_output("%s: %s", confname, confvalue) - - def print_env_var_values(self) -> None: - """Get key-values pairs present as environment variables""" - write_output("%s:", "env_var") - with indent_log(): - for key, value in sorted(self.configuration.get_environ_vars()): - env_var = f"PIP_{key.upper()}" - write_output("%s=%r", env_var, value) - - def open_in_editor(self, options: Values, args: list[str]) -> None: - editor = self._determine_editor(options) - - fname = self.configuration.get_file_to_edit() - if fname is None: - raise PipError("Could not determine appropriate file.") - elif '"' in fname: - # This shouldn't happen, unless we see a username like that. - # If that happens, we'd appreciate a pull request fixing this. - raise PipError( - f'Can not open an editor for a file name containing "\n{fname}' - ) - - try: - subprocess.check_call(f'{editor} "{fname}"', shell=True) - except FileNotFoundError as e: - if not e.filename: - e.filename = editor - raise - except subprocess.CalledProcessError as e: - raise PipError(f"Editor Subprocess exited with exit code {e.returncode}") - - def _get_n_args(self, args: list[str], example: str, n: int) -> Any: - """Helper to make sure the command got the right number of arguments""" - if len(args) != n: - msg = ( - f"Got unexpected number of arguments, expected {n}. " - f'(example: "{get_prog()} config {example}")' - ) - raise PipError(msg) - - if n == 1: - return args[0] - else: - return args - - def _save_configuration(self) -> None: - # We successfully ran a modifying command. Need to save the - # configuration. - try: - self.configuration.save() - except Exception: - logger.exception( - "Unable to save configuration. Please report this as a bug." - ) - raise PipError("Internal Error.") - - def _determine_editor(self, options: Values) -> str: - if options.editor is not None: - return options.editor - elif "VISUAL" in os.environ: - return os.environ["VISUAL"] - elif "EDITOR" in os.environ: - return os.environ["EDITOR"] - else: - raise PipError("Could not determine editor to use.") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/debug.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/debug.py deleted file mode 100644 index 0e187e79c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/debug.py +++ /dev/null @@ -1,203 +0,0 @@ -from __future__ import annotations - -import locale -import logging -import os -import sys -from optparse import Values -from types import ModuleType -from typing import Any - -import pip._vendor -from pip._vendor.certifi import where -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.configuration import Configuration -from pip._internal.metadata import get_environment -from pip._internal.utils.compat import open_text_resource -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import get_pip_version - -logger = logging.getLogger(__name__) - - -def show_value(name: str, value: Any) -> None: - logger.info("%s: %s", name, value) - - -def show_sys_implementation() -> None: - logger.info("sys.implementation:") - implementation_name = sys.implementation.name - with indent_log(): - show_value("name", implementation_name) - - -def create_vendor_txt_map() -> dict[str, str]: - with open_text_resource("pip._vendor", "vendor.txt") as f: - # Purge non version specifying lines. - # Also, remove any space prefix or suffixes (including comments). - lines = [ - line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line - ] - - # Transform into "module" -> version dict. - return dict(line.split("==", 1) for line in lines) - - -def get_module_from_module_name(module_name: str) -> ModuleType | None: - # Module name can be uppercase in vendor.txt for some reason... - module_name = module_name.lower().replace("-", "_") - # PATCH: setuptools is actually only pkg_resources. - if module_name == "setuptools": - module_name = "pkg_resources" - - try: - __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0) - return getattr(pip._vendor, module_name) - except ImportError: - # We allow 'truststore' to fail to import due - # to being unavailable on Python 3.9 and earlier. - if module_name == "truststore" and sys.version_info < (3, 10): - return None - raise - - -def get_vendor_version_from_module(module_name: str) -> str | None: - module = get_module_from_module_name(module_name) - version = getattr(module, "__version__", None) - - if module and not version: - # Try to find version in debundled module info. - assert module.__file__ is not None - env = get_environment([os.path.dirname(module.__file__)]) - dist = env.get_distribution(module_name) - if dist: - version = str(dist.version) - - return version - - -def show_actual_vendor_versions(vendor_txt_versions: dict[str, str]) -> None: - """Log the actual version and print extra info if there is - a conflict or if the actual version could not be imported. - """ - for module_name, expected_version in vendor_txt_versions.items(): - extra_message = "" - actual_version = get_vendor_version_from_module(module_name) - if not actual_version: - extra_message = ( - " (Unable to locate actual module version, using" - " vendor.txt specified version)" - ) - actual_version = expected_version - elif parse_version(actual_version) != parse_version(expected_version): - extra_message = ( - " (CONFLICT: vendor.txt suggests version should" - f" be {expected_version})" - ) - logger.info("%s==%s%s", module_name, actual_version, extra_message) - - -def show_vendor_versions() -> None: - logger.info("vendored library versions:") - - vendor_txt_versions = create_vendor_txt_map() - with indent_log(): - show_actual_vendor_versions(vendor_txt_versions) - - -def show_tags(options: Values) -> None: - tag_limit = 10 - - target_python = make_target_python(options) - tags = target_python.get_sorted_tags() - - # Display the target options that were explicitly provided. - formatted_target = target_python.format_given() - suffix = "" - if formatted_target: - suffix = f" (target: {formatted_target})" - - msg = f"Compatible tags: {len(tags)}{suffix}" - logger.info(msg) - - if options.verbose < 1 and len(tags) > tag_limit: - tags_limited = True - tags = tags[:tag_limit] - else: - tags_limited = False - - with indent_log(): - for tag in tags: - logger.info(str(tag)) - - if tags_limited: - msg = f"...\n[First {tag_limit} tags shown. Pass --verbose to show all.]" - logger.info(msg) - - -def ca_bundle_info(config: Configuration) -> str: - levels = {key.split(".", 1)[0] for key, _ in config.items()} - if not levels: - return "Not specified" - - levels_that_override_global = ["install", "wheel", "download"] - global_overriding_level = [ - level for level in levels if level in levels_that_override_global - ] - if not global_overriding_level: - return "global" - - if "global" in levels: - levels.remove("global") - return ", ".join(levels) - - -class DebugCommand(Command): - """ - Display debug information. - """ - - usage = """ - %prog <options>""" - ignore_require_venv = True - - def add_options(self) -> None: - cmdoptions.add_target_python_options(self.cmd_opts) - self.parser.insert_option_group(0, self.cmd_opts) - self.parser.config.load() - - def run(self, options: Values, args: list[str]) -> int: - logger.warning( - "This command is only meant for debugging. " - "Do not use this with automation for parsing and getting these " - "details, since the output and options of this command may " - "change without notice." - ) - show_value("pip version", get_pip_version()) - show_value("sys.version", sys.version) - show_value("sys.executable", sys.executable) - show_value("sys.getdefaultencoding", sys.getdefaultencoding()) - show_value("sys.getfilesystemencoding", sys.getfilesystemencoding()) - show_value( - "locale.getpreferredencoding", - locale.getpreferredencoding(), - ) - show_value("sys.platform", sys.platform) - show_sys_implementation() - - show_value("'cert' config value", ca_bundle_info(self.parser.config)) - show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE")) - show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE")) - show_value("pip._vendor.certifi.where()", where()) - show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED) - - show_vendor_versions() - - show_tags(options) - - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/download.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/download.py deleted file mode 100644 index 5c0a3a51d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/download.py +++ /dev/null @@ -1,146 +0,0 @@ -import logging -import os -from optparse import Values - -from pip._internal.cli import cmdoptions -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.req_command import RequirementCommand, with_cleanup -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.utils.misc import ensure_dir, normalize_path, write_output -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -class DownloadCommand(RequirementCommand): - """ - Download packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports downloading from "requirements files", which provide - an easy way to specify a whole environment to be downloaded. - """ - - usage = """ - %prog [options] <requirement specifier> [package-index-options] ... - %prog [options] -r <requirements file> [package-index-options] ... - %prog [options] <vcs project url> ... - %prog [options] <local project path> ... - %prog [options] <archive url/path> ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.build_constraints()) - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.requirements_from_scripts()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - self.cmd_opts.add_option(cmdoptions.src()) - self.cmd_opts.add_option(cmdoptions.require_hashes()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - - self.cmd_opts.add_option( - "-d", - "--dest", - "--destination-dir", - "--destination-directory", - dest="download_dir", - metavar="dir", - default=os.curdir, - help="Download packages into <dir>.", - ) - - cmdoptions.add_target_python_options(self.cmd_opts) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - @with_cleanup - def run(self, options: Values, args: list[str]) -> int: - options.ignore_installed = True - # editable doesn't really make sense for `pip download`, but the bowels - # of the RequirementSet code require that property. - options.editables = [] - - cmdoptions.check_dist_restriction(options) - cmdoptions.check_build_constraints(options) - cmdoptions.check_release_control_exclusive(options) - - options.download_dir = normalize_path(options.download_dir) - ensure_dir(options.download_dir) - - session = self.get_default_session(options) - - target_python = make_target_python(options) - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="download", - globally_managed=True, - ) - - reqs = self.get_requirements(args, options, finder, session) - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - download_dir=options.download_dir, - use_user_site=False, - verbosity=self.verbosity, - ) - - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - ignore_requires_python=options.ignore_requires_python, - py_version_info=options.python_version, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve(reqs, check_supported_wheels=True) - - preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) - - downloaded: list[str] = [] - for req in requirement_set.requirements.values(): - if req.satisfied_by is None: - assert req.name is not None - preparer.save_linked_requirement(req) - downloaded.append(req.name) - - if downloaded: - write_output("Successfully downloaded %s", " ".join(downloaded)) - - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/freeze.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/freeze.py deleted file mode 100644 index 7794857cf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/freeze.py +++ /dev/null @@ -1,107 +0,0 @@ -import sys -from optparse import Values - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.operations.freeze import freeze -from pip._internal.utils.compat import stdlib_pkgs - - -def _should_suppress_build_backends() -> bool: - return sys.version_info < (3, 12) - - -def _dev_pkgs() -> set[str]: - pkgs = {"pip"} - - if _should_suppress_build_backends(): - pkgs |= {"setuptools", "distribute", "wheel"} - - return pkgs - - -class FreezeCommand(Command): - """ - Output installed packages in requirements format. - - packages are listed in a case-insensitive sorted order. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help=( - "Use the order in the given requirements file and its " - "comments when generating output. This option can be " - "used multiple times." - ), - ) - self.cmd_opts.add_option( - "-l", - "--local", - dest="local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not output " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - self.cmd_opts.add_option( - "--all", - dest="freeze_all", - action="store_true", - help=( - "Do not skip these packages in the output:" - " {}".format(", ".join(_dev_pkgs())) - ), - ) - self.cmd_opts.add_option( - "--exclude-editable", - dest="exclude_editable", - action="store_true", - help="Exclude editable package from output.", - ) - self.cmd_opts.add_option(cmdoptions.list_exclude()) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - skip = set(stdlib_pkgs) - if not options.freeze_all: - skip.update(_dev_pkgs()) - - if options.excludes: - skip.update(options.excludes) - - cmdoptions.check_list_path_option(options) - - for line in freeze( - requirement=options.requirements, - local_only=options.local, - user_only=options.user, - paths=options.path, - isolated=options.isolated_mode, - skip=skip, - exclude_editable=options.exclude_editable, - ): - sys.stdout.write(line + "\n") - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/hash.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/hash.py deleted file mode 100644 index 271a4c91a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/hash.py +++ /dev/null @@ -1,58 +0,0 @@ -import hashlib -import logging -import sys -from optparse import Values - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES -from pip._internal.utils.misc import read_chunks, write_output - -logger = logging.getLogger(__name__) - - -class HashCommand(Command): - """ - Compute a hash of a local package archive. - - These can be used with --hash in a requirements file to do repeatable - installs. - """ - - usage = "%prog [options] <file> ..." - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-a", - "--algorithm", - dest="algorithm", - choices=STRONG_HASHES, - action="store", - default=FAVORITE_HASH, - help="The hash algorithm to use: one of {}".format( - ", ".join(STRONG_HASHES) - ), - ) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - if not args: - self.parser.print_usage(sys.stderr) - return ERROR - - algorithm = options.algorithm - for path in args: - write_output( - "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm) - ) - return SUCCESS - - -def _hash_of_file(path: str, algorithm: str) -> str: - """Return the hash digest of a file.""" - with open(path, "rb") as archive: - hash = hashlib.new(algorithm) - for chunk in read_chunks(archive): - hash.update(chunk) - return hash.hexdigest() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/help.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/help.py deleted file mode 100644 index 2ae658ff5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/help.py +++ /dev/null @@ -1,40 +0,0 @@ -from optparse import Values - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError - - -class HelpCommand(Command): - """Show help for commands""" - - usage = """ - %prog <command>""" - ignore_require_venv = True - - def run(self, options: Values, args: list[str]) -> int: - from pip._internal.commands import ( - commands_dict, - create_command, - get_similar_commands, - ) - - try: - # 'pip help' with no args is handled by pip.__init__.parseopt() - cmd_name = args[0] # the command we need help for - except IndexError: - return SUCCESS - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = [f'unknown command "{cmd_name}"'] - if guess: - msg.append(f'maybe you meant "{guess}"') - - raise CommandError(" - ".join(msg)) - - command = create_command(cmd_name) - command.parser.print_help() - - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/index.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/index.py deleted file mode 100644 index 40b8f580f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/index.py +++ /dev/null @@ -1,166 +0,0 @@ -from __future__ import annotations - -import json -import logging -from collections.abc import Iterable -from optparse import Values -from typing import Any, Callable - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.req_command import IndexGroupCommand -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.commands.search import ( - get_installed_distribution, - print_dist_installation_info, -) -from pip._internal.exceptions import CommandError, DistributionNotFound, PipError -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.network.session import PipSession -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -class IndexCommand(IndexGroupCommand): - """ - Inspect information available from package indexes. - """ - - ignore_require_venv = True - usage = """ - %prog versions <package> - """ - - def add_options(self) -> None: - cmdoptions.add_target_python_options(self.cmd_opts) - - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.json()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - def handler_map(self) -> dict[str, Callable[[Values, list[str]], None]]: - return { - "versions": self.get_available_package_versions, - } - - def run(self, options: Values, args: list[str]) -> int: - cmdoptions.check_release_control_exclusive(options) - - handler_map = self.handler_map() - - # Determine action - if not args or args[0] not in handler_map: - logger.error( - "Need an action (%s) to perform.", - ", ".join(sorted(handler_map)), - ) - return ERROR - - action = args[0] - - # Error handling happens here, not in the action-handlers. - try: - handler_map[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def _build_package_finder( - self, - options: Values, - session: PipSession, - target_python: TargetPython | None = None, - ignore_requires_python: bool | None = None, - ) -> PackageFinder: - """ - Create a package finder appropriate to the index command. - """ - link_collector = LinkCollector.create(session, options=options) - - # Pass allow_yanked=False to ignore yanked versions. - selection_prefs = SelectionPreferences( - allow_yanked=False, - release_control=options.release_control, - format_control=options.format_control, - ignore_requires_python=ignore_requires_python, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - target_python=target_python, - uploaded_prior_to=options.uploaded_prior_to, - ) - - def get_available_package_versions(self, options: Values, args: list[Any]) -> None: - if len(args) != 1: - raise CommandError("You need to specify exactly one argument") - - target_python = cmdoptions.make_target_python(options) - query = args[0] - - with self._build_session(options) as session: - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - - versions: Iterable[Version] = ( - candidate.version for candidate in finder.find_all_candidates(query) - ) - - if self.should_exclude_prerelease(options, canonicalize_name(query)): - versions = ( - version for version in versions if not version.is_prerelease - ) - versions = set(versions) - - if not versions: - raise DistributionNotFound( - f"No matching distribution found for {query}" - ) - - formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)] - latest = formatted_versions[0] - - dist = get_installed_distribution(query) - - if options.json: - structured_output = { - "name": query, - "versions": formatted_versions, - "latest": latest, - } - - if dist is not None: - structured_output["installed_version"] = str(dist.version) - - write_output(json.dumps(structured_output)) - - else: - write_output(f"{query} ({latest})") - write_output("Available versions: {}".format(", ".join(formatted_versions))) - print_dist_installation_info(latest, dist) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/inspect.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/inspect.py deleted file mode 100644 index e262012ee..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/inspect.py +++ /dev/null @@ -1,92 +0,0 @@ -import logging -from optparse import Values -from typing import Any - -from pip._vendor.packaging.markers import default_environment -from pip._vendor.rich import print_json - -from pip import __version__ -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.utils.compat import stdlib_pkgs -from pip._internal.utils.urls import path_to_url - -logger = logging.getLogger(__name__) - - -class InspectCommand(Command): - """ - Inspect the content of a Python environment and produce a report in JSON format. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "--local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not list " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - cmdoptions.check_list_path_option(options) - dists = get_environment(options.path).iter_installed_distributions( - local_only=options.local, - user_only=options.user, - skip=set(stdlib_pkgs), - ) - output = { - "version": "1", - "pip_version": __version__, - "installed": [self._dist_to_dict(dist) for dist in dists], - "environment": default_environment(), - # TODO tags? scheme? - } - print_json(data=output) - return SUCCESS - - def _dist_to_dict(self, dist: BaseDistribution) -> dict[str, Any]: - res: dict[str, Any] = { - "metadata": dist.metadata_dict, - "metadata_location": dist.info_location, - } - # direct_url. Note that we don't have download_info (as in the installation - # report) since it is not recorded in installed metadata. - direct_url = dist.direct_url - if direct_url is not None: - res["direct_url"] = direct_url.to_dict() - else: - # Emulate direct_url for legacy editable installs. - editable_project_location = dist.editable_project_location - if editable_project_location is not None: - res["direct_url"] = { - "url": path_to_url(editable_project_location), - "dir_info": { - "editable": True, - }, - } - # installer - installer = dist.installer - if dist.installer: - res["installer"] = installer - # requested - if dist.installed_with_dist_info: - res["requested"] = dist.requested - return res diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/install.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/install.py deleted file mode 100644 index 8c3d86648..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/install.py +++ /dev/null @@ -1,810 +0,0 @@ -from __future__ import annotations - -import errno -import json -import operator -import os -import shutil -import site -from optparse import SUPPRESS_HELP, Values -from pathlib import Path - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.requests.exceptions import InvalidProxyURL -from pip._vendor.rich import print_json - -# Eagerly import self_outdated_check to avoid crashes. Otherwise, -# this module would be imported *after* pip was replaced, resulting -# in crashes if the new self_outdated_check module was incompatible -# with the rest of pip that's already imported, or allowing a -# wheel to execute arbitrary code on install by replacing -# self_outdated_check. -import pip._internal.self_outdated_check # noqa: F401 -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.cmdoptions import make_target_python -from pip._internal.cli.req_command import ( - RequirementCommand, - with_cleanup, -) -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.exceptions import ( - CommandError, - InstallationError, - InstallWheelBuildError, -) -from pip._internal.locations import get_scheme -from pip._internal.metadata import BaseEnvironment, get_environment -from pip._internal.models.installation_report import InstallationReport -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.operations.check import ConflictDetails, check_install_conflicts -from pip._internal.req import InstallationResult, install_given_reqs -from pip._internal.req.req_install import ( - InstallRequirement, -) -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.filesystem import test_writable_dir -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ( - check_externally_managed, - ensure_dir, - get_pip_version, - protect_pip_from_modification_on_windows, - warn_if_run_as_root, - write_output, -) -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.virtualenv import ( - running_under_virtualenv, - virtualenv_no_global, -) -from pip._internal.wheel_builder import build - -logger = getLogger(__name__) - - -class InstallCommand(RequirementCommand): - """ - Install packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports installing from "requirements files", which provide - an easy way to specify a whole environment to be installed. - """ - - usage = """ - %prog [options] <requirement specifier> [package-index-options] ... - %prog [options] -r <requirements file> [package-index-options] ... - %prog [options] [-e] <vcs project url> ... - %prog [options] [-e] <local project path> ... - %prog [options] <archive url/path> ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.build_constraints()) - self.cmd_opts.add_option(cmdoptions.requirements_from_scripts()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - - self.cmd_opts.add_option(cmdoptions.editable()) - self.cmd_opts.add_option( - "--dry-run", - action="store_true", - dest="dry_run", - default=False, - help=( - "Don't actually install anything, just print what would be. " - "Can be used in combination with --ignore-installed " - "to 'resolve' the requirements." - ), - ) - self.cmd_opts.add_option( - "-t", - "--target", - dest="target_dir", - metavar="dir", - default=None, - help=( - "Install packages into <dir>. " - "By default this will not replace existing files/folders in " - "<dir>. Use --upgrade to replace existing packages in <dir> " - "with new versions." - ), - ) - cmdoptions.add_target_python_options(self.cmd_opts) - - self.cmd_opts.add_option( - "--user", - dest="use_user_site", - action="store_true", - help=( - "Install to the Python user install directory for your " - "platform. Typically ~/.local/, or %APPDATA%\\Python on " - "Windows. (See the Python documentation for site.USER_BASE " - "for full details.)" - ), - ) - self.cmd_opts.add_option( - "--no-user", - dest="use_user_site", - action="store_false", - help=SUPPRESS_HELP, - ) - self.cmd_opts.add_option( - "--root", - dest="root_path", - metavar="dir", - default=None, - help="Install everything relative to this alternate root directory.", - ) - self.cmd_opts.add_option( - "--prefix", - dest="prefix_path", - metavar="dir", - default=None, - help=( - "Installation prefix where lib, bin and other top-level " - "folders are placed. Note that the resulting installation may " - "contain scripts and other resources which reference the " - "Python interpreter of pip, and not that of ``--prefix``. " - "See also the ``--python`` option if the intention is to " - "install packages into another (possibly pip-free) " - "environment." - ), - ) - - self.cmd_opts.add_option(cmdoptions.src()) - - self.cmd_opts.add_option( - "-U", - "--upgrade", - dest="upgrade", - action="store_true", - help=( - "Upgrade all specified packages to the newest available " - "version. The handling of dependencies depends on the " - "upgrade-strategy used." - ), - ) - - self.cmd_opts.add_option( - "--upgrade-strategy", - dest="upgrade_strategy", - default="only-if-needed", - choices=["only-if-needed", "eager"], - help=( - "Determines how dependency upgrading should be handled " - "[default: %default]. " - '"eager" - dependencies are upgraded regardless of ' - "whether the currently installed version satisfies the " - "requirements of the upgraded package(s). " - '"only-if-needed" - are upgraded only when they do not ' - "satisfy the requirements of the upgraded package(s)." - ), - ) - - self.cmd_opts.add_option( - "--force-reinstall", - dest="force_reinstall", - action="store_true", - help="Reinstall all packages even if they are already up-to-date.", - ) - - self.cmd_opts.add_option( - "-I", - "--ignore-installed", - dest="ignore_installed", - action="store_true", - help=( - "Ignore the installed packages, overwriting them. " - "This can break your system if the existing package " - "is of a different version or was installed " - "with a different package manager!" - ), - ) - - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.override_externally_managed()) - - self.cmd_opts.add_option(cmdoptions.config_settings()) - - self.cmd_opts.add_option( - "--compile", - action="store_true", - dest="compile", - default=True, - help="Compile Python source files to bytecode", - ) - - self.cmd_opts.add_option( - "--no-compile", - action="store_false", - dest="compile", - help="Do not compile Python source files to bytecode", - ) - - self.cmd_opts.add_option( - "--no-warn-script-location", - action="store_false", - dest="warn_script_location", - default=True, - help="Do not warn when installing scripts outside PATH", - ) - self.cmd_opts.add_option( - "--no-warn-conflicts", - action="store_false", - dest="warn_about_conflicts", - default=True, - help="Do not warn about broken dependencies", - ) - self.cmd_opts.add_option(cmdoptions.require_hashes()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - self.cmd_opts.add_option(cmdoptions.root_user_action()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - self.cmd_opts.add_option( - "--report", - dest="json_report_file", - metavar="file", - default=None, - help=( - "Generate a JSON file describing what pip did to install " - "the provided requirements. " - "Can be used in combination with --dry-run and --ignore-installed " - "to 'resolve' the requirements. " - "When - is used as file name it writes to stdout. " - "When writing to stdout, please combine with the --quiet option " - "to avoid mixing pip logging output with JSON output." - ), - ) - - @with_cleanup - def run(self, options: Values, args: list[str]) -> int: - if options.use_user_site and options.target_dir is not None: - raise CommandError("Can not combine '--user' and '--target'") - - # Check whether the environment we're installing into is externally - # managed, as specified in PEP 668. Specifying --root, --target, or - # --prefix disables the check, since there's no reliable way to locate - # the EXTERNALLY-MANAGED file for those cases. An exception is also - # made specifically for "--dry-run --report" for convenience. - installing_into_current_environment = ( - not (options.dry_run and options.json_report_file) - and options.root_path is None - and options.target_dir is None - and options.prefix_path is None - ) - if ( - installing_into_current_environment - and not options.override_externally_managed - ): - check_externally_managed() - - upgrade_strategy = "to-satisfy-only" - if options.upgrade: - upgrade_strategy = options.upgrade_strategy - - cmdoptions.check_build_constraints(options) - cmdoptions.check_dist_restriction(options, check_target=True) - cmdoptions.check_release_control_exclusive(options) - - logger.verbose("Using %s", get_pip_version()) - options.use_user_site = decide_user_install( - options.use_user_site, - prefix_path=options.prefix_path, - target_dir=options.target_dir, - root_path=options.root_path, - isolated_mode=options.isolated_mode, - ) - - target_temp_dir: TempDirectory | None = None - target_temp_dir_path: str | None = None - if options.target_dir: - options.ignore_installed = True - options.target_dir = os.path.abspath(options.target_dir) - if ( - # fmt: off - os.path.exists(options.target_dir) and - not os.path.isdir(options.target_dir) - # fmt: on - ): - raise CommandError( - "Target path exists but is not a directory, will not continue." - ) - - # Create a target directory for using with the target option - target_temp_dir = TempDirectory(kind="target") - target_temp_dir_path = target_temp_dir.path - self.enter_context(target_temp_dir) - - session = self.get_default_session(options) - - target_python = make_target_python(options) - finder = self._build_package_finder( - options=options, - session=session, - target_python=target_python, - ignore_requires_python=options.ignore_requires_python, - ) - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="install", - globally_managed=True, - ) - - try: - reqs = self.get_requirements(args, options, finder, session) - - wheel_cache = WheelCache(options.cache_dir) - - # Only when installing is it permitted to use PEP 660. - # In other circumstances (pip wheel, pip download) we generate - # regular (i.e. non editable) metadata and wheels. - for req in reqs: - req.permit_editable_wheels = True - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - use_user_site=options.use_user_site, - verbosity=self.verbosity, - ) - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - wheel_cache=wheel_cache, - use_user_site=options.use_user_site, - ignore_installed=options.ignore_installed, - ignore_requires_python=options.ignore_requires_python, - force_reinstall=options.force_reinstall, - upgrade_strategy=upgrade_strategy, - py_version_info=options.python_version, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve( - reqs, check_supported_wheels=not options.target_dir - ) - - if options.json_report_file: - report = InstallationReport(requirement_set.requirements_to_install) - if options.json_report_file == "-": - print_json(data=report.to_dict()) - else: - with open(options.json_report_file, "w", encoding="utf-8") as f: - json.dump(report.to_dict(), f, indent=2, ensure_ascii=False) - - if options.dry_run: - would_install_items = sorted( - (r.metadata["name"], r.metadata["version"]) - for r in requirement_set.requirements_to_install - ) - if would_install_items: - write_output( - "Would install %s", - " ".join("-".join(item) for item in would_install_items), - ) - return SUCCESS - - # If there is any more preparation to do for the actual installation, do - # so now. This includes actually downloading the files in the case that - # we have been using PEP-658 metadata so far. - preparer.prepare_linked_requirements_more( - requirement_set.requirements.values() - ) - - try: - pip_req = requirement_set.get_requirement("pip") - except KeyError: - modifying_pip = False - else: - # If we're not replacing an already installed pip, - # we're not modifying it. - modifying_pip = pip_req.satisfied_by is None - protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) - - reqs_to_build = [ - r for r in requirement_set.requirements_to_install if not r.is_wheel - ] - - _, build_failures = build( - reqs_to_build, - wheel_cache=wheel_cache, - verify=True, - ) - - if build_failures: - raise InstallWheelBuildError(build_failures) - - to_install = resolver.get_installation_order(requirement_set) - - # Check for conflicts in the package set we're installing. - conflicts: ConflictDetails | None = None - should_warn_about_conflicts = ( - not options.ignore_dependencies and options.warn_about_conflicts - ) - if should_warn_about_conflicts: - conflicts = self._determine_conflicts(to_install) - - # Don't warn about script install locations if - # --target or --prefix has been specified - warn_script_location = options.warn_script_location - if options.target_dir or options.prefix_path: - warn_script_location = False - - installed = install_given_reqs( - to_install, - root=options.root_path, - home=target_temp_dir_path, - prefix=options.prefix_path, - warn_script_location=warn_script_location, - use_user_site=options.use_user_site, - pycompile=options.compile, - progress_bar=options.progress_bar, - ) - - lib_locations = get_lib_location_guesses( - user=options.use_user_site, - home=target_temp_dir_path, - root=options.root_path, - prefix=options.prefix_path, - isolated=options.isolated_mode, - ) - env = get_environment(lib_locations) - - if conflicts is not None: - self._warn_about_conflicts( - conflicts, - resolver_variant=self.determine_resolver_variant(options), - ) - if summary := installed_packages_summary(installed, env): - write_output(summary) - except OSError as error: - show_traceback = self.verbosity >= 1 - - message = create_os_error_message( - error, - show_traceback, - options.use_user_site, - ) - logger.error(message, exc_info=show_traceback) - - return ERROR - - if options.target_dir: - assert target_temp_dir - self._handle_target_dir( - options.target_dir, target_temp_dir, options.upgrade - ) - if options.root_user_action == "warn": - warn_if_run_as_root() - return SUCCESS - - def _handle_target_dir( - self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool - ) -> None: - ensure_dir(target_dir) - - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - lib_dir_list = [] - - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - scheme = get_scheme("", home=target_temp_dir.path) - purelib_dir = scheme.purelib - platlib_dir = scheme.platlib - data_dir = scheme.data - - if os.path.exists(purelib_dir): - lib_dir_list.append(purelib_dir) - if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: - lib_dir_list.append(platlib_dir) - if os.path.exists(data_dir): - lib_dir_list.append(data_dir) - - for lib_dir in lib_dir_list: - for item in os.listdir(lib_dir): - if lib_dir == data_dir: - ddir = os.path.join(data_dir, item) - if any(s.startswith(ddir) for s in lib_dir_list[:-1]): - continue - target_item_dir = os.path.join(target_dir, item) - if os.path.exists(target_item_dir): - if not upgrade: - logger.warning( - "Target directory %s already exists. Specify " - "--upgrade to force replacement.", - target_item_dir, - ) - continue - if os.path.islink(target_item_dir): - logger.warning( - "Target directory %s already exists and is " - "a link. pip will not automatically replace " - "links, please remove if replacement is " - "desired.", - target_item_dir, - ) - continue - if os.path.isdir(target_item_dir): - shutil.rmtree(target_item_dir) - else: - os.remove(target_item_dir) - - shutil.move(os.path.join(lib_dir, item), target_item_dir) - - def _determine_conflicts( - self, to_install: list[InstallRequirement] - ) -> ConflictDetails | None: - try: - return check_install_conflicts(to_install) - except Exception: - logger.exception( - "Error while checking for conflicts. Please file an issue on " - "pip's issue tracker: https://github.com/pypa/pip/issues/new" - ) - return None - - def _warn_about_conflicts( - self, conflict_details: ConflictDetails, resolver_variant: str - ) -> None: - package_set, (missing, conflicting) = conflict_details - if not missing and not conflicting: - return - - parts: list[str] = [] - if resolver_variant == "legacy": - parts.append( - "pip's legacy dependency resolver does not consider dependency " - "conflicts when selecting packages. This behaviour is the " - "source of the following dependency conflicts." - ) - else: - assert resolver_variant == "resolvelib" - parts.append( - "pip's dependency resolver does not currently take into account " - "all the packages that are installed. This behaviour is the " - "source of the following dependency conflicts." - ) - - # NOTE: There is some duplication here, with commands/check.py - for project_name in missing: - version = package_set[project_name][0] - for dependency in missing[project_name]: - message = ( - f"{project_name} {version} requires {dependency[1]}, " - "which is not installed." - ) - parts.append(message) - - for project_name in conflicting: - version = package_set[project_name][0] - for dep_name, dep_version, req in conflicting[project_name]: - message = ( - "{name} {version} requires {requirement}, but {you} have " - "{dep_name} {dep_version} which is incompatible." - ).format( - name=project_name, - version=version, - requirement=req, - dep_name=dep_name, - dep_version=dep_version, - you=("you" if resolver_variant == "resolvelib" else "you'll"), - ) - parts.append(message) - - logger.critical("\n".join(parts)) - - -def installed_packages_summary( - installed: list[InstallationResult], env: BaseEnvironment -) -> str: - # Format a summary of installed packages, with extra care to - # display a package name as it was requested by the user. - installed.sort(key=operator.attrgetter("name")) - summary = [] - installed_versions = {} - for distribution in env.iter_all_distributions(): - installed_versions[distribution.canonical_name] = distribution.version - for package in installed: - display_name = package.name - version = installed_versions.get(canonicalize_name(display_name), None) - if version: - text = f"{display_name}-{version}" - else: - text = display_name - summary.append(text) - - if not summary: - return "" - return f"Successfully installed {' '.join(summary)}" - - -def get_lib_location_guesses( - user: bool = False, - home: str | None = None, - root: str | None = None, - isolated: bool = False, - prefix: str | None = None, -) -> list[str]: - scheme = get_scheme( - "", - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - return [scheme.purelib, scheme.platlib] - - -def site_packages_writable(root: str | None, isolated: bool) -> bool: - return all( - test_writable_dir(d) - for d in set(get_lib_location_guesses(root=root, isolated=isolated)) - ) - - -def decide_user_install( - use_user_site: bool | None, - prefix_path: str | None = None, - target_dir: str | None = None, - root_path: str | None = None, - isolated_mode: bool = False, -) -> bool: - """Determine whether to do a user install based on the input options. - - If use_user_site is False, no additional checks are done. - If use_user_site is True, it is checked for compatibility with other - options. - If use_user_site is None, the default behaviour depends on the environment, - which is provided by the other arguments. - """ - # In some cases (config from tox), use_user_site can be set to an integer - # rather than a bool, which 'use_user_site is False' wouldn't catch. - if (use_user_site is not None) and (not use_user_site): - logger.debug("Non-user install by explicit request") - return False - - # If we have been asked for a user install explicitly, check compatibility. - if use_user_site: - if prefix_path: - raise CommandError( - "Can not combine '--user' and '--prefix' as they imply " - "different installation locations" - ) - if virtualenv_no_global(): - raise InstallationError( - "Can not perform a '--user' install. User site-packages " - "are not visible in this virtualenv." - ) - # Catch all remaining cases which honour the site.ENABLE_USER_SITE - # value, such as a plain Python installation (e.g. no virtualenv). - if not site.ENABLE_USER_SITE: - raise InstallationError( - "Can not perform a '--user' install. User site-packages " - "are disabled for this Python." - ) - logger.debug("User install by explicit request") - return True - - # If we are here, user installs have not been explicitly requested/avoided - assert use_user_site is None - - # user install incompatible with --prefix/--target - if prefix_path or target_dir: - logger.debug("Non-user install due to --prefix or --target option") - return False - - # If user installs are not enabled, choose a non-user install - if not site.ENABLE_USER_SITE: - logger.debug("Non-user install because user site-packages disabled") - return False - - # If we have permission for a non-user install, do that, - # otherwise do a user install. - if site_packages_writable(root=root_path, isolated=isolated_mode): - logger.debug("Non-user install because site-packages writeable") - return False - - logger.info( - "Defaulting to user installation because normal site-packages " - "is not writeable" - ) - return True - - -def create_os_error_message( - error: OSError, show_traceback: bool, using_user_site: bool -) -> str: - """Format an error message for an OSError - - It may occur anytime during the execution of the install command. - """ - parts = [] - - # Mention the error if we are not going to show a traceback - parts.append("Could not install packages due to an OSError") - if not show_traceback: - parts.append(": ") - parts.append(str(error)) - else: - parts.append(".") - - # Spilt the error indication from a helper message (if any) - parts[-1] += "\n" - - # Suggest useful actions to the user: - # (1) using user site-packages or (2) verifying the permissions - if error.errno == errno.EACCES: - user_option_part = "Consider using the `--user` option" - permissions_part = "Check the permissions" - - if not running_under_virtualenv() and not using_user_site: - parts.extend( - [ - user_option_part, - " or ", - permissions_part.lower(), - ] - ) - else: - parts.append(permissions_part) - parts.append(".\n") - - # Suggest to check "pip config debug" in case of invalid proxy - if type(error) is InvalidProxyURL: - parts.append( - 'Consider checking your local proxy configuration with "pip config debug"' - ) - parts.append(".\n") - - # On Windows, errors like EINVAL or ENOENT may occur - # if a file or folder name exceeds 255 characters, - # or if the full path exceeds 260 characters and long path support isn't enabled. - # This condition checks for such cases and adds a hint to the error output. - - if WINDOWS and error.errno in (errno.EINVAL, errno.ENOENT) and error.filename: - if any(len(part) > 255 for part in Path(error.filename).parts): - parts.append( - "HINT: This error might be caused by a file or folder name exceeding " - "255 characters, which is a Windows limitation even if long paths " - "are enabled.\n " - ) - if len(error.filename) > 260: - parts.append( - "HINT: This error might have occurred since " - "this system does not have Windows Long Path " - "support enabled. You can find information on " - "how to enable this at " - "https://pip.pypa.io/warnings/enable-long-paths\n" - ) - return "".join(parts).strip() + "\n" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/list.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/list.py deleted file mode 100644 index f9bad7e0d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/list.py +++ /dev/null @@ -1,398 +0,0 @@ -from __future__ import annotations - -import json -import logging -from collections.abc import Generator, Sequence -from email.parser import Parser -from optparse import Values -from typing import TYPE_CHECKING, cast - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import InvalidVersion, Version - -from pip._internal.cli import cmdoptions -from pip._internal.cli.index_command import IndexGroupCommand -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.utils.compat import stdlib_pkgs -from pip._internal.utils.misc import tabulate, write_output - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - from pip._internal.network.session import PipSession - - class _DistWithLatestInfo(BaseDistribution): - """Give the distribution object a couple of extra fields. - - These will be populated during ``get_outdated()``. This is dirty but - makes the rest of the code much cleaner. - """ - - latest_version: Version - latest_filetype: str - - _ProcessedDists = Sequence[_DistWithLatestInfo] - - -logger = logging.getLogger(__name__) - - -class ListCommand(IndexGroupCommand): - """ - List installed packages, including editables. - - Packages are listed in a case-insensitive sorted order. - """ - - ignore_require_venv = True - usage = """ - %prog [options]""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-o", - "--outdated", - action="store_true", - default=False, - help="List outdated packages", - ) - self.cmd_opts.add_option( - "-u", - "--uptodate", - action="store_true", - default=False, - help="List uptodate packages", - ) - self.cmd_opts.add_option( - "-e", - "--editable", - action="store_true", - default=False, - help="List editable projects.", - ) - self.cmd_opts.add_option( - "-l", - "--local", - action="store_true", - default=False, - help=( - "If in a virtualenv that has global access, do not list " - "globally-installed packages." - ), - ) - self.cmd_opts.add_option( - "--user", - dest="user", - action="store_true", - default=False, - help="Only output packages installed in user-site.", - ) - self.cmd_opts.add_option(cmdoptions.list_path()) - - self.cmd_opts.add_option( - "--format", - action="store", - dest="list_format", - default="columns", - choices=("columns", "freeze", "json"), - help=( - "Select the output format among: columns (default), freeze, or json. " - "The 'freeze' format cannot be used with the --outdated option." - ), - ) - - self.cmd_opts.add_option( - "--not-required", - action="store_true", - dest="not_required", - help="List packages that are not dependencies of installed packages.", - ) - - self.cmd_opts.add_option( - "--exclude-editable", - action="store_false", - dest="include_editable", - help="Exclude editable package from output.", - ) - self.cmd_opts.add_option( - "--include-editable", - action="store_true", - dest="include_editable", - help="Include editable package in output.", - default=True, - ) - self.cmd_opts.add_option(cmdoptions.list_exclude()) - index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - def handle_pip_version_check(self, options: Values) -> None: - if options.outdated or options.uptodate: - super().handle_pip_version_check(options) - - def _build_package_finder( - self, options: Values, session: PipSession - ) -> PackageFinder: - """ - Create a package finder appropriate to this list command. - """ - # Lazy import the heavy index modules as most list invocations won't need 'em. - from pip._internal.index.collector import LinkCollector - from pip._internal.index.package_finder import PackageFinder - - link_collector = LinkCollector.create(session, options=options) - - # Pass allow_yanked=False to ignore yanked versions. - selection_prefs = SelectionPreferences( - allow_yanked=False, - release_control=options.release_control, - ) - - return PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - ) - - def run(self, options: Values, args: list[str]) -> int: - cmdoptions.check_release_control_exclusive(options) - - if options.outdated and options.uptodate: - raise CommandError("Options --outdated and --uptodate cannot be combined.") - - if options.outdated and options.list_format == "freeze": - raise CommandError( - "List format 'freeze' cannot be used with the --outdated option." - ) - - cmdoptions.check_list_path_option(options) - - skip = set(stdlib_pkgs) - if options.excludes: - skip.update(canonicalize_name(n) for n in options.excludes) - - packages: _ProcessedDists = [ - cast("_DistWithLatestInfo", d) - for d in get_environment(options.path).iter_installed_distributions( - local_only=options.local, - user_only=options.user, - editables_only=options.editable, - include_editables=options.include_editable, - skip=skip, - ) - ] - - # get_not_required must be called firstly in order to find and - # filter out all dependencies correctly. Otherwise a package - # can't be identified as requirement because some parent packages - # could be filtered out before. - if options.not_required: - packages = self.get_not_required(packages, options) - - if options.outdated: - packages = self.get_outdated(packages, options) - elif options.uptodate: - packages = self.get_uptodate(packages, options) - - self.output_package_listing(packages, options) - return SUCCESS - - def get_outdated( - self, packages: _ProcessedDists, options: Values - ) -> _ProcessedDists: - return [ - dist - for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version > dist.version - ] - - def get_uptodate( - self, packages: _ProcessedDists, options: Values - ) -> _ProcessedDists: - return [ - dist - for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version == dist.version - ] - - def get_not_required( - self, packages: _ProcessedDists, options: Values - ) -> _ProcessedDists: - dep_keys = { - canonicalize_name(dep.name) - for dist in packages - for dep in (dist.iter_dependencies() or ()) - } - - # Create a set to remove duplicate packages, and cast it to a list - # to keep the return type consistent with get_outdated and - # get_uptodate - return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys}) - - def iter_packages_latest_infos( - self, packages: _ProcessedDists, options: Values - ) -> Generator[_DistWithLatestInfo, None, None]: - with self._build_session(options) as session: - finder = self._build_package_finder(options, session) - - def latest_info( - dist: _DistWithLatestInfo, - ) -> _DistWithLatestInfo | None: - all_candidates = finder.find_all_candidates(dist.canonical_name) - if self.should_exclude_prerelease(options, dist.canonical_name): - all_candidates = [ - candidate - for candidate in all_candidates - if not candidate.version.is_prerelease - ] - - evaluator = finder.make_candidate_evaluator( - project_name=dist.canonical_name, - ) - best_candidate = evaluator.sort_best_candidate(all_candidates) - if best_candidate is None: - return None - - remote_version = best_candidate.version - if best_candidate.link.is_wheel: - typ = "wheel" - else: - typ = "sdist" - dist.latest_version = remote_version - dist.latest_filetype = typ - return dist - - for dist in map(latest_info, packages): - if dist is not None: - yield dist - - def output_package_listing( - self, packages: _ProcessedDists, options: Values - ) -> None: - packages = sorted( - packages, - key=lambda dist: dist.canonical_name, - ) - if options.list_format == "columns" and packages: - data, header = format_for_columns(packages, options) - self.output_package_listing_columns(data, header) - elif options.list_format == "freeze": - for dist in packages: - try: - req_string = f"{dist.raw_name}=={dist.version}" - except InvalidVersion: - req_string = f"{dist.raw_name}==={dist.raw_version}" - if options.verbose >= 1: - write_output("%s (%s)", req_string, dist.location) - else: - write_output(req_string) - elif options.list_format == "json": - write_output(format_for_json(packages, options)) - - def output_package_listing_columns( - self, data: list[list[str]], header: list[str] - ) -> None: - # insert the header first: we need to know the size of column names - if len(data) > 0: - data.insert(0, header) - - pkg_strings, sizes = tabulate(data) - - # Create and add a separator. - if len(data) > 0: - pkg_strings.insert(1, " ".join("-" * x for x in sizes)) - - for val in pkg_strings: - write_output(val) - - -def format_for_columns( - pkgs: _ProcessedDists, options: Values -) -> tuple[list[list[str]], list[str]]: - """ - Convert the package data into something usable - by output_package_listing_columns. - """ - header = ["Package", "Version"] - - running_outdated = options.outdated - if running_outdated: - header.extend(["Latest", "Type"]) - - def wheel_build_tag(dist: BaseDistribution) -> str | None: - try: - wheel_file = dist.read_text("WHEEL") - except FileNotFoundError: - return None - return Parser().parsestr(wheel_file).get("Build") - - build_tags = [wheel_build_tag(p) for p in pkgs] - has_build_tags = any(build_tags) - if has_build_tags: - header.append("Build") - - has_editables = any(x.editable for x in pkgs) - if has_editables: - header.append("Editable project location") - - if options.verbose >= 1: - header.append("Location") - if options.verbose >= 1: - header.append("Installer") - - data = [] - for i, proj in enumerate(pkgs): - # if we're working on the 'outdated' list, separate out the - # latest_version and type - row = [proj.raw_name, proj.raw_version] - - if running_outdated: - row.append(str(proj.latest_version)) - row.append(proj.latest_filetype) - - if has_build_tags: - row.append(build_tags[i] or "") - - if has_editables: - row.append(proj.editable_project_location or "") - - if options.verbose >= 1: - row.append(proj.location or "") - if options.verbose >= 1: - row.append(proj.installer) - - data.append(row) - - return data, header - - -def format_for_json(packages: _ProcessedDists, options: Values) -> str: - data = [] - for dist in packages: - try: - version = str(dist.version) - except InvalidVersion: - version = dist.raw_version - info = { - "name": dist.raw_name, - "version": version, - } - if options.verbose >= 1: - info["location"] = dist.location or "" - info["installer"] = dist.installer - if options.outdated: - info["latest_version"] = str(dist.latest_version) - info["latest_filetype"] = dist.latest_filetype - editable_project_location = dist.editable_project_location - if editable_project_location: - info["editable_project_location"] = editable_project_location - data.append(info) - return json.dumps(data) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/lock.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/lock.py deleted file mode 100644 index 9a55349e6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/lock.py +++ /dev/null @@ -1,175 +0,0 @@ -import sys -from optparse import Values -from pathlib import Path - -from pip._vendor import tomli_w -from pip._vendor.packaging.pylock import is_valid_pylock_path - -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.req_command import ( - RequirementCommand, - with_cleanup, -) -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ( - get_pip_version, -) -from pip._internal.utils.pylock import pylock_from_install_requirements -from pip._internal.utils.temp_dir import TempDirectory - -logger = getLogger(__name__) - - -class LockCommand(RequirementCommand): - """ - EXPERIMENTAL - Lock packages and their dependencies from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports locking from "requirements files", which provide an easy - way to specify a whole environment to be installed. - - The generated lock file is only guaranteed to be valid for the current - python version and platform. - """ - - usage = """ - %prog [options] [-e] <local project path> ... - %prog [options] <requirement specifier> [package-index-options] ... - %prog [options] -r <requirements file> [package-index-options] ... - %prog [options] <archive url/path> ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - cmdoptions.PipOption( - "--output", - "-o", - dest="output_file", - metavar="path", - type="path", - default="pylock.toml", - help="Lock file name (default=pylock.toml). Use - for stdout.", - ) - ) - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.requirements_from_scripts()) - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.build_constraints()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - - self.cmd_opts.add_option(cmdoptions.editable()) - - self.cmd_opts.add_option(cmdoptions.src()) - - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - - self.cmd_opts.add_option(cmdoptions.config_settings()) - - self.cmd_opts.add_option(cmdoptions.require_hashes()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - @with_cleanup - def run(self, options: Values, args: list[str]) -> int: - logger.verbose("Using %s", get_pip_version()) - - logger.warning( - "pip lock is currently an experimental command. " - "It may be removed/changed in a future release " - "without prior warning." - ) - - cmdoptions.check_build_constraints(options) - cmdoptions.check_release_control_exclusive(options) - - session = self.get_default_session(options) - - finder = self._build_package_finder( - options=options, - session=session, - ignore_requires_python=options.ignore_requires_python, - ) - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="install", - globally_managed=True, - ) - - reqs = self.get_requirements(args, options, finder, session) - - wheel_cache = WheelCache(options.cache_dir) - - # Only when installing is it permitted to use PEP 660. - # In other circumstances (pip wheel, pip download) we generate - # regular (i.e. non editable) metadata and wheels. - for req in reqs: - req.permit_editable_wheels = True - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - use_user_site=False, - verbosity=self.verbosity, - ) - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - wheel_cache=wheel_cache, - use_user_site=False, - ignore_installed=True, - ignore_requires_python=options.ignore_requires_python, - upgrade_strategy="to-satisfy-only", - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve(reqs, check_supported_wheels=True) - - if options.output_file == "-": - base_dir = Path.cwd() - else: - output_file_path = Path(options.output_file) - if not is_valid_pylock_path(output_file_path): - logger.warning( - "%s is not a valid lock file name.", - output_file_path, - ) - base_dir = output_file_path.parent - pylock = pylock_from_install_requirements( - requirement_set.requirements.values(), base_dir=base_dir - ) - pylock_toml = tomli_w.dumps(pylock.to_dict()) - if options.output_file == "-": - sys.stdout.write(pylock_toml) - else: - output_file_path.write_text(pylock_toml, encoding="utf-8") - - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/search.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/search.py deleted file mode 100644 index b8dbc27d3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/search.py +++ /dev/null @@ -1,178 +0,0 @@ -from __future__ import annotations - -import logging -import shutil -import sys -import textwrap -import xmlrpc.client -from collections import OrderedDict -from optparse import Values -from typing import TypedDict - -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.cli.base_command import Command -from pip._internal.cli.req_command import SessionCommandMixin -from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.metadata import get_default_environment -from pip._internal.metadata.base import BaseDistribution -from pip._internal.models.index import PyPI -from pip._internal.network.xmlrpc import PipXmlrpcTransport -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import write_output - - -class TransformedHit(TypedDict): - name: str - summary: str - versions: list[str] - - -logger = logging.getLogger(__name__) - - -class SearchCommand(Command, SessionCommandMixin): - """Search for PyPI packages whose name or summary contains <query>.""" - - usage = """ - %prog [options] <query>""" - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-i", - "--index", - dest="index", - metavar="URL", - default=PyPI.pypi_url, - help="Base URL of Python Package Index (default %default)", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - if not args: - raise CommandError("Missing required argument (search query).") - query = args - pypi_hits = self.search(query, options) - hits = transform_hits(pypi_hits) - - terminal_width = None - if sys.stdout.isatty(): - terminal_width = shutil.get_terminal_size()[0] - - print_results(hits, terminal_width=terminal_width) - if pypi_hits: - return SUCCESS - return NO_MATCHES_FOUND - - def search(self, query: list[str], options: Values) -> list[dict[str, str]]: - index_url = options.index - - session = self.get_default_session(options) - - transport = PipXmlrpcTransport(index_url, session) - pypi = xmlrpc.client.ServerProxy(index_url, transport) - try: - hits = pypi.search({"name": query, "summary": query}, "or") - except xmlrpc.client.Fault as fault: - message = ( - f"XMLRPC request failed [code: {fault.faultCode}]\n{fault.faultString}" - ) - raise CommandError(message) - assert isinstance(hits, list) - return hits - - -def transform_hits(hits: list[dict[str, str]]) -> list[TransformedHit]: - """ - The list from pypi is really a list of versions. We want a list of - packages with the list of versions stored inline. This converts the - list from pypi into one we can use. - """ - packages: dict[str, TransformedHit] = OrderedDict() - for hit in hits: - name = hit["name"] - summary = hit["summary"] - version = hit["version"] - - if name not in packages.keys(): - packages[name] = { - "name": name, - "summary": summary, - "versions": [version], - } - else: - packages[name]["versions"].append(version) - - # if this is the highest version, replace summary and score - if version == highest_version(packages[name]["versions"]): - packages[name]["summary"] = summary - - return list(packages.values()) - - -def print_dist_installation_info(latest: str, dist: BaseDistribution | None) -> None: - if dist is not None: - with indent_log(): - if dist.version == latest: - write_output("INSTALLED: %s (latest)", dist.version) - else: - write_output("INSTALLED: %s", dist.version) - if parse_version(latest).pre: - write_output( - "LATEST: %s (pre-release; install" - " with `pip install --pre`)", - latest, - ) - else: - write_output("LATEST: %s", latest) - - -def get_installed_distribution(name: str) -> BaseDistribution | None: - env = get_default_environment() - return env.get_distribution(name) - - -def print_results( - hits: list[TransformedHit], - name_column_width: int | None = None, - terminal_width: int | None = None, -) -> None: - if not hits: - return - if name_column_width is None: - name_column_width = ( - max( - [ - len(hit["name"]) + len(highest_version(hit.get("versions", ["-"]))) - for hit in hits - ] - ) - + 4 - ) - - for hit in hits: - name = hit["name"] - summary = hit["summary"] or "" - latest = highest_version(hit.get("versions", ["-"])) - if terminal_width is not None: - target_width = terminal_width - name_column_width - 5 - if target_width > 10: - # wrap and indent summary to fit terminal - summary_lines = textwrap.wrap(summary, target_width) - summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines) - - name_latest = f"{name} ({latest})" - line = f"{name_latest:{name_column_width}} - {summary}" - try: - write_output(line) - dist = get_installed_distribution(name) - print_dist_installation_info(latest, dist) - except UnicodeEncodeError: - pass - - -def highest_version(versions: list[str]) -> str: - return max(versions, key=parse_version) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/show.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/show.py deleted file mode 100644 index f9fcfa60b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/show.py +++ /dev/null @@ -1,231 +0,0 @@ -from __future__ import annotations - -import logging -import string -from collections.abc import Generator, Iterable, Iterator -from optparse import Values -from typing import NamedTuple - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import ERROR, SUCCESS -from pip._internal.metadata import BaseDistribution, get_default_environment -from pip._internal.utils.misc import write_output - -logger = logging.getLogger(__name__) - - -def normalize_project_url_label(label: str) -> str: - # This logic is from PEP 753 (Well-known Project URLs in Metadata). - chars_to_remove = string.punctuation + string.whitespace - removal_map = str.maketrans("", "", chars_to_remove) - return label.translate(removal_map).lower() - - -class ShowCommand(Command): - """ - Show information about one or more installed packages. - - The output is in RFC-compliant mail header format. - """ - - usage = """ - %prog [options] <package> ...""" - ignore_require_venv = True - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-f", - "--files", - dest="files", - action="store_true", - default=False, - help="Show the full list of installed files for each package.", - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - if not args: - logger.warning("ERROR: Please provide a package name or names.") - return ERROR - query = args - - results = search_packages_info(query) - if not print_results( - results, list_files=options.files, verbose=options.verbose - ): - return ERROR - return SUCCESS - - -class _PackageInfo(NamedTuple): - name: str - version: str - location: str - editable_project_location: str | None - requires: list[str] - required_by: list[str] - installer: str - metadata_version: str - classifiers: list[str] - summary: str - homepage: str - project_urls: list[str] - author: str - author_email: str - license: str - license_expression: str - entry_points: list[str] - files: list[str] | None - - -def search_packages_info(query: list[str]) -> Generator[_PackageInfo, None, None]: - """ - Gather details from installed distributions. Print distribution name, - version, location, and installed files. Installed files requires a - pip generated 'installed-files.txt' in the distributions '.egg-info' - directory. - """ - env = get_default_environment() - - installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()} - query_names = [canonicalize_name(name) for name in query] - missing = sorted( - [name for name, pkg in zip(query, query_names) if pkg not in installed] - ) - if missing: - logger.warning("Package(s) not found: %s", ", ".join(missing)) - - def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]: - return ( - dist.metadata["Name"] or "UNKNOWN" - for dist in installed.values() - if current_dist.canonical_name - in {canonicalize_name(d.name) for d in dist.iter_dependencies()} - ) - - for query_name in query_names: - try: - dist = installed[query_name] - except KeyError: - continue - - try: - requires = sorted( - # Avoid duplicates in requirements (e.g. due to environment markers). - {req.name for req in dist.iter_dependencies()}, - key=str.lower, - ) - except InvalidRequirement: - requires = sorted(dist.iter_raw_dependencies(), key=str.lower) - - try: - required_by = sorted(_get_requiring_packages(dist), key=str.lower) - except InvalidRequirement: - required_by = ["#N/A"] - - try: - entry_points_text = dist.read_text("entry_points.txt") - entry_points = entry_points_text.splitlines(keepends=False) - except FileNotFoundError: - entry_points = [] - - files_iter = dist.iter_declared_entries() - if files_iter is None: - files: list[str] | None = None - else: - files = sorted(files_iter) - - metadata = dist.metadata - - project_urls = metadata.get_all("Project-URL", []) - homepage = metadata.get("Home-page", "") - if not homepage: - # It's common that there is a "homepage" Project-URL, but Home-page - # remains unset (especially as PEP 621 doesn't surface the field). - for url in project_urls: - url_label, url = url.split(",", maxsplit=1) - normalized_label = normalize_project_url_label(url_label) - if normalized_label == "homepage": - homepage = url.strip() - break - - yield _PackageInfo( - name=dist.raw_name, - version=dist.raw_version, - location=dist.location or "", - editable_project_location=dist.editable_project_location, - requires=requires, - required_by=required_by, - installer=dist.installer, - metadata_version=dist.metadata_version or "", - classifiers=metadata.get_all("Classifier", []), - summary=metadata.get("Summary", ""), - homepage=homepage, - project_urls=project_urls, - author=metadata.get("Author", ""), - author_email=metadata.get("Author-email", ""), - license=metadata.get("License", ""), - license_expression=metadata.get("License-Expression", ""), - entry_points=entry_points, - files=files, - ) - - -def print_results( - distributions: Iterable[_PackageInfo], - list_files: bool, - verbose: bool, -) -> bool: - """ - Print the information from installed distributions found. - """ - results_printed = False - for i, dist in enumerate(distributions): - results_printed = True - if i > 0: - write_output("---") - - metadata_version_tuple = tuple(map(int, dist.metadata_version.split("."))) - - write_output("Name: %s", dist.name) - write_output("Version: %s", dist.version) - write_output("Summary: %s", dist.summary) - write_output("Home-page: %s", dist.homepage) - write_output("Author: %s", dist.author) - write_output("Author-email: %s", dist.author_email) - if metadata_version_tuple >= (2, 4) and dist.license_expression: - write_output("License-Expression: %s", dist.license_expression) - else: - write_output("License: %s", dist.license) - write_output("Location: %s", dist.location) - if dist.editable_project_location is not None: - write_output( - "Editable project location: %s", dist.editable_project_location - ) - write_output("Requires: %s", ", ".join(dist.requires)) - write_output("Required-by: %s", ", ".join(dist.required_by)) - - if verbose: - write_output("Metadata-Version: %s", dist.metadata_version) - write_output("Installer: %s", dist.installer) - write_output("Classifiers:") - for classifier in dist.classifiers: - write_output(" %s", classifier) - write_output("Entry-points:") - for entry in dist.entry_points: - write_output(" %s", entry.strip()) - write_output("Project-URLs:") - for project_url in dist.project_urls: - write_output(" %s", project_url) - if list_files: - write_output("Files:") - if dist.files is None: - write_output("Cannot locate RECORD or installed-files.txt") - else: - for line in dist.files: - write_output(" %s", line.strip()) - return results_printed diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/uninstall.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/uninstall.py deleted file mode 100644 index 9c4f031f9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/uninstall.py +++ /dev/null @@ -1,113 +0,0 @@ -import logging -from optparse import Values - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.cli import cmdoptions -from pip._internal.cli.base_command import Command -from pip._internal.cli.index_command import SessionCommandMixin -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import InstallationError -from pip._internal.req import parse_requirements -from pip._internal.req.constructors import ( - install_req_from_line, - install_req_from_parsed_requirement, -) -from pip._internal.utils.misc import ( - check_externally_managed, - protect_pip_from_modification_on_windows, - warn_if_run_as_root, -) - -logger = logging.getLogger(__name__) - - -class UninstallCommand(Command, SessionCommandMixin): - """ - Uninstall packages. - - pip is able to uninstall most installed packages. Known exceptions are: - - - Pure distutils packages installed with ``python setup.py install``, which - leave behind no metadata to determine what files were installed. - - Script wrappers installed by ``python setup.py develop``. - """ - - usage = """ - %prog [options] <package> ... - %prog [options] -r <requirements file> ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-r", - "--requirement", - dest="requirements", - action="append", - default=[], - metavar="file", - help=( - "Uninstall all the packages listed in the given requirements " - "file. This option can be used multiple times." - ), - ) - self.cmd_opts.add_option( - "-y", - "--yes", - dest="yes", - action="store_true", - help="Don't ask for confirmation of uninstall deletions.", - ) - self.cmd_opts.add_option(cmdoptions.root_user_action()) - self.cmd_opts.add_option(cmdoptions.override_externally_managed()) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options: Values, args: list[str]) -> int: - session = self.get_default_session(options) - - reqs_to_uninstall = {} - for name in args: - req = install_req_from_line( - name, - isolated=options.isolated_mode, - ) - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - else: - logger.warning( - "Invalid requirement: %r ignored -" - " the uninstall command expects named" - " requirements.", - name, - ) - for filename in options.requirements: - for parsed_req in parse_requirements( - filename, options=options, session=session - ): - req = install_req_from_parsed_requirement( - parsed_req, isolated=options.isolated_mode - ) - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - if not reqs_to_uninstall: - raise InstallationError( - f"You must give at least one requirement to {self.name} (see " - f'"pip help {self.name}")' - ) - - if not options.override_externally_managed: - check_externally_managed() - - protect_pip_from_modification_on_windows( - modifying_pip="pip" in reqs_to_uninstall - ) - - for req in reqs_to_uninstall.values(): - uninstall_pathset = req.uninstall( - auto_confirm=options.yes, - verbose=self.verbosity > 0, - ) - if uninstall_pathset: - uninstall_pathset.commit() - if options.root_user_action == "warn": - warn_if_run_as_root() - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/wheel.py deleted file mode 100644 index a85743343..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/commands/wheel.py +++ /dev/null @@ -1,171 +0,0 @@ -import logging -import os -import shutil -from optparse import Values - -from pip._internal.cache import WheelCache -from pip._internal.cli import cmdoptions -from pip._internal.cli.req_command import RequirementCommand, with_cleanup -from pip._internal.cli.status_codes import SUCCESS -from pip._internal.exceptions import CommandError -from pip._internal.operations.build.build_tracker import get_build_tracker -from pip._internal.req.req_install import ( - InstallRequirement, -) -from pip._internal.utils.misc import ensure_dir, normalize_path -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.wheel_builder import build - -logger = logging.getLogger(__name__) - - -class WheelCommand(RequirementCommand): - """ - Build Wheel archives for your requirements and dependencies. - - Wheel is a built-package format, and offers the advantage of not - recompiling your software during every install. For more details, see the - wheel docs: https://wheel.readthedocs.io/en/latest/ - - 'pip wheel' uses the build system interface as described here: - https://pip.pypa.io/en/stable/reference/build-system/ - - """ - - usage = """ - %prog [options] <requirement specifier> ... - %prog [options] -r <requirements file> ... - %prog [options] [-e] <vcs project url> ... - %prog [options] [-e] <local project path> ... - %prog [options] <archive url/path> ...""" - - def add_options(self) -> None: - self.cmd_opts.add_option( - "-w", - "--wheel-dir", - dest="wheel_dir", - metavar="dir", - default=os.curdir, - help=( - "Build wheels into <dir>, where the default is the " - "current working directory." - ), - ) - self.cmd_opts.add_option(cmdoptions.no_build_isolation()) - self.cmd_opts.add_option(cmdoptions.use_pep517()) - self.cmd_opts.add_option(cmdoptions.check_build_deps()) - self.cmd_opts.add_option(cmdoptions.constraints()) - self.cmd_opts.add_option(cmdoptions.build_constraints()) - self.cmd_opts.add_option(cmdoptions.editable()) - self.cmd_opts.add_option(cmdoptions.requirements()) - self.cmd_opts.add_option(cmdoptions.requirements_from_scripts()) - self.cmd_opts.add_option(cmdoptions.src()) - self.cmd_opts.add_option(cmdoptions.ignore_requires_python()) - self.cmd_opts.add_option(cmdoptions.no_deps()) - self.cmd_opts.add_option(cmdoptions.progress_bar()) - - self.cmd_opts.add_option( - "--no-verify", - dest="no_verify", - action="store_true", - default=False, - help="Don't verify if built wheel is valid.", - ) - - self.cmd_opts.add_option(cmdoptions.config_settings()) - - self.cmd_opts.add_option(cmdoptions.require_hashes()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - selection_opts = cmdoptions.make_option_group( - cmdoptions.package_selection_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, selection_opts) - self.parser.insert_option_group(0, self.cmd_opts) - - @with_cleanup - def run(self, options: Values, args: list[str]) -> int: - cmdoptions.check_build_constraints(options) - cmdoptions.check_release_control_exclusive(options) - - session = self.get_default_session(options) - - finder = self._build_package_finder(options, session) - - options.wheel_dir = normalize_path(options.wheel_dir) - ensure_dir(options.wheel_dir) - - build_tracker = self.enter_context(get_build_tracker()) - - directory = TempDirectory( - delete=not options.no_clean, - kind="wheel", - globally_managed=True, - ) - - reqs = self.get_requirements(args, options, finder, session) - - wheel_cache = WheelCache(options.cache_dir) - - preparer = self.make_requirement_preparer( - temp_build_dir=directory, - options=options, - build_tracker=build_tracker, - session=session, - finder=finder, - download_dir=options.wheel_dir, - use_user_site=False, - verbosity=self.verbosity, - ) - - resolver = self.make_resolver( - preparer=preparer, - finder=finder, - options=options, - wheel_cache=wheel_cache, - ignore_requires_python=options.ignore_requires_python, - ) - - self.trace_basic_info(finder) - - requirement_set = resolver.resolve(reqs, check_supported_wheels=True) - - preparer.prepare_linked_requirements_more(requirement_set.requirements.values()) - - reqs_to_build: list[InstallRequirement] = [] - for req in requirement_set.requirements.values(): - if req.is_wheel: - preparer.save_linked_requirement(req) - else: - reqs_to_build.append(req) - - # build wheels - build_successes, build_failures = build( - reqs_to_build, - wheel_cache=wheel_cache, - verify=(not options.no_verify), - ) - for req in build_successes: - assert req.link and req.link.is_wheel - assert req.local_file_path - # copy from cache to target directory - try: - shutil.copy(req.local_file_path, options.wheel_dir) - except OSError as e: - logger.warning( - "Building wheel for %s failed: %s", - req.name, - e, - ) - build_failures.append(req) - if len(build_failures) != 0: - raise CommandError("Failed to build one or more wheels") - - return SUCCESS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/configuration.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/configuration.py deleted file mode 100644 index e164653bb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/configuration.py +++ /dev/null @@ -1,396 +0,0 @@ -"""Configuration management setup - -Some terminology: -- name - As written in config files. -- value - Value associated with a name -- key - Name combined with it's section (section.name) -- variant - A single word describing where the configuration key-value pair came from -""" - -from __future__ import annotations - -import configparser -import locale -import os -import sys -from collections.abc import Iterable -from typing import Any, NewType - -from pip._internal.exceptions import ( - ConfigurationError, - ConfigurationFileCouldNotBeLoaded, -) -from pip._internal.utils import appdirs -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ensure_dir, enum - -RawConfigParser = configparser.RawConfigParser # Shorthand -Kind = NewType("Kind", str) - -CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf" -ENV_NAMES_IGNORED = "version", "help" - -# The kinds of configurations there are. -kinds = enum( - USER="user", # User Specific - GLOBAL="global", # System Wide - SITE="site", # [Virtual] Environment Specific - ENV="env", # from PIP_CONFIG_FILE - ENV_VAR="env-var", # from Environment Variables -) -OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR -VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE - -logger = getLogger(__name__) - - -# NOTE: Maybe use the optionx attribute to normalize keynames. -def _normalize_name(name: str) -> str: - """Make a name consistent regardless of source (environment or file)""" - name = name.lower().replace("_", "-") - name = name.removeprefix("--") # only prefer long opts - return name - - -def _disassemble_key(name: str) -> list[str]: - if "." not in name: - error_message = ( - "Key does not contain dot separated section and key. " - f"Perhaps you wanted to use 'global.{name}' instead?" - ) - raise ConfigurationError(error_message) - return name.split(".", 1) - - -def get_configuration_files() -> dict[Kind, list[str]]: - global_config_files = [ - os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip") - ] - - site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) - legacy_config_file = os.path.join( - os.path.expanduser("~"), - "pip" if WINDOWS else ".pip", - CONFIG_BASENAME, - ) - new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME) - return { - kinds.GLOBAL: global_config_files, - kinds.SITE: [site_config_file], - kinds.USER: [legacy_config_file, new_config_file], - } - - -class Configuration: - """Handles management of configuration. - - Provides an interface to accessing and managing configuration files. - - This class converts provides an API that takes "section.key-name" style - keys and stores the value associated with it as "key-name" under the - section "section". - - This allows for a clean interface wherein the both the section and the - key-name are preserved in an easy to manage form in the configuration files - and the data stored is also nice. - """ - - def __init__(self, isolated: bool, load_only: Kind | None = None) -> None: - super().__init__() - - if load_only is not None and load_only not in VALID_LOAD_ONLY: - raise ConfigurationError( - "Got invalid value for load_only - should be one of {}".format( - ", ".join(map(repr, VALID_LOAD_ONLY)) - ) - ) - self.isolated = isolated - self.load_only = load_only - - # Because we keep track of where we got the data from - self._parsers: dict[Kind, list[tuple[str, RawConfigParser]]] = { - variant: [] for variant in OVERRIDE_ORDER - } - self._config: dict[Kind, dict[str, dict[str, Any]]] = { - variant: {} for variant in OVERRIDE_ORDER - } - self._modified_parsers: list[tuple[str, RawConfigParser]] = [] - - def load(self) -> None: - """Loads configuration from configuration files and environment""" - self._load_config_files() - if not self.isolated: - self._load_environment_vars() - - def get_file_to_edit(self) -> str | None: - """Returns the file with highest priority in configuration""" - assert self.load_only is not None, "Need to be specified a file to be editing" - - try: - return self._get_parser_to_modify()[0] - except IndexError: - return None - - def items(self) -> Iterable[tuple[str, Any]]: - """Returns key-value pairs like dict.items() representing the loaded - configuration - """ - return self._dictionary.items() - - def get_value(self, key: str) -> Any: - """Get a value from the configuration.""" - orig_key = key - key = _normalize_name(key) - try: - clean_config: dict[str, Any] = {} - for file_values in self._dictionary.values(): - clean_config.update(file_values) - return clean_config[key] - except KeyError: - # disassembling triggers a more useful error message than simply - # "No such key" in the case that the key isn't in the form command.option - _disassemble_key(key) - raise ConfigurationError(f"No such key - {orig_key}") - - def set_value(self, key: str, value: Any) -> None: - """Modify a value in the configuration.""" - key = _normalize_name(key) - self._ensure_have_load_only() - - assert self.load_only - fname, parser = self._get_parser_to_modify() - - if parser is not None: - section, name = _disassemble_key(key) - - # Modify the parser and the configuration - if not parser.has_section(section): - parser.add_section(section) - parser.set(section, name, value) - - self._config[self.load_only].setdefault(fname, {}) - self._config[self.load_only][fname][key] = value - self._mark_as_modified(fname, parser) - - def unset_value(self, key: str) -> None: - """Unset a value in the configuration.""" - orig_key = key - key = _normalize_name(key) - self._ensure_have_load_only() - - assert self.load_only - fname, parser = self._get_parser_to_modify() - - if ( - key not in self._config[self.load_only][fname] - and key not in self._config[self.load_only] - ): - raise ConfigurationError(f"No such key - {orig_key}") - - if parser is not None: - section, name = _disassemble_key(key) - if not ( - parser.has_section(section) and parser.remove_option(section, name) - ): - # The option was not removed. - raise ConfigurationError( - "Fatal Internal error [id=1]. Please report as a bug." - ) - - # The section may be empty after the option was removed. - if not parser.items(section): - parser.remove_section(section) - self._mark_as_modified(fname, parser) - try: - del self._config[self.load_only][fname][key] - except KeyError: - del self._config[self.load_only][key] - - def save(self) -> None: - """Save the current in-memory state.""" - self._ensure_have_load_only() - - for fname, parser in self._modified_parsers: - logger.info("Writing to %s", fname) - - # Ensure directory exists. - ensure_dir(os.path.dirname(fname)) - - # Ensure directory's permission(need to be writeable) - try: - with open(fname, "w") as f: - parser.write(f) - except OSError as error: - raise ConfigurationError( - f"An error occurred while writing to the configuration file " - f"{fname}: {error}" - ) - - # - # Private routines - # - - def _ensure_have_load_only(self) -> None: - if self.load_only is None: - raise ConfigurationError("Needed a specific file to be modifying.") - logger.debug("Will be working with %s variant only", self.load_only) - - @property - def _dictionary(self) -> dict[str, dict[str, Any]]: - """A dictionary representing the loaded configuration.""" - # NOTE: Dictionaries are not populated if not loaded. So, conditionals - # are not needed here. - retval = {} - - for variant in OVERRIDE_ORDER: - retval.update(self._config[variant]) - - return retval - - def _load_config_files(self) -> None: - """Loads configuration from configuration files""" - config_files = dict(self.iter_config_files()) - if config_files[kinds.ENV][0:1] == [os.devnull]: - logger.debug( - "Skipping loading configuration files due to " - "environment's PIP_CONFIG_FILE being os.devnull" - ) - return - - for variant, files in config_files.items(): - for fname in files: - # If there's specific variant set in `load_only`, load only - # that variant, not the others. - if self.load_only is not None and variant != self.load_only: - logger.debug("Skipping file '%s' (variant: %s)", fname, variant) - continue - - parser = self._load_file(variant, fname) - - # Keeping track of the parsers used - self._parsers[variant].append((fname, parser)) - - def _load_file(self, variant: Kind, fname: str) -> RawConfigParser: - logger.verbose("For variant '%s', will try loading '%s'", variant, fname) - parser = self._construct_parser(fname) - - for section in parser.sections(): - items = parser.items(section) - self._config[variant].setdefault(fname, {}) - self._config[variant][fname].update(self._normalized_keys(section, items)) - - return parser - - def _construct_parser(self, fname: str) -> RawConfigParser: - parser = configparser.RawConfigParser() - # If there is no such file, don't bother reading it but create the - # parser anyway, to hold the data. - # Doing this is useful when modifying and saving files, where we don't - # need to construct a parser. - if os.path.exists(fname): - locale_encoding = locale.getpreferredencoding(False) - try: - parser.read(fname, encoding=locale_encoding) - except UnicodeDecodeError: - # See https://github.com/pypa/pip/issues/4963 - raise ConfigurationFileCouldNotBeLoaded( - reason=f"contains invalid {locale_encoding} characters", - fname=fname, - ) - except configparser.Error as error: - # See https://github.com/pypa/pip/issues/4893 - raise ConfigurationFileCouldNotBeLoaded(error=error) - return parser - - def _load_environment_vars(self) -> None: - """Loads configuration from environment variables""" - self._config[kinds.ENV_VAR].setdefault(":env:", {}) - self._config[kinds.ENV_VAR][":env:"].update( - self._normalized_keys(":env:", self.get_environ_vars()) - ) - - def _normalized_keys( - self, section: str, items: Iterable[tuple[str, Any]] - ) -> dict[str, Any]: - """Normalizes items to construct a dictionary with normalized keys. - - This routine is where the names become keys and are made the same - regardless of source - configuration files or environment. - """ - normalized = {} - for name, val in items: - key = section + "." + _normalize_name(name) - normalized[key] = val - return normalized - - def get_environ_vars(self) -> Iterable[tuple[str, str]]: - """Returns a generator with all environmental vars with prefix PIP_""" - for key, val in os.environ.items(): - if key.startswith("PIP_"): - name = key[4:].lower() - if name not in ENV_NAMES_IGNORED: - yield name, val - - # XXX: This is patched in the tests. - def iter_config_files(self) -> Iterable[tuple[Kind, list[str]]]: - """Yields variant and configuration files associated with it. - - This should be treated like items of a dictionary. The order - here doesn't affect what gets overridden. That is controlled - by OVERRIDE_ORDER. However this does control the order they are - displayed to the user. It's probably most ergonomic to display - things in the same order as OVERRIDE_ORDER - """ - # SMELL: Move the conditions out of this function - - env_config_file = os.environ.get("PIP_CONFIG_FILE", None) - config_files = get_configuration_files() - - yield kinds.GLOBAL, config_files[kinds.GLOBAL] - - # per-user config is not loaded when env_config_file exists - should_load_user_config = not self.isolated and not ( - env_config_file and os.path.exists(env_config_file) - ) - if should_load_user_config: - # The legacy config file is overridden by the new config file - yield kinds.USER, config_files[kinds.USER] - - # virtualenv config - yield kinds.SITE, config_files[kinds.SITE] - - if env_config_file is not None: - yield kinds.ENV, [env_config_file] - else: - yield kinds.ENV, [] - - def get_values_in_config(self, variant: Kind) -> dict[str, Any]: - """Get values present in a config file""" - return self._config[variant] - - def _get_parser_to_modify(self) -> tuple[str, RawConfigParser]: - # Determine which parser to modify - assert self.load_only - parsers = self._parsers[self.load_only] - if not parsers: - # This should not happen if everything works correctly. - raise ConfigurationError( - "Fatal Internal error [id=2]. Please report as a bug." - ) - - # Use the highest priority parser. - return parsers[-1] - - # XXX: This is patched in the tests. - def _mark_as_modified(self, fname: str, parser: RawConfigParser) -> None: - file_parser_tuple = (fname, parser) - if file_parser_tuple not in self._modified_parsers: - self._modified_parsers.append(file_parser_tuple) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self._dictionary!r})" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__init__.py deleted file mode 100644 index 9a89a838b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.distributions.sdist import SourceDistribution -from pip._internal.distributions.wheel import WheelDistribution -from pip._internal.req.req_install import InstallRequirement - - -def make_distribution_for_install_requirement( - install_req: InstallRequirement, -) -> AbstractDistribution: - """Returns a Distribution for the given InstallRequirement""" - # Editable requirements will always be source distributions. They use the - # legacy logic until we create a modern standard for them. - if install_req.editable: - return SourceDistribution(install_req) - - # If it's a wheel, it's a WheelDistribution - if install_req.is_wheel: - return WheelDistribution(install_req) - - # Otherwise, a SourceDistribution - return SourceDistribution(install_req) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 8c46711a9523653f212826513ffd14427e373227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1170 zcmaJAO-~a+bhaPcMG6QS(SWi@qFG2=h(y5<74^_2#^9=$m<^L{JJPY+-7+&3@zjGy zFWx+I_2@sT;b5|%Cq2lmq$XT_Go@0h@nzq~yf^R7``WqTp)&~J>zAMOWfY<B^3a9I zvCzH`LLF@&Tg#!WCbTIjM{<#DR78~=&Bd~D5m$07r)Lu)F@@~-II{I|<ee3UotQzE zaUcU)T6lgn&joV};vof2^EE*OAM|5SgBmN4KJDm>5+PonaxCX_;d-7;wrZ4-3h_lj zgXj_^!~mfl)Sd@YN9$-Kvh*IIBIqX36Ro7#ngf;&*b%2&E6PM5)98Ubhl8~92xep} z)EN;q=35b_gN@1Hkh1<NU=>$z`R>*5<AdAIb50m{+#+EM%ggi5cEHL`l?AU!L2#$w z1+`+{<s?OYDuAdW2um$EYdfM8_%{|7@gjb^bQ3=#m8$0of<>k3JfeArQ$bQyw@`LB z33sZrn!(f;g!!(QDfTpyXD}G3z&Ksq36mJRz8?q~39}(cGXcmafz;6v8rJ3xCD|XH zX+?qmh+jI418;*Jsg6oPf-D#?*8Tv3?C6@*_QCbzb1^CV>_{I4>uB+KGBeUM*43Zz zK2MpXf?m&m$FsC|w`?^VZn|dgo|rHkQ<R9gN#79P{Cj1rSZI(U6>i=mOePf?l;dr= zZ!8W+OJf7T)O4>gs0oEu#Vr%u+iwi7K*QA}<)(D^k&VH9)$COe>Zp}O#<_2a3HTa` ziT#o3-MPJybi+uu^wS1&cVcfO)i6@Obd<dEsk}Eh+lbAwVTkhB8VF4oefrPn)4i$i zwA?MVo8k2Tu5sn1D*o@ilU9V6Psf8o(}3N=J3oc2_%l+OcDiM(RDxp7BX`(EFv%6* a7l5>)nx-|;Y7^aSqPtDBa-_q~DZk%As43n6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-314.pyc deleted file mode 100644 index d06636180a652e2807477450ed7349f84a99fc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3530 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-314.pyc deleted file mode 100644 index 9f6a328dd9dcbda2ba108c2f11ef84b37846b011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2296 zcmbVN-ESL35a09N*=Og&fi#UuQ*up1Ag$`8ZB(^@kkV3N7Zin4K|*r6I{P;Dk@MYk zcU|hJ4}L&MJR$KHz+)cyPf~aQom2^gD(IUd7xK!?p4~W6_z)v`c5Y{9cfNk(3*%!2 z0`&O1-~DfOLVm@M0hy_w^%@{_$X()S6;jruHj8qmk}2y_SF&C)%BD1xY*e!4oXpLV z4gK~0O<s<W8MHAgRyi;8vt){#B~EslIJpgT1>QxH1;;u^7W2>WV^K>++%Sx!EBz=G z@Huwpll5ElX8G35_bY4f!N!TznvmSB%XfWP{aOo8!v4e!SFj^{r*5?Tz`GSb@OczA zStu)^kZuq#UdPu4)b~W|m0_ntHi*<5A~SbKrS53b*f5<8_^eNpU}B|jBeRYHdnWG5 zTpE*-Eyt31Cl3)7lBvOS-mqWWj~o_rCcqtGyP@s(ee&$st#7&aSgBCB)9{7uMNHU` z3p-@YgOhC=%wm_T+}N(LWrNwA-Ea9E^nSP*@n))PfYJ>(bG>$<##m_Aqh{Qa%qtb@ z8bp9UqzwEZc&#@BLWg`z?q;riPKXD4Gvq_9p*fn9S<)aF{TZH3vYg2l54Q`Ddi#;R z7KLmFi<V8_7I^Vo^7YL(s~-u*Mb-5fzjXcja`m%_Z&hO+eah-mRO><1@@i18i+<=! zVEw9Gyi{Fp%SIGlxwJx8=)-GQ=^fUL16MLCn{o96zg88#WEcCH64ls`m#7~~#zQw) z@`hSMEDf&pN^v_GrL^BzjM8N8*vgcK&zyiz#H7m0KGDn*d&s^yua+Kc6O~C6kT7t_ zTE3SBp+g*Uj_hb_d<?#Jw8RiB*i^|`;6>O<CTiH26#ICKaq4@?!tov*J%<hnL}-Wn zQk>*3gY<tZ%16MMk0L{-m9L8$9|t+DqjHr`pzbAL)2P6#bjUu*n6K?2+r99XS`R#d z1B&{+mG1@ciM_SnR}3%fc<KmkTB`eC><qxx(EhtM^lD~p`y|2!W<(3X-abIsVkXf6 zFv+L@oQO@Id9>E%Q{cdGaZcT1k~W!iJy*JPxTlh(<E!+y1}bMIxW7YwDo%d&@XLok z7Uv%q=f5v5?^?HaFW>$FcyalVZr7SW$mRg4kdqXtZ>Y<TN2;SchGW7n>*SUU$b_Y8 zoJ^)&#KH#vl|Ixs3}=!QQ;jboz!=QY#HdA4kWADYtiDB4rN?5S+9WX$@Bi8-r{Q98 zS-H7SvgX(xvY*df?V7N5v*eXmyE&9Ba(cF#N2x#x<9j0@rEwczJD_85#jyudFARPX zWgFR9Waoehv|j*9p>`%6n(R;^Uz9hwa(qSq(MUyz`RkCqQIb#HRvxXv)VC-N-6l?% z0;SE!YXvC7{J9U^*w+*(-SoMTfgiFk0(Fj3FRFuJ!H|p@mu-%{!_OdF0G3Qq3Z;{N zow_pp-(!MO^{Pr+iq<@yM~1i-=Yf4e_A-WPbw^2d{CNguSWgG3i_#xiK=8f=iB~mB zuR-Ir#SwIVvjxK*oaZpvVD`&)?1%R_rZ=%+@RnW--qJ8gL<uK5$03!RJbY{bDm8GD z>BGtwO{!W`1#u+0#Cki;=Q|un1NMfP2iDa!O?yJ-o)Y^hS$#sT{H9MlF;<^vr?j!% MndLtTtSY#_0B<xt?f?J) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-314.pyc deleted file mode 100644 index 4df7cc8b70171d07f94947005148442e5b9f1104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9897 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 X-8Zo6dF=V7gBvb%4Shk7V4wM4xPcx? diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index 5e64f22d20be65261407ab7682a3b5a3298d226f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2849 zcmbVO-ER{|5Z|-U_WAPRgapEO4k)1}#DO+KNn0TSrL|R>rq|G_lEdlZ+r-zL@67Hx z#1WDFP*t=K<zJvr6_0%@Py7o(sYG=Gsa1tk-V%j2ubtU*g7ZNub!E@Z?(L3eemnCU z4|aCw1jgf^{&Xi3g#3Y%%>i>9%K9CU4RVv1N`d4Rq4c93E5!0~5tn+rpym@IA$7Ho z%%?<3>WPAuPm6S37ka);wDpsz_!()F5GO^*QM8jRwC6iSM?cw5P7pKIM@(%hH4=}u ziB2<pie&W{IL#_yo9+97u!S4=9Ht$UUrt=JuI8^@{irbhAuM#4Y(MbblI^*R)bi~L zg~i^>(_ApSB;I%7=}y=1cs3q(U9mZBT?;cGxE|$oE@<V8GNoR4V3rE&Hma7>dRPe$ zU8%XAbIqT3S>RWwFA6>vw&zh+YDOp@%{Y|xJWLy8iU`FdB6f41h?|N~rxIoiB98YF zuWO`vP9#kg))KfTQf3l#Km~No)I>VMBkY#`wK~7(nzYI&2UoaZ8`5c`)#;qBPnKP7 zI05AbplJA%I)?4n4LDY{nMBpFd32N;0HrZa!33iv;nj_rU$skf)XC{31zg21ju?C) zN@e{hC=K#CxfvV%8txa?j*?H6vSKP`Y*>L?jK9FWVUkf%WB#HJmtov7#si-|z`IS( z1gv5Uj)qT$-(P*Fc!N{Mi?&1Ag|V^o#oGa!D^^+X75Kx8B`>Hs({O`BuI~yEP56f{ z6esGU9Qbcv7_mmIh0%-FB&}3ETTn|>s>SQ>bdkG)4q-I*Eak<jTOGDsUr^@T-f$~q zd|1MmtJcGI%WCExwXE>?F8Fh;?+-x;yhq}(L6k)A8jAa8<zpR|i9`?;92hX5m0nMR z(jX=|MII>QtP5rUi^{1tBS9Hp`(P>Tn#RntFr()vvs@=Ux!aqadk(@$js@Kyzh`>b ze$f8!EwWBH%rYpThDp;;)(v`echXIU;j>;4m>0YcM1yP)E%Ax6Cgt+ryOHwB8Q3ES z;sAhjtRDwxFr_A%FIpcHm`ppyCb`UNGWme8HjApPyvB;U!vsusS&6-}QpAwuc#XY1 zyc%hiN>wSQw@xd?wk>_{`1bH@)6z)uSForSzq=mT4mU)Z8Wk#R#}>9R!-9%jiD+O3 zXw85O4`4?nV0EZ^$B4=hxI%BG5jbTFqsD<FTyakF1fyQv^=FO1-)S;nI-|F0z!1oQ zIeqc$XH+1C0G$XUnAyfGPK}`zC%El<;PK)?nYHlyi~<$SQw9u!jO}ETVI0hc87}}L zx6pa3YKwBH;%f$XOBe#lFrTwAhPfRkWTYH{88D(kIfUfB3CTA84hMHv%xgEx{GA26 z4YI0}uHJhK-!44KoPp0We6$<O*&8b$GiQFy^x(UDOZS%UE-h=L%g0Aow9&guPrLf> zt3PT#XitpM$HwSN*Vx^})6D7n^p~MaKZ{2T4;LOSJzQED`gkQXzO0SEs)uIY5R6z- z?3>byy(!j=o2r?BZ_-Q+tB@I*EYz?kq5|sA1IINvl3~*iGtnED2SAR{5<_)52)wYX zRHmglD|+eBDwnk$sz}uTS?mK~n7<|6+#tzB#~O;?j$K?$z;iW84j*4lp{9`|{i|uz zbfR~zwSgAJ-J11#5F<k(iM&wd#j`hX;WP@YTaM=kU_>c!ENX3Z+wE`VL^!-V4gU3j zj1C!~LDt$yI&xWhGoIB$&658(pgri8RSBFL<gJB`<5tb~Fm+*;u^^ur7oO`=KY)dl zWjR3!6b(9Cl`>Ih*ge<@6lXz%`z;HuO}Hh?7SZ1q$}LO&s)Q_}+jiWK0(%4>1n~`7 zi^UTf0G#Z68G{D29tUj|wZD?c!yCPTy1bys4xS#*X3+bY8nkHemqFS=#}@S}lrBST z!z0ixbJjfdoq*+{9t!Vr@Tbb-vLZu6?$~Uoxor(KhaH<C!G{O7Z`&-?sHtofdDypo z+g3Kq9F`I9fFji1i@?9c#^84_iTHUCt8qn9o{^K!iSe9_JtvnpVyY5bBOo@~iQ4^4 Tz5FtHSm{_kc<yfkPYKFDi&n+U diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/base.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/base.py deleted file mode 100644 index ea61f3501..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/base.py +++ /dev/null @@ -1,55 +0,0 @@ -from __future__ import annotations - -import abc -from typing import TYPE_CHECKING - -from pip._internal.metadata.base import BaseDistribution -from pip._internal.req import InstallRequirement - -if TYPE_CHECKING: - from pip._internal.build_env import BuildEnvironmentInstaller - - -class AbstractDistribution(metaclass=abc.ABCMeta): - """A base class for handling installable artifacts. - - The requirements for anything installable are as follows: - - - we must be able to determine the requirement name - (or we can't correctly handle the non-upgrade case). - - - for packages with setup requirements, we must also be able - to determine their requirements without installing additional - packages (for the same reason as run-time dependencies) - - - we must be able to create a Distribution object exposing the - above metadata. - - - if we need to do work in the build tracker, we must be able to generate a unique - string to identify the requirement in the build tracker. - """ - - def __init__(self, req: InstallRequirement) -> None: - super().__init__() - self.req = req - - @abc.abstractproperty - def build_tracker_id(self) -> str | None: - """A string that uniquely identifies this requirement to the build tracker. - - If None, then this dist has no work to do in the build tracker, and - ``.prepare_distribution_metadata()`` will not be called.""" - raise NotImplementedError() - - @abc.abstractmethod - def get_metadata_distribution(self) -> BaseDistribution: - raise NotImplementedError() - - @abc.abstractmethod - def prepare_distribution_metadata( - self, - build_env_installer: BuildEnvironmentInstaller, - build_isolation: bool, - check_build_deps: bool, - ) -> None: - raise NotImplementedError() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/installed.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/installed.py deleted file mode 100644 index b6a67df24..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/installed.py +++ /dev/null @@ -1,33 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.metadata import BaseDistribution - -if TYPE_CHECKING: - from pip._internal.build_env import BuildEnvironmentInstaller - - -class InstalledDistribution(AbstractDistribution): - """Represents an installed package. - - This does not need any preparation as the required information has already - been computed. - """ - - @property - def build_tracker_id(self) -> str | None: - return None - - def get_metadata_distribution(self) -> BaseDistribution: - assert self.req.satisfied_by is not None, "not actually installed" - return self.req.satisfied_by - - def prepare_distribution_metadata( - self, - build_env_installer: BuildEnvironmentInstaller, - build_isolation: bool, - check_build_deps: bool, - ) -> None: - pass diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/sdist.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/sdist.py deleted file mode 100644 index f7bd7836d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/sdist.py +++ /dev/null @@ -1,164 +0,0 @@ -from __future__ import annotations - -import logging -from collections.abc import Iterable -from typing import TYPE_CHECKING - -from pip._internal.build_env import BuildEnvironment -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.exceptions import InstallationError -from pip._internal.metadata import BaseDistribution -from pip._internal.utils.subprocess import runner_with_spinner_message - -if TYPE_CHECKING: - from pip._internal.build_env import BuildEnvironmentInstaller - -logger = logging.getLogger(__name__) - - -class SourceDistribution(AbstractDistribution): - """Represents a source distribution. - - The preparation step for these needs metadata for the packages to be - generated. - """ - - @property - def build_tracker_id(self) -> str | None: - """Identify this requirement uniquely by its link.""" - assert self.req.link - return self.req.link.url_without_fragment - - def get_metadata_distribution(self) -> BaseDistribution: - return self.req.get_dist() - - def prepare_distribution_metadata( - self, - build_env_installer: BuildEnvironmentInstaller, - build_isolation: bool, - check_build_deps: bool, - ) -> None: - # Load pyproject.toml - self.req.load_pyproject_toml() - - # Set up the build isolation, if this requirement should be isolated - if build_isolation: - # Setup an isolated environment and install the build backend static - # requirements in it. - self._prepare_build_backend(build_env_installer) - # Check that the build backend supports PEP 660. This cannot be done - # earlier because we need to setup the build backend to verify it - # supports build_editable, nor can it be done later, because we want - # to avoid installing build requirements needlessly. - self.req.editable_sanity_check() - # Install the dynamic build requirements. - self._install_build_reqs(build_env_installer) - else: - # When not using build isolation, we still need to check that - # the build backend supports PEP 660. - self.req.editable_sanity_check() - # Check if the current environment provides build dependencies - if check_build_deps: - pyproject_requires = self.req.pyproject_requires - assert pyproject_requires is not None - conflicting, missing = self.req.build_env.check_requirements( - pyproject_requires - ) - if conflicting: - self._raise_conflicts("the backend dependencies", conflicting) - if missing: - self._raise_missing_reqs(missing) - self.req.prepare_metadata() - - def _prepare_build_backend( - self, build_env_installer: BuildEnvironmentInstaller - ) -> None: - # Isolate in a BuildEnvironment and install the build-time - # requirements. - pyproject_requires = self.req.pyproject_requires - assert pyproject_requires is not None - - self.req.build_env = BuildEnvironment(build_env_installer) - self.req.build_env.install_requirements( - pyproject_requires, "overlay", kind="build dependencies", for_req=self.req - ) - conflicting, missing = self.req.build_env.check_requirements( - self.req.requirements_to_check - ) - if conflicting: - self._raise_conflicts("PEP 517/518 supported requirements", conflicting) - if missing: - logger.warning( - "Missing build requirements in pyproject.toml for %s.", - self.req, - ) - logger.warning( - "The project does not specify a build backend, and " - "pip cannot fall back to setuptools without %s.", - " and ".join(map(repr, sorted(missing))), - ) - - def _get_build_requires_wheel(self) -> Iterable[str]: - with self.req.build_env: - runner = runner_with_spinner_message("Getting requirements to build wheel") - backend = self.req.pep517_backend - assert backend is not None - with backend.subprocess_runner(runner): - return backend.get_requires_for_build_wheel() - - def _get_build_requires_editable(self) -> Iterable[str]: - with self.req.build_env: - runner = runner_with_spinner_message( - "Getting requirements to build editable" - ) - backend = self.req.pep517_backend - assert backend is not None - with backend.subprocess_runner(runner): - return backend.get_requires_for_build_editable() - - def _install_build_reqs( - self, build_env_installer: BuildEnvironmentInstaller - ) -> None: - # Install any extra build dependencies that the backend requests. - # This must be done in a second pass, as the pyproject.toml - # dependencies must be installed before we can call the backend. - if ( - self.req.editable - and self.req.permit_editable_wheels - and self.req.supports_pyproject_editable - ): - build_reqs = self._get_build_requires_editable() - else: - build_reqs = self._get_build_requires_wheel() - conflicting, missing = self.req.build_env.check_requirements(build_reqs) - if conflicting: - self._raise_conflicts("the backend dependencies", conflicting) - self.req.build_env.install_requirements( - missing, "normal", kind="backend dependencies", for_req=self.req - ) - - def _raise_conflicts( - self, conflicting_with: str, conflicting_reqs: set[tuple[str, str]] - ) -> None: - format_string = ( - "Some build dependencies for {requirement} " - "conflict with {conflicting_with}: {description}." - ) - error_message = format_string.format( - requirement=self.req, - conflicting_with=conflicting_with, - description=", ".join( - f"{installed} is incompatible with {wanted}" - for installed, wanted in sorted(conflicting_reqs) - ), - ) - raise InstallationError(error_message) - - def _raise_missing_reqs(self, missing: set[str]) -> None: - format_string = ( - "Some build dependencies for {requirement} are missing: {missing}." - ) - error_message = format_string.format( - requirement=self.req, missing=", ".join(map(repr, sorted(missing))) - ) - raise InstallationError(error_message) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/wheel.py deleted file mode 100644 index ee12bfadc..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/distributions/wheel.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.distributions.base import AbstractDistribution -from pip._internal.metadata import ( - BaseDistribution, - FilesystemWheel, - get_wheel_distribution, -) - -if TYPE_CHECKING: - from pip._internal.build_env import BuildEnvironmentInstaller - - -class WheelDistribution(AbstractDistribution): - """Represents a wheel distribution. - - This does not need any preparation as wheels can be directly unpacked. - """ - - @property - def build_tracker_id(self) -> str | None: - return None - - def get_metadata_distribution(self) -> BaseDistribution: - """Loads the metadata from the wheel file into memory and returns a - Distribution that uses it, not relying on the wheel file or - requirement. - """ - assert self.req.local_file_path, "Set as part of preparation during download" - assert self.req.name, "Wheels are never unnamed" - wheel = FilesystemWheel(self.req.local_file_path) - return get_wheel_distribution(wheel, canonicalize_name(self.req.name)) - - def prepare_distribution_metadata( - self, - build_env_installer: BuildEnvironmentInstaller, - build_isolation: bool, - check_build_deps: bool, - ) -> None: - pass diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/exceptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/exceptions.py deleted file mode 100644 index 9ddda0e62..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/exceptions.py +++ /dev/null @@ -1,971 +0,0 @@ -"""Exceptions used throughout package. - -This module MUST NOT try to import from anything within `pip._internal` to -operate. This is expected to be importable from any/all files within the -subpackage and, thus, should not depend on them. -""" - -from __future__ import annotations - -import configparser -import contextlib -import locale -import logging -import pathlib -import re -import sys -import traceback -from collections.abc import Iterable, Iterator -from itertools import chain, groupby, repeat -from typing import TYPE_CHECKING, Literal - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.version import InvalidVersion -from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult -from pip._vendor.rich.markup import escape -from pip._vendor.rich.text import Text - -if TYPE_CHECKING: - from hashlib import _Hash - - from pip._vendor.requests.models import PreparedRequest, Request, Response - - from pip._internal.metadata import BaseDistribution - from pip._internal.models.link import Link - from pip._internal.network.download import _FileDownload - from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -# -# Scaffolding -# -def _is_kebab_case(s: str) -> bool: - return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None - - -def _prefix_with_indent( - s: Text | str, - console: Console, - *, - prefix: str, - indent: str, -) -> Text: - if isinstance(s, Text): - text = s - else: - text = console.render_str(s) - - return console.render_str(prefix, overflow="ignore") + console.render_str( - f"\n{indent}", overflow="ignore" - ).join(text.split(allow_blank=True)) - - -class PipError(Exception): - """The base pip error.""" - - -class DiagnosticPipError(PipError): - """An error, that presents diagnostic information to the user. - - This contains a bunch of logic, to enable pretty presentation of our error - messages. Each error gets a unique reference. Each error can also include - additional context, a hint and/or a note -- which are presented with the - main error message in a consistent style. - - This is adapted from the error output styling in `sphinx-theme-builder`. - """ - - reference: str - - def __init__( - self, - *, - kind: Literal["error", "warning"] = "error", - reference: str | None = None, - message: str | Text, - context: str | Text | None, - hint_stmt: str | Text | None, - note_stmt: str | Text | None = None, - link: str | None = None, - ) -> None: - # Ensure a proper reference is provided. - if reference is None: - assert hasattr(self, "reference"), "error reference not provided!" - reference = self.reference - assert _is_kebab_case(reference), "error reference must be kebab-case!" - - self.kind = kind - self.reference = reference - - self.message = message - self.context = context - - self.note_stmt = note_stmt - self.hint_stmt = hint_stmt - - self.link = link - - super().__init__(f"<{self.__class__.__name__}: {self.reference}>") - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__name__}(" - f"reference={self.reference!r}, " - f"message={self.message!r}, " - f"context={self.context!r}, " - f"note_stmt={self.note_stmt!r}, " - f"hint_stmt={self.hint_stmt!r}" - ")>" - ) - - def __rich_console__( - self, - console: Console, - options: ConsoleOptions, - ) -> RenderResult: - colour = "red" if self.kind == "error" else "yellow" - - yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]" - yield "" - - if not options.ascii_only: - # Present the main message, with relevant context indented. - if self.context is not None: - yield _prefix_with_indent( - self.message, - console, - prefix=f"[{colour}]×[/] ", - indent=f"[{colour}]│[/] ", - ) - yield _prefix_with_indent( - self.context, - console, - prefix=f"[{colour}]╰─>[/] ", - indent=f"[{colour}] [/] ", - ) - else: - yield _prefix_with_indent( - self.message, - console, - prefix="[red]×[/] ", - indent=" ", - ) - else: - yield self.message - if self.context is not None: - yield "" - yield self.context - - if self.note_stmt is not None or self.hint_stmt is not None: - yield "" - - if self.note_stmt is not None: - yield _prefix_with_indent( - self.note_stmt, - console, - prefix="[magenta bold]note[/]: ", - indent=" ", - ) - if self.hint_stmt is not None: - yield _prefix_with_indent( - self.hint_stmt, - console, - prefix="[cyan bold]hint[/]: ", - indent=" ", - ) - - if self.link is not None: - yield "" - yield f"Link: {self.link}" - - -# -# Actual Errors -# -class ConfigurationError(PipError): - """General exception in configuration""" - - -class InstallationError(PipError): - """General exception during installation""" - - -class FailedToPrepareCandidate(InstallationError): - """Raised when we fail to prepare a candidate (i.e. fetch and generate metadata). - - This is intentionally not a diagnostic error, since the output will be presented - above this error, when this occurs. This should instead present information to the - user. - """ - - def __init__( - self, *, package_name: str, requirement_chain: str, failed_step: str - ) -> None: - super().__init__(f"Failed to build '{package_name}' when {failed_step.lower()}") - self.package_name = package_name - self.requirement_chain = requirement_chain - self.failed_step = failed_step - - -class MissingPyProjectBuildRequires(DiagnosticPipError): - """Raised when pyproject.toml has `build-system`, but no `build-system.requires`.""" - - reference = "missing-pyproject-build-system-requires" - - def __init__(self, *, package: str) -> None: - super().__init__( - message=f"Can not process {escape(package)}", - context=Text( - "This package has an invalid pyproject.toml file.\n" - "The [build-system] table is missing the mandatory `requires` key." - ), - note_stmt="This is an issue with the package mentioned above, not pip.", - hint_stmt=Text("See PEP 518 for the detailed specification."), - ) - - -class InvalidPyProjectBuildRequires(DiagnosticPipError): - """Raised when pyproject.toml an invalid `build-system.requires`.""" - - reference = "invalid-pyproject-build-system-requires" - - def __init__(self, *, package: str, reason: str) -> None: - super().__init__( - message=f"Can not process {escape(package)}", - context=Text( - "This package has an invalid `build-system.requires` key in " - f"pyproject.toml.\n{reason}" - ), - note_stmt="This is an issue with the package mentioned above, not pip.", - hint_stmt=Text("See PEP 518 for the detailed specification."), - ) - - -class NoneMetadataError(PipError): - """Raised when accessing a Distribution's "METADATA" or "PKG-INFO". - - This signifies an inconsistency, when the Distribution claims to have - the metadata file (if not, raise ``FileNotFoundError`` instead), but is - not actually able to produce its content. This may be due to permission - errors. - """ - - def __init__( - self, - dist: BaseDistribution, - metadata_name: str, - ) -> None: - """ - :param dist: A Distribution object. - :param metadata_name: The name of the metadata being accessed - (can be "METADATA" or "PKG-INFO"). - """ - self.dist = dist - self.metadata_name = metadata_name - - def __str__(self) -> str: - # Use `dist` in the error message because its stringification - # includes more information, like the version and location. - return f"None {self.metadata_name} metadata found for distribution: {self.dist}" - - -class UserInstallationInvalid(InstallationError): - """A --user install is requested on an environment without user site.""" - - def __str__(self) -> str: - return "User base directory is not specified" - - -class InvalidSchemeCombination(InstallationError): - def __str__(self) -> str: - before = ", ".join(str(a) for a in self.args[:-1]) - return f"Cannot set {before} and {self.args[-1]} together" - - -class DistributionNotFound(InstallationError): - """Raised when a distribution cannot be found to satisfy a requirement""" - - -class RequirementsFileParseError(InstallationError): - """Raised when a general error occurs parsing a requirements file line.""" - - -class BestVersionAlreadyInstalled(PipError): - """Raised when the most up-to-date version of a package is already - installed.""" - - -class BadCommand(PipError): - """Raised when virtualenv or a command is not found""" - - -class CommandError(PipError): - """Raised when there is an error in command-line arguments""" - - -class PreviousBuildDirError(PipError): - """Raised when there's a previous conflicting build directory""" - - -class NetworkConnectionError(PipError): - """HTTP connection error""" - - def __init__( - self, - error_msg: str, - response: Response | None = None, - request: Request | PreparedRequest | None = None, - ) -> None: - """ - Initialize NetworkConnectionError with `request` and `response` - objects. - """ - self.response = response - self.request = request - self.error_msg = error_msg - if ( - self.response is not None - and not self.request - and hasattr(response, "request") - ): - self.request = self.response.request - super().__init__(error_msg, response, request) - - def __str__(self) -> str: - return str(self.error_msg) - - -class InvalidWheelFilename(InstallationError): - """Invalid wheel filename.""" - - -class UnsupportedWheel(InstallationError): - """Unsupported wheel.""" - - -class InvalidWheel(InstallationError): - """Invalid (e.g. corrupt) wheel.""" - - def __init__(self, location: str, name: str): - self.location = location - self.name = name - - def __str__(self) -> str: - return f"Wheel '{self.name}' located at {self.location} is invalid." - - -class MetadataInconsistent(InstallationError): - """Built metadata contains inconsistent information. - - This is raised when the metadata contains values (e.g. name and version) - that do not match the information previously obtained from sdist filename, - user-supplied ``#egg=`` value, or an install requirement name. - """ - - def __init__( - self, ireq: InstallRequirement, field: str, f_val: str, m_val: str - ) -> None: - self.ireq = ireq - self.field = field - self.f_val = f_val - self.m_val = m_val - - def __str__(self) -> str: - return ( - f"Requested {self.ireq} has inconsistent {self.field}: " - f"expected {self.f_val!r}, but metadata has {self.m_val!r}" - ) - - -class MetadataInvalid(InstallationError): - """Metadata is invalid.""" - - def __init__(self, ireq: InstallRequirement, error: str) -> None: - self.ireq = ireq - self.error = error - - def __str__(self) -> str: - return f"Requested {self.ireq} has invalid metadata: {self.error}" - - -class InstallationSubprocessError(DiagnosticPipError, InstallationError): - """A subprocess call failed.""" - - reference = "subprocess-exited-with-error" - - def __init__( - self, - *, - command_description: str, - exit_code: int, - output_lines: list[str] | None, - ) -> None: - if output_lines is None: - output_prompt = Text("No available output.") - else: - output_prompt = ( - Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n") - + Text("".join(output_lines)) - + Text.from_markup(R"[red]\[end of output][/]") - ) - - super().__init__( - message=( - f"[green]{escape(command_description)}[/] did not run successfully.\n" - f"exit code: {exit_code}" - ), - context=output_prompt, - hint_stmt=None, - note_stmt=( - "This error originates from a subprocess, and is likely not a " - "problem with pip." - ), - ) - - self.command_description = command_description - self.exit_code = exit_code - - def __str__(self) -> str: - return f"{self.command_description} exited with {self.exit_code}" - - -class MetadataGenerationFailed(DiagnosticPipError, InstallationError): - reference = "metadata-generation-failed" - - def __init__( - self, - *, - package_details: str, - ) -> None: - super().__init__( - message="Encountered error while generating package metadata.", - context=escape(package_details), - hint_stmt="See above for details.", - note_stmt="This is an issue with the package mentioned above, not pip.", - ) - - def __str__(self) -> str: - return "metadata generation failed" - - -class HashErrors(InstallationError): - """Multiple HashError instances rolled into one for reporting""" - - def __init__(self) -> None: - self.errors: list[HashError] = [] - - def append(self, error: HashError) -> None: - self.errors.append(error) - - def __str__(self) -> str: - lines = [] - self.errors.sort(key=lambda e: e.order) - for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): - lines.append(cls.head) - lines.extend(e.body() for e in errors_of_cls) - if lines: - return "\n".join(lines) - return "" - - def __bool__(self) -> bool: - return bool(self.errors) - - -class HashError(InstallationError): - """ - A failure to verify a package against known-good hashes - - :cvar order: An int sorting hash exception classes by difficulty of - recovery (lower being harder), so the user doesn't bother fretting - about unpinned packages when he has deeper issues, like VCS - dependencies, to deal with. Also keeps error reports in a - deterministic order. - :cvar head: A section heading for display above potentially many - exceptions of this kind - :ivar req: The InstallRequirement that triggered this error. This is - pasted on after the exception is instantiated, because it's not - typically available earlier. - - """ - - req: InstallRequirement | None = None - head = "" - order: int = -1 - - def body(self) -> str: - """Return a summary of me for display under the heading. - - This default implementation simply prints a description of the - triggering requirement. - - :param req: The InstallRequirement that provoked this error, with - its link already populated by the resolver's _populate_link(). - - """ - return f" {self._requirement_name()}" - - def __str__(self) -> str: - return f"{self.head}\n{self.body()}" - - def _requirement_name(self) -> str: - """Return a description of the requirement that triggered me. - - This default implementation returns long description of the req, with - line numbers - - """ - return str(self.req) if self.req else "unknown package" - - -class VcsHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 0 - head = ( - "Can't verify hashes for these requirements because we don't " - "have a way to hash version control repositories:" - ) - - -class DirectoryUrlHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 1 - head = ( - "Can't verify hashes for these file:// requirements because they " - "point to directories:" - ) - - -class HashMissing(HashError): - """A hash was needed for a requirement but is absent.""" - - order = 2 - head = ( - "Hashes are required in --require-hashes mode, but they are " - "missing from some requirements. Here is a list of those " - "requirements along with the hashes their downloaded archives " - "actually had. Add lines like these to your requirements files to " - "prevent tampering. (If you did not enable --require-hashes " - "manually, note that it turns on automatically when any package " - "has a hash.)" - ) - - def __init__(self, gotten_hash: str) -> None: - """ - :param gotten_hash: The hash of the (possibly malicious) archive we - just downloaded - """ - self.gotten_hash = gotten_hash - - def body(self) -> str: - # Dodge circular import. - from pip._internal.utils.hashes import FAVORITE_HASH - - package = None - if self.req: - # In the case of URL-based requirements, display the original URL - # seen in the requirements file rather than the package name, - # so the output can be directly copied into the requirements file. - package = ( - self.req.original_link - if self.req.is_direct - # In case someone feeds something downright stupid - # to InstallRequirement's constructor. - else getattr(self.req, "req", None) - ) - return " {} --hash={}:{}".format( - package or "unknown package", FAVORITE_HASH, self.gotten_hash - ) - - -class HashUnpinned(HashError): - """A requirement had a hash specified but was not pinned to a specific - version.""" - - order = 3 - head = ( - "In --require-hashes mode, all requirements must have their " - "versions pinned with ==. These do not:" - ) - - -class HashMismatch(HashError): - """ - Distribution file hash values don't match. - - :ivar package_name: The name of the package that triggered the hash - mismatch. Feel free to write to this after the exception is raise to - improve its error message. - - """ - - order = 4 - head = ( - "THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS " - "FILE. If you have updated the package versions, please update " - "the hashes. Otherwise, examine the package contents carefully; " - "someone may have tampered with them." - ) - - def __init__(self, allowed: dict[str, list[str]], gots: dict[str, _Hash]) -> None: - """ - :param allowed: A dict of algorithm names pointing to lists of allowed - hex digests - :param gots: A dict of algorithm names pointing to hashes we - actually got from the files under suspicion - """ - self.allowed = allowed - self.gots = gots - - def body(self) -> str: - return f" {self._requirement_name()}:\n{self._hash_comparison()}" - - def _hash_comparison(self) -> str: - """ - Return a comparison of actual and expected hash values. - - Example:: - - Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde - or 123451234512345123451234512345123451234512345 - Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef - - """ - - def hash_then_or(hash_name: str) -> chain[str]: - # For now, all the decent hashes have 6-char names, so we can get - # away with hard-coding space literals. - return chain([hash_name], repeat(" or")) - - lines: list[str] = [] - for hash_name, expecteds in self.allowed.items(): - prefix = hash_then_or(hash_name) - lines.extend((f" Expected {next(prefix)} {e}") for e in expecteds) - lines.append( - f" Got {self.gots[hash_name].hexdigest()}\n" - ) - return "\n".join(lines) - - -class UnsupportedPythonVersion(InstallationError): - """Unsupported python version according to Requires-Python package - metadata.""" - - -class ConfigurationFileCouldNotBeLoaded(ConfigurationError): - """When there are errors while loading a configuration file""" - - def __init__( - self, - reason: str = "could not be loaded", - fname: str | None = None, - error: configparser.Error | None = None, - ) -> None: - super().__init__(error) - self.reason = reason - self.fname = fname - self.error = error - - def __str__(self) -> str: - if self.fname is not None: - message_part = f" in {self.fname}." - else: - assert self.error is not None - message_part = f".\n{self.error}\n" - return f"Configuration file {self.reason}{message_part}" - - -_DEFAULT_EXTERNALLY_MANAGED_ERROR = f"""\ -The Python environment under {sys.prefix} is managed externally, and may not be -manipulated by the user. Please use specific tooling from the distributor of -the Python installation to interact with this environment instead. -""" - - -class ExternallyManagedEnvironment(DiagnosticPipError): - """The current environment is externally managed. - - This is raised when the current environment is externally managed, as - defined by `PEP 668`_. The ``EXTERNALLY-MANAGED`` configuration is checked - and displayed when the error is bubbled up to the user. - - :param error: The error message read from ``EXTERNALLY-MANAGED``. - """ - - reference = "externally-managed-environment" - - def __init__(self, error: str | None) -> None: - if error is None: - context = Text(_DEFAULT_EXTERNALLY_MANAGED_ERROR) - else: - context = Text(error) - super().__init__( - message="This environment is externally managed", - context=context, - note_stmt=( - "If you believe this is a mistake, please contact your " - "Python installation or OS distribution provider. " - "You can override this, at the risk of breaking your Python " - "installation or OS, by passing --break-system-packages." - ), - hint_stmt=Text("See PEP 668 for the detailed specification."), - ) - - @staticmethod - def _iter_externally_managed_error_keys() -> Iterator[str]: - # LC_MESSAGES is in POSIX, but not the C standard. The most common - # platform that does not implement this category is Windows, where - # using other categories for console message localization is equally - # unreliable, so we fall back to the locale-less vendor message. This - # can always be re-evaluated when a vendor proposes a new alternative. - try: - category = locale.LC_MESSAGES - except AttributeError: - lang: str | None = None - else: - lang, _ = locale.getlocale(category) - if lang is not None: - yield f"Error-{lang}" - for sep in ("-", "_"): - before, found, _ = lang.partition(sep) - if not found: - continue - yield f"Error-{before}" - yield "Error" - - @classmethod - def from_config( - cls, - config: pathlib.Path | str, - ) -> ExternallyManagedEnvironment: - parser = configparser.ConfigParser(interpolation=None) - try: - parser.read(config, encoding="utf-8") - section = parser["externally-managed"] - for key in cls._iter_externally_managed_error_keys(): - with contextlib.suppress(KeyError): - return cls(section[key]) - except KeyError: - pass - except (OSError, UnicodeDecodeError, configparser.ParsingError): - from pip._internal.utils._log import VERBOSE - - exc_info = logger.isEnabledFor(VERBOSE) - logger.warning("Failed to read %s", config, exc_info=exc_info) - return cls(None) - - -class UninstallMissingRecord(DiagnosticPipError): - reference = "uninstall-no-record-file" - - def __init__(self, *, distribution: BaseDistribution) -> None: - installer = distribution.installer - if not installer or installer == "pip": - dep = f"{distribution.raw_name}=={distribution.version}" - hint = Text.assemble( - "You might be able to recover from this via: ", - (f"pip install --force-reinstall --no-deps {dep}", "green"), - ) - else: - hint = Text( - f"The package was installed by {installer}. " - "You should check if it can uninstall the package." - ) - - super().__init__( - message=Text(f"Cannot uninstall {distribution}"), - context=( - "The package's contents are unknown: " - f"no RECORD file was found for {distribution.raw_name}." - ), - hint_stmt=hint, - ) - - -class LegacyDistutilsInstall(DiagnosticPipError): - reference = "uninstall-distutils-installed-package" - - def __init__(self, *, distribution: BaseDistribution) -> None: - super().__init__( - message=Text(f"Cannot uninstall {distribution}"), - context=( - "It is a distutils installed project and thus we cannot accurately " - "determine which files belong to it which would lead to only a partial " - "uninstall." - ), - hint_stmt=None, - ) - - -class InvalidInstalledPackage(DiagnosticPipError): - reference = "invalid-installed-package" - - def __init__( - self, - *, - dist: BaseDistribution, - invalid_exc: InvalidRequirement | InvalidVersion, - ) -> None: - installed_location = dist.installed_location - - if isinstance(invalid_exc, InvalidRequirement): - invalid_type = "requirement" - else: - invalid_type = "version" - - super().__init__( - message=Text( - f"Cannot process installed package {dist} " - + (f"in {installed_location!r} " if installed_location else "") - + f"because it has an invalid {invalid_type}:\n{invalid_exc.args[0]}" - ), - context=( - "Starting with pip 24.1, packages with invalid " - f"{invalid_type}s can not be processed." - ), - hint_stmt="To proceed this package must be uninstalled.", - ) - - -class IncompleteDownloadError(DiagnosticPipError): - """Raised when the downloader receives fewer bytes than advertised - in the Content-Length header.""" - - reference = "incomplete-download" - - def __init__(self, download: _FileDownload) -> None: - # Dodge circular import. - from pip._internal.utils.misc import format_size - - assert download.size is not None - download_status = ( - f"{format_size(download.bytes_received)}/{format_size(download.size)}" - ) - if download.reattempts: - retry_status = f"after {download.reattempts + 1} attempts " - hint = "Use --resume-retries to configure resume attempt limit." - else: - # Download retrying is not enabled. - retry_status = "" - hint = "Consider using --resume-retries to enable download resumption." - message = Text( - f"Download failed {retry_status}because not enough bytes " - f"were received ({download_status})" - ) - - super().__init__( - message=message, - context=f"URL: {download.link.redacted_url}", - hint_stmt=hint, - note_stmt="This is an issue with network connectivity, not pip.", - ) - - -class ResolutionTooDeepError(DiagnosticPipError): - """Raised when the dependency resolver exceeds the maximum recursion depth.""" - - reference = "resolution-too-deep" - - def __init__(self) -> None: - super().__init__( - message="Dependency resolution exceeded maximum depth", - context=( - "Pip cannot resolve the current dependencies as the dependency graph " - "is too complex for pip to solve efficiently." - ), - hint_stmt=( - "Try adding lower bounds to constrain your dependencies, " - "for example: 'package>=2.0.0' instead of just 'package'. " - ), - link="https://pip.pypa.io/en/stable/topics/dependency-resolution/#handling-resolution-too-deep-errors", - ) - - -class InstallWheelBuildError(DiagnosticPipError): - reference = "failed-wheel-build-for-install" - - def __init__(self, failed: list[InstallRequirement]) -> None: - super().__init__( - message=( - "Failed to build installable wheels for some " - "pyproject.toml based projects" - ), - context=", ".join(r.name for r in failed), # type: ignore - hint_stmt=None, - ) - - -class InvalidEggFragment(DiagnosticPipError): - reference = "invalid-egg-fragment" - - def __init__(self, link: Link, fragment: str) -> None: - hint = "" - if ">" in fragment or "=" in fragment or "<" in fragment: - hint = ( - "Version specifiers are silently ignored for URL references. " - "Remove them. " - ) - if "[" in fragment and "]" in fragment: - hint += "Try using the Direct URL requirement syntax: 'name[extra] @ URL'" - - if not hint: - hint = "Egg fragments can only be a valid project name." - - super().__init__( - message=f"The '{escape(fragment)}' egg fragment is invalid", - context=f"from '{escape(str(link))}'", - hint_stmt=escape(hint), - ) - - -class BuildDependencyInstallError(DiagnosticPipError): - """Raised when build dependencies cannot be installed.""" - - reference = "failed-build-dependency-install" - - def __init__( - self, - req: InstallRequirement | None, - build_reqs: Iterable[str], - *, - cause: Exception, - log_lines: list[str] | None, - ) -> None: - if isinstance(cause, PipError): - note = "This is likely not a problem with pip." - else: - note = ( - "pip crashed unexpectedly. Please file an issue on pip's issue " - "tracker: https://github.com/pypa/pip/issues/new" - ) - - if log_lines is None: - # No logs are available, they must have been printed earlier. - context = Text("See above for more details.") - else: - if isinstance(cause, PipError): - log_lines.append(f"ERROR: {cause}") - else: - # Split rendered error into real lines without trailing newlines. - log_lines.extend( - "".join(traceback.format_exception(cause)).splitlines() - ) - - context = Text.assemble( - f"Installing {' '.join(build_reqs)}\n", - (f"[{len(log_lines)} lines of output]\n", "red"), - "\n".join(log_lines), - ("\n[end of output]", "red"), - ) - - message = Text("Cannot install build dependencies", "green") - if req: - message += Text(f" for {req}") - super().__init__( - message=message, context=context, hint_stmt=None, note_stmt=note - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__init__.py deleted file mode 100644 index 197dd757d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Index interaction code""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 3ac9f801f505b5cb2833393c0adb2a1e0c38a04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmXw!F-t=+5XTc0ErO0t3I(Sk&*#G;R>Z|g5Gh5sz>y}0#^xm<xnk?&>PK<(qqsgt z7so=sfO(?-;eYo(?%;O^+gqC~>*M{~?B)8^hJW$DX4$U1un{9R;`^+(^1O59G|sxl z5k{%Vc-K{4<4un@8vxoXfH$^m&zslFGjW$NCLuM(YA`qwPd-jWi2e~3C84aJ>ak2% z7-uM3B55tgq7uV7J$QFq^`Q^5(-XMGI#@{vR0nZw#v&QQB1kon_n1U5p@d&1Cv9n3 l#1itr5Wr!WH=Xm^>#4<yxSq+{?@}k*VwH3L$#&yf4nH=xQV0M5 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-314.pyc deleted file mode 100644 index 0cb6ff0299f73c1b08822f4dd5a6f9e98bc380da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25430 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-314.pyc deleted file mode 100644 index 146091c68c13f85824556e266ac182c3f169550e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50323 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 S%RPl3P81V~e}7P0`~P1xrh9b& diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-314.pyc deleted file mode 100644 index 4a2cef0e6f8bf52a62e788de25e6f7c8fc79ef89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15943 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 T`m9hR0A6k}T<-7Jfy4g-Z{2VI diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/collector.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/collector.py deleted file mode 100644 index a9a8dde8b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/collector.py +++ /dev/null @@ -1,488 +0,0 @@ -""" -The main purpose of this module is to expose LinkCollector.collect_sources(). -""" - -from __future__ import annotations - -import collections -import email.message -import functools -import itertools -import json -import logging -import os -import urllib.parse -from collections.abc import Iterable, MutableMapping, Sequence -from dataclasses import dataclass -from html.parser import HTMLParser -from optparse import Values -from typing import ( - Callable, - NamedTuple, - Protocol, -) - -from pip._vendor import requests -from pip._vendor.requests import Response -from pip._vendor.requests.exceptions import RetryError, SSLError - -from pip._internal.exceptions import NetworkConnectionError -from pip._internal.models.link import Link -from pip._internal.models.search_scope import SearchScope -from pip._internal.network.session import PipSession -from pip._internal.network.utils import raise_for_status -from pip._internal.utils.filetypes import is_archive_file -from pip._internal.utils.misc import redact_auth_from_url -from pip._internal.utils.urls import url_to_path -from pip._internal.vcs import vcs - -from .sources import CandidatesFromPage, LinkSource, build_source - -logger = logging.getLogger(__name__) - -ResponseHeaders = MutableMapping[str, str] - - -def _match_vcs_scheme(url: str) -> str | None: - """Look for VCS schemes in the URL. - - Returns the matched VCS scheme, or None if there's no match. - """ - for scheme in vcs.schemes: - if url.lower().startswith(scheme) and url[len(scheme)] in "+:": - return scheme - return None - - -class _NotAPIContent(Exception): - def __init__(self, content_type: str, request_desc: str) -> None: - super().__init__(content_type, request_desc) - self.content_type = content_type - self.request_desc = request_desc - - -def _ensure_api_header(response: Response) -> None: - """ - Check the Content-Type header to ensure the response contains a Simple - API Response. - - Raises `_NotAPIContent` if the content type is not a valid content-type. - """ - content_type = response.headers.get("Content-Type", "Unknown") - - content_type_l = content_type.lower() - if content_type_l.startswith( - ( - "text/html", - "application/vnd.pypi.simple.v1+html", - "application/vnd.pypi.simple.v1+json", - ) - ): - return - - raise _NotAPIContent(content_type, response.request.method) - - -class _NotHTTP(Exception): - pass - - -def _ensure_api_response(url: str, session: PipSession) -> None: - """ - Send a HEAD request to the URL, and ensure the response contains a simple - API Response. - - Raises `_NotHTTP` if the URL is not available for a HEAD request, or - `_NotAPIContent` if the content type is not a valid content type. - """ - scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url) - if scheme not in {"http", "https"}: - raise _NotHTTP() - - resp = session.head(url, allow_redirects=True) - raise_for_status(resp) - - _ensure_api_header(resp) - - -def _get_simple_response(url: str, session: PipSession) -> Response: - """Access an Simple API response with GET, and return the response. - - This consists of three parts: - - 1. If the URL looks suspiciously like an archive, send a HEAD first to - check the Content-Type is HTML or Simple API, to avoid downloading a - large file. Raise `_NotHTTP` if the content type cannot be determined, or - `_NotAPIContent` if it is not HTML or a Simple API. - 2. Actually perform the request. Raise HTTP exceptions on network failures. - 3. Check the Content-Type header to make sure we got a Simple API response, - and raise `_NotAPIContent` otherwise. - """ - if is_archive_file(Link(url).filename): - _ensure_api_response(url, session=session) - - logger.debug("Getting page %s", redact_auth_from_url(url)) - - resp = session.get( - url, - headers={ - "Accept": ", ".join( - [ - "application/vnd.pypi.simple.v1+json", - "application/vnd.pypi.simple.v1+html; q=0.1", - "text/html; q=0.01", - ] - ), - # We don't want to blindly returned cached data for - # /simple/, because authors generally expecting that - # twine upload && pip install will function, but if - # they've done a pip install in the last ~10 minutes - # it won't. Thus by setting this to zero we will not - # blindly use any cached data, however the benefit of - # using max-age=0 instead of no-cache, is that we will - # still support conditional requests, so we will still - # minimize traffic sent in cases where the page hasn't - # changed at all, we will just always incur the round - # trip for the conditional GET now instead of only - # once per 10 minutes. - # For more information, please see pypa/pip#5670. - "Cache-Control": "max-age=0", - }, - ) - raise_for_status(resp) - - # The check for archives above only works if the url ends with - # something that looks like an archive. However that is not a - # requirement of an url. Unless we issue a HEAD request on every - # url we cannot know ahead of time for sure if something is a - # Simple API response or not. However we can check after we've - # downloaded it. - _ensure_api_header(resp) - - logger.debug( - "Fetched page %s as %s", - redact_auth_from_url(url), - resp.headers.get("Content-Type", "Unknown"), - ) - - return resp - - -def _get_encoding_from_headers(headers: ResponseHeaders) -> str | None: - """Determine if we have any encoding information in our headers.""" - if headers and "Content-Type" in headers: - m = email.message.Message() - m["content-type"] = headers["Content-Type"] - charset = m.get_param("charset") - if charset: - return str(charset) - return None - - -class CacheablePageContent: - def __init__(self, page: IndexContent) -> None: - assert page.cache_link_parsing - self.page = page - - def __eq__(self, other: object) -> bool: - return isinstance(other, type(self)) and self.page.url == other.page.url - - def __hash__(self) -> int: - return hash(self.page.url) - - -class ParseLinks(Protocol): - def __call__(self, page: IndexContent) -> Iterable[Link]: ... - - -def with_cached_index_content(fn: ParseLinks) -> ParseLinks: - """ - Given a function that parses an Iterable[Link] from an IndexContent, cache the - function's result (keyed by CacheablePageContent), unless the IndexContent - `page` has `page.cache_link_parsing == False`. - """ - - @functools.cache - def wrapper(cacheable_page: CacheablePageContent) -> list[Link]: - return list(fn(cacheable_page.page)) - - @functools.wraps(fn) - def wrapper_wrapper(page: IndexContent) -> list[Link]: - if page.cache_link_parsing: - return wrapper(CacheablePageContent(page)) - return list(fn(page)) - - return wrapper_wrapper - - -@with_cached_index_content -def parse_links(page: IndexContent) -> Iterable[Link]: - """ - Parse a Simple API's Index Content, and yield its anchor elements as Link objects. - """ - - content_type_l = page.content_type.lower() - if content_type_l.startswith("application/vnd.pypi.simple.v1+json"): - data = json.loads(page.content) - for file in data.get("files", []): - link = Link.from_json(file, page.url) - if link is None: - continue - yield link - return - - parser = HTMLLinkParser(page.url) - encoding = page.encoding or "utf-8" - parser.feed(page.content.decode(encoding)) - - url = page.url - base_url = parser.base_url or url - for anchor in parser.anchors: - link = Link.from_element(anchor, page_url=url, base_url=base_url) - if link is None: - continue - yield link - - -@dataclass(frozen=True) -class IndexContent: - """Represents one response (or page), along with its URL. - - :param encoding: the encoding to decode the given content. - :param url: the URL from which the HTML was downloaded. - :param cache_link_parsing: whether links parsed from this page's url - should be cached. PyPI index urls should - have this set to False, for example. - """ - - content: bytes - content_type: str - encoding: str | None - url: str - cache_link_parsing: bool = True - - def __str__(self) -> str: - return redact_auth_from_url(self.url) - - -class HTMLLinkParser(HTMLParser): - """ - HTMLParser that keeps the first base HREF and a list of all anchor - elements' attributes. - """ - - def __init__(self, url: str) -> None: - super().__init__(convert_charrefs=True) - - self.url: str = url - self.base_url: str | None = None - self.anchors: list[dict[str, str | None]] = [] - - def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: - if tag == "base" and self.base_url is None: - href = self.get_href(attrs) - if href is not None: - self.base_url = href - elif tag == "a": - self.anchors.append(dict(attrs)) - - def get_href(self, attrs: list[tuple[str, str | None]]) -> str | None: - for name, value in attrs: - if name == "href": - return value - return None - - -def _handle_get_simple_fail( - link: Link, - reason: str | Exception, - meth: Callable[..., None] | None = None, -) -> None: - if meth is None: - meth = logger.debug - meth("Could not fetch URL %s: %s - skipping", link, reason) - - -def _make_index_content( - response: Response, cache_link_parsing: bool = True -) -> IndexContent: - encoding = _get_encoding_from_headers(response.headers) - return IndexContent( - response.content, - response.headers["Content-Type"], - encoding=encoding, - url=response.url, - cache_link_parsing=cache_link_parsing, - ) - - -def _get_index_content(link: Link, *, session: PipSession) -> IndexContent | None: - url = link.url.split("#", 1)[0] - - # Check for VCS schemes that do not support lookup as web pages. - vcs_scheme = _match_vcs_scheme(url) - if vcs_scheme: - logger.warning( - "Cannot look at %s URL %s because it does not support lookup as web pages.", - vcs_scheme, - link, - ) - return None - - # Tack index.html onto file:// URLs that point to directories - if url.startswith("file:") and os.path.isdir(url_to_path(url)): - # add trailing slash if not present so urljoin doesn't trim - # final segment - if not url.endswith("/"): - url += "/" - # TODO: In the future, it would be nice if pip supported PEP 691 - # style responses in the file:// URLs, however there's no - # standard file extension for application/vnd.pypi.simple.v1+json - # so we'll need to come up with something on our own. - url = urllib.parse.urljoin(url, "index.html") - logger.debug(" file: URL is directory, getting %s", url) - - try: - resp = _get_simple_response(url, session=session) - except _NotHTTP: - logger.warning( - "Skipping page %s because it looks like an archive, and cannot " - "be checked by a HTTP HEAD request.", - link, - ) - except _NotAPIContent as exc: - logger.warning( - "Skipping page %s because the %s request got Content-Type: %s. " - "The only supported Content-Types are application/vnd.pypi.simple.v1+json, " - "application/vnd.pypi.simple.v1+html, and text/html", - link, - exc.request_desc, - exc.content_type, - ) - except NetworkConnectionError as exc: - _handle_get_simple_fail(link, exc) - except RetryError as exc: - _handle_get_simple_fail(link, exc) - except SSLError as exc: - reason = "There was a problem confirming the ssl certificate: " - reason += str(exc) - _handle_get_simple_fail(link, reason, meth=logger.info) - except requests.ConnectionError as exc: - _handle_get_simple_fail(link, f"connection error: {exc}") - except requests.Timeout: - _handle_get_simple_fail(link, "timed out") - else: - return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing) - return None - - -class CollectedSources(NamedTuple): - find_links: Sequence[LinkSource | None] - index_urls: Sequence[LinkSource | None] - - -class LinkCollector: - """ - Responsible for collecting Link objects from all configured locations, - making network requests as needed. - - The class's main method is its collect_sources() method. - """ - - def __init__( - self, - session: PipSession, - search_scope: SearchScope, - ) -> None: - self.search_scope = search_scope - self.session = session - - @classmethod - def create( - cls, - session: PipSession, - options: Values, - suppress_no_index: bool = False, - ) -> LinkCollector: - """ - :param session: The Session to use to make requests. - :param suppress_no_index: Whether to ignore the --no-index option - when constructing the SearchScope object. - """ - index_urls = [options.index_url] + options.extra_index_urls - if options.no_index and not suppress_no_index: - logger.debug( - "Ignoring indexes: %s", - ",".join(redact_auth_from_url(url) for url in index_urls), - ) - index_urls = [] - - # Make sure find_links is a list before passing to create(). - find_links = options.find_links or [] - - search_scope = SearchScope.create( - find_links=find_links, - index_urls=index_urls, - no_index=options.no_index, - ) - link_collector = LinkCollector( - session=session, - search_scope=search_scope, - ) - return link_collector - - @property - def find_links(self) -> list[str]: - return self.search_scope.find_links - - def fetch_response(self, location: Link) -> IndexContent | None: - """ - Fetch an HTML page containing package links. - """ - return _get_index_content(location, session=self.session) - - def collect_sources( - self, - project_name: str, - candidates_from_page: CandidatesFromPage, - ) -> CollectedSources: - # The OrderedDict calls deduplicate sources by URL. - index_url_sources = collections.OrderedDict( - build_source( - loc, - candidates_from_page=candidates_from_page, - page_validator=self.session.is_secure_origin, - expand_dir=False, - cache_link_parsing=False, - project_name=project_name, - ) - for loc in self.search_scope.get_index_urls_locations(project_name) - ).values() - find_links_sources = collections.OrderedDict( - build_source( - loc, - candidates_from_page=candidates_from_page, - page_validator=self.session.is_secure_origin, - expand_dir=True, - cache_link_parsing=True, - project_name=project_name, - ) - for loc in self.find_links - ).values() - - if logger.isEnabledFor(logging.DEBUG): - lines = [ - f"* {s.link}" - for s in itertools.chain(find_links_sources, index_url_sources) - if s is not None and s.link is not None - ] - lines = [ - f"{len(lines)} location(s) to search " - f"for versions of {project_name}:" - ] + lines - logger.debug("\n".join(lines)) - - return CollectedSources( - find_links=list(find_links_sources), - index_urls=list(index_url_sources), - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/package_finder.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/package_finder.py deleted file mode 100644 index aa7c2ebd4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/package_finder.py +++ /dev/null @@ -1,1125 +0,0 @@ -"""Routines related to PyPI, indexes""" - -from __future__ import annotations - -import datetime -import enum -import functools -import itertools -import logging -import re -from collections.abc import Iterable -from dataclasses import dataclass -from typing import ( - TYPE_CHECKING, - Optional, - Union, -) - -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.tags import Tag -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import InvalidVersion, Version, _BaseVersion -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, - DistributionNotFound, - InstallationError, - InvalidWheelFilename, - UnsupportedWheel, -) -from pip._internal.index.collector import LinkCollector, parse_links -from pip._internal.metadata import select_backend -from pip._internal.models.candidate import InstallationCandidate -from pip._internal.models.format_control import FormatControl -from pip._internal.models.link import Link -from pip._internal.models.release_control import ReleaseControl -from pip._internal.models.search_scope import SearchScope -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.models.target_python import TargetPython -from pip._internal.models.wheel import Wheel -from pip._internal.req import InstallRequirement -from pip._internal.utils._log import getLogger -from pip._internal.utils.filetypes import WHEEL_EXTENSION -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import build_netloc -from pip._internal.utils.packaging import check_requires_python -from pip._internal.utils.unpacking import SUPPORTED_EXTENSIONS - -if TYPE_CHECKING: - from typing_extensions import TypeGuard - -__all__ = ["FormatControl", "BestCandidateResult", "PackageFinder"] - - -logger = getLogger(__name__) - -BuildTag = Union[tuple[()], tuple[int, str]] -CandidateSortingKey = tuple[int, int, int, _BaseVersion, Optional[int], BuildTag] - - -def _check_link_requires_python( - link: Link, - version_info: tuple[int, int, int], - ignore_requires_python: bool = False, -) -> bool: - """ - Return whether the given Python version is compatible with a link's - "Requires-Python" value. - - :param version_info: A 3-tuple of ints representing the Python - major-minor-micro version to check. - :param ignore_requires_python: Whether to ignore the "Requires-Python" - value if the given Python version isn't compatible. - """ - try: - is_compatible = check_requires_python( - link.requires_python, - version_info=version_info, - ) - except specifiers.InvalidSpecifier: - logger.debug( - "Ignoring invalid Requires-Python (%r) for link: %s", - link.requires_python, - link, - ) - else: - if not is_compatible: - version = ".".join(map(str, version_info)) - if not ignore_requires_python: - logger.verbose( - "Link requires a different Python (%s not in: %r): %s", - version, - link.requires_python, - link, - ) - return False - - logger.debug( - "Ignoring failed Requires-Python check (%s not in: %r) for link: %s", - version, - link.requires_python, - link, - ) - - return True - - -class LinkType(enum.Enum): - candidate = enum.auto() - different_project = enum.auto() - yanked = enum.auto() - format_unsupported = enum.auto() - format_invalid = enum.auto() - platform_mismatch = enum.auto() - requires_python_mismatch = enum.auto() - upload_too_late = enum.auto() - upload_time_missing = enum.auto() - - -class LinkEvaluator: - """ - Responsible for evaluating links for a particular project. - """ - - _py_version_re = re.compile(r"-py([123]\.?[0-9]?)$") - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - def __init__( - self, - project_name: str, - canonical_name: NormalizedName, - formats: frozenset[str], - target_python: TargetPython, - allow_yanked: bool, - ignore_requires_python: bool | None = None, - uploaded_prior_to: datetime.datetime | None = None, - ) -> None: - """ - :param project_name: The user supplied package name. - :param canonical_name: The canonical package name. - :param formats: The formats allowed for this package. Should be a set - with 'binary' or 'source' or both in it. - :param target_python: The target Python interpreter to use when - evaluating link compatibility. This is used, for example, to - check wheel compatibility, as well as when checking the Python - version, e.g. the Python version embedded in a link filename - (or egg fragment) and against an HTML link's optional PEP 503 - "data-requires-python" attribute. - :param allow_yanked: Whether files marked as yanked (in the sense - of PEP 592) are permitted to be candidates for install. - :param ignore_requires_python: Whether to ignore incompatible - PEP 503 "data-requires-python" values in HTML links. Defaults - to False. - :param uploaded_prior_to: If set, only allow links uploaded prior to - the given datetime. - """ - if ignore_requires_python is None: - ignore_requires_python = False - - self._allow_yanked = allow_yanked - self._canonical_name = canonical_name - self._ignore_requires_python = ignore_requires_python - self._formats = formats - self._target_python = target_python - self._uploaded_prior_to = uploaded_prior_to - - self.project_name = project_name - - def evaluate_link(self, link: Link) -> tuple[LinkType, str]: - """ - Determine whether a link is a candidate for installation. - - :return: A tuple (result, detail), where *result* is an enum - representing whether the evaluation found a candidate, or the reason - why one is not found. If a candidate is found, *detail* will be the - candidate's version string; if one is not found, it contains the - reason the link fails to qualify. - """ - version = None - if link.is_yanked and not self._allow_yanked: - reason = link.yanked_reason or "<none given>" - return (LinkType.yanked, f"yanked for reason: {reason}") - - if link.egg_fragment: - egg_info = link.egg_fragment - ext = link.ext - else: - egg_info, ext = link.splitext() - if not ext: - return (LinkType.format_unsupported, "not a file") - if ext not in SUPPORTED_EXTENSIONS: - return ( - LinkType.format_unsupported, - f"unsupported archive format: {ext}", - ) - if "binary" not in self._formats and ext == WHEEL_EXTENSION: - reason = f"No binaries permitted for {self.project_name}" - return (LinkType.format_unsupported, reason) - if "macosx10" in link.path and ext == ".zip": - return (LinkType.format_unsupported, "macosx10 one") - if ext == WHEEL_EXTENSION: - try: - wheel = Wheel(link.filename) - except InvalidWheelFilename: - return ( - LinkType.format_invalid, - "invalid wheel filename", - ) - if wheel.name != self._canonical_name: - reason = f"wrong project name (not {self.project_name})" - return (LinkType.different_project, reason) - - supported_tags = self._target_python.get_unsorted_tags() - if not wheel.supported(supported_tags): - # Include the wheel's tags in the reason string to - # simplify troubleshooting compatibility issues. - file_tags = ", ".join(wheel.get_formatted_file_tags()) - reason = ( - f"none of the wheel's tags ({file_tags}) are compatible " - f"(run pip debug --verbose to show compatible tags)" - ) - return (LinkType.platform_mismatch, reason) - - version = wheel.version - - # Check upload-time filter after verifying the link is a package file. - # Skip this check for local files, as --uploaded-prior-to only applies - # to packages from indexes. - if self._uploaded_prior_to is not None and not link.is_file: - if link.upload_time is None: - if link.comes_from: - index_info = f"Index {link.comes_from}" - else: - index_info = "Index" - - return ( - LinkType.upload_time_missing, - f"{index_info} does not provide upload-time metadata.", - ) - elif link.upload_time >= self._uploaded_prior_to: - return ( - LinkType.upload_too_late, - f"Upload time {link.upload_time} not " - f"prior to {self._uploaded_prior_to}", - ) - - # This should be up by the self.ok_binary check, but see issue 2700. - if "source" not in self._formats and ext != WHEEL_EXTENSION: - reason = f"No sources permitted for {self.project_name}" - return (LinkType.format_unsupported, reason) - - if not version: - version = _extract_version_from_fragment( - egg_info, - self._canonical_name, - ) - if not version: - reason = f"Missing project version for {self.project_name}" - return (LinkType.format_invalid, reason) - - match = self._py_version_re.search(version) - if match: - version = version[: match.start()] - py_version = match.group(1) - if py_version != self._target_python.py_version: - return ( - LinkType.platform_mismatch, - "Python version is incorrect", - ) - - supports_python = _check_link_requires_python( - link, - version_info=self._target_python.py_version_info, - ignore_requires_python=self._ignore_requires_python, - ) - if not supports_python: - requires_python = link.requires_python - if requires_python: - - def get_version_sort_key(v: str) -> tuple[int, ...]: - return tuple(int(s) for s in v.split(".") if s.isdigit()) - - requires_python = ",".join( - sorted( - (str(s) for s in specifiers.SpecifierSet(requires_python)), - key=get_version_sort_key, - ) - ) - reason = f"{version} Requires-Python {requires_python}" - return (LinkType.requires_python_mismatch, reason) - - logger.debug("Found link %s, version: %s", link, version) - - return (LinkType.candidate, version) - - -def filter_unallowed_hashes( - candidates: list[InstallationCandidate], - hashes: Hashes | None, - project_name: str, -) -> list[InstallationCandidate]: - """ - Filter out candidates whose hashes aren't allowed, and return a new - list of candidates. - - If at least one candidate has an allowed hash, then all candidates with - either an allowed hash or no hash specified are returned. Otherwise, - the given candidates are returned. - - Including the candidates with no hash specified when there is a match - allows a warning to be logged if there is a more preferred candidate - with no hash specified. Returning all candidates in the case of no - matches lets pip report the hash of the candidate that would otherwise - have been installed (e.g. permitting the user to more easily update - their requirements file with the desired hash). - """ - if not hashes: - logger.debug( - "Given no hashes to check %s links for project %r: " - "discarding no candidates", - len(candidates), - project_name, - ) - # Make sure we're not returning back the given value. - return list(candidates) - - matches_or_no_digest = [] - # Collect the non-matches for logging purposes. - non_matches = [] - match_count = 0 - for candidate in candidates: - link = candidate.link - if not link.has_hash: - pass - elif link.is_hash_allowed(hashes=hashes): - match_count += 1 - else: - non_matches.append(candidate) - continue - - matches_or_no_digest.append(candidate) - - if match_count: - filtered = matches_or_no_digest - else: - # Make sure we're not returning back the given value. - filtered = list(candidates) - - if len(filtered) == len(candidates): - discard_message = "discarding no candidates" - else: - discard_message = "discarding {} non-matches:\n {}".format( - len(non_matches), - "\n ".join(str(candidate.link) for candidate in non_matches), - ) - - logger.debug( - "Checked %s links for project %r against %s hashes " - "(%s matches, %s no digest): %s", - len(candidates), - project_name, - hashes.digest_count, - match_count, - len(matches_or_no_digest) - match_count, - discard_message, - ) - - return filtered - - -@dataclass -class CandidatePreferences: - """ - Encapsulates some of the preferences for filtering and sorting - InstallationCandidate objects. - """ - - prefer_binary: bool = False - release_control: ReleaseControl | None = None - - -@dataclass(frozen=True) -class BestCandidateResult: - """A collection of candidates, returned by `PackageFinder.find_best_candidate`. - - This class is only intended to be instantiated by CandidateEvaluator's - `compute_best_candidate()` method. - - :param all_candidates: A sequence of all available candidates found. - :param applicable_candidates: The applicable candidates. - :param best_candidate: The most preferred candidate found, or None - if no applicable candidates were found. - """ - - all_candidates: list[InstallationCandidate] - applicable_candidates: list[InstallationCandidate] - best_candidate: InstallationCandidate | None - - def __post_init__(self) -> None: - assert set(self.applicable_candidates) <= set(self.all_candidates) - - if self.best_candidate is None: - assert not self.applicable_candidates - else: - assert self.best_candidate in self.applicable_candidates - - -class CandidateEvaluator: - """ - Responsible for filtering and sorting candidates for installation based - on what tags are valid. - """ - - @classmethod - def create( - cls, - project_name: str, - target_python: TargetPython | None = None, - prefer_binary: bool = False, - release_control: ReleaseControl | None = None, - specifier: specifiers.BaseSpecifier | None = None, - hashes: Hashes | None = None, - ) -> CandidateEvaluator: - """Create a CandidateEvaluator object. - - :param target_python: The target Python interpreter to use when - checking compatibility. If None (the default), a TargetPython - object will be constructed from the running Python. - :param specifier: An optional object implementing `filter` - (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable - versions. - :param hashes: An optional collection of allowed hashes. - """ - if target_python is None: - target_python = TargetPython() - if specifier is None: - specifier = specifiers.SpecifierSet() - - supported_tags = target_python.get_sorted_tags() - - return cls( - project_name=project_name, - supported_tags=supported_tags, - specifier=specifier, - prefer_binary=prefer_binary, - release_control=release_control, - hashes=hashes, - ) - - def __init__( - self, - project_name: str, - supported_tags: list[Tag], - specifier: specifiers.BaseSpecifier, - prefer_binary: bool = False, - release_control: ReleaseControl | None = None, - hashes: Hashes | None = None, - ) -> None: - """ - :param supported_tags: The PEP 425 tags supported by the target - Python in order of preference (most preferred first). - """ - self._release_control = release_control - self._hashes = hashes - self._prefer_binary = prefer_binary - self._project_name = project_name - self._specifier = specifier - self._supported_tags = supported_tags - # Since the index of the tag in the _supported_tags list is used - # as a priority, precompute a map from tag to index/priority to be - # used in wheel.find_most_preferred_tag. - self._wheel_tag_preferences = { - tag: idx for idx, tag in enumerate(supported_tags) - } - - def get_applicable_candidates( - self, - candidates: list[InstallationCandidate], - ) -> list[InstallationCandidate]: - """ - Return the applicable candidates from a list of candidates. - """ - # Using None infers from the specifier instead. - if self._release_control is not None: - allow_prereleases = self._release_control.allows_prereleases( - canonicalize_name(self._project_name) - ) - else: - allow_prereleases = None - specifier = self._specifier - - # When using the pkg_resources backend we turn the version object into - # a str here because otherwise when we're debundled but setuptools isn't, - # Python will see packaging.version.Version and - # pkg_resources._vendor.packaging.version.Version as different - # types. This way we'll use a str as a common data interchange - # format. If we stop using the pkg_resources provided specifier - # and start using our own, we can drop the cast to str(). - if select_backend().NAME == "pkg_resources": - candidates_and_versions: list[ - tuple[InstallationCandidate, str | Version] - ] = [(c, str(c.version)) for c in candidates] - else: - candidates_and_versions = [(c, c.version) for c in candidates] - versions = set( - specifier.filter( - (v for _, v in candidates_and_versions), - prereleases=allow_prereleases, - ) - ) - - applicable_candidates = [c for c, v in candidates_and_versions if v in versions] - filtered_applicable_candidates = filter_unallowed_hashes( - candidates=applicable_candidates, - hashes=self._hashes, - project_name=self._project_name, - ) - - return sorted(filtered_applicable_candidates, key=self._sort_key) - - def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey: - """ - Function to pass as the `key` argument to a call to sorted() to sort - InstallationCandidates by preference. - - Returns a tuple such that tuples sorting as greater using Python's - default comparison operator are more preferred. - - The preference is as follows: - - First and foremost, candidates with allowed (matching) hashes are - always preferred over candidates without matching hashes. This is - because e.g. if the only candidate with an allowed hash is yanked, - we still want to use that candidate. - - Second, excepting hash considerations, candidates that have been - yanked (in the sense of PEP 592) are always less preferred than - candidates that haven't been yanked. Then: - - If not finding wheels, they are sorted by version only. - If finding wheels, then the sort order is by version, then: - 1. existing installs - 2. wheels ordered via Wheel.support_index_min(self._supported_tags) - 3. source archives - If prefer_binary was set, then all wheels are sorted above sources. - - Note: it was considered to embed this logic into the Link - comparison operators, but then different sdist links - with the same version, would have to be considered equal - """ - valid_tags = self._supported_tags - support_num = len(valid_tags) - build_tag: BuildTag = () - binary_preference = 0 - link = candidate.link - if link.is_wheel: - # can raise InvalidWheelFilename - wheel = Wheel(link.filename) - try: - pri = -( - wheel.find_most_preferred_tag( - valid_tags, self._wheel_tag_preferences - ) - ) - except ValueError: - raise UnsupportedWheel( - f"{wheel.filename} is not a supported wheel for this platform. It " - "can't be sorted." - ) - if self._prefer_binary: - binary_preference = 1 - build_tag = wheel.build_tag - else: # sdist - pri = -(support_num) - has_allowed_hash = int(link.is_hash_allowed(self._hashes)) - yank_value = -1 * int(link.is_yanked) # -1 for yanked. - return ( - has_allowed_hash, - yank_value, - binary_preference, - candidate.version, - pri, - build_tag, - ) - - def sort_best_candidate( - self, - candidates: list[InstallationCandidate], - ) -> InstallationCandidate | None: - """ - Return the best candidate per the instance's sort order, or None if - no candidate is acceptable. - """ - if not candidates: - return None - best_candidate = max(candidates, key=self._sort_key) - return best_candidate - - def compute_best_candidate( - self, - candidates: list[InstallationCandidate], - ) -> BestCandidateResult: - """ - Compute and return a `BestCandidateResult` instance. - """ - applicable_candidates = self.get_applicable_candidates(candidates) - - best_candidate = self.sort_best_candidate(applicable_candidates) - - return BestCandidateResult( - candidates, - applicable_candidates=applicable_candidates, - best_candidate=best_candidate, - ) - - -class PackageFinder: - """This finds packages. - - This is meant to match easy_install's technique for looking for - packages, by reading pages and looking for appropriate links. - """ - - def __init__( - self, - link_collector: LinkCollector, - target_python: TargetPython, - allow_yanked: bool, - format_control: FormatControl | None = None, - candidate_prefs: CandidatePreferences | None = None, - ignore_requires_python: bool | None = None, - uploaded_prior_to: datetime.datetime | None = None, - ) -> None: - """ - This constructor is primarily meant to be used by the create() class - method and from tests. - - :param format_control: A FormatControl object, used to control - the selection of source packages / binary packages when consulting - the index and links. - :param candidate_prefs: Options to use when creating a - CandidateEvaluator object. - """ - if candidate_prefs is None: - candidate_prefs = CandidatePreferences() - - format_control = format_control or FormatControl(set(), set()) - - self._allow_yanked = allow_yanked - self._candidate_prefs = candidate_prefs - self._ignore_requires_python = ignore_requires_python - self._link_collector = link_collector - self._target_python = target_python - self._uploaded_prior_to = uploaded_prior_to - - self.format_control = format_control - - # These are boring links that have already been logged somehow. - self._logged_links: set[tuple[Link, LinkType, str]] = set() - - # Cache of the result of finding candidates - self._all_candidates: dict[str, list[InstallationCandidate]] = {} - self._best_candidates: dict[ - tuple[str, specifiers.BaseSpecifier | None, Hashes | None], - BestCandidateResult, - ] = {} - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - @classmethod - def create( - cls, - link_collector: LinkCollector, - selection_prefs: SelectionPreferences, - target_python: TargetPython | None = None, - uploaded_prior_to: datetime.datetime | None = None, - ) -> PackageFinder: - """Create a PackageFinder. - - :param selection_prefs: The candidate selection preferences, as a - SelectionPreferences object. - :param target_python: The target Python interpreter to use when - checking compatibility. If None (the default), a TargetPython - object will be constructed from the running Python. - :param uploaded_prior_to: If set, only find links uploaded prior - to the given datetime. - """ - if target_python is None: - target_python = TargetPython() - - candidate_prefs = CandidatePreferences( - prefer_binary=selection_prefs.prefer_binary, - release_control=selection_prefs.release_control, - ) - - return cls( - candidate_prefs=candidate_prefs, - link_collector=link_collector, - target_python=target_python, - allow_yanked=selection_prefs.allow_yanked, - format_control=selection_prefs.format_control, - ignore_requires_python=selection_prefs.ignore_requires_python, - uploaded_prior_to=uploaded_prior_to, - ) - - @property - def target_python(self) -> TargetPython: - return self._target_python - - @property - def search_scope(self) -> SearchScope: - return self._link_collector.search_scope - - @search_scope.setter - def search_scope(self, search_scope: SearchScope) -> None: - self._link_collector.search_scope = search_scope - - @property - def find_links(self) -> list[str]: - return self._link_collector.find_links - - @property - def index_urls(self) -> list[str]: - return self.search_scope.index_urls - - @property - def proxy(self) -> str | None: - return self._link_collector.session.pip_proxy - - @property - def trusted_hosts(self) -> Iterable[str]: - for host_port in self._link_collector.session.pip_trusted_origins: - yield build_netloc(*host_port) - - @property - def custom_cert(self) -> str | None: - # session.verify is either a boolean (use default bundle/no SSL - # verification) or a string path to a custom CA bundle to use. We only - # care about the latter. - verify = self._link_collector.session.verify - return verify if isinstance(verify, str) else None - - @property - def client_cert(self) -> str | None: - cert = self._link_collector.session.cert - assert not isinstance(cert, tuple), "pip only supports PEM client certs" - return cert - - @property - def release_control(self) -> ReleaseControl | None: - return self._candidate_prefs.release_control - - def set_release_control(self, release_control: ReleaseControl) -> None: - self._candidate_prefs.release_control = release_control - - @property - def prefer_binary(self) -> bool: - return self._candidate_prefs.prefer_binary - - def set_prefer_binary(self) -> None: - self._candidate_prefs.prefer_binary = True - - @property - def uploaded_prior_to(self) -> datetime.datetime | None: - return self._uploaded_prior_to - - def requires_python_skipped_reasons(self) -> list[str]: - reasons = { - detail - for _, result, detail in self._logged_links - if result == LinkType.requires_python_mismatch - } - return sorted(reasons) - - def make_link_evaluator(self, project_name: str) -> LinkEvaluator: - canonical_name = canonicalize_name(project_name) - formats = self.format_control.get_allowed_formats(canonical_name) - - return LinkEvaluator( - project_name=project_name, - canonical_name=canonical_name, - formats=formats, - target_python=self._target_python, - allow_yanked=self._allow_yanked, - ignore_requires_python=self._ignore_requires_python, - uploaded_prior_to=self._uploaded_prior_to, - ) - - def _sort_links(self, links: Iterable[Link]) -> list[Link]: - """ - Returns elements of links in order, non-egg links first, egg links - second, while eliminating duplicates - """ - eggs, no_eggs = [], [] - seen: set[Link] = set() - for link in links: - if link not in seen: - seen.add(link) - if link.egg_fragment: - eggs.append(link) - else: - no_eggs.append(link) - return no_eggs + eggs - - def _log_skipped_link(self, link: Link, result: LinkType, detail: str) -> None: - entry = (link, result, detail) - if entry not in self._logged_links: - # Put the link at the end so the reason is more visible and because - # the link string is usually very long. - logger.debug("Skipping link: %s: %s", detail, link) - self._logged_links.add(entry) - - def get_install_candidate( - self, link_evaluator: LinkEvaluator, link: Link - ) -> InstallationCandidate | None: - """ - If the link is a candidate for install, convert it to an - InstallationCandidate and return it. Otherwise, return None. - """ - result, detail = link_evaluator.evaluate_link(link) - if result == LinkType.upload_time_missing: - # Fail immediately if the index doesn't provide upload-time - # when --uploaded-prior-to is specified - raise InstallationError(detail) - if result != LinkType.candidate: - self._log_skipped_link(link, result, detail) - return None - - try: - return InstallationCandidate( - name=link_evaluator.project_name, - link=link, - version=detail, - ) - except InvalidVersion: - return None - - def evaluate_links( - self, link_evaluator: LinkEvaluator, links: Iterable[Link] - ) -> list[InstallationCandidate]: - """ - Convert links that are candidates to InstallationCandidate objects. - """ - candidates = [] - for link in self._sort_links(links): - candidate = self.get_install_candidate(link_evaluator, link) - if candidate is not None: - candidates.append(candidate) - - return candidates - - def process_project_url( - self, project_url: Link, link_evaluator: LinkEvaluator - ) -> list[InstallationCandidate]: - logger.debug( - "Fetching project page and analyzing links: %s", - project_url, - ) - index_response = self._link_collector.fetch_response(project_url) - if index_response is None: - return [] - - page_links = list(parse_links(index_response)) - - with indent_log(): - package_links = self.evaluate_links( - link_evaluator, - links=page_links, - ) - - return package_links - - def find_all_candidates(self, project_name: str) -> list[InstallationCandidate]: - """Find all available InstallationCandidate for project_name - - This checks index_urls and find_links. - All versions found are returned as an InstallationCandidate list. - - See LinkEvaluator.evaluate_link() for details on which files - are accepted. - """ - if project_name in self._all_candidates: - return self._all_candidates[project_name] - - link_evaluator = self.make_link_evaluator(project_name) - - collected_sources = self._link_collector.collect_sources( - project_name=project_name, - candidates_from_page=functools.partial( - self.process_project_url, - link_evaluator=link_evaluator, - ), - ) - - page_candidates_it = itertools.chain.from_iterable( - source.page_candidates() - for sources in collected_sources - for source in sources - if source is not None - ) - page_candidates = list(page_candidates_it) - - file_links_it = itertools.chain.from_iterable( - source.file_links() - for sources in collected_sources - for source in sources - if source is not None - ) - file_candidates = self.evaluate_links( - link_evaluator, - sorted(file_links_it, reverse=True), - ) - - if logger.isEnabledFor(logging.DEBUG) and file_candidates: - paths = [] - for candidate in file_candidates: - assert candidate.link.url # we need to have a URL - try: - paths.append(candidate.link.file_path) - except Exception: - paths.append(candidate.link.url) # it's not a local file - - logger.debug("Local files found: %s", ", ".join(paths)) - - # This is an intentional priority ordering - self._all_candidates[project_name] = file_candidates + page_candidates - - return self._all_candidates[project_name] - - def make_candidate_evaluator( - self, - project_name: str, - specifier: specifiers.BaseSpecifier | None = None, - hashes: Hashes | None = None, - ) -> CandidateEvaluator: - """Create a CandidateEvaluator object to use.""" - candidate_prefs = self._candidate_prefs - return CandidateEvaluator.create( - project_name=project_name, - target_python=self._target_python, - prefer_binary=candidate_prefs.prefer_binary, - release_control=candidate_prefs.release_control, - specifier=specifier, - hashes=hashes, - ) - - def find_best_candidate( - self, - project_name: str, - specifier: specifiers.BaseSpecifier | None = None, - hashes: Hashes | None = None, - ) -> BestCandidateResult: - """Find matches for the given project and specifier. - - :param specifier: An optional object implementing `filter` - (e.g. `packaging.specifiers.SpecifierSet`) to filter applicable - versions. - - :return: A `BestCandidateResult` instance. - """ - if (project_name, specifier, hashes) in self._best_candidates: - return self._best_candidates[project_name, specifier, hashes] - - candidates = self.find_all_candidates(project_name) - candidate_evaluator = self.make_candidate_evaluator( - project_name=project_name, - specifier=specifier, - hashes=hashes, - ) - self._best_candidates[project_name, specifier, hashes] = ( - candidate_evaluator.compute_best_candidate(candidates) - ) - - return self._best_candidates[project_name, specifier, hashes] - - def find_requirement( - self, req: InstallRequirement, upgrade: bool - ) -> InstallationCandidate | None: - """Try to find a Link matching req - - Expects req, an InstallRequirement and upgrade, a boolean - Returns a InstallationCandidate if found, - Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise - """ - name = req.name - assert name is not None, "find_requirement() called with no name" - - hashes = req.hashes(trust_internet=False) - best_candidate_result = self.find_best_candidate( - name, - specifier=req.specifier, - hashes=hashes, - ) - best_candidate = best_candidate_result.best_candidate - - installed_version: _BaseVersion | None = None - if req.satisfied_by is not None: - installed_version = req.satisfied_by.version - - def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str: - # This repeated parse_version and str() conversion is needed to - # handle different vendoring sources from pip and pkg_resources. - # If we stop using the pkg_resources provided specifier and start - # using our own, we can drop the cast to str(). - return ( - ", ".join( - sorted( - {str(c.version) for c in cand_iter}, - key=parse_version, - ) - ) - or "none" - ) - - if installed_version is None and best_candidate is None: - # Check if only final releases are allowed for this package - version_type = "version" - if self.release_control is not None: - allows_pre = self.release_control.allows_prereleases( - canonicalize_name(name) - ) - if allows_pre is False: - version_type = "final version" - - logger.critical( - "Could not find a %s that satisfies the requirement %s " - "(from versions: %s)", - version_type, - req, - _format_versions(best_candidate_result.all_candidates), - ) - - raise DistributionNotFound(f"No matching distribution found for {req}") - - def _should_install_candidate( - candidate: InstallationCandidate | None, - ) -> TypeGuard[InstallationCandidate]: - if installed_version is None: - return True - if best_candidate is None: - return False - return best_candidate.version > installed_version - - if not upgrade and installed_version is not None: - if _should_install_candidate(best_candidate): - logger.debug( - "Existing installed version (%s) satisfies requirement " - "(most up-to-date version is %s)", - installed_version, - best_candidate.version, - ) - else: - logger.debug( - "Existing installed version (%s) is most up-to-date and " - "satisfies requirement", - installed_version, - ) - return None - - if _should_install_candidate(best_candidate): - logger.debug( - "Using version %s (newest of versions: %s)", - best_candidate.version, - _format_versions(best_candidate_result.applicable_candidates), - ) - return best_candidate - - # We have an existing version, and its the best version - logger.debug( - "Installed version (%s) is most up-to-date (past versions: %s)", - installed_version, - _format_versions(best_candidate_result.applicable_candidates), - ) - raise BestVersionAlreadyInstalled - - -def _find_name_version_sep(fragment: str, canonical_name: str) -> int: - """Find the separator's index based on the package's canonical name. - - :param fragment: A <package>+<version> filename "fragment" (stem) or - egg fragment. - :param canonical_name: The package's canonical name. - - This function is needed since the canonicalized name does not necessarily - have the same length as the egg info's name part. An example:: - - >>> fragment = 'foo__bar-1.0' - >>> canonical_name = 'foo-bar' - >>> _find_name_version_sep(fragment, canonical_name) - 8 - """ - # Project name and version must be separated by one single dash. Find all - # occurrences of dashes; if the string in front of it matches the canonical - # name, this is the one separating the name and version parts. - for i, c in enumerate(fragment): - if c != "-": - continue - if canonicalize_name(fragment[:i]) == canonical_name: - return i - raise ValueError(f"{fragment} does not match {canonical_name}") - - -def _extract_version_from_fragment(fragment: str, canonical_name: str) -> str | None: - """Parse the version string from a <package>+<version> filename - "fragment" (stem) or egg fragment. - - :param fragment: The string to parse. E.g. foo-2.1 - :param canonical_name: The canonicalized name of the package this - belongs to. - """ - try: - version_start = _find_name_version_sep(fragment, canonical_name) + 1 - except ValueError: - return None - version = fragment[version_start:] - if not version: - return None - return version diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/sources.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/sources.py deleted file mode 100644 index c67c4d736..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/index/sources.py +++ /dev/null @@ -1,287 +0,0 @@ -from __future__ import annotations - -import logging -import mimetypes -import os -from collections import defaultdict -from collections.abc import Iterable -from typing import Callable - -from pip._vendor.packaging.utils import ( - InvalidSdistFilename, - InvalidWheelFilename, - canonicalize_name, - parse_sdist_filename, - parse_wheel_filename, -) - -from pip._internal.models.candidate import InstallationCandidate -from pip._internal.models.link import Link -from pip._internal.utils.urls import path_to_url, url_to_path -from pip._internal.vcs import is_url - -logger = logging.getLogger(__name__) - -FoundCandidates = Iterable[InstallationCandidate] -FoundLinks = Iterable[Link] -CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]] -PageValidator = Callable[[Link], bool] - - -class LinkSource: - @property - def link(self) -> Link | None: - """Returns the underlying link, if there's one.""" - raise NotImplementedError() - - def page_candidates(self) -> FoundCandidates: - """Candidates found by parsing an archive listing HTML file.""" - raise NotImplementedError() - - def file_links(self) -> FoundLinks: - """Links found by specifying archives directly.""" - raise NotImplementedError() - - -def _is_html_file(file_url: str) -> bool: - return mimetypes.guess_type(file_url, strict=False)[0] == "text/html" - - -class _FlatDirectoryToUrls: - """Scans directory and caches results""" - - def __init__(self, path: str) -> None: - self._path = path - self._page_candidates: list[str] = [] - self._project_name_to_urls: dict[str, list[str]] = defaultdict(list) - self._scanned_directory = False - - def _scan_directory(self) -> None: - """Scans directory once and populates both page_candidates - and project_name_to_urls at the same time - """ - for entry in os.scandir(self._path): - url = path_to_url(entry.path) - if _is_html_file(url): - self._page_candidates.append(url) - continue - - # File must have a valid wheel or sdist name, - # otherwise not worth considering as a package - try: - project_filename = parse_wheel_filename(entry.name)[0] - except InvalidWheelFilename: - try: - project_filename = parse_sdist_filename(entry.name)[0] - except InvalidSdistFilename: - continue - - self._project_name_to_urls[project_filename].append(url) - self._scanned_directory = True - - @property - def page_candidates(self) -> list[str]: - if not self._scanned_directory: - self._scan_directory() - - return self._page_candidates - - @property - def project_name_to_urls(self) -> dict[str, list[str]]: - if not self._scanned_directory: - self._scan_directory() - - return self._project_name_to_urls - - -class _FlatDirectorySource(LinkSource): - """Link source specified by ``--find-links=<path-to-dir>``. - - This looks the content of the directory, and returns: - - * ``page_candidates``: Links listed on each HTML file in the directory. - * ``file_candidates``: Archives in the directory. - """ - - _paths_to_urls: dict[str, _FlatDirectoryToUrls] = {} - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - path: str, - project_name: str, - ) -> None: - self._candidates_from_page = candidates_from_page - self._project_name = canonicalize_name(project_name) - - # Get existing instance of _FlatDirectoryToUrls if it exists - if path in self._paths_to_urls: - self._path_to_urls = self._paths_to_urls[path] - else: - self._path_to_urls = _FlatDirectoryToUrls(path=path) - self._paths_to_urls[path] = self._path_to_urls - - @property - def link(self) -> Link | None: - return None - - def page_candidates(self) -> FoundCandidates: - for url in self._path_to_urls.page_candidates: - yield from self._candidates_from_page(Link(url)) - - def file_links(self) -> FoundLinks: - for url in self._path_to_urls.project_name_to_urls[self._project_name]: - yield Link(url) - - -class _LocalFileSource(LinkSource): - """``--find-links=<path-or-url>`` or ``--[extra-]index-url=<path-or-url>``. - - If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to - the option, it is converted to a URL first. This returns: - - * ``page_candidates``: Links listed on an HTML file. - * ``file_candidates``: The non-HTML file. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._link = link - - @property - def link(self) -> Link | None: - return self._link - - def page_candidates(self) -> FoundCandidates: - if not _is_html_file(self._link.url): - return - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - if _is_html_file(self._link.url): - return - yield self._link - - -class _RemoteFileSource(LinkSource): - """``--find-links=<url>`` or ``--[extra-]index-url=<url>``. - - This returns: - - * ``page_candidates``: Links listed on an HTML file. - * ``file_candidates``: The non-HTML file. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - page_validator: PageValidator, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._page_validator = page_validator - self._link = link - - @property - def link(self) -> Link | None: - return self._link - - def page_candidates(self) -> FoundCandidates: - if not self._page_validator(self._link): - return - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - yield self._link - - -class _IndexDirectorySource(LinkSource): - """``--[extra-]index-url=<path-to-directory>``. - - This is treated like a remote URL; ``candidates_from_page`` contains logic - for this by appending ``index.html`` to the link. - """ - - def __init__( - self, - candidates_from_page: CandidatesFromPage, - link: Link, - ) -> None: - self._candidates_from_page = candidates_from_page - self._link = link - - @property - def link(self) -> Link | None: - return self._link - - def page_candidates(self) -> FoundCandidates: - yield from self._candidates_from_page(self._link) - - def file_links(self) -> FoundLinks: - return () - - -def build_source( - location: str, - *, - candidates_from_page: CandidatesFromPage, - page_validator: PageValidator, - expand_dir: bool, - cache_link_parsing: bool, - project_name: str, -) -> tuple[str | None, LinkSource | None]: - path: str | None = None - url: str | None = None - if os.path.exists(location): # Is a local path. - url = path_to_url(location) - path = location - elif location.startswith("file:"): # A file: URL. - url = location - path = url_to_path(location) - elif is_url(location): - url = location - - if url is None: - msg = ( - "Location '%s' is ignored: " - "it is either a non-existing path or lacks a specific scheme." - ) - logger.warning(msg, location) - return (None, None) - - if path is None: - source: LinkSource = _RemoteFileSource( - candidates_from_page=candidates_from_page, - page_validator=page_validator, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - - if os.path.isdir(path): - if expand_dir: - source = _FlatDirectorySource( - candidates_from_page=candidates_from_page, - path=path, - project_name=project_name, - ) - else: - source = _IndexDirectorySource( - candidates_from_page=candidates_from_page, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - elif os.path.isfile(path): - source = _LocalFileSource( - candidates_from_page=candidates_from_page, - link=Link(url, cache_link_parsing=cache_link_parsing), - ) - return (url, source) - logger.warning( - "Location '%s' is ignored: it is neither a file nor a directory.", - location, - ) - return (url, None) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__init__.py deleted file mode 100644 index c0b63205f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__init__.py +++ /dev/null @@ -1,440 +0,0 @@ -from __future__ import annotations - -import functools -import logging -import os -import pathlib -import sys -import sysconfig - -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.virtualenv import running_under_virtualenv - -from . import _sysconfig -from .base import ( - USER_CACHE_DIR, - get_major_minor_version, - get_src_prefix, - is_osx_framework, - site_packages, - user_site, -) - -__all__ = [ - "USER_CACHE_DIR", - "get_bin_prefix", - "get_bin_user", - "get_major_minor_version", - "get_platlib", - "get_purelib", - "get_scheme", - "get_src_prefix", - "site_packages", - "user_site", -] - - -logger = logging.getLogger(__name__) - - -_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib") - -_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10) - - -def _should_use_sysconfig() -> bool: - """This function determines the value of _USE_SYSCONFIG. - - By default, pip uses sysconfig on Python 3.10+. - But Python distributors can override this decision by setting: - sysconfig._PIP_USE_SYSCONFIG = True / False - Rationale in https://github.com/pypa/pip/issues/10647 - - This is a function for testability, but should be constant during any one - run. - """ - return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT)) - - -_USE_SYSCONFIG = _should_use_sysconfig() - -if not _USE_SYSCONFIG: - # Import distutils lazily to avoid deprecation warnings, - # but import it soon enough that it is in memory and available during - # a pip reinstall. - from . import _distutils - -# Be noisy about incompatibilities if this platforms "should" be using -# sysconfig, but is explicitly opting out and using distutils instead. -if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG: - _MISMATCH_LEVEL = logging.WARNING -else: - _MISMATCH_LEVEL = logging.DEBUG - - -def _looks_like_bpo_44860() -> bool: - """The resolution to bpo-44860 will change this incorrect platlib. - - See <https://bugs.python.org/issue44860>. - """ - from distutils.command.install import INSTALL_SCHEMES - - try: - unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"] - except KeyError: - return False - return unix_user_platlib == "$usersite" - - -def _looks_like_red_hat_patched_platlib_purelib(scheme: dict[str, str]) -> bool: - platlib = scheme["platlib"] - if "/$platlibdir/" in platlib: - platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/") - if "/lib64/" not in platlib: - return False - unpatched = platlib.replace("/lib64/", "/lib/") - return unpatched.replace("$platbase/", "$base/") == scheme["purelib"] - - -@functools.cache -def _looks_like_red_hat_lib() -> bool: - """Red Hat patches platlib in unix_prefix and unix_home, but not purelib. - - This is the only way I can see to tell a Red Hat-patched Python. - """ - from distutils.command.install import INSTALL_SCHEMES - - return all( - k in INSTALL_SCHEMES - and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k]) - for k in ("unix_prefix", "unix_home") - ) - - -@functools.cache -def _looks_like_debian_scheme() -> bool: - """Debian adds two additional schemes.""" - from distutils.command.install import INSTALL_SCHEMES - - return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES - - -@functools.cache -def _looks_like_red_hat_scheme() -> bool: - """Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``. - - Red Hat's ``00251-change-user-install-location.patch`` changes the install - command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is - (fortunately?) done quite unconditionally, so we create a default command - object without any configuration to detect this. - """ - from distutils.command.install import install - from distutils.dist import Distribution - - cmd = install(Distribution()) - cmd.finalize_options() - return ( - cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local" - and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local" - ) - - -@functools.cache -def _looks_like_slackware_scheme() -> bool: - """Slackware patches sysconfig but fails to patch distutils and site. - - Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib - path, but does not do the same to the site module. - """ - if user_site is None: # User-site not available. - return False - try: - paths = sysconfig.get_paths(scheme="posix_user", expand=False) - except KeyError: # User-site not available. - return False - return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site - - -@functools.cache -def _looks_like_msys2_mingw_scheme() -> bool: - """MSYS2 patches distutils and sysconfig to use a UNIX-like scheme. - - However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is - likely going to be included in their 3.10 release, so we ignore the warning. - See msys2/MINGW-packages#9319. - - MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase, - and is missing the final ``"site-packages"``. - """ - paths = sysconfig.get_paths("nt", expand=False) - return all( - "Lib" not in p and "lib" in p and not p.endswith("site-packages") - for p in (paths[key] for key in ("platlib", "purelib")) - ) - - -@functools.cache -def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None: - issue_url = "https://github.com/pypa/pip/issues/10151" - message = ( - "Value for %s does not match. Please report this to <%s>" - "\ndistutils: %s" - "\nsysconfig: %s" - ) - logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new) - - -def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool: - if old == new: - return False - _warn_mismatched(old, new, key=key) - return True - - -@functools.cache -def _log_context( - *, - user: bool = False, - home: str | None = None, - root: str | None = None, - prefix: str | None = None, -) -> None: - parts = [ - "Additional context:", - "user = %r", - "home = %r", - "root = %r", - "prefix = %r", - ] - - logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix) - - -def get_scheme( - dist_name: str, - user: bool = False, - home: str | None = None, - root: str | None = None, - isolated: bool = False, - prefix: str | None = None, -) -> Scheme: - new = _sysconfig.get_scheme( - dist_name, - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - if _USE_SYSCONFIG: - return new - - old = _distutils.get_scheme( - dist_name, - user=user, - home=home, - root=root, - isolated=isolated, - prefix=prefix, - ) - - warning_contexts = [] - for k in SCHEME_KEYS: - old_v = pathlib.Path(getattr(old, k)) - new_v = pathlib.Path(getattr(new, k)) - - if old_v == new_v: - continue - - # distutils incorrectly put PyPy packages under ``site-packages/python`` - # in the ``posix_home`` scheme, but PyPy devs said they expect the - # directory name to be ``pypy`` instead. So we treat this as a bug fix - # and not warn about it. See bpo-43307 and python/cpython#24628. - skip_pypy_special_case = ( - sys.implementation.name == "pypy" - and home is not None - and k in ("platlib", "purelib") - and old_v.parent == new_v.parent - and old_v.name.startswith("python") - and new_v.name.startswith("pypy") - ) - if skip_pypy_special_case: - continue - - # sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in - # the ``include`` value, but distutils's ``headers`` does. We'll let - # CPython decide whether this is a bug or feature. See bpo-43948. - skip_osx_framework_user_special_case = ( - user - and is_osx_framework() - and k == "headers" - and old_v.parent.parent == new_v.parent - and old_v.parent.name.startswith("python") - ) - if skip_osx_framework_user_special_case: - continue - - # On Red Hat and derived Linux distributions, distutils is patched to - # use "lib64" instead of "lib" for platlib. - if k == "platlib" and _looks_like_red_hat_lib(): - continue - - # On Python 3.9+, sysconfig's posix_user scheme sets platlib against - # sys.platlibdir, but distutils's unix_user incorrectly continues - # using the same $usersite for both platlib and purelib. This creates a - # mismatch when sys.platlibdir is not "lib". - skip_bpo_44860 = ( - user - and k == "platlib" - and not WINDOWS - and _PLATLIBDIR != "lib" - and _looks_like_bpo_44860() - ) - if skip_bpo_44860: - continue - - # Slackware incorrectly patches posix_user to use lib64 instead of lib, - # but not usersite to match the location. - skip_slackware_user_scheme = ( - user - and k in ("platlib", "purelib") - and not WINDOWS - and _looks_like_slackware_scheme() - ) - if skip_slackware_user_scheme: - continue - - # Both Debian and Red Hat patch Python to place the system site under - # /usr/local instead of /usr. Debian also places lib in dist-packages - # instead of site-packages, but the /usr/local check should cover it. - skip_linux_system_special_case = ( - not (user or home or prefix or running_under_virtualenv()) - and old_v.parts[1:3] == ("usr", "local") - and len(new_v.parts) > 1 - and new_v.parts[1] == "usr" - and (len(new_v.parts) < 3 or new_v.parts[2] != "local") - and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme()) - ) - if skip_linux_system_special_case: - continue - - # MSYS2 MINGW's sysconfig patch does not include the "site-packages" - # part of the path. This is incorrect and will be fixed in MSYS. - skip_msys2_mingw_bug = ( - WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme() - ) - if skip_msys2_mingw_bug: - continue - - # CPython's POSIX install script invokes pip (via ensurepip) against the - # interpreter located in the source tree, not the install site. This - # triggers special logic in sysconfig that's not present in distutils. - # https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194 - skip_cpython_build = ( - sysconfig.is_python_build(check_home=True) - and not WINDOWS - and k in ("headers", "include", "platinclude") - ) - if skip_cpython_build: - continue - - warning_contexts.append((old_v, new_v, f"scheme.{k}")) - - if not warning_contexts: - return old - - # Check if this path mismatch is caused by distutils config files. Those - # files will no longer work once we switch to sysconfig, so this raises a - # deprecation message for them. - default_old = _distutils.distutils_scheme( - dist_name, - user, - home, - root, - isolated, - prefix, - ignore_config_files=True, - ) - if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS): - deprecated( - reason=( - "Configuring installation scheme with distutils config files " - "is deprecated and will no longer work in the near future. If you " - "are using a Homebrew or Linuxbrew Python, please see discussion " - "at https://github.com/Homebrew/homebrew-core/issues/76621" - ), - replacement=None, - gone_in=None, - ) - return old - - # Post warnings about this mismatch so user can report them back. - for old_v, new_v, key in warning_contexts: - _warn_mismatched(old_v, new_v, key=key) - _log_context(user=user, home=home, root=root, prefix=prefix) - - return old - - -def get_bin_prefix() -> str: - new = _sysconfig.get_bin_prefix() - if _USE_SYSCONFIG: - return new - - old = _distutils.get_bin_prefix() - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"): - _log_context() - return old - - -def get_bin_user() -> str: - return _sysconfig.get_scheme("", user=True).scripts - - -def _looks_like_deb_system_dist_packages(value: str) -> bool: - """Check if the value is Debian's APT-controlled dist-packages. - - Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the - default package path controlled by APT, but does not patch ``sysconfig`` to - do the same. This is similar to the bug worked around in ``get_scheme()``, - but here the default is ``deb_system`` instead of ``unix_local``. Ultimately - we can't do anything about this Debian bug, and this detection allows us to - skip the warning when needed. - """ - if not _looks_like_debian_scheme(): - return False - if value == "/usr/lib/python3/dist-packages": - return True - return False - - -def get_purelib() -> str: - """Return the default pure-Python lib location.""" - new = _sysconfig.get_purelib() - if _USE_SYSCONFIG: - return new - - old = _distutils.get_purelib() - if _looks_like_deb_system_dist_packages(old): - return old - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"): - _log_context() - return old - - -def get_platlib() -> str: - """Return the default platform-shared lib location.""" - new = _sysconfig.get_platlib() - if _USE_SYSCONFIG: - return new - - from . import _distutils - - old = _distutils.get_platlib() - if _looks_like_deb_system_dist_packages(old): - return old - if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"): - _log_context() - return old diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index baebd6ed47a0de9aa6249c6afe373ec35f74e360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18955 zcmc(HYfv0Vo@Z9SUqCkkNk|Av0zHtRTM}3xStD6OAdnEog$#BWxz*4mXshY&sVXds zwRf1ut>rsUjI=u&X1tyo=F1Jf_1$=G_hJ=sw{f0`xwyG+Afy4;XkxT6-k9?@JdzfV zKi%)2_2_OumS%V7E(5Z%Dzh^GnfZU`zj|M3Nq`~E|K$Iq&b2c38@jQQ-zW(8PdOP& zuqn2mX{?^T%p{>(=yGU|S}Hrbotl$hU7Cwu-I|+UJ(`DKy_%O_eVPwfXScsApar^u zT9Ci*>JD|4XeGSt?k?>r)5>_+(;e=LXc3eJ$=hAtwL#m!%f9Z4u1c-4YooTYYm>IA zYqPewt4gct+M;c#Wl<(Q^{k+6z2NF=v!;>1Zf6&^wFt(&R&${i_g={_1zIpaN}4DI zFKm}WyHLL1?K{OE7G=_*whz#*PAb{Nq|!|+9oFhE)Nf}kW-D#yg`K<2@~D@wYJ$ED z(C^ZA)v^n9R$X!<)fKcY<@c_>-lF07jkf1p2=kHFtC7NhBf{a>E0v?XftUAPaQ3~h zw!Kt=7M0Y(hPUYvEjOa&rlOY7N3`6GmQ_V9V~=RL1ueH0wcP)Rmepvvt*GUJN3^U# z%i5xr2PF~Dw$n4M`4MmJkm{s*$sz5;|1QZ9b4k1L&K`Ov?XcITMQW8A@O&?SE@)3l z`*7FDdp;yJp&aGqRw;(^eqL^q4xoIHmk&$LD7WzP5y?@<8rnXkO=%GHU?P*rY6&fs z&8WQ%4n5f4-qmrgBYw8y#eUt>KQbnd%V_2u?Cw4F>|j5Nfux*M<dK9XCvmq~naE^P znbG(}CMhfNS5t~Mkx0v#SE*%Oy{e96GnZ1M4IaJp`Th<m-hKl8$4_-j`leA?i;pK> z$tv;jR0jF0vZ4YEy_70cWh9PaE~Q@6!zneMRbPu=QWE3xm8^1EFHuvP9M2_2E+<B1 zRrgP*7@D5xfm}MFrBlPnl%hLv)t#!Q=)rhj&x!Lr-6t{b2$7vhddz_`NKUw4jlvWg zU@tq`zQtG)&#KvT!k8cl*c73Tz3=>#+Ug!f)+UsU?i$W!)9=#)dM;&^@r0&Qmpk-t zw;vgL9?+;m2`tBf!-w||5yV3|CHsmzqNzh8>Fh*uIHAf-sZ2^krfP|FT2`744E0^r z#<H2_11<5E_-k#4;^*aYnvERS#&bhGso^1-VUsoMp<F5#i>ET0tYi}DSUQUxp-qg% z@i3*u<I&tzJrs|d`zy!e3QaPGe-$*3*{-l4=Jy%Tr#0hxA2n=*GAn_1&=R@tA46e^ z4OvUahVax#LoTZ%2}2&MZ1FOS&jITk33~nfSV|QyO=Lz0UNI?S20#E=6}2&0d^M4t zkj3mJF%EQz_rKWR{%mh&_vvULaPlhJUP?@)wMG$h7qRK8Xd{@2u8ai~o1+Kz?~4Xb zPH5JXWC~c28lKRyiYksIGGZ3ErlgWGh6F50c_c-cCk|f~Raw)3&PM_wlHGeW-q+n% z43YR1@w@_1V`66_t;zw3FF#OUOl8C|P0OiAVzJSbHa0OF9m$Tza#wSS80}d~RVQRM zc3}UZmexRkF9u*p<W~d;C2BJ8VmOsfX;&LX04}Oy*@<*g9F|286zVdXn4C}mshG%I z#pLAx2r(Ma%hy8M;8HeYQ*<xrDxrZK{Pw)`jm49SpX%s5@qEvDr3x=7+bG*guU5v5 z@#9$ZJW(rksN)E=1%)a0U?U5Kzw3R^KUdd!`|z_1;l737b91iect`IOKcJ16&{Apj zpGSpCB|${6H3$lgX;2-9kz+T{&QZk%WCn^i5@t6V2;Rs+89|+$2zP<W?)xvJFlFcz ztV_tTTDBDoL2@+GKxUGhg?Bk&K#<&RU5wQ+k>#nt!;)@dAhm28lU#Ky#h!L<V=1A* zGkN(ua9okqY#Pe|jMK8>a4y@_($aQlzj!5;PKzUBiOi^pn5oQ2RspZoM3b$74EkkR zJZj<B@WiMJIw!sn%_^e?Zt>2JMFUvzvhLpg^Cx<G;s#gm2dm7aUZY)9bg$WG=cK=$ z9uRkFaOzd|9ueA(Co;*X$)uD9tb*=4D_`wUl&sR=FdjtgF5_m8DzQpYv`{CV&0bdH z>C|O8j=9D;cnYBn->9#kFvT7QnES}G%jvFMs@^wy_D*%%&8j=q?Q_1WWe*E&n+eVb z_szNXeg44BLKP2~;I7omDwdtNexZiY!?o}>_WfX^^RI<QXAy3h+bi4``8exyc*!Zb zVk8#b3b97rqjI@7S(;3ZXfJ_xG>XVBD4S5pY3Z>z_!3&GHGIew<`vF>%~F1|beUg& z-eTMv=xDQ4v?ulnbQJFYjK2&7WW^{a0qG8-E(yY{W&=WB;oEpliKNyLZ30grAn`$G zi+P_DBqw^nTZWV)1bsv=PRVV*<rr|RJCaB8T5SNUuMk#)FdF>IK7cV<600}S1F|`$ z3$ZV}F$m~GEwRo?H<e<O0p5ayV{Fn>&#%DJ2}MRNR1>cvqlXb$A=++mDhF`keG^va z5*qd_sbcNeE(`be#S3sxk(2SUga);Nx3rKoZVsT3n$EXPMq!FAl~!DT@lI*&)afPf z#_8R+z1x?{tKNy-h|R=4eC}`m<iqig4$L)oER=U%^DcSA)85<O+K<aBmcpCfDZ5cN z<DYF^2scl4F9j<WgVpoF>gl1`wuNBJP0!7%ciOt=gWYqk?)>gsdq{i4cmHwv$dhrx zOX#kE6MBdfdS)v4<x4o>x9}QSS+J3WZt%h^I9Z;%JuN)vJj0T;28SD9%|JG2mOjZH zwylp&(4=i)U_#aGY>=@U*j#nYPgfw_c5v7A-Yw7<Jd<xpa#HL{fC2JdQ!PeFLYDI# zLq~)VOd9uN*>TyBm{4m)b8o>mEjdd%MmCeaDqcxk6}!1Ipn{`<4{I{GZ$dN&gr3FG z#8e@o0c8(Xg|il1c><4T%|xohC>#}bV3nrWdDdCa7)geH2a)O1g1rtvTapQR4XWQU zAQTdeHS^cll)ILlh4IJN3ex2%XG(Zq=!MiHECrW#MEC2$WzK+2l%F!#t^eq#oRMG4 zDaZ7^>tR1gDSDKY#k6`XYPTInuPP~cpMQ!uEHhV`=Q9s0k6t^m>}LMJwfMZRdW8x8 z9$}g1cSEf=%YH80X*;tJI{Uy$6~Boz{a*E<i*JTw!gsgEgwFG1P84jCDST*$K)sD< zY6uV~6kxu(T$(>)%wy9dfLBi8J)%(cG_ubjIYN*ezYUiDyXFTr*!R7dz;~M8ZpKX9 zo_}jxuB~oxpSeOF-r|o=h!X^`rFFZ6XCV$KpMe;l>sneg8G-x$LA;r#MAAwm#{gS} zSr8h8SzzqE27=5rS$9evPC?a8B$LpruVkr^BAp|V77g*HM)|6fK{rfFohFa#0lr@x zKOo=jJ<4y7Db=eAw+HWIq`1+m(hZ0;nlCs6K!51L{@e?0nm#@s+`Aa;oeTEPzJBv- z^ReDJSMMKv;ol%YEL|`xfCD0%ImIt)SKWoy;8yPYFMuHzuR3_4qubHt%n7yNTi{(n z-q&K$ZH|Pb>8nCdcCzevyy@uUUM{<e7lufK;i(Vam({5+vib>QL*>@9_4>2mf#7!@ zbdVS>;6k8s!WBSLVfB%}{)-@4r@yt35N;;Au)M1o`^Aeu!KlH`FJ9yf-FPIwCR?t6 zix<Jk%@=p8;>C;m_aA)fK$D>|H<1!+8PrXdJsjnH932{s3?tK2XalB#%ez`Na?z+H z9um2n3?Xyz;tp<Wr*{At(UdBIJ+Rrdi42VO^wr}HViNY4_|*w0)DTLr*DS(I!<bXE z;uRQiij2k(H>ODotB&j1f$T8(31A99r-#``#+~6onNYZaNuZF)j5cJuMgwp`c+L5s z7&>K{x}fw)j{#~!(4gcVY_txY*0jN*R8mL@*Ta`m;0viqIiAgNFM=K{SODFTRdp8@ za!mKZQ8Ug<PHdO%F;)%ioccEUa*m7}Y8VV?gO_h9WEP64hMC-A5bwQ?fA#Cgz%9y| z`{1u!`~D#ixzYF+(S^YFsrDt8chR+Z-nIF*Ys)=f@H=I1mAyCogVFDeF4jcnYoZ^h zKmOYLUt6d-KDX_ek34f*PtW^KldL+)Wz|VxDOC2IGjE-FPx`^&_XZcYHO+5p`e5Y8 zue|@t!nVV6)kkjbn%i<>J_JGMbbJ2j{OATv)e;0Dp$me5@|mP@UCWY4$>1#MKk)S# zLT;o>cv=kwtqx{tUf1s<7PcyF2kU}G;B2)l0H|N*ndB~1Jyr=6FexrjT>0_HVyI&< zb0KVuRAlA?jsi3Hqkbsrm#-ug*;d?ap96PiTuQ(RK)B4wQ?zlC(>+<DWa-*{ShQ>R z0g5GRHw78>gIl6aZc%_VMeam_u7?K!!dF8lOlILTBE>KXeGj!NJc{%-FB7?rXOk0Y z4BiP(VpcUxWk^D@HFOX3Dkz!?@pI)VWbmw%QF%Mn`pIocL#av=?qPkq`5o74OiHLO zqy*KPpCvitc<nm=RU!(wQ%adHa?86JX2r4tmhs(i)nd5rR=95V=tu6`;m&JrvW+XJ z-P5T%oA=BI_bdia&jnA<zWCo$^G&DcT&LHymPwktz4?T|ekue{gq=Sv6OfN!bN_Is z=#v>CKcpF1BDj=9FtS+}zkCV4{|v8@5t7HiJ`;aYVJF}=%#S>7XV)4kP@@f8-eedY zZf>l2^TtZP^hmP>z5%X^d&q2&T#xU`5_}MMzQk9ty651^JZKZcDtx!R<Q5_)#OHgv zUuYtiiHYJMhpy}u8E(r)(df$d4Z)V-L{#Jry?8OBfeH*JOL9sU;Yt@%YJfV$E2CNR z9Rl^?QAAhii6jgy7*(Kzl)_!8a8spa*y5JRN{xc|lVeJT?WB;;Kgyj^<Dklev2)$M zrw484blu_R1BU^#0V=Np$#O6azik?mQAW_aNwh?=B*o-JlAOOZ$b^c61aSglmp5z- zkc|gV={Ovy9Ckh@QfEQ;MXqrY%>mt!(K=x;kx9?d+rk;*klbwh1`4*(26BdH1Zo}e zxdL^m-ozf$>rzkyXAoDU*7v|TEDW&BzrD;f>sn2-4yG`fbqy}v*^?Sph%P7j!G^tx zu=jKyln#}&0WcwQmFYr`yVrIZ97Q=!&khu_6}}&Iq%wNNWGw3#d>`O7ZtxlQp0mvJ z50T@r_MFULdi}Y#N*8_IbH48Br)Exk?}$;JO_0pIS-TMJzP-2mwy*n_k>kJTzPE3L zj|+bhIxfuA9v6yM8WPG_=|d<K7|2j^b1;vKjbC$h!o^0faulx`-ZrN(f9GZSszScn zBD<HbgEET8|Cy?)ka1IXE^>T+&#{>e*LO}k-`V@;dl&W``@KpS@Xd`?!uj_d+<#>7 zawliw3h^7Iow5ta3Qf|QFJEQlGTP73I|SY5+#O!BaWPbTD^xq<ntlFusCla6*JP-E z#<1R>aL8^)j^B6V&M;P?fsnC^%eD0y-DgfRSl884$nwT|3-`%Q@u-t5_&FVtOL9x_ z+Qs04Y492TPG>fq{31lsirfQzxa!V~d__s2FNI7E?)lVRz0hkP>-zi~v{$1X3UYn6 zbJu6PFx^P5&vs#U$hdxliPF8{3T-!SV2j0*JhG?M$vcx+&M67G0+pnX5NuV-`>6&` z4(=ZiT1<6?>}E{ZIl0I3oqy@s%z>v4O!g1(vnbLecH)r8QXO#EH!>C#`#5t1lgvT& z2g3qq0yjOnQ#}^2x%&~k7_gNVy6c7S#*@yDj=}-&#8oegpX=^FcjA0|SG=cVprZ#a zXmZ9VS;}brbw58aicctM-8(L;Djj)}R=8_dy`^A><HV6c^C|~UPAXT>;J@Hs-HB|9 z-3uR?>Rxs^{98cb?$85x+k<bO`TCi+zc%BYP2C*%h3n*6)z@DCe+Eh!lgME3{7mwg z^khEtzbE*Ou~*<G36rlRJbe@%8zDTK=9iD!`Q_&@=<(2)LLmy#=5wmp&zE6PXhSf9 z>Gy^<n|H+x3IouQTTO(rkfrl|f$zb2$Prpm*g3_UWALC|^@g1jF}5Lf$=(U&Pw*C> z2c!k|VaXf#)+F?~yRM4s{WHyXT)RIGmT|Ck7b&!zx{KUnx=YDsHRXA{!x<`3110hu z@aZ(7@Fhe}B<=!{yCkpVi@AaKeopAh>v+#t{5MegA^`hOd|l*Z{ijq#BO0e1IVuqw z#nc~p()K@5ueKwjleRLU2c%B<y+G-*n+niRgO$r(Ui4AX&x-+8vS~TUiy`I-d{#om zVpY(EPHp^4@(~bG<9zlHpnpl|^Ww!-X~1O(=0RbwZWVWMeX-$0-b)6%Ta#bYj_5+5 z7i3B5!Xythz|rqcWztVOWfp0>jAGDqNK+G-2MS(NRLV4Dy6Y9FUFeJN18sp~FFRQa zil%bXu17L0h7g3#Xxs!v`7^xoGyJQ&kWI1Qg*_#nsg4KXJUP35<o}_6cISe)|HJy5 z$zQn6uBB^;UjvKCj(H3gK~MmXe840>t^p|+^8%YfhS=~Eql;%?Lm8x9j9tnUy65xL zeJLDxQou+7f)NXQEP^efk!cOBun~t)_8HHY%F36WbjvY~3MQuUqJe3=7+_@^mV>+) zBBU$f#Zu-8eO5+AV{uFofw2lmtPPI5#D+x0<1LT@XpIAo0q1~gz%8*>v$vclFN!Q3 z(BM1+up;tS^!irK`h8|AqAcefBEsM)%sQN%--kBk8?xPseIcthf8EZ8$WG;{zhb~= zo!D8Vkn=zJ`-5X^-VO}Do9C-%&%!+kEzU@NwxiN|!q|F_M@d-aro3uu*AB^XMkvs_ z!GF2d?UO22`7AD)HU2*GudGS~f%TrQ8WXxS@7uo~gnh&eS0%}2CIt{yo4o{{xEI0R zhu}c47+22z4)HRD^9Nrh7>98BYa}9KN(B%=|1{T#2PYKNJZH~voi$o-g`Q~Lz>Lgw zTd&s&1HQui%hxg&8VK2|;G(`egtM<QHsF(-9M8~WH5=My^=PfYns=_RTDzkroYYTO z(TX7&fv;+f)u+|h-okY?cXmj$T1lR^(V~8E$jSSuvszfN<w^!htUi<0obIiHZ=Vg{ zYTO1~PXM1aI_Z2o*`t>Zl&%`xaTdojg_t#pdm7`sBabhmmF6>d!82<Vt3&(H*LqO2 zW`AeS$=^qs+^Qsb3w@AM<*Hrzo;ho*i;;kh>-1t#&&xvFw~BVd;vwt4^>WeCtK?fX zHrxh$#h-L+XB+g+f>knCbA5<kE)FX4ufif=HXobZh&);QSkS+<3&7msHo3BaGHWMH zOmm*aJ`UNqo$n=yxG)+Cl(ib;tp3UI$&&>`E<6xk(|-s0KWMe=vzl5DaD~?l%0sKE z$QD2VuFB_XLud6}ghi04CY&1&qqkgSAY!$%=lCW#gtxD?U{JF-_^uQh@P*hxN3+wy zm0C#7vonUTVZdwkH45drn)O!{$!9uoUzI3yp+M#bq>@&z(ImTJ=!n%Aff6nRO4OUM zZy2a(cJNSbU!erI7OT+rXux5HOa#tVao=Ovxk`-tm|m>;Su;w)tpr~A6$>UQ3=e=q zisUUFn(Y9*p`CEiUcvm8cXQ=Kkc37We0QK+D$lnjOd@E8PS`EV2cMEQw1THms^zQK zuxYK1`xa`s`iGOGtGTPaM&ypi2wu~@WAOYT293MHj(kdZ@+p8}y}ENkRdhE$k%k$j z2N2~mayd@A_oUZ!Z{qO=!#hceGNO&+mr`ljh%rPTJdsw$y?%Wt9Cg@!KgiLwzNoxi z*pFB#OWz?XHN8}z(8ACR?xljEB%*I9{j}Q3F=TqsJl>1L!NN^P?t9uLPEB!((eU1F z<MGZs;%psH-5AzFrH&1MR^a4ME`J!g_Vo3ye*4&agERfJ+y5&5i(up5TsGZWb-RSl z$$x6+%V5NZnumkN>7lV={CKh8(8X9ac!;rT<YLW7c=PiZ9+#NOis>vO6BUsHnoU=+ zn2{3-B3BU;El0)fOXAh+gh;186Wm3c5WBEX!-{-GgcGGFm6>>r-xz_q2;((;C=`GL zQ(|NSj$On=BHCviAC1*hjJBS7X+mtIY(>+y9y)aJ0QpvMuBsx2JZQ#>jmsGgfv@me zAu3v##4=)kxSjF_%6aQcd4;MR3RDKB+@P{k`8F<ew#uF3dXS>m%$tVo3akUB2l6|o zmlj9TDkOvzq6&nt8ICpGMV>W|B+7ZJC`}>28}aoSBmQ1@ktu~URV*N&hH*{?A^Col z66)*}WrW8(0FFmcDsj3cdqDX&$ly|vGs+;{c2jnlvh7q+h8TK-)Z)VvsdQ5J80Xn~ z*mhQ#&SKq(GiQa^8FzVble3{xxke9GEu2l#+{dGb&0_(}T2&1ia0B<_uj+0%6mi+8 zUQXozO73c0%^~hOk&e?bfL_m^7lrxrFxBE#rM#6LMXGP%_xXb~@}XGssNr>KLOL_L zrMRyOUSH@fM>MTo&YzAHu9e{i{YzQ^SRYIU3xxBH5>B}D>6vE?ntqQOQpSzfVW7b8 z;R_DK{jnIRy%nfk@<o<PtiMRrQd#AL5^vBm)xHvDzK!4fQy90`0-ppb9@BccoNeAR z=c@R1$>wV>T@&si@G$h}A&Vs}gqyCp3!eQ|oIkl248MKsV?@xFvXby(sAfJ?vlyzI z57o`QIv;9UVeXRXGG$BQis@5xVR6N2J-HW-%vJ825AR!XTaRFKM>f6_x)GXj|0wjs z(0sUY#cS93s4j3Luo&JsAKp1Lwh)f3`0d(2aqT4lw_L*fwOE4C4#2kzYdr#|Ur8(c zdnK)R!{S1C$BNUs2Qb%PyivO1wjS7^;DB^KTsJfEqt}1<`h2)~#cQ|V00G#=@b>xe z_Qh}`;GKP8A$({#$ox$!r7W~x$G|=oD!J}|``GQ8rxt5kZ`HKYL#!5uW)DHLXUQBL z;1~}+so476AOU0CKES$EPfyH;>uGrN8HV4r5Z+CLZKA=pP`_}5p<ic73{L%$82UAr z*l9g7d$w+==ca{lblK1Rbt@qj+C{yDSoy}qNXJ~HW4gk)&Y1VN_q8wV>$n~2q@C?W zJOt%S;mUV{H-gjccf#Uaean2fg?8Dh{Up5MddE9wZ=78Si!%pk4%lz2(pYAC`NUtA z&R}DA(~euU4}7e=^7`}dymaHGg~;}q6Z4Usi;<Iak(0BPKi>NO)(@ZiPc=7N=NnEE z9@y^$Sb5_@q-inIGZ*Q(ec;T(fgZwy-Gm8yF*~@bODYyaFU*Brm=@-?HP3HuHtue> z4J@?1KnGUaR&We1Qd{g34qSHL3hn%`;&$lJ3Uib^y-e9%zC%vymLv0#`S6itFY|9* z39wKNUccwtyy&Z)_tnl+ez@so<fe1>jXCivi@sx@op!R)s+BWN7OLjd37|G?TP$z7 zRo+C@><d|c;U!<`QnmP?%(uZab#|qk`GVh6?*vZ%*UJlmlW(eTs^75h7QH8Lc~9Q; zl_Tms0#|8(Rc%|U*!(c!_Xn0MSa`#=z<m!xgp050n)~|5UEk*E%Gu^cU+gm{o_^vA zUr)}Sy5oB0Ua)lP%vvWOdBLGTJ;|3%hHH2eu`Tk}Jk}}q25BVF78!YcedLovHtpn> zVlOV*<OA9rc<u4dG)o=M6&&Q-$}CsU2gq?xVvwix-Dh?$!Vn2+o*w7of}#fqDLu9& zvsy|BKd_Wz8%l0E<sEJoEHJYK_)Z;qU^taAzil%#5}%<>@bBIV>b?(93^jsI5tM&V z*$*iDGh{fr<VQqYBGG1>XF<x}Q47lWHua-0#qN?csk;@ZTL|o&YX7yjvQWy{&+mFS zzqjcJ)$dl%j4V{`{owSEd;Vk3%?%5UU-{_hqPK6s+jrMj@pkFbzYyP)za;=+_I>He z!nHyi6NI+U7_#dl{IV9u+~|!Xdncdn5OO1}j~%pYlEVsz>Vt${o#>=cXLRgCDi3r) z!Xhrzbr>B=DyOM@3LF&U@FzsNAnhLMAj;pPJ)Z;l>97G1{z36pP@E~Bt-l?NEe2cX zgROI}*0qF7(D1p4{LLr(V8zWpoBKl#*xsf^ro$Z~<WeC*Avuu`oy&B&$pdsEdHB$b zCzG+b?;pi2=-H$hw#E%)7_k(fMqg3o9mMnv06j$<=*M`uo$NU=WyE|KU;n`ZF@l#7 zGjgKuJQV$mreyJzWRlw~c6<Z^Ozd_SFWQQ1)IM>I@{lb4c@(}s8s5`DQ6@z?H_mVA zdrlq}ia2Qgc_HFd_=lwwuQEo_m)79;JP_cliX=m$kuijz*n?sWEgL8ZFtfu%MKv{^ zO2c5nK`}+RK;PuX6y}vsviN|Otg4F_^F{>$+!&zG|Hfo9^u~e_YlJD=f!j2(eE7`8 zi}^5a3R8VPt)*}>jJTfw#hxZIyLkj06n&gq(<g+(6l==Qu#E*J&>Fez#~&I2r`$G6 zBXWm=?`V#sD)Wh$iobYeOwPb0lo3mW5W2~l7;Ja`X^){!H^*p??Cm4+A~OY-|A7k+ zwb*44Q+;8mMShn2`$7A=U*)HGi{o%DN5uyfEVOemxa(GM7k!E24b6r3-}dhRxNO76 zLGx^wkkvxiCzg;;#<9MSer>53B&mq(dOyFc<ya)YK;`cHd+^%-PpO!fdba#Bq%0_O z2$IZ5Umh1u(eRc;d~D0S>?9tHu_)PN8?qBlD<iFvozBTdiPI~`I*SzOBcCS2r9k1H za8rzMXGfIB^%x@7Z;03+X9&g@WlCPY{uHC}qxw}sR=J6a!mk;XpHWN7_;!z=FvYm7 zCf*8&3xOSLq^te>u6N&T`=WRME$@D=Lq1yC9$xgGTkxLye<*GLx)66u2zQYY?&9(# zxZC)zh`ac83ZdKC<>KF02<yvj3mbBdJZ2883A8g0SrP3sL~awFhUm<jr@pXN%3p!M zb}x@@na5uWJ6#`tNjc`pf|$OyAc;4*e?9z#V+lb<<4x)qJU_`*I9!j8j3_nky$Tc} zGF}A28;Jbhs2z7YJqnwl#&DI9H{yCDK@SIp;kWo-)B$B28!n;nXw?2kSM@#8DgV{5 zyCI;^3AUlVlJcYw@8RGWG)E2<g^sor+DaaF4R_slQ2vx&Y;bq>_ICC*JgskylmE&3 z;==m*1IR8l9>*8xal=`OUqhhD>wf+_1o$lnRrgX@7Nnu_91Xy=?ekRHPVKhh%l)YR zYYS0?iOXp<YIsw*mro%bRNqqEjDPA*pHV|e;GR3ZcD)9cyA?ok$D3ZWUaS01YZwkc zzTu>o;>Rf9K{M8muNq$_!u|YO>0bO2L^_QnpfL3wBLK}8=fN9T3xyhslo9G8C~eic zh0NdPzzP6UcTmGR%4`;j9|$=i^&$q?h;wnD>NxrQX~RWH=O?;*BmoDv;ld=DZ#XHr z_wq8`UZISeIb_^$O}hXWI7SoK<p=?N;eVrC7@FxjY6R{dQ*_jTEiv^c$Unyy;)3vN zwquU%_zesHl9m3F`FS4rB@6$SJ^d>d{S`a(E7tyxZ1al4D>x`((eb<TV9+t;U9M(< z$fAGCE&rD3wgrFv6nzs}v30t6CNwKAY-pJZUh7|AE%&Ob7pofPs~Tnp=c`)g*v5w* z{<|90tbF%EWY1LTZ@rZdeayXW#m8J*eiU8Wxb2<njqKN-y@$g1jq#~x>4nCJ)%1Zl zEPqGv&DyWmK5*bu-TO}Fh%8eHuvpLOgF&-`if~R@HTbm6tUzgbm;Ic+Ffl8rxLjk` zAQIoKKxui0{hR_b%?c_$tUz>~J<zg);<fHYHrhd6o2%_0FBGjHuPrtI#Dl!dj_9S8 fdWyPv*yD!B;NeD?bPs*7H6HGOs<cvV37h{5>orb; diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-314.pyc deleted file mode 100644 index 6abe3af0a9b2ced1ecd8eddbf9a89a73c8b47536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7628 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 N+;4VSf7{7H{eL8dnMVKs diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-314.pyc deleted file mode 100644 index 071789ee867b9718bf0656f82b675bf2e10f1b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 b=G7H%`!heL7M>>D;9s6b085?)96<RWA;4be diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-314.pyc deleted file mode 100644 index 1cd71d4a1b7e9a100462bfe2b7c02d9b79d08be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4349 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 BnZp18 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_distutils.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_distutils.py deleted file mode 100644 index 28c066bce..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_distutils.py +++ /dev/null @@ -1,173 +0,0 @@ -"""Locations where we look for configs, install stuff, etc""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False - -# If pip's going to use distutils, it should not be using the copy that setuptools -# might have injected into the environment. This is done by removing the injected -# shim, if it's injected. -# -# See https://github.com/pypa/pip/issues/8761 for the original discussion and -# rationale for why this is done within pip. -from __future__ import annotations - -try: - __import__("_distutils_hack").remove_shim() -except (ImportError, AttributeError): - pass - -import logging -import os -import sys -from distutils.cmd import Command as DistutilsCommand -from distutils.command.install import SCHEME_KEYS -from distutils.command.install import install as distutils_install_command -from distutils.sysconfig import get_python_lib - -from pip._internal.models.scheme import Scheme -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import get_major_minor_version - -logger = logging.getLogger(__name__) - - -def distutils_scheme( - dist_name: str, - user: bool = False, - home: str | None = None, - root: str | None = None, - isolated: bool = False, - prefix: str | None = None, - *, - ignore_config_files: bool = False, -) -> dict[str, str]: - """ - Return a distutils install scheme - """ - from distutils.dist import Distribution - - dist_args: dict[str, str | list[str]] = {"name": dist_name} - if isolated: - dist_args["script_args"] = ["--no-user-cfg"] - - d = Distribution(dist_args) - if not ignore_config_files: - try: - d.parse_config_files() - except UnicodeDecodeError: - paths = d.find_config_files() - logger.warning( - "Ignore distutils configs in %s due to encoding errors.", - ", ".join(os.path.basename(p) for p in paths), - ) - obj: DistutilsCommand | None = None - obj = d.get_command_obj("install", create=True) - assert obj is not None - i: distutils_install_command = obj - # NOTE: setting user or home has the side-effect of creating the home dir - # or user base for installations during finalize_options() - # ideally, we'd prefer a scheme class that has no side-effects. - assert not (user and prefix), f"user={user} prefix={prefix}" - assert not (home and prefix), f"home={home} prefix={prefix}" - i.user = user or i.user - if user or home: - i.prefix = "" - i.prefix = prefix or i.prefix - i.home = home or i.home - i.root = root or i.root - i.finalize_options() - - scheme: dict[str, str] = {} - for key in SCHEME_KEYS: - scheme[key] = getattr(i, "install_" + key) - - # install_lib specified in setup.cfg should install *everything* - # into there (i.e. it takes precedence over both purelib and - # platlib). Note, i.install_lib is *always* set after - # finalize_options(); we only want to override here if the user - # has explicitly requested it hence going back to the config - if "install_lib" in d.get_option_dict("install"): - scheme.update({"purelib": i.install_lib, "platlib": i.install_lib}) - - if running_under_virtualenv(): - if home: - prefix = home - elif user: - prefix = i.install_userbase - else: - prefix = i.prefix - scheme["headers"] = os.path.join( - prefix, - "include", - "site", - f"python{get_major_minor_version()}", - dist_name, - ) - - if root is not None: - path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1] - scheme["headers"] = os.path.join(root, path_no_drive[1:]) - - return scheme - - -def get_scheme( - dist_name: str, - user: bool = False, - home: str | None = None, - root: str | None = None, - isolated: bool = False, - prefix: str | None = None, -) -> Scheme: - """ - Get the "scheme" corresponding to the input parameters. The distutils - documentation provides the context for the available schemes: - https://docs.python.org/3/install/index.html#alternate-installation - - :param dist_name: the name of the package to retrieve the scheme for, used - in the headers scheme path - :param user: indicates to use the "user" scheme - :param home: indicates to use the "home" scheme and provides the base - directory for the same - :param root: root under which other directories are re-based - :param isolated: equivalent to --no-user-cfg, i.e. do not consider - ~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for - scheme paths - :param prefix: indicates to use the "prefix" scheme and provides the - base directory for the same - """ - scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix) - return Scheme( - platlib=scheme["platlib"], - purelib=scheme["purelib"], - headers=scheme["headers"], - scripts=scheme["scripts"], - data=scheme["data"], - ) - - -def get_bin_prefix() -> str: - # XXX: In old virtualenv versions, sys.prefix can contain '..' components, - # so we need to call normpath to eliminate them. - prefix = os.path.normpath(sys.prefix) - if WINDOWS: - bin_py = os.path.join(prefix, "Scripts") - # buildout uses 'bin' on Windows too? - if not os.path.exists(bin_py): - bin_py = os.path.join(prefix, "bin") - return bin_py - # Forcing to use /usr/local/bin for standard macOS framework installs - # Also log to ~/Library/Logs/ for use with the Console.app log viewer - if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/": - return "/usr/local/bin" - return os.path.join(prefix, "bin") - - -def get_purelib() -> str: - return get_python_lib(plat_specific=False) - - -def get_platlib() -> str: - return get_python_lib(plat_specific=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_sysconfig.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_sysconfig.py deleted file mode 100644 index 0d0233bb8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/_sysconfig.py +++ /dev/null @@ -1,218 +0,0 @@ -from __future__ import annotations - -import logging -import os -import sys -import sysconfig -from typing import Callable - -from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import change_root, get_major_minor_version, is_osx_framework - -logger = logging.getLogger(__name__) - - -# Notes on _infer_* functions. -# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no -# way to ask things like "what is the '_prefix' scheme on this platform". These -# functions try to answer that with some heuristics while accounting for ad-hoc -# platforms not covered by CPython's default sysconfig implementation. If the -# ad-hoc implementation does not fully implement sysconfig, we'll fall back to -# a POSIX scheme. - -_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names()) - -_PREFERRED_SCHEME_API: Callable[[str], str] | None = getattr( - sysconfig, "get_preferred_scheme", None -) - - -def _should_use_osx_framework_prefix() -> bool: - """Check for Apple's ``osx_framework_library`` scheme. - - Python distributed by Apple's Command Line Tools has this special scheme - that's used when: - - * This is a framework build. - * We are installing into the system prefix. - - This does not account for ``pip install --prefix`` (also means we're not - installing to the system prefix), which should use ``posix_prefix``, but - logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But - since ``prefix`` is not available for ``sysconfig.get_default_scheme()``, - which is the stdlib replacement for ``_infer_prefix()``, presumably Apple - wouldn't be able to magically switch between ``osx_framework_library`` and - ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library`` - means its behavior is consistent whether we use the stdlib implementation - or our own, and we deal with this special case in ``get_scheme()`` instead. - """ - return ( - "osx_framework_library" in _AVAILABLE_SCHEMES - and not running_under_virtualenv() - and is_osx_framework() - ) - - -def _infer_prefix() -> str: - """Try to find a prefix scheme for the current platform. - - This tries: - - * A special ``osx_framework_library`` for Python distributed by Apple's - Command Line Tools, when not running in a virtual environment. - * Implementation + OS, used by PyPy on Windows (``pypy_nt``). - * Implementation without OS, used by PyPy on POSIX (``pypy``). - * OS + "prefix", used by CPython on POSIX (``posix_prefix``). - * Just the OS name, used by CPython on Windows (``nt``). - - If none of the above works, fall back to ``posix_prefix``. - """ - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("prefix") - if _should_use_osx_framework_prefix(): - return "osx_framework_library" - implementation_suffixed = f"{sys.implementation.name}_{os.name}" - if implementation_suffixed in _AVAILABLE_SCHEMES: - return implementation_suffixed - if sys.implementation.name in _AVAILABLE_SCHEMES: - return sys.implementation.name - suffixed = f"{os.name}_prefix" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt". - return os.name - return "posix_prefix" - - -def _infer_user() -> str: - """Try to find a user scheme for the current platform.""" - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("user") - if is_osx_framework() and not running_under_virtualenv(): - suffixed = "osx_framework_user" - else: - suffixed = f"{os.name}_user" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable. - raise UserInstallationInvalid() - return "posix_user" - - -def _infer_home() -> str: - """Try to find a home for the current platform.""" - if _PREFERRED_SCHEME_API: - return _PREFERRED_SCHEME_API("home") - suffixed = f"{os.name}_home" - if suffixed in _AVAILABLE_SCHEMES: - return suffixed - return "posix_home" - - -# Update these keys if the user sets a custom home. -_HOME_KEYS = [ - "installed_base", - "base", - "installed_platbase", - "platbase", - "prefix", - "exec_prefix", -] -if sysconfig.get_config_var("userbase") is not None: - _HOME_KEYS.append("userbase") - - -def get_scheme( - dist_name: str, - user: bool = False, - home: str | None = None, - root: str | None = None, - isolated: bool = False, - prefix: str | None = None, -) -> Scheme: - """ - Get the "scheme" corresponding to the input parameters. - - :param dist_name: the name of the package to retrieve the scheme for, used - in the headers scheme path - :param user: indicates to use the "user" scheme - :param home: indicates to use the "home" scheme - :param root: root under which other directories are re-based - :param isolated: ignored, but kept for distutils compatibility (where - this controls whether the user-site pydistutils.cfg is honored) - :param prefix: indicates to use the "prefix" scheme and provides the - base directory for the same - """ - if user and prefix: - raise InvalidSchemeCombination("--user", "--prefix") - if home and prefix: - raise InvalidSchemeCombination("--home", "--prefix") - - if home is not None: - scheme_name = _infer_home() - elif user: - scheme_name = _infer_user() - else: - scheme_name = _infer_prefix() - - # Special case: When installing into a custom prefix, use posix_prefix - # instead of osx_framework_library. See _should_use_osx_framework_prefix() - # docstring for details. - if prefix is not None and scheme_name == "osx_framework_library": - scheme_name = "posix_prefix" - - if home is not None: - variables = {k: home for k in _HOME_KEYS} - elif prefix is not None: - variables = {k: prefix for k in _HOME_KEYS} - else: - variables = {} - - paths = sysconfig.get_paths(scheme=scheme_name, vars=variables) - - # Logic here is very arbitrary, we're doing it for compatibility, don't ask. - # 1. Pip historically uses a special header path in virtual environments. - # 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We - # only do the same when not running in a virtual environment because - # pip's historical header path logic (see point 1) did not do this. - if running_under_virtualenv(): - if user: - base = variables.get("userbase", sys.prefix) - else: - base = variables.get("base", sys.prefix) - python_xy = f"python{get_major_minor_version()}" - paths["include"] = os.path.join(base, "include", "site", python_xy) - elif not dist_name: - dist_name = "UNKNOWN" - - scheme = Scheme( - platlib=paths["platlib"], - purelib=paths["purelib"], - headers=os.path.join(paths["include"], dist_name), - scripts=paths["scripts"], - data=paths["data"], - ) - if root is not None: - converted_keys = {} - for key in SCHEME_KEYS: - converted_keys[key] = change_root(root, getattr(scheme, key)) - scheme = Scheme(**converted_keys) - return scheme - - -def get_bin_prefix() -> str: - # Forcing to use /usr/local/bin for standard macOS framework installs. - if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/": - return "/usr/local/bin" - return sysconfig.get_paths()["scripts"] - - -def get_purelib() -> str: - return sysconfig.get_paths()["purelib"] - - -def get_platlib() -> str: - return sysconfig.get_paths()["platlib"] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/base.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/base.py deleted file mode 100644 index 17cd0e875..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/locations/base.py +++ /dev/null @@ -1,82 +0,0 @@ -from __future__ import annotations - -import functools -import os -import site -import sys -import sysconfig - -from pip._internal.exceptions import InstallationError -from pip._internal.utils import appdirs -from pip._internal.utils.virtualenv import running_under_virtualenv - -# Application Directories -USER_CACHE_DIR = appdirs.user_cache_dir("pip") - -# FIXME doesn't account for venv linked to global site-packages -site_packages: str = sysconfig.get_path("purelib") - - -def get_major_minor_version() -> str: - """ - Return the major-minor version of the current Python as a string, e.g. - "3.7" or "3.10". - """ - return "{}.{}".format(*sys.version_info) - - -def change_root(new_root: str, pathname: str) -> str: - """Return 'pathname' with 'new_root' prepended. - - If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname). - Otherwise, it requires making 'pathname' relative and then joining the - two, which is tricky on DOS/Windows and Mac OS. - - This is borrowed from Python's standard library's distutils module. - """ - if os.name == "posix": - if not os.path.isabs(pathname): - return os.path.join(new_root, pathname) - else: - return os.path.join(new_root, pathname[1:]) - - elif os.name == "nt": - (drive, path) = os.path.splitdrive(pathname) - if path[0] == "\\": - path = path[1:] - return os.path.join(new_root, path) - - else: - raise InstallationError( - f"Unknown platform: {os.name}\n" - "Can not change root path prefix on unknown platform." - ) - - -def get_src_prefix() -> str: - if running_under_virtualenv(): - src_prefix = os.path.join(sys.prefix, "src") - else: - # FIXME: keep src in cwd for now (it is not a temporary folder) - try: - src_prefix = os.path.join(os.getcwd(), "src") - except OSError: - # In case the current working directory has been renamed or deleted - sys.exit("The folder you are executing pip from can no longer be found.") - - # under macOS + virtualenv sys.prefix is not properly resolved - # it is something like /path/to/python/bin/.. - return os.path.abspath(src_prefix) - - -try: - # Use getusersitepackages if this is present, as it ensures that the - # value is initialised properly. - user_site: str | None = site.getusersitepackages() -except AttributeError: - user_site = site.USER_SITE - - -@functools.cache -def is_osx_framework() -> bool: - return bool(sysconfig.get_config_var("PYTHONFRAMEWORK")) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/main.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/main.py deleted file mode 100644 index ec52c4e0c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/main.py +++ /dev/null @@ -1,12 +0,0 @@ -from __future__ import annotations - - -def main(args: list[str] | None = None) -> int: - """This is preserved for old console scripts that may still be referencing - it. - - For additional details, see https://github.com/pypa/pip/issues/7498. - """ - from pip._internal.utils.entrypoints import _wrapper - - return _wrapper(args) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__init__.py deleted file mode 100644 index 1c24efcde..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__init__.py +++ /dev/null @@ -1,169 +0,0 @@ -from __future__ import annotations - -import contextlib -import functools -import os -import sys -from typing import TYPE_CHECKING, Literal, Protocol, cast - -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.misc import strtobool - -from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel - -if TYPE_CHECKING: - from pip._vendor.packaging.utils import NormalizedName - -__all__ = [ - "BaseDistribution", - "BaseEnvironment", - "FilesystemWheel", - "MemoryWheel", - "Wheel", - "get_default_environment", - "get_environment", - "get_wheel_distribution", - "select_backend", -] - - -def _should_use_importlib_metadata() -> bool: - """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend. - - By default, pip uses ``importlib.metadata`` on Python 3.11+, and - ``pkg_resources`` otherwise. Up to Python 3.13, This can be - overridden by a couple of ways: - - * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it - dictates whether ``importlib.metadata`` is used, for Python <3.14. - * On Python 3.11, 3.12 and 3.13, Python distributors can patch - ``importlib.metadata`` to add a global constant - ``_PIP_USE_IMPORTLIB_METADATA = False``. This makes pip use - ``pkg_resources`` (unless the user set the aforementioned environment - variable to *True*). - - On Python 3.14+, the ``pkg_resources`` backend cannot be used. - """ - if sys.version_info >= (3, 14): - # On Python >=3.14 we only support importlib.metadata. - return True - with contextlib.suppress(KeyError, ValueError): - # On Python <3.14, if the environment variable is set, we obey what it says. - return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"])) - if sys.version_info < (3, 11): - # On Python <3.11, we always use pkg_resources, unless the environment - # variable was set. - return False - # On Python 3.11, 3.12 and 3.13, we check if the global constant is set. - import importlib.metadata - - return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True)) - - -def _emit_pkg_resources_deprecation_if_needed() -> None: - if sys.version_info < (3, 11): - # All pip versions supporting Python<=3.11 will support pkg_resources, - # and pkg_resources is the default for these, so let's not bother users. - return - - import importlib.metadata - - if hasattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA"): - # The Python distributor has set the global constant, so we don't - # warn, since it is not a user decision. - return - - # The user has decided to use pkg_resources, so we warn. - deprecated( - reason="Using the pkg_resources metadata backend is deprecated.", - replacement=( - "to use the default importlib.metadata backend, " - "by unsetting the _PIP_USE_IMPORTLIB_METADATA environment variable" - ), - gone_in="26.3", - issue=13317, - ) - - -class Backend(Protocol): - NAME: Literal["importlib", "pkg_resources"] - Distribution: type[BaseDistribution] - Environment: type[BaseEnvironment] - - -@functools.cache -def select_backend() -> Backend: - if _should_use_importlib_metadata(): - from . import importlib - - return cast(Backend, importlib) - - _emit_pkg_resources_deprecation_if_needed() - - from . import pkg_resources - - return cast(Backend, pkg_resources) - - -def get_default_environment() -> BaseEnvironment: - """Get the default representation for the current environment. - - This returns an Environment instance from the chosen backend. The default - Environment instance should be built from ``sys.path`` and may use caching - to share instance state across calls. - """ - return select_backend().Environment.default() - - -def get_environment(paths: list[str] | None) -> BaseEnvironment: - """Get a representation of the environment specified by ``paths``. - - This returns an Environment instance from the chosen backend based on the - given import paths. The backend must build a fresh instance representing - the state of installed distributions when this function is called. - """ - return select_backend().Environment.from_paths(paths) - - -def get_directory_distribution(directory: str) -> BaseDistribution: - """Get the distribution metadata representation in the specified directory. - - This returns a Distribution instance from the chosen backend based on - the given on-disk ``.dist-info`` directory. - """ - return select_backend().Distribution.from_directory(directory) - - -def get_wheel_distribution( - wheel: Wheel, canonical_name: NormalizedName -) -> BaseDistribution: - """Get the representation of the specified wheel's distribution metadata. - - This returns a Distribution instance from the chosen backend based on - the given wheel's ``.dist-info`` directory. - - :param canonical_name: Normalized project name of the given wheel. - """ - return select_backend().Distribution.from_wheel(wheel, canonical_name) - - -def get_metadata_distribution( - metadata_contents: bytes, - filename: str, - canonical_name: str, -) -> BaseDistribution: - """Get the dist representation of the specified METADATA file contents. - - This returns a Distribution instance from the chosen backend sourced from the data - in `metadata_contents`. - - :param metadata_contents: Contents of a METADATA file within a dist, or one served - via PEP 658. - :param filename: Filename for the dist this metadata represents. - :param canonical_name: Normalized project name of the given dist. - """ - return select_backend().Distribution.from_metadata_file_contents( - metadata_contents, - filename, - canonical_name, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 9b56489dc8eab0e23e93a2d11caba162a0e4e860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7865 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 F`aduZe>DIA diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-314.pyc deleted file mode 100644 index 08557a66a568a32de54e9253b15ca83a7b26f811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-314.pyc deleted file mode 100644 index 99fa9f6899a2a314f5a766c00858d546a582c82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41836 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-314.pyc deleted file mode 100644 index 5825ec22d17c4c9d6964b99862aaf910db907156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20598 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 UQReQraW~(0x$o~eBy8~iA0bu_`Tzg` diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/_json.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/_json.py deleted file mode 100644 index b39ac0545..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/_json.py +++ /dev/null @@ -1,87 +0,0 @@ -# Extracted from https://github.com/pfmoore/pkg_metadata -from __future__ import annotations - -from email.header import Header, decode_header, make_header -from email.message import Message -from typing import Any, cast - -METADATA_FIELDS = [ - # Name, Multiple-Use - ("Metadata-Version", False), - ("Name", False), - ("Version", False), - ("Dynamic", True), - ("Platform", True), - ("Supported-Platform", True), - ("Summary", False), - ("Description", False), - ("Description-Content-Type", False), - ("Keywords", False), - ("Home-page", False), - ("Download-URL", False), - ("Author", False), - ("Author-email", False), - ("Maintainer", False), - ("Maintainer-email", False), - ("License", False), - ("License-Expression", False), - ("License-File", True), - ("Classifier", True), - ("Requires-Dist", True), - ("Requires-Python", False), - ("Requires-External", True), - ("Project-URL", True), - ("Provides-Extra", True), - ("Provides-Dist", True), - ("Obsoletes-Dist", True), -] - - -def json_name(field: str) -> str: - return field.lower().replace("-", "_") - - -def msg_to_json(msg: Message) -> dict[str, Any]: - """Convert a Message object into a JSON-compatible dictionary.""" - - def sanitise_header(h: Header | str) -> str: - if isinstance(h, Header): - chunks = [] - for bytes, encoding in decode_header(h): - if encoding == "unknown-8bit": - try: - # See if UTF-8 works - bytes.decode("utf-8") - encoding = "utf-8" - except UnicodeDecodeError: - # If not, latin1 at least won't fail - encoding = "latin1" - chunks.append((bytes, encoding)) - return str(make_header(chunks)) - return str(h) - - result = {} - for field, multi in METADATA_FIELDS: - if field not in msg: - continue - key = json_name(field) - if multi: - value: str | list[str] = [ - sanitise_header(v) for v in msg.get_all(field) # type: ignore - ] - else: - value = sanitise_header(msg.get(field)) # type: ignore - if key == "keywords": - # Accept both comma-separated and space-separated - # forms, for better compatibility with old data. - if "," in value: - value = [v.strip() for v in value.split(",")] - else: - value = value.split() - result[key] = value - - payload = cast(str, msg.get_payload()) - if payload: - result["description"] = payload - - return result diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/base.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/base.py deleted file mode 100644 index 230e11473..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/base.py +++ /dev/null @@ -1,685 +0,0 @@ -from __future__ import annotations - -import csv -import email.message -import functools -import json -import logging -import pathlib -import re -import zipfile -from collections.abc import Collection, Container, Iterable, Iterator -from typing import ( - IO, - Any, - NamedTuple, - Protocol, - Union, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.exceptions import NoneMetadataError -from pip._internal.locations import site_packages, user_site -from pip._internal.models.direct_url import ( - DIRECT_URL_METADATA_NAME, - DirectUrl, - DirectUrlValidationError, -) -from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here. -from pip._internal.utils.egg_link import egg_link_path_from_sys_path -from pip._internal.utils.misc import is_local, normalize_path -from pip._internal.utils.urls import url_to_path - -from ._json import msg_to_json - -InfoPath = Union[str, pathlib.PurePath] - -logger = logging.getLogger(__name__) - - -class BaseEntryPoint(Protocol): - @property - def name(self) -> str: - raise NotImplementedError() - - @property - def value(self) -> str: - raise NotImplementedError() - - @property - def group(self) -> str: - raise NotImplementedError() - - -def _convert_installed_files_path( - entry: tuple[str, ...], - info: tuple[str, ...], -) -> str: - """Convert a legacy installed-files.txt path into modern RECORD path. - - The legacy format stores paths relative to the info directory, while the - modern format stores paths relative to the package root, e.g. the - site-packages directory. - - :param entry: Path parts of the installed-files.txt entry. - :param info: Path parts of the egg-info directory relative to package root. - :returns: The converted entry. - - For best compatibility with symlinks, this does not use ``abspath()`` or - ``Path.resolve()``, but tries to work with path parts: - - 1. While ``entry`` starts with ``..``, remove the equal amounts of parts - from ``info``; if ``info`` is empty, start appending ``..`` instead. - 2. Join the two directly. - """ - while entry and entry[0] == "..": - if not info or info[-1] == "..": - info += ("..",) - else: - info = info[:-1] - entry = entry[1:] - return str(pathlib.Path(*info, *entry)) - - -class RequiresEntry(NamedTuple): - requirement: str - extra: str - marker: str - - -class BaseDistribution(Protocol): - @classmethod - def from_directory(cls, directory: str) -> BaseDistribution: - """Load the distribution from a metadata directory. - - :param directory: Path to a metadata directory, e.g. ``.dist-info``. - """ - raise NotImplementedError() - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> BaseDistribution: - """Load the distribution from the contents of a METADATA file. - - This is used to implement PEP 658 by generating a "shallow" dist object that can - be used for resolution without downloading or building the actual dist yet. - - :param metadata_contents: The contents of a METADATA file. - :param filename: File name for the dist with this metadata. - :param project_name: Name of the project this dist represents. - """ - raise NotImplementedError() - - @classmethod - def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: - """Load the distribution from a given wheel. - - :param wheel: A concrete wheel definition. - :param name: File name of the wheel. - - :raises InvalidWheel: Whenever loading of the wheel causes a - :py:exc:`zipfile.BadZipFile` exception to be thrown. - :raises UnsupportedWheel: If the wheel is a valid zip, but malformed - internally. - """ - raise NotImplementedError() - - def __repr__(self) -> str: - return f"{self.raw_name} {self.raw_version} ({self.location})" - - def __str__(self) -> str: - return f"{self.raw_name} {self.raw_version}" - - @property - def location(self) -> str | None: - """Where the distribution is loaded from. - - A string value is not necessarily a filesystem path, since distributions - can be loaded from other sources, e.g. arbitrary zip archives. ``None`` - means the distribution is created in-memory. - - Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If - this is a symbolic link, we want to preserve the relative path between - it and files in the distribution. - """ - raise NotImplementedError() - - @property - def editable_project_location(self) -> str | None: - """The project location for editable distributions. - - This is the directory where pyproject.toml or setup.py is located. - None if the distribution is not installed in editable mode. - """ - # TODO: this property is relatively costly to compute, memoize it ? - direct_url = self.direct_url - if direct_url: - if direct_url.is_local_editable(): - return url_to_path(direct_url.url) - else: - # Search for an .egg-link file by walking sys.path, as it was - # done before by dist_is_editable(). - egg_link_path = egg_link_path_from_sys_path(self.raw_name) - if egg_link_path: - # TODO: get project location from second line of egg_link file - # (https://github.com/pypa/pip/issues/10243) - return self.location - return None - - @property - def installed_location(self) -> str | None: - """The distribution's "installed" location. - - This should generally be a ``site-packages`` directory. This is - usually ``dist.location``, except for legacy develop-installed packages, - where ``dist.location`` is the source code location, and this is where - the ``.egg-link`` file is. - - The returned location is normalized (in particular, with symlinks removed). - """ - raise NotImplementedError() - - @property - def info_location(self) -> str | None: - """Location of the .[egg|dist]-info directory or file. - - Similarly to ``location``, a string value is not necessarily a - filesystem path. ``None`` means the distribution is created in-memory. - - For a modern .dist-info installation on disk, this should be something - like ``{location}/{raw_name}-{version}.dist-info``. - - Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If - this is a symbolic link, we want to preserve the relative path between - it and other files in the distribution. - """ - raise NotImplementedError() - - @property - def installed_by_distutils(self) -> bool: - """Whether this distribution is installed with legacy distutils format. - - A distribution installed with "raw" distutils not patched by setuptools - uses one single file at ``info_location`` to store metadata. We need to - treat this specially on uninstallation. - """ - info_location = self.info_location - if not info_location: - return False - return pathlib.Path(info_location).is_file() - - @property - def installed_as_egg(self) -> bool: - """Whether this distribution is installed as an egg. - - This usually indicates the distribution was installed by (older versions - of) easy_install. - """ - location = self.location - if not location: - return False - # XXX if the distribution is a zipped egg, location has a trailing / - # so we resort to pathlib.Path to check the suffix in a reliable way. - return pathlib.Path(location).suffix == ".egg" - - @property - def installed_with_setuptools_egg_info(self) -> bool: - """Whether this distribution is installed with the ``.egg-info`` format. - - This usually indicates the distribution was installed with setuptools - with an old pip version or with ``single-version-externally-managed``. - - Note that this ensure the metadata store is a directory. distutils can - also installs an ``.egg-info``, but as a file, not a directory. This - property is *False* for that case. Also see ``installed_by_distutils``. - """ - info_location = self.info_location - if not info_location: - return False - if not info_location.endswith(".egg-info"): - return False - return pathlib.Path(info_location).is_dir() - - @property - def installed_with_dist_info(self) -> bool: - """Whether this distribution is installed with the "modern format". - - This indicates a "modern" installation, e.g. storing metadata in the - ``.dist-info`` directory. This applies to installations made by - setuptools (but through pip, not directly), or anything using the - standardized build backend interface (PEP 517). - """ - info_location = self.info_location - if not info_location: - return False - if not info_location.endswith(".dist-info"): - return False - return pathlib.Path(info_location).is_dir() - - @property - def canonical_name(self) -> NormalizedName: - raise NotImplementedError() - - @property - def version(self) -> Version: - raise NotImplementedError() - - @property - def raw_version(self) -> str: - raise NotImplementedError() - - @property - def setuptools_filename(self) -> str: - """Convert a project name to its setuptools-compatible filename. - - This is a copy of ``pkg_resources.to_filename()`` for compatibility. - """ - return self.raw_name.replace("-", "_") - - @property - def direct_url(self) -> DirectUrl | None: - """Obtain a DirectUrl from this distribution. - - Returns None if the distribution has no `direct_url.json` metadata, - or if `direct_url.json` is invalid. - """ - try: - content = self.read_text(DIRECT_URL_METADATA_NAME) - except FileNotFoundError: - return None - try: - return DirectUrl.from_json(content) - except ( - UnicodeDecodeError, - json.JSONDecodeError, - DirectUrlValidationError, - ) as e: - logger.warning( - "Error parsing %s for %s: %s", - DIRECT_URL_METADATA_NAME, - self.canonical_name, - e, - ) - return None - - @property - def installer(self) -> str: - try: - installer_text = self.read_text("INSTALLER") - except (OSError, ValueError, NoneMetadataError): - return "" # Fail silently if the installer file cannot be read. - for line in installer_text.splitlines(): - cleaned_line = line.strip() - if cleaned_line: - return cleaned_line - return "" - - @property - def requested(self) -> bool: - return self.is_file("REQUESTED") - - @property - def editable(self) -> bool: - return bool(self.editable_project_location) - - @property - def local(self) -> bool: - """If distribution is installed in the current virtual environment. - - Always True if we're not in a virtualenv. - """ - if self.installed_location is None: - return False - return is_local(self.installed_location) - - @property - def in_usersite(self) -> bool: - if self.installed_location is None or user_site is None: - return False - return self.installed_location.startswith(normalize_path(user_site)) - - @property - def in_site_packages(self) -> bool: - if self.installed_location is None or site_packages is None: - return False - return self.installed_location.startswith(normalize_path(site_packages)) - - def is_file(self, path: InfoPath) -> bool: - """Check whether an entry in the info directory is a file.""" - raise NotImplementedError() - - def iter_distutils_script_names(self) -> Iterator[str]: - """Find distutils 'scripts' entries metadata. - - If 'scripts' is supplied in ``setup.py``, distutils records those in the - installed distribution's ``scripts`` directory, a file for each script. - """ - raise NotImplementedError() - - def read_text(self, path: InfoPath) -> str: - """Read a file in the info directory. - - :raise FileNotFoundError: If ``path`` does not exist in the directory. - :raise NoneMetadataError: If ``path`` exists in the info directory, but - cannot be read. - """ - raise NotImplementedError() - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - raise NotImplementedError() - - def _metadata_impl(self) -> email.message.Message: - raise NotImplementedError() - - @functools.cached_property - def metadata(self) -> email.message.Message: - """Metadata of distribution parsed from e.g. METADATA or PKG-INFO. - - This should return an empty message if the metadata file is unavailable. - - :raises NoneMetadataError: If the metadata file is available, but does - not contain valid metadata. - """ - metadata = self._metadata_impl() - self._add_egg_info_requires(metadata) - return metadata - - @property - def metadata_dict(self) -> dict[str, Any]: - """PEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO. - - This should return an empty dict if the metadata file is unavailable. - - :raises NoneMetadataError: If the metadata file is available, but does - not contain valid metadata. - """ - return msg_to_json(self.metadata) - - @property - def metadata_version(self) -> str | None: - """Value of "Metadata-Version:" in distribution metadata, if available.""" - return self.metadata.get("Metadata-Version") - - @property - def raw_name(self) -> str: - """Value of "Name:" in distribution metadata.""" - # The metadata should NEVER be missing the Name: key, but if it somehow - # does, fall back to the known canonical name. - return self.metadata.get("Name", self.canonical_name) - - @property - def requires_python(self) -> SpecifierSet: - """Value of "Requires-Python:" in distribution metadata. - - If the key does not exist or contains an invalid value, an empty - SpecifierSet should be returned. - """ - value = self.metadata.get("Requires-Python") - if value is None: - return SpecifierSet() - try: - # Convert to str to satisfy the type checker; this can be a Header object. - spec = SpecifierSet(str(value)) - except InvalidSpecifier as e: - message = "Package %r has an invalid Requires-Python: %s" - logger.warning(message, self.raw_name, e) - return SpecifierSet() - return spec - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - """Dependencies of this distribution. - - For modern .dist-info distributions, this is the collection of - "Requires-Dist:" entries in distribution metadata. - """ - raise NotImplementedError() - - def iter_raw_dependencies(self) -> Iterable[str]: - """Raw Requires-Dist metadata.""" - return self.metadata.get_all("Requires-Dist", []) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - """Extras provided by this distribution. - - For modern .dist-info distributions, this is the collection of - "Provides-Extra:" entries in distribution metadata. - - The return value of this function is expected to be normalised names, - per PEP 685, with the returned value being handled appropriately by - `iter_dependencies`. - """ - raise NotImplementedError() - - def _iter_declared_entries_from_record(self) -> Iterator[str] | None: - try: - text = self.read_text("RECORD") - except FileNotFoundError: - return None - # This extra Path-str cast normalizes entries. - return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines())) - - def _iter_declared_entries_from_legacy(self) -> Iterator[str] | None: - try: - text = self.read_text("installed-files.txt") - except FileNotFoundError: - return None - paths = (p for p in text.splitlines(keepends=False) if p) - root = self.location - info = self.info_location - if root is None or info is None: - return paths - try: - info_rel = pathlib.Path(info).relative_to(root) - except ValueError: # info is not relative to root. - return paths - if not info_rel.parts: # info *is* root. - return paths - return ( - _convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts) - for p in paths - ) - - def iter_declared_entries(self) -> Iterator[str] | None: - """Iterate through file entries declared in this distribution. - - For modern .dist-info distributions, this is the files listed in the - ``RECORD`` metadata file. For legacy setuptools distributions, this - comes from ``installed-files.txt``, with entries normalized to be - compatible with the format used by ``RECORD``. - - :return: An iterator for listed entries, or None if the distribution - contains neither ``RECORD`` nor ``installed-files.txt``. - """ - return ( - self._iter_declared_entries_from_record() - or self._iter_declared_entries_from_legacy() - ) - - def _iter_requires_txt_entries(self) -> Iterator[RequiresEntry]: - """Parse a ``requires.txt`` in an egg-info directory. - - This is an INI-ish format where an egg-info stores dependencies. A - section name describes extra other environment markers, while each entry - is an arbitrary string (not a key-value pair) representing a dependency - as a requirement string (no markers). - - There is a construct in ``importlib.metadata`` called ``Sectioned`` that - does mostly the same, but the format is currently considered private. - """ - try: - content = self.read_text("requires.txt") - except FileNotFoundError: - return - extra = marker = "" # Section-less entries don't have markers. - for line in content.splitlines(): - line = line.strip() - if not line or line.startswith("#"): # Comment; ignored. - continue - if line.startswith("[") and line.endswith("]"): # A section header. - extra, _, marker = line.strip("[]").partition(":") - continue - yield RequiresEntry(requirement=line, extra=extra, marker=marker) - - def _iter_egg_info_extras(self) -> Iterable[str]: - """Get extras from the egg-info directory.""" - known_extras = {""} - for entry in self._iter_requires_txt_entries(): - extra = canonicalize_name(entry.extra) - if extra in known_extras: - continue - known_extras.add(extra) - yield extra - - def _iter_egg_info_dependencies(self) -> Iterable[str]: - """Get distribution dependencies from the egg-info directory. - - To ease parsing, this converts a legacy dependency entry into a PEP 508 - requirement string. Like ``_iter_requires_txt_entries()``, there is code - in ``importlib.metadata`` that does mostly the same, but not do exactly - what we need. - - Namely, ``importlib.metadata`` does not normalize the extra name before - putting it into the requirement string, which causes marker comparison - to fail because the dist-info format do normalize. This is consistent in - all currently available PEP 517 backends, although not standardized. - """ - for entry in self._iter_requires_txt_entries(): - extra = canonicalize_name(entry.extra) - if extra and entry.marker: - marker = f'({entry.marker}) and extra == "{extra}"' - elif extra: - marker = f'extra == "{extra}"' - elif entry.marker: - marker = entry.marker - else: - marker = "" - if marker: - yield f"{entry.requirement} ; {marker}" - else: - yield entry.requirement - - def _add_egg_info_requires(self, metadata: email.message.Message) -> None: - """Add egg-info requires.txt information to the metadata.""" - if not metadata.get_all("Requires-Dist"): - for dep in self._iter_egg_info_dependencies(): - metadata["Requires-Dist"] = dep - if not metadata.get_all("Provides-Extra"): - for extra in self._iter_egg_info_extras(): - metadata["Provides-Extra"] = extra - - -class BaseEnvironment: - """An environment containing distributions to introspect.""" - - @classmethod - def default(cls) -> BaseEnvironment: - raise NotImplementedError() - - @classmethod - def from_paths(cls, paths: list[str] | None) -> BaseEnvironment: - raise NotImplementedError() - - def get_distribution(self, name: str) -> BaseDistribution | None: - """Given a requirement name, return the installed distributions. - - The name may not be normalized. The implementation must canonicalize - it for lookup. - """ - raise NotImplementedError() - - def _iter_distributions(self) -> Iterator[BaseDistribution]: - """Iterate through installed distributions. - - This function should be implemented by subclass, but never called - directly. Use the public ``iter_distribution()`` instead, which - implements additional logic to make sure the distributions are valid. - """ - raise NotImplementedError() - - def iter_all_distributions(self) -> Iterator[BaseDistribution]: - """Iterate through all installed distributions without any filtering.""" - for dist in self._iter_distributions(): - # Make sure the distribution actually comes from a valid Python - # packaging distribution. Pip's AdjacentTempDirectory leaves folders - # e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The - # valid project name pattern is taken from PEP 508. - project_name_valid = re.match( - r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", - dist.canonical_name, - flags=re.IGNORECASE, - ) - if not project_name_valid: - logger.warning( - "Ignoring invalid distribution %s (%s)", - dist.canonical_name, - dist.location, - ) - continue - yield dist - - def iter_installed_distributions( - self, - local_only: bool = True, - skip: Container[str] = stdlib_pkgs, - include_editables: bool = True, - editables_only: bool = False, - user_only: bool = False, - ) -> Iterator[BaseDistribution]: - """Return a list of installed distributions. - - This is based on ``iter_all_distributions()`` with additional filtering - options. Note that ``iter_installed_distributions()`` without arguments - is *not* equal to ``iter_all_distributions()``, since some of the - configurations exclude packages by default. - - :param local_only: If True (default), only return installations - local to the current virtualenv, if in a virtualenv. - :param skip: An iterable of canonicalized project names to ignore; - defaults to ``stdlib_pkgs``. - :param include_editables: If False, don't report editables. - :param editables_only: If True, only report editables. - :param user_only: If True, only report installations in the user - site directory. - """ - it = self.iter_all_distributions() - if local_only: - it = (d for d in it if d.local) - if not include_editables: - it = (d for d in it if not d.editable) - if editables_only: - it = (d for d in it if d.editable) - if user_only: - it = (d for d in it if d.in_usersite) - return (d for d in it if d.canonical_name not in skip) - - -class Wheel(Protocol): - location: str - - def as_zipfile(self) -> zipfile.ZipFile: - raise NotImplementedError() - - -class FilesystemWheel(Wheel): - def __init__(self, location: str) -> None: - self.location = location - - def as_zipfile(self) -> zipfile.ZipFile: - return zipfile.ZipFile(self.location, allowZip64=True) - - -class MemoryWheel(Wheel): - def __init__(self, location: str, stream: IO[bytes]) -> None: - self.location = location - self.stream = stream - - def as_zipfile(self) -> zipfile.ZipFile: - return zipfile.ZipFile(self.stream, allowZip64=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py deleted file mode 100644 index a779138db..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from ._dists import Distribution -from ._envs import Environment - -__all__ = ["NAME", "Distribution", "Environment"] - -NAME = "importlib" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 277bbfe9983f44bea294f5473b7018042bd41f5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmX|7!Ab)$6im9?R$J>q@M;B5RoZn?#EJ-_g%-5RqPJkkc7w+5W|!o(+FSABANUU* z{S}W31<{M%g#LipqQ1ktnKy4jl8wbm37L9*`4o?)e`MmXa=&D{Zpav2VGnmu8w0Lp zJlDy!EwHMnfxP?~2HUeB@7ZgpR`|juP{ZlMvCyD|KL8O+qsuKh6e^YxmyphjD2Ww> z!td6s)b1Xhwv=UZ%Fe=tv_J!s*0Wifr(6#8%u0)tvM{7n70lu@ni@pu)6pKe)Ld!8 z0<PR<bCcY~s!tLX-|`-4(hK83;4{tZLJBaT!JNWX-6iKExQXSKyG^(0{q7FE;87AX z;1r^SoCu$20lc2DUY}iaO%jnfR7l`Tve1b*uz&$`{-5Je;|id(k&M#0{U{CwAwN(R gbIt5u^s<3(3u8P%s}r>HUUJ99x8l-+t;)vv0oQ+YP5=M^ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-314.pyc deleted file mode 100644 index cba284617766b04764fa2655e6c050aac5907115..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5327 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 brDkr;Zz^cMK8$4W>%EAZ503+((gyzlV4BiI diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-314.pyc deleted file mode 100644 index ec9f5d8899f51f94b50bca95e581f20059e390cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16234 zcmcJ0eQ+B`c4rTO0R|r=NCNy8MUa#zLNZB9qWnS0lBlnclBIAVirVZ_hCpH@!Uh3& zX1J1=&936T+oDscI(cumL~m_krq;<)m%XwsSCwd!O2u;iNdDNW0|eQSXXUc@;;W1Q zBSYzA@BVT3dp#I@kg(`o=UU>MH$6Q)-LKz!{od<`9o1DXhH~e>{cG&w0Av3`H)atH zL|B~^7`w_|U?E|I4GWskPPk>nqFMRXriuJ&*X;c2&>Xm0N2Fn=<{Wluu3@+49`<OS z;VP|)ziS(*9`<Tpj*BBT!?jv1$L%9^!#>T&amR>%xL&ItZqOR|y)@D|+@v*e+zGr{ zYvH(Sq;+_cwrRLcYvcFsk<G*HTKjN73k-K?9mAbkC$IO6bPaFOws5>^Wb1IZ*3I$i zk!{00S`Wv)Bf;VA+V<fc+78?cp_-8=hI_T%;XbWzxL@lZeo}j~oz=4r7OHJzp}KS8 z=%h)k;&n7y#7%6#YGB%K{<aTq`_Hu(YIlV!T`XAt2{j4|x;v6cB(;bZOD5D)K~Z-d zPR8T%6y596h$btM$+(=yw4|atPDWCxSmL5Cot9sol@n7kI*~>r+Vu0Wmk75_MO2MC z4&ixBk!R$D7PRQqr;^G{Bp#cSqo*P>vR*qCNhA}oDP9#$pbGCe#$`ptmw}3@h@#4P z(KC|x1{y`rPRnv!uQ`)YXH%)9qRB>0(5BZMim39Dn5rqU$yq+|YN|P!(3C5q$yh?e z@Dmr3G)7(I-Jt*KggKsY3J*}@y(nv8rDV{8UNt7qq>f+`Q<(Y{493kz6~4sB(xk|d zsDX!PWGxbnXp!)RSX{=K+=n93lleMbqT%q*H_|tv7;3mMeLi=6yU{VxAsk6W!{0Cn z5x$@#XTmXz9&hD`F=Z|^UGr-#te(fsRd$YPLWpUW7rHfTNYHE{3s&FS$l^7cc+MWO z;ZCHx0eTljbA;@ubMO{YNCNKUxHIGe?&i2F<k8%rDsWA;Ud!oMO6<sggv1Ud0_V@i zW@ugFvB^G@8hxb=&z}zv!2&d;KqSCv*ynN$#kJ|=?8WKI9T3&lbP}1Gl2e+B_H(fm zk-Lu?oj?DCD~4JOBF=e^vveS)2DD@{&>4@+UFi&5NGgF;EVWGyBxE_N26`^Z0W8Ee zE%1^orvlov9Qax+bqsyFrm+ffIgm`r3H};A11Dn<0`b@dS&Pl!;RXH*t*6O)f#l?i z;FcgJHa3lquNjUUxhN~~E1VD*S+P%(Vu8Xk2f(;VYT}xaXTW{9S2fV@i2z1M<5D7; ztQyqRrXyOPYYGd&=#PpWe_#$_bqkQIY@EGddFDSb7De4A_7!1T2niue$QrVR#E`w; zip6z&VnI_~B$BFgTk~@Mb&?KR)6rQ)9!;vT%S7!b0+Uzp^>ca^=goL>ij#Y;zG7?L zuE^S~lF)6Zk_q_+sU16(VkV-gG~7=8`-cZ7&ZuDdiAYpdc0T*;lM|Pc%1aX|B}vp& zC#K@b+2|yss5h2~X#lDgftpf!cTS960ska+?;HpZgfBnyRG36I4$_3RnbgGdvB?QF zrpdjj$ka=qy*h#A?}tD^u_Yq$ev|C|1>WuF;;HtfuIQdHM3E~;IULqEujBl_(&sxd z5w(ZY`Vq5>J5~sM<Q-TRab32vrru=-VG?syuQ-9NqAi=s%P--K$d7yH>SiEU+1Z)| z)$(#SkT4gPg;*E6A)LBl(d}H@s0uA{(5l;1IetOu!VRxcsqgOYZY7ATE`>4cn1+e8 zRGNtKj8DRg=2zLWi#2ZgWB0wb?e9q~$`hz7V=oC6=wDbhru<m;vW4s+N52g$CMlgX z7R%g)Ij<?ad4bbyr2BL$L`j!Sep0rgxe_3-4In5e^f`lR__UPm^lS&fAU)UxaFsn` zwPJ9Ez(=0eWf51<-&?orAWUMuhGi#VF6L@oaRW1EXT!T@aRT8haUV#;b(KvNsDHL@ zfYu4+60S*C$~NxW4V?>3DUA!GMDsPp)U`Ft#8Tq8Si{cP&p2kS{cP59tk&pFxj62a z$Xh~;ooz6`G-)~E17EPsEG4DvDaQl}H!q{K4r@vW8@HZzneV2Y<FFylzG~ig;d||D z)|zsp>@iT3ud3Mt^|qT<^>2af6FONt$T`N2jWU)JFuMX3%oi9tZSjC3cUcDV&uE>f zTm&UHu@mi#jSCZbiZM1?N@b%VMu(mq`J0kU2v(6f>X7A$mf|DxTe~fn*;TQfod_A! z2?<?nk2NMh7KHv&pZs4GY{f3<3Pn>d#jyQ5^7=`yDpO~=sHWmE4ewd{o>ZQ~mvqV8 zbPX{ITs6eVx$mN!kT0i{{rb-Ja>RFQld<;^7su88eT7$s(6M?F;L}e)*JWm_b^Wqw z>owawukSy7`_*qR_AIt6?Oga)&fE7uWL1ZR`LXXmo%8kF@%1eE-)gzha`W)5+H7#| ztwZky4`h7@-}MarqG{`ADp}Rv*)-HDy!kXhP*j@v1W2CZv^5dsl>Gz_00iB-bt<kZ zd#Hk@syqXr3t=+3v}skBF3iT`gz64O=15VeD2LEibpt@LbO(4jXi&yeI{8Z4vh?}0 z)Xg^mKE28wRI|p;#m;QQj#u6D(zT8U7SQFRrj|F{ue*O#wJPFnUR<eW-8&wLR#0r~ z_DoI3HEG$(s{D8BdzU7&^?UDl_P)P$`?AQK)hi5*9!RV?kZbC_)6}~(eM`zV4b4}* z@2$JGC+qD=OFf^hy3t4_QG2U#sK;KW+K5HDY6}2)+|Jo=fl3n%m1ZM?DSo`cb=F)v zH=SWMR^C6)ZK%(PP1IICf=A3IcCQdv7zWdb-Ra;kzcmzBLAcPEX2ccOpYk^+0F5$Q z+A3ey!HUXeTrh>oypFTcf|@aVVT=|o+CZW`K}wRB$}P=)y4VEqi_x<1m1#lgLsigT zWK890R47jZ=r(NGie5{G*r}v;EIFHq9#xd2a>Js~7Nwj5P-#Zy?&hEuU^?l|>xDA^ zh!d1Pag}}SuFJUtcie$DeT!p1ZqB-QENO53{*B+i>mI!CYh17q=Vg6c(w;5%tJ@cC z+3KxnY3uqu@V8<ViOee!O=G&W!TkyvN(p>3K*rIAd~uqlP7+P~oLls-5LoP5rpwZH zez%@2NUw9Y*bFUwm9@eggi2pmHrCVTqLymol%<u8Sw;)&Q0z8TSniZ{3?^oP6?ZN> zi-K7<VTWns7EO%pwYIUCfHpizK)s+1cB4%!WgBCoo?^cyHd<|B#cN6oS;j={N!BqN zplwV56n9~_o4_t>lrg(G517H|{eUednBNcDPtA$5+J)X{<~DJj3q<9qWE386z%&-Q zKQLz*49wYJln3U-0Ig}z$$7WP&$@I%zQViE?Ys|JuR8;eHyM?WP?s`)#!WTd4)+h< zg+fCNIt(Ts2d>-5snl(nd|A^4Sr;#H&r_618dTae^IAB+J8_ScH*Q@o2!)57hkk&U zu?bnM&Zc|5#_M}u+xw$Sx%PoO?E^Qznr+|zuJ6G7k!8E++@62Ba4GBChAJ1U@z1+I zeNfA4njSF0*`)g#m#w(|8cMgO^8vHs6@OFC-<|Py=ls1HfA9R!dkwp8?zy?`R^6?k zTf1*X-+t!p?f-l<?GMc#y<gY4xF=f|OnZXAUUuN!U#Z;~*(=+gWB;Xg$jkoTJ>;?8 zb_)c(?n8hry@wpucN`+{FRiz^CYkdY@;3?<PC<;X<My1P#yzCgx%WfreIpz6JO*CS z*;cU=TannA4(wj0>n#tzT`!zuIC0@5ZicA|XcSXN3c3$kaKv<MWkVM#FnY?Bpqrb` zGIt8}w)N{@^7uTxOLB(o7q)R{TI%2fQ~FVND(E41fyW}kx+@%>Nk(Vm<O9JYdU-Yy z&p+{o@hL@x$DfcBNj!Fh!_nkaIINHzuDhq=5mklIOedqt3DhXWcgiGzi`1Y#9ENG8 z#iqg$&2XS)6)zK&jll#73z&e|LM0RWyKKcGiPA$q`BOE_Ui-iTD}L1qY?-i!-Pj`^ zdY}*=wV115bVz+o;jd6YcPhf_L9Q4J;gbs#K0yEk;S+>TZ0AG@qEPsxBy?g&ErKZ& zKq;wppcdg23Z<0PO6QyuSfQXwNv#XD2(g4bWwmb9R-v}Ktk#2CFKTPbYO7Go!-HkD z)u`oRzp`3ys2=Y(P@Ps2Y6RZI@!C)`@D`5Og<64c;<zu=27EKe{h@Z?0gl&)wuU-z z*GYGAL2C$gX^o*Ru!XvHPid^COgi&h&~N83+9<>_*IsbaD+idkDxLG1!M6O4s@Iv( zf@rwhuOx<goJ{M@rL!sX_KANB-lilzwZZ^Cs_tDDaV2km+p>c&iM2hk>?91{X7!32 zn4th{#CG{Yh74B#<jj7)-+%VWM8Sxo7yvh*Zdi4ZM=bPeBTQ&cQTO5Ah>{fN9kdx+ zi;53%YAG5pl?Frhyx~%F;jLdYbt68&r(MrSx$I#LEr0B~w|U21sr6php7*4HF*8zU z^hbp{#>|A(0FW<gN;?Z7u%d~i)S-jNt(7uM4e(c@fA^EZ-M^@k`rV)IKfrH|K^6#! zHwrfMU*M)x|5mn{i<WZAGC>pMrIM{&$vGb_*uv(UaF7embIQt{^<CqZO6HCk!p|=~ z>;!V^bQ|qky0ai0x?~zE%FFcJ644aeRIvERa8dq%z!n0;2KmJg1PlwJntN%570_GD z_@MkD^{$dj35&X^{SD6#J&V7WZR($|y6<huc{?)R4tTN|Z(q*4GvnQPvp4HKIBz2_ zY+$J>*RwCvvoGs?E-gK`o^QUCvZytuAD&7g&X>?sUF6Y9g)A!0Q@SS~S>&6X5oP*9 z9Cn$eyo*oy5vvyWtPuF9HLxt=3b{vY$w8RJ8e5i~ghB3GR@}hW%e@2raJg^dn@@4$ zugrKwXDx)&v5@8IJQG)9J=4BLbjlX8K2gGS6nm;<s~6e2y~F~q#D<lu?$Ls6jXC8D zzC$!!Qwk%qb5@rtwF%jZtPThJ57EUK4qt39#S&4y=3+cKiQw;*@Ju9ukZx3$P97Z_ zIx;jibSmgF%<pgG4W)?yd5XIGk^(0%Y%sx9s-`ZvbSSS7#>K;7h{t!Sf^*6|FkR9R zPo~2cy{f=h+}G#ALra*Cgc$PE%0;Bmk{p8~8}_UhrphfZp<9)-8O*a9=5M{e?|b|1 zdzu&KZXLPn8OnK%Wjx1Ltrov)UINoKcPtLR+tfQ>bx*3#NgWxfBi*_Ct~Bs*Wiia{ zI+odWEbIN9yfEgPdo#_wOIp@Dkd_A43!@$5;7Xiy#^aQD@g#xAM3nPruh4E`gqgT| zPyX%~Q|7OtrMeA(99_FOCQw9uOjwv*=GUde#x*@~#CTu~90M(sf_z=(@&&KAVg%ES z%I+1y!mMT18ZO3ZttB2YZ4+zC*<I+7$g`%H+?%pNQt{8cZ$~V(gMHODW~(Ga6E$Wx zm1LrWjaB{@=0?T*26@>#7}1T&Md*l4EQW}08$50L_xz!PpG{hpm(ha9ZPsw#yN&za z;zX5MTX_Uy7BfmaCQe)6Pm2e{qCahfd0e_HqK5O4QNyI?9sv(MI`Z|p3x}rp;{b(- zVeC@H$fezo(DU@@DFS;4aAPJ6Or@nT!jgtCy0|bJE_360+2apL$kjgrfG=#bIrrVG zZOGMjWNJHdwOw~>yB3xEjXk->J(<QmHz(f~|Ec<Rb+++$uh|}1S>2WuIJ~}V0}K9K z^NvjOj-Q^*^&Yy@d+6;w|Fr-1{%mh3>ph*8PCs&@DSG?$$KD2GTO_x6-~GDH3$t&0 z>-BFz^6Ca|b)-Fee@%Y$zF(=kF`QSL4oU2X9YcG>zmtI7-s3(bI^SV7;O~f5f>QmV zXRYtFH69wUzB3>KFSEC4bKp|DiO;R_0ZqSvqa>>#tz0tCqVa}i*7wjz_3>^W!L;fp zyQ+Tyu_s)L>I2VtA&JDFbM-tBQXiEfPZ!W)6ORK;P<vh~x2$x6VD2fVVPsXVpa;Wx zB-MUH;ASsBH_98iobk$yT+?!X4R7R6@;-8VbMDO<_vSn9?)QC-_sMq2`MNW{?wqeT z<AX)hmzMg9bI!}6d6FlrZbW?Lhcr-<*3UcJBD;2hMpPtt4^g^jVUAylA4elz3Iu;1 zw_l#%Yl&+qA?}axg;J_+!M)y6CTV5o!`G>OCm+`5lQ!$!mX@{^=k@=Is1zYDA?kBP z&F2=6^GosLXv9mwNq7ObzX?%`R$FC$Hpy#Vi#$AsFDVTK_|CbO*5tYA?Q3Yg*5UgT zG|F$HoZwv<ch?>F4$jMMKbl(HlItAIbPi@W@6CGmrKNqviT}n_50>f?3f6AO)^F0_ zOtu!p-75@W5eGQ96bFJvycF1)&Z6O_nFAz^LdtGUSxZlgg6)hcmkF#PrCz-z8K>Oo zDS!B5bfA*83#Z51y{P?U?$743-d$;FS8>SZ(7vz^E~6cV0XL-G5)FfxgRCP-JOk^9 z;6kHuEsh0Ec*$FF&Q%?^bOi843HX9g8tmUI6ikaoQrYdFL;gx?IweeyNybaj-5`Ty zqF{<3<d4%!>bH1mgy4UL1uk`gri<Zw>nBA0IRxf;)>tuUPvP||f%Eyqs`HeCf`GV+ zWHY<68Lx2G&>i{bdX<roW!^f+uB7q-dpeX0<`1HN3fwq|GW=(SDs+FDROY+*2{n}g z$k1>&&j=sa4Bi^}hryo>W^0bU{qnmtBafI++r3PHLhggF4d#4XGrp}j)vWR(w(jp( zY|Q#7Q2r?#Y_cKF2>0vS7NT#w`1*_Kou}{Cjio(fWI~(~ex;KA^h)QDgZ+62z->p@ z(DvWbKqzBQu8KC=ul_qtwJ6w#g9~Ek!fAe4&zZDd5N_vcA16*_HCc%ROjT(yq?$;- zPPE-h<dT_8r#F?YOUaYJq5;?O&wqro__<f-3`5Nfi<eneHnhWdf1{ul_d|=v!@6xU znT&5J<bO@WGSB)1aW4^YFP#D7vgGG?202T`qp(wv>-%{-Ri!+YlAWq>Zf9!I5IYW2 z(Xi#M2DvBEy|FWeXqYsF;%TgE972=}Ld>Y;vkIX3RYr*qoY-9%Z`YfLmux>Cfk|~U zn)VK+rNJVrd?|%GS2aRutaKL74|X=<-k;HQOzw4vZ7U35=^VclhlEDF5I1xY_x?{H zM#9WSn)UHfL(`d}VNx*?X(-@Zd84Zo%qbqcR*E;84sQ*k#3P>A<1xNf3iGKoAOs~I z(f4_3jpdZ?P^Xj_GBAS<-4#=Llo@HjhFQp+H44Az(u+vF<&l!pxaIy@UTf;&)O0K! zE!CTPE1lBwKsGXX<7(LW1P{-tdU@RBF)jJhk$*w?HFO-=valuB(wk}N{pqE*zIo%D zIq$wZ-hJ<T>h9Gy=jwYh^*y=zotgTbH-p*weYyH0nffE|)gQxgWnJU-?XPXW>)C`; zrH0=TKI5+CD?`0Q{YJu+$&j@AUs4wsGPDs>zJm`HRDn&zHV?2cP3a(wOR$`9d5kKE z<L!ShRgkibTP}cKkOAUAx4aa0^J!rmSuuv9u&q@TUqNH+COdI40&@;CLJJx~d*t^} z(kyyIxvr*6YdY8Fbf7~@D37`ZTBKZEcc!lUO?7GD$5*m-JLetu+;x9+;C@}#;t}Im z`JT67zPc#5=F(Zv317O6e6-U2Z?1{!5~Rd`y*$PI@d-WT#Qih=R6ig2BW4k|tq@3e zL8;?f93C3*^6#`O>K<<Qgj19Uuddr3Yq>C$Hqkei5q{lsK8-b7Wp~EgotC<bllXEp zu9s&bu{h57R2A{vzLUmv!`<@dpqmP#6s$o3!-G6vcu+_O5T&Qv;_wU#7mlZ#s|tUs zsJBbPek9>*N~Mq=baTOmEjF(dSTpszDJ6D=qHns$C#^g3v&Qc%^3&!X%O9f2y2Yz5 z{^|gSKk+qZHRTUEaVW$Cz34#($M=t3Kl$3poIjZH2bTuk8oV)>+p#~hV}I6rAT1pz zlIqK?WKmkmfBmtswA{r|3({f}U8Lb$>24h9;aVIXTJciwZoYxr-$c`eSRXT21Sz=) z0QXTsE_^U}D`ZOXQq*s!EGJ-D(~dZ6Nx>xI$+W;Im3FRrR7rj#7M0cBqn9-$0>we= zraS0IA2_j4D3Ds%1EI{6NZB6f=fZ}QDe5B{HX7(1>*aAx6Hcpx=o_AeowaO!qwV#! zTytNhxete)Z`a*zKC&uWYh1r<K5|WbfUL>Q3-WuOE$=rUS)pp2jyheR{Tl<y&jR1@ zKV|#U_O5O>MnC5*{+y^Jt){-9MN57pv@uhV>smP9b&D;O?bfp7rQElc^w2oJHF$%R zyIE)zxrO!~m^mUEHrlv=)wbkU8~a!af$MQgzku~cA{$S&wqmEN7_6*hJcoo*K05Z7 z=+RcfKekE<&ZZq^8rezlv{*@t6f8lEa}zr)<}EY4K3??3kvl-oD!pIH2E?%hW@~=g z{6e(+3o>I9*y)Y3SNMwUIE%I$-ubwQq<8vZku+{CCbl0#YqPI>0yvHyVLjST`neS; zo~%K-cg1(tjwS#8Pmp46&iKFPZBctc?kq9GDs?C%1ann+c2avuXmsNz3+4n!lkX<K z?Q1|vlG_6$>!&T1!qSyix~L2C>(E(lAse<2ew;BAQC>n8t0W^3F^eChKphO>%erCo zAfL~QADfkBmn(<q`OftMAC>Vlq$qxD7n9Y#^?BtV<24m5Zse7x{l{-N-Mo11^!2a3 z_BF%GU224#o37vak4>L(8UIet4q@!rDP$0kf>N>sXy-&8JQA@|%6+Q%fGVt!#1#Zc zxXE^pYU!Xwm$=<_87J#5%mG<k3i2bB5Ai5}27|=#d|J3+VU$jwl7&(BoVvLIz_aAv zKXN?Vd*b%7TQ4tNx+VN&{PwYVDcyVG9@Jd#>%F;_{!B~%P4C-v@3kD6KaN~BU+3cX zT<5M#=dNt$K(=nr{Na1PhU<gZ2d@p@YiRzy^TYbqMe9#of9A>sc4q>+Z=St1dGlm0 zaOh6pknz0M|DSz#iG*4I@$0_pzV8+8a<#|r)*k1rR(-7XsPNgpSy|un@D3<)@g4DS zP?)beyv6o|p=O}B`#S;OsjDH_<tI4U3iyvLUO?p%UO9y;iA%6aiQ%HWNZ=&`aRR#t zBnW(mz%>Hb0dxr)0Dk|aUE!(w#wnRbPyd3zPYL`LfxjW}4+JI&km;uU4+8HJ_+JE) z1ZWIgZyE_eFVii73;0w272vz<Au{fsTK4l~J7m-3lkI>Z!GRL+kl>K7qojubucPDI zd?lfjs#pEMf<q#ztVZUk*iUcsx}HK^PoeI)Lfv!uIs}IEb-=LK(YqA(%vTahV?-?i zPKB185A6t;Jha1&e^>`c>7fS}_d|(n!iP05CmtbHuw|7t5rYUc_22*{K3<r`&(@Im zs8~^@SC!eN%Fn5;u8?+9$VpSK;(?Ke@B?b%ohtmIR_%*SPAQ~_6xx*(GFub}0WuzS zOHx&^`!L<EU7_FD8kS)vezMkw7*-;hRQinHvEf-C1ke0=t*SuFGQG8OL+(&3(9Db* zAbMNnX8ACs0@H^nUII|JOmE_?%^%G5$(QNJm-J&{<Ak=B+87@$v@vrU`sfFH#$i9A z2+Rn7)mP}0kFakh2B*J)9vdSp^k+OS%-qmao65&!v@vrvc<zVZT&W2^^yR;h;lGPP z&gxWh24M<?!nz9ig2q7s4+(SaNbH~l2$ai-F6}cCWA`hc;wg*^rv3o{BCvw+0qgu1 z=Klq2{spVX{}0*8ciG7gSmQ&BMX)@Sn6URlHu3@6`2jolzuDnO7E!RQGJuC3CJcPQ zp8bG5^&va)$Y$0*sCiE4TyW-^wr85Q=bE0*G(G)*q3Xdw%eMugCGG3_Ka3F0!T%5F CTn4NF diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-314.pyc deleted file mode 100644 index 755f10d62ca3611159dcf43b2c95f08cf5f70ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9636 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py deleted file mode 100644 index 7de614d7f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - -import importlib.metadata -import os -from typing import Any, Protocol, cast - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - - -class BadMetadata(ValueError): - def __init__(self, dist: importlib.metadata.Distribution, *, reason: str) -> None: - self.dist = dist - self.reason = reason - - def __str__(self) -> str: - return f"Bad metadata in {self.dist} ({self.reason})" - - -class BasePath(Protocol): - """A protocol that various path objects conform. - - This exists because importlib.metadata uses both ``pathlib.Path`` and - ``zipfile.Path``, and we need a common base for type hints (Union does not - work well since ``zipfile.Path`` is too new for our linter setup). - - This does not mean to be exhaustive, but only contains things that present - in both classes *that we need*. - """ - - @property - def name(self) -> str: - raise NotImplementedError() - - @property - def parent(self) -> BasePath: - raise NotImplementedError() - - -def get_info_location(d: importlib.metadata.Distribution) -> BasePath | None: - """Find the path to the distribution's metadata directory. - - HACK: This relies on importlib.metadata's private ``_path`` attribute. Not - all distributions exist on disk, so importlib.metadata is correct to not - expose the attribute as public. But pip's code base is old and not as clean, - so we do this to avoid having to rewrite too many things. Hopefully we can - eliminate this some day. - """ - return getattr(d, "_path", None) - - -def parse_name_and_version_from_info_directory( - dist: importlib.metadata.Distribution, -) -> tuple[str | None, str | None]: - """Get a name and version from the metadata directory name. - - This is much faster than reading distribution metadata. - """ - info_location = get_info_location(dist) - if info_location is None: - return None, None - - stem, suffix = os.path.splitext(info_location.name) - if suffix == ".dist-info": - name, sep, version = stem.partition("-") - if sep: - return name, version - - if suffix == ".egg-info": - name = stem.split("-", 1)[0] - return name, None - - return None, None - - -def get_dist_canonical_name(dist: importlib.metadata.Distribution) -> NormalizedName: - """Get the distribution's normalized name. - - The ``name`` attribute is only available in Python 3.10 or later. We are - targeting exactly that, but Mypy does not know this. - """ - if name := parse_name_and_version_from_info_directory(dist)[0]: - return canonicalize_name(name) - - name = cast(Any, dist).name - if not isinstance(name, str): - raise BadMetadata(dist, reason="invalid metadata entry 'name'") - return canonicalize_name(name) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py deleted file mode 100644 index 89364b8b7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +++ /dev/null @@ -1,229 +0,0 @@ -from __future__ import annotations - -import email.message -import importlib.metadata -import pathlib -import zipfile -from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence -from os import PathLike -from typing import ( - cast, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import InvalidWheel, UnsupportedWheel -from pip._internal.metadata.base import ( - BaseDistribution, - BaseEntryPoint, - InfoPath, - Wheel, -) -from pip._internal.utils.misc import normalize_path -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file - -from ._compat import ( - BadMetadata, - BasePath, - get_dist_canonical_name, - parse_name_and_version_from_info_directory, -) - - -class WheelDistribution(importlib.metadata.Distribution): - """An ``importlib.metadata.Distribution`` read from a wheel. - - Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``, - its implementation is too "lazy" for pip's needs (we can't keep the ZipFile - handle open for the entire lifetime of the distribution object). - - This implementation eagerly reads the entire metadata directory into the - memory instead, and operates from that. - """ - - def __init__( - self, - files: Mapping[pathlib.PurePosixPath, bytes], - info_location: pathlib.PurePosixPath, - ) -> None: - self._files = files - self.info_location = info_location - - @classmethod - def from_zipfile( - cls, - zf: zipfile.ZipFile, - name: str, - location: str, - ) -> WheelDistribution: - info_dir, _ = parse_wheel(zf, name) - paths = ( - (name, pathlib.PurePosixPath(name.split("/", 1)[-1])) - for name in zf.namelist() - if name.startswith(f"{info_dir}/") - ) - files = { - relpath: read_wheel_metadata_file(zf, fullpath) - for fullpath, relpath in paths - } - info_location = pathlib.PurePosixPath(location, info_dir) - return cls(files, info_location) - - def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]: - # Only allow iterating through the metadata directory. - if pathlib.PurePosixPath(str(path)) in self._files: - return iter(self._files) - raise FileNotFoundError(path) - - def read_text(self, filename: str) -> str | None: - try: - data = self._files[pathlib.PurePosixPath(filename)] - except KeyError: - return None - try: - text = data.decode("utf-8") - except UnicodeDecodeError as e: - wheel = self.info_location.parent - error = f"Error decoding metadata for {wheel}: {e} in {filename} file" - raise UnsupportedWheel(error) - return text - - def locate_file(self, path: str | PathLike[str]) -> pathlib.Path: - # This method doesn't make sense for our in-memory wheel, but the API - # requires us to define it. - raise NotImplementedError - - -class Distribution(BaseDistribution): - def __init__( - self, - dist: importlib.metadata.Distribution, - info_location: BasePath | None, - installed_location: BasePath | None, - ) -> None: - self._dist = dist - self._info_location = info_location - self._installed_location = installed_location - - @classmethod - def from_directory(cls, directory: str) -> BaseDistribution: - info_location = pathlib.Path(directory) - dist = importlib.metadata.Distribution.at(info_location) - return cls(dist, info_location, info_location.parent) - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> BaseDistribution: - # Generate temp dir to contain the metadata file, and write the file contents. - temp_dir = pathlib.Path( - TempDirectory(kind="metadata", globally_managed=True).path - ) - metadata_path = temp_dir / "METADATA" - metadata_path.write_bytes(metadata_contents) - # Construct dist pointing to the newly created directory. - dist = importlib.metadata.Distribution.at(metadata_path.parent) - return cls(dist, metadata_path.parent, None) - - @classmethod - def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: - try: - with wheel.as_zipfile() as zf: - dist = WheelDistribution.from_zipfile(zf, name, wheel.location) - except zipfile.BadZipFile as e: - raise InvalidWheel(wheel.location, name) from e - return cls(dist, dist.info_location, pathlib.PurePosixPath(wheel.location)) - - @property - def location(self) -> str | None: - if self._info_location is None: - return None - return str(self._info_location.parent) - - @property - def info_location(self) -> str | None: - if self._info_location is None: - return None - return str(self._info_location) - - @property - def installed_location(self) -> str | None: - if self._installed_location is None: - return None - return normalize_path(str(self._installed_location)) - - @property - def canonical_name(self) -> NormalizedName: - return get_dist_canonical_name(self._dist) - - @property - def version(self) -> Version: - try: - version = ( - parse_name_and_version_from_info_directory(self._dist)[1] - or self._dist.version - ) - return parse_version(version) - except TypeError: - raise BadMetadata(self._dist, reason="invalid metadata entry `version`") - - @property - def raw_version(self) -> str: - return self._dist.version - - def is_file(self, path: InfoPath) -> bool: - return self._dist.read_text(str(path)) is not None - - def iter_distutils_script_names(self) -> Iterator[str]: - # A distutils installation is always "flat" (not in e.g. egg form), so - # if this distribution's info location is NOT a pathlib.Path (but e.g. - # zipfile.Path), it can never contain any distutils scripts. - if not isinstance(self._info_location, pathlib.Path): - return - for child in self._info_location.joinpath("scripts").iterdir(): - yield child.name - - def read_text(self, path: InfoPath) -> str: - content = self._dist.read_text(str(path)) - if content is None: - raise FileNotFoundError(path) - return content - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - # importlib.metadata's EntryPoint structure satisfies BaseEntryPoint. - return self._dist.entry_points - - def _metadata_impl(self) -> email.message.Message: - # From Python 3.10+, importlib.metadata declares PackageMetadata as the - # return type. This protocol is unfortunately a disaster now and misses - # a ton of fields that we need, including get() and get_payload(). We - # rely on the implementation that the object is actually a Message now, - # until upstream can improve the protocol. (python/cpython#94952) - return cast(email.message.Message, self._dist.metadata) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - return [ - canonicalize_name(extra) - for extra in self.metadata.get_all("Provides-Extra", []) - ] - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - contexts: Sequence[dict[str, str]] = [{"extra": e} for e in extras] - for req_string in self.metadata.get_all("Requires-Dist", []): - # strip() because email.message.Message.get_all() may return a leading \n - # in case a long header was wrapped. - req = get_requirement(req_string.strip()) - if not req.marker: - yield req - elif not extras and req.marker.evaluate({"extra": ""}): - yield req - elif any(req.marker.evaluate(context) for context in contexts): - yield req diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py deleted file mode 100644 index 71a73b731..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +++ /dev/null @@ -1,143 +0,0 @@ -from __future__ import annotations - -import importlib.metadata -import logging -import os -import pathlib -import sys -import zipfile -from collections.abc import Iterator, Sequence -from typing import Optional - -from pip._vendor.packaging.utils import ( - InvalidWheelFilename, - NormalizedName, - canonicalize_name, - parse_wheel_filename, -) - -from pip._internal.metadata.base import BaseDistribution, BaseEnvironment -from pip._internal.utils.filetypes import WHEEL_EXTENSION - -from ._compat import BadMetadata, BasePath, get_dist_canonical_name, get_info_location -from ._dists import Distribution - -logger = logging.getLogger(__name__) - - -def _looks_like_wheel(location: str) -> bool: - if not location.endswith(WHEEL_EXTENSION): - return False - if not os.path.isfile(location): - return False - try: - parse_wheel_filename(os.path.basename(location)) - except InvalidWheelFilename: - return False - return zipfile.is_zipfile(location) - - -class _DistributionFinder: - """Finder to locate distributions. - - The main purpose of this class is to memoize found distributions' names, so - only one distribution is returned for each package name. At lot of pip code - assumes this (because it is setuptools's behavior), and not doing the same - can potentially cause a distribution in lower precedence path to override a - higher precedence one if the caller is not careful. - - Eventually we probably want to make it possible to see lower precedence - installations as well. It's useful feature, after all. - """ - - FoundResult = tuple[importlib.metadata.Distribution, Optional[BasePath]] - - def __init__(self) -> None: - self._found_names: set[NormalizedName] = set() - - def _find_impl(self, location: str) -> Iterator[FoundResult]: - """Find distributions in a location.""" - # Skip looking inside a wheel. Since a package inside a wheel is not - # always valid (due to .data directories etc.), its .dist-info entry - # should not be considered an installed distribution. - if _looks_like_wheel(location): - return - # To know exactly where we find a distribution, we have to feed in the - # paths one by one, instead of dumping the list to importlib.metadata. - for dist in importlib.metadata.distributions(path=[location]): - info_location = get_info_location(dist) - try: - name = get_dist_canonical_name(dist) - except BadMetadata as e: - logger.warning("Skipping %s due to %s", info_location, e.reason) - continue - if name in self._found_names: - continue - self._found_names.add(name) - yield dist, info_location - - def find(self, location: str) -> Iterator[BaseDistribution]: - """Find distributions in a location. - - The path can be either a directory, or a ZIP archive. - """ - for dist, info_location in self._find_impl(location): - if info_location is None: - installed_location: BasePath | None = None - else: - installed_location = info_location.parent - yield Distribution(dist, info_location, installed_location) - - def find_legacy_editables(self, location: str) -> Iterator[BaseDistribution]: - """Read location in egg-link files and return distributions in there. - - The path should be a directory; otherwise this returns nothing. This - follows how setuptools does this for compatibility. The first non-empty - line in the egg-link is read as a path (resolved against the egg-link's - containing directory if relative). Distributions found at that linked - location are returned. - """ - path = pathlib.Path(location) - if not path.is_dir(): - return - for child in path.iterdir(): - if child.suffix != ".egg-link": - continue - with child.open() as f: - lines = (line.strip() for line in f) - target_rel = next((line for line in lines if line), "") - if not target_rel: - continue - target_location = str(path.joinpath(target_rel)) - for dist, info_location in self._find_impl(target_location): - yield Distribution(dist, info_location, path) - - -class Environment(BaseEnvironment): - def __init__(self, paths: Sequence[str]) -> None: - self._paths = paths - - @classmethod - def default(cls) -> BaseEnvironment: - return cls(sys.path) - - @classmethod - def from_paths(cls, paths: list[str] | None) -> BaseEnvironment: - if paths is None: - return cls(sys.path) - return cls(paths) - - def _iter_distributions(self) -> Iterator[BaseDistribution]: - finder = _DistributionFinder() - for location in self._paths: - yield from finder.find(location) - yield from finder.find_legacy_editables(location) - - def get_distribution(self, name: str) -> BaseDistribution | None: - canonical_name = canonicalize_name(name) - matches = ( - distribution - for distribution in self.iter_all_distributions() - if distribution.canonical_name == canonical_name - ) - return next(matches, None) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/pkg_resources.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/pkg_resources.py deleted file mode 100644 index 89fce8b6e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +++ /dev/null @@ -1,298 +0,0 @@ -from __future__ import annotations - -import email.message -import email.parser -import logging -import os -import zipfile -from collections.abc import Collection, Iterable, Iterator, Mapping -from typing import ( - NamedTuple, -) - -from pip._vendor import pkg_resources -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel -from pip._internal.utils.egg_link import egg_link_path_from_location -from pip._internal.utils.misc import display_path, normalize_path -from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file - -from .base import ( - BaseDistribution, - BaseEntryPoint, - BaseEnvironment, - InfoPath, - Wheel, -) - -__all__ = ["NAME", "Distribution", "Environment"] - -logger = logging.getLogger(__name__) - -NAME = "pkg_resources" - - -class EntryPoint(NamedTuple): - name: str - value: str - group: str - - -class InMemoryMetadata: - """IMetadataProvider that reads metadata files from a dictionary. - - This also maps metadata decoding exceptions to our internal exception type. - """ - - def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None: - self._metadata = metadata - self._wheel_name = wheel_name - - def has_metadata(self, name: str) -> bool: - return name in self._metadata - - def get_metadata(self, name: str) -> str: - try: - return self._metadata[name].decode() - except UnicodeDecodeError as e: - # Augment the default error with the origin of the file. - raise UnsupportedWheel( - f"Error decoding metadata for {self._wheel_name}: {e} in {name} file" - ) - - def get_metadata_lines(self, name: str) -> Iterable[str]: - return pkg_resources.yield_lines(self.get_metadata(name)) - - def metadata_isdir(self, name: str) -> bool: - return False - - def metadata_listdir(self, name: str) -> list[str]: - return [] - - def run_script(self, script_name: str, namespace: str) -> None: - pass - - -class Distribution(BaseDistribution): - def __init__(self, dist: pkg_resources.Distribution) -> None: - self._dist = dist - # This is populated lazily, to avoid loading metadata for all possible - # distributions eagerly. - self.__extra_mapping: Mapping[NormalizedName, str] | None = None - - @property - def _extra_mapping(self) -> Mapping[NormalizedName, str]: - if self.__extra_mapping is None: - self.__extra_mapping = { - canonicalize_name(extra): extra for extra in self._dist.extras - } - - return self.__extra_mapping - - @classmethod - def from_directory(cls, directory: str) -> BaseDistribution: - dist_dir = directory.rstrip(os.sep) - - # Build a PathMetadata object, from path to metadata. :wink: - base_dir, dist_dir_name = os.path.split(dist_dir) - metadata = pkg_resources.PathMetadata(base_dir, dist_dir) - - # Determine the correct Distribution object type. - if dist_dir.endswith(".egg-info"): - dist_cls = pkg_resources.Distribution - dist_name = os.path.splitext(dist_dir_name)[0] - else: - assert dist_dir.endswith(".dist-info") - dist_cls = pkg_resources.DistInfoDistribution - dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0] - - dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata) - return cls(dist) - - @classmethod - def from_metadata_file_contents( - cls, - metadata_contents: bytes, - filename: str, - project_name: str, - ) -> BaseDistribution: - metadata_dict = { - "METADATA": metadata_contents, - } - dist = pkg_resources.DistInfoDistribution( - location=filename, - metadata=InMemoryMetadata(metadata_dict, filename), - project_name=project_name, - ) - return cls(dist) - - @classmethod - def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution: - try: - with wheel.as_zipfile() as zf: - info_dir, _ = parse_wheel(zf, name) - metadata_dict = { - path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path) - for path in zf.namelist() - if path.startswith(f"{info_dir}/") - } - except zipfile.BadZipFile as e: - raise InvalidWheel(wheel.location, name) from e - except UnsupportedWheel as e: - raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") - dist = pkg_resources.DistInfoDistribution( - location=wheel.location, - metadata=InMemoryMetadata(metadata_dict, wheel.location), - project_name=name, - ) - return cls(dist) - - @property - def location(self) -> str | None: - return self._dist.location - - @property - def installed_location(self) -> str | None: - egg_link = egg_link_path_from_location(self.raw_name) - if egg_link: - location = egg_link - elif self.location: - location = self.location - else: - return None - return normalize_path(location) - - @property - def info_location(self) -> str | None: - return self._dist.egg_info - - @property - def installed_by_distutils(self) -> bool: - # A distutils-installed distribution is provided by FileMetadata. This - # provider has a "path" attribute not present anywhere else. Not the - # best introspection logic, but pip has been doing this for a long time. - try: - return bool(self._dist._provider.path) - except AttributeError: - return False - - @property - def canonical_name(self) -> NormalizedName: - return canonicalize_name(self._dist.project_name) - - @property - def version(self) -> Version: - return parse_version(self._dist.version) - - @property - def raw_version(self) -> str: - return self._dist.version - - def is_file(self, path: InfoPath) -> bool: - return self._dist.has_metadata(str(path)) - - def iter_distutils_script_names(self) -> Iterator[str]: - yield from self._dist.metadata_listdir("scripts") - - def read_text(self, path: InfoPath) -> str: - name = str(path) - if not self._dist.has_metadata(name): - raise FileNotFoundError(name) - content = self._dist.get_metadata(name) - if content is None: - raise NoneMetadataError(self, name) - return content - - def iter_entry_points(self) -> Iterable[BaseEntryPoint]: - for group, entries in self._dist.get_entry_map().items(): - for name, entry_point in entries.items(): - name, _, value = str(entry_point).partition("=") - yield EntryPoint(name=name.strip(), value=value.strip(), group=group) - - def _metadata_impl(self) -> email.message.Message: - """ - :raises NoneMetadataError: if the distribution reports `has_metadata()` - True but `get_metadata()` returns None. - """ - if isinstance(self._dist, pkg_resources.DistInfoDistribution): - metadata_name = "METADATA" - else: - metadata_name = "PKG-INFO" - try: - metadata = self.read_text(metadata_name) - except FileNotFoundError: - if self.location: - displaying_path = display_path(self.location) - else: - displaying_path = repr(self.location) - logger.warning("No metadata found in %s", displaying_path) - metadata = "" - feed_parser = email.parser.FeedParser() - feed_parser.feed(metadata) - return feed_parser.close() - - def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]: - if extras: - relevant_extras = set(self._extra_mapping) & set( - map(canonicalize_name, extras) - ) - extras = [self._extra_mapping[extra] for extra in relevant_extras] - return self._dist.requires(extras) - - def iter_provided_extras(self) -> Iterable[NormalizedName]: - return self._extra_mapping.keys() - - -class Environment(BaseEnvironment): - def __init__(self, ws: pkg_resources.WorkingSet) -> None: - self._ws = ws - - @classmethod - def default(cls) -> BaseEnvironment: - return cls(pkg_resources.working_set) - - @classmethod - def from_paths(cls, paths: list[str] | None) -> BaseEnvironment: - return cls(pkg_resources.WorkingSet(paths)) - - def _iter_distributions(self) -> Iterator[BaseDistribution]: - for dist in self._ws: - yield Distribution(dist) - - def _search_distribution(self, name: str) -> BaseDistribution | None: - """Find a distribution matching the ``name`` in the environment. - - This searches from *all* distributions available in the environment, to - match the behavior of ``pkg_resources.get_distribution()``. - """ - canonical_name = canonicalize_name(name) - for dist in self.iter_all_distributions(): - if dist.canonical_name == canonical_name: - return dist - return None - - def get_distribution(self, name: str) -> BaseDistribution | None: - # Search the distribution by looking through the working set. - dist = self._search_distribution(name) - if dist: - return dist - - # If distribution could not be found, call working_set.require to - # update the working set, and try to find the distribution again. - # This might happen for e.g. when you install a package twice, once - # using setup.py develop and again using setup.py install. Now when - # running pip uninstall twice, the package gets removed from the - # working set in the first uninstall, so we have to populate the - # working set again so that pip knows about it and the packages gets - # picked up and is successfully uninstalled the second time too. - try: - # We didn't pass in any version specifiers, so this can never - # raise pkg_resources.VersionConflict. - self._ws.require(name) - except pkg_resources.DistributionNotFound: - return None - return self._search_distribution(name) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__init__.py deleted file mode 100644 index 7b1fc2950..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""A package that contains models that represent entities.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 28e2ddec9c9fed8d0de3d59ff5cea1b5b5129074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmXv}!Ab)$5Y4J+5%e1tJQdlli$$$yL3$ODqPM`1?hZCKn}p01ttZd^iAR6M<9hVs zQRoktrS-wQnfDlmH;4OsyCUNA<3|r;|8B)UlJ&4`S6;<fuox!?qPy{OdX;)r&eQ{@ zJXM^Q&a%>$(%MyMXk`ZU0SPUqu{3L>-c2`Yb^t0@0=$c5d%t-boy&W|KvGp0ioxJW zKDjWHKDb9LnPh3)yqYM&Ok2&7h?OxIvO?Z2c<StN(T6@fpPj%R*4`*a;M&V;J&~jt zvvpLGUi%!hWeirCe3dna=x7G$`9;&Yi00hjFl@(Y?f=w?^t+iP$(OhcTT%Q0`$%5{ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-314.pyc deleted file mode 100644 index 3e308cc5fa31db9d788a62ea2446b436c765fa4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2275 zcmb7FO>h)N6n;H3yE~iBFXRUzkR>WIAiD&%6fjbhxe&#e47gR43saNb4vb7@mY$AE zPK#RQ!Hb-fo8`$=d4Q7~@uWvkO06k5s700Bvg{!oeXn;CLJFkps(t<Sd#`)@eed;~ zz1>|MfaB-u|9DLe;BQ*2j#L6#vj`e+7Hl>N$C+d!gtbZSxGr^tb;O2DDQrxpk7s0N z1kSLXV5jW#tE_#_0N^?^1h!eif1*)pPasV@`#e}3_i1ghI9qe2TlL*2!bPUcMdXD6 z!c^TA5l3L0@PZ4c5TxfsxX6QQa*&#m!=Y8drHdCo1CrSwwX<2N4?>7xNTUFD_8lfu zWjM%eZ3ukR)=~D#w9*(#lTw<D(xgd)7tP3Q8DxiT(uL!J$sm%h@4FIjIN=6053kM_ zOE#|y9`Qg%c{g7VB_hxD^P|;Om(l!ODDvLA-GwUglyC(mVjX|2{V2v+1Iln#JM<|) z4Yk`~hMi|NJIUU|JSeH7WVT_aiUwXReV<5(jliAfapr?IfwAEuYjIj|xgdfmON;eL z3Xw)n#A&?Gyes1_$5G7JysC7Zh|U>p#Gg+bsk|HEITg3Y#n|D)`zs%Y;zFe^!uNSq zMwO}`F4Sh-i0|_PPohw?aItT!GJQ#&4}*haC8y+kbm$f56rZmnVce1P^~wovwi0=g z@2k7j3+_1{Rq9^7=y-wTB5?iUd|2atR9xe&P`?y+I*uCzp`<gMc=U-WD6IF{j6p;e ziiZtY0X<c0lDK+unWm+KYPw!i(+#O?Ep&#eK{6Q`oRNC7^$mgsP;IrxG^J_7D1!}U zR!S@*&-P}O)yD>9t&|kO|JbjU^+(>ejwN7-PP~-pBGHXv%F^R>I7``zbC_6;^htsI zb*V??Bt>Ewu@P~9Zo}?~sMv)=5SOv(V1_)bk9fz^*l*hv^RMHU2K-@m|7H%~Hiy3| zeLeVX{~fciUbFSPw{N`k%gb-vF(=lm(eYQaAO`V-$DRk3C9&Jeqxi4qQDn%4CUWQ| zdQezQ^wOk>K2mK$k<_?~O!Sj>0L2!v453gp!%{YD0?DhJ+w-G4p^qB$kW__~5zvF3 zZtEYDN3>3=4Vb0~HVm{dv=G%B23oWOX^cc)?9Z>gh5YU$Y57GX@5+44tR;Oz;xOLl z@UVzVDoI`jv#&D0{b{*VW<|hm+}42KHw}JiU9qlgzqRAQwbJ+F*T=6FZW=dF{doF^ z(>LGx>Ef-PnOo+}BSu!67)7G8bQHmpvs46XU$1F4+l4;V#1Lx<))4E2RXwX5K3>$8 zuCgiUkCI0Ath{E?HQIyX;b-tMG&>>JeR;Ck1&lSjp?l!A(ckQ$MK9!fF2DJp53vet z38utO+-Bvd`l+#E^>;W9HmC)kFm|Pj3$CA7dK_oY6OqK0%YzWj$a*cTBFG~Bekdcy z5!>k6qbTCOb?s_yAt1j2N)vupst!F=Z+1a)+(Vvg{kh70-*GU-s*H*CW9=%YAO(r_ z(Kg^u<LF<#dmEE0o!IwOyIbj?nqF3wy)uHaegZ05wRy_Q#<{gmF^>f0GTx32x`6E> zsD+}??%G~(u8@>sI~CN-#4vepRo<)ZywGmv1^N)Fe5wBtFOoaG@ua(qw@E!J4xo<0 viU=(0jIq10^B#=dg=6<%Pcsc#?u!@hu%Q*L2S10)K(eKSw&j6Rs5AcsHV*#} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-314.pyc deleted file mode 100644 index 86d02094b68a7fe1e425268d7187175d5c0977c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13625 zcmcIrdu&rznm^aRemk)fl8_gPNoa~8gtSn~vu$Y7k|_l03894q*Vs42#j(?SZ)lU! zQD)ldgsM}5rlW?Lt_r)A3ev2aO0!!=yV7=7+SUB&V0M$<GAi1cm3IFN6DoH4*Z#h9 zA9jKv?R54?KKH!tx##hHzwdF5H<p%o8N#(s{yX{08peK488bNags><Jj7_izQ`vDA z5xRwaHr3WhX<N5lwezQ_iu~zNop{>2UHjaso3|0WJ^Q?>m!}=wzI}exzpq3s*;lHT z?hB}aM%Kn6bq57CI8eHlMSNTFEedK`#IKeQh=*GAd|`}sC04tNN``#tY8G(~RBpBF z?bNDBeI$Ug;A)l%rUZ30@@2@E8~N(UD&#6Cr`AL&k*?zD+5s=`Z#7E1TWxx8TaAya zb-b<`bsn=$tvBANL8;p;wcc1W5E!T*STj(!#ok(*pM%<9yj6?0oOiv|7_l|8@S1Vg zp{_%rZ4b4F1<e;rr!#6yO=i+c5AyDARgz;TQWDahL`;pvQ!zyei<-S7J*K&zq+DN2 z)?B?~BN8PXhtqgh^K>R<DXt!tQ(Co^?2Dz6=mYg#vYf$7sOe4*W;9=i93M)amUzb1 z7gu;f=p7FvcsJ2eIo0-}l1Y!Z9q(V)|LU=hO-Ey!#@jdT*c2Vu*#Fx4oyAJSkFSg8 z*Mc!)%Z0@%luob#rV1c7+woe}9uZWLFNR$vLcPLz!Vb+HjizJ6QZ%Z0qtW3^Vl+i* ze>D2iXe?#a1ftQwq^zi^WLipRP+b{~Dztv_XiQb*<cU#LQle2gh+Y?IFxuNs?(9FT zNV3u&OGxrVJ9f19znqaz^^eGz7qMbWe>{~LO`M1+(xzlOsUkvusgxvddZ_=<m^ze6 zZ+U2IbZhjL?c1Wg((p(srb<zDc%*-S@<hLqRHaQLvG}RjNlED+NsereCezr#bS$+Q zGmuis=7JR+8RN6%5mAjotoSDTLUhZtL~&X$W6>Bb3#eXLY(-*%^|9l&?QbxaKv_L| zRu~c@Lc|uaN5qID;*7W=?uaMi-s}K<dH;v#TN4srmnM>N^_Zf{tszj)fL0>CGJ+{f ziKq(d`PxPCvEBjAeo7kC>}aRC64GF7G^Kv+?hTy@^<>hL=9DFMR8I311yMQ&GxBgu zRcM?|@@o1LcF3S&?3cU_MGg2V#4Ho+4)Y0Rw<wx-RW8`+*|JH0ZhcgL?)@Hr-gK1Q za-d#c3lVRd!Hopw?O2qNm|#ajJMeXVCHm~m?1-(92S>zya}C*%4wDBTH2OM;g|27) z=uHoO;!c|%=+{TFtxrH~f7ofF(2&q4VnxOAEl*2o=yWVKDuo8+%y5Vn7Hk!h$3n4m zB6M1klY?U+b9qCwux;Ztp`n-(8ci=L4q^R5<G#>(t5g%hVVmYnDxC7taY<(hhfE|Q z*Hc96DTfeg4n7D@I4uYveFwzoNlBGApaEa`XONg+3vTB2y>VtfP&HXP?=Si3Qxjb` ze3etuoNwbb-^LrIE%Skjv&ro0_L)^Pj+tYht@$kQ+n2KbXBX|ZfOmn}Jl+K-^OsHR z|H}}kmlLN?hB#vS)aoe3=eLGZe3Ffn3Q@F{q9%$;DI$gr3vx3a1+>ShjYq^L7Rfn@ z<PdR^qbHFZJ&EM#NhF8oO^5TA1JAoj&WY|oB*NleBqmq^NeM@qw;IGbBKC=cfn@~6 z$?0L+G7_@&jF*RoM->$`aasz+bYcqI_@?Qou%2c>h)}SxCA6_oS$b&{xSWtTp_WgS z5)<sUla-WBm0jGD^S4iQ&Aa?RdJWrpx%qNsw(W`RgB`ijy;=9(d0(*D9?~563`4xH zdjrg75?T(vZ<-?s@u7^@m{RH(2@VoP23id89fK4zidWpWNAPil2th}R3POsCY~9uc zdS0#O**yKB9S_#nKSP$lF~|-Jqqa6SYI_R6`BK>+W>(Lh0dVvQJ+^23jCsHsBWy(I zV-^&k6i{G+MMTK&Sph&Wv-G&I{awJ$^0x|i8p=~46zQXQmH|eV)ih(IjrffSNfx&E zjBg%JD&YT<As}ujGZ>2L@)^QpFw+XOk&V>pxWZH84-IEzDWnd?(%<wI&>G1U&7P9d zNN=XJ$hVWkg^47AsPsxKuBOJK7)dlUC=-hFO&UUCf_>i5obzwLAWbFC^-lI)kS4ma z{_S7-f&?f2J$dK=X}W!rkGwuU)$zs;c;(~yN{%a2Wk211&DWR}8?(Mf&?x064*uzn zm8@ikLL>dLqoYnd=R~wbFj{*b;sg3-bn86za!fv{$i!YcsBrLE2~?g$bA@1-sM97q zc8j9vEdWR1v5R_6Cr&i60zrq5q}2%|h&T^fBxbc?rY1>*d)PK=-%O-i!r05$47t3| zW)Lv?IZ}SY_6$IV2zb;!0+KO^ho?b4!g%OF?3Bc15=2luHJTtwBH^v0jM4_V?SQ5- ztc30IHVi@&PHDnv1x&(PLxv3TL$OLhb&00&qPz=LeD;J&6YS=i<`4QW^uK@nx^K^g z<L7&)p1u6i+ntjgZ*^Wce$BThEAIJI&bLPazp;1S8=aS&8=Y~atw3Kw5EfrVT%Zc> zQ|;>@eMuP{a76566huU%99GK7Q!dpRaiiQrxdB(i3;o(hn!UM>sypIGSqaznJ&{t? z8*u@)0y5T=X>OBmWG7`sQYK{*HJTkYnkSwa9!{#!WTNM5FVrAY^(iOdl@wB#Wa%^n zbSC|sNs)`buPc{oX2u6OWsa8``nXwmA0pK%jJ9osD%i7_n1!h>hxZmkl&x!Dpy$kS zp4G{gINuB&B(P1M#UCI6vK4d^jId^q@Y({L>=XK}_kfwk*5+|^NxjXgH_T2#<bwC@ zW_?6_)aZ$%O^^IIMj<~z(OyKL+q()#2J%hhGW3c~v&T~kUtWdA*V3ZvM&2lCY*AWp zt=w8JtLzY(D!UPZ$bJ5|c6`2S_2+@|8^JZxu@6^Wlybq=8&%C0J3dq{Ka;E4exs46 zv#n3$8ar;g#2^$U(c{faD3jG`1elMoNcs(dKr!`wGg$eGUDt@3&`w?vl)BLBD1OQ+ z-t8UcpzTF8-NqmJfuNoTB6z;7^je`J16-m(E(<6XmlYw4QtD?}h_He!6U;5zi&lK& z!XifzedDasD}p8}QfiPZamE(8qiROqprExuMhTxRG5rL)5vZFFR=npv@1AdLo@?AT z+qiAMs`kC~`Sh}l(3K9KTt*`)r-)WduAt~KL>i390<#-73yn_maZ`I(g2|VVyQwkJ zhFnQekRr0tI8AX-;n6-6DSHt8gx#!coamffpA#Ezdi<~Nn-7$~-ZTF|I4f37dvjv= zrXzUU2L4;LGiTWXrS6oQo2Ty@da;7R3c}*sC@R3q6Nc$r8nFZIL_#}wK^z0lh=V*1 zOAygD;5tO(UKS!Qv~(|P>4|ty3REpXR4*Ycp(=bSzDSAc=LUN~h5`heuTVqjS%QiN z#R-e+(C}WQZ(6RKVZVi4x^gMPTpE%)sCy?RC1tz-CxOcYCL}gd8<8a3{S-{Cy1>n` z1R*87ujrEP4nVPnAhG6VY4w5wPiQA)EekG6xtX{0mIo<)hm2jp%Z%CZ<9tPC3)!S; zD&^rwFm1vBylY@_p$7`rbEuP#AOfQtG}FA4%V8+}I$psGLVgIiHY%15UoYiDCyNLM zo}aB=^R{okqWT?Ap7G638v|S!fiNC!lhLB`)xY1G%EXWv{44|#9JRL?qNx}8BR>!{ z;(-RlSE?2Xq6cED<)N9${U{?vCCbU52e|@_;47yE3s;1i(V{CvkU;Ois&nIK$Fpu@ zv*@$tT8Kzv2*P5BH!Y6FM3M!zjvPi?eLeWfJWpBTr+ZnU9I8-nDU1O}-7SV_dcy)e zF2lINLth};9W#(*<O{SO<HZ6A611dxR)<tE)iEL*7fiPXR~MUmi^B6Dl<0c)eDh|Z zm!;9a9uDkzK2!|Mxl5&u-YDMNA<_?)1ylJd?Em@pV!ij;2*be`G*=#oF+wb_2{>5- zcwNsLS%1EbtyduTOrbTMWV`HZSQ6r<M-%ppHzm{Xh$ItBET%Rh4RW-=QMEG^c4`h~ zB$ZS(Zy$MZxGz*Uxrrw=F`j{AE`}r|7UxXbdCfzeaEGMk<w@Q1LZk%0i>@?ts+3Ql zh&)ruPZ5zC5xnNBUvN4~%IDW_`q+2HH}mAxvfTPzv%v?ZJPTeHtT^}T*;lUxn&unV zXB!@w5`XTSFRT4%<E4$)%Qnq7G<|UD!l}82w%LZZTtoYm_^xk0yyZRLdEa#RY_Mg% zvi2SC|K483DjIGxdrA3?s<!#6?N=**<H=U+g^9Jg9M(x$`GOsFUn{U5*qap{+t@#E ztJ_;<UxL$r7E=%p%bgSvQ;e4vFr*32EAhyW@uCt!L`Id}(IedAF;`G2n|<VIz2t6A zA^U=J%5nbschXU5`aDD|9W`Qq)Zj}9C9y}}U80dIwtO0JxdBDG`5=;7DL;*Tq0Y&* z2d%1LZQAlm=o{3SC~S$s`Mx;)?1%P?eYxt^U-w>J`;Wb!ZO=Wj|9ap+)_ouksV1J$ zC^??3q+QDU(Q-x9dW(ic+70c9;CKQ%LNV!-^vr)BO?a>ns}tEjSE+>hm|tx{9!6JK zTQWTJi!Cn~10*|^2}VOx<dYzOG}ja_R(w=*sb*&Dr@KDcbv^KS*8Mo21wKHGp8r7D z*3%O%xu>cq5777AI4c;DWOa<cr#Tf#g`q5epL*)1h(=XZQ6$mC6{ZtNC?p}?Wb?k7 ziOxGB=@;e9S$f+B;YnIy=>nyoeK@^8IrhV2w`~v>hPH^*LKF1H+cshlqmYt!y!q|Y zw+WxHf&u!%VjqeMw8(dgS>3R(9k8&uy$uWdZY>cf45p5#dLlkp*nY4{iA)%yxlJDx zx3IaI{gfu2$YfHQTS_EVI@0=!qfcq4exCIWkVmU9+Ah%pe~zIm<Ok59=pcupgMtA? z2L&>g?T&*62N=|f=H!hrkZ3OwB(uMnwM<7gkBZa*IXWIS_*u7jUqRVZP%c7vUJ+!< zLT%($?#oEu17*ssd08gyyJ&3yY=KGp{(;MDf7Ls)^Rv<G^#`s8da~}GJY)Yq0LwT= z@e3M>X{rj2-GnE*by(S*|2P`)K<mQMU0>4zk3vyXb(dgya`6^v4iUJL3f9!tBcDN+ zSVRsgw4lZDBxtRnfhBz0q!jB|()-cCrGdEzc4i;gIg_{^*p+qf;-lxl+7rIFr71_~ zoBYGy04#`+I5)k61V77IVpUewPVAdZ<iuKTN)lOGKyZ))fxf)=fq|=hM%Fp(B^?F^ z;Cv(PEMiAW<SB;=AVAK=b1)W(^<f4&S9ZM(c=@3{4(SU_Ngo~9(?LD@@S{aJayY0j zXi-9k_H<y67NvA(AHh*Q(t${|8jR4fW{pfdXL#*!J}tLXb_=2&-DdPFqbCyl_&Otx z{aILJ<LbYtTcggjq^2@)-NV#G-@1=tqg8=~^z-*60P_*vv+M!Cqxlv?bXi%T$Be>r z`hFE+i^T^vu;m1(x=$!L@D$*WD{dFC<#s{gDMm53PQMew<H58iOpZ!CKpa)v8FYxW zuw@}4Y<~`CBi!QXvl%(gm3<g*Kg#uRsKiX=pMBN|iuHBtO*-Di;i&M0W<Qx!;V2ly zdos1-JFh!p$TO&UyL$SfeI1c#q)T%^?~f0e+C1r-nr9SO0HPzfJ)y1AHx_>Gs8y)Y znp<kURt<meaOSiWjg6{9y6UFCq%{@n^F7+|Jx`&(35fdAsln^M`uSBglLzL*n?J6< zQa=;F`cN*sXV%>^>G^}dYD#@??EKh=56<~FT=Q=r2bbr(=e?5iB^N8NL)#D5Odq}; zY`RGu;PiIRS2ydco9>?TwOsSH=-mdIvhJolntp32zfx%blQ6s=q04Wg!QbO&!MfK0 zyB5)OoImmdK_ebqh_Rt1i|aT!lbNrFV*bZNq*^Wu#l4T_u^b)g6*Er3Bo^7_JG9=i ztuT&agen{=&G%%cj;t-_Wy9CY%@+A5O34ekENpRDqq1{?7slTMz=d8;szV_n(VaxM zxU`Z8jl^U%q|;pjHw#jdqJ)xaD5-F3S4!}Ayi)pfQqH7@r8Heykdvf*DIwfNP;mVt zIhaJdWIAMALTU}+LW17M3on4lUU<QaN_9vI#c?NwA4Y~y96B7?-{uYbG$)3ZN}kXh z7>golZe+Q2E&mA9l1X&Qoa4Nx7)|Sjw^NA^NyCyRj>Oa<&4EJ|8JC#`<=9CYqrs@C z#Vh*DqC(wrrVLpJR5$_0(IgIIP*(`Jh2?*T?<*$};dI>3f>r0voINuaST`G3cd_@Q z=Po^$3$#s&^JSHDWo@%%ZI{)LU%m2bu58z&^G2XjZ`(2(Xqhi5J9q5tvFVnN!k5CA zdp|yU<>=Lle_HdKHCg}Du(5;QNfCN_uwv4eC--m7cd$kBezz69OT>5oLX*p@QxB3l z_2Be6{>Tpmjd-Bd1K)WTJCWdiH*<)3J&(aVXtO++jvbRONwqRPbT-XnX_}hLP?(nM zRXB0e@198-DX4~IG|Turh!KF0ZvVN`v!y`6Gw09z><9nhZplx?9Ii2uZ|A+MMfdu7 zN)x5H?r<Lg&T;ME(9)9DJ~~-JG~I@~2oCS%=Xp*aoed4mfTLM`nIF^P%^Y>%B_pAq z=D<UQnI~TT1dKf3L@ZyQKT)GG^KgIpxuhQppz>Y~a})b%`aBeq!uROKI-j$8v0&|6 z^dg#bHhXEao2iJS;1J2FgUIU`rF@v8(-hJ93Yg_bl;%~W^o70po^tz$ORWu5Pn63I zZrw0XQ<m%1gy(mgP?u1ut;$oVMcMy~3S|t@1p7mvddYEMjeazk&ec3}qb&4?ipIH$ z4YL&+ezkQ*`1RJS4Y`f`auwY-D(dDcT4pO+K2$Gv{7RiUntSkxTt&w{iWgjBS^1*f zSzdbE<)t%4?{_*=T-obGXp*BTnrPy5tip{c$ExWD{>U>S8u37KnWM>NB)+@Lhf8gz z-gRMIOp=>ubR<~JwOmZfx1dW>Ji`KvKZ|a{PTdgvE7ax*Nq64Rxggq-`&YBe5Ua%E z#-$kfuc@>wPbCKE@dezAI#`LNwNTyWf@^1kYv*g$%++j|t=VwfVGnpG?KnkhZ2lm5 zAvxF3KHJcqYj}9ley;m$_qm?4J+tmQ928C#IY1^rz<Pfx(9;B^z+Cx8kaq*0u^>-y zw2~}ooo-&B$Hg$u-3@sbEs%HdUXms6+An5$ti}GA5MVw{31gQzTZ(i6S#zW^v4n!H z*@th*e@nyVTVtG->9UBoT+YT+_yx7s4f&ga@^i19eeM0;503ug=w;!T1G&J)tb1dg z(oNu|?)l2sBSEvf*U`Ov9t~DhmcOJSm~19EcG8;eoCdeyk^eXv@n9`&53*o0qnH)- zfM5|>F@@P=814_D=^&6D)r;dbkCKtqC@%ccU7(Lqp*a$x!y^hO^1H-1$#=fEOR1lV z_`LL`y+KEBZ;el{`=Iqg>o418I<E(IWZgURv-{RdyF@qQ-mjHp_kUt41wQO9?!)d9 zE^eiT?keKLHW<vaDC5nQ0WB|~O<Otde@ejZO#UbAhOye{(h9{u%OrKNz?S7=s+f~X zD@!U-xFTYysOd`8>hfrGS0!JH2k?FJUe#b%!WY6H9?1nZ%>_EMfzFwApN2mP&pq5Z z`*3I0-N|=Jr{c1resJ!?;&PWO_X;|eIfVWVrM^!Q@vBZipHS*kivEG3VwWd4E>T2p zDYW`<bMY$^Ub-^T*gUa+YC}$J{z`<CWTBqB$YEa^E^?&4s)pK2escK3p_v(8Fr>b! zg#=p&@(SRWQGwJ~PB7aYL?&7AN#jy09}Ag@x{|=%^;}aR#tVluS2UW)#Pxq9436R+ zJl$}oJ=R&rCQF(h)(GsOHf|2dKSP}sh-dHz0)9hWX^WkR%YYNyFR}j4At^FZpXS6p zaa`5YZzYm2lu0F&$-hEh#=j8oHPYztpN{TG*OR?b7-7)^UA-Nh9lagVo{j@unhST= zMw0lu!dukN)AdSR8lkJ{`T-}`iMWcy6(jBk<@4h+<rLRWpR{C!P7R=Exb%1H|G{`n z{w=b^!pc0N1-l>!pR<zxVokqizAu>P3%2TaY~AnJ+Ampqj<x?$boy))u3JIo@J~MZ z`u+*wW?gHRRnM0M&K-U0XtugLSMt3H?`@|bc&5j0Gd%9Naqa(3JuYH@RgP=FU)AG! zCC*80zB{%m0oo8E?4`}OK-oJFhXp#JqIlssfw%GtyWvt3b{nlI+kmU<Q+3lPFTR{D eYx{TK<_R|_hI;G}gf3x$@dt1JN4<#8{Qm&XYvh{% diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-314.pyc deleted file mode 100644 index bffba57c5e087ed99bb129d040f8e31fa2d92584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5170 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 aIF9=>>H3_U`<x6ub&YadeTiVr-u*Z32@HJz diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-314.pyc deleted file mode 100644 index 350d461a8263e0f88b07e7396462e5cbafae20ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 zcmah~&2JM&6rZ)%_T~#G4Kc1s!6j8H2NDB`2vAy~!huvMxC@v{7`B_;30c_eZfC|V zi8xqQC5nVp^;Gp%P7OzH{WFpVHDSuBy_8#!E2X{ly;(akNT?(E&HI=)`#yg2e0Wb^ zH-Yu*lfS&QPRO4qv{$OdG(Q2RL2eRLn;}9QBJUD2v5%O^sYHB2ByJ=?r<*A=J>AwN zl`dl%9Xj3AMo6ja1-i{Tv2#q5EumQh#wNDbAUEJ!CJ~97x=7|osF|A3Cy1H3q={5j zo76A{->4GclF0e}BCYf~N@faZzsQ(rVN^BIRV5#2q8q+$$li+W+_7)bnZTuYmp?XX z#3-kM;6=OGG8L7rXa{aFV&RvbOL>vn+@q{$I}YW%D8eEQ+$i+G&(R=g{NYN&53^~G z0XYMCRLRZ6$!`d8K|4%7)fOO=%i49Qp`uAsFDD_c)C;VfOxBq%2j@MXT3mz-!nE9Q z(e?tFW>nN!F#A}ONiJ9^A=C3ATeOAjvn<EAId?rrSQf{74mITcbEj)pIc2<NyObR} zb?RvCtB~EPK|;5wBY4g6!@4_Xb2{z?o&dsy?faCCAFEZC#6lQM9-FeJth*;qSXby` z<lBN;Vlk>+^yX^Z6LdU^>&R=77nLoj1Z9Ekmls2q`n>F6c_*SJ*=t#L5QGB#E%|n5 z^(Q(_T@W`v1mvFv*(Tko>6b`;Jhz406Gv^oxJucCQ^aY51_k8dXEe8f!LlQe;&nM$ zC7%PBr&{tsa;-mT!IY31HcYLG(dKsdO3yCe=BnCMtJ#&_wr+Q?l3?e?Dyd|5Ep5&u zZGSks^UXJ$-T4-r#R92ytr)0hi-MT|@FZoLd(a{(^=K*bW=lOX#p@Ae(y*X09>9WS z;IK>synJs?rXrhhDh&{M<a<J<11kK`0W5*a0$^E@Ef!>Vd@U-afmb8PFzAvlbx!?x zb+6LMt`-gfgD^|T=;&yJ?E!}6@Y6%DH9ihYHT^o+q3O?!z6Y5#BmdMWY!2og8qagX zKltDK8@a=4xx*{x)^kTUa?@+M>2LLiJ)4CC8-*ilg(EAUtrt#!CcBv*-pG%w<;PY| ztmlt|rf;j8yf^)uQDg&f|0|Ca!$ZV0M}hqRBQ2{MGwdrA80x|>Y=%83B^ZK$^#N(U zyf|lUJnIKCgqHn46s)z>)Jp>7(a08Vk4KagN4SGYINXZRXjVb!M02I{6xeW80Nt-I zz|#&6cWr>(mOr3In=R>V9~fC4h|EB1Z^J-S9fiCOpydz{mDlKKoEK&y3$OOF6EZ5@ zci<58GduL%y$AO;vLkERk)O{0eBsfB6?Z*5xoS+Rgi9%f8&<#%p$i*Ef<OfmZm~&e zm0ba^2SFX!i#ScXEepm?9j2v)bLNY>?YAsh%bNEX7rqzJAOv&9f=TKC12E-&C^)<c z1SV4%4S^CSl;>Es5X_sa3knD1K*wlxsPBWSJ#AwV>U0n<+3Ek;vvHlUfeZ=$IO6Qz z`%sf-`o%x`&Bn~O4nwVplWjW>IM_xoC`72rD97c21tB7Sx?IMGHxaU1<>egyGjN!y zIG-0nE~tx!lBO!ToNIeP^a4(`-S(qA{s!Na?1cuxRG3ghAw~p7E%nM$WkwoTz!|y6 zBn}SWv^37dh5v|6f`|i=9|y9P)HLmPGPs?7O9P}M86(Et)xGbpet7k1rrOY-_3Yc! ShgXkZ`a7BEO?+*rJO2ZJt@ttk diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-314.pyc deleted file mode 100644 index 71a21c1d9682e3636181df5218a29a60256244a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3031 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-314.pyc deleted file mode 100644 index dac180103089379c515ae68b39fa8d0d8628ec72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33432 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/release_control.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/release_control.cpython-314.pyc deleted file mode 100644 index ba5690530a5408154198452941cc4b80849ee7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4588 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-314.pyc deleted file mode 100644 index 4a83fc5e5863f4ce6acec50ac1dc93762a079040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmZWp-)|d55S}~#h-24oLz*T<l~`JYWI=60B4|qmlq#r!Qs7b|A)Kt%ckA5J_3g2{ zPSQNNfCP{H8$9yLpMiL~M|gp^xE3mp%-%VbC04rGZ+7QqXTF);*ILaw;P~yAzr=e! zz@JVz8<iQDeuQ8Q0a)0Fz}xoj`PP34IuI;;>e<qs|1t!AP<q=d>{kHw@+t(CP4wu- zW-);+2i0rPuATf^|4?aSAE(?9W{e62vpgb4!p1}-#xg0H6)GVnjQNn8PCfsDkprG^ z%_LEWTptR4MAU$=Lnb8aOMYfeSP~H%bD>G763dV6>%?$gkF8D3t!_6`q3NWLZLE@x z(g)p*?(9sQBYxb8?NDB0(sG?(Sl8zR>eSm_wiq$XLWzMtM6Ei|>VzlZEXRDB<qcDp zIYaLDz<S7^zu&Z_OQ4WNTi&bK>Mm?}fxil}W*35zt?hzc49dt+C9Ce_xu3{8q(CHA zGBPA(Ha6ra7GX@7=451$Ic8kKq|Xc|k<dJ}N(&@+pmd#SD+VmI|EHRf&vF*fXZVO6 z@J>B+HJsHE%7{z&O?Oe;_QtRa`~HpZ0U}(z0-t-a*M%MLD|p8byjRg?hW$BQn#1Ke zTyYrltp4q|$`(>AxD<T^Bh7OVa~5%JvIP@rky?|L9qmYX$ynX?k$0ts%w|nW^IAkA zw3Hg>?&>)E@$RkO7Y6_DIWOxsZ@$qxQu<LZ)#__x$Miy}Mv>zS>nrS8k-5IU-YZDi zSl^_Z^!UbG^dTR*@Hn-@w0B?hdq!Ye%s4Z>RHR)hu+OkvWOt|{E={*+T<o&!9HlHt zlywehwp`S*Gr!oxkj)(w|Na2q!sG(9mY&?7EP>}uUMTRg!xsy@;_#&cuR6R2jn<Rx zr<V~=(Fyzv58CytMrp!^?#Mc&7}Q8QjKO>}Vsf@~p3;HP28mC2qHueGQoI}p8asFI zZGEyuKi>LsCtE~XrLqRsm*(Ogj1p(Mg1eZU2r08xi~h*+ndS4cgj`BW+nzq}GIj0s zzP^A`yB8)GIR$H|Aq8WYl>JKWv<6F8#@o-DnAdlpm(NTev@5#iltm}p>!lk`oI`<I zmvPD(&u=I<+I56}(TV)Hiw@=9TnJh1c0ta&nxN`pGjF0eEqO?-U-8QSw7|RiN9%)e eV^Rgb@zX26d#lg<hSxd;6w?y;Yfqh;`}_}BEO@T~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-314.pyc deleted file mode 100644 index e286de1827f5e26d58e52c27fb85a42ba5652aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6085 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 US%qQnj%fjGV8dToP4vhA2l@~;W&i*H diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-314.pyc deleted file mode 100644 index f26121b52c9b1f871a03d9cd1901fbb2b0b23263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2256 zcma)7OK%)S5boKx$7?&FyyK9L4IvKpZW01YtR#R!EL%d086M`aq}4mq8xNlCo^<!d zam2v~#GRiJ2@d=d6j{g`DN-baL~a{=$d#&@StlDAiI%3fdZxPjtE#WQeQ$EYB`_ZU z_ILPejgUWaF&w4LaQ1G3u}$s}&sibMj&;tUU05kB7i}@Miz}t&vMrw>N61;?m5vdw ze5H`>wiT~3OXjN2a5?8B<6KH*xeb*xu$)*@y2tG;C9PHwyqNSvB)Adz8$UZGn~T|x zvv(PcZSozljz?_a&X_HFjx9BaSNYtrWv}WL0Rq5?4n+<CDBG%601&n0@RxA9kC(4% z(G^-qUzmsAy0@jzW7Chg6^7b%L47WRFn}dB!yPn!xrKI>rh(d&k>Wup@4DblLuo9J zB3ROH7zxvGTfPHG@xf7t2SRZ6E`qU5z9DxCSAQfVfOpg63uoQ&9IxONy^>e<DiB1$ zt9fId>y0-tgY{>a(WDMHs7<!T<%S57Qb(yMnbKL#n4hKb;gQiK(jRC`Ns&wfYDo6J z+u@Pq54|R`I9Vr@TyG^u!@E*x!L+#754A8X-m>dTJ{-rZhkGho*uIuY3GaD?b*^N0 z84P|V`T5pj`)eb#Y4bqnOV_SlY;P*P(T=tH9_nG*ex&+A2kO2M%Fx1;rc&sIOYPP4 zzV|O(VOQ9Ls~@tjL@&ldG24sVpM{;a39VR&xxc~h3e%3mxXD6kg_b;O_EaDu)7&p2 z!{AIK-b(6><x~`mC1(#JM&nhNQxJ$*N-Ot*oG#yZj?>elCkJKt9aPB4=AepJjht8* zjG^U{<I{t2wCd#S{9ppDN#agEp8{(SP9lB<=X_v!feI6QEiix{<!(w0uMn5l4#}Yx zS)+1DD6)1@=50pE+Q$<7v$3`+OGDdpfILP13pn1=0vXNeLBUeh!BR9_cQNLg_vouc zTcm620{TK{%%(lAfqs-5nh}wn4`tdnMo1%E3PW}2>g`qf!L`eClxsm_p?jgVu*)ji zd8NZl+Dv)H8^haQqx2&EguX`V3@?R7MA9`V@GCt#Z-NxWW{w)FzL1}2QZ#9B;E#Q5 zV&R9~(5FKV?SmNY7sN2yG5-ews>we6Fe^s&wGa8o2}_$a>$I0|0JWqL1_+Wxalv%r zF`*2^1By}uBC`Sdl2>Y^VPBRC@|=BvEmTFpJni%?z0ac%&9uAIql3^`s_sK^IhA5_ z2oPWIUvaPqjNFyE07zf;Vi5RFlo4UZ%avmx>*N`P&<C9b%4BiSPeqqQtRTILF7e0+ zkj|w?WsUz$8f8;Y;53QT6ijoKqy#zb{-=Y%#yXb{eHhH7#y}H73!Q%YAo4?}XP?t9 zZ@`XiGMFdznaAUEyYF21y*~4F`utAq#O|5KPHlSkt@)kWsom2Tc4{Yg&t3ncHmi>z zsvK~N6=7z8Q~W3Jd#Tl0YQet{fRVh1vg0xa3e}I$20^;l=TZJ;im`5}jfD&eso-;! zu|WA?j4@^+WesB*(I!V=jen><<JRgBY78RH^qU9(VWkPsRkUy#gU1|)=_m5MP%PK} zaVu|BwpU&pPelo)Y!kY+=BkLW+Xrn2gc|iFnFWDu><ero6WGRRr)X54<n04JUu$e# t2G<PTDB`4cJxk3^{Vuqm=B2O)MaOZTkeR>8jVI)z7jDx5ErltC{V&G@o00$k diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-314.pyc deleted file mode 100644 index b5484bbb7637c8fa33deaed232911723bf0441fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5326 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 T{5d=Gq|KG2!<&q1Vc$Oi5Z(4W diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index a6f9e909fe3a333b2efe33973eb1336d56af2d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5387 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/candidate.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/candidate.py deleted file mode 100644 index f27f28315..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/candidate.py +++ /dev/null @@ -1,25 +0,0 @@ -from dataclasses import dataclass - -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version - -from pip._internal.models.link import Link - - -@dataclass(frozen=True) -class InstallationCandidate: - """Represents a potential "candidate" for installation.""" - - __slots__ = ["name", "version", "link"] - - name: str - version: Version - link: Link - - def __init__(self, name: str, version: str, link: Link) -> None: - object.__setattr__(self, "name", name) - object.__setattr__(self, "version", parse_version(version)) - object.__setattr__(self, "link", link) - - def __str__(self) -> str: - return f"{self.name!r} candidate (version {self.version} at {self.link})" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/direct_url.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/direct_url.py deleted file mode 100644 index aefc670cd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/direct_url.py +++ /dev/null @@ -1,227 +0,0 @@ -"""PEP 610""" - -from __future__ import annotations - -import json -import re -import urllib.parse -from collections.abc import Iterable -from dataclasses import dataclass -from typing import Any, ClassVar, TypeVar, Union - -__all__ = [ - "DirectUrl", - "DirectUrlValidationError", - "DirInfo", - "ArchiveInfo", - "VcsInfo", -] - -T = TypeVar("T") - -DIRECT_URL_METADATA_NAME = "direct_url.json" -ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$") - - -class DirectUrlValidationError(Exception): - pass - - -def _get( - d: dict[str, Any], expected_type: type[T], key: str, default: T | None = None -) -> T | None: - """Get value from dictionary and verify expected type.""" - if key not in d: - return default - value = d[key] - if not isinstance(value, expected_type): - raise DirectUrlValidationError( - f"{value!r} has unexpected type for {key} (expected {expected_type})" - ) - return value - - -def _get_required( - d: dict[str, Any], expected_type: type[T], key: str, default: T | None = None -) -> T: - value = _get(d, expected_type, key, default) - if value is None: - raise DirectUrlValidationError(f"{key} must have a value") - return value - - -def _exactly_one_of(infos: Iterable[InfoType | None]) -> InfoType: - infos = [info for info in infos if info is not None] - if not infos: - raise DirectUrlValidationError( - "missing one of archive_info, dir_info, vcs_info" - ) - if len(infos) > 1: - raise DirectUrlValidationError( - "more than one of archive_info, dir_info, vcs_info" - ) - assert infos[0] is not None - return infos[0] - - -def _filter_none(**kwargs: Any) -> dict[str, Any]: - """Make dict excluding None values.""" - return {k: v for k, v in kwargs.items() if v is not None} - - -@dataclass -class VcsInfo: - name: ClassVar = "vcs_info" - - vcs: str - commit_id: str - requested_revision: str | None = None - - @classmethod - def _from_dict(cls, d: dict[str, Any] | None) -> VcsInfo | None: - if d is None: - return None - return cls( - vcs=_get_required(d, str, "vcs"), - commit_id=_get_required(d, str, "commit_id"), - requested_revision=_get(d, str, "requested_revision"), - ) - - def _to_dict(self) -> dict[str, Any]: - return _filter_none( - vcs=self.vcs, - requested_revision=self.requested_revision, - commit_id=self.commit_id, - ) - - -class ArchiveInfo: - name = "archive_info" - - def __init__( - self, - hash: str | None = None, - hashes: dict[str, str] | None = None, - ) -> None: - # set hashes before hash, since the hash setter will further populate hashes - self.hashes = hashes - self.hash = hash - - @property - def hash(self) -> str | None: - return self._hash - - @hash.setter - def hash(self, value: str | None) -> None: - if value is not None: - # Auto-populate the hashes key to upgrade to the new format automatically. - # We don't back-populate the legacy hash key from hashes. - try: - hash_name, hash_value = value.split("=", 1) - except ValueError: - raise DirectUrlValidationError( - f"invalid archive_info.hash format: {value!r}" - ) - if self.hashes is None: - self.hashes = {hash_name: hash_value} - elif hash_name not in self.hashes: - self.hashes = self.hashes.copy() - self.hashes[hash_name] = hash_value - self._hash = value - - @classmethod - def _from_dict(cls, d: dict[str, Any] | None) -> ArchiveInfo | None: - if d is None: - return None - return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes")) - - def _to_dict(self) -> dict[str, Any]: - return _filter_none(hash=self.hash, hashes=self.hashes) - - -@dataclass -class DirInfo: - name: ClassVar = "dir_info" - - editable: bool = False - - @classmethod - def _from_dict(cls, d: dict[str, Any] | None) -> DirInfo | None: - if d is None: - return None - return cls(editable=_get_required(d, bool, "editable", default=False)) - - def _to_dict(self) -> dict[str, Any]: - return _filter_none(editable=self.editable or None) - - -InfoType = Union[ArchiveInfo, DirInfo, VcsInfo] - - -@dataclass -class DirectUrl: - url: str - info: InfoType - subdirectory: str | None = None - - def _remove_auth_from_netloc(self, netloc: str) -> str: - if "@" not in netloc: - return netloc - user_pass, netloc_no_user_pass = netloc.split("@", 1) - if ( - isinstance(self.info, VcsInfo) - and self.info.vcs == "git" - and user_pass == "git" - ): - return netloc - if ENV_VAR_RE.match(user_pass): - return netloc - return netloc_no_user_pass - - @property - def redacted_url(self) -> str: - """url with user:password part removed unless it is formed with - environment variables as specified in PEP 610, or it is ``git`` - in the case of a git URL. - """ - purl = urllib.parse.urlsplit(self.url) - netloc = self._remove_auth_from_netloc(purl.netloc) - surl = urllib.parse.urlunsplit( - (purl.scheme, netloc, purl.path, purl.query, purl.fragment) - ) - return surl - - def validate(self) -> None: - self.from_dict(self.to_dict()) - - @classmethod - def from_dict(cls, d: dict[str, Any]) -> DirectUrl: - return DirectUrl( - url=_get_required(d, str, "url"), - subdirectory=_get(d, str, "subdirectory"), - info=_exactly_one_of( - [ - ArchiveInfo._from_dict(_get(d, dict, "archive_info")), - DirInfo._from_dict(_get(d, dict, "dir_info")), - VcsInfo._from_dict(_get(d, dict, "vcs_info")), - ] - ), - ) - - def to_dict(self) -> dict[str, Any]: - res = _filter_none( - url=self.redacted_url, - subdirectory=self.subdirectory, - ) - res[self.info.name] = self.info._to_dict() - return res - - @classmethod - def from_json(cls, s: str) -> DirectUrl: - return cls.from_dict(json.loads(s)) - - def to_json(self) -> str: - return json.dumps(self.to_dict(), sort_keys=True) - - def is_local_editable(self) -> bool: - return isinstance(self.info, DirInfo) and self.info.editable diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/format_control.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/format_control.py deleted file mode 100644 index 9f07e3f34..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/format_control.py +++ /dev/null @@ -1,78 +0,0 @@ -from __future__ import annotations - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import CommandError - - -class FormatControl: - """Helper for managing formats from which a package can be installed.""" - - __slots__ = ["no_binary", "only_binary"] - - def __init__( - self, - no_binary: set[str] | None = None, - only_binary: set[str] | None = None, - ) -> None: - if no_binary is None: - no_binary = set() - if only_binary is None: - only_binary = set() - - self.no_binary = no_binary - self.only_binary = only_binary - - def __eq__(self, other: object) -> bool: - if not isinstance(other, self.__class__): - return NotImplemented - - if self.__slots__ != other.__slots__: - return False - - return all(getattr(self, k) == getattr(other, k) for k in self.__slots__) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.no_binary}, {self.only_binary})" - - @staticmethod - def handle_mutual_excludes(value: str, target: set[str], other: set[str]) -> None: - if value.startswith("-"): - raise CommandError( - "--no-binary / --only-binary option requires 1 argument." - ) - new = value.split(",") - while ":all:" in new: - other.clear() - target.clear() - target.add(":all:") - del new[: new.index(":all:") + 1] - # Without a none, we want to discard everything as :all: covers it - if ":none:" not in new: - return - for name in new: - if name == ":none:": - target.clear() - continue - name = canonicalize_name(name) - other.discard(name) - target.add(name) - - def get_allowed_formats(self, canonical_name: str) -> frozenset[str]: - result = {"binary", "source"} - if canonical_name in self.only_binary: - result.discard("source") - elif canonical_name in self.no_binary: - result.discard("binary") - elif ":all:" in self.only_binary: - result.discard("source") - elif ":all:" in self.no_binary: - result.discard("binary") - return frozenset(result) - - def disallow_binaries(self) -> None: - self.handle_mutual_excludes( - ":all:", - self.no_binary, - self.only_binary, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/index.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/index.py deleted file mode 100644 index b94c32511..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/index.py +++ /dev/null @@ -1,28 +0,0 @@ -import urllib.parse - - -class PackageIndex: - """Represents a Package Index and provides easier access to endpoints""" - - __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"] - - def __init__(self, url: str, file_storage_domain: str) -> None: - super().__init__() - self.url = url - self.netloc = urllib.parse.urlsplit(url).netloc - self.simple_url = self._url_for_path("simple") - self.pypi_url = self._url_for_path("pypi") - - # This is part of a temporary hack used to block installs of PyPI - # packages which depend on external urls only necessary until PyPI can - # block such packages themselves - self.file_storage_domain = file_storage_domain - - def _url_for_path(self, path: str) -> str: - return urllib.parse.urljoin(self.url, path) - - -PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org") -TestPyPI = PackageIndex( - "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org" -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/installation_report.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/installation_report.py deleted file mode 100644 index 3e8e9683b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/installation_report.py +++ /dev/null @@ -1,57 +0,0 @@ -from collections.abc import Sequence -from typing import Any - -from pip._vendor.packaging.markers import default_environment - -from pip import __version__ -from pip._internal.req.req_install import InstallRequirement - - -class InstallationReport: - def __init__(self, install_requirements: Sequence[InstallRequirement]): - self._install_requirements = install_requirements - - @classmethod - def _install_req_to_dict(cls, ireq: InstallRequirement) -> dict[str, Any]: - assert ireq.download_info, f"No download_info for {ireq}" - res = { - # PEP 610 json for the download URL. download_info.archive_info.hashes may - # be absent when the requirement was installed from the wheel cache - # and the cache entry was populated by an older pip version that did not - # record origin.json. - "download_info": ireq.download_info.to_dict(), - # is_direct is true if the requirement was a direct URL reference (which - # includes editable requirements), and false if the requirement was - # downloaded from a PEP 503 index or --find-links. - "is_direct": ireq.is_direct, - # is_yanked is true if the requirement was yanked from the index, but - # was still selected by pip to conform to PEP 592. - "is_yanked": ireq.link.is_yanked if ireq.link else False, - # requested is true if the requirement was specified by the user (aka - # top level requirement), and false if it was installed as a dependency of a - # requirement. https://peps.python.org/pep-0376/#requested - "requested": ireq.user_supplied, - # PEP 566 json encoding for metadata - # https://www.python.org/dev/peps/pep-0566/#json-compatible-metadata - "metadata": ireq.get_dist().metadata_dict, - } - if ireq.user_supplied and ireq.extras: - # For top level requirements, the list of requested extras, if any. - res["requested_extras"] = sorted(ireq.extras) - return res - - def to_dict(self) -> dict[str, Any]: - return { - "version": "1", - "pip_version": __version__, - "install": [ - self._install_req_to_dict(ireq) for ireq in self._install_requirements - ], - # https://peps.python.org/pep-0508/#environment-markers - # TODO: currently, the resolver uses the default environment to evaluate - # environment markers, so that is what we report here. In the future, it - # should also take into account options such as --python-version or - # --platform, perhaps under the form of an environment_override field? - # https://github.com/pypa/pip/issues/11198 - "environment": default_environment(), - } diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/link.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/link.py deleted file mode 100644 index 200ec34c5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/link.py +++ /dev/null @@ -1,617 +0,0 @@ -from __future__ import annotations - -import datetime -import functools -import itertools -import logging -import os -import posixpath -import re -import urllib.parse -import urllib.request -from collections.abc import Mapping -from dataclasses import dataclass -from typing import ( - Any, - NamedTuple, -) - -from pip._internal.exceptions import InvalidEggFragment -from pip._internal.utils.datetime import parse_iso_datetime -from pip._internal.utils.filetypes import WHEEL_EXTENSION -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.misc import ( - pairwise, - redact_auth_from_url, - split_auth_from_netloc, - splitext, -) -from pip._internal.utils.urls import path_to_url, url_to_path - -logger = logging.getLogger(__name__) - - -# Order matters, earlier hashes have a precedence over later hashes for what -# we will pick to use. -_SUPPORTED_HASHES = ("sha512", "sha384", "sha256", "sha224", "sha1", "md5") - - -@dataclass(frozen=True) -class LinkHash: - """Links to content may have embedded hash values. This class parses those. - - `name` must be any member of `_SUPPORTED_HASHES`. - - This class can be converted to and from `ArchiveInfo`. While ArchiveInfo intends to - be JSON-serializable to conform to PEP 610, this class contains the logic for - parsing a hash name and value for correctness, and then checking whether that hash - conforms to a schema with `.is_hash_allowed()`.""" - - name: str - value: str - - _hash_url_fragment_re = re.compile( - # NB: we do not validate that the second group (.*) is a valid hex - # digest. Instead, we simply keep that string in this class, and then check it - # against Hashes when hash-checking is needed. This is easier to debug than - # proactively discarding an invalid hex digest, as we handle incorrect hashes - # and malformed hashes in the same place. - r"[#&]({choices})=([^&]*)".format( - choices="|".join(re.escape(hash_name) for hash_name in _SUPPORTED_HASHES) - ), - ) - - def __post_init__(self) -> None: - assert self.name in _SUPPORTED_HASHES - - @classmethod - @functools.cache - def find_hash_url_fragment(cls, url: str) -> LinkHash | None: - """Search a string for a checksum algorithm name and encoded output value.""" - match = cls._hash_url_fragment_re.search(url) - if match is None: - return None - name, value = match.groups() - return cls(name=name, value=value) - - def as_dict(self) -> dict[str, str]: - return {self.name: self.value} - - def as_hashes(self) -> Hashes: - """Return a Hashes instance which checks only for the current hash.""" - return Hashes({self.name: [self.value]}) - - def is_hash_allowed(self, hashes: Hashes | None) -> bool: - """ - Return True if the current hash is allowed by `hashes`. - """ - if hashes is None: - return False - return hashes.is_hash_allowed(self.name, hex_digest=self.value) - - -@dataclass(frozen=True) -class MetadataFile: - """Information about a core metadata file associated with a distribution.""" - - hashes: dict[str, str] | None - - def __post_init__(self) -> None: - if self.hashes is not None: - assert all(name in _SUPPORTED_HASHES for name in self.hashes) - - -def supported_hashes(hashes: dict[str, str] | None) -> dict[str, str] | None: - # Remove any unsupported hash types from the mapping. If this leaves no - # supported hashes, return None - if hashes is None: - return None - hashes = {n: v for n, v in hashes.items() if n in _SUPPORTED_HASHES} - if not hashes: - return None - return hashes - - -def _clean_url_path_part(part: str) -> str: - """ - Clean a "part" of a URL path (i.e. after splitting on "@" characters). - """ - # We unquote prior to quoting to make sure nothing is double quoted. - return urllib.parse.quote(urllib.parse.unquote(part)) - - -def _clean_file_url_path(part: str) -> str: - """ - Clean the first part of a URL path that corresponds to a local - filesystem path (i.e. the first part after splitting on "@" characters). - """ - # We unquote prior to quoting to make sure nothing is double quoted. - # Also, on Windows the path part might contain a drive letter which - # should not be quoted. On Linux where drive letters do not - # exist, the colon should be quoted. We rely on urllib.request - # to do the right thing here. - ret = urllib.request.pathname2url(urllib.request.url2pathname(part)) - if ret.startswith("///"): - # Remove any URL authority section, leaving only the URL path. - ret = ret.removeprefix("//") - return ret - - -# percent-encoded: / -_reserved_chars_re = re.compile("(@|%2F)", re.IGNORECASE) - - -def _clean_url_path(path: str, is_local_path: bool) -> str: - """ - Clean the path portion of a URL. - """ - if is_local_path: - clean_func = _clean_file_url_path - else: - clean_func = _clean_url_path_part - - # Split on the reserved characters prior to cleaning so that - # revision strings in VCS URLs are properly preserved. - parts = _reserved_chars_re.split(path) - - cleaned_parts = [] - for to_clean, reserved in pairwise(itertools.chain(parts, [""])): - cleaned_parts.append(clean_func(to_clean)) - # Normalize %xx escapes (e.g. %2f -> %2F) - cleaned_parts.append(reserved.upper()) - - return "".join(cleaned_parts) - - -def _ensure_quoted_url(url: str) -> str: - """ - Make sure a link is fully quoted. - For example, if ' ' occurs in the URL, it will be replaced with "%20", - and without double-quoting other characters. - """ - # Split the URL into parts according to the general structure - # `scheme://netloc/path?query#fragment`. - result = urllib.parse.urlsplit(url) - # If the netloc is empty, then the URL refers to a local filesystem path. - is_local_path = not result.netloc - path = _clean_url_path(result.path, is_local_path=is_local_path) - # Temporarily replace scheme with file to ensure the URL generated by - # urlunsplit() contains an empty netloc (file://) as per RFC 1738. - ret = urllib.parse.urlunsplit(result._replace(scheme="file", path=path)) - ret = result.scheme + ret[4:] # Restore original scheme. - return ret - - -def _absolute_link_url(base_url: str, url: str) -> str: - """ - A faster implementation of urllib.parse.urljoin with a shortcut - for absolute http/https URLs. - """ - if url.startswith(("https://", "http://")): - return url - else: - return urllib.parse.urljoin(base_url, url) - - -@functools.total_ordering -class Link: - """Represents a parsed link from a Package Index's simple URL""" - - __slots__ = [ - "_parsed_url", - "_url", - "_path", - "_hashes", - "comes_from", - "requires_python", - "yanked_reason", - "metadata_file_data", - "upload_time", - "cache_link_parsing", - "egg_fragment", - ] - - def __init__( - self, - url: str, - comes_from: str | None = None, - requires_python: str | None = None, - yanked_reason: str | None = None, - metadata_file_data: MetadataFile | None = None, - upload_time: datetime.datetime | None = None, - cache_link_parsing: bool = True, - hashes: Mapping[str, str] | None = None, - ) -> None: - """ - :param url: url of the resource pointed to (href of the link) - :param comes_from: URL or string indicating where the link was found. - :param requires_python: String containing the `Requires-Python` - metadata field, specified in PEP 345. This may be specified by - a data-requires-python attribute in the HTML link tag, as - described in PEP 503. - :param yanked_reason: the reason the file has been yanked, if the - file has been yanked, or None if the file hasn't been yanked. - This is the value of the "data-yanked" attribute, if present, in - a simple repository HTML link. If the file has been yanked but - no reason was provided, this should be the empty string. See - PEP 592 for more information and the specification. - :param metadata_file_data: the metadata attached to the file, or None if - no such metadata is provided. This argument, if not None, indicates - that a separate metadata file exists, and also optionally supplies - hashes for that file. - :param upload_time: upload time of the file, or None if the information - is not available from the server. - :param cache_link_parsing: A flag that is used elsewhere to determine - whether resources retrieved from this link should be cached. PyPI - URLs should generally have this set to False, for example. - :param hashes: A mapping of hash names to digests to allow us to - determine the validity of a download. - """ - - # The comes_from, requires_python, and metadata_file_data arguments are - # only used by classmethods of this class, and are not used in client - # code directly. - - # url can be a UNC windows share - if url.startswith("\\\\"): - url = path_to_url(url) - - self._parsed_url = urllib.parse.urlsplit(url) - # Store the url as a private attribute to prevent accidentally - # trying to set a new value. - self._url = url - # The .path property is hot, so calculate its value ahead of time. - self._path = urllib.parse.unquote(self._parsed_url.path) - - link_hash = LinkHash.find_hash_url_fragment(url) - hashes_from_link = {} if link_hash is None else link_hash.as_dict() - if hashes is None: - self._hashes = hashes_from_link - else: - self._hashes = {**hashes, **hashes_from_link} - - self.comes_from = comes_from - self.requires_python = requires_python if requires_python else None - self.yanked_reason = yanked_reason - self.metadata_file_data = metadata_file_data - self.upload_time = upload_time - - self.cache_link_parsing = cache_link_parsing - self.egg_fragment = self._egg_fragment() - - @classmethod - def from_json( - cls, - file_data: dict[str, Any], - page_url: str, - ) -> Link | None: - """ - Convert an pypi json document from a simple repository page into a Link. - """ - file_url = file_data.get("url") - if file_url is None: - return None - - url = _ensure_quoted_url(_absolute_link_url(page_url, file_url)) - pyrequire = file_data.get("requires-python") - yanked_reason = file_data.get("yanked") - hashes = file_data.get("hashes", {}) - - # PEP 714: Indexes must use the name core-metadata, but - # clients should support the old name as a fallback for compatibility. - metadata_info = file_data.get("core-metadata") - if metadata_info is None: - metadata_info = file_data.get("dist-info-metadata") - - if upload_time_data := file_data.get("upload-time"): - upload_time = parse_iso_datetime(upload_time_data) - else: - upload_time = None - - # The metadata info value may be a boolean, or a dict of hashes. - if isinstance(metadata_info, dict): - # The file exists, and hashes have been supplied - metadata_file_data = MetadataFile(supported_hashes(metadata_info)) - elif metadata_info: - # The file exists, but there are no hashes - metadata_file_data = MetadataFile(None) - else: - # False or not present: the file does not exist - metadata_file_data = None - - # The Link.yanked_reason expects an empty string instead of a boolean. - if yanked_reason and not isinstance(yanked_reason, str): - yanked_reason = "" - # The Link.yanked_reason expects None instead of False. - elif not yanked_reason: - yanked_reason = None - - return cls( - url, - comes_from=page_url, - requires_python=pyrequire, - yanked_reason=yanked_reason, - hashes=hashes, - metadata_file_data=metadata_file_data, - upload_time=upload_time, - ) - - @classmethod - def from_element( - cls, - anchor_attribs: dict[str, str | None], - page_url: str, - base_url: str, - ) -> Link | None: - """ - Convert an anchor element's attributes in a simple repository page to a Link. - """ - href = anchor_attribs.get("href") - if not href: - return None - - url = _ensure_quoted_url(_absolute_link_url(base_url, href)) - pyrequire = anchor_attribs.get("data-requires-python") - yanked_reason = anchor_attribs.get("data-yanked") - - # PEP 714: Indexes must use the name data-core-metadata, but - # clients should support the old name as a fallback for compatibility. - metadata_info = anchor_attribs.get("data-core-metadata") - if metadata_info is None: - metadata_info = anchor_attribs.get("data-dist-info-metadata") - # The metadata info value may be the string "true", or a string of - # the form "hashname=hashval" - if metadata_info == "true": - # The file exists, but there are no hashes - metadata_file_data = MetadataFile(None) - elif metadata_info is None: - # The file does not exist - metadata_file_data = None - else: - # The file exists, and hashes have been supplied - hashname, sep, hashval = metadata_info.partition("=") - if sep == "=": - metadata_file_data = MetadataFile(supported_hashes({hashname: hashval})) - else: - # Error - data is wrong. Treat as no hashes supplied. - logger.debug( - "Index returned invalid data-dist-info-metadata value: %s", - metadata_info, - ) - metadata_file_data = MetadataFile(None) - - return cls( - url, - comes_from=page_url, - requires_python=pyrequire, - yanked_reason=yanked_reason, - metadata_file_data=metadata_file_data, - ) - - def __str__(self) -> str: - if self.requires_python: - rp = f" (requires-python:{self.requires_python})" - else: - rp = "" - if self.comes_from: - return f"{self.redacted_url} (from {self.comes_from}){rp}" - else: - return self.redacted_url - - def __repr__(self) -> str: - return f"<Link {self}>" - - def __hash__(self) -> int: - return hash(self.url) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Link): - return NotImplemented - return self.url == other.url - - def __lt__(self, other: Any) -> bool: - if not isinstance(other, Link): - return NotImplemented - return self.url < other.url - - @property - def url(self) -> str: - return self._url - - @property - def redacted_url(self) -> str: - return redact_auth_from_url(self.url) - - @property - def filename(self) -> str: - path = self.path.rstrip("/") - name = posixpath.basename(path) - if not name: - # Make sure we don't leak auth information if the netloc - # includes a username and password. - netloc, user_pass = split_auth_from_netloc(self.netloc) - return netloc - - name = urllib.parse.unquote(name) - assert name, f"URL {self._url!r} produced no filename" - return name - - @property - def file_path(self) -> str: - return url_to_path(self.url) - - @property - def scheme(self) -> str: - return self._parsed_url.scheme - - @property - def netloc(self) -> str: - """ - This can contain auth information. - """ - return self._parsed_url.netloc - - @property - def path(self) -> str: - return self._path - - def splitext(self) -> tuple[str, str]: - return splitext(posixpath.basename(self.path.rstrip("/"))) - - @property - def ext(self) -> str: - return self.splitext()[1] - - @property - def url_without_fragment(self) -> str: - scheme, netloc, path, query, fragment = self._parsed_url - return urllib.parse.urlunsplit((scheme, netloc, path, query, "")) - - _egg_fragment_re = re.compile(r"[#&]egg=([^&]*)") - - # Per PEP 508. - _project_name_re = re.compile( - r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE - ) - - def _egg_fragment(self) -> str | None: - match = self._egg_fragment_re.search(self._url) - if not match: - return None - - # An egg fragment looks like a PEP 508 project name, along with - # an optional extras specifier. Anything else is invalid. - project_name = match.group(1) - if not self._project_name_re.match(project_name): - raise InvalidEggFragment(self, project_name) - - return project_name - - _subdirectory_fragment_re = re.compile(r"[#&]subdirectory=([^&]*)") - - @property - def subdirectory_fragment(self) -> str | None: - match = self._subdirectory_fragment_re.search(self._url) - if not match: - return None - return match.group(1) - - def metadata_link(self) -> Link | None: - """Return a link to the associated core metadata file (if any).""" - if self.metadata_file_data is None: - return None - metadata_url = f"{self.url_without_fragment}.metadata" - if self.metadata_file_data.hashes is None: - return Link(metadata_url) - return Link(metadata_url, hashes=self.metadata_file_data.hashes) - - def as_hashes(self) -> Hashes: - return Hashes({k: [v] for k, v in self._hashes.items()}) - - @property - def hash(self) -> str | None: - return next(iter(self._hashes.values()), None) - - @property - def hash_name(self) -> str | None: - return next(iter(self._hashes), None) - - @property - def show_url(self) -> str: - return posixpath.basename(self._url.split("#", 1)[0].split("?", 1)[0]) - - @property - def is_file(self) -> bool: - return self.scheme == "file" - - def is_existing_dir(self) -> bool: - return self.is_file and os.path.isdir(self.file_path) - - @property - def is_wheel(self) -> bool: - return self.ext == WHEEL_EXTENSION - - @property - def is_vcs(self) -> bool: - from pip._internal.vcs import vcs - - return self.scheme in vcs.all_schemes - - @property - def is_yanked(self) -> bool: - return self.yanked_reason is not None - - @property - def has_hash(self) -> bool: - return bool(self._hashes) - - def is_hash_allowed(self, hashes: Hashes | None) -> bool: - """ - Return True if the link has a hash and it is allowed by `hashes`. - """ - if hashes is None: - return False - return any(hashes.is_hash_allowed(k, v) for k, v in self._hashes.items()) - - -class _CleanResult(NamedTuple): - """Convert link for equivalency check. - - This is used in the resolver to check whether two URL-specified requirements - likely point to the same distribution and can be considered equivalent. This - equivalency logic avoids comparing URLs literally, which can be too strict - (e.g. "a=1&b=2" vs "b=2&a=1") and produce conflicts unexpecting to users. - - Currently this does three things: - - 1. Drop the basic auth part. This is technically wrong since a server can - serve different content based on auth, but if it does that, it is even - impossible to guarantee two URLs without auth are equivalent, since - the user can input different auth information when prompted. So the - practical solution is to assume the auth doesn't affect the response. - 2. Parse the query to avoid the ordering issue. Note that ordering under the - same key in the query are NOT cleaned; i.e. "a=1&a=2" and "a=2&a=1" are - still considered different. - 3. Explicitly drop most of the fragment part, except ``subdirectory=`` and - hash values, since it should have no impact the downloaded content. Note - that this drops the "egg=" part historically used to denote the requested - project (and extras), which is wrong in the strictest sense, but too many - people are supplying it inconsistently to cause superfluous resolution - conflicts, so we choose to also ignore them. - """ - - parsed: urllib.parse.SplitResult - query: dict[str, list[str]] - subdirectory: str - hashes: dict[str, str] - - -def _clean_link(link: Link) -> _CleanResult: - parsed = link._parsed_url - netloc = parsed.netloc.rsplit("@", 1)[-1] - # According to RFC 8089, an empty host in file: means localhost. - if parsed.scheme == "file" and not netloc: - netloc = "localhost" - fragment = urllib.parse.parse_qs(parsed.fragment) - if "egg" in fragment: - logger.debug("Ignoring egg= fragment in %s", link) - try: - # If there are multiple subdirectory values, use the first one. - # This matches the behavior of Link.subdirectory_fragment. - subdirectory = fragment["subdirectory"][0] - except (IndexError, KeyError): - subdirectory = "" - # If there are multiple hash values under the same algorithm, use the - # first one. This matches the behavior of Link.hash_value. - hashes = {k: fragment[k][0] for k in _SUPPORTED_HASHES if k in fragment} - return _CleanResult( - parsed=parsed._replace(netloc=netloc, query="", fragment=""), - query=urllib.parse.parse_qs(parsed.query), - subdirectory=subdirectory, - hashes=hashes, - ) - - -@functools.cache -def links_equivalent(link1: Link, link2: Link) -> bool: - return _clean_link(link1) == _clean_link(link2) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/release_control.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/release_control.py deleted file mode 100644 index f1de06863..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/release_control.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass, field - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - -from pip._internal.exceptions import CommandError - - -# TODO: add slots=True when Python 3.9 is dropped -@dataclass -class ReleaseControl: - """Helper for managing which release types can be installed.""" - - all_releases: set[str] = field(default_factory=set) - only_final: set[str] = field(default_factory=set) - _order: list[tuple[str, str]] = field( - init=False, default_factory=list, compare=False, repr=False - ) - - def handle_mutual_excludes( - self, value: str, target: set[str], other: set[str], attr_name: str - ) -> None: - """Parse and apply release control option value. - - Processes comma-separated package names or special values `:all:` and `:none:`. - - When adding packages to target, they're removed from other to maintain mutual - exclusivity between all_releases and only_final. All operations are tracked in - order so that the original command-line argument sequence can be reconstructed - when passing options to build subprocesses. - """ - if value.startswith("-"): - raise CommandError( - "--all-releases / --only-final option requires 1 argument." - ) - new = value.split(",") - while ":all:" in new: - other.clear() - target.clear() - target.add(":all:") - # Track :all: in order - self._order.append((attr_name, ":all:")) - del new[: new.index(":all:") + 1] - # Without a none, we want to discard everything as :all: covers it - if ":none:" not in new: - return - for name in new: - if name == ":none:": - target.clear() - # Track :none: in order - self._order.append((attr_name, ":none:")) - continue - name = canonicalize_name(name) - other.discard(name) - target.add(name) - # Track package-specific setting in order - self._order.append((attr_name, name)) - - def get_ordered_args(self) -> list[tuple[str, str]]: - """ - Get ordered list of (flag_name, value) tuples for reconstructing CLI args. - - Returns: - List of tuples where each tuple is (attribute_name, value). - The attribute_name is either 'all_releases' or 'only_final'. - - Example: - [("all_releases", ":all:"), ("only_final", "simple")] - would be reconstructed as: - ["--all-releases", ":all:", "--only-final", "simple"] - """ - return self._order[:] - - def allows_prereleases(self, canonical_name: NormalizedName) -> bool | None: - """ - Determine if pre-releases are allowed for a package. - - Returns: - True: Pre-releases are allowed (package in all_releases) - False: Only final releases allowed (package in only_final) - None: No specific setting, use default behavior - """ - if canonical_name in self.all_releases: - return True - elif canonical_name in self.only_final: - return False - elif ":all:" in self.all_releases: - return True - elif ":all:" in self.only_final: - return False - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/scheme.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/scheme.py deleted file mode 100644 index 06a9a550e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/scheme.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -For types associated with installation schemes. - -For a general overview of available schemes and their context, see -https://docs.python.org/3/install/index.html#alternate-installation. -""" - -from dataclasses import dataclass - -SCHEME_KEYS = ["platlib", "purelib", "headers", "scripts", "data"] - - -@dataclass(frozen=True) -class Scheme: - """A Scheme holds paths which are used as the base directories for - artifacts associated with a Python package. - """ - - __slots__ = SCHEME_KEYS - - platlib: str - purelib: str - headers: str - scripts: str - data: str diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/search_scope.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/search_scope.py deleted file mode 100644 index 136163ca0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/search_scope.py +++ /dev/null @@ -1,126 +0,0 @@ -import itertools -import logging -import os -import posixpath -import urllib.parse -from dataclasses import dataclass - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.models.index import PyPI -from pip._internal.utils.compat import has_tls -from pip._internal.utils.misc import normalize_path, redact_auth_from_url - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class SearchScope: - """ - Encapsulates the locations that pip is configured to search. - """ - - __slots__ = ["find_links", "index_urls", "no_index"] - - find_links: list[str] - index_urls: list[str] - no_index: bool - - @classmethod - def create( - cls, - find_links: list[str], - index_urls: list[str], - no_index: bool, - ) -> "SearchScope": - """ - Create a SearchScope object after normalizing the `find_links`. - """ - # Build find_links. If an argument starts with ~, it may be - # a local file relative to a home directory. So try normalizing - # it and if it exists, use the normalized version. - # This is deliberately conservative - it might be fine just to - # blindly normalize anything starting with a ~... - built_find_links: list[str] = [] - for link in find_links: - if link.startswith("~"): - new_link = normalize_path(link) - if os.path.exists(new_link): - link = new_link - built_find_links.append(link) - - # If we don't have TLS enabled, then WARN if anyplace we're looking - # relies on TLS. - if not has_tls(): - for link in itertools.chain(index_urls, built_find_links): - parsed = urllib.parse.urlparse(link) - if parsed.scheme == "https": - logger.warning( - "pip is configured with locations that require " - "TLS/SSL, however the ssl module in Python is not " - "available." - ) - break - - return cls( - find_links=built_find_links, - index_urls=index_urls, - no_index=no_index, - ) - - def get_formatted_locations(self) -> str: - lines = [] - redacted_index_urls = [] - if self.index_urls and self.index_urls != [PyPI.simple_url]: - for url in self.index_urls: - redacted_index_url = redact_auth_from_url(url) - - # Parse the URL - purl = urllib.parse.urlsplit(redacted_index_url) - - # URL is generally invalid if scheme and netloc is missing - # there are issues with Python and URL parsing, so this test - # is a bit crude. See bpo-20271, bpo-23505. Python doesn't - # always parse invalid URLs correctly - it should raise - # exceptions for malformed URLs - if not purl.scheme and not purl.netloc: - logger.warning( - 'The index url "%s" seems invalid, please provide a scheme.', - redacted_index_url, - ) - - redacted_index_urls.append(redacted_index_url) - - lines.append( - "Looking in indexes: {}".format(", ".join(redacted_index_urls)) - ) - - if self.find_links: - lines.append( - "Looking in links: {}".format( - ", ".join(redact_auth_from_url(url) for url in self.find_links) - ) - ) - return "\n".join(lines) - - def get_index_urls_locations(self, project_name: str) -> list[str]: - """Returns the locations found via self.index_urls - - Checks the url_name on the main (first in the list) index and - use this url_name to produce all locations - """ - - def mkurl_pypi_url(url: str) -> str: - loc = posixpath.join( - url, urllib.parse.quote(canonicalize_name(project_name)) - ) - # For maximum compatibility with easy_install, ensure the path - # ends in a trailing slash. Although this isn't in the spec - # (and PyPI can handle it without the slash) some other index - # implementations might break if they relied on easy_install's - # behavior. - if not loc.endswith("/"): - loc = loc + "/" - return loc - - return [mkurl_pypi_url(url) for url in self.index_urls] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/selection_prefs.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/selection_prefs.py deleted file mode 100644 index 04ef63ab5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/selection_prefs.py +++ /dev/null @@ -1,56 +0,0 @@ -from __future__ import annotations - -from pip._internal.models.format_control import FormatControl -from pip._internal.models.release_control import ReleaseControl - - -# TODO: This needs Python 3.10's improved slots support for dataclasses -# to be converted into a dataclass. -class SelectionPreferences: - """ - Encapsulates the candidate selection preferences for downloading - and installing files. - """ - - __slots__ = [ - "allow_yanked", - "release_control", - "format_control", - "prefer_binary", - "ignore_requires_python", - ] - - # Don't include an allow_yanked default value to make sure each call - # site considers whether yanked releases are allowed. This also causes - # that decision to be made explicit in the calling code, which helps - # people when reading the code. - def __init__( - self, - allow_yanked: bool, - release_control: ReleaseControl | None = None, - format_control: FormatControl | None = None, - prefer_binary: bool = False, - ignore_requires_python: bool | None = None, - ) -> None: - """Create a SelectionPreferences object. - - :param allow_yanked: Whether files marked as yanked (in the sense - of PEP 592) are permitted to be candidates for install. - :param release_control: A ReleaseControl object or None. Used to control - whether pre-releases are allowed for specific packages. - :param format_control: A FormatControl object or None. Used to control - the selection of source packages / binary packages when consulting - the index and links. - :param prefer_binary: Whether to prefer an old, but valid, binary - dist over a new source dist. - :param ignore_requires_python: Whether to ignore incompatible - "Requires-Python" values in links. Defaults to False. - """ - if ignore_requires_python is None: - ignore_requires_python = False - - self.allow_yanked = allow_yanked - self.release_control = release_control - self.format_control = format_control - self.prefer_binary = prefer_binary - self.ignore_requires_python = ignore_requires_python diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/target_python.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/target_python.py deleted file mode 100644 index 8c38392d8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/target_python.py +++ /dev/null @@ -1,122 +0,0 @@ -from __future__ import annotations - -import sys - -from pip._vendor.packaging.tags import Tag - -from pip._internal.utils.compatibility_tags import get_supported, version_info_to_nodot -from pip._internal.utils.misc import normalize_version_info - - -class TargetPython: - """ - Encapsulates the properties of a Python interpreter one is targeting - for a package install, download, etc. - """ - - __slots__ = [ - "_given_py_version_info", - "abis", - "implementation", - "platforms", - "py_version", - "py_version_info", - "_valid_tags", - "_valid_tags_set", - ] - - def __init__( - self, - platforms: list[str] | None = None, - py_version_info: tuple[int, ...] | None = None, - abis: list[str] | None = None, - implementation: str | None = None, - ) -> None: - """ - :param platforms: A list of strings or None. If None, searches for - packages that are supported by the current system. Otherwise, will - find packages that can be built on the platforms passed in. These - packages will only be downloaded for distribution: they will - not be built locally. - :param py_version_info: An optional tuple of ints representing the - Python version information to use (e.g. `sys.version_info[:3]`). - This can have length 1, 2, or 3 when provided. - :param abis: A list of strings or None. This is passed to - compatibility_tags.py's get_supported() function as is. - :param implementation: A string or None. This is passed to - compatibility_tags.py's get_supported() function as is. - """ - # Store the given py_version_info for when we call get_supported(). - self._given_py_version_info = py_version_info - - if py_version_info is None: - py_version_info = sys.version_info[:3] - else: - py_version_info = normalize_version_info(py_version_info) - - py_version = ".".join(map(str, py_version_info[:2])) - - self.abis = abis - self.implementation = implementation - self.platforms = platforms - self.py_version = py_version - self.py_version_info = py_version_info - - # This is used to cache the return value of get_(un)sorted_tags. - self._valid_tags: list[Tag] | None = None - self._valid_tags_set: set[Tag] | None = None - - def format_given(self) -> str: - """ - Format the given, non-None attributes for display. - """ - display_version = None - if self._given_py_version_info is not None: - display_version = ".".join( - str(part) for part in self._given_py_version_info - ) - - key_values = [ - ("platforms", self.platforms), - ("version_info", display_version), - ("abis", self.abis), - ("implementation", self.implementation), - ] - return " ".join( - f"{key}={value!r}" for key, value in key_values if value is not None - ) - - def get_sorted_tags(self) -> list[Tag]: - """ - Return the supported PEP 425 tags to check wheel candidates against. - - The tags are returned in order of preference (most preferred first). - """ - if self._valid_tags is None: - # Pass versions=None if no py_version_info was given since - # versions=None uses special default logic. - py_version_info = self._given_py_version_info - if py_version_info is None: - version = None - else: - version = version_info_to_nodot(py_version_info) - - tags = get_supported( - version=version, - platforms=self.platforms, - abis=self.abis, - impl=self.implementation, - ) - self._valid_tags = tags - - return self._valid_tags - - def get_unsorted_tags(self) -> set[Tag]: - """Exactly the same as get_sorted_tags, but returns a set. - - This is important for performance. - """ - if self._valid_tags_set is None: - self._valid_tags_set = set(self.get_sorted_tags()) - - return self._valid_tags_set diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/wheel.py deleted file mode 100644 index fbd4902dc..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/models/wheel.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Represents a wheel file and provides access to the various parts of the -name that have meaning. -""" - -from __future__ import annotations - -from collections.abc import Iterable - -from pip._vendor.packaging.tags import Tag -from pip._vendor.packaging.utils import ( - InvalidWheelFilename as _PackagingInvalidWheelFilename, -) -from pip._vendor.packaging.utils import parse_wheel_filename - -from pip._internal.exceptions import InvalidWheelFilename - - -class Wheel: - """A wheel file""" - - def __init__(self, filename: str) -> None: - self.filename = filename - - try: - wheel_info = parse_wheel_filename(filename) - except _PackagingInvalidWheelFilename as e: - raise InvalidWheelFilename(e.args[0]) from None - - self.name, _version, self.build_tag, self.file_tags = wheel_info - self.version = str(_version) - - def get_formatted_file_tags(self) -> list[str]: - """Return the wheel's tags as a sorted list of strings.""" - return sorted(str(tag) for tag in self.file_tags) - - def support_index_min(self, tags: list[Tag]) -> int: - """Return the lowest index that one of the wheel's file_tag combinations - achieves in the given list of supported tags. - - For example, if there are 8 supported tags and one of the file tags - is first in the list, then return 0. - - :param tags: the PEP 425 tags to check the wheel against, in order - with most preferred first. - - :raises ValueError: If none of the wheel's file tags match one of - the supported tags. - """ - try: - return next(i for i, t in enumerate(tags) if t in self.file_tags) - except StopIteration: - raise ValueError() - - def find_most_preferred_tag( - self, tags: list[Tag], tag_to_priority: dict[Tag, int] - ) -> int: - """Return the priority of the most preferred tag that one of the wheel's file - tag combinations achieves in the given list of supported tags using the given - tag_to_priority mapping, where lower priorities are more-preferred. - - This is used in place of support_index_min in some cases in order to avoid - an expensive linear scan of a large list of tags. - - :param tags: the PEP 425 tags to check the wheel against. - :param tag_to_priority: a mapping from tag to priority of that tag, where - lower is more preferred. - - :raises ValueError: If none of the wheel's file tags match one of - the supported tags. - """ - return min( - tag_to_priority[tag] for tag in self.file_tags if tag in tag_to_priority - ) - - def supported(self, tags: Iterable[Tag]) -> bool: - """Return whether the wheel is compatible with one of the given tags. - - :param tags: the PEP 425 tags to check the wheel against. - """ - return not self.file_tags.isdisjoint(tags) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__init__.py deleted file mode 100644 index 0ae1f5626..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Contains purely network-related utilities.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 7b326cf425f089b691ad723722ae200039944c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmXv}O-lnY5KUCH2>KfqJXP6l7mHXCFTF~UqPIXucLyDtO+qq@t|#yQ5|92BkL%Hk zN1=bf1nN7ynK#VGo0G$XeHQWg@q=ZI-%0#~Z<2Ltd1VVmY{8G%aO>rGW(_GcA#<$< z-DL*o$@*0ug(9f4mQW)hgwcG+`#mXZTS@uO)@fz`HoFja0eldu247C6W09tX^Y#%c z3Zl}st(Pi5js_`GAf+|<yc9PbJy>&EPUJ*BpP$KFXk5A}sd3^Omm(lR?o_o>_Yj0b uS4cDj-Y8vcY!)(>kfa>Bt{+@Bwr(|C`Q7L({Tv37ez!U2Uu^7mqWA;TkXtAK diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-314.pyc deleted file mode 100644 index e7f3bfc6b2f42b97341bcfe9c913792ae07a7e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26512 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 Ar~m)} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-314.pyc deleted file mode 100644 index b9752d24158c9c5aa5d4dd9ae4eaf2ccfba4fc7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10261 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-314.pyc deleted file mode 100644 index d25ec2ce71cd8413234ce122468614d16b735d17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18740 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-314.pyc deleted file mode 100644 index a9a614db9929f668f5117d30548e8253fcc587da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14242 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 WxIYu|TbD=8Z`p*FHAXon;r|E8mZ-@9 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-314.pyc deleted file mode 100644 index 0bb67c58a736b3ccfc83090a3e6a505a2efcb8f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22435 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-314.pyc deleted file mode 100644 index 3780e4320b3e114eb60c9d1f23a03acfdf633ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2913 zcmai0-A^3X6+bhx-z>WX*ae%f31)$fvkL_5@)4y)fP-aB+%YCmGx2EHy)k1iv)em& z9h)aq<$+dIGEyb_kOv<6;7V1Ms{cT&JoFXpHj74<VyR74zpV?ct+o$6_wFvnh}Kuy zyXVaPIOm>oe!qLqM(RU=?cwkKX8k(~@Mo^nno<?^mr*cb4YW`Tu)0BDa2+)1qBJWr zxr@v4MP=5*JVI73dS`vi*9DqK^A1SN{|U~xC7~W>0nOI}n!g2d4J`OcU|7-us0X>8 zlUPWrI|Ir3r`&8(a)a*^n^2SG>8~X>pb@8#w;h55@p-~N%hOv^dD|u#X65Y}O7nCz zI+@9k0!z)<nS9o=Z@2*~OKfJbyBP_$<Uig#_~S?0@5gQp7U8-)`Z+)rzqP{;rDaKz zbR4NPP1ckF8Qt<cmGO(~q3DO}ql6WyJx}>w=#lT!JY6xF!%cL%>r><UHHT0~H?xEe zjg1ZJ++Dpu^Ec67N6+N)#q5&lkd$Rx3_FLJxg4RXA^pl-ww$+zhenJM<Id=LV}Yy` zawa1NTPf&s){^d6jHC)?=9YPbIC{Y<3>cQp2(``JfL)2pK#^HFCtbMfh7H5C?L6Zf z7&L<3b>YwH#BL3q!zpQ6dM5fWM$6*=zNez^;|vf{;{tD9{E4XfFb-G>P>}RmL@|a} zcyx|6okvHsk?Lq)RnMXa?a=l=)?M*erycpzq>-w%f_yoAvb_T43P(giA6bfGQJ#=T z$1%qNZddb+Hllon%a^f$FL#~1Dh!%;QO4ef<Kb6#<XRZs@fM`Z<C^E>^~bFGh1Kpu ztDPsWLVJPNTV0e6V_DC4)DgUu_F;n-{9ZNQSj(X^pn{I)t~4KHu>{(&4i-+#*@>~2 zU&g)z=6-L%gwg?)l&o`M)mvnrrbbsomXlA7j-DG!4O#avQ`P}?t5J0-XCVYt0nl-E zHKZa^)FRD|tJX*8B+j@>=xsu4GZ0Jx4lxe(`DDPweFZ%14B@CVoxJUOm+ms+xV|hw zoD;Y4nr(4mTByR3TZf2ZMaK{m6tqWuc>bh9d2zUrWyT5y;iO@#I5%iBesp+o_o^zz zaDv-FP0Jw$I%`yRqHXwDfak9$tifKaWo`bk|BZV+TW2@Veo-v>6A%4~a!3iD-;15v z`grr>Qmk(`)_33kC^q=h3*`Vb#<$uw+tz(g{Gs)1Dbl$c>HNmuv)xqk_dJO<m7-m{ z(XO3{x*h$}cmK|pt6%l}q5nbuSEqNvbI%kAw%`t-`g@*IgSy+GeiQ879xerYU$d~x z7d{U_ApSVgvwi)Kk*S@)6z&#?zc}cEhVBE9j=LLv6g&5`3uOfd{^h)ZNBvdXR119F z(mM^x*WZ`0e}zkfI76_)M<Ob(<5Im^mjIgbk{xuO8`1E}@C++&pRVZu0}67lmvTE4 zK?`muvs|=q8IH9|XdQl-PkJclCRafkq}&%8!!9XNj@Sw#i<}Dj6Ws(K7{rcqV4u|b zjCYSC@v_4Id-}xxU%Zix;=SxIr+1?2pS*8A^WqrgAj=${0Tpf;dBn57he9_N$XbQf zP&?kPaNmx#MZ9Y?xrWvTxPZ)8kQe1Uu!a}rB|LQyIx$uP!-s5&7#^r#xQ(Ou*q&TH z3B?OX7<56dvBwSEwH-QyjfI-s6ympv@pB5|+_O6TzIB_}s;N@)<05gGqt@=@w^h8> zZsSF(vSp%XO=hYhLr(evVmVU5DB=+BD4SujT!osSxju&>m{;7$BxBTCDl$^REncr? z7GcU$O*^o2y_MZ~@Opcz=#17F!l(?=UK|x!wNQA9Nhk--cw3*uI=1vpy%g);jrH$^ z<K;B8zgZrFc=DfcDjr&&DUU!?>&B)1bEv&II1k~|2jIhXk;c8|_N}?ixl(gtw>hzW z^HKBA`pmaYt!_hXud!w0Qn?<d{l`h5wVz0nZ%Lo`r{Om;3cpQH_9+iK6cit*elGWM z`4!CYJo4l0FJX7m`(pqfOfO#`V>l~|?1LPCSb0aV!*>&HSU!rI30aePR1iI~K#%L6 zotd1T(XJ*Hx6R-Q$y)sBWaes51XLWua6MTo!(0Uu^#3r#FJq@0yEQ05Viyw6-vMd- zA&hM_Z)AQkyuSSN&RrP$`!Gno0yXoP84o1GG>L26XeN*E9r1K?(&kb|;MQ%!*G$^L zI?Lv1x>jiE6{Pl@Q^9zvm{EK0q{$ur-s64?dZ+wB=Qd4$@ZtR22b0sr)a<qSOUBiU zKbjHjEviHi03M9HA;{qe6~Yg^i*|}R@*d^HAWru#3NMfeCFxs8JcPt|F!&uzl;48( m)cu<~r^nX(k6`RcT-|}DfB5)Qsyq&7-+RtUL@<gt_kRI{^Irb| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-314.pyc deleted file mode 100644 index 571c9be15581ba2bbb9dc9eefe69dea794a5f6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3451 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 C4KxA( diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/auth.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/auth.py deleted file mode 100644 index 4504f61a7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/auth.py +++ /dev/null @@ -1,568 +0,0 @@ -"""Network Authentication Helpers - -Contains interface (MultiDomainBasicAuth) and associated glue code for -providing credentials in the context of network requests. -""" - -from __future__ import annotations - -import logging -import os -import shutil -import subprocess -import sysconfig -import typing -import urllib.parse -from abc import ABC, abstractmethod -from functools import cache -from os.path import commonprefix -from pathlib import Path -from typing import Any, NamedTuple - -from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth -from pip._vendor.requests.utils import get_netrc_auth - -from pip._internal.utils.logging import getLogger -from pip._internal.utils.misc import ( - ask, - ask_input, - ask_password, - remove_auth_from_url, - split_auth_netloc_from_url, -) -from pip._internal.vcs.versioncontrol import AuthInfo - -if typing.TYPE_CHECKING: - from pip._vendor.requests import PreparedRequest - from pip._vendor.requests.models import Response - -logger = getLogger(__name__) - -KEYRING_DISABLED = False - - -class Credentials(NamedTuple): - url: str - username: str - password: str - - -class KeyRingBaseProvider(ABC): - """Keyring base provider interface""" - - has_keyring: bool - - @abstractmethod - def get_auth_info(self, url: str, username: str | None) -> AuthInfo | None: ... - - @abstractmethod - def save_auth_info(self, url: str, username: str, password: str) -> None: ... - - -class KeyRingNullProvider(KeyRingBaseProvider): - """Keyring null provider""" - - has_keyring = False - - def get_auth_info(self, url: str, username: str | None) -> AuthInfo | None: - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - return None - - -class KeyRingPythonProvider(KeyRingBaseProvider): - """Keyring interface which uses locally imported `keyring`""" - - has_keyring = True - - def __init__(self) -> None: - import keyring - - self.keyring = keyring - - def get_auth_info(self, url: str, username: str | None) -> AuthInfo | None: - # Support keyring's get_credential interface which supports getting - # credentials without a username. This is only available for - # keyring>=15.2.0. - if hasattr(self.keyring, "get_credential"): - logger.debug("Getting credentials from keyring for %s", url) - cred = self.keyring.get_credential(url, username) - if cred is not None: - return cred.username, cred.password - return None - - if username is not None: - logger.debug("Getting password from keyring for %s", url) - password = self.keyring.get_password(url, username) - if password: - return username, password - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - self.keyring.set_password(url, username, password) - - -class KeyRingCliProvider(KeyRingBaseProvider): - """Provider which uses `keyring` cli - - Instead of calling the keyring package installed alongside pip - we call keyring on the command line which will enable pip to - use which ever installation of keyring is available first in - PATH. - """ - - has_keyring = True - - def __init__(self, cmd: str) -> None: - self.keyring = cmd - - def get_auth_info(self, url: str, username: str | None) -> AuthInfo | None: - # This is the default implementation of keyring.get_credential - # https://github.com/jaraco/keyring/blob/97689324abcf01bd1793d49063e7ca01e03d7d07/keyring/backend.py#L134-L139 - if username is not None: - password = self._get_password(url, username) - if password is not None: - return username, password - return None - - def save_auth_info(self, url: str, username: str, password: str) -> None: - return self._set_password(url, username, password) - - def _get_password(self, service_name: str, username: str) -> str | None: - """Mirror the implementation of keyring.get_password using cli""" - if self.keyring is None: - return None - - cmd = [self.keyring, "get", service_name, username] - env = os.environ.copy() - env["PYTHONIOENCODING"] = "utf-8" - res = subprocess.run( - cmd, - stdin=subprocess.DEVNULL, - stdout=subprocess.PIPE, - env=env, - ) - if res.returncode: - return None - return res.stdout.decode("utf-8").strip(os.linesep) - - def _set_password(self, service_name: str, username: str, password: str) -> None: - """Mirror the implementation of keyring.set_password using cli""" - if self.keyring is None: - return None - env = os.environ.copy() - env["PYTHONIOENCODING"] = "utf-8" - subprocess.run( - [self.keyring, "set", service_name, username], - input=f"{password}{os.linesep}".encode(), - env=env, - check=True, - ) - return None - - -@cache -def get_keyring_provider(provider: str) -> KeyRingBaseProvider: - logger.verbose("Keyring provider requested: %s", provider) - - # keyring has previously failed and been disabled - if KEYRING_DISABLED: - provider = "disabled" - if provider in ["import", "auto"]: - try: - impl = KeyRingPythonProvider() - logger.verbose("Keyring provider set: import") - return impl - except ImportError: - pass - except Exception as exc: - # In the event of an unexpected exception - # we should warn the user - msg = "Installed copy of keyring fails with exception %s" - if provider == "auto": - msg = msg + ", trying to find a keyring executable as a fallback" - logger.warning(msg, exc, exc_info=logger.isEnabledFor(logging.DEBUG)) - if provider in ["subprocess", "auto"]: - cli = shutil.which("keyring") - if cli and cli.startswith(sysconfig.get_path("scripts")): - # all code within this function is stolen from shutil.which implementation - @typing.no_type_check - def PATH_as_shutil_which_determines_it() -> str: - path = os.environ.get("PATH", None) - if path is None: - try: - path = os.confstr("CS_PATH") - except (AttributeError, ValueError): - # os.confstr() or CS_PATH is not available - path = os.defpath - # bpo-35755: Don't use os.defpath if the PATH environment variable is - # set to an empty string - - return path - - scripts = Path(sysconfig.get_path("scripts")) - - paths = [] - for path in PATH_as_shutil_which_determines_it().split(os.pathsep): - p = Path(path) - try: - if not p.samefile(scripts): - paths.append(path) - except FileNotFoundError: - pass - - path = os.pathsep.join(paths) - - cli = shutil.which("keyring", path=path) - - if cli: - logger.verbose("Keyring provider set: subprocess with executable %s", cli) - return KeyRingCliProvider(cli) - - logger.verbose("Keyring provider set: disabled") - return KeyRingNullProvider() - - -class MultiDomainBasicAuth(AuthBase): - def __init__( - self, - prompting: bool = True, - index_urls: list[str] | None = None, - keyring_provider: str = "auto", - ) -> None: - self.prompting = prompting - self.index_urls = index_urls - self.keyring_provider = keyring_provider - self.passwords: dict[str, AuthInfo] = {} - # When the user is prompted to enter credentials and keyring is - # available, we will offer to save them. If the user accepts, - # this value is set to the credentials they entered. After the - # request authenticates, the caller should call - # ``save_credentials`` to save these. - self._credentials_to_save: Credentials | None = None - - @property - def keyring_provider(self) -> KeyRingBaseProvider: - return get_keyring_provider(self._keyring_provider) - - @keyring_provider.setter - def keyring_provider(self, provider: str) -> None: - # The free function get_keyring_provider has been decorated with - # functools.cache. If an exception occurs in get_keyring_auth that - # cache will be cleared and keyring disabled, take that into account - # if you want to remove this indirection. - self._keyring_provider = provider - - @property - def use_keyring(self) -> bool: - # We won't use keyring when --no-input is passed unless - # a specific provider is requested because it might require - # user interaction - return self.prompting or self._keyring_provider not in ["auto", "disabled"] - - def _get_keyring_auth( - self, - url: str | None, - username: str | None, - ) -> AuthInfo | None: - """Return the tuple auth for a given url from keyring.""" - # Do nothing if no url was provided - if not url: - return None - - try: - return self.keyring_provider.get_auth_info(url, username) - except Exception as exc: - # Log the full exception (with stacktrace) at debug, so it'll only - # show up when running in verbose mode. - logger.debug("Keyring is skipped due to an exception", exc_info=True) - # Always log a shortened version of the exception. - logger.warning( - "Keyring is skipped due to an exception: %s", - str(exc), - ) - global KEYRING_DISABLED - KEYRING_DISABLED = True - get_keyring_provider.cache_clear() - return None - - def _get_index_url(self, url: str) -> str | None: - """Return the original index URL matching the requested URL. - - Cached or dynamically generated credentials may work against - the original index URL rather than just the netloc. - - The provided url should have had its username and password - removed already. If the original index url had credentials then - they will be included in the return value. - - Returns None if no matching index was found, or if --no-index - was specified by the user. - """ - if not url or not self.index_urls: - return None - - url = remove_auth_from_url(url).rstrip("/") + "/" - parsed_url = urllib.parse.urlsplit(url) - - candidates = [] - - for index in self.index_urls: - index = index.rstrip("/") + "/" - parsed_index = urllib.parse.urlsplit(remove_auth_from_url(index)) - if parsed_url == parsed_index: - return index - - if parsed_url.netloc != parsed_index.netloc: - continue - - candidate = urllib.parse.urlsplit(index) - candidates.append(candidate) - - if not candidates: - return None - - candidates.sort( - reverse=True, - key=lambda candidate: commonprefix( - [ - parsed_url.path, - candidate.path, - ] - ).rfind("/"), - ) - - return urllib.parse.urlunsplit(candidates[0]) - - def _get_new_credentials( - self, - original_url: str, - *, - allow_netrc: bool = True, - allow_keyring: bool = False, - ) -> AuthInfo: - """Find and return credentials for the specified URL.""" - # Split the credentials and netloc from the url. - url, netloc, url_user_password = split_auth_netloc_from_url( - original_url, - ) - - # Start with the credentials embedded in the url - username, password = url_user_password - if username is not None and password is not None: - logger.debug("Found credentials in url for %s", netloc) - return url_user_password - - # Find a matching index url for this request - index_url = self._get_index_url(url) - if index_url: - # Split the credentials from the url. - index_info = split_auth_netloc_from_url(index_url) - if index_info: - index_url, _, index_url_user_password = index_info - logger.debug("Found index url %s", index_url) - - # If an index URL was found, try its embedded credentials - if index_url and index_url_user_password[0] is not None: - username, password = index_url_user_password - if username is not None and password is not None: - logger.debug("Found credentials in index url for %s", netloc) - return index_url_user_password - - # Get creds from netrc if we still don't have them - if allow_netrc: - netrc_auth = get_netrc_auth(original_url) - if netrc_auth: - logger.debug("Found credentials in netrc for %s", netloc) - return netrc_auth - - # If we don't have a password and keyring is available, use it. - if allow_keyring: - # The index url is more specific than the netloc, so try it first - # fmt: off - kr_auth = ( - self._get_keyring_auth(index_url, username) or - self._get_keyring_auth(netloc, username) - ) - # fmt: on - if kr_auth: - logger.debug("Found credentials in keyring for %s", netloc) - return kr_auth - - return username, password - - def _get_url_and_credentials( - self, original_url: str - ) -> tuple[str, str | None, str | None]: - """Return the credentials to use for the provided URL. - - If allowed, netrc and keyring may be used to obtain the - correct credentials. - - Returns (url_without_credentials, username, password). Note - that even if the original URL contains credentials, this - function may return a different username and password. - """ - url, netloc, _ = split_auth_netloc_from_url(original_url) - - # Try to get credentials from original url - username, password = self._get_new_credentials(original_url) - - # If credentials not found, use any stored credentials for this netloc. - # Do this if either the username or the password is missing. - # This accounts for the situation in which the user has specified - # the username in the index url, but the password comes from keyring. - if (username is None or password is None) and netloc in self.passwords: - un, pw = self.passwords[netloc] - # It is possible that the cached credentials are for a different username, - # in which case the cache should be ignored. - if username is None or username == un: - username, password = un, pw - - if username is not None or password is not None: - # Convert the username and password if they're None, so that - # this netloc will show up as "cached" in the conditional above. - # Further, HTTPBasicAuth doesn't accept None, so it makes sense to - # cache the value that is going to be used. - username = username or "" - password = password or "" - - # Store any acquired credentials. - self.passwords[netloc] = (username, password) - - assert ( - # Credentials were found - (username is not None and password is not None) - # Credentials were not found - or (username is None and password is None) - ), f"Could not load credentials from url: {original_url}" - - return url, username, password - - def __call__(self, req: PreparedRequest) -> PreparedRequest: - # Get credentials for this request - assert req.url is not None - url, username, password = self._get_url_and_credentials(req.url) - - # Set the url of the request to the url without any credentials - req.url = url - - if username is not None and password is not None: - # Send the basic auth with this request - req = HTTPBasicAuth(username, password)(req) - - # Attach a hook to handle 401 responses - req.register_hook("response", self.handle_401) - - return req - - # Factored out to allow for easy patching in tests - def _prompt_for_password(self, netloc: str) -> tuple[str | None, str | None, bool]: - username = ask_input(f"User for {netloc}: ") if self.prompting else None - if not username: - return None, None, False - if self.use_keyring: - auth = self._get_keyring_auth(netloc, username) - if auth and auth[0] is not None and auth[1] is not None: - return auth[0], auth[1], False - password = ask_password("Password: ") - return username, password, True - - # Factored out to allow for easy patching in tests - def _should_save_password_to_keyring(self) -> bool: - if ( - not self.prompting - or not self.use_keyring - or not self.keyring_provider.has_keyring - ): - return False - return ask("Save credentials to keyring [y/N]: ", ["y", "n"]) == "y" - - def handle_401(self, resp: Response, **kwargs: Any) -> Response: - # We only care about 401 responses, anything else we want to just - # pass through the actual response - if resp.status_code != 401: - return resp - - username, password = None, None - - # Query the keyring for credentials: - if self.use_keyring: - username, password = self._get_new_credentials( - resp.url, - allow_netrc=False, - allow_keyring=True, - ) - - # We are not able to prompt the user so simply return the response - if not self.prompting and not username and not password: - return resp - - parsed = urllib.parse.urlparse(resp.url) - - # Prompt the user for a new username and password - save = False - if not username and not password: - username, password, save = self._prompt_for_password(parsed.netloc) - - # Store the new username and password to use for future requests - self._credentials_to_save = None - if username is not None and password is not None: - self.passwords[parsed.netloc] = (username, password) - - # Prompt to save the password to keyring - if save and self._should_save_password_to_keyring(): - self._credentials_to_save = Credentials( - url=parsed.netloc, - username=username, - password=password, - ) - - # Consume content and release the original connection to allow our new - # request to reuse the same one. - # The result of the assignment isn't used, it's just needed to consume - # the content. - _ = resp.content - resp.raw.release_conn() - - # Add our new username and password to the request - req = HTTPBasicAuth(username or "", password or "")(resp.request) - req.register_hook("response", self.warn_on_401) - - # On successful request, save the credentials that were used to - # keyring. (Note that if the user responded "no" above, this member - # is not set and nothing will be saved.) - if self._credentials_to_save: - req.register_hook("response", self.save_credentials) - - # Send our new request - new_resp = resp.connection.send(req, **kwargs) - new_resp.history.append(resp) - - return new_resp - - def warn_on_401(self, resp: Response, **kwargs: Any) -> None: - """Response callback to warn about incorrect credentials.""" - if resp.status_code == 401: - logger.warning( - "401 Error, Credentials not correct for %s", - resp.request.url, - ) - - def save_credentials(self, resp: Response, **kwargs: Any) -> None: - """Response callback to save credentials on success.""" - assert ( - self.keyring_provider.has_keyring - ), "should never reach here without keyring" - - creds = self._credentials_to_save - self._credentials_to_save = None - if creds and resp.status_code < 400: - try: - logger.info("Saving credentials to keyring") - self.keyring_provider.save_auth_info( - creds.url, creds.username, creds.password - ) - except Exception: - logger.exception("Failed to save credentials") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/cache.py deleted file mode 100644 index 2a372f2e0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/cache.py +++ /dev/null @@ -1,128 +0,0 @@ -"""HTTP cache implementation.""" - -from __future__ import annotations - -import os -import shutil -from collections.abc import Generator -from contextlib import contextmanager -from datetime import datetime -from typing import Any, BinaryIO, Callable - -from pip._vendor.cachecontrol.cache import SeparateBodyBaseCache -from pip._vendor.cachecontrol.caches import SeparateBodyFileCache -from pip._vendor.requests.models import Response - -from pip._internal.utils.filesystem import ( - adjacent_tmp_file, - copy_directory_permissions, - replace, -) -from pip._internal.utils.misc import ensure_dir - - -def is_from_cache(response: Response) -> bool: - return getattr(response, "from_cache", False) - - -@contextmanager -def suppressed_cache_errors() -> Generator[None, None, None]: - """If we can't access the cache then we can just skip caching and process - requests as if caching wasn't enabled. - """ - try: - yield - except OSError: - pass - - -class SafeFileCache(SeparateBodyBaseCache): - """ - A file based cache which is safe to use even when the target directory may - not be accessible or writable. - - There is a race condition when two processes try to write and/or read the - same entry at the same time, since each entry consists of two separate - files (https://github.com/psf/cachecontrol/issues/324). We therefore have - additional logic that makes sure that both files to be present before - returning an entry; this fixes the read side of the race condition. - - For the write side, we assume that the server will only ever return the - same data for the same URL, which ought to be the case for files pip is - downloading. PyPI does not have a mechanism to swap out a wheel for - another wheel, for example. If this assumption is not true, the - CacheControl issue will need to be fixed. - """ - - def __init__(self, directory: str) -> None: - assert directory is not None, "Cache directory must not be None." - super().__init__() - self.directory = directory - - def _get_cache_path(self, name: str) -> str: - # From cachecontrol.caches.file_cache.FileCache._fn, brought into our - # class for backwards-compatibility and to avoid using a non-public - # method. - hashed = SeparateBodyFileCache.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key: str) -> bytes | None: - # The cache entry is only valid if both metadata and body exist. - metadata_path = self._get_cache_path(key) - body_path = metadata_path + ".body" - if not (os.path.exists(metadata_path) and os.path.exists(body_path)): - return None - with suppressed_cache_errors(): - with open(metadata_path, "rb") as f: - return f.read() - - def _write_to_file(self, path: str, writer_func: Callable[[BinaryIO], Any]) -> None: - """Common file writing logic with proper permissions and atomic replacement.""" - with suppressed_cache_errors(): - ensure_dir(os.path.dirname(path)) - - with adjacent_tmp_file(path) as f: - writer_func(f) - # Inherit the read/write permissions of the cache directory - # to enable multi-user cache use-cases. - copy_directory_permissions(self.directory, f) - - replace(f.name, path) - - def _write(self, path: str, data: bytes) -> None: - self._write_to_file(path, lambda f: f.write(data)) - - def _write_from_io(self, path: str, source_file: BinaryIO) -> None: - self._write_to_file(path, lambda f: shutil.copyfileobj(source_file, f)) - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - path = self._get_cache_path(key) - self._write(path, value) - - def delete(self, key: str) -> None: - path = self._get_cache_path(key) - with suppressed_cache_errors(): - os.remove(path) - with suppressed_cache_errors(): - os.remove(path + ".body") - - def get_body(self, key: str) -> BinaryIO | None: - # The cache entry is only valid if both metadata and body exist. - metadata_path = self._get_cache_path(key) - body_path = metadata_path + ".body" - if not (os.path.exists(metadata_path) and os.path.exists(body_path)): - return None - with suppressed_cache_errors(): - return open(body_path, "rb") - - def set_body(self, key: str, body: bytes) -> None: - path = self._get_cache_path(key) + ".body" - self._write(path, body) - - def set_body_from_io(self, key: str, body_file: BinaryIO) -> None: - """Set the body of the cache entry from a file object.""" - path = self._get_cache_path(key) + ".body" - self._write_from_io(path, body_file) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/download.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/download.py deleted file mode 100644 index 26966423f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/download.py +++ /dev/null @@ -1,341 +0,0 @@ -"""Download files with progress indicators.""" - -from __future__ import annotations - -import email.message -import logging -import mimetypes -import os -from collections.abc import Iterable, Mapping -from dataclasses import dataclass -from http import HTTPStatus -from typing import BinaryIO - -from pip._vendor.requests import PreparedRequest -from pip._vendor.requests.models import Response -from pip._vendor.urllib3 import HTTPResponse as URLlib3Response -from pip._vendor.urllib3._collections import HTTPHeaderDict -from pip._vendor.urllib3.exceptions import ReadTimeoutError - -from pip._internal.cli.progress_bars import BarType, get_download_progress_renderer -from pip._internal.exceptions import IncompleteDownloadError, NetworkConnectionError -from pip._internal.models.index import PyPI -from pip._internal.models.link import Link -from pip._internal.network.cache import SafeFileCache, is_from_cache -from pip._internal.network.session import CacheControlAdapter, PipSession -from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks -from pip._internal.utils.misc import format_size, redact_auth_from_url, splitext - -logger = logging.getLogger(__name__) - - -def _get_http_response_size(resp: Response) -> int | None: - try: - return int(resp.headers["content-length"]) - except (ValueError, KeyError, TypeError): - return None - - -def _get_http_response_etag_or_last_modified(resp: Response) -> str | None: - """ - Return either the ETag or Last-Modified header (or None if neither exists). - The return value can be used in an If-Range header. - """ - return resp.headers.get("etag", resp.headers.get("last-modified")) - - -def _log_download( - resp: Response, - link: Link, - progress_bar: BarType, - total_length: int | None, - range_start: int | None = 0, -) -> Iterable[bytes]: - if link.netloc == PyPI.file_storage_domain: - url = link.show_url - else: - url = link.url_without_fragment - - logged_url = redact_auth_from_url(url) - - if total_length: - if range_start: - logged_url = ( - f"{logged_url} ({format_size(range_start)}/{format_size(total_length)})" - ) - else: - logged_url = f"{logged_url} ({format_size(total_length)})" - - if is_from_cache(resp): - logger.info("Using cached %s", logged_url) - elif range_start: - logger.info("Resuming download %s", logged_url) - else: - logger.info("Downloading %s", logged_url) - - if logger.getEffectiveLevel() > logging.INFO: - show_progress = False - elif is_from_cache(resp): - show_progress = False - elif not total_length: - show_progress = True - elif total_length > (512 * 1024): - show_progress = True - else: - show_progress = False - - chunks = response_chunks(resp) - - if not show_progress: - return chunks - - renderer = get_download_progress_renderer( - bar_type=progress_bar, size=total_length, initial_progress=range_start - ) - return renderer(chunks) - - -def sanitize_content_filename(filename: str) -> str: - """ - Sanitize the "filename" value from a Content-Disposition header. - """ - return os.path.basename(filename) - - -def parse_content_disposition(content_disposition: str, default_filename: str) -> str: - """ - Parse the "filename" value from a Content-Disposition header, and - return the default filename if the result is empty. - """ - m = email.message.Message() - m["content-type"] = content_disposition - filename = m.get_param("filename") - if filename: - # We need to sanitize the filename to prevent directory traversal - # in case the filename contains ".." path parts. - filename = sanitize_content_filename(str(filename)) - return filename or default_filename - - -def _get_http_response_filename(resp: Response, link: Link) -> str: - """Get an ideal filename from the given HTTP response, falling back to - the link filename if not provided. - """ - filename = link.filename # fallback - # Have a look at the Content-Disposition header for a better guess - content_disposition = resp.headers.get("content-disposition") - if content_disposition: - filename = parse_content_disposition(content_disposition, filename) - ext: str | None = splitext(filename)[1] - if not ext: - ext = mimetypes.guess_extension(resp.headers.get("content-type", "")) - if ext: - filename += ext - if not ext and link.url != resp.url: - ext = os.path.splitext(resp.url)[1] - if ext: - filename += ext - return filename - - -@dataclass -class _FileDownload: - """Stores the state of a single link download.""" - - link: Link - output_file: BinaryIO - size: int | None - bytes_received: int = 0 - reattempts: int = 0 - - def is_incomplete(self) -> bool: - return bool(self.size is not None and self.bytes_received < self.size) - - def write_chunk(self, data: bytes) -> None: - self.bytes_received += len(data) - self.output_file.write(data) - - def reset_file(self) -> None: - """Delete any saved data and reset progress to zero.""" - self.output_file.seek(0) - self.output_file.truncate() - self.bytes_received = 0 - - -class Downloader: - def __init__( - self, - session: PipSession, - progress_bar: BarType, - ) -> None: - self._session = session - self._progress_bar = progress_bar - self._resume_retries = session.resume_retries - assert ( - self._resume_retries >= 0 - ), "Number of max resume retries must be bigger or equal to zero" - - def batch( - self, links: Iterable[Link], location: str - ) -> Iterable[tuple[Link, tuple[str, str]]]: - """Convenience method to download multiple links.""" - for link in links: - filepath, content_type = self(link, location) - yield link, (filepath, content_type) - - def __call__(self, link: Link, location: str) -> tuple[str, str]: - """Download a link and save it under location.""" - resp = self._http_get(link) - download_size = _get_http_response_size(resp) - - filepath = os.path.join(location, _get_http_response_filename(resp, link)) - with open(filepath, "wb") as content_file: - download = _FileDownload(link, content_file, download_size) - self._process_response(download, resp) - if download.is_incomplete(): - self._attempt_resumes_or_redownloads(download, resp) - - content_type = resp.headers.get("Content-Type", "") - return filepath, content_type - - def _process_response(self, download: _FileDownload, resp: Response) -> None: - """Download and save chunks from a response.""" - chunks = _log_download( - resp, - download.link, - self._progress_bar, - download.size, - range_start=download.bytes_received, - ) - try: - for chunk in chunks: - download.write_chunk(chunk) - except ReadTimeoutError as e: - # If the download size is not known, then give up downloading the file. - if download.size is None: - raise e - - logger.warning("Connection timed out while downloading.") - - def _attempt_resumes_or_redownloads( - self, download: _FileDownload, first_resp: Response - ) -> None: - """Attempt to resume/restart the download if connection was dropped.""" - - while download.reattempts < self._resume_retries and download.is_incomplete(): - assert download.size is not None - download.reattempts += 1 - logger.warning( - "Attempting to resume incomplete download (%s/%s, attempt %d)", - format_size(download.bytes_received), - format_size(download.size), - download.reattempts, - ) - - try: - resume_resp = self._http_get_resume(download, should_match=first_resp) - # Fallback: if the server responded with 200 (i.e., the file has - # since been modified or range requests are unsupported) or any - # other unexpected status, restart the download from the beginning. - must_restart = resume_resp.status_code != HTTPStatus.PARTIAL_CONTENT - if must_restart: - download.reset_file() - download.size = _get_http_response_size(resume_resp) - first_resp = resume_resp - - self._process_response(download, resume_resp) - except (ConnectionError, ReadTimeoutError, OSError): - continue - - # No more resume attempts. Raise an error if the download is still incomplete. - if download.is_incomplete(): - os.remove(download.output_file.name) - raise IncompleteDownloadError(download) - - # If we successfully completed the download via resume, manually cache it - # as a complete response to enable future caching - if download.reattempts > 0: - self._cache_resumed_download(download, first_resp) - - def _cache_resumed_download( - self, download: _FileDownload, original_response: Response - ) -> None: - """ - Manually cache a file that was successfully downloaded via resume retries. - - cachecontrol doesn't cache 206 (Partial Content) responses, since they - are not complete files. This method manually adds the final file to the - cache as though it was downloaded in a single request, so that future - requests can use the cache. - """ - url = download.link.url_without_fragment - adapter = self._session.get_adapter(url) - - # Check if the adapter is the CacheControlAdapter (i.e. caching is enabled) - if not isinstance(adapter, CacheControlAdapter): - logger.debug( - "Skipping resume download caching: no cache controller for %s", url - ) - return - - # Check SafeFileCache is being used - assert isinstance( - adapter.cache, SafeFileCache - ), "separate body cache not in use!" - - synthetic_request = PreparedRequest() - synthetic_request.prepare(method="GET", url=url, headers={}) - - synthetic_response_headers = HTTPHeaderDict() - for key, value in original_response.headers.items(): - if key.lower() not in ["content-range", "content-length"]: - synthetic_response_headers[key] = value - synthetic_response_headers["content-length"] = str(download.size) - - synthetic_response = URLlib3Response( - body="", - headers=synthetic_response_headers, - status=200, - preload_content=False, - ) - - # Save metadata and then stream the file contents to cache. - cache_url = adapter.controller.cache_url(url) - metadata_blob = adapter.controller.serializer.dumps( - synthetic_request, synthetic_response, b"" - ) - adapter.cache.set(cache_url, metadata_blob) - download.output_file.flush() - with open(download.output_file.name, "rb") as f: - adapter.cache.set_body_from_io(cache_url, f) - - logger.debug( - "Cached resumed download as complete response for future use: %s", url - ) - - def _http_get_resume( - self, download: _FileDownload, should_match: Response - ) -> Response: - """Issue a HTTP range request to resume the download.""" - # To better understand the download resumption logic, see the mdn web docs: - # https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Range_requests - headers = HEADERS.copy() - headers["Range"] = f"bytes={download.bytes_received}-" - # If possible, use a conditional range request to avoid corrupted - # downloads caused by the remote file changing in-between. - if identifier := _get_http_response_etag_or_last_modified(should_match): - headers["If-Range"] = identifier - return self._http_get(download.link, headers) - - def _http_get(self, link: Link, headers: Mapping[str, str] = HEADERS) -> Response: - target_url = link.url_without_fragment - try: - resp = self._session.get(target_url, headers=headers, stream=True) - raise_for_status(resp) - except NetworkConnectionError as e: - assert e.response is not None - logger.critical( - "HTTP error %s while getting %s", e.response.status_code, link - ) - raise - return resp diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/lazy_wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/lazy_wheel.py deleted file mode 100644 index 00398337e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/lazy_wheel.py +++ /dev/null @@ -1,215 +0,0 @@ -"""Lazy ZIP over HTTP""" - -from __future__ import annotations - -__all__ = ["HTTPRangeRequestUnsupported", "dist_from_wheel_url"] - -from bisect import bisect_left, bisect_right -from collections.abc import Generator -from contextlib import contextmanager -from tempfile import NamedTemporaryFile -from typing import Any -from zipfile import BadZipFile, ZipFile - -from pip._vendor.packaging.utils import NormalizedName -from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response - -from pip._internal.metadata import BaseDistribution, MemoryWheel, get_wheel_distribution -from pip._internal.network.session import PipSession -from pip._internal.network.utils import HEADERS, raise_for_status, response_chunks - - -class HTTPRangeRequestUnsupported(Exception): - pass - - -def dist_from_wheel_url( - name: NormalizedName, url: str, session: PipSession -) -> BaseDistribution: - """Return a distribution object from the given wheel URL. - - This uses HTTP range requests to only fetch the portion of the wheel - containing metadata, just enough for the object to be constructed. - If such requests are not supported, HTTPRangeRequestUnsupported - is raised. - """ - with LazyZipOverHTTP(url, session) as zf: - # For read-only ZIP files, ZipFile only needs methods read, - # seek, seekable and tell, not the whole IO protocol. - wheel = MemoryWheel(zf.name, zf) # type: ignore - # After context manager exit, wheel.name - # is an invalid file by intention. - return get_wheel_distribution(wheel, name) - - -class LazyZipOverHTTP: - """File-like object mapped to a ZIP file over HTTP. - - This uses HTTP range requests to lazily fetch the file's content, - which is supposed to be fed to ZipFile. If such requests are not - supported by the server, raise HTTPRangeRequestUnsupported - during initialization. - """ - - def __init__( - self, url: str, session: PipSession, chunk_size: int = CONTENT_CHUNK_SIZE - ) -> None: - head = session.head(url, headers=HEADERS) - raise_for_status(head) - assert head.status_code == 200 - self._session, self._url, self._chunk_size = session, url, chunk_size - self._length = int(head.headers["Content-Length"]) - self._file = NamedTemporaryFile() - self.truncate(self._length) - self._left: list[int] = [] - self._right: list[int] = [] - if "bytes" not in head.headers.get("Accept-Ranges", "none"): - raise HTTPRangeRequestUnsupported("range request is not supported") - self._check_zip() - - @property - def mode(self) -> str: - """Opening mode, which is always rb.""" - return "rb" - - @property - def name(self) -> str: - """Path to the underlying file.""" - return self._file.name - - def seekable(self) -> bool: - """Return whether random access is supported, which is True.""" - return True - - def close(self) -> None: - """Close the file.""" - self._file.close() - - @property - def closed(self) -> bool: - """Whether the file is closed.""" - return self._file.closed - - def read(self, size: int = -1) -> bytes: - """Read up to size bytes from the object and return them. - - As a convenience, if size is unspecified or -1, - all bytes until EOF are returned. Fewer than - size bytes may be returned if EOF is reached. - """ - download_size = max(size, self._chunk_size) - start, length = self.tell(), self._length - stop = length if size < 0 else min(start + download_size, length) - start = max(0, stop - download_size) - self._download(start, stop - 1) - return self._file.read(size) - - def readable(self) -> bool: - """Return whether the file is readable, which is True.""" - return True - - def seek(self, offset: int, whence: int = 0) -> int: - """Change stream position and return the new absolute position. - - Seek to offset relative position indicated by whence: - * 0: Start of stream (the default). pos should be >= 0; - * 1: Current position - pos may be negative; - * 2: End of stream - pos usually negative. - """ - return self._file.seek(offset, whence) - - def tell(self) -> int: - """Return the current position.""" - return self._file.tell() - - def truncate(self, size: int | None = None) -> int: - """Resize the stream to the given size in bytes. - - If size is unspecified resize to the current position. - The current stream position isn't changed. - - Return the new file size. - """ - return self._file.truncate(size) - - def writable(self) -> bool: - """Return False.""" - return False - - def __enter__(self) -> LazyZipOverHTTP: - self._file.__enter__() - return self - - def __exit__(self, *exc: Any) -> None: - self._file.__exit__(*exc) - - @contextmanager - def _stay(self) -> Generator[None, None, None]: - """Return a context manager keeping the position. - - At the end of the block, seek back to original position. - """ - pos = self.tell() - try: - yield - finally: - self.seek(pos) - - def _check_zip(self) -> None: - """Check and download until the file is a valid ZIP.""" - end = self._length - 1 - for start in reversed(range(0, end, self._chunk_size)): - self._download(start, end) - with self._stay(): - try: - # For read-only ZIP files, ZipFile only needs - # methods read, seek, seekable and tell. - ZipFile(self) - except BadZipFile: - pass - else: - break - - def _stream_response( - self, start: int, end: int, base_headers: dict[str, str] = HEADERS - ) -> Response: - """Return HTTP response to a range request from start to end.""" - headers = base_headers.copy() - headers["Range"] = f"bytes={start}-{end}" - # TODO: Get range requests to be correctly cached - headers["Cache-Control"] = "no-cache" - return self._session.get(self._url, headers=headers, stream=True) - - def _merge( - self, start: int, end: int, left: int, right: int - ) -> Generator[tuple[int, int], None, None]: - """Return a generator of intervals to be fetched. - - Args: - start (int): Start of needed interval - end (int): End of needed interval - left (int): Index of first overlapping downloaded data - right (int): Index after last overlapping downloaded data - """ - lslice, rslice = self._left[left:right], self._right[left:right] - i = start = min([start] + lslice[:1]) - end = max([end] + rslice[-1:]) - for j, k in zip(lslice, rslice): - if j > i: - yield i, j - 1 - i = k + 1 - if i <= end: - yield i, end - self._left[left:right], self._right[left:right] = [start], [end] - - def _download(self, start: int, end: int) -> None: - """Download bytes from start to end inclusively.""" - with self._stay(): - left = bisect_left(self._right, start) - right = bisect_right(self._left, end) - for start, end in self._merge(start, end, left, right): - response = self._stream_response(start, end) - response.raise_for_status() - self.seek(start) - for chunk in response_chunks(response, self._chunk_size): - self._file.write(chunk) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/session.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/session.py deleted file mode 100644 index 34083e089..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/session.py +++ /dev/null @@ -1,532 +0,0 @@ -"""PipSession and supporting code, containing all pip-specific -network request configuration and behavior. -""" - -from __future__ import annotations - -import email.utils -import functools -import io -import ipaddress -import json -import logging -import mimetypes -import os -import platform -import shutil -import subprocess -import sys -import urllib.parse -import warnings -from collections.abc import Generator, Mapping, Sequence -from typing import ( - TYPE_CHECKING, - Any, - Optional, - Union, -) - -from pip._vendor import requests, urllib3 -from pip._vendor.cachecontrol import CacheControlAdapter as _BaseCacheControlAdapter -from pip._vendor.requests.adapters import DEFAULT_POOLBLOCK, BaseAdapter -from pip._vendor.requests.adapters import HTTPAdapter as _BaseHTTPAdapter -from pip._vendor.requests.models import PreparedRequest, Response -from pip._vendor.requests.structures import CaseInsensitiveDict -from pip._vendor.urllib3.connectionpool import ConnectionPool -from pip._vendor.urllib3.exceptions import InsecureRequestWarning - -from pip import __version__ -from pip._internal.metadata import get_default_environment -from pip._internal.models.link import Link -from pip._internal.network.auth import MultiDomainBasicAuth -from pip._internal.network.cache import SafeFileCache - -# Import ssl from compat so the initial import occurs in only one place. -from pip._internal.utils.compat import has_tls -from pip._internal.utils.glibc import libc_ver -from pip._internal.utils.misc import build_url_from_netloc, parse_netloc -from pip._internal.utils.urls import url_to_path - -if TYPE_CHECKING: - from ssl import SSLContext - - from pip._vendor.urllib3 import ProxyManager - from pip._vendor.urllib3.poolmanager import PoolManager - - -logger = logging.getLogger(__name__) - -SecureOrigin = tuple[str, str, Optional[Union[int, str]]] - - -# Ignore warning raised when using --trusted-host. -warnings.filterwarnings("ignore", category=InsecureRequestWarning) - - -SECURE_ORIGINS: list[SecureOrigin] = [ - # protocol, hostname, port - # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) - ("https", "*", "*"), - ("*", "localhost", "*"), - ("*", "127.0.0.0/8", "*"), - ("*", "::1/128", "*"), - ("file", "*", None), - # ssh is always secure. - ("ssh", "*", "*"), -] - - -# These are environment variables present when running under various -# CI systems. For each variable, some CI systems that use the variable -# are indicated. The collection was chosen so that for each of a number -# of popular systems, at least one of the environment variables is used. -# This list is used to provide some indication of and lower bound for -# CI traffic to PyPI. Thus, it is okay if the list is not comprehensive. -# For more background, see: https://github.com/pypa/pip/issues/5499 -CI_ENVIRONMENT_VARIABLES = ( - # Azure Pipelines - "BUILD_BUILDID", - # Jenkins - "BUILD_ID", - # AppVeyor, CircleCI, Codeship, Gitlab CI, Shippable, Travis CI - "CI", - # Explicit environment variable. - "PIP_IS_CI", -) - - -def looks_like_ci() -> bool: - """ - Return whether it looks like pip is running under CI. - """ - # We don't use the method of checking for a tty (e.g. using isatty()) - # because some CI systems mimic a tty (e.g. Travis CI). Thus that - # method doesn't provide definitive information in either direction. - return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) - - -@functools.lru_cache(maxsize=1) -def user_agent() -> str: - """ - Return a string representing the user agent. - """ - data: dict[str, Any] = { - "installer": {"name": "pip", "version": __version__}, - "python": platform.python_version(), - "implementation": { - "name": platform.python_implementation(), - }, - } - - if data["implementation"]["name"] == "CPython": - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == "PyPy": - pypy_version_info = sys.pypy_version_info # type: ignore - if pypy_version_info.releaselevel == "final": - pypy_version_info = pypy_version_info[:3] - data["implementation"]["version"] = ".".join( - [str(x) for x in pypy_version_info] - ) - elif data["implementation"]["name"] == "Jython": - # Complete Guess - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == "IronPython": - # Complete Guess - data["implementation"]["version"] = platform.python_version() - - if sys.platform.startswith("linux"): - from pip._vendor import distro - - linux_distribution = distro.name(), distro.version(), distro.codename() - distro_infos: dict[str, Any] = dict( - filter( - lambda x: x[1], - zip(["name", "version", "id"], linux_distribution), - ) - ) - libc = dict( - filter( - lambda x: x[1], - zip(["lib", "version"], libc_ver()), - ) - ) - if libc: - distro_infos["libc"] = libc - if distro_infos: - data["distro"] = distro_infos - - if sys.platform.startswith("darwin") and platform.mac_ver()[0]: - data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} - - if platform.system(): - data.setdefault("system", {})["name"] = platform.system() - - if platform.release(): - data.setdefault("system", {})["release"] = platform.release() - - if platform.machine(): - data["cpu"] = platform.machine() - - if has_tls(): - import _ssl as ssl - - data["openssl_version"] = ssl.OPENSSL_VERSION - - setuptools_dist = get_default_environment().get_distribution("setuptools") - if setuptools_dist is not None: - data["setuptools_version"] = str(setuptools_dist.version) - - if shutil.which("rustc") is not None: - # If for any reason `rustc --version` fails, silently ignore it - try: - rustc_output = subprocess.check_output( - ["rustc", "--version"], stderr=subprocess.STDOUT, timeout=0.5 - ) - except Exception: - pass - else: - if rustc_output.startswith(b"rustc "): - # The format of `rustc --version` is: - # `b'rustc 1.52.1 (9bc8c42bb 2021-05-09)\n'` - # We extract just the middle (1.52.1) part - data["rustc_version"] = rustc_output.split(b" ")[1].decode() - - # Use None rather than False so as not to give the impression that - # pip knows it is not being run under CI. Rather, it is a null or - # inconclusive result. Also, we include some value rather than no - # value to make it easier to know that the check has been run. - data["ci"] = True if looks_like_ci() else None - - user_data = os.environ.get("PIP_USER_AGENT_USER_DATA") - if user_data is not None: - data["user_data"] = user_data - - return "{data[installer][name]}/{data[installer][version]} {json}".format( - data=data, - json=json.dumps(data, separators=(",", ":"), sort_keys=True), - ) - - -class LocalFSAdapter(BaseAdapter): - def send( - self, - request: PreparedRequest, - stream: bool = False, - timeout: float | tuple[float, float] | tuple[float, None] | None = None, - verify: bool | str = True, - cert: bytes | str | tuple[bytes | str, bytes | str] | None = None, - proxies: Mapping[str, str] | None = None, - ) -> Response: - assert request.url is not None - pathname = url_to_path(request.url) - - resp = Response() - resp.status_code = 200 - resp.url = request.url - - try: - stats = os.stat(pathname) - except OSError as exc: - # format the exception raised as a io.BytesIO object, - # to return a better error message: - resp.status_code = 404 - resp.reason = type(exc).__name__ - resp.raw = io.BytesIO(f"{resp.reason}: {exc}".encode()) - else: - modified = email.utils.formatdate(stats.st_mtime, usegmt=True) - content_type = mimetypes.guess_type(pathname)[0] or "text/plain" - resp.headers = CaseInsensitiveDict( - { - "Content-Type": content_type, - "Content-Length": str(stats.st_size), - "Last-Modified": modified, - } - ) - - resp.raw = open(pathname, "rb") - resp.close = resp.raw.close # type: ignore[method-assign] - - return resp - - def close(self) -> None: - pass - - -class _SSLContextAdapterMixin: - """Mixin to add the ``ssl_context`` constructor argument to HTTP adapters. - - The additional argument is forwarded directly to the pool manager. This allows us - to dynamically decide what SSL store to use at runtime, which is used to implement - the optional ``truststore`` backend. - """ - - def __init__( - self, - *, - ssl_context: SSLContext | None = None, - **kwargs: Any, - ) -> None: - self._ssl_context = ssl_context - super().__init__(**kwargs) - - def init_poolmanager( - self, - connections: int, - maxsize: int, - block: bool = DEFAULT_POOLBLOCK, - **pool_kwargs: Any, - ) -> PoolManager: - if self._ssl_context is not None: - pool_kwargs.setdefault("ssl_context", self._ssl_context) - return super().init_poolmanager( # type: ignore[misc, no-any-return] - connections=connections, - maxsize=maxsize, - block=block, - **pool_kwargs, - ) - - def proxy_manager_for(self, proxy: str, **proxy_kwargs: Any) -> ProxyManager: - # Proxy manager replaces the pool manager, so inject our SSL - # context here too. https://github.com/pypa/pip/issues/13288 - if self._ssl_context is not None: - proxy_kwargs.setdefault("ssl_context", self._ssl_context) - return super().proxy_manager_for(proxy, **proxy_kwargs) # type: ignore[misc, no-any-return] - - -class HTTPAdapter(_SSLContextAdapterMixin, _BaseHTTPAdapter): - pass - - -class CacheControlAdapter(_SSLContextAdapterMixin, _BaseCacheControlAdapter): - pass - - -class InsecureHTTPAdapter(HTTPAdapter): - def cert_verify( - self, - conn: ConnectionPool, - url: str, - verify: bool | str, - cert: str | tuple[str, str] | None, - ) -> None: - super().cert_verify(conn=conn, url=url, verify=False, cert=cert) - - -class InsecureCacheControlAdapter(CacheControlAdapter): - def cert_verify( - self, - conn: ConnectionPool, - url: str, - verify: bool | str, - cert: str | tuple[str, str] | None, - ) -> None: - super().cert_verify(conn=conn, url=url, verify=False, cert=cert) - - -class PipSession(requests.Session): - timeout: int | None = None - - def __init__( - self, - *args: Any, - retries: int = 0, - resume_retries: int = 0, - cache: str | None = None, - trusted_hosts: Sequence[str] = (), - index_urls: list[str] | None = None, - ssl_context: SSLContext | None = None, - **kwargs: Any, - ) -> None: - """ - :param trusted_hosts: Domains not to emit warnings for when not using - HTTPS. - """ - super().__init__(*args, **kwargs) - - # Namespace the attribute with "pip_" just in case to prevent - # possible conflicts with the base class. - self.pip_trusted_origins: list[tuple[str, int | None]] = [] - self.pip_proxy = None - - # Attach our User Agent to the request - self.headers["User-Agent"] = user_agent() - - # Attach our Authentication handler to the session - self.auth: MultiDomainBasicAuth = MultiDomainBasicAuth(index_urls=index_urls) - - # Create our urllib3.Retry instance which will allow us to customize - # how we handle retries. - retries = urllib3.Retry( - # Set the total number of retries that a particular request can - # have. - total=retries, - # A 503 error from PyPI typically means that the Fastly -> Origin - # connection got interrupted in some way. A 503 error in general - # is typically considered a transient error so we'll go ahead and - # retry it. - # A 500 may indicate transient error in Amazon S3 - # A 502 may be a transient error from a CDN like CloudFlare or CloudFront - # A 520 or 527 - may indicate transient error in CloudFlare - status_forcelist=[500, 502, 503, 520, 527], - # Add a small amount of back off between failed requests in - # order to prevent hammering the service. - backoff_factor=0.25, - ) # type: ignore - self.resume_retries = resume_retries - - # Our Insecure HTTPAdapter disables HTTPS validation. It does not - # support caching so we'll use it for all http:// URLs. - # If caching is disabled, we will also use it for - # https:// hosts that we've marked as ignoring - # TLS errors for (trusted-hosts). - insecure_adapter = InsecureHTTPAdapter(max_retries=retries) - - # We want to _only_ cache responses on securely fetched origins or when - # the host is specified as trusted. We do this because - # we can't validate the response of an insecurely/untrusted fetched - # origin, and we don't want someone to be able to poison the cache and - # require manual eviction from the cache to fix it. - self._trusted_host_adapter: InsecureCacheControlAdapter | InsecureHTTPAdapter - if cache: - secure_adapter: _BaseHTTPAdapter = CacheControlAdapter( - cache=SafeFileCache(cache), - max_retries=retries, - ssl_context=ssl_context, - ) - self._trusted_host_adapter = InsecureCacheControlAdapter( - cache=SafeFileCache(cache), - max_retries=retries, - ) - else: - secure_adapter = HTTPAdapter(max_retries=retries, ssl_context=ssl_context) - self._trusted_host_adapter = insecure_adapter - - self.mount("https://", secure_adapter) - self.mount("http://", insecure_adapter) - - # Enable file:// urls - self.mount("file://", LocalFSAdapter()) - - for host in trusted_hosts: - self.add_trusted_host(host, suppress_logging=True) - - def update_index_urls(self, new_index_urls: list[str]) -> None: - """ - :param new_index_urls: New index urls to update the authentication - handler with. - """ - self.auth.index_urls = new_index_urls - - def add_trusted_host( - self, host: str, source: str | None = None, suppress_logging: bool = False - ) -> None: - """ - :param host: It is okay to provide a host that has previously been - added. - :param source: An optional source string, for logging where the host - string came from. - """ - if not suppress_logging: - msg = f"adding trusted host: {host!r}" - if source is not None: - msg += f" (from {source})" - logger.info(msg) - - parsed_host, parsed_port = parse_netloc(host) - if parsed_host is None: - raise ValueError(f"Trusted host URL must include a host part: {host!r}") - if (parsed_host, parsed_port) not in self.pip_trusted_origins: - self.pip_trusted_origins.append((parsed_host, parsed_port)) - - self.mount( - build_url_from_netloc(host, scheme="http") + "/", self._trusted_host_adapter - ) - self.mount(build_url_from_netloc(host) + "/", self._trusted_host_adapter) - if not parsed_port: - self.mount( - build_url_from_netloc(host, scheme="http") + ":", - self._trusted_host_adapter, - ) - # Mount wildcard ports for the same host. - self.mount(build_url_from_netloc(host) + ":", self._trusted_host_adapter) - - def iter_secure_origins(self) -> Generator[SecureOrigin, None, None]: - yield from SECURE_ORIGINS - for host, port in self.pip_trusted_origins: - yield ("*", host, "*" if port is None else port) - - def is_secure_origin(self, location: Link) -> bool: - # Determine if this url used a secure transport mechanism - parsed = urllib.parse.urlparse(str(location)) - origin_protocol, origin_host, origin_port = ( - parsed.scheme, - parsed.hostname, - parsed.port, - ) - - # The protocol to use to see if the protocol matches. - # Don't count the repository type as part of the protocol: in - # cases such as "git+ssh", only use "ssh". (I.e., Only verify against - # the last scheme.) - origin_protocol = origin_protocol.rsplit("+", 1)[-1] - - # Determine if our origin is a secure origin by looking through our - # hardcoded list of secure origins, as well as any additional ones - # configured on this PackageFinder instance. - for secure_origin in self.iter_secure_origins(): - secure_protocol, secure_host, secure_port = secure_origin - if origin_protocol != secure_protocol and secure_protocol != "*": - continue - - try: - addr = ipaddress.ip_address(origin_host or "") - network = ipaddress.ip_network(secure_host) - except ValueError: - # We don't have both a valid address or a valid network, so - # we'll check this origin against hostnames. - if ( - origin_host - and origin_host.lower() != secure_host.lower() - and secure_host != "*" - ): - continue - else: - # We have a valid address and network, so see if the address - # is contained within the network. - if addr not in network: - continue - - # Check to see if the port matches. - if ( - origin_port != secure_port - and secure_port != "*" - and secure_port is not None - ): - continue - - # If we've gotten here, then this origin matches the current - # secure origin and we should return True - return True - - # If we've gotten to this point, then the origin isn't secure and we - # will not accept it as a valid location to search. We will however - # log a warning that we are ignoring it. - logger.warning( - "The repository located at %s is not a trusted or secure host and " - "is being ignored. If this repository is available via HTTPS we " - "recommend you use HTTPS instead, otherwise you may silence " - "this warning and allow it anyway with '--trusted-host %s'.", - origin_host, - origin_host, - ) - - return False - - def request(self, method: str, url: str, *args: Any, **kwargs: Any) -> Response: # type: ignore[override] - # Allow setting a default timeout on a session - kwargs.setdefault("timeout", self.timeout) - # Allow setting a default proxies on a session - kwargs.setdefault("proxies", self.proxies) - - # Dispatch the actual request - return super().request(method, url, *args, **kwargs) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/utils.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/utils.py deleted file mode 100644 index 74d3111cf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/utils.py +++ /dev/null @@ -1,98 +0,0 @@ -from collections.abc import Generator - -from pip._vendor.requests.models import Response - -from pip._internal.exceptions import NetworkConnectionError - -# The following comments and HTTP headers were originally added by -# Donald Stufft in git commit 22c562429a61bb77172039e480873fb239dd8c03. -# -# We use Accept-Encoding: identity here because requests defaults to -# accepting compressed responses. This breaks in a variety of ways -# depending on how the server is configured. -# - Some servers will notice that the file isn't a compressible file -# and will leave the file alone and with an empty Content-Encoding -# - Some servers will notice that the file is already compressed and -# will leave the file alone, adding a Content-Encoding: gzip header -# - Some servers won't notice anything at all and will take a file -# that's already been compressed and compress it again, and set -# the Content-Encoding: gzip header -# By setting this to request only the identity encoding we're hoping -# to eliminate the third case. Hopefully there does not exist a server -# which when given a file will notice it is already compressed and that -# you're not asking for a compressed file and will then decompress it -# before sending because if that's the case I don't think it'll ever be -# possible to make this work. -HEADERS: dict[str, str] = {"Accept-Encoding": "identity"} - -DOWNLOAD_CHUNK_SIZE = 256 * 1024 - - -def raise_for_status(resp: Response) -> None: - http_error_msg = "" - if isinstance(resp.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. - try: - reason = resp.reason.decode("utf-8") - except UnicodeDecodeError: - reason = resp.reason.decode("iso-8859-1") - else: - reason = resp.reason - - if 400 <= resp.status_code < 500: - http_error_msg = ( - f"{resp.status_code} Client Error: {reason} for url: {resp.url}" - ) - - elif 500 <= resp.status_code < 600: - http_error_msg = ( - f"{resp.status_code} Server Error: {reason} for url: {resp.url}" - ) - - if http_error_msg: - raise NetworkConnectionError(http_error_msg, response=resp) - - -def response_chunks( - response: Response, chunk_size: int = DOWNLOAD_CHUNK_SIZE -) -> Generator[bytes, None, None]: - """Given a requests Response, provide the data chunks.""" - try: - # Special case for urllib3. - for chunk in response.raw.stream( - chunk_size, - # We use decode_content=False here because we don't - # want urllib3 to mess with the raw bytes we get - # from the server. If we decompress inside of - # urllib3 then we cannot verify the checksum - # because the checksum will be of the compressed - # file. This breakage will only occur if the - # server adds a Content-Encoding header, which - # depends on how the server was configured: - # - Some servers will notice that the file isn't a - # compressible file and will leave the file alone - # and with an empty Content-Encoding - # - Some servers will notice that the file is - # already compressed and will leave the file - # alone and will add a Content-Encoding: gzip - # header - # - Some servers won't notice anything at all and - # will take a file that's already been compressed - # and compress it again and set the - # Content-Encoding: gzip header - # - # By setting this not to decode automatically we - # hope to eliminate problems with the second case. - decode_content=False, - ): - yield chunk - except AttributeError: - # Standard file-like object. - while True: - chunk = response.raw.read(chunk_size) - if not chunk: - break - yield chunk diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/xmlrpc.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/xmlrpc.py deleted file mode 100644 index f4bddb48a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/network/xmlrpc.py +++ /dev/null @@ -1,61 +0,0 @@ -"""xmlrpclib.Transport implementation""" - -import logging -import urllib.parse -import xmlrpc.client -from typing import TYPE_CHECKING - -from pip._internal.exceptions import NetworkConnectionError -from pip._internal.network.session import PipSession -from pip._internal.network.utils import raise_for_status - -if TYPE_CHECKING: - from xmlrpc.client import _HostType, _Marshallable - - from _typeshed import SizedBuffer - -logger = logging.getLogger(__name__) - - -class PipXmlrpcTransport(xmlrpc.client.Transport): - """Provide a `xmlrpclib.Transport` implementation via a `PipSession` - object. - """ - - def __init__( - self, index_url: str, session: PipSession, use_datetime: bool = False - ) -> None: - super().__init__(use_datetime) - index_parts = urllib.parse.urlparse(index_url) - self._scheme = index_parts.scheme - self._session = session - - def request( - self, - host: "_HostType", - handler: str, - request_body: "SizedBuffer", - verbose: bool = False, - ) -> tuple["_Marshallable", ...]: - assert isinstance(host, str) - parts = (self._scheme, host, handler, None, None, None) - url = urllib.parse.urlunparse(parts) - try: - headers = {"Content-Type": "text/xml"} - response = self._session.post( - url, - data=request_body, - headers=headers, - stream=True, - ) - raise_for_status(response) - self.verbose = verbose - return self.parse_response(response.raw) - except NetworkConnectionError as exc: - assert exc.response - logger.critical( - "HTTP error %s while getting %s", - exc.response.status_code, - url, - ) - raise diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 304b578e0e8d6791e98ea9bb69a90de5b7ea1191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmXw!u}T9$5QcXRiU|4=RwCzl7=jV8u@w=C-N3TB8_b%$-DPHirt=AW4@+OgGOdlZ zd4cRg{EL6S`KS5k^yu(FWqp7Bx-x%?{Y!6Qy_ex#J*s1MqVGQy?c{x3j;oK`D|lig z2HPPu<MBDXMw&yS_=2r4v_3Ansb#EOaFUJ1dXH2!@UWCw3>VGN49(l+$V{+L-U=G& z6WqBeuoJA3ZRhqG8Inu2aY2xR^>s{0R$L5Ro18i^<}58&``3N!79MYCH`gl<aDl&p I)|v*HHkq_W3jhEB diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-314.pyc deleted file mode 100644 index 37929e189eb0e3656851135b1cea8b7dfe73c873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8214 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 a1{wCNR~U%IzZ!rr;42n<gC|Ed4E!Ha!%XM^ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-314.pyc deleted file mode 100644 index db9cd14f456c8f5a6c6413d7ae8cb2b4a032b85c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11504 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 C6`@)H diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-314.pyc deleted file mode 100644 index 6fb8608bd52aad6dd161b8ce158355083c82b2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30571 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 W1#3eF?DV~M;8~l2K$IQW<NrT_*lM`| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index d4eae62efd5be4358768be1d2fe7acc06ccc4903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmXw!F-inM5JkIP6cO|iMk3=lxQHuaVk#oCW(`fxOrhoWbT?Hs=w=?mOBi|;!%a<$ z-3!<a`h)*p@snSNd%HU->+|CqOMVsmm;QtGR)$w~r}ou>zIj))k?(aWS8rG6=AMDr zxE`pP&5q4;q=iWopP&;qosVPRI)(}ZN;VefJy6w{+oe3laMDce)V`dZ+Bpo#I{_<0 zGS}D|Mu951Zs8t)O~O=L3<4CKuVVsof-!L2j_CW^<_^W$qqJOYUktGyJzUae9$DVt M0zVV2HBB=80&u}dPyhe` diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-314.pyc deleted file mode 100644 index d6f4282ac21ece5197aa1668cb8b5411d611ebba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9257 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 Onl|CLCR`Jv`u_vtdQFc2 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-314.pyc deleted file mode 100644 index 0bc88950e86f85648cc5a997f34151772e2435e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2125 zcma)7OKjXk7#`dEe&o?qNlRMR^pUbHyGxX%>5BphCA*@O#ob0dShc+CY1WO`wq|CN zCZ`-YP$X0#ap2ekLU829HQ~}@N{dpgA|aIuxV1`9P`U7r*WS>o2gdTuKmYvm`+t5u z)|X8o7(agZhxu6)p@)1E4ly7$uK=-v6vWUKqzF}k39yP)u_7@k$9YmUQi-ytPe-b; zN}R<j36}8p(Q2}iVkw`FRnwIW%jA#}A3;iD1X%+ts|W{CKDj*c0cN_PGhLp;HYPeV z9b2}XIkPEWb%;!z4ryZ9FexKuqr*>W@j_nkhNn8FWlZVKd2AaM$C;njEejJk8Sqce z*$XCd>^8PpUi3z*Hf12-tH0Q3xWs8<O3xAE5N}Ut!c5PC_jJ?31}GaP9UIKj7ERXD zsB8M0HeA)`FdS#=xb41c65M1CS!xOpG5+$AfLDTdvjWo!nnhQ{6CWdF0B;}qNN5R) zpu$OaD54sM9m1+cdi=-^U5Y@!qJMHZFWKPUYuH}!;*D+$yto08G%f1I2xc8(=Ox0w zPy7oK#1HI^K}_2^quj^?-WSuS)Jqf-s_F(N<0ntPt}Z%cUWMpf1COZMw49F7&?zpM zw#i`fgNR9CT&*p!mSazhm$kBX{lsyN2Li&2HP&|3^JYV(Cc_06Y=cNq)ivFcX4(uB zTenJ%8)TZ6d`C*{pa_cYl9$mm-L@UZm1$%UEFFNCz6R3@+D5}d`3avM^yeN+d_DSh zcYXhYzy20YJc$B-6Xa2oM<5(YAYdQa{2JU}L28&OC~iemq{$!yt~4vvdf5msBjiTv z=(L~-9kC;6s2m*RkO~dd9ZIAe=yapALM<Nhch=cxDDfgqqX=$sE1w&)J9=ZINQv>M z9C!vz_1s?V3$MS(iy9B;bE6))94iMNA4D=zeQ@AHF=Pz!dUfM!HoR09mFQ&PXFc8$ zm6#iUD{cxVIxX!-rXZtZ=tv+u2U_<bQ_P|LDCa-tFaIy8W>+d7Up9iS#Bx|9a)+As z9Bi8{-8N~P$_A!QfCp^IrY+ab)#NwECyS|+;`afSSqq2g0wO&%M%cH-)N+5@ffld} z;b9#>BQkH=hBq*0ISqi0C9SR7P|L>h!5YD?PP#S(;PtAz6m(6IIc+Nsz1ANTzZUf6 zg?y6mlJFv~&RQhK$wAt~BCU%wp6vSCu@;)5LC<R4eqU^1Y!QwQgcqGBI@F6?b4)v* zAUtOz&8G}M>hE2Lh6GQ&Opn2LvEXYNj;yAA)zLUNia8)s4qanoV=^CvH=j2cfb))3 z<Q3rijrk1_D`=|^jT~CfpSoSYH>|9D`0LPtjiDoVhK{V9|2?_u)4f{>w5zaQQ0@+1 z{3LciyL%%$b|*V_Yhfc>{3%;}EK1pn!u{OXMsDU#ZsvC8Ztl|One8a*D{ZGyYG`X1 zW%_PT-k7|3=Ej*XGq<d}>528o#NS(Sw7ay01i1WQxcL3zz2TYLm(~ZAe;!Mm_jEfB z8sHO8eJwZlKBez~v0ojYM$y%zFjYvdrU$38iPilH;H+iSQ%BQld$Lo9(`$#LoIWan z%vvEm^=5YM1ef^%rKbmy`93eMX@=7Te0qt8XB6PAs4c*s$RPk>K_zG{_$|>c{*L$( zApjP8@a;pix98bYe7%WX|5x{)T)+IR4Ezc$THGn0ZawXLkq`rD=IQmT&(GVpi0lHp zySYuAf!gm__$<i-k2f|w1QUc%5Pn7{AEM+VboLP{Z;O&3{*^$&jPMIOz8wRM^|ky9 DCpsYk diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-314.pyc deleted file mode 100644 index b488cef0e34ec55e668bdfb060cb6e513cb3f9c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2179 zcma)7O>Epm6dv2_{of=_Xwo(fYnqa>ZL`}ptE4}nKtkKyQc7^ss7R)kcRkHcvuj)9 z*|f<i2M&}=#f=LR2QJ*;g19DJdQ5*%id7_}QUSMA2?{C~-gxZ|t$N^Do_X`$o98!g z-ury0Ba=ix_rCjsJdqK4%oibv0kd%xm?fklhOQ!2C<{!0SuBesiAh;5lgg2j%w(UB zl%u5>i<ROm?yu!?qLgGwpO2PPr8G-tks9kmYP=8CyI4jQ22n1tIPyMbhG{TEnZ*{S z1|znm)a_YPRj%1oaqT9pV#OpbqomU0S~q_&CwRRRO;R@}jOrY=%#v--O&aw&rl9Ha zHD|1OLT#&oEtV6#{<7sVF!0@9YE~R-SF!7!q12|{t}uji?Fh~qq>fE+)=!%jgr(mg ztfspT@fQu)YRqC#XQpw(d6!UJWj0-?3Xn1Wa*D$%!Mjm{VF}HktK#ub5Hdlw7kwzy z1Xa*L(;`*W!n8wLwMbhY+2#uoNSOR5xAPJeetI2S^Iojd%7GU%A(N!;dQpm5lUg~6 z^6yiBg9Q15c%zWhhQVAO<Ua4q$&=b;7gJX=OiYiSIB`U~VbeJcvU43y<Z9Kr-83tP zi-(Ct7z}<AF&#dtO)apRZH*i)>P7wL@ll;80@90h)^M~7q@uZm;b8}2gG{-aL!5$6 zEQYCN)C;x~+_YQp4^n6ZMWADoFr!k(d1t{(>$+iCHsfA(x&uP)g4aC^!xGv;yM^LY zK0NBou1kDA_;zc4@1j5dCdZ%3Am0FcROP7%DFF<uBOBjB9+r?6UKv!mDyq_0a21X; zBTcohCESdV6PZS*1YKx~O-V<^K#@fnbW)4dNHOr~$TPxJER=80GjeG0GEe;ocJU}* zpqXvI(SD>x`BMx|2Ho|-`bzW~=%Cn8P0%_*S1&u!6i@C8^wHU3aP~o@AkD`MZW2Xi z5BKWCv`n~VT2$q+;Kb9hny5yd*jq6o5Ohi!Ktxc`A#@-xo&~Ra5fQU!0A>B>!pHy1 zs@Af~#TLz=QLz%%jnZ_9H4DpX&9I2ua1|4~RX_}ED#TKz&P*wzqet?|r0TbZtFRgl z0S8RlZp^Ti^U1}|h7Da|4Ts8Uz>&xtu}rUPwr*DdO&0WqVL^GDi-)Hub_~j62rGEo z=^M^M&{272H|ja)!_J^F^q^-i<`R@wi5GDUR-;kQ?r_^UrMFPX8+827U_FdUhkn)r zEC@P>a`2$M6g|;)y~uT&Sh+am_eWEFNOM(Z+XM6~oZ3sb1$-3^KA7gfORQ_Q&ZRQu zc<FLv8yXr?I8ok`-kt!val3!p5z^Pd!0+4dfmuSE9jI^rYVPEn=?A^)(g(lx>|5(O zaJT2c(uLm>-Jk8=jHB-1hv}0WlGvU6G`b!|9Xr=DLw7SnU(K&&@;_zr>!OsoBs|Ox zt!2;O&7QwAem{HV^YoUCItp8zDA}{V2c>u2OAW3@23J#qk5ZZ2W4Fd`kKY>qB7HwK zvKkrrdozJvDQqGE+&t>d|8V0$@3}jdSG&}I)+H``wiN?k@UdsUzuUW?x$i*eU%x&n z%gYI2;#guiwPT_?zB~{I$x3%>qL5k{$V?netsIm&Uy#6N<ydM`%&ff0ZGMzflRFc+ z4lkzbrd<Uv+rzWg51^RW=i&clQ^32RM)Vr|%-j}g_xTnfZ06gb?*qHH>v=7{S;db3 zgZxhky!yNi{6On&e!H+*mA3a~MhpO*-@0Fy{w;okXg9>&y7Krqv`4d!PtzR8c<;OW nVSp40!q4c$W0ZJ;PCr4#Em0E0zv4(ZC;Wm&x1s>ZzL$RiWe73# diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index a08332ef81c7d827fb759fd410c471e4f57ccdfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1922 zcmZt{OK;Rh__MwCzLz8<pgbUkK<J8Omz1S>fH;JLk_yqSl}0@*SkCSwYw+6c%$Sg< zha6f7PN+AI9NQcH3GfS2pi1Pn5)wr!w?#ohYA^l9-YqohtoEC4X1@2!rwjQE;ClMg zpSGU>cqtCurNoG|cN38<xB-T=2n!OIMg=Y}%3O|ig)6u#i-`r5tI=CxQCmpz<S1O1 zt36$D@AqSHJzbIFGtU_6VKB7A;PmjUA&)^Z`C2>`r7&x`uE#BIdoH_%=R@;>?KI}C z`Yqx%7Ci6PCChOL#g}0kxGtgQy3Ly=^X=%+B8*vUq%Jgdw1Myz{gU=35ZQudxFOGc z3(&y35%@xCN`_>}hGHZP6?YB)Nh4KO(W>-o8Ck-FYqdzIFiykdN^A+mz(Ls8BHU_N z+%g+BC3Wu6jqt#FlMv^F3yl&UP<Jzf{Q5WgHP0nK3Qx6FkG3q%gqg>~?=Q{OzGQ^5 zn$;k5YIgQaZQY}{YCiRDqGVR9J6_OOu^5@OU7I6dJc`8RRIR$fo1S}is$y2mJ2Rh{ zOQhvH7AGce`L(O|N{!i^O!{a!hKALA+b^58%L#QYr|kKJ#^Elnh)|a!`%C^tm@~~z zGKgu?UNke0e>R6;3*Nz?bncA+yP14j!Tm*ktgYhS)?jd?ofKFK4h^=`0?UBb^CpYf z9&$rnM6bJ&h+rzzy-kb+rbk|l69Y|Y7;0TAsN(JZWys4)MWhJVDAd##11!vC$bpgg zSm~CWpIDZvLesvroaj=VmrN;;1I2_&hh`LzC%umWkITxkY^c*6y}pX&gTG40KD49I z<@vuxs2=RTzTcOWuhgy|W1z!nIMsPvLoFj<%cF1vJruvIXU;1}z?O8VMQtnyHE0YA zI@I0a1E`8*?OTSn1YJEsq9Kie4Y9mpa`U^W*K{mUeK9UCgM1xeWw(gS^?=##n$DX< zuU@X|=ccChs9toe&^mTqDU&gxLT9>f@uto_J*p(#Ue#Gp7bL5J<7`A+yrh4QlIXh4 z$b=p@2#Z>yl)1J!_$guBcB87)|Lv?f{UqBw7?~&xiG^bi>6^X!NB%~qQA*rvImMz( zbLczGBG??cV%ZL9#OD5&^&~51Le25k)(8#N23ZN#sHmc_mjx>w$IN)ngxSblGtwKT zFW;#XUreb`C6szJlsy(Egy&)6rf0iFji!VJB1e%KkwKx>5tfO>m}0On4N1mv={gmI zGwl07k?9j3Lrq8VA?m(Ih-^W-A96>ZW{ca2;&!&!mh)==Z>hrl+`ZiPz?nzo=c)NW zdM9=Z#~z+|cxe07%yw>ePm%jFcQtIz!oW^`{OA1m!`nOg(l7ba?x4OiIPvq~#I9c6 z9Xr=nVQ6v>l%c}i&)z9eD8KE2T;cxoz3KZG?p=6r;D@1S*~)gJ@~#)(P{QADGmsm2 z3-SjhoPD(PJT(^{IM`P4`Y%>SqwijvAArYN|Gca|9!eqpM9$9lrJv*z0`F4<95^;V zr#zXJ5EgS`#xz$09GznNh~^5DB2kz?IwVfRILAunZTu{F6vtI3|7H`v5iB0hM<a^v zq$>s7c3A0sV&hDw*9gBF7eLC45`yabQ9%@QDtejr2@vHbb)n@o0*73r<9H`VH!C7& rE0QGr4#!_Y;a5n%f{U-<%8PW*PI~BRdg#H-v-F8A?VX0>FB0_+j8NH? diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-314.pyc deleted file mode 100644 index 87173629c982c4863f8bd0b2de7c02631c19aaaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2268 zcmZuyOKcNI7@mFlwRRrl0pztLAz&U3G;T;BZKb53L``YBN~2aXtTy%}Ua)uFnK2<z z4>`0FoDip?o;bF*_SP#w>Nz~BL|ZB$(W*t2Dx*Y71(*J_>m`&jmS_I`|9|Fx%>Vs! zG?k1a825kp)BZ_8=n4M_hZGRPmIK5px`+&63QY=3=;5?DB{I=pB__ctP05oAQzliW z`f_<HG8tvj9&|yRX%3IvT@RoO@vIPhvxK3vBSURRrADS1VjoIJo^nxI@Di5exXfa< z>(KLQ(Q6y8+NHv{mA{Og!ldh7p0G+KOuPiAKeQ>eokiHzL8^{}iMeF6qDd>Z|53)2 zT8lW(&DKpL9zFyrY#jq)70scG;>ec>6@b@?J{F3CAsC_|8M2|ks=_~FL<bdcG4@o1 zEuQRHW$a0m5ic?yxJ6_xXf9)B6)a|%1)JbJbIG#TuvEmj^a?{Im{p0h5{Lcz7y5bE z!Qb())diQ7Ek?PUz1}wyr*ofBOlZz3U~+PF^h9pSC6{v*;$DK2X)a%KtA%-s;^Ves zGngpz({lV|Zf2PkU1#WI*36n$M~2N=T&|QXhD}zk<fiTU9JLufUIEV`H8fYTD}$!( zFiae)H0V|^335L;&+|SQ_>T)Vv*t@UQ(5*j)2v?+Hci5BIthPz8m3jWgL;LxpYdrk zo~%i*K2G-46j*C2+Sgf&a4L%0_SIsXiX*l0Spujn*p2c$jp2v_0e7No{S7IBdlDCd z8$v~)1LZ<3Gy~k%hat{MS$<bAdQc9^JQ#*Fhcsl!Z%JVxR^&NhCKAeb*Eu=VI3t)s zRjf)T%GSj_r~|>S*sgX+%}H~jp`5B)t|%P<ApXnNeFR?`L)|w)WTrKg?yj@ar%D)0 zAJS3IhcB0_sBo0mY(;$~8~iF>8-_ZIX4PFEy1=W7`kwl_Z-&rUm)L@h&PZLz7IbtJ z9jc$V2yt~HTkJtykX8PhE{0mURA>~u>fm}1Ysf+~Z}KWKi^910iQIZ<H62~~%16Bp z=+LKv+BWd#Re)6)J4~-~(Ce&-^_jCX`ta}x-7i)h;E@N&XX0_gM;X;C7Axw^)%`No z?FF4y^IT=2S}HC3yI4m52u>nPHpR#E0G-swWhQ=pW#9XlGTZSXp}&OnY5gEw2^tf3 zBt(Y}7}i&s^uv|qI#4srEtk@1k?;%<4W^ap2_HRmk6&&*NcDM~x2hETaRu?z+lyXs zG1Z|f>P72HAP4m#^uLv!bCzAgh2XUR`Ern^6P{Xf7Z;&nDg``WT_h?v;Wg3fd_7ra z&^W!6Z_*4MA{;fIf(dbn7dv}3k1M<-d!kD{nP=6LFS)jpjt~w6lHe1M&yUno>xagJ z_ThI-0aK2&0T{ZjlO~|OmcZzLn+!PsBEP5n1;i?<wIHqgej>dtr`Hqdn%JhaJc_1n zXxFv%))U_kK8%k4)^uz$)qi{T_PO;VXV$f`ElF&SUsIvwq*^zU1NV{xx36p@Ge0LY zHBn1;Zg%x=bPe6>8rtk1+B`H`Q&4wy3rXG0H{&}BN)2xJA}w{})b&$0#;%XuYWQ~l zgG6>+&i=FAj#_%QQ6$;<sIl#9?WR@}h1QYBEqgaxTDN0LQ}dRF_IB=cz!CS7nHMz; zG@tJz;S-F%*zQDH>oyW!@qYM6`C;@OuVGJ30rqqH8N_?--H8TtM-|4$lsnNq<Fb6G zGYXtFIWayOS!-w?&qme;WRR{M@%dSW^G7Al8B0uPvAYo&^zUjCpBoNLWTm@90?g^8 z7dOp?Dm*{Dar2(!MR;vM*$}`i@;cxx$e35)oplLx`g#qUywIrs#05ps?W=`PMyAT_ z63y%uR8V2DMa-sy!i$<FF95K~`<s8eq=8d=_~h3?bgb+aswMm`ISf4h2GTT4HAxVJ pUs3N9l==n5{y-o6j?O)fHEzWA-;eFTHS!?VzpC!2@O=13{R`x`EyMr- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/build_tracker.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/build_tracker.py deleted file mode 100644 index cbb4e4f09..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +++ /dev/null @@ -1,140 +0,0 @@ -from __future__ import annotations - -import contextlib -import hashlib -import logging -import os -from collections.abc import Generator -from types import TracebackType - -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -@contextlib.contextmanager -def update_env_context_manager(**changes: str) -> Generator[None, None, None]: - target = os.environ - - # Save values from the target and change them. - non_existent_marker = object() - saved_values: dict[str, object | str] = {} - for name, new_value in changes.items(): - try: - saved_values[name] = target[name] - except KeyError: - saved_values[name] = non_existent_marker - target[name] = new_value - - try: - yield - finally: - # Restore original values in the target. - for name, original_value in saved_values.items(): - if original_value is non_existent_marker: - del target[name] - else: - assert isinstance(original_value, str) # for mypy - target[name] = original_value - - -@contextlib.contextmanager -def get_build_tracker() -> Generator[BuildTracker, None, None]: - root = os.environ.get("PIP_BUILD_TRACKER") - with contextlib.ExitStack() as ctx: - if root is None: - root = ctx.enter_context(TempDirectory(kind="build-tracker")).path - ctx.enter_context(update_env_context_manager(PIP_BUILD_TRACKER=root)) - logger.debug("Initialized build tracking at %s", root) - - with BuildTracker(root) as tracker: - yield tracker - - -class TrackerId(str): - """Uniquely identifying string provided to the build tracker.""" - - -class BuildTracker: - """Ensure that an sdist cannot request itself as a setup requirement. - - When an sdist is prepared, it identifies its setup requirements in the - context of ``BuildTracker.track()``. If a requirement shows up recursively, this - raises an exception. - - This stops fork bombs embedded in malicious packages.""" - - def __init__(self, root: str) -> None: - self._root = root - self._entries: dict[TrackerId, InstallRequirement] = {} - logger.debug("Created build tracker: %s", self._root) - - def __enter__(self) -> BuildTracker: - logger.debug("Entered build tracker: %s", self._root) - return self - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc_val: BaseException | None, - exc_tb: TracebackType | None, - ) -> None: - self.cleanup() - - def _entry_path(self, key: TrackerId) -> str: - hashed = hashlib.sha224(key.encode()).hexdigest() - return os.path.join(self._root, hashed) - - def add(self, req: InstallRequirement, key: TrackerId) -> None: - """Add an InstallRequirement to build tracking.""" - - # Get the file to write information about this requirement. - entry_path = self._entry_path(key) - - # Try reading from the file. If it exists and can be read from, a build - # is already in progress, so a LookupError is raised. - try: - with open(entry_path) as fp: - contents = fp.read() - except FileNotFoundError: - pass - else: - message = f"{req.link} is already being built: {contents}" - raise LookupError(message) - - # If we're here, req should really not be building already. - assert key not in self._entries - - # Start tracking this requirement. - with open(entry_path, "w", encoding="utf-8") as fp: - fp.write(str(req)) - self._entries[key] = req - - logger.debug("Added %s to build tracker %r", req, self._root) - - def remove(self, req: InstallRequirement, key: TrackerId) -> None: - """Remove an InstallRequirement from build tracking.""" - - # Delete the created file and the corresponding entry. - os.unlink(self._entry_path(key)) - del self._entries[key] - - logger.debug("Removed %s from build tracker %r", req, self._root) - - def cleanup(self) -> None: - for key, req in list(self._entries.items()): - self.remove(req, key) - - logger.debug("Removed build tracker: %r", self._root) - - @contextlib.contextmanager - def track(self, req: InstallRequirement, key: str) -> Generator[None, None, None]: - """Ensure that `key` cannot install itself as a setup requirement. - - :raises LookupError: If `key` was already provided in a parent invocation of - the context introduced by this method.""" - tracker_id = TrackerId(key) - self.add(req, tracker_id) - yield - self.remove(req, tracker_id) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata.py deleted file mode 100644 index a546809ec..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Metadata generation logic for source distributions.""" - -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment -from pip._internal.exceptions import ( - InstallationSubprocessError, - MetadataGenerationFailed, -) -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory - - -def generate_metadata( - build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str -) -> str: - """Generate metadata using mechanisms described in PEP 517. - - Returns the generated metadata directory. - """ - metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) - - metadata_dir = metadata_tmpdir.path - - with build_env: - # Note that BuildBackendHookCaller implements a fallback for - # prepare_metadata_for_build_wheel, so we don't have to - # consider the possibility that this hook doesn't exist. - runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)") - with backend.subprocess_runner(runner): - try: - distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir) - except InstallationSubprocessError as error: - raise MetadataGenerationFailed(package_details=details) from error - - return os.path.join(metadata_dir, distinfo_dir) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py deleted file mode 100644 index 27ecd7d3d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +++ /dev/null @@ -1,41 +0,0 @@ -"""Metadata generation logic for source distributions.""" - -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment -from pip._internal.exceptions import ( - InstallationSubprocessError, - MetadataGenerationFailed, -) -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory - - -def generate_editable_metadata( - build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str -) -> str: - """Generate metadata using mechanisms described in PEP 660. - - Returns the generated metadata directory. - """ - metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) - - metadata_dir = metadata_tmpdir.path - - with build_env: - # Note that BuildBackendHookCaller implements a fallback for - # prepare_metadata_for_build_wheel/editable, so we don't have to - # consider the possibility that this hook doesn't exist. - runner = runner_with_spinner_message( - "Preparing editable metadata (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - try: - distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) - except InstallationSubprocessError as error: - raise MetadataGenerationFailed(package_details=details) from error - - assert distinfo_dir is not None - return os.path.join(metadata_dir, distinfo_dir) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel.py deleted file mode 100644 index 8595e45c5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -import logging -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.utils.subprocess import runner_with_spinner_message - -logger = logging.getLogger(__name__) - - -def build_wheel_pep517( - name: str, - backend: BuildBackendHookCaller, - metadata_directory: str, - wheel_directory: str, -) -> str | None: - """Build one InstallRequirement using the PEP 517 build process. - - Returns path to wheel if successfully built. Otherwise, returns None. - """ - assert metadata_directory is not None - try: - logger.debug("Destination directory: %s", wheel_directory) - - runner = runner_with_spinner_message( - f"Building wheel for {name} (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - wheel_name = backend.build_wheel( - wheel_directory=wheel_directory, - metadata_directory=metadata_directory, - ) - except Exception: - logger.error("Failed building wheel for %s", name) - return None - return os.path.join(wheel_directory, wheel_name) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py deleted file mode 100644 index f00d9b27e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +++ /dev/null @@ -1,47 +0,0 @@ -from __future__ import annotations - -import logging -import os - -from pip._vendor.pyproject_hooks import BuildBackendHookCaller, HookMissing - -from pip._internal.utils.subprocess import runner_with_spinner_message - -logger = logging.getLogger(__name__) - - -def build_wheel_editable( - name: str, - backend: BuildBackendHookCaller, - metadata_directory: str, - wheel_directory: str, -) -> str | None: - """Build one InstallRequirement using the PEP 660 build process. - - Returns path to wheel if successfully built. Otherwise, returns None. - """ - assert metadata_directory is not None - try: - logger.debug("Destination directory: %s", wheel_directory) - - runner = runner_with_spinner_message( - f"Building editable for {name} (pyproject.toml)" - ) - with backend.subprocess_runner(runner): - try: - wheel_name = backend.build_editable( - wheel_directory=wheel_directory, - metadata_directory=metadata_directory, - ) - except HookMissing as e: - logger.error( - "Cannot build editable %s because the build " - "backend does not have the %s hook", - name, - e, - ) - return None - except Exception: - logger.error("Failed building editable for %s", name) - return None - return os.path.join(wheel_directory, wheel_name) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/check.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/check.py deleted file mode 100644 index 2d71fa5ff..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/check.py +++ /dev/null @@ -1,175 +0,0 @@ -"""Validation of dependencies of packages""" - -from __future__ import annotations - -import logging -from collections.abc import Generator, Iterable -from contextlib import suppress -from email.parser import Parser -from functools import reduce -from typing import ( - Callable, - NamedTuple, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.tags import Tag, parse_tag -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.distributions import make_distribution_for_install_requirement -from pip._internal.metadata import get_default_environment -from pip._internal.metadata.base import BaseDistribution -from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -class PackageDetails(NamedTuple): - version: Version - dependencies: list[Requirement] - - -# Shorthands -PackageSet = dict[NormalizedName, PackageDetails] -Missing = tuple[NormalizedName, Requirement] -Conflicting = tuple[NormalizedName, Version, Requirement] - -MissingDict = dict[NormalizedName, list[Missing]] -ConflictingDict = dict[NormalizedName, list[Conflicting]] -CheckResult = tuple[MissingDict, ConflictingDict] -ConflictDetails = tuple[PackageSet, CheckResult] - - -def create_package_set_from_installed() -> tuple[PackageSet, bool]: - """Converts a list of distributions into a PackageSet.""" - package_set = {} - problems = False - env = get_default_environment() - for dist in env.iter_installed_distributions(local_only=False, skip=()): - name = dist.canonical_name - try: - dependencies = list(dist.iter_dependencies()) - package_set[name] = PackageDetails(dist.version, dependencies) - except (OSError, ValueError) as e: - # Don't crash on unreadable or broken metadata. - logger.warning("Error parsing dependencies of %s: %s", name, e) - problems = True - return package_set, problems - - -def check_package_set( - package_set: PackageSet, should_ignore: Callable[[str], bool] | None = None -) -> CheckResult: - """Check if a package set is consistent - - If should_ignore is passed, it should be a callable that takes a - package name and returns a boolean. - """ - - missing = {} - conflicting = {} - - for package_name, package_detail in package_set.items(): - # Info about dependencies of package_name - missing_deps: set[Missing] = set() - conflicting_deps: set[Conflicting] = set() - - if should_ignore and should_ignore(package_name): - continue - - for req in package_detail.dependencies: - name = canonicalize_name(req.name) - - # Check if it's missing - if name not in package_set: - missed = True - if req.marker is not None: - missed = req.marker.evaluate({"extra": ""}) - if missed: - missing_deps.add((name, req)) - continue - - # Check if there's a conflict - version = package_set[name].version - if not req.specifier.contains(version, prereleases=True): - conflicting_deps.add((name, version, req)) - - if missing_deps: - missing[package_name] = sorted(missing_deps, key=str) - if conflicting_deps: - conflicting[package_name] = sorted(conflicting_deps, key=str) - - return missing, conflicting - - -def check_install_conflicts(to_install: list[InstallRequirement]) -> ConflictDetails: - """For checking if the dependency graph would be consistent after \ - installing given requirements - """ - # Start from the current state - package_set, _ = create_package_set_from_installed() - # Install packages - would_be_installed = _simulate_installation_of(to_install, package_set) - - # Only warn about directly-dependent packages; create a whitelist of them - whitelist = _create_whitelist(would_be_installed, package_set) - - return ( - package_set, - check_package_set( - package_set, should_ignore=lambda name: name not in whitelist - ), - ) - - -def check_unsupported( - packages: Iterable[BaseDistribution], - supported_tags: Iterable[Tag], -) -> Generator[BaseDistribution, None, None]: - for p in packages: - with suppress(FileNotFoundError): - wheel_file = p.read_text("WHEEL") - wheel_tags: frozenset[Tag] = reduce( - frozenset.union, - map(parse_tag, Parser().parsestr(wheel_file).get_all("Tag", [])), - frozenset(), - ) - if wheel_tags.isdisjoint(supported_tags): - yield p - - -def _simulate_installation_of( - to_install: list[InstallRequirement], package_set: PackageSet -) -> set[NormalizedName]: - """Computes the version of packages after installing to_install.""" - # Keep track of packages that were installed - installed = set() - - # Modify it as installing requirement_set would (assuming no errors) - for inst_req in to_install: - abstract_dist = make_distribution_for_install_requirement(inst_req) - dist = abstract_dist.get_metadata_distribution() - name = dist.canonical_name - package_set[name] = PackageDetails(dist.version, list(dist.iter_dependencies())) - - installed.add(name) - - return installed - - -def _create_whitelist( - would_be_installed: set[NormalizedName], package_set: PackageSet -) -> set[NormalizedName]: - packages_affected = set(would_be_installed) - - for package_name in package_set: - if package_name in packages_affected: - continue - - for req in package_set[package_name].dependencies: - if canonicalize_name(req.name) in packages_affected: - packages_affected.add(package_name) - break - - return packages_affected diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/freeze.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/freeze.py deleted file mode 100644 index 486a83321..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/freeze.py +++ /dev/null @@ -1,259 +0,0 @@ -from __future__ import annotations - -import collections -import logging -import os -from collections.abc import Container, Generator, Iterable -from dataclasses import dataclass, field -from typing import NamedTuple - -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import InvalidVersion - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.metadata import BaseDistribution, get_environment -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, -) -from pip._internal.req.req_file import COMMENT_RE -from pip._internal.utils.direct_url_helpers import direct_url_as_pep440_direct_reference - -logger = logging.getLogger(__name__) - - -class _EditableInfo(NamedTuple): - requirement: str - comments: list[str] - - -def freeze( - requirement: list[str] | None = None, - local_only: bool = False, - user_only: bool = False, - paths: list[str] | None = None, - isolated: bool = False, - exclude_editable: bool = False, - skip: Container[str] = (), -) -> Generator[str, None, None]: - installations: dict[str, FrozenRequirement] = {} - - dists = get_environment(paths).iter_installed_distributions( - local_only=local_only, - skip=(), - user_only=user_only, - ) - for dist in dists: - req = FrozenRequirement.from_dist(dist) - if exclude_editable and req.editable: - continue - installations[req.canonical_name] = req - - if requirement: - # the options that don't get turned into an InstallRequirement - # should only be emitted once, even if the same option is in multiple - # requirements files, so we need to keep track of what has been emitted - # so that we don't emit it again if it's seen again - emitted_options: set[str] = set() - # keep track of which files a requirement is in so that we can - # give an accurate warning if a requirement appears multiple times. - req_files: dict[str, list[str]] = collections.defaultdict(list) - for req_file_path in requirement: - with open(req_file_path) as req_file: - for line in req_file: - if ( - not line.strip() - or line.strip().startswith("#") - or line.startswith( - ( - "-r", - "--requirement", - "-f", - "--find-links", - "-i", - "--index-url", - "--pre", - "--trusted-host", - "--process-dependency-links", - "--extra-index-url", - "--use-feature", - ) - ) - ): - line = line.rstrip() - if line not in emitted_options: - emitted_options.add(line) - yield line - continue - - if line.startswith(("-e", "--editable")): - if line.startswith("-e"): - line = line[2:].strip() - else: - line = line[len("--editable") :].strip().lstrip("=") - line_req = install_req_from_editable( - line, - isolated=isolated, - ) - else: - line_req = install_req_from_line( - COMMENT_RE.sub("", line).strip(), - isolated=isolated, - ) - - if not line_req.name: - logger.info( - "Skipping line in requirement file [%s] because " - "it's not clear what it would install: %s", - req_file_path, - line.strip(), - ) - logger.info( - " (add #egg=PackageName to the URL to avoid" - " this warning)" - ) - else: - line_req_canonical_name = canonicalize_name(line_req.name) - if line_req_canonical_name not in installations: - # either it's not installed, or it is installed - # but has been processed already - if not req_files[line_req.name]: - logger.warning( - "Requirement file [%s] contains %s, but " - "package %r is not installed", - req_file_path, - COMMENT_RE.sub("", line).strip(), - line_req.name, - ) - else: - req_files[line_req.name].append(req_file_path) - else: - yield str(installations[line_req_canonical_name]).rstrip() - del installations[line_req_canonical_name] - req_files[line_req.name].append(req_file_path) - - # Warn about requirements that were included multiple times (in a - # single requirements file or in different requirements files). - for name, files in req_files.items(): - if len(files) > 1: - logger.warning( - "Requirement %s included multiple times [%s]", - name, - ", ".join(sorted(set(files))), - ) - - yield ("## The following requirements were added by pip freeze:") - for installation in sorted(installations.values(), key=lambda x: x.name.lower()): - if installation.canonical_name not in skip: - yield str(installation).rstrip() - - -def _format_as_name_version(dist: BaseDistribution) -> str: - try: - dist_version = dist.version - except InvalidVersion: - # legacy version - return f"{dist.raw_name}==={dist.raw_version}" - else: - return f"{dist.raw_name}=={dist_version}" - - -def _get_editable_info(dist: BaseDistribution) -> _EditableInfo: - """ - Compute and return values (req, comments) for use in - FrozenRequirement.from_dist(). - """ - editable_project_location = dist.editable_project_location - assert editable_project_location - location = os.path.normcase(os.path.abspath(editable_project_location)) - - from pip._internal.vcs import RemoteNotFoundError, RemoteNotValidError, vcs - - vcs_backend = vcs.get_backend_for_dir(location) - - if vcs_backend is None: - display = _format_as_name_version(dist) - logger.debug( - 'No VCS found for editable requirement "%s" in: %r', - display, - location, - ) - return _EditableInfo( - requirement=location, - comments=[f"# Editable install with no version control ({display})"], - ) - - vcs_name = type(vcs_backend).__name__ - - try: - req = vcs_backend.get_src_requirement(location, dist.raw_name) - except RemoteNotFoundError: - display = _format_as_name_version(dist) - return _EditableInfo( - requirement=location, - comments=[f"# Editable {vcs_name} install with no remote ({display})"], - ) - except RemoteNotValidError as ex: - display = _format_as_name_version(dist) - return _EditableInfo( - requirement=location, - comments=[ - f"# Editable {vcs_name} install ({display}) with either a deleted " - f"local remote or invalid URI:", - f"# '{ex.url}'", - ], - ) - except BadCommand: - logger.warning( - "cannot determine version of editable source in %s " - "(%s command not found in path)", - location, - vcs_backend.name, - ) - return _EditableInfo(requirement=location, comments=[]) - except InstallationError as exc: - logger.warning("Error when trying to get requirement for VCS system %s", exc) - else: - return _EditableInfo(requirement=req, comments=[]) - - logger.warning("Could not determine repository location of %s", location) - - return _EditableInfo( - requirement=location, - comments=["## !! Could not determine repository location"], - ) - - -@dataclass(frozen=True) -class FrozenRequirement: - name: str - req: str - editable: bool - comments: Iterable[str] = field(default_factory=tuple) - - @property - def canonical_name(self) -> NormalizedName: - return canonicalize_name(self.name) - - @classmethod - def from_dist(cls, dist: BaseDistribution) -> FrozenRequirement: - editable = dist.editable - if editable: - req, comments = _get_editable_info(dist) - else: - comments = [] - direct_url = dist.direct_url - if direct_url: - # if PEP 610 metadata is present, use it - req = direct_url_as_pep440_direct_reference(direct_url, dist.raw_name) - else: - # name==version requirement - req = _format_as_name_version(dist) - - return cls(dist.raw_name, req, editable, comments=comments) - - def __str__(self) -> str: - req = self.req - if self.editable: - req = f"-e {req}" - return "\n".join(list(self.comments) + [str(req)]) + "\n" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__init__.py deleted file mode 100644 index 2645a4aca..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""For modules related to installing packages.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 1a1574469d0586df294ada045900ab8dca59e584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmXv}!Ab)$5KUCH2>J~Ro=VxSt3|Ac7r|2zDS8VG>1L?0*(4-Ww4VG5|G}fb;&DBC z@hJ2M%xe1%GxM0?&3nE5y<L{@@&2ukQvYhn8hkY@+mjbIX2iz)fOR*Xdsi-GwNrD0 zF$-uUp~}c*+D4MbXgkfktY&hGv47p=%?^Na6~G%?wwlfB<(asP7^090LpdBCiboe_ z!Uy+&6-7}QH&+uGG1pd8Du22d@>1L^=-%1masUH(Iz53~tbJ<$sP<x{Cn9RXeEnW{ z?F-PBFj#2{=P^jq&c<S;SwPxq0_gii(>ebSbrH6c%{G7Rr1G=LIsas3*h=IV52asP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index bc38d4df576f5f4b7e64224857642bae9be2a01c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40639 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/wheel.py deleted file mode 100644 index 40097d6a7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/install/wheel.py +++ /dev/null @@ -1,745 +0,0 @@ -"""Support for installing and building the "wheel" binary package format.""" - -from __future__ import annotations - -import collections -import compileall -import contextlib -import csv -import importlib -import logging -import os.path -import re -import shutil -import sys -import textwrap -import warnings -from base64 import urlsafe_b64encode -from collections.abc import Generator, Iterable, Iterator, Sequence -from email.message import Message -from itertools import chain, filterfalse, starmap -from typing import ( - IO, - Any, - BinaryIO, - Callable, - NewType, - Protocol, - Union, - cast, -) -from zipfile import ZipFile, ZipInfo - -from pip._vendor.distlib.scripts import ScriptMaker -from pip._vendor.distlib.util import get_export_entry -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import InstallationError -from pip._internal.locations import get_major_minor_version -from pip._internal.metadata import ( - BaseDistribution, - FilesystemWheel, - get_wheel_distribution, -) -from pip._internal.models.direct_url import DIRECT_URL_METADATA_NAME, DirectUrl -from pip._internal.models.scheme import SCHEME_KEYS, Scheme -from pip._internal.utils.filesystem import adjacent_tmp_file, replace -from pip._internal.utils.misc import StreamWrapper, ensure_dir, hash_file, partition -from pip._internal.utils.unpacking import ( - current_umask, - is_within_directory, - set_extracted_file_to_default_mode_plus_executable, - zip_item_is_executable, -) -from pip._internal.utils.wheel import parse_wheel - - -class File(Protocol): - src_record_path: RecordPath - dest_path: str - changed: bool - - def save(self) -> None: - pass - - -logger = logging.getLogger(__name__) - -RecordPath = NewType("RecordPath", str) -InstalledCSVRow = tuple[RecordPath, str, Union[int, str]] - - -def rehash(path: str, blocksize: int = 1 << 20) -> tuple[str, str]: - """Return (encoded_digest, length) for path using hashlib.sha256()""" - h, length = hash_file(path, blocksize) - digest = "sha256=" + urlsafe_b64encode(h.digest()).decode("latin1").rstrip("=") - return (digest, str(length)) - - -def csv_io_kwargs(mode: str) -> dict[str, Any]: - """Return keyword arguments to properly open a CSV file - in the given mode. - """ - return {"mode": mode, "newline": "", "encoding": "utf-8"} - - -def fix_script(path: str) -> bool: - """Replace #!python with #!/path/to/python - Return True if file was changed. - """ - # XXX RECORD hashes will need to be updated - assert os.path.isfile(path) - - with open(path, "rb") as script: - firstline = script.readline() - if not firstline.startswith(b"#!python"): - return False - exename = sys.executable.encode(sys.getfilesystemencoding()) - firstline = b"#!" + exename + os.linesep.encode("ascii") - rest = script.read() - with open(path, "wb") as script: - script.write(firstline) - script.write(rest) - return True - - -def wheel_root_is_purelib(metadata: Message) -> bool: - return metadata.get("Root-Is-Purelib", "").lower() == "true" - - -def get_entrypoints(dist: BaseDistribution) -> tuple[dict[str, str], dict[str, str]]: - console_scripts = {} - gui_scripts = {} - for entry_point in dist.iter_entry_points(): - if entry_point.group == "console_scripts": - console_scripts[entry_point.name] = entry_point.value - elif entry_point.group == "gui_scripts": - gui_scripts[entry_point.name] = entry_point.value - return console_scripts, gui_scripts - - -def message_about_scripts_not_on_PATH(scripts: Sequence[str]) -> str | None: - """Determine if any scripts are not on PATH and format a warning. - Returns a warning message if one or more scripts are not on PATH, - otherwise None. - """ - if not scripts: - return None - - # Group scripts by the path they were installed in - grouped_by_dir: dict[str, set[str]] = collections.defaultdict(set) - for destfile in scripts: - parent_dir = os.path.dirname(destfile) - script_name = os.path.basename(destfile) - grouped_by_dir[parent_dir].add(script_name) - - # We don't want to warn for directories that are on PATH. - not_warn_dirs = [ - os.path.normcase(os.path.normpath(i)).rstrip(os.sep) - for i in os.environ.get("PATH", "").split(os.pathsep) - ] - # If an executable sits with sys.executable, we don't warn for it. - # This covers the case of venv invocations without activating the venv. - not_warn_dirs.append( - os.path.normcase(os.path.normpath(os.path.dirname(sys.executable))) - ) - warn_for: dict[str, set[str]] = { - parent_dir: scripts - for parent_dir, scripts in grouped_by_dir.items() - if os.path.normcase(os.path.normpath(parent_dir)) not in not_warn_dirs - } - if not warn_for: - return None - - # Format a message - msg_lines = [] - for parent_dir, dir_scripts in warn_for.items(): - sorted_scripts: list[str] = sorted(dir_scripts) - if len(sorted_scripts) == 1: - start_text = f"script {sorted_scripts[0]} is" - else: - start_text = "scripts {} are".format( - ", ".join(sorted_scripts[:-1]) + " and " + sorted_scripts[-1] - ) - - msg_lines.append( - f"The {start_text} installed in '{parent_dir}' which is not on PATH." - ) - - last_line_fmt = ( - "Consider adding {} to PATH or, if you prefer " - "to suppress this warning, use --no-warn-script-location." - ) - if len(msg_lines) == 1: - msg_lines.append(last_line_fmt.format("this directory")) - else: - msg_lines.append(last_line_fmt.format("these directories")) - - # Add a note if any directory starts with ~ - warn_for_tilde = any( - i[0] == "~" for i in os.environ.get("PATH", "").split(os.pathsep) if i - ) - if warn_for_tilde: - tilde_warning_msg = ( - "NOTE: The current PATH contains path(s) starting with `~`, " - "which may not be expanded by all applications." - ) - msg_lines.append(tilde_warning_msg) - - # Returns the formatted multiline message - return "\n".join(msg_lines) - - -def _normalized_outrows( - outrows: Iterable[InstalledCSVRow], -) -> list[tuple[str, str, str]]: - """Normalize the given rows of a RECORD file. - - Items in each row are converted into str. Rows are then sorted to make - the value more predictable for tests. - - Each row is a 3-tuple (path, hash, size) and corresponds to a record of - a RECORD file (see PEP 376 and PEP 427 for details). For the rows - passed to this function, the size can be an integer as an int or string, - or the empty string. - """ - # Normally, there should only be one row per path, in which case the - # second and third elements don't come into play when sorting. - # However, in cases in the wild where a path might happen to occur twice, - # we don't want the sort operation to trigger an error (but still want - # determinism). Since the third element can be an int or string, we - # coerce each element to a string to avoid a TypeError in this case. - # For additional background, see-- - # https://github.com/pypa/pip/issues/5868 - return sorted( - (record_path, hash_, str(size)) for record_path, hash_, size in outrows - ) - - -def _record_to_fs_path(record_path: RecordPath, lib_dir: str) -> str: - return os.path.join(lib_dir, record_path) - - -def _fs_to_record_path(path: str, lib_dir: str) -> RecordPath: - # On Windows, do not handle relative paths if they belong to different - # logical disks - if os.path.splitdrive(path)[0].lower() == os.path.splitdrive(lib_dir)[0].lower(): - path = os.path.relpath(path, lib_dir) - - path = path.replace(os.path.sep, "/") - return cast("RecordPath", path) - - -def get_csv_rows_for_installed( - old_csv_rows: list[list[str]], - installed: dict[RecordPath, RecordPath], - changed: set[RecordPath], - generated: list[str], - lib_dir: str, -) -> list[InstalledCSVRow]: - """ - :param installed: A map from archive RECORD path to installation RECORD - path. - """ - installed_rows: list[InstalledCSVRow] = [] - for row in old_csv_rows: - if len(row) > 3: - logger.warning("RECORD line has more than three elements: %s", row) - old_record_path = cast("RecordPath", row[0]) - new_record_path = installed.pop(old_record_path, old_record_path) - if new_record_path in changed: - digest, length = rehash(_record_to_fs_path(new_record_path, lib_dir)) - else: - digest = row[1] if len(row) > 1 else "" - length = row[2] if len(row) > 2 else "" - installed_rows.append((new_record_path, digest, length)) - for f in generated: - path = _fs_to_record_path(f, lib_dir) - digest, length = rehash(f) - installed_rows.append((path, digest, length)) - return installed_rows + [ - (installed_record_path, "", "") for installed_record_path in installed.values() - ] - - -def get_console_script_specs(console: dict[str, str]) -> list[str]: - """ - Given the mapping from entrypoint name to callable, return the relevant - console script specs. - """ - # Don't mutate caller's version - console = console.copy() - - scripts_to_generate = [] - - # Special case pip and setuptools to generate versioned wrappers - # - # The issue is that some projects (specifically, pip and setuptools) use - # code in setup.py to create "versioned" entry points - pip2.7 on Python - # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into - # the wheel metadata at build time, and so if the wheel is installed with - # a *different* version of Python the entry points will be wrong. The - # correct fix for this is to enhance the metadata to be able to describe - # such versioned entry points. - # Currently, projects using versioned entry points will either have - # incorrect versioned entry points, or they will not be able to distribute - # "universal" wheels (i.e., they will need a wheel per Python version). - # - # Because setuptools and pip are bundled with _ensurepip and virtualenv, - # we need to use universal wheels. As a workaround, we - # override the versioned entry points in the wheel and generate the - # correct ones. - # - # To add the level of hack in this section of code, in order to support - # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment - # variable which will control which version scripts get installed. - # - # ENSUREPIP_OPTIONS=altinstall - # - Only pipX.Y and easy_install-X.Y will be generated and installed - # ENSUREPIP_OPTIONS=install - # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note - # that this option is technically if ENSUREPIP_OPTIONS is set and is - # not altinstall - # DEFAULT - # - The default behavior is to install pip, pipX, pipX.Y, easy_install - # and easy_install-X.Y. - pip_script = console.pop("pip", None) - if pip_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - scripts_to_generate.append("pip = " + pip_script) - - if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": - scripts_to_generate.append(f"pip{sys.version_info[0]} = {pip_script}") - - scripts_to_generate.append(f"pip{get_major_minor_version()} = {pip_script}") - # Delete any other versioned pip entry points - pip_ep = [k for k in console if re.match(r"pip(\d+(\.\d+)?)?$", k)] - for k in pip_ep: - del console[k] - easy_install_script = console.pop("easy_install", None) - if easy_install_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - scripts_to_generate.append("easy_install = " + easy_install_script) - - scripts_to_generate.append( - f"easy_install-{get_major_minor_version()} = {easy_install_script}" - ) - # Delete any other versioned easy_install entry points - easy_install_ep = [ - k for k in console if re.match(r"easy_install(-\d+\.\d+)?$", k) - ] - for k in easy_install_ep: - del console[k] - - # Generate the console entry points specified in the wheel - scripts_to_generate.extend(starmap("{} = {}".format, console.items())) - - return scripts_to_generate - - -class ZipBackedFile: - def __init__( - self, src_record_path: RecordPath, dest_path: str, zip_file: ZipFile - ) -> None: - self.src_record_path = src_record_path - self.dest_path = dest_path - self._zip_file = zip_file - self.changed = False - - def _getinfo(self) -> ZipInfo: - return self._zip_file.getinfo(self.src_record_path) - - def save(self) -> None: - # When we open the output file below, any existing file is truncated - # before we start writing the new contents. This is fine in most - # cases, but can cause a segfault if pip has loaded a shared - # object (e.g. from pyopenssl through its vendored urllib3) - # Since the shared object is mmap'd an attempt to call a - # symbol in it will then cause a segfault. Unlinking the file - # allows writing of new contents while allowing the process to - # continue to use the old copy. - if os.path.exists(self.dest_path): - os.unlink(self.dest_path) - - zipinfo = self._getinfo() - - # optimization: the file is created by open(), - # skip the decompression when there is 0 bytes to decompress. - with open(self.dest_path, "wb") as dest: - if zipinfo.file_size > 0: - with self._zip_file.open(zipinfo) as f: - blocksize = min(zipinfo.file_size, 1024 * 1024) - shutil.copyfileobj(f, dest, blocksize) - - if zip_item_is_executable(zipinfo): - set_extracted_file_to_default_mode_plus_executable(self.dest_path) - - -class ScriptFile: - def __init__(self, file: File) -> None: - self._file = file - self.src_record_path = self._file.src_record_path - self.dest_path = self._file.dest_path - self.changed = False - - def save(self) -> None: - self._file.save() - self.changed = fix_script(self.dest_path) - - -class MissingCallableSuffix(InstallationError): - def __init__(self, entry_point: str) -> None: - super().__init__( - f"Invalid script entry point: {entry_point} - A callable " - "suffix is required. See https://packaging.python.org/" - "specifications/entry-points/#use-for-scripts for more " - "information." - ) - - -def _raise_for_invalid_entrypoint(specification: str) -> None: - entry = get_export_entry(specification) - if entry is not None and entry.suffix is None: - raise MissingCallableSuffix(str(entry)) - - -class PipScriptMaker(ScriptMaker): - # Override distlib's default script template with one that - # doesn't import `re` module, allowing scripts to load faster. - script_template = textwrap.dedent( - """\ - import sys - from %(module)s import %(import_name)s - if __name__ == '__main__': - sys.argv[0] = sys.argv[0].removesuffix('.exe') - sys.exit(%(func)s()) -""" - ) - - def make( - self, specification: str, options: dict[str, Any] | None = None - ) -> list[str]: - _raise_for_invalid_entrypoint(specification) - return super().make(specification, options) - - -def _install_wheel( # noqa: C901, PLR0915 function is too long - name: str, - wheel_zip: ZipFile, - wheel_path: str, - scheme: Scheme, - pycompile: bool = True, - warn_script_location: bool = True, - direct_url: DirectUrl | None = None, - requested: bool = False, -) -> None: - """Install a wheel. - - :param name: Name of the project to install - :param wheel_zip: open ZipFile for wheel being installed - :param scheme: Distutils scheme dictating the install directories - :param req_description: String used in place of the requirement, for - logging - :param pycompile: Whether to byte-compile installed Python files - :param warn_script_location: Whether to check that scripts are installed - into a directory on PATH - :raises UnsupportedWheel: - * when the directory holds an unpacked wheel with incompatible - Wheel-Version - * when the .dist-info dir does not match the wheel - """ - info_dir, metadata = parse_wheel(wheel_zip, name) - - if wheel_root_is_purelib(metadata): - lib_dir = scheme.purelib - else: - lib_dir = scheme.platlib - - # Record details of the files moved - # installed = files copied from the wheel to the destination - # changed = files changed while installing (scripts #! line typically) - # generated = files newly generated during the install (script wrappers) - installed: dict[RecordPath, RecordPath] = {} - changed: set[RecordPath] = set() - generated: list[str] = [] - - def record_installed( - srcfile: RecordPath, destfile: str, modified: bool = False - ) -> None: - """Map archive RECORD paths to installation RECORD paths.""" - newpath = _fs_to_record_path(destfile, lib_dir) - installed[srcfile] = newpath - if modified: - changed.add(newpath) - - def is_dir_path(path: RecordPath) -> bool: - return path.endswith("/") - - def assert_no_path_traversal(dest_dir_path: str, target_path: str) -> None: - if not is_within_directory(dest_dir_path, target_path): - message = ( - "The wheel {!r} has a file {!r} trying to install" - " outside the target directory {!r}" - ) - raise InstallationError( - message.format(wheel_path, target_path, dest_dir_path) - ) - - def root_scheme_file_maker( - zip_file: ZipFile, dest: str - ) -> Callable[[RecordPath], File]: - def make_root_scheme_file(record_path: RecordPath) -> File: - normed_path = os.path.normpath(record_path) - dest_path = os.path.join(dest, normed_path) - assert_no_path_traversal(dest, dest_path) - return ZipBackedFile(record_path, dest_path, zip_file) - - return make_root_scheme_file - - def data_scheme_file_maker( - zip_file: ZipFile, scheme: Scheme - ) -> Callable[[RecordPath], File]: - scheme_paths = {key: getattr(scheme, key) for key in SCHEME_KEYS} - - def make_data_scheme_file(record_path: RecordPath) -> File: - normed_path = os.path.normpath(record_path) - try: - _, scheme_key, dest_subpath = normed_path.split(os.path.sep, 2) - except ValueError: - message = ( - f"Unexpected file in {wheel_path}: {record_path!r}. .data directory" - " contents should be named like: '<scheme key>/<path>'." - ) - raise InstallationError(message) - - try: - scheme_path = scheme_paths[scheme_key] - except KeyError: - valid_scheme_keys = ", ".join(sorted(scheme_paths)) - message = ( - f"Unknown scheme key used in {wheel_path}: {scheme_key} " - f"(for file {record_path!r}). .data directory contents " - f"should be in subdirectories named with a valid scheme " - f"key ({valid_scheme_keys})" - ) - raise InstallationError(message) - - dest_path = os.path.join(scheme_path, dest_subpath) - assert_no_path_traversal(scheme_path, dest_path) - return ZipBackedFile(record_path, dest_path, zip_file) - - return make_data_scheme_file - - def is_data_scheme_path(path: RecordPath) -> bool: - return path.split("/", 1)[0].endswith(".data") - - paths = cast(list[RecordPath], wheel_zip.namelist()) - file_paths = filterfalse(is_dir_path, paths) - root_scheme_paths, data_scheme_paths = partition(is_data_scheme_path, file_paths) - - make_root_scheme_file = root_scheme_file_maker(wheel_zip, lib_dir) - files: Iterator[File] = map(make_root_scheme_file, root_scheme_paths) - - def is_script_scheme_path(path: RecordPath) -> bool: - parts = path.split("/", 2) - return len(parts) > 2 and parts[0].endswith(".data") and parts[1] == "scripts" - - other_scheme_paths, script_scheme_paths = partition( - is_script_scheme_path, data_scheme_paths - ) - - make_data_scheme_file = data_scheme_file_maker(wheel_zip, scheme) - other_scheme_files = map(make_data_scheme_file, other_scheme_paths) - files = chain(files, other_scheme_files) - - # Get the defined entry points - distribution = get_wheel_distribution( - FilesystemWheel(wheel_path), - canonicalize_name(name), - ) - console, gui = get_entrypoints(distribution) - - def is_entrypoint_wrapper(file: File) -> bool: - # EP, EP.exe and EP-script.py are scripts generated for - # entry point EP by setuptools - path = file.dest_path - name = os.path.basename(path) - if name.lower().endswith(".exe"): - matchname = name[:-4] - elif name.lower().endswith("-script.py"): - matchname = name[:-10] - elif name.lower().endswith(".pya"): - matchname = name[:-4] - else: - matchname = name - # Ignore setuptools-generated scripts - return matchname in console or matchname in gui - - script_scheme_files: Iterator[File] = map( - make_data_scheme_file, script_scheme_paths - ) - script_scheme_files = filterfalse(is_entrypoint_wrapper, script_scheme_files) - script_scheme_files = map(ScriptFile, script_scheme_files) - files = chain(files, script_scheme_files) - - existing_parents = set() - for file in files: - # directory creation is lazy and after file filtering - # to ensure we don't install empty dirs; empty dirs can't be - # uninstalled. - parent_dir = os.path.dirname(file.dest_path) - if parent_dir not in existing_parents: - ensure_dir(parent_dir) - existing_parents.add(parent_dir) - file.save() - record_installed(file.src_record_path, file.dest_path, file.changed) - - def pyc_source_file_paths() -> Generator[str, None, None]: - # We de-duplicate installation paths, since there can be overlap (e.g. - # file in .data maps to same location as file in wheel root). - # Sorting installation paths makes it easier to reproduce and debug - # issues related to permissions on existing files. - for installed_path in sorted(set(installed.values())): - full_installed_path = os.path.join(lib_dir, installed_path) - if not os.path.isfile(full_installed_path): - continue - if not full_installed_path.endswith(".py"): - continue - yield full_installed_path - - def pyc_output_path(path: str) -> str: - """Return the path the pyc file would have been written to.""" - return importlib.util.cache_from_source(path) - - # Compile all of the pyc files for the installed files - if pycompile: - with contextlib.redirect_stdout( - StreamWrapper.from_stream(sys.stdout) - ) as stdout: - with warnings.catch_warnings(): - warnings.filterwarnings("ignore") - for path in pyc_source_file_paths(): - success = compileall.compile_file(path, force=True, quiet=True) - if success: - pyc_path = pyc_output_path(path) - assert os.path.exists(pyc_path) - pyc_record_path = cast( - "RecordPath", pyc_path.replace(os.path.sep, "/") - ) - record_installed(pyc_record_path, pyc_path) - logger.debug(stdout.getvalue()) - - maker = PipScriptMaker(None, scheme.scripts) - - # Ensure old scripts are overwritten. - # See https://github.com/pypa/pip/issues/1800 - maker.clobber = True - - # Ensure we don't generate any variants for scripts because this is almost - # never what somebody wants. - # See https://bitbucket.org/pypa/distlib/issue/35/ - maker.variants = {""} - - # This is required because otherwise distlib creates scripts that are not - # executable. - # See https://bitbucket.org/pypa/distlib/issue/32/ - maker.set_mode = True - - # Generate the console and GUI entry points specified in the wheel - scripts_to_generate = get_console_script_specs(console) - - gui_scripts_to_generate = list(starmap("{} = {}".format, gui.items())) - - generated_console_scripts = maker.make_multiple(scripts_to_generate) - generated.extend(generated_console_scripts) - - generated.extend(maker.make_multiple(gui_scripts_to_generate, {"gui": True})) - - if warn_script_location: - msg = message_about_scripts_not_on_PATH(generated_console_scripts) - if msg is not None: - logger.warning(msg) - - generated_file_mode = 0o666 & ~current_umask() - - @contextlib.contextmanager - def _generate_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: - with adjacent_tmp_file(path, **kwargs) as f: - yield f - os.chmod(f.name, generated_file_mode) - replace(f.name, path) - - dest_info_dir = os.path.join(lib_dir, info_dir) - - # Record pip as the installer - installer_path = os.path.join(dest_info_dir, "INSTALLER") - with _generate_file(installer_path) as installer_file: - installer_file.write(b"pip\n") - generated.append(installer_path) - - # Record the PEP 610 direct URL reference - if direct_url is not None: - direct_url_path = os.path.join(dest_info_dir, DIRECT_URL_METADATA_NAME) - with _generate_file(direct_url_path) as direct_url_file: - direct_url_file.write(direct_url.to_json().encode("utf-8")) - generated.append(direct_url_path) - - # Record the REQUESTED file - if requested: - requested_path = os.path.join(dest_info_dir, "REQUESTED") - with open(requested_path, "wb"): - pass - generated.append(requested_path) - - record_text = distribution.read_text("RECORD") - record_rows = list(csv.reader(record_text.splitlines())) - - rows = get_csv_rows_for_installed( - record_rows, - installed=installed, - changed=changed, - generated=generated, - lib_dir=lib_dir, - ) - - # Record details of all files installed - record_path = os.path.join(dest_info_dir, "RECORD") - - with _generate_file(record_path, **csv_io_kwargs("w")) as record_file: - # Explicitly cast to typing.IO[str] as a workaround for the mypy error: - # "writer" has incompatible type "BinaryIO"; expected "_Writer" - writer = csv.writer(cast("IO[str]", record_file)) - writer.writerows(_normalized_outrows(rows)) - - -@contextlib.contextmanager -def req_error_context(req_description: str) -> Generator[None, None, None]: - try: - yield - except InstallationError as e: - message = f"For req: {req_description}. {e.args[0]}" - raise InstallationError(message) from e - - -def install_wheel( - name: str, - wheel_path: str, - scheme: Scheme, - req_description: str, - pycompile: bool = True, - warn_script_location: bool = True, - direct_url: DirectUrl | None = None, - requested: bool = False, -) -> None: - with ZipFile(wheel_path, allowZip64=True) as z: - with req_error_context(req_description): - _install_wheel( - name=name, - wheel_zip=z, - wheel_path=wheel_path, - scheme=scheme, - pycompile=pycompile, - warn_script_location=warn_script_location, - direct_url=direct_url, - requested=requested, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/prepare.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/prepare.py deleted file mode 100644 index 67f9ee950..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/operations/prepare.py +++ /dev/null @@ -1,747 +0,0 @@ -"""Prepares a distribution for installation""" - -# The following comment should be removed at some point in the future. -# mypy: strict-optional=False -from __future__ import annotations - -import mimetypes -import os -import shutil -from collections.abc import Iterable -from dataclasses import dataclass -from pathlib import Path -from typing import TYPE_CHECKING - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.build_env import BuildEnvironmentInstaller -from pip._internal.distributions import make_distribution_for_install_requirement -from pip._internal.distributions.installed import InstalledDistribution -from pip._internal.exceptions import ( - DirectoryUrlHashUnsupported, - HashMismatch, - HashUnpinned, - InstallationError, - MetadataInconsistent, - NetworkConnectionError, - VcsHashUnsupported, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution, get_metadata_distribution -from pip._internal.models.direct_url import ArchiveInfo -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.network.download import Downloader -from pip._internal.network.lazy_wheel import ( - HTTPRangeRequestUnsupported, - dist_from_wheel_url, -) -from pip._internal.network.session import PipSession -from pip._internal.operations.build.build_tracker import BuildTracker -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils._log import getLogger -from pip._internal.utils.direct_url_helpers import ( - direct_url_for_editable, - direct_url_from_link, -) -from pip._internal.utils.hashes import Hashes, MissingHashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - display_path, - hash_file, - hide_url, - redact_auth_from_requirement, -) -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.unpacking import unpack_file -from pip._internal.vcs import vcs - -if TYPE_CHECKING: - from pip._internal.cli.progress_bars import BarType - -logger = getLogger(__name__) - - -def _get_prepared_distribution( - req: InstallRequirement, - build_tracker: BuildTracker, - build_env_installer: BuildEnvironmentInstaller, - build_isolation: bool, - check_build_deps: bool, -) -> BaseDistribution: - """Prepare a distribution for installation.""" - abstract_dist = make_distribution_for_install_requirement(req) - tracker_id = abstract_dist.build_tracker_id - if tracker_id is not None: - with build_tracker.track(req, tracker_id): - abstract_dist.prepare_distribution_metadata( - build_env_installer, build_isolation, check_build_deps - ) - return abstract_dist.get_metadata_distribution() - - -def unpack_vcs_link(link: Link, location: str, verbosity: int) -> None: - vcs_backend = vcs.get_backend_for_scheme(link.scheme) - assert vcs_backend is not None - vcs_backend.unpack(location, url=hide_url(link.url), verbosity=verbosity) - - -@dataclass -class File: - path: str - content_type: str | None = None - - def __post_init__(self) -> None: - if self.content_type is None: - # Try to guess the file's MIME type. If the system MIME tables - # can't be loaded, give up. - try: - self.content_type = mimetypes.guess_type(self.path)[0] - except OSError: - pass - - -def get_http_url( - link: Link, - download: Downloader, - download_dir: str | None = None, - hashes: Hashes | None = None, -) -> File: - temp_dir = TempDirectory(kind="unpack", globally_managed=True) - # If a download dir is specified, is the file already downloaded there? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, download_dir, hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - content_type = None - else: - # let's download to a tmp dir - from_path, content_type = download(link, temp_dir.path) - if hashes: - hashes.check_against_path(from_path) - - return File(from_path, content_type) - - -def get_file_url( - link: Link, download_dir: str | None = None, hashes: Hashes | None = None -) -> File: - """Get file and optionally check its hash.""" - # If a download dir is specified, is the file already there and valid? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, download_dir, hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - else: - from_path = link.file_path - - # If --require-hashes is off, `hashes` is either empty, the - # link's embedded hash, or MissingHashes; it is required to - # match. If --require-hashes is on, we are satisfied by any - # hash in `hashes` matching: a URL-based or an option-based - # one; no internet-sourced hash will be in `hashes`. - if hashes: - hashes.check_against_path(from_path) - return File(from_path, None) - - -def unpack_url( - link: Link, - location: str, - download: Downloader, - verbosity: int, - download_dir: str | None = None, - hashes: Hashes | None = None, -) -> File | None: - """Unpack link into location, downloading if required. - - :param hashes: A Hashes object, one of whose embedded hashes must match, - or HashMismatch will be raised. If the Hashes is empty, no matches are - required, and unhashable types of requirements (like VCS ones, which - would ordinarily raise HashUnsupported) are allowed. - """ - # non-editable vcs urls - if link.is_vcs: - unpack_vcs_link(link, location, verbosity=verbosity) - return None - - assert not link.is_existing_dir() - - # file urls - if link.is_file: - file = get_file_url(link, download_dir, hashes=hashes) - - # http urls - else: - file = get_http_url( - link, - download, - download_dir, - hashes=hashes, - ) - - # unpack the archive to the build dir location. even when only downloading - # archives, they have to be unpacked to parse dependencies, except wheels - if not link.is_wheel: - unpack_file(file.path, location, file.content_type) - - return file - - -def _check_download_dir( - link: Link, - download_dir: str, - hashes: Hashes | None, - warn_on_hash_mismatch: bool = True, -) -> str | None: - """Check download_dir for previously downloaded file with correct hash - If a correct file is found return its path else None - """ - download_path = os.path.join(download_dir, link.filename) - - if not os.path.exists(download_path): - return None - - # If already downloaded, does its hash match? - logger.info("File was already downloaded %s", download_path) - if hashes: - try: - hashes.check_against_path(download_path) - except HashMismatch: - if warn_on_hash_mismatch: - logger.warning( - "Previously-downloaded file %s has bad hash. Re-downloading.", - download_path, - ) - os.unlink(download_path) - return None - return download_path - - -class RequirementPreparer: - """Prepares a Requirement""" - - def __init__( - self, - *, - build_dir: str, - download_dir: str | None, - src_dir: str, - build_isolation: bool, - build_isolation_installer: BuildEnvironmentInstaller, - check_build_deps: bool, - build_tracker: BuildTracker, - session: PipSession, - progress_bar: BarType, - finder: PackageFinder, - require_hashes: bool, - use_user_site: bool, - lazy_wheel: bool, - verbosity: int, - legacy_resolver: bool, - ) -> None: - super().__init__() - - self.src_dir = src_dir - self.build_dir = build_dir - self.build_tracker = build_tracker - self._session = session - self._download = Downloader(session, progress_bar) - self.finder = finder - - # Where still-packed archives should be written to. If None, they are - # not saved, and are deleted immediately after unpacking. - self.download_dir = download_dir - - # Is build isolation allowed? - self.build_isolation = build_isolation - self.build_env_installer = build_isolation_installer - - # Should check build dependencies? - self.check_build_deps = check_build_deps - - # Should hash-checking be required? - self.require_hashes = require_hashes - - # Should install in user site-packages? - self.use_user_site = use_user_site - - # Should wheels be downloaded lazily? - self.use_lazy_wheel = lazy_wheel - - # How verbose should underlying tooling be? - self.verbosity = verbosity - - # Are we using the legacy resolver? - self.legacy_resolver = legacy_resolver - - # Memoized downloaded files, as mapping of url: path. - self._downloaded: dict[str, str] = {} - - # Previous "header" printed for a link-based InstallRequirement - self._previous_requirement_header = ("", "") - - def _log_preparing_link(self, req: InstallRequirement) -> None: - """Provide context for the requirement being prepared.""" - if req.link.is_file and not req.is_wheel_from_cache: - message = "Processing %s" - information = str(display_path(req.link.file_path)) - else: - message = "Collecting %s" - information = redact_auth_from_requirement(req.req) if req.req else str(req) - - # If we used req.req, inject requirement source if available (this - # would already be included if we used req directly) - if req.req and req.comes_from: - if isinstance(req.comes_from, str): - comes_from: str | None = req.comes_from - else: - comes_from = req.comes_from.from_path() - if comes_from: - information += f" (from {comes_from})" - - if (message, information) != self._previous_requirement_header: - self._previous_requirement_header = (message, information) - logger.info(message, information) - - if req.is_wheel_from_cache: - with indent_log(): - logger.info("Using cached %s", req.link.filename) - - def _ensure_link_req_src_dir( - self, req: InstallRequirement, parallel_builds: bool - ) -> None: - """Ensure source_dir of a linked InstallRequirement.""" - # Since source_dir is only set for editable requirements. - if req.link.is_wheel: - # We don't need to unpack wheels, so no need for a source - # directory. - return - assert req.source_dir is None - if req.link.is_existing_dir(): - # build local directories in-tree - req.source_dir = req.link.file_path - return - - # We always delete unpacked sdists after pip runs. - req.ensure_has_source_dir( - self.build_dir, - autodelete=True, - parallel_builds=parallel_builds, - ) - req.ensure_pristine_source_checkout() - - def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes: - # By the time this is called, the requirement's link should have - # been checked so we can tell what kind of requirements req is - # and raise some more informative errors than otherwise. - # (For example, we can raise VcsHashUnsupported for a VCS URL - # rather than HashMissing.) - if not self.require_hashes: - return req.hashes(trust_internet=True) - - # We could check these first 2 conditions inside unpack_url - # and save repetition of conditions, but then we would - # report less-useful error messages for unhashable - # requirements, complaining that there's no hash provided. - if req.link.is_vcs: - raise VcsHashUnsupported() - if req.link.is_existing_dir(): - raise DirectoryUrlHashUnsupported() - - # Unpinned packages are asking for trouble when a new version - # is uploaded. This isn't a security check, but it saves users - # a surprising hash mismatch in the future. - # file:/// URLs aren't pinnable, so don't complain about them - # not being pinned. - if not req.is_direct and not req.is_pinned: - raise HashUnpinned() - - # If known-good hashes are missing for this requirement, - # shim it with a facade object that will provoke hash - # computation and then raise a HashMissing exception - # showing the user what the hash should be. - return req.hashes(trust_internet=False) or MissingHashes() - - def _fetch_metadata_only( - self, - req: InstallRequirement, - ) -> BaseDistribution | None: - if self.legacy_resolver: - logger.debug( - "Metadata-only fetching is not used in the legacy resolver", - ) - return None - if self.require_hashes: - logger.debug( - "Metadata-only fetching is not used as hash checking is required", - ) - return None - # Try PEP 658 metadata first, then fall back to lazy wheel if unavailable. - return self._fetch_metadata_using_link_data_attr( - req - ) or self._fetch_metadata_using_lazy_wheel(req.link) - - def _fetch_metadata_using_link_data_attr( - self, - req: InstallRequirement, - ) -> BaseDistribution | None: - """Fetch metadata from the data-dist-info-metadata attribute, if possible.""" - # (1) Get the link to the metadata file, if provided by the backend. - metadata_link = req.link.metadata_link() - if metadata_link is None: - return None - assert req.req is not None - logger.verbose( - "Obtaining dependency information for %s from %s", - req.req, - metadata_link, - ) - # (2) Download the contents of the METADATA file, separate from the dist itself. - metadata_file = get_http_url( - metadata_link, - self._download, - hashes=metadata_link.as_hashes(), - ) - with open(metadata_file.path, "rb") as f: - metadata_contents = f.read() - # (3) Generate a dist just from those file contents. - metadata_dist = get_metadata_distribution( - metadata_contents, - req.link.filename, - req.req.name, - ) - # (4) Ensure the Name: field from the METADATA file matches the name from the - # install requirement. - # - # NB: raw_name will fall back to the name from the install requirement if - # the Name: field is not present, but it's noted in the raw_name docstring - # that that should NEVER happen anyway. - if canonicalize_name(metadata_dist.raw_name) != canonicalize_name(req.req.name): - raise MetadataInconsistent( - req, "Name", req.req.name, metadata_dist.raw_name - ) - return metadata_dist - - def _fetch_metadata_using_lazy_wheel( - self, - link: Link, - ) -> BaseDistribution | None: - """Fetch metadata using lazy wheel, if possible.""" - # --use-feature=fast-deps must be provided. - if not self.use_lazy_wheel: - return None - if link.is_file or not link.is_wheel: - logger.debug( - "Lazy wheel is not used as %r does not point to a remote wheel", - link, - ) - return None - - wheel = Wheel(link.filename) - name = wheel.name - logger.info( - "Obtaining dependency information from %s %s", - name, - wheel.version, - ) - url = link.url.split("#", 1)[0] - try: - return dist_from_wheel_url(name, url, self._session) - except HTTPRangeRequestUnsupported: - logger.debug("%s does not support range requests", url) - return None - - def _complete_partial_requirements( - self, - partially_downloaded_reqs: Iterable[InstallRequirement], - parallel_builds: bool = False, - ) -> None: - """Download any requirements which were only fetched by metadata.""" - # Download to a temporary directory. These will be copied over as - # needed for downstream 'download', 'wheel', and 'install' commands. - temp_dir = TempDirectory(kind="unpack", globally_managed=True).path - - # Map each link to the requirement that owns it. This allows us to set - # `req.local_file_path` on the appropriate requirement after passing - # all the links at once into BatchDownloader. - links_to_fully_download: dict[Link, InstallRequirement] = {} - for req in partially_downloaded_reqs: - assert req.link - links_to_fully_download[req.link] = req - - batch_download = self._download.batch(links_to_fully_download.keys(), temp_dir) - for link, (filepath, _) in batch_download: - logger.debug("Downloading link %s to %s", link, filepath) - req = links_to_fully_download[link] - # Record the downloaded file path so wheel reqs can extract a Distribution - # in .get_dist(). - req.local_file_path = filepath - # Record that the file is downloaded so we don't do it again in - # _prepare_linked_requirement(). - self._downloaded[req.link.url] = filepath - - # If this is an sdist, we need to unpack it after downloading, but the - # .source_dir won't be set up until we are in _prepare_linked_requirement(). - # Add the downloaded archive to the install requirement to unpack after - # preparing the source dir. - if not req.is_wheel: - req.needs_unpacked_archive(Path(filepath)) - - # This step is necessary to ensure all lazy wheels are processed - # successfully by the 'download', 'wheel', and 'install' commands. - for req in partially_downloaded_reqs: - self._prepare_linked_requirement(req, parallel_builds) - - def prepare_linked_requirement( - self, req: InstallRequirement, parallel_builds: bool = False - ) -> BaseDistribution: - """Prepare a requirement to be obtained from req.link.""" - assert req.link - self._log_preparing_link(req) - with indent_log(): - # Check if the relevant file is already available - # in the download directory - file_path = None - if self.download_dir is not None and req.link.is_wheel: - hashes = self._get_linked_req_hashes(req) - file_path = _check_download_dir( - req.link, - self.download_dir, - hashes, - # When a locally built wheel has been found in cache, we don't warn - # about re-downloading when the already downloaded wheel hash does - # not match. This is because the hash must be checked against the - # original link, not the cached link. It that case the already - # downloaded file will be removed and re-fetched from cache (which - # implies a hash check against the cache entry's origin.json). - warn_on_hash_mismatch=not req.is_wheel_from_cache, - ) - - if file_path is not None: - # The file is already available, so mark it as downloaded - self._downloaded[req.link.url] = file_path - else: - # The file is not available, attempt to fetch only metadata - metadata_dist = self._fetch_metadata_only(req) - if metadata_dist is not None: - req.needs_more_preparation = True - req.set_dist(metadata_dist) - # Ensure download_info is available even in dry-run mode - if req.download_info is None: - req.download_info = direct_url_from_link( - req.link, req.source_dir - ) - return metadata_dist - - # None of the optimizations worked, fully prepare the requirement - return self._prepare_linked_requirement(req, parallel_builds) - - def prepare_linked_requirements_more( - self, reqs: Iterable[InstallRequirement], parallel_builds: bool = False - ) -> None: - """Prepare linked requirements more, if needed.""" - reqs = [req for req in reqs if req.needs_more_preparation] - for req in reqs: - # Determine if any of these requirements were already downloaded. - if self.download_dir is not None and req.link.is_wheel: - hashes = self._get_linked_req_hashes(req) - file_path = _check_download_dir(req.link, self.download_dir, hashes) - if file_path is not None: - self._downloaded[req.link.url] = file_path - req.needs_more_preparation = False - - # Prepare requirements we found were already downloaded for some - # reason. The other downloads will be completed separately. - partially_downloaded_reqs: list[InstallRequirement] = [] - for req in reqs: - if req.needs_more_preparation: - partially_downloaded_reqs.append(req) - else: - self._prepare_linked_requirement(req, parallel_builds) - - # TODO: separate this part out from RequirementPreparer when the v1 - # resolver can be removed! - self._complete_partial_requirements( - partially_downloaded_reqs, - parallel_builds=parallel_builds, - ) - - def _prepare_linked_requirement( - self, req: InstallRequirement, parallel_builds: bool - ) -> BaseDistribution: - assert req.link - link = req.link - - hashes = self._get_linked_req_hashes(req) - - if hashes and req.is_wheel_from_cache: - assert req.download_info is not None - assert link.is_wheel - assert link.is_file - # We need to verify hashes, and we have found the requirement in the cache - # of locally built wheels. - if ( - isinstance(req.download_info.info, ArchiveInfo) - and req.download_info.info.hashes - and hashes.has_one_of(req.download_info.info.hashes) - ): - # At this point we know the requirement was built from a hashable source - # artifact, and we verified that the cache entry's hash of the original - # artifact matches one of the hashes we expect. We don't verify hashes - # against the cached wheel, because the wheel is not the original. - hashes = None - else: - logger.warning( - "The hashes of the source archive found in cache entry " - "don't match, ignoring cached built wheel " - "and re-downloading source." - ) - req.link = req.cached_wheel_source_link - link = req.link - - self._ensure_link_req_src_dir(req, parallel_builds) - - if link.is_existing_dir(): - local_file = None - elif link.url not in self._downloaded: - try: - local_file = unpack_url( - link, - req.source_dir, - self._download, - self.verbosity, - self.download_dir, - hashes, - ) - except NetworkConnectionError as exc: - raise InstallationError( - f"Could not install requirement {req} because of HTTP " - f"error {exc} for URL {link}" - ) - else: - file_path = self._downloaded[link.url] - if hashes: - hashes.check_against_path(file_path) - local_file = File(file_path, content_type=None) - - # If download_info is set, we got it from the wheel cache. - if req.download_info is None: - # Editables don't go through this function (see - # prepare_editable_requirement). - assert not req.editable - req.download_info = direct_url_from_link(link, req.source_dir) - # Make sure we have a hash in download_info. If we got it as part of the - # URL, it will have been verified and we can rely on it. Otherwise we - # compute it from the downloaded file. - # FIXME: https://github.com/pypa/pip/issues/11943 - if ( - isinstance(req.download_info.info, ArchiveInfo) - and not req.download_info.info.hashes - and local_file - ): - hash = hash_file(local_file.path)[0].hexdigest() - # We populate info.hash for backward compatibility. - # This will automatically populate info.hashes. - req.download_info.info.hash = f"sha256={hash}" - - # For use in later processing, - # preserve the file path on the requirement. - if local_file: - req.local_file_path = local_file.path - - dist = _get_prepared_distribution( - req, - self.build_tracker, - self.build_env_installer, - self.build_isolation, - self.check_build_deps, - ) - return dist - - def save_linked_requirement(self, req: InstallRequirement) -> None: - assert self.download_dir is not None - assert req.link is not None - link = req.link - if link.is_vcs or (link.is_existing_dir() and req.editable): - # Make a .zip of the source_dir we already created. - req.archive(self.download_dir) - return - - if link.is_existing_dir(): - logger.debug( - "Not copying link to destination directory " - "since it is a directory: %s", - link, - ) - return - if req.local_file_path is None: - # No distribution was downloaded for this requirement. - return - - download_location = os.path.join(self.download_dir, link.filename) - if not os.path.exists(download_location): - shutil.copy(req.local_file_path, download_location) - download_path = display_path(download_location) - logger.info("Saved %s", download_path) - - def prepare_editable_requirement( - self, - req: InstallRequirement, - ) -> BaseDistribution: - """Prepare an editable requirement.""" - assert req.editable, "cannot prepare a non-editable req as editable" - - logger.info("Obtaining %s", req) - - with indent_log(): - if self.require_hashes: - raise InstallationError( - f"The editable requirement {req} cannot be installed when " - "requiring hashes, because there is no single file to " - "hash." - ) - req.ensure_has_source_dir(self.src_dir) - req.update_editable() - assert req.source_dir - req.download_info = direct_url_for_editable(req.unpacked_source_directory) - - dist = _get_prepared_distribution( - req, - self.build_tracker, - self.build_env_installer, - self.build_isolation, - self.check_build_deps, - ) - - req.check_if_exists(self.use_user_site) - - return dist - - def prepare_installed_requirement( - self, - req: InstallRequirement, - skip_reason: str, - ) -> BaseDistribution: - """Prepare an already-installed requirement.""" - assert req.satisfied_by, "req should have been satisfied but isn't" - assert skip_reason is not None, ( - "did not get skip reason skipped but req.satisfied_by " - f"is set to {req.satisfied_by}" - ) - logger.info( - "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version - ) - with indent_log(): - if self.require_hashes: - logger.debug( - "Since it is already installed, we are trusting this " - "package without checking its hash. To ensure a " - "completely repeatable environment, install into an " - "empty virtualenv." - ) - return InstalledDistribution(req).get_metadata_distribution() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/pyproject.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/pyproject.py deleted file mode 100644 index 8c2f7221c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/pyproject.py +++ /dev/null @@ -1,123 +0,0 @@ -from __future__ import annotations - -import os -from collections import namedtuple -from typing import Any - -from pip._vendor.packaging.requirements import InvalidRequirement - -from pip._internal.exceptions import ( - InstallationError, - InvalidPyProjectBuildRequires, - MissingPyProjectBuildRequires, -) -from pip._internal.utils.compat import tomllib -from pip._internal.utils.packaging import get_requirement - - -def _is_list_of_str(obj: Any) -> bool: - return isinstance(obj, list) and all(isinstance(item, str) for item in obj) - - -def make_pyproject_path(unpacked_source_directory: str) -> str: - return os.path.join(unpacked_source_directory, "pyproject.toml") - - -BuildSystemDetails = namedtuple( - "BuildSystemDetails", ["requires", "backend", "check", "backend_path"] -) - - -def load_pyproject_toml( - pyproject_toml: str, setup_py: str, req_name: str -) -> BuildSystemDetails: - """Load the pyproject.toml file. - - Parameters: - pyproject_toml - Location of the project's pyproject.toml file - setup_py - Location of the project's setup.py file - req_name - The name of the requirement we're processing (for - error reporting) - - Returns: - None if we should use the legacy code path, otherwise a tuple - ( - requirements from pyproject.toml, - name of PEP 517 backend, - requirements we should check are installed after setting - up the build environment - directory paths to import the backend from (backend-path), - relative to the project root. - ) - """ - has_pyproject = os.path.isfile(pyproject_toml) - has_setup = os.path.isfile(setup_py) - - if not has_pyproject and not has_setup: - raise InstallationError( - f"{req_name} does not appear to be a Python project: " - f"neither 'setup.py' nor 'pyproject.toml' found." - ) - - if has_pyproject: - with open(pyproject_toml, encoding="utf-8") as f: - pp_toml = tomllib.loads(f.read()) - build_system = pp_toml.get("build-system") - else: - build_system = None - - if build_system is None: - # In the absence of any explicit backend specification, we - # assume the setuptools backend that most closely emulates the - # traditional direct setup.py execution, and require wheel and - # a version of setuptools that supports that backend. - - build_system = { - "requires": ["setuptools>=40.8.0"], - "build-backend": "setuptools.build_meta:__legacy__", - } - - # Ensure that the build-system section in pyproject.toml conforms - # to PEP 518. - - # Specifying the build-system table but not the requires key is invalid - if "requires" not in build_system: - raise MissingPyProjectBuildRequires(package=req_name) - - # Error out if requires is not a list of strings - requires = build_system["requires"] - if not _is_list_of_str(requires): - raise InvalidPyProjectBuildRequires( - package=req_name, - reason="It is not a list of strings.", - ) - - # Each requirement must be valid as per PEP 508 - for requirement in requires: - try: - get_requirement(requirement) - except InvalidRequirement as error: - raise InvalidPyProjectBuildRequires( - package=req_name, - reason=f"It contains an invalid requirement: {requirement!r}", - ) from error - - backend = build_system.get("build-backend") - backend_path = build_system.get("backend-path", []) - check: list[str] = [] - if backend is None: - # If the user didn't specify a backend, we assume they want to use - # the setuptools backend. But we can't be sure they have included - # a version of setuptools which supplies the backend. So we - # make a note to check that this requirement is present once - # we have set up the environment. - # This is quite a lot of work to check for a very specific case. But - # the problem is, that case is potentially quite common - projects that - # adopted PEP 518 early for the ability to specify requirements to - # execute setup.py, but never considered needing to mention the build - # tools themselves. The original PEP 518 code had a similar check (but - # implemented in a different way). - backend = "setuptools.build_meta:__legacy__" - check = ["setuptools>=40.8.0"] - - return BuildSystemDetails(requires, backend, check, backend_path) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__init__.py deleted file mode 100644 index 5fc8752d8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__init__.py +++ /dev/null @@ -1,103 +0,0 @@ -from __future__ import annotations - -import collections -import logging -from collections.abc import Generator -from dataclasses import dataclass - -from pip._internal.cli.progress_bars import BarType, get_install_progress_renderer -from pip._internal.utils.logging import indent_log - -from .req_file import parse_requirements -from .req_install import InstallRequirement -from .req_set import RequirementSet - -__all__ = [ - "RequirementSet", - "InstallRequirement", - "parse_requirements", - "install_given_reqs", -] - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class InstallationResult: - name: str - - -def _validate_requirements( - requirements: list[InstallRequirement], -) -> Generator[tuple[str, InstallRequirement], None, None]: - for req in requirements: - assert req.name, f"invalid to-be-installed requirement: {req}" - yield req.name, req - - -def install_given_reqs( - requirements: list[InstallRequirement], - root: str | None, - home: str | None, - prefix: str | None, - warn_script_location: bool, - use_user_site: bool, - pycompile: bool, - progress_bar: BarType, -) -> list[InstallationResult]: - """ - Install everything in the given list. - - (to be called after having downloaded and unpacked the packages) - """ - to_install = collections.OrderedDict(_validate_requirements(requirements)) - - if to_install: - logger.info( - "Installing collected packages: %s", - ", ".join(to_install.keys()), - ) - - installed = [] - - show_progress = logger.isEnabledFor(logging.INFO) and len(to_install) > 1 - - items = iter(to_install.values()) - if show_progress: - renderer = get_install_progress_renderer( - bar_type=progress_bar, total=len(to_install) - ) - items = renderer(items) - - with indent_log(): - for requirement in items: - req_name = requirement.name - assert req_name is not None - if requirement.should_reinstall: - logger.info("Attempting uninstall: %s", req_name) - with indent_log(): - uninstalled_pathset = requirement.uninstall(auto_confirm=True) - else: - uninstalled_pathset = None - - try: - requirement.install( - root=root, - home=home, - prefix=prefix, - warn_script_location=warn_script_location, - use_user_site=use_user_site, - pycompile=pycompile, - ) - except Exception: - # if install did not succeed, rollback previous uninstall - if uninstalled_pathset and not requirement.install_succeeded: - uninstalled_pathset.rollback() - raise - else: - if uninstalled_pathset and requirement.install_succeeded: - uninstalled_pathset.commit() - - installed.append(InstallationResult(req_name)) - - return installed diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 41cd08395b22b789a0e7123c94eb293d8f747e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4519 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-314.pyc deleted file mode 100644 index 20d3e1044b9d80555f5c796692ee8c75ab7ccecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25371 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/pep723.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/pep723.cpython-314.pyc deleted file mode 100644 index 7c0b732634904c0a926a368f94aa3e48ddfa2944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3243 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 I+1tD2Kcy<g2LJ#7 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_dependency_group.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_dependency_group.cpython-314.pyc deleted file mode 100644 index 25934d975e567a1670e07697e2124303ec766cee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4959 zcmb7ITWlN06`g%i6iJcP%d%z3T1&1}S~6u@s$Y`jDspTRaU7RXXcS>WugJBu3B}#c zE@g=Y3L<^LMf*`SefYyc1=Il&z-b*MKvgsaVk7<Q2OZh4vsKUnb%5rNh8(1A`q6u5 z`BJRJ?MOR&clOTRnYnY$y~9C&lZQZg|IL4BM?m^JK2!={7S<O)D3Iq#jEj;8XK@kU z;(PF!j|vgd5}7PSrHIRNF<Fc@MBJ8}$x^g2;;}qEB<AWMv4#$k30mHm8{|eN`(hrD zy-aS3`9N-BvOnhUBcZ^@IEWB$yQ7v$m6?oMmMooyI9r&^F2SwixN4}`w3<yVouqos zh^eNYSx`}<Ihr*sC6iGsP0v0~DeKl?>GPS4Hk0DOI9^yJxCFS?zXMf)#L4sgq3;or zhPE#94Q`H$aS3?iltg85NJ6Z(RizPrsI$^aNWC26>ugl@>otaXn6~gS+P7V^I2+S; zQPs-PY)G)hjAmN4WaSK43Bj~*imvlIomVUqC(>)bJar`TjHyyHp`=y1@9^Qhi3>V? zF=0^s1vO=viBv|<rDqgV-J@kS3o5ogD&4a$ac0Sy)3YP{Mw6q-#X|>@)9SndE2k!{ zc_VR3n@O0OrS375)QifjY9<WL7*1+ga7<Ro3{&-6cqP+SUnJS^!^V>BOD2_UR=3br zlD5D=aod@LP!-6hq=7qhAFC_JueM(`-=2DH@r|C_yAGGI?Va>{BY)J`>vd2k%x5TI zalr-t5!X+HP#}qlFJY^8fCqzQ6t$p?mfsj$0)5O%0zJ;k+2Cl|pA|ju0iXYY=Zr#4 zRj$oQb{rz76-$v7Q-(!d(9&vJUeFZTnp5SeQ_&$=%gTy;?pZ^z=8inadYqHZrL3ha zhCQB`qM52GKeR1PSvxN)S@3|Cot0;G(78bM>}=SxVa7Q65xCZOL)A-qVAj**L?a;= zU<R}$&MlIH)I*-|64FR^kQnJBUlTO$b?)@*u&r!9yw?_SU^bUD(N@1K(`LBajpMUw zR$VmcguUCqX+PvhGd!NrQ%c612v>E3(A7kLehdRC$`fxcydHXO^wqYv7XD?5(EL(! zD+iwqCTDV5CY_{ZV4AcEzu8)8NCHBg-C~A#3S)=yRCP`CO@Dcq9bYguDuWW+R9^w1 zKpyx=^Uj+%pjCNdH8@d-u6YBuf_=-;)!>0u@4=#YkhX&61`23^23(Z&tIWp#PXQZ& z4`9a)%1XjrmC9R<kQ#|>>{m|*F(HAoVx^{EuQ4pZW)&%F(H^XD`KS-7kjoa+TFRmU zY{8+hWv70W&^sZHG6yo|VB3IUlT~f--uyaL2+#o6ejlr~K<m$@Zf)CJY}<P~u&*Rw z)7Y{1r1w&P9(i}}Pl4NGXISGssp-e5?>~260tIK8tCI$cIMhBw?cYFf_HdjFk`v+b zF77+Kfj<p#yMt%(OcmeIv0UOp1+z7@w?b%o0UWu=75Gz<2T=0F-ZCD5T^q<Lk6gF- zbqrp0*NEUE>Fvn;hLiwwIVC1c3qBGPr+KKQX~{?SyDDFwmge{vZ%D@^jnl}O&`mTB zkr#61)1FukC?S)P*`Cf}C>oMedKN;Ig=h!Z%PPhu`8?I<<#S&U&dvd|Sh`2aKFl7U zV+nLFV~Il`R9OOi4g6PK!#GzNdzmu;$Mu{+w?JpuBDi}1m0RIv3&8O8c%-mK#O~h& z$D5GF4$w8x3?qw<$jzaX%THexE=~Q)eaXE#bh1ntTRXYa`N3yvth>iy-RJ6-Pd=|` z8Q@(AeeyuwJ>V?dKwcO)B8Mcqp-djOC$402DvSGe<MfhI7QLr*{l%QY+9{$w<f_BY zHk?x<`)F2~hm4~_MK-6JxJCMbHOst7aZ;>efcY*w;q2D^q^tLbfs5kZ)~=r)yXY?Q zuEzEcIwG${?hK9J92#Hw=B=TVs~wR$zR3H&$a({4-*=IwDEH5`VCUuNm2VdVBM*q! z*uK`%cemx}inj7>iEvSF+ud#5mt2=p%R84_O9I#2zb*)^{*sHdwU-)%ruNTD0(AP1 zxevziQgAZNy}W&l{|$H8^;>a_f6E08zvssIKWv#Cl&&|oPxedK`z4eI1$ecA3vr%| z3+F)i-_xObW&-}hjmS!kyK0=ck@cL!hw+##VTdvv5)&y7!{M-AlrU_68FTf+dlM^U zt~O*Ys4hpYJpIa(B^0lw-yV5KxOV7`EPGQ61JH$)>eTPSV}T3<YA}~LF$?(N&+a@7 ztxi^mQML|Gd<9R25F>HnFd!`rnCl|7oFm4?kvsVPRo0s0;-Fo>Y=&6NOyXi~xhgrz zfHO)m`+3^}vn|%!u5njftc>n#3ogzRnuGQ@2jN4?H$Mco{Lp3)v@i#kFF@`yubC#2 z7o)6!eBVG=o?=O!1Jean9@yg`cR<z+<h=0asID`qWH6TnTtf<#?|rmEfO;UA(Uo-4 zSSlyD49>PkgRwzkn@y>dZ5s4xNTS1VbCB+UyxPrfr^<zgQyvpHTOHcFu|HP0gyt(y z70BISOCkD~U^{>vQVeg`2fns@ZGFqfSKC4t8}E8|ENi#C!wkn0E7r<+!13eU2-M9Z z4tR;s<S)6&&fUe`M{mm$MR)gFU|X?s`0chkfdlUc4wNY%y%L8`#~<qYz(cn0FYZ6N z+8Mdn_@lu6KGM9Uw2S!Ki(*@CZ&z5qy0>F&>|dVZ0D!A;d$V)P7Xp~#>N@Zh{tx6H z#YM%HMdbQnneMata$kwvuk5;FUY%NAd^PN}*JcM@SScrP;(8k9TOix((Fr+31wmt6 zlFRWqAz3{iKwPZO^o&?BSG(^dwP=|WauDh9ZxopcN)MznG8rUQWP+_OqQN1#8{Xkx z4Dt>qCxFZYeZUIj7!1Qbq=wUJ0{kHCuX4#;{m81RV8sF+fzl9CAy46JHXuVmD-z}@ z`>VL0=2?cqALBJHf%zdToA!4-s(&TJ2{q(Z&-9#T%5!SQP^pYyG-XAu0xOJXZ9FSY zKlS7(IR8W~nL0<H&GHyL1mQVK2V3mO&H}v|_Sig~Ih`Mp;SdQyKbK8EnjG?e7T;w& zF(6Up`6F_rjjBo-+d>Vt2;a(5OwZwT4WqZ4Pe5vMTDMN%XKE>e9l#kJS5tbroJBM| z^)!1O64-vX`SS+d19mnXtSE+JR<YgvYj`S<lFuzY&aE{y|76!C@lI3st)}kfmbKQ- zUylEDe3@Tu?fX<9{vGfF{#Tp2KfCAcdO$eoEVt(GSsq>PFMf5pC_l66j~CtXHE+uu zZ|_ZSFKU2M&<I~^yXLw!v(mgG6y@<%|Iv5%72U@_1I<V3KvDrl{%uBKoG-OaddV-g z9F(qlK=_?^(%pES7eT!47O?gXJ~k{|KgeNysO2$_aKqyR`9=q}+}PUk*lyv*ZVBYm zp@1Do>6r}t00D8p3@bA!C#oaVY?rlUfHPQNx4Yq2g>Z5Ke$LTpxE7Skr$cs%v9~gv z$}bOLbup!~0Ao7j-?{NM<l7lDoYLnZsbGF)XGJG*Ln?PX)PWM72q`-byT|ACbS|S# z&?#s`_B2CK!SZn2UrG2wvgIQ(`4KtrAqjutf}bfqX@jHAC%YiM_%w{n#Z3Jd=gl;K diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-314.pyc deleted file mode 100644 index ac601913586c14ec28cedf33f4cb8b188526e374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28177 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-314.pyc deleted file mode 100644 index e61d189e9845fa8b4cac918d1c438549417417e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41459 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 BEc*Ze diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-314.pyc deleted file mode 100644 index 2879526a882d938e87eeb71584d7d94e5386c23a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7055 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 FzX7Dle&YZD diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-314.pyc deleted file mode 100644 index 126a05b3835b66fa83f9d3204930e5007e9a39fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37561 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 OtSvh43Wtc*{r?ADXn3yx diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/constructors.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/constructors.py deleted file mode 100644 index 7fef6b7e0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/constructors.py +++ /dev/null @@ -1,568 +0,0 @@ -"""Backing implementation for InstallRequirement's various constructors - -The idea here is that these formed a major chunk of InstallRequirement's size -so, moving them and support code dedicated to them outside of that class -helps creates for better understandability for the rest of the code. - -These are meant to be used elsewhere within pip to create instances of -InstallRequirement. -""" - -from __future__ import annotations - -import copy -import logging -import os -import re -from collections.abc import Collection -from dataclasses import dataclass - -from pip._vendor.packaging.markers import Marker -from pip._vendor.packaging.requirements import InvalidRequirement, Requirement -from pip._vendor.packaging.specifiers import Specifier - -from pip._internal.exceptions import InstallationError -from pip._internal.models.index import PyPI, TestPyPI -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.req.req_file import ParsedRequirement -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.filetypes import is_archive_file -from pip._internal.utils.misc import is_installable_dir -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import is_url, vcs - -__all__ = [ - "install_req_from_editable", - "install_req_from_line", - "parse_editable", -] - -logger = logging.getLogger(__name__) -operators = Specifier._operators.keys() - - -def _strip_extras(path: str) -> tuple[str, str | None]: - m = re.match(r"^(.+)(\[[^\]]+\])$", path) - extras = None - if m: - path_no_extras = m.group(1).rstrip() - extras = m.group(2) - else: - path_no_extras = path - - return path_no_extras, extras - - -def convert_extras(extras: str | None) -> set[str]: - if not extras: - return set() - return get_requirement("placeholder" + extras.lower()).extras - - -def _set_requirement_extras(req: Requirement, new_extras: set[str]) -> Requirement: - """ - Returns a new requirement based on the given one, with the supplied extras. If the - given requirement already has extras those are replaced (or dropped if no new extras - are given). - """ - match: re.Match[str] | None = re.fullmatch( - # see https://peps.python.org/pep-0508/#complete-grammar - r"([\w\t .-]+)(\[[^\]]*\])?(.*)", - str(req), - flags=re.ASCII, - ) - # ireq.req is a valid requirement so the regex should always match - assert ( - match is not None - ), f"regex match on requirement {req} failed, this should never happen" - pre: str | None = match.group(1) - post: str | None = match.group(3) - assert ( - pre is not None and post is not None - ), f"regex group selection for requirement {req} failed, this should never happen" - extras: str = "[{}]".format(",".join(sorted(new_extras)) if new_extras else "") - return get_requirement(f"{pre}{extras}{post}") - - -def _parse_direct_url_editable(editable_req: str) -> tuple[str | None, str, set[str]]: - try: - req = Requirement(editable_req) - except InvalidRequirement: - pass - else: - if req.url: - # Join the marker back into the name part. This will be parsed out - # later into a Requirement again. - if req.marker: - name = f"{req.name} ; {req.marker}" - else: - name = req.name - return (name, req.url, req.extras) - - raise ValueError - - -def _parse_pip_syntax_editable(editable_req: str) -> tuple[str | None, str, set[str]]: - url = editable_req - - # If a file path is specified with extras, strip off the extras. - url_no_extras, extras = _strip_extras(url) - - if os.path.isdir(url_no_extras): - # Treating it as code that has already been checked out - url_no_extras = path_to_url(url_no_extras) - - if url_no_extras.lower().startswith("file:"): - package_name = Link(url_no_extras).egg_fragment - if extras: - return ( - package_name, - url_no_extras, - get_requirement("placeholder" + extras.lower()).extras, - ) - else: - return package_name, url_no_extras, set() - - for version_control in vcs: - if url.lower().startswith(f"{version_control}:"): - url = f"{version_control}+{url}" - break - - return Link(url).egg_fragment, url, set() - - -def parse_editable(editable_req: str) -> tuple[str | None, str, set[str]]: - """Parses an editable requirement into: - - a requirement name with environment markers - - an URL - - extras - Accepted requirements: - - svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir - - local_path[some_extra] - - Foobar[extra] @ svn+http://blahblah@rev#subdirectory=subdir ; markers - """ - try: - package_name, url, extras = _parse_direct_url_editable(editable_req) - except ValueError: - package_name, url, extras = _parse_pip_syntax_editable(editable_req) - - link = Link(url) - - if not link.is_vcs and not link.url.startswith("file:"): - backends = ", ".join(vcs.all_schemes) - raise InstallationError( - f"{editable_req} is not a valid editable requirement. " - f"It should either be a path to a local project or a VCS URL " - f"(beginning with {backends})." - ) - - # The project name can be inferred from local file URIs easily. - if not package_name and not link.url.startswith("file:"): - raise InstallationError( - f"Could not detect requirement name for '{editable_req}', " - "please specify one with your_package_name @ URL" - ) - return package_name, url, extras - - -def check_first_requirement_in_file(filename: str) -> None: - """Check if file is parsable as a requirements file. - - This is heavily based on ``pkg_resources.parse_requirements``, but - simplified to just check the first meaningful line. - - :raises InvalidRequirement: If the first meaningful line cannot be parsed - as an requirement. - """ - with open(filename, encoding="utf-8", errors="ignore") as f: - # Create a steppable iterator, so we can handle \-continuations. - lines = ( - line - for line in (line.strip() for line in f) - if line and not line.startswith("#") # Skip blank lines/comments. - ) - - for line in lines: - # Drop comments -- a hash without a space may be in a URL. - if " #" in line: - line = line[: line.find(" #")] - # If there is a line continuation, drop it, and append the next line. - if line.endswith("\\"): - line = line[:-2].strip() + next(lines, "") - get_requirement(line) - return - - -def deduce_helpful_msg(req: str) -> str: - """Returns helpful msg in case requirements file does not exist, - or cannot be parsed. - - :params req: Requirements file path - """ - if not os.path.exists(req): - return f" File '{req}' does not exist." - msg = " The path does exist. " - # Try to parse and check if it is a requirements file. - try: - check_first_requirement_in_file(req) - except InvalidRequirement: - logger.debug("Cannot parse '%s' as requirements file", req) - else: - msg += ( - f"The argument you provided " - f"({req}) appears to be a" - f" requirements file. If that is the" - f" case, use the '-r' flag to install" - f" the packages specified within it." - ) - return msg - - -@dataclass(frozen=True) -class RequirementParts: - requirement: Requirement | None - link: Link | None - markers: Marker | None - extras: set[str] - - -def parse_req_from_editable(editable_req: str) -> RequirementParts: - name, url, extras_override = parse_editable(editable_req) - - if name is not None: - try: - req: Requirement | None = get_requirement(name) - except InvalidRequirement as exc: - raise InstallationError(f"Invalid requirement: {name!r}: {exc}") - else: - req = None - - link = Link(url) - - return RequirementParts(req, link, None, extras_override) - - -# ---- The actual constructors follow ---- - - -def install_req_from_editable( - editable_req: str, - comes_from: InstallRequirement | str | None = None, - *, - isolated: bool = False, - hash_options: dict[str, list[str]] | None = None, - constraint: bool = False, - user_supplied: bool = False, - permit_editable_wheels: bool = False, - config_settings: dict[str, str | list[str]] | None = None, -) -> InstallRequirement: - if constraint: - raise InstallationError("Editable requirements are not allowed as constraints") - - parts = parse_req_from_editable(editable_req) - return InstallRequirement( - parts.requirement, - comes_from=comes_from, - user_supplied=user_supplied, - editable=True, - permit_editable_wheels=permit_editable_wheels, - link=parts.link, - constraint=constraint, - isolated=isolated, - hash_options=hash_options, - config_settings=config_settings, - extras=parts.extras, - ) - - -def _looks_like_path(name: str) -> bool: - """Checks whether the string "looks like" a path on the filesystem. - - This does not check whether the target actually exists, only judge from the - appearance. - - Returns true if any of the following conditions is true: - * a path separator is found (either os.path.sep or os.path.altsep); - * a dot is found (which represents the current directory). - """ - if os.path.sep in name: - return True - if os.path.altsep is not None and os.path.altsep in name: - return True - if name.startswith("."): - return True - return False - - -def _get_url_from_path(path: str, name: str) -> str | None: - """ - First, it checks whether a provided path is an installable directory. If it - is, returns the path. - - If false, check if the path is an archive file (such as a .whl). - The function checks if the path is a file. If false, if the path has - an @, it will treat it as a PEP 440 URL requirement and return the path. - """ - if _looks_like_path(name) and os.path.isdir(path): - if is_installable_dir(path): - return path_to_url(path) - # TODO: The is_installable_dir test here might not be necessary - # now that it is done in load_pyproject_toml too. - raise InstallationError( - f"Directory {name!r} is not installable. Neither 'setup.py' " - "nor 'pyproject.toml' found." - ) - if not is_archive_file(path): - return None - if os.path.isfile(path): - return path_to_url(path) - urlreq_parts = name.split("@", 1) - if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]): - # If the path contains '@' and the part before it does not look - # like a path, try to treat it as a PEP 440 URL req instead. - return None - logger.warning( - "Requirement %r looks like a filename, but the file does not exist", - name, - ) - return path_to_url(path) - - -def parse_req_from_line(name: str, line_source: str | None) -> RequirementParts: - if is_url(name): - marker_sep = "; " - else: - marker_sep = ";" - if marker_sep in name: - name, markers_as_string = name.split(marker_sep, 1) - markers_as_string = markers_as_string.strip() - if not markers_as_string: - markers = None - else: - markers = Marker(markers_as_string) - else: - markers = None - name = name.strip() - req_as_string = None - path = os.path.normpath(os.path.abspath(name)) - link = None - extras_as_string = None - - if is_url(name): - link = Link(name) - else: - p, extras_as_string = _strip_extras(path) - url = _get_url_from_path(p, name) - if url is not None: - link = Link(url) - - # it's a local file, dir, or url - if link: - # Handle relative file URLs - if link.scheme == "file" and re.search(r"\.\./", link.url): - link = Link(path_to_url(os.path.normpath(os.path.abspath(link.path)))) - # wheel file - if link.is_wheel: - wheel = Wheel(link.filename) # can raise InvalidWheelFilename - req_as_string = f"{wheel.name}=={wheel.version}" - else: - # set the req to the egg fragment. when it's not there, this - # will become an 'unnamed' requirement - req_as_string = link.egg_fragment - - # a requirement specifier - else: - req_as_string = name - - extras = convert_extras(extras_as_string) - - def with_source(text: str) -> str: - if not line_source: - return text - return f"{text} (from {line_source})" - - def _parse_req_string(req_as_string: str) -> Requirement: - try: - return get_requirement(req_as_string) - except InvalidRequirement as exc: - if os.path.sep in req_as_string: - add_msg = "It looks like a path." - add_msg += deduce_helpful_msg(req_as_string) - elif "=" in req_as_string and not any( - op in req_as_string for op in operators - ): - add_msg = "= is not a valid operator. Did you mean == ?" - else: - add_msg = "" - msg = with_source(f"Invalid requirement: {req_as_string!r}: {exc}") - if add_msg: - msg += f"\nHint: {add_msg}" - raise InstallationError(msg) - - if req_as_string is not None: - req: Requirement | None = _parse_req_string(req_as_string) - else: - req = None - - return RequirementParts(req, link, markers, extras) - - -def install_req_from_line( - name: str, - comes_from: str | InstallRequirement | None = None, - *, - isolated: bool = False, - hash_options: dict[str, list[str]] | None = None, - constraint: bool = False, - line_source: str | None = None, - user_supplied: bool = False, - config_settings: dict[str, str | list[str]] | None = None, -) -> InstallRequirement: - """Creates an InstallRequirement from a name, which might be a - requirement, directory containing 'setup.py', filename, or URL. - - :param line_source: An optional string describing where the line is from, - for logging purposes in case of an error. - """ - parts = parse_req_from_line(name, line_source) - - return InstallRequirement( - parts.requirement, - comes_from, - link=parts.link, - markers=parts.markers, - isolated=isolated, - hash_options=hash_options, - config_settings=config_settings, - constraint=constraint, - extras=parts.extras, - user_supplied=user_supplied, - ) - - -def install_req_from_req_string( - req_string: str, - comes_from: InstallRequirement | None = None, - isolated: bool = False, - user_supplied: bool = False, -) -> InstallRequirement: - try: - req = get_requirement(req_string) - except InvalidRequirement as exc: - raise InstallationError(f"Invalid requirement: {req_string!r}: {exc}") - - domains_not_allowed = [ - PyPI.file_storage_domain, - TestPyPI.file_storage_domain, - ] - if ( - req.url - and comes_from - and comes_from.link - and comes_from.link.netloc in domains_not_allowed - ): - # Explicitly disallow pypi packages that depend on external urls - raise InstallationError( - "Packages installed from PyPI cannot depend on packages " - "which are not also hosted on PyPI.\n" - f"{comes_from.name} depends on {req} " - ) - - return InstallRequirement( - req, - comes_from, - isolated=isolated, - user_supplied=user_supplied, - ) - - -def install_req_from_parsed_requirement( - parsed_req: ParsedRequirement, - isolated: bool = False, - user_supplied: bool = False, - config_settings: dict[str, str | list[str]] | None = None, -) -> InstallRequirement: - if parsed_req.is_editable: - req = install_req_from_editable( - parsed_req.requirement, - comes_from=parsed_req.comes_from, - constraint=parsed_req.constraint, - isolated=isolated, - user_supplied=user_supplied, - config_settings=config_settings, - ) - - else: - req = install_req_from_line( - parsed_req.requirement, - comes_from=parsed_req.comes_from, - isolated=isolated, - hash_options=( - parsed_req.options.get("hashes", {}) if parsed_req.options else {} - ), - constraint=parsed_req.constraint, - line_source=parsed_req.line_source, - user_supplied=user_supplied, - config_settings=config_settings, - ) - return req - - -def install_req_from_link_and_ireq( - link: Link, ireq: InstallRequirement -) -> InstallRequirement: - return InstallRequirement( - req=ireq.req, - comes_from=ireq.comes_from, - editable=ireq.editable, - link=link, - markers=ireq.markers, - isolated=ireq.isolated, - hash_options=ireq.hash_options, - config_settings=ireq.config_settings, - user_supplied=ireq.user_supplied, - ) - - -def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement: - """ - Creates a new InstallationRequirement using the given template but without - any extras. Sets the original requirement as the new one's parent - (comes_from). - """ - return InstallRequirement( - req=( - _set_requirement_extras(ireq.req, set()) if ireq.req is not None else None - ), - comes_from=ireq, - editable=ireq.editable, - link=ireq.link, - markers=ireq.markers, - isolated=ireq.isolated, - hash_options=ireq.hash_options, - constraint=ireq.constraint, - extras=[], - config_settings=ireq.config_settings, - user_supplied=ireq.user_supplied, - permit_editable_wheels=ireq.permit_editable_wheels, - ) - - -def install_req_extend_extras( - ireq: InstallRequirement, - extras: Collection[str], -) -> InstallRequirement: - """ - Returns a copy of an installation requirement with some additional extras. - Makes a shallow copy of the ireq object. - """ - result = copy.copy(ireq) - result.extras = {*ireq.extras, *extras} - result.req = ( - _set_requirement_extras(ireq.req, result.extras) - if ireq.req is not None - else None - ) - return result diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/pep723.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/pep723.py deleted file mode 100644 index 805abed78..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/pep723.py +++ /dev/null @@ -1,41 +0,0 @@ -import re -from typing import Any - -from pip._internal.utils.compat import tomllib - -REGEX = r"(?m)^# /// (?P<type>[a-zA-Z0-9-]+)$\s(?P<content>(^#(| .*)$\s)+)^# ///$" - - -class PEP723Exception(ValueError): - """Raised to indicate a problem when parsing PEP 723 metadata from a script""" - - def __init__(self, msg: str) -> None: - self.msg = msg - - -def pep723_metadata(scriptfile: str) -> dict[str, Any]: - with open(scriptfile) as f: - script = f.read() - - name = "script" - matches = list( - filter(lambda m: m.group("type") == name, re.finditer(REGEX, script)) - ) - - if len(matches) > 1: - raise PEP723Exception(f"Multiple {name!r} blocks found in {scriptfile!r}") - elif len(matches) == 1: - content = "".join( - line[2:] if line.startswith("# ") else line[1:] - for line in matches[0].group("content").splitlines(keepends=True) - ) - try: - metadata = tomllib.loads(content) - except Exception as exc: - raise PEP723Exception(f"Failed to parse TOML in {scriptfile!r}") from exc - else: - raise PEP723Exception( - f"File does not contain {name!r} metadata: {scriptfile!r}" - ) - - return metadata diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_dependency_group.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_dependency_group.py deleted file mode 100644 index 396ac1bb6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_dependency_group.py +++ /dev/null @@ -1,75 +0,0 @@ -from collections.abc import Iterable, Iterator -from typing import Any - -from pip._vendor.dependency_groups import DependencyGroupResolver - -from pip._internal.exceptions import InstallationError -from pip._internal.utils.compat import tomllib - - -def parse_dependency_groups(groups: list[tuple[str, str]]) -> list[str]: - """ - Parse dependency groups data as provided via the CLI, in a `[path:]group` syntax. - - Raises InstallationErrors if anything goes wrong. - """ - resolvers = _build_resolvers(path for (path, _) in groups) - return list(_resolve_all_groups(resolvers, groups)) - - -def _resolve_all_groups( - resolvers: dict[str, DependencyGroupResolver], groups: list[tuple[str, str]] -) -> Iterator[str]: - """ - Run all resolution, converting any error from `DependencyGroupResolver` into - an InstallationError. - """ - for path, groupname in groups: - resolver = resolvers[path] - try: - yield from (str(req) for req in resolver.resolve(groupname)) - except (ValueError, TypeError, LookupError) as e: - raise InstallationError( - f"[dependency-groups] resolution failed for '{groupname}' " - f"from '{path}': {e}" - ) from e - - -def _build_resolvers(paths: Iterable[str]) -> dict[str, Any]: - resolvers = {} - for path in paths: - if path in resolvers: - continue - - pyproject = _load_pyproject(path) - if "dependency-groups" not in pyproject: - raise InstallationError( - f"[dependency-groups] table was missing from '{path}'. " - "Cannot resolve '--group' option." - ) - raw_dependency_groups = pyproject["dependency-groups"] - if not isinstance(raw_dependency_groups, dict): - raise InstallationError( - f"[dependency-groups] table was malformed in {path}. " - "Cannot resolve '--group' option." - ) - - resolvers[path] = DependencyGroupResolver(raw_dependency_groups) - return resolvers - - -def _load_pyproject(path: str) -> dict[str, Any]: - """ - This helper loads a pyproject.toml as TOML. - - It raises an InstallationError if the operation fails. - """ - try: - with open(path, "rb") as fp: - return tomllib.load(fp) - except FileNotFoundError: - raise InstallationError(f"{path} not found. Cannot resolve '--group' option.") - except tomllib.TOMLDecodeError as e: - raise InstallationError(f"Error parsing {path}: {e}") from e - except OSError as e: - raise InstallationError(f"Error reading {path}: {e}") from e diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_file.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_file.py deleted file mode 100644 index 9eb58ce66..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_file.py +++ /dev/null @@ -1,631 +0,0 @@ -""" -Requirements file parsing -""" - -from __future__ import annotations - -import codecs -import locale -import logging -import optparse -import os -import re -import shlex -import sys -import urllib.parse -from collections.abc import Generator, Iterable -from dataclasses import dataclass -from optparse import Values -from typing import ( - TYPE_CHECKING, - Any, - Callable, - NoReturn, -) - -from pip._internal.cli import cmdoptions -from pip._internal.exceptions import InstallationError, RequirementsFileParseError -from pip._internal.models.release_control import ReleaseControl -from pip._internal.models.search_scope import SearchScope - -if TYPE_CHECKING: - from pip._internal.index.package_finder import PackageFinder - from pip._internal.network.session import PipSession - -__all__ = ["parse_requirements"] - -ReqFileLines = Iterable[tuple[int, str]] - -LineParser = Callable[[str], tuple[str, Values]] - -SCHEME_RE = re.compile(r"^(http|https|file):", re.I) -COMMENT_RE = re.compile(r"(^|\s+)#.*$") - -# Matches environment variable-style values in '${MY_VARIABLE_1}' with the -# variable name consisting of only uppercase letters, digits or the '_' -# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, -# 2013 Edition. -ENV_VAR_RE = re.compile(r"(?P<var>\$\{(?P<name>[A-Z0-9_]+)\})") - -SUPPORTED_OPTIONS: list[Callable[..., optparse.Option]] = [ - cmdoptions.index_url, - cmdoptions.extra_index_url, - cmdoptions.no_index, - cmdoptions.constraints, - cmdoptions.requirements, - cmdoptions.editable, - cmdoptions.find_links, - cmdoptions.no_binary, - cmdoptions.only_binary, - cmdoptions.prefer_binary, - cmdoptions.require_hashes, - cmdoptions.pre, - cmdoptions.all_releases, - cmdoptions.only_final, - cmdoptions.trusted_host, - cmdoptions.use_new_feature, -] - -# options to be passed to requirements -SUPPORTED_OPTIONS_REQ: list[Callable[..., optparse.Option]] = [ - cmdoptions.hash, - cmdoptions.config_settings, -] - -SUPPORTED_OPTIONS_EDITABLE_REQ: list[Callable[..., optparse.Option]] = [ - cmdoptions.config_settings, -] - - -# the 'dest' string values -SUPPORTED_OPTIONS_REQ_DEST = [str(o().dest) for o in SUPPORTED_OPTIONS_REQ] -SUPPORTED_OPTIONS_EDITABLE_REQ_DEST = [ - str(o().dest) for o in SUPPORTED_OPTIONS_EDITABLE_REQ -] - -# order of BOMS is important: codecs.BOM_UTF16_LE is a prefix of codecs.BOM_UTF32_LE -# so data.startswith(BOM_UTF16_LE) would be true for UTF32_LE data -BOMS: list[tuple[bytes, str]] = [ - (codecs.BOM_UTF8, "utf-8"), - (codecs.BOM_UTF32, "utf-32"), - (codecs.BOM_UTF32_BE, "utf-32-be"), - (codecs.BOM_UTF32_LE, "utf-32-le"), - (codecs.BOM_UTF16, "utf-16"), - (codecs.BOM_UTF16_BE, "utf-16-be"), - (codecs.BOM_UTF16_LE, "utf-16-le"), -] - -PEP263_ENCODING_RE = re.compile(rb"coding[:=]\s*([-\w.]+)") -DEFAULT_ENCODING = "utf-8" - -logger = logging.getLogger(__name__) - - -@dataclass(frozen=True) -class ParsedRequirement: - # TODO: replace this with slots=True when dropping Python 3.9 support. - __slots__ = ( - "requirement", - "is_editable", - "comes_from", - "constraint", - "options", - "line_source", - ) - - requirement: str - is_editable: bool - comes_from: str - constraint: bool - options: dict[str, Any] | None - line_source: str | None - - -@dataclass(frozen=True) -class ParsedLine: - __slots__ = ("filename", "lineno", "args", "opts", "constraint") - - filename: str - lineno: int - args: str - opts: Values - constraint: bool - - @property - def is_editable(self) -> bool: - return bool(self.opts.editables) - - @property - def requirement(self) -> str | None: - if self.args: - return self.args - elif self.is_editable: - # We don't support multiple -e on one line - return self.opts.editables[0] - return None - - -def parse_requirements( - filename: str, - session: PipSession, - finder: PackageFinder | None = None, - options: optparse.Values | None = None, - constraint: bool = False, -) -> Generator[ParsedRequirement, None, None]: - """Parse a requirements file and yield ParsedRequirement instances. - - :param filename: Path or url of requirements file. - :param session: PipSession instance. - :param finder: Instance of pip.index.PackageFinder. - :param options: cli options. - :param constraint: If true, parsing a constraint file rather than - requirements file. - """ - line_parser = get_line_parser(finder) - parser = RequirementsFileParser(session, line_parser) - - for parsed_line in parser.parse(filename, constraint): - parsed_req = handle_line( - parsed_line, options=options, finder=finder, session=session - ) - if parsed_req is not None: - yield parsed_req - - -def preprocess(content: str) -> ReqFileLines: - """Split, filter, and join lines, and return a line iterator - - :param content: the content of the requirements file - """ - lines_enum: ReqFileLines = enumerate(content.splitlines(), start=1) - lines_enum = join_lines(lines_enum) - lines_enum = ignore_comments(lines_enum) - lines_enum = expand_env_variables(lines_enum) - return lines_enum - - -def handle_requirement_line( - line: ParsedLine, - options: optparse.Values | None = None, -) -> ParsedRequirement: - # preserve for the nested code path - line_comes_from = "{} {} (line {})".format( - "-c" if line.constraint else "-r", - line.filename, - line.lineno, - ) - - assert line.requirement is not None - - # get the options that apply to requirements - if line.is_editable: - supported_dest = SUPPORTED_OPTIONS_EDITABLE_REQ_DEST - else: - supported_dest = SUPPORTED_OPTIONS_REQ_DEST - req_options = {} - for dest in supported_dest: - if dest in line.opts.__dict__ and line.opts.__dict__[dest]: - req_options[dest] = line.opts.__dict__[dest] - - line_source = f"line {line.lineno} of {line.filename}" - return ParsedRequirement( - requirement=line.requirement, - is_editable=line.is_editable, - comes_from=line_comes_from, - constraint=line.constraint, - options=req_options, - line_source=line_source, - ) - - -def handle_option_line( - opts: Values, - filename: str, - lineno: int, - finder: PackageFinder | None = None, - options: optparse.Values | None = None, - session: PipSession | None = None, -) -> None: - if opts.hashes: - logger.warning( - "%s line %s has --hash but no requirement, and will be ignored.", - filename, - lineno, - ) - - if options: - # percolate options upward - if opts.require_hashes: - options.require_hashes = opts.require_hashes - if opts.features_enabled: - options.features_enabled.extend( - f for f in opts.features_enabled if f not in options.features_enabled - ) - - # set finder options - if finder: - find_links = finder.find_links - index_urls = finder.index_urls - no_index = finder.search_scope.no_index - if opts.no_index is True: - no_index = True - index_urls = [] - if opts.index_url and not no_index: - index_urls = [opts.index_url] - if opts.extra_index_urls and not no_index: - index_urls.extend(opts.extra_index_urls) - if opts.find_links: - # FIXME: it would be nice to keep track of the source - # of the find_links: support a find-links local path - # relative to a requirements file. - value = opts.find_links[0] - req_dir = os.path.dirname(os.path.abspath(filename)) - relative_to_reqs_file = os.path.join(req_dir, value) - if os.path.exists(relative_to_reqs_file): - value = relative_to_reqs_file - find_links.append(value) - - if session: - # We need to update the auth urls in session - session.update_index_urls(index_urls) - - search_scope = SearchScope( - find_links=find_links, - index_urls=index_urls, - no_index=no_index, - ) - finder.search_scope = search_scope - - # Transform --pre into --all-releases :all: - if opts.pre: - if not opts.release_control: - opts.release_control = ReleaseControl() - opts.release_control.all_releases.add(":all:") - - if opts.release_control: - if not finder.release_control: - # First time seeing release_control, set it on finder - finder.set_release_control(opts.release_control) - - if opts.prefer_binary: - finder.set_prefer_binary() - - if session: - for host in opts.trusted_hosts or []: - source = f"line {lineno} of {filename}" - session.add_trusted_host(host, source=source) - - -def handle_line( - line: ParsedLine, - options: optparse.Values | None = None, - finder: PackageFinder | None = None, - session: PipSession | None = None, -) -> ParsedRequirement | None: - """Handle a single parsed requirements line; This can result in - creating/yielding requirements, or updating the finder. - - :param line: The parsed line to be processed. - :param options: CLI options. - :param finder: The finder - updated by non-requirement lines. - :param session: The session - updated by non-requirement lines. - - Returns a ParsedRequirement object if the line is a requirement line, - otherwise returns None. - - For lines that contain requirements, the only options that have an effect - are from SUPPORTED_OPTIONS_REQ, and they are scoped to the - requirement. Other options from SUPPORTED_OPTIONS may be present, but are - ignored. - - For lines that do not contain requirements, the only options that have an - effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may - be present, but are ignored. These lines may contain multiple options - (although our docs imply only one is supported), and all our parsed and - affect the finder. - """ - - if line.requirement is not None: - parsed_req = handle_requirement_line(line, options) - return parsed_req - else: - handle_option_line( - line.opts, - line.filename, - line.lineno, - finder, - options, - session, - ) - return None - - -class RequirementsFileParser: - def __init__( - self, - session: PipSession, - line_parser: LineParser, - ) -> None: - self._session = session - self._line_parser = line_parser - - def parse( - self, filename: str, constraint: bool - ) -> Generator[ParsedLine, None, None]: - """Parse a given file, yielding parsed lines.""" - yield from self._parse_and_recurse( - filename, constraint, [{os.path.abspath(filename): None}] - ) - - def _parse_and_recurse( - self, - filename: str, - constraint: bool, - parsed_files_stack: list[dict[str, str | None]], - ) -> Generator[ParsedLine, None, None]: - for line in self._parse_file(filename, constraint): - if line.requirement is None and ( - line.opts.requirements or line.opts.constraints - ): - # parse a nested requirements file - if line.opts.requirements: - req_path = line.opts.requirements[0] - nested_constraint = False - else: - req_path = line.opts.constraints[0] - nested_constraint = True - - # original file is over http - if SCHEME_RE.search(filename): - # do a url join so relative paths work - req_path = urllib.parse.urljoin(filename, req_path) - # original file and nested file are paths - elif not SCHEME_RE.search(req_path): - # do a join so relative paths work - # and then abspath so that we can identify recursive references - req_path = os.path.abspath( - os.path.join( - os.path.dirname(filename), - req_path, - ) - ) - parsed_files = parsed_files_stack[0] - if req_path in parsed_files: - initial_file = parsed_files[req_path] - tail = ( - f" and again in {initial_file}" - if initial_file is not None - else "" - ) - raise RequirementsFileParseError( - f"{req_path} recursively references itself in {filename}{tail}" - ) - # Keeping a track where was each file first included in - new_parsed_files = parsed_files.copy() - new_parsed_files[req_path] = filename - yield from self._parse_and_recurse( - req_path, nested_constraint, [new_parsed_files, *parsed_files_stack] - ) - else: - yield line - - def _parse_file( - self, filename: str, constraint: bool - ) -> Generator[ParsedLine, None, None]: - _, content = get_file_content(filename, self._session) - - lines_enum = preprocess(content) - - for line_number, line in lines_enum: - try: - args_str, opts = self._line_parser(line) - except OptionParsingError as e: - # add offending line - msg = f"Invalid requirement: {line}\n{e.msg}" - raise RequirementsFileParseError(msg) - - yield ParsedLine( - filename, - line_number, - args_str, - opts, - constraint, - ) - - -def get_line_parser(finder: PackageFinder | None) -> LineParser: - def parse_line(line: str) -> tuple[str, Values]: - # Build new parser for each line since it accumulates appendable - # options. - parser = build_parser() - defaults = parser.get_default_values() - defaults.index_url = None - if finder: - defaults.format_control = finder.format_control - defaults.release_control = finder.release_control - - args_str, options_str = break_args_options(line) - - try: - options = shlex.split(options_str) - except ValueError as e: - raise OptionParsingError(f"Could not split options: {options_str}") from e - - opts, _ = parser.parse_args(options, defaults) - - return args_str, opts - - return parse_line - - -def break_args_options(line: str) -> tuple[str, str]: - """Break up the line into an args and options string. We only want to shlex - (and then optparse) the options, not the args. args can contain markers - which are corrupted by shlex. - """ - tokens = line.split(" ") - args = [] - options = tokens[:] - for token in tokens: - if token.startswith(("-", "--")): - break - else: - args.append(token) - options.pop(0) - return " ".join(args), " ".join(options) - - -class OptionParsingError(Exception): - def __init__(self, msg: str) -> None: - self.msg = msg - - -def build_parser() -> optparse.OptionParser: - """ - Return a parser for parsing requirement lines - """ - parser = optparse.OptionParser(add_help_option=False) - - option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ - for option_factory in option_factories: - option = option_factory() - parser.add_option(option) - - # By default optparse sys.exits on parsing errors. We want to wrap - # that in our own exception. - def parser_exit(self: Any, msg: str) -> NoReturn: - raise OptionParsingError(msg) - - # NOTE: mypy disallows assigning to a method - # https://github.com/python/mypy/issues/2427 - parser.exit = parser_exit # type: ignore - - return parser - - -def join_lines(lines_enum: ReqFileLines) -> ReqFileLines: - """Joins a line ending in '\' with the previous line (except when following - comments). The joined line takes on the index of the first line. - """ - primary_line_number = None - new_line: list[str] = [] - for line_number, line in lines_enum: - if not line.endswith("\\") or COMMENT_RE.match(line): - if COMMENT_RE.match(line): - # this ensures comments are always matched later - line = " " + line - if new_line: - new_line.append(line) - assert primary_line_number is not None - yield primary_line_number, "".join(new_line) - new_line = [] - else: - yield line_number, line - else: - if not new_line: - primary_line_number = line_number - new_line.append(line.strip("\\")) - - # last line contains \ - if new_line: - assert primary_line_number is not None - yield primary_line_number, "".join(new_line) - - # TODO: handle space after '\'. - - -def ignore_comments(lines_enum: ReqFileLines) -> ReqFileLines: - """ - Strips comments and filter empty lines. - """ - for line_number, line in lines_enum: - line = COMMENT_RE.sub("", line) - line = line.strip() - if line: - yield line_number, line - - -def expand_env_variables(lines_enum: ReqFileLines) -> ReqFileLines: - """Replace all environment variables that can be retrieved via `os.getenv`. - - The only allowed format for environment variables defined in the - requirement file is `${MY_VARIABLE_1}` to ensure two things: - - 1. Strings that contain a `$` aren't accidentally (partially) expanded. - 2. Ensure consistency across platforms for requirement files. - - These points are the result of a discussion on the `github pull - request #3514 <https://github.com/pypa/pip/pull/3514>`_. - - Valid characters in variable names follow the `POSIX standard - <http://pubs.opengroup.org/onlinepubs/9699919799/>`_ and are limited - to uppercase letter, digits and the `_` (underscore). - """ - for line_number, line in lines_enum: - for env_var, var_name in ENV_VAR_RE.findall(line): - value = os.getenv(var_name) - if not value: - continue - - line = line.replace(env_var, value) - - yield line_number, line - - -def get_file_content(url: str, session: PipSession) -> tuple[str, str]: - """Gets the content of a file; it may be a filename, file: URL, or - http: URL. Returns (location, content). Content is unicode. - Respects # -*- coding: declarations on the retrieved files. - - :param url: File path or url. - :param session: PipSession instance. - """ - scheme = urllib.parse.urlsplit(url).scheme - # Pip has special support for file:// URLs (LocalFSAdapter). - if scheme in ["http", "https", "file"]: - # Delay importing heavy network modules until absolutely necessary. - from pip._internal.network.utils import raise_for_status - - resp = session.get(url) - raise_for_status(resp) - return resp.url, resp.text - - # Assume this is a bare path. - try: - with open(url, "rb") as f: - raw_content = f.read() - except OSError as exc: - raise InstallationError(f"Could not open requirements file: {exc}") - - content = _decode_req_file(raw_content, url) - - return url, content - - -def _decode_req_file(data: bytes, url: str) -> str: - for bom, encoding in BOMS: - if data.startswith(bom): - return data[len(bom) :].decode(encoding) - - for line in data.split(b"\n")[:2]: - if line[0:1] == b"#": - result = PEP263_ENCODING_RE.search(line) - if result is not None: - encoding = result.groups()[0].decode("ascii") - return data.decode(encoding) - - try: - return data.decode(DEFAULT_ENCODING) - except UnicodeDecodeError: - locale_encoding = locale.getpreferredencoding(False) or sys.getdefaultencoding() - logging.warning( - "unable to decode data from %s with default encoding %s, " - "falling back to encoding from locale: %s. " - "If this is intentional you should specify the encoding with a " - "PEP-263 style comment, e.g. '# -*- coding: %s -*-'", - url, - DEFAULT_ENCODING, - locale_encoding, - locale_encoding, - ) - return data.decode(locale_encoding) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_install.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_install.py deleted file mode 100644 index bd4fb0717..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_install.py +++ /dev/null @@ -1,828 +0,0 @@ -from __future__ import annotations - -import functools -import logging -import os -import shutil -import sys -import uuid -import zipfile -from collections.abc import Collection, Iterable -from optparse import Values -from pathlib import Path -from typing import Any - -from pip._vendor.packaging.markers import Marker -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment -from pip._internal.exceptions import InstallationError, PreviousBuildDirError -from pip._internal.locations import get_scheme -from pip._internal.metadata import ( - BaseDistribution, - get_default_environment, - get_directory_distribution, - get_wheel_distribution, -) -from pip._internal.metadata.base import FilesystemWheel -from pip._internal.models.direct_url import DirectUrl -from pip._internal.models.link import Link -from pip._internal.operations.build.metadata import generate_metadata -from pip._internal.operations.build.metadata_editable import generate_editable_metadata -from pip._internal.operations.install.wheel import install_wheel -from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path -from pip._internal.req.req_uninstall import UninstallPathSet -from pip._internal.utils.deprecation import deprecated -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.misc import ( - ConfiguredBuildBackendHookCaller, - ask_path_exists, - backup_dir, - display_path, - hide_url, - is_installable_dir, - redact_auth_from_requirement, - redact_auth_from_url, -) -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds -from pip._internal.utils.unpacking import unpack_file -from pip._internal.utils.virtualenv import running_under_virtualenv -from pip._internal.vcs import vcs - -logger = logging.getLogger(__name__) - - -class InstallRequirement: - """ - Represents something that may be installed later on, may have information - about where to fetch the relevant requirement and also contains logic for - installing the said requirement. - """ - - def __init__( - self, - req: Requirement | None, - comes_from: str | InstallRequirement | None, - editable: bool = False, - link: Link | None = None, - markers: Marker | None = None, - isolated: bool = False, - *, - hash_options: dict[str, list[str]] | None = None, - config_settings: dict[str, str | list[str]] | None = None, - constraint: bool = False, - extras: Collection[str] = (), - user_supplied: bool = False, - permit_editable_wheels: bool = False, - ) -> None: - assert req is None or isinstance(req, Requirement), req - self.req = req - self.comes_from = comes_from - self.constraint = constraint - self.editable = editable - self.permit_editable_wheels = permit_editable_wheels - - # source_dir is the local directory where the linked requirement is - # located, or unpacked. In case unpacking is needed, creating and - # populating source_dir is done by the RequirementPreparer. Note this - # is not necessarily the directory where pyproject.toml or setup.py is - # located - that one is obtained via unpacked_source_directory. - self.source_dir: str | None = None - if self.editable: - assert link - if link.is_file: - self.source_dir = os.path.normpath(os.path.abspath(link.file_path)) - - # original_link is the direct URL that was provided by the user for the - # requirement, either directly or via a constraints file. - if link is None and req and req.url: - # PEP 508 URL requirement - link = Link(req.url) - self.link = self.original_link = link - - # When this InstallRequirement is a wheel obtained from the cache of locally - # built wheels, this is the source link corresponding to the cache entry, which - # was used to download and build the cached wheel. - self.cached_wheel_source_link: Link | None = None - - # Information about the location of the artifact that was downloaded . This - # property is guaranteed to be set in resolver results. - self.download_info: DirectUrl | None = None - - # Path to any downloaded or already-existing package. - self.local_file_path: str | None = None - if self.link and self.link.is_file: - self.local_file_path = self.link.file_path - - if extras: - self.extras = extras - elif req: - self.extras = req.extras - else: - self.extras = set() - if markers is None and req: - markers = req.marker - self.markers = markers - - # This holds the Distribution object if this requirement is already installed. - self.satisfied_by: BaseDistribution | None = None - # Whether the installation process should try to uninstall an existing - # distribution before installing this requirement. - self.should_reinstall = False - # Temporary build location - self._temp_build_dir: TempDirectory | None = None - # Set to True after successful installation - self.install_succeeded: bool | None = None - # Supplied options - self.hash_options = hash_options if hash_options else {} - self.config_settings = config_settings - # Set to True after successful preparation of this requirement - self.prepared = False - # User supplied requirement are explicitly requested for installation - # by the user via CLI arguments or requirements files, as opposed to, - # e.g. dependencies, extras or constraints. - self.user_supplied = user_supplied - - self.isolated = isolated - self.build_env: BuildEnvironment = NoOpBuildEnvironment() - - # For PEP 517, the directory where we request the project metadata - # gets stored. We need this to pass to build_wheel, so the backend - # can ensure that the wheel matches the metadata (see the PEP for - # details). - self.metadata_directory: str | None = None - - # The cached metadata distribution that this requirement represents. - # See get_dist / set_dist. - self._distribution: BaseDistribution | None = None - - # The static build requirements (from pyproject.toml) - self.pyproject_requires: list[str] | None = None - - # Build requirements that we will check are available - self.requirements_to_check: list[str] = [] - - # The PEP 517 backend we should use to build the project - self.pep517_backend: BuildBackendHookCaller | None = None - - # This requirement needs more preparation before it can be built - self.needs_more_preparation = False - - # This requirement needs to be unpacked before it can be installed. - self._archive_source: Path | None = None - - def __str__(self) -> str: - if self.req: - s = redact_auth_from_requirement(self.req) - if self.link: - s += f" from {redact_auth_from_url(self.link.url)}" - elif self.link: - s = redact_auth_from_url(self.link.url) - else: - s = "<InstallRequirement>" - if self.satisfied_by is not None: - if self.satisfied_by.location is not None: - location = display_path(self.satisfied_by.location) - else: - location = "<memory>" - s += f" in {location}" - if self.comes_from: - if isinstance(self.comes_from, str): - comes_from: str | None = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += f" (from {comes_from})" - return s - - def __repr__(self) -> str: - return ( - f"<{self.__class__.__name__} object: " - f"{str(self)} editable={self.editable!r}>" - ) - - def format_debug(self) -> str: - """An un-tested helper for getting state, for debugging.""" - attributes = vars(self) - names = sorted(attributes) - - state = (f"{attr}={attributes[attr]!r}" for attr in sorted(names)) - return "<{name} object: {{{state}}}>".format( - name=self.__class__.__name__, - state=", ".join(state), - ) - - # Things that are valid for all kinds of requirements? - @property - def name(self) -> str | None: - if self.req is None: - return None - return self.req.name - - @functools.cached_property - def supports_pyproject_editable(self) -> bool: - assert self.pep517_backend - with self.build_env: - runner = runner_with_spinner_message( - "Checking if build backend supports build_editable" - ) - with self.pep517_backend.subprocess_runner(runner): - return "build_editable" in self.pep517_backend._supported_features() - - @property - def specifier(self) -> SpecifierSet: - assert self.req is not None - return self.req.specifier - - @property - def is_direct(self) -> bool: - """Whether this requirement was specified as a direct URL.""" - return self.original_link is not None - - @property - def is_pinned(self) -> bool: - """Return whether I am pinned to an exact version. - - For example, some-package==1.2 is pinned; some-package>1.2 is not. - """ - assert self.req is not None - specifiers = self.req.specifier - return len(specifiers) == 1 and next(iter(specifiers)).operator in {"==", "==="} - - def match_markers(self, extras_requested: Iterable[str] | None = None) -> bool: - if not extras_requested: - # Provide an extra to safely evaluate the markers - # without matching any extra - extras_requested = ("",) - if self.markers is not None: - return any( - self.markers.evaluate({"extra": extra}) for extra in extras_requested - ) - else: - return True - - @property - def has_hash_options(self) -> bool: - """Return whether any known-good hashes are specified as options. - - These activate --require-hashes mode; hashes specified as part of a - URL do not. - - """ - return bool(self.hash_options) - - def hashes(self, trust_internet: bool = True) -> Hashes: - """Return a hash-comparer that considers my option- and URL-based - hashes to be known-good. - - Hashes in URLs--ones embedded in the requirements file, not ones - downloaded from an index server--are almost peers with ones from - flags. They satisfy --require-hashes (whether it was implicitly or - explicitly activated) but do not activate it. md5 and sha224 are not - allowed in flags, which should nudge people toward good algos. We - always OR all hashes together, even ones from URLs. - - :param trust_internet: Whether to trust URL-based (#md5=...) hashes - downloaded from the internet, as by populate_link() - - """ - good_hashes = self.hash_options.copy() - if trust_internet: - link = self.link - elif self.is_direct and self.user_supplied: - link = self.original_link - else: - link = None - if link and link.hash: - assert link.hash_name is not None - good_hashes.setdefault(link.hash_name, []).append(link.hash) - return Hashes(good_hashes) - - def from_path(self) -> str | None: - """Format a nice indicator to show where this "comes from" """ - if self.req is None: - return None - s = str(self.req) - if self.comes_from: - comes_from: str | None - if isinstance(self.comes_from, str): - comes_from = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += "->" + comes_from - return s - - def ensure_build_location( - self, build_dir: str, autodelete: bool, parallel_builds: bool - ) -> str: - assert build_dir is not None - if self._temp_build_dir is not None: - assert self._temp_build_dir.path - return self._temp_build_dir.path - if self.req is None: - # Some systems have /tmp as a symlink which confuses custom - # builds (such as numpy). Thus, we ensure that the real path - # is returned. - self._temp_build_dir = TempDirectory( - kind=tempdir_kinds.REQ_BUILD, globally_managed=True - ) - - return self._temp_build_dir.path - - # This is the only remaining place where we manually determine the path - # for the temporary directory. It is only needed for editables where - # it is the value of the --src option. - - # When parallel builds are enabled, add a UUID to the build directory - # name so multiple builds do not interfere with each other. - dir_name: str = canonicalize_name(self.req.name) - if parallel_builds: - dir_name = f"{dir_name}_{uuid.uuid4().hex}" - - # FIXME: Is there a better place to create the build_dir? (hg and bzr - # need this) - if not os.path.exists(build_dir): - logger.debug("Creating directory %s", build_dir) - os.makedirs(build_dir) - actual_build_dir = os.path.join(build_dir, dir_name) - # `None` indicates that we respect the globally-configured deletion - # settings, which is what we actually want when auto-deleting. - delete_arg = None if autodelete else False - return TempDirectory( - path=actual_build_dir, - delete=delete_arg, - kind=tempdir_kinds.REQ_BUILD, - globally_managed=True, - ).path - - def _set_requirement(self) -> None: - """Set requirement after generating metadata.""" - assert self.req is None - assert self.metadata is not None - assert self.source_dir is not None - - # Construct a Requirement object from the generated metadata - if isinstance(parse_version(self.metadata["Version"]), Version): - op = "==" - else: - op = "===" - - self.req = get_requirement( - "".join( - [ - self.metadata["Name"], - op, - self.metadata["Version"], - ] - ) - ) - - def warn_on_mismatching_name(self) -> None: - assert self.req is not None - metadata_name = canonicalize_name(self.metadata["Name"]) - if canonicalize_name(self.req.name) == metadata_name: - # Everything is fine. - return - - # If we're here, there's a mismatch. Log a warning about it. - logger.warning( - "Generating metadata for package %s " - "produced metadata for project name %s. Fix your " - "#egg=%s fragments.", - self.name, - metadata_name, - self.name, - ) - self.req = get_requirement(metadata_name) - - def check_if_exists(self, use_user_site: bool) -> None: - """Find an installed distribution that satisfies or conflicts - with this requirement, and set self.satisfied_by or - self.should_reinstall appropriately. - """ - if self.req is None: - return - existing_dist = get_default_environment().get_distribution(self.req.name) - if not existing_dist: - return - - version_compatible = self.req.specifier.contains( - existing_dist.version, - prereleases=True, - ) - if not version_compatible: - self.satisfied_by = None - if use_user_site: - if existing_dist.in_usersite: - self.should_reinstall = True - elif running_under_virtualenv() and existing_dist.in_site_packages: - raise InstallationError( - f"Will not install to the user site because it will " - f"lack sys.path precedence to {existing_dist.raw_name} " - f"in {existing_dist.location}" - ) - else: - self.should_reinstall = True - else: - if self.editable: - self.should_reinstall = True - # when installing editables, nothing pre-existing should ever - # satisfy - self.satisfied_by = None - else: - self.satisfied_by = existing_dist - - # Things valid for wheels - @property - def is_wheel(self) -> bool: - if not self.link: - return False - return self.link.is_wheel - - @property - def is_wheel_from_cache(self) -> bool: - # When True, it means that this InstallRequirement is a local wheel file in the - # cache of locally built wheels. - return self.cached_wheel_source_link is not None - - # Things valid for sdists - @property - def unpacked_source_directory(self) -> str: - assert self.source_dir, f"No source dir for {self}" - return os.path.join( - self.source_dir, self.link and self.link.subdirectory_fragment or "" - ) - - @property - def setup_py_path(self) -> str: - assert self.source_dir, f"No source dir for {self}" - setup_py = os.path.join(self.unpacked_source_directory, "setup.py") - - return setup_py - - @property - def pyproject_toml_path(self) -> str: - assert self.source_dir, f"No source dir for {self}" - return make_pyproject_path(self.unpacked_source_directory) - - def load_pyproject_toml(self) -> None: - """Load the pyproject.toml file. - - After calling this routine, all of the attributes related to PEP 517 - processing for this requirement have been set. - """ - pyproject_toml_data = load_pyproject_toml( - self.pyproject_toml_path, self.setup_py_path, str(self) - ) - assert pyproject_toml_data - requires, backend, check, backend_path = pyproject_toml_data - self.requirements_to_check = check - self.pyproject_requires = requires - self.pep517_backend = ConfiguredBuildBackendHookCaller( - self, - self.unpacked_source_directory, - backend, - backend_path=backend_path, - ) - - def editable_sanity_check(self) -> None: - """Check that an editable requirement if valid for use with PEP 517/518. - - This verifies that an editable has a build backend that supports PEP 660. - """ - if self.editable and not self.supports_pyproject_editable: - raise InstallationError( - f"Project {self} uses a build backend " - f"that is missing the 'build_editable' hook, so " - f"it cannot be installed in editable mode. " - f"Consider using a build backend that supports PEP 660." - ) - - def prepare_metadata(self) -> None: - """Ensure that project metadata is available. - - Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. - Under legacy processing, call setup.py egg-info. - """ - assert self.source_dir, f"No source dir for {self}" - details = self.name or f"from {self.link}" - - assert self.pep517_backend is not None - if ( - self.editable - and self.permit_editable_wheels - and self.supports_pyproject_editable - ): - self.metadata_directory = generate_editable_metadata( - build_env=self.build_env, - backend=self.pep517_backend, - details=details, - ) - else: - self.metadata_directory = generate_metadata( - build_env=self.build_env, - backend=self.pep517_backend, - details=details, - ) - - # Act on the newly generated metadata, based on the name and version. - if not self.name: - self._set_requirement() - else: - self.warn_on_mismatching_name() - - self.assert_source_matches_version() - - @property - def metadata(self) -> Any: - if not hasattr(self, "_metadata"): - self._metadata = self.get_dist().metadata - - return self._metadata - - def set_dist(self, distribution: BaseDistribution) -> None: - self._distribution = distribution - - def get_dist(self) -> BaseDistribution: - if self._distribution is not None: - return self._distribution - elif self.metadata_directory: - return get_directory_distribution(self.metadata_directory) - elif self.local_file_path and self.is_wheel: - assert self.req is not None - return get_wheel_distribution( - FilesystemWheel(self.local_file_path), - canonicalize_name(self.req.name), - ) - raise AssertionError( - f"InstallRequirement {self} has no metadata directory and no wheel: " - f"can't make a distribution." - ) - - def assert_source_matches_version(self) -> None: - assert self.source_dir, f"No source dir for {self}" - version = self.metadata["version"] - if self.req and self.req.specifier and version not in self.req.specifier: - logger.warning( - "Requested %s, but installing version %s", - self, - version, - ) - else: - logger.debug( - "Source in %s has version %s, which satisfies requirement %s", - display_path(self.source_dir), - version, - self, - ) - - # For both source distributions and editables - def ensure_has_source_dir( - self, - parent_dir: str, - autodelete: bool = False, - parallel_builds: bool = False, - ) -> None: - """Ensure that a source_dir is set. - - This will create a temporary build dir if the name of the requirement - isn't known yet. - - :param parent_dir: The ideal pip parent_dir for the source_dir. - Generally src_dir for editables and build_dir for sdists. - :return: self.source_dir - """ - if self.source_dir is None: - self.source_dir = self.ensure_build_location( - parent_dir, - autodelete=autodelete, - parallel_builds=parallel_builds, - ) - - def needs_unpacked_archive(self, archive_source: Path) -> None: - assert self._archive_source is None - self._archive_source = archive_source - - def ensure_pristine_source_checkout(self) -> None: - """Ensure the source directory has not yet been built in.""" - assert self.source_dir is not None - if self._archive_source is not None: - unpack_file(str(self._archive_source), self.source_dir) - elif is_installable_dir(self.source_dir): - # If a checkout exists, it's unwise to keep going. - # version inconsistencies are logged later, but do not fail - # the installation. - raise PreviousBuildDirError( - f"pip can't proceed with requirements '{self}' due to a " - f"pre-existing build directory ({self.source_dir}). This is likely " - "due to a previous installation that failed . pip is " - "being responsible and not assuming it can delete this. " - "Please delete it and try again." - ) - - # For editable installations - def update_editable(self) -> None: - if not self.link: - logger.debug( - "Cannot update repository at %s; repository location is unknown", - self.source_dir, - ) - return - assert self.editable - assert self.source_dir - if self.link.scheme == "file": - # Static paths don't get updated - return - vcs_backend = vcs.get_backend_for_scheme(self.link.scheme) - # Editable requirements are validated in Requirement constructors. - # So here, if it's neither a path nor a valid VCS URL, it's a bug. - assert vcs_backend, f"Unsupported VCS URL {self.link.url}" - hidden_url = hide_url(self.link.url) - vcs_backend.obtain(self.source_dir, url=hidden_url, verbosity=0) - - # Top-level Actions - def uninstall( - self, auto_confirm: bool = False, verbose: bool = False - ) -> UninstallPathSet | None: - """ - Uninstall the distribution currently satisfying this requirement. - - Prompts before removing or modifying files unless - ``auto_confirm`` is True. - - Refuses to delete or modify files outside of ``sys.prefix`` - - thus uninstallation within a virtual environment can only - modify that virtual environment, even if the virtualenv is - linked to global site-packages. - - """ - assert self.req - dist = get_default_environment().get_distribution(self.req.name) - if not dist: - logger.warning("Skipping %s as it is not installed.", self.name) - return None - logger.info("Found existing installation: %s", dist) - - uninstalled_pathset = UninstallPathSet.from_dist(dist) - uninstalled_pathset.remove(auto_confirm, verbose) - return uninstalled_pathset - - def _get_archive_name(self, path: str, parentdir: str, rootdir: str) -> str: - def _clean_zip_name(name: str, prefix: str) -> str: - assert name.startswith( - prefix + os.path.sep - ), f"name {name!r} doesn't start with prefix {prefix!r}" - name = name[len(prefix) + 1 :] - name = name.replace(os.path.sep, "/") - return name - - assert self.req is not None - path = os.path.join(parentdir, path) - name = _clean_zip_name(path, rootdir) - return self.req.name + "/" + name - - def archive(self, build_dir: str | None) -> None: - """Saves archive to provided build_dir. - - Used for saving downloaded VCS requirements as part of `pip download`. - """ - assert self.source_dir - if build_dir is None: - return - - create_archive = True - archive_name = "{}-{}.zip".format(self.name, self.metadata["version"]) - archive_path = os.path.join(build_dir, archive_name) - - if os.path.exists(archive_path): - response = ask_path_exists( - f"The file {display_path(archive_path)} exists. (i)gnore, (w)ipe, " - "(b)ackup, (a)bort ", - ("i", "w", "b", "a"), - ) - if response == "i": - create_archive = False - elif response == "w": - logger.warning("Deleting %s", display_path(archive_path)) - os.remove(archive_path) - elif response == "b": - dest_file = backup_dir(archive_path) - logger.warning( - "Backing up %s to %s", - display_path(archive_path), - display_path(dest_file), - ) - shutil.move(archive_path, dest_file) - elif response == "a": - sys.exit(-1) - - if not create_archive: - return - - zip_output = zipfile.ZipFile( - archive_path, - "w", - zipfile.ZIP_DEFLATED, - allowZip64=True, - ) - with zip_output: - dir = os.path.normcase(os.path.abspath(self.unpacked_source_directory)) - for dirpath, dirnames, filenames in os.walk(dir): - for dirname in dirnames: - dir_arcname = self._get_archive_name( - dirname, - parentdir=dirpath, - rootdir=dir, - ) - zipdir = zipfile.ZipInfo(dir_arcname + "/") - zipdir.external_attr = 0x1ED << 16 # 0o755 - zip_output.writestr(zipdir, "") - for filename in filenames: - file_arcname = self._get_archive_name( - filename, - parentdir=dirpath, - rootdir=dir, - ) - filename = os.path.join(dirpath, filename) - zip_output.write(filename, file_arcname) - - logger.info("Saved %s", display_path(archive_path)) - - def install( - self, - root: str | None = None, - home: str | None = None, - prefix: str | None = None, - warn_script_location: bool = True, - use_user_site: bool = False, - pycompile: bool = True, - ) -> None: - assert self.req is not None - scheme = get_scheme( - self.req.name, - user=use_user_site, - home=home, - root=root, - isolated=self.isolated, - prefix=prefix, - ) - - assert self.is_wheel - assert self.local_file_path - - install_wheel( - self.req.name, - self.local_file_path, - scheme=scheme, - req_description=str(self.req), - pycompile=pycompile, - warn_script_location=warn_script_location, - direct_url=self.download_info if self.is_direct else None, - requested=self.user_supplied, - ) - self.install_succeeded = True - - -def check_invalid_constraint_type(req: InstallRequirement) -> str: - # Check for unsupported forms - problem = "" - if not req.name: - problem = "Unnamed requirements are not allowed as constraints" - elif req.editable: - problem = "Editable requirements are not allowed as constraints" - elif req.extras: - problem = "Constraints cannot have extras" - - if problem: - deprecated( - reason=( - "Constraints are only allowed to take the form of a package " - "name and a version specifier. Other forms were originally " - "permitted as an accident of the implementation, but were " - "undocumented. The new implementation of the resolver no " - "longer supports these forms." - ), - replacement="replacing the constraint with a requirement", - # No plan yet for when the new resolver becomes default - gone_in=None, - issue=8210, - ) - - return problem - - -def _has_option(options: Values, reqs: list[InstallRequirement], option: str) -> bool: - if getattr(options, option, None): - return True - for req in reqs: - if getattr(req, option, None): - return True - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_set.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_set.py deleted file mode 100644 index 3451b24f2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_set.py +++ /dev/null @@ -1,81 +0,0 @@ -import logging -from collections import OrderedDict - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.req.req_install import InstallRequirement - -logger = logging.getLogger(__name__) - - -class RequirementSet: - def __init__(self, check_supported_wheels: bool = True) -> None: - """Create a RequirementSet.""" - - self.requirements: dict[str, InstallRequirement] = OrderedDict() - self.check_supported_wheels = check_supported_wheels - - self.unnamed_requirements: list[InstallRequirement] = [] - - def __str__(self) -> str: - requirements = sorted( - (req for req in self.requirements.values() if not req.comes_from), - key=lambda req: canonicalize_name(req.name or ""), - ) - return " ".join(str(req.req) for req in requirements) - - def __repr__(self) -> str: - requirements = sorted( - self.requirements.values(), - key=lambda req: canonicalize_name(req.name or ""), - ) - - format_string = "<{classname} object; {count} requirement(s): {reqs}>" - return format_string.format( - classname=self.__class__.__name__, - count=len(requirements), - reqs=", ".join(str(req.req) for req in requirements), - ) - - def add_unnamed_requirement(self, install_req: InstallRequirement) -> None: - assert not install_req.name - self.unnamed_requirements.append(install_req) - - def add_named_requirement(self, install_req: InstallRequirement) -> None: - assert install_req.name - - project_name = canonicalize_name(install_req.name) - self.requirements[project_name] = install_req - - def has_requirement(self, name: str) -> bool: - project_name = canonicalize_name(name) - - return ( - project_name in self.requirements - and not self.requirements[project_name].constraint - ) - - def get_requirement(self, name: str) -> InstallRequirement: - project_name = canonicalize_name(name) - - if project_name in self.requirements: - return self.requirements[project_name] - - raise KeyError(f"No project with the name {name!r}") - - @property - def all_requirements(self) -> list[InstallRequirement]: - return self.unnamed_requirements + list(self.requirements.values()) - - @property - def requirements_to_install(self) -> list[InstallRequirement]: - """Return the list of requirements that need to be installed. - - TODO remove this property together with the legacy resolver, since the new - resolver only returns requirements that need to be installed. - """ - return [ - install_req - for install_req in self.all_requirements - if not install_req.constraint and not install_req.satisfied_by - ] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_uninstall.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_uninstall.py deleted file mode 100644 index 3f3dde2fd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/req/req_uninstall.py +++ /dev/null @@ -1,639 +0,0 @@ -from __future__ import annotations - -import functools -import os -import sys -import sysconfig -from collections.abc import Generator, Iterable -from importlib.util import cache_from_source -from typing import Any, Callable - -from pip._internal.exceptions import LegacyDistutilsInstall, UninstallMissingRecord -from pip._internal.locations import get_bin_prefix, get_bin_user -from pip._internal.metadata import BaseDistribution -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.egg_link import egg_link_path_from_location -from pip._internal.utils.logging import getLogger, indent_log -from pip._internal.utils.misc import ask, normalize_path, renames, rmtree -from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory -from pip._internal.utils.virtualenv import running_under_virtualenv - -logger = getLogger(__name__) - - -def _script_names( - bin_dir: str, script_name: str, is_gui: bool -) -> Generator[str, None, None]: - """Create the fully qualified name of the files created by - {console,gui}_scripts for the given ``dist``. - Returns the list of file names - """ - exe_name = os.path.join(bin_dir, script_name) - yield exe_name - if not WINDOWS: - return - yield f"{exe_name}.exe" - yield f"{exe_name}.exe.manifest" - if is_gui: - yield f"{exe_name}-script.pyw" - else: - yield f"{exe_name}-script.py" - - -def _unique( - fn: Callable[..., Generator[Any, None, None]], -) -> Callable[..., Generator[Any, None, None]]: - @functools.wraps(fn) - def unique(*args: Any, **kw: Any) -> Generator[Any, None, None]: - seen: set[Any] = set() - for item in fn(*args, **kw): - if item not in seen: - seen.add(item) - yield item - - return unique - - -@_unique -def uninstallation_paths(dist: BaseDistribution) -> Generator[str, None, None]: - """ - Yield all the uninstallation paths for dist based on RECORD-without-.py[co] - - Yield paths to all the files in RECORD. For each .py file in RECORD, add - the .pyc and .pyo in the same directory. - - UninstallPathSet.add() takes care of the __pycache__ .py[co]. - - If RECORD is not found, raises an error, - with possible information from the INSTALLER file. - - https://packaging.python.org/specifications/recording-installed-packages/ - """ - location = dist.location - assert location is not None, "not installed" - - entries = dist.iter_declared_entries() - if entries is None: - raise UninstallMissingRecord(distribution=dist) - - for entry in entries: - path = os.path.join(location, entry) - yield path - if path.endswith(".py"): - dn, fn = os.path.split(path) - base = fn[:-3] - path = os.path.join(dn, base + ".pyc") - yield path - path = os.path.join(dn, base + ".pyo") - yield path - - -def compact(paths: Iterable[str]) -> set[str]: - """Compact a path set to contain the minimal number of paths - necessary to contain all paths in the set. If /a/path/ and - /a/path/to/a/file.txt are both in the set, leave only the - shorter path.""" - - sep = os.path.sep - short_paths: set[str] = set() - for path in sorted(paths, key=len): - should_skip = any( - path.startswith(shortpath.rstrip("*")) - and path[len(shortpath.rstrip("*").rstrip(sep))] == sep - for shortpath in short_paths - ) - if not should_skip: - short_paths.add(path) - return short_paths - - -def compress_for_rename(paths: Iterable[str]) -> set[str]: - """Returns a set containing the paths that need to be renamed. - - This set may include directories when the original sequence of paths - included every file on disk. - """ - case_map = {os.path.normcase(p): p for p in paths} - remaining = set(case_map) - unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len) - wildcards: set[str] = set() - - def norm_join(*a: str) -> str: - return os.path.normcase(os.path.join(*a)) - - for root in unchecked: - if any(os.path.normcase(root).startswith(w) for w in wildcards): - # This directory has already been handled. - continue - - all_files: set[str] = set() - all_subdirs: set[str] = set() - for dirname, subdirs, files in os.walk(root): - all_subdirs.update(norm_join(root, dirname, d) for d in subdirs) - all_files.update(norm_join(root, dirname, f) for f in files) - # If all the files we found are in our remaining set of files to - # remove, then remove them from the latter set and add a wildcard - # for the directory. - if not (all_files - remaining): - remaining.difference_update(all_files) - wildcards.add(root + os.sep) - - return set(map(case_map.__getitem__, remaining)) | wildcards - - -def compress_for_output_listing(paths: Iterable[str]) -> tuple[set[str], set[str]]: - """Returns a tuple of 2 sets of which paths to display to user - - The first set contains paths that would be deleted. Files of a package - are not added and the top-level directory of the package has a '*' added - at the end - to signify that all it's contents are removed. - - The second set contains files that would have been skipped in the above - folders. - """ - - will_remove = set(paths) - will_skip = set() - - # Determine folders and files - folders = set() - files = set() - for path in will_remove: - if path.endswith(".pyc"): - continue - if path.endswith("__init__.py") or ".dist-info" in path: - folders.add(os.path.dirname(path)) - files.add(path) - - _normcased_files = set(map(os.path.normcase, files)) - - folders = compact(folders) - - # This walks the tree using os.walk to not miss extra folders - # that might get added. - for folder in folders: - for dirpath, _, dirfiles in os.walk(folder): - for fname in dirfiles: - if fname.endswith(".pyc"): - continue - - file_ = os.path.join(dirpath, fname) - if ( - os.path.isfile(file_) - and os.path.normcase(file_) not in _normcased_files - ): - # We are skipping this file. Add it to the set. - will_skip.add(file_) - - will_remove = files | {os.path.join(folder, "*") for folder in folders} - - return will_remove, will_skip - - -class StashedUninstallPathSet: - """A set of file rename operations to stash files while - tentatively uninstalling them.""" - - def __init__(self) -> None: - # Mapping from source file root to [Adjacent]TempDirectory - # for files under that directory. - self._save_dirs: dict[str, TempDirectory] = {} - # (old path, new path) tuples for each move that may need - # to be undone. - self._moves: list[tuple[str, str]] = [] - - def _get_directory_stash(self, path: str) -> str: - """Stashes a directory. - - Directories are stashed adjacent to their original location if - possible, or else moved/copied into the user's temp dir.""" - - try: - save_dir: TempDirectory = AdjacentTempDirectory(path) - except OSError: - save_dir = TempDirectory(kind="uninstall") - self._save_dirs[os.path.normcase(path)] = save_dir - - return save_dir.path - - def _get_file_stash(self, path: str) -> str: - """Stashes a file. - - If no root has been provided, one will be created for the directory - in the user's temp directory.""" - path = os.path.normcase(path) - head, old_head = os.path.dirname(path), None - save_dir = None - - while head != old_head: - try: - save_dir = self._save_dirs[head] - break - except KeyError: - pass - head, old_head = os.path.dirname(head), head - else: - # Did not find any suitable root - head = os.path.dirname(path) - save_dir = TempDirectory(kind="uninstall") - self._save_dirs[head] = save_dir - - relpath = os.path.relpath(path, head) - if relpath and relpath != os.path.curdir: - return os.path.join(save_dir.path, relpath) - return save_dir.path - - def stash(self, path: str) -> str: - """Stashes the directory or file and returns its new location. - Handle symlinks as files to avoid modifying the symlink targets. - """ - path_is_dir = os.path.isdir(path) and not os.path.islink(path) - if path_is_dir: - new_path = self._get_directory_stash(path) - else: - new_path = self._get_file_stash(path) - - self._moves.append((path, new_path)) - if path_is_dir and os.path.isdir(new_path): - # If we're moving a directory, we need to - # remove the destination first or else it will be - # moved to inside the existing directory. - # We just created new_path ourselves, so it will - # be removable. - os.rmdir(new_path) - renames(path, new_path) - return new_path - - def commit(self) -> None: - """Commits the uninstall by removing stashed files.""" - for save_dir in self._save_dirs.values(): - save_dir.cleanup() - self._moves = [] - self._save_dirs = {} - - def rollback(self) -> None: - """Undoes the uninstall by moving stashed files back.""" - for p in self._moves: - logger.info("Moving to %s\n from %s", *p) - - for new_path, path in self._moves: - try: - logger.debug("Replacing %s from %s", new_path, path) - if os.path.isfile(new_path) or os.path.islink(new_path): - os.unlink(new_path) - elif os.path.isdir(new_path): - rmtree(new_path) - renames(path, new_path) - except OSError as ex: - logger.error("Failed to restore %s", new_path) - logger.debug("Exception: %s", ex) - - self.commit() - - @property - def can_rollback(self) -> bool: - return bool(self._moves) - - -class UninstallPathSet: - """A set of file paths to be removed in the uninstallation of a - requirement.""" - - def __init__(self, dist: BaseDistribution) -> None: - self._paths: set[str] = set() - self._refuse: set[str] = set() - self._pth: dict[str, UninstallPthEntries] = {} - self._dist = dist - self._moved_paths = StashedUninstallPathSet() - # Create local cache of normalize_path results. Creating an UninstallPathSet - # can result in hundreds/thousands of redundant calls to normalize_path with - # the same args, which hurts performance. - self._normalize_path_cached = functools.lru_cache(normalize_path) - - def _permitted(self, path: str) -> bool: - """ - Return True if the given path is one we are permitted to - remove/modify, False otherwise. - - """ - # aka is_local, but caching normalized sys.prefix - if not running_under_virtualenv(): - return True - return path.startswith(self._normalize_path_cached(sys.prefix)) - - def add(self, path: str) -> None: - head, tail = os.path.split(path) - - # we normalize the head to resolve parent directory symlinks, but not - # the tail, since we only want to uninstall symlinks, not their targets - path = os.path.join(self._normalize_path_cached(head), os.path.normcase(tail)) - - if not os.path.exists(path): - return - if self._permitted(path): - self._paths.add(path) - else: - self._refuse.add(path) - - # __pycache__ files can show up after 'installed-files.txt' is created, - # due to imports - if os.path.splitext(path)[1] == ".py": - self.add(cache_from_source(path)) - - def add_pth(self, pth_file: str, entry: str) -> None: - pth_file = self._normalize_path_cached(pth_file) - if self._permitted(pth_file): - if pth_file not in self._pth: - self._pth[pth_file] = UninstallPthEntries(pth_file) - self._pth[pth_file].add(entry) - else: - self._refuse.add(pth_file) - - def remove(self, auto_confirm: bool = False, verbose: bool = False) -> None: - """Remove paths in ``self._paths`` with confirmation (unless - ``auto_confirm`` is True).""" - - if not self._paths: - logger.info( - "Can't uninstall '%s'. No files were found to uninstall.", - self._dist.raw_name, - ) - return - - dist_name_version = f"{self._dist.raw_name}-{self._dist.raw_version}" - logger.info("Uninstalling %s:", dist_name_version) - - with indent_log(): - if auto_confirm or self._allowed_to_proceed(verbose): - moved = self._moved_paths - - for_rename = compress_for_rename(self._paths) - - for path in sorted(compact(for_rename)): - moved.stash(path) - logger.verbose("Removing file or directory %s", path) - - for pth in self._pth.values(): - pth.remove() - - logger.info("Successfully uninstalled %s", dist_name_version) - - def _allowed_to_proceed(self, verbose: bool) -> bool: - """Display which files would be deleted and prompt for confirmation""" - - def _display(msg: str, paths: Iterable[str]) -> None: - if not paths: - return - - logger.info(msg) - with indent_log(): - for path in sorted(compact(paths)): - logger.info(path) - - if not verbose: - will_remove, will_skip = compress_for_output_listing(self._paths) - else: - # In verbose mode, display all the files that are going to be - # deleted. - will_remove = set(self._paths) - will_skip = set() - - _display("Would remove:", will_remove) - _display("Would not remove (might be manually added):", will_skip) - _display("Would not remove (outside of prefix):", self._refuse) - if verbose: - _display("Will actually move:", compress_for_rename(self._paths)) - - return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n" - - def rollback(self) -> None: - """Rollback the changes previously made by remove().""" - if not self._moved_paths.can_rollback: - logger.error( - "Can't roll back %s; was not uninstalled", - self._dist.raw_name, - ) - return - logger.info("Rolling back uninstall of %s", self._dist.raw_name) - self._moved_paths.rollback() - for pth in self._pth.values(): - pth.rollback() - - def commit(self) -> None: - """Remove temporary save dir: rollback will no longer be possible.""" - self._moved_paths.commit() - - @classmethod - def from_dist(cls, dist: BaseDistribution) -> UninstallPathSet: - dist_location = dist.location - info_location = dist.info_location - if dist_location is None: - logger.info( - "Not uninstalling %s since it is not installed", - dist.canonical_name, - ) - return cls(dist) - - normalized_dist_location = normalize_path(dist_location) - if not dist.local: - logger.info( - "Not uninstalling %s at %s, outside environment %s", - dist.canonical_name, - normalized_dist_location, - sys.prefix, - ) - return cls(dist) - - if normalized_dist_location in { - p - for p in {sysconfig.get_path("stdlib"), sysconfig.get_path("platstdlib")} - if p - }: - logger.info( - "Not uninstalling %s at %s, as it is in the standard library.", - dist.canonical_name, - normalized_dist_location, - ) - return cls(dist) - - paths_to_remove = cls(dist) - develop_egg_link = egg_link_path_from_location(dist.raw_name) - - # Distribution is installed with metadata in a "flat" .egg-info - # directory. This means it is not a modern .dist-info installation, an - # egg, or legacy editable. - setuptools_flat_installation = ( - dist.installed_with_setuptools_egg_info - and info_location is not None - and os.path.exists(info_location) - # If dist is editable and the location points to a ``.egg-info``, - # we are in fact in the legacy editable case. - and not info_location.endswith(f"{dist.setuptools_filename}.egg-info") - ) - - # Uninstall cases order do matter as in the case of 2 installs of the - # same package, pip needs to uninstall the currently detected version - if setuptools_flat_installation: - if info_location is not None: - paths_to_remove.add(info_location) - installed_files = dist.iter_declared_entries() - if installed_files is not None: - for installed_file in installed_files: - paths_to_remove.add(os.path.join(dist_location, installed_file)) - # FIXME: need a test for this elif block - # occurs with --single-version-externally-managed/--record outside - # of pip - elif dist.is_file("top_level.txt"): - try: - namespace_packages = dist.read_text("namespace_packages.txt") - except FileNotFoundError: - namespaces = [] - else: - namespaces = namespace_packages.splitlines(keepends=False) - for top_level_pkg in [ - p - for p in dist.read_text("top_level.txt").splitlines() - if p and p not in namespaces - ]: - path = os.path.join(dist_location, top_level_pkg) - paths_to_remove.add(path) - paths_to_remove.add(f"{path}.py") - paths_to_remove.add(f"{path}.pyc") - paths_to_remove.add(f"{path}.pyo") - - elif dist.installed_by_distutils: - raise LegacyDistutilsInstall(distribution=dist) - - elif dist.installed_as_egg: - # package installed by easy_install - # We cannot match on dist.egg_name because it can slightly vary - # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg - # XXX We use normalized_dist_location because dist_location my contain - # a trailing / if the distribution is a zipped egg - # (which is not a directory). - paths_to_remove.add(normalized_dist_location) - easy_install_egg = os.path.split(normalized_dist_location)[1] - easy_install_pth = os.path.join( - os.path.dirname(normalized_dist_location), - "easy-install.pth", - ) - paths_to_remove.add_pth(easy_install_pth, "./" + easy_install_egg) - - elif dist.installed_with_dist_info: - for path in uninstallation_paths(dist): - paths_to_remove.add(path) - - elif develop_egg_link: - # PEP 660 modern editable is handled in the ``.dist-info`` case - # above, so this only covers the setuptools-style editable. - with open(develop_egg_link) as fh: - link_pointer = os.path.normcase(fh.readline().strip()) - normalized_link_pointer = paths_to_remove._normalize_path_cached( - link_pointer - ) - assert os.path.samefile( - normalized_link_pointer, normalized_dist_location - ), ( - f"Egg-link {develop_egg_link} (to {link_pointer}) does not match " - f"installed location of {dist.raw_name} (at {dist_location})" - ) - paths_to_remove.add(develop_egg_link) - easy_install_pth = os.path.join( - os.path.dirname(develop_egg_link), "easy-install.pth" - ) - paths_to_remove.add_pth(easy_install_pth, dist_location) - - else: - logger.debug( - "Not sure how to uninstall: %s - Check: %s", - dist, - dist_location, - ) - - if dist.in_usersite: - bin_dir = get_bin_user() - else: - bin_dir = get_bin_prefix() - - # find distutils scripts= scripts - try: - for script in dist.iter_distutils_script_names(): - paths_to_remove.add(os.path.join(bin_dir, script)) - if WINDOWS: - paths_to_remove.add(os.path.join(bin_dir, f"{script}.bat")) - except (FileNotFoundError, NotADirectoryError): - pass - - # find console_scripts and gui_scripts - def iter_scripts_to_remove( - dist: BaseDistribution, - bin_dir: str, - ) -> Generator[str, None, None]: - for entry_point in dist.iter_entry_points(): - if entry_point.group == "console_scripts": - yield from _script_names(bin_dir, entry_point.name, False) - elif entry_point.group == "gui_scripts": - yield from _script_names(bin_dir, entry_point.name, True) - - for s in iter_scripts_to_remove(dist, bin_dir): - paths_to_remove.add(s) - - return paths_to_remove - - -class UninstallPthEntries: - def __init__(self, pth_file: str) -> None: - self.file = pth_file - self.entries: set[str] = set() - self._saved_lines: list[bytes] | None = None - - def add(self, entry: str) -> None: - entry = os.path.normcase(entry) - # On Windows, os.path.normcase converts the entry to use - # backslashes. This is correct for entries that describe absolute - # paths outside of site-packages, but all the others use forward - # slashes. - # os.path.splitdrive is used instead of os.path.isabs because isabs - # treats non-absolute paths with drive letter markings like c:foo\bar - # as absolute paths. It also does not recognize UNC paths if they don't - # have more than "\\sever\share". Valid examples: "\\server\share\" or - # "\\server\share\folder". - if WINDOWS and not os.path.splitdrive(entry)[0]: - entry = entry.replace("\\", "/") - self.entries.add(entry) - - def remove(self) -> None: - logger.verbose("Removing pth entries from %s:", self.file) - - # If the file doesn't exist, log a warning and return - if not os.path.isfile(self.file): - logger.warning("Cannot remove entries from nonexistent file %s", self.file) - return - with open(self.file, "rb") as fh: - # windows uses '\r\n' with py3k, but uses '\n' with py2.x - lines = fh.readlines() - self._saved_lines = lines - if any(b"\r\n" in line for line in lines): - endline = "\r\n" - else: - endline = "\n" - # handle missing trailing newline - if lines and not lines[-1].endswith(endline.encode("utf-8")): - lines[-1] = lines[-1] + endline.encode("utf-8") - for entry in self.entries: - try: - logger.verbose("Removing entry: %s", entry) - lines.remove((entry + endline).encode("utf-8")) - except ValueError: - pass - with open(self.file, "wb") as fh: - fh.writelines(lines) - - def rollback(self) -> bool: - if self._saved_lines is None: - logger.error("Cannot roll back changes to %s, none were made", self.file) - return False - logger.debug("Rolling %s back to previous state", self.file) - with open(self.file, "wb") as fh: - fh.writelines(self._saved_lines) - return True diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 912b9742859f660e392154392b850720a1e495cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmXw!u}TCn5QY;EMGo{OtVGtm#X~$18(R^PvkQdW?x5pklQ1)jUgs0|9+tj}<+V1} z-V2z3{>4Av{L}n%w7)l2S)U)@Smsx;f9XHi>|}UVcj`bL>YH~(TY2A<<NEFD+}tw| z8`l9fv)RNvM_QUh@d;XC)A~4c3&&7lK*`49ya%cpbGwqq7*3k0o!XbPQ#*$~c_(0{ zPv#mIhEbqOu3fqZV3RP_7J~o<=W7Cveh`eIwmC(y_BgH9yBB@z1`n6Co$HkcxWLay IYfYm}znut18vp<R diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-314.pyc deleted file mode 100644 index ed87a1fcca7c4c3f9fd24fb1d944fa5a55d2bb4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1686 zcma)6|4$r66rb7MJNB+XzfeF>iWEUF6|MwQTT6^uO&}Utx7uGknC$Hhuw`#|c{4}l zxBJ0F<A1`B{wG%riB4kFG$!^pnp5eIzPER0j@TF{na{p?GyCSv=Y3|b4G$F=w(q|E zJ$%n%><JBe&FLELhiEj}7W4QzTjQFqS=ySWv9)fmIoio=dp)<7*ZFC-$u|c!txf06 z$zCAF7ID06^?S5C%4V47j59B{f;&^w1us9#N&`=6P_m4B$B!bv8cE~cO?8;WepKS- z(t4~kPIz*^5rVACSfh8iZ+KtofI{?IH#}>9fF2)@vdJ{}n6|dgX?u(%>;YTm9v^3s z>sg2ww3B)4%!4VSC+FpK{sGeiofOUB`@WK%R7rFoA>bI8I<-7@8+&^dVU;&A`j&O` zOU7#GeT99(cX6-#{Bwq#_fz6o=&?K-(JtFag!7a#Hw8!%EkN!oGZyU1U{9z<nkJxS zO+4C_GEycFQa2zjImU@Xr6EWEIn^YIfYL!O^V<p3eQkz>2qIspS{P^{6m4*|X}-Dh zcI7iAK~?;kgr!@zu2&u<uvbYTc_;&|DnXPqYE?Y)LKue{AuEA|g{8{9L%o~C%S$U_ zMSOAdhWJ$0)5zCS=z3cDIILDwsO3WH2YddGRFyPL%OZ@m1T1G6h`|QcwoK6%(?c^T zgdfL=rVzqR^z*#fKQ)M{t7{0)o9vX?x!0Z%{5Uc7_{#O;iKP>pMjzeHzP}d6pXG4e z#^o%a>hu~BfMd5khDMWBdR1gA-4(n1h;JNmGqREBbv#)nI9dA;Ac2x?93`V|IERZN zONe66&(Fgp{F;I6cn8v4K68q$m)5t35Sr|dJUf5&`{CJ^I}4-eIU^`4CWUR^K=>~~ zWdb5;ow;dc3#DWO-E&H4Unr@8wnZn21BMA`lad7&$i9fsRYrCW7$NUvgluLOjkBDO z&vjWIdOZB<abYIox^s};-NS#_|KJ+NaUHybfXUDU0@DatGCfkqcBDoDWdig`IU)fR zt(iT;@rxHx{xC&AEFZCrl51QcV!uvWD+*ChYK@3&RN;QZkGeDGh1d>3=_rh4oCpCg zQ;Zn|Gm5tewHgM(*BZiVLraDKU+lYQfs7&{O1wiXDeT=2uP#L)ApNKbgy&zO8cr>g z>Itd&w21H*Sy{r_+Kp1t<n>`1#ydc=00+TL;k{b?=Uy#hovHVD>O2S&FJ41>AR!nV zUk)?*@8|U%BnKf<oNW(O{!TWT#@*EpXYW86C+KkMErb)BbN(}%`;D#s#8!Tpn)@N= le*H#kWbU{)-*R4Wm2S73+ke{D6|2Q2Pm2YPcM~BC{5PWUn<M}L diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/base.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/base.py deleted file mode 100644 index 5ec4d96aa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/base.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Callable, Optional - -from pip._internal.req.req_install import InstallRequirement -from pip._internal.req.req_set import RequirementSet - -InstallRequirementProvider = Callable[ - [str, Optional[InstallRequirement]], InstallRequirement -] - - -class BaseResolver: - def resolve( - self, root_reqs: list[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - raise NotImplementedError() - - def get_installation_order( - self, req_set: RequirementSet - ) -> list[InstallRequirement]: - raise NotImplementedError() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 6a6f04fb2106313955eb488af0beffecec49120a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmXw!F-inM5JkIP6cO|iMk3=lxQHuaVk#n{SwYh~Q>^9obT`#C=wx2PLl}A$!%a<$ z-3!<a`h)*p@snSNd%HU->+|EAN`4jlm;QtGR)$w~r}ou>zIj)?k?(aWS8rG6@Q{!b z*bcdw&5q$Y@Dd`2Cu}7_>%!2@ZNiE?Nwy@`IpnH=+fg2aKWV0BYF^Gx%{}(fSwSOx zgln2ZBEc%!c4-%wAX2Oic|rEp)r={)K`8jz;lj3KZE{Is%uyUy+ZTQ428WltnOBxS NQh}d|)|w}oegVZeNX7sF diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-314.pyc deleted file mode 100644 index 2a009d44bbe608b235dc6c9d0d5a1c56301ccad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25278 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py deleted file mode 100644 index 33a4fdc3b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +++ /dev/null @@ -1,598 +0,0 @@ -"""Dependency Resolution - -The dependency resolution in pip is performed as follows: - -for top-level requirements: - a. only one spec allowed per project, regardless of conflicts or not. - otherwise a "double requirement" exception is raised - b. they override sub-dependency requirements. -for sub-dependencies - a. "first found, wins" (where the order is breadth first) -""" - -from __future__ import annotations - -import logging -import sys -from collections import defaultdict -from collections.abc import Iterable -from itertools import chain -from typing import Optional - -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.requirements import Requirement - -from pip._internal.cache import WheelCache -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, - DistributionNotFound, - HashError, - HashErrors, - InstallationError, - NoneMetadataError, - UnsupportedPythonVersion, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.req_install import ( - InstallRequirement, - check_invalid_constraint_type, -) -from pip._internal.req.req_set import RequirementSet -from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider -from pip._internal.utils import compatibility_tags -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.direct_url_helpers import direct_url_from_link -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import normalize_version_info -from pip._internal.utils.packaging import check_requires_python - -logger = logging.getLogger(__name__) - -DiscoveredDependencies = defaultdict[Optional[str], list[InstallRequirement]] - - -def _check_dist_requires_python( - dist: BaseDistribution, - version_info: tuple[int, int, int], - ignore_requires_python: bool = False, -) -> None: - """ - Check whether the given Python version is compatible with a distribution's - "Requires-Python" value. - - :param version_info: A 3-tuple of ints representing the Python - major-minor-micro version to check. - :param ignore_requires_python: Whether to ignore the "Requires-Python" - value if the given Python version isn't compatible. - - :raises UnsupportedPythonVersion: When the given Python version isn't - compatible. - """ - # This idiosyncratically converts the SpecifierSet to str and let - # check_requires_python then parse it again into SpecifierSet. But this - # is the legacy resolver so I'm just not going to bother refactoring. - try: - requires_python = str(dist.requires_python) - except FileNotFoundError as e: - raise NoneMetadataError(dist, str(e)) - try: - is_compatible = check_requires_python( - requires_python, - version_info=version_info, - ) - except specifiers.InvalidSpecifier as exc: - logger.warning( - "Package %r has an invalid Requires-Python: %s", dist.raw_name, exc - ) - return - - if is_compatible: - return - - version = ".".join(map(str, version_info)) - if ignore_requires_python: - logger.debug( - "Ignoring failed Requires-Python check for package %r: %s not in %r", - dist.raw_name, - version, - requires_python, - ) - return - - raise UnsupportedPythonVersion( - f"Package {dist.raw_name!r} requires a different Python: " - f"{version} not in {requires_python!r}" - ) - - -class Resolver(BaseResolver): - """Resolves which packages need to be installed/uninstalled to perform \ - the requested operation without breaking the requirements of any package. - """ - - _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} - - def __init__( - self, - preparer: RequirementPreparer, - finder: PackageFinder, - wheel_cache: WheelCache | None, - make_install_req: InstallRequirementProvider, - use_user_site: bool, - ignore_dependencies: bool, - ignore_installed: bool, - ignore_requires_python: bool, - force_reinstall: bool, - upgrade_strategy: str, - py_version_info: tuple[int, ...] | None = None, - ) -> None: - super().__init__() - assert upgrade_strategy in self._allowed_strategies - - if py_version_info is None: - py_version_info = sys.version_info[:3] - else: - py_version_info = normalize_version_info(py_version_info) - - self._py_version_info = py_version_info - - self.preparer = preparer - self.finder = finder - self.wheel_cache = wheel_cache - - self.upgrade_strategy = upgrade_strategy - self.force_reinstall = force_reinstall - self.ignore_dependencies = ignore_dependencies - self.ignore_installed = ignore_installed - self.ignore_requires_python = ignore_requires_python - self.use_user_site = use_user_site - self._make_install_req = make_install_req - - self._discovered_dependencies: DiscoveredDependencies = defaultdict(list) - - def resolve( - self, root_reqs: list[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - """Resolve what operations need to be done - - As a side-effect of this method, the packages (and their dependencies) - are downloaded, unpacked and prepared for installation. This - preparation is done by ``pip.operations.prepare``. - - Once PyPI has static dependency metadata available, it would be - possible to move the preparation to become a step separated from - dependency resolution. - """ - requirement_set = RequirementSet(check_supported_wheels=check_supported_wheels) - for req in root_reqs: - if req.constraint: - check_invalid_constraint_type(req) - self._add_requirement_to_set(requirement_set, req) - - # Actually prepare the files, and collect any exceptions. Most hash - # exceptions cannot be checked ahead of time, because - # _populate_link() needs to be called before we can make decisions - # based on link type. - discovered_reqs: list[InstallRequirement] = [] - hash_errors = HashErrors() - for req in chain(requirement_set.all_requirements, discovered_reqs): - try: - discovered_reqs.extend(self._resolve_one(requirement_set, req)) - except HashError as exc: - exc.req = req - hash_errors.append(exc) - - if hash_errors: - raise hash_errors - - return requirement_set - - def _add_requirement_to_set( - self, - requirement_set: RequirementSet, - install_req: InstallRequirement, - parent_req_name: str | None = None, - extras_requested: Iterable[str] | None = None, - ) -> tuple[list[InstallRequirement], InstallRequirement | None]: - """Add install_req as a requirement to install. - - :param parent_req_name: The name of the requirement that needed this - added. The name is used because when multiple unnamed requirements - resolve to the same name, we could otherwise end up with dependency - links that point outside the Requirements set. parent_req must - already be added. Note that None implies that this is a user - supplied requirement, vs an inferred one. - :param extras_requested: an iterable of extras used to evaluate the - environment markers. - :return: Additional requirements to scan. That is either [] if - the requirement is not applicable, or [install_req] if the - requirement is applicable and has just been added. - """ - # If the markers do not match, ignore this requirement. - if not install_req.match_markers(extras_requested): - logger.info( - "Ignoring %s: markers '%s' don't match your environment", - install_req.name, - install_req.markers, - ) - return [], None - - # If the wheel is not supported, raise an error. - # Should check this after filtering out based on environment markers to - # allow specifying different wheels based on the environment/OS, in a - # single requirements file. - if install_req.link and install_req.link.is_wheel: - wheel = Wheel(install_req.link.filename) - tags = compatibility_tags.get_supported() - if requirement_set.check_supported_wheels and not wheel.supported(tags): - raise InstallationError( - f"{wheel.filename} is not a supported wheel on this platform." - ) - - # This next bit is really a sanity check. - assert ( - not install_req.user_supplied or parent_req_name is None - ), "a user supplied req shouldn't have a parent" - - # Unnamed requirements are scanned again and the requirement won't be - # added as a dependency until after scanning. - if not install_req.name: - requirement_set.add_unnamed_requirement(install_req) - return [install_req], None - - try: - existing_req: InstallRequirement | None = requirement_set.get_requirement( - install_req.name - ) - except KeyError: - existing_req = None - - has_conflicting_requirement = ( - parent_req_name is None - and existing_req - and not existing_req.constraint - and existing_req.extras == install_req.extras - and existing_req.req - and install_req.req - and existing_req.req.specifier != install_req.req.specifier - ) - if has_conflicting_requirement: - raise InstallationError( - f"Double requirement given: {install_req} " - f"(already in {existing_req}, name={install_req.name!r})" - ) - - # When no existing requirement exists, add the requirement as a - # dependency and it will be scanned again after. - if not existing_req: - requirement_set.add_named_requirement(install_req) - # We'd want to rescan this requirement later - return [install_req], install_req - - # Assume there's no need to scan, and that we've already - # encountered this for scanning. - if install_req.constraint or not existing_req.constraint: - return [], existing_req - - does_not_satisfy_constraint = install_req.link and not ( - existing_req.link and install_req.link.path == existing_req.link.path - ) - if does_not_satisfy_constraint: - raise InstallationError( - f"Could not satisfy constraints for '{install_req.name}': " - "installation from path or url cannot be " - "constrained to a version" - ) - # If we're now installing a constraint, mark the existing - # object for real installation. - existing_req.constraint = False - # If we're now installing a user supplied requirement, - # mark the existing object as such. - if install_req.user_supplied: - existing_req.user_supplied = True - existing_req.extras = tuple( - sorted(set(existing_req.extras) | set(install_req.extras)) - ) - logger.debug( - "Setting %s extras to: %s", - existing_req, - existing_req.extras, - ) - # Return the existing requirement for addition to the parent and - # scanning again. - return [existing_req], existing_req - - def _is_upgrade_allowed(self, req: InstallRequirement) -> bool: - if self.upgrade_strategy == "to-satisfy-only": - return False - elif self.upgrade_strategy == "eager": - return True - else: - assert self.upgrade_strategy == "only-if-needed" - return req.user_supplied or req.constraint - - def _set_req_to_reinstall(self, req: InstallRequirement) -> None: - """ - Set a requirement to be installed. - """ - # Don't uninstall the conflict if doing a user install and the - # conflict is not a user install. - assert req.satisfied_by is not None - if not self.use_user_site or req.satisfied_by.in_usersite: - req.should_reinstall = True - req.satisfied_by = None - - def _check_skip_installed(self, req_to_install: InstallRequirement) -> str | None: - """Check if req_to_install should be skipped. - - This will check if the req is installed, and whether we should upgrade - or reinstall it, taking into account all the relevant user options. - - After calling this req_to_install will only have satisfied_by set to - None if the req_to_install is to be upgraded/reinstalled etc. Any - other value will be a dist recording the current thing installed that - satisfies the requirement. - - Note that for vcs urls and the like we can't assess skipping in this - routine - we simply identify that we need to pull the thing down, - then later on it is pulled down and introspected to assess upgrade/ - reinstalls etc. - - :return: A text reason for why it was skipped, or None. - """ - if self.ignore_installed: - return None - - req_to_install.check_if_exists(self.use_user_site) - if not req_to_install.satisfied_by: - return None - - if self.force_reinstall: - self._set_req_to_reinstall(req_to_install) - return None - - if not self._is_upgrade_allowed(req_to_install): - if self.upgrade_strategy == "only-if-needed": - return "already satisfied, skipping upgrade" - return "already satisfied" - - # Check for the possibility of an upgrade. For link-based - # requirements we have to pull the tree down and inspect to assess - # the version #, so it's handled way down. - if not req_to_install.link: - try: - self.finder.find_requirement(req_to_install, upgrade=True) - except BestVersionAlreadyInstalled: - # Then the best version is installed. - return "already up-to-date" - except DistributionNotFound: - # No distribution found, so we squash the error. It will - # be raised later when we re-try later to do the install. - # Why don't we just raise here? - pass - - self._set_req_to_reinstall(req_to_install) - return None - - def _find_requirement_link(self, req: InstallRequirement) -> Link | None: - upgrade = self._is_upgrade_allowed(req) - best_candidate = self.finder.find_requirement(req, upgrade) - if not best_candidate: - return None - - # Log a warning per PEP 592 if necessary before returning. - link = best_candidate.link - if link.is_yanked: - reason = link.yanked_reason or "<none given>" - msg = ( - # Mark this as a unicode string to prevent - # "UnicodeEncodeError: 'ascii' codec can't encode character" - # in Python 2 when the reason contains non-ascii characters. - "The candidate selected for download or install is a " - f"yanked version: {best_candidate}\n" - f"Reason for being yanked: {reason}" - ) - logger.warning(msg) - - return link - - def _populate_link(self, req: InstallRequirement) -> None: - """Ensure that if a link can be found for this, that it is found. - - Note that req.link may still be None - if the requirement is already - installed and not needed to be upgraded based on the return value of - _is_upgrade_allowed(). - - If preparer.require_hashes is True, don't use the wheel cache, because - cached wheels, always built locally, have different hashes than the - files downloaded from the index server and thus throw false hash - mismatches. Furthermore, cached wheels at present have undeterministic - contents due to file modification times. - """ - if req.link is None: - req.link = self._find_requirement_link(req) - - if self.wheel_cache is None or self.preparer.require_hashes: - return - - assert req.link is not None, "_find_requirement_link unexpectedly returned None" - cache_entry = self.wheel_cache.get_cache_entry( - link=req.link, - package_name=req.name, - supported_tags=get_supported(), - ) - if cache_entry is not None: - logger.debug("Using cached wheel link: %s", cache_entry.link) - if req.link is req.original_link and cache_entry.persistent: - req.cached_wheel_source_link = req.link - if cache_entry.origin is not None: - req.download_info = cache_entry.origin - else: - # Legacy cache entry that does not have origin.json. - # download_info may miss the archive_info.hashes field. - req.download_info = direct_url_from_link( - req.link, link_is_in_wheel_cache=cache_entry.persistent - ) - req.link = cache_entry.link - - def _get_dist_for(self, req: InstallRequirement) -> BaseDistribution: - """Takes a InstallRequirement and returns a single AbstractDist \ - representing a prepared variant of the same. - """ - if req.editable: - return self.preparer.prepare_editable_requirement(req) - - # satisfied_by is only evaluated by calling _check_skip_installed, - # so it must be None here. - assert req.satisfied_by is None - skip_reason = self._check_skip_installed(req) - - if req.satisfied_by: - return self.preparer.prepare_installed_requirement(req, skip_reason) - - # We eagerly populate the link, since that's our "legacy" behavior. - self._populate_link(req) - dist = self.preparer.prepare_linked_requirement(req) - - # NOTE - # The following portion is for determining if a certain package is - # going to be re-installed/upgraded or not and reporting to the user. - # This should probably get cleaned up in a future refactor. - - # req.req is only avail after unpack for URL - # pkgs repeat check_if_exists to uninstall-on-upgrade - # (#14) - if not self.ignore_installed: - req.check_if_exists(self.use_user_site) - - if req.satisfied_by: - should_modify = ( - self.upgrade_strategy != "to-satisfy-only" - or self.force_reinstall - or self.ignore_installed - or req.link.scheme == "file" - ) - if should_modify: - self._set_req_to_reinstall(req) - else: - logger.info( - "Requirement already satisfied (use --upgrade to upgrade): %s", - req, - ) - return dist - - def _resolve_one( - self, - requirement_set: RequirementSet, - req_to_install: InstallRequirement, - ) -> list[InstallRequirement]: - """Prepare a single requirements file. - - :return: A list of additional InstallRequirements to also install. - """ - # Tell user what we are doing for this requirement: - # obtain (editable), skipping, processing (local url), collecting - # (remote url or package name) - if req_to_install.constraint or req_to_install.prepared: - return [] - - req_to_install.prepared = True - - # Parse and return dependencies - dist = self._get_dist_for(req_to_install) - # This will raise UnsupportedPythonVersion if the given Python - # version isn't compatible with the distribution's Requires-Python. - _check_dist_requires_python( - dist, - version_info=self._py_version_info, - ignore_requires_python=self.ignore_requires_python, - ) - - more_reqs: list[InstallRequirement] = [] - - def add_req(subreq: Requirement, extras_requested: Iterable[str]) -> None: - # This idiosyncratically converts the Requirement to str and let - # make_install_req then parse it again into Requirement. But this is - # the legacy resolver so I'm just not going to bother refactoring. - sub_install_req = self._make_install_req(str(subreq), req_to_install) - parent_req_name = req_to_install.name - to_scan_again, add_to_parent = self._add_requirement_to_set( - requirement_set, - sub_install_req, - parent_req_name=parent_req_name, - extras_requested=extras_requested, - ) - if parent_req_name and add_to_parent: - self._discovered_dependencies[parent_req_name].append(add_to_parent) - more_reqs.extend(to_scan_again) - - with indent_log(): - # We add req_to_install before its dependencies, so that we - # can refer to it when adding dependencies. - assert req_to_install.name is not None - if not requirement_set.has_requirement(req_to_install.name): - # 'unnamed' requirements will get added here - # 'unnamed' requirements can only come from being directly - # provided by the user. - assert req_to_install.user_supplied - self._add_requirement_to_set( - requirement_set, req_to_install, parent_req_name=None - ) - - if not self.ignore_dependencies: - if req_to_install.extras: - logger.debug( - "Installing extra requirements: %r", - ",".join(req_to_install.extras), - ) - missing_requested = sorted( - set(req_to_install.extras) - set(dist.iter_provided_extras()) - ) - for missing in missing_requested: - logger.warning( - "%s %s does not provide the extra '%s'", - dist.raw_name, - dist.version, - missing, - ) - - available_requested = sorted( - set(dist.iter_provided_extras()) & set(req_to_install.extras) - ) - for subreq in dist.iter_dependencies(available_requested): - add_req(subreq, extras_requested=available_requested) - - return more_reqs - - def get_installation_order( - self, req_set: RequirementSet - ) -> list[InstallRequirement]: - """Create the installation order. - - The installation order is topological - requirements are installed - before the requiring thing. We break cycles at an arbitrary point, - and make no other guarantees. - """ - # The current implementation, which we may change at any point - # installs the user specified things in the order given, except when - # dependencies must come earlier to achieve topological order. - order = [] - ordered_reqs: set[InstallRequirement] = set() - - def schedule(req: InstallRequirement) -> None: - if req.satisfied_by or req in ordered_reqs: - return - if req.constraint: - return - ordered_reqs.add(req) - for dep in self._discovered_dependencies[req.name]: - schedule(dep) - order.append(req) - - for install_req in req_set.requirements.values(): - schedule(install_req) - return order diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index dd1a32b31d4f044789aa31e9e8c969bd3357b40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmXw!u}T9$5QcXRiUjl}tVGW9Fa#rFV=EFQb_>hi-C)M-?Jl!(YC2!TN3hJRSf;hH zHZR~V#=rRI8~!Q&IXOHSiloogH|F`3?O$>Wo4o{Y;$9qyV|n)>XeaHP9IoGQF4aQ> zipsP=)nsy}UOX*SApZmnN7Y#0x3!5-phHd;*;oryRBF29xp(K)NRRaE#aPdv3)V1b z?t;3-T18|if@v1!5uyqhN{x<zoUtWA^tNa8?hl{AVqNNVfUNatSg!Z4I^Xsdu4y+l P&A-G9KLaTx4HEqV7MDtl diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-314.pyc deleted file mode 100644 index 4f949f9f16e6347db7fa1f9829b265a68d617410..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11181 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 YZ4yo;kUbbc!2hs%pES6}kO`gtKO5n{ssI20 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-314.pyc deleted file mode 100644 index 00178a8f735bbdad0061bc3d17b3692cb2c8011d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37536 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 Pw^(yI`gZ~@3>yC*Mggn> diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-314.pyc deleted file mode 100644 index 274effa9371032ea3fe8669a1a787feb503bf79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39380 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 aG^&OhM);3YH9R!GY*HE5ISLtC{Qm$EZ29^C diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-314.pyc deleted file mode 100644 index c1baa6559d7472e7d30e0b2dbf338898758bec80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7974 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 A`~Uy| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-314.pyc deleted file mode 100644 index bdf93885e95eda70eb523a44e11c831d637c96e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13067 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 V<o<B~1*h;?;nu)^GY;?t@V|+wryKwP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-314.pyc deleted file mode 100644 index 842d69ab03d0ff211bf5d1e1365ab2ff14940c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7406 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 GY5xP33}(y# diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-314.pyc deleted file mode 100644 index b482959fef775e0fb622802c287304add7223f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21135 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 Pl$&S1_&?|>X#4*GJj~di diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-314.pyc deleted file mode 100644 index 09ebe594acdc9dbdefdc9863ca1d8301e06b5168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13436 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py deleted file mode 100644 index 03877b6c2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +++ /dev/null @@ -1,142 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterable -from dataclasses import dataclass -from typing import Optional - -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName -from pip._vendor.packaging.version import Version - -from pip._internal.models.link import Link, links_equivalent -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.hashes import Hashes - -CandidateLookup = tuple[Optional["Candidate"], Optional[InstallRequirement]] - - -def format_name(project: NormalizedName, extras: frozenset[NormalizedName]) -> str: - if not extras: - return project - extras_expr = ",".join(sorted(extras)) - return f"{project}[{extras_expr}]" - - -@dataclass(frozen=True) -class Constraint: - specifier: SpecifierSet - hashes: Hashes - links: frozenset[Link] - - @classmethod - def empty(cls) -> Constraint: - return Constraint(SpecifierSet(), Hashes(), frozenset()) - - @classmethod - def from_ireq(cls, ireq: InstallRequirement) -> Constraint: - links = frozenset([ireq.link]) if ireq.link else frozenset() - return Constraint(ireq.specifier, ireq.hashes(trust_internet=False), links) - - def __bool__(self) -> bool: - return bool(self.specifier) or bool(self.hashes) or bool(self.links) - - def __and__(self, other: InstallRequirement) -> Constraint: - if not isinstance(other, InstallRequirement): - return NotImplemented - specifier = self.specifier & other.specifier - hashes = self.hashes & other.hashes(trust_internet=False) - links = self.links - if other.link: - links = links.union([other.link]) - return Constraint(specifier, hashes, links) - - def is_satisfied_by(self, candidate: Candidate) -> bool: - # Reject if there are any mismatched URL constraints on this package. - if self.links and not all(_match_link(link, candidate) for link in self.links): - return False - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - return self.specifier.contains(candidate.version, prereleases=True) - - -class Requirement: - @property - def project_name(self) -> NormalizedName: - """The "project name" of a requirement. - - This is different from ``name`` if this requirement contains extras, - in which case ``name`` would contain the ``[...]`` part, while this - refers to the name of the project. - """ - raise NotImplementedError("Subclass should override") - - @property - def name(self) -> str: - """The name identifying this requirement in the resolver. - - This is different from ``project_name`` if this requirement contains - extras, where ``project_name`` would not contain the ``[...]`` part. - """ - raise NotImplementedError("Subclass should override") - - def is_satisfied_by(self, candidate: Candidate) -> bool: - return False - - def get_candidate_lookup(self) -> CandidateLookup: - raise NotImplementedError("Subclass should override") - - def format_for_error(self) -> str: - raise NotImplementedError("Subclass should override") - - -def _match_link(link: Link, candidate: Candidate) -> bool: - if candidate.source_link: - return links_equivalent(link, candidate.source_link) - return False - - -class Candidate: - @property - def project_name(self) -> NormalizedName: - """The "project name" of the candidate. - - This is different from ``name`` if this candidate contains extras, - in which case ``name`` would contain the ``[...]`` part, while this - refers to the name of the project. - """ - raise NotImplementedError("Override in subclass") - - @property - def name(self) -> str: - """The name identifying this candidate in the resolver. - - This is different from ``project_name`` if this candidate contains - extras, where ``project_name`` would not contain the ``[...]`` part. - """ - raise NotImplementedError("Override in subclass") - - @property - def version(self) -> Version: - raise NotImplementedError("Override in subclass") - - @property - def is_installed(self) -> bool: - raise NotImplementedError("Override in subclass") - - @property - def is_editable(self) -> bool: - raise NotImplementedError("Override in subclass") - - @property - def source_link(self) -> Link | None: - raise NotImplementedError("Override in subclass") - - def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: - raise NotImplementedError("Override in subclass") - - def get_install_requirement(self) -> InstallRequirement | None: - raise NotImplementedError("Override in subclass") - - def format_for_error(self) -> str: - raise NotImplementedError("Subclass should override") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py deleted file mode 100644 index aa126d488..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +++ /dev/null @@ -1,591 +0,0 @@ -from __future__ import annotations - -import logging -import sys -from collections.abc import Iterable -from typing import TYPE_CHECKING, Any, Union, cast - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import Version - -from pip._internal.exceptions import ( - FailedToPrepareCandidate, - HashError, - InstallationSubprocessError, - InvalidInstalledPackage, - MetadataInconsistent, - MetadataInvalid, -) -from pip._internal.metadata import BaseDistribution -from pip._internal.models.link import Link, links_equivalent -from pip._internal.models.wheel import Wheel -from pip._internal.req.constructors import ( - install_req_from_editable, - install_req_from_line, -) -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.direct_url_helpers import direct_url_from_link -from pip._internal.utils.misc import normalize_version_info - -from .base import Candidate, Requirement, format_name - -if TYPE_CHECKING: - from .factory import Factory - -logger = logging.getLogger(__name__) - -BaseCandidate = Union[ - "AlreadyInstalledCandidate", - "EditableCandidate", - "LinkCandidate", -] - -# Avoid conflicting with the PyPI package "Python". -REQUIRES_PYTHON_IDENTIFIER = cast(NormalizedName, "<Python from Requires-Python>") - - -def as_base_candidate(candidate: Candidate) -> BaseCandidate | None: - """The runtime version of BaseCandidate.""" - base_candidate_classes = ( - AlreadyInstalledCandidate, - EditableCandidate, - LinkCandidate, - ) - if isinstance(candidate, base_candidate_classes): - return candidate - return None - - -def make_install_req_from_link( - link: Link, template: InstallRequirement -) -> InstallRequirement: - assert not template.editable, "template is editable" - if template.req: - line = str(template.req) - else: - line = link.url - ireq = install_req_from_line( - line, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - isolated=template.isolated, - constraint=template.constraint, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.original_link = template.original_link - ireq.link = link - ireq.extras = template.extras - return ireq - - -def make_install_req_from_editable( - link: Link, template: InstallRequirement -) -> InstallRequirement: - assert template.editable, "template not editable" - if template.name: - req_string = f"{template.name} @ {link.url}" - else: - req_string = link.url - ireq = install_req_from_editable( - req_string, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - isolated=template.isolated, - constraint=template.constraint, - permit_editable_wheels=template.permit_editable_wheels, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.extras = template.extras - return ireq - - -def _make_install_req_from_dist( - dist: BaseDistribution, template: InstallRequirement -) -> InstallRequirement: - if template.req: - line = str(template.req) - elif template.link: - line = f"{dist.canonical_name} @ {template.link.url}" - else: - line = f"{dist.canonical_name}=={dist.version}" - ireq = install_req_from_line( - line, - user_supplied=template.user_supplied, - comes_from=template.comes_from, - isolated=template.isolated, - constraint=template.constraint, - hash_options=template.hash_options, - config_settings=template.config_settings, - ) - ireq.satisfied_by = dist - return ireq - - -class _InstallRequirementBackedCandidate(Candidate): - """A candidate backed by an ``InstallRequirement``. - - This represents a package request with the target not being already - in the environment, and needs to be fetched and installed. The backing - ``InstallRequirement`` is responsible for most of the leg work; this - class exposes appropriate information to the resolver. - - :param link: The link passed to the ``InstallRequirement``. The backing - ``InstallRequirement`` will use this link to fetch the distribution. - :param source_link: The link this candidate "originates" from. This is - different from ``link`` when the link is found in the wheel cache. - ``link`` would point to the wheel cache, while this points to the - found remote link (e.g. from pypi.org). - """ - - dist: BaseDistribution - is_installed = False - - def __init__( - self, - link: Link, - source_link: Link, - ireq: InstallRequirement, - factory: Factory, - name: NormalizedName | None = None, - version: Version | None = None, - ) -> None: - self._link = link - self._source_link = source_link - self._factory = factory - self._ireq = ireq - self._name = name - self._version = version - self.dist = self._prepare() - self._hash: int | None = None - - def __str__(self) -> str: - return f"{self.name} {self.version}" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._link)!r})" - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash((self.__class__, self._link)) - return self._hash - - def __eq__(self, other: Any) -> bool: - if isinstance(other, self.__class__): - return links_equivalent(self._link, other._link) - return False - - @property - def source_link(self) -> Link | None: - return self._source_link - - @property - def project_name(self) -> NormalizedName: - """The normalised name of the project the candidate refers to""" - if self._name is None: - self._name = self.dist.canonical_name - return self._name - - @property - def name(self) -> str: - return self.project_name - - @property - def version(self) -> Version: - if self._version is None: - self._version = self.dist.version - return self._version - - def format_for_error(self) -> str: - return ( - f"{self.name} {self.version} " - f"(from {self._link.file_path if self._link.is_file else self._link})" - ) - - def _prepare_distribution(self) -> BaseDistribution: - raise NotImplementedError("Override in subclass") - - def _check_metadata_consistency(self, dist: BaseDistribution) -> None: - """Check for consistency of project name and version of dist.""" - if self._name is not None and self._name != dist.canonical_name: - raise MetadataInconsistent( - self._ireq, - "name", - self._name, - dist.canonical_name, - ) - if self._version is not None and self._version != dist.version: - raise MetadataInconsistent( - self._ireq, - "version", - str(self._version), - str(dist.version), - ) - # check dependencies are valid - # TODO performance: this means we iterate the dependencies at least twice, - # we may want to cache parsed Requires-Dist - try: - list(dist.iter_dependencies(list(dist.iter_provided_extras()))) - except InvalidRequirement as e: - raise MetadataInvalid(self._ireq, str(e)) - - def _prepare(self) -> BaseDistribution: - try: - dist = self._prepare_distribution() - except HashError as e: - # Provide HashError the underlying ireq that caused it. This - # provides context for the resulting error message to show the - # offending line to the user. - e.req = self._ireq - raise - except InstallationSubprocessError as exc: - if isinstance(self._ireq.comes_from, InstallRequirement): - request_chain = self._ireq.comes_from.from_path() - else: - request_chain = self._ireq.comes_from - - if request_chain is None: - request_chain = "directly requested" - - raise FailedToPrepareCandidate( - package_name=self._ireq.name or str(self._link), - requirement_chain=request_chain, - failed_step=exc.command_description, - ) - - self._check_metadata_consistency(dist) - return dist - - def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: - # Emit the Requires-Python requirement first to fail fast on - # unsupported candidates and avoid pointless downloads/preparation. - yield self._factory.make_requires_python_requirement(self.dist.requires_python) - requires = self.dist.iter_dependencies() if with_requires else () - for r in requires: - yield from self._factory.make_requirements_from_spec(str(r), self._ireq) - - def get_install_requirement(self) -> InstallRequirement | None: - return self._ireq - - -class LinkCandidate(_InstallRequirementBackedCandidate): - is_editable = False - - def __init__( - self, - link: Link, - template: InstallRequirement, - factory: Factory, - name: NormalizedName | None = None, - version: Version | None = None, - ) -> None: - source_link = link - cache_entry = factory.get_wheel_cache_entry(source_link, name) - if cache_entry is not None: - logger.debug("Using cached wheel link: %s", cache_entry.link) - link = cache_entry.link - ireq = make_install_req_from_link(link, template) - assert ireq.link == link - if ireq.link.is_wheel and not ireq.link.is_file: - wheel = Wheel(ireq.link.filename) - wheel_name = wheel.name - assert name == wheel_name, f"{name!r} != {wheel_name!r} for wheel" - # Version may not be present for PEP 508 direct URLs - if version is not None: - wheel_version = Version(wheel.version) - assert ( - version == wheel_version - ), f"{version!r} != {wheel_version!r} for wheel {name}" - - if cache_entry is not None: - assert ireq.link.is_wheel - assert ireq.link.is_file - if cache_entry.persistent and template.link is template.original_link: - ireq.cached_wheel_source_link = source_link - if cache_entry.origin is not None: - ireq.download_info = cache_entry.origin - else: - # Legacy cache entry that does not have origin.json. - # download_info may miss the archive_info.hashes field. - ireq.download_info = direct_url_from_link( - source_link, link_is_in_wheel_cache=cache_entry.persistent - ) - - super().__init__( - link=link, - source_link=source_link, - ireq=ireq, - factory=factory, - name=name, - version=version, - ) - - def _prepare_distribution(self) -> BaseDistribution: - preparer = self._factory.preparer - return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) - - -class EditableCandidate(_InstallRequirementBackedCandidate): - is_editable = True - - def __init__( - self, - link: Link, - template: InstallRequirement, - factory: Factory, - name: NormalizedName | None = None, - version: Version | None = None, - ) -> None: - super().__init__( - link=link, - source_link=link, - ireq=make_install_req_from_editable(link, template), - factory=factory, - name=name, - version=version, - ) - - def _prepare_distribution(self) -> BaseDistribution: - return self._factory.preparer.prepare_editable_requirement(self._ireq) - - -class AlreadyInstalledCandidate(Candidate): - is_installed = True - source_link = None - - def __init__( - self, - dist: BaseDistribution, - template: InstallRequirement, - factory: Factory, - ) -> None: - self.dist = dist - self._ireq = _make_install_req_from_dist(dist, template) - self._factory = factory - self._version = None - - # This is just logging some messages, so we can do it eagerly. - # The returned dist would be exactly the same as self.dist because we - # set satisfied_by in _make_install_req_from_dist. - # TODO: Supply reason based on force_reinstall and upgrade_strategy. - skip_reason = "already satisfied" - factory.preparer.prepare_installed_requirement(self._ireq, skip_reason) - - def __str__(self) -> str: - return str(self.dist) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.dist!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, AlreadyInstalledCandidate): - return NotImplemented - return self.name == other.name and self.version == other.version - - def __hash__(self) -> int: - return hash((self.name, self.version)) - - @property - def project_name(self) -> NormalizedName: - return self.dist.canonical_name - - @property - def name(self) -> str: - return self.project_name - - @property - def version(self) -> Version: - if self._version is None: - self._version = self.dist.version - return self._version - - @property - def is_editable(self) -> bool: - return self.dist.editable - - def format_for_error(self) -> str: - return f"{self.name} {self.version} (Installed)" - - def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: - if not with_requires: - return - - try: - for r in self.dist.iter_dependencies(): - yield from self._factory.make_requirements_from_spec(str(r), self._ireq) - except InvalidRequirement as exc: - raise InvalidInstalledPackage(dist=self.dist, invalid_exc=exc) from None - - def get_install_requirement(self) -> InstallRequirement | None: - return None - - -class ExtrasCandidate(Candidate): - """A candidate that has 'extras', indicating additional dependencies. - - Requirements can be for a project with dependencies, something like - foo[extra]. The extras don't affect the project/version being installed - directly, but indicate that we need additional dependencies. We model that - by having an artificial ExtrasCandidate that wraps the "base" candidate. - - The ExtrasCandidate differs from the base in the following ways: - - 1. It has a unique name, of the form foo[extra]. This causes the resolver - to treat it as a separate node in the dependency graph. - 2. When we're getting the candidate's dependencies, - a) We specify that we want the extra dependencies as well. - b) We add a dependency on the base candidate. - See below for why this is needed. - 3. We return None for the underlying InstallRequirement, as the base - candidate will provide it, and we don't want to end up with duplicates. - - The dependency on the base candidate is needed so that the resolver can't - decide that it should recommend foo[extra1] version 1.0 and foo[extra2] - version 2.0. Having those candidates depend on foo=1.0 and foo=2.0 - respectively forces the resolver to recognise that this is a conflict. - """ - - def __init__( - self, - base: BaseCandidate, - extras: frozenset[str], - *, - comes_from: InstallRequirement | None = None, - ) -> None: - """ - :param comes_from: the InstallRequirement that led to this candidate if it - differs from the base's InstallRequirement. This will often be the - case in the sense that this candidate's requirement has the extras - while the base's does not. Unlike the InstallRequirement backed - candidates, this requirement is used solely for reporting purposes, - it does not do any leg work. - """ - self.base = base - self.extras = frozenset(canonicalize_name(e) for e in extras) - self._comes_from = comes_from if comes_from is not None else self.base._ireq - - def __str__(self) -> str: - name, rest = str(self.base).split(" ", 1) - return "{}[{}] {}".format(name, ",".join(self.extras), rest) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(base={self.base!r}, extras={self.extras!r})" - - def __hash__(self) -> int: - return hash((self.base, self.extras)) - - def __eq__(self, other: Any) -> bool: - if isinstance(other, self.__class__): - return self.base == other.base and self.extras == other.extras - return False - - @property - def project_name(self) -> NormalizedName: - return self.base.project_name - - @property - def name(self) -> str: - """The normalised name of the project the candidate refers to""" - return format_name(self.base.project_name, self.extras) - - @property - def version(self) -> Version: - return self.base.version - - def format_for_error(self) -> str: - return "{} [{}]".format( - self.base.format_for_error(), ", ".join(sorted(self.extras)) - ) - - @property - def is_installed(self) -> bool: - return self.base.is_installed - - @property - def is_editable(self) -> bool: - return self.base.is_editable - - @property - def source_link(self) -> Link | None: - return self.base.source_link - - def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: - factory = self.base._factory - - # Add a dependency on the exact base - # (See note 2b in the class docstring) - yield factory.make_requirement_from_candidate(self.base) - if not with_requires: - return - - # The user may have specified extras that the candidate doesn't - # support. We ignore any unsupported extras here. - valid_extras = self.extras.intersection(self.base.dist.iter_provided_extras()) - invalid_extras = self.extras.difference(self.base.dist.iter_provided_extras()) - for extra in sorted(invalid_extras): - logger.warning( - "%s %s does not provide the extra '%s'", - self.base.name, - self.version, - extra, - ) - - for r in self.base.dist.iter_dependencies(valid_extras): - yield from factory.make_requirements_from_spec( - str(r), - self._comes_from, - valid_extras, - ) - - def get_install_requirement(self) -> InstallRequirement | None: - # We don't return anything here, because we always - # depend on the base candidate, and we'll get the - # install requirement from that. - return None - - -class RequiresPythonCandidate(Candidate): - is_installed = False - source_link = None - - def __init__(self, py_version_info: tuple[int, ...] | None) -> None: - if py_version_info is not None: - version_info = normalize_version_info(py_version_info) - else: - version_info = sys.version_info[:3] - self._version = Version(".".join(str(c) for c in version_info)) - - # We don't need to implement __eq__() and __ne__() since there is always - # only one RequiresPythonCandidate in a resolution, i.e. the host Python. - # The built-in object.__eq__() and object.__ne__() do exactly what we want. - - def __str__(self) -> str: - return f"Python {self._version}" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self._version!r})" - - @property - def project_name(self) -> NormalizedName: - return REQUIRES_PYTHON_IDENTIFIER - - @property - def name(self) -> str: - return REQUIRES_PYTHON_IDENTIFIER - - @property - def version(self) -> Version: - return self._version - - def format_for_error(self) -> str: - return f"Python {self.version}" - - def iter_dependencies(self, with_requires: bool) -> Iterable[Requirement | None]: - return () - - def get_install_requirement(self) -> InstallRequirement | None: - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py deleted file mode 100644 index ede3e6b2b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +++ /dev/null @@ -1,856 +0,0 @@ -from __future__ import annotations - -import contextlib -import functools -import logging -from collections.abc import Iterable, Iterator, Mapping, Sequence -from typing import ( - TYPE_CHECKING, - Callable, - NamedTuple, - Protocol, - TypeVar, - cast, -) - -from pip._vendor.packaging.requirements import InvalidRequirement -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name -from pip._vendor.packaging.version import InvalidVersion, Version -from pip._vendor.resolvelib import ResolutionImpossible - -from pip._internal.cache import CacheEntry, WheelCache -from pip._internal.exceptions import ( - DistributionNotFound, - InstallationError, - InvalidInstalledPackage, - MetadataInconsistent, - MetadataInvalid, - UnsupportedPythonVersion, - UnsupportedWheel, -) -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import BaseDistribution, get_default_environment -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import ( - install_req_drop_extras, - install_req_from_link_and_ireq, -) -from pip._internal.req.req_install import ( - InstallRequirement, - check_invalid_constraint_type, -) -from pip._internal.resolution.base import InstallRequirementProvider -from pip._internal.utils.compatibility_tags import get_supported -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.packaging import get_requirement -from pip._internal.utils.virtualenv import running_under_virtualenv - -from .base import Candidate, Constraint, Requirement -from .candidates import ( - AlreadyInstalledCandidate, - BaseCandidate, - EditableCandidate, - ExtrasCandidate, - LinkCandidate, - RequiresPythonCandidate, - as_base_candidate, -) -from .found_candidates import FoundCandidates, IndexCandidateInfo -from .requirements import ( - ExplicitRequirement, - RequiresPythonRequirement, - SpecifierRequirement, - SpecifierWithoutExtrasRequirement, - UnsatisfiableRequirement, -) - -if TYPE_CHECKING: - - class ConflictCause(Protocol): - requirement: RequiresPythonRequirement - parent: Candidate - - -logger = logging.getLogger(__name__) - -C = TypeVar("C") -Cache = dict[Link, C] - - -class CollectedRootRequirements(NamedTuple): - requirements: list[Requirement] - constraints: dict[str, Constraint] - user_requested: dict[str, int] - - -class Factory: - def __init__( - self, - finder: PackageFinder, - preparer: RequirementPreparer, - make_install_req: InstallRequirementProvider, - wheel_cache: WheelCache | None, - use_user_site: bool, - force_reinstall: bool, - ignore_installed: bool, - ignore_requires_python: bool, - py_version_info: tuple[int, ...] | None = None, - ) -> None: - self._finder = finder - self.preparer = preparer - self._wheel_cache = wheel_cache - self._python_candidate = RequiresPythonCandidate(py_version_info) - self._make_install_req_from_spec = make_install_req - self._use_user_site = use_user_site - self._force_reinstall = force_reinstall - self._ignore_requires_python = ignore_requires_python - - self._build_failures: Cache[InstallationError] = {} - self._link_candidate_cache: Cache[LinkCandidate] = {} - self._editable_candidate_cache: Cache[EditableCandidate] = {} - self._installed_candidate_cache: dict[str, AlreadyInstalledCandidate] = {} - self._extras_candidate_cache: dict[ - tuple[int, frozenset[NormalizedName]], ExtrasCandidate - ] = {} - self._supported_tags_cache = get_supported() - - if not ignore_installed: - env = get_default_environment() - self._installed_dists = { - dist.canonical_name: dist - for dist in env.iter_installed_distributions(local_only=False) - } - else: - self._installed_dists = {} - - @property - def force_reinstall(self) -> bool: - return self._force_reinstall - - def _fail_if_link_is_unsupported_wheel(self, link: Link) -> None: - if not link.is_wheel: - return - wheel = Wheel(link.filename) - if wheel.supported(self._finder.target_python.get_unsorted_tags()): - return - msg = f"{link.filename} is not a supported wheel on this platform." - raise UnsupportedWheel(msg) - - def _make_extras_candidate( - self, - base: BaseCandidate, - extras: frozenset[str], - *, - comes_from: InstallRequirement | None = None, - ) -> ExtrasCandidate: - cache_key = (id(base), frozenset(canonicalize_name(e) for e in extras)) - try: - candidate = self._extras_candidate_cache[cache_key] - except KeyError: - candidate = ExtrasCandidate(base, extras, comes_from=comes_from) - self._extras_candidate_cache[cache_key] = candidate - return candidate - - def _make_candidate_from_dist( - self, - dist: BaseDistribution, - extras: frozenset[str], - template: InstallRequirement, - ) -> Candidate: - try: - base = self._installed_candidate_cache[dist.canonical_name] - except KeyError: - base = AlreadyInstalledCandidate(dist, template, factory=self) - self._installed_candidate_cache[dist.canonical_name] = base - if not extras: - return base - return self._make_extras_candidate(base, extras, comes_from=template) - - def _make_candidate_from_link( - self, - link: Link, - extras: frozenset[str], - template: InstallRequirement, - name: NormalizedName | None, - version: Version | None, - ) -> Candidate | None: - base: BaseCandidate | None = self._make_base_candidate_from_link( - link, template, name, version - ) - if not extras or base is None: - return base - return self._make_extras_candidate(base, extras, comes_from=template) - - def _make_base_candidate_from_link( - self, - link: Link, - template: InstallRequirement, - name: NormalizedName | None, - version: Version | None, - ) -> BaseCandidate | None: - # TODO: Check already installed candidate, and use it if the link and - # editable flag match. - - if link in self._build_failures: - # We already tried this candidate before, and it does not build. - # Don't bother trying again. - return None - - if template.editable: - if link not in self._editable_candidate_cache: - try: - self._editable_candidate_cache[link] = EditableCandidate( - link, - template, - factory=self, - name=name, - version=version, - ) - except (MetadataInconsistent, MetadataInvalid) as e: - logger.info( - "Discarding [blue underline]%s[/]: [yellow]%s[reset]", - link, - e, - extra={"markup": True}, - ) - self._build_failures[link] = e - return None - - return self._editable_candidate_cache[link] - else: - if link not in self._link_candidate_cache: - try: - self._link_candidate_cache[link] = LinkCandidate( - link, - template, - factory=self, - name=name, - version=version, - ) - except MetadataInconsistent as e: - logger.info( - "Discarding [blue underline]%s[/]: [yellow]%s[reset]", - link, - e, - extra={"markup": True}, - ) - self._build_failures[link] = e - return None - return self._link_candidate_cache[link] - - def _iter_found_candidates( - self, - ireqs: Sequence[InstallRequirement], - specifier: SpecifierSet, - hashes: Hashes, - prefers_installed: bool, - incompatible_ids: set[int], - ) -> Iterable[Candidate]: - if not ireqs: - return () - - # The InstallRequirement implementation requires us to give it a - # "template". Here we just choose the first requirement to represent - # all of them. - # Hopefully the Project model can correct this mismatch in the future. - template = ireqs[0] - assert template.req, "Candidates found on index must be PEP 508" - name = canonicalize_name(template.req.name) - - extras: frozenset[str] = frozenset() - for ireq in ireqs: - assert ireq.req, "Candidates found on index must be PEP 508" - specifier &= ireq.req.specifier - hashes &= ireq.hashes(trust_internet=False) - extras |= frozenset(ireq.extras) - - def _get_installed_candidate() -> Candidate | None: - """Get the candidate for the currently-installed version.""" - # If --force-reinstall is set, we want the version from the index - # instead, so we "pretend" there is nothing installed. - if self._force_reinstall: - return None - try: - installed_dist = self._installed_dists[name] - except KeyError: - return None - - try: - # Don't use the installed distribution if its version - # does not fit the current dependency graph. - if not specifier.contains(installed_dist.version, prereleases=True): - return None - except InvalidVersion as e: - raise InvalidInstalledPackage(dist=installed_dist, invalid_exc=e) - - candidate = self._make_candidate_from_dist( - dist=installed_dist, - extras=extras, - template=template, - ) - # The candidate is a known incompatibility. Don't use it. - if id(candidate) in incompatible_ids: - return None - return candidate - - def iter_index_candidate_infos() -> Iterator[IndexCandidateInfo]: - result = self._finder.find_best_candidate( - project_name=name, - specifier=specifier, - hashes=hashes, - ) - icans = result.applicable_candidates - - # PEP 592: Yanked releases are ignored unless the specifier - # explicitly pins a version (via '==' or '===') that can be - # solely satisfied by a yanked release. - all_yanked = all(ican.link.is_yanked for ican in icans) - - def is_pinned(specifier: SpecifierSet) -> bool: - for sp in specifier: - if sp.operator == "===": - return True - if sp.operator != "==": - continue - if sp.version.endswith(".*"): - continue - return True - return False - - pinned = is_pinned(specifier) - - # PackageFinder returns earlier versions first, so we reverse. - for ican in reversed(icans): - if not (all_yanked and pinned) and ican.link.is_yanked: - continue - func = functools.partial( - self._make_candidate_from_link, - link=ican.link, - extras=extras, - template=template, - name=name, - version=ican.version, - ) - yield ican.version, func - - return FoundCandidates( - iter_index_candidate_infos, - _get_installed_candidate(), - prefers_installed, - incompatible_ids, - ) - - def _iter_explicit_candidates_from_base( - self, - base_requirements: Iterable[Requirement], - extras: frozenset[str], - ) -> Iterator[Candidate]: - """Produce explicit candidates from the base given an extra-ed package. - - :param base_requirements: Requirements known to the resolver. The - requirements are guaranteed to not have extras. - :param extras: The extras to inject into the explicit requirements' - candidates. - """ - for req in base_requirements: - lookup_cand, _ = req.get_candidate_lookup() - if lookup_cand is None: # Not explicit. - continue - # We've stripped extras from the identifier, and should always - # get a BaseCandidate here, unless there's a bug elsewhere. - base_cand = as_base_candidate(lookup_cand) - assert base_cand is not None, "no extras here" - yield self._make_extras_candidate(base_cand, extras) - - def _iter_candidates_from_constraints( - self, - identifier: str, - constraint: Constraint, - template: InstallRequirement, - ) -> Iterator[Candidate]: - """Produce explicit candidates from constraints. - - This creates "fake" InstallRequirement objects that are basically clones - of what "should" be the template, but with original_link set to link. - """ - for link in constraint.links: - self._fail_if_link_is_unsupported_wheel(link) - candidate = self._make_base_candidate_from_link( - link, - template=install_req_from_link_and_ireq(link, template), - name=canonicalize_name(identifier), - version=None, - ) - if candidate: - yield candidate - - def find_candidates( - self, - identifier: str, - requirements: Mapping[str, Iterable[Requirement]], - incompatibilities: Mapping[str, Iterator[Candidate]], - constraint: Constraint, - prefers_installed: bool, - is_satisfied_by: Callable[[Requirement, Candidate], bool], - ) -> Iterable[Candidate]: - # Collect basic lookup information from the requirements. - explicit_candidates: set[Candidate] = set() - ireqs: list[InstallRequirement] = [] - for req in requirements[identifier]: - cand, ireq = req.get_candidate_lookup() - if cand is not None: - explicit_candidates.add(cand) - if ireq is not None: - ireqs.append(ireq) - - # If the current identifier contains extras, add requires and explicit - # candidates from entries from extra-less identifier. - with contextlib.suppress(InvalidRequirement): - parsed_requirement = get_requirement(identifier) - if parsed_requirement.name != identifier: - explicit_candidates.update( - self._iter_explicit_candidates_from_base( - requirements.get(parsed_requirement.name, ()), - frozenset(parsed_requirement.extras), - ), - ) - for req in requirements.get(parsed_requirement.name, []): - _, ireq = req.get_candidate_lookup() - if ireq is not None: - ireqs.append(ireq) - - # Add explicit candidates from constraints. We only do this if there are - # known ireqs, which represent requirements not already explicit. If - # there are no ireqs, we're constraining already-explicit requirements, - # which is handled later when we return the explicit candidates. - if ireqs: - try: - explicit_candidates.update( - self._iter_candidates_from_constraints( - identifier, - constraint, - template=ireqs[0], - ), - ) - except UnsupportedWheel: - # If we're constrained to install a wheel incompatible with the - # target architecture, no candidates will ever be valid. - return () - - # Since we cache all the candidates, incompatibility identification - # can be made quicker by comparing only the id() values. - incompat_ids = {id(c) for c in incompatibilities.get(identifier, ())} - - # If none of the requirements want an explicit candidate, we can ask - # the finder for candidates. - if not explicit_candidates: - return self._iter_found_candidates( - ireqs, - constraint.specifier, - constraint.hashes, - prefers_installed, - incompat_ids, - ) - - return ( - c - for c in explicit_candidates - if id(c) not in incompat_ids - and constraint.is_satisfied_by(c) - and all(is_satisfied_by(req, c) for req in requirements[identifier]) - ) - - def _make_requirements_from_install_req( - self, ireq: InstallRequirement, requested_extras: Iterable[str] - ) -> Iterator[Requirement]: - """ - Returns requirement objects associated with the given InstallRequirement. In - most cases this will be a single object but the following special cases exist: - - the InstallRequirement has markers that do not apply -> result is empty - - the InstallRequirement has both a constraint (or link) and extras - -> result is split in two requirement objects: one with the constraint - (or link) and one with the extra. This allows centralized constraint - handling for the base, resulting in fewer candidate rejections. - """ - if not ireq.match_markers(requested_extras): - logger.info( - "Ignoring %s: markers '%s' don't match your environment", - ireq.name, - ireq.markers, - ) - elif not ireq.link: - if ireq.extras and ireq.req is not None and ireq.req.specifier: - yield SpecifierWithoutExtrasRequirement(ireq) - yield SpecifierRequirement(ireq) - else: - self._fail_if_link_is_unsupported_wheel(ireq.link) - # Always make the link candidate for the base requirement to make it - # available to `find_candidates` for explicit candidate lookup for any - # set of extras. - # The extras are required separately via a second requirement. - cand = self._make_base_candidate_from_link( - ireq.link, - template=install_req_drop_extras(ireq) if ireq.extras else ireq, - name=canonicalize_name(ireq.name) if ireq.name else None, - version=None, - ) - if cand is None: - # There's no way we can satisfy a URL requirement if the underlying - # candidate fails to build. An unnamed URL must be user-supplied, so - # we fail eagerly. If the URL is named, an unsatisfiable requirement - # can make the resolver do the right thing, either backtrack (and - # maybe find some other requirement that's buildable) or raise a - # ResolutionImpossible eventually. - if not ireq.name: - raise self._build_failures[ireq.link] - yield UnsatisfiableRequirement(canonicalize_name(ireq.name)) - else: - # require the base from the link - yield self.make_requirement_from_candidate(cand) - if ireq.extras: - # require the extras on top of the base candidate - yield self.make_requirement_from_candidate( - self._make_extras_candidate(cand, frozenset(ireq.extras)) - ) - - def collect_root_requirements( - self, root_ireqs: list[InstallRequirement] - ) -> CollectedRootRequirements: - collected = CollectedRootRequirements([], {}, {}) - for i, ireq in enumerate(root_ireqs): - if ireq.constraint: - # Ensure we only accept valid constraints - problem = check_invalid_constraint_type(ireq) - if problem: - raise InstallationError(problem) - if not ireq.match_markers(): - continue - assert ireq.name, "Constraint must be named" - name = canonicalize_name(ireq.name) - if name in collected.constraints: - collected.constraints[name] &= ireq - else: - collected.constraints[name] = Constraint.from_ireq(ireq) - else: - reqs = list( - self._make_requirements_from_install_req( - ireq, - requested_extras=(), - ) - ) - if not reqs: - continue - template = reqs[0] - if ireq.user_supplied and template.name not in collected.user_requested: - collected.user_requested[template.name] = i - collected.requirements.extend(reqs) - # Put requirements with extras at the end of the root requires. This does not - # affect resolvelib's picking preference but it does affect its initial criteria - # population: by putting extras at the end we enable the candidate finder to - # present resolvelib with a smaller set of candidates to resolvelib, already - # taking into account any non-transient constraints on the associated base. This - # means resolvelib will have fewer candidates to visit and reject. - # Python's list sort is stable, meaning relative order is kept for objects with - # the same key. - collected.requirements.sort(key=lambda r: r.name != r.project_name) - return collected - - def make_requirement_from_candidate( - self, candidate: Candidate - ) -> ExplicitRequirement: - return ExplicitRequirement(candidate) - - def make_requirements_from_spec( - self, - specifier: str, - comes_from: InstallRequirement | None, - requested_extras: Iterable[str] = (), - ) -> Iterator[Requirement]: - """ - Returns requirement objects associated with the given specifier. In most cases - this will be a single object but the following special cases exist: - - the specifier has markers that do not apply -> result is empty - - the specifier has both a constraint and extras -> result is split - in two requirement objects: one with the constraint and one with the - extra. This allows centralized constraint handling for the base, - resulting in fewer candidate rejections. - """ - ireq = self._make_install_req_from_spec(specifier, comes_from) - return self._make_requirements_from_install_req(ireq, requested_extras) - - def make_requires_python_requirement( - self, - specifier: SpecifierSet, - ) -> Requirement | None: - if self._ignore_requires_python: - return None - # Don't bother creating a dependency for an empty Requires-Python. - if not str(specifier): - return None - return RequiresPythonRequirement(specifier, self._python_candidate) - - def get_wheel_cache_entry(self, link: Link, name: str | None) -> CacheEntry | None: - """Look up the link in the wheel cache. - - If ``preparer.require_hashes`` is True, don't use the wheel cache, - because cached wheels, always built locally, have different hashes - than the files downloaded from the index server and thus throw false - hash mismatches. Furthermore, cached wheels at present have - nondeterministic contents due to file modification times. - """ - if self._wheel_cache is None: - return None - return self._wheel_cache.get_cache_entry( - link=link, - package_name=name, - supported_tags=self._supported_tags_cache, - ) - - def get_dist_to_uninstall(self, candidate: Candidate) -> BaseDistribution | None: - # TODO: Are there more cases this needs to return True? Editable? - dist = self._installed_dists.get(candidate.project_name) - if dist is None: # Not installed, no uninstallation required. - return None - - # We're installing into global site. The current installation must - # be uninstalled, no matter it's in global or user site, because the - # user site installation has precedence over global. - if not self._use_user_site: - return dist - - # We're installing into user site. Remove the user site installation. - if dist.in_usersite: - return dist - - # We're installing into user site, but the installed incompatible - # package is in global site. We can't uninstall that, and would let - # the new user installation to "shadow" it. But shadowing won't work - # in virtual environments, so we error out. - if running_under_virtualenv() and dist.in_site_packages: - message = ( - f"Will not install to the user site because it will lack " - f"sys.path precedence to {dist.raw_name} in {dist.location}" - ) - raise InstallationError(message) - return None - - def _report_requires_python_error( - self, causes: Sequence[ConflictCause] - ) -> UnsupportedPythonVersion: - assert causes, "Requires-Python error reported with no cause" - - version = self._python_candidate.version - - if len(causes) == 1: - specifier = str(causes[0].requirement.specifier) - message = ( - f"Package {causes[0].parent.name!r} requires a different " - f"Python: {version} not in {specifier!r}" - ) - return UnsupportedPythonVersion(message) - - message = f"Packages require a different Python. {version} not in:" - for cause in causes: - package = cause.parent.format_for_error() - specifier = str(cause.requirement.specifier) - message += f"\n{specifier!r} (required by {package})" - return UnsupportedPythonVersion(message) - - def _report_single_requirement_conflict( - self, req: Requirement, parent: Candidate | None - ) -> DistributionNotFound: - if parent is None: - req_disp = str(req) - else: - req_disp = f"{req} (from {parent.name})" - - cands = self._finder.find_all_candidates(req.project_name) - skipped_by_requires_python = self._finder.requires_python_skipped_reasons() - - versions_set: set[Version] = set() - yanked_versions_set: set[Version] = set() - for c in cands: - is_yanked = c.link.is_yanked if c.link else False - if is_yanked: - yanked_versions_set.add(c.version) - else: - versions_set.add(c.version) - - versions = [str(v) for v in sorted(versions_set)] - yanked_versions = [str(v) for v in sorted(yanked_versions_set)] - - if yanked_versions: - # Saying "version X is yanked" isn't entirely accurate. - # https://github.com/pypa/pip/issues/11745#issuecomment-1402805842 - logger.critical( - "Ignored the following yanked versions: %s", - ", ".join(yanked_versions) or "none", - ) - if skipped_by_requires_python: - logger.critical( - "Ignored the following versions that require a different python " - "version: %s", - "; ".join(skipped_by_requires_python) or "none", - ) - - # Check if only final releases are allowed for this package - version_type = "version" - if self._finder.release_control is not None: - allows_pre = self._finder.release_control.allows_prereleases( - canonicalize_name(req.project_name) - ) - if allows_pre is False: - version_type = "final version" - - logger.critical( - "Could not find a %s that satisfies the requirement %s " - "(from versions: %s)", - version_type, - req_disp, - ", ".join(versions) or "none", - ) - if str(req) == "requirements.txt": - logger.info( - "HINT: You are attempting to install a package literally " - 'named "requirements.txt" (which cannot exist). Consider ' - "using the '-r' flag to install the packages listed in " - "requirements.txt" - ) - - return DistributionNotFound(f"No matching distribution found for {req}") - - def _has_any_candidates(self, project_name: str) -> bool: - """ - Check if there are any candidates available for the project name. - """ - return any( - self.find_candidates( - project_name, - requirements={project_name: []}, - incompatibilities={}, - constraint=Constraint.empty(), - prefers_installed=True, - is_satisfied_by=lambda r, c: True, - ) - ) - - def get_installation_error( - self, - e: ResolutionImpossible[Requirement, Candidate], - constraints: dict[str, Constraint], - ) -> InstallationError: - assert e.causes, "Installation error reported with no cause" - - # If one of the things we can't solve is "we need Python X.Y", - # that is what we report. - requires_python_causes = [ - cause - for cause in e.causes - if isinstance(cause.requirement, RequiresPythonRequirement) - and not cause.requirement.is_satisfied_by(self._python_candidate) - ] - if requires_python_causes: - # The comprehension above makes sure all Requirement instances are - # RequiresPythonRequirement, so let's cast for convenience. - return self._report_requires_python_error( - cast("Sequence[ConflictCause]", requires_python_causes), - ) - - # Otherwise, we have a set of causes which can't all be satisfied - # at once. - - # The simplest case is when we have *one* cause that can't be - # satisfied. We just report that case. - if len(e.causes) == 1: - req, parent = next(iter(e.causes)) - if req.name not in constraints: - return self._report_single_requirement_conflict(req, parent) - - # OK, we now have a list of requirements that can't all be - # satisfied at once. - - # A couple of formatting helpers - def text_join(parts: list[str]) -> str: - if len(parts) == 1: - return parts[0] - - return ", ".join(parts[:-1]) + " and " + parts[-1] - - def describe_trigger(parent: Candidate) -> str: - ireq = parent.get_install_requirement() - if not ireq or not ireq.comes_from: - return f"{parent.name}=={parent.version}" - if isinstance(ireq.comes_from, InstallRequirement): - return str(ireq.comes_from.name) - return str(ireq.comes_from) - - triggers = set() - for req, parent in e.causes: - if parent is None: - # This is a root requirement, so we can report it directly - trigger = req.format_for_error() - else: - trigger = describe_trigger(parent) - triggers.add(trigger) - - if triggers: - info = text_join(sorted(triggers)) - else: - info = "the requested packages" - - msg = ( - f"Cannot install {info} because these package versions " - "have conflicting dependencies." - ) - logger.critical(msg) - msg = "\nThe conflict is caused by:" - - relevant_constraints = set() - for req, parent in e.causes: - if req.name in constraints: - relevant_constraints.add(req.name) - msg = msg + "\n " - if parent: - msg = msg + f"{parent.name} {parent.version} depends on " - else: - msg = msg + "The user requested " - msg = msg + req.format_for_error() - for key in relevant_constraints: - spec = constraints[key].specifier - msg += f"\n The user requested (constraint) {key}{spec}" - - # Check for causes that had no candidates - causes = set() - for req, _ in e.causes: - causes.add(req.name) - - no_candidates = {c for c in causes if not self._has_any_candidates(c)} - if no_candidates: - msg = ( - msg - + "\n\n" - + "Additionally, some packages in these conflicts have no " - + "matching distributions available for your environment:" - + "\n " - + "\n ".join(sorted(no_candidates)) - ) - - msg = ( - msg - + "\n\n" - + "To fix this you could try to:\n" - + "1. loosen the range of package versions you've specified\n" - + "2. remove package versions to allow pip to attempt to solve " - + "the dependency conflict\n" - ) - - logger.info(msg) - - return DistributionNotFound( - "ResolutionImpossible: for help visit " - "https://pip.pypa.io/en/latest/topics/dependency-resolution/" - "#dealing-with-dependency-conflicts" - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py deleted file mode 100644 index f60653d21..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +++ /dev/null @@ -1,166 +0,0 @@ -"""Utilities to lazily create and visit candidates found. - -Creating and visiting a candidate is a *very* costly operation. It involves -fetching, extracting, potentially building modules from source, and verifying -distribution metadata. It is therefore crucial for performance to keep -everything here lazy all the way down, so we only touch candidates that we -absolutely need, and not "download the world" when we only need one version of -something. -""" - -from __future__ import annotations - -import logging -from collections.abc import Iterator, Sequence -from typing import Any, Callable, Optional - -from pip._vendor.packaging.version import _BaseVersion - -from pip._internal.exceptions import MetadataInvalid - -from .base import Candidate - -logger = logging.getLogger(__name__) - -IndexCandidateInfo = tuple[_BaseVersion, Callable[[], Optional[Candidate]]] - - -def _iter_built(infos: Iterator[IndexCandidateInfo]) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the package is not already installed. Candidates - from index come later in their normal ordering. - """ - versions_found: set[_BaseVersion] = set() - for version, func in infos: - if version in versions_found: - continue - try: - candidate = func() - except MetadataInvalid as e: - logger.warning( - "Ignoring version %s of %s since it has invalid metadata:\n" - "%s\n" - "Please use pip<24.1 if you need to use this version.", - version, - e.ireq.name, - e, - ) - # Mark version as found to avoid trying other candidates with the same - # version, since they most likely have invalid metadata as well. - versions_found.add(version) - else: - if candidate is None: - continue - yield candidate - versions_found.add(version) - - -def _iter_built_with_prepended( - installed: Candidate, infos: Iterator[IndexCandidateInfo] -) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the resolver prefers the already-installed - candidate and NOT to upgrade. The installed candidate is therefore - always yielded first, and candidates from index come later in their - normal ordering, except skipped when the version is already installed. - """ - yield installed - versions_found: set[_BaseVersion] = {installed.version} - for version, func in infos: - if version in versions_found: - continue - candidate = func() - if candidate is None: - continue - yield candidate - versions_found.add(version) - - -def _iter_built_with_inserted( - installed: Candidate, infos: Iterator[IndexCandidateInfo] -) -> Iterator[Candidate]: - """Iterator for ``FoundCandidates``. - - This iterator is used when the resolver prefers to upgrade an - already-installed package. Candidates from index are returned in their - normal ordering, except replaced when the version is already installed. - - The implementation iterates through and yields other candidates, inserting - the installed candidate exactly once before we start yielding older or - equivalent candidates, or after all other candidates if they are all newer. - """ - versions_found: set[_BaseVersion] = set() - for version, func in infos: - if version in versions_found: - continue - # If the installed candidate is better, yield it first. - if installed.version >= version: - yield installed - versions_found.add(installed.version) - candidate = func() - if candidate is None: - continue - yield candidate - versions_found.add(version) - - # If the installed candidate is older than all other candidates. - if installed.version not in versions_found: - yield installed - - -class FoundCandidates(Sequence[Candidate]): - """A lazy sequence to provide candidates to the resolver. - - The intended usage is to return this from `find_matches()` so the resolver - can iterate through the sequence multiple times, but only access the index - page when remote packages are actually needed. This improve performances - when suitable candidates are already installed on disk. - """ - - def __init__( - self, - get_infos: Callable[[], Iterator[IndexCandidateInfo]], - installed: Candidate | None, - prefers_installed: bool, - incompatible_ids: set[int], - ): - self._get_infos = get_infos - self._installed = installed - self._prefers_installed = prefers_installed - self._incompatible_ids = incompatible_ids - self._bool: bool | None = None - - def __getitem__(self, index: Any) -> Any: - # Implemented to satisfy the ABC check. This is not needed by the - # resolver, and should not be used by the provider either (for - # performance reasons). - raise NotImplementedError("don't do this") - - def __iter__(self) -> Iterator[Candidate]: - infos = self._get_infos() - if not self._installed: - iterator = _iter_built(infos) - elif self._prefers_installed: - iterator = _iter_built_with_prepended(self._installed, infos) - else: - iterator = _iter_built_with_inserted(self._installed, infos) - return (c for c in iterator if id(c) not in self._incompatible_ids) - - def __len__(self) -> int: - # Implemented to satisfy the ABC check. This is not needed by the - # resolver, and should not be used by the provider either (for - # performance reasons). - raise NotImplementedError("don't do this") - - def __bool__(self) -> bool: - if self._bool is not None: - return self._bool - - if self._prefers_installed and self._installed: - self._bool = True - return True - - self._bool = any(self) - return self._bool diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py deleted file mode 100644 index 994748dba..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +++ /dev/null @@ -1,285 +0,0 @@ -from __future__ import annotations - -import math -from collections.abc import Iterable, Iterator, Mapping, Sequence -from functools import cache -from typing import ( - TYPE_CHECKING, - TypeVar, -) - -from pip._vendor.resolvelib.providers import AbstractProvider - -from pip._internal.req.req_install import InstallRequirement - -from .base import Candidate, Constraint, Requirement -from .candidates import REQUIRES_PYTHON_IDENTIFIER -from .factory import Factory -from .requirements import ExplicitRequirement - -if TYPE_CHECKING: - from pip._vendor.resolvelib.providers import Preference - from pip._vendor.resolvelib.resolvers import RequirementInformation - - PreferenceInformation = RequirementInformation[Requirement, Candidate] - - _ProviderBase = AbstractProvider[Requirement, Candidate, str] -else: - _ProviderBase = AbstractProvider - -# Notes on the relationship between the provider, the factory, and the -# candidate and requirement classes. -# -# The provider is a direct implementation of the resolvelib class. Its role -# is to deliver the API that resolvelib expects. -# -# Rather than work with completely abstract "requirement" and "candidate" -# concepts as resolvelib does, pip has concrete classes implementing these two -# ideas. The API of Requirement and Candidate objects are defined in the base -# classes, but essentially map fairly directly to the equivalent provider -# methods. In particular, `find_matches` and `is_satisfied_by` are -# requirement methods, and `get_dependencies` is a candidate method. -# -# The factory is the interface to pip's internal mechanisms. It is stateless, -# and is created by the resolver and held as a property of the provider. It is -# responsible for creating Requirement and Candidate objects, and provides -# services to those objects (access to pip's finder and preparer). - - -D = TypeVar("D") -V = TypeVar("V") - - -def _get_with_identifier( - mapping: Mapping[str, V], - identifier: str, - default: D, -) -> D | V: - """Get item from a package name lookup mapping with a resolver identifier. - - This extra logic is needed when the target mapping is keyed by package - name, which cannot be directly looked up with an identifier (which may - contain requested extras). Additional logic is added to also look up a value - by "cleaning up" the extras from the identifier. - """ - if identifier in mapping: - return mapping[identifier] - # HACK: Theoretically we should check whether this identifier is a valid - # "NAME[EXTRAS]" format, and parse out the name part with packaging or - # some regular expression. But since pip's resolver only spits out three - # kinds of identifiers: normalized PEP 503 names, normalized names plus - # extras, and Requires-Python, we can cheat a bit here. - name, open_bracket, _ = identifier.partition("[") - if open_bracket and name in mapping: - return mapping[name] - return default - - -class PipProvider(_ProviderBase): - """Pip's provider implementation for resolvelib. - - :params constraints: A mapping of constraints specified by the user. Keys - are canonicalized project names. - :params ignore_dependencies: Whether the user specified ``--no-deps``. - :params upgrade_strategy: The user-specified upgrade strategy. - :params user_requested: A set of canonicalized package names that the user - supplied for pip to install/upgrade. - """ - - def __init__( - self, - factory: Factory, - constraints: dict[str, Constraint], - ignore_dependencies: bool, - upgrade_strategy: str, - user_requested: dict[str, int], - ) -> None: - self._factory = factory - self._constraints = constraints - self._ignore_dependencies = ignore_dependencies - self._upgrade_strategy = upgrade_strategy - self._user_requested = user_requested - - @property - def constraints(self) -> dict[str, Constraint]: - """Public view of user-specified constraints. - - Exposes the provider's constraints mapping without encouraging - external callers to reach into private attributes. - """ - return self._constraints - - def identify(self, requirement_or_candidate: Requirement | Candidate) -> str: - return requirement_or_candidate.name - - def narrow_requirement_selection( - self, - identifiers: Iterable[str], - resolutions: Mapping[str, Candidate], - candidates: Mapping[str, Iterator[Candidate]], - information: Mapping[str, Iterator[PreferenceInformation]], - backtrack_causes: Sequence[PreferenceInformation], - ) -> Iterable[str]: - """Produce a subset of identifiers that should be considered before others. - - Currently pip narrows the following selection: - * Requires-Python, if present is always returned by itself - * Backtrack causes are considered next because they can be identified - in linear time here, whereas because get_preference() is called - for each identifier, it would be quadratic to check for them there. - Further, the current backtrack causes likely need to be resolved - before other requirements as a resolution can't be found while - there is a conflict. - """ - backtrack_identifiers = set() - for info in backtrack_causes: - backtrack_identifiers.add(info.requirement.name) - if info.parent is not None: - backtrack_identifiers.add(info.parent.name) - - current_backtrack_causes = [] - for identifier in identifiers: - # Requires-Python has only one candidate and the check is basically - # free, so we always do it first to avoid needless work if it fails. - # This skips calling get_preference() for all other identifiers. - if identifier == REQUIRES_PYTHON_IDENTIFIER: - return [identifier] - - # Check if this identifier is a backtrack cause - if identifier in backtrack_identifiers: - current_backtrack_causes.append(identifier) - continue - - if current_backtrack_causes: - return current_backtrack_causes - - return identifiers - - def get_preference( - self, - identifier: str, - resolutions: Mapping[str, Candidate], - candidates: Mapping[str, Iterator[Candidate]], - information: Mapping[str, Iterable[PreferenceInformation]], - backtrack_causes: Sequence[PreferenceInformation], - ) -> Preference: - """Produce a sort key for given requirement based on preference. - - The lower the return value is, the more preferred this group of - arguments is. - - Currently pip considers the following in order: - - * Any requirement that is "direct", e.g., points to an explicit URL. - * Any requirement that is "pinned", i.e., contains the operator ``===`` - or ``==`` without a wildcard. - * Any requirement that imposes an upper version limit, i.e., contains the - operator ``<``, ``<=``, ``~=``, or ``==`` with a wildcard. Because - pip prioritizes the latest version, preferring explicit upper bounds - can rule out infeasible candidates sooner. This does not imply that - upper bounds are good practice; they can make dependency management - and resolution harder. - * Order user-specified requirements as they are specified, placing - other requirements afterward. - * Any "non-free" requirement, i.e., one that contains at least one - operator, such as ``>=`` or ``!=``. - * Alphabetical order for consistency (aids debuggability). - """ - try: - next(iter(information[identifier])) - except StopIteration: - # There is no information for this identifier, so there's no known - # candidates. - has_information = False - else: - has_information = True - - if not has_information: - direct = False - ireqs: tuple[InstallRequirement | None, ...] = () - else: - # Go through the information and for each requirement, - # check if it's explicit (e.g., a direct link) and get the - # InstallRequirement (the second element) from get_candidate_lookup() - directs, ireqs = zip( - *( - (isinstance(r, ExplicitRequirement), r.get_candidate_lookup()[1]) - for r, _ in information[identifier] - ) - ) - direct = any(directs) - - operators: list[tuple[str, str]] = [ - (specifier.operator, specifier.version) - for specifier_set in (ireq.specifier for ireq in ireqs if ireq) - for specifier in specifier_set - ] - - pinned = any(((op[:2] == "==") and ("*" not in ver)) for op, ver in operators) - upper_bounded = any( - ((op in ("<", "<=", "~=")) or (op == "==" and "*" in ver)) - for op, ver in operators - ) - unfree = bool(operators) - requested_order = self._user_requested.get(identifier, math.inf) - - return ( - not direct, - not pinned, - not upper_bounded, - requested_order, - not unfree, - identifier, - ) - - def find_matches( - self, - identifier: str, - requirements: Mapping[str, Iterator[Requirement]], - incompatibilities: Mapping[str, Iterator[Candidate]], - ) -> Iterable[Candidate]: - def _eligible_for_upgrade(identifier: str) -> bool: - """Are upgrades allowed for this project? - - This checks the upgrade strategy, and whether the project was one - that the user specified in the command line, in order to decide - whether we should upgrade if there's a newer version available. - - (Note that we don't need access to the `--upgrade` flag, because - an upgrade strategy of "to-satisfy-only" means that `--upgrade` - was not specified). - """ - if self._upgrade_strategy == "eager": - return True - elif self._upgrade_strategy == "only-if-needed": - user_order = _get_with_identifier( - self._user_requested, - identifier, - default=None, - ) - return user_order is not None - return False - - constraint = _get_with_identifier( - self._constraints, - identifier, - default=Constraint.empty(), - ) - return self._factory.find_candidates( - identifier=identifier, - requirements=requirements, - constraint=constraint, - prefers_installed=(not _eligible_for_upgrade(identifier)), - incompatibilities=incompatibilities, - is_satisfied_by=self.is_satisfied_by, - ) - - @staticmethod - @cache - def is_satisfied_by(requirement: Requirement, candidate: Candidate) -> bool: - return requirement.is_satisfied_by(candidate) - - def get_dependencies(self, candidate: Candidate) -> Iterable[Requirement]: - with_requires = not self._ignore_dependencies - # iter_dependencies() can perform nontrivial work so delay until needed. - return (r for r in candidate.iter_dependencies(with_requires) if r is not None) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py deleted file mode 100644 index 6ba9bbd70..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import annotations - -from collections import defaultdict -from collections.abc import Mapping -from logging import getLogger -from typing import Any - -from pip._vendor.resolvelib.reporters import BaseReporter - -from .base import Candidate, Constraint, Requirement - -logger = getLogger(__name__) - - -class PipReporter(BaseReporter[Requirement, Candidate, str]): - def __init__(self, constraints: Mapping[str, Constraint] | None = None) -> None: - self.reject_count_by_package: defaultdict[str, int] = defaultdict(int) - self._constraints = constraints or {} - - self._messages_at_reject_count = { - 1: ( - "pip is looking at multiple versions of {package_name} to " - "determine which version is compatible with other " - "requirements. This could take a while." - ), - 8: ( - "pip is still looking at multiple versions of {package_name} to " - "determine which version is compatible with other " - "requirements. This could take a while." - ), - 13: ( - "This is taking longer than usual. You might need to provide " - "the dependency resolver with stricter constraints to reduce " - "runtime. See https://pip.pypa.io/warnings/backtracking for " - "guidance. If you want to abort this run, press Ctrl + C." - ), - } - - def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: - """Report a candidate being rejected. - - Logs both the rejection count message (if applicable) and details about - the requirements and constraints that caused the rejection. - """ - self.reject_count_by_package[candidate.name] += 1 - - count = self.reject_count_by_package[candidate.name] - if count in self._messages_at_reject_count: - message = self._messages_at_reject_count[count] - logger.info("INFO: %s", message.format(package_name=candidate.name)) - - msg = "Will try a different candidate, due to conflict:" - for req_info in criterion.information: - req, parent = req_info.requirement, req_info.parent - msg += "\n " - if parent: - msg += f"{parent.name} {parent.version} depends on " - else: - msg += "The user requested " - msg += req.format_for_error() - - # Add any relevant constraints - if self._constraints: - name = candidate.name - constraint = self._constraints.get(name) - if constraint and constraint.specifier: - constraint_text = f"{name}{constraint.specifier}" - msg += f"\n The user requested (constraint) {constraint_text}" - - logger.debug(msg) - - -class PipDebuggingReporter(BaseReporter[Requirement, Candidate, str]): - """A reporter that does an info log for every event it sees.""" - - def starting(self) -> None: - logger.info("Reporter.starting()") - - def starting_round(self, index: int) -> None: - logger.info("Reporter.starting_round(%r)", index) - - def ending_round(self, index: int, state: Any) -> None: - logger.info("Reporter.ending_round(%r, state)", index) - logger.debug("Reporter.ending_round(%r, %r)", index, state) - - def ending(self, state: Any) -> None: - logger.info("Reporter.ending(%r)", state) - - def adding_requirement( - self, requirement: Requirement, parent: Candidate | None - ) -> None: - logger.info("Reporter.adding_requirement(%r, %r)", requirement, parent) - - def rejecting_candidate(self, criterion: Any, candidate: Candidate) -> None: - logger.info("Reporter.rejecting_candidate(%r, %r)", criterion, candidate) - - def pinning(self, candidate: Candidate) -> None: - logger.info("Reporter.pinning(%r)", candidate) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py deleted file mode 100644 index 9c5e23374..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +++ /dev/null @@ -1,251 +0,0 @@ -from __future__ import annotations - -from typing import Any - -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import NormalizedName, canonicalize_name - -from pip._internal.req.constructors import install_req_drop_extras -from pip._internal.req.req_install import InstallRequirement - -from .base import Candidate, CandidateLookup, Requirement, format_name - - -class ExplicitRequirement(Requirement): - def __init__(self, candidate: Candidate) -> None: - self.candidate = candidate - - def __str__(self) -> str: - return str(self.candidate) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.candidate!r})" - - def __hash__(self) -> int: - return hash(self.candidate) - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, ExplicitRequirement): - return False - return self.candidate == other.candidate - - @property - def project_name(self) -> NormalizedName: - # No need to canonicalize - the candidate did this - return self.candidate.project_name - - @property - def name(self) -> str: - # No need to canonicalize - the candidate did this - return self.candidate.name - - def format_for_error(self) -> str: - return self.candidate.format_for_error() - - def get_candidate_lookup(self) -> CandidateLookup: - return self.candidate, None - - def is_satisfied_by(self, candidate: Candidate) -> bool: - return candidate == self.candidate - - -class SpecifierRequirement(Requirement): - def __init__(self, ireq: InstallRequirement) -> None: - assert ireq.link is None, "This is a link, not a specifier" - self._ireq = ireq - self._equal_cache: str | None = None - self._hash: int | None = None - self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) - - @property - def _equal(self) -> str: - if self._equal_cache is not None: - return self._equal_cache - - self._equal_cache = str(self._ireq) - return self._equal_cache - - def __str__(self) -> str: - return str(self._ireq.req) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._ireq.req)!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SpecifierRequirement): - return NotImplemented - return self._equal == other._equal - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash(self._equal) - return self._hash - - @property - def project_name(self) -> NormalizedName: - assert self._ireq.req, "Specifier-backed ireq is always PEP 508" - return canonicalize_name(self._ireq.req.name) - - @property - def name(self) -> str: - return format_name(self.project_name, self._extras) - - def format_for_error(self) -> str: - # Convert comma-separated specifiers into "A, B, ..., F and G" - # This makes the specifier a bit more "human readable", without - # risking a change in meaning. (Hopefully! Not all edge cases have - # been checked) - parts = [s.strip() for s in str(self).split(",")] - if len(parts) == 0: - return "" - elif len(parts) == 1: - return parts[0] - - return ", ".join(parts[:-1]) + " and " + parts[-1] - - def get_candidate_lookup(self) -> CandidateLookup: - return None, self._ireq - - def is_satisfied_by(self, candidate: Candidate) -> bool: - assert candidate.name == self.name, ( - f"Internal issue: Candidate is not for this requirement " - f"{candidate.name} vs {self.name}" - ) - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - assert self._ireq.req, "Specifier-backed ireq is always PEP 508" - spec = self._ireq.req.specifier - return spec.contains(candidate.version, prereleases=True) - - -class SpecifierWithoutExtrasRequirement(SpecifierRequirement): - """ - Requirement backed by an install requirement on a base package. - Trims extras from its install requirement if there are any. - """ - - def __init__(self, ireq: InstallRequirement) -> None: - assert ireq.link is None, "This is a link, not a specifier" - self._ireq = install_req_drop_extras(ireq) - self._equal_cache: str | None = None - self._hash: int | None = None - self._extras = frozenset(canonicalize_name(e) for e in self._ireq.extras) - - @property - def _equal(self) -> str: - if self._equal_cache is not None: - return self._equal_cache - - self._equal_cache = str(self._ireq) - return self._equal_cache - - def __eq__(self, other: object) -> bool: - if not isinstance(other, SpecifierWithoutExtrasRequirement): - return NotImplemented - return self._equal == other._equal - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash(self._equal) - return self._hash - - -class RequiresPythonRequirement(Requirement): - """A requirement representing Requires-Python metadata.""" - - def __init__(self, specifier: SpecifierSet, match: Candidate) -> None: - self.specifier = specifier - self._specifier_string = str(specifier) # for faster __eq__ - self._hash: int | None = None - self._candidate = match - - # Pre-compute candidate lookup to avoid repeated specifier checks - if specifier.contains(match.version, prereleases=True): - self._candidate_lookup: CandidateLookup = (match, None) - else: - self._candidate_lookup = (None, None) - - def __str__(self) -> str: - return f"Python {self.specifier}" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self.specifier)!r})" - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - - self._hash = hash((self._specifier_string, self._candidate)) - return self._hash - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, RequiresPythonRequirement): - return False - return ( - self._specifier_string == other._specifier_string - and self._candidate == other._candidate - ) - - @property - def project_name(self) -> NormalizedName: - return self._candidate.project_name - - @property - def name(self) -> str: - return self._candidate.name - - def format_for_error(self) -> str: - return str(self) - - def get_candidate_lookup(self) -> CandidateLookup: - return self._candidate_lookup - - def is_satisfied_by(self, candidate: Candidate) -> bool: - assert candidate.name == self._candidate.name, "Not Python candidate" - # We can safely always allow prereleases here since PackageFinder - # already implements the prerelease logic, and would have filtered out - # prerelease candidates if the user does not expect them. - return self.specifier.contains(candidate.version, prereleases=True) - - -class UnsatisfiableRequirement(Requirement): - """A requirement that cannot be satisfied.""" - - def __init__(self, name: NormalizedName) -> None: - self._name = name - - def __str__(self) -> str: - return f"{self._name} (unavailable)" - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({str(self._name)!r})" - - def __eq__(self, other: object) -> bool: - if not isinstance(other, UnsatisfiableRequirement): - return NotImplemented - return self._name == other._name - - def __hash__(self) -> int: - return hash(self._name) - - @property - def project_name(self) -> NormalizedName: - return self._name - - @property - def name(self) -> str: - return self._name - - def format_for_error(self) -> str: - return str(self) - - def get_candidate_lookup(self) -> CandidateLookup: - return None, None - - def is_satisfied_by(self, candidate: Candidate) -> bool: - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py deleted file mode 100644 index 7e44c1732..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +++ /dev/null @@ -1,332 +0,0 @@ -from __future__ import annotations - -import contextlib -import functools -import logging -import os -from typing import TYPE_CHECKING, cast - -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.resolvelib import BaseReporter, ResolutionImpossible, ResolutionTooDeep -from pip._vendor.resolvelib import Resolver as RLResolver -from pip._vendor.resolvelib.structs import DirectedGraph - -from pip._internal.cache import WheelCache -from pip._internal.exceptions import ResolutionTooDeepError -from pip._internal.index.package_finder import PackageFinder -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req.constructors import install_req_extend_extras -from pip._internal.req.req_install import InstallRequirement -from pip._internal.req.req_set import RequirementSet -from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider -from pip._internal.resolution.resolvelib.provider import PipProvider -from pip._internal.resolution.resolvelib.reporter import ( - PipDebuggingReporter, - PipReporter, -) -from pip._internal.utils.packaging import get_requirement - -from .base import Candidate, Requirement -from .factory import Factory - -if TYPE_CHECKING: - from pip._vendor.resolvelib.resolvers import Result as RLResult - - Result = RLResult[Requirement, Candidate, str] - - -logger = logging.getLogger(__name__) - - -class Resolver(BaseResolver): - _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} - - def __init__( - self, - preparer: RequirementPreparer, - finder: PackageFinder, - wheel_cache: WheelCache | None, - make_install_req: InstallRequirementProvider, - use_user_site: bool, - ignore_dependencies: bool, - ignore_installed: bool, - ignore_requires_python: bool, - force_reinstall: bool, - upgrade_strategy: str, - py_version_info: tuple[int, ...] | None = None, - ): - super().__init__() - assert upgrade_strategy in self._allowed_strategies - - self.factory = Factory( - finder=finder, - preparer=preparer, - make_install_req=make_install_req, - wheel_cache=wheel_cache, - use_user_site=use_user_site, - force_reinstall=force_reinstall, - ignore_installed=ignore_installed, - ignore_requires_python=ignore_requires_python, - py_version_info=py_version_info, - ) - self.ignore_dependencies = ignore_dependencies - self.upgrade_strategy = upgrade_strategy - self._result: Result | None = None - - def resolve( - self, root_reqs: list[InstallRequirement], check_supported_wheels: bool - ) -> RequirementSet: - collected = self.factory.collect_root_requirements(root_reqs) - provider = PipProvider( - factory=self.factory, - constraints=collected.constraints, - ignore_dependencies=self.ignore_dependencies, - upgrade_strategy=self.upgrade_strategy, - user_requested=collected.user_requested, - ) - if "PIP_RESOLVER_DEBUG" in os.environ: - reporter: BaseReporter[Requirement, Candidate, str] = PipDebuggingReporter() - else: - reporter = PipReporter(constraints=provider.constraints) - - resolver: RLResolver[Requirement, Candidate, str] = RLResolver( - provider, - reporter, - ) - - try: - limit_how_complex_resolution_can_be = 200000 - result = self._result = resolver.resolve( - collected.requirements, max_rounds=limit_how_complex_resolution_can_be - ) - - except ResolutionImpossible as e: - error = self.factory.get_installation_error( - cast("ResolutionImpossible[Requirement, Candidate]", e), - collected.constraints, - ) - raise error from e - except ResolutionTooDeep: - raise ResolutionTooDeepError from None - - req_set = RequirementSet(check_supported_wheels=check_supported_wheels) - # process candidates with extras last to ensure their base equivalent is - # already in the req_set if appropriate. - # Python's sort is stable so using a binary key function keeps relative order - # within both subsets. - for candidate in sorted( - result.mapping.values(), key=lambda c: c.name != c.project_name - ): - ireq = candidate.get_install_requirement() - if ireq is None: - if candidate.name != candidate.project_name: - # extend existing req's extras - with contextlib.suppress(KeyError): - req = req_set.get_requirement(candidate.project_name) - req_set.add_named_requirement( - install_req_extend_extras( - req, get_requirement(candidate.name).extras - ) - ) - continue - - # Check if there is already an installation under the same name, - # and set a flag for later stages to uninstall it, if needed. - installed_dist = self.factory.get_dist_to_uninstall(candidate) - if installed_dist is None: - # There is no existing installation -- nothing to uninstall. - ireq.should_reinstall = False - elif self.factory.force_reinstall: - # The --force-reinstall flag is set -- reinstall. - ireq.should_reinstall = True - elif installed_dist.version != candidate.version: - # The installation is different in version -- reinstall. - ireq.should_reinstall = True - elif candidate.is_editable or installed_dist.editable: - # The incoming distribution is editable, or different in - # editable-ness to installation -- reinstall. - ireq.should_reinstall = True - elif candidate.source_link and candidate.source_link.is_file: - # The incoming distribution is under file:// - if candidate.source_link.is_wheel: - # is a local wheel -- do nothing. - logger.info( - "%s is already installed with the same version as the " - "provided wheel. Use --force-reinstall to force an " - "installation of the wheel.", - ireq.name, - ) - continue - - # is a local sdist or path -- reinstall - ireq.should_reinstall = True - else: - continue - - link = candidate.source_link - if link and link.is_yanked: - # The reason can contain non-ASCII characters, Unicode - # is required for Python 2. - msg = ( - "The candidate selected for download or install is a " - "yanked version: {name!r} candidate (version {version} " - "at {link})\nReason for being yanked: {reason}" - ).format( - name=candidate.name, - version=candidate.version, - link=link, - reason=link.yanked_reason or "<none given>", - ) - logger.warning(msg) - - req_set.add_named_requirement(ireq) - - return req_set - - def get_installation_order( - self, req_set: RequirementSet - ) -> list[InstallRequirement]: - """Get order for installation of requirements in RequirementSet. - - The returned list contains a requirement before another that depends on - it. This helps ensure that the environment is kept consistent as they - get installed one-by-one. - - The current implementation creates a topological ordering of the - dependency graph, giving more weight to packages with less - or no dependencies, while breaking any cycles in the graph at - arbitrary points. We make no guarantees about where the cycle - would be broken, other than it *would* be broken. - """ - assert self._result is not None, "must call resolve() first" - - if not req_set.requirements: - # Nothing is left to install, so we do not need an order. - return [] - - graph = self._result.graph - weights = get_topological_weights(graph, set(req_set.requirements.keys())) - - sorted_items = sorted( - req_set.requirements.items(), - key=functools.partial(_req_set_item_sorter, weights=weights), - reverse=True, - ) - return [ireq for _, ireq in sorted_items] - - -def get_topological_weights( - graph: DirectedGraph[str | None], requirement_keys: set[str] -) -> dict[str | None, int]: - """Assign weights to each node based on how "deep" they are. - - This implementation may change at any point in the future without prior - notice. - - We first simplify the dependency graph by pruning any leaves and giving them - the highest weight: a package without any dependencies should be installed - first. This is done again and again in the same way, giving ever less weight - to the newly found leaves. The loop stops when no leaves are left: all - remaining packages have at least one dependency left in the graph. - - Then we continue with the remaining graph, by taking the length for the - longest path to any node from root, ignoring any paths that contain a single - node twice (i.e. cycles). This is done through a depth-first search through - the graph, while keeping track of the path to the node. - - Cycles in the graph result would result in node being revisited while also - being on its own path. In this case, take no action. This helps ensure we - don't get stuck in a cycle. - - When assigning weight, the longer path (i.e. larger length) is preferred. - - We are only interested in the weights of packages that are in the - requirement_keys. - """ - path: set[str | None] = set() - weights: dict[str | None, list[int]] = {} - - def visit(node: str | None) -> None: - if node in path: - # We hit a cycle, so we'll break it here. - return - - # The walk is exponential and for pathologically connected graphs (which - # are the ones most likely to contain cycles in the first place) it can - # take until the heat-death of the universe. To counter this we limit - # the number of attempts to visit (i.e. traverse through) any given - # node. We choose a value here which gives decent enough coverage for - # fairly well behaved graphs, and still limits the walk complexity to be - # linear in nature. - cur_weights = weights.get(node, []) - if len(cur_weights) >= 5: - return - - # Time to visit the children! - path.add(node) - for child in graph.iter_children(node): - visit(child) - path.remove(node) - - if node not in requirement_keys: - return - - cur_weights.append(len(path)) - weights[node] = cur_weights - - # Simplify the graph, pruning leaves that have no dependencies. This is - # needed for large graphs (say over 200 packages) because the `visit` - # function is slower for large/densely connected graphs, taking minutes. - # See https://github.com/pypa/pip/issues/10557 - # We repeat the pruning step until we have no more leaves to remove. - while True: - leaves = set() - for key in graph: - if key is None: - continue - for _child in graph.iter_children(key): - # This means we have at least one child - break - else: - # No child. - leaves.add(key) - if not leaves: - # We are done simplifying. - break - # Calculate the weight for the leaves. - weight = len(graph) - 1 - for leaf in leaves: - if leaf not in requirement_keys: - continue - weights[leaf] = [weight] - # Remove the leaves from the graph, making it simpler. - for leaf in leaves: - graph.remove(leaf) - - # Visit the remaining graph, this will only have nodes to handle if the - # graph had a cycle in it, which the pruning step above could not handle. - # `None` is guaranteed to be the root node by resolvelib. - visit(None) - - # Sanity check: all requirement keys should be in the weights, - # and no other keys should be in the weights. - difference = set(weights.keys()).difference(requirement_keys) - assert not difference, difference - - # Now give back all the weights, choosing the largest ones from what we - # accumulated. - return {node: max(wgts) for (node, wgts) in weights.items()} - - -def _req_set_item_sorter( - item: tuple[str, InstallRequirement], - weights: dict[str | None, int], -) -> tuple[int, str]: - """Key function used to sort install requirements for installation. - - Based on the "weight" mapping calculated in ``get_installation_order()``. - The canonical package name is returned as the second member as a tie- - breaker to ensure the result is predictable, which is useful in tests. - """ - name = canonicalize_name(item[0]) - return weights[name], name diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/self_outdated_check.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/self_outdated_check.py deleted file mode 100644 index e131ec8f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/self_outdated_check.py +++ /dev/null @@ -1,255 +0,0 @@ -from __future__ import annotations - -import datetime -import functools -import hashlib -import json -import logging -import optparse -import os.path -import sys -from dataclasses import dataclass -from typing import Callable - -from pip._vendor.packaging.version import Version -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.rich.console import Group -from pip._vendor.rich.markup import escape -from pip._vendor.rich.text import Text - -from pip._internal.index.collector import LinkCollector -from pip._internal.index.package_finder import PackageFinder -from pip._internal.metadata import get_default_environment -from pip._internal.models.release_control import ReleaseControl -from pip._internal.models.selection_prefs import SelectionPreferences -from pip._internal.network.session import PipSession -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.datetime import parse_iso_datetime -from pip._internal.utils.entrypoints import ( - get_best_invocation_for_this_pip, - get_best_invocation_for_this_python, -) -from pip._internal.utils.filesystem import ( - adjacent_tmp_file, - check_path_owner, - copy_directory_permissions, - replace, -) -from pip._internal.utils.misc import ( - ExternallyManagedEnvironment, - check_externally_managed, - ensure_dir, -) - -_WEEK = datetime.timedelta(days=7) - -logger = logging.getLogger(__name__) - - -def _get_statefile_name(key: str) -> str: - key_bytes = key.encode() - name = hashlib.sha224(key_bytes).hexdigest() - return name - - -class SelfCheckState: - def __init__(self, cache_dir: str) -> None: - self._state: dict[str, str] = {} - self._statefile_path = None - - # Try to load the existing state - if cache_dir: - self._statefile_path = os.path.join( - cache_dir, "selfcheck", _get_statefile_name(self.key) - ) - try: - with open(self._statefile_path, encoding="utf-8") as statefile: - self._state = json.load(statefile) - except (OSError, ValueError, KeyError): - # Explicitly suppressing exceptions, since we don't want to - # error out if the cache file is invalid. - pass - - @property - def key(self) -> str: - return sys.prefix - - def get(self, current_time: datetime.datetime) -> str | None: - """Check if we have a not-outdated version loaded already.""" - if not self._state: - return None - - if "last_check" not in self._state: - return None - - if "pypi_version" not in self._state: - return None - - # Determine if we need to refresh the state - last_check = parse_iso_datetime(self._state["last_check"]) - time_since_last_check = current_time - last_check - if time_since_last_check > _WEEK: - return None - - return self._state["pypi_version"] - - def set(self, pypi_version: str, current_time: datetime.datetime) -> None: - # If we do not have a path to cache in, don't bother saving. - if not self._statefile_path: - return - - statefile_directory = os.path.dirname(self._statefile_path) - - # Check to make sure that we own the directory - if not check_path_owner(statefile_directory): - return - - # Now that we've ensured the directory is owned by this user, we'll go - # ahead and make sure that all our directories are created. - ensure_dir(statefile_directory) - - state = { - # Include the key so it's easy to tell which pip wrote the - # file. - "key": self.key, - "last_check": current_time.isoformat(), - "pypi_version": pypi_version, - } - - text = json.dumps(state, sort_keys=True, separators=(",", ":")) - - with adjacent_tmp_file(self._statefile_path) as f: - f.write(text.encode()) - copy_directory_permissions(statefile_directory, f) - - try: - # Since we have a prefix-specific state file, we can just - # overwrite whatever is there, no need to check. - replace(f.name, self._statefile_path) - except OSError: - # Best effort. - pass - - -@dataclass -class UpgradePrompt: - old: str - new: str - - def __rich__(self) -> Group: - if WINDOWS: - pip_cmd = f"{get_best_invocation_for_this_python()} -m pip" - else: - pip_cmd = get_best_invocation_for_this_pip() - - notice = "[bold][[reset][blue]notice[reset][bold]][reset]" - return Group( - Text(), - Text.from_markup( - f"{notice} A new release of pip is available: " - f"[red]{self.old}[reset] -> [green]{self.new}[reset]" - ), - Text.from_markup( - f"{notice} To update, run: " - f"[green]{escape(pip_cmd)} install --upgrade pip" - ), - ) - - -def was_installed_by_pip(pkg: str) -> bool: - """Checks whether pkg was installed by pip - - This is used not to display the upgrade message when pip is in fact - installed by system package manager, such as dnf on Fedora. - """ - dist = get_default_environment().get_distribution(pkg) - return dist is not None and "pip" == dist.installer - - -def _get_current_remote_pip_version( - session: PipSession, options: optparse.Values -) -> str | None: - # Lets use PackageFinder to see what the latest pip version is - link_collector = LinkCollector.create( - session, - options=options, - suppress_no_index=True, - ) - - # Pass allow_yanked=False so we don't suggest upgrading to a - # yanked version. - selection_prefs = SelectionPreferences( - allow_yanked=False, - release_control=ReleaseControl(only_final={"pip"}), - ) - - finder = PackageFinder.create( - link_collector=link_collector, - selection_prefs=selection_prefs, - ) - best_candidate = finder.find_best_candidate("pip").best_candidate - if best_candidate is None: - return None - - return str(best_candidate.version) - - -def _self_version_check_logic( - *, - state: SelfCheckState, - current_time: datetime.datetime, - local_version: Version, - get_remote_version: Callable[[], str | None], -) -> UpgradePrompt | None: - remote_version_str = state.get(current_time) - if remote_version_str is None: - remote_version_str = get_remote_version() - if remote_version_str is None: - logger.debug("No remote pip version found") - return None - state.set(remote_version_str, current_time) - - remote_version = parse_version(remote_version_str) - logger.debug("Remote version of pip: %s", remote_version) - logger.debug("Local version of pip: %s", local_version) - - pip_installed_by_pip = was_installed_by_pip("pip") - logger.debug("Was pip installed by pip? %s", pip_installed_by_pip) - if not pip_installed_by_pip: - return None # Only suggest upgrade if pip is installed by pip. - - local_version_is_older = ( - local_version < remote_version - and local_version.base_version != remote_version.base_version - ) - if local_version_is_older: - return UpgradePrompt(old=str(local_version), new=remote_version_str) - - return None - - -def pip_self_version_check(session: PipSession, options: optparse.Values) -> None: - """Check for an update for pip. - - Limit the frequency of checks to once per week. State is stored either in - the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix - of the pip script path. - """ - installed_dist = get_default_environment().get_distribution("pip") - if not installed_dist: - return - try: - check_externally_managed() - except ExternallyManagedEnvironment: - return - - upgrade_prompt = _self_version_check_logic( - state=SelfCheckState(cache_dir=options.cache_dir), - current_time=datetime.datetime.now(datetime.timezone.utc), - local_version=installed_dist.version, - get_remote_version=functools.partial( - _get_current_remote_pip_version, session, options - ), - ) - if upgrade_prompt is not None: - logger.warning("%s", upgrade_prompt, extra={"rich": True}) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 051369e4bd90a3124a7bea60a08f1d535ad650bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmdPq<K<!if=e4;WP<3&AOZ#$p^VRLKt=;Y5Q8#<CZpd<h9V{)|1(JPR;RO7OlWax zQE^OSN@|gzrKLekd45rLOhHk8R%&udaZGYferZZlVsWZ&W?p6qkSH!m%*jbD(lv|; zs4U6I&oeeOi8qO_urP}cNzE<DNi0c?FUc*4@ySezDb6fO)h$R&&Q45EEsiP3EYOe7 z%qvMP%1g}AFD=Q;Db|k%3S^eV$LkeT-r}&y%}*)KNwq6t1-cC6_F@p@6Eh<tV-Yiu F1ppGxL-POt diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-314.pyc deleted file mode 100644 index 61e2e805d3dc11fce6b161b785d98479b22ac414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4433 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 CueDVG diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-314.pyc deleted file mode 100644 index cd283a14f9fc67408c16ac7e87621a74f0ba1441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2429 zcmaJ?&2QX96rb^WKjM6Bp-oewLfisXU6M_zgd{};LE6$5g>7)@Uf9NUypxTo*Is63 zn<l3{6d`e;NR<#$4&?@%=#4+4q=+I5i31$qmMDev$a~}6O;SaS<TuZL&ol46-}`v2 zuh$^3)*t-kZ>I?P17F%J-D0+ufN2t&NHR}sdYMWJyLMT-l#;1Sy3~ird|sye$uVN5 z28gX+r*l2+Lw5EFI3JhH+G)_r43OY}%-LDsbBgb>>C43GTK)c9L&&J+uQD@;s#QO% z8pe6H=!Z<0o)W3=jGJEI3Sllr+>}eqyn)(`7j7}W5D9j&P$*b8%o>wRQKeuQe&|c5 zb>K<Mtieg<0y8}~2v`L;IEI;SxMD_d7&mKCr4hi5a><oSsclT5%H(WvlToy^IQ34r z66>BTq?b6DP_6Z{H3^Ih@w-kWg&1n{2W09ni6D|vFOhL-Yv6qjBM0$F+q%q@RE!`N znYg!<IFnqsI+ujTOkRi03Wfy&WV&X{YqWACV7FLc7^MsL%$2JbOkaR|a+$Hvyj*<u z3OHFY&tI6icClc16s*GsR}LNoX=@C~S=uBeGOtbFA*2FdkCG4Q61C}7`VoK+l-emp zbvr$(qp^RZ%W<kEs<H0!s)#c;my?|{+2ElHmXMsI9t17}5wE#2?sXgmWX1QS;|P=< zZ^oaVd!u|!FfPh&h4Is8&Wx3pBYv}7=h4T^lcMYeQKPcp3O0hs0ud6S<Rhocb1Q&( zIDUG<nQ(4TPdXp6T0L+jb7ZYvp7j^X!k28M?s_-fDih_pUmtb+P%<96!DvJJff&V1 zDb!cu9>;ORFp~JU6A$izqp(|c7|a$Hkf%+uO=x;*6Uo=(8@PQV)b_wr+m96`+X7|c zwetjDu;TK7!`3t~82&l@`ph~;%AJ2ow4jx=EA;iuC@H08s7?R~ssau6$Jtf}SbD4r z7A$f^n0Fz;vKKm#6DLj$bGVem*;We0{d>J^eO3;>2#QVeYyRLDw?DtVmc4)QVSe(y zT+dH_d+VqC<ip$~e;zcxBSkA0=Nu<=YZx}eaguTZ9s>GF!wp)JyyGnTT*v^bJB&b_ zb(~7%ISwB{llmbaAoRZHxKeU|p&^+7rRR2KjK_k&aV*OF;0J-J{I+t3V=xstfPzCn zo_+?lZ)&M@ZrcD*{zYVzy-ICQDPUwerLcb?ltCp~wzh-Fs0Ik6cornFj!yD!U@eVf zM^yKKslC7}Q;#R6qJ<pEAPSIR4rz3H6Un`E8@R2#uiliw%2rTQD+3g4)wkXQrb)`} za^96EW%Ng_In;h;9fM4pX#F+O$}P;J)fq@4?7urLZ`cG3Ocsg;hu#=9xVa}+S{)f0 zPEzu$V(A>?s63Cet@GlpP7j4>90$3I#)%{vucAJZUD5cnJAbctZTa!g*!s}e4~HHN zO+M<LdZ;Jx?LiLhSI8X&W`E>tZIpIUQuq}43!wdf$P9s898^bclPn$CL~<7j8MXux zkaZS@TR~C>1|aDO<~pU@`2=Hg2c9+zL%aXk7qT+evRXE6gEj=6868`_W3#F+prP#p z5qAIfWB@!&H7sC0UR{bB0S>}_Mj{SL7=@A9!R@3qZ1@FMF#XVk{#oesPiTs2(mDq3 z2lI+nn!f^j+$Y*&^Bhj?Bq4g-N@W&@RS_!%^%W3FQL3iYvwLjwQ=p-cz?^B4Cp{$H z^H?8T*9X_${8_ht)4Lz*N7nTtYXkSKU-V&hj%Dzd@L**{My}K$q16aV5)&_tGqY-- zE2C8Eshgg)C3iOIVsG&g_z4R}j04$7QA#(pG}X8I2+jXaj&9^gcW*QMB$K66cQ1Zb U{Id82@?`3tLr})sMmuBv1Dk^_k^lez diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-314.pyc deleted file mode 100644 index f51892940043a0e2c98c5227e6d8ddd58325c5e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3137 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-314.pyc deleted file mode 100644 index cf1a98d8743cd538fb04647c685973ee856aa99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3577 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 IcG&amziG+(NB{r; diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-314.pyc deleted file mode 100644 index 1caa49b48b891a11b02e8c65f914028046182a37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8147 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-314.pyc deleted file mode 100644 index d7a76133c63291230b29e9bc925f91d1cc4536e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1896 zcmbVMO>7%Q6rT02f9g2d(3U!tK$+H2hzU+?$09#!;E)!z5^2m5QYo^!+IT1NlJ)Lt zc2eV>e1Jo^^qK=mIdCXa4j^&h&;y7A*Se`>vGh=>9LOz|LA~;3Y^O<7sS;1xw{K?N zym>$0d*cKBaRl_}$G<I8M(7z|^eEI7+IbKfNJ9+WMw)a(Vv_iWSV#*cktQdRJ;-ED z0XZyWMUzq}9l4wN$fdYeArAH|57!Kb`Ix!5Tp{I6%qj$%1|t}Bm{lbcH_H+{#6M0k z_`oC7z7DK`R?zLx%$EppFW*9+NEJzwN^sI4Ep$wlkI71@7X_MBz^Cv5Uk6H^7&Hi1 zU58Zy*)-}wgc7zzopdOWEr$iln(NwWDTu7Qv}!P)dv!V3UYIL=<`e3d43p5@>}<AF zbLnQuqweRV%=}W>cDKwm!zUTbu^2F)8MaMmCRZxfS;cjxas|Dhe=+mEzD%l~4dLso z>XkmW)=Iv`NX9eDo5lw5OOUWh9Xuh_G3?1LX4(EE&z8uPR}T`pZa9w1xCNaiz`ZDZ z{ur<ZdVv(_;&aZvDIfCRUP}CaS`fbnSH)QybWxe-xJO|SM9vuq4fHaP#iK0tR1qq2 z?Ne0fuDxS5c-7rY=$5n+Ds<oWlv@Q}Td0q8Gc5<PUZ8=(r69~)C{a306);cvvoyll z8^D6_hINNHKHnW39mSaT@!fOcif;Kj&oR|m#c=33I1yQT4}=DKk~n{FaeJ|q7;Ywp z_Y;>I*Tl}(i#sE`{(fS-aqVf};P(7OWr+5}g%jxHo`_6c6{cQ`&ZGRjDjSm_h+L-J zUJ$i>2o_xCj&d~mj8c`$66LMhL81s!R9&zEet?1T(ho@S=bU{fAM)Q`tTi^<9Gew; zF9QK(K|GQ0u+p9bh`+AnT6pFGv>@g!SmG%VR6LS;I{*&u{wZ2Pg>G}F{@3l|nNtQ~ zsYyMX?{p8%Dej#XT0yh0vvEPJ<P}upxHv^UxN=Q1$u&Wb*ZLG`lBN{8CG5SILd(bE zfnoRUg6rHNlwrfcH$Gj$oymcrewMSr$DSd^ooL{A{JP<oHi2;nQ?RR<&*rn4Y%Y_} zFXsw#`NCW_w~EIYH7uK3SWU-k6{}pqmXD$FvA^YcE@i~TYjy0}Fpw}j?^~|pV|N{| zQ@09O>e!x$2hwUFEe8_58yU}L=d#&!=zs(6fTtxL1)SCWAkj4dg9q+$)CK(~>;y65 zn10QIsTt;hc|nvC7-MAu@O%^W1w2PPJ$TkLs865=UA@=PGzB^WtzUuAK>rM&SYIoe zY(|qi(~qN<pQy=}ikm8KsS{0g;(l#koqiab{_EuSQ}sei9d4?_yK+k%d8CfqPyLYG zoA`O*m+9Z<f1UsB!^c;&LmBm-zqho#w6m}~w4ZplEh~d@n0{yChY@u4VmsPfik3)+ zgQ%{XZW(4N51YQt8J`!z<L{Bs>Vy@$QgzKOn|we=;hZDd9|CqLOOo^lntF!RKT-VO N2u$4<1JHls=6@>!gueg) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-314.pyc deleted file mode 100644 index 870722b71f5630b745142f75bd8621ee50e1a564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4759 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-314.pyc deleted file mode 100644 index 3bb0ecac641ac3bc4e204254f1315ad49b1443dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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 YllWt@@3{-U5}%L4`{0G&1|7!ie=dSBHvj+t diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-314.pyc deleted file mode 100644 index d14b2e0ac247f90eb4bc741b7363ec350b39d190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3644 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-314.pyc deleted file mode 100644 index a34da8828050a298ede961c86526f85c0d03e886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4602 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-314.pyc deleted file mode 100644 index 73c6b76f70de91363a663ecba161434687e11499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12250 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-314.pyc deleted file mode 100644 index 3b167c4c1af6822cec112faf0817b1d32ffe58a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1784 zcmbtU%}*Og6o0epFAUg$)Fq0ky1`LYx4}TLXec3ViX4FyQL+$<(899VOW3mBUCoXQ z_|W>$Q$HjQRN~M>4?XnQ{1-U}5)`tBs#04iy+Jt8W8aKTajIOZJZav%-@MuPW`FbE zyq9Q?1Ipfm=hg!W;CBvA1+kFhZJZ3Kfg0%o*4hsYRA6KgR5Brr%S?V7REdSu7z;1J zBCHX_Ei8gI5w^S#8kATRu_SPu#n6_yy%1dpUu~q}(?aYe6lq4RMGbX<8twx79E+>b z3}joYsoR!qvQ5uaEN8`~WrJC+lgpAI=6klq%neoz<<?hi)K$wX63oE|mk<sa$8kTZ z8qDJHu73qk!nJO=OIC?WH1yO(m9$ejpijco@?RVWA;&12L4=yDLY=G>$UdV%XxVjb zJVT^@BA;jM3BDftK)dIg)YpuXNe709`?YnKu4x{1KQoKW*NV1VDJ>hm*=so#L*+BW zwoTeQpiOPERo59D$m@B1<NA<3W0pPJV5ZK>o_5Dt)_nZeUe7458TU<J^DM7Vw;X0t z$FTb<%(DHyl?G9M&f5&yblq?qm+=rfZN>AQ$KhW@Rf7`<la3><e#jj1>8HyA9itZn zh1}r6>BA8^UP7Y=+9|b2X1-xBlB+ywL#Fr_|B-wHdt{bqp;PBD8uhDCNe1hSQ(hfb z1<%S1t>A^PC`+9ECB^a;Ln*qBZy~W}Nih&Rib0F3*5{_ee>^vHJ1bLhV`1A}H)+s$ zOC1}Zm@VjqxtYS`^u#BV(^-jzF>4@W)%bkx6@~Kd2$GhsH=^l08tuSULD)NJ)ZmYJ z=T`ok+)l@SJpD9&X*Yi9aXeESJBY@gB$Ovn<yrFlv(|I84L85K0u?0dRTbEW?Q~Xy zf|4#?ooBUpMwm(lrDm!}BvrbC85f(X_<u)`MFi<J&JYq2<kyH0<`MAvBa|0ME=YVl zf34}(g7&%jW|)|tn0g7%+)|rxRu0m-j>S^4_)}rnr;UKX*YzOGDjwc&6jNmhZNaJD zzM>LDrwGNX+h?e1@D$R!kUoh6d4CUvw!_=Sox!cu?~}VQbkqu@`=l*Gq!)nd+sgLz zPG)QFyDyJ8JZk6Oi$HGd!ASFWBS&fO=>~Fh4@R3kqc7e<kEo={tW=HVm_c*P)ob{? zvE^zuT#bsAjVfQLYrEQ5M59G`?P}S;W~y(!FSgdTL9=ZX3k-s&u9w^*(s2QwlH9*f zNlrW^xw7RK>&=w>bi7cwb4D-aT|wXAD#g{CTqU{UEhCsiR(T4+>PPkdirpx?rHXCd zq}}Kd)Xt*u_n}M(`4!TCLho;#7i!6ao}pUeF$^6_kshhme#}WcOu*%LfBx`M&j@#o l9Q2IxdGsKa`O(==<$w8NKUH|xzMs1H2s%$9_?QXu{sCoufK31Z diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-314.pyc deleted file mode 100644 index 209ed8c6677f238dbef5f364bb4abf81416053e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2977 zcmcIm-A@!(6u)<8znDQjWMNg7GJ+LW1*BkuAFTyzm5(AFku-MdWEf^)WOrtBXSN9O zVcRs-zBE2+(?pw?Rv-J&KLDTmu!;#dwuz}e)Hf^`jeY64cXrl-woOfXlR5Xy{l4e^ ze&?K>6&rX2<<<|s8DCW(bf5nCCEzJ|MFJ&{P9X{RqodftjZ_cx2b=(_Ifs+DIFf>K zl&*4uQV8@g(?e1O^eEHAQW@wx(<4%#86|~>bb};z1=TbyM|BL#w1+hejr6019)W}3 zl>{hxG=@$EdOk;J0@@Pj13ZN#ECo7nGrG<_q+{JM(VZMI=Xl#8;#qOnGWF|pi*U*! z8P&1r!cFcMhxW-QY@OJ$I-!%!y?b}dGZvYav&1^BYmO~zX)8A|uG)H=VHyqy+fmbL zowRkzBeTwwWp;ITE8WVOo;Q_IJ(EqVj;=VFtUP3l%eLX@ZCO>DRws2^&KlVc#V{S6 zm}<Hs=NM_bV=`@wYwg)tw_H(*SJxGV2ynIte0Cj(JbHoxco08g^5SW)UV$E@QQ?=O zg+eR)pe2uF-*TwCIAT9;DQc6jK>{@*8La0Oe+)bZp4%%i)7c_Bp7;rv2OdNOLmKAf zF3}>)nxc^s;jzS=4XxhL_GG|Kut`dBlHyHLG|NnZ>ej!!*O|@gHi^PnNI4Z0if-&> zV@VZsG26sJ$)g8C%Yu+x6b1^y!0oo93vC01-~e0X)!;)ybbor1Bqn80c|c(&V(-EP zJ)~U&f<8_)u6abo6?ht`yv?DnROpgm>Cnngpuo$NI!21bDm8#2;hqnDTvKw?BRS~z zkA!{gdA$`$TzB!Uv%rfKV+5T!hDPWG))oJyXJBu#aSX<ZNM_Wh17&(MR%CDjUg_e( zXaep)5z_#4Z$<{%&ov+eCxdhEj1VKEl3CFJ@aq}f^w=v}DGw6sfKWt>Ww#d*(e8$3 z472NvVYlYcaplPH31z6i?~pQfSUTQ+Y&aQpIeXT2qm)>bxNg9*-H4B-key8%j$6^| z05r#Qj((UBi@1?v$32A~Q`0%GG0C}AlV(n#g!9kjV#SRVfofAKh@$8{G`%~af<3eb zN*=A2qo{E1?5Afh%-oK=cBistIS>uSey(r0yzlFMh3)$n>JJp6o0f$7TSD`ln)toi z*B5Jd-mKlZP}}w;e;zMKQF%>%_~~i{ZK(g|$kmetVfQKugkrzKN+GD9F}7dY(p!dp z+z4X6tgg42n{UD(|4%H7aJv$gTXFmm0&(Ret6s!1#UjIU4`412==6d?7PL_`LXp0% zNVtSf3}f&J<<`2A4Zz$I@}75&224tIRz?F`OP(yt$<?KHPTuJ2-9<i?{2cTo&?q-j z>yLO|OM%k4xKWO=pv1;Cc!!wc;~kh%V&FfFDY5DA#w5A9x88#=G7hofzY#}cp0a(| z4XL(f7)ikmdrhv;pUGOp@qiyZ^zP6QsfXKw7X{Q$>dqSElP$C>swvu(N|dY{A-YXh zc6kH5IfOV<(}8*5u)`C&W=-hHAZeyksv$6Hx@{|_n$c~DZ93Ub+l9aQdz)ees8r-q zCHxU8MELCQK;+SKm<z@3Mr)Uwpk7KeT^_tNcrCb)Xe&fFFGoYr*0_7I@$k*Y!-Z&K zxdLt5@%_PX4;F%(ZU@CX@tq6tw*24&q4vV`)viUM<(AO0RJV1puJvYJ>$UhoUFUh> zo={f^);(Q4f>C*V72#0K1)6bC|FOCah`6qaN99{q5uD}sFsh0zM?iaKcfnCV3-)eD z=c;>q(53P|9?fqTdiQYi-I&TAp)bPS2xBUFp>H#HV-p7XYFtfnghGo@yw6oSIdG;Q zf&F*UsQdB1#v>Y1N*v~K>mvl>LI<l}<S@lK<M0kpARZN?2YSx0HE~43W2g(fKA`s8 zD0q6u5+`&>V={)Ri_Vn3HcjApKYLI`b`2T|;1ZA|*kUWV-(7w}krZd93~dS)OR2fE zL)V22%9-^?^M)yEka@8^(v~%y%Ze!#(x!Ia4YAw+(hWp9;Svz5X<h*7-G((u0}I|B z4&A8l`U!nlX0axAe{k%z$%WXC{QFCh*sVxnsWN`P@?KT^Vnd;_r4Vgl282k&D@rN{ zIVH`|z<h|%41`eE!Zv5|f&ravus)lK9>`b|xwQT^*#k4E$?a_*0FxO1f|~B5vb%_X Y9HyDxV;<6o$F1OopPa$)kn8||0!a6bu>b%7 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-314.pyc deleted file mode 100644 index dd168803b832f2c4ebd9dbf82e1a200db7bd3d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9634 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 T`t=zxARL_S|33m5JHh`4$BTg} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-314.pyc deleted file mode 100644 index 8b148f81ec6e5e2a24e4455cc57359b7edd06471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18448 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 VSa(_Yj)nGh4vz;_WU;bY{(t{xbKn2~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-314.pyc deleted file mode 100644 index a7bb9c2328aaa3532520fa290ff506a46fa0a764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41372 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-314.pyc deleted file mode 100644 index 247ffb2df50985c44fb76bc3adb152fdf4d4f082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2164 zcmaJ?&2QX96d&9By=gYkMxj;POg5pgv~eg&n{<ULl>kblss#6gL%sDn&g`yRuWe># z`w{i92Tq(27kVrwT8RTl9QZRrQmK`pQc;nhw=JpED{sc@Bt(>vJo9Ge&70r6_j}Jr z2lo^ZwDlkVa?fNCdMYMKOT~h+xeh`XT|tJjh!zyCj0#y@RJkfgjcYJ!i>ZY)PcLM6 zM((E;vkN(%8$~s3>Gj0q_Be)Wg&8HD^I}b1dSiPpk;c#!Y@}!VT1I9B8QBr!4bAiw z_?}mtGjco5<>6f6U*`r5bsSZS&xD<d5*2OV54g?Uz-Q+wYE)n$aomPWD2uY!p@)t8 zpk|QIJ1!+{;&V8aZQD1QyGk5^ua6Od50M7b%?S{?=n}f3&V7N<3alMOpDHcIPz=@3 zjFgc!GE*9$$Uaj+H7e2AIJ3fAycPJX1;#19jn4%>i3a*0EZ1)Yt0mqEJ#yLg`7x~P zdM(OO!aLNDQp-W$-4`#)Gy>YTITNtT(U<d8^CE+HnDz>x$4{Ml*SrzXYi3A;tHj~V zbiAOmvTQRl>H02*j&a-b2%S7`E=e@g$7ie=>*m}^>jG(qp3RBH+o5^ZT{fA^$z*6d z*X$-?X6S}ffRYpH+ul@%yB?d0H(kG}hqs~u%j$cZSQZt;*aIJn-SrafQ)Zuw?$PjQ zPZQ(RX*oVg=bxuxz6r|65gtog4g~OSdh;F#!s89;YeN}FW}<_ZcAn_3j)88%z)&?) ziSm+&;jT6Yd|%4%T7;=tOxDbSM7pHR^lwY7Cu696_TDK_gQ#ovZHP@_zD1mC*ll3m zBDm>ZCq9lHj{6bE5Jjg&7`Ab_Pd_#ptCaB;P4z;d8rsxuC&wgFs`w0^o|I(4K?6fn z7^WnogaLse9AGoHRKU>M_SJw+wq0NL4h<4pm<Jdj0M56G-qdlO-D3JqLSC*;*Xk94 zA?9Hf*DufxssHc07^EA66l3z~ee#RU(j}Ttz#;U8%g8Z+EXa-PAKM-yb$N{q8w@Y{ z*KN;TIiDnJ6)!e$eODgUamxnp`S5(HjpNMF3l}0quVkqRdo-|R<2>OsEtb;YPe!8D z)xh;5t!;;q1_@b7Q4w(}f*tMOb(OUhk7zKIX=C->#KbK}j$lk*69<Q-JFQ*E=^@w? zhS^8Zby4py%8jgN5C2};`x}1eA)Z~wvp<(M@WNW^&>zDGzo~s)yF2~e+_!Vz&;O+T zU~U}yU}JoKWB9}FxkttQzZ6fdrB2elV96bN3sPohkrHSiNt8`2FM4&6ni6F)O~o%F zDgayyTmZzO2VjAUyro&um7uFAbO?sH;>c&p<d)r=VndwiqL(PEj6WCMU9BgEdqp{u zNF_*6lMMjIc`benU1TN|c1P9%IA!(3JXCE?I}QgvZ<iWlyH?|1S(G_^!{sgP*iK74 zK_od~9)&?-J`#tf)FeC!j9?=j1BD5pBp%sCFNV;-$XBZy#qwIJEJ0UFQNgkr9U!Tw zXaaVWZ*+WzLotT`hZi)PaA7nIrBMe$_$vX`w{S}S#f&Ter-I&Ri2%c-yQ4f{JPTF{ zjdGUd+ikcv%7}YlCGXLWB_2s6pCo=6APF{pWbXZTu+s6!X?hgU3dgc#=z5x>D34M3 zDH{3}4gQHvJVw<g`JspT1MB$%cjh+o6WvTNgVf?fW#788?~d_6!7o%%lr^M|^@P;Z Wx3@1oP{v=V5Mr@C@wbp9hJOIzjUmVY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/pylock.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/pylock.cpython-314.pyc deleted file mode 100644 index d4ec13b400a82fc80c2755c00a1e44008aa6bdac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5053 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/retry.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/retry.cpython-314.pyc deleted file mode 100644 index e5c5ec67afb4abfb1c46bb4bb2f73bc232f7e11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2502 zcmai0&2Jk;6rbJocfQ*Yw@p%Sn(*P)aS{?x8lp-iL^u>G;}|1Ur>luQu9vQNS2JU! z=>hqGDnuoy1cFMv^jL0i;12&m%7@ghS`}0z=*>|orEucStR0fJDkJZkH(zhw`^|6O z_*i#W3_<znyT8oug9zOhjdsy|McKLpN&}rmIb{iD6s{zMt}dxug<4zEG65dQ1bI;Q z2bMyaFb`)UJd%m>XacQ-Uu;<{#}OJ5YlBO%Ob73PvFHfOg=Q3g0`FYufOdGN-Ia^P zQ7#%sRxj_)siP<vdmyGJ6|V!^w!<+u9h;p_s$Qo{XvHWwb(<6F1(`*No7B9n{0G@Z zV<EG+aBAuFn_grATNYlmh!@VUyQF|An2KgG#kFOZlsqNxDcO>6r{xj~fet_@TVtR! zPywA)XFo=$41GiBU8Snzl$@H=;0xq}6B@V}dZ5BoFR+G9?gcBBgSpqsxZ@hQ0=^k# zV&Qc!L<z4``{L2IM`zCLXxWsWUs*}%k9B+_;to|DTEm<P|BiT<7UqiYF+y1pmkFIZ zetfdH=Fsy+mpUJk5@*Gd<<!fon2~YQHaQ5!0RckCr;6EiUUls0sTpI&xG?*wkta3R z!kieq<`&;JSBuQ#WZcE2^Y|QLMb~sE3{#+MV{4+$O^Z!H40Jv1u6vz^(K-)e81y;t zts6e(W44VF%Kl9uZpC_<ny5!#lJ#%FiOnFiw_q|V3E0|2a1XxV)?rXE!b$_!7e@u9 zfTq=)3XF(Yy{=jioY3$!K;sQkawz5w)w!eNI(GmivjoAe>(Wgf>y^4)5`@v=M<{h@ zIu={1=)6k)8=}}`gr)X&nhb0RTcoV7nY=1T8Lkl>({uG2u{nzY@k~oMx!4U3mg&M1 zu*^-EW|=h@k!EnIO3G>d{VK7a9FMU&bunY4?0aBg#&vR`L|o~&bgt~%@pXt`&K304 z1>NTKe0xU#LG<X7b2@GXtgjN_5AhK(?Q<#Jv~>o^*=3e)TY8+UyR7<g_%_$7W~nMI znS=o>mZg^nFfA3+q3pK1=RyVGK=+FarGxUU3pF9mHbA>znimj9cd>i#g`j;fME8M6 zDilm2|5DI?(JeUW4f+I~w;VV;b|Sr-r9)!DArK9;je3H^n?hW%o1(gLShnZ@3`^&s zmIYFz?|crFc@@LrqCWyMyPLqR-VwBn+UYEZfWWAr7PM(ikXcZ8rZvx13JQd)?tx0= z9tqVLD9?ZjGEXifb5FPh7toSj3}w@z_Cn{^WIK{g`<f4&Nc_)4FZCFDYZSYXWz$cE zGXd7vi1c$C#iIJA5Z4EqqWX4LRzE1R(?=C%?i7J4tXH<a1Z7?WOxxKP?ck#hqCvE* zjR1lZkOp2?0%#QJsJMf92$kWT83IF3uFk6|`ONt{E(c~|qcW@<LRC~0yUVg1Y@bvD z4Wm<Y2$|?LZ5WwKQpqPZ8h}||bg_LKsaTi{(P5~lNK;-6k}KtgxbgI$=<O9kW<qh4 zM^k#E(UA1?x+J!S4{6yO|39erOc$H6cR)O9pobB3=!I*CKY8oczJaD1?9*=#Ca(8y z3{Kt{xH&kv(Led<PF#P8v_Ab#eDsTtZp40#zr69v;xF;VTL*^k^dG!B_VuY|7>560 zJz(*(@BsR1{A5`BF{FTmhczm*rsG)53kr7`+({YSC`{iKp+Khs0s8TUTV(MDo*tRJ zeaB$Q-wpIfbl>NRPZL-Be~upBR@>a!(oihX6wT%V)H}Qp8Ir{D8LLTD{oTdC3nt!+ zN=5fK56V4h68a?g{r*1NL+xwcJc2s+H%?1~$sR9e7?nCCZSi&qL-ctNUO=9s2uq%{ z7vk$Kq)aM~l7@wdh-rO(w?Qs&Vl(k~ghs`nyj~qb6Mjgy{Q!hFUSz)Jl<O8bLDSF_ zbZ1i_nwp|0chQmisP`TkyN9N4qUk@i-n)TgzejqmXqP)1CvQjku8dypZk*f>!OJO4 F{tNUbXNLd) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-314.pyc deleted file mode 100644 index fdd740e825e20b00138aff400f426c05dba9c119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9739 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 P!poZ{5i>Y#I{5zrC%$a| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-314.pyc deleted file mode 100644 index 181f5f7b7afc397e0a5f685e6f267dfa22ed85c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14526 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-314.pyc deleted file mode 100644 index 489f8cb58510d5515b8c7f166325e9b7a52f1af5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16723 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 PVBF~HFlgV?GZ6njQlsN< diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-314.pyc deleted file mode 100644 index 3083c0a8f81c40d00b4f879c57eb4fd135d01b07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2510 zcmb_e-ES0C6u&dG-Op*ar9jbEm{=@sKWV8@HiiUR#6oSC0TwkAHq+gqJ20IY?##Bd z#$+Efp+Q0)FewQMzL-d2qP}V31O5lplC+tU&_s<k@u65uee|5WJKX|CU%biOd+s^s zo_p>+=lt%p)l^3bv>(6uO+OkW<R_f?jV}}HCxIxE3q<AyiCY>umt%9@71$Vnk(2qs zs<(q~a1W7%1|kO<h*9f?<SL+pj1J3OGf9M2(eQAB^FrqbhX+Q^pUHB-zz<shJ^{Y< z{m>Ojnq1)fJ|ZLsye4v*%X2cPfTYx9zCw5LU|d*5x4nR^x_K{1HMc;`dz>dYE`<$) z7cDxjx(@F3s`qh!QaR^n)KS!&M!OFm-mgqr^s-`8>ynmr9VKg6h1{s>XdSw#yU;nV zY8V>r=vGowZr(BvboXX@Ggtc#X3lEkwxPOO#vQknA$?SFbXV)J)$C<;Omh@lx4SaB z>1xzejjn>L8%|e&8cwG@<%yY$YMPddt20yt*COyaFGE)(8zjWVpI~<@yN1J^ESs%^ zl(2h40vm)6?=7(Y7Z62KxtEk5NYpB~RFzLv#{XCms%ZLDn)H^V=8rZ}!oD=cQp=x} z##HsQbDTjuD{E?Al&9)m<Zaoxd^(#;V{-A+O0?fHCp79xs)Sh}xfW0tbwf)^=j5SI zNjjU?N|H(4Fr-mU8i)8x>ZoHG1s4c2C*{=%EqbM3xmvEIYOB<BI-}DeW~i$x5%GA- zp?K+D*o3TN2^Rt*rOboi8v3YL1?wEm3&He~rJG)eYF7%H<9Z^hnd-RK1EK_9G9+M1 z;CWgk8bix5)XKP41_X2$a9C!H08u1QqeQH^d1&U)VytmK)_CXG-4nM@+#R_+^2NYH zQ};rwr#SE^T6?p7rhPHGdp^2*ZtBaHuR8B_F18+@Z#{lLx6pcOAv#p-Uy9WfPg0D_ z|5=6<6O1-shlxWm!U>LIN|dUP9gt-^>*`V9r~F>7_6dRR)|oXN?wnz>ijSbn8t%bT zekWWSLPg34k+K2~GUq4fzA|?V4hv91WIj!jya;I3BlMPKc~03ZmsFt4+%ly8wG1Y~ zBf8BN_7F%%-rp|=hi@WjUJmrV3qS@|n}}Rx^Y6S?N&HP+h&xDwX}*2SuAm!NFe6x# zLnXg^c>iS2c#R11Tua5DW5D!$^VS`FOSbS2KD}S^-}iA$#<{XtmTAFXeL?8^9!_|S z>BGy=ju9<4Im}KE7Y%m-uf<lGvdz~@ZTG3lco@hWWIwKxBU{(WF(!koVzTH~nJuIR z00ePb+5!lhFi=7TEH5bPD#o7fe$OgMS=E#*)0mR*<tW1jmZb#fZLv94ts}h-h%I?s z!iyMIRyFb#6g8RV6=k~5w9F31Wa<DqgN~$9O~MsU!L}`muwt2#o7Wu)pACGLl3=YX z$?9em6K^=VirG9ooZvk!In5`#5-~3dFAxCHr0(V^-WkQZ@xth!ZRjqAY9L-Ttr`XG zIHeY)JCGrQyvGL|PcSso3&Mk_n`2(J>ST32V`whCO->@fO4j2tUeMHBI0OSG2mNW0 zBp;Q)9D)*Bq-`K##rr!DMY0wqV*KWjnIlW#_=doX!9NIeYlN>F;8r5ZZx4L8?|$8b zQ2%-ra)2)epN7dR&3A`x4=pxz&o^~{-Mr9ra6a%-@#r;o_VgV0YpiZIJ@>)G9jz;M z^)tc8k=pAGD|HQXEuZe03I1HOYpLd~`_2zz55(bhfsaSQWF!hE#ck-tVytC8*7DiJ z=N~S_-Y5=ihy<309@p-CB*te0*9Yh7J{evTYiH|joS1bs$y*bP4Q=xcZ4bpZ6xQDu zoNIh2?p=x3&mOyR^;%#h7B8M+aFmEpEG>$q!LAuVzms7;3y)U=SA{Ge_JdgqUkVl{ z2I%bm?h$6Jg!$n&$E{q!(2h|20m2k;c0;!&a2&TxBFm(Dnba?n9lwyqKZEc?u(2H= HlCA$6thNBA diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-314.pyc deleted file mode 100644 index 57f6afef3a538c7715b0d0ff989416122907f77c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5397 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-314.pyc deleted file mode 100644 index e1f47dca77fde499e29a51105c014f1ba470e336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6951 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_jaraco_text.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_jaraco_text.py deleted file mode 100644 index 6ccf53b7a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Functions brought over from jaraco.text. - -These functions are not supposed to be used within `pip._internal`. These are -helper functions brought over from `jaraco.text` to enable vendoring newer -copies of `pkg_resources` without having to vendor `jaraco.text` and its entire -dependency cone; something that our vendoring setup is not currently capable of -handling. - -License reproduced from original source below: - -Copyright Jason R. Coombs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -import functools -import itertools - - -def _nonblank(str): - return str and not str.startswith("#") - - -@functools.singledispatch -def yield_lines(iterable): - r""" - Yield valid lines of a string or iterable. - - >>> list(yield_lines('')) - [] - >>> list(yield_lines(['foo', 'bar'])) - ['foo', 'bar'] - >>> list(yield_lines('foo\nbar')) - ['foo', 'bar'] - >>> list(yield_lines('\nfoo\n#bar\nbaz #comment')) - ['foo', 'baz #comment'] - >>> list(yield_lines(['foo\nbar', 'baz', 'bing\n\n\n'])) - ['foo', 'bar', 'baz', 'bing'] - """ - return itertools.chain.from_iterable(map(yield_lines, iterable)) - - -@yield_lines.register(str) -def _(text): - return filter(_nonblank, map(str.strip, text.splitlines())) - - -def drop_comment(line): - """ - Drop comments. - - >>> drop_comment('foo # bar') - 'foo' - - A hash without a space may be in a URL. - - >>> drop_comment('http://example.com/foo#bar') - 'http://example.com/foo#bar' - """ - return line.partition(" #")[0] - - -def join_continuation(lines): - r""" - Join lines continued by a trailing backslash. - - >>> list(join_continuation(['foo \\', 'bar', 'baz'])) - ['foobar', 'baz'] - >>> list(join_continuation(['foo \\', 'bar', 'baz'])) - ['foobar', 'baz'] - >>> list(join_continuation(['foo \\', 'bar \\', 'baz'])) - ['foobarbaz'] - - Not sure why, but... - The character preceding the backslash is also elided. - - >>> list(join_continuation(['goo\\', 'dly'])) - ['godly'] - - A terrible idea, but... - If no line is available to continue, suppress the lines. - - >>> list(join_continuation(['foo', 'bar\\', 'baz\\'])) - ['foo'] - """ - lines = iter(lines) - for item in lines: - while item.endswith("\\"): - try: - item = item[:-2].strip() + next(lines) - except StopIteration: - return - yield item diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_log.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_log.py deleted file mode 100644 index 92c4c6a19..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/_log.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Customize logging - -Defines custom logger class for the `logger.verbose(...)` method. - -init_logging() must be called before any other modules that call logging.getLogger. -""" - -import logging -from typing import Any, cast - -# custom log level for `--verbose` output -# between DEBUG and INFO -VERBOSE = 15 - - -class VerboseLogger(logging.Logger): - """Custom Logger, defining a verbose log-level - - VERBOSE is between INFO and DEBUG. - """ - - def verbose(self, msg: str, *args: Any, **kwargs: Any) -> None: - return self.log(VERBOSE, msg, *args, **kwargs) - - -def getLogger(name: str) -> VerboseLogger: - """logging.getLogger, but ensures our VerboseLogger class is returned""" - return cast(VerboseLogger, logging.getLogger(name)) - - -def init_logging() -> None: - """Register our VerboseLogger and VERBOSE log level. - - Should be called before any calls to getLogger(), - i.e. in pip._internal.__init__ - """ - logging.setLoggerClass(VerboseLogger) - logging.addLevelName(VERBOSE, "VERBOSE") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/appdirs.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/appdirs.py deleted file mode 100644 index 4152528f6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/appdirs.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -This code wraps the vendored appdirs module to so the return values are -compatible for the current pip code base. - -The intention is to rewrite current usages gradually, keeping the tests pass, -and eventually drop this after all usages are changed. -""" - -import os -import sys - -from pip._vendor import platformdirs as _appdirs - - -def user_cache_dir(appname: str) -> str: - return _appdirs.user_cache_dir(appname, appauthor=False) - - -def _macos_user_config_dir(appname: str, roaming: bool = True) -> str: - # Use ~/Application Support/pip, if the directory exists. - path = _appdirs.user_data_dir(appname, appauthor=False, roaming=roaming) - if os.path.isdir(path): - return path - - # Use a Linux-like ~/.config/pip, by default. - linux_like_path = "~/.config/" - if appname: - linux_like_path = os.path.join(linux_like_path, appname) - - return os.path.expanduser(linux_like_path) - - -def user_config_dir(appname: str, roaming: bool = True) -> str: - if sys.platform == "darwin": - return _macos_user_config_dir(appname, roaming) - - return _appdirs.user_config_dir(appname, appauthor=False, roaming=roaming) - - -# for the discussion regarding site_config_dir locations -# see <https://github.com/pypa/pip/issues/1733> -def site_config_dirs(appname: str) -> list[str]: - if sys.platform == "darwin": - dirval = _appdirs.site_data_dir(appname, appauthor=False, multipath=True) - return dirval.split(os.pathsep) - - dirval = _appdirs.site_config_dir(appname, appauthor=False, multipath=True) - if sys.platform == "win32": - return [dirval] - - # Unix-y system. Look in /etc as well. - return dirval.split(os.pathsep) + ["/etc"] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compat.py deleted file mode 100644 index 324789f1d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compat.py +++ /dev/null @@ -1,85 +0,0 @@ -"""Stuff that differs in different Python versions and platform -distributions.""" - -import importlib.resources -import logging -import os -import sys -from typing import IO - -__all__ = ["get_path_uid", "stdlib_pkgs", "tomllib", "WINDOWS"] - - -logger = logging.getLogger(__name__) - - -def has_tls() -> bool: - try: - import _ssl # noqa: F401 # ignore unused - - return True - except ImportError: - pass - - from pip._vendor.urllib3.util import IS_PYOPENSSL - - return IS_PYOPENSSL - - -def get_path_uid(path: str) -> int: - """ - Return path's uid. - - Does not follow symlinks: - https://github.com/pypa/pip/pull/935#discussion_r5307003 - - Placed this function in compat due to differences on AIX and - Jython, that should eventually go away. - - :raises OSError: When path is a symlink or can't be read. - """ - if hasattr(os, "O_NOFOLLOW"): - fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) - file_uid = os.fstat(fd).st_uid - os.close(fd) - else: # AIX and Jython - # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW - if not os.path.islink(path): - # older versions of Jython don't have `os.fstat` - file_uid = os.stat(path).st_uid - else: - # raise OSError for parity with os.O_NOFOLLOW above - raise OSError(f"{path} is a symlink; Will not return uid for symlinks") - return file_uid - - -# The importlib.resources.open_text function was deprecated in 3.11 with suggested -# replacement we use below. -if sys.version_info < (3, 11): - open_text_resource = importlib.resources.open_text -else: - - def open_text_resource( - package: str, resource: str, encoding: str = "utf-8", errors: str = "strict" - ) -> IO[str]: - return (importlib.resources.files(package) / resource).open( - "r", encoding=encoding, errors=errors - ) - - -if sys.version_info >= (3, 11): - import tomllib -else: - from pip._vendor import tomli as tomllib - - -# packages in the stdlib that may have installation metadata, but should not be -# considered 'installed'. this theoretically could be determined based on -# dist.location (py27:`sysconfig.get_paths()['stdlib']`, -# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may -# make this ineffective, so hard-coding -stdlib_pkgs = {"python", "wsgiref", "argparse"} - - -# windows detection, covers cpython and ironpython -WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compatibility_tags.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compatibility_tags.py deleted file mode 100644 index 6d98171da..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +++ /dev/null @@ -1,201 +0,0 @@ -"""Generate and work with PEP 425 Compatibility Tags.""" - -from __future__ import annotations - -import re - -from pip._vendor.packaging.tags import ( - PythonVersion, - Tag, - android_platforms, - compatible_tags, - cpython_tags, - generic_tags, - interpreter_name, - interpreter_version, - ios_platforms, - mac_platforms, -) - -_apple_arch_pat = re.compile(r"(.+)_(\d+)_(\d+)_(.+)") - - -def version_info_to_nodot(version_info: tuple[int, ...]) -> str: - # Only use up to the first two numbers. - return "".join(map(str, version_info[:2])) - - -def _mac_platforms(arch: str) -> list[str]: - match = _apple_arch_pat.match(arch) - if match: - name, major, minor, actual_arch = match.groups() - mac_version = (int(major), int(minor)) - arches = [ - # Since we have always only checked that the platform starts - # with "macosx", for backwards-compatibility we extract the - # actual prefix provided by the user in case they provided - # something like "macosxcustom_". It may be good to remove - # this as undocumented or deprecate it in the future. - "{}_{}".format(name, arch[len("macosx_") :]) - for arch in mac_platforms(mac_version, actual_arch) - ] - else: - # arch pattern didn't match (?!) - arches = [arch] - return arches - - -def _ios_platforms(arch: str) -> list[str]: - match = _apple_arch_pat.match(arch) - if match: - name, major, minor, actual_multiarch = match.groups() - ios_version = (int(major), int(minor)) - arches = [ - # Since we have always only checked that the platform starts - # with "ios", for backwards-compatibility we extract the - # actual prefix provided by the user in case they provided - # something like "ioscustom_". It may be good to remove - # this as undocumented or deprecate it in the future. - "{}_{}".format(name, arch[len("ios_") :]) - for arch in ios_platforms(ios_version, actual_multiarch) - ] - else: - # arch pattern didn't match (?!) - arches = [arch] - return arches - - -def _android_platforms(arch: str) -> list[str]: - match = re.fullmatch(r"android_(\d+)_(.+)", arch) - if match: - api_level, abi = match.groups() - return list(android_platforms(int(api_level), abi)) - else: - # arch pattern didn't match (?!) - return [arch] - - -def _custom_manylinux_platforms(arch: str) -> list[str]: - arches = [arch] - arch_prefix, arch_sep, arch_suffix = arch.partition("_") - if arch_prefix == "manylinux2014": - # manylinux1/manylinux2010 wheels run on most manylinux2014 systems - # with the exception of wheels depending on ncurses. PEP 599 states - # manylinux1/manylinux2010 wheels should be considered - # manylinux2014 wheels: - # https://www.python.org/dev/peps/pep-0599/#backwards-compatibility-with-manylinux2010-wheels - if arch_suffix in {"i686", "x86_64"}: - arches.append("manylinux2010" + arch_sep + arch_suffix) - arches.append("manylinux1" + arch_sep + arch_suffix) - elif arch_prefix == "manylinux2010": - # manylinux1 wheels run on most manylinux2010 systems with the - # exception of wheels depending on ncurses. PEP 571 states - # manylinux1 wheels should be considered manylinux2010 wheels: - # https://www.python.org/dev/peps/pep-0571/#backwards-compatibility-with-manylinux1-wheels - arches.append("manylinux1" + arch_sep + arch_suffix) - return arches - - -def _get_custom_platforms(arch: str) -> list[str]: - arch_prefix, arch_sep, arch_suffix = arch.partition("_") - if arch.startswith("macosx"): - arches = _mac_platforms(arch) - elif arch.startswith("ios"): - arches = _ios_platforms(arch) - elif arch_prefix == "android": - arches = _android_platforms(arch) - elif arch_prefix in ["manylinux2014", "manylinux2010"]: - arches = _custom_manylinux_platforms(arch) - else: - arches = [arch] - return arches - - -def _expand_allowed_platforms(platforms: list[str] | None) -> list[str] | None: - if not platforms: - return None - - seen = set() - result = [] - - for p in platforms: - if p in seen: - continue - additions = [c for c in _get_custom_platforms(p) if c not in seen] - seen.update(additions) - result.extend(additions) - - return result - - -def _get_python_version(version: str) -> PythonVersion: - if len(version) > 1: - return int(version[0]), int(version[1:]) - else: - return (int(version[0]),) - - -def _get_custom_interpreter( - implementation: str | None = None, version: str | None = None -) -> str: - if implementation is None: - implementation = interpreter_name() - if version is None: - version = interpreter_version() - return f"{implementation}{version}" - - -def get_supported( - version: str | None = None, - platforms: list[str] | None = None, - impl: str | None = None, - abis: list[str] | None = None, -) -> list[Tag]: - """Return a list of supported tags for each version specified in - `versions`. - - :param version: a string version, of the form "33" or "32", - or None. The version will be assumed to support our ABI. - :param platform: specify a list of platforms you want valid - tags for, or None. If None, use the local system platform. - :param impl: specify the exact implementation you want valid - tags for, or None. If None, use the local interpreter impl. - :param abis: specify a list of abis you want valid - tags for, or None. If None, use the local interpreter abi. - """ - supported: list[Tag] = [] - - python_version: PythonVersion | None = None - if version is not None: - python_version = _get_python_version(version) - - interpreter = _get_custom_interpreter(impl, version) - - platforms = _expand_allowed_platforms(platforms) - - is_cpython = (impl or interpreter_name()) == "cp" - if is_cpython: - supported.extend( - cpython_tags( - python_version=python_version, - abis=abis, - platforms=platforms, - ) - ) - else: - supported.extend( - generic_tags( - interpreter=interpreter, - abis=abis, - platforms=platforms, - ) - ) - supported.extend( - compatible_tags( - python_version=python_version, - interpreter=interpreter, - platforms=platforms, - ) - ) - - return supported diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/datetime.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/datetime.py deleted file mode 100644 index f8870eacd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/datetime.py +++ /dev/null @@ -1,28 +0,0 @@ -"""For when pip wants to check the date or time.""" - -import datetime -import sys - - -def today_is_later_than(year: int, month: int, day: int) -> bool: - today = datetime.date.today() - given = datetime.date(year, month, day) - - return today > given - - -def parse_iso_datetime(isodate: str) -> datetime.datetime: - """Convert an ISO format string to a datetime. - - Handles the format 2020-01-22T14:24:01Z (trailing Z) - which is not supported by older versions of fromisoformat. - """ - # Python 3.11+ supports Z suffix natively in fromisoformat - if sys.version_info >= (3, 11): - return datetime.datetime.fromisoformat(isodate) - else: - return datetime.datetime.fromisoformat( - isodate.replace("Z", "+00:00") - if isodate.endswith("Z") and ("T" in isodate or " " in isodate.strip()) - else isodate - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/deprecation.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/deprecation.py deleted file mode 100644 index 96e7783fe..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/deprecation.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -A module that implements tooling to enable easy warnings about deprecations. -""" - -from __future__ import annotations - -import logging -import warnings -from typing import Any, TextIO - -from pip._vendor.packaging.version import parse - -from pip import __version__ as current_version # NOTE: tests patch this name. - -DEPRECATION_MSG_PREFIX = "DEPRECATION: " - - -class PipDeprecationWarning(Warning): - pass - - -_original_showwarning: Any = None - - -# Warnings <-> Logging Integration -def _showwarning( - message: Warning | str, - category: type[Warning], - filename: str, - lineno: int, - file: TextIO | None = None, - line: str | None = None, -) -> None: - if file is not None: - if _original_showwarning is not None: - _original_showwarning(message, category, filename, lineno, file, line) - elif issubclass(category, PipDeprecationWarning): - # We use a specially named logger which will handle all of the - # deprecation messages for pip. - logger = logging.getLogger("pip._internal.deprecations") - logger.warning(message) - else: - _original_showwarning(message, category, filename, lineno, file, line) - - -def install_warning_logger() -> None: - # Enable our Deprecation Warnings - warnings.simplefilter("default", PipDeprecationWarning, append=True) - - global _original_showwarning - - if _original_showwarning is None: - _original_showwarning = warnings.showwarning - warnings.showwarning = _showwarning - - -def deprecated( - *, - reason: str, - replacement: str | None, - gone_in: str | None, - feature_flag: str | None = None, - issue: int | None = None, -) -> None: - """Helper to deprecate existing functionality. - - reason: - Textual reason shown to the user about why this functionality has - been deprecated. Should be a complete sentence. - replacement: - Textual suggestion shown to the user about what alternative - functionality they can use. - gone_in: - The version of pip does this functionality should get removed in. - Raises an error if pip's current version is greater than or equal to - this. - feature_flag: - Command-line flag of the form --use-feature={feature_flag} for testing - upcoming functionality. - issue: - Issue number on the tracker that would serve as a useful place for - users to find related discussion and provide feedback. - """ - - # Determine whether or not the feature is already gone in this version. - is_gone = gone_in is not None and parse(current_version) >= parse(gone_in) - - message_parts = [ - (reason, f"{DEPRECATION_MSG_PREFIX}{{}}"), - ( - gone_in, - ( - "pip {} will enforce this behaviour change." - if not is_gone - else "Since pip {}, this is no longer supported." - ), - ), - ( - replacement, - "A possible replacement is {}.", - ), - ( - feature_flag, - ( - "You can use the flag --use-feature={} to test the upcoming behaviour." - if not is_gone - else None - ), - ), - ( - issue, - "Discussion can be found at https://github.com/pypa/pip/issues/{}", - ), - ] - - message = " ".join( - format_str.format(value) - for value, format_str in message_parts - if format_str is not None and value is not None - ) - - # Raise as an error if this behaviour is deprecated. - if is_gone: - raise PipDeprecationWarning(message) - - warnings.warn(message, category=PipDeprecationWarning, stacklevel=2) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py deleted file mode 100644 index 3cbc1e763..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - -from pip._internal.models.direct_url import ArchiveInfo, DirectUrl, DirInfo, VcsInfo -from pip._internal.models.link import Link -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import vcs - - -def direct_url_as_pep440_direct_reference(direct_url: DirectUrl, name: str) -> str: - """Convert a DirectUrl to a pip requirement string.""" - direct_url.validate() # if invalid, this is a pip bug - requirement = name + " @ " - fragments = [] - if isinstance(direct_url.info, VcsInfo): - requirement += ( - f"{direct_url.info.vcs}+{direct_url.url}@{direct_url.info.commit_id}" - ) - elif isinstance(direct_url.info, ArchiveInfo): - requirement += direct_url.url - if direct_url.info.hash: - fragments.append(direct_url.info.hash) - else: - assert isinstance(direct_url.info, DirInfo) - requirement += direct_url.url - if direct_url.subdirectory: - fragments.append("subdirectory=" + direct_url.subdirectory) - if fragments: - requirement += "#" + "&".join(fragments) - return requirement - - -def direct_url_for_editable(source_dir: str) -> DirectUrl: - return DirectUrl( - url=path_to_url(source_dir), - info=DirInfo(editable=True), - ) - - -def direct_url_from_link( - link: Link, source_dir: str | None = None, link_is_in_wheel_cache: bool = False -) -> DirectUrl: - if link.is_vcs: - vcs_backend = vcs.get_backend_for_scheme(link.scheme) - assert vcs_backend - url, requested_revision, _ = vcs_backend.get_url_rev_and_auth( - link.url_without_fragment - ) - # For VCS links, we need to find out and add commit_id. - if link_is_in_wheel_cache: - # If the requested VCS link corresponds to a cached - # wheel, it means the requested revision was an - # immutable commit hash, otherwise it would not have - # been cached. In that case we don't have a source_dir - # with the VCS checkout. - assert requested_revision - commit_id = requested_revision - else: - # If the wheel was not in cache, it means we have - # had to checkout from VCS to build and we have a source_dir - # which we can inspect to find out the commit id. - assert source_dir - commit_id = vcs_backend.get_revision(source_dir) - return DirectUrl( - url=url, - info=VcsInfo( - vcs=vcs_backend.name, - commit_id=commit_id, - requested_revision=requested_revision, - ), - subdirectory=link.subdirectory_fragment, - ) - elif link.is_existing_dir(): - return DirectUrl( - url=link.url_without_fragment, - info=DirInfo(), - subdirectory=link.subdirectory_fragment, - ) - else: - hash = None - hash_name = link.hash_name - if hash_name: - hash = f"{hash_name}={link.hash}" - return DirectUrl( - url=link.url_without_fragment, - info=ArchiveInfo(hash=hash), - subdirectory=link.subdirectory_fragment, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/egg_link.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/egg_link.py deleted file mode 100644 index dc85a58b3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/egg_link.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import annotations - -import os -import re -import sys - -from pip._internal.locations import site_packages, user_site -from pip._internal.utils.virtualenv import ( - running_under_virtualenv, - virtualenv_no_global, -) - -__all__ = [ - "egg_link_path_from_sys_path", - "egg_link_path_from_location", -] - - -def _egg_link_names(raw_name: str) -> list[str]: - """ - Convert a Name metadata value to a .egg-link name, by applying - the same substitution as pkg_resources's safe_name function. - Note: we cannot use canonicalize_name because it has a different logic. - - We also look for the raw name (without normalization) as setuptools 69 changed - the way it names .egg-link files (https://github.com/pypa/setuptools/issues/4167). - """ - return [ - re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link", - f"{raw_name}.egg-link", - ] - - -def egg_link_path_from_sys_path(raw_name: str) -> str | None: - """ - Look for a .egg-link file for project name, by walking sys.path. - """ - egg_link_names = _egg_link_names(raw_name) - for path_item in sys.path: - for egg_link_name in egg_link_names: - egg_link = os.path.join(path_item, egg_link_name) - if os.path.isfile(egg_link): - return egg_link - return None - - -def egg_link_path_from_location(raw_name: str) -> str | None: - """ - Return the path for the .egg-link file if it exists, otherwise, None. - - There's 3 scenarios: - 1) not in a virtualenv - try to find in site.USER_SITE, then site_packages - 2) in a no-global virtualenv - try to find in site_packages - 3) in a yes-global virtualenv - try to find in site_packages, then site.USER_SITE - (don't look in global location) - - For #1 and #3, there could be odd cases, where there's an egg-link in 2 - locations. - - This method will just return the first one found. - """ - sites: list[str] = [] - if running_under_virtualenv(): - sites.append(site_packages) - if not virtualenv_no_global() and user_site: - sites.append(user_site) - else: - if user_site: - sites.append(user_site) - sites.append(site_packages) - - egg_link_names = _egg_link_names(raw_name) - for site in sites: - for egg_link_name in egg_link_names: - egglink = os.path.join(site, egg_link_name) - if os.path.isfile(egglink): - return egglink - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/entrypoints.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/entrypoints.py deleted file mode 100644 index e3a150eeb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/entrypoints.py +++ /dev/null @@ -1,88 +0,0 @@ -from __future__ import annotations - -import itertools -import os -import shutil -import sys - -from pip._internal.cli.main import main -from pip._internal.utils.compat import WINDOWS - -_EXECUTABLE_NAMES = [ - "pip", - f"pip{sys.version_info.major}", - f"pip{sys.version_info.major}.{sys.version_info.minor}", -] -if WINDOWS: - _allowed_extensions = {"", ".exe"} - _EXECUTABLE_NAMES = [ - "".join(parts) - for parts in itertools.product(_EXECUTABLE_NAMES, _allowed_extensions) - ] - - -def _wrapper(args: list[str] | None = None) -> int: - """Central wrapper for all old entrypoints. - - Historically pip has had several entrypoints defined. Because of issues - arising from PATH, sys.path, multiple Pythons, their interactions, and most - of them having a pip installed, users suffer every time an entrypoint gets - moved. - - To alleviate this pain, and provide a mechanism for warning users and - directing them to an appropriate place for help, we now define all of - our old entrypoints as wrappers for the current one. - """ - sys.stderr.write( - "WARNING: pip is being invoked by an old script wrapper. This will " - "fail in a future version of pip.\n" - "Please see https://github.com/pypa/pip/issues/5599 for advice on " - "fixing the underlying issue.\n" - "To avoid this problem you can invoke Python with '-m pip' instead of " - "running pip directly.\n" - ) - return main(args) - - -def get_best_invocation_for_this_pip() -> str: - """Try to figure out the best way to invoke pip in the current environment.""" - binary_directory = "Scripts" if WINDOWS else "bin" - binary_prefix = os.path.join(sys.prefix, binary_directory) - - # Try to use pip[X[.Y]] names, if those executables for this environment are - # the first on PATH with that name. - path_parts = os.path.normcase(os.environ.get("PATH", "")).split(os.pathsep) - exe_are_in_PATH = os.path.normcase(binary_prefix) in path_parts - if exe_are_in_PATH: - for exe_name in _EXECUTABLE_NAMES: - found_executable = shutil.which(exe_name) - binary_executable = os.path.join(binary_prefix, exe_name) - if ( - found_executable - and os.path.exists(binary_executable) - and os.path.samefile( - found_executable, - binary_executable, - ) - ): - return exe_name - - # Use the `-m` invocation, if there's no "nice" invocation. - return f"{get_best_invocation_for_this_python()} -m pip" - - -def get_best_invocation_for_this_python() -> str: - """Try to figure out the best way to invoke the current Python.""" - exe = sys.executable - exe_name = os.path.basename(exe) - - # Try to use the basename, if it's the first executable. - found_executable = shutil.which(exe_name) - # Virtual environments often symlink to their parent Python binaries, but we don't - # want to treat the Python binaries as equivalent when the environment's Python is - # not on PATH (not activated). Thus, we don't follow symlinks. - if found_executable and os.path.samestat(os.lstat(found_executable), os.lstat(exe)): - return exe_name - - # Use the full executable name, because we couldn't find something simpler. - return exe diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filesystem.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filesystem.py deleted file mode 100644 index 52eb78f42..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filesystem.py +++ /dev/null @@ -1,203 +0,0 @@ -from __future__ import annotations - -import fnmatch -import os -import os.path -import random -import sys -from collections.abc import Generator -from contextlib import contextmanager -from pathlib import Path -from tempfile import NamedTemporaryFile -from typing import Any, BinaryIO, Callable, cast - -from pip._internal.utils.compat import get_path_uid -from pip._internal.utils.misc import format_size -from pip._internal.utils.retry import retry - - -def check_path_owner(path: str) -> bool: - # If we don't have a way to check the effective uid of this process, then - # we'll just assume that we own the directory. - if sys.platform == "win32" or not hasattr(os, "geteuid"): - return True - - assert os.path.isabs(path) - - previous = None - while path != previous: - if os.path.lexists(path): - # Check if path is writable by current user. - if os.geteuid() == 0: - # Special handling for root user in order to handle properly - # cases where users use sudo without -H flag. - try: - path_uid = get_path_uid(path) - except OSError: - return False - return path_uid == 0 - else: - return os.access(path, os.W_OK) - else: - previous, path = path, os.path.dirname(path) - return False # assume we don't own the path - - -@contextmanager -def adjacent_tmp_file(path: str, **kwargs: Any) -> Generator[BinaryIO, None, None]: - """Return a file-like object pointing to a tmp file next to path. - - The file is created securely and is ensured to be written to disk - after the context reaches its end. - - kwargs will be passed to tempfile.NamedTemporaryFile to control - the way the temporary file will be opened. - """ - with NamedTemporaryFile( - delete=False, - dir=os.path.dirname(path), - prefix=os.path.basename(path), - suffix=".tmp", - **kwargs, - ) as f: - result = cast(BinaryIO, f) - try: - yield result - finally: - result.flush() - os.fsync(result.fileno()) - - -replace = retry(stop_after_delay=1, wait=0.25)(os.replace) - - -# test_writable_dir and _test_writable_dir_win are copied from Flit, -# with the author's agreement to also place them under pip's license. -def test_writable_dir(path: str) -> bool: - """Check if a directory is writable. - - Uses os.access() on POSIX, tries creating files on Windows. - """ - # If the directory doesn't exist, find the closest parent that does. - while not os.path.isdir(path): - parent = os.path.dirname(path) - if parent == path: - break # Should never get here, but infinite loops are bad - path = parent - - if os.name == "posix": - return os.access(path, os.W_OK) - - return _test_writable_dir_win(path) - - -def _test_writable_dir_win(path: str) -> bool: - # os.access doesn't work on Windows: http://bugs.python.org/issue2528 - # and we can't use tempfile: http://bugs.python.org/issue22107 - basename = "accesstest_deleteme_fishfingers_custard_" - alphabet = "abcdefghijklmnopqrstuvwxyz0123456789" - for _ in range(10): - name = basename + "".join(random.choice(alphabet) for _ in range(6)) - file = os.path.join(path, name) - try: - fd = os.open(file, os.O_RDWR | os.O_CREAT | os.O_EXCL) - except FileExistsError: - pass - except PermissionError: - # This could be because there's a directory with the same name. - # But it's highly unlikely there's a directory called that, - # so we'll assume it's because the parent dir is not writable. - # This could as well be because the parent dir is not readable, - # due to non-privileged user access. - return False - else: - os.close(fd) - os.unlink(file) - return True - - # This should never be reached - raise OSError("Unexpected condition testing for writable directory") - - -def find_files(path: str, pattern: str) -> list[str]: - """Returns a list of absolute paths of files beneath path, recursively, - with filenames which match the UNIX-style shell glob pattern.""" - result: list[str] = [] - for root, _, files in os.walk(path): - matches = fnmatch.filter(files, pattern) - result.extend(os.path.join(root, f) for f in matches) - return result - - -def file_size(path: str) -> int | float: - # If it's a symlink, return 0. - if os.path.islink(path): - return 0 - return os.path.getsize(path) - - -def format_file_size(path: str) -> str: - return format_size(file_size(path)) - - -def directory_size(path: str) -> int | float: - size = 0.0 - for root, _dirs, files in os.walk(path): - for filename in files: - file_path = os.path.join(root, filename) - size += file_size(file_path) - return size - - -def format_directory_size(path: str) -> str: - return format_size(directory_size(path)) - - -def copy_directory_permissions(directory: str, target_file: BinaryIO) -> None: - mode = ( - os.stat(directory).st_mode & 0o666 # select read/write permissions of directory - | 0o600 # set owner read/write permissions - ) - # Change permissions only if there is no risk of following a symlink. - if os.chmod in os.supports_fd: - os.chmod(target_file.fileno(), mode) - elif os.chmod in os.supports_follow_symlinks: - os.chmod(target_file.name, mode, follow_symlinks=False) - - -def _subdirs_without_generic( - path: str, predicate: Callable[[str, list[str]], bool] -) -> Generator[Path]: - """Yields every subdirectory of +path+ that has no files matching the - predicate under it.""" - - directories = [] - excluded = set() - - for root_str, _, filenames in os.walk(Path(path).resolve()): - root = Path(root_str) - if predicate(root_str, filenames): - # This directory should be excluded, so exclude it and all of its - # parent directories. - # The last item in root.parents is ".", so we ignore it. - # - # Wrapping this in `list()` is only needed for Python 3.9. - excluded.update(list(root.parents)[:-1]) - excluded.add(root) - directories.append(root) - - for d in sorted(directories, reverse=True): - if d not in excluded: - yield d - - -def subdirs_without_files(path: str) -> Generator[Path]: - """Yields every subdirectory of +path+ that has no files under it.""" - return _subdirs_without_generic(path, lambda root, filenames: len(filenames) > 0) - - -def subdirs_without_wheels(path: str) -> Generator[Path]: - """Yields every subdirectory of +path+ that has no .whl files under it.""" - return _subdirs_without_generic( - path, lambda root, filenames: any(x.endswith(".whl") for x in filenames) - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filetypes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filetypes.py deleted file mode 100644 index 2b8baad7c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/filetypes.py +++ /dev/null @@ -1,24 +0,0 @@ -"""Filetype information.""" - -from pip._internal.utils.misc import splitext - -WHEEL_EXTENSION = ".whl" -BZ2_EXTENSIONS: tuple[str, ...] = (".tar.bz2", ".tbz") -XZ_EXTENSIONS: tuple[str, ...] = ( - ".tar.xz", - ".txz", - ".tlz", - ".tar.lz", - ".tar.lzma", -) -ZIP_EXTENSIONS: tuple[str, ...] = (".zip", WHEEL_EXTENSION) -TAR_EXTENSIONS: tuple[str, ...] = (".tar.gz", ".tgz", ".tar") -ARCHIVE_EXTENSIONS = ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS - - -def is_archive_file(name: str) -> bool: - """Return True if `name` is a considered as an archive file.""" - ext = splitext(name)[1].lower() - if ext in ARCHIVE_EXTENSIONS: - return True - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/glibc.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/glibc.py deleted file mode 100644 index 2cb3013c7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/glibc.py +++ /dev/null @@ -1,102 +0,0 @@ -from __future__ import annotations - -import os -import sys - - -def glibc_version_string() -> str | None: - "Returns glibc version string, or None if not using glibc." - return glibc_version_string_confstr() or glibc_version_string_ctypes() - - -def glibc_version_string_confstr() -> str | None: - "Primary implementation of glibc_version_string using os.confstr." - # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely - # to be broken or missing. This strategy is used in the standard library - # platform module: - # https://github.com/python/cpython/blob/fcf1d003bf4f0100c9d0921ff3d70e1127ca1b71/Lib/platform.py#L175-L183 - if sys.platform == "win32": - return None - try: - gnu_libc_version = os.confstr("CS_GNU_LIBC_VERSION") - if gnu_libc_version is None: - return None - # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17": - _, version = gnu_libc_version.split() - except (AttributeError, OSError, ValueError): - # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... - return None - return version - - -def glibc_version_string_ctypes() -> str | None: - "Fallback implementation of glibc_version_string using ctypes." - - try: - import ctypes - except ImportError: - return None - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - # - # We must also handle the special case where the executable is not a - # dynamically linked executable. This can occur when using musl libc, - # for example. In this situation, dlopen() will error, leading to an - # OSError. Interestingly, at least in the case of musl, there is no - # errno set on the OSError. The single string argument used to construct - # OSError comes from libc itself and is therefore not portable to - # hard code here. In any case, failure to call dlopen() means we - # can't proceed, so we bail on our attempt. - try: - process_namespace = ctypes.CDLL(None) - except OSError: - return None - - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str: str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -# platform.libc_ver regularly returns completely nonsensical glibc -# versions. E.g. on my computer, platform says: -# -# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.7') -# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.9') -# -# But the truth is: -# -# ~$ ldd --version -# ldd (Debian GLIBC 2.22-11) 2.22 -# -# This is unfortunate, because it means that the linehaul data on libc -# versions that was generated by pip 8.1.2 and earlier is useless and -# misleading. Solution: instead of using platform, use our code that actually -# works. -def libc_ver() -> tuple[str, str]: - """Try to determine the glibc version - - Returns a tuple of strings (lib, version) which default to empty strings - in case the lookup fails. - """ - glibc_version = glibc_version_string() - if glibc_version is None: - return ("", "") - else: - return ("glibc", glibc_version) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/hashes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/hashes.py deleted file mode 100644 index 3d8c125ad..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/hashes.py +++ /dev/null @@ -1,150 +0,0 @@ -from __future__ import annotations - -import hashlib -from collections.abc import Iterable -from typing import TYPE_CHECKING, BinaryIO, NoReturn - -from pip._internal.exceptions import HashMismatch, HashMissing, InstallationError -from pip._internal.utils.misc import read_chunks - -if TYPE_CHECKING: - from hashlib import _Hash - - -# The recommended hash algo of the moment. Change this whenever the state of -# the art changes; it won't hurt backward compatibility. -FAVORITE_HASH = "sha256" - - -# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` -# Currently, those are the ones at least as collision-resistant as sha256. -STRONG_HASHES = ["sha256", "sha384", "sha512"] - - -class Hashes: - """A wrapper that builds multiple hashes at once and checks them against - known-good values - - """ - - def __init__(self, hashes: dict[str, list[str]] | None = None) -> None: - """ - :param hashes: A dict of algorithm names pointing to lists of allowed - hex digests - """ - allowed = {} - if hashes is not None: - for alg, keys in hashes.items(): - # Make sure values are always sorted (to ease equality checks) - allowed[alg] = [k.lower() for k in sorted(keys)] - self._allowed = allowed - - def __and__(self, other: Hashes) -> Hashes: - if not isinstance(other, Hashes): - return NotImplemented - - # If either of the Hashes object is entirely empty (i.e. no hash - # specified at all), all hashes from the other object are allowed. - if not other: - return self - if not self: - return other - - # Otherwise only hashes that present in both objects are allowed. - new = {} - for alg, values in other._allowed.items(): - if alg not in self._allowed: - continue - new[alg] = [v for v in values if v in self._allowed[alg]] - return Hashes(new) - - @property - def digest_count(self) -> int: - return sum(len(digests) for digests in self._allowed.values()) - - def is_hash_allowed(self, hash_name: str, hex_digest: str) -> bool: - """Return whether the given hex digest is allowed.""" - return hex_digest in self._allowed.get(hash_name, []) - - def check_against_chunks(self, chunks: Iterable[bytes]) -> None: - """Check good hashes against ones built from iterable of chunks of - data. - - Raise HashMismatch if none match. - - """ - gots = {} - for hash_name in self._allowed.keys(): - try: - gots[hash_name] = hashlib.new(hash_name) - except (ValueError, TypeError): - raise InstallationError(f"Unknown hash name: {hash_name}") - - for chunk in chunks: - for hash in gots.values(): - hash.update(chunk) - - for hash_name, got in gots.items(): - if got.hexdigest() in self._allowed[hash_name]: - return - self._raise(gots) - - def _raise(self, gots: dict[str, _Hash]) -> NoReturn: - raise HashMismatch(self._allowed, gots) - - def check_against_file(self, file: BinaryIO) -> None: - """Check good hashes against a file-like object - - Raise HashMismatch if none match. - - """ - return self.check_against_chunks(read_chunks(file)) - - def check_against_path(self, path: str) -> None: - with open(path, "rb") as file: - return self.check_against_file(file) - - def has_one_of(self, hashes: dict[str, str]) -> bool: - """Return whether any of the given hashes are allowed.""" - for hash_name, hex_digest in hashes.items(): - if self.is_hash_allowed(hash_name, hex_digest): - return True - return False - - def __bool__(self) -> bool: - """Return whether I know any known-good hashes.""" - return bool(self._allowed) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Hashes): - return NotImplemented - return self._allowed == other._allowed - - def __hash__(self) -> int: - return hash( - ",".join( - sorted( - ":".join((alg, digest)) - for alg, digest_list in self._allowed.items() - for digest in digest_list - ) - ) - ) - - -class MissingHashes(Hashes): - """A workalike for Hashes used when we're missing a hash for a requirement - - It computes the actual hash of the requirement and raises a HashMissing - exception showing it to the user. - - """ - - def __init__(self) -> None: - """Don't offer the ``hashes`` kwarg.""" - # Pass our favorite hash in to generate a "gotten hash". With the - # empty list, it will never match, so an error will always raise. - super().__init__(hashes={FAVORITE_HASH: []}) - - def _raise(self, gots: dict[str, _Hash]) -> NoReturn: - raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/logging.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/logging.py deleted file mode 100644 index e06770358..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/logging.py +++ /dev/null @@ -1,396 +0,0 @@ -from __future__ import annotations - -import contextlib -import errno -import logging -import logging.handlers -import os -import sys -import threading -from collections.abc import Generator -from dataclasses import dataclass -from io import StringIO, TextIOWrapper -from logging import Filter -from typing import Any, ClassVar - -from pip._vendor.rich.console import ( - Console, - ConsoleOptions, - ConsoleRenderable, - RenderableType, - RenderResult, - RichCast, -) -from pip._vendor.rich.highlighter import NullHighlighter -from pip._vendor.rich.logging import RichHandler -from pip._vendor.rich.segment import Segment -from pip._vendor.rich.style import Style - -from pip._internal.utils._log import VERBOSE, getLogger -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.deprecation import DEPRECATION_MSG_PREFIX -from pip._internal.utils.misc import StreamWrapper, ensure_dir - -_log_state = threading.local() -_stdout_console = None -_stderr_console = None -subprocess_logger = getLogger("pip.subprocessor") - - -class BrokenStdoutLoggingError(Exception): - """ - Raised if BrokenPipeError occurs for the stdout stream while logging. - """ - - -def _is_broken_pipe_error(exc_class: type[BaseException], exc: BaseException) -> bool: - if exc_class is BrokenPipeError: - return True - - # On Windows, a broken pipe can show up as EINVAL rather than EPIPE: - # https://bugs.python.org/issue19612 - # https://bugs.python.org/issue30418 - if not WINDOWS: - return False - - return isinstance(exc, OSError) and exc.errno in (errno.EINVAL, errno.EPIPE) - - -@contextlib.contextmanager -def capture_logging() -> Generator[StringIO, None, None]: - """Capture all pip logs in a buffer temporarily.""" - # Patching sys.std(out|err) directly is not viable as the caller - # may want to emit non-logging output (e.g. a rich spinner). To - # avoid capturing that, temporarily patch the root logging handlers - # to use new rich consoles that write to a StringIO. - handlers = {} - for handler in logging.getLogger().handlers: - if isinstance(handler, RichPipStreamHandler): - # Also store the handler's original console so it can be - # restored on context exit. - handlers[handler] = handler.console - - fake_stream = StreamWrapper.from_stream(sys.stdout) - if not handlers: - yield fake_stream - return - - # HACK: grab no_color attribute from a random handler console since - # it's a global option anyway. - no_color = next(iter(handlers.values())).no_color - fake_console = PipConsole(file=fake_stream, no_color=no_color, soft_wrap=True) - try: - for handler in handlers: - handler.console = fake_console - yield fake_stream - finally: - for handler, original_console in handlers.items(): - handler.console = original_console - - -@contextlib.contextmanager -def indent_log(num: int = 2) -> Generator[None, None, None]: - """ - A context manager which will cause the log output to be indented for any - log messages emitted inside it. - """ - # For thread-safety - _log_state.indentation = get_indentation() - _log_state.indentation += num - try: - yield - finally: - _log_state.indentation -= num - - -def get_indentation() -> int: - return getattr(_log_state, "indentation", 0) - - -class IndentingFormatter(logging.Formatter): - default_time_format = "%Y-%m-%dT%H:%M:%S" - - def __init__( - self, - *args: Any, - add_timestamp: bool = False, - **kwargs: Any, - ) -> None: - """ - A logging.Formatter that obeys the indent_log() context manager. - - :param add_timestamp: A bool indicating output lines should be prefixed - with their record's timestamp. - """ - self.add_timestamp = add_timestamp - super().__init__(*args, **kwargs) - - def get_message_start(self, formatted: str, levelno: int) -> str: - """ - Return the start of the formatted log message (not counting the - prefix to add to each line). - """ - if levelno < logging.WARNING: - return "" - if formatted.startswith(DEPRECATION_MSG_PREFIX): - # Then the message already has a prefix. We don't want it to - # look like "WARNING: DEPRECATION: ...." - return "" - if levelno < logging.ERROR: - return "WARNING: " - - return "ERROR: " - - def format(self, record: logging.LogRecord) -> str: - """ - Calls the standard formatter, but will indent all of the log message - lines by our current indentation level. - """ - formatted = super().format(record) - message_start = self.get_message_start(formatted, record.levelno) - formatted = message_start + formatted - - prefix = "" - if self.add_timestamp: - prefix = f"{self.formatTime(record)} " - prefix += " " * get_indentation() - formatted = "".join([prefix + line for line in formatted.splitlines(True)]) - return formatted - - -@dataclass -class IndentedRenderable: - renderable: RenderableType - indent: int - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - segments = console.render(self.renderable, options) - lines = Segment.split_lines(segments) - for line in lines: - yield Segment(" " * self.indent) - yield from line - yield Segment("\n") - - -class PipConsole(Console): - def on_broken_pipe(self) -> None: - # Reraise the original exception, rich 13.8.0+ exits by default - # instead, preventing our handler from firing. - raise BrokenPipeError() from None - - -def get_console(*, stderr: bool = False) -> Console: - if stderr: - assert _stderr_console is not None, "stderr rich console is missing!" - return _stderr_console - else: - assert _stdout_console is not None, "stdout rich console is missing!" - return _stdout_console - - -class RichPipStreamHandler(RichHandler): - KEYWORDS: ClassVar[list[str] | None] = [] - - def __init__(self, console: Console) -> None: - super().__init__( - console=console, - show_time=False, - show_level=False, - show_path=False, - highlighter=NullHighlighter(), - ) - - # Our custom override on Rich's logger, to make things work as we need them to. - def emit(self, record: logging.LogRecord) -> None: - style: Style | None = None - - # If we are given a diagnostic error to present, present it with indentation. - if getattr(record, "rich", False): - assert isinstance(record.args, tuple) - (rich_renderable,) = record.args - assert isinstance( - rich_renderable, (ConsoleRenderable, RichCast, str) - ), f"{rich_renderable} is not rich-console-renderable" - - renderable: RenderableType = IndentedRenderable( - rich_renderable, indent=get_indentation() - ) - else: - message = self.format(record) - renderable = self.render_message(record, message) - if record.levelno is not None: - if record.levelno >= logging.ERROR: - style = Style(color="red") - elif record.levelno >= logging.WARNING: - style = Style(color="yellow") - - try: - self.console.print(renderable, overflow="ignore", crop=False, style=style) - except Exception: - self.handleError(record) - - def handleError(self, record: logging.LogRecord) -> None: - """Called when logging is unable to log some output.""" - - exc_class, exc = sys.exc_info()[:2] - # If a broken pipe occurred while calling write() or flush() on the - # stdout stream in logging's Handler.emit(), then raise our special - # exception so we can handle it in main() instead of logging the - # broken pipe error and continuing. - if ( - exc_class - and exc - and self.console.file is sys.stdout - and _is_broken_pipe_error(exc_class, exc) - ): - raise BrokenStdoutLoggingError() - - return super().handleError(record) - - -class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): - def _open(self) -> TextIOWrapper: - ensure_dir(os.path.dirname(self.baseFilename)) - return super()._open() - - -class MaxLevelFilter(Filter): - def __init__(self, level: int) -> None: - self.level = level - - def filter(self, record: logging.LogRecord) -> bool: - return record.levelno < self.level - - -class ExcludeLoggerFilter(Filter): - """ - A logging Filter that excludes records from a logger (or its children). - """ - - def filter(self, record: logging.LogRecord) -> bool: - # The base Filter class allows only records from a logger (or its - # children). - return not super().filter(record) - - -def setup_logging(verbosity: int, no_color: bool, user_log_file: str | None) -> int: - """Configures and sets up all of the logging - - Returns the requested logging level, as its integer value. - """ - - # Determine the level to be logging at. - if verbosity >= 2: - level_number = logging.DEBUG - elif verbosity == 1: - level_number = VERBOSE - elif verbosity == -1: - level_number = logging.WARNING - elif verbosity == -2: - level_number = logging.ERROR - elif verbosity <= -3: - level_number = logging.CRITICAL - else: - level_number = logging.INFO - - level = logging.getLevelName(level_number) - - # The "root" logger should match the "console" level *unless* we also need - # to log to a user log file. - include_user_log = user_log_file is not None - if include_user_log: - additional_log_file = user_log_file - root_level = "DEBUG" - else: - additional_log_file = "/dev/null" - root_level = level - - # Disable any logging besides WARNING unless we have DEBUG level logging - # enabled for vendored libraries. - vendored_log_level = "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" - - # Shorthands for clarity - handler_classes = { - "stream": "pip._internal.utils.logging.RichPipStreamHandler", - "file": "pip._internal.utils.logging.BetterRotatingFileHandler", - } - handlers = ["console", "console_errors", "console_subprocess"] + ( - ["user_log"] if include_user_log else [] - ) - global _stdout_console, stderr_console - _stdout_console = PipConsole(file=sys.stdout, no_color=no_color, soft_wrap=True) - _stderr_console = PipConsole(file=sys.stderr, no_color=no_color, soft_wrap=True) - - logging.config.dictConfig( - { - "version": 1, - "disable_existing_loggers": False, - "filters": { - "exclude_warnings": { - "()": "pip._internal.utils.logging.MaxLevelFilter", - "level": logging.WARNING, - }, - "restrict_to_subprocess": { - "()": "logging.Filter", - "name": subprocess_logger.name, - }, - "exclude_subprocess": { - "()": "pip._internal.utils.logging.ExcludeLoggerFilter", - "name": subprocess_logger.name, - }, - }, - "formatters": { - "indent": { - "()": IndentingFormatter, - "format": "%(message)s", - }, - "indent_with_timestamp": { - "()": IndentingFormatter, - "format": "%(message)s", - "add_timestamp": True, - }, - }, - "handlers": { - "console": { - "level": level, - "class": handler_classes["stream"], - "console": _stdout_console, - "filters": ["exclude_subprocess", "exclude_warnings"], - "formatter": "indent", - }, - "console_errors": { - "level": "WARNING", - "class": handler_classes["stream"], - "console": _stderr_console, - "filters": ["exclude_subprocess"], - "formatter": "indent", - }, - # A handler responsible for logging to the console messages - # from the "subprocessor" logger. - "console_subprocess": { - "level": level, - "class": handler_classes["stream"], - "console": _stderr_console, - "filters": ["restrict_to_subprocess"], - "formatter": "indent", - }, - "user_log": { - "level": "DEBUG", - "class": handler_classes["file"], - "filename": additional_log_file, - "encoding": "utf-8", - "delay": True, - "formatter": "indent_with_timestamp", - }, - }, - "root": { - "level": root_level, - "handlers": handlers, - }, - "loggers": {"pip._vendor": {"level": vendored_log_level}}, - } - ) - - return level_number diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/misc.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/misc.py deleted file mode 100644 index 66e521bbc..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/misc.py +++ /dev/null @@ -1,771 +0,0 @@ -from __future__ import annotations - -import errno -import getpass -import hashlib -import logging -import os -import posixpath -import shutil -import stat -import sys -import sysconfig -import urllib.parse -from collections.abc import Generator, Iterable, Iterator, Mapping, Sequence -from dataclasses import dataclass -from functools import partial -from io import StringIO -from itertools import filterfalse, tee, zip_longest -from pathlib import Path -from types import FunctionType, TracebackType -from typing import ( - Any, - BinaryIO, - Callable, - Optional, - TextIO, - TypeVar, - cast, -) - -from pip._vendor.packaging.requirements import Requirement -from pip._vendor.pyproject_hooks import BuildBackendHookCaller - -from pip import __version__ -from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment -from pip._internal.locations import get_major_minor_version -from pip._internal.utils.compat import WINDOWS -from pip._internal.utils.retry import retry -from pip._internal.utils.virtualenv import running_under_virtualenv - -__all__ = [ - "rmtree", - "display_path", - "backup_dir", - "ask", - "splitext", - "format_size", - "is_installable_dir", - "normalize_path", - "renames", - "get_prog", - "ensure_dir", - "remove_auth_from_url", - "check_externally_managed", - "ConfiguredBuildBackendHookCaller", -] - -logger = logging.getLogger(__name__) - -T = TypeVar("T") -ExcInfo = tuple[type[BaseException], BaseException, TracebackType] -VersionInfo = tuple[int, int, int] -NetlocTuple = tuple[str, tuple[Optional[str], Optional[str]]] -OnExc = Callable[[FunctionType, Path, BaseException], Any] -OnErr = Callable[[FunctionType, Path, ExcInfo], Any] - -FILE_CHUNK_SIZE = 1024 * 1024 - - -def get_pip_version() -> str: - pip_pkg_dir = os.path.join(os.path.dirname(__file__), "..", "..") - pip_pkg_dir = os.path.abspath(pip_pkg_dir) - - return f"pip {__version__} from {pip_pkg_dir} (python {get_major_minor_version()})" - - -def normalize_version_info(py_version_info: tuple[int, ...]) -> tuple[int, int, int]: - """ - Convert a tuple of ints representing a Python version to one of length - three. - - :param py_version_info: a tuple of ints representing a Python version, - or None to specify no version. The tuple can have any length. - - :return: a tuple of length three if `py_version_info` is non-None. - Otherwise, return `py_version_info` unchanged (i.e. None). - """ - if len(py_version_info) < 3: - py_version_info += (3 - len(py_version_info)) * (0,) - elif len(py_version_info) > 3: - py_version_info = py_version_info[:3] - - return cast("VersionInfo", py_version_info) - - -def ensure_dir(path: str) -> None: - """os.path.makedirs without EEXIST.""" - try: - os.makedirs(path) - except OSError as e: - # Windows can raise spurious ENOTEMPTY errors. See #6426. - if e.errno != errno.EEXIST and e.errno != errno.ENOTEMPTY: - raise - - -def get_prog() -> str: - try: - prog = os.path.basename(sys.argv[0]) - if prog in ("__main__.py", "-c"): - return f"{sys.executable} -m pip" - else: - return prog - except (AttributeError, TypeError, IndexError): - pass - return "pip" - - -# Retry every half second for up to 3 seconds -@retry(stop_after_delay=3, wait=0.5) -def rmtree(dir: str, ignore_errors: bool = False, onexc: OnExc | None = None) -> None: - if ignore_errors: - onexc = _onerror_ignore - if onexc is None: - onexc = _onerror_reraise - handler: OnErr = partial(rmtree_errorhandler, onexc=onexc) - if sys.version_info >= (3, 12): - # See https://docs.python.org/3.12/whatsnew/3.12.html#shutil. - shutil.rmtree(dir, onexc=handler) # type: ignore - else: - shutil.rmtree(dir, onerror=handler) # type: ignore - - -def _onerror_ignore(*_args: Any) -> None: - pass - - -def _onerror_reraise(*_args: Any) -> None: - raise # noqa: PLE0704 - Bare exception used to reraise existing exception - - -def rmtree_errorhandler( - func: FunctionType, - path: Path, - exc_info: ExcInfo | BaseException, - *, - onexc: OnExc = _onerror_reraise, -) -> None: - """ - `rmtree` error handler to 'force' a file remove (i.e. like `rm -f`). - - * If a file is readonly then it's write flag is set and operation is - retried. - - * `onerror` is the original callback from `rmtree(... onerror=onerror)` - that is chained at the end if the "rm -f" still fails. - """ - try: - st_mode = os.stat(path).st_mode - except OSError: - # it's equivalent to os.path.exists - return - - if not st_mode & stat.S_IWRITE: - # convert to read/write - try: - os.chmod(path, st_mode | stat.S_IWRITE) - except OSError: - pass - else: - # use the original function to repeat the operation - try: - func(path) - return - except OSError: - pass - - if not isinstance(exc_info, BaseException): - _, exc_info, _ = exc_info - onexc(func, path, exc_info) - - -def display_path(path: str) -> str: - """Gives the display value for a given path, making it relative to cwd - if possible.""" - try: - relative = Path(path).relative_to(Path.cwd()) - except ValueError: - # If the path isn't relative to the CWD, leave it alone - return path - return os.path.join(".", relative) - - -def backup_dir(dir: str, ext: str = ".bak") -> str: - """Figure out the name of a directory to back up the given dir to - (adding .bak, .bak2, etc)""" - n = 1 - extension = ext - while os.path.exists(dir + extension): - n += 1 - extension = ext + str(n) - return dir + extension - - -def ask_path_exists(message: str, options: Iterable[str]) -> str: - for action in os.environ.get("PIP_EXISTS_ACTION", "").split(): - if action in options: - return action - return ask(message, options) - - -def _check_no_input(message: str) -> None: - """Raise an error if no input is allowed.""" - if os.environ.get("PIP_NO_INPUT"): - raise Exception( - f"No input was expected ($PIP_NO_INPUT set); question: {message}" - ) - - -def ask(message: str, options: Iterable[str]) -> str: - """Ask the message interactively, with the given possible responses""" - while 1: - _check_no_input(message) - response = input(message) - response = response.strip().lower() - if response not in options: - print( - "Your response ({!r}) was not one of the expected responses: " - "{}".format(response, ", ".join(options)) - ) - else: - return response - - -def ask_input(message: str) -> str: - """Ask for input interactively.""" - _check_no_input(message) - return input(message) - - -def ask_password(message: str) -> str: - """Ask for a password interactively.""" - _check_no_input(message) - return getpass.getpass(message) - - -def strtobool(val: str) -> int: - """Convert a string representation of truth to true (1) or false (0). - - True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values - are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if - 'val' is anything else. - """ - val = val.lower() - if val in ("y", "yes", "t", "true", "on", "1"): - return 1 - elif val in ("n", "no", "f", "false", "off", "0"): - return 0 - else: - raise ValueError(f"invalid truth value {val!r}") - - -def format_size(bytes: float) -> str: - if bytes > 1000 * 1000: - return f"{bytes / 1000.0 / 1000:.1f} MB" - elif bytes > 10 * 1000: - return f"{int(bytes / 1000)} kB" - elif bytes > 1000: - return f"{bytes / 1000.0:.1f} kB" - else: - return f"{int(bytes)} bytes" - - -def tabulate(rows: Iterable[Iterable[Any]]) -> tuple[list[str], list[int]]: - """Return a list of formatted rows and a list of column sizes. - - For example:: - - >>> tabulate([['foobar', 2000], [0xdeadbeef]]) - (['foobar 2000', '3735928559'], [10, 4]) - """ - rows = [tuple(map(str, row)) for row in rows] - sizes = [max(map(len, col)) for col in zip_longest(*rows, fillvalue="")] - table = [" ".join(map(str.ljust, row, sizes)).rstrip() for row in rows] - return table, sizes - - -def is_installable_dir(path: str) -> bool: - """Is path is a directory containing pyproject.toml or setup.py? - - If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for - a legacy setuptools layout by identifying setup.py. We don't check for the - setup.cfg because using it without setup.py is only available for PEP 517 - projects, which are already covered by the pyproject.toml check. - """ - if not os.path.isdir(path): - return False - if os.path.isfile(os.path.join(path, "pyproject.toml")): - return True - if os.path.isfile(os.path.join(path, "setup.py")): - return True - return False - - -def read_chunks( - file: BinaryIO, size: int = FILE_CHUNK_SIZE -) -> Generator[bytes, None, None]: - """Yield pieces of data from a file-like object until EOF.""" - while True: - chunk = file.read(size) - if not chunk: - break - yield chunk - - -def normalize_path(path: str, resolve_symlinks: bool = True) -> str: - """ - Convert a path to its canonical, case-normalized, absolute version. - - """ - path = os.path.expanduser(path) - if resolve_symlinks: - path = os.path.realpath(path) - else: - path = os.path.abspath(path) - return os.path.normcase(path) - - -def splitext(path: str) -> tuple[str, str]: - """Like os.path.splitext, but take off .tar too""" - base, ext = posixpath.splitext(path) - if base.lower().endswith(".tar"): - ext = base[-4:] + ext - base = base[:-4] - return base, ext - - -def renames(old: str, new: str) -> None: - """Like os.renames(), but handles renaming across devices.""" - # Implementation borrowed from os.renames(). - head, tail = os.path.split(new) - if head and tail and not os.path.exists(head): - os.makedirs(head) - - shutil.move(old, new) - - head, tail = os.path.split(old) - if head and tail: - try: - os.removedirs(head) - except OSError: - pass - - -def is_local(path: str) -> bool: - """ - Return True if path is within sys.prefix, if we're running in a virtualenv. - - If we're not in a virtualenv, all paths are considered "local." - - Caution: this function assumes the head of path has been normalized - with normalize_path. - """ - if not running_under_virtualenv(): - return True - return path.startswith(normalize_path(sys.prefix)) - - -def write_output(msg: Any, *args: Any) -> None: - logger.info(msg, *args) - - -class StreamWrapper(StringIO): - orig_stream: TextIO - - @classmethod - def from_stream(cls, orig_stream: TextIO) -> StreamWrapper: - ret = cls() - ret.orig_stream = orig_stream - return ret - - # compileall.compile_dir() needs stdout.encoding to print to stdout - # type ignore is because TextIOBase.encoding is writeable - @property - def encoding(self) -> str: # type: ignore - return self.orig_stream.encoding - - -# Simulates an enum -def enum(*sequential: Any, **named: Any) -> type[Any]: - enums = dict(zip(sequential, range(len(sequential))), **named) - reverse = {value: key for key, value in enums.items()} - enums["reverse_mapping"] = reverse - return type("Enum", (), enums) - - -def build_netloc(host: str, port: int | None) -> str: - """ - Build a netloc from a host-port pair - """ - if port is None: - return host - if ":" in host: - # Only wrap host with square brackets when it is IPv6 - host = f"[{host}]" - return f"{host}:{port}" - - -def build_url_from_netloc(netloc: str, scheme: str = "https") -> str: - """ - Build a full URL from a netloc. - """ - if netloc.count(":") >= 2 and "@" not in netloc and "[" not in netloc: - # It must be a bare IPv6 address, so wrap it with brackets. - netloc = f"[{netloc}]" - return f"{scheme}://{netloc}" - - -def parse_netloc(netloc: str) -> tuple[str | None, int | None]: - """ - Return the host-port pair from a netloc. - """ - url = build_url_from_netloc(netloc) - parsed = urllib.parse.urlparse(url) - return parsed.hostname, parsed.port - - -def split_auth_from_netloc(netloc: str) -> NetlocTuple: - """ - Parse out and remove the auth information from a netloc. - - Returns: (netloc, (username, password)). - """ - if "@" not in netloc: - return netloc, (None, None) - - # Split from the right because that's how urllib.parse.urlsplit() - # behaves if more than one @ is present (which can be checked using - # the password attribute of urlsplit()'s return value). - auth, netloc = netloc.rsplit("@", 1) - pw: str | None = None - if ":" in auth: - # Split from the left because that's how urllib.parse.urlsplit() - # behaves if more than one : is present (which again can be checked - # using the password attribute of the return value) - user, pw = auth.split(":", 1) - else: - user, pw = auth, None - - user = urllib.parse.unquote(user) - if pw is not None: - pw = urllib.parse.unquote(pw) - - return netloc, (user, pw) - - -def redact_netloc(netloc: str) -> str: - """ - Replace the sensitive data in a netloc with "****", if it exists. - - For example: - - "user:pass@example.com" returns "user:****@example.com" - - "accesstoken@example.com" returns "****@example.com" - """ - netloc, (user, password) = split_auth_from_netloc(netloc) - if user is None: - return netloc - if password is None: - user = "****" - password = "" - else: - user = urllib.parse.quote(user) - password = ":****" - return f"{user}{password}@{netloc}" - - -def _transform_url( - url: str, transform_netloc: Callable[[str], tuple[Any, ...]] -) -> tuple[str, NetlocTuple]: - """Transform and replace netloc in a url. - - transform_netloc is a function taking the netloc and returning a - tuple. The first element of this tuple is the new netloc. The - entire tuple is returned. - - Returns a tuple containing the transformed url as item 0 and the - original tuple returned by transform_netloc as item 1. - """ - purl = urllib.parse.urlsplit(url) - netloc_tuple = transform_netloc(purl.netloc) - # stripped url - url_pieces = (purl.scheme, netloc_tuple[0], purl.path, purl.query, purl.fragment) - surl = urllib.parse.urlunsplit(url_pieces) - return surl, cast("NetlocTuple", netloc_tuple) - - -def _get_netloc(netloc: str) -> NetlocTuple: - return split_auth_from_netloc(netloc) - - -def _redact_netloc(netloc: str) -> tuple[str]: - return (redact_netloc(netloc),) - - -def split_auth_netloc_from_url( - url: str, -) -> tuple[str, str, tuple[str | None, str | None]]: - """ - Parse a url into separate netloc, auth, and url with no auth. - - Returns: (url_without_auth, netloc, (username, password)) - """ - url_without_auth, (netloc, auth) = _transform_url(url, _get_netloc) - return url_without_auth, netloc, auth - - -def remove_auth_from_url(url: str) -> str: - """Return a copy of url with 'username:password@' removed.""" - # username/pass params are passed to subversion through flags - # and are not recognized in the url. - return _transform_url(url, _get_netloc)[0] - - -def redact_auth_from_url(url: str) -> str: - """Replace the password in a given url with ****.""" - return _transform_url(url, _redact_netloc)[0] - - -def redact_auth_from_requirement(req: Requirement) -> str: - """Replace the password in a given requirement url with ****.""" - if not req.url: - return str(req) - return str(req).replace(req.url, redact_auth_from_url(req.url)) - - -@dataclass(frozen=True) -class HiddenText: - secret: str - redacted: str - - def __repr__(self) -> str: - return f"<HiddenText {str(self)!r}>" - - def __str__(self) -> str: - return self.redacted - - def __eq__(self, other: object) -> bool: - # Equality is particularly useful for testing. - if type(self) is type(other): - # The string being used for redaction doesn't also have to match, - # just the raw, original string. - return self.secret == cast(HiddenText, other).secret - return NotImplemented - - # Disable hashing, since we have a custom __eq__ and don't need hash-ability - # (yet). The only required property of hashing is that objects which compare - # equal have the same hash value. - __hash__ = None # type: ignore[assignment] - - -def hide_value(value: str) -> HiddenText: - return HiddenText(value, redacted="****") - - -def hide_url(url: str) -> HiddenText: - redacted = redact_auth_from_url(url) - return HiddenText(url, redacted=redacted) - - -def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None: - """Protection of pip.exe from modification on Windows - - On Windows, any operation modifying pip should be run as: - python -m pip ... - """ - pip_names = [ - "pip", - f"pip{sys.version_info.major}", - f"pip{sys.version_info.major}.{sys.version_info.minor}", - ] - - # See https://github.com/pypa/pip/issues/1299 for more discussion - should_show_use_python_msg = ( - modifying_pip and WINDOWS and os.path.basename(sys.argv[0]) in pip_names - ) - - if should_show_use_python_msg: - new_command = [sys.executable, "-m", "pip"] + sys.argv[1:] - raise CommandError( - "To modify pip, please run the following command:\n{}".format( - " ".join(new_command) - ) - ) - - -def check_externally_managed() -> None: - """Check whether the current environment is externally managed. - - If the ``EXTERNALLY-MANAGED`` config file is found, the current environment - is considered externally managed, and an ExternallyManagedEnvironment is - raised. - """ - if running_under_virtualenv(): - return - marker = os.path.join(sysconfig.get_path("stdlib"), "EXTERNALLY-MANAGED") - if not os.path.isfile(marker): - return - raise ExternallyManagedEnvironment.from_config(marker) - - -def is_console_interactive() -> bool: - """Is this console interactive?""" - return sys.stdin is not None and sys.stdin.isatty() - - -def hash_file(path: str, blocksize: int = 1 << 20) -> tuple[Any, int]: - """Return (hash, length) for path using hashlib.sha256()""" - - h = hashlib.sha256() - length = 0 - with open(path, "rb") as f: - for block in read_chunks(f, size=blocksize): - length += len(block) - h.update(block) - return h, length - - -def pairwise(iterable: Iterable[Any]) -> Iterator[tuple[Any, Any]]: - """ - Return paired elements. - - For example: - s -> (s0, s1), (s2, s3), (s4, s5), ... - """ - iterable = iter(iterable) - return zip_longest(iterable, iterable) - - -def partition( - pred: Callable[[T], bool], iterable: Iterable[T] -) -> tuple[Iterable[T], Iterable[T]]: - """ - Use a predicate to partition entries into false entries and true entries, - like - - partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 - """ - t1, t2 = tee(iterable) - return filterfalse(pred, t1), filter(pred, t2) - - -class ConfiguredBuildBackendHookCaller(BuildBackendHookCaller): - def __init__( - self, - config_holder: Any, - source_dir: str, - build_backend: str, - backend_path: str | None = None, - runner: Callable[..., None] | None = None, - python_executable: str | None = None, - ): - super().__init__( - source_dir, build_backend, backend_path, runner, python_executable - ) - self.config_holder = config_holder - - def build_wheel( - self, - wheel_directory: str, - config_settings: Mapping[str, Any] | None = None, - metadata_directory: str | None = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_wheel( - wheel_directory, config_settings=cs, metadata_directory=metadata_directory - ) - - def build_sdist( - self, - sdist_directory: str, - config_settings: Mapping[str, Any] | None = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_sdist(sdist_directory, config_settings=cs) - - def build_editable( - self, - wheel_directory: str, - config_settings: Mapping[str, Any] | None = None, - metadata_directory: str | None = None, - ) -> str: - cs = self.config_holder.config_settings - return super().build_editable( - wheel_directory, config_settings=cs, metadata_directory=metadata_directory - ) - - def get_requires_for_build_wheel( - self, config_settings: Mapping[str, Any] | None = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_wheel(config_settings=cs) - - def get_requires_for_build_sdist( - self, config_settings: Mapping[str, Any] | None = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_sdist(config_settings=cs) - - def get_requires_for_build_editable( - self, config_settings: Mapping[str, Any] | None = None - ) -> Sequence[str]: - cs = self.config_holder.config_settings - return super().get_requires_for_build_editable(config_settings=cs) - - def prepare_metadata_for_build_wheel( - self, - metadata_directory: str, - config_settings: Mapping[str, Any] | None = None, - _allow_fallback: bool = True, - ) -> str: - cs = self.config_holder.config_settings - return super().prepare_metadata_for_build_wheel( - metadata_directory=metadata_directory, - config_settings=cs, - _allow_fallback=_allow_fallback, - ) - - def prepare_metadata_for_build_editable( - self, - metadata_directory: str, - config_settings: Mapping[str, Any] | None = None, - _allow_fallback: bool = True, - ) -> str | None: - cs = self.config_holder.config_settings - return super().prepare_metadata_for_build_editable( - metadata_directory=metadata_directory, - config_settings=cs, - _allow_fallback=_allow_fallback, - ) - - -def warn_if_run_as_root() -> None: - """Output a warning for sudo users on Unix. - - In a virtual environment, sudo pip still writes to virtualenv. - On Windows, users may run pip as Administrator without issues. - This warning only applies to Unix root users outside of virtualenv. - """ - if running_under_virtualenv(): - return - if not hasattr(os, "getuid"): - return - # On Windows, there are no "system managed" Python packages. Installing as - # Administrator via pip is the correct way of updating system environments. - # - # We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform - # checks: https://mypy.readthedocs.io/en/stable/common_issues.html - if sys.platform == "win32" or sys.platform == "cygwin": - return - - if os.getuid() != 0: - return - - logger.warning( - "Running pip as the 'root' user can result in broken permissions and " - "conflicting behaviour with the system package manager, possibly " - "rendering your system unusable. " - "It is recommended to use a virtual environment instead: " - "https://pip.pypa.io/warnings/venv. " - "Use the --root-user-action option if you know what you are doing and " - "want to suppress this warning." - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/packaging.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/packaging.py deleted file mode 100644 index 3cbc0490a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/packaging.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import annotations - -import functools -import logging - -from pip._vendor.packaging import specifiers, version -from pip._vendor.packaging.requirements import Requirement - -logger = logging.getLogger(__name__) - - -@functools.lru_cache(maxsize=32) -def check_requires_python( - requires_python: str | None, version_info: tuple[int, ...] -) -> bool: - """ - Check if the given Python version matches a "Requires-Python" specifier. - - :param version_info: A 3-tuple of ints representing a Python - major-minor-micro version to check (e.g. `sys.version_info[:3]`). - - :return: `True` if the given Python version satisfies the requirement. - Otherwise, return `False`. - - :raises InvalidSpecifier: If `requires_python` has an invalid format. - """ - if requires_python is None: - # The package provides no information - return True - requires_python_specifier = specifiers.SpecifierSet(requires_python) - - python_version = version.parse(".".join(map(str, version_info))) - return python_version in requires_python_specifier - - -@functools.lru_cache(maxsize=10000) -def get_requirement(req_string: str) -> Requirement: - """Construct a packaging.Requirement object with caching""" - # Parsing requirement strings is expensive, and is also expected to happen - # with a low diversity of different arguments (at least relative the number - # constructed). This method adds a cache to requirement object creation to - # minimize repeated parsing of the same string to construct equivalent - # Requirement objects. - return Requirement(req_string) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/pylock.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/pylock.py deleted file mode 100644 index 0f7783522..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/pylock.py +++ /dev/null @@ -1,116 +0,0 @@ -from collections.abc import Iterable -from pathlib import Path - -from pip._vendor.packaging.pylock import ( - Package, - PackageArchive, - PackageDirectory, - PackageSdist, - PackageVcs, - PackageWheel, - Pylock, -) -from pip._vendor.packaging.version import Version - -from pip._internal.models.direct_url import ArchiveInfo, DirInfo, VcsInfo -from pip._internal.models.link import Link -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.urls import url_to_path - - -def _pylock_package_from_install_requirement( - ireq: InstallRequirement, base_dir: Path -) -> Package: - base_dir = base_dir.resolve() - dist = ireq.get_dist() - download_info = ireq.download_info - assert download_info - package_version = None - package_vcs = None - package_directory = None - package_archive = None - package_sdist = None - package_wheels = None - if ireq.is_direct: - if isinstance(download_info.info, VcsInfo): - package_vcs = PackageVcs( - type=download_info.info.vcs, - url=download_info.url, - path=None, - requested_revision=download_info.info.requested_revision, - commit_id=download_info.info.commit_id, - subdirectory=download_info.subdirectory, - ) - elif isinstance(download_info.info, DirInfo): - package_directory = PackageDirectory( - path=( - Path(url_to_path(download_info.url)) - .resolve() - .relative_to(base_dir) - .as_posix() - ), - editable=( - download_info.info.editable if download_info.info.editable else None - ), - subdirectory=download_info.subdirectory, - ) - elif isinstance(download_info.info, ArchiveInfo): - if not download_info.info.hashes: - raise NotImplementedError() - package_archive = PackageArchive( - url=download_info.url, - path=None, - hashes=download_info.info.hashes, - subdirectory=download_info.subdirectory, - ) - else: - # should never happen - raise NotImplementedError() - else: - package_version = dist.version - if isinstance(download_info.info, ArchiveInfo): - if not download_info.info.hashes: - raise NotImplementedError() - link = Link(download_info.url) - if link.is_wheel: - package_wheels = [ - PackageWheel( - name=link.filename, - url=download_info.url, - hashes=download_info.info.hashes, - ) - ] - else: - package_sdist = PackageSdist( - name=link.filename, - url=download_info.url, - hashes=download_info.info.hashes, - ) - else: - # should never happen - raise NotImplementedError() - return Package( - name=dist.canonical_name, - version=package_version, - vcs=package_vcs, - directory=package_directory, - archive=package_archive, - sdist=package_sdist, - wheels=package_wheels, - ) - - -def pylock_from_install_requirements( - install_requirements: Iterable[InstallRequirement], base_dir: Path -) -> Pylock: - return Pylock( - lock_version=Version("1.0"), - created_by="pip", - packages=sorted( - ( - _pylock_package_from_install_requirement(ireq, base_dir) - for ireq in install_requirements - ), - key=lambda p: p.name, - ), - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/retry.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/retry.py deleted file mode 100644 index 27d3b6e78..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/retry.py +++ /dev/null @@ -1,45 +0,0 @@ -from __future__ import annotations - -import functools -from time import perf_counter, sleep -from typing import TYPE_CHECKING, Callable, TypeVar - -if TYPE_CHECKING: - from typing_extensions import ParamSpec - - T = TypeVar("T") - P = ParamSpec("P") - - -def retry( - wait: float, stop_after_delay: float -) -> Callable[[Callable[P, T]], Callable[P, T]]: - """Decorator to automatically retry a function on error. - - If the function raises, the function is recalled with the same arguments - until it returns or the time limit is reached. When the time limit is - surpassed, the last exception raised is reraised. - - :param wait: The time to wait after an error before retrying, in seconds. - :param stop_after_delay: The time limit after which retries will cease, - in seconds. - """ - - def wrapper(func: Callable[P, T]) -> Callable[P, T]: - - @functools.wraps(func) - def retry_wrapped(*args: P.args, **kwargs: P.kwargs) -> T: - # The performance counter is monotonic on all platforms we care - # about and has much better resolution than time.monotonic(). - start_time = perf_counter() - while True: - try: - return func(*args, **kwargs) - except Exception: - if perf_counter() - start_time > stop_after_delay: - raise - sleep(wait) - - return retry_wrapped - - return wrapper diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/subprocess.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/subprocess.py deleted file mode 100644 index 3e7b83f30..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/subprocess.py +++ /dev/null @@ -1,248 +0,0 @@ -from __future__ import annotations - -import logging -import os -import shlex -import subprocess -from collections.abc import Iterable, Mapping -from typing import Any, Callable, Literal, Union - -from pip._vendor.rich.markup import escape - -from pip._internal.cli.spinners import SpinnerInterface, open_spinner -from pip._internal.exceptions import InstallationSubprocessError -from pip._internal.utils.logging import VERBOSE, subprocess_logger -from pip._internal.utils.misc import HiddenText - -CommandArgs = list[Union[str, HiddenText]] - - -def make_command(*args: str | HiddenText | CommandArgs) -> CommandArgs: - """ - Create a CommandArgs object. - """ - command_args: CommandArgs = [] - for arg in args: - # Check for list instead of CommandArgs since CommandArgs is - # only known during type-checking. - if isinstance(arg, list): - command_args.extend(arg) - else: - # Otherwise, arg is str or HiddenText. - command_args.append(arg) - - return command_args - - -def format_command_args(args: list[str] | CommandArgs) -> str: - """ - Format command arguments for display. - """ - # For HiddenText arguments, display the redacted form by calling str(). - # Also, we don't apply str() to arguments that aren't HiddenText since - # this can trigger a UnicodeDecodeError in Python 2 if the argument - # has type unicode and includes a non-ascii character. (The type - # checker doesn't ensure the annotations are correct in all cases.) - return " ".join( - shlex.quote(str(arg)) if isinstance(arg, HiddenText) else shlex.quote(arg) - for arg in args - ) - - -def reveal_command_args(args: list[str] | CommandArgs) -> list[str]: - """ - Return the arguments in their raw, unredacted form. - """ - return [arg.secret if isinstance(arg, HiddenText) else arg for arg in args] - - -def call_subprocess( - cmd: list[str] | CommandArgs, - show_stdout: bool = False, - cwd: str | None = None, - on_returncode: Literal["raise", "warn", "ignore"] = "raise", - extra_ok_returncodes: Iterable[int] | None = None, - extra_environ: Mapping[str, Any] | None = None, - unset_environ: Iterable[str] | None = None, - spinner: SpinnerInterface | None = None, - log_failed_cmd: bool | None = True, - stdout_only: bool | None = False, - *, - command_desc: str, -) -> str: - """ - Args: - show_stdout: if true, use INFO to log the subprocess's stderr and - stdout streams. Otherwise, use DEBUG. Defaults to False. - extra_ok_returncodes: an iterable of integer return codes that are - acceptable, in addition to 0. Defaults to None, which means []. - unset_environ: an iterable of environment variable names to unset - prior to calling subprocess.Popen(). - log_failed_cmd: if false, failed commands are not logged, only raised. - stdout_only: if true, return only stdout, else return both. When true, - logging of both stdout and stderr occurs when the subprocess has - terminated, else logging occurs as subprocess output is produced. - """ - if extra_ok_returncodes is None: - extra_ok_returncodes = [] - if unset_environ is None: - unset_environ = [] - # Most places in pip use show_stdout=False. What this means is-- - # - # - We connect the child's output (combined stderr and stdout) to a - # single pipe, which we read. - # - We log this output to stderr at DEBUG level as it is received. - # - If DEBUG logging isn't enabled (e.g. if --verbose logging wasn't - # requested), then we show a spinner so the user can still see the - # subprocess is in progress. - # - If the subprocess exits with an error, we log the output to stderr - # at ERROR level if it hasn't already been displayed to the console - # (e.g. if --verbose logging wasn't enabled). This way we don't log - # the output to the console twice. - # - # If show_stdout=True, then the above is still done, but with DEBUG - # replaced by INFO. - if show_stdout: - # Then log the subprocess output at INFO level. - log_subprocess: Callable[..., None] = subprocess_logger.info - used_level = logging.INFO - else: - # Then log the subprocess output using VERBOSE. This also ensures - # it will be logged to the log file (aka user_log), if enabled. - log_subprocess = subprocess_logger.verbose - used_level = VERBOSE - - # Whether the subprocess will be visible in the console. - showing_subprocess = subprocess_logger.getEffectiveLevel() <= used_level - - # Only use the spinner if we're not showing the subprocess output - # and we have a spinner. - use_spinner = not showing_subprocess and spinner is not None - - log_subprocess("Running command %s", command_desc) - env = os.environ.copy() - if extra_environ: - env.update(extra_environ) - for name in unset_environ: - env.pop(name, None) - try: - proc = subprocess.Popen( - # Convert HiddenText objects to the underlying str. - reveal_command_args(cmd), - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT if not stdout_only else subprocess.PIPE, - cwd=cwd, - env=env, - errors="backslashreplace", - ) - except Exception as exc: - if log_failed_cmd: - subprocess_logger.critical( - "Error %s while executing command %s", - exc, - command_desc, - ) - raise - all_output = [] - if not stdout_only: - assert proc.stdout - assert proc.stdin - proc.stdin.close() - # In this mode, stdout and stderr are in the same pipe. - while True: - line: str = proc.stdout.readline() - if not line: - break - line = line.rstrip() - all_output.append(line + "\n") - - # Show the line immediately. - log_subprocess(line) - # Update the spinner. - if use_spinner: - assert spinner - spinner.spin() - try: - proc.wait() - finally: - if proc.stdout: - proc.stdout.close() - output = "".join(all_output) - else: - # In this mode, stdout and stderr are in different pipes. - # We must use communicate() which is the only safe way to read both. - out, err = proc.communicate() - # log line by line to preserve pip log indenting - for out_line in out.splitlines(): - log_subprocess(out_line) - all_output.append(out) - for err_line in err.splitlines(): - log_subprocess(err_line) - all_output.append(err) - output = out - - proc_had_error = proc.returncode and proc.returncode not in extra_ok_returncodes - if use_spinner: - assert spinner - if proc_had_error: - spinner.finish("error") - else: - spinner.finish("done") - if proc_had_error: - if on_returncode == "raise": - error = InstallationSubprocessError( - command_description=command_desc, - exit_code=proc.returncode, - output_lines=all_output if not showing_subprocess else None, - ) - if log_failed_cmd: - subprocess_logger.error("%s", error, extra={"rich": True}) - subprocess_logger.verbose( - "[bold magenta]full command[/]: [blue]%s[/]", - escape(format_command_args(cmd)), - extra={"markup": True}, - ) - subprocess_logger.verbose( - "[bold magenta]cwd[/]: %s", - escape(cwd or "[inherit]"), - extra={"markup": True}, - ) - - raise error - elif on_returncode == "warn": - subprocess_logger.warning( - 'Command "%s" had error code %s in %s', - command_desc, - proc.returncode, - cwd, - ) - elif on_returncode == "ignore": - pass - else: - raise ValueError(f"Invalid value: on_returncode={on_returncode!r}") - return output - - -def runner_with_spinner_message(message: str) -> Callable[..., None]: - """Provide a subprocess_runner that shows a spinner message. - - Intended for use with for BuildBackendHookCaller. Thus, the runner has - an API that matches what's expected by BuildBackendHookCaller.subprocess_runner. - """ - - def runner( - cmd: list[str], - cwd: str | None = None, - extra_environ: Mapping[str, Any] | None = None, - ) -> None: - with open_spinner(message) as spinner: - call_subprocess( - cmd, - command_desc=message, - cwd=cwd, - extra_environ=extra_environ, - spinner=spinner, - ) - - return runner diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/temp_dir.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/temp_dir.py deleted file mode 100644 index a9afa76c8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/temp_dir.py +++ /dev/null @@ -1,294 +0,0 @@ -from __future__ import annotations - -import errno -import itertools -import logging -import os.path -import tempfile -import traceback -from collections.abc import Generator -from contextlib import ExitStack, contextmanager -from pathlib import Path -from typing import ( - Any, - Callable, - TypeVar, -) - -from pip._internal.utils.misc import enum, rmtree - -logger = logging.getLogger(__name__) - -_T = TypeVar("_T", bound="TempDirectory") - - -# Kinds of temporary directories. Only needed for ones that are -# globally-managed. -tempdir_kinds = enum( - BUILD_ENV="build-env", - EPHEM_WHEEL_CACHE="ephem-wheel-cache", - REQ_BUILD="req-build", -) - - -_tempdir_manager: ExitStack | None = None - - -@contextmanager -def global_tempdir_manager() -> Generator[None, None, None]: - global _tempdir_manager - with ExitStack() as stack: - old_tempdir_manager, _tempdir_manager = _tempdir_manager, stack - try: - yield - finally: - _tempdir_manager = old_tempdir_manager - - -class TempDirectoryTypeRegistry: - """Manages temp directory behavior""" - - def __init__(self) -> None: - self._should_delete: dict[str, bool] = {} - - def set_delete(self, kind: str, value: bool) -> None: - """Indicate whether a TempDirectory of the given kind should be - auto-deleted. - """ - self._should_delete[kind] = value - - def get_delete(self, kind: str) -> bool: - """Get configured auto-delete flag for a given TempDirectory type, - default True. - """ - return self._should_delete.get(kind, True) - - -_tempdir_registry: TempDirectoryTypeRegistry | None = None - - -@contextmanager -def tempdir_registry() -> Generator[TempDirectoryTypeRegistry, None, None]: - """Provides a scoped global tempdir registry that can be used to dictate - whether directories should be deleted. - """ - global _tempdir_registry - old_tempdir_registry = _tempdir_registry - _tempdir_registry = TempDirectoryTypeRegistry() - try: - yield _tempdir_registry - finally: - _tempdir_registry = old_tempdir_registry - - -class _Default: - pass - - -_default = _Default() - - -class TempDirectory: - """Helper class that owns and cleans up a temporary directory. - - This class can be used as a context manager or as an OO representation of a - temporary directory. - - Attributes: - path - Location to the created temporary directory - delete - Whether the directory should be deleted when exiting - (when used as a contextmanager) - - Methods: - cleanup() - Deletes the temporary directory - - When used as a context manager, if the delete attribute is True, on - exiting the context the temporary directory is deleted. - """ - - def __init__( - self, - path: str | None = None, - delete: bool | None | _Default = _default, - kind: str = "temp", - globally_managed: bool = False, - ignore_cleanup_errors: bool = True, - ): - super().__init__() - - if delete is _default: - if path is not None: - # If we were given an explicit directory, resolve delete option - # now. - delete = False - else: - # Otherwise, we wait until cleanup and see what - # tempdir_registry says. - delete = None - - # The only time we specify path is in for editables where it - # is the value of the --src option. - if path is None: - path = self._create(kind) - - self._path = path - self._deleted = False - self.delete = delete - self.kind = kind - self.ignore_cleanup_errors = ignore_cleanup_errors - - if globally_managed: - assert _tempdir_manager is not None - _tempdir_manager.enter_context(self) - - @property - def path(self) -> str: - assert not self._deleted, f"Attempted to access deleted path: {self._path}" - return self._path - - def __repr__(self) -> str: - return f"<{self.__class__.__name__} {self.path!r}>" - - def __enter__(self: _T) -> _T: - return self - - def __exit__(self, exc: Any, value: Any, tb: Any) -> None: - if self.delete is not None: - delete = self.delete - elif _tempdir_registry: - delete = _tempdir_registry.get_delete(self.kind) - else: - delete = True - - if delete: - self.cleanup() - - def _create(self, kind: str) -> str: - """Create a temporary directory and store its path in self.path""" - # We realpath here because some systems have their default tmpdir - # symlinked to another directory. This tends to confuse build - # scripts, so we canonicalize the path by traversing potential - # symlinks here. - path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) - logger.debug("Created temporary directory: %s", path) - return path - - def cleanup(self) -> None: - """Remove the temporary directory created and reset state""" - self._deleted = True - if not os.path.exists(self._path): - return - - errors: list[BaseException] = [] - - def onerror( - func: Callable[..., Any], - path: Path, - exc_val: BaseException, - ) -> None: - """Log a warning for a `rmtree` error and continue""" - formatted_exc = "\n".join( - traceback.format_exception_only(type(exc_val), exc_val) - ) - formatted_exc = formatted_exc.rstrip() # remove trailing new line - if func in (os.unlink, os.remove, os.rmdir): - logger.debug( - "Failed to remove a temporary file '%s' due to %s.\n", - path, - formatted_exc, - ) - else: - logger.debug("%s failed with %s.", func.__qualname__, formatted_exc) - errors.append(exc_val) - - if self.ignore_cleanup_errors: - try: - # first try with @retry; retrying to handle ephemeral errors - rmtree(self._path, ignore_errors=False) - except OSError: - # last pass ignore/log all errors - rmtree(self._path, onexc=onerror) - if errors: - logger.warning( - "Failed to remove contents in a temporary directory '%s'.\n" - "You can safely remove it manually.", - self._path, - ) - else: - rmtree(self._path) - - -class AdjacentTempDirectory(TempDirectory): - """Helper class that creates a temporary directory adjacent to a real one. - - Attributes: - original - The original directory to create a temp directory for. - path - After calling create() or entering, contains the full - path to the temporary directory. - delete - Whether the directory should be deleted when exiting - (when used as a contextmanager) - - """ - - # The characters that may be used to name the temp directory - # We always prepend a ~ and then rotate through these until - # a usable name is found. - # pkg_resources raises a different error for .dist-info folder - # with leading '-' and invalid metadata - LEADING_CHARS = "-~.=%0123456789" - - def __init__(self, original: str, delete: bool | None = None) -> None: - self.original = original.rstrip("/\\") - super().__init__(delete=delete) - - @classmethod - def _generate_names(cls, name: str) -> Generator[str, None, None]: - """Generates a series of temporary names. - - The algorithm replaces the leading characters in the name - with ones that are valid filesystem characters, but are not - valid package names (for both Python and pip definitions of - package). - """ - for i in range(1, len(name)): - for candidate in itertools.combinations_with_replacement( - cls.LEADING_CHARS, i - 1 - ): - new_name = "~" + "".join(candidate) + name[i:] - if new_name != name: - yield new_name - - # If we make it this far, we will have to make a longer name - for i in range(len(cls.LEADING_CHARS)): - for candidate in itertools.combinations_with_replacement( - cls.LEADING_CHARS, i - ): - new_name = "~" + "".join(candidate) + name - if new_name != name: - yield new_name - - def _create(self, kind: str) -> str: - root, name = os.path.split(self.original) - for candidate in self._generate_names(name): - path = os.path.join(root, candidate) - try: - os.mkdir(path) - except OSError as ex: - # Continue if the name exists already - if ex.errno != errno.EEXIST: - raise - else: - path = os.path.realpath(path) - break - else: - # Final fallback on the default behavior. - path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-")) - - logger.debug("Created temporary directory: %s", path) - return path diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/unpacking.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/unpacking.py deleted file mode 100644 index b3f52e85e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/unpacking.py +++ /dev/null @@ -1,362 +0,0 @@ -"""Utilities related archives.""" - -from __future__ import annotations - -import logging -import os -import shutil -import stat -import sys -import tarfile -import zipfile -from collections.abc import Iterable -from zipfile import ZipInfo - -from pip._internal.exceptions import InstallationError -from pip._internal.utils.filetypes import ( - BZ2_EXTENSIONS, - TAR_EXTENSIONS, - XZ_EXTENSIONS, - ZIP_EXTENSIONS, -) -from pip._internal.utils.misc import ensure_dir - -logger = logging.getLogger(__name__) - - -SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS - -try: - import bz2 # noqa - - SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS -except ImportError: - logger.debug("bz2 module is not available") - -try: - # Only for Python 3.3+ - import lzma # noqa - - SUPPORTED_EXTENSIONS += XZ_EXTENSIONS -except ImportError: - logger.debug("lzma module is not available") - - -def current_umask() -> int: - """Get the current umask which involves having to set it temporarily.""" - mask = os.umask(0) - os.umask(mask) - return mask - - -def split_leading_dir(path: str) -> list[str]: - path = path.lstrip("/").lstrip("\\") - if "/" in path and ( - ("\\" in path and path.find("/") < path.find("\\")) or "\\" not in path - ): - return path.split("/", 1) - elif "\\" in path: - return path.split("\\", 1) - else: - return [path, ""] - - -def has_leading_dir(paths: Iterable[str]) -> bool: - """Returns true if all the paths have the same leading path name - (i.e., everything is in one subdirectory in an archive)""" - common_prefix = None - for path in paths: - prefix, rest = split_leading_dir(path) - if not prefix: - return False - elif common_prefix is None: - common_prefix = prefix - elif prefix != common_prefix: - return False - return True - - -def is_within_directory(directory: str, target: str) -> bool: - """ - Return true if the absolute path of target is within the directory - """ - abs_directory = os.path.abspath(directory) - abs_target = os.path.abspath(target) - - prefix = os.path.commonpath([abs_directory, abs_target]) - return prefix == abs_directory - - -def _get_default_mode_plus_executable() -> int: - return 0o777 & ~current_umask() | 0o111 - - -def set_extracted_file_to_default_mode_plus_executable(path: str) -> None: - """ - Make file present at path have execute for user/group/world - (chmod +x) is no-op on windows per python docs - """ - os.chmod(path, _get_default_mode_plus_executable()) - - -def zip_item_is_executable(info: ZipInfo) -> bool: - mode = info.external_attr >> 16 - # if mode and regular file and any execute permissions for - # user/group/world? - return bool(mode and stat.S_ISREG(mode) and mode & 0o111) - - -def unzip_file(filename: str, location: str, flatten: bool = True) -> None: - """ - Unzip the file (with path `filename`) to the destination `location`. All - files are written based on system defaults and umask (i.e. permissions are - not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied after being - written. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - zipfp = open(filename, "rb") - try: - zip = zipfile.ZipFile(zipfp, allowZip64=True) - leading = has_leading_dir(zip.namelist()) and flatten - for info in zip.infolist(): - name = info.filename - fn = name - if leading: - fn = split_leading_dir(name)[1] - fn = os.path.join(location, fn) - dir = os.path.dirname(fn) - if not is_within_directory(location, fn): - message = ( - "The zip file ({}) has a file ({}) trying to install " - "outside target directory ({})" - ) - raise InstallationError(message.format(filename, fn, location)) - if fn.endswith(("/", "\\")): - # A directory - ensure_dir(fn) - else: - ensure_dir(dir) - # Don't use read() to avoid allocating an arbitrarily large - # chunk of memory for the file's content - fp = zip.open(name) - try: - with open(fn, "wb") as destfp: - shutil.copyfileobj(fp, destfp) - finally: - fp.close() - if zip_item_is_executable(info): - set_extracted_file_to_default_mode_plus_executable(fn) - finally: - zipfp.close() - - -def untar_file(filename: str, location: str) -> None: - """ - Untar the file (with path `filename`) to the destination `location`. - All files are written based on system defaults and umask (i.e. permissions - are not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied on top of the - default. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - if filename.lower().endswith(".gz") or filename.lower().endswith(".tgz"): - mode = "r:gz" - elif filename.lower().endswith(BZ2_EXTENSIONS): - mode = "r:bz2" - elif filename.lower().endswith(XZ_EXTENSIONS): - mode = "r:xz" - elif filename.lower().endswith(".tar"): - mode = "r" - else: - logger.warning( - "Cannot determine compression type for file %s", - filename, - ) - mode = "r:*" - - tar = tarfile.open(filename, mode, encoding="utf-8") # type: ignore - try: - leading = has_leading_dir([member.name for member in tar.getmembers()]) - - # PEP 706 added `tarfile.data_filter`, and made some other changes to - # Python's tarfile module (see below). The features were backported to - # security releases. - try: - data_filter = tarfile.data_filter - except AttributeError: - _untar_without_filter(filename, location, tar, leading) - else: - default_mode_plus_executable = _get_default_mode_plus_executable() - - if leading: - # Strip the leading directory from all files in the archive, - # including hardlink targets (which are relative to the - # unpack location). - for member in tar.getmembers(): - name_lead, name_rest = split_leading_dir(member.name) - member.name = name_rest - if member.islnk(): - lnk_lead, lnk_rest = split_leading_dir(member.linkname) - if lnk_lead == name_lead: - member.linkname = lnk_rest - - def pip_filter(member: tarfile.TarInfo, path: str) -> tarfile.TarInfo: - orig_mode = member.mode - try: - try: - member = data_filter(member, location) - except tarfile.LinkOutsideDestinationError: - if sys.version_info[:3] in { - (3, 9, 17), - (3, 10, 12), - (3, 11, 4), - }: - # The tarfile filter in specific Python versions - # raises LinkOutsideDestinationError on valid input - # (https://github.com/python/cpython/issues/107845) - # Ignore the error there, but do use the - # more lax `tar_filter` - member = tarfile.tar_filter(member, location) - else: - raise - except tarfile.TarError as exc: - message = "Invalid member in the tar file {}: {}" - # Filter error messages mention the member name. - # No need to add it here. - raise InstallationError( - message.format( - filename, - exc, - ) - ) - if member.isfile() and orig_mode & 0o111: - member.mode = default_mode_plus_executable - else: - # See PEP 706 note above. - # The PEP changed this from `int` to `Optional[int]`, - # where None means "use the default". Mypy doesn't - # know this yet. - member.mode = None # type: ignore [assignment] - return member - - tar.extractall(location, filter=pip_filter) - - finally: - tar.close() - - -def is_symlink_target_in_tar(tar: tarfile.TarFile, tarinfo: tarfile.TarInfo) -> bool: - """Check if the file pointed to by the symbolic link is in the tar archive""" - linkname = os.path.join(os.path.dirname(tarinfo.name), tarinfo.linkname) - - linkname = os.path.normpath(linkname) - linkname = linkname.replace("\\", "/") - - try: - tar.getmember(linkname) - return True - except KeyError: - return False - - -def _untar_without_filter( - filename: str, - location: str, - tar: tarfile.TarFile, - leading: bool, -) -> None: - """Fallback for Python without tarfile.data_filter""" - # NOTE: This function can be removed once pip requires CPython ≥ 3.12.​ - # PEP 706 added tarfile.data_filter, made tarfile extraction operations more secure. - # This feature is fully supported from CPython 3.12 onward. - for member in tar.getmembers(): - fn = member.name - if leading: - fn = split_leading_dir(fn)[1] - path = os.path.join(location, fn) - if not is_within_directory(location, path): - message = ( - "The tar file ({}) has a file ({}) trying to install " - "outside target directory ({})" - ) - raise InstallationError(message.format(filename, path, location)) - if member.isdir(): - ensure_dir(path) - elif member.issym(): - if not is_symlink_target_in_tar(tar, member): - message = ( - "The tar file ({}) has a file ({}) trying to install " - "outside target directory ({})" - ) - raise InstallationError( - message.format(filename, member.name, member.linkname) - ) - try: - tar._extract_member(member, path) - except Exception as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - "In the tar file %s the member %s is invalid: %s", - filename, - member.name, - exc, - ) - continue - else: - try: - fp = tar.extractfile(member) - except (KeyError, AttributeError) as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - "In the tar file %s the member %s is invalid: %s", - filename, - member.name, - exc, - ) - continue - ensure_dir(os.path.dirname(path)) - assert fp is not None - with open(path, "wb") as destfp: - shutil.copyfileobj(fp, destfp) - fp.close() - # Update the timestamp (useful for cython compiled files) - tar.utime(member, path) - # member have any execute permissions for user/group/world? - if member.mode & 0o111: - set_extracted_file_to_default_mode_plus_executable(path) - - -def unpack_file( - filename: str, - location: str, - content_type: str | None = None, -) -> None: - filename = os.path.realpath(filename) - if ( - content_type == "application/zip" - or filename.lower().endswith(ZIP_EXTENSIONS) - or zipfile.is_zipfile(filename) - ): - unzip_file(filename, location, flatten=not filename.endswith(".whl")) - elif ( - content_type == "application/x-gzip" - or tarfile.is_tarfile(filename) - or filename.lower().endswith(TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS) - ): - untar_file(filename, location) - else: - # FIXME: handle? - # FIXME: magic signatures? - logger.critical( - "Cannot unpack file %s (downloaded from %s, content-type: %s); " - "cannot detect archive format", - filename, - location, - content_type, - ) - raise InstallationError(f"Cannot determine archive format of {location}") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/urls.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/urls.py deleted file mode 100644 index e951a5e4e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/urls.py +++ /dev/null @@ -1,55 +0,0 @@ -import os -import string -import urllib.parse -import urllib.request - -from .compat import WINDOWS - - -def path_to_url(path: str) -> str: - """ - Convert a path to a file: URL. The path will be made absolute and have - quoted path parts. - """ - path = os.path.normpath(os.path.abspath(path)) - url = urllib.parse.urljoin("file://", urllib.request.pathname2url(path)) - return url - - -def url_to_path(url: str) -> str: - """ - Convert a file: URL to a path. - """ - assert url.startswith( - "file:" - ), f"You can only turn file: urls into filenames (not {url!r})" - - _, netloc, path, _, _ = urllib.parse.urlsplit(url) - - if not netloc or netloc == "localhost": - # According to RFC 8089, same as empty authority. - netloc = "" - elif WINDOWS: - # If we have a UNC path, prepend UNC share notation. - netloc = "\\\\" + netloc - else: - raise ValueError( - f"non-local file URIs are not supported on this platform: {url!r}" - ) - - path = urllib.request.url2pathname(netloc + path) - - # On Windows, urlsplit parses the path as something like "/C:/Users/foo". - # This creates issues for path-related functions like io.open(), so we try - # to detect and strip the leading slash. - if ( - WINDOWS - and not netloc # Not UNC. - and len(path) >= 3 - and path[0] == "/" # Leading slash to strip. - and path[1] in string.ascii_letters # Drive letter. - and path[2:4] in (":", ":/") # Colon + end of string, or colon + absolute path. - ): - path = path[1:] - - return path diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/virtualenv.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/virtualenv.py deleted file mode 100644 index b1742a3e9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/virtualenv.py +++ /dev/null @@ -1,105 +0,0 @@ -from __future__ import annotations - -import logging -import os -import re -import site -import sys - -logger = logging.getLogger(__name__) -_INCLUDE_SYSTEM_SITE_PACKAGES_REGEX = re.compile( - r"include-system-site-packages\s*=\s*(?P<value>true|false)" -) - - -def _running_under_venv() -> bool: - """Checks if sys.base_prefix and sys.prefix match. - - This handles PEP 405 compliant virtual environments. - """ - return sys.prefix != getattr(sys, "base_prefix", sys.prefix) - - -def _running_under_legacy_virtualenv() -> bool: - """Checks if sys.real_prefix is set. - - This handles virtual environments created with pypa's virtualenv. - """ - # pypa/virtualenv case - return hasattr(sys, "real_prefix") - - -def running_under_virtualenv() -> bool: - """True if we're running inside a virtual environment, False otherwise.""" - return _running_under_venv() or _running_under_legacy_virtualenv() - - -def _get_pyvenv_cfg_lines() -> list[str] | None: - """Reads {sys.prefix}/pyvenv.cfg and returns its contents as list of lines - - Returns None, if it could not read/access the file. - """ - pyvenv_cfg_file = os.path.join(sys.prefix, "pyvenv.cfg") - try: - # Although PEP 405 does not specify, the built-in venv module always - # writes with UTF-8. (pypa/pip#8717) - with open(pyvenv_cfg_file, encoding="utf-8") as f: - return f.read().splitlines() # avoids trailing newlines - except OSError: - return None - - -def _no_global_under_venv() -> bool: - """Check `{sys.prefix}/pyvenv.cfg` for system site-packages inclusion - - PEP 405 specifies that when system site-packages are not supposed to be - visible from a virtual environment, `pyvenv.cfg` must contain the following - line: - - include-system-site-packages = false - - Additionally, log a warning if accessing the file fails. - """ - cfg_lines = _get_pyvenv_cfg_lines() - if cfg_lines is None: - # We're not in a "sane" venv, so assume there is no system - # site-packages access (since that's PEP 405's default state). - logger.warning( - "Could not access 'pyvenv.cfg' despite a virtual environment " - "being active. Assuming global site-packages is not accessible " - "in this environment." - ) - return True - - for line in cfg_lines: - match = _INCLUDE_SYSTEM_SITE_PACKAGES_REGEX.match(line) - if match is not None and match.group("value") == "false": - return True - return False - - -def _no_global_under_legacy_virtualenv() -> bool: - """Check if "no-global-site-packages.txt" exists beside site.py - - This mirrors logic in pypa/virtualenv for determining whether system - site-packages are visible in the virtual environment. - """ - site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) - no_global_site_packages_file = os.path.join( - site_mod_dir, - "no-global-site-packages.txt", - ) - return os.path.exists(no_global_site_packages_file) - - -def virtualenv_no_global() -> bool: - """Returns a boolean, whether running in venv with no system site-packages.""" - # PEP 405 compliance needs to be checked first since virtualenv >=20 would - # return True for both checks, but is only able to use the PEP 405 config. - if _running_under_venv(): - return _no_global_under_venv() - - if _running_under_legacy_virtualenv(): - return _no_global_under_legacy_virtualenv() - - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/wheel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/wheel.py deleted file mode 100644 index 789e73629..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/utils/wheel.py +++ /dev/null @@ -1,132 +0,0 @@ -"""Support functions for working with wheel files.""" - -import logging -from email.message import Message -from email.parser import Parser -from zipfile import BadZipFile, ZipFile - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.exceptions import UnsupportedWheel - -VERSION_COMPATIBLE = (1, 0) - - -logger = logging.getLogger(__name__) - - -def parse_wheel(wheel_zip: ZipFile, name: str) -> tuple[str, Message]: - """Extract information from the provided wheel, ensuring it meets basic - standards. - - Returns the name of the .dist-info directory and the parsed WHEEL metadata. - """ - try: - info_dir = wheel_dist_info_dir(wheel_zip, name) - metadata = wheel_metadata(wheel_zip, info_dir) - version = wheel_version(metadata) - except UnsupportedWheel as e: - raise UnsupportedWheel(f"{name} has an invalid wheel, {e}") - - check_compatibility(version, name) - - return info_dir, metadata - - -def wheel_dist_info_dir(source: ZipFile, name: str) -> str: - """Returns the name of the contained .dist-info directory. - - Raises AssertionError or UnsupportedWheel if not found, >1 found, or - it doesn't match the provided name. - """ - # Zip file path separators must be / - subdirs = {p.split("/", 1)[0] for p in source.namelist()} - - info_dirs = [s for s in subdirs if s.endswith(".dist-info")] - - if not info_dirs: - raise UnsupportedWheel(".dist-info directory not found") - - if len(info_dirs) > 1: - raise UnsupportedWheel( - "multiple .dist-info directories found: {}".format(", ".join(info_dirs)) - ) - - info_dir = info_dirs[0] - - info_dir_name = canonicalize_name(info_dir) - canonical_name = canonicalize_name(name) - if not info_dir_name.startswith(canonical_name): - raise UnsupportedWheel( - f".dist-info directory {info_dir!r} does not start with {canonical_name!r}" - ) - - return info_dir - - -def read_wheel_metadata_file(source: ZipFile, path: str) -> bytes: - try: - return source.read(path) - # BadZipFile for general corruption, KeyError for missing entry, - # and RuntimeError for password-protected files - except (BadZipFile, KeyError, RuntimeError) as e: - raise UnsupportedWheel(f"could not read {path!r} file: {e!r}") - - -def wheel_metadata(source: ZipFile, dist_info_dir: str) -> Message: - """Return the WHEEL metadata of an extracted wheel, if possible. - Otherwise, raise UnsupportedWheel. - """ - path = f"{dist_info_dir}/WHEEL" - # Zip file path separators must be / - wheel_contents = read_wheel_metadata_file(source, path) - - try: - wheel_text = wheel_contents.decode() - except UnicodeDecodeError as e: - raise UnsupportedWheel(f"error decoding {path!r}: {e!r}") - - # FeedParser (used by Parser) does not raise any exceptions. The returned - # message may have .defects populated, but for backwards-compatibility we - # currently ignore them. - return Parser().parsestr(wheel_text) - - -def wheel_version(wheel_data: Message) -> tuple[int, ...]: - """Given WHEEL metadata, return the parsed Wheel-Version. - Otherwise, raise UnsupportedWheel. - """ - version_text = wheel_data["Wheel-Version"] - if version_text is None: - raise UnsupportedWheel("WHEEL is missing Wheel-Version") - - version = version_text.strip() - - try: - return tuple(map(int, version.split("."))) - except ValueError: - raise UnsupportedWheel(f"invalid Wheel-Version: {version!r}") - - -def check_compatibility(version: tuple[int, ...], name: str) -> None: - """Raises errors or warns if called with an incompatible Wheel-Version. - - pip should refuse to install a Wheel-Version that's a major series - ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when - installing a version only minor version ahead (e.g 1.2 > 1.1). - - version: a 2-tuple representing a Wheel-Version (Major, Minor) - name: name of wheel or package to raise exception about - - :raises UnsupportedWheel: when an incompatible Wheel-Version is given - """ - if version[0] > VERSION_COMPATIBLE[0]: - raise UnsupportedWheel( - "{}'s Wheel-Version ({}) is not compatible with this version " - "of pip".format(name, ".".join(map(str, version))) - ) - elif version > VERSION_COMPATIBLE: - logger.warning( - "Installing from a newer Wheel-Version (%s)", - ".".join(map(str, version)), - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__init__.py deleted file mode 100644 index b6beddbe6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Expose a limited set of classes and functions so callers outside of -# the vcs package don't need to import deeper than `pip._internal.vcs`. -# (The test directory may still need to import from a vcs sub-package.) -# Import all vcs modules to register each VCS in the VcsSupport object. -import pip._internal.vcs.bazaar -import pip._internal.vcs.git -import pip._internal.vcs.mercurial -import pip._internal.vcs.subversion # noqa: F401 -from pip._internal.vcs.versioncontrol import ( # noqa: F401 - RemoteNotFoundError, - RemoteNotValidError, - is_url, - make_vcs_requirement_url, - vcs, -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 26d208bb9f927e3452cfd01c35a4505509eb29e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmZXQ!D|yi6vk(Fn@t)~5h)a`SnMfC5`#so6c38B1u0Uhr@>*ed9-6@ch)y=TicU2 z{}zw_D;_6DFM1Pl=+(C&ijW8M`*`0s^O%_jH?DUD*Y|Hf&2cQmkEZ!s+%IbWoaM84 zFOH%ELD53vr6x;VTWEaH%2G<RHnp=3b+UC@&$`sT$0v70FZtDsJM6W>?IS20!J(s9 zt}Z7p5gq<#zSGt$&D3~RqYaydo`O2dy+Zg{8-xN%S|kaZy=!5!GSxttk^oC>2W$?; z`ci8Q2`6D=H9j#E?yTAcU|yrqHf*hiz8;?edgIEly_zng+?9mRV#2S*wFa#QX@fT7 ztC%xI`10bZeCv6f)Dytb-rhrb?r<tAbRQrmFLUea$yj^no6-=&leQMHKay`Q=+u>u zM!RZPeR}d(9YaxBO`xc#<ZCmQ-VpRFolo@%c*%Di{`;IEf6h>GYe=a<brCxIg`3nC np5ZONSH#QTW&BQ}D4KUgv^^7BGjV?=cCO+yimwC%Z}N^menYgE diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-314.pyc deleted file mode 100644 index 2c2923a30b208515c68b11b959b887a8a0022fac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6421 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 SB6z>2d`qck-zQ1_xqksFM^YgG diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-314.pyc deleted file mode 100644 index 416b7bea6457ecfd292e2fe8f25da3835cdf9e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23023 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 U&FPF^aem2}Ir9synmzUZ11@##3;+NC diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-314.pyc deleted file mode 100644 index 5d978e832e7e1ee9f8b2e647c34060911cc21137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9248 zcmcgyYit`=cD^&@3|}KYM2Vto*&54sY{r)SQZ`=OapEWs$q$*CxN_3SnWe}P#SO(_ z?hLI+Nl;-?v=Vk(+wG4iXn<(ZAC-UtasL$lxtk5p{V7>SM9ex^1G~U>|IwAY4zhoG z&K(X(JshXIMK7WIIQKF4an5(nJy(Z<O@0F5?!WzK?mt=y`3)AFAlMmhtqhrI@-|Vp z0n*QzTqoxF0p8?U>M~s{b(?NTT?0bDXo~$F)5F@i2fY10)7S4e{j4ku1o|aYVtH|( zsXu52S>7`c>JOXY{)idrZ#J9zqh_>|TyrH4I@77Ad&srcUd}F?u~xE&DBd=r_^w5I zT~%t^wP^Bay@!*7o^4LgPFTZUlJNf?D-)a*NEHgYnKE;F!5B>NmjA_6rcWOqPZcs& zWT0S}seGQ*zD%i3u|a<>lhF!SwD(L)%H)h<J~gQpQ|1^9CXJ`w(bTlv9S29cYU*l< z<`ZtquV~jV7ulz*;E+ZQ_-LPAFsYum4vyvu88!~KFH-%7TG~{puAAy8)yGw;6?Im$ zT-Vb^+F2T=Zo9y(eGQouoY^&EateWSYBgO7XSx;M6cm>!D($A{npbhdt_f`<AMUj~ z64R%MK=UBY^ea2;eZ^9qGXqfeLv5g1maa7^5|o=Zj1UBB5U8OI)DTd^K#gpmhJo4) z)aV9k1gI@QZQVd^25PL043QI@(gro&hFM3IxY;s9PIG1}oaj!=cS)n^63wOZ7C)Aq za`lX5Eg_xP3tAf4rph{OyMST1H5rK0F!bB}$-gEf1GEnE8aKu%oWd(E#eD=BMfg1r z%`6wyu3Ij{q?SlEvqTG1zI@Iw-vY|DMdTxKRHx%9)4;EESu=g7hX2BV6CO@wG<xj& z-#<D$q0@JUtLJJA!?a47k(8lz=L$I!BF1PM?LIb~oHWPu!ii(OYOng<$?vIGv~l1u zQ&Y|H;_$`X$gq(!weDgn{Z1;Y8N<a~@rar$m>Mml@<)I-j*L6o&{LeWBvq|)xTdOB zthPlxjr1;<w6TM2$0NcC@<WW~j0z_6ldQA`wS?^>W-#Esz@GWmf{>Xe3hbmrj`KYn z>>4*Ec6Y;;JxAN1GQrUnNZ8&yMcW~3MY5Wy;`)KHud6AVHLRWWxoxT3gWV$#O_K-B z@ww=na5K0R>Rj@6(hi_*IA4S|cD{#M`^TTJA}FHbQM`&z@gEWPlEnaxLKn-O(coAC z7vb1JaH)v70M1jlg_q(dEZ=pFj_7b0la>qipT=0<L0~s$(Q%;I48aynafj(ni1uRz zO5ZejL}G&fAx7nvwu%eW-3RUT*>iR}_!>(e_?jLHP;ale3ezwKAzt`nC-Dk!A8@oQ z>F_$Mwj)Q_i^4FT91F?DQK~dJM}9~c_Ed{xh;yK`*KN}}$q+#P$x|RRK<OZgSQIbC zfX1DCqek-pO#&L<K=T5PSA0crh$MZ^`1N!+;N(#Pd-x&oGB?Bzazor8_l&rQxQR0p zn8A}qaP@Gkzbo0~j9O2fy>P}I;uQC@)m;Gv0lbj#Pqp>|bmR(Ic`PgMH})H{sY6PU z3#a_u-37f=%z#*0qMa^smMcAx83f+<ba%g7%4uem55DnrciX(8C3uQli7hhPNGY4} zSbl)}sv5Dxyq?W!)N<zv04I0^z;~sBqfsaxwB>;gC@|31ZD{#XiqcE>Vzdt<WG<Us zoneL1d@5@gINnnjWZ4!%->7D$$JBy0VMXi0S0gem{R}!ylZr^%x>jR{mt%)lVm&i~ z``+M<z-*u_?JY~8veb58iqEyINW0g4g3n)(h}1gA{p4(U|FPMZ%T2MlJwJK7+!AZZ zcg?>1pylw)%Vn>$>WwdZ<DYcQXBR$LYQKC(gXm|kL-fmiEA5x>d6Ts^_>uUMbZ-7- zh!#$-9y+^x=<Ld&7gnTm<#0<yAinlL5SOniASeQk82rhQK=;5XPZa0pppkKgZPX*u zCLDW+(Su;5B0vgT7mQatnDdgDT=8MfPe9lMn3IS<_^=6bTg4jBi;1-ftT|132#79_ z?2xPpu|pwbJ8`}mP9lD73JP&-rlL5ET*X3?S%pr?PWKQ;Sc;yS*f*ot4+-0emQsU@ zPO_5>d6J=x<6&t?Y!GBm5+!O=Km|O+C*eDrgEQ|=GK>h#!jP!Ad#n3#np3$FUvjDS zd3#|NsD?I$A#Z&apbFsEFg7YF78DVHL;xUiB@wwd1!r#@ASwC)n09Sy1jVbj6wgM0 zk;x%)pxQ7CbMGKIzLV@Co$Pn<+-cV?lH+7DyxSSA;hbcLR!>jxBFS{&I7R<3q;^Q6 z3~vgG_sys4E8PWfSM)#cN6@o#IW9-+uP1z#dn`-S-|*e<S_0a#hULj<qp4Efw77{u znt-9{(-2J^>C;R3j0~o<Y)s?;Rpc6=$Y{EPn$+o}4WXw1MiWts*A2^!gIew%>bU}p zoC6bPT(hLKUKq_~izx~gloe7^6JR6*A!!rDRI#Xmb?&BGDg!o|W?G`5rNJz-+&a`) z!UP2iiGd|OhBL$~f#tdUIy2#|;Gq6G*w$csvoh^rwG%0dV4n!k<Jbjva0{k_$xl-% z15*T8Fv#thT4FT~*r__2%WIZ5J)W^G8<+N8+Cb%2MPC_$jliP4Sys5VTRk>~K}rR> z0QLq+TRT8*EdEjUR`#R(t^9oNXB~?jx390n&H_EMYc<k+H`2WlIWi+Y2(&QdmD*ON z-OJMMIrE;huj2Okj+Le68y99T%msje`SY{qZ%)kn7EXM2YVp)P>3jDhtvBD9Kd~A) za4&LT;dD71`$)Pa&AoLmoOt9S%?H>0B))IHf2mDbcpsuW7go<)UOsbq<;-g<ZOTl4 zSqiU89m`V3+#5?$$CuL4M@`TPM*HJ$!)>2*thV<qxA!iEo>?cH?+xxgOki+!aB1ho zU#3^3t9PZVf2_E$;u`}`?B_er@qMSs=ewHw4ho+i@k0I=2LpX4eZM%t@~3yc^sMWP zSnQ?at}l)YkpI6i0KXgB55WX$Xde{19}<Wd+Cy4Jd(7Erk2xFdF=wMa<hG(cnqmy? zzhI}1Xukz-9eoBZoY083fITq6<^ZOYjbNPOs$<YFevbvkT|+q3IGe&2ghS(Po3C6= zHIB|qD3JoL5ejx9*wn>RKF^?nfyQ9MO<%%F6wSJ%COnUoK6(jTz6Q}2JBE$eC_=VD z#?C1V9cm)9t#CYWOpv*!mfDZZpN8o6l_hWdp7+%KXy?3lDLS}t8lpRa)sq*NPhMC# zd1)m&IODCEC18_y<6n9Y+eg}HcDUi=uvJgIY4Ui}Ty)#F4{u&iGlv7afv{V}6Acht zW$pgv6Lvl%5Y4A6m@K4O$(|h^h!gOz8N=O%4BmscyEQ1_{^{YFIz}5AR|H`@25=aq z$iqlA=Ca#kJj6Td_CS@Gkx*SV+%#$}U=04-zJd30%WsV76E@&ZH8JJXQ`JqcTv>Ek z0jyRHGozPGD6mx33;9WU2)+;e$Fza~H@#fZYEg5BiW{G2juu;6QM{uhTwvDc4f+=3 znL;p-`N4*^0X&FTRjQ5aa6gB;q7|<L`No=2=w;v_aDxp-Zs@amxv72b`6cO4IlikL z?<j}k6(0%hUL!)t|Hw}Q;o1E^K2Qk|pM>^wXf?2RIk0!WZ#8i6Zs6ek=3R5?mFBLQ zzH+Gf#^mhekKbSN?)Wn~kp3mEv3g;D?A_JCh2TvV@2-CI6+krKSHWbVkCh(FYfWoO z*6}gC#%_J+d4c<w@Ev&#eKg|KtKeEguZ(PtX$|&9H#<@}J(enft3)%Q>Us{nZgQbC zKBCdXa>|fX1sUBZaPR8zTOP1Fw1R0&g}b}Ws^jIk_o3T|uUw&T!{irv8?#c7Pq=6r z62===7+g=-6&)Jv8ygu#vf06|YV^Z2(kYB)py~(6@{^9vPoMwzdAL6<#h>29Cmn}? zPdYa8NjvaKSl-qpf@1rff#|!j!8A_QVS@m&0YtZ56-@59Sn2<t4U&y)P(Sq?_-oDF zXwJq}c`Rj&*(Wde9_@x^G?fN>(LbiW2j04LZakHj5f%zrKOKW*PDL7dp`d3phZ$%N zsvpY*Dt>4q7sTz;2JZl1MkBLWU7LYpYn#8qEw6Hi)W{u&mZZatDDuDL4!j>S?$`$z zR0NN6h@!*nhzkVH!&H@RBr`vm8x8kw{IF~C2QqVk+1{`bUC%!eQT`s+g%@o^6kce3 zh!JWpNN(?7$<N%3Xmb<-uoF<-Lb+)T7XeO44ra$sJ#{WWk(vb2HjL7^#y|laFevzj zoY4yhOc`9Y>9JSrsa2(znfwgh@B?6~+X&wbngKofIaAGLRPEgoxR*QXhqbl#@1Qrc zQKrd5k%U|SbW~;@=taTaY^H#4vu%^W#N3mx`X6yBc!9*74G5Pwl*>!p0u$3q+--0? zV)<JHwF@@*v9<x%!#w58d*+6(K=?MTUF3(Wt)SgDPKoV&f?KVIEJy%Y4c|Ue&68-) z3gajA*v3nEwb^khIF<{npytk~*P=BtHQ5L~XpP`q*LLO0Rj<E{uQ`W72jPR#bzn=q zrmk33k23@ckenN3wT*q{oB^t8b0@e6!?;!Tl<?No6Fm#drq4rU2{|J*0+)A)aBlPk ztO4_DBY630k4zg;D~zaRlt$o!4i{&*$6Gt<0<gL6A7E7D9f+9O-5USs@~z9|rsz!n z{Qlcl?z~rVk=A`{gm3l#&L3hX4*2bw*FjL4Z%oWi-1u<z!?`zCLkI4L4&0CL_|)^U z=hM)~p?~E+^DKHklNP1hZ>$^~Sc#vX8Mq&M_KtTYbaBah@y`@7I)&TuBw_j~F3iz* zG2u8m?T;^<s9<vY6f12NBs3ubPJC-UAV_DpX;Sy#z3v_&KLA6y?qEl=w`LqeFYvK} zc>`XwZ4GLLz`f0RtU}|wDpEz)FuusJkPJJydYZ&Xj!of;D_QfV)vFYb!}w0Rmw-pA zCc5Bp0-sn1c&r+HQ`?B1B3$7dQ9>V=BJL%_$bBrpD6k7Sid|FlK6&W}(BPFTmOxWE zLrVzEa;GW~=?@^Xn)Cu#TWI&CK`C27@SdxqDe%2yRPen_4Ww&6sf-2+emrN36}a+2 zkV*x3nM2<`Tp{oURvyvPsgj`~398YPmAVdtrAG4F;1u8FPXsK%C>6ma6}7dv<JDr% zvbNYED%lPtf%*3-UW6Lt&|834Lgw=lDZ6>VqSDv|(cN-^xoUCL@~LV%54uZL4eXB& z`)Q_(=nOX7wNd!$?lm@%d1zw%6GUH6livoTv)ScfV&ULQ@WhPk*MVR;8k;#^;Um6y zIUM~cbSqSjwB7WUTRO@ed&(VhdH4Qu=e|l4iO6fj6A8|oTkon$=4z;OIn+7N{fqaf z-i6qTd~_vrY{`4<>-8uJ?^q|IFOE)~i?bIiJQwMC5RR{V+)cs%0^djcen>{QPuz;a z3m2r{7`tG8pTy5~k)L<%d9lUyx#-0>#9<u8*p^0N$}^Tdgx)lk88gk|lou$NF{VVw z8OGRD5L0}@Pj_Plyf)%BHxaYEs)}|AynFgpbzIMs@|cGgQB>m9nve?KIyj3wFh@aG zRf-k>JqM9x!y$7?dW`fK7;J_m*&iC$;EgszQMJ-%FnS#$bcb32c68MS86+bZ(jrC^ z7)@iu4zd*vn9W;FnP6{@luQlI+-j;Ge_G4uRTY-Q3?#r0@`B9;sDmg*D6_`DL-h6E zka8e2{Zcs?oqn|(Zkryc@M1`uezg)NV)Hr=@3?C&$idkN@_&o)iumX#yg58Nj!r3= zh>>+3Tm{%9Qo&p$#%OS*tI{A>i8C75_f;C?Dmxer47Dl^a^U#F@zAiSHN3>JmXCPA zN=Ezx<``VEg(TYXh(=2w%Wy;#4KVs5M3x6%#K00~GGxW!vAd`C*xdteRjv9W%LEUF zWpkU7nadkJ<2fVE-f`_mwcQ)XvD<)x17(}m48wkB+w?KJ5!~?&<`=N!jbp&Wdr#HI ztO5#qC8h|6Ow&@dFf1QH$3^zYM{i;cI-l7NSYE1S;XevA%2?mt8unD~J!7-(S^Ce= z7}>x;*A_?;$9+Y*enX<aBEeq~-|xtazb4OpMV|eN9DT$K91mASjtB3tKeFoEao4wF m?&OMZ-?X?cj_};^o56L0Y2~~?IQQR5KaytN{F1b>@BR;Y@3vO} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-314.pyc deleted file mode 100644 index 1c1cd6021e130ddc9281a0e0831ea1d09d09b32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14765 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 a+Y?6D)r(FhSbpF0k3Ge2{fss8iT_{1fn_cL diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-314.pyc deleted file mode 100644 index fe5216d26d205d296f4181850c35e0b45f1b394b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34326 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 BIYR&d diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/bazaar.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/bazaar.py deleted file mode 100644 index 3a8a21e62..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/bazaar.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import annotations - -import logging - -from pip._internal.utils.misc import HiddenText, display_path -from pip._internal.utils.subprocess import make_command -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RevOptions, - VersionControl, - vcs, -) - -logger = logging.getLogger(__name__) - - -class Bazaar(VersionControl): - name = "bzr" - dirname = ".bzr" - repo_name = "branch" - schemes = ( - "bzr+http", - "bzr+https", - "bzr+ssh", - "bzr+sftp", - "bzr+ftp", - "bzr+lp", - "bzr+file", - ) - - @staticmethod - def get_base_rev_args(rev: str) -> list[str]: - return ["-r", rev] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Checking out %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags = ["--quiet"] - elif verbosity == 1: - flags = [] - else: - flags = [f"-{'v'*verbosity}"] - cmd_args = make_command( - "checkout", "--lightweight", *flags, rev_options.to_args(), url, dest - ) - self.run_command(cmd_args) - - def switch( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - self.run_command(make_command("switch", url), cwd=dest) - - def update( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - flags = [] - - if verbosity <= 0: - flags.append("-q") - - output = self.run_command( - make_command("info"), show_stdout=False, stdout_only=True, cwd=dest - ) - if output.startswith("Standalone "): - # Older versions of pip used to create standalone branches. - # Convert the standalone branch to a checkout by calling "bzr bind". - cmd_args = make_command("bind", *flags, url) - self.run_command(cmd_args, cwd=dest) - - cmd_args = make_command("update", *flags, rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> tuple[str, str | None, AuthInfo]: - # hotfix the URL scheme after removing bzr+ from bzr+ssh:// re-add it - url, rev, user_pass = super().get_url_rev_and_auth(url) - if url.startswith("ssh://"): - url = "bzr+" + url - return url, rev, user_pass - - @classmethod - def get_remote_url(cls, location: str) -> str: - urls = cls.run_command( - ["info"], show_stdout=False, stdout_only=True, cwd=location - ) - for line in urls.splitlines(): - line = line.strip() - for x in ("checkout of branch: ", "parent branch: "): - if line.startswith(x): - repo = line.split(x)[1] - if cls._is_local_repository(repo): - return path_to_url(repo) - return repo - raise RemoteNotFoundError - - @classmethod - def get_revision(cls, location: str) -> str: - revision = cls.run_command( - ["revno"], - show_stdout=False, - stdout_only=True, - cwd=location, - ) - return revision.splitlines()[-1] - - @classmethod - def is_commit_id_equal(cls, dest: str, name: str | None) -> bool: - """Always assume the versions don't match""" - return False - - -vcs.register(Bazaar) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/git.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/git.py deleted file mode 100644 index 1769da791..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/git.py +++ /dev/null @@ -1,571 +0,0 @@ -from __future__ import annotations - -import logging -import os.path -import pathlib -import re -import urllib.parse -import urllib.request -from dataclasses import replace -from typing import Any - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import HiddenText, display_path, hide_url -from pip._internal.utils.subprocess import make_command -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RemoteNotValidError, - RevOptions, - VersionControl, - find_path_to_project_root_from_repo_root, - vcs, -) - -urlsplit = urllib.parse.urlsplit -urlunsplit = urllib.parse.urlunsplit - - -logger = logging.getLogger(__name__) - - -GIT_VERSION_REGEX = re.compile( - r"^git version " # Prefix. - r"(\d+)" # Major. - r"\.(\d+)" # Dot, minor. - r"(?:\.(\d+))?" # Optional dot, patch. - r".*$" # Suffix, including any pre- and post-release segments we don't care about. -) - -HASH_REGEX = re.compile("^[a-fA-F0-9]{40}$") - -# SCP (Secure copy protocol) shorthand. e.g. 'git@example.com:foo/bar.git' -SCP_REGEX = re.compile( - r"""^ - # Optional user, e.g. 'git@' - (\w+@)? - # Server, e.g. 'github.com'. - ([^/:]+): - # The server-side path. e.g. 'user/project.git'. Must start with an - # alphanumeric character so as not to be confusable with a Windows paths - # like 'C:/foo/bar' or 'C:\foo\bar'. - (\w[^:]*) - $""", - re.VERBOSE, -) - - -def looks_like_hash(sha: str) -> bool: - return bool(HASH_REGEX.match(sha)) - - -class Git(VersionControl): - name = "git" - dirname = ".git" - repo_name = "clone" - schemes = ( - "git+http", - "git+https", - "git+ssh", - "git+git", - "git+file", - ) - # Prevent the user's environment variables from interfering with pip: - # https://github.com/pypa/pip/issues/1130 - unset_environ = ("GIT_DIR", "GIT_WORK_TREE") - default_arg_rev = "HEAD" - - @staticmethod - def get_base_rev_args(rev: str) -> list[str]: - return [rev] - - @classmethod - def run_command(cls, *args: Any, **kwargs: Any) -> str: - if os.environ.get("PIP_NO_INPUT"): - extra_environ = kwargs.get("extra_environ", {}) - extra_environ["GIT_TERMINAL_PROMPT"] = "0" - extra_environ["GIT_SSH_COMMAND"] = "ssh -oBatchMode=yes" - kwargs["extra_environ"] = extra_environ - return super().run_command(*args, **kwargs) - - def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: - _, rev_options = self.get_url_rev_options(hide_url(url)) - if not rev_options.rev: - return False - if not self.is_commit_id_equal(dest, rev_options.rev): - # the current commit is different from rev, - # which means rev was something else than a commit hash - return False - # return False in the rare case rev is both a commit hash - # and a tag or a branch; we don't want to cache in that case - # because that branch/tag could point to something else in the future - is_tag_or_branch = bool(self.get_revision_sha(dest, rev_options.rev)[0]) - return not is_tag_or_branch - - def get_git_version(self) -> tuple[int, ...]: - version = self.run_command( - ["version"], - command_desc="git version", - show_stdout=False, - stdout_only=True, - ) - match = GIT_VERSION_REGEX.match(version) - if not match: - logger.warning("Can't parse git version: %s", version) - return () - return (int(match.group(1)), int(match.group(2))) - - @classmethod - def get_current_branch(cls, location: str) -> str | None: - """ - Return the current branch, or None if HEAD isn't at a branch - (e.g. detached HEAD). - """ - # git-symbolic-ref exits with empty stdout if "HEAD" is a detached - # HEAD rather than a symbolic ref. In addition, the -q causes the - # command to exit with status code 1 instead of 128 in this case - # and to suppress the message to stderr. - args = ["symbolic-ref", "-q", "HEAD"] - output = cls.run_command( - args, - extra_ok_returncodes=(1,), - show_stdout=False, - stdout_only=True, - cwd=location, - ) - ref = output.strip() - - if ref.startswith("refs/heads/"): - return ref[len("refs/heads/") :] - - return None - - @classmethod - def get_revision_sha(cls, dest: str, rev: str) -> tuple[str | None, bool]: - """ - Return (sha_or_none, is_branch), where sha_or_none is a commit hash - if the revision names a remote branch or tag, otherwise None. - - Args: - dest: the repository directory. - rev: the revision name. - """ - # Pass rev to pre-filter the list. - output = cls.run_command( - ["show-ref", rev], - cwd=dest, - show_stdout=False, - stdout_only=True, - on_returncode="ignore", - ) - refs = {} - # NOTE: We do not use splitlines here since that would split on other - # unicode separators, which can be maliciously used to install a - # different revision. - for line in output.strip().split("\n"): - line = line.rstrip("\r") - if not line: - continue - try: - ref_sha, ref_name = line.split(" ", maxsplit=2) - except ValueError: - # Include the offending line to simplify troubleshooting if - # this error ever occurs. - raise ValueError(f"unexpected show-ref line: {line!r}") - - refs[ref_name] = ref_sha - - branch_ref = f"refs/remotes/origin/{rev}" - tag_ref = f"refs/tags/{rev}" - - sha = refs.get(branch_ref) - if sha is not None: - return (sha, True) - - sha = refs.get(tag_ref) - - return (sha, False) - - @classmethod - def _should_fetch(cls, dest: str, rev: str) -> bool: - """ - Return true if rev is a ref or is a commit that we don't have locally. - - Branches and tags are not considered in this method because they are - assumed to be always available locally (which is a normal outcome of - ``git clone`` and ``git fetch --tags``). - """ - if rev.startswith("refs/"): - # Always fetch remote refs. - return True - - if not looks_like_hash(rev): - # Git fetch would fail with abbreviated commits. - return False - - if cls.has_commit(dest, rev): - # Don't fetch if we have the commit locally. - return False - - return True - - @classmethod - def resolve_revision( - cls, dest: str, url: HiddenText, rev_options: RevOptions - ) -> RevOptions: - """ - Resolve a revision to a new RevOptions object with the SHA1 of the - branch, tag, or ref if found. - - Args: - rev_options: a RevOptions object. - """ - rev = rev_options.arg_rev - # The arg_rev property's implementation for Git ensures that the - # rev return value is always non-None. - assert rev is not None - - sha, is_branch = cls.get_revision_sha(dest, rev) - - if sha is not None: - rev_options = rev_options.make_new(sha) - rev_options = replace(rev_options, branch_name=(rev if is_branch else None)) - - return rev_options - - # Do not show a warning for the common case of something that has - # the form of a Git commit hash. - if not looks_like_hash(rev): - logger.info( - "Did not find branch or tag '%s', assuming revision or ref.", - rev, - ) - - if not cls._should_fetch(dest, rev): - return rev_options - - # fetch the requested revision - cls.run_command( - make_command("fetch", "-q", url, rev_options.to_args()), - cwd=dest, - ) - # Change the revision to the SHA of the ref we fetched - sha = cls.get_revision(dest, rev="FETCH_HEAD") - rev_options = rev_options.make_new(sha) - - return rev_options - - @classmethod - def is_commit_id_equal(cls, dest: str, name: str | None) -> bool: - """ - Return whether the current commit hash equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - if not name: - # Then avoid an unnecessary subprocess call. - return False - - return cls.get_revision(dest) == name - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info("Cloning %s%s to %s", url, rev_display, display_path(dest)) - if verbosity <= 0: - flags: tuple[str, ...] = ("--quiet",) - elif verbosity == 1: - flags = () - else: - flags = ("--verbose", "--progress") - if self.get_git_version() >= (2, 17): - # Git added support for partial clone in 2.17 - # https://git-scm.com/docs/partial-clone - # Speeds up cloning by functioning without a complete copy of repository - self.run_command( - make_command( - "clone", - "--filter=blob:none", - *flags, - url, - dest, - ) - ) - else: - self.run_command(make_command("clone", *flags, url, dest)) - - if rev_options.rev: - # Then a specific revision was requested. - rev_options = self.resolve_revision(dest, url, rev_options) - branch_name = getattr(rev_options, "branch_name", None) - logger.debug("Rev options %s, branch_name %s", rev_options, branch_name) - if branch_name is None: - # Only do a checkout if the current commit id doesn't match - # the requested revision. - if not self.is_commit_id_equal(dest, rev_options.rev): - cmd_args = make_command( - "checkout", - "-q", - rev_options.to_args(), - ) - self.run_command(cmd_args, cwd=dest) - elif self.get_current_branch(dest) != branch_name: - # Then a specific branch was requested, and that branch - # is not yet checked out. - track_branch = f"origin/{branch_name}" - cmd_args = [ - "checkout", - "-b", - branch_name, - "--track", - track_branch, - ] - self.run_command(cmd_args, cwd=dest) - else: - sha = self.get_revision(dest) - rev_options = rev_options.make_new(sha) - - logger.info("Resolved %s to commit %s", url, rev_options.rev) - - #: repo may contain submodules - self.update_submodules(dest, verbosity=verbosity) - - def switch( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - self.run_command( - make_command("config", "remote.origin.url", url), - cwd=dest, - ) - - extra_flags = [] - - if verbosity <= 0: - extra_flags.append("-q") - - cmd_args = make_command("checkout", *extra_flags, rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - self.update_submodules(dest, verbosity=verbosity) - - def update( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - extra_flags = [] - - if verbosity <= 0: - extra_flags.append("-q") - - # First fetch changes from the default remote - if self.get_git_version() >= (1, 9): - # fetch tags in addition to everything else - self.run_command(["fetch", "--tags", *extra_flags], cwd=dest) - else: - self.run_command(["fetch", *extra_flags], cwd=dest) - # Then reset to wanted revision (maybe even origin/master) - rev_options = self.resolve_revision(dest, url, rev_options) - cmd_args = make_command( - "reset", - "--hard", - *extra_flags, - rev_options.to_args(), - ) - self.run_command(cmd_args, cwd=dest) - #: update submodules - self.update_submodules(dest, verbosity=verbosity) - - @classmethod - def get_remote_url(cls, location: str) -> str: - """ - Return URL of the first remote encountered. - - Raises RemoteNotFoundError if the repository does not have a remote - url configured. - """ - # We need to pass 1 for extra_ok_returncodes since the command - # exits with return code 1 if there are no matching lines. - stdout = cls.run_command( - ["config", "--get-regexp", r"remote\..*\.url"], - extra_ok_returncodes=(1,), - show_stdout=False, - stdout_only=True, - cwd=location, - ) - remotes = stdout.splitlines() - try: - found_remote = remotes[0] - except IndexError: - raise RemoteNotFoundError - - for remote in remotes: - if remote.startswith("remote.origin.url "): - found_remote = remote - break - url = found_remote.split(" ")[1] - return cls._git_remote_to_pip_url(url.strip()) - - @staticmethod - def _git_remote_to_pip_url(url: str) -> str: - """ - Convert a remote url from what git uses to what pip accepts. - - There are 3 legal forms **url** may take: - - 1. A fully qualified url: ssh://git@example.com/foo/bar.git - 2. A local project.git folder: /path/to/bare/repository.git - 3. SCP shorthand for form 1: git@example.com:foo/bar.git - - Form 1 is output as-is. Form 2 must be converted to URI and form 3 must - be converted to form 1. - - See the corresponding test test_git_remote_url_to_pip() for examples of - sample inputs/outputs. - """ - if re.match(r"\w+://", url): - # This is already valid. Pass it though as-is. - return url - if os.path.exists(url): - # A local bare remote (git clone --mirror). - # Needs a file:// prefix. - return pathlib.PurePath(url).as_uri() - scp_match = SCP_REGEX.match(url) - if scp_match: - # Add an ssh:// prefix and replace the ':' with a '/'. - return scp_match.expand(r"ssh://\1\2/\3") - # Otherwise, bail out. - raise RemoteNotValidError(url) - - @classmethod - def has_commit(cls, location: str, rev: str) -> bool: - """ - Check if rev is a commit that is available in the local repository. - """ - try: - cls.run_command( - ["rev-parse", "-q", "--verify", "sha^" + rev], - cwd=location, - log_failed_cmd=False, - ) - except InstallationError: - return False - else: - return True - - @classmethod - def get_revision(cls, location: str, rev: str | None = None) -> str: - if rev is None: - rev = "HEAD" - current_rev = cls.run_command( - ["rev-parse", rev], - show_stdout=False, - stdout_only=True, - cwd=location, - ) - return current_rev.strip() - - @classmethod - def get_subdirectory(cls, location: str) -> str | None: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - # find the repo root - git_dir = cls.run_command( - ["rev-parse", "--git-dir"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - if not os.path.isabs(git_dir): - git_dir = os.path.join(location, git_dir) - repo_root = os.path.abspath(os.path.join(git_dir, "..")) - return find_path_to_project_root_from_repo_root(location, repo_root) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> tuple[str, str | None, AuthInfo]: - """ - Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. - That's required because although they use SSH they sometimes don't - work with a ssh:// scheme (e.g. GitHub). But we need a scheme for - parsing. Hence we remove it again afterwards and return it as a stub. - """ - # Works around an apparent Git bug - # (see https://article.gmane.org/gmane.comp.version-control.git/146500) - scheme, netloc, path, query, fragment = urlsplit(url) - if scheme.endswith("file"): - initial_slashes = path[: -len(path.lstrip("/"))] - newpath = initial_slashes + urllib.request.url2pathname(path).replace( - "\\", "/" - ).lstrip("/") - after_plus = scheme.find("+") + 1 - url = scheme[:after_plus] + urlunsplit( - (scheme[after_plus:], netloc, newpath, query, fragment), - ) - - if "://" not in url: - assert "file:" not in url - url = url.replace("git+", "git+ssh://") - url, rev, user_pass = super().get_url_rev_and_auth(url) - url = url.replace("ssh://", "") - else: - url, rev, user_pass = super().get_url_rev_and_auth(url) - - return url, rev, user_pass - - @classmethod - def update_submodules(cls, location: str, verbosity: int = 0) -> None: - argv = ["submodule", "update", "--init", "--recursive"] - - if verbosity <= 0: - argv.append("-q") - - if not os.path.exists(os.path.join(location, ".gitmodules")): - return - cls.run_command( - argv, - cwd=location, - ) - - @classmethod - def get_repository_root(cls, location: str) -> str | None: - loc = super().get_repository_root(location) - if loc: - return loc - try: - r = cls.run_command( - ["rev-parse", "--show-toplevel"], - cwd=location, - show_stdout=False, - stdout_only=True, - on_returncode="raise", - log_failed_cmd=False, - ) - except BadCommand: - logger.debug( - "could not determine if %s is under git control " - "because git is not available", - location, - ) - return None - except InstallationError: - return None - return os.path.normpath(r.rstrip("\r\n")) - - @staticmethod - def should_add_vcs_url_prefix(repo_url: str) -> bool: - """In either https or ssh form, requirements must be prefixed with git+.""" - return True - - -vcs.register(Git) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/mercurial.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/mercurial.py deleted file mode 100644 index c87580316..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/mercurial.py +++ /dev/null @@ -1,186 +0,0 @@ -from __future__ import annotations - -import configparser -import logging -import os - -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import HiddenText, display_path -from pip._internal.utils.subprocess import make_command -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs.versioncontrol import ( - RevOptions, - VersionControl, - find_path_to_project_root_from_repo_root, - vcs, -) - -logger = logging.getLogger(__name__) - - -class Mercurial(VersionControl): - name = "hg" - dirname = ".hg" - repo_name = "clone" - schemes = ( - "hg+file", - "hg+http", - "hg+https", - "hg+ssh", - "hg+static-http", - ) - - @staticmethod - def get_base_rev_args(rev: str) -> list[str]: - return [f"--rev={rev}"] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Cloning hg %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags: tuple[str, ...] = ("--quiet",) - elif verbosity == 1: - flags = () - elif verbosity == 2: - flags = ("--verbose",) - else: - flags = ("--verbose", "--debug") - self.run_command(make_command("clone", "--noupdate", *flags, url, dest)) - self.run_command( - make_command("update", *flags, rev_options.to_args()), - cwd=dest, - ) - - def switch( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - extra_flags = [] - repo_config = os.path.join(dest, self.dirname, "hgrc") - config = configparser.RawConfigParser() - - if verbosity <= 0: - extra_flags.append("-q") - - try: - config.read(repo_config) - config.set("paths", "default", url.secret) - with open(repo_config, "w") as config_file: - config.write(config_file) - except (OSError, configparser.NoSectionError) as exc: - logger.warning("Could not switch Mercurial repository to %s: %s", url, exc) - else: - cmd_args = make_command("update", *extra_flags, rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - def update( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - extra_flags = [] - - if verbosity <= 0: - extra_flags.append("-q") - - self.run_command(["pull", *extra_flags], cwd=dest) - cmd_args = make_command("update", *extra_flags, rev_options.to_args()) - self.run_command(cmd_args, cwd=dest) - - @classmethod - def get_remote_url(cls, location: str) -> str: - url = cls.run_command( - ["showconfig", "paths.default"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - if cls._is_local_repository(url): - url = path_to_url(url) - return url.strip() - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the repository-local changeset revision number, as an integer. - """ - current_revision = cls.run_command( - ["parents", "--template={rev}"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - return current_revision - - @classmethod - def get_requirement_revision(cls, location: str) -> str: - """ - Return the changeset identification hash, as a 40-character - hexadecimal string - """ - current_rev_hash = cls.run_command( - ["parents", "--template={node}"], - show_stdout=False, - stdout_only=True, - cwd=location, - ).strip() - return current_rev_hash - - @classmethod - def is_commit_id_equal(cls, dest: str, name: str | None) -> bool: - """Always assume the versions don't match""" - return False - - @classmethod - def get_subdirectory(cls, location: str) -> str | None: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - # find the repo root - repo_root = cls.run_command( - ["root"], show_stdout=False, stdout_only=True, cwd=location - ).strip() - if not os.path.isabs(repo_root): - repo_root = os.path.abspath(os.path.join(location, repo_root)) - return find_path_to_project_root_from_repo_root(location, repo_root) - - @classmethod - def get_repository_root(cls, location: str) -> str | None: - loc = super().get_repository_root(location) - if loc: - return loc - try: - r = cls.run_command( - ["root"], - cwd=location, - show_stdout=False, - stdout_only=True, - on_returncode="raise", - log_failed_cmd=False, - ) - except BadCommand: - logger.debug( - "could not determine if %s is under hg control " - "because hg is not available", - location, - ) - return None - except InstallationError: - return None - return os.path.normpath(r.rstrip("\r\n")) - - -vcs.register(Mercurial) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/subversion.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/subversion.py deleted file mode 100644 index 579f428c8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/subversion.py +++ /dev/null @@ -1,335 +0,0 @@ -from __future__ import annotations - -import logging -import os -import re - -from pip._internal.utils.misc import ( - HiddenText, - display_path, - is_console_interactive, - is_installable_dir, - split_auth_from_netloc, -) -from pip._internal.utils.subprocess import CommandArgs, make_command -from pip._internal.vcs.versioncontrol import ( - AuthInfo, - RemoteNotFoundError, - RevOptions, - VersionControl, - vcs, -) - -logger = logging.getLogger(__name__) - -_svn_xml_url_re = re.compile('url="([^"]+)"') -_svn_rev_re = re.compile(r'committed-rev="(\d+)"') -_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') -_svn_info_xml_url_re = re.compile(r"<url>(.*)</url>") - - -class Subversion(VersionControl): - name = "svn" - dirname = ".svn" - repo_name = "checkout" - schemes = ("svn+ssh", "svn+http", "svn+https", "svn+svn", "svn+file") - - @classmethod - def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: - return True - - @staticmethod - def get_base_rev_args(rev: str) -> list[str]: - return ["-r", rev] - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the maximum revision for all files under a given location - """ - # Note: taken from setuptools.command.egg_info - revision = 0 - - for base, dirs, _ in os.walk(location): - if cls.dirname not in dirs: - dirs[:] = [] - continue # no sense walking uncontrolled subdirs - dirs.remove(cls.dirname) - entries_fn = os.path.join(base, cls.dirname, "entries") - if not os.path.exists(entries_fn): - # FIXME: should we warn? - continue - - dirurl, localrev = cls._get_svn_url_rev(base) - - if base == location: - assert dirurl is not None - base = dirurl + "/" # save the root url - elif not dirurl or not dirurl.startswith(base): - dirs[:] = [] - continue # not part of the same svn tree, skip it - revision = max(revision, localrev) - return str(revision) - - @classmethod - def get_netloc_and_auth( - cls, netloc: str, scheme: str - ) -> tuple[str, tuple[str | None, str | None]]: - """ - This override allows the auth information to be passed to svn via the - --username and --password options instead of via the URL. - """ - if scheme == "ssh": - # The --username and --password options can't be used for - # svn+ssh URLs, so keep the auth information in the URL. - return super().get_netloc_and_auth(netloc, scheme) - - return split_auth_from_netloc(netloc) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> tuple[str, str | None, AuthInfo]: - # hotfix the URL scheme after removing svn+ from svn+ssh:// re-add it - url, rev, user_pass = super().get_url_rev_and_auth(url) - if url.startswith("ssh://"): - url = "svn+" + url - return url, rev, user_pass - - @staticmethod - def make_rev_args(username: str | None, password: HiddenText | None) -> CommandArgs: - extra_args: CommandArgs = [] - if username: - extra_args += ["--username", username] - if password: - extra_args += ["--password", password] - - return extra_args - - @classmethod - def get_remote_url(cls, location: str) -> str: - # In cases where the source is in a subdirectory, we have to look up in - # the location until we find a valid project root. - orig_location = location - while not is_installable_dir(location): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding a Python project. - logger.warning( - "Could not find Python project for directory %s (tried all " - "parent directories)", - orig_location, - ) - raise RemoteNotFoundError - - url, _rev = cls._get_svn_url_rev(location) - if url is None: - raise RemoteNotFoundError - - return url - - @classmethod - def _get_svn_url_rev(cls, location: str) -> tuple[str | None, int]: - from pip._internal.exceptions import InstallationError - - entries_path = os.path.join(location, cls.dirname, "entries") - if os.path.exists(entries_path): - with open(entries_path) as f: - data = f.read() - else: # subversion >= 1.7 does not have the 'entries' file - data = "" - - url = None - if data.startswith(("8", "9", "10")): - entries = list(map(str.splitlines, data.split("\n\x0c\n"))) - del entries[0][0] # get rid of the '8' - url = entries[0][3] - revs = [int(d[9]) for d in entries if len(d) > 9 and d[9]] + [0] - elif data.startswith("<?xml"): - match = _svn_xml_url_re.search(data) - if not match: - raise ValueError(f"Badly formatted data: {data!r}") - url = match.group(1) # get repository URL - revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0] - else: - try: - # subversion >= 1.7 - # Note that using get_remote_call_options is not necessary here - # because `svn info` is being run against a local directory. - # We don't need to worry about making sure interactive mode - # is being used to prompt for passwords, because passwords - # are only potentially needed for remote server requests. - xml = cls.run_command( - ["info", "--xml", location], - show_stdout=False, - stdout_only=True, - ) - match = _svn_info_xml_url_re.search(xml) - assert match is not None - url = match.group(1) - revs = [int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)] - except InstallationError: - url, revs = None, [] - - if revs: - rev = max(revs) - else: - rev = 0 - - return url, rev - - @classmethod - def is_commit_id_equal(cls, dest: str, name: str | None) -> bool: - """Always assume the versions don't match""" - return False - - def __init__(self, use_interactive: bool | None = None) -> None: - if use_interactive is None: - use_interactive = is_console_interactive() - self.use_interactive = use_interactive - - # This member is used to cache the fetched version of the current - # ``svn`` client. - # Special value definitions: - # None: Not evaluated yet. - # Empty tuple: Could not parse version. - self._vcs_version: tuple[int, ...] | None = None - - super().__init__() - - def call_vcs_version(self) -> tuple[int, ...]: - """Query the version of the currently installed Subversion client. - - :return: A tuple containing the parts of the version information or - ``()`` if the version returned from ``svn`` could not be parsed. - :raises: BadCommand: If ``svn`` is not installed. - """ - # Example versions: - # svn, version 1.10.3 (r1842928) - # compiled Feb 25 2019, 14:20:39 on x86_64-apple-darwin17.0.0 - # svn, version 1.7.14 (r1542130) - # compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu - # svn, version 1.12.0-SlikSvn (SlikSvn/1.12.0) - # compiled May 28 2019, 13:44:56 on x86_64-microsoft-windows6.2 - version_prefix = "svn, version " - version = self.run_command(["--version"], show_stdout=False, stdout_only=True) - if not version.startswith(version_prefix): - return () - - version = version[len(version_prefix) :].split()[0] - version_list = version.partition("-")[0].split(".") - try: - parsed_version = tuple(map(int, version_list)) - except ValueError: - return () - - return parsed_version - - def get_vcs_version(self) -> tuple[int, ...]: - """Return the version of the currently installed Subversion client. - - If the version of the Subversion client has already been queried, - a cached value will be used. - - :return: A tuple containing the parts of the version information or - ``()`` if the version returned from ``svn`` could not be parsed. - :raises: BadCommand: If ``svn`` is not installed. - """ - if self._vcs_version is not None: - # Use cached version, if available. - # If parsing the version failed previously (empty tuple), - # do not attempt to parse it again. - return self._vcs_version - - vcs_version = self.call_vcs_version() - self._vcs_version = vcs_version - return vcs_version - - def get_remote_call_options(self) -> CommandArgs: - """Return options to be used on calls to Subversion that contact the server. - - These options are applicable for the following ``svn`` subcommands used - in this class. - - - checkout - - switch - - update - - :return: A list of command line arguments to pass to ``svn``. - """ - if not self.use_interactive: - # --non-interactive switch is available since Subversion 0.14.4. - # Subversion < 1.8 runs in interactive mode by default. - return ["--non-interactive"] - - svn_version = self.get_vcs_version() - # By default, Subversion >= 1.8 runs in non-interactive mode if - # stdin is not a TTY. Since that is how pip invokes SVN, in - # call_subprocess(), pip must pass --force-interactive to ensure - # the user can be prompted for a password, if required. - # SVN added the --force-interactive option in SVN 1.8. Since - # e.g. RHEL/CentOS 7, which is supported until 2024, ships with - # SVN 1.7, pip should continue to support SVN 1.7. Therefore, pip - # can't safely add the option if the SVN version is < 1.8 (or unknown). - if svn_version >= (1, 8): - return ["--force-interactive"] - - return [] - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - rev_display = rev_options.to_display() - logger.info( - "Checking out %s%s to %s", - url, - rev_display, - display_path(dest), - ) - if verbosity <= 0: - flags = ["--quiet"] - else: - flags = [] - cmd_args = make_command( - "checkout", - *flags, - self.get_remote_call_options(), - rev_options.to_args(), - url, - dest, - ) - self.run_command(cmd_args) - - def switch( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - cmd_args = make_command( - "switch", - self.get_remote_call_options(), - rev_options.to_args(), - url, - dest, - ) - self.run_command(cmd_args) - - def update( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - cmd_args = make_command( - "update", - self.get_remote_call_options(), - rev_options.to_args(), - dest, - ) - self.run_command(cmd_args) - - -vcs.register(Subversion) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/versioncontrol.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/versioncontrol.py deleted file mode 100644 index 95cefb49e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +++ /dev/null @@ -1,695 +0,0 @@ -"""Handles all VCS (version control) support""" - -from __future__ import annotations - -import logging -import os -import shutil -import sys -import urllib.parse -from collections.abc import Iterable, Iterator, Mapping -from dataclasses import dataclass, field -from typing import ( - Any, - Literal, - Optional, -) - -from pip._internal.cli.spinners import SpinnerInterface -from pip._internal.exceptions import BadCommand, InstallationError -from pip._internal.utils.misc import ( - HiddenText, - ask_path_exists, - backup_dir, - display_path, - hide_url, - hide_value, - is_installable_dir, - rmtree, -) -from pip._internal.utils.subprocess import ( - CommandArgs, - call_subprocess, - format_command_args, - make_command, -) - -__all__ = ["vcs"] - - -logger = logging.getLogger(__name__) - -AuthInfo = tuple[Optional[str], Optional[str]] - - -def is_url(name: str) -> bool: - """ - Return true if the name looks like a URL. - """ - scheme = urllib.parse.urlsplit(name).scheme - if not scheme: - return False - return scheme in ["http", "https", "file", "ftp"] + vcs.all_schemes - - -def make_vcs_requirement_url( - repo_url: str, rev: str, project_name: str, subdir: str | None = None -) -> str: - """ - Return the URL for a VCS requirement. - - Args: - repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+"). - project_name: the (unescaped) project name. - """ - quoted_rev = urllib.parse.quote(rev, "/") - egg_project_name = project_name.replace("-", "_") - req = f"{repo_url}@{quoted_rev}#egg={egg_project_name}" - if subdir: - req += f"&subdirectory={subdir}" - - return req - - -def find_path_to_project_root_from_repo_root( - location: str, repo_root: str -) -> str | None: - """ - Find the the Python project's root by searching up the filesystem from - `location`. Return the path to project root relative to `repo_root`. - Return None if the project root is `repo_root`, or cannot be found. - """ - # find project root. - orig_location = location - while not is_installable_dir(location): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding a Python project. - logger.warning( - "Could not find a Python project for directory %s (tried all " - "parent directories)", - orig_location, - ) - return None - - if os.path.samefile(repo_root, location): - return None - - return os.path.relpath(location, repo_root) - - -class RemoteNotFoundError(Exception): - pass - - -class RemoteNotValidError(Exception): - def __init__(self, url: str): - super().__init__(url) - self.url = url - - -@dataclass(frozen=True) -class RevOptions: - """ - Encapsulates a VCS-specific revision to install, along with any VCS - install options. - - Args: - vc_class: a VersionControl subclass. - rev: the name of the revision to install. - extra_args: a list of extra options. - """ - - vc_class: type[VersionControl] - rev: str | None = None - extra_args: CommandArgs = field(default_factory=list) - branch_name: str | None = None - - def __repr__(self) -> str: - return f"<RevOptions {self.vc_class.name}: rev={self.rev!r}>" - - @property - def arg_rev(self) -> str | None: - if self.rev is None: - return self.vc_class.default_arg_rev - - return self.rev - - def to_args(self) -> CommandArgs: - """ - Return the VCS-specific command arguments. - """ - args: CommandArgs = [] - rev = self.arg_rev - if rev is not None: - args += self.vc_class.get_base_rev_args(rev) - args += self.extra_args - - return args - - def to_display(self) -> str: - if not self.rev: - return "" - - return f" (to revision {self.rev})" - - def make_new(self, rev: str) -> RevOptions: - """ - Make a copy of the current instance, but with a new rev. - - Args: - rev: the name of the revision for the new object. - """ - return self.vc_class.make_rev_options(rev, extra_args=self.extra_args) - - -class VcsSupport: - _registry: dict[str, VersionControl] = {} - schemes = ["ssh", "git", "hg", "bzr", "sftp", "svn"] - - def __init__(self) -> None: - # Register more schemes with urlparse for various version control - # systems - urllib.parse.uses_netloc.extend(self.schemes) - super().__init__() - - def __iter__(self) -> Iterator[str]: - return self._registry.__iter__() - - @property - def backends(self) -> list[VersionControl]: - return list(self._registry.values()) - - @property - def dirnames(self) -> list[str]: - return [backend.dirname for backend in self.backends] - - @property - def all_schemes(self) -> list[str]: - schemes: list[str] = [] - for backend in self.backends: - schemes.extend(backend.schemes) - return schemes - - def register(self, cls: type[VersionControl]) -> None: - if not hasattr(cls, "name"): - logger.warning("Cannot register VCS %s", cls.__name__) - return - if cls.name not in self._registry: - self._registry[cls.name] = cls() - logger.debug("Registered VCS backend: %s", cls.name) - - def unregister(self, name: str) -> None: - if name in self._registry: - del self._registry[name] - - def get_backend_for_dir(self, location: str) -> VersionControl | None: - """ - Return a VersionControl object if a repository of that type is found - at the given directory. - """ - vcs_backends = {} - for vcs_backend in self._registry.values(): - repo_path = vcs_backend.get_repository_root(location) - if not repo_path: - continue - logger.debug("Determine that %s uses VCS: %s", location, vcs_backend.name) - vcs_backends[repo_path] = vcs_backend - - if not vcs_backends: - return None - - # Choose the VCS in the inner-most directory. Since all repository - # roots found here would be either `location` or one of its - # parents, the longest path should have the most path components, - # i.e. the backend representing the inner-most repository. - inner_most_repo_path = max(vcs_backends, key=len) - return vcs_backends[inner_most_repo_path] - - def get_backend_for_scheme(self, scheme: str) -> VersionControl | None: - """ - Return a VersionControl object or None. - """ - for vcs_backend in self._registry.values(): - if scheme in vcs_backend.schemes: - return vcs_backend - return None - - def get_backend(self, name: str) -> VersionControl | None: - """ - Return a VersionControl object or None. - """ - name = name.lower() - return self._registry.get(name) - - -vcs = VcsSupport() - - -class VersionControl: - name = "" - dirname = "" - repo_name = "" - # List of supported schemes for this Version Control - schemes: tuple[str, ...] = () - # Iterable of environment variable names to pass to call_subprocess(). - unset_environ: tuple[str, ...] = () - default_arg_rev: str | None = None - - @classmethod - def should_add_vcs_url_prefix(cls, remote_url: str) -> bool: - """ - Return whether the vcs prefix (e.g. "git+") should be added to a - repository's remote url when used in a requirement. - """ - return not remote_url.lower().startswith(f"{cls.name}:") - - @classmethod - def get_subdirectory(cls, location: str) -> str | None: - """ - Return the path to Python project root, relative to the repo root. - Return None if the project root is in the repo root. - """ - return None - - @classmethod - def get_requirement_revision(cls, repo_dir: str) -> str: - """ - Return the revision string that should be used in a requirement. - """ - return cls.get_revision(repo_dir) - - @classmethod - def get_src_requirement(cls, repo_dir: str, project_name: str) -> str: - """ - Return the requirement string to use to redownload the files - currently at the given repository directory. - - Args: - project_name: the (unescaped) project name. - - The return value has a form similar to the following: - - {repository_url}@{revision}#egg={project_name} - """ - repo_url = cls.get_remote_url(repo_dir) - - if cls.should_add_vcs_url_prefix(repo_url): - repo_url = f"{cls.name}+{repo_url}" - - revision = cls.get_requirement_revision(repo_dir) - subdir = cls.get_subdirectory(repo_dir) - req = make_vcs_requirement_url(repo_url, revision, project_name, subdir=subdir) - - return req - - @staticmethod - def get_base_rev_args(rev: str) -> list[str]: - """ - Return the base revision arguments for a vcs command. - - Args: - rev: the name of a revision to install. Cannot be None. - """ - raise NotImplementedError - - def is_immutable_rev_checkout(self, url: str, dest: str) -> bool: - """ - Return true if the commit hash checked out at dest matches - the revision in url. - - Always return False, if the VCS does not support immutable commit - hashes. - - This method does not check if there are local uncommitted changes - in dest after checkout, as pip currently has no use case for that. - """ - return False - - @classmethod - def make_rev_options( - cls, rev: str | None = None, extra_args: CommandArgs | None = None - ) -> RevOptions: - """ - Return a RevOptions object. - - Args: - rev: the name of a revision to install. - extra_args: a list of extra options. - """ - return RevOptions(cls, rev, extra_args=extra_args or []) - - @classmethod - def _is_local_repository(cls, repo: str) -> bool: - """ - posix absolute paths start with os.path.sep, - win32 ones start with drive (like c:\\folder) - """ - drive, tail = os.path.splitdrive(repo) - return repo.startswith(os.path.sep) or bool(drive) - - @classmethod - def get_netloc_and_auth( - cls, netloc: str, scheme: str - ) -> tuple[str, tuple[str | None, str | None]]: - """ - Parse the repository URL's netloc, and return the new netloc to use - along with auth information. - - Args: - netloc: the original repository URL netloc. - scheme: the repository URL's scheme without the vcs prefix. - - This is mainly for the Subversion class to override, so that auth - information can be provided via the --username and --password options - instead of through the URL. For other subclasses like Git without - such an option, auth information must stay in the URL. - - Returns: (netloc, (username, password)). - """ - return netloc, (None, None) - - @classmethod - def get_url_rev_and_auth(cls, url: str) -> tuple[str, str | None, AuthInfo]: - """ - Parse the repository URL to use, and return the URL, revision, - and auth info to use. - - Returns: (url, rev, (username, password)). - """ - scheme, netloc, path, query, frag = urllib.parse.urlsplit(url) - if "+" not in scheme: - raise ValueError( - f"Sorry, {url!r} is a malformed VCS url. " - "The format is <vcs>+<protocol>://<url>, " - "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" - ) - # Remove the vcs prefix. - scheme = scheme.split("+", 1)[1] - netloc, user_pass = cls.get_netloc_and_auth(netloc, scheme) - rev = None - if "@" in path: - path, rev = path.rsplit("@", 1) - if not rev: - raise InstallationError( - f"The URL {url!r} has an empty revision (after @) " - "which is not supported. Include a revision after @ " - "or remove @ from the URL." - ) - rev = urllib.parse.unquote(rev) - url = urllib.parse.urlunsplit((scheme, netloc, path, query, "")) - return url, rev, user_pass - - @staticmethod - def make_rev_args(username: str | None, password: HiddenText | None) -> CommandArgs: - """ - Return the RevOptions "extra arguments" to use in obtain(). - """ - return [] - - def get_url_rev_options(self, url: HiddenText) -> tuple[HiddenText, RevOptions]: - """ - Return the URL and RevOptions object to use in obtain(), - as a tuple (url, rev_options). - """ - secret_url, rev, user_pass = self.get_url_rev_and_auth(url.secret) - username, secret_password = user_pass - password: HiddenText | None = None - if secret_password is not None: - password = hide_value(secret_password) - extra_args = self.make_rev_args(username, password) - rev_options = self.make_rev_options(rev, extra_args=extra_args) - - return hide_url(secret_url), rev_options - - @staticmethod - def normalize_url(url: str) -> str: - """ - Normalize a URL for comparison by unquoting it and removing any - trailing slash. - """ - return urllib.parse.unquote(url).rstrip("/") - - @classmethod - def compare_urls(cls, url1: str, url2: str) -> bool: - """ - Compare two repo URLs for identity, ignoring incidental differences. - """ - return cls.normalize_url(url1) == cls.normalize_url(url2) - - def fetch_new( - self, dest: str, url: HiddenText, rev_options: RevOptions, verbosity: int - ) -> None: - """ - Fetch a revision from a repository, in the case that this is the - first fetch from the repository. - - Args: - dest: the directory to fetch the repository to. - rev_options: a RevOptions object. - verbosity: verbosity level. - """ - raise NotImplementedError - - def switch( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - """ - Switch the repo at ``dest`` to point to ``URL``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - def update( - self, - dest: str, - url: HiddenText, - rev_options: RevOptions, - verbosity: int = 0, - ) -> None: - """ - Update an already-existing repo to the given ``rev_options``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - @classmethod - def is_commit_id_equal(cls, dest: str, name: str | None) -> bool: - """ - Return whether the id of the current commit equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - raise NotImplementedError - - def obtain(self, dest: str, url: HiddenText, verbosity: int) -> None: - """ - Install or update in editable mode the package represented by this - VersionControl object. - - :param dest: the repository directory in which to install or update. - :param url: the repository URL starting with a vcs prefix. - :param verbosity: verbosity level. - """ - url, rev_options = self.get_url_rev_options(url) - - if not os.path.exists(dest): - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - rev_display = rev_options.to_display() - if self.is_repository_directory(dest): - existing_url = self.get_remote_url(dest) - if self.compare_urls(existing_url, url.secret): - logger.debug( - "%s in %s exists, and has correct URL (%s)", - self.repo_name.title(), - display_path(dest), - url, - ) - if not self.is_commit_id_equal(dest, rev_options.rev): - logger.info( - "Updating %s %s%s", - display_path(dest), - self.repo_name, - rev_display, - ) - self.update(dest, url, rev_options, verbosity=verbosity) - else: - logger.info("Skipping because already up-to-date.") - return - - logger.warning( - "%s %s in %s exists with URL %s", - self.name, - self.repo_name, - display_path(dest), - existing_url, - ) - prompt = ("(s)witch, (i)gnore, (w)ipe, (b)ackup ", ("s", "i", "w", "b")) - else: - logger.warning( - "Directory %s already exists, and is not a %s %s.", - dest, - self.name, - self.repo_name, - ) - # https://github.com/python/mypy/issues/1174 - prompt = ("(i)gnore, (w)ipe, (b)ackup ", ("i", "w", "b")) # type: ignore - - logger.warning( - "The plan is to install the %s repository %s", - self.name, - url, - ) - response = ask_path_exists(f"What to do? {prompt[0]}", prompt[1]) - - if response == "a": - sys.exit(-1) - - if response == "w": - logger.warning("Deleting %s", display_path(dest)) - rmtree(dest) - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - if response == "b": - dest_dir = backup_dir(dest) - logger.warning("Backing up %s to %s", display_path(dest), dest_dir) - shutil.move(dest, dest_dir) - self.fetch_new(dest, url, rev_options, verbosity=verbosity) - return - - # Do nothing if the response is "i". - if response == "s": - logger.info( - "Switching %s %s to %s%s", - self.repo_name, - display_path(dest), - url, - rev_display, - ) - self.switch(dest, url, rev_options, verbosity=verbosity) - - def unpack(self, location: str, url: HiddenText, verbosity: int) -> None: - """ - Clean up current location and download the url repository - (and vcs infos) into location - - :param url: the repository URL starting with a vcs prefix. - :param verbosity: verbosity level. - """ - if os.path.exists(location): - rmtree(location) - self.obtain(location, url=url, verbosity=verbosity) - - @classmethod - def get_remote_url(cls, location: str) -> str: - """ - Return the url used at location - - Raises RemoteNotFoundError if the repository does not have a remote - url configured. - """ - raise NotImplementedError - - @classmethod - def get_revision(cls, location: str) -> str: - """ - Return the current commit id of the files at the given location. - """ - raise NotImplementedError - - @classmethod - def run_command( - cls, - cmd: list[str] | CommandArgs, - show_stdout: bool = True, - cwd: str | None = None, - on_returncode: Literal["raise", "warn", "ignore"] = "raise", - extra_ok_returncodes: Iterable[int] | None = None, - command_desc: str | None = None, - extra_environ: Mapping[str, Any] | None = None, - spinner: SpinnerInterface | None = None, - log_failed_cmd: bool = True, - stdout_only: bool = False, - ) -> str: - """ - Run a VCS subcommand - This is simply a wrapper around call_subprocess that adds the VCS - command name, and checks that the VCS is available - """ - cmd = make_command(cls.name, *cmd) - if command_desc is None: - command_desc = format_command_args(cmd) - try: - return call_subprocess( - cmd, - show_stdout, - cwd, - on_returncode=on_returncode, - extra_ok_returncodes=extra_ok_returncodes, - command_desc=command_desc, - extra_environ=extra_environ, - unset_environ=cls.unset_environ, - spinner=spinner, - log_failed_cmd=log_failed_cmd, - stdout_only=stdout_only, - ) - except NotADirectoryError: - raise BadCommand(f"Cannot find command {cls.name!r} - invalid PATH") - except FileNotFoundError: - # errno.ENOENT = no such file or directory - # In other words, the VCS executable isn't available - raise BadCommand( - f"Cannot find command {cls.name!r} - do you have " - f"{cls.name!r} installed and in your PATH?" - ) - except PermissionError: - # errno.EACCES = Permission denied - # This error occurs, for instance, when the command is installed - # only for another user. So, the current user don't have - # permission to call the other user command. - raise BadCommand( - f"No permission to execute {cls.name!r} - install it " - f"locally, globally (ask admin), or check your PATH. " - f"See possible solutions at " - f"https://pip.pypa.io/en/latest/reference/pip_freeze/" - f"#fixing-permission-denied." - ) - - @classmethod - def is_repository_directory(cls, path: str) -> bool: - """ - Return whether a directory path is a repository directory. - """ - logger.debug("Checking in %s for %s (%s)...", path, cls.dirname, cls.name) - return os.path.exists(os.path.join(path, cls.dirname)) - - @classmethod - def get_repository_root(cls, location: str) -> str | None: - """ - Return the "root" (top-level) directory controlled by the vcs, - or `None` if the directory is not in any. - - It is meant to be overridden to implement smarter detection - mechanisms for specific vcs. - - This can do more than is_repository_directory() alone. For - example, the Git override checks that Git is actually available. - """ - if cls.is_repository_directory(location): - return location - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/wheel_builder.py b/Python314_4_x86_Template/Lib/site-packages/pip/_internal/wheel_builder.py deleted file mode 100644 index 4dbf76778..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_internal/wheel_builder.py +++ /dev/null @@ -1,261 +0,0 @@ -"""Orchestrator for building wheels from InstallRequirements.""" - -from __future__ import annotations - -import logging -import os.path -import re -from collections.abc import Iterable -from tempfile import TemporaryDirectory - -from pip._vendor.packaging.utils import canonicalize_name, canonicalize_version -from pip._vendor.packaging.version import InvalidVersion, Version - -from pip._internal.cache import WheelCache -from pip._internal.exceptions import InvalidWheelFilename, UnsupportedWheel -from pip._internal.metadata import FilesystemWheel, get_wheel_distribution -from pip._internal.models.link import Link -from pip._internal.models.wheel import Wheel -from pip._internal.operations.build.wheel import build_wheel_pep517 -from pip._internal.operations.build.wheel_editable import build_wheel_editable -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ensure_dir, hash_file -from pip._internal.utils.urls import path_to_url -from pip._internal.vcs import vcs - -logger = logging.getLogger(__name__) - -_egg_info_re = re.compile(r"([a-z0-9_.]+)-([a-z0-9_.!+-]+)", re.IGNORECASE) - -BuildResult = tuple[list[InstallRequirement], list[InstallRequirement]] - - -def _contains_egg_info(s: str) -> bool: - """Determine whether the string looks like an egg_info. - - :param s: The string to parse. E.g. foo-2.1 - """ - return bool(_egg_info_re.search(s)) - - -def _should_cache( - req: InstallRequirement, -) -> bool | None: - """ - Return whether a built InstallRequirement can be stored in the persistent - wheel cache, assuming the wheel cache is available. - """ - if req.editable or not req.source_dir: - # never cache editable requirements - return False - - if req.link and req.link.is_vcs: - # VCS checkout. Do not cache - # unless it points to an immutable commit hash. - assert not req.editable - assert req.source_dir - vcs_backend = vcs.get_backend_for_scheme(req.link.scheme) - assert vcs_backend - if vcs_backend.is_immutable_rev_checkout(req.link.url, req.source_dir): - return True - return False - - assert req.link - base, ext = req.link.splitext() - if _contains_egg_info(base): - return True - - # Otherwise, do not cache. - return False - - -def _get_cache_dir( - req: InstallRequirement, - wheel_cache: WheelCache, -) -> str: - """Return the persistent or temporary cache directory where the built - wheel need to be stored. - """ - cache_available = bool(wheel_cache.cache_dir) - assert req.link - if cache_available and _should_cache(req): - cache_dir = wheel_cache.get_path_for_link(req.link) - else: - cache_dir = wheel_cache.get_ephem_path_for_link(req.link) - return cache_dir - - -def _verify_one(req: InstallRequirement, wheel_path: str) -> None: - canonical_name = canonicalize_name(req.name or "") - w = Wheel(os.path.basename(wheel_path)) - if w.name != canonical_name: - raise InvalidWheelFilename( - f"Wheel has unexpected file name: expected {canonical_name!r}, " - f"got {w.name!r}", - ) - dist = get_wheel_distribution(FilesystemWheel(wheel_path), canonical_name) - dist_verstr = str(dist.version) - if canonicalize_version(dist_verstr) != canonicalize_version(w.version): - raise InvalidWheelFilename( - f"Wheel has unexpected file name: expected {dist_verstr!r}, " - f"got {w.version!r}", - ) - metadata_version_value = dist.metadata_version - if metadata_version_value is None: - raise UnsupportedWheel("Missing Metadata-Version") - try: - metadata_version = Version(metadata_version_value) - except InvalidVersion: - msg = f"Invalid Metadata-Version: {metadata_version_value}" - raise UnsupportedWheel(msg) - if metadata_version >= Version("1.2") and not isinstance(dist.version, Version): - raise UnsupportedWheel( - f"Metadata 1.2 mandates PEP 440 version, but {dist_verstr!r} is not" - ) - - -def _build_one( - req: InstallRequirement, - output_dir: str, - verify: bool, - editable: bool, -) -> str | None: - """Build one wheel. - - :return: The filename of the built wheel, or None if the build failed. - """ - artifact = "editable" if editable else "wheel" - try: - ensure_dir(output_dir) - except OSError as e: - logger.warning( - "Building %s for %s failed: %s", - artifact, - req.name, - e, - ) - return None - - # Install build deps into temporary directory (PEP 518) - with req.build_env: - wheel_path = _build_one_inside_env(req, output_dir, editable) - if wheel_path and verify: - try: - _verify_one(req, wheel_path) - except (InvalidWheelFilename, UnsupportedWheel) as e: - logger.warning("Built %s for %s is invalid: %s", artifact, req.name, e) - return None - return wheel_path - - -def _build_one_inside_env( - req: InstallRequirement, - output_dir: str, - editable: bool, -) -> str | None: - with TemporaryDirectory(dir=output_dir) as wheel_directory: - assert req.name - assert req.metadata_directory - assert req.pep517_backend - if editable: - wheel_path = build_wheel_editable( - name=req.name, - backend=req.pep517_backend, - metadata_directory=req.metadata_directory, - wheel_directory=wheel_directory, - ) - else: - wheel_path = build_wheel_pep517( - name=req.name, - backend=req.pep517_backend, - metadata_directory=req.metadata_directory, - wheel_directory=wheel_directory, - ) - - if wheel_path is not None: - wheel_name = os.path.basename(wheel_path) - dest_path = os.path.join(output_dir, wheel_name) - try: - wheel_hash, length = hash_file(wheel_path) - # We can do a replace here because wheel_path is guaranteed to - # be in the same filesystem as output_dir. This will perform an - # atomic rename, which is necessary to avoid concurrency issues - # when populating the cache. - os.replace(wheel_path, dest_path) - logger.info( - "Created wheel for %s: filename=%s size=%d sha256=%s", - req.name, - wheel_name, - length, - wheel_hash.hexdigest(), - ) - logger.info("Stored in directory: %s", output_dir) - return dest_path - except Exception as e: - logger.warning( - "Building wheel for %s failed: %s", - req.name, - e, - ) - return None - - -def build( - requirements: Iterable[InstallRequirement], - wheel_cache: WheelCache, - verify: bool, -) -> BuildResult: - """Build wheels. - - :return: The list of InstallRequirement that succeeded to build and - the list of InstallRequirement that failed to build. - """ - if not requirements: - return [], [] - - # Build the wheels. - logger.info( - "Building wheels for collected packages: %s", - ", ".join(req.name for req in requirements), # type: ignore - ) - - with indent_log(): - build_successes, build_failures = [], [] - for req in requirements: - assert req.name - cache_dir = _get_cache_dir(req, wheel_cache) - wheel_file = _build_one( - req, - cache_dir, - verify, - req.editable and req.permit_editable_wheels, - ) - if wheel_file: - # Record the download origin in the cache - if req.download_info is not None: - # download_info is guaranteed to be set because when we build an - # InstallRequirement it has been through the preparer before, but - # let's be cautious. - wheel_cache.record_download_origin(cache_dir, req.download_info) - # Update the link for this. - req.link = Link(path_to_url(wheel_file)) - req.local_file_path = req.link.file_path - assert req.link.is_wheel - build_successes.append(req) - else: - build_failures.append(req) - - # notify success/failure - if build_successes: - logger.info( - "Successfully built %s", - " ".join([req.name for req in build_successes]), # type: ignore - ) - if build_failures: - logger.info( - "Failed to build %s", - " ".join([req.name for req in build_failures]), # type: ignore - ) - # Return a list of requirements that failed to build - return build_successes, build_failures diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/README.rst b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/README.rst deleted file mode 100644 index a925e8cc6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/README.rst +++ /dev/null @@ -1,180 +0,0 @@ -================ -Vendoring Policy -================ - -* Vendored libraries **MUST** not be modified except as required to - successfully vendor them. -* Vendored libraries **MUST** be released copies of libraries available on - PyPI. -* Vendored libraries **MUST** be available under a license that allows - them to be integrated into ``pip``, which is released under the MIT license. -* Vendored libraries **MUST** be accompanied with LICENSE files. -* The versions of libraries vendored in pip **MUST** be reflected in - ``pip/_vendor/vendor.txt``. -* Vendored libraries **MUST** function without any build steps such as ``2to3`` - or compilation of C code, practically this limits to single source 2.x/3.x and - pure Python. -* Any modifications made to libraries **MUST** be noted in - ``pip/_vendor/README.rst`` and their corresponding patches **MUST** be - included ``tools/vendoring/patches``. -* Vendored libraries should have corresponding ``vendored()`` entries in - ``pip/_vendor/__init__.py``. - -Rationale -========= - -Historically pip has not had any dependencies except for ``setuptools`` itself, -choosing instead to implement any functionality it needed to prevent needing -a dependency. However, starting with pip 1.5, we began to replace code that was -implemented inside of pip with reusable libraries from PyPI. This brought the -typical benefits of reusing libraries instead of reinventing the wheel like -higher quality and more battle tested code, centralization of bug fixes -(particularly security sensitive ones), and better/more features for less work. - -However, there are several issues with having dependencies in the traditional -way (via ``install_requires``) for pip. These issues are: - -**Fragility** - When pip depends on another library to function then if for whatever reason - that library either isn't installed or an incompatible version is installed - then pip ceases to function. This is of course true for all Python - applications, however for every application *except* for pip the way you fix - it is by re-running pip. Obviously, when pip can't run, you can't use pip to - fix pip, so you're left having to manually resolve dependencies and - installing them by hand. - -**Making other libraries uninstallable** - One of pip's current dependencies is the ``requests`` library, for which pip - requires a fairly recent version to run. If pip depended on ``requests`` in - the traditional manner, then we'd either have to maintain compatibility with - every ``requests`` version that has ever existed (and ever will), OR allow - pip to render certain versions of ``requests`` uninstallable. (The second - issue, although technically true for any Python application, is magnified by - pip's ubiquity; pip is installed by default in Python, in ``pyvenv``, and in - ``virtualenv``.) - -**Security** - This might seem puzzling at first glance, since vendoring has a tendency to - complicate updating dependencies for security updates, and that holds true - for pip. However, given the *other* reasons for avoiding dependencies, the - alternative is for pip to reinvent the wheel itself. This is what pip did - historically. It forced pip to re-implement its own HTTPS verification - routines as a workaround for the Python standard library's lack of SSL - validation, which resulted in similar bugs in the validation routine in - ``requests`` and ``urllib3``, except that they had to be discovered and - fixed independently. Even though we're vendoring, reusing libraries keeps - pip more secure by relying on the great work of our dependencies, *and* - allowing for faster, easier security fixes by simply pulling in newer - versions of dependencies. - -**Bootstrapping** - Currently most popular methods of installing pip rely on pip's - self-contained nature to install pip itself. These tools work by bundling a - copy of pip, adding it to ``sys.path``, and then executing that copy of pip. - This is done instead of implementing a "mini installer" (to reduce - duplication); pip already knows how to install a Python package, and is far - more battle-tested than any "mini installer" could ever possibly be. - -Many downstream redistributors have policies against this kind of bundling, and -instead opt to patch the software they distribute to debundle it and make it -rely on the global versions of the software that they already have packaged -(which may have its own patches applied to it). We (the pip team) would prefer -it if pip was *not* debundled in this manner due to the above reasons and -instead we would prefer it if pip would be left intact as it is now. - -In the longer term, if someone has a *portable* solution to the above problems, -other than the bundling method we currently use, that doesn't add additional -problems that are unreasonable then we would be happy to consider, and possibly -switch to said method. This solution must function correctly across all of the -situation that we expect pip to be used and not mandate some external mechanism -such as OS packages. - - -Modifications -============= - -* ``setuptools`` is completely stripped to only keep ``pkg_resources``. -* ``pkg_resources`` has been modified to import its dependencies from - ``pip._vendor``, and to use the vendored copy of ``platformdirs`` - rather than ``appdirs``. -* ``packaging`` has been modified to import its dependencies from - ``pip._vendor``. -* ``CacheControl`` has been modified to import its dependencies from - ``pip._vendor``. -* ``requests`` has been modified to import its other dependencies from - ``pip._vendor`` and to *not* load ``simplejson`` (all platforms) and - ``pyopenssl`` (Windows). -* ``platformdirs`` has been modified to import its submodules from ``pip._vendor.platformdirs``. - -Automatic Vendoring -=================== - -Vendoring is automated via the `vendoring <https://pypi.org/project/vendoring/>`_ tool from the content of -``pip/_vendor/vendor.txt`` and the different patches in -``tools/vendoring/patches``. -Launch it via ``vendoring sync . -v`` (requires ``vendoring>=0.2.2``). -Tool configuration is done via ``pyproject.toml``. - -To update the vendored library versions, we have a session defined in ``nox``. -The command to upgrade everything is:: - - nox -s vendoring -- --upgrade-all --skip urllib3 --skip setuptools - -At the time of writing (April 2025) we do not upgrade ``urllib3`` because the -next version is a major upgrade and will be handled as an independent PR. We also -do not upgrade ``setuptools``, because we only rely on ``pkg_resources``, and -tracking every ``setuptools`` change is unnecessary for our needs. - - -Managing Local Patches -====================== - -The ``vendoring`` tool automatically applies our local patches, but updating, -the patches sometimes no longer apply cleanly. In that case, the update will -fail. To resolve this, take the following steps: - -1. Revert any incomplete changes in the revendoring branch, to ensure you have - a clean starting point. -2. Run the revendoring of the library with a problem again: ``nox -s vendoring - -- --upgrade <library_name>``. -3. This will fail again, but you will have the original source in your working - directory. Review the existing patch against the source, and modify the patch - to reflect the new version of the source. If you ``git add`` the changes the - vendoring made, you can modify the source to reflect the patch file and then - generate a new patch with ``git diff``. -4. Now, revert everything *except* the patch file changes. Leave the modified - patch file unstaged but saved in the working tree. -5. Re-run the vendoring. This time, it should pick up the changed patch file - and apply it cleanly. The patch file changes will be committed along with the - revendoring, so the new commit should be ready to test and publish as a PR. - - -Debundling -========== - -As mentioned in the rationale, we, the pip team, would prefer it if pip was not -debundled (other than optionally ``pip/_vendor/requests/cacert.pem``) and that -pip was left intact. However, if you insist on doing so, we have a -semi-supported method (that we don't test in our CI) and requires a bit of -extra work on your end in order to solve the problems described above. - -1. Delete everything in ``pip/_vendor/`` **except** for - ``pip/_vendor/__init__.py`` and ``pip/_vendor/vendor.txt``. -2. Generate wheels for each of pip's dependencies (and any of their - dependencies) using your patched copies of these libraries. These must be - placed somewhere on the filesystem that pip can access (``pip/_vendor`` is - the default assumption). -3. Modify ``pip/_vendor/__init__.py`` so that the ``DEBUNDLED`` variable is - ``True``. -4. Upon installation, the ``INSTALLER`` file in pip's own ``dist-info`` - directory should be set to something other than ``pip``, so that pip - can detect that it wasn't installed using itself. -5. *(optional)* If you've placed the wheels in a location other than - ``pip/_vendor/``, then modify ``pip/_vendor/__init__.py`` so that the - ``WHEEL_DIR`` variable points to the location you've placed them. -6. *(optional)* Update the ``pip_self_version_check`` logic to use the - appropriate logic for determining the latest available version of pip and - prompt the user with the correct upgrade message. - -Note that partial debundling is **NOT** supported. You need to prepare wheels -for all dependencies for successful debundling. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__init__.py deleted file mode 100644 index 34ccb9907..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__init__.py +++ /dev/null @@ -1,117 +0,0 @@ -""" -pip._vendor is for vendoring dependencies of pip to prevent needing pip to -depend on something external. - -Files inside of pip._vendor should be considered immutable and should only be -updated to versions from upstream. -""" -from __future__ import absolute_import - -import glob -import os.path -import sys - -# Downstream redistributors which have debundled our dependencies should also -# patch this value to be true. This will trigger the additional patching -# to cause things like "six" to be available as pip. -DEBUNDLED = False - -# By default, look in this directory for a bunch of .whl files which we will -# add to the beginning of sys.path before attempting to import anything. This -# is done to support downstream re-distributors like Debian and Fedora who -# wish to create their own Wheels for our dependencies to aid in debundling. -WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) - - -# Define a small helper function to alias our vendored modules to the real ones -# if the vendored ones do not exist. This idea of this was taken from -# https://github.com/kennethreitz/requests/pull/2567. -def vendored(modulename): - vendored_name = "{0}.{1}".format(__name__, modulename) - - try: - __import__(modulename, globals(), locals(), level=0) - except ImportError: - # We can just silently allow import failures to pass here. If we - # got to this point it means that ``import pip._vendor.whatever`` - # failed and so did ``import whatever``. Since we're importing this - # upfront in an attempt to alias imports, not erroring here will - # just mean we get a regular import error whenever pip *actually* - # tries to import one of these modules to use it, which actually - # gives us a better error message than we would have otherwise - # gotten. - pass - else: - sys.modules[vendored_name] = sys.modules[modulename] - base, head = vendored_name.rsplit(".", 1) - setattr(sys.modules[base], head, sys.modules[modulename]) - - -# If we're operating in a debundled setup, then we want to go ahead and trigger -# the aliasing of our vendored libraries as well as looking for wheels to add -# to our sys.path. This will cause all of this code to be a no-op typically -# however downstream redistributors can enable it in a consistent way across -# all platforms. -if DEBUNDLED: - # Actually look inside of WHEEL_DIR to find .whl files and add them to the - # front of our sys.path. - sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path - - # Actually alias all of our vendored dependencies. - vendored("cachecontrol") - vendored("certifi") - vendored("dependency-groups") - vendored("distlib") - vendored("distro") - vendored("packaging") - vendored("packaging.version") - vendored("packaging.specifiers") - vendored("pkg_resources") - vendored("platformdirs") - vendored("progress") - vendored("pyproject_hooks") - vendored("requests") - vendored("requests.exceptions") - vendored("requests.packages") - vendored("requests.packages.urllib3") - vendored("requests.packages.urllib3._collections") - vendored("requests.packages.urllib3.connection") - vendored("requests.packages.urllib3.connectionpool") - vendored("requests.packages.urllib3.contrib") - vendored("requests.packages.urllib3.contrib.ntlmpool") - vendored("requests.packages.urllib3.contrib.pyopenssl") - vendored("requests.packages.urllib3.exceptions") - vendored("requests.packages.urllib3.fields") - vendored("requests.packages.urllib3.filepost") - vendored("requests.packages.urllib3.packages") - vendored("requests.packages.urllib3.packages.ordered_dict") - vendored("requests.packages.urllib3.packages.six") - vendored("requests.packages.urllib3.packages.ssl_match_hostname") - vendored("requests.packages.urllib3.packages.ssl_match_hostname." - "_implementation") - vendored("requests.packages.urllib3.poolmanager") - vendored("requests.packages.urllib3.request") - vendored("requests.packages.urllib3.response") - vendored("requests.packages.urllib3.util") - vendored("requests.packages.urllib3.util.connection") - vendored("requests.packages.urllib3.util.request") - vendored("requests.packages.urllib3.util.response") - vendored("requests.packages.urllib3.util.retry") - vendored("requests.packages.urllib3.util.ssl_") - vendored("requests.packages.urllib3.util.timeout") - vendored("requests.packages.urllib3.util.url") - vendored("resolvelib") - vendored("rich") - vendored("rich.console") - vendored("rich.highlighter") - vendored("rich.logging") - vendored("rich.markup") - vendored("rich.progress") - vendored("rich.segment") - vendored("rich.style") - vendored("rich.text") - vendored("rich.traceback") - if sys.version_info < (3, 11): - vendored("tomli") - vendored("truststore") - vendored("urllib3") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 2865e65285cac0ff08e5513155dc9242c38d151b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4681 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 B!~6gM diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt deleted file mode 100644 index d8b3b56d3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2012-2021 Eric Larson - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py deleted file mode 100644 index 3f8c36f67..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -"""CacheControl import Interface. - -Make it easy to import from cachecontrol without long namespaces. -""" - -import importlib.metadata - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.controller import CacheController -from pip._vendor.cachecontrol.wrapper import CacheControl - -__author__ = "Eric Larson" -__email__ = "eric@ionrock.org" -# pip patch: this won't work when vendored, so just patch it out as it's unused -# __version__ = importlib.metadata.version("cachecontrol") - -__all__ = [ - "__author__", - "__email__", - "__version__", - "CacheControlAdapter", - "CacheController", - "CacheControl", -] - -import logging - -logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index d0b994bcd9e3e58275b55d88030540c9793c8c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957 zcmaJ<QEL-H5S~lYTyjZUTM?mxy;5im(yPTFwp6VYA%R*$(6_70=5Bjkb9Z~}ZH(<x zeu4NCeDy`}r`Up(gF-<BAJzN;=hDRHMfYKL=DV5sX1=}KQ<DbZIsWv6SF-@$(qMFQ zL#O`{ogOqn!AodrbxmdP&eXHDoXX9oShhY<%d7mr&(-x>K^5kqIiZTpyfQ3k>d!P) z8q}6md9U1<8&O=|3$Qm;)h^=3{3Sl}u*w|ym-hlxhry^8d9_8T6pmWk)Hz_=B2-fN zCJ!PZm01rJll#<RmSH@lZDw+1G8!M6N{mwWr3g$Xt#yXAU9Jv9N146|Ju{>MizDn1 zTgGlhORkR7Ja%b>1PD)$!~Os&k3&bLCz3nn4wbP8kFGEbwzvqTaN3rTUL~IxgwPHW zOG1(&AuOQWN4G@CYbImNB}8U$d5O;kGJUJcOrjIw3J23>FBbNB%L<sHE>$!s{>2hA z;*o`oLRUy@d|3-q(-j7-lf{3g4Yk3|2K@hN*p)PjFfE->PNXJ}CY_Y}=|Z|MJdcN7 zQuLVGL7&N_KuD@Hel@7;)@bM=QBvCN`2H~X0DbHN$=mG>`$dd`*wkfmZGHWY-4(KJ zM^e0Ej*4x^7ag}nW46LWuF%8^d6`^Uvm1vfZ+LgDN~+||{d?p&3nHH?MpO{lJG^Db zT(K2=>o)aRY@-&dL&;XhC0ivVZB2+39VUg%K)4;BJ(SmRy!3yL8)$xJHBI|vWVKx1 z0B!C&Y@NZQGgv>Loa-51%Qt()-vzyt>FNDh(5BBpKZTiNn0a^W1a6$d(q~wD-#uO4 RI9}d3S>F5t59Bp$`UiWw8x8;f diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-314.pyc deleted file mode 100644 index 8da31faad5813fd1a384f31ed93fb938fa916fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3266 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-314.pyc deleted file mode 100644 index c1e8262e685abfd88dfff57090875b1e1eb52315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7576 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-314.pyc deleted file mode 100644 index 3edb44ad840a4622222959581b9afe1fbee52a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5431 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 H$wT}XF|{Dv diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-314.pyc deleted file mode 100644 index e7a4085869eb9ce92cd662fcc711d06a748f103b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18831 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 L#>X7_Z07$z`fWWL diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-314.pyc deleted file mode 100644 index 10221e9453ac42854c606f5f73120ab4b8682ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5391 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-314.pyc deleted file mode 100644 index d76348824e2d58809b8848e213a1f4749eb2371e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8569 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 Q-Ggk?trP#lKtt*HU$i>;LjV8( diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-314.pyc deleted file mode 100644 index d852ad48898067ecf3cbb8e29f9d826d6487d044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6178 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-314.pyc deleted file mode 100644 index bdcde97b4af885cef9ef979100456de986b5b2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1847 zcmaJ?-ESL35a08i&*$%tn1nVd&PSm#B{oql>XsH!OjNs}R@eqhsBTUddy^bJ`;Of; zB^D1xLIR}niYopB;En$Tp-7mMB2_|F>6@#7`pWF(oTQ~?q?`Ng&g|UG>~HtZCgKqU z^4l+encoHx`cn+XA|C*0|9b!fw2rV;Lsf}OIe`PUKvm{)RpE*^mTSSP%2f|5wNO># zS`OWk&-l^WIfQ1!x?n9_jqr%)r-EOUM?D;>#j0^0_pnw=RFgdE;czWgP4jdP;W&;? zAsm}RR?3oi21gc9KJiGz&r5F9=yq*xaMSLxe87#beZ0D?SE|dEm0JC(8>!fqMOwlN zz7rLrwM{B^ms8ui(l#7UC`^anH(T5@!9b(r(;i`*3B!8^BV$AI_+raj7#H>`=~0t$ zvjqzxHwZNi%j^?cZ%L4#c!Xr&fwoHfmjDb<1FZ+jUm?_nxf%4Kv@Kx?2e6D49K<RP zVGW0I1V?cUicjDqPT@2T6vI$>=1~AbxC$eT^;6?y3pZd0MY_S3D6yY9%zXBX*}B~& zZqzgAgd1DTRW@wfawF_8+kW~e^YM!C_PDZs_NhY04yo2bC!ra7%Q7IJ8NTC?o6j`r z*4RI89JJhbp8b!rza@tY(q7KShDG!a;oEkb^(T)u^d{r<&{d^`_h|PgK?!x!rX7Pb z(foP$yUNApM^Gti8f`+CE?juCdB>)=n+~-<0cNmf%d&gz4cN&=vukotj2l22y13L_ z-GQ%m&n=bolKy%5Eq#r29LwND=N+f{fw|FSCMS!I(YkGH5!Q4}r>K8Mx^0^lz0~~% z74J~PaR@CqJ8n$ZeZ~@9r!$aZ79O?%YJi@gDJk_>sA1&fNQU?Q==3NE?~#f!lcSJ8 z8cNTP!U9E5>hvfoPz+6-8^r}mploTB6exvWE{xIwWso}gcmmKqd<C^Mp?wL%+au=B z0Dzd%W>iqJIVLVD`Ht76HOZ0I)VHPa$=(VH&m3wBLVDt;4RsD;Gy)B|p)`Vx5SGrX zzD;YORk&%M6&z@2B|kzA4#snR<fnb$7%268kftFRoe)a&kiI0;6sUe^n{(%4vDnuH zV1V*6g>(@W*|@=u-Rtsvm?p(kN~q_BniK{R&kgy^WujfL`7%qVg)MfR?sN{OybWCk zFhHX$nwk6I^4;3ql^@Aqd6=F1JzM@YTi$)OJh=WxVtS~>huPe4;?yuRJv@;go;>?^ zJd{)iS7G;p;jgcKdF`8>duMi)`JtkDqyD|~yUN1-XmYSZPr)bhq54`~NPfbN==x?4 zPJtknxWio)PMF!<q6!SC=)F4&6fO7^EgYw4!LRV3L9e{f&0FKO(v2Q-qJmRYbjMvd zHvRM`j;;$Tem?)>d3f_M3Uoy7{0n0qU12eifoMNHA(Uv&!3JrUI(EBfk$33pFeix3 xil9caBuW2hNLqM^-gtoC-9x2^a%xXG{Xi-2DV06t%ARuhi3+F2JCI($e*qo~?S%jU diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py deleted file mode 100644 index 2c84208a5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +++ /dev/null @@ -1,70 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import logging -from argparse import ArgumentParser -from typing import TYPE_CHECKING - -from pip._vendor import requests - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import logger - -if TYPE_CHECKING: - from argparse import Namespace - - from pip._vendor.cachecontrol.controller import CacheController - - -def setup_logging() -> None: - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler() - logger.addHandler(handler) - - -def get_session() -> requests.Session: - adapter = CacheControlAdapter( - DictCache(), cache_etags=True, serializer=None, heuristic=None - ) - sess = requests.Session() - sess.mount("http://", adapter) - sess.mount("https://", adapter) - - sess.cache_controller = adapter.controller # type: ignore[attr-defined] - return sess - - -def get_args() -> Namespace: - parser = ArgumentParser() - parser.add_argument("url", help="The URL to try and cache") - return parser.parse_args() - - -def main() -> None: - args = get_args() - sess = get_session() - - # Make a request to get a response - resp = sess.get(args.url) - - # Turn on logging - setup_logging() - - # try setting the cache - cache_controller: CacheController = ( - sess.cache_controller # type: ignore[attr-defined] - ) - cache_controller.cache_response(resp.request, resp.raw) - - # Now try to get it - if cache_controller.cached_request(resp.request): - print("Cached!") - else: - print("Not cached :(") - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py deleted file mode 100644 index 01f125362..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +++ /dev/null @@ -1,167 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import functools -import weakref -import zlib -from typing import TYPE_CHECKING, Any, Collection, Mapping - -from pip._vendor.requests.adapters import HTTPAdapter - -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import PERMANENT_REDIRECT_STATUSES, CacheController -from pip._vendor.cachecontrol.filewrapper import CallbackFileWrapper - -if TYPE_CHECKING: - from pip._vendor.requests import PreparedRequest, Response - from pip._vendor.urllib3 import HTTPResponse - - from pip._vendor.cachecontrol.cache import BaseCache - from pip._vendor.cachecontrol.heuristics import BaseHeuristic - from pip._vendor.cachecontrol.serialize import Serializer - - -class CacheControlAdapter(HTTPAdapter): - invalidating_methods = {"PUT", "PATCH", "DELETE"} - - def __init__( - self, - cache: BaseCache | None = None, - cache_etags: bool = True, - controller_class: type[CacheController] | None = None, - serializer: Serializer | None = None, - heuristic: BaseHeuristic | None = None, - cacheable_methods: Collection[str] | None = None, - *args: Any, - **kw: Any, - ) -> None: - super().__init__(*args, **kw) - self.cache = DictCache() if cache is None else cache - self.heuristic = heuristic - self.cacheable_methods = cacheable_methods or ("GET",) - - controller_factory = controller_class or CacheController - self.controller = controller_factory( - self.cache, cache_etags=cache_etags, serializer=serializer - ) - - def send( - self, - request: PreparedRequest, - stream: bool = False, - timeout: None | float | tuple[float, float] | tuple[float, None] = None, - verify: bool | str = True, - cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None, - proxies: Mapping[str, str] | None = None, - cacheable_methods: Collection[str] | None = None, - ) -> Response: - """ - Send a request. Use the request information to see if it - exists in the cache and cache the response if we need to and can. - """ - cacheable = cacheable_methods or self.cacheable_methods - if request.method in cacheable: - try: - cached_response = self.controller.cached_request(request) - except zlib.error: - cached_response = None - if cached_response: - return self.build_response(request, cached_response, from_cache=True) - - # check for etags and add headers if appropriate - request.headers.update(self.controller.conditional_headers(request)) - - resp = super().send(request, stream, timeout, verify, cert, proxies) - - return resp - - def build_response( # type: ignore[override] - self, - request: PreparedRequest, - response: HTTPResponse, - from_cache: bool = False, - cacheable_methods: Collection[str] | None = None, - ) -> Response: - """ - Build a response by making a request or using the cache. - - This will end up calling send and returning a potentially - cached response - """ - cacheable = cacheable_methods or self.cacheable_methods - if not from_cache and request.method in cacheable: - # Check for any heuristics that might update headers - # before trying to cache. - if self.heuristic: - response = self.heuristic.apply(response) - - # apply any expiration heuristics - if response.status == 304: - # We must have sent an ETag request. This could mean - # that we've been expired already or that we simply - # have an etag. In either case, we want to try and - # update the cache if that is the case. - cached_response = self.controller.update_cached_response( - request, response - ) - - if cached_response is not response: - from_cache = True - - # We are done with the server response, read a - # possible response body (compliant servers will - # not return one, but we cannot be 100% sure) and - # release the connection back to the pool. - response.read(decode_content=False) - response.release_conn() - - response = cached_response - - # We always cache the 301 responses - elif int(response.status) in PERMANENT_REDIRECT_STATUSES: - self.controller.cache_response(request, response) - else: - # Wrap the response file with a wrapper that will cache the - # response when the stream has been consumed. - response._fp = CallbackFileWrapper( # type: ignore[assignment] - response._fp, # type: ignore[arg-type] - functools.partial( - self.controller.cache_response, request, weakref.ref(response) - ), - ) - if response.chunked: - super_update_chunk_length = response.__class__._update_chunk_length - - def _update_chunk_length( - weak_self: weakref.ReferenceType[HTTPResponse], - ) -> None: - self = weak_self() - if self is None: - return - - super_update_chunk_length(self) - if self.chunk_left == 0: - self._fp._close() # type: ignore[union-attr] - - response._update_chunk_length = functools.partial( # type: ignore[method-assign] - _update_chunk_length, weakref.ref(response) - ) - - resp: Response = super().build_response(request, response) - - # See if we should invalidate the cache. - if request.method in self.invalidating_methods and resp.ok: - assert request.url is not None - cache_url = self.controller.cache_url(request.url) - self.cache.delete(cache_url) - - # Give the request a from_cache attr to let people use it - resp.from_cache = from_cache # type: ignore[attr-defined] - - return resp - - def close(self) -> None: - self.cache.close() - super().close() # type: ignore[no-untyped-call] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/cache.py deleted file mode 100644 index 91598e920..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +++ /dev/null @@ -1,75 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -""" -The cache object API for implementing caches. The default is a thread -safe in-memory dictionary. -""" - -from __future__ import annotations - -from threading import Lock -from typing import IO, TYPE_CHECKING, MutableMapping - -if TYPE_CHECKING: - from datetime import datetime - - -class BaseCache: - def get(self, key: str) -> bytes | None: - raise NotImplementedError() - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - raise NotImplementedError() - - def delete(self, key: str) -> None: - raise NotImplementedError() - - def close(self) -> None: - pass - - -class DictCache(BaseCache): - def __init__(self, init_dict: MutableMapping[str, bytes] | None = None) -> None: - self.lock = Lock() - self.data = init_dict or {} - - def get(self, key: str) -> bytes | None: - return self.data.get(key, None) - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - with self.lock: - self.data.update({key: value}) - - def delete(self, key: str) -> None: - with self.lock: - if key in self.data: - self.data.pop(key) - - -class SeparateBodyBaseCache(BaseCache): - """ - In this variant, the body is not stored mixed in with the metadata, but is - passed in (as a bytes-like object) in a separate call to ``set_body()``. - - That is, the expected interaction pattern is:: - - cache.set(key, serialized_metadata) - cache.set_body(key) - - Similarly, the body should be loaded separately via ``get_body()``. - """ - - def set_body(self, key: str, body: bytes) -> None: - raise NotImplementedError() - - def get_body(self, key: str) -> IO[bytes] | None: - """ - Return the body as file-like object. - """ - raise NotImplementedError() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py deleted file mode 100644 index 24ff469ff..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -from pip._vendor.cachecontrol.caches.file_cache import FileCache, SeparateBodyFileCache -from pip._vendor.cachecontrol.caches.redis_cache import RedisCache - -__all__ = ["FileCache", "SeparateBodyFileCache", "RedisCache"] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 40be53a038e20adcb34910350492205a4fa244e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmah`Jx{|h5Vez(LIf;`xdT&LHKn3L6rm2Sgjxv!3Lr69SZ-oyXc}9#3v@&L2Yv)2 ze}yp;3oNi9bzsGA%g4qIr+a6=_wID1<s}#BczS$`D-eKJ1HQwW72~2VZowG{U<b6J zf^AD#1%s`Q-FB2y06qwu1E_L=y#~D8yCHg3wy+x~v_--m%~p>nCxR&2WYOrS?ZM0q zXcWuIr+v>Bwq^>)q@2;1%ZfbaKE9%9#DpIjt&pWkuw)9Pf37|7<l&c`mHuN1<2s`m zr!0>#NfL}7z*s|&-M6;UiKIdz5>ZjD*VoZC6Me)5yQHC#C`{Ne>JmxIaT+U~q|yRZ zl&k1)q<SpfsMc@|-)wE-V>;l8-W{s}M|*J>$ym`cCt;slP>J-cmDz@szZ*`0tYB;$ rF!uQ<o8K9*XqeE3SkzPMivhW!(}xWq{B!|4h0mb*;x_K`!W{MszgCY| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-314.pyc deleted file mode 100644 index 65e4756751a15be5ff062e3023f62cc2bcee3f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9058 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 H2IKz%AXw{P diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-314.pyc deleted file mode 100644 index f309d29b63563004b7686d4022f6535c4162d3fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3708 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 SzWmRWDP^zk{TG2s0RK0ED8~x` diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py deleted file mode 100644 index 45c632c7f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +++ /dev/null @@ -1,145 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import hashlib -import os -import tempfile -from textwrap import dedent -from typing import IO, TYPE_CHECKING -from pathlib import Path - -from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache -from pip._vendor.cachecontrol.controller import CacheController - -if TYPE_CHECKING: - from datetime import datetime - - from filelock import BaseFileLock - - -class _FileCacheMixin: - """Shared implementation for both FileCache variants.""" - - def __init__( - self, - directory: str | Path, - forever: bool = False, - filemode: int = 0o0600, - dirmode: int = 0o0700, - lock_class: type[BaseFileLock] | None = None, - ) -> None: - try: - if lock_class is None: - from filelock import FileLock - - lock_class = FileLock - except ImportError: - notice = dedent( - """ - NOTE: In order to use the FileCache you must have - filelock installed. You can install it via pip: - pip install cachecontrol[filecache] - """ - ) - raise ImportError(notice) - - self.directory = directory - self.forever = forever - self.filemode = filemode - self.dirmode = dirmode - self.lock_class = lock_class - - @staticmethod - def encode(x: str) -> str: - return hashlib.sha224(x.encode()).hexdigest() - - def _fn(self, name: str) -> str: - # NOTE: This method should not change as some may depend on it. - # See: https://github.com/ionrock/cachecontrol/issues/63 - hashed = self.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key: str) -> bytes | None: - name = self._fn(key) - try: - with open(name, "rb") as fh: - return fh.read() - - except FileNotFoundError: - return None - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - name = self._fn(key) - self._write(name, value) - - def _write(self, path: str, data: bytes) -> None: - """ - Safely write the data to the given path. - """ - # Make sure the directory exists - dirname = os.path.dirname(path) - os.makedirs(dirname, self.dirmode, exist_ok=True) - - with self.lock_class(path + ".lock"): - # Write our actual file - (fd, name) = tempfile.mkstemp(dir=dirname) - try: - os.write(fd, data) - finally: - os.close(fd) - os.chmod(name, self.filemode) - os.replace(name, path) - - def _delete(self, key: str, suffix: str) -> None: - name = self._fn(key) + suffix - if not self.forever: - try: - os.remove(name) - except FileNotFoundError: - pass - - -class FileCache(_FileCacheMixin, BaseCache): - """ - Traditional FileCache: body is stored in memory, so not suitable for large - downloads. - """ - - def delete(self, key: str) -> None: - self._delete(key, "") - - -class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache): - """ - Memory-efficient FileCache: body is stored in a separate file, reducing - peak memory usage. - """ - - def get_body(self, key: str) -> IO[bytes] | None: - name = self._fn(key) + ".body" - try: - return open(name, "rb") - except FileNotFoundError: - return None - - def set_body(self, key: str, body: bytes) -> None: - name = self._fn(key) + ".body" - self._write(name, body) - - def delete(self, key: str) -> None: - self._delete(key, "") - self._delete(key, ".body") - - -def url_to_file_path(url: str, filecache: FileCache) -> str: - """Return the file cache path based on the URL. - - This does not ensure the file exists! - """ - key = CacheController.cache_url(url) - return filecache._fn(key) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py deleted file mode 100644 index f4f68c47b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - - -from datetime import datetime, timezone -from typing import TYPE_CHECKING - -from pip._vendor.cachecontrol.cache import BaseCache - -if TYPE_CHECKING: - from redis import Redis - - -class RedisCache(BaseCache): - def __init__(self, conn: Redis[bytes]) -> None: - self.conn = conn - - def get(self, key: str) -> bytes | None: - return self.conn.get(key) - - def set( - self, key: str, value: bytes, expires: int | datetime | None = None - ) -> None: - if not expires: - self.conn.set(key, value) - elif isinstance(expires, datetime): - now_utc = datetime.now(timezone.utc) - if expires.tzinfo is None: - now_utc = now_utc.replace(tzinfo=None) - delta = expires - now_utc - self.conn.setex(key, int(delta.total_seconds()), value) - else: - self.conn.setex(key, expires, value) - - def delete(self, key: str) -> None: - self.conn.delete(key) - - def clear(self) -> None: - """Helper for clearing all the keys in a database. Use with - caution!""" - for key in self.conn.keys(): - self.conn.delete(key) - - def close(self) -> None: - """Redis uses connection pooling, no need to close the connection.""" - pass diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/controller.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/controller.py deleted file mode 100644 index 0bf380136..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +++ /dev/null @@ -1,511 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -""" -The httplib2 algorithms ported for use with requests. -""" - -from __future__ import annotations - -import calendar -import logging -import re -import time -import weakref -from email.utils import parsedate_tz -from typing import TYPE_CHECKING, Collection, Mapping - -from pip._vendor.requests.structures import CaseInsensitiveDict - -from pip._vendor.cachecontrol.cache import DictCache, SeparateBodyBaseCache -from pip._vendor.cachecontrol.serialize import Serializer - -if TYPE_CHECKING: - from typing import Literal - - from pip._vendor.requests import PreparedRequest - from pip._vendor.urllib3 import HTTPResponse - - from pip._vendor.cachecontrol.cache import BaseCache - -logger = logging.getLogger(__name__) - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - -PERMANENT_REDIRECT_STATUSES = (301, 308) - - -def parse_uri(uri: str) -> tuple[str, str, str, str, str]: - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - match = URI.match(uri) - assert match is not None - groups = match.groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -class CacheController: - """An interface to see if request should cached or not.""" - - def __init__( - self, - cache: BaseCache | None = None, - cache_etags: bool = True, - serializer: Serializer | None = None, - status_codes: Collection[int] | None = None, - ): - self.cache = DictCache() if cache is None else cache - self.cache_etags = cache_etags - self.serializer = serializer or Serializer() - self.cacheable_status_codes = status_codes or (200, 203, 300, 301, 308) - - @classmethod - def _urlnorm(cls, uri: str) -> str: - """Normalize the URL to create a safe key for the cache""" - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise Exception("Only absolute URIs are allowed. uri = %s" % uri) - - scheme = scheme.lower() - authority = authority.lower() - - if not path: - path = "/" - - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - defrag_uri = scheme + "://" + authority + request_uri - - return defrag_uri - - @classmethod - def cache_url(cls, uri: str) -> str: - return cls._urlnorm(uri) - - def parse_cache_control(self, headers: Mapping[str, str]) -> dict[str, int | None]: - known_directives = { - # https://tools.ietf.org/html/rfc7234#section-5.2 - "max-age": (int, True), - "max-stale": (int, False), - "min-fresh": (int, True), - "no-cache": (None, False), - "no-store": (None, False), - "no-transform": (None, False), - "only-if-cached": (None, False), - "must-revalidate": (None, False), - "public": (None, False), - "private": (None, False), - "proxy-revalidate": (None, False), - "s-maxage": (int, True), - } - - cc_headers = headers.get("cache-control", headers.get("Cache-Control", "")) - - retval: dict[str, int | None] = {} - - for cc_directive in cc_headers.split(","): - if not cc_directive.strip(): - continue - - parts = cc_directive.split("=", 1) - directive = parts[0].strip() - - try: - typ, required = known_directives[directive] - except KeyError: - logger.debug("Ignoring unknown cache-control directive: %s", directive) - continue - - if not typ or not required: - retval[directive] = None - if typ: - try: - retval[directive] = typ(parts[1].strip()) - except IndexError: - if required: - logger.debug( - "Missing value for cache-control " "directive: %s", - directive, - ) - except ValueError: - logger.debug( - "Invalid value for cache-control directive " "%s, must be %s", - directive, - typ.__name__, - ) - - return retval - - def _load_from_cache(self, request: PreparedRequest) -> HTTPResponse | None: - """ - Load a cached response, or return None if it's not available. - """ - # We do not support caching of partial content: so if the request contains a - # Range header then we don't want to load anything from the cache. - if "Range" in request.headers: - return None - - cache_url = request.url - assert cache_url is not None - cache_data = self.cache.get(cache_url) - if cache_data is None: - logger.debug("No cache entry available") - return None - - if isinstance(self.cache, SeparateBodyBaseCache): - body_file = self.cache.get_body(cache_url) - else: - body_file = None - - result = self.serializer.loads(request, cache_data, body_file) - if result is None: - logger.warning("Cache entry deserialization failed, entry ignored") - return result - - def cached_request(self, request: PreparedRequest) -> HTTPResponse | Literal[False]: - """ - Return a cached response if it exists in the cache, otherwise - return False. - """ - assert request.url is not None - cache_url = self.cache_url(request.url) - logger.debug('Looking up "%s" in the cache', cache_url) - cc = self.parse_cache_control(request.headers) - - # Bail out if the request insists on fresh data - if "no-cache" in cc: - logger.debug('Request header has "no-cache", cache bypassed') - return False - - if "max-age" in cc and cc["max-age"] == 0: - logger.debug('Request header has "max_age" as 0, cache bypassed') - return False - - # Check whether we can load the response from the cache: - resp = self._load_from_cache(request) - if not resp: - return False - - # If we have a cached permanent redirect, return it immediately. We - # don't need to test our response for other headers b/c it is - # intrinsically "cacheable" as it is Permanent. - # - # See: - # https://tools.ietf.org/html/rfc7231#section-6.4.2 - # - # Client can try to refresh the value by repeating the request - # with cache busting headers as usual (ie no-cache). - if int(resp.status) in PERMANENT_REDIRECT_STATUSES: - msg = ( - "Returning cached permanent redirect response " - "(ignoring date and etag information)" - ) - logger.debug(msg) - return resp - - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) - if not headers or "date" not in headers: - if "etag" not in headers: - # Without date or etag, the cached response can never be used - # and should be deleted. - logger.debug("Purging cached response: no date or etag") - self.cache.delete(cache_url) - logger.debug("Ignoring cached response: no date") - return False - - now = time.time() - time_tuple = parsedate_tz(headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - current_age = max(0, now - date) - logger.debug("Current age based on date: %i", current_age) - - # TODO: There is an assumption that the result will be a - # urllib3 response object. This may not be best since we - # could probably avoid instantiating or constructing the - # response until we know we need it. - resp_cc = self.parse_cache_control(headers) - - # determine freshness - freshness_lifetime = 0 - - # Check the max-age pragma in the cache control header - max_age = resp_cc.get("max-age") - if max_age is not None: - freshness_lifetime = max_age - logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime) - - # If there isn't a max-age, check for an expires header - elif "expires" in headers: - expires = parsedate_tz(headers["expires"]) - if expires is not None: - expire_time = calendar.timegm(expires[:6]) - date - freshness_lifetime = max(0, expire_time) - logger.debug("Freshness lifetime from expires: %i", freshness_lifetime) - - # Determine if we are setting freshness limit in the - # request. Note, this overrides what was in the response. - max_age = cc.get("max-age") - if max_age is not None: - freshness_lifetime = max_age - logger.debug( - "Freshness lifetime from request max-age: %i", freshness_lifetime - ) - - min_fresh = cc.get("min-fresh") - if min_fresh is not None: - # adjust our current age by our min fresh - current_age += min_fresh - logger.debug("Adjusted current age from min-fresh: %i", current_age) - - # Return entry if it is fresh enough - if freshness_lifetime > current_age: - logger.debug('The response is "fresh", returning cached response') - logger.debug("%i > %i", freshness_lifetime, current_age) - return resp - - # we're not fresh. If we don't have an Etag, clear it out - if "etag" not in headers: - logger.debug('The cached response is "stale" with no etag, purging') - self.cache.delete(cache_url) - - # return the original handler - return False - - def conditional_headers(self, request: PreparedRequest) -> dict[str, str]: - resp = self._load_from_cache(request) - new_headers = {} - - if resp: - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict(resp.headers) - - if "etag" in headers: - new_headers["If-None-Match"] = headers["ETag"] - - if "last-modified" in headers: - new_headers["If-Modified-Since"] = headers["Last-Modified"] - - return new_headers - - def _cache_set( - self, - cache_url: str, - request: PreparedRequest, - response: HTTPResponse, - body: bytes | None = None, - expires_time: int | None = None, - ) -> None: - """ - Store the data in the cache. - """ - if isinstance(self.cache, SeparateBodyBaseCache): - # We pass in the body separately; just put a placeholder empty - # string in the metadata. - self.cache.set( - cache_url, - self.serializer.dumps(request, response, b""), - expires=expires_time, - ) - # body is None can happen when, for example, we're only updating - # headers, as is the case in update_cached_response(). - if body is not None: - self.cache.set_body(cache_url, body) - else: - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body), - expires=expires_time, - ) - - def cache_response( - self, - request: PreparedRequest, - response_or_ref: HTTPResponse | weakref.ReferenceType[HTTPResponse], - body: bytes | None = None, - status_codes: Collection[int] | None = None, - ) -> None: - """ - Algorithm for caching requests. - - This assumes a requests Response object. - """ - if isinstance(response_or_ref, weakref.ReferenceType): - response = response_or_ref() - if response is None: - # The weakref can be None only in case the user used streamed request - # and did not consume or close it, and holds no reference to requests.Response. - # In such case, we don't want to cache the response. - return - else: - response = response_or_ref - - # From httplib2: Don't cache 206's since we aren't going to - # handle byte range requests - cacheable_status_codes = status_codes or self.cacheable_status_codes - if response.status not in cacheable_status_codes: - logger.debug( - "Status code %s not in %s", response.status, cacheable_status_codes - ) - return - - response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - response.headers - ) - - if "date" in response_headers: - time_tuple = parsedate_tz(response_headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - else: - date = 0 - - # If we've been given a body, our response has a Content-Length, that - # Content-Length is valid then we can check to see if the body we've - # been given matches the expected size, and if it doesn't we'll just - # skip trying to cache it. - if ( - body is not None - and "content-length" in response_headers - and response_headers["content-length"].isdigit() - and int(response_headers["content-length"]) != len(body) - ): - return - - cc_req = self.parse_cache_control(request.headers) - cc = self.parse_cache_control(response_headers) - - assert request.url is not None - cache_url = self.cache_url(request.url) - logger.debug('Updating cache with response from "%s"', cache_url) - - # Delete it from the cache if we happen to have it stored there - no_store = False - if "no-store" in cc: - no_store = True - logger.debug('Response header has "no-store"') - if "no-store" in cc_req: - no_store = True - logger.debug('Request header has "no-store"') - if no_store and self.cache.get(cache_url): - logger.debug('Purging existing cache entry to honor "no-store"') - self.cache.delete(cache_url) - if no_store: - return - - # https://tools.ietf.org/html/rfc7234#section-4.1: - # A Vary header field-value of "*" always fails to match. - # Storing such a response leads to a deserialization warning - # during cache lookup and is not allowed to ever be served, - # so storing it can be avoided. - if "*" in response_headers.get("vary", ""): - logger.debug('Response header has "Vary: *"') - return - - # If we've been given an etag, then keep the response - if self.cache_etags and "etag" in response_headers: - expires_time = 0 - if response_headers.get("expires"): - expires = parsedate_tz(response_headers["expires"]) - if expires is not None: - expires_time = calendar.timegm(expires[:6]) - date - - expires_time = max(expires_time, 14 * 86400) - - logger.debug(f"etag object cached for {expires_time} seconds") - logger.debug("Caching due to etag") - self._cache_set(cache_url, request, response, body, expires_time) - - # Add to the cache any permanent redirects. We do this before looking - # that the Date headers. - elif int(response.status) in PERMANENT_REDIRECT_STATUSES: - logger.debug("Caching permanent redirect") - self._cache_set(cache_url, request, response, b"") - - # Add to the cache if the response headers demand it. If there - # is no date header then we can't do anything about expiring - # the cache. - elif "date" in response_headers: - time_tuple = parsedate_tz(response_headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - # cache when there is a max-age > 0 - max_age = cc.get("max-age") - if max_age is not None and max_age > 0: - logger.debug("Caching b/c date exists and max-age > 0") - expires_time = max_age - self._cache_set( - cache_url, - request, - response, - body, - expires_time, - ) - - # If the request can expire, it means we should cache it - # in the meantime. - elif "expires" in response_headers: - if response_headers["expires"]: - expires = parsedate_tz(response_headers["expires"]) - if expires is not None: - expires_time = calendar.timegm(expires[:6]) - date - else: - expires_time = None - - logger.debug( - "Caching b/c of expires header. expires in {} seconds".format( - expires_time - ) - ) - self._cache_set( - cache_url, - request, - response, - body, - expires_time, - ) - - def update_cached_response( - self, request: PreparedRequest, response: HTTPResponse - ) -> HTTPResponse: - """On a 304 we will get a new set of headers that we want to - update our cached value with, assuming we have one. - - This should only ever be called when we've sent an ETag and - gotten a 304 as the response. - """ - assert request.url is not None - cache_url = self.cache_url(request.url) - cached_response = self._load_from_cache(request) - - if not cached_response: - # we didn't have a cached response - return response - - # Lets update our headers with the headers from the new request: - # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 - # - # The server isn't supposed to send headers that would make - # the cached body invalid. But... just in case, we'll be sure - # to strip out ones we know that might be problematic due to - # typical assumptions. - excluded_headers = ["content-length"] - - cached_response.headers.update( - { - k: v - for k, v in response.headers.items() - if k.lower() not in excluded_headers - } - ) - - # we want a 200 b/c we have content via the cache - cached_response.status = 200 - - # update our cache - self._cache_set(cache_url, request, cached_response) - - return cached_response diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py deleted file mode 100644 index 6569fb5cd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +++ /dev/null @@ -1,121 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import mmap -from tempfile import NamedTemporaryFile -from typing import TYPE_CHECKING, Any, Callable - -if TYPE_CHECKING: - from collections.abc import Buffer - from http.client import HTTPResponse - - -class CallbackFileWrapper: - """ - Small wrapper around a fp object which will tee everything read into a - buffer, and when that file is closed it will execute a callback with the - contents of that buffer. - - All attributes are proxied to the underlying file object. - - This class uses members with a double underscore (__) leading prefix so as - not to accidentally shadow an attribute. - - The data is stored in a temporary file until it is all available. As long - as the temporary files directory is disk-based (sometimes it's a - memory-backed-``tmpfs`` on Linux), data will be unloaded to disk if memory - pressure is high. For small files the disk usually won't be used at all, - it'll all be in the filesystem memory cache, so there should be no - performance impact. - """ - - def __init__( - self, fp: HTTPResponse, callback: Callable[[Buffer], None] | None - ) -> None: - self.__buf = NamedTemporaryFile("rb+", delete=True) - self.__fp = fp - self.__callback = callback - - def __getattr__(self, name: str) -> Any: - # The vagaries of garbage collection means that self.__fp is - # not always set. By using __getattribute__ and the private - # name[0] allows looking up the attribute value and raising an - # AttributeError when it doesn't exist. This stop things from - # infinitely recursing calls to getattr in the case where - # self.__fp hasn't been set. - # - # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers - fp = self.__getattribute__("_CallbackFileWrapper__fp") - return getattr(fp, name) - - def __is_fp_closed(self) -> bool: - try: - return self.__fp.fp is None - - except AttributeError: - pass - - try: - closed: bool = self.__fp.closed - return closed - - except AttributeError: - pass - - # We just don't cache it then. - # TODO: Add some logging here... - return False - - def _close(self) -> None: - result: Buffer - if self.__callback: - if self.__buf.tell() == 0: - # Empty file: - result = b"" - else: - # Return the data without actually loading it into memory, - # relying on Python's buffer API and mmap(). mmap() just gives - # a view directly into the filesystem's memory cache, so it - # doesn't result in duplicate memory use. - self.__buf.seek(0, 0) - result = memoryview( - mmap.mmap(self.__buf.fileno(), 0, access=mmap.ACCESS_READ) - ) - self.__callback(result) - - # We assign this to None here, because otherwise we can get into - # really tricky problems where the CPython interpreter dead locks - # because the callback is holding a reference to something which - # has a __del__ method. Setting this to None breaks the cycle - # and allows the garbage collector to do it's thing normally. - self.__callback = None - - # Closing the temporary file releases memory and frees disk space. - # Important when caching big files. - self.__buf.close() - - def read(self, amt: int | None = None) -> bytes: - data: bytes = self.__fp.read(amt) - if data: - # We may be dealing with b'', a sign that things are over: - # it's passed e.g. after we've already closed self.__buf. - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data - - def _safe_read(self, amt: int) -> bytes: - data: bytes = self.__fp._safe_read(amt) # type: ignore[attr-defined] - if amt == 2 and data == b"\r\n": - # urllib executes this read to toss the CRLF at the end - # of the chunk. - return data - - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py deleted file mode 100644 index b778c4f3f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +++ /dev/null @@ -1,157 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import calendar -import time -from datetime import datetime, timedelta, timezone -from email.utils import formatdate, parsedate, parsedate_tz -from typing import TYPE_CHECKING, Any, Mapping - -if TYPE_CHECKING: - from pip._vendor.urllib3 import HTTPResponse - -TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" - - -def expire_after(delta: timedelta, date: datetime | None = None) -> datetime: - date = date or datetime.now(timezone.utc) - return date + delta - - -def datetime_to_header(dt: datetime) -> str: - return formatdate(calendar.timegm(dt.timetuple())) - - -class BaseHeuristic: - def warning(self, response: HTTPResponse) -> str | None: - """ - Return a valid 1xx warning header value describing the cache - adjustments. - - The response is provided too allow warnings like 113 - http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need - to explicitly say response is over 24 hours old. - """ - return '110 - "Response is Stale"' - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - """Update the response headers with any new headers. - - NOTE: This SHOULD always include some Warning header to - signify that the response was cached by the client, not - by way of the provided headers. - """ - return {} - - def apply(self, response: HTTPResponse) -> HTTPResponse: - updated_headers = self.update_headers(response) - - if updated_headers: - response.headers.update(updated_headers) - warning_header_value = self.warning(response) - if warning_header_value is not None: - response.headers.update({"Warning": warning_header_value}) - - return response - - -class OneDayCache(BaseHeuristic): - """ - Cache the response by providing an expires 1 day in the - future. - """ - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - headers = {} - - if "expires" not in response.headers: - date = parsedate(response.headers["date"]) - expires = expire_after( - timedelta(days=1), - date=datetime(*date[:6], tzinfo=timezone.utc), # type: ignore[index,misc] - ) - headers["expires"] = datetime_to_header(expires) - headers["cache-control"] = "public" - return headers - - -class ExpiresAfter(BaseHeuristic): - """ - Cache **all** requests for a defined time period. - """ - - def __init__(self, **kw: Any) -> None: - self.delta = timedelta(**kw) - - def update_headers(self, response: HTTPResponse) -> dict[str, str]: - expires = expire_after(self.delta) - return {"expires": datetime_to_header(expires), "cache-control": "public"} - - def warning(self, response: HTTPResponse) -> str | None: - tmpl = "110 - Automatically cached for %s. Response might be stale" - return tmpl % self.delta - - -class LastModified(BaseHeuristic): - """ - If there is no Expires header already, fall back on Last-Modified - using the heuristic from - http://tools.ietf.org/html/rfc7234#section-4.2.2 - to calculate a reasonable value. - - Firefox also does something like this per - https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ - http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 - Unlike mozilla we limit this to 24-hr. - """ - - cacheable_by_default_statuses = { - 200, - 203, - 204, - 206, - 300, - 301, - 404, - 405, - 410, - 414, - 501, - } - - def update_headers(self, resp: HTTPResponse) -> dict[str, str]: - headers: Mapping[str, str] = resp.headers - - if "expires" in headers: - return {} - - if "cache-control" in headers and headers["cache-control"] != "public": - return {} - - if resp.status not in self.cacheable_by_default_statuses: - return {} - - if "date" not in headers or "last-modified" not in headers: - return {} - - time_tuple = parsedate_tz(headers["date"]) - assert time_tuple is not None - date = calendar.timegm(time_tuple[:6]) - last_modified = parsedate(headers["last-modified"]) - if last_modified is None: - return {} - - now = time.time() - current_age = max(0, now - date) - delta = date - calendar.timegm(last_modified) - freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) - if freshness_lifetime <= current_age: - return {} - - expires = date + freshness_lifetime - return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))} - - def warning(self, resp: HTTPResponse) -> str | None: - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py deleted file mode 100644 index a49487a14..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +++ /dev/null @@ -1,146 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -import io -from typing import IO, TYPE_CHECKING, Any, Mapping, cast - -from pip._vendor import msgpack -from pip._vendor.requests.structures import CaseInsensitiveDict -from pip._vendor.urllib3 import HTTPResponse - -if TYPE_CHECKING: - from pip._vendor.requests import PreparedRequest - - -class Serializer: - serde_version = "4" - - def dumps( - self, - request: PreparedRequest, - response: HTTPResponse, - body: bytes | None = None, - ) -> bytes: - response_headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - response.headers - ) - - if body is None: - # When a body isn't passed in, we'll read the response. We - # also update the response with a new file handler to be - # sure it acts as though it was never read. - body = response.read(decode_content=False) - response._fp = io.BytesIO(body) # type: ignore[assignment] - response.length_remaining = len(body) - - data = { - "response": { - "body": body, # Empty bytestring if body is stored separately - "headers": {str(k): str(v) for k, v in response.headers.items()}, - "status": response.status, - "version": response.version, - "reason": str(response.reason), - "decode_content": response.decode_content, - } - } - - # Construct our vary headers - data["vary"] = {} - if "vary" in response_headers: - varied_headers = response_headers["vary"].split(",") - for header in varied_headers: - header = str(header).strip() - header_value = request.headers.get(header, None) - if header_value is not None: - header_value = str(header_value) - data["vary"][header] = header_value - - return b",".join([f"cc={self.serde_version}".encode(), self.serialize(data)]) - - def serialize(self, data: dict[str, Any]) -> bytes: - return cast(bytes, msgpack.dumps(data, use_bin_type=True)) - - def loads( - self, - request: PreparedRequest, - data: bytes, - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - # Short circuit if we've been given an empty set of data - if not data: - return None - - # Previous versions of this library supported other serialization - # formats, but these have all been removed. - if not data.startswith(f"cc={self.serde_version},".encode()): - return None - - data = data[5:] - return self._loads_v4(request, data, body_file) - - def prepare_response( - self, - request: PreparedRequest, - cached: Mapping[str, Any], - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - """Verify our vary headers match and construct a real urllib3 - HTTPResponse object. - """ - # Special case the '*' Vary value as it means we cannot actually - # determine if the cached response is suitable for this request. - # This case is also handled in the controller code when creating - # a cache entry, but is left here for backwards compatibility. - if "*" in cached.get("vary", {}): - return None - - # Ensure that the Vary headers for the cached response match our - # request - for header, value in cached.get("vary", {}).items(): - if request.headers.get(header, None) != value: - return None - - body_raw = cached["response"].pop("body") - - headers: CaseInsensitiveDict[str] = CaseInsensitiveDict( - data=cached["response"]["headers"] - ) - if headers.get("transfer-encoding", "") == "chunked": - headers.pop("transfer-encoding") - - cached["response"]["headers"] = headers - - try: - body: IO[bytes] - if body_file is None: - body = io.BytesIO(body_raw) - else: - body = body_file - except TypeError: - # This can happen if cachecontrol serialized to v1 format (pickle) - # using Python 2. A Python 2 str(byte string) will be unpickled as - # a Python 3 str (unicode string), which will cause the above to - # fail with: - # - # TypeError: 'str' does not support the buffer interface - body = io.BytesIO(body_raw.encode("utf8")) - - # Discard any `strict` parameter serialized by older version of cachecontrol. - cached["response"].pop("strict", None) - - return HTTPResponse(body=body, preload_content=False, **cached["response"]) - - def _loads_v4( - self, - request: PreparedRequest, - data: bytes, - body_file: IO[bytes] | None = None, - ) -> HTTPResponse | None: - try: - cached = msgpack.loads(data, raw=False) - except ValueError: - return None - - return self.prepare_response(request, cached, body_file) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py deleted file mode 100644 index f618bc363..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import annotations - -from typing import TYPE_CHECKING, Collection - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache - -if TYPE_CHECKING: - from pip._vendor import requests - - from pip._vendor.cachecontrol.cache import BaseCache - from pip._vendor.cachecontrol.controller import CacheController - from pip._vendor.cachecontrol.heuristics import BaseHeuristic - from pip._vendor.cachecontrol.serialize import Serializer - - -def CacheControl( - sess: requests.Session, - cache: BaseCache | None = None, - cache_etags: bool = True, - serializer: Serializer | None = None, - heuristic: BaseHeuristic | None = None, - controller_class: type[CacheController] | None = None, - adapter_class: type[CacheControlAdapter] | None = None, - cacheable_methods: Collection[str] | None = None, -) -> requests.Session: - cache = DictCache() if cache is None else cache - adapter_class = adapter_class or CacheControlAdapter - adapter = adapter_class( - cache, - cache_etags=cache_etags, - serializer=serializer, - heuristic=heuristic, - controller_class=controller_class, - cacheable_methods=cacheable_methods, - ) - sess.mount("http://", adapter) - sess.mount("https://", adapter) - - return sess diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/LICENSE deleted file mode 100644 index 62b076cde..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -This package contains a modified version of ca-bundle.crt: - -ca-bundle.crt -- Bundle of CA Root Certificates - -This is a bundle of X.509 certificates of public Certificate Authorities -(CA). These were automatically extracted from Mozilla's root certificates -file (certdata.txt). This file can be found in the mozilla source tree: -https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt -It contains the certificates in PEM format and therefore -can be directly used with curl / libcurl / php_curl, or with -an Apache+mod_ssl webserver for SSL client authentication. -Just configure this file as the SSLCACertificateFile.# - -***** BEGIN LICENSE BLOCK ***** -This Source Code Form is subject to the terms of the Mozilla Public License, -v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain -one at http://mozilla.org/MPL/2.0/. - -***** END LICENSE BLOCK ***** -@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__init__.py deleted file mode 100644 index 090fd5848..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .core import contents, where - -__all__ = ["contents", "where"] -__version__ = "2026.01.04" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__main__.py deleted file mode 100644 index 00376349e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__main__.py +++ /dev/null @@ -1,12 +0,0 @@ -import argparse - -from pip._vendor.certifi import contents, where - -parser = argparse.ArgumentParser() -parser.add_argument("-c", "--contents", action="store_true") -args = parser.parse_args() - -if args.contents: - print(contents()) -else: - print(where()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 9c197a39403a3dfaabf358adc04f697e4bf52171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmYjMze~eF6uwJRTN~^qf=f}SB2AN8iWPBjsURXjx1*0VIqlgr7w)dsIu$oJ{|!g~ z6LFGT6kK!@`VV*o1>f+!@BRAt-gafBj7+>deX^d(AB*BItY0$UG-QT)IK)S&ixuu# z%BrH!3T@9)cIYT4ENr3L(ib+1HA|Obo++9ssSA?<6;#-!FB}86<)+_kdw$^gt&>_o zJ2C%1)<u9QO#!qEa7~3|JOg+{b90LH{ox)tm!?aigo>ck@yUdXA;|^5qOp=BPWd?L zN0QcA#*_i6j2ad7fSgX%fM+{F3tDiq+lDhb%F{?uP@|k2vp$hb(Rv=m!|0MqlC!*F z3}guxjhG6>E?5I#p$g#TQ(f90@noFR1K}EHi?`*Pfo~gQ{DwB(-PMQ5bGbSzzE;-n IT(N9sKZ8nVCIA2c diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index c1738d6436aa8d06b845098422a275837f7a7b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmZ`$OKTKC5bk-;EN-GMLJ%Q|B5~E(b#YN6SwZxWfP`UC@Gz61Gt+L`%!}?`V}gf0 z8A2`|{Rw*XpO{44*j^$E>P^TG(4Ku{PxhhetNN;{>+8NYQ7!>-_CNf>e}(^E1f!!5 z!SN3Px?lyk(h^{WmzShPnaPU^Q>K9r9COq%_OqZl44CF?PI=6XkgK?=tGW7ZWsnh* zG-q<ej{V6T(>EP;oFAdNA&5=`Z~^$%Eb!&=?M-PwPmAp@4Or!WY}NQ(6fak0ZiZRP zP|7IRHr5b9Te2N)m2CSYU7{=_C}5<6suI^>$Z(ccOWcH{okKzqujDwd1usw<Wuz7& z!tgUp3az9N!6)vMb|(>6I7Kz#dcTYCQ!t7GF{ID&Qa@Y7l&gKK<pihfJvc5_<vS1V zdQU_<^<acZV}AaIw~>)`FDKb^6f)|Can^}eAw@P$F%yO|7{`d%4bRzRYgu};(F~fw z%R9G%$0*5T$b_gQ_a5O@k79=G9ER(#ji@K&)Q58FLpk*zNFYvwpq6iPb0Nv1PK@r6 zvtqO2+38bZ{wR_peFc+0LH)=&)3avwt(gPsVpl%|dJk0gK;_NDx7Xjj`UonYz`~(X s?io{i#?*mvzN;Q7#&&DF)op!It(_~oS3j%gz6o@BckcBv5#J5|0q-cTY5)KL diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-314.pyc deleted file mode 100644 index de52231dd494a2ce402e4021f8022880711974fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2789 zcmd5;O>7fK6rQ!$_Qr9tlmudMO56k_%#YK61)*wDX<8)+D{)sLs@f$hvmPf4&aO2( zA<#;d53PiHX%8GYaOi;xQV($Jp@$xObTDeFEr&|2)N%s_6p2&c8}Hi2L<p&uK55^) zotZZ~^WOKpox}ZoaRPGx-ai)WBjitf2_)njn?Hb2BO2jkk!aFciA$ml@sJi8B3gKe zRCe(21*xC}uI*OqpZtlCQi_ma^p?*?W}-Yg6XUTFSj$!5>CqyvN>r>8*J5BR!tT|i zG4$yHp9Jrl>F50&K5>}W>-!|Y?rZyG)X!<$q>Ni-D_gx5|FR|V`24cvrdOQOYK5j5 z<*Uqg(|nnxE!*YAN~Opx$4*xqvuQZxv{}TJvQ@g0c39ftZrXHgPHpaH<Flp&C&dQ^ z;}wQya~M>OERe;}<X3QZ=o=;<OUsfbX`yjAQzrZf=X%lR24?S&jO0bj4qGX57grng zzMgtVKkriJ>ctXe6Q@qSt*<%kvR-A*C2De4H!IF+>0;5PM=jgppv3kmJ365kuJL8Z zK0c8%a>muk6UIDUslvgi!B?t!-nyu}7N<w6Me}lTiMo2#s*W31s9kc{xF57}(_s`M z=OqlIXxk1)Z-Zfa5iafks2bTKl63e9s+)tN*@SLlq6#Deh6qUxj2h8{ep0~RF3|vD z8p-)1kZJ;<l4dg@uh*D5Gxd=+Z%oa9;wgqfuUZ`TgR8S1R54JVD!QBbGE9CI0o~m1 zAQ(0BP*ykO<hq=^Ie3$QKmV(INI1j#v7&2~tqS!bsNL<ex?e1^T~^!2!tCA&F+2j3 zLEVwOu*+FSVo`W&=2mQ0#8RkTI1mJMC^GznfVy#9G-7`yOlV0fp!cDxGoa<q5M_ER ztUAsVqDeU)p#=<6muR72G-zE}?+qsDEk+kGm|cQNMQM2wy}#K*NMT1{wcEFdzB70W zd`3Dz0kI3uJ|6%;W_>_reLy~sw`rJ(11x<!6wb`gF#IM{L3zq0$Fi$MzRd6h45RAx z09=5t%rLwtz!;F@DU2>zF7ye6bi*jJwoDmiZ-TSPO&*LIdAfrnlJ|Q@p6({8(c1^= z2j6Rqp57RpULT$QCD9l?-`Klw{oKRUzFS{xjO5lwa*dG_jnv8O`G<*}-_CtAcWdrJ z;>cfWs;;D(N!_+^ye`Dp8+bg7<*SgDg>iSc*ga4+Vn{$z&^OFx`!cu?u?V2e1>vLz zg$-F5K&S;UnBq$Zz*?XS#t6|uTKJ^z4GESR?uZS6@*+jov@EE73bjqAWZ6rZut+4^ zgTp<H7E1=CjCZF<2}&@-h>3F^1Oq6p4%T-aYN&@d)ZDt7yQ??U4>r{Nx|**qT&S!0 zhPqf+76aPL0xDzR`QI4-dg+*i@3e@XM52R2qC@kFT-+81YnPbvhc6Nxe=0fuSM7%M z7R7ZL9EB9HM0UwG)D;&2oK{G5O@>#XZj0Ih7G9(-L$YKPmW0MrmMAw~BqG}j0}So~ zgyH{jJL(C}2_<568m4s+FG*5k^|8qxk2Lm9|KF&l!B#t{RuEJx_*5%MFQ*rO2ZCz* z#34JWh6x4A_(U5cEDckD=ZMoTA_({kB{qNs0XdMY@5$ax{Ji!+ovSNzKH4AQf{(B+ zW>ha`7$wJqk{EWcxy__tefJVq;K~6vAj7iDjyGVfR2{}E*2OHNuCvNa>b9$Gv&Le& zn|a%h)&W$=#qGB1DepFKUZ>dvOu?eyehTVwSdyeCp@<}JCWzGgJL!8S!>!`6Lgd&+ zcwjv|@ZH*j@V>w0V}I=2T|4*Nz)&s!Oord&)-fz-TX7P3U+NqJMs4M!h#&ZW0cZpH A00000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/cacert.pem b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/cacert.pem deleted file mode 100644 index 132db0df1..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/cacert.pem +++ /dev/null @@ -1,4468 +0,0 @@ - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 1977337328857672817 -# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 -# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe -# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 -MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc -tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd -IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j -b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC -AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw -ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m -iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF -Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ -hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P -Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE -EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV -1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t -CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR -5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw -f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 -ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK -GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV ------END CERTIFICATE----- - -# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus ECC Root CA" -# Serial: 630369271402956006249506845124680065938238527194 -# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 -# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 -# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 ------BEGIN CERTIFICATE----- -MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw -RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY -BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz -MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u -LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 -v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd -e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw -V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA -AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG -GJTO ------END CERTIFICATE----- - -# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus Root CA" -# Serial: 387574501246983434957692974888460947164905180485 -# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc -# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 -# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 ------BEGIN CERTIFICATE----- -MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL -BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x -FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx -MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s -THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc -IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU -AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ -GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 -8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH -flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt -J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim -0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN -pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ -UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW -OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB -AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet -8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd -nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j -bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM -Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv -TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS -S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr -I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 -b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB -UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P -Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven -sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X2 O=Internet Security Research Group -# Subject: CN=ISRG Root X2 O=Internet Security Research Group -# Label: "ISRG Root X2" -# Serial: 87493402998870891108772069816698636114 -# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 -# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af -# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- - -# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Label: "HiPKI Root CA - G1" -# Serial: 60966262342023497858655262305426234976 -# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 -# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 -# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc ------BEGIN CERTIFICATE----- -MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa -Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 -YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw -qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv -Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 -lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz -Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ -KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK -FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj -HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr -y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ -/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM -a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 -fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG -SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi -7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc -SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza -ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc -XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg -iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho -L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF -Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr -kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ -vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU -YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 159662223612894884239637590694 -# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc -# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 -# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 ------BEGIN CERTIFICATE----- -MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD -VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw -MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g -UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT -BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx -uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV -HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ -+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 -bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 159662320309726417404178440727 -# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 -# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a -# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo -27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w -Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw -TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl -qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH -szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 -Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk -MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p -aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN -VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb -C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe -QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy -h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 -7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J -ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef -MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ -Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT -6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ -0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm -2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb -bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 159662449406622349769042896298 -# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc -# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 -# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt -nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY -6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu -MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k -RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg -f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV -+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo -dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa -G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq -gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H -vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 -0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC -B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u -NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg -yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev -HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 -xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR -TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg -JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV -7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl -6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 159662495401136852707857743206 -# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 -# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 -# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G -jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 -4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 -VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm -ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 159662532700760215368942768210 -# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 -# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 -# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi -QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR -HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D -9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 -p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD ------END CERTIFICATE----- - -# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj -# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj -# Label: "Telia Root CA v2" -# Serial: 7288924052977061235122729490515358 -# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 -# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd -# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx -CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE -AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 -NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ -MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq -AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 -vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 -lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD -n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT -7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o -6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC -TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 -WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R -DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI -pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj -YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy -rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ -8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi -0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM -A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS -SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K -TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF -6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er -3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt -Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT -VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW -ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA -rBPuUBQemMc= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 1 2020" -# Serial: 165870826978392376648679885835942448534 -# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed -# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 -# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 -NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS -zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 -QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ -VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW -wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV -dWNbFJWcHwHP2NVypw87 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 1 2020" -# Serial: 126288379621884218666039612629459926992 -# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e -# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 -# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 -NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC -/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD -wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 -OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA -y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb -gfM0agPnIjhQW+0ZT0MW ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS ECC P384 Root G5" -# Serial: 13129116028163249804115411775095713523 -# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed -# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee -# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 ------BEGIN CERTIFICATE----- -MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp -Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 -MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ -bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS -7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp -0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS -B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 -BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ -LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 -DXZDjC5Ty3zfDBeWUA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS RSA4096 Root G5" -# Serial: 11930366277458970227240571539258396554 -# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 -# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 -# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN -MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT -HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN -NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs -IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ -ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 -2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp -wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM -pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD -nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po -sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx -Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd -Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX -KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe -XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL -tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv -TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw -GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H -PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF -O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ -REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik -AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv -/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ -p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw -MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF -qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK -ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root R1 O=Certainly -# Subject: CN=Certainly Root R1 O=Certainly -# Label: "Certainly Root R1" -# Serial: 188833316161142517227353805653483829216 -# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 -# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af -# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw -PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy -dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 -YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 -1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT -vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed -aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 -1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 -r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 -cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ -wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ -6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA -2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH -Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR -eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u -d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr -PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d -8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi -1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd -rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di -taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 -lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj -yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn -Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy -yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n -wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 -OV+KmalBWQewLK8= ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root E1 O=Certainly -# Subject: CN=Certainly Root E1 O=Certainly -# Label: "Certainly Root E1" -# Serial: 8168531406727139161245376702891150584 -# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 -# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b -# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 ------BEGIN CERTIFICATE----- -MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw -CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu -bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ -BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s -eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK -+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 -QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 -hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm -ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG -BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR ------END CERTIFICATE----- - -# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication ECC RootCA1" -# Serial: 15446673492073852651 -# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 -# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 -# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 ------BEGIN CERTIFICATE----- -MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT -AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD -VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx -NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT -HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 -IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl -dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK -ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu -9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O -be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA1" -# Serial: 113562791157148395269083148143378328608 -# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 -# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a -# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU -MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI -T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz -MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF -SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh -bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z -xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ -spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 -58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR -at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll -5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq -nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK -V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ -pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO -z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn -jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ -WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF -7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 -YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli -awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u -+2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 -X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN -SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo -P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI -+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz -znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 -eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 -YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy -r/6zcCwupvI= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA2" -# Serial: 58605626836079930195615843123109055211 -# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c -# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 -# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 ------BEGIN CERTIFICATE----- -MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw -CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ -VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy -MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ -TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS -b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B -IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ -+kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK -sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA -94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B -43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root E46" -# Serial: 88989738453351742415770396670917916916 -# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 -# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a -# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 ------BEGIN CERTIFICATE----- -MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw -CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T -ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN -MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG -A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT -ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC -WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ -6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B -Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa -qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q -4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root R46" -# Serial: 156256931880233212765902055439220583700 -# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 -# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 -# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD -Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw -HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY -MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp -YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa -ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz -SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf -iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X -ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 -IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS -VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE -SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu -+Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt -8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L -HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt -zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P -AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c -mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ -YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 -gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA -Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB -JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX -DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui -TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 -dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 -LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp -0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY -QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS RSA Root CA 2022" -# Serial: 148535279242832292258835760425842727825 -# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da -# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca -# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed ------BEGIN CERTIFICATE----- -MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO -MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD -DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX -DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw -b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP -L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY -t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins -S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 -PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO -L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 -R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w -dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS -+YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS -d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG -AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f -gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z -NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt -hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM -QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf -R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ -DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW -P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy -lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq -bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w -AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q -r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji -Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU -98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS ECC Root CA 2022" -# Serial: 26605119622390491762507526719404364228 -# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 -# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 -# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT -U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 -MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh -dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm -acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN -SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME -GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW -uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp -15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN -b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA ECC TLS 2021" -# Serial: 81873346711060652204712539181482831616 -# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 -# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd -# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 ------BEGIN CERTIFICATE----- -MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w -LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w -CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 -MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF -Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X -tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 -AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 -KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD -aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu -CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo -9H1/IISpQuQo ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA RSA TLS 2021" -# Serial: 111436099570196163832749341232207667876 -# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 -# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 -# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f ------BEGIN CERTIFICATE----- -MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM -MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx -MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 -MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD -QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z -4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv -Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ -kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs -GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln -nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh -3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD -0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy -geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 -ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB -c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI -pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS -4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs -o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ -qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw -xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM -rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 -AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR -0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY -o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 -dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE -oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G3" -# Serial: 576386314500428537169965010905813481816650257167 -# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 -# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 -# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 ------BEGIN CERTIFICATE----- -MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM -BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe -Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw -IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU -cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS -T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK -AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 -nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep -qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA -yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs -hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX -zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv -kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT -f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA -uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB -o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih -MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E -BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 -wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 -XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 -JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j -ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV -VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx -xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on -AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d -7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj -gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV -+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo -FGWsJwt0ivKH ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G4" -# Serial: 451799571007117016466790293371524403291602933463 -# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb -# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a -# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c ------BEGIN CERTIFICATE----- -MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw -WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y -MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD -VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz -dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx -s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw -LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD -pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE -AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR -UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj -/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS ECC Root 2020" -# Serial: 72082518505882327255703894282316633856 -# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd -# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec -# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 ------BEGIN CERTIFICATE----- -MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw -CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH -bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw -MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx -JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE -AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O -tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP -f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA -MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di -z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn -27iQ7t0l ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS RSA Root 2023" -# Serial: 44676229530606711399881795178081572759 -# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 -# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 -# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj -MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 -eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy -MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC -REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG -A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 -cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV -cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA -U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 -Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug -BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy -8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J -co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg -8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 -rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 -mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg -+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX -gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 -p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ -pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm -9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw -M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd -GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ -CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t -xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ -w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK -L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj -X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q -ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm -dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= ------END CERTIFICATE----- - -# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" -# Serial: 65916896770016886708751106294915943533 -# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 -# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 -# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a ------BEGIN CERTIFICATE----- -MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf -e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C -cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O -BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO -PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw -hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG -XSaQpYXFuXqUPoeovQA= ------END CERTIFICATE----- - -# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA CYBER Root CA" -# Serial: 85076849864375384482682434040119489222 -# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 -# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 -# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ -MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 -IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 -WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO -LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P -40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF -avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ -34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i -JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu -j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf -Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP -2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA -S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA -oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC -kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW -5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd -BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB -AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t -tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn -68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn -TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t -RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx -f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI -Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz -8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 -NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX -xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 -t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA12" -# Serial: 587887345431707215246142177076162061960426065942 -# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 -# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 -# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw -NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF -KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt -p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd -J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur -FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J -hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K -h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF -AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld -mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ -mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA -8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV -55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ -yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA14" -# Serial: 575790784512929437950770173562378038616896959179 -# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 -# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f -# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw -NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ -FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg -vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy -6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo -/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J -kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ -0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib -y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac -18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs -0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB -SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL -ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk -86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E -rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib -ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT -zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS -DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 -2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo -FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy -K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 -dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl -Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB -365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c -JRNItX+S ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA15" -# Serial: 126083514594751269499665114766174399806381178503 -# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 -# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d -# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a ------BEGIN CERTIFICATE----- -MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw -UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM -dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy -NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl -cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 -IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 -wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR -ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT -9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp -4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 -bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 2 2023" -# Serial: 153168538924886464690566649552453098598 -# MD5 Fingerprint: e1:09:ed:d3:60:d4:56:1b:47:1f:b7:0c:5f:1b:5f:85 -# SHA1 Fingerprint: 2d:b0:70:ee:71:94:af:69:68:17:db:79:ce:58:9f:a0:6b:96:f7:87 -# SHA256 Fingerprint: 05:52:e6:f8:3f:df:65:e8:fa:96:70:e6:66:df:28:a4:e2:13:40:b5:10:cb:e5:25:66:f9:7c:4f:b9:4b:2b:d1 ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw -OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr -i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE -gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 -k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT -Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl -2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U -cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP -/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS -uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ -0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N -DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ -XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 -GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI -FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n -riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR -VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc -LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn -4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD -hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG -koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 -ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS -Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 -knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ -hJ65bvspmZDogNOfJA== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS ECC Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS ECC Root CA" -# Serial: 310892014698942880364840003424242768478804666567 -# MD5 Fingerprint: 09:48:04:77:d2:fc:65:93:71:66:b1:11:95:4f:06:8c -# SHA1 Fingerprint: b5:ec:39:f3:a1:66:37:ae:c3:05:94:57:e2:be:11:be:b7:a1:7f:36 -# SHA256 Fingerprint: c0:07:6b:9e:f0:53:1f:b1:a6:56:d6:7c:4e:be:97:cd:5d:ba:a4:1e:f4:45:98:ac:c2:48:98:78:c9:2d:87:11 ------BEGIN CERTIFICATE----- -MIICMTCCAbegAwIBAgIUNnThTXxlE8msg1UloD5Sfi9QaMcwCgYIKoZIzj0EAwMw -WDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgRUNDIFJvb3QgQ0EwHhcNMjQw -NTE1MDU0MTU2WhcNNDQwNTE1MDU0MTU1WjBYMQswCQYDVQQGEwJDTjElMCMGA1UE -ChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1c3RB -c2lhIFRMUyBFQ0MgUm9vdCBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABLh/pVs/ -AT598IhtrimY4ZtcU5nb9wj/1WrgjstEpvDBjL1P1M7UiFPoXlfXTr4sP/MSpwDp -guMqWzJ8S5sUKZ74LYO1644xST0mYekdcouJtgq7nDM1D9rs3qlKH8kzsaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQULIVTu7FDzTLqnqOH/qKYqKaT6RAw -DgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMFRH18MtYYZI9HlaVQ01 -L18N9mdsd0AaRuf4aFtOJx24mH1/k78ITcTaRTChD15KeAIxAKORh/IRM4PDwYqR -OkwrULG9IpRdNYlzg8WbGf60oenUoWa2AaU2+dhoYSi3dOGiMQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia TLS RSA Root CA O=TrustAsia Technologies, Inc. -# Label: "TrustAsia TLS RSA Root CA" -# Serial: 160405846464868906657516898462547310235378010780 -# MD5 Fingerprint: 3b:9e:c3:86:0f:34:3c:6b:c5:46:c4:8e:1d:e7:19:12 -# SHA1 Fingerprint: a5:46:50:c5:62:ea:95:9a:1a:a7:04:6f:17:58:c7:29:53:3d:03:fa -# SHA256 Fingerprint: 06:c0:8d:7d:af:d8:76:97:1e:b1:12:4f:e6:7f:84:7e:c0:c7:a1:58:d3:ea:53:cb:e9:40:e2:ea:97:91:f4:c3 ------BEGIN CERTIFICATE----- -MIIFgDCCA2igAwIBAgIUHBjYz+VTPyI1RlNUJDxsR9FcSpwwDQYJKoZIhvcNAQEM -BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN -MjQwNTE1MDU0MTU3WhcNNDQwNTE1MDU0MTU2WjBYMQswCQYDVQQGEwJDTjElMCMG -A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjEiMCAGA1UEAxMZVHJ1 -c3RBc2lhIFRMUyBSU0EgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -AgoCggIBAMMWuBtqpERz5dZO9LnPWwvB0ZqB9WOwj0PBuwhaGnrhB3YmH49pVr7+ -NmDQDIPNlOrnxS1cLwUWAp4KqC/lYCZUlviYQB2srp10Zy9U+5RjmOMmSoPGlbYJ -Q1DNDX3eRA5gEk9bNb2/mThtfWza4mhzH/kxpRkQcwUqwzIZheo0qt1CHjCNP561 -HmHVb70AcnKtEj+qpklz8oYVlQwQX1Fkzv93uMltrOXVmPGZLmzjyUT5tUMnCE32 -ft5EebuyjBza00tsLtbDeLdM1aTk2tyKjg7/D8OmYCYozza/+lcK7Fs/6TAWe8Tb -xNRkoDD75f0dcZLdKY9BWN4ArTr9PXwaqLEX8E40eFgl1oUh63kd0Nyrz2I8sMeX -i9bQn9P+PN7F4/w6g3CEIR0JwqH8uyghZVNgepBtljhb//HXeltt08lwSUq6HTrQ -UNoyIBnkiz/r1RYmNzz7dZ6wB3C4FGB33PYPXFIKvF1tjVEK2sUYyJtt3LCDs3+j -TnhMmCWr8n4uIF6CFabW2I+s5c0yhsj55NqJ4js+k8UTav/H9xj8Z7XvGCxUq0DT -bE3txci3OE9kxJRMT6DNrqXGJyV1J23G2pyOsAWZ1SgRxSHUuPzHlqtKZFlhaxP8 -S8ySpg+kUb8OWJDZgoM5pl+z+m6Ss80zDoWo8SnTq1mt1tve1CuBAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLgHkXlcBvRG/XtZylomkadFK/hT -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwFAAOCAgEAIZtqBSBdGBanEqT3 -Rz/NyjuujsCCztxIJXgXbODgcMTWltnZ9r96nBO7U5WS/8+S4PPFJzVXqDuiGev4 -iqME3mmL5Dw8veWv0BIb5Ylrc5tvJQJLkIKvQMKtuppgJFqBTQUYo+IzeXoLH5Pt -7DlK9RME7I10nYEKqG/odv6LTytpEoYKNDbdgptvT+Bz3Ul/KD7JO6NXBNiT2Twp -2xIQaOHEibgGIOcberyxk2GaGUARtWqFVwHxtlotJnMnlvm5P1vQiJ3koP26TpUJ -g3933FEFlJ0gcXax7PqJtZwuhfG5WyRasQmr2soaB82G39tp27RIGAAtvKLEiUUj -pQ7hRGU+isFqMB3iYPg6qocJQrmBktwliJiJ8Xw18WLK7nn4GS/+X/jbh87qqA8M -pugLoDzga5SYnH+tBuYc6kIQX+ImFTw3OffXvO645e8D7r0i+yiGNFjEWn9hongP -XvPKnbwbPKfILfanIhHKA9jnZwqKDss1jjQ52MjqjZ9k4DewbNfFj8GQYSbbJIwe -SsCI3zWQzj8C9GRh3sfIB5XeMhg6j6JCQCTl1jNdfK7vsU1P1FeQNWrcrgSXSYk0 -ly4wBOeY99sLAZDBHwo/+ML+TvrbmnNzFrwFuHnYWa8G5z9nODmxfKuU4CkUpijy -323imttUQ/hHWKNddBWcwauwxzQ= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 2 2023 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 2 2023" -# Serial: 139766439402180512324132425437959641711 -# MD5 Fingerprint: 96:b4:78:09:f0:09:cb:77:eb:bb:1b:4d:6f:36:bc:b6 -# SHA1 Fingerprint: a5:5b:d8:47:6c:8f:19:f7:4c:f4:6d:6b:b6:c2:79:82:22:df:54:8b -# SHA256 Fingerprint: 8e:82:21:b2:e7:d4:00:78:36:a1:67:2f:0d:cc:29:9c:33:bc:07:d3:16:f1:32:fa:1a:20:6d:58:71:50:f1:ce ------BEGIN CERTIFICATE----- -MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI -MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE -LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw -OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi -MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK -F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE -7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe -EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 -lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb -RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV -jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc -jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx -TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ -ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk -hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF -NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH -kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG -OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y -XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 -QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 -pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q -3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU -t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX -cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 -ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT -2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs -7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP -gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst -Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh -XBxvWHZks/wCuPWdCg== ------END CERTIFICATE----- - -# Issuer: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Subject: CN=SwissSign RSA TLS Root CA 2022 - 1 O=SwissSign AG -# Label: "SwissSign RSA TLS Root CA 2022 - 1" -# Serial: 388078645722908516278762308316089881486363258315 -# MD5 Fingerprint: 16:2e:e4:19:76:81:85:ba:8e:91:58:f1:15:ef:72:39 -# SHA1 Fingerprint: 81:34:0a:be:4c:cd:ce:cc:e7:7d:cc:8a:d4:57:e2:45:a0:77:5d:ce -# SHA256 Fingerprint: 19:31:44:f4:31:e0:fd:db:74:07:17:d4:de:92:6a:57:11:33:88:4b:43:60:d3:0e:27:29:13:cb:e6:60:ce:41 ------BEGIN CERTIFICATE----- -MIIFkzCCA3ugAwIBAgIUQ/oMX04bgBhE79G0TzUfRPSA7cswDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzErMCkGA1UE -AxMiU3dpc3NTaWduIFJTQSBUTFMgUm9vdCBDQSAyMDIyIC0gMTAeFw0yMjA2MDgx -MTA4MjJaFw00NzA2MDgxMTA4MjJaMFExCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxT -d2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3aXNzU2lnbiBSU0EgVExTIFJvb3QgQ0Eg -MjAyMiAtIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDLKmjiC8NX -vDVjvHClO/OMPE5Xlm7DTjak9gLKHqquuN6orx122ro10JFwB9+zBvKK8i5VUXu7 -LCTLf5ImgKO0lPaCoaTo+nUdWfMHamFk4saMla+ju45vVs9xzF6BYQ1t8qsCLqSX -5XH8irCRIFucdFJtrhUnWXjyCcplDn/L9Ovn3KlMd/YrFgSVrpxxpT8q2kFC5zyE -EPThPYxr4iuRR1VPuFa+Rd4iUU1OKNlfGUEGjw5NBuBwQCMBauTLE5tzrE0USJIt -/m2n+IdreXXhvhCxqohAWVTXz8TQm0SzOGlkjIHRI36qOTw7D59Ke4LKa2/KIj4x -0LDQKhySio/YGZxH5D4MucLNvkEM+KRHBdvBFzA4OmnczcNpI/2aDwLOEGrOyvi5 -KaM2iYauC8BPY7kGWUleDsFpswrzd34unYyzJ5jSmY0lpx+Gs6ZUcDj8fV3oT4MM -0ZPlEuRU2j7yrTrePjxF8CgPBrnh25d7mUWe3f6VWQQvdT/TromZhqwUtKiE+shd -OxtYk8EXlFXIC+OCeYSf8wCENO7cMdWP8vpPlkwGqnj73mSiI80fPsWMvDdUDrta -clXvyFu1cvh43zcgTFeRc5JzrBh3Q4IgaezprClG5QtO+DdziZaKHG29777YtvTK -wP1H8K4LWCDFyB02rpeNUIMmJCn3nTsPBQIDAQABo2MwYTAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBRvjmKLk0Ow4UD2p8P98Q+4 -DxU4pTAdBgNVHQ4EFgQUb45ii5NDsOFA9qfD/fEPuA8VOKUwDQYJKoZIhvcNAQEL -BQADggIBAKwsKUF9+lz1GpUYvyypiqkkVHX1uECry6gkUSsYP2OprphWKwVDIqO3 -10aewCoSPY6WlkDfDDOLazeROpW7OSltwAJsipQLBwJNGD77+3v1dj2b9l4wBlgz -Hqp41eZUBDqyggmNzhYzWUUo8aWjlw5DI/0LIICQ/+Mmz7hkkeUFjxOgdg3XNwwQ -iJb0Pr6VvfHDffCjw3lHC1ySFWPtUnWK50Zpy1FVCypM9fJkT6lc/2cyjlUtMoIc -gC9qkfjLvH4YoiaoLqNTKIftV+Vlek4ASltOU8liNr3CjlvrzG4ngRhZi0Rjn9UM -ZfQpZX+RLOV/fuiJz48gy20HQhFRJjKKLjpHE7iNvUcNCfAWpO2Whi4Z2L6MOuhF -LhG6rlrnub+xzI/goP+4s9GFe3lmozm1O2bYQL7Pt2eLSMkZJVX8vY3PXtpOpvJp -zv1/THfQwUY1mFwjmwJFQ5Ra3bxHrSL+ul4vkSkphnsh3m5kt8sNjzdbowhq6/Td -Ao9QAwKxuDdollDruF/UKIqlIgyKhPBZLtU30WHlQnNYKoH3dtvi4k0NX/a3vgW0 -rk4N3hY9A4GzJl5LuEsAz/+MF7psYC0nhzck5npgL7XTgwSqT0N1osGDsieYK7EO -gLrAhV5Cud+xYJHT6xh+cHiudoO+cVrQkOPKwRYlZ0rwtnu64ZzZ ------END CERTIFICATE----- - -# Issuer: CN=OISTE Server Root ECC G1 O=OISTE Foundation -# Subject: CN=OISTE Server Root ECC G1 O=OISTE Foundation -# Label: "OISTE Server Root ECC G1" -# Serial: 47819833811561661340092227008453318557 -# MD5 Fingerprint: 42:a7:d2:35:ae:02:92:db:19:76:08:de:2f:05:b4:d4 -# SHA1 Fingerprint: 3b:f6:8b:09:ae:2a:92:7b:ba:e3:8d:3f:11:95:d9:e6:44:0c:45:e2 -# SHA256 Fingerprint: ee:c9:97:c0:c3:0f:21:6f:7e:3b:8b:30:7d:2b:ae:42:41:2d:75:3f:c8:21:9d:af:d1:52:0b:25:72:85:0f:49 ------BEGIN CERTIFICATE----- -MIICNTCCAbqgAwIBAgIQI/nD1jWvjyhLH/BU6n6XnTAKBggqhkjOPQQDAzBLMQsw -CQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UEAwwY -T0lTVEUgU2VydmVyIFJvb3QgRUNDIEcxMB4XDTIzMDUzMTE0NDIyOFoXDTQ4MDUy -NDE0NDIyN1owSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5kYXRp -b24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IEVDQyBHMTB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABBcv+hK8rBjzCvRE1nZCnrPoH7d5qVi2+GXROiFPqOujvqQy -cvO2Ackr/XeFblPdreqqLiWStukhEaivtUwL85Zgmjvn6hp4LrQ95SjeHIC6XG4N -2xml4z+cKrhAS93mT6NjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQ3 -TYhlz/w9itWj8UnATgwQb0K0nDAdBgNVHQ4EFgQUN02IZc/8PYrVo/FJwE4MEG9C -tJwwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCpKjAd0MKfkFFR -QD6VVCHNFmb3U2wIFjnQEnx/Yxvf4zgAOdktUyBFCxxgZzFDJe0CMQCSia7pXGKD -YmH5LVerVrkR3SW+ak5KGoJr3M/TvEqzPNcum9v4KGm8ay3sMaE641c= ------END CERTIFICATE----- - -# Issuer: CN=OISTE Server Root RSA G1 O=OISTE Foundation -# Subject: CN=OISTE Server Root RSA G1 O=OISTE Foundation -# Label: " OISTE Server Root RSA G1" -# Serial: 113845518112613905024960613408179309848 -# MD5 Fingerprint: 23:a7:9e:d4:70:b8:b9:14:57:41:8a:7e:44:59:e2:68 -# SHA1 Fingerprint: f7:00:34:25:94:88:68:31:e4:34:87:3f:70:fe:86:b3:86:9f:f0:6e -# SHA256 Fingerprint: 9a:e3:62:32:a5:18:9f:fd:db:35:3d:fd:26:52:0c:01:53:95:d2:27:77:da:c5:9d:b5:7b:98:c0:89:a6:51:e6 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIQVaXZZ5Qoxu0M+ifdWwFNGDANBgkqhkiG9w0BAQwFADBL -MQswCQYDVQQGEwJDSDEZMBcGA1UECgwQT0lTVEUgRm91bmRhdGlvbjEhMB8GA1UE -AwwYT0lTVEUgU2VydmVyIFJvb3QgUlNBIEcxMB4XDTIzMDUzMTE0MzcxNloXDTQ4 -MDUyNDE0MzcxNVowSzELMAkGA1UEBhMCQ0gxGTAXBgNVBAoMEE9JU1RFIEZvdW5k -YXRpb24xITAfBgNVBAMMGE9JU1RFIFNlcnZlciBSb290IFJTQSBHMTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKqu9KuCz/vlNwvn1ZatkOhLKdxVYOPM -vLO8LZK55KN68YG0nnJyQ98/qwsmtO57Gmn7KNByXEptaZnwYx4M0rH/1ow00O7b -rEi56rAUjtgHqSSY3ekJvqgiG1k50SeH3BzN+Puz6+mTeO0Pzjd8JnduodgsIUzk -ik/HEzxux9UTl7Ko2yRpg1bTacuCErudG/L4NPKYKyqOBGf244ehHa1uzjZ0Dl4z -O8vbUZeUapU8zhhabkvG/AePLhq5SvdkNCncpo1Q4Y2LS+VIG24ugBA/5J8bZT8R -tOpXaZ+0AOuFJJkk9SGdl6r7NH8CaxWQrbueWhl/pIzY+m0o/DjH40ytas7ZTpOS -jswMZ78LS5bOZmdTaMsXEY5Z96ycG7mOaES3GK/m5Q9l3JUJsJMStR8+lKXHiHUh -sd4JJCpM4rzsTGdHwimIuQq6+cF0zowYJmXa92/GjHtoXAvuY8BeS/FOzJ8vD+Ho -mnqT8eDI278n5mUpezbgMxVz8p1rhAhoKzYHKyfMeNhqhw5HdPSqoBNdZH702xSu -+zrkL8Fl47l6QGzwBrd7KJvX4V84c5Ss2XCTLdyEr0YconosP4EmQufU2MVshGYR -i3drVByjtdgQ8K4p92cIiBdcuJd5z+orKu5YM+Vt6SmqZQENghPsJQtdLEByFSnT -kCz3GkPVavBpAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU -8snBDw1jALvsRQ5KH7WxszbNDo0wHQYDVR0OBBYEFPLJwQ8NYwC77EUOSh+1sbM2 -zQ6NMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQwFAAOCAgEANGd5sjrG5T33 -I3K5Ce+SrScfoE4KsvXaFwyihdJ+klH9FWXXXGtkFu6KRcoMQzZENdl//nk6HOjG -5D1rd9QhEOP28yBOqb6J8xycqd+8MDoX0TJD0KqKchxRKEzdNsjkLWd9kYccnbz8 -qyiWXmFcuCIzGEgWUOrKL+mlSdx/PKQZvDatkuK59EvV6wit53j+F8Bdh3foZ3dP -AGav9LEDOr4SfEE15fSmG0eLy3n31r8Xbk5l8PjaV8GUgeV6Vg27Rn9vkf195hfk -gSe7BYhW3SCl95gtkRlpMV+bMPKZrXJAlszYd2abtNUOshD+FKrDgHGdPY3ofRRs -YWSGRqbXVMW215AWRqWFyp464+YTFrYVI8ypKVL9AMb2kI5Wj4kI3Zaq5tNqqYY1 -9tVFeEJKRvwDyF7YZvZFZSS0vod7VSCd9521Kvy5YhnLbDuv0204bKt7ph6N/Ome -/msVuduCmsuY33OhkKCgxeDoAaijFJzIwZqsFVAzje18KotzlUBDJvyBpCpfOZC3 -J8tRd/iWkx7P8nd9H0aTolkelUTFLXVksNb54Dxp6gS1HAviRkRNQzuXSXERvSS2 -wq1yVAb+axj5d9spLFKebXd7Yv0PTY6YMjAwcRLWJTXjn/hvnLXrahut6hDTlhZy -BiElxky8j3C7DOReIoMt0r7+hVu05L0= ------END CERTIFICATE----- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/core.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/core.py deleted file mode 100644 index 2f2f7e088..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/core.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem or its contents. -""" -import sys -import atexit - -def exit_cacert_ctx() -> None: - _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] - - -if sys.version_info >= (3, 11): - - from importlib.resources import as_file, files - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the file - # in cases where we're inside of a zipimport situation until someone - # actually calls where(), but we don't want to re-extract the file - # on every call of where(), so we'll do it once then store it in a - # global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you to - # manage the cleanup of this file, so it doesn't actually return a - # path, it returns a context manager that will give you the path - # when you enter it and will do any cleanup when you leave it. In - # the common case of not needing a temporary file, it will just - # return the file system location and the __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem")) - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii") - -else: - - from importlib.resources import path as get_path, read_text - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the - # file in cases where we're inside of a zipimport situation until - # someone actually calls where(), but we don't want to re-extract - # the file on every call of where(), so we'll do it once then store - # it in a global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you - # to manage the cleanup of this file, so it doesn't actually - # return a path, it returns a context manager that will give - # you the path when you enter it and will do any cleanup when - # you leave it. In the common case of not needing a temporary - # file, it will just return the file system location and the - # __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem") - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/certifi/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt deleted file mode 100644 index b9723b85e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2024-present Stephen Rosen <sirosen0@gmail.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py deleted file mode 100644 index 9fec20299..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from ._implementation import ( - CyclicDependencyError, - DependencyGroupInclude, - DependencyGroupResolver, - resolve, -) - -__all__ = ( - "CyclicDependencyError", - "DependencyGroupInclude", - "DependencyGroupResolver", - "resolve", -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py deleted file mode 100644 index 48ebb0d41..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +++ /dev/null @@ -1,65 +0,0 @@ -import argparse -import sys - -from ._implementation import resolve -from ._toml_compat import tomllib - - -def main() -> None: - if tomllib is None: - print( - "Usage error: dependency-groups CLI requires tomli or Python 3.11+", - file=sys.stderr, - ) - raise SystemExit(2) - - parser = argparse.ArgumentParser( - description=( - "A dependency-groups CLI. Prints out a resolved group, newline-delimited." - ) - ) - parser.add_argument( - "GROUP_NAME", nargs="*", help="The dependency group(s) to resolve." - ) - parser.add_argument( - "-f", - "--pyproject-file", - default="pyproject.toml", - help="The pyproject.toml file. Defaults to trying in the current directory.", - ) - parser.add_argument( - "-o", - "--output", - help="An output file. Defaults to stdout.", - ) - parser.add_argument( - "-l", - "--list", - action="store_true", - help="List the available dependency groups", - ) - args = parser.parse_args() - - with open(args.pyproject_file, "rb") as fp: - pyproject = tomllib.load(fp) - - dependency_groups_raw = pyproject.get("dependency-groups", {}) - - if args.list: - print(*dependency_groups_raw.keys()) - return - if not args.GROUP_NAME: - print("A GROUP_NAME is required", file=sys.stderr) - raise SystemExit(3) - - content = "\n".join(resolve(dependency_groups_raw, *args.GROUP_NAME)) - - if args.output is None or args.output == "-": - print(content) - else: - with open(args.output, "w", encoding="utf-8") as fp: - print(content, file=fp) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 6e82de5f03e57de583999b3c1b55c0b14c248d0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmZ9JO-lnY5QaDVVa1PnvK|FJ6{)pY#EN*S;ub_?(OWQVcZV9AZbFi+?oIp){tA!& z6_2@k(OaPh!IN410_X7LogvK3n`~4U=Nuc)Pp|aDo-bwc6YjT|u32&CT%ri|oDgXg zy4npr?S;PfSDgsyAad88y7z|c#ky~nyG6oiatH#l6tbi^l9EeP`zstvo{L_Vusj8` z@~<9&;%p4kROFXBt<RVxLPvtZ2r?aO$}{QNS<){Nl$fzF6+&Xh2zhj-Hg(KHcMo4E zkP62s$X2Jbg>SeVVj=l8BwFEw@jUIv3K}${+CpjD0A!<u&kB9Tv+Y)!w8`!64mk%q zKh{9>NZ=FN$BJrbh&UO>15j8{(IjK*m&<1QYn%*9qpC?r*`JV2QJC5N5l?dl2Xevg dSU#DmSxh{H(7PKTcj{P7s=>T_Uy<ead;<J+fPnx2 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index 01dd3c8255ee3a296c50a3c4dcf7c4f84dde09a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2986 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-314.pyc deleted file mode 100644 index 1a6d93a09ea3bf4509e2672b83c8b71f22660129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11089 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 C*1@y@ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-314.pyc deleted file mode 100644 index 997eeecc1b9b4e3fa4f13911d7a96c4f592278cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3130 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-314.pyc deleted file mode 100644 index 7d52f0e6d23060c126e9032b3926068067ba9830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3854 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%0Aj{j3X1t$J|zi*Va z{h`x!t_}Us`Sxfd`+#+g);S(D?mO3Nd(a*{=eIrd+kk)ARy%ftd)N~k3vho5*np?* zOMOL_gKpC)%d;8yC8B>7v{WH9(-BD0sBlVaWCi|WFg=OZzngWC;BSORQaP@sw3uNX zZR-qJ-bW}ts{pnN*n)Ekr&4Mnlf;8$3Px#+(+8mei5TV+)b<&wd4g)6Am?9E?<Xkm mxt;#c><CZ`uTER_@eagA-o2dN<eLA&3*Q?B>+pVS{eJ=1MO0k? diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-314.pyc deleted file mode 100644 index ff65f9d4bbd40f9e90b4b21ab17c537ecbf31e73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmXw0F>4e-6n?X_dwb?gibPy6ISp8Z<G5T7gBTS-MDZX7IkX!c_I8IjW_M?pnNzQm zl-k({wt`~mU$F{nVPT`)LQ;fOzV(t<y!qby-uvborn@jd2N*xT|B-D1@VhR~A~*$y z48dDihUYLMLvS#nE*O!kunNye1JY%H6}U3vy`lGzI;`5TeF1qN`EbUMh{G=SS0&t{ zZII;b?D&7{t9Cl144ld{i6E>&CdZwI@sTTA!(1!l?i-^_+0s(4^H-usl`*uYmmaBf zl8GJV9;iu?&c;H{<1FL+8ywd9<;QzB*;6ZwWpOIZU~6lGy;f$AX`^0>#95YPYLbp) zD|)h!4wH2#AWUz-9#7p1Ra_fv@=gBc#&!Ng<T{I;;4ar}TaKBPPV{t~?8UpnGBnsf zHP}yuMyH}krhM0^iMD-SKaM9V*RfmI)3SLx|8M_}IgdW^AHd$lR8c}m<uyq3(_gF> zpcU<h$JIPEmyW<EQRUGf`qkVxK4@J&0un?Aix=OAxD-SuRfq#8b_G@T{W*9ScIk)4 UCGXR@wcs=9(l2B!`097*KL<jLMF0Q* diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py deleted file mode 100644 index 64e314a63..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +++ /dev/null @@ -1,209 +0,0 @@ -from __future__ import annotations - -import dataclasses -import re -from collections.abc import Mapping - -from pip._vendor.packaging.requirements import Requirement - - -def _normalize_name(name: str) -> str: - return re.sub(r"[-_.]+", "-", name).lower() - - -def _normalize_group_names( - dependency_groups: Mapping[str, str | Mapping[str, str]], -) -> Mapping[str, str | Mapping[str, str]]: - original_names: dict[str, list[str]] = {} - normalized_groups = {} - - for group_name, value in dependency_groups.items(): - normed_group_name = _normalize_name(group_name) - original_names.setdefault(normed_group_name, []).append(group_name) - normalized_groups[normed_group_name] = value - - errors = [] - for normed_name, names in original_names.items(): - if len(names) > 1: - errors.append(f"{normed_name} ({', '.join(names)})") - if errors: - raise ValueError(f"Duplicate dependency group names: {', '.join(errors)}") - - return normalized_groups - - -@dataclasses.dataclass -class DependencyGroupInclude: - include_group: str - - -class CyclicDependencyError(ValueError): - """ - An error representing the detection of a cycle. - """ - - def __init__(self, requested_group: str, group: str, include_group: str) -> None: - self.requested_group = requested_group - self.group = group - self.include_group = include_group - - if include_group == group: - reason = f"{group} includes itself" - else: - reason = f"{include_group} -> {group}, {group} -> {include_group}" - super().__init__( - "Cyclic dependency group include while resolving " - f"{requested_group}: {reason}" - ) - - -class DependencyGroupResolver: - """ - A resolver for Dependency Group data. - - This class handles caching, name normalization, cycle detection, and other - parsing requirements. There are only two public methods for exploring the data: - ``lookup()`` and ``resolve()``. - - :param dependency_groups: A mapping, as provided via pyproject - ``[dependency-groups]``. - """ - - def __init__( - self, - dependency_groups: Mapping[str, str | Mapping[str, str]], - ) -> None: - if not isinstance(dependency_groups, Mapping): - raise TypeError("Dependency Groups table is not a mapping") - self.dependency_groups = _normalize_group_names(dependency_groups) - # a map of group names to parsed data - self._parsed_groups: dict[ - str, tuple[Requirement | DependencyGroupInclude, ...] - ] = {} - # a map of group names to their ancestors, used for cycle detection - self._include_graph_ancestors: dict[str, tuple[str, ...]] = {} - # a cache of completed resolutions to Requirement lists - self._resolve_cache: dict[str, tuple[Requirement, ...]] = {} - - def lookup(self, group: str) -> tuple[Requirement | DependencyGroupInclude, ...]: - """ - Lookup a group name, returning the parsed dependency data for that group. - This will not resolve includes. - - :param group: the name of the group to lookup - - :raises ValueError: if the data does not appear to be valid dependency group - data - :raises TypeError: if the data is not a string - :raises LookupError: if group name is absent - :raises packaging.requirements.InvalidRequirement: if a specifier is not valid - """ - if not isinstance(group, str): - raise TypeError("Dependency group name is not a str") - group = _normalize_name(group) - return self._parse_group(group) - - def resolve(self, group: str) -> tuple[Requirement, ...]: - """ - Resolve a dependency group to a list of requirements. - - :param group: the name of the group to resolve - - :raises TypeError: if the inputs appear to be the wrong types - :raises ValueError: if the data does not appear to be valid dependency group - data - :raises LookupError: if group name is absent - :raises packaging.requirements.InvalidRequirement: if a specifier is not valid - """ - if not isinstance(group, str): - raise TypeError("Dependency group name is not a str") - group = _normalize_name(group) - return self._resolve(group, group) - - def _parse_group( - self, group: str - ) -> tuple[Requirement | DependencyGroupInclude, ...]: - # short circuit -- never do the work twice - if group in self._parsed_groups: - return self._parsed_groups[group] - - if group not in self.dependency_groups: - raise LookupError(f"Dependency group '{group}' not found") - - raw_group = self.dependency_groups[group] - if not isinstance(raw_group, list): - raise TypeError(f"Dependency group '{group}' is not a list") - - elements: list[Requirement | DependencyGroupInclude] = [] - for item in raw_group: - if isinstance(item, str): - # packaging.requirements.Requirement parsing ensures that this is a - # valid PEP 508 Dependency Specifier - # raises InvalidRequirement on failure - elements.append(Requirement(item)) - elif isinstance(item, dict): - if tuple(item.keys()) != ("include-group",): - raise ValueError(f"Invalid dependency group item: {item}") - - include_group = next(iter(item.values())) - elements.append(DependencyGroupInclude(include_group=include_group)) - else: - raise ValueError(f"Invalid dependency group item: {item}") - - self._parsed_groups[group] = tuple(elements) - return self._parsed_groups[group] - - def _resolve(self, group: str, requested_group: str) -> tuple[Requirement, ...]: - """ - This is a helper for cached resolution to strings. - - :param group: The name of the group to resolve. - :param requested_group: The group which was used in the original, user-facing - request. - """ - if group in self._resolve_cache: - return self._resolve_cache[group] - - parsed = self._parse_group(group) - - resolved_group = [] - for item in parsed: - if isinstance(item, Requirement): - resolved_group.append(item) - elif isinstance(item, DependencyGroupInclude): - include_group = _normalize_name(item.include_group) - if include_group in self._include_graph_ancestors.get(group, ()): - raise CyclicDependencyError( - requested_group, group, item.include_group - ) - self._include_graph_ancestors[include_group] = ( - *self._include_graph_ancestors.get(group, ()), - group, - ) - resolved_group.extend(self._resolve(include_group, requested_group)) - else: # unreachable - raise NotImplementedError( - f"Invalid dependency group item after parse: {item}" - ) - - self._resolve_cache[group] = tuple(resolved_group) - return self._resolve_cache[group] - - -def resolve( - dependency_groups: Mapping[str, str | Mapping[str, str]], /, *groups: str -) -> tuple[str, ...]: - """ - Resolve a dependency group to a tuple of requirements, as strings. - - :param dependency_groups: the parsed contents of the ``[dependency-groups]`` table - from ``pyproject.toml`` - :param groups: the name of the group(s) to resolve - - :raises TypeError: if the inputs appear to be the wrong types - :raises ValueError: if the data does not appear to be valid dependency group data - :raises LookupError: if group name is absent - :raises packaging.requirements.InvalidRequirement: if a specifier is not valid - """ - resolver = DependencyGroupResolver(dependency_groups) - return tuple(str(r) for group in groups for r in resolver.resolve(group)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py deleted file mode 100644 index 09454bdc2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +++ /dev/null @@ -1,59 +0,0 @@ -from __future__ import annotations - -import argparse -import sys - -from ._implementation import DependencyGroupResolver -from ._toml_compat import tomllib - - -def main(*, argv: list[str] | None = None) -> None: - if tomllib is None: - print( - "Usage error: dependency-groups CLI requires tomli or Python 3.11+", - file=sys.stderr, - ) - raise SystemExit(2) - - parser = argparse.ArgumentParser( - description=( - "Lint Dependency Groups for validity. " - "This will eagerly load and check all of your Dependency Groups." - ) - ) - parser.add_argument( - "-f", - "--pyproject-file", - default="pyproject.toml", - help="The pyproject.toml file. Defaults to trying in the current directory.", - ) - args = parser.parse_args(argv if argv is not None else sys.argv[1:]) - - with open(args.pyproject_file, "rb") as fp: - pyproject = tomllib.load(fp) - dependency_groups_raw = pyproject.get("dependency-groups", {}) - - errors: list[str] = [] - try: - resolver = DependencyGroupResolver(dependency_groups_raw) - except (ValueError, TypeError) as e: - errors.append(f"{type(e).__name__}: {e}") - else: - for groupname in resolver.dependency_groups: - try: - resolver.resolve(groupname) - except (LookupError, ValueError, TypeError) as e: - errors.append(f"{type(e).__name__}: {e}") - - if errors: - print("errors encountered while examining dependency groups:") - for msg in errors: - print(f" {msg}") - sys.exit(1) - else: - print("ok") - sys.exit(0) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py deleted file mode 100644 index f86d8961b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +++ /dev/null @@ -1,62 +0,0 @@ -from __future__ import annotations - -import argparse -import subprocess -import sys - -from ._implementation import DependencyGroupResolver -from ._toml_compat import tomllib - - -def _invoke_pip(deps: list[str]) -> None: - subprocess.check_call([sys.executable, "-m", "pip", "install", *deps]) - - -def main(*, argv: list[str] | None = None) -> None: - if tomllib is None: - print( - "Usage error: dependency-groups CLI requires tomli or Python 3.11+", - file=sys.stderr, - ) - raise SystemExit(2) - - parser = argparse.ArgumentParser(description="Install Dependency Groups.") - parser.add_argument( - "DEPENDENCY_GROUP", nargs="+", help="The dependency groups to install." - ) - parser.add_argument( - "-f", - "--pyproject-file", - default="pyproject.toml", - help="The pyproject.toml file. Defaults to trying in the current directory.", - ) - args = parser.parse_args(argv if argv is not None else sys.argv[1:]) - - with open(args.pyproject_file, "rb") as fp: - pyproject = tomllib.load(fp) - dependency_groups_raw = pyproject.get("dependency-groups", {}) - - errors: list[str] = [] - resolved: list[str] = [] - try: - resolver = DependencyGroupResolver(dependency_groups_raw) - except (ValueError, TypeError) as e: - errors.append(f"{type(e).__name__}: {e}") - else: - for groupname in args.DEPENDENCY_GROUP: - try: - resolved.extend(str(r) for r in resolver.resolve(groupname)) - except (LookupError, ValueError, TypeError) as e: - errors.append(f"{type(e).__name__}: {e}") - - if errors: - print("errors encountered while examining dependency groups:") - for msg in errors: - print(f" {msg}") - sys.exit(1) - - _invoke_pip(resolved) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py deleted file mode 100644 index 8d6f921c2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +++ /dev/null @@ -1,9 +0,0 @@ -try: - import tomllib -except ImportError: - try: - from pip._vendor import tomli as tomllib # type: ignore[no-redef, unused-ignore] - except ModuleNotFoundError: # pragma: no cover - tomllib = None # type: ignore[assignment, unused-ignore] - -__all__ = ("tomllib",) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/dependency_groups/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt deleted file mode 100644 index c31ac56d7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt +++ /dev/null @@ -1,284 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations (now Zope -Corporation, see http://www.zope.com). In 2001, the Python Software -Foundation (PSF, see http://www.python.org/psf/) was formed, a -non-profit organization created specifically to own Python-related -Intellectual Property. Zope Corporation is a sponsoring member of -the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.2 2.1.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2.1 2.2 2002 PSF yes - 2.2.2 2.2.1 2002 PSF yes - 2.2.3 2.2.2 2003 PSF yes - 2.3 2.2.2 2002-2003 PSF yes - 2.3.1 2.3 2002-2003 PSF yes - 2.3.2 2.3.1 2002-2003 PSF yes - 2.3.3 2.3.2 2002-2003 PSF yes - 2.3.4 2.3.3 2004 PSF yes - 2.3.5 2.3.4 2005 PSF yes - 2.4 2.3 2004 PSF yes - 2.4.1 2.4 2005 PSF yes - 2.4.2 2.4.1 2005 PSF yes - 2.4.3 2.4.2 2006 PSF yes - 2.4.4 2.4.3 2006 PSF yes - 2.5 2.4 2006 PSF yes - 2.5.1 2.5 2007 PSF yes - 2.5.2 2.5.1 2008 PSF yes - 2.5.3 2.5.2 2008 PSF yes - 2.6 2.5 2008 PSF yes - 2.6.1 2.6 2008 PSF yes - 2.6.2 2.6.1 2009 PSF yes - 2.6.3 2.6.2 2009 PSF yes - 2.6.4 2.6.3 2009 PSF yes - 2.6.5 2.6.4 2010 PSF yes - 3.0 2.6 2008 PSF yes - 3.0.1 3.0 2009 PSF yes - 3.1 3.0.1 2009 PSF yes - 3.1.1 3.1 2009 PSF yes - 3.1.2 3.1 2010 PSF yes - 3.2 3.1 2010 PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -Python Software Foundation; All Rights Reserved" are retained in Python alone or -in any derivative version prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__init__.py deleted file mode 100644 index 4e82943ef..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2024 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import logging - -__version__ = '0.4.0' - - -class DistlibException(Exception): - pass - - -try: - from logging import NullHandler -except ImportError: # pragma: no cover - - class NullHandler(logging.Handler): - - def handle(self, record): - pass - - def emit(self, record): - pass - - def createLock(self): - self.lock = None - - -logger = logging.getLogger(__name__) -logger.addHandler(NullHandler()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 112758a2b1a0ee2f052f1d9ad71af3431f655ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 zcmah}&u<$=6n^7fuXpVvjZ2f3HYN>0m8>eiz(Oq`L`5qlQe;Id=*jMAvpaE@tashn zF*KZf;>QKG>H+?R9QhM^<wlWc8H9wy1#VUyLB)yp)^=<pB<Aq#_|2R5zW3fYzB)Hs z1YA$P{XM*w1Ne=8jF&aq48Frn5AJ}=c0hrfQ)~fNz%|Z;Yc_K=W9X-hOXQQ^fo)Tn z%g}_qxpAn;cLkbujg4+NO=oXmayH&I%@wGPevEyWG5ac9hGyP^;AMa%ScZ&+g)9n~ zYi4|V@;zl{R$zBKgtv_fgsf`+K`!-A^PB6n^-X``4=^GIgGIFVumr_iP`NuZ%5a%7 z-P|fv4LyG|OjQ)_-@5OMjtZ0b80yu$wmFZzw%}YBId3OHH=_Lv=l8l^G&(uM`9Ub@ zb}Zrqj~6&km8U|VdrHZ0zpF&bxy)n!0Ws5GzW-L^!&Jz$;RQl&UBABB_#}~sjgCw{ z623|sew1{BeJ>SjVH_$1j2A^hu5C5;j?~>Geq*b~YyAGTH~9ym-HALUxN3JAyWxH# z4V75yc>bZ+5^19ob~gCOA`TL{5e!S*;GCjzzTP>KCi2OEdYux*&){d%mZh=1%5<sT zjiPNY4v@irxAt}P_NJSAP8o}k;C#;mwHPr^+ESKls={qhwwuScTXGgJ`Y6)VMbkp@ z*#lB)4_sJ<V^+_4cbwB^Dxw2zN#Q3lNa@~{E0UON>u$zRpPk~mKD5!?2UJ-Pewvxj zD*L~bavt5Yq_T{=e`PX7J5+jpIuBV;zaS~qFu_=LXaM4w)pQOwRMTyU$(}8$FiUsL zv>7G-VU@|Vc#=|tQE^3I3LNn+p6bQv#1s1xU2zb4@a)3U7dOA!8IJH0n(9?YQafdV zz$PG1Np$1|f(ilsYv?lPe&nTT5c<j&QN%e4V0Oxg+9qc2Wo^&qmjT5}sRu7UM+(nP z=9HgX2!A0|`hYOxLj$jtbRkMwtuSus5=V8)6dxQu9Ov})4RuM*y0p{oBvRdyGLgD4 zlA(55LhWJ<A+yr7MFEA>MK1_OKEwHCLe3;&zcYNm@5(C1r6SS;gucNT8_WSa^XuF~ zuXJKD<~%q$0sQpsSyuVQT<yOC#qv|<;uGiMH`jh}Uh7%Uz<LVh@1gwg>Z7$E;qr_A uGT1MjK#5gOOebG?(E2)gnEVO2?dQ?>cS<^XWZf{}v9WaHRpaprL;MG`;zBL} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-314.pyc deleted file mode 100644 index 566c396ef148842e598d11e74136c1472fc42c65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47131 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 X*ZFfJxQnOH7+@XcbN#9LSJBizW6Z9t diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-314.pyc deleted file mode 100644 index eae006598800f63d06556d54afc709f8dcb99689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18048 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-314.pyc deleted file mode 100644 index 0555b6d18ad822037cde38cd2f6c206f49abb9c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20860 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 BrGfwe diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-314.pyc deleted file mode 100644 index 198748a1635afcf9d624f296a97893d2388a649e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92768 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 C<2T&^ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/compat.py deleted file mode 100644 index ca561dd2e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/compat.py +++ /dev/null @@ -1,1137 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import absolute_import - -import os -import re -import shutil -import sys - -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -if sys.version_info[0] < 3: # pragma: no cover - from StringIO import StringIO - string_types = basestring, - text_type = unicode - from types import FileType as file_type - import __builtin__ as builtins - import ConfigParser as configparser - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit - from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, - pathname2url, ContentTooShortError, splittype) - - def quote(s): - if isinstance(s, unicode): - s = s.encode('utf-8') - return _quote(s) - - import urllib2 - from urllib2 import (Request, urlopen, URLError, HTTPError, - HTTPBasicAuthHandler, HTTPPasswordMgr, HTTPHandler, - HTTPRedirectHandler, build_opener) - if ssl: - from urllib2 import HTTPSHandler - import httplib - import xmlrpclib - import Queue as queue - from HTMLParser import HTMLParser - import htmlentitydefs - raw_input = raw_input - from itertools import ifilter as filter - from itertools import ifilterfalse as filterfalse - - # Leaving this around for now, in case it needs resurrecting in some way - # _userprog = None - # def splituser(host): - # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - # global _userprog - # if _userprog is None: - # import re - # _userprog = re.compile('^(.*)@(.*)$') - - # match = _userprog.match(host) - # if match: return match.group(1, 2) - # return None, host - -else: # pragma: no cover - from io import StringIO - string_types = str, - text_type = str - from io import TextIOWrapper as file_type - import builtins - import configparser - from urllib.parse import (urlparse, urlunparse, urljoin, quote, unquote, - urlsplit, urlunsplit, splittype) - from urllib.request import (urlopen, urlretrieve, Request, url2pathname, - pathname2url, HTTPBasicAuthHandler, - HTTPPasswordMgr, HTTPHandler, - HTTPRedirectHandler, build_opener) - if ssl: - from urllib.request import HTTPSHandler - from urllib.error import HTTPError, URLError, ContentTooShortError - import http.client as httplib - import urllib.request as urllib2 - import xmlrpc.client as xmlrpclib - import queue - from html.parser import HTMLParser - import html.entities as htmlentitydefs - raw_input = input - from itertools import filterfalse - filter = filter - -try: - from ssl import match_hostname, CertificateError -except ImportError: # pragma: no cover - - class CertificateError(ValueError): - pass - - def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - parts = dn.split('.') - leftmost, remainder = parts[0], parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" % - (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" % - (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") - - -try: - from types import SimpleNamespace as Container -except ImportError: # pragma: no cover - - class Container(object): - """ - A generic container for when multiple values need to be returned - """ - - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -try: - from shutil import which -except ImportError: # pragma: no cover - # Implementation from Python 3.3 - def which(cmd, mode=os.F_OK | os.X_OK, path=None): - """Given a command, mode, and a PATH string, return the path which - conforms to the given mode on the PATH, or None if there is no such - file. - - `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result - of os.environ.get("PATH"), or can be overridden with a custom search - path. - - """ - - # Check that a given file can be accessed with the correct mode. - # Additionally check that `file` is not a directory, as on Windows - # directories pass the os.access check. - def _access_check(fn, mode): - return (os.path.exists(fn) and os.access(fn, mode) and not os.path.isdir(fn)) - - # If we're given a path with a directory part, look it up directly rather - # than referring to PATH directories. This includes checking relative to the - # current directory, e.g. ./script - if os.path.dirname(cmd): - if _access_check(cmd, mode): - return cmd - return None - - if path is None: - path = os.environ.get("PATH", os.defpath) - if not path: - return None - path = path.split(os.pathsep) - - if sys.platform == "win32": - # The current directory takes precedence on Windows. - if os.curdir not in path: - path.insert(0, os.curdir) - - # PATHEXT is necessary to check on Windows. - pathext = os.environ.get("PATHEXT", "").split(os.pathsep) - # See if the given file matches any of the expected path extensions. - # This will allow us to short circuit when given "python.exe". - # If it does match, only test that one, otherwise we have to try - # others. - if any(cmd.lower().endswith(ext.lower()) for ext in pathext): - files = [cmd] - else: - files = [cmd + ext for ext in pathext] - else: - # On other platforms you don't have things like PATHEXT to tell you - # what file suffixes are executable, so just pass on cmd as-is. - files = [cmd] - - seen = set() - for dir in path: - normdir = os.path.normcase(dir) - if normdir not in seen: - seen.add(normdir) - for thefile in files: - name = os.path.join(dir, thefile) - if _access_check(name, mode): - return name - return None - - -# ZipFile is a context manager in 2.7, but not in 2.6 - -from zipfile import ZipFile as BaseZipFile - -if hasattr(BaseZipFile, '__enter__'): # pragma: no cover - ZipFile = BaseZipFile -else: # pragma: no cover - from zipfile import ZipExtFile as BaseZipExtFile - - class ZipExtFile(BaseZipExtFile): - - def __init__(self, base): - self.__dict__.update(base.__dict__) - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - class ZipFile(BaseZipFile): - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - def open(self, *args, **kwargs): - base = BaseZipFile.open(self, *args, **kwargs) - return ZipExtFile(base) - - -try: - from platform import python_implementation -except ImportError: # pragma: no cover - - def python_implementation(): - """Return a string identifying the Python implementation.""" - if 'PyPy' in sys.version: - return 'PyPy' - if os.name == 'java': - return 'Jython' - if sys.version.startswith('IronPython'): - return 'IronPython' - return 'CPython' - - -import sysconfig - -try: - callable = callable -except NameError: # pragma: no cover - from collections.abc import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode - fsdecode = os.fsdecode -except AttributeError: # pragma: no cover - # Issue #99: on some systems (e.g. containerised), - # sys.getfilesystemencoding() returns None, and we need a real value, - # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and - # sys.getfilesystemencoding(): the return value is "the user’s preference - # according to the result of nl_langinfo(CODESET), or None if the - # nl_langinfo(CODESET) failed." - _fsencoding = sys.getfilesystemencoding() or 'utf-8' - if _fsencoding == 'mbcs': - _fserrors = 'strict' - else: - _fserrors = 'surrogateescape' - - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, text_type): - return filename.encode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - def fsdecode(filename): - if isinstance(filename, text_type): - return filename - elif isinstance(filename, bytes): - return filename.decode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - -try: - from tokenize import detect_encoding -except ImportError: # pragma: no cover - from codecs import BOM_UTF8, lookup - - cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") - - def _get_normal_name(orig_enc): - """Imitates get_normal_name in tokenizer.c.""" - # Only care about the first 12 characters. - enc = orig_enc[:12].lower().replace("_", "-") - if enc == "utf-8" or enc.startswith("utf-8-"): - return "utf-8" - if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ - enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): - return "iso-8859-1" - return orig_enc - - def detect_encoding(readline): - """ - The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argument, readline, - in the same way as the tokenize() generator. - - It will call readline a maximum of twice, and return the encoding used - (as a string) and a list of any lines (left as bytes) it has read in. - - It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, - 'utf-8-sig' is returned. - - If no encoding is specified, then the default of 'utf-8' will be returned. - """ - try: - filename = readline.__self__.name - except AttributeError: - filename = None - bom_found = False - encoding = None - default = 'utf-8' - - def read_or_stop(): - try: - return readline() - except StopIteration: - return b'' - - def find_cookie(line): - try: - # Decode as UTF-8. Either the line is an encoding declaration, - # in which case it should be pure ASCII, or it must be UTF-8 - # per default encoding. - line_string = line.decode('utf-8') - except UnicodeDecodeError: - msg = "invalid or missing encoding declaration" - if filename is not None: - msg = '{} for {!r}'.format(msg, filename) - raise SyntaxError(msg) - - matches = cookie_re.findall(line_string) - if not matches: - return None - encoding = _get_normal_name(matches[0]) - try: - codec = lookup(encoding) - except LookupError: - # This behaviour mimics the Python interpreter - if filename is None: - msg = "unknown encoding: " + encoding - else: - msg = "unknown encoding for {!r}: {}".format( - filename, encoding) - raise SyntaxError(msg) - - if bom_found: - if codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - if filename is None: - msg = 'encoding problem: utf-8' - else: - msg = 'encoding problem for {!r}: utf-8'.format( - filename) - raise SyntaxError(msg) - encoding += '-sig' - return encoding - - first = read_or_stop() - if first.startswith(BOM_UTF8): - bom_found = True - first = first[3:] - default = 'utf-8-sig' - if not first: - return default, [] - - encoding = find_cookie(first) - if encoding: - return encoding, [first] - - second = read_or_stop() - if not second: - return default, [first] - - encoding = find_cookie(second) - if encoding: - return encoding, [first, second] - - return default, [first, second] - - -# For converting & <-> &amp; etc. -try: - from html import escape -except ImportError: - from cgi import escape -if sys.version_info[:2] < (3, 4): - unescape = HTMLParser().unescape -else: - from html import unescape - -try: - from collections import ChainMap -except ImportError: # pragma: no cover - from collections import MutableMapping - - try: - from reprlib import recursive_repr as _recursive_repr - except ImportError: - - def _recursive_repr(fillvalue='...'): - ''' - Decorator to make a repr function return fillvalue for a recursive - call - ''' - - def decorating_function(user_function): - repr_running = set() - - def wrapper(self): - key = id(self), get_ident() - if key in repr_running: - return fillvalue - repr_running.add(key) - try: - result = user_function(self) - finally: - repr_running.discard(key) - return result - - # Can't use functools.wraps() here because of bootstrap issues - wrapper.__module__ = getattr(user_function, '__module__') - wrapper.__doc__ = getattr(user_function, '__doc__') - wrapper.__name__ = getattr(user_function, '__name__') - wrapper.__annotations__ = getattr(user_function, - '__annotations__', {}) - return wrapper - - return decorating_function - - class ChainMap(MutableMapping): - ''' - A ChainMap groups multiple dicts (or other mappings) together - to create a single, updateable view. - - The underlying mappings are stored in a list. That list is public and can - accessed or updated using the *maps* attribute. There is no other state. - - Lookups search the underlying mappings successively until a key is found. - In contrast, writes, updates, and deletions only operate on the first - mapping. - ''' - - def __init__(self, *maps): - '''Initialize a ChainMap by setting *maps* to the given mappings. - If no mappings are provided, a single empty dictionary is used. - - ''' - self.maps = list(maps) or [{}] # always at least one map - - def __missing__(self, key): - raise KeyError(key) - - def __getitem__(self, key): - for mapping in self.maps: - try: - return mapping[ - key] # can't use 'key in mapping' with defaultdict - except KeyError: - pass - return self.__missing__( - key) # support subclasses that define __missing__ - - def get(self, key, default=None): - return self[key] if key in self else default - - def __len__(self): - return len(set().union( - *self.maps)) # reuses stored hash values if possible - - def __iter__(self): - return iter(set().union(*self.maps)) - - def __contains__(self, key): - return any(key in m for m in self.maps) - - def __bool__(self): - return any(self.maps) - - @_recursive_repr() - def __repr__(self): - return '{0.__class__.__name__}({1})'.format( - self, ', '.join(map(repr, self.maps))) - - @classmethod - def fromkeys(cls, iterable, *args): - 'Create a ChainMap with a single dict created from the iterable.' - return cls(dict.fromkeys(iterable, *args)) - - def copy(self): - 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' - return self.__class__(self.maps[0].copy(), *self.maps[1:]) - - __copy__ = copy - - def new_child(self): # like Django's Context.push() - 'New ChainMap with a new dict followed by all previous maps.' - return self.__class__({}, *self.maps) - - @property - def parents(self): # like Django's Context.pop() - 'New ChainMap from maps[1:].' - return self.__class__(*self.maps[1:]) - - def __setitem__(self, key, value): - self.maps[0][key] = value - - def __delitem__(self, key): - try: - del self.maps[0][key] - except KeyError: - raise KeyError( - 'Key not found in the first mapping: {!r}'.format(key)) - - def popitem(self): - 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' - try: - return self.maps[0].popitem() - except KeyError: - raise KeyError('No keys found in the first mapping.') - - def pop(self, key, *args): - 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' - try: - return self.maps[0].pop(key, *args) - except KeyError: - raise KeyError( - 'Key not found in the first mapping: {!r}'.format(key)) - - def clear(self): - 'Clear maps[0], leaving maps[1:] intact.' - self.maps[0].clear() - - -try: - from importlib.util import cache_from_source # Python >= 3.4 -except ImportError: # pragma: no cover - - def cache_from_source(path, debug_override=None): - assert path.endswith('.py') - if debug_override is None: - debug_override = __debug__ - if debug_override: - suffix = 'c' - else: - suffix = 'o' - return path + suffix - - -try: - from collections import OrderedDict -except ImportError: # pragma: no cover - # {{{ http://code.activestate.com/recipes/576693/ (r9) - # Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. - # Passes Python2.7's test suite and incorporates all the latest updates. - try: - from thread import get_ident as _get_ident - except ImportError: - from dummy_thread import get_ident as _get_ident - - try: - from _abcoll import KeysView, ValuesView, ItemsView - except ImportError: - pass - - class OrderedDict(dict): - 'Dictionary that remembers insertion order' - - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % - len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args), )) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running=None): - 'od.__repr__() <==> repr(od)' - if not _repr_running: - _repr_running = {} - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__, ) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items, ), inst_dict) - return self.__class__, (items, ) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self) == len( - other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) - - -try: - from logging.config import BaseConfigurator, valid_ident -except ImportError: # pragma: no cover - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) - - def valid_ident(s): - m = IDENTIFIER.match(s) - if not m: - raise ValueError('Not a valid Python identifier: %r' % s) - return True - - # The ConvertingXXX classes are wrappers around standard Python containers, - # and they serve to convert any suitable values in the container. The - # conversion converts base dicts, lists and tuples to their wrapped - # equivalents, whereas strings which match a conversion format are converted - # appropriately. - # - # Each wrapper should have a configurator attribute holding the actual - # configurator to use for conversion. - - class ConvertingDict(dict): - """A converting dictionary wrapper.""" - - def __getitem__(self, key): - value = dict.__getitem__(self, key) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def get(self, key, default=None): - value = dict.get(self, key, default) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, key, default=None): - value = dict.pop(self, key, default) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class ConvertingList(list): - """A converting list wrapper.""" - - def __getitem__(self, key): - value = list.__getitem__(self, key) - result = self.configurator.convert(value) - # If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, idx=-1): - value = list.pop(self, idx) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result - - class ConvertingTuple(tuple): - """A converting tuple wrapper.""" - - def __getitem__(self, key): - value = tuple.__getitem__(self, key) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class BaseConfigurator(object): - """ - The configurator base class which defines some useful defaults. - """ - - CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$') - - WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') - DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') - INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') - DIGIT_PATTERN = re.compile(r'^\d+$') - - value_converters = { - 'ext': 'ext_convert', - 'cfg': 'cfg_convert', - } - - # We might want to use a different one, e.g. importlib - importer = staticmethod(__import__) - - def __init__(self, config): - self.config = ConvertingDict(config) - self.config.configurator = self - - def resolve(self, s): - """ - Resolve strings to objects using standard import and attribute - syntax. - """ - name = s.split('.') - used = name.pop(0) - try: - found = self.importer(used) - for frag in name: - used += '.' + frag - try: - found = getattr(found, frag) - except AttributeError: - self.importer(used) - found = getattr(found, frag) - return found - except ImportError: - e, tb = sys.exc_info()[1:] - v = ValueError('Cannot resolve %r: %s' % (s, e)) - v.__cause__, v.__traceback__ = e, tb - raise v - - def ext_convert(self, value): - """Default converter for the ext:// protocol.""" - return self.resolve(value) - - def cfg_convert(self, value): - """Default converter for the cfg:// protocol.""" - rest = value - m = self.WORD_PATTERN.match(rest) - if m is None: - raise ValueError("Unable to convert %r" % value) - else: - rest = rest[m.end():] - d = self.config[m.groups()[0]] - while rest: - m = self.DOT_PATTERN.match(rest) - if m: - d = d[m.groups()[0]] - else: - m = self.INDEX_PATTERN.match(rest) - if m: - idx = m.groups()[0] - if not self.DIGIT_PATTERN.match(idx): - d = d[idx] - else: - try: - n = int( - idx - ) # try as number first (most likely) - d = d[n] - except TypeError: - d = d[idx] - if m: - rest = rest[m.end():] - else: - raise ValueError('Unable to convert ' - '%r at %r' % (value, rest)) - # rest should be empty - return d - - def convert(self, value): - """ - Convert values to an appropriate type. dicts, lists and tuples are - replaced by their converting alternatives. Strings are checked to - see if they have a conversion format and are converted if they do. - """ - if not isinstance(value, ConvertingDict) and isinstance( - value, dict): - value = ConvertingDict(value) - value.configurator = self - elif not isinstance(value, ConvertingList) and isinstance( - value, list): - value = ConvertingList(value) - value.configurator = self - elif not isinstance(value, ConvertingTuple) and isinstance(value, tuple): - value = ConvertingTuple(value) - value.configurator = self - elif isinstance(value, string_types): - m = self.CONVERT_PATTERN.match(value) - if m: - d = m.groupdict() - prefix = d['prefix'] - converter = self.value_converters.get(prefix, None) - if converter: - suffix = d['suffix'] - converter = getattr(self, converter) - value = converter(suffix) - return value - - def configure_custom(self, config): - """Configure an object with a user-supplied factory.""" - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) - result = c(**kwargs) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def as_tuple(self, value): - """Utility function which converts lists to tuples.""" - if isinstance(value, list): - value = tuple(value) - return value diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/resources.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/resources.py deleted file mode 100644 index fef52aa10..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/resources.py +++ /dev/null @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import bisect -import io -import logging -import os -import pkgutil -import sys -import types -import zipimport - -from . import DistlibException -from .util import cached_property, get_cache_base, Cache - -logger = logging.getLogger(__name__) - - -cache = None # created when needed - - -class ResourceCache(Cache): - def __init__(self, base=None): - if base is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('resource-cache')) - super(ResourceCache, self).__init__(base) - - def is_stale(self, resource, path): - """ - Is the cache stale for the given resource? - - :param resource: The :class:`Resource` being cached. - :param path: The path of the resource in the cache. - :return: True if the cache is stale. - """ - # Cache invalidation is a hard problem :-) - return True - - def get(self, resource): - """ - Get a resource into the cache, - - :param resource: A :class:`Resource` instance. - :return: The pathname of the resource in the cache. - """ - prefix, path = resource.finder.get_cache_info(resource) - if prefix is None: - result = path - else: - result = os.path.join(self.base, self.prefix_to_dir(prefix), path) - dirname = os.path.dirname(result) - if not os.path.isdir(dirname): - os.makedirs(dirname) - if not os.path.exists(result): - stale = True - else: - stale = self.is_stale(resource, path) - if stale: - # write the bytes of the resource to the cache location - with open(result, 'wb') as f: - f.write(resource.bytes) - return result - - -class ResourceBase(object): - def __init__(self, finder, name): - self.finder = finder - self.name = name - - -class Resource(ResourceBase): - """ - A class representing an in-package resource, such as a data file. This is - not normally instantiated by user code, but rather by a - :class:`ResourceFinder` which manages the resource. - """ - is_container = False # Backwards compatibility - - def as_stream(self): - """ - Get the resource as a stream. - - This is not a property to make it obvious that it returns a new stream - each time. - """ - return self.finder.get_stream(self) - - @cached_property - def file_path(self): - global cache - if cache is None: - cache = ResourceCache() - return cache.get(self) - - @cached_property - def bytes(self): - return self.finder.get_bytes(self) - - @cached_property - def size(self): - return self.finder.get_size(self) - - -class ResourceContainer(ResourceBase): - is_container = True # Backwards compatibility - - @cached_property - def resources(self): - return self.finder.get_resources(self) - - -class ResourceFinder(object): - """ - Resource finder for file system resources. - """ - - if sys.platform.startswith('java'): - skipped_extensions = ('.pyc', '.pyo', '.class') - else: - skipped_extensions = ('.pyc', '.pyo') - - def __init__(self, module): - self.module = module - self.loader = getattr(module, '__loader__', None) - self.base = os.path.dirname(getattr(module, '__file__', '')) - - def _adjust_path(self, path): - return os.path.realpath(path) - - def _make_path(self, resource_name): - # Issue #50: need to preserve type of path on Python 2.x - # like os.path._get_sep - if isinstance(resource_name, bytes): # should only happen on 2.x - sep = b'/' - else: - sep = '/' - parts = resource_name.split(sep) - parts.insert(0, self.base) - result = os.path.join(*parts) - return self._adjust_path(result) - - def _find(self, path): - return os.path.exists(path) - - def get_cache_info(self, resource): - return None, resource.path - - def find(self, resource_name): - path = self._make_path(resource_name) - if not self._find(path): - result = None - else: - if self._is_directory(path): - result = ResourceContainer(self, resource_name) - else: - result = Resource(self, resource_name) - result.path = path - return result - - def get_stream(self, resource): - return open(resource.path, 'rb') - - def get_bytes(self, resource): - with open(resource.path, 'rb') as f: - return f.read() - - def get_size(self, resource): - return os.path.getsize(resource.path) - - def get_resources(self, resource): - def allowed(f): - return (f != '__pycache__' and not - f.endswith(self.skipped_extensions)) - return set([f for f in os.listdir(resource.path) if allowed(f)]) - - def is_container(self, resource): - return self._is_directory(resource.path) - - _is_directory = staticmethod(os.path.isdir) - - def iterator(self, resource_name): - resource = self.find(resource_name) - if resource is not None: - todo = [resource] - while todo: - resource = todo.pop(0) - yield resource - if resource.is_container: - rname = resource.name - for name in resource.resources: - if not rname: - new_name = name - else: - new_name = '/'.join([rname, name]) - child = self.find(new_name) - if child.is_container: - todo.append(child) - else: - yield child - - -class ZipResourceFinder(ResourceFinder): - """ - Resource finder for resources in .zip files. - """ - def __init__(self, module): - super(ZipResourceFinder, self).__init__(module) - archive = self.loader.archive - self.prefix_len = 1 + len(archive) - # PyPy doesn't have a _files attr on zipimporter, and you can't set one - if hasattr(self.loader, '_files'): - self._files = self.loader._files - else: - self._files = zipimport._zip_directory_cache[archive] - self.index = sorted(self._files) - - def _adjust_path(self, path): - return path - - def _find(self, path): - path = path[self.prefix_len:] - if path in self._files: - result = True - else: - if path and path[-1] != os.sep: - path = path + os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - if not result: - logger.debug('_find failed: %r %r', path, self.loader.prefix) - else: - logger.debug('_find worked: %r %r', path, self.loader.prefix) - return result - - def get_cache_info(self, resource): - prefix = self.loader.archive - path = resource.path[1 + len(prefix):] - return prefix, path - - def get_bytes(self, resource): - return self.loader.get_data(resource.path) - - def get_stream(self, resource): - return io.BytesIO(self.get_bytes(resource)) - - def get_size(self, resource): - path = resource.path[self.prefix_len:] - return self._files[path][3] - - def get_resources(self, resource): - path = resource.path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - plen = len(path) - result = set() - i = bisect.bisect(self.index, path) - while i < len(self.index): - if not self.index[i].startswith(path): - break - s = self.index[i][plen:] - result.add(s.split(os.sep, 1)[0]) # only immediate children - i += 1 - return result - - def _is_directory(self, path): - path = path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - return result - - -_finder_registry = { - type(None): ResourceFinder, - zipimport.zipimporter: ZipResourceFinder -} - -try: - # In Python 3.6, _frozen_importlib -> _frozen_importlib_external - try: - import _frozen_importlib_external as _fi - except ImportError: - import _frozen_importlib as _fi - _finder_registry[_fi.SourceFileLoader] = ResourceFinder - _finder_registry[_fi.FileFinder] = ResourceFinder - # See issue #146 - _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder - del _fi -except (ImportError, AttributeError): - pass - - -def register_finder(loader, finder_maker): - _finder_registry[type(loader)] = finder_maker - - -_finder_cache = {} - - -def finder(package): - """ - Return a resource finder for a package. - :param package: The name of the package. - :return: A :class:`ResourceFinder` instance for the package. - """ - if package in _finder_cache: - result = _finder_cache[package] - else: - if package not in sys.modules: - __import__(package) - module = sys.modules[package] - path = getattr(module, '__path__', None) - if path is None: - raise DistlibException('You cannot get a finder for a module, ' - 'only for a package') - loader = getattr(module, '__loader__', None) - finder_maker = _finder_registry.get(type(loader)) - if finder_maker is None: - raise DistlibException('Unable to locate finder for %r' % package) - result = finder_maker(module) - _finder_cache[package] = result - return result - - -_dummy_module = types.ModuleType(str('__dummy__')) - - -def finder_for_path(path): - """ - Return a resource finder for a path, which should represent a container. - - :param path: The path. - :return: A :class:`ResourceFinder` instance for the path. - """ - result = None - # calls any path hooks, gets importer into cache - pkgutil.get_importer(path) - loader = sys.path_importer_cache.get(path) - finder = _finder_registry.get(type(loader)) - if finder: - module = _dummy_module - module.__file__ = os.path.join(path, '') - module.__loader__ = loader - result = finder(module) - return result diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/scripts.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/scripts.py deleted file mode 100644 index 195dc3f89..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/scripts.py +++ /dev/null @@ -1,447 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2023 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from io import BytesIO -import logging -import os -import re -import struct -import sys -import time -from zipfile import ZipInfo - -from .compat import sysconfig, detect_encoding, ZipFile -from .resources import finder -from .util import (FileOperator, get_export_entry, convert_path, get_executable, get_platform, in_venv) - -logger = logging.getLogger(__name__) - -_DEFAULT_MANIFEST = ''' -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> - <assemblyIdentity version="1.0.0.0" - processorArchitecture="X86" - name="%s" - type="win32"/> - - <!-- Identify the application security requirements. --> - <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> - <security> - <requestedPrivileges> - <requestedExecutionLevel level="asInvoker" uiAccess="false"/> - </requestedPrivileges> - </security> - </trustInfo> -</assembly>'''.strip() - -# check if Python is called on the first line with this expression -FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') -SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- -import re -import sys -if __name__ == '__main__': - from %(module)s import %(import_name)s - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(%(func)s()) -''' - -# Pre-fetch the contents of all executable wrapper stubs. -# This is to address https://github.com/pypa/pip/issues/12666. -# When updating pip, we rename the old pip in place before installing the -# new version. If we try to fetch a wrapper *after* that rename, the finder -# machinery will be confused as the package is no longer available at the -# location where it was imported from. So we load everything into memory in -# advance. - -if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): - # Issue 31: don't hardcode an absolute package name, but - # determine it relative to the current package - DISTLIB_PACKAGE = __name__.rsplit('.', 1)[0] - - WRAPPERS = { - r.name: r.bytes - for r in finder(DISTLIB_PACKAGE).iterator("") - if r.name.endswith(".exe") - } - - -def enquote_executable(executable): - if ' ' in executable: - # make sure we quote only the executable in case of env - # for example /usr/bin/env "/dir with spaces/bin/jython" - # instead of "/usr/bin/env /dir with spaces/bin/jython" - # otherwise whole - if executable.startswith('/usr/bin/env '): - env, _executable = executable.split(' ', 1) - if ' ' in _executable and not _executable.startswith('"'): - executable = '%s "%s"' % (env, _executable) - else: - if not executable.startswith('"'): - executable = '"%s"' % executable - return executable - - -# Keep the old name around (for now), as there is at least one project using it! -_enquote_executable = enquote_executable - - -class ScriptMaker(object): - """ - A class to copy or create scripts from source scripts or callable - specifications. - """ - script_template = SCRIPT_TEMPLATE - - executable = None # for shebangs - - def __init__(self, source_dir, target_dir, add_launchers=True, dry_run=False, fileop=None): - self.source_dir = source_dir - self.target_dir = target_dir - self.add_launchers = add_launchers - self.force = False - self.clobber = False - # It only makes sense to set mode bits on POSIX. - self.set_mode = (os.name == 'posix') or (os.name == 'java' and os._name == 'posix') - self.variants = set(('', 'X.Y')) - self._fileop = fileop or FileOperator(dry_run) - - self._is_nt = os.name == 'nt' or (os.name == 'java' and os._name == 'nt') - self.version_info = sys.version_info - - def _get_alternate_executable(self, executable, options): - if options.get('gui', False) and self._is_nt: # pragma: no cover - dn, fn = os.path.split(executable) - fn = fn.replace('python', 'pythonw') - executable = os.path.join(dn, fn) - return executable - - if sys.platform.startswith('java'): # pragma: no cover - - def _is_shell(self, executable): - """ - Determine if the specified executable is a script - (contains a #! line) - """ - try: - with open(executable) as fp: - return fp.read(2) == '#!' - except (OSError, IOError): - logger.warning('Failed to open %s', executable) - return False - - def _fix_jython_executable(self, executable): - if self._is_shell(executable): - # Workaround for Jython is not needed on Linux systems. - import java - - if java.lang.System.getProperty('os.name') == 'Linux': - return executable - elif executable.lower().endswith('jython.exe'): - # Use wrapper exe for Jython on Windows - return executable - return '/usr/bin/env %s' % executable - - def _build_shebang(self, executable, post_interp): - """ - Build a shebang line. In the simple case (on Windows, or a shebang line - which is not too long or contains spaces) use a simple formulation for - the shebang. Otherwise, use /bin/sh as the executable, with a contrived - shebang which allows the script to run either under Python or sh, using - suitable quoting. Thanks to Harald Nordgren for his input. - - See also: http://www.in-ulm.de/~mascheck/various/shebang/#length - https://hg.mozilla.org/mozilla-central/file/tip/mach - """ - if os.name != 'posix': - simple_shebang = True - elif getattr(sys, "cross_compiling", False): - # In a cross-compiling environment, the shebang will likely be a - # script; this *must* be invoked with the "safe" version of the - # shebang, or else using os.exec() to run the entry script will - # fail, raising "OSError 8 [Errno 8] Exec format error". - simple_shebang = False - else: - # Add 3 for '#!' prefix and newline suffix. - shebang_length = len(executable) + len(post_interp) + 3 - if sys.platform == 'darwin': - max_shebang_length = 512 - else: - max_shebang_length = 127 - simple_shebang = ((b' ' not in executable) and (shebang_length <= max_shebang_length)) - - if simple_shebang: - result = b'#!' + executable + post_interp + b'\n' - else: - result = b'#!/bin/sh\n' - result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' - result += b"' '''\n" - return result - - def _get_shebang(self, encoding, post_interp=b'', options=None): - enquote = True - if self.executable: - executable = self.executable - enquote = False # assume this will be taken care of - elif not sysconfig.is_python_build(): - executable = get_executable() - elif in_venv(): # pragma: no cover - executable = os.path.join(sysconfig.get_path('scripts'), 'python%s' % sysconfig.get_config_var('EXE')) - else: # pragma: no cover - if os.name == 'nt': - # for Python builds from source on Windows, no Python executables with - # a version suffix are created, so we use python.exe - executable = os.path.join(sysconfig.get_config_var('BINDIR'), - 'python%s' % (sysconfig.get_config_var('EXE'))) - else: - executable = os.path.join( - sysconfig.get_config_var('BINDIR'), - 'python%s%s' % (sysconfig.get_config_var('VERSION'), sysconfig.get_config_var('EXE'))) - if options: - executable = self._get_alternate_executable(executable, options) - - if sys.platform.startswith('java'): # pragma: no cover - executable = self._fix_jython_executable(executable) - - # Normalise case for Windows - COMMENTED OUT - # executable = os.path.normcase(executable) - # N.B. The normalising operation above has been commented out: See - # issue #124. Although paths in Windows are generally case-insensitive, - # they aren't always. For example, a path containing a ẞ (which is a - # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a - # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by - # Windows as equivalent in path names. - - # If the user didn't specify an executable, it may be necessary to - # cater for executable paths with spaces (not uncommon on Windows) - if enquote: - executable = enquote_executable(executable) - # Issue #51: don't use fsencode, since we later try to - # check that the shebang is decodable using utf-8. - executable = executable.encode('utf-8') - # in case of IronPython, play safe and enable frames support - if (sys.platform == 'cli' and '-X:Frames' not in post_interp and - '-X:FullFrames' not in post_interp): # pragma: no cover - post_interp += b' -X:Frames' - shebang = self._build_shebang(executable, post_interp) - # Python parser starts to read a script using UTF-8 until - # it gets a #coding:xxx cookie. The shebang has to be the - # first line of a file, the #coding:xxx cookie cannot be - # written before. So the shebang has to be decodable from - # UTF-8. - try: - shebang.decode('utf-8') - except UnicodeDecodeError: # pragma: no cover - raise ValueError('The shebang (%r) is not decodable from utf-8' % shebang) - # If the script is encoded to a custom encoding (use a - # #coding:xxx cookie), the shebang has to be decodable from - # the script encoding too. - if encoding != 'utf-8': - try: - shebang.decode(encoding) - except UnicodeDecodeError: # pragma: no cover - raise ValueError('The shebang (%r) is not decodable ' - 'from the script encoding (%r)' % (shebang, encoding)) - return shebang - - def _get_script_text(self, entry): - return self.script_template % dict( - module=entry.prefix, import_name=entry.suffix.split('.')[0], func=entry.suffix) - - manifest = _DEFAULT_MANIFEST - - def get_manifest(self, exename): - base = os.path.basename(exename) - return self.manifest % base - - def _write_script(self, names, shebang, script_bytes, filenames, ext): - use_launcher = self.add_launchers and self._is_nt - if not use_launcher: - script_bytes = shebang + script_bytes - else: # pragma: no cover - if ext == 'py': - launcher = self._get_launcher('t') - else: - launcher = self._get_launcher('w') - stream = BytesIO() - with ZipFile(stream, 'w') as zf: - source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') - if source_date_epoch: - date_time = time.gmtime(int(source_date_epoch))[:6] - zinfo = ZipInfo(filename='__main__.py', date_time=date_time) - zf.writestr(zinfo, script_bytes) - else: - zf.writestr('__main__.py', script_bytes) - zip_data = stream.getvalue() - script_bytes = launcher + shebang + zip_data - for name in names: - outname = os.path.join(self.target_dir, name) - if use_launcher: # pragma: no cover - n, e = os.path.splitext(outname) - if e.startswith('.py'): - outname = n - outname = '%s.exe' % outname - try: - self._fileop.write_binary_file(outname, script_bytes) - except Exception: - # Failed writing an executable - it might be in use. - logger.warning('Failed to write executable - trying to ' - 'use .deleteme logic') - dfname = '%s.deleteme' % outname - if os.path.exists(dfname): - os.remove(dfname) # Not allowed to fail here - os.rename(outname, dfname) # nor here - self._fileop.write_binary_file(outname, script_bytes) - logger.debug('Able to replace executable using ' - '.deleteme logic') - try: - os.remove(dfname) - except Exception: - pass # still in use - ignore error - else: - if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover - outname = '%s.%s' % (outname, ext) - if os.path.exists(outname) and not self.clobber: - logger.warning('Skipping existing file %s', outname) - continue - self._fileop.write_binary_file(outname, script_bytes) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - - variant_separator = '-' - - def get_script_filenames(self, name): - result = set() - if '' in self.variants: - result.add(name) - if 'X' in self.variants: - result.add('%s%s' % (name, self.version_info[0])) - if 'X.Y' in self.variants: - result.add('%s%s%s.%s' % (name, self.variant_separator, self.version_info[0], self.version_info[1])) - return result - - def _make_script(self, entry, filenames, options=None): - post_interp = b'' - if options: - args = options.get('interpreter_args', []) - if args: - args = ' %s' % ' '.join(args) - post_interp = args.encode('utf-8') - shebang = self._get_shebang('utf-8', post_interp, options=options) - script = self._get_script_text(entry).encode('utf-8') - scriptnames = self.get_script_filenames(entry.name) - if options and options.get('gui', False): - ext = 'pyw' - else: - ext = 'py' - self._write_script(scriptnames, shebang, script, filenames, ext) - - def _copy_script(self, script, filenames): - adjust = False - script = os.path.join(self.source_dir, convert_path(script)) - outname = os.path.join(self.target_dir, os.path.basename(script)) - if not self.force and not self._fileop.newer(script, outname): - logger.debug('not copying %s (up-to-date)', script) - return - - # Always open the file, but ignore failures in dry-run mode -- - # that way, we'll get accurate feedback if we can read the - # script. - try: - f = open(script, 'rb') - except IOError: # pragma: no cover - if not self.dry_run: - raise - f = None - else: - first_line = f.readline() - if not first_line: # pragma: no cover - logger.warning('%s is an empty file (skipping)', script) - return - - match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) - if match: - adjust = True - post_interp = match.group(1) or b'' - - if not adjust: - if f: - f.close() - self._fileop.copy_file(script, outname) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - else: - logger.info('copying and adjusting %s -> %s', script, self.target_dir) - if not self._fileop.dry_run: - encoding, lines = detect_encoding(f.readline) - f.seek(0) - shebang = self._get_shebang(encoding, post_interp) - if b'pythonw' in first_line: # pragma: no cover - ext = 'pyw' - else: - ext = 'py' - n = os.path.basename(outname) - self._write_script([n], shebang, f.read(), filenames, ext) - if f: - f.close() - - @property - def dry_run(self): - return self._fileop.dry_run - - @dry_run.setter - def dry_run(self, value): - self._fileop.dry_run = value - - if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover - # Executable launcher support. - # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ - - def _get_launcher(self, kind): - if struct.calcsize('P') == 8: # 64-bit - bits = '64' - else: - bits = '32' - platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' - name = '%s%s%s.exe' % (kind, bits, platform_suffix) - if name not in WRAPPERS: - msg = ('Unable to find resource %s in package %s' % - (name, DISTLIB_PACKAGE)) - raise ValueError(msg) - return WRAPPERS[name] - - # Public API follows - - def make(self, specification, options=None): - """ - Make a script. - - :param specification: The specification, which is either a valid export - entry specification (to make a script from a - callable) or a filename (to make a script by - copying from a source location). - :param options: A dictionary of options controlling script generation. - :return: A list of all absolute pathnames written to. - """ - filenames = [] - entry = get_export_entry(specification) - if entry is None: - self._copy_script(specification, filenames) - else: - self._make_script(entry, filenames, options=options) - return filenames - - def make_multiple(self, specifications, options=None): - """ - Take a list of specifications and make scripts from them, - :param specifications: A list of specifications. - :return: A list of all absolute pathnames written to, - """ - filenames = [] - for specification in specifications: - filenames.extend(self.make(specification, options)) - return filenames diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t32.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t32.exe deleted file mode 100644 index 52154f0be32cc2bdbf98af131d477900667d0abd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97792 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe deleted file mode 100644 index e1ab8f8f589eadabaf3efa068dce3ff620a01898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182784 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/t64.exe deleted file mode 100644 index e8bebdba6d8f242244bf397ab067965d47c5093e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108032 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%0AHbpwE%ZM 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 H#ex3;_fXA_ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/util.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/util.py deleted file mode 100644 index 0d5bd7a8b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/util.py +++ /dev/null @@ -1,1984 +0,0 @@ -# -# Copyright (C) 2012-2023 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import codecs -from collections import deque -import contextlib -import csv -from glob import iglob as std_iglob -import io -import json -import logging -import os -import py_compile -import re -import socket -try: - import ssl -except ImportError: # pragma: no cover - ssl = None -import subprocess -import sys -import tarfile -import tempfile -import textwrap - -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import time - -from . import DistlibException -from .compat import (string_types, text_type, shutil, raw_input, StringIO, cache_from_source, urlopen, urljoin, httplib, - xmlrpclib, HTTPHandler, BaseConfigurator, valid_ident, Container, configparser, URLError, ZipFile, - fsdecode, unquote, urlparse) - -logger = logging.getLogger(__name__) - -# -# Requirement parsing code as per PEP 508 -# - -IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') -VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') -COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') -MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') -OR = re.compile(r'^or\b\s*') -AND = re.compile(r'^and\b\s*') -NON_SPACE = re.compile(r'(\S+)\s*') -STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') - - -def parse_marker(marker_string): - """ - Parse a marker string and return a dictionary containing a marker expression. - - The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in - the expression grammar, or strings. A string contained in quotes is to be - interpreted as a literal string, and a string not contained in quotes is a - variable (such as os_name). - """ - - def marker_var(remaining): - # either identifier, or literal string - m = IDENTIFIER.match(remaining) - if m: - result = m.groups()[0] - remaining = remaining[m.end():] - elif not remaining: - raise SyntaxError('unexpected end of input') - else: - q = remaining[0] - if q not in '\'"': - raise SyntaxError('invalid expression: %s' % remaining) - oq = '\'"'.replace(q, '') - remaining = remaining[1:] - parts = [q] - while remaining: - # either a string chunk, or oq, or q to terminate - if remaining[0] == q: - break - elif remaining[0] == oq: - parts.append(oq) - remaining = remaining[1:] - else: - m = STRING_CHUNK.match(remaining) - if not m: - raise SyntaxError('error in string literal: %s' % remaining) - parts.append(m.groups()[0]) - remaining = remaining[m.end():] - else: - s = ''.join(parts) - raise SyntaxError('unterminated string: %s' % s) - parts.append(q) - result = ''.join(parts) - remaining = remaining[1:].lstrip() # skip past closing quote - return result, remaining - - def marker_expr(remaining): - if remaining and remaining[0] == '(': - result, remaining = marker(remaining[1:].lstrip()) - if remaining[0] != ')': - raise SyntaxError('unterminated parenthesis: %s' % remaining) - remaining = remaining[1:].lstrip() - else: - lhs, remaining = marker_var(remaining) - while remaining: - m = MARKER_OP.match(remaining) - if not m: - break - op = m.groups()[0] - remaining = remaining[m.end():] - rhs, remaining = marker_var(remaining) - lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} - result = lhs - return result, remaining - - def marker_and(remaining): - lhs, remaining = marker_expr(remaining) - while remaining: - m = AND.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_expr(remaining) - lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - def marker(remaining): - lhs, remaining = marker_and(remaining) - while remaining: - m = OR.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_and(remaining) - lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - return marker(marker_string) - - -def parse_requirement(req): - """ - Parse a requirement passed in as a string. Return a Container - whose attributes contain the various parts of the requirement. - """ - remaining = req.strip() - if not remaining or remaining.startswith('#'): - return None - m = IDENTIFIER.match(remaining) - if not m: - raise SyntaxError('name expected: %s' % remaining) - distname = m.groups()[0] - remaining = remaining[m.end():] - extras = mark_expr = versions = uri = None - if remaining and remaining[0] == '[': - i = remaining.find(']', 1) - if i < 0: - raise SyntaxError('unterminated extra: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - extras = [] - while s: - m = IDENTIFIER.match(s) - if not m: - raise SyntaxError('malformed extra: %s' % s) - extras.append(m.groups()[0]) - s = s[m.end():] - if not s: - break - if s[0] != ',': - raise SyntaxError('comma expected in extras: %s' % s) - s = s[1:].lstrip() - if not extras: - extras = None - if remaining: - if remaining[0] == '@': - # it's a URI - remaining = remaining[1:].lstrip() - m = NON_SPACE.match(remaining) - if not m: - raise SyntaxError('invalid URI: %s' % remaining) - uri = m.groups()[0] - t = urlparse(uri) - # there are issues with Python and URL parsing, so this test - # is a bit crude. See bpo-20271, bpo-23505. Python doesn't - # always parse invalid URLs correctly - it should raise - # exceptions for malformed URLs - if not (t.scheme and t.netloc): - raise SyntaxError('Invalid URL: %s' % uri) - remaining = remaining[m.end():].lstrip() - else: - - def get_versions(ver_remaining): - """ - Return a list of operator, version tuples if any are - specified, else None. - """ - m = COMPARE_OP.match(ver_remaining) - versions = None - if m: - versions = [] - while True: - op = m.groups()[0] - ver_remaining = ver_remaining[m.end():] - m = VERSION_IDENTIFIER.match(ver_remaining) - if not m: - raise SyntaxError('invalid version: %s' % ver_remaining) - v = m.groups()[0] - versions.append((op, v)) - ver_remaining = ver_remaining[m.end():] - if not ver_remaining or ver_remaining[0] != ',': - break - ver_remaining = ver_remaining[1:].lstrip() - # Some packages have a trailing comma which would break things - # See issue #148 - if not ver_remaining: - break - m = COMPARE_OP.match(ver_remaining) - if not m: - raise SyntaxError('invalid constraint: %s' % ver_remaining) - if not versions: - versions = None - return versions, ver_remaining - - if remaining[0] != '(': - versions, remaining = get_versions(remaining) - else: - i = remaining.find(')', 1) - if i < 0: - raise SyntaxError('unterminated parenthesis: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - # As a special diversion from PEP 508, allow a version number - # a.b.c in parentheses as a synonym for ~= a.b.c (because this - # is allowed in earlier PEPs) - if COMPARE_OP.match(s): - versions, _ = get_versions(s) - else: - m = VERSION_IDENTIFIER.match(s) - if not m: - raise SyntaxError('invalid constraint: %s' % s) - v = m.groups()[0] - s = s[m.end():].lstrip() - if s: - raise SyntaxError('invalid constraint: %s' % s) - versions = [('~=', v)] - - if remaining: - if remaining[0] != ';': - raise SyntaxError('invalid requirement: %s' % remaining) - remaining = remaining[1:].lstrip() - - mark_expr, remaining = parse_marker(remaining) - - if remaining and remaining[0] != '#': - raise SyntaxError('unexpected trailing data: %s' % remaining) - - if not versions: - rs = distname - else: - rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) - return Container(name=distname, extras=extras, constraints=versions, marker=mark_expr, url=uri, requirement=rs) - - -def get_resources_dests(resources_root, rules): - """Find destinations for resources files""" - - def get_rel_path(root, path): - # normalizes and returns a lstripped-/-separated path - root = root.replace(os.path.sep, '/') - path = path.replace(os.path.sep, '/') - assert path.startswith(root) - return path[len(root):].lstrip('/') - - destinations = {} - for base, suffix, dest in rules: - prefix = os.path.join(resources_root, base) - for abs_base in iglob(prefix): - abs_glob = os.path.join(abs_base, suffix) - for abs_path in iglob(abs_glob): - resource_file = get_rel_path(resources_root, abs_path) - if dest is None: # remove the entry if it was here - destinations.pop(resource_file, None) - else: - rel_path = get_rel_path(abs_base, abs_path) - rel_dest = dest.replace(os.path.sep, '/').rstrip('/') - destinations[resource_file] = rel_dest + '/' + rel_path - return destinations - - -def in_venv(): - if hasattr(sys, 'real_prefix'): - # virtualenv venvs - result = True - else: - # PEP 405 venvs - result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) - return result - - -def get_executable(): - # The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as - # changes to the stub launcher mean that sys.executable always points - # to the stub on OS X - # if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' - # in os.environ): - # result = os.environ['__PYVENV_LAUNCHER__'] - # else: - # result = sys.executable - # return result - # Avoid normcasing: see issue #143 - # result = os.path.normcase(sys.executable) - result = sys.executable - if not isinstance(result, text_type): - result = fsdecode(result) - return result - - -def proceed(prompt, allowed_chars, error_prompt=None, default=None): - p = prompt - while True: - s = raw_input(p) - p = prompt - if not s and default: - s = default - if s: - c = s[0].lower() - if c in allowed_chars: - break - if error_prompt: - p = '%c: %s\n%s' % (c, error_prompt, prompt) - return c - - -def extract_by_key(d, keys): - if isinstance(keys, string_types): - keys = keys.split() - result = {} - for key in keys: - if key in d: - result[key] = d[key] - return result - - -def read_exports(stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - # Try to load as JSON, falling back on legacy format - data = stream.read() - stream = StringIO(data) - try: - jdata = json.load(stream) - result = jdata['extensions']['python.exports']['exports'] - for group, entries in result.items(): - for k, v in entries.items(): - s = '%s = %s' % (k, v) - entry = get_export_entry(s) - assert entry is not None - entries[k] = entry - return result - except Exception: - stream.seek(0, 0) - - def read_stream(cp, stream): - if hasattr(cp, 'read_file'): - cp.read_file(stream) - else: - cp.readfp(stream) - - cp = configparser.ConfigParser() - try: - read_stream(cp, stream) - except configparser.MissingSectionHeaderError: - stream.close() - data = textwrap.dedent(data) - stream = StringIO(data) - read_stream(cp, stream) - - result = {} - for key in cp.sections(): - result[key] = entries = {} - for name, value in cp.items(key): - s = '%s = %s' % (name, value) - entry = get_export_entry(s) - assert entry is not None - # entry.dist = self - entries[name] = entry - return result - - -def write_exports(exports, stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getwriter('utf-8')(stream) - cp = configparser.ConfigParser() - for k, v in exports.items(): - # TODO check k, v for valid values - cp.add_section(k) - for entry in v.values(): - if entry.suffix is None: - s = entry.prefix - else: - s = '%s:%s' % (entry.prefix, entry.suffix) - if entry.flags: - s = '%s [%s]' % (s, ', '.join(entry.flags)) - cp.set(k, entry.name, s) - cp.write(stream) - - -@contextlib.contextmanager -def tempdir(): - td = tempfile.mkdtemp() - try: - yield td - finally: - shutil.rmtree(td) - - -@contextlib.contextmanager -def chdir(d): - cwd = os.getcwd() - try: - os.chdir(d) - yield - finally: - os.chdir(cwd) - - -@contextlib.contextmanager -def socket_timeout(seconds=15): - cto = socket.getdefaulttimeout() - try: - socket.setdefaulttimeout(seconds) - yield - finally: - socket.setdefaulttimeout(cto) - - -class cached_property(object): - - def __init__(self, func): - self.func = func - # for attr in ('__name__', '__module__', '__doc__'): - # setattr(self, attr, getattr(func, attr, None)) - - def __get__(self, obj, cls=None): - if obj is None: - return self - value = self.func(obj) - object.__setattr__(obj, self.func.__name__, value) - # obj.__dict__[self.func.__name__] = value = self.func(obj) - return value - - -def convert_path(pathname): - """Return 'pathname' as a name that will work on the native filesystem. - - The path is split on '/' and put back together again using the current - directory separator. Needed because filenames in the setup script are - always supplied in Unix style, and have to be converted to the local - convention before we can actually use them in the filesystem. Raises - ValueError on non-Unix-ish systems if 'pathname' either starts or - ends with a slash. - """ - if os.sep == '/': - return pathname - if not pathname: - return pathname - if pathname[0] == '/': - raise ValueError("path '%s' cannot be absolute" % pathname) - if pathname[-1] == '/': - raise ValueError("path '%s' cannot end with '/'" % pathname) - - paths = pathname.split('/') - while os.curdir in paths: - paths.remove(os.curdir) - if not paths: - return os.curdir - return os.path.join(*paths) - - -class FileOperator(object): - - def __init__(self, dry_run=False): - self.dry_run = dry_run - self.ensured = set() - self._init_record() - - def _init_record(self): - self.record = False - self.files_written = set() - self.dirs_created = set() - - def record_as_written(self, path): - if self.record: - self.files_written.add(path) - - def newer(self, source, target): - """Tell if the target is newer than the source. - - Returns true if 'source' exists and is more recently modified than - 'target', or if 'source' exists and 'target' doesn't. - - Returns false if both exist and 'target' is the same age or younger - than 'source'. Raise PackagingFileError if 'source' does not exist. - - Note that this test is not very accurate: files created in the same - second will have the same "age". - """ - if not os.path.exists(source): - raise DistlibException("file '%r' does not exist" % os.path.abspath(source)) - if not os.path.exists(target): - return True - - return os.stat(source).st_mtime > os.stat(target).st_mtime - - def copy_file(self, infile, outfile, check=True): - """Copy a file respecting dry-run and force flags. - """ - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying %s to %s', infile, outfile) - if not self.dry_run: - msg = None - if check: - if os.path.islink(outfile): - msg = '%s is a symlink' % outfile - elif os.path.exists(outfile) and not os.path.isfile(outfile): - msg = '%s is a non-regular file' % outfile - if msg: - raise ValueError(msg + ' which would be overwritten') - shutil.copyfile(infile, outfile) - self.record_as_written(outfile) - - def copy_stream(self, instream, outfile, encoding=None): - assert not os.path.isdir(outfile) - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying stream %s to %s', instream, outfile) - if not self.dry_run: - if encoding is None: - outstream = open(outfile, 'wb') - else: - outstream = codecs.open(outfile, 'w', encoding=encoding) - try: - shutil.copyfileobj(instream, outstream) - finally: - outstream.close() - self.record_as_written(outfile) - - def write_binary_file(self, path, data): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - if os.path.exists(path): - os.remove(path) - with open(path, 'wb') as f: - f.write(data) - self.record_as_written(path) - - def write_text_file(self, path, data, encoding): - self.write_binary_file(path, data.encode(encoding)) - - def set_mode(self, bits, mask, files): - if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): - # Set the executable bits (owner, group, and world) on - # all the files specified. - for f in files: - if self.dry_run: - logger.info("changing mode of %s", f) - else: - mode = (os.stat(f).st_mode | bits) & mask - logger.info("changing mode of %s to %o", f, mode) - os.chmod(f, mode) - - set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) - - def ensure_dir(self, path): - path = os.path.abspath(path) - if path not in self.ensured and not os.path.exists(path): - self.ensured.add(path) - d, f = os.path.split(path) - self.ensure_dir(d) - logger.info('Creating %s' % path) - if not self.dry_run: - os.mkdir(path) - if self.record: - self.dirs_created.add(path) - - def byte_compile(self, path, optimize=False, force=False, prefix=None, hashed_invalidation=False): - dpath = cache_from_source(path, not optimize) - logger.info('Byte-compiling %s to %s', path, dpath) - if not self.dry_run: - if force or self.newer(path, dpath): - if not prefix: - diagpath = None - else: - assert path.startswith(prefix) - diagpath = path[len(prefix):] - compile_kwargs = {} - if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): - if not isinstance(hashed_invalidation, py_compile.PycInvalidationMode): - hashed_invalidation = py_compile.PycInvalidationMode.CHECKED_HASH - compile_kwargs['invalidation_mode'] = hashed_invalidation - py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # raise error - self.record_as_written(dpath) - return dpath - - def ensure_removed(self, path): - if os.path.exists(path): - if os.path.isdir(path) and not os.path.islink(path): - logger.debug('Removing directory tree at %s', path) - if not self.dry_run: - shutil.rmtree(path) - if self.record: - if path in self.dirs_created: - self.dirs_created.remove(path) - else: - if os.path.islink(path): - s = 'link' - else: - s = 'file' - logger.debug('Removing %s %s', s, path) - if not self.dry_run: - os.remove(path) - if self.record: - if path in self.files_written: - self.files_written.remove(path) - - def is_writable(self, path): - result = False - while not result: - if os.path.exists(path): - result = os.access(path, os.W_OK) - break - parent = os.path.dirname(path) - if parent == path: - break - path = parent - return result - - def commit(self): - """ - Commit recorded changes, turn off recording, return - changes. - """ - assert self.record - result = self.files_written, self.dirs_created - self._init_record() - return result - - def rollback(self): - if not self.dry_run: - for f in list(self.files_written): - if os.path.exists(f): - os.remove(f) - # dirs should all be empty now, except perhaps for - # __pycache__ subdirs - # reverse so that subdirs appear before their parents - dirs = sorted(self.dirs_created, reverse=True) - for d in dirs: - flist = os.listdir(d) - if flist: - assert flist == ['__pycache__'] - sd = os.path.join(d, flist[0]) - os.rmdir(sd) - os.rmdir(d) # should fail if non-empty - self._init_record() - - -def resolve(module_name, dotted_path): - if module_name in sys.modules: - mod = sys.modules[module_name] - else: - mod = __import__(module_name) - if dotted_path is None: - result = mod - else: - parts = dotted_path.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - -class ExportEntry(object): - - def __init__(self, name, prefix, suffix, flags): - self.name = name - self.prefix = prefix - self.suffix = suffix - self.flags = flags - - @cached_property - def value(self): - return resolve(self.prefix, self.suffix) - - def __repr__(self): # pragma: no cover - return '<ExportEntry %s = %s:%s %s>' % (self.name, self.prefix, self.suffix, self.flags) - - def __eq__(self, other): - if not isinstance(other, ExportEntry): - result = False - else: - result = (self.name == other.name and self.prefix == other.prefix and self.suffix == other.suffix and - self.flags == other.flags) - return result - - __hash__ = object.__hash__ - - -ENTRY_RE = re.compile( - r'''(?P<name>([^\[]\S*)) - \s*=\s*(?P<callable>(\w+)([:\.]\w+)*) - \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? - ''', re.VERBOSE) - - -def get_export_entry(specification): - m = ENTRY_RE.search(specification) - if not m: - result = None - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - else: - d = m.groupdict() - name = d['name'] - path = d['callable'] - colons = path.count(':') - if colons == 0: - prefix, suffix = path, None - else: - if colons != 1: - raise DistlibException("Invalid specification " - "'%s'" % specification) - prefix, suffix = path.split(':') - flags = d['flags'] - if flags is None: - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - flags = [] - else: - flags = [f.strip() for f in flags.split(',')] - result = ExportEntry(name, prefix, suffix, flags) - return result - - -def get_cache_base(suffix=None): - """ - Return the default base location for distlib caches. If the directory does - not exist, it is created. Use the suffix provided for the base directory, - and default to '.distlib' if it isn't provided. - - On Windows, if LOCALAPPDATA is defined in the environment, then it is - assumed to be a directory, and will be the parent directory of the result. - On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home - directory - using os.expanduser('~') - will be the parent directory of - the result. - - The result is just the directory '.distlib' in the parent directory as - determined above, or with the name specified with ``suffix``. - """ - if suffix is None: - suffix = '.distlib' - if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: - result = os.path.expandvars('$localappdata') - else: - # Assume posix, or old Windows - result = os.path.expanduser('~') - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if os.path.isdir(result): - usable = os.access(result, os.W_OK) - if not usable: - logger.warning('Directory exists but is not writable: %s', result) - else: - try: - os.makedirs(result) - usable = True - except OSError: - logger.warning('Unable to create %s', result, exc_info=True) - usable = False - if not usable: - result = tempfile.mkdtemp() - logger.warning('Default location unusable, using %s', result) - return os.path.join(result, suffix) - - -def path_to_cache_dir(path, use_abspath=True): - """ - Convert an absolute path to a directory name for use in a cache. - - The algorithm used is: - - #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. - #. Any occurrence of ``os.sep`` is replaced with ``'--'``. - #. ``'.cache'`` is appended. - """ - d, p = os.path.splitdrive(os.path.abspath(path) if use_abspath else path) - if d: - d = d.replace(':', '---') - p = p.replace(os.sep, '--') - return d + p + '.cache' - - -def ensure_slash(s): - if not s.endswith('/'): - return s + '/' - return s - - -def parse_credentials(netloc): - username = password = None - if '@' in netloc: - prefix, netloc = netloc.rsplit('@', 1) - if ':' not in prefix: - username = prefix - else: - username, password = prefix.split(':', 1) - if username: - username = unquote(username) - if password: - password = unquote(password) - return username, password, netloc - - -def get_process_umask(): - result = os.umask(0o22) - os.umask(result) - return result - - -def is_string_sequence(seq): - result = True - i = None - for i, s in enumerate(seq): - if not isinstance(s, string_types): - result = False - break - assert i is not None - return result - - -PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' - '([a-z0-9_.+-]+)', re.I) -PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') - - -def split_filename(filename, project_name=None): - """ - Extract name, version, python version from a filename (no extension) - - Return name, version, pyver or None - """ - result = None - pyver = None - filename = unquote(filename).replace(' ', '-') - m = PYTHON_VERSION.search(filename) - if m: - pyver = m.group(1) - filename = filename[:m.start()] - if project_name and len(filename) > len(project_name) + 1: - m = re.match(re.escape(project_name) + r'\b', filename) - if m: - n = m.end() - result = filename[:n], filename[n + 1:], pyver - if result is None: - m = PROJECT_NAME_AND_VERSION.match(filename) - if m: - result = m.group(1), m.group(3), pyver - return result - - -# Allow spaces in name because of legacy dists like "Twisted Core" -NAME_VERSION_RE = re.compile(r'(?P<name>[\w .-]+)\s*' - r'\(\s*(?P<ver>[^\s)]+)\)$') - - -def parse_name_and_version(p): - """ - A utility method used to get name and version from a string. - - From e.g. a Provides-Dist value. - - :param p: A value in a form 'foo (1.0)' - :return: The name and version as a tuple. - """ - m = NAME_VERSION_RE.match(p) - if not m: - raise DistlibException('Ill-formed name/version string: \'%s\'' % p) - d = m.groupdict() - return d['name'].strip().lower(), d['ver'] - - -def get_extras(requested, available): - result = set() - requested = set(requested or []) - available = set(available or []) - if '*' in requested: - requested.remove('*') - result |= available - for r in requested: - if r == '-': - result.add(r) - elif r.startswith('-'): - unwanted = r[1:] - if unwanted not in available: - logger.warning('undeclared extra: %s' % unwanted) - if unwanted in result: - result.remove(unwanted) - else: - if r not in available: - logger.warning('undeclared extra: %s' % r) - result.add(r) - return result - - -# -# Extended metadata functionality -# - - -def _get_external_data(url): - result = {} - try: - # urlopen might fail if it runs into redirections, - # because of Python issue #13696. Fixed in locators - # using a custom redirect handler. - resp = urlopen(url) - headers = resp.info() - ct = headers.get('Content-Type') - if not ct.startswith('application/json'): - logger.debug('Unexpected response for JSON request: %s', ct) - else: - reader = codecs.getreader('utf-8')(resp) - # data = reader.read().decode('utf-8') - # result = json.loads(data) - result = json.load(reader) - except Exception as e: - logger.exception('Failed to get external data for %s: %s', url, e) - return result - - -_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' - - -def get_project_data(name): - url = '%s/%s/project.json' % (name[0].upper(), name) - url = urljoin(_external_data_base_url, url) - result = _get_external_data(url) - return result - - -def get_package_data(name, version): - url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) - url = urljoin(_external_data_base_url, url) - return _get_external_data(url) - - -class Cache(object): - """ - A class implementing a cache for resources that need to live in the file system - e.g. shared libraries. This class was moved from resources to here because it - could be used by other modules, e.g. the wheel module. - """ - - def __init__(self, base): - """ - Initialise an instance. - - :param base: The base directory where the cache should be located. - """ - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if not os.path.isdir(base): # pragma: no cover - os.makedirs(base) - if (os.stat(base).st_mode & 0o77) != 0: - logger.warning('Directory \'%s\' is not private', base) - self.base = os.path.abspath(os.path.normpath(base)) - - def prefix_to_dir(self, prefix, use_abspath=True): - """ - Converts a resource prefix to a directory name in the cache. - """ - return path_to_cache_dir(prefix, use_abspath=use_abspath) - - def clear(self): - """ - Clear the cache. - """ - not_removed = [] - for fn in os.listdir(self.base): - fn = os.path.join(self.base, fn) - try: - if os.path.islink(fn) or os.path.isfile(fn): - os.remove(fn) - elif os.path.isdir(fn): - shutil.rmtree(fn) - except Exception: - not_removed.append(fn) - return not_removed - - -class EventMixin(object): - """ - A very simple publish/subscribe system. - """ - - def __init__(self): - self._subscribers = {} - - def add(self, event, subscriber, append=True): - """ - Add a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be added (and called when the - event is published). - :param append: Whether to append or prepend the subscriber to an - existing subscriber list for the event. - """ - subs = self._subscribers - if event not in subs: - subs[event] = deque([subscriber]) - else: - sq = subs[event] - if append: - sq.append(subscriber) - else: - sq.appendleft(subscriber) - - def remove(self, event, subscriber): - """ - Remove a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be removed. - """ - subs = self._subscribers - if event not in subs: - raise ValueError('No subscribers: %r' % event) - subs[event].remove(subscriber) - - def get_subscribers(self, event): - """ - Return an iterator for the subscribers for an event. - :param event: The event to return subscribers for. - """ - return iter(self._subscribers.get(event, ())) - - def publish(self, event, *args, **kwargs): - """ - Publish a event and return a list of values returned by its - subscribers. - - :param event: The event to publish. - :param args: The positional arguments to pass to the event's - subscribers. - :param kwargs: The keyword arguments to pass to the event's - subscribers. - """ - result = [] - for subscriber in self.get_subscribers(event): - try: - value = subscriber(event, *args, **kwargs) - except Exception: - logger.exception('Exception during event publication') - value = None - result.append(value) - logger.debug('publish %s: args = %s, kwargs = %s, result = %s', event, args, kwargs, result) - return result - - -# -# Simple sequencing -# -class Sequencer(object): - - def __init__(self): - self._preds = {} - self._succs = {} - self._nodes = set() # nodes with no preds/succs - - def add_node(self, node): - self._nodes.add(node) - - def remove_node(self, node, edges=False): - if node in self._nodes: - self._nodes.remove(node) - if edges: - for p in set(self._preds.get(node, ())): - self.remove(p, node) - for s in set(self._succs.get(node, ())): - self.remove(node, s) - # Remove empties - for k, v in list(self._preds.items()): - if not v: - del self._preds[k] - for k, v in list(self._succs.items()): - if not v: - del self._succs[k] - - def add(self, pred, succ): - assert pred != succ - self._preds.setdefault(succ, set()).add(pred) - self._succs.setdefault(pred, set()).add(succ) - - def remove(self, pred, succ): - assert pred != succ - try: - preds = self._preds[succ] - succs = self._succs[pred] - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of anything' % succ) - try: - preds.remove(pred) - succs.remove(succ) - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of %r' % (succ, pred)) - - def is_step(self, step): - return (step in self._preds or step in self._succs or step in self._nodes) - - def get_steps(self, final): - if not self.is_step(final): - raise ValueError('Unknown: %r' % final) - result = [] - todo = [] - seen = set() - todo.append(final) - while todo: - step = todo.pop(0) - if step in seen: - # if a step was already seen, - # move it to the end (so it will appear earlier - # when reversed on return) ... but not for the - # final step, as that would be confusing for - # users - if step != final: - result.remove(step) - result.append(step) - else: - seen.add(step) - result.append(step) - preds = self._preds.get(step, ()) - todo.extend(preds) - return reversed(result) - - @property - def strong_connections(self): - # http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm - index_counter = [0] - stack = [] - lowlinks = {} - index = {} - result = [] - - graph = self._succs - - def strongconnect(node): - # set the depth index for this node to the smallest unused index - index[node] = index_counter[0] - lowlinks[node] = index_counter[0] - index_counter[0] += 1 - stack.append(node) - - # Consider successors - try: - successors = graph[node] - except Exception: - successors = [] - for successor in successors: - if successor not in lowlinks: - # Successor has not yet been visited - strongconnect(successor) - lowlinks[node] = min(lowlinks[node], lowlinks[successor]) - elif successor in stack: - # the successor is in the stack and hence in the current - # strongly connected component (SCC) - lowlinks[node] = min(lowlinks[node], index[successor]) - - # If `node` is a root node, pop the stack and generate an SCC - if lowlinks[node] == index[node]: - connected_component = [] - - while True: - successor = stack.pop() - connected_component.append(successor) - if successor == node: - break - component = tuple(connected_component) - # storing the result - result.append(component) - - for node in graph: - if node not in lowlinks: - strongconnect(node) - - return result - - @property - def dot(self): - result = ['digraph G {'] - for succ in self._preds: - preds = self._preds[succ] - for pred in preds: - result.append(' %s -> %s;' % (pred, succ)) - for node in self._nodes: - result.append(' %s;' % node) - result.append('}') - return '\n'.join(result) - - -# -# Unarchiving functionality for zip, tar, tgz, tbz, whl -# - -ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz', '.whl') - - -def unarchive(archive_filename, dest_dir, format=None, check=True): - - def check_path(path): - if not isinstance(path, text_type): - path = path.decode('utf-8') - p = os.path.abspath(os.path.join(dest_dir, path)) - if not p.startswith(dest_dir) or p[plen] != os.sep: - raise ValueError('path outside destination: %r' % p) - - dest_dir = os.path.abspath(dest_dir) - plen = len(dest_dir) - archive = None - if format is None: - if archive_filename.endswith(('.zip', '.whl')): - format = 'zip' - elif archive_filename.endswith(('.tar.gz', '.tgz')): - format = 'tgz' - mode = 'r:gz' - elif archive_filename.endswith(('.tar.bz2', '.tbz')): - format = 'tbz' - mode = 'r:bz2' - elif archive_filename.endswith('.tar'): - format = 'tar' - mode = 'r' - else: # pragma: no cover - raise ValueError('Unknown format for %r' % archive_filename) - try: - if format == 'zip': - archive = ZipFile(archive_filename, 'r') - if check: - names = archive.namelist() - for name in names: - check_path(name) - else: - archive = tarfile.open(archive_filename, mode) - if check: - names = archive.getnames() - for name in names: - check_path(name) - if format != 'zip' and sys.version_info[0] < 3: - # See Python issue 17153. If the dest path contains Unicode, - # tarfile extraction fails on Python 2.x if a member path name - # contains non-ASCII characters - it leads to an implicit - # bytes -> unicode conversion using ASCII to decode. - for tarinfo in archive.getmembers(): - if not isinstance(tarinfo.name, text_type): - tarinfo.name = tarinfo.name.decode('utf-8') - - # Limit extraction of dangerous items, if this Python - # allows it easily. If not, just trust the input. - # See: https://docs.python.org/3/library/tarfile.html#extraction-filters - def extraction_filter(member, path): - """Run tarfile.tar_filter, but raise the expected ValueError""" - # This is only called if the current Python has tarfile filters - try: - return tarfile.tar_filter(member, path) - except tarfile.FilterError as exc: - raise ValueError(str(exc)) - - archive.extraction_filter = extraction_filter - - archive.extractall(dest_dir) - - finally: - if archive: - archive.close() - - -def zip_dir(directory): - """zip a directory tree into a BytesIO object""" - result = io.BytesIO() - dlen = len(directory) - with ZipFile(result, "w") as zf: - for root, dirs, files in os.walk(directory): - for name in files: - full = os.path.join(root, name) - rel = root[dlen:] - dest = os.path.join(rel, name) - zf.write(full, dest) - return result - - -# -# Simple progress bar -# - -UNITS = ('', 'K', 'M', 'G', 'T', 'P') - - -class Progress(object): - unknown = 'UNKNOWN' - - def __init__(self, minval=0, maxval=100): - assert maxval is None or maxval >= minval - self.min = self.cur = minval - self.max = maxval - self.started = None - self.elapsed = 0 - self.done = False - - def update(self, curval): - assert self.min <= curval - assert self.max is None or curval <= self.max - self.cur = curval - now = time.time() - if self.started is None: - self.started = now - else: - self.elapsed = now - self.started - - def increment(self, incr): - assert incr >= 0 - self.update(self.cur + incr) - - def start(self): - self.update(self.min) - return self - - def stop(self): - if self.max is not None: - self.update(self.max) - self.done = True - - @property - def maximum(self): - return self.unknown if self.max is None else self.max - - @property - def percentage(self): - if self.done: - result = '100 %' - elif self.max is None: - result = ' ?? %' - else: - v = 100.0 * (self.cur - self.min) / (self.max - self.min) - result = '%3d %%' % v - return result - - def format_duration(self, duration): - if (duration <= 0) and self.max is None or self.cur == self.min: - result = '??:??:??' - # elif duration < 1: - # result = '--:--:--' - else: - result = time.strftime('%H:%M:%S', time.gmtime(duration)) - return result - - @property - def ETA(self): - if self.done: - prefix = 'Done' - t = self.elapsed - # import pdb; pdb.set_trace() - else: - prefix = 'ETA ' - if self.max is None: - t = -1 - elif self.elapsed == 0 or (self.cur == self.min): - t = 0 - else: - # import pdb; pdb.set_trace() - t = float(self.max - self.min) - t /= self.cur - self.min - t = (t - 1) * self.elapsed - return '%s: %s' % (prefix, self.format_duration(t)) - - @property - def speed(self): - if self.elapsed == 0: - result = 0.0 - else: - result = (self.cur - self.min) / self.elapsed - for unit in UNITS: - if result < 1000: - break - result /= 1000.0 - return '%d %sB/s' % (result, unit) - - -# -# Glob functionality -# - -RICH_GLOB = re.compile(r'\{([^}]*)\}') -_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') -_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') - - -def iglob(path_glob): - """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" - if _CHECK_RECURSIVE_GLOB.search(path_glob): - msg = """invalid glob %r: recursive glob "**" must be used alone""" - raise ValueError(msg % path_glob) - if _CHECK_MISMATCH_SET.search(path_glob): - msg = """invalid glob %r: mismatching set marker '{' or '}'""" - raise ValueError(msg % path_glob) - return _iglob(path_glob) - - -def _iglob(path_glob): - rich_path_glob = RICH_GLOB.split(path_glob, 1) - if len(rich_path_glob) > 1: - assert len(rich_path_glob) == 3, rich_path_glob - prefix, set, suffix = rich_path_glob - for item in set.split(','): - for path in _iglob(''.join((prefix, item, suffix))): - yield path - else: - if '**' not in path_glob: - for item in std_iglob(path_glob): - yield item - else: - prefix, radical = path_glob.split('**', 1) - if prefix == '': - prefix = '.' - if radical == '': - radical = '*' - else: - # we support both - radical = radical.lstrip('/') - radical = radical.lstrip('\\') - for path, dir, files in os.walk(prefix): - path = os.path.normpath(path) - for fn in _iglob(os.path.join(path, radical)): - yield fn - - -if ssl: - from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, CertificateError) - - # - # HTTPSConnection which verifies certificates/matches domains - # - - class HTTPSConnection(httplib.HTTPSConnection): - ca_certs = None # set this to the path to the certs file (.pem) - check_domain = True # only used if ca_certs is not None - - # noinspection PyPropertyAccess - def connect(self): - sock = socket.create_connection((self.host, self.port), self.timeout) - if getattr(self, '_tunnel_host', False): - self.sock = sock - self._tunnel() - - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - if hasattr(ssl, 'OP_NO_SSLv2'): - context.options |= ssl.OP_NO_SSLv2 - if getattr(self, 'cert_file', None): - context.load_cert_chain(self.cert_file, self.key_file) - kwargs = {} - if self.ca_certs: - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(cafile=self.ca_certs) - if getattr(ssl, 'HAS_SNI', False): - kwargs['server_hostname'] = self.host - - self.sock = context.wrap_socket(sock, **kwargs) - if self.ca_certs and self.check_domain: - try: - match_hostname(self.sock.getpeercert(), self.host) - logger.debug('Host verified: %s', self.host) - except CertificateError: # pragma: no cover - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - - class HTTPSHandler(BaseHTTPSHandler): - - def __init__(self, ca_certs, check_domain=True): - BaseHTTPSHandler.__init__(self) - self.ca_certs = ca_certs - self.check_domain = check_domain - - def _conn_maker(self, *args, **kwargs): - """ - This is called to create a connection instance. Normally you'd - pass a connection class to do_open, but it doesn't actually check for - a class, and just expects a callable. As long as we behave just as a - constructor would have, we should be OK. If it ever changes so that - we *must* pass a class, we'll create an UnsafeHTTPSConnection class - which just sets check_domain to False in the class definition, and - choose which one to pass to do_open. - """ - result = HTTPSConnection(*args, **kwargs) - if self.ca_certs: - result.ca_certs = self.ca_certs - result.check_domain = self.check_domain - return result - - def https_open(self, req): - try: - return self.do_open(self._conn_maker, req) - except URLError as e: - if 'certificate verify failed' in str(e.reason): - raise CertificateError('Unable to verify server certificate ' - 'for %s' % req.host) - else: - raise - - # - # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- - # Middle proxy using HTTP listens on port 443, or an index mistakenly serves - # HTML containing a http://xyz link when it should be https://xyz), - # you can use the following handler class, which does not allow HTTP traffic. - # - # It works by inheriting from HTTPHandler - so build_opener won't add a - # handler for HTTP itself. - # - class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): - - def http_open(self, req): - raise URLError('Unexpected HTTP request on what should be a secure ' - 'connection: %s' % req) - - -# -# XML-RPC with timeouts -# -class Transport(xmlrpclib.Transport): - - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.Transport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, x509 = self.get_host_info(host) - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPConnection(h) - return self._connection[1] - - -if ssl: - - class SafeTransport(xmlrpclib.SafeTransport): - - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.SafeTransport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, kwargs = self.get_host_info(host) - if not kwargs: - kwargs = {} - kwargs['timeout'] = self.timeout - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPSConnection(h, None, **kwargs) - return self._connection[1] - - -class ServerProxy(xmlrpclib.ServerProxy): - - def __init__(self, uri, **kwargs): - self.timeout = timeout = kwargs.pop('timeout', None) - # The above classes only come into play if a timeout - # is specified - if timeout is not None: - # scheme = splittype(uri) # deprecated as of Python 3.8 - scheme = urlparse(uri)[0] - use_datetime = kwargs.get('use_datetime', 0) - if scheme == 'https': - tcls = SafeTransport - else: - tcls = Transport - kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) - self.transport = t - xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) - - -# -# CSV functionality. This is provided because on 2.x, the csv module can't -# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. -# - - -def _csv_open(fn, mode, **kwargs): - if sys.version_info[0] < 3: - mode += 'b' - else: - kwargs['newline'] = '' - # Python 3 determines encoding from locale. Force 'utf-8' - # file encoding to match other forced utf-8 encoding - kwargs['encoding'] = 'utf-8' - return open(fn, mode, **kwargs) - - -class CSVBase(object): - defaults = { - 'delimiter': str(','), # The strs are used because we need native - 'quotechar': str('"'), # str in the csv API (2.x won't take - 'lineterminator': str('\n') # Unicode) - } - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.stream.close() - - -class CSVReader(CSVBase): - - def __init__(self, **kwargs): - if 'stream' in kwargs: - stream = kwargs['stream'] - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - self.stream = stream - else: - self.stream = _csv_open(kwargs['path'], 'r') - self.reader = csv.reader(self.stream, **self.defaults) - - def __iter__(self): - return self - - def next(self): - result = next(self.reader) - if sys.version_info[0] < 3: - for i, item in enumerate(result): - if not isinstance(item, text_type): - result[i] = item.decode('utf-8') - return result - - __next__ = next - - -class CSVWriter(CSVBase): - - def __init__(self, fn, **kwargs): - self.stream = _csv_open(fn, 'w') - self.writer = csv.writer(self.stream, **self.defaults) - - def writerow(self, row): - if sys.version_info[0] < 3: - r = [] - for item in row: - if isinstance(item, text_type): - item = item.encode('utf-8') - r.append(item) - row = r - self.writer.writerow(row) - - -# -# Configurator functionality -# - - -class Configurator(BaseConfigurator): - - value_converters = dict(BaseConfigurator.value_converters) - value_converters['inc'] = 'inc_convert' - - def __init__(self, config, base=None): - super(Configurator, self).__init__(config) - self.base = base or os.getcwd() - - def configure_custom(self, config): - - def convert(o): - if isinstance(o, (list, tuple)): - result = type(o)([convert(i) for i in o]) - elif isinstance(o, dict): - if '()' in o: - result = self.configure_custom(o) - else: - result = {} - for k in o: - result[k] = convert(o[k]) - else: - result = self.convert(o) - return result - - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - args = config.pop('[]', ()) - if args: - args = tuple([convert(o) for o in args]) - items = [(k, convert(config[k])) for k in config if valid_ident(k)] - kwargs = dict(items) - result = c(*args, **kwargs) - if props: - for n, v in props.items(): - setattr(result, n, convert(v)) - return result - - def __getitem__(self, key): - result = self.config[key] - if isinstance(result, dict) and '()' in result: - self.config[key] = result = self.configure_custom(result) - return result - - def inc_convert(self, value): - """Default converter for the inc:// protocol.""" - if not os.path.isabs(value): - value = os.path.join(self.base, value) - with codecs.open(value, 'r', encoding='utf-8') as f: - result = json.load(f) - return result - - -class SubprocessMixin(object): - """ - Mixin for running subprocesses and capturing their output - """ - - def __init__(self, verbose=False, progress=None): - self.verbose = verbose - self.progress = progress - - def reader(self, stream, context): - """ - Read lines from a subprocess' output stream and either pass to a progress - callable (if specified) or write progress information to sys.stderr. - """ - progress = self.progress - verbose = self.verbose - while True: - s = stream.readline() - if not s: - break - if progress is not None: - progress(s, context) - else: - if not verbose: - sys.stderr.write('.') - else: - sys.stderr.write(s.decode('utf-8')) - sys.stderr.flush() - stream.close() - - def run_command(self, cmd, **kwargs): - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) - t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) - t1.start() - t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) - t2.start() - p.wait() - t1.join() - t2.join() - if self.progress is not None: - self.progress('done.', 'main') - elif self.verbose: - sys.stderr.write('done.\n') - return p - - -def normalize_name(name): - """Normalize a python package name a la PEP 503""" - # https://www.python.org/dev/peps/pep-0503/#normalized-names - return re.sub('[-_.]+', '-', name).lower() - - -# def _get_pypirc_command(): -# """ -# Get the distutils command for interacting with PyPI configurations. -# :return: the command. -# """ -# from distutils.core import Distribution -# from distutils.config import PyPIRCCommand -# d = Distribution() -# return PyPIRCCommand(d) - - -class PyPIRCFile(object): - - DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' - DEFAULT_REALM = 'pypi' - - def __init__(self, fn=None, url=None): - if fn is None: - fn = os.path.join(os.path.expanduser('~'), '.pypirc') - self.filename = fn - self.url = url - - def read(self): - result = {} - - if os.path.exists(self.filename): - repository = self.url or self.DEFAULT_REPOSITORY - - config = configparser.RawConfigParser() - config.read(self.filename) - sections = config.sections() - if 'distutils' in sections: - # let's get the list of servers - index_servers = config.get('distutils', 'index-servers') - _servers = [server.strip() for server in index_servers.split('\n') if server.strip() != ''] - if _servers == []: - # nothing set, let's try to get the default pypi - if 'pypi' in sections: - _servers = ['pypi'] - else: - for server in _servers: - result = {'server': server} - result['username'] = config.get(server, 'username') - - # optional params - for key, default in (('repository', self.DEFAULT_REPOSITORY), ('realm', self.DEFAULT_REALM), - ('password', None)): - if config.has_option(server, key): - result[key] = config.get(server, key) - else: - result[key] = default - - # work around people having "repository" for the "pypi" - # section of their config set to the HTTP (rather than - # HTTPS) URL - if (server == 'pypi' and repository in (self.DEFAULT_REPOSITORY, 'pypi')): - result['repository'] = self.DEFAULT_REPOSITORY - elif (result['server'] != repository and result['repository'] != repository): - result = {} - elif 'server-login' in sections: - # old format - server = 'server-login' - if config.has_option(server, 'repository'): - repository = config.get(server, 'repository') - else: - repository = self.DEFAULT_REPOSITORY - result = { - 'username': config.get(server, 'username'), - 'password': config.get(server, 'password'), - 'repository': repository, - 'server': server, - 'realm': self.DEFAULT_REALM - } - return result - - def update(self, username, password): - # import pdb; pdb.set_trace() - config = configparser.RawConfigParser() - fn = self.filename - config.read(fn) - if not config.has_section('pypi'): - config.add_section('pypi') - config.set('pypi', 'username', username) - config.set('pypi', 'password', password) - with open(fn, 'w') as f: - config.write(f) - - -def _load_pypirc(index): - """ - Read the PyPI access configuration as supported by distutils. - """ - return PyPIRCFile(url=index.url).read() - - -def _store_pypirc(index): - PyPIRCFile().update(index.username, index.password) - - -# -# get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor -# tweaks -# - - -def get_host_platform(): - """Return a string that identifies the current platform. This is used mainly to - distinguish platform-specific build directories and platform-specific built - distributions. Typically includes the OS name and version and the - architecture (as supplied by 'os.uname()'), although the exact information - included depends on the OS; eg. on Linux, the kernel version isn't - particularly important. - - Examples of returned values: - linux-i586 - linux-alpha (?) - solaris-2.6-sun4u - - Windows will return one of: - win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) - win32 (all others - specifically, sys.platform is returned) - - For other non-POSIX platforms, currently just returns 'sys.platform'. - - """ - if os.name == 'nt': - if 'amd64' in sys.version.lower(): - return 'win-amd64' - if '(arm)' in sys.version.lower(): - return 'win-arm32' - if '(arm64)' in sys.version.lower(): - return 'win-arm64' - return sys.platform - - # Set for cross builds explicitly - if "_PYTHON_HOST_PLATFORM" in os.environ: - return os.environ["_PYTHON_HOST_PLATFORM"] - - if os.name != 'posix' or not hasattr(os, 'uname'): - # XXX what about the architecture? NT is Intel or Alpha, - # Mac OS is M68k or PPC, etc. - return sys.platform - - # Try to distinguish various flavours of Unix - - (osname, host, release, version, machine) = os.uname() - - # Convert the OS name to lowercase, remove '/' characters, and translate - # spaces (for "Power Macintosh") - osname = osname.lower().replace('/', '') - machine = machine.replace(' ', '_').replace('/', '-') - - if osname[:5] == 'linux': - # At least on Linux/Intel, 'machine' is the processor -- - # i386, etc. - # XXX what about Alpha, SPARC, etc? - return "%s-%s" % (osname, machine) - - elif osname[:5] == 'sunos': - if release[0] >= '5': # SunOS 5 == Solaris 2 - osname = 'solaris' - release = '%d.%s' % (int(release[0]) - 3, release[2:]) - # We can't use 'platform.architecture()[0]' because a - # bootstrap problem. We use a dict to get an error - # if some suspicious happens. - bitness = {2147483647: '32bit', 9223372036854775807: '64bit'} - machine += '.%s' % bitness[sys.maxsize] - # fall through to standard osname-release-machine representation - elif osname[:3] == 'aix': - from _aix_support import aix_platform - return aix_platform() - elif osname[:6] == 'cygwin': - osname = 'cygwin' - rel_re = re.compile(r'[\d.]+', re.ASCII) - m = rel_re.match(release) - if m: - release = m.group() - elif osname[:6] == 'darwin': - import _osx_support - try: - from distutils import sysconfig - except ImportError: - import sysconfig - osname, release, machine = _osx_support.get_platform_osx(sysconfig.get_config_vars(), osname, release, machine) - - return '%s-%s-%s' % (osname, release, machine) - - -_TARGET_TO_PLAT = { - 'x86': 'win32', - 'x64': 'win-amd64', - 'arm': 'win-arm32', -} - - -def get_platform(): - if os.name != 'nt': - return get_host_platform() - cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') - if cross_compilation_target not in _TARGET_TO_PLAT: - return get_host_platform() - return _TARGET_TO_PLAT[cross_compilation_target] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w32.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w32.exe deleted file mode 100644 index 4ee2d3a31b59e8b50f433ecdf0be9e496e8cc3b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91648 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe deleted file mode 100644 index 951d5817c9e6d81c94a173a0d9fead7f1f143331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168448 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64.exe b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distlib/w64.exe deleted file mode 100644 index 5763076d2878093971a0ef9870e1cde7f556b18b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101888 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 bB!6W7g#4-b3-g!cLzth+PZapSNrC?c%T_@< diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/LICENSE deleted file mode 100644 index e06d20818..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__init__.py deleted file mode 100644 index 7686fe85a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -from .distro import ( - NORMALIZED_DISTRO_ID, - NORMALIZED_LSB_ID, - NORMALIZED_OS_ID, - LinuxDistribution, - __version__, - build_number, - codename, - distro_release_attr, - distro_release_info, - id, - info, - like, - linux_distribution, - lsb_release_attr, - lsb_release_info, - major_version, - minor_version, - name, - os_release_attr, - os_release_info, - uname_attr, - uname_info, - version, - version_parts, -) - -__all__ = [ - "NORMALIZED_DISTRO_ID", - "NORMALIZED_LSB_ID", - "NORMALIZED_OS_ID", - "LinuxDistribution", - "build_number", - "codename", - "distro_release_attr", - "distro_release_info", - "id", - "info", - "like", - "linux_distribution", - "lsb_release_attr", - "lsb_release_info", - "major_version", - "minor_version", - "name", - "os_release_attr", - "os_release_info", - "uname_attr", - "uname_info", - "version", - "version_parts", -] - -__version__ = __version__ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__main__.py deleted file mode 100644 index 0c01d5b08..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__main__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .distro import main - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 297bc549e9d86c6c72ca6c9ae26853c7cb8dbb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1005 zcmcJOzi$&U6vus+Ymz3p{BDzW03@aewWXq}C_+d;kQ^yAC@l**ur4_RZts_T@1SL> znD|#1`B#uwyt2Sn(V;7T*G5VOjClCy`Frn|?RU4Tc8Tcq^~(?OEl0?A+{~7FX`Fq~ z#tC_4jEw=I1{l-?lja~tEwJbUEYLjUX#onf2t~RGi?jqKT81*MK!w_1(<)SH4QjLw zb=rUiZ9<c_pherzrc1CymtmQ9phLURy-wE2I5#q2<)zL%HgA%i_0!M|^t!6OI~qTI zI2^oq(r5j_-u`&R27T3-Q-^zxP^!;KqrJ>&D8lrpFA|Vql7fgrRc7oRmx(qRQ<X_7 ze2;}`FyT@ar;*1)H{hz}VMxRz_qm&J<^sq+L=nD@lqo!AWtQcOL#~=WR%BWHtYqC! zCRbBkQL<<|a1SCmYfagK2<Ns|)>SP^uBMq6vMi+(9WUCwv@^YMd1PhJ&K|oGlHFcM z>gOlYLM$Nih$3PUfny@ehzi0+R1q~q9nnBE5iLX;v4mJgbP!#{3Sw2Gx2p0N_xso4 z1@!yB9jF3huJ1GUnVjirM16XE&v~Bcv2a|E%gvpg+s^w)9y+m%4)_!jXX;0(H_@Z8 zCPD!k3Frh|u5CKcj^S+--r3w@TkPoWHrwYx?7P4j1hF#|6DJYC*J5{i=)U2J6N`95 zKXd3sa^vC_HW<UCjIGDVs(3$$ywv9p<PF^z{sGCh#%azljB|6vFwe<9aE2d#ZFkG& QN#S&h)K)*1<ux7p8?LGo;{X5v diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index 88d20421c18cbf124e0d5ccc9eefd160f9d44eb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmXv~PfNov6i=EWMbWbkVTh+8wN{I4LqrfnK}3pzhs=<*LF3vcB$+x-o@8IeqhCe5 zSP%p+dQ<iVOm%zk-tYJR^4?pSo1F$$o}WJXj>V74nTRtcqjgK}!8wfK0oaEI)<MUK zo#q(;sqJ0_9k>Ldad92QX!%bY?iaMd1}xp2@}l$zsgRJP1}djgu8k53*@`Mt(3}zS z2u9VIa=6>Zr<y5^Y06aCYOUcLp?X*<am5m&agvFC+NGNLyx_(fZD^J;<%jrqU@k?m z5k@2;x6Ms*!g85W!-&ZxKIC1jxnaJfNsnGIjU|@>xn@NwRPeu3Fxhie4oYt;7im9Z l+p79gb&sxD^Nk>cZ(#l%%?$5e(88<hJ?#A;;MSC9)4v$%UdjLf diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-314.pyc deleted file mode 100644 index 2b7e1defbc84db110894943d8c8fd71634a64de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61344 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/distro.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/distro.py deleted file mode 100644 index 78ccdfa40..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/distro.py +++ /dev/null @@ -1,1403 +0,0 @@ -#!/usr/bin/env python -# Copyright 2015-2021 Nir Cohen -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -The ``distro`` package (``distro`` stands for Linux Distribution) provides -information about the Linux distribution it runs on, such as a reliable -machine-readable distro ID, or version information. - -It is the recommended replacement for Python's original -:py:func:`platform.linux_distribution` function, but it provides much more -functionality. An alternative implementation became necessary because Python -3.5 deprecated this function, and Python 3.8 removed it altogether. Its -predecessor function :py:func:`platform.dist` was already deprecated since -Python 2.6 and removed in Python 3.8. Still, there are many cases in which -access to OS distribution information is needed. See `Python issue 1322 -<https://bugs.python.org/issue1322>`_ for more information. -""" - -import argparse -import json -import logging -import os -import re -import shlex -import subprocess -import sys -import warnings -from typing import ( - Any, - Callable, - Dict, - Iterable, - Optional, - Sequence, - TextIO, - Tuple, - Type, -) - -try: - from typing import TypedDict -except ImportError: - # Python 3.7 - TypedDict = dict - -__version__ = "1.9.0" - - -class VersionDict(TypedDict): - major: str - minor: str - build_number: str - - -class InfoDict(TypedDict): - id: str - version: str - version_parts: VersionDict - like: str - codename: str - - -_UNIXCONFDIR = os.environ.get("UNIXCONFDIR", "/etc") -_UNIXUSRLIBDIR = os.environ.get("UNIXUSRLIBDIR", "/usr/lib") -_OS_RELEASE_BASENAME = "os-release" - -#: Translation table for normalizing the "ID" attribute defined in os-release -#: files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as defined in the os-release file, translated to lower case, -#: with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_OS_ID = { - "ol": "oracle", # Oracle Linux - "opensuse-leap": "opensuse", # Newer versions of OpenSuSE report as opensuse-leap -} - -#: Translation table for normalizing the "Distributor ID" attribute returned by -#: the lsb_release command, for use by the :func:`distro.id` method. -#: -#: * Key: Value as returned by the lsb_release command, translated to lower -#: case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_LSB_ID = { - "enterpriseenterpriseas": "oracle", # Oracle Enterprise Linux 4 - "enterpriseenterpriseserver": "oracle", # Oracle Linux 5 - "redhatenterpriseworkstation": "rhel", # RHEL 6, 7 Workstation - "redhatenterpriseserver": "rhel", # RHEL 6, 7 Server - "redhatenterprisecomputenode": "rhel", # RHEL 6 ComputeNode -} - -#: Translation table for normalizing the distro ID derived from the file name -#: of distro release files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as derived from the file name of a distro release file, -#: translated to lower case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_DISTRO_ID = { - "redhat": "rhel", # RHEL 6.x, 7.x -} - -# Pattern for content of distro release file (reversed) -_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( - r"(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)" -) - -# Pattern for base file name of distro release file -_DISTRO_RELEASE_BASENAME_PATTERN = re.compile(r"(\w+)[-_](release|version)$") - -# Base file names to be looked up for if _UNIXCONFDIR is not readable. -_DISTRO_RELEASE_BASENAMES = [ - "SuSE-release", - "altlinux-release", - "arch-release", - "base-release", - "centos-release", - "fedora-release", - "gentoo-release", - "mageia-release", - "mandrake-release", - "mandriva-release", - "mandrivalinux-release", - "manjaro-release", - "oracle-release", - "redhat-release", - "rocky-release", - "sl-release", - "slackware-version", -] - -# Base file names to be ignored when searching for distro release file -_DISTRO_RELEASE_IGNORE_BASENAMES = ( - "debian_version", - "lsb-release", - "oem-release", - _OS_RELEASE_BASENAME, - "system-release", - "plesk-release", - "iredmail-release", - "board-release", - "ec2_version", -) - - -def linux_distribution(full_distribution_name: bool = True) -> Tuple[str, str, str]: - """ - .. deprecated:: 1.6.0 - - :func:`distro.linux_distribution()` is deprecated. It should only be - used as a compatibility shim with Python's - :py:func:`platform.linux_distribution()`. Please use :func:`distro.id`, - :func:`distro.version` and :func:`distro.name` instead. - - Return information about the current OS distribution as a tuple - ``(id_name, version, codename)`` with items as follows: - - * ``id_name``: If *full_distribution_name* is false, the result of - :func:`distro.id`. Otherwise, the result of :func:`distro.name`. - - * ``version``: The result of :func:`distro.version`. - - * ``codename``: The extra item (usually in parentheses) after the - os-release version number, or the result of :func:`distro.codename`. - - The interface of this function is compatible with the original - :py:func:`platform.linux_distribution` function, supporting a subset of - its parameters. - - The data it returns may not exactly be the same, because it uses more data - sources than the original function, and that may lead to different data if - the OS distribution is not consistent across multiple data sources it - provides (there are indeed such distributions ...). - - Another reason for differences is the fact that the :func:`distro.id` - method normalizes the distro ID string to a reliable machine-readable value - for a number of popular OS distributions. - """ - warnings.warn( - "distro.linux_distribution() is deprecated. It should only be used as a " - "compatibility shim with Python's platform.linux_distribution(). Please use " - "distro.id(), distro.version() and distro.name() instead.", - DeprecationWarning, - stacklevel=2, - ) - return _distro.linux_distribution(full_distribution_name) - - -def id() -> str: - """ - Return the distro ID of the current distribution, as a - machine-readable string. - - For a number of OS distributions, the returned distro ID value is - *reliable*, in the sense that it is documented and that it does not change - across releases of the distribution. - - This package maintains the following reliable distro ID values: - - ============== ========================================= - Distro ID Distribution - ============== ========================================= - "ubuntu" Ubuntu - "debian" Debian - "rhel" RedHat Enterprise Linux - "centos" CentOS - "fedora" Fedora - "sles" SUSE Linux Enterprise Server - "opensuse" openSUSE - "amzn" Amazon Linux - "arch" Arch Linux - "buildroot" Buildroot - "cloudlinux" CloudLinux OS - "exherbo" Exherbo Linux - "gentoo" GenToo Linux - "ibm_powerkvm" IBM PowerKVM - "kvmibm" KVM for IBM z Systems - "linuxmint" Linux Mint - "mageia" Mageia - "mandriva" Mandriva Linux - "parallels" Parallels - "pidora" Pidora - "raspbian" Raspbian - "oracle" Oracle Linux (and Oracle Enterprise Linux) - "scientific" Scientific Linux - "slackware" Slackware - "xenserver" XenServer - "openbsd" OpenBSD - "netbsd" NetBSD - "freebsd" FreeBSD - "midnightbsd" MidnightBSD - "rocky" Rocky Linux - "aix" AIX - "guix" Guix System - "altlinux" ALT Linux - ============== ========================================= - - If you have a need to get distros for reliable IDs added into this set, - or if you find that the :func:`distro.id` function returns a different - distro ID for one of the listed distros, please create an issue in the - `distro issue tracker`_. - - **Lookup hierarchy and transformations:** - - First, the ID is obtained from the following sources, in the specified - order. The first available and non-empty value is used: - - * the value of the "ID" attribute of the os-release file, - - * the value of the "Distributor ID" attribute returned by the lsb_release - command, - - * the first part of the file name of the distro release file, - - The so determined ID value then passes the following transformations, - before it is returned by this method: - - * it is translated to lower case, - - * blanks (which should not be there anyway) are translated to underscores, - - * a normalization of the ID is performed, based upon - `normalization tables`_. The purpose of this normalization is to ensure - that the ID is as reliable as possible, even across incompatible changes - in the OS distributions. A common reason for an incompatible change is - the addition of an os-release file, or the addition of the lsb_release - command, with ID values that differ from what was previously determined - from the distro release file name. - """ - return _distro.id() - - -def name(pretty: bool = False) -> str: - """ - Return the name of the current OS distribution, as a human-readable - string. - - If *pretty* is false, the name is returned without version or codename. - (e.g. "CentOS Linux") - - If *pretty* is true, the version and codename are appended. - (e.g. "CentOS Linux 7.1.1503 (Core)") - - **Lookup hierarchy:** - - The name is obtained from the following sources, in the specified order. - The first available and non-empty value is used: - - * If *pretty* is false: - - - the value of the "NAME" attribute of the os-release file, - - - the value of the "Distributor ID" attribute returned by the lsb_release - command, - - - the value of the "<name>" field of the distro release file. - - * If *pretty* is true: - - - the value of the "PRETTY_NAME" attribute of the os-release file, - - - the value of the "Description" attribute returned by the lsb_release - command, - - - the value of the "<name>" field of the distro release file, appended - with the value of the pretty version ("<version_id>" and "<codename>" - fields) of the distro release file, if available. - """ - return _distro.name(pretty) - - -def version(pretty: bool = False, best: bool = False) -> str: - """ - Return the version of the current OS distribution, as a human-readable - string. - - If *pretty* is false, the version is returned without codename (e.g. - "7.0"). - - If *pretty* is true, the codename in parenthesis is appended, if the - codename is non-empty (e.g. "7.0 (Maipo)"). - - Some distributions provide version numbers with different precisions in - the different sources of distribution information. Examining the different - sources in a fixed priority order does not always yield the most precise - version (e.g. for Debian 8.2, or CentOS 7.1). - - Some other distributions may not provide this kind of information. In these - cases, an empty string would be returned. This behavior can be observed - with rolling releases distributions (e.g. Arch Linux). - - The *best* parameter can be used to control the approach for the returned - version: - - If *best* is false, the first non-empty version number in priority order of - the examined sources is returned. - - If *best* is true, the most precise version number out of all examined - sources is returned. - - **Lookup hierarchy:** - - In all cases, the version number is obtained from the following sources. - If *best* is false, this order represents the priority order: - - * the value of the "VERSION_ID" attribute of the os-release file, - * the value of the "Release" attribute returned by the lsb_release - command, - * the version number parsed from the "<version_id>" field of the first line - of the distro release file, - * the version number parsed from the "PRETTY_NAME" attribute of the - os-release file, if it follows the format of the distro release files. - * the version number parsed from the "Description" attribute returned by - the lsb_release command, if it follows the format of the distro release - files. - """ - return _distro.version(pretty, best) - - -def version_parts(best: bool = False) -> Tuple[str, str, str]: - """ - Return the version of the current OS distribution as a tuple - ``(major, minor, build_number)`` with items as follows: - - * ``major``: The result of :func:`distro.major_version`. - - * ``minor``: The result of :func:`distro.minor_version`. - - * ``build_number``: The result of :func:`distro.build_number`. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.version_parts(best) - - -def major_version(best: bool = False) -> str: - """ - Return the major version of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The major version is the first - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.major_version(best) - - -def minor_version(best: bool = False) -> str: - """ - Return the minor version of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The minor version is the second - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.minor_version(best) - - -def build_number(best: bool = False) -> str: - """ - Return the build number of the current OS distribution, as a string, - if provided. - Otherwise, the empty string is returned. The build number is the third part - of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.build_number(best) - - -def like() -> str: - """ - Return a space-separated list of distro IDs of distributions that are - closely related to the current OS distribution in regards to packaging - and programming interfaces, for example distributions the current - distribution is a derivative from. - - **Lookup hierarchy:** - - This information item is only provided by the os-release file. - For details, see the description of the "ID_LIKE" attribute in the - `os-release man page - <http://www.freedesktop.org/software/systemd/man/os-release.html>`_. - """ - return _distro.like() - - -def codename() -> str: - """ - Return the codename for the release of the current OS distribution, - as a string. - - If the distribution does not have a codename, an empty string is returned. - - Note that the returned codename is not always really a codename. For - example, openSUSE returns "x86_64". This function does not handle such - cases in any special way and just returns the string it finds, if any. - - **Lookup hierarchy:** - - * the codename within the "VERSION" attribute of the os-release file, if - provided, - - * the value of the "Codename" attribute returned by the lsb_release - command, - - * the value of the "<codename>" field of the distro release file. - """ - return _distro.codename() - - -def info(pretty: bool = False, best: bool = False) -> InfoDict: - """ - Return certain machine-readable information items about the current OS - distribution in a dictionary, as shown in the following example: - - .. sourcecode:: python - - { - 'id': 'rhel', - 'version': '7.0', - 'version_parts': { - 'major': '7', - 'minor': '0', - 'build_number': '' - }, - 'like': 'fedora', - 'codename': 'Maipo' - } - - The dictionary structure and keys are always the same, regardless of which - information items are available in the underlying data sources. The values - for the various keys are as follows: - - * ``id``: The result of :func:`distro.id`. - - * ``version``: The result of :func:`distro.version`. - - * ``version_parts -> major``: The result of :func:`distro.major_version`. - - * ``version_parts -> minor``: The result of :func:`distro.minor_version`. - - * ``version_parts -> build_number``: The result of - :func:`distro.build_number`. - - * ``like``: The result of :func:`distro.like`. - - * ``codename``: The result of :func:`distro.codename`. - - For a description of the *pretty* and *best* parameters, see the - :func:`distro.version` method. - """ - return _distro.info(pretty, best) - - -def os_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the os-release file data source of the current OS distribution. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_info() - - -def lsb_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the lsb_release command data source of the current OS distribution. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_info() - - -def distro_release_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current OS distribution. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_info() - - -def uname_info() -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current OS distribution. - """ - return _distro.uname_info() - - -def os_release_attr(attribute: str) -> str: - """ - Return a single named information item from the os-release file data source - of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_attr(attribute) - - -def lsb_release_attr(attribute: str) -> str: - """ - Return a single named information item from the lsb_release command output - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_attr(attribute) - - -def distro_release_attr(attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_attr(attribute) - - -def uname_attr(attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the current OS distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - """ - return _distro.uname_attr(attribute) - - -try: - from functools import cached_property -except ImportError: - # Python < 3.8 - class cached_property: # type: ignore - """A version of @property which caches the value. On access, it calls the - underlying function and sets the value in `__dict__` so future accesses - will not re-call the property. - """ - - def __init__(self, f: Callable[[Any], Any]) -> None: - self._fname = f.__name__ - self._f = f - - def __get__(self, obj: Any, owner: Type[Any]) -> Any: - assert obj is not None, f"call {self._fname} on an instance" - ret = obj.__dict__[self._fname] = self._f(obj) - return ret - - -class LinuxDistribution: - """ - Provides information about a OS distribution. - - This package creates a private module-global instance of this class with - default initialization arguments, that is used by the - `consolidated accessor functions`_ and `single source accessor functions`_. - By using default initialization arguments, that module-global instance - returns data about the current OS distribution (i.e. the distro this - package runs on). - - Normally, it is not necessary to create additional instances of this class. - However, in situations where control is needed over the exact data sources - that are used, instances of this class can be created with a specific - distro release file, or a specific os-release file, or without invoking the - lsb_release command. - """ - - def __init__( - self, - include_lsb: Optional[bool] = None, - os_release_file: str = "", - distro_release_file: str = "", - include_uname: Optional[bool] = None, - root_dir: Optional[str] = None, - include_oslevel: Optional[bool] = None, - ) -> None: - """ - The initialization method of this class gathers information from the - available data sources, and stores that in private instance attributes. - Subsequent access to the information items uses these private instance - attributes, so that the data sources are read only once. - - Parameters: - - * ``include_lsb`` (bool): Controls whether the - `lsb_release command output`_ is included as a data source. - - If the lsb_release command is not available in the program execution - path, the data source for the lsb_release command will be empty. - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is to be used as a data source. - - An empty string (the default) will cause the default path name to - be used (see `os-release file`_ for details). - - If the specified or defaulted os-release file does not exist, the - data source for the os-release file will be empty. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is to be used as a data source. - - An empty string (the default) will cause a default search algorithm - to be used (see `distro release file`_ for details). - - If the specified distro release file does not exist, or if no default - distro release file can be found, the data source for the distro - release file will be empty. - - * ``include_uname`` (bool): Controls whether uname command output is - included as a data source. If the uname command is not available in - the program execution path the data source for the uname command will - be empty. - - * ``root_dir`` (string): The absolute path to the root directory to use - to find distro-related information files. Note that ``include_*`` - parameters must not be enabled in combination with ``root_dir``. - - * ``include_oslevel`` (bool): Controls whether (AIX) oslevel command - output is included as a data source. If the oslevel command is not - available in the program execution path the data source will be - empty. - - Public instance attributes: - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. - This controls whether the lsb information will be loaded. - - * ``include_uname`` (bool): The result of the ``include_uname`` - parameter. This controls whether the uname information will - be loaded. - - * ``include_oslevel`` (bool): The result of the ``include_oslevel`` - parameter. This controls whether (AIX) oslevel information will be - loaded. - - * ``root_dir`` (string): The result of the ``root_dir`` parameter. - The absolute path to the root directory to use to find distro-related - information files. - - Raises: - - * :py:exc:`ValueError`: Initialization parameters combination is not - supported. - - * :py:exc:`OSError`: Some I/O issue with an os-release file or distro - release file. - - * :py:exc:`UnicodeError`: A data source has unexpected characters or - uses an unexpected encoding. - """ - self.root_dir = root_dir - self.etc_dir = os.path.join(root_dir, "etc") if root_dir else _UNIXCONFDIR - self.usr_lib_dir = ( - os.path.join(root_dir, "usr/lib") if root_dir else _UNIXUSRLIBDIR - ) - - if os_release_file: - self.os_release_file = os_release_file - else: - etc_dir_os_release_file = os.path.join(self.etc_dir, _OS_RELEASE_BASENAME) - usr_lib_os_release_file = os.path.join( - self.usr_lib_dir, _OS_RELEASE_BASENAME - ) - - # NOTE: The idea is to respect order **and** have it set - # at all times for API backwards compatibility. - if os.path.isfile(etc_dir_os_release_file) or not os.path.isfile( - usr_lib_os_release_file - ): - self.os_release_file = etc_dir_os_release_file - else: - self.os_release_file = usr_lib_os_release_file - - self.distro_release_file = distro_release_file or "" # updated later - - is_root_dir_defined = root_dir is not None - if is_root_dir_defined and (include_lsb or include_uname or include_oslevel): - raise ValueError( - "Including subprocess data sources from specific root_dir is disallowed" - " to prevent false information" - ) - self.include_lsb = ( - include_lsb if include_lsb is not None else not is_root_dir_defined - ) - self.include_uname = ( - include_uname if include_uname is not None else not is_root_dir_defined - ) - self.include_oslevel = ( - include_oslevel if include_oslevel is not None else not is_root_dir_defined - ) - - def __repr__(self) -> str: - """Return repr of all info""" - return ( - "LinuxDistribution(" - "os_release_file={self.os_release_file!r}, " - "distro_release_file={self.distro_release_file!r}, " - "include_lsb={self.include_lsb!r}, " - "include_uname={self.include_uname!r}, " - "include_oslevel={self.include_oslevel!r}, " - "root_dir={self.root_dir!r}, " - "_os_release_info={self._os_release_info!r}, " - "_lsb_release_info={self._lsb_release_info!r}, " - "_distro_release_info={self._distro_release_info!r}, " - "_uname_info={self._uname_info!r}, " - "_oslevel_info={self._oslevel_info!r})".format(self=self) - ) - - def linux_distribution( - self, full_distribution_name: bool = True - ) -> Tuple[str, str, str]: - """ - Return information about the OS distribution that is compatible - with Python's :func:`platform.linux_distribution`, supporting a subset - of its parameters. - - For details, see :func:`distro.linux_distribution`. - """ - return ( - self.name() if full_distribution_name else self.id(), - self.version(), - self._os_release_info.get("release_codename") or self.codename(), - ) - - def id(self) -> str: - """Return the distro ID of the OS distribution, as a string. - - For details, see :func:`distro.id`. - """ - - def normalize(distro_id: str, table: Dict[str, str]) -> str: - distro_id = distro_id.lower().replace(" ", "_") - return table.get(distro_id, distro_id) - - distro_id = self.os_release_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_OS_ID) - - distro_id = self.lsb_release_attr("distributor_id") - if distro_id: - return normalize(distro_id, NORMALIZED_LSB_ID) - - distro_id = self.distro_release_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - distro_id = self.uname_attr("id") - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - return "" - - def name(self, pretty: bool = False) -> str: - """ - Return the name of the OS distribution, as a string. - - For details, see :func:`distro.name`. - """ - name = ( - self.os_release_attr("name") - or self.lsb_release_attr("distributor_id") - or self.distro_release_attr("name") - or self.uname_attr("name") - ) - if pretty: - name = self.os_release_attr("pretty_name") or self.lsb_release_attr( - "description" - ) - if not name: - name = self.distro_release_attr("name") or self.uname_attr("name") - version = self.version(pretty=True) - if version: - name = f"{name} {version}" - return name or "" - - def version(self, pretty: bool = False, best: bool = False) -> str: - """ - Return the version of the OS distribution, as a string. - - For details, see :func:`distro.version`. - """ - versions = [ - self.os_release_attr("version_id"), - self.lsb_release_attr("release"), - self.distro_release_attr("version_id"), - self._parse_distro_release_content(self.os_release_attr("pretty_name")).get( - "version_id", "" - ), - self._parse_distro_release_content( - self.lsb_release_attr("description") - ).get("version_id", ""), - self.uname_attr("release"), - ] - if self.uname_attr("id").startswith("aix"): - # On AIX platforms, prefer oslevel command output. - versions.insert(0, self.oslevel_info()) - elif self.id() == "debian" or "debian" in self.like().split(): - # On Debian-like, add debian_version file content to candidates list. - versions.append(self._debian_version) - version = "" - if best: - # This algorithm uses the last version in priority order that has - # the best precision. If the versions are not in conflict, that - # does not matter; otherwise, using the last one instead of the - # first one might be considered a surprise. - for v in versions: - if v.count(".") > version.count(".") or version == "": - version = v - else: - for v in versions: - if v != "": - version = v - break - if pretty and version and self.codename(): - version = f"{version} ({self.codename()})" - return version - - def version_parts(self, best: bool = False) -> Tuple[str, str, str]: - """ - Return the version of the OS distribution, as a tuple of version - numbers. - - For details, see :func:`distro.version_parts`. - """ - version_str = self.version(best=best) - if version_str: - version_regex = re.compile(r"(\d+)\.?(\d+)?\.?(\d+)?") - matches = version_regex.match(version_str) - if matches: - major, minor, build_number = matches.groups() - return major, minor or "", build_number or "" - return "", "", "" - - def major_version(self, best: bool = False) -> str: - """ - Return the major version number of the current distribution. - - For details, see :func:`distro.major_version`. - """ - return self.version_parts(best)[0] - - def minor_version(self, best: bool = False) -> str: - """ - Return the minor version number of the current distribution. - - For details, see :func:`distro.minor_version`. - """ - return self.version_parts(best)[1] - - def build_number(self, best: bool = False) -> str: - """ - Return the build number of the current distribution. - - For details, see :func:`distro.build_number`. - """ - return self.version_parts(best)[2] - - def like(self) -> str: - """ - Return the IDs of distributions that are like the OS distribution. - - For details, see :func:`distro.like`. - """ - return self.os_release_attr("id_like") or "" - - def codename(self) -> str: - """ - Return the codename of the OS distribution. - - For details, see :func:`distro.codename`. - """ - try: - # Handle os_release specially since distros might purposefully set - # this to empty string to have no codename - return self._os_release_info["codename"] - except KeyError: - return ( - self.lsb_release_attr("codename") - or self.distro_release_attr("codename") - or "" - ) - - def info(self, pretty: bool = False, best: bool = False) -> InfoDict: - """ - Return certain machine-readable information about the OS - distribution. - - For details, see :func:`distro.info`. - """ - return InfoDict( - id=self.id(), - version=self.version(pretty, best), - version_parts=VersionDict( - major=self.major_version(best), - minor=self.minor_version(best), - build_number=self.build_number(best), - ), - like=self.like(), - codename=self.codename(), - ) - - def os_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the os-release file data source of the OS distribution. - - For details, see :func:`distro.os_release_info`. - """ - return self._os_release_info - - def lsb_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the lsb_release command data source of the OS - distribution. - - For details, see :func:`distro.lsb_release_info`. - """ - return self._lsb_release_info - - def distro_release_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the distro release file data source of the OS - distribution. - - For details, see :func:`distro.distro_release_info`. - """ - return self._distro_release_info - - def uname_info(self) -> Dict[str, str]: - """ - Return a dictionary containing key-value pairs for the information - items from the uname command data source of the OS distribution. - - For details, see :func:`distro.uname_info`. - """ - return self._uname_info - - def oslevel_info(self) -> str: - """ - Return AIX' oslevel command output. - """ - return self._oslevel_info - - def os_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the os-release file data - source of the OS distribution. - - For details, see :func:`distro.os_release_attr`. - """ - return self._os_release_info.get(attribute, "") - - def lsb_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the lsb_release command - output data source of the OS distribution. - - For details, see :func:`distro.lsb_release_attr`. - """ - return self._lsb_release_info.get(attribute, "") - - def distro_release_attr(self, attribute: str) -> str: - """ - Return a single named information item from the distro release file - data source of the OS distribution. - - For details, see :func:`distro.distro_release_attr`. - """ - return self._distro_release_info.get(attribute, "") - - def uname_attr(self, attribute: str) -> str: - """ - Return a single named information item from the uname command - output data source of the OS distribution. - - For details, see :func:`distro.uname_attr`. - """ - return self._uname_info.get(attribute, "") - - @cached_property - def _os_release_info(self) -> Dict[str, str]: - """ - Get the information items from the specified os-release file. - - Returns: - A dictionary containing all information items. - """ - if os.path.isfile(self.os_release_file): - with open(self.os_release_file, encoding="utf-8") as release_file: - return self._parse_os_release_content(release_file) - return {} - - @staticmethod - def _parse_os_release_content(lines: TextIO) -> Dict[str, str]: - """ - Parse the lines of an os-release file. - - Parameters: - - * lines: Iterable through the lines in the os-release file. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - lexer = shlex.shlex(lines, posix=True) - lexer.whitespace_split = True - - tokens = list(lexer) - for token in tokens: - # At this point, all shell-like parsing has been done (i.e. - # comments processed, quotes and backslash escape sequences - # processed, multi-line values assembled, trailing newlines - # stripped, etc.), so the tokens are now either: - # * variable assignments: var=value - # * commands or their arguments (not allowed in os-release) - # Ignore any tokens that are not variable assignments - if "=" in token: - k, v = token.split("=", 1) - props[k.lower()] = v - - if "version" in props: - # extract release codename (if any) from version attribute - match = re.search(r"\((\D+)\)|,\s*(\D+)", props["version"]) - if match: - release_codename = match.group(1) or match.group(2) - props["codename"] = props["release_codename"] = release_codename - - if "version_codename" in props: - # os-release added a version_codename field. Use that in - # preference to anything else Note that some distros purposefully - # do not have code names. They should be setting - # version_codename="" - props["codename"] = props["version_codename"] - elif "ubuntu_codename" in props: - # Same as above but a non-standard field name used on older Ubuntus - props["codename"] = props["ubuntu_codename"] - - return props - - @cached_property - def _lsb_release_info(self) -> Dict[str, str]: - """ - Get the information items from the lsb_release command output. - - Returns: - A dictionary containing all information items. - """ - if not self.include_lsb: - return {} - try: - cmd = ("lsb_release", "-a") - stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) - # Command not found or lsb_release returned error - except (OSError, subprocess.CalledProcessError): - return {} - content = self._to_str(stdout).splitlines() - return self._parse_lsb_release_content(content) - - @staticmethod - def _parse_lsb_release_content(lines: Iterable[str]) -> Dict[str, str]: - """ - Parse the output of the lsb_release command. - - Parameters: - - * lines: Iterable through the lines of the lsb_release output. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - for line in lines: - kv = line.strip("\n").split(":", 1) - if len(kv) != 2: - # Ignore lines without colon. - continue - k, v = kv - props.update({k.replace(" ", "_").lower(): v.strip()}) - return props - - @cached_property - def _uname_info(self) -> Dict[str, str]: - if not self.include_uname: - return {} - try: - cmd = ("uname", "-rs") - stdout = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) - except OSError: - return {} - content = self._to_str(stdout).splitlines() - return self._parse_uname_content(content) - - @cached_property - def _oslevel_info(self) -> str: - if not self.include_oslevel: - return "" - try: - stdout = subprocess.check_output("oslevel", stderr=subprocess.DEVNULL) - except (OSError, subprocess.CalledProcessError): - return "" - return self._to_str(stdout).strip() - - @cached_property - def _debian_version(self) -> str: - try: - with open( - os.path.join(self.etc_dir, "debian_version"), encoding="ascii" - ) as fp: - return fp.readline().rstrip() - except FileNotFoundError: - return "" - - @staticmethod - def _parse_uname_content(lines: Sequence[str]) -> Dict[str, str]: - if not lines: - return {} - props = {} - match = re.search(r"^([^\s]+)\s+([\d\.]+)", lines[0].strip()) - if match: - name, version = match.groups() - - # This is to prevent the Linux kernel version from - # appearing as the 'best' version on otherwise - # identifiable distributions. - if name == "Linux": - return {} - props["id"] = name.lower() - props["name"] = name - props["release"] = version - return props - - @staticmethod - def _to_str(bytestring: bytes) -> str: - encoding = sys.getfilesystemencoding() - return bytestring.decode(encoding) - - @cached_property - def _distro_release_info(self) -> Dict[str, str]: - """ - Get the information items from the specified distro release file. - - Returns: - A dictionary containing all information items. - """ - if self.distro_release_file: - # If it was specified, we use it and parse what we can, even if - # its file name or content does not match the expected pattern. - distro_info = self._parse_distro_release_file(self.distro_release_file) - basename = os.path.basename(self.distro_release_file) - # The file name pattern for user-specified distro release files - # is somewhat more tolerant (compared to when searching for the - # file), because we want to use what was specified as best as - # possible. - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - else: - try: - basenames = [ - basename - for basename in os.listdir(self.etc_dir) - if basename not in _DISTRO_RELEASE_IGNORE_BASENAMES - and os.path.isfile(os.path.join(self.etc_dir, basename)) - ] - # We sort for repeatability in cases where there are multiple - # distro specific files; e.g. CentOS, Oracle, Enterprise all - # containing `redhat-release` on top of their own. - basenames.sort() - except OSError: - # This may occur when /etc is not readable but we can't be - # sure about the *-release files. Check common entries of - # /etc for information. If they turn out to not be there the - # error is handled in `_parse_distro_release_file()`. - basenames = _DISTRO_RELEASE_BASENAMES - for basename in basenames: - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match is None: - continue - filepath = os.path.join(self.etc_dir, basename) - distro_info = self._parse_distro_release_file(filepath) - # The name is always present if the pattern matches. - if "name" not in distro_info: - continue - self.distro_release_file = filepath - break - else: # the loop didn't "break": no candidate. - return {} - - if match is not None: - distro_info["id"] = match.group(1) - - # CloudLinux < 7: manually enrich info with proper id. - if "cloudlinux" in distro_info.get("name", "").lower(): - distro_info["id"] = "cloudlinux" - - return distro_info - - def _parse_distro_release_file(self, filepath: str) -> Dict[str, str]: - """ - Parse a distro release file. - - Parameters: - - * filepath: Path name of the distro release file. - - Returns: - A dictionary containing all information items. - """ - try: - with open(filepath, encoding="utf-8") as fp: - # Only parse the first line. For instance, on SLES there - # are multiple lines. We don't want them... - return self._parse_distro_release_content(fp.readline()) - except OSError: - # Ignore not being able to read a specific, seemingly version - # related file. - # See https://github.com/python-distro/distro/issues/162 - return {} - - @staticmethod - def _parse_distro_release_content(line: str) -> Dict[str, str]: - """ - Parse a line from a distro release file. - - Parameters: - * line: Line from the distro release file. Must be a unicode string - or a UTF-8 encoded byte string. - - Returns: - A dictionary containing all information items. - """ - matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match(line.strip()[::-1]) - distro_info = {} - if matches: - # regexp ensures non-None - distro_info["name"] = matches.group(3)[::-1] - if matches.group(2): - distro_info["version_id"] = matches.group(2)[::-1] - if matches.group(1): - distro_info["codename"] = matches.group(1)[::-1] - elif line: - distro_info["name"] = line.strip() - return distro_info - - -_distro = LinuxDistribution() - - -def main() -> None: - logger = logging.getLogger(__name__) - logger.setLevel(logging.DEBUG) - logger.addHandler(logging.StreamHandler(sys.stdout)) - - parser = argparse.ArgumentParser(description="OS distro info tool") - parser.add_argument( - "--json", "-j", help="Output in machine readable format", action="store_true" - ) - - parser.add_argument( - "--root-dir", - "-r", - type=str, - dest="root_dir", - help="Path to the root filesystem directory (defaults to /)", - ) - - args = parser.parse_args() - - if args.root_dir: - dist = LinuxDistribution( - include_lsb=False, - include_uname=False, - include_oslevel=False, - root_dir=args.root_dir, - ) - else: - dist = _distro - - if args.json: - logger.info(json.dumps(dist.info(), indent=4, sort_keys=True)) - else: - logger.info("Name: %s", dist.name(pretty=True)) - distribution_version = dist.version(pretty=True) - logger.info("Version: %s", distribution_version) - distribution_codename = dist.codename() - logger.info("Codename: %s", distribution_codename) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/distro/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/LICENSE.md b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/LICENSE.md deleted file mode 100644 index 256ba90cd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/LICENSE.md +++ /dev/null @@ -1,31 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2013-2025, Kim Davies and contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__init__.py deleted file mode 100644 index cfdc030a7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__init__.py +++ /dev/null @@ -1,45 +0,0 @@ -from .core import ( - IDNABidiError, - IDNAError, - InvalidCodepoint, - InvalidCodepointContext, - alabel, - check_bidi, - check_hyphen_ok, - check_initial_combiner, - check_label, - check_nfc, - decode, - encode, - ulabel, - uts46_remap, - valid_contextj, - valid_contexto, - valid_label_length, - valid_string_length, -) -from .intranges import intranges_contain -from .package_data import __version__ - -__all__ = [ - "__version__", - "IDNABidiError", - "IDNAError", - "InvalidCodepoint", - "InvalidCodepointContext", - "alabel", - "check_bidi", - "check_hyphen_ok", - "check_initial_combiner", - "check_label", - "check_nfc", - "decode", - "encode", - "intranges_contain", - "ulabel", - "uts46_remap", - "valid_contextj", - "valid_contexto", - "valid_label_length", - "valid_string_length", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 02cccb71d7262254835dc2c501e59bd75317dea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmbu7&ubGw6vt;b$>zuAchb~@*n<cLNoz3_D<WtWCLmRc-WG?+?wCxonOSCEVtW%0 z{x2T=S3C}Q@}f7fNUzT9Ru2`tIET-^_jc#|e(kMhqlV1+^zkc?3J86%&hO)17-wr^ zyhX2^BWHrJ0}gh<#RVwfA{226O4tJrm!XU+P{CEG;u_Sj4?eC#9XFtXo6y89XyG=r zaR)lM3*9ZN=T3UK5B<z8Og8WU23u$w9hIIruz6Ixj)vYh$0Q$ibz}1Q@ZlpK@h3`2 zrK{G>&GtmBY0RSo8L>oi0ebUt<Uk5wC!jqV(<zH}Eu6D(L8eAdw{m-an#`FXa-j!# zfC~<s#w3)>DHlv>Kab}M)!Y%UL+wQ@G^w@6ME+dmpZF_C$9qJvB~5fQE76E$g&be< zrS9hMvzsJlVg_^F%VQ}hE@l_Op`$ydMMcGorI{S%!UTOn)=Z^b3PKKteKjysQ)Zz^ z6)j2@o<-TBVo|lQ+gH9t-J)U9wAip{S+p%W7F~;;Mc-g}MHfS<*ng$@X9ivU(`r_a zt|v5H&>15U1)BA!%Y@K4CgcM;Gc_Uo{@`BlGBu+JXvEa+{{HRYjZ}*uQSz9DkOpBa zSJ9NFY-BfVkb)6lYP1_XKZUszcXr2QOiu3Zkr!;4#1t5TWfDB)(;(%*Mi(`tLBf+A zGj$P3wZkJpcL=ePgls3Lx^jOhqgBivsB5My`xB=lgYN~$an9YI<DR3x@$)8fhM&=m OAH@ydeOFdj&5d6t902J6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-314.pyc deleted file mode 100644 index 01bf9bba51f57b00d5761e447337178c881c7a1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6391 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 YPX)~BP8$(CulQf~Py7EuI@rwr11n|0AOHXW diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-314.pyc deleted file mode 100644 index 0ddd0a6b92bd71efed47acb22a321e6712767d9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1382 zcma)5OHUL*5bmCt9d>ysLBt2bM%1_w1OyElH6d!k8rbLvo+fODomNI>rzbUyx}NsH z&5H*Q9yog8XyOkc8ZQ$Q4<3{oh7hh+^@3<3XeIr1^>p=A)mK#)+S{5L%7=H~gX^5J zuXNZIV@KJ%i%Ol%F^3n~Bv*XWP(~k{<Bm}@CoN@7W>lt+Ic7I=tZo(_R<@Ht-PU@O z(}a3f>scq)&kD`!^y7k&niEki&CEuDjPPXpq9T2f+9IO8g5fY)Bo;0c*XA%nojqi8 z#`rR0K7Q+A_xS>MxQjOpaSV4ibT(x4vsH7Q&S@s}=0%v=Ak-3&M>A27X69>3Bn6(@ zk0ew*m5|TV>GG{>?rb6;aXnwa$knUE?lTFCZVd8?sHnuPgmTHB_YyG}M1ev`loy5q z21nd`HMJn4(UGz8So!(*mGX?J#-XP~Syf|qDwubZK#9TFt1NntMdHRmJXC%vB45H# z;78t2MOI@^U5smKYq{)2kyP}!42Ll?8&`4yq0Y7$=f{5#ydK@4ZRN5)ZQ?D{^pQeB z)M@&Tp;Bk=F0Dx9*p7}g@lt^U{eP7Mb%kc)92`P5ZJLo24{jBU(1j<m*=$9qv(GIZ zug<=_v1T2E4*c-<qB+|1;G*r7%(c*5%cwCxneGUdl^koKvO*Tsf(2v_Z3t<OO6dW3 zHK6D)n|9n91=VS21~usX&fx7IG|sMEep^^OdErynfF|^PrzUhSHGH7uzX*j+w8bDY zxWN&G-wDmlNNjv+bf6q59ym&{KaJ<{`rp0pm_!cpl0);9C(wdBRhD8th!V|Jul7Nm zRpOL;iN7|9iV}ZgHO_khqN$dB$#8yk*8(r_7X!uHrHTBd;o<STFGZ5azRoYHAPf?b zkG!ggLBx5SFC{B7#DVNANmazj5mgZ>;okv}fC==V)8CoQ?!JXSywO<@U~e{`TI-$q z*gU;vP3x#jg<NW@S{y`=H5<BhQmZ0CG>Sz1r8`{LME`HKQIW<JWUp7HzZ8m_(2tfh dImt<c4U=>Jg`N7w@>@2};Z_!58==It-=F@U1mXYy diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-314.pyc deleted file mode 100644 index c99d8971c4ad25b3c47df308c7b66af6f55ab5e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20422 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 Ho9q7p0aLY0 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-314.pyc deleted file mode 100644 index bb2332721a129928e03ef15aeb635a044624f513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100984 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-314.pyc deleted file mode 100644 index bac5191e188b68ac228f212820d87169e7065e44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3458 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 CYtPOA diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-314.pyc deleted file mode 100644 index cd49577fab0b8ff211b0efa834e1a1fa93394334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmdPq<K<!if=e4;WQqdm#~=<2FhUuhK}s4Jf*48|f*6$<G?}VcjP(o+{WKYGamUA( zr4|)u=I6!7uVnZP(r~NG*(xTq7$_Q(n37s#XlZE>Q=VUx9aB)0pOu<iQXG?<lV6&W zlvtdqo0*qc0wjt{5_57=i*yZR0xC-~^7D)hP2x@BD=f_7LsD}KauQ2Y<4bZ2Vtg`_ zVu~|MQgsUwld}`kQ;TB?G7I#94#-Q%FVfFU$xGCS%EYH6mL%#GRNmsS$<0qG%}KQ@ bVgou2<e_4aXFf19GBV!a6KUcuVgYgi&eTls diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-314.pyc deleted file mode 100644 index 44bcd9ef8d4a29f176ebb4ca182b849d95ca36f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309722 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 JWMSji{6AfRyQ}~J diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/codec.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/codec.py deleted file mode 100644 index cbc2e4ff4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/codec.py +++ /dev/null @@ -1,122 +0,0 @@ -import codecs -import re -from typing import Any, Optional, Tuple - -from .core import IDNAError, alabel, decode, encode, ulabel - -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class Codec(codecs.Codec): - def encode(self, data: str, errors: str = "strict") -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - return encode(data), len(data) - - def decode(self, data: bytes, errors: str = "strict") -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return "", 0 - - return decode(data), len(data) - - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return b"", 0 - - labels = _unicode_dots_re.split(data) - trailing_dot = b"" - if labels: - if not labels[-1]: - trailing_dot = b"." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = b"." - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result_bytes = b".".join(result) + trailing_dot - size += len(trailing_dot) - return result_bytes, size - - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]: - if errors != "strict": - raise IDNAError('Unsupported error handling "{}"'.format(errors)) - - if not data: - return ("", 0) - - if not isinstance(data, str): - data = str(data, "ascii") - - labels = _unicode_dots_re.split(data) - trailing_dot = "" - if labels: - if not labels[-1]: - trailing_dot = "." - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = "." - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result_str = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result_str, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - - -class StreamReader(Codec, codecs.StreamReader): - pass - - -def search_function(name: str) -> Optional[codecs.CodecInfo]: - if name != "idna2008": - return None - return codecs.CodecInfo( - name=name, - encode=Codec().encode, - decode=Codec().decode, # type: ignore - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) - - -codecs.register(search_function) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/compat.py deleted file mode 100644 index 1df9f2a70..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/compat.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any, Union - -from .core import decode, encode - - -def ToASCII(label: str) -> bytes: - return encode(label) - - -def ToUnicode(label: Union[bytes, bytearray]) -> str: - return decode(label) - - -def nameprep(s: Any) -> None: - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/core.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/core.py deleted file mode 100644 index 8177bf7a3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/core.py +++ /dev/null @@ -1,437 +0,0 @@ -import bisect -import re -import unicodedata -from typing import Optional, Union - -from . import idnadata -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b"xn--" -_unicode_dots_re = re.compile("[\u002e\u3002\uff0e\uff61]") - - -class IDNAError(UnicodeError): - """Base exception for all IDNA-encoding related problems""" - - pass - - -class IDNABidiError(IDNAError): - """Exception when bidirectional requirements are not satisfied""" - - pass - - -class InvalidCodepoint(IDNAError): - """Exception when a disallowed or unallocated codepoint is used""" - - pass - - -class InvalidCodepointContext(IDNAError): - """Exception when the codepoint is not valid in the context it is used""" - - pass - - -def _combining_class(cp: int) -> int: - v = unicodedata.combining(chr(cp)) - if v == 0: - if not unicodedata.name(chr(cp)): - raise ValueError("Unknown character in unicodedata") - return v - - -def _is_script(cp: str, script: str) -> bool: - return intranges_contain(ord(cp), idnadata.scripts[script]) - - -def _punycode(s: str) -> bytes: - return s.encode("punycode") - - -def _unot(s: int) -> str: - return "U+{:04X}".format(s) - - -def valid_label_length(label: Union[bytes, str]) -> bool: - if len(label) > 63: - return False - return True - - -def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool: - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label: str, check_ltr: bool = False) -> bool: - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == "": - # String likely comes from a newer version of Unicode - raise IDNABidiError("Unknown directionality in label {} at position {}".format(repr(label), idx)) - if direction in ["R", "AL", "AN"]: - bidi_label = True - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ["R", "AL"]: - rtl = True - elif direction == "L": - rtl = False - else: - raise IDNABidiError("First codepoint in label {} must be directionality L, R or AL".format(repr(label))) - - valid_ending = False - number_type: Optional[str] = None - for idx, cp in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if direction not in [ - "R", - "AL", - "AN", - "EN", - "ES", - "CS", - "ET", - "ON", - "BN", - "NSM", - ]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a right-to-left label".format(idx)) - # Bidi rule 3 - if direction in ["R", "AL", "EN", "AN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - # Bidi rule 4 - if direction in ["AN", "EN"]: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError("Can not mix numeral types in a right-to-left label") - else: - # Bidi rule 5 - if direction not in ["L", "EN", "ES", "CS", "ET", "ON", "BN", "NSM"]: - raise IDNABidiError("Invalid direction for codepoint at position {} in a left-to-right label".format(idx)) - # Bidi rule 6 - if direction in ["L", "EN"]: - valid_ending = True - elif direction != "NSM": - valid_ending = False - - if not valid_ending: - raise IDNABidiError("Label ends with illegal codepoint directionality") - - return True - - -def check_initial_combiner(label: str) -> bool: - if unicodedata.category(label[0])[0] == "M": - raise IDNAError("Label begins with an illegal combining character") - return True - - -def check_hyphen_ok(label: str) -> bool: - if label[2:4] == "--": - raise IDNAError("Label has disallowed hyphens in 3rd and 4th position") - if label[0] == "-" or label[-1] == "-": - raise IDNAError("Label must not start or end with a hyphen") - return True - - -def check_nfc(label: str) -> None: - if unicodedata.normalize("NFC", label) != label: - raise IDNAError("Label must be in Normalization Form C") - - -def valid_contextj(label: str, pos: int) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x200C: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos - 1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("L"), ord("D")]: - ok = True - break - else: - break - - if not ok: - return False - - ok = False - for i in range(pos + 1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord("T"): - continue - elif joining_type in [ord("R"), ord("D")]: - ok = True - break - else: - break - return ok - - if cp_value == 0x200D: - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - return False - - -def valid_contexto(label: str, pos: int, exception: bool = False) -> bool: - cp_value = ord(label[pos]) - - if cp_value == 0x00B7: - if 0 < pos < len(label) - 1: - if ord(label[pos - 1]) == 0x006C and ord(label[pos + 1]) == 0x006C: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label) - 1 and len(label) > 1: - return _is_script(label[pos + 1], "Greek") - return False - - elif cp_value == 0x05F3 or cp_value == 0x05F4: - if pos > 0: - return _is_script(label[pos - 1], "Hebrew") - return False - - elif cp_value == 0x30FB: - for cp in label: - if cp == "\u30fb": - continue - if _is_script(cp, "Hiragana") or _is_script(cp, "Katakana") or _is_script(cp, "Han"): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6F0 <= ord(cp) <= 0x06F9: - return False - return True - - elif 0x6F0 <= cp_value <= 0x6F9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - return False - - -def check_label(label: Union[str, bytes, bytearray]) -> None: - if isinstance(label, (bytes, bytearray)): - label = label.decode("utf-8") - if len(label) == 0: - raise IDNAError("Empty Label") - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for pos, cp in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes["PVALID"]): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTJ"]): - try: - if not valid_contextj(label, pos): - raise InvalidCodepointContext( - "Joiner {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - except ValueError: - raise IDNAError( - "Unknown codepoint adjacent to joiner {} at position {} in {}".format( - _unot(cp_value), pos + 1, repr(label) - ) - ) - elif intranges_contain(cp_value, idnadata.codepoint_classes["CONTEXTO"]): - if not valid_contexto(label, pos): - raise InvalidCodepointContext( - "Codepoint {} not allowed at position {} in {}".format(_unot(cp_value), pos + 1, repr(label)) - ) - else: - raise InvalidCodepoint( - "Codepoint {} at position {} of {} not allowed".format(_unot(cp_value), pos + 1, repr(label)) - ) - - check_bidi(label) - - -def alabel(label: str) -> bytes: - try: - label_bytes = label.encode("ascii") - ulabel(label_bytes) - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - return label_bytes - except UnicodeEncodeError: - pass - - check_label(label) - label_bytes = _alabel_prefix + _punycode(label) - - if not valid_label_length(label_bytes): - raise IDNAError("Label too long") - - return label_bytes - - -def ulabel(label: Union[str, bytes, bytearray]) -> str: - if not isinstance(label, (bytes, bytearray)): - try: - label_bytes = label.encode("ascii") - except UnicodeEncodeError: - check_label(label) - return label - else: - label_bytes = bytes(label) - - label_bytes = label_bytes.lower() - if label_bytes.startswith(_alabel_prefix): - label_bytes = label_bytes[len(_alabel_prefix) :] - if not label_bytes: - raise IDNAError("Malformed A-label, no Punycode eligible content found") - if label_bytes.decode("ascii")[-1] == "-": - raise IDNAError("A-label must not end with a hyphen") - else: - check_label(label_bytes) - return label_bytes.decode("ascii") - - try: - label = label_bytes.decode("punycode") - except UnicodeError: - raise IDNAError("Invalid A-label") - check_label(label) - return label - - -def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str: - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - - output = "" - - for pos, char in enumerate(domain): - code_point = ord(char) - try: - uts46row = uts46data[code_point if code_point < 256 else bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement: Optional[str] = None - if len(uts46row) == 3: - replacement = uts46row[2] - if ( - status == "V" - or (status == "D" and not transitional) - or (status == "3" and not std3_rules and replacement is None) - ): - output += char - elif replacement is not None and ( - status == "M" or (status == "3" and not std3_rules) or (status == "D" and transitional) - ): - output += replacement - elif status != "I": - raise IndexError() - except IndexError: - raise InvalidCodepoint( - "Codepoint {} not allowed at position {} in {}".format(_unot(code_point), pos + 1, repr(domain)) - ) - - return unicodedata.normalize("NFC", output) - - -def encode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, - transitional: bool = False, -) -> bytes: - if not isinstance(s, str): - try: - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("should pass a unicode string to the function rather than a byte string.") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split(".") - else: - labels = _unicode_dots_re.split(s) - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if labels[-1] == "": - del labels[-1] - trailing_dot = True - for label in labels: - s = alabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append(b"") - s = b".".join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError("Domain too long") - return s - - -def decode( - s: Union[str, bytes, bytearray], - strict: bool = False, - uts46: bool = False, - std3_rules: bool = False, -) -> str: - try: - if not isinstance(s, str): - s = str(s, "ascii") - except UnicodeDecodeError: - raise IDNAError("Invalid ASCII in A-label") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(".") - if not labels or labels == [""]: - raise IDNAError("Empty domain") - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - s = ulabel(label) - if s: - result.append(s) - else: - raise IDNAError("Empty label") - if trailing_dot: - result.append("") - return ".".join(result) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/idnadata.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/idnadata.py deleted file mode 100644 index ded47cae0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/idnadata.py +++ /dev/null @@ -1,4309 +0,0 @@ -# This file is automatically generated by tools/idna-data - -__version__ = "16.0.0" - -scripts = { - "Greek": ( - 0x37000000374, - 0x37500000378, - 0x37A0000037E, - 0x37F00000380, - 0x38400000385, - 0x38600000387, - 0x3880000038B, - 0x38C0000038D, - 0x38E000003A2, - 0x3A3000003E2, - 0x3F000000400, - 0x1D2600001D2B, - 0x1D5D00001D62, - 0x1D6600001D6B, - 0x1DBF00001DC0, - 0x1F0000001F16, - 0x1F1800001F1E, - 0x1F2000001F46, - 0x1F4800001F4E, - 0x1F5000001F58, - 0x1F5900001F5A, - 0x1F5B00001F5C, - 0x1F5D00001F5E, - 0x1F5F00001F7E, - 0x1F8000001FB5, - 0x1FB600001FC5, - 0x1FC600001FD4, - 0x1FD600001FDC, - 0x1FDD00001FF0, - 0x1FF200001FF5, - 0x1FF600001FFF, - 0x212600002127, - 0xAB650000AB66, - 0x101400001018F, - 0x101A0000101A1, - 0x1D2000001D246, - ), - "Han": ( - 0x2E8000002E9A, - 0x2E9B00002EF4, - 0x2F0000002FD6, - 0x300500003006, - 0x300700003008, - 0x30210000302A, - 0x30380000303C, - 0x340000004DC0, - 0x4E000000A000, - 0xF9000000FA6E, - 0xFA700000FADA, - 0x16FE200016FE4, - 0x16FF000016FF2, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x2F8000002FA1E, - 0x300000003134B, - 0x31350000323B0, - ), - "Hebrew": ( - 0x591000005C8, - 0x5D0000005EB, - 0x5EF000005F5, - 0xFB1D0000FB37, - 0xFB380000FB3D, - 0xFB3E0000FB3F, - 0xFB400000FB42, - 0xFB430000FB45, - 0xFB460000FB50, - ), - "Hiragana": ( - 0x304100003097, - 0x309D000030A0, - 0x1B0010001B120, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1F2000001F201, - ), - "Katakana": ( - 0x30A1000030FB, - 0x30FD00003100, - 0x31F000003200, - 0x32D0000032FF, - 0x330000003358, - 0xFF660000FF70, - 0xFF710000FF9E, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B001, - 0x1B1200001B123, - 0x1B1550001B156, - 0x1B1640001B168, - ), -} -joining_types = { - 0xAD: 84, - 0x300: 84, - 0x301: 84, - 0x302: 84, - 0x303: 84, - 0x304: 84, - 0x305: 84, - 0x306: 84, - 0x307: 84, - 0x308: 84, - 0x309: 84, - 0x30A: 84, - 0x30B: 84, - 0x30C: 84, - 0x30D: 84, - 0x30E: 84, - 0x30F: 84, - 0x310: 84, - 0x311: 84, - 0x312: 84, - 0x313: 84, - 0x314: 84, - 0x315: 84, - 0x316: 84, - 0x317: 84, - 0x318: 84, - 0x319: 84, - 0x31A: 84, - 0x31B: 84, - 0x31C: 84, - 0x31D: 84, - 0x31E: 84, - 0x31F: 84, - 0x320: 84, - 0x321: 84, - 0x322: 84, - 0x323: 84, - 0x324: 84, - 0x325: 84, - 0x326: 84, - 0x327: 84, - 0x328: 84, - 0x329: 84, - 0x32A: 84, - 0x32B: 84, - 0x32C: 84, - 0x32D: 84, - 0x32E: 84, - 0x32F: 84, - 0x330: 84, - 0x331: 84, - 0x332: 84, - 0x333: 84, - 0x334: 84, - 0x335: 84, - 0x336: 84, - 0x337: 84, - 0x338: 84, - 0x339: 84, - 0x33A: 84, - 0x33B: 84, - 0x33C: 84, - 0x33D: 84, - 0x33E: 84, - 0x33F: 84, - 0x340: 84, - 0x341: 84, - 0x342: 84, - 0x343: 84, - 0x344: 84, - 0x345: 84, - 0x346: 84, - 0x347: 84, - 0x348: 84, - 0x349: 84, - 0x34A: 84, - 0x34B: 84, - 0x34C: 84, - 0x34D: 84, - 0x34E: 84, - 0x34F: 84, - 0x350: 84, - 0x351: 84, - 0x352: 84, - 0x353: 84, - 0x354: 84, - 0x355: 84, - 0x356: 84, - 0x357: 84, - 0x358: 84, - 0x359: 84, - 0x35A: 84, - 0x35B: 84, - 0x35C: 84, - 0x35D: 84, - 0x35E: 84, - 0x35F: 84, - 0x360: 84, - 0x361: 84, - 0x362: 84, - 0x363: 84, - 0x364: 84, - 0x365: 84, - 0x366: 84, - 0x367: 84, - 0x368: 84, - 0x369: 84, - 0x36A: 84, - 0x36B: 84, - 0x36C: 84, - 0x36D: 84, - 0x36E: 84, - 0x36F: 84, - 0x483: 84, - 0x484: 84, - 0x485: 84, - 0x486: 84, - 0x487: 84, - 0x488: 84, - 0x489: 84, - 0x591: 84, - 0x592: 84, - 0x593: 84, - 0x594: 84, - 0x595: 84, - 0x596: 84, - 0x597: 84, - 0x598: 84, - 0x599: 84, - 0x59A: 84, - 0x59B: 84, - 0x59C: 84, - 0x59D: 84, - 0x59E: 84, - 0x59F: 84, - 0x5A0: 84, - 0x5A1: 84, - 0x5A2: 84, - 0x5A3: 84, - 0x5A4: 84, - 0x5A5: 84, - 0x5A6: 84, - 0x5A7: 84, - 0x5A8: 84, - 0x5A9: 84, - 0x5AA: 84, - 0x5AB: 84, - 0x5AC: 84, - 0x5AD: 84, - 0x5AE: 84, - 0x5AF: 84, - 0x5B0: 84, - 0x5B1: 84, - 0x5B2: 84, - 0x5B3: 84, - 0x5B4: 84, - 0x5B5: 84, - 0x5B6: 84, - 0x5B7: 84, - 0x5B8: 84, - 0x5B9: 84, - 0x5BA: 84, - 0x5BB: 84, - 0x5BC: 84, - 0x5BD: 84, - 0x5BF: 84, - 0x5C1: 84, - 0x5C2: 84, - 0x5C4: 84, - 0x5C5: 84, - 0x5C7: 84, - 0x610: 84, - 0x611: 84, - 0x612: 84, - 0x613: 84, - 0x614: 84, - 0x615: 84, - 0x616: 84, - 0x617: 84, - 0x618: 84, - 0x619: 84, - 0x61A: 84, - 0x61C: 84, - 0x620: 68, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62A: 68, - 0x62B: 68, - 0x62C: 68, - 0x62D: 68, - 0x62E: 68, - 0x62F: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63A: 68, - 0x63B: 68, - 0x63C: 68, - 0x63D: 68, - 0x63E: 68, - 0x63F: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64A: 68, - 0x64B: 84, - 0x64C: 84, - 0x64D: 84, - 0x64E: 84, - 0x64F: 84, - 0x650: 84, - 0x651: 84, - 0x652: 84, - 0x653: 84, - 0x654: 84, - 0x655: 84, - 0x656: 84, - 0x657: 84, - 0x658: 84, - 0x659: 84, - 0x65A: 84, - 0x65B: 84, - 0x65C: 84, - 0x65D: 84, - 0x65E: 84, - 0x65F: 84, - 0x66E: 68, - 0x66F: 68, - 0x670: 84, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67A: 68, - 0x67B: 68, - 0x67C: 68, - 0x67D: 68, - 0x67E: 68, - 0x67F: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68A: 82, - 0x68B: 82, - 0x68C: 82, - 0x68D: 82, - 0x68E: 82, - 0x68F: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69A: 68, - 0x69B: 68, - 0x69C: 68, - 0x69D: 68, - 0x69E: 68, - 0x69F: 68, - 0x6A0: 68, - 0x6A1: 68, - 0x6A2: 68, - 0x6A3: 68, - 0x6A4: 68, - 0x6A5: 68, - 0x6A6: 68, - 0x6A7: 68, - 0x6A8: 68, - 0x6A9: 68, - 0x6AA: 68, - 0x6AB: 68, - 0x6AC: 68, - 0x6AD: 68, - 0x6AE: 68, - 0x6AF: 68, - 0x6B0: 68, - 0x6B1: 68, - 0x6B2: 68, - 0x6B3: 68, - 0x6B4: 68, - 0x6B5: 68, - 0x6B6: 68, - 0x6B7: 68, - 0x6B8: 68, - 0x6B9: 68, - 0x6BA: 68, - 0x6BB: 68, - 0x6BC: 68, - 0x6BD: 68, - 0x6BE: 68, - 0x6BF: 68, - 0x6C0: 82, - 0x6C1: 68, - 0x6C2: 68, - 0x6C3: 82, - 0x6C4: 82, - 0x6C5: 82, - 0x6C6: 82, - 0x6C7: 82, - 0x6C8: 82, - 0x6C9: 82, - 0x6CA: 82, - 0x6CB: 82, - 0x6CC: 68, - 0x6CD: 82, - 0x6CE: 68, - 0x6CF: 82, - 0x6D0: 68, - 0x6D1: 68, - 0x6D2: 82, - 0x6D3: 82, - 0x6D5: 82, - 0x6D6: 84, - 0x6D7: 84, - 0x6D8: 84, - 0x6D9: 84, - 0x6DA: 84, - 0x6DB: 84, - 0x6DC: 84, - 0x6DF: 84, - 0x6E0: 84, - 0x6E1: 84, - 0x6E2: 84, - 0x6E3: 84, - 0x6E4: 84, - 0x6E7: 84, - 0x6E8: 84, - 0x6EA: 84, - 0x6EB: 84, - 0x6EC: 84, - 0x6ED: 84, - 0x6EE: 82, - 0x6EF: 82, - 0x6FA: 68, - 0x6FB: 68, - 0x6FC: 68, - 0x6FF: 68, - 0x70F: 84, - 0x710: 82, - 0x711: 84, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71A: 68, - 0x71B: 68, - 0x71C: 68, - 0x71D: 68, - 0x71E: 82, - 0x71F: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72A: 82, - 0x72B: 68, - 0x72C: 82, - 0x72D: 68, - 0x72E: 68, - 0x72F: 82, - 0x730: 84, - 0x731: 84, - 0x732: 84, - 0x733: 84, - 0x734: 84, - 0x735: 84, - 0x736: 84, - 0x737: 84, - 0x738: 84, - 0x739: 84, - 0x73A: 84, - 0x73B: 84, - 0x73C: 84, - 0x73D: 84, - 0x73E: 84, - 0x73F: 84, - 0x740: 84, - 0x741: 84, - 0x742: 84, - 0x743: 84, - 0x744: 84, - 0x745: 84, - 0x746: 84, - 0x747: 84, - 0x748: 84, - 0x749: 84, - 0x74A: 84, - 0x74D: 82, - 0x74E: 68, - 0x74F: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75A: 82, - 0x75B: 82, - 0x75C: 68, - 0x75D: 68, - 0x75E: 68, - 0x75F: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76A: 68, - 0x76B: 82, - 0x76C: 82, - 0x76D: 68, - 0x76E: 68, - 0x76F: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77A: 68, - 0x77B: 68, - 0x77C: 68, - 0x77D: 68, - 0x77E: 68, - 0x77F: 68, - 0x7A6: 84, - 0x7A7: 84, - 0x7A8: 84, - 0x7A9: 84, - 0x7AA: 84, - 0x7AB: 84, - 0x7AC: 84, - 0x7AD: 84, - 0x7AE: 84, - 0x7AF: 84, - 0x7B0: 84, - 0x7CA: 68, - 0x7CB: 68, - 0x7CC: 68, - 0x7CD: 68, - 0x7CE: 68, - 0x7CF: 68, - 0x7D0: 68, - 0x7D1: 68, - 0x7D2: 68, - 0x7D3: 68, - 0x7D4: 68, - 0x7D5: 68, - 0x7D6: 68, - 0x7D7: 68, - 0x7D8: 68, - 0x7D9: 68, - 0x7DA: 68, - 0x7DB: 68, - 0x7DC: 68, - 0x7DD: 68, - 0x7DE: 68, - 0x7DF: 68, - 0x7E0: 68, - 0x7E1: 68, - 0x7E2: 68, - 0x7E3: 68, - 0x7E4: 68, - 0x7E5: 68, - 0x7E6: 68, - 0x7E7: 68, - 0x7E8: 68, - 0x7E9: 68, - 0x7EA: 68, - 0x7EB: 84, - 0x7EC: 84, - 0x7ED: 84, - 0x7EE: 84, - 0x7EF: 84, - 0x7F0: 84, - 0x7F1: 84, - 0x7F2: 84, - 0x7F3: 84, - 0x7FA: 67, - 0x7FD: 84, - 0x816: 84, - 0x817: 84, - 0x818: 84, - 0x819: 84, - 0x81B: 84, - 0x81C: 84, - 0x81D: 84, - 0x81E: 84, - 0x81F: 84, - 0x820: 84, - 0x821: 84, - 0x822: 84, - 0x823: 84, - 0x825: 84, - 0x826: 84, - 0x827: 84, - 0x829: 84, - 0x82A: 84, - 0x82B: 84, - 0x82C: 84, - 0x82D: 84, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 82, - 0x848: 68, - 0x849: 82, - 0x84A: 68, - 0x84B: 68, - 0x84C: 68, - 0x84D: 68, - 0x84E: 68, - 0x84F: 68, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 82, - 0x857: 82, - 0x858: 82, - 0x859: 84, - 0x85A: 84, - 0x85B: 84, - 0x860: 68, - 0x862: 68, - 0x863: 68, - 0x864: 68, - 0x865: 68, - 0x867: 82, - 0x868: 68, - 0x869: 82, - 0x86A: 82, - 0x870: 82, - 0x871: 82, - 0x872: 82, - 0x873: 82, - 0x874: 82, - 0x875: 82, - 0x876: 82, - 0x877: 82, - 0x878: 82, - 0x879: 82, - 0x87A: 82, - 0x87B: 82, - 0x87C: 82, - 0x87D: 82, - 0x87E: 82, - 0x87F: 82, - 0x880: 82, - 0x881: 82, - 0x882: 82, - 0x883: 67, - 0x884: 67, - 0x885: 67, - 0x886: 68, - 0x889: 68, - 0x88A: 68, - 0x88B: 68, - 0x88C: 68, - 0x88D: 68, - 0x88E: 82, - 0x897: 84, - 0x898: 84, - 0x899: 84, - 0x89A: 84, - 0x89B: 84, - 0x89C: 84, - 0x89D: 84, - 0x89E: 84, - 0x89F: 84, - 0x8A0: 68, - 0x8A1: 68, - 0x8A2: 68, - 0x8A3: 68, - 0x8A4: 68, - 0x8A5: 68, - 0x8A6: 68, - 0x8A7: 68, - 0x8A8: 68, - 0x8A9: 68, - 0x8AA: 82, - 0x8AB: 82, - 0x8AC: 82, - 0x8AE: 82, - 0x8AF: 68, - 0x8B0: 68, - 0x8B1: 82, - 0x8B2: 82, - 0x8B3: 68, - 0x8B4: 68, - 0x8B5: 68, - 0x8B6: 68, - 0x8B7: 68, - 0x8B8: 68, - 0x8B9: 82, - 0x8BA: 68, - 0x8BB: 68, - 0x8BC: 68, - 0x8BD: 68, - 0x8BE: 68, - 0x8BF: 68, - 0x8C0: 68, - 0x8C1: 68, - 0x8C2: 68, - 0x8C3: 68, - 0x8C4: 68, - 0x8C5: 68, - 0x8C6: 68, - 0x8C7: 68, - 0x8C8: 68, - 0x8CA: 84, - 0x8CB: 84, - 0x8CC: 84, - 0x8CD: 84, - 0x8CE: 84, - 0x8CF: 84, - 0x8D0: 84, - 0x8D1: 84, - 0x8D2: 84, - 0x8D3: 84, - 0x8D4: 84, - 0x8D5: 84, - 0x8D6: 84, - 0x8D7: 84, - 0x8D8: 84, - 0x8D9: 84, - 0x8DA: 84, - 0x8DB: 84, - 0x8DC: 84, - 0x8DD: 84, - 0x8DE: 84, - 0x8DF: 84, - 0x8E0: 84, - 0x8E1: 84, - 0x8E3: 84, - 0x8E4: 84, - 0x8E5: 84, - 0x8E6: 84, - 0x8E7: 84, - 0x8E8: 84, - 0x8E9: 84, - 0x8EA: 84, - 0x8EB: 84, - 0x8EC: 84, - 0x8ED: 84, - 0x8EE: 84, - 0x8EF: 84, - 0x8F0: 84, - 0x8F1: 84, - 0x8F2: 84, - 0x8F3: 84, - 0x8F4: 84, - 0x8F5: 84, - 0x8F6: 84, - 0x8F7: 84, - 0x8F8: 84, - 0x8F9: 84, - 0x8FA: 84, - 0x8FB: 84, - 0x8FC: 84, - 0x8FD: 84, - 0x8FE: 84, - 0x8FF: 84, - 0x900: 84, - 0x901: 84, - 0x902: 84, - 0x93A: 84, - 0x93C: 84, - 0x941: 84, - 0x942: 84, - 0x943: 84, - 0x944: 84, - 0x945: 84, - 0x946: 84, - 0x947: 84, - 0x948: 84, - 0x94D: 84, - 0x951: 84, - 0x952: 84, - 0x953: 84, - 0x954: 84, - 0x955: 84, - 0x956: 84, - 0x957: 84, - 0x962: 84, - 0x963: 84, - 0x981: 84, - 0x9BC: 84, - 0x9C1: 84, - 0x9C2: 84, - 0x9C3: 84, - 0x9C4: 84, - 0x9CD: 84, - 0x9E2: 84, - 0x9E3: 84, - 0x9FE: 84, - 0xA01: 84, - 0xA02: 84, - 0xA3C: 84, - 0xA41: 84, - 0xA42: 84, - 0xA47: 84, - 0xA48: 84, - 0xA4B: 84, - 0xA4C: 84, - 0xA4D: 84, - 0xA51: 84, - 0xA70: 84, - 0xA71: 84, - 0xA75: 84, - 0xA81: 84, - 0xA82: 84, - 0xABC: 84, - 0xAC1: 84, - 0xAC2: 84, - 0xAC3: 84, - 0xAC4: 84, - 0xAC5: 84, - 0xAC7: 84, - 0xAC8: 84, - 0xACD: 84, - 0xAE2: 84, - 0xAE3: 84, - 0xAFA: 84, - 0xAFB: 84, - 0xAFC: 84, - 0xAFD: 84, - 0xAFE: 84, - 0xAFF: 84, - 0xB01: 84, - 0xB3C: 84, - 0xB3F: 84, - 0xB41: 84, - 0xB42: 84, - 0xB43: 84, - 0xB44: 84, - 0xB4D: 84, - 0xB55: 84, - 0xB56: 84, - 0xB62: 84, - 0xB63: 84, - 0xB82: 84, - 0xBC0: 84, - 0xBCD: 84, - 0xC00: 84, - 0xC04: 84, - 0xC3C: 84, - 0xC3E: 84, - 0xC3F: 84, - 0xC40: 84, - 0xC46: 84, - 0xC47: 84, - 0xC48: 84, - 0xC4A: 84, - 0xC4B: 84, - 0xC4C: 84, - 0xC4D: 84, - 0xC55: 84, - 0xC56: 84, - 0xC62: 84, - 0xC63: 84, - 0xC81: 84, - 0xCBC: 84, - 0xCBF: 84, - 0xCC6: 84, - 0xCCC: 84, - 0xCCD: 84, - 0xCE2: 84, - 0xCE3: 84, - 0xD00: 84, - 0xD01: 84, - 0xD3B: 84, - 0xD3C: 84, - 0xD41: 84, - 0xD42: 84, - 0xD43: 84, - 0xD44: 84, - 0xD4D: 84, - 0xD62: 84, - 0xD63: 84, - 0xD81: 84, - 0xDCA: 84, - 0xDD2: 84, - 0xDD3: 84, - 0xDD4: 84, - 0xDD6: 84, - 0xE31: 84, - 0xE34: 84, - 0xE35: 84, - 0xE36: 84, - 0xE37: 84, - 0xE38: 84, - 0xE39: 84, - 0xE3A: 84, - 0xE47: 84, - 0xE48: 84, - 0xE49: 84, - 0xE4A: 84, - 0xE4B: 84, - 0xE4C: 84, - 0xE4D: 84, - 0xE4E: 84, - 0xEB1: 84, - 0xEB4: 84, - 0xEB5: 84, - 0xEB6: 84, - 0xEB7: 84, - 0xEB8: 84, - 0xEB9: 84, - 0xEBA: 84, - 0xEBB: 84, - 0xEBC: 84, - 0xEC8: 84, - 0xEC9: 84, - 0xECA: 84, - 0xECB: 84, - 0xECC: 84, - 0xECD: 84, - 0xECE: 84, - 0xF18: 84, - 0xF19: 84, - 0xF35: 84, - 0xF37: 84, - 0xF39: 84, - 0xF71: 84, - 0xF72: 84, - 0xF73: 84, - 0xF74: 84, - 0xF75: 84, - 0xF76: 84, - 0xF77: 84, - 0xF78: 84, - 0xF79: 84, - 0xF7A: 84, - 0xF7B: 84, - 0xF7C: 84, - 0xF7D: 84, - 0xF7E: 84, - 0xF80: 84, - 0xF81: 84, - 0xF82: 84, - 0xF83: 84, - 0xF84: 84, - 0xF86: 84, - 0xF87: 84, - 0xF8D: 84, - 0xF8E: 84, - 0xF8F: 84, - 0xF90: 84, - 0xF91: 84, - 0xF92: 84, - 0xF93: 84, - 0xF94: 84, - 0xF95: 84, - 0xF96: 84, - 0xF97: 84, - 0xF99: 84, - 0xF9A: 84, - 0xF9B: 84, - 0xF9C: 84, - 0xF9D: 84, - 0xF9E: 84, - 0xF9F: 84, - 0xFA0: 84, - 0xFA1: 84, - 0xFA2: 84, - 0xFA3: 84, - 0xFA4: 84, - 0xFA5: 84, - 0xFA6: 84, - 0xFA7: 84, - 0xFA8: 84, - 0xFA9: 84, - 0xFAA: 84, - 0xFAB: 84, - 0xFAC: 84, - 0xFAD: 84, - 0xFAE: 84, - 0xFAF: 84, - 0xFB0: 84, - 0xFB1: 84, - 0xFB2: 84, - 0xFB3: 84, - 0xFB4: 84, - 0xFB5: 84, - 0xFB6: 84, - 0xFB7: 84, - 0xFB8: 84, - 0xFB9: 84, - 0xFBA: 84, - 0xFBB: 84, - 0xFBC: 84, - 0xFC6: 84, - 0x102D: 84, - 0x102E: 84, - 0x102F: 84, - 0x1030: 84, - 0x1032: 84, - 0x1033: 84, - 0x1034: 84, - 0x1035: 84, - 0x1036: 84, - 0x1037: 84, - 0x1039: 84, - 0x103A: 84, - 0x103D: 84, - 0x103E: 84, - 0x1058: 84, - 0x1059: 84, - 0x105E: 84, - 0x105F: 84, - 0x1060: 84, - 0x1071: 84, - 0x1072: 84, - 0x1073: 84, - 0x1074: 84, - 0x1082: 84, - 0x1085: 84, - 0x1086: 84, - 0x108D: 84, - 0x109D: 84, - 0x135D: 84, - 0x135E: 84, - 0x135F: 84, - 0x1712: 84, - 0x1713: 84, - 0x1714: 84, - 0x1732: 84, - 0x1733: 84, - 0x1752: 84, - 0x1753: 84, - 0x1772: 84, - 0x1773: 84, - 0x17B4: 84, - 0x17B5: 84, - 0x17B7: 84, - 0x17B8: 84, - 0x17B9: 84, - 0x17BA: 84, - 0x17BB: 84, - 0x17BC: 84, - 0x17BD: 84, - 0x17C6: 84, - 0x17C9: 84, - 0x17CA: 84, - 0x17CB: 84, - 0x17CC: 84, - 0x17CD: 84, - 0x17CE: 84, - 0x17CF: 84, - 0x17D0: 84, - 0x17D1: 84, - 0x17D2: 84, - 0x17D3: 84, - 0x17DD: 84, - 0x1807: 68, - 0x180A: 67, - 0x180B: 84, - 0x180C: 84, - 0x180D: 84, - 0x180F: 84, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182A: 68, - 0x182B: 68, - 0x182C: 68, - 0x182D: 68, - 0x182E: 68, - 0x182F: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183A: 68, - 0x183B: 68, - 0x183C: 68, - 0x183D: 68, - 0x183E: 68, - 0x183F: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184A: 68, - 0x184B: 68, - 0x184C: 68, - 0x184D: 68, - 0x184E: 68, - 0x184F: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185A: 68, - 0x185B: 68, - 0x185C: 68, - 0x185D: 68, - 0x185E: 68, - 0x185F: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186A: 68, - 0x186B: 68, - 0x186C: 68, - 0x186D: 68, - 0x186E: 68, - 0x186F: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1878: 68, - 0x1885: 84, - 0x1886: 84, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188A: 68, - 0x188B: 68, - 0x188C: 68, - 0x188D: 68, - 0x188E: 68, - 0x188F: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189A: 68, - 0x189B: 68, - 0x189C: 68, - 0x189D: 68, - 0x189E: 68, - 0x189F: 68, - 0x18A0: 68, - 0x18A1: 68, - 0x18A2: 68, - 0x18A3: 68, - 0x18A4: 68, - 0x18A5: 68, - 0x18A6: 68, - 0x18A7: 68, - 0x18A8: 68, - 0x18A9: 84, - 0x18AA: 68, - 0x1920: 84, - 0x1921: 84, - 0x1922: 84, - 0x1927: 84, - 0x1928: 84, - 0x1932: 84, - 0x1939: 84, - 0x193A: 84, - 0x193B: 84, - 0x1A17: 84, - 0x1A18: 84, - 0x1A1B: 84, - 0x1A56: 84, - 0x1A58: 84, - 0x1A59: 84, - 0x1A5A: 84, - 0x1A5B: 84, - 0x1A5C: 84, - 0x1A5D: 84, - 0x1A5E: 84, - 0x1A60: 84, - 0x1A62: 84, - 0x1A65: 84, - 0x1A66: 84, - 0x1A67: 84, - 0x1A68: 84, - 0x1A69: 84, - 0x1A6A: 84, - 0x1A6B: 84, - 0x1A6C: 84, - 0x1A73: 84, - 0x1A74: 84, - 0x1A75: 84, - 0x1A76: 84, - 0x1A77: 84, - 0x1A78: 84, - 0x1A79: 84, - 0x1A7A: 84, - 0x1A7B: 84, - 0x1A7C: 84, - 0x1A7F: 84, - 0x1AB0: 84, - 0x1AB1: 84, - 0x1AB2: 84, - 0x1AB3: 84, - 0x1AB4: 84, - 0x1AB5: 84, - 0x1AB6: 84, - 0x1AB7: 84, - 0x1AB8: 84, - 0x1AB9: 84, - 0x1ABA: 84, - 0x1ABB: 84, - 0x1ABC: 84, - 0x1ABD: 84, - 0x1ABE: 84, - 0x1ABF: 84, - 0x1AC0: 84, - 0x1AC1: 84, - 0x1AC2: 84, - 0x1AC3: 84, - 0x1AC4: 84, - 0x1AC5: 84, - 0x1AC6: 84, - 0x1AC7: 84, - 0x1AC8: 84, - 0x1AC9: 84, - 0x1ACA: 84, - 0x1ACB: 84, - 0x1ACC: 84, - 0x1ACD: 84, - 0x1ACE: 84, - 0x1B00: 84, - 0x1B01: 84, - 0x1B02: 84, - 0x1B03: 84, - 0x1B34: 84, - 0x1B36: 84, - 0x1B37: 84, - 0x1B38: 84, - 0x1B39: 84, - 0x1B3A: 84, - 0x1B3C: 84, - 0x1B42: 84, - 0x1B6B: 84, - 0x1B6C: 84, - 0x1B6D: 84, - 0x1B6E: 84, - 0x1B6F: 84, - 0x1B70: 84, - 0x1B71: 84, - 0x1B72: 84, - 0x1B73: 84, - 0x1B80: 84, - 0x1B81: 84, - 0x1BA2: 84, - 0x1BA3: 84, - 0x1BA4: 84, - 0x1BA5: 84, - 0x1BA8: 84, - 0x1BA9: 84, - 0x1BAB: 84, - 0x1BAC: 84, - 0x1BAD: 84, - 0x1BE6: 84, - 0x1BE8: 84, - 0x1BE9: 84, - 0x1BED: 84, - 0x1BEF: 84, - 0x1BF0: 84, - 0x1BF1: 84, - 0x1C2C: 84, - 0x1C2D: 84, - 0x1C2E: 84, - 0x1C2F: 84, - 0x1C30: 84, - 0x1C31: 84, - 0x1C32: 84, - 0x1C33: 84, - 0x1C36: 84, - 0x1C37: 84, - 0x1CD0: 84, - 0x1CD1: 84, - 0x1CD2: 84, - 0x1CD4: 84, - 0x1CD5: 84, - 0x1CD6: 84, - 0x1CD7: 84, - 0x1CD8: 84, - 0x1CD9: 84, - 0x1CDA: 84, - 0x1CDB: 84, - 0x1CDC: 84, - 0x1CDD: 84, - 0x1CDE: 84, - 0x1CDF: 84, - 0x1CE0: 84, - 0x1CE2: 84, - 0x1CE3: 84, - 0x1CE4: 84, - 0x1CE5: 84, - 0x1CE6: 84, - 0x1CE7: 84, - 0x1CE8: 84, - 0x1CED: 84, - 0x1CF4: 84, - 0x1CF8: 84, - 0x1CF9: 84, - 0x1DC0: 84, - 0x1DC1: 84, - 0x1DC2: 84, - 0x1DC3: 84, - 0x1DC4: 84, - 0x1DC5: 84, - 0x1DC6: 84, - 0x1DC7: 84, - 0x1DC8: 84, - 0x1DC9: 84, - 0x1DCA: 84, - 0x1DCB: 84, - 0x1DCC: 84, - 0x1DCD: 84, - 0x1DCE: 84, - 0x1DCF: 84, - 0x1DD0: 84, - 0x1DD1: 84, - 0x1DD2: 84, - 0x1DD3: 84, - 0x1DD4: 84, - 0x1DD5: 84, - 0x1DD6: 84, - 0x1DD7: 84, - 0x1DD8: 84, - 0x1DD9: 84, - 0x1DDA: 84, - 0x1DDB: 84, - 0x1DDC: 84, - 0x1DDD: 84, - 0x1DDE: 84, - 0x1DDF: 84, - 0x1DE0: 84, - 0x1DE1: 84, - 0x1DE2: 84, - 0x1DE3: 84, - 0x1DE4: 84, - 0x1DE5: 84, - 0x1DE6: 84, - 0x1DE7: 84, - 0x1DE8: 84, - 0x1DE9: 84, - 0x1DEA: 84, - 0x1DEB: 84, - 0x1DEC: 84, - 0x1DED: 84, - 0x1DEE: 84, - 0x1DEF: 84, - 0x1DF0: 84, - 0x1DF1: 84, - 0x1DF2: 84, - 0x1DF3: 84, - 0x1DF4: 84, - 0x1DF5: 84, - 0x1DF6: 84, - 0x1DF7: 84, - 0x1DF8: 84, - 0x1DF9: 84, - 0x1DFA: 84, - 0x1DFB: 84, - 0x1DFC: 84, - 0x1DFD: 84, - 0x1DFE: 84, - 0x1DFF: 84, - 0x200B: 84, - 0x200D: 67, - 0x200E: 84, - 0x200F: 84, - 0x202A: 84, - 0x202B: 84, - 0x202C: 84, - 0x202D: 84, - 0x202E: 84, - 0x2060: 84, - 0x2061: 84, - 0x2062: 84, - 0x2063: 84, - 0x2064: 84, - 0x206A: 84, - 0x206B: 84, - 0x206C: 84, - 0x206D: 84, - 0x206E: 84, - 0x206F: 84, - 0x20D0: 84, - 0x20D1: 84, - 0x20D2: 84, - 0x20D3: 84, - 0x20D4: 84, - 0x20D5: 84, - 0x20D6: 84, - 0x20D7: 84, - 0x20D8: 84, - 0x20D9: 84, - 0x20DA: 84, - 0x20DB: 84, - 0x20DC: 84, - 0x20DD: 84, - 0x20DE: 84, - 0x20DF: 84, - 0x20E0: 84, - 0x20E1: 84, - 0x20E2: 84, - 0x20E3: 84, - 0x20E4: 84, - 0x20E5: 84, - 0x20E6: 84, - 0x20E7: 84, - 0x20E8: 84, - 0x20E9: 84, - 0x20EA: 84, - 0x20EB: 84, - 0x20EC: 84, - 0x20ED: 84, - 0x20EE: 84, - 0x20EF: 84, - 0x20F0: 84, - 0x2CEF: 84, - 0x2CF0: 84, - 0x2CF1: 84, - 0x2D7F: 84, - 0x2DE0: 84, - 0x2DE1: 84, - 0x2DE2: 84, - 0x2DE3: 84, - 0x2DE4: 84, - 0x2DE5: 84, - 0x2DE6: 84, - 0x2DE7: 84, - 0x2DE8: 84, - 0x2DE9: 84, - 0x2DEA: 84, - 0x2DEB: 84, - 0x2DEC: 84, - 0x2DED: 84, - 0x2DEE: 84, - 0x2DEF: 84, - 0x2DF0: 84, - 0x2DF1: 84, - 0x2DF2: 84, - 0x2DF3: 84, - 0x2DF4: 84, - 0x2DF5: 84, - 0x2DF6: 84, - 0x2DF7: 84, - 0x2DF8: 84, - 0x2DF9: 84, - 0x2DFA: 84, - 0x2DFB: 84, - 0x2DFC: 84, - 0x2DFD: 84, - 0x2DFE: 84, - 0x2DFF: 84, - 0x302A: 84, - 0x302B: 84, - 0x302C: 84, - 0x302D: 84, - 0x3099: 84, - 0x309A: 84, - 0xA66F: 84, - 0xA670: 84, - 0xA671: 84, - 0xA672: 84, - 0xA674: 84, - 0xA675: 84, - 0xA676: 84, - 0xA677: 84, - 0xA678: 84, - 0xA679: 84, - 0xA67A: 84, - 0xA67B: 84, - 0xA67C: 84, - 0xA67D: 84, - 0xA69E: 84, - 0xA69F: 84, - 0xA6F0: 84, - 0xA6F1: 84, - 0xA802: 84, - 0xA806: 84, - 0xA80B: 84, - 0xA825: 84, - 0xA826: 84, - 0xA82C: 84, - 0xA840: 68, - 0xA841: 68, - 0xA842: 68, - 0xA843: 68, - 0xA844: 68, - 0xA845: 68, - 0xA846: 68, - 0xA847: 68, - 0xA848: 68, - 0xA849: 68, - 0xA84A: 68, - 0xA84B: 68, - 0xA84C: 68, - 0xA84D: 68, - 0xA84E: 68, - 0xA84F: 68, - 0xA850: 68, - 0xA851: 68, - 0xA852: 68, - 0xA853: 68, - 0xA854: 68, - 0xA855: 68, - 0xA856: 68, - 0xA857: 68, - 0xA858: 68, - 0xA859: 68, - 0xA85A: 68, - 0xA85B: 68, - 0xA85C: 68, - 0xA85D: 68, - 0xA85E: 68, - 0xA85F: 68, - 0xA860: 68, - 0xA861: 68, - 0xA862: 68, - 0xA863: 68, - 0xA864: 68, - 0xA865: 68, - 0xA866: 68, - 0xA867: 68, - 0xA868: 68, - 0xA869: 68, - 0xA86A: 68, - 0xA86B: 68, - 0xA86C: 68, - 0xA86D: 68, - 0xA86E: 68, - 0xA86F: 68, - 0xA870: 68, - 0xA871: 68, - 0xA872: 76, - 0xA8C4: 84, - 0xA8C5: 84, - 0xA8E0: 84, - 0xA8E1: 84, - 0xA8E2: 84, - 0xA8E3: 84, - 0xA8E4: 84, - 0xA8E5: 84, - 0xA8E6: 84, - 0xA8E7: 84, - 0xA8E8: 84, - 0xA8E9: 84, - 0xA8EA: 84, - 0xA8EB: 84, - 0xA8EC: 84, - 0xA8ED: 84, - 0xA8EE: 84, - 0xA8EF: 84, - 0xA8F0: 84, - 0xA8F1: 84, - 0xA8FF: 84, - 0xA926: 84, - 0xA927: 84, - 0xA928: 84, - 0xA929: 84, - 0xA92A: 84, - 0xA92B: 84, - 0xA92C: 84, - 0xA92D: 84, - 0xA947: 84, - 0xA948: 84, - 0xA949: 84, - 0xA94A: 84, - 0xA94B: 84, - 0xA94C: 84, - 0xA94D: 84, - 0xA94E: 84, - 0xA94F: 84, - 0xA950: 84, - 0xA951: 84, - 0xA980: 84, - 0xA981: 84, - 0xA982: 84, - 0xA9B3: 84, - 0xA9B6: 84, - 0xA9B7: 84, - 0xA9B8: 84, - 0xA9B9: 84, - 0xA9BC: 84, - 0xA9BD: 84, - 0xA9E5: 84, - 0xAA29: 84, - 0xAA2A: 84, - 0xAA2B: 84, - 0xAA2C: 84, - 0xAA2D: 84, - 0xAA2E: 84, - 0xAA31: 84, - 0xAA32: 84, - 0xAA35: 84, - 0xAA36: 84, - 0xAA43: 84, - 0xAA4C: 84, - 0xAA7C: 84, - 0xAAB0: 84, - 0xAAB2: 84, - 0xAAB3: 84, - 0xAAB4: 84, - 0xAAB7: 84, - 0xAAB8: 84, - 0xAABE: 84, - 0xAABF: 84, - 0xAAC1: 84, - 0xAAEC: 84, - 0xAAED: 84, - 0xAAF6: 84, - 0xABE5: 84, - 0xABE8: 84, - 0xABED: 84, - 0xFB1E: 84, - 0xFE00: 84, - 0xFE01: 84, - 0xFE02: 84, - 0xFE03: 84, - 0xFE04: 84, - 0xFE05: 84, - 0xFE06: 84, - 0xFE07: 84, - 0xFE08: 84, - 0xFE09: 84, - 0xFE0A: 84, - 0xFE0B: 84, - 0xFE0C: 84, - 0xFE0D: 84, - 0xFE0E: 84, - 0xFE0F: 84, - 0xFE20: 84, - 0xFE21: 84, - 0xFE22: 84, - 0xFE23: 84, - 0xFE24: 84, - 0xFE25: 84, - 0xFE26: 84, - 0xFE27: 84, - 0xFE28: 84, - 0xFE29: 84, - 0xFE2A: 84, - 0xFE2B: 84, - 0xFE2C: 84, - 0xFE2D: 84, - 0xFE2E: 84, - 0xFE2F: 84, - 0xFEFF: 84, - 0xFFF9: 84, - 0xFFFA: 84, - 0xFFFB: 84, - 0x101FD: 84, - 0x102E0: 84, - 0x10376: 84, - 0x10377: 84, - 0x10378: 84, - 0x10379: 84, - 0x1037A: 84, - 0x10A01: 84, - 0x10A02: 84, - 0x10A03: 84, - 0x10A05: 84, - 0x10A06: 84, - 0x10A0C: 84, - 0x10A0D: 84, - 0x10A0E: 84, - 0x10A0F: 84, - 0x10A38: 84, - 0x10A39: 84, - 0x10A3A: 84, - 0x10A3F: 84, - 0x10AC0: 68, - 0x10AC1: 68, - 0x10AC2: 68, - 0x10AC3: 68, - 0x10AC4: 68, - 0x10AC5: 82, - 0x10AC7: 82, - 0x10AC9: 82, - 0x10ACA: 82, - 0x10ACD: 76, - 0x10ACE: 82, - 0x10ACF: 82, - 0x10AD0: 82, - 0x10AD1: 82, - 0x10AD2: 82, - 0x10AD3: 68, - 0x10AD4: 68, - 0x10AD5: 68, - 0x10AD6: 68, - 0x10AD7: 76, - 0x10AD8: 68, - 0x10AD9: 68, - 0x10ADA: 68, - 0x10ADB: 68, - 0x10ADC: 68, - 0x10ADD: 82, - 0x10ADE: 68, - 0x10ADF: 68, - 0x10AE0: 68, - 0x10AE1: 82, - 0x10AE4: 82, - 0x10AE5: 84, - 0x10AE6: 84, - 0x10AEB: 68, - 0x10AEC: 68, - 0x10AED: 68, - 0x10AEE: 68, - 0x10AEF: 82, - 0x10B80: 68, - 0x10B81: 82, - 0x10B82: 68, - 0x10B83: 82, - 0x10B84: 82, - 0x10B85: 82, - 0x10B86: 68, - 0x10B87: 68, - 0x10B88: 68, - 0x10B89: 82, - 0x10B8A: 68, - 0x10B8B: 68, - 0x10B8C: 82, - 0x10B8D: 68, - 0x10B8E: 82, - 0x10B8F: 82, - 0x10B90: 68, - 0x10B91: 82, - 0x10BA9: 82, - 0x10BAA: 82, - 0x10BAB: 82, - 0x10BAC: 82, - 0x10BAD: 68, - 0x10BAE: 68, - 0x10D00: 76, - 0x10D01: 68, - 0x10D02: 68, - 0x10D03: 68, - 0x10D04: 68, - 0x10D05: 68, - 0x10D06: 68, - 0x10D07: 68, - 0x10D08: 68, - 0x10D09: 68, - 0x10D0A: 68, - 0x10D0B: 68, - 0x10D0C: 68, - 0x10D0D: 68, - 0x10D0E: 68, - 0x10D0F: 68, - 0x10D10: 68, - 0x10D11: 68, - 0x10D12: 68, - 0x10D13: 68, - 0x10D14: 68, - 0x10D15: 68, - 0x10D16: 68, - 0x10D17: 68, - 0x10D18: 68, - 0x10D19: 68, - 0x10D1A: 68, - 0x10D1B: 68, - 0x10D1C: 68, - 0x10D1D: 68, - 0x10D1E: 68, - 0x10D1F: 68, - 0x10D20: 68, - 0x10D21: 68, - 0x10D22: 82, - 0x10D23: 68, - 0x10D24: 84, - 0x10D25: 84, - 0x10D26: 84, - 0x10D27: 84, - 0x10D69: 84, - 0x10D6A: 84, - 0x10D6B: 84, - 0x10D6C: 84, - 0x10D6D: 84, - 0x10EAB: 84, - 0x10EAC: 84, - 0x10EC2: 82, - 0x10EC3: 68, - 0x10EC4: 68, - 0x10EFC: 84, - 0x10EFD: 84, - 0x10EFE: 84, - 0x10EFF: 84, - 0x10F30: 68, - 0x10F31: 68, - 0x10F32: 68, - 0x10F33: 82, - 0x10F34: 68, - 0x10F35: 68, - 0x10F36: 68, - 0x10F37: 68, - 0x10F38: 68, - 0x10F39: 68, - 0x10F3A: 68, - 0x10F3B: 68, - 0x10F3C: 68, - 0x10F3D: 68, - 0x10F3E: 68, - 0x10F3F: 68, - 0x10F40: 68, - 0x10F41: 68, - 0x10F42: 68, - 0x10F43: 68, - 0x10F44: 68, - 0x10F46: 84, - 0x10F47: 84, - 0x10F48: 84, - 0x10F49: 84, - 0x10F4A: 84, - 0x10F4B: 84, - 0x10F4C: 84, - 0x10F4D: 84, - 0x10F4E: 84, - 0x10F4F: 84, - 0x10F50: 84, - 0x10F51: 68, - 0x10F52: 68, - 0x10F53: 68, - 0x10F54: 82, - 0x10F70: 68, - 0x10F71: 68, - 0x10F72: 68, - 0x10F73: 68, - 0x10F74: 82, - 0x10F75: 82, - 0x10F76: 68, - 0x10F77: 68, - 0x10F78: 68, - 0x10F79: 68, - 0x10F7A: 68, - 0x10F7B: 68, - 0x10F7C: 68, - 0x10F7D: 68, - 0x10F7E: 68, - 0x10F7F: 68, - 0x10F80: 68, - 0x10F81: 68, - 0x10F82: 84, - 0x10F83: 84, - 0x10F84: 84, - 0x10F85: 84, - 0x10FB0: 68, - 0x10FB2: 68, - 0x10FB3: 68, - 0x10FB4: 82, - 0x10FB5: 82, - 0x10FB6: 82, - 0x10FB8: 68, - 0x10FB9: 82, - 0x10FBA: 82, - 0x10FBB: 68, - 0x10FBC: 68, - 0x10FBD: 82, - 0x10FBE: 68, - 0x10FBF: 68, - 0x10FC1: 68, - 0x10FC2: 82, - 0x10FC3: 82, - 0x10FC4: 68, - 0x10FC9: 82, - 0x10FCA: 68, - 0x10FCB: 76, - 0x11001: 84, - 0x11038: 84, - 0x11039: 84, - 0x1103A: 84, - 0x1103B: 84, - 0x1103C: 84, - 0x1103D: 84, - 0x1103E: 84, - 0x1103F: 84, - 0x11040: 84, - 0x11041: 84, - 0x11042: 84, - 0x11043: 84, - 0x11044: 84, - 0x11045: 84, - 0x11046: 84, - 0x11070: 84, - 0x11073: 84, - 0x11074: 84, - 0x1107F: 84, - 0x11080: 84, - 0x11081: 84, - 0x110B3: 84, - 0x110B4: 84, - 0x110B5: 84, - 0x110B6: 84, - 0x110B9: 84, - 0x110BA: 84, - 0x110C2: 84, - 0x11100: 84, - 0x11101: 84, - 0x11102: 84, - 0x11127: 84, - 0x11128: 84, - 0x11129: 84, - 0x1112A: 84, - 0x1112B: 84, - 0x1112D: 84, - 0x1112E: 84, - 0x1112F: 84, - 0x11130: 84, - 0x11131: 84, - 0x11132: 84, - 0x11133: 84, - 0x11134: 84, - 0x11173: 84, - 0x11180: 84, - 0x11181: 84, - 0x111B6: 84, - 0x111B7: 84, - 0x111B8: 84, - 0x111B9: 84, - 0x111BA: 84, - 0x111BB: 84, - 0x111BC: 84, - 0x111BD: 84, - 0x111BE: 84, - 0x111C9: 84, - 0x111CA: 84, - 0x111CB: 84, - 0x111CC: 84, - 0x111CF: 84, - 0x1122F: 84, - 0x11230: 84, - 0x11231: 84, - 0x11234: 84, - 0x11236: 84, - 0x11237: 84, - 0x1123E: 84, - 0x11241: 84, - 0x112DF: 84, - 0x112E3: 84, - 0x112E4: 84, - 0x112E5: 84, - 0x112E6: 84, - 0x112E7: 84, - 0x112E8: 84, - 0x112E9: 84, - 0x112EA: 84, - 0x11300: 84, - 0x11301: 84, - 0x1133B: 84, - 0x1133C: 84, - 0x11340: 84, - 0x11366: 84, - 0x11367: 84, - 0x11368: 84, - 0x11369: 84, - 0x1136A: 84, - 0x1136B: 84, - 0x1136C: 84, - 0x11370: 84, - 0x11371: 84, - 0x11372: 84, - 0x11373: 84, - 0x11374: 84, - 0x113BB: 84, - 0x113BC: 84, - 0x113BD: 84, - 0x113BE: 84, - 0x113BF: 84, - 0x113C0: 84, - 0x113CE: 84, - 0x113D0: 84, - 0x113D2: 84, - 0x113E1: 84, - 0x113E2: 84, - 0x11438: 84, - 0x11439: 84, - 0x1143A: 84, - 0x1143B: 84, - 0x1143C: 84, - 0x1143D: 84, - 0x1143E: 84, - 0x1143F: 84, - 0x11442: 84, - 0x11443: 84, - 0x11444: 84, - 0x11446: 84, - 0x1145E: 84, - 0x114B3: 84, - 0x114B4: 84, - 0x114B5: 84, - 0x114B6: 84, - 0x114B7: 84, - 0x114B8: 84, - 0x114BA: 84, - 0x114BF: 84, - 0x114C0: 84, - 0x114C2: 84, - 0x114C3: 84, - 0x115B2: 84, - 0x115B3: 84, - 0x115B4: 84, - 0x115B5: 84, - 0x115BC: 84, - 0x115BD: 84, - 0x115BF: 84, - 0x115C0: 84, - 0x115DC: 84, - 0x115DD: 84, - 0x11633: 84, - 0x11634: 84, - 0x11635: 84, - 0x11636: 84, - 0x11637: 84, - 0x11638: 84, - 0x11639: 84, - 0x1163A: 84, - 0x1163D: 84, - 0x1163F: 84, - 0x11640: 84, - 0x116AB: 84, - 0x116AD: 84, - 0x116B0: 84, - 0x116B1: 84, - 0x116B2: 84, - 0x116B3: 84, - 0x116B4: 84, - 0x116B5: 84, - 0x116B7: 84, - 0x1171D: 84, - 0x1171F: 84, - 0x11722: 84, - 0x11723: 84, - 0x11724: 84, - 0x11725: 84, - 0x11727: 84, - 0x11728: 84, - 0x11729: 84, - 0x1172A: 84, - 0x1172B: 84, - 0x1182F: 84, - 0x11830: 84, - 0x11831: 84, - 0x11832: 84, - 0x11833: 84, - 0x11834: 84, - 0x11835: 84, - 0x11836: 84, - 0x11837: 84, - 0x11839: 84, - 0x1183A: 84, - 0x1193B: 84, - 0x1193C: 84, - 0x1193E: 84, - 0x11943: 84, - 0x119D4: 84, - 0x119D5: 84, - 0x119D6: 84, - 0x119D7: 84, - 0x119DA: 84, - 0x119DB: 84, - 0x119E0: 84, - 0x11A01: 84, - 0x11A02: 84, - 0x11A03: 84, - 0x11A04: 84, - 0x11A05: 84, - 0x11A06: 84, - 0x11A07: 84, - 0x11A08: 84, - 0x11A09: 84, - 0x11A0A: 84, - 0x11A33: 84, - 0x11A34: 84, - 0x11A35: 84, - 0x11A36: 84, - 0x11A37: 84, - 0x11A38: 84, - 0x11A3B: 84, - 0x11A3C: 84, - 0x11A3D: 84, - 0x11A3E: 84, - 0x11A47: 84, - 0x11A51: 84, - 0x11A52: 84, - 0x11A53: 84, - 0x11A54: 84, - 0x11A55: 84, - 0x11A56: 84, - 0x11A59: 84, - 0x11A5A: 84, - 0x11A5B: 84, - 0x11A8A: 84, - 0x11A8B: 84, - 0x11A8C: 84, - 0x11A8D: 84, - 0x11A8E: 84, - 0x11A8F: 84, - 0x11A90: 84, - 0x11A91: 84, - 0x11A92: 84, - 0x11A93: 84, - 0x11A94: 84, - 0x11A95: 84, - 0x11A96: 84, - 0x11A98: 84, - 0x11A99: 84, - 0x11C30: 84, - 0x11C31: 84, - 0x11C32: 84, - 0x11C33: 84, - 0x11C34: 84, - 0x11C35: 84, - 0x11C36: 84, - 0x11C38: 84, - 0x11C39: 84, - 0x11C3A: 84, - 0x11C3B: 84, - 0x11C3C: 84, - 0x11C3D: 84, - 0x11C3F: 84, - 0x11C92: 84, - 0x11C93: 84, - 0x11C94: 84, - 0x11C95: 84, - 0x11C96: 84, - 0x11C97: 84, - 0x11C98: 84, - 0x11C99: 84, - 0x11C9A: 84, - 0x11C9B: 84, - 0x11C9C: 84, - 0x11C9D: 84, - 0x11C9E: 84, - 0x11C9F: 84, - 0x11CA0: 84, - 0x11CA1: 84, - 0x11CA2: 84, - 0x11CA3: 84, - 0x11CA4: 84, - 0x11CA5: 84, - 0x11CA6: 84, - 0x11CA7: 84, - 0x11CAA: 84, - 0x11CAB: 84, - 0x11CAC: 84, - 0x11CAD: 84, - 0x11CAE: 84, - 0x11CAF: 84, - 0x11CB0: 84, - 0x11CB2: 84, - 0x11CB3: 84, - 0x11CB5: 84, - 0x11CB6: 84, - 0x11D31: 84, - 0x11D32: 84, - 0x11D33: 84, - 0x11D34: 84, - 0x11D35: 84, - 0x11D36: 84, - 0x11D3A: 84, - 0x11D3C: 84, - 0x11D3D: 84, - 0x11D3F: 84, - 0x11D40: 84, - 0x11D41: 84, - 0x11D42: 84, - 0x11D43: 84, - 0x11D44: 84, - 0x11D45: 84, - 0x11D47: 84, - 0x11D90: 84, - 0x11D91: 84, - 0x11D95: 84, - 0x11D97: 84, - 0x11EF3: 84, - 0x11EF4: 84, - 0x11F00: 84, - 0x11F01: 84, - 0x11F36: 84, - 0x11F37: 84, - 0x11F38: 84, - 0x11F39: 84, - 0x11F3A: 84, - 0x11F40: 84, - 0x11F42: 84, - 0x11F5A: 84, - 0x13430: 84, - 0x13431: 84, - 0x13432: 84, - 0x13433: 84, - 0x13434: 84, - 0x13435: 84, - 0x13436: 84, - 0x13437: 84, - 0x13438: 84, - 0x13439: 84, - 0x1343A: 84, - 0x1343B: 84, - 0x1343C: 84, - 0x1343D: 84, - 0x1343E: 84, - 0x1343F: 84, - 0x13440: 84, - 0x13447: 84, - 0x13448: 84, - 0x13449: 84, - 0x1344A: 84, - 0x1344B: 84, - 0x1344C: 84, - 0x1344D: 84, - 0x1344E: 84, - 0x1344F: 84, - 0x13450: 84, - 0x13451: 84, - 0x13452: 84, - 0x13453: 84, - 0x13454: 84, - 0x13455: 84, - 0x1611E: 84, - 0x1611F: 84, - 0x16120: 84, - 0x16121: 84, - 0x16122: 84, - 0x16123: 84, - 0x16124: 84, - 0x16125: 84, - 0x16126: 84, - 0x16127: 84, - 0x16128: 84, - 0x16129: 84, - 0x1612D: 84, - 0x1612E: 84, - 0x1612F: 84, - 0x16AF0: 84, - 0x16AF1: 84, - 0x16AF2: 84, - 0x16AF3: 84, - 0x16AF4: 84, - 0x16B30: 84, - 0x16B31: 84, - 0x16B32: 84, - 0x16B33: 84, - 0x16B34: 84, - 0x16B35: 84, - 0x16B36: 84, - 0x16F4F: 84, - 0x16F8F: 84, - 0x16F90: 84, - 0x16F91: 84, - 0x16F92: 84, - 0x16FE4: 84, - 0x1BC9D: 84, - 0x1BC9E: 84, - 0x1BCA0: 84, - 0x1BCA1: 84, - 0x1BCA2: 84, - 0x1BCA3: 84, - 0x1CF00: 84, - 0x1CF01: 84, - 0x1CF02: 84, - 0x1CF03: 84, - 0x1CF04: 84, - 0x1CF05: 84, - 0x1CF06: 84, - 0x1CF07: 84, - 0x1CF08: 84, - 0x1CF09: 84, - 0x1CF0A: 84, - 0x1CF0B: 84, - 0x1CF0C: 84, - 0x1CF0D: 84, - 0x1CF0E: 84, - 0x1CF0F: 84, - 0x1CF10: 84, - 0x1CF11: 84, - 0x1CF12: 84, - 0x1CF13: 84, - 0x1CF14: 84, - 0x1CF15: 84, - 0x1CF16: 84, - 0x1CF17: 84, - 0x1CF18: 84, - 0x1CF19: 84, - 0x1CF1A: 84, - 0x1CF1B: 84, - 0x1CF1C: 84, - 0x1CF1D: 84, - 0x1CF1E: 84, - 0x1CF1F: 84, - 0x1CF20: 84, - 0x1CF21: 84, - 0x1CF22: 84, - 0x1CF23: 84, - 0x1CF24: 84, - 0x1CF25: 84, - 0x1CF26: 84, - 0x1CF27: 84, - 0x1CF28: 84, - 0x1CF29: 84, - 0x1CF2A: 84, - 0x1CF2B: 84, - 0x1CF2C: 84, - 0x1CF2D: 84, - 0x1CF30: 84, - 0x1CF31: 84, - 0x1CF32: 84, - 0x1CF33: 84, - 0x1CF34: 84, - 0x1CF35: 84, - 0x1CF36: 84, - 0x1CF37: 84, - 0x1CF38: 84, - 0x1CF39: 84, - 0x1CF3A: 84, - 0x1CF3B: 84, - 0x1CF3C: 84, - 0x1CF3D: 84, - 0x1CF3E: 84, - 0x1CF3F: 84, - 0x1CF40: 84, - 0x1CF41: 84, - 0x1CF42: 84, - 0x1CF43: 84, - 0x1CF44: 84, - 0x1CF45: 84, - 0x1CF46: 84, - 0x1D167: 84, - 0x1D168: 84, - 0x1D169: 84, - 0x1D173: 84, - 0x1D174: 84, - 0x1D175: 84, - 0x1D176: 84, - 0x1D177: 84, - 0x1D178: 84, - 0x1D179: 84, - 0x1D17A: 84, - 0x1D17B: 84, - 0x1D17C: 84, - 0x1D17D: 84, - 0x1D17E: 84, - 0x1D17F: 84, - 0x1D180: 84, - 0x1D181: 84, - 0x1D182: 84, - 0x1D185: 84, - 0x1D186: 84, - 0x1D187: 84, - 0x1D188: 84, - 0x1D189: 84, - 0x1D18A: 84, - 0x1D18B: 84, - 0x1D1AA: 84, - 0x1D1AB: 84, - 0x1D1AC: 84, - 0x1D1AD: 84, - 0x1D242: 84, - 0x1D243: 84, - 0x1D244: 84, - 0x1DA00: 84, - 0x1DA01: 84, - 0x1DA02: 84, - 0x1DA03: 84, - 0x1DA04: 84, - 0x1DA05: 84, - 0x1DA06: 84, - 0x1DA07: 84, - 0x1DA08: 84, - 0x1DA09: 84, - 0x1DA0A: 84, - 0x1DA0B: 84, - 0x1DA0C: 84, - 0x1DA0D: 84, - 0x1DA0E: 84, - 0x1DA0F: 84, - 0x1DA10: 84, - 0x1DA11: 84, - 0x1DA12: 84, - 0x1DA13: 84, - 0x1DA14: 84, - 0x1DA15: 84, - 0x1DA16: 84, - 0x1DA17: 84, - 0x1DA18: 84, - 0x1DA19: 84, - 0x1DA1A: 84, - 0x1DA1B: 84, - 0x1DA1C: 84, - 0x1DA1D: 84, - 0x1DA1E: 84, - 0x1DA1F: 84, - 0x1DA20: 84, - 0x1DA21: 84, - 0x1DA22: 84, - 0x1DA23: 84, - 0x1DA24: 84, - 0x1DA25: 84, - 0x1DA26: 84, - 0x1DA27: 84, - 0x1DA28: 84, - 0x1DA29: 84, - 0x1DA2A: 84, - 0x1DA2B: 84, - 0x1DA2C: 84, - 0x1DA2D: 84, - 0x1DA2E: 84, - 0x1DA2F: 84, - 0x1DA30: 84, - 0x1DA31: 84, - 0x1DA32: 84, - 0x1DA33: 84, - 0x1DA34: 84, - 0x1DA35: 84, - 0x1DA36: 84, - 0x1DA3B: 84, - 0x1DA3C: 84, - 0x1DA3D: 84, - 0x1DA3E: 84, - 0x1DA3F: 84, - 0x1DA40: 84, - 0x1DA41: 84, - 0x1DA42: 84, - 0x1DA43: 84, - 0x1DA44: 84, - 0x1DA45: 84, - 0x1DA46: 84, - 0x1DA47: 84, - 0x1DA48: 84, - 0x1DA49: 84, - 0x1DA4A: 84, - 0x1DA4B: 84, - 0x1DA4C: 84, - 0x1DA4D: 84, - 0x1DA4E: 84, - 0x1DA4F: 84, - 0x1DA50: 84, - 0x1DA51: 84, - 0x1DA52: 84, - 0x1DA53: 84, - 0x1DA54: 84, - 0x1DA55: 84, - 0x1DA56: 84, - 0x1DA57: 84, - 0x1DA58: 84, - 0x1DA59: 84, - 0x1DA5A: 84, - 0x1DA5B: 84, - 0x1DA5C: 84, - 0x1DA5D: 84, - 0x1DA5E: 84, - 0x1DA5F: 84, - 0x1DA60: 84, - 0x1DA61: 84, - 0x1DA62: 84, - 0x1DA63: 84, - 0x1DA64: 84, - 0x1DA65: 84, - 0x1DA66: 84, - 0x1DA67: 84, - 0x1DA68: 84, - 0x1DA69: 84, - 0x1DA6A: 84, - 0x1DA6B: 84, - 0x1DA6C: 84, - 0x1DA75: 84, - 0x1DA84: 84, - 0x1DA9B: 84, - 0x1DA9C: 84, - 0x1DA9D: 84, - 0x1DA9E: 84, - 0x1DA9F: 84, - 0x1DAA1: 84, - 0x1DAA2: 84, - 0x1DAA3: 84, - 0x1DAA4: 84, - 0x1DAA5: 84, - 0x1DAA6: 84, - 0x1DAA7: 84, - 0x1DAA8: 84, - 0x1DAA9: 84, - 0x1DAAA: 84, - 0x1DAAB: 84, - 0x1DAAC: 84, - 0x1DAAD: 84, - 0x1DAAE: 84, - 0x1DAAF: 84, - 0x1E000: 84, - 0x1E001: 84, - 0x1E002: 84, - 0x1E003: 84, - 0x1E004: 84, - 0x1E005: 84, - 0x1E006: 84, - 0x1E008: 84, - 0x1E009: 84, - 0x1E00A: 84, - 0x1E00B: 84, - 0x1E00C: 84, - 0x1E00D: 84, - 0x1E00E: 84, - 0x1E00F: 84, - 0x1E010: 84, - 0x1E011: 84, - 0x1E012: 84, - 0x1E013: 84, - 0x1E014: 84, - 0x1E015: 84, - 0x1E016: 84, - 0x1E017: 84, - 0x1E018: 84, - 0x1E01B: 84, - 0x1E01C: 84, - 0x1E01D: 84, - 0x1E01E: 84, - 0x1E01F: 84, - 0x1E020: 84, - 0x1E021: 84, - 0x1E023: 84, - 0x1E024: 84, - 0x1E026: 84, - 0x1E027: 84, - 0x1E028: 84, - 0x1E029: 84, - 0x1E02A: 84, - 0x1E08F: 84, - 0x1E130: 84, - 0x1E131: 84, - 0x1E132: 84, - 0x1E133: 84, - 0x1E134: 84, - 0x1E135: 84, - 0x1E136: 84, - 0x1E2AE: 84, - 0x1E2EC: 84, - 0x1E2ED: 84, - 0x1E2EE: 84, - 0x1E2EF: 84, - 0x1E4EC: 84, - 0x1E4ED: 84, - 0x1E4EE: 84, - 0x1E4EF: 84, - 0x1E5EE: 84, - 0x1E5EF: 84, - 0x1E8D0: 84, - 0x1E8D1: 84, - 0x1E8D2: 84, - 0x1E8D3: 84, - 0x1E8D4: 84, - 0x1E8D5: 84, - 0x1E8D6: 84, - 0x1E900: 68, - 0x1E901: 68, - 0x1E902: 68, - 0x1E903: 68, - 0x1E904: 68, - 0x1E905: 68, - 0x1E906: 68, - 0x1E907: 68, - 0x1E908: 68, - 0x1E909: 68, - 0x1E90A: 68, - 0x1E90B: 68, - 0x1E90C: 68, - 0x1E90D: 68, - 0x1E90E: 68, - 0x1E90F: 68, - 0x1E910: 68, - 0x1E911: 68, - 0x1E912: 68, - 0x1E913: 68, - 0x1E914: 68, - 0x1E915: 68, - 0x1E916: 68, - 0x1E917: 68, - 0x1E918: 68, - 0x1E919: 68, - 0x1E91A: 68, - 0x1E91B: 68, - 0x1E91C: 68, - 0x1E91D: 68, - 0x1E91E: 68, - 0x1E91F: 68, - 0x1E920: 68, - 0x1E921: 68, - 0x1E922: 68, - 0x1E923: 68, - 0x1E924: 68, - 0x1E925: 68, - 0x1E926: 68, - 0x1E927: 68, - 0x1E928: 68, - 0x1E929: 68, - 0x1E92A: 68, - 0x1E92B: 68, - 0x1E92C: 68, - 0x1E92D: 68, - 0x1E92E: 68, - 0x1E92F: 68, - 0x1E930: 68, - 0x1E931: 68, - 0x1E932: 68, - 0x1E933: 68, - 0x1E934: 68, - 0x1E935: 68, - 0x1E936: 68, - 0x1E937: 68, - 0x1E938: 68, - 0x1E939: 68, - 0x1E93A: 68, - 0x1E93B: 68, - 0x1E93C: 68, - 0x1E93D: 68, - 0x1E93E: 68, - 0x1E93F: 68, - 0x1E940: 68, - 0x1E941: 68, - 0x1E942: 68, - 0x1E943: 68, - 0x1E944: 84, - 0x1E945: 84, - 0x1E946: 84, - 0x1E947: 84, - 0x1E948: 84, - 0x1E949: 84, - 0x1E94A: 84, - 0x1E94B: 84, - 0xE0001: 84, - 0xE0020: 84, - 0xE0021: 84, - 0xE0022: 84, - 0xE0023: 84, - 0xE0024: 84, - 0xE0025: 84, - 0xE0026: 84, - 0xE0027: 84, - 0xE0028: 84, - 0xE0029: 84, - 0xE002A: 84, - 0xE002B: 84, - 0xE002C: 84, - 0xE002D: 84, - 0xE002E: 84, - 0xE002F: 84, - 0xE0030: 84, - 0xE0031: 84, - 0xE0032: 84, - 0xE0033: 84, - 0xE0034: 84, - 0xE0035: 84, - 0xE0036: 84, - 0xE0037: 84, - 0xE0038: 84, - 0xE0039: 84, - 0xE003A: 84, - 0xE003B: 84, - 0xE003C: 84, - 0xE003D: 84, - 0xE003E: 84, - 0xE003F: 84, - 0xE0040: 84, - 0xE0041: 84, - 0xE0042: 84, - 0xE0043: 84, - 0xE0044: 84, - 0xE0045: 84, - 0xE0046: 84, - 0xE0047: 84, - 0xE0048: 84, - 0xE0049: 84, - 0xE004A: 84, - 0xE004B: 84, - 0xE004C: 84, - 0xE004D: 84, - 0xE004E: 84, - 0xE004F: 84, - 0xE0050: 84, - 0xE0051: 84, - 0xE0052: 84, - 0xE0053: 84, - 0xE0054: 84, - 0xE0055: 84, - 0xE0056: 84, - 0xE0057: 84, - 0xE0058: 84, - 0xE0059: 84, - 0xE005A: 84, - 0xE005B: 84, - 0xE005C: 84, - 0xE005D: 84, - 0xE005E: 84, - 0xE005F: 84, - 0xE0060: 84, - 0xE0061: 84, - 0xE0062: 84, - 0xE0063: 84, - 0xE0064: 84, - 0xE0065: 84, - 0xE0066: 84, - 0xE0067: 84, - 0xE0068: 84, - 0xE0069: 84, - 0xE006A: 84, - 0xE006B: 84, - 0xE006C: 84, - 0xE006D: 84, - 0xE006E: 84, - 0xE006F: 84, - 0xE0070: 84, - 0xE0071: 84, - 0xE0072: 84, - 0xE0073: 84, - 0xE0074: 84, - 0xE0075: 84, - 0xE0076: 84, - 0xE0077: 84, - 0xE0078: 84, - 0xE0079: 84, - 0xE007A: 84, - 0xE007B: 84, - 0xE007C: 84, - 0xE007D: 84, - 0xE007E: 84, - 0xE007F: 84, - 0xE0100: 84, - 0xE0101: 84, - 0xE0102: 84, - 0xE0103: 84, - 0xE0104: 84, - 0xE0105: 84, - 0xE0106: 84, - 0xE0107: 84, - 0xE0108: 84, - 0xE0109: 84, - 0xE010A: 84, - 0xE010B: 84, - 0xE010C: 84, - 0xE010D: 84, - 0xE010E: 84, - 0xE010F: 84, - 0xE0110: 84, - 0xE0111: 84, - 0xE0112: 84, - 0xE0113: 84, - 0xE0114: 84, - 0xE0115: 84, - 0xE0116: 84, - 0xE0117: 84, - 0xE0118: 84, - 0xE0119: 84, - 0xE011A: 84, - 0xE011B: 84, - 0xE011C: 84, - 0xE011D: 84, - 0xE011E: 84, - 0xE011F: 84, - 0xE0120: 84, - 0xE0121: 84, - 0xE0122: 84, - 0xE0123: 84, - 0xE0124: 84, - 0xE0125: 84, - 0xE0126: 84, - 0xE0127: 84, - 0xE0128: 84, - 0xE0129: 84, - 0xE012A: 84, - 0xE012B: 84, - 0xE012C: 84, - 0xE012D: 84, - 0xE012E: 84, - 0xE012F: 84, - 0xE0130: 84, - 0xE0131: 84, - 0xE0132: 84, - 0xE0133: 84, - 0xE0134: 84, - 0xE0135: 84, - 0xE0136: 84, - 0xE0137: 84, - 0xE0138: 84, - 0xE0139: 84, - 0xE013A: 84, - 0xE013B: 84, - 0xE013C: 84, - 0xE013D: 84, - 0xE013E: 84, - 0xE013F: 84, - 0xE0140: 84, - 0xE0141: 84, - 0xE0142: 84, - 0xE0143: 84, - 0xE0144: 84, - 0xE0145: 84, - 0xE0146: 84, - 0xE0147: 84, - 0xE0148: 84, - 0xE0149: 84, - 0xE014A: 84, - 0xE014B: 84, - 0xE014C: 84, - 0xE014D: 84, - 0xE014E: 84, - 0xE014F: 84, - 0xE0150: 84, - 0xE0151: 84, - 0xE0152: 84, - 0xE0153: 84, - 0xE0154: 84, - 0xE0155: 84, - 0xE0156: 84, - 0xE0157: 84, - 0xE0158: 84, - 0xE0159: 84, - 0xE015A: 84, - 0xE015B: 84, - 0xE015C: 84, - 0xE015D: 84, - 0xE015E: 84, - 0xE015F: 84, - 0xE0160: 84, - 0xE0161: 84, - 0xE0162: 84, - 0xE0163: 84, - 0xE0164: 84, - 0xE0165: 84, - 0xE0166: 84, - 0xE0167: 84, - 0xE0168: 84, - 0xE0169: 84, - 0xE016A: 84, - 0xE016B: 84, - 0xE016C: 84, - 0xE016D: 84, - 0xE016E: 84, - 0xE016F: 84, - 0xE0170: 84, - 0xE0171: 84, - 0xE0172: 84, - 0xE0173: 84, - 0xE0174: 84, - 0xE0175: 84, - 0xE0176: 84, - 0xE0177: 84, - 0xE0178: 84, - 0xE0179: 84, - 0xE017A: 84, - 0xE017B: 84, - 0xE017C: 84, - 0xE017D: 84, - 0xE017E: 84, - 0xE017F: 84, - 0xE0180: 84, - 0xE0181: 84, - 0xE0182: 84, - 0xE0183: 84, - 0xE0184: 84, - 0xE0185: 84, - 0xE0186: 84, - 0xE0187: 84, - 0xE0188: 84, - 0xE0189: 84, - 0xE018A: 84, - 0xE018B: 84, - 0xE018C: 84, - 0xE018D: 84, - 0xE018E: 84, - 0xE018F: 84, - 0xE0190: 84, - 0xE0191: 84, - 0xE0192: 84, - 0xE0193: 84, - 0xE0194: 84, - 0xE0195: 84, - 0xE0196: 84, - 0xE0197: 84, - 0xE0198: 84, - 0xE0199: 84, - 0xE019A: 84, - 0xE019B: 84, - 0xE019C: 84, - 0xE019D: 84, - 0xE019E: 84, - 0xE019F: 84, - 0xE01A0: 84, - 0xE01A1: 84, - 0xE01A2: 84, - 0xE01A3: 84, - 0xE01A4: 84, - 0xE01A5: 84, - 0xE01A6: 84, - 0xE01A7: 84, - 0xE01A8: 84, - 0xE01A9: 84, - 0xE01AA: 84, - 0xE01AB: 84, - 0xE01AC: 84, - 0xE01AD: 84, - 0xE01AE: 84, - 0xE01AF: 84, - 0xE01B0: 84, - 0xE01B1: 84, - 0xE01B2: 84, - 0xE01B3: 84, - 0xE01B4: 84, - 0xE01B5: 84, - 0xE01B6: 84, - 0xE01B7: 84, - 0xE01B8: 84, - 0xE01B9: 84, - 0xE01BA: 84, - 0xE01BB: 84, - 0xE01BC: 84, - 0xE01BD: 84, - 0xE01BE: 84, - 0xE01BF: 84, - 0xE01C0: 84, - 0xE01C1: 84, - 0xE01C2: 84, - 0xE01C3: 84, - 0xE01C4: 84, - 0xE01C5: 84, - 0xE01C6: 84, - 0xE01C7: 84, - 0xE01C8: 84, - 0xE01C9: 84, - 0xE01CA: 84, - 0xE01CB: 84, - 0xE01CC: 84, - 0xE01CD: 84, - 0xE01CE: 84, - 0xE01CF: 84, - 0xE01D0: 84, - 0xE01D1: 84, - 0xE01D2: 84, - 0xE01D3: 84, - 0xE01D4: 84, - 0xE01D5: 84, - 0xE01D6: 84, - 0xE01D7: 84, - 0xE01D8: 84, - 0xE01D9: 84, - 0xE01DA: 84, - 0xE01DB: 84, - 0xE01DC: 84, - 0xE01DD: 84, - 0xE01DE: 84, - 0xE01DF: 84, - 0xE01E0: 84, - 0xE01E1: 84, - 0xE01E2: 84, - 0xE01E3: 84, - 0xE01E4: 84, - 0xE01E5: 84, - 0xE01E6: 84, - 0xE01E7: 84, - 0xE01E8: 84, - 0xE01E9: 84, - 0xE01EA: 84, - 0xE01EB: 84, - 0xE01EC: 84, - 0xE01ED: 84, - 0xE01EE: 84, - 0xE01EF: 84, -} -codepoint_classes = { - "PVALID": ( - 0x2D0000002E, - 0x300000003A, - 0x610000007B, - 0xDF000000F7, - 0xF800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010A, - 0x10B0000010C, - 0x10D0000010E, - 0x10F00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011A, - 0x11B0000011C, - 0x11D0000011E, - 0x11F00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012A, - 0x12B0000012C, - 0x12D0000012E, - 0x12F00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13A0000013B, - 0x13C0000013D, - 0x13E0000013F, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14B0000014C, - 0x14D0000014E, - 0x14F00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015A, - 0x15B0000015C, - 0x15D0000015E, - 0x15F00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016A, - 0x16B0000016C, - 0x16D0000016E, - 0x16F00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17A0000017B, - 0x17C0000017D, - 0x17E0000017F, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18C0000018E, - 0x19200000193, - 0x19500000196, - 0x1990000019C, - 0x19E0000019F, - 0x1A1000001A2, - 0x1A3000001A4, - 0x1A5000001A6, - 0x1A8000001A9, - 0x1AA000001AC, - 0x1AD000001AE, - 0x1B0000001B1, - 0x1B4000001B5, - 0x1B6000001B7, - 0x1B9000001BC, - 0x1BD000001C4, - 0x1CE000001CF, - 0x1D0000001D1, - 0x1D2000001D3, - 0x1D4000001D5, - 0x1D6000001D7, - 0x1D8000001D9, - 0x1DA000001DB, - 0x1DC000001DE, - 0x1DF000001E0, - 0x1E1000001E2, - 0x1E3000001E4, - 0x1E5000001E6, - 0x1E7000001E8, - 0x1E9000001EA, - 0x1EB000001EC, - 0x1ED000001EE, - 0x1EF000001F1, - 0x1F5000001F6, - 0x1F9000001FA, - 0x1FB000001FC, - 0x1FD000001FE, - 0x1FF00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020A, - 0x20B0000020C, - 0x20D0000020E, - 0x20F00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021A, - 0x21B0000021C, - 0x21D0000021E, - 0x21F00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022A, - 0x22B0000022C, - 0x22D0000022E, - 0x22F00000230, - 0x23100000232, - 0x2330000023A, - 0x23C0000023D, - 0x23F00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024A, - 0x24B0000024C, - 0x24D0000024E, - 0x24F000002B0, - 0x2B9000002C2, - 0x2C6000002D2, - 0x2EC000002ED, - 0x2EE000002EF, - 0x30000000340, - 0x34200000343, - 0x3460000034F, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37B0000037E, - 0x39000000391, - 0x3AC000003CF, - 0x3D7000003D8, - 0x3D9000003DA, - 0x3DB000003DC, - 0x3DD000003DE, - 0x3DF000003E0, - 0x3E1000003E2, - 0x3E3000003E4, - 0x3E5000003E6, - 0x3E7000003E8, - 0x3E9000003EA, - 0x3EB000003EC, - 0x3ED000003EE, - 0x3EF000003F0, - 0x3F3000003F4, - 0x3F8000003F9, - 0x3FB000003FD, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046A, - 0x46B0000046C, - 0x46D0000046E, - 0x46F00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047A, - 0x47B0000047C, - 0x47D0000047E, - 0x47F00000480, - 0x48100000482, - 0x48300000488, - 0x48B0000048C, - 0x48D0000048E, - 0x48F00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049A, - 0x49B0000049C, - 0x49D0000049E, - 0x49F000004A0, - 0x4A1000004A2, - 0x4A3000004A4, - 0x4A5000004A6, - 0x4A7000004A8, - 0x4A9000004AA, - 0x4AB000004AC, - 0x4AD000004AE, - 0x4AF000004B0, - 0x4B1000004B2, - 0x4B3000004B4, - 0x4B5000004B6, - 0x4B7000004B8, - 0x4B9000004BA, - 0x4BB000004BC, - 0x4BD000004BE, - 0x4BF000004C0, - 0x4C2000004C3, - 0x4C4000004C5, - 0x4C6000004C7, - 0x4C8000004C9, - 0x4CA000004CB, - 0x4CC000004CD, - 0x4CE000004D0, - 0x4D1000004D2, - 0x4D3000004D4, - 0x4D5000004D6, - 0x4D7000004D8, - 0x4D9000004DA, - 0x4DB000004DC, - 0x4DD000004DE, - 0x4DF000004E0, - 0x4E1000004E2, - 0x4E3000004E4, - 0x4E5000004E6, - 0x4E7000004E8, - 0x4E9000004EA, - 0x4EB000004EC, - 0x4ED000004EE, - 0x4EF000004F0, - 0x4F1000004F2, - 0x4F3000004F4, - 0x4F5000004F6, - 0x4F7000004F8, - 0x4F9000004FA, - 0x4FB000004FC, - 0x4FD000004FE, - 0x4FF00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050A, - 0x50B0000050C, - 0x50D0000050E, - 0x50F00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051A, - 0x51B0000051C, - 0x51D0000051E, - 0x51F00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5290000052A, - 0x52B0000052C, - 0x52D0000052E, - 0x52F00000530, - 0x5590000055A, - 0x56000000587, - 0x58800000589, - 0x591000005BE, - 0x5BF000005C0, - 0x5C1000005C3, - 0x5C4000005C6, - 0x5C7000005C8, - 0x5D0000005EB, - 0x5EF000005F3, - 0x6100000061B, - 0x62000000640, - 0x64100000660, - 0x66E00000675, - 0x679000006D4, - 0x6D5000006DD, - 0x6DF000006E9, - 0x6EA000006F0, - 0x6FA00000700, - 0x7100000074B, - 0x74D000007B2, - 0x7C0000007F6, - 0x7FD000007FE, - 0x8000000082E, - 0x8400000085C, - 0x8600000086B, - 0x87000000888, - 0x8890000088F, - 0x897000008E2, - 0x8E300000958, - 0x96000000964, - 0x96600000970, - 0x97100000984, - 0x9850000098D, - 0x98F00000991, - 0x993000009A9, - 0x9AA000009B1, - 0x9B2000009B3, - 0x9B6000009BA, - 0x9BC000009C5, - 0x9C7000009C9, - 0x9CB000009CF, - 0x9D7000009D8, - 0x9E0000009E4, - 0x9E6000009F2, - 0x9FC000009FD, - 0x9FE000009FF, - 0xA0100000A04, - 0xA0500000A0B, - 0xA0F00000A11, - 0xA1300000A29, - 0xA2A00000A31, - 0xA3200000A33, - 0xA3500000A36, - 0xA3800000A3A, - 0xA3C00000A3D, - 0xA3E00000A43, - 0xA4700000A49, - 0xA4B00000A4E, - 0xA5100000A52, - 0xA5C00000A5D, - 0xA6600000A76, - 0xA8100000A84, - 0xA8500000A8E, - 0xA8F00000A92, - 0xA9300000AA9, - 0xAAA00000AB1, - 0xAB200000AB4, - 0xAB500000ABA, - 0xABC00000AC6, - 0xAC700000ACA, - 0xACB00000ACE, - 0xAD000000AD1, - 0xAE000000AE4, - 0xAE600000AF0, - 0xAF900000B00, - 0xB0100000B04, - 0xB0500000B0D, - 0xB0F00000B11, - 0xB1300000B29, - 0xB2A00000B31, - 0xB3200000B34, - 0xB3500000B3A, - 0xB3C00000B45, - 0xB4700000B49, - 0xB4B00000B4E, - 0xB5500000B58, - 0xB5F00000B64, - 0xB6600000B70, - 0xB7100000B72, - 0xB8200000B84, - 0xB8500000B8B, - 0xB8E00000B91, - 0xB9200000B96, - 0xB9900000B9B, - 0xB9C00000B9D, - 0xB9E00000BA0, - 0xBA300000BA5, - 0xBA800000BAB, - 0xBAE00000BBA, - 0xBBE00000BC3, - 0xBC600000BC9, - 0xBCA00000BCE, - 0xBD000000BD1, - 0xBD700000BD8, - 0xBE600000BF0, - 0xC0000000C0D, - 0xC0E00000C11, - 0xC1200000C29, - 0xC2A00000C3A, - 0xC3C00000C45, - 0xC4600000C49, - 0xC4A00000C4E, - 0xC5500000C57, - 0xC5800000C5B, - 0xC5D00000C5E, - 0xC6000000C64, - 0xC6600000C70, - 0xC8000000C84, - 0xC8500000C8D, - 0xC8E00000C91, - 0xC9200000CA9, - 0xCAA00000CB4, - 0xCB500000CBA, - 0xCBC00000CC5, - 0xCC600000CC9, - 0xCCA00000CCE, - 0xCD500000CD7, - 0xCDD00000CDF, - 0xCE000000CE4, - 0xCE600000CF0, - 0xCF100000CF4, - 0xD0000000D0D, - 0xD0E00000D11, - 0xD1200000D45, - 0xD4600000D49, - 0xD4A00000D4F, - 0xD5400000D58, - 0xD5F00000D64, - 0xD6600000D70, - 0xD7A00000D80, - 0xD8100000D84, - 0xD8500000D97, - 0xD9A00000DB2, - 0xDB300000DBC, - 0xDBD00000DBE, - 0xDC000000DC7, - 0xDCA00000DCB, - 0xDCF00000DD5, - 0xDD600000DD7, - 0xDD800000DE0, - 0xDE600000DF0, - 0xDF200000DF4, - 0xE0100000E33, - 0xE3400000E3B, - 0xE4000000E4F, - 0xE5000000E5A, - 0xE8100000E83, - 0xE8400000E85, - 0xE8600000E8B, - 0xE8C00000EA4, - 0xEA500000EA6, - 0xEA700000EB3, - 0xEB400000EBE, - 0xEC000000EC5, - 0xEC600000EC7, - 0xEC800000ECF, - 0xED000000EDA, - 0xEDE00000EE0, - 0xF0000000F01, - 0xF0B00000F0C, - 0xF1800000F1A, - 0xF2000000F2A, - 0xF3500000F36, - 0xF3700000F38, - 0xF3900000F3A, - 0xF3E00000F43, - 0xF4400000F48, - 0xF4900000F4D, - 0xF4E00000F52, - 0xF5300000F57, - 0xF5800000F5C, - 0xF5D00000F69, - 0xF6A00000F6D, - 0xF7100000F73, - 0xF7400000F75, - 0xF7A00000F81, - 0xF8200000F85, - 0xF8600000F93, - 0xF9400000F98, - 0xF9900000F9D, - 0xF9E00000FA2, - 0xFA300000FA7, - 0xFA800000FAC, - 0xFAD00000FB9, - 0xFBA00000FBD, - 0xFC600000FC7, - 0x10000000104A, - 0x10500000109E, - 0x10D0000010FB, - 0x10FD00001100, - 0x120000001249, - 0x124A0000124E, - 0x125000001257, - 0x125800001259, - 0x125A0000125E, - 0x126000001289, - 0x128A0000128E, - 0x1290000012B1, - 0x12B2000012B6, - 0x12B8000012BF, - 0x12C0000012C1, - 0x12C2000012C6, - 0x12C8000012D7, - 0x12D800001311, - 0x131200001316, - 0x13180000135B, - 0x135D00001360, - 0x138000001390, - 0x13A0000013F6, - 0x14010000166D, - 0x166F00001680, - 0x16810000169B, - 0x16A0000016EB, - 0x16F1000016F9, - 0x170000001716, - 0x171F00001735, - 0x174000001754, - 0x17600000176D, - 0x176E00001771, - 0x177200001774, - 0x1780000017B4, - 0x17B6000017D4, - 0x17D7000017D8, - 0x17DC000017DE, - 0x17E0000017EA, - 0x18100000181A, - 0x182000001879, - 0x1880000018AB, - 0x18B0000018F6, - 0x19000000191F, - 0x19200000192C, - 0x19300000193C, - 0x19460000196E, - 0x197000001975, - 0x1980000019AC, - 0x19B0000019CA, - 0x19D0000019DA, - 0x1A0000001A1C, - 0x1A2000001A5F, - 0x1A6000001A7D, - 0x1A7F00001A8A, - 0x1A9000001A9A, - 0x1AA700001AA8, - 0x1AB000001ABE, - 0x1ABF00001ACF, - 0x1B0000001B4D, - 0x1B5000001B5A, - 0x1B6B00001B74, - 0x1B8000001BF4, - 0x1C0000001C38, - 0x1C4000001C4A, - 0x1C4D00001C7E, - 0x1C8A00001C8B, - 0x1CD000001CD3, - 0x1CD400001CFB, - 0x1D0000001D2C, - 0x1D2F00001D30, - 0x1D3B00001D3C, - 0x1D4E00001D4F, - 0x1D6B00001D78, - 0x1D7900001D9B, - 0x1DC000001E00, - 0x1E0100001E02, - 0x1E0300001E04, - 0x1E0500001E06, - 0x1E0700001E08, - 0x1E0900001E0A, - 0x1E0B00001E0C, - 0x1E0D00001E0E, - 0x1E0F00001E10, - 0x1E1100001E12, - 0x1E1300001E14, - 0x1E1500001E16, - 0x1E1700001E18, - 0x1E1900001E1A, - 0x1E1B00001E1C, - 0x1E1D00001E1E, - 0x1E1F00001E20, - 0x1E2100001E22, - 0x1E2300001E24, - 0x1E2500001E26, - 0x1E2700001E28, - 0x1E2900001E2A, - 0x1E2B00001E2C, - 0x1E2D00001E2E, - 0x1E2F00001E30, - 0x1E3100001E32, - 0x1E3300001E34, - 0x1E3500001E36, - 0x1E3700001E38, - 0x1E3900001E3A, - 0x1E3B00001E3C, - 0x1E3D00001E3E, - 0x1E3F00001E40, - 0x1E4100001E42, - 0x1E4300001E44, - 0x1E4500001E46, - 0x1E4700001E48, - 0x1E4900001E4A, - 0x1E4B00001E4C, - 0x1E4D00001E4E, - 0x1E4F00001E50, - 0x1E5100001E52, - 0x1E5300001E54, - 0x1E5500001E56, - 0x1E5700001E58, - 0x1E5900001E5A, - 0x1E5B00001E5C, - 0x1E5D00001E5E, - 0x1E5F00001E60, - 0x1E6100001E62, - 0x1E6300001E64, - 0x1E6500001E66, - 0x1E6700001E68, - 0x1E6900001E6A, - 0x1E6B00001E6C, - 0x1E6D00001E6E, - 0x1E6F00001E70, - 0x1E7100001E72, - 0x1E7300001E74, - 0x1E7500001E76, - 0x1E7700001E78, - 0x1E7900001E7A, - 0x1E7B00001E7C, - 0x1E7D00001E7E, - 0x1E7F00001E80, - 0x1E8100001E82, - 0x1E8300001E84, - 0x1E8500001E86, - 0x1E8700001E88, - 0x1E8900001E8A, - 0x1E8B00001E8C, - 0x1E8D00001E8E, - 0x1E8F00001E90, - 0x1E9100001E92, - 0x1E9300001E94, - 0x1E9500001E9A, - 0x1E9C00001E9E, - 0x1E9F00001EA0, - 0x1EA100001EA2, - 0x1EA300001EA4, - 0x1EA500001EA6, - 0x1EA700001EA8, - 0x1EA900001EAA, - 0x1EAB00001EAC, - 0x1EAD00001EAE, - 0x1EAF00001EB0, - 0x1EB100001EB2, - 0x1EB300001EB4, - 0x1EB500001EB6, - 0x1EB700001EB8, - 0x1EB900001EBA, - 0x1EBB00001EBC, - 0x1EBD00001EBE, - 0x1EBF00001EC0, - 0x1EC100001EC2, - 0x1EC300001EC4, - 0x1EC500001EC6, - 0x1EC700001EC8, - 0x1EC900001ECA, - 0x1ECB00001ECC, - 0x1ECD00001ECE, - 0x1ECF00001ED0, - 0x1ED100001ED2, - 0x1ED300001ED4, - 0x1ED500001ED6, - 0x1ED700001ED8, - 0x1ED900001EDA, - 0x1EDB00001EDC, - 0x1EDD00001EDE, - 0x1EDF00001EE0, - 0x1EE100001EE2, - 0x1EE300001EE4, - 0x1EE500001EE6, - 0x1EE700001EE8, - 0x1EE900001EEA, - 0x1EEB00001EEC, - 0x1EED00001EEE, - 0x1EEF00001EF0, - 0x1EF100001EF2, - 0x1EF300001EF4, - 0x1EF500001EF6, - 0x1EF700001EF8, - 0x1EF900001EFA, - 0x1EFB00001EFC, - 0x1EFD00001EFE, - 0x1EFF00001F08, - 0x1F1000001F16, - 0x1F2000001F28, - 0x1F3000001F38, - 0x1F4000001F46, - 0x1F5000001F58, - 0x1F6000001F68, - 0x1F7000001F71, - 0x1F7200001F73, - 0x1F7400001F75, - 0x1F7600001F77, - 0x1F7800001F79, - 0x1F7A00001F7B, - 0x1F7C00001F7D, - 0x1FB000001FB2, - 0x1FB600001FB7, - 0x1FC600001FC7, - 0x1FD000001FD3, - 0x1FD600001FD8, - 0x1FE000001FE3, - 0x1FE400001FE8, - 0x1FF600001FF7, - 0x214E0000214F, - 0x218400002185, - 0x2C3000002C60, - 0x2C6100002C62, - 0x2C6500002C67, - 0x2C6800002C69, - 0x2C6A00002C6B, - 0x2C6C00002C6D, - 0x2C7100002C72, - 0x2C7300002C75, - 0x2C7600002C7C, - 0x2C8100002C82, - 0x2C8300002C84, - 0x2C8500002C86, - 0x2C8700002C88, - 0x2C8900002C8A, - 0x2C8B00002C8C, - 0x2C8D00002C8E, - 0x2C8F00002C90, - 0x2C9100002C92, - 0x2C9300002C94, - 0x2C9500002C96, - 0x2C9700002C98, - 0x2C9900002C9A, - 0x2C9B00002C9C, - 0x2C9D00002C9E, - 0x2C9F00002CA0, - 0x2CA100002CA2, - 0x2CA300002CA4, - 0x2CA500002CA6, - 0x2CA700002CA8, - 0x2CA900002CAA, - 0x2CAB00002CAC, - 0x2CAD00002CAE, - 0x2CAF00002CB0, - 0x2CB100002CB2, - 0x2CB300002CB4, - 0x2CB500002CB6, - 0x2CB700002CB8, - 0x2CB900002CBA, - 0x2CBB00002CBC, - 0x2CBD00002CBE, - 0x2CBF00002CC0, - 0x2CC100002CC2, - 0x2CC300002CC4, - 0x2CC500002CC6, - 0x2CC700002CC8, - 0x2CC900002CCA, - 0x2CCB00002CCC, - 0x2CCD00002CCE, - 0x2CCF00002CD0, - 0x2CD100002CD2, - 0x2CD300002CD4, - 0x2CD500002CD6, - 0x2CD700002CD8, - 0x2CD900002CDA, - 0x2CDB00002CDC, - 0x2CDD00002CDE, - 0x2CDF00002CE0, - 0x2CE100002CE2, - 0x2CE300002CE5, - 0x2CEC00002CED, - 0x2CEE00002CF2, - 0x2CF300002CF4, - 0x2D0000002D26, - 0x2D2700002D28, - 0x2D2D00002D2E, - 0x2D3000002D68, - 0x2D7F00002D97, - 0x2DA000002DA7, - 0x2DA800002DAF, - 0x2DB000002DB7, - 0x2DB800002DBF, - 0x2DC000002DC7, - 0x2DC800002DCF, - 0x2DD000002DD7, - 0x2DD800002DDF, - 0x2DE000002E00, - 0x2E2F00002E30, - 0x300500003008, - 0x302A0000302E, - 0x303C0000303D, - 0x304100003097, - 0x30990000309B, - 0x309D0000309F, - 0x30A1000030FB, - 0x30FC000030FF, - 0x310500003130, - 0x31A0000031C0, - 0x31F000003200, - 0x340000004DC0, - 0x4E000000A48D, - 0xA4D00000A4FE, - 0xA5000000A60D, - 0xA6100000A62C, - 0xA6410000A642, - 0xA6430000A644, - 0xA6450000A646, - 0xA6470000A648, - 0xA6490000A64A, - 0xA64B0000A64C, - 0xA64D0000A64E, - 0xA64F0000A650, - 0xA6510000A652, - 0xA6530000A654, - 0xA6550000A656, - 0xA6570000A658, - 0xA6590000A65A, - 0xA65B0000A65C, - 0xA65D0000A65E, - 0xA65F0000A660, - 0xA6610000A662, - 0xA6630000A664, - 0xA6650000A666, - 0xA6670000A668, - 0xA6690000A66A, - 0xA66B0000A66C, - 0xA66D0000A670, - 0xA6740000A67E, - 0xA67F0000A680, - 0xA6810000A682, - 0xA6830000A684, - 0xA6850000A686, - 0xA6870000A688, - 0xA6890000A68A, - 0xA68B0000A68C, - 0xA68D0000A68E, - 0xA68F0000A690, - 0xA6910000A692, - 0xA6930000A694, - 0xA6950000A696, - 0xA6970000A698, - 0xA6990000A69A, - 0xA69B0000A69C, - 0xA69E0000A6E6, - 0xA6F00000A6F2, - 0xA7170000A720, - 0xA7230000A724, - 0xA7250000A726, - 0xA7270000A728, - 0xA7290000A72A, - 0xA72B0000A72C, - 0xA72D0000A72E, - 0xA72F0000A732, - 0xA7330000A734, - 0xA7350000A736, - 0xA7370000A738, - 0xA7390000A73A, - 0xA73B0000A73C, - 0xA73D0000A73E, - 0xA73F0000A740, - 0xA7410000A742, - 0xA7430000A744, - 0xA7450000A746, - 0xA7470000A748, - 0xA7490000A74A, - 0xA74B0000A74C, - 0xA74D0000A74E, - 0xA74F0000A750, - 0xA7510000A752, - 0xA7530000A754, - 0xA7550000A756, - 0xA7570000A758, - 0xA7590000A75A, - 0xA75B0000A75C, - 0xA75D0000A75E, - 0xA75F0000A760, - 0xA7610000A762, - 0xA7630000A764, - 0xA7650000A766, - 0xA7670000A768, - 0xA7690000A76A, - 0xA76B0000A76C, - 0xA76D0000A76E, - 0xA76F0000A770, - 0xA7710000A779, - 0xA77A0000A77B, - 0xA77C0000A77D, - 0xA77F0000A780, - 0xA7810000A782, - 0xA7830000A784, - 0xA7850000A786, - 0xA7870000A789, - 0xA78C0000A78D, - 0xA78E0000A790, - 0xA7910000A792, - 0xA7930000A796, - 0xA7970000A798, - 0xA7990000A79A, - 0xA79B0000A79C, - 0xA79D0000A79E, - 0xA79F0000A7A0, - 0xA7A10000A7A2, - 0xA7A30000A7A4, - 0xA7A50000A7A6, - 0xA7A70000A7A8, - 0xA7A90000A7AA, - 0xA7AF0000A7B0, - 0xA7B50000A7B6, - 0xA7B70000A7B8, - 0xA7B90000A7BA, - 0xA7BB0000A7BC, - 0xA7BD0000A7BE, - 0xA7BF0000A7C0, - 0xA7C10000A7C2, - 0xA7C30000A7C4, - 0xA7C80000A7C9, - 0xA7CA0000A7CB, - 0xA7CD0000A7CE, - 0xA7D10000A7D2, - 0xA7D30000A7D4, - 0xA7D50000A7D6, - 0xA7D70000A7D8, - 0xA7D90000A7DA, - 0xA7DB0000A7DC, - 0xA7F60000A7F8, - 0xA7FA0000A828, - 0xA82C0000A82D, - 0xA8400000A874, - 0xA8800000A8C6, - 0xA8D00000A8DA, - 0xA8E00000A8F8, - 0xA8FB0000A8FC, - 0xA8FD0000A92E, - 0xA9300000A954, - 0xA9800000A9C1, - 0xA9CF0000A9DA, - 0xA9E00000A9FF, - 0xAA000000AA37, - 0xAA400000AA4E, - 0xAA500000AA5A, - 0xAA600000AA77, - 0xAA7A0000AAC3, - 0xAADB0000AADE, - 0xAAE00000AAF0, - 0xAAF20000AAF7, - 0xAB010000AB07, - 0xAB090000AB0F, - 0xAB110000AB17, - 0xAB200000AB27, - 0xAB280000AB2F, - 0xAB300000AB5B, - 0xAB600000AB69, - 0xABC00000ABEB, - 0xABEC0000ABEE, - 0xABF00000ABFA, - 0xAC000000D7A4, - 0xFA0E0000FA10, - 0xFA110000FA12, - 0xFA130000FA15, - 0xFA1F0000FA20, - 0xFA210000FA22, - 0xFA230000FA25, - 0xFA270000FA2A, - 0xFB1E0000FB1F, - 0xFE200000FE30, - 0xFE730000FE74, - 0x100000001000C, - 0x1000D00010027, - 0x100280001003B, - 0x1003C0001003E, - 0x1003F0001004E, - 0x100500001005E, - 0x10080000100FB, - 0x101FD000101FE, - 0x102800001029D, - 0x102A0000102D1, - 0x102E0000102E1, - 0x1030000010320, - 0x1032D00010341, - 0x103420001034A, - 0x103500001037B, - 0x103800001039E, - 0x103A0000103C4, - 0x103C8000103D0, - 0x104280001049E, - 0x104A0000104AA, - 0x104D8000104FC, - 0x1050000010528, - 0x1053000010564, - 0x10597000105A2, - 0x105A3000105B2, - 0x105B3000105BA, - 0x105BB000105BD, - 0x105C0000105F4, - 0x1060000010737, - 0x1074000010756, - 0x1076000010768, - 0x1078000010781, - 0x1080000010806, - 0x1080800010809, - 0x1080A00010836, - 0x1083700010839, - 0x1083C0001083D, - 0x1083F00010856, - 0x1086000010877, - 0x108800001089F, - 0x108E0000108F3, - 0x108F4000108F6, - 0x1090000010916, - 0x109200001093A, - 0x10980000109B8, - 0x109BE000109C0, - 0x10A0000010A04, - 0x10A0500010A07, - 0x10A0C00010A14, - 0x10A1500010A18, - 0x10A1900010A36, - 0x10A3800010A3B, - 0x10A3F00010A40, - 0x10A6000010A7D, - 0x10A8000010A9D, - 0x10AC000010AC8, - 0x10AC900010AE7, - 0x10B0000010B36, - 0x10B4000010B56, - 0x10B6000010B73, - 0x10B8000010B92, - 0x10C0000010C49, - 0x10CC000010CF3, - 0x10D0000010D28, - 0x10D3000010D3A, - 0x10D4000010D50, - 0x10D6900010D6E, - 0x10D6F00010D86, - 0x10E8000010EAA, - 0x10EAB00010EAD, - 0x10EB000010EB2, - 0x10EC200010EC5, - 0x10EFC00010F1D, - 0x10F2700010F28, - 0x10F3000010F51, - 0x10F7000010F86, - 0x10FB000010FC5, - 0x10FE000010FF7, - 0x1100000011047, - 0x1106600011076, - 0x1107F000110BB, - 0x110C2000110C3, - 0x110D0000110E9, - 0x110F0000110FA, - 0x1110000011135, - 0x1113600011140, - 0x1114400011148, - 0x1115000011174, - 0x1117600011177, - 0x11180000111C5, - 0x111C9000111CD, - 0x111CE000111DB, - 0x111DC000111DD, - 0x1120000011212, - 0x1121300011238, - 0x1123E00011242, - 0x1128000011287, - 0x1128800011289, - 0x1128A0001128E, - 0x1128F0001129E, - 0x1129F000112A9, - 0x112B0000112EB, - 0x112F0000112FA, - 0x1130000011304, - 0x113050001130D, - 0x1130F00011311, - 0x1131300011329, - 0x1132A00011331, - 0x1133200011334, - 0x113350001133A, - 0x1133B00011345, - 0x1134700011349, - 0x1134B0001134E, - 0x1135000011351, - 0x1135700011358, - 0x1135D00011364, - 0x113660001136D, - 0x1137000011375, - 0x113800001138A, - 0x1138B0001138C, - 0x1138E0001138F, - 0x11390000113B6, - 0x113B7000113C1, - 0x113C2000113C3, - 0x113C5000113C6, - 0x113C7000113CB, - 0x113CC000113D4, - 0x113E1000113E3, - 0x114000001144B, - 0x114500001145A, - 0x1145E00011462, - 0x11480000114C6, - 0x114C7000114C8, - 0x114D0000114DA, - 0x11580000115B6, - 0x115B8000115C1, - 0x115D8000115DE, - 0x1160000011641, - 0x1164400011645, - 0x116500001165A, - 0x11680000116B9, - 0x116C0000116CA, - 0x116D0000116E4, - 0x117000001171B, - 0x1171D0001172C, - 0x117300001173A, - 0x1174000011747, - 0x118000001183B, - 0x118C0000118EA, - 0x118FF00011907, - 0x119090001190A, - 0x1190C00011914, - 0x1191500011917, - 0x1191800011936, - 0x1193700011939, - 0x1193B00011944, - 0x119500001195A, - 0x119A0000119A8, - 0x119AA000119D8, - 0x119DA000119E2, - 0x119E3000119E5, - 0x11A0000011A3F, - 0x11A4700011A48, - 0x11A5000011A9A, - 0x11A9D00011A9E, - 0x11AB000011AF9, - 0x11BC000011BE1, - 0x11BF000011BFA, - 0x11C0000011C09, - 0x11C0A00011C37, - 0x11C3800011C41, - 0x11C5000011C5A, - 0x11C7200011C90, - 0x11C9200011CA8, - 0x11CA900011CB7, - 0x11D0000011D07, - 0x11D0800011D0A, - 0x11D0B00011D37, - 0x11D3A00011D3B, - 0x11D3C00011D3E, - 0x11D3F00011D48, - 0x11D5000011D5A, - 0x11D6000011D66, - 0x11D6700011D69, - 0x11D6A00011D8F, - 0x11D9000011D92, - 0x11D9300011D99, - 0x11DA000011DAA, - 0x11EE000011EF7, - 0x11F0000011F11, - 0x11F1200011F3B, - 0x11F3E00011F43, - 0x11F5000011F5B, - 0x11FB000011FB1, - 0x120000001239A, - 0x1248000012544, - 0x12F9000012FF1, - 0x1300000013430, - 0x1344000013456, - 0x13460000143FB, - 0x1440000014647, - 0x161000001613A, - 0x1680000016A39, - 0x16A4000016A5F, - 0x16A6000016A6A, - 0x16A7000016ABF, - 0x16AC000016ACA, - 0x16AD000016AEE, - 0x16AF000016AF5, - 0x16B0000016B37, - 0x16B4000016B44, - 0x16B5000016B5A, - 0x16B6300016B78, - 0x16B7D00016B90, - 0x16D4000016D6D, - 0x16D7000016D7A, - 0x16E6000016E80, - 0x16F0000016F4B, - 0x16F4F00016F88, - 0x16F8F00016FA0, - 0x16FE000016FE2, - 0x16FE300016FE5, - 0x16FF000016FF2, - 0x17000000187F8, - 0x1880000018CD6, - 0x18CFF00018D09, - 0x1AFF00001AFF4, - 0x1AFF50001AFFC, - 0x1AFFD0001AFFF, - 0x1B0000001B123, - 0x1B1320001B133, - 0x1B1500001B153, - 0x1B1550001B156, - 0x1B1640001B168, - 0x1B1700001B2FC, - 0x1BC000001BC6B, - 0x1BC700001BC7D, - 0x1BC800001BC89, - 0x1BC900001BC9A, - 0x1BC9D0001BC9F, - 0x1CCF00001CCFA, - 0x1CF000001CF2E, - 0x1CF300001CF47, - 0x1DA000001DA37, - 0x1DA3B0001DA6D, - 0x1DA750001DA76, - 0x1DA840001DA85, - 0x1DA9B0001DAA0, - 0x1DAA10001DAB0, - 0x1DF000001DF1F, - 0x1DF250001DF2B, - 0x1E0000001E007, - 0x1E0080001E019, - 0x1E01B0001E022, - 0x1E0230001E025, - 0x1E0260001E02B, - 0x1E08F0001E090, - 0x1E1000001E12D, - 0x1E1300001E13E, - 0x1E1400001E14A, - 0x1E14E0001E14F, - 0x1E2900001E2AF, - 0x1E2C00001E2FA, - 0x1E4D00001E4FA, - 0x1E5D00001E5FB, - 0x1E7E00001E7E7, - 0x1E7E80001E7EC, - 0x1E7ED0001E7EF, - 0x1E7F00001E7FF, - 0x1E8000001E8C5, - 0x1E8D00001E8D7, - 0x1E9220001E94C, - 0x1E9500001E95A, - 0x200000002A6E0, - 0x2A7000002B73A, - 0x2B7400002B81E, - 0x2B8200002CEA2, - 0x2CEB00002EBE1, - 0x2EBF00002EE5E, - 0x300000003134B, - 0x31350000323B0, - ), - "CONTEXTJ": (0x200C0000200E,), - "CONTEXTO": ( - 0xB7000000B8, - 0x37500000376, - 0x5F3000005F5, - 0x6600000066A, - 0x6F0000006FA, - 0x30FB000030FC, - ), -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/intranges.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/intranges.py deleted file mode 100644 index 7bfaa8d80..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/intranges.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect -from typing import List, Tuple - - -def intranges_from_list(list_: List[int]) -> Tuple[int, ...]: - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i + 1 < len(sorted_list): - if sorted_list[i] == sorted_list[i + 1] - 1: - continue - current_range = sorted_list[last_write + 1 : i + 1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - - -def _encode_range(start: int, end: int) -> int: - return (start << 32) | end - - -def _decode_range(r: int) -> Tuple[int, int]: - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool: - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos - 1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/package_data.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/package_data.py deleted file mode 100644 index 7272c8d92..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/package_data.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "3.11" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/uts46data.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/uts46data.py deleted file mode 100644 index 4610b71da..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/idna/uts46data.py +++ /dev/null @@ -1,8841 +0,0 @@ -# This file is automatically generated by tools/idna-data -# vim: set fileencoding=utf-8 : - -from typing import List, Tuple, Union - -"""IDNA Mapping Table from UTS46.""" - - -__version__ = "16.0.0" - - -def _seg_0() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x0, "V"), - (0x1, "V"), - (0x2, "V"), - (0x3, "V"), - (0x4, "V"), - (0x5, "V"), - (0x6, "V"), - (0x7, "V"), - (0x8, "V"), - (0x9, "V"), - (0xA, "V"), - (0xB, "V"), - (0xC, "V"), - (0xD, "V"), - (0xE, "V"), - (0xF, "V"), - (0x10, "V"), - (0x11, "V"), - (0x12, "V"), - (0x13, "V"), - (0x14, "V"), - (0x15, "V"), - (0x16, "V"), - (0x17, "V"), - (0x18, "V"), - (0x19, "V"), - (0x1A, "V"), - (0x1B, "V"), - (0x1C, "V"), - (0x1D, "V"), - (0x1E, "V"), - (0x1F, "V"), - (0x20, "V"), - (0x21, "V"), - (0x22, "V"), - (0x23, "V"), - (0x24, "V"), - (0x25, "V"), - (0x26, "V"), - (0x27, "V"), - (0x28, "V"), - (0x29, "V"), - (0x2A, "V"), - (0x2B, "V"), - (0x2C, "V"), - (0x2D, "V"), - (0x2E, "V"), - (0x2F, "V"), - (0x30, "V"), - (0x31, "V"), - (0x32, "V"), - (0x33, "V"), - (0x34, "V"), - (0x35, "V"), - (0x36, "V"), - (0x37, "V"), - (0x38, "V"), - (0x39, "V"), - (0x3A, "V"), - (0x3B, "V"), - (0x3C, "V"), - (0x3D, "V"), - (0x3E, "V"), - (0x3F, "V"), - (0x40, "V"), - (0x41, "M", "a"), - (0x42, "M", "b"), - (0x43, "M", "c"), - (0x44, "M", "d"), - (0x45, "M", "e"), - (0x46, "M", "f"), - (0x47, "M", "g"), - (0x48, "M", "h"), - (0x49, "M", "i"), - (0x4A, "M", "j"), - (0x4B, "M", "k"), - (0x4C, "M", "l"), - (0x4D, "M", "m"), - (0x4E, "M", "n"), - (0x4F, "M", "o"), - (0x50, "M", "p"), - (0x51, "M", "q"), - (0x52, "M", "r"), - (0x53, "M", "s"), - (0x54, "M", "t"), - (0x55, "M", "u"), - (0x56, "M", "v"), - (0x57, "M", "w"), - (0x58, "M", "x"), - (0x59, "M", "y"), - (0x5A, "M", "z"), - (0x5B, "V"), - (0x5C, "V"), - (0x5D, "V"), - (0x5E, "V"), - (0x5F, "V"), - (0x60, "V"), - (0x61, "V"), - (0x62, "V"), - (0x63, "V"), - ] - - -def _seg_1() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x64, "V"), - (0x65, "V"), - (0x66, "V"), - (0x67, "V"), - (0x68, "V"), - (0x69, "V"), - (0x6A, "V"), - (0x6B, "V"), - (0x6C, "V"), - (0x6D, "V"), - (0x6E, "V"), - (0x6F, "V"), - (0x70, "V"), - (0x71, "V"), - (0x72, "V"), - (0x73, "V"), - (0x74, "V"), - (0x75, "V"), - (0x76, "V"), - (0x77, "V"), - (0x78, "V"), - (0x79, "V"), - (0x7A, "V"), - (0x7B, "V"), - (0x7C, "V"), - (0x7D, "V"), - (0x7E, "V"), - (0x7F, "V"), - (0x80, "X"), - (0x81, "X"), - (0x82, "X"), - (0x83, "X"), - (0x84, "X"), - (0x85, "X"), - (0x86, "X"), - (0x87, "X"), - (0x88, "X"), - (0x89, "X"), - (0x8A, "X"), - (0x8B, "X"), - (0x8C, "X"), - (0x8D, "X"), - (0x8E, "X"), - (0x8F, "X"), - (0x90, "X"), - (0x91, "X"), - (0x92, "X"), - (0x93, "X"), - (0x94, "X"), - (0x95, "X"), - (0x96, "X"), - (0x97, "X"), - (0x98, "X"), - (0x99, "X"), - (0x9A, "X"), - (0x9B, "X"), - (0x9C, "X"), - (0x9D, "X"), - (0x9E, "X"), - (0x9F, "X"), - (0xA0, "M", " "), - (0xA1, "V"), - (0xA2, "V"), - (0xA3, "V"), - (0xA4, "V"), - (0xA5, "V"), - (0xA6, "V"), - (0xA7, "V"), - (0xA8, "M", " ̈"), - (0xA9, "V"), - (0xAA, "M", "a"), - (0xAB, "V"), - (0xAC, "V"), - (0xAD, "I"), - (0xAE, "V"), - (0xAF, "M", " ̄"), - (0xB0, "V"), - (0xB1, "V"), - (0xB2, "M", "2"), - (0xB3, "M", "3"), - (0xB4, "M", " ́"), - (0xB5, "M", "μ"), - (0xB6, "V"), - (0xB7, "V"), - (0xB8, "M", " ̧"), - (0xB9, "M", "1"), - (0xBA, "M", "o"), - (0xBB, "V"), - (0xBC, "M", "1⁄4"), - (0xBD, "M", "1⁄2"), - (0xBE, "M", "3⁄4"), - (0xBF, "V"), - (0xC0, "M", "à"), - (0xC1, "M", "á"), - (0xC2, "M", "â"), - (0xC3, "M", "ã"), - (0xC4, "M", "ä"), - (0xC5, "M", "å"), - (0xC6, "M", "æ"), - (0xC7, "M", "ç"), - ] - - -def _seg_2() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC8, "M", "è"), - (0xC9, "M", "é"), - (0xCA, "M", "ê"), - (0xCB, "M", "ë"), - (0xCC, "M", "ì"), - (0xCD, "M", "í"), - (0xCE, "M", "î"), - (0xCF, "M", "ï"), - (0xD0, "M", "ð"), - (0xD1, "M", "ñ"), - (0xD2, "M", "ò"), - (0xD3, "M", "ó"), - (0xD4, "M", "ô"), - (0xD5, "M", "õ"), - (0xD6, "M", "ö"), - (0xD7, "V"), - (0xD8, "M", "ø"), - (0xD9, "M", "ù"), - (0xDA, "M", "ú"), - (0xDB, "M", "û"), - (0xDC, "M", "ü"), - (0xDD, "M", "ý"), - (0xDE, "M", "þ"), - (0xDF, "D", "ss"), - (0xE0, "V"), - (0xE1, "V"), - (0xE2, "V"), - (0xE3, "V"), - (0xE4, "V"), - (0xE5, "V"), - (0xE6, "V"), - (0xE7, "V"), - (0xE8, "V"), - (0xE9, "V"), - (0xEA, "V"), - (0xEB, "V"), - (0xEC, "V"), - (0xED, "V"), - (0xEE, "V"), - (0xEF, "V"), - (0xF0, "V"), - (0xF1, "V"), - (0xF2, "V"), - (0xF3, "V"), - (0xF4, "V"), - (0xF5, "V"), - (0xF6, "V"), - (0xF7, "V"), - (0xF8, "V"), - (0xF9, "V"), - (0xFA, "V"), - (0xFB, "V"), - (0xFC, "V"), - (0xFD, "V"), - (0xFE, "V"), - (0xFF, "V"), - (0x100, "M", "ā"), - (0x101, "V"), - (0x102, "M", "ă"), - (0x103, "V"), - (0x104, "M", "ą"), - (0x105, "V"), - (0x106, "M", "ć"), - (0x107, "V"), - (0x108, "M", "ĉ"), - (0x109, "V"), - (0x10A, "M", "ċ"), - (0x10B, "V"), - (0x10C, "M", "č"), - (0x10D, "V"), - (0x10E, "M", "ď"), - (0x10F, "V"), - (0x110, "M", "đ"), - (0x111, "V"), - (0x112, "M", "ē"), - (0x113, "V"), - (0x114, "M", "ĕ"), - (0x115, "V"), - (0x116, "M", "ė"), - (0x117, "V"), - (0x118, "M", "ę"), - (0x119, "V"), - (0x11A, "M", "ě"), - (0x11B, "V"), - (0x11C, "M", "ĝ"), - (0x11D, "V"), - (0x11E, "M", "ğ"), - (0x11F, "V"), - (0x120, "M", "ġ"), - (0x121, "V"), - (0x122, "M", "ģ"), - (0x123, "V"), - (0x124, "M", "ĥ"), - (0x125, "V"), - (0x126, "M", "ħ"), - (0x127, "V"), - (0x128, "M", "ĩ"), - (0x129, "V"), - (0x12A, "M", "ī"), - (0x12B, "V"), - ] - - -def _seg_3() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x12C, "M", "ĭ"), - (0x12D, "V"), - (0x12E, "M", "į"), - (0x12F, "V"), - (0x130, "M", "i̇"), - (0x131, "V"), - (0x132, "M", "ij"), - (0x134, "M", "ĵ"), - (0x135, "V"), - (0x136, "M", "ķ"), - (0x137, "V"), - (0x139, "M", "ĺ"), - (0x13A, "V"), - (0x13B, "M", "ļ"), - (0x13C, "V"), - (0x13D, "M", "ľ"), - (0x13E, "V"), - (0x13F, "M", "l·"), - (0x141, "M", "ł"), - (0x142, "V"), - (0x143, "M", "ń"), - (0x144, "V"), - (0x145, "M", "ņ"), - (0x146, "V"), - (0x147, "M", "ň"), - (0x148, "V"), - (0x149, "M", "ʼn"), - (0x14A, "M", "ŋ"), - (0x14B, "V"), - (0x14C, "M", "ō"), - (0x14D, "V"), - (0x14E, "M", "ŏ"), - (0x14F, "V"), - (0x150, "M", "ő"), - (0x151, "V"), - (0x152, "M", "œ"), - (0x153, "V"), - (0x154, "M", "ŕ"), - (0x155, "V"), - (0x156, "M", "ŗ"), - (0x157, "V"), - (0x158, "M", "ř"), - (0x159, "V"), - (0x15A, "M", "ś"), - (0x15B, "V"), - (0x15C, "M", "ŝ"), - (0x15D, "V"), - (0x15E, "M", "ş"), - (0x15F, "V"), - (0x160, "M", "š"), - (0x161, "V"), - (0x162, "M", "ţ"), - (0x163, "V"), - (0x164, "M", "ť"), - (0x165, "V"), - (0x166, "M", "ŧ"), - (0x167, "V"), - (0x168, "M", "ũ"), - (0x169, "V"), - (0x16A, "M", "ū"), - (0x16B, "V"), - (0x16C, "M", "ŭ"), - (0x16D, "V"), - (0x16E, "M", "ů"), - (0x16F, "V"), - (0x170, "M", "ű"), - (0x171, "V"), - (0x172, "M", "ų"), - (0x173, "V"), - (0x174, "M", "ŵ"), - (0x175, "V"), - (0x176, "M", "ŷ"), - (0x177, "V"), - (0x178, "M", "ÿ"), - (0x179, "M", "ź"), - (0x17A, "V"), - (0x17B, "M", "ż"), - (0x17C, "V"), - (0x17D, "M", "ž"), - (0x17E, "V"), - (0x17F, "M", "s"), - (0x180, "V"), - (0x181, "M", "ɓ"), - (0x182, "M", "ƃ"), - (0x183, "V"), - (0x184, "M", "ƅ"), - (0x185, "V"), - (0x186, "M", "ɔ"), - (0x187, "M", "ƈ"), - (0x188, "V"), - (0x189, "M", "ɖ"), - (0x18A, "M", "ɗ"), - (0x18B, "M", "ƌ"), - (0x18C, "V"), - (0x18E, "M", "ǝ"), - (0x18F, "M", "ə"), - (0x190, "M", "ɛ"), - (0x191, "M", "ƒ"), - (0x192, "V"), - (0x193, "M", "ɠ"), - ] - - -def _seg_4() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x194, "M", "ɣ"), - (0x195, "V"), - (0x196, "M", "ɩ"), - (0x197, "M", "ɨ"), - (0x198, "M", "ƙ"), - (0x199, "V"), - (0x19C, "M", "ɯ"), - (0x19D, "M", "ɲ"), - (0x19E, "V"), - (0x19F, "M", "ɵ"), - (0x1A0, "M", "ơ"), - (0x1A1, "V"), - (0x1A2, "M", "ƣ"), - (0x1A3, "V"), - (0x1A4, "M", "ƥ"), - (0x1A5, "V"), - (0x1A6, "M", "ʀ"), - (0x1A7, "M", "ƨ"), - (0x1A8, "V"), - (0x1A9, "M", "ʃ"), - (0x1AA, "V"), - (0x1AC, "M", "ƭ"), - (0x1AD, "V"), - (0x1AE, "M", "ʈ"), - (0x1AF, "M", "ư"), - (0x1B0, "V"), - (0x1B1, "M", "ʊ"), - (0x1B2, "M", "ʋ"), - (0x1B3, "M", "ƴ"), - (0x1B4, "V"), - (0x1B5, "M", "ƶ"), - (0x1B6, "V"), - (0x1B7, "M", "ʒ"), - (0x1B8, "M", "ƹ"), - (0x1B9, "V"), - (0x1BC, "M", "ƽ"), - (0x1BD, "V"), - (0x1C4, "M", "dž"), - (0x1C7, "M", "lj"), - (0x1CA, "M", "nj"), - (0x1CD, "M", "ǎ"), - (0x1CE, "V"), - (0x1CF, "M", "ǐ"), - (0x1D0, "V"), - (0x1D1, "M", "ǒ"), - (0x1D2, "V"), - (0x1D3, "M", "ǔ"), - (0x1D4, "V"), - (0x1D5, "M", "ǖ"), - (0x1D6, "V"), - (0x1D7, "M", "ǘ"), - (0x1D8, "V"), - (0x1D9, "M", "ǚ"), - (0x1DA, "V"), - (0x1DB, "M", "ǜ"), - (0x1DC, "V"), - (0x1DE, "M", "ǟ"), - (0x1DF, "V"), - (0x1E0, "M", "ǡ"), - (0x1E1, "V"), - (0x1E2, "M", "ǣ"), - (0x1E3, "V"), - (0x1E4, "M", "ǥ"), - (0x1E5, "V"), - (0x1E6, "M", "ǧ"), - (0x1E7, "V"), - (0x1E8, "M", "ǩ"), - (0x1E9, "V"), - (0x1EA, "M", "ǫ"), - (0x1EB, "V"), - (0x1EC, "M", "ǭ"), - (0x1ED, "V"), - (0x1EE, "M", "ǯ"), - (0x1EF, "V"), - (0x1F1, "M", "dz"), - (0x1F4, "M", "ǵ"), - (0x1F5, "V"), - (0x1F6, "M", "ƕ"), - (0x1F7, "M", "ƿ"), - (0x1F8, "M", "ǹ"), - (0x1F9, "V"), - (0x1FA, "M", "ǻ"), - (0x1FB, "V"), - (0x1FC, "M", "ǽ"), - (0x1FD, "V"), - (0x1FE, "M", "ǿ"), - (0x1FF, "V"), - (0x200, "M", "ȁ"), - (0x201, "V"), - (0x202, "M", "ȃ"), - (0x203, "V"), - (0x204, "M", "ȅ"), - (0x205, "V"), - (0x206, "M", "ȇ"), - (0x207, "V"), - (0x208, "M", "ȉ"), - (0x209, "V"), - (0x20A, "M", "ȋ"), - (0x20B, "V"), - (0x20C, "M", "ȍ"), - ] - - -def _seg_5() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x20D, "V"), - (0x20E, "M", "ȏ"), - (0x20F, "V"), - (0x210, "M", "ȑ"), - (0x211, "V"), - (0x212, "M", "ȓ"), - (0x213, "V"), - (0x214, "M", "ȕ"), - (0x215, "V"), - (0x216, "M", "ȗ"), - (0x217, "V"), - (0x218, "M", "ș"), - (0x219, "V"), - (0x21A, "M", "ț"), - (0x21B, "V"), - (0x21C, "M", "ȝ"), - (0x21D, "V"), - (0x21E, "M", "ȟ"), - (0x21F, "V"), - (0x220, "M", "ƞ"), - (0x221, "V"), - (0x222, "M", "ȣ"), - (0x223, "V"), - (0x224, "M", "ȥ"), - (0x225, "V"), - (0x226, "M", "ȧ"), - (0x227, "V"), - (0x228, "M", "ȩ"), - (0x229, "V"), - (0x22A, "M", "ȫ"), - (0x22B, "V"), - (0x22C, "M", "ȭ"), - (0x22D, "V"), - (0x22E, "M", "ȯ"), - (0x22F, "V"), - (0x230, "M", "ȱ"), - (0x231, "V"), - (0x232, "M", "ȳ"), - (0x233, "V"), - (0x23A, "M", "ⱥ"), - (0x23B, "M", "ȼ"), - (0x23C, "V"), - (0x23D, "M", "ƚ"), - (0x23E, "M", "ⱦ"), - (0x23F, "V"), - (0x241, "M", "ɂ"), - (0x242, "V"), - (0x243, "M", "ƀ"), - (0x244, "M", "ʉ"), - (0x245, "M", "ʌ"), - (0x246, "M", "ɇ"), - (0x247, "V"), - (0x248, "M", "ɉ"), - (0x249, "V"), - (0x24A, "M", "ɋ"), - (0x24B, "V"), - (0x24C, "M", "ɍ"), - (0x24D, "V"), - (0x24E, "M", "ɏ"), - (0x24F, "V"), - (0x2B0, "M", "h"), - (0x2B1, "M", "ɦ"), - (0x2B2, "M", "j"), - (0x2B3, "M", "r"), - (0x2B4, "M", "ɹ"), - (0x2B5, "M", "ɻ"), - (0x2B6, "M", "ʁ"), - (0x2B7, "M", "w"), - (0x2B8, "M", "y"), - (0x2B9, "V"), - (0x2D8, "M", " ̆"), - (0x2D9, "M", " ̇"), - (0x2DA, "M", " ̊"), - (0x2DB, "M", " ̨"), - (0x2DC, "M", " ̃"), - (0x2DD, "M", " ̋"), - (0x2DE, "V"), - (0x2E0, "M", "ɣ"), - (0x2E1, "M", "l"), - (0x2E2, "M", "s"), - (0x2E3, "M", "x"), - (0x2E4, "M", "ʕ"), - (0x2E5, "V"), - (0x340, "M", "̀"), - (0x341, "M", "́"), - (0x342, "V"), - (0x343, "M", "̓"), - (0x344, "M", "̈́"), - (0x345, "M", "ι"), - (0x346, "V"), - (0x34F, "I"), - (0x350, "V"), - (0x370, "M", "ͱ"), - (0x371, "V"), - (0x372, "M", "ͳ"), - (0x373, "V"), - (0x374, "M", "ʹ"), - (0x375, "V"), - (0x376, "M", "ͷ"), - (0x377, "V"), - ] - - -def _seg_6() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x378, "X"), - (0x37A, "M", " ι"), - (0x37B, "V"), - (0x37E, "M", ";"), - (0x37F, "M", "ϳ"), - (0x380, "X"), - (0x384, "M", " ́"), - (0x385, "M", " ̈́"), - (0x386, "M", "ά"), - (0x387, "M", "·"), - (0x388, "M", "έ"), - (0x389, "M", "ή"), - (0x38A, "M", "ί"), - (0x38B, "X"), - (0x38C, "M", "ό"), - (0x38D, "X"), - (0x38E, "M", "ύ"), - (0x38F, "M", "ώ"), - (0x390, "V"), - (0x391, "M", "α"), - (0x392, "M", "β"), - (0x393, "M", "γ"), - (0x394, "M", "δ"), - (0x395, "M", "ε"), - (0x396, "M", "ζ"), - (0x397, "M", "η"), - (0x398, "M", "θ"), - (0x399, "M", "ι"), - (0x39A, "M", "κ"), - (0x39B, "M", "λ"), - (0x39C, "M", "μ"), - (0x39D, "M", "ν"), - (0x39E, "M", "ξ"), - (0x39F, "M", "ο"), - (0x3A0, "M", "π"), - (0x3A1, "M", "ρ"), - (0x3A2, "X"), - (0x3A3, "M", "σ"), - (0x3A4, "M", "τ"), - (0x3A5, "M", "υ"), - (0x3A6, "M", "φ"), - (0x3A7, "M", "χ"), - (0x3A8, "M", "ψ"), - (0x3A9, "M", "ω"), - (0x3AA, "M", "ϊ"), - (0x3AB, "M", "ϋ"), - (0x3AC, "V"), - (0x3C2, "D", "σ"), - (0x3C3, "V"), - (0x3CF, "M", "ϗ"), - (0x3D0, "M", "β"), - (0x3D1, "M", "θ"), - (0x3D2, "M", "υ"), - (0x3D3, "M", "ύ"), - (0x3D4, "M", "ϋ"), - (0x3D5, "M", "φ"), - (0x3D6, "M", "π"), - (0x3D7, "V"), - (0x3D8, "M", "ϙ"), - (0x3D9, "V"), - (0x3DA, "M", "ϛ"), - (0x3DB, "V"), - (0x3DC, "M", "ϝ"), - (0x3DD, "V"), - (0x3DE, "M", "ϟ"), - (0x3DF, "V"), - (0x3E0, "M", "ϡ"), - (0x3E1, "V"), - (0x3E2, "M", "ϣ"), - (0x3E3, "V"), - (0x3E4, "M", "ϥ"), - (0x3E5, "V"), - (0x3E6, "M", "ϧ"), - (0x3E7, "V"), - (0x3E8, "M", "ϩ"), - (0x3E9, "V"), - (0x3EA, "M", "ϫ"), - (0x3EB, "V"), - (0x3EC, "M", "ϭ"), - (0x3ED, "V"), - (0x3EE, "M", "ϯ"), - (0x3EF, "V"), - (0x3F0, "M", "κ"), - (0x3F1, "M", "ρ"), - (0x3F2, "M", "σ"), - (0x3F3, "V"), - (0x3F4, "M", "θ"), - (0x3F5, "M", "ε"), - (0x3F6, "V"), - (0x3F7, "M", "ϸ"), - (0x3F8, "V"), - (0x3F9, "M", "σ"), - (0x3FA, "M", "ϻ"), - (0x3FB, "V"), - (0x3FD, "M", "ͻ"), - (0x3FE, "M", "ͼ"), - (0x3FF, "M", "ͽ"), - (0x400, "M", "ѐ"), - (0x401, "M", "ё"), - (0x402, "M", "ђ"), - ] - - -def _seg_7() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x403, "M", "ѓ"), - (0x404, "M", "є"), - (0x405, "M", "ѕ"), - (0x406, "M", "і"), - (0x407, "M", "ї"), - (0x408, "M", "ј"), - (0x409, "M", "љ"), - (0x40A, "M", "њ"), - (0x40B, "M", "ћ"), - (0x40C, "M", "ќ"), - (0x40D, "M", "ѝ"), - (0x40E, "M", "ў"), - (0x40F, "M", "џ"), - (0x410, "M", "а"), - (0x411, "M", "б"), - (0x412, "M", "в"), - (0x413, "M", "г"), - (0x414, "M", "д"), - (0x415, "M", "е"), - (0x416, "M", "ж"), - (0x417, "M", "з"), - (0x418, "M", "и"), - (0x419, "M", "й"), - (0x41A, "M", "к"), - (0x41B, "M", "л"), - (0x41C, "M", "м"), - (0x41D, "M", "н"), - (0x41E, "M", "о"), - (0x41F, "M", "п"), - (0x420, "M", "р"), - (0x421, "M", "с"), - (0x422, "M", "т"), - (0x423, "M", "у"), - (0x424, "M", "ф"), - (0x425, "M", "х"), - (0x426, "M", "ц"), - (0x427, "M", "ч"), - (0x428, "M", "ш"), - (0x429, "M", "щ"), - (0x42A, "M", "ъ"), - (0x42B, "M", "ы"), - (0x42C, "M", "ь"), - (0x42D, "M", "э"), - (0x42E, "M", "ю"), - (0x42F, "M", "я"), - (0x430, "V"), - (0x460, "M", "ѡ"), - (0x461, "V"), - (0x462, "M", "ѣ"), - (0x463, "V"), - (0x464, "M", "ѥ"), - (0x465, "V"), - (0x466, "M", "ѧ"), - (0x467, "V"), - (0x468, "M", "ѩ"), - (0x469, "V"), - (0x46A, "M", "ѫ"), - (0x46B, "V"), - (0x46C, "M", "ѭ"), - (0x46D, "V"), - (0x46E, "M", "ѯ"), - (0x46F, "V"), - (0x470, "M", "ѱ"), - (0x471, "V"), - (0x472, "M", "ѳ"), - (0x473, "V"), - (0x474, "M", "ѵ"), - (0x475, "V"), - (0x476, "M", "ѷ"), - (0x477, "V"), - (0x478, "M", "ѹ"), - (0x479, "V"), - (0x47A, "M", "ѻ"), - (0x47B, "V"), - (0x47C, "M", "ѽ"), - (0x47D, "V"), - (0x47E, "M", "ѿ"), - (0x47F, "V"), - (0x480, "M", "ҁ"), - (0x481, "V"), - (0x48A, "M", "ҋ"), - (0x48B, "V"), - (0x48C, "M", "ҍ"), - (0x48D, "V"), - (0x48E, "M", "ҏ"), - (0x48F, "V"), - (0x490, "M", "ґ"), - (0x491, "V"), - (0x492, "M", "ғ"), - (0x493, "V"), - (0x494, "M", "ҕ"), - (0x495, "V"), - (0x496, "M", "җ"), - (0x497, "V"), - (0x498, "M", "ҙ"), - (0x499, "V"), - (0x49A, "M", "қ"), - (0x49B, "V"), - (0x49C, "M", "ҝ"), - (0x49D, "V"), - ] - - -def _seg_8() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x49E, "M", "ҟ"), - (0x49F, "V"), - (0x4A0, "M", "ҡ"), - (0x4A1, "V"), - (0x4A2, "M", "ң"), - (0x4A3, "V"), - (0x4A4, "M", "ҥ"), - (0x4A5, "V"), - (0x4A6, "M", "ҧ"), - (0x4A7, "V"), - (0x4A8, "M", "ҩ"), - (0x4A9, "V"), - (0x4AA, "M", "ҫ"), - (0x4AB, "V"), - (0x4AC, "M", "ҭ"), - (0x4AD, "V"), - (0x4AE, "M", "ү"), - (0x4AF, "V"), - (0x4B0, "M", "ұ"), - (0x4B1, "V"), - (0x4B2, "M", "ҳ"), - (0x4B3, "V"), - (0x4B4, "M", "ҵ"), - (0x4B5, "V"), - (0x4B6, "M", "ҷ"), - (0x4B7, "V"), - (0x4B8, "M", "ҹ"), - (0x4B9, "V"), - (0x4BA, "M", "һ"), - (0x4BB, "V"), - (0x4BC, "M", "ҽ"), - (0x4BD, "V"), - (0x4BE, "M", "ҿ"), - (0x4BF, "V"), - (0x4C0, "M", "ӏ"), - (0x4C1, "M", "ӂ"), - (0x4C2, "V"), - (0x4C3, "M", "ӄ"), - (0x4C4, "V"), - (0x4C5, "M", "ӆ"), - (0x4C6, "V"), - (0x4C7, "M", "ӈ"), - (0x4C8, "V"), - (0x4C9, "M", "ӊ"), - (0x4CA, "V"), - (0x4CB, "M", "ӌ"), - (0x4CC, "V"), - (0x4CD, "M", "ӎ"), - (0x4CE, "V"), - (0x4D0, "M", "ӑ"), - (0x4D1, "V"), - (0x4D2, "M", "ӓ"), - (0x4D3, "V"), - (0x4D4, "M", "ӕ"), - (0x4D5, "V"), - (0x4D6, "M", "ӗ"), - (0x4D7, "V"), - (0x4D8, "M", "ә"), - (0x4D9, "V"), - (0x4DA, "M", "ӛ"), - (0x4DB, "V"), - (0x4DC, "M", "ӝ"), - (0x4DD, "V"), - (0x4DE, "M", "ӟ"), - (0x4DF, "V"), - (0x4E0, "M", "ӡ"), - (0x4E1, "V"), - (0x4E2, "M", "ӣ"), - (0x4E3, "V"), - (0x4E4, "M", "ӥ"), - (0x4E5, "V"), - (0x4E6, "M", "ӧ"), - (0x4E7, "V"), - (0x4E8, "M", "ө"), - (0x4E9, "V"), - (0x4EA, "M", "ӫ"), - (0x4EB, "V"), - (0x4EC, "M", "ӭ"), - (0x4ED, "V"), - (0x4EE, "M", "ӯ"), - (0x4EF, "V"), - (0x4F0, "M", "ӱ"), - (0x4F1, "V"), - (0x4F2, "M", "ӳ"), - (0x4F3, "V"), - (0x4F4, "M", "ӵ"), - (0x4F5, "V"), - (0x4F6, "M", "ӷ"), - (0x4F7, "V"), - (0x4F8, "M", "ӹ"), - (0x4F9, "V"), - (0x4FA, "M", "ӻ"), - (0x4FB, "V"), - (0x4FC, "M", "ӽ"), - (0x4FD, "V"), - (0x4FE, "M", "ӿ"), - (0x4FF, "V"), - (0x500, "M", "ԁ"), - (0x501, "V"), - (0x502, "M", "ԃ"), - ] - - -def _seg_9() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x503, "V"), - (0x504, "M", "ԅ"), - (0x505, "V"), - (0x506, "M", "ԇ"), - (0x507, "V"), - (0x508, "M", "ԉ"), - (0x509, "V"), - (0x50A, "M", "ԋ"), - (0x50B, "V"), - (0x50C, "M", "ԍ"), - (0x50D, "V"), - (0x50E, "M", "ԏ"), - (0x50F, "V"), - (0x510, "M", "ԑ"), - (0x511, "V"), - (0x512, "M", "ԓ"), - (0x513, "V"), - (0x514, "M", "ԕ"), - (0x515, "V"), - (0x516, "M", "ԗ"), - (0x517, "V"), - (0x518, "M", "ԙ"), - (0x519, "V"), - (0x51A, "M", "ԛ"), - (0x51B, "V"), - (0x51C, "M", "ԝ"), - (0x51D, "V"), - (0x51E, "M", "ԟ"), - (0x51F, "V"), - (0x520, "M", "ԡ"), - (0x521, "V"), - (0x522, "M", "ԣ"), - (0x523, "V"), - (0x524, "M", "ԥ"), - (0x525, "V"), - (0x526, "M", "ԧ"), - (0x527, "V"), - (0x528, "M", "ԩ"), - (0x529, "V"), - (0x52A, "M", "ԫ"), - (0x52B, "V"), - (0x52C, "M", "ԭ"), - (0x52D, "V"), - (0x52E, "M", "ԯ"), - (0x52F, "V"), - (0x530, "X"), - (0x531, "M", "ա"), - (0x532, "M", "բ"), - (0x533, "M", "գ"), - (0x534, "M", "դ"), - (0x535, "M", "ե"), - (0x536, "M", "զ"), - (0x537, "M", "է"), - (0x538, "M", "ը"), - (0x539, "M", "թ"), - (0x53A, "M", "ժ"), - (0x53B, "M", "ի"), - (0x53C, "M", "լ"), - (0x53D, "M", "խ"), - (0x53E, "M", "ծ"), - (0x53F, "M", "կ"), - (0x540, "M", "հ"), - (0x541, "M", "ձ"), - (0x542, "M", "ղ"), - (0x543, "M", "ճ"), - (0x544, "M", "մ"), - (0x545, "M", "յ"), - (0x546, "M", "ն"), - (0x547, "M", "շ"), - (0x548, "M", "ո"), - (0x549, "M", "չ"), - (0x54A, "M", "պ"), - (0x54B, "M", "ջ"), - (0x54C, "M", "ռ"), - (0x54D, "M", "ս"), - (0x54E, "M", "վ"), - (0x54F, "M", "տ"), - (0x550, "M", "ր"), - (0x551, "M", "ց"), - (0x552, "M", "ւ"), - (0x553, "M", "փ"), - (0x554, "M", "ք"), - (0x555, "M", "օ"), - (0x556, "M", "ֆ"), - (0x557, "X"), - (0x559, "V"), - (0x587, "M", "եւ"), - (0x588, "V"), - (0x58B, "X"), - (0x58D, "V"), - (0x590, "X"), - (0x591, "V"), - (0x5C8, "X"), - (0x5D0, "V"), - (0x5EB, "X"), - (0x5EF, "V"), - (0x5F5, "X"), - (0x606, "V"), - (0x61C, "X"), - (0x61D, "V"), - ] - - -def _seg_10() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x675, "M", "اٴ"), - (0x676, "M", "وٴ"), - (0x677, "M", "ۇٴ"), - (0x678, "M", "يٴ"), - (0x679, "V"), - (0x6DD, "X"), - (0x6DE, "V"), - (0x70E, "X"), - (0x710, "V"), - (0x74B, "X"), - (0x74D, "V"), - (0x7B2, "X"), - (0x7C0, "V"), - (0x7FB, "X"), - (0x7FD, "V"), - (0x82E, "X"), - (0x830, "V"), - (0x83F, "X"), - (0x840, "V"), - (0x85C, "X"), - (0x85E, "V"), - (0x85F, "X"), - (0x860, "V"), - (0x86B, "X"), - (0x870, "V"), - (0x88F, "X"), - (0x897, "V"), - (0x8E2, "X"), - (0x8E3, "V"), - (0x958, "M", "क़"), - (0x959, "M", "ख़"), - (0x95A, "M", "ग़"), - (0x95B, "M", "ज़"), - (0x95C, "M", "ड़"), - (0x95D, "M", "ढ़"), - (0x95E, "M", "फ़"), - (0x95F, "M", "य़"), - (0x960, "V"), - (0x984, "X"), - (0x985, "V"), - (0x98D, "X"), - (0x98F, "V"), - (0x991, "X"), - (0x993, "V"), - (0x9A9, "X"), - (0x9AA, "V"), - (0x9B1, "X"), - (0x9B2, "V"), - (0x9B3, "X"), - (0x9B6, "V"), - (0x9BA, "X"), - (0x9BC, "V"), - (0x9C5, "X"), - (0x9C7, "V"), - (0x9C9, "X"), - (0x9CB, "V"), - (0x9CF, "X"), - (0x9D7, "V"), - (0x9D8, "X"), - (0x9DC, "M", "ড়"), - (0x9DD, "M", "ঢ়"), - (0x9DE, "X"), - (0x9DF, "M", "য়"), - (0x9E0, "V"), - (0x9E4, "X"), - (0x9E6, "V"), - (0x9FF, "X"), - (0xA01, "V"), - (0xA04, "X"), - (0xA05, "V"), - (0xA0B, "X"), - (0xA0F, "V"), - (0xA11, "X"), - (0xA13, "V"), - (0xA29, "X"), - (0xA2A, "V"), - (0xA31, "X"), - (0xA32, "V"), - (0xA33, "M", "ਲ਼"), - (0xA34, "X"), - (0xA35, "V"), - (0xA36, "M", "ਸ਼"), - (0xA37, "X"), - (0xA38, "V"), - (0xA3A, "X"), - (0xA3C, "V"), - (0xA3D, "X"), - (0xA3E, "V"), - (0xA43, "X"), - (0xA47, "V"), - (0xA49, "X"), - (0xA4B, "V"), - (0xA4E, "X"), - (0xA51, "V"), - (0xA52, "X"), - (0xA59, "M", "ਖ਼"), - (0xA5A, "M", "ਗ਼"), - (0xA5B, "M", "ਜ਼"), - (0xA5C, "V"), - (0xA5D, "X"), - ] - - -def _seg_11() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA5E, "M", "ਫ਼"), - (0xA5F, "X"), - (0xA66, "V"), - (0xA77, "X"), - (0xA81, "V"), - (0xA84, "X"), - (0xA85, "V"), - (0xA8E, "X"), - (0xA8F, "V"), - (0xA92, "X"), - (0xA93, "V"), - (0xAA9, "X"), - (0xAAA, "V"), - (0xAB1, "X"), - (0xAB2, "V"), - (0xAB4, "X"), - (0xAB5, "V"), - (0xABA, "X"), - (0xABC, "V"), - (0xAC6, "X"), - (0xAC7, "V"), - (0xACA, "X"), - (0xACB, "V"), - (0xACE, "X"), - (0xAD0, "V"), - (0xAD1, "X"), - (0xAE0, "V"), - (0xAE4, "X"), - (0xAE6, "V"), - (0xAF2, "X"), - (0xAF9, "V"), - (0xB00, "X"), - (0xB01, "V"), - (0xB04, "X"), - (0xB05, "V"), - (0xB0D, "X"), - (0xB0F, "V"), - (0xB11, "X"), - (0xB13, "V"), - (0xB29, "X"), - (0xB2A, "V"), - (0xB31, "X"), - (0xB32, "V"), - (0xB34, "X"), - (0xB35, "V"), - (0xB3A, "X"), - (0xB3C, "V"), - (0xB45, "X"), - (0xB47, "V"), - (0xB49, "X"), - (0xB4B, "V"), - (0xB4E, "X"), - (0xB55, "V"), - (0xB58, "X"), - (0xB5C, "M", "ଡ଼"), - (0xB5D, "M", "ଢ଼"), - (0xB5E, "X"), - (0xB5F, "V"), - (0xB64, "X"), - (0xB66, "V"), - (0xB78, "X"), - (0xB82, "V"), - (0xB84, "X"), - (0xB85, "V"), - (0xB8B, "X"), - (0xB8E, "V"), - (0xB91, "X"), - (0xB92, "V"), - (0xB96, "X"), - (0xB99, "V"), - (0xB9B, "X"), - (0xB9C, "V"), - (0xB9D, "X"), - (0xB9E, "V"), - (0xBA0, "X"), - (0xBA3, "V"), - (0xBA5, "X"), - (0xBA8, "V"), - (0xBAB, "X"), - (0xBAE, "V"), - (0xBBA, "X"), - (0xBBE, "V"), - (0xBC3, "X"), - (0xBC6, "V"), - (0xBC9, "X"), - (0xBCA, "V"), - (0xBCE, "X"), - (0xBD0, "V"), - (0xBD1, "X"), - (0xBD7, "V"), - (0xBD8, "X"), - (0xBE6, "V"), - (0xBFB, "X"), - (0xC00, "V"), - (0xC0D, "X"), - (0xC0E, "V"), - (0xC11, "X"), - (0xC12, "V"), - (0xC29, "X"), - (0xC2A, "V"), - ] - - -def _seg_12() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xC3A, "X"), - (0xC3C, "V"), - (0xC45, "X"), - (0xC46, "V"), - (0xC49, "X"), - (0xC4A, "V"), - (0xC4E, "X"), - (0xC55, "V"), - (0xC57, "X"), - (0xC58, "V"), - (0xC5B, "X"), - (0xC5D, "V"), - (0xC5E, "X"), - (0xC60, "V"), - (0xC64, "X"), - (0xC66, "V"), - (0xC70, "X"), - (0xC77, "V"), - (0xC8D, "X"), - (0xC8E, "V"), - (0xC91, "X"), - (0xC92, "V"), - (0xCA9, "X"), - (0xCAA, "V"), - (0xCB4, "X"), - (0xCB5, "V"), - (0xCBA, "X"), - (0xCBC, "V"), - (0xCC5, "X"), - (0xCC6, "V"), - (0xCC9, "X"), - (0xCCA, "V"), - (0xCCE, "X"), - (0xCD5, "V"), - (0xCD7, "X"), - (0xCDD, "V"), - (0xCDF, "X"), - (0xCE0, "V"), - (0xCE4, "X"), - (0xCE6, "V"), - (0xCF0, "X"), - (0xCF1, "V"), - (0xCF4, "X"), - (0xD00, "V"), - (0xD0D, "X"), - (0xD0E, "V"), - (0xD11, "X"), - (0xD12, "V"), - (0xD45, "X"), - (0xD46, "V"), - (0xD49, "X"), - (0xD4A, "V"), - (0xD50, "X"), - (0xD54, "V"), - (0xD64, "X"), - (0xD66, "V"), - (0xD80, "X"), - (0xD81, "V"), - (0xD84, "X"), - (0xD85, "V"), - (0xD97, "X"), - (0xD9A, "V"), - (0xDB2, "X"), - (0xDB3, "V"), - (0xDBC, "X"), - (0xDBD, "V"), - (0xDBE, "X"), - (0xDC0, "V"), - (0xDC7, "X"), - (0xDCA, "V"), - (0xDCB, "X"), - (0xDCF, "V"), - (0xDD5, "X"), - (0xDD6, "V"), - (0xDD7, "X"), - (0xDD8, "V"), - (0xDE0, "X"), - (0xDE6, "V"), - (0xDF0, "X"), - (0xDF2, "V"), - (0xDF5, "X"), - (0xE01, "V"), - (0xE33, "M", "ํา"), - (0xE34, "V"), - (0xE3B, "X"), - (0xE3F, "V"), - (0xE5C, "X"), - (0xE81, "V"), - (0xE83, "X"), - (0xE84, "V"), - (0xE85, "X"), - (0xE86, "V"), - (0xE8B, "X"), - (0xE8C, "V"), - (0xEA4, "X"), - (0xEA5, "V"), - (0xEA6, "X"), - (0xEA7, "V"), - (0xEB3, "M", "ໍາ"), - (0xEB4, "V"), - ] - - -def _seg_13() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xEBE, "X"), - (0xEC0, "V"), - (0xEC5, "X"), - (0xEC6, "V"), - (0xEC7, "X"), - (0xEC8, "V"), - (0xECF, "X"), - (0xED0, "V"), - (0xEDA, "X"), - (0xEDC, "M", "ຫນ"), - (0xEDD, "M", "ຫມ"), - (0xEDE, "V"), - (0xEE0, "X"), - (0xF00, "V"), - (0xF0C, "M", "་"), - (0xF0D, "V"), - (0xF43, "M", "གྷ"), - (0xF44, "V"), - (0xF48, "X"), - (0xF49, "V"), - (0xF4D, "M", "ཌྷ"), - (0xF4E, "V"), - (0xF52, "M", "དྷ"), - (0xF53, "V"), - (0xF57, "M", "བྷ"), - (0xF58, "V"), - (0xF5C, "M", "ཛྷ"), - (0xF5D, "V"), - (0xF69, "M", "ཀྵ"), - (0xF6A, "V"), - (0xF6D, "X"), - (0xF71, "V"), - (0xF73, "M", "ཱི"), - (0xF74, "V"), - (0xF75, "M", "ཱུ"), - (0xF76, "M", "ྲྀ"), - (0xF77, "M", "ྲཱྀ"), - (0xF78, "M", "ླྀ"), - (0xF79, "M", "ླཱྀ"), - (0xF7A, "V"), - (0xF81, "M", "ཱྀ"), - (0xF82, "V"), - (0xF93, "M", "ྒྷ"), - (0xF94, "V"), - (0xF98, "X"), - (0xF99, "V"), - (0xF9D, "M", "ྜྷ"), - (0xF9E, "V"), - (0xFA2, "M", "ྡྷ"), - (0xFA3, "V"), - (0xFA7, "M", "ྦྷ"), - (0xFA8, "V"), - (0xFAC, "M", "ྫྷ"), - (0xFAD, "V"), - (0xFB9, "M", "ྐྵ"), - (0xFBA, "V"), - (0xFBD, "X"), - (0xFBE, "V"), - (0xFCD, "X"), - (0xFCE, "V"), - (0xFDB, "X"), - (0x1000, "V"), - (0x10A0, "M", "ⴀ"), - (0x10A1, "M", "ⴁ"), - (0x10A2, "M", "ⴂ"), - (0x10A3, "M", "ⴃ"), - (0x10A4, "M", "ⴄ"), - (0x10A5, "M", "ⴅ"), - (0x10A6, "M", "ⴆ"), - (0x10A7, "M", "ⴇ"), - (0x10A8, "M", "ⴈ"), - (0x10A9, "M", "ⴉ"), - (0x10AA, "M", "ⴊ"), - (0x10AB, "M", "ⴋ"), - (0x10AC, "M", "ⴌ"), - (0x10AD, "M", "ⴍ"), - (0x10AE, "M", "ⴎ"), - (0x10AF, "M", "ⴏ"), - (0x10B0, "M", "ⴐ"), - (0x10B1, "M", "ⴑ"), - (0x10B2, "M", "ⴒ"), - (0x10B3, "M", "ⴓ"), - (0x10B4, "M", "ⴔ"), - (0x10B5, "M", "ⴕ"), - (0x10B6, "M", "ⴖ"), - (0x10B7, "M", "ⴗ"), - (0x10B8, "M", "ⴘ"), - (0x10B9, "M", "ⴙ"), - (0x10BA, "M", "ⴚ"), - (0x10BB, "M", "ⴛ"), - (0x10BC, "M", "ⴜ"), - (0x10BD, "M", "ⴝ"), - (0x10BE, "M", "ⴞ"), - (0x10BF, "M", "ⴟ"), - (0x10C0, "M", "ⴠ"), - (0x10C1, "M", "ⴡ"), - (0x10C2, "M", "ⴢ"), - (0x10C3, "M", "ⴣ"), - (0x10C4, "M", "ⴤ"), - (0x10C5, "M", "ⴥ"), - ] - - -def _seg_14() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10C6, "X"), - (0x10C7, "M", "ⴧ"), - (0x10C8, "X"), - (0x10CD, "M", "ⴭ"), - (0x10CE, "X"), - (0x10D0, "V"), - (0x10FC, "M", "ნ"), - (0x10FD, "V"), - (0x115F, "I"), - (0x1161, "V"), - (0x1249, "X"), - (0x124A, "V"), - (0x124E, "X"), - (0x1250, "V"), - (0x1257, "X"), - (0x1258, "V"), - (0x1259, "X"), - (0x125A, "V"), - (0x125E, "X"), - (0x1260, "V"), - (0x1289, "X"), - (0x128A, "V"), - (0x128E, "X"), - (0x1290, "V"), - (0x12B1, "X"), - (0x12B2, "V"), - (0x12B6, "X"), - (0x12B8, "V"), - (0x12BF, "X"), - (0x12C0, "V"), - (0x12C1, "X"), - (0x12C2, "V"), - (0x12C6, "X"), - (0x12C8, "V"), - (0x12D7, "X"), - (0x12D8, "V"), - (0x1311, "X"), - (0x1312, "V"), - (0x1316, "X"), - (0x1318, "V"), - (0x135B, "X"), - (0x135D, "V"), - (0x137D, "X"), - (0x1380, "V"), - (0x139A, "X"), - (0x13A0, "V"), - (0x13F6, "X"), - (0x13F8, "M", "Ᏸ"), - (0x13F9, "M", "Ᏹ"), - (0x13FA, "M", "Ᏺ"), - (0x13FB, "M", "Ᏻ"), - (0x13FC, "M", "Ᏼ"), - (0x13FD, "M", "Ᏽ"), - (0x13FE, "X"), - (0x1400, "V"), - (0x1680, "X"), - (0x1681, "V"), - (0x169D, "X"), - (0x16A0, "V"), - (0x16F9, "X"), - (0x1700, "V"), - (0x1716, "X"), - (0x171F, "V"), - (0x1737, "X"), - (0x1740, "V"), - (0x1754, "X"), - (0x1760, "V"), - (0x176D, "X"), - (0x176E, "V"), - (0x1771, "X"), - (0x1772, "V"), - (0x1774, "X"), - (0x1780, "V"), - (0x17B4, "I"), - (0x17B6, "V"), - (0x17DE, "X"), - (0x17E0, "V"), - (0x17EA, "X"), - (0x17F0, "V"), - (0x17FA, "X"), - (0x1800, "V"), - (0x180B, "I"), - (0x1810, "V"), - (0x181A, "X"), - (0x1820, "V"), - (0x1879, "X"), - (0x1880, "V"), - (0x18AB, "X"), - (0x18B0, "V"), - (0x18F6, "X"), - (0x1900, "V"), - (0x191F, "X"), - (0x1920, "V"), - (0x192C, "X"), - (0x1930, "V"), - (0x193C, "X"), - (0x1940, "V"), - (0x1941, "X"), - (0x1944, "V"), - (0x196E, "X"), - ] - - -def _seg_15() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1970, "V"), - (0x1975, "X"), - (0x1980, "V"), - (0x19AC, "X"), - (0x19B0, "V"), - (0x19CA, "X"), - (0x19D0, "V"), - (0x19DB, "X"), - (0x19DE, "V"), - (0x1A1C, "X"), - (0x1A1E, "V"), - (0x1A5F, "X"), - (0x1A60, "V"), - (0x1A7D, "X"), - (0x1A7F, "V"), - (0x1A8A, "X"), - (0x1A90, "V"), - (0x1A9A, "X"), - (0x1AA0, "V"), - (0x1AAE, "X"), - (0x1AB0, "V"), - (0x1ACF, "X"), - (0x1B00, "V"), - (0x1B4D, "X"), - (0x1B4E, "V"), - (0x1BF4, "X"), - (0x1BFC, "V"), - (0x1C38, "X"), - (0x1C3B, "V"), - (0x1C4A, "X"), - (0x1C4D, "V"), - (0x1C80, "M", "в"), - (0x1C81, "M", "д"), - (0x1C82, "M", "о"), - (0x1C83, "M", "с"), - (0x1C84, "M", "т"), - (0x1C86, "M", "ъ"), - (0x1C87, "M", "ѣ"), - (0x1C88, "M", "ꙋ"), - (0x1C89, "M", "ᲊ"), - (0x1C8A, "V"), - (0x1C8B, "X"), - (0x1C90, "M", "ა"), - (0x1C91, "M", "ბ"), - (0x1C92, "M", "გ"), - (0x1C93, "M", "დ"), - (0x1C94, "M", "ე"), - (0x1C95, "M", "ვ"), - (0x1C96, "M", "ზ"), - (0x1C97, "M", "თ"), - (0x1C98, "M", "ი"), - (0x1C99, "M", "კ"), - (0x1C9A, "M", "ლ"), - (0x1C9B, "M", "მ"), - (0x1C9C, "M", "ნ"), - (0x1C9D, "M", "ო"), - (0x1C9E, "M", "პ"), - (0x1C9F, "M", "ჟ"), - (0x1CA0, "M", "რ"), - (0x1CA1, "M", "ს"), - (0x1CA2, "M", "ტ"), - (0x1CA3, "M", "უ"), - (0x1CA4, "M", "ფ"), - (0x1CA5, "M", "ქ"), - (0x1CA6, "M", "ღ"), - (0x1CA7, "M", "ყ"), - (0x1CA8, "M", "შ"), - (0x1CA9, "M", "ჩ"), - (0x1CAA, "M", "ც"), - (0x1CAB, "M", "ძ"), - (0x1CAC, "M", "წ"), - (0x1CAD, "M", "ჭ"), - (0x1CAE, "M", "ხ"), - (0x1CAF, "M", "ჯ"), - (0x1CB0, "M", "ჰ"), - (0x1CB1, "M", "ჱ"), - (0x1CB2, "M", "ჲ"), - (0x1CB3, "M", "ჳ"), - (0x1CB4, "M", "ჴ"), - (0x1CB5, "M", "ჵ"), - (0x1CB6, "M", "ჶ"), - (0x1CB7, "M", "ჷ"), - (0x1CB8, "M", "ჸ"), - (0x1CB9, "M", "ჹ"), - (0x1CBA, "M", "ჺ"), - (0x1CBB, "X"), - (0x1CBD, "M", "ჽ"), - (0x1CBE, "M", "ჾ"), - (0x1CBF, "M", "ჿ"), - (0x1CC0, "V"), - (0x1CC8, "X"), - (0x1CD0, "V"), - (0x1CFB, "X"), - (0x1D00, "V"), - (0x1D2C, "M", "a"), - (0x1D2D, "M", "æ"), - (0x1D2E, "M", "b"), - (0x1D2F, "V"), - (0x1D30, "M", "d"), - (0x1D31, "M", "e"), - ] - - -def _seg_16() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D32, "M", "ǝ"), - (0x1D33, "M", "g"), - (0x1D34, "M", "h"), - (0x1D35, "M", "i"), - (0x1D36, "M", "j"), - (0x1D37, "M", "k"), - (0x1D38, "M", "l"), - (0x1D39, "M", "m"), - (0x1D3A, "M", "n"), - (0x1D3B, "V"), - (0x1D3C, "M", "o"), - (0x1D3D, "M", "ȣ"), - (0x1D3E, "M", "p"), - (0x1D3F, "M", "r"), - (0x1D40, "M", "t"), - (0x1D41, "M", "u"), - (0x1D42, "M", "w"), - (0x1D43, "M", "a"), - (0x1D44, "M", "ɐ"), - (0x1D45, "M", "ɑ"), - (0x1D46, "M", "ᴂ"), - (0x1D47, "M", "b"), - (0x1D48, "M", "d"), - (0x1D49, "M", "e"), - (0x1D4A, "M", "ə"), - (0x1D4B, "M", "ɛ"), - (0x1D4C, "M", "ɜ"), - (0x1D4D, "M", "g"), - (0x1D4E, "V"), - (0x1D4F, "M", "k"), - (0x1D50, "M", "m"), - (0x1D51, "M", "ŋ"), - (0x1D52, "M", "o"), - (0x1D53, "M", "ɔ"), - (0x1D54, "M", "ᴖ"), - (0x1D55, "M", "ᴗ"), - (0x1D56, "M", "p"), - (0x1D57, "M", "t"), - (0x1D58, "M", "u"), - (0x1D59, "M", "ᴝ"), - (0x1D5A, "M", "ɯ"), - (0x1D5B, "M", "v"), - (0x1D5C, "M", "ᴥ"), - (0x1D5D, "M", "β"), - (0x1D5E, "M", "γ"), - (0x1D5F, "M", "δ"), - (0x1D60, "M", "φ"), - (0x1D61, "M", "χ"), - (0x1D62, "M", "i"), - (0x1D63, "M", "r"), - (0x1D64, "M", "u"), - (0x1D65, "M", "v"), - (0x1D66, "M", "β"), - (0x1D67, "M", "γ"), - (0x1D68, "M", "ρ"), - (0x1D69, "M", "φ"), - (0x1D6A, "M", "χ"), - (0x1D6B, "V"), - (0x1D78, "M", "н"), - (0x1D79, "V"), - (0x1D9B, "M", "ɒ"), - (0x1D9C, "M", "c"), - (0x1D9D, "M", "ɕ"), - (0x1D9E, "M", "ð"), - (0x1D9F, "M", "ɜ"), - (0x1DA0, "M", "f"), - (0x1DA1, "M", "ɟ"), - (0x1DA2, "M", "ɡ"), - (0x1DA3, "M", "ɥ"), - (0x1DA4, "M", "ɨ"), - (0x1DA5, "M", "ɩ"), - (0x1DA6, "M", "ɪ"), - (0x1DA7, "M", "ᵻ"), - (0x1DA8, "M", "ʝ"), - (0x1DA9, "M", "ɭ"), - (0x1DAA, "M", "ᶅ"), - (0x1DAB, "M", "ʟ"), - (0x1DAC, "M", "ɱ"), - (0x1DAD, "M", "ɰ"), - (0x1DAE, "M", "ɲ"), - (0x1DAF, "M", "ɳ"), - (0x1DB0, "M", "ɴ"), - (0x1DB1, "M", "ɵ"), - (0x1DB2, "M", "ɸ"), - (0x1DB3, "M", "ʂ"), - (0x1DB4, "M", "ʃ"), - (0x1DB5, "M", "ƫ"), - (0x1DB6, "M", "ʉ"), - (0x1DB7, "M", "ʊ"), - (0x1DB8, "M", "ᴜ"), - (0x1DB9, "M", "ʋ"), - (0x1DBA, "M", "ʌ"), - (0x1DBB, "M", "z"), - (0x1DBC, "M", "ʐ"), - (0x1DBD, "M", "ʑ"), - (0x1DBE, "M", "ʒ"), - (0x1DBF, "M", "θ"), - (0x1DC0, "V"), - (0x1E00, "M", "ḁ"), - (0x1E01, "V"), - ] - - -def _seg_17() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E02, "M", "ḃ"), - (0x1E03, "V"), - (0x1E04, "M", "ḅ"), - (0x1E05, "V"), - (0x1E06, "M", "ḇ"), - (0x1E07, "V"), - (0x1E08, "M", "ḉ"), - (0x1E09, "V"), - (0x1E0A, "M", "ḋ"), - (0x1E0B, "V"), - (0x1E0C, "M", "ḍ"), - (0x1E0D, "V"), - (0x1E0E, "M", "ḏ"), - (0x1E0F, "V"), - (0x1E10, "M", "ḑ"), - (0x1E11, "V"), - (0x1E12, "M", "ḓ"), - (0x1E13, "V"), - (0x1E14, "M", "ḕ"), - (0x1E15, "V"), - (0x1E16, "M", "ḗ"), - (0x1E17, "V"), - (0x1E18, "M", "ḙ"), - (0x1E19, "V"), - (0x1E1A, "M", "ḛ"), - (0x1E1B, "V"), - (0x1E1C, "M", "ḝ"), - (0x1E1D, "V"), - (0x1E1E, "M", "ḟ"), - (0x1E1F, "V"), - (0x1E20, "M", "ḡ"), - (0x1E21, "V"), - (0x1E22, "M", "ḣ"), - (0x1E23, "V"), - (0x1E24, "M", "ḥ"), - (0x1E25, "V"), - (0x1E26, "M", "ḧ"), - (0x1E27, "V"), - (0x1E28, "M", "ḩ"), - (0x1E29, "V"), - (0x1E2A, "M", "ḫ"), - (0x1E2B, "V"), - (0x1E2C, "M", "ḭ"), - (0x1E2D, "V"), - (0x1E2E, "M", "ḯ"), - (0x1E2F, "V"), - (0x1E30, "M", "ḱ"), - (0x1E31, "V"), - (0x1E32, "M", "ḳ"), - (0x1E33, "V"), - (0x1E34, "M", "ḵ"), - (0x1E35, "V"), - (0x1E36, "M", "ḷ"), - (0x1E37, "V"), - (0x1E38, "M", "ḹ"), - (0x1E39, "V"), - (0x1E3A, "M", "ḻ"), - (0x1E3B, "V"), - (0x1E3C, "M", "ḽ"), - (0x1E3D, "V"), - (0x1E3E, "M", "ḿ"), - (0x1E3F, "V"), - (0x1E40, "M", "ṁ"), - (0x1E41, "V"), - (0x1E42, "M", "ṃ"), - (0x1E43, "V"), - (0x1E44, "M", "ṅ"), - (0x1E45, "V"), - (0x1E46, "M", "ṇ"), - (0x1E47, "V"), - (0x1E48, "M", "ṉ"), - (0x1E49, "V"), - (0x1E4A, "M", "ṋ"), - (0x1E4B, "V"), - (0x1E4C, "M", "ṍ"), - (0x1E4D, "V"), - (0x1E4E, "M", "ṏ"), - (0x1E4F, "V"), - (0x1E50, "M", "ṑ"), - (0x1E51, "V"), - (0x1E52, "M", "ṓ"), - (0x1E53, "V"), - (0x1E54, "M", "ṕ"), - (0x1E55, "V"), - (0x1E56, "M", "ṗ"), - (0x1E57, "V"), - (0x1E58, "M", "ṙ"), - (0x1E59, "V"), - (0x1E5A, "M", "ṛ"), - (0x1E5B, "V"), - (0x1E5C, "M", "ṝ"), - (0x1E5D, "V"), - (0x1E5E, "M", "ṟ"), - (0x1E5F, "V"), - (0x1E60, "M", "ṡ"), - (0x1E61, "V"), - (0x1E62, "M", "ṣ"), - (0x1E63, "V"), - (0x1E64, "M", "ṥ"), - (0x1E65, "V"), - ] - - -def _seg_18() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E66, "M", "ṧ"), - (0x1E67, "V"), - (0x1E68, "M", "ṩ"), - (0x1E69, "V"), - (0x1E6A, "M", "ṫ"), - (0x1E6B, "V"), - (0x1E6C, "M", "ṭ"), - (0x1E6D, "V"), - (0x1E6E, "M", "ṯ"), - (0x1E6F, "V"), - (0x1E70, "M", "ṱ"), - (0x1E71, "V"), - (0x1E72, "M", "ṳ"), - (0x1E73, "V"), - (0x1E74, "M", "ṵ"), - (0x1E75, "V"), - (0x1E76, "M", "ṷ"), - (0x1E77, "V"), - (0x1E78, "M", "ṹ"), - (0x1E79, "V"), - (0x1E7A, "M", "ṻ"), - (0x1E7B, "V"), - (0x1E7C, "M", "ṽ"), - (0x1E7D, "V"), - (0x1E7E, "M", "ṿ"), - (0x1E7F, "V"), - (0x1E80, "M", "ẁ"), - (0x1E81, "V"), - (0x1E82, "M", "ẃ"), - (0x1E83, "V"), - (0x1E84, "M", "ẅ"), - (0x1E85, "V"), - (0x1E86, "M", "ẇ"), - (0x1E87, "V"), - (0x1E88, "M", "ẉ"), - (0x1E89, "V"), - (0x1E8A, "M", "ẋ"), - (0x1E8B, "V"), - (0x1E8C, "M", "ẍ"), - (0x1E8D, "V"), - (0x1E8E, "M", "ẏ"), - (0x1E8F, "V"), - (0x1E90, "M", "ẑ"), - (0x1E91, "V"), - (0x1E92, "M", "ẓ"), - (0x1E93, "V"), - (0x1E94, "M", "ẕ"), - (0x1E95, "V"), - (0x1E9A, "M", "aʾ"), - (0x1E9B, "M", "ṡ"), - (0x1E9C, "V"), - (0x1E9E, "M", "ß"), - (0x1E9F, "V"), - (0x1EA0, "M", "ạ"), - (0x1EA1, "V"), - (0x1EA2, "M", "ả"), - (0x1EA3, "V"), - (0x1EA4, "M", "ấ"), - (0x1EA5, "V"), - (0x1EA6, "M", "ầ"), - (0x1EA7, "V"), - (0x1EA8, "M", "ẩ"), - (0x1EA9, "V"), - (0x1EAA, "M", "ẫ"), - (0x1EAB, "V"), - (0x1EAC, "M", "ậ"), - (0x1EAD, "V"), - (0x1EAE, "M", "ắ"), - (0x1EAF, "V"), - (0x1EB0, "M", "ằ"), - (0x1EB1, "V"), - (0x1EB2, "M", "ẳ"), - (0x1EB3, "V"), - (0x1EB4, "M", "ẵ"), - (0x1EB5, "V"), - (0x1EB6, "M", "ặ"), - (0x1EB7, "V"), - (0x1EB8, "M", "ẹ"), - (0x1EB9, "V"), - (0x1EBA, "M", "ẻ"), - (0x1EBB, "V"), - (0x1EBC, "M", "ẽ"), - (0x1EBD, "V"), - (0x1EBE, "M", "ế"), - (0x1EBF, "V"), - (0x1EC0, "M", "ề"), - (0x1EC1, "V"), - (0x1EC2, "M", "ể"), - (0x1EC3, "V"), - (0x1EC4, "M", "ễ"), - (0x1EC5, "V"), - (0x1EC6, "M", "ệ"), - (0x1EC7, "V"), - (0x1EC8, "M", "ỉ"), - (0x1EC9, "V"), - (0x1ECA, "M", "ị"), - (0x1ECB, "V"), - (0x1ECC, "M", "ọ"), - (0x1ECD, "V"), - (0x1ECE, "M", "ỏ"), - ] - - -def _seg_19() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1ECF, "V"), - (0x1ED0, "M", "ố"), - (0x1ED1, "V"), - (0x1ED2, "M", "ồ"), - (0x1ED3, "V"), - (0x1ED4, "M", "ổ"), - (0x1ED5, "V"), - (0x1ED6, "M", "ỗ"), - (0x1ED7, "V"), - (0x1ED8, "M", "ộ"), - (0x1ED9, "V"), - (0x1EDA, "M", "ớ"), - (0x1EDB, "V"), - (0x1EDC, "M", "ờ"), - (0x1EDD, "V"), - (0x1EDE, "M", "ở"), - (0x1EDF, "V"), - (0x1EE0, "M", "ỡ"), - (0x1EE1, "V"), - (0x1EE2, "M", "ợ"), - (0x1EE3, "V"), - (0x1EE4, "M", "ụ"), - (0x1EE5, "V"), - (0x1EE6, "M", "ủ"), - (0x1EE7, "V"), - (0x1EE8, "M", "ứ"), - (0x1EE9, "V"), - (0x1EEA, "M", "ừ"), - (0x1EEB, "V"), - (0x1EEC, "M", "ử"), - (0x1EED, "V"), - (0x1EEE, "M", "ữ"), - (0x1EEF, "V"), - (0x1EF0, "M", "ự"), - (0x1EF1, "V"), - (0x1EF2, "M", "ỳ"), - (0x1EF3, "V"), - (0x1EF4, "M", "ỵ"), - (0x1EF5, "V"), - (0x1EF6, "M", "ỷ"), - (0x1EF7, "V"), - (0x1EF8, "M", "ỹ"), - (0x1EF9, "V"), - (0x1EFA, "M", "ỻ"), - (0x1EFB, "V"), - (0x1EFC, "M", "ỽ"), - (0x1EFD, "V"), - (0x1EFE, "M", "ỿ"), - (0x1EFF, "V"), - (0x1F08, "M", "ἀ"), - (0x1F09, "M", "ἁ"), - (0x1F0A, "M", "ἂ"), - (0x1F0B, "M", "ἃ"), - (0x1F0C, "M", "ἄ"), - (0x1F0D, "M", "ἅ"), - (0x1F0E, "M", "ἆ"), - (0x1F0F, "M", "ἇ"), - (0x1F10, "V"), - (0x1F16, "X"), - (0x1F18, "M", "ἐ"), - (0x1F19, "M", "ἑ"), - (0x1F1A, "M", "ἒ"), - (0x1F1B, "M", "ἓ"), - (0x1F1C, "M", "ἔ"), - (0x1F1D, "M", "ἕ"), - (0x1F1E, "X"), - (0x1F20, "V"), - (0x1F28, "M", "ἠ"), - (0x1F29, "M", "ἡ"), - (0x1F2A, "M", "ἢ"), - (0x1F2B, "M", "ἣ"), - (0x1F2C, "M", "ἤ"), - (0x1F2D, "M", "ἥ"), - (0x1F2E, "M", "ἦ"), - (0x1F2F, "M", "ἧ"), - (0x1F30, "V"), - (0x1F38, "M", "ἰ"), - (0x1F39, "M", "ἱ"), - (0x1F3A, "M", "ἲ"), - (0x1F3B, "M", "ἳ"), - (0x1F3C, "M", "ἴ"), - (0x1F3D, "M", "ἵ"), - (0x1F3E, "M", "ἶ"), - (0x1F3F, "M", "ἷ"), - (0x1F40, "V"), - (0x1F46, "X"), - (0x1F48, "M", "ὀ"), - (0x1F49, "M", "ὁ"), - (0x1F4A, "M", "ὂ"), - (0x1F4B, "M", "ὃ"), - (0x1F4C, "M", "ὄ"), - (0x1F4D, "M", "ὅ"), - (0x1F4E, "X"), - (0x1F50, "V"), - (0x1F58, "X"), - (0x1F59, "M", "ὑ"), - (0x1F5A, "X"), - (0x1F5B, "M", "ὓ"), - (0x1F5C, "X"), - (0x1F5D, "M", "ὕ"), - ] - - -def _seg_20() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F5E, "X"), - (0x1F5F, "M", "ὗ"), - (0x1F60, "V"), - (0x1F68, "M", "ὠ"), - (0x1F69, "M", "ὡ"), - (0x1F6A, "M", "ὢ"), - (0x1F6B, "M", "ὣ"), - (0x1F6C, "M", "ὤ"), - (0x1F6D, "M", "ὥ"), - (0x1F6E, "M", "ὦ"), - (0x1F6F, "M", "ὧ"), - (0x1F70, "V"), - (0x1F71, "M", "ά"), - (0x1F72, "V"), - (0x1F73, "M", "έ"), - (0x1F74, "V"), - (0x1F75, "M", "ή"), - (0x1F76, "V"), - (0x1F77, "M", "ί"), - (0x1F78, "V"), - (0x1F79, "M", "ό"), - (0x1F7A, "V"), - (0x1F7B, "M", "ύ"), - (0x1F7C, "V"), - (0x1F7D, "M", "ώ"), - (0x1F7E, "X"), - (0x1F80, "M", "ἀι"), - (0x1F81, "M", "ἁι"), - (0x1F82, "M", "ἂι"), - (0x1F83, "M", "ἃι"), - (0x1F84, "M", "ἄι"), - (0x1F85, "M", "ἅι"), - (0x1F86, "M", "ἆι"), - (0x1F87, "M", "ἇι"), - (0x1F88, "M", "ἀι"), - (0x1F89, "M", "ἁι"), - (0x1F8A, "M", "ἂι"), - (0x1F8B, "M", "ἃι"), - (0x1F8C, "M", "ἄι"), - (0x1F8D, "M", "ἅι"), - (0x1F8E, "M", "ἆι"), - (0x1F8F, "M", "ἇι"), - (0x1F90, "M", "ἠι"), - (0x1F91, "M", "ἡι"), - (0x1F92, "M", "ἢι"), - (0x1F93, "M", "ἣι"), - (0x1F94, "M", "ἤι"), - (0x1F95, "M", "ἥι"), - (0x1F96, "M", "ἦι"), - (0x1F97, "M", "ἧι"), - (0x1F98, "M", "ἠι"), - (0x1F99, "M", "ἡι"), - (0x1F9A, "M", "ἢι"), - (0x1F9B, "M", "ἣι"), - (0x1F9C, "M", "ἤι"), - (0x1F9D, "M", "ἥι"), - (0x1F9E, "M", "ἦι"), - (0x1F9F, "M", "ἧι"), - (0x1FA0, "M", "ὠι"), - (0x1FA1, "M", "ὡι"), - (0x1FA2, "M", "ὢι"), - (0x1FA3, "M", "ὣι"), - (0x1FA4, "M", "ὤι"), - (0x1FA5, "M", "ὥι"), - (0x1FA6, "M", "ὦι"), - (0x1FA7, "M", "ὧι"), - (0x1FA8, "M", "ὠι"), - (0x1FA9, "M", "ὡι"), - (0x1FAA, "M", "ὢι"), - (0x1FAB, "M", "ὣι"), - (0x1FAC, "M", "ὤι"), - (0x1FAD, "M", "ὥι"), - (0x1FAE, "M", "ὦι"), - (0x1FAF, "M", "ὧι"), - (0x1FB0, "V"), - (0x1FB2, "M", "ὰι"), - (0x1FB3, "M", "αι"), - (0x1FB4, "M", "άι"), - (0x1FB5, "X"), - (0x1FB6, "V"), - (0x1FB7, "M", "ᾶι"), - (0x1FB8, "M", "ᾰ"), - (0x1FB9, "M", "ᾱ"), - (0x1FBA, "M", "ὰ"), - (0x1FBB, "M", "ά"), - (0x1FBC, "M", "αι"), - (0x1FBD, "M", " ̓"), - (0x1FBE, "M", "ι"), - (0x1FBF, "M", " ̓"), - (0x1FC0, "M", " ͂"), - (0x1FC1, "M", " ̈͂"), - (0x1FC2, "M", "ὴι"), - (0x1FC3, "M", "ηι"), - (0x1FC4, "M", "ήι"), - (0x1FC5, "X"), - (0x1FC6, "V"), - (0x1FC7, "M", "ῆι"), - (0x1FC8, "M", "ὲ"), - (0x1FC9, "M", "έ"), - (0x1FCA, "M", "ὴ"), - ] - - -def _seg_21() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1FCB, "M", "ή"), - (0x1FCC, "M", "ηι"), - (0x1FCD, "M", " ̓̀"), - (0x1FCE, "M", " ̓́"), - (0x1FCF, "M", " ̓͂"), - (0x1FD0, "V"), - (0x1FD3, "M", "ΐ"), - (0x1FD4, "X"), - (0x1FD6, "V"), - (0x1FD8, "M", "ῐ"), - (0x1FD9, "M", "ῑ"), - (0x1FDA, "M", "ὶ"), - (0x1FDB, "M", "ί"), - (0x1FDC, "X"), - (0x1FDD, "M", " ̔̀"), - (0x1FDE, "M", " ̔́"), - (0x1FDF, "M", " ̔͂"), - (0x1FE0, "V"), - (0x1FE3, "M", "ΰ"), - (0x1FE4, "V"), - (0x1FE8, "M", "ῠ"), - (0x1FE9, "M", "ῡ"), - (0x1FEA, "M", "ὺ"), - (0x1FEB, "M", "ύ"), - (0x1FEC, "M", "ῥ"), - (0x1FED, "M", " ̈̀"), - (0x1FEE, "M", " ̈́"), - (0x1FEF, "M", "`"), - (0x1FF0, "X"), - (0x1FF2, "M", "ὼι"), - (0x1FF3, "M", "ωι"), - (0x1FF4, "M", "ώι"), - (0x1FF5, "X"), - (0x1FF6, "V"), - (0x1FF7, "M", "ῶι"), - (0x1FF8, "M", "ὸ"), - (0x1FF9, "M", "ό"), - (0x1FFA, "M", "ὼ"), - (0x1FFB, "M", "ώ"), - (0x1FFC, "M", "ωι"), - (0x1FFD, "M", " ́"), - (0x1FFE, "M", " ̔"), - (0x1FFF, "X"), - (0x2000, "M", " "), - (0x200B, "I"), - (0x200C, "D", ""), - (0x200E, "X"), - (0x2010, "V"), - (0x2011, "M", "‐"), - (0x2012, "V"), - (0x2017, "M", " ̳"), - (0x2018, "V"), - (0x2024, "X"), - (0x2027, "V"), - (0x2028, "X"), - (0x202F, "M", " "), - (0x2030, "V"), - (0x2033, "M", "′′"), - (0x2034, "M", "′′′"), - (0x2035, "V"), - (0x2036, "M", "‵‵"), - (0x2037, "M", "‵‵‵"), - (0x2038, "V"), - (0x203C, "M", "!!"), - (0x203D, "V"), - (0x203E, "M", " ̅"), - (0x203F, "V"), - (0x2047, "M", "??"), - (0x2048, "M", "?!"), - (0x2049, "M", "!?"), - (0x204A, "V"), - (0x2057, "M", "′′′′"), - (0x2058, "V"), - (0x205F, "M", " "), - (0x2060, "I"), - (0x2065, "X"), - (0x206A, "I"), - (0x2070, "M", "0"), - (0x2071, "M", "i"), - (0x2072, "X"), - (0x2074, "M", "4"), - (0x2075, "M", "5"), - (0x2076, "M", "6"), - (0x2077, "M", "7"), - (0x2078, "M", "8"), - (0x2079, "M", "9"), - (0x207A, "M", "+"), - (0x207B, "M", "−"), - (0x207C, "M", "="), - (0x207D, "M", "("), - (0x207E, "M", ")"), - (0x207F, "M", "n"), - (0x2080, "M", "0"), - (0x2081, "M", "1"), - (0x2082, "M", "2"), - (0x2083, "M", "3"), - (0x2084, "M", "4"), - (0x2085, "M", "5"), - (0x2086, "M", "6"), - (0x2087, "M", "7"), - ] - - -def _seg_22() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2088, "M", "8"), - (0x2089, "M", "9"), - (0x208A, "M", "+"), - (0x208B, "M", "−"), - (0x208C, "M", "="), - (0x208D, "M", "("), - (0x208E, "M", ")"), - (0x208F, "X"), - (0x2090, "M", "a"), - (0x2091, "M", "e"), - (0x2092, "M", "o"), - (0x2093, "M", "x"), - (0x2094, "M", "ə"), - (0x2095, "M", "h"), - (0x2096, "M", "k"), - (0x2097, "M", "l"), - (0x2098, "M", "m"), - (0x2099, "M", "n"), - (0x209A, "M", "p"), - (0x209B, "M", "s"), - (0x209C, "M", "t"), - (0x209D, "X"), - (0x20A0, "V"), - (0x20A8, "M", "rs"), - (0x20A9, "V"), - (0x20C1, "X"), - (0x20D0, "V"), - (0x20F1, "X"), - (0x2100, "M", "a/c"), - (0x2101, "M", "a/s"), - (0x2102, "M", "c"), - (0x2103, "M", "°c"), - (0x2104, "V"), - (0x2105, "M", "c/o"), - (0x2106, "M", "c/u"), - (0x2107, "M", "ɛ"), - (0x2108, "V"), - (0x2109, "M", "°f"), - (0x210A, "M", "g"), - (0x210B, "M", "h"), - (0x210F, "M", "ħ"), - (0x2110, "M", "i"), - (0x2112, "M", "l"), - (0x2114, "V"), - (0x2115, "M", "n"), - (0x2116, "M", "no"), - (0x2117, "V"), - (0x2119, "M", "p"), - (0x211A, "M", "q"), - (0x211B, "M", "r"), - (0x211E, "V"), - (0x2120, "M", "sm"), - (0x2121, "M", "tel"), - (0x2122, "M", "tm"), - (0x2123, "V"), - (0x2124, "M", "z"), - (0x2125, "V"), - (0x2126, "M", "ω"), - (0x2127, "V"), - (0x2128, "M", "z"), - (0x2129, "V"), - (0x212A, "M", "k"), - (0x212B, "M", "å"), - (0x212C, "M", "b"), - (0x212D, "M", "c"), - (0x212E, "V"), - (0x212F, "M", "e"), - (0x2131, "M", "f"), - (0x2132, "M", "ⅎ"), - (0x2133, "M", "m"), - (0x2134, "M", "o"), - (0x2135, "M", "א"), - (0x2136, "M", "ב"), - (0x2137, "M", "ג"), - (0x2138, "M", "ד"), - (0x2139, "M", "i"), - (0x213A, "V"), - (0x213B, "M", "fax"), - (0x213C, "M", "π"), - (0x213D, "M", "γ"), - (0x213F, "M", "π"), - (0x2140, "M", "∑"), - (0x2141, "V"), - (0x2145, "M", "d"), - (0x2147, "M", "e"), - (0x2148, "M", "i"), - (0x2149, "M", "j"), - (0x214A, "V"), - (0x2150, "M", "1⁄7"), - (0x2151, "M", "1⁄9"), - (0x2152, "M", "1⁄10"), - (0x2153, "M", "1⁄3"), - (0x2154, "M", "2⁄3"), - (0x2155, "M", "1⁄5"), - (0x2156, "M", "2⁄5"), - (0x2157, "M", "3⁄5"), - (0x2158, "M", "4⁄5"), - (0x2159, "M", "1⁄6"), - (0x215A, "M", "5⁄6"), - (0x215B, "M", "1⁄8"), - ] - - -def _seg_23() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x215C, "M", "3⁄8"), - (0x215D, "M", "5⁄8"), - (0x215E, "M", "7⁄8"), - (0x215F, "M", "1⁄"), - (0x2160, "M", "i"), - (0x2161, "M", "ii"), - (0x2162, "M", "iii"), - (0x2163, "M", "iv"), - (0x2164, "M", "v"), - (0x2165, "M", "vi"), - (0x2166, "M", "vii"), - (0x2167, "M", "viii"), - (0x2168, "M", "ix"), - (0x2169, "M", "x"), - (0x216A, "M", "xi"), - (0x216B, "M", "xii"), - (0x216C, "M", "l"), - (0x216D, "M", "c"), - (0x216E, "M", "d"), - (0x216F, "M", "m"), - (0x2170, "M", "i"), - (0x2171, "M", "ii"), - (0x2172, "M", "iii"), - (0x2173, "M", "iv"), - (0x2174, "M", "v"), - (0x2175, "M", "vi"), - (0x2176, "M", "vii"), - (0x2177, "M", "viii"), - (0x2178, "M", "ix"), - (0x2179, "M", "x"), - (0x217A, "M", "xi"), - (0x217B, "M", "xii"), - (0x217C, "M", "l"), - (0x217D, "M", "c"), - (0x217E, "M", "d"), - (0x217F, "M", "m"), - (0x2180, "V"), - (0x2183, "M", "ↄ"), - (0x2184, "V"), - (0x2189, "M", "0⁄3"), - (0x218A, "V"), - (0x218C, "X"), - (0x2190, "V"), - (0x222C, "M", "∫∫"), - (0x222D, "M", "∫∫∫"), - (0x222E, "V"), - (0x222F, "M", "∮∮"), - (0x2230, "M", "∮∮∮"), - (0x2231, "V"), - (0x2329, "M", "〈"), - (0x232A, "M", "〉"), - (0x232B, "V"), - (0x242A, "X"), - (0x2440, "V"), - (0x244B, "X"), - (0x2460, "M", "1"), - (0x2461, "M", "2"), - (0x2462, "M", "3"), - (0x2463, "M", "4"), - (0x2464, "M", "5"), - (0x2465, "M", "6"), - (0x2466, "M", "7"), - (0x2467, "M", "8"), - (0x2468, "M", "9"), - (0x2469, "M", "10"), - (0x246A, "M", "11"), - (0x246B, "M", "12"), - (0x246C, "M", "13"), - (0x246D, "M", "14"), - (0x246E, "M", "15"), - (0x246F, "M", "16"), - (0x2470, "M", "17"), - (0x2471, "M", "18"), - (0x2472, "M", "19"), - (0x2473, "M", "20"), - (0x2474, "M", "(1)"), - (0x2475, "M", "(2)"), - (0x2476, "M", "(3)"), - (0x2477, "M", "(4)"), - (0x2478, "M", "(5)"), - (0x2479, "M", "(6)"), - (0x247A, "M", "(7)"), - (0x247B, "M", "(8)"), - (0x247C, "M", "(9)"), - (0x247D, "M", "(10)"), - (0x247E, "M", "(11)"), - (0x247F, "M", "(12)"), - (0x2480, "M", "(13)"), - (0x2481, "M", "(14)"), - (0x2482, "M", "(15)"), - (0x2483, "M", "(16)"), - (0x2484, "M", "(17)"), - (0x2485, "M", "(18)"), - (0x2486, "M", "(19)"), - (0x2487, "M", "(20)"), - (0x2488, "X"), - (0x249C, "M", "(a)"), - (0x249D, "M", "(b)"), - (0x249E, "M", "(c)"), - (0x249F, "M", "(d)"), - ] - - -def _seg_24() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x24A0, "M", "(e)"), - (0x24A1, "M", "(f)"), - (0x24A2, "M", "(g)"), - (0x24A3, "M", "(h)"), - (0x24A4, "M", "(i)"), - (0x24A5, "M", "(j)"), - (0x24A6, "M", "(k)"), - (0x24A7, "M", "(l)"), - (0x24A8, "M", "(m)"), - (0x24A9, "M", "(n)"), - (0x24AA, "M", "(o)"), - (0x24AB, "M", "(p)"), - (0x24AC, "M", "(q)"), - (0x24AD, "M", "(r)"), - (0x24AE, "M", "(s)"), - (0x24AF, "M", "(t)"), - (0x24B0, "M", "(u)"), - (0x24B1, "M", "(v)"), - (0x24B2, "M", "(w)"), - (0x24B3, "M", "(x)"), - (0x24B4, "M", "(y)"), - (0x24B5, "M", "(z)"), - (0x24B6, "M", "a"), - (0x24B7, "M", "b"), - (0x24B8, "M", "c"), - (0x24B9, "M", "d"), - (0x24BA, "M", "e"), - (0x24BB, "M", "f"), - (0x24BC, "M", "g"), - (0x24BD, "M", "h"), - (0x24BE, "M", "i"), - (0x24BF, "M", "j"), - (0x24C0, "M", "k"), - (0x24C1, "M", "l"), - (0x24C2, "M", "m"), - (0x24C3, "M", "n"), - (0x24C4, "M", "o"), - (0x24C5, "M", "p"), - (0x24C6, "M", "q"), - (0x24C7, "M", "r"), - (0x24C8, "M", "s"), - (0x24C9, "M", "t"), - (0x24CA, "M", "u"), - (0x24CB, "M", "v"), - (0x24CC, "M", "w"), - (0x24CD, "M", "x"), - (0x24CE, "M", "y"), - (0x24CF, "M", "z"), - (0x24D0, "M", "a"), - (0x24D1, "M", "b"), - (0x24D2, "M", "c"), - (0x24D3, "M", "d"), - (0x24D4, "M", "e"), - (0x24D5, "M", "f"), - (0x24D6, "M", "g"), - (0x24D7, "M", "h"), - (0x24D8, "M", "i"), - (0x24D9, "M", "j"), - (0x24DA, "M", "k"), - (0x24DB, "M", "l"), - (0x24DC, "M", "m"), - (0x24DD, "M", "n"), - (0x24DE, "M", "o"), - (0x24DF, "M", "p"), - (0x24E0, "M", "q"), - (0x24E1, "M", "r"), - (0x24E2, "M", "s"), - (0x24E3, "M", "t"), - (0x24E4, "M", "u"), - (0x24E5, "M", "v"), - (0x24E6, "M", "w"), - (0x24E7, "M", "x"), - (0x24E8, "M", "y"), - (0x24E9, "M", "z"), - (0x24EA, "M", "0"), - (0x24EB, "V"), - (0x2A0C, "M", "∫∫∫∫"), - (0x2A0D, "V"), - (0x2A74, "M", "::="), - (0x2A75, "M", "=="), - (0x2A76, "M", "==="), - (0x2A77, "V"), - (0x2ADC, "M", "⫝̸"), - (0x2ADD, "V"), - (0x2B74, "X"), - (0x2B76, "V"), - (0x2B96, "X"), - (0x2B97, "V"), - (0x2C00, "M", "ⰰ"), - (0x2C01, "M", "ⰱ"), - (0x2C02, "M", "ⰲ"), - (0x2C03, "M", "ⰳ"), - (0x2C04, "M", "ⰴ"), - (0x2C05, "M", "ⰵ"), - (0x2C06, "M", "ⰶ"), - (0x2C07, "M", "ⰷ"), - (0x2C08, "M", "ⰸ"), - (0x2C09, "M", "ⰹ"), - (0x2C0A, "M", "ⰺ"), - (0x2C0B, "M", "ⰻ"), - ] - - -def _seg_25() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2C0C, "M", "ⰼ"), - (0x2C0D, "M", "ⰽ"), - (0x2C0E, "M", "ⰾ"), - (0x2C0F, "M", "ⰿ"), - (0x2C10, "M", "ⱀ"), - (0x2C11, "M", "ⱁ"), - (0x2C12, "M", "ⱂ"), - (0x2C13, "M", "ⱃ"), - (0x2C14, "M", "ⱄ"), - (0x2C15, "M", "ⱅ"), - (0x2C16, "M", "ⱆ"), - (0x2C17, "M", "ⱇ"), - (0x2C18, "M", "ⱈ"), - (0x2C19, "M", "ⱉ"), - (0x2C1A, "M", "ⱊ"), - (0x2C1B, "M", "ⱋ"), - (0x2C1C, "M", "ⱌ"), - (0x2C1D, "M", "ⱍ"), - (0x2C1E, "M", "ⱎ"), - (0x2C1F, "M", "ⱏ"), - (0x2C20, "M", "ⱐ"), - (0x2C21, "M", "ⱑ"), - (0x2C22, "M", "ⱒ"), - (0x2C23, "M", "ⱓ"), - (0x2C24, "M", "ⱔ"), - (0x2C25, "M", "ⱕ"), - (0x2C26, "M", "ⱖ"), - (0x2C27, "M", "ⱗ"), - (0x2C28, "M", "ⱘ"), - (0x2C29, "M", "ⱙ"), - (0x2C2A, "M", "ⱚ"), - (0x2C2B, "M", "ⱛ"), - (0x2C2C, "M", "ⱜ"), - (0x2C2D, "M", "ⱝ"), - (0x2C2E, "M", "ⱞ"), - (0x2C2F, "M", "ⱟ"), - (0x2C30, "V"), - (0x2C60, "M", "ⱡ"), - (0x2C61, "V"), - (0x2C62, "M", "ɫ"), - (0x2C63, "M", "ᵽ"), - (0x2C64, "M", "ɽ"), - (0x2C65, "V"), - (0x2C67, "M", "ⱨ"), - (0x2C68, "V"), - (0x2C69, "M", "ⱪ"), - (0x2C6A, "V"), - (0x2C6B, "M", "ⱬ"), - (0x2C6C, "V"), - (0x2C6D, "M", "ɑ"), - (0x2C6E, "M", "ɱ"), - (0x2C6F, "M", "ɐ"), - (0x2C70, "M", "ɒ"), - (0x2C71, "V"), - (0x2C72, "M", "ⱳ"), - (0x2C73, "V"), - (0x2C75, "M", "ⱶ"), - (0x2C76, "V"), - (0x2C7C, "M", "j"), - (0x2C7D, "M", "v"), - (0x2C7E, "M", "ȿ"), - (0x2C7F, "M", "ɀ"), - (0x2C80, "M", "ⲁ"), - (0x2C81, "V"), - (0x2C82, "M", "ⲃ"), - (0x2C83, "V"), - (0x2C84, "M", "ⲅ"), - (0x2C85, "V"), - (0x2C86, "M", "ⲇ"), - (0x2C87, "V"), - (0x2C88, "M", "ⲉ"), - (0x2C89, "V"), - (0x2C8A, "M", "ⲋ"), - (0x2C8B, "V"), - (0x2C8C, "M", "ⲍ"), - (0x2C8D, "V"), - (0x2C8E, "M", "ⲏ"), - (0x2C8F, "V"), - (0x2C90, "M", "ⲑ"), - (0x2C91, "V"), - (0x2C92, "M", "ⲓ"), - (0x2C93, "V"), - (0x2C94, "M", "ⲕ"), - (0x2C95, "V"), - (0x2C96, "M", "ⲗ"), - (0x2C97, "V"), - (0x2C98, "M", "ⲙ"), - (0x2C99, "V"), - (0x2C9A, "M", "ⲛ"), - (0x2C9B, "V"), - (0x2C9C, "M", "ⲝ"), - (0x2C9D, "V"), - (0x2C9E, "M", "ⲟ"), - (0x2C9F, "V"), - (0x2CA0, "M", "ⲡ"), - (0x2CA1, "V"), - (0x2CA2, "M", "ⲣ"), - (0x2CA3, "V"), - (0x2CA4, "M", "ⲥ"), - (0x2CA5, "V"), - ] - - -def _seg_26() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2CA6, "M", "ⲧ"), - (0x2CA7, "V"), - (0x2CA8, "M", "ⲩ"), - (0x2CA9, "V"), - (0x2CAA, "M", "ⲫ"), - (0x2CAB, "V"), - (0x2CAC, "M", "ⲭ"), - (0x2CAD, "V"), - (0x2CAE, "M", "ⲯ"), - (0x2CAF, "V"), - (0x2CB0, "M", "ⲱ"), - (0x2CB1, "V"), - (0x2CB2, "M", "ⲳ"), - (0x2CB3, "V"), - (0x2CB4, "M", "ⲵ"), - (0x2CB5, "V"), - (0x2CB6, "M", "ⲷ"), - (0x2CB7, "V"), - (0x2CB8, "M", "ⲹ"), - (0x2CB9, "V"), - (0x2CBA, "M", "ⲻ"), - (0x2CBB, "V"), - (0x2CBC, "M", "ⲽ"), - (0x2CBD, "V"), - (0x2CBE, "M", "ⲿ"), - (0x2CBF, "V"), - (0x2CC0, "M", "ⳁ"), - (0x2CC1, "V"), - (0x2CC2, "M", "ⳃ"), - (0x2CC3, "V"), - (0x2CC4, "M", "ⳅ"), - (0x2CC5, "V"), - (0x2CC6, "M", "ⳇ"), - (0x2CC7, "V"), - (0x2CC8, "M", "ⳉ"), - (0x2CC9, "V"), - (0x2CCA, "M", "ⳋ"), - (0x2CCB, "V"), - (0x2CCC, "M", "ⳍ"), - (0x2CCD, "V"), - (0x2CCE, "M", "ⳏ"), - (0x2CCF, "V"), - (0x2CD0, "M", "ⳑ"), - (0x2CD1, "V"), - (0x2CD2, "M", "ⳓ"), - (0x2CD3, "V"), - (0x2CD4, "M", "ⳕ"), - (0x2CD5, "V"), - (0x2CD6, "M", "ⳗ"), - (0x2CD7, "V"), - (0x2CD8, "M", "ⳙ"), - (0x2CD9, "V"), - (0x2CDA, "M", "ⳛ"), - (0x2CDB, "V"), - (0x2CDC, "M", "ⳝ"), - (0x2CDD, "V"), - (0x2CDE, "M", "ⳟ"), - (0x2CDF, "V"), - (0x2CE0, "M", "ⳡ"), - (0x2CE1, "V"), - (0x2CE2, "M", "ⳣ"), - (0x2CE3, "V"), - (0x2CEB, "M", "ⳬ"), - (0x2CEC, "V"), - (0x2CED, "M", "ⳮ"), - (0x2CEE, "V"), - (0x2CF2, "M", "ⳳ"), - (0x2CF3, "V"), - (0x2CF4, "X"), - (0x2CF9, "V"), - (0x2D26, "X"), - (0x2D27, "V"), - (0x2D28, "X"), - (0x2D2D, "V"), - (0x2D2E, "X"), - (0x2D30, "V"), - (0x2D68, "X"), - (0x2D6F, "M", "ⵡ"), - (0x2D70, "V"), - (0x2D71, "X"), - (0x2D7F, "V"), - (0x2D97, "X"), - (0x2DA0, "V"), - (0x2DA7, "X"), - (0x2DA8, "V"), - (0x2DAF, "X"), - (0x2DB0, "V"), - (0x2DB7, "X"), - (0x2DB8, "V"), - (0x2DBF, "X"), - (0x2DC0, "V"), - (0x2DC7, "X"), - (0x2DC8, "V"), - (0x2DCF, "X"), - (0x2DD0, "V"), - (0x2DD7, "X"), - (0x2DD8, "V"), - (0x2DDF, "X"), - (0x2DE0, "V"), - (0x2E5E, "X"), - ] - - -def _seg_27() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2E80, "V"), - (0x2E9A, "X"), - (0x2E9B, "V"), - (0x2E9F, "M", "母"), - (0x2EA0, "V"), - (0x2EF3, "M", "龟"), - (0x2EF4, "X"), - (0x2F00, "M", "一"), - (0x2F01, "M", "丨"), - (0x2F02, "M", "丶"), - (0x2F03, "M", "丿"), - (0x2F04, "M", "乙"), - (0x2F05, "M", "亅"), - (0x2F06, "M", "二"), - (0x2F07, "M", "亠"), - (0x2F08, "M", "人"), - (0x2F09, "M", "儿"), - (0x2F0A, "M", "入"), - (0x2F0B, "M", "八"), - (0x2F0C, "M", "冂"), - (0x2F0D, "M", "冖"), - (0x2F0E, "M", "冫"), - (0x2F0F, "M", "几"), - (0x2F10, "M", "凵"), - (0x2F11, "M", "刀"), - (0x2F12, "M", "力"), - (0x2F13, "M", "勹"), - (0x2F14, "M", "匕"), - (0x2F15, "M", "匚"), - (0x2F16, "M", "匸"), - (0x2F17, "M", "十"), - (0x2F18, "M", "卜"), - (0x2F19, "M", "卩"), - (0x2F1A, "M", "厂"), - (0x2F1B, "M", "厶"), - (0x2F1C, "M", "又"), - (0x2F1D, "M", "口"), - (0x2F1E, "M", "囗"), - (0x2F1F, "M", "土"), - (0x2F20, "M", "士"), - (0x2F21, "M", "夂"), - (0x2F22, "M", "夊"), - (0x2F23, "M", "夕"), - (0x2F24, "M", "大"), - (0x2F25, "M", "女"), - (0x2F26, "M", "子"), - (0x2F27, "M", "宀"), - (0x2F28, "M", "寸"), - (0x2F29, "M", "小"), - (0x2F2A, "M", "尢"), - (0x2F2B, "M", "尸"), - (0x2F2C, "M", "屮"), - (0x2F2D, "M", "山"), - (0x2F2E, "M", "巛"), - (0x2F2F, "M", "工"), - (0x2F30, "M", "己"), - (0x2F31, "M", "巾"), - (0x2F32, "M", "干"), - (0x2F33, "M", "幺"), - (0x2F34, "M", "广"), - (0x2F35, "M", "廴"), - (0x2F36, "M", "廾"), - (0x2F37, "M", "弋"), - (0x2F38, "M", "弓"), - (0x2F39, "M", "彐"), - (0x2F3A, "M", "彡"), - (0x2F3B, "M", "彳"), - (0x2F3C, "M", "心"), - (0x2F3D, "M", "戈"), - (0x2F3E, "M", "戶"), - (0x2F3F, "M", "手"), - (0x2F40, "M", "支"), - (0x2F41, "M", "攴"), - (0x2F42, "M", "文"), - (0x2F43, "M", "斗"), - (0x2F44, "M", "斤"), - (0x2F45, "M", "方"), - (0x2F46, "M", "无"), - (0x2F47, "M", "日"), - (0x2F48, "M", "曰"), - (0x2F49, "M", "月"), - (0x2F4A, "M", "木"), - (0x2F4B, "M", "欠"), - (0x2F4C, "M", "止"), - (0x2F4D, "M", "歹"), - (0x2F4E, "M", "殳"), - (0x2F4F, "M", "毋"), - (0x2F50, "M", "比"), - (0x2F51, "M", "毛"), - (0x2F52, "M", "氏"), - (0x2F53, "M", "气"), - (0x2F54, "M", "水"), - (0x2F55, "M", "火"), - (0x2F56, "M", "爪"), - (0x2F57, "M", "父"), - (0x2F58, "M", "爻"), - (0x2F59, "M", "爿"), - (0x2F5A, "M", "片"), - (0x2F5B, "M", "牙"), - (0x2F5C, "M", "牛"), - ] - - -def _seg_28() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F5D, "M", "犬"), - (0x2F5E, "M", "玄"), - (0x2F5F, "M", "玉"), - (0x2F60, "M", "瓜"), - (0x2F61, "M", "瓦"), - (0x2F62, "M", "甘"), - (0x2F63, "M", "生"), - (0x2F64, "M", "用"), - (0x2F65, "M", "田"), - (0x2F66, "M", "疋"), - (0x2F67, "M", "疒"), - (0x2F68, "M", "癶"), - (0x2F69, "M", "白"), - (0x2F6A, "M", "皮"), - (0x2F6B, "M", "皿"), - (0x2F6C, "M", "目"), - (0x2F6D, "M", "矛"), - (0x2F6E, "M", "矢"), - (0x2F6F, "M", "石"), - (0x2F70, "M", "示"), - (0x2F71, "M", "禸"), - (0x2F72, "M", "禾"), - (0x2F73, "M", "穴"), - (0x2F74, "M", "立"), - (0x2F75, "M", "竹"), - (0x2F76, "M", "米"), - (0x2F77, "M", "糸"), - (0x2F78, "M", "缶"), - (0x2F79, "M", "网"), - (0x2F7A, "M", "羊"), - (0x2F7B, "M", "羽"), - (0x2F7C, "M", "老"), - (0x2F7D, "M", "而"), - (0x2F7E, "M", "耒"), - (0x2F7F, "M", "耳"), - (0x2F80, "M", "聿"), - (0x2F81, "M", "肉"), - (0x2F82, "M", "臣"), - (0x2F83, "M", "自"), - (0x2F84, "M", "至"), - (0x2F85, "M", "臼"), - (0x2F86, "M", "舌"), - (0x2F87, "M", "舛"), - (0x2F88, "M", "舟"), - (0x2F89, "M", "艮"), - (0x2F8A, "M", "色"), - (0x2F8B, "M", "艸"), - (0x2F8C, "M", "虍"), - (0x2F8D, "M", "虫"), - (0x2F8E, "M", "血"), - (0x2F8F, "M", "行"), - (0x2F90, "M", "衣"), - (0x2F91, "M", "襾"), - (0x2F92, "M", "見"), - (0x2F93, "M", "角"), - (0x2F94, "M", "言"), - (0x2F95, "M", "谷"), - (0x2F96, "M", "豆"), - (0x2F97, "M", "豕"), - (0x2F98, "M", "豸"), - (0x2F99, "M", "貝"), - (0x2F9A, "M", "赤"), - (0x2F9B, "M", "走"), - (0x2F9C, "M", "足"), - (0x2F9D, "M", "身"), - (0x2F9E, "M", "車"), - (0x2F9F, "M", "辛"), - (0x2FA0, "M", "辰"), - (0x2FA1, "M", "辵"), - (0x2FA2, "M", "邑"), - (0x2FA3, "M", "酉"), - (0x2FA4, "M", "釆"), - (0x2FA5, "M", "里"), - (0x2FA6, "M", "金"), - (0x2FA7, "M", "長"), - (0x2FA8, "M", "門"), - (0x2FA9, "M", "阜"), - (0x2FAA, "M", "隶"), - (0x2FAB, "M", "隹"), - (0x2FAC, "M", "雨"), - (0x2FAD, "M", "靑"), - (0x2FAE, "M", "非"), - (0x2FAF, "M", "面"), - (0x2FB0, "M", "革"), - (0x2FB1, "M", "韋"), - (0x2FB2, "M", "韭"), - (0x2FB3, "M", "音"), - (0x2FB4, "M", "頁"), - (0x2FB5, "M", "風"), - (0x2FB6, "M", "飛"), - (0x2FB7, "M", "食"), - (0x2FB8, "M", "首"), - (0x2FB9, "M", "香"), - (0x2FBA, "M", "馬"), - (0x2FBB, "M", "骨"), - (0x2FBC, "M", "高"), - (0x2FBD, "M", "髟"), - (0x2FBE, "M", "鬥"), - (0x2FBF, "M", "鬯"), - (0x2FC0, "M", "鬲"), - ] - - -def _seg_29() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2FC1, "M", "鬼"), - (0x2FC2, "M", "魚"), - (0x2FC3, "M", "鳥"), - (0x2FC4, "M", "鹵"), - (0x2FC5, "M", "鹿"), - (0x2FC6, "M", "麥"), - (0x2FC7, "M", "麻"), - (0x2FC8, "M", "黃"), - (0x2FC9, "M", "黍"), - (0x2FCA, "M", "黑"), - (0x2FCB, "M", "黹"), - (0x2FCC, "M", "黽"), - (0x2FCD, "M", "鼎"), - (0x2FCE, "M", "鼓"), - (0x2FCF, "M", "鼠"), - (0x2FD0, "M", "鼻"), - (0x2FD1, "M", "齊"), - (0x2FD2, "M", "齒"), - (0x2FD3, "M", "龍"), - (0x2FD4, "M", "龜"), - (0x2FD5, "M", "龠"), - (0x2FD6, "X"), - (0x3000, "M", " "), - (0x3001, "V"), - (0x3002, "M", "."), - (0x3003, "V"), - (0x3036, "M", "〒"), - (0x3037, "V"), - (0x3038, "M", "十"), - (0x3039, "M", "卄"), - (0x303A, "M", "卅"), - (0x303B, "V"), - (0x3040, "X"), - (0x3041, "V"), - (0x3097, "X"), - (0x3099, "V"), - (0x309B, "M", " ゙"), - (0x309C, "M", " ゚"), - (0x309D, "V"), - (0x309F, "M", "より"), - (0x30A0, "V"), - (0x30FF, "M", "コト"), - (0x3100, "X"), - (0x3105, "V"), - (0x3130, "X"), - (0x3131, "M", "ᄀ"), - (0x3132, "M", "ᄁ"), - (0x3133, "M", "ᆪ"), - (0x3134, "M", "ᄂ"), - (0x3135, "M", "ᆬ"), - (0x3136, "M", "ᆭ"), - (0x3137, "M", "ᄃ"), - (0x3138, "M", "ᄄ"), - (0x3139, "M", "ᄅ"), - (0x313A, "M", "ᆰ"), - (0x313B, "M", "ᆱ"), - (0x313C, "M", "ᆲ"), - (0x313D, "M", "ᆳ"), - (0x313E, "M", "ᆴ"), - (0x313F, "M", "ᆵ"), - (0x3140, "M", "ᄚ"), - (0x3141, "M", "ᄆ"), - (0x3142, "M", "ᄇ"), - (0x3143, "M", "ᄈ"), - (0x3144, "M", "ᄡ"), - (0x3145, "M", "ᄉ"), - (0x3146, "M", "ᄊ"), - (0x3147, "M", "ᄋ"), - (0x3148, "M", "ᄌ"), - (0x3149, "M", "ᄍ"), - (0x314A, "M", "ᄎ"), - (0x314B, "M", "ᄏ"), - (0x314C, "M", "ᄐ"), - (0x314D, "M", "ᄑ"), - (0x314E, "M", "ᄒ"), - (0x314F, "M", "ᅡ"), - (0x3150, "M", "ᅢ"), - (0x3151, "M", "ᅣ"), - (0x3152, "M", "ᅤ"), - (0x3153, "M", "ᅥ"), - (0x3154, "M", "ᅦ"), - (0x3155, "M", "ᅧ"), - (0x3156, "M", "ᅨ"), - (0x3157, "M", "ᅩ"), - (0x3158, "M", "ᅪ"), - (0x3159, "M", "ᅫ"), - (0x315A, "M", "ᅬ"), - (0x315B, "M", "ᅭ"), - (0x315C, "M", "ᅮ"), - (0x315D, "M", "ᅯ"), - (0x315E, "M", "ᅰ"), - (0x315F, "M", "ᅱ"), - (0x3160, "M", "ᅲ"), - (0x3161, "M", "ᅳ"), - (0x3162, "M", "ᅴ"), - (0x3163, "M", "ᅵ"), - (0x3164, "I"), - (0x3165, "M", "ᄔ"), - (0x3166, "M", "ᄕ"), - (0x3167, "M", "ᇇ"), - ] - - -def _seg_30() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3168, "M", "ᇈ"), - (0x3169, "M", "ᇌ"), - (0x316A, "M", "ᇎ"), - (0x316B, "M", "ᇓ"), - (0x316C, "M", "ᇗ"), - (0x316D, "M", "ᇙ"), - (0x316E, "M", "ᄜ"), - (0x316F, "M", "ᇝ"), - (0x3170, "M", "ᇟ"), - (0x3171, "M", "ᄝ"), - (0x3172, "M", "ᄞ"), - (0x3173, "M", "ᄠ"), - (0x3174, "M", "ᄢ"), - (0x3175, "M", "ᄣ"), - (0x3176, "M", "ᄧ"), - (0x3177, "M", "ᄩ"), - (0x3178, "M", "ᄫ"), - (0x3179, "M", "ᄬ"), - (0x317A, "M", "ᄭ"), - (0x317B, "M", "ᄮ"), - (0x317C, "M", "ᄯ"), - (0x317D, "M", "ᄲ"), - (0x317E, "M", "ᄶ"), - (0x317F, "M", "ᅀ"), - (0x3180, "M", "ᅇ"), - (0x3181, "M", "ᅌ"), - (0x3182, "M", "ᇱ"), - (0x3183, "M", "ᇲ"), - (0x3184, "M", "ᅗ"), - (0x3185, "M", "ᅘ"), - (0x3186, "M", "ᅙ"), - (0x3187, "M", "ᆄ"), - (0x3188, "M", "ᆅ"), - (0x3189, "M", "ᆈ"), - (0x318A, "M", "ᆑ"), - (0x318B, "M", "ᆒ"), - (0x318C, "M", "ᆔ"), - (0x318D, "M", "ᆞ"), - (0x318E, "M", "ᆡ"), - (0x318F, "X"), - (0x3190, "V"), - (0x3192, "M", "一"), - (0x3193, "M", "二"), - (0x3194, "M", "三"), - (0x3195, "M", "四"), - (0x3196, "M", "上"), - (0x3197, "M", "中"), - (0x3198, "M", "下"), - (0x3199, "M", "甲"), - (0x319A, "M", "乙"), - (0x319B, "M", "丙"), - (0x319C, "M", "丁"), - (0x319D, "M", "天"), - (0x319E, "M", "地"), - (0x319F, "M", "人"), - (0x31A0, "V"), - (0x31E6, "X"), - (0x31F0, "V"), - (0x3200, "M", "(ᄀ)"), - (0x3201, "M", "(ᄂ)"), - (0x3202, "M", "(ᄃ)"), - (0x3203, "M", "(ᄅ)"), - (0x3204, "M", "(ᄆ)"), - (0x3205, "M", "(ᄇ)"), - (0x3206, "M", "(ᄉ)"), - (0x3207, "M", "(ᄋ)"), - (0x3208, "M", "(ᄌ)"), - (0x3209, "M", "(ᄎ)"), - (0x320A, "M", "(ᄏ)"), - (0x320B, "M", "(ᄐ)"), - (0x320C, "M", "(ᄑ)"), - (0x320D, "M", "(ᄒ)"), - (0x320E, "M", "(가)"), - (0x320F, "M", "(나)"), - (0x3210, "M", "(다)"), - (0x3211, "M", "(라)"), - (0x3212, "M", "(마)"), - (0x3213, "M", "(바)"), - (0x3214, "M", "(사)"), - (0x3215, "M", "(아)"), - (0x3216, "M", "(자)"), - (0x3217, "M", "(차)"), - (0x3218, "M", "(카)"), - (0x3219, "M", "(타)"), - (0x321A, "M", "(파)"), - (0x321B, "M", "(하)"), - (0x321C, "M", "(주)"), - (0x321D, "M", "(오전)"), - (0x321E, "M", "(오후)"), - (0x321F, "X"), - (0x3220, "M", "(一)"), - (0x3221, "M", "(二)"), - (0x3222, "M", "(三)"), - (0x3223, "M", "(四)"), - (0x3224, "M", "(五)"), - (0x3225, "M", "(六)"), - (0x3226, "M", "(七)"), - (0x3227, "M", "(八)"), - (0x3228, "M", "(九)"), - (0x3229, "M", "(十)"), - ] - - -def _seg_31() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x322A, "M", "(月)"), - (0x322B, "M", "(火)"), - (0x322C, "M", "(水)"), - (0x322D, "M", "(木)"), - (0x322E, "M", "(金)"), - (0x322F, "M", "(土)"), - (0x3230, "M", "(日)"), - (0x3231, "M", "(株)"), - (0x3232, "M", "(有)"), - (0x3233, "M", "(社)"), - (0x3234, "M", "(名)"), - (0x3235, "M", "(特)"), - (0x3236, "M", "(財)"), - (0x3237, "M", "(祝)"), - (0x3238, "M", "(労)"), - (0x3239, "M", "(代)"), - (0x323A, "M", "(呼)"), - (0x323B, "M", "(学)"), - (0x323C, "M", "(監)"), - (0x323D, "M", "(企)"), - (0x323E, "M", "(資)"), - (0x323F, "M", "(協)"), - (0x3240, "M", "(祭)"), - (0x3241, "M", "(休)"), - (0x3242, "M", "(自)"), - (0x3243, "M", "(至)"), - (0x3244, "M", "問"), - (0x3245, "M", "幼"), - (0x3246, "M", "文"), - (0x3247, "M", "箏"), - (0x3248, "V"), - (0x3250, "M", "pte"), - (0x3251, "M", "21"), - (0x3252, "M", "22"), - (0x3253, "M", "23"), - (0x3254, "M", "24"), - (0x3255, "M", "25"), - (0x3256, "M", "26"), - (0x3257, "M", "27"), - (0x3258, "M", "28"), - (0x3259, "M", "29"), - (0x325A, "M", "30"), - (0x325B, "M", "31"), - (0x325C, "M", "32"), - (0x325D, "M", "33"), - (0x325E, "M", "34"), - (0x325F, "M", "35"), - (0x3260, "M", "ᄀ"), - (0x3261, "M", "ᄂ"), - (0x3262, "M", "ᄃ"), - (0x3263, "M", "ᄅ"), - (0x3264, "M", "ᄆ"), - (0x3265, "M", "ᄇ"), - (0x3266, "M", "ᄉ"), - (0x3267, "M", "ᄋ"), - (0x3268, "M", "ᄌ"), - (0x3269, "M", "ᄎ"), - (0x326A, "M", "ᄏ"), - (0x326B, "M", "ᄐ"), - (0x326C, "M", "ᄑ"), - (0x326D, "M", "ᄒ"), - (0x326E, "M", "가"), - (0x326F, "M", "나"), - (0x3270, "M", "다"), - (0x3271, "M", "라"), - (0x3272, "M", "마"), - (0x3273, "M", "바"), - (0x3274, "M", "사"), - (0x3275, "M", "아"), - (0x3276, "M", "자"), - (0x3277, "M", "차"), - (0x3278, "M", "카"), - (0x3279, "M", "타"), - (0x327A, "M", "파"), - (0x327B, "M", "하"), - (0x327C, "M", "참고"), - (0x327D, "M", "주의"), - (0x327E, "M", "우"), - (0x327F, "V"), - (0x3280, "M", "一"), - (0x3281, "M", "二"), - (0x3282, "M", "三"), - (0x3283, "M", "四"), - (0x3284, "M", "五"), - (0x3285, "M", "六"), - (0x3286, "M", "七"), - (0x3287, "M", "八"), - (0x3288, "M", "九"), - (0x3289, "M", "十"), - (0x328A, "M", "月"), - (0x328B, "M", "火"), - (0x328C, "M", "水"), - (0x328D, "M", "木"), - (0x328E, "M", "金"), - (0x328F, "M", "土"), - (0x3290, "M", "日"), - (0x3291, "M", "株"), - (0x3292, "M", "有"), - (0x3293, "M", "社"), - (0x3294, "M", "名"), - ] - - -def _seg_32() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x3295, "M", "特"), - (0x3296, "M", "財"), - (0x3297, "M", "祝"), - (0x3298, "M", "労"), - (0x3299, "M", "秘"), - (0x329A, "M", "男"), - (0x329B, "M", "女"), - (0x329C, "M", "適"), - (0x329D, "M", "優"), - (0x329E, "M", "印"), - (0x329F, "M", "注"), - (0x32A0, "M", "項"), - (0x32A1, "M", "休"), - (0x32A2, "M", "写"), - (0x32A3, "M", "正"), - (0x32A4, "M", "上"), - (0x32A5, "M", "中"), - (0x32A6, "M", "下"), - (0x32A7, "M", "左"), - (0x32A8, "M", "右"), - (0x32A9, "M", "医"), - (0x32AA, "M", "宗"), - (0x32AB, "M", "学"), - (0x32AC, "M", "監"), - (0x32AD, "M", "企"), - (0x32AE, "M", "資"), - (0x32AF, "M", "協"), - (0x32B0, "M", "夜"), - (0x32B1, "M", "36"), - (0x32B2, "M", "37"), - (0x32B3, "M", "38"), - (0x32B4, "M", "39"), - (0x32B5, "M", "40"), - (0x32B6, "M", "41"), - (0x32B7, "M", "42"), - (0x32B8, "M", "43"), - (0x32B9, "M", "44"), - (0x32BA, "M", "45"), - (0x32BB, "M", "46"), - (0x32BC, "M", "47"), - (0x32BD, "M", "48"), - (0x32BE, "M", "49"), - (0x32BF, "M", "50"), - (0x32C0, "M", "1月"), - (0x32C1, "M", "2月"), - (0x32C2, "M", "3月"), - (0x32C3, "M", "4月"), - (0x32C4, "M", "5月"), - (0x32C5, "M", "6月"), - (0x32C6, "M", "7月"), - (0x32C7, "M", "8月"), - (0x32C8, "M", "9月"), - (0x32C9, "M", "10月"), - (0x32CA, "M", "11月"), - (0x32CB, "M", "12月"), - (0x32CC, "M", "hg"), - (0x32CD, "M", "erg"), - (0x32CE, "M", "ev"), - (0x32CF, "M", "ltd"), - (0x32D0, "M", "ア"), - (0x32D1, "M", "イ"), - (0x32D2, "M", "ウ"), - (0x32D3, "M", "エ"), - (0x32D4, "M", "オ"), - (0x32D5, "M", "カ"), - (0x32D6, "M", "キ"), - (0x32D7, "M", "ク"), - (0x32D8, "M", "ケ"), - (0x32D9, "M", "コ"), - (0x32DA, "M", "サ"), - (0x32DB, "M", "シ"), - (0x32DC, "M", "ス"), - (0x32DD, "M", "セ"), - (0x32DE, "M", "ソ"), - (0x32DF, "M", "タ"), - (0x32E0, "M", "チ"), - (0x32E1, "M", "ツ"), - (0x32E2, "M", "テ"), - (0x32E3, "M", "ト"), - (0x32E4, "M", "ナ"), - (0x32E5, "M", "ニ"), - (0x32E6, "M", "ヌ"), - (0x32E7, "M", "ネ"), - (0x32E8, "M", "ノ"), - (0x32E9, "M", "ハ"), - (0x32EA, "M", "ヒ"), - (0x32EB, "M", "フ"), - (0x32EC, "M", "ヘ"), - (0x32ED, "M", "ホ"), - (0x32EE, "M", "マ"), - (0x32EF, "M", "ミ"), - (0x32F0, "M", "ム"), - (0x32F1, "M", "メ"), - (0x32F2, "M", "モ"), - (0x32F3, "M", "ヤ"), - (0x32F4, "M", "ユ"), - (0x32F5, "M", "ヨ"), - (0x32F6, "M", "ラ"), - (0x32F7, "M", "リ"), - (0x32F8, "M", "ル"), - ] - - -def _seg_33() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x32F9, "M", "レ"), - (0x32FA, "M", "ロ"), - (0x32FB, "M", "ワ"), - (0x32FC, "M", "ヰ"), - (0x32FD, "M", "ヱ"), - (0x32FE, "M", "ヲ"), - (0x32FF, "M", "令和"), - (0x3300, "M", "アパート"), - (0x3301, "M", "アルファ"), - (0x3302, "M", "アンペア"), - (0x3303, "M", "アール"), - (0x3304, "M", "イニング"), - (0x3305, "M", "インチ"), - (0x3306, "M", "ウォン"), - (0x3307, "M", "エスクード"), - (0x3308, "M", "エーカー"), - (0x3309, "M", "オンス"), - (0x330A, "M", "オーム"), - (0x330B, "M", "カイリ"), - (0x330C, "M", "カラット"), - (0x330D, "M", "カロリー"), - (0x330E, "M", "ガロン"), - (0x330F, "M", "ガンマ"), - (0x3310, "M", "ギガ"), - (0x3311, "M", "ギニー"), - (0x3312, "M", "キュリー"), - (0x3313, "M", "ギルダー"), - (0x3314, "M", "キロ"), - (0x3315, "M", "キログラム"), - (0x3316, "M", "キロメートル"), - (0x3317, "M", "キロワット"), - (0x3318, "M", "グラム"), - (0x3319, "M", "グラムトン"), - (0x331A, "M", "クルゼイロ"), - (0x331B, "M", "クローネ"), - (0x331C, "M", "ケース"), - (0x331D, "M", "コルナ"), - (0x331E, "M", "コーポ"), - (0x331F, "M", "サイクル"), - (0x3320, "M", "サンチーム"), - (0x3321, "M", "シリング"), - (0x3322, "M", "センチ"), - (0x3323, "M", "セント"), - (0x3324, "M", "ダース"), - (0x3325, "M", "デシ"), - (0x3326, "M", "ドル"), - (0x3327, "M", "トン"), - (0x3328, "M", "ナノ"), - (0x3329, "M", "ノット"), - (0x332A, "M", "ハイツ"), - (0x332B, "M", "パーセント"), - (0x332C, "M", "パーツ"), - (0x332D, "M", "バーレル"), - (0x332E, "M", "ピアストル"), - (0x332F, "M", "ピクル"), - (0x3330, "M", "ピコ"), - (0x3331, "M", "ビル"), - (0x3332, "M", "ファラッド"), - (0x3333, "M", "フィート"), - (0x3334, "M", "ブッシェル"), - (0x3335, "M", "フラン"), - (0x3336, "M", "ヘクタール"), - (0x3337, "M", "ペソ"), - (0x3338, "M", "ペニヒ"), - (0x3339, "M", "ヘルツ"), - (0x333A, "M", "ペンス"), - (0x333B, "M", "ページ"), - (0x333C, "M", "ベータ"), - (0x333D, "M", "ポイント"), - (0x333E, "M", "ボルト"), - (0x333F, "M", "ホン"), - (0x3340, "M", "ポンド"), - (0x3341, "M", "ホール"), - (0x3342, "M", "ホーン"), - (0x3343, "M", "マイクロ"), - (0x3344, "M", "マイル"), - (0x3345, "M", "マッハ"), - (0x3346, "M", "マルク"), - (0x3347, "M", "マンション"), - (0x3348, "M", "ミクロン"), - (0x3349, "M", "ミリ"), - (0x334A, "M", "ミリバール"), - (0x334B, "M", "メガ"), - (0x334C, "M", "メガトン"), - (0x334D, "M", "メートル"), - (0x334E, "M", "ヤード"), - (0x334F, "M", "ヤール"), - (0x3350, "M", "ユアン"), - (0x3351, "M", "リットル"), - (0x3352, "M", "リラ"), - (0x3353, "M", "ルピー"), - (0x3354, "M", "ルーブル"), - (0x3355, "M", "レム"), - (0x3356, "M", "レントゲン"), - (0x3357, "M", "ワット"), - (0x3358, "M", "0点"), - (0x3359, "M", "1点"), - (0x335A, "M", "2点"), - (0x335B, "M", "3点"), - (0x335C, "M", "4点"), - ] - - -def _seg_34() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x335D, "M", "5点"), - (0x335E, "M", "6点"), - (0x335F, "M", "7点"), - (0x3360, "M", "8点"), - (0x3361, "M", "9点"), - (0x3362, "M", "10点"), - (0x3363, "M", "11点"), - (0x3364, "M", "12点"), - (0x3365, "M", "13点"), - (0x3366, "M", "14点"), - (0x3367, "M", "15点"), - (0x3368, "M", "16点"), - (0x3369, "M", "17点"), - (0x336A, "M", "18点"), - (0x336B, "M", "19点"), - (0x336C, "M", "20点"), - (0x336D, "M", "21点"), - (0x336E, "M", "22点"), - (0x336F, "M", "23点"), - (0x3370, "M", "24点"), - (0x3371, "M", "hpa"), - (0x3372, "M", "da"), - (0x3373, "M", "au"), - (0x3374, "M", "bar"), - (0x3375, "M", "ov"), - (0x3376, "M", "pc"), - (0x3377, "M", "dm"), - (0x3378, "M", "dm2"), - (0x3379, "M", "dm3"), - (0x337A, "M", "iu"), - (0x337B, "M", "平成"), - (0x337C, "M", "昭和"), - (0x337D, "M", "大正"), - (0x337E, "M", "明治"), - (0x337F, "M", "株式会社"), - (0x3380, "M", "pa"), - (0x3381, "M", "na"), - (0x3382, "M", "μa"), - (0x3383, "M", "ma"), - (0x3384, "M", "ka"), - (0x3385, "M", "kb"), - (0x3386, "M", "mb"), - (0x3387, "M", "gb"), - (0x3388, "M", "cal"), - (0x3389, "M", "kcal"), - (0x338A, "M", "pf"), - (0x338B, "M", "nf"), - (0x338C, "M", "μf"), - (0x338D, "M", "μg"), - (0x338E, "M", "mg"), - (0x338F, "M", "kg"), - (0x3390, "M", "hz"), - (0x3391, "M", "khz"), - (0x3392, "M", "mhz"), - (0x3393, "M", "ghz"), - (0x3394, "M", "thz"), - (0x3395, "M", "μl"), - (0x3396, "M", "ml"), - (0x3397, "M", "dl"), - (0x3398, "M", "kl"), - (0x3399, "M", "fm"), - (0x339A, "M", "nm"), - (0x339B, "M", "μm"), - (0x339C, "M", "mm"), - (0x339D, "M", "cm"), - (0x339E, "M", "km"), - (0x339F, "M", "mm2"), - (0x33A0, "M", "cm2"), - (0x33A1, "M", "m2"), - (0x33A2, "M", "km2"), - (0x33A3, "M", "mm3"), - (0x33A4, "M", "cm3"), - (0x33A5, "M", "m3"), - (0x33A6, "M", "km3"), - (0x33A7, "M", "m∕s"), - (0x33A8, "M", "m∕s2"), - (0x33A9, "M", "pa"), - (0x33AA, "M", "kpa"), - (0x33AB, "M", "mpa"), - (0x33AC, "M", "gpa"), - (0x33AD, "M", "rad"), - (0x33AE, "M", "rad∕s"), - (0x33AF, "M", "rad∕s2"), - (0x33B0, "M", "ps"), - (0x33B1, "M", "ns"), - (0x33B2, "M", "μs"), - (0x33B3, "M", "ms"), - (0x33B4, "M", "pv"), - (0x33B5, "M", "nv"), - (0x33B6, "M", "μv"), - (0x33B7, "M", "mv"), - (0x33B8, "M", "kv"), - (0x33B9, "M", "mv"), - (0x33BA, "M", "pw"), - (0x33BB, "M", "nw"), - (0x33BC, "M", "μw"), - (0x33BD, "M", "mw"), - (0x33BE, "M", "kw"), - (0x33BF, "M", "mw"), - (0x33C0, "M", "kω"), - ] - - -def _seg_35() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x33C1, "M", "mω"), - (0x33C2, "X"), - (0x33C3, "M", "bq"), - (0x33C4, "M", "cc"), - (0x33C5, "M", "cd"), - (0x33C6, "M", "c∕kg"), - (0x33C7, "X"), - (0x33C8, "M", "db"), - (0x33C9, "M", "gy"), - (0x33CA, "M", "ha"), - (0x33CB, "M", "hp"), - (0x33CC, "M", "in"), - (0x33CD, "M", "kk"), - (0x33CE, "M", "km"), - (0x33CF, "M", "kt"), - (0x33D0, "M", "lm"), - (0x33D1, "M", "ln"), - (0x33D2, "M", "log"), - (0x33D3, "M", "lx"), - (0x33D4, "M", "mb"), - (0x33D5, "M", "mil"), - (0x33D6, "M", "mol"), - (0x33D7, "M", "ph"), - (0x33D8, "X"), - (0x33D9, "M", "ppm"), - (0x33DA, "M", "pr"), - (0x33DB, "M", "sr"), - (0x33DC, "M", "sv"), - (0x33DD, "M", "wb"), - (0x33DE, "M", "v∕m"), - (0x33DF, "M", "a∕m"), - (0x33E0, "M", "1日"), - (0x33E1, "M", "2日"), - (0x33E2, "M", "3日"), - (0x33E3, "M", "4日"), - (0x33E4, "M", "5日"), - (0x33E5, "M", "6日"), - (0x33E6, "M", "7日"), - (0x33E7, "M", "8日"), - (0x33E8, "M", "9日"), - (0x33E9, "M", "10日"), - (0x33EA, "M", "11日"), - (0x33EB, "M", "12日"), - (0x33EC, "M", "13日"), - (0x33ED, "M", "14日"), - (0x33EE, "M", "15日"), - (0x33EF, "M", "16日"), - (0x33F0, "M", "17日"), - (0x33F1, "M", "18日"), - (0x33F2, "M", "19日"), - (0x33F3, "M", "20日"), - (0x33F4, "M", "21日"), - (0x33F5, "M", "22日"), - (0x33F6, "M", "23日"), - (0x33F7, "M", "24日"), - (0x33F8, "M", "25日"), - (0x33F9, "M", "26日"), - (0x33FA, "M", "27日"), - (0x33FB, "M", "28日"), - (0x33FC, "M", "29日"), - (0x33FD, "M", "30日"), - (0x33FE, "M", "31日"), - (0x33FF, "M", "gal"), - (0x3400, "V"), - (0xA48D, "X"), - (0xA490, "V"), - (0xA4C7, "X"), - (0xA4D0, "V"), - (0xA62C, "X"), - (0xA640, "M", "ꙁ"), - (0xA641, "V"), - (0xA642, "M", "ꙃ"), - (0xA643, "V"), - (0xA644, "M", "ꙅ"), - (0xA645, "V"), - (0xA646, "M", "ꙇ"), - (0xA647, "V"), - (0xA648, "M", "ꙉ"), - (0xA649, "V"), - (0xA64A, "M", "ꙋ"), - (0xA64B, "V"), - (0xA64C, "M", "ꙍ"), - (0xA64D, "V"), - (0xA64E, "M", "ꙏ"), - (0xA64F, "V"), - (0xA650, "M", "ꙑ"), - (0xA651, "V"), - (0xA652, "M", "ꙓ"), - (0xA653, "V"), - (0xA654, "M", "ꙕ"), - (0xA655, "V"), - (0xA656, "M", "ꙗ"), - (0xA657, "V"), - (0xA658, "M", "ꙙ"), - (0xA659, "V"), - (0xA65A, "M", "ꙛ"), - (0xA65B, "V"), - (0xA65C, "M", "ꙝ"), - (0xA65D, "V"), - (0xA65E, "M", "ꙟ"), - ] - - -def _seg_36() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA65F, "V"), - (0xA660, "M", "ꙡ"), - (0xA661, "V"), - (0xA662, "M", "ꙣ"), - (0xA663, "V"), - (0xA664, "M", "ꙥ"), - (0xA665, "V"), - (0xA666, "M", "ꙧ"), - (0xA667, "V"), - (0xA668, "M", "ꙩ"), - (0xA669, "V"), - (0xA66A, "M", "ꙫ"), - (0xA66B, "V"), - (0xA66C, "M", "ꙭ"), - (0xA66D, "V"), - (0xA680, "M", "ꚁ"), - (0xA681, "V"), - (0xA682, "M", "ꚃ"), - (0xA683, "V"), - (0xA684, "M", "ꚅ"), - (0xA685, "V"), - (0xA686, "M", "ꚇ"), - (0xA687, "V"), - (0xA688, "M", "ꚉ"), - (0xA689, "V"), - (0xA68A, "M", "ꚋ"), - (0xA68B, "V"), - (0xA68C, "M", "ꚍ"), - (0xA68D, "V"), - (0xA68E, "M", "ꚏ"), - (0xA68F, "V"), - (0xA690, "M", "ꚑ"), - (0xA691, "V"), - (0xA692, "M", "ꚓ"), - (0xA693, "V"), - (0xA694, "M", "ꚕ"), - (0xA695, "V"), - (0xA696, "M", "ꚗ"), - (0xA697, "V"), - (0xA698, "M", "ꚙ"), - (0xA699, "V"), - (0xA69A, "M", "ꚛ"), - (0xA69B, "V"), - (0xA69C, "M", "ъ"), - (0xA69D, "M", "ь"), - (0xA69E, "V"), - (0xA6F8, "X"), - (0xA700, "V"), - (0xA722, "M", "ꜣ"), - (0xA723, "V"), - (0xA724, "M", "ꜥ"), - (0xA725, "V"), - (0xA726, "M", "ꜧ"), - (0xA727, "V"), - (0xA728, "M", "ꜩ"), - (0xA729, "V"), - (0xA72A, "M", "ꜫ"), - (0xA72B, "V"), - (0xA72C, "M", "ꜭ"), - (0xA72D, "V"), - (0xA72E, "M", "ꜯ"), - (0xA72F, "V"), - (0xA732, "M", "ꜳ"), - (0xA733, "V"), - (0xA734, "M", "ꜵ"), - (0xA735, "V"), - (0xA736, "M", "ꜷ"), - (0xA737, "V"), - (0xA738, "M", "ꜹ"), - (0xA739, "V"), - (0xA73A, "M", "ꜻ"), - (0xA73B, "V"), - (0xA73C, "M", "ꜽ"), - (0xA73D, "V"), - (0xA73E, "M", "ꜿ"), - (0xA73F, "V"), - (0xA740, "M", "ꝁ"), - (0xA741, "V"), - (0xA742, "M", "ꝃ"), - (0xA743, "V"), - (0xA744, "M", "ꝅ"), - (0xA745, "V"), - (0xA746, "M", "ꝇ"), - (0xA747, "V"), - (0xA748, "M", "ꝉ"), - (0xA749, "V"), - (0xA74A, "M", "ꝋ"), - (0xA74B, "V"), - (0xA74C, "M", "ꝍ"), - (0xA74D, "V"), - (0xA74E, "M", "ꝏ"), - (0xA74F, "V"), - (0xA750, "M", "ꝑ"), - (0xA751, "V"), - (0xA752, "M", "ꝓ"), - (0xA753, "V"), - (0xA754, "M", "ꝕ"), - (0xA755, "V"), - (0xA756, "M", "ꝗ"), - (0xA757, "V"), - ] - - -def _seg_37() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA758, "M", "ꝙ"), - (0xA759, "V"), - (0xA75A, "M", "ꝛ"), - (0xA75B, "V"), - (0xA75C, "M", "ꝝ"), - (0xA75D, "V"), - (0xA75E, "M", "ꝟ"), - (0xA75F, "V"), - (0xA760, "M", "ꝡ"), - (0xA761, "V"), - (0xA762, "M", "ꝣ"), - (0xA763, "V"), - (0xA764, "M", "ꝥ"), - (0xA765, "V"), - (0xA766, "M", "ꝧ"), - (0xA767, "V"), - (0xA768, "M", "ꝩ"), - (0xA769, "V"), - (0xA76A, "M", "ꝫ"), - (0xA76B, "V"), - (0xA76C, "M", "ꝭ"), - (0xA76D, "V"), - (0xA76E, "M", "ꝯ"), - (0xA76F, "V"), - (0xA770, "M", "ꝯ"), - (0xA771, "V"), - (0xA779, "M", "ꝺ"), - (0xA77A, "V"), - (0xA77B, "M", "ꝼ"), - (0xA77C, "V"), - (0xA77D, "M", "ᵹ"), - (0xA77E, "M", "ꝿ"), - (0xA77F, "V"), - (0xA780, "M", "ꞁ"), - (0xA781, "V"), - (0xA782, "M", "ꞃ"), - (0xA783, "V"), - (0xA784, "M", "ꞅ"), - (0xA785, "V"), - (0xA786, "M", "ꞇ"), - (0xA787, "V"), - (0xA78B, "M", "ꞌ"), - (0xA78C, "V"), - (0xA78D, "M", "ɥ"), - (0xA78E, "V"), - (0xA790, "M", "ꞑ"), - (0xA791, "V"), - (0xA792, "M", "ꞓ"), - (0xA793, "V"), - (0xA796, "M", "ꞗ"), - (0xA797, "V"), - (0xA798, "M", "ꞙ"), - (0xA799, "V"), - (0xA79A, "M", "ꞛ"), - (0xA79B, "V"), - (0xA79C, "M", "ꞝ"), - (0xA79D, "V"), - (0xA79E, "M", "ꞟ"), - (0xA79F, "V"), - (0xA7A0, "M", "ꞡ"), - (0xA7A1, "V"), - (0xA7A2, "M", "ꞣ"), - (0xA7A3, "V"), - (0xA7A4, "M", "ꞥ"), - (0xA7A5, "V"), - (0xA7A6, "M", "ꞧ"), - (0xA7A7, "V"), - (0xA7A8, "M", "ꞩ"), - (0xA7A9, "V"), - (0xA7AA, "M", "ɦ"), - (0xA7AB, "M", "ɜ"), - (0xA7AC, "M", "ɡ"), - (0xA7AD, "M", "ɬ"), - (0xA7AE, "M", "ɪ"), - (0xA7AF, "V"), - (0xA7B0, "M", "ʞ"), - (0xA7B1, "M", "ʇ"), - (0xA7B2, "M", "ʝ"), - (0xA7B3, "M", "ꭓ"), - (0xA7B4, "M", "ꞵ"), - (0xA7B5, "V"), - (0xA7B6, "M", "ꞷ"), - (0xA7B7, "V"), - (0xA7B8, "M", "ꞹ"), - (0xA7B9, "V"), - (0xA7BA, "M", "ꞻ"), - (0xA7BB, "V"), - (0xA7BC, "M", "ꞽ"), - (0xA7BD, "V"), - (0xA7BE, "M", "ꞿ"), - (0xA7BF, "V"), - (0xA7C0, "M", "ꟁ"), - (0xA7C1, "V"), - (0xA7C2, "M", "ꟃ"), - (0xA7C3, "V"), - (0xA7C4, "M", "ꞔ"), - (0xA7C5, "M", "ʂ"), - (0xA7C6, "M", "ᶎ"), - (0xA7C7, "M", "ꟈ"), - (0xA7C8, "V"), - ] - - -def _seg_38() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xA7C9, "M", "ꟊ"), - (0xA7CA, "V"), - (0xA7CB, "M", "ɤ"), - (0xA7CC, "M", "ꟍ"), - (0xA7CD, "V"), - (0xA7CE, "X"), - (0xA7D0, "M", "ꟑ"), - (0xA7D1, "V"), - (0xA7D2, "X"), - (0xA7D3, "V"), - (0xA7D4, "X"), - (0xA7D5, "V"), - (0xA7D6, "M", "ꟗ"), - (0xA7D7, "V"), - (0xA7D8, "M", "ꟙ"), - (0xA7D9, "V"), - (0xA7DA, "M", "ꟛ"), - (0xA7DB, "V"), - (0xA7DC, "M", "ƛ"), - (0xA7DD, "X"), - (0xA7F2, "M", "c"), - (0xA7F3, "M", "f"), - (0xA7F4, "M", "q"), - (0xA7F5, "M", "ꟶ"), - (0xA7F6, "V"), - (0xA7F8, "M", "ħ"), - (0xA7F9, "M", "œ"), - (0xA7FA, "V"), - (0xA82D, "X"), - (0xA830, "V"), - (0xA83A, "X"), - (0xA840, "V"), - (0xA878, "X"), - (0xA880, "V"), - (0xA8C6, "X"), - (0xA8CE, "V"), - (0xA8DA, "X"), - (0xA8E0, "V"), - (0xA954, "X"), - (0xA95F, "V"), - (0xA97D, "X"), - (0xA980, "V"), - (0xA9CE, "X"), - (0xA9CF, "V"), - (0xA9DA, "X"), - (0xA9DE, "V"), - (0xA9FF, "X"), - (0xAA00, "V"), - (0xAA37, "X"), - (0xAA40, "V"), - (0xAA4E, "X"), - (0xAA50, "V"), - (0xAA5A, "X"), - (0xAA5C, "V"), - (0xAAC3, "X"), - (0xAADB, "V"), - (0xAAF7, "X"), - (0xAB01, "V"), - (0xAB07, "X"), - (0xAB09, "V"), - (0xAB0F, "X"), - (0xAB11, "V"), - (0xAB17, "X"), - (0xAB20, "V"), - (0xAB27, "X"), - (0xAB28, "V"), - (0xAB2F, "X"), - (0xAB30, "V"), - (0xAB5C, "M", "ꜧ"), - (0xAB5D, "M", "ꬷ"), - (0xAB5E, "M", "ɫ"), - (0xAB5F, "M", "ꭒ"), - (0xAB60, "V"), - (0xAB69, "M", "ʍ"), - (0xAB6A, "V"), - (0xAB6C, "X"), - (0xAB70, "M", "Ꭰ"), - (0xAB71, "M", "Ꭱ"), - (0xAB72, "M", "Ꭲ"), - (0xAB73, "M", "Ꭳ"), - (0xAB74, "M", "Ꭴ"), - (0xAB75, "M", "Ꭵ"), - (0xAB76, "M", "Ꭶ"), - (0xAB77, "M", "Ꭷ"), - (0xAB78, "M", "Ꭸ"), - (0xAB79, "M", "Ꭹ"), - (0xAB7A, "M", "Ꭺ"), - (0xAB7B, "M", "Ꭻ"), - (0xAB7C, "M", "Ꭼ"), - (0xAB7D, "M", "Ꭽ"), - (0xAB7E, "M", "Ꭾ"), - (0xAB7F, "M", "Ꭿ"), - (0xAB80, "M", "Ꮀ"), - (0xAB81, "M", "Ꮁ"), - (0xAB82, "M", "Ꮂ"), - (0xAB83, "M", "Ꮃ"), - (0xAB84, "M", "Ꮄ"), - (0xAB85, "M", "Ꮅ"), - (0xAB86, "M", "Ꮆ"), - (0xAB87, "M", "Ꮇ"), - ] - - -def _seg_39() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xAB88, "M", "Ꮈ"), - (0xAB89, "M", "Ꮉ"), - (0xAB8A, "M", "Ꮊ"), - (0xAB8B, "M", "Ꮋ"), - (0xAB8C, "M", "Ꮌ"), - (0xAB8D, "M", "Ꮍ"), - (0xAB8E, "M", "Ꮎ"), - (0xAB8F, "M", "Ꮏ"), - (0xAB90, "M", "Ꮐ"), - (0xAB91, "M", "Ꮑ"), - (0xAB92, "M", "Ꮒ"), - (0xAB93, "M", "Ꮓ"), - (0xAB94, "M", "Ꮔ"), - (0xAB95, "M", "Ꮕ"), - (0xAB96, "M", "Ꮖ"), - (0xAB97, "M", "Ꮗ"), - (0xAB98, "M", "Ꮘ"), - (0xAB99, "M", "Ꮙ"), - (0xAB9A, "M", "Ꮚ"), - (0xAB9B, "M", "Ꮛ"), - (0xAB9C, "M", "Ꮜ"), - (0xAB9D, "M", "Ꮝ"), - (0xAB9E, "M", "Ꮞ"), - (0xAB9F, "M", "Ꮟ"), - (0xABA0, "M", "Ꮠ"), - (0xABA1, "M", "Ꮡ"), - (0xABA2, "M", "Ꮢ"), - (0xABA3, "M", "Ꮣ"), - (0xABA4, "M", "Ꮤ"), - (0xABA5, "M", "Ꮥ"), - (0xABA6, "M", "Ꮦ"), - (0xABA7, "M", "Ꮧ"), - (0xABA8, "M", "Ꮨ"), - (0xABA9, "M", "Ꮩ"), - (0xABAA, "M", "Ꮪ"), - (0xABAB, "M", "Ꮫ"), - (0xABAC, "M", "Ꮬ"), - (0xABAD, "M", "Ꮭ"), - (0xABAE, "M", "Ꮮ"), - (0xABAF, "M", "Ꮯ"), - (0xABB0, "M", "Ꮰ"), - (0xABB1, "M", "Ꮱ"), - (0xABB2, "M", "Ꮲ"), - (0xABB3, "M", "Ꮳ"), - (0xABB4, "M", "Ꮴ"), - (0xABB5, "M", "Ꮵ"), - (0xABB6, "M", "Ꮶ"), - (0xABB7, "M", "Ꮷ"), - (0xABB8, "M", "Ꮸ"), - (0xABB9, "M", "Ꮹ"), - (0xABBA, "M", "Ꮺ"), - (0xABBB, "M", "Ꮻ"), - (0xABBC, "M", "Ꮼ"), - (0xABBD, "M", "Ꮽ"), - (0xABBE, "M", "Ꮾ"), - (0xABBF, "M", "Ꮿ"), - (0xABC0, "V"), - (0xABEE, "X"), - (0xABF0, "V"), - (0xABFA, "X"), - (0xAC00, "V"), - (0xD7A4, "X"), - (0xD7B0, "V"), - (0xD7C7, "X"), - (0xD7CB, "V"), - (0xD7FC, "X"), - (0xF900, "M", "豈"), - (0xF901, "M", "更"), - (0xF902, "M", "車"), - (0xF903, "M", "賈"), - (0xF904, "M", "滑"), - (0xF905, "M", "串"), - (0xF906, "M", "句"), - (0xF907, "M", "龜"), - (0xF909, "M", "契"), - (0xF90A, "M", "金"), - (0xF90B, "M", "喇"), - (0xF90C, "M", "奈"), - (0xF90D, "M", "懶"), - (0xF90E, "M", "癩"), - (0xF90F, "M", "羅"), - (0xF910, "M", "蘿"), - (0xF911, "M", "螺"), - (0xF912, "M", "裸"), - (0xF913, "M", "邏"), - (0xF914, "M", "樂"), - (0xF915, "M", "洛"), - (0xF916, "M", "烙"), - (0xF917, "M", "珞"), - (0xF918, "M", "落"), - (0xF919, "M", "酪"), - (0xF91A, "M", "駱"), - (0xF91B, "M", "亂"), - (0xF91C, "M", "卵"), - (0xF91D, "M", "欄"), - (0xF91E, "M", "爛"), - (0xF91F, "M", "蘭"), - (0xF920, "M", "鸞"), - (0xF921, "M", "嵐"), - (0xF922, "M", "濫"), - ] - - -def _seg_40() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF923, "M", "藍"), - (0xF924, "M", "襤"), - (0xF925, "M", "拉"), - (0xF926, "M", "臘"), - (0xF927, "M", "蠟"), - (0xF928, "M", "廊"), - (0xF929, "M", "朗"), - (0xF92A, "M", "浪"), - (0xF92B, "M", "狼"), - (0xF92C, "M", "郎"), - (0xF92D, "M", "來"), - (0xF92E, "M", "冷"), - (0xF92F, "M", "勞"), - (0xF930, "M", "擄"), - (0xF931, "M", "櫓"), - (0xF932, "M", "爐"), - (0xF933, "M", "盧"), - (0xF934, "M", "老"), - (0xF935, "M", "蘆"), - (0xF936, "M", "虜"), - (0xF937, "M", "路"), - (0xF938, "M", "露"), - (0xF939, "M", "魯"), - (0xF93A, "M", "鷺"), - (0xF93B, "M", "碌"), - (0xF93C, "M", "祿"), - (0xF93D, "M", "綠"), - (0xF93E, "M", "菉"), - (0xF93F, "M", "錄"), - (0xF940, "M", "鹿"), - (0xF941, "M", "論"), - (0xF942, "M", "壟"), - (0xF943, "M", "弄"), - (0xF944, "M", "籠"), - (0xF945, "M", "聾"), - (0xF946, "M", "牢"), - (0xF947, "M", "磊"), - (0xF948, "M", "賂"), - (0xF949, "M", "雷"), - (0xF94A, "M", "壘"), - (0xF94B, "M", "屢"), - (0xF94C, "M", "樓"), - (0xF94D, "M", "淚"), - (0xF94E, "M", "漏"), - (0xF94F, "M", "累"), - (0xF950, "M", "縷"), - (0xF951, "M", "陋"), - (0xF952, "M", "勒"), - (0xF953, "M", "肋"), - (0xF954, "M", "凜"), - (0xF955, "M", "凌"), - (0xF956, "M", "稜"), - (0xF957, "M", "綾"), - (0xF958, "M", "菱"), - (0xF959, "M", "陵"), - (0xF95A, "M", "讀"), - (0xF95B, "M", "拏"), - (0xF95C, "M", "樂"), - (0xF95D, "M", "諾"), - (0xF95E, "M", "丹"), - (0xF95F, "M", "寧"), - (0xF960, "M", "怒"), - (0xF961, "M", "率"), - (0xF962, "M", "異"), - (0xF963, "M", "北"), - (0xF964, "M", "磻"), - (0xF965, "M", "便"), - (0xF966, "M", "復"), - (0xF967, "M", "不"), - (0xF968, "M", "泌"), - (0xF969, "M", "數"), - (0xF96A, "M", "索"), - (0xF96B, "M", "參"), - (0xF96C, "M", "塞"), - (0xF96D, "M", "省"), - (0xF96E, "M", "葉"), - (0xF96F, "M", "說"), - (0xF970, "M", "殺"), - (0xF971, "M", "辰"), - (0xF972, "M", "沈"), - (0xF973, "M", "拾"), - (0xF974, "M", "若"), - (0xF975, "M", "掠"), - (0xF976, "M", "略"), - (0xF977, "M", "亮"), - (0xF978, "M", "兩"), - (0xF979, "M", "凉"), - (0xF97A, "M", "梁"), - (0xF97B, "M", "糧"), - (0xF97C, "M", "良"), - (0xF97D, "M", "諒"), - (0xF97E, "M", "量"), - (0xF97F, "M", "勵"), - (0xF980, "M", "呂"), - (0xF981, "M", "女"), - (0xF982, "M", "廬"), - (0xF983, "M", "旅"), - (0xF984, "M", "濾"), - (0xF985, "M", "礪"), - (0xF986, "M", "閭"), - ] - - -def _seg_41() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF987, "M", "驪"), - (0xF988, "M", "麗"), - (0xF989, "M", "黎"), - (0xF98A, "M", "力"), - (0xF98B, "M", "曆"), - (0xF98C, "M", "歷"), - (0xF98D, "M", "轢"), - (0xF98E, "M", "年"), - (0xF98F, "M", "憐"), - (0xF990, "M", "戀"), - (0xF991, "M", "撚"), - (0xF992, "M", "漣"), - (0xF993, "M", "煉"), - (0xF994, "M", "璉"), - (0xF995, "M", "秊"), - (0xF996, "M", "練"), - (0xF997, "M", "聯"), - (0xF998, "M", "輦"), - (0xF999, "M", "蓮"), - (0xF99A, "M", "連"), - (0xF99B, "M", "鍊"), - (0xF99C, "M", "列"), - (0xF99D, "M", "劣"), - (0xF99E, "M", "咽"), - (0xF99F, "M", "烈"), - (0xF9A0, "M", "裂"), - (0xF9A1, "M", "說"), - (0xF9A2, "M", "廉"), - (0xF9A3, "M", "念"), - (0xF9A4, "M", "捻"), - (0xF9A5, "M", "殮"), - (0xF9A6, "M", "簾"), - (0xF9A7, "M", "獵"), - (0xF9A8, "M", "令"), - (0xF9A9, "M", "囹"), - (0xF9AA, "M", "寧"), - (0xF9AB, "M", "嶺"), - (0xF9AC, "M", "怜"), - (0xF9AD, "M", "玲"), - (0xF9AE, "M", "瑩"), - (0xF9AF, "M", "羚"), - (0xF9B0, "M", "聆"), - (0xF9B1, "M", "鈴"), - (0xF9B2, "M", "零"), - (0xF9B3, "M", "靈"), - (0xF9B4, "M", "領"), - (0xF9B5, "M", "例"), - (0xF9B6, "M", "禮"), - (0xF9B7, "M", "醴"), - (0xF9B8, "M", "隸"), - (0xF9B9, "M", "惡"), - (0xF9BA, "M", "了"), - (0xF9BB, "M", "僚"), - (0xF9BC, "M", "寮"), - (0xF9BD, "M", "尿"), - (0xF9BE, "M", "料"), - (0xF9BF, "M", "樂"), - (0xF9C0, "M", "燎"), - (0xF9C1, "M", "療"), - (0xF9C2, "M", "蓼"), - (0xF9C3, "M", "遼"), - (0xF9C4, "M", "龍"), - (0xF9C5, "M", "暈"), - (0xF9C6, "M", "阮"), - (0xF9C7, "M", "劉"), - (0xF9C8, "M", "杻"), - (0xF9C9, "M", "柳"), - (0xF9CA, "M", "流"), - (0xF9CB, "M", "溜"), - (0xF9CC, "M", "琉"), - (0xF9CD, "M", "留"), - (0xF9CE, "M", "硫"), - (0xF9CF, "M", "紐"), - (0xF9D0, "M", "類"), - (0xF9D1, "M", "六"), - (0xF9D2, "M", "戮"), - (0xF9D3, "M", "陸"), - (0xF9D4, "M", "倫"), - (0xF9D5, "M", "崙"), - (0xF9D6, "M", "淪"), - (0xF9D7, "M", "輪"), - (0xF9D8, "M", "律"), - (0xF9D9, "M", "慄"), - (0xF9DA, "M", "栗"), - (0xF9DB, "M", "率"), - (0xF9DC, "M", "隆"), - (0xF9DD, "M", "利"), - (0xF9DE, "M", "吏"), - (0xF9DF, "M", "履"), - (0xF9E0, "M", "易"), - (0xF9E1, "M", "李"), - (0xF9E2, "M", "梨"), - (0xF9E3, "M", "泥"), - (0xF9E4, "M", "理"), - (0xF9E5, "M", "痢"), - (0xF9E6, "M", "罹"), - (0xF9E7, "M", "裏"), - (0xF9E8, "M", "裡"), - (0xF9E9, "M", "里"), - (0xF9EA, "M", "離"), - ] - - -def _seg_42() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xF9EB, "M", "匿"), - (0xF9EC, "M", "溺"), - (0xF9ED, "M", "吝"), - (0xF9EE, "M", "燐"), - (0xF9EF, "M", "璘"), - (0xF9F0, "M", "藺"), - (0xF9F1, "M", "隣"), - (0xF9F2, "M", "鱗"), - (0xF9F3, "M", "麟"), - (0xF9F4, "M", "林"), - (0xF9F5, "M", "淋"), - (0xF9F6, "M", "臨"), - (0xF9F7, "M", "立"), - (0xF9F8, "M", "笠"), - (0xF9F9, "M", "粒"), - (0xF9FA, "M", "狀"), - (0xF9FB, "M", "炙"), - (0xF9FC, "M", "識"), - (0xF9FD, "M", "什"), - (0xF9FE, "M", "茶"), - (0xF9FF, "M", "刺"), - (0xFA00, "M", "切"), - (0xFA01, "M", "度"), - (0xFA02, "M", "拓"), - (0xFA03, "M", "糖"), - (0xFA04, "M", "宅"), - (0xFA05, "M", "洞"), - (0xFA06, "M", "暴"), - (0xFA07, "M", "輻"), - (0xFA08, "M", "行"), - (0xFA09, "M", "降"), - (0xFA0A, "M", "見"), - (0xFA0B, "M", "廓"), - (0xFA0C, "M", "兀"), - (0xFA0D, "M", "嗀"), - (0xFA0E, "V"), - (0xFA10, "M", "塚"), - (0xFA11, "V"), - (0xFA12, "M", "晴"), - (0xFA13, "V"), - (0xFA15, "M", "凞"), - (0xFA16, "M", "猪"), - (0xFA17, "M", "益"), - (0xFA18, "M", "礼"), - (0xFA19, "M", "神"), - (0xFA1A, "M", "祥"), - (0xFA1B, "M", "福"), - (0xFA1C, "M", "靖"), - (0xFA1D, "M", "精"), - (0xFA1E, "M", "羽"), - (0xFA1F, "V"), - (0xFA20, "M", "蘒"), - (0xFA21, "V"), - (0xFA22, "M", "諸"), - (0xFA23, "V"), - (0xFA25, "M", "逸"), - (0xFA26, "M", "都"), - (0xFA27, "V"), - (0xFA2A, "M", "飯"), - (0xFA2B, "M", "飼"), - (0xFA2C, "M", "館"), - (0xFA2D, "M", "鶴"), - (0xFA2E, "M", "郞"), - (0xFA2F, "M", "隷"), - (0xFA30, "M", "侮"), - (0xFA31, "M", "僧"), - (0xFA32, "M", "免"), - (0xFA33, "M", "勉"), - (0xFA34, "M", "勤"), - (0xFA35, "M", "卑"), - (0xFA36, "M", "喝"), - (0xFA37, "M", "嘆"), - (0xFA38, "M", "器"), - (0xFA39, "M", "塀"), - (0xFA3A, "M", "墨"), - (0xFA3B, "M", "層"), - (0xFA3C, "M", "屮"), - (0xFA3D, "M", "悔"), - (0xFA3E, "M", "慨"), - (0xFA3F, "M", "憎"), - (0xFA40, "M", "懲"), - (0xFA41, "M", "敏"), - (0xFA42, "M", "既"), - (0xFA43, "M", "暑"), - (0xFA44, "M", "梅"), - (0xFA45, "M", "海"), - (0xFA46, "M", "渚"), - (0xFA47, "M", "漢"), - (0xFA48, "M", "煮"), - (0xFA49, "M", "爫"), - (0xFA4A, "M", "琢"), - (0xFA4B, "M", "碑"), - (0xFA4C, "M", "社"), - (0xFA4D, "M", "祉"), - (0xFA4E, "M", "祈"), - (0xFA4F, "M", "祐"), - (0xFA50, "M", "祖"), - (0xFA51, "M", "祝"), - (0xFA52, "M", "禍"), - (0xFA53, "M", "禎"), - ] - - -def _seg_43() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFA54, "M", "穀"), - (0xFA55, "M", "突"), - (0xFA56, "M", "節"), - (0xFA57, "M", "練"), - (0xFA58, "M", "縉"), - (0xFA59, "M", "繁"), - (0xFA5A, "M", "署"), - (0xFA5B, "M", "者"), - (0xFA5C, "M", "臭"), - (0xFA5D, "M", "艹"), - (0xFA5F, "M", "著"), - (0xFA60, "M", "褐"), - (0xFA61, "M", "視"), - (0xFA62, "M", "謁"), - (0xFA63, "M", "謹"), - (0xFA64, "M", "賓"), - (0xFA65, "M", "贈"), - (0xFA66, "M", "辶"), - (0xFA67, "M", "逸"), - (0xFA68, "M", "難"), - (0xFA69, "M", "響"), - (0xFA6A, "M", "頻"), - (0xFA6B, "M", "恵"), - (0xFA6C, "M", "𤋮"), - (0xFA6D, "M", "舘"), - (0xFA6E, "X"), - (0xFA70, "M", "並"), - (0xFA71, "M", "况"), - (0xFA72, "M", "全"), - (0xFA73, "M", "侀"), - (0xFA74, "M", "充"), - (0xFA75, "M", "冀"), - (0xFA76, "M", "勇"), - (0xFA77, "M", "勺"), - (0xFA78, "M", "喝"), - (0xFA79, "M", "啕"), - (0xFA7A, "M", "喙"), - (0xFA7B, "M", "嗢"), - (0xFA7C, "M", "塚"), - (0xFA7D, "M", "墳"), - (0xFA7E, "M", "奄"), - (0xFA7F, "M", "奔"), - (0xFA80, "M", "婢"), - (0xFA81, "M", "嬨"), - (0xFA82, "M", "廒"), - (0xFA83, "M", "廙"), - (0xFA84, "M", "彩"), - (0xFA85, "M", "徭"), - (0xFA86, "M", "惘"), - (0xFA87, "M", "慎"), - (0xFA88, "M", "愈"), - (0xFA89, "M", "憎"), - (0xFA8A, "M", "慠"), - (0xFA8B, "M", "懲"), - (0xFA8C, "M", "戴"), - (0xFA8D, "M", "揄"), - (0xFA8E, "M", "搜"), - (0xFA8F, "M", "摒"), - (0xFA90, "M", "敖"), - (0xFA91, "M", "晴"), - (0xFA92, "M", "朗"), - (0xFA93, "M", "望"), - (0xFA94, "M", "杖"), - (0xFA95, "M", "歹"), - (0xFA96, "M", "殺"), - (0xFA97, "M", "流"), - (0xFA98, "M", "滛"), - (0xFA99, "M", "滋"), - (0xFA9A, "M", "漢"), - (0xFA9B, "M", "瀞"), - (0xFA9C, "M", "煮"), - (0xFA9D, "M", "瞧"), - (0xFA9E, "M", "爵"), - (0xFA9F, "M", "犯"), - (0xFAA0, "M", "猪"), - (0xFAA1, "M", "瑱"), - (0xFAA2, "M", "甆"), - (0xFAA3, "M", "画"), - (0xFAA4, "M", "瘝"), - (0xFAA5, "M", "瘟"), - (0xFAA6, "M", "益"), - (0xFAA7, "M", "盛"), - (0xFAA8, "M", "直"), - (0xFAA9, "M", "睊"), - (0xFAAA, "M", "着"), - (0xFAAB, "M", "磌"), - (0xFAAC, "M", "窱"), - (0xFAAD, "M", "節"), - (0xFAAE, "M", "类"), - (0xFAAF, "M", "絛"), - (0xFAB0, "M", "練"), - (0xFAB1, "M", "缾"), - (0xFAB2, "M", "者"), - (0xFAB3, "M", "荒"), - (0xFAB4, "M", "華"), - (0xFAB5, "M", "蝹"), - (0xFAB6, "M", "襁"), - (0xFAB7, "M", "覆"), - (0xFAB8, "M", "視"), - (0xFAB9, "M", "調"), - ] - - -def _seg_44() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFABA, "M", "諸"), - (0xFABB, "M", "請"), - (0xFABC, "M", "謁"), - (0xFABD, "M", "諾"), - (0xFABE, "M", "諭"), - (0xFABF, "M", "謹"), - (0xFAC0, "M", "變"), - (0xFAC1, "M", "贈"), - (0xFAC2, "M", "輸"), - (0xFAC3, "M", "遲"), - (0xFAC4, "M", "醙"), - (0xFAC5, "M", "鉶"), - (0xFAC6, "M", "陼"), - (0xFAC7, "M", "難"), - (0xFAC8, "M", "靖"), - (0xFAC9, "M", "韛"), - (0xFACA, "M", "響"), - (0xFACB, "M", "頋"), - (0xFACC, "M", "頻"), - (0xFACD, "M", "鬒"), - (0xFACE, "M", "龜"), - (0xFACF, "M", "𢡊"), - (0xFAD0, "M", "𢡄"), - (0xFAD1, "M", "𣏕"), - (0xFAD2, "M", "㮝"), - (0xFAD3, "M", "䀘"), - (0xFAD4, "M", "䀹"), - (0xFAD5, "M", "𥉉"), - (0xFAD6, "M", "𥳐"), - (0xFAD7, "M", "𧻓"), - (0xFAD8, "M", "齃"), - (0xFAD9, "M", "龎"), - (0xFADA, "X"), - (0xFB00, "M", "ff"), - (0xFB01, "M", "fi"), - (0xFB02, "M", "fl"), - (0xFB03, "M", "ffi"), - (0xFB04, "M", "ffl"), - (0xFB05, "M", "st"), - (0xFB07, "X"), - (0xFB13, "M", "մն"), - (0xFB14, "M", "մե"), - (0xFB15, "M", "մի"), - (0xFB16, "M", "վն"), - (0xFB17, "M", "մխ"), - (0xFB18, "X"), - (0xFB1D, "M", "יִ"), - (0xFB1E, "V"), - (0xFB1F, "M", "ײַ"), - (0xFB20, "M", "ע"), - (0xFB21, "M", "א"), - (0xFB22, "M", "ד"), - (0xFB23, "M", "ה"), - (0xFB24, "M", "כ"), - (0xFB25, "M", "ל"), - (0xFB26, "M", "ם"), - (0xFB27, "M", "ר"), - (0xFB28, "M", "ת"), - (0xFB29, "M", "+"), - (0xFB2A, "M", "שׁ"), - (0xFB2B, "M", "שׂ"), - (0xFB2C, "M", "שּׁ"), - (0xFB2D, "M", "שּׂ"), - (0xFB2E, "M", "אַ"), - (0xFB2F, "M", "אָ"), - (0xFB30, "M", "אּ"), - (0xFB31, "M", "בּ"), - (0xFB32, "M", "גּ"), - (0xFB33, "M", "דּ"), - (0xFB34, "M", "הּ"), - (0xFB35, "M", "וּ"), - (0xFB36, "M", "זּ"), - (0xFB37, "X"), - (0xFB38, "M", "טּ"), - (0xFB39, "M", "יּ"), - (0xFB3A, "M", "ךּ"), - (0xFB3B, "M", "כּ"), - (0xFB3C, "M", "לּ"), - (0xFB3D, "X"), - (0xFB3E, "M", "מּ"), - (0xFB3F, "X"), - (0xFB40, "M", "נּ"), - (0xFB41, "M", "סּ"), - (0xFB42, "X"), - (0xFB43, "M", "ףּ"), - (0xFB44, "M", "פּ"), - (0xFB45, "X"), - (0xFB46, "M", "צּ"), - (0xFB47, "M", "קּ"), - (0xFB48, "M", "רּ"), - (0xFB49, "M", "שּ"), - (0xFB4A, "M", "תּ"), - (0xFB4B, "M", "וֹ"), - (0xFB4C, "M", "בֿ"), - (0xFB4D, "M", "כֿ"), - (0xFB4E, "M", "פֿ"), - (0xFB4F, "M", "אל"), - (0xFB50, "M", "ٱ"), - (0xFB52, "M", "ٻ"), - (0xFB56, "M", "پ"), - ] - - -def _seg_45() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFB5A, "M", "ڀ"), - (0xFB5E, "M", "ٺ"), - (0xFB62, "M", "ٿ"), - (0xFB66, "M", "ٹ"), - (0xFB6A, "M", "ڤ"), - (0xFB6E, "M", "ڦ"), - (0xFB72, "M", "ڄ"), - (0xFB76, "M", "ڃ"), - (0xFB7A, "M", "چ"), - (0xFB7E, "M", "ڇ"), - (0xFB82, "M", "ڍ"), - (0xFB84, "M", "ڌ"), - (0xFB86, "M", "ڎ"), - (0xFB88, "M", "ڈ"), - (0xFB8A, "M", "ژ"), - (0xFB8C, "M", "ڑ"), - (0xFB8E, "M", "ک"), - (0xFB92, "M", "گ"), - (0xFB96, "M", "ڳ"), - (0xFB9A, "M", "ڱ"), - (0xFB9E, "M", "ں"), - (0xFBA0, "M", "ڻ"), - (0xFBA4, "M", "ۀ"), - (0xFBA6, "M", "ہ"), - (0xFBAA, "M", "ھ"), - (0xFBAE, "M", "ے"), - (0xFBB0, "M", "ۓ"), - (0xFBB2, "V"), - (0xFBC3, "X"), - (0xFBD3, "M", "ڭ"), - (0xFBD7, "M", "ۇ"), - (0xFBD9, "M", "ۆ"), - (0xFBDB, "M", "ۈ"), - (0xFBDD, "M", "ۇٴ"), - (0xFBDE, "M", "ۋ"), - (0xFBE0, "M", "ۅ"), - (0xFBE2, "M", "ۉ"), - (0xFBE4, "M", "ې"), - (0xFBE8, "M", "ى"), - (0xFBEA, "M", "ئا"), - (0xFBEC, "M", "ئە"), - (0xFBEE, "M", "ئو"), - (0xFBF0, "M", "ئۇ"), - (0xFBF2, "M", "ئۆ"), - (0xFBF4, "M", "ئۈ"), - (0xFBF6, "M", "ئې"), - (0xFBF9, "M", "ئى"), - (0xFBFC, "M", "ی"), - (0xFC00, "M", "ئج"), - (0xFC01, "M", "ئح"), - (0xFC02, "M", "ئم"), - (0xFC03, "M", "ئى"), - (0xFC04, "M", "ئي"), - (0xFC05, "M", "بج"), - (0xFC06, "M", "بح"), - (0xFC07, "M", "بخ"), - (0xFC08, "M", "بم"), - (0xFC09, "M", "بى"), - (0xFC0A, "M", "بي"), - (0xFC0B, "M", "تج"), - (0xFC0C, "M", "تح"), - (0xFC0D, "M", "تخ"), - (0xFC0E, "M", "تم"), - (0xFC0F, "M", "تى"), - (0xFC10, "M", "تي"), - (0xFC11, "M", "ثج"), - (0xFC12, "M", "ثم"), - (0xFC13, "M", "ثى"), - (0xFC14, "M", "ثي"), - (0xFC15, "M", "جح"), - (0xFC16, "M", "جم"), - (0xFC17, "M", "حج"), - (0xFC18, "M", "حم"), - (0xFC19, "M", "خج"), - (0xFC1A, "M", "خح"), - (0xFC1B, "M", "خم"), - (0xFC1C, "M", "سج"), - (0xFC1D, "M", "سح"), - (0xFC1E, "M", "سخ"), - (0xFC1F, "M", "سم"), - (0xFC20, "M", "صح"), - (0xFC21, "M", "صم"), - (0xFC22, "M", "ضج"), - (0xFC23, "M", "ضح"), - (0xFC24, "M", "ضخ"), - (0xFC25, "M", "ضم"), - (0xFC26, "M", "طح"), - (0xFC27, "M", "طم"), - (0xFC28, "M", "ظم"), - (0xFC29, "M", "عج"), - (0xFC2A, "M", "عم"), - (0xFC2B, "M", "غج"), - (0xFC2C, "M", "غم"), - (0xFC2D, "M", "فج"), - (0xFC2E, "M", "فح"), - (0xFC2F, "M", "فخ"), - (0xFC30, "M", "فم"), - (0xFC31, "M", "فى"), - (0xFC32, "M", "في"), - (0xFC33, "M", "قح"), - ] - - -def _seg_46() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFC34, "M", "قم"), - (0xFC35, "M", "قى"), - (0xFC36, "M", "قي"), - (0xFC37, "M", "كا"), - (0xFC38, "M", "كج"), - (0xFC39, "M", "كح"), - (0xFC3A, "M", "كخ"), - (0xFC3B, "M", "كل"), - (0xFC3C, "M", "كم"), - (0xFC3D, "M", "كى"), - (0xFC3E, "M", "كي"), - (0xFC3F, "M", "لج"), - (0xFC40, "M", "لح"), - (0xFC41, "M", "لخ"), - (0xFC42, "M", "لم"), - (0xFC43, "M", "لى"), - (0xFC44, "M", "لي"), - (0xFC45, "M", "مج"), - (0xFC46, "M", "مح"), - (0xFC47, "M", "مخ"), - (0xFC48, "M", "مم"), - (0xFC49, "M", "مى"), - (0xFC4A, "M", "مي"), - (0xFC4B, "M", "نج"), - (0xFC4C, "M", "نح"), - (0xFC4D, "M", "نخ"), - (0xFC4E, "M", "نم"), - (0xFC4F, "M", "نى"), - (0xFC50, "M", "ني"), - (0xFC51, "M", "هج"), - (0xFC52, "M", "هم"), - (0xFC53, "M", "هى"), - (0xFC54, "M", "هي"), - (0xFC55, "M", "يج"), - (0xFC56, "M", "يح"), - (0xFC57, "M", "يخ"), - (0xFC58, "M", "يم"), - (0xFC59, "M", "يى"), - (0xFC5A, "M", "يي"), - (0xFC5B, "M", "ذٰ"), - (0xFC5C, "M", "رٰ"), - (0xFC5D, "M", "ىٰ"), - (0xFC5E, "M", " ٌّ"), - (0xFC5F, "M", " ٍّ"), - (0xFC60, "M", " َّ"), - (0xFC61, "M", " ُّ"), - (0xFC62, "M", " ِّ"), - (0xFC63, "M", " ّٰ"), - (0xFC64, "M", "ئر"), - (0xFC65, "M", "ئز"), - (0xFC66, "M", "ئم"), - (0xFC67, "M", "ئن"), - (0xFC68, "M", "ئى"), - (0xFC69, "M", "ئي"), - (0xFC6A, "M", "بر"), - (0xFC6B, "M", "بز"), - (0xFC6C, "M", "بم"), - (0xFC6D, "M", "بن"), - (0xFC6E, "M", "بى"), - (0xFC6F, "M", "بي"), - (0xFC70, "M", "تر"), - (0xFC71, "M", "تز"), - (0xFC72, "M", "تم"), - (0xFC73, "M", "تن"), - (0xFC74, "M", "تى"), - (0xFC75, "M", "تي"), - (0xFC76, "M", "ثر"), - (0xFC77, "M", "ثز"), - (0xFC78, "M", "ثم"), - (0xFC79, "M", "ثن"), - (0xFC7A, "M", "ثى"), - (0xFC7B, "M", "ثي"), - (0xFC7C, "M", "فى"), - (0xFC7D, "M", "في"), - (0xFC7E, "M", "قى"), - (0xFC7F, "M", "قي"), - (0xFC80, "M", "كا"), - (0xFC81, "M", "كل"), - (0xFC82, "M", "كم"), - (0xFC83, "M", "كى"), - (0xFC84, "M", "كي"), - (0xFC85, "M", "لم"), - (0xFC86, "M", "لى"), - (0xFC87, "M", "لي"), - (0xFC88, "M", "ما"), - (0xFC89, "M", "مم"), - (0xFC8A, "M", "نر"), - (0xFC8B, "M", "نز"), - (0xFC8C, "M", "نم"), - (0xFC8D, "M", "نن"), - (0xFC8E, "M", "نى"), - (0xFC8F, "M", "ني"), - (0xFC90, "M", "ىٰ"), - (0xFC91, "M", "ير"), - (0xFC92, "M", "يز"), - (0xFC93, "M", "يم"), - (0xFC94, "M", "ين"), - (0xFC95, "M", "يى"), - (0xFC96, "M", "يي"), - (0xFC97, "M", "ئج"), - ] - - -def _seg_47() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFC98, "M", "ئح"), - (0xFC99, "M", "ئخ"), - (0xFC9A, "M", "ئم"), - (0xFC9B, "M", "ئه"), - (0xFC9C, "M", "بج"), - (0xFC9D, "M", "بح"), - (0xFC9E, "M", "بخ"), - (0xFC9F, "M", "بم"), - (0xFCA0, "M", "به"), - (0xFCA1, "M", "تج"), - (0xFCA2, "M", "تح"), - (0xFCA3, "M", "تخ"), - (0xFCA4, "M", "تم"), - (0xFCA5, "M", "ته"), - (0xFCA6, "M", "ثم"), - (0xFCA7, "M", "جح"), - (0xFCA8, "M", "جم"), - (0xFCA9, "M", "حج"), - (0xFCAA, "M", "حم"), - (0xFCAB, "M", "خج"), - (0xFCAC, "M", "خم"), - (0xFCAD, "M", "سج"), - (0xFCAE, "M", "سح"), - (0xFCAF, "M", "سخ"), - (0xFCB0, "M", "سم"), - (0xFCB1, "M", "صح"), - (0xFCB2, "M", "صخ"), - (0xFCB3, "M", "صم"), - (0xFCB4, "M", "ضج"), - (0xFCB5, "M", "ضح"), - (0xFCB6, "M", "ضخ"), - (0xFCB7, "M", "ضم"), - (0xFCB8, "M", "طح"), - (0xFCB9, "M", "ظم"), - (0xFCBA, "M", "عج"), - (0xFCBB, "M", "عم"), - (0xFCBC, "M", "غج"), - (0xFCBD, "M", "غم"), - (0xFCBE, "M", "فج"), - (0xFCBF, "M", "فح"), - (0xFCC0, "M", "فخ"), - (0xFCC1, "M", "فم"), - (0xFCC2, "M", "قح"), - (0xFCC3, "M", "قم"), - (0xFCC4, "M", "كج"), - (0xFCC5, "M", "كح"), - (0xFCC6, "M", "كخ"), - (0xFCC7, "M", "كل"), - (0xFCC8, "M", "كم"), - (0xFCC9, "M", "لج"), - (0xFCCA, "M", "لح"), - (0xFCCB, "M", "لخ"), - (0xFCCC, "M", "لم"), - (0xFCCD, "M", "له"), - (0xFCCE, "M", "مج"), - (0xFCCF, "M", "مح"), - (0xFCD0, "M", "مخ"), - (0xFCD1, "M", "مم"), - (0xFCD2, "M", "نج"), - (0xFCD3, "M", "نح"), - (0xFCD4, "M", "نخ"), - (0xFCD5, "M", "نم"), - (0xFCD6, "M", "نه"), - (0xFCD7, "M", "هج"), - (0xFCD8, "M", "هم"), - (0xFCD9, "M", "هٰ"), - (0xFCDA, "M", "يج"), - (0xFCDB, "M", "يح"), - (0xFCDC, "M", "يخ"), - (0xFCDD, "M", "يم"), - (0xFCDE, "M", "يه"), - (0xFCDF, "M", "ئم"), - (0xFCE0, "M", "ئه"), - (0xFCE1, "M", "بم"), - (0xFCE2, "M", "به"), - (0xFCE3, "M", "تم"), - (0xFCE4, "M", "ته"), - (0xFCE5, "M", "ثم"), - (0xFCE6, "M", "ثه"), - (0xFCE7, "M", "سم"), - (0xFCE8, "M", "سه"), - (0xFCE9, "M", "شم"), - (0xFCEA, "M", "شه"), - (0xFCEB, "M", "كل"), - (0xFCEC, "M", "كم"), - (0xFCED, "M", "لم"), - (0xFCEE, "M", "نم"), - (0xFCEF, "M", "نه"), - (0xFCF0, "M", "يم"), - (0xFCF1, "M", "يه"), - (0xFCF2, "M", "ـَّ"), - (0xFCF3, "M", "ـُّ"), - (0xFCF4, "M", "ـِّ"), - (0xFCF5, "M", "طى"), - (0xFCF6, "M", "طي"), - (0xFCF7, "M", "عى"), - (0xFCF8, "M", "عي"), - (0xFCF9, "M", "غى"), - (0xFCFA, "M", "غي"), - (0xFCFB, "M", "سى"), - ] - - -def _seg_48() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFCFC, "M", "سي"), - (0xFCFD, "M", "شى"), - (0xFCFE, "M", "شي"), - (0xFCFF, "M", "حى"), - (0xFD00, "M", "حي"), - (0xFD01, "M", "جى"), - (0xFD02, "M", "جي"), - (0xFD03, "M", "خى"), - (0xFD04, "M", "خي"), - (0xFD05, "M", "صى"), - (0xFD06, "M", "صي"), - (0xFD07, "M", "ضى"), - (0xFD08, "M", "ضي"), - (0xFD09, "M", "شج"), - (0xFD0A, "M", "شح"), - (0xFD0B, "M", "شخ"), - (0xFD0C, "M", "شم"), - (0xFD0D, "M", "شر"), - (0xFD0E, "M", "سر"), - (0xFD0F, "M", "صر"), - (0xFD10, "M", "ضر"), - (0xFD11, "M", "طى"), - (0xFD12, "M", "طي"), - (0xFD13, "M", "عى"), - (0xFD14, "M", "عي"), - (0xFD15, "M", "غى"), - (0xFD16, "M", "غي"), - (0xFD17, "M", "سى"), - (0xFD18, "M", "سي"), - (0xFD19, "M", "شى"), - (0xFD1A, "M", "شي"), - (0xFD1B, "M", "حى"), - (0xFD1C, "M", "حي"), - (0xFD1D, "M", "جى"), - (0xFD1E, "M", "جي"), - (0xFD1F, "M", "خى"), - (0xFD20, "M", "خي"), - (0xFD21, "M", "صى"), - (0xFD22, "M", "صي"), - (0xFD23, "M", "ضى"), - (0xFD24, "M", "ضي"), - (0xFD25, "M", "شج"), - (0xFD26, "M", "شح"), - (0xFD27, "M", "شخ"), - (0xFD28, "M", "شم"), - (0xFD29, "M", "شر"), - (0xFD2A, "M", "سر"), - (0xFD2B, "M", "صر"), - (0xFD2C, "M", "ضر"), - (0xFD2D, "M", "شج"), - (0xFD2E, "M", "شح"), - (0xFD2F, "M", "شخ"), - (0xFD30, "M", "شم"), - (0xFD31, "M", "سه"), - (0xFD32, "M", "شه"), - (0xFD33, "M", "طم"), - (0xFD34, "M", "سج"), - (0xFD35, "M", "سح"), - (0xFD36, "M", "سخ"), - (0xFD37, "M", "شج"), - (0xFD38, "M", "شح"), - (0xFD39, "M", "شخ"), - (0xFD3A, "M", "طم"), - (0xFD3B, "M", "ظم"), - (0xFD3C, "M", "اً"), - (0xFD3E, "V"), - (0xFD50, "M", "تجم"), - (0xFD51, "M", "تحج"), - (0xFD53, "M", "تحم"), - (0xFD54, "M", "تخم"), - (0xFD55, "M", "تمج"), - (0xFD56, "M", "تمح"), - (0xFD57, "M", "تمخ"), - (0xFD58, "M", "جمح"), - (0xFD5A, "M", "حمي"), - (0xFD5B, "M", "حمى"), - (0xFD5C, "M", "سحج"), - (0xFD5D, "M", "سجح"), - (0xFD5E, "M", "سجى"), - (0xFD5F, "M", "سمح"), - (0xFD61, "M", "سمج"), - (0xFD62, "M", "سمم"), - (0xFD64, "M", "صحح"), - (0xFD66, "M", "صمم"), - (0xFD67, "M", "شحم"), - (0xFD69, "M", "شجي"), - (0xFD6A, "M", "شمخ"), - (0xFD6C, "M", "شمم"), - (0xFD6E, "M", "ضحى"), - (0xFD6F, "M", "ضخم"), - (0xFD71, "M", "طمح"), - (0xFD73, "M", "طمم"), - (0xFD74, "M", "طمي"), - (0xFD75, "M", "عجم"), - (0xFD76, "M", "عمم"), - (0xFD78, "M", "عمى"), - (0xFD79, "M", "غمم"), - (0xFD7A, "M", "غمي"), - (0xFD7B, "M", "غمى"), - (0xFD7C, "M", "فخم"), - ] - - -def _seg_49() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFD7E, "M", "قمح"), - (0xFD7F, "M", "قمم"), - (0xFD80, "M", "لحم"), - (0xFD81, "M", "لحي"), - (0xFD82, "M", "لحى"), - (0xFD83, "M", "لجج"), - (0xFD85, "M", "لخم"), - (0xFD87, "M", "لمح"), - (0xFD89, "M", "محج"), - (0xFD8A, "M", "محم"), - (0xFD8B, "M", "محي"), - (0xFD8C, "M", "مجح"), - (0xFD8D, "M", "مجم"), - (0xFD8E, "M", "مخج"), - (0xFD8F, "M", "مخم"), - (0xFD90, "X"), - (0xFD92, "M", "مجخ"), - (0xFD93, "M", "همج"), - (0xFD94, "M", "همم"), - (0xFD95, "M", "نحم"), - (0xFD96, "M", "نحى"), - (0xFD97, "M", "نجم"), - (0xFD99, "M", "نجى"), - (0xFD9A, "M", "نمي"), - (0xFD9B, "M", "نمى"), - (0xFD9C, "M", "يمم"), - (0xFD9E, "M", "بخي"), - (0xFD9F, "M", "تجي"), - (0xFDA0, "M", "تجى"), - (0xFDA1, "M", "تخي"), - (0xFDA2, "M", "تخى"), - (0xFDA3, "M", "تمي"), - (0xFDA4, "M", "تمى"), - (0xFDA5, "M", "جمي"), - (0xFDA6, "M", "جحى"), - (0xFDA7, "M", "جمى"), - (0xFDA8, "M", "سخى"), - (0xFDA9, "M", "صحي"), - (0xFDAA, "M", "شحي"), - (0xFDAB, "M", "ضحي"), - (0xFDAC, "M", "لجي"), - (0xFDAD, "M", "لمي"), - (0xFDAE, "M", "يحي"), - (0xFDAF, "M", "يجي"), - (0xFDB0, "M", "يمي"), - (0xFDB1, "M", "ممي"), - (0xFDB2, "M", "قمي"), - (0xFDB3, "M", "نحي"), - (0xFDB4, "M", "قمح"), - (0xFDB5, "M", "لحم"), - (0xFDB6, "M", "عمي"), - (0xFDB7, "M", "كمي"), - (0xFDB8, "M", "نجح"), - (0xFDB9, "M", "مخي"), - (0xFDBA, "M", "لجم"), - (0xFDBB, "M", "كمم"), - (0xFDBC, "M", "لجم"), - (0xFDBD, "M", "نجح"), - (0xFDBE, "M", "جحي"), - (0xFDBF, "M", "حجي"), - (0xFDC0, "M", "مجي"), - (0xFDC1, "M", "فمي"), - (0xFDC2, "M", "بحي"), - (0xFDC3, "M", "كمم"), - (0xFDC4, "M", "عجم"), - (0xFDC5, "M", "صمم"), - (0xFDC6, "M", "سخي"), - (0xFDC7, "M", "نجي"), - (0xFDC8, "X"), - (0xFDCF, "V"), - (0xFDD0, "X"), - (0xFDF0, "M", "صلے"), - (0xFDF1, "M", "قلے"), - (0xFDF2, "M", "الله"), - (0xFDF3, "M", "اكبر"), - (0xFDF4, "M", "محمد"), - (0xFDF5, "M", "صلعم"), - (0xFDF6, "M", "رسول"), - (0xFDF7, "M", "عليه"), - (0xFDF8, "M", "وسلم"), - (0xFDF9, "M", "صلى"), - (0xFDFA, "M", "صلى الله عليه وسلم"), - (0xFDFB, "M", "جل جلاله"), - (0xFDFC, "M", "ریال"), - (0xFDFD, "V"), - (0xFE00, "I"), - (0xFE10, "M", ","), - (0xFE11, "M", "、"), - (0xFE12, "X"), - (0xFE13, "M", ":"), - (0xFE14, "M", ";"), - (0xFE15, "M", "!"), - (0xFE16, "M", "?"), - (0xFE17, "M", "〖"), - (0xFE18, "M", "〗"), - (0xFE19, "X"), - (0xFE20, "V"), - (0xFE30, "X"), - (0xFE31, "M", "—"), - (0xFE32, "M", "–"), - ] - - -def _seg_50() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFE33, "M", "_"), - (0xFE35, "M", "("), - (0xFE36, "M", ")"), - (0xFE37, "M", "{"), - (0xFE38, "M", "}"), - (0xFE39, "M", "〔"), - (0xFE3A, "M", "〕"), - (0xFE3B, "M", "【"), - (0xFE3C, "M", "】"), - (0xFE3D, "M", "《"), - (0xFE3E, "M", "》"), - (0xFE3F, "M", "〈"), - (0xFE40, "M", "〉"), - (0xFE41, "M", "「"), - (0xFE42, "M", "」"), - (0xFE43, "M", "『"), - (0xFE44, "M", "』"), - (0xFE45, "V"), - (0xFE47, "M", "["), - (0xFE48, "M", "]"), - (0xFE49, "M", " ̅"), - (0xFE4D, "M", "_"), - (0xFE50, "M", ","), - (0xFE51, "M", "、"), - (0xFE52, "X"), - (0xFE54, "M", ";"), - (0xFE55, "M", ":"), - (0xFE56, "M", "?"), - (0xFE57, "M", "!"), - (0xFE58, "M", "—"), - (0xFE59, "M", "("), - (0xFE5A, "M", ")"), - (0xFE5B, "M", "{"), - (0xFE5C, "M", "}"), - (0xFE5D, "M", "〔"), - (0xFE5E, "M", "〕"), - (0xFE5F, "M", "#"), - (0xFE60, "M", "&"), - (0xFE61, "M", "*"), - (0xFE62, "M", "+"), - (0xFE63, "M", "-"), - (0xFE64, "M", "<"), - (0xFE65, "M", ">"), - (0xFE66, "M", "="), - (0xFE67, "X"), - (0xFE68, "M", "\\"), - (0xFE69, "M", "$"), - (0xFE6A, "M", "%"), - (0xFE6B, "M", "@"), - (0xFE6C, "X"), - (0xFE70, "M", " ً"), - (0xFE71, "M", "ـً"), - (0xFE72, "M", " ٌ"), - (0xFE73, "V"), - (0xFE74, "M", " ٍ"), - (0xFE75, "X"), - (0xFE76, "M", " َ"), - (0xFE77, "M", "ـَ"), - (0xFE78, "M", " ُ"), - (0xFE79, "M", "ـُ"), - (0xFE7A, "M", " ِ"), - (0xFE7B, "M", "ـِ"), - (0xFE7C, "M", " ّ"), - (0xFE7D, "M", "ـّ"), - (0xFE7E, "M", " ْ"), - (0xFE7F, "M", "ـْ"), - (0xFE80, "M", "ء"), - (0xFE81, "M", "آ"), - (0xFE83, "M", "أ"), - (0xFE85, "M", "ؤ"), - (0xFE87, "M", "إ"), - (0xFE89, "M", "ئ"), - (0xFE8D, "M", "ا"), - (0xFE8F, "M", "ب"), - (0xFE93, "M", "ة"), - (0xFE95, "M", "ت"), - (0xFE99, "M", "ث"), - (0xFE9D, "M", "ج"), - (0xFEA1, "M", "ح"), - (0xFEA5, "M", "خ"), - (0xFEA9, "M", "د"), - (0xFEAB, "M", "ذ"), - (0xFEAD, "M", "ر"), - (0xFEAF, "M", "ز"), - (0xFEB1, "M", "س"), - (0xFEB5, "M", "ش"), - (0xFEB9, "M", "ص"), - (0xFEBD, "M", "ض"), - (0xFEC1, "M", "ط"), - (0xFEC5, "M", "ظ"), - (0xFEC9, "M", "ع"), - (0xFECD, "M", "غ"), - (0xFED1, "M", "ف"), - (0xFED5, "M", "ق"), - (0xFED9, "M", "ك"), - (0xFEDD, "M", "ل"), - (0xFEE1, "M", "م"), - (0xFEE5, "M", "ن"), - (0xFEE9, "M", "ه"), - (0xFEED, "M", "و"), - ] - - -def _seg_51() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFEEF, "M", "ى"), - (0xFEF1, "M", "ي"), - (0xFEF5, "M", "لآ"), - (0xFEF7, "M", "لأ"), - (0xFEF9, "M", "لإ"), - (0xFEFB, "M", "لا"), - (0xFEFD, "X"), - (0xFEFF, "I"), - (0xFF00, "X"), - (0xFF01, "M", "!"), - (0xFF02, "M", '"'), - (0xFF03, "M", "#"), - (0xFF04, "M", "$"), - (0xFF05, "M", "%"), - (0xFF06, "M", "&"), - (0xFF07, "M", "'"), - (0xFF08, "M", "("), - (0xFF09, "M", ")"), - (0xFF0A, "M", "*"), - (0xFF0B, "M", "+"), - (0xFF0C, "M", ","), - (0xFF0D, "M", "-"), - (0xFF0E, "M", "."), - (0xFF0F, "M", "/"), - (0xFF10, "M", "0"), - (0xFF11, "M", "1"), - (0xFF12, "M", "2"), - (0xFF13, "M", "3"), - (0xFF14, "M", "4"), - (0xFF15, "M", "5"), - (0xFF16, "M", "6"), - (0xFF17, "M", "7"), - (0xFF18, "M", "8"), - (0xFF19, "M", "9"), - (0xFF1A, "M", ":"), - (0xFF1B, "M", ";"), - (0xFF1C, "M", "<"), - (0xFF1D, "M", "="), - (0xFF1E, "M", ">"), - (0xFF1F, "M", "?"), - (0xFF20, "M", "@"), - (0xFF21, "M", "a"), - (0xFF22, "M", "b"), - (0xFF23, "M", "c"), - (0xFF24, "M", "d"), - (0xFF25, "M", "e"), - (0xFF26, "M", "f"), - (0xFF27, "M", "g"), - (0xFF28, "M", "h"), - (0xFF29, "M", "i"), - (0xFF2A, "M", "j"), - (0xFF2B, "M", "k"), - (0xFF2C, "M", "l"), - (0xFF2D, "M", "m"), - (0xFF2E, "M", "n"), - (0xFF2F, "M", "o"), - (0xFF30, "M", "p"), - (0xFF31, "M", "q"), - (0xFF32, "M", "r"), - (0xFF33, "M", "s"), - (0xFF34, "M", "t"), - (0xFF35, "M", "u"), - (0xFF36, "M", "v"), - (0xFF37, "M", "w"), - (0xFF38, "M", "x"), - (0xFF39, "M", "y"), - (0xFF3A, "M", "z"), - (0xFF3B, "M", "["), - (0xFF3C, "M", "\\"), - (0xFF3D, "M", "]"), - (0xFF3E, "M", "^"), - (0xFF3F, "M", "_"), - (0xFF40, "M", "`"), - (0xFF41, "M", "a"), - (0xFF42, "M", "b"), - (0xFF43, "M", "c"), - (0xFF44, "M", "d"), - (0xFF45, "M", "e"), - (0xFF46, "M", "f"), - (0xFF47, "M", "g"), - (0xFF48, "M", "h"), - (0xFF49, "M", "i"), - (0xFF4A, "M", "j"), - (0xFF4B, "M", "k"), - (0xFF4C, "M", "l"), - (0xFF4D, "M", "m"), - (0xFF4E, "M", "n"), - (0xFF4F, "M", "o"), - (0xFF50, "M", "p"), - (0xFF51, "M", "q"), - (0xFF52, "M", "r"), - (0xFF53, "M", "s"), - (0xFF54, "M", "t"), - (0xFF55, "M", "u"), - (0xFF56, "M", "v"), - (0xFF57, "M", "w"), - (0xFF58, "M", "x"), - (0xFF59, "M", "y"), - (0xFF5A, "M", "z"), - (0xFF5B, "M", "{"), - ] - - -def _seg_52() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFF5C, "M", "|"), - (0xFF5D, "M", "}"), - (0xFF5E, "M", "~"), - (0xFF5F, "M", "⦅"), - (0xFF60, "M", "⦆"), - (0xFF61, "M", "."), - (0xFF62, "M", "「"), - (0xFF63, "M", "」"), - (0xFF64, "M", "、"), - (0xFF65, "M", "・"), - (0xFF66, "M", "ヲ"), - (0xFF67, "M", "ァ"), - (0xFF68, "M", "ィ"), - (0xFF69, "M", "ゥ"), - (0xFF6A, "M", "ェ"), - (0xFF6B, "M", "ォ"), - (0xFF6C, "M", "ャ"), - (0xFF6D, "M", "ュ"), - (0xFF6E, "M", "ョ"), - (0xFF6F, "M", "ッ"), - (0xFF70, "M", "ー"), - (0xFF71, "M", "ア"), - (0xFF72, "M", "イ"), - (0xFF73, "M", "ウ"), - (0xFF74, "M", "エ"), - (0xFF75, "M", "オ"), - (0xFF76, "M", "カ"), - (0xFF77, "M", "キ"), - (0xFF78, "M", "ク"), - (0xFF79, "M", "ケ"), - (0xFF7A, "M", "コ"), - (0xFF7B, "M", "サ"), - (0xFF7C, "M", "シ"), - (0xFF7D, "M", "ス"), - (0xFF7E, "M", "セ"), - (0xFF7F, "M", "ソ"), - (0xFF80, "M", "タ"), - (0xFF81, "M", "チ"), - (0xFF82, "M", "ツ"), - (0xFF83, "M", "テ"), - (0xFF84, "M", "ト"), - (0xFF85, "M", "ナ"), - (0xFF86, "M", "ニ"), - (0xFF87, "M", "ヌ"), - (0xFF88, "M", "ネ"), - (0xFF89, "M", "ノ"), - (0xFF8A, "M", "ハ"), - (0xFF8B, "M", "ヒ"), - (0xFF8C, "M", "フ"), - (0xFF8D, "M", "ヘ"), - (0xFF8E, "M", "ホ"), - (0xFF8F, "M", "マ"), - (0xFF90, "M", "ミ"), - (0xFF91, "M", "ム"), - (0xFF92, "M", "メ"), - (0xFF93, "M", "モ"), - (0xFF94, "M", "ヤ"), - (0xFF95, "M", "ユ"), - (0xFF96, "M", "ヨ"), - (0xFF97, "M", "ラ"), - (0xFF98, "M", "リ"), - (0xFF99, "M", "ル"), - (0xFF9A, "M", "レ"), - (0xFF9B, "M", "ロ"), - (0xFF9C, "M", "ワ"), - (0xFF9D, "M", "ン"), - (0xFF9E, "M", "゙"), - (0xFF9F, "M", "゚"), - (0xFFA0, "I"), - (0xFFA1, "M", "ᄀ"), - (0xFFA2, "M", "ᄁ"), - (0xFFA3, "M", "ᆪ"), - (0xFFA4, "M", "ᄂ"), - (0xFFA5, "M", "ᆬ"), - (0xFFA6, "M", "ᆭ"), - (0xFFA7, "M", "ᄃ"), - (0xFFA8, "M", "ᄄ"), - (0xFFA9, "M", "ᄅ"), - (0xFFAA, "M", "ᆰ"), - (0xFFAB, "M", "ᆱ"), - (0xFFAC, "M", "ᆲ"), - (0xFFAD, "M", "ᆳ"), - (0xFFAE, "M", "ᆴ"), - (0xFFAF, "M", "ᆵ"), - (0xFFB0, "M", "ᄚ"), - (0xFFB1, "M", "ᄆ"), - (0xFFB2, "M", "ᄇ"), - (0xFFB3, "M", "ᄈ"), - (0xFFB4, "M", "ᄡ"), - (0xFFB5, "M", "ᄉ"), - (0xFFB6, "M", "ᄊ"), - (0xFFB7, "M", "ᄋ"), - (0xFFB8, "M", "ᄌ"), - (0xFFB9, "M", "ᄍ"), - (0xFFBA, "M", "ᄎ"), - (0xFFBB, "M", "ᄏ"), - (0xFFBC, "M", "ᄐ"), - (0xFFBD, "M", "ᄑ"), - (0xFFBE, "M", "ᄒ"), - (0xFFBF, "X"), - ] - - -def _seg_53() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0xFFC2, "M", "ᅡ"), - (0xFFC3, "M", "ᅢ"), - (0xFFC4, "M", "ᅣ"), - (0xFFC5, "M", "ᅤ"), - (0xFFC6, "M", "ᅥ"), - (0xFFC7, "M", "ᅦ"), - (0xFFC8, "X"), - (0xFFCA, "M", "ᅧ"), - (0xFFCB, "M", "ᅨ"), - (0xFFCC, "M", "ᅩ"), - (0xFFCD, "M", "ᅪ"), - (0xFFCE, "M", "ᅫ"), - (0xFFCF, "M", "ᅬ"), - (0xFFD0, "X"), - (0xFFD2, "M", "ᅭ"), - (0xFFD3, "M", "ᅮ"), - (0xFFD4, "M", "ᅯ"), - (0xFFD5, "M", "ᅰ"), - (0xFFD6, "M", "ᅱ"), - (0xFFD7, "M", "ᅲ"), - (0xFFD8, "X"), - (0xFFDA, "M", "ᅳ"), - (0xFFDB, "M", "ᅴ"), - (0xFFDC, "M", "ᅵ"), - (0xFFDD, "X"), - (0xFFE0, "M", "¢"), - (0xFFE1, "M", "£"), - (0xFFE2, "M", "¬"), - (0xFFE3, "M", " ̄"), - (0xFFE4, "M", "¦"), - (0xFFE5, "M", "¥"), - (0xFFE6, "M", "₩"), - (0xFFE7, "X"), - (0xFFE8, "M", "│"), - (0xFFE9, "M", "←"), - (0xFFEA, "M", "↑"), - (0xFFEB, "M", "→"), - (0xFFEC, "M", "↓"), - (0xFFED, "M", "■"), - (0xFFEE, "M", "○"), - (0xFFEF, "X"), - (0x10000, "V"), - (0x1000C, "X"), - (0x1000D, "V"), - (0x10027, "X"), - (0x10028, "V"), - (0x1003B, "X"), - (0x1003C, "V"), - (0x1003E, "X"), - (0x1003F, "V"), - (0x1004E, "X"), - (0x10050, "V"), - (0x1005E, "X"), - (0x10080, "V"), - (0x100FB, "X"), - (0x10100, "V"), - (0x10103, "X"), - (0x10107, "V"), - (0x10134, "X"), - (0x10137, "V"), - (0x1018F, "X"), - (0x10190, "V"), - (0x1019D, "X"), - (0x101A0, "V"), - (0x101A1, "X"), - (0x101D0, "V"), - (0x101FE, "X"), - (0x10280, "V"), - (0x1029D, "X"), - (0x102A0, "V"), - (0x102D1, "X"), - (0x102E0, "V"), - (0x102FC, "X"), - (0x10300, "V"), - (0x10324, "X"), - (0x1032D, "V"), - (0x1034B, "X"), - (0x10350, "V"), - (0x1037B, "X"), - (0x10380, "V"), - (0x1039E, "X"), - (0x1039F, "V"), - (0x103C4, "X"), - (0x103C8, "V"), - (0x103D6, "X"), - (0x10400, "M", "𐐨"), - (0x10401, "M", "𐐩"), - (0x10402, "M", "𐐪"), - (0x10403, "M", "𐐫"), - (0x10404, "M", "𐐬"), - (0x10405, "M", "𐐭"), - (0x10406, "M", "𐐮"), - (0x10407, "M", "𐐯"), - (0x10408, "M", "𐐰"), - (0x10409, "M", "𐐱"), - (0x1040A, "M", "𐐲"), - (0x1040B, "M", "𐐳"), - (0x1040C, "M", "𐐴"), - (0x1040D, "M", "𐐵"), - (0x1040E, "M", "𐐶"), - ] - - -def _seg_54() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1040F, "M", "𐐷"), - (0x10410, "M", "𐐸"), - (0x10411, "M", "𐐹"), - (0x10412, "M", "𐐺"), - (0x10413, "M", "𐐻"), - (0x10414, "M", "𐐼"), - (0x10415, "M", "𐐽"), - (0x10416, "M", "𐐾"), - (0x10417, "M", "𐐿"), - (0x10418, "M", "𐑀"), - (0x10419, "M", "𐑁"), - (0x1041A, "M", "𐑂"), - (0x1041B, "M", "𐑃"), - (0x1041C, "M", "𐑄"), - (0x1041D, "M", "𐑅"), - (0x1041E, "M", "𐑆"), - (0x1041F, "M", "𐑇"), - (0x10420, "M", "𐑈"), - (0x10421, "M", "𐑉"), - (0x10422, "M", "𐑊"), - (0x10423, "M", "𐑋"), - (0x10424, "M", "𐑌"), - (0x10425, "M", "𐑍"), - (0x10426, "M", "𐑎"), - (0x10427, "M", "𐑏"), - (0x10428, "V"), - (0x1049E, "X"), - (0x104A0, "V"), - (0x104AA, "X"), - (0x104B0, "M", "𐓘"), - (0x104B1, "M", "𐓙"), - (0x104B2, "M", "𐓚"), - (0x104B3, "M", "𐓛"), - (0x104B4, "M", "𐓜"), - (0x104B5, "M", "𐓝"), - (0x104B6, "M", "𐓞"), - (0x104B7, "M", "𐓟"), - (0x104B8, "M", "𐓠"), - (0x104B9, "M", "𐓡"), - (0x104BA, "M", "𐓢"), - (0x104BB, "M", "𐓣"), - (0x104BC, "M", "𐓤"), - (0x104BD, "M", "𐓥"), - (0x104BE, "M", "𐓦"), - (0x104BF, "M", "𐓧"), - (0x104C0, "M", "𐓨"), - (0x104C1, "M", "𐓩"), - (0x104C2, "M", "𐓪"), - (0x104C3, "M", "𐓫"), - (0x104C4, "M", "𐓬"), - (0x104C5, "M", "𐓭"), - (0x104C6, "M", "𐓮"), - (0x104C7, "M", "𐓯"), - (0x104C8, "M", "𐓰"), - (0x104C9, "M", "𐓱"), - (0x104CA, "M", "𐓲"), - (0x104CB, "M", "𐓳"), - (0x104CC, "M", "𐓴"), - (0x104CD, "M", "𐓵"), - (0x104CE, "M", "𐓶"), - (0x104CF, "M", "𐓷"), - (0x104D0, "M", "𐓸"), - (0x104D1, "M", "𐓹"), - (0x104D2, "M", "𐓺"), - (0x104D3, "M", "𐓻"), - (0x104D4, "X"), - (0x104D8, "V"), - (0x104FC, "X"), - (0x10500, "V"), - (0x10528, "X"), - (0x10530, "V"), - (0x10564, "X"), - (0x1056F, "V"), - (0x10570, "M", "𐖗"), - (0x10571, "M", "𐖘"), - (0x10572, "M", "𐖙"), - (0x10573, "M", "𐖚"), - (0x10574, "M", "𐖛"), - (0x10575, "M", "𐖜"), - (0x10576, "M", "𐖝"), - (0x10577, "M", "𐖞"), - (0x10578, "M", "𐖟"), - (0x10579, "M", "𐖠"), - (0x1057A, "M", "𐖡"), - (0x1057B, "X"), - (0x1057C, "M", "𐖣"), - (0x1057D, "M", "𐖤"), - (0x1057E, "M", "𐖥"), - (0x1057F, "M", "𐖦"), - (0x10580, "M", "𐖧"), - (0x10581, "M", "𐖨"), - (0x10582, "M", "𐖩"), - (0x10583, "M", "𐖪"), - (0x10584, "M", "𐖫"), - (0x10585, "M", "𐖬"), - (0x10586, "M", "𐖭"), - (0x10587, "M", "𐖮"), - (0x10588, "M", "𐖯"), - (0x10589, "M", "𐖰"), - (0x1058A, "M", "𐖱"), - ] - - -def _seg_55() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1058B, "X"), - (0x1058C, "M", "𐖳"), - (0x1058D, "M", "𐖴"), - (0x1058E, "M", "𐖵"), - (0x1058F, "M", "𐖶"), - (0x10590, "M", "𐖷"), - (0x10591, "M", "𐖸"), - (0x10592, "M", "𐖹"), - (0x10593, "X"), - (0x10594, "M", "𐖻"), - (0x10595, "M", "𐖼"), - (0x10596, "X"), - (0x10597, "V"), - (0x105A2, "X"), - (0x105A3, "V"), - (0x105B2, "X"), - (0x105B3, "V"), - (0x105BA, "X"), - (0x105BB, "V"), - (0x105BD, "X"), - (0x105C0, "V"), - (0x105F4, "X"), - (0x10600, "V"), - (0x10737, "X"), - (0x10740, "V"), - (0x10756, "X"), - (0x10760, "V"), - (0x10768, "X"), - (0x10780, "V"), - (0x10781, "M", "ː"), - (0x10782, "M", "ˑ"), - (0x10783, "M", "æ"), - (0x10784, "M", "ʙ"), - (0x10785, "M", "ɓ"), - (0x10786, "X"), - (0x10787, "M", "ʣ"), - (0x10788, "M", "ꭦ"), - (0x10789, "M", "ʥ"), - (0x1078A, "M", "ʤ"), - (0x1078B, "M", "ɖ"), - (0x1078C, "M", "ɗ"), - (0x1078D, "M", "ᶑ"), - (0x1078E, "M", "ɘ"), - (0x1078F, "M", "ɞ"), - (0x10790, "M", "ʩ"), - (0x10791, "M", "ɤ"), - (0x10792, "M", "ɢ"), - (0x10793, "M", "ɠ"), - (0x10794, "M", "ʛ"), - (0x10795, "M", "ħ"), - (0x10796, "M", "ʜ"), - (0x10797, "M", "ɧ"), - (0x10798, "M", "ʄ"), - (0x10799, "M", "ʪ"), - (0x1079A, "M", "ʫ"), - (0x1079B, "M", "ɬ"), - (0x1079C, "M", "𝼄"), - (0x1079D, "M", "ꞎ"), - (0x1079E, "M", "ɮ"), - (0x1079F, "M", "𝼅"), - (0x107A0, "M", "ʎ"), - (0x107A1, "M", "𝼆"), - (0x107A2, "M", "ø"), - (0x107A3, "M", "ɶ"), - (0x107A4, "M", "ɷ"), - (0x107A5, "M", "q"), - (0x107A6, "M", "ɺ"), - (0x107A7, "M", "𝼈"), - (0x107A8, "M", "ɽ"), - (0x107A9, "M", "ɾ"), - (0x107AA, "M", "ʀ"), - (0x107AB, "M", "ʨ"), - (0x107AC, "M", "ʦ"), - (0x107AD, "M", "ꭧ"), - (0x107AE, "M", "ʧ"), - (0x107AF, "M", "ʈ"), - (0x107B0, "M", "ⱱ"), - (0x107B1, "X"), - (0x107B2, "M", "ʏ"), - (0x107B3, "M", "ʡ"), - (0x107B4, "M", "ʢ"), - (0x107B5, "M", "ʘ"), - (0x107B6, "M", "ǀ"), - (0x107B7, "M", "ǁ"), - (0x107B8, "M", "ǂ"), - (0x107B9, "M", "𝼊"), - (0x107BA, "M", "𝼞"), - (0x107BB, "X"), - (0x10800, "V"), - (0x10806, "X"), - (0x10808, "V"), - (0x10809, "X"), - (0x1080A, "V"), - (0x10836, "X"), - (0x10837, "V"), - (0x10839, "X"), - (0x1083C, "V"), - (0x1083D, "X"), - (0x1083F, "V"), - (0x10856, "X"), - ] - - -def _seg_56() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10857, "V"), - (0x1089F, "X"), - (0x108A7, "V"), - (0x108B0, "X"), - (0x108E0, "V"), - (0x108F3, "X"), - (0x108F4, "V"), - (0x108F6, "X"), - (0x108FB, "V"), - (0x1091C, "X"), - (0x1091F, "V"), - (0x1093A, "X"), - (0x1093F, "V"), - (0x10940, "X"), - (0x10980, "V"), - (0x109B8, "X"), - (0x109BC, "V"), - (0x109D0, "X"), - (0x109D2, "V"), - (0x10A04, "X"), - (0x10A05, "V"), - (0x10A07, "X"), - (0x10A0C, "V"), - (0x10A14, "X"), - (0x10A15, "V"), - (0x10A18, "X"), - (0x10A19, "V"), - (0x10A36, "X"), - (0x10A38, "V"), - (0x10A3B, "X"), - (0x10A3F, "V"), - (0x10A49, "X"), - (0x10A50, "V"), - (0x10A59, "X"), - (0x10A60, "V"), - (0x10AA0, "X"), - (0x10AC0, "V"), - (0x10AE7, "X"), - (0x10AEB, "V"), - (0x10AF7, "X"), - (0x10B00, "V"), - (0x10B36, "X"), - (0x10B39, "V"), - (0x10B56, "X"), - (0x10B58, "V"), - (0x10B73, "X"), - (0x10B78, "V"), - (0x10B92, "X"), - (0x10B99, "V"), - (0x10B9D, "X"), - (0x10BA9, "V"), - (0x10BB0, "X"), - (0x10C00, "V"), - (0x10C49, "X"), - (0x10C80, "M", "𐳀"), - (0x10C81, "M", "𐳁"), - (0x10C82, "M", "𐳂"), - (0x10C83, "M", "𐳃"), - (0x10C84, "M", "𐳄"), - (0x10C85, "M", "𐳅"), - (0x10C86, "M", "𐳆"), - (0x10C87, "M", "𐳇"), - (0x10C88, "M", "𐳈"), - (0x10C89, "M", "𐳉"), - (0x10C8A, "M", "𐳊"), - (0x10C8B, "M", "𐳋"), - (0x10C8C, "M", "𐳌"), - (0x10C8D, "M", "𐳍"), - (0x10C8E, "M", "𐳎"), - (0x10C8F, "M", "𐳏"), - (0x10C90, "M", "𐳐"), - (0x10C91, "M", "𐳑"), - (0x10C92, "M", "𐳒"), - (0x10C93, "M", "𐳓"), - (0x10C94, "M", "𐳔"), - (0x10C95, "M", "𐳕"), - (0x10C96, "M", "𐳖"), - (0x10C97, "M", "𐳗"), - (0x10C98, "M", "𐳘"), - (0x10C99, "M", "𐳙"), - (0x10C9A, "M", "𐳚"), - (0x10C9B, "M", "𐳛"), - (0x10C9C, "M", "𐳜"), - (0x10C9D, "M", "𐳝"), - (0x10C9E, "M", "𐳞"), - (0x10C9F, "M", "𐳟"), - (0x10CA0, "M", "𐳠"), - (0x10CA1, "M", "𐳡"), - (0x10CA2, "M", "𐳢"), - (0x10CA3, "M", "𐳣"), - (0x10CA4, "M", "𐳤"), - (0x10CA5, "M", "𐳥"), - (0x10CA6, "M", "𐳦"), - (0x10CA7, "M", "𐳧"), - (0x10CA8, "M", "𐳨"), - (0x10CA9, "M", "𐳩"), - (0x10CAA, "M", "𐳪"), - (0x10CAB, "M", "𐳫"), - (0x10CAC, "M", "𐳬"), - (0x10CAD, "M", "𐳭"), - ] - - -def _seg_57() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x10CAE, "M", "𐳮"), - (0x10CAF, "M", "𐳯"), - (0x10CB0, "M", "𐳰"), - (0x10CB1, "M", "𐳱"), - (0x10CB2, "M", "𐳲"), - (0x10CB3, "X"), - (0x10CC0, "V"), - (0x10CF3, "X"), - (0x10CFA, "V"), - (0x10D28, "X"), - (0x10D30, "V"), - (0x10D3A, "X"), - (0x10D40, "V"), - (0x10D50, "M", "𐵰"), - (0x10D51, "M", "𐵱"), - (0x10D52, "M", "𐵲"), - (0x10D53, "M", "𐵳"), - (0x10D54, "M", "𐵴"), - (0x10D55, "M", "𐵵"), - (0x10D56, "M", "𐵶"), - (0x10D57, "M", "𐵷"), - (0x10D58, "M", "𐵸"), - (0x10D59, "M", "𐵹"), - (0x10D5A, "M", "𐵺"), - (0x10D5B, "M", "𐵻"), - (0x10D5C, "M", "𐵼"), - (0x10D5D, "M", "𐵽"), - (0x10D5E, "M", "𐵾"), - (0x10D5F, "M", "𐵿"), - (0x10D60, "M", "𐶀"), - (0x10D61, "M", "𐶁"), - (0x10D62, "M", "𐶂"), - (0x10D63, "M", "𐶃"), - (0x10D64, "M", "𐶄"), - (0x10D65, "M", "𐶅"), - (0x10D66, "X"), - (0x10D69, "V"), - (0x10D86, "X"), - (0x10D8E, "V"), - (0x10D90, "X"), - (0x10E60, "V"), - (0x10E7F, "X"), - (0x10E80, "V"), - (0x10EAA, "X"), - (0x10EAB, "V"), - (0x10EAE, "X"), - (0x10EB0, "V"), - (0x10EB2, "X"), - (0x10EC2, "V"), - (0x10EC5, "X"), - (0x10EFC, "V"), - (0x10F28, "X"), - (0x10F30, "V"), - (0x10F5A, "X"), - (0x10F70, "V"), - (0x10F8A, "X"), - (0x10FB0, "V"), - (0x10FCC, "X"), - (0x10FE0, "V"), - (0x10FF7, "X"), - (0x11000, "V"), - (0x1104E, "X"), - (0x11052, "V"), - (0x11076, "X"), - (0x1107F, "V"), - (0x110BD, "X"), - (0x110BE, "V"), - (0x110C3, "X"), - (0x110D0, "V"), - (0x110E9, "X"), - (0x110F0, "V"), - (0x110FA, "X"), - (0x11100, "V"), - (0x11135, "X"), - (0x11136, "V"), - (0x11148, "X"), - (0x11150, "V"), - (0x11177, "X"), - (0x11180, "V"), - (0x111E0, "X"), - (0x111E1, "V"), - (0x111F5, "X"), - (0x11200, "V"), - (0x11212, "X"), - (0x11213, "V"), - (0x11242, "X"), - (0x11280, "V"), - (0x11287, "X"), - (0x11288, "V"), - (0x11289, "X"), - (0x1128A, "V"), - (0x1128E, "X"), - (0x1128F, "V"), - (0x1129E, "X"), - (0x1129F, "V"), - (0x112AA, "X"), - (0x112B0, "V"), - (0x112EB, "X"), - (0x112F0, "V"), - (0x112FA, "X"), - ] - - -def _seg_58() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x11300, "V"), - (0x11304, "X"), - (0x11305, "V"), - (0x1130D, "X"), - (0x1130F, "V"), - (0x11311, "X"), - (0x11313, "V"), - (0x11329, "X"), - (0x1132A, "V"), - (0x11331, "X"), - (0x11332, "V"), - (0x11334, "X"), - (0x11335, "V"), - (0x1133A, "X"), - (0x1133B, "V"), - (0x11345, "X"), - (0x11347, "V"), - (0x11349, "X"), - (0x1134B, "V"), - (0x1134E, "X"), - (0x11350, "V"), - (0x11351, "X"), - (0x11357, "V"), - (0x11358, "X"), - (0x1135D, "V"), - (0x11364, "X"), - (0x11366, "V"), - (0x1136D, "X"), - (0x11370, "V"), - (0x11375, "X"), - (0x11380, "V"), - (0x1138A, "X"), - (0x1138B, "V"), - (0x1138C, "X"), - (0x1138E, "V"), - (0x1138F, "X"), - (0x11390, "V"), - (0x113B6, "X"), - (0x113B7, "V"), - (0x113C1, "X"), - (0x113C2, "V"), - (0x113C3, "X"), - (0x113C5, "V"), - (0x113C6, "X"), - (0x113C7, "V"), - (0x113CB, "X"), - (0x113CC, "V"), - (0x113D6, "X"), - (0x113D7, "V"), - (0x113D9, "X"), - (0x113E1, "V"), - (0x113E3, "X"), - (0x11400, "V"), - (0x1145C, "X"), - (0x1145D, "V"), - (0x11462, "X"), - (0x11480, "V"), - (0x114C8, "X"), - (0x114D0, "V"), - (0x114DA, "X"), - (0x11580, "V"), - (0x115B6, "X"), - (0x115B8, "V"), - (0x115DE, "X"), - (0x11600, "V"), - (0x11645, "X"), - (0x11650, "V"), - (0x1165A, "X"), - (0x11660, "V"), - (0x1166D, "X"), - (0x11680, "V"), - (0x116BA, "X"), - (0x116C0, "V"), - (0x116CA, "X"), - (0x116D0, "V"), - (0x116E4, "X"), - (0x11700, "V"), - (0x1171B, "X"), - (0x1171D, "V"), - (0x1172C, "X"), - (0x11730, "V"), - (0x11747, "X"), - (0x11800, "V"), - (0x1183C, "X"), - (0x118A0, "M", "𑣀"), - (0x118A1, "M", "𑣁"), - (0x118A2, "M", "𑣂"), - (0x118A3, "M", "𑣃"), - (0x118A4, "M", "𑣄"), - (0x118A5, "M", "𑣅"), - (0x118A6, "M", "𑣆"), - (0x118A7, "M", "𑣇"), - (0x118A8, "M", "𑣈"), - (0x118A9, "M", "𑣉"), - (0x118AA, "M", "𑣊"), - (0x118AB, "M", "𑣋"), - (0x118AC, "M", "𑣌"), - (0x118AD, "M", "𑣍"), - (0x118AE, "M", "𑣎"), - (0x118AF, "M", "𑣏"), - ] - - -def _seg_59() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x118B0, "M", "𑣐"), - (0x118B1, "M", "𑣑"), - (0x118B2, "M", "𑣒"), - (0x118B3, "M", "𑣓"), - (0x118B4, "M", "𑣔"), - (0x118B5, "M", "𑣕"), - (0x118B6, "M", "𑣖"), - (0x118B7, "M", "𑣗"), - (0x118B8, "M", "𑣘"), - (0x118B9, "M", "𑣙"), - (0x118BA, "M", "𑣚"), - (0x118BB, "M", "𑣛"), - (0x118BC, "M", "𑣜"), - (0x118BD, "M", "𑣝"), - (0x118BE, "M", "𑣞"), - (0x118BF, "M", "𑣟"), - (0x118C0, "V"), - (0x118F3, "X"), - (0x118FF, "V"), - (0x11907, "X"), - (0x11909, "V"), - (0x1190A, "X"), - (0x1190C, "V"), - (0x11914, "X"), - (0x11915, "V"), - (0x11917, "X"), - (0x11918, "V"), - (0x11936, "X"), - (0x11937, "V"), - (0x11939, "X"), - (0x1193B, "V"), - (0x11947, "X"), - (0x11950, "V"), - (0x1195A, "X"), - (0x119A0, "V"), - (0x119A8, "X"), - (0x119AA, "V"), - (0x119D8, "X"), - (0x119DA, "V"), - (0x119E5, "X"), - (0x11A00, "V"), - (0x11A48, "X"), - (0x11A50, "V"), - (0x11AA3, "X"), - (0x11AB0, "V"), - (0x11AF9, "X"), - (0x11B00, "V"), - (0x11B0A, "X"), - (0x11BC0, "V"), - (0x11BE2, "X"), - (0x11BF0, "V"), - (0x11BFA, "X"), - (0x11C00, "V"), - (0x11C09, "X"), - (0x11C0A, "V"), - (0x11C37, "X"), - (0x11C38, "V"), - (0x11C46, "X"), - (0x11C50, "V"), - (0x11C6D, "X"), - (0x11C70, "V"), - (0x11C90, "X"), - (0x11C92, "V"), - (0x11CA8, "X"), - (0x11CA9, "V"), - (0x11CB7, "X"), - (0x11D00, "V"), - (0x11D07, "X"), - (0x11D08, "V"), - (0x11D0A, "X"), - (0x11D0B, "V"), - (0x11D37, "X"), - (0x11D3A, "V"), - (0x11D3B, "X"), - (0x11D3C, "V"), - (0x11D3E, "X"), - (0x11D3F, "V"), - (0x11D48, "X"), - (0x11D50, "V"), - (0x11D5A, "X"), - (0x11D60, "V"), - (0x11D66, "X"), - (0x11D67, "V"), - (0x11D69, "X"), - (0x11D6A, "V"), - (0x11D8F, "X"), - (0x11D90, "V"), - (0x11D92, "X"), - (0x11D93, "V"), - (0x11D99, "X"), - (0x11DA0, "V"), - (0x11DAA, "X"), - (0x11EE0, "V"), - (0x11EF9, "X"), - (0x11F00, "V"), - (0x11F11, "X"), - (0x11F12, "V"), - (0x11F3B, "X"), - (0x11F3E, "V"), - (0x11F5B, "X"), - ] - - -def _seg_60() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x11FB0, "V"), - (0x11FB1, "X"), - (0x11FC0, "V"), - (0x11FF2, "X"), - (0x11FFF, "V"), - (0x1239A, "X"), - (0x12400, "V"), - (0x1246F, "X"), - (0x12470, "V"), - (0x12475, "X"), - (0x12480, "V"), - (0x12544, "X"), - (0x12F90, "V"), - (0x12FF3, "X"), - (0x13000, "V"), - (0x13430, "X"), - (0x13440, "V"), - (0x13456, "X"), - (0x13460, "V"), - (0x143FB, "X"), - (0x14400, "V"), - (0x14647, "X"), - (0x16100, "V"), - (0x1613A, "X"), - (0x16800, "V"), - (0x16A39, "X"), - (0x16A40, "V"), - (0x16A5F, "X"), - (0x16A60, "V"), - (0x16A6A, "X"), - (0x16A6E, "V"), - (0x16ABF, "X"), - (0x16AC0, "V"), - (0x16ACA, "X"), - (0x16AD0, "V"), - (0x16AEE, "X"), - (0x16AF0, "V"), - (0x16AF6, "X"), - (0x16B00, "V"), - (0x16B46, "X"), - (0x16B50, "V"), - (0x16B5A, "X"), - (0x16B5B, "V"), - (0x16B62, "X"), - (0x16B63, "V"), - (0x16B78, "X"), - (0x16B7D, "V"), - (0x16B90, "X"), - (0x16D40, "V"), - (0x16D7A, "X"), - (0x16E40, "M", "𖹠"), - (0x16E41, "M", "𖹡"), - (0x16E42, "M", "𖹢"), - (0x16E43, "M", "𖹣"), - (0x16E44, "M", "𖹤"), - (0x16E45, "M", "𖹥"), - (0x16E46, "M", "𖹦"), - (0x16E47, "M", "𖹧"), - (0x16E48, "M", "𖹨"), - (0x16E49, "M", "𖹩"), - (0x16E4A, "M", "𖹪"), - (0x16E4B, "M", "𖹫"), - (0x16E4C, "M", "𖹬"), - (0x16E4D, "M", "𖹭"), - (0x16E4E, "M", "𖹮"), - (0x16E4F, "M", "𖹯"), - (0x16E50, "M", "𖹰"), - (0x16E51, "M", "𖹱"), - (0x16E52, "M", "𖹲"), - (0x16E53, "M", "𖹳"), - (0x16E54, "M", "𖹴"), - (0x16E55, "M", "𖹵"), - (0x16E56, "M", "𖹶"), - (0x16E57, "M", "𖹷"), - (0x16E58, "M", "𖹸"), - (0x16E59, "M", "𖹹"), - (0x16E5A, "M", "𖹺"), - (0x16E5B, "M", "𖹻"), - (0x16E5C, "M", "𖹼"), - (0x16E5D, "M", "𖹽"), - (0x16E5E, "M", "𖹾"), - (0x16E5F, "M", "𖹿"), - (0x16E60, "V"), - (0x16E9B, "X"), - (0x16F00, "V"), - (0x16F4B, "X"), - (0x16F4F, "V"), - (0x16F88, "X"), - (0x16F8F, "V"), - (0x16FA0, "X"), - (0x16FE0, "V"), - (0x16FE5, "X"), - (0x16FF0, "V"), - (0x16FF2, "X"), - (0x17000, "V"), - (0x187F8, "X"), - (0x18800, "V"), - (0x18CD6, "X"), - (0x18CFF, "V"), - (0x18D09, "X"), - ] - - -def _seg_61() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1AFF0, "V"), - (0x1AFF4, "X"), - (0x1AFF5, "V"), - (0x1AFFC, "X"), - (0x1AFFD, "V"), - (0x1AFFF, "X"), - (0x1B000, "V"), - (0x1B123, "X"), - (0x1B132, "V"), - (0x1B133, "X"), - (0x1B150, "V"), - (0x1B153, "X"), - (0x1B155, "V"), - (0x1B156, "X"), - (0x1B164, "V"), - (0x1B168, "X"), - (0x1B170, "V"), - (0x1B2FC, "X"), - (0x1BC00, "V"), - (0x1BC6B, "X"), - (0x1BC70, "V"), - (0x1BC7D, "X"), - (0x1BC80, "V"), - (0x1BC89, "X"), - (0x1BC90, "V"), - (0x1BC9A, "X"), - (0x1BC9C, "V"), - (0x1BCA0, "I"), - (0x1BCA4, "X"), - (0x1CC00, "V"), - (0x1CCD6, "M", "a"), - (0x1CCD7, "M", "b"), - (0x1CCD8, "M", "c"), - (0x1CCD9, "M", "d"), - (0x1CCDA, "M", "e"), - (0x1CCDB, "M", "f"), - (0x1CCDC, "M", "g"), - (0x1CCDD, "M", "h"), - (0x1CCDE, "M", "i"), - (0x1CCDF, "M", "j"), - (0x1CCE0, "M", "k"), - (0x1CCE1, "M", "l"), - (0x1CCE2, "M", "m"), - (0x1CCE3, "M", "n"), - (0x1CCE4, "M", "o"), - (0x1CCE5, "M", "p"), - (0x1CCE6, "M", "q"), - (0x1CCE7, "M", "r"), - (0x1CCE8, "M", "s"), - (0x1CCE9, "M", "t"), - (0x1CCEA, "M", "u"), - (0x1CCEB, "M", "v"), - (0x1CCEC, "M", "w"), - (0x1CCED, "M", "x"), - (0x1CCEE, "M", "y"), - (0x1CCEF, "M", "z"), - (0x1CCF0, "M", "0"), - (0x1CCF1, "M", "1"), - (0x1CCF2, "M", "2"), - (0x1CCF3, "M", "3"), - (0x1CCF4, "M", "4"), - (0x1CCF5, "M", "5"), - (0x1CCF6, "M", "6"), - (0x1CCF7, "M", "7"), - (0x1CCF8, "M", "8"), - (0x1CCF9, "M", "9"), - (0x1CCFA, "X"), - (0x1CD00, "V"), - (0x1CEB4, "X"), - (0x1CF00, "V"), - (0x1CF2E, "X"), - (0x1CF30, "V"), - (0x1CF47, "X"), - (0x1CF50, "V"), - (0x1CFC4, "X"), - (0x1D000, "V"), - (0x1D0F6, "X"), - (0x1D100, "V"), - (0x1D127, "X"), - (0x1D129, "V"), - (0x1D15E, "M", "𝅗𝅥"), - (0x1D15F, "M", "𝅘𝅥"), - (0x1D160, "M", "𝅘𝅥𝅮"), - (0x1D161, "M", "𝅘𝅥𝅯"), - (0x1D162, "M", "𝅘𝅥𝅰"), - (0x1D163, "M", "𝅘𝅥𝅱"), - (0x1D164, "M", "𝅘𝅥𝅲"), - (0x1D165, "V"), - (0x1D173, "I"), - (0x1D17B, "V"), - (0x1D1BB, "M", "𝆹𝅥"), - (0x1D1BC, "M", "𝆺𝅥"), - (0x1D1BD, "M", "𝆹𝅥𝅮"), - (0x1D1BE, "M", "𝆺𝅥𝅮"), - (0x1D1BF, "M", "𝆹𝅥𝅯"), - (0x1D1C0, "M", "𝆺𝅥𝅯"), - (0x1D1C1, "V"), - (0x1D1EB, "X"), - (0x1D200, "V"), - (0x1D246, "X"), - ] - - -def _seg_62() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D2C0, "V"), - (0x1D2D4, "X"), - (0x1D2E0, "V"), - (0x1D2F4, "X"), - (0x1D300, "V"), - (0x1D357, "X"), - (0x1D360, "V"), - (0x1D379, "X"), - (0x1D400, "M", "a"), - (0x1D401, "M", "b"), - (0x1D402, "M", "c"), - (0x1D403, "M", "d"), - (0x1D404, "M", "e"), - (0x1D405, "M", "f"), - (0x1D406, "M", "g"), - (0x1D407, "M", "h"), - (0x1D408, "M", "i"), - (0x1D409, "M", "j"), - (0x1D40A, "M", "k"), - (0x1D40B, "M", "l"), - (0x1D40C, "M", "m"), - (0x1D40D, "M", "n"), - (0x1D40E, "M", "o"), - (0x1D40F, "M", "p"), - (0x1D410, "M", "q"), - (0x1D411, "M", "r"), - (0x1D412, "M", "s"), - (0x1D413, "M", "t"), - (0x1D414, "M", "u"), - (0x1D415, "M", "v"), - (0x1D416, "M", "w"), - (0x1D417, "M", "x"), - (0x1D418, "M", "y"), - (0x1D419, "M", "z"), - (0x1D41A, "M", "a"), - (0x1D41B, "M", "b"), - (0x1D41C, "M", "c"), - (0x1D41D, "M", "d"), - (0x1D41E, "M", "e"), - (0x1D41F, "M", "f"), - (0x1D420, "M", "g"), - (0x1D421, "M", "h"), - (0x1D422, "M", "i"), - (0x1D423, "M", "j"), - (0x1D424, "M", "k"), - (0x1D425, "M", "l"), - (0x1D426, "M", "m"), - (0x1D427, "M", "n"), - (0x1D428, "M", "o"), - (0x1D429, "M", "p"), - (0x1D42A, "M", "q"), - (0x1D42B, "M", "r"), - (0x1D42C, "M", "s"), - (0x1D42D, "M", "t"), - (0x1D42E, "M", "u"), - (0x1D42F, "M", "v"), - (0x1D430, "M", "w"), - (0x1D431, "M", "x"), - (0x1D432, "M", "y"), - (0x1D433, "M", "z"), - (0x1D434, "M", "a"), - (0x1D435, "M", "b"), - (0x1D436, "M", "c"), - (0x1D437, "M", "d"), - (0x1D438, "M", "e"), - (0x1D439, "M", "f"), - (0x1D43A, "M", "g"), - (0x1D43B, "M", "h"), - (0x1D43C, "M", "i"), - (0x1D43D, "M", "j"), - (0x1D43E, "M", "k"), - (0x1D43F, "M", "l"), - (0x1D440, "M", "m"), - (0x1D441, "M", "n"), - (0x1D442, "M", "o"), - (0x1D443, "M", "p"), - (0x1D444, "M", "q"), - (0x1D445, "M", "r"), - (0x1D446, "M", "s"), - (0x1D447, "M", "t"), - (0x1D448, "M", "u"), - (0x1D449, "M", "v"), - (0x1D44A, "M", "w"), - (0x1D44B, "M", "x"), - (0x1D44C, "M", "y"), - (0x1D44D, "M", "z"), - (0x1D44E, "M", "a"), - (0x1D44F, "M", "b"), - (0x1D450, "M", "c"), - (0x1D451, "M", "d"), - (0x1D452, "M", "e"), - (0x1D453, "M", "f"), - (0x1D454, "M", "g"), - (0x1D455, "X"), - (0x1D456, "M", "i"), - (0x1D457, "M", "j"), - (0x1D458, "M", "k"), - (0x1D459, "M", "l"), - (0x1D45A, "M", "m"), - (0x1D45B, "M", "n"), - ] - - -def _seg_63() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D45C, "M", "o"), - (0x1D45D, "M", "p"), - (0x1D45E, "M", "q"), - (0x1D45F, "M", "r"), - (0x1D460, "M", "s"), - (0x1D461, "M", "t"), - (0x1D462, "M", "u"), - (0x1D463, "M", "v"), - (0x1D464, "M", "w"), - (0x1D465, "M", "x"), - (0x1D466, "M", "y"), - (0x1D467, "M", "z"), - (0x1D468, "M", "a"), - (0x1D469, "M", "b"), - (0x1D46A, "M", "c"), - (0x1D46B, "M", "d"), - (0x1D46C, "M", "e"), - (0x1D46D, "M", "f"), - (0x1D46E, "M", "g"), - (0x1D46F, "M", "h"), - (0x1D470, "M", "i"), - (0x1D471, "M", "j"), - (0x1D472, "M", "k"), - (0x1D473, "M", "l"), - (0x1D474, "M", "m"), - (0x1D475, "M", "n"), - (0x1D476, "M", "o"), - (0x1D477, "M", "p"), - (0x1D478, "M", "q"), - (0x1D479, "M", "r"), - (0x1D47A, "M", "s"), - (0x1D47B, "M", "t"), - (0x1D47C, "M", "u"), - (0x1D47D, "M", "v"), - (0x1D47E, "M", "w"), - (0x1D47F, "M", "x"), - (0x1D480, "M", "y"), - (0x1D481, "M", "z"), - (0x1D482, "M", "a"), - (0x1D483, "M", "b"), - (0x1D484, "M", "c"), - (0x1D485, "M", "d"), - (0x1D486, "M", "e"), - (0x1D487, "M", "f"), - (0x1D488, "M", "g"), - (0x1D489, "M", "h"), - (0x1D48A, "M", "i"), - (0x1D48B, "M", "j"), - (0x1D48C, "M", "k"), - (0x1D48D, "M", "l"), - (0x1D48E, "M", "m"), - (0x1D48F, "M", "n"), - (0x1D490, "M", "o"), - (0x1D491, "M", "p"), - (0x1D492, "M", "q"), - (0x1D493, "M", "r"), - (0x1D494, "M", "s"), - (0x1D495, "M", "t"), - (0x1D496, "M", "u"), - (0x1D497, "M", "v"), - (0x1D498, "M", "w"), - (0x1D499, "M", "x"), - (0x1D49A, "M", "y"), - (0x1D49B, "M", "z"), - (0x1D49C, "M", "a"), - (0x1D49D, "X"), - (0x1D49E, "M", "c"), - (0x1D49F, "M", "d"), - (0x1D4A0, "X"), - (0x1D4A2, "M", "g"), - (0x1D4A3, "X"), - (0x1D4A5, "M", "j"), - (0x1D4A6, "M", "k"), - (0x1D4A7, "X"), - (0x1D4A9, "M", "n"), - (0x1D4AA, "M", "o"), - (0x1D4AB, "M", "p"), - (0x1D4AC, "M", "q"), - (0x1D4AD, "X"), - (0x1D4AE, "M", "s"), - (0x1D4AF, "M", "t"), - (0x1D4B0, "M", "u"), - (0x1D4B1, "M", "v"), - (0x1D4B2, "M", "w"), - (0x1D4B3, "M", "x"), - (0x1D4B4, "M", "y"), - (0x1D4B5, "M", "z"), - (0x1D4B6, "M", "a"), - (0x1D4B7, "M", "b"), - (0x1D4B8, "M", "c"), - (0x1D4B9, "M", "d"), - (0x1D4BA, "X"), - (0x1D4BB, "M", "f"), - (0x1D4BC, "X"), - (0x1D4BD, "M", "h"), - (0x1D4BE, "M", "i"), - (0x1D4BF, "M", "j"), - (0x1D4C0, "M", "k"), - (0x1D4C1, "M", "l"), - (0x1D4C2, "M", "m"), - ] - - -def _seg_64() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D4C3, "M", "n"), - (0x1D4C4, "X"), - (0x1D4C5, "M", "p"), - (0x1D4C6, "M", "q"), - (0x1D4C7, "M", "r"), - (0x1D4C8, "M", "s"), - (0x1D4C9, "M", "t"), - (0x1D4CA, "M", "u"), - (0x1D4CB, "M", "v"), - (0x1D4CC, "M", "w"), - (0x1D4CD, "M", "x"), - (0x1D4CE, "M", "y"), - (0x1D4CF, "M", "z"), - (0x1D4D0, "M", "a"), - (0x1D4D1, "M", "b"), - (0x1D4D2, "M", "c"), - (0x1D4D3, "M", "d"), - (0x1D4D4, "M", "e"), - (0x1D4D5, "M", "f"), - (0x1D4D6, "M", "g"), - (0x1D4D7, "M", "h"), - (0x1D4D8, "M", "i"), - (0x1D4D9, "M", "j"), - (0x1D4DA, "M", "k"), - (0x1D4DB, "M", "l"), - (0x1D4DC, "M", "m"), - (0x1D4DD, "M", "n"), - (0x1D4DE, "M", "o"), - (0x1D4DF, "M", "p"), - (0x1D4E0, "M", "q"), - (0x1D4E1, "M", "r"), - (0x1D4E2, "M", "s"), - (0x1D4E3, "M", "t"), - (0x1D4E4, "M", "u"), - (0x1D4E5, "M", "v"), - (0x1D4E6, "M", "w"), - (0x1D4E7, "M", "x"), - (0x1D4E8, "M", "y"), - (0x1D4E9, "M", "z"), - (0x1D4EA, "M", "a"), - (0x1D4EB, "M", "b"), - (0x1D4EC, "M", "c"), - (0x1D4ED, "M", "d"), - (0x1D4EE, "M", "e"), - (0x1D4EF, "M", "f"), - (0x1D4F0, "M", "g"), - (0x1D4F1, "M", "h"), - (0x1D4F2, "M", "i"), - (0x1D4F3, "M", "j"), - (0x1D4F4, "M", "k"), - (0x1D4F5, "M", "l"), - (0x1D4F6, "M", "m"), - (0x1D4F7, "M", "n"), - (0x1D4F8, "M", "o"), - (0x1D4F9, "M", "p"), - (0x1D4FA, "M", "q"), - (0x1D4FB, "M", "r"), - (0x1D4FC, "M", "s"), - (0x1D4FD, "M", "t"), - (0x1D4FE, "M", "u"), - (0x1D4FF, "M", "v"), - (0x1D500, "M", "w"), - (0x1D501, "M", "x"), - (0x1D502, "M", "y"), - (0x1D503, "M", "z"), - (0x1D504, "M", "a"), - (0x1D505, "M", "b"), - (0x1D506, "X"), - (0x1D507, "M", "d"), - (0x1D508, "M", "e"), - (0x1D509, "M", "f"), - (0x1D50A, "M", "g"), - (0x1D50B, "X"), - (0x1D50D, "M", "j"), - (0x1D50E, "M", "k"), - (0x1D50F, "M", "l"), - (0x1D510, "M", "m"), - (0x1D511, "M", "n"), - (0x1D512, "M", "o"), - (0x1D513, "M", "p"), - (0x1D514, "M", "q"), - (0x1D515, "X"), - (0x1D516, "M", "s"), - (0x1D517, "M", "t"), - (0x1D518, "M", "u"), - (0x1D519, "M", "v"), - (0x1D51A, "M", "w"), - (0x1D51B, "M", "x"), - (0x1D51C, "M", "y"), - (0x1D51D, "X"), - (0x1D51E, "M", "a"), - (0x1D51F, "M", "b"), - (0x1D520, "M", "c"), - (0x1D521, "M", "d"), - (0x1D522, "M", "e"), - (0x1D523, "M", "f"), - (0x1D524, "M", "g"), - (0x1D525, "M", "h"), - (0x1D526, "M", "i"), - (0x1D527, "M", "j"), - ] - - -def _seg_65() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D528, "M", "k"), - (0x1D529, "M", "l"), - (0x1D52A, "M", "m"), - (0x1D52B, "M", "n"), - (0x1D52C, "M", "o"), - (0x1D52D, "M", "p"), - (0x1D52E, "M", "q"), - (0x1D52F, "M", "r"), - (0x1D530, "M", "s"), - (0x1D531, "M", "t"), - (0x1D532, "M", "u"), - (0x1D533, "M", "v"), - (0x1D534, "M", "w"), - (0x1D535, "M", "x"), - (0x1D536, "M", "y"), - (0x1D537, "M", "z"), - (0x1D538, "M", "a"), - (0x1D539, "M", "b"), - (0x1D53A, "X"), - (0x1D53B, "M", "d"), - (0x1D53C, "M", "e"), - (0x1D53D, "M", "f"), - (0x1D53E, "M", "g"), - (0x1D53F, "X"), - (0x1D540, "M", "i"), - (0x1D541, "M", "j"), - (0x1D542, "M", "k"), - (0x1D543, "M", "l"), - (0x1D544, "M", "m"), - (0x1D545, "X"), - (0x1D546, "M", "o"), - (0x1D547, "X"), - (0x1D54A, "M", "s"), - (0x1D54B, "M", "t"), - (0x1D54C, "M", "u"), - (0x1D54D, "M", "v"), - (0x1D54E, "M", "w"), - (0x1D54F, "M", "x"), - (0x1D550, "M", "y"), - (0x1D551, "X"), - (0x1D552, "M", "a"), - (0x1D553, "M", "b"), - (0x1D554, "M", "c"), - (0x1D555, "M", "d"), - (0x1D556, "M", "e"), - (0x1D557, "M", "f"), - (0x1D558, "M", "g"), - (0x1D559, "M", "h"), - (0x1D55A, "M", "i"), - (0x1D55B, "M", "j"), - (0x1D55C, "M", "k"), - (0x1D55D, "M", "l"), - (0x1D55E, "M", "m"), - (0x1D55F, "M", "n"), - (0x1D560, "M", "o"), - (0x1D561, "M", "p"), - (0x1D562, "M", "q"), - (0x1D563, "M", "r"), - (0x1D564, "M", "s"), - (0x1D565, "M", "t"), - (0x1D566, "M", "u"), - (0x1D567, "M", "v"), - (0x1D568, "M", "w"), - (0x1D569, "M", "x"), - (0x1D56A, "M", "y"), - (0x1D56B, "M", "z"), - (0x1D56C, "M", "a"), - (0x1D56D, "M", "b"), - (0x1D56E, "M", "c"), - (0x1D56F, "M", "d"), - (0x1D570, "M", "e"), - (0x1D571, "M", "f"), - (0x1D572, "M", "g"), - (0x1D573, "M", "h"), - (0x1D574, "M", "i"), - (0x1D575, "M", "j"), - (0x1D576, "M", "k"), - (0x1D577, "M", "l"), - (0x1D578, "M", "m"), - (0x1D579, "M", "n"), - (0x1D57A, "M", "o"), - (0x1D57B, "M", "p"), - (0x1D57C, "M", "q"), - (0x1D57D, "M", "r"), - (0x1D57E, "M", "s"), - (0x1D57F, "M", "t"), - (0x1D580, "M", "u"), - (0x1D581, "M", "v"), - (0x1D582, "M", "w"), - (0x1D583, "M", "x"), - (0x1D584, "M", "y"), - (0x1D585, "M", "z"), - (0x1D586, "M", "a"), - (0x1D587, "M", "b"), - (0x1D588, "M", "c"), - (0x1D589, "M", "d"), - (0x1D58A, "M", "e"), - (0x1D58B, "M", "f"), - (0x1D58C, "M", "g"), - (0x1D58D, "M", "h"), - ] - - -def _seg_66() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D58E, "M", "i"), - (0x1D58F, "M", "j"), - (0x1D590, "M", "k"), - (0x1D591, "M", "l"), - (0x1D592, "M", "m"), - (0x1D593, "M", "n"), - (0x1D594, "M", "o"), - (0x1D595, "M", "p"), - (0x1D596, "M", "q"), - (0x1D597, "M", "r"), - (0x1D598, "M", "s"), - (0x1D599, "M", "t"), - (0x1D59A, "M", "u"), - (0x1D59B, "M", "v"), - (0x1D59C, "M", "w"), - (0x1D59D, "M", "x"), - (0x1D59E, "M", "y"), - (0x1D59F, "M", "z"), - (0x1D5A0, "M", "a"), - (0x1D5A1, "M", "b"), - (0x1D5A2, "M", "c"), - (0x1D5A3, "M", "d"), - (0x1D5A4, "M", "e"), - (0x1D5A5, "M", "f"), - (0x1D5A6, "M", "g"), - (0x1D5A7, "M", "h"), - (0x1D5A8, "M", "i"), - (0x1D5A9, "M", "j"), - (0x1D5AA, "M", "k"), - (0x1D5AB, "M", "l"), - (0x1D5AC, "M", "m"), - (0x1D5AD, "M", "n"), - (0x1D5AE, "M", "o"), - (0x1D5AF, "M", "p"), - (0x1D5B0, "M", "q"), - (0x1D5B1, "M", "r"), - (0x1D5B2, "M", "s"), - (0x1D5B3, "M", "t"), - (0x1D5B4, "M", "u"), - (0x1D5B5, "M", "v"), - (0x1D5B6, "M", "w"), - (0x1D5B7, "M", "x"), - (0x1D5B8, "M", "y"), - (0x1D5B9, "M", "z"), - (0x1D5BA, "M", "a"), - (0x1D5BB, "M", "b"), - (0x1D5BC, "M", "c"), - (0x1D5BD, "M", "d"), - (0x1D5BE, "M", "e"), - (0x1D5BF, "M", "f"), - (0x1D5C0, "M", "g"), - (0x1D5C1, "M", "h"), - (0x1D5C2, "M", "i"), - (0x1D5C3, "M", "j"), - (0x1D5C4, "M", "k"), - (0x1D5C5, "M", "l"), - (0x1D5C6, "M", "m"), - (0x1D5C7, "M", "n"), - (0x1D5C8, "M", "o"), - (0x1D5C9, "M", "p"), - (0x1D5CA, "M", "q"), - (0x1D5CB, "M", "r"), - (0x1D5CC, "M", "s"), - (0x1D5CD, "M", "t"), - (0x1D5CE, "M", "u"), - (0x1D5CF, "M", "v"), - (0x1D5D0, "M", "w"), - (0x1D5D1, "M", "x"), - (0x1D5D2, "M", "y"), - (0x1D5D3, "M", "z"), - (0x1D5D4, "M", "a"), - (0x1D5D5, "M", "b"), - (0x1D5D6, "M", "c"), - (0x1D5D7, "M", "d"), - (0x1D5D8, "M", "e"), - (0x1D5D9, "M", "f"), - (0x1D5DA, "M", "g"), - (0x1D5DB, "M", "h"), - (0x1D5DC, "M", "i"), - (0x1D5DD, "M", "j"), - (0x1D5DE, "M", "k"), - (0x1D5DF, "M", "l"), - (0x1D5E0, "M", "m"), - (0x1D5E1, "M", "n"), - (0x1D5E2, "M", "o"), - (0x1D5E3, "M", "p"), - (0x1D5E4, "M", "q"), - (0x1D5E5, "M", "r"), - (0x1D5E6, "M", "s"), - (0x1D5E7, "M", "t"), - (0x1D5E8, "M", "u"), - (0x1D5E9, "M", "v"), - (0x1D5EA, "M", "w"), - (0x1D5EB, "M", "x"), - (0x1D5EC, "M", "y"), - (0x1D5ED, "M", "z"), - (0x1D5EE, "M", "a"), - (0x1D5EF, "M", "b"), - (0x1D5F0, "M", "c"), - (0x1D5F1, "M", "d"), - ] - - -def _seg_67() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D5F2, "M", "e"), - (0x1D5F3, "M", "f"), - (0x1D5F4, "M", "g"), - (0x1D5F5, "M", "h"), - (0x1D5F6, "M", "i"), - (0x1D5F7, "M", "j"), - (0x1D5F8, "M", "k"), - (0x1D5F9, "M", "l"), - (0x1D5FA, "M", "m"), - (0x1D5FB, "M", "n"), - (0x1D5FC, "M", "o"), - (0x1D5FD, "M", "p"), - (0x1D5FE, "M", "q"), - (0x1D5FF, "M", "r"), - (0x1D600, "M", "s"), - (0x1D601, "M", "t"), - (0x1D602, "M", "u"), - (0x1D603, "M", "v"), - (0x1D604, "M", "w"), - (0x1D605, "M", "x"), - (0x1D606, "M", "y"), - (0x1D607, "M", "z"), - (0x1D608, "M", "a"), - (0x1D609, "M", "b"), - (0x1D60A, "M", "c"), - (0x1D60B, "M", "d"), - (0x1D60C, "M", "e"), - (0x1D60D, "M", "f"), - (0x1D60E, "M", "g"), - (0x1D60F, "M", "h"), - (0x1D610, "M", "i"), - (0x1D611, "M", "j"), - (0x1D612, "M", "k"), - (0x1D613, "M", "l"), - (0x1D614, "M", "m"), - (0x1D615, "M", "n"), - (0x1D616, "M", "o"), - (0x1D617, "M", "p"), - (0x1D618, "M", "q"), - (0x1D619, "M", "r"), - (0x1D61A, "M", "s"), - (0x1D61B, "M", "t"), - (0x1D61C, "M", "u"), - (0x1D61D, "M", "v"), - (0x1D61E, "M", "w"), - (0x1D61F, "M", "x"), - (0x1D620, "M", "y"), - (0x1D621, "M", "z"), - (0x1D622, "M", "a"), - (0x1D623, "M", "b"), - (0x1D624, "M", "c"), - (0x1D625, "M", "d"), - (0x1D626, "M", "e"), - (0x1D627, "M", "f"), - (0x1D628, "M", "g"), - (0x1D629, "M", "h"), - (0x1D62A, "M", "i"), - (0x1D62B, "M", "j"), - (0x1D62C, "M", "k"), - (0x1D62D, "M", "l"), - (0x1D62E, "M", "m"), - (0x1D62F, "M", "n"), - (0x1D630, "M", "o"), - (0x1D631, "M", "p"), - (0x1D632, "M", "q"), - (0x1D633, "M", "r"), - (0x1D634, "M", "s"), - (0x1D635, "M", "t"), - (0x1D636, "M", "u"), - (0x1D637, "M", "v"), - (0x1D638, "M", "w"), - (0x1D639, "M", "x"), - (0x1D63A, "M", "y"), - (0x1D63B, "M", "z"), - (0x1D63C, "M", "a"), - (0x1D63D, "M", "b"), - (0x1D63E, "M", "c"), - (0x1D63F, "M", "d"), - (0x1D640, "M", "e"), - (0x1D641, "M", "f"), - (0x1D642, "M", "g"), - (0x1D643, "M", "h"), - (0x1D644, "M", "i"), - (0x1D645, "M", "j"), - (0x1D646, "M", "k"), - (0x1D647, "M", "l"), - (0x1D648, "M", "m"), - (0x1D649, "M", "n"), - (0x1D64A, "M", "o"), - (0x1D64B, "M", "p"), - (0x1D64C, "M", "q"), - (0x1D64D, "M", "r"), - (0x1D64E, "M", "s"), - (0x1D64F, "M", "t"), - (0x1D650, "M", "u"), - (0x1D651, "M", "v"), - (0x1D652, "M", "w"), - (0x1D653, "M", "x"), - (0x1D654, "M", "y"), - (0x1D655, "M", "z"), - ] - - -def _seg_68() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D656, "M", "a"), - (0x1D657, "M", "b"), - (0x1D658, "M", "c"), - (0x1D659, "M", "d"), - (0x1D65A, "M", "e"), - (0x1D65B, "M", "f"), - (0x1D65C, "M", "g"), - (0x1D65D, "M", "h"), - (0x1D65E, "M", "i"), - (0x1D65F, "M", "j"), - (0x1D660, "M", "k"), - (0x1D661, "M", "l"), - (0x1D662, "M", "m"), - (0x1D663, "M", "n"), - (0x1D664, "M", "o"), - (0x1D665, "M", "p"), - (0x1D666, "M", "q"), - (0x1D667, "M", "r"), - (0x1D668, "M", "s"), - (0x1D669, "M", "t"), - (0x1D66A, "M", "u"), - (0x1D66B, "M", "v"), - (0x1D66C, "M", "w"), - (0x1D66D, "M", "x"), - (0x1D66E, "M", "y"), - (0x1D66F, "M", "z"), - (0x1D670, "M", "a"), - (0x1D671, "M", "b"), - (0x1D672, "M", "c"), - (0x1D673, "M", "d"), - (0x1D674, "M", "e"), - (0x1D675, "M", "f"), - (0x1D676, "M", "g"), - (0x1D677, "M", "h"), - (0x1D678, "M", "i"), - (0x1D679, "M", "j"), - (0x1D67A, "M", "k"), - (0x1D67B, "M", "l"), - (0x1D67C, "M", "m"), - (0x1D67D, "M", "n"), - (0x1D67E, "M", "o"), - (0x1D67F, "M", "p"), - (0x1D680, "M", "q"), - (0x1D681, "M", "r"), - (0x1D682, "M", "s"), - (0x1D683, "M", "t"), - (0x1D684, "M", "u"), - (0x1D685, "M", "v"), - (0x1D686, "M", "w"), - (0x1D687, "M", "x"), - (0x1D688, "M", "y"), - (0x1D689, "M", "z"), - (0x1D68A, "M", "a"), - (0x1D68B, "M", "b"), - (0x1D68C, "M", "c"), - (0x1D68D, "M", "d"), - (0x1D68E, "M", "e"), - (0x1D68F, "M", "f"), - (0x1D690, "M", "g"), - (0x1D691, "M", "h"), - (0x1D692, "M", "i"), - (0x1D693, "M", "j"), - (0x1D694, "M", "k"), - (0x1D695, "M", "l"), - (0x1D696, "M", "m"), - (0x1D697, "M", "n"), - (0x1D698, "M", "o"), - (0x1D699, "M", "p"), - (0x1D69A, "M", "q"), - (0x1D69B, "M", "r"), - (0x1D69C, "M", "s"), - (0x1D69D, "M", "t"), - (0x1D69E, "M", "u"), - (0x1D69F, "M", "v"), - (0x1D6A0, "M", "w"), - (0x1D6A1, "M", "x"), - (0x1D6A2, "M", "y"), - (0x1D6A3, "M", "z"), - (0x1D6A4, "M", "ı"), - (0x1D6A5, "M", "ȷ"), - (0x1D6A6, "X"), - (0x1D6A8, "M", "α"), - (0x1D6A9, "M", "β"), - (0x1D6AA, "M", "γ"), - (0x1D6AB, "M", "δ"), - (0x1D6AC, "M", "ε"), - (0x1D6AD, "M", "ζ"), - (0x1D6AE, "M", "η"), - (0x1D6AF, "M", "θ"), - (0x1D6B0, "M", "ι"), - (0x1D6B1, "M", "κ"), - (0x1D6B2, "M", "λ"), - (0x1D6B3, "M", "μ"), - (0x1D6B4, "M", "ν"), - (0x1D6B5, "M", "ξ"), - (0x1D6B6, "M", "ο"), - (0x1D6B7, "M", "π"), - (0x1D6B8, "M", "ρ"), - (0x1D6B9, "M", "θ"), - (0x1D6BA, "M", "σ"), - ] - - -def _seg_69() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D6BB, "M", "τ"), - (0x1D6BC, "M", "υ"), - (0x1D6BD, "M", "φ"), - (0x1D6BE, "M", "χ"), - (0x1D6BF, "M", "ψ"), - (0x1D6C0, "M", "ω"), - (0x1D6C1, "M", "∇"), - (0x1D6C2, "M", "α"), - (0x1D6C3, "M", "β"), - (0x1D6C4, "M", "γ"), - (0x1D6C5, "M", "δ"), - (0x1D6C6, "M", "ε"), - (0x1D6C7, "M", "ζ"), - (0x1D6C8, "M", "η"), - (0x1D6C9, "M", "θ"), - (0x1D6CA, "M", "ι"), - (0x1D6CB, "M", "κ"), - (0x1D6CC, "M", "λ"), - (0x1D6CD, "M", "μ"), - (0x1D6CE, "M", "ν"), - (0x1D6CF, "M", "ξ"), - (0x1D6D0, "M", "ο"), - (0x1D6D1, "M", "π"), - (0x1D6D2, "M", "ρ"), - (0x1D6D3, "M", "σ"), - (0x1D6D5, "M", "τ"), - (0x1D6D6, "M", "υ"), - (0x1D6D7, "M", "φ"), - (0x1D6D8, "M", "χ"), - (0x1D6D9, "M", "ψ"), - (0x1D6DA, "M", "ω"), - (0x1D6DB, "M", "∂"), - (0x1D6DC, "M", "ε"), - (0x1D6DD, "M", "θ"), - (0x1D6DE, "M", "κ"), - (0x1D6DF, "M", "φ"), - (0x1D6E0, "M", "ρ"), - (0x1D6E1, "M", "π"), - (0x1D6E2, "M", "α"), - (0x1D6E3, "M", "β"), - (0x1D6E4, "M", "γ"), - (0x1D6E5, "M", "δ"), - (0x1D6E6, "M", "ε"), - (0x1D6E7, "M", "ζ"), - (0x1D6E8, "M", "η"), - (0x1D6E9, "M", "θ"), - (0x1D6EA, "M", "ι"), - (0x1D6EB, "M", "κ"), - (0x1D6EC, "M", "λ"), - (0x1D6ED, "M", "μ"), - (0x1D6EE, "M", "ν"), - (0x1D6EF, "M", "ξ"), - (0x1D6F0, "M", "ο"), - (0x1D6F1, "M", "π"), - (0x1D6F2, "M", "ρ"), - (0x1D6F3, "M", "θ"), - (0x1D6F4, "M", "σ"), - (0x1D6F5, "M", "τ"), - (0x1D6F6, "M", "υ"), - (0x1D6F7, "M", "φ"), - (0x1D6F8, "M", "χ"), - (0x1D6F9, "M", "ψ"), - (0x1D6FA, "M", "ω"), - (0x1D6FB, "M", "∇"), - (0x1D6FC, "M", "α"), - (0x1D6FD, "M", "β"), - (0x1D6FE, "M", "γ"), - (0x1D6FF, "M", "δ"), - (0x1D700, "M", "ε"), - (0x1D701, "M", "ζ"), - (0x1D702, "M", "η"), - (0x1D703, "M", "θ"), - (0x1D704, "M", "ι"), - (0x1D705, "M", "κ"), - (0x1D706, "M", "λ"), - (0x1D707, "M", "μ"), - (0x1D708, "M", "ν"), - (0x1D709, "M", "ξ"), - (0x1D70A, "M", "ο"), - (0x1D70B, "M", "π"), - (0x1D70C, "M", "ρ"), - (0x1D70D, "M", "σ"), - (0x1D70F, "M", "τ"), - (0x1D710, "M", "υ"), - (0x1D711, "M", "φ"), - (0x1D712, "M", "χ"), - (0x1D713, "M", "ψ"), - (0x1D714, "M", "ω"), - (0x1D715, "M", "∂"), - (0x1D716, "M", "ε"), - (0x1D717, "M", "θ"), - (0x1D718, "M", "κ"), - (0x1D719, "M", "φ"), - (0x1D71A, "M", "ρ"), - (0x1D71B, "M", "π"), - (0x1D71C, "M", "α"), - (0x1D71D, "M", "β"), - (0x1D71E, "M", "γ"), - (0x1D71F, "M", "δ"), - (0x1D720, "M", "ε"), - ] - - -def _seg_70() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D721, "M", "ζ"), - (0x1D722, "M", "η"), - (0x1D723, "M", "θ"), - (0x1D724, "M", "ι"), - (0x1D725, "M", "κ"), - (0x1D726, "M", "λ"), - (0x1D727, "M", "μ"), - (0x1D728, "M", "ν"), - (0x1D729, "M", "ξ"), - (0x1D72A, "M", "ο"), - (0x1D72B, "M", "π"), - (0x1D72C, "M", "ρ"), - (0x1D72D, "M", "θ"), - (0x1D72E, "M", "σ"), - (0x1D72F, "M", "τ"), - (0x1D730, "M", "υ"), - (0x1D731, "M", "φ"), - (0x1D732, "M", "χ"), - (0x1D733, "M", "ψ"), - (0x1D734, "M", "ω"), - (0x1D735, "M", "∇"), - (0x1D736, "M", "α"), - (0x1D737, "M", "β"), - (0x1D738, "M", "γ"), - (0x1D739, "M", "δ"), - (0x1D73A, "M", "ε"), - (0x1D73B, "M", "ζ"), - (0x1D73C, "M", "η"), - (0x1D73D, "M", "θ"), - (0x1D73E, "M", "ι"), - (0x1D73F, "M", "κ"), - (0x1D740, "M", "λ"), - (0x1D741, "M", "μ"), - (0x1D742, "M", "ν"), - (0x1D743, "M", "ξ"), - (0x1D744, "M", "ο"), - (0x1D745, "M", "π"), - (0x1D746, "M", "ρ"), - (0x1D747, "M", "σ"), - (0x1D749, "M", "τ"), - (0x1D74A, "M", "υ"), - (0x1D74B, "M", "φ"), - (0x1D74C, "M", "χ"), - (0x1D74D, "M", "ψ"), - (0x1D74E, "M", "ω"), - (0x1D74F, "M", "∂"), - (0x1D750, "M", "ε"), - (0x1D751, "M", "θ"), - (0x1D752, "M", "κ"), - (0x1D753, "M", "φ"), - (0x1D754, "M", "ρ"), - (0x1D755, "M", "π"), - (0x1D756, "M", "α"), - (0x1D757, "M", "β"), - (0x1D758, "M", "γ"), - (0x1D759, "M", "δ"), - (0x1D75A, "M", "ε"), - (0x1D75B, "M", "ζ"), - (0x1D75C, "M", "η"), - (0x1D75D, "M", "θ"), - (0x1D75E, "M", "ι"), - (0x1D75F, "M", "κ"), - (0x1D760, "M", "λ"), - (0x1D761, "M", "μ"), - (0x1D762, "M", "ν"), - (0x1D763, "M", "ξ"), - (0x1D764, "M", "ο"), - (0x1D765, "M", "π"), - (0x1D766, "M", "ρ"), - (0x1D767, "M", "θ"), - (0x1D768, "M", "σ"), - (0x1D769, "M", "τ"), - (0x1D76A, "M", "υ"), - (0x1D76B, "M", "φ"), - (0x1D76C, "M", "χ"), - (0x1D76D, "M", "ψ"), - (0x1D76E, "M", "ω"), - (0x1D76F, "M", "∇"), - (0x1D770, "M", "α"), - (0x1D771, "M", "β"), - (0x1D772, "M", "γ"), - (0x1D773, "M", "δ"), - (0x1D774, "M", "ε"), - (0x1D775, "M", "ζ"), - (0x1D776, "M", "η"), - (0x1D777, "M", "θ"), - (0x1D778, "M", "ι"), - (0x1D779, "M", "κ"), - (0x1D77A, "M", "λ"), - (0x1D77B, "M", "μ"), - (0x1D77C, "M", "ν"), - (0x1D77D, "M", "ξ"), - (0x1D77E, "M", "ο"), - (0x1D77F, "M", "π"), - (0x1D780, "M", "ρ"), - (0x1D781, "M", "σ"), - (0x1D783, "M", "τ"), - (0x1D784, "M", "υ"), - (0x1D785, "M", "φ"), - (0x1D786, "M", "χ"), - ] - - -def _seg_71() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D787, "M", "ψ"), - (0x1D788, "M", "ω"), - (0x1D789, "M", "∂"), - (0x1D78A, "M", "ε"), - (0x1D78B, "M", "θ"), - (0x1D78C, "M", "κ"), - (0x1D78D, "M", "φ"), - (0x1D78E, "M", "ρ"), - (0x1D78F, "M", "π"), - (0x1D790, "M", "α"), - (0x1D791, "M", "β"), - (0x1D792, "M", "γ"), - (0x1D793, "M", "δ"), - (0x1D794, "M", "ε"), - (0x1D795, "M", "ζ"), - (0x1D796, "M", "η"), - (0x1D797, "M", "θ"), - (0x1D798, "M", "ι"), - (0x1D799, "M", "κ"), - (0x1D79A, "M", "λ"), - (0x1D79B, "M", "μ"), - (0x1D79C, "M", "ν"), - (0x1D79D, "M", "ξ"), - (0x1D79E, "M", "ο"), - (0x1D79F, "M", "π"), - (0x1D7A0, "M", "ρ"), - (0x1D7A1, "M", "θ"), - (0x1D7A2, "M", "σ"), - (0x1D7A3, "M", "τ"), - (0x1D7A4, "M", "υ"), - (0x1D7A5, "M", "φ"), - (0x1D7A6, "M", "χ"), - (0x1D7A7, "M", "ψ"), - (0x1D7A8, "M", "ω"), - (0x1D7A9, "M", "∇"), - (0x1D7AA, "M", "α"), - (0x1D7AB, "M", "β"), - (0x1D7AC, "M", "γ"), - (0x1D7AD, "M", "δ"), - (0x1D7AE, "M", "ε"), - (0x1D7AF, "M", "ζ"), - (0x1D7B0, "M", "η"), - (0x1D7B1, "M", "θ"), - (0x1D7B2, "M", "ι"), - (0x1D7B3, "M", "κ"), - (0x1D7B4, "M", "λ"), - (0x1D7B5, "M", "μ"), - (0x1D7B6, "M", "ν"), - (0x1D7B7, "M", "ξ"), - (0x1D7B8, "M", "ο"), - (0x1D7B9, "M", "π"), - (0x1D7BA, "M", "ρ"), - (0x1D7BB, "M", "σ"), - (0x1D7BD, "M", "τ"), - (0x1D7BE, "M", "υ"), - (0x1D7BF, "M", "φ"), - (0x1D7C0, "M", "χ"), - (0x1D7C1, "M", "ψ"), - (0x1D7C2, "M", "ω"), - (0x1D7C3, "M", "∂"), - (0x1D7C4, "M", "ε"), - (0x1D7C5, "M", "θ"), - (0x1D7C6, "M", "κ"), - (0x1D7C7, "M", "φ"), - (0x1D7C8, "M", "ρ"), - (0x1D7C9, "M", "π"), - (0x1D7CA, "M", "ϝ"), - (0x1D7CC, "X"), - (0x1D7CE, "M", "0"), - (0x1D7CF, "M", "1"), - (0x1D7D0, "M", "2"), - (0x1D7D1, "M", "3"), - (0x1D7D2, "M", "4"), - (0x1D7D3, "M", "5"), - (0x1D7D4, "M", "6"), - (0x1D7D5, "M", "7"), - (0x1D7D6, "M", "8"), - (0x1D7D7, "M", "9"), - (0x1D7D8, "M", "0"), - (0x1D7D9, "M", "1"), - (0x1D7DA, "M", "2"), - (0x1D7DB, "M", "3"), - (0x1D7DC, "M", "4"), - (0x1D7DD, "M", "5"), - (0x1D7DE, "M", "6"), - (0x1D7DF, "M", "7"), - (0x1D7E0, "M", "8"), - (0x1D7E1, "M", "9"), - (0x1D7E2, "M", "0"), - (0x1D7E3, "M", "1"), - (0x1D7E4, "M", "2"), - (0x1D7E5, "M", "3"), - (0x1D7E6, "M", "4"), - (0x1D7E7, "M", "5"), - (0x1D7E8, "M", "6"), - (0x1D7E9, "M", "7"), - (0x1D7EA, "M", "8"), - (0x1D7EB, "M", "9"), - (0x1D7EC, "M", "0"), - (0x1D7ED, "M", "1"), - ] - - -def _seg_72() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1D7EE, "M", "2"), - (0x1D7EF, "M", "3"), - (0x1D7F0, "M", "4"), - (0x1D7F1, "M", "5"), - (0x1D7F2, "M", "6"), - (0x1D7F3, "M", "7"), - (0x1D7F4, "M", "8"), - (0x1D7F5, "M", "9"), - (0x1D7F6, "M", "0"), - (0x1D7F7, "M", "1"), - (0x1D7F8, "M", "2"), - (0x1D7F9, "M", "3"), - (0x1D7FA, "M", "4"), - (0x1D7FB, "M", "5"), - (0x1D7FC, "M", "6"), - (0x1D7FD, "M", "7"), - (0x1D7FE, "M", "8"), - (0x1D7FF, "M", "9"), - (0x1D800, "V"), - (0x1DA8C, "X"), - (0x1DA9B, "V"), - (0x1DAA0, "X"), - (0x1DAA1, "V"), - (0x1DAB0, "X"), - (0x1DF00, "V"), - (0x1DF1F, "X"), - (0x1DF25, "V"), - (0x1DF2B, "X"), - (0x1E000, "V"), - (0x1E007, "X"), - (0x1E008, "V"), - (0x1E019, "X"), - (0x1E01B, "V"), - (0x1E022, "X"), - (0x1E023, "V"), - (0x1E025, "X"), - (0x1E026, "V"), - (0x1E02B, "X"), - (0x1E030, "M", "а"), - (0x1E031, "M", "б"), - (0x1E032, "M", "в"), - (0x1E033, "M", "г"), - (0x1E034, "M", "д"), - (0x1E035, "M", "е"), - (0x1E036, "M", "ж"), - (0x1E037, "M", "з"), - (0x1E038, "M", "и"), - (0x1E039, "M", "к"), - (0x1E03A, "M", "л"), - (0x1E03B, "M", "м"), - (0x1E03C, "M", "о"), - (0x1E03D, "M", "п"), - (0x1E03E, "M", "р"), - (0x1E03F, "M", "с"), - (0x1E040, "M", "т"), - (0x1E041, "M", "у"), - (0x1E042, "M", "ф"), - (0x1E043, "M", "х"), - (0x1E044, "M", "ц"), - (0x1E045, "M", "ч"), - (0x1E046, "M", "ш"), - (0x1E047, "M", "ы"), - (0x1E048, "M", "э"), - (0x1E049, "M", "ю"), - (0x1E04A, "M", "ꚉ"), - (0x1E04B, "M", "ә"), - (0x1E04C, "M", "і"), - (0x1E04D, "M", "ј"), - (0x1E04E, "M", "ө"), - (0x1E04F, "M", "ү"), - (0x1E050, "M", "ӏ"), - (0x1E051, "M", "а"), - (0x1E052, "M", "б"), - (0x1E053, "M", "в"), - (0x1E054, "M", "г"), - (0x1E055, "M", "д"), - (0x1E056, "M", "е"), - (0x1E057, "M", "ж"), - (0x1E058, "M", "з"), - (0x1E059, "M", "и"), - (0x1E05A, "M", "к"), - (0x1E05B, "M", "л"), - (0x1E05C, "M", "о"), - (0x1E05D, "M", "п"), - (0x1E05E, "M", "с"), - (0x1E05F, "M", "у"), - (0x1E060, "M", "ф"), - (0x1E061, "M", "х"), - (0x1E062, "M", "ц"), - (0x1E063, "M", "ч"), - (0x1E064, "M", "ш"), - (0x1E065, "M", "ъ"), - (0x1E066, "M", "ы"), - (0x1E067, "M", "ґ"), - (0x1E068, "M", "і"), - (0x1E069, "M", "ѕ"), - (0x1E06A, "M", "џ"), - (0x1E06B, "M", "ҫ"), - (0x1E06C, "M", "ꙑ"), - (0x1E06D, "M", "ұ"), - ] - - -def _seg_73() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1E06E, "X"), - (0x1E08F, "V"), - (0x1E090, "X"), - (0x1E100, "V"), - (0x1E12D, "X"), - (0x1E130, "V"), - (0x1E13E, "X"), - (0x1E140, "V"), - (0x1E14A, "X"), - (0x1E14E, "V"), - (0x1E150, "X"), - (0x1E290, "V"), - (0x1E2AF, "X"), - (0x1E2C0, "V"), - (0x1E2FA, "X"), - (0x1E2FF, "V"), - (0x1E300, "X"), - (0x1E4D0, "V"), - (0x1E4FA, "X"), - (0x1E5D0, "V"), - (0x1E5FB, "X"), - (0x1E5FF, "V"), - (0x1E600, "X"), - (0x1E7E0, "V"), - (0x1E7E7, "X"), - (0x1E7E8, "V"), - (0x1E7EC, "X"), - (0x1E7ED, "V"), - (0x1E7EF, "X"), - (0x1E7F0, "V"), - (0x1E7FF, "X"), - (0x1E800, "V"), - (0x1E8C5, "X"), - (0x1E8C7, "V"), - (0x1E8D7, "X"), - (0x1E900, "M", "𞤢"), - (0x1E901, "M", "𞤣"), - (0x1E902, "M", "𞤤"), - (0x1E903, "M", "𞤥"), - (0x1E904, "M", "𞤦"), - (0x1E905, "M", "𞤧"), - (0x1E906, "M", "𞤨"), - (0x1E907, "M", "𞤩"), - (0x1E908, "M", "𞤪"), - (0x1E909, "M", "𞤫"), - (0x1E90A, "M", "𞤬"), - (0x1E90B, "M", "𞤭"), - (0x1E90C, "M", "𞤮"), - (0x1E90D, "M", "𞤯"), - (0x1E90E, "M", "𞤰"), - (0x1E90F, "M", "𞤱"), - (0x1E910, "M", "𞤲"), - (0x1E911, "M", "𞤳"), - (0x1E912, "M", "𞤴"), - (0x1E913, "M", "𞤵"), - (0x1E914, "M", "𞤶"), - (0x1E915, "M", "𞤷"), - (0x1E916, "M", "𞤸"), - (0x1E917, "M", "𞤹"), - (0x1E918, "M", "𞤺"), - (0x1E919, "M", "𞤻"), - (0x1E91A, "M", "𞤼"), - (0x1E91B, "M", "𞤽"), - (0x1E91C, "M", "𞤾"), - (0x1E91D, "M", "𞤿"), - (0x1E91E, "M", "𞥀"), - (0x1E91F, "M", "𞥁"), - (0x1E920, "M", "𞥂"), - (0x1E921, "M", "𞥃"), - (0x1E922, "V"), - (0x1E94C, "X"), - (0x1E950, "V"), - (0x1E95A, "X"), - (0x1E95E, "V"), - (0x1E960, "X"), - (0x1EC71, "V"), - (0x1ECB5, "X"), - (0x1ED01, "V"), - (0x1ED3E, "X"), - (0x1EE00, "M", "ا"), - (0x1EE01, "M", "ب"), - (0x1EE02, "M", "ج"), - (0x1EE03, "M", "د"), - (0x1EE04, "X"), - (0x1EE05, "M", "و"), - (0x1EE06, "M", "ز"), - (0x1EE07, "M", "ح"), - (0x1EE08, "M", "ط"), - (0x1EE09, "M", "ي"), - (0x1EE0A, "M", "ك"), - (0x1EE0B, "M", "ل"), - (0x1EE0C, "M", "م"), - (0x1EE0D, "M", "ن"), - (0x1EE0E, "M", "س"), - (0x1EE0F, "M", "ع"), - (0x1EE10, "M", "ف"), - (0x1EE11, "M", "ص"), - (0x1EE12, "M", "ق"), - (0x1EE13, "M", "ر"), - (0x1EE14, "M", "ش"), - ] - - -def _seg_74() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EE15, "M", "ت"), - (0x1EE16, "M", "ث"), - (0x1EE17, "M", "خ"), - (0x1EE18, "M", "ذ"), - (0x1EE19, "M", "ض"), - (0x1EE1A, "M", "ظ"), - (0x1EE1B, "M", "غ"), - (0x1EE1C, "M", "ٮ"), - (0x1EE1D, "M", "ں"), - (0x1EE1E, "M", "ڡ"), - (0x1EE1F, "M", "ٯ"), - (0x1EE20, "X"), - (0x1EE21, "M", "ب"), - (0x1EE22, "M", "ج"), - (0x1EE23, "X"), - (0x1EE24, "M", "ه"), - (0x1EE25, "X"), - (0x1EE27, "M", "ح"), - (0x1EE28, "X"), - (0x1EE29, "M", "ي"), - (0x1EE2A, "M", "ك"), - (0x1EE2B, "M", "ل"), - (0x1EE2C, "M", "م"), - (0x1EE2D, "M", "ن"), - (0x1EE2E, "M", "س"), - (0x1EE2F, "M", "ع"), - (0x1EE30, "M", "ف"), - (0x1EE31, "M", "ص"), - (0x1EE32, "M", "ق"), - (0x1EE33, "X"), - (0x1EE34, "M", "ش"), - (0x1EE35, "M", "ت"), - (0x1EE36, "M", "ث"), - (0x1EE37, "M", "خ"), - (0x1EE38, "X"), - (0x1EE39, "M", "ض"), - (0x1EE3A, "X"), - (0x1EE3B, "M", "غ"), - (0x1EE3C, "X"), - (0x1EE42, "M", "ج"), - (0x1EE43, "X"), - (0x1EE47, "M", "ح"), - (0x1EE48, "X"), - (0x1EE49, "M", "ي"), - (0x1EE4A, "X"), - (0x1EE4B, "M", "ل"), - (0x1EE4C, "X"), - (0x1EE4D, "M", "ن"), - (0x1EE4E, "M", "س"), - (0x1EE4F, "M", "ع"), - (0x1EE50, "X"), - (0x1EE51, "M", "ص"), - (0x1EE52, "M", "ق"), - (0x1EE53, "X"), - (0x1EE54, "M", "ش"), - (0x1EE55, "X"), - (0x1EE57, "M", "خ"), - (0x1EE58, "X"), - (0x1EE59, "M", "ض"), - (0x1EE5A, "X"), - (0x1EE5B, "M", "غ"), - (0x1EE5C, "X"), - (0x1EE5D, "M", "ں"), - (0x1EE5E, "X"), - (0x1EE5F, "M", "ٯ"), - (0x1EE60, "X"), - (0x1EE61, "M", "ب"), - (0x1EE62, "M", "ج"), - (0x1EE63, "X"), - (0x1EE64, "M", "ه"), - (0x1EE65, "X"), - (0x1EE67, "M", "ح"), - (0x1EE68, "M", "ط"), - (0x1EE69, "M", "ي"), - (0x1EE6A, "M", "ك"), - (0x1EE6B, "X"), - (0x1EE6C, "M", "م"), - (0x1EE6D, "M", "ن"), - (0x1EE6E, "M", "س"), - (0x1EE6F, "M", "ع"), - (0x1EE70, "M", "ف"), - (0x1EE71, "M", "ص"), - (0x1EE72, "M", "ق"), - (0x1EE73, "X"), - (0x1EE74, "M", "ش"), - (0x1EE75, "M", "ت"), - (0x1EE76, "M", "ث"), - (0x1EE77, "M", "خ"), - (0x1EE78, "X"), - (0x1EE79, "M", "ض"), - (0x1EE7A, "M", "ظ"), - (0x1EE7B, "M", "غ"), - (0x1EE7C, "M", "ٮ"), - (0x1EE7D, "X"), - (0x1EE7E, "M", "ڡ"), - (0x1EE7F, "X"), - (0x1EE80, "M", "ا"), - (0x1EE81, "M", "ب"), - (0x1EE82, "M", "ج"), - (0x1EE83, "M", "د"), - ] - - -def _seg_75() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1EE84, "M", "ه"), - (0x1EE85, "M", "و"), - (0x1EE86, "M", "ز"), - (0x1EE87, "M", "ح"), - (0x1EE88, "M", "ط"), - (0x1EE89, "M", "ي"), - (0x1EE8A, "X"), - (0x1EE8B, "M", "ل"), - (0x1EE8C, "M", "م"), - (0x1EE8D, "M", "ن"), - (0x1EE8E, "M", "س"), - (0x1EE8F, "M", "ع"), - (0x1EE90, "M", "ف"), - (0x1EE91, "M", "ص"), - (0x1EE92, "M", "ق"), - (0x1EE93, "M", "ر"), - (0x1EE94, "M", "ش"), - (0x1EE95, "M", "ت"), - (0x1EE96, "M", "ث"), - (0x1EE97, "M", "خ"), - (0x1EE98, "M", "ذ"), - (0x1EE99, "M", "ض"), - (0x1EE9A, "M", "ظ"), - (0x1EE9B, "M", "غ"), - (0x1EE9C, "X"), - (0x1EEA1, "M", "ب"), - (0x1EEA2, "M", "ج"), - (0x1EEA3, "M", "د"), - (0x1EEA4, "X"), - (0x1EEA5, "M", "و"), - (0x1EEA6, "M", "ز"), - (0x1EEA7, "M", "ح"), - (0x1EEA8, "M", "ط"), - (0x1EEA9, "M", "ي"), - (0x1EEAA, "X"), - (0x1EEAB, "M", "ل"), - (0x1EEAC, "M", "م"), - (0x1EEAD, "M", "ن"), - (0x1EEAE, "M", "س"), - (0x1EEAF, "M", "ع"), - (0x1EEB0, "M", "ف"), - (0x1EEB1, "M", "ص"), - (0x1EEB2, "M", "ق"), - (0x1EEB3, "M", "ر"), - (0x1EEB4, "M", "ش"), - (0x1EEB5, "M", "ت"), - (0x1EEB6, "M", "ث"), - (0x1EEB7, "M", "خ"), - (0x1EEB8, "M", "ذ"), - (0x1EEB9, "M", "ض"), - (0x1EEBA, "M", "ظ"), - (0x1EEBB, "M", "غ"), - (0x1EEBC, "X"), - (0x1EEF0, "V"), - (0x1EEF2, "X"), - (0x1F000, "V"), - (0x1F02C, "X"), - (0x1F030, "V"), - (0x1F094, "X"), - (0x1F0A0, "V"), - (0x1F0AF, "X"), - (0x1F0B1, "V"), - (0x1F0C0, "X"), - (0x1F0C1, "V"), - (0x1F0D0, "X"), - (0x1F0D1, "V"), - (0x1F0F6, "X"), - (0x1F101, "M", "0,"), - (0x1F102, "M", "1,"), - (0x1F103, "M", "2,"), - (0x1F104, "M", "3,"), - (0x1F105, "M", "4,"), - (0x1F106, "M", "5,"), - (0x1F107, "M", "6,"), - (0x1F108, "M", "7,"), - (0x1F109, "M", "8,"), - (0x1F10A, "M", "9,"), - (0x1F10B, "V"), - (0x1F110, "M", "(a)"), - (0x1F111, "M", "(b)"), - (0x1F112, "M", "(c)"), - (0x1F113, "M", "(d)"), - (0x1F114, "M", "(e)"), - (0x1F115, "M", "(f)"), - (0x1F116, "M", "(g)"), - (0x1F117, "M", "(h)"), - (0x1F118, "M", "(i)"), - (0x1F119, "M", "(j)"), - (0x1F11A, "M", "(k)"), - (0x1F11B, "M", "(l)"), - (0x1F11C, "M", "(m)"), - (0x1F11D, "M", "(n)"), - (0x1F11E, "M", "(o)"), - (0x1F11F, "M", "(p)"), - (0x1F120, "M", "(q)"), - (0x1F121, "M", "(r)"), - (0x1F122, "M", "(s)"), - (0x1F123, "M", "(t)"), - (0x1F124, "M", "(u)"), - (0x1F125, "M", "(v)"), - ] - - -def _seg_76() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F126, "M", "(w)"), - (0x1F127, "M", "(x)"), - (0x1F128, "M", "(y)"), - (0x1F129, "M", "(z)"), - (0x1F12A, "M", "〔s〕"), - (0x1F12B, "M", "c"), - (0x1F12C, "M", "r"), - (0x1F12D, "M", "cd"), - (0x1F12E, "M", "wz"), - (0x1F12F, "V"), - (0x1F130, "M", "a"), - (0x1F131, "M", "b"), - (0x1F132, "M", "c"), - (0x1F133, "M", "d"), - (0x1F134, "M", "e"), - (0x1F135, "M", "f"), - (0x1F136, "M", "g"), - (0x1F137, "M", "h"), - (0x1F138, "M", "i"), - (0x1F139, "M", "j"), - (0x1F13A, "M", "k"), - (0x1F13B, "M", "l"), - (0x1F13C, "M", "m"), - (0x1F13D, "M", "n"), - (0x1F13E, "M", "o"), - (0x1F13F, "M", "p"), - (0x1F140, "M", "q"), - (0x1F141, "M", "r"), - (0x1F142, "M", "s"), - (0x1F143, "M", "t"), - (0x1F144, "M", "u"), - (0x1F145, "M", "v"), - (0x1F146, "M", "w"), - (0x1F147, "M", "x"), - (0x1F148, "M", "y"), - (0x1F149, "M", "z"), - (0x1F14A, "M", "hv"), - (0x1F14B, "M", "mv"), - (0x1F14C, "M", "sd"), - (0x1F14D, "M", "ss"), - (0x1F14E, "M", "ppv"), - (0x1F14F, "M", "wc"), - (0x1F150, "V"), - (0x1F16A, "M", "mc"), - (0x1F16B, "M", "md"), - (0x1F16C, "M", "mr"), - (0x1F16D, "V"), - (0x1F190, "M", "dj"), - (0x1F191, "V"), - (0x1F1AE, "X"), - (0x1F1E6, "V"), - (0x1F200, "M", "ほか"), - (0x1F201, "M", "ココ"), - (0x1F202, "M", "サ"), - (0x1F203, "X"), - (0x1F210, "M", "手"), - (0x1F211, "M", "字"), - (0x1F212, "M", "双"), - (0x1F213, "M", "デ"), - (0x1F214, "M", "二"), - (0x1F215, "M", "多"), - (0x1F216, "M", "解"), - (0x1F217, "M", "天"), - (0x1F218, "M", "交"), - (0x1F219, "M", "映"), - (0x1F21A, "M", "無"), - (0x1F21B, "M", "料"), - (0x1F21C, "M", "前"), - (0x1F21D, "M", "後"), - (0x1F21E, "M", "再"), - (0x1F21F, "M", "新"), - (0x1F220, "M", "初"), - (0x1F221, "M", "終"), - (0x1F222, "M", "生"), - (0x1F223, "M", "販"), - (0x1F224, "M", "声"), - (0x1F225, "M", "吹"), - (0x1F226, "M", "演"), - (0x1F227, "M", "投"), - (0x1F228, "M", "捕"), - (0x1F229, "M", "一"), - (0x1F22A, "M", "三"), - (0x1F22B, "M", "遊"), - (0x1F22C, "M", "左"), - (0x1F22D, "M", "中"), - (0x1F22E, "M", "右"), - (0x1F22F, "M", "指"), - (0x1F230, "M", "走"), - (0x1F231, "M", "打"), - (0x1F232, "M", "禁"), - (0x1F233, "M", "空"), - (0x1F234, "M", "合"), - (0x1F235, "M", "満"), - (0x1F236, "M", "有"), - (0x1F237, "M", "月"), - (0x1F238, "M", "申"), - (0x1F239, "M", "割"), - (0x1F23A, "M", "営"), - (0x1F23B, "M", "配"), - (0x1F23C, "X"), - ] - - -def _seg_77() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x1F240, "M", "〔本〕"), - (0x1F241, "M", "〔三〕"), - (0x1F242, "M", "〔二〕"), - (0x1F243, "M", "〔安〕"), - (0x1F244, "M", "〔点〕"), - (0x1F245, "M", "〔打〕"), - (0x1F246, "M", "〔盗〕"), - (0x1F247, "M", "〔勝〕"), - (0x1F248, "M", "〔敗〕"), - (0x1F249, "X"), - (0x1F250, "M", "得"), - (0x1F251, "M", "可"), - (0x1F252, "X"), - (0x1F260, "V"), - (0x1F266, "X"), - (0x1F300, "V"), - (0x1F6D8, "X"), - (0x1F6DC, "V"), - (0x1F6ED, "X"), - (0x1F6F0, "V"), - (0x1F6FD, "X"), - (0x1F700, "V"), - (0x1F777, "X"), - (0x1F77B, "V"), - (0x1F7DA, "X"), - (0x1F7E0, "V"), - (0x1F7EC, "X"), - (0x1F7F0, "V"), - (0x1F7F1, "X"), - (0x1F800, "V"), - (0x1F80C, "X"), - (0x1F810, "V"), - (0x1F848, "X"), - (0x1F850, "V"), - (0x1F85A, "X"), - (0x1F860, "V"), - (0x1F888, "X"), - (0x1F890, "V"), - (0x1F8AE, "X"), - (0x1F8B0, "V"), - (0x1F8BC, "X"), - (0x1F8C0, "V"), - (0x1F8C2, "X"), - (0x1F900, "V"), - (0x1FA54, "X"), - (0x1FA60, "V"), - (0x1FA6E, "X"), - (0x1FA70, "V"), - (0x1FA7D, "X"), - (0x1FA80, "V"), - (0x1FA8A, "X"), - (0x1FA8F, "V"), - (0x1FAC7, "X"), - (0x1FACE, "V"), - (0x1FADD, "X"), - (0x1FADF, "V"), - (0x1FAEA, "X"), - (0x1FAF0, "V"), - (0x1FAF9, "X"), - (0x1FB00, "V"), - (0x1FB93, "X"), - (0x1FB94, "V"), - (0x1FBF0, "M", "0"), - (0x1FBF1, "M", "1"), - (0x1FBF2, "M", "2"), - (0x1FBF3, "M", "3"), - (0x1FBF4, "M", "4"), - (0x1FBF5, "M", "5"), - (0x1FBF6, "M", "6"), - (0x1FBF7, "M", "7"), - (0x1FBF8, "M", "8"), - (0x1FBF9, "M", "9"), - (0x1FBFA, "X"), - (0x20000, "V"), - (0x2A6E0, "X"), - (0x2A700, "V"), - (0x2B73A, "X"), - (0x2B740, "V"), - (0x2B81E, "X"), - (0x2B820, "V"), - (0x2CEA2, "X"), - (0x2CEB0, "V"), - (0x2EBE1, "X"), - (0x2EBF0, "V"), - (0x2EE5E, "X"), - (0x2F800, "M", "丽"), - (0x2F801, "M", "丸"), - (0x2F802, "M", "乁"), - (0x2F803, "M", "𠄢"), - (0x2F804, "M", "你"), - (0x2F805, "M", "侮"), - (0x2F806, "M", "侻"), - (0x2F807, "M", "倂"), - (0x2F808, "M", "偺"), - (0x2F809, "M", "備"), - (0x2F80A, "M", "僧"), - (0x2F80B, "M", "像"), - (0x2F80C, "M", "㒞"), - (0x2F80D, "M", "𠘺"), - (0x2F80E, "M", "免"), - ] - - -def _seg_78() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F80F, "M", "兔"), - (0x2F810, "M", "兤"), - (0x2F811, "M", "具"), - (0x2F812, "M", "𠔜"), - (0x2F813, "M", "㒹"), - (0x2F814, "M", "內"), - (0x2F815, "M", "再"), - (0x2F816, "M", "𠕋"), - (0x2F817, "M", "冗"), - (0x2F818, "M", "冤"), - (0x2F819, "M", "仌"), - (0x2F81A, "M", "冬"), - (0x2F81B, "M", "况"), - (0x2F81C, "M", "𩇟"), - (0x2F81D, "M", "凵"), - (0x2F81E, "M", "刃"), - (0x2F81F, "M", "㓟"), - (0x2F820, "M", "刻"), - (0x2F821, "M", "剆"), - (0x2F822, "M", "割"), - (0x2F823, "M", "剷"), - (0x2F824, "M", "㔕"), - (0x2F825, "M", "勇"), - (0x2F826, "M", "勉"), - (0x2F827, "M", "勤"), - (0x2F828, "M", "勺"), - (0x2F829, "M", "包"), - (0x2F82A, "M", "匆"), - (0x2F82B, "M", "北"), - (0x2F82C, "M", "卉"), - (0x2F82D, "M", "卑"), - (0x2F82E, "M", "博"), - (0x2F82F, "M", "即"), - (0x2F830, "M", "卽"), - (0x2F831, "M", "卿"), - (0x2F834, "M", "𠨬"), - (0x2F835, "M", "灰"), - (0x2F836, "M", "及"), - (0x2F837, "M", "叟"), - (0x2F838, "M", "𠭣"), - (0x2F839, "M", "叫"), - (0x2F83A, "M", "叱"), - (0x2F83B, "M", "吆"), - (0x2F83C, "M", "咞"), - (0x2F83D, "M", "吸"), - (0x2F83E, "M", "呈"), - (0x2F83F, "M", "周"), - (0x2F840, "M", "咢"), - (0x2F841, "M", "哶"), - (0x2F842, "M", "唐"), - (0x2F843, "M", "啓"), - (0x2F844, "M", "啣"), - (0x2F845, "M", "善"), - (0x2F847, "M", "喙"), - (0x2F848, "M", "喫"), - (0x2F849, "M", "喳"), - (0x2F84A, "M", "嗂"), - (0x2F84B, "M", "圖"), - (0x2F84C, "M", "嘆"), - (0x2F84D, "M", "圗"), - (0x2F84E, "M", "噑"), - (0x2F84F, "M", "噴"), - (0x2F850, "M", "切"), - (0x2F851, "M", "壮"), - (0x2F852, "M", "城"), - (0x2F853, "M", "埴"), - (0x2F854, "M", "堍"), - (0x2F855, "M", "型"), - (0x2F856, "M", "堲"), - (0x2F857, "M", "報"), - (0x2F858, "M", "墬"), - (0x2F859, "M", "𡓤"), - (0x2F85A, "M", "売"), - (0x2F85B, "M", "壷"), - (0x2F85C, "M", "夆"), - (0x2F85D, "M", "多"), - (0x2F85E, "M", "夢"), - (0x2F85F, "M", "奢"), - (0x2F860, "M", "𡚨"), - (0x2F861, "M", "𡛪"), - (0x2F862, "M", "姬"), - (0x2F863, "M", "娛"), - (0x2F864, "M", "娧"), - (0x2F865, "M", "姘"), - (0x2F866, "M", "婦"), - (0x2F867, "M", "㛮"), - (0x2F868, "M", "㛼"), - (0x2F869, "M", "嬈"), - (0x2F86A, "M", "嬾"), - (0x2F86C, "M", "𡧈"), - (0x2F86D, "M", "寃"), - (0x2F86E, "M", "寘"), - (0x2F86F, "M", "寧"), - (0x2F870, "M", "寳"), - (0x2F871, "M", "𡬘"), - (0x2F872, "M", "寿"), - (0x2F873, "M", "将"), - (0x2F874, "M", "当"), - (0x2F875, "M", "尢"), - (0x2F876, "M", "㞁"), - ] - - -def _seg_79() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F877, "M", "屠"), - (0x2F878, "M", "屮"), - (0x2F879, "M", "峀"), - (0x2F87A, "M", "岍"), - (0x2F87B, "M", "𡷤"), - (0x2F87C, "M", "嵃"), - (0x2F87D, "M", "𡷦"), - (0x2F87E, "M", "嵮"), - (0x2F87F, "M", "嵫"), - (0x2F880, "M", "嵼"), - (0x2F881, "M", "巡"), - (0x2F882, "M", "巢"), - (0x2F883, "M", "㠯"), - (0x2F884, "M", "巽"), - (0x2F885, "M", "帨"), - (0x2F886, "M", "帽"), - (0x2F887, "M", "幩"), - (0x2F888, "M", "㡢"), - (0x2F889, "M", "𢆃"), - (0x2F88A, "M", "㡼"), - (0x2F88B, "M", "庰"), - (0x2F88C, "M", "庳"), - (0x2F88D, "M", "庶"), - (0x2F88E, "M", "廊"), - (0x2F88F, "M", "𪎒"), - (0x2F890, "M", "廾"), - (0x2F891, "M", "𢌱"), - (0x2F893, "M", "舁"), - (0x2F894, "M", "弢"), - (0x2F896, "M", "㣇"), - (0x2F897, "M", "𣊸"), - (0x2F898, "M", "𦇚"), - (0x2F899, "M", "形"), - (0x2F89A, "M", "彫"), - (0x2F89B, "M", "㣣"), - (0x2F89C, "M", "徚"), - (0x2F89D, "M", "忍"), - (0x2F89E, "M", "志"), - (0x2F89F, "M", "忹"), - (0x2F8A0, "M", "悁"), - (0x2F8A1, "M", "㤺"), - (0x2F8A2, "M", "㤜"), - (0x2F8A3, "M", "悔"), - (0x2F8A4, "M", "𢛔"), - (0x2F8A5, "M", "惇"), - (0x2F8A6, "M", "慈"), - (0x2F8A7, "M", "慌"), - (0x2F8A8, "M", "慎"), - (0x2F8A9, "M", "慌"), - (0x2F8AA, "M", "慺"), - (0x2F8AB, "M", "憎"), - (0x2F8AC, "M", "憲"), - (0x2F8AD, "M", "憤"), - (0x2F8AE, "M", "憯"), - (0x2F8AF, "M", "懞"), - (0x2F8B0, "M", "懲"), - (0x2F8B1, "M", "懶"), - (0x2F8B2, "M", "成"), - (0x2F8B3, "M", "戛"), - (0x2F8B4, "M", "扝"), - (0x2F8B5, "M", "抱"), - (0x2F8B6, "M", "拔"), - (0x2F8B7, "M", "捐"), - (0x2F8B8, "M", "𢬌"), - (0x2F8B9, "M", "挽"), - (0x2F8BA, "M", "拼"), - (0x2F8BB, "M", "捨"), - (0x2F8BC, "M", "掃"), - (0x2F8BD, "M", "揤"), - (0x2F8BE, "M", "𢯱"), - (0x2F8BF, "M", "搢"), - (0x2F8C0, "M", "揅"), - (0x2F8C1, "M", "掩"), - (0x2F8C2, "M", "㨮"), - (0x2F8C3, "M", "摩"), - (0x2F8C4, "M", "摾"), - (0x2F8C5, "M", "撝"), - (0x2F8C6, "M", "摷"), - (0x2F8C7, "M", "㩬"), - (0x2F8C8, "M", "敏"), - (0x2F8C9, "M", "敬"), - (0x2F8CA, "M", "𣀊"), - (0x2F8CB, "M", "旣"), - (0x2F8CC, "M", "書"), - (0x2F8CD, "M", "晉"), - (0x2F8CE, "M", "㬙"), - (0x2F8CF, "M", "暑"), - (0x2F8D0, "M", "㬈"), - (0x2F8D1, "M", "㫤"), - (0x2F8D2, "M", "冒"), - (0x2F8D3, "M", "冕"), - (0x2F8D4, "M", "最"), - (0x2F8D5, "M", "暜"), - (0x2F8D6, "M", "肭"), - (0x2F8D7, "M", "䏙"), - (0x2F8D8, "M", "朗"), - (0x2F8D9, "M", "望"), - (0x2F8DA, "M", "朡"), - (0x2F8DB, "M", "杞"), - (0x2F8DC, "M", "杓"), - ] - - -def _seg_80() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F8DD, "M", "𣏃"), - (0x2F8DE, "M", "㭉"), - (0x2F8DF, "M", "柺"), - (0x2F8E0, "M", "枅"), - (0x2F8E1, "M", "桒"), - (0x2F8E2, "M", "梅"), - (0x2F8E3, "M", "𣑭"), - (0x2F8E4, "M", "梎"), - (0x2F8E5, "M", "栟"), - (0x2F8E6, "M", "椔"), - (0x2F8E7, "M", "㮝"), - (0x2F8E8, "M", "楂"), - (0x2F8E9, "M", "榣"), - (0x2F8EA, "M", "槪"), - (0x2F8EB, "M", "檨"), - (0x2F8EC, "M", "𣚣"), - (0x2F8ED, "M", "櫛"), - (0x2F8EE, "M", "㰘"), - (0x2F8EF, "M", "次"), - (0x2F8F0, "M", "𣢧"), - (0x2F8F1, "M", "歔"), - (0x2F8F2, "M", "㱎"), - (0x2F8F3, "M", "歲"), - (0x2F8F4, "M", "殟"), - (0x2F8F5, "M", "殺"), - (0x2F8F6, "M", "殻"), - (0x2F8F7, "M", "𣪍"), - (0x2F8F8, "M", "𡴋"), - (0x2F8F9, "M", "𣫺"), - (0x2F8FA, "M", "汎"), - (0x2F8FB, "M", "𣲼"), - (0x2F8FC, "M", "沿"), - (0x2F8FD, "M", "泍"), - (0x2F8FE, "M", "汧"), - (0x2F8FF, "M", "洖"), - (0x2F900, "M", "派"), - (0x2F901, "M", "海"), - (0x2F902, "M", "流"), - (0x2F903, "M", "浩"), - (0x2F904, "M", "浸"), - (0x2F905, "M", "涅"), - (0x2F906, "M", "𣴞"), - (0x2F907, "M", "洴"), - (0x2F908, "M", "港"), - (0x2F909, "M", "湮"), - (0x2F90A, "M", "㴳"), - (0x2F90B, "M", "滋"), - (0x2F90C, "M", "滇"), - (0x2F90D, "M", "𣻑"), - (0x2F90E, "M", "淹"), - (0x2F90F, "M", "潮"), - (0x2F910, "M", "𣽞"), - (0x2F911, "M", "𣾎"), - (0x2F912, "M", "濆"), - (0x2F913, "M", "瀹"), - (0x2F914, "M", "瀞"), - (0x2F915, "M", "瀛"), - (0x2F916, "M", "㶖"), - (0x2F917, "M", "灊"), - (0x2F918, "M", "災"), - (0x2F919, "M", "灷"), - (0x2F91A, "M", "炭"), - (0x2F91B, "M", "𠔥"), - (0x2F91C, "M", "煅"), - (0x2F91D, "M", "𤉣"), - (0x2F91E, "M", "熜"), - (0x2F91F, "M", "𤎫"), - (0x2F920, "M", "爨"), - (0x2F921, "M", "爵"), - (0x2F922, "M", "牐"), - (0x2F923, "M", "𤘈"), - (0x2F924, "M", "犀"), - (0x2F925, "M", "犕"), - (0x2F926, "M", "𤜵"), - (0x2F927, "M", "𤠔"), - (0x2F928, "M", "獺"), - (0x2F929, "M", "王"), - (0x2F92A, "M", "㺬"), - (0x2F92B, "M", "玥"), - (0x2F92C, "M", "㺸"), - (0x2F92E, "M", "瑇"), - (0x2F92F, "M", "瑜"), - (0x2F930, "M", "瑱"), - (0x2F931, "M", "璅"), - (0x2F932, "M", "瓊"), - (0x2F933, "M", "㼛"), - (0x2F934, "M", "甤"), - (0x2F935, "M", "𤰶"), - (0x2F936, "M", "甾"), - (0x2F937, "M", "𤲒"), - (0x2F938, "M", "異"), - (0x2F939, "M", "𢆟"), - (0x2F93A, "M", "瘐"), - (0x2F93B, "M", "𤾡"), - (0x2F93C, "M", "𤾸"), - (0x2F93D, "M", "𥁄"), - (0x2F93E, "M", "㿼"), - (0x2F93F, "M", "䀈"), - (0x2F940, "M", "直"), - (0x2F941, "M", "𥃳"), - ] - - -def _seg_81() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F942, "M", "𥃲"), - (0x2F943, "M", "𥄙"), - (0x2F944, "M", "𥄳"), - (0x2F945, "M", "眞"), - (0x2F946, "M", "真"), - (0x2F948, "M", "睊"), - (0x2F949, "M", "䀹"), - (0x2F94A, "M", "瞋"), - (0x2F94B, "M", "䁆"), - (0x2F94C, "M", "䂖"), - (0x2F94D, "M", "𥐝"), - (0x2F94E, "M", "硎"), - (0x2F94F, "M", "碌"), - (0x2F950, "M", "磌"), - (0x2F951, "M", "䃣"), - (0x2F952, "M", "𥘦"), - (0x2F953, "M", "祖"), - (0x2F954, "M", "𥚚"), - (0x2F955, "M", "𥛅"), - (0x2F956, "M", "福"), - (0x2F957, "M", "秫"), - (0x2F958, "M", "䄯"), - (0x2F959, "M", "穀"), - (0x2F95A, "M", "穊"), - (0x2F95B, "M", "穏"), - (0x2F95C, "M", "𥥼"), - (0x2F95D, "M", "𥪧"), - (0x2F95F, "M", "竮"), - (0x2F960, "M", "䈂"), - (0x2F961, "M", "𥮫"), - (0x2F962, "M", "篆"), - (0x2F963, "M", "築"), - (0x2F964, "M", "䈧"), - (0x2F965, "M", "𥲀"), - (0x2F966, "M", "糒"), - (0x2F967, "M", "䊠"), - (0x2F968, "M", "糨"), - (0x2F969, "M", "糣"), - (0x2F96A, "M", "紀"), - (0x2F96B, "M", "𥾆"), - (0x2F96C, "M", "絣"), - (0x2F96D, "M", "䌁"), - (0x2F96E, "M", "緇"), - (0x2F96F, "M", "縂"), - (0x2F970, "M", "繅"), - (0x2F971, "M", "䌴"), - (0x2F972, "M", "𦈨"), - (0x2F973, "M", "𦉇"), - (0x2F974, "M", "䍙"), - (0x2F975, "M", "𦋙"), - (0x2F976, "M", "罺"), - (0x2F977, "M", "𦌾"), - (0x2F978, "M", "羕"), - (0x2F979, "M", "翺"), - (0x2F97A, "M", "者"), - (0x2F97B, "M", "𦓚"), - (0x2F97C, "M", "𦔣"), - (0x2F97D, "M", "聠"), - (0x2F97E, "M", "𦖨"), - (0x2F97F, "M", "聰"), - (0x2F980, "M", "𣍟"), - (0x2F981, "M", "䏕"), - (0x2F982, "M", "育"), - (0x2F983, "M", "脃"), - (0x2F984, "M", "䐋"), - (0x2F985, "M", "脾"), - (0x2F986, "M", "媵"), - (0x2F987, "M", "𦞧"), - (0x2F988, "M", "𦞵"), - (0x2F989, "M", "𣎓"), - (0x2F98A, "M", "𣎜"), - (0x2F98B, "M", "舁"), - (0x2F98C, "M", "舄"), - (0x2F98D, "M", "辞"), - (0x2F98E, "M", "䑫"), - (0x2F98F, "M", "芑"), - (0x2F990, "M", "芋"), - (0x2F991, "M", "芝"), - (0x2F992, "M", "劳"), - (0x2F993, "M", "花"), - (0x2F994, "M", "芳"), - (0x2F995, "M", "芽"), - (0x2F996, "M", "苦"), - (0x2F997, "M", "𦬼"), - (0x2F998, "M", "若"), - (0x2F999, "M", "茝"), - (0x2F99A, "M", "荣"), - (0x2F99B, "M", "莭"), - (0x2F99C, "M", "茣"), - (0x2F99D, "M", "莽"), - (0x2F99E, "M", "菧"), - (0x2F99F, "M", "著"), - (0x2F9A0, "M", "荓"), - (0x2F9A1, "M", "菊"), - (0x2F9A2, "M", "菌"), - (0x2F9A3, "M", "菜"), - (0x2F9A4, "M", "𦰶"), - (0x2F9A5, "M", "𦵫"), - (0x2F9A6, "M", "𦳕"), - (0x2F9A7, "M", "䔫"), - ] - - -def _seg_82() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2F9A8, "M", "蓱"), - (0x2F9A9, "M", "蓳"), - (0x2F9AA, "M", "蔖"), - (0x2F9AB, "M", "𧏊"), - (0x2F9AC, "M", "蕤"), - (0x2F9AD, "M", "𦼬"), - (0x2F9AE, "M", "䕝"), - (0x2F9AF, "M", "䕡"), - (0x2F9B0, "M", "𦾱"), - (0x2F9B1, "M", "𧃒"), - (0x2F9B2, "M", "䕫"), - (0x2F9B3, "M", "虐"), - (0x2F9B4, "M", "虜"), - (0x2F9B5, "M", "虧"), - (0x2F9B6, "M", "虩"), - (0x2F9B7, "M", "蚩"), - (0x2F9B8, "M", "蚈"), - (0x2F9B9, "M", "蜎"), - (0x2F9BA, "M", "蛢"), - (0x2F9BB, "M", "蝹"), - (0x2F9BC, "M", "蜨"), - (0x2F9BD, "M", "蝫"), - (0x2F9BE, "M", "螆"), - (0x2F9BF, "M", "䗗"), - (0x2F9C0, "M", "蟡"), - (0x2F9C1, "M", "蠁"), - (0x2F9C2, "M", "䗹"), - (0x2F9C3, "M", "衠"), - (0x2F9C4, "M", "衣"), - (0x2F9C5, "M", "𧙧"), - (0x2F9C6, "M", "裗"), - (0x2F9C7, "M", "裞"), - (0x2F9C8, "M", "䘵"), - (0x2F9C9, "M", "裺"), - (0x2F9CA, "M", "㒻"), - (0x2F9CB, "M", "𧢮"), - (0x2F9CC, "M", "𧥦"), - (0x2F9CD, "M", "䚾"), - (0x2F9CE, "M", "䛇"), - (0x2F9CF, "M", "誠"), - (0x2F9D0, "M", "諭"), - (0x2F9D1, "M", "變"), - (0x2F9D2, "M", "豕"), - (0x2F9D3, "M", "𧲨"), - (0x2F9D4, "M", "貫"), - (0x2F9D5, "M", "賁"), - (0x2F9D6, "M", "贛"), - (0x2F9D7, "M", "起"), - (0x2F9D8, "M", "𧼯"), - (0x2F9D9, "M", "𠠄"), - (0x2F9DA, "M", "跋"), - (0x2F9DB, "M", "趼"), - (0x2F9DC, "M", "跰"), - (0x2F9DD, "M", "𠣞"), - (0x2F9DE, "M", "軔"), - (0x2F9DF, "M", "輸"), - (0x2F9E0, "M", "𨗒"), - (0x2F9E1, "M", "𨗭"), - (0x2F9E2, "M", "邔"), - (0x2F9E3, "M", "郱"), - (0x2F9E4, "M", "鄑"), - (0x2F9E5, "M", "𨜮"), - (0x2F9E6, "M", "鄛"), - (0x2F9E7, "M", "鈸"), - (0x2F9E8, "M", "鋗"), - (0x2F9E9, "M", "鋘"), - (0x2F9EA, "M", "鉼"), - (0x2F9EB, "M", "鏹"), - (0x2F9EC, "M", "鐕"), - (0x2F9ED, "M", "𨯺"), - (0x2F9EE, "M", "開"), - (0x2F9EF, "M", "䦕"), - (0x2F9F0, "M", "閷"), - (0x2F9F1, "M", "𨵷"), - (0x2F9F2, "M", "䧦"), - (0x2F9F3, "M", "雃"), - (0x2F9F4, "M", "嶲"), - (0x2F9F5, "M", "霣"), - (0x2F9F6, "M", "𩅅"), - (0x2F9F7, "M", "𩈚"), - (0x2F9F8, "M", "䩮"), - (0x2F9F9, "M", "䩶"), - (0x2F9FA, "M", "韠"), - (0x2F9FB, "M", "𩐊"), - (0x2F9FC, "M", "䪲"), - (0x2F9FD, "M", "𩒖"), - (0x2F9FE, "M", "頋"), - (0x2FA00, "M", "頩"), - (0x2FA01, "M", "𩖶"), - (0x2FA02, "M", "飢"), - (0x2FA03, "M", "䬳"), - (0x2FA04, "M", "餩"), - (0x2FA05, "M", "馧"), - (0x2FA06, "M", "駂"), - (0x2FA07, "M", "駾"), - (0x2FA08, "M", "䯎"), - (0x2FA09, "M", "𩬰"), - (0x2FA0A, "M", "鬒"), - (0x2FA0B, "M", "鱀"), - (0x2FA0C, "M", "鳽"), - ] - - -def _seg_83() -> List[Union[Tuple[int, str], Tuple[int, str, str]]]: - return [ - (0x2FA0D, "M", "䳎"), - (0x2FA0E, "M", "䳭"), - (0x2FA0F, "M", "鵧"), - (0x2FA10, "M", "𪃎"), - (0x2FA11, "M", "䳸"), - (0x2FA12, "M", "𪄅"), - (0x2FA13, "M", "𪈎"), - (0x2FA14, "M", "𪊑"), - (0x2FA15, "M", "麻"), - (0x2FA16, "M", "䵖"), - (0x2FA17, "M", "黹"), - (0x2FA18, "M", "黾"), - (0x2FA19, "M", "鼅"), - (0x2FA1A, "M", "鼏"), - (0x2FA1B, "M", "鼖"), - (0x2FA1C, "M", "鼻"), - (0x2FA1D, "M", "𪘀"), - (0x2FA1E, "X"), - (0x30000, "V"), - (0x3134B, "X"), - (0x31350, "V"), - (0x323B0, "X"), - (0xE0100, "I"), - (0xE01F0, "X"), - ] - - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() - + _seg_73() - + _seg_74() - + _seg_75() - + _seg_76() - + _seg_77() - + _seg_78() - + _seg_79() - + _seg_80() - + _seg_81() - + _seg_82() - + _seg_83() -) # type: Tuple[Union[Tuple[int, str], Tuple[int, str, str]], ...] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/COPYING b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/COPYING deleted file mode 100644 index f067af3aa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/COPYING +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (C) 2008-2011 INADA Naoki <songofacandy@gmail.com> - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__init__.py deleted file mode 100644 index f3266b701..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__init__.py +++ /dev/null @@ -1,55 +0,0 @@ -# ruff: noqa: F401 -import os - -from .exceptions import * # noqa: F403 -from .ext import ExtType, Timestamp - -version = (1, 1, 2) -__version__ = "1.1.2" - - -if os.environ.get("MSGPACK_PUREPYTHON"): - from .fallback import Packer, Unpacker, unpackb -else: - try: - from ._cmsgpack import Packer, Unpacker, unpackb - except ImportError: - from .fallback import Packer, Unpacker, unpackb - - -def pack(o, stream, **kwargs): - """ - Pack object `o` and write it to `stream` - - See :class:`Packer` for options. - """ - packer = Packer(**kwargs) - stream.write(packer.pack(o)) - - -def packb(o, **kwargs): - """ - Pack object `o` and return packed bytes - - See :class:`Packer` for options. - """ - return Packer(**kwargs).pack(o) - - -def unpack(stream, **kwargs): - """ - Unpack an object from `stream`. - - Raises `ExtraData` when `stream` contains extra bytes. - See :class:`Unpacker` for options. - """ - data = stream.read() - return unpackb(data, **kwargs) - - -# alias for compatibility to simplejson/marshal/pickle. -load = unpack -loads = unpackb - -dump = pack -dumps = packb diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index f9d4cbbcb7fd0f97869480f9ecffb935dfc449d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1761 zcma)6&rcgi6rT02f3Rx|7)Y8D!Zx%ZrvXZF2{A1aO-PMGi0go*N+#>IJ&-N7cQrHo zR1T&W6!lQ59-3pWJ@!xFKL8>%XjF+v>7iUI3v#G>>YH7#Amz}J{LP!$nK$pf?|c3@ z(x@UBd%yl^%_<1J5sT9SYj+&~1ydD0MrmmhG4xnU`zEE&d|kqlCw)no$w`GNT_~+G ze_COIIh2Z=+&wd;TFxv^%(Oo)d1mj)PBDzoRpB`>*^pG3n$(z<46|?-dZ2Z9`;F)K z)4|J#HKjv<&FKcfmbn%doeQ(pxhB>&*UZ|}Qa94kTqJ;s5Z6`YM*biFooK4ZLZfmg zvZR=HDB_upNnE-S^YP%sDw|nzFmIT#%9t{<?5z6-`v?0!<<SR^zDkYXxo@Oq(-Wz0 zW|9x5V=@n<%)%ljJTzNzJS({5TKR(SBvUc@;in;_9B09(qU=dA5K8+7P{#MAq##Gm zNGVwyK0h*YO5A>DWYB3rPiLS7(vQjOQ>utbxAWiP0@HJLPB$w>eT7&I>lV|Qt>-8s z*evH%^%2H;qEIp^P2{{xa{9bYblYK;U7`Kz^e^C&1mSh=cU^Er<QY@AWb=UMhX)o{ zOtL_Ez$*b2g6iqHsq<%d64_ab3C)^COa^b?{v^9%lf|q<Y!MvI7E1O~F>g}bXH_f) z03|P#FzFl2rq<XKyD~HwH{!<X$gnYk%TCE;*kENRJ7wjw6cXwaFPaOOW*y5JFqUzp zXp@05T@d>Nh9SHfM!&O08X+bZ+Q6V60aVf3Fp9M8Hg;~!161$rE9&Od#?;oOpF4i+ zc>eWI*M3v<V>pNkb-G|tr*hc!afV6>sFVbi7t&ZK3`p{=-@lL~g4q(O=x!N{dVY;z z`ad`#pe*p|vgD=+w&+XJ3_yhpdv1~_Ox!O#=Se%**TlC@0JjX`=&shWbr0Z`rtfO{ zi<XyK_m0v{TH(aS=_lN~8I(F(9M}^h?oG(?W$TL0_=f5Qf)YsUPgSpHK%S>!ohNp= zuFif{O`8_QRL?<I67#Of%$&aR1Xt=u^nzVsCa6Zo;)GYR{&T86?aOy`4ZW^F4-`oQ zgbE68g2}BHSBmfs6=8#dy|M+omL^wVQ~ZC?E`TbkMNl~U!|1co@4u+t{auT0#do#q z&xZkal<RKgV)CJ=4tXEoP!JKj#C<m9DqbyMuf@15LKhuFgtB;W8QKMUk81|V*)<J= z2XSTDBCsnjV8%o9&?I@F(xW^iE{i;PgHbrqKG!D8j!oDEAvW>EFIaa|;7Z9hi`*}e zLcU97hx-LmS4nQ<UgDw8%XV?8gvZDYxGYkkPXTJOBuQ^j!yo9%0qTCOwpN4tk@l)q z3m_%1nb=5dj%|$XM0;Mzy?b)+fikqG4Am6bKXMQn*$s^xsX^(3qqczb;ZZasb=TfQ zp-5HP4>eW&uY;Pf8o%@ZU3(~@@a4Bi64!3M4BdiP{UiTSA>?gY9oNye-ZCDSw}&La Fe*t$Pq7DE6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-314.pyc deleted file mode 100644 index d9e67907c10b51af9697e163c4575a0d6b4ca252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2244 zcma)7OK&4Z5bp6S<B6TbArD9(bcBf3uz86HkrhH{AuFwfoR!J$UTj*OaXTJ%JY%}s zd7XS(4j`1{p19}8nLn}GQy9dF3&%jbf+JNuw&R2d?MPEo{Z)7M*VR=u?~mmj0?&(| z{_r+ag#3<!{*&n`7e9j1A=6}$l*ue9TUD}=jBVO7Xadk=)f%7)gQfsY51~neW&j<j zrT~Zi@X=|5+kj`U;F)Slj~JT+w$bXyz`tE38s=)JI;wN!+&iS0cVlO<w0eV!IZ!$T zW?N;V6JJ?6S+;bloY3iV5>}<6@rOZ+yHB<bUD48B7##n6mn%VCpDRV{p`<Eo3M%?$ zMJ4x?sL_Ll=L_04i@jiP#c@j8J6m^p2yODCc;@9&8tR6SR5y4)ReLwyA*?&s2&_<g zzfO<BHa*~hraGi9*KUJy-={*#P~MIKXF!>HfzpE4R-98(I?Y5jV*zgp#v+HYW>{<c zsOK2_rp^7HWt_3PCzbZSKm;L}M;NPxE-2HCDb2O#GOo4scH3Gg#w6a=1x7Xc?z20U zhe}9Q;WZ)GH#gTR2cdjYY02<w;c8WJ{jgozg(xn2fu})$Ki?N}dA;)BNH@aZgY^xz z!45zAknM<O%ja4!-E399@OCT8(_$GfgzpJeX?d+xwl9KOC|8?m5AoH@t5|6rNlZf{ z@W#~$h^ORbBAvEnu5Y<HF=oI#lo(DwF(4_Dk#o0QuM2sv?fd57rPH*;Vvx9jv{7VH zjH1BE#JlBD8}AFOtBW*<r{vdEj}IDOiO<*-KH2TI-mZVnHIM1Y3Ebq`#;+lUVhoi6 z3KIi_Zr<}+aZL9292Cdsy-+r}-omsyp1B|FbKk4c-c4Y2fU(C24|<)^G-4<w;Z<=c zeoN7q7UHi&Yvw<+oG&$&tYPKsgdq(C6hQ5Nn9L#*6nO0eCQ~sJ#BXM@1{OY?CJQ<_ zLqh0)*h6NabCr`IGiB&gkBGL*X-J<;l-)YilH+w99}HCL4fPHYKpzlNAP7@ED8oHk zg9Xq>b{YT<vi!<2Y&l`zAAu0dsu5~>D*&Oi6ub#8icZ{+Rvb48)ca2Y6d2nV3!rq! z<B6beA&+U$@0HNofxT5KCL%j_BWh7v;8CC?QcC!BIS&ivn;;bWUs_s{nDf|iu+*V@ zOb*Vw(#PJ#>6nQfa`rm?K7Ten_k&|1?+&&GE9!<M7FwrA=6E4ya%;CprErC}53Scw zilb$&ylBa{V2wf#JwnjUASl46FwDn5MVyMc*df1+uNof3ggKKrU8$J8vDC4eCB{!K zqQJ_J3XGX9Uh`b-3g2g}Xhr!U5Lh6oPfe8M8@Lb!x>2b7^DVIWGm%Q$f8`SC`M+%| zy>?DO#EFShO2s_pQ}6E-_dC;Ku&g8J5%=4|RDvlqljG4u{7V_Kp{FSSVE9KDjp6We zPL$u?7qae$2gY4gK=T#oT6stI$MMhQ6L}ll<3W`V;yh_tRyUEc>=Um`;M1M7tnA6# zT>_u3jr#aNUp#s5S%{-Wv`nAOJ!3eUK6l8}!gDgw&E%}L=M%I`;CoI<VXl)uE6jJs M&ZZV$kb;TRzs9c$hyVZp diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-314.pyc deleted file mode 100644 index 518d12f7d28af71f6549d735315c657fce5fa042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8332 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-314.pyc deleted file mode 100644 index b5b475fa6e9ffd256e3ae9997fe509df4fc03add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42879 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 S{bj_q&!lU(FObWK?tcJHtd3Ry diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/exceptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/exceptions.py deleted file mode 100644 index d6d2615cf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +++ /dev/null @@ -1,48 +0,0 @@ -class UnpackException(Exception): - """Base class for some exceptions raised while unpacking. - - NOTE: unpack may raise exception other than subclass of - UnpackException. If you want to catch all error, catch - Exception instead. - """ - - -class BufferFull(UnpackException): - pass - - -class OutOfData(UnpackException): - pass - - -class FormatError(ValueError, UnpackException): - """Invalid msgpack format""" - - -class StackError(ValueError, UnpackException): - """Too nested""" - - -# Deprecated. Use ValueError instead -UnpackValueError = ValueError - - -class ExtraData(UnpackValueError): - """ExtraData is raised when there is trailing data. - - This exception is raised while only one-shot (not streaming) - unpack. - """ - - def __init__(self, unpacked, extra): - self.unpacked = unpacked - self.extra = extra - - def __str__(self): - return "unpack(b) received extra data." - - -# Deprecated. Use Exception instead to catch all exception during packing. -PackException = Exception -PackValueError = ValueError -PackOverflowError = OverflowError diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/ext.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/ext.py deleted file mode 100644 index 9694819a7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/ext.py +++ /dev/null @@ -1,170 +0,0 @@ -import datetime -import struct -from collections import namedtuple - - -class ExtType(namedtuple("ExtType", "code data")): - """ExtType represents ext type in msgpack.""" - - def __new__(cls, code, data): - if not isinstance(code, int): - raise TypeError("code must be int") - if not isinstance(data, bytes): - raise TypeError("data must be bytes") - if not 0 <= code <= 127: - raise ValueError("code must be 0~127") - return super().__new__(cls, code, data) - - -class Timestamp: - """Timestamp represents the Timestamp extension type in msgpack. - - When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`. - When using pure-Python msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and - unpack `Timestamp`. - - This class is immutable: Do not override seconds and nanoseconds. - """ - - __slots__ = ["seconds", "nanoseconds"] - - def __init__(self, seconds, nanoseconds=0): - """Initialize a Timestamp object. - - :param int seconds: - Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds). - May be negative. - - :param int nanoseconds: - Number of nanoseconds to add to `seconds` to get fractional time. - Maximum is 999_999_999. Default is 0. - - Note: Negative times (before the UNIX epoch) are represented as neg. seconds + pos. ns. - """ - if not isinstance(seconds, int): - raise TypeError("seconds must be an integer") - if not isinstance(nanoseconds, int): - raise TypeError("nanoseconds must be an integer") - if not (0 <= nanoseconds < 10**9): - raise ValueError("nanoseconds must be a non-negative integer less than 999999999.") - self.seconds = seconds - self.nanoseconds = nanoseconds - - def __repr__(self): - """String representation of Timestamp.""" - return f"Timestamp(seconds={self.seconds}, nanoseconds={self.nanoseconds})" - - def __eq__(self, other): - """Check for equality with another Timestamp object""" - if type(other) is self.__class__: - return self.seconds == other.seconds and self.nanoseconds == other.nanoseconds - return False - - def __ne__(self, other): - """not-equals method (see :func:`__eq__()`)""" - return not self.__eq__(other) - - def __hash__(self): - return hash((self.seconds, self.nanoseconds)) - - @staticmethod - def from_bytes(b): - """Unpack bytes into a `Timestamp` object. - - Used for pure-Python msgpack unpacking. - - :param b: Payload from msgpack ext message with code -1 - :type b: bytes - - :returns: Timestamp object unpacked from msgpack ext payload - :rtype: Timestamp - """ - if len(b) == 4: - seconds = struct.unpack("!L", b)[0] - nanoseconds = 0 - elif len(b) == 8: - data64 = struct.unpack("!Q", b)[0] - seconds = data64 & 0x00000003FFFFFFFF - nanoseconds = data64 >> 34 - elif len(b) == 12: - nanoseconds, seconds = struct.unpack("!Iq", b) - else: - raise ValueError( - "Timestamp type can only be created from 32, 64, or 96-bit byte objects" - ) - return Timestamp(seconds, nanoseconds) - - def to_bytes(self): - """Pack this Timestamp object into bytes. - - Used for pure-Python msgpack packing. - - :returns data: Payload for EXT message with code -1 (timestamp type) - :rtype: bytes - """ - if (self.seconds >> 34) == 0: # seconds is non-negative and fits in 34 bits - data64 = self.nanoseconds << 34 | self.seconds - if data64 & 0xFFFFFFFF00000000 == 0: - # nanoseconds is zero and seconds < 2**32, so timestamp 32 - data = struct.pack("!L", data64) - else: - # timestamp 64 - data = struct.pack("!Q", data64) - else: - # timestamp 96 - data = struct.pack("!Iq", self.nanoseconds, self.seconds) - return data - - @staticmethod - def from_unix(unix_sec): - """Create a Timestamp from posix timestamp in seconds. - - :param unix_float: Posix timestamp in seconds. - :type unix_float: int or float - """ - seconds = int(unix_sec // 1) - nanoseconds = int((unix_sec % 1) * 10**9) - return Timestamp(seconds, nanoseconds) - - def to_unix(self): - """Get the timestamp as a floating-point value. - - :returns: posix timestamp - :rtype: float - """ - return self.seconds + self.nanoseconds / 1e9 - - @staticmethod - def from_unix_nano(unix_ns): - """Create a Timestamp from posix timestamp in nanoseconds. - - :param int unix_ns: Posix timestamp in nanoseconds. - :rtype: Timestamp - """ - return Timestamp(*divmod(unix_ns, 10**9)) - - def to_unix_nano(self): - """Get the timestamp as a unixtime in nanoseconds. - - :returns: posix timestamp in nanoseconds - :rtype: int - """ - return self.seconds * 10**9 + self.nanoseconds - - def to_datetime(self): - """Get the timestamp as a UTC datetime. - - :rtype: `datetime.datetime` - """ - utc = datetime.timezone.utc - return datetime.datetime.fromtimestamp(0, utc) + datetime.timedelta( - seconds=self.seconds, microseconds=self.nanoseconds // 1000 - ) - - @staticmethod - def from_datetime(dt): - """Create a Timestamp from datetime with tzinfo. - - :rtype: Timestamp - """ - return Timestamp(seconds=int(dt.timestamp()), nanoseconds=dt.microsecond * 1000) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/fallback.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/fallback.py deleted file mode 100644 index b02e47cfb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/msgpack/fallback.py +++ /dev/null @@ -1,929 +0,0 @@ -"""Fallback pure Python implementation of msgpack""" - -import struct -import sys -from datetime import datetime as _DateTime - -if hasattr(sys, "pypy_version_info"): - from __pypy__ import newlist_hint - from __pypy__.builders import BytesBuilder - - _USING_STRINGBUILDER = True - - class BytesIO: - def __init__(self, s=b""): - if s: - self.builder = BytesBuilder(len(s)) - self.builder.append(s) - else: - self.builder = BytesBuilder() - - def write(self, s): - if isinstance(s, memoryview): - s = s.tobytes() - elif isinstance(s, bytearray): - s = bytes(s) - self.builder.append(s) - - def getvalue(self): - return self.builder.build() - -else: - from io import BytesIO - - _USING_STRINGBUILDER = False - - def newlist_hint(size): - return [] - - -from .exceptions import BufferFull, ExtraData, FormatError, OutOfData, StackError -from .ext import ExtType, Timestamp - -EX_SKIP = 0 -EX_CONSTRUCT = 1 -EX_READ_ARRAY_HEADER = 2 -EX_READ_MAP_HEADER = 3 - -TYPE_IMMEDIATE = 0 -TYPE_ARRAY = 1 -TYPE_MAP = 2 -TYPE_RAW = 3 -TYPE_BIN = 4 -TYPE_EXT = 5 - -DEFAULT_RECURSE_LIMIT = 511 - - -def _check_type_strict(obj, t, type=type, tuple=tuple): - if type(t) is tuple: - return type(obj) in t - else: - return type(obj) is t - - -def _get_data_from_buffer(obj): - view = memoryview(obj) - if view.itemsize != 1: - raise ValueError("cannot unpack from multi-byte object") - return view - - -def unpackb(packed, **kwargs): - """ - Unpack an object from `packed`. - - Raises ``ExtraData`` when *packed* contains extra bytes. - Raises ``ValueError`` when *packed* is incomplete. - Raises ``FormatError`` when *packed* is not valid msgpack. - Raises ``StackError`` when *packed* contains too nested. - Other exceptions can be raised during unpacking. - - See :class:`Unpacker` for options. - """ - unpacker = Unpacker(None, max_buffer_size=len(packed), **kwargs) - unpacker.feed(packed) - try: - ret = unpacker._unpack() - except OutOfData: - raise ValueError("Unpack failed: incomplete input") - except RecursionError: - raise StackError - if unpacker._got_extradata(): - raise ExtraData(ret, unpacker._get_extradata()) - return ret - - -_NO_FORMAT_USED = "" -_MSGPACK_HEADERS = { - 0xC4: (1, _NO_FORMAT_USED, TYPE_BIN), - 0xC5: (2, ">H", TYPE_BIN), - 0xC6: (4, ">I", TYPE_BIN), - 0xC7: (2, "Bb", TYPE_EXT), - 0xC8: (3, ">Hb", TYPE_EXT), - 0xC9: (5, ">Ib", TYPE_EXT), - 0xCA: (4, ">f"), - 0xCB: (8, ">d"), - 0xCC: (1, _NO_FORMAT_USED), - 0xCD: (2, ">H"), - 0xCE: (4, ">I"), - 0xCF: (8, ">Q"), - 0xD0: (1, "b"), - 0xD1: (2, ">h"), - 0xD2: (4, ">i"), - 0xD3: (8, ">q"), - 0xD4: (1, "b1s", TYPE_EXT), - 0xD5: (2, "b2s", TYPE_EXT), - 0xD6: (4, "b4s", TYPE_EXT), - 0xD7: (8, "b8s", TYPE_EXT), - 0xD8: (16, "b16s", TYPE_EXT), - 0xD9: (1, _NO_FORMAT_USED, TYPE_RAW), - 0xDA: (2, ">H", TYPE_RAW), - 0xDB: (4, ">I", TYPE_RAW), - 0xDC: (2, ">H", TYPE_ARRAY), - 0xDD: (4, ">I", TYPE_ARRAY), - 0xDE: (2, ">H", TYPE_MAP), - 0xDF: (4, ">I", TYPE_MAP), -} - - -class Unpacker: - """Streaming unpacker. - - Arguments: - - :param file_like: - File-like object having `.read(n)` method. - If specified, unpacker reads serialized data from it and `.feed()` is not usable. - - :param int read_size: - Used as `file_like.read(read_size)`. (default: `min(16*1024, max_buffer_size)`) - - :param bool use_list: - If true, unpack msgpack array to Python list. - Otherwise, unpack to Python tuple. (default: True) - - :param bool raw: - If true, unpack msgpack raw to Python bytes. - Otherwise, unpack to Python str by decoding with UTF-8 encoding (default). - - :param int timestamp: - Control how timestamp type is unpacked: - - 0 - Timestamp - 1 - float (Seconds from the EPOCH) - 2 - int (Nanoseconds from the EPOCH) - 3 - datetime.datetime (UTC). - - :param bool strict_map_key: - If true (default), only str or bytes are accepted for map (dict) keys. - - :param object_hook: - When specified, it should be callable. - Unpacker calls it with a dict argument after unpacking msgpack map. - (See also simplejson) - - :param object_pairs_hook: - When specified, it should be callable. - Unpacker calls it with a list of key-value pairs after unpacking msgpack map. - (See also simplejson) - - :param str unicode_errors: - The error handler for decoding unicode. (default: 'strict') - This option should be used only when you have msgpack data which - contains invalid UTF-8 string. - - :param int max_buffer_size: - Limits size of data waiting unpacked. 0 means 2**32-1. - The default value is 100*1024*1024 (100MiB). - Raises `BufferFull` exception when it is insufficient. - You should set this parameter when unpacking data from untrusted source. - - :param int max_str_len: - Deprecated, use *max_buffer_size* instead. - Limits max length of str. (default: max_buffer_size) - - :param int max_bin_len: - Deprecated, use *max_buffer_size* instead. - Limits max length of bin. (default: max_buffer_size) - - :param int max_array_len: - Limits max length of array. - (default: max_buffer_size) - - :param int max_map_len: - Limits max length of map. - (default: max_buffer_size//2) - - :param int max_ext_len: - Deprecated, use *max_buffer_size* instead. - Limits max size of ext type. (default: max_buffer_size) - - Example of streaming deserialize from file-like object:: - - unpacker = Unpacker(file_like) - for o in unpacker: - process(o) - - Example of streaming deserialize from socket:: - - unpacker = Unpacker() - while True: - buf = sock.recv(1024**2) - if not buf: - break - unpacker.feed(buf) - for o in unpacker: - process(o) - - Raises ``ExtraData`` when *packed* contains extra bytes. - Raises ``OutOfData`` when *packed* is incomplete. - Raises ``FormatError`` when *packed* is not valid msgpack. - Raises ``StackError`` when *packed* contains too nested. - Other exceptions can be raised during unpacking. - """ - - def __init__( - self, - file_like=None, - *, - read_size=0, - use_list=True, - raw=False, - timestamp=0, - strict_map_key=True, - object_hook=None, - object_pairs_hook=None, - list_hook=None, - unicode_errors=None, - max_buffer_size=100 * 1024 * 1024, - ext_hook=ExtType, - max_str_len=-1, - max_bin_len=-1, - max_array_len=-1, - max_map_len=-1, - max_ext_len=-1, - ): - if unicode_errors is None: - unicode_errors = "strict" - - if file_like is None: - self._feeding = True - else: - if not callable(file_like.read): - raise TypeError("`file_like.read` must be callable") - self.file_like = file_like - self._feeding = False - - #: array of bytes fed. - self._buffer = bytearray() - #: Which position we currently reads - self._buff_i = 0 - - # When Unpacker is used as an iterable, between the calls to next(), - # the buffer is not "consumed" completely, for efficiency sake. - # Instead, it is done sloppily. To make sure we raise BufferFull at - # the correct moments, we have to keep track of how sloppy we were. - # Furthermore, when the buffer is incomplete (that is: in the case - # we raise an OutOfData) we need to rollback the buffer to the correct - # state, which _buf_checkpoint records. - self._buf_checkpoint = 0 - - if not max_buffer_size: - max_buffer_size = 2**31 - 1 - if max_str_len == -1: - max_str_len = max_buffer_size - if max_bin_len == -1: - max_bin_len = max_buffer_size - if max_array_len == -1: - max_array_len = max_buffer_size - if max_map_len == -1: - max_map_len = max_buffer_size // 2 - if max_ext_len == -1: - max_ext_len = max_buffer_size - - self._max_buffer_size = max_buffer_size - if read_size > self._max_buffer_size: - raise ValueError("read_size must be smaller than max_buffer_size") - self._read_size = read_size or min(self._max_buffer_size, 16 * 1024) - self._raw = bool(raw) - self._strict_map_key = bool(strict_map_key) - self._unicode_errors = unicode_errors - self._use_list = use_list - if not (0 <= timestamp <= 3): - raise ValueError("timestamp must be 0..3") - self._timestamp = timestamp - self._list_hook = list_hook - self._object_hook = object_hook - self._object_pairs_hook = object_pairs_hook - self._ext_hook = ext_hook - self._max_str_len = max_str_len - self._max_bin_len = max_bin_len - self._max_array_len = max_array_len - self._max_map_len = max_map_len - self._max_ext_len = max_ext_len - self._stream_offset = 0 - - if list_hook is not None and not callable(list_hook): - raise TypeError("`list_hook` is not callable") - if object_hook is not None and not callable(object_hook): - raise TypeError("`object_hook` is not callable") - if object_pairs_hook is not None and not callable(object_pairs_hook): - raise TypeError("`object_pairs_hook` is not callable") - if object_hook is not None and object_pairs_hook is not None: - raise TypeError("object_pairs_hook and object_hook are mutually exclusive") - if not callable(ext_hook): - raise TypeError("`ext_hook` is not callable") - - def feed(self, next_bytes): - assert self._feeding - view = _get_data_from_buffer(next_bytes) - if len(self._buffer) - self._buff_i + len(view) > self._max_buffer_size: - raise BufferFull - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[: self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - # Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython - self._buffer.extend(view) - view.release() - - def _consume(self): - """Gets rid of the used parts of the buffer.""" - self._stream_offset += self._buff_i - self._buf_checkpoint - self._buf_checkpoint = self._buff_i - - def _got_extradata(self): - return self._buff_i < len(self._buffer) - - def _get_extradata(self): - return self._buffer[self._buff_i :] - - def read_bytes(self, n): - ret = self._read(n, raise_outofdata=False) - self._consume() - return ret - - def _read(self, n, raise_outofdata=True): - # (int) -> bytearray - self._reserve(n, raise_outofdata=raise_outofdata) - i = self._buff_i - ret = self._buffer[i : i + n] - self._buff_i = i + len(ret) - return ret - - def _reserve(self, n, raise_outofdata=True): - remain_bytes = len(self._buffer) - self._buff_i - n - - # Fast path: buffer has n bytes already - if remain_bytes >= 0: - return - - if self._feeding: - self._buff_i = self._buf_checkpoint - raise OutOfData - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[: self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - # Read from file - remain_bytes = -remain_bytes - if remain_bytes + len(self._buffer) > self._max_buffer_size: - raise BufferFull - while remain_bytes > 0: - to_read_bytes = max(self._read_size, remain_bytes) - read_data = self.file_like.read(to_read_bytes) - if not read_data: - break - assert isinstance(read_data, bytes) - self._buffer += read_data - remain_bytes -= len(read_data) - - if len(self._buffer) < n + self._buff_i and raise_outofdata: - self._buff_i = 0 # rollback - raise OutOfData - - def _read_header(self): - typ = TYPE_IMMEDIATE - n = 0 - obj = None - self._reserve(1) - b = self._buffer[self._buff_i] - self._buff_i += 1 - if b & 0b10000000 == 0: - obj = b - elif b & 0b11100000 == 0b11100000: - obj = -1 - (b ^ 0xFF) - elif b & 0b11100000 == 0b10100000: - n = b & 0b00011111 - typ = TYPE_RAW - if n > self._max_str_len: - raise ValueError(f"{n} exceeds max_str_len({self._max_str_len})") - obj = self._read(n) - elif b & 0b11110000 == 0b10010000: - n = b & 0b00001111 - typ = TYPE_ARRAY - if n > self._max_array_len: - raise ValueError(f"{n} exceeds max_array_len({self._max_array_len})") - elif b & 0b11110000 == 0b10000000: - n = b & 0b00001111 - typ = TYPE_MAP - if n > self._max_map_len: - raise ValueError(f"{n} exceeds max_map_len({self._max_map_len})") - elif b == 0xC0: - obj = None - elif b == 0xC2: - obj = False - elif b == 0xC3: - obj = True - elif 0xC4 <= b <= 0xC6: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - n = struct.unpack_from(fmt, self._buffer, self._buff_i)[0] - else: - n = self._buffer[self._buff_i] - self._buff_i += size - if n > self._max_bin_len: - raise ValueError(f"{n} exceeds max_bin_len({self._max_bin_len})") - obj = self._read(n) - elif 0xC7 <= b <= 0xC9: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - L, n = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if L > self._max_ext_len: - raise ValueError(f"{L} exceeds max_ext_len({self._max_ext_len})") - obj = self._read(L) - elif 0xCA <= b <= 0xD3: - size, fmt = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - obj = struct.unpack_from(fmt, self._buffer, self._buff_i)[0] - else: - obj = self._buffer[self._buff_i] - self._buff_i += size - elif 0xD4 <= b <= 0xD8: - size, fmt, typ = _MSGPACK_HEADERS[b] - if self._max_ext_len < size: - raise ValueError(f"{size} exceeds max_ext_len({self._max_ext_len})") - self._reserve(size + 1) - n, obj = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size + 1 - elif 0xD9 <= b <= 0xDB: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - if len(fmt) > 0: - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - else: - n = self._buffer[self._buff_i] - self._buff_i += size - if n > self._max_str_len: - raise ValueError(f"{n} exceeds max_str_len({self._max_str_len})") - obj = self._read(n) - elif 0xDC <= b <= 0xDD: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if n > self._max_array_len: - raise ValueError(f"{n} exceeds max_array_len({self._max_array_len})") - elif 0xDE <= b <= 0xDF: - size, fmt, typ = _MSGPACK_HEADERS[b] - self._reserve(size) - (n,) = struct.unpack_from(fmt, self._buffer, self._buff_i) - self._buff_i += size - if n > self._max_map_len: - raise ValueError(f"{n} exceeds max_map_len({self._max_map_len})") - else: - raise FormatError("Unknown header: 0x%x" % b) - return typ, n, obj - - def _unpack(self, execute=EX_CONSTRUCT): - typ, n, obj = self._read_header() - - if execute == EX_READ_ARRAY_HEADER: - if typ != TYPE_ARRAY: - raise ValueError("Expected array") - return n - if execute == EX_READ_MAP_HEADER: - if typ != TYPE_MAP: - raise ValueError("Expected map") - return n - # TODO should we eliminate the recursion? - if typ == TYPE_ARRAY: - if execute == EX_SKIP: - for i in range(n): - # TODO check whether we need to call `list_hook` - self._unpack(EX_SKIP) - return - ret = newlist_hint(n) - for i in range(n): - ret.append(self._unpack(EX_CONSTRUCT)) - if self._list_hook is not None: - ret = self._list_hook(ret) - # TODO is the interaction between `list_hook` and `use_list` ok? - return ret if self._use_list else tuple(ret) - if typ == TYPE_MAP: - if execute == EX_SKIP: - for i in range(n): - # TODO check whether we need to call hooks - self._unpack(EX_SKIP) - self._unpack(EX_SKIP) - return - if self._object_pairs_hook is not None: - ret = self._object_pairs_hook( - (self._unpack(EX_CONSTRUCT), self._unpack(EX_CONSTRUCT)) for _ in range(n) - ) - else: - ret = {} - for _ in range(n): - key = self._unpack(EX_CONSTRUCT) - if self._strict_map_key and type(key) not in (str, bytes): - raise ValueError("%s is not allowed for map key" % str(type(key))) - if isinstance(key, str): - key = sys.intern(key) - ret[key] = self._unpack(EX_CONSTRUCT) - if self._object_hook is not None: - ret = self._object_hook(ret) - return ret - if execute == EX_SKIP: - return - if typ == TYPE_RAW: - if self._raw: - obj = bytes(obj) - else: - obj = obj.decode("utf_8", self._unicode_errors) - return obj - if typ == TYPE_BIN: - return bytes(obj) - if typ == TYPE_EXT: - if n == -1: # timestamp - ts = Timestamp.from_bytes(bytes(obj)) - if self._timestamp == 1: - return ts.to_unix() - elif self._timestamp == 2: - return ts.to_unix_nano() - elif self._timestamp == 3: - return ts.to_datetime() - else: - return ts - else: - return self._ext_hook(n, bytes(obj)) - assert typ == TYPE_IMMEDIATE - return obj - - def __iter__(self): - return self - - def __next__(self): - try: - ret = self._unpack(EX_CONSTRUCT) - self._consume() - return ret - except OutOfData: - self._consume() - raise StopIteration - except RecursionError: - raise StackError - - next = __next__ - - def skip(self): - self._unpack(EX_SKIP) - self._consume() - - def unpack(self): - try: - ret = self._unpack(EX_CONSTRUCT) - except RecursionError: - raise StackError - self._consume() - return ret - - def read_array_header(self): - ret = self._unpack(EX_READ_ARRAY_HEADER) - self._consume() - return ret - - def read_map_header(self): - ret = self._unpack(EX_READ_MAP_HEADER) - self._consume() - return ret - - def tell(self): - return self._stream_offset - - -class Packer: - """ - MessagePack Packer - - Usage:: - - packer = Packer() - astream.write(packer.pack(a)) - astream.write(packer.pack(b)) - - Packer's constructor has some keyword arguments: - - :param default: - When specified, it should be callable. - Convert user type to builtin type that Packer supports. - See also simplejson's document. - - :param bool use_single_float: - Use single precision float type for float. (default: False) - - :param bool autoreset: - Reset buffer after each pack and return its content as `bytes`. (default: True). - If set this to false, use `bytes()` to get content and `.reset()` to clear buffer. - - :param bool use_bin_type: - Use bin type introduced in msgpack spec 2.0 for bytes. - It also enables str8 type for unicode. (default: True) - - :param bool strict_types: - If set to true, types will be checked to be exact. Derived classes - from serializable types will not be serialized and will be - treated as unsupported type and forwarded to default. - Additionally tuples will not be serialized as lists. - This is useful when trying to implement accurate serialization - for python types. - - :param bool datetime: - If set to true, datetime with tzinfo is packed into Timestamp type. - Note that the tzinfo is stripped in the timestamp. - You can get UTC datetime with `timestamp=3` option of the Unpacker. - - :param str unicode_errors: - The error handler for encoding unicode. (default: 'strict') - DO NOT USE THIS!! This option is kept for very specific usage. - - :param int buf_size: - Internal buffer size. This option is used only for C implementation. - """ - - def __init__( - self, - *, - default=None, - use_single_float=False, - autoreset=True, - use_bin_type=True, - strict_types=False, - datetime=False, - unicode_errors=None, - buf_size=None, - ): - self._strict_types = strict_types - self._use_float = use_single_float - self._autoreset = autoreset - self._use_bin_type = use_bin_type - self._buffer = BytesIO() - self._datetime = bool(datetime) - self._unicode_errors = unicode_errors or "strict" - if default is not None and not callable(default): - raise TypeError("default must be callable") - self._default = default - - def _pack( - self, - obj, - nest_limit=DEFAULT_RECURSE_LIMIT, - check=isinstance, - check_type_strict=_check_type_strict, - ): - default_used = False - if self._strict_types: - check = check_type_strict - list_types = list - else: - list_types = (list, tuple) - while True: - if nest_limit < 0: - raise ValueError("recursion limit exceeded") - if obj is None: - return self._buffer.write(b"\xc0") - if check(obj, bool): - if obj: - return self._buffer.write(b"\xc3") - return self._buffer.write(b"\xc2") - if check(obj, int): - if 0 <= obj < 0x80: - return self._buffer.write(struct.pack("B", obj)) - if -0x20 <= obj < 0: - return self._buffer.write(struct.pack("b", obj)) - if 0x80 <= obj <= 0xFF: - return self._buffer.write(struct.pack("BB", 0xCC, obj)) - if -0x80 <= obj < 0: - return self._buffer.write(struct.pack(">Bb", 0xD0, obj)) - if 0xFF < obj <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xCD, obj)) - if -0x8000 <= obj < -0x80: - return self._buffer.write(struct.pack(">Bh", 0xD1, obj)) - if 0xFFFF < obj <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xCE, obj)) - if -0x80000000 <= obj < -0x8000: - return self._buffer.write(struct.pack(">Bi", 0xD2, obj)) - if 0xFFFFFFFF < obj <= 0xFFFFFFFFFFFFFFFF: - return self._buffer.write(struct.pack(">BQ", 0xCF, obj)) - if -0x8000000000000000 <= obj < -0x80000000: - return self._buffer.write(struct.pack(">Bq", 0xD3, obj)) - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = True - continue - raise OverflowError("Integer value out of range") - if check(obj, (bytes, bytearray)): - n = len(obj) - if n >= 2**32: - raise ValueError("%s is too large" % type(obj).__name__) - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, str): - obj = obj.encode("utf-8", self._unicode_errors) - n = len(obj) - if n >= 2**32: - raise ValueError("String is too large") - self._pack_raw_header(n) - return self._buffer.write(obj) - if check(obj, memoryview): - n = obj.nbytes - if n >= 2**32: - raise ValueError("Memoryview is too large") - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, float): - if self._use_float: - return self._buffer.write(struct.pack(">Bf", 0xCA, obj)) - return self._buffer.write(struct.pack(">Bd", 0xCB, obj)) - if check(obj, (ExtType, Timestamp)): - if check(obj, Timestamp): - code = -1 - data = obj.to_bytes() - else: - code = obj.code - data = obj.data - assert isinstance(code, int) - assert isinstance(data, bytes) - L = len(data) - if L == 1: - self._buffer.write(b"\xd4") - elif L == 2: - self._buffer.write(b"\xd5") - elif L == 4: - self._buffer.write(b"\xd6") - elif L == 8: - self._buffer.write(b"\xd7") - elif L == 16: - self._buffer.write(b"\xd8") - elif L <= 0xFF: - self._buffer.write(struct.pack(">BB", 0xC7, L)) - elif L <= 0xFFFF: - self._buffer.write(struct.pack(">BH", 0xC8, L)) - else: - self._buffer.write(struct.pack(">BI", 0xC9, L)) - self._buffer.write(struct.pack("b", code)) - self._buffer.write(data) - return - if check(obj, list_types): - n = len(obj) - self._pack_array_header(n) - for i in range(n): - self._pack(obj[i], nest_limit - 1) - return - if check(obj, dict): - return self._pack_map_pairs(len(obj), obj.items(), nest_limit - 1) - - if self._datetime and check(obj, _DateTime) and obj.tzinfo is not None: - obj = Timestamp.from_datetime(obj) - default_used = 1 - continue - - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = 1 - continue - - if self._datetime and check(obj, _DateTime): - raise ValueError(f"Cannot serialize {obj!r} where tzinfo=None") - - raise TypeError(f"Cannot serialize {obj!r}") - - def pack(self, obj): - try: - self._pack(obj) - except: - self._buffer = BytesIO() # force reset - raise - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_map_pairs(self, pairs): - self._pack_map_pairs(len(pairs), pairs) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_array_header(self, n): - if n >= 2**32: - raise ValueError - self._pack_array_header(n) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_map_header(self, n): - if n >= 2**32: - raise ValueError - self._pack_map_header(n) - if self._autoreset: - ret = self._buffer.getvalue() - self._buffer = BytesIO() - return ret - - def pack_ext_type(self, typecode, data): - if not isinstance(typecode, int): - raise TypeError("typecode must have int type.") - if not 0 <= typecode <= 127: - raise ValueError("typecode should be 0-127") - if not isinstance(data, bytes): - raise TypeError("data must have bytes type") - L = len(data) - if L > 0xFFFFFFFF: - raise ValueError("Too large data") - if L == 1: - self._buffer.write(b"\xd4") - elif L == 2: - self._buffer.write(b"\xd5") - elif L == 4: - self._buffer.write(b"\xd6") - elif L == 8: - self._buffer.write(b"\xd7") - elif L == 16: - self._buffer.write(b"\xd8") - elif L <= 0xFF: - self._buffer.write(b"\xc7" + struct.pack("B", L)) - elif L <= 0xFFFF: - self._buffer.write(b"\xc8" + struct.pack(">H", L)) - else: - self._buffer.write(b"\xc9" + struct.pack(">I", L)) - self._buffer.write(struct.pack("B", typecode)) - self._buffer.write(data) - - def _pack_array_header(self, n): - if n <= 0x0F: - return self._buffer.write(struct.pack("B", 0x90 + n)) - if n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xDC, n)) - if n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xDD, n)) - raise ValueError("Array is too large") - - def _pack_map_header(self, n): - if n <= 0x0F: - return self._buffer.write(struct.pack("B", 0x80 + n)) - if n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xDE, n)) - if n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xDF, n)) - raise ValueError("Dict is too large") - - def _pack_map_pairs(self, n, pairs, nest_limit=DEFAULT_RECURSE_LIMIT): - self._pack_map_header(n) - for k, v in pairs: - self._pack(k, nest_limit - 1) - self._pack(v, nest_limit - 1) - - def _pack_raw_header(self, n): - if n <= 0x1F: - self._buffer.write(struct.pack("B", 0xA0 + n)) - elif self._use_bin_type and n <= 0xFF: - self._buffer.write(struct.pack(">BB", 0xD9, n)) - elif n <= 0xFFFF: - self._buffer.write(struct.pack(">BH", 0xDA, n)) - elif n <= 0xFFFFFFFF: - self._buffer.write(struct.pack(">BI", 0xDB, n)) - else: - raise ValueError("Raw is too large") - - def _pack_bin_header(self, n): - if not self._use_bin_type: - return self._pack_raw_header(n) - elif n <= 0xFF: - return self._buffer.write(struct.pack(">BB", 0xC4, n)) - elif n <= 0xFFFF: - return self._buffer.write(struct.pack(">BH", 0xC5, n)) - elif n <= 0xFFFFFFFF: - return self._buffer.write(struct.pack(">BI", 0xC6, n)) - else: - raise ValueError("Bin is too large") - - def bytes(self): - """Return internal buffer contents as bytes object""" - return self._buffer.getvalue() - - def reset(self): - """Reset internal buffer. - - This method is useful only when autoreset=False. - """ - self._buffer = BytesIO() - - def getbuffer(self): - """Return view of internal buffer.""" - if _USING_STRINGBUILDER: - return memoryview(self.bytes()) - else: - return self._buffer.getbuffer() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE deleted file mode 100644 index 6f62d44e4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made -under the terms of *both* these licenses. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE deleted file mode 100644 index f433b1a53..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD deleted file mode 100644 index 42ce7b75c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) Donald Stufft and individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__init__.py deleted file mode 100644 index 21695a74b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -__title__ = "packaging" -__summary__ = "Core utilities for Python packages" -__uri__ = "https://github.com/pypa/packaging" - -__version__ = "26.0" - -__author__ = "Donald Stufft and individual contributors" -__email__ = "donald@stufft.io" - -__license__ = "BSD-2-Clause or Apache-2.0" -__copyright__ = f"2014 {__author__}" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 716e1ad3c27d98fe462b751377382ea33c40d070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmYLHyN=U96t(l%B+f%Cgao2M=FtRjoR}!uT_FTyON5XYI-{$JJ&A`Md#su3Kq3l@ zmWGmFpyW>wRg@|c4Ha5xe}Kt`)!yRjoSAcv?i|g-PTMkc{rd5T{WT5a_m*5%=|4Ds zq(Nc$1{%JJreDI6U&gXu!HQqSs=tSOe(hbQWq2j5`Sp87x3O+yBs?WEmd=)U$3jv& zN5&a4s_dzd_Ui@4BDHrSs+M<R#7rHz?u=oaPkNz9+-#8%_sXW?je7lM_gJKaNA?Nk z(<#~{jck@iY|f&ba61$!N;b(+NVVLLE~L-Yg|x@S^45!!W5;vGoaBnydX4AWKBkVR zjjLXNFtlHF>+1#pGUOCs-2_m1k`TGjqy~^nwmY3ushCJLu>eS}A0su^lQbcW?=+l+ zG*w%hHb5w{g=DiB0lpjO+hEsU#z(<hrHuj-Q8_p~><1r&JPk4_-qR3O5OR@66QZcY zQii%IB%D*}41!&Lj|W2-!pDOVyrD_P2~xl$3tqBGpcqo;GTtC#nG188MnYaC>H=(i z0eabDU4N2@DChL4?C9O}PcYO-x3jWonrD{LzF9O@9j|DvET^b#I@gQlrhQOYtJdwJ YvFSX}7uRllv%Y@%xqtt2TekG*KcmOR&j0`b diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-314.pyc deleted file mode 100644 index b0e5c6cee96e1499489321f108e71859d08c9dd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5666 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-314.pyc deleted file mode 100644 index 40c9302536cf96baa5932e2d688a0bc0ce502d10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12103 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 N$#CBT+8<T>{ud4*s;2+| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-314.pyc deleted file mode 100644 index d5ff37a1fc78ecce7d94a4c1e97bf7149e74397b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5198 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 J;wEN~{{Z{%x~2dC diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-314.pyc deleted file mode 100644 index 474eaa5b36300d7b348309ccd7bc49208789cf4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17965 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-314.pyc deleted file mode 100644 index 5f8aa33e95b8774ac119de75544ca2adfc0f036b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5636 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-314.pyc deleted file mode 100644 index 8eccc43f07e2275b3fa78f7f2fa352d7c5fe3c27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10048 zcmb_hTWlLwdOkCpp~xXAQq;w^Buk@<Wl`3}cD%Vbb`sqjGtn(0SxzL%G)0aq#uUk& z8O0V?T?=iokzFT}0~A)W1)}Xs9AJZ0o;LeXbo-V^*{W-1+9Cqd0?kW7K@Ob0_5aUs zM9LE5py+@+bLKz)Idjf`{>yj%Iacfv2wV@o{I6(RIU(QSgL&DF3bTENBP2u?$Z?{P zMskTrjGsBrYHTgmS-(ZI&^xDbaJTsR^H$AD+c<yGd7EZCZ`bVS1x)}NBk_L6d8g*A zB@@<iQb#1~0U{NhVvTp5%D!83(KZ{j*(ZumSq!q~?jVvd!3~L7w!9mR<T%9`gh@tn z7UXi}aTOQja_4b*3UZa?ad``JmF97k733<<<EkjgbpTrG^Ol{hn(~8{A1v7SP~ICV z3vyNEaa9-OI-JK<Q;@4Rk4r4bRR=9Uy{7s?eJ7kljeDg5)TX`E);!YwZv<*{9#gj3 zT9l*Z$+@A>oTSFQRUawH)s)9|v>;b=9+$5mS4$q(v4UK!CYRJ!kf(izr=uXxag(RR z(#>e)(us)*=_CrA+U#>+v!_fsX$K^>f%ty$J&MrB=#Ef4p3p*CG!a(^;MpDtX`yf| zq^drPZhu{l%SuQ~D0)$UD4C4Lujsacgd}UTN*tMolX5sZ6_u56Zbt~oItOO^d7v(k z38FC)(b!84&C&?2YJ!tkoE)uLXpI9JPit0<mx^G5Hk}_yT$SUxMb#9Yi-%@pozvv& znr?~4HQkm>s8O8s=VZWV)osBbas-3A5Dd;FBC|29JA=Vr&W2*y7I!c>6;)I%7LCjC z1T+I7Z}C7V4+d2fMK~DJG$lGYtI29GsCZzm+qgdcgYMIT3#zQBflx$NPQ3Ke@xZl& zay5`t67R}kO$~%&iP^|xNR`{7@u&s`j2DZ^O52IR(401%h(CAYRPa>r`isv8N937g zETqXnZ6+D$i%te$J#t$z6uug|BCCO9G}#e+PmV_tN{2xN;dcZzlu0xtEA7cS1p@^w z98gh9pm?8b3a-EMr)g1K@_xT^z~tF~hhBkZ3?w^y<kc(^qrnaxAfx0tMzS0rF<Z<7 zyTXAQ@$lr)tddnL8YM3?nhkcUNG}-*DIk^Mxwsa(-m54HCH2C{v@C*H-it=$h^QuJ zm9Q-0_KD%dY%C&z&WV%2fgK}2QxuS2Y_2_w0V5kUhz;tXOUyR<fCZS(CHBR?CL{v1 zYVsB{%}9*IN*4Ho_DEK#sDnez`5r@;UNj@CDu_}+;pkRl3Oc7IL-CYbn@z^#aZsdI z5sC@js!)~Ixq$>IJZ?B>w{<F^%!D)*r&F&S#9=_AvMPi6RkLT^?fLBxy@`4fiUsn7 zIQXh9EH+EZGCbTfHUc#})&%0N$vCj)Btr3)3u<)R!r2f^@QyYGfBW`%sGMOI$i?Gv zs2SHqPu!FlxhTfXek5QuIfl7Wav3zl4Cl2(A`RqoX28cQwZNnt#-auaomXd*vVtas zIvfo8c#xVLo651!9=bgkq<#X7hKGJlO^uBUR7whNmtMJ_aEuYDVDPO!E|5$yDL-`E zo<2}>+nKJYzU}xAo9kxLecQo*u~iyU$k&LhB$(}L=v_!7IvCIbi-IhQhy`juc2kvl zsORmd(tvG^P|$`7sNim~d>6At%au~&o|_A>&<ht$cjUjJvH<cNB|}EbuJRITt;`Wx zu~+tzm;ybR{2m2(c8^LSqcLp$8}b9J#O6OG@!dOmV$O&VC%{E$;c^tSMq3ysImv@` zIh_%8=GQuNDa8vSTp;h=YUE=TA9U5NGa=<Fcuag(lW15`5&BsL4Cv5)IzpT1Zd`;u z3nX1qwyfQqyEC_1^0)I3OBz<g_eTEk&gbu}{ql>zS3Upe|C9gEp?~Om*mnM5lmB6f z|Lg9DC4-CBw724J>z&r+nw9rfBcEOU-PP5JwWhBszOt>mJJ)TUbUR_vJ8Dm-@3SlD zMHMd=rC5|fp~HM5i7-S0RBQz;T0uq8U0DkV%dr^P38S<Cl`7Y3h9Tg_D_G!wDk|iU zzaignoliKlc60|%DpA$8sjAUAQFh(a*L!XxIMgZi4vd`d9rh2W*g&&hBKcoG|1{aB zJ1KLQ)Y<)J?+7rC>n?*aN1A|8-P`Z)9_$+&(3zKYzI(90zf)&gb=O-L21j~(g2N+{ zf8h1hRl1wFqj)v%dZLu0<Cl(3v>f&AX_?<cX|5l?R6o&DzneGrq_cxVse{dD&z_x! z->=Wk*PWd|b9Vj}DCb}C>DI16nC?)@8JKKNDD$Cs#21*<S^q%F8kmg6p>7!%97z=g zCLx%>lWnw9@^^Oi^@e^AE@RhhV1!-IxRNA|#}Hx_6=1}k=J{;<)GX|6L8gQ{-X5Gl zfU$P~b&fV-kjFr>m%(faHY;*W2GB4MT{L+nCn20CUh^g^zO6YsoB5egcp9*bInyZM z33*0_7>u}Rzd?)@@8;V(t=;XxW?bET_MQ8T3Nc*?sju!GCn6^SzR2<LT=0sLm`$p? zSYR)Ao<TW>db|DS{JoOScA^TurduvZeW{}HOJYEqIHn8!9<T(;k*Wzyj)&S(oo!>s z+g_T;RojDY6D^<zWuv{)uzzqMI3)F+^S>P&kvjc-DK5|+XweUuZGD5?oqfT+&aU3R zEJJPJ7><Qw9&3K}^mtn^&`w9E6km(ZUK~zY$Bp?|dIx%RrZH6+iH5at@K~*)BDW6# zY?PHaK2J>OuAbg=ofrB>g3^V)-r+D9|IU?lugvx;kn+IScn*9~;I#*K0mNY>dIm=z z7Gt#{NdQ>pps>s)Iic>Nb-Pq7xh0R}?qH=7pn9|X!h~Z8k<3$<R0=$0$YTNo%_Ws< zFa|jL3f)ejIKs}<_3lI*aa@}!#}R?Q2e1w?DTQ(XQQHM!$bfySI3ok(ji|sN%GX0P zpsS(=urL}=&T1kENe<0mTX<RyUlp%S1GlVDjyM8EI;;Qy4BFLpVHYw)Tm!L}*=~eN zAshh6kmAA)3oN3@zypYI3`EE)a7a*7hqLFJ{WsCT4|Ukd0EPSF2fboPKDz+mB=l1a z?D~Y*`N}OUHa(>o9_|1DJ#85~)&zuo4yYL*!wky^e6UVI#%ZVk==0=(J~0RS5Pald z-z9v4UdDw$Pr<X5kD~xjc?;^gfHF3Y6N(!fEi_)|I8+<}KwTcB^X4zpfO2$+1{eeM zdf@PFN4mW7wvcXaUF2@N(+3YNav!>kW#!{I4#uYYCqm_?_OAmEtGuyyPT)1L9QIP4 zwJVAQTr==jF#;p1v+xJEuvqEN;BB>sKJ6Adu;R?{@7jKwb_6_xbARd@Wz0kO(QHcu z5JNShK<xk2WttV>Zl;0$eQfH*{sfrMq&%01M{<WH!<^9T!r^2}48f6U7LG@8O*GHE z?E^km=c(D~99U5#3$_%Lkb$(CvPdfo$NE_~I+x_OE=!`4LCm&5HXZJz(>G5qM;<w< z9yqGfPS2A6rvJk?w=Be2O~s>gNm;&n?*D9q9JN8~)B6~J*X!J5A`vqT?I&!E?xuq4 z!+poyEal6#uvlrx;O!nqZ(kY2-J6Qrmxb%D?EpNX%Iyc%Wl$A3TEYg6GN)O9yzKsb z*mjaLH+7o1=-CfUzXY$n0((M7v=}3vWOKb>Y}3|()4WD^!T+RX)H0NJXxQN*Lpz5% zlSXh=w%n6hGjl&lZj_q><*X(W9F#{{Q*o~}AT5B$Bzj#e+kI#$FltuK!Pl4_AwdA< zYE6CH{Sz)-oDM-q$WITTu0!1DniC`PRA@Gar}8PvVuS{DHXN4ah}ueNhJCcm%&J-o z<`B>T;0_o|7D508F^JH9?V^85yo`!_S&XWpDq~C$FOMj*^5y)YpbgUzu>>S_A|l{S z;hK@7fOldKcn2L18?S_-@pd6q(oNF<+0X^A7E|t4F%-kO%)tV|tW#wd;#cE|YjGox ziMYtq;<*u@RT%+!8D5yD;mvTm=!I!E2mBo#ov1Y{)I<dNdQyRO2H-m7GBlY7ZqYbU zDd?wkcb<u(_^Gk{7Fy^b+f%l5<K~SA?xqZ3?LxY^c9r}1`s$4}?T<IUym9|||GM*y zZ40!l1BaD(%I>D_r2g4mw{GiNKl0L7jek10-q5uH5AM3n@<VsW?u@N+56h1%3Y(tF zM;`IMM_euYtm=1F_ac9o`Fv)>b7qlGJ3P0}ep7nzTX*Td)ikX3tTA6Sul4+~|I7Z3 zny$s3+k@Y@OZP^GpBvd}&Szh*qT4`PkWG>!hEt(gvS)dg_fe{*XDPy54HPTSW$<=y znBLYdP~u+C!a-lK1=sd<Dr~S8^fymkd&9*QNP`p#7vO);!?0$Ena1P#K3>4|C17=I zD%?xgEr!IftZ1O9d739;xNjAwLQzP6UJ<WFwQ1l}X~s^JF=Z!G%efX+(G*9(JPkVo z<7ffvXrX2Xnr}B=0=58%f$E)C2|=fzF;<X{rMv^HHxUI5+Yun_LKM2y*d^VQQ(J>V zx8eoh2fY<Q6PHpqQ!9;++_ewfwQ#C`<n`V6`tJGHrq{;STVC7ncCI@+)9%uxxtnu; z^Q-m$zpT;E(wk*m7sP#->=R<+%eSytmgz00+|W+1ofw4O3dJBu%`k?Sev9C~zs&3x zB?3FzFv{!~2~5ptb!FcTw^=q1F~Z0>zdZ_|1T^RffO~`sPl0gsiLn2e^cSNVpbyS) zVd$}ROH7U{_!2YY!&Ak{Pxw%E(2H{$jc$@k4kIMs4{$f`J8p0p?y?7Naor}ayTwhL zbIEnf^>?K!7d{>Pc<i^e4{gmKxYCt12rM_<Ws6QKUtPeAF6QkOZ9uot2RL@_LMj*% z!9bsxN5<0vm&+p?XoY5oXa*6*l@cIdEY6EGPn-aP;bV%h_ADRs2{7&CgFU>kMWCSh zV7S9^pu9F?$C^M&4`&=$gM6@e%LTRFP6t6l)=#>&Q}6()#7@B;P<H~)Phb7a2s>(d z28ZQ2HpvA*PR2EgE{8Lpa`#bAVqVB{O*5c0?GoC*xF?l|$Q8r<6*wcp@i6<nrXAFT z9>NfMf{UP04*@!*nxT&h9p$Z186&S5^BS`;ZwhF7b)HV`@j_JI-M|Kp#7k<L9~|yj z>{;r+)xS2DK78cC;kNA4iy7YH5f-_}HsTi3&eC-0fx9o?c{yED{<w&93mL-Mvm1bZ z-Sq80SE(>ivG{p{ew;9lp}LTO+(`EHMZZrt;L8y>QEEE6H3a#RxDmcmRXg9{#!=~7 zsp=W!#4}ay3lv-{6~PlyhJYE0bmifU1@EmL#{JBz^uB3t+~R?5D4VGWxL#aq1Acrc zgQt2@iwgHMqg(_wo2unLNEh(vPe!#`($7jH$w}loS>S8Q4tj;j6nOtm#N5HQpi1=p zXrfPDMwA7N4{2>kds`slT0y<J7qWAOH$G#2c((q9CCd2tfs}VAGEz{7VK&8!6dT$A z8%{xLNQ4|QYBe}e44sDZW2{tAn@#1{kT8qIdr;^usw<}bWX+%{YX-Up5^SJ4@HRtv zRJ}516HmAO9>!B|K=D1=gpI&K56^w?K62DOaMY!%#ZUV`?qBTB9soahbF*4p?ElW@ z+H@Rz;1IuYdN(1?VmLnb$lU~35*Qyj8}2(B(%#0^@zwsd^0m}j?9a_#KmT>}x@S0D z)tupptMM_hxQfB8*<DNaoAwVK|Dz%%_{+`%T{h;QD%+vVk0=xw8{WXZUpihv&|{?H z$FN2vc?D}blGFt_<YJa87M;|Kv-O!!96tvtbI6MMdulyY*^L~>AkwfHhrfzr|AuU_ z9B=!<3AvdcDj;Q$5%8orOAntvv;a2z!3*&|Q)W2u`X<wXi;YjH18*c&&m+F(K40^g z1<TsD5Nj>18L!2c`3~w;@ErkC0Q7ryC}w_P1h5ZZpYenC)GUNv_~59ZO)9^FLT43O zckFzsmsJHlwQkks@Eg5?*g(Mup`g}dh|GSbR~0m6ddkoN$%W-4=8BDP4n^U_Ofnji z^&&`;b`1{q>ZL(YJ^J}SsK{63>-g11_nO)8JeuHtePB@P?d}}zRr>J-_=S&(5)}R~ zpq}?pM7NzWKG46S+=Lc%FKQPU+>aRx!!X~H`gKzO9Vz)&V*hti_butTPdfgS)WMmA zbv$7$j2BWjj28sSIx_h9*y&}um=*hDg7-|zi8eOPRjja|3ZDq8zt}kF%UFQ4$sJhn zep>lS<!bN7p_U8}Bp8t|UGBR3#z$|g%x;t&$rK^cM)<O2>F(G^W2^i|IqWAA1;Trl zy>}}=s$A*WD5=Xhkmw}5b5U9vyEV4LZMY6+Tu3b5>7HS&b|*aB9ZSMZVY|d$Va>Ra zrJnHi#rma|TP^G5$2Wu%nFgdb65h2qx%BR>cUNjRihY?QNNn0+U4CansLdQjVl&}| z#gj{?Z-L!zIO;M!B(@OVz0BSfJ`ysl3*K98zPHv>V$B>wmOf@@6=_?^BioVtwj=lK zkD7b#H}^cW^`vbAP88NYacAP8t$v%gc&(X!2D^?x*X*2^FKh@^nG2LW3glf=xk$-x z1G!|m{%*@hE$fG0+3>!ad56-+fL^uI_30a*ys>(1qq-wAPRWpt;l)+&XO(|nx!yXk uQ8$?8Y=(U3qSKr`yV}TxqiQRJeHL8nZr?UJ!LU!JnJI=T+a_32oBCgSbrmK6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-314.pyc deleted file mode 100644 index c16e76d074bf40b6965cc10cdf29a5b1259fd149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15918 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-314.pyc deleted file mode 100644 index 8f628603be89805d290d42d4991f8cf395605d92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37059 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 W>wA~L!8)yBw)KA2nR7&M{Qm$!N5dBY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/pylock.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/pylock.cpython-314.pyc deleted file mode 100644 index 23bc3861edeb68357a6f65648da9b5491fe723dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35021 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-314.pyc deleted file mode 100644 index c1d32ab66d99c5a455653c68f920cd24984a84bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5599 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 M#|5?tLbl)k0Gb~^i2wiq diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-314.pyc deleted file mode 100644 index 171e5a9bb49a7343372b35b9132b1185f1949878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47284 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 BM@#?! diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-314.pyc deleted file mode 100644 index d181260dad49d94a829d495f89cdcd59ed2de55b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30239 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 Ck5_B} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-314.pyc deleted file mode 100644 index 431f08ff8f3ec3bc8bb8733470b6171b56876a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7291 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 D2jVqP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-314.pyc deleted file mode 100644 index b881d22b059e4e7ee1f9e8c90fe4cd76ea39b061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34289 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 OJ+@%V^Q1u4YyKZM^#6<i diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_elffile.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_elffile.py deleted file mode 100644 index 497b06452..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_elffile.py +++ /dev/null @@ -1,108 +0,0 @@ -""" -ELF file parser. - -This provides a class ``ELFFile`` that parses an ELF executable in a similar -interface to ``ZipFile``. Only the read interface is implemented. - -ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html -""" - -from __future__ import annotations - -import enum -import os -import struct -from typing import IO - - -class ELFInvalid(ValueError): - pass - - -class EIClass(enum.IntEnum): - C32 = 1 - C64 = 2 - - -class EIData(enum.IntEnum): - Lsb = 1 - Msb = 2 - - -class EMachine(enum.IntEnum): - I386 = 3 - S390 = 22 - Arm = 40 - X8664 = 62 - AArc64 = 183 - - -class ELFFile: - """ - Representation of an ELF executable. - """ - - def __init__(self, f: IO[bytes]) -> None: - self._f = f - - try: - ident = self._read("16B") - except struct.error as e: - raise ELFInvalid("unable to parse identification") from e - magic = bytes(ident[:4]) - if magic != b"\x7fELF": - raise ELFInvalid(f"invalid magic: {magic!r}") - - self.capacity = ident[4] # Format for program header (bitness). - self.encoding = ident[5] # Data structure encoding (endianness). - - try: - # e_fmt: Format for program header. - # p_fmt: Format for section header. - # p_idx: Indexes to find p_type, p_offset, and p_filesz. - e_fmt, self._p_fmt, self._p_idx = { - (1, 1): ("<HHIIIIIHHH", "<IIIIIIII", (0, 1, 4)), # 32-bit LSB. - (1, 2): (">HHIIIIIHHH", ">IIIIIIII", (0, 1, 4)), # 32-bit MSB. - (2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB. - (2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB. - }[(self.capacity, self.encoding)] - except KeyError as e: - raise ELFInvalid( - f"unrecognized capacity ({self.capacity}) or encoding ({self.encoding})" - ) from e - - try: - ( - _, - self.machine, # Architecture type. - _, - _, - self._e_phoff, # Offset of program header. - _, - self.flags, # Processor-specific flags. - _, - self._e_phentsize, # Size of section. - self._e_phnum, # Number of sections. - ) = self._read(e_fmt) - except struct.error as e: - raise ELFInvalid("unable to parse machine and section information") from e - - def _read(self, fmt: str) -> tuple[int, ...]: - return struct.unpack(fmt, self._f.read(struct.calcsize(fmt))) - - @property - def interpreter(self) -> str | None: - """ - The path recorded in the ``PT_INTERP`` section header. - """ - for index in range(self._e_phnum): - self._f.seek(self._e_phoff + self._e_phentsize * index) - try: - data = self._read(self._p_fmt) - except struct.error: - continue - if data[self._p_idx[0]] != 3: # Not PT_INTERP. - continue - self._f.seek(data[self._p_idx[1]]) - return os.fsdecode(self._f.read(data[self._p_idx[2]])).strip("\0") - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_manylinux.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_manylinux.py deleted file mode 100644 index 0e79e8a88..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +++ /dev/null @@ -1,262 +0,0 @@ -from __future__ import annotations - -import collections -import contextlib -import functools -import os -import re -import sys -import warnings -from typing import Generator, Iterator, NamedTuple, Sequence - -from ._elffile import EIClass, EIData, ELFFile, EMachine - -EF_ARM_ABIMASK = 0xFF000000 -EF_ARM_ABI_VER5 = 0x05000000 -EF_ARM_ABI_FLOAT_HARD = 0x00000400 - -_ALLOWED_ARCHS = { - "x86_64", - "aarch64", - "ppc64", - "ppc64le", - "s390x", - "loongarch64", - "riscv64", -} - - -# `os.PathLike` not a generic type until Python 3.9, so sticking with `str` -# as the type for `path` until then. -@contextlib.contextmanager -def _parse_elf(path: str) -> Generator[ELFFile | None, None, None]: - try: - with open(path, "rb") as f: - yield ELFFile(f) - except (OSError, TypeError, ValueError): - yield None - - -def _is_linux_armhf(executable: str) -> bool: - # hard-float ABI can be detected from the ELF header of the running - # process - # https://static.docs.arm.com/ihi0044/g/aaelf32.pdf - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.Arm - and f.flags & EF_ARM_ABIMASK == EF_ARM_ABI_VER5 - and f.flags & EF_ARM_ABI_FLOAT_HARD == EF_ARM_ABI_FLOAT_HARD - ) - - -def _is_linux_i686(executable: str) -> bool: - with _parse_elf(executable) as f: - return ( - f is not None - and f.capacity == EIClass.C32 - and f.encoding == EIData.Lsb - and f.machine == EMachine.I386 - ) - - -def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool: - if "armv7l" in archs: - return _is_linux_armhf(executable) - if "i686" in archs: - return _is_linux_i686(executable) - return any(arch in _ALLOWED_ARCHS for arch in archs) - - -# If glibc ever changes its major version, we need to know what the last -# minor version was, so we can build the complete list of all versions. -# For now, guess what the highest minor version might be, assume it will -# be 50 for testing. Once this actually happens, update the dictionary -# with the actual value. -_LAST_GLIBC_MINOR: dict[int, int] = collections.defaultdict(lambda: 50) - - -class _GLibCVersion(NamedTuple): - major: int - minor: int - - -def _glibc_version_string_confstr() -> str | None: - """ - Primary implementation of glibc_version_string using os.confstr. - """ - # os.confstr is quite a bit faster than ctypes.DLL. It's also less likely - # to be broken or missing. This strategy is used in the standard library - # platform module. - # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 - try: - # Should be a string like "glibc 2.17". - version_string: str | None = os.confstr("CS_GNU_LIBC_VERSION") - assert version_string is not None - _, version = version_string.rsplit() - except (AssertionError, AttributeError, OSError, ValueError): - # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)... - return None - return version - - -def _glibc_version_string_ctypes() -> str | None: - """ - Fallback implementation of glibc_version_string using ctypes. - """ - try: - import ctypes # noqa: PLC0415 - except ImportError: - return None - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - # - # We must also handle the special case where the executable is not a - # dynamically linked executable. This can occur when using musl libc, - # for example. In this situation, dlopen() will error, leading to an - # OSError. Interestingly, at least in the case of musl, there is no - # errno set on the OSError. The single string argument used to construct - # OSError comes from libc itself and is therefore not portable to - # hard code here. In any case, failure to call dlopen() means we - # can proceed, so we bail on our attempt. - try: - process_namespace = ctypes.CDLL(None) - except OSError: - return None - - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str: str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -def _glibc_version_string() -> str | None: - """Returns glibc version string, or None if not using glibc.""" - return _glibc_version_string_confstr() or _glibc_version_string_ctypes() - - -def _parse_glibc_version(version_str: str) -> _GLibCVersion: - """Parse glibc version. - - We use a regexp instead of str.split because we want to discard any - random junk that might come after the minor version -- this might happen - in patched/forked versions of glibc (e.g. Linaro's version of glibc - uses version strings like "2.20-2014.11"). See gh-3588. - """ - m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str) - if not m: - warnings.warn( - f"Expected glibc version with 2 components major.minor, got: {version_str}", - RuntimeWarning, - stacklevel=2, - ) - return _GLibCVersion(-1, -1) - return _GLibCVersion(int(m.group("major")), int(m.group("minor"))) - - -@functools.lru_cache -def _get_glibc_version() -> _GLibCVersion: - version_str = _glibc_version_string() - if version_str is None: - return _GLibCVersion(-1, -1) - return _parse_glibc_version(version_str) - - -# From PEP 513, PEP 600 -def _is_compatible(arch: str, version: _GLibCVersion) -> bool: - sys_glibc = _get_glibc_version() - if sys_glibc < version: - return False - # Check for presence of _manylinux module. - try: - import _manylinux # noqa: PLC0415 - except ImportError: - return True - if hasattr(_manylinux, "manylinux_compatible"): - result = _manylinux.manylinux_compatible(version[0], version[1], arch) - if result is not None: - return bool(result) - return True - if version == _GLibCVersion(2, 5) and hasattr(_manylinux, "manylinux1_compatible"): - return bool(_manylinux.manylinux1_compatible) - if version == _GLibCVersion(2, 12) and hasattr( - _manylinux, "manylinux2010_compatible" - ): - return bool(_manylinux.manylinux2010_compatible) - if version == _GLibCVersion(2, 17) and hasattr( - _manylinux, "manylinux2014_compatible" - ): - return bool(_manylinux.manylinux2014_compatible) - return True - - -_LEGACY_MANYLINUX_MAP: dict[_GLibCVersion, str] = { - # CentOS 7 w/ glibc 2.17 (PEP 599) - _GLibCVersion(2, 17): "manylinux2014", - # CentOS 6 w/ glibc 2.12 (PEP 571) - _GLibCVersion(2, 12): "manylinux2010", - # CentOS 5 w/ glibc 2.5 (PEP 513) - _GLibCVersion(2, 5): "manylinux1", -} - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate manylinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be manylinux-compatible. - - :returns: An iterator of compatible manylinux tags. - """ - if not _have_compatible_abi(sys.executable, archs): - return - # Oldest glibc to be supported regardless of architecture is (2, 17). - too_old_glibc2 = _GLibCVersion(2, 16) - if set(archs) & {"x86_64", "i686"}: - # On x86/i686 also oldest glibc to be supported is (2, 5). - too_old_glibc2 = _GLibCVersion(2, 4) - current_glibc = _GLibCVersion(*_get_glibc_version()) - glibc_max_list = [current_glibc] - # We can assume compatibility across glibc major versions. - # https://sourceware.org/bugzilla/show_bug.cgi?id=24636 - # - # Build a list of maximum glibc versions so that we can - # output the canonical list of all glibc from current_glibc - # down to too_old_glibc2, including all intermediary versions. - for glibc_major in range(current_glibc.major - 1, 1, -1): - glibc_minor = _LAST_GLIBC_MINOR[glibc_major] - glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) - for arch in archs: - for glibc_max in glibc_max_list: - if glibc_max.major == too_old_glibc2.major: - min_minor = too_old_glibc2.minor - else: - # For other glibc major versions oldest supported is (x, 0). - min_minor = -1 - for glibc_minor in range(glibc_max.minor, min_minor, -1): - glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) - if _is_compatible(arch, glibc_version): - yield "manylinux_{}_{}_{}".format(*glibc_version, arch) - - # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. - if legacy_tag := _LEGACY_MANYLINUX_MAP.get(glibc_version): - yield f"{legacy_tag}_{arch}" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_musllinux.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_musllinux.py deleted file mode 100644 index 4e8116a79..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +++ /dev/null @@ -1,85 +0,0 @@ -"""PEP 656 support. - -This module implements logic to detect if the currently running Python is -linked against musl, and what musl version is used. -""" - -from __future__ import annotations - -import functools -import re -import subprocess -import sys -from typing import Iterator, NamedTuple, Sequence - -from ._elffile import ELFFile - - -class _MuslVersion(NamedTuple): - major: int - minor: int - - -def _parse_musl_version(output: str) -> _MuslVersion | None: - lines = [n for n in (n.strip() for n in output.splitlines()) if n] - if len(lines) < 2 or lines[0][:4] != "musl": - return None - m = re.match(r"Version (\d+)\.(\d+)", lines[1]) - if not m: - return None - return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2))) - - -@functools.lru_cache -def _get_musl_version(executable: str) -> _MuslVersion | None: - """Detect currently-running musl runtime version. - - This is done by checking the specified executable's dynamic linking - information, and invoking the loader to parse its output for a version - string. If the loader is musl, the output would be something like:: - - musl libc (x86_64) - Version 1.2.2 - Dynamic Program Loader - """ - try: - with open(executable, "rb") as f: - ld = ELFFile(f).interpreter - except (OSError, TypeError, ValueError): - return None - if ld is None or "musl" not in ld: - return None - proc = subprocess.run([ld], check=False, stderr=subprocess.PIPE, text=True) - return _parse_musl_version(proc.stderr) - - -def platform_tags(archs: Sequence[str]) -> Iterator[str]: - """Generate musllinux tags compatible to the current platform. - - :param archs: Sequence of compatible architectures. - The first one shall be the closest to the actual architecture and be the part of - platform tag after the ``linux_`` prefix, e.g. ``x86_64``. - The ``linux_`` prefix is assumed as a prerequisite for the current platform to - be musllinux-compatible. - - :returns: An iterator of compatible musllinux tags. - """ - sys_musl = _get_musl_version(sys.executable) - if sys_musl is None: # Python not dynamically linked against musl. - return - for arch in archs: - for minor in range(sys_musl.minor, -1, -1): - yield f"musllinux_{sys_musl.major}_{minor}_{arch}" - - -if __name__ == "__main__": # pragma: no cover - import sysconfig - - plat = sysconfig.get_platform() - assert plat.startswith("linux-"), "not linux" - - print("plat:", plat) - print("musl:", _get_musl_version(sys.executable)) - print("tags:", end=" ") - for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])): - print(t, end="\n ") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_parser.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_parser.py deleted file mode 100644 index f6c1f5cd2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_parser.py +++ /dev/null @@ -1,365 +0,0 @@ -"""Handwritten parser of dependency specifiers. - -The docstring for each __parse_* function contains EBNF-inspired grammar representing -the implementation. -""" - -from __future__ import annotations - -import ast -from typing import List, Literal, NamedTuple, Sequence, Tuple, Union - -from ._tokenizer import DEFAULT_RULES, Tokenizer - - -class Node: - __slots__ = ("value",) - - def __init__(self, value: str) -> None: - self.value = value - - def __str__(self) -> str: - return self.value - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}({self.value!r})>" - - def serialize(self) -> str: - raise NotImplementedError - - -class Variable(Node): - __slots__ = () - - def serialize(self) -> str: - return str(self) - - -class Value(Node): - __slots__ = () - - def serialize(self) -> str: - return f'"{self}"' - - -class Op(Node): - __slots__ = () - - def serialize(self) -> str: - return str(self) - - -MarkerLogical = Literal["and", "or"] -MarkerVar = Union[Variable, Value] -MarkerItem = Tuple[MarkerVar, Op, MarkerVar] -MarkerAtom = Union[MarkerItem, Sequence["MarkerAtom"]] -MarkerList = List[Union["MarkerList", MarkerAtom, MarkerLogical]] - - -class ParsedRequirement(NamedTuple): - name: str - url: str - extras: list[str] - specifier: str - marker: MarkerList | None - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for dependency specifier -# -------------------------------------------------------------------------------------- -def parse_requirement(source: str) -> ParsedRequirement: - return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement: - """ - requirement = WS? IDENTIFIER WS? extras WS? requirement_details - """ - tokenizer.consume("WS") - - name_token = tokenizer.expect( - "IDENTIFIER", expected="package name at the start of dependency specifier" - ) - name = name_token.text - tokenizer.consume("WS") - - extras = _parse_extras(tokenizer) - tokenizer.consume("WS") - - url, specifier, marker = _parse_requirement_details(tokenizer) - tokenizer.expect("END", expected="end of dependency specifier") - - return ParsedRequirement(name, url, extras, specifier, marker) - - -def _parse_requirement_details( - tokenizer: Tokenizer, -) -> tuple[str, str, MarkerList | None]: - """ - requirement_details = AT URL (WS requirement_marker?)? - | specifier WS? (requirement_marker)? - """ - - specifier = "" - url = "" - marker = None - - if tokenizer.check("AT"): - tokenizer.read() - tokenizer.consume("WS") - - url_start = tokenizer.position - url = tokenizer.expect("URL", expected="URL after @").text - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - tokenizer.expect("WS", expected="whitespace after URL") - - # The input might end after whitespace. - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, - span_start=url_start, - expected="semicolon (after URL and whitespace)", - ) - else: - specifier_start = tokenizer.position - specifier = _parse_specifier(tokenizer) - tokenizer.consume("WS") - - if tokenizer.check("END", peek=True): - return (url, specifier, marker) - - marker = _parse_requirement_marker( - tokenizer, - span_start=specifier_start, - expected=( - "comma (within version specifier), semicolon (after version specifier)" - if specifier - else "semicolon (after name with no version specifier)" - ), - ) - - return (url, specifier, marker) - - -def _parse_requirement_marker( - tokenizer: Tokenizer, *, span_start: int, expected: str -) -> MarkerList: - """ - requirement_marker = SEMICOLON marker WS? - """ - - if not tokenizer.check("SEMICOLON"): - tokenizer.raise_syntax_error( - f"Expected {expected} or end", - span_start=span_start, - span_end=None, - ) - tokenizer.read() - - marker = _parse_marker(tokenizer) - tokenizer.consume("WS") - - return marker - - -def _parse_extras(tokenizer: Tokenizer) -> list[str]: - """ - extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)? - """ - if not tokenizer.check("LEFT_BRACKET", peek=True): - return [] - - with tokenizer.enclosing_tokens( - "LEFT_BRACKET", - "RIGHT_BRACKET", - around="extras", - ): - tokenizer.consume("WS") - extras = _parse_extras_list(tokenizer) - tokenizer.consume("WS") - - return extras - - -def _parse_extras_list(tokenizer: Tokenizer) -> list[str]: - """ - extras_list = identifier (wsp* ',' wsp* identifier)* - """ - extras: list[str] = [] - - if not tokenizer.check("IDENTIFIER"): - return extras - - extras.append(tokenizer.read().text) - - while True: - tokenizer.consume("WS") - if tokenizer.check("IDENTIFIER", peek=True): - tokenizer.raise_syntax_error("Expected comma between extra names") - elif not tokenizer.check("COMMA"): - break - - tokenizer.read() - tokenizer.consume("WS") - - extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma") - extras.append(extra_token.text) - - return extras - - -def _parse_specifier(tokenizer: Tokenizer) -> str: - """ - specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS - | WS? version_many WS? - """ - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="version specifier", - ): - tokenizer.consume("WS") - parsed_specifiers = _parse_version_many(tokenizer) - tokenizer.consume("WS") - - return parsed_specifiers - - -def _parse_version_many(tokenizer: Tokenizer) -> str: - """ - version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)? - """ - parsed_specifiers = "" - while tokenizer.check("SPECIFIER"): - span_start = tokenizer.position - parsed_specifiers += tokenizer.read().text - if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True): - tokenizer.raise_syntax_error( - ".* suffix can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position + 1, - ) - if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True): - tokenizer.raise_syntax_error( - "Local version label can only be used with `==` or `!=` operators", - span_start=span_start, - span_end=tokenizer.position, - ) - tokenizer.consume("WS") - if not tokenizer.check("COMMA"): - break - parsed_specifiers += tokenizer.read().text - tokenizer.consume("WS") - - return parsed_specifiers - - -# -------------------------------------------------------------------------------------- -# Recursive descent parser for marker expression -# -------------------------------------------------------------------------------------- -def parse_marker(source: str) -> MarkerList: - return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES)) - - -def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList: - retval = _parse_marker(tokenizer) - tokenizer.expect("END", expected="end of marker expression") - return retval - - -def _parse_marker(tokenizer: Tokenizer) -> MarkerList: - """ - marker = marker_atom (BOOLOP marker_atom)+ - """ - expression = [_parse_marker_atom(tokenizer)] - while tokenizer.check("BOOLOP"): - token = tokenizer.read() - expr_right = _parse_marker_atom(tokenizer) - expression.extend((token.text, expr_right)) - return expression - - -def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom: - """ - marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS? - | WS? marker_item WS? - """ - - tokenizer.consume("WS") - if tokenizer.check("LEFT_PARENTHESIS", peek=True): - with tokenizer.enclosing_tokens( - "LEFT_PARENTHESIS", - "RIGHT_PARENTHESIS", - around="marker expression", - ): - tokenizer.consume("WS") - marker: MarkerAtom = _parse_marker(tokenizer) - tokenizer.consume("WS") - else: - marker = _parse_marker_item(tokenizer) - tokenizer.consume("WS") - return marker - - -def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem: - """ - marker_item = WS? marker_var WS? marker_op WS? marker_var WS? - """ - tokenizer.consume("WS") - marker_var_left = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - marker_op = _parse_marker_op(tokenizer) - tokenizer.consume("WS") - marker_var_right = _parse_marker_var(tokenizer) - tokenizer.consume("WS") - return (marker_var_left, marker_op, marker_var_right) - - -def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar: # noqa: RET503 - """ - marker_var = VARIABLE | QUOTED_STRING - """ - if tokenizer.check("VARIABLE"): - return process_env_var(tokenizer.read().text.replace(".", "_")) - elif tokenizer.check("QUOTED_STRING"): - return process_python_str(tokenizer.read().text) - else: - tokenizer.raise_syntax_error( - message="Expected a marker variable or quoted string" - ) - - -def process_env_var(env_var: str) -> Variable: - if env_var in ("platform_python_implementation", "python_implementation"): - return Variable("platform_python_implementation") - else: - return Variable(env_var) - - -def process_python_str(python_str: str) -> Value: - value = ast.literal_eval(python_str) - return Value(str(value)) - - -def _parse_marker_op(tokenizer: Tokenizer) -> Op: - """ - marker_op = IN | NOT IN | OP - """ - if tokenizer.check("IN"): - tokenizer.read() - return Op("in") - elif tokenizer.check("NOT"): - tokenizer.read() - tokenizer.expect("WS", expected="whitespace after 'not'") - tokenizer.expect("IN", expected="'in' after 'not'") - return Op("not in") - elif tokenizer.check("OP"): - return Op(tokenizer.read().text) - else: - return tokenizer.raise_syntax_error( - "Expected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in" - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_structures.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_structures.py deleted file mode 100644 index 225e2eee0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_structures.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -import typing - - -@typing.final -class InfinityType: - __slots__ = () - - def __repr__(self) -> str: - return "Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return False - - def __le__(self, other: object) -> bool: - return False - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return True - - def __ge__(self, other: object) -> bool: - return True - - def __neg__(self: object) -> "NegativeInfinityType": - return NegativeInfinity - - -Infinity = InfinityType() - - -@typing.final -class NegativeInfinityType: - __slots__ = () - - def __repr__(self) -> str: - return "-Infinity" - - def __hash__(self) -> int: - return hash(repr(self)) - - def __lt__(self, other: object) -> bool: - return True - - def __le__(self, other: object) -> bool: - return True - - def __eq__(self, other: object) -> bool: - return isinstance(other, self.__class__) - - def __gt__(self, other: object) -> bool: - return False - - def __ge__(self, other: object) -> bool: - return False - - def __neg__(self: object) -> InfinityType: - return Infinity - - -NegativeInfinity = NegativeInfinityType() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py deleted file mode 100644 index e6d20dd3f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +++ /dev/null @@ -1,193 +0,0 @@ -from __future__ import annotations - -import contextlib -import re -from dataclasses import dataclass -from typing import Generator, Mapping, NoReturn - -from .specifiers import Specifier - - -@dataclass -class Token: - name: str - text: str - position: int - - -class ParserSyntaxError(Exception): - """The provided source text could not be parsed correctly.""" - - def __init__( - self, - message: str, - *, - source: str, - span: tuple[int, int], - ) -> None: - self.span = span - self.message = message - self.source = source - - super().__init__() - - def __str__(self) -> str: - marker = " " * self.span[0] + "~" * (self.span[1] - self.span[0]) + "^" - return f"{self.message}\n {self.source}\n {marker}" - - -DEFAULT_RULES: dict[str, re.Pattern[str]] = { - "LEFT_PARENTHESIS": re.compile(r"\("), - "RIGHT_PARENTHESIS": re.compile(r"\)"), - "LEFT_BRACKET": re.compile(r"\["), - "RIGHT_BRACKET": re.compile(r"\]"), - "SEMICOLON": re.compile(r";"), - "COMMA": re.compile(r","), - "QUOTED_STRING": re.compile( - r""" - ( - ('[^']*') - | - ("[^"]*") - ) - """, - re.VERBOSE, - ), - "OP": re.compile(r"(===|==|~=|!=|<=|>=|<|>)"), - "BOOLOP": re.compile(r"\b(or|and)\b"), - "IN": re.compile(r"\bin\b"), - "NOT": re.compile(r"\bnot\b"), - "VARIABLE": re.compile( - r""" - \b( - python_version - |python_full_version - |os[._]name - |sys[._]platform - |platform_(release|system) - |platform[._](version|machine|python_implementation) - |python_implementation - |implementation_(name|version) - |extras? - |dependency_groups - )\b - """, - re.VERBOSE, - ), - "SPECIFIER": re.compile( - Specifier._operator_regex_str + Specifier._version_regex_str, - re.VERBOSE | re.IGNORECASE, - ), - "AT": re.compile(r"\@"), - "URL": re.compile(r"[^ \t]+"), - "IDENTIFIER": re.compile(r"\b[a-zA-Z0-9][a-zA-Z0-9._-]*\b"), - "VERSION_PREFIX_TRAIL": re.compile(r"\.\*"), - "VERSION_LOCAL_LABEL_TRAIL": re.compile(r"\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*"), - "WS": re.compile(r"[ \t]+"), - "END": re.compile(r"$"), -} - - -class Tokenizer: - """Context-sensitive token parsing. - - Provides methods to examine the input stream to check whether the next token - matches. - """ - - def __init__( - self, - source: str, - *, - rules: Mapping[str, re.Pattern[str]], - ) -> None: - self.source = source - self.rules = rules - self.next_token: Token | None = None - self.position = 0 - - def consume(self, name: str) -> None: - """Move beyond provided token name, if at current position.""" - if self.check(name): - self.read() - - def check(self, name: str, *, peek: bool = False) -> bool: - """Check whether the next token has the provided name. - - By default, if the check succeeds, the token *must* be read before - another check. If `peek` is set to `True`, the token is not loaded and - would need to be checked again. - """ - assert self.next_token is None, ( - f"Cannot check for {name!r}, already have {self.next_token!r}" - ) - assert name in self.rules, f"Unknown token name: {name!r}" - - expression = self.rules[name] - - match = expression.match(self.source, self.position) - if match is None: - return False - if not peek: - self.next_token = Token(name, match[0], self.position) - return True - - def expect(self, name: str, *, expected: str) -> Token: - """Expect a certain token name next, failing with a syntax error otherwise. - - The token is *not* read. - """ - if not self.check(name): - raise self.raise_syntax_error(f"Expected {expected}") - return self.read() - - def read(self) -> Token: - """Consume the next token and return it.""" - token = self.next_token - assert token is not None - - self.position += len(token.text) - self.next_token = None - - return token - - def raise_syntax_error( - self, - message: str, - *, - span_start: int | None = None, - span_end: int | None = None, - ) -> NoReturn: - """Raise ParserSyntaxError at the given position.""" - span = ( - self.position if span_start is None else span_start, - self.position if span_end is None else span_end, - ) - raise ParserSyntaxError( - message, - source=self.source, - span=span, - ) - - @contextlib.contextmanager - def enclosing_tokens( - self, open_token: str, close_token: str, *, around: str - ) -> Generator[None, None, None]: - if self.check(open_token): - open_position = self.position - self.read() - else: - open_position = None - - yield - - if open_position is None: - return - - if not self.check(close_token): - self.raise_syntax_error( - f"Expected matching {close_token} for {open_token}, after {around}", - span_start=open_position, - ) - - self.read() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py deleted file mode 100644 index 335b275fa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +++ /dev/null @@ -1,147 +0,0 @@ -####################################################################################### -# -# Adapted from: -# https://github.com/pypa/hatch/blob/5352e44/backend/src/hatchling/licenses/parse.py -# -# MIT License -# -# Copyright (c) 2017-present Ofek Lev <oss@ofek.dev> -# -# Permission is hereby granted, free of charge, to any person obtaining a copy of this -# software and associated documentation files (the "Software"), to deal in the Software -# without restriction, including without limitation the rights to use, copy, modify, -# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be included in all copies -# or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# -# With additional allowance of arbitrary `LicenseRef-` identifiers, not just -# `LicenseRef-Public-Domain` and `LicenseRef-Proprietary`. -# -####################################################################################### -from __future__ import annotations - -import re -from typing import NewType, cast - -from ._spdx import EXCEPTIONS, LICENSES - -__all__ = [ - "InvalidLicenseExpression", - "NormalizedLicenseExpression", - "canonicalize_license_expression", -] - -license_ref_allowed = re.compile("^[A-Za-z0-9.-]*$") - -NormalizedLicenseExpression = NewType("NormalizedLicenseExpression", str) - - -class InvalidLicenseExpression(ValueError): - """Raised when a license-expression string is invalid - - >>> canonicalize_license_expression("invalid") - Traceback (most recent call last): - ... - packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid' - """ - - -def canonicalize_license_expression( - raw_license_expression: str, -) -> NormalizedLicenseExpression: - if not raw_license_expression: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - - # Pad any parentheses so tokenization can be achieved by merely splitting on - # whitespace. - license_expression = raw_license_expression.replace("(", " ( ").replace(")", " ) ") - licenseref_prefix = "LicenseRef-" - license_refs = { - ref.lower(): "LicenseRef-" + ref[len(licenseref_prefix) :] - for ref in license_expression.split() - if ref.lower().startswith(licenseref_prefix.lower()) - } - - # Normalize to lower case so we can look up licenses/exceptions - # and so boolean operators are Python-compatible. - license_expression = license_expression.lower() - - tokens = license_expression.split() - - # Rather than implementing a parenthesis/boolean logic parser, create an - # expression that Python can parse. Everything that is not involved with the - # grammar itself is replaced with the placeholder `False` and the resultant - # expression should become a valid Python expression. - python_tokens = [] - for token in tokens: - if token not in {"or", "and", "with", "(", ")"}: - python_tokens.append("False") - elif token == "with": - python_tokens.append("or") - elif ( - token == "(" - and python_tokens - and python_tokens[-1] not in {"or", "and", "("} - ) or (token == ")" and python_tokens and python_tokens[-1] == "("): - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) - else: - python_tokens.append(token) - - python_expression = " ".join(python_tokens) - try: - compile(python_expression, "", "eval") - except SyntaxError: - message = f"Invalid license expression: {raw_license_expression!r}" - raise InvalidLicenseExpression(message) from None - - # Take a final pass to check for unknown licenses/exceptions. - normalized_tokens = [] - for token in tokens: - if token in {"or", "and", "with", "(", ")"}: - normalized_tokens.append(token.upper()) - continue - - if normalized_tokens and normalized_tokens[-1] == "WITH": - if token not in EXCEPTIONS: - message = f"Unknown license exception: {token!r}" - raise InvalidLicenseExpression(message) - - normalized_tokens.append(EXCEPTIONS[token]["id"]) - else: - if token.endswith("+"): - final_token = token[:-1] - suffix = "+" - else: - final_token = token - suffix = "" - - if final_token.startswith("licenseref-"): - if not license_ref_allowed.match(final_token): - message = f"Invalid licenseref: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(license_refs[final_token] + suffix) - else: - if final_token not in LICENSES: - message = f"Unknown license: {final_token!r}" - raise InvalidLicenseExpression(message) - normalized_tokens.append(LICENSES[final_token]["id"] + suffix) - - normalized_expression = " ".join(normalized_tokens) - - return cast( - "NormalizedLicenseExpression", - normalized_expression.replace("( ", "(").replace(" )", ")"), - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 9acd61c290274c4c8727fa902bff961fa878fd88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4543 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 NpCTB(^6Wmk{tE$$@WTKA diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-314.pyc deleted file mode 100644 index f36a84de9878683d1e1006bd6799cc60d8d05ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54763 zcma)_2Y6f8dG{#-Ah@+<$(Ah-dBuh-l9DYaP9hNCfC!Qx0E!xvC`=M0mM}Q3R+{N- zIaAJb(&aQw;>^13*T$W3R{~`lZ8MuD>4ccH>F)PG?|a8N7gD~@&tu}ezyG;s-E+@< z?>XmQJ<!|J*@FMR{K+3>KJ|r`mhTJ0`0r*8Z1~Av9c*cdwY;Kbe@mrhZ_DYH@P@#K z(bh`q9uaO0I7Xcn=bo1BEqAnp9XGXvou`}!9DHoWMbrh_CegOAyW)PRCEOnF2zQ3N z!rc$G#y5m}VD*~TMp&CnYcs4ZrnME;Hq+V;Ylmsw1Z$^h?Sgf)Y25;Aw`tu9>o(Kc z1M7Cvx&zjorgayry{2_Htb0uBURd{;*8Q+vWLgivdJvXJ)DQLD2m2vY-4CnJwEAHU z7;(b~U>!8IhhaTpT8CggYFaOb^%B#14Ax6c>t(QBZd!+7c};5&md~{Ou!c-)7}khs zjlv3;))81^rWJ%WZdwztCJoCcY8(QYGDtWKD`HwvSktC;6xNJs9fNh;v`)Y}X<D<e zPMOweSaYUz23E|p;;<5?m4uZttu(B8(^`O)F|9>dOQw~Dl{2k8tb%D3VVyNBs&NUV zY>;pTR@JnYVXc_fDy%ir(qNr4t@E%hnASyDmrUywuzta`UJ2_}ruAxAuQsjMz<RA| zy$;snruBMQZ!oPl!g`Zwy&2Y9OzW+%E}Pa9u-;}^RO7dUyu%>jcfxv?X}ufP71MeW z)_Y*l^$>n9toNDL`(b^+jQK%WPnp(-V13xMei7C$nbt4E`W4gqRaj4()<<CdnrVF$ z)~}n^$6$Tjv_1jr8PobCtWTNNr(u1@u&BnL1^Jvo!oLCQS=0JWSifajzYXjEnAY#W z`d!odJgnzT>-S*&zG?jdtUolZKZ5ngru79_&zsht!1`0u`ZHL6Zd!i<>x-uKC0I4n zx(e&dru7wAUp1|-!TP#kQH{R=@=b$;Uw~CNt-plzSElvXu>KkrpW|=A`j)AE8`gJB z>$|YNXIkHf^*5&V16Y4+T0eyKBh&gZtiLm@zlZe?ruC1o{>ild8CJuzuEAP2t)Ia9 zscHQStba8us`1Z2{>>oae~0xSruCn&{>!xf8`l4r*8he(hBky-3>)DML|P@{AmWsW zi%6S9+(g<X(m|wCB3(qfCDKErS0WpUY?8=kB3mS~mB==UY$viqA~zA)X%NvysM{{0 zHyae>79zVPax0PBB(jId?Gm|z$ej|oi^yJy+)d;jiQG%%K8f5<<V6yBfXIUq@etW3 zk%x%vmq;Ixeu)eaIUtdPL>`vNBSa2K<WV9oHi+J8FCqGvLD6b2CGs+fyqw5kiFk<& zO2kLRFOeZ4!x9-GGAfY(ks}frBNCLzIFSj7OcDu6WQs^wA`v1{iA)nYDv=o?$0Tx` z$O(y@Br<Cdz12<;J#A35+8mKH5{VIsOC&)gDUlSBv_$5KEJ!3nWKkkZM6wde5y?xW zK%^*<vqVY~DHEwkq)KF2A}d5zC9+0DlgK$D=OuE1$VG$bt#*m1={=y;;6Kn`-S0;D z7l^#lI1=PlL|!eC*ARKFL|#Yaaf!U1$QvZ`Mj~&L$eW40MIvt{a#<oz5P6$K-cIBl z5_u<)cS_`4MBXKlcN4iHktd0~M<VYf@;-y;t@eJRA229d<by<>lE{aMd{`pCNaU9! z^2<biMIygS<Y|d~gvhT+<fBABDv@6&^6L`$7?F=l<P$`mk;o^Bd{QExBJyd8e1^zp zCGt5Uzaf!liTtKSev8O&8$@rl|3mb542o9!T_T^C$a6$~Pa?lh<PRkBheZBJB7aQe z3le#r$nz5U6C!^ikv}E!XA=2yB7Y%~FB16@2ze|hbB)MVDbAOPd_^K(CGs_ie4WTQ zB=SunFG!?L<Sz}Px7uG36+RO^2crb=n(+7A68R31?@Hu*M7}4H?-ThOiTr@b-%8|% zM1CZZ9~1dIiTpj0e~`#O68R^I{4<e;M6MB8m&i|u{8S?ULgZg1@-rg;CXs(9@*fiU zPa^+i5WUs@o9O=-6z%oDAgz+;)k>aMYq-^n(;9YA9H&HFMA{_cCekjE4kDcr=_1lC zksczw64^*(qeM0l*({MQM7By~8<Fi2*+FE7L~bIo6NLM0EBRrq)=UT5;TDRs+c=6^ ztu=fr(c27)czcLgzF2Gc4kC9-aqc3rS0Z;4xd+53!M#N8lj7V@<V6yBfXIUq@etW3 zk%x%vmq;Ixeu)eaIRIkhevrt+Qk+MK9FoYRL|!bBmk@bOA}=NKGK1)?_Hv?@FV>2A z6w%iPjd%$Ai1;NkL}XYZBSc0e5+HI!B4b3%85X3BITrjCvn)n!G0y@bW?Bq_c@~f< zDV;Eph(w}9rlq5f5)rd5Mmm^xK|1El3&NOt!C!Os1!2s;;O{BvsMAE|45GK%8KPn~ z#z-CWF*s7p$QT53G9Y4B#vquN0TDAZ2Ep76h?t!*2<B%%%o!SlF-L>H<}3}un5V&C zF;in4g}EA#vl1y0DTDCH+bZU35T`1UWg^QGSs}725#gP+hAr=`6*D=4oR{KUAaX$> z7m1jjncix`J8QM(cM!%55B{2SJP2c!2Y+89rS)1Ouan5*L|!kEHxPNFMBYT?%@TPF zk+(|ZGLa`F@-`xGm&iMayi+3YBJysDTp{wLMBYQ>y%KpJk@rjF14KS3k*A1!$RK*F zeVFJk8WgSbOGJKIBELf9S0(Z^k&j5^*NA*nBEL@LV-oo|kxxkE86uyQ$ft;WS|Xnz z@>z*|j)>)FwPF@YoL9@wYQ;>FAf}&%u<)^3!@nb?^SeYoFOlbnSUy%OW|qWJrjMn! zn((t)!<L`bidiN>EI+FiGfje6UR5h*n*{kYDZf7_@)r{MB9Sjiq(<bbM7~VqD-!uC zk*`VQ>qIQCsui<PB6rKHYQ;>HAf{J^u<)o_X%@=3uD?a(+fvHkA@UuGe3yvjQMHDJ zN7ZW0O6jd8ysB1fb_!wPRkd0(R0s>Ns@0mMLRffJt=3Ex!osU+wPvdj7G71WHDiUa z@Tyv^Su2EvSJi6GTp=vHs#a_E3Sr?@wbJaBG4=_ss+DH23?jU$R%;duVc}7=S~FP) z3y;b{9u*(uAdkvH9+g3aN971x9+e|3JSs=n^r)!S9AV*AIk4hmjK?^Ri14b6w1ijX z2wPs2L#zpbSYDMQEW9d*wK9b8W+Ge6GwBF#C9+i_+lXwF$aW&zC9;Ev<!3p<!q0M8 zt4Rp&B672Il<>10)~XW1!pCx0D@zCqAIo8_E+H&@EQhtigz#NNOdm^cHQ{GDtkouj zg`efHR-6zPewM>pbwXJ9Sq@rx;{NXl3qQ+&^(W&_=fFCYAeNuyz*>|bmY?OodXyl- z&oa^xewHI_`B@IEO9^86Sq`jC31azK4y;cJ@)9YX$B4XCA}=HIa)}%!;+4oC5uZf- zM1~Bax7sjK%ky$zHA|FW#E6IRD3O3fju5eYF$dPU#8E*h&Nz_?iA)lilt_rkltjWr zA`*!bnU=^=BElCl+FJNx4#^jDkT2$td@%?4Vh(FH4DnCXQFBr{XNU+t%t$#-Bw-M} z)sjS021QzFBJ&biAd->DA`#0MbC56QkbE%*`C<-h)eI>Y>8P_(Iwc}yiByPGC9+Ip zMIx(2EMLrl6*bXnYf>DI$T^9eCt~?xj_^eym!vqaAo2?mc_ooo8boikR}p=+L6P@s zh`d%JuOsrfL|#wi4H9`HkvB=?%|zZJk+%}LERiROyiFo+C-M%7ypzbgB=T+|S0wTz zk@raCy+qz8k@pj^=ENK{C+4u$=}`9%QJfD;NBts^Ujm^~UT?KuCi*K<yk8~qv_w8a z<kuwfQ6iRi=D>QMINO$Y=D?bsAeMLLz`C9wmUrgB+MXbvmQwx<k<Uuxb3`of%t79n zL-NiX<efPr@618onM3l<95e&w2!CEm`8i72^3ELOojEM;3}q9ZnZxqT^i~tznM3l< z9ORujB=5{Y-kC%4&Ky_|6h~R!nFDKrf(Y--xbq6{%n`P{GY8fN1^J3p?ynO0nnb=% z#PZG@<efPr@618onM3l<9ORujB=5{Y^IZ;UzRQ7CLXrD-rM$jJ<ogo&8zMiD$lntA zp+WRk`w`I}8x-mO9g)A6$UhMIM~VCsk$;v*gUB_BtP}Z(M1D%-UnKIcM1Cfbe<Skm z68R4z|0$9GBJ$r7`5z+xYZ52?vW_7qJThZkcfv0d#32zU5tl^Th`1%vPNc&i)M`%b z%ModH85H4eB0Uo6C9+W>n}}?d$QB}7C9;jkc8TmDa+5@M64@n@n~B^ak=;aYmB?*G z_DJM*B6mpSP9k?nWG|7sC2|judnIxok^3d`A|ekML~peRiFyo*R@+D9A&KlK(kGFA zA_EdRK;)oA9wzdLL=F*oR3a}XV)<Flu<)~-){Y>AUq<BR(ou(rcqKAO#3vCy5x+!+ zh*&<BlYA`k*Xoa>6el2&BSgjwqPJR*=(s^q$_XNq5(yERl1P|HSRxT35s5^JOiSb_ zkr{~`BXUe4$BCSf$Vnoz5;;ZWv_$5J%t_=7k(fl{L=qB760y84CwW~?Yi|--V}asi zjHC2cTO_(<P{hj;$w?$nq#%(Zk+Tvh5h+WgLZm8@Wg;sQStVlmSx(G<iN0p}Sx(G< z31azKPV%#y)?Oy4ub?=;Af^0DBCnFjtBJfuBCjR#I*B|^<n<DH1CcixL~pe>5q+~k zQG&M+d8<S&6L~@+ZzJ+{iM)fzJ0<ciBJY;S6(Ubc<UK^*E0OmRdA~$HK;(lGd5Xw~ zB=TV*mY?Me3qQ+g?TbQK_*hPBZxq79$8uWxqYxH8meblJg|P6koYp=mz12QO^y5+q zK0)LeiF}gCCnfSJBA=GXXNY`OBA+Aj8xnbz$ZtyIw}|{U2>UBe^0S<hpXDS!%PIL; zPVB7`HTgX$o!=+&2NL;1B7Y>2KPK`8i9Ao_d5Qc9kw2BlpAq?UgXpdH7ev2kP?Y9N zL~0VbO61ED`3jM*O5|%qzAlk(5c!5gzDeW-iPVYwr9}RU$X`q3TSUGsk?#=su0*~^ z<ogo&8zMiD$lntAp+tT}<i`^EJ0gECk$)iaj|S0O?VpJLvq8~n4I<YhvQA`OB0nMW zQ;GZwk$;uQ&xrh+ME;$~e@Ns%iTsyD#JreOniq4@yqHT`X>`%Nm`hq|bkRzqOPUvR z(Y%<;nim^#(VUoz=EV5P+(mO@E^ALT;&dT*moz8lqB${_H77=`=AwBqmozWtqIofw zwQCxwY^AienRRo8w-ebeksU;ClE_XXyCiZmky|9Pn~3F$xiJ4F%5AMQx@Z>6MYCXh z6}xB_%q7i&xo8&5W$m>_3U^aF_ego&OXNO@+)w015_y2ggA(x&*=G>F)gB`HkU^2( zej<Gm=_k@JkpUtHByy0*L5Vy}<PnJ+B63I~j}ozF%3L&4=7QH|_)sp|8Rml5W)ZO( z=?Yt`kuF+|bV;j`E?SLrg)M*0h27oaD9c}Sk-z4`JeZYofZ|yGnky{)HJ7#D+qVIh z@YY<$u5W~dujVrLeLvLd+fZqT9XciG)IE3+06PU;V(&NowQ`FPiAwoT6FDl886uW% z=E8iKNXPQcT$m3N#PZEtm=6=g^37bdQ_K}UBc&XpIB|(2h$JPFB9fNKJdp*7WQZ(E zWQj;tA~_;?i4=$wC32QX$sp8bWnvYBp-xpIRf#MUS&_&pku`~EL^O$<BXV9M7l>HC znu~ljm*lIt$X9boYm+Won{-KQlP+4DbV+NIF6=-TXT$Q<T-b#!h~=xfuoGPn(^o@S z_-W#=)nDFB<Si0;D-m-(OuweZoS4hnqmJ;~iM&HP@|{GiIWbpQ%!#?Iz3K=*N#s4! zQST*Ud2cT4Ul&KcPm1$?A|H^*2Z=l-5iv{VvUap1EW9_D<h{Abdvi(Nn~S_Rm*l;< z$a`~1-kXcOH<#tTA<d6b${&|<{{)dw7({QiXNX$<oC`B%qD-GcJY&56G?C93M?(E9 zk<UrwH;6ndk>4a@`ExFsH*-nzW-jvQ#9!-d{|+7XyAt_4k>@1xdqjR;B7Z>S4<+(P zME+PJUm#+6crKbnb4jykE}BJiNwa7!nniP2vuHFDevwl85~q#UsFAIEcd&(T=Q4KL zBlH!rziP(+8rfer?Qf8+dv%B}d^(pgn}(3^=v>BJ8bZRK6Mw1I5c+Gfzh&CrCR_LJ z9_qr#+=*D<p^^E!Vq}K(y}MfO`@XBC<;UWUt@}6ByJGo#p%SZP3i&e3j_6u3mGoy4 zm4t|3{HMR)wc#fZg1n;TR7(YW-Yc!A+bWK|ct7kE=AuOUVFyA^3b`uqeeP<x-(ByD zg#5>XnM5jIPSqXdN~zwON!Fe5LLpo4Os0yZR3cVMB|p+K@sYNA``lbUmP^ge)jQ|r za)o3yE5hA#b7!lutgdXFn@eX(<w`b_Pvr}c0i;?0Y@eGei#jFdVwFlM6R%cM<+-_1 z7mD~3QKkA5z8B9<ms6$kY%G~7^*#FN{@Im6X=%1tDlDcFmGW#NTc{@Ev2x0j$!99~ zgY>f5RLRpf8(OO@6!HUo2j&jUtsZ)KE}F^}v#7ybC0CpcX5zEuOeN(h#u7`h`BZtf zm?=Iqx17o+3#Eq`X7ck7Ww|}d56zW}$<=+uwNe|(MSn!#Cq4M{x|VOYcfD%lo13<M z!?~@r)zJUHPE6<j$BF3?CuV3hkt&L_Uvi5K+Qpv^@khKUNG&!|>NbL0h;72W$@oL@ zwhN0&D7e-(u&@7-ef#Uq{qb^=(nN4D;-^H1wVr{brz~0k&AD$sOur{$nsrAkmaRLy z-eA2w7B5%UvZ->t-K&SRu2?dbD3ns3WFet-d6O}pVRXilg?P%-zkmP3TBp|v?_{3L zlyREYJjFt}QcjdI#fr9*WBGL@1SP@>auI3GXV;1gA{SwdkkQRbwNfZ%Vp=y#(`411 zv1B=0cY6JipyrOHv#4F4=JpN;Il!dfAP5N3j~1Xf6kwts)h`YgWWb1n09qxTE5=H= znA*L1NNbPH7e#jawRZ1FNaVLas`VJqQ^;r6v>roYbF-zEJfi=Ww9Qrw198G4e@<A0 zI9-I~bWM}fCDTZR)0I)(9m~d&$xOcP_Hsb$jOCJ^d}<||iR1K*`}Htl=90y1F@~7q z{!lRFMF+`=4l*7@XUJu7lFHdwejcZ3JZKnoR}5`buDiVBA#ViDldoh;o?;TUn1}|$ zo{(SLY%ot6S9TniE9$R{7IMe(Yo0<mgY$sEWF(+%(}|~;DrG%9M3tFBR%vGpSNuYX zPE4m)3Y)wSbu~D`Iu~8R;0V{-z|*L7n>XYgM!nrJ{cO9ve6j^8ddmGpbR|8|9xIlO zE)j}Qmq0r(>q9#*Lr7=+CPRprC<Vt8p{`h|xR6PBFjzi{ww8?USgDdJW3;7uc6()O zldO3X*+beUStqhti6fd7XF^KE6B5YEMU=+MMOZy%3b@KE=;_AMWOl^L#Z)%yDOI%& zF9*ZZ+D)<YO4^gm%x5sNdt&8ss#2y3+~keS414^#;FW~yAJM1X;E2AuJ043d<*G|{ z_n;nVi^mo)rqtU8`PUhbl}dHzApUCG<B8H*vEnHgvaymUnJQ=I^SCMv93kx2alJjB zN|jb(B@6?DdPv(G&s1=OO~rDa!~)txT+@Rl^69A8inW|7#k5{4%2BeRR|=(4Dqo=n z5qea%6}^v+xAZ=g3`2GqcR8&mo~@<|u_cj=I8B2vCrz_GUPvwEJo5>yeUL&UK5d)9 zJS!R8W~&uXI+fD48M;i-x`k3ARb55vazNV=FJ)qR3<9xa4!`~AUa@L9rR^9bK4Nm8 z&eiw>H;6yr(c^dHcIN3bVs+z=220k=97*dpw5{SeL-QnKrIk!x+bRw>qImoacPcT- z&G867r>yN%qRYxQ^_WsB1%Nh_lOF~J(A1LTQxy?aEy+Zx(j2ph8$`Zhiy30LN6Ejq zG@mHs#g$b?>t}N4gL{;sTqnX7C57coYNf1gQ4TsvjN0EkOVq~ZxuKdFnkSYhW)d+j zuMx$7)W%j!-9v;6#BFRw_eu(t&^#uQO~p!FLNm6H*k(}^GhRBITE!KJ6JbUpv{8w* zP}DXmaYjS9lI3)=@jS*vB~EZ~BB<?BV&PttNu$=no6~kFvBzcUcIBvi!IR5mF$k8{ z(9_6E*KSu1o+x<6jTk{a2Ay-Wo=78KrA9H6pmT248c9s(5sVb}+Dl<e0ghbX0d23n zB(`KYR#T0Pv@kxFaGzgmu91<>j1gnIQl3IFmG|U|8Ev~#fJuSJLji4*61!Z@Ynzma z5fJLF2b9s`fH5NM5XT#ur@T<WV4Y7TF;bzk7_mGNlT(i|<5v^hW6X%tKCO#V+&6$> zyP$PZGW!O?LlcvFIra@yVhe?oMpw;&eFIVN=;V+_=P{PVeE_#`4B5Cwmhy#_Y$`dQ z%84tU&ZAd~;I&5(`5KQ|=y{%nVm{e)^-I^1XEZe7mm|>lmC2`5CDD&kl?qC;#N$^$ zrx=r%_KMu_lvcr0n&{@eqM{+orYoXcsN%-piKpf>`Mju9I+IQD6%o0vM6IhIl_(@r z+`4*Pp8!1~-|||ylFDTgW!%Y-ZNxOG@0hA*Wk5Vkmbveku{<*aGlbo7-7#|y8h%;4 zN(kQA;54y5oKG!N?58{DLD_g%>qvO2$r#<5JA9sLzn6mU1l$<$1mO00+1uNr6HlU$ zi{l=W^oU}4QpOXXwnvZY@fi_B0X^m;VO^w&=VSQZJ`QMGb>hLP!jpR}hkL!YRaa$L zZ^u9chog|MxBK*v)(KY7Yuf4aMkn>Ub|ey>_?liLpJ(tm2bl^7ufs=_f(AWk(SusI zNj<Tu)@?*T=<!aYy(o1&e;7xIpnimSDv4E$BZTFRDw>%ZY16WXexc_iH2;v+W9H<^ z%onsCE`|^TBe)JN6~no7Bt~*ctCnSLI%1UnfK`4G)Q`yPUN>ho;iHzbH1d^AjVvw& zj_cotc9S$%riL<0ny@y?8oX0&qj{)ad+TT_pD7E=IvRt6=%v=t7z_xQ=_7_Hs1k#K z8snfn27nxc3T+kwxd^bu7DH5Ii!G8klUwca#QEH6k0{Qnk|$MFj-}SU%vY^dvj|_i zRvL(*)*Uefu*%Ib)N*qqQSPRAY4|B-f%JI8;pTYNrRI3kV^ZxXU%AaGF}ckVLv3@! zP}`hiG?g8Z)Hc`Sscp`w(UqjMm)hotC4kWvxw9F)oO_z3iI%lAvh?#Vx}bG+z)u&J zsfk)y$5EwaO};v)+lks)M^pLqbAp?_Ra#VATnT#0s0mq|GBl~Q(1fM818W|fLcM3P z?6J-t#pv@a7L^!%o+BZnTol8sF(qKu7@AaLXi|+?6GNz#H)Ju2TBQ@f8ZkHl(I%VB zx``O#bZ_Ez(W6MCCi0Qm4Z5)0IKG%nCUDR5VNS>I!yQJD9JO30!Ep+UdjOIU4Jz&> zI9>#C{C*Djd>m*`B$N8AiO=uXXH9g5yR*(PEtk-vxqW)9tspTm{gcb!;dhxQeYQgN ziunr#+GC1S*%VX2O%$_?+o<qjM2R<1f)R;yCQ^wEW;cY|=^OF|f?R5gV_wPR2<!1h z`Ua=4$*uTe0<vA_anznuA2b=B+;!$dKZ5_}DJ+PR^q~(Ag(p0dqoORZB&}c3`n6tD zD^j2CHIEFjZR%y49<k{wHho6e@L|%J0m&5L!wd(ak-#MGrwggXk|(iThA4u$rFtix zRrN`udZ#aIOd!==iEO5bc|@Q1LA`TTPYzRhsQ37^XIzAO4F>N=%t`keif(r$@}-Pt zkroZKF5g5r;5nijq!eX^*A}#!CB-9VcHzO{2|Od5t(z$cj_46{y>Q+Ptvyl5a8GFW zO$N9hY{9X)Di$%;Jed1pZ($3L(OJY`op@@;8U>xNPM;OtnkW=82cNFMHD9fG_U{uH z|8-!WwmnfO<;6r>woopMDIknDsd;U?Psc$69|;YOpe>8K!`ki(=^m>)Va#j#^m)yW zM6p0M>eo7ap-HMzf4waMzjAH0-sa=q4%p=~yxU~G14s{c(R5m&ypl;*>RmoDw^oRd z(F;W^=-~gvQmRz%g(&O@+gewm8uJwNvUK^Ty`D)fPu-cQ##42tkNzgAn3r@XaIIGg zm|IMG(z;{c;r9&du6=hBZEid$Yu)}KpE(y$Z^!d`Iv2ykPB%uAB%WB-s0(*vNbwH| zH&|Sly{u`eQh{w&PYi`8se?Pv>*@~wBpv|~!m`?uCs|2qUH(F1P#FHGA8F`H867@{ zDL+Guu)W39X}x73m8xi4%s3V^b6Cw~tsIVx2kY)+p;Atr#e}|}1DZQo;=btihq){2 z1fwUDzPdA6P8RD<f5aa`xKhBAMshh*Or~?1JC)E6AM)vk3nE&?Er<xTrxFDo71~oi zJ>*W&!i$JS3oi%=!pDIiP;X1kr}7!}pVWx>)w)vI7)@Y{SY1PwQFr4R7(E%~8qx!< z6lRt%A`FEBz6jDbdhC!f6E6to1|k9-n7*c1eOkv*DNFG%#-`BWVsR=@X9^E=mDqd< z3!|Mw(|$dS`c?Jh+lQw0^bLlQS!W38@i23*vwoDkiYs9)hmz|7XF8U_T=TH_>qy6Q zb;t1FxaLkLmpri;?xDl}F^|{l(>CEre7;)7qkLthkj|7Bv`xbXiRz>$UBWUguDDgY z@$?KUW>=agA$gHbpL_J6i`F}YlF4CZwB8|jfP$`cIUOt3UBi)KZ%ErsmUx&nrf=lg zg54D925McTRLxRK)993BWlME84w?=I!^mIg*-{xJh0Y>=ldf2F#;<kr<=p3qWtVZ+ z;w!q(;|;><GPGQ#qIDV4cp!?FtzdO(IEv-VbhU)p=gLC8eb@*&(<|8(ZTmbLPfTOX zquFxe-j3N8%omIZjM)qmj|kj8pTKfJ0n-lcBfc<&>aFw1dh3W^>q19Pm9X@(S`iV` z<dvX9j0}@o(x>e-7}l_t;YVOLtjz0nJB>I^%I@nPW31-wzV2~`dW(51&YwNYTg*eR zBksA;kw(&cZgjK}p~p;t7d*}QWNx-p<ABXp3<DW$h)YQq`^`4&Z>o^dhRur6hN@!Z zVzlA)Rih32MK8Zm8(vp5+OSD9GB(=qh7pW5?AI4}jYiNHjrBH!YNTkip@fV!95CB( zz-+^TrV1Ht*sK_Bs47OrMjKvVHQI3C=e6N=MWYRyL?dIP4R091Xu|=u4RzD#hcJy4 zjW)DUy?q{D3oq}D7$MhuwqH1-Bf<Vqqz)^SOu?d`w)t!|yPB%Ejp)Dg*_BEWOU5I? znP><@;d~zVl0rpu8#@Ku`bGf^8+?;_0H=#@G7o6oI^!C2>zu7kre>6Xlc^hoa-qAR zkVJrTK|s%iLX-<aQZA-NxsYX~Nx3Lwk0^;CVzCetf0Y6)JxMd1dhR!juv<wXo)LFF z>+s#m;db?Q<ybsGl*@3$7o_8FSB}44j9Zj6(giHJTG`*C9BvbDR*sy<^R0E@&B}oz zc;K}(Iy1tDr}HlYbY>9H&kTj=%pfG48PlROLzZ%86hdc4ke_>IeqIEspBdpg^)ofK zem%H(ij4|ozNhw#7$)6IJLk)VSP?$U0Ct(oM<%@?3ghyqED6^cfocV7$M9oE^gz!- zth|KBno_EWRhoLwD4St6oeRnI!MbzQKYXy>wvfceoE&~L$yhN{ZyOExy;v;TxR5Cp z3yG50k%sQtr)?ay0rvvR^ys07HTNhAL;)s`8syQsQ!K0?C#;@m?Yzj6!UH(1rr@!{ zV0Z*&29H7O;dlj1exL?g4==qKW-qC!RZ%Ywrk#69)@@8Y-=^wKYeToG@tgGRw&Q7m za!uQAJ50wLrP%$VI2)yS{T`HO7sW`Y^7&L84k^|em*G2=D`L5m;trcq(2_Xa44%Sc z9^rZF=?3s5?)3!5y(3yDrJI3+pVc}kp#X)q5MN3yV+G!`Aktpbwvax?Y?Rq1iYFfA zs%6hobpeZk6l<Kxm>|13PO5~B8Tm>qE*4bRJi14w?WXuxE5EL~m5;?fL}^idD`ydi z%CL)KVhyd7TGF~G2A0l*(M?J*j=hRvfq|ruZrx6r=pk4NmNW6JVvi(N<Fwl;KE;5K zE9Gd$*leXy!qe4i5nE5JgG^+_GO8}cGLTdr9ofnym&b^qmP^~)l#?wDPbsym?X`+{ z{d6c6u1>5;V9^y<C)N?L*vhr7iZR!?c(@+ZVyGoF9jUi3RC3u$Cb?E`AB~O&qXGYM ztvwUZd5W1hy!F7~IECttOrlzM1boxl&J1P?#0n(M_!O|e72bNPnvH2Y1DH7wOOZ6+ zqbozxL2QT1EY9QTBO_V|LcEr&b-?Cey^9{V(D5^grFs`VaE-Ik2Bjh%gEQm$Zw|Zf zFuf9>Uz9bUE_kpEiL#2&i9kr}!ICQWZK8|OUA-qjCOVlg>m5)Fc;u-T>m5)E5emBK z(yF`os_G;Qg9TRCI|+HbK8%t`85@>p&#jotM9PwhT4D>JBM|ax?u`CS><+NE0<DZ0 zkU#{JkO+B}Q<x8pm6BRFkmsmw)g6m5Jn|li<+RR4u_LTR73e$?D`S3^O7C1OET^=N zMWjz{rga=a4iv1r7K`~zqV75pnh5yn&P6y1b?1@D<V4-Qgt>zfYV01<18qw&4Gmdu z8>3&Xb17eiUy!K8@>=H@g?&-)gyzoD3>Y?o25ABe0VV?m8K{F)Qmg%`x;w}LZI@0w z6>M$5)<^7}hL4L|3zoR`IL%VMBa3am1ymtc?+6+}tv#!I5n6jt_ZhSfgFT>i81MnD z$Dr&H^cV`8n=RGw2{v0X3}obn=Tlw8jEH_@pOqVeMs9s-Zn|mY2GdB|$W20=8@vQP zHxc685HfP3Am@gloSSKKZe*&t$*A5Y>VcVtHc>N7G_;`u6!Y`2=@&JkUw9i2?;AL% zb?PQA8m$*$46T`bl_pbg$}{l_W(Kuw2vjSW(M`sdGdRgrJnUC2>L)tEv@44{%2|(a zZLoJBm<eX4Ji@nu!3xjp>PncDjk+Rk2@LqSunBf>sl;ZwqS(!j?QZaJV%m-%m9~lR zw8u9lkF}llBTQw_jgIm3b7p&Pbf^(w_YG6Ppsww{;o(B<=3~WvA8b7C=D1>;Phha_ z%oYlmoeWM+Vwo&k#IBY?qDs4Bx`QEXVKFQ>Pw&B{4)TbE>x#!H%p&Lrp=?nfxWKG< z#KaZB3?V%p9ZT^r_pP&m7_Lc<D1rt}STuoBmkViaYqpwz7wW-Y%^VzF@$gXAwgwqu zL#Kel1h;3kT+CC(Ea0R2`uZ@Hjo<$L+V<dyajz$WIY9;YNU{6-wH_%J%q=;ZP%p*G z)|~g2af$hO<K-RA@o+;hb{<g^-_d-SElS;mn_5h(x94J+Y_WtTo{n5>DV515Q>*ok zaRdVtgr4sgw_<G*e6$LDxp<~DpG#%n*ldE2Cdi;ga)~15zr_m**n+!ISV5dbNFm4( zleZ$*x;vN2i?=%J?r}Zf%!vgf=XgLoqUSQ0gRQ&9Go{H$-2vyS?tq`7fny~_a|xdX ztGL3F_F!on1(!jGh=G+T>{0I!8djqaMBbpes^%s(KCQJ20-rRdwF^Wcij__+a4Zq% z7O~PPOn5KHun$GV95yT}%hCdtRWO}i$R@cgV-naRj)u!FR{M0HN!udQz#c=vj`Ad< z)+^%CHoEyzp<2{>MI6cQ5jy79;hn-=)Ov($nQcN{scLNk&s6Ke&ZlE_VNVQuaRzdk zRh}Lh9}gVkP_BU8MfktoKCXw*B3Od*l*{vI5v)3SB9Rf4teBA&YLPZ(^cQgRg>Q^u z5SQ_|etGHy3l>Ze5OKtyO+*B4)rpvAGR8FNar;(rB;s9PMh_u>ye(JuV8}pqBOVMG z=pbbeOczYu!b+2{!oj*TSIOcnlksQ}+lF%R4fDoE|L$>N8JqnrO%&78VAb6?4juy* zKye5K965L}j&Yo*&U_4;=*4?916t>VHxP+(xIG`E6?Dw%O?YVmeW2c!kBI@X-ZnwM zT6;cjjByi#MkD4EakO_*b5HmN1LD<-u6$xXi|q>3kX;kLks!7zkO$_-Cop+F;X^I+ z39Py}CwvhvQiXe2&gbBV3P&?CF&;wBsY)W5M$V~<&p%v8oE0oO;_WiT(L>HW?#W04 zcjUS&KaU4^tpgrVMc)SiM=q-G1IUXSQxQdVQN&F;vEBsPG{KTZdMFMCTbifSdMHA~ zFx&Il0`ER)p9oI!&J$+hbTAXA!kNd3M<H?AQOLqlCRTS%(2o<>pir<&PADs>xKQw; zx${O(oiH1j2s$VeI97SQ>BO%NbxefBPCNK3bw|D=8aRx1Nb(gt5L2C_cn}Wxp;gcY zCZZwDg^(DZ5ccdx-eUO}d5a&dqhRemoHTYH)*Xcy7L_KwVa;7gB+!;v7@hR_(3U~1 zy^zR?c@NZj(iik`sE~~F#nwLQkMsIoXCY~B1MHmiW5*wD39P#cX{<ukU6aGZ0j#(c zjP<=qeSNQ2C*l$-rLiYe7la)ip3u4sU5H(VC=@*{v>H>q%fNB_Y-y1#rPW6n>1p** zF7CoSFRr^MM|c<B#=<<7V=A%C3fw0#u56qf!KzHu0=)%X2Z>l7@3c{?^iJYZ@L6`J z&~crJgFA(W%Y?!@7j0^A3hNwa+T`M_y9)CabS2m1NHh|}8O&mO3JIZ;Oa?JS#X*C@ z+b}4C1|6^{f(AWcQ3RQag6JuTV3$dSFUl!{i_8thEQgpIGpSjQ{(V?)GvbOUW-4S@ z3Zfb5i(|}`%(D0IGt1t;&n!CyjZ_X=Wk=AU*mP^8jG#duu_%HDJ!H{CT6-Z&-4%o8 zWRUvn0In7B{@SE?e@)yEi*d1pJ%F;q2n~u|EqLq`3U*P{-GWAN*0$)xgN+LLWGss* z0BwsdO03=~;w@t{Hy%(sg?^O6=<CLqq3>nT5R-Zr_ZAE!=v^Y*Q7BgRi?d@gG(E^y zXP0=c$90Y3i8Bxx64y2vZr;+1dm``WMSzL8uJj$gL_~KWLIDv+q@@!C1Q7)wBKobf z7)xRV40-*y)#1TIOqo4QuM%~K6ie6e&M6KzG`8BYK};WMutSXN;x1x#m2wJUzEuR; zbprQWM}2iyF|&$M%@v{_xBlKry{(A1I;!P*TZn%<iuoLTsS5T2?Z#%6wREAB!|;(8 z`))9ym*HJ5$YXa1>ab8JuA|;+9$U`gg+vdwgk#S(HqqdM$HBLn2S-RAROEW6c&!z8 zxbj)NR4ra)ML04QtUK_`QFq{pL30<&X|y+5HxwBb0aT=nRs8un6!DZ<);f7F62<D& zcNmEyx-E|L)om%FC+M0OQtGa=3s_vQyQajC=00omxGDWEwM8c$o{fczaX{Omiyoek z6|C+m!TU|(N6dHDU19N~b(XMK3tp)hw>rb4wBbX9-6hHffiPubl7j|0sI`|2AE`ZT z_(yFexHGw=))s~{Gww%jWo$n}ZV_xgsyj>7_*&f=#$Ozbzn&sqBWV{lh1$xoRdM%h zi+GO-hoO^gZaZew$Zl}4DpYqz^nkORNWrs-_=ddoZrYEN(w7#xX*W(vUs-4`<E3$W z$Y_t~A+5(?o<sZk2eckTU~{LbiZKB15z=cAqK$T%5ygn$(cf&KJ3x6p<B5w-rgcO{ z0-iw*8WiKPK@nssx`a+euv1Wx;XG!~MP!l12wJc_Up#<%j)V?q?lSfT?%#(q62X>0 z5op&5E;t>D^fPdWsR=tGnH&u-xOtVap%UjM5)i{6;=n>7F}@QK!Fnqqw8Bm5fD4!^ zuHiL<dPl?v;uz74Vj~@n8TVpi9C?K0TsFUmbjO1eN03WSTq>||v7qdE_+ie-L;#N( z<vboP^OZDc0goWg$Rr*>I)&d?u9mP@hQkpKyV2_O)agbeivZdO?SV~<9xU&4V!NFg zHu$3lEH1((e^laF2*Ug8baLDg{c`Fmmlr%sskJg(2#pMJ8UVGfNMw}G1Ab9`M59-X zP<?O?ZWep=@IJhBJK2l|wxM>cY3ieA#K^XX4=E+_@^yX@ose!wrQ~?fGjT-gEm!Ab zr36MfbT8c2dLzR2g~dKxVY|y!qZ-pet`A<H@)V0jbPfbUAxyUDL_Bz4_|Y+0^)_hO zIa6-~#a0=7QDOxnTx2E)Wu=7gMc{<3Vg5S5gwF;<^pMtFi4{xw?o^~0^@hUw?o{~1 z74gs!_2C{<NfbRRSTMxwFcwLozL06vyD%G_!y7M2G<dx$3L^|-3`;^Cm3d=krz1MT zvom;2zp{`iB~xoCPgI145bCWgV9yh7Ru!xOp`<QM!&LAS#r%6p>%>d9XRBi4Fb25j zWO!<NNQCQ7@y<-$Dc+VrxG3(3(Gc#4ZmjQf17d++1nQlbhsG;P$+L*x8RhU49aTXi zIipdulB-f#E8?n(MvsRu%U-GCJ*g6!i&E-|PJ0F=(^AEiE~&!YSdCZnh(Qa}VgT7V zt%AC<n!pXzIqehA1$h6DOFNC-d!n>XoUEMIRmB@s3m)7m#ZIc}abb+Jf#(fc3lTTy zu4&2GWGKlre5d_=2enOx>>q{$MZ^~8;ifnbBX2!Xv47LdAv!r-?|`yO`$y{?NP3la zj|z&J7y6J1s2<d|n$#m^Zc|x2nrd53U4lE5m@DWO*&;rJqU}&3Tik7I|8pC=|J+q9 z)t0ag*gYMNVm4r??pV%XS>q`FxR-I?FBK3tIvI(EC$YD0nTAT-^N;d&)VgD3081q^ z16V3SNW9E{X#XRa?dt}TETM^3+<&ldfHlJsDPRR<C02odL+7(|#tLs-$>7C7%-o0< z-4+T(ZQ~3B@nV?(^|qCARV?MS&G4^lrIHro?o4zT<E~=`{j_6c74JtU3oB(2oY8}h z)xN&E<5*vxwih9>1gU@7MNCGS@4c4IIjOyf`u~pACDJOdh$|jjX2l_<v6@W9tF-GL zzWFiBsJm9N6?e7nIz~Uv)pTaQ?mULSTGy)B-gxL?v<p0=V`76N8}+tTICI#QyK5E0 zM;s5!NlX^yaSWE%@&&x{ynG$$gf1b+YyoqO&Q+v=ti)f(Y7zd{YIzB_I@hrX{j6$* z0yfUB8N<SH{XU@+I7Up+j#?^Ncbvc<mzGMU({<Mg@uRhC@HFTK+<w9cb!wShyd>sK zFduY63Y#4FER*AoPitS!6Sx+%Z6Yj9+wwc5ZjDNa@|>U&A|QwuQ;1N2i5^EhC+tXK z>gFWQ`h&MiUlcl3Zx051Llcpq2tFip=uv6vZ3~v;Fp!kxS01-`o7rA7p15m>-I%z) zh^<6fti75qOYSv~{CTl<G;czpdhPHwZBAl-o%mw7yIy?3Z@x}^eG8~|^L6qtwA*fc z96kTscH?77-+7(mb1`hY$47LUYsShp+lDFhp#B4RuUFk<#dNDZu6TgoYL6-)z7SEU zWDDZEP14!H7b31hcO>TV^ktkc>s;>ejbOpGncsAsEn0M%Zo;~SeRmfLTQMtNE?Na) z=nDoSAsgIHcN1D0CvRDJu~vy>Rrt^F#3c0=@tKmC=WNA8tEJ{)G|t>2K2;L)OjSIz zsH%!Li6ezqgu67JB~4MgNgNdx!ti7yA_-gQA<K+N71}}%TPoWPHvymB@f0vs*xZsk z)3KE$tQVHxA>bPjQu;fGSqV2Oz3FU4zE*pOgV8bR$ewgg-W|6^-4MqG6-!#yA;flw zF}VaE%EmV<d&(&4W@RfGAKerS&-QTEb~Ht0ZcB9l1D7pTfqLh2@X5^v)p|#4_Iy4j z)dTv37wb9ZV6<~SU!YdSXO8fujjW7JOpXr$G$}i<1C+Lv;AMFE(%CUGF@0Sw;xERQ zX`xHX;Z{6Hi7~+=M%!fBLpwICqTMR?5!_g&4Ua;m-5%)}-qW{^r45fa5_cK-Hutt& zMxM<QZPFA;8j}80Y-LKDG=FZ4PLVS<SPCDvQ)Gn=l_I<od(Xr>@N#pChm?cb&XLHC zlp7p#=!VA}!fvBjDUOGEsik&g`it~tm^eWazZKq63gbr-I|Yo7Q^|7R=gPa5us<Y; zro#Qclu`QCuCa{o2GY$mD9J5oHSWzcCS70Kg?#X2O{3w$K>vVLPD2ty;ixKY#!(eG z%~I^m!6vi?ryJWT@J$AMumF##;*#AGY+`j+RusPO3W{=KCq{NTCnek)3?3bqZCd=c zYS&Av-<FLv&9odnhu5Sedj~D=h+*73ghuckwB92|aFy>aB*X{KsCkX<YsS!aPx^#P z4cx45p=B5|Hucvnv?8Oj+r*T?qId-eAG*TV9M+UF?ALA+r{D;70o*{}C5~S%;>}O| zs`s>w#Y8F9Z>6Vg4Ee%CGT18SJn=Y;&n%jy((Wi?<ym~JEzM7srXrq59@&4W?-A{e zP((xt`G;>9Wq0#bqm;+)=1E6M-G(zHE_o|wakX#5`4JbtO1C5Kb#BVr5&1f|<IQJR z)RVkl+dS2THsT=;JB7`Rv|CCgyc~x<pBArHS_0jnZV89|Bn}6aJ2{EH<yc;B+}?<H zLfjqnk3RCm9QoT~7LEd9VvgqJnc)6au2iwhPiha$L#||`RC*#a0m<A*uUyK2Ub~dQ zX6$LB&4pG;Hb<M#Hq1@Ht+S5fDpli{(6<ikogT!rzGd&mqdWGjmf`uSJ`Y_3yYV!y ztE%I}Bl>bVjTx5fbmp7Phf*sm+~)A{w;AIR)h6u3qvbL_v(bEE>{Op*hK#du3NQa1 z^9_Zffys%;#Qk0MTju7(Te%tWshe2V_K{P3AT?dBR7?0kYDs*bwcdt_9X!31oZ@4g z^f^)SF;2_|42AL9^F*n<0erI%ml3*uLumy+0=673iEnz=+aJTDG+e@$mCk_*q5Mps zrRComjtv_&{IKQDTFae3XxaT!XX}RTm+${+3x0muF2Vr{H#%Fow!XsMaGvkn+xkss z=i|}K4_|rg>Fu@dhZ+vSzT@0_IeBIB>Dgxw*0y^aF2NdYEw0YT{g>~)viqrOt;^GJ z6K!vCZM?kgvi8(t&up)4dZf`ow6n#v<+A^Z=jq+gRBKyb+UO$M-QwDO`2dbT|IBo4 z%S#$PM0;CYd!E`>yVv{NW3{QHwcBSJ8;NhSrLmdlmKN96%h4+@d-}0wx7W74ys?$& zwiZ{HT#M~QceJ>AFFP-1p4$C%wYKqK<0hgzZFCpWn{D(KqPuPMR-(7r=pLfC+gjod zqIX(!TW!<B*X|;^x5c$hZsEI$-qYgRd1Y_y_JL<+pF3FF6=>W`_&zm>#{EQJWJ}@! zq7T}W@DSc-EAc}__uI}#AJKkW+ySBoY-j%<(T8p4=n<laT3p?aCohj&nSJ_Tt*5W? zDA5;N)u5j85~7dU3;a^TFS8Zm<wOr}XmQ<gC0e`d(PtlfetT{AWW&3Ggh2>O*YYv< z+xYqr^I;orj4&Ss?|Hm(`Ph~7Pfyo+2O0t9N5GY?G{!t==i|&Lz?I8ll6lC^r<jNB zJi<I`=hMuOf-4u;4D(~)%H?sK`3dlwu57FA>3im}=eE~&jx<iPFbhHLbEjB1ZBJ>A z`5ADf>&BSJ!8cvrd!_5C*=G*cHb2@(Fi(Qt_LQ@B&&!|N{d~2yXS$JMA#E4d=UG^Q zptN;{`69S-ZkCv5!Ig_Y$2<?d`%1F5_a)EHK7X)w>r|t_LJ@*;a?Ua@fvas%W}yOM z`{hdQR?pMtpPjDl@HMI|V05+#D=e%w32Q895R|;nF+UHkH0uTC7wz#cF+beebS1R% zl>k9$Js)#F_^nqewYy*X?D^-XYqv!jLo5t82_r0wLXi8?dVu*68*hv;4}#x(#b3Mg zk!N>5SFPPL-WX?L0)lOXpJXKj#k`)k)pk!brdSBeX;o^s1RD_+qOw4lOtWwl!aYwr zYx^c^Q>SWk$=bcC#tcixAnm$xpmxW>XU;!2UAuX#ah!z{5ab#*PBNcu%H$Lary<yC zGRMl9raWRS#387iD#1b$!j3D>+HDU#v-{a<?WUndiiLF35%Vl8K)C&>y|w#%&&}2% z$7**RZ)8|mgmUlG+iDL@)gp7XSh{xK{Q440SxEMF$+47&^uW{6+Q9MJ$@y9)Uwg37 zD6mv)POx#7r4l6dvMRGsfuN2tRTh>ZD9yaWd=*^nl4~qz5Y(nQ$HI9C%CL8V`9*sU zmzW=RG*{kB9!_KMI+BkiKP0nP(p_eVg<%NlI55J(C<NP?39xbmidvO17J?Au3x0i^ z`2@Jyypt@1ASf616!S2+GNMG7N5PG@s?@eV)|h5~RN~~D%`iU(t_<MEnV$ex@;%9X z7Tn&kPO)^_e#jj2GvMk75n~|^L8(K6c@kW?t*4l$!IiSkGheXt4D&@hUt*pGS9)fS zdEOR(y}-O^kAIdqym~dAGV_X^SD7z^%O}6F!hDtEKWTcmYs9Z<c7Bfed2qDDljcqL z0`rUZ_?MU;c2YU5^u6>5aBa}eea!uKKE!+&9KHIgHFk}#Fls*_!2C$l0b?u#n}l%| zCYppv7D9GmeTs!J1Pt?6tzkaGLKFhJ-Bs(xG|j?Mds2-V7LGLu$5}YhB%EYn7J{1j zDHcvQ33Du*X%b>A#GCR+u#jvLQY@sKlA32>0fJid3=4}*NiDIEg@7x<>LEGic{?vK zFWUK8=6JMK(pfJvuYjvPr^>>z?SRG#^Hn=vW3JixIp*h^GPuCP#U|kr3x{25Q5#-* z-n}+x=RW3saJ33UEDSdZBP@(Uz@71`<$VWOIAYIYjCl|oW9}2?lj}J132=;uPnu8A zlgvZl$~Z8^JZw)V!aNF&@%9PhseOH#`B58h%rHM@Pv<!E6X0t9I?2LplW>ZK(-73A zm}B7#1f^;*=5aeuFi+Zfih0`3=b0~n%T;b<m@nG-67wv$dLb~++j)U`5gfk3RqGky zEDNP3q0B<1NvN{03_(8o>nqGx!IiVT#$2<-Z=7R(9$abC3(PNq<N5pv^ZEP|^TU|o zQJToxCLSrS4T7sx^ReKE02kv)bDC#}`LLajFdqfK<EaBz?;m>Zd~Nzf?aq^p04qnJ zC|Qp&4}z=1>NpD%5R|%2G7o{PJ#vbLaFY;WAqoKw*VVn|W8yRmM<FO>nqhtnTsb|* znV$exPR~i^v*37ceZrhmIK}+5J^mc?GvG?A#+b*!)zgq*A!$D##XJp;2jeHqxxIPj z3wEAiz6dT?tg*yA3$9cw$2<?NTp|VLMR29z&N9bLry9S^yaKLPtjfYN1WY+TVNN-& zFkb~%T4;^AW>0AS91G_msNLuS3m5GvU1EONZEFfI&30ZJv~wSGznu>;9|l)W!3gtF zI}b2FVozs`dC<<snNQgHB=ZosaSFt=V`GYW*d9N^JZk6D%#VUAeRqcWF>vJ!9A|#Q zp3X_;v*7ZOvwn*CX?y%R=4b3Y#yk$Lbj1YoB)Bphq?o7ee4hCNxY0f|8JS_eXy;4J zvv!_io(EShnF8}7xN_dlGRHsNrS|AD^NKy4D)VJ<^>(?!!YTwjK|E>B(XTPrz?Bno zj`?|TrQt3xzX-0Jm`ltLV_yHRr=nLM2t5B-?fB{1-noXio$m%v<RcnB=6-OcDTbI2 zgDW|YFdwz^0P`c@%BV8NJP5ATY@GQ7xH3pgG7o_(r+A8a7+g6u5#~{F+kJqAqxOVm zm>&c0c>KT<+b*AfYP#0>K;t;`6W~fgPcomC(xGee6!X*Im{htdEr86iat4Ze64qm^ z#G%~zl>h3BMxNhYo0+ZMb*hnIB?$$O<yYl-uoO#aNJ^iXXTAWADXOd1x<iJAMF>U{ zQi+$CXTfbH&ask*qL#Q(V5JDfR^qd);9s3<Dsh>m3M8e(Rp!g!YKd1^ScRaJc#XLR zZY%LQR?b7QmG}ZH7opfne2JCA9nB^7(!$rZK}d3m*L}?W;A)A7SQv(2l$b`M5$2=d z%4HT{e#Fklm<Pd?k$Rl@gq=?^4}mL}>lE{_#4ELp2O1IPQE;Q2)EB0i9|cz~*BR!= zz}1oKI14B28JuK3YtP^m^V9YW=9r&p${@x<9D;NOBx?628wr+@kgSt^s<!v^dWw}a z6wIJr)n`yswfoYId6pI+S^eN-?XKBIhLuGqmOp#EcIS!45-V9KM(a{5=9uTfl~yb; zFM=zrc$PW-fk#^_mRYDkuvfCm(lR7lsa9B7g(7#(#u{@CT)BImV}2gos0A&cUSNLF z&Mz@PjAdUXeQzh<GQgD~*T>usuJqX<=EF9=KEiwyTz&Emuy6!|QqVExK|3F3J^`*2 zXp(sd+&DdSF-|cL+j)d}6kMtBH1nh2sz*D+!Z8SUKUKNv8GrtK?Nq#WPoi<0l@n0Z z+s{cBW+AARKE=Xm2$*!fDlG@hv2v#AkQfVb2+E00Fi(Q3{&9+hGz9f3o@ZeJf^{Vc z|6o1C$|4l?32cdlECl7gm}8y?SNeW|c@bQ?B*mge<19<~*GX-oX_<velTc-0`8tWM zu(S#Z%OF?fWso(NG)PLnI>-EcQ#Kb^xClY%K$n;w?y_+&?TENG2(CCUKIVRK+x=>Y zm0|l4Bg{v^6*nuu{0O+*>g!|7gW$@wH_m**&L^3Nz?GU!F%N?)mq3Jh6kI9KH1nh2 z%6)By`7v;%YaVBQ!k+#~=Cj~R%bj9=8eBPLbIi}!<HwlC!Ij>ZV4k$cPcct}E9IPL zz5uQaDH-OA;7U6zG0%d_?XaF>p0}q{U|s}Q>UEYm{^4KsJeHYPz?E`VnJ?SZSz*3v z=WEP0J3q(#Jh*N2xxmUrC`yelF+Ys$KSmEC55n8ccL#7I{(;)&Lk%BuKe*DfhL{h7 ztFF`t3#0Z70?d!tGZ<qYv}Z8Re8Qf=`Xmb>dj?a?!}bg!%%k=UrkNkLXV92o;TQzv zqCC$0gq@#cK5Nh56!X*I%E_N&eg<5<FU44hLr{8Gf_V}gOQBb-4L2zk(h%ffr7_QZ z!Ok<x7s1uL*b)m_2v`KZYVAwNv5<#g8v+Zg6ro7Ik67woKg$yS0c_iCsZnO70!6vb ztIU_dmFsqe`Kmqs8gmU?X{mF}&x0Gin_Pzr%rDycCFX~FZ1KIc8}8bmo%@*k!Huhg z_SXzCAGY%m=A+<By#maSfUCFXF&2UlR0m|7g$W4CbvVg91g<&_Q!Iob-1qd}tNSCh z=~ykXP`f{~9$_g8NgnkY)69>8E3G%f{1~`W>*LH%*yEpMJ`1k;E2mgE-6YJhaK@fe zjCmYfInN2^NpPiIQ_R!gO3mh(FMuoesSNW)d;BHlS#b42$+3`!pfp8+c@bPG=vn3^ zaHUDh%qzC|>s98<;K~KE!h986EzlYZ8U*$HpJU-X1a*|Tz`{icN>94P{4lnFD#M<) zm+uUA?qlu;SE@F|eAv!Mn2*|dfcX({wV-1x1R*E|8fQKMuC(<e^N^iSF%R2$gn1Nv z?^DUE4~{)QTRVBCc6Y2X&B{?IayMF^VSWr;DbaD}Cv5Q>Cz;RM`6=e7!Ikbi$NUVq za`t1)<9424o&;A~BE>unu5|Z#<_qA;9Vx?n5nMTyOU$$2N_}(8^Y-`!=0$L&JZG7g zz?J({nRx|VDQA`WGPu${E6i8HjdBX-Wqpmg2CkIz9P{&1e7+qpzi3bY67$0w)$`u) z(kAF@gW$?l?_=%<SL!>&d>C9E07qCDg`iw}0p>@*jfzo0$CwB0e4P0NxY9tA%tPRE z$8Ah858LBMm`CmLr<orGS1LBc{Ft2|XMO@)ZlLv(%xA%s6MTyKX?r?z%+J{4$C$^# zm3k$ZCnbKM*0aBnVx9(<%hQ-=zF<#3!+a53sqYf=EVy!Ba?JB~USM7XS1z!#%uC=( z`OC~J;7Yz#=F8yfn7G2iDg@<9T4S!+6FSHIygi}y3oKl;Cv=JVVQlzUO61+dcL8wq z2IOPG4?!*J5DUW)l(raQK5FLy=11&&jCl}TX}fXe6X41@o@5@f^C{+GJC87r+W9o| zqjo;S{1~`$3XU^BVUK^3`K+CvVt(3|&iWklGdA9cF^}8RNia{^d5U@3&gYpg*m;Ke zqMa`>&)Rv8c^+K3HVVv(;L0_BmU#(WX}2=-3b@kas?3+cRnKOHg;fYj$68~q*%La) z{JcH>1?CsQl@4@?`QgoKLD#+X(#y3$aHXI==6*XLVm@r=Bg{wbJiz>josTgOf-8gl zIP(c`#aozU9<uW(=3#K<ghiM~!IgSVGe2sNKg0YOxN<=rXMVz-&PnF8;L6?k6!X*I zO8d_-KLf7LYBpl5#G$Aj+j@ePBow7jq?o6{mCiWNd;wgkbB6gMxKh?7=2?6E9P>Q5 zl5c@|5nMSpXPM)DGTTMKyaKMYX_fghxKhp)=Bwc9#j(bMW>4rG^YeCof%!#nr2?0j zAI2+QO2*zTd>^oLA9Fvr+_~0=m=A+14LZVn6kMrrfcX({rL&JQ58Bdij5D9Gr$5O& z1g_L;ig_4ZsaJ$~6kN%7n)y+1<wVXfKL#$>w{e{L32?>3JIQ<&+%}PNij~t))XRYR z89R?LkK1{Ic@kWyaf*2wT&~&rJo5!`r6n@V7r~X9Eiuo6E9J~F&x0#xvcSA(kAIeV z30zsRFEg*$<5!t4+xZIfRd6NWHRhU~pJRR=TyBTP1?CsQmHJ*{et4@bzL(x|yfz4~ zw6l-7A6#kAA?CyO_#@0mZG1hz{D_S=#+V1~>5ns?09Wp-lgvYQKE*r?uAIjR^C-AF zqdU#QQ3y%{%`iU(Zglknwe5!+$C;l1S3Sa$EX+bsTIdw>({?_`{0z8q?ZueK!Id#3 z!8{4B4E8DJX?y&6<_q9T#WKtn!R36{mzZbm>F1c|ZSflg=0$Mj%$#Lj0$0vJnRx|V zDNmL8GPv5HD=e%+P%i=I8o1I$&oMs_u3iGnFWUJf=7;e{uX4h?+xR8`uB7i{?&mjv zt-X#z%!k31a*i+`1vh#Sz2h8Ue#Fklm<Pd?hmiGg7A7Dl6`N!p0#_<9#XM|}A7LH^ zSI*cp^P_e?!~7Vy`k;TDg%eG}Nfu`9DV<_|8eHiUbIi}!d5n1+T%AEqu#kkHPUWXq zNJCKCVxIYeooARYf-6_k67#G*evWzG#@7qXi}rNRGRHgg%2n1VGq2crmHDzgofYP* z;7Vs)W3GWKouzS(h4T=U;o}1Hi{MHxy~O<Rc3VSu>BaVIgW$#~<0UiZetY~O=ELCj zCGHWHMj<KvF2MYVosTgOf-6NGXFdV0UI)xWwsh8~n1{iYrid_)g4@;=r&&1)Mag-F z`7v-M=i|&zfGfS|B=cE&I;WVQw(~jWXTX)-8)F`~^91uGxRP&*dD@=-Jo5!`W$eu` zUj$cr*Anxro#&Y6!IgF>FfW3uYj|f_C_#`bcCF03V&gA3d!%<!uB}k4SF~U4y#1#w z=Q}sFHqLJkZMd)X1@X}cYeT9-u<tr|DsN=D1iXe#*Y@7%CILI{)B&V}Fg8`FxQj4W z)~tO_^fo~caZIt=_SkGBj)!iWAH113yfC$Wwi3oQsSa~g%WL?kgc|!MijA*IsAb$m z7@w8E+wWJcx8H9ejPFXQY2Qj1AC|B^e(oWTPfJ)k&}g^k9mManrGD)$!h7vcXm=C7 zrz!P&iQm`MF833Ek^SEP0O1F1cTNw{efB&bBD~+;EPaIg?GE1n;RE*A2MOaV6RLao z2w{9?LiJ4^C5-P(sQ4v>@u3OZ*?%c<d}%^GaW5w<J~g3o?*<aYrzX^yfQFA1KNR&e z;d2vojQHGyZBQFwMSO6=zR4-TlKAF?a{Z4n7vG$))nuF%@zn{NGRcbg?u6QeQ!I!N zPpH+5upquXVXNjeE8^P|w#v+~BECLhyCRRXBECOiJLV)S`Ufba&Bv!$5FemW=NaZ$ z5MQ8B?gKIA;tLe&iBGVQY!Xr|h)+<+P9VNOL8nW6fkI6w!-Dt(h1pus+HK*+5)0xR z6t*ij$BOt0g<6dQ3*svjwqfclE8;s8w#F*6B0fZ+Iu=zH#D^%<0cC{+@gWM^T6|-T zCGjZ=Tba+XB0ff;j&T=Q5MQHE_Xu2KL41xv?O)zjzFHutCHAo(zDJ>6EchS=Uo246 z)*oR(e2_x9Uj>+p4^qhd1?NrjZg%y)^n!D{{Ni#`+?(ayE-yH@$*=Ui;Jj0LCE^9= lZOXp=7o4}sW4&FzHb>=sMd#J-y+3OSZP?I?$FY`{{|jEyaMb_+ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py deleted file mode 100644 index a277af282..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +++ /dev/null @@ -1,799 +0,0 @@ - -from __future__ import annotations - -from typing import TypedDict - -class SPDXLicense(TypedDict): - id: str - deprecated: bool - -class SPDXException(TypedDict): - id: str - deprecated: bool - - -VERSION = '3.27.0' - -LICENSES: dict[str, SPDXLicense] = { - '0bsd': {'id': '0BSD', 'deprecated': False}, - '3d-slicer-1.0': {'id': '3D-Slicer-1.0', 'deprecated': False}, - 'aal': {'id': 'AAL', 'deprecated': False}, - 'abstyles': {'id': 'Abstyles', 'deprecated': False}, - 'adacore-doc': {'id': 'AdaCore-doc', 'deprecated': False}, - 'adobe-2006': {'id': 'Adobe-2006', 'deprecated': False}, - 'adobe-display-postscript': {'id': 'Adobe-Display-PostScript', 'deprecated': False}, - 'adobe-glyph': {'id': 'Adobe-Glyph', 'deprecated': False}, - 'adobe-utopia': {'id': 'Adobe-Utopia', 'deprecated': False}, - 'adsl': {'id': 'ADSL', 'deprecated': False}, - 'afl-1.1': {'id': 'AFL-1.1', 'deprecated': False}, - 'afl-1.2': {'id': 'AFL-1.2', 'deprecated': False}, - 'afl-2.0': {'id': 'AFL-2.0', 'deprecated': False}, - 'afl-2.1': {'id': 'AFL-2.1', 'deprecated': False}, - 'afl-3.0': {'id': 'AFL-3.0', 'deprecated': False}, - 'afmparse': {'id': 'Afmparse', 'deprecated': False}, - 'agpl-1.0': {'id': 'AGPL-1.0', 'deprecated': True}, - 'agpl-1.0-only': {'id': 'AGPL-1.0-only', 'deprecated': False}, - 'agpl-1.0-or-later': {'id': 'AGPL-1.0-or-later', 'deprecated': False}, - 'agpl-3.0': {'id': 'AGPL-3.0', 'deprecated': True}, - 'agpl-3.0-only': {'id': 'AGPL-3.0-only', 'deprecated': False}, - 'agpl-3.0-or-later': {'id': 'AGPL-3.0-or-later', 'deprecated': False}, - 'aladdin': {'id': 'Aladdin', 'deprecated': False}, - 'amd-newlib': {'id': 'AMD-newlib', 'deprecated': False}, - 'amdplpa': {'id': 'AMDPLPA', 'deprecated': False}, - 'aml': {'id': 'AML', 'deprecated': False}, - 'aml-glslang': {'id': 'AML-glslang', 'deprecated': False}, - 'ampas': {'id': 'AMPAS', 'deprecated': False}, - 'antlr-pd': {'id': 'ANTLR-PD', 'deprecated': False}, - 'antlr-pd-fallback': {'id': 'ANTLR-PD-fallback', 'deprecated': False}, - 'any-osi': {'id': 'any-OSI', 'deprecated': False}, - 'any-osi-perl-modules': {'id': 'any-OSI-perl-modules', 'deprecated': False}, - 'apache-1.0': {'id': 'Apache-1.0', 'deprecated': False}, - 'apache-1.1': {'id': 'Apache-1.1', 'deprecated': False}, - 'apache-2.0': {'id': 'Apache-2.0', 'deprecated': False}, - 'apafml': {'id': 'APAFML', 'deprecated': False}, - 'apl-1.0': {'id': 'APL-1.0', 'deprecated': False}, - 'app-s2p': {'id': 'App-s2p', 'deprecated': False}, - 'apsl-1.0': {'id': 'APSL-1.0', 'deprecated': False}, - 'apsl-1.1': {'id': 'APSL-1.1', 'deprecated': False}, - 'apsl-1.2': {'id': 'APSL-1.2', 'deprecated': False}, - 'apsl-2.0': {'id': 'APSL-2.0', 'deprecated': False}, - 'arphic-1999': {'id': 'Arphic-1999', 'deprecated': False}, - 'artistic-1.0': {'id': 'Artistic-1.0', 'deprecated': False}, - 'artistic-1.0-cl8': {'id': 'Artistic-1.0-cl8', 'deprecated': False}, - 'artistic-1.0-perl': {'id': 'Artistic-1.0-Perl', 'deprecated': False}, - 'artistic-2.0': {'id': 'Artistic-2.0', 'deprecated': False}, - 'artistic-dist': {'id': 'Artistic-dist', 'deprecated': False}, - 'aspell-ru': {'id': 'Aspell-RU', 'deprecated': False}, - 'aswf-digital-assets-1.0': {'id': 'ASWF-Digital-Assets-1.0', 'deprecated': False}, - 'aswf-digital-assets-1.1': {'id': 'ASWF-Digital-Assets-1.1', 'deprecated': False}, - 'baekmuk': {'id': 'Baekmuk', 'deprecated': False}, - 'bahyph': {'id': 'Bahyph', 'deprecated': False}, - 'barr': {'id': 'Barr', 'deprecated': False}, - 'bcrypt-solar-designer': {'id': 'bcrypt-Solar-Designer', 'deprecated': False}, - 'beerware': {'id': 'Beerware', 'deprecated': False}, - 'bitstream-charter': {'id': 'Bitstream-Charter', 'deprecated': False}, - 'bitstream-vera': {'id': 'Bitstream-Vera', 'deprecated': False}, - 'bittorrent-1.0': {'id': 'BitTorrent-1.0', 'deprecated': False}, - 'bittorrent-1.1': {'id': 'BitTorrent-1.1', 'deprecated': False}, - 'blessing': {'id': 'blessing', 'deprecated': False}, - 'blueoak-1.0.0': {'id': 'BlueOak-1.0.0', 'deprecated': False}, - 'boehm-gc': {'id': 'Boehm-GC', 'deprecated': False}, - 'boehm-gc-without-fee': {'id': 'Boehm-GC-without-fee', 'deprecated': False}, - 'borceux': {'id': 'Borceux', 'deprecated': False}, - 'brian-gladman-2-clause': {'id': 'Brian-Gladman-2-Clause', 'deprecated': False}, - 'brian-gladman-3-clause': {'id': 'Brian-Gladman-3-Clause', 'deprecated': False}, - 'bsd-1-clause': {'id': 'BSD-1-Clause', 'deprecated': False}, - 'bsd-2-clause': {'id': 'BSD-2-Clause', 'deprecated': False}, - 'bsd-2-clause-darwin': {'id': 'BSD-2-Clause-Darwin', 'deprecated': False}, - 'bsd-2-clause-first-lines': {'id': 'BSD-2-Clause-first-lines', 'deprecated': False}, - 'bsd-2-clause-freebsd': {'id': 'BSD-2-Clause-FreeBSD', 'deprecated': True}, - 'bsd-2-clause-netbsd': {'id': 'BSD-2-Clause-NetBSD', 'deprecated': True}, - 'bsd-2-clause-patent': {'id': 'BSD-2-Clause-Patent', 'deprecated': False}, - 'bsd-2-clause-pkgconf-disclaimer': {'id': 'BSD-2-Clause-pkgconf-disclaimer', 'deprecated': False}, - 'bsd-2-clause-views': {'id': 'BSD-2-Clause-Views', 'deprecated': False}, - 'bsd-3-clause': {'id': 'BSD-3-Clause', 'deprecated': False}, - 'bsd-3-clause-acpica': {'id': 'BSD-3-Clause-acpica', 'deprecated': False}, - 'bsd-3-clause-attribution': {'id': 'BSD-3-Clause-Attribution', 'deprecated': False}, - 'bsd-3-clause-clear': {'id': 'BSD-3-Clause-Clear', 'deprecated': False}, - 'bsd-3-clause-flex': {'id': 'BSD-3-Clause-flex', 'deprecated': False}, - 'bsd-3-clause-hp': {'id': 'BSD-3-Clause-HP', 'deprecated': False}, - 'bsd-3-clause-lbnl': {'id': 'BSD-3-Clause-LBNL', 'deprecated': False}, - 'bsd-3-clause-modification': {'id': 'BSD-3-Clause-Modification', 'deprecated': False}, - 'bsd-3-clause-no-military-license': {'id': 'BSD-3-Clause-No-Military-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license': {'id': 'BSD-3-Clause-No-Nuclear-License', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-license-2014': {'id': 'BSD-3-Clause-No-Nuclear-License-2014', 'deprecated': False}, - 'bsd-3-clause-no-nuclear-warranty': {'id': 'BSD-3-Clause-No-Nuclear-Warranty', 'deprecated': False}, - 'bsd-3-clause-open-mpi': {'id': 'BSD-3-Clause-Open-MPI', 'deprecated': False}, - 'bsd-3-clause-sun': {'id': 'BSD-3-Clause-Sun', 'deprecated': False}, - 'bsd-4-clause': {'id': 'BSD-4-Clause', 'deprecated': False}, - 'bsd-4-clause-shortened': {'id': 'BSD-4-Clause-Shortened', 'deprecated': False}, - 'bsd-4-clause-uc': {'id': 'BSD-4-Clause-UC', 'deprecated': False}, - 'bsd-4.3reno': {'id': 'BSD-4.3RENO', 'deprecated': False}, - 'bsd-4.3tahoe': {'id': 'BSD-4.3TAHOE', 'deprecated': False}, - 'bsd-advertising-acknowledgement': {'id': 'BSD-Advertising-Acknowledgement', 'deprecated': False}, - 'bsd-attribution-hpnd-disclaimer': {'id': 'BSD-Attribution-HPND-disclaimer', 'deprecated': False}, - 'bsd-inferno-nettverk': {'id': 'BSD-Inferno-Nettverk', 'deprecated': False}, - 'bsd-protection': {'id': 'BSD-Protection', 'deprecated': False}, - 'bsd-source-beginning-file': {'id': 'BSD-Source-beginning-file', 'deprecated': False}, - 'bsd-source-code': {'id': 'BSD-Source-Code', 'deprecated': False}, - 'bsd-systemics': {'id': 'BSD-Systemics', 'deprecated': False}, - 'bsd-systemics-w3works': {'id': 'BSD-Systemics-W3Works', 'deprecated': False}, - 'bsl-1.0': {'id': 'BSL-1.0', 'deprecated': False}, - 'busl-1.1': {'id': 'BUSL-1.1', 'deprecated': False}, - 'bzip2-1.0.5': {'id': 'bzip2-1.0.5', 'deprecated': True}, - 'bzip2-1.0.6': {'id': 'bzip2-1.0.6', 'deprecated': False}, - 'c-uda-1.0': {'id': 'C-UDA-1.0', 'deprecated': False}, - 'cal-1.0': {'id': 'CAL-1.0', 'deprecated': False}, - 'cal-1.0-combined-work-exception': {'id': 'CAL-1.0-Combined-Work-Exception', 'deprecated': False}, - 'caldera': {'id': 'Caldera', 'deprecated': False}, - 'caldera-no-preamble': {'id': 'Caldera-no-preamble', 'deprecated': False}, - 'catharon': {'id': 'Catharon', 'deprecated': False}, - 'catosl-1.1': {'id': 'CATOSL-1.1', 'deprecated': False}, - 'cc-by-1.0': {'id': 'CC-BY-1.0', 'deprecated': False}, - 'cc-by-2.0': {'id': 'CC-BY-2.0', 'deprecated': False}, - 'cc-by-2.5': {'id': 'CC-BY-2.5', 'deprecated': False}, - 'cc-by-2.5-au': {'id': 'CC-BY-2.5-AU', 'deprecated': False}, - 'cc-by-3.0': {'id': 'CC-BY-3.0', 'deprecated': False}, - 'cc-by-3.0-at': {'id': 'CC-BY-3.0-AT', 'deprecated': False}, - 'cc-by-3.0-au': {'id': 'CC-BY-3.0-AU', 'deprecated': False}, - 'cc-by-3.0-de': {'id': 'CC-BY-3.0-DE', 'deprecated': False}, - 'cc-by-3.0-igo': {'id': 'CC-BY-3.0-IGO', 'deprecated': False}, - 'cc-by-3.0-nl': {'id': 'CC-BY-3.0-NL', 'deprecated': False}, - 'cc-by-3.0-us': {'id': 'CC-BY-3.0-US', 'deprecated': False}, - 'cc-by-4.0': {'id': 'CC-BY-4.0', 'deprecated': False}, - 'cc-by-nc-1.0': {'id': 'CC-BY-NC-1.0', 'deprecated': False}, - 'cc-by-nc-2.0': {'id': 'CC-BY-NC-2.0', 'deprecated': False}, - 'cc-by-nc-2.5': {'id': 'CC-BY-NC-2.5', 'deprecated': False}, - 'cc-by-nc-3.0': {'id': 'CC-BY-NC-3.0', 'deprecated': False}, - 'cc-by-nc-3.0-de': {'id': 'CC-BY-NC-3.0-DE', 'deprecated': False}, - 'cc-by-nc-4.0': {'id': 'CC-BY-NC-4.0', 'deprecated': False}, - 'cc-by-nc-nd-1.0': {'id': 'CC-BY-NC-ND-1.0', 'deprecated': False}, - 'cc-by-nc-nd-2.0': {'id': 'CC-BY-NC-ND-2.0', 'deprecated': False}, - 'cc-by-nc-nd-2.5': {'id': 'CC-BY-NC-ND-2.5', 'deprecated': False}, - 'cc-by-nc-nd-3.0': {'id': 'CC-BY-NC-ND-3.0', 'deprecated': False}, - 'cc-by-nc-nd-3.0-de': {'id': 'CC-BY-NC-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nc-nd-3.0-igo': {'id': 'CC-BY-NC-ND-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-nd-4.0': {'id': 'CC-BY-NC-ND-4.0', 'deprecated': False}, - 'cc-by-nc-sa-1.0': {'id': 'CC-BY-NC-SA-1.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0': {'id': 'CC-BY-NC-SA-2.0', 'deprecated': False}, - 'cc-by-nc-sa-2.0-de': {'id': 'CC-BY-NC-SA-2.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-2.0-fr': {'id': 'CC-BY-NC-SA-2.0-FR', 'deprecated': False}, - 'cc-by-nc-sa-2.0-uk': {'id': 'CC-BY-NC-SA-2.0-UK', 'deprecated': False}, - 'cc-by-nc-sa-2.5': {'id': 'CC-BY-NC-SA-2.5', 'deprecated': False}, - 'cc-by-nc-sa-3.0': {'id': 'CC-BY-NC-SA-3.0', 'deprecated': False}, - 'cc-by-nc-sa-3.0-de': {'id': 'CC-BY-NC-SA-3.0-DE', 'deprecated': False}, - 'cc-by-nc-sa-3.0-igo': {'id': 'CC-BY-NC-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-nc-sa-4.0': {'id': 'CC-BY-NC-SA-4.0', 'deprecated': False}, - 'cc-by-nd-1.0': {'id': 'CC-BY-ND-1.0', 'deprecated': False}, - 'cc-by-nd-2.0': {'id': 'CC-BY-ND-2.0', 'deprecated': False}, - 'cc-by-nd-2.5': {'id': 'CC-BY-ND-2.5', 'deprecated': False}, - 'cc-by-nd-3.0': {'id': 'CC-BY-ND-3.0', 'deprecated': False}, - 'cc-by-nd-3.0-de': {'id': 'CC-BY-ND-3.0-DE', 'deprecated': False}, - 'cc-by-nd-4.0': {'id': 'CC-BY-ND-4.0', 'deprecated': False}, - 'cc-by-sa-1.0': {'id': 'CC-BY-SA-1.0', 'deprecated': False}, - 'cc-by-sa-2.0': {'id': 'CC-BY-SA-2.0', 'deprecated': False}, - 'cc-by-sa-2.0-uk': {'id': 'CC-BY-SA-2.0-UK', 'deprecated': False}, - 'cc-by-sa-2.1-jp': {'id': 'CC-BY-SA-2.1-JP', 'deprecated': False}, - 'cc-by-sa-2.5': {'id': 'CC-BY-SA-2.5', 'deprecated': False}, - 'cc-by-sa-3.0': {'id': 'CC-BY-SA-3.0', 'deprecated': False}, - 'cc-by-sa-3.0-at': {'id': 'CC-BY-SA-3.0-AT', 'deprecated': False}, - 'cc-by-sa-3.0-de': {'id': 'CC-BY-SA-3.0-DE', 'deprecated': False}, - 'cc-by-sa-3.0-igo': {'id': 'CC-BY-SA-3.0-IGO', 'deprecated': False}, - 'cc-by-sa-4.0': {'id': 'CC-BY-SA-4.0', 'deprecated': False}, - 'cc-pddc': {'id': 'CC-PDDC', 'deprecated': False}, - 'cc-pdm-1.0': {'id': 'CC-PDM-1.0', 'deprecated': False}, - 'cc-sa-1.0': {'id': 'CC-SA-1.0', 'deprecated': False}, - 'cc0-1.0': {'id': 'CC0-1.0', 'deprecated': False}, - 'cddl-1.0': {'id': 'CDDL-1.0', 'deprecated': False}, - 'cddl-1.1': {'id': 'CDDL-1.1', 'deprecated': False}, - 'cdl-1.0': {'id': 'CDL-1.0', 'deprecated': False}, - 'cdla-permissive-1.0': {'id': 'CDLA-Permissive-1.0', 'deprecated': False}, - 'cdla-permissive-2.0': {'id': 'CDLA-Permissive-2.0', 'deprecated': False}, - 'cdla-sharing-1.0': {'id': 'CDLA-Sharing-1.0', 'deprecated': False}, - 'cecill-1.0': {'id': 'CECILL-1.0', 'deprecated': False}, - 'cecill-1.1': {'id': 'CECILL-1.1', 'deprecated': False}, - 'cecill-2.0': {'id': 'CECILL-2.0', 'deprecated': False}, - 'cecill-2.1': {'id': 'CECILL-2.1', 'deprecated': False}, - 'cecill-b': {'id': 'CECILL-B', 'deprecated': False}, - 'cecill-c': {'id': 'CECILL-C', 'deprecated': False}, - 'cern-ohl-1.1': {'id': 'CERN-OHL-1.1', 'deprecated': False}, - 'cern-ohl-1.2': {'id': 'CERN-OHL-1.2', 'deprecated': False}, - 'cern-ohl-p-2.0': {'id': 'CERN-OHL-P-2.0', 'deprecated': False}, - 'cern-ohl-s-2.0': {'id': 'CERN-OHL-S-2.0', 'deprecated': False}, - 'cern-ohl-w-2.0': {'id': 'CERN-OHL-W-2.0', 'deprecated': False}, - 'cfitsio': {'id': 'CFITSIO', 'deprecated': False}, - 'check-cvs': {'id': 'check-cvs', 'deprecated': False}, - 'checkmk': {'id': 'checkmk', 'deprecated': False}, - 'clartistic': {'id': 'ClArtistic', 'deprecated': False}, - 'clips': {'id': 'Clips', 'deprecated': False}, - 'cmu-mach': {'id': 'CMU-Mach', 'deprecated': False}, - 'cmu-mach-nodoc': {'id': 'CMU-Mach-nodoc', 'deprecated': False}, - 'cnri-jython': {'id': 'CNRI-Jython', 'deprecated': False}, - 'cnri-python': {'id': 'CNRI-Python', 'deprecated': False}, - 'cnri-python-gpl-compatible': {'id': 'CNRI-Python-GPL-Compatible', 'deprecated': False}, - 'coil-1.0': {'id': 'COIL-1.0', 'deprecated': False}, - 'community-spec-1.0': {'id': 'Community-Spec-1.0', 'deprecated': False}, - 'condor-1.1': {'id': 'Condor-1.1', 'deprecated': False}, - 'copyleft-next-0.3.0': {'id': 'copyleft-next-0.3.0', 'deprecated': False}, - 'copyleft-next-0.3.1': {'id': 'copyleft-next-0.3.1', 'deprecated': False}, - 'cornell-lossless-jpeg': {'id': 'Cornell-Lossless-JPEG', 'deprecated': False}, - 'cpal-1.0': {'id': 'CPAL-1.0', 'deprecated': False}, - 'cpl-1.0': {'id': 'CPL-1.0', 'deprecated': False}, - 'cpol-1.02': {'id': 'CPOL-1.02', 'deprecated': False}, - 'cronyx': {'id': 'Cronyx', 'deprecated': False}, - 'crossword': {'id': 'Crossword', 'deprecated': False}, - 'cryptoswift': {'id': 'CryptoSwift', 'deprecated': False}, - 'crystalstacker': {'id': 'CrystalStacker', 'deprecated': False}, - 'cua-opl-1.0': {'id': 'CUA-OPL-1.0', 'deprecated': False}, - 'cube': {'id': 'Cube', 'deprecated': False}, - 'curl': {'id': 'curl', 'deprecated': False}, - 'cve-tou': {'id': 'cve-tou', 'deprecated': False}, - 'd-fsl-1.0': {'id': 'D-FSL-1.0', 'deprecated': False}, - 'dec-3-clause': {'id': 'DEC-3-Clause', 'deprecated': False}, - 'diffmark': {'id': 'diffmark', 'deprecated': False}, - 'dl-de-by-2.0': {'id': 'DL-DE-BY-2.0', 'deprecated': False}, - 'dl-de-zero-2.0': {'id': 'DL-DE-ZERO-2.0', 'deprecated': False}, - 'doc': {'id': 'DOC', 'deprecated': False}, - 'docbook-dtd': {'id': 'DocBook-DTD', 'deprecated': False}, - 'docbook-schema': {'id': 'DocBook-Schema', 'deprecated': False}, - 'docbook-stylesheet': {'id': 'DocBook-Stylesheet', 'deprecated': False}, - 'docbook-xml': {'id': 'DocBook-XML', 'deprecated': False}, - 'dotseqn': {'id': 'Dotseqn', 'deprecated': False}, - 'drl-1.0': {'id': 'DRL-1.0', 'deprecated': False}, - 'drl-1.1': {'id': 'DRL-1.1', 'deprecated': False}, - 'dsdp': {'id': 'DSDP', 'deprecated': False}, - 'dtoa': {'id': 'dtoa', 'deprecated': False}, - 'dvipdfm': {'id': 'dvipdfm', 'deprecated': False}, - 'ecl-1.0': {'id': 'ECL-1.0', 'deprecated': False}, - 'ecl-2.0': {'id': 'ECL-2.0', 'deprecated': False}, - 'ecos-2.0': {'id': 'eCos-2.0', 'deprecated': True}, - 'efl-1.0': {'id': 'EFL-1.0', 'deprecated': False}, - 'efl-2.0': {'id': 'EFL-2.0', 'deprecated': False}, - 'egenix': {'id': 'eGenix', 'deprecated': False}, - 'elastic-2.0': {'id': 'Elastic-2.0', 'deprecated': False}, - 'entessa': {'id': 'Entessa', 'deprecated': False}, - 'epics': {'id': 'EPICS', 'deprecated': False}, - 'epl-1.0': {'id': 'EPL-1.0', 'deprecated': False}, - 'epl-2.0': {'id': 'EPL-2.0', 'deprecated': False}, - 'erlpl-1.1': {'id': 'ErlPL-1.1', 'deprecated': False}, - 'etalab-2.0': {'id': 'etalab-2.0', 'deprecated': False}, - 'eudatagrid': {'id': 'EUDatagrid', 'deprecated': False}, - 'eupl-1.0': {'id': 'EUPL-1.0', 'deprecated': False}, - 'eupl-1.1': {'id': 'EUPL-1.1', 'deprecated': False}, - 'eupl-1.2': {'id': 'EUPL-1.2', 'deprecated': False}, - 'eurosym': {'id': 'Eurosym', 'deprecated': False}, - 'fair': {'id': 'Fair', 'deprecated': False}, - 'fbm': {'id': 'FBM', 'deprecated': False}, - 'fdk-aac': {'id': 'FDK-AAC', 'deprecated': False}, - 'ferguson-twofish': {'id': 'Ferguson-Twofish', 'deprecated': False}, - 'frameworx-1.0': {'id': 'Frameworx-1.0', 'deprecated': False}, - 'freebsd-doc': {'id': 'FreeBSD-DOC', 'deprecated': False}, - 'freeimage': {'id': 'FreeImage', 'deprecated': False}, - 'fsfap': {'id': 'FSFAP', 'deprecated': False}, - 'fsfap-no-warranty-disclaimer': {'id': 'FSFAP-no-warranty-disclaimer', 'deprecated': False}, - 'fsful': {'id': 'FSFUL', 'deprecated': False}, - 'fsfullr': {'id': 'FSFULLR', 'deprecated': False}, - 'fsfullrsd': {'id': 'FSFULLRSD', 'deprecated': False}, - 'fsfullrwd': {'id': 'FSFULLRWD', 'deprecated': False}, - 'fsl-1.1-alv2': {'id': 'FSL-1.1-ALv2', 'deprecated': False}, - 'fsl-1.1-mit': {'id': 'FSL-1.1-MIT', 'deprecated': False}, - 'ftl': {'id': 'FTL', 'deprecated': False}, - 'furuseth': {'id': 'Furuseth', 'deprecated': False}, - 'fwlw': {'id': 'fwlw', 'deprecated': False}, - 'game-programming-gems': {'id': 'Game-Programming-Gems', 'deprecated': False}, - 'gcr-docs': {'id': 'GCR-docs', 'deprecated': False}, - 'gd': {'id': 'GD', 'deprecated': False}, - 'generic-xts': {'id': 'generic-xts', 'deprecated': False}, - 'gfdl-1.1': {'id': 'GFDL-1.1', 'deprecated': True}, - 'gfdl-1.1-invariants-only': {'id': 'GFDL-1.1-invariants-only', 'deprecated': False}, - 'gfdl-1.1-invariants-or-later': {'id': 'GFDL-1.1-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-no-invariants-only': {'id': 'GFDL-1.1-no-invariants-only', 'deprecated': False}, - 'gfdl-1.1-no-invariants-or-later': {'id': 'GFDL-1.1-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.1-only': {'id': 'GFDL-1.1-only', 'deprecated': False}, - 'gfdl-1.1-or-later': {'id': 'GFDL-1.1-or-later', 'deprecated': False}, - 'gfdl-1.2': {'id': 'GFDL-1.2', 'deprecated': True}, - 'gfdl-1.2-invariants-only': {'id': 'GFDL-1.2-invariants-only', 'deprecated': False}, - 'gfdl-1.2-invariants-or-later': {'id': 'GFDL-1.2-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-no-invariants-only': {'id': 'GFDL-1.2-no-invariants-only', 'deprecated': False}, - 'gfdl-1.2-no-invariants-or-later': {'id': 'GFDL-1.2-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.2-only': {'id': 'GFDL-1.2-only', 'deprecated': False}, - 'gfdl-1.2-or-later': {'id': 'GFDL-1.2-or-later', 'deprecated': False}, - 'gfdl-1.3': {'id': 'GFDL-1.3', 'deprecated': True}, - 'gfdl-1.3-invariants-only': {'id': 'GFDL-1.3-invariants-only', 'deprecated': False}, - 'gfdl-1.3-invariants-or-later': {'id': 'GFDL-1.3-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-no-invariants-only': {'id': 'GFDL-1.3-no-invariants-only', 'deprecated': False}, - 'gfdl-1.3-no-invariants-or-later': {'id': 'GFDL-1.3-no-invariants-or-later', 'deprecated': False}, - 'gfdl-1.3-only': {'id': 'GFDL-1.3-only', 'deprecated': False}, - 'gfdl-1.3-or-later': {'id': 'GFDL-1.3-or-later', 'deprecated': False}, - 'giftware': {'id': 'Giftware', 'deprecated': False}, - 'gl2ps': {'id': 'GL2PS', 'deprecated': False}, - 'glide': {'id': 'Glide', 'deprecated': False}, - 'glulxe': {'id': 'Glulxe', 'deprecated': False}, - 'glwtpl': {'id': 'GLWTPL', 'deprecated': False}, - 'gnuplot': {'id': 'gnuplot', 'deprecated': False}, - 'gpl-1.0': {'id': 'GPL-1.0', 'deprecated': True}, - 'gpl-1.0+': {'id': 'GPL-1.0+', 'deprecated': True}, - 'gpl-1.0-only': {'id': 'GPL-1.0-only', 'deprecated': False}, - 'gpl-1.0-or-later': {'id': 'GPL-1.0-or-later', 'deprecated': False}, - 'gpl-2.0': {'id': 'GPL-2.0', 'deprecated': True}, - 'gpl-2.0+': {'id': 'GPL-2.0+', 'deprecated': True}, - 'gpl-2.0-only': {'id': 'GPL-2.0-only', 'deprecated': False}, - 'gpl-2.0-or-later': {'id': 'GPL-2.0-or-later', 'deprecated': False}, - 'gpl-2.0-with-autoconf-exception': {'id': 'GPL-2.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-2.0-with-bison-exception': {'id': 'GPL-2.0-with-bison-exception', 'deprecated': True}, - 'gpl-2.0-with-classpath-exception': {'id': 'GPL-2.0-with-classpath-exception', 'deprecated': True}, - 'gpl-2.0-with-font-exception': {'id': 'GPL-2.0-with-font-exception', 'deprecated': True}, - 'gpl-2.0-with-gcc-exception': {'id': 'GPL-2.0-with-GCC-exception', 'deprecated': True}, - 'gpl-3.0': {'id': 'GPL-3.0', 'deprecated': True}, - 'gpl-3.0+': {'id': 'GPL-3.0+', 'deprecated': True}, - 'gpl-3.0-only': {'id': 'GPL-3.0-only', 'deprecated': False}, - 'gpl-3.0-or-later': {'id': 'GPL-3.0-or-later', 'deprecated': False}, - 'gpl-3.0-with-autoconf-exception': {'id': 'GPL-3.0-with-autoconf-exception', 'deprecated': True}, - 'gpl-3.0-with-gcc-exception': {'id': 'GPL-3.0-with-GCC-exception', 'deprecated': True}, - 'graphics-gems': {'id': 'Graphics-Gems', 'deprecated': False}, - 'gsoap-1.3b': {'id': 'gSOAP-1.3b', 'deprecated': False}, - 'gtkbook': {'id': 'gtkbook', 'deprecated': False}, - 'gutmann': {'id': 'Gutmann', 'deprecated': False}, - 'haskellreport': {'id': 'HaskellReport', 'deprecated': False}, - 'hdf5': {'id': 'HDF5', 'deprecated': False}, - 'hdparm': {'id': 'hdparm', 'deprecated': False}, - 'hidapi': {'id': 'HIDAPI', 'deprecated': False}, - 'hippocratic-2.1': {'id': 'Hippocratic-2.1', 'deprecated': False}, - 'hp-1986': {'id': 'HP-1986', 'deprecated': False}, - 'hp-1989': {'id': 'HP-1989', 'deprecated': False}, - 'hpnd': {'id': 'HPND', 'deprecated': False}, - 'hpnd-dec': {'id': 'HPND-DEC', 'deprecated': False}, - 'hpnd-doc': {'id': 'HPND-doc', 'deprecated': False}, - 'hpnd-doc-sell': {'id': 'HPND-doc-sell', 'deprecated': False}, - 'hpnd-export-us': {'id': 'HPND-export-US', 'deprecated': False}, - 'hpnd-export-us-acknowledgement': {'id': 'HPND-export-US-acknowledgement', 'deprecated': False}, - 'hpnd-export-us-modify': {'id': 'HPND-export-US-modify', 'deprecated': False}, - 'hpnd-export2-us': {'id': 'HPND-export2-US', 'deprecated': False}, - 'hpnd-fenneberg-livingston': {'id': 'HPND-Fenneberg-Livingston', 'deprecated': False}, - 'hpnd-inria-imag': {'id': 'HPND-INRIA-IMAG', 'deprecated': False}, - 'hpnd-intel': {'id': 'HPND-Intel', 'deprecated': False}, - 'hpnd-kevlin-henney': {'id': 'HPND-Kevlin-Henney', 'deprecated': False}, - 'hpnd-markus-kuhn': {'id': 'HPND-Markus-Kuhn', 'deprecated': False}, - 'hpnd-merchantability-variant': {'id': 'HPND-merchantability-variant', 'deprecated': False}, - 'hpnd-mit-disclaimer': {'id': 'HPND-MIT-disclaimer', 'deprecated': False}, - 'hpnd-netrek': {'id': 'HPND-Netrek', 'deprecated': False}, - 'hpnd-pbmplus': {'id': 'HPND-Pbmplus', 'deprecated': False}, - 'hpnd-sell-mit-disclaimer-xserver': {'id': 'HPND-sell-MIT-disclaimer-xserver', 'deprecated': False}, - 'hpnd-sell-regexpr': {'id': 'HPND-sell-regexpr', 'deprecated': False}, - 'hpnd-sell-variant': {'id': 'HPND-sell-variant', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer': {'id': 'HPND-sell-variant-MIT-disclaimer', 'deprecated': False}, - 'hpnd-sell-variant-mit-disclaimer-rev': {'id': 'HPND-sell-variant-MIT-disclaimer-rev', 'deprecated': False}, - 'hpnd-uc': {'id': 'HPND-UC', 'deprecated': False}, - 'hpnd-uc-export-us': {'id': 'HPND-UC-export-US', 'deprecated': False}, - 'htmltidy': {'id': 'HTMLTIDY', 'deprecated': False}, - 'ibm-pibs': {'id': 'IBM-pibs', 'deprecated': False}, - 'icu': {'id': 'ICU', 'deprecated': False}, - 'iec-code-components-eula': {'id': 'IEC-Code-Components-EULA', 'deprecated': False}, - 'ijg': {'id': 'IJG', 'deprecated': False}, - 'ijg-short': {'id': 'IJG-short', 'deprecated': False}, - 'imagemagick': {'id': 'ImageMagick', 'deprecated': False}, - 'imatix': {'id': 'iMatix', 'deprecated': False}, - 'imlib2': {'id': 'Imlib2', 'deprecated': False}, - 'info-zip': {'id': 'Info-ZIP', 'deprecated': False}, - 'inner-net-2.0': {'id': 'Inner-Net-2.0', 'deprecated': False}, - 'innosetup': {'id': 'InnoSetup', 'deprecated': False}, - 'intel': {'id': 'Intel', 'deprecated': False}, - 'intel-acpi': {'id': 'Intel-ACPI', 'deprecated': False}, - 'interbase-1.0': {'id': 'Interbase-1.0', 'deprecated': False}, - 'ipa': {'id': 'IPA', 'deprecated': False}, - 'ipl-1.0': {'id': 'IPL-1.0', 'deprecated': False}, - 'isc': {'id': 'ISC', 'deprecated': False}, - 'isc-veillard': {'id': 'ISC-Veillard', 'deprecated': False}, - 'jam': {'id': 'Jam', 'deprecated': False}, - 'jasper-2.0': {'id': 'JasPer-2.0', 'deprecated': False}, - 'jove': {'id': 'jove', 'deprecated': False}, - 'jpl-image': {'id': 'JPL-image', 'deprecated': False}, - 'jpnic': {'id': 'JPNIC', 'deprecated': False}, - 'json': {'id': 'JSON', 'deprecated': False}, - 'kastrup': {'id': 'Kastrup', 'deprecated': False}, - 'kazlib': {'id': 'Kazlib', 'deprecated': False}, - 'knuth-ctan': {'id': 'Knuth-CTAN', 'deprecated': False}, - 'lal-1.2': {'id': 'LAL-1.2', 'deprecated': False}, - 'lal-1.3': {'id': 'LAL-1.3', 'deprecated': False}, - 'latex2e': {'id': 'Latex2e', 'deprecated': False}, - 'latex2e-translated-notice': {'id': 'Latex2e-translated-notice', 'deprecated': False}, - 'leptonica': {'id': 'Leptonica', 'deprecated': False}, - 'lgpl-2.0': {'id': 'LGPL-2.0', 'deprecated': True}, - 'lgpl-2.0+': {'id': 'LGPL-2.0+', 'deprecated': True}, - 'lgpl-2.0-only': {'id': 'LGPL-2.0-only', 'deprecated': False}, - 'lgpl-2.0-or-later': {'id': 'LGPL-2.0-or-later', 'deprecated': False}, - 'lgpl-2.1': {'id': 'LGPL-2.1', 'deprecated': True}, - 'lgpl-2.1+': {'id': 'LGPL-2.1+', 'deprecated': True}, - 'lgpl-2.1-only': {'id': 'LGPL-2.1-only', 'deprecated': False}, - 'lgpl-2.1-or-later': {'id': 'LGPL-2.1-or-later', 'deprecated': False}, - 'lgpl-3.0': {'id': 'LGPL-3.0', 'deprecated': True}, - 'lgpl-3.0+': {'id': 'LGPL-3.0+', 'deprecated': True}, - 'lgpl-3.0-only': {'id': 'LGPL-3.0-only', 'deprecated': False}, - 'lgpl-3.0-or-later': {'id': 'LGPL-3.0-or-later', 'deprecated': False}, - 'lgpllr': {'id': 'LGPLLR', 'deprecated': False}, - 'libpng': {'id': 'Libpng', 'deprecated': False}, - 'libpng-1.6.35': {'id': 'libpng-1.6.35', 'deprecated': False}, - 'libpng-2.0': {'id': 'libpng-2.0', 'deprecated': False}, - 'libselinux-1.0': {'id': 'libselinux-1.0', 'deprecated': False}, - 'libtiff': {'id': 'libtiff', 'deprecated': False}, - 'libutil-david-nugent': {'id': 'libutil-David-Nugent', 'deprecated': False}, - 'liliq-p-1.1': {'id': 'LiLiQ-P-1.1', 'deprecated': False}, - 'liliq-r-1.1': {'id': 'LiLiQ-R-1.1', 'deprecated': False}, - 'liliq-rplus-1.1': {'id': 'LiLiQ-Rplus-1.1', 'deprecated': False}, - 'linux-man-pages-1-para': {'id': 'Linux-man-pages-1-para', 'deprecated': False}, - 'linux-man-pages-copyleft': {'id': 'Linux-man-pages-copyleft', 'deprecated': False}, - 'linux-man-pages-copyleft-2-para': {'id': 'Linux-man-pages-copyleft-2-para', 'deprecated': False}, - 'linux-man-pages-copyleft-var': {'id': 'Linux-man-pages-copyleft-var', 'deprecated': False}, - 'linux-openib': {'id': 'Linux-OpenIB', 'deprecated': False}, - 'loop': {'id': 'LOOP', 'deprecated': False}, - 'lpd-document': {'id': 'LPD-document', 'deprecated': False}, - 'lpl-1.0': {'id': 'LPL-1.0', 'deprecated': False}, - 'lpl-1.02': {'id': 'LPL-1.02', 'deprecated': False}, - 'lppl-1.0': {'id': 'LPPL-1.0', 'deprecated': False}, - 'lppl-1.1': {'id': 'LPPL-1.1', 'deprecated': False}, - 'lppl-1.2': {'id': 'LPPL-1.2', 'deprecated': False}, - 'lppl-1.3a': {'id': 'LPPL-1.3a', 'deprecated': False}, - 'lppl-1.3c': {'id': 'LPPL-1.3c', 'deprecated': False}, - 'lsof': {'id': 'lsof', 'deprecated': False}, - 'lucida-bitmap-fonts': {'id': 'Lucida-Bitmap-Fonts', 'deprecated': False}, - 'lzma-sdk-9.11-to-9.20': {'id': 'LZMA-SDK-9.11-to-9.20', 'deprecated': False}, - 'lzma-sdk-9.22': {'id': 'LZMA-SDK-9.22', 'deprecated': False}, - 'mackerras-3-clause': {'id': 'Mackerras-3-Clause', 'deprecated': False}, - 'mackerras-3-clause-acknowledgment': {'id': 'Mackerras-3-Clause-acknowledgment', 'deprecated': False}, - 'magaz': {'id': 'magaz', 'deprecated': False}, - 'mailprio': {'id': 'mailprio', 'deprecated': False}, - 'makeindex': {'id': 'MakeIndex', 'deprecated': False}, - 'man2html': {'id': 'man2html', 'deprecated': False}, - 'martin-birgmeier': {'id': 'Martin-Birgmeier', 'deprecated': False}, - 'mcphee-slideshow': {'id': 'McPhee-slideshow', 'deprecated': False}, - 'metamail': {'id': 'metamail', 'deprecated': False}, - 'minpack': {'id': 'Minpack', 'deprecated': False}, - 'mips': {'id': 'MIPS', 'deprecated': False}, - 'miros': {'id': 'MirOS', 'deprecated': False}, - 'mit': {'id': 'MIT', 'deprecated': False}, - 'mit-0': {'id': 'MIT-0', 'deprecated': False}, - 'mit-advertising': {'id': 'MIT-advertising', 'deprecated': False}, - 'mit-click': {'id': 'MIT-Click', 'deprecated': False}, - 'mit-cmu': {'id': 'MIT-CMU', 'deprecated': False}, - 'mit-enna': {'id': 'MIT-enna', 'deprecated': False}, - 'mit-feh': {'id': 'MIT-feh', 'deprecated': False}, - 'mit-festival': {'id': 'MIT-Festival', 'deprecated': False}, - 'mit-khronos-old': {'id': 'MIT-Khronos-old', 'deprecated': False}, - 'mit-modern-variant': {'id': 'MIT-Modern-Variant', 'deprecated': False}, - 'mit-open-group': {'id': 'MIT-open-group', 'deprecated': False}, - 'mit-testregex': {'id': 'MIT-testregex', 'deprecated': False}, - 'mit-wu': {'id': 'MIT-Wu', 'deprecated': False}, - 'mitnfa': {'id': 'MITNFA', 'deprecated': False}, - 'mmixware': {'id': 'MMIXware', 'deprecated': False}, - 'motosoto': {'id': 'Motosoto', 'deprecated': False}, - 'mpeg-ssg': {'id': 'MPEG-SSG', 'deprecated': False}, - 'mpi-permissive': {'id': 'mpi-permissive', 'deprecated': False}, - 'mpich2': {'id': 'mpich2', 'deprecated': False}, - 'mpl-1.0': {'id': 'MPL-1.0', 'deprecated': False}, - 'mpl-1.1': {'id': 'MPL-1.1', 'deprecated': False}, - 'mpl-2.0': {'id': 'MPL-2.0', 'deprecated': False}, - 'mpl-2.0-no-copyleft-exception': {'id': 'MPL-2.0-no-copyleft-exception', 'deprecated': False}, - 'mplus': {'id': 'mplus', 'deprecated': False}, - 'ms-lpl': {'id': 'MS-LPL', 'deprecated': False}, - 'ms-pl': {'id': 'MS-PL', 'deprecated': False}, - 'ms-rl': {'id': 'MS-RL', 'deprecated': False}, - 'mtll': {'id': 'MTLL', 'deprecated': False}, - 'mulanpsl-1.0': {'id': 'MulanPSL-1.0', 'deprecated': False}, - 'mulanpsl-2.0': {'id': 'MulanPSL-2.0', 'deprecated': False}, - 'multics': {'id': 'Multics', 'deprecated': False}, - 'mup': {'id': 'Mup', 'deprecated': False}, - 'naist-2003': {'id': 'NAIST-2003', 'deprecated': False}, - 'nasa-1.3': {'id': 'NASA-1.3', 'deprecated': False}, - 'naumen': {'id': 'Naumen', 'deprecated': False}, - 'nbpl-1.0': {'id': 'NBPL-1.0', 'deprecated': False}, - 'ncbi-pd': {'id': 'NCBI-PD', 'deprecated': False}, - 'ncgl-uk-2.0': {'id': 'NCGL-UK-2.0', 'deprecated': False}, - 'ncl': {'id': 'NCL', 'deprecated': False}, - 'ncsa': {'id': 'NCSA', 'deprecated': False}, - 'net-snmp': {'id': 'Net-SNMP', 'deprecated': True}, - 'netcdf': {'id': 'NetCDF', 'deprecated': False}, - 'newsletr': {'id': 'Newsletr', 'deprecated': False}, - 'ngpl': {'id': 'NGPL', 'deprecated': False}, - 'ngrep': {'id': 'ngrep', 'deprecated': False}, - 'nicta-1.0': {'id': 'NICTA-1.0', 'deprecated': False}, - 'nist-pd': {'id': 'NIST-PD', 'deprecated': False}, - 'nist-pd-fallback': {'id': 'NIST-PD-fallback', 'deprecated': False}, - 'nist-software': {'id': 'NIST-Software', 'deprecated': False}, - 'nlod-1.0': {'id': 'NLOD-1.0', 'deprecated': False}, - 'nlod-2.0': {'id': 'NLOD-2.0', 'deprecated': False}, - 'nlpl': {'id': 'NLPL', 'deprecated': False}, - 'nokia': {'id': 'Nokia', 'deprecated': False}, - 'nosl': {'id': 'NOSL', 'deprecated': False}, - 'noweb': {'id': 'Noweb', 'deprecated': False}, - 'npl-1.0': {'id': 'NPL-1.0', 'deprecated': False}, - 'npl-1.1': {'id': 'NPL-1.1', 'deprecated': False}, - 'nposl-3.0': {'id': 'NPOSL-3.0', 'deprecated': False}, - 'nrl': {'id': 'NRL', 'deprecated': False}, - 'ntia-pd': {'id': 'NTIA-PD', 'deprecated': False}, - 'ntp': {'id': 'NTP', 'deprecated': False}, - 'ntp-0': {'id': 'NTP-0', 'deprecated': False}, - 'nunit': {'id': 'Nunit', 'deprecated': True}, - 'o-uda-1.0': {'id': 'O-UDA-1.0', 'deprecated': False}, - 'oar': {'id': 'OAR', 'deprecated': False}, - 'occt-pl': {'id': 'OCCT-PL', 'deprecated': False}, - 'oclc-2.0': {'id': 'OCLC-2.0', 'deprecated': False}, - 'odbl-1.0': {'id': 'ODbL-1.0', 'deprecated': False}, - 'odc-by-1.0': {'id': 'ODC-By-1.0', 'deprecated': False}, - 'offis': {'id': 'OFFIS', 'deprecated': False}, - 'ofl-1.0': {'id': 'OFL-1.0', 'deprecated': False}, - 'ofl-1.0-no-rfn': {'id': 'OFL-1.0-no-RFN', 'deprecated': False}, - 'ofl-1.0-rfn': {'id': 'OFL-1.0-RFN', 'deprecated': False}, - 'ofl-1.1': {'id': 'OFL-1.1', 'deprecated': False}, - 'ofl-1.1-no-rfn': {'id': 'OFL-1.1-no-RFN', 'deprecated': False}, - 'ofl-1.1-rfn': {'id': 'OFL-1.1-RFN', 'deprecated': False}, - 'ogc-1.0': {'id': 'OGC-1.0', 'deprecated': False}, - 'ogdl-taiwan-1.0': {'id': 'OGDL-Taiwan-1.0', 'deprecated': False}, - 'ogl-canada-2.0': {'id': 'OGL-Canada-2.0', 'deprecated': False}, - 'ogl-uk-1.0': {'id': 'OGL-UK-1.0', 'deprecated': False}, - 'ogl-uk-2.0': {'id': 'OGL-UK-2.0', 'deprecated': False}, - 'ogl-uk-3.0': {'id': 'OGL-UK-3.0', 'deprecated': False}, - 'ogtsl': {'id': 'OGTSL', 'deprecated': False}, - 'oldap-1.1': {'id': 'OLDAP-1.1', 'deprecated': False}, - 'oldap-1.2': {'id': 'OLDAP-1.2', 'deprecated': False}, - 'oldap-1.3': {'id': 'OLDAP-1.3', 'deprecated': False}, - 'oldap-1.4': {'id': 'OLDAP-1.4', 'deprecated': False}, - 'oldap-2.0': {'id': 'OLDAP-2.0', 'deprecated': False}, - 'oldap-2.0.1': {'id': 'OLDAP-2.0.1', 'deprecated': False}, - 'oldap-2.1': {'id': 'OLDAP-2.1', 'deprecated': False}, - 'oldap-2.2': {'id': 'OLDAP-2.2', 'deprecated': False}, - 'oldap-2.2.1': {'id': 'OLDAP-2.2.1', 'deprecated': False}, - 'oldap-2.2.2': {'id': 'OLDAP-2.2.2', 'deprecated': False}, - 'oldap-2.3': {'id': 'OLDAP-2.3', 'deprecated': False}, - 'oldap-2.4': {'id': 'OLDAP-2.4', 'deprecated': False}, - 'oldap-2.5': {'id': 'OLDAP-2.5', 'deprecated': False}, - 'oldap-2.6': {'id': 'OLDAP-2.6', 'deprecated': False}, - 'oldap-2.7': {'id': 'OLDAP-2.7', 'deprecated': False}, - 'oldap-2.8': {'id': 'OLDAP-2.8', 'deprecated': False}, - 'olfl-1.3': {'id': 'OLFL-1.3', 'deprecated': False}, - 'oml': {'id': 'OML', 'deprecated': False}, - 'openpbs-2.3': {'id': 'OpenPBS-2.3', 'deprecated': False}, - 'openssl': {'id': 'OpenSSL', 'deprecated': False}, - 'openssl-standalone': {'id': 'OpenSSL-standalone', 'deprecated': False}, - 'openvision': {'id': 'OpenVision', 'deprecated': False}, - 'opl-1.0': {'id': 'OPL-1.0', 'deprecated': False}, - 'opl-uk-3.0': {'id': 'OPL-UK-3.0', 'deprecated': False}, - 'opubl-1.0': {'id': 'OPUBL-1.0', 'deprecated': False}, - 'oset-pl-2.1': {'id': 'OSET-PL-2.1', 'deprecated': False}, - 'osl-1.0': {'id': 'OSL-1.0', 'deprecated': False}, - 'osl-1.1': {'id': 'OSL-1.1', 'deprecated': False}, - 'osl-2.0': {'id': 'OSL-2.0', 'deprecated': False}, - 'osl-2.1': {'id': 'OSL-2.1', 'deprecated': False}, - 'osl-3.0': {'id': 'OSL-3.0', 'deprecated': False}, - 'padl': {'id': 'PADL', 'deprecated': False}, - 'parity-6.0.0': {'id': 'Parity-6.0.0', 'deprecated': False}, - 'parity-7.0.0': {'id': 'Parity-7.0.0', 'deprecated': False}, - 'pddl-1.0': {'id': 'PDDL-1.0', 'deprecated': False}, - 'php-3.0': {'id': 'PHP-3.0', 'deprecated': False}, - 'php-3.01': {'id': 'PHP-3.01', 'deprecated': False}, - 'pixar': {'id': 'Pixar', 'deprecated': False}, - 'pkgconf': {'id': 'pkgconf', 'deprecated': False}, - 'plexus': {'id': 'Plexus', 'deprecated': False}, - 'pnmstitch': {'id': 'pnmstitch', 'deprecated': False}, - 'polyform-noncommercial-1.0.0': {'id': 'PolyForm-Noncommercial-1.0.0', 'deprecated': False}, - 'polyform-small-business-1.0.0': {'id': 'PolyForm-Small-Business-1.0.0', 'deprecated': False}, - 'postgresql': {'id': 'PostgreSQL', 'deprecated': False}, - 'ppl': {'id': 'PPL', 'deprecated': False}, - 'psf-2.0': {'id': 'PSF-2.0', 'deprecated': False}, - 'psfrag': {'id': 'psfrag', 'deprecated': False}, - 'psutils': {'id': 'psutils', 'deprecated': False}, - 'python-2.0': {'id': 'Python-2.0', 'deprecated': False}, - 'python-2.0.1': {'id': 'Python-2.0.1', 'deprecated': False}, - 'python-ldap': {'id': 'python-ldap', 'deprecated': False}, - 'qhull': {'id': 'Qhull', 'deprecated': False}, - 'qpl-1.0': {'id': 'QPL-1.0', 'deprecated': False}, - 'qpl-1.0-inria-2004': {'id': 'QPL-1.0-INRIA-2004', 'deprecated': False}, - 'radvd': {'id': 'radvd', 'deprecated': False}, - 'rdisc': {'id': 'Rdisc', 'deprecated': False}, - 'rhecos-1.1': {'id': 'RHeCos-1.1', 'deprecated': False}, - 'rpl-1.1': {'id': 'RPL-1.1', 'deprecated': False}, - 'rpl-1.5': {'id': 'RPL-1.5', 'deprecated': False}, - 'rpsl-1.0': {'id': 'RPSL-1.0', 'deprecated': False}, - 'rsa-md': {'id': 'RSA-MD', 'deprecated': False}, - 'rscpl': {'id': 'RSCPL', 'deprecated': False}, - 'ruby': {'id': 'Ruby', 'deprecated': False}, - 'ruby-pty': {'id': 'Ruby-pty', 'deprecated': False}, - 'sax-pd': {'id': 'SAX-PD', 'deprecated': False}, - 'sax-pd-2.0': {'id': 'SAX-PD-2.0', 'deprecated': False}, - 'saxpath': {'id': 'Saxpath', 'deprecated': False}, - 'scea': {'id': 'SCEA', 'deprecated': False}, - 'schemereport': {'id': 'SchemeReport', 'deprecated': False}, - 'sendmail': {'id': 'Sendmail', 'deprecated': False}, - 'sendmail-8.23': {'id': 'Sendmail-8.23', 'deprecated': False}, - 'sendmail-open-source-1.1': {'id': 'Sendmail-Open-Source-1.1', 'deprecated': False}, - 'sgi-b-1.0': {'id': 'SGI-B-1.0', 'deprecated': False}, - 'sgi-b-1.1': {'id': 'SGI-B-1.1', 'deprecated': False}, - 'sgi-b-2.0': {'id': 'SGI-B-2.0', 'deprecated': False}, - 'sgi-opengl': {'id': 'SGI-OpenGL', 'deprecated': False}, - 'sgp4': {'id': 'SGP4', 'deprecated': False}, - 'shl-0.5': {'id': 'SHL-0.5', 'deprecated': False}, - 'shl-0.51': {'id': 'SHL-0.51', 'deprecated': False}, - 'simpl-2.0': {'id': 'SimPL-2.0', 'deprecated': False}, - 'sissl': {'id': 'SISSL', 'deprecated': False}, - 'sissl-1.2': {'id': 'SISSL-1.2', 'deprecated': False}, - 'sl': {'id': 'SL', 'deprecated': False}, - 'sleepycat': {'id': 'Sleepycat', 'deprecated': False}, - 'smail-gpl': {'id': 'SMAIL-GPL', 'deprecated': False}, - 'smlnj': {'id': 'SMLNJ', 'deprecated': False}, - 'smppl': {'id': 'SMPPL', 'deprecated': False}, - 'snia': {'id': 'SNIA', 'deprecated': False}, - 'snprintf': {'id': 'snprintf', 'deprecated': False}, - 'sofa': {'id': 'SOFA', 'deprecated': False}, - 'softsurfer': {'id': 'softSurfer', 'deprecated': False}, - 'soundex': {'id': 'Soundex', 'deprecated': False}, - 'spencer-86': {'id': 'Spencer-86', 'deprecated': False}, - 'spencer-94': {'id': 'Spencer-94', 'deprecated': False}, - 'spencer-99': {'id': 'Spencer-99', 'deprecated': False}, - 'spl-1.0': {'id': 'SPL-1.0', 'deprecated': False}, - 'ssh-keyscan': {'id': 'ssh-keyscan', 'deprecated': False}, - 'ssh-openssh': {'id': 'SSH-OpenSSH', 'deprecated': False}, - 'ssh-short': {'id': 'SSH-short', 'deprecated': False}, - 'ssleay-standalone': {'id': 'SSLeay-standalone', 'deprecated': False}, - 'sspl-1.0': {'id': 'SSPL-1.0', 'deprecated': False}, - 'standardml-nj': {'id': 'StandardML-NJ', 'deprecated': True}, - 'sugarcrm-1.1.3': {'id': 'SugarCRM-1.1.3', 'deprecated': False}, - 'sul-1.0': {'id': 'SUL-1.0', 'deprecated': False}, - 'sun-ppp': {'id': 'Sun-PPP', 'deprecated': False}, - 'sun-ppp-2000': {'id': 'Sun-PPP-2000', 'deprecated': False}, - 'sunpro': {'id': 'SunPro', 'deprecated': False}, - 'swl': {'id': 'SWL', 'deprecated': False}, - 'swrule': {'id': 'swrule', 'deprecated': False}, - 'symlinks': {'id': 'Symlinks', 'deprecated': False}, - 'tapr-ohl-1.0': {'id': 'TAPR-OHL-1.0', 'deprecated': False}, - 'tcl': {'id': 'TCL', 'deprecated': False}, - 'tcp-wrappers': {'id': 'TCP-wrappers', 'deprecated': False}, - 'termreadkey': {'id': 'TermReadKey', 'deprecated': False}, - 'tgppl-1.0': {'id': 'TGPPL-1.0', 'deprecated': False}, - 'thirdeye': {'id': 'ThirdEye', 'deprecated': False}, - 'threeparttable': {'id': 'threeparttable', 'deprecated': False}, - 'tmate': {'id': 'TMate', 'deprecated': False}, - 'torque-1.1': {'id': 'TORQUE-1.1', 'deprecated': False}, - 'tosl': {'id': 'TOSL', 'deprecated': False}, - 'tpdl': {'id': 'TPDL', 'deprecated': False}, - 'tpl-1.0': {'id': 'TPL-1.0', 'deprecated': False}, - 'trustedqsl': {'id': 'TrustedQSL', 'deprecated': False}, - 'ttwl': {'id': 'TTWL', 'deprecated': False}, - 'ttyp0': {'id': 'TTYP0', 'deprecated': False}, - 'tu-berlin-1.0': {'id': 'TU-Berlin-1.0', 'deprecated': False}, - 'tu-berlin-2.0': {'id': 'TU-Berlin-2.0', 'deprecated': False}, - 'ubuntu-font-1.0': {'id': 'Ubuntu-font-1.0', 'deprecated': False}, - 'ucar': {'id': 'UCAR', 'deprecated': False}, - 'ucl-1.0': {'id': 'UCL-1.0', 'deprecated': False}, - 'ulem': {'id': 'ulem', 'deprecated': False}, - 'umich-merit': {'id': 'UMich-Merit', 'deprecated': False}, - 'unicode-3.0': {'id': 'Unicode-3.0', 'deprecated': False}, - 'unicode-dfs-2015': {'id': 'Unicode-DFS-2015', 'deprecated': False}, - 'unicode-dfs-2016': {'id': 'Unicode-DFS-2016', 'deprecated': False}, - 'unicode-tou': {'id': 'Unicode-TOU', 'deprecated': False}, - 'unixcrypt': {'id': 'UnixCrypt', 'deprecated': False}, - 'unlicense': {'id': 'Unlicense', 'deprecated': False}, - 'unlicense-libtelnet': {'id': 'Unlicense-libtelnet', 'deprecated': False}, - 'unlicense-libwhirlpool': {'id': 'Unlicense-libwhirlpool', 'deprecated': False}, - 'upl-1.0': {'id': 'UPL-1.0', 'deprecated': False}, - 'urt-rle': {'id': 'URT-RLE', 'deprecated': False}, - 'vim': {'id': 'Vim', 'deprecated': False}, - 'vostrom': {'id': 'VOSTROM', 'deprecated': False}, - 'vsl-1.0': {'id': 'VSL-1.0', 'deprecated': False}, - 'w3c': {'id': 'W3C', 'deprecated': False}, - 'w3c-19980720': {'id': 'W3C-19980720', 'deprecated': False}, - 'w3c-20150513': {'id': 'W3C-20150513', 'deprecated': False}, - 'w3m': {'id': 'w3m', 'deprecated': False}, - 'watcom-1.0': {'id': 'Watcom-1.0', 'deprecated': False}, - 'widget-workshop': {'id': 'Widget-Workshop', 'deprecated': False}, - 'wsuipa': {'id': 'Wsuipa', 'deprecated': False}, - 'wtfpl': {'id': 'WTFPL', 'deprecated': False}, - 'wwl': {'id': 'wwl', 'deprecated': False}, - 'wxwindows': {'id': 'wxWindows', 'deprecated': True}, - 'x11': {'id': 'X11', 'deprecated': False}, - 'x11-distribute-modifications-variant': {'id': 'X11-distribute-modifications-variant', 'deprecated': False}, - 'x11-swapped': {'id': 'X11-swapped', 'deprecated': False}, - 'xdebug-1.03': {'id': 'Xdebug-1.03', 'deprecated': False}, - 'xerox': {'id': 'Xerox', 'deprecated': False}, - 'xfig': {'id': 'Xfig', 'deprecated': False}, - 'xfree86-1.1': {'id': 'XFree86-1.1', 'deprecated': False}, - 'xinetd': {'id': 'xinetd', 'deprecated': False}, - 'xkeyboard-config-zinoviev': {'id': 'xkeyboard-config-Zinoviev', 'deprecated': False}, - 'xlock': {'id': 'xlock', 'deprecated': False}, - 'xnet': {'id': 'Xnet', 'deprecated': False}, - 'xpp': {'id': 'xpp', 'deprecated': False}, - 'xskat': {'id': 'XSkat', 'deprecated': False}, - 'xzoom': {'id': 'xzoom', 'deprecated': False}, - 'ypl-1.0': {'id': 'YPL-1.0', 'deprecated': False}, - 'ypl-1.1': {'id': 'YPL-1.1', 'deprecated': False}, - 'zed': {'id': 'Zed', 'deprecated': False}, - 'zeeff': {'id': 'Zeeff', 'deprecated': False}, - 'zend-2.0': {'id': 'Zend-2.0', 'deprecated': False}, - 'zimbra-1.3': {'id': 'Zimbra-1.3', 'deprecated': False}, - 'zimbra-1.4': {'id': 'Zimbra-1.4', 'deprecated': False}, - 'zlib': {'id': 'Zlib', 'deprecated': False}, - 'zlib-acknowledgement': {'id': 'zlib-acknowledgement', 'deprecated': False}, - 'zpl-1.1': {'id': 'ZPL-1.1', 'deprecated': False}, - 'zpl-2.0': {'id': 'ZPL-2.0', 'deprecated': False}, - 'zpl-2.1': {'id': 'ZPL-2.1', 'deprecated': False}, -} - -EXCEPTIONS: dict[str, SPDXException] = { - '389-exception': {'id': '389-exception', 'deprecated': False}, - 'asterisk-exception': {'id': 'Asterisk-exception', 'deprecated': False}, - 'asterisk-linking-protocols-exception': {'id': 'Asterisk-linking-protocols-exception', 'deprecated': False}, - 'autoconf-exception-2.0': {'id': 'Autoconf-exception-2.0', 'deprecated': False}, - 'autoconf-exception-3.0': {'id': 'Autoconf-exception-3.0', 'deprecated': False}, - 'autoconf-exception-generic': {'id': 'Autoconf-exception-generic', 'deprecated': False}, - 'autoconf-exception-generic-3.0': {'id': 'Autoconf-exception-generic-3.0', 'deprecated': False}, - 'autoconf-exception-macro': {'id': 'Autoconf-exception-macro', 'deprecated': False}, - 'bison-exception-1.24': {'id': 'Bison-exception-1.24', 'deprecated': False}, - 'bison-exception-2.2': {'id': 'Bison-exception-2.2', 'deprecated': False}, - 'bootloader-exception': {'id': 'Bootloader-exception', 'deprecated': False}, - 'cgal-linking-exception': {'id': 'CGAL-linking-exception', 'deprecated': False}, - 'classpath-exception-2.0': {'id': 'Classpath-exception-2.0', 'deprecated': False}, - 'clisp-exception-2.0': {'id': 'CLISP-exception-2.0', 'deprecated': False}, - 'cryptsetup-openssl-exception': {'id': 'cryptsetup-OpenSSL-exception', 'deprecated': False}, - 'digia-qt-lgpl-exception-1.1': {'id': 'Digia-Qt-LGPL-exception-1.1', 'deprecated': False}, - 'digirule-foss-exception': {'id': 'DigiRule-FOSS-exception', 'deprecated': False}, - 'ecos-exception-2.0': {'id': 'eCos-exception-2.0', 'deprecated': False}, - 'erlang-otp-linking-exception': {'id': 'erlang-otp-linking-exception', 'deprecated': False}, - 'fawkes-runtime-exception': {'id': 'Fawkes-Runtime-exception', 'deprecated': False}, - 'fltk-exception': {'id': 'FLTK-exception', 'deprecated': False}, - 'fmt-exception': {'id': 'fmt-exception', 'deprecated': False}, - 'font-exception-2.0': {'id': 'Font-exception-2.0', 'deprecated': False}, - 'freertos-exception-2.0': {'id': 'freertos-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0': {'id': 'GCC-exception-2.0', 'deprecated': False}, - 'gcc-exception-2.0-note': {'id': 'GCC-exception-2.0-note', 'deprecated': False}, - 'gcc-exception-3.1': {'id': 'GCC-exception-3.1', 'deprecated': False}, - 'gmsh-exception': {'id': 'Gmsh-exception', 'deprecated': False}, - 'gnat-exception': {'id': 'GNAT-exception', 'deprecated': False}, - 'gnome-examples-exception': {'id': 'GNOME-examples-exception', 'deprecated': False}, - 'gnu-compiler-exception': {'id': 'GNU-compiler-exception', 'deprecated': False}, - 'gnu-javamail-exception': {'id': 'gnu-javamail-exception', 'deprecated': False}, - 'gpl-3.0-389-ds-base-exception': {'id': 'GPL-3.0-389-ds-base-exception', 'deprecated': False}, - 'gpl-3.0-interface-exception': {'id': 'GPL-3.0-interface-exception', 'deprecated': False}, - 'gpl-3.0-linking-exception': {'id': 'GPL-3.0-linking-exception', 'deprecated': False}, - 'gpl-3.0-linking-source-exception': {'id': 'GPL-3.0-linking-source-exception', 'deprecated': False}, - 'gpl-cc-1.0': {'id': 'GPL-CC-1.0', 'deprecated': False}, - 'gstreamer-exception-2005': {'id': 'GStreamer-exception-2005', 'deprecated': False}, - 'gstreamer-exception-2008': {'id': 'GStreamer-exception-2008', 'deprecated': False}, - 'harbour-exception': {'id': 'harbour-exception', 'deprecated': False}, - 'i2p-gpl-java-exception': {'id': 'i2p-gpl-java-exception', 'deprecated': False}, - 'independent-modules-exception': {'id': 'Independent-modules-exception', 'deprecated': False}, - 'kicad-libraries-exception': {'id': 'KiCad-libraries-exception', 'deprecated': False}, - 'lgpl-3.0-linking-exception': {'id': 'LGPL-3.0-linking-exception', 'deprecated': False}, - 'libpri-openh323-exception': {'id': 'libpri-OpenH323-exception', 'deprecated': False}, - 'libtool-exception': {'id': 'Libtool-exception', 'deprecated': False}, - 'linux-syscall-note': {'id': 'Linux-syscall-note', 'deprecated': False}, - 'llgpl': {'id': 'LLGPL', 'deprecated': False}, - 'llvm-exception': {'id': 'LLVM-exception', 'deprecated': False}, - 'lzma-exception': {'id': 'LZMA-exception', 'deprecated': False}, - 'mif-exception': {'id': 'mif-exception', 'deprecated': False}, - 'mxml-exception': {'id': 'mxml-exception', 'deprecated': False}, - 'nokia-qt-exception-1.1': {'id': 'Nokia-Qt-exception-1.1', 'deprecated': True}, - 'ocaml-lgpl-linking-exception': {'id': 'OCaml-LGPL-linking-exception', 'deprecated': False}, - 'occt-exception-1.0': {'id': 'OCCT-exception-1.0', 'deprecated': False}, - 'openjdk-assembly-exception-1.0': {'id': 'OpenJDK-assembly-exception-1.0', 'deprecated': False}, - 'openvpn-openssl-exception': {'id': 'openvpn-openssl-exception', 'deprecated': False}, - 'pcre2-exception': {'id': 'PCRE2-exception', 'deprecated': False}, - 'polyparse-exception': {'id': 'polyparse-exception', 'deprecated': False}, - 'ps-or-pdf-font-exception-20170817': {'id': 'PS-or-PDF-font-exception-20170817', 'deprecated': False}, - 'qpl-1.0-inria-2004-exception': {'id': 'QPL-1.0-INRIA-2004-exception', 'deprecated': False}, - 'qt-gpl-exception-1.0': {'id': 'Qt-GPL-exception-1.0', 'deprecated': False}, - 'qt-lgpl-exception-1.1': {'id': 'Qt-LGPL-exception-1.1', 'deprecated': False}, - 'qwt-exception-1.0': {'id': 'Qwt-exception-1.0', 'deprecated': False}, - 'romic-exception': {'id': 'romic-exception', 'deprecated': False}, - 'rrdtool-floss-exception-2.0': {'id': 'RRDtool-FLOSS-exception-2.0', 'deprecated': False}, - 'sane-exception': {'id': 'SANE-exception', 'deprecated': False}, - 'shl-2.0': {'id': 'SHL-2.0', 'deprecated': False}, - 'shl-2.1': {'id': 'SHL-2.1', 'deprecated': False}, - 'stunnel-exception': {'id': 'stunnel-exception', 'deprecated': False}, - 'swi-exception': {'id': 'SWI-exception', 'deprecated': False}, - 'swift-exception': {'id': 'Swift-exception', 'deprecated': False}, - 'texinfo-exception': {'id': 'Texinfo-exception', 'deprecated': False}, - 'u-boot-exception-2.0': {'id': 'u-boot-exception-2.0', 'deprecated': False}, - 'ubdl-exception': {'id': 'UBDL-exception', 'deprecated': False}, - 'universal-foss-exception-1.0': {'id': 'Universal-FOSS-exception-1.0', 'deprecated': False}, - 'vsftpd-openssl-exception': {'id': 'vsftpd-openssl-exception', 'deprecated': False}, - 'wxwindows-exception-3.1': {'id': 'WxWindows-exception-3.1', 'deprecated': False}, - 'x11vnc-openssl-exception': {'id': 'x11vnc-openssl-exception', 'deprecated': False}, -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/markers.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/markers.py deleted file mode 100644 index ca3706fe4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/markers.py +++ /dev/null @@ -1,388 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import operator -import os -import platform -import sys -from typing import AbstractSet, Callable, Literal, Mapping, TypedDict, Union, cast - -from ._parser import MarkerAtom, MarkerList, Op, Value, Variable -from ._parser import parse_marker as _parse_marker -from ._tokenizer import ParserSyntaxError -from .specifiers import InvalidSpecifier, Specifier -from .utils import canonicalize_name - -__all__ = [ - "Environment", - "EvaluateContext", - "InvalidMarker", - "Marker", - "UndefinedComparison", - "UndefinedEnvironmentName", - "default_environment", -] - -Operator = Callable[[str, Union[str, AbstractSet[str]]], bool] -EvaluateContext = Literal["metadata", "lock_file", "requirement"] -MARKERS_ALLOWING_SET = {"extras", "dependency_groups"} -MARKERS_REQUIRING_VERSION = { - "implementation_version", - "platform_release", - "python_full_version", - "python_version", -} - - -class InvalidMarker(ValueError): - """ - An invalid marker was found, users should refer to PEP 508. - """ - - -class UndefinedComparison(ValueError): - """ - An invalid operation was attempted on a value that doesn't support it. - """ - - -class UndefinedEnvironmentName(ValueError): - """ - A name was attempted to be used that does not exist inside of the - environment. - """ - - -class Environment(TypedDict): - implementation_name: str - """The implementation's identifier, e.g. ``'cpython'``.""" - - implementation_version: str - """ - The implementation's version, e.g. ``'3.13.0a2'`` for CPython 3.13.0a2, or - ``'7.3.13'`` for PyPy3.10 v7.3.13. - """ - - os_name: str - """ - The value of :py:data:`os.name`. The name of the operating system dependent module - imported, e.g. ``'posix'``. - """ - - platform_machine: str - """ - Returns the machine type, e.g. ``'i386'``. - - An empty string if the value cannot be determined. - """ - - platform_release: str - """ - The system's release, e.g. ``'2.2.0'`` or ``'NT'``. - - An empty string if the value cannot be determined. - """ - - platform_system: str - """ - The system/OS name, e.g. ``'Linux'``, ``'Windows'`` or ``'Java'``. - - An empty string if the value cannot be determined. - """ - - platform_version: str - """ - The system's release version, e.g. ``'#3 on degas'``. - - An empty string if the value cannot be determined. - """ - - python_full_version: str - """ - The Python version as string ``'major.minor.patchlevel'``. - - Note that unlike the Python :py:data:`sys.version`, this value will always include - the patchlevel (it defaults to 0). - """ - - platform_python_implementation: str - """ - A string identifying the Python implementation, e.g. ``'CPython'``. - """ - - python_version: str - """The Python version as string ``'major.minor'``.""" - - sys_platform: str - """ - This string contains a platform identifier that can be used to append - platform-specific components to :py:data:`sys.path`, for instance. - - For Unix systems, except on Linux and AIX, this is the lowercased OS name as - returned by ``uname -s`` with the first part of the version as returned by - ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, at the time when Python - was built. - """ - - -def _normalize_extras( - result: MarkerList | MarkerAtom | str, -) -> MarkerList | MarkerAtom | str: - if not isinstance(result, tuple): - return result - - lhs, op, rhs = result - if isinstance(lhs, Variable) and lhs.value == "extra": - normalized_extra = canonicalize_name(rhs.value) - rhs = Value(normalized_extra) - elif isinstance(rhs, Variable) and rhs.value == "extra": - normalized_extra = canonicalize_name(lhs.value) - lhs = Value(normalized_extra) - return lhs, op, rhs - - -def _normalize_extra_values(results: MarkerList) -> MarkerList: - """ - Normalize extra values. - """ - - return [_normalize_extras(r) for r in results] - - -def _format_marker( - marker: list[str] | MarkerAtom | str, first: bool | None = True -) -> str: - assert isinstance(marker, (list, tuple, str)) - - # Sometimes we have a structure like [[...]] which is a single item list - # where the single item is itself it's own list. In that case we want skip - # the rest of this function so that we don't get extraneous () on the - # outside. - if ( - isinstance(marker, list) - and len(marker) == 1 - and isinstance(marker[0], (list, tuple)) - ): - return _format_marker(marker[0]) - - if isinstance(marker, list): - inner = (_format_marker(m, first=False) for m in marker) - if first: - return " ".join(inner) - else: - return "(" + " ".join(inner) + ")" - elif isinstance(marker, tuple): - return " ".join([m.serialize() for m in marker]) - else: - return marker - - -_operators: dict[str, Operator] = { - "in": lambda lhs, rhs: lhs in rhs, - "not in": lambda lhs, rhs: lhs not in rhs, - "<": lambda _lhs, _rhs: False, - "<=": operator.eq, - "==": operator.eq, - "!=": operator.ne, - ">=": operator.eq, - ">": lambda _lhs, _rhs: False, -} - - -def _eval_op(lhs: str, op: Op, rhs: str | AbstractSet[str], *, key: str) -> bool: - op_str = op.serialize() - if key in MARKERS_REQUIRING_VERSION: - try: - spec = Specifier(f"{op_str}{rhs}") - except InvalidSpecifier: - pass - else: - return spec.contains(lhs, prereleases=True) - - oper: Operator | None = _operators.get(op_str) - if oper is None: - raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.") - - return oper(lhs, rhs) - - -def _normalize( - lhs: str, rhs: str | AbstractSet[str], key: str -) -> tuple[str, str | AbstractSet[str]]: - # PEP 685 - Comparison of extra names for optional distribution dependencies - # https://peps.python.org/pep-0685/ - # > When comparing extra names, tools MUST normalize the names being - # > compared using the semantics outlined in PEP 503 for names - if key == "extra": - assert isinstance(rhs, str), "extra value must be a string" - # Both sides are normalized at this point already - return (lhs, rhs) - if key in MARKERS_ALLOWING_SET: - if isinstance(rhs, str): # pragma: no cover - return (canonicalize_name(lhs), canonicalize_name(rhs)) - else: - return (canonicalize_name(lhs), {canonicalize_name(v) for v in rhs}) - - # other environment markers don't have such standards - return lhs, rhs - - -def _evaluate_markers( - markers: MarkerList, environment: dict[str, str | AbstractSet[str]] -) -> bool: - groups: list[list[bool]] = [[]] - - for marker in markers: - if isinstance(marker, list): - groups[-1].append(_evaluate_markers(marker, environment)) - elif isinstance(marker, tuple): - lhs, op, rhs = marker - - if isinstance(lhs, Variable): - environment_key = lhs.value - lhs_value = environment[environment_key] - rhs_value = rhs.value - else: - lhs_value = lhs.value - environment_key = rhs.value - rhs_value = environment[environment_key] - - assert isinstance(lhs_value, str), "lhs must be a string" - lhs_value, rhs_value = _normalize(lhs_value, rhs_value, key=environment_key) - groups[-1].append(_eval_op(lhs_value, op, rhs_value, key=environment_key)) - elif marker == "or": - groups.append([]) - elif marker == "and": - pass - else: # pragma: nocover - raise TypeError(f"Unexpected marker {marker!r}") - - return any(all(item) for item in groups) - - -def format_full_version(info: sys._version_info) -> str: - version = f"{info.major}.{info.minor}.{info.micro}" - kind = info.releaselevel - if kind != "final": - version += kind[0] + str(info.serial) - return version - - -def default_environment() -> Environment: - iver = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - return { - "implementation_name": implementation_name, - "implementation_version": iver, - "os_name": os.name, - "platform_machine": platform.machine(), - "platform_release": platform.release(), - "platform_system": platform.system(), - "platform_version": platform.version(), - "python_full_version": platform.python_version(), - "platform_python_implementation": platform.python_implementation(), - "python_version": ".".join(platform.python_version_tuple()[:2]), - "sys_platform": sys.platform, - } - - -class Marker: - def __init__(self, marker: str) -> None: - # Note: We create a Marker object without calling this constructor in - # packaging.requirements.Requirement. If any additional logic is - # added here, make sure to mirror/adapt Requirement. - - # If this fails and throws an error, the repr still expects _markers to - # be defined. - self._markers: MarkerList = [] - - try: - self._markers = _normalize_extra_values(_parse_marker(marker)) - # The attribute `_markers` can be described in terms of a recursive type: - # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]] - # - # For example, the following expression: - # python_version > "3.6" or (python_version == "3.6" and os_name == "unix") - # - # is parsed into: - # [ - # (<Variable('python_version')>, <Op('>')>, <Value('3.6')>), - # 'and', - # [ - # (<Variable('python_version')>, <Op('==')>, <Value('3.6')>), - # 'or', - # (<Variable('os_name')>, <Op('==')>, <Value('unix')>) - # ] - # ] - except ParserSyntaxError as e: - raise InvalidMarker(str(e)) from e - - def __str__(self) -> str: - return _format_marker(self._markers) - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}('{self}')>" - - def __hash__(self) -> int: - return hash(str(self)) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Marker): - return NotImplemented - - return str(self) == str(other) - - def evaluate( - self, - environment: Mapping[str, str | AbstractSet[str]] | None = None, - context: EvaluateContext = "metadata", - ) -> bool: - """Evaluate a marker. - - Return the boolean from evaluating the given marker against the - environment. environment is an optional argument to override all or - part of the determined environment. The *context* parameter specifies what - context the markers are being evaluated for, which influences what markers - are considered valid. Acceptable values are "metadata" (for core metadata; - default), "lock_file", and "requirement" (i.e. all other situations). - - The environment is determined from the current Python process. - """ - current_environment = cast( - "dict[str, str | AbstractSet[str]]", default_environment() - ) - if context == "lock_file": - current_environment.update( - extras=frozenset(), dependency_groups=frozenset() - ) - elif context == "metadata": - current_environment["extra"] = "" - - if environment is not None: - current_environment.update(environment) - if "extra" in current_environment: - # The API used to allow setting extra to None. We need to handle - # this case for backwards compatibility. Also skip running - # normalize name if extra is empty. - extra = cast("str | None", current_environment["extra"]) - current_environment["extra"] = canonicalize_name(extra) if extra else "" - - return _evaluate_markers( - self._markers, _repair_python_full_version(current_environment) - ) - - -def _repair_python_full_version( - env: dict[str, str | AbstractSet[str]], -) -> dict[str, str | AbstractSet[str]]: - """ - Work around platform.python_version() returning something that is not PEP 440 - compliant for non-tagged Python builds. - """ - python_full_version = cast("str", env["python_full_version"]) - if python_full_version.endswith("+"): - env["python_full_version"] = f"{python_full_version}local" - return env diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/metadata.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/metadata.py deleted file mode 100644 index 253f6b1b7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/metadata.py +++ /dev/null @@ -1,978 +0,0 @@ -from __future__ import annotations - -import email.feedparser -import email.header -import email.message -import email.parser -import email.policy -import keyword -import pathlib -import sys -import typing -from typing import ( - Any, - Callable, - Generic, - Literal, - TypedDict, - cast, -) - -from . import licenses, requirements, specifiers, utils -from . import version as version_module - -if typing.TYPE_CHECKING: - from .licenses import NormalizedLicenseExpression - -T = typing.TypeVar("T") - - -if sys.version_info >= (3, 11): # pragma: no cover - ExceptionGroup = ExceptionGroup # noqa: F821 -else: # pragma: no cover - - class ExceptionGroup(Exception): - """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. - - If :external:exc:`ExceptionGroup` is already defined by Python itself, - that version is used instead. - """ - - message: str - exceptions: list[Exception] - - def __init__(self, message: str, exceptions: list[Exception]) -> None: - self.message = message - self.exceptions = exceptions - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})" - - -class InvalidMetadata(ValueError): - """A metadata field contains invalid data.""" - - field: str - """The name of the field that contains invalid data.""" - - def __init__(self, field: str, message: str) -> None: - self.field = field - super().__init__(message) - - -# The RawMetadata class attempts to make as few assumptions about the underlying -# serialization formats as possible. The idea is that as long as a serialization -# formats offer some very basic primitives in *some* way then we can support -# serializing to and from that format. -class RawMetadata(TypedDict, total=False): - """A dictionary of raw core metadata. - - Each field in core metadata maps to a key of this dictionary (when data is - provided). The key is lower-case and underscores are used instead of dashes - compared to the equivalent core metadata field. Any core metadata field that - can be specified multiple times or can hold multiple values in a single - field have a key with a plural name. See :class:`Metadata` whose attributes - match the keys of this dictionary. - - Core metadata fields that can be specified multiple times are stored as a - list or dict depending on which is appropriate for the field. Any fields - which hold multiple values in a single field are stored as a list. - - """ - - # Metadata 1.0 - PEP 241 - metadata_version: str - name: str - version: str - platforms: list[str] - summary: str - description: str - keywords: list[str] - home_page: str - author: str - author_email: str - license: str - - # Metadata 1.1 - PEP 314 - supported_platforms: list[str] - download_url: str - classifiers: list[str] - requires: list[str] - provides: list[str] - obsoletes: list[str] - - # Metadata 1.2 - PEP 345 - maintainer: str - maintainer_email: str - requires_dist: list[str] - provides_dist: list[str] - obsoletes_dist: list[str] - requires_python: str - requires_external: list[str] - project_urls: dict[str, str] - - # Metadata 2.0 - # PEP 426 attempted to completely revamp the metadata format - # but got stuck without ever being able to build consensus on - # it and ultimately ended up withdrawn. - # - # However, a number of tools had started emitting METADATA with - # `2.0` Metadata-Version, so for historical reasons, this version - # was skipped. - - # Metadata 2.1 - PEP 566 - description_content_type: str - provides_extra: list[str] - - # Metadata 2.2 - PEP 643 - dynamic: list[str] - - # Metadata 2.3 - PEP 685 - # No new fields were added in PEP 685, just some edge case were - # tightened up to provide better interoperability. - - # Metadata 2.4 - PEP 639 - license_expression: str - license_files: list[str] - - # Metadata 2.5 - PEP 794 - import_names: list[str] - import_namespaces: list[str] - - -# 'keywords' is special as it's a string in the core metadata spec, but we -# represent it as a list. -_STRING_FIELDS = { - "author", - "author_email", - "description", - "description_content_type", - "download_url", - "home_page", - "license", - "license_expression", - "maintainer", - "maintainer_email", - "metadata_version", - "name", - "requires_python", - "summary", - "version", -} - -_LIST_FIELDS = { - "classifiers", - "dynamic", - "license_files", - "obsoletes", - "obsoletes_dist", - "platforms", - "provides", - "provides_dist", - "provides_extra", - "requires", - "requires_dist", - "requires_external", - "supported_platforms", - "import_names", - "import_namespaces", -} - -_DICT_FIELDS = { - "project_urls", -} - - -def _parse_keywords(data: str) -> list[str]: - """Split a string of comma-separated keywords into a list of keywords.""" - return [k.strip() for k in data.split(",")] - - -def _parse_project_urls(data: list[str]) -> dict[str, str]: - """Parse a list of label/URL string pairings separated by a comma.""" - urls = {} - for pair in data: - # Our logic is slightly tricky here as we want to try and do - # *something* reasonable with malformed data. - # - # The main thing that we have to worry about, is data that does - # not have a ',' at all to split the label from the Value. There - # isn't a singular right answer here, and we will fail validation - # later on (if the caller is validating) so it doesn't *really* - # matter, but since the missing value has to be an empty str - # and our return value is dict[str, str], if we let the key - # be the missing value, then they'd have multiple '' values that - # overwrite each other in a accumulating dict. - # - # The other potential issue is that it's possible to have the - # same label multiple times in the metadata, with no solid "right" - # answer with what to do in that case. As such, we'll do the only - # thing we can, which is treat the field as unparsable and add it - # to our list of unparsed fields. - # - # TODO: The spec doesn't say anything about if the keys should be - # considered case sensitive or not... logically they should - # be case-preserving and case-insensitive, but doing that - # would open up more cases where we might have duplicate - # entries. - label, _, url = (s.strip() for s in pair.partition(",")) - - if label in urls: - # The label already exists in our set of urls, so this field - # is unparsable, and we can just add the whole thing to our - # unparsable data and stop processing it. - raise KeyError("duplicate labels in project urls") - urls[label] = url - - return urls - - -def _get_payload(msg: email.message.Message, source: bytes | str) -> str: - """Get the body of the message.""" - # If our source is a str, then our caller has managed encodings for us, - # and we don't need to deal with it. - if isinstance(source, str): - payload = msg.get_payload() - assert isinstance(payload, str) - return payload - # If our source is a bytes, then we're managing the encoding and we need - # to deal with it. - else: - bpayload = msg.get_payload(decode=True) - assert isinstance(bpayload, bytes) - try: - return bpayload.decode("utf8", "strict") - except UnicodeDecodeError as exc: - raise ValueError("payload in an invalid encoding") from exc - - -# The various parse_FORMAT functions here are intended to be as lenient as -# possible in their parsing, while still returning a correctly typed -# RawMetadata. -# -# To aid in this, we also generally want to do as little touching of the -# data as possible, except where there are possibly some historic holdovers -# that make valid data awkward to work with. -# -# While this is a lower level, intermediate format than our ``Metadata`` -# class, some light touch ups can make a massive difference in usability. - -# Map METADATA fields to RawMetadata. -_EMAIL_TO_RAW_MAPPING = { - "author": "author", - "author-email": "author_email", - "classifier": "classifiers", - "description": "description", - "description-content-type": "description_content_type", - "download-url": "download_url", - "dynamic": "dynamic", - "home-page": "home_page", - "import-name": "import_names", - "import-namespace": "import_namespaces", - "keywords": "keywords", - "license": "license", - "license-expression": "license_expression", - "license-file": "license_files", - "maintainer": "maintainer", - "maintainer-email": "maintainer_email", - "metadata-version": "metadata_version", - "name": "name", - "obsoletes": "obsoletes", - "obsoletes-dist": "obsoletes_dist", - "platform": "platforms", - "project-url": "project_urls", - "provides": "provides", - "provides-dist": "provides_dist", - "provides-extra": "provides_extra", - "requires": "requires", - "requires-dist": "requires_dist", - "requires-external": "requires_external", - "requires-python": "requires_python", - "summary": "summary", - "supported-platform": "supported_platforms", - "version": "version", -} -_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()} - - -# This class is for writing RFC822 messages -class RFC822Policy(email.policy.EmailPolicy): - """ - This is :class:`email.policy.EmailPolicy`, but with a simple ``header_store_parse`` - implementation that handles multi-line values, and some nice defaults. - """ - - utf8 = True - mangle_from_ = False - max_line_length = 0 - - def header_store_parse(self, name: str, value: str) -> tuple[str, str]: - size = len(name) + 2 - value = value.replace("\n", "\n" + " " * size) - return (name, value) - - -# This class is for writing RFC822 messages -class RFC822Message(email.message.EmailMessage): - """ - This is :class:`email.message.EmailMessage` with two small changes: it defaults to - our `RFC822Policy`, and it correctly writes unicode when being called - with `bytes()`. - """ - - def __init__(self) -> None: - super().__init__(policy=RFC822Policy()) - - def as_bytes( - self, unixfrom: bool = False, policy: email.policy.Policy | None = None - ) -> bytes: - """ - Return the bytes representation of the message. - - This handles unicode encoding. - """ - return self.as_string(unixfrom, policy=policy).encode("utf-8") - - -def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]: - """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). - - This function returns a two-item tuple of dicts. The first dict is of - recognized fields from the core metadata specification. Fields that can be - parsed and translated into Python's built-in types are converted - appropriately. All other fields are left as-is. Fields that are allowed to - appear multiple times are stored as lists. - - The second dict contains all other fields from the metadata. This includes - any unrecognized fields. It also includes any fields which are expected to - be parsed into a built-in type but were not formatted appropriately. Finally, - any fields that are expected to appear only once but are repeated are - included in this dict. - - """ - raw: dict[str, str | list[str] | dict[str, str]] = {} - unparsed: dict[str, list[str]] = {} - - if isinstance(data, str): - parsed = email.parser.Parser(policy=email.policy.compat32).parsestr(data) - else: - parsed = email.parser.BytesParser(policy=email.policy.compat32).parsebytes(data) - - # We have to wrap parsed.keys() in a set, because in the case of multiple - # values for a key (a list), the key will appear multiple times in the - # list of keys, but we're avoiding that by using get_all(). - for name_with_case in frozenset(parsed.keys()): - # Header names in RFC are case insensitive, so we'll normalize to all - # lower case to make comparisons easier. - name = name_with_case.lower() - - # We use get_all() here, even for fields that aren't multiple use, - # because otherwise someone could have e.g. two Name fields, and we - # would just silently ignore it rather than doing something about it. - headers = parsed.get_all(name) or [] - - # The way the email module works when parsing bytes is that it - # unconditionally decodes the bytes as ascii using the surrogateescape - # handler. When you pull that data back out (such as with get_all() ), - # it looks to see if the str has any surrogate escapes, and if it does - # it wraps it in a Header object instead of returning the string. - # - # As such, we'll look for those Header objects, and fix up the encoding. - value = [] - # Flag if we have run into any issues processing the headers, thus - # signalling that the data belongs in 'unparsed'. - valid_encoding = True - for h in headers: - # It's unclear if this can return more types than just a Header or - # a str, so we'll just assert here to make sure. - assert isinstance(h, (email.header.Header, str)) - - # If it's a header object, we need to do our little dance to get - # the real data out of it. In cases where there is invalid data - # we're going to end up with mojibake, but there's no obvious, good - # way around that without reimplementing parts of the Header object - # ourselves. - # - # That should be fine since, if mojibacked happens, this key is - # going into the unparsed dict anyways. - if isinstance(h, email.header.Header): - # The Header object stores it's data as chunks, and each chunk - # can be independently encoded, so we'll need to check each - # of them. - chunks: list[tuple[bytes, str | None]] = [] - for binary, _encoding in email.header.decode_header(h): - try: - binary.decode("utf8", "strict") - except UnicodeDecodeError: - # Enable mojibake. - encoding = "latin1" - valid_encoding = False - else: - encoding = "utf8" - chunks.append((binary, encoding)) - - # Turn our chunks back into a Header object, then let that - # Header object do the right thing to turn them into a - # string for us. - value.append(str(email.header.make_header(chunks))) - # This is already a string, so just add it. - else: - value.append(h) - - # We've processed all of our values to get them into a list of str, - # but we may have mojibake data, in which case this is an unparsed - # field. - if not valid_encoding: - unparsed[name] = value - continue - - raw_name = _EMAIL_TO_RAW_MAPPING.get(name) - if raw_name is None: - # This is a bit of a weird situation, we've encountered a key that - # we don't know what it means, so we don't know whether it's meant - # to be a list or not. - # - # Since we can't really tell one way or another, we'll just leave it - # as a list, even though it may be a single item list, because that's - # what makes the most sense for email headers. - unparsed[name] = value - continue - - # If this is one of our string fields, then we'll check to see if our - # value is a list of a single item. If it is then we'll assume that - # it was emitted as a single string, and unwrap the str from inside - # the list. - # - # If it's any other kind of data, then we haven't the faintest clue - # what we should parse it as, and we have to just add it to our list - # of unparsed stuff. - if raw_name in _STRING_FIELDS and len(value) == 1: - raw[raw_name] = value[0] - # If this is import_names, we need to special case the empty field - # case, which converts to an empty list instead of None. We can't let - # the empty case slip through, as it will fail validation. - elif raw_name == "import_names" and value == [""]: - raw[raw_name] = [] - # If this is one of our list of string fields, then we can just assign - # the value, since email *only* has strings, and our get_all() call - # above ensures that this is a list. - elif raw_name in _LIST_FIELDS: - raw[raw_name] = value - # Special Case: Keywords - # The keywords field is implemented in the metadata spec as a str, - # but it conceptually is a list of strings, and is serialized using - # ", ".join(keywords), so we'll do some light data massaging to turn - # this into what it logically is. - elif raw_name == "keywords" and len(value) == 1: - raw[raw_name] = _parse_keywords(value[0]) - # Special Case: Project-URL - # The project urls is implemented in the metadata spec as a list of - # specially-formatted strings that represent a key and a value, which - # is fundamentally a mapping, however the email format doesn't support - # mappings in a sane way, so it was crammed into a list of strings - # instead. - # - # We will do a little light data massaging to turn this into a map as - # it logically should be. - elif raw_name == "project_urls": - try: - raw[raw_name] = _parse_project_urls(value) - except KeyError: - unparsed[name] = value - # Nothing that we've done has managed to parse this, so it'll just - # throw it in our unparsable data and move on. - else: - unparsed[name] = value - - # We need to support getting the Description from the message payload in - # addition to getting it from the the headers. This does mean, though, there - # is the possibility of it being set both ways, in which case we put both - # in 'unparsed' since we don't know which is right. - try: - payload = _get_payload(parsed, data) - except ValueError: - unparsed.setdefault("description", []).append( - parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload] - ) - else: - if payload: - # Check to see if we've already got a description, if so then both - # it, and this body move to unparsable. - if "description" in raw: - description_header = cast("str", raw.pop("description")) - unparsed.setdefault("description", []).extend( - [description_header, payload] - ) - elif "description" in unparsed: - unparsed["description"].append(payload) - else: - raw["description"] = payload - - # We need to cast our `raw` to a metadata, because a TypedDict only support - # literal key names, but we're computing our key names on purpose, but the - # way this function is implemented, our `TypedDict` can only have valid key - # names. - return cast("RawMetadata", raw), unparsed - - -_NOT_FOUND = object() - - -# Keep the two values in sync. -_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4", "2.5"] -_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4", "2.5"] - -_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"]) - - -class _Validator(Generic[T]): - """Validate a metadata field. - - All _process_*() methods correspond to a core metadata field. The method is - called with the field's raw value. If the raw value is valid it is returned - in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). - If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause - as appropriate). - """ - - name: str - raw_name: str - added: _MetadataVersion - - def __init__( - self, - *, - added: _MetadataVersion = "1.0", - ) -> None: - self.added = added - - def __set_name__(self, _owner: Metadata, name: str) -> None: - self.name = name - self.raw_name = _RAW_TO_EMAIL_MAPPING[name] - - def __get__(self, instance: Metadata, _owner: type[Metadata]) -> T: - # With Python 3.8, the caching can be replaced with functools.cached_property(). - # No need to check the cache as attribute lookup will resolve into the - # instance's __dict__ before __get__ is called. - cache = instance.__dict__ - value = instance._raw.get(self.name) - - # To make the _process_* methods easier, we'll check if the value is None - # and if this field is NOT a required attribute, and if both of those - # things are true, we'll skip the the converter. This will mean that the - # converters never have to deal with the None union. - if self.name in _REQUIRED_ATTRS or value is not None: - try: - converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}") - except AttributeError: - pass - else: - value = converter(value) - - cache[self.name] = value - try: - del instance._raw[self.name] # type: ignore[misc] - except KeyError: - pass - - return cast("T", value) - - def _invalid_metadata( - self, msg: str, cause: Exception | None = None - ) -> InvalidMetadata: - exc = InvalidMetadata( - self.raw_name, msg.format_map({"field": repr(self.raw_name)}) - ) - exc.__cause__ = cause - return exc - - def _process_metadata_version(self, value: str) -> _MetadataVersion: - # Implicitly makes Metadata-Version required. - if value not in _VALID_METADATA_VERSIONS: - raise self._invalid_metadata(f"{value!r} is not a valid metadata version") - return cast("_MetadataVersion", value) - - def _process_name(self, value: str) -> str: - if not value: - raise self._invalid_metadata("{field} is a required field") - # Validate the name as a side-effect. - try: - utils.canonicalize_name(value, validate=True) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return value - - def _process_version(self, value: str) -> version_module.Version: - if not value: - raise self._invalid_metadata("{field} is a required field") - try: - return version_module.parse(value) - except version_module.InvalidVersion as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_summary(self, value: str) -> str: - """Check the field contains no newlines.""" - if "\n" in value: - raise self._invalid_metadata("{field} must be a single line") - return value - - def _process_description_content_type(self, value: str) -> str: - content_types = {"text/plain", "text/x-rst", "text/markdown"} - message = email.message.EmailMessage() - message["content-type"] = value - - content_type, parameters = ( - # Defaults to `text/plain` if parsing failed. - message.get_content_type().lower(), - message["content-type"].params, - ) - # Check if content-type is valid or defaulted to `text/plain` and thus was - # not parseable. - if content_type not in content_types or content_type not in value.lower(): - raise self._invalid_metadata( - f"{{field}} must be one of {list(content_types)}, not {value!r}" - ) - - charset = parameters.get("charset", "UTF-8") - if charset != "UTF-8": - raise self._invalid_metadata( - f"{{field}} can only specify the UTF-8 charset, not {list(charset)}" - ) - - markdown_variants = {"GFM", "CommonMark"} - variant = parameters.get("variant", "GFM") # Use an acceptable default. - if content_type == "text/markdown" and variant not in markdown_variants: - raise self._invalid_metadata( - f"valid Markdown variants for {{field}} are {list(markdown_variants)}, " - f"not {variant!r}", - ) - return value - - def _process_dynamic(self, value: list[str]) -> list[str]: - for dynamic_field in map(str.lower, value): - if dynamic_field in {"name", "version", "metadata-version"}: - raise self._invalid_metadata( - f"{dynamic_field!r} is not allowed as a dynamic field" - ) - elif dynamic_field not in _EMAIL_TO_RAW_MAPPING: - raise self._invalid_metadata( - f"{dynamic_field!r} is not a valid dynamic field" - ) - return list(map(str.lower, value)) - - def _process_provides_extra( - self, - value: list[str], - ) -> list[utils.NormalizedName]: - normalized_names = [] - try: - for name in value: - normalized_names.append(utils.canonicalize_name(name, validate=True)) - except utils.InvalidName as exc: - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return normalized_names - - def _process_requires_python(self, value: str) -> specifiers.SpecifierSet: - try: - return specifiers.SpecifierSet(value) - except specifiers.InvalidSpecifier as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_requires_dist( - self, - value: list[str], - ) -> list[requirements.Requirement]: - reqs = [] - try: - for req in value: - reqs.append(requirements.Requirement(req)) - except requirements.InvalidRequirement as exc: - raise self._invalid_metadata( - f"{req!r} is invalid for {{field}}", cause=exc - ) from exc - else: - return reqs - - def _process_license_expression(self, value: str) -> NormalizedLicenseExpression: - try: - return licenses.canonicalize_license_expression(value) - except ValueError as exc: - raise self._invalid_metadata( - f"{value!r} is invalid for {{field}}", cause=exc - ) from exc - - def _process_license_files(self, value: list[str]) -> list[str]: - paths = [] - for path in value: - if ".." in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, " - "parent directory indicators are not allowed" - ) - if "*" in path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be resolved" - ) - if ( - pathlib.PurePosixPath(path).is_absolute() - or pathlib.PureWindowsPath(path).is_absolute() - ): - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must be relative" - ) - if pathlib.PureWindowsPath(path).as_posix() != path: - raise self._invalid_metadata( - f"{path!r} is invalid for {{field}}, paths must use '/' delimiter" - ) - paths.append(path) - return paths - - def _process_import_names(self, value: list[str]) -> list[str]: - for import_name in value: - name, semicolon, private = import_name.partition(";") - name = name.rstrip() - for identifier in name.split("."): - if not identifier.isidentifier(): - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}; " - f"{identifier!r} is not a valid identifier" - ) - elif keyword.iskeyword(identifier): - raise self._invalid_metadata( - f"{name!r} is invalid for {{field}}; " - f"{identifier!r} is a keyword" - ) - if semicolon and private.lstrip() != "private": - raise self._invalid_metadata( - f"{import_name!r} is invalid for {{field}}; " - "the only valid option is 'private'" - ) - return value - - _process_import_namespaces = _process_import_names - - -class Metadata: - """Representation of distribution metadata. - - Compared to :class:`RawMetadata`, this class provides objects representing - metadata fields instead of only using built-in types. Any invalid metadata - will cause :exc:`InvalidMetadata` to be raised (with a - :py:attr:`~BaseException.__cause__` attribute as appropriate). - """ - - _raw: RawMetadata - - @classmethod - def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> Metadata: - """Create an instance from :class:`RawMetadata`. - - If *validate* is true, all metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - ins = cls() - ins._raw = data.copy() # Mutations occur due to caching enriched values. - - if validate: - exceptions: list[Exception] = [] - try: - metadata_version = ins.metadata_version - metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version) - except InvalidMetadata as metadata_version_exc: - exceptions.append(metadata_version_exc) - metadata_version = None - - # Make sure to check for the fields that are present, the required - # fields (so their absence can be reported). - fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS - # Remove fields that have already been checked. - fields_to_check -= {"metadata_version"} - - for key in fields_to_check: - try: - if metadata_version: - # Can't use getattr() as that triggers descriptor protocol which - # will fail due to no value for the instance argument. - try: - field_metadata_version = cls.__dict__[key].added - except KeyError: - exc = InvalidMetadata(key, f"unrecognized field: {key!r}") - exceptions.append(exc) - continue - field_age = _VALID_METADATA_VERSIONS.index( - field_metadata_version - ) - if field_age > metadata_age: - field = _RAW_TO_EMAIL_MAPPING[key] - exc = InvalidMetadata( - field, - f"{field} introduced in metadata version " - f"{field_metadata_version}, not {metadata_version}", - ) - exceptions.append(exc) - continue - getattr(ins, key) - except InvalidMetadata as exc: - exceptions.append(exc) - - if exceptions: - raise ExceptionGroup("invalid metadata", exceptions) - - return ins - - @classmethod - def from_email(cls, data: bytes | str, *, validate: bool = True) -> Metadata: - """Parse metadata from email headers. - - If *validate* is true, the metadata will be validated. All exceptions - related to validation will be gathered and raised as an :class:`ExceptionGroup`. - """ - raw, unparsed = parse_email(data) - - if validate: - exceptions: list[Exception] = [] - for unparsed_key in unparsed: - if unparsed_key in _EMAIL_TO_RAW_MAPPING: - message = f"{unparsed_key!r} has invalid data" - else: - message = f"unrecognized field: {unparsed_key!r}" - exceptions.append(InvalidMetadata(unparsed_key, message)) - - if exceptions: - raise ExceptionGroup("unparsed", exceptions) - - try: - return cls.from_raw(raw, validate=validate) - except ExceptionGroup as exc_group: - raise ExceptionGroup( - "invalid or unparsed metadata", exc_group.exceptions - ) from None - - metadata_version: _Validator[_MetadataVersion] = _Validator() - """:external:ref:`core-metadata-metadata-version` - (required; validated to be a valid metadata version)""" - # `name` is not normalized/typed to NormalizedName so as to provide access to - # the original/raw name. - name: _Validator[str] = _Validator() - """:external:ref:`core-metadata-name` - (required; validated using :func:`~packaging.utils.canonicalize_name` and its - *validate* parameter)""" - version: _Validator[version_module.Version] = _Validator() - """:external:ref:`core-metadata-version` (required)""" - dynamic: _Validator[list[str] | None] = _Validator( - added="2.2", - ) - """:external:ref:`core-metadata-dynamic` - (validated against core metadata field names and lowercased)""" - platforms: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-platform`""" - supported_platforms: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-supported-platform`""" - summary: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-summary` (validated to contain no newlines)""" - description: _Validator[str | None] = _Validator() # TODO 2.1: can be in body - """:external:ref:`core-metadata-description`""" - description_content_type: _Validator[str | None] = _Validator(added="2.1") - """:external:ref:`core-metadata-description-content-type` (validated)""" - keywords: _Validator[list[str] | None] = _Validator() - """:external:ref:`core-metadata-keywords`""" - home_page: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-home-page`""" - download_url: _Validator[str | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-download-url`""" - author: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author`""" - author_email: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-author-email`""" - maintainer: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer`""" - maintainer_email: _Validator[str | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-maintainer-email`""" - license: _Validator[str | None] = _Validator() - """:external:ref:`core-metadata-license`""" - license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator( - added="2.4" - ) - """:external:ref:`core-metadata-license-expression`""" - license_files: _Validator[list[str] | None] = _Validator(added="2.4") - """:external:ref:`core-metadata-license-file`""" - classifiers: _Validator[list[str] | None] = _Validator(added="1.1") - """:external:ref:`core-metadata-classifier`""" - requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-dist`""" - requires_python: _Validator[specifiers.SpecifierSet | None] = _Validator( - added="1.2" - ) - """:external:ref:`core-metadata-requires-python`""" - # Because `Requires-External` allows for non-PEP 440 version specifiers, we - # don't do any processing on the values. - requires_external: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-requires-external`""" - project_urls: _Validator[dict[str, str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-project-url`""" - # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation - # regardless of metadata version. - provides_extra: _Validator[list[utils.NormalizedName] | None] = _Validator( - added="2.1", - ) - """:external:ref:`core-metadata-provides-extra`""" - provides_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-provides-dist`""" - obsoletes_dist: _Validator[list[str] | None] = _Validator(added="1.2") - """:external:ref:`core-metadata-obsoletes-dist`""" - import_names: _Validator[list[str] | None] = _Validator(added="2.5") - """:external:ref:`core-metadata-import-name`""" - import_namespaces: _Validator[list[str] | None] = _Validator(added="2.5") - """:external:ref:`core-metadata-import-namespace`""" - requires: _Validator[list[str] | None] = _Validator(added="1.1") - """``Requires`` (deprecated)""" - provides: _Validator[list[str] | None] = _Validator(added="1.1") - """``Provides`` (deprecated)""" - obsoletes: _Validator[list[str] | None] = _Validator(added="1.1") - """``Obsoletes`` (deprecated)""" - - def as_rfc822(self) -> RFC822Message: - """ - Return an RFC822 message with the metadata. - """ - message = RFC822Message() - self._write_metadata(message) - return message - - def _write_metadata(self, message: RFC822Message) -> None: - """ - Return an RFC822 message with the metadata. - """ - for name, validator in self.__class__.__dict__.items(): - if isinstance(validator, _Validator) and name != "description": - value = getattr(self, name) - email_name = _RAW_TO_EMAIL_MAPPING[name] - if value is not None: - if email_name == "project-url": - for label, url in value.items(): - message[email_name] = f"{label}, {url}" - elif email_name == "keywords": - message[email_name] = ",".join(value) - elif email_name == "import-name" and value == []: - message[email_name] = "" - elif isinstance(value, list): - for item in value: - message[email_name] = str(item) - else: - message[email_name] = str(value) - - # The description is a special case because it is in the body of the message. - if self.description is not None: - message.set_payload(self.description) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/pylock.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/pylock.py deleted file mode 100644 index a564f1524..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/pylock.py +++ /dev/null @@ -1,635 +0,0 @@ -from __future__ import annotations - -import dataclasses -import logging -import re -from collections.abc import Mapping, Sequence -from dataclasses import dataclass -from datetime import datetime -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Protocol, - TypeVar, -) - -from .markers import Marker -from .specifiers import SpecifierSet -from .utils import NormalizedName, is_normalized_name -from .version import Version - -if TYPE_CHECKING: # pragma: no cover - from pathlib import Path - - from typing_extensions import Self - -_logger = logging.getLogger(__name__) - -__all__ = [ - "Package", - "PackageArchive", - "PackageDirectory", - "PackageSdist", - "PackageVcs", - "PackageWheel", - "Pylock", - "PylockUnsupportedVersionError", - "PylockValidationError", - "is_valid_pylock_path", -] - -_T = TypeVar("_T") -_T2 = TypeVar("_T2") - - -class _FromMappingProtocol(Protocol): # pragma: no cover - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: ... - - -_FromMappingProtocolT = TypeVar("_FromMappingProtocolT", bound=_FromMappingProtocol) - - -_PYLOCK_FILE_NAME_RE = re.compile(r"^pylock\.([^.]+)\.toml$") - - -def is_valid_pylock_path(path: Path) -> bool: - """Check if the given path is a valid pylock file path.""" - return path.name == "pylock.toml" or bool(_PYLOCK_FILE_NAME_RE.match(path.name)) - - -def _toml_key(key: str) -> str: - return key.replace("_", "-") - - -def _toml_value(key: str, value: Any) -> Any: # noqa: ANN401 - if isinstance(value, (Version, Marker, SpecifierSet)): - return str(value) - if isinstance(value, Sequence) and key == "environments": - return [str(v) for v in value] - return value - - -def _toml_dict_factory(data: list[tuple[str, Any]]) -> dict[str, Any]: - return { - _toml_key(key): _toml_value(key, value) - for key, value in data - if value is not None - } - - -def _get(d: Mapping[str, Any], expected_type: type[_T], key: str) -> _T | None: - """Get a value from the dictionary and verify it's the expected type.""" - if (value := d.get(key)) is None: - return None - if not isinstance(value, expected_type): - raise PylockValidationError( - f"Unexpected type {type(value).__name__} " - f"(expected {expected_type.__name__})", - context=key, - ) - return value - - -def _get_required(d: Mapping[str, Any], expected_type: type[_T], key: str) -> _T: - """Get a required value from the dictionary and verify it's the expected type.""" - if (value := _get(d, expected_type, key)) is None: - raise _PylockRequiredKeyError(key) - return value - - -def _get_sequence( - d: Mapping[str, Any], expected_item_type: type[_T], key: str -) -> Sequence[_T] | None: - """Get a list value from the dictionary and verify it's the expected items type.""" - if (value := _get(d, Sequence, key)) is None: # type: ignore[type-abstract] - return None - if isinstance(value, (str, bytes)): - # special case: str and bytes are Sequences, but we want to reject it - raise PylockValidationError( - f"Unexpected type {type(value).__name__} (expected Sequence)", - context=key, - ) - for i, item in enumerate(value): - if not isinstance(item, expected_item_type): - raise PylockValidationError( - f"Unexpected type {type(item).__name__} " - f"(expected {expected_item_type.__name__})", - context=f"{key}[{i}]", - ) - return value - - -def _get_as( - d: Mapping[str, Any], - expected_type: type[_T], - target_type: Callable[[_T], _T2], - key: str, -) -> _T2 | None: - """Get a value from the dictionary, verify it's the expected type, - and convert to the target type. - - This assumes the target_type constructor accepts the value. - """ - if (value := _get(d, expected_type, key)) is None: - return None - try: - return target_type(value) - except Exception as e: - raise PylockValidationError(e, context=key) from e - - -def _get_required_as( - d: Mapping[str, Any], - expected_type: type[_T], - target_type: Callable[[_T], _T2], - key: str, -) -> _T2: - """Get a required value from the dict, verify it's the expected type, - and convert to the target type.""" - if (value := _get_as(d, expected_type, target_type, key)) is None: - raise _PylockRequiredKeyError(key) - return value - - -def _get_sequence_as( - d: Mapping[str, Any], - expected_item_type: type[_T], - target_item_type: Callable[[_T], _T2], - key: str, -) -> list[_T2] | None: - """Get list value from dictionary and verify expected items type.""" - if (value := _get_sequence(d, expected_item_type, key)) is None: - return None - result = [] - try: - for item in value: - typed_item = target_item_type(item) - result.append(typed_item) - except Exception as e: - raise PylockValidationError(e, context=f"{key}[{len(result)}]") from e - return result - - -def _get_object( - d: Mapping[str, Any], target_type: type[_FromMappingProtocolT], key: str -) -> _FromMappingProtocolT | None: - """Get a dictionary value from the dictionary and convert it to a dataclass.""" - if (value := _get(d, Mapping, key)) is None: # type: ignore[type-abstract] - return None - try: - return target_type._from_dict(value) - except Exception as e: - raise PylockValidationError(e, context=key) from e - - -def _get_sequence_of_objects( - d: Mapping[str, Any], target_item_type: type[_FromMappingProtocolT], key: str -) -> list[_FromMappingProtocolT] | None: - """Get a list value from the dictionary and convert its items to a dataclass.""" - if (value := _get_sequence(d, Mapping, key)) is None: # type: ignore[type-abstract] - return None - result: list[_FromMappingProtocolT] = [] - try: - for item in value: - typed_item = target_item_type._from_dict(item) - result.append(typed_item) - except Exception as e: - raise PylockValidationError(e, context=f"{key}[{len(result)}]") from e - return result - - -def _get_required_sequence_of_objects( - d: Mapping[str, Any], target_item_type: type[_FromMappingProtocolT], key: str -) -> Sequence[_FromMappingProtocolT]: - """Get a required list value from the dictionary and convert its items to a - dataclass.""" - if (result := _get_sequence_of_objects(d, target_item_type, key)) is None: - raise _PylockRequiredKeyError(key) - return result - - -def _validate_normalized_name(name: str) -> NormalizedName: - """Validate that a string is a NormalizedName.""" - if not is_normalized_name(name): - raise PylockValidationError(f"Name {name!r} is not normalized") - return NormalizedName(name) - - -def _validate_path_url(path: str | None, url: str | None) -> None: - if not path and not url: - raise PylockValidationError("path or url must be provided") - - -def _validate_hashes(hashes: Mapping[str, Any]) -> Mapping[str, Any]: - if not hashes: - raise PylockValidationError("At least one hash must be provided") - if not all(isinstance(hash_val, str) for hash_val in hashes.values()): - raise PylockValidationError("Hash values must be strings") - return hashes - - -class PylockValidationError(Exception): - """Raised when when input data is not spec-compliant.""" - - context: str | None = None - message: str - - def __init__( - self, - cause: str | Exception, - *, - context: str | None = None, - ) -> None: - if isinstance(cause, PylockValidationError): - if cause.context: - self.context = ( - f"{context}.{cause.context}" if context else cause.context - ) - else: - self.context = context - self.message = cause.message - else: - self.context = context - self.message = str(cause) - - def __str__(self) -> str: - if self.context: - return f"{self.message} in {self.context!r}" - return self.message - - -class _PylockRequiredKeyError(PylockValidationError): - def __init__(self, key: str) -> None: - super().__init__("Missing required value", context=key) - - -class PylockUnsupportedVersionError(PylockValidationError): - """Raised when encountering an unsupported `lock_version`.""" - - -@dataclass(frozen=True, init=False) -class PackageVcs: - type: str - url: str | None = None - path: str | None = None - requested_revision: str | None = None - commit_id: str # type: ignore[misc] - subdirectory: str | None = None - - def __init__( - self, - *, - type: str, - url: str | None = None, - path: str | None = None, - requested_revision: str | None = None, - commit_id: str, - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "type", type) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "requested_revision", requested_revision) - object.__setattr__(self, "commit_id", commit_id) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_vcs = cls( - type=_get_required(d, str, "type"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - requested_revision=_get(d, str, "requested-revision"), - commit_id=_get_required(d, str, "commit-id"), - subdirectory=_get(d, str, "subdirectory"), - ) - _validate_path_url(package_vcs.path, package_vcs.url) - return package_vcs - - -@dataclass(frozen=True, init=False) -class PackageDirectory: - path: str - editable: bool | None = None - subdirectory: str | None = None - - def __init__( - self, - *, - path: str, - editable: bool | None = None, - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "path", path) - object.__setattr__(self, "editable", editable) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - return cls( - path=_get_required(d, str, "path"), - editable=_get(d, bool, "editable"), - subdirectory=_get(d, str, "subdirectory"), - ) - - -@dataclass(frozen=True, init=False) -class PackageArchive: - url: str | None = None - path: str | None = None - size: int | None = None - upload_time: datetime | None = None - hashes: Mapping[str, str] # type: ignore[misc] - subdirectory: str | None = None - - def __init__( - self, - *, - url: str | None = None, - path: str | None = None, - size: int | None = None, - upload_time: datetime | None = None, - hashes: Mapping[str, str], - subdirectory: str | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "hashes", hashes) - object.__setattr__(self, "subdirectory", subdirectory) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_archive = cls( - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - upload_time=_get(d, datetime, "upload-time"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - subdirectory=_get(d, str, "subdirectory"), - ) - _validate_path_url(package_archive.path, package_archive.url) - return package_archive - - -@dataclass(frozen=True, init=False) -class PackageSdist: - name: str | None = None - upload_time: datetime | None = None - url: str | None = None - path: str | None = None - size: int | None = None - hashes: Mapping[str, str] # type: ignore[misc] - - def __init__( - self, - *, - name: str | None = None, - upload_time: datetime | None = None, - url: str | None = None, - path: str | None = None, - size: int | None = None, - hashes: Mapping[str, str], - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "hashes", hashes) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_sdist = cls( - name=_get(d, str, "name"), - upload_time=_get(d, datetime, "upload-time"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - ) - _validate_path_url(package_sdist.path, package_sdist.url) - return package_sdist - - -@dataclass(frozen=True, init=False) -class PackageWheel: - name: str | None = None - upload_time: datetime | None = None - url: str | None = None - path: str | None = None - size: int | None = None - hashes: Mapping[str, str] # type: ignore[misc] - - def __init__( - self, - *, - name: str | None = None, - upload_time: datetime | None = None, - url: str | None = None, - path: str | None = None, - size: int | None = None, - hashes: Mapping[str, str], - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "upload_time", upload_time) - object.__setattr__(self, "url", url) - object.__setattr__(self, "path", path) - object.__setattr__(self, "size", size) - object.__setattr__(self, "hashes", hashes) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package_wheel = cls( - name=_get(d, str, "name"), - upload_time=_get(d, datetime, "upload-time"), - url=_get(d, str, "url"), - path=_get(d, str, "path"), - size=_get(d, int, "size"), - hashes=_get_required_as(d, Mapping, _validate_hashes, "hashes"), # type: ignore[type-abstract] - ) - _validate_path_url(package_wheel.path, package_wheel.url) - return package_wheel - - -@dataclass(frozen=True, init=False) -class Package: - name: NormalizedName - version: Version | None = None - marker: Marker | None = None - requires_python: SpecifierSet | None = None - dependencies: Sequence[Mapping[str, Any]] | None = None - vcs: PackageVcs | None = None - directory: PackageDirectory | None = None - archive: PackageArchive | None = None - index: str | None = None - sdist: PackageSdist | None = None - wheels: Sequence[PackageWheel] | None = None - attestation_identities: Sequence[Mapping[str, Any]] | None = None - tool: Mapping[str, Any] | None = None - - def __init__( - self, - *, - name: NormalizedName, - version: Version | None = None, - marker: Marker | None = None, - requires_python: SpecifierSet | None = None, - dependencies: Sequence[Mapping[str, Any]] | None = None, - vcs: PackageVcs | None = None, - directory: PackageDirectory | None = None, - archive: PackageArchive | None = None, - index: str | None = None, - sdist: PackageSdist | None = None, - wheels: Sequence[PackageWheel] | None = None, - attestation_identities: Sequence[Mapping[str, Any]] | None = None, - tool: Mapping[str, Any] | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "name", name) - object.__setattr__(self, "version", version) - object.__setattr__(self, "marker", marker) - object.__setattr__(self, "requires_python", requires_python) - object.__setattr__(self, "dependencies", dependencies) - object.__setattr__(self, "vcs", vcs) - object.__setattr__(self, "directory", directory) - object.__setattr__(self, "archive", archive) - object.__setattr__(self, "index", index) - object.__setattr__(self, "sdist", sdist) - object.__setattr__(self, "wheels", wheels) - object.__setattr__(self, "attestation_identities", attestation_identities) - object.__setattr__(self, "tool", tool) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - package = cls( - name=_get_required_as(d, str, _validate_normalized_name, "name"), - version=_get_as(d, str, Version, "version"), - requires_python=_get_as(d, str, SpecifierSet, "requires-python"), - dependencies=_get_sequence(d, Mapping, "dependencies"), # type: ignore[type-abstract] - marker=_get_as(d, str, Marker, "marker"), - vcs=_get_object(d, PackageVcs, "vcs"), - directory=_get_object(d, PackageDirectory, "directory"), - archive=_get_object(d, PackageArchive, "archive"), - index=_get(d, str, "index"), - sdist=_get_object(d, PackageSdist, "sdist"), - wheels=_get_sequence_of_objects(d, PackageWheel, "wheels"), - attestation_identities=_get_sequence(d, Mapping, "attestation-identities"), # type: ignore[type-abstract] - tool=_get(d, Mapping, "tool"), # type: ignore[type-abstract] - ) - distributions = bool(package.sdist) + len(package.wheels or []) - direct_urls = ( - bool(package.vcs) + bool(package.directory) + bool(package.archive) - ) - if distributions > 0 and direct_urls > 0: - raise PylockValidationError( - "None of vcs, directory, archive must be set if sdist or wheels are set" - ) - if distributions == 0 and direct_urls != 1: - raise PylockValidationError( - "Exactly one of vcs, directory, archive must be set " - "if sdist and wheels are not set" - ) - try: - for i, attestation_identity in enumerate( # noqa: B007 - package.attestation_identities or [] - ): - _get_required(attestation_identity, str, "kind") - except Exception as e: - raise PylockValidationError( - e, context=f"attestation-identities[{i}]" - ) from e - return package - - @property - def is_direct(self) -> bool: - return not (self.sdist or self.wheels) - - -@dataclass(frozen=True, init=False) -class Pylock: - """A class representing a pylock file.""" - - lock_version: Version - environments: Sequence[Marker] | None = None - requires_python: SpecifierSet | None = None - extras: Sequence[NormalizedName] | None = None - dependency_groups: Sequence[str] | None = None - default_groups: Sequence[str] | None = None - created_by: str # type: ignore[misc] - packages: Sequence[Package] # type: ignore[misc] - tool: Mapping[str, Any] | None = None - - def __init__( - self, - *, - lock_version: Version, - environments: Sequence[Marker] | None = None, - requires_python: SpecifierSet | None = None, - extras: Sequence[NormalizedName] | None = None, - dependency_groups: Sequence[str] | None = None, - default_groups: Sequence[str] | None = None, - created_by: str, - packages: Sequence[Package], - tool: Mapping[str, Any] | None = None, - ) -> None: - # In Python 3.10+ make dataclass kw_only=True and remove __init__ - object.__setattr__(self, "lock_version", lock_version) - object.__setattr__(self, "environments", environments) - object.__setattr__(self, "requires_python", requires_python) - object.__setattr__(self, "extras", extras) - object.__setattr__(self, "dependency_groups", dependency_groups) - object.__setattr__(self, "default_groups", default_groups) - object.__setattr__(self, "created_by", created_by) - object.__setattr__(self, "packages", packages) - object.__setattr__(self, "tool", tool) - - @classmethod - def _from_dict(cls, d: Mapping[str, Any]) -> Self: - pylock = cls( - lock_version=_get_required_as(d, str, Version, "lock-version"), - environments=_get_sequence_as(d, str, Marker, "environments"), - extras=_get_sequence_as(d, str, _validate_normalized_name, "extras"), - dependency_groups=_get_sequence(d, str, "dependency-groups"), - default_groups=_get_sequence(d, str, "default-groups"), - created_by=_get_required(d, str, "created-by"), - requires_python=_get_as(d, str, SpecifierSet, "requires-python"), - packages=_get_required_sequence_of_objects(d, Package, "packages"), - tool=_get(d, Mapping, "tool"), # type: ignore[type-abstract] - ) - if not Version("1") <= pylock.lock_version < Version("2"): - raise PylockUnsupportedVersionError( - f"pylock version {pylock.lock_version} is not supported" - ) - if pylock.lock_version > Version("1.0"): - _logger.warning( - "pylock minor version %s is not supported", pylock.lock_version - ) - return pylock - - @classmethod - def from_dict(cls, d: Mapping[str, Any], /) -> Self: - """Create and validate a Pylock instance from a TOML dictionary. - - Raises :class:`PylockValidationError` if the input data is not - spec-compliant. - """ - return cls._from_dict(d) - - def to_dict(self) -> Mapping[str, Any]: - """Convert the Pylock instance to a TOML dictionary.""" - return dataclasses.asdict(self, dict_factory=_toml_dict_factory) - - def validate(self) -> None: - """Validate the Pylock instance against the specification. - - Raises :class:`PylockValidationError` otherwise.""" - self.from_dict(self.to_dict()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/requirements.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/requirements.py deleted file mode 100644 index 3079be69b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/requirements.py +++ /dev/null @@ -1,86 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import annotations - -from typing import Iterator - -from ._parser import parse_requirement as _parse_requirement -from ._tokenizer import ParserSyntaxError -from .markers import Marker, _normalize_extra_values -from .specifiers import SpecifierSet -from .utils import canonicalize_name - - -class InvalidRequirement(ValueError): - """ - An invalid requirement was found, users should refer to PEP 508. - """ - - -class Requirement: - """Parse a requirement. - - Parse a given requirement string into its parts, such as name, specifier, - URL, and extras. Raises InvalidRequirement on a badly-formed requirement - string. - """ - - # TODO: Can we test whether something is contained within a requirement? - # If so how do we do that? Do we need to test against the _name_ of - # the thing as well as the version? What about the markers? - # TODO: Can we normalize the name and extra name? - - def __init__(self, requirement_string: str) -> None: - try: - parsed = _parse_requirement(requirement_string) - except ParserSyntaxError as e: - raise InvalidRequirement(str(e)) from e - - self.name: str = parsed.name - self.url: str | None = parsed.url or None - self.extras: set[str] = set(parsed.extras or []) - self.specifier: SpecifierSet = SpecifierSet(parsed.specifier) - self.marker: Marker | None = None - if parsed.marker is not None: - self.marker = Marker.__new__(Marker) - self.marker._markers = _normalize_extra_values(parsed.marker) - - def _iter_parts(self, name: str) -> Iterator[str]: - yield name - - if self.extras: - formatted_extras = ",".join(sorted(self.extras)) - yield f"[{formatted_extras}]" - - if self.specifier: - yield str(self.specifier) - - if self.url: - yield f" @ {self.url}" - if self.marker: - yield " " - - if self.marker: - yield f"; {self.marker}" - - def __str__(self) -> str: - return "".join(self._iter_parts(self.name)) - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}('{self}')>" - - def __hash__(self) -> int: - return hash(tuple(self._iter_parts(canonicalize_name(self.name)))) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Requirement): - return NotImplemented - - return ( - canonicalize_name(self.name) == canonicalize_name(other.name) - and self.extras == other.extras - and self.specifier == other.specifier - and self.url == other.url - and self.marker == other.marker - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/specifiers.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/specifiers.py deleted file mode 100644 index e4b9c442e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/specifiers.py +++ /dev/null @@ -1,1068 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier - from pip._vendor.packaging.version import Version -""" - -from __future__ import annotations - -import abc -import itertools -import re -from typing import Callable, Final, Iterable, Iterator, TypeVar, Union - -from .utils import canonicalize_version -from .version import InvalidVersion, Version - -UnparsedVersion = Union[Version, str] -UnparsedVersionVar = TypeVar("UnparsedVersionVar", bound=UnparsedVersion) -CallableOperator = Callable[[Version, str], bool] - - -def _coerce_version(version: UnparsedVersion) -> Version | None: - if not isinstance(version, Version): - try: - version = Version(version) - except InvalidVersion: - return None - return version - - -def _public_version(version: Version) -> Version: - return version.__replace__(local=None) - - -def _base_version(version: Version) -> Version: - return version.__replace__(pre=None, post=None, dev=None, local=None) - - -class InvalidSpecifier(ValueError): - """ - Raised when attempting to create a :class:`Specifier` with a specifier - string that is invalid. - - >>> Specifier("lolwat") - Traceback (most recent call last): - ... - packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat' - """ - - -class BaseSpecifier(metaclass=abc.ABCMeta): - __slots__ = () - __match_args__ = ("_str",) - - @property - def _str(self) -> str: - """Internal property for match_args""" - return str(self) - - @abc.abstractmethod - def __str__(self) -> str: - """ - Returns the str representation of this Specifier-like object. This - should be representative of the Specifier itself. - """ - - @abc.abstractmethod - def __hash__(self) -> int: - """ - Returns a hash value for this Specifier-like object. - """ - - @abc.abstractmethod - def __eq__(self, other: object) -> bool: - """ - Returns a boolean representing whether or not the two Specifier-like - objects are equal. - - :param other: The other object to check against. - """ - - @property - @abc.abstractmethod - def prereleases(self) -> bool | None: - """Whether or not pre-releases as a whole are allowed. - - This can be set to either ``True`` or ``False`` to explicitly enable or disable - prereleases or it can be set to ``None`` (the default) to use default semantics. - """ - - @prereleases.setter # noqa: B027 - def prereleases(self, value: bool) -> None: - """Setter for :attr:`prereleases`. - - :param value: The value to set. - """ - - @abc.abstractmethod - def contains(self, item: str, prereleases: bool | None = None) -> bool: - """ - Determines if the given item is contained within this specifier. - """ - - @abc.abstractmethod - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """ - Takes an iterable of items and filters them so that only items which - are contained within this specifier are allowed in it. - """ - - -class Specifier(BaseSpecifier): - """This class abstracts handling of version specifiers. - - .. tip:: - - It is generally not required to instantiate this manually. You should instead - prefer to work with :class:`SpecifierSet` instead, which can parse - comma-separated version specifiers (which is what package metadata contains). - """ - - __slots__ = ("_prereleases", "_spec", "_spec_version") - - _operator_regex_str = r""" - (?P<operator>(~=|==|!=|<=|>=|<|>|===)) - """ - _version_regex_str = r""" - (?P<version> - (?: - # The identity operators allow for an escape hatch that will - # do an exact string match of the version you wish to install. - # This will not be parsed by PEP 440 and we cannot determine - # any semantic meaning from it. This operator is discouraged - # but included entirely as an escape hatch. - (?<====) # Only match for the identity operator - \s* - [^\s;)]* # The arbitrary version can be just about anything, - # we match everything except for whitespace, a - # semi-colon for marker support, and a closing paren - # since versions can be enclosed in them. - ) - | - (?: - # The (non)equality operators allow for wild card and local - # versions to be specified so we have to define these two - # operators separately to enable that. - (?<===|!=) # Only match for equals and not equals - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - - # You cannot use a wild card and a pre-release, post-release, a dev or - # local version together so group them with a | and make them optional. - (?: - \.\* # Wild card syntax of .* - | - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local - )? - ) - | - (?: - # The compatible operator requires at least two digits in the - # release segment. - (?<=~=) # Only match for the compatible operator - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - | - (?: - # All other operators only allow a sub set of what the - # (non)equality operators do. Specifically they do not allow - # local versions to be specified nor do they allow the prefix - # matching wild cards. - (?<!==|!=|~=) # We have special cases for these - # operators so we want to make sure they - # don't match here. - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - (?: # pre release - [-_\.]? - (alpha|beta|preview|pre|a|b|c|rc) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - ) - """ - - _regex = re.compile( - r"\s*" + _operator_regex_str + _version_regex_str + r"\s*", - re.VERBOSE | re.IGNORECASE, - ) - - _operators: Final = { - "~=": "compatible", - "==": "equal", - "!=": "not_equal", - "<=": "less_than_equal", - ">=": "greater_than_equal", - "<": "less_than", - ">": "greater_than", - "===": "arbitrary", - } - - def __init__(self, spec: str = "", prereleases: bool | None = None) -> None: - """Initialize a Specifier instance. - - :param spec: - The string representation of a specifier which will be parsed and - normalized before use. - :param prereleases: - This tells the specifier if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - :raises InvalidSpecifier: - If the given specifier is invalid (i.e. bad syntax). - """ - match = self._regex.fullmatch(spec) - if not match: - raise InvalidSpecifier(f"Invalid specifier: {spec!r}") - - self._spec: tuple[str, str] = ( - match.group("operator").strip(), - match.group("version").strip(), - ) - - # Store whether or not this Specifier should accept prereleases - self._prereleases = prereleases - - # Specifier version cache - self._spec_version: tuple[str, Version] | None = None - - def _get_spec_version(self, version: str) -> Version | None: - """One element cache, as only one spec Version is needed per Specifier.""" - if self._spec_version is not None and self._spec_version[0] == version: - return self._spec_version[1] - - version_specifier = _coerce_version(version) - if version_specifier is None: - return None - - self._spec_version = (version, version_specifier) - return version_specifier - - def _require_spec_version(self, version: str) -> Version: - """Get spec version, asserting it's valid (not for === operator). - - This method should only be called for operators where version - strings are guaranteed to be valid PEP 440 versions (not ===). - """ - spec_version = self._get_spec_version(version) - assert spec_version is not None - return spec_version - - @property - def prereleases(self) -> bool | None: - # If there is an explicit prereleases set for this, then we'll just - # blindly use that. - if self._prereleases is not None: - return self._prereleases - - # Only the "!=" operator does not imply prereleases when - # the version in the specifier is a prerelease. - operator, version_str = self._spec - if operator != "!=": - # The == specifier with trailing .* cannot include prereleases - # e.g. "==1.0a1.*" is not valid. - if operator == "==" and version_str.endswith(".*"): - return False - - # "===" can have arbitrary string versions, so we cannot parse - # those, we take prereleases as unknown (None) for those. - version = self._get_spec_version(version_str) - if version is None: - return None - - # For all other operators, use the check if spec Version - # object implies pre-releases. - if version.is_prerelease: - return True - - return False - - @prereleases.setter - def prereleases(self, value: bool | None) -> None: - self._prereleases = value - - @property - def operator(self) -> str: - """The operator of this specifier. - - >>> Specifier("==1.2.3").operator - '==' - """ - return self._spec[0] - - @property - def version(self) -> str: - """The version of this specifier. - - >>> Specifier("==1.2.3").version - '1.2.3' - """ - return self._spec[1] - - def __repr__(self) -> str: - """A representation of the Specifier that shows all internal state. - - >>> Specifier('>=1.0.0') - <Specifier('>=1.0.0')> - >>> Specifier('>=1.0.0', prereleases=False) - <Specifier('>=1.0.0', prereleases=False)> - >>> Specifier('>=1.0.0', prereleases=True) - <Specifier('>=1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"<{self.__class__.__name__}({str(self)!r}{pre})>" - - def __str__(self) -> str: - """A string representation of the Specifier that can be round-tripped. - - >>> str(Specifier('>=1.0.0')) - '>=1.0.0' - >>> str(Specifier('>=1.0.0', prereleases=False)) - '>=1.0.0' - """ - return "{}{}".format(*self._spec) - - @property - def _canonical_spec(self) -> tuple[str, str]: - operator, version = self._spec - if operator == "===" or version.endswith(".*"): - return operator, version - - spec_version = self._require_spec_version(version) - - canonical_version = canonicalize_version( - spec_version, strip_trailing_zero=(operator != "~=") - ) - - return operator, canonical_version - - def __hash__(self) -> int: - return hash(self._canonical_spec) - - def __eq__(self, other: object) -> bool: - """Whether or not the two Specifier-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0") - True - >>> (Specifier("==1.2.3", prereleases=False) == - ... Specifier("==1.2.3", prereleases=True)) - True - >>> Specifier("==1.2.3") == "==1.2.3" - True - >>> Specifier("==1.2.3") == Specifier("==1.2.4") - False - >>> Specifier("==1.2.3") == Specifier("~=1.2.3") - False - """ - if isinstance(other, str): - try: - other = self.__class__(str(other)) - except InvalidSpecifier: - return NotImplemented - elif not isinstance(other, self.__class__): - return NotImplemented - - return self._canonical_spec == other._canonical_spec - - def _get_operator(self, op: str) -> CallableOperator: - operator_callable: CallableOperator = getattr( - self, f"_compare_{self._operators[op]}" - ) - return operator_callable - - def _compare_compatible(self, prospective: Version, spec: str) -> bool: - # Compatible releases have an equivalent combination of >= and ==. That - # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to - # implement this in terms of the other specifiers instead of - # implementing it ourselves. The only thing we need to do is construct - # the other specifiers. - - # We want everything but the last item in the version, but we want to - # ignore suffix segments. - prefix = _version_join( - list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] - ) - - # Add the prefix notation to the end of our string - prefix += ".*" - - return self._get_operator(">=")(prospective, spec) and self._get_operator("==")( - prospective, prefix - ) - - def _compare_equal(self, prospective: Version, spec: str) -> bool: - # We need special logic to handle prefix matching - if spec.endswith(".*"): - # In the case of prefix matching we want to ignore local segment. - normalized_prospective = canonicalize_version( - _public_version(prospective), strip_trailing_zero=False - ) - # Get the normalized version string ignoring the trailing .* - normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False) - # Split the spec out by bangs and dots, and pretend that there is - # an implicit dot in between a release segment and a pre-release segment. - split_spec = _version_split(normalized_spec) - - # Split the prospective version out by bangs and dots, and pretend - # that there is an implicit dot in between a release segment and - # a pre-release segment. - split_prospective = _version_split(normalized_prospective) - - # 0-pad the prospective version before shortening it to get the correct - # shortened version. - padded_prospective, _ = _pad_version(split_prospective, split_spec) - - # Shorten the prospective version to be the same length as the spec - # so that we can determine if the specifier is a prefix of the - # prospective version or not. - shortened_prospective = padded_prospective[: len(split_spec)] - - return shortened_prospective == split_spec - else: - # Convert our spec string into a Version - spec_version = self._require_spec_version(spec) - - # If the specifier does not have a local segment, then we want to - # act as if the prospective version also does not have a local - # segment. - if not spec_version.local: - prospective = _public_version(prospective) - - return prospective == spec_version - - def _compare_not_equal(self, prospective: Version, spec: str) -> bool: - return not self._compare_equal(prospective, spec) - - def _compare_less_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return _public_version(prospective) <= self._require_spec_version(spec) - - def _compare_greater_than_equal(self, prospective: Version, spec: str) -> bool: - # NB: Local version identifiers are NOT permitted in the version - # specifier, so local version labels can be universally removed from - # the prospective version. - return _public_version(prospective) >= self._require_spec_version(spec) - - def _compare_less_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = self._require_spec_version(spec_str) - - # Check to see if the prospective version is less than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective < spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a pre-release version, that we do not accept pre-release - # versions for the version mentioned in the specifier (e.g. <3.1 should - # not match 3.1.dev0, but should match 3.0.dev0). - if ( - not spec.is_prerelease - and prospective.is_prerelease - and _base_version(prospective) == _base_version(spec) - ): - return False - - # If we've gotten to here, it means that prospective version is both - # less than the spec version *and* it's not a pre-release of the same - # version in the spec. - return True - - def _compare_greater_than(self, prospective: Version, spec_str: str) -> bool: - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = self._require_spec_version(spec_str) - - # Check to see if the prospective version is greater than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective > spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a post-release version, that we do not accept - # post-release versions for the version mentioned in the specifier - # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). - if ( - not spec.is_postrelease - and prospective.is_postrelease - and _base_version(prospective) == _base_version(spec) - ): - return False - - # Ensure that we do not allow a local version of the version mentioned - # in the specifier, which is technically greater than, to match. - if prospective.local is not None and _base_version( - prospective - ) == _base_version(spec): - return False - - # If we've gotten to here, it means that prospective version is both - # greater than the spec version *and* it's not a pre-release of the - # same version in the spec. - return True - - def _compare_arbitrary(self, prospective: Version | str, spec: str) -> bool: - return str(prospective).lower() == str(spec).lower() - - def __contains__(self, item: str | Version) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in Specifier(">=1.2.3") - True - >>> Version("1.2.3") in Specifier(">=1.2.3") - True - >>> "1.0.0" in Specifier(">=1.2.3") - False - >>> "1.3.0a1" in Specifier(">=1.2.3") - True - >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True) - True - """ - return self.contains(item) - - def contains(self, item: UnparsedVersion, prereleases: bool | None = None) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this Specifier. If set to - ``None`` (the default), it will follow the recommendation from - :pep:`440` and match prereleases, as there are no other versions. - - >>> Specifier(">=1.2.3").contains("1.2.3") - True - >>> Specifier(">=1.2.3").contains(Version("1.2.3")) - True - >>> Specifier(">=1.2.3").contains("1.0.0") - False - >>> Specifier(">=1.2.3").contains("1.3.0a1") - True - >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1") - False - >>> Specifier(">=1.2.3").contains("1.3.0a1") - True - """ - - return bool(list(self.filter([item], prereleases=prereleases))) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifier. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases if there are no other versions. - - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")])) - ['1.2.3', '1.3', <Version('1.4')>] - >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"])) - ['1.5a1'] - >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - """ - prereleases_versions = [] - found_non_prereleases = False - - # Determine if to include prereleases by default - include_prereleases = ( - prereleases if prereleases is not None else self.prereleases - ) - - # Get the matching operator - operator_callable = self._get_operator(self.operator) - - # Filter versions - for version in iterable: - parsed_version = _coerce_version(version) - if parsed_version is None: - # === operator can match arbitrary (non-version) strings - if self.operator == "===" and self._compare_arbitrary( - version, self.version - ): - yield version - elif operator_callable(parsed_version, self.version): - # If it's not a prerelease or prereleases are allowed, yield it directly - if not parsed_version.is_prerelease or include_prereleases: - found_non_prereleases = True - yield version - # Otherwise collect prereleases for potential later use - elif prereleases is None and self._prereleases is not False: - prereleases_versions.append(version) - - # If no non-prereleases were found and prereleases weren't - # explicitly forbidden, yield the collected prereleases - if ( - not found_non_prereleases - and prereleases is None - and self._prereleases is not False - ): - yield from prereleases_versions - - -_prefix_regex = re.compile(r"([0-9]+)((?:a|b|c|rc)[0-9]+)") - - -def _version_split(version: str) -> list[str]: - """Split version into components. - - The split components are intended for version comparison. The logic does - not attempt to retain the original version string, so joining the - components back with :func:`_version_join` may not produce the original - version string. - """ - result: list[str] = [] - - epoch, _, rest = version.rpartition("!") - result.append(epoch or "0") - - for item in rest.split("."): - match = _prefix_regex.fullmatch(item) - if match: - result.extend(match.groups()) - else: - result.append(item) - return result - - -def _version_join(components: list[str]) -> str: - """Join split version components into a version string. - - This function assumes the input came from :func:`_version_split`, where the - first component must be the epoch (either empty or numeric), and all other - components numeric. - """ - epoch, *rest = components - return f"{epoch}!{'.'.join(rest)}" - - -def _is_not_suffix(segment: str) -> bool: - return not any( - segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") - ) - - -def _pad_version(left: list[str], right: list[str]) -> tuple[list[str], list[str]]: - left_split, right_split = [], [] - - # Get the release segment of our versions - left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) - right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) - - # Get the rest of our versions - left_split.append(left[len(left_split[0]) :]) - right_split.append(right[len(right_split[0]) :]) - - # Insert our padding - left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) - right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) - - return ( - list(itertools.chain.from_iterable(left_split)), - list(itertools.chain.from_iterable(right_split)), - ) - - -class SpecifierSet(BaseSpecifier): - """This class abstracts handling of a set of version specifiers. - - It can be passed a single specifier (``>=3.0``), a comma-separated list of - specifiers (``>=3.0,!=3.1``), or no specifier at all. - """ - - __slots__ = ("_prereleases", "_specs") - - def __init__( - self, - specifiers: str | Iterable[Specifier] = "", - prereleases: bool | None = None, - ) -> None: - """Initialize a SpecifierSet instance. - - :param specifiers: - The string representation of a specifier or a comma-separated list of - specifiers which will be parsed and normalized before use. - May also be an iterable of ``Specifier`` instances, which will be used - as is. - :param prereleases: - This tells the SpecifierSet if it should accept prerelease versions if - applicable or not. The default of ``None`` will autodetect it from the - given specifiers. - - :raises InvalidSpecifier: - If the given ``specifiers`` are not parseable than this exception will be - raised. - """ - - if isinstance(specifiers, str): - # Split on `,` to break each individual specifier into its own item, and - # strip each item to remove leading/trailing whitespace. - split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - - # Make each individual specifier a Specifier and save in a frozen set - # for later. - self._specs = frozenset(map(Specifier, split_specifiers)) - else: - # Save the supplied specifiers in a frozen set. - self._specs = frozenset(specifiers) - - # Store our prereleases value so we can use it later to determine if - # we accept prereleases or not. - self._prereleases = prereleases - - @property - def prereleases(self) -> bool | None: - # If we have been given an explicit prerelease modifier, then we'll - # pass that through here. - if self._prereleases is not None: - return self._prereleases - - # If we don't have any specifiers, and we don't have a forced value, - # then we'll just return None since we don't know if this should have - # pre-releases or not. - if not self._specs: - return None - - # Otherwise we'll see if any of the given specifiers accept - # prereleases, if any of them do we'll return True, otherwise False. - if any(s.prereleases for s in self._specs): - return True - - return None - - @prereleases.setter - def prereleases(self, value: bool | None) -> None: - self._prereleases = value - - def __repr__(self) -> str: - """A representation of the specifier set that shows all internal state. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> SpecifierSet('>=1.0.0,!=2.0.0') - <SpecifierSet('!=2.0.0,>=1.0.0')> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False) - <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)> - >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True) - <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)> - """ - pre = ( - f", prereleases={self.prereleases!r}" - if self._prereleases is not None - else "" - ) - - return f"<SpecifierSet({str(self)!r}{pre})>" - - def __str__(self) -> str: - """A string representation of the specifier set that can be round-tripped. - - Note that the ordering of the individual specifiers within the set may not - match the input string. - - >>> str(SpecifierSet(">=1.0.0,!=1.0.1")) - '!=1.0.1,>=1.0.0' - >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False)) - '!=1.0.1,>=1.0.0' - """ - return ",".join(sorted(str(s) for s in self._specs)) - - def __hash__(self) -> int: - return hash(self._specs) - - def __and__(self, other: SpecifierSet | str) -> SpecifierSet: - """Return a SpecifierSet which is a combination of the two sets. - - :param other: The other object to combine with. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1' - <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')> - >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1') - <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')> - """ - if isinstance(other, str): - other = SpecifierSet(other) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - specifier = SpecifierSet() - specifier._specs = frozenset(self._specs | other._specs) - - if self._prereleases is None and other._prereleases is not None: - specifier._prereleases = other._prereleases - elif ( - self._prereleases is not None and other._prereleases is None - ) or self._prereleases == other._prereleases: - specifier._prereleases = self._prereleases - else: - raise ValueError( - "Cannot combine SpecifierSets with True and False prerelease overrides." - ) - - return specifier - - def __eq__(self, other: object) -> bool: - """Whether or not the two SpecifierSet-like objects are equal. - - :param other: The other object to check against. - - The value of :attr:`prereleases` is ignored. - - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) == - ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1" - True - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2") - False - """ - if isinstance(other, (str, Specifier)): - other = SpecifierSet(str(other)) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - return self._specs == other._specs - - def __len__(self) -> int: - """Returns the number of specifiers in this specifier set.""" - return len(self._specs) - - def __iter__(self) -> Iterator[Specifier]: - """ - Returns an iterator over all the underlying :class:`Specifier` instances - in this specifier set. - - >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str) - [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>] - """ - return iter(self._specs) - - def __contains__(self, item: UnparsedVersion) -> bool: - """Return whether or not the item is contained in this specifier. - - :param item: The item to check for. - - This is used for the ``in`` operator and behaves the same as - :meth:`contains` with no ``prereleases`` argument passed. - - >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1") - False - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1") - True - >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True) - True - """ - return self.contains(item) - - def contains( - self, - item: UnparsedVersion, - prereleases: bool | None = None, - installed: bool | None = None, - ) -> bool: - """Return whether or not the item is contained in this SpecifierSet. - - :param item: - The item to check for, which can be a version string or a - :class:`Version` instance. - :param prereleases: - Whether or not to match prereleases with this SpecifierSet. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases, as there are no other versions. - :param installed: - Whether or not the item is installed. If set to ``True``, it will - accept prerelease versions even if the specifier does not allow them. - - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3")) - True - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1") - True - >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1") - False - >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True) - True - """ - version = _coerce_version(item) - - if version is not None and installed and version.is_prerelease: - prereleases = True - - check_item = item if version is None else version - return bool(list(self.filter([check_item], prereleases=prereleases))) - - def filter( - self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None - ) -> Iterator[UnparsedVersionVar]: - """Filter items in the given iterable, that match the specifiers in this set. - - :param iterable: - An iterable that can contain version strings and :class:`Version` instances. - The items in the iterable will be filtered according to the specifier. - :param prereleases: - Whether or not to allow prereleases in the returned iterator. If set to - ``None`` (the default), it will follow the recommendation from :pep:`440` - and match prereleases if there are no other versions. - - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")])) - ['1.3', <Version('1.4')>] - >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"])) - ['1.5a1'] - >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - - An "empty" SpecifierSet will filter items based on the presence of prerelease - versions in the set. - - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"])) - ['1.3'] - >>> list(SpecifierSet("").filter(["1.5a1"])) - ['1.5a1'] - >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"])) - ['1.3', '1.5a1'] - >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True)) - ['1.3', '1.5a1'] - """ - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None and self.prereleases is not None: - prereleases = self.prereleases - - # If we have any specifiers, then we want to wrap our iterable in the - # filter method for each one, this will act as a logical AND amongst - # each specifier. - if self._specs: - # When prereleases is None, we need to let all versions through - # the individual filters, then decide about prereleases at the end - # based on whether any non-prereleases matched ALL specs. - for spec in self._specs: - iterable = spec.filter( - iterable, prereleases=True if prereleases is None else prereleases - ) - - if prereleases is not None: - # If we have a forced prereleases value, - # we can immediately return the iterator. - return iter(iterable) - else: - # Handle empty SpecifierSet cases where prereleases is not None. - if prereleases is True: - return iter(iterable) - - if prereleases is False: - return ( - item - for item in iterable - if (version := _coerce_version(item)) is None - or not version.is_prerelease - ) - - # Finally if prereleases is None, apply PEP 440 logic: - # exclude prereleases unless there are no final releases that matched. - filtered_items: list[UnparsedVersionVar] = [] - found_prereleases: list[UnparsedVersionVar] = [] - found_final_release = False - - for item in iterable: - parsed_version = _coerce_version(item) - # Arbitrary strings are always included as it is not - # possible to determine if they are prereleases, - # and they have already passed all specifiers. - if parsed_version is None: - filtered_items.append(item) - found_prereleases.append(item) - elif parsed_version.is_prerelease: - found_prereleases.append(item) - else: - filtered_items.append(item) - found_final_release = True - - return iter(filtered_items if found_final_release else found_prereleases) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/tags.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/tags.py deleted file mode 100644 index 5ef27c897..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/tags.py +++ /dev/null @@ -1,651 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import logging -import platform -import re -import struct -import subprocess -import sys -import sysconfig -from importlib.machinery import EXTENSION_SUFFIXES -from typing import ( - Any, - Iterable, - Iterator, - Sequence, - Tuple, - cast, -) - -from . import _manylinux, _musllinux - -logger = logging.getLogger(__name__) - -PythonVersion = Sequence[int] -AppleVersion = Tuple[int, int] - -INTERPRETER_SHORT_NAMES: dict[str, str] = { - "python": "py", # Generic. - "cpython": "cp", - "pypy": "pp", - "ironpython": "ip", - "jython": "jy", -} - - -_32_BIT_INTERPRETER = struct.calcsize("P") == 4 - - -class Tag: - """ - A representation of the tag triple for a wheel. - - Instances are considered immutable and thus are hashable. Equality checking - is also supported. - """ - - __slots__ = ["_abi", "_hash", "_interpreter", "_platform"] - - def __init__(self, interpreter: str, abi: str, platform: str) -> None: - self._interpreter = interpreter.lower() - self._abi = abi.lower() - self._platform = platform.lower() - # The __hash__ of every single element in a Set[Tag] will be evaluated each time - # that a set calls its `.disjoint()` method, which may be called hundreds of - # times when scanning a page of links for packages with tags matching that - # Set[Tag]. Pre-computing the value here produces significant speedups for - # downstream consumers. - self._hash = hash((self._interpreter, self._abi, self._platform)) - - @property - def interpreter(self) -> str: - return self._interpreter - - @property - def abi(self) -> str: - return self._abi - - @property - def platform(self) -> str: - return self._platform - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Tag): - return NotImplemented - - return ( - (self._hash == other._hash) # Short-circuit ASAP for perf reasons. - and (self._platform == other._platform) - and (self._abi == other._abi) - and (self._interpreter == other._interpreter) - ) - - def __hash__(self) -> int: - return self._hash - - def __str__(self) -> str: - return f"{self._interpreter}-{self._abi}-{self._platform}" - - def __repr__(self) -> str: - return f"<{self} @ {id(self)}>" - - def __setstate__(self, state: tuple[None, dict[str, Any]]) -> None: - # The cached _hash is wrong when unpickling. - _, slots = state - for k, v in slots.items(): - setattr(self, k, v) - self._hash = hash((self._interpreter, self._abi, self._platform)) - - -def parse_tag(tag: str) -> frozenset[Tag]: - """ - Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances. - - Returning a set is required due to the possibility that the tag is a - compressed tag set. - """ - tags = set() - interpreters, abis, platforms = tag.split("-") - for interpreter in interpreters.split("."): - for abi in abis.split("."): - for platform_ in platforms.split("."): - tags.add(Tag(interpreter, abi, platform_)) - return frozenset(tags) - - -def _get_config_var(name: str, warn: bool = False) -> int | str | None: - value: int | str | None = sysconfig.get_config_var(name) - if value is None and warn: - logger.debug( - "Config variable '%s' is unset, Python ABI tag may be incorrect", name - ) - return value - - -def _normalize_string(string: str) -> str: - return string.replace(".", "_").replace("-", "_").replace(" ", "_") - - -def _is_threaded_cpython(abis: list[str]) -> bool: - """ - Determine if the ABI corresponds to a threaded (`--disable-gil`) build. - - The threaded builds are indicated by a "t" in the abiflags. - """ - if len(abis) == 0: - return False - # expect e.g., cp313 - m = re.match(r"cp\d+(.*)", abis[0]) - if not m: - return False - abiflags = m.group(1) - return "t" in abiflags - - -def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool: - """ - Determine if the Python version supports abi3. - - PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`) - builds do not support abi3. - """ - return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading - - -def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> list[str]: - py_version = tuple(py_version) # To allow for version comparison. - abis = [] - version = _version_nodot(py_version[:2]) - threading = debug = pymalloc = ucs4 = "" - with_debug = _get_config_var("Py_DEBUG", warn) - has_refcount = hasattr(sys, "gettotalrefcount") - # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled - # extension modules is the best option. - # https://github.com/pypa/pip/issues/3383#issuecomment-173267692 - has_ext = "_d.pyd" in EXTENSION_SUFFIXES - if with_debug or (with_debug is None and (has_refcount or has_ext)): - debug = "d" - if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn): - threading = "t" - if py_version < (3, 8): - with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) - if with_pymalloc or with_pymalloc is None: - pymalloc = "m" - if py_version < (3, 3): - unicode_size = _get_config_var("Py_UNICODE_SIZE", warn) - if unicode_size == 4 or ( - unicode_size is None and sys.maxunicode == 0x10FFFF - ): - ucs4 = "u" - elif debug: - # Debug builds can also load "normal" extension modules. - # We can also assume no UCS-4 or pymalloc requirement. - abis.append(f"cp{version}{threading}") - abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}") - return abis - - -def cpython_tags( - python_version: PythonVersion | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a CPython interpreter. - - The tags consist of: - - cp<python_version>-<abi>-<platform> - - cp<python_version>-abi3-<platform> - - cp<python_version>-none-<platform> - - cp<less than python_version>-abi3-<platform> # Older Python versions down to 3.2. - - If python_version only specifies a major version then user-provided ABIs and - the 'none' ABItag will be used. - - If 'abi3' or 'none' are specified in 'abis' then they will be yielded at - their normal position and not at the beginning. - """ - if not python_version: - python_version = sys.version_info[:2] - - interpreter = f"cp{_version_nodot(python_version[:2])}" - - if abis is None: - abis = _cpython_abis(python_version, warn) if len(python_version) > 1 else [] - abis = list(abis) - # 'abi3' and 'none' are explicitly handled later. - for explicit_abi in ("abi3", "none"): - try: - abis.remove(explicit_abi) - except ValueError: # noqa: PERF203 - pass - - platforms = list(platforms or platform_tags()) - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - threading = _is_threaded_cpython(abis) - use_abi3 = _abi3_applies(python_version, threading) - if use_abi3: - yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) - yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) - - if use_abi3: - for minor_version in range(python_version[1] - 1, 1, -1): - for platform_ in platforms: - version = _version_nodot((python_version[0], minor_version)) - interpreter = f"cp{version}" - yield Tag(interpreter, "abi3", platform_) - - -def _generic_abi() -> list[str]: - """ - Return the ABI tag based on EXT_SUFFIX. - """ - # The following are examples of `EXT_SUFFIX`. - # We want to keep the parts which are related to the ABI and remove the - # parts which are related to the platform: - # - linux: '.cpython-310-x86_64-linux-gnu.so' => cp310 - # - mac: '.cpython-310-darwin.so' => cp310 - # - win: '.cp310-win_amd64.pyd' => cp310 - # - win: '.pyd' => cp37 (uses _cpython_abis()) - # - pypy: '.pypy38-pp73-x86_64-linux-gnu.so' => pypy38_pp73 - # - graalpy: '.graalpy-38-native-x86_64-darwin.dylib' - # => graalpy_38_native - - ext_suffix = _get_config_var("EXT_SUFFIX", warn=True) - if not isinstance(ext_suffix, str) or ext_suffix[0] != ".": - raise SystemError("invalid sysconfig.get_config_var('EXT_SUFFIX')") - parts = ext_suffix.split(".") - if len(parts) < 3: - # CPython3.7 and earlier uses ".pyd" on Windows. - return _cpython_abis(sys.version_info[:2]) - soabi = parts[1] - if soabi.startswith("cpython"): - # non-windows - abi = "cp" + soabi.split("-")[1] - elif soabi.startswith("cp"): - # windows - abi = soabi.split("-")[0] - elif soabi.startswith("pypy"): - abi = "-".join(soabi.split("-")[:2]) - elif soabi.startswith("graalpy"): - abi = "-".join(soabi.split("-")[:3]) - elif soabi: - # pyston, ironpython, others? - abi = soabi - else: - return [] - return [_normalize_string(abi)] - - -def generic_tags( - interpreter: str | None = None, - abis: Iterable[str] | None = None, - platforms: Iterable[str] | None = None, - *, - warn: bool = False, -) -> Iterator[Tag]: - """ - Yields the tags for a generic interpreter. - - The tags consist of: - - <interpreter>-<abi>-<platform> - - The "none" ABI will be added if it was not explicitly provided. - """ - if not interpreter: - interp_name = interpreter_name() - interp_version = interpreter_version(warn=warn) - interpreter = f"{interp_name}{interp_version}" - abis = _generic_abi() if abis is None else list(abis) - platforms = list(platforms or platform_tags()) - if "none" not in abis: - abis.append("none") - for abi in abis: - for platform_ in platforms: - yield Tag(interpreter, abi, platform_) - - -def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]: - """ - Yields Python versions in descending order. - - After the latest version, the major-only version will be yielded, and then - all previous versions of that major version. - """ - if len(py_version) > 1: - yield f"py{_version_nodot(py_version[:2])}" - yield f"py{py_version[0]}" - if len(py_version) > 1: - for minor in range(py_version[1] - 1, -1, -1): - yield f"py{_version_nodot((py_version[0], minor))}" - - -def compatible_tags( - python_version: PythonVersion | None = None, - interpreter: str | None = None, - platforms: Iterable[str] | None = None, -) -> Iterator[Tag]: - """ - Yields the sequence of tags that are compatible with a specific version of Python. - - The tags consist of: - - py*-none-<platform> - - <interpreter>-none-any # ... if `interpreter` is provided. - - py*-none-any - """ - if not python_version: - python_version = sys.version_info[:2] - platforms = list(platforms or platform_tags()) - for version in _py_interpreter_range(python_version): - for platform_ in platforms: - yield Tag(version, "none", platform_) - if interpreter: - yield Tag(interpreter, "none", "any") - for version in _py_interpreter_range(python_version): - yield Tag(version, "none", "any") - - -def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str: - if not is_32bit: - return arch - - if arch.startswith("ppc"): - return "ppc" - - return "i386" - - -def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]: - formats = [cpu_arch] - if cpu_arch == "x86_64": - if version < (10, 4): - return [] - formats.extend(["intel", "fat64", "fat32"]) - - elif cpu_arch == "i386": - if version < (10, 4): - return [] - formats.extend(["intel", "fat32", "fat"]) - - elif cpu_arch == "ppc64": - # TODO: Need to care about 32-bit PPC for ppc64 through 10.2? - if version > (10, 5) or version < (10, 4): - return [] - formats.append("fat64") - - elif cpu_arch == "ppc": - if version > (10, 6): - return [] - formats.extend(["fat32", "fat"]) - - if cpu_arch in {"arm64", "x86_64"}: - formats.append("universal2") - - if cpu_arch in {"x86_64", "i386", "ppc64", "ppc", "intel"}: - formats.append("universal") - - return formats - - -def mac_platforms( - version: AppleVersion | None = None, arch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for a macOS system. - - The `version` parameter is a two-item tuple specifying the macOS version to - generate platform tags for. The `arch` parameter is the CPU architecture to - generate platform tags for. Both parameters default to the appropriate value - for the current system. - """ - version_str, _, cpu_arch = platform.mac_ver() - if version is None: - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - if version == (10, 16): - # When built against an older macOS SDK, Python will report macOS 10.16 - # instead of the real version. - version_str = subprocess.run( - [ - sys.executable, - "-sS", - "-c", - "import platform; print(platform.mac_ver()[0])", - ], - check=True, - env={"SYSTEM_VERSION_COMPAT": "0"}, - stdout=subprocess.PIPE, - text=True, - ).stdout - version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2]))) - - if arch is None: - arch = _mac_arch(cpu_arch) - - if (10, 0) <= version < (11, 0): - # Prior to Mac OS 11, each yearly release of Mac OS bumped the - # "minor" version number. The major version was always 10. - major_version = 10 - for minor_version in range(version[1], -1, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Starting with Mac OS 11, each yearly release bumps the major version - # number. The minor versions are now the midyear updates. - minor_version = 0 - for major_version in range(version[0], 10, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - if version >= (11, 0): - # Mac OS 11 on x86_64 is compatible with binaries from previous releases. - # Arm64 support was introduced in 11.0, so no Arm binaries from previous - # releases exist. - # - # However, the "universal2" binary format can have a - # macOS version earlier than 11.0 when the x86_64 part of the binary supports - # that version of macOS. - major_version = 10 - if arch == "x86_64": - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_formats = _mac_binary_formats(compat_version, arch) - for binary_format in binary_formats: - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - else: - for minor_version in range(16, 3, -1): - compat_version = major_version, minor_version - binary_format = "universal2" - yield f"macosx_{major_version}_{minor_version}_{binary_format}" - - -def ios_platforms( - version: AppleVersion | None = None, multiarch: str | None = None -) -> Iterator[str]: - """ - Yields the platform tags for an iOS system. - - :param version: A two-item tuple specifying the iOS version to generate - platform tags for. Defaults to the current iOS version. - :param multiarch: The CPU architecture+ABI to generate platform tags for - - (the value used by `sys.implementation._multiarch` e.g., - `arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current - multiarch value. - """ - if version is None: - # if iOS is the current platform, ios_ver *must* be defined. However, - # it won't exist for CPython versions before 3.13, which causes a mypy - # error. - _, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore] - version = cast("AppleVersion", tuple(map(int, release.split(".")[:2]))) - - if multiarch is None: - multiarch = sys.implementation._multiarch - multiarch = multiarch.replace("-", "_") - - ios_platform_template = "ios_{major}_{minor}_{multiarch}" - - # Consider any iOS major.minor version from the version requested, down to - # 12.0. 12.0 is the first iOS version that is known to have enough features - # to support CPython. Consider every possible minor release up to X.9. There - # highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra - # candidates that won't ever match doesn't really hurt, and it saves us from - # having to keep an explicit list of known iOS versions in the code. Return - # the results descending order of version number. - - # If the requested major version is less than 12, there won't be any matches. - if version[0] < 12: - return - - # Consider the actual X.Y version that was requested. - yield ios_platform_template.format( - major=version[0], minor=version[1], multiarch=multiarch - ) - - # Consider every minor version from X.0 to the minor version prior to the - # version requested by the platform. - for minor in range(version[1] - 1, -1, -1): - yield ios_platform_template.format( - major=version[0], minor=minor, multiarch=multiarch - ) - - for major in range(version[0] - 1, 11, -1): - for minor in range(9, -1, -1): - yield ios_platform_template.format( - major=major, minor=minor, multiarch=multiarch - ) - - -def android_platforms( - api_level: int | None = None, abi: str | None = None -) -> Iterator[str]: - """ - Yields the :attr:`~Tag.platform` tags for Android. If this function is invoked on - non-Android platforms, the ``api_level`` and ``abi`` arguments are required. - - :param int api_level: The maximum `API level - <https://developer.android.com/tools/releases/platforms>`__ to return. Defaults - to the current system's version, as returned by ``platform.android_ver``. - :param str abi: The `Android ABI <https://developer.android.com/ndk/guides/abis>`__, - e.g. ``arm64_v8a``. Defaults to the current system's ABI , as returned by - ``sysconfig.get_platform``. Hyphens and periods will be replaced with - underscores. - """ - if platform.system() != "Android" and (api_level is None or abi is None): - raise TypeError( - "on non-Android platforms, the api_level and abi arguments are required" - ) - - if api_level is None: - # Python 3.13 was the first version to return platform.system() == "Android", - # and also the first version to define platform.android_ver(). - api_level = platform.android_ver().api_level # type: ignore[attr-defined] - - if abi is None: - abi = sysconfig.get_platform().split("-")[-1] - abi = _normalize_string(abi) - - # 16 is the minimum API level known to have enough features to support CPython - # without major patching. Yield every API level from the maximum down to the - # minimum, inclusive. - min_api_level = 16 - for ver in range(api_level, min_api_level - 1, -1): - yield f"android_{ver}_{abi}" - - -def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: - linux = _normalize_string(sysconfig.get_platform()) - if not linux.startswith("linux_"): - # we should never be here, just yield the sysconfig one and return - yield linux - return - if is_32bit: - if linux == "linux_x86_64": - linux = "linux_i686" - elif linux == "linux_aarch64": - linux = "linux_armv8l" - _, arch = linux.split("_", 1) - archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) - yield from _manylinux.platform_tags(archs) - yield from _musllinux.platform_tags(archs) - for arch in archs: - yield f"linux_{arch}" - - -def _generic_platforms() -> Iterator[str]: - yield _normalize_string(sysconfig.get_platform()) - - -def platform_tags() -> Iterator[str]: - """ - Provides the platform tags for this installation. - """ - if platform.system() == "Darwin": - return mac_platforms() - elif platform.system() == "iOS": - return ios_platforms() - elif platform.system() == "Android": - return android_platforms() - elif platform.system() == "Linux": - return _linux_platforms() - else: - return _generic_platforms() - - -def interpreter_name() -> str: - """ - Returns the name of the running interpreter. - - Some implementations have a reserved, two-letter abbreviation which will - be returned when appropriate. - """ - name = sys.implementation.name - return INTERPRETER_SHORT_NAMES.get(name) or name - - -def interpreter_version(*, warn: bool = False) -> str: - """ - Returns the version of the running interpreter. - """ - version = _get_config_var("py_version_nodot", warn=warn) - return str(version) if version else _version_nodot(sys.version_info[:2]) - - -def _version_nodot(version: PythonVersion) -> str: - return "".join(map(str, version)) - - -def sys_tags(*, warn: bool = False) -> Iterator[Tag]: - """ - Returns the sequence of tag triples for the running interpreter. - - The order of the sequence corresponds to priority order for the - interpreter, from most to least important. - """ - - interp_name = interpreter_name() - if interp_name == "cp": - yield from cpython_tags(warn=warn) - else: - yield from generic_tags() - - if interp_name == "pp": - interp = "pp3" - elif interp_name == "cp": - interp = "cp" + interpreter_version(warn=warn) - else: - interp = None - yield from compatible_tags(interpreter=interp) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/utils.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/utils.py deleted file mode 100644 index c41c8137f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/utils.py +++ /dev/null @@ -1,158 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import re -from typing import NewType, Tuple, Union, cast - -from .tags import Tag, parse_tag -from .version import InvalidVersion, Version, _TrimmedRelease - -BuildTag = Union[Tuple[()], Tuple[int, str]] -NormalizedName = NewType("NormalizedName", str) - - -class InvalidName(ValueError): - """ - An invalid distribution name; users should refer to the packaging user guide. - """ - - -class InvalidWheelFilename(ValueError): - """ - An invalid wheel filename was found, users should refer to PEP 427. - """ - - -class InvalidSdistFilename(ValueError): - """ - An invalid sdist filename was found, users should refer to the packaging user guide. - """ - - -# Core metadata spec for `Name` -_validate_regex = re.compile(r"[A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9]", re.IGNORECASE) -_normalized_regex = re.compile(r"[a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9]") -# PEP 427: The build number must start with a digit. -_build_tag_regex = re.compile(r"(\d+)(.*)") - - -def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName: - if validate and not _validate_regex.fullmatch(name): - raise InvalidName(f"name is invalid: {name!r}") - # Ensure all ``.`` and ``_`` are ``-`` - # Emulates ``re.sub(r"[-_.]+", "-", name).lower()`` from PEP 503 - # Much faster than re, and even faster than str.translate - value = name.lower().replace("_", "-").replace(".", "-") - # Condense repeats (faster than regex) - while "--" in value: - value = value.replace("--", "-") - return cast("NormalizedName", value) - - -def is_normalized_name(name: str) -> bool: - return _normalized_regex.fullmatch(name) is not None - - -def canonicalize_version( - version: Version | str, *, strip_trailing_zero: bool = True -) -> str: - """ - Return a canonical form of a version as a string. - - >>> canonicalize_version('1.0.1') - '1.0.1' - - Per PEP 625, versions may have multiple canonical forms, differing - only by trailing zeros. - - >>> canonicalize_version('1.0.0') - '1' - >>> canonicalize_version('1.0.0', strip_trailing_zero=False) - '1.0.0' - - Invalid versions are returned unaltered. - - >>> canonicalize_version('foo bar baz') - 'foo bar baz' - """ - if isinstance(version, str): - try: - version = Version(version) - except InvalidVersion: - return str(version) - return str(_TrimmedRelease(version) if strip_trailing_zero else version) - - -def parse_wheel_filename( - filename: str, -) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]: - if not filename.endswith(".whl"): - raise InvalidWheelFilename( - f"Invalid wheel filename (extension must be '.whl'): {filename!r}" - ) - - filename = filename[:-4] - dashes = filename.count("-") - if dashes not in (4, 5): - raise InvalidWheelFilename( - f"Invalid wheel filename (wrong number of parts): {filename!r}" - ) - - parts = filename.split("-", dashes - 2) - name_part = parts[0] - # See PEP 427 for the rules on escaping the project name. - if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: - raise InvalidWheelFilename(f"Invalid project name: {filename!r}") - name = canonicalize_name(name_part) - - try: - version = Version(parts[1]) - except InvalidVersion as e: - raise InvalidWheelFilename( - f"Invalid wheel filename (invalid version): {filename!r}" - ) from e - - if dashes == 5: - build_part = parts[2] - build_match = _build_tag_regex.match(build_part) - if build_match is None: - raise InvalidWheelFilename( - f"Invalid build number: {build_part} in {filename!r}" - ) - build = cast("BuildTag", (int(build_match.group(1)), build_match.group(2))) - else: - build = () - tags = parse_tag(parts[-1]) - return (name, version, build, tags) - - -def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]: - if filename.endswith(".tar.gz"): - file_stem = filename[: -len(".tar.gz")] - elif filename.endswith(".zip"): - file_stem = filename[: -len(".zip")] - else: - raise InvalidSdistFilename( - f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):" - f" {filename!r}" - ) - - # We are requiring a PEP 440 version, which cannot contain dashes, - # so we split on the last dash. - name_part, sep, version_part = file_stem.rpartition("-") - if not sep: - raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}") - - name = canonicalize_name(name_part) - - try: - version = Version(version_part) - except InvalidVersion as e: - raise InvalidSdistFilename( - f"Invalid sdist filename (invalid version): {filename!r}" - ) from e - - return (name, version) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/version.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/version.py deleted file mode 100644 index d250a2627..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/packaging/version.py +++ /dev/null @@ -1,792 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -""" -.. testsetup:: - - from pip._vendor.packaging.version import parse, Version -""" - -from __future__ import annotations - -import re -import sys -import typing -from typing import ( - Any, - Callable, - Literal, - NamedTuple, - SupportsInt, - Tuple, - TypedDict, - Union, -) - -from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType - -if typing.TYPE_CHECKING: - from typing_extensions import Self, Unpack - -if sys.version_info >= (3, 13): # pragma: no cover - from warnings import deprecated as _deprecated -elif typing.TYPE_CHECKING: - from typing_extensions import deprecated as _deprecated -else: # pragma: no cover - import functools - import warnings - - def _deprecated(message: str) -> object: - def decorator(func: object) -> object: - @functools.wraps(func) - def wrapper(*args: object, **kwargs: object) -> object: - warnings.warn( - message, - category=DeprecationWarning, - stacklevel=2, - ) - return func(*args, **kwargs) - - return wrapper - - return decorator - - -_LETTER_NORMALIZATION = { - "alpha": "a", - "beta": "b", - "c": "rc", - "pre": "rc", - "preview": "rc", - "rev": "post", - "r": "post", -} - -__all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"] - -LocalType = Tuple[Union[int, str], ...] - -CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]] -CmpLocalType = Union[ - NegativeInfinityType, - Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...], -] -CmpKey = Tuple[ - int, - Tuple[int, ...], - CmpPrePostDevType, - CmpPrePostDevType, - CmpPrePostDevType, - CmpLocalType, -] -VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool] - - -class _VersionReplace(TypedDict, total=False): - epoch: int | None - release: tuple[int, ...] | None - pre: tuple[Literal["a", "b", "rc"], int] | None - post: int | None - dev: int | None - local: str | None - - -def parse(version: str) -> Version: - """Parse the given version string. - - >>> parse('1.0.dev1') - <Version('1.0.dev1')> - - :param version: The version string to parse. - :raises InvalidVersion: When the version string is not a valid version. - """ - return Version(version) - - -class InvalidVersion(ValueError): - """Raised when a version string is not a valid version. - - >>> Version("invalid") - Traceback (most recent call last): - ... - packaging.version.InvalidVersion: Invalid version: 'invalid' - """ - - -class _BaseVersion: - __slots__ = () - - # This can also be a normal member (see the packaging_legacy package); - # we are just requiring it to be readable. Actually defining a property - # has runtime effect on subclasses, so it's typing only. - if typing.TYPE_CHECKING: - - @property - def _key(self) -> tuple[Any, ...]: ... - - def __hash__(self) -> int: - return hash(self._key) - - # Please keep the duplicated `isinstance` check - # in the six comparisons hereunder - # unless you find a way to avoid adding overhead function calls. - def __lt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key < other._key - - def __le__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key <= other._key - - def __eq__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key == other._key - - def __ge__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key >= other._key - - def __gt__(self, other: _BaseVersion) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key > other._key - - def __ne__(self, other: object) -> bool: - if not isinstance(other, _BaseVersion): - return NotImplemented - - return self._key != other._key - - -# Deliberately not anchored to the start and end of the string, to make it -# easier for 3rd party code to reuse - -# Note that ++ doesn't behave identically on CPython and PyPy, so not using it here -_VERSION_PATTERN = r""" - v?+ # optional leading v - (?: - (?:(?P<epoch>[0-9]+)!)?+ # epoch - (?P<release>[0-9]+(?:\.[0-9]+)*+) # release segment - (?P<pre> # pre-release - [._-]?+ - (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc) - [._-]?+ - (?P<pre_n>[0-9]+)? - )?+ - (?P<post> # post release - (?:-(?P<post_n1>[0-9]+)) - | - (?: - [._-]? - (?P<post_l>post|rev|r) - [._-]? - (?P<post_n2>[0-9]+)? - ) - )?+ - (?P<dev> # dev release - [._-]?+ - (?P<dev_l>dev) - [._-]?+ - (?P<dev_n>[0-9]+)? - )?+ - ) - (?:\+ - (?P<local> # local version - [a-z0-9]+ - (?:[._-][a-z0-9]+)*+ - ) - )?+ -""" - -_VERSION_PATTERN_OLD = _VERSION_PATTERN.replace("*+", "*").replace("?+", "?") - -# Possessive qualifiers were added in Python 3.11. -# CPython 3.11.0-3.11.4 had a bug: https://github.com/python/cpython/pull/107795 -# Older PyPy also had a bug. -VERSION_PATTERN = ( - _VERSION_PATTERN_OLD - if (sys.implementation.name == "cpython" and sys.version_info < (3, 11, 5)) - or (sys.implementation.name == "pypy" and sys.version_info < (3, 11, 13)) - or sys.version_info < (3, 11) - else _VERSION_PATTERN -) -""" -A string containing the regular expression used to match a valid version. - -The pattern is not anchored at either end, and is intended for embedding in larger -expressions (for example, matching a version number as part of a file name). The -regular expression should be compiled with the ``re.VERBOSE`` and ``re.IGNORECASE`` -flags set. - -:meta hide-value: -""" - - -# Validation pattern for local version in replace() -_LOCAL_PATTERN = re.compile(r"[a-z0-9]+(?:[._-][a-z0-9]+)*", re.IGNORECASE) - - -def _validate_epoch(value: object, /) -> int: - epoch = value or 0 - if isinstance(epoch, int) and epoch >= 0: - return epoch - msg = f"epoch must be non-negative integer, got {epoch}" - raise InvalidVersion(msg) - - -def _validate_release(value: object, /) -> tuple[int, ...]: - release = (0,) if value is None else value - if ( - isinstance(release, tuple) - and len(release) > 0 - and all(isinstance(i, int) and i >= 0 for i in release) - ): - return release - msg = f"release must be a non-empty tuple of non-negative integers, got {release}" - raise InvalidVersion(msg) - - -def _validate_pre(value: object, /) -> tuple[Literal["a", "b", "rc"], int] | None: - if value is None: - return value - if ( - isinstance(value, tuple) - and len(value) == 2 - and value[0] in ("a", "b", "rc") - and isinstance(value[1], int) - and value[1] >= 0 - ): - return value - msg = f"pre must be a tuple of ('a'|'b'|'rc', non-negative int), got {value}" - raise InvalidVersion(msg) - - -def _validate_post(value: object, /) -> tuple[Literal["post"], int] | None: - if value is None: - return value - if isinstance(value, int) and value >= 0: - return ("post", value) - msg = f"post must be non-negative integer, got {value}" - raise InvalidVersion(msg) - - -def _validate_dev(value: object, /) -> tuple[Literal["dev"], int] | None: - if value is None: - return value - if isinstance(value, int) and value >= 0: - return ("dev", value) - msg = f"dev must be non-negative integer, got {value}" - raise InvalidVersion(msg) - - -def _validate_local(value: object, /) -> LocalType | None: - if value is None: - return value - if isinstance(value, str) and _LOCAL_PATTERN.fullmatch(value): - return _parse_local_version(value) - msg = f"local must be a valid version string, got {value!r}" - raise InvalidVersion(msg) - - -# Backward compatibility for internals before 26.0. Do not use. -class _Version(NamedTuple): - epoch: int - release: tuple[int, ...] - dev: tuple[str, int] | None - pre: tuple[str, int] | None - post: tuple[str, int] | None - local: LocalType | None - - -class Version(_BaseVersion): - """This class abstracts handling of a project's versions. - - A :class:`Version` instance is comparison aware and can be compared and - sorted using the standard Python interfaces. - - >>> v1 = Version("1.0a5") - >>> v2 = Version("1.0") - >>> v1 - <Version('1.0a5')> - >>> v2 - <Version('1.0')> - >>> v1 < v2 - True - >>> v1 == v2 - False - >>> v1 > v2 - False - >>> v1 >= v2 - False - >>> v1 <= v2 - True - """ - - __slots__ = ("_dev", "_epoch", "_key_cache", "_local", "_post", "_pre", "_release") - __match_args__ = ("_str",) - - _regex = re.compile(r"\s*" + VERSION_PATTERN + r"\s*", re.VERBOSE | re.IGNORECASE) - - _epoch: int - _release: tuple[int, ...] - _dev: tuple[str, int] | None - _pre: tuple[str, int] | None - _post: tuple[str, int] | None - _local: LocalType | None - - _key_cache: CmpKey | None - - def __init__(self, version: str) -> None: - """Initialize a Version object. - - :param version: - The string representation of a version which will be parsed and normalized - before use. - :raises InvalidVersion: - If the ``version`` does not conform to PEP 440 in any way then this - exception will be raised. - """ - # Validate the version and parse it into pieces - match = self._regex.fullmatch(version) - if not match: - raise InvalidVersion(f"Invalid version: {version!r}") - self._epoch = int(match.group("epoch")) if match.group("epoch") else 0 - self._release = tuple(map(int, match.group("release").split("."))) - self._pre = _parse_letter_version(match.group("pre_l"), match.group("pre_n")) - self._post = _parse_letter_version( - match.group("post_l"), match.group("post_n1") or match.group("post_n2") - ) - self._dev = _parse_letter_version(match.group("dev_l"), match.group("dev_n")) - self._local = _parse_local_version(match.group("local")) - - # Key which will be used for sorting - self._key_cache = None - - def __replace__(self, **kwargs: Unpack[_VersionReplace]) -> Self: - epoch = _validate_epoch(kwargs["epoch"]) if "epoch" in kwargs else self._epoch - release = ( - _validate_release(kwargs["release"]) - if "release" in kwargs - else self._release - ) - pre = _validate_pre(kwargs["pre"]) if "pre" in kwargs else self._pre - post = _validate_post(kwargs["post"]) if "post" in kwargs else self._post - dev = _validate_dev(kwargs["dev"]) if "dev" in kwargs else self._dev - local = _validate_local(kwargs["local"]) if "local" in kwargs else self._local - - if ( - epoch == self._epoch - and release == self._release - and pre == self._pre - and post == self._post - and dev == self._dev - and local == self._local - ): - return self - - new_version = self.__class__.__new__(self.__class__) - new_version._key_cache = None - new_version._epoch = epoch - new_version._release = release - new_version._pre = pre - new_version._post = post - new_version._dev = dev - new_version._local = local - - return new_version - - @property - def _key(self) -> CmpKey: - if self._key_cache is None: - self._key_cache = _cmpkey( - self._epoch, - self._release, - self._pre, - self._post, - self._dev, - self._local, - ) - return self._key_cache - - @property - @_deprecated("Version._version is private and will be removed soon") - def _version(self) -> _Version: - return _Version( - self._epoch, self._release, self._dev, self._pre, self._post, self._local - ) - - @_version.setter - @_deprecated("Version._version is private and will be removed soon") - def _version(self, value: _Version) -> None: - self._epoch = value.epoch - self._release = value.release - self._dev = value.dev - self._pre = value.pre - self._post = value.post - self._local = value.local - self._key_cache = None - - def __repr__(self) -> str: - """A representation of the Version that shows all internal state. - - >>> Version('1.0.0') - <Version('1.0.0')> - """ - return f"<Version('{self}')>" - - def __str__(self) -> str: - """A string representation of the version that can be round-tripped. - - >>> str(Version("1.0a5")) - '1.0a5' - """ - # This is a hot function, so not calling self.base_version - version = ".".join(map(str, self.release)) - - # Epoch - if self.epoch: - version = f"{self.epoch}!{version}" - - # Pre-release - if self.pre is not None: - version += "".join(map(str, self.pre)) - - # Post-release - if self.post is not None: - version += f".post{self.post}" - - # Development release - if self.dev is not None: - version += f".dev{self.dev}" - - # Local version segment - if self.local is not None: - version += f"+{self.local}" - - return version - - @property - def _str(self) -> str: - """Internal property for match_args""" - return str(self) - - @property - def epoch(self) -> int: - """The epoch of the version. - - >>> Version("2.0.0").epoch - 0 - >>> Version("1!2.0.0").epoch - 1 - """ - return self._epoch - - @property - def release(self) -> tuple[int, ...]: - """The components of the "release" segment of the version. - - >>> Version("1.2.3").release - (1, 2, 3) - >>> Version("2.0.0").release - (2, 0, 0) - >>> Version("1!2.0.0.post0").release - (2, 0, 0) - - Includes trailing zeroes but not the epoch or any pre-release / development / - post-release suffixes. - """ - return self._release - - @property - def pre(self) -> tuple[str, int] | None: - """The pre-release segment of the version. - - >>> print(Version("1.2.3").pre) - None - >>> Version("1.2.3a1").pre - ('a', 1) - >>> Version("1.2.3b1").pre - ('b', 1) - >>> Version("1.2.3rc1").pre - ('rc', 1) - """ - return self._pre - - @property - def post(self) -> int | None: - """The post-release number of the version. - - >>> print(Version("1.2.3").post) - None - >>> Version("1.2.3.post1").post - 1 - """ - return self._post[1] if self._post else None - - @property - def dev(self) -> int | None: - """The development number of the version. - - >>> print(Version("1.2.3").dev) - None - >>> Version("1.2.3.dev1").dev - 1 - """ - return self._dev[1] if self._dev else None - - @property - def local(self) -> str | None: - """The local version segment of the version. - - >>> print(Version("1.2.3").local) - None - >>> Version("1.2.3+abc").local - 'abc' - """ - if self._local: - return ".".join(str(x) for x in self._local) - else: - return None - - @property - def public(self) -> str: - """The public portion of the version. - - >>> Version("1.2.3").public - '1.2.3' - >>> Version("1.2.3+abc").public - '1.2.3' - >>> Version("1!1.2.3dev1+abc").public - '1!1.2.3.dev1' - """ - return str(self).split("+", 1)[0] - - @property - def base_version(self) -> str: - """The "base version" of the version. - - >>> Version("1.2.3").base_version - '1.2.3' - >>> Version("1.2.3+abc").base_version - '1.2.3' - >>> Version("1!1.2.3dev1+abc").base_version - '1!1.2.3' - - The "base version" is the public version of the project without any pre or post - release markers. - """ - release_segment = ".".join(map(str, self.release)) - return f"{self.epoch}!{release_segment}" if self.epoch else release_segment - - @property - def is_prerelease(self) -> bool: - """Whether this version is a pre-release. - - >>> Version("1.2.3").is_prerelease - False - >>> Version("1.2.3a1").is_prerelease - True - >>> Version("1.2.3b1").is_prerelease - True - >>> Version("1.2.3rc1").is_prerelease - True - >>> Version("1.2.3dev1").is_prerelease - True - """ - return self.dev is not None or self.pre is not None - - @property - def is_postrelease(self) -> bool: - """Whether this version is a post-release. - - >>> Version("1.2.3").is_postrelease - False - >>> Version("1.2.3.post1").is_postrelease - True - """ - return self.post is not None - - @property - def is_devrelease(self) -> bool: - """Whether this version is a development release. - - >>> Version("1.2.3").is_devrelease - False - >>> Version("1.2.3.dev1").is_devrelease - True - """ - return self.dev is not None - - @property - def major(self) -> int: - """The first item of :attr:`release` or ``0`` if unavailable. - - >>> Version("1.2.3").major - 1 - """ - return self.release[0] if len(self.release) >= 1 else 0 - - @property - def minor(self) -> int: - """The second item of :attr:`release` or ``0`` if unavailable. - - >>> Version("1.2.3").minor - 2 - >>> Version("1").minor - 0 - """ - return self.release[1] if len(self.release) >= 2 else 0 - - @property - def micro(self) -> int: - """The third item of :attr:`release` or ``0`` if unavailable. - - >>> Version("1.2.3").micro - 3 - >>> Version("1").micro - 0 - """ - return self.release[2] if len(self.release) >= 3 else 0 - - -class _TrimmedRelease(Version): - __slots__ = () - - def __init__(self, version: str | Version) -> None: - if isinstance(version, Version): - self._epoch = version._epoch - self._release = version._release - self._dev = version._dev - self._pre = version._pre - self._post = version._post - self._local = version._local - self._key_cache = version._key_cache - return - super().__init__(version) # pragma: no cover - - @property - def release(self) -> tuple[int, ...]: - """ - Release segment without any trailing zeros. - - >>> _TrimmedRelease('1.0.0').release - (1,) - >>> _TrimmedRelease('0.0').release - (0,) - """ - # This leaves one 0. - rel = super().release - len_release = len(rel) - i = len_release - while i > 1 and rel[i - 1] == 0: - i -= 1 - return rel if i == len_release else rel[:i] - - -def _parse_letter_version( - letter: str | None, number: str | bytes | SupportsInt | None -) -> tuple[str, int] | None: - if letter: - # We normalize any letters to their lower case form - letter = letter.lower() - - # We consider some words to be alternate spellings of other words and - # in those cases we want to normalize the spellings to our preferred - # spelling. - letter = _LETTER_NORMALIZATION.get(letter, letter) - - # We consider there to be an implicit 0 in a pre-release if there is - # not a numeral associated with it. - return letter, int(number or 0) - - if number: - # We assume if we are given a number, but we are not given a letter - # then this is using the implicit post release syntax (e.g. 1.0-1) - return "post", int(number) - - return None - - -_local_version_separators = re.compile(r"[\._-]") - - -def _parse_local_version(local: str | None) -> LocalType | None: - """ - Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). - """ - if local is not None: - return tuple( - part.lower() if not part.isdigit() else int(part) - for part in _local_version_separators.split(local) - ) - return None - - -def _cmpkey( - epoch: int, - release: tuple[int, ...], - pre: tuple[str, int] | None, - post: tuple[str, int] | None, - dev: tuple[str, int] | None, - local: LocalType | None, -) -> CmpKey: - # When we compare a release version, we want to compare it with all of the - # trailing zeros removed. We will use this for our sorting key. - len_release = len(release) - i = len_release - while i and release[i - 1] == 0: - i -= 1 - _release = release if i == len_release else release[:i] - - # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. - # We'll do this by abusing the pre segment, but we _only_ want to do this - # if there is not a pre or a post segment. If we have one of those then - # the normal sorting rules will handle this case correctly. - if pre is None and post is None and dev is not None: - _pre: CmpPrePostDevType = NegativeInfinity - # Versions without a pre-release (except as noted above) should sort after - # those with one. - elif pre is None: - _pre = Infinity - else: - _pre = pre - - # Versions without a post segment should sort before those with one. - if post is None: - _post: CmpPrePostDevType = NegativeInfinity - - else: - _post = post - - # Versions without a development segment should sort after those with one. - if dev is None: - _dev: CmpPrePostDevType = Infinity - - else: - _dev = dev - - if local is None: - # Versions without a local segment should sort before those with one. - _local: CmpLocalType = NegativeInfinity - else: - # Versions with a local segment need that segment parsed to implement - # the sorting rules in PEP440. - # - Alpha numeric segments sort before numeric segments - # - Alpha numeric segments sort lexicographically - # - Numeric segments sort numerically - # - Shorter versions sort before longer versions when the prefixes - # match exactly - _local = tuple( - (i, "") if isinstance(i, int) else (NegativeInfinity, i) for i in local - ) - - return epoch, _release, _pre, _post, _dev, _local diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE deleted file mode 100644 index 1bb5a4435..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py deleted file mode 100644 index 72f2b0351..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +++ /dev/null @@ -1,3676 +0,0 @@ -# TODO: Add Generic type annotations to initialized collections. -# For now we'd simply use implicit Any/Unknown which would add redundant annotations -# mypy: disable-error-code="var-annotated" -""" -Package resource API --------------------- - -A resource is a logical file contained within a package, or a logical -subdirectory thereof. The package resource API expects resource names -to have their path parts separated with ``/``, *not* whatever the local -path separator is. Do not use os.path operations to manipulate resource -names being passed into the API. - -The package resource API is designed to work with normal filesystem packages, -.egg files, and unpacked .egg files. It can also work in a limited way with -.zip files and with custom PEP 302 loaders that support the ``get_data()`` -method. - -This module is deprecated. Users are directed to :mod:`importlib.resources`, -:mod:`importlib.metadata` and :pypi:`packaging` instead. -""" - -from __future__ import annotations - -import sys - -if sys.version_info < (3, 8): # noqa: UP036 # Check for unsupported versions - raise RuntimeError("Python 3.8 or later is required") - -import os -import io -import time -import re -import types -from typing import ( - Any, - Literal, - Dict, - Iterator, - Mapping, - MutableSequence, - NamedTuple, - NoReturn, - Tuple, - Union, - TYPE_CHECKING, - Protocol, - Callable, - Iterable, - TypeVar, - overload, -) -import zipfile -import zipimport -import warnings -import stat -import functools -import pkgutil -import operator -import platform -import collections -import plistlib -import email.parser -import errno -import tempfile -import textwrap -import inspect -import ntpath -import posixpath -import importlib -import importlib.abc -import importlib.machinery -from pkgutil import get_importer - -import _imp - -# capture these to bypass sandboxing -from os import utime -from os import open as os_open -from os.path import isdir, split - -try: - from os import mkdir, rename, unlink - - WRITE_SUPPORT = True -except ImportError: - # no write support, probably under GAE - WRITE_SUPPORT = False - -from pip._internal.utils._jaraco_text import ( - yield_lines, - drop_comment, - join_continuation, -) -from pip._vendor.packaging import markers as _packaging_markers -from pip._vendor.packaging import requirements as _packaging_requirements -from pip._vendor.packaging import utils as _packaging_utils -from pip._vendor.packaging import version as _packaging_version -from pip._vendor.platformdirs import user_cache_dir as _user_cache_dir - -if TYPE_CHECKING: - from _typeshed import BytesPath, StrPath, StrOrBytesPath - from typing_extensions import Self - - -# Patch: Remove deprecation warning from vendored pkg_resources. -# Setting PYTHONWARNINGS=error to verify builds produce no warnings -# causes immediate exceptions. -# See https://github.com/pypa/pip/issues/12243 - - -_T = TypeVar("_T") -_DistributionT = TypeVar("_DistributionT", bound="Distribution") -# Type aliases -_NestedStr = Union[str, Iterable[Union[str, Iterable["_NestedStr"]]]] -_InstallerTypeT = Callable[["Requirement"], "_DistributionT"] -_InstallerType = Callable[["Requirement"], Union["Distribution", None]] -_PkgReqType = Union[str, "Requirement"] -_EPDistType = Union["Distribution", _PkgReqType] -_MetadataType = Union["IResourceProvider", None] -_ResolvedEntryPoint = Any # Can be any attribute in the module -_ResourceStream = Any # TODO / Incomplete: A readable file-like object -# Any object works, but let's indicate we expect something like a module (optionally has __loader__ or __file__) -_ModuleLike = Union[object, types.ModuleType] -# Any: Should be _ModuleLike but we end up with issues where _ModuleLike doesn't have _ZipLoaderModule's __loader__ -_ProviderFactoryType = Callable[[Any], "IResourceProvider"] -_DistFinderType = Callable[[_T, str, bool], Iterable["Distribution"]] -_NSHandlerType = Callable[[_T, str, str, types.ModuleType], Union[str, None]] -_AdapterT = TypeVar( - "_AdapterT", _DistFinderType[Any], _ProviderFactoryType, _NSHandlerType[Any] -) - - -# Use _typeshed.importlib.LoaderProtocol once available https://github.com/python/typeshed/pull/11890 -class _LoaderProtocol(Protocol): - def load_module(self, fullname: str, /) -> types.ModuleType: ... - - -class _ZipLoaderModule(Protocol): - __loader__: zipimport.zipimporter - - -_PEP440_FALLBACK = re.compile(r"^v?(?P<safe>(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)", re.I) - - -class PEP440Warning(RuntimeWarning): - """ - Used when there is an issue with a version or specifier not complying with - PEP 440. - """ - - -parse_version = _packaging_version.Version - - -_state_vars: dict[str, str] = {} - - -def _declare_state(vartype: str, varname: str, initial_value: _T) -> _T: - _state_vars[varname] = vartype - return initial_value - - -def __getstate__() -> dict[str, Any]: - state = {} - g = globals() - for k, v in _state_vars.items(): - state[k] = g['_sget_' + v](g[k]) - return state - - -def __setstate__(state: dict[str, Any]) -> dict[str, Any]: - g = globals() - for k, v in state.items(): - g['_sset_' + _state_vars[k]](k, g[k], v) - return state - - -def _sget_dict(val): - return val.copy() - - -def _sset_dict(key, ob, state): - ob.clear() - ob.update(state) - - -def _sget_object(val): - return val.__getstate__() - - -def _sset_object(key, ob, state): - ob.__setstate__(state) - - -_sget_none = _sset_none = lambda *args: None - - -def get_supported_platform(): - """Return this platform's maximum compatible version. - - distutils.util.get_platform() normally reports the minimum version - of macOS that would be required to *use* extensions produced by - distutils. But what we want when checking compatibility is to know the - version of macOS that we are *running*. To allow usage of packages that - explicitly require a newer version of macOS, we must also know the - current version of the OS. - - If this condition occurs for any other platform with a version in its - platform strings, this function should be extended accordingly. - """ - plat = get_build_platform() - m = macosVersionString.match(plat) - if m is not None and sys.platform == "darwin": - try: - plat = 'macosx-%s-%s' % ('.'.join(_macos_vers()[:2]), m.group(3)) - except ValueError: - # not macOS - pass - return plat - - -__all__ = [ - # Basic resource access and distribution/entry point discovery - 'require', - 'run_script', - 'get_provider', - 'get_distribution', - 'load_entry_point', - 'get_entry_map', - 'get_entry_info', - 'iter_entry_points', - 'resource_string', - 'resource_stream', - 'resource_filename', - 'resource_listdir', - 'resource_exists', - 'resource_isdir', - # Environmental control - 'declare_namespace', - 'working_set', - 'add_activation_listener', - 'find_distributions', - 'set_extraction_path', - 'cleanup_resources', - 'get_default_cache', - # Primary implementation classes - 'Environment', - 'WorkingSet', - 'ResourceManager', - 'Distribution', - 'Requirement', - 'EntryPoint', - # Exceptions - 'ResolutionError', - 'VersionConflict', - 'DistributionNotFound', - 'UnknownExtra', - 'ExtractionError', - # Warnings - 'PEP440Warning', - # Parsing functions and string utilities - 'parse_requirements', - 'parse_version', - 'safe_name', - 'safe_version', - 'get_platform', - 'compatible_platforms', - 'yield_lines', - 'split_sections', - 'safe_extra', - 'to_filename', - 'invalid_marker', - 'evaluate_marker', - # filesystem utilities - 'ensure_directory', - 'normalize_path', - # Distribution "precedence" constants - 'EGG_DIST', - 'BINARY_DIST', - 'SOURCE_DIST', - 'CHECKOUT_DIST', - 'DEVELOP_DIST', - # "Provider" interfaces, implementations, and registration/lookup APIs - 'IMetadataProvider', - 'IResourceProvider', - 'FileMetadata', - 'PathMetadata', - 'EggMetadata', - 'EmptyProvider', - 'empty_provider', - 'NullProvider', - 'EggProvider', - 'DefaultProvider', - 'ZipProvider', - 'register_finder', - 'register_namespace_handler', - 'register_loader_type', - 'fixup_namespace_packages', - 'get_importer', - # Warnings - 'PkgResourcesDeprecationWarning', - # Deprecated/backward compatibility only - 'run_main', - 'AvailableDistributions', -] - - -class ResolutionError(Exception): - """Abstract base for dependency resolution errors""" - - def __repr__(self): - return self.__class__.__name__ + repr(self.args) - - -class VersionConflict(ResolutionError): - """ - An already-installed version conflicts with the requested version. - - Should be initialized with the installed Distribution and the requested - Requirement. - """ - - _template = "{self.dist} is installed but {self.req} is required" - - @property - def dist(self) -> Distribution: - return self.args[0] - - @property - def req(self) -> Requirement: - return self.args[1] - - def report(self): - return self._template.format(**locals()) - - def with_context(self, required_by: set[Distribution | str]): - """ - If required_by is non-empty, return a version of self that is a - ContextualVersionConflict. - """ - if not required_by: - return self - args = self.args + (required_by,) - return ContextualVersionConflict(*args) - - -class ContextualVersionConflict(VersionConflict): - """ - A VersionConflict that accepts a third parameter, the set of the - requirements that required the installed Distribution. - """ - - _template = VersionConflict._template + ' by {self.required_by}' - - @property - def required_by(self) -> set[str]: - return self.args[2] - - -class DistributionNotFound(ResolutionError): - """A requested distribution was not found""" - - _template = ( - "The '{self.req}' distribution was not found " - "and is required by {self.requirers_str}" - ) - - @property - def req(self) -> Requirement: - return self.args[0] - - @property - def requirers(self) -> set[str] | None: - return self.args[1] - - @property - def requirers_str(self): - if not self.requirers: - return 'the application' - return ', '.join(self.requirers) - - def report(self): - return self._template.format(**locals()) - - def __str__(self): - return self.report() - - -class UnknownExtra(ResolutionError): - """Distribution doesn't have an "extra feature" of the given name""" - - -_provider_factories: dict[type[_ModuleLike], _ProviderFactoryType] = {} - -PY_MAJOR = '{}.{}'.format(*sys.version_info) -EGG_DIST = 3 -BINARY_DIST = 2 -SOURCE_DIST = 1 -CHECKOUT_DIST = 0 -DEVELOP_DIST = -1 - - -def register_loader_type( - loader_type: type[_ModuleLike], provider_factory: _ProviderFactoryType -): - """Register `provider_factory` to make providers for `loader_type` - - `loader_type` is the type or class of a PEP 302 ``module.__loader__``, - and `provider_factory` is a function that, passed a *module* object, - returns an ``IResourceProvider`` for that module. - """ - _provider_factories[loader_type] = provider_factory - - -@overload -def get_provider(moduleOrReq: str) -> IResourceProvider: ... -@overload -def get_provider(moduleOrReq: Requirement) -> Distribution: ... -def get_provider(moduleOrReq: str | Requirement) -> IResourceProvider | Distribution: - """Return an IResourceProvider for the named module or requirement""" - if isinstance(moduleOrReq, Requirement): - return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] - try: - module = sys.modules[moduleOrReq] - except KeyError: - __import__(moduleOrReq) - module = sys.modules[moduleOrReq] - loader = getattr(module, '__loader__', None) - return _find_adapter(_provider_factories, loader)(module) - - -@functools.lru_cache(maxsize=None) -def _macos_vers(): - version = platform.mac_ver()[0] - # fallback for MacPorts - if version == '': - plist = '/System/Library/CoreServices/SystemVersion.plist' - if os.path.exists(plist): - with open(plist, 'rb') as fh: - plist_content = plistlib.load(fh) - if 'ProductVersion' in plist_content: - version = plist_content['ProductVersion'] - return version.split('.') - - -def _macos_arch(machine): - return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) - - -def get_build_platform(): - """Return this platform's string for platform-specific distributions - - XXX Currently this is the same as ``distutils.util.get_platform()``, but it - needs some hacks for Linux and macOS. - """ - from sysconfig import get_platform - - plat = get_platform() - if sys.platform == "darwin" and not plat.startswith('macosx-'): - try: - version = _macos_vers() - machine = os.uname()[4].replace(" ", "_") - return "macosx-%d.%d-%s" % ( - int(version[0]), - int(version[1]), - _macos_arch(machine), - ) - except ValueError: - # if someone is running a non-Mac darwin system, this will fall - # through to the default implementation - pass - return plat - - -macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") -darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") -# XXX backward compat -get_platform = get_build_platform - - -def compatible_platforms(provided: str | None, required: str | None): - """Can code for the `provided` platform run on the `required` platform? - - Returns true if either platform is ``None``, or the platforms are equal. - - XXX Needs compatibility checks for Linux and other unixy OSes. - """ - if provided is None or required is None or provided == required: - # easy case - return True - - # macOS special cases - reqMac = macosVersionString.match(required) - if reqMac: - provMac = macosVersionString.match(provided) - - # is this a Mac package? - if not provMac: - # this is backwards compatibility for packages built before - # setuptools 0.6. All packages built after this point will - # use the new macOS designation. - provDarwin = darwinVersionString.match(provided) - if provDarwin: - dversion = int(provDarwin.group(1)) - macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) - if ( - dversion == 7 - and macosversion >= "10.3" - or dversion == 8 - and macosversion >= "10.4" - ): - return True - # egg isn't macOS or legacy darwin - return False - - # are they the same major version and machine type? - if provMac.group(1) != reqMac.group(1) or provMac.group(3) != reqMac.group(3): - return False - - # is the required OS major update >= the provided one? - if int(provMac.group(2)) > int(reqMac.group(2)): - return False - - return True - - # XXX Linux and other platforms' special cases should go here - return False - - -@overload -def get_distribution(dist: _DistributionT) -> _DistributionT: ... -@overload -def get_distribution(dist: _PkgReqType) -> Distribution: ... -def get_distribution(dist: Distribution | _PkgReqType) -> Distribution: - """Return a current distribution object for a Requirement or string""" - if isinstance(dist, str): - dist = Requirement.parse(dist) - if isinstance(dist, Requirement): - # Bad type narrowing, dist has to be a Requirement here, so get_provider has to return Distribution - dist = get_provider(dist) # type: ignore[assignment] - if not isinstance(dist, Distribution): - raise TypeError("Expected str, Requirement, or Distribution", dist) - return dist - - -def load_entry_point(dist: _EPDistType, group: str, name: str) -> _ResolvedEntryPoint: - """Return `name` entry point of `group` for `dist` or raise ImportError""" - return get_distribution(dist).load_entry_point(group, name) - - -@overload -def get_entry_map( - dist: _EPDistType, group: None = None -) -> dict[str, dict[str, EntryPoint]]: ... -@overload -def get_entry_map(dist: _EPDistType, group: str) -> dict[str, EntryPoint]: ... -def get_entry_map(dist: _EPDistType, group: str | None = None): - """Return the entry point map for `group`, or the full entry map""" - return get_distribution(dist).get_entry_map(group) - - -def get_entry_info(dist: _EPDistType, group: str, name: str): - """Return the EntryPoint object for `group`+`name`, or ``None``""" - return get_distribution(dist).get_entry_info(group, name) - - -class IMetadataProvider(Protocol): - def has_metadata(self, name: str) -> bool: - """Does the package's distribution contain the named metadata?""" - - def get_metadata(self, name: str) -> str: - """The named metadata resource as a string""" - - def get_metadata_lines(self, name: str) -> Iterator[str]: - """Yield named metadata resource as list of non-blank non-comment lines - - Leading and trailing whitespace is stripped from each line, and lines - with ``#`` as the first non-blank character are omitted.""" - - def metadata_isdir(self, name: str) -> bool: - """Is the named metadata a directory? (like ``os.path.isdir()``)""" - - def metadata_listdir(self, name: str) -> list[str]: - """List of metadata names in the directory (like ``os.listdir()``)""" - - def run_script(self, script_name: str, namespace: dict[str, Any]) -> None: - """Execute the named script in the supplied namespace dictionary""" - - -class IResourceProvider(IMetadataProvider, Protocol): - """An object that provides access to package resources""" - - def get_resource_filename( - self, manager: ResourceManager, resource_name: str - ) -> str: - """Return a true filesystem path for `resource_name` - - `manager` must be a ``ResourceManager``""" - - def get_resource_stream( - self, manager: ResourceManager, resource_name: str - ) -> _ResourceStream: - """Return a readable file-like object for `resource_name` - - `manager` must be a ``ResourceManager``""" - - def get_resource_string( - self, manager: ResourceManager, resource_name: str - ) -> bytes: - """Return the contents of `resource_name` as :obj:`bytes` - - `manager` must be a ``ResourceManager``""" - - def has_resource(self, resource_name: str) -> bool: - """Does the package contain the named resource?""" - - def resource_isdir(self, resource_name: str) -> bool: - """Is the named resource a directory? (like ``os.path.isdir()``)""" - - def resource_listdir(self, resource_name: str) -> list[str]: - """List of resource names in the directory (like ``os.listdir()``)""" - - -class WorkingSet: - """A collection of active distributions on sys.path (or a similar list)""" - - def __init__(self, entries: Iterable[str] | None = None): - """Create working set from list of path entries (default=sys.path)""" - self.entries: list[str] = [] - self.entry_keys = {} - self.by_key = {} - self.normalized_to_canonical_keys = {} - self.callbacks = [] - - if entries is None: - entries = sys.path - - for entry in entries: - self.add_entry(entry) - - @classmethod - def _build_master(cls): - """ - Prepare the master working set. - """ - ws = cls() - try: - from __main__ import __requires__ - except ImportError: - # The main program does not list any requirements - return ws - - # ensure the requirements are met - try: - ws.require(__requires__) - except VersionConflict: - return cls._build_from_requirements(__requires__) - - return ws - - @classmethod - def _build_from_requirements(cls, req_spec): - """ - Build a working set from a requirement spec. Rewrites sys.path. - """ - # try it without defaults already on sys.path - # by starting with an empty path - ws = cls([]) - reqs = parse_requirements(req_spec) - dists = ws.resolve(reqs, Environment()) - for dist in dists: - ws.add(dist) - - # add any missing entries from sys.path - for entry in sys.path: - if entry not in ws.entries: - ws.add_entry(entry) - - # then copy back to sys.path - sys.path[:] = ws.entries - return ws - - def add_entry(self, entry: str): - """Add a path item to ``.entries``, finding any distributions on it - - ``find_distributions(entry, True)`` is used to find distributions - corresponding to the path entry, and they are added. `entry` is - always appended to ``.entries``, even if it is already present. - (This is because ``sys.path`` can contain the same value more than - once, and the ``.entries`` of the ``sys.path`` WorkingSet should always - equal ``sys.path``.) - """ - self.entry_keys.setdefault(entry, []) - self.entries.append(entry) - for dist in find_distributions(entry, True): - self.add(dist, entry, False) - - def __contains__(self, dist: Distribution) -> bool: - """True if `dist` is the active distribution for its project""" - return self.by_key.get(dist.key) == dist - - def find(self, req: Requirement) -> Distribution | None: - """Find a distribution matching requirement `req` - - If there is an active distribution for the requested project, this - returns it as long as it meets the version requirement specified by - `req`. But, if there is an active distribution for the project and it - does *not* meet the `req` requirement, ``VersionConflict`` is raised. - If there is no active distribution for the requested project, ``None`` - is returned. - """ - dist = self.by_key.get(req.key) - - if dist is None: - canonical_key = self.normalized_to_canonical_keys.get(req.key) - - if canonical_key is not None: - req.key = canonical_key - dist = self.by_key.get(canonical_key) - - if dist is not None and dist not in req: - # XXX add more info - raise VersionConflict(dist, req) - return dist - - def iter_entry_points(self, group: str, name: str | None = None): - """Yield entry point objects from `group` matching `name` - - If `name` is None, yields all entry points in `group` from all - distributions in the working set, otherwise only ones matching - both `group` and `name` are yielded (in distribution order). - """ - return ( - entry - for dist in self - for entry in dist.get_entry_map(group).values() - if name is None or name == entry.name - ) - - def run_script(self, requires: str, script_name: str): - """Locate distribution for `requires` and run `script_name` script""" - ns = sys._getframe(1).f_globals - name = ns['__name__'] - ns.clear() - ns['__name__'] = name - self.require(requires)[0].run_script(script_name, ns) - - def __iter__(self) -> Iterator[Distribution]: - """Yield distributions for non-duplicate projects in the working set - - The yield order is the order in which the items' path entries were - added to the working set. - """ - seen = set() - for item in self.entries: - if item not in self.entry_keys: - # workaround a cache issue - continue - - for key in self.entry_keys[item]: - if key not in seen: - seen.add(key) - yield self.by_key[key] - - def add( - self, - dist: Distribution, - entry: str | None = None, - insert: bool = True, - replace: bool = False, - ): - """Add `dist` to working set, associated with `entry` - - If `entry` is unspecified, it defaults to the ``.location`` of `dist`. - On exit from this routine, `entry` is added to the end of the working - set's ``.entries`` (if it wasn't already present). - - `dist` is only added to the working set if it's for a project that - doesn't already have a distribution in the set, unless `replace=True`. - If it's added, any callbacks registered with the ``subscribe()`` method - will be called. - """ - if insert: - dist.insert_on(self.entries, entry, replace=replace) - - if entry is None: - entry = dist.location - keys = self.entry_keys.setdefault(entry, []) - keys2 = self.entry_keys.setdefault(dist.location, []) - if not replace and dist.key in self.by_key: - # ignore hidden distros - return - - self.by_key[dist.key] = dist - normalized_name = _packaging_utils.canonicalize_name(dist.key) - self.normalized_to_canonical_keys[normalized_name] = dist.key - if dist.key not in keys: - keys.append(dist.key) - if dist.key not in keys2: - keys2.append(dist.key) - self._added_new(dist) - - @overload - def resolve( - self, - requirements: Iterable[Requirement], - env: Environment | None, - installer: _InstallerTypeT[_DistributionT], - replace_conflicting: bool = False, - extras: tuple[str, ...] | None = None, - ) -> list[_DistributionT]: ... - @overload - def resolve( - self, - requirements: Iterable[Requirement], - env: Environment | None = None, - *, - installer: _InstallerTypeT[_DistributionT], - replace_conflicting: bool = False, - extras: tuple[str, ...] | None = None, - ) -> list[_DistributionT]: ... - @overload - def resolve( - self, - requirements: Iterable[Requirement], - env: Environment | None = None, - installer: _InstallerType | None = None, - replace_conflicting: bool = False, - extras: tuple[str, ...] | None = None, - ) -> list[Distribution]: ... - def resolve( - self, - requirements: Iterable[Requirement], - env: Environment | None = None, - installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None, - replace_conflicting: bool = False, - extras: tuple[str, ...] | None = None, - ) -> list[Distribution] | list[_DistributionT]: - """List all distributions needed to (recursively) meet `requirements` - - `requirements` must be a sequence of ``Requirement`` objects. `env`, - if supplied, should be an ``Environment`` instance. If - not supplied, it defaults to all distributions available within any - entry or distribution in the working set. `installer`, if supplied, - will be invoked with each requirement that cannot be met by an - already-installed distribution; it should return a ``Distribution`` or - ``None``. - - Unless `replace_conflicting=True`, raises a VersionConflict exception - if - any requirements are found on the path that have the correct name but - the wrong version. Otherwise, if an `installer` is supplied it will be - invoked to obtain the correct version of the requirement and activate - it. - - `extras` is a list of the extras to be used with these requirements. - This is important because extra requirements may look like `my_req; - extra = "my_extra"`, which would otherwise be interpreted as a purely - optional requirement. Instead, we want to be able to assert that these - requirements are truly required. - """ - - # set up the stack - requirements = list(requirements)[::-1] - # set of processed requirements - processed = set() - # key -> dist - best = {} - to_activate = [] - - req_extras = _ReqExtras() - - # Mapping of requirement to set of distributions that required it; - # useful for reporting info about conflicts. - required_by = collections.defaultdict(set) - - while requirements: - # process dependencies breadth-first - req = requirements.pop(0) - if req in processed: - # Ignore cyclic or redundant dependencies - continue - - if not req_extras.markers_pass(req, extras): - continue - - dist = self._resolve_dist( - req, best, replace_conflicting, env, installer, required_by, to_activate - ) - - # push the new requirements onto the stack - new_requirements = dist.requires(req.extras)[::-1] - requirements.extend(new_requirements) - - # Register the new requirements needed by req - for new_requirement in new_requirements: - required_by[new_requirement].add(req.project_name) - req_extras[new_requirement] = req.extras - - processed.add(req) - - # return list of distros to activate - return to_activate - - def _resolve_dist( - self, req, best, replace_conflicting, env, installer, required_by, to_activate - ) -> Distribution: - dist = best.get(req.key) - if dist is None: - # Find the best distribution and add it to the map - dist = self.by_key.get(req.key) - if dist is None or (dist not in req and replace_conflicting): - ws = self - if env is None: - if dist is None: - env = Environment(self.entries) - else: - # Use an empty environment and workingset to avoid - # any further conflicts with the conflicting - # distribution - env = Environment([]) - ws = WorkingSet([]) - dist = best[req.key] = env.best_match( - req, ws, installer, replace_conflicting=replace_conflicting - ) - if dist is None: - requirers = required_by.get(req, None) - raise DistributionNotFound(req, requirers) - to_activate.append(dist) - if dist not in req: - # Oops, the "best" so far conflicts with a dependency - dependent_req = required_by[req] - raise VersionConflict(dist, req).with_context(dependent_req) - return dist - - @overload - def find_plugins( - self, - plugin_env: Environment, - full_env: Environment | None, - installer: _InstallerTypeT[_DistributionT], - fallback: bool = True, - ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ... - @overload - def find_plugins( - self, - plugin_env: Environment, - full_env: Environment | None = None, - *, - installer: _InstallerTypeT[_DistributionT], - fallback: bool = True, - ) -> tuple[list[_DistributionT], dict[Distribution, Exception]]: ... - @overload - def find_plugins( - self, - plugin_env: Environment, - full_env: Environment | None = None, - installer: _InstallerType | None = None, - fallback: bool = True, - ) -> tuple[list[Distribution], dict[Distribution, Exception]]: ... - def find_plugins( - self, - plugin_env: Environment, - full_env: Environment | None = None, - installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None, - fallback: bool = True, - ) -> tuple[ - list[Distribution] | list[_DistributionT], - dict[Distribution, Exception], - ]: - """Find all activatable distributions in `plugin_env` - - Example usage:: - - distributions, errors = working_set.find_plugins( - Environment(plugin_dirlist) - ) - # add plugins+libs to sys.path - map(working_set.add, distributions) - # display errors - print('Could not load', errors) - - The `plugin_env` should be an ``Environment`` instance that contains - only distributions that are in the project's "plugin directory" or - directories. The `full_env`, if supplied, should be an ``Environment`` - contains all currently-available distributions. If `full_env` is not - supplied, one is created automatically from the ``WorkingSet`` this - method is called on, which will typically mean that every directory on - ``sys.path`` will be scanned for distributions. - - `installer` is a standard installer callback as used by the - ``resolve()`` method. The `fallback` flag indicates whether we should - attempt to resolve older versions of a plugin if the newest version - cannot be resolved. - - This method returns a 2-tuple: (`distributions`, `error_info`), where - `distributions` is a list of the distributions found in `plugin_env` - that were loadable, along with any other distributions that are needed - to resolve their dependencies. `error_info` is a dictionary mapping - unloadable plugin distributions to an exception instance describing the - error that occurred. Usually this will be a ``DistributionNotFound`` or - ``VersionConflict`` instance. - """ - - plugin_projects = list(plugin_env) - # scan project names in alphabetic order - plugin_projects.sort() - - error_info: dict[Distribution, Exception] = {} - distributions: dict[Distribution, Exception | None] = {} - - if full_env is None: - env = Environment(self.entries) - env += plugin_env - else: - env = full_env + plugin_env - - shadow_set = self.__class__([]) - # put all our entries in shadow_set - list(map(shadow_set.add, self)) - - for project_name in plugin_projects: - for dist in plugin_env[project_name]: - req = [dist.as_requirement()] - - try: - resolvees = shadow_set.resolve(req, env, installer) - - except ResolutionError as v: - # save error info - error_info[dist] = v - if fallback: - # try the next older version of project - continue - else: - # give up on this project, keep going - break - - else: - list(map(shadow_set.add, resolvees)) - distributions.update(dict.fromkeys(resolvees)) - - # success, no need to try any more versions of this project - break - - sorted_distributions = list(distributions) - sorted_distributions.sort() - - return sorted_distributions, error_info - - def require(self, *requirements: _NestedStr): - """Ensure that distributions matching `requirements` are activated - - `requirements` must be a string or a (possibly-nested) sequence - thereof, specifying the distributions and versions required. The - return value is a sequence of the distributions that needed to be - activated to fulfill the requirements; all relevant distributions are - included, even if they were already activated in this working set. - """ - needed = self.resolve(parse_requirements(requirements)) - - for dist in needed: - self.add(dist) - - return needed - - def subscribe( - self, callback: Callable[[Distribution], object], existing: bool = True - ): - """Invoke `callback` for all distributions - - If `existing=True` (default), - call on all existing ones, as well. - """ - if callback in self.callbacks: - return - self.callbacks.append(callback) - if not existing: - return - for dist in self: - callback(dist) - - def _added_new(self, dist): - for callback in self.callbacks: - callback(dist) - - def __getstate__(self): - return ( - self.entries[:], - self.entry_keys.copy(), - self.by_key.copy(), - self.normalized_to_canonical_keys.copy(), - self.callbacks[:], - ) - - def __setstate__(self, e_k_b_n_c): - entries, keys, by_key, normalized_to_canonical_keys, callbacks = e_k_b_n_c - self.entries = entries[:] - self.entry_keys = keys.copy() - self.by_key = by_key.copy() - self.normalized_to_canonical_keys = normalized_to_canonical_keys.copy() - self.callbacks = callbacks[:] - - -class _ReqExtras(Dict["Requirement", Tuple[str, ...]]): - """ - Map each requirement to the extras that demanded it. - """ - - def markers_pass(self, req: Requirement, extras: tuple[str, ...] | None = None): - """ - Evaluate markers for req against each extra that - demanded it. - - Return False if the req has a marker and fails - evaluation. Otherwise, return True. - """ - extra_evals = ( - req.marker.evaluate({'extra': extra}) - for extra in self.get(req, ()) + (extras or (None,)) - ) - return not req.marker or any(extra_evals) - - -class Environment: - """Searchable snapshot of distributions on a search path""" - - def __init__( - self, - search_path: Iterable[str] | None = None, - platform: str | None = get_supported_platform(), - python: str | None = PY_MAJOR, - ): - """Snapshot distributions available on a search path - - Any distributions found on `search_path` are added to the environment. - `search_path` should be a sequence of ``sys.path`` items. If not - supplied, ``sys.path`` is used. - - `platform` is an optional string specifying the name of the platform - that platform-specific distributions must be compatible with. If - unspecified, it defaults to the current platform. `python` is an - optional string naming the desired version of Python (e.g. ``'3.6'``); - it defaults to the current version. - - You may explicitly set `platform` (and/or `python`) to ``None`` if you - wish to map *all* distributions, not just those compatible with the - running platform or Python version. - """ - self._distmap = {} - self.platform = platform - self.python = python - self.scan(search_path) - - def can_add(self, dist: Distribution): - """Is distribution `dist` acceptable for this environment? - - The distribution must match the platform and python version - requirements specified when this environment was created, or False - is returned. - """ - py_compat = ( - self.python is None - or dist.py_version is None - or dist.py_version == self.python - ) - return py_compat and compatible_platforms(dist.platform, self.platform) - - def remove(self, dist: Distribution): - """Remove `dist` from the environment""" - self._distmap[dist.key].remove(dist) - - def scan(self, search_path: Iterable[str] | None = None): - """Scan `search_path` for distributions usable in this environment - - Any distributions found are added to the environment. - `search_path` should be a sequence of ``sys.path`` items. If not - supplied, ``sys.path`` is used. Only distributions conforming to - the platform/python version defined at initialization are added. - """ - if search_path is None: - search_path = sys.path - - for item in search_path: - for dist in find_distributions(item): - self.add(dist) - - def __getitem__(self, project_name: str) -> list[Distribution]: - """Return a newest-to-oldest list of distributions for `project_name` - - Uses case-insensitive `project_name` comparison, assuming all the - project's distributions use their project's name converted to all - lowercase as their key. - - """ - distribution_key = project_name.lower() - return self._distmap.get(distribution_key, []) - - def add(self, dist: Distribution): - """Add `dist` if we ``can_add()`` it and it has not already been added""" - if self.can_add(dist) and dist.has_version(): - dists = self._distmap.setdefault(dist.key, []) - if dist not in dists: - dists.append(dist) - dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) - - @overload - def best_match( - self, - req: Requirement, - working_set: WorkingSet, - installer: _InstallerTypeT[_DistributionT], - replace_conflicting: bool = False, - ) -> _DistributionT: ... - @overload - def best_match( - self, - req: Requirement, - working_set: WorkingSet, - installer: _InstallerType | None = None, - replace_conflicting: bool = False, - ) -> Distribution | None: ... - def best_match( - self, - req: Requirement, - working_set: WorkingSet, - installer: _InstallerType | None | _InstallerTypeT[_DistributionT] = None, - replace_conflicting: bool = False, - ) -> Distribution | None: - """Find distribution best matching `req` and usable on `working_set` - - This calls the ``find(req)`` method of the `working_set` to see if a - suitable distribution is already active. (This may raise - ``VersionConflict`` if an unsuitable version of the project is already - active in the specified `working_set`.) If a suitable distribution - isn't active, this method returns the newest distribution in the - environment that meets the ``Requirement`` in `req`. If no suitable - distribution is found, and `installer` is supplied, then the result of - calling the environment's ``obtain(req, installer)`` method will be - returned. - """ - try: - dist = working_set.find(req) - except VersionConflict: - if not replace_conflicting: - raise - dist = None - if dist is not None: - return dist - for dist in self[req.key]: - if dist in req: - return dist - # try to download/install - return self.obtain(req, installer) - - @overload - def obtain( - self, - requirement: Requirement, - installer: _InstallerTypeT[_DistributionT], - ) -> _DistributionT: ... - @overload - def obtain( - self, - requirement: Requirement, - installer: Callable[[Requirement], None] | None = None, - ) -> None: ... - @overload - def obtain( - self, - requirement: Requirement, - installer: _InstallerType | None = None, - ) -> Distribution | None: ... - def obtain( - self, - requirement: Requirement, - installer: Callable[[Requirement], None] - | _InstallerType - | None - | _InstallerTypeT[_DistributionT] = None, - ) -> Distribution | None: - """Obtain a distribution matching `requirement` (e.g. via download) - - Obtain a distro that matches requirement (e.g. via download). In the - base ``Environment`` class, this routine just returns - ``installer(requirement)``, unless `installer` is None, in which case - None is returned instead. This method is a hook that allows subclasses - to attempt other ways of obtaining a distribution before falling back - to the `installer` argument.""" - return installer(requirement) if installer else None - - def __iter__(self) -> Iterator[str]: - """Yield the unique project names of the available distributions""" - for key in self._distmap.keys(): - if self[key]: - yield key - - def __iadd__(self, other: Distribution | Environment): - """In-place addition of a distribution or environment""" - if isinstance(other, Distribution): - self.add(other) - elif isinstance(other, Environment): - for project in other: - for dist in other[project]: - self.add(dist) - else: - raise TypeError("Can't add %r to environment" % (other,)) - return self - - def __add__(self, other: Distribution | Environment): - """Add an environment or distribution to an environment""" - new = self.__class__([], platform=None, python=None) - for env in self, other: - new += env - return new - - -# XXX backward compatibility -AvailableDistributions = Environment - - -class ExtractionError(RuntimeError): - """An error occurred extracting a resource - - The following attributes are available from instances of this exception: - - manager - The resource manager that raised this exception - - cache_path - The base directory for resource extraction - - original_error - The exception instance that caused extraction to fail - """ - - manager: ResourceManager - cache_path: str - original_error: BaseException | None - - -class ResourceManager: - """Manage resource extraction and packages""" - - extraction_path: str | None = None - - def __init__(self): - self.cached_files = {} - - def resource_exists(self, package_or_requirement: _PkgReqType, resource_name: str): - """Does the named resource exist?""" - return get_provider(package_or_requirement).has_resource(resource_name) - - def resource_isdir(self, package_or_requirement: _PkgReqType, resource_name: str): - """Is the named resource an existing directory?""" - return get_provider(package_or_requirement).resource_isdir(resource_name) - - def resource_filename( - self, package_or_requirement: _PkgReqType, resource_name: str - ): - """Return a true filesystem path for specified resource""" - return get_provider(package_or_requirement).get_resource_filename( - self, resource_name - ) - - def resource_stream(self, package_or_requirement: _PkgReqType, resource_name: str): - """Return a readable file-like object for specified resource""" - return get_provider(package_or_requirement).get_resource_stream( - self, resource_name - ) - - def resource_string( - self, package_or_requirement: _PkgReqType, resource_name: str - ) -> bytes: - """Return specified resource as :obj:`bytes`""" - return get_provider(package_or_requirement).get_resource_string( - self, resource_name - ) - - def resource_listdir(self, package_or_requirement: _PkgReqType, resource_name: str): - """List the contents of the named resource directory""" - return get_provider(package_or_requirement).resource_listdir(resource_name) - - def extraction_error(self) -> NoReturn: - """Give an error message for problems extracting file(s)""" - - old_exc = sys.exc_info()[1] - cache_path = self.extraction_path or get_default_cache() - - tmpl = textwrap.dedent( - """ - Can't extract file(s) to egg cache - - The following error occurred while trying to extract file(s) - to the Python egg cache: - - {old_exc} - - The Python egg cache directory is currently set to: - - {cache_path} - - Perhaps your account does not have write access to this directory? - You can change the cache directory by setting the PYTHON_EGG_CACHE - environment variable to point to an accessible directory. - """ - ).lstrip() - err = ExtractionError(tmpl.format(**locals())) - err.manager = self - err.cache_path = cache_path - err.original_error = old_exc - raise err - - def get_cache_path(self, archive_name: str, names: Iterable[StrPath] = ()): - """Return absolute location in cache for `archive_name` and `names` - - The parent directory of the resulting path will be created if it does - not already exist. `archive_name` should be the base filename of the - enclosing egg (which may not be the name of the enclosing zipfile!), - including its ".egg" extension. `names`, if provided, should be a - sequence of path name parts "under" the egg's extraction location. - - This method should only be called by resource providers that need to - obtain an extraction location, and only for names they intend to - extract, as it tracks the generated names for possible cleanup later. - """ - extract_path = self.extraction_path or get_default_cache() - target_path = os.path.join(extract_path, archive_name + '-tmp', *names) - try: - _bypass_ensure_directory(target_path) - except Exception: - self.extraction_error() - - self._warn_unsafe_extraction_path(extract_path) - - self.cached_files[target_path] = True - return target_path - - @staticmethod - def _warn_unsafe_extraction_path(path): - """ - If the default extraction path is overridden and set to an insecure - location, such as /tmp, it opens up an opportunity for an attacker to - replace an extracted file with an unauthorized payload. Warn the user - if a known insecure location is used. - - See Distribute #375 for more details. - """ - if os.name == 'nt' and not path.startswith(os.environ['windir']): - # On Windows, permissions are generally restrictive by default - # and temp directories are not writable by other users, so - # bypass the warning. - return - mode = os.stat(path).st_mode - if mode & stat.S_IWOTH or mode & stat.S_IWGRP: - msg = ( - "Extraction path is writable by group/others " - "and vulnerable to attack when " - "used with get_resource_filename ({path}). " - "Consider a more secure " - "location (set with .set_extraction_path or the " - "PYTHON_EGG_CACHE environment variable)." - ).format(**locals()) - warnings.warn(msg, UserWarning) - - def postprocess(self, tempname: StrOrBytesPath, filename: StrOrBytesPath): - """Perform any platform-specific postprocessing of `tempname` - - This is where Mac header rewrites should be done; other platforms don't - have anything special they should do. - - Resource providers should call this method ONLY after successfully - extracting a compressed resource. They must NOT call it on resources - that are already in the filesystem. - - `tempname` is the current (temporary) name of the file, and `filename` - is the name it will be renamed to by the caller after this routine - returns. - """ - - if os.name == 'posix': - # Make the resource executable - mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777 - os.chmod(tempname, mode) - - def set_extraction_path(self, path: str): - """Set the base path where resources will be extracted to, if needed. - - If you do not call this routine before any extractions take place, the - path defaults to the return value of ``get_default_cache()``. (Which - is based on the ``PYTHON_EGG_CACHE`` environment variable, with various - platform-specific fallbacks. See that routine's documentation for more - details.) - - Resources are extracted to subdirectories of this path based upon - information given by the ``IResourceProvider``. You may set this to a - temporary directory, but then you must call ``cleanup_resources()`` to - delete the extracted files when done. There is no guarantee that - ``cleanup_resources()`` will be able to remove all extracted files. - - (Note: you may not change the extraction path for a given resource - manager once resources have been extracted, unless you first call - ``cleanup_resources()``.) - """ - if self.cached_files: - raise ValueError("Can't change extraction path, files already extracted") - - self.extraction_path = path - - def cleanup_resources(self, force: bool = False) -> list[str]: - """ - Delete all extracted resource files and directories, returning a list - of the file and directory names that could not be successfully removed. - This function does not have any concurrency protection, so it should - generally only be called when the extraction path is a temporary - directory exclusive to a single process. This method is not - automatically called; you must call it explicitly or register it as an - ``atexit`` function if you wish to ensure cleanup of a temporary - directory used for extractions. - """ - # XXX - return [] - - -def get_default_cache() -> str: - """ - Return the ``PYTHON_EGG_CACHE`` environment variable - or a platform-relevant user cache dir for an app - named "Python-Eggs". - """ - return os.environ.get('PYTHON_EGG_CACHE') or _user_cache_dir(appname='Python-Eggs') - - -def safe_name(name: str): - """Convert an arbitrary string to a standard distribution name - - Any runs of non-alphanumeric/. characters are replaced with a single '-'. - """ - return re.sub('[^A-Za-z0-9.]+', '-', name) - - -def safe_version(version: str): - """ - Convert an arbitrary string to a standard version string - """ - try: - # normalize the version - return str(_packaging_version.Version(version)) - except _packaging_version.InvalidVersion: - version = version.replace(' ', '.') - return re.sub('[^A-Za-z0-9.]+', '-', version) - - -def _forgiving_version(version): - """Fallback when ``safe_version`` is not safe enough - >>> parse_version(_forgiving_version('0.23ubuntu1')) - <Version('0.23.dev0+sanitized.ubuntu1')> - >>> parse_version(_forgiving_version('0.23-')) - <Version('0.23.dev0+sanitized')> - >>> parse_version(_forgiving_version('0.-_')) - <Version('0.dev0+sanitized')> - >>> parse_version(_forgiving_version('42.+?1')) - <Version('42.dev0+sanitized.1')> - >>> parse_version(_forgiving_version('hello world')) - <Version('0.dev0+sanitized.hello.world')> - """ - version = version.replace(' ', '.') - match = _PEP440_FALLBACK.search(version) - if match: - safe = match["safe"] - rest = version[len(safe) :] - else: - safe = "0" - rest = version - local = f"sanitized.{_safe_segment(rest)}".strip(".") - return f"{safe}.dev0+{local}" - - -def _safe_segment(segment): - """Convert an arbitrary string into a safe segment""" - segment = re.sub('[^A-Za-z0-9.]+', '-', segment) - segment = re.sub('-[^A-Za-z0-9]+', '-', segment) - return re.sub(r'\.[^A-Za-z0-9]+', '.', segment).strip(".-") - - -def safe_extra(extra: str): - """Convert an arbitrary string to a standard 'extra' name - - Any runs of non-alphanumeric characters are replaced with a single '_', - and the result is always lowercased. - """ - return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower() - - -def to_filename(name: str): - """Convert a project or version name to its filename-escaped form - - Any '-' characters are currently replaced with '_'. - """ - return name.replace('-', '_') - - -def invalid_marker(text: str): - """ - Validate text as a PEP 508 environment marker; return an exception - if invalid or False otherwise. - """ - try: - evaluate_marker(text) - except SyntaxError as e: - e.filename = None - e.lineno = None - return e - return False - - -def evaluate_marker(text: str, extra: str | None = None) -> bool: - """ - Evaluate a PEP 508 environment marker. - Return a boolean indicating the marker result in this environment. - Raise SyntaxError if marker is invalid. - - This implementation uses the 'pyparsing' module. - """ - try: - marker = _packaging_markers.Marker(text) - return marker.evaluate() - except _packaging_markers.InvalidMarker as e: - raise SyntaxError(e) from e - - -class NullProvider: - """Try to implement resources and metadata for arbitrary PEP 302 loaders""" - - egg_name: str | None = None - egg_info: str | None = None - loader: _LoaderProtocol | None = None - - def __init__(self, module: _ModuleLike): - self.loader = getattr(module, '__loader__', None) - self.module_path = os.path.dirname(getattr(module, '__file__', '')) - - def get_resource_filename(self, manager: ResourceManager, resource_name: str): - return self._fn(self.module_path, resource_name) - - def get_resource_stream(self, manager: ResourceManager, resource_name: str): - return io.BytesIO(self.get_resource_string(manager, resource_name)) - - def get_resource_string( - self, manager: ResourceManager, resource_name: str - ) -> bytes: - return self._get(self._fn(self.module_path, resource_name)) - - def has_resource(self, resource_name: str): - return self._has(self._fn(self.module_path, resource_name)) - - def _get_metadata_path(self, name): - return self._fn(self.egg_info, name) - - def has_metadata(self, name: str) -> bool: - if not self.egg_info: - return False - - path = self._get_metadata_path(name) - return self._has(path) - - def get_metadata(self, name: str): - if not self.egg_info: - return "" - path = self._get_metadata_path(name) - value = self._get(path) - try: - return value.decode('utf-8') - except UnicodeDecodeError as exc: - # Include the path in the error message to simplify - # troubleshooting, and without changing the exception type. - exc.reason += ' in {} file at path: {}'.format(name, path) - raise - - def get_metadata_lines(self, name: str) -> Iterator[str]: - return yield_lines(self.get_metadata(name)) - - def resource_isdir(self, resource_name: str): - return self._isdir(self._fn(self.module_path, resource_name)) - - def metadata_isdir(self, name: str) -> bool: - return bool(self.egg_info and self._isdir(self._fn(self.egg_info, name))) - - def resource_listdir(self, resource_name: str): - return self._listdir(self._fn(self.module_path, resource_name)) - - def metadata_listdir(self, name: str) -> list[str]: - if self.egg_info: - return self._listdir(self._fn(self.egg_info, name)) - return [] - - def run_script(self, script_name: str, namespace: dict[str, Any]): - script = 'scripts/' + script_name - if not self.has_metadata(script): - raise ResolutionError( - "Script {script!r} not found in metadata at {self.egg_info!r}".format( - **locals() - ), - ) - - script_text = self.get_metadata(script).replace('\r\n', '\n') - script_text = script_text.replace('\r', '\n') - script_filename = self._fn(self.egg_info, script) - namespace['__file__'] = script_filename - if os.path.exists(script_filename): - source = _read_utf8_with_fallback(script_filename) - code = compile(source, script_filename, 'exec') - exec(code, namespace, namespace) - else: - from linecache import cache - - cache[script_filename] = ( - len(script_text), - 0, - script_text.split('\n'), - script_filename, - ) - script_code = compile(script_text, script_filename, 'exec') - exec(script_code, namespace, namespace) - - def _has(self, path) -> bool: - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _isdir(self, path) -> bool: - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _listdir(self, path) -> list[str]: - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _fn(self, base: str | None, resource_name: str): - if base is None: - raise TypeError( - "`base` parameter in `_fn` is `None`. Either override this method or check the parameter first." - ) - self._validate_resource_path(resource_name) - if resource_name: - return os.path.join(base, *resource_name.split('/')) - return base - - @staticmethod - def _validate_resource_path(path): - """ - Validate the resource paths according to the docs. - https://setuptools.pypa.io/en/latest/pkg_resources.html#basic-resource-access - - >>> warned = getfixture('recwarn') - >>> warnings.simplefilter('always') - >>> vrp = NullProvider._validate_resource_path - >>> vrp('foo/bar.txt') - >>> bool(warned) - False - >>> vrp('../foo/bar.txt') - >>> bool(warned) - True - >>> warned.clear() - >>> vrp('/foo/bar.txt') - >>> bool(warned) - True - >>> vrp('foo/../../bar.txt') - >>> bool(warned) - True - >>> warned.clear() - >>> vrp('foo/f../bar.txt') - >>> bool(warned) - False - - Windows path separators are straight-up disallowed. - >>> vrp(r'\\foo/bar.txt') - Traceback (most recent call last): - ... - ValueError: Use of .. or absolute path in a resource path \ -is not allowed. - - >>> vrp(r'C:\\foo/bar.txt') - Traceback (most recent call last): - ... - ValueError: Use of .. or absolute path in a resource path \ -is not allowed. - - Blank values are allowed - - >>> vrp('') - >>> bool(warned) - False - - Non-string values are not. - - >>> vrp(None) - Traceback (most recent call last): - ... - AttributeError: ... - """ - invalid = ( - os.path.pardir in path.split(posixpath.sep) - or posixpath.isabs(path) - or ntpath.isabs(path) - or path.startswith("\\") - ) - if not invalid: - return - - msg = "Use of .. or absolute path in a resource path is not allowed." - - # Aggressively disallow Windows absolute paths - if (path.startswith("\\") or ntpath.isabs(path)) and not posixpath.isabs(path): - raise ValueError(msg) - - # for compatibility, warn; in future - # raise ValueError(msg) - issue_warning( - msg[:-1] + " and will raise exceptions in a future release.", - DeprecationWarning, - ) - - def _get(self, path) -> bytes: - if hasattr(self.loader, 'get_data') and self.loader: - # Already checked get_data exists - return self.loader.get_data(path) # type: ignore[attr-defined] - raise NotImplementedError( - "Can't perform this operation for loaders without 'get_data()'" - ) - - -register_loader_type(object, NullProvider) - - -def _parents(path): - """ - yield all parents of path including path - """ - last = None - while path != last: - yield path - last = path - path, _ = os.path.split(path) - - -class EggProvider(NullProvider): - """Provider based on a virtual filesystem""" - - def __init__(self, module: _ModuleLike): - super().__init__(module) - self._setup_prefix() - - def _setup_prefix(self): - # Assume that metadata may be nested inside a "basket" - # of multiple eggs and use module_path instead of .archive. - eggs = filter(_is_egg_path, _parents(self.module_path)) - egg = next(eggs, None) - egg and self._set_egg(egg) - - def _set_egg(self, path: str): - self.egg_name = os.path.basename(path) - self.egg_info = os.path.join(path, 'EGG-INFO') - self.egg_root = path - - -class DefaultProvider(EggProvider): - """Provides access to package resources in the filesystem""" - - def _has(self, path) -> bool: - return os.path.exists(path) - - def _isdir(self, path) -> bool: - return os.path.isdir(path) - - def _listdir(self, path): - return os.listdir(path) - - def get_resource_stream(self, manager: object, resource_name: str): - return open(self._fn(self.module_path, resource_name), 'rb') - - def _get(self, path) -> bytes: - with open(path, 'rb') as stream: - return stream.read() - - @classmethod - def _register(cls): - loader_names = ( - 'SourceFileLoader', - 'SourcelessFileLoader', - ) - for name in loader_names: - loader_cls = getattr(importlib.machinery, name, type(None)) - register_loader_type(loader_cls, cls) - - -DefaultProvider._register() - - -class EmptyProvider(NullProvider): - """Provider that returns nothing for all requests""" - - # A special case, we don't want all Providers inheriting from NullProvider to have a potentially None module_path - module_path: str | None = None # type: ignore[assignment] - - _isdir = _has = lambda self, path: False - - def _get(self, path) -> bytes: - return b'' - - def _listdir(self, path): - return [] - - def __init__(self): - pass - - -empty_provider = EmptyProvider() - - -class ZipManifests(Dict[str, "MemoizedZipManifests.manifest_mod"]): - """ - zip manifest builder - """ - - # `path` could be `StrPath | IO[bytes]` but that violates the LSP for `MemoizedZipManifests.load` - @classmethod - def build(cls, path: str): - """ - Build a dictionary similar to the zipimport directory - caches, except instead of tuples, store ZipInfo objects. - - Use a platform-specific path separator (os.sep) for the path keys - for compatibility with pypy on Windows. - """ - with zipfile.ZipFile(path) as zfile: - items = ( - ( - name.replace('/', os.sep), - zfile.getinfo(name), - ) - for name in zfile.namelist() - ) - return dict(items) - - load = build - - -class MemoizedZipManifests(ZipManifests): - """ - Memoized zipfile manifests. - """ - - class manifest_mod(NamedTuple): - manifest: dict[str, zipfile.ZipInfo] - mtime: float - - def load(self, path: str) -> dict[str, zipfile.ZipInfo]: # type: ignore[override] # ZipManifests.load is a classmethod - """ - Load a manifest at path or return a suitable manifest already loaded. - """ - path = os.path.normpath(path) - mtime = os.stat(path).st_mtime - - if path not in self or self[path].mtime != mtime: - manifest = self.build(path) - self[path] = self.manifest_mod(manifest, mtime) - - return self[path].manifest - - -class ZipProvider(EggProvider): - """Resource support for zips and eggs""" - - eagers: list[str] | None = None - _zip_manifests = MemoizedZipManifests() - # ZipProvider's loader should always be a zipimporter or equivalent - loader: zipimport.zipimporter - - def __init__(self, module: _ZipLoaderModule): - super().__init__(module) - self.zip_pre = self.loader.archive + os.sep - - def _zipinfo_name(self, fspath): - # Convert a virtual filename (full path to file) into a zipfile subpath - # usable with the zipimport directory cache for our target archive - fspath = fspath.rstrip(os.sep) - if fspath == self.loader.archive: - return '' - if fspath.startswith(self.zip_pre): - return fspath[len(self.zip_pre) :] - raise AssertionError("%s is not a subpath of %s" % (fspath, self.zip_pre)) - - def _parts(self, zip_path): - # Convert a zipfile subpath into an egg-relative path part list. - # pseudo-fs path - fspath = self.zip_pre + zip_path - if fspath.startswith(self.egg_root + os.sep): - return fspath[len(self.egg_root) + 1 :].split(os.sep) - raise AssertionError("%s is not a subpath of %s" % (fspath, self.egg_root)) - - @property - def zipinfo(self): - return self._zip_manifests.load(self.loader.archive) - - def get_resource_filename(self, manager: ResourceManager, resource_name: str): - if not self.egg_name: - raise NotImplementedError( - "resource_filename() only supported for .egg, not .zip" - ) - # no need to lock for extraction, since we use temp names - zip_path = self._resource_to_zip(resource_name) - eagers = self._get_eager_resources() - if '/'.join(self._parts(zip_path)) in eagers: - for name in eagers: - self._extract_resource(manager, self._eager_to_zip(name)) - return self._extract_resource(manager, zip_path) - - @staticmethod - def _get_date_and_size(zip_stat): - size = zip_stat.file_size - # ymdhms+wday, yday, dst - date_time = zip_stat.date_time + (0, 0, -1) - # 1980 offset already done - timestamp = time.mktime(date_time) - return timestamp, size - - # FIXME: 'ZipProvider._extract_resource' is too complex (12) - def _extract_resource(self, manager: ResourceManager, zip_path) -> str: # noqa: C901 - if zip_path in self._index(): - for name in self._index()[zip_path]: - last = self._extract_resource(manager, os.path.join(zip_path, name)) - # return the extracted directory name - return os.path.dirname(last) - - timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) - - if not WRITE_SUPPORT: - raise OSError( - '"os.rename" and "os.unlink" are not supported on this platform' - ) - try: - if not self.egg_name: - raise OSError( - '"egg_name" is empty. This likely means no egg could be found from the "module_path".' - ) - real_path = manager.get_cache_path(self.egg_name, self._parts(zip_path)) - - if self._is_current(real_path, zip_path): - return real_path - - outf, tmpnam = _mkstemp( - ".$extract", - dir=os.path.dirname(real_path), - ) - os.write(outf, self.loader.get_data(zip_path)) - os.close(outf) - utime(tmpnam, (timestamp, timestamp)) - manager.postprocess(tmpnam, real_path) - - try: - rename(tmpnam, real_path) - - except OSError: - if os.path.isfile(real_path): - if self._is_current(real_path, zip_path): - # the file became current since it was checked above, - # so proceed. - return real_path - # Windows, del old file and retry - elif os.name == 'nt': - unlink(real_path) - rename(tmpnam, real_path) - return real_path - raise - - except OSError: - # report a user-friendly error - manager.extraction_error() - - return real_path - - def _is_current(self, file_path, zip_path): - """ - Return True if the file_path is current for this zip_path - """ - timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) - if not os.path.isfile(file_path): - return False - stat = os.stat(file_path) - if stat.st_size != size or stat.st_mtime != timestamp: - return False - # check that the contents match - zip_contents = self.loader.get_data(zip_path) - with open(file_path, 'rb') as f: - file_contents = f.read() - return zip_contents == file_contents - - def _get_eager_resources(self): - if self.eagers is None: - eagers = [] - for name in ('native_libs.txt', 'eager_resources.txt'): - if self.has_metadata(name): - eagers.extend(self.get_metadata_lines(name)) - self.eagers = eagers - return self.eagers - - def _index(self): - try: - return self._dirindex - except AttributeError: - ind = {} - for path in self.zipinfo: - parts = path.split(os.sep) - while parts: - parent = os.sep.join(parts[:-1]) - if parent in ind: - ind[parent].append(parts[-1]) - break - else: - ind[parent] = [parts.pop()] - self._dirindex = ind - return ind - - def _has(self, fspath) -> bool: - zip_path = self._zipinfo_name(fspath) - return zip_path in self.zipinfo or zip_path in self._index() - - def _isdir(self, fspath) -> bool: - return self._zipinfo_name(fspath) in self._index() - - def _listdir(self, fspath): - return list(self._index().get(self._zipinfo_name(fspath), ())) - - def _eager_to_zip(self, resource_name: str): - return self._zipinfo_name(self._fn(self.egg_root, resource_name)) - - def _resource_to_zip(self, resource_name: str): - return self._zipinfo_name(self._fn(self.module_path, resource_name)) - - -register_loader_type(zipimport.zipimporter, ZipProvider) - - -class FileMetadata(EmptyProvider): - """Metadata handler for standalone PKG-INFO files - - Usage:: - - metadata = FileMetadata("/path/to/PKG-INFO") - - This provider rejects all data and metadata requests except for PKG-INFO, - which is treated as existing, and will be the contents of the file at - the provided location. - """ - - def __init__(self, path: StrPath): - self.path = path - - def _get_metadata_path(self, name): - return self.path - - def has_metadata(self, name: str) -> bool: - return name == 'PKG-INFO' and os.path.isfile(self.path) - - def get_metadata(self, name: str): - if name != 'PKG-INFO': - raise KeyError("No metadata except PKG-INFO is available") - - with open(self.path, encoding='utf-8', errors="replace") as f: - metadata = f.read() - self._warn_on_replacement(metadata) - return metadata - - def _warn_on_replacement(self, metadata): - replacement_char = '�' - if replacement_char in metadata: - tmpl = "{self.path} could not be properly decoded in UTF-8" - msg = tmpl.format(**locals()) - warnings.warn(msg) - - def get_metadata_lines(self, name: str) -> Iterator[str]: - return yield_lines(self.get_metadata(name)) - - -class PathMetadata(DefaultProvider): - """Metadata provider for egg directories - - Usage:: - - # Development eggs: - - egg_info = "/path/to/PackageName.egg-info" - base_dir = os.path.dirname(egg_info) - metadata = PathMetadata(base_dir, egg_info) - dist_name = os.path.splitext(os.path.basename(egg_info))[0] - dist = Distribution(basedir, project_name=dist_name, metadata=metadata) - - # Unpacked egg directories: - - egg_path = "/path/to/PackageName-ver-pyver-etc.egg" - metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) - dist = Distribution.from_filename(egg_path, metadata=metadata) - """ - - def __init__(self, path: str, egg_info: str): - self.module_path = path - self.egg_info = egg_info - - -class EggMetadata(ZipProvider): - """Metadata provider for .egg files""" - - def __init__(self, importer: zipimport.zipimporter): - """Create a metadata provider from a zipimporter""" - - self.zip_pre = importer.archive + os.sep - self.loader = importer - if importer.prefix: - self.module_path = os.path.join(importer.archive, importer.prefix) - else: - self.module_path = importer.archive - self._setup_prefix() - - -_distribution_finders: dict[type, _DistFinderType[Any]] = _declare_state( - 'dict', '_distribution_finders', {} -) - - -def register_finder(importer_type: type[_T], distribution_finder: _DistFinderType[_T]): - """Register `distribution_finder` to find distributions in sys.path items - - `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item - handler), and `distribution_finder` is a callable that, passed a path - item and the importer instance, yields ``Distribution`` instances found on - that path item. See ``pkg_resources.find_on_path`` for an example.""" - _distribution_finders[importer_type] = distribution_finder - - -def find_distributions(path_item: str, only: bool = False): - """Yield distributions accessible via `path_item`""" - importer = get_importer(path_item) - finder = _find_adapter(_distribution_finders, importer) - return finder(importer, path_item, only) - - -def find_eggs_in_zip( - importer: zipimport.zipimporter, path_item: str, only: bool = False -) -> Iterator[Distribution]: - """ - Find eggs in zip files; possibly multiple nested eggs. - """ - if importer.archive.endswith('.whl'): - # wheels are not supported with this finder - # they don't have PKG-INFO metadata, and won't ever contain eggs - return - metadata = EggMetadata(importer) - if metadata.has_metadata('PKG-INFO'): - yield Distribution.from_filename(path_item, metadata=metadata) - if only: - # don't yield nested distros - return - for subitem in metadata.resource_listdir(''): - if _is_egg_path(subitem): - subpath = os.path.join(path_item, subitem) - dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath) - yield from dists - elif subitem.lower().endswith(('.dist-info', '.egg-info')): - subpath = os.path.join(path_item, subitem) - submeta = EggMetadata(zipimport.zipimporter(subpath)) - submeta.egg_info = subpath - yield Distribution.from_location(path_item, subitem, submeta) - - -register_finder(zipimport.zipimporter, find_eggs_in_zip) - - -def find_nothing( - importer: object | None, path_item: str | None, only: bool | None = False -): - return () - - -register_finder(object, find_nothing) - - -def find_on_path(importer: object | None, path_item, only=False): - """Yield distributions accessible on a sys.path directory""" - path_item = _normalize_cached(path_item) - - if _is_unpacked_egg(path_item): - yield Distribution.from_filename( - path_item, - metadata=PathMetadata(path_item, os.path.join(path_item, 'EGG-INFO')), - ) - return - - entries = (os.path.join(path_item, child) for child in safe_listdir(path_item)) - - # scan for .egg and .egg-info in directory - for entry in sorted(entries): - fullpath = os.path.join(path_item, entry) - factory = dist_factory(path_item, entry, only) - yield from factory(fullpath) - - -def dist_factory(path_item, entry, only): - """Return a dist_factory for the given entry.""" - lower = entry.lower() - is_egg_info = lower.endswith('.egg-info') - is_dist_info = lower.endswith('.dist-info') and os.path.isdir( - os.path.join(path_item, entry) - ) - is_meta = is_egg_info or is_dist_info - return ( - distributions_from_metadata - if is_meta - else find_distributions - if not only and _is_egg_path(entry) - else resolve_egg_link - if not only and lower.endswith('.egg-link') - else NoDists() - ) - - -class NoDists: - """ - >>> bool(NoDists()) - False - - >>> list(NoDists()('anything')) - [] - """ - - def __bool__(self): - return False - - def __call__(self, fullpath): - return iter(()) - - -def safe_listdir(path: StrOrBytesPath): - """ - Attempt to list contents of path, but suppress some exceptions. - """ - try: - return os.listdir(path) - except (PermissionError, NotADirectoryError): - pass - except OSError as e: - # Ignore the directory if does not exist, not a directory or - # permission denied - if e.errno not in (errno.ENOTDIR, errno.EACCES, errno.ENOENT): - raise - return () - - -def distributions_from_metadata(path: str): - root = os.path.dirname(path) - if os.path.isdir(path): - if len(os.listdir(path)) == 0: - # empty metadata dir; skip - return - metadata: _MetadataType = PathMetadata(root, path) - else: - metadata = FileMetadata(path) - entry = os.path.basename(path) - yield Distribution.from_location( - root, - entry, - metadata, - precedence=DEVELOP_DIST, - ) - - -def non_empty_lines(path): - """ - Yield non-empty lines from file at path - """ - for line in _read_utf8_with_fallback(path).splitlines(): - line = line.strip() - if line: - yield line - - -def resolve_egg_link(path): - """ - Given a path to an .egg-link, resolve distributions - present in the referenced path. - """ - referenced_paths = non_empty_lines(path) - resolved_paths = ( - os.path.join(os.path.dirname(path), ref) for ref in referenced_paths - ) - dist_groups = map(find_distributions, resolved_paths) - return next(dist_groups, ()) - - -if hasattr(pkgutil, 'ImpImporter'): - register_finder(pkgutil.ImpImporter, find_on_path) - -register_finder(importlib.machinery.FileFinder, find_on_path) - -_namespace_handlers: dict[type, _NSHandlerType[Any]] = _declare_state( - 'dict', '_namespace_handlers', {} -) -_namespace_packages: dict[str | None, list[str]] = _declare_state( - 'dict', '_namespace_packages', {} -) - - -def register_namespace_handler( - importer_type: type[_T], namespace_handler: _NSHandlerType[_T] -): - """Register `namespace_handler` to declare namespace packages - - `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item - handler), and `namespace_handler` is a callable like this:: - - def namespace_handler(importer, path_entry, moduleName, module): - # return a path_entry to use for child packages - - Namespace handlers are only called if the importer object has already - agreed that it can handle the relevant path item, and they should only - return a subpath if the module __path__ does not already contain an - equivalent subpath. For an example namespace handler, see - ``pkg_resources.file_ns_handler``. - """ - _namespace_handlers[importer_type] = namespace_handler - - -def _handle_ns(packageName, path_item): - """Ensure that named package includes a subpath of path_item (if needed)""" - - importer = get_importer(path_item) - if importer is None: - return None - - # use find_spec (PEP 451) and fall-back to find_module (PEP 302) - try: - spec = importer.find_spec(packageName) - except AttributeError: - # capture warnings due to #1111 - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - loader = importer.find_module(packageName) - else: - loader = spec.loader if spec else None - - if loader is None: - return None - module = sys.modules.get(packageName) - if module is None: - module = sys.modules[packageName] = types.ModuleType(packageName) - module.__path__ = [] - _set_parent_ns(packageName) - elif not hasattr(module, '__path__'): - raise TypeError("Not a package:", packageName) - handler = _find_adapter(_namespace_handlers, importer) - subpath = handler(importer, path_item, packageName, module) - if subpath is not None: - path = module.__path__ - path.append(subpath) - importlib.import_module(packageName) - _rebuild_mod_path(path, packageName, module) - return subpath - - -def _rebuild_mod_path(orig_path, package_name, module: types.ModuleType): - """ - Rebuild module.__path__ ensuring that all entries are ordered - corresponding to their sys.path order - """ - sys_path = [_normalize_cached(p) for p in sys.path] - - def safe_sys_path_index(entry): - """ - Workaround for #520 and #513. - """ - try: - return sys_path.index(entry) - except ValueError: - return float('inf') - - def position_in_sys_path(path): - """ - Return the ordinal of the path based on its position in sys.path - """ - path_parts = path.split(os.sep) - module_parts = package_name.count('.') + 1 - parts = path_parts[:-module_parts] - return safe_sys_path_index(_normalize_cached(os.sep.join(parts))) - - new_path = sorted(orig_path, key=position_in_sys_path) - new_path = [_normalize_cached(p) for p in new_path] - - if isinstance(module.__path__, list): - module.__path__[:] = new_path - else: - module.__path__ = new_path - - -def declare_namespace(packageName: str): - """Declare that package 'packageName' is a namespace package""" - - msg = ( - f"Deprecated call to `pkg_resources.declare_namespace({packageName!r})`.\n" - "Implementing implicit namespace packages (as specified in PEP 420) " - "is preferred to `pkg_resources.declare_namespace`. " - "See https://setuptools.pypa.io/en/latest/references/" - "keywords.html#keyword-namespace-packages" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) - - _imp.acquire_lock() - try: - if packageName in _namespace_packages: - return - - path: MutableSequence[str] = sys.path - parent, _, _ = packageName.rpartition('.') - - if parent: - declare_namespace(parent) - if parent not in _namespace_packages: - __import__(parent) - try: - path = sys.modules[parent].__path__ - except AttributeError as e: - raise TypeError("Not a package:", parent) from e - - # Track what packages are namespaces, so when new path items are added, - # they can be updated - _namespace_packages.setdefault(parent or None, []).append(packageName) - _namespace_packages.setdefault(packageName, []) - - for path_item in path: - # Ensure all the parent's path items are reflected in the child, - # if they apply - _handle_ns(packageName, path_item) - - finally: - _imp.release_lock() - - -def fixup_namespace_packages(path_item: str, parent: str | None = None): - """Ensure that previously-declared namespace packages include path_item""" - _imp.acquire_lock() - try: - for package in _namespace_packages.get(parent, ()): - subpath = _handle_ns(package, path_item) - if subpath: - fixup_namespace_packages(subpath, package) - finally: - _imp.release_lock() - - -def file_ns_handler( - importer: object, - path_item: StrPath, - packageName: str, - module: types.ModuleType, -): - """Compute an ns-package subpath for a filesystem or zipfile importer""" - - subpath = os.path.join(path_item, packageName.split('.')[-1]) - normalized = _normalize_cached(subpath) - for item in module.__path__: - if _normalize_cached(item) == normalized: - break - else: - # Only return the path if it's not already there - return subpath - - -if hasattr(pkgutil, 'ImpImporter'): - register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) - -register_namespace_handler(zipimport.zipimporter, file_ns_handler) -register_namespace_handler(importlib.machinery.FileFinder, file_ns_handler) - - -def null_ns_handler( - importer: object, - path_item: str | None, - packageName: str | None, - module: _ModuleLike | None, -): - return None - - -register_namespace_handler(object, null_ns_handler) - - -@overload -def normalize_path(filename: StrPath) -> str: ... -@overload -def normalize_path(filename: BytesPath) -> bytes: ... -def normalize_path(filename: StrOrBytesPath): - """Normalize a file/dir name for comparison purposes""" - return os.path.normcase(os.path.realpath(os.path.normpath(_cygwin_patch(filename)))) - - -def _cygwin_patch(filename: StrOrBytesPath): # pragma: nocover - """ - Contrary to POSIX 2008, on Cygwin, getcwd (3) contains - symlink components. Using - os.path.abspath() works around this limitation. A fix in os.getcwd() - would probably better, in Cygwin even more so, except - that this seems to be by design... - """ - return os.path.abspath(filename) if sys.platform == 'cygwin' else filename - - -if TYPE_CHECKING: - # https://github.com/python/mypy/issues/16261 - # https://github.com/python/typeshed/issues/6347 - @overload - def _normalize_cached(filename: StrPath) -> str: ... - @overload - def _normalize_cached(filename: BytesPath) -> bytes: ... - def _normalize_cached(filename: StrOrBytesPath) -> str | bytes: ... -else: - - @functools.lru_cache(maxsize=None) - def _normalize_cached(filename): - return normalize_path(filename) - - -def _is_egg_path(path): - """ - Determine if given path appears to be an egg. - """ - return _is_zip_egg(path) or _is_unpacked_egg(path) - - -def _is_zip_egg(path): - return ( - path.lower().endswith('.egg') - and os.path.isfile(path) - and zipfile.is_zipfile(path) - ) - - -def _is_unpacked_egg(path): - """ - Determine if given path appears to be an unpacked egg. - """ - return path.lower().endswith('.egg') and os.path.isfile( - os.path.join(path, 'EGG-INFO', 'PKG-INFO') - ) - - -def _set_parent_ns(packageName): - parts = packageName.split('.') - name = parts.pop() - if parts: - parent = '.'.join(parts) - setattr(sys.modules[parent], name, sys.modules[packageName]) - - -MODULE = re.compile(r"\w+(\.\w+)*$").match -EGG_NAME = re.compile( - r""" - (?P<name>[^-]+) ( - -(?P<ver>[^-]+) ( - -py(?P<pyver>[^-]+) ( - -(?P<plat>.+) - )? - )? - )? - """, - re.VERBOSE | re.IGNORECASE, -).match - - -class EntryPoint: - """Object representing an advertised importable object""" - - def __init__( - self, - name: str, - module_name: str, - attrs: Iterable[str] = (), - extras: Iterable[str] = (), - dist: Distribution | None = None, - ): - if not MODULE(module_name): - raise ValueError("Invalid module name", module_name) - self.name = name - self.module_name = module_name - self.attrs = tuple(attrs) - self.extras = tuple(extras) - self.dist = dist - - def __str__(self): - s = "%s = %s" % (self.name, self.module_name) - if self.attrs: - s += ':' + '.'.join(self.attrs) - if self.extras: - s += ' [%s]' % ','.join(self.extras) - return s - - def __repr__(self): - return "EntryPoint.parse(%r)" % str(self) - - @overload - def load( - self, - require: Literal[True] = True, - env: Environment | None = None, - installer: _InstallerType | None = None, - ) -> _ResolvedEntryPoint: ... - @overload - def load( - self, - require: Literal[False], - *args: Any, - **kwargs: Any, - ) -> _ResolvedEntryPoint: ... - def load( - self, - require: bool = True, - *args: Environment | _InstallerType | None, - **kwargs: Environment | _InstallerType | None, - ) -> _ResolvedEntryPoint: - """ - Require packages for this EntryPoint, then resolve it. - """ - if not require or args or kwargs: - warnings.warn( - "Parameters to load are deprecated. Call .resolve and " - ".require separately.", - PkgResourcesDeprecationWarning, - stacklevel=2, - ) - if require: - # We could pass `env` and `installer` directly, - # but keeping `*args` and `**kwargs` for backwards compatibility - self.require(*args, **kwargs) # type: ignore - return self.resolve() - - def resolve(self) -> _ResolvedEntryPoint: - """ - Resolve the entry point from its module and attrs. - """ - module = __import__(self.module_name, fromlist=['__name__'], level=0) - try: - return functools.reduce(getattr, self.attrs, module) - except AttributeError as exc: - raise ImportError(str(exc)) from exc - - def require( - self, - env: Environment | None = None, - installer: _InstallerType | None = None, - ): - if not self.dist: - error_cls = UnknownExtra if self.extras else AttributeError - raise error_cls("Can't require() without a distribution", self) - - # Get the requirements for this entry point with all its extras and - # then resolve them. We have to pass `extras` along when resolving so - # that the working set knows what extras we want. Otherwise, for - # dist-info distributions, the working set will assume that the - # requirements for that extra are purely optional and skip over them. - reqs = self.dist.requires(self.extras) - items = working_set.resolve(reqs, env, installer, extras=self.extras) - list(map(working_set.add, items)) - - pattern = re.compile( - r'\s*' - r'(?P<name>.+?)\s*' - r'=\s*' - r'(?P<module>[\w.]+)\s*' - r'(:\s*(?P<attr>[\w.]+))?\s*' - r'(?P<extras>\[.*\])?\s*$' - ) - - @classmethod - def parse(cls, src: str, dist: Distribution | None = None): - """Parse a single entry point from string `src` - - Entry point syntax follows the form:: - - name = some.module:some.attr [extra1, extra2] - - The entry name and module name are required, but the ``:attrs`` and - ``[extras]`` parts are optional - """ - m = cls.pattern.match(src) - if not m: - msg = "EntryPoint must be in 'name=module:attrs [extras]' format" - raise ValueError(msg, src) - res = m.groupdict() - extras = cls._parse_extras(res['extras']) - attrs = res['attr'].split('.') if res['attr'] else () - return cls(res['name'], res['module'], attrs, extras, dist) - - @classmethod - def _parse_extras(cls, extras_spec): - if not extras_spec: - return () - req = Requirement.parse('x' + extras_spec) - if req.specs: - raise ValueError - return req.extras - - @classmethod - def parse_group( - cls, - group: str, - lines: _NestedStr, - dist: Distribution | None = None, - ): - """Parse an entry point group""" - if not MODULE(group): - raise ValueError("Invalid group name", group) - this: dict[str, Self] = {} - for line in yield_lines(lines): - ep = cls.parse(line, dist) - if ep.name in this: - raise ValueError("Duplicate entry point", group, ep.name) - this[ep.name] = ep - return this - - @classmethod - def parse_map( - cls, - data: str | Iterable[str] | dict[str, str | Iterable[str]], - dist: Distribution | None = None, - ): - """Parse a map of entry point groups""" - _data: Iterable[tuple[str | None, str | Iterable[str]]] - if isinstance(data, dict): - _data = data.items() - else: - _data = split_sections(data) - maps: dict[str, dict[str, Self]] = {} - for group, lines in _data: - if group is None: - if not lines: - continue - raise ValueError("Entry points must be listed in groups") - group = group.strip() - if group in maps: - raise ValueError("Duplicate group name", group) - maps[group] = cls.parse_group(group, lines, dist) - return maps - - -def _version_from_file(lines): - """ - Given an iterable of lines from a Metadata file, return - the value of the Version field, if present, or None otherwise. - """ - - def is_version_line(line): - return line.lower().startswith('version:') - - version_lines = filter(is_version_line, lines) - line = next(iter(version_lines), '') - _, _, value = line.partition(':') - return safe_version(value.strip()) or None - - -class Distribution: - """Wrap an actual or potential sys.path entry w/metadata""" - - PKG_INFO = 'PKG-INFO' - - def __init__( - self, - location: str | None = None, - metadata: _MetadataType = None, - project_name: str | None = None, - version: str | None = None, - py_version: str | None = PY_MAJOR, - platform: str | None = None, - precedence: int = EGG_DIST, - ): - self.project_name = safe_name(project_name or 'Unknown') - if version is not None: - self._version = safe_version(version) - self.py_version = py_version - self.platform = platform - self.location = location - self.precedence = precedence - self._provider = metadata or empty_provider - - @classmethod - def from_location( - cls, - location: str, - basename: StrPath, - metadata: _MetadataType = None, - **kw: int, # We could set `precedence` explicitly, but keeping this as `**kw` for full backwards and subclassing compatibility - ) -> Distribution: - project_name, version, py_version, platform = [None] * 4 - basename, ext = os.path.splitext(basename) - if ext.lower() in _distributionImpl: - cls = _distributionImpl[ext.lower()] - - match = EGG_NAME(basename) - if match: - project_name, version, py_version, platform = match.group( - 'name', 'ver', 'pyver', 'plat' - ) - return cls( - location, - metadata, - project_name=project_name, - version=version, - py_version=py_version, - platform=platform, - **kw, - )._reload_version() - - def _reload_version(self): - return self - - @property - def hashcmp(self): - return ( - self._forgiving_parsed_version, - self.precedence, - self.key, - self.location, - self.py_version or '', - self.platform or '', - ) - - def __hash__(self): - return hash(self.hashcmp) - - def __lt__(self, other: Distribution): - return self.hashcmp < other.hashcmp - - def __le__(self, other: Distribution): - return self.hashcmp <= other.hashcmp - - def __gt__(self, other: Distribution): - return self.hashcmp > other.hashcmp - - def __ge__(self, other: Distribution): - return self.hashcmp >= other.hashcmp - - def __eq__(self, other: object): - if not isinstance(other, self.__class__): - # It's not a Distribution, so they are not equal - return False - return self.hashcmp == other.hashcmp - - def __ne__(self, other: object): - return not self == other - - # These properties have to be lazy so that we don't have to load any - # metadata until/unless it's actually needed. (i.e., some distributions - # may not know their name or version without loading PKG-INFO) - - @property - def key(self): - try: - return self._key - except AttributeError: - self._key = key = self.project_name.lower() - return key - - @property - def parsed_version(self): - if not hasattr(self, "_parsed_version"): - try: - self._parsed_version = parse_version(self.version) - except _packaging_version.InvalidVersion as ex: - info = f"(package: {self.project_name})" - if hasattr(ex, "add_note"): - ex.add_note(info) # PEP 678 - raise - raise _packaging_version.InvalidVersion(f"{str(ex)} {info}") from None - - return self._parsed_version - - @property - def _forgiving_parsed_version(self): - try: - return self.parsed_version - except _packaging_version.InvalidVersion as ex: - self._parsed_version = parse_version(_forgiving_version(self.version)) - - notes = "\n".join(getattr(ex, "__notes__", [])) # PEP 678 - msg = f"""!!\n\n - ************************************************************************* - {str(ex)}\n{notes} - - This is a long overdue deprecation. - For the time being, `pkg_resources` will use `{self._parsed_version}` - as a replacement to avoid breaking existing environments, - but no future compatibility is guaranteed. - - If you maintain package {self.project_name} you should implement - the relevant changes to adequate the project to PEP 440 immediately. - ************************************************************************* - \n\n!! - """ - warnings.warn(msg, DeprecationWarning) - - return self._parsed_version - - @property - def version(self): - try: - return self._version - except AttributeError as e: - version = self._get_version() - if version is None: - path = self._get_metadata_path_for_display(self.PKG_INFO) - msg = ("Missing 'Version:' header and/or {} file at path: {}").format( - self.PKG_INFO, path - ) - raise ValueError(msg, self) from e - - return version - - @property - def _dep_map(self): - """ - A map of extra to its list of (direct) requirements - for this distribution, including the null extra. - """ - try: - return self.__dep_map - except AttributeError: - self.__dep_map = self._filter_extras(self._build_dep_map()) - return self.__dep_map - - @staticmethod - def _filter_extras(dm: dict[str | None, list[Requirement]]): - """ - Given a mapping of extras to dependencies, strip off - environment markers and filter out any dependencies - not matching the markers. - """ - for extra in list(filter(None, dm)): - new_extra: str | None = extra - reqs = dm.pop(extra) - new_extra, _, marker = extra.partition(':') - fails_marker = marker and ( - invalid_marker(marker) or not evaluate_marker(marker) - ) - if fails_marker: - reqs = [] - new_extra = safe_extra(new_extra) or None - - dm.setdefault(new_extra, []).extend(reqs) - return dm - - def _build_dep_map(self): - dm = {} - for name in 'requires.txt', 'depends.txt': - for extra, reqs in split_sections(self._get_metadata(name)): - dm.setdefault(extra, []).extend(parse_requirements(reqs)) - return dm - - def requires(self, extras: Iterable[str] = ()): - """List of Requirements needed for this distro if `extras` are used""" - dm = self._dep_map - deps: list[Requirement] = [] - deps.extend(dm.get(None, ())) - for ext in extras: - try: - deps.extend(dm[safe_extra(ext)]) - except KeyError as e: - raise UnknownExtra( - "%s has no such extra feature %r" % (self, ext) - ) from e - return deps - - def _get_metadata_path_for_display(self, name): - """ - Return the path to the given metadata file, if available. - """ - try: - # We need to access _get_metadata_path() on the provider object - # directly rather than through this class's __getattr__() - # since _get_metadata_path() is marked private. - path = self._provider._get_metadata_path(name) - - # Handle exceptions e.g. in case the distribution's metadata - # provider doesn't support _get_metadata_path(). - except Exception: - return '[could not detect]' - - return path - - def _get_metadata(self, name): - if self.has_metadata(name): - yield from self.get_metadata_lines(name) - - def _get_version(self): - lines = self._get_metadata(self.PKG_INFO) - return _version_from_file(lines) - - def activate(self, path: list[str] | None = None, replace: bool = False): - """Ensure distribution is importable on `path` (default=sys.path)""" - if path is None: - path = sys.path - self.insert_on(path, replace=replace) - if path is sys.path and self.location is not None: - fixup_namespace_packages(self.location) - for pkg in self._get_metadata('namespace_packages.txt'): - if pkg in sys.modules: - declare_namespace(pkg) - - def egg_name(self): - """Return what this distribution's standard .egg filename should be""" - filename = "%s-%s-py%s" % ( - to_filename(self.project_name), - to_filename(self.version), - self.py_version or PY_MAJOR, - ) - - if self.platform: - filename += '-' + self.platform - return filename - - def __repr__(self): - if self.location: - return "%s (%s)" % (self, self.location) - else: - return str(self) - - def __str__(self): - try: - version = getattr(self, 'version', None) - except ValueError: - version = None - version = version or "[unknown version]" - return "%s %s" % (self.project_name, version) - - def __getattr__(self, attr): - """Delegate all unrecognized public attributes to .metadata provider""" - if attr.startswith('_'): - raise AttributeError(attr) - return getattr(self._provider, attr) - - def __dir__(self): - return list( - set(super().__dir__()) - | set(attr for attr in self._provider.__dir__() if not attr.startswith('_')) - ) - - @classmethod - def from_filename( - cls, - filename: StrPath, - metadata: _MetadataType = None, - **kw: int, # We could set `precedence` explicitly, but keeping this as `**kw` for full backwards and subclassing compatibility - ): - return cls.from_location( - _normalize_cached(filename), os.path.basename(filename), metadata, **kw - ) - - def as_requirement(self): - """Return a ``Requirement`` that matches this distribution exactly""" - if isinstance(self.parsed_version, _packaging_version.Version): - spec = "%s==%s" % (self.project_name, self.parsed_version) - else: - spec = "%s===%s" % (self.project_name, self.parsed_version) - - return Requirement.parse(spec) - - def load_entry_point(self, group: str, name: str) -> _ResolvedEntryPoint: - """Return the `name` entry point of `group` or raise ImportError""" - ep = self.get_entry_info(group, name) - if ep is None: - raise ImportError("Entry point %r not found" % ((group, name),)) - return ep.load() - - @overload - def get_entry_map(self, group: None = None) -> dict[str, dict[str, EntryPoint]]: ... - @overload - def get_entry_map(self, group: str) -> dict[str, EntryPoint]: ... - def get_entry_map(self, group: str | None = None): - """Return the entry point map for `group`, or the full entry map""" - if not hasattr(self, "_ep_map"): - self._ep_map = EntryPoint.parse_map( - self._get_metadata('entry_points.txt'), self - ) - if group is not None: - return self._ep_map.get(group, {}) - return self._ep_map - - def get_entry_info(self, group: str, name: str): - """Return the EntryPoint object for `group`+`name`, or ``None``""" - return self.get_entry_map(group).get(name) - - # FIXME: 'Distribution.insert_on' is too complex (13) - def insert_on( # noqa: C901 - self, - path: list[str], - loc=None, - replace: bool = False, - ): - """Ensure self.location is on path - - If replace=False (default): - - If location is already in path anywhere, do nothing. - - Else: - - If it's an egg and its parent directory is on path, - insert just ahead of the parent. - - Else: add to the end of path. - If replace=True: - - If location is already on path anywhere (not eggs) - or higher priority than its parent (eggs) - do nothing. - - Else: - - If it's an egg and its parent directory is on path, - insert just ahead of the parent, - removing any lower-priority entries. - - Else: add it to the front of path. - """ - - loc = loc or self.location - if not loc: - return - - nloc = _normalize_cached(loc) - bdir = os.path.dirname(nloc) - npath = [(p and _normalize_cached(p) or p) for p in path] - - for p, item in enumerate(npath): - if item == nloc: - if replace: - break - else: - # don't modify path (even removing duplicates) if - # found and not replace - return - elif item == bdir and self.precedence == EGG_DIST: - # if it's an .egg, give it precedence over its directory - # UNLESS it's already been added to sys.path and replace=False - if (not replace) and nloc in npath[p:]: - return - if path is sys.path: - self.check_version_conflict() - path.insert(p, loc) - npath.insert(p, nloc) - break - else: - if path is sys.path: - self.check_version_conflict() - if replace: - path.insert(0, loc) - else: - path.append(loc) - return - - # p is the spot where we found or inserted loc; now remove duplicates - while True: - try: - np = npath.index(nloc, p + 1) - except ValueError: - break - else: - del npath[np], path[np] - # ha! - p = np - - return - - def check_version_conflict(self): - if self.key == 'setuptools': - # ignore the inevitable setuptools self-conflicts :( - return - - nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) - loc = normalize_path(self.location) - for modname in self._get_metadata('top_level.txt'): - if ( - modname not in sys.modules - or modname in nsp - or modname in _namespace_packages - ): - continue - if modname in ('pkg_resources', 'setuptools', 'site'): - continue - fn = getattr(sys.modules[modname], '__file__', None) - if fn and ( - normalize_path(fn).startswith(loc) or fn.startswith(self.location) - ): - continue - issue_warning( - "Module %s was already imported from %s, but %s is being added" - " to sys.path" % (modname, fn, self.location), - ) - - def has_version(self): - try: - self.version - except ValueError: - issue_warning("Unbuilt egg for " + repr(self)) - return False - except SystemError: - # TODO: remove this except clause when python/cpython#103632 is fixed. - return False - return True - - def clone(self, **kw: str | int | IResourceProvider | None): - """Copy this distribution, substituting in any changed keyword args""" - names = 'project_name version py_version platform location precedence' - for attr in names.split(): - kw.setdefault(attr, getattr(self, attr, None)) - kw.setdefault('metadata', self._provider) - # Unsafely unpacking. But keeping **kw for backwards and subclassing compatibility - return self.__class__(**kw) # type:ignore[arg-type] - - @property - def extras(self): - return [dep for dep in self._dep_map if dep] - - -class EggInfoDistribution(Distribution): - def _reload_version(self): - """ - Packages installed by distutils (e.g. numpy or scipy), - which uses an old safe_version, and so - their version numbers can get mangled when - converted to filenames (e.g., 1.11.0.dev0+2329eae to - 1.11.0.dev0_2329eae). These distributions will not be - parsed properly - downstream by Distribution and safe_version, so - take an extra step and try to get the version number from - the metadata file itself instead of the filename. - """ - md_version = self._get_version() - if md_version: - self._version = md_version - return self - - -class DistInfoDistribution(Distribution): - """ - Wrap an actual or potential sys.path entry - w/metadata, .dist-info style. - """ - - PKG_INFO = 'METADATA' - EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])") - - @property - def _parsed_pkg_info(self): - """Parse and cache metadata""" - try: - return self._pkg_info - except AttributeError: - metadata = self.get_metadata(self.PKG_INFO) - self._pkg_info = email.parser.Parser().parsestr(metadata) - return self._pkg_info - - @property - def _dep_map(self): - try: - return self.__dep_map - except AttributeError: - self.__dep_map = self._compute_dependencies() - return self.__dep_map - - def _compute_dependencies(self) -> dict[str | None, list[Requirement]]: - """Recompute this distribution's dependencies.""" - self.__dep_map: dict[str | None, list[Requirement]] = {None: []} - - reqs: list[Requirement] = [] - # Including any condition expressions - for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: - reqs.extend(parse_requirements(req)) - - def reqs_for_extra(extra): - for req in reqs: - if not req.marker or req.marker.evaluate({'extra': extra}): - yield req - - common = types.MappingProxyType(dict.fromkeys(reqs_for_extra(None))) - self.__dep_map[None].extend(common) - - for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: - s_extra = safe_extra(extra.strip()) - self.__dep_map[s_extra] = [ - r for r in reqs_for_extra(extra) if r not in common - ] - - return self.__dep_map - - -_distributionImpl = { - '.egg': Distribution, - '.egg-info': EggInfoDistribution, - '.dist-info': DistInfoDistribution, -} - - -def issue_warning(*args, **kw): - level = 1 - g = globals() - try: - # find the first stack frame that is *not* code in - # the pkg_resources module, to use for the warning - while sys._getframe(level).f_globals is g: - level += 1 - except ValueError: - pass - warnings.warn(stacklevel=level + 1, *args, **kw) - - -def parse_requirements(strs: _NestedStr): - """ - Yield ``Requirement`` objects for each specification in `strs`. - - `strs` must be a string, or a (possibly-nested) iterable thereof. - """ - return map(Requirement, join_continuation(map(drop_comment, yield_lines(strs)))) - - -class RequirementParseError(_packaging_requirements.InvalidRequirement): - "Compatibility wrapper for InvalidRequirement" - - -class Requirement(_packaging_requirements.Requirement): - def __init__(self, requirement_string: str): - """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" - super().__init__(requirement_string) - self.unsafe_name = self.name - project_name = safe_name(self.name) - self.project_name, self.key = project_name, project_name.lower() - self.specs = [(spec.operator, spec.version) for spec in self.specifier] - # packaging.requirements.Requirement uses a set for its extras. We use a variable-length tuple - self.extras: tuple[str] = tuple(map(safe_extra, self.extras)) - self.hashCmp = ( - self.key, - self.url, - self.specifier, - frozenset(self.extras), - str(self.marker) if self.marker else None, - ) - self.__hash = hash(self.hashCmp) - - def __eq__(self, other: object): - return isinstance(other, Requirement) and self.hashCmp == other.hashCmp - - def __ne__(self, other): - return not self == other - - def __contains__(self, item: Distribution | str | tuple[str, ...]) -> bool: - if isinstance(item, Distribution): - if item.key != self.key: - return False - - item = item.version - - # Allow prereleases always in order to match the previous behavior of - # this method. In the future this should be smarter and follow PEP 440 - # more accurately. - return self.specifier.contains(item, prereleases=True) - - def __hash__(self): - return self.__hash - - def __repr__(self): - return "Requirement.parse(%r)" % str(self) - - @staticmethod - def parse(s: str | Iterable[str]): - (req,) = parse_requirements(s) - return req - - -def _always_object(classes): - """ - Ensure object appears in the mro even - for old-style classes. - """ - if object not in classes: - return classes + (object,) - return classes - - -def _find_adapter(registry: Mapping[type, _AdapterT], ob: object) -> _AdapterT: - """Return an adapter factory for `ob` from `registry`""" - types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob)))) - for t in types: - if t in registry: - return registry[t] - # _find_adapter would previously return None, and immediately be called. - # So we're raising a TypeError to keep backward compatibility if anyone depended on that behaviour. - raise TypeError(f"Could not find adapter for {registry} and {ob}") - - -def ensure_directory(path: StrOrBytesPath): - """Ensure that the parent directory of `path` exists""" - dirname = os.path.dirname(path) - os.makedirs(dirname, exist_ok=True) - - -def _bypass_ensure_directory(path): - """Sandbox-bypassing version of ensure_directory()""" - if not WRITE_SUPPORT: - raise OSError('"os.mkdir" not supported on this platform.') - dirname, filename = split(path) - if dirname and filename and not isdir(dirname): - _bypass_ensure_directory(dirname) - try: - mkdir(dirname, 0o755) - except FileExistsError: - pass - - -def split_sections(s: _NestedStr) -> Iterator[tuple[str | None, list[str]]]: - """Split a string or iterable thereof into (section, content) pairs - - Each ``section`` is a stripped version of the section header ("[section]") - and each ``content`` is a list of stripped lines excluding blank lines and - comment-only lines. If there are any such lines before the first section - header, they're returned in a first ``section`` of ``None``. - """ - section = None - content = [] - for line in yield_lines(s): - if line.startswith("["): - if line.endswith("]"): - if section or content: - yield section, content - section = line[1:-1].strip() - content = [] - else: - raise ValueError("Invalid section heading", line) - else: - content.append(line) - - # wrap up last segment - yield section, content - - -def _mkstemp(*args, **kw): - old_open = os.open - try: - # temporarily bypass sandboxing - os.open = os_open - return tempfile.mkstemp(*args, **kw) - finally: - # and then put it back - os.open = old_open - - -# Silence the PEP440Warning by default, so that end users don't get hit by it -# randomly just because they use pkg_resources. We want to append the rule -# because we want earlier uses of filterwarnings to take precedence over this -# one. -warnings.filterwarnings("ignore", category=PEP440Warning, append=True) - - -class PkgResourcesDeprecationWarning(Warning): - """ - Base class for warning about deprecations in ``pkg_resources`` - - This class is not derived from ``DeprecationWarning``, and as such is - visible by default. - """ - - -# Ported from ``setuptools`` to avoid introducing an import inter-dependency: -_LOCALE_ENCODING = "locale" if sys.version_info >= (3, 10) else None - - -def _read_utf8_with_fallback(file: str, fallback_encoding=_LOCALE_ENCODING) -> str: - """See setuptools.unicode_utils._read_utf8_with_fallback""" - try: - with open(file, "r", encoding="utf-8") as f: - return f.read() - except UnicodeDecodeError: # pragma: no cover - msg = f"""\ - ******************************************************************************** - `encoding="utf-8"` fails with {file!r}, trying `encoding={fallback_encoding!r}`. - - This fallback behaviour is considered **deprecated** and future versions of - `setuptools/pkg_resources` may not implement it. - - Please encode {file!r} with "utf-8" to ensure future builds will succeed. - - If this file was produced by `setuptools` itself, cleaning up the cached files - and re-building/re-installing the package with a newer version of `setuptools` - (e.g. by updating `build-system.requires` in its `pyproject.toml`) - might solve the problem. - ******************************************************************************** - """ - # TODO: Add a deadline? - # See comment in setuptools.unicode_utils._Utf8EncodingNeeded - warnings.warn(msg, PkgResourcesDeprecationWarning, stacklevel=2) - with open(file, "r", encoding=fallback_encoding) as f: - return f.read() - - -# from jaraco.functools 1.3 -def _call_aside(f, *args, **kwargs): - f(*args, **kwargs) - return f - - -@_call_aside -def _initialize(g=globals()): - "Set up global resource manager (deliberately not state-saved)" - manager = ResourceManager() - g['_manager'] = manager - g.update( - (name, getattr(manager, name)) - for name in dir(manager) - if not name.startswith('_') - ) - - -@_call_aside -def _initialize_master_working_set(): - """ - Prepare the master working set and make the ``require()`` - API available. - - This function has explicit effects on the global state - of pkg_resources. It is intended to be invoked once at - the initialization of this module. - - Invocation by other packages is unsupported and done - at their own risk. - """ - working_set = _declare_state('object', 'working_set', WorkingSet._build_master()) - - require = working_set.require - iter_entry_points = working_set.iter_entry_points - add_activation_listener = working_set.subscribe - run_script = working_set.run_script - # backward compatibility - run_main = run_script - # Activate all distributions already on sys.path with replace=False and - # ensure that all distributions added to the working set in the future - # (e.g. by calling ``require()``) will get activated as well, - # with higher priority (replace=True). - tuple(dist.activate(replace=False) for dist in working_set) - add_activation_listener( - lambda dist: dist.activate(replace=True), - existing=False, - ) - working_set.entries = [] - # match order - list(map(working_set.add_entry, sys.path)) - globals().update(locals()) - - -if TYPE_CHECKING: - # All of these are set by the @_call_aside methods above - __resource_manager = ResourceManager() # Won't exist at runtime - resource_exists = __resource_manager.resource_exists - resource_isdir = __resource_manager.resource_isdir - resource_filename = __resource_manager.resource_filename - resource_stream = __resource_manager.resource_stream - resource_string = __resource_manager.resource_string - resource_listdir = __resource_manager.resource_listdir - set_extraction_path = __resource_manager.set_extraction_path - cleanup_resources = __resource_manager.cleanup_resources - - working_set = WorkingSet() - require = working_set.require - iter_entry_points = working_set.iter_entry_points - add_activation_listener = working_set.subscribe - run_script = working_set.run_script - run_main = run_script diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 800c44099d6df0fddfbbfa4e3b68c48836ba1ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189619 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 JXMO?r{{f3#)w%!x diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/LICENSE deleted file mode 100644 index f35fed919..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2010-202x The platformdirs developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__init__.py deleted file mode 100644 index 2325ec2eb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +++ /dev/null @@ -1,631 +0,0 @@ -""" -Utilities for determining application-specific dirs. - -See <https://github.com/platformdirs/platformdirs> for details and usage. - -""" - -from __future__ import annotations - -import os -import sys -from typing import TYPE_CHECKING - -from .api import PlatformDirsABC -from .version import __version__ -from .version import __version_tuple__ as __version_info__ - -if TYPE_CHECKING: - from pathlib import Path - from typing import Literal - -if sys.platform == "win32": - from pip._vendor.platformdirs.windows import Windows as _Result -elif sys.platform == "darwin": - from pip._vendor.platformdirs.macos import MacOS as _Result -else: - from pip._vendor.platformdirs.unix import Unix as _Result - - -def _set_platform_dir_class() -> type[PlatformDirsABC]: - if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system": - if os.getenv("SHELL") or os.getenv("PREFIX"): - return _Result - - from pip._vendor.platformdirs.android import _android_folder # noqa: PLC0415 - - if _android_folder() is not None: - from pip._vendor.platformdirs.android import Android # noqa: PLC0415 - - return Android # return to avoid redefinition of a result - - return _Result - - -if TYPE_CHECKING: - # Work around mypy issue: https://github.com/python/mypy/issues/10962 - PlatformDirs = _Result -else: - PlatformDirs = _set_platform_dir_class() #: Currently active platform -AppDirs = PlatformDirs #: Backwards compatibility with appdirs - - -def user_data_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: data directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_data_dir - - -def site_data_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - multipath: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: data directory shared by users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - multipath=multipath, - ensure_exists=ensure_exists, - ).site_data_dir - - -def user_config_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: config directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_config_dir - - -def site_config_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - multipath: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: config directory shared by the users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - multipath=multipath, - ensure_exists=ensure_exists, - ).site_config_dir - - -def user_cache_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: cache directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_cache_dir - - -def site_cache_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: cache directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).site_cache_dir - - -def user_state_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: state directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_state_dir - - -def user_log_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: log directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_log_dir - - -def user_documents_dir() -> str: - """:returns: documents directory tied to the user""" - return PlatformDirs().user_documents_dir - - -def user_downloads_dir() -> str: - """:returns: downloads directory tied to the user""" - return PlatformDirs().user_downloads_dir - - -def user_pictures_dir() -> str: - """:returns: pictures directory tied to the user""" - return PlatformDirs().user_pictures_dir - - -def user_videos_dir() -> str: - """:returns: videos directory tied to the user""" - return PlatformDirs().user_videos_dir - - -def user_music_dir() -> str: - """:returns: music directory tied to the user""" - return PlatformDirs().user_music_dir - - -def user_desktop_dir() -> str: - """:returns: desktop directory tied to the user""" - return PlatformDirs().user_desktop_dir - - -def user_runtime_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: runtime directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_runtime_dir - - -def site_runtime_dir( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> str: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: runtime directory shared by users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).site_runtime_dir - - -def user_data_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: data path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_data_path - - -def site_data_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - multipath: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param multipath: See `multipath <platformdirs.api.PlatformDirsABC.multipath>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: data path shared by users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - multipath=multipath, - ensure_exists=ensure_exists, - ).site_data_path - - -def user_config_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: config path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_config_path - - -def site_config_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - multipath: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: config path shared by the users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - multipath=multipath, - ensure_exists=ensure_exists, - ).site_config_path - - -def site_cache_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: cache directory tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).site_cache_path - - -def user_cache_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: cache path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_cache_path - - -def user_state_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.roaming>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: state path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - roaming=roaming, - ensure_exists=ensure_exists, - ).user_state_path - - -def user_log_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: log path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_log_path - - -def user_documents_path() -> Path: - """:returns: documents a path tied to the user""" - return PlatformDirs().user_documents_path - - -def user_downloads_path() -> Path: - """:returns: downloads path tied to the user""" - return PlatformDirs().user_downloads_path - - -def user_pictures_path() -> Path: - """:returns: pictures path tied to the user""" - return PlatformDirs().user_pictures_path - - -def user_videos_path() -> Path: - """:returns: videos path tied to the user""" - return PlatformDirs().user_videos_path - - -def user_music_path() -> Path: - """:returns: music path tied to the user""" - return PlatformDirs().user_music_path - - -def user_desktop_path() -> Path: - """:returns: desktop path tied to the user""" - return PlatformDirs().user_desktop_path - - -def user_runtime_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: runtime path tied to the user - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).user_runtime_path - - -def site_runtime_path( - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 -) -> Path: - """ - :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`. - :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`. - :param version: See `version <platformdirs.api.PlatformDirsABC.version>`. - :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`. - :param ensure_exists: See `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - :returns: runtime path shared by users - """ - return PlatformDirs( - appname=appname, - appauthor=appauthor, - version=version, - opinion=opinion, - ensure_exists=ensure_exists, - ).site_runtime_path - - -__all__ = [ - "AppDirs", - "PlatformDirs", - "PlatformDirsABC", - "__version__", - "__version_info__", - "site_cache_dir", - "site_cache_path", - "site_config_dir", - "site_config_path", - "site_data_dir", - "site_data_path", - "site_runtime_dir", - "site_runtime_path", - "user_cache_dir", - "user_cache_path", - "user_config_dir", - "user_config_path", - "user_data_dir", - "user_data_path", - "user_desktop_dir", - "user_desktop_path", - "user_documents_dir", - "user_documents_path", - "user_downloads_dir", - "user_downloads_path", - "user_log_dir", - "user_log_path", - "user_music_dir", - "user_music_path", - "user_pictures_dir", - "user_pictures_path", - "user_runtime_dir", - "user_runtime_path", - "user_state_dir", - "user_state_path", - "user_videos_dir", - "user_videos_path", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__main__.py deleted file mode 100644 index fa8a677a3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +++ /dev/null @@ -1,55 +0,0 @@ -"""Main entry point.""" - -from __future__ import annotations - -from pip._vendor.platformdirs import PlatformDirs, __version__ - -PROPS = ( - "user_data_dir", - "user_config_dir", - "user_cache_dir", - "user_state_dir", - "user_log_dir", - "user_documents_dir", - "user_downloads_dir", - "user_pictures_dir", - "user_videos_dir", - "user_music_dir", - "user_runtime_dir", - "site_data_dir", - "site_config_dir", - "site_cache_dir", - "site_runtime_dir", -) - - -def main() -> None: - """Run the main entry point.""" - app_name = "MyApp" - app_author = "MyCompany" - - print(f"-- platformdirs {__version__} --") # noqa: T201 - - print("-- app dirs (with optional 'version')") # noqa: T201 - dirs = PlatformDirs(app_name, app_author, version="1.0") - for prop in PROPS: - print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 - - print("\n-- app dirs (without optional 'version')") # noqa: T201 - dirs = PlatformDirs(app_name, app_author) - for prop in PROPS: - print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 - - print("\n-- app dirs (without optional 'appauthor')") # noqa: T201 - dirs = PlatformDirs(app_name) - for prop in PROPS: - print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 - - print("\n-- app dirs (with disabled 'appauthor')") # noqa: T201 - dirs = PlatformDirs(app_name, appauthor=False) - for prop in PROPS: - print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 1136a33db21ba4cbe854a9deb932a49ab17362b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23030 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index af6b172e683e083b5ddcf3868b2b0ffd8f2f0b56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2129 zcmcIl-EZ7P5MQ6|`@ZBtL(^2J#%%=YsoY%>LO!ah5^AYZAR!n?k#M_m>`h{NXRp@l zhP$VGKqyZrkA3I^kL3;ilZc*BYgGaS2zW~s5U<SIcfqKUs!DVuuXkr><~KV#GkamE zlt)0{efzuflZw#KVlkjpJdqC9VbVo9;^-FArR&miil-*TJat`OR=BdPa&-df8J^bV zF{CSFs9ENjn^|35{1_n{5Gv?q<}8})TL#(mWb{?DoskvOaW&#{*4C)!xV&DK!h-3# z9yht;xqdYj7T204-}G4Ps>A%Sfbku|eAvU-lE9|;1PO;_SRPhj(nag&R%-EcZ~%A} z^uDw$>5`smNRy~4{~=_<G$TA<Zm6t!F8LY(a9W_4+!rR#g<oE|Xnf=YmSNh2%`7cV z8#^AmZBXWYN-XXhR?`dY4bvwz$8|UiJ~x|9!fG?dTAOcs?&~vicn*KIIFCOhEefX~ zn763$uCrnI4ktBgTDQ$D;v3YV4LFu-d#oYkgdaAXwt;aA0)%m$w!<RE{lE~6SrL3Z z4WEAkhA#RWjZ4!{#IS2eze8XnOAG_b!32V#9#-J^aHA51JEW2^2q4mBqkroN72zgl z<+=Xe1WHJ$2`*$!OgAJwt!Ea%z95=1((w$TGP(vgLgjxgtjl0MYY2ZLx-mJ|$1S2H z<~wH)%Aqq!?A-C#1N|3<n?DYB9SyiI47V^qfEzf9^*YjvdTF5_v;P-cAA$lI?u_e! ztMP53iS+wVeTM2v`%Oy2+)De3*P^D|?v!gaEt$1iN7ib!&MUw+Db++GYv*?yzO8vw z6t&sZrusEJRqe<#^=YWROrO(9UDP_&{8PGKz>ihG@GMbq!3>}p8DO1%S{U5(&5b6p zwW);UHSj2Rv|g>Mp-LIFC#FEgGLhw>x~9Lk_Cc80BG9Tht14j@6tHWyNSGJ17&TPH z`9lS|2K9xu2E+=&f+B*;L=i`YEIL^i{WyHGyZmsZ(tZ0ECAVL!-23G2%Ka1j`C3n@ z3r>Efr_4SsjNQ$CLwbcv-K#&8U*1(7XG?pdd+EK6dt+aXJ{W&(|5R;%sQ!Jn@kB-= zC;v<%HNT&q?<otB=7U1*dGr>0%2HqN?DOco(NpFlz58$V3bW7BJQSX?k_b$8(DqiV z!(l0a9*k|1n;0S)4o6GNb2pu>h%pp1OlzAY*3gQf+X{tZwBPh%>6c<_o)xs<)$t>V z0dL1`dZr!oMj|=tSnx!Um=z=6acttnj2O8U_>L9XDMvaiaJkcpu}h-OCwz~VN#A3} zk?-Ybov={Ng&B-(&%!v&W4sv%ccA-=+7C~`vr+Fq8}(!XMhP0H>L>_CDJFs{aubwA z<Bb9xr(yO|%d>+fxy%}{Av(Tahv7h$B<T?v`xTx04P8D^%DGfm{p(eDVGb6NQrzwI R<nc#J_KRzfV#?{r-ap4h5uE@4 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-314.pyc deleted file mode 100644 index bb874e9debed1cc982d74abadc53133eaa97d491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13640 zcmdrzTTmNWcDMCL2!sI%B*V~v9|#+S*EV2>@eYGwVAj|g*~a!Rw$zpy=&_Kr-7P=Z zoh{bMZsBZ_nMt;4CSUPi*4e7fq$*XJkNnKXCix4BHYG;ct<2VDDx04a6i)4y^OJLK zx4PAO7>0^cskvp&y*l^Y*LmH0&uyP*ZgLVx|MXYC7S8q)@+<sNOjf19?7qnmvQEN8 zCU;1fnPX;6vZ)8lra7~0rnyD7(A+9pAve$2X6>?_(pcskvkh{?tW$QvZzgP=Yn*k- zt{&ncy(DbwAYuD$*BP@imfUpP-iuU@F&Gn5xB)1f9VF3mMnMp{xq_w<Xj}#wcLhxo z&@>xpS}JJVK+|HNIaEP&2xwXjG_4ghZ9vm*plJ)+hZ(s&Z0aWg&zfU085dJRd^o@q z8o6XLC3CWnN=ldEcSAzVL}FZQg%6ktP1kOPrXy3c(^FrYyZlDM65}KpXxyO$CoiSM z)r*2CO};)AQ&~eZm6goy8Wr1ZA~PU5)17A79A;$8ZEM&B(=!{UX9KJSuvP=s4p=H6 z1J(gp2hf6GN`%q?SP)YfL{Wlu0u}@l2IiMw8vzTV2m`xIur9y?^TWX45^NJ-f!$$X zX$iI&u)yH3$AEPM)(hAU1GWXQoq+Wju!jKa2kc=3wiU2lfbBM5+W`9tV0#SMcEGZL z?KNOM;Xc_L?gud+DcDspbFCl==S(V*NIj5Pd4*?}GeVq8#&|ZmB&Jr`6<*}oi4|E+ zOXq_@PE`&`=3@8whp`ndxy%p8Qma8O_?1(mr%r$6LNqe$bk1}4c!|wOJeyjgy+*lo zI?1g<S7}v0;-DYHTv`||Qy9Qe$_vqxZ1g@aN}zqty<4f2v=yI}G9n-09}1Ez?PEj( z{e>vZKZYi*nmI8+88nyK?SjHOSs-^z<G)8p9B^IaEoOxYGhtJZ=_k+3|ADjxo5;%< zF<CH6viOXEQP|KRI9b9T`wD+Jb$;=>1S?zQ;=Fk3+_{m(2PyI1Vp>eS&BtVEF_uVW z;&(ZT9}<#+3;@`jNbus&sm0JEc_o!Red<i)OyuGCXyh8diVWo=@@jhVl5lrX5@dcT z4btJ3d1)~%q=S+Bd@`OAgQbku1etzRa77}jo%4}Mp}lDTrPxlGx8$X({|zx&zs~GX z_@SiayHG<Y%dmjS4u8O&rrkH8fGi6YnTfS(T2$Qucv5Cj_2`5Yed!rwC8V&aSOUd0 zuf@+R%stP>IhkWYi-2V*@ewNve4Le2RNFxD#FH#PygbZCqd_DLA}Tn6P>5d$PN*D0 zmAnvK5)!-=oS00fFXQiMRBVEQ3s#DMW-fF^KqrBTm_@J&Ff0yirMfBN%nNQrq2G)w zr4k_3XH3B&@rflW@?&BP(lp`d5u8l~rd{w9Ic-390Of8UfOWEMBQ5QD_ej<~^4IMj z@qZi1y?Qx!>dNL@H*@Y=n~qyz8;~7LQ$^fb#by8jMs!1_s3x7KcnIrS0d!*p4zf;A z?0qQhK1Jw#`ruGc6H1uM+z$mRa|LgJAVX&DwOTTiRyYx)c=r*y4pBPEO6W2;iH#a~ z6n(~shoM{12f)B#)cz_QHlWdpcTpf3hkLW`-c3iZzNDhE?%VSB$4?ZiW=2*k2WEuu zX`7Pk;{zQ{^)sUfPE7`}RB}mJ-rJH`HSNcu6hTJPBEMuXET>{wuF`rD9ZQ8M-BjYr z+^D&97|cbl=!MpjYA~)E1{2A-qnnPX&fq!;co65J8_W?jm?J1&$n?RfXaVfsU}kFz zOE($ZysMgx&Z{U``*9e#lH1fmbi#th?XrphuFzmS{aJVarlVh9UY&Rw#E~oapr>YK z57Ng6I-2TdJiIOrJPhw?Iw$vIGW1+sWfP+K>Ne7>*a*&nnuynEB1QZ#utP*&uJfo) zGQz#PMF0CyH2sQ%N)&`j2f+UI|Mi*-*VVte>KA!{nm>XpDBm)g6$LNS6*L|i@uzWR z2EFggy8AXACHr8VczO;;)_sby2`fA;861dcItWkUbSb}FiEC`bA`4?ya+GQ%?X-$k zYWQ(%+m8SjSI=Y21?XSnpu^g}LjZgjqnSQ95Yc1-NRKg(p-}4>lV;#Zi>HIKgw7RH zych2Vi`W-UAzQJe=b;9@Tr4fXU7~p0g)!hx5iqU&Sl_D?sh4lmMnO^6fij4)!V(Kt zc{Y`X8$~J!@{Y570<LG#D0CTx`XnpJC!Os656xx%DoFcr7R-=8vr=0t*wx_*rj%5$ zq&az|V0k+wB%hf?JR^#)0g#Z3$5`cr?4qgzJy6Bbt|Fz_SAl%@6aYBADce07;)Z3b z(f#hkyAvA|KX3DVF!uh~2NUm4JheRKb8RO#E^fKoHX3zN*U3`naB8}xo<Q$+;^`F4 z^ud9MCR{hwGi6U(EKW+h0MVoJHO=$IQ?bk{pM(o-?K_VqJqfNvZ~+YRs~Nl<#)Bil zi^cX)@P!4Rc3;u@Rc|g8_S{O@uan{3#c$YY40W@xu3fx8t&`_)feGZ?gPV>)ef`CC zs_WnTR=vNo^<@}Qd;@{zPT&VkU!2nql8F=-KRBn=_7$8~@q2N)NLG#0C3W+#I`I+$ zZOL_F?o}8>^Pnc{Agc7>)6+E52dB&ius?o>HO)>7F$kAHyy#$x9a5W9Zg*;WUF@|M zvky_V)~JxzK7&@5R)vuPx>671+<{F;Kwo;D_<qyK_W@-1fO4N0&<Fowe7~yk{k{<A zQwQbx#i_aZ;1pcXMUFDwt1({bwier!d!0&yOxJE2R33W84I|5s<=n?N9mn-m*NNq~ zjVwQoEI+Osw@L>8Vl2O;v3xZn39$p}`8>9zy!L3krv24owQ@aBNRZRo(Ux*r!!H^c zeKhAjw&^%lcSheeGI|IZJ@k}b8HV)1i;PBT)7=seQt;rToQy&mW8=JZPfn!|$l8la z>u7ZCaIo6esZ`T=S;h9)qHK=}2|c%T8r+CFGpylo$#^YYCp)k;mMpVQ%DjvN7EdI_ zlP~fZ%9T8}0QLW`lkZ>ZCtop>lm!R|0vl@vd=GH?g|PYm%ITN(1E*ieMLeR4uOsVm zCoG<A6+KaxQAJNmYL>8rX$1A&*hQRWQ9(@BqiBRj6(c;V4-P~$X-2qbgm*?W%u2cK zab+*z176x!VB|`hqnGm%%7SKd<u%`g_Qs3*k*xd3rbCIxQIozL=qNZMN?<=ya7H4l zsdy%Vk0J0h^34pFpdtSV#P}mi@Mt9`ge0F#LA5;+fuk=J9Po6L=0*9D5|-}8IpbAO zJb{459WXQ^(mU@ImhfFf3?aCV;Oht?2x186q7zUmcp?$JF$=K>C(EL6HzV^>B%*jC zl$#Q<cVGztM)ak5kkj|cj>%?qY_||w^K%nE+3cF3xJ`@O4i(#{A^TJu#-mjv7Pp&K z$|D-(5v_IgKKnJwevPtn9B@D?9hA1))lp7pZBJ-ztKkMUx<QR@K*J4axZ@h`xP}|j za6>At`dp4uI^>;V36#HZbF!~;4<%uZKUl;fU=|xuSS|o-PIw<=zs+7wCHa@W#o&X? zLzHaMQcp6iI|RUoewrzk3ItlhHz{!C)?Gh9+%D4uw|OO@W@1`~J5v`qtb8p2UrwZ% z9<qqr6HQ_B0#hwSQT{%cHZ7P!xTdmHqzmD(xh!dQ`1DkkigjstHC&p|W@wp%?=;fp z9<pGDZ!^qi)E%>~qjNNfgZFcqLY>8up2J+M+FUG)=oo1V;VV;FY9TYQxU_Y_66z_d zf}aaoKbm|%c3tFa(9?o7gg&J#g>A)=?~s$)$S?xwA@i07@(PtZa1oAL5RBSu9rj{x z>Alx+_Wx=f3#6auE9oaJS;QzTO*Rq-ZS8{9qJDRiY37n&AirboCIVAN2d74z?$Uo2 zsRE9*X>F&%2X|I^y@gDq56S9Dj=ge~1q>Q0M$!bCjnOA__Aa)_B;)k!nAORcEZi65 zM=v@!^*af8QIR2LGdzX)Lm6I$8@P;|iX}KnT4R-$=>dEZ{x+T>gNyMKf#AR}0Q&U2 zW>fRA;A&D1@(<I{Z}1!3(9-14%*fEWq1)d&J^D_tb_an&A|C1rc6B}?dJ*Np+Oy2d z@Zg;gV)XkSb%KRPK+oWF_(ixdG{KJ$yvQags^G>ZccoMUHlYv(^BSff#`rXT9#pWt zofI;X_$?gGB=QA2d=rv}e&8F3M-mP66|C?DL~NyCm0(agV8gE@q)bAlb3%H`A*Ba9 z#0q6zOwxuD9{H8GM`gD|GZYa#fIle?o`AmO`d?X}`HhXZd_Q<~+hlL>f9?wWo7ca2 z_{>K_e)M{F^m=aeM$UV4<Bcs(SKc#_^$g@ZgL%(*)-#^-oX>mS%zEC;c`j|tz`MJn z`SEwQO^yctf7wXWz%RW$o9wxq_x!%wLgWj=kb{3bxY_+$u61(5{`2;Z4`zQji=jyG zyYD=C=fi7xci+$4eOtcnKlA^o|LJVbH}oU!pM4|m**<OY?AVE?d)rC8{*9R}d(-3Z zl=OEa*Lw2{^|#gHffc!0*XMVdO1f=4v_Aja=aUR+@jWL@gMZ88`@zh%8A|{CyuAeZ z`wH@fbOgBl-lS{#82P04{PcP9(_>B3W9FZZG6>H%%{a|}*T4Wg*v7bbln-~oAHm;l zaTjzkz8wMp15uDw?t-ZMbQk;y6xNlUj+rB~;4NSuA>g}Bn$LrPe%ZdlgtTu`pt+i0 zuS0b#OT}JZwqK^r3ufxS@Y4&LO8l244PNUS)N7u}x^`0YOj>-kwtEuSpiA))fEV7P z^GQj=)5-gSm`Y;Yc&)qY)wUQF4%o!U*afxVHn8;RhiHLZLh}Y~7w5v$Q`fG9Z$&O% znYundefio|aUI)y7eK&5n~G1MTxjI=aSKh_^zqgsp-@;ziY;TzTtx8a@V6TS0JiL~ zTgQLl=>KKw;mxkIxz^DQ`=@Au<2moSjmE9+Bl+&}Z1?!bhx6xdX3yQsb>GT&3)yZV z*L`oJ3C?sb-=?MWx6kdw<pIsMj&F62J!$%^u@kV{cKH2b7gg!;S0~Nn6LZsKyZMtg z24Fq)_G1`O`~w82ytqs)eR-5r4NdPyNyR^c_1Dr!wVzUr6yF8<f<XgsT)uQ=@?s4Q z6yHaB(7cjxd70*20SXbp-(cZS5d088J+<H;pnvTQ?_xU9ZFS;p8?rB(Vw}*tS22#h zf4%6c=BYwzn7>jjT6M=1nwz?IJv{wVt#B15RK*=#Lp4C~_b4je9gWs@M_v8-uCZ*_ z*vF0e@rCU8LaysZzH2$#wVdk`HeBeA!0~kG?r3zY<LndHXN?_zMRzp%qV9UPWz;(_ zDx4Q%+K_$O^e&+3o%*~{^F*(2nTj{+sit)$&m5JC*Q_fZ(pBFK6<6fcA2!PT&@EIs z1bL&%jn!5;e{bG@HtRq8(Y^d=C_5U;`QOU>xvZbd`C}VSR5|aa#iOg-*p_GXiSx5Y z4`5N{#_F$fzc#9z2X)PZpN>NIWmCBUP37pD%KrVFubRfq<1<gCuDNwxo4<Z_Zt7*q z)}X!Zl<C?X)HMYEZq&7r+Pdar^S(1#-<glTkv|*Co(<)EZ{>Yl*2m?1v5f}QHPEVd zUDrmo+JjFTK5J|TEb7{bqH6(<h_Pmjt}bQpwHJbz7#$bCir{w<d=KjzmNH5Bo;#J0 zL^J-j$&cWZm1TO3RW7b(_&)<8p22BAj@|?50g~?J)OS;BqRYexEqpm&5il({CX^WO z1@SMSC%8cp=^p{W^@m|TCC#6czF(1sf5CswUyz=ECC5G|>~q@^!yMg6Jtvs&gw4d% z_};0XF`nlp2*p9P(B$35(#{=5uYr4sT7$QhSN2uWskP`dw(x2dUSowvtMF{I#M-=V MHZ__a+o_@b4|!-My#N3J diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-314.pyc deleted file mode 100644 index cafae26d8e654cc172f34f859b36b6d33683a2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18936 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-314.pyc deleted file mode 100644 index 292f97d4b291948bafcc3ea9c7230da0b7580c47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11396 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-314.pyc deleted file mode 100644 index 6cbabf7dbf9b04e64edf1900a5f40ed05a874fe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18256 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%0DX5FT6@)TYpli7y{xz<Bwf()B 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-314.pyc deleted file mode 100644 index f0fe2852e69fe489d02f00da9f7e890369c40916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1380 zcmah}O>Y}z5T18GymoA-cIuWi7{z>JTH7%RsG)$6LZB9P5;jgHq;+0x>?K`d?^?TW z3PD10D-Ilt6d?}1AmzxFf51<OEfrN8AtLocZgqoHj?8Qwpr}$tyYunvvorI~*n4q2 zIR+?$pZ~CbkpS*fa3adcIsO$L6S|;l&wxnJfPf<C(Pbu>&V*E#UL6se1%NE9gDzF% ztBO#j$(PYrg*pv&rLNW^b!}F<G<8w}Kv$lOMHE?@uKo{=Rh9Y}J{uFUI%eHsm=D(3 z$VwwCkE}AXDp@^pg^9RG=rOcOF|Mm<&xn++z6klTAkO(s%kyp5;rzoq3)I?nr)80| z<{(&H`bwQEzF90c7&c8e35`a^`#6e77p}v)bom>ACSqCmgxz2zY|<cRDD$YBIOr@G zIONB2Mbg<T=&rL<c~Z!ep30+6Lcx4;$dgayDIrgJDlhV%d}_#3Pvu33hr`s4=yZWL znx_{=>3`=dXtJCK$&-PHKoD!V?Y1qr-3*eP{}XVYSAu5=aGJKjRhTVqI*uz$3Vh5X z`@##7*BABG%JLGgt*u;J3}Oq*)oP{2D<9wrBcHim+Y~;n?S<gGg}040A9rn-P0K6K z&(9cNxZal0@!Zd?hVYF>%iV5nn7&o89b2ICh1qIZUZHHP?1&q#Gh3eHbNtK8Z}FPd z?zBu{anbG=*X#|$w}n;cn2jxS)AEgu-6`SE%4xb@iFnjU)Asz*=;X!DPLSXy$HAF+ z6WAi{(!YtS3y(l!(vZ}n*MKE&CwgaZC5Cy5Uk8>RK&rReht%*QA(wzXKY-j1@Ae@# zED%xz_S^uny|4R_9hL~00d{TxncjRKGQ%<<ZveY6fXUuYA0{8pB65tCAs-3X=0(x> zG*U5AaZ>cD$je96=8;N@=9-`I5@-SqkJD<=c59!mEb@h`iwhrDmOct1Vy9y}n;!jL zJbE>dZAW-X3dc#EAuQr<&<-Bg4$FoOJXt#&Ql5qN!kxbFrRnA9J8ieQ-Ll^EvKUfR z{%ur$J&+k=e@5|W4?&AdUG2dHq|bMgzssrLlq_C{nG1Jb-jnxM_o6?Rewy8%D&EbM zy48EBbGwZ@bG!E4RPI*gFf&Ea`EKPtBn}{T0J#Im9zf;*CJ!g4_hGsl|911<OND*F VE4^Di%;xqX*G+yO^Uh)$e*@!^F(Uu~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-314.pyc deleted file mode 100644 index a5c2aeb58df4d44d608c134e3c7c67a5a2ee654c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17040 zcmdU1TWlNGnV#WwM3EwOvn^Y;>F8q1mZkU}CtAlcCC73kSsBSnozkLcawIXPNM>ea z*{U~H(nTZp<^;Py6<~p=yII683M9ooG(cavPuqQ1fHqx7owz`Ow!51*8FG-_?nC$c z&s<1KRICJbvOTcQ9R71|bN=i3&wsqH!sp?T?*8<@5;J=^?sxRVOisPPulxrJvz*AO z+z2P~J^UG)YTHR=TaR6}v!_FK;A!u1o^h!z_Ri7cJ|n0C%Dm|8DLdm)Jv+IJ!fvDY zxSQkZsSj6A`5CY3-O1H*yExIknG=PJp2K#%n(7nF0P$?*k^!|sEJxYP%6`#@as?{~ zL_f*_R<0B)QLbX;s*5i4XcMcC@p^B&xQkW0xWmQ_4jWLlS`^xNwMMixa4j`6!i$Mi zJUy+nweVVbG?hxLQ8kfHDgF3emXxO=v1n{U!Vlljg@Nu!=uCI$`JVpg0Pqhaqv}{% zp6p7<O6RE%Ktd>*OhzvyrI;}&dl(<bulxX0nB^{VDv!mrjRaJ?$g7TvPSJ*su+vAF zlT}@!Lv*(Dq6=@ZNXbCbrn*s6z;7&3K}`WrEEp|T0kjNIEFCRd0n`I17LgXP09p<x zmXnsU0O|!43oBL^L4APM09soFtpIcrpqq=Jen7VXT2}-O0J;^>ZAH*ZK<feBUIeWI zbO)e2i=fqj1_9kw1g!z|2|yc)ptXQD0@_pr-6S@vn?)xGV7KNr2q3xy?081|2D|!$ z=~QrfLXxGRnhq*z8ii;k6O2dIXmBi%l$2n{gsNtgr`y|;QdCa0O(tS;T1k(oZL#!Z zyOi2LrL<4$bVbiY2iuhiDVc1)oJvop#?r~SBq!o0Mk8$=Pha#h`kPXuV0tX5PDsH~ z43&ybO2LkdL0@suS6eibXj?^afU%k<Mq62{=#)B<mOUG4r`KgIuSl{2ir>I^MordA zPDdvbsqqbrX4GV@(wRhRV`CXLSt}`}OvzG2x|&c_WdkD?)ju(cRgMw!8v=l{p$wkn zSL#ui<%YQt+f#qTadE)vxfl2eUgSkvJKw<Fwtq}@HJ2=@Q*uhPE2?~(1E0Hy?W3wf zJwBm*KlF6?yn<B>M}gP_$B#c5o=(e`!x=gKvJ_L5a4eagieHK<(tdosicC=<CnS0Q zf$+dJ;4F3Mz~RW@$knHgMuwzGLc0`ECo|#R#HFy3P^JBuXzX%yTvEcBM5aA*MS{eV z+Y8CVq_(!qHO(7|7;;RCM6?=Hz7<00!<B0G^`CNrbI$|H<`wo>0hnX!MFmQv7_c_J zl?4=Ny$0}Hoh(7mR#D{pu!b2vOzX$efWs{1p94?|t5dklgbeeh$TpuD8^$g--{+sh zHnRpe+CK9$&(k`>p4M3w`~x(k<!eDTA;pQOiO;}ta%)g(8*lRjM@O5^4|a<K;<?j3 zz1>aW&P=8Y%pUGd$D+w_Blt|`7gi+Z932hrfvN}^wA~T}->ut=sI$s?{g{1tG+$`2 zr>i&8IWW-GIn=3D>py$Xg*q)@i%WAG4K!O?(HxnmI-v<E&?75Vj7w?+A}69t8O;~L z<UucyOjK5t7Q5z9q~w_9j6ubzavj!C0m8WEU{DU=srhJGA|&Y|ST?QJq@E)1HfnYP z*(|qQ!8PuAuj9Rrg^suU*&}D?ocH~eH>Yn*FZy@h@$Y=M;?`6ycqHdPI_FsOS1<Z^ z-SO{QXw3O{XNBD|QK05CI6ZPDnw*mQi#XMV3YZ?h(#QrY&8ecDbR{^}4(z*Rq7U|A zvX4r;kp0nvZw+1#_NP;l>?LRgvKC(U<DoM#`+B*O-c=!MrWe$7miv_RIcpwJw$QLl zj}N!9$1lMy_{BaVW|BDx1R``yx@_eke$8@iT*m$gmiZ|O9@H^=K?i0MxwCxy;QH^M z;Z4RH$LH2_JJ(^)jAPh7U|4u&-}D@In5=`ArE8RA_kvb73D{xtCv>e!=Ir8FRn#dx zg2ldU_QI+z@YCuAf@|GgxPcNa^YaWd%a{5dAQD)W28be7rCr=G-^LHy&+$iKSvt53 z4;&GRtV(%7h518mwD6}}$~3p3owYJcd}uD688x>-^P1aGsqz-|$*5Lyyqr#?wE9Ro zLv|?i#I;CFmPjR7a;(KEZ#U~R0@qw%@93n00hkS-5T=`(8x5|ON#5sqxkw~1O8+t5 z&vHwZ)pM?;a{tYan;ml<VAq?k-gtH4e9pgjsc!o_JKo;0Sa&R2ckI^T_d9NPyy;pB zZ2F<^E#Lguy+G5Fx9Vo!jlTKDcUs?Wz31J%<gdT$-*ao|{qXzYTVb>2<h?*Eb$k8h z^||XNF#b;R?c}|{K0|KYy#Af*^Icj0-i4zW7*a#<E($GogqB;4_k?z|o-5Z`j#!QU zC=uf@Iq@isE)x+vlKYRMlBFK)q#luxdc-3?I4ZGZsYew*XSuKe2A!4Q=TbZvw$z}w zR^<`RSt`-$8gyn-Ht5YZGqj$@QzoJ^bl#<FOy4QG!h@!Q$uc0P$3Zkq(UnwjT8*xN zLg)JW&h?vW>9#XZtnyaONG5f_NbI&PPnQaPe6y)l$cibURf@nz&_HQNHp@M9ae=Br zEs|~T&IM2B{LihYMvBzNpP3vwFsBvMTCzExc)%fBsAi9~<UlkDTJ){Z+N@_Sk&u`P zSxAF69!rb|Ee0=Ps3^20h$_L+B27Gco0oTD96U%OFkRNHYjQuUsQ1it`Q{>Bo`3NS z8m^G?hc?H$*XT+*E9}aD+hgLhP7Ep^ql{L!$mZPmDxO|{74yVz8hl^?Yaxq>Zxq%5 zZNBBFkrgc?tCn9a&05A)FHTbHzoN|gn8&nir)i2NJ-VFFKH!io*x4gLI4ZGZiKnah z`Q?cxIAZL_3;_sgcg(z>x5}AI<uj-~xF<0dG*l!MUpzRSP$x)ekt+tKw{F`qXd(qT zNiW?hZ~3AIeVFwfZZ!1q=%`2Dg!R&#3=a0%g<moZF-|^&tVp_5=$uBAV~n<`n9)pl zH?<=ggM9O@k#AkOV0X@cx=6l#FrM}A%K1-Zg%f$aJ|?0%N3%1D%1%UujED-4{NSj> z(*GBtiszZ1mbrkY^1M&j`8<km4JpV6@Xc};WrV}^s6dwoCbl(;3X0+V=)t6djcK_r zlM2q$>`W@KR2`@Q<+W6>aUp%m!V_E{Y9XH1ZpkeHU99Qk<Fxjx#k0<PtkV*_XTgW4 z?Uy2)Un*Qd7wsI8&Bxed?Fu?jn;8r5qOhK^!1f&_Y)NZZ#P)|_>Wig;68o^yHYDs# zqhB^gDc6c+XBvAO+swFy%Vhcs*(^awcXFN-N_Z&=59sJ<Z+cvTfQM91sG5U*VMk8} zj*Qa^uE6lzOF#EfwniL#8QoxRj36xkS0VHQ8Y<5sD>8W?d(F+y{p#8u9((K94?EuK zSa2+i<*N73buD=Vi{AZry!&s(?|Bb>IXjUUO_UT7`5|o1Q#^6vDSjcOKi3kJC74Cl z=+C<uVOx!U3;pqQY-&<UsY-#^UCqu+9|N(){<SW%<>;tZp>Hw<y2ZhB{hhtH9R*k> z6I$P1tmgYFT{xKiFjQ|X(!18|=-nk+N1~&Wdy8jt!IL?EXIALUFX&@ZvlBFtJVHYZ zp&<jIAwEAo>aq0YB6K>HOh@Bi1ffPtAk?oTwCmi9{k`Wpy9VX2;X~F4ZWDn<yOIbj zcsGtd)<@vUT(C3eKa~|u<rnZVA#jo=l1E?{Ltq!baELgv>nlNEuf>s>L<|QNI8R!C zCs~>y2aJY5UqDA+--Usm(9n6Ydma2$G6pmUWaz6a;=jUI$<M@IXD)au=MQCt&|}A* zT#UU=hP_T+-^_P@CD=P-Ved*JE~P&|?uJ=2V9q!`=({l7)75>hG~4N30evKfG;2G{ z@R@({3RY@m2eJ|p^VT<W!Dn;+lUd>9W5?L^Iv8U%=~siXyvJd3N=d{%H?#Fot3rJB zogeH8mByED-?DKSx~yFVLze}=f>n}Vri_gD$LS2aUW|{kjDybd3k@Xy&VD5v^t{DE zaY?zXrg2jLh!elH28rGfNZDj)ukOL;ht3Uj^@!b}p>yJe(%1>;R*2r1;b%*c3^e9L zZ@xk6wyp*8TrPMf=kLi1J&zrMuhB%zEuM><+sFugc;p91C6>rF%{C|>pzwvfM|wZV zOS;1?*SA%T%bx(}-Ql9m+^Cpt??-P~V6EC`Ci7k=c`BtQ;6!~Cajbuks~-o`5q;^i zT*GJNpc>e>SZ6xAo1AS~EMNKBeTz;^#w<$^Q^A{Atd_BVS?x-)z32Xs`#tZEygwPq zcD#_=FJ^~c$_2lk^M{LEO9dyek5gKFhbC$go6XroLZV5R6-{f2ZR7rgya-;4)is`< zVuwP(GLqAmyrOH2(*X0?6x7r#zFz(227O_X_q_3rzcDK`vd`0xnzm>{Bti~K#AA3O zk;!y?DoJHTYP>QPO&V|fk;oV#ebi(kC8g4M?T$pSi9ta?BuPe+)oc1zxSpoWoYmyI zmrqhgK4JMRW#nLz2Pvant~^2+Z6jscddMlt6w26#lQh?ABN1|xBw~@Ms>+E=Q>vsy zB5dmVN6_cVbhyeg`lUpGt8a4;Y=To*uHjr24^i5)Vn=D2O3O7k8vjL{ot-c5VDE8u zX1qsf*~4J)Dj6`8mW6d;@NXOSP+ATc{h2U$C_ke=xL>TcHAY+7Lt6u%;;oTGd1xpP z?aD*D^3cvawDVEWv-!Gb&AJe`*1Yyu^J-$Shc>W@zV@{2MI7n?01}yB38FwQqf*gJ zh>5VZ+YrIzVDS)|C#EFgNk)TuSi~cvAn2U?CjJ!KgOm56im!S=*{#84dVDa*eywF< zaz0^x&XwP@hGBCbhM5+~ZeBti9Od&32r;Fz0v5yJYPSynzB(1Ov<=(FFtvI_MGkXb z?w~DW57QQzrD3}{!UP|-oM5HG0!ofzg&{z<@Wv>@u<f%(VaNStGtJLQs(C6gCZ{KZ zQtC=VPN&E_61)<X6BHAww8^!Yrsg){dzf2U^LO_4QtZ*75qzW{J9t^pk5TcDHRn?- zaxlnjlOV~9r-L)~=Ti!XEj85B!4{{sr#KWSk{FBRsUQLeTm(%Kbt7wb)YLq~6o1n# z%W0WuF3oN9+~Sbmpm`$-PMJ!on%8K?s7bR=D&q>#BtnRc)86`31JjC_V=40Ap)Mn= zAD}SH{oZ%vgO_u@&e_vTZr@#Z-IBj{&WCfzvMuv<OTvz9@W7I=eg4&Dx1+}Osld5C zuf^u}ek;9P#yKm&^+L^E_qL@#<HAb|z1fNbbN2fcTjs03o6ZW`@B92WU%K(q&5;`; z^SwD=3mf6}SC;~<x5BsjvlY)2R$eNvobAgKvq`k{VH;sK2QeGMGFb2ttyTe-HPFur zWY9K#JlN^t69oZB#A@%-3zO9XeBc3x?8EA1di-K5`<0&^>at|9+AQWsqCn)Ig0m$K z>0kdv;t<S!H*TusTacVul|)-BeUXt&))eigDc3+VcKij**jY4V*I&Sl-9<AN{sLxP zRy1SJU%-sZ^D`E`;C|msAE^O^h_e81JY@XHi)=)lM%7?E4fh<Kez0g}is*=@O3Lsy z`9*M!R$dU8s+C!ebNM2@#Bak#$~@efVEXaoaeD32T|+YYEHx){JM=?H<@Y6QOF}#< zzljX;i9}aH^n?6;dPf<PPn8ghv)pgpmD$>+d+sJHV(Z5Bzd!ZPb8kPlSl@c5zV#>K z`!C&o=|kVI_MgtxKljURIsf^raGtelzUOZK{H=E1bMM|*tF1ZzP*xbiSZ_w|xf?gu zXiLs7W(D!{HQJo>zmOGP_;tBIFP1;A(qI;v{B2s|N2!OO5nfF7u#1O6Kt`4r9%PB( zk)H?ZvP6bD6oYf6m*Gw1pX4*Tt;Orsmgp7*u}t)c<)T;gi4~$>473Xa=64v~(4(XU zR%KaW7)4J-7MR0?mO79WtDk~vPrnuvwv@*Nk1IlzJ<g2dMV`)k<3463I!c9X_LUDi zN`-A^oPd)~U6qD$bH!xYj0<&WU%D#2c*(3Wje}A7YM3lGmWJJ?0t2hp&iuqfyl!$j znS2ytBunGCq99+xjf0_ygc8I*hy%oMUP1tWP?cg6sl+Q&h~rX&mn21P3-;`uWWs>% zH_)*tJcFt6qOO=2LEktY9iKvwXG)bIK&BK{DF#~&q3sYM%CsbVn8ZmYb(s^{%M3*Y zbI}7B4C7M|ZJ((Kr6(tG>!VZu&CJdjAM<cnFeZS60fbLbASx3%GtJ*PbnI|f_rc>& z?muww(CPh$j~qR+|M-EUhxZ>k9y)yd;F0dbM~|KQYbK9o%KNSbi$v0l00@&xOenFR zx?GaKhh^5B({x*A=Hwvm(o7?AG2Ca~tO*;AwQy((-<(p1^;;|9?yH$3F6hYNLAqfR zJk4aU(o!yyc`1{jiEA6z6zrjm+ca8re_HLqEenaPb1BX&Ud@GpfjzD2%=6tBB6`Su zUuWn{Pk*;o$zY-LqS)O(6d`%6xz8b}{&@+PEnb+C<ZHU=e3cn}EoHj7?3+X=2)6Rf zOjfi?b_2)=%hxwze@ip`Cz_#S;xhWOQ&wiVr!+pIP~;~W)-369eI>1HlknsZ(0~bx ze?tMM+f`iI&Skr;)-~IQU9M$RKS@UQH<yGh^Lv+sy6m>llCX8YZ%NoZzm;Xnm1T9V zPpk6gb~WeRgpIyXch?<U$J};%-njnS^*5*Qxp&;J*oFAPj~taS<XaBi+Y_2Qx>(+L zx4iL}n-+VbcY30;UBC4NZnoWMo3F|4yp;3AW<yKWb&J)_cdDBglw9?R*Lr7r?w420 zUHk5dtfMY3+f3O+vISCSW4qvu$=Hw3r6pq<`Pv5@vRjDx$KwO|NAbwd19e%dLe6CD z2;{}Aeqj=U;-YP2t7so-5FI1+qI1M4x<+=3?vV;n7{L|Ckv*bkB+y<~au=H4CFl3L z<(8x^xz`=$OWmXqy{5#<IPyN#VP5o^G7gf`Ip8tAq~I|Csk=If{IE@gbjF1NV-7pH zFsUt;p5b3`oaN&1Owkntx??!(2v}DyPs7`=+o(B?)vD*7$3|%f?jiP7meDiN=fl;_ zRjtg~n=Rv=Ocy-rTV41j(tN8@DQOQKP_wEUeh#~^a+oD0Yiu^_As4Pu;Ql2uP7!>9 zO%|O5vot_f)v7c=-riNI^q69$i4$y!O3n&er)p+%fzn|ykumjJ29AY(=2_6iJk5xi zj!XnILy*Z@Ccb4l0A->!!GVRC*o!BV%)w+%lvwK!u@>F%c>?I1<%YP^P?osPWwKvE z{Q1bA=<?iEZq~VzdmcK5A(U_6j@T1?i|yk-p%c1GYfsDZ7Mo^kds5?LMd6cW9ph3; zx|)$sXsxR}2Uil&i1CRXNxF-roM^LZe~O+JTJ?`H!>p(2N7eJ4-#aw-%6E^x8TvuT zKUV(_b4$FwZ96}7T7Db#S}HV`-dllks5LHEOr;XBbX<yDni?CEWX+A4kT+CwGr4`} zpcWWBgVopd%K$E2y{OrvscV{WS&~yy5)~@(dJq>dReIYGAI*!Jlig`rWpKB+nSzji zjwxy7x=RM}#jqPlA!v5YK>lYcIZ!&NxKT7zfUW@Q)?Fm|Us0Edu^<pN%dL1hXO-?t zse&(M!A4SFCaJ%R<oziU^?1Ruy7_}kLU7@U<!Vp0>(iRN<gewNf#pq{P<_|EwY21i zC|~q6-|;jrs5wvTZ0NqP=FQ>xujPEraJe`<Z}h*`zvyVV<7imuy0z~E^}`o_VZZ0- z`qae<<=;~75aM#4rZ<!~l-I3ai|(eo?k4zx7XAC~`1jrF%J~macvj`jXKy^aSl)W4 zy!F=L`xkCs_|WlTe6c)qw>-2|wP`L?YL_t|dZ*{@o`rAZ{D-o_q2HEQ+&q5cc-CRu z+#-rLshVQp!03;@7}{djJw4<_ovAS|eSiJyz~Mzim?M9rMQ_8P3P~S!!;EjmWiq}s zyW=2x>Ust*t>i$7P3>J2X1Q&qrs2Ydq#_$Ve@bS_El>}n6t!ll0WFQT4zRN&`y03* zm-m>uxHwvnB;U^UZb@*@*tc^DepL;$r5a&c1D2+2+qnkLtleV&n4tZPltJ>0+T9aT zg}90ls#Xpw4D6!29LWx1)(dkGw%Aw$W*sqMVfq$pB8V%w94Tf2`QOo)EhwFK!0NHN zocli#Y99)mxBAVa^H1r<$NlQothaU9&Uu@b9ZqMfUL(+&754r2!&=U}`60(UeZLmG z%XU2f_hE$rYQ68@cURa)(AGaHB-3Aa?By05&u~93f6D$d{we#<D?9!6f2rV+L)5t^ zqgR#0jMP#qzmCdu<TEx!aXC0tArjN&!9UQevazWYuBN7wicEOaT#)D30my_f$d^n) zCS|MnV`<zMj<Nrkpe=eSCX?q+KanAKs=iGp(~m7ITMiaBM@LB5eXKdm(S#2D5bA{d zE3_i|S1u#NC-VHSxr#q<PyCK6`-t=WhTHiYF8Bv7_@DN`Zyb9bx~}tl(_H!?N6$}Q zwc{Y*lf7_Je$tE`=qG1**hruB^PuDhL9S}s!r@<4?zz+QSGksFbCoA&D<F!T6|hFj KZLhl-iT@ufMxti` diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/android.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/android.py deleted file mode 100644 index 92efc852d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/android.py +++ /dev/null @@ -1,249 +0,0 @@ -"""Android.""" - -from __future__ import annotations - -import os -import re -import sys -from functools import lru_cache -from typing import TYPE_CHECKING, cast - -from .api import PlatformDirsABC - - -class Android(PlatformDirsABC): - """ - Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_. - - Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, `version - <platformdirs.api.PlatformDirsABC.version>`, `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - - """ - - @property - def user_data_dir(self) -> str: - """:return: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``""" - return self._append_app_name_and_version(cast("str", _android_folder()), "files") - - @property - def site_data_dir(self) -> str: - """:return: data directory shared by users, same as `user_data_dir`""" - return self.user_data_dir - - @property - def user_config_dir(self) -> str: - """ - :return: config directory tied to the user, e.g. \ - ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>`` - """ - return self._append_app_name_and_version(cast("str", _android_folder()), "shared_prefs") - - @property - def site_config_dir(self) -> str: - """:return: config directory shared by the users, same as `user_config_dir`""" - return self.user_config_dir - - @property - def user_cache_dir(self) -> str: - """:return: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``""" - return self._append_app_name_and_version(cast("str", _android_folder()), "cache") - - @property - def site_cache_dir(self) -> str: - """:return: cache directory shared by users, same as `user_cache_dir`""" - return self.user_cache_dir - - @property - def user_state_dir(self) -> str: - """:return: state directory tied to the user, same as `user_data_dir`""" - return self.user_data_dir - - @property - def user_log_dir(self) -> str: - """ - :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it, - e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/log`` - """ - path = self.user_cache_dir - if self.opinion: - path = os.path.join(path, "log") # noqa: PTH118 - return path - - @property - def user_documents_dir(self) -> str: - """:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``""" - return _android_documents_folder() - - @property - def user_downloads_dir(self) -> str: - """:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``""" - return _android_downloads_folder() - - @property - def user_pictures_dir(self) -> str: - """:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``""" - return _android_pictures_folder() - - @property - def user_videos_dir(self) -> str: - """:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``""" - return _android_videos_folder() - - @property - def user_music_dir(self) -> str: - """:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``""" - return _android_music_folder() - - @property - def user_desktop_dir(self) -> str: - """:return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``""" - return "/storage/emulated/0/Desktop" - - @property - def user_runtime_dir(self) -> str: - """ - :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it, - e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/tmp`` - """ - path = self.user_cache_dir - if self.opinion: - path = os.path.join(path, "tmp") # noqa: PTH118 - return path - - @property - def site_runtime_dir(self) -> str: - """:return: runtime directory shared by users, same as `user_runtime_dir`""" - return self.user_runtime_dir - - -@lru_cache(maxsize=1) -def _android_folder() -> str | None: # noqa: C901 - """:return: base folder for the Android OS or None if it cannot be found""" - result: str | None = None - # type checker isn't happy with our "import android", just don't do this when type checking see - # https://stackoverflow.com/a/61394121 - if not TYPE_CHECKING: - try: - # First try to get a path to android app using python4android (if available)... - from android import mActivity # noqa: PLC0415 - - context = cast("android.content.Context", mActivity.getApplicationContext()) # noqa: F821 - result = context.getFilesDir().getParentFile().getAbsolutePath() - except Exception: # noqa: BLE001 - result = None - if result is None: - try: - # ...and fall back to using plain pyjnius, if python4android isn't available or doesn't deliver any useful - # result... - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - result = context.getFilesDir().getParentFile().getAbsolutePath() - except Exception: # noqa: BLE001 - result = None - if result is None: - # and if that fails, too, find an android folder looking at path on the sys.path - # warning: only works for apps installed under /data, not adopted storage etc. - pattern = re.compile(r"/data/(data|user/\d+)/(.+)/files") - for path in sys.path: - if pattern.match(path): - result = path.split("/files")[0] - break - else: - result = None - if result is None: - # one last try: find an android folder looking at path on the sys.path taking adopted storage paths into - # account - pattern = re.compile(r"/mnt/expand/[a-fA-F0-9-]{36}/(data|user/\d+)/(.+)/files") - for path in sys.path: - if pattern.match(path): - result = path.split("/files")[0] - break - else: - result = None - return result - - -@lru_cache(maxsize=1) -def _android_documents_folder() -> str: - """:return: documents folder for the Android OS""" - # Get directories with pyjnius - try: - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - environment = autoclass("android.os.Environment") - documents_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOCUMENTS).getAbsolutePath() - except Exception: # noqa: BLE001 - documents_dir = "/storage/emulated/0/Documents" - - return documents_dir - - -@lru_cache(maxsize=1) -def _android_downloads_folder() -> str: - """:return: downloads folder for the Android OS""" - # Get directories with pyjnius - try: - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - environment = autoclass("android.os.Environment") - downloads_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOWNLOADS).getAbsolutePath() - except Exception: # noqa: BLE001 - downloads_dir = "/storage/emulated/0/Downloads" - - return downloads_dir - - -@lru_cache(maxsize=1) -def _android_pictures_folder() -> str: - """:return: pictures folder for the Android OS""" - # Get directories with pyjnius - try: - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - environment = autoclass("android.os.Environment") - pictures_dir: str = context.getExternalFilesDir(environment.DIRECTORY_PICTURES).getAbsolutePath() - except Exception: # noqa: BLE001 - pictures_dir = "/storage/emulated/0/Pictures" - - return pictures_dir - - -@lru_cache(maxsize=1) -def _android_videos_folder() -> str: - """:return: videos folder for the Android OS""" - # Get directories with pyjnius - try: - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - environment = autoclass("android.os.Environment") - videos_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DCIM).getAbsolutePath() - except Exception: # noqa: BLE001 - videos_dir = "/storage/emulated/0/DCIM/Camera" - - return videos_dir - - -@lru_cache(maxsize=1) -def _android_music_folder() -> str: - """:return: music folder for the Android OS""" - # Get directories with pyjnius - try: - from jnius import autoclass # noqa: PLC0415 - - context = autoclass("android.content.Context") - environment = autoclass("android.os.Environment") - music_dir: str = context.getExternalFilesDir(environment.DIRECTORY_MUSIC).getAbsolutePath() - except Exception: # noqa: BLE001 - music_dir = "/storage/emulated/0/Music" - - return music_dir - - -__all__ = [ - "Android", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/api.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/api.py deleted file mode 100644 index 251600e6d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/api.py +++ /dev/null @@ -1,299 +0,0 @@ -"""Base API.""" - -from __future__ import annotations - -import os -from abc import ABC, abstractmethod -from pathlib import Path -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from collections.abc import Iterator - from typing import Literal - - -class PlatformDirsABC(ABC): # noqa: PLR0904 - """Abstract base class for platform directories.""" - - def __init__( # noqa: PLR0913, PLR0917 - self, - appname: str | None = None, - appauthor: str | Literal[False] | None = None, - version: str | None = None, - roaming: bool = False, # noqa: FBT001, FBT002 - multipath: bool = False, # noqa: FBT001, FBT002 - opinion: bool = True, # noqa: FBT001, FBT002 - ensure_exists: bool = False, # noqa: FBT001, FBT002 - ) -> None: - """ - Create a new platform directory. - - :param appname: See `appname`. - :param appauthor: See `appauthor`. - :param version: See `version`. - :param roaming: See `roaming`. - :param multipath: See `multipath`. - :param opinion: See `opinion`. - :param ensure_exists: See `ensure_exists`. - - """ - self.appname = appname #: The name of application. - self.appauthor = appauthor - """ - The name of the app author or distributing body for this application. - - Typically, it is the owning company name. Defaults to `appname`. You may pass ``False`` to disable it. - - """ - self.version = version - """ - An optional version path element to append to the path. - - You might want to use this if you want multiple versions of your app to be able to run independently. If used, - this would typically be ``<major>.<minor>``. - - """ - self.roaming = roaming - """ - Whether to use the roaming appdata directory on Windows. - - That means that for users on a Windows network setup for roaming profiles, this user data will be synced on - login (see - `here <https://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>`_). - - """ - self.multipath = multipath - """ - An optional parameter which indicates that the entire list of data dirs should be returned. - - By default, the first item would only be returned. - - """ - self.opinion = opinion #: A flag to indicating to use opinionated values. - self.ensure_exists = ensure_exists - """ - Optionally create the directory (and any missing parents) upon access if it does not exist. - - By default, no directories are created. - - """ - - def _append_app_name_and_version(self, *base: str) -> str: - params = list(base[1:]) - if self.appname: - params.append(self.appname) - if self.version: - params.append(self.version) - path = os.path.join(base[0], *params) # noqa: PTH118 - self._optionally_create_directory(path) - return path - - def _optionally_create_directory(self, path: str) -> None: - if self.ensure_exists: - Path(path).mkdir(parents=True, exist_ok=True) - - def _first_item_as_path_if_multipath(self, directory: str) -> Path: - if self.multipath: - # If multipath is True, the first path is returned. - directory = directory.partition(os.pathsep)[0] - return Path(directory) - - @property - @abstractmethod - def user_data_dir(self) -> str: - """:return: data directory tied to the user""" - - @property - @abstractmethod - def site_data_dir(self) -> str: - """:return: data directory shared by users""" - - @property - @abstractmethod - def user_config_dir(self) -> str: - """:return: config directory tied to the user""" - - @property - @abstractmethod - def site_config_dir(self) -> str: - """:return: config directory shared by the users""" - - @property - @abstractmethod - def user_cache_dir(self) -> str: - """:return: cache directory tied to the user""" - - @property - @abstractmethod - def site_cache_dir(self) -> str: - """:return: cache directory shared by users""" - - @property - @abstractmethod - def user_state_dir(self) -> str: - """:return: state directory tied to the user""" - - @property - @abstractmethod - def user_log_dir(self) -> str: - """:return: log directory tied to the user""" - - @property - @abstractmethod - def user_documents_dir(self) -> str: - """:return: documents directory tied to the user""" - - @property - @abstractmethod - def user_downloads_dir(self) -> str: - """:return: downloads directory tied to the user""" - - @property - @abstractmethod - def user_pictures_dir(self) -> str: - """:return: pictures directory tied to the user""" - - @property - @abstractmethod - def user_videos_dir(self) -> str: - """:return: videos directory tied to the user""" - - @property - @abstractmethod - def user_music_dir(self) -> str: - """:return: music directory tied to the user""" - - @property - @abstractmethod - def user_desktop_dir(self) -> str: - """:return: desktop directory tied to the user""" - - @property - @abstractmethod - def user_runtime_dir(self) -> str: - """:return: runtime directory tied to the user""" - - @property - @abstractmethod - def site_runtime_dir(self) -> str: - """:return: runtime directory shared by users""" - - @property - def user_data_path(self) -> Path: - """:return: data path tied to the user""" - return Path(self.user_data_dir) - - @property - def site_data_path(self) -> Path: - """:return: data path shared by users""" - return Path(self.site_data_dir) - - @property - def user_config_path(self) -> Path: - """:return: config path tied to the user""" - return Path(self.user_config_dir) - - @property - def site_config_path(self) -> Path: - """:return: config path shared by the users""" - return Path(self.site_config_dir) - - @property - def user_cache_path(self) -> Path: - """:return: cache path tied to the user""" - return Path(self.user_cache_dir) - - @property - def site_cache_path(self) -> Path: - """:return: cache path shared by users""" - return Path(self.site_cache_dir) - - @property - def user_state_path(self) -> Path: - """:return: state path tied to the user""" - return Path(self.user_state_dir) - - @property - def user_log_path(self) -> Path: - """:return: log path tied to the user""" - return Path(self.user_log_dir) - - @property - def user_documents_path(self) -> Path: - """:return: documents a path tied to the user""" - return Path(self.user_documents_dir) - - @property - def user_downloads_path(self) -> Path: - """:return: downloads path tied to the user""" - return Path(self.user_downloads_dir) - - @property - def user_pictures_path(self) -> Path: - """:return: pictures path tied to the user""" - return Path(self.user_pictures_dir) - - @property - def user_videos_path(self) -> Path: - """:return: videos path tied to the user""" - return Path(self.user_videos_dir) - - @property - def user_music_path(self) -> Path: - """:return: music path tied to the user""" - return Path(self.user_music_dir) - - @property - def user_desktop_path(self) -> Path: - """:return: desktop path tied to the user""" - return Path(self.user_desktop_dir) - - @property - def user_runtime_path(self) -> Path: - """:return: runtime path tied to the user""" - return Path(self.user_runtime_dir) - - @property - def site_runtime_path(self) -> Path: - """:return: runtime path shared by users""" - return Path(self.site_runtime_dir) - - def iter_config_dirs(self) -> Iterator[str]: - """:yield: all user and site configuration directories.""" - yield self.user_config_dir - yield self.site_config_dir - - def iter_data_dirs(self) -> Iterator[str]: - """:yield: all user and site data directories.""" - yield self.user_data_dir - yield self.site_data_dir - - def iter_cache_dirs(self) -> Iterator[str]: - """:yield: all user and site cache directories.""" - yield self.user_cache_dir - yield self.site_cache_dir - - def iter_runtime_dirs(self) -> Iterator[str]: - """:yield: all user and site runtime directories.""" - yield self.user_runtime_dir - yield self.site_runtime_dir - - def iter_config_paths(self) -> Iterator[Path]: - """:yield: all user and site configuration paths.""" - for path in self.iter_config_dirs(): - yield Path(path) - - def iter_data_paths(self) -> Iterator[Path]: - """:yield: all user and site data paths.""" - for path in self.iter_data_dirs(): - yield Path(path) - - def iter_cache_paths(self) -> Iterator[Path]: - """:yield: all user and site cache paths.""" - for path in self.iter_cache_dirs(): - yield Path(path) - - def iter_runtime_paths(self) -> Iterator[Path]: - """:yield: all user and site runtime paths.""" - for path in self.iter_runtime_dirs(): - yield Path(path) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/macos.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/macos.py deleted file mode 100644 index 30ab36891..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/macos.py +++ /dev/null @@ -1,146 +0,0 @@ -"""macOS.""" - -from __future__ import annotations - -import os.path -import sys -from typing import TYPE_CHECKING - -from .api import PlatformDirsABC - -if TYPE_CHECKING: - from pathlib import Path - - -class MacOS(PlatformDirsABC): - """ - Platform directories for the macOS operating system. - - Follows the guidance from - `Apple documentation <https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html>`_. - Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, - `version <platformdirs.api.PlatformDirsABC.version>`, - `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`. - - """ - - @property - def user_data_dir(self) -> str: - """:return: data directory tied to the user, e.g. ``~/Library/Application Support/$appname/$version``""" - return self._append_app_name_and_version(os.path.expanduser("~/Library/Application Support")) # noqa: PTH111 - - @property - def site_data_dir(self) -> str: - """ - :return: data directory shared by users, e.g. ``/Library/Application Support/$appname/$version``. - If we're using a Python binary managed by `Homebrew <https://brew.sh>`_, the directory - will be under the Homebrew prefix, e.g. ``$homebrew_prefix/share/$appname/$version``. - If `multipath <platformdirs.api.PlatformDirsABC.multipath>` is enabled, and we're in Homebrew, - the response is a multi-path string separated by ":", e.g. - ``$homebrew_prefix/share/$appname/$version:/Library/Application Support/$appname/$version`` - """ - is_homebrew = "/opt/python" in sys.prefix - homebrew_prefix = sys.prefix.split("/opt/python")[0] if is_homebrew else "" - path_list = [self._append_app_name_and_version(f"{homebrew_prefix}/share")] if is_homebrew else [] - path_list.append(self._append_app_name_and_version("/Library/Application Support")) - if self.multipath: - return os.pathsep.join(path_list) - return path_list[0] - - @property - def site_data_path(self) -> Path: - """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" - return self._first_item_as_path_if_multipath(self.site_data_dir) - - @property - def user_config_dir(self) -> str: - """:return: config directory tied to the user, same as `user_data_dir`""" - return self.user_data_dir - - @property - def site_config_dir(self) -> str: - """:return: config directory shared by the users, same as `site_data_dir`""" - return self.site_data_dir - - @property - def user_cache_dir(self) -> str: - """:return: cache directory tied to the user, e.g. ``~/Library/Caches/$appname/$version``""" - return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches")) # noqa: PTH111 - - @property - def site_cache_dir(self) -> str: - """ - :return: cache directory shared by users, e.g. ``/Library/Caches/$appname/$version``. - If we're using a Python binary managed by `Homebrew <https://brew.sh>`_, the directory - will be under the Homebrew prefix, e.g. ``$homebrew_prefix/var/cache/$appname/$version``. - If `multipath <platformdirs.api.PlatformDirsABC.multipath>` is enabled, and we're in Homebrew, - the response is a multi-path string separated by ":", e.g. - ``$homebrew_prefix/var/cache/$appname/$version:/Library/Caches/$appname/$version`` - """ - is_homebrew = "/opt/python" in sys.prefix - homebrew_prefix = sys.prefix.split("/opt/python")[0] if is_homebrew else "" - path_list = [self._append_app_name_and_version(f"{homebrew_prefix}/var/cache")] if is_homebrew else [] - path_list.append(self._append_app_name_and_version("/Library/Caches")) - if self.multipath: - return os.pathsep.join(path_list) - return path_list[0] - - @property - def site_cache_path(self) -> Path: - """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" - return self._first_item_as_path_if_multipath(self.site_cache_dir) - - @property - def user_state_dir(self) -> str: - """:return: state directory tied to the user, same as `user_data_dir`""" - return self.user_data_dir - - @property - def user_log_dir(self) -> str: - """:return: log directory tied to the user, e.g. ``~/Library/Logs/$appname/$version``""" - return self._append_app_name_and_version(os.path.expanduser("~/Library/Logs")) # noqa: PTH111 - - @property - def user_documents_dir(self) -> str: - """:return: documents directory tied to the user, e.g. ``~/Documents``""" - return os.path.expanduser("~/Documents") # noqa: PTH111 - - @property - def user_downloads_dir(self) -> str: - """:return: downloads directory tied to the user, e.g. ``~/Downloads``""" - return os.path.expanduser("~/Downloads") # noqa: PTH111 - - @property - def user_pictures_dir(self) -> str: - """:return: pictures directory tied to the user, e.g. ``~/Pictures``""" - return os.path.expanduser("~/Pictures") # noqa: PTH111 - - @property - def user_videos_dir(self) -> str: - """:return: videos directory tied to the user, e.g. ``~/Movies``""" - return os.path.expanduser("~/Movies") # noqa: PTH111 - - @property - def user_music_dir(self) -> str: - """:return: music directory tied to the user, e.g. ``~/Music``""" - return os.path.expanduser("~/Music") # noqa: PTH111 - - @property - def user_desktop_dir(self) -> str: - """:return: desktop directory tied to the user, e.g. ``~/Desktop``""" - return os.path.expanduser("~/Desktop") # noqa: PTH111 - - @property - def user_runtime_dir(self) -> str: - """:return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``""" - return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches/TemporaryItems")) # noqa: PTH111 - - @property - def site_runtime_dir(self) -> str: - """:return: runtime directory shared by users, same as `user_runtime_dir`""" - return self.user_runtime_dir - - -__all__ = [ - "MacOS", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/unix.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/unix.py deleted file mode 100644 index fc75d8d07..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/unix.py +++ /dev/null @@ -1,272 +0,0 @@ -"""Unix.""" - -from __future__ import annotations - -import os -import sys -from configparser import ConfigParser -from pathlib import Path -from typing import TYPE_CHECKING, NoReturn - -from .api import PlatformDirsABC - -if TYPE_CHECKING: - from collections.abc import Iterator - -if sys.platform == "win32": - - def getuid() -> NoReturn: - msg = "should only be used on Unix" - raise RuntimeError(msg) - -else: - from os import getuid - - -class Unix(PlatformDirsABC): # noqa: PLR0904 - """ - On Unix/Linux, we follow the `XDG Basedir Spec <https://specifications.freedesktop.org/basedir-spec/basedir-spec- - latest.html>`_. - - The spec allows overriding directories with environment variables. The examples shown are the default values, - alongside the name of the environment variable that overrides them. Makes use of the `appname - <platformdirs.api.PlatformDirsABC.appname>`, `version <platformdirs.api.PlatformDirsABC.version>`, `multipath - <platformdirs.api.PlatformDirsABC.multipath>`, `opinion <platformdirs.api.PlatformDirsABC.opinion>`, `ensure_exists - <platformdirs.api.PlatformDirsABC.ensure_exists>`. - - """ - - @property - def user_data_dir(self) -> str: - """ - :return: data directory tied to the user, e.g. ``~/.local/share/$appname/$version`` or - ``$XDG_DATA_HOME/$appname/$version`` - """ - path = os.environ.get("XDG_DATA_HOME", "") - if not path.strip(): - path = os.path.expanduser("~/.local/share") # noqa: PTH111 - return self._append_app_name_and_version(path) - - @property - def _site_data_dirs(self) -> list[str]: - path = os.environ.get("XDG_DATA_DIRS", "") - if not path.strip(): - path = f"/usr/local/share{os.pathsep}/usr/share" - return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)] - - @property - def site_data_dir(self) -> str: - """ - :return: data directories shared by users (if `multipath <platformdirs.api.PlatformDirsABC.multipath>` is - enabled and ``XDG_DATA_DIRS`` is set and a multi path the response is also a multi path separated by the - OS path separator), e.g. ``/usr/local/share/$appname/$version`` or ``/usr/share/$appname/$version`` - """ - # XDG default for $XDG_DATA_DIRS; only first, if multipath is False - dirs = self._site_data_dirs - if not self.multipath: - return dirs[0] - return os.pathsep.join(dirs) - - @property - def user_config_dir(self) -> str: - """ - :return: config directory tied to the user, e.g. ``~/.config/$appname/$version`` or - ``$XDG_CONFIG_HOME/$appname/$version`` - """ - path = os.environ.get("XDG_CONFIG_HOME", "") - if not path.strip(): - path = os.path.expanduser("~/.config") # noqa: PTH111 - return self._append_app_name_and_version(path) - - @property - def _site_config_dirs(self) -> list[str]: - path = os.environ.get("XDG_CONFIG_DIRS", "") - if not path.strip(): - path = "/etc/xdg" - return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)] - - @property - def site_config_dir(self) -> str: - """ - :return: config directories shared by users (if `multipath <platformdirs.api.PlatformDirsABC.multipath>` - is enabled and ``XDG_CONFIG_DIRS`` is set and a multi path the response is also a multi path separated by - the OS path separator), e.g. ``/etc/xdg/$appname/$version`` - """ - # XDG default for $XDG_CONFIG_DIRS only first, if multipath is False - dirs = self._site_config_dirs - if not self.multipath: - return dirs[0] - return os.pathsep.join(dirs) - - @property - def user_cache_dir(self) -> str: - """ - :return: cache directory tied to the user, e.g. ``~/.cache/$appname/$version`` or - ``~/$XDG_CACHE_HOME/$appname/$version`` - """ - path = os.environ.get("XDG_CACHE_HOME", "") - if not path.strip(): - path = os.path.expanduser("~/.cache") # noqa: PTH111 - return self._append_app_name_and_version(path) - - @property - def site_cache_dir(self) -> str: - """:return: cache directory shared by users, e.g. ``/var/cache/$appname/$version``""" - return self._append_app_name_and_version("/var/cache") - - @property - def user_state_dir(self) -> str: - """ - :return: state directory tied to the user, e.g. ``~/.local/state/$appname/$version`` or - ``$XDG_STATE_HOME/$appname/$version`` - """ - path = os.environ.get("XDG_STATE_HOME", "") - if not path.strip(): - path = os.path.expanduser("~/.local/state") # noqa: PTH111 - return self._append_app_name_and_version(path) - - @property - def user_log_dir(self) -> str: - """:return: log directory tied to the user, same as `user_state_dir` if not opinionated else ``log`` in it""" - path = self.user_state_dir - if self.opinion: - path = os.path.join(path, "log") # noqa: PTH118 - self._optionally_create_directory(path) - return path - - @property - def user_documents_dir(self) -> str: - """:return: documents directory tied to the user, e.g. ``~/Documents``""" - return _get_user_media_dir("XDG_DOCUMENTS_DIR", "~/Documents") - - @property - def user_downloads_dir(self) -> str: - """:return: downloads directory tied to the user, e.g. ``~/Downloads``""" - return _get_user_media_dir("XDG_DOWNLOAD_DIR", "~/Downloads") - - @property - def user_pictures_dir(self) -> str: - """:return: pictures directory tied to the user, e.g. ``~/Pictures``""" - return _get_user_media_dir("XDG_PICTURES_DIR", "~/Pictures") - - @property - def user_videos_dir(self) -> str: - """:return: videos directory tied to the user, e.g. ``~/Videos``""" - return _get_user_media_dir("XDG_VIDEOS_DIR", "~/Videos") - - @property - def user_music_dir(self) -> str: - """:return: music directory tied to the user, e.g. ``~/Music``""" - return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music") - - @property - def user_desktop_dir(self) -> str: - """:return: desktop directory tied to the user, e.g. ``~/Desktop``""" - return _get_user_media_dir("XDG_DESKTOP_DIR", "~/Desktop") - - @property - def user_runtime_dir(self) -> str: - """ - :return: runtime directory tied to the user, e.g. ``/run/user/$(id -u)/$appname/$version`` or - ``$XDG_RUNTIME_DIR/$appname/$version``. - - For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/user/$(id -u)/$appname/$version`` if - exists, otherwise ``/tmp/runtime-$(id -u)/$appname/$version``, if``$XDG_RUNTIME_DIR`` - is not set. - """ - path = os.environ.get("XDG_RUNTIME_DIR", "") - if not path.strip(): - if sys.platform.startswith(("freebsd", "openbsd", "netbsd")): - path = f"/var/run/user/{getuid()}" - if not Path(path).exists(): - path = f"/tmp/runtime-{getuid()}" # noqa: S108 - else: - path = f"/run/user/{getuid()}" - return self._append_app_name_and_version(path) - - @property - def site_runtime_dir(self) -> str: - """ - :return: runtime directory shared by users, e.g. ``/run/$appname/$version`` or \ - ``$XDG_RUNTIME_DIR/$appname/$version``. - - Note that this behaves almost exactly like `user_runtime_dir` if ``$XDG_RUNTIME_DIR`` is set, but will - fall back to paths associated to the root user instead of a regular logged-in user if it's not set. - - If you wish to ensure that a logged-in root user path is returned e.g. ``/run/user/0``, use `user_runtime_dir` - instead. - - For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/$appname/$version`` if ``$XDG_RUNTIME_DIR`` is not set. - """ - path = os.environ.get("XDG_RUNTIME_DIR", "") - if not path.strip(): - if sys.platform.startswith(("freebsd", "openbsd", "netbsd")): - path = "/var/run" - else: - path = "/run" - return self._append_app_name_and_version(path) - - @property - def site_data_path(self) -> Path: - """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" - return self._first_item_as_path_if_multipath(self.site_data_dir) - - @property - def site_config_path(self) -> Path: - """:return: config path shared by the users, returns the first item, even if ``multipath`` is set to ``True``""" - return self._first_item_as_path_if_multipath(self.site_config_dir) - - @property - def site_cache_path(self) -> Path: - """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" - return self._first_item_as_path_if_multipath(self.site_cache_dir) - - def iter_config_dirs(self) -> Iterator[str]: - """:yield: all user and site configuration directories.""" - yield self.user_config_dir - yield from self._site_config_dirs - - def iter_data_dirs(self) -> Iterator[str]: - """:yield: all user and site data directories.""" - yield self.user_data_dir - yield from self._site_data_dirs - - -def _get_user_media_dir(env_var: str, fallback_tilde_path: str) -> str: - media_dir = _get_user_dirs_folder(env_var) - if media_dir is None: - media_dir = os.environ.get(env_var, "").strip() - if not media_dir: - media_dir = os.path.expanduser(fallback_tilde_path) # noqa: PTH111 - - return media_dir - - -def _get_user_dirs_folder(key: str) -> str | None: - """ - Return directory from user-dirs.dirs config file. - - See https://freedesktop.org/wiki/Software/xdg-user-dirs/. - - """ - user_dirs_config_path = Path(Unix().user_config_dir) / "user-dirs.dirs" - if user_dirs_config_path.exists(): - parser = ConfigParser() - - with user_dirs_config_path.open() as stream: - # Add fake section header, so ConfigParser doesn't complain - parser.read_string(f"[top]\n{stream.read()}") - - if key not in parser["top"]: - return None - - path = parser["top"][key].strip('"') - # Handle relative home paths - return path.replace("$HOME", os.path.expanduser("~")) # noqa: PTH111 - - return None - - -__all__ = [ - "Unix", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/version.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/version.py deleted file mode 100644 index fcf6f03a1..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/version.py +++ /dev/null @@ -1,34 +0,0 @@ -# file generated by setuptools-scm -# don't change, don't track in version control - -__all__ = [ - "__version__", - "__version_tuple__", - "version", - "version_tuple", - "__commit_id__", - "commit_id", -] - -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Tuple - from typing import Union - - VERSION_TUPLE = Tuple[Union[int, str], ...] - COMMIT_ID = Union[str, None] -else: - VERSION_TUPLE = object - COMMIT_ID = object - -version: str -__version__: str -__version_tuple__: VERSION_TUPLE -version_tuple: VERSION_TUPLE -commit_id: COMMIT_ID -__commit_id__: COMMIT_ID - -__version__ = version = '4.5.1' -__version_tuple__ = version_tuple = (4, 5, 1) - -__commit_id__ = commit_id = None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/windows.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/windows.py deleted file mode 100644 index 8d523a9c6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/platformdirs/windows.py +++ /dev/null @@ -1,278 +0,0 @@ -"""Windows.""" - -from __future__ import annotations - -import os -import sys -from functools import lru_cache -from typing import TYPE_CHECKING - -from .api import PlatformDirsABC - -if TYPE_CHECKING: - from collections.abc import Callable - - -class Windows(PlatformDirsABC): - """ - `MSDN on where to store app data files <https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid>`_. - - Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, `appauthor - <platformdirs.api.PlatformDirsABC.appauthor>`, `version <platformdirs.api.PlatformDirsABC.version>`, `roaming - <platformdirs.api.PlatformDirsABC.roaming>`, `opinion <platformdirs.api.PlatformDirsABC.opinion>`, `ensure_exists - <platformdirs.api.PlatformDirsABC.ensure_exists>`. - - """ - - @property - def user_data_dir(self) -> str: - """ - :return: data directory tied to the user, e.g. - ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname`` (not roaming) or - ``%USERPROFILE%\\AppData\\Roaming\\$appauthor\\$appname`` (roaming) - """ - const = "CSIDL_APPDATA" if self.roaming else "CSIDL_LOCAL_APPDATA" - path = os.path.normpath(get_win_folder(const)) - return self._append_parts(path) - - def _append_parts(self, path: str, *, opinion_value: str | None = None) -> str: - params = [] - if self.appname: - if self.appauthor is not False: - author = self.appauthor or self.appname - params.append(author) - params.append(self.appname) - if opinion_value is not None and self.opinion: - params.append(opinion_value) - if self.version: - params.append(self.version) - path = os.path.join(path, *params) # noqa: PTH118 - self._optionally_create_directory(path) - return path - - @property - def site_data_dir(self) -> str: - """:return: data directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname``""" - path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA")) - return self._append_parts(path) - - @property - def user_config_dir(self) -> str: - """:return: config directory tied to the user, same as `user_data_dir`""" - return self.user_data_dir - - @property - def site_config_dir(self) -> str: - """:return: config directory shared by the users, same as `site_data_dir`""" - return self.site_data_dir - - @property - def user_cache_dir(self) -> str: - """ - :return: cache directory tied to the user (if opinionated with ``Cache`` folder within ``$appname``) e.g. - ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname\\Cache\\$version`` - """ - path = os.path.normpath(get_win_folder("CSIDL_LOCAL_APPDATA")) - return self._append_parts(path, opinion_value="Cache") - - @property - def site_cache_dir(self) -> str: - """:return: cache directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname\\Cache\\$version``""" - path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA")) - return self._append_parts(path, opinion_value="Cache") - - @property - def user_state_dir(self) -> str: - """:return: state directory tied to the user, same as `user_data_dir`""" - return self.user_data_dir - - @property - def user_log_dir(self) -> str: - """:return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in it""" - path = self.user_data_dir - if self.opinion: - path = os.path.join(path, "Logs") # noqa: PTH118 - self._optionally_create_directory(path) - return path - - @property - def user_documents_dir(self) -> str: - """:return: documents directory tied to the user e.g. ``%USERPROFILE%\\Documents``""" - return os.path.normpath(get_win_folder("CSIDL_PERSONAL")) - - @property - def user_downloads_dir(self) -> str: - """:return: downloads directory tied to the user e.g. ``%USERPROFILE%\\Downloads``""" - return os.path.normpath(get_win_folder("CSIDL_DOWNLOADS")) - - @property - def user_pictures_dir(self) -> str: - """:return: pictures directory tied to the user e.g. ``%USERPROFILE%\\Pictures``""" - return os.path.normpath(get_win_folder("CSIDL_MYPICTURES")) - - @property - def user_videos_dir(self) -> str: - """:return: videos directory tied to the user e.g. ``%USERPROFILE%\\Videos``""" - return os.path.normpath(get_win_folder("CSIDL_MYVIDEO")) - - @property - def user_music_dir(self) -> str: - """:return: music directory tied to the user e.g. ``%USERPROFILE%\\Music``""" - return os.path.normpath(get_win_folder("CSIDL_MYMUSIC")) - - @property - def user_desktop_dir(self) -> str: - """:return: desktop directory tied to the user, e.g. ``%USERPROFILE%\\Desktop``""" - return os.path.normpath(get_win_folder("CSIDL_DESKTOPDIRECTORY")) - - @property - def user_runtime_dir(self) -> str: - """ - :return: runtime directory tied to the user, e.g. - ``%USERPROFILE%\\AppData\\Local\\Temp\\$appauthor\\$appname`` - """ - path = os.path.normpath(os.path.join(get_win_folder("CSIDL_LOCAL_APPDATA"), "Temp")) # noqa: PTH118 - return self._append_parts(path) - - @property - def site_runtime_dir(self) -> str: - """:return: runtime directory shared by users, same as `user_runtime_dir`""" - return self.user_runtime_dir - - -def get_win_folder_from_env_vars(csidl_name: str) -> str: - """Get folder from environment variables.""" - result = get_win_folder_if_csidl_name_not_env_var(csidl_name) - if result is not None: - return result - - env_var_name = { - "CSIDL_APPDATA": "APPDATA", - "CSIDL_COMMON_APPDATA": "ALLUSERSPROFILE", - "CSIDL_LOCAL_APPDATA": "LOCALAPPDATA", - }.get(csidl_name) - if env_var_name is None: - msg = f"Unknown CSIDL name: {csidl_name}" - raise ValueError(msg) - result = os.environ.get(env_var_name) - if result is None: - msg = f"Unset environment variable: {env_var_name}" - raise ValueError(msg) - return result - - -def get_win_folder_if_csidl_name_not_env_var(csidl_name: str) -> str | None: - """Get a folder for a CSIDL name that does not exist as an environment variable.""" - if csidl_name == "CSIDL_PERSONAL": - return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Documents") # noqa: PTH118 - - if csidl_name == "CSIDL_DOWNLOADS": - return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Downloads") # noqa: PTH118 - - if csidl_name == "CSIDL_MYPICTURES": - return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Pictures") # noqa: PTH118 - - if csidl_name == "CSIDL_MYVIDEO": - return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Videos") # noqa: PTH118 - - if csidl_name == "CSIDL_MYMUSIC": - return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Music") # noqa: PTH118 - return None - - -def get_win_folder_from_registry(csidl_name: str) -> str: - """ - Get folder from the registry. - - This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer - for all CSIDL_* names. - - """ - machine_names = { - "CSIDL_COMMON_APPDATA", - } - shell_folder_name = { - "CSIDL_APPDATA": "AppData", - "CSIDL_COMMON_APPDATA": "Common AppData", - "CSIDL_LOCAL_APPDATA": "Local AppData", - "CSIDL_PERSONAL": "Personal", - "CSIDL_DOWNLOADS": "{374DE290-123F-4565-9164-39C4925E467B}", - "CSIDL_MYPICTURES": "My Pictures", - "CSIDL_MYVIDEO": "My Video", - "CSIDL_MYMUSIC": "My Music", - }.get(csidl_name) - if shell_folder_name is None: - msg = f"Unknown CSIDL name: {csidl_name}" - raise ValueError(msg) - if sys.platform != "win32": # only needed for mypy type checker to know that this code runs only on Windows - raise NotImplementedError - import winreg # noqa: PLC0415 - - # Use HKEY_LOCAL_MACHINE for system-wide folders, HKEY_CURRENT_USER for user-specific folders - hkey = winreg.HKEY_LOCAL_MACHINE if csidl_name in machine_names else winreg.HKEY_CURRENT_USER - - key = winreg.OpenKey(hkey, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") - directory, _ = winreg.QueryValueEx(key, shell_folder_name) - return str(directory) - - -def get_win_folder_via_ctypes(csidl_name: str) -> str: - """Get folder with ctypes.""" - # There is no 'CSIDL_DOWNLOADS'. - # Use 'CSIDL_PROFILE' (40) and append the default folder 'Downloads' instead. - # https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid - - import ctypes # noqa: PLC0415 - - csidl_const = { - "CSIDL_APPDATA": 26, - "CSIDL_COMMON_APPDATA": 35, - "CSIDL_LOCAL_APPDATA": 28, - "CSIDL_PERSONAL": 5, - "CSIDL_MYPICTURES": 39, - "CSIDL_MYVIDEO": 14, - "CSIDL_MYMUSIC": 13, - "CSIDL_DOWNLOADS": 40, - "CSIDL_DESKTOPDIRECTORY": 16, - }.get(csidl_name) - if csidl_const is None: - msg = f"Unknown CSIDL name: {csidl_name}" - raise ValueError(msg) - - buf = ctypes.create_unicode_buffer(1024) - windll = getattr(ctypes, "windll") # noqa: B009 # using getattr to avoid false positive with mypy type checker - windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) - - # Downgrade to short path name if it has high-bit chars. - if any(ord(c) > 255 for c in buf): # noqa: PLR2004 - buf2 = ctypes.create_unicode_buffer(1024) - if windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): - buf = buf2 - - if csidl_name == "CSIDL_DOWNLOADS": - return os.path.join(buf.value, "Downloads") # noqa: PTH118 - - return buf.value - - -def _pick_get_win_folder() -> Callable[[str], str]: - try: - import ctypes # noqa: PLC0415 - except ImportError: - pass - else: - if hasattr(ctypes, "windll"): - return get_win_folder_via_ctypes - try: - import winreg # noqa: PLC0415, F401 - except ImportError: - return get_win_folder_from_env_vars - else: - return get_win_folder_from_registry - - -get_win_folder = lru_cache(maxsize=None)(_pick_get_win_folder()) - -__all__ = [ - "Windows", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/LICENSE deleted file mode 100644 index 446a1a805..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2006-2022 by the respective authors (see AUTHORS file). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__init__.py deleted file mode 100644 index cb229c985..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -""" - Pygments - ~~~~~~~~ - - Pygments is a syntax highlighting package written in Python. - - It is a generic syntax highlighter for general use in all kinds of software - such as forum systems, wikis or other applications that need to prettify - source code. Highlights are: - - * a wide range of common languages and markup formats is supported - * special attention is paid to details, increasing quality by a fair amount - * support for new languages and formats are added easily - * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image - formats that PIL supports, and ANSI sequences - * it is usable as a command-line tool and as a library - * ... and it highlights even Brainfuck! - - The `Pygments master branch`_ is installable with ``easy_install Pygments==dev``. - - .. _Pygments master branch: - https://github.com/pygments/pygments/archive/master.zip#egg=Pygments-dev - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" -from io import StringIO, BytesIO - -__version__ = '2.19.2' -__docformat__ = 'restructuredtext' - -__all__ = ['lex', 'format', 'highlight'] - - -def lex(code, lexer): - """ - Lex `code` with the `lexer` (must be a `Lexer` instance) - and return an iterable of tokens. Currently, this only calls - `lexer.get_tokens()`. - """ - try: - return lexer.get_tokens(code) - except TypeError: - # Heuristic to catch a common mistake. - from pip._vendor.pygments.lexer import RegexLexer - if isinstance(lexer, type) and issubclass(lexer, RegexLexer): - raise TypeError('lex() argument must be a lexer instance, ' - 'not a class') - raise - - -def format(tokens, formatter, outfile=None): # pylint: disable=redefined-builtin - """ - Format ``tokens`` (an iterable of tokens) with the formatter ``formatter`` - (a `Formatter` instance). - - If ``outfile`` is given and a valid file object (an object with a - ``write`` method), the result will be written to it, otherwise it - is returned as a string. - """ - try: - if not outfile: - realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO() - formatter.format(tokens, realoutfile) - return realoutfile.getvalue() - else: - formatter.format(tokens, outfile) - except TypeError: - # Heuristic to catch a common mistake. - from pip._vendor.pygments.formatter import Formatter - if isinstance(formatter, type) and issubclass(formatter, Formatter): - raise TypeError('format() argument must be a formatter instance, ' - 'not a class') - raise - - -def highlight(code, lexer, formatter, outfile=None): - """ - This is the most high-level highlighting function. It combines `lex` and - `format` in one function. - """ - return format(lex(code, lexer), formatter, outfile) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__main__.py deleted file mode 100644 index a2e612f51..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__main__.py +++ /dev/null @@ -1,17 +0,0 @@ -""" - pygments.__main__ - ~~~~~~~~~~~~~~~~~ - - Main entry point for ``python -m pygments``. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import sys -from pip._vendor.pygments.cmdline import main - -try: - sys.exit(main(sys.argv)) -except KeyboardInterrupt: - sys.exit(1) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 9679759fdfcded74724c3526c3095053d52a7a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3503 zcmaJ@OKcm*8J^`skEI@tWIK&wTVo5B&4{9GRgGgg4j?~L307=@Qsl%SN-lRt<W|ew z&CIMN>QD$d6#)taXo2=n6g~uK3-sVzf?k96TEMn~%2*hv(V{?)Zf&$hPyJ?>OUAL= z1vDDY<DdWk=lj0-r-lY~g73lSf3ts?BjhjYNAjiGou^mO*(D_+$@fS}ThbO&GPRhN z>2Xp@$xJCNvqe(syP?URQsz}6drSSLo>z&Z$v*UYqh5b0J3;cg@rN`a`bw+bWUdtY z589vJ8KSnJ1{Ez=8r!sC*BcK0r0v$JZ<w1#ozX3BOUYbnyL6=`8=hO#^(7hat238z z+k9a^<8;I0G@3RX8VIJg8;(OaZPyai+n~bRkXr_4x(Lh$HH6v_G+{|d))WQ0WpBbY z81ZBS<_zC=Y}1go=L#wthNLcI7L^|LIg`@fXz9WWxXGyLS*%DGlTZ*IXY;!L2EyF3 zEk?QFA}V-bdd;TiQU|{S1d4^OMVkiS41DEG(~v?%DFWa3xMUVg2%niY0y0!alrL(5 zZ`hF|7L$hUz;)X-IWvSx;zxnu*s?`yEgZjL*a)QQ1+G-KV!KhIT(<QMKN1JvJT)u} zp(=|`D~iJnnl<DEF?fOW1DUv6P{|PR%xTfZwfB|_blF&A9~5Y5?cD-hUH@(&x&yn3 zaCMsOiqpBWw4Atv5L7A_uCFdp!9EI@Ychd@?daA6VbmNrrEsHCh^5nx?K0ejhs<DO zH09VeZgAyqu~>|TvAqK@LD_9!>Jm3>cOx)2kL&tcgVAb&RNMn_z$t9FW}{kBdA404 z0io#hEn7BdwThgyD(!KgGe-Hvix#_GtpcVvxRQ)MZ*d;s(}tA3n4g)c!&p!&BA6M! zZKK;UxY@98vzgeT;*RZ4uzLMsVs;v5>H56s`7N%PGfyukT{?T_%$w7*XJ)^nt{*7w zct|BPng!&R(S`Td7H^bRi~2m^&0N9e>7~^x@!ay#<*V0MuSN)IgR7|LQ(@n#<N(*w zjj;DpOER%^W2a}fc=mj8Havj)mpm|Kz?mi4wlot_QQDHlUz(82(=Q@{d7Z3lE1H^k z{#z$=?a>KBNx5U8hgcT~IYP!`S%M__sc};7Pj;_q<w)Gr@45D_Q|(FXsM=W`OxAul z^1_ONXa)R>zfvmkqM<d2O)jL55?jlscYdTVvu#>cJg<V%0D{VG)nVI=SLx|yASA5; zptOp0YA6B-Fbp{aIw2PUhZupoKv;w(5J`HQ$bOMt4mghpRDe|_KrXms0(L@=Pbk)z zti-EN=K-?37V0HdXWP+XJ9BX3bRL>h50vE6t~Zf?9bXF6^`v5uV+fJ&4fU?suz#)P zv#XqYJRI|FzgPiPERPoxa26v|ya#y-bsIVZULd?MBe747h@ckRO@|qkrZC&xAyk4V zCu#V}<@xgaf^ktcEXL2CKYymY<?+q3&%N(6Q;M?bc!5<j1e>;9TcU~R$N2Qwa{Lf{ z`|Mn0uCo2so0T=z^c_R8ifsDjWxG}u$nA9d1rcQgG1CsBORNfrYs*RnVTEb<#}B}< z3H*t5G`r-<Kwoy~;qbxz;qm*!<99N9!zb_co&5Ks+`(t0Cp+}lzVnZAhdyOLU)#@} zc#u2s+0NaQ`=_ovICbUG$m>stcJz&>L>rw#Z*b~y-{6x$?D>yS`26_5DEaY1cHvv; z>!wOZ@^#qZ0{y!L>_{c(t*=Jd>~LjWD`~)Id-nw`S!a#L{3v(q&b6&~*VOUsD-M;_ zdC`}w@zdaAZ!+5be>0tMWt^<1S2}#_u1G9QC`P}`LaJ+_l!{p0Vd`_NPA~N=_WBuk z_ex?NtR6}FiIq;gF{=+H^B*33VMWYp#2kO6%u89FH8M!9{%-W_LfB)1RYB*M@-*M& zef&_Wx1w6@^s80<H25Ez!`#<2KvgdrSc{i)!*&>s0L$x8cqIvVyXbAa*cMfD)T=2b zL_V~;k=z)1wW_KjwYkYq5?Ohr7AP&42pkFDQ0PE`lFA81iY*IqA+u$xT1bMVZ6U(T z9=(^4ZD@K?5Bu=kdKUWEAuau#5Oyxa(Y;(;I+6bmfysrv5Ezs#oGWN@rOshbyesU( z6rv6o?^DCaUaC2r6F4wVxPlK?x5{zBB%cj?;wuaLI}5|!c8<dw${~nJl<;V~P}rY@ z3Q<0+Y$yOljRLaxDH`y9WH3AQr{Tko#*W{~|LWFn5AKb<vp=?cZ*2MZ=YDs7f9%%1 zv0GoQe6Y82>xb7K4jkGaIC6jB$j{cl8aVrK^w|FBsr#d+_D1vf2J(-)lYbnT{+fWi ztpvpW?BITG@<DF$H}iMx{i$mYrmp=z0XYueKJHzZA)kz*`Nb<}?oOfk@`&nwIkS+x zG?z9rSe1NArjhf^(*ioXq}&mau1MU}658CHNJItIyS8JYDpHk?DtQ@gdU)AX2{rAY zdUCqel&Um00@qX(X_2BhM=4W7NhYFKv8sTrx5=THfJcpW*Q26{^RM(bpW*6>=0mD^ zO*La^go+2(H5uJj*xxDRIQUQAQ!5Um*(J|(GBEO!iBGM)krQ{8_HyU$WzIdt49TY> zd5;fLoATQAydL&eDwbzfDq+g@B1}f;409E{7F-}2ObteBVpQQLw%|3cRK8*F*MuK~ z+1SCpx0{|7IP4vM5@RaiVj9hpw5Dl)PrasP{xwIm<Bx|9@8%vJII%nUXZ`eU?>~Bm Tw4rAw4r@dIoXu))MdtnsSLDM6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index 8ad3dd1cdb72806616f0d66be9e7102e9eb6d6b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmZ`%&ubGw6rRbhO<A?AAgI`q(Ow!fn>5B^qX;zy5?X6a(%UAJ&F+|t-CxX1YuAH_ zm-+)lPyPd5JnBCn{tF(YEO_$bu@VpBsgszsBKTn5d$Vu8_kH_jE=(QQfV5BVzEKkb z@O8L}?Z`M8yphQxPzM6EK^<11fHEekiHahW6gUf7ur?Wk4&yn{QsjcQ5yRp4VOEe_ zf5(*UI}Z?OO-um$6acdz_1~^-7^72QZiJ)Ysxk*COe+sQXhGO>i6^*@v1?KfW9{L; zrfIii1<6w^M1fB|f$sVYbvi*P`o4!UE{eN!I=ZG6Ek6hu?e#?wmEsiTbGfBVK9|3Y zx*-yMf@))CB#7x=M4S+`veB&Et~Ye8=unGzoD|WG#?9ZgwQ8xn-YAc#Z6ZwSa9vwZ z!$=+KPA8)z#<p)^94S2H(QH5i9d8rQ_L&~b(=FF_s7F{rPBT);4i%AVvfg%dVwHql z-(+^x6NIs?K)eNm;mD(BrJ}LH3FC%o6Sla#oHOqGY|{vse~(y#8<yj5*<F*94E3mx zjtkRq2+J%Qwb6hsEf#PA?_62JP2vWQDF_yBV64%u!Kombz_d2a9^r<RoE=Nf#*(w~ zy~v-4Ca<}^z2%VW?3k1`d=$Ja-M#`L{GOPE>fj`RN56o~zN)~PJvF&od0ctgd^!Jm t;nl+P_GfkW=U(#k4*>rZpWNA99l~dR@oCxV#rZsVe`aM``8WloKLB?1&A9*o diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-314.pyc deleted file mode 100644 index 9b80814d6c67577d3c20ba042edafc73d0ae44a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2855 zcmbtV%Wo4$7@xIw{a8C8iSr<Y!a{J0^K=puNI;<QNL%GWv_Mn|C(ha)k|pb1cXv$U zAXQE!)S#-u2P|2YD&<h5a%y|&-vL!Z-Bk}ry_8!ZJ-7Y#VdA)y6m_JX`QGz=-^~7| ztG0$kFn;>sckxFTLcbYIc`!Dy^A&|q4)KT}o+4BqA`ad$3ttBq%u>9wyX;}`4xYB< zOqJYa%iUFSk1h9B$yr<OtCIU|c}<nP)|MZrlGhpXUc|RtrHB*OgRs(bM+h_PI)-MQ zvvkB^6;Ox9&LOl69B~s5RMs%dbh~zo+Z%V*ZSU7GcMj}!&CpwXtXi2ls=H>_fiUCe z5%QuVXw*IG8D*e{uI@v-df@Agz4$;2B3`}`W|nV)*~d4xqfqPWcWgSlkis(2dJ~GQ zDH3Kstr{#lrl=`_a0x|HRGfs>G~|>FNoPne%Z?<JbXFA?7Rd;AsZ4SM;qXw;KzQI3 z7teBJ5p&b_P8`8Ps+-d==0<N^|L`h*t(P5<!~~W#Ji=YPcG=QRe01r`)U_+zEk)&$ zm<Xbz^|GsuwwpRy^$rf7jSQa+hf_MEVht1B8SYQ%bX<{=Kn{TTmLST8crc}VG$P1J zNEg^hO7~{uBvvI+#=xHf(>TyeKo5bba>rIN%ZnnxtInX9O6)ciA>+iI@a-IiDTku3 zbv&x<d^>tfsfOKSN@o&E5^Imqj$y0czcdoPp<z{v3Xn$s@NhV~tf))Tw5r_338F<4 zl9EZr1r7IzvPfWp^d$+aJ^j(?ELl|K!Tv}r5?eVl6uXX7X-ObBMpEhMgcy%%kaJI3 zNGu5pSc|5`bYJWahT7G>@;Ud}$Jd+A>OQk~G4o*6gOJ=w_%uIEIrOWqF5mLy`6qO% z+6;n(eba%o>Nk5Z1x#fRX7==8hN`^V|JJEWn|7o&Ku9$JQ^=uv&CFs;IIGhHuMo{h zqN77?fkpS2N^upd#z`1av^JQm%v-m7ZN=o4@Ax-2zCHbDZp%0LgdY57Av8EZA@t5k zh@698J?)qQsH!|j;C;M<LK(+d$C-~2N_r4FjCiL>2Mv1CaTHA+n{iA7*j10{>$dT9 zWz>jmdlb!}Ig0mDC=Jwq+L?Lho%cY(|Jd36&O3Ydt$ClW?Y&SHxxdkGhT6}f;yk=> z&W&fM%g<NEVa_<pkpVXStKXL~aem&om-F-7vPc#=!NN!m(54SiOH)#q69`eoc!pqY zWQ1io80Nh-2pF;ft&$}&m7S)x(^ML0R-v-~)0nAx4PliAU8ZlB<!fM?C@<LlBU3Mo z8#gtjQ(da@fap}GYSgJyG1UjFiB+m`TVMPIBjnUwLOKo5p*9*;^le3yK}Z|rsK$S$ zy8t{g644AG=;+|ApOO`1O$5Y-_d<Oi6k+%@9i|-GZa}qlxv`Slw|?>7N<LC_6rK6u zXYTe5=g;o;lBf1T&Hb8(xcEUq-t+`Z2Lk!ge0+U%o!-}DtdQFDoOl<H@vY{Qo1Rdm z3(bB$xi<MQSfmSGoAi;A#ph3K(k(U(I(MOWlRj4R)jT+T|8#!niwjTaLnf+Bg*?VP z0>G;~;f>Up1r=jicV)38Da-IMNg1rWQ-I1c5p+6{6=a=WP=ze``Qql=X?c4s#)x6d ztw?@LZpUNGE)ccGqRX*um9c|b2aON;b$2Y5R1&e6?!;QcI!|9xP?xL=rRjdjc)QCS zwW2#$#k5WvCOTv4%*VmRS@TrYCJ1cSZA0<7l#<Ly_`G@n6vjo<{)B1UNm0~GhlirK z8<D#<=X~yAb4<x!n`3hEHE*fDF@JZf{y1<8Yqiho0(o5U0ds4u#!zJnZI-6g*isA@ z#(}y06xElS4i--pZUVRT6g9lX@D)uR=*;<GsXLSNZ@UoV&QZSvn)7!zCY}ZQ*T!>~ z*Mp^orXsUJeeEsu<*uxsSQ{?|nu|>v$2UHC)UnkX+6sg~99)|y(ad`Ny|K?mU%FA_ mz&48*?|Lv_|Gd6Af2Z)CmFFuLMICzOp{U3oo@T1e?9bn_eS*pW diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-314.pyc deleted file mode 100644 index 3f8978a3752b6b23134a074dac54ff3a5c1f1f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3353 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-314.pyc deleted file mode 100644 index 8d18fee8f2614d12f16df748b0f86d46cf983f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4670 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-314.pyc deleted file mode 100644 index 2a0bdaf1a02fa85ea93b84f36aa37f3435775331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39705 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-314.pyc deleted file mode 100644 index 031f5f4b4b2a1234620be83f7cd7f7deb681218c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmZux%}?A$6rZv8!*~~1pnP;in`tR@O<?&5iNY!Y5kl3p5kZEyQev>YyR(al*LFSL zz@jSJo(iNYs3$IwIJSo#`Y-e^phaqsg+!%ZnnNWhRj=*XyM~l@B)|8@?>BFr-|szN zZEEBJT|a&QoAx^kz^~pWSfRRcmZe4&h`<3$K!o?814Skc9cB^EMFQ}Jeg}vw^>7z& z0&9$^Sx#6Cbpj_MM#OL@(4i9*VGj_Z>p$>TrC7p-L((NPk9Ez!{Iko8=cf?SN|ugM z078~(6KtbYRwX!(Oaob!z$c`6K9e)8imerwoeY`|Of)(?d}DBQc=S5TR*<ud(Oms< z<Y2WlfC$ED>fyqN55)O2pV74(HVDq3JM(vIzWev4XJ+STP{FiO9y_Y0lQci;b``Os z6f_+>6$>i`+bk*Ba-o3jb<88WQj;0<R70OpQKAyBA;Ew5_}1--#YrUR`;jn-GCnrl z@4E^P1qLChNh(H7I;wa2HcFw#OBtCgUPS_*gF(HirkwguokRKDHRpLQEeVX(&stD| z@7KNgRsgzz1n0t+;B>nLgA+ZpGbo45D=)&Vz`C)30L8{`gkaUqExX~OZI&&8aiQ+Q z67l+>54l^@8TldQkH~5s+au%S!}6+WKanllT){bq$T{6C=RIx*HA8c#Adaf**d82_ z=PJ&!X<Qo_Q^u6Fn>UmNOglq$u;P>~`M#EwiRR!zOU*q|i<rokW(_G%v5`0Jp`h1> zf=ts^#qIbndtMvbF`8-zeMpLmDmdcWUUJDFx#aH10rysQ>Nv_BHYc`MH&=H)eZIcW zy?M$4uHlSgL9X8Qo(;Sj(#nU<60}ZLAc48p+43O(jMcTpNQ}rxP@r`l@aMGV5SbBn zAXx`dl>i^moyE%MoJwrKixrYW0h2}Q?*<=t0U(9S%oWfB8o=8?KIc`Ub1gDs^(Zvz zD2*DH!g4gYOJah!H)&VY<Fx~Daq}m=uV)sZ|0j##e`n!$54(PspU<g=KaI7a@uw>w zh#=L-BO5zq+qjqqtw1LpBaKjO*~rrweDyb7LdfNbrE8AIAMpuv!?tP^vCHb%5F##1 zuW%bm>YCz1+;B~WJms?V8W(EB`@{A1d4p?v6xbe{zUZa~c}7JQoN%Bqu|2yvdl2ug z&KxG%ce1;}ZgOwxMfYBIza#ZBA?zoFjnGlkdwUB9P5m3}aja?c+F@JA)<>sN(9-`W z2b$V;#&@%O@BZA_y8#bl@h{2F_2=tfO&qnRzG?ri>!5XXWBRzcb(0)+CcoxS8$eUv zX&l58cATalz*ioN0_R2*C2!^w#bxN&(G8swx{2n@l0|<>Zd95P?>v~Fu|2q76aQPj z1%4R+3tjFOt#?_+6ZRDf^7@lZQgOmU2u~RfhR)sqkpCstyU+JkqbCv2+_Js0wQ>U3 fWQgt}+!v2Ne{>dQn_H@}KjJJ*{uOVAwLJd;3nPfY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-314.pyc deleted file mode 100644 index 286e5c3fe532776cc11352d2ba3d28d22eabb975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2603 zcmd5;%}*Og6rZ&Ln}zUM4E+k5pq4s-F@%I-NGi&Qf=U4`4l1h4YOx2i&3bn=GZ2hK zgK`4(kRH=hbLE)-1O-IVDu+tFv^NUvfm`3qu8sLf+G9qVw{K_OzM1!XzxV8pnrkwG z@#^ItMmmJh@BF1O0={xG3d$x@5km_|l_sPI0TyUQYJdgRAS+YLSh-rxD%6T*#6oHa zWLOP@tW+yO%Bl>qO08-`(Q4fSr?QjJ=CH+R%rRH8h9&=Se#r8SZ=iSvieWKKmh?1^ z$+C&pF!48NA|cBPjBkrB#Wwv;tmf?%;+fx5xSq2!D<)3NgF4B*$nug+aykR&Z+2KT zDREj{Q#{ATcj0@y;8a|qJBHWTf7r>xlwVLu>y|<>?kv7!@RDI+1w3Gj8n#6hI7(s5 zm_NOn%a0AVtmuk~^^9R<6>92q8E~R`i|K1`j*GIqiA!P<@BTf7E@GMGR)CXXo`G~3 zbZ`3%bl=<uM||rcBUD+I6KUJY6C=CK63R$HReIy`yIsBU-aE=-UIba>0mFK(lS88n zKTJNDR%c^!!ZgwV3Qj0r&W?I}lM^FjQ?p|NqYP%cVbYi!mE39|8_8>q4LqXjwHLUu z-dJ2Hf?8_j0kvLtW+kGaX{k^s@GOHFgn9B5#3o7=_xj+S4@XMzeKF=F74`Ym)$Xrl z8WH*k%}F!m{zA!P4yvx-_t?g5pi(c6ITS1Ugh~sz6%?B|%^>{pEU{OdXc^&0x}jyA z0_6$eS9XJ0%)nR{CYq(^uv;N?O1br?in}$ENIj&O(3GCRq-S6to_cJPM=6Kc--Cae zN}KjdW>KfO%diXvf->DSG3n|_&E(m#ZQbta)B3cv&+lqUoO4W_VU6XS)TFVPq6WiV zj-Gy`XE9AVhSROBVk={l?gHA~UJHmhdAA;niB_6RQU!PHfJuiyY@*lK-v4o7bNqFv zW^47QwO>QZtB`V3f$Ad9HnuljB(^s8YGb?M*io1-t#7YCzx85quQs|Hj-J5xD9uG- z@NBigJXrv76SbbpYRb<ZLVbQ->d<%-WEst&t1?(%!5Z2uZ$)1<BUFj5Lq}~xcY=nr zBTYqvA{MuPa_pNiRU4a1s`J{+^u$!sEi-LBvm?2(h}<JFKU5*Sb-NAFAu^hWlIC?k z0$f7<FzHPYe{x_V?fah%97GaZ@?lNOGke?Kt7+X2x1I!1^WZ7vRCwCaC7lC+FA4xw zLHS<*-0%V5UtSmh%N3+8z;Zj_0|V!k0z+!R4G@>7*=-u1R=*xjCNILnNlWU$g4Bbc zCD24lp*gE<0`MbF7|N+rgy-Ht<bDyJ=j*>b`T5CSYkapRz8{WroW3|c5jgb^yxTa{ z&nD+5$4V(gA`s`*5S?R>*XhWIU_E>Zo^$NE0-nKB(gGj7(-dkLpP0PBpSNJsc#b|^ z(<j#<#_>zwBn~2jZ{yC82hLQq+6`%1#!hRR+hF7zn=sQ@jOF0RDx))9bZAlw?g=y# zL_Xl+V=j0Fh_V*s6)6%|*+Hb5Z;4hA9`gR-+$X&5c_C1q$D^PmNq+@yNM-+wN=WMb r?Y&QSQT<^{*Dh*0^z^3oUDR+~Q7PRzZV5=ru^f<kg!r3l;)s6%2<37+ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-314.pyc deleted file mode 100644 index cd4c3e92d423340f3acf446a8dfd0dd88ee58a39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4414 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-314.pyc deleted file mode 100644 index eea150e964f507bab1322fda201b6f84be636cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4808 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 KjWvyW#pqung+eX> diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-314.pyc deleted file mode 100644 index 81ae85586cbbfd8f94599e684b39bb17642ea069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12777 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-314.pyc deleted file mode 100644 index 5de9b3c52c5cea415329260cb350f46fd2a5acb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7335 zcmb_BTW}LucDJQ&y=_UBWLvhdCCeBL#s*{aFw8Ip!wfIuy?DedW2}+owyi;yM0b0@ z-pZD1KeFCzQY&hq(CjXSXKRx&TQwDus!dI*@{zB6rZi)*hz?atDnFU8Xn?9o{&LQ3 zwcG+{laDmzqjS&eo^$)$bI)z|Ha0j2JYWCKzo+~`LjDa0`eUggFT)%mtArATOcTnT z<=!(XruWQ>xswbKYNF;Dj`CChXrWesHfjgxpiY1;+5oVTx&eBq7hn_h0rb-Vz-HP4 zu$2Y@w$XNgA-V%#2kitHrjZ#=;bD$0YJzc;@&LQ31>jC<1K2|y0C!Orz}>VFU@!Fm z+(VlH?xlW!eY6?iKH3VfpSA%Updo<!X$QaqGz@bH*DMiojUR$I@lmV+5+QW3h0uf7 zY(wTM)y}9xKpnnjr-u&fbO${gCA~*h)*ZR!`9(3K$o;aioE9BFta}`elL<MM3^QIh zJM*!aRQer`kz_WvET!fbl#%c$9Ssle-+yS|;Qqnk@XT^pSrEe$RnuWbOf2?=Wl;=| zzCZciC3?BvF_KOt#f&VDgil@`(|8xoo;p2#`E+<LD}`r8C6P+Y{f=IfDokdtiy5`? z^5p3F*eD%~Pkw*m^kvna$jGUgbRv0Owd`k)YDJPH&Z?Hfb4bx-<|Pr-K?aGc17()Q zbUJ$z#SYJj`&FA}YDv^A9iCI2NLftG!^$KyYd~aT$>l`Vm`<6O63ePZ9L9gDo0(#3 zQ}u0_J!-=igLycod1#QY`H3vmvn8*4I|mPN8n-wzY2D|!In}#GuX&CNz%r=l{-ZH% zeQqwK6o?!Nb8{<>C^LiWy5eH^Y(lyYF0VA!M$A)PQp(=UtTfbk=+cUl4RcFUE-kLu z*#L4NT{V%$%)wPNsIj4qN#b0Z7ur0UF>Mj5#@Hm9cXLb01v!<dnpT#i8%x=gELJVB z*pk|2&|r1Hke6dHPC$*gMidU}glT$2F*lPeRErj(@YDoQpk{y;$^*1g0icaq0NSZl zam0w?q&C<^cGZ3v_s&Jg*(7h6%L+JbINQrXpstds8f&7u4Qm8Iu5eePLsjh@KUK5i zA!oV?$q82`C-mZGP&*3Y%!9QMIUgWU?qd9QQZb<ibj|~?lMWVO&N4ubaW|AqZJzBl zJ>)cZ=I>yBTg*1$G)!DYhpN9!?mqML%2A-rYCgFLiCHHa-qec;6OC_DscFchQFHd~ z{n_3YCA!`p^D*a$*>_bZofUA+V!|A(X^8X_>c7P0>=y^9Ip$#ghc*6`NB8m^H`~l; z)-76Jo6d!`=Zzz<Wslikr(L<Hy@~(-*dR-u!s<I?PHH~#LEZX0slX^U^nRL)*{3;{ z4d6RSTMRr><LzcVtAU4lCZ>0Y@oWYj>S??&#<LrEsApz+l<^z}9_nelj~LHsTtVt$ zl91K#p5UkhUmJ{k{on%|JhT5JW~0$4L)~xK@EG|98`=)}4YT1j_=x^nnEk(Hyr$Q9 zR>u2B#`C?#voYR31CRM{n2j*bzi9jMG<SZzhW)*U#ds(z0hJ{6a)pV8Rl^5=FaI2< zt0ZQqC|i3jMxwx>#26>#m}m2BEusA}@^ai%ts2ER-N$JyFW4@QaZ$3ZjFxG~m{o4N zZpLX-AM7ywiE-1Man5>fpDqT!AX(?#|123L7mq@mhHR&1jC{f{uWp#u+9ZAd&$nu8 zv8}YAuYxYERWn@K?-6R5BqJsl88qp&Z-MKzj(mf2eS>dnT;-x8(jLUdCA6TLKS@X` zpG>5aE54gjHZvbiX4BB*K%=vmP{O@tttnwdSv9AjTXD!rLQ>?LDP;jVAYKt~DXJL+ zWUP-pVfDwSMyB4EMM<7Y%!<;1qeu5o-ONhYr*cvjdo+0}na(cF&Lm`UUn-MQ0D!@C zT9o!3n3`Bt7P6Ux2ZrK9@mog@#V5tZTsonMab+<#bs;q~B||^3F9!_(^gr@cE|nXI ze<EgPv(kXxEDo@Sus^q~I+@p6Bx+CX9PE$BGvdv7y#IJQ3xUgT_Z#F+LJab60j!d; z+jnQB<c^eE+Vf5r<WK#@a^Y0T-C1sKD-7OU$eW+}n)C9{j}&g)d8^#skw5n=&|2{Q z{DXDxoog^I+_-;eef0jwhIwQ33(F(#7mmm6gO4tM>HS^o%f#=lK5joz^q;7hNptkM zH&AH0)AqC_SoQ|)b>8k=4?OYi`r5l|W9Y9>JUsE`p(lG!e!cgk=7{S^F*NXqe|W3d zc4X6aBtQHTyoEPw&ty}X1yM>VBje-aDnFA=L$jI5YQHI1;#5+#fslsTmoo5n(y5H7 zIy2eYU}XFo+;Zb9=9&4C5$SEj$AM^NMC(je0xe*iU<_4|vWw7j@-j4LD!-V`WP9x_ zv7}xQFaS)p?HJIZ@XB&dRISywBH{F^g}p=>s8vLebLkZ1*}SNzmRv%D=2yae>vgH- z#U#v~Ni2%0fLR4;I-3MhxDu#>g8jLK+d(>mh6RPq#zXMXVlv}^$*Qe}LSI07;0aeB z=^!e@=|NQQWxbcubLcpb<^NzM?^$Eh&(c3h7Y?qAn~ew7%zp?(*G`w+{s-qiJ@<Qe zPr17%Z@%Za?I;XydLrKnq`CWrt-*e@(m^88qOEJqdS~zRK<mA$cdvq4u;W4dr|l1R z<b|@Ywd9LF^@qwW9ru24`v>d8pCAA1_#^*j%b`494t1jW2jicPZwx=`+6)ap2_5?? zbZj&9R^I-HmiEHZFaAVrKYDwt90;$UEd};H+W8Mln}cKJ_O9Oy-+y}}^0>Y4_Sp0G z&UNno;rv)Rva=xEZY+nRpF2KteBSt3<HpjXna%LgC*c!cg-`rGJeq&6+|s#ztklx~ zv^7)?M%H7c;NEgqw7?g>_e(1hJ}3qE{c*z8QgEP7;=@vKe;wgkDL7b1=(-=;2$X{T zPrLSQEIg9FNN;u>+nN%&K~UMAd!-cYt26e7%XNf*#VIzs4r}IL4U@=8?p2Vq?fMpW zYPdo<;_<CHB<M6q5))8=paIhw>O4^K0G!Y{hTmA-QIj)KXmq8an5q7N$_X)Hs%D!V zpU{wo$QCUo7>_I_&+F4Ld1wtoWKzhPrz|@C4IR^TeOqXWS+-`_c2-N>tSG<TtQNQ; zY|Z+b4&^3=W1N0?Y1e~JXbGrk%3kx-RDUGvM;<lT$<!UjH5tB6#%%PsCL>H*w)MdR zZ=!Bxx0SNi%}^JgKEt+pwmLoQcAjmkXRp(<{h#$5F*9|>_yH%hYp!usV5gjP1XfuZ zL4dVOwa&~lx@yr%yYvpSMiHDuKKqiPNjPWb@%qgMy@FOwo8z-$P7;%FM9;=+Tv_Tz zT^pk;CUSTfWz)S@XcN-1bP0K!B7Gkxxr!i$;0gd4kC|%eWp!6|v$`CILp;t(xf<N6 z!LPA?hz2@XEiSv<KRf@E^9A9tt7DBTcl8u)J!|%|$D5Db<=2F=(^K;ADLMB%^Y7Uh ze(XO071!yxbFSp<D7WrdJNwKZD!hO95>T6b`O&-GYu2)}snpz8a`ruI?%TNXxOsT( zT_D~0xa16%+ahb{pEY+BZa!|_wf1hsLK^&q(+@5dF0N0OT}{6lTlcOX_)GsU&y`(% z<DkVj2o&CZaH()<T>+uOXd!Wb?7@Y?h4rzr%eN)=B-CFF^>1|7S^Zy#ErqjXSFmut z(&F+sD#T^4mM-iD^#@N}__Mu)#uG}{RE-xSdO}CZLvFm6Q~7jCRvvQFG)T%Q*Q32A zC(`w^I<WPM4CG&-3LdVj<QX<oKV2@`THmarSofGS9Zd9!XS+Iz)hSA(B>ePpEE9W8 z%qIz@wMMk+nTutKT+N>5E!T|n2dL!+fL)*ef%8-6S8h0zqndlQ^#B3v;G?)!_{F4) zbb`kAr5<j*EpY4QAOHyG^=IogbI^2)tO}jve6acj1k4YcQ=Ar@i3KNp1p0b}xP7Xv zwzl@RcpREyDIQmwwxZK%zeZ^+x8GoF&|iFb=R?fvmM6i!uY!FW?{5YV7Ml*1TnAsm z`4;&vnFrY)?djv*xZSarg7=~N44J4MRKTh}TUnz=F#sGb6cI3E=0M*EmkMycuDN2Q zzd}(j0L+-C{K0$2ZXerpcNT4(?7ciB<Iw#<^w|1=0Y^N(n4MipBkqdFZ!9I!RgOCz zpG!%yg57Q=8;`SYjxDM*hmNHXq!DBRsDU_SazaTZ;|WEPQZq}6D5Hb%cru-k<=IqH zNy10kcpNrFgMkQYm@4mR9pg^4hX9MMjCZd8{4qrGf`5k-d@sgKA;IzDI41;OSU92k zg~cQceP`o@aD@P1@iApg@!F#&;!AAH4POU;tC%T#*{3G_Du~|%@rxjS4^->}L~+0u zL1#ZvT-2sCP`lDd9dIHzRe@#8iZxpOx~d_`q-w3+BUGm%K~2}XZIIKxWLFiE`&H{w z1{ZktjC2G18SiyV68uUs0tLYm0M#=Cx3zf*uNZOdAaO6iM^^TswMy{fi-~8J7H1%h zHJOl+^oE6?kt^rKWGa!aDt2$jdfk9@8r?gO?pfhp#4ZiNo8pXC!Q%7mI=UPeZza=9 zaNqd^r7=eBy|4?x3JwwAWl_EW;7<wE{?<s5_rq^Xc=Zze1iOlS0Dij<6!|dxM)nl> z9q`*XT;zAdZ=+}ROvOfAfz`3+fWKRDkw{O8-=R%}<{`)Ii}>{xQ*Rtz8*G@_Y!dRZ z4Q{{v)!Q#zcdP$ZqFs1!Q?i?sgmp^#5P)iyMTH&A(kY~|{A5woN2c12Yuo5;>CZq8 zb58yzfE6>xao?J39RHo4aBo#CK9}h^@6NYY1i&B`p>ge2#frF%2p*u@5qA*5o8Mh= zBJLuBJ8!ErAl^uXru>nL8*z_D_afe;;XcHhiO`(CRcS%Il?eX)2bCb=Z5q8D@emPO z3bx7)#5;%($S+hn5f2lgwa{9LAl{|XqlkBFzU>5j)mGW#Yl9#>`MnTC8w<jhKMO$s z4nYL+*C7bNSrB~?1mF;aKYta10GtK!76bt}1mVfIRlJBp5P|&16(8adgufW*fhb@A zQMmJNhyrkk!dq;LR@!j@VKfzeJ0T7jKpdW;Hv)mc00Qw9{ktF%7+@sD=AKFv2M~%E uJl_d;ku-n1n>2d!tv|iC>Ud>Y<hXF2e?{>3)ko$C*OO0uN8pDg)_((RNSh@9 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-314.pyc deleted file mode 100644 index d7c820b0b2ec69b4cdc26e58df4dd8e6b710e26e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8385 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 L%fE>61LXe!L`@W- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-314.pyc deleted file mode 100644 index 2b245d7d4b727c0bad3705d8367966a6ad710ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33266 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 KA3>OZpZ^c@$2CC! diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-314.pyc deleted file mode 100644 index c8e9dcfec1e7ecf806f44c0d3a17c0fafa9b05c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14578 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/console.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/console.py deleted file mode 100644 index ee1ac27a2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/console.py +++ /dev/null @@ -1,70 +0,0 @@ -""" - pygments.console - ~~~~~~~~~~~~~~~~ - - Format colored console output. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -esc = "\x1b[" - -codes = {} -codes[""] = "" -codes["reset"] = esc + "39;49;00m" - -codes["bold"] = esc + "01m" -codes["faint"] = esc + "02m" -codes["standout"] = esc + "03m" -codes["underline"] = esc + "04m" -codes["blink"] = esc + "05m" -codes["overline"] = esc + "06m" - -dark_colors = ["black", "red", "green", "yellow", "blue", - "magenta", "cyan", "gray"] -light_colors = ["brightblack", "brightred", "brightgreen", "brightyellow", "brightblue", - "brightmagenta", "brightcyan", "white"] - -x = 30 -for dark, light in zip(dark_colors, light_colors): - codes[dark] = esc + "%im" % x - codes[light] = esc + "%im" % (60 + x) - x += 1 - -del dark, light, x - -codes["white"] = codes["bold"] - - -def reset_color(): - return codes["reset"] - - -def colorize(color_key, text): - return codes[color_key] + text + codes["reset"] - - -def ansiformat(attr, text): - """ - Format ``text`` with a color and/or some attributes:: - - color normal color - *color* bold color - _color_ underlined color - +color+ blinking color - """ - result = [] - if attr[:1] == attr[-1:] == '+': - result.append(codes['blink']) - attr = attr[1:-1] - if attr[:1] == attr[-1:] == '*': - result.append(codes['bold']) - attr = attr[1:-1] - if attr[:1] == attr[-1:] == '_': - result.append(codes['underline']) - attr = attr[1:-1] - result.append(codes[attr]) - result.append(text) - result.append(codes['reset']) - return ''.join(result) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filter.py deleted file mode 100644 index 5efff438d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filter.py +++ /dev/null @@ -1,70 +0,0 @@ -""" - pygments.filter - ~~~~~~~~~~~~~~~ - - Module that implements the default filter. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - - -def apply_filters(stream, filters, lexer=None): - """ - Use this method to apply an iterable of filters to - a stream. If lexer is given it's forwarded to the - filter, otherwise the filter receives `None`. - """ - def _apply(filter_, stream): - yield from filter_.filter(lexer, stream) - for filter_ in filters: - stream = _apply(filter_, stream) - return stream - - -def simplefilter(f): - """ - Decorator that converts a function into a filter:: - - @simplefilter - def lowercase(self, lexer, stream, options): - for ttype, value in stream: - yield ttype, value.lower() - """ - return type(f.__name__, (FunctionFilter,), { - '__module__': getattr(f, '__module__'), - '__doc__': f.__doc__, - 'function': f, - }) - - -class Filter: - """ - Default filter. Subclass this class or use the `simplefilter` - decorator to create own filters. - """ - - def __init__(self, **options): - self.options = options - - def filter(self, lexer, stream): - raise NotImplementedError() - - -class FunctionFilter(Filter): - """ - Abstract class used by `simplefilter` to create simple - function filters on the fly. The `simplefilter` decorator - automatically creates subclasses of this class for - functions passed to it. - """ - function = None - - def __init__(self, **options): - if not hasattr(self, 'function'): - raise TypeError(f'{self.__class__.__name__!r} used without bound function') - Filter.__init__(self, **options) - - def filter(self, lexer, stream): - # pylint: disable=not-callable - yield from self.function(lexer, stream, self.options) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py deleted file mode 100644 index 97380c92d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +++ /dev/null @@ -1,940 +0,0 @@ -""" - pygments.filters - ~~~~~~~~~~~~~~~~ - - Module containing filter lookup functions and default - filters. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re - -from pip._vendor.pygments.token import String, Comment, Keyword, Name, Error, Whitespace, \ - string_to_tokentype -from pip._vendor.pygments.filter import Filter -from pip._vendor.pygments.util import get_list_opt, get_int_opt, get_bool_opt, \ - get_choice_opt, ClassNotFound, OptionError -from pip._vendor.pygments.plugin import find_plugin_filters - - -def find_filter_class(filtername): - """Lookup a filter by name. Return None if not found.""" - if filtername in FILTERS: - return FILTERS[filtername] - for name, cls in find_plugin_filters(): - if name == filtername: - return cls - return None - - -def get_filter_by_name(filtername, **options): - """Return an instantiated filter. - - Options are passed to the filter initializer if wanted. - Raise a ClassNotFound if not found. - """ - cls = find_filter_class(filtername) - if cls: - return cls(**options) - else: - raise ClassNotFound(f'filter {filtername!r} not found') - - -def get_all_filters(): - """Return a generator of all filter names.""" - yield from FILTERS - for name, _ in find_plugin_filters(): - yield name - - -def _replace_special(ttype, value, regex, specialttype, - replacefunc=lambda x: x): - last = 0 - for match in regex.finditer(value): - start, end = match.start(), match.end() - if start != last: - yield ttype, value[last:start] - yield specialttype, replacefunc(value[start:end]) - last = end - if last != len(value): - yield ttype, value[last:] - - -class CodeTagFilter(Filter): - """Highlight special code tags in comments and docstrings. - - Options accepted: - - `codetags` : list of strings - A list of strings that are flagged as code tags. The default is to - highlight ``XXX``, ``TODO``, ``FIXME``, ``BUG`` and ``NOTE``. - - .. versionchanged:: 2.13 - Now recognizes ``FIXME`` by default. - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - tags = get_list_opt(options, 'codetags', - ['XXX', 'TODO', 'FIXME', 'BUG', 'NOTE']) - self.tag_re = re.compile(r'\b({})\b'.format('|'.join([ - re.escape(tag) for tag in tags if tag - ]))) - - def filter(self, lexer, stream): - regex = self.tag_re - for ttype, value in stream: - if ttype in String.Doc or \ - ttype in Comment and \ - ttype not in Comment.Preproc: - yield from _replace_special(ttype, value, regex, Comment.Special) - else: - yield ttype, value - - -class SymbolFilter(Filter): - """Convert mathematical symbols such as \\<longrightarrow> in Isabelle - or \\longrightarrow in LaTeX into Unicode characters. - - This is mostly useful for HTML or console output when you want to - approximate the source rendering you'd see in an IDE. - - Options accepted: - - `lang` : string - The symbol language. Must be one of ``'isabelle'`` or - ``'latex'``. The default is ``'isabelle'``. - """ - - latex_symbols = { - '\\alpha' : '\U000003b1', - '\\beta' : '\U000003b2', - '\\gamma' : '\U000003b3', - '\\delta' : '\U000003b4', - '\\varepsilon' : '\U000003b5', - '\\zeta' : '\U000003b6', - '\\eta' : '\U000003b7', - '\\vartheta' : '\U000003b8', - '\\iota' : '\U000003b9', - '\\kappa' : '\U000003ba', - '\\lambda' : '\U000003bb', - '\\mu' : '\U000003bc', - '\\nu' : '\U000003bd', - '\\xi' : '\U000003be', - '\\pi' : '\U000003c0', - '\\varrho' : '\U000003c1', - '\\sigma' : '\U000003c3', - '\\tau' : '\U000003c4', - '\\upsilon' : '\U000003c5', - '\\varphi' : '\U000003c6', - '\\chi' : '\U000003c7', - '\\psi' : '\U000003c8', - '\\omega' : '\U000003c9', - '\\Gamma' : '\U00000393', - '\\Delta' : '\U00000394', - '\\Theta' : '\U00000398', - '\\Lambda' : '\U0000039b', - '\\Xi' : '\U0000039e', - '\\Pi' : '\U000003a0', - '\\Sigma' : '\U000003a3', - '\\Upsilon' : '\U000003a5', - '\\Phi' : '\U000003a6', - '\\Psi' : '\U000003a8', - '\\Omega' : '\U000003a9', - '\\leftarrow' : '\U00002190', - '\\longleftarrow' : '\U000027f5', - '\\rightarrow' : '\U00002192', - '\\longrightarrow' : '\U000027f6', - '\\Leftarrow' : '\U000021d0', - '\\Longleftarrow' : '\U000027f8', - '\\Rightarrow' : '\U000021d2', - '\\Longrightarrow' : '\U000027f9', - '\\leftrightarrow' : '\U00002194', - '\\longleftrightarrow' : '\U000027f7', - '\\Leftrightarrow' : '\U000021d4', - '\\Longleftrightarrow' : '\U000027fa', - '\\mapsto' : '\U000021a6', - '\\longmapsto' : '\U000027fc', - '\\relbar' : '\U00002500', - '\\Relbar' : '\U00002550', - '\\hookleftarrow' : '\U000021a9', - '\\hookrightarrow' : '\U000021aa', - '\\leftharpoondown' : '\U000021bd', - '\\rightharpoondown' : '\U000021c1', - '\\leftharpoonup' : '\U000021bc', - '\\rightharpoonup' : '\U000021c0', - '\\rightleftharpoons' : '\U000021cc', - '\\leadsto' : '\U0000219d', - '\\downharpoonleft' : '\U000021c3', - '\\downharpoonright' : '\U000021c2', - '\\upharpoonleft' : '\U000021bf', - '\\upharpoonright' : '\U000021be', - '\\restriction' : '\U000021be', - '\\uparrow' : '\U00002191', - '\\Uparrow' : '\U000021d1', - '\\downarrow' : '\U00002193', - '\\Downarrow' : '\U000021d3', - '\\updownarrow' : '\U00002195', - '\\Updownarrow' : '\U000021d5', - '\\langle' : '\U000027e8', - '\\rangle' : '\U000027e9', - '\\lceil' : '\U00002308', - '\\rceil' : '\U00002309', - '\\lfloor' : '\U0000230a', - '\\rfloor' : '\U0000230b', - '\\flqq' : '\U000000ab', - '\\frqq' : '\U000000bb', - '\\bot' : '\U000022a5', - '\\top' : '\U000022a4', - '\\wedge' : '\U00002227', - '\\bigwedge' : '\U000022c0', - '\\vee' : '\U00002228', - '\\bigvee' : '\U000022c1', - '\\forall' : '\U00002200', - '\\exists' : '\U00002203', - '\\nexists' : '\U00002204', - '\\neg' : '\U000000ac', - '\\Box' : '\U000025a1', - '\\Diamond' : '\U000025c7', - '\\vdash' : '\U000022a2', - '\\models' : '\U000022a8', - '\\dashv' : '\U000022a3', - '\\surd' : '\U0000221a', - '\\le' : '\U00002264', - '\\ge' : '\U00002265', - '\\ll' : '\U0000226a', - '\\gg' : '\U0000226b', - '\\lesssim' : '\U00002272', - '\\gtrsim' : '\U00002273', - '\\lessapprox' : '\U00002a85', - '\\gtrapprox' : '\U00002a86', - '\\in' : '\U00002208', - '\\notin' : '\U00002209', - '\\subset' : '\U00002282', - '\\supset' : '\U00002283', - '\\subseteq' : '\U00002286', - '\\supseteq' : '\U00002287', - '\\sqsubset' : '\U0000228f', - '\\sqsupset' : '\U00002290', - '\\sqsubseteq' : '\U00002291', - '\\sqsupseteq' : '\U00002292', - '\\cap' : '\U00002229', - '\\bigcap' : '\U000022c2', - '\\cup' : '\U0000222a', - '\\bigcup' : '\U000022c3', - '\\sqcup' : '\U00002294', - '\\bigsqcup' : '\U00002a06', - '\\sqcap' : '\U00002293', - '\\Bigsqcap' : '\U00002a05', - '\\setminus' : '\U00002216', - '\\propto' : '\U0000221d', - '\\uplus' : '\U0000228e', - '\\bigplus' : '\U00002a04', - '\\sim' : '\U0000223c', - '\\doteq' : '\U00002250', - '\\simeq' : '\U00002243', - '\\approx' : '\U00002248', - '\\asymp' : '\U0000224d', - '\\cong' : '\U00002245', - '\\equiv' : '\U00002261', - '\\Join' : '\U000022c8', - '\\bowtie' : '\U00002a1d', - '\\prec' : '\U0000227a', - '\\succ' : '\U0000227b', - '\\preceq' : '\U0000227c', - '\\succeq' : '\U0000227d', - '\\parallel' : '\U00002225', - '\\mid' : '\U000000a6', - '\\pm' : '\U000000b1', - '\\mp' : '\U00002213', - '\\times' : '\U000000d7', - '\\div' : '\U000000f7', - '\\cdot' : '\U000022c5', - '\\star' : '\U000022c6', - '\\circ' : '\U00002218', - '\\dagger' : '\U00002020', - '\\ddagger' : '\U00002021', - '\\lhd' : '\U000022b2', - '\\rhd' : '\U000022b3', - '\\unlhd' : '\U000022b4', - '\\unrhd' : '\U000022b5', - '\\triangleleft' : '\U000025c3', - '\\triangleright' : '\U000025b9', - '\\triangle' : '\U000025b3', - '\\triangleq' : '\U0000225c', - '\\oplus' : '\U00002295', - '\\bigoplus' : '\U00002a01', - '\\otimes' : '\U00002297', - '\\bigotimes' : '\U00002a02', - '\\odot' : '\U00002299', - '\\bigodot' : '\U00002a00', - '\\ominus' : '\U00002296', - '\\oslash' : '\U00002298', - '\\dots' : '\U00002026', - '\\cdots' : '\U000022ef', - '\\sum' : '\U00002211', - '\\prod' : '\U0000220f', - '\\coprod' : '\U00002210', - '\\infty' : '\U0000221e', - '\\int' : '\U0000222b', - '\\oint' : '\U0000222e', - '\\clubsuit' : '\U00002663', - '\\diamondsuit' : '\U00002662', - '\\heartsuit' : '\U00002661', - '\\spadesuit' : '\U00002660', - '\\aleph' : '\U00002135', - '\\emptyset' : '\U00002205', - '\\nabla' : '\U00002207', - '\\partial' : '\U00002202', - '\\flat' : '\U0000266d', - '\\natural' : '\U0000266e', - '\\sharp' : '\U0000266f', - '\\angle' : '\U00002220', - '\\copyright' : '\U000000a9', - '\\textregistered' : '\U000000ae', - '\\textonequarter' : '\U000000bc', - '\\textonehalf' : '\U000000bd', - '\\textthreequarters' : '\U000000be', - '\\textordfeminine' : '\U000000aa', - '\\textordmasculine' : '\U000000ba', - '\\euro' : '\U000020ac', - '\\pounds' : '\U000000a3', - '\\yen' : '\U000000a5', - '\\textcent' : '\U000000a2', - '\\textcurrency' : '\U000000a4', - '\\textdegree' : '\U000000b0', - } - - isabelle_symbols = { - '\\<zero>' : '\U0001d7ec', - '\\<one>' : '\U0001d7ed', - '\\<two>' : '\U0001d7ee', - '\\<three>' : '\U0001d7ef', - '\\<four>' : '\U0001d7f0', - '\\<five>' : '\U0001d7f1', - '\\<six>' : '\U0001d7f2', - '\\<seven>' : '\U0001d7f3', - '\\<eight>' : '\U0001d7f4', - '\\<nine>' : '\U0001d7f5', - '\\<A>' : '\U0001d49c', - '\\<B>' : '\U0000212c', - '\\<C>' : '\U0001d49e', - '\\<D>' : '\U0001d49f', - '\\<E>' : '\U00002130', - '\\<F>' : '\U00002131', - '\\<G>' : '\U0001d4a2', - '\\<H>' : '\U0000210b', - '\\<I>' : '\U00002110', - '\\<J>' : '\U0001d4a5', - '\\<K>' : '\U0001d4a6', - '\\<L>' : '\U00002112', - '\\<M>' : '\U00002133', - '\\<N>' : '\U0001d4a9', - '\\<O>' : '\U0001d4aa', - '\\<P>' : '\U0001d4ab', - '\\<Q>' : '\U0001d4ac', - '\\<R>' : '\U0000211b', - '\\<S>' : '\U0001d4ae', - '\\<T>' : '\U0001d4af', - '\\<U>' : '\U0001d4b0', - '\\<V>' : '\U0001d4b1', - '\\<W>' : '\U0001d4b2', - '\\<X>' : '\U0001d4b3', - '\\<Y>' : '\U0001d4b4', - '\\<Z>' : '\U0001d4b5', - '\\<a>' : '\U0001d5ba', - '\\<b>' : '\U0001d5bb', - '\\<c>' : '\U0001d5bc', - '\\<d>' : '\U0001d5bd', - '\\<e>' : '\U0001d5be', - '\\<f>' : '\U0001d5bf', - '\\<g>' : '\U0001d5c0', - '\\<h>' : '\U0001d5c1', - '\\<i>' : '\U0001d5c2', - '\\<j>' : '\U0001d5c3', - '\\<k>' : '\U0001d5c4', - '\\<l>' : '\U0001d5c5', - '\\<m>' : '\U0001d5c6', - '\\<n>' : '\U0001d5c7', - '\\<o>' : '\U0001d5c8', - '\\<p>' : '\U0001d5c9', - '\\<q>' : '\U0001d5ca', - '\\<r>' : '\U0001d5cb', - '\\<s>' : '\U0001d5cc', - '\\<t>' : '\U0001d5cd', - '\\<u>' : '\U0001d5ce', - '\\<v>' : '\U0001d5cf', - '\\<w>' : '\U0001d5d0', - '\\<x>' : '\U0001d5d1', - '\\<y>' : '\U0001d5d2', - '\\<z>' : '\U0001d5d3', - '\\<AA>' : '\U0001d504', - '\\<BB>' : '\U0001d505', - '\\<CC>' : '\U0000212d', - '\\<DD>' : '\U0001d507', - '\\<EE>' : '\U0001d508', - '\\<FF>' : '\U0001d509', - '\\<GG>' : '\U0001d50a', - '\\<HH>' : '\U0000210c', - '\\<II>' : '\U00002111', - '\\<JJ>' : '\U0001d50d', - '\\<KK>' : '\U0001d50e', - '\\<LL>' : '\U0001d50f', - '\\<MM>' : '\U0001d510', - '\\<NN>' : '\U0001d511', - '\\<OO>' : '\U0001d512', - '\\<PP>' : '\U0001d513', - '\\<QQ>' : '\U0001d514', - '\\<RR>' : '\U0000211c', - '\\<SS>' : '\U0001d516', - '\\<TT>' : '\U0001d517', - '\\<UU>' : '\U0001d518', - '\\<VV>' : '\U0001d519', - '\\<WW>' : '\U0001d51a', - '\\<XX>' : '\U0001d51b', - '\\<YY>' : '\U0001d51c', - '\\<ZZ>' : '\U00002128', - '\\<aa>' : '\U0001d51e', - '\\<bb>' : '\U0001d51f', - '\\<cc>' : '\U0001d520', - '\\<dd>' : '\U0001d521', - '\\<ee>' : '\U0001d522', - '\\<ff>' : '\U0001d523', - '\\<gg>' : '\U0001d524', - '\\<hh>' : '\U0001d525', - '\\<ii>' : '\U0001d526', - '\\<jj>' : '\U0001d527', - '\\<kk>' : '\U0001d528', - '\\<ll>' : '\U0001d529', - '\\<mm>' : '\U0001d52a', - '\\<nn>' : '\U0001d52b', - '\\<oo>' : '\U0001d52c', - '\\<pp>' : '\U0001d52d', - '\\<qq>' : '\U0001d52e', - '\\<rr>' : '\U0001d52f', - '\\<ss>' : '\U0001d530', - '\\<tt>' : '\U0001d531', - '\\<uu>' : '\U0001d532', - '\\<vv>' : '\U0001d533', - '\\<ww>' : '\U0001d534', - '\\<xx>' : '\U0001d535', - '\\<yy>' : '\U0001d536', - '\\<zz>' : '\U0001d537', - '\\<alpha>' : '\U000003b1', - '\\<beta>' : '\U000003b2', - '\\<gamma>' : '\U000003b3', - '\\<delta>' : '\U000003b4', - '\\<epsilon>' : '\U000003b5', - '\\<zeta>' : '\U000003b6', - '\\<eta>' : '\U000003b7', - '\\<theta>' : '\U000003b8', - '\\<iota>' : '\U000003b9', - '\\<kappa>' : '\U000003ba', - '\\<lambda>' : '\U000003bb', - '\\<mu>' : '\U000003bc', - '\\<nu>' : '\U000003bd', - '\\<xi>' : '\U000003be', - '\\<pi>' : '\U000003c0', - '\\<rho>' : '\U000003c1', - '\\<sigma>' : '\U000003c3', - '\\<tau>' : '\U000003c4', - '\\<upsilon>' : '\U000003c5', - '\\<phi>' : '\U000003c6', - '\\<chi>' : '\U000003c7', - '\\<psi>' : '\U000003c8', - '\\<omega>' : '\U000003c9', - '\\<Gamma>' : '\U00000393', - '\\<Delta>' : '\U00000394', - '\\<Theta>' : '\U00000398', - '\\<Lambda>' : '\U0000039b', - '\\<Xi>' : '\U0000039e', - '\\<Pi>' : '\U000003a0', - '\\<Sigma>' : '\U000003a3', - '\\<Upsilon>' : '\U000003a5', - '\\<Phi>' : '\U000003a6', - '\\<Psi>' : '\U000003a8', - '\\<Omega>' : '\U000003a9', - '\\<bool>' : '\U0001d539', - '\\<complex>' : '\U00002102', - '\\<nat>' : '\U00002115', - '\\<rat>' : '\U0000211a', - '\\<real>' : '\U0000211d', - '\\<int>' : '\U00002124', - '\\<leftarrow>' : '\U00002190', - '\\<longleftarrow>' : '\U000027f5', - '\\<rightarrow>' : '\U00002192', - '\\<longrightarrow>' : '\U000027f6', - '\\<Leftarrow>' : '\U000021d0', - '\\<Longleftarrow>' : '\U000027f8', - '\\<Rightarrow>' : '\U000021d2', - '\\<Longrightarrow>' : '\U000027f9', - '\\<leftrightarrow>' : '\U00002194', - '\\<longleftrightarrow>' : '\U000027f7', - '\\<Leftrightarrow>' : '\U000021d4', - '\\<Longleftrightarrow>' : '\U000027fa', - '\\<mapsto>' : '\U000021a6', - '\\<longmapsto>' : '\U000027fc', - '\\<midarrow>' : '\U00002500', - '\\<Midarrow>' : '\U00002550', - '\\<hookleftarrow>' : '\U000021a9', - '\\<hookrightarrow>' : '\U000021aa', - '\\<leftharpoondown>' : '\U000021bd', - '\\<rightharpoondown>' : '\U000021c1', - '\\<leftharpoonup>' : '\U000021bc', - '\\<rightharpoonup>' : '\U000021c0', - '\\<rightleftharpoons>' : '\U000021cc', - '\\<leadsto>' : '\U0000219d', - '\\<downharpoonleft>' : '\U000021c3', - '\\<downharpoonright>' : '\U000021c2', - '\\<upharpoonleft>' : '\U000021bf', - '\\<upharpoonright>' : '\U000021be', - '\\<restriction>' : '\U000021be', - '\\<Colon>' : '\U00002237', - '\\<up>' : '\U00002191', - '\\<Up>' : '\U000021d1', - '\\<down>' : '\U00002193', - '\\<Down>' : '\U000021d3', - '\\<updown>' : '\U00002195', - '\\<Updown>' : '\U000021d5', - '\\<langle>' : '\U000027e8', - '\\<rangle>' : '\U000027e9', - '\\<lceil>' : '\U00002308', - '\\<rceil>' : '\U00002309', - '\\<lfloor>' : '\U0000230a', - '\\<rfloor>' : '\U0000230b', - '\\<lparr>' : '\U00002987', - '\\<rparr>' : '\U00002988', - '\\<lbrakk>' : '\U000027e6', - '\\<rbrakk>' : '\U000027e7', - '\\<lbrace>' : '\U00002983', - '\\<rbrace>' : '\U00002984', - '\\<guillemotleft>' : '\U000000ab', - '\\<guillemotright>' : '\U000000bb', - '\\<bottom>' : '\U000022a5', - '\\<top>' : '\U000022a4', - '\\<and>' : '\U00002227', - '\\<And>' : '\U000022c0', - '\\<or>' : '\U00002228', - '\\<Or>' : '\U000022c1', - '\\<forall>' : '\U00002200', - '\\<exists>' : '\U00002203', - '\\<nexists>' : '\U00002204', - '\\<not>' : '\U000000ac', - '\\<box>' : '\U000025a1', - '\\<diamond>' : '\U000025c7', - '\\<turnstile>' : '\U000022a2', - '\\<Turnstile>' : '\U000022a8', - '\\<tturnstile>' : '\U000022a9', - '\\<TTurnstile>' : '\U000022ab', - '\\<stileturn>' : '\U000022a3', - '\\<surd>' : '\U0000221a', - '\\<le>' : '\U00002264', - '\\<ge>' : '\U00002265', - '\\<lless>' : '\U0000226a', - '\\<ggreater>' : '\U0000226b', - '\\<lesssim>' : '\U00002272', - '\\<greatersim>' : '\U00002273', - '\\<lessapprox>' : '\U00002a85', - '\\<greaterapprox>' : '\U00002a86', - '\\<in>' : '\U00002208', - '\\<notin>' : '\U00002209', - '\\<subset>' : '\U00002282', - '\\<supset>' : '\U00002283', - '\\<subseteq>' : '\U00002286', - '\\<supseteq>' : '\U00002287', - '\\<sqsubset>' : '\U0000228f', - '\\<sqsupset>' : '\U00002290', - '\\<sqsubseteq>' : '\U00002291', - '\\<sqsupseteq>' : '\U00002292', - '\\<inter>' : '\U00002229', - '\\<Inter>' : '\U000022c2', - '\\<union>' : '\U0000222a', - '\\<Union>' : '\U000022c3', - '\\<squnion>' : '\U00002294', - '\\<Squnion>' : '\U00002a06', - '\\<sqinter>' : '\U00002293', - '\\<Sqinter>' : '\U00002a05', - '\\<setminus>' : '\U00002216', - '\\<propto>' : '\U0000221d', - '\\<uplus>' : '\U0000228e', - '\\<Uplus>' : '\U00002a04', - '\\<noteq>' : '\U00002260', - '\\<sim>' : '\U0000223c', - '\\<doteq>' : '\U00002250', - '\\<simeq>' : '\U00002243', - '\\<approx>' : '\U00002248', - '\\<asymp>' : '\U0000224d', - '\\<cong>' : '\U00002245', - '\\<smile>' : '\U00002323', - '\\<equiv>' : '\U00002261', - '\\<frown>' : '\U00002322', - '\\<Join>' : '\U000022c8', - '\\<bowtie>' : '\U00002a1d', - '\\<prec>' : '\U0000227a', - '\\<succ>' : '\U0000227b', - '\\<preceq>' : '\U0000227c', - '\\<succeq>' : '\U0000227d', - '\\<parallel>' : '\U00002225', - '\\<bar>' : '\U000000a6', - '\\<plusminus>' : '\U000000b1', - '\\<minusplus>' : '\U00002213', - '\\<times>' : '\U000000d7', - '\\<div>' : '\U000000f7', - '\\<cdot>' : '\U000022c5', - '\\<star>' : '\U000022c6', - '\\<bullet>' : '\U00002219', - '\\<circ>' : '\U00002218', - '\\<dagger>' : '\U00002020', - '\\<ddagger>' : '\U00002021', - '\\<lhd>' : '\U000022b2', - '\\<rhd>' : '\U000022b3', - '\\<unlhd>' : '\U000022b4', - '\\<unrhd>' : '\U000022b5', - '\\<triangleleft>' : '\U000025c3', - '\\<triangleright>' : '\U000025b9', - '\\<triangle>' : '\U000025b3', - '\\<triangleq>' : '\U0000225c', - '\\<oplus>' : '\U00002295', - '\\<Oplus>' : '\U00002a01', - '\\<otimes>' : '\U00002297', - '\\<Otimes>' : '\U00002a02', - '\\<odot>' : '\U00002299', - '\\<Odot>' : '\U00002a00', - '\\<ominus>' : '\U00002296', - '\\<oslash>' : '\U00002298', - '\\<dots>' : '\U00002026', - '\\<cdots>' : '\U000022ef', - '\\<Sum>' : '\U00002211', - '\\<Prod>' : '\U0000220f', - '\\<Coprod>' : '\U00002210', - '\\<infinity>' : '\U0000221e', - '\\<integral>' : '\U0000222b', - '\\<ointegral>' : '\U0000222e', - '\\<clubsuit>' : '\U00002663', - '\\<diamondsuit>' : '\U00002662', - '\\<heartsuit>' : '\U00002661', - '\\<spadesuit>' : '\U00002660', - '\\<aleph>' : '\U00002135', - '\\<emptyset>' : '\U00002205', - '\\<nabla>' : '\U00002207', - '\\<partial>' : '\U00002202', - '\\<flat>' : '\U0000266d', - '\\<natural>' : '\U0000266e', - '\\<sharp>' : '\U0000266f', - '\\<angle>' : '\U00002220', - '\\<copyright>' : '\U000000a9', - '\\<registered>' : '\U000000ae', - '\\<hyphen>' : '\U000000ad', - '\\<inverse>' : '\U000000af', - '\\<onequarter>' : '\U000000bc', - '\\<onehalf>' : '\U000000bd', - '\\<threequarters>' : '\U000000be', - '\\<ordfeminine>' : '\U000000aa', - '\\<ordmasculine>' : '\U000000ba', - '\\<section>' : '\U000000a7', - '\\<paragraph>' : '\U000000b6', - '\\<exclamdown>' : '\U000000a1', - '\\<questiondown>' : '\U000000bf', - '\\<euro>' : '\U000020ac', - '\\<pounds>' : '\U000000a3', - '\\<yen>' : '\U000000a5', - '\\<cent>' : '\U000000a2', - '\\<currency>' : '\U000000a4', - '\\<degree>' : '\U000000b0', - '\\<amalg>' : '\U00002a3f', - '\\<mho>' : '\U00002127', - '\\<lozenge>' : '\U000025ca', - '\\<wp>' : '\U00002118', - '\\<wrong>' : '\U00002240', - '\\<struct>' : '\U000022c4', - '\\<acute>' : '\U000000b4', - '\\<index>' : '\U00000131', - '\\<dieresis>' : '\U000000a8', - '\\<cedilla>' : '\U000000b8', - '\\<hungarumlaut>' : '\U000002dd', - '\\<some>' : '\U000003f5', - '\\<newline>' : '\U000023ce', - '\\<open>' : '\U00002039', - '\\<close>' : '\U0000203a', - '\\<here>' : '\U00002302', - '\\<^sub>' : '\U000021e9', - '\\<^sup>' : '\U000021e7', - '\\<^bold>' : '\U00002759', - '\\<^bsub>' : '\U000021d8', - '\\<^esub>' : '\U000021d9', - '\\<^bsup>' : '\U000021d7', - '\\<^esup>' : '\U000021d6', - } - - lang_map = {'isabelle' : isabelle_symbols, 'latex' : latex_symbols} - - def __init__(self, **options): - Filter.__init__(self, **options) - lang = get_choice_opt(options, 'lang', - ['isabelle', 'latex'], 'isabelle') - self.symbols = self.lang_map[lang] - - def filter(self, lexer, stream): - for ttype, value in stream: - if value in self.symbols: - yield ttype, self.symbols[value] - else: - yield ttype, value - - -class KeywordCaseFilter(Filter): - """Convert keywords to lowercase or uppercase or capitalize them, which - means first letter uppercase, rest lowercase. - - This can be useful e.g. if you highlight Pascal code and want to adapt the - code to your styleguide. - - Options accepted: - - `case` : string - The casing to convert keywords to. Must be one of ``'lower'``, - ``'upper'`` or ``'capitalize'``. The default is ``'lower'``. - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - case = get_choice_opt(options, 'case', - ['lower', 'upper', 'capitalize'], 'lower') - self.convert = getattr(str, case) - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype in Keyword: - yield ttype, self.convert(value) - else: - yield ttype, value - - -class NameHighlightFilter(Filter): - """Highlight a normal Name (and Name.*) token with a different token type. - - Example:: - - filter = NameHighlightFilter( - names=['foo', 'bar', 'baz'], - tokentype=Name.Function, - ) - - This would highlight the names "foo", "bar" and "baz" - as functions. `Name.Function` is the default token type. - - Options accepted: - - `names` : list of strings - A list of names that should be given the different token type. - There is no default. - `tokentype` : TokenType or string - A token type or a string containing a token type name that is - used for highlighting the strings in `names`. The default is - `Name.Function`. - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - self.names = set(get_list_opt(options, 'names', [])) - tokentype = options.get('tokentype') - if tokentype: - self.tokentype = string_to_tokentype(tokentype) - else: - self.tokentype = Name.Function - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype in Name and value in self.names: - yield self.tokentype, value - else: - yield ttype, value - - -class ErrorToken(Exception): - pass - - -class RaiseOnErrorTokenFilter(Filter): - """Raise an exception when the lexer generates an error token. - - Options accepted: - - `excclass` : Exception class - The exception class to raise. - The default is `pygments.filters.ErrorToken`. - - .. versionadded:: 0.8 - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - self.exception = options.get('excclass', ErrorToken) - try: - # issubclass() will raise TypeError if first argument is not a class - if not issubclass(self.exception, Exception): - raise TypeError - except TypeError: - raise OptionError('excclass option is not an exception class') - - def filter(self, lexer, stream): - for ttype, value in stream: - if ttype is Error: - raise self.exception(value) - yield ttype, value - - -class VisibleWhitespaceFilter(Filter): - """Convert tabs, newlines and/or spaces to visible characters. - - Options accepted: - - `spaces` : string or bool - If this is a one-character string, spaces will be replaces by this string. - If it is another true value, spaces will be replaced by ``·`` (unicode - MIDDLE DOT). If it is a false value, spaces will not be replaced. The - default is ``False``. - `tabs` : string or bool - The same as for `spaces`, but the default replacement character is ``»`` - (unicode RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK). The default value - is ``False``. Note: this will not work if the `tabsize` option for the - lexer is nonzero, as tabs will already have been expanded then. - `tabsize` : int - If tabs are to be replaced by this filter (see the `tabs` option), this - is the total number of characters that a tab should be expanded to. - The default is ``8``. - `newlines` : string or bool - The same as for `spaces`, but the default replacement character is ``¶`` - (unicode PILCROW SIGN). The default value is ``False``. - `wstokentype` : bool - If true, give whitespace the special `Whitespace` token type. This allows - styling the visible whitespace differently (e.g. greyed out), but it can - disrupt background colors. The default is ``True``. - - .. versionadded:: 0.8 - """ - - def __init__(self, **options): - Filter.__init__(self, **options) - for name, default in [('spaces', '·'), - ('tabs', '»'), - ('newlines', '¶')]: - opt = options.get(name, False) - if isinstance(opt, str) and len(opt) == 1: - setattr(self, name, opt) - else: - setattr(self, name, (opt and default or '')) - tabsize = get_int_opt(options, 'tabsize', 8) - if self.tabs: - self.tabs += ' ' * (tabsize - 1) - if self.newlines: - self.newlines += '\n' - self.wstt = get_bool_opt(options, 'wstokentype', True) - - def filter(self, lexer, stream): - if self.wstt: - spaces = self.spaces or ' ' - tabs = self.tabs or '\t' - newlines = self.newlines or '\n' - regex = re.compile(r'\s') - - def replacefunc(wschar): - if wschar == ' ': - return spaces - elif wschar == '\t': - return tabs - elif wschar == '\n': - return newlines - return wschar - - for ttype, value in stream: - yield from _replace_special(ttype, value, regex, Whitespace, - replacefunc) - else: - spaces, tabs, newlines = self.spaces, self.tabs, self.newlines - # simpler processing - for ttype, value in stream: - if spaces: - value = value.replace(' ', spaces) - if tabs: - value = value.replace('\t', tabs) - if newlines: - value = value.replace('\n', newlines) - yield ttype, value - - -class GobbleFilter(Filter): - """Gobbles source code lines (eats initial characters). - - This filter drops the first ``n`` characters off every line of code. This - may be useful when the source code fed to the lexer is indented by a fixed - amount of space that isn't desired in the output. - - Options accepted: - - `n` : int - The number of characters to gobble. - - .. versionadded:: 1.2 - """ - def __init__(self, **options): - Filter.__init__(self, **options) - self.n = get_int_opt(options, 'n', 0) - - def gobble(self, value, left): - if left < len(value): - return value[left:], 0 - else: - return '', left - len(value) - - def filter(self, lexer, stream): - n = self.n - left = n # How many characters left to gobble. - for ttype, value in stream: - # Remove ``left`` tokens from first line, ``n`` from all others. - parts = value.split('\n') - (parts[0], left) = self.gobble(parts[0], left) - for i in range(1, len(parts)): - (parts[i], left) = self.gobble(parts[i], n) - value = '\n'.join(parts) - - if value != '': - yield ttype, value - - -class TokenMergeFilter(Filter): - """Merges consecutive tokens with the same token type in the output - stream of a lexer. - - .. versionadded:: 1.2 - """ - def __init__(self, **options): - Filter.__init__(self, **options) - - def filter(self, lexer, stream): - current_type = None - current_value = None - for ttype, value in stream: - if ttype is current_type: - current_value += value - else: - if current_type is not None: - yield current_type, current_value - current_type = ttype - current_value = value - if current_type is not None: - yield current_type, current_value - - -FILTERS = { - 'codetagify': CodeTagFilter, - 'keywordcase': KeywordCaseFilter, - 'highlight': NameHighlightFilter, - 'raiseonerror': RaiseOnErrorTokenFilter, - 'whitespace': VisibleWhitespaceFilter, - 'gobble': GobbleFilter, - 'tokenmerge': TokenMergeFilter, - 'symbols': SymbolFilter, -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 95eddcee3342c865618b73c1ad65a0e2d1eb05ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38524 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 P-pdnG(yaF+aiRPl%9i4f diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatter.py deleted file mode 100644 index 0041e41a1..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatter.py +++ /dev/null @@ -1,129 +0,0 @@ -""" - pygments.formatter - ~~~~~~~~~~~~~~~~~~ - - Base formatter class. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import codecs - -from pip._vendor.pygments.util import get_bool_opt -from pip._vendor.pygments.styles import get_style_by_name - -__all__ = ['Formatter'] - - -def _lookup_style(style): - if isinstance(style, str): - return get_style_by_name(style) - return style - - -class Formatter: - """ - Converts a token stream to text. - - Formatters should have attributes to help selecting them. These - are similar to the corresponding :class:`~pygments.lexer.Lexer` - attributes. - - .. autoattribute:: name - :no-value: - - .. autoattribute:: aliases - :no-value: - - .. autoattribute:: filenames - :no-value: - - You can pass options as keyword arguments to the constructor. - All formatters accept these basic options: - - ``style`` - The style to use, can be a string or a Style subclass - (default: "default"). Not used by e.g. the - TerminalFormatter. - ``full`` - Tells the formatter to output a "full" document, i.e. - a complete self-contained document. This doesn't have - any effect for some formatters (default: false). - ``title`` - If ``full`` is true, the title that should be used to - caption the document (default: ''). - ``encoding`` - If given, must be an encoding name. This will be used to - convert the Unicode token strings to byte strings in the - output. If it is "" or None, Unicode strings will be written - to the output file, which most file-like objects do not - support (default: None). - ``outencoding`` - Overrides ``encoding`` if given. - - """ - - #: Full name for the formatter, in human-readable form. - name = None - - #: A list of short, unique identifiers that can be used to lookup - #: the formatter from a list, e.g. using :func:`.get_formatter_by_name()`. - aliases = [] - - #: A list of fnmatch patterns that match filenames for which this - #: formatter can produce output. The patterns in this list should be unique - #: among all formatters. - filenames = [] - - #: If True, this formatter outputs Unicode strings when no encoding - #: option is given. - unicodeoutput = True - - def __init__(self, **options): - """ - As with lexers, this constructor takes arbitrary optional arguments, - and if you override it, you should first process your own options, then - call the base class implementation. - """ - self.style = _lookup_style(options.get('style', 'default')) - self.full = get_bool_opt(options, 'full', False) - self.title = options.get('title', '') - self.encoding = options.get('encoding', None) or None - if self.encoding in ('guess', 'chardet'): - # can happen for e.g. pygmentize -O encoding=guess - self.encoding = 'utf-8' - self.encoding = options.get('outencoding') or self.encoding - self.options = options - - def get_style_defs(self, arg=''): - """ - This method must return statements or declarations suitable to define - the current style for subsequent highlighted text (e.g. CSS classes - in the `HTMLFormatter`). - - The optional argument `arg` can be used to modify the generation and - is formatter dependent (it is standardized because it can be given on - the command line). - - This method is called by the ``-S`` :doc:`command-line option <cmdline>`, - the `arg` is then given by the ``-a`` option. - """ - return '' - - def format(self, tokensource, outfile): - """ - This method must format the tokens from the `tokensource` iterable and - write the formatted version to the file object `outfile`. - - Formatter options can control how exactly the tokens are converted. - """ - if self.encoding: - # wrap the outfile in a StreamWriter - outfile = codecs.lookup(self.encoding)[3](outfile) - return self.format_unencoded(tokensource, outfile) - - # Allow writing Formatter[str] or Formatter[bytes]. That's equivalent to - # Formatter. This helps when using third-party type stubs from typeshed. - def __class_getitem__(cls, name): - return cls diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py deleted file mode 100644 index 014f2ee8d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +++ /dev/null @@ -1,157 +0,0 @@ -""" - pygments.formatters - ~~~~~~~~~~~~~~~~~~~ - - Pygments formatters. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -import sys -import types -import fnmatch -from os.path import basename - -from pip._vendor.pygments.formatters._mapping import FORMATTERS -from pip._vendor.pygments.plugin import find_plugin_formatters -from pip._vendor.pygments.util import ClassNotFound - -__all__ = ['get_formatter_by_name', 'get_formatter_for_filename', - 'get_all_formatters', 'load_formatter_from_file'] + list(FORMATTERS) - -_formatter_cache = {} # classes by name -_pattern_cache = {} - - -def _fn_matches(fn, glob): - """Return whether the supplied file name fn matches pattern filename.""" - if glob not in _pattern_cache: - pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob)) - return pattern.match(fn) - return _pattern_cache[glob].match(fn) - - -def _load_formatters(module_name): - """Load a formatter (and all others in the module too).""" - mod = __import__(module_name, None, None, ['__all__']) - for formatter_name in mod.__all__: - cls = getattr(mod, formatter_name) - _formatter_cache[cls.name] = cls - - -def get_all_formatters(): - """Return a generator for all formatter classes.""" - # NB: this returns formatter classes, not info like get_all_lexers(). - for info in FORMATTERS.values(): - if info[1] not in _formatter_cache: - _load_formatters(info[0]) - yield _formatter_cache[info[1]] - for _, formatter in find_plugin_formatters(): - yield formatter - - -def find_formatter_class(alias): - """Lookup a formatter by alias. - - Returns None if not found. - """ - for module_name, name, aliases, _, _ in FORMATTERS.values(): - if alias in aliases: - if name not in _formatter_cache: - _load_formatters(module_name) - return _formatter_cache[name] - for _, cls in find_plugin_formatters(): - if alias in cls.aliases: - return cls - - -def get_formatter_by_name(_alias, **options): - """ - Return an instance of a :class:`.Formatter` subclass that has `alias` in its - aliases list. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that - alias is found. - """ - cls = find_formatter_class(_alias) - if cls is None: - raise ClassNotFound(f"no formatter found for name {_alias!r}") - return cls(**options) - - -def load_formatter_from_file(filename, formattername="CustomFormatter", **options): - """ - Return a `Formatter` subclass instance loaded from the provided file, relative - to the current directory. - - The file is expected to contain a Formatter class named ``formattername`` - (by default, CustomFormatter). Users should be very careful with the input, because - this method is equivalent to running ``eval()`` on the input file. The formatter is - given the `options` at its instantiation. - - :exc:`pygments.util.ClassNotFound` is raised if there are any errors loading - the formatter. - - .. versionadded:: 2.2 - """ - try: - # This empty dict will contain the namespace for the exec'd file - custom_namespace = {} - with open(filename, 'rb') as f: - exec(f.read(), custom_namespace) - # Retrieve the class `formattername` from that namespace - if formattername not in custom_namespace: - raise ClassNotFound(f'no valid {formattername} class found in {filename}') - formatter_class = custom_namespace[formattername] - # And finally instantiate it with the options - return formatter_class(**options) - except OSError as err: - raise ClassNotFound(f'cannot read {filename}: {err}') - except ClassNotFound: - raise - except Exception as err: - raise ClassNotFound(f'error when loading custom formatter: {err}') - - -def get_formatter_for_filename(fn, **options): - """ - Return a :class:`.Formatter` subclass instance that has a filename pattern - matching `fn`. The formatter is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename - is found. - """ - fn = basename(fn) - for modname, name, _, filenames, _ in FORMATTERS.values(): - for filename in filenames: - if _fn_matches(fn, filename): - if name not in _formatter_cache: - _load_formatters(modname) - return _formatter_cache[name](**options) - for _name, cls in find_plugin_formatters(): - for filename in cls.filenames: - if _fn_matches(fn, filename): - return cls(**options) - raise ClassNotFound(f"no formatter found for file name {fn!r}") - - -class _automodule(types.ModuleType): - """Automatically import formatters.""" - - def __getattr__(self, name): - info = FORMATTERS.get(name) - if info: - _load_formatters(info[0]) - cls = _formatter_cache[info[1]] - setattr(self, name, cls) - return cls - raise AttributeError(name) - - -oldmod = sys.modules[__name__] -newmod = _automodule(__name__) -newmod.__dict__.update(oldmod.__dict__) -sys.modules[__name__] = newmod -del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 8abf4874a654895b16c701d2e8ea248c29e37736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7171 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 L+D!c{O{V+5rYWVN diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-314.pyc deleted file mode 100644 index d2b3732197e8a44c42a5509773a982a8f4de8f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4261 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 F^*_HeyzKx0 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py deleted file mode 100644 index 72ca84040..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +++ /dev/null @@ -1,23 +0,0 @@ -# Automatically generated by scripts/gen_mapfiles.py. -# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead. - -FORMATTERS = { - 'BBCodeFormatter': ('pygments.formatters.bbcode', 'BBCode', ('bbcode', 'bb'), (), 'Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.'), - 'BmpImageFormatter': ('pygments.formatters.img', 'img_bmp', ('bmp', 'bitmap'), ('*.bmp',), 'Create a bitmap image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'GifImageFormatter': ('pygments.formatters.img', 'img_gif', ('gif',), ('*.gif',), 'Create a GIF image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'GroffFormatter': ('pygments.formatters.groff', 'groff', ('groff', 'troff', 'roff'), (), 'Format tokens with groff escapes to change their color and font style.'), - 'HtmlFormatter': ('pygments.formatters.html', 'HTML', ('html',), ('*.html', '*.htm'), "Format tokens as HTML 4 ``<span>`` tags. By default, the content is enclosed in a ``<pre>`` tag, itself wrapped in a ``<div>`` tag (but see the `nowrap` option). The ``<div>``'s CSS class can be set by the `cssclass` option."), - 'IRCFormatter': ('pygments.formatters.irc', 'IRC', ('irc', 'IRC'), (), 'Format tokens with IRC color sequences'), - 'ImageFormatter': ('pygments.formatters.img', 'img', ('img', 'IMG', 'png'), ('*.png',), 'Create a PNG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'JpgImageFormatter': ('pygments.formatters.img', 'img_jpg', ('jpg', 'jpeg'), ('*.jpg',), 'Create a JPEG image from source code. This uses the Python Imaging Library to generate a pixmap from the source code.'), - 'LatexFormatter': ('pygments.formatters.latex', 'LaTeX', ('latex', 'tex'), ('*.tex',), 'Format tokens as LaTeX code. This needs the `fancyvrb` and `color` standard packages.'), - 'NullFormatter': ('pygments.formatters.other', 'Text only', ('text', 'null'), ('*.txt',), 'Output the text unchanged without any formatting.'), - 'PangoMarkupFormatter': ('pygments.formatters.pangomarkup', 'Pango Markup', ('pango', 'pangomarkup'), (), 'Format tokens as Pango Markup code. It can then be rendered to an SVG.'), - 'RawTokenFormatter': ('pygments.formatters.other', 'Raw tokens', ('raw', 'tokens'), ('*.raw',), 'Format tokens as a raw representation for storing token streams.'), - 'RtfFormatter': ('pygments.formatters.rtf', 'RTF', ('rtf',), ('*.rtf',), 'Format tokens as RTF markup. This formatter automatically outputs full RTF documents with color information and other useful stuff. Perfect for Copy and Paste into Microsoft(R) Word(R) documents.'), - 'SvgFormatter': ('pygments.formatters.svg', 'SVG', ('svg',), ('*.svg',), 'Format tokens as an SVG graphics file. This formatter is still experimental. Each line of code is a ``<text>`` element with explicit ``x`` and ``y`` coordinates containing ``<tspan>`` elements with the individual token styles.'), - 'Terminal256Formatter': ('pygments.formatters.terminal256', 'Terminal256', ('terminal256', 'console256', '256'), (), 'Format tokens with ANSI color sequences, for output in a 256-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TerminalFormatter': ('pygments.formatters.terminal', 'Terminal', ('terminal', 'console'), (), 'Format tokens with ANSI color sequences, for output in a text console. Color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TerminalTrueColorFormatter': ('pygments.formatters.terminal256', 'TerminalTrueColor', ('terminal16m', 'console16m', '16m'), (), 'Format tokens with ANSI color sequences, for output in a true-color terminal or console. Like in `TerminalFormatter` color sequences are terminated at newlines, so that paging the output works correctly.'), - 'TestcaseFormatter': ('pygments.formatters.other', 'Testcase', ('testcase',), (), 'Format tokens as appropriate for a new testcase.'), -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexer.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexer.py deleted file mode 100644 index c05aa8196..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexer.py +++ /dev/null @@ -1,963 +0,0 @@ -""" - pygments.lexer - ~~~~~~~~~~~~~~ - - Base lexer classes. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -import sys -import time - -from pip._vendor.pygments.filter import apply_filters, Filter -from pip._vendor.pygments.filters import get_filter_by_name -from pip._vendor.pygments.token import Error, Text, Other, Whitespace, _TokenType -from pip._vendor.pygments.util import get_bool_opt, get_int_opt, get_list_opt, \ - make_analysator, Future, guess_decode -from pip._vendor.pygments.regexopt import regex_opt - -__all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer', - 'LexerContext', 'include', 'inherit', 'bygroups', 'using', 'this', - 'default', 'words', 'line_re'] - -line_re = re.compile('.*?\n') - -_encoding_map = [(b'\xef\xbb\xbf', 'utf-8'), - (b'\xff\xfe\0\0', 'utf-32'), - (b'\0\0\xfe\xff', 'utf-32be'), - (b'\xff\xfe', 'utf-16'), - (b'\xfe\xff', 'utf-16be')] - -_default_analyse = staticmethod(lambda x: 0.0) - - -class LexerMeta(type): - """ - This metaclass automagically converts ``analyse_text`` methods into - static methods which always return float values. - """ - - def __new__(mcs, name, bases, d): - if 'analyse_text' in d: - d['analyse_text'] = make_analysator(d['analyse_text']) - return type.__new__(mcs, name, bases, d) - - -class Lexer(metaclass=LexerMeta): - """ - Lexer for a specific language. - - See also :doc:`lexerdevelopment`, a high-level guide to writing - lexers. - - Lexer classes have attributes used for choosing the most appropriate - lexer based on various criteria. - - .. autoattribute:: name - :no-value: - .. autoattribute:: aliases - :no-value: - .. autoattribute:: filenames - :no-value: - .. autoattribute:: alias_filenames - .. autoattribute:: mimetypes - :no-value: - .. autoattribute:: priority - - Lexers included in Pygments should have two additional attributes: - - .. autoattribute:: url - :no-value: - .. autoattribute:: version_added - :no-value: - - Lexers included in Pygments may have additional attributes: - - .. autoattribute:: _example - :no-value: - - You can pass options to the constructor. The basic options recognized - by all lexers and processed by the base `Lexer` class are: - - ``stripnl`` - Strip leading and trailing newlines from the input (default: True). - ``stripall`` - Strip all leading and trailing whitespace from the input - (default: False). - ``ensurenl`` - Make sure that the input ends with a newline (default: True). This - is required for some lexers that consume input linewise. - - .. versionadded:: 1.3 - - ``tabsize`` - If given and greater than 0, expand tabs in the input (default: 0). - ``encoding`` - If given, must be an encoding name. This encoding will be used to - convert the input string to Unicode, if it is not already a Unicode - string (default: ``'guess'``, which uses a simple UTF-8 / Locale / - Latin1 detection. Can also be ``'chardet'`` to use the chardet - library, if it is installed. - ``inencoding`` - Overrides the ``encoding`` if given. - """ - - #: Full name of the lexer, in human-readable form - name = None - - #: A list of short, unique identifiers that can be used to look - #: up the lexer from a list, e.g., using `get_lexer_by_name()`. - aliases = [] - - #: A list of `fnmatch` patterns that match filenames which contain - #: content for this lexer. The patterns in this list should be unique among - #: all lexers. - filenames = [] - - #: A list of `fnmatch` patterns that match filenames which may or may not - #: contain content for this lexer. This list is used by the - #: :func:`.guess_lexer_for_filename()` function, to determine which lexers - #: are then included in guessing the correct one. That means that - #: e.g. every lexer for HTML and a template language should include - #: ``\*.html`` in this list. - alias_filenames = [] - - #: A list of MIME types for content that can be lexed with this lexer. - mimetypes = [] - - #: Priority, should multiple lexers match and no content is provided - priority = 0 - - #: URL of the language specification/definition. Used in the Pygments - #: documentation. Set to an empty string to disable. - url = None - - #: Version of Pygments in which the lexer was added. - version_added = None - - #: Example file name. Relative to the ``tests/examplefiles`` directory. - #: This is used by the documentation generator to show an example. - _example = None - - def __init__(self, **options): - """ - This constructor takes arbitrary options as keyword arguments. - Every subclass must first process its own options and then call - the `Lexer` constructor, since it processes the basic - options like `stripnl`. - - An example looks like this: - - .. sourcecode:: python - - def __init__(self, **options): - self.compress = options.get('compress', '') - Lexer.__init__(self, **options) - - As these options must all be specifiable as strings (due to the - command line usage), there are various utility functions - available to help with that, see `Utilities`_. - """ - self.options = options - self.stripnl = get_bool_opt(options, 'stripnl', True) - self.stripall = get_bool_opt(options, 'stripall', False) - self.ensurenl = get_bool_opt(options, 'ensurenl', True) - self.tabsize = get_int_opt(options, 'tabsize', 0) - self.encoding = options.get('encoding', 'guess') - self.encoding = options.get('inencoding') or self.encoding - self.filters = [] - for filter_ in get_list_opt(options, 'filters', ()): - self.add_filter(filter_) - - def __repr__(self): - if self.options: - return f'<pygments.lexers.{self.__class__.__name__} with {self.options!r}>' - else: - return f'<pygments.lexers.{self.__class__.__name__}>' - - def add_filter(self, filter_, **options): - """ - Add a new stream filter to this lexer. - """ - if not isinstance(filter_, Filter): - filter_ = get_filter_by_name(filter_, **options) - self.filters.append(filter_) - - def analyse_text(text): - """ - A static method which is called for lexer guessing. - - It should analyse the text and return a float in the range - from ``0.0`` to ``1.0``. If it returns ``0.0``, the lexer - will not be selected as the most probable one, if it returns - ``1.0``, it will be selected immediately. This is used by - `guess_lexer`. - - The `LexerMeta` metaclass automatically wraps this function so - that it works like a static method (no ``self`` or ``cls`` - parameter) and the return value is automatically converted to - `float`. If the return value is an object that is boolean `False` - it's the same as if the return values was ``0.0``. - """ - - def _preprocess_lexer_input(self, text): - """Apply preprocessing such as decoding the input, removing BOM and normalizing newlines.""" - - if not isinstance(text, str): - if self.encoding == 'guess': - text, _ = guess_decode(text) - elif self.encoding == 'chardet': - try: - # pip vendoring note: this code is not reachable by pip, - # removed import of chardet to make it clear. - raise ImportError('chardet is not vendored by pip') - except ImportError as e: - raise ImportError('To enable chardet encoding guessing, ' - 'please install the chardet library ' - 'from http://chardet.feedparser.org/') from e - # check for BOM first - decoded = None - for bom, encoding in _encoding_map: - if text.startswith(bom): - decoded = text[len(bom):].decode(encoding, 'replace') - break - # no BOM found, so use chardet - if decoded is None: - enc = chardet.detect(text[:1024]) # Guess using first 1KB - decoded = text.decode(enc.get('encoding') or 'utf-8', - 'replace') - text = decoded - else: - text = text.decode(self.encoding) - if text.startswith('\ufeff'): - text = text[len('\ufeff'):] - else: - if text.startswith('\ufeff'): - text = text[len('\ufeff'):] - - # text now *is* a unicode string - text = text.replace('\r\n', '\n') - text = text.replace('\r', '\n') - if self.stripall: - text = text.strip() - elif self.stripnl: - text = text.strip('\n') - if self.tabsize > 0: - text = text.expandtabs(self.tabsize) - if self.ensurenl and not text.endswith('\n'): - text += '\n' - - return text - - def get_tokens(self, text, unfiltered=False): - """ - This method is the basic interface of a lexer. It is called by - the `highlight()` function. It must process the text and return an - iterable of ``(tokentype, value)`` pairs from `text`. - - Normally, you don't need to override this method. The default - implementation processes the options recognized by all lexers - (`stripnl`, `stripall` and so on), and then yields all tokens - from `get_tokens_unprocessed()`, with the ``index`` dropped. - - If `unfiltered` is set to `True`, the filtering mechanism is - bypassed even if filters are defined. - """ - text = self._preprocess_lexer_input(text) - - def streamer(): - for _, t, v in self.get_tokens_unprocessed(text): - yield t, v - stream = streamer() - if not unfiltered: - stream = apply_filters(stream, self.filters, self) - return stream - - def get_tokens_unprocessed(self, text): - """ - This method should process the text and return an iterable of - ``(index, tokentype, value)`` tuples where ``index`` is the starting - position of the token within the input text. - - It must be overridden by subclasses. It is recommended to - implement it as a generator to maximize effectiveness. - """ - raise NotImplementedError - - -class DelegatingLexer(Lexer): - """ - This lexer takes two lexer as arguments. A root lexer and - a language lexer. First everything is scanned using the language - lexer, afterwards all ``Other`` tokens are lexed using the root - lexer. - - The lexers from the ``template`` lexer package use this base lexer. - """ - - def __init__(self, _root_lexer, _language_lexer, _needle=Other, **options): - self.root_lexer = _root_lexer(**options) - self.language_lexer = _language_lexer(**options) - self.needle = _needle - Lexer.__init__(self, **options) - - def get_tokens_unprocessed(self, text): - buffered = '' - insertions = [] - lng_buffer = [] - for i, t, v in self.language_lexer.get_tokens_unprocessed(text): - if t is self.needle: - if lng_buffer: - insertions.append((len(buffered), lng_buffer)) - lng_buffer = [] - buffered += v - else: - lng_buffer.append((i, t, v)) - if lng_buffer: - insertions.append((len(buffered), lng_buffer)) - return do_insertions(insertions, - self.root_lexer.get_tokens_unprocessed(buffered)) - - -# ------------------------------------------------------------------------------ -# RegexLexer and ExtendedRegexLexer -# - - -class include(str): # pylint: disable=invalid-name - """ - Indicates that a state should include rules from another state. - """ - pass - - -class _inherit: - """ - Indicates the a state should inherit from its superclass. - """ - def __repr__(self): - return 'inherit' - -inherit = _inherit() # pylint: disable=invalid-name - - -class combined(tuple): # pylint: disable=invalid-name - """ - Indicates a state combined from multiple states. - """ - - def __new__(cls, *args): - return tuple.__new__(cls, args) - - def __init__(self, *args): - # tuple.__init__ doesn't do anything - pass - - -class _PseudoMatch: - """ - A pseudo match object constructed from a string. - """ - - def __init__(self, start, text): - self._text = text - self._start = start - - def start(self, arg=None): - return self._start - - def end(self, arg=None): - return self._start + len(self._text) - - def group(self, arg=None): - if arg: - raise IndexError('No such group') - return self._text - - def groups(self): - return (self._text,) - - def groupdict(self): - return {} - - -def bygroups(*args): - """ - Callback that yields multiple actions for each group in the match. - """ - def callback(lexer, match, ctx=None): - for i, action in enumerate(args): - if action is None: - continue - elif type(action) is _TokenType: - data = match.group(i + 1) - if data: - yield match.start(i + 1), action, data - else: - data = match.group(i + 1) - if data is not None: - if ctx: - ctx.pos = match.start(i + 1) - for item in action(lexer, - _PseudoMatch(match.start(i + 1), data), ctx): - if item: - yield item - if ctx: - ctx.pos = match.end() - return callback - - -class _This: - """ - Special singleton used for indicating the caller class. - Used by ``using``. - """ - -this = _This() - - -def using(_other, **kwargs): - """ - Callback that processes the match with a different lexer. - - The keyword arguments are forwarded to the lexer, except `state` which - is handled separately. - - `state` specifies the state that the new lexer will start in, and can - be an enumerable such as ('root', 'inline', 'string') or a simple - string which is assumed to be on top of the root state. - - Note: For that to work, `_other` must not be an `ExtendedRegexLexer`. - """ - gt_kwargs = {} - if 'state' in kwargs: - s = kwargs.pop('state') - if isinstance(s, (list, tuple)): - gt_kwargs['stack'] = s - else: - gt_kwargs['stack'] = ('root', s) - - if _other is this: - def callback(lexer, match, ctx=None): - # if keyword arguments are given the callback - # function has to create a new lexer instance - if kwargs: - # XXX: cache that somehow - kwargs.update(lexer.options) - lx = lexer.__class__(**kwargs) - else: - lx = lexer - s = match.start() - for i, t, v in lx.get_tokens_unprocessed(match.group(), **gt_kwargs): - yield i + s, t, v - if ctx: - ctx.pos = match.end() - else: - def callback(lexer, match, ctx=None): - # XXX: cache that somehow - kwargs.update(lexer.options) - lx = _other(**kwargs) - - s = match.start() - for i, t, v in lx.get_tokens_unprocessed(match.group(), **gt_kwargs): - yield i + s, t, v - if ctx: - ctx.pos = match.end() - return callback - - -class default: - """ - Indicates a state or state action (e.g. #pop) to apply. - For example default('#pop') is equivalent to ('', Token, '#pop') - Note that state tuples may be used as well. - - .. versionadded:: 2.0 - """ - def __init__(self, state): - self.state = state - - -class words(Future): - """ - Indicates a list of literal words that is transformed into an optimized - regex that matches any of the words. - - .. versionadded:: 2.0 - """ - def __init__(self, words, prefix='', suffix=''): - self.words = words - self.prefix = prefix - self.suffix = suffix - - def get(self): - return regex_opt(self.words, prefix=self.prefix, suffix=self.suffix) - - -class RegexLexerMeta(LexerMeta): - """ - Metaclass for RegexLexer, creates the self._tokens attribute from - self.tokens on the first instantiation. - """ - - def _process_regex(cls, regex, rflags, state): - """Preprocess the regular expression component of a token definition.""" - if isinstance(regex, Future): - regex = regex.get() - return re.compile(regex, rflags).match - - def _process_token(cls, token): - """Preprocess the token component of a token definition.""" - assert type(token) is _TokenType or callable(token), \ - f'token type must be simple type or callable, not {token!r}' - return token - - def _process_new_state(cls, new_state, unprocessed, processed): - """Preprocess the state transition action of a token definition.""" - if isinstance(new_state, str): - # an existing state - if new_state == '#pop': - return -1 - elif new_state in unprocessed: - return (new_state,) - elif new_state == '#push': - return new_state - elif new_state[:5] == '#pop:': - return -int(new_state[5:]) - else: - assert False, f'unknown new state {new_state!r}' - elif isinstance(new_state, combined): - # combine a new state from existing ones - tmp_state = '_tmp_%d' % cls._tmpname - cls._tmpname += 1 - itokens = [] - for istate in new_state: - assert istate != new_state, f'circular state ref {istate!r}' - itokens.extend(cls._process_state(unprocessed, - processed, istate)) - processed[tmp_state] = itokens - return (tmp_state,) - elif isinstance(new_state, tuple): - # push more than one state - for istate in new_state: - assert (istate in unprocessed or - istate in ('#pop', '#push')), \ - 'unknown new state ' + istate - return new_state - else: - assert False, f'unknown new state def {new_state!r}' - - def _process_state(cls, unprocessed, processed, state): - """Preprocess a single state definition.""" - assert isinstance(state, str), f"wrong state name {state!r}" - assert state[0] != '#', f"invalid state name {state!r}" - if state in processed: - return processed[state] - tokens = processed[state] = [] - rflags = cls.flags - for tdef in unprocessed[state]: - if isinstance(tdef, include): - # it's a state reference - assert tdef != state, f"circular state reference {state!r}" - tokens.extend(cls._process_state(unprocessed, processed, - str(tdef))) - continue - if isinstance(tdef, _inherit): - # should be processed already, but may not in the case of: - # 1. the state has no counterpart in any parent - # 2. the state includes more than one 'inherit' - continue - if isinstance(tdef, default): - new_state = cls._process_new_state(tdef.state, unprocessed, processed) - tokens.append((re.compile('').match, None, new_state)) - continue - - assert type(tdef) is tuple, f"wrong rule def {tdef!r}" - - try: - rex = cls._process_regex(tdef[0], rflags, state) - except Exception as err: - raise ValueError(f"uncompilable regex {tdef[0]!r} in state {state!r} of {cls!r}: {err}") from err - - token = cls._process_token(tdef[1]) - - if len(tdef) == 2: - new_state = None - else: - new_state = cls._process_new_state(tdef[2], - unprocessed, processed) - - tokens.append((rex, token, new_state)) - return tokens - - def process_tokendef(cls, name, tokendefs=None): - """Preprocess a dictionary of token definitions.""" - processed = cls._all_tokens[name] = {} - tokendefs = tokendefs or cls.tokens[name] - for state in list(tokendefs): - cls._process_state(tokendefs, processed, state) - return processed - - def get_tokendefs(cls): - """ - Merge tokens from superclasses in MRO order, returning a single tokendef - dictionary. - - Any state that is not defined by a subclass will be inherited - automatically. States that *are* defined by subclasses will, by - default, override that state in the superclass. If a subclass wishes to - inherit definitions from a superclass, it can use the special value - "inherit", which will cause the superclass' state definition to be - included at that point in the state. - """ - tokens = {} - inheritable = {} - for c in cls.__mro__: - toks = c.__dict__.get('tokens', {}) - - for state, items in toks.items(): - curitems = tokens.get(state) - if curitems is None: - # N.b. because this is assigned by reference, sufficiently - # deep hierarchies are processed incrementally (e.g. for - # A(B), B(C), C(RegexLexer), B will be premodified so X(B) - # will not see any inherits in B). - tokens[state] = items - try: - inherit_ndx = items.index(inherit) - except ValueError: - continue - inheritable[state] = inherit_ndx - continue - - inherit_ndx = inheritable.pop(state, None) - if inherit_ndx is None: - continue - - # Replace the "inherit" value with the items - curitems[inherit_ndx:inherit_ndx+1] = items - try: - # N.b. this is the index in items (that is, the superclass - # copy), so offset required when storing below. - new_inh_ndx = items.index(inherit) - except ValueError: - pass - else: - inheritable[state] = inherit_ndx + new_inh_ndx - - return tokens - - def __call__(cls, *args, **kwds): - """Instantiate cls after preprocessing its token definitions.""" - if '_tokens' not in cls.__dict__: - cls._all_tokens = {} - cls._tmpname = 0 - if hasattr(cls, 'token_variants') and cls.token_variants: - # don't process yet - pass - else: - cls._tokens = cls.process_tokendef('', cls.get_tokendefs()) - - return type.__call__(cls, *args, **kwds) - - -class RegexLexer(Lexer, metaclass=RegexLexerMeta): - """ - Base for simple stateful regular expression-based lexers. - Simplifies the lexing process so that you need only - provide a list of states and regular expressions. - """ - - #: Flags for compiling the regular expressions. - #: Defaults to MULTILINE. - flags = re.MULTILINE - - #: At all time there is a stack of states. Initially, the stack contains - #: a single state 'root'. The top of the stack is called "the current state". - #: - #: Dict of ``{'state': [(regex, tokentype, new_state), ...], ...}`` - #: - #: ``new_state`` can be omitted to signify no state transition. - #: If ``new_state`` is a string, it is pushed on the stack. This ensure - #: the new current state is ``new_state``. - #: If ``new_state`` is a tuple of strings, all of those strings are pushed - #: on the stack and the current state will be the last element of the list. - #: ``new_state`` can also be ``combined('state1', 'state2', ...)`` - #: to signify a new, anonymous state combined from the rules of two - #: or more existing ones. - #: Furthermore, it can be '#pop' to signify going back one step in - #: the state stack, or '#push' to push the current state on the stack - #: again. Note that if you push while in a combined state, the combined - #: state itself is pushed, and not only the state in which the rule is - #: defined. - #: - #: The tuple can also be replaced with ``include('state')``, in which - #: case the rules from the state named by the string are included in the - #: current one. - tokens = {} - - def get_tokens_unprocessed(self, text, stack=('root',)): - """ - Split ``text`` into (tokentype, text) pairs. - - ``stack`` is the initial stack (default: ``['root']``) - """ - pos = 0 - tokendefs = self._tokens - statestack = list(stack) - statetokens = tokendefs[statestack[-1]] - while 1: - for rexmatch, action, new_state in statetokens: - m = rexmatch(text, pos) - if m: - if action is not None: - if type(action) is _TokenType: - yield pos, action, m.group() - else: - yield from action(self, m) - pos = m.end() - if new_state is not None: - # state transition - if isinstance(new_state, tuple): - for state in new_state: - if state == '#pop': - if len(statestack) > 1: - statestack.pop() - elif state == '#push': - statestack.append(statestack[-1]) - else: - statestack.append(state) - elif isinstance(new_state, int): - # pop, but keep at least one state on the stack - # (random code leading to unexpected pops should - # not allow exceptions) - if abs(new_state) >= len(statestack): - del statestack[1:] - else: - del statestack[new_state:] - elif new_state == '#push': - statestack.append(statestack[-1]) - else: - assert False, f"wrong state def: {new_state!r}" - statetokens = tokendefs[statestack[-1]] - break - else: - # We are here only if all state tokens have been considered - # and there was not a match on any of them. - try: - if text[pos] == '\n': - # at EOL, reset state to "root" - statestack = ['root'] - statetokens = tokendefs['root'] - yield pos, Whitespace, '\n' - pos += 1 - continue - yield pos, Error, text[pos] - pos += 1 - except IndexError: - break - - -class LexerContext: - """ - A helper object that holds lexer position data. - """ - - def __init__(self, text, pos, stack=None, end=None): - self.text = text - self.pos = pos - self.end = end or len(text) # end=0 not supported ;-) - self.stack = stack or ['root'] - - def __repr__(self): - return f'LexerContext({self.text!r}, {self.pos!r}, {self.stack!r})' - - -class ExtendedRegexLexer(RegexLexer): - """ - A RegexLexer that uses a context object to store its state. - """ - - def get_tokens_unprocessed(self, text=None, context=None): - """ - Split ``text`` into (tokentype, text) pairs. - If ``context`` is given, use this lexer context instead. - """ - tokendefs = self._tokens - if not context: - ctx = LexerContext(text, 0) - statetokens = tokendefs['root'] - else: - ctx = context - statetokens = tokendefs[ctx.stack[-1]] - text = ctx.text - while 1: - for rexmatch, action, new_state in statetokens: - m = rexmatch(text, ctx.pos, ctx.end) - if m: - if action is not None: - if type(action) is _TokenType: - yield ctx.pos, action, m.group() - ctx.pos = m.end() - else: - yield from action(self, m, ctx) - if not new_state: - # altered the state stack? - statetokens = tokendefs[ctx.stack[-1]] - # CAUTION: callback must set ctx.pos! - if new_state is not None: - # state transition - if isinstance(new_state, tuple): - for state in new_state: - if state == '#pop': - if len(ctx.stack) > 1: - ctx.stack.pop() - elif state == '#push': - ctx.stack.append(ctx.stack[-1]) - else: - ctx.stack.append(state) - elif isinstance(new_state, int): - # see RegexLexer for why this check is made - if abs(new_state) >= len(ctx.stack): - del ctx.stack[1:] - else: - del ctx.stack[new_state:] - elif new_state == '#push': - ctx.stack.append(ctx.stack[-1]) - else: - assert False, f"wrong state def: {new_state!r}" - statetokens = tokendefs[ctx.stack[-1]] - break - else: - try: - if ctx.pos >= ctx.end: - break - if text[ctx.pos] == '\n': - # at EOL, reset state to "root" - ctx.stack = ['root'] - statetokens = tokendefs['root'] - yield ctx.pos, Text, '\n' - ctx.pos += 1 - continue - yield ctx.pos, Error, text[ctx.pos] - ctx.pos += 1 - except IndexError: - break - - -def do_insertions(insertions, tokens): - """ - Helper for lexers which must combine the results of several - sublexers. - - ``insertions`` is a list of ``(index, itokens)`` pairs. - Each ``itokens`` iterable should be inserted at position - ``index`` into the token stream given by the ``tokens`` - argument. - - The result is a combined token stream. - - TODO: clean up the code here. - """ - insertions = iter(insertions) - try: - index, itokens = next(insertions) - except StopIteration: - # no insertions - yield from tokens - return - - realpos = None - insleft = True - - # iterate over the token stream where we want to insert - # the tokens from the insertion list. - for i, t, v in tokens: - # first iteration. store the position of first item - if realpos is None: - realpos = i - oldi = 0 - while insleft and i + len(v) >= index: - tmpval = v[oldi:index - i] - if tmpval: - yield realpos, t, tmpval - realpos += len(tmpval) - for it_index, it_token, it_value in itokens: - yield realpos, it_token, it_value - realpos += len(it_value) - oldi = index - i - try: - index, itokens = next(insertions) - except StopIteration: - insleft = False - break # not strictly necessary - if oldi < len(v): - yield realpos, t, v[oldi:] - realpos += len(v) - oldi - - # leftover tokens - while insleft: - # no normal tokens, set realpos to zero - realpos = realpos or 0 - for p, t, v in itokens: - yield realpos, t, v - realpos += len(v) - try: - index, itokens = next(insertions) - except StopIteration: - insleft = False - break # not strictly necessary - - -class ProfilingRegexLexerMeta(RegexLexerMeta): - """Metaclass for ProfilingRegexLexer, collects regex timing info.""" - - def _process_regex(cls, regex, rflags, state): - if isinstance(regex, words): - rex = regex_opt(regex.words, prefix=regex.prefix, - suffix=regex.suffix) - else: - rex = regex - compiled = re.compile(rex, rflags) - - def match_func(text, pos, endpos=sys.maxsize): - info = cls._prof_data[-1].setdefault((state, rex), [0, 0.0]) - t0 = time.time() - res = compiled.match(text, pos, endpos) - t1 = time.time() - info[0] += 1 - info[1] += t1 - t0 - return res - return match_func - - -class ProfilingRegexLexer(RegexLexer, metaclass=ProfilingRegexLexerMeta): - """Drop-in replacement for RegexLexer that does profiling of its regexes.""" - - _prof_data = [] - _prof_sort_index = 4 # defaults to time per call - - def get_tokens_unprocessed(self, text, stack=('root',)): - # this needs to be a stack, since using(this) will produce nested calls - self.__class__._prof_data.append({}) - yield from RegexLexer.get_tokens_unprocessed(self, text, stack) - rawdata = self.__class__._prof_data.pop() - data = sorted(((s, repr(r).strip('u\'').replace('\\\\', '\\')[:65], - n, 1000 * t, 1000 * t / n) - for ((s, r), (n, t)) in rawdata.items()), - key=lambda x: x[self._prof_sort_index], - reverse=True) - sum_total = sum(x[3] for x in data) - - print() - print('Profiling result for %s lexing %d chars in %.3f ms' % - (self.__class__.__name__, len(text), sum_total)) - print('=' * 110) - print('%-20s %-64s ncalls tottime percall' % ('state', 'regex')) - print('-' * 110) - for d in data: - print('%-20s %-65s %5d %8.4f %8.4f' % d) - print('=' * 110) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py deleted file mode 100644 index 49184ec8a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +++ /dev/null @@ -1,362 +0,0 @@ -""" - pygments.lexers - ~~~~~~~~~~~~~~~ - - Pygments lexers. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -import sys -import types -import fnmatch -from os.path import basename - -from pip._vendor.pygments.lexers._mapping import LEXERS -from pip._vendor.pygments.modeline import get_filetype_from_buffer -from pip._vendor.pygments.plugin import find_plugin_lexers -from pip._vendor.pygments.util import ClassNotFound, guess_decode - -COMPAT = { - 'Python3Lexer': 'PythonLexer', - 'Python3TracebackLexer': 'PythonTracebackLexer', - 'LeanLexer': 'Lean3Lexer', -} - -__all__ = ['get_lexer_by_name', 'get_lexer_for_filename', 'find_lexer_class', - 'guess_lexer', 'load_lexer_from_file'] + list(LEXERS) + list(COMPAT) - -_lexer_cache = {} -_pattern_cache = {} - - -def _fn_matches(fn, glob): - """Return whether the supplied file name fn matches pattern filename.""" - if glob not in _pattern_cache: - pattern = _pattern_cache[glob] = re.compile(fnmatch.translate(glob)) - return pattern.match(fn) - return _pattern_cache[glob].match(fn) - - -def _load_lexers(module_name): - """Load a lexer (and all others in the module too).""" - mod = __import__(module_name, None, None, ['__all__']) - for lexer_name in mod.__all__: - cls = getattr(mod, lexer_name) - _lexer_cache[cls.name] = cls - - -def get_all_lexers(plugins=True): - """Return a generator of tuples in the form ``(name, aliases, - filenames, mimetypes)`` of all know lexers. - - If *plugins* is true (the default), plugin lexers supplied by entrypoints - are also returned. Otherwise, only builtin ones are considered. - """ - for item in LEXERS.values(): - yield item[1:] - if plugins: - for lexer in find_plugin_lexers(): - yield lexer.name, lexer.aliases, lexer.filenames, lexer.mimetypes - - -def find_lexer_class(name): - """ - Return the `Lexer` subclass that with the *name* attribute as given by - the *name* argument. - """ - if name in _lexer_cache: - return _lexer_cache[name] - # lookup builtin lexers - for module_name, lname, aliases, _, _ in LEXERS.values(): - if name == lname: - _load_lexers(module_name) - return _lexer_cache[name] - # continue with lexers from setuptools entrypoints - for cls in find_plugin_lexers(): - if cls.name == name: - return cls - - -def find_lexer_class_by_name(_alias): - """ - Return the `Lexer` subclass that has `alias` in its aliases list, without - instantiating it. - - Like `get_lexer_by_name`, but does not instantiate the class. - - Will raise :exc:`pygments.util.ClassNotFound` if no lexer with that alias is - found. - - .. versionadded:: 2.2 - """ - if not _alias: - raise ClassNotFound(f'no lexer for alias {_alias!r} found') - # lookup builtin lexers - for module_name, name, aliases, _, _ in LEXERS.values(): - if _alias.lower() in aliases: - if name not in _lexer_cache: - _load_lexers(module_name) - return _lexer_cache[name] - # continue with lexers from setuptools entrypoints - for cls in find_plugin_lexers(): - if _alias.lower() in cls.aliases: - return cls - raise ClassNotFound(f'no lexer for alias {_alias!r} found') - - -def get_lexer_by_name(_alias, **options): - """ - Return an instance of a `Lexer` subclass that has `alias` in its - aliases list. The lexer is given the `options` at its - instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if no lexer with that alias is - found. - """ - if not _alias: - raise ClassNotFound(f'no lexer for alias {_alias!r} found') - - # lookup builtin lexers - for module_name, name, aliases, _, _ in LEXERS.values(): - if _alias.lower() in aliases: - if name not in _lexer_cache: - _load_lexers(module_name) - return _lexer_cache[name](**options) - # continue with lexers from setuptools entrypoints - for cls in find_plugin_lexers(): - if _alias.lower() in cls.aliases: - return cls(**options) - raise ClassNotFound(f'no lexer for alias {_alias!r} found') - - -def load_lexer_from_file(filename, lexername="CustomLexer", **options): - """Load a lexer from a file. - - This method expects a file located relative to the current working - directory, which contains a Lexer class. By default, it expects the - Lexer to be name CustomLexer; you can specify your own class name - as the second argument to this function. - - Users should be very careful with the input, because this method - is equivalent to running eval on the input file. - - Raises ClassNotFound if there are any problems importing the Lexer. - - .. versionadded:: 2.2 - """ - try: - # This empty dict will contain the namespace for the exec'd file - custom_namespace = {} - with open(filename, 'rb') as f: - exec(f.read(), custom_namespace) - # Retrieve the class `lexername` from that namespace - if lexername not in custom_namespace: - raise ClassNotFound(f'no valid {lexername} class found in {filename}') - lexer_class = custom_namespace[lexername] - # And finally instantiate it with the options - return lexer_class(**options) - except OSError as err: - raise ClassNotFound(f'cannot read {filename}: {err}') - except ClassNotFound: - raise - except Exception as err: - raise ClassNotFound(f'error when loading custom lexer: {err}') - - -def find_lexer_class_for_filename(_fn, code=None): - """Get a lexer for a filename. - - If multiple lexers match the filename pattern, use ``analyse_text()`` to - figure out which one is more appropriate. - - Returns None if not found. - """ - matches = [] - fn = basename(_fn) - for modname, name, _, filenames, _ in LEXERS.values(): - for filename in filenames: - if _fn_matches(fn, filename): - if name not in _lexer_cache: - _load_lexers(modname) - matches.append((_lexer_cache[name], filename)) - for cls in find_plugin_lexers(): - for filename in cls.filenames: - if _fn_matches(fn, filename): - matches.append((cls, filename)) - - if isinstance(code, bytes): - # decode it, since all analyse_text functions expect unicode - code = guess_decode(code) - - def get_rating(info): - cls, filename = info - # explicit patterns get a bonus - bonus = '*' not in filename and 0.5 or 0 - # The class _always_ defines analyse_text because it's included in - # the Lexer class. The default implementation returns None which - # gets turned into 0.0. Run scripts/detect_missing_analyse_text.py - # to find lexers which need it overridden. - if code: - return cls.analyse_text(code) + bonus, cls.__name__ - return cls.priority + bonus, cls.__name__ - - if matches: - matches.sort(key=get_rating) - # print "Possible lexers, after sort:", matches - return matches[-1][0] - - -def get_lexer_for_filename(_fn, code=None, **options): - """Get a lexer for a filename. - - Return a `Lexer` subclass instance that has a filename pattern - matching `fn`. The lexer is given the `options` at its - instantiation. - - Raise :exc:`pygments.util.ClassNotFound` if no lexer for that filename - is found. - - If multiple lexers match the filename pattern, use their ``analyse_text()`` - methods to figure out which one is more appropriate. - """ - res = find_lexer_class_for_filename(_fn, code) - if not res: - raise ClassNotFound(f'no lexer for filename {_fn!r} found') - return res(**options) - - -def get_lexer_for_mimetype(_mime, **options): - """ - Return a `Lexer` subclass instance that has `mime` in its mimetype - list. The lexer is given the `options` at its instantiation. - - Will raise :exc:`pygments.util.ClassNotFound` if not lexer for that mimetype - is found. - """ - for modname, name, _, _, mimetypes in LEXERS.values(): - if _mime in mimetypes: - if name not in _lexer_cache: - _load_lexers(modname) - return _lexer_cache[name](**options) - for cls in find_plugin_lexers(): - if _mime in cls.mimetypes: - return cls(**options) - raise ClassNotFound(f'no lexer for mimetype {_mime!r} found') - - -def _iter_lexerclasses(plugins=True): - """Return an iterator over all lexer classes.""" - for key in sorted(LEXERS): - module_name, name = LEXERS[key][:2] - if name not in _lexer_cache: - _load_lexers(module_name) - yield _lexer_cache[name] - if plugins: - yield from find_plugin_lexers() - - -def guess_lexer_for_filename(_fn, _text, **options): - """ - As :func:`guess_lexer()`, but only lexers which have a pattern in `filenames` - or `alias_filenames` that matches `filename` are taken into consideration. - - :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can - handle the content. - """ - fn = basename(_fn) - primary = {} - matching_lexers = set() - for lexer in _iter_lexerclasses(): - for filename in lexer.filenames: - if _fn_matches(fn, filename): - matching_lexers.add(lexer) - primary[lexer] = True - for filename in lexer.alias_filenames: - if _fn_matches(fn, filename): - matching_lexers.add(lexer) - primary[lexer] = False - if not matching_lexers: - raise ClassNotFound(f'no lexer for filename {fn!r} found') - if len(matching_lexers) == 1: - return matching_lexers.pop()(**options) - result = [] - for lexer in matching_lexers: - rv = lexer.analyse_text(_text) - if rv == 1.0: - return lexer(**options) - result.append((rv, lexer)) - - def type_sort(t): - # sort by: - # - analyse score - # - is primary filename pattern? - # - priority - # - last resort: class name - return (t[0], primary[t[1]], t[1].priority, t[1].__name__) - result.sort(key=type_sort) - - return result[-1][1](**options) - - -def guess_lexer(_text, **options): - """ - Return a `Lexer` subclass instance that's guessed from the text in - `text`. For that, the :meth:`.analyse_text()` method of every known lexer - class is called with the text as argument, and the lexer which returned the - highest value will be instantiated and returned. - - :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can - handle the content. - """ - - if not isinstance(_text, str): - inencoding = options.get('inencoding', options.get('encoding')) - if inencoding: - _text = _text.decode(inencoding or 'utf8') - else: - _text, _ = guess_decode(_text) - - # try to get a vim modeline first - ft = get_filetype_from_buffer(_text) - - if ft is not None: - try: - return get_lexer_by_name(ft, **options) - except ClassNotFound: - pass - - best_lexer = [0.0, None] - for lexer in _iter_lexerclasses(): - rv = lexer.analyse_text(_text) - if rv == 1.0: - return lexer(**options) - if rv > best_lexer[0]: - best_lexer[:] = (rv, lexer) - if not best_lexer[0] or best_lexer[1] is None: - raise ClassNotFound('no lexer matching the text found') - return best_lexer[1](**options) - - -class _automodule(types.ModuleType): - """Automatically import lexers.""" - - def __getattr__(self, name): - info = LEXERS.get(name) - if info: - _load_lexers(info[0]) - cls = _lexer_cache[info[1]] - setattr(self, name, cls) - return cls - if name in COMPAT: - return getattr(self, COMPAT[name]) - raise AttributeError(name) - - -oldmod = sys.modules[__name__] -newmod = _automodule(__name__) -newmod.__dict__.update(oldmod.__dict__) -sys.modules[__name__] = newmod -del newmod.newmod, newmod.oldmod, newmod.sys, newmod.types diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index c5f7e62eadf05b15b938b4d1016efe87a5cf94f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15279 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 TJ7@OHwa<0TkG`MeRQ>+}CfsnY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-314.pyc deleted file mode 100644 index f93e234d17494b2d6ddcfe101f111d5ae8534656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69897 zcma%^2Yh2$b^mv)Vo7c@vz=;Kns@MQncamY1mZGv?HRA-DJ)ASYPMyo&3lrI0-=Q# z2nhs23MCK-Y)B)$kwSVx8tF<SA-xb1Qk~?V|M#48?~~*KnfZ)$ez(3`&b{~CbK9}; zvCIwp`@~27ru@{q4&Cr6G5CK82R{2(H{Wo>D{i>!hUFVh4lQ5GA6h;Hy$l_KUV+A- zFM`IQk3bX97ekZKN1?;emq1g{FNLO|SD_i`mqACMIp`=f4;_ORpySXYbOKs}9)_;w z50R21pfzlcLf4@;Ld(#bpc~Mep_|ZKpcUw?&?@vcXbpNhv<`h7v;loQ^cwUD&;a^G zXb620v<ZDOv<01nZb6>{-OeAHle9b)yo22x&|T=$pl#^Wp<fPt2K1%SXF^{FeHQd9 zpi|J7L+^yX0(uPkO6aqpuYyiPUkyDD{YvOv(APlkhQ1bh5A=1=d!es)X*mIY19ta8 zzY2Ok^o`I5pl^ac2l~~}=R)5MeGvLJ(C0zF7Wzfdw?Ll{eJk{fp<f4m0rYLq7ee0- z{SxTcLua7xfX+g{0Xhf$Mwga(@Hb(168g>1Q_y!pPeb1YJp+9=^epr}&~wmlfj$I% zFLVL=KIkI!TcPKn?}uK1egL`z{Wj>s&<{eFp&x=~p^rgVpx^G&auNJt>@GpS19}<y zozN@L?}EMv`rXh+px*<1G4vzQN1@*feF^mYpkE68e&|)`4?w>R`h(CM^oO8%=nq2+ z&>w*op+5>OL4VApWflD6*sVc73SEc(1hfqON$3Xjr=XkApN3YTAA?q*KLf2ne->JY z{v5Oc{dwp$=r2G6=r2M;=r2K=&|ikOpuYm$f_~hkWgGmf*zG`n4Y~{cb!Z#<8_+L@ z{wDOL&`&^L2K_DQS3rLo`f}*+Kwkm<UFa*JzXyF4^!K5!hW-KcE1@0eYoLD!eJ%8l zps$1eu}jPA!GD6?8=!v*{VM1up>Kr#8T3uiKZkxb^i$9`L;nK$HPF9=el7H`pl^Zx zHT12}zkz-o^lzbWgZ>@#?a;r6em(RbpznbGBlH`fpLS{aM({sj_f62xK))IK&(L>5 z{{{Lk=x3qthW;z`J<xxHehc*9q3?zM2lRc=|Ac-k^uM6*hwec?0R3<1w?Y30`a$Ub zLO%rkf6&LE|L4;3?I&Z)H(>W+=ppELK!>2;35`L&3mS)hH#7nL9%vH!5$G`Vd!Z@l z_d(Op?}uifKL8zp{vdP|`a{q$=nq53p+5qhfc_}-uuIF2fsbJK<Itnfk3w&R{si<U z=ubj#hW-@v7U)kyZ-ssgdK>g-ptnPR7Wz2o&p{s#{dwpUpuYfpBJ>xbPlEmu^vTd) zhE76%1^N`1mXCv<irue5?|}Xq^l8vvhdv$p8_;J!e-rvl=qI4hg8mkC3i{j7JE6Y= zJqG<<=(C}}2c3rgKJ+;B51@BJJJ7qKe+az?`bW@vU0VJad;+^af!+uGQ|SHBPeLDn z{u%T+&_9Ph7y2pagV4W#J`ehr&@Y1i74-SgzlMG>^lzXqfc`D?h0wo)ehKvNp)=5b zfX+hy5jyA6@@eoqcK-xD3H=Q86!f2=r=kA>Jp=tL^epsWq359g27L(n@6ZM4e?S+Z z{|P-0{V(VR=pJ+l`rpupq5lJ2hW;-!3;lo46_=L(17FM^I(Z1$Attf|=n&|#q9M=~ zMKREe6vaW0C`y1{tSAY3RM9Z#C5lp@FIAKVT~(9;eVL*WP)^Y(D6eP?R8TYyDk_=) zl`O5K>@cQPwLbz{Q*;!xuINTkS<y|P4MjJDHWl3hswlb@R8@2vsHW(4P+igEKn+EY z2VGP21W=&piJ(x?lR!;HPX@IVO@g+f)IJ5%w%R`xw4>+_(5|AVf!d0m4*GIM&j7tt z(KA6WQ}is*S16hSy<E|qpjRk5270BUXM<j)Xd3itMaMy3spu}yYZToLdaa^+K(C8Z zdoQNftNjVk8x-9K`YJ{DgWjm<0nnQiJqPsFik=I4v!Vw<U!&-Gps!W*MWDARdOql_ zioO{1b&6g9dYhsbg5Iv^OF&<*Xa@8SMYEu9h*CR;=^NF49`sF$PJ+H!(J9b76`cmX zOVJt7yA_=Uy+_eG(6=ah2=rb>3!wKYS_FNoqVu5lE4l#sfTAVPw<&rU^g%_-pbsg^ zf*y-fyMpQ4)&3&r!-_6}zC+Pv(03}j0{SjRF9LnHqDMgAqv*w;k0^Q+^u3B+0{T8h zUkdtuMOQ&Tpy<m$Kd2}N`XNPm&<`srfPO?#5%i-`YD<`YOzl@eKdxvE^if6Ypr24w z2K}U>4bV?1+64Wyq6+9^imITWQB(u{tfD&T=M*(SKd<N-=ob_PpkGuJf__O+6ZFf9 zTA*KvQoDue<7&SR`c*|cpkGt83;K0MZP0Hh`f|{3DtamC6N+92`YlCY0s3u4F9-dO zqE~=^SJ5j$zo+O`px;;YYS14j`btno(Q80|sOYtzKZ;WOI!u48_OA#1iJ~`v{#4Od zfj+6|ji5hM^d``sEBb2Crxd*z^cRZ02K1MTz83UXirxbHYejDb{f(lp1O2U{w}Jjn z(c3|PujuPR|Dfm{pnr@~`wf^rt@hst`X@!-1p17kZwCFdqIZJ+MbW!JpH=j3(7!5r z59r?%eGBN{6}=bqABx@w`cFmQ3i>Za?+5KE`T*#^6@44%e-wQX^uLNe1p0qbY9GV& ze`^2jC*vZKF=BiebV$*6fQA%(Cn%=qyFhV8-wjGA`W{eH(MLeTioO?=QuKYGw4(0^ zWfc7YXhhKuf<_hn5NJ%%4}-=P{Rn6xO6`wgI;{3T20EhX$3aIGeH3(~qMrcWr06F> zH!J!n&@GC78g#3okAZGe^fRE_75yyeaf*Hp^ms)-4|;;4UjRK((Jz9Yr0ADGPgeBH zpvfq;zk=y0YX5Q2Qx*Lx=nh4{26~#JUk5#1(QkmBq3Ab3&s6jY(6bc%7HCS*Z-ees z^gEzqihdXLY(>8ZnpX7tpyP`E0Cbn44(M)0e+arKO6?zEx>xQ07<59>pMdUD^rxWv z6@3!)fTBMGJx9@>gPyDCQ=kVG{RQZGivAMxMT-6k^n68s4f<k5e*=1fqQ3>bP|@Fk zzC_XAgJu-{186o%?LT6gQ~OVY<`w-D=%k|0fKDm;XV7Uy{{lLr=(C`+ivAUJPSL-C z9#Zu0pan($0a{e_pP=)K{tI+L(H>|?(SL&;R`frhWkvrB%0{XEf0$O({{KK1K|{!n zag`m1kR9VHI}V|HimU86g!U<}vf~i?r?|?FLujDlDmxCLgNm!{ID{4|uCn70dZ@U{ zjzego;wn21p^J*E>^OurDz38Q5c;UN%8o;5q~a<&4xy8Zi|i<xA5u1fsibK<3|dum z1hl5;C}>^Lji9okn?M_iZU${Cx&>5GbStQ;=r&MI(e0qRqQ`+6iXIQTrsxTvK+zLH zp`s^&nu?wbYDKA?#I&XMPXTQ!dMao~(H)>&MNb2@6+IpF<%*sGda0skf?lTRS)i{_ zGzEIOqB}vaP;?CRN=45Gy-LwE=+%mjgT7MHU7*(}x*PP`D7E)sdY#(e3wphx6QDOJ zx)1bKitY!!QPBgSHz|4!=&Kby7xZRD4}!i%(eprGtLTeBZ&CDo&|4LKG3e_Qy#Vw! zMK1)sUD20-zFyG`=p9jNXEA+)+RuT$QPDi;n-rY{eY2udpm!=d4SJWNGoW`XItzM_ zqH~~cQS=b#y^0n<?^Co0`c_5fLGM>|0rUYyOQ3I4^f2gyik3kilGMVrS+HmrR-oU0 z*U;RdrttE`J8pQ^hvPTg&`HnC&MYmIc1l5KWM*;x^wLE$q_8!Vp2^o%4IZ5-G|Tl` zwh)vX%@byKq}R@eE#@LrF_fNJ^Ol*J^-`;B)|r_~rM_$U@JuydF4dYVxyq&wRBgEM zM`mhktx7Jq_e`_utj4^RdA?<))~p2Ar{=KQ&t=zhLBo6!5TA1mXB=1Kx!jgZbVkkQ z^(Ms^@*5>`zEzqtTMMyN3S3I;6HB|z^?I$>2hGvtZDOX8E3B91>b@us&omm9l9i+d z8J!7=t#Ykyrp!zb)VB?f%mmF=;2csjVZp4^Ghyu>A2w`|!gFRCp9y!Xjb^=B^5I)+ zrCb;pn)S0yGfd31n)UU1bF<{qnVQ*lWj{7MJ2#sP%kE<%80$qB;qa_0h}7)E=Pjnx zY<9&^dNvn0e@BR*w3yp0t(Gg!3fFMmJRTO9ErlU0Wj2}FT(jU@Q?tdQ*^bVZR$H|- z7eQvW6a+4{BeUiFO6iJuo0zSXo9&(?kEz9CZpYlmXDh8zBPiEg-cz%_E>g2~&#$v} zSIi@zwX*x>_-v3X*H&8v&zG~UHD8=_Gu6$LS^GrN6-#DLGHrHab8t_wRdvjko?FV! zn9ImqHhXd5J~K=hgU*Bvmt0)C9GjlYJ#fEy1Qs3JW#)2?`318c2iKN@def(WE*Io| zxlYXGt6DIZ?)8xreIz4urQM46I6k*ps;!l4CD*to=GJrNP@B629KoVda^D}t5L64U zDIcC&FO{0P^=<>b#o0*H>WzeO>eHg+8)~}Z+jVBH90V<&&`Qo#c4n?p$~i_EovYM0 zTAt00I#X|Jx@oSSuUAe5rP69WsODUqXVlhb1%7_m72lD$`s!+_uRR`}t5=GvE#c0& zQ?6of?Amp+InlMWm`CU8)m-Jdcl-R+t5piP96A;tY1Kx(Mo+gyvE*D~rsnF`e8L)) zE|*5#)C8!Hl`?Zd)wiYeTu^r{b#yM+rSV5~6zqmg|B)N#!g{M#oUa#JRlaZEyU8ps z1cmid*bH1#IBd4rLfseh_*@vyZ{%ug5sQW4$sli$h~w!}EnIipkizV<6NXFczOThP zTg?ScSE=c_mLC>I=5`zFrN9U3=}eRJW;r(Bm;Z_RTu=y?x?M&Z3zw&n`CM4N=K%|s zn)iLc(fLxooU73dHv?Zn&MsST1%;AN^L(k&@L3t1FNK@Uy34`Dd}*s(C^g|Mi+y;0 z%|Lp-yy^zZk=}9|ov($DP~YZjgu>tS*-XthT_=~GZ~10*WPZ1zX$<SW*UYGuMKET# z>;k4v&N&_)2I)XPb}|=KP6xhEpE#Kdcbh@EwB?eJJ{gVZBPU6-|M1b1mGVwGpme%l z9x*$MICZj8HIzPCX}FpmKUvKc!Y+GfFqb`3NBl8zG9Xi~qz;=QyI!g|j}s@i>epJO zZlfA83;Wu*8KNFy?Bq_VKpS!S$((Gj`!9~1>ghH!r?SnQ=crS;LbL7+nNzu1!4D$f zX5Hm0bE-rc*jGnRm1;F#HtAF4RmWT7r^<|5-L#LLs^ps8)Qq31)O&lP%&B_Nbc5Ov z!9lKes=QP3qnoqx->mP@i<@Coy023uU*xA+HQ&TfwVHIjZZw)WJ+stTXDKW!hOyK0 zy-686y+G*{J@=(gXMO*dI_>3y%;`cj&X4rA=m|5dly+P>jGitvn>{8P?`GML<frMZ zUBX9C*IJEA-Gv%H?Q)ksU9UJeak^eF&gYsr&&uOitRWs<bL@fN(2WR31g?}240B$- z89g238tXnQV`|zex2*^=rvtinSGwT(maF%PGYi?i;ut-%vbYcp$mugVKOo(BCRZy~ zO8Hz6b{TY{YiW@a!1t7+XL8|Y#M?ORI8GfsQ`+gu0+};m)Kb7ma2C^qe5JPsQH$QX zNO#jQDlqC_)n{J^d#2fRJy-h7j?dBX8PEJ@cJo2m^?IqZ^R6pNpDlQiAak}Dc}SmK z^DSufY)uAM*TdfAO#AA^Y@cJfN}a8_9%J~dXMwYIFD8wi4GIf&FIA154Rd)4&=p(K z3ASVB7EfmB@Lg+4pUW<+xWYe|^I<dRa<!6UwvlrT1D+?-T@nB0u1L~b&PTh}QODKe zwYLT)x?U{>Jz=BT=n30fCp}&xc1xWrcwRpjt~q|qoD1tUC->bbSVU`^jMzs<#B#w8 zA!^VOU{qjK3aN8m^Z>ce?Z~-SrJU>QHZp4EBW^XDQSm=ymZ^ul95MP3{IObg-TC-K zr9e8$x*rH1s&6_eV&tK^bd451{SfmTgPDg~p%+zCv_rEUTgZiBJ(3*8)!1eAo7B9& z;4^C58$mQqj4Tv$4fsmSB)w29`*K}Cl5`?&M(};+WpshrNc8z53+1(ST2GNuaskH{ z%9Y)vdd-!1W}#foJ6;}HC|_&&L7AY<Qa}gQo%P=2t@^~X$hNP?IO_fOw7rQ1=AXTt zd3vF;<$Bn|0vF4{Y`y5(^{BJ4d}XMbx@+X4VB|qJcBB?suBOr;*TqgO&dFFKQ+-#g zi*s3o!>aeXcy{rmE7ZlaOIcTVix)0*r-(-uv-20SeY3mq#atoB9DdhLLdN=MhNBp} zbuW(fZq?r?#{D&)7EAweU{vp!#T=7spTe9UMTj%lEY`O@J1){on<oNDLsC9DyhsN_ zUYq5DXJTwBIVb2IHA7#{Mwn!led%NtOHo{z#d57YZ}CnD?ybPFMF!eR^p#PJlulGQ z^>XcUdDC^7>BahnXSBt7Et;=qF!*6`VzKUZGd@@K(917J7whe%fcbB|5Ha|TT|3y% zb*i^_E%%rAEnO#cABAWF(G&NTmg~h*i@wxH7Q@0?$+!E(*3yhCko00S9%UAHqp^N` zahGPd8>Mo>%w1l%*(~;_Zp5rD>n@UrBU0zRXpugjJ?l6&eV)<5Rl2~w*~RGjQWXV{ z=c4na&`H-5z-Fn~BL|%?ZFj}rF-#2QImcP!=b29LbbFAI^W|z#cl}4|eAx|DAlES; zJ`Y#)^~<B@>&<G*>qRo>TiL}+u7c0Es!P7bgY&tw%jPoLmzN0}Gr9__BV7xx1?&28 zgKg$QA(DVbE)<%%X!>xW=)3We3)Qu=UXzfz;HRLe3k}zF#x68UwUb4!yisGekn{P! z5V#>@<U*_2Xt~0eSjrWuIs<auZfeO-{KuAZK`t9fP3fgv)S8zfl}2i*<f6@pj?T#_ z>8`#my|nI&I~5JqsU<(2rI*THEE!+gT$9T4PNPeerM1wr_V^Nwlws0Ob<+$Dt~$n+ zkn~$?ev&z{R1cfIjsGUGSPS5)-q}`UdvXW))|WDInP02hk)`@p;I$$|yj==<W+S(B zE&BSX%u<l^YLGFe7=^A*ZUke+58h&^dRcl@45f;z%n3}5QqU}y+*l&<H0!f1S54`q zz?aOCrEoV~@5@_isp(iewbb&}zSL?oys$R9v<ox)bYK#7s_PDKcBYjeS3nT=inya@ z-S?f5UOnthX4n^O+-xJ^Yvkb`wPEsME9UgWmsY%-`f#P}2h4}P3_Z5o_t}Z%^K+uu zVV3Ed;PTR9Hj?Q_mPxeFDTcLD#q}p+X7KIM+*}uVRNYQi^QB_ZPZ-D5PI^E4PDag! zZ&KWC+-7Sby2@z2xV?hp?fT^5W!D@>meCUXVKBp5m*?Kpvj6xfs5?Kzv{owmJ}iyN z71-D^W1#3$ECIOexVq0QuSW{}^m5s2lz~l`pQ9{*)eE#aoyS=Ow|Kj=HI!MkNKbR4 z*f&oFxoT;<?&rg)WzU7F<<JjD%c1XSmz$1z4@-&k)nU3@M!+aUcE$}DNk>!JMJKVQ zv*%}5Tqd(<T_PBD3EAA18^bene7-3O_KXBB`kr${<t$fh7|M~{k<J!;oT;p@j!bs_ z<c{N`G@XDSWwTvn&q%gh+43{~!`ZSeqm;b@E|aZ9Lw`D3DZBA-JX>i6qBC|<L5BHD z#pPpMaHT6l-lTJz)6@Z~4CE#&gAuj$)68tO++2?gHPOwQx3O%kzMUsNZ>(3!aFp|! z$s*GDz9L&kCFi>$Q`dF7|HEE?SN7F5l5OOo{wR}eptSSfxK=q=u5GxeQjz3w6olN~ z#}eaNk?OH>ecWg^D6kaZ_&k*j{p1==Q&jp*R2lZIquCZcCJJJ5<trhR-HvogX|T)R z(JYGEQuR_PC`X;~sM-19a>eU)QY+^@*R5Reyg0U!%U4QFQti{}m8dJqtmKN}3A0YI zycT)z;!kQNntiSme4QT_*f)k8UMc1Jr}$}XeATTm<KfS7(5S#d&K1v?n7ZXQjxorI z0>LM$<oX99^!lZ-m36o^oS!v6BP;7cRBne?$_)3rA|Si@acZUFBy^B#;iD_{V!i3( zJIp9h3n`SS!bew7utl2P)QX=RkF2zUX!bj{LKStT&$JjVMH4H#jlL<_Em%0+AL6Sh zw9MnJU3-bB>mV`oD+{sk44jI_r_9A}pF47~R;G7!DZrq@Wt60gLB4OnX5wN{Ia!n7 zo{27o4vk%!?UhJUm%NBP0m|0O-I4jor8y}nSiISCMVq>Gdco3=z7+Lp<CpU1OU>>Y zRz}U{?Z~B4rCy+AcZ+h&TbYl;-WW;kc%aG~p2J4_+D7`)dL(&X^8MCrm&#!)S3xeJ z4KaXJS!?j$?{P7!)TNf|5;B*lN#`+hxvR%dU5>i5%cXo*J$8A`4=f{>Q9XN2`<U=! zS0y@fxqf-Y_w4D*fp3|qEBD-ODHyrZqj4O$@^Gu<mo~>KgkIIu2<Av9m5NG8tRo3l z!u0mK=__?FU#G5k`67KKthg>ZbER4Gs*I5<OmTfzJN_aDr=Bh{EoMtG(E9@V#iH~h zrIHhnMjk2AO}ny8J>nTNm1`6$GQU1QmDqb)que-tb&HSJgX4|eHCc-akE?TdJkOF_ z4UxJNm#qm?hdS|GKG&EUYA5eJE=Z`kv`3_@@7kGG4~h0u2SuB!7S|fBPSQ3x5N*<I zrVh0ecOEZ?xyNppO0=ImFp5T{6Qc_za0~^*)UbpEXv!LuRY&WN)*LN3T5hNAJYL+* z!I{CMLpSiby=M>l+?uiP)moi)hb~46<oqcsklHHg)&fz~EeMQ>y=M)ImJX1}LS58t zkI(e%=$Je)HPjjFbw5Ey!xN7kYRAcFI2CI@KF78NR2CA26nsxyC)zjp>gcmQs<wST zrxHP)0_cqPew}ZR_WJ4!<-(vO<rHf_?(=`PedFi&YWv7_A3d;gi#aN{n45}`XK;d_ z2k-9;L+-u%?)yoERCY0MBs7wv7Bc?(giY){ePGec5^IyLhA+(<8x<>4af{2?s8|WL zUW<;Mij^JDEO!iwdfiqW;1TxOD32)BxC})+BE|#SAkur2uD8%h=w2P-OXOtJ4%r>1 z6a@NIO%6&`F|35dA$xo@4g;FsN=Rg*zU<T?(H@w^oNW(cpHg?95VbYp>_s4LkM$Vt zx)&B|@)coTp~i`Dt%a8WaK*q3<XC5-O!?I^RVv93S~Xt)18W?CP8X`e_Jpi1O&*(^ zar>A^PfDgj$7*Z$f{7F0;tak*T1TquwG;D>{;LB^3c)ul1!4P1Gl+@Hlb4abCwrUP z<Vr4BD>dm;kFxez3HsV`JLT-c$A;RmJCC2<<Hz?{!7E8w`=*|F=kDmnHfkXe8`*2+ z<0;$`yox|RYZ}4Ly%8)e`4|qh(=LWa<N83i^aPUWZ#PuNLTzAqT`<^B3PIUV@~Y|R zOUx5`;_XhIuZz8&-zZ!cd%HJLqF}l%7;;7B`e3*9eAAQ>-GHtX8>;`fK4|Y3WxnbI z4z*n|1X%jQ5AwYc><#1^q)PN$VJFkwt48z6<aFnnIMN9yNtzX1V*2=cGgn|b9=1o! z^0@eDkDB3LHNoB19n<onxTX&1Ds6m1{-?Qjcgj(Vd<WgWITQ03ZM$pXTgO02pl}s! zPN_5O_S+HXaL%^gSvzD89$?&eP0lINe#)SpE+^ad;58x2YX-Ed3$|Ul4v<iEmmd;} zQij7M+gaH6$9NP-_a);Gy9Z2kI6zVf3+=I)?A+P2lkCu92Tzgc7|IKsSff;(N@-m9 zAxg}hWVv{?80I=DXsIA*#G|X>W+x+t;=T9Zf6s%Ru`U)T2^oaBsd)RQ-XXfN)|h6E zB5dEj-?mgM$o8aC@p`AQyjEj^5tQ0b=?hh=P8US$xGHi-X}Z9cwAz9FHd`axiJ9#A z<M&V-@f=1<Py{BB=aPZK-o{oH7O`!W$|4Fkh((4Ip%I5TmjlLB#5n}xLdcd|zde&m zNwYV{_G(J~FiKk02srFH(EC7adaVo$$r;_xNve`Lhcr~n_tJaM7|5#Z`IO}?BuZkE z&7c-jvtIUW);huW$Ncy4gG(a#kbFFoi?)nT4Fw+-t5|M*ld(kjbA3|_d3}@dvfJvr zAr2@b`JyNkk&m`Fr{cuCz1fMc>2FnkYy1+md`rQRURI%l!7{Nou%+f@Q)@fTe%49V z`jYunK3`C4iy4z=k%1ivbIZ+Eqm#6)u~LYHWTtI_y9H>rq-$XJo2#sq@<FaMG&@IB zL-_)Ufz_h43~urHYqd^{-M9pefn7$fMN-PZjO5FCN}ll973nAPVY8j#XS%T~_AV~A z2D+|ipv1&3nNlY{JF|R}q{PKUcp9D{U#bHmsIqmoJx0}(CRyLrt;58WqJCJEW#^nE z!bdc)qC?rDMN&{=P9-HN;d*C?zu2bywE0Pxmn5qiwV*I{M9Mo{7v{o?B^t`Ct(0$- zD@8>G^reh;*zK_4sT5A%Eh2Ggr&89b0nxUH$!xeD6yOJ?&f@BwZMC?1XD5NTfO+9@ zPx&7H6Gl=?51pR9cy?i)5%zFDe-nFOm%1~pS#YyCFW~mr(QJQ~0&9;-F-$sb9+f=I zI4!&U+GFZ@I%Eu|N1z#xN*Q=_dqPZ<qqo4rzByo@bNjaa>5T$fLON^!XOFimK260t ziM$x#xLmW7D%L|Yrnbv9Mb@bRrAi9bBAj$<fBb}*Hm?WF-SfpF{9PmpzE&(ghNyYx z@zs)!H$>|vaX3+8q4a9QZreE_hV!-q9gl?S8gA}SjCVLdRLIK)_D(|gu~QQXGY{pZ zp-6)-NhP?xSKZn-?*9%Ekj#%tGLyCko`{mZ8AFMRA~WFoadRfz_er=+ce}hud3iM7 zZP=ALUo3y3NU9o@R!B-DMR{TIB3mwH&X)E`%loKOexp5!NNGgX+zt(nUzd)mfT)Zy zCE5e0O?kgnA9nGOdPqn1F5XH5;K#|XV<NaJS&W&wB*t!6=U+jT4$+ky(5u!_3UE3= zxkiYVYCY%spMkw9s%N%fNqFQ*N>zx37Z9Za>jN}4EZ>;$qeHeGOd!T2F>*w~McSyi zL>c#{qazDcN}6#6<vZsWIz#zYSE;KquM<Yu*Q6r9Bx|6euBzKtkkI3^7f)wlqIjNT z5uIUay#i9wtqPhtv?t6Mi6@rAq@A1)#$_#RvxLI0T&&zj>gaIIM!I0J^Tj=|yDwZV zG#Z^lGI$;;OvPpDT97Pie_k#YB-))9=Nm7n;^>tjh4o_4HH7rZ6Kv#JE1}!k$(Nf| z)Qw$>MtKJdxc+0pT?swp!PgROR@jtAOCwR(9=G!!EJcOKS$?35eS0>qiM@fMCtFeW z(uHXzoU&JR>QIo1p#?i6gHDfa#P?mh#NNP>wZajEPFxP4km`7$f!wY`vmjr@0~6M& z+}9rF)XFhdCI~vrisUiufKp{)2=+|)X^LoXILC38=>iN8jFE-Mk}4cxXEf(%!O?X` zt2@$6ay!M|$l615cfeywr(75++|e15n5BbK>bp7fKrIdP$@X}GlQWYH*`+FrV}WKI z8(0$72>l1DQlasJDdpnqPZ9AI<`d-o=%A3$BR5*<qR_^dj7*WI!Mz%*VYP<rm}rj> z%`<D0x_!b$R+FwwI7mG?No!#LQqU7Vour-gAsX6|ocSRhZ9xu4<zkN3{kKQwW)~-C zXR>GKCNH6XB5a=RL%yk^dHq6Uy#i}+Fx0&2GUH-$#bzjKWMWJN?~y`I+HoWOq8>bQ zsr5KYty#DkPkQduNjsM$y;;E@QtHGCt0#y+SYXxH(;MY889BI=RUJ1WGBRg08Hrj3 zyJQL)il!-DPy3~qt_uUk;5yOcQRGso_HAavXGMpoOa=0ZeX}HX7~gV^ib5IYQwB9t zUdyTq!M1KtKjw~0AsddW{t%V29J^|dsVQufo2z9+@DVXOH~X5;X<sN48T*1#Rib}v z>o#R8!|0>&_EFKYSy>+QpU!NA5x%j<-6y6!f(LJ~#3b93{X$JoFdyyhPSW@sPPeMl z=Wys#9qdf^`0(FvKkoWyBe&c3$Ln2Op-5e6aZ|O_mBLOc@}!GYO;o<pErboxu<nx) zeco>A&wUhwD|=ZOj0%0IJ+gzM*asaIgAd@Vwto=s@!c<w_k^4}U_QEC%2#PLjB|1v z58g}^3}`RqU^K3&IT0v7$LHAOOMp0YB~fHZM`|eQ5yW_am|WllNsX@y(XT5|HAA_e z1zapd?MVBUVRsHt>&6ZU(nC}>s0HbzD;t)QjRF>4c~dZd*Hx2Q`(A6T?}Q=okGXJB zr&8IFu}E_Y8j9A!`uy#mI`uj7t;^CIq~|WoURaQ$Kjb=HkgYPSVz5l)HRp4)3%&=@ zFbNH#r6m5RbV-Szl5d<e`;A>SExm|zM%AXi59-s9^R89s)1VJ8XrE>_L)R*#iq7|% zChA(nSI1!eQ@2faI4RjZcFE{IT2Ql<YJ1E~)2@({W+eGCys1a9sg`@g`TlFXdoFX5 z6P%O|!-Z&7gc(-7ipTo8i5|bQP-C8}uFzMjTC=NF>B0LO)N~;_CF;9~k-{pQ)L8jp zRomjR(bUygd$1HMM@QSKxeJRk3)9cNo6=4c#ERZVh}dZQs}*gAV&^#_E%MF?dk{Ho zIw>2H86rjqg>hO%zo7!7wV<h?JsC1}#Zk@OwXq)m2aR=gCa3jU`!HX$<E)c*o|QCD z5RKV2^oT2>n*V6Sm{D4bb>aw!-t)Bio;sjsVtYO+?P@2+ky$O^`nAUniM+o>q<&si z!0jN$W+}VYMD$ULka}6<?BPB5gSqY=T!ys9YQ0#1q|E5q`OcECL#2@`T3&=JBDuxl zN(6_bHez$fj!_&jW+v@e0X$|Qv=G*@6jnTTOvpM!Dy1NwS=UKRVMhhwbqF7wlb<ue zvc!x3xuqo`%?1VA{ra(EGNFkQbL<#X8u(H~;k^-35lt#$!Iw%zBYfT2<uUB+bUnz@ zN>2ziMxGmL?D5{iK|Nnd1Y6RjCG@1S^0FLR?!+5~s%VTw+!YHcPO);Fy!XUG>gysB zC)<~)_;^97woOA(ua41j-Y@~njzp7!VO@TxvylTpy-5Wq=muqZf-dxc#b^T2$Z3{y z28ep75NPybPs~!8%s09tjq{k;8!SPxakf@$PuTJ6Nq<zE(wZo!(=?k!_4IZ-<17lH zXvQQbVKimhl-hM?xF@5d-K3HUlzzYmuEQYOr2r(37JG6`_760UQI`-s2#(KD_t8)e zhDS-jWJwTf7hHwN!!lj8jZAmxjv}Jq)8VnAo+NLl1#if1OdM<$d3@tuQ9|NyTpjMk zWkTh$o^V!O-M~(6O3CMBRa9aVS6vL%iE4?pP)(U{tlrs=7hJ)RJ!WV8CRbR9Ac}GE z!{HT<wMzml<!1JAbyH^cQwL1$iII*go7Ijhlx|QfPC&|M(x*u0+Dm7aaMLU_)*Jq_ zHiAp?u=M^jk^|cTMi4FLP!HStP~F6uJprA>c5!|N=7<+Kjt?WZ$h+`wOB2^xC$>m* z!^c6Qn=W;Al6Ih<j3x_uw4X>Nue)pwP=fy45_Uk7u$6F$Pfi4=5<n4)nY%lkL}NE# zks>B>V^*@GJ#%A6rgu?isA2loDH(e#PBtXbU^<89N$nvPOQo+ZN)Z%guITe#?CDL@ z#i*-16ugwc;t&5_+eksvwL3sT!vV$BHdhyLtpQ^xnsF(+VndO(4#UzqisDIKToDFy zl7YBffk3D@?ojC(9g6ZG4mKimlJhg!#d{vmub^}S*;f=>*sw}0z6guv=>Vl^5#?`; zD;J111|~c;1Mqb{aB;FM8~iJ1YQpx7c3H#ZoZZ$iscQyI=8Gj(+4KSjx?2N`-LE72 zz9?P;j)J?5;TD|knBZIiahzUI?t370sPvt|r*L2g?IfC{T@f)Ar-t;h2)Hp9c9PC{ z6zv^1@;HG;86T`A(U4KW7pe1LdXBcgYQiP9GhDQ*CoGj+!@fzScSy7cmTfV*xuTQl z-eN(sr%3&s7F1bN<}XrZP2GwHkv3qR6AcFDX$h+h71t>Cw*qmMmVz-_9KetWUMAk+ zvYS@A7GdsAq9ug*g)xQO5dl1ZM;t2leuiR>u6G~pA4n*99Yi__9Ve{zhT2c=pIV!r zX}1%L9VPphQ*87(h^cGnr{xw8X<Tikk_U&ZaEi5%T-y@8-SQ#hEyFddmXxtl&&1{~ zCg}{#jq)@7!;Xyc1QKVYW7(E7bwJl48XQ{PigaL9p%VxU^e-P(E7M|~2=21#;ocFt z)OZoviErrI?*^xU&=i1OP2ncF6<2JciV|yYP`3k?-ivavN!u<kne47Oj;Xz5R97T3 zX5_G{h*2y+_Bmta_nG$FCxZ7&h7$Ag5lSJU&WsDNm_p_0UCjt$zcfP6WaiUFkkSYi z&d!t5w7M{RV)2k4Y-kq%A?roa*!sn%$RlIpKpi?Wi%yK2TBM%9G@&cjg!b)Z5H~kE z50zx{I#d!tjfPe#=<hlvpMjFDV{}b6PRWSSPRnI5lX4pjMUgIHnC95wZYL#B(NIZR zu0$-<XDISXDomx?y+(%AWH>73E|sxTDYct>lu9)xGi<-#tH)D9w+?pVCueOBbIDfa z;3|haBdPI#nOli20(MQ>?KLDPX*PVCfm@cueE;g~50Eg}qsO-Pwz~jlvRvAU*pq6) zXno6}NOvf=#FPWK`0kd@6TuG(119ap91&B@7d6L#SlS7v;#$foqLfNTcC?SJVC+q_ z#(p3tRhR;EBM;e+m4paa8t{`~F&(hOm9eW#t?)}caWN5*)QX{~R>YVHM90ucbHk6_ z_ybF2*p*QTO~H^L!z?i+)QV_?r$j{*F{U{0?|wDRK@ue~mT9>sr-jn1$|uS+q>`#+ zB;N|gtJH-o-vz6M=iYlS3D%vov6IWQT1wq1z!Uoi37IDJ3=sr$b*YR&*rc(@R9p)= zP=(hzM6wu)2+^}8QN{S3X&1txg10oPNo;$03nK-^5CDLkz+Nk27Hqxn9i>+di+<{u z-H3#D)$<=K>GesTORWv7Qr{eWK_q=J@}nW#w>|FL#77Ry-hDVDI%yw4J0n_X^WZ<* zuhWj4`M7LBp~rEzHqqyO-1<D>Gb}BF1N6Zqx#X#n(7T?fkc65a(*`d~UJ;LpH$Eu~ zknN#UcgPUDY8#S=R#`#ZqsCTM5L*q)Qkkn^Z__icQ;EGN4bnj{)+Y3BDM^TE`vU6( zfzoy$(u#bN%)<d)+A3!s>Om)I*Hj6|nGNy49TE2ZnzJ}SDiF3NrE=MoG@4ZbouO5k z9ZNCn%8W%V*_SKZ>TG_vGp%+yhzwrt!XJAHCDB4jbPOBfkz!S_kD<)}L5-cRz0AB$ zuj0~Vt2wq>*>R;@(S>5n(q5uc7GG4nc2P;YyGtuyZ}B2!HEC&*vYJ<!4&M8}%4x$+ zT<-lMnz))`{JKcW(SoBgH~wh7>JJ51dKHsyj3ULt5EzA4>N%0jj`nvx;!46*RhIIX ziBXuTRd=zNZ(vdNIC~0m;5M4oO5N$s)6u15q%qyKr%;{Z2Ji(nLk?{=**V8i-=<7Y z6KZz#!tUhXw1(X;a!#A41Jt_Wi4&TgQHk4MlEx=Sox`eJn#PwH;aBD7luK{$85xv@ zT`2N5>|=_pK6v+(_Sma;pU|p*@NOZe%ybIZu71u1qD%))|5oce=z?K+y{K)9>7TQS zZLKz#kXGc}WY9_Mu$t}`ZI+f#%U2tL-=919oQtgXtfJl?mNg&%MKJ8_jQ2_^d3uGV zcRFC4=L*#V+}x_oDVK_Ah}9752=s`W`0y++aHs03-9ASG4QK*A)M9Rl?jcH`b4mn1 zEPe6_x6?%<Ad`u;Tq6?wQ(`c|e~%JtMte>*XeUNcJ{H5*R6KY!u}N>fR+P?cO*?a3 zd=>`oU0N%;hLQ3&<WVZA$aZLrW*Q{8AejR4t<Jl)`^ULyZ%-3`pNw;HZrKy@KE757 znOaG^X9t%J3_)&93TUk)t<D#a__NM-;PxH4cZA5fvri+(L>xpe_P!~IqF;(BOLizG zRE?-?*r$CI`#stWYR71W1ZS9ipvGWLwlnLw%yx2(S}Mx)H=(vf#KcOW|G3IpNz<TC z(J)LQ%6?lWOe!vzMSEC82P}z#vJk*}X@8gKeD0eQiB~TL*=I~q%XGv7h~#Cd8QQ;3 z);u8Np~m%tsM$>&u+L3`tX5Hma08-VcsMziLq}C#lQM49o1LLXog7FDuQ!DiF~;^U zD0AFOKONP%Gu!CpTuI5mhS%igAvqE=eA@0>Bmu)~20N)ji)8`XFZ%m1Aw?T~$@x7% zyjo*<z1m5f7NV7GKr7inKhmmK&+WtRc1OYtuh~V96b5W5S3YW?RC+rD?<LV5C}6GC zJ42@_)y@zo$u&Am&&ZRsb7?tIO6oS#)#d-VTqvncL#Z|mkmpWWD5vvrH%(5<44lpf zW0BgNmYKM=%%aR+{YL6u=L7Wm(m1)MQm?JlRq`}}DJiiZZnHy2+AH0i<iOdBZX+@r zH+MgCHv4HT+cyj2upzN)HJxjTq~miP%I=IfH@vl`;#x#1-mZl@!(3y=B|Q*l6(qw^ zTzIw^+GBE~CJo6>DiT#}4K<IIh61l|kuUg3Qi-l(Ag}5gfaLwOUCv3o!_JPlnJ_tn ztDg4Y?posDO3zM8V*|k&DUCsFV{EmhY=t|vq!P^-_1iA6(@JdBiuP@ZB@z69blC~L zB$O$8Voh!f?IdbSV%$PSk<!n-_@3zpUm{UsBj344mu^oqWQV{$S%;g2(O=pOT(PgI zq}@JBK_vMK_mC16(cZ8jwj1^;FPt|&uE>R@gpRMvxT0-LkR(s2%s71Ys*gl4O0VBe z>3q?4Y}$!a+p<X&$PBS(&*r;j@QBO3r}`D8!aM7RqR7SQx?w%ldaQdDDruO|dFOg` zWhyCUy`pQDQe4k>_sHz?9;sNmA$oYu=JT1}4|XzLpUO<0qXrJ9Y_sE-${9VLLW$Zj z6)JXJ_QZB`%ITFvU~9<khDPag{bB2&by+`<P(po&>s+S}n47J0E3BkorzGlEGp+B0 zmCn$*%yT4Go#u$0sP44oinpHRVes4W33Nb<T(`StJHzf0S}J+i+4Yv2ZWiby&SYoK zE|A&8x?ED*i9yJt@S2!`z7ICDE2V^9V@u2g<L)cGrS8lE2<589_S+m$rtDMavsp!1 z!Swa*j2cuoPYuJUW<QmbzC+BiOic3u3d*p#+uO2n!JsTF>sqpUGShhEQO%TekG8~p z+j<U(!!1pFp+i$`k_Q1Ty(UDs!`w(HmQSxp)kwUY5x5p+8;s)OHWk+v2GVxXtV$7U zPWEVdRK0X;uI|NC|H_ZXjx^<)qqTKgF}AiYtHWAt4gFf8y-%dVeg6Rfz4LTh9QJK> ziX2XSUYGkmugm>DjU!r!(JHkSV*fIAPmM(D)VIiMCGj&WD>4J1=$a<zd#;)@XDJI5 zKGICk(ZtuqtU|IN?^iVhLuW)Kl3bV7f;HNlYzC1wC%tmirgrzAzrxw6!;^M%GKnD$ zxkH)o(zEU6iNFh(=CWV7b^Z@nDB$2jC&raCd?5yAKJp0tGheaACb2p|tKHI@f;w@z z%vlOe?hPVw@RcB;XXh@Q_obq}TtaW0m1Ykkmzh35EMo?IqgPitoPm98ncJfII=@61 zSJSZkGJke)Hded&0VnpJIY{fqs?Ajn0n5qNHn&MLVXscIWZfB-i>0`Wx-(Q}Eqjkz zz`|#19mZ%M@xCYhg$!D%4>&QW{D42(7^rt2`E$CFKZnRM3X9ZqrdfWDU(mJ{zu4LH zXX(ge<yu+x8Lr8~9~aq_r&Rv{5bnS}*pvi~9hYOSY`L+;J@&*n!Av~53fALE19cH) zm5Vz=XGQECDod%7KBZAb^-0Kb-?r8TlmH?TN&umL^eW?ILbbFw%6WNilDQ7-P2Sim zM8|*U@$C{TPF#x19H_h0f~#00f~?39DSw4G0aIMBqt|)kn^NE=IDi+=BDX|);J&Yo z&Y^R}bx4k0OBL&eTfZv30WS`eAU9YUU@dvQlk#_nQx2)fc4$MoNy=g)(jN?D?F~BS zPF(IECrNQJ5u66)kQX4-m<aw;)dJ^cI3*>%xvCsaA`hV8e{u7?svT3}oZMfI#{`Sp zdPxT(f<g^a)H9lnTg-Z&0BXVfc?-J%oy;aTPz980WLoJ?^D)((Z}^YfY~mcd`z?_| zHA`v}2_3R~*LUT&itntRvgqIA6>lHu?(&VcdT|KA4X}rMTy=<Vr*O1|c-<Db!QQWX zWwIo|2I}Pgh5ep5T(nQ>S0eOyu#foF^&STo(l5I7xLA-|w4{5iT>zVu_1IhDy;yv% zTQJMA8!g_R=<zFR`Svh5RxsY<!X~wL5{GEBTCBZqrK-oXhPDLuopexpo3!oo?JMq< zbKUfrIAe;GczcYGo46twZ>J+;`{tgwdVKU&v{@TN#RgQD`HMC?To-Zsx>C0gBwu$q zWxC0Su`}K9ogsRKxVB@R18;;?X*AUhH5JscPkYx5x?gbVaq)BV9xLm-x)#1*$Io>O zR>Uy25OzJuRz0m<s4t`^d|s9n&wlE^FAlr%s^8M5;7CsjoRG!ApB}#^QEAQgN?n8M z%LVxy&BwW1S6^mNnsf@PrD6(KcXUvA+@_(@x%D0#)V&6=bGAWZ!>eTs_(4)k?u;*e z@aa?9Vex8$?}I`6PR?)Ox_{Y4?M&1Y$OtlUXTEHTxxbS*m%VWQem<B`GhfsU;N<$z z!ACGf*VGx8IJ!?cXu$3dIeWW|yu;#ano9tr>*m|sKR}lud-+9i%FM?s!F~OIrFcvn zTr4t1T{uq^j8RBUoWmjl+nPo@(E$r<mj%upAl($z=jc+oA={5wvSMX0(Ju$9kG>N} zJ@M|Bc3p&h^A7P|>G!BHgeBRuKTxkE{^VHo@Hqoig%*nqmCOyD2N^uLlfgW>y0N+E zVQC>;g%F^XXPf1k=(J-SoQhDn!a!eY>0EI=K>xQ9vdQCI_6lW9WGr6>C02CZIFBlh zGWIqmwBX6zT_-ofS?l0KOyl<k^PxQ4(H_&sIwp}HWzQ5JO>9&|sLyPOv#z1^vDABE zDVSFr)w2M4%L<tmsYmolUS!l5`k9In(2%bGO`g-&K`6K6hC|AbhB+hH+o_q4{>qm4 z<b9E7qU4MwH@P?ygU<n6>l}KB6dV%am6Z*Dc)&)87*CZ*wQlNGe1-r4sM~Zj2e&7B zlPHdE<KD1)*<>o-8QwJMyp!Q1Ps?z7lp`Z8IkF;~^4eo;(yNs!&Nvlsr(EzmVZS-` z!(8Of_9$a1K64c{-N=T48ryP<(;T61p(4hXOn3?0eU=od1fF?Fzac`nwByZcxW?W# z#955eg2h6(ORYSk>trr2@32q`@lByRciG&O@o;mqS6Qg8UR<>IS_qWf)R$XaFxBL5 zvNN<R?mPDb=75_#`O=BY!!Mc;rNVKW{$`rNo$jVQ6VplPYcbNYHqj_2)RG=va)N%G zysJ$+&Y6K|l5gXPX-s3HFxA#=z>gzhauQoww$AHIGI-QO33AViTRiY}BirrO+K0-h zF2e^il~qr;n49FNnnvySuS%Ip#hmsDdOc1re(r-W@t@S*%gNmKVKi7h!@I>L;<O@T zh*<mci^dk<a|poZaGjv5)}%%yvBZLulJqEQ-5F70of)h{)u@Gb#^O_R($yWRqt97d z_7^Q^d{hDYn%*27+Nb&Qu2TnSSu4B%)V_6Lo;7D{vn`(GL4n|Rlc&UkxO9?&nBcNu z^ti#`V=@k>#o#Zp^OIH|inRZf^sMoP`Lim9RM^!F2hlDa@>4-I9+X%)@fu%{1Fy7n zR^2%ND!+0AtHh`d(M(K?QKzlmNX^e_Kfi#}eKa@?eP8fPSdu8;!HeJf@LQF6`tSl< z=H}!eihNNIr0Ay<McKuHdmQ}s=Jw<L(@3AMP~FQ(6sjPZ?vE+rH6>q^epSiaYbScp zG`_<7OB^gLc2fQ&CeoeqwtR-JrLyaK!NGzAIwCq&Iv0J!NefF}b3)JdA56)K%6bW| z#K+Ql3CWIJ2aliMwjxDfGOON>x6LzAboaStX;N=vMIR{l%8SKxj@wtM79o5>+lRq! zarF4)yV8@l4@VJl+)R(BA>T%Eau!YOC<l+?f{0&g(vWZ8`vYD71;5VG`vt$?k*atU ztLT~sU9f@c;*VBAEC=IJ4$g{VkybVyB}J8qQnspc<b<l~93}0B{4A(H04cZ0VE17x zT1}?HD>v5vv_}NH)5DH6WB@a!?)oDl-8K<lSh%#P&4AamoPQZMq82RH?pl#C@jJbE zc6n0X+``jX1=r~+dxG;=C^vYPkjUF99{|58?-xt~63BTSe0#8o?PLj-mG``qWfjCl z0NN4W-zn>_&U$yMy_*mb9|&@Q#@Nog(kIv(VSHhjaBOyP_xn}WPzg{k-Z_$4yp2<i z$9PPPz_AL%_RP0(!i?Ky5skmt?vu2|gNr0iB)YPV9aNba^aYg_iY~U5=GefO={{yA z>`^VqHYdIOFa{=C)R|pN%*Gx)R*B&6q*G1#N6^Svs#*xSj-e`Tn3bm<lWG1Vivy&i zYPrf9pggBWq;WA>?hqWRtxB`ZMZV3us<Q8`eWYs<@FI`gpm}rGDpyhYQr;-13mvGs ztd<)bWs!H=?3)cyMp8FoFH~GS>#7hn>>hTb_=c->o@Oa>e>H%-3->DUva55a3iZ~x zF?|Itx^@n!5~Vn!t;X*@GI$Fko6GIZxDKzqIY_$Gkv*w^@2k<($$B?aD!Mr^PO)-3 z6E)`U66_3BSGmwFEb66ANzFoTQ{&hS_NeIKfB0$hBAnelc>K=J$m#PJeej4ucG!yU zZYOjiq@Fz`m=uhjJ;g&LKpJ0&04cVVkDiWAtNiG~q*YAp4P>PnS^H2EJt`gz%O15J z2~c8ai*~Ua)gUdRdjA|+M76(8izv1(9Wap?gmINxQA+On=6_mHK1@3$LY{?dr$ok+ zu*L}-?CG79c}Mtp;Cz@Xxhiyti$X|DLd`ZiU`NZIFh^N`rBC-Fka==9Zp0U7Y)@U4 zrvmXLjX_ZN77w=G*ft@t-+zlopCe_XJ4)a{duxzZ1MeAz_hhe|B#9ky@)hUD_c~Hm z&dQB$lyS%mSIStZrA?6^mej$?CzJvT4=V)$N!jzKOUhN@BK>k9h$raIM)V$6-K7z5 z_oD5gkhQ)(ZIUENBC@@k9UeN2-bQ4xYlLfL{Zol_2~{)-wft0EK2ysJI~0nmLTdSj zep>Dc?o%7}gm2%`Tlum{XIm~l$yF((=p*f8Uw|hL6c#p7>-5)CZ;T{s>VT1ukMi_V zC%LGU5>1-TV~2tXijQ)#@;6(`=N4?+<K{iu-g>ArW**!bj=p|x;L;v<Cvp*;d|xO` z#P`)^SdQE5idFCt5iFz&j?UH|&{E`KN?M8#VoabzsMq#JlyE&CH=Gjbq~zm>+Fh+T zWT4!Chn>2SV?8mQkXJ3|mE!=><_AA<U>q*HQ`2^cOuXCdl@w&e*@QKkhR9~pG-N#T zr_jWMy;N~qZ_UG&QAkpv>uV|hoF<7$+1-Q%8J{Ie>6D@*$(B~Gl0Hb$sJa=pk4U_{ z%Q?+81Ty~V8=a&U;~r&SEGdU$&nLR0p!y<Z(igOOQnOr>zq{leI<Dj2EKf>1Z^_ji zX|}o-rnj-9jpN7ng}wwL=L5%eUI?X2=9h#L)keL=Kz74t-t)E(@EPgT#43r^oyVPJ z)P>-3U8gM(xw}G>_T;Fx0)2dxyfX9QVi_*^2K(&}&f=gBTb?Y14TUJ<7|@D}*5Mtu zL@$~uw_tMILjI(mvup`BM@J6D!O8#oStfEha7dANQzeBEOQ8a7Ypkcc`z^F?$3<^c zt+yNYwyH3J4)VP=6cu(T`FcZk#tFqFiKQTYm6bW=b7*?KJ%n*j&m+?PAL?C@>q`N% zN|sIceeQ^Ou~%EWUwrQ8{NnhPiwpgq8sBL#Qt!(Xc0C`_dn96u45SH$0@QT;+$TTx z!;IG|_vx>DMg<ow%WL-=kz+i5PJmz7PS3(5?d4diK3UZ_WQi`69SG9rQOB+x<WvEb zB@fGLWwp4N2T#)O{ba$On~5(XeBdQsMYh0)v<Z-p=NTg9CwPfgg@HtMm(924)+0BF zCFxV?O|RRqS7#*yTJQRHtq)~gPS@TCv@K9kNZSHc?F-to1<D+J*xvO$7eoL0o_W{x zz1}DXt?#)YpJRQ`xm>rthrR6LaAHStQPWP*CM^K%QR-;7*%=ivL(UMaF=e5Y`bE5H z=iL{m3WqK(J2GG%e1Z0@-Kv0So)6ecRg*K<yZ}rBV_=d&>I~S5fZ#+R*G6>W@;)%K zO}rM${wIFrM-E#{7&|g3W-kEjOp8ZCn-1YTH);rr)#ThoY>zMiA=nGUseMma@n&K7 z<jM%S@O9e!1Q%(Xe1=Wp-hmBJ(ji4p9*M{3z7ad}*co>37L$nKnmu70{5lyUm>-^; zHQ%+%UwCb6PScFy1aBg}3GI3h-DOI8wL#{5^!~AQ$^>RED(fl;f3gckf=AuB?r0%N z`arTJX<Kg`Q|*0)z3Jjz_daf-IPKocS1YN%eOljXXFZh|tSVvo*<PsZr2KQtd^|;H zcBSS-j@HV&7vRN$$jx2Faoc%$xcPJGH<@G9#Erli1zw}+_X((_S7#2C@@o1RbSG(# zLQ6;IY+_Kya^<Qn%c@WLq%L8>b$B?4?d2f_o|q=<#3ywlxi0(48GKIx4+~0Qwjz_= z@=jga0wx!SW<E-Z97fQ~2A&{~S2OrbE}vXl@Qaf@(r~7R`v%W?`5REXR|Rxkh)g$o z4!d`+m2K<^Z0!fEGdLjcVRfsM(5JEqo~X4jTiO9G0=vcpPrRXRo~m3WB!i0o!oY>- z8mDb?W#&%$@b=ZS%al|~Ew5rb?3|^>D0K0QHB}n%o3rXRGmFpl2AyHo=#dLr))An1 zi|nFM-X;-zQq&eB7xda0(R<EKam_W(+(IM9LMIa$3he|Kt2l%+fI6iK;?_&}voDcv zz4Aq4AG;7mCl}kXTd2nq_t&{gZ}^;CY9~3E7LWu$`A$OQjhEPWyu!OL3eQMA`8d~~ zkBy#uY*;=vG#?wm8z=$F`}z#9J23c!bnb}@b9TBRQJ433iCLrs?S85i-Jw~nIFrb= zURz+EZI0JT+FR&T40d&W6+O7!>c^yMv*Uwyr}TySv*+;|uk&U)F){);WE)S^VEu6W zDHj$`PoAZV4>;Uinw;n93mU7eRV}bZxuqKwDAelOwCw%W@dzMMHlUto2VOpc_O27- znRZeX1Ct<n1OvWb5tA#e7|*z?Pa*14LF5yYX;9ju{+aj5nb`#fPrdrR#Ix_5Kg_c* zfnHhOI%j4l3JE<sBaaDmTZ3E`FaGzRt@QSEbpy9|iocNCx;s2QU#ey2R20-yh^-a8 zL;W(uv=2#ERG?4sCjBH+J~@>U<NZt;Vz9>aj(d6lvSKe{j1*fSn_o?S5PZPdJvk0h zX5+!g3Pa^&U7x#G9#YiX?bv?e%u<fa;%l;r0B;#|8kl6El8=s<Nyi;m?<O(FmgLmE z+(aeJMj`>8F$R_&isqc2^GGd$vU<XUYIC;6Yz-5B8oHM5yRpd20ZW^W+%`*_@?JCP zi;HP07QBvzqp94k?UC5BiXDDZs(ud8WjFK!@+EfxxtPedGzgF{n5!~9h%KEwtp%fZ z+(^MF@T@GRgEGK<9G!$b@%8|mk&tKI9-yH4i3hpO*3?AsVtSZ8`jdvPzSOR%Y}0r^ zGWdYq2;F!<I~M|(rFv{UV5Ithv<*EbED_2&i%=L&Mi7B={L@==K@_#(J19-fe$Aa) z!q)Gklqq@=%m@`1TTZOf_i2KI_ez)iKB)*PH}w>)c!_bpUO>GZR4wZW5Ah{_wX&5; zj!Qedjn<7_><`#g#U@DVj*XOY${HN!=Y;+;p#-}LB}fVh^5PTs-T#u{9pr~EMb)cU zB<cp|*b;YXNedAoX)+M`l$*8!6N{I4B~H^XR5d6KkQNh_Lg<K7#e>^FlwR6glQyeg zNjEk*AZ-R2X&TX-Rpy%Q)Y8ITjWwHY4mT=|?m_OZ@a?SW{|4Ul&_Hv<ek$&kOfPvz z+S8Fe$(8zTa?sqS&4U+-SYzL%2Km(zP^uAte8YOZjHsz4E^BCUKo@_hhQ~TM@t~Df zinH{=^o)FFsU9}7(f#}lOir^i>@X!RC8is9ORP~H>K_`qAt-q*&D$kPMj6U8l02W) zkm)+@H7=liR6@x>bWOKx>1|_&y`2c`Vq@v#b56YV?u60U+~*$G^SP5(mKJ8to}Vnz z!6R;w)^4n&9UcJHv7ZLrHTb*jdt&#F?gO{<d_eN#BWKRl4J2i5S@OyDlMrvO>IyCM z<kE#p%X%?8r`ESzpI+bcjm0bRa0}#icDuBPirOv(S$P5q#SUM_q!*h|q}zIxZ=K&* zBfLk-xO$I^HoQl<MJ&1^emAg-y?wMBd$dSMuO>13ccZvbF}#PW(fm0c8m#7S1Ua6Q zN-PP1D-&v#Z9TA)*lEhRAXr;}q(&MnUm(B~WIHVU?vV0(goBSuH|i8ppAtn<5|6Bk z<1I;GL2<q5EqD>lMvro7|4Z>i1#jLCxPOGmM7t)@S5;9Z(TmbdRkDVCLbM+n7N4vb zlagU^7MRq$Blt?6fSnqHsthj9i#EPMM+ai|ssJC}b#|Gh0P%^Z8M#MO*fKJ8MmR?k zIq4dEpV_x9S+$(*aWTbTdtymmN#SPo$=Mbcy)kWq&&4X=T9x_)ktnTCpl6DKtKN-( zLW?ggYmvppL=2jH5bF)Ss|(_K-LNMicmh!d$|o*`yV)~QC*#(3COLyPsYfqKVz|qL zZoN~<fns^1$y|GB<qB041Cuftm=r_<6Q+cnAB`=w?COcuS|`4dLmt)cw$WOX3^|J^ z9JYR(QYWulU21VpjkJ$s!y&D5fBb3iMHH^9WCYt?+MQg`ovFi(-Nr6_PCo!355i1l zg`xl4DlZGFU$P{3iMBKD4cvQ=i@t%F<f7kuDU4mWuHRJ*Ik)R0)F3{>o4OHB%A!jt zuNPcVGrRXT<<To)9tXYJ)5Sb3D=y~WrS29Nnag#g&p<QM*u}CvZbA2tAb#JHb46qm z3C<;v7Hn4!r>Fr%NM($<a($gIffG^!C*+m9HtP{7xo51xx{=tHr^dCu^ihY#?zVEw zuI~QX*cCpIc=i}UdBG!-onvTg2CV|yVHDev8cddN(<){!&OO9?bn@b0dqfEj7|IvZ zmoF?olwF#cJ1Nog((e>gem^W~n)mB-EhpXnLOq@M+?930SJq)GiJpoQId!+0m-0P9 zb(!#mg;kqb`5kBW$!@Jh$BNA1MAwDy>2VatZT=`qW4C)0rLo&{AA-J<mwcF)6UzwO zo#ZupACKx#3n>#`PzoLo2g6a;;>?YXLdJkY57WL5@kW8{&${OOsexU=wJpvSK748A z0w0WH;PqdAiGeB=qmN`@XLpSUj){fesW`ESDJ8#K<<fR1EhuEVT<T;LIw?%Db8SoI zt!rEU#bUc8Huf;<ChWexCU?wU)4LnQvnfu@yl)$qxb0hhyVg98*JHR$9k8<>o!YW+ ztQ~Af$st+6OthFbTTv{7d{GQ6&!ARlA6{n6+nGLpnyaL%Or7Oa#z;_;3ysv+iQ$WQ z$rHduYpVgn%S(%Le*yIvml?c$-61~*4jR>IwepwGEz{Y^$<0oZt^~vfHk-C31t3)k zDLN{{k8f1weSf1eTew%>PM=t&WmhK4waK~3GYEeqX_#xJ<P^eVs(t6ZaVLnV|07-h zytM8@q+JN!S-+Vj;l2Rf56pY-?gPc^J&&K{&Y@zlRGie$keHN3U8-L1`Dm0B*}>!^ z&sYGF1+ELyNw{b^Pa}EMg!ZNO_9)H^UOCw<7#FqZAFqqL-A&Ch=P@lc9K^QN=ow0v z6>bgfEu=Sz3^2Z&+n#K4R=PGRXS#aQb!h*I&BpGUJOvX@t9Mx{8llKLL(9w|J41n6 zs}xf-pAX~$XgsRYGPTS#y7ihi!4zkRz_i1pA()3wo|hPec}ue4GvZ3;bLxQeL_vuc zgDB^dygEdJIJYD(2*sq!3N-E$7PpL=Uf*DT62TKCBe7+<mJc3hOJatfyAXajW>3mA zO~&V?qNw}4R3cveL<KzULim?gmrF%=*Vr(w1|=zls9VyND84B2HD$8KQ;YsN54DVL zQROkpVtqU0K$P=yfa(H&?4nraSDL(-$hI_CLtd0p;{iHJ=9zlOd}n;wp;=z`(8F5e z-Yu^-k_GeI!$*D>>~d*Ggd)<i!>KYZs=*kyB-#5g*l0cJ88dV5>L%2?-yOCr+YLo~ z73gj-yCFo59NX4I;dye4Xr%5yllyf8qB<T_cxASR#+Uik!c(d#H53(|7!Qn!gOWtm zlzB@$P-;<$jk}>ktq-`pE#QeO29Q-+tV3Le&23VWJMYGg*k(i475X0LKKPq{!UsGn zj}z4F)qtZ>V12T{*>dPGGP+3GcMiJKLSkvkHn-At9m!4;**xXV<Xscl^+6+&`jJqo z7Ib_=ZoIVFA0wTJ?rVtI%qM0OA8D961Bx1?&Te$qMQmAbnTiGe%#;CBbPIMn91o*v zQJJzu8x^HCjD?-anPMk`BE3S0KqJ<!Kd>8eokjF{Y)uSr1R+<)@&E)yT`Jd(6C75V z8dQYH>#JM~;`B#ji2GuUluKj%?y*2mu}KLuy)G>HJ(+|Y)?uI=<a-7DK;D{=n=hir zWBhbM8pQq!z$G5IR@xCdC-FfCpO?$^u}Nzy&1<ii-$ur9`-hdS!7^c5D^*33Fh6?z zlLX}wwNh2p4<nbjGJ?x?#Xx~ZEecQjXRPw|16vu#>m<EWJCa^ZLxFVEGNy#eX(0@a zg)LW!kDiZe-3%1JLb-x6%XO5@Y{A9@m?eW^=KgRupTOi6Qv~f3C&jB9HV?_>j6^7} zQ+E#WKfvLzXj2)lmfPv$%j=8<^<Y;ZngS^(fu-73nb*puhF$Wr(-K2Fsb9}_2hC~g zhh0*3rh^DAN1GCZY5xtsNiPs3hSrIV+3k_6JK{M>hbwtU>WyipO=u1|JW3I87J(x1 zBcVSQdcEx2bs@KU8X=xNKf5AbV_3^Onb;w#DK+>j0<$yAk_zUQtO4k7=8)$fHM#>~ z@hnI1%(tEa)48Ogu5XM7^xt7_iw%ugel04Y!sue}dskJ+C$fc{DyI^x&j}E&^U%v1 zW_J1y2|;lps$ea^g;3ZN0`mbo5yJvvmPDhgDM3!98B9|{d%~ZEqQ#7>PqJMuot3j6 zw7*VLPl2$?85W$p1CYi;0d=K%^R!>8H(Tmcb`E!v*+Q8O$K;AQ6&bq}bX7Vml!76c zoV;2kI6qO9u?tblnZ0JNoDD@)CdNeYow^p5MP6fZGb|OkHBx_h9$7Y~OQw;`=!ags z7QRI6{Iqrlbu4$U4t}>fD59OquAkhQqi7OniFepxAjBofkmFA=xcO2X^|CGt;#bx! zg-rx?`!_M}@88tRK^0ss$#JQy5M>wzmeKN-)~?w2+WluKo@BOM!Afhwkn^u=cUujA zSj(1aN3vYV%JyJH5m_o3;mW7TI27C|TH#&T%F6-+PcnoYhg~PNLNv7ov|9Lro7CB} zEm_Vb;wR3%k8-X-ip)?{<6?A5e4=axFesHG02a&J>r%?9e!4jL-s@tnvV|TYk!5R@ zwCRNGv64nD&DBBc%gx079KzRW@n6vsWU)?KoYX)PuC>^S)fr+8(OIif-=9YQXu*TW zm$lW-1fK|+rxBq}aSNF0{9|?*i171TbQ73ePpqD$s*-#p(4(n%YqB7E-R4B+;Q)m^ zmnyLp61Gul5sMA+vGLbjef1CA3>Maq>X_JNm1;x|X+$1-U4eP0itXNbLT%?MUBabs za#(pMAJy={Jpkxf%3Mmu(=b_wG_DA1T=gif!K}<)>ou4~2z^bOb0$H(T+BB*L;NK| zwWo8LG5h0ruXi5Igkin0&b<}MtWqr^ha_=1E-rJ8<ZZ%xnXJyg+@^yez2QUpX1VDj z8gtc)?KM!9Py2{_cFY2^Sy2RAd34MqgOE0EPlt)q-l#KhR#iAScz3t42Xz@wlITxO z_D*sEnMmCxU0u^kHJg2p%9_7v8VGaRgL=3|xgb595N+UUPV+o;0i~B-nk)@eoxAgQ zGrL{4X;v4Hos&zpD3>&AqwXTE*q*c>mO_M$ujzf8oRw6hH*)#1w)urEW5;mjh|K%R zIgv%Ooz5=QUj`55X6Xb{HPtulOj02lwK#b-I+lK&$a#xg{9=1nPGir>rWom5#2{0> zJw5`|?J@A0JF)#8mZqqS@xCeHf&2Wp3{UPC><niOXtF(Qr;cZr=gyu#b-|a0?hL;X z5k<~u?!RRw^ta3y*e~VEEi>-2IFTRuQd}fI3PSpKkncwZw>=&o&cPBwlqJ+WRODQU z^!LTOwiS%LAn%25@#3nB?|}E60#i#$YT!gHY_S-~svX@3FCdI%#mKwLY9t|J{q93- zHXaH-D<fn<s%GDf?R}ozp1wXiib^&mlF@B>qC-X`13Dr(7-dk+erHGa^4Zf`xZ7;g zu+e>cO?KbNc;@62aXLWWS?7k%F;iV3FqCDDcPRKtY4k&(tglO7qxVsVTcU388y@>Z zI949cs?tnUg2U#aI5i@YSXc_=Z9Z*;@+e$WkiFL@8Lje|D^oH$Kla(1L3m}GTQBg3 zVv?)ng?r@gL-F5~Gsap%oPjDSD9A#s>o;$g5{<3cGYd_gSx~Jwz;oWf(YQ%cZeQVo z234Yz3zM=nmP?ja<iTbcb7S~$QFix;t1d6TazSTGadIJ3C6X+tGwkl6V$WN>gpSYd zqhf<a?}Dv{IY1lNWFumUYvekq6+x#(zU-tT+aY~2j~Z+GCv*pIkYO>5ne&P)CeTX7 zM7|`^AYYhzmuPZjW<EQ40$+({t{4Jzx78O`o;)xdTalZKC^>MlwNr!oN)h0t0q5e6 zA*{G#2wXeQF@zv1t!#xKOColDBC#{AUJekmnsR_*r69sZ3~X%%AU#RI@>F*kFP72R zsw+#!)vC9;_$F~U*)+aVkkb{EA(Wd_^{9muBuJtc3r2_j@M7tXn2$>MX!8iIM*=bm zXaW10P|+{8QW9litSLmIHsA*-F&!|e#S6=&@=GoLk&P#kR4jab4wSI$W)JpROssGl z$Rs~i4g&IuHNzJbDHntUoT9}7&U8l7+hj=9^fsl&eK+DgSOmTsSs{jkv|9?o!J**K zNvcd7)#*3`nlBe^dMODbLmYwRvxbL)zmQOLpk{Ghur$F?wIOoL;EOjibcUL%+!n4( zBF$-4Qf|h+HVYH1_8$hu#z#Ws>M3ffOfOVpn379VAf`nDNVGhIuqXAXdm+2^xD$<Q z79<hqk_`!#owv1$^hDGm8cQoy1s2@)Y8}*-tTV|Ai+Q>dMf0=p?@+T$={Xl7mb^!r z4m-}avL4t-m25hseYD5>jz&2@t|W$=W%jh{v@`~EDOX^(LCX1N^|LEyN#W$dJ#{7D zj;~avMd1)@R%C5Q3bNv~oCk&u>E{=+lS}AvS=zE2mAbpsB}x;;J)_xyj+HtuGe~K} zoDRyJY{27K%V_7Vd%7oFVF%sfH;Qhz7Sh8`i?k_y27+Nb(UfO0f)84I^z&bFBAhIN zc7|7YNvT=4R^cEjO+IG^t*ofqewU4bT;(Taqp!nB*(k8G?zyl}tP@VsUugyG!6a0& zsVMlQB*|+r%x=FH$ZUy1<wm;?Vnt*R1QA_#X_`U08ACm5GHT-%cj6X`GQpb_`*jyF zIRAES4&!twQj%x7S%Q;Aha~(fO00dW_+5WdH{Z3IO6(1MP6(g=L9!z&VEg=B7|x5R zdZ=@x>j8b$zID|^kQk;ek9Gr|;YtG+@@O}tl-lPGn&}4RW0GZ;8nVmGrqArhupY|; zW@7k6eV$kmLi7nW6SMHnt_V_I7BvUki_(ed!yKKMU51L^p8Y3RRlMcqL0L}=4wL(- zm`JHDshrk5`WxMQqMnl%^~!f)LA(6jzF#iL9Ku?Lv$yf0eJcTW?plyL4c$>Uy%>#( z?_}_~Bh#t!8rQms4>KrlxpqBRMrsB5awl_<U&m(@y4Z!b<K$3qM6$GR^1CzL<Hc!w z3B`htlmi`Ka2ugKgFmHTF4*4Qmbd1r#1REJpf78MMJgdXPmW`P<NUZwi$EeTiG|B= zpj(1cmu903rMB`eJ35cRBo&Sa7h>=}I(9s80Rm#rB|DtDB_ftYV89D^m>9I_B%UNK zU<A+EnmjWn4YV^NuFlxWbPc|UJSTTui0D(I9~r$gCmo|q6k9a;&gd4hYl)>gF>7$2 zZCe<;bb0|_v8^?i$e<DF)@;Z8B~jqhEpI{PmnUO&>z0_MB-O?<;?A^Kla^1@Mehyg z!Ui@BM8Pqs-*Hyb{MW@pJ9%mLxZLqN+)i%g1$7czc_o!Po31*Ex{**wdvvQDwsMSb zvQ>*BQj_h?(s|id-nMOZk5Fi2k;Y;xFDcVLc}(x<xm4mJT-EWm$FyJGau&Xr?bKPH zlZ&B~>IUwld^k#mR=ib}DcGt6^SRZJj><{sZm{;K9Cr3W{U`go<{l4>{sZMunXRri zkY!1kA?lTsd8{duF3ayFiJTI_PcWu+hQ-3>yY~xA9@+{n*)BL6ov2CY!3BtKF<GW= zpM!756IdvxuZu9_M{V`y)+yqb%2i`HG}&qO%URgu@hy(RvO>ycddM(OK8d-LylOOY zRqQ*%SDk&rIh&DBc{vgLsRJhXTV<}`zNEZ^s3V)WW$yqIx~vY|XiUYzANEXm%~~Wn zf~^HrU!N}|%k8ngShTHav=$mhk+(g93-a?(5xZ$DY*f>0sT#JC7(e=YOzcuiM2y&$ z5G@qcgf@F0ye)o<@t$`nF9{)ngqn#$xG*}?@iJ1-NnD=ieQoix&25%);0zvB=sz^@ znT~BX&$6IY%~y6iBbQ708E255VLQhd8QVrluiYg;vMRPd>VYb9qLw3%!^ApiPopHw ziZoL2hJ8!}w@7ZU@p9I!#B+M-;$(I`$MMXy$sP$dE*^+gQfJ8YLTWf*MPQp3h<RZ> zd08ptm^2%gNM{>O-JPQo^iy&@j80BaPlzZlnETFnFC-^M%U!p{IB9=yvDLSkBeie7 zTn{S6$@=Q#<s5TBZpWKkxiF{cQxCMye}MVEu<{E~rNl4uOZfP<QY|cyk6_>oWapl{ zJFzSG+znU61jl!py7<T7hmoT4?Nm%|<L<EZiuRJ3z9DHs6BSSI*dsUT3R&{X!=^v) zBzIJk&S$Q%9b@O30Mr>f*W>`beD2z=Fpv3?=CE_kthIj<Z(f9VUiz;$b831UEDlQw z=Xrr+t$vrO)Y<eVeRomq>{?rUDncKB!$}^xK>AeVpQP$PquLGLzl$FGzE>yoZZ+L} zLfrCE*#cs(ZAR}&>|f+^zM|fR^i!cRLNn4z;Z!SoLTD|JAPj?Lq*8S;>1aE&etbKW z8}!j1$XkW%VCcJGTP()7$BLKP!>zSrV(e2e6R%qKO@VW$^~9F6>6oasZ*N;^?Q`1C zH-^5*2qG^n_+a{MxnK3O%CLn!ANab$j@JDK_8>bP`t8K8@cS5ZH8I(F+`Nb{PMxZf zOYDlAeWy$tjdpAYtlc&y@5^2VyW$>`(Ko+h!Iw!iQCYJ*x&NWTuyTEoNmy58wz=X8 zjY@RN329w2(9)B8=;tG5_IsCixc5w!jXG&+k~bmiJb`BkZbn0zR!8PVGw`}GIr_g{ zwqh7NvS`6|l<Y6ygts;@fK0Z<hkLYb*ANf2nWgf*v;uYTt-wpJ-Ke8ZLF3kU5;}27 zhjc>X&14Hf!lJ}R+P!R{?gwc2cFDWMcwW~B#6$#)0S@(Pu+;9r_yQ#17tJis$mqAr zdFoD#Un@}q-Q)!#bE>Evf2366%GFN14eiA8Xb4r17NcYg3(q`qBB_&nq{PCg?pbI% zB;LTz+hA=_n<-xG5k0aR16%40Sc4XPfJ~Wdpq|=cZDDfeeD+1zNjVr^MPtt@K(WMj zr`n|OmEK~&J_OV_yWB!5f$VEoSW+1+7fxO|xoi`t&vISa4V|~lJ@3(rEQExQa@r}l z=fMZ>epGf#K8o}t*IR^-^6*rvh}2P<mMatZVGhF{!eIKIN9}CMiF@w5df(NZ=RR=N zzjJ!ES#3PJP|iOZGQv)auto0_KFUVJyRL50R_eiBe&hCCnz8V%tK1sdKu+M~P$%_# z&H!_F{|kbb(@_6^59hU?W|rkq8Clg`)m>%Fsa&quJ)tM(9F=nxl0YI00RjYwAc6#3 z%!AA`aW``}kFd=X%sTsT>dtF@=R0wq@E!E?GiurT@89vit<67s_RM~H{`nV?|9Spm zve>ry@bCY7zBqZEv4!w&`)qFE#mBk1#gmBr!o@G=7G6#kTlTrr7jp~W@c7&PdHa=% zU(YSPM|@bHw=Z3M^(ljmh`n&}5;1w%wMC~_o?Y2qJH44(Se(4d+FPf0PG$Sr>HXZo z*W~=oRm8q=@xfn>*|$#LQSjuOwtesP!`#A~$=ihe==9Uv!uP!TV<uw1aq-(vdF@0# z{+^59_w;@H1E)WnTX;Kp_hi3w`XjH#x&5)zpUf?MOJ3h^N9<2s{Mo0(f9~`bpK@M} z*k8K%D;|^n>#d0WwTr)*TX=_f{}8dib@6w+GI>9+zjykFxrNu0H*Nbzr+@OY6ZX$e z|1!7mYVx{Z|LXK_pL(|O-2UCge|U#n+J8DNJ@cFzw*1U_1@@Y(M{HGU4Mm38>AHAB z+_p{e7VLG6Mr>PZ2ju}lF1u2DC_1}f`{D!TQnEww5&YHUMbwVPCn1Z;%cz}-qvE`s ziO*p|EN&O#7|hV#SX_J=p3{S`?iTDyDuMFgIGDGjR0_37s@K_wrKK_`3cj(dI0wHb z$=j8PT}$O>ZxOCHQUw&9^e`=oOR#s!QN(Vg$|!oEZxwMBCV<9vC$7O1T(i2kA&%O; zxGBzCOWcNipgZCR*oTfHyHY(Aoz%3xc%WB0_9%XWzocz1su3GXjZn<4p^e2$5wG>g zmLm!f*!z7|yarQ?oUMyDU~hOVVw+N1O7bw>7VjvFwC#%b#3|bsAHY;0ZHM9`n2xI2 zvG@e0$d;Xoqwu@Q*SB^iK8LAd(JsU>rEgeVd<m0Z-LAx(Y*gi9#FA1ey;8EYI0G}` za+Ve6U=O7ZK_Qh#`T9{=up6mDcq@bs-CL9@p}c!)#D!EDMRV)Zint0>{ad>e*YrGZ zbus^azH*I6>|Uyg@)fobv6fUD_3h-lzIDWG!V4bhEJ<Cd9*TafT3<YXeOWF=>{03o z_08l%-G*Y0Nedrn(Rb$&8%r(Cd+%p$+4luof$6G_t%}#eb6$CW5wUft4U{jB*Tjg_ z7K-4%wr%ka{ED~UFebZFdm#yGF*`rqmpVXs-kbAwD0PIQH}C9Nd;)tgoQk6`)qAuv zF_%1n`*tCY!QMia;<ywS89%S)S5gTS%kjvP;uP$2kM%k&l|j+FeanjZzh#x=kdTqe zqiA&6Zo~z>QnjME6keIU>)EZi4AYjjRm4@LFWa5C7C3ZTDKf1~HBetpzDnD@xCyfe zjjSbZ!^|DRMEn3##GQ4;J=j~(7Y|^n9JNRB6YP;kSPi8{GsWURmRfrLsbYle@^h^t zD4!dwp{r7BC?CyTB1LKg#jcRHP4O1&t2)JPOYNY%(K#YTY7fPjve$?YW=Sq1b|`g( zq8*j#v6#;iWlWTwN<~pV9mx1h>KsLIjqO4lgWu5M??SLhU82aiWLM$@ObdFJ6sKmd zuu7+;GAM8NUc|CeITXWCwrg=7W*BOABQC(+?etzzia*UzKhT0(sWOVXWUV5u!af)7 z#5LHXHWjhDR0Bl|+jcK*DvRc{C2qss+XoTrNIjr@Eu{KgsUC``da}NF5Z;=+9@?Y$ z3HGgTC?3InI2enU7Q7a>wyg8z3hbq_2d_%4DapO9i#I}&uqkYcxAc5$+u|KPZ`-bT zPtOOoFFw%oyd8><VEQU$$Kn&%`)Y>(k>amULal4lGx2#yGI`gu3vmplFZ&i3U&0(w zx^^W_z&-_7Op{V6lsA-<VOlB^Qib(2E6%}G?8dIe`PuUuaRH|92UZl9V1l4#x8gGF zG0O&Bk*dxVGxkoZhN6_X)x{0vQn7n+6Q*q(M#OE{E6%>wk$OORSf53vU8x?*TU?J= zUurN@l>I36gd*=d8;VCE$>h!0#^NPDH<(gITmDQ-2~1sMwklqOy<jHCy3_{BN00q_ zQ))|Z5g_6nn9&*8u6Pfo)ROIs4`A=N1dE8&5z6<}O2m$(PEds5qn(PQFr&eCBR+?H zX}S={VCr6+#>JPgZ$HcPb|sZi7DY>nQ+nmb(&7wEmTWZQTzJl+^y-X_Mk=o)3A+&& zV0!r8isF(uYq#Pu>^->k+$vJlpA|78RYQ3}d~DUF8Ymy&yLr2pYK9lXTF?@=!&{TZ zsCC2-;+%EGJ($t$TVFhYJ+gKq(?_W%6d|3qp?IV$@-`MP{lc5qvSodZuD}#|XRG2h zm>#Ryx_ATTtn^@;;w?Sz*tU2F_LB$am0hVl6t&FRzW4y9h^ifmkCa8<j>RXiAO26p zQJ8)C!p_9!dS0~)aSRS|VR7-LIB!?t1ni+luOy{XC_=AbX))JrA&Y`##oXd8d`DdT z&|0u-sXWTJk?OqNNEK$O4xU?4s)X`rsLb1~RC)H|&b(Ems<Ri<^L8gy3#ld__@WUv zV8*Rz_u?iz3!s)%8%1QMtRsGaKTN(&T36hIXA5LsYB0-X>A5{hJ)s!j2OEk<Fa<wO z$KoaKCwxHJx0n5D<Kqg7>EEzb@fz$M92OC&4V0JNW)YFvLNSaxwk_U)DX3?=;yu{s zLt@_cr4CT+5(7IFAHfV$!;Zx#FvHlkQ*l(!i4^fUOb@l~LL7s=Q{&=Gm`H2el{f*< zj;2Ye6w1%vv3W~NWl-MS!^ku%l~YEKb}i1s-uxTBdZh{|kJ6&J6mkjYqg!!VT(OF{ z3NtPZyA#)7KVospuS+#hRG%0TH<iV$wZv`Mqr4-2m}SASrz_P%dGqerWuyi(#Y+7s z^@Q@+XHpNPMko(-&Sqn&rO&;Ed0Y0YtdA=&2mjJ^RlEk%qMWUZH{e;=Y)Wl~B+R?F z%bZ!Ic2Gaxk4WvI=t@3<#Rst0h0ldUsUs9!GqPjxNq8kJ^i=m$Dym#^b|yZDsou~o z#4(sC&s$u42@{MJyAmg0-{f|=B9Tfdi-x7enUEyJS5};ZeaAYUw`-|9incVTH{yb_ z=vq-+f(es>-HOX0eQ3xjM-r(j$}7Tg>rSc`QiWB#E^dTec<XgJV)s%_lpjT}pIb|+ zjUryE))7Czz9x0WJw4}&L_B~!S8lT&rJjPCyvo^7Jc4~__%IktEpf$3r}S<4i*O|Q zxB~l_uW?|NS_?_2?z`}HBej9@cJD`~n^IdSs@t?}@eWMcSGFtOgS~8K%)Zotk|gX< zd<4_NfgOuaV3yE^or<IIPgLZ$MAn(qIqLh#4}1iRW3w#c;!D`$l>xevN}#A{-jd=J zOhuEH7H42aD{EPCPS3M;EzZM4Ue9jC1=x=XMR5uC-6}mly_G7Xd;uaRDpFPD!X28p z2D2EZtuAiB-ot!2+)Fisnk;s$C2qqWGjvBs>H)>9X<Ap@(<^1`iw7`uy|+j4Q%Fyb zzU3e^lp3K3h({ZXmwxqW6{eJBzXbodf}#gUwklqOse9Dc#T(*V+Z1oXUQwp|w$u)a ziYBMK;ysu_xU_xof%wc0#YZ81s3_mz$5JQCqGPAxDC_}tOLRz`qkNU_N9;l>HcOS~ z!&mAO<r9alzLH9yeC{R1DVVM=TUwk6&#BHE_Smdc4n-#rCgQv}V>jXg?6auBhp$v= zrub&Ml`8A4p;g3Hn2MyPcj6k%0Jf|yZYcek-HV&BmqL~;sWytbcdR3R5XY@6?kS6! z^~D3&yW@;giPTegh33BE%WEh#QZ5A>i<kIi#3xz^lV58o2`co+s(1~iB28NtZ@^3> z!bH3U6BA|I7Vqf!o$ZSE^nTp-#Ro8v+L|7Uk6;gg5F=72DBn<<Y&25Qnc^^TCUqV% zqIqF~yO4^Z==ZM0#h37G^}3Qupjdi_mK3L8LYVDFoPnuc#j@fY>@l;?*Ns#@sLAVV zyAc;)k8*;uC{;pv!F;^kN|jM$+_8$d3eT2`JE<Cq-SXb*;szXsVtOxb2ByV}?CdS6 zHj26=ts{Pby)NO}RjM~rT%q)(1}I<b_+)#OdP4c}Bm|4p2<1)Z06&&m`tsAr42T#1 zDedD5ig+m4s(1~iMo+db-hlncx+&g*iKmopi+2KtDBa{^M`{n{?c}0jU+Mrw@7>y= z_y}f3J=n4M1SSf*(^GL2_PVEu7pe20Ca=qOA&$Xh$u+(Ba`ya6oPgQa?ky=!!8EjG zX>kT7a?UL)&cPnFjLx-GUaySoMqGd?lDiUd3FfOVX}97s?6qbcs7O^&l+w35aSisq zVKnPf4HRw9+r79cezcaj4b$VrX-E73Q;V*3#l7%6i~tLLUuuBz)r32?N2#Yzx!6!V z65rTZyu@#+bl0OTf2DN<_TMMSVpVDl<wrLz{MV&6P`=u1inqiW+ZOKx4k3R}bV%(f zNzeAh2e9u`tm=nSM<{PmX5NmaPG*YHIhBfrj6&Y*?`KlyDF1<~K0m#Xip^3nmE%&E zA+NBnT!|Cnf+fYN8K=b=aon=v9L$(j>{^@`SM5ezm~l~Df;}ua4&6$XgPOb^TSZ)j zsZzo2#5LI4#_m{`YM>~!X7}QzUg4rd+}87gb;J)aMbxY-?!n<Vh-qIuQ2K;Dil1Qb zm7#b9Gha$J7B9W<@~gJ&Ke>Ngf&D{~NM4m%Lvb-uwRQ0ZOce&UDc%zEtBrU^+_GKq z9!zBCZC`vK=0{)g5lk1f>{xuF_cL}Xj>4=e9Xk`B!yZ~(SYJrR!Yc&L8>VPn>Jk;E z==4gQfPG_PMN3MhP#)%KaR&C)mVGxXl|y-Vun%5K<xx!RqTPrK%4K9laS5i!Sw6&N z*k>)FT9K-vydW0rJE>Yo6)xlI;)Zgm+P%0rdxh1vCDlghz&URnsRtA-idk3O6LV%2 z4`82yY($SzPbfyGIvt8fAxXIN9gCOvBMd6WFMBVwg6NMjxJDDN!KClnx_Bcz5A&C4 zu_?8sBu}<2-hqkPYugp?iR-p6K2Z9&9g2@&A36s7Sn34DAaFk-j)o-R)9Xxp4*R(A zsed6ALwUtGGsLAXQPlm;uEYuDQnjQw1rzDLX<D3tsW_Lc;v7tOpV_rIFV5MGxB&YI z5tc=%lCpTRTX8ugnY^i6MO;-D{F*1O!L!J&OEplmb!hkECQK{J))Kd2Kjv`q=}0}G z{Cw3F_uwBGq@P%K`%;71TVZpNdO|Vu6&s32FwKqHSiH38&&$(g{{x+mE3mIktKv1- zD?%yjQX4bHC-J7#)=V)mx21Ma6qL7J@g7Wz?`&Uupy#Y0;-gs>g!Qr135ru&#ZJXh zy>ez};&Yfz<6~DGgFRrlL5fRVqI}}=2TE5`36y^X@jFFQDutqMO-qY2u&++sDrTi} zO46TRi}NsJ-m)8U0j4fBD~e07M=HM~-%6EHKQdsy317WZRg~A|m_<aY7G4bTSQj^7 z2Jp)6#Z7V2TH?0Sx2+?7fEmENb;UiHiuJ579_V??9>q^EZSUDoJks;Jjm1m)ldZTd zztY+PQ@@g}iq~Mu%T3qC8-c?zzBX^0Qd=k=7u2@Y&MXySwJWuU@*XR5!zy(UQiY!a z55-3zqwt3|$Kn&1wq@;991U4aUMB5Kd>)=tm++l-Ar(XUe29xLVT#Dwl{f(_hPXGA zN`+h|i*-wjGvcac#km<@i}PYO7jXfmh~&qjxCB$n^#4BpYVvaYvEuf>K5Gv7W4-?e D=|Cbr diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-314.pyc deleted file mode 100644 index 0cc6189e834da09306fc02c061a14c4d3d2f6d7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50036 zcmce<2Vh%Ab}kH%011Ks*n1J!0T!^SQlzLxin1h%hMH{>qCgTPA&~%m0g4ht$;zgA zvng_#rIcqW*^TA*zr=Ey<xR1-B)fU<C83tyh`HG$+LB~96<&MeM6dndIdkvDB?(gA zxA}icb1-M-%$d1!r`?%z&NMmfRs;UN^u{-XzAqUJUnfNUGb^6=r;P@~b%WOsHJmkg zjfag<BYsm3rwpV<QwK~@(||c@9!QI(4WviY2P{#`Kt?oUz#6p<WJWW$P@2@kwgG$8 zKH!Kt7&jfx8pw`j59CC126Cgh19{QBf&6IxKtZ%%pfFlEP!ug1D2^5nltfDgN~5I% zWzjNDXFgm$P!X-%V(=Ke#m9}&Ed_=ugV#}H@TU1pTT?}OqfVbQTE#J0h{@2!RC8!H zLUVMXH5{6Y&~#s_#-)}+^AKv$(boCuqV*h;j~J^irh!8X5SpnAb#Z7RLT$QGH-{D> z)b4X?IW~HYH3oM{><_GSm#1a}p=iW26Sx$RBA&U+(dlr=dM)Xn)q0evoReY6ImDDs ze`vxf1!nxwz=U(gADWu?PX!_#tF>!9Ja<_NPEAL<oCj2|v!ktTdrL=K$2RBKWoL9c z04^ebXEflSZFWWi0q4F`CkKvuPk5|dGr{pdC=%#$?mux*#2r0+pl|R*9~WRE5cLOV zkk_C)L(V!Fm<dezqruP=mr=HQ15<%Z!k-=tjnB+a1Z2zD<tZsVKNpeB^AV8B=@WrT z|NKl;HZO#wiHK|&56_MTLxBm|6rB!6+$pkcDi9qV3x{V$!*fwND>5Az!&8pV`lI91 zfr#5Cn@$EUMdkDZ;aRFk*>Zd?Ao-(VNlrf!xJ+DS)1ZGgAg7&(N|a^V;QZ`ZK$0_u z=0oGrc@#MulG6_bLIEi_E}M^|RwUWnCrMyoJu@AQ1|oC*@qpVXXUvC!5y2!=)V_GU zT!9=2ha%ybfC$SMVJ9Ud9rKT05TP~^+99w41zSUud4S)nph-Wd)+dTRbeRLk)ox3_ z)e7?dKW7^Zeso@+A!<YiPB~i=O)WHp(T$@fZ%WkcO^v3ZGcBMqrQ`P!el7UDjNc5e zDQfkaeVIeWde*{kqb`>@RGKs<y~7-Jcr8VSXqGnvFuN691>GX2GX>osx60tl@#PJ< z)~7{i<N8pwgCMp2drIx_6%KjU^9SE7#Iz-i$@Y~XK8K*M6oXCfRt$#p$5@_<dGons zWxkxPDI(rm(3$EjTo+n|&|(ofv{O*(p)P$1C`&&QWm#t`m!@1TjmI%&^p<-oIQ2#~ z-KEc0_|>xeD)FS1-YqJQk~lZzm89;}v<j~(6$h{CO?f@JTs1mgwVU#Ka=Gesyy`dQ z^`vq&tg0{9ro5h1t_H8ZzTBJgdUCn+_0_m3uP2vFUtdj|^4g?a-e$CdmQ7P{QWCER zsarQqy;<IENZr0^>do@*K<ds-Q*V+t_l2$AW?h@xwkfYoN}}-c=y+}4l-HBX)u!XM zV^dyFE?0++*Un9OJ*ix~R@GP6ro5h1u3cVzeeK?q*OSYoudnV+c|EyY`ugh8W}7|g zi0<w6ZNWUW*XIP>=i4&0fBopK%uxH)G(0C9ScM&2h4rn%`c=$RiP__jcfjZL9!6__ z3bXRT^|^VEAnxcUamQ%BUo$V6!TGSpc@Q}emt>SCQ118DU>=Hjk9&u9D6^`s3_L0H z%IeUef%PTqO!1_EOD@wduBQL4x#W4D_Iihotk1=JqR8N@9~xXAlWo|l1gbULtRwQC z)MMOwN_=H%ukoJhO!XL1`cvN19GByBVcq0bIe}97+`*GHqCSqOG5pL2_?fSI&)}(_ z*`ZMSnueay6+rQ#Jw2N|X6U(O)Xe$XI?f}>Xg#TTf`gpmg;n+6G<0@7{m{AfVR(mB z3w_Mv`WhZ%>*+V)vB&$IuVZL(eHzrj@P;uXh?!2B#)p{mNn_3;W+rLOC}Kj%VmxVh z%6{)TpJP?4Xd0SJMh!ZQ20n+c3H3vDT)_P-(Yq0otcIz#t!XWkx`;RpN$YbWdanO6 zuU~0}w8GU|o_7rClB{Ay*^<Y2#}!Un^qkg|ipGf&?}VCXGEQ1gp%G-ma(Dy2vSece z*91Lv^3t#FQ78?*U@E<n8116#YYFXVYNHtLjSc*ED%Bp!*j5!|ie2964LMNz-|7u+ z6wlmtt>SjxmyNL^FWDE3N(Y`76slzNobrtWsu^F_N8mN9P;Jhu#v4MZlF;xh5Z?3& zFQ_Hw_Fm_mOa6S!>G@4LonOVN?RzNG>?%$j-$R*ZR&m<ml{T&?e&1Sc;Hx@mjVj|p zl{d0+JuxS(HkebAb&A5N`H5xHYU2rI@;tFjT5W7zrUS<4Zf_L(3*FxNXwPXwbdUEU zHqgFLDn%cSeahOO*bj?@=cVz0b38l|aJnvHOAXsQ&Q8xIH}=Fl9;XsAK8;PJz(iM< zv%|B^>U26!Vz<eO|Do^#?~5t>QqFVd#3l`Iyqr7daXJr2i7pZi&dfOd7qJ88ADam{ z{Sit=ocuFEAZof!HKA2b6Pz9wPDi72k*?O(g@pxWzt0nvrXHKxJne0=aX6OZBiA^t zbWI+H(f~0STi&PHmv(3qv+$6zU}8E2V4yNSks{@^0d%PhO$0q=RH`{PQ0E$PjVv^c zxZS<OEj4Y<CSRj#xUFTEuW50((dX`Ujd=7psHSI*`g(`^S`Ixk-ZB*oOA-J4r8-}1 zYUGNGIJp5m^t<R986G}6;`23)_}uPBVpTO9k^IcG%jM}E?%vZgau(=tOOw;rThrSH zl8GjFZ!_h}KF(&WWhxYoAdg;m@5t4d9ZW|?8mjBAjD&nmkJE?Y9~tq*GV74zl`HMd z9ar72rAWD`9@%m@6b(po;hEQrvN;;PJQs*iP1nmmaiDADR0K_C#6J;`+IQ`08^QkJ zg^@Wad_FK9jf{-Xgy$#5{E<LQFcgdeM56wgnSj*NJ|f<2XZzOCt)rKAZXZ1vn4P0d z+0p3i+{n@3*hmB$i7nVjyg>W2BXhyI*3pZB&_q~jRkwg!XLxfLIBfx=Wym?f5OyWS zmgA^2KNE<^6}sl=Sr@$z&k=bF;JP86W^^=s#pQWD>$R+Ss?okHo@R37ePA&Zl)ZfX zrQ`7olf5qPFgPl2&M(>OR_sML3zlqK9@)!oo?5ci#JA*RTjPeD4D0*gW?0n}>9ByC zA}ulhBbuT&1@pST8Jf5mrr^D%j9ht~7q~PhQDp}w0xgrGHnbOh<tn{!iFOzzH-RPq z@jj&%cxAhiLaDzJef_P9Iz<V00if<|21njc_ftJB*=kqpxr)E8Yst3zk-cJ7mBsTi zsj4zFtP+i>vPlYuqmNTYLXYdux<(?6Zr8Bnoj*0U-*<&tp{u&O+SS|TSsV$u8+(Dc zH=t{1Xh_fjaX(HU*;iBLX{vo}s_`@eqQ!@h(THrhAa=SVF?%FD8EsL~$9XP{W9WRn zT_cf2kVo82ZrL)4jqeb)#2**9#%KJI$XbF74rPjb*Q6AlT}xo4z~Jm$Sc*O_bP3N| znluqCo9OMuvR%DFw@aE_oRqi*+_FPbYCjMe_s<2e-#_vE<Z3#4XoN=)?pT%HEvFLk zsz8vY5@n`qc(UK8WTL)&k%tyXjAI!pVZw{hT#?b(;+V9k7L|$?SsSAjE}|A%OT)!m z7c2@GiP>Dk^QSOuQA2RcHqoAy0%~zwLaRpUj%j|B5s!%0q%g=FyNnZx!~=4S`hbFr zA5et5A6qa|o}fM>r-%3;BoeEv>RIgRS?um!+_Pt~t7mbz<yuo~V_i@8p8B(k9^d24 zVc(UjT`qU??qT2Kd{;2E7>q39+-Wf^Er!BT_sCex&V5vEcR1&n56<8$C?Z>D{Zqkl zYH<-cgZ&r%QbaaU>ykRqUt;FrE3RQ*tRzV<N2ka57t43`P(M=Vib>24BUjN0=E8Ha zy!CNik5fk?P2lTuU-hAXjA5Kli_A|>1~0|7yUq?fN1{ITN<Kka9LH#m2XOUPiEwn4 z;jZT0J!k6|_g-_4_^$dE5hNQIR}F#mSyV%_F@2X-8@6D~IBDpwGZ>!FIcsR9MTzn^ zq@Tl;Fm<b-LBXfMt=w>=%3wHcykxj;-eNd{s0>3Tj&5oU+fsu@cgnYjb`WP!>A}cM zcp)I+WGuyl)xw1c&HnXHG1z5vPvIO39d3`T94_(l!=nX%4aAXhfN!D5ON9sScy2y@ z&;MHo-#q%p(KiQQe*Pz)|7Fj=M=T)tSY@m6Q`S~v%#7-ByJLB)Mi%AG<Y9or<c=m4 z8l^fN1?l5-S8sRKhzIknoHi!~Q0>wv7{;2Ea91QSGr8C|GZUPPpdk&0qlYn92I%xI zFtIp36QKrm60<%kezbRF!rh4F21c+1?(U_RvMPYq1{ys|6zKB}H?{bXJQ3O(tJ0y# zNY3}ha@vN&$9<d#OP(D*cT+68jryAs)J`EqZNrzIQ9}GJllxlwX?28%OkD=DaqnY? zs31SaSgI+^XP(D)F)K7vP@_ARB}kM}bY$#t+F&>oKoyuqu8dp(yo!0SZDhnXJTl@R zn+!?Oi`63yKFlABmxdFWU+K8I$OXn?r}L^i){GQ`BUe0)=qro!dcv(&7f<Q&ouJNA z2IEKz9m~!HbO96Lc`R@rJH$Yx5+raDFB_{L+cCq8ERKv+!;OSwV}lmbz#)%QG2}f? z#o)B6Gnvphcs;Qnp6iAYt;?LoGFScf-)+>oi=Dd57IY58r|3HyP2N~Jq(06QOQ?lj zS0^tT-B=_(P8T)o{PbY(o5*hPHKSxh0t^nOC{B>|YX+M?<e#}5!QzdMmW%aE27Sy; zlr%yskL!l7WL4gbF4gT`&g%ZqV9c(I6Iiho+|0ij_{FjZwpuK~GU|AN@EZED1wDgT zd2$Mtd8P=~gmStF>6BCFE_cf2F@G#DBU`Y-lxF<W1quzi9WhfQ7KSl1!3FUXq_Fds zV`+^Z;zL+uT(+K|<LIa~KOR;5<5F-gN=e3IGqP#_sRKu3^ZrwZj~<L=@{dR4m~rN~ z_sEH%eFyr8HtHXDn__mVht^9iqJ*)0|J)oz1Nh`T5$ae))EO&CM%C%I#4`Mm%b{@+ zA&|}f1%EJ#HNs3JAg5ADN^nw6oAJ+%P55Q=<zQfD;<1%~oV*Z8#c{thACS%ceoA7Z zuHr71)3AyONRT36*3ysTouCG#fd2wX6ofDnAx-K8Dim1-C#9btg0#S;@c?8B(kFv> z-7}Y^8yq?{6CU%=NG}1Aev(2=bKowUC4Ue(T0-H_OnBTsBd1A$=)4q?Q=`&lh%ZbB z@geY2l<21^QHmdv+(Ixq?LHt|M@L258y%HX{bS&ThlY?rDslw~U6xZJ^B|i@%0bSc z`P?r_{>!qJpI|N=gjj=_r+GXL($EK|oH{-Y83tad%?9wnFd?Tyc47{t5FUI?kaPvU zL86junh2sDq)r4SIc*|%aTe4W0ZjiSDS=uHT%_lj#FR~<50f)te-vm~!W1cIpx$F7 z1%ir#C<e1j7j+bo)2ICrkpVo@a_TfPO$koO=3r=U9vM=}tw9VaXvU%O0Qn>HV_az2 zB<f%$fG3}UTm@b`)oVmfo%PQVxP-++U^XmWz8DNFAb_d}lN$)bWAr^Hr-lJc;W=<f zB{`4Ox$uH)o`aMJ#6a-T20@T0UX4Vb`dF3+<|Nr71!xBV@+D@-p@fiz9}IvW!yF-z z7pxYrvIPwmXK3W(O8usyJAr<FRyIfG!5bfs^O(0VeBcvOHu1V9H5Qz6_sLoNB)od0 z3yupx630GnpxBF0alDq`*nBh~aQl9&L;AQqk~m7{ek@l4l8CeIrxo5AzZ4?zmE41P zj)3TVYM7<(c)y^{?h9QEO5qSqrXnOG!8Ny^-Yl35QIk?K?w?014yc^$EC)m4GkurP zG1Ctp7i5{3qERPG8iA;3vJZzQkR1;Pg1|~4mxSK}DIDR;fp0AAmnII=_qQ~Uu9tZ< z9KJ9=C*m`Y@!J+i2FdIQZ{F$^f(T4MenNQc$MHhZWETWlGK7z6JYtesa(Dx%(*W9` zAkFdy#AcEDAU5wjh6*)Xhk~iG_7l<Y++mcQA5_jfaT(97JfvM9Dk<V3(ZH<8#;PDx zpO%yUF%g<^5{*W9b54cEs4X6)<}ZSBPlbZCgLN=KaCKN;C=q5;=mbT9f<c}r6rs%r z5$sTcwbIcZhl*HF`)B4ALd)r6N~NZ&(Y7-|>`^R41gD(m0#f*3@FIG&+K{vMqt{+Q zg{v(k=Kw~+i6JRG9*8K(vM?2e&|!6nr0|76Xeg*wL1BVo-x&8jk)bXeFK-_GR)ps# z=<yN*O1sSJ$LNQ48;Pprr2w>^eyU!P5{*@9d@8S;!;yUlgXmId^h!(3MVhr?SwjJ7 z7Q>hJ5V^`T>YK3bB$`inUMWv5wU~W0*(I7y-m&lmHgZ-M3N3Sdo_8umA+z`$qf(XE z;65v-kB(yIzyv~`i3xZxtN3ZjEWw{ael#$}OCzg78X{7Prjb+e(wqygWmL%3aXe2i zB9NvS_%cUFX+ps~0>nlL+B-&aU?>A-7D1y-F+fltAOY-oaboyUj#-5~NChGao_*j) znbgv!!TUUdP@u#^@GOKt<P0x{_uxgrLCj0=BiR(?h0>6WAZMz~P(ZRdlty(PX0>Rg zOq5uu1e&@KjogExX4%ITXGfSWcT@=k9;btoN^U_+khAkt5tIb8s_Nq~JRv#{S06=V z#}Lsu<P)<Y<QK;;APD8ha10Nv6G9lx$WMV`sxwN8c?~|wT~c$WU`(Y7fq37jsvuT; z0Z~;%afw;rS!a}r!fcBqSribOicXJCYdLGrMbt`Zw8ul%-1Z@O$wd>7iZY6)N0N|| zK`5Y*gaTA%6hdiupy9$G(Og(*MA~y<Mw|0X!~zK<?JZy&qbf!2^!l~>rI{STcwBWh z2ZmQg(}3DgD2?_=glNw~IV4z#2SA}9?g=h<XS^<em*}(tN?OI^C24*l5ifztva0GO zQT1Sq;R)PO1Z9z-A&K6Bg#|*1mftAah`LHr+X#{;*n^O{yYuNy`a_|xn0%>L@c^_z zt$2B*B{Ia`bp#VV5R{r`5cp7P<(z})5l+iQ_>jRwcw7WwRj4GQO&o-wD9Z8=h+}m0 z!h((mY6o?T0Zwq4mBNAxZTG;346$}oO9kxtdH;+OhwN!%091GeY;r`YOvr2jt9a}p zjE=f{rC-Dsm-O=lUICz|pG234&Ol-~gq)<GrKsm<{hc~5&B*C|7K2^$40;O6hc=-w zMDwP<Y^S9l#&a4_vD!<W4+Z6nOTmdz`sj+vHuBP_$6pT?#EudRiR4P9P6EXQXggdS zESUGv9+RAUFgz|f5Gq>+Ftm`kGK7yYn&Sfj->wFUK6s^UBH&dHix<mj2l+c&%Am+B z0{KK?I)fH1k*KUhyE3u`Gan5fSoogDDo##U_T1#O3k$T0mgt~JvJyxqkVA>m_lxZ~ z96?0_^Eh+(4ux9!NdOwpFPo3iCY@|K?U#b|aUtbVyt$u01X7RFQhPu0N*$nY3YtKt zu=>rQ#fgx#HXopEWI3%*Y~`j!X?BlD*N962UM8=iN42q-UM$);Hv?*M;{lp*@F9*q ztOX(&UZ!C$Z*1{7AA=HvMJ$;H!@vD7KD*ybNi$pG*#=ww^@A(c>gxw&$I0u5zMWE# zlXm^^x0{VQ-PaF4$}hcs>`_kcjn0>QUh28gdOP>_frqtQAJlGLs@ZnWyOg!_`oOnM zxn}FPT{g2dULG+y(pD@E?E2q$3MV2f_U(UeFSv33cKxf(cbe~|y=i^Jx@_M~M=Cv! zHjOK~S@f{P{h-9XWNTcp=iiumIrLJ9&sy?tOuTrUGC26+u|K!v-FRx*wuOF=FVks5 z&7EiNPTh+w*X@4?1pr;$olE!9@0Tt&9DL`(lFhqfue~#Uci~~{-UqFF-)UT~Kel2o zq4JbHve&<6xmWbCegA`YBwltQaRJ2?eHGmMKXE)>mzQIWr_v+F8x0v*kL+9M;U-_6 zd1>Z$|EtID99y<`AY`eq{%+c`y)|x5vA4(53=Zc<Bdgqy%)D&(5Vtns_EE?z21nVg zf!n8F9l0}dZ~L1)Z}cpe?<4l%+ZTx!o~rGUz4XZ>#kX9yx4+tbr~6*vn-y<VESL5Q zF7wOw7UI(S$o@nUDs=VwXS>%=47wlLt2T*CQp5N9C>>6cHjbkl%Wpk%d-BzpJ2UtC z-#qrlvE_>WluhXNWTNC{PbMk3wG*%Q=$)hY>fda6qh+~luiz3`wl`BTJdf;8B%#tI ze;c#6Pbc^!e;cbvl2`TY?NiJ4CMr$KMsGt$LZvCWS&Pm|o#ybet#ZZgxo26j?OMU{ z<?xctjV^L~`qkMxvrD$EYRA%dw4=+mD#DK}+nn@EUE{K`2YsW7`^IF7Ap=YcZd_Ta z?On3%jhj*&c^F9OMDX@$YR4^cYl<WHQC`W*y)X6N?x&z;Dp&rE=av#YOYBZ-d@6-` z?oTyjpm%FL*?YTx$=0-D&s&u$!(4BT9}vBC5UGm4YR`=uQt}%fwQl{uoZ{F{85P9S zQ|*QCp_}9_<u%_s^{##Q{WA}Hjy>o(wqzTO+tW*}@#BKWS@6jFbK+sjZ;o3G+qyo; zFgbR|t;8kM3@&uunT$)8rN9~=6<p@1Bym%!qm~lp{=~B%fA&G)f!htQdVa~XTzFvF ze&9QqX2(GzVh<UQ8wojXB+i95CT<>Dw%0Dz?~dEk>^*UF2Fmul;Cj%6ntsG%-ubuc z-ZA}7(>n{xbvSk%Qr}Cu33b?K;yN4zwRjS1ep@`>u<L;Fi`zaZusXcPcp(*P<l`gp zqD*^Pyx8FAzJK!Vk+()3_6$Af8CtSE%{5SzUlVUL6j$G^`=Gtp(H`%hRA)baHr`oc zuZUN;@Vv)GUgyk)i~>$mkY9$;vex}UQ-Px~-b^WcANM`9J0IAc@s>h+bv(7W$Qt*X zxs2X4Lq<NQGw1I_W$ZKd8$Up095T|evOXy)14%7~*7%7uPC9|4x$zXE!?ogWeZBm( za_SK~9@*P50CvC8jfS{lufkx~bq5F0o)x<jlTzcI#wA<JioM}(;p?TZm7>8@Cpi7e z*;{9qY|Zg3OTIN85bQ64eb$OS=f=Q~jozGiC3Fk35mM&d*tujYr{);NZ#><EZm=Ly z>`kZoMhBq|!xS%Hed+4$Nu*1>9#q-BbT0o>AkP<Mv6o`Ew`1aqr>5Zfj)?dn#OJKo zEALqDmfkya|NOG^@RIE*o(Nwad}$DJ2O{ycm#!_@>R0R)w=Uha-Wven79v!$%uLI( z#-A1}&w^#aihawS;=7IarXFrT^kDm;<*I=%*5ifi8B>=jx|#m4*!7^;br-Si`m9vW zS(YN}d!vH$95|QIygm8y>`NF((03F5xH+{9ZCFrV0%b8+EalfO+v<qd;4(xg%&BPR zmj%gQiy@<M#lH8Q`Y*J6rUk7V^-_#_vv9rjBerP8-hF@a?b)}G)luScY}r-~9wpZJ zAwe|=s?u9Mc+VBDRV<h7h#wc>Lu<pI7U5ommpmwKy4(NyvDc0*mv+TZh=`NxB2I~j z(}=*rC+Eg?S}NT}Eny_BxOwrFtGBL-SH6^Aw`{9N8-d8f8IkDRca_L55}p4DiKsF~ zP8UR?=y#Q9UL?APL}>JRH%`Cod&$S+Ex#&y4r(C%FCTjeBWAT|_b-S<0~y~<qQe=Y z<8P3No@0GZCq$x=?<UcEK2CJK|HJbcDP|lp0q~j9I9A2lUyb5>{~W$0^csQC1QZ&9 zDbNT^g+`z$n&vfo(>y7p5g4_2)4dk>GrSql2DC!jE)%k_nb702K}^i<vqL)6=5q{H zYB^~hggP}u^XR099p6*xEY>H?_T>)MYs@td%9eu|I)_{HhnQSn0bm}d&u3V$p=MyA zuMpDA#gMQsQe`xuzei79;<KsekY1syw>A`ddERnCJEWfP>q?_bUjfR>k3_iz65Lc8 zr&=1us#amutFRgs^VV_>8@;RTx}qsw?fL3ZzWPm5C#h*IbpuknHch=*-fpCB+%)xO zc{d?-^QNgc$=g?snr`vxb>2Li^4g>%3a<vWR#2|iO?f@JTy7n&woQ3Gxm-;NUfiPE z)mFn;hl;UoP?4_!^>W(V>D{X7<v>4{H3gg;cgDL7vD-Dxlggnz>suH4;0|BXn4!JN zsG0LK>o}8uz?wf*`k7NayQ-X($#j{9`qwZ3syt6M^LTCzkAd~{oABuH?)23S9bKOW zHLz>Lm@dQ&CQY*&F+)jXx)I||8q<TAlj~!KPOlF`srDqNMxCTXC!hw}XpZE%MBE12 zp{G`vTzd$*Yn9+adRZl_M=pv<_HMlUG2(g9-ZZ^7)&MAD`XpLJM9-zz;yu7)`$1nx zve6e$*+*l$w;%Z?8J#ieug;ZpQYsXlhm!N8yrJFpk=r!WAO0@#Z-F+RW9VG6cgD|r z#FvSg$&qZ{Q+qI;;;2HEY=oihHT;3f4ZS?aP!bw0_25S3;J12I&5hqxllOS?GBKy2 zO*tj>+DKEW&inMnWm=sxRwzkJPh*3(!Ry_)M9fFam-!?aKZ#Fk3Um<KNdqw2;XN7c zgbu=1?<q(d4NDcM#NchzX6&EziU=K^OHQ3K!bea);Jr^Lj-#Aofj|gWJ!rdmf(2hR zeFB!}V?6{_!$1ik%>`0Fz*aeSwVlzhV%~#f$(@}}NGAlbYYhDbIumsgXXhMtWCKzt z;+zRy2p|U%Dmr%#1-QtH3|xrW@I@2>+=LJmIH7n8*s%3jV^$>$Pb$@-5>yeU4iZ-C zh&fgX1a%}A2<nhG5H2U(p^qk9&iV^FT?P+{kDDGJ`VY`zASH&!HdVJklQfr&bxDQI z`Dj3{6xAY(e5{wze*-NgLVZoh=+}Rxq2<*V?z}*s`a9_>wc=)gKQ>i?{G1!xUOX1h zv67IvRS`0mwjsSlOr#wINVQEmL4ai7B&s`!<k_X&1iA^F28fmEC4JY3`AR)RMw7SH zOJFa7eFSLQl@1U%NT83v83LpLAUz8JfnR7gK-%R(tct|leT$HBhRme!0vD(dS(c6= z#S`dAfLWp`F}7uMes1ablc~UqCQ%5Ci*hK!*V5B#0$FUDWw23pB6169ZGnLc9W6;T zw@N+&G$%>Z1cCsu-Kzv#Ni=OkDOVO>TO?67Rp7OO)Lcl4wQ&(nsJbM?ScUeDyB7kg z`JmHeS4B8NGul}Avk6`+i>nT|wL=jG(yS0v)k%9cL2Y27>1fOhc)s_s`5Xj9&&AUB z4v#E&KyL$SY+uWBqrQ=aMroLyDhq<IEE~--oNh4iM@GhEWAo!IjhIt6#w<e2ZDdRe zA?4$2HQwVB1dpFhD#rRz#Z)(wca_5Q8s-Q*Pe39NArK`nPv9aza>>(D#B3yaiowJf z%NC-K3%wnRK&f<vI4%O{1V_b*m!e{#^nbm;=#><ZXLDYP!0689tX)f%UHlO*T}RBI zyGXi;U+L!v{5*kQAn=O>NNiF1PXMG<5g3<VA^Zk`+XP-BKq8CM9Rf0eUn1~H0-qxA zD+GRuz)ur+mB3v9_n`C|`TsM4|3ctb0U)RdNly|)q$6dvd?fuEMZQjvX=5y;Cf%cu zUnlSz1b&miZvj9=adu8l8xIGdkSF~%1;0t)K7qFge44=T5cpjJzXu>&=*j4~mY$Jh zL&-1wKE=OH;4=h1OW<<^K2P8e2>c;|FA(@5fj<I}(;(h}8BY4I6!PB){C5I>OyExl z{3!s$55u7;X^HR$1eOWBOW?}{{*1sw0xJamoWNfY_zHlWA^8^|wn5^KkO-ZaABXrL z>~V$t6VhK2(O(hxYXXl5e3ii02z;HuHwgR<fxjj2cLcsk;9CH48qS<a%rl*Sabz$3 zJ%?UmiAL!kfVkVGe<bpMBJj@y{)ND|3A|6>0|MV6@UH|uB=Bzp{++;M0{?@+|0M9g z2>fpX|A&CV2w)_TLLilZiGUeE&Qb;M6d@%kjiS;CWDu|t5rpO-!vUE;7HpC-DZ)m; zPQXDRi$FGk90Iun@(AP;C?HTspol;*ff53x1j-1M6Q}@ik4o+2?;x<9z-|DNW<W#4 znKOhFL}P@cKsQDA5ZFVYm%v^E`v8Ps#0(3AA{~iCko1vsfCvr}=p)ci;1GcU0#6Y* zLf|NYV*~~Ph#TaR6mHUS3Mah~;tPRU@O_$syc7f>h@i;p1cjX>aGJmw0?!b5mcVla zh6#|kJaGz!@raU-g3b~cC2)>_pTHOa8vLXQ0s#QZj9NaDO;H%x{*%rVxIkcrz$}3f zfiM7xV?h2n1}Q*MEfBzkheUfQ^XG|9B0yuJG*93n0A(bJS3o}Td<ztNiNIw7F#=Zz zTqSS~fSw9MyZ|py(DxDe7=iC6@B;*XkiZWS_+bJs68Ja(RXN0M)GGfG3jYLwA0_Z( zM1e<9dKEJGafG;Yq#G3b5`mv2@KXeSn!wKx_*nuk6ClBV=@tM<EI^vX&ntKE`FV=? z1p>cFfIbSOI|P0Sz`bpa{EGC;6vb?xqyF|uLO(^|R|vdH;4T3V#TFAV6UZg-s}%8T z1nh)52)s_{Jp%cJW)b)eLQUkOiAQ>a&|fEzL8yg54uSg=_7(viEj~@Y-y!h31oDXF z_sIAA1l}g_4uQ`A$fl!cMzUqUvIdksOED~d@;UN-p1>avxJGRLkbGYt@I?S>Dh5T$ zqk^IdP{l=drfE_h>5%fsHQ0(3DUX$`;+u6#4(IhlE7`f%53l4@E!A`_W$%VJzwr98 zZ<{h9$WeMF<v&P}qnOW{Nkw)efe!W5Sufb3KZ9PeH{E?^$+n%&bx7Fb|2rWMRg`4y z3Af0#Z4)_#&Eh;s(y1~Go5j%qUfS!n*KGGD-<*A8c6rOebrK98fn*~g2b~1N6G;>S z7<vIDFc3dwY$8b*Y9nzBrkkIS$5YdB$T@6eYK)Kyb!Pq^oHO%Ta)}LR$))NEbeSC| z(B(!){z^f~%Ofw1JS=cMC~(miULzmnJMy>1%ME)5j7vkOKB#aw&KTpB>N)h5ESy8v zR3X0$BEJx15yUxkZhm9D*3h~0gSuSDu6X_G!{mlMI!rFWIdnKhJQdFC#W^&c`dbaf z6?6(+x$z<Nu&9k0q|05g@3>$1cKKW7OSXP$$Sj7kWb1^a(ar6zblt-FGfvM+Z}z|P z)GY`pHLO0DrgKurIz23OKPVK^PX#wFzAR34#fkK+$m<$OCWv#@@JnIv#IY!z`~?w9 zvH>`{E4rEgO69G}C7Wx-UVd|ewA0P0czJy$e$JyT6M*+B&Zt50%IvM#yQdY=4-)N2 zH-YIfL4F$KIHM-A^S93PNw7GhJ|p5s5RWtJEw}Ue5h1qqu(07lVFPEc9+e~Z)yg|4 zQX4fW%7V|NeS*b#u%I((g+=krhKHq1bP!8r5(m+yS8TUz4~v@~6pPSDILohn)pN&# zgX#Cu3^-{frUjXJofibt{SZeeBH4iMm7W7{``+?Vb2@5_r_u@W0W(*{Q=nOW;(J6y z99<W2OhgPK;z=jIiF4TFBGEJ7RibA_qA?^&b`G2TbkzD?5WhFeIp9<@W;U9;pn7NS zT7N1EkwN}@pXSVjl~g(tg>_V%hk8vo`!sva9%D4E3^q?;A~+p8td=2~ZrA+ztV4xs zf`F>$DqairhBG!vt(_)fPudDzrR#ZlGr_~QNt_)eD_@@udzEId#p~E4_f5-=5@l_Y zR#$Se1LV!#O4B#~u+y4}bJ%QeHp-pL9CC(gMVuZcPC}8BJ^AzTerswp&zl#`_vYjK zyFe})6`N`#{i@p7C6%e*3;3jdT&QeBLRgn#Va1sBG@uK189|R7;^VzViGEzLYGbkm zqR!B-it?Ts_Ivj1+2eG(JdLo=Als3I#D7`kCjyfJh=kg12<o-2k+TQfy_)G>=ZI@I z9EoE46(*CTPST-(Ip#=o#N7o|*o>%Z2RK%&?7&tJpRM*aRX1bvH571SHzsDHJV_nc zL;ut=phO~o^A%e%Hdk*CO5$=Z)<QG8$hA(fO3+?M#Sgj*lCC;=!O3e)US{&TvH<iD z5r%Dtxu`_#TQ(h_uTENd${E_D%4x^vqxjwxD?DC(@(PmIdc4fz72b8E68jo0<V(kk zVnA;!LLZ|)WLU|p!HO=caH-g}<Zxp(m*ZN>c3(dnH<_^Dv+)>Eerx*n!mHQrT)Q{_ zX6%jFa^?PaARTs+hS5?;HXeF)@Xp}9r<Th|Opiop0&j=k3V-p+l5O~r-F3I__14!~ z@9$o+9nwqS#&a?-f8;}IM@SAeyzY6;bHDEG#<v=mtNJkIJ+ddVr7V|h2h@Q+!wjh& z6fIxu)lMi9d=0M^->ZGI@r_0ZE4fKniSi4)tjubeX%K>{DR!j&K)<LGs*Q2ff%XTS z|K1<MkKf=ot{$Rb$k`}{DH7YjAe92qjWi5Z>E3h*Zdjrj*abI|3Fa9K32#I*PaC7Q z(}vx~s2v?BQz`@7;3tubpVssGa|*T7Ky3*x)d@>VN{5KR<oEpeG&cOZ*mROO%%FV; zm`&oIWwko-M;*rR>~S_shQke72&-Yb{B90Fj26-EY<0FVrnM+%^1kElVluVEbVs7l z?AxPunf7L9Fy!nO>IQq5a-Diw7f4uI-HDG*)>@<I<0N6SfKFesR_nfri6F_r`)8c6 zF%Azs@HsJPbe?0*P?<}dfIuZGAh8K_stk|Qc~BTJC%aJR&e5hW4roN(BrHy`jsYsJ z-6I}85wp$~6;<jW>`<wC6?FWP;44}17NraVRsxv-k8@R<QlivkPfGe@yy$Udc;>c6 zogCAk<$c-?>o)q$tF}C0G~8=cMRw*=PNy_*B7<Q9-<IWu5o9C&!e*?Il)t&uW3~}| zr-?tr&<7>|&83p%`_pE$$`opq-qaDR8mHxA8nLNiC(=$E&S65UGMw2uLZ7Pqmu&Lw zOl^gwjQvIv83ABZLDCO^_+;|_v>j1+)}%e^wBd9LrXen$5Q##sK{?QC(&-FI-YzDV z1G-tqgRK@;<??h3edRr#QEvdYp2h=*$yy1Gn880qWv#1vbV1AeUMfxsDxM#YzzG~( zokN9I8BU}oDmGE65bs;}x2g(Y^WZh(pxZ2V51+*w7lSR0;8GS!f(J2?YK@$(G;iMH zpwl{T$q{;+_089>3snnZAou>?J-AjmOUO2|1$_Svwh^)mUP}K`w)1w;yN&xkzwHZM zpXqv#{p`}y&%B%cY+~cvZAm&$@#APa2AYP5P#JNjirtz&qGv9nEK`x?-o4^UpkuQ3 z#Ylx9qL&k)8S62rkbIb8v_EJ3R|7#&no7hEx~&qe7=_{qt+RMvLaHPm;+3shE*;l% zHUi!0QVD*fQUcT@<@6}DX)stw#FI<N1&+|(NPV-@=~Rl!n|gBDCYAnKFo@9H@b9S5 z+{&8^cQfv7UC!P4V)|ca=6<EH>cvA}DQx`sp>GscldtK;Lm%2wGM+PjGV22a{eA$^ zU&qJOzho)CS@fHy-W+{n^nqpQi|OxLhIDVhk@O8D_NNld1>ULRt*O=TN2)+E-6@H; z!q#c_D%(3W2k}Hi^H8LV9!4nf6kxXZ7;Lpk7XvHS%IgPsU*|(pw)tt}cMJr%*sFRx z?SRqW`v!1dJ$tU7Ilbv5^oWIW27WD=FEhNEm^W=$l4fE=aQJLV7v))4+-4__L#mt& zV{((nc!^)0&w&MRnl}p<3t&m@%l0K-IA{CvD9)F;m0Az}kYm9UQ)F(XQD0COGIgde zAGs8$3wQ9NPJ=(MxUhiAkm)N-gd?94PH9VarGio>8bgRjDW0fo6Y5OuBMFo&eo?BH z#FOqVf)J(1KdB&3qD+*}n$#(+snIfTMYP;oiLrZ&M4dMHWweFZ1O0LbrXZc#Y8*=( zveAKc&K#LH5Oex8w45RHAgqJXYTzS?Zfs&XQd{LHf*M#aBsC#P>kP<N(4{P_wumWT zj0c_TI9OxZBFd>n!Ai;H=oo$RbVkR>77U@Wbo!-$qSc=~S_Q<4S4DKTXfaYARb48U zD+ytPSPLxLeHWiSCak{3VgqLn&eP2+5G)Bz;A>~f8J-l6IR@d9L_Ig-E}JmjzLE%X zhR2~8k7G4_MB&@$@Y$18JFAm97nE9qbrUG@<I@Xv0@N%f!!s}qL3wJglUY5kIE!y6 zb!EBsQ_TI?e3m}O9=Dx!DKroU5L9lL^2vs8EZC(4hE*uO7vaTs;p4g|ry#N{B6B9v z$?3B&@&m!0#|39ys)aJ$ci-cD1fT8lA(yU1D)BW~j41WgUYxUosFyxc^N`Dxt<5kx zIDG9arA4509sOd^UGY)I`d^`WmA?-Y13n)^(3he_QyzaNic^Wihaev%@QDGf48;`6 z=MzPQ^0@$=PsnM<_?gAgK(cQ}o_7gQH;()uO7lYrmCs6=EedWdEIGE&mt)DzT}#<@ zbQsXM)ZD+6eF$DLbCg^^hHo|6d{Q+!d+skh>>Ya0JGA7*uKcr##!cHpch>`V7wxNc z$4y3ud!@1cVdL%xjjFO|i>7o5&4|OKKLXR4723xnGGNuZiJJ#sIeP2p-P(I;_f7XF zpoeKcPE4ORKC*A4{ck-1bV(0TWFI0~8}R&{y1SXn)m!hKU$*aiXBWi{BCd`Sp1<92 zw`<wHodS10ve#1B6ltg2K6!WRz0zgUAfdQ^Byc4npIf%K-NV+Z(cY!%ftES&0bEJi zMo=JQKId;YJ*?jPK*<;i6Qt5skl2f4MWSsr+9z!CxtC6dHkx~BV~w}h()r63>IRr~ z>1#Cun_!ukb!<L+vMnub#t>U#Nojby%<jvgts`tiITU``L)B<KYyOZA=3~rTdAgZ2 z>xn7ybTetTLcMw>&C_Pm9Nq*I&s2zflo=K?X&$GvC!I+}nbesyA3O>+q0ZCl1(aAn z<lqV-kz?^t$C^h5s;6di(D~ZDD`w6j%$&uTIZJqv8+4$|vDfu8r#3ZwlnL>p$TDh^ zmpU`j6sXR6Ya`h*^Am&{tuf`=Em(EFq?;QtD|V=}A$e9$dL8Q~y*AGdu^U*Z%y%xW zG`ue;)zZ*cN1&cS0|6HSH-MZb#&W5NLYfH-;|0WMWLL*&NLQ(Ybf!8+kDUFU2WQ^K z<AHe12%R|M<#Cw@aUPuc$TcxI^SN;g6`6<W4R`bSJBR=^lgLx6N9Jl?$G;e)VY&21 zCXLBWOWDoq24vbnYY+qCp@-!y56WAh*nKaJM>mS|Bp+|HEEv0Tc|iXU7;h(T_1$h> zE^igX=QL$LppLiDTfI$#Ck1vqVZ7x5S`5az@ity$M`6oxqy)>#(AA!}d*osBo(Ii) zmMePSDO|D*sN0I^Cg?P_S0o=^>5bCg`}ue)8x5~~yW3gZ=0>->jpEm$=yqjbptVAi zi*9?%pwF8@BL-X>FY}WQrs`0^l$jry(niBCc-wv1{Ocf@eBc;b`8QjMCvB~I@j!aW zG#Hpst{h+fP@_Ih`1Q9)fN!2Jm(%2Pn*8K?T^Q;!;fj$~`)nFC`buzip?v~@SE0fq z@p*!eA%qvN3y1y}!b_EK?G89DN!dE;a;C0W7hcKXTh@g;DV$5E>3J!5wK`lQ_Zpww zTgx2k;Hzg}1AH#_x#4SMUz5+yLw&QiR(q#Z`W7v`epNU$o)mi5s&Hs8DdCO!a4u(C zqFjt?+C+nNn?-@I3^jeu+u`lh^oQ~>4Q};iC%=z_^+l>Ul^^;)9XidT;$-(pfY%OR z(wL#{^(_dR9#o#Ob)5Gkqh*bTc4+hz4(&}A4~?F}<hL_<yAX3QX`0>1+i7y0B5!wc zYC7dZ?N)nxuw)uYmJjQQv_ZS4c<8BQ@zCoj1{c!KDI$L|oh9#HMZcy58aVkIXejOX z(fd5WEjcL{e6(Xep+Dk>JA$Z(Z$PQ<;n3O1=M?>%!y#V|V*|b{{_RaZMxZQ*c^PQM zla=$6(XQE=KjOeO<b;-u7zy(en+xD^1SO=c+BJWOIjYcOTuChJ_)eR>YESUcjaHS= zsZltudj7$UIIrPBIxx-9rm-j2+v3s>K}W`(TssR|FLspn1jCaAxm2ex1CXEkrVIB? z*|{#yY?KT4=ppU7s7#ICXOvXWeix}~aU&DwwVESir&jT=#|=#%fwI*IeVi8WNYvx? zVbMA+(PndS4=q}2ltrr)xWu>PitAKY>*C01A~dEQoQ#WG7jST*nY$H1Yt7v%q1YK| z*X@kpBb;shue0tSQ)8f907-hq?mz1{oIsH`*3~F<b>q8TEEr*3+S5xP@O#{`@{M&k zdVNrr5C;2sZ=$;gpZsK?8=N?x%gtIIu$qpurA5_5svu&mkC@#xKG%y#5hk0);m5f* z{b0e0Ed_C9z#`7eVOm&8xepHltMp3F$dI)~aFjjXD>MQWx;}c~GX$2gVvJRgW`UwC zvPxCN=SDROHIYqdP=`WAq-+yDLOo;?iUy$?Vqv5Fl<m{>Fakvmu{05({5B+00fB+~ zgMIyrhx-@%jxspW2NUKx#gOj*E5(q(Q%8@IDfD`w83I%0o2rJyOl^3_(z~cx>C05T zsf7L+`AmCp_loq8V)#p>&NT;{-of!jSV*3LJ>$!ZFb)Yh`9=R+a4{Gni3G~H%q8CP zBAE(agtTlp1Z@>q`l3ka<*fRc;nv^VGwkZB>G44>Ay$}-pxGTuqh^BYSwV4RV;341 zQjtY-w`}xCGt@d{D(Nh}haAy<wRVJbe?gI7p~UGzB_R?UB2}+MSHa~n-^0x{r1K>$ zQ6?@b%LB?OB{Z|ST8Xl&mI`$TVb>cPaF=K|7K4yGRT%2N#6OoN#7_`g)Hf-ETLgZb zz|R55DPxye?E|Ks$x0piT`~obSi0EH?3MnSO8N>Vzd^~(Y$a7roeIuKw<+``0<@<f zj9HsQVT!s#0WyJKBJfE9pCa%p1b&LZs|4->xSvj@8zMcTjK50Y*FXg8)!6K1#SrOh z6nKx4|2l!+An=<6ev81@DfSx#ew)xY3EU^JkxGd4H$?om1pbb|?-TLc1U^IHvjjdz z;PV9jfWRLT_yU115+Gd=>6?_6PQEu(1d+Z)Buhl{fWR_=cL{u%z@HI#NMMD4rUxQJ z4{{U&M={uoXPpq~?}^Vp5co#|e@WzjMc}UqJR<N_0$(HWbpqcY@HYhhmcZW;_$C3; z1CjoTxcoDK3@e0@;1rH0SQSM27m8p#khcHd^gv_>jMu^fw0dL18odxHPGw3XkWL_j zfR(^|1TqQO2-pcY2xJk+CXhoQmp~qYd;$do3JDYuC?-%spo~BTfV=exo7ud3&8L@% z9c@0n<b4n`RdFtXUn7pZeZo5;ycv=ZqR$2i%+I4!3UT<)5H)YCaQD*W>E-kxvQP>m zkh~H87Lk32*eB%YS#;inWwB%?!1D5+2AymnbH)->Zl%vrvNs6OcdL-0r*Gnocgtx7 z#LFOB1x2o=iQV!PoUK|E1Bp0Dl^w3@hve)g+LUoFRqtHN-UV+y?U9=%gur~<P@7{_ zH_PLxK(L$qn(JQI{flqM-ij?ZLg4pE+>CJAq;ao{Nv9ZWD+?2C@eD%A)Yy%wB?w+; z5(-0D<!q=eZYLDiP+@a>$yOE5A~YM;$jCHeJcqDcgQHF}<`&PRpnPTD=)&zCY}l`C z8CJ!xN7EZGplI0sYPmbTWZMxhArxZSEZaT>Lq^wbUAuefe(5{UtQ3~sJo0`jcKIRw zYj2E~f$}{k3Eq;Ve7uShR%2^?wJpYY4Taajf*}Ok)3If=1v~Cbw!U~Bg}V$wB<=3- za@npWTUXpop^dA!93k6JO%x70Vr1ZN>TYbgqU-)qoG8RwDBJ^Ui?C+ZaIb5*YR@~c zYIiu^itzW^w8FI$+M%JHlxizI^W;4grYF9Q0=DY{c2K}hg9E0Z?m@h*E53^Yx^w}% zDWKcnD85;Uygm2pm#g+I+4jeKD16WQ@LmevYb4`t7f}_C`{v~>dzNgy@qI>$*`Fll z0L8p_(5MPG_c7kjIE&;T;-sn63gbsLA$wE)Q%1C=6UJwZWVP;DvM;BYt)pgCcYEs9 z@EwSbZ--zxNqHMNJyf6+A$?oE8x5kP`<=cIAf$i9NX<dmiF>k?ejRr1JUibplZ-yh zw<VF$9~Ie+K}H`k^V{#Iy={BTh6W*I+Rwj4jrvKl@no9n>`P~%^bIL;SZf<k;YXMQ z&m^+(&x_cLh{b^u6izg&qI%i*1wnO9@X*V|D-!l1{vhP<!DZXMg@-#1J=k#w8<M1| za%Rc4ZN=WoTeEz;q}$PijZt0rJ+13KvKQV=zl|+TNa;gp9$lRbiS53f#@YcTH@7Nr z<u|8ZnYlH?W)E|2Y<=-)yo9z$`^0-cM@kFHr1SkEeiHG?EXXAU@;9^^mtn>Z>y%(4 zfej?|tM2T)`_%pP<r>&!;}gAv5Wad)mSKhneng}qZG{a*@Lv!#{gC}<6Mpq8I=z0# zliozvta}7y22_#r5!qOKaWI~hf%kog2j2K|NNHy~VK3siFeM8LCn5sEVTz3Y&FwH$ zw#FixP-kI-Y<@vc>IXum{|WRL1br0rXas16H&3Gxswy({d+-y-gk7|GL3-`Ur0>1J zq>7;HIOZhnk4|#w?|mC4s13HUu`PpBLK922k|@5#n}$<DY+#eD4$J0X>pGci4mLY7 zVd#U-B-Z>Ph75!_*8~Gaj2$u6Nn;#{sZAP_wP8#)V(OEo!IrkK09%i_-aK!<wsAx! zd}?^%s_-H$ym(c3i56bED!hyh+>~#$UFfaQjGOJi*3=fSQ#06<RMJK<gtqge(R!<r z8_7v#QU-Ni4eFgqYpG_#m|9;&@(o>Yoeu`7V6v=YDCs7yw}InbJ}0Q$zA9{fmEtWl zV*Bu5vNCv#-h6KpV*8WD!oV19ceXI}Fl;3VrHfK;8#XN4X=Bk_?CsF}h2BohpNEZa zg{Cz<TI<~wt@Ccj_SG)QiQIzkp<l$ttb82GvPctC%~rpY46iHl$&jFNira5m!cvef zP?&IHsW~P2XK_Ey6jTmEQ}eh5$|}u==(-pujK7dX(E&wXsMC4+n8zxoOia-|QGgkW z{13dvBtwjAY3DA7Bc3UUMa_?Sg5g%gV6SVt*y|cWF=J+2KiON04IkX;*fz$7CZMH2 zNLU!5Ae#}uE|GN#+)(Cgis1^%pqnpb6Ba8*JmS|C&;_!2i_$fef&g0?bT`|YI0T7{ zCF!!p-mzXcZ3#V%BJ#cvuJK`$1#4)uttD}Nq?S}Q5rTrc)WB-7eUyF<`zH;J=VHaU zDG;v!dn9xPBCbDNfVdLxl@t$G)z;NFHjT7+TD!Vi_Ku94UA(rt8CR1|Q<Yiig29o7 zkp-Vy*b3RRYD;LN%kbES2wMqZgCTC>!c1bFO8Q|K>mXYlE>^H#)Gqs3RId(cXiOwJ zsb-oWTXo;h;yOi=#Z{NyEGDk9(G_KsxU%4p+a-1-7L^;d7I9a{VsLU%Yy#3<k&7(g zwSb$n7WqD{MfIWs)FkXYERr<dBH#C=%OIB?a@2=6ka(0l<-u14n)x-wOv5g>PufOb zR<utf{V9RfJ37L4&hyk%Xh%#~3YjP0MFQ6W1|bRYIw6UjjNc-ZH!NtcB4#Gz^$ohM z2;OJ-6OJNV{0-8VD8ZKr`~`up5O@R-gFH5(zee~s2=J%B_SGLt<C~=#`0L-@lXUw< z+jN-_dn>%HvSvr+)5Q9B0B`{qH0k9Gg5svK-=(PEqbTeoO+#cZ%KIuXw}ERJW9g8a zo0w_umEIwWRJt7Svy|X-1U^rIwpnD;H1-b@n=QD~3zG3-%VqUO3$Cri{vzKsMoLk_ z0LPyapJcl&$u?SeuWHRk%2&Z4mX13ILMSS3<_b-S%@o=~!L3}lnw#K-0MxGl#dH5X zWy(7y^-tI|ShHV{kbp~U5Zt4Nl}8*|A)Zy^`O}`i^m%`P_Z4_+AdBc&8{a}c-Z)sZ zK|nhUQa`oZg9Ld0p@_mhPZ@3g_3tD)0yK$4W|5v`<w%dpYOrOKL`L3=lO&N*bi+a) z|K&IAB#=={vegL*xx5=EUmPUKwgp99mo9`p{mOH<VAY(}ZzoA>mhA#>xn1~b=^YrH zZeFqPykGxz^IOfVX4MFL!$)7k_bjZjld<YOckp2d=?NIC##X_ecea0V=W^r8CEF>s zU%fV{@^%`oFsOW|;ER@J*VBC4!MY$?MHll**mc+Sddq9Dr@V6o%3dxgD6@XG3HsGm zLs{KjAE`Wd(|4ly<b%cSviGptkQX;t@{bv@x4=Ys86d)@f*>leLVFw5#E%>C1w$6a z6-(dPV5p`YkAoaeHp3B8L6U-XEA@@9hVFzY0LIykj;$-(x*u-qd$5g_<nif<WHq-B za=q2uK0|jJpibBVHB4?l!Uq#BcEHMB*!r3^?!Xt(96n(;{Mvv~;~WxO{3u@;>NiDB z20nnG^rrhZz;_1Biji&rTYcv51uabXO@J_zNC;7?-w7hjpK`*OTxbO?kpJF?A#KBx z%@Fg7KP?I&m1qW>waws7zhLxQ;4<K>aG7v6I6IsJE(<OjE(b0bE)Omrt^lqOt_ZFe zt^}?Wt_-dmt^%$SZVQ|ft_rRit_H3at`4pqt^v*k=Z0&9Yl3TrYk~8?wZgT*wZnD5 zb;50h+XlBCZU@{>xLt5vaJ%8U;d<cq!1coIh1&<WAMOC$LAXA+ez-$$18|4oo`O39 zcNFdz+#uX>xFNWw;k<As;7-Dwf;$a&2JRWSXW^cM8-^Q!^TC~k8-+Uu=Z71E8;6^K z3&2gnO~FmW1>w%aU4WZ`n}rL(h2iGlo`-|Y7;gkF3O5gT5pDtQ65M6D7~B=OMYyYQ z*Wg}&yAJn#a36#Fez+fi`$4!Lg8N~(7vVk*_akthfcsInAA|dGxSxQ#0rwKzPs05a z+)u;(4BXGcy$p8~?iSq7!TmhkFTnjG+<$_51@1Q79k^eD`(?OK!hH(vSKwZSy9@Uk z+<%7qf8hQL+^@p@8r<t}_u$@u`*pbAfcs6j--7#XxHsYM!@ULfX}I5k`(3!-gZq8B zx8dG_`wZM?;XViVdAL7-`$M=dz<m+!kKq0*+<$}n?{I$%_a|_F3bzFJ0Pah0%W&_) zeHrf0;2y%Q!2LO#4EGmsUxE8exW9t?Yq&>nUxoV`+}Gj00rxj>e+&0_aNmUc7Tn*% z{R7-T!u=E6Kg0bCTpaE_xNpO~5BCAwci{dN?nAhLgZp>5$8i4x?tjAlFS!2=_kS)J z`=E8m(8w@_VJbrtLo>rPhUp9~3^N#78D=uHF|;#uFwA0@%`k^yF2g*A`3wsf7BVbi zSj@15VJX8hhUE+^7*;ae!qCaEieWXw8iutD>loHEY+&eO=w{f+u!&(a!xn}fhOG?S z7`8L)VA#oUE5mIJw=>+qa3{lE47(WaX4uWJhv6QEy$ts<+{bV~!vhQtGVEj6&+rh# z0fvVeKE?0|!=nt3F&t!goZ%3|rx|(~o?v*A;VFiv8J=PI48vy`KF4sF;Rr(?!?O%W z8J=V4XE?@ioZ$q+0K-X!Qw*mW1{t1bc!A*z!&!zQhGB+t44-ExF^n*bGMs04k>LWv zOAIeFj4`~zaFO9vhSwOr!0<Z5?_>BehTqTd2N?b!!yjV!!wg@%V2oy>-+UaVXl?lY z5&S}Z!25})14e1H;QP@UgX_m=#aM+2IC#>8Rq_t&K2?926%xr#L3k<@jL{y!AYBBE z`<!P~k}+{z805TVGa`pBC&XkR2{3n=)QekXGyA1FWWsg>WeaYo4A0<BTiNP|-VUzT zqZNNDG@oUYANQ}ZVL?#M%+O_YxThFCh>_q@Wk20KJQ0SqKR@033yAB+%-G9->AznE ze_Zf9hiiT(<ZL!bIO=D+Wqw@sDQAfgXc9@I{!6&vEzK`3{KfD1co=sSi{ELA7{^t_ z9DrXD0P}PlfZq<)!!c7-5G0wRqJYN~-3g46N>lvJPf>h<uvy&IY~!B}vEv|TGKO0% zalM@m30_3a(ACbkxDb~SD^w9&rj2`+MFbcqG~y|&xL`SSnd4B3i16enp3(8?3;5K= zx0Q?_wpB4TAD&mJEdI!(pm)HB(u1SG5i{$@-pD09PXymjxL_R56Crs6WFDOfz(3kP zk??ou{GGUI8Ww^j>@tzrR|(`%6rW5)ipMgI!6KTR33&j&q&%qw$T+GC6$oE=Hb~Vn z7L3wH04^|`NFdlFfVoK}2KRw$RJidFiJ@kFVHU5<G=>L2rV{Kdj-#}o!zIbM&lDHE zMp*0s#B^=)0`8Jd8OP;@_(~jQO4E1%ABJh;(_w0Zrg41l%C>Q|+u0D^R5yMBw`zxH zXK^hc*GDd0f=YK&j!&au(aVd_o#L~&vJzL`fi#4>m|>}z?$HKvUd|vmKScp__xQ!| z%temEMeo2R2_^_9i3n<KqJK~$MN+yydpvwmHjhhTa85@D!p<HlUh&XP?rHGT1=MNc zqE&p*qaD#@(8ysT=!Xq9f|KAYd}PyrVkRdE$DSU96bO&NE+<(;m_YZWZkIM88X<nU z2Fw%u?4}8nK{gXafpD+r<Rn^!IRN`0Fbc{)qhvc8LEO?)1DEFHOaQ!6m`t3-P3J&n z+i8yht&i>z3|vM5Cg~FN{7JmG1L3*L`$7{?uLwnOEhvgJIY~FNPev!D!1J;N9=`FE z&4A88x+NHz41)+w7dsVr%uIrcO+ustf|r5I%kfrc(5UHm9!2JxL1i2NkTFMka?>OX zK_ChuI&-p>q>_}^%YI?p6eU17n<KTcPrWjc!)a4Pq@24<o3z5Oi~+bU9p(UVt)hc& zr)Aco3lf@RCgJE0GxI1!J|P%LMZ6lCqlC^~)(EpHh>dC}O8jyLLX=Wkg_mSd<TUu9 zaV}FBe#sIIlfsXkW7&e>$zWh+0zTZdN_)t-*d2mk^elG8ql{c>Q}eT90o<cGEw-1* z!`sSo#x(Y~c-vXd)Vvra5(ozUv}vVPO)ITx`tlqaTS~A^w%`T8vJRS&35^QlKCaT8 zk~748x%58L;l)+#xD6g}oHmy5+HtEqYLtw+LPi4jb3))~)E`l*0HJsS)Gq%<pb3hm z>d+ymWny-b(qs6-=n=$_$rl`hmFndx3P#Y*XjBD>GH@bu%o&sP6T<jo!B1d{0^mc# zC0|-Ff@(x%i(iG4GQ5H;!UA0=U_{;Ygh^6HL~j!j3Y7`j&+@j}EVc@f3m%TH=ENgh zg2l}XevF)wY`TEE-evO)ZW%@so(bS$Vx_yx(CCDaNJM#;>6rJ$6bA7=apfrN-ulr2 z2%>w_PxKPH=uCKu0;k&B#LpZV$erqtGXZIpAO>s|;Q?DkXuwweJYWM6d6{Q$EBEtq zDh=DvkD|$kg{(;N^-^#aW12(pj4CydJ&SoVf<ZR`6PvTRn_D)`22k~Bu!#>-_Ob=H zxlT_>K|H}M{jj(e*x}6)yG(d!5F3X*4rGg-ZUVpyoE5cz)kzd%#AP{^-lr8{G#aL! zC}+S=^FHQ()r%!S8bWzVK)(u3Lvbdqct$E^cN2{kZ;fuC$19O7Xd^Hkh4DWf*CF$A zB?BI%#oEY=ISLoN;#H=rgIES?RC#Asw4n~AI?U*8cvcgvisKSng38bfyFEyr38|#n zd2tW0oG}-K87i7wp%zX}K7H;2?(C(P&4x;VhtcrRbWC$$R6!a+bQc8AT&Cq3d$?2- zg7H#>Ok$nFQK(wsK`jaonzZm-L=Q0I-ehW>Jb$GVq{%CFE;<JQL&@m?v;N2hIYokX zU5x#xuc(|wp71P2JT}=Ak?l%A#816cHUY&@0C+(*OIU(nYU2)PCy0x>ad|9FAr_hu zX`+^`@CA`Q8m&a)crex+n1yyfJsFHN&tcF*_L#e%IZht5HmraU!viT&V~m6HImWC^ zDL6H)buMVLW5|-ATaL^C`OTW8Fzzfy$->cHZ7k^rPP87ug~k#t@D^iWN(8-Ed7$(N z9)h}Drg+C4w8W5YkpLE|)6`0FDKQQT0MlT;1tXfAg|UFzD9tOdxf_wQDPYyCkVhe6 z3K~@p4rMC>(dziIGT>Kca<E0)!BioB#Z)2uJbJ;aOcmst@lRpF10TBMSU^I1u>e6g zr!|47y3EKlo)oK|$>0>kbEjb-oL(G>ECL0@$_^X#=spO;d`WPcAPg~mjn?^Qd_bVP zSR!GV)um4Z6ZcjdLGTr$b(*k51!7(~n<CF+G*63Q2|}+CzkvYe!7Nlbo1TWrV%+{c zgM6b@<oPjPim;$1!Y)!6R*CfOAf3jhrJPFN1UNWA$uh8*K-T<aLN?+MOqR)U!7(oh z@Jr`BvLy=BZ)D;?HWP0;a6l^+3mOWUi-D;WL~033Pb=W;D4CwZx)1(&Ig=h$U6xpA z)H;ZhC9s8$Zt7qI;B@ajd%_`9IGF~=gOWff{UXFZAL34d{zGFA2za%Tb`iCJ_MVCx zKxETJdX$WdXiGRgrnTV3U|>PETnuAOgVj7a?V>VeUlh$XeIXDWn@2l0i?5#4g=x&g zqU=`w;ZbN@-R#9XG~jy^CW&C{h>oACVWdfK?Pv(66Kns@7*!3KY(syK!LR@tsb<b} zT4xXGDZ_+|%ut=#I|RYTwST)1FacrCau{?<n4lW6uB9^=PMbPYFBz_zw-}D>Fc{9% z=<r^HA;VB<@S^bBQiDdR7!T!6WAg=aAy!S8ALv?Zn2n|(1v4w8H0cyacJw`S(z|c; zNZ+$(j(ZQD5QdgX>=QPb*dWkVqQdHh-iw*J$YzX_^MMG-p4Qhx?OE7fTE>&hRfF`& z%|Za4<k@}-RUA2vq~Ai_ej~f=VRpxZ?2da||15hCPJisq7yEA3J<7`e1=A<4-Y$69 z*z=&V=iREFmBO-LI79b>-aWNc*zs<5$D_is+kH!g?sv1@?`IftdjCB_Rr|4hCHu;Z z<0!uNM{g7*v%DXJ=eprE>ZrL?i#5y{M>J~0X>W74u|Xl4f;??Gnd?e9ZKQXVh?&6g z8ONlqjhRAWIL0JmASPj!r~uL>0+#_|HgU4-#E>|5IhI2!bm4c32)?BO_K3s_z$U|` zC|e||SL*v3n8-!C`qtmp@T*kIL!h{BSjo=6aq4F>Uo?Lud&_OpQhoPwcF%_fV@?f> zjpo#>WS87L^&q?YL!72SSkXZ6QO=gz+aBb&9_9=z;eT`QJKG*K55T5E##6#}k#feI z{e)A<gy=F0EVD5V7Gi#vItjIxCmGeQqS_)r8$prxa3HB%ovug*=izLS4P|5%vdT7H zmyV;JoID&4l6CF4X`itWH=^6)sqD$ZUE}O2YfwCH+{VozZLmzio}CcKWl!&6;dx}q ziJK|pQC@}O*;1!?8d?-j>vqM1<bt^OknqsaQ&~Kn7{FWM(Y$RtHE-8`qvk(o#NnPG z=aaGwPH8dZmB&?YWxeKgwQJtaZq2)=->CTqj6*5{%e1-iOy*}b<U^iW@j6|ax3OLG zcJ4E3{sY8Bki&jtVcgCsZHD4n&0F88dAIE~YX1GkK^1X8a50|6DIJC)r{=BRrg?Xu z4GM~ENRY;Jm^j-|P^Wnt+BI)ykLK;gIi(<ma(zKOkJIHEifS}(UAyK*MX3a^W3Bjc zxR@U=;B@(h!g9@9*`#?}c4%H)-mLfwsXB@{U7?}4PV+W&YTj*lyDG&&st$n^Lv%4- z!YPXlIpvxcIjW&8TQ%=?)TtW0AJ;M~NGVlQ88az06qIS+iaO1UHmVY|_GsQ-*k2aG z(D29Y(aZv4mRs{S?bN(o$Xun^Pwi76Fv5}--@+*?DRb3Z(V%(VTQ%?Y-I})t)u$5o z8S%~q;xuGr$E%p1(~w)Hc`MwSx2aR}ZtKy!y<j2IRa2$bFpFwKPMPLKk<?IktLAOr zt$C?PDn%bXqCjeKz8tS(ezk_|V$EAxt$AykG;d3%=H1q<dH0}ksw@suM-oUqwbTY? zU2iC=)V$6*&D*e5^KS3ayuE0&YPzRzUAcm|=+WKG&t=GI(7YJp)X=tFns;}fQS%?7 z=M^-K^a`4oNuwdRNb{C#(Y#e2%?o}i?QYbc>gW0sNHg(kVSdeqTwFP>c&lBS7ekI3 z+S#jl_feTdxQCiqD<||A3TiZOU90A8@6o)ykdqh0Z8Y4qbGkM|ey!%kNTr5u1F`UT z7&6M^olM+esBF``9X*<tI17rcB*L(biMJZ^wrJj}X3gu_sd>9_vAjy$Pwz`0+v!gF z9n56A0qsfk*0yNg)}5NS3-3!%?4%KA7pL1vBaZ5AXw|&!yEN}^3_dEwK_gm@K)R?- zcQcbN>bk18qDJ%9wQ1gt-I})t{8ZwD)O7{YP4Bsf`E?s|OEqtKqvmbis(H7gu?XTl zu=*bF<#c-tWlqgo-Kcq+cWB;S=t+VY`WtwFeMU|Rq`;{|s@*!IsY8cs-J?VHQt=fQ z(E7kDJs|i2$*a^M&PE;5yj_Rv#9L7kK|2KfxleEaQdFx$>YH_lXNL}<nIw^j2SWvg zdI^ejNH7GFSE578s&z<hn-1yNsYALjQ6xAF7@yYA0j|Kqf;$kjfdo=ft3&Erbx8Ym z9kR1mhwP)qm0<A{4Ri_$8#`#SM?_vg&}b6~CdvdtQ)L3<$x=Z{t0o&NGW^1UU~Ebt zB~?14#-&3VJ9Wr5ye%csAlQ|~j|+A{(C!mRU5gHB-K9gQHznu}8V_se5E$mhpB4;( z<X7ns6e$tY*rr1|cIglrlM{4@jF_So)C=wf@e_hOkfLfGQroIS(Df5!G$<!99+nmK zBp4RrCK0YqAjNd8h>AGfI;3fv4%vZ)K!T2!0t$K>42$At1P>r3)e7<+5R_2F5Q4Ef zf%Kw*Ca?io9VzHDV3;3&mKnYWq_9GVY-!dZo?SWw!;ua<Ky|3_cn%D+aT5wX<$FM| zz(^o?{|N-|KY?HjP9R;V&;-^;#Z^#zM&kYZ1a~0$6*^>#ONXFICdjt!(II<{7~c|c zhiR@*P*MuZjgJcUK=Mm;2*%AsOm&kEX=&FXSobE#_JFs7odfUUxL@!FQtH$pn5Yvm zn5q*<=Pn(x8$+oQH3oKh@o~WpNI{hjscF(7Ejx7xeFG&D@mG+7PVln_1VbSC<?#ek z*{DOBcj*vn2?@Fb)K?XBl1n%x7y>CMk0+4IIvvvB(INO?OOVlgoWKqlu{Kc9X>iYp z2L*Q^_;5=gSllO&mfbp}2Tdyx#eG#l&x2uU{DNQzq}-!J+E5N9Y6f%#@mWC!1cO8Z zscqIFo-Q5IjYg-?g}7qEf&-9(E%5|W<<TK+T{@&2MOWxZ^0P4hyx;(&xJrlAxOGU= zRvm(GgG3sti3HY1RjZ&9xM#&9f;*6$VjWUir9*03bV%zq9kK%zmf&!R`j~=7!96=Z zFSrBAE!H7epe16kL`xv87!woNe(J*tdXcMhK`;bTP#RAl<yATa#ZAPZxCvxOw+`8Z zm1H8SpQdvKy~H(hS!4wyrzoC4Fg+#^^uPpyPuc{s3lEaOcyL$H7}v}d!5s)D-vokB zg9K95qC@Z?iI^QIdjjjH<$;1Oay4BQ+<_ES#uEtUq6C7kzXY<aSBLB)eoEXm@XLw6 zAou~vE7Ktr)jFiMQHNlinMkv%SBLDQCaA>ig<5J(d|wLBB0#`AfmGD%5Lc@X!MZ6y zhILZ{;SU{wULSnFKPAoF_+hrm{FL#113@+x4g>SFXUPW0**LV$qC2b3JJpRccayl3 z@3*n5DVNR#=RBhqA$$~;U`%;x7U$Lx4+~KVL-5#wQw(g-X0AkAs6u6*#r#?HpZ1~U zlBA60aiAb9&C^W?8|21Y#yZ0UtV+Pj0<1;AItHwUz#0PuRDwbRtUEw94&?k~nM)-^ z^cp=Su3Chg0B$g(Dw1tNTdb4!phY$D^(|#YPg<OEfkJUoz1K#NlJ+H=AYe@d-gV@C zPGMxeg;HA78#|=0qvnveAwoJJ5S=#~-%GI=P4DL$j9DL=jK;0lVKr|34uQWj9Qc0+ zJg1-08YBWCK7&|K84N$MFmW3<uz%rlWMfpFp!J0TM1Sz$VGxjR;Q7K9!^~(k!RiYG zi2hQ?ro_lLBkKzTkow}qs0YmYGvvQ8faottjK)AYph_V10a)%!>Rw<F{lcaT6!iMS t0HnSoFcvT|vVp7s(O=S76BrrUI)J8u=r3-}v5dg3&;;pk3}6P>#{l4ij%WY? diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py deleted file mode 100644 index c0d6a8ad2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +++ /dev/null @@ -1,602 +0,0 @@ -# Automatically generated by scripts/gen_mapfiles.py. -# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead. - -LEXERS = { - 'ABAPLexer': ('pip._vendor.pygments.lexers.business', 'ABAP', ('abap',), ('*.abap', '*.ABAP'), ('text/x-abap',)), - 'AMDGPULexer': ('pip._vendor.pygments.lexers.amdgpu', 'AMDGPU', ('amdgpu',), ('*.isa',), ()), - 'APLLexer': ('pip._vendor.pygments.lexers.apl', 'APL', ('apl',), ('*.apl', '*.aplf', '*.aplo', '*.apln', '*.aplc', '*.apli', '*.dyalog'), ()), - 'AbnfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'ABNF', ('abnf',), ('*.abnf',), ('text/x-abnf',)), - 'ActionScript3Lexer': ('pip._vendor.pygments.lexers.actionscript', 'ActionScript 3', ('actionscript3', 'as3'), ('*.as',), ('application/x-actionscript3', 'text/x-actionscript3', 'text/actionscript3')), - 'ActionScriptLexer': ('pip._vendor.pygments.lexers.actionscript', 'ActionScript', ('actionscript', 'as'), ('*.as',), ('application/x-actionscript', 'text/x-actionscript', 'text/actionscript')), - 'AdaLexer': ('pip._vendor.pygments.lexers.ada', 'Ada', ('ada', 'ada95', 'ada2005'), ('*.adb', '*.ads', '*.ada'), ('text/x-ada',)), - 'AdlLexer': ('pip._vendor.pygments.lexers.archetype', 'ADL', ('adl',), ('*.adl', '*.adls', '*.adlf', '*.adlx'), ()), - 'AgdaLexer': ('pip._vendor.pygments.lexers.haskell', 'Agda', ('agda',), ('*.agda',), ('text/x-agda',)), - 'AheuiLexer': ('pip._vendor.pygments.lexers.esoteric', 'Aheui', ('aheui',), ('*.aheui',), ()), - 'AlloyLexer': ('pip._vendor.pygments.lexers.dsls', 'Alloy', ('alloy',), ('*.als',), ('text/x-alloy',)), - 'AmbientTalkLexer': ('pip._vendor.pygments.lexers.ambient', 'AmbientTalk', ('ambienttalk', 'ambienttalk/2', 'at'), ('*.at',), ('text/x-ambienttalk',)), - 'AmplLexer': ('pip._vendor.pygments.lexers.ampl', 'Ampl', ('ampl',), ('*.run',), ()), - 'Angular2HtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML + Angular2', ('html+ng2',), ('*.ng2',), ()), - 'Angular2Lexer': ('pip._vendor.pygments.lexers.templates', 'Angular2', ('ng2',), (), ()), - 'AntlrActionScriptLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With ActionScript Target', ('antlr-actionscript', 'antlr-as'), ('*.G', '*.g'), ()), - 'AntlrCSharpLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With C# Target', ('antlr-csharp', 'antlr-c#'), ('*.G', '*.g'), ()), - 'AntlrCppLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With CPP Target', ('antlr-cpp',), ('*.G', '*.g'), ()), - 'AntlrJavaLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Java Target', ('antlr-java',), ('*.G', '*.g'), ()), - 'AntlrLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR', ('antlr',), (), ()), - 'AntlrObjectiveCLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With ObjectiveC Target', ('antlr-objc',), ('*.G', '*.g'), ()), - 'AntlrPerlLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Perl Target', ('antlr-perl',), ('*.G', '*.g'), ()), - 'AntlrPythonLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Python Target', ('antlr-python',), ('*.G', '*.g'), ()), - 'AntlrRubyLexer': ('pip._vendor.pygments.lexers.parsers', 'ANTLR With Ruby Target', ('antlr-ruby', 'antlr-rb'), ('*.G', '*.g'), ()), - 'ApacheConfLexer': ('pip._vendor.pygments.lexers.configs', 'ApacheConf', ('apacheconf', 'aconf', 'apache'), ('.htaccess', 'apache.conf', 'apache2.conf'), ('text/x-apacheconf',)), - 'AppleScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'AppleScript', ('applescript',), ('*.applescript',), ()), - 'ArduinoLexer': ('pip._vendor.pygments.lexers.c_like', 'Arduino', ('arduino',), ('*.ino',), ('text/x-arduino',)), - 'ArrowLexer': ('pip._vendor.pygments.lexers.arrow', 'Arrow', ('arrow',), ('*.arw',), ()), - 'ArturoLexer': ('pip._vendor.pygments.lexers.arturo', 'Arturo', ('arturo', 'art'), ('*.art',), ()), - 'AscLexer': ('pip._vendor.pygments.lexers.asc', 'ASCII armored', ('asc', 'pem'), ('*.asc', '*.pem', 'id_dsa', 'id_ecdsa', 'id_ecdsa_sk', 'id_ed25519', 'id_ed25519_sk', 'id_rsa'), ('application/pgp-keys', 'application/pgp-encrypted', 'application/pgp-signature', 'application/pem-certificate-chain')), - 'Asn1Lexer': ('pip._vendor.pygments.lexers.asn1', 'ASN.1', ('asn1',), ('*.asn1',), ()), - 'AspectJLexer': ('pip._vendor.pygments.lexers.jvm', 'AspectJ', ('aspectj',), ('*.aj',), ('text/x-aspectj',)), - 'AsymptoteLexer': ('pip._vendor.pygments.lexers.graphics', 'Asymptote', ('asymptote', 'asy'), ('*.asy',), ('text/x-asymptote',)), - 'AugeasLexer': ('pip._vendor.pygments.lexers.configs', 'Augeas', ('augeas',), ('*.aug',), ()), - 'AutoItLexer': ('pip._vendor.pygments.lexers.automation', 'AutoIt', ('autoit',), ('*.au3',), ('text/x-autoit',)), - 'AutohotkeyLexer': ('pip._vendor.pygments.lexers.automation', 'autohotkey', ('autohotkey', 'ahk'), ('*.ahk', '*.ahkl'), ('text/x-autohotkey',)), - 'AwkLexer': ('pip._vendor.pygments.lexers.textedit', 'Awk', ('awk', 'gawk', 'mawk', 'nawk'), ('*.awk',), ('application/x-awk',)), - 'BBCBasicLexer': ('pip._vendor.pygments.lexers.basic', 'BBC Basic', ('bbcbasic',), ('*.bbc',), ()), - 'BBCodeLexer': ('pip._vendor.pygments.lexers.markup', 'BBCode', ('bbcode',), (), ('text/x-bbcode',)), - 'BCLexer': ('pip._vendor.pygments.lexers.algebra', 'BC', ('bc',), ('*.bc',), ()), - 'BQNLexer': ('pip._vendor.pygments.lexers.bqn', 'BQN', ('bqn',), ('*.bqn',), ()), - 'BSTLexer': ('pip._vendor.pygments.lexers.bibtex', 'BST', ('bst', 'bst-pybtex'), ('*.bst',), ()), - 'BareLexer': ('pip._vendor.pygments.lexers.bare', 'BARE', ('bare',), ('*.bare',), ()), - 'BaseMakefileLexer': ('pip._vendor.pygments.lexers.make', 'Base Makefile', ('basemake',), (), ()), - 'BashLexer': ('pip._vendor.pygments.lexers.shell', 'Bash', ('bash', 'sh', 'ksh', 'zsh', 'shell', 'openrc'), ('*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', '*.exheres-0', '*.exlib', '*.zsh', '.bashrc', 'bashrc', '.bash_*', 'bash_*', 'zshrc', '.zshrc', '.kshrc', 'kshrc', 'PKGBUILD'), ('application/x-sh', 'application/x-shellscript', 'text/x-shellscript')), - 'BashSessionLexer': ('pip._vendor.pygments.lexers.shell', 'Bash Session', ('console', 'shell-session'), ('*.sh-session', '*.shell-session'), ('application/x-shell-session', 'application/x-sh-session')), - 'BatchLexer': ('pip._vendor.pygments.lexers.shell', 'Batchfile', ('batch', 'bat', 'dosbatch', 'winbatch'), ('*.bat', '*.cmd'), ('application/x-dos-batch',)), - 'BddLexer': ('pip._vendor.pygments.lexers.bdd', 'Bdd', ('bdd',), ('*.feature',), ('text/x-bdd',)), - 'BefungeLexer': ('pip._vendor.pygments.lexers.esoteric', 'Befunge', ('befunge',), ('*.befunge',), ('application/x-befunge',)), - 'BerryLexer': ('pip._vendor.pygments.lexers.berry', 'Berry', ('berry', 'be'), ('*.be',), ('text/x-berry', 'application/x-berry')), - 'BibTeXLexer': ('pip._vendor.pygments.lexers.bibtex', 'BibTeX', ('bibtex', 'bib'), ('*.bib',), ('text/x-bibtex',)), - 'BlitzBasicLexer': ('pip._vendor.pygments.lexers.basic', 'BlitzBasic', ('blitzbasic', 'b3d', 'bplus'), ('*.bb', '*.decls'), ('text/x-bb',)), - 'BlitzMaxLexer': ('pip._vendor.pygments.lexers.basic', 'BlitzMax', ('blitzmax', 'bmax'), ('*.bmx',), ('text/x-bmx',)), - 'BlueprintLexer': ('pip._vendor.pygments.lexers.blueprint', 'Blueprint', ('blueprint',), ('*.blp',), ('text/x-blueprint',)), - 'BnfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'BNF', ('bnf',), ('*.bnf',), ('text/x-bnf',)), - 'BoaLexer': ('pip._vendor.pygments.lexers.boa', 'Boa', ('boa',), ('*.boa',), ()), - 'BooLexer': ('pip._vendor.pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',), ('text/x-boo',)), - 'BoogieLexer': ('pip._vendor.pygments.lexers.verification', 'Boogie', ('boogie',), ('*.bpl',), ()), - 'BrainfuckLexer': ('pip._vendor.pygments.lexers.esoteric', 'Brainfuck', ('brainfuck', 'bf'), ('*.bf', '*.b'), ('application/x-brainfuck',)), - 'BugsLexer': ('pip._vendor.pygments.lexers.modeling', 'BUGS', ('bugs', 'winbugs', 'openbugs'), ('*.bug',), ()), - 'CAmkESLexer': ('pip._vendor.pygments.lexers.esoteric', 'CAmkES', ('camkes', 'idl4'), ('*.camkes', '*.idl4'), ()), - 'CLexer': ('pip._vendor.pygments.lexers.c_cpp', 'C', ('c',), ('*.c', '*.h', '*.idc', '*.x[bp]m'), ('text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap')), - 'CMakeLexer': ('pip._vendor.pygments.lexers.make', 'CMake', ('cmake',), ('*.cmake', 'CMakeLists.txt'), ('text/x-cmake',)), - 'CObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'c-objdump', ('c-objdump',), ('*.c-objdump',), ('text/x-c-objdump',)), - 'CPSALexer': ('pip._vendor.pygments.lexers.lisp', 'CPSA', ('cpsa',), ('*.cpsa',), ()), - 'CSSUL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'CSS+UL4', ('css+ul4',), ('*.cssul4',), ()), - 'CSharpAspxLexer': ('pip._vendor.pygments.lexers.dotnet', 'aspx-cs', ('aspx-cs',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()), - 'CSharpLexer': ('pip._vendor.pygments.lexers.dotnet', 'C#', ('csharp', 'c#', 'cs'), ('*.cs',), ('text/x-csharp',)), - 'Ca65Lexer': ('pip._vendor.pygments.lexers.asm', 'ca65 assembler', ('ca65',), ('*.s',), ()), - 'CadlLexer': ('pip._vendor.pygments.lexers.archetype', 'cADL', ('cadl',), ('*.cadl',), ()), - 'CapDLLexer': ('pip._vendor.pygments.lexers.esoteric', 'CapDL', ('capdl',), ('*.cdl',), ()), - 'CapnProtoLexer': ('pip._vendor.pygments.lexers.capnproto', "Cap'n Proto", ('capnp',), ('*.capnp',), ()), - 'CarbonLexer': ('pip._vendor.pygments.lexers.carbon', 'Carbon', ('carbon',), ('*.carbon',), ('text/x-carbon',)), - 'CbmBasicV2Lexer': ('pip._vendor.pygments.lexers.basic', 'CBM BASIC V2', ('cbmbas',), ('*.bas',), ()), - 'CddlLexer': ('pip._vendor.pygments.lexers.cddl', 'CDDL', ('cddl',), ('*.cddl',), ('text/x-cddl',)), - 'CeylonLexer': ('pip._vendor.pygments.lexers.jvm', 'Ceylon', ('ceylon',), ('*.ceylon',), ('text/x-ceylon',)), - 'Cfengine3Lexer': ('pip._vendor.pygments.lexers.configs', 'CFEngine3', ('cfengine3', 'cf3'), ('*.cf',), ()), - 'ChaiscriptLexer': ('pip._vendor.pygments.lexers.scripting', 'ChaiScript', ('chaiscript', 'chai'), ('*.chai',), ('text/x-chaiscript', 'application/x-chaiscript')), - 'ChapelLexer': ('pip._vendor.pygments.lexers.chapel', 'Chapel', ('chapel', 'chpl'), ('*.chpl',), ()), - 'CharmciLexer': ('pip._vendor.pygments.lexers.c_like', 'Charmci', ('charmci',), ('*.ci',), ()), - 'CheetahHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Cheetah', ('html+cheetah', 'html+spitfire', 'htmlcheetah'), (), ('text/html+cheetah', 'text/html+spitfire')), - 'CheetahJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Cheetah', ('javascript+cheetah', 'js+cheetah', 'javascript+spitfire', 'js+spitfire'), (), ('application/x-javascript+cheetah', 'text/x-javascript+cheetah', 'text/javascript+cheetah', 'application/x-javascript+spitfire', 'text/x-javascript+spitfire', 'text/javascript+spitfire')), - 'CheetahLexer': ('pip._vendor.pygments.lexers.templates', 'Cheetah', ('cheetah', 'spitfire'), ('*.tmpl', '*.spt'), ('application/x-cheetah', 'application/x-spitfire')), - 'CheetahXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Cheetah', ('xml+cheetah', 'xml+spitfire'), (), ('application/xml+cheetah', 'application/xml+spitfire')), - 'CirruLexer': ('pip._vendor.pygments.lexers.webmisc', 'Cirru', ('cirru',), ('*.cirru',), ('text/x-cirru',)), - 'ClayLexer': ('pip._vendor.pygments.lexers.c_like', 'Clay', ('clay',), ('*.clay',), ('text/x-clay',)), - 'CleanLexer': ('pip._vendor.pygments.lexers.clean', 'Clean', ('clean',), ('*.icl', '*.dcl'), ()), - 'ClojureLexer': ('pip._vendor.pygments.lexers.jvm', 'Clojure', ('clojure', 'clj'), ('*.clj', '*.cljc'), ('text/x-clojure', 'application/x-clojure')), - 'ClojureScriptLexer': ('pip._vendor.pygments.lexers.jvm', 'ClojureScript', ('clojurescript', 'cljs'), ('*.cljs',), ('text/x-clojurescript', 'application/x-clojurescript')), - 'CobolFreeformatLexer': ('pip._vendor.pygments.lexers.business', 'COBOLFree', ('cobolfree',), ('*.cbl', '*.CBL'), ()), - 'CobolLexer': ('pip._vendor.pygments.lexers.business', 'COBOL', ('cobol',), ('*.cob', '*.COB', '*.cpy', '*.CPY'), ('text/x-cobol',)), - 'CodeQLLexer': ('pip._vendor.pygments.lexers.codeql', 'CodeQL', ('codeql', 'ql'), ('*.ql', '*.qll'), ()), - 'CoffeeScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'CoffeeScript', ('coffeescript', 'coffee-script', 'coffee'), ('*.coffee',), ('text/coffeescript',)), - 'ColdfusionCFCLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion CFC', ('cfc',), ('*.cfc',), ()), - 'ColdfusionHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'Coldfusion HTML', ('cfm',), ('*.cfm', '*.cfml'), ('application/x-coldfusion',)), - 'ColdfusionLexer': ('pip._vendor.pygments.lexers.templates', 'cfstatement', ('cfs',), (), ()), - 'Comal80Lexer': ('pip._vendor.pygments.lexers.comal', 'COMAL-80', ('comal', 'comal80'), ('*.cml', '*.comal'), ()), - 'CommonLispLexer': ('pip._vendor.pygments.lexers.lisp', 'Common Lisp', ('common-lisp', 'cl', 'lisp'), ('*.cl', '*.lisp'), ('text/x-common-lisp',)), - 'ComponentPascalLexer': ('pip._vendor.pygments.lexers.oberon', 'Component Pascal', ('componentpascal', 'cp'), ('*.cp', '*.cps'), ('text/x-component-pascal',)), - 'CoqLexer': ('pip._vendor.pygments.lexers.theorem', 'Coq', ('coq',), ('*.v',), ('text/x-coq',)), - 'CplintLexer': ('pip._vendor.pygments.lexers.cplint', 'cplint', ('cplint',), ('*.ecl', '*.prolog', '*.pro', '*.pl', '*.P', '*.lpad', '*.cpl'), ('text/x-cplint',)), - 'CppLexer': ('pip._vendor.pygments.lexers.c_cpp', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++', '*.cc', '*.hh', '*.cxx', '*.hxx', '*.C', '*.H', '*.cp', '*.CPP', '*.tpp'), ('text/x-c++hdr', 'text/x-c++src')), - 'CppObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'cpp-objdump', ('cpp-objdump', 'c++-objdumb', 'cxx-objdump'), ('*.cpp-objdump', '*.c++-objdump', '*.cxx-objdump'), ('text/x-cpp-objdump',)), - 'CrmshLexer': ('pip._vendor.pygments.lexers.dsls', 'Crmsh', ('crmsh', 'pcmk'), ('*.crmsh', '*.pcmk'), ()), - 'CrocLexer': ('pip._vendor.pygments.lexers.d', 'Croc', ('croc',), ('*.croc',), ('text/x-crocsrc',)), - 'CryptolLexer': ('pip._vendor.pygments.lexers.haskell', 'Cryptol', ('cryptol', 'cry'), ('*.cry',), ('text/x-cryptol',)), - 'CrystalLexer': ('pip._vendor.pygments.lexers.crystal', 'Crystal', ('cr', 'crystal'), ('*.cr',), ('text/x-crystal',)), - 'CsoundDocumentLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Document', ('csound-document', 'csound-csd'), ('*.csd',), ()), - 'CsoundOrchestraLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Orchestra', ('csound', 'csound-orc'), ('*.orc', '*.udo'), ()), - 'CsoundScoreLexer': ('pip._vendor.pygments.lexers.csound', 'Csound Score', ('csound-score', 'csound-sco'), ('*.sco',), ()), - 'CssDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Django/Jinja', ('css+django', 'css+jinja'), ('*.css.j2', '*.css.jinja2'), ('text/css+django', 'text/css+jinja')), - 'CssErbLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Ruby', ('css+ruby', 'css+erb'), (), ('text/css+ruby',)), - 'CssGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Genshi Text', ('css+genshitext', 'css+genshi'), (), ('text/css+genshi',)), - 'CssLexer': ('pip._vendor.pygments.lexers.css', 'CSS', ('css',), ('*.css',), ('text/css',)), - 'CssPhpLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+PHP', ('css+php',), (), ('text/css+php',)), - 'CssSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Smarty', ('css+smarty',), (), ('text/css+smarty',)), - 'CudaLexer': ('pip._vendor.pygments.lexers.c_like', 'CUDA', ('cuda', 'cu'), ('*.cu', '*.cuh'), ('text/x-cuda',)), - 'CypherLexer': ('pip._vendor.pygments.lexers.graph', 'Cypher', ('cypher',), ('*.cyp', '*.cypher'), ()), - 'CythonLexer': ('pip._vendor.pygments.lexers.python', 'Cython', ('cython', 'pyx', 'pyrex'), ('*.pyx', '*.pxd', '*.pxi'), ('text/x-cython', 'application/x-cython')), - 'DLexer': ('pip._vendor.pygments.lexers.d', 'D', ('d',), ('*.d', '*.di'), ('text/x-dsrc',)), - 'DObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'd-objdump', ('d-objdump',), ('*.d-objdump',), ('text/x-d-objdump',)), - 'DarcsPatchLexer': ('pip._vendor.pygments.lexers.diff', 'Darcs Patch', ('dpatch',), ('*.dpatch', '*.darcspatch'), ()), - 'DartLexer': ('pip._vendor.pygments.lexers.javascript', 'Dart', ('dart',), ('*.dart',), ('text/x-dart',)), - 'Dasm16Lexer': ('pip._vendor.pygments.lexers.asm', 'DASM16', ('dasm16',), ('*.dasm16', '*.dasm'), ('text/x-dasm16',)), - 'DaxLexer': ('pip._vendor.pygments.lexers.dax', 'Dax', ('dax',), ('*.dax',), ()), - 'DebianControlLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Control file', ('debcontrol', 'control'), ('control',), ()), - 'DebianSourcesLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Sources file', ('debian.sources',), ('*.sources',), ()), - 'DelphiLexer': ('pip._vendor.pygments.lexers.pascal', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas', '*.dpr'), ('text/x-pascal',)), - 'DesktopLexer': ('pip._vendor.pygments.lexers.configs', 'Desktop file', ('desktop',), ('*.desktop',), ('application/x-desktop',)), - 'DevicetreeLexer': ('pip._vendor.pygments.lexers.devicetree', 'Devicetree', ('devicetree', 'dts'), ('*.dts', '*.dtsi'), ('text/x-c',)), - 'DgLexer': ('pip._vendor.pygments.lexers.python', 'dg', ('dg',), ('*.dg',), ('text/x-dg',)), - 'DiffLexer': ('pip._vendor.pygments.lexers.diff', 'Diff', ('diff', 'udiff'), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')), - 'DjangoLexer': ('pip._vendor.pygments.lexers.templates', 'Django/Jinja', ('django', 'jinja'), (), ('application/x-django-templating', 'application/x-jinja')), - 'DnsZoneLexer': ('pip._vendor.pygments.lexers.dns', 'Zone', ('zone',), ('*.zone',), ('text/dns',)), - 'DockerLexer': ('pip._vendor.pygments.lexers.configs', 'Docker', ('docker', 'dockerfile'), ('Dockerfile', '*.docker'), ('text/x-dockerfile-config',)), - 'DtdLexer': ('pip._vendor.pygments.lexers.html', 'DTD', ('dtd',), ('*.dtd',), ('application/xml-dtd',)), - 'DuelLexer': ('pip._vendor.pygments.lexers.webmisc', 'Duel', ('duel', 'jbst', 'jsonml+bst'), ('*.duel', '*.jbst'), ('text/x-duel', 'text/x-jbst')), - 'DylanConsoleLexer': ('pip._vendor.pygments.lexers.dylan', 'Dylan session', ('dylan-console', 'dylan-repl'), ('*.dylan-console',), ('text/x-dylan-console',)), - 'DylanLexer': ('pip._vendor.pygments.lexers.dylan', 'Dylan', ('dylan',), ('*.dylan', '*.dyl', '*.intr'), ('text/x-dylan',)), - 'DylanLidLexer': ('pip._vendor.pygments.lexers.dylan', 'DylanLID', ('dylan-lid', 'lid'), ('*.lid', '*.hdp'), ('text/x-dylan-lid',)), - 'ECLLexer': ('pip._vendor.pygments.lexers.ecl', 'ECL', ('ecl',), ('*.ecl',), ('application/x-ecl',)), - 'ECLexer': ('pip._vendor.pygments.lexers.c_like', 'eC', ('ec',), ('*.ec', '*.eh'), ('text/x-echdr', 'text/x-ecsrc')), - 'EarlGreyLexer': ('pip._vendor.pygments.lexers.javascript', 'Earl Grey', ('earl-grey', 'earlgrey', 'eg'), ('*.eg',), ('text/x-earl-grey',)), - 'EasytrieveLexer': ('pip._vendor.pygments.lexers.scripting', 'Easytrieve', ('easytrieve',), ('*.ezt', '*.mac'), ('text/x-easytrieve',)), - 'EbnfLexer': ('pip._vendor.pygments.lexers.parsers', 'EBNF', ('ebnf',), ('*.ebnf',), ('text/x-ebnf',)), - 'EiffelLexer': ('pip._vendor.pygments.lexers.eiffel', 'Eiffel', ('eiffel',), ('*.e',), ('text/x-eiffel',)), - 'ElixirConsoleLexer': ('pip._vendor.pygments.lexers.erlang', 'Elixir iex session', ('iex',), (), ('text/x-elixir-shellsession',)), - 'ElixirLexer': ('pip._vendor.pygments.lexers.erlang', 'Elixir', ('elixir', 'ex', 'exs'), ('*.ex', '*.eex', '*.exs', '*.leex'), ('text/x-elixir',)), - 'ElmLexer': ('pip._vendor.pygments.lexers.elm', 'Elm', ('elm',), ('*.elm',), ('text/x-elm',)), - 'ElpiLexer': ('pip._vendor.pygments.lexers.elpi', 'Elpi', ('elpi',), ('*.elpi',), ('text/x-elpi',)), - 'EmacsLispLexer': ('pip._vendor.pygments.lexers.lisp', 'EmacsLisp', ('emacs-lisp', 'elisp', 'emacs'), ('*.el',), ('text/x-elisp', 'application/x-elisp')), - 'EmailLexer': ('pip._vendor.pygments.lexers.email', 'E-mail', ('email', 'eml'), ('*.eml',), ('message/rfc822',)), - 'ErbLexer': ('pip._vendor.pygments.lexers.templates', 'ERB', ('erb',), (), ('application/x-ruby-templating',)), - 'ErlangLexer': ('pip._vendor.pygments.lexers.erlang', 'Erlang', ('erlang',), ('*.erl', '*.hrl', '*.es', '*.escript'), ('text/x-erlang',)), - 'ErlangShellLexer': ('pip._vendor.pygments.lexers.erlang', 'Erlang erl session', ('erl',), ('*.erl-sh',), ('text/x-erl-shellsession',)), - 'EvoqueHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Evoque', ('html+evoque',), (), ('text/html+evoque',)), - 'EvoqueLexer': ('pip._vendor.pygments.lexers.templates', 'Evoque', ('evoque',), ('*.evoque',), ('application/x-evoque',)), - 'EvoqueXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Evoque', ('xml+evoque',), (), ('application/xml+evoque',)), - 'ExeclineLexer': ('pip._vendor.pygments.lexers.shell', 'execline', ('execline',), ('*.exec',), ()), - 'EzhilLexer': ('pip._vendor.pygments.lexers.ezhil', 'Ezhil', ('ezhil',), ('*.n',), ('text/x-ezhil',)), - 'FSharpLexer': ('pip._vendor.pygments.lexers.dotnet', 'F#', ('fsharp', 'f#'), ('*.fs', '*.fsi', '*.fsx'), ('text/x-fsharp',)), - 'FStarLexer': ('pip._vendor.pygments.lexers.ml', 'FStar', ('fstar',), ('*.fst', '*.fsti'), ('text/x-fstar',)), - 'FactorLexer': ('pip._vendor.pygments.lexers.factor', 'Factor', ('factor',), ('*.factor',), ('text/x-factor',)), - 'FancyLexer': ('pip._vendor.pygments.lexers.ruby', 'Fancy', ('fancy', 'fy'), ('*.fy', '*.fancypack'), ('text/x-fancysrc',)), - 'FantomLexer': ('pip._vendor.pygments.lexers.fantom', 'Fantom', ('fan',), ('*.fan',), ('application/x-fantom',)), - 'FelixLexer': ('pip._vendor.pygments.lexers.felix', 'Felix', ('felix', 'flx'), ('*.flx', '*.flxh'), ('text/x-felix',)), - 'FennelLexer': ('pip._vendor.pygments.lexers.lisp', 'Fennel', ('fennel', 'fnl'), ('*.fnl',), ()), - 'FiftLexer': ('pip._vendor.pygments.lexers.fift', 'Fift', ('fift', 'fif'), ('*.fif',), ()), - 'FishShellLexer': ('pip._vendor.pygments.lexers.shell', 'Fish', ('fish', 'fishshell'), ('*.fish', '*.load'), ('application/x-fish',)), - 'FlatlineLexer': ('pip._vendor.pygments.lexers.dsls', 'Flatline', ('flatline',), (), ('text/x-flatline',)), - 'FloScriptLexer': ('pip._vendor.pygments.lexers.floscript', 'FloScript', ('floscript', 'flo'), ('*.flo',), ()), - 'ForthLexer': ('pip._vendor.pygments.lexers.forth', 'Forth', ('forth',), ('*.frt', '*.fs'), ('application/x-forth',)), - 'FortranFixedLexer': ('pip._vendor.pygments.lexers.fortran', 'FortranFixed', ('fortranfixed',), ('*.f', '*.F'), ()), - 'FortranLexer': ('pip._vendor.pygments.lexers.fortran', 'Fortran', ('fortran', 'f90'), ('*.f03', '*.f90', '*.F03', '*.F90'), ('text/x-fortran',)), - 'FoxProLexer': ('pip._vendor.pygments.lexers.foxpro', 'FoxPro', ('foxpro', 'vfp', 'clipper', 'xbase'), ('*.PRG', '*.prg'), ()), - 'FreeFemLexer': ('pip._vendor.pygments.lexers.freefem', 'Freefem', ('freefem',), ('*.edp',), ('text/x-freefem',)), - 'FuncLexer': ('pip._vendor.pygments.lexers.func', 'FunC', ('func', 'fc'), ('*.fc', '*.func'), ()), - 'FutharkLexer': ('pip._vendor.pygments.lexers.futhark', 'Futhark', ('futhark',), ('*.fut',), ('text/x-futhark',)), - 'GAPConsoleLexer': ('pip._vendor.pygments.lexers.algebra', 'GAP session', ('gap-console', 'gap-repl'), ('*.tst',), ()), - 'GAPLexer': ('pip._vendor.pygments.lexers.algebra', 'GAP', ('gap',), ('*.g', '*.gd', '*.gi', '*.gap'), ()), - 'GDScriptLexer': ('pip._vendor.pygments.lexers.gdscript', 'GDScript', ('gdscript', 'gd'), ('*.gd',), ('text/x-gdscript', 'application/x-gdscript')), - 'GLShaderLexer': ('pip._vendor.pygments.lexers.graphics', 'GLSL', ('glsl',), ('*.vert', '*.frag', '*.geo'), ('text/x-glslsrc',)), - 'GSQLLexer': ('pip._vendor.pygments.lexers.gsql', 'GSQL', ('gsql',), ('*.gsql',), ()), - 'GasLexer': ('pip._vendor.pygments.lexers.asm', 'GAS', ('gas', 'asm'), ('*.s', '*.S'), ('text/x-gas',)), - 'GcodeLexer': ('pip._vendor.pygments.lexers.gcodelexer', 'g-code', ('gcode',), ('*.gcode',), ()), - 'GenshiLexer': ('pip._vendor.pygments.lexers.templates', 'Genshi', ('genshi', 'kid', 'xml+genshi', 'xml+kid'), ('*.kid',), ('application/x-genshi', 'application/x-kid')), - 'GenshiTextLexer': ('pip._vendor.pygments.lexers.templates', 'Genshi Text', ('genshitext',), (), ('application/x-genshi-text', 'text/x-genshi')), - 'GettextLexer': ('pip._vendor.pygments.lexers.textfmts', 'Gettext Catalog', ('pot', 'po'), ('*.pot', '*.po'), ('application/x-gettext', 'text/x-gettext', 'text/gettext')), - 'GherkinLexer': ('pip._vendor.pygments.lexers.testing', 'Gherkin', ('gherkin', 'cucumber'), ('*.feature',), ('text/x-gherkin',)), - 'GleamLexer': ('pip._vendor.pygments.lexers.gleam', 'Gleam', ('gleam',), ('*.gleam',), ('text/x-gleam',)), - 'GnuplotLexer': ('pip._vendor.pygments.lexers.graphics', 'Gnuplot', ('gnuplot',), ('*.plot', '*.plt'), ('text/x-gnuplot',)), - 'GoLexer': ('pip._vendor.pygments.lexers.go', 'Go', ('go', 'golang'), ('*.go',), ('text/x-gosrc',)), - 'GoloLexer': ('pip._vendor.pygments.lexers.jvm', 'Golo', ('golo',), ('*.golo',), ()), - 'GoodDataCLLexer': ('pip._vendor.pygments.lexers.business', 'GoodData-CL', ('gooddata-cl',), ('*.gdc',), ('text/x-gooddata-cl',)), - 'GoogleSqlLexer': ('pip._vendor.pygments.lexers.sql', 'GoogleSQL', ('googlesql', 'zetasql'), ('*.googlesql', '*.googlesql.sql'), ('text/x-google-sql', 'text/x-google-sql-aux')), - 'GosuLexer': ('pip._vendor.pygments.lexers.jvm', 'Gosu', ('gosu',), ('*.gs', '*.gsx', '*.gsp', '*.vark'), ('text/x-gosu',)), - 'GosuTemplateLexer': ('pip._vendor.pygments.lexers.jvm', 'Gosu Template', ('gst',), ('*.gst',), ('text/x-gosu-template',)), - 'GraphQLLexer': ('pip._vendor.pygments.lexers.graphql', 'GraphQL', ('graphql',), ('*.graphql',), ()), - 'GraphvizLexer': ('pip._vendor.pygments.lexers.graphviz', 'Graphviz', ('graphviz', 'dot'), ('*.gv', '*.dot'), ('text/x-graphviz', 'text/vnd.graphviz')), - 'GroffLexer': ('pip._vendor.pygments.lexers.markup', 'Groff', ('groff', 'nroff', 'man'), ('*.[1-9]', '*.man', '*.1p', '*.3pm'), ('application/x-troff', 'text/troff')), - 'GroovyLexer': ('pip._vendor.pygments.lexers.jvm', 'Groovy', ('groovy',), ('*.groovy', '*.gradle'), ('text/x-groovy',)), - 'HLSLShaderLexer': ('pip._vendor.pygments.lexers.graphics', 'HLSL', ('hlsl',), ('*.hlsl', '*.hlsli'), ('text/x-hlsl',)), - 'HTMLUL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'HTML+UL4', ('html+ul4',), ('*.htmlul4',), ()), - 'HamlLexer': ('pip._vendor.pygments.lexers.html', 'Haml', ('haml',), ('*.haml',), ('text/x-haml',)), - 'HandlebarsHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Handlebars', ('html+handlebars',), ('*.handlebars', '*.hbs'), ('text/html+handlebars', 'text/x-handlebars-template')), - 'HandlebarsLexer': ('pip._vendor.pygments.lexers.templates', 'Handlebars', ('handlebars',), (), ()), - 'HareLexer': ('pip._vendor.pygments.lexers.hare', 'Hare', ('hare',), ('*.ha',), ('text/x-hare',)), - 'HaskellLexer': ('pip._vendor.pygments.lexers.haskell', 'Haskell', ('haskell', 'hs'), ('*.hs',), ('text/x-haskell',)), - 'HaxeLexer': ('pip._vendor.pygments.lexers.haxe', 'Haxe', ('haxe', 'hxsl', 'hx'), ('*.hx', '*.hxsl'), ('text/haxe', 'text/x-haxe', 'text/x-hx')), - 'HexdumpLexer': ('pip._vendor.pygments.lexers.hexdump', 'Hexdump', ('hexdump',), (), ()), - 'HsailLexer': ('pip._vendor.pygments.lexers.asm', 'HSAIL', ('hsail', 'hsa'), ('*.hsail',), ('text/x-hsail',)), - 'HspecLexer': ('pip._vendor.pygments.lexers.haskell', 'Hspec', ('hspec',), ('*Spec.hs',), ()), - 'HtmlDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Django/Jinja', ('html+django', 'html+jinja', 'htmldjango'), ('*.html.j2', '*.htm.j2', '*.xhtml.j2', '*.html.jinja2', '*.htm.jinja2', '*.xhtml.jinja2'), ('text/html+django', 'text/html+jinja')), - 'HtmlGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), (), ('text/html+genshi',)), - 'HtmlLexer': ('pip._vendor.pygments.lexers.html', 'HTML', ('html',), ('*.html', '*.htm', '*.xhtml', '*.xslt'), ('text/html', 'application/xhtml+xml')), - 'HtmlPhpLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',), ('application/x-php', 'application/x-httpd-php', 'application/x-httpd-php3', 'application/x-httpd-php4', 'application/x-httpd-php5')), - 'HtmlSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), (), ('text/html+smarty',)), - 'HttpLexer': ('pip._vendor.pygments.lexers.textfmts', 'HTTP', ('http',), (), ()), - 'HxmlLexer': ('pip._vendor.pygments.lexers.haxe', 'Hxml', ('haxeml', 'hxml'), ('*.hxml',), ()), - 'HyLexer': ('pip._vendor.pygments.lexers.lisp', 'Hy', ('hylang', 'hy'), ('*.hy',), ('text/x-hy', 'application/x-hy')), - 'HybrisLexer': ('pip._vendor.pygments.lexers.scripting', 'Hybris', ('hybris',), ('*.hyb',), ('text/x-hybris', 'application/x-hybris')), - 'IDLLexer': ('pip._vendor.pygments.lexers.idl', 'IDL', ('idl',), ('*.pro',), ('text/idl',)), - 'IconLexer': ('pip._vendor.pygments.lexers.unicon', 'Icon', ('icon',), ('*.icon', '*.ICON'), ()), - 'IdrisLexer': ('pip._vendor.pygments.lexers.haskell', 'Idris', ('idris', 'idr'), ('*.idr',), ('text/x-idris',)), - 'IgorLexer': ('pip._vendor.pygments.lexers.igor', 'Igor', ('igor', 'igorpro'), ('*.ipf',), ('text/ipf',)), - 'Inform6Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 6', ('inform6', 'i6'), ('*.inf',), ()), - 'Inform6TemplateLexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 6 template', ('i6t',), ('*.i6t',), ()), - 'Inform7Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'Inform 7', ('inform7', 'i7'), ('*.ni', '*.i7x'), ()), - 'IniLexer': ('pip._vendor.pygments.lexers.configs', 'INI', ('ini', 'cfg', 'dosini'), ('*.ini', '*.cfg', '*.inf', '.editorconfig'), ('text/x-ini', 'text/inf')), - 'IoLexer': ('pip._vendor.pygments.lexers.iolang', 'Io', ('io',), ('*.io',), ('text/x-iosrc',)), - 'IokeLexer': ('pip._vendor.pygments.lexers.jvm', 'Ioke', ('ioke', 'ik'), ('*.ik',), ('text/x-iokesrc',)), - 'IrcLogsLexer': ('pip._vendor.pygments.lexers.textfmts', 'IRC logs', ('irc',), ('*.weechatlog',), ('text/x-irclog',)), - 'IsabelleLexer': ('pip._vendor.pygments.lexers.theorem', 'Isabelle', ('isabelle',), ('*.thy',), ('text/x-isabelle',)), - 'JLexer': ('pip._vendor.pygments.lexers.j', 'J', ('j',), ('*.ijs',), ('text/x-j',)), - 'JMESPathLexer': ('pip._vendor.pygments.lexers.jmespath', 'JMESPath', ('jmespath', 'jp'), ('*.jp',), ()), - 'JSLTLexer': ('pip._vendor.pygments.lexers.jslt', 'JSLT', ('jslt',), ('*.jslt',), ('text/x-jslt',)), - 'JagsLexer': ('pip._vendor.pygments.lexers.modeling', 'JAGS', ('jags',), ('*.jag', '*.bug'), ()), - 'JanetLexer': ('pip._vendor.pygments.lexers.lisp', 'Janet', ('janet',), ('*.janet', '*.jdn'), ('text/x-janet', 'application/x-janet')), - 'JasminLexer': ('pip._vendor.pygments.lexers.jvm', 'Jasmin', ('jasmin', 'jasminxt'), ('*.j',), ()), - 'JavaLexer': ('pip._vendor.pygments.lexers.jvm', 'Java', ('java',), ('*.java',), ('text/x-java',)), - 'JavascriptDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Django/Jinja', ('javascript+django', 'js+django', 'javascript+jinja', 'js+jinja'), ('*.js.j2', '*.js.jinja2'), ('application/x-javascript+django', 'application/x-javascript+jinja', 'text/x-javascript+django', 'text/x-javascript+jinja', 'text/javascript+django', 'text/javascript+jinja')), - 'JavascriptErbLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Ruby', ('javascript+ruby', 'js+ruby', 'javascript+erb', 'js+erb'), (), ('application/x-javascript+ruby', 'text/x-javascript+ruby', 'text/javascript+ruby')), - 'JavascriptGenshiLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Genshi Text', ('js+genshitext', 'js+genshi', 'javascript+genshitext', 'javascript+genshi'), (), ('application/x-javascript+genshi', 'text/x-javascript+genshi', 'text/javascript+genshi')), - 'JavascriptLexer': ('pip._vendor.pygments.lexers.javascript', 'JavaScript', ('javascript', 'js'), ('*.js', '*.jsm', '*.mjs', '*.cjs'), ('application/javascript', 'application/x-javascript', 'text/x-javascript', 'text/javascript')), - 'JavascriptPhpLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+PHP', ('javascript+php', 'js+php'), (), ('application/x-javascript+php', 'text/x-javascript+php', 'text/javascript+php')), - 'JavascriptSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Smarty', ('javascript+smarty', 'js+smarty'), (), ('application/x-javascript+smarty', 'text/x-javascript+smarty', 'text/javascript+smarty')), - 'JavascriptUL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'Javascript+UL4', ('js+ul4',), ('*.jsul4',), ()), - 'JclLexer': ('pip._vendor.pygments.lexers.scripting', 'JCL', ('jcl',), ('*.jcl',), ('text/x-jcl',)), - 'JsgfLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'JSGF', ('jsgf',), ('*.jsgf',), ('application/jsgf', 'application/x-jsgf', 'text/jsgf')), - 'Json5Lexer': ('pip._vendor.pygments.lexers.json5', 'JSON5', ('json5',), ('*.json5',), ()), - 'JsonBareObjectLexer': ('pip._vendor.pygments.lexers.data', 'JSONBareObject', (), (), ()), - 'JsonLdLexer': ('pip._vendor.pygments.lexers.data', 'JSON-LD', ('jsonld', 'json-ld'), ('*.jsonld',), ('application/ld+json',)), - 'JsonLexer': ('pip._vendor.pygments.lexers.data', 'JSON', ('json', 'json-object'), ('*.json', '*.jsonl', '*.ndjson', 'Pipfile.lock'), ('application/json', 'application/json-object', 'application/x-ndjson', 'application/jsonl', 'application/json-seq')), - 'JsonnetLexer': ('pip._vendor.pygments.lexers.jsonnet', 'Jsonnet', ('jsonnet',), ('*.jsonnet', '*.libsonnet'), ()), - 'JspLexer': ('pip._vendor.pygments.lexers.templates', 'Java Server Page', ('jsp',), ('*.jsp',), ('application/x-jsp',)), - 'JsxLexer': ('pip._vendor.pygments.lexers.jsx', 'JSX', ('jsx', 'react'), ('*.jsx', '*.react'), ('text/jsx', 'text/typescript-jsx')), - 'JuliaConsoleLexer': ('pip._vendor.pygments.lexers.julia', 'Julia console', ('jlcon', 'julia-repl'), (), ()), - 'JuliaLexer': ('pip._vendor.pygments.lexers.julia', 'Julia', ('julia', 'jl'), ('*.jl',), ('text/x-julia', 'application/x-julia')), - 'JuttleLexer': ('pip._vendor.pygments.lexers.javascript', 'Juttle', ('juttle',), ('*.juttle',), ('application/juttle', 'application/x-juttle', 'text/x-juttle', 'text/juttle')), - 'KLexer': ('pip._vendor.pygments.lexers.q', 'K', ('k',), ('*.k',), ()), - 'KalLexer': ('pip._vendor.pygments.lexers.javascript', 'Kal', ('kal',), ('*.kal',), ('text/kal', 'application/kal')), - 'KconfigLexer': ('pip._vendor.pygments.lexers.configs', 'Kconfig', ('kconfig', 'menuconfig', 'linux-config', 'kernel-config'), ('Kconfig*', '*Config.in*', 'external.in*', 'standard-modules.in'), ('text/x-kconfig',)), - 'KernelLogLexer': ('pip._vendor.pygments.lexers.textfmts', 'Kernel log', ('kmsg', 'dmesg'), ('*.kmsg', '*.dmesg'), ()), - 'KokaLexer': ('pip._vendor.pygments.lexers.haskell', 'Koka', ('koka',), ('*.kk', '*.kki'), ('text/x-koka',)), - 'KotlinLexer': ('pip._vendor.pygments.lexers.jvm', 'Kotlin', ('kotlin',), ('*.kt', '*.kts'), ('text/x-kotlin',)), - 'KuinLexer': ('pip._vendor.pygments.lexers.kuin', 'Kuin', ('kuin',), ('*.kn',), ()), - 'KustoLexer': ('pip._vendor.pygments.lexers.kusto', 'Kusto', ('kql', 'kusto'), ('*.kql', '*.kusto', '.csl'), ()), - 'LSLLexer': ('pip._vendor.pygments.lexers.scripting', 'LSL', ('lsl',), ('*.lsl',), ('text/x-lsl',)), - 'LassoCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Lasso', ('css+lasso',), (), ('text/css+lasso',)), - 'LassoHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Lasso', ('html+lasso',), (), ('text/html+lasso', 'application/x-httpd-lasso', 'application/x-httpd-lasso[89]')), - 'LassoJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Lasso', ('javascript+lasso', 'js+lasso'), (), ('application/x-javascript+lasso', 'text/x-javascript+lasso', 'text/javascript+lasso')), - 'LassoLexer': ('pip._vendor.pygments.lexers.javascript', 'Lasso', ('lasso', 'lassoscript'), ('*.lasso', '*.lasso[89]'), ('text/x-lasso',)), - 'LassoXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Lasso', ('xml+lasso',), (), ('application/xml+lasso',)), - 'LdaprcLexer': ('pip._vendor.pygments.lexers.ldap', 'LDAP configuration file', ('ldapconf', 'ldaprc'), ('.ldaprc', 'ldaprc', 'ldap.conf'), ('text/x-ldapconf',)), - 'LdifLexer': ('pip._vendor.pygments.lexers.ldap', 'LDIF', ('ldif',), ('*.ldif',), ('text/x-ldif',)), - 'Lean3Lexer': ('pip._vendor.pygments.lexers.lean', 'Lean', ('lean', 'lean3'), ('*.lean',), ('text/x-lean', 'text/x-lean3')), - 'Lean4Lexer': ('pip._vendor.pygments.lexers.lean', 'Lean4', ('lean4',), ('*.lean',), ('text/x-lean4',)), - 'LessCssLexer': ('pip._vendor.pygments.lexers.css', 'LessCss', ('less',), ('*.less',), ('text/x-less-css',)), - 'LighttpdConfLexer': ('pip._vendor.pygments.lexers.configs', 'Lighttpd configuration file', ('lighttpd', 'lighty'), ('lighttpd.conf',), ('text/x-lighttpd-conf',)), - 'LilyPondLexer': ('pip._vendor.pygments.lexers.lilypond', 'LilyPond', ('lilypond',), ('*.ly',), ()), - 'LimboLexer': ('pip._vendor.pygments.lexers.inferno', 'Limbo', ('limbo',), ('*.b',), ('text/limbo',)), - 'LiquidLexer': ('pip._vendor.pygments.lexers.templates', 'liquid', ('liquid',), ('*.liquid',), ()), - 'LiterateAgdaLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Agda', ('literate-agda', 'lagda'), ('*.lagda',), ('text/x-literate-agda',)), - 'LiterateCryptolLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Cryptol', ('literate-cryptol', 'lcryptol', 'lcry'), ('*.lcry',), ('text/x-literate-cryptol',)), - 'LiterateHaskellLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Haskell', ('literate-haskell', 'lhaskell', 'lhs'), ('*.lhs',), ('text/x-literate-haskell',)), - 'LiterateIdrisLexer': ('pip._vendor.pygments.lexers.haskell', 'Literate Idris', ('literate-idris', 'lidris', 'lidr'), ('*.lidr',), ('text/x-literate-idris',)), - 'LiveScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'LiveScript', ('livescript', 'live-script'), ('*.ls',), ('text/livescript',)), - 'LlvmLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM', ('llvm',), ('*.ll',), ('text/x-llvm',)), - 'LlvmMirBodyLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM-MIR Body', ('llvm-mir-body',), (), ()), - 'LlvmMirLexer': ('pip._vendor.pygments.lexers.asm', 'LLVM-MIR', ('llvm-mir',), ('*.mir',), ()), - 'LogosLexer': ('pip._vendor.pygments.lexers.objective', 'Logos', ('logos',), ('*.x', '*.xi', '*.xm', '*.xmi'), ('text/x-logos',)), - 'LogtalkLexer': ('pip._vendor.pygments.lexers.prolog', 'Logtalk', ('logtalk',), ('*.lgt', '*.logtalk'), ('text/x-logtalk',)), - 'LuaLexer': ('pip._vendor.pygments.lexers.scripting', 'Lua', ('lua',), ('*.lua', '*.wlua'), ('text/x-lua', 'application/x-lua')), - 'LuauLexer': ('pip._vendor.pygments.lexers.scripting', 'Luau', ('luau',), ('*.luau',), ()), - 'MCFunctionLexer': ('pip._vendor.pygments.lexers.minecraft', 'MCFunction', ('mcfunction', 'mcf'), ('*.mcfunction',), ('text/mcfunction',)), - 'MCSchemaLexer': ('pip._vendor.pygments.lexers.minecraft', 'MCSchema', ('mcschema',), ('*.mcschema',), ('text/mcschema',)), - 'MIMELexer': ('pip._vendor.pygments.lexers.mime', 'MIME', ('mime',), (), ('multipart/mixed', 'multipart/related', 'multipart/alternative')), - 'MIPSLexer': ('pip._vendor.pygments.lexers.mips', 'MIPS', ('mips',), ('*.mips', '*.MIPS'), ()), - 'MOOCodeLexer': ('pip._vendor.pygments.lexers.scripting', 'MOOCode', ('moocode', 'moo'), ('*.moo',), ('text/x-moocode',)), - 'MSDOSSessionLexer': ('pip._vendor.pygments.lexers.shell', 'MSDOS Session', ('doscon',), (), ()), - 'Macaulay2Lexer': ('pip._vendor.pygments.lexers.macaulay2', 'Macaulay2', ('macaulay2',), ('*.m2',), ()), - 'MakefileLexer': ('pip._vendor.pygments.lexers.make', 'Makefile', ('make', 'makefile', 'mf', 'bsdmake'), ('*.mak', '*.mk', 'Makefile', 'makefile', 'Makefile.*', 'GNUmakefile'), ('text/x-makefile',)), - 'MakoCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Mako', ('css+mako',), (), ('text/css+mako',)), - 'MakoHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Mako', ('html+mako',), (), ('text/html+mako',)), - 'MakoJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Mako', ('javascript+mako', 'js+mako'), (), ('application/x-javascript+mako', 'text/x-javascript+mako', 'text/javascript+mako')), - 'MakoLexer': ('pip._vendor.pygments.lexers.templates', 'Mako', ('mako',), ('*.mao',), ('application/x-mako',)), - 'MakoXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Mako', ('xml+mako',), (), ('application/xml+mako',)), - 'MapleLexer': ('pip._vendor.pygments.lexers.maple', 'Maple', ('maple',), ('*.mpl', '*.mi', '*.mm'), ('text/x-maple',)), - 'MaqlLexer': ('pip._vendor.pygments.lexers.business', 'MAQL', ('maql',), ('*.maql',), ('text/x-gooddata-maql', 'application/x-gooddata-maql')), - 'MarkdownLexer': ('pip._vendor.pygments.lexers.markup', 'Markdown', ('markdown', 'md'), ('*.md', '*.markdown'), ('text/x-markdown',)), - 'MaskLexer': ('pip._vendor.pygments.lexers.javascript', 'Mask', ('mask',), ('*.mask',), ('text/x-mask',)), - 'MasonLexer': ('pip._vendor.pygments.lexers.templates', 'Mason', ('mason',), ('*.m', '*.mhtml', '*.mc', '*.mi', 'autohandler', 'dhandler'), ('application/x-mason',)), - 'MathematicaLexer': ('pip._vendor.pygments.lexers.algebra', 'Mathematica', ('mathematica', 'mma', 'nb'), ('*.nb', '*.cdf', '*.nbp', '*.ma'), ('application/mathematica', 'application/vnd.wolfram.mathematica', 'application/vnd.wolfram.mathematica.package', 'application/vnd.wolfram.cdf')), - 'MatlabLexer': ('pip._vendor.pygments.lexers.matlab', 'Matlab', ('matlab',), ('*.m',), ('text/matlab',)), - 'MatlabSessionLexer': ('pip._vendor.pygments.lexers.matlab', 'Matlab session', ('matlabsession',), (), ()), - 'MaximaLexer': ('pip._vendor.pygments.lexers.maxima', 'Maxima', ('maxima', 'macsyma'), ('*.mac', '*.max'), ()), - 'MesonLexer': ('pip._vendor.pygments.lexers.meson', 'Meson', ('meson', 'meson.build'), ('meson.build', 'meson_options.txt'), ('text/x-meson',)), - 'MiniDLexer': ('pip._vendor.pygments.lexers.d', 'MiniD', ('minid',), (), ('text/x-minidsrc',)), - 'MiniScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'MiniScript', ('miniscript', 'ms'), ('*.ms',), ('text/x-minicript', 'application/x-miniscript')), - 'ModelicaLexer': ('pip._vendor.pygments.lexers.modeling', 'Modelica', ('modelica',), ('*.mo',), ('text/x-modelica',)), - 'Modula2Lexer': ('pip._vendor.pygments.lexers.modula2', 'Modula-2', ('modula2', 'm2'), ('*.def', '*.mod'), ('text/x-modula2',)), - 'MoinWikiLexer': ('pip._vendor.pygments.lexers.markup', 'MoinMoin/Trac Wiki markup', ('trac-wiki', 'moin'), (), ('text/x-trac-wiki',)), - 'MojoLexer': ('pip._vendor.pygments.lexers.mojo', 'Mojo', ('mojo', '🔥'), ('*.mojo', '*.🔥'), ('text/x-mojo', 'application/x-mojo')), - 'MonkeyLexer': ('pip._vendor.pygments.lexers.basic', 'Monkey', ('monkey',), ('*.monkey',), ('text/x-monkey',)), - 'MonteLexer': ('pip._vendor.pygments.lexers.monte', 'Monte', ('monte',), ('*.mt',), ()), - 'MoonScriptLexer': ('pip._vendor.pygments.lexers.scripting', 'MoonScript', ('moonscript', 'moon'), ('*.moon',), ('text/x-moonscript', 'application/x-moonscript')), - 'MoselLexer': ('pip._vendor.pygments.lexers.mosel', 'Mosel', ('mosel',), ('*.mos',), ()), - 'MozPreprocCssLexer': ('pip._vendor.pygments.lexers.markup', 'CSS+mozpreproc', ('css+mozpreproc',), ('*.css.in',), ()), - 'MozPreprocHashLexer': ('pip._vendor.pygments.lexers.markup', 'mozhashpreproc', ('mozhashpreproc',), (), ()), - 'MozPreprocJavascriptLexer': ('pip._vendor.pygments.lexers.markup', 'Javascript+mozpreproc', ('javascript+mozpreproc',), ('*.js.in',), ()), - 'MozPreprocPercentLexer': ('pip._vendor.pygments.lexers.markup', 'mozpercentpreproc', ('mozpercentpreproc',), (), ()), - 'MozPreprocXulLexer': ('pip._vendor.pygments.lexers.markup', 'XUL+mozpreproc', ('xul+mozpreproc',), ('*.xul.in',), ()), - 'MqlLexer': ('pip._vendor.pygments.lexers.c_like', 'MQL', ('mql', 'mq4', 'mq5', 'mql4', 'mql5'), ('*.mq4', '*.mq5', '*.mqh'), ('text/x-mql',)), - 'MscgenLexer': ('pip._vendor.pygments.lexers.dsls', 'Mscgen', ('mscgen', 'msc'), ('*.msc',), ()), - 'MuPADLexer': ('pip._vendor.pygments.lexers.algebra', 'MuPAD', ('mupad',), ('*.mu',), ()), - 'MxmlLexer': ('pip._vendor.pygments.lexers.actionscript', 'MXML', ('mxml',), ('*.mxml',), ()), - 'MySqlLexer': ('pip._vendor.pygments.lexers.sql', 'MySQL', ('mysql',), (), ('text/x-mysql',)), - 'MyghtyCssLexer': ('pip._vendor.pygments.lexers.templates', 'CSS+Myghty', ('css+myghty',), (), ('text/css+myghty',)), - 'MyghtyHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Myghty', ('html+myghty',), (), ('text/html+myghty',)), - 'MyghtyJavascriptLexer': ('pip._vendor.pygments.lexers.templates', 'JavaScript+Myghty', ('javascript+myghty', 'js+myghty'), (), ('application/x-javascript+myghty', 'text/x-javascript+myghty', 'text/javascript+mygthy')), - 'MyghtyLexer': ('pip._vendor.pygments.lexers.templates', 'Myghty', ('myghty',), ('*.myt', 'autodelegate'), ('application/x-myghty',)), - 'MyghtyXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Myghty', ('xml+myghty',), (), ('application/xml+myghty',)), - 'NCLLexer': ('pip._vendor.pygments.lexers.ncl', 'NCL', ('ncl',), ('*.ncl',), ('text/ncl',)), - 'NSISLexer': ('pip._vendor.pygments.lexers.installers', 'NSIS', ('nsis', 'nsi', 'nsh'), ('*.nsi', '*.nsh'), ('text/x-nsis',)), - 'NasmLexer': ('pip._vendor.pygments.lexers.asm', 'NASM', ('nasm',), ('*.asm', '*.ASM', '*.nasm'), ('text/x-nasm',)), - 'NasmObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'objdump-nasm', ('objdump-nasm',), ('*.objdump-intel',), ('text/x-nasm-objdump',)), - 'NemerleLexer': ('pip._vendor.pygments.lexers.dotnet', 'Nemerle', ('nemerle',), ('*.n',), ('text/x-nemerle',)), - 'NesCLexer': ('pip._vendor.pygments.lexers.c_like', 'nesC', ('nesc',), ('*.nc',), ('text/x-nescsrc',)), - 'NestedTextLexer': ('pip._vendor.pygments.lexers.configs', 'NestedText', ('nestedtext', 'nt'), ('*.nt',), ()), - 'NewLispLexer': ('pip._vendor.pygments.lexers.lisp', 'NewLisp', ('newlisp',), ('*.lsp', '*.nl', '*.kif'), ('text/x-newlisp', 'application/x-newlisp')), - 'NewspeakLexer': ('pip._vendor.pygments.lexers.smalltalk', 'Newspeak', ('newspeak',), ('*.ns2',), ('text/x-newspeak',)), - 'NginxConfLexer': ('pip._vendor.pygments.lexers.configs', 'Nginx configuration file', ('nginx',), ('nginx.conf',), ('text/x-nginx-conf',)), - 'NimrodLexer': ('pip._vendor.pygments.lexers.nimrod', 'Nimrod', ('nimrod', 'nim'), ('*.nim', '*.nimrod'), ('text/x-nim',)), - 'NitLexer': ('pip._vendor.pygments.lexers.nit', 'Nit', ('nit',), ('*.nit',), ()), - 'NixLexer': ('pip._vendor.pygments.lexers.nix', 'Nix', ('nixos', 'nix'), ('*.nix',), ('text/x-nix',)), - 'NodeConsoleLexer': ('pip._vendor.pygments.lexers.javascript', 'Node.js REPL console session', ('nodejsrepl',), (), ('text/x-nodejsrepl',)), - 'NotmuchLexer': ('pip._vendor.pygments.lexers.textfmts', 'Notmuch', ('notmuch',), (), ()), - 'NuSMVLexer': ('pip._vendor.pygments.lexers.smv', 'NuSMV', ('nusmv',), ('*.smv',), ()), - 'NumPyLexer': ('pip._vendor.pygments.lexers.python', 'NumPy', ('numpy',), (), ()), - 'NumbaIRLexer': ('pip._vendor.pygments.lexers.numbair', 'Numba_IR', ('numba_ir', 'numbair'), ('*.numba_ir',), ('text/x-numba_ir', 'text/x-numbair')), - 'ObjdumpLexer': ('pip._vendor.pygments.lexers.asm', 'objdump', ('objdump',), ('*.objdump',), ('text/x-objdump',)), - 'ObjectiveCLexer': ('pip._vendor.pygments.lexers.objective', 'Objective-C', ('objective-c', 'objectivec', 'obj-c', 'objc'), ('*.m', '*.h'), ('text/x-objective-c',)), - 'ObjectiveCppLexer': ('pip._vendor.pygments.lexers.objective', 'Objective-C++', ('objective-c++', 'objectivec++', 'obj-c++', 'objc++'), ('*.mm', '*.hh'), ('text/x-objective-c++',)), - 'ObjectiveJLexer': ('pip._vendor.pygments.lexers.javascript', 'Objective-J', ('objective-j', 'objectivej', 'obj-j', 'objj'), ('*.j',), ('text/x-objective-j',)), - 'OcamlLexer': ('pip._vendor.pygments.lexers.ml', 'OCaml', ('ocaml',), ('*.ml', '*.mli', '*.mll', '*.mly'), ('text/x-ocaml',)), - 'OctaveLexer': ('pip._vendor.pygments.lexers.matlab', 'Octave', ('octave',), ('*.m',), ('text/octave',)), - 'OdinLexer': ('pip._vendor.pygments.lexers.archetype', 'ODIN', ('odin',), ('*.odin',), ('text/odin',)), - 'OmgIdlLexer': ('pip._vendor.pygments.lexers.c_like', 'OMG Interface Definition Language', ('omg-idl',), ('*.idl', '*.pidl'), ()), - 'OocLexer': ('pip._vendor.pygments.lexers.ooc', 'Ooc', ('ooc',), ('*.ooc',), ('text/x-ooc',)), - 'OpaLexer': ('pip._vendor.pygments.lexers.ml', 'Opa', ('opa',), ('*.opa',), ('text/x-opa',)), - 'OpenEdgeLexer': ('pip._vendor.pygments.lexers.business', 'OpenEdge ABL', ('openedge', 'abl', 'progress'), ('*.p', '*.cls'), ('text/x-openedge', 'application/x-openedge')), - 'OpenScadLexer': ('pip._vendor.pygments.lexers.openscad', 'OpenSCAD', ('openscad',), ('*.scad',), ('application/x-openscad',)), - 'OrgLexer': ('pip._vendor.pygments.lexers.markup', 'Org Mode', ('org', 'orgmode', 'org-mode'), ('*.org',), ('text/org',)), - 'OutputLexer': ('pip._vendor.pygments.lexers.special', 'Text output', ('output',), (), ()), - 'PacmanConfLexer': ('pip._vendor.pygments.lexers.configs', 'PacmanConf', ('pacmanconf',), ('pacman.conf',), ()), - 'PanLexer': ('pip._vendor.pygments.lexers.dsls', 'Pan', ('pan',), ('*.pan',), ()), - 'ParaSailLexer': ('pip._vendor.pygments.lexers.parasail', 'ParaSail', ('parasail',), ('*.psi', '*.psl'), ('text/x-parasail',)), - 'PawnLexer': ('pip._vendor.pygments.lexers.pawn', 'Pawn', ('pawn',), ('*.p', '*.pwn', '*.inc'), ('text/x-pawn',)), - 'PddlLexer': ('pip._vendor.pygments.lexers.pddl', 'PDDL', ('pddl',), ('*.pddl',), ()), - 'PegLexer': ('pip._vendor.pygments.lexers.grammar_notation', 'PEG', ('peg',), ('*.peg',), ('text/x-peg',)), - 'Perl6Lexer': ('pip._vendor.pygments.lexers.perl', 'Perl6', ('perl6', 'pl6', 'raku'), ('*.pl', '*.pm', '*.nqp', '*.p6', '*.6pl', '*.p6l', '*.pl6', '*.6pm', '*.p6m', '*.pm6', '*.t', '*.raku', '*.rakumod', '*.rakutest', '*.rakudoc'), ('text/x-perl6', 'application/x-perl6')), - 'PerlLexer': ('pip._vendor.pygments.lexers.perl', 'Perl', ('perl', 'pl'), ('*.pl', '*.pm', '*.t', '*.perl'), ('text/x-perl', 'application/x-perl')), - 'PhixLexer': ('pip._vendor.pygments.lexers.phix', 'Phix', ('phix',), ('*.exw',), ('text/x-phix',)), - 'PhpLexer': ('pip._vendor.pygments.lexers.php', 'PHP', ('php', 'php3', 'php4', 'php5'), ('*.php', '*.php[345]', '*.inc'), ('text/x-php',)), - 'PigLexer': ('pip._vendor.pygments.lexers.jvm', 'Pig', ('pig',), ('*.pig',), ('text/x-pig',)), - 'PikeLexer': ('pip._vendor.pygments.lexers.c_like', 'Pike', ('pike',), ('*.pike', '*.pmod'), ('text/x-pike',)), - 'PkgConfigLexer': ('pip._vendor.pygments.lexers.configs', 'PkgConfig', ('pkgconfig',), ('*.pc',), ()), - 'PlPgsqlLexer': ('pip._vendor.pygments.lexers.sql', 'PL/pgSQL', ('plpgsql',), (), ('text/x-plpgsql',)), - 'PointlessLexer': ('pip._vendor.pygments.lexers.pointless', 'Pointless', ('pointless',), ('*.ptls',), ()), - 'PonyLexer': ('pip._vendor.pygments.lexers.pony', 'Pony', ('pony',), ('*.pony',), ()), - 'PortugolLexer': ('pip._vendor.pygments.lexers.pascal', 'Portugol', ('portugol',), ('*.alg', '*.portugol'), ()), - 'PostScriptLexer': ('pip._vendor.pygments.lexers.graphics', 'PostScript', ('postscript', 'postscr'), ('*.ps', '*.eps'), ('application/postscript',)), - 'PostgresConsoleLexer': ('pip._vendor.pygments.lexers.sql', 'PostgreSQL console (psql)', ('psql', 'postgresql-console', 'postgres-console'), (), ('text/x-postgresql-psql',)), - 'PostgresExplainLexer': ('pip._vendor.pygments.lexers.sql', 'PostgreSQL EXPLAIN dialect', ('postgres-explain',), ('*.explain',), ('text/x-postgresql-explain',)), - 'PostgresLexer': ('pip._vendor.pygments.lexers.sql', 'PostgreSQL SQL dialect', ('postgresql', 'postgres'), (), ('text/x-postgresql',)), - 'PovrayLexer': ('pip._vendor.pygments.lexers.graphics', 'POVRay', ('pov',), ('*.pov', '*.inc'), ('text/x-povray',)), - 'PowerShellLexer': ('pip._vendor.pygments.lexers.shell', 'PowerShell', ('powershell', 'pwsh', 'posh', 'ps1', 'psm1'), ('*.ps1', '*.psm1'), ('text/x-powershell',)), - 'PowerShellSessionLexer': ('pip._vendor.pygments.lexers.shell', 'PowerShell Session', ('pwsh-session', 'ps1con'), (), ()), - 'PraatLexer': ('pip._vendor.pygments.lexers.praat', 'Praat', ('praat',), ('*.praat', '*.proc', '*.psc'), ()), - 'ProcfileLexer': ('pip._vendor.pygments.lexers.procfile', 'Procfile', ('procfile',), ('Procfile',), ()), - 'PrologLexer': ('pip._vendor.pygments.lexers.prolog', 'Prolog', ('prolog',), ('*.ecl', '*.prolog', '*.pro', '*.pl'), ('text/x-prolog',)), - 'PromQLLexer': ('pip._vendor.pygments.lexers.promql', 'PromQL', ('promql',), ('*.promql',), ()), - 'PromelaLexer': ('pip._vendor.pygments.lexers.c_like', 'Promela', ('promela',), ('*.pml', '*.prom', '*.prm', '*.promela', '*.pr', '*.pm'), ('text/x-promela',)), - 'PropertiesLexer': ('pip._vendor.pygments.lexers.configs', 'Properties', ('properties', 'jproperties'), ('*.properties',), ('text/x-java-properties',)), - 'ProtoBufLexer': ('pip._vendor.pygments.lexers.dsls', 'Protocol Buffer', ('protobuf', 'proto'), ('*.proto',), ()), - 'PrqlLexer': ('pip._vendor.pygments.lexers.prql', 'PRQL', ('prql',), ('*.prql',), ('application/prql', 'application/x-prql')), - 'PsyshConsoleLexer': ('pip._vendor.pygments.lexers.php', 'PsySH console session for PHP', ('psysh',), (), ()), - 'PtxLexer': ('pip._vendor.pygments.lexers.ptx', 'PTX', ('ptx',), ('*.ptx',), ('text/x-ptx',)), - 'PugLexer': ('pip._vendor.pygments.lexers.html', 'Pug', ('pug', 'jade'), ('*.pug', '*.jade'), ('text/x-pug', 'text/x-jade')), - 'PuppetLexer': ('pip._vendor.pygments.lexers.dsls', 'Puppet', ('puppet',), ('*.pp',), ()), - 'PyPyLogLexer': ('pip._vendor.pygments.lexers.console', 'PyPy Log', ('pypylog', 'pypy'), ('*.pypylog',), ('application/x-pypylog',)), - 'Python2Lexer': ('pip._vendor.pygments.lexers.python', 'Python 2.x', ('python2', 'py2'), (), ('text/x-python2', 'application/x-python2')), - 'Python2TracebackLexer': ('pip._vendor.pygments.lexers.python', 'Python 2.x Traceback', ('py2tb',), ('*.py2tb',), ('text/x-python2-traceback',)), - 'PythonConsoleLexer': ('pip._vendor.pygments.lexers.python', 'Python console session', ('pycon', 'python-console'), (), ('text/x-python-doctest',)), - 'PythonLexer': ('pip._vendor.pygments.lexers.python', 'Python', ('python', 'py', 'sage', 'python3', 'py3', 'bazel', 'starlark', 'pyi'), ('*.py', '*.pyw', '*.pyi', '*.jy', '*.sage', '*.sc', 'SConstruct', 'SConscript', '*.bzl', 'BUCK', 'BUILD', 'BUILD.bazel', 'WORKSPACE', '*.tac'), ('text/x-python', 'application/x-python', 'text/x-python3', 'application/x-python3')), - 'PythonTracebackLexer': ('pip._vendor.pygments.lexers.python', 'Python Traceback', ('pytb', 'py3tb'), ('*.pytb', '*.py3tb'), ('text/x-python-traceback', 'text/x-python3-traceback')), - 'PythonUL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'Python+UL4', ('py+ul4',), ('*.pyul4',), ()), - 'QBasicLexer': ('pip._vendor.pygments.lexers.basic', 'QBasic', ('qbasic', 'basic'), ('*.BAS', '*.bas'), ('text/basic',)), - 'QLexer': ('pip._vendor.pygments.lexers.q', 'Q', ('q',), ('*.q',), ()), - 'QVToLexer': ('pip._vendor.pygments.lexers.qvt', 'QVTO', ('qvto', 'qvt'), ('*.qvto',), ()), - 'QlikLexer': ('pip._vendor.pygments.lexers.qlik', 'Qlik', ('qlik', 'qlikview', 'qliksense', 'qlikscript'), ('*.qvs', '*.qvw'), ()), - 'QmlLexer': ('pip._vendor.pygments.lexers.webmisc', 'QML', ('qml', 'qbs'), ('*.qml', '*.qbs'), ('application/x-qml', 'application/x-qt.qbs+qml')), - 'RConsoleLexer': ('pip._vendor.pygments.lexers.r', 'RConsole', ('rconsole', 'rout'), ('*.Rout',), ()), - 'RNCCompactLexer': ('pip._vendor.pygments.lexers.rnc', 'Relax-NG Compact', ('rng-compact', 'rnc'), ('*.rnc',), ()), - 'RPMSpecLexer': ('pip._vendor.pygments.lexers.installers', 'RPMSpec', ('spec',), ('*.spec',), ('text/x-rpm-spec',)), - 'RacketLexer': ('pip._vendor.pygments.lexers.lisp', 'Racket', ('racket', 'rkt'), ('*.rkt', '*.rktd', '*.rktl'), ('text/x-racket', 'application/x-racket')), - 'RagelCLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in C Host', ('ragel-c',), ('*.rl',), ()), - 'RagelCppLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in CPP Host', ('ragel-cpp',), ('*.rl',), ()), - 'RagelDLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in D Host', ('ragel-d',), ('*.rl',), ()), - 'RagelEmbeddedLexer': ('pip._vendor.pygments.lexers.parsers', 'Embedded Ragel', ('ragel-em',), ('*.rl',), ()), - 'RagelJavaLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Java Host', ('ragel-java',), ('*.rl',), ()), - 'RagelLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel', ('ragel',), (), ()), - 'RagelObjectiveCLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Objective C Host', ('ragel-objc',), ('*.rl',), ()), - 'RagelRubyLexer': ('pip._vendor.pygments.lexers.parsers', 'Ragel in Ruby Host', ('ragel-ruby', 'ragel-rb'), ('*.rl',), ()), - 'RawTokenLexer': ('pip._vendor.pygments.lexers.special', 'Raw token data', (), (), ('application/x-pygments-tokens',)), - 'RdLexer': ('pip._vendor.pygments.lexers.r', 'Rd', ('rd',), ('*.Rd',), ('text/x-r-doc',)), - 'ReasonLexer': ('pip._vendor.pygments.lexers.ml', 'ReasonML', ('reasonml', 'reason'), ('*.re', '*.rei'), ('text/x-reasonml',)), - 'RebolLexer': ('pip._vendor.pygments.lexers.rebol', 'REBOL', ('rebol',), ('*.r', '*.r3', '*.reb'), ('text/x-rebol',)), - 'RedLexer': ('pip._vendor.pygments.lexers.rebol', 'Red', ('red', 'red/system'), ('*.red', '*.reds'), ('text/x-red', 'text/x-red-system')), - 'RedcodeLexer': ('pip._vendor.pygments.lexers.esoteric', 'Redcode', ('redcode',), ('*.cw',), ()), - 'RegeditLexer': ('pip._vendor.pygments.lexers.configs', 'reg', ('registry',), ('*.reg',), ('text/x-windows-registry',)), - 'RegoLexer': ('pip._vendor.pygments.lexers.rego', 'Rego', ('rego',), ('*.rego',), ('text/x-rego',)), - 'ResourceLexer': ('pip._vendor.pygments.lexers.resource', 'ResourceBundle', ('resourcebundle', 'resource'), (), ()), - 'RexxLexer': ('pip._vendor.pygments.lexers.scripting', 'Rexx', ('rexx', 'arexx'), ('*.rexx', '*.rex', '*.rx', '*.arexx'), ('text/x-rexx',)), - 'RhtmlLexer': ('pip._vendor.pygments.lexers.templates', 'RHTML', ('rhtml', 'html+erb', 'html+ruby'), ('*.rhtml',), ('text/html+ruby',)), - 'RideLexer': ('pip._vendor.pygments.lexers.ride', 'Ride', ('ride',), ('*.ride',), ('text/x-ride',)), - 'RitaLexer': ('pip._vendor.pygments.lexers.rita', 'Rita', ('rita',), ('*.rita',), ('text/rita',)), - 'RoboconfGraphLexer': ('pip._vendor.pygments.lexers.roboconf', 'Roboconf Graph', ('roboconf-graph',), ('*.graph',), ()), - 'RoboconfInstancesLexer': ('pip._vendor.pygments.lexers.roboconf', 'Roboconf Instances', ('roboconf-instances',), ('*.instances',), ()), - 'RobotFrameworkLexer': ('pip._vendor.pygments.lexers.robotframework', 'RobotFramework', ('robotframework',), ('*.robot', '*.resource'), ('text/x-robotframework',)), - 'RqlLexer': ('pip._vendor.pygments.lexers.sql', 'RQL', ('rql',), ('*.rql',), ('text/x-rql',)), - 'RslLexer': ('pip._vendor.pygments.lexers.dsls', 'RSL', ('rsl',), ('*.rsl',), ('text/rsl',)), - 'RstLexer': ('pip._vendor.pygments.lexers.markup', 'reStructuredText', ('restructuredtext', 'rst', 'rest'), ('*.rst', '*.rest'), ('text/x-rst', 'text/prs.fallenstein.rst')), - 'RtsLexer': ('pip._vendor.pygments.lexers.trafficscript', 'TrafficScript', ('trafficscript', 'rts'), ('*.rts',), ()), - 'RubyConsoleLexer': ('pip._vendor.pygments.lexers.ruby', 'Ruby irb session', ('rbcon', 'irb'), (), ('text/x-ruby-shellsession',)), - 'RubyLexer': ('pip._vendor.pygments.lexers.ruby', 'Ruby', ('ruby', 'rb', 'duby'), ('*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx', '*.duby', 'Gemfile', 'Vagrantfile'), ('text/x-ruby', 'application/x-ruby')), - 'RustLexer': ('pip._vendor.pygments.lexers.rust', 'Rust', ('rust', 'rs'), ('*.rs', '*.rs.in'), ('text/rust', 'text/x-rust')), - 'SASLexer': ('pip._vendor.pygments.lexers.sas', 'SAS', ('sas',), ('*.SAS', '*.sas'), ('text/x-sas', 'text/sas', 'application/x-sas')), - 'SLexer': ('pip._vendor.pygments.lexers.r', 'S', ('splus', 's', 'r'), ('*.S', '*.R', '.Rhistory', '.Rprofile', '.Renviron'), ('text/S-plus', 'text/S', 'text/x-r-source', 'text/x-r', 'text/x-R', 'text/x-r-history', 'text/x-r-profile')), - 'SMLLexer': ('pip._vendor.pygments.lexers.ml', 'Standard ML', ('sml',), ('*.sml', '*.sig', '*.fun'), ('text/x-standardml', 'application/x-standardml')), - 'SNBTLexer': ('pip._vendor.pygments.lexers.minecraft', 'SNBT', ('snbt',), ('*.snbt',), ('text/snbt',)), - 'SarlLexer': ('pip._vendor.pygments.lexers.jvm', 'SARL', ('sarl',), ('*.sarl',), ('text/x-sarl',)), - 'SassLexer': ('pip._vendor.pygments.lexers.css', 'Sass', ('sass',), ('*.sass',), ('text/x-sass',)), - 'SaviLexer': ('pip._vendor.pygments.lexers.savi', 'Savi', ('savi',), ('*.savi',), ()), - 'ScalaLexer': ('pip._vendor.pygments.lexers.jvm', 'Scala', ('scala',), ('*.scala',), ('text/x-scala',)), - 'ScamlLexer': ('pip._vendor.pygments.lexers.html', 'Scaml', ('scaml',), ('*.scaml',), ('text/x-scaml',)), - 'ScdocLexer': ('pip._vendor.pygments.lexers.scdoc', 'scdoc', ('scdoc', 'scd'), ('*.scd', '*.scdoc'), ()), - 'SchemeLexer': ('pip._vendor.pygments.lexers.lisp', 'Scheme', ('scheme', 'scm'), ('*.scm', '*.ss'), ('text/x-scheme', 'application/x-scheme')), - 'ScilabLexer': ('pip._vendor.pygments.lexers.matlab', 'Scilab', ('scilab',), ('*.sci', '*.sce', '*.tst'), ('text/scilab',)), - 'ScssLexer': ('pip._vendor.pygments.lexers.css', 'SCSS', ('scss',), ('*.scss',), ('text/x-scss',)), - 'SedLexer': ('pip._vendor.pygments.lexers.textedit', 'Sed', ('sed', 'gsed', 'ssed'), ('*.sed', '*.[gs]sed'), ('text/x-sed',)), - 'ShExCLexer': ('pip._vendor.pygments.lexers.rdf', 'ShExC', ('shexc', 'shex'), ('*.shex',), ('text/shex',)), - 'ShenLexer': ('pip._vendor.pygments.lexers.lisp', 'Shen', ('shen',), ('*.shen',), ('text/x-shen', 'application/x-shen')), - 'SieveLexer': ('pip._vendor.pygments.lexers.sieve', 'Sieve', ('sieve',), ('*.siv', '*.sieve'), ()), - 'SilverLexer': ('pip._vendor.pygments.lexers.verification', 'Silver', ('silver',), ('*.sil', '*.vpr'), ()), - 'SingularityLexer': ('pip._vendor.pygments.lexers.configs', 'Singularity', ('singularity',), ('*.def', 'Singularity'), ()), - 'SlashLexer': ('pip._vendor.pygments.lexers.slash', 'Slash', ('slash',), ('*.sla',), ()), - 'SlimLexer': ('pip._vendor.pygments.lexers.webmisc', 'Slim', ('slim',), ('*.slim',), ('text/x-slim',)), - 'SlurmBashLexer': ('pip._vendor.pygments.lexers.shell', 'Slurm', ('slurm', 'sbatch'), ('*.sl',), ()), - 'SmaliLexer': ('pip._vendor.pygments.lexers.dalvik', 'Smali', ('smali',), ('*.smali',), ('text/smali',)), - 'SmalltalkLexer': ('pip._vendor.pygments.lexers.smalltalk', 'Smalltalk', ('smalltalk', 'squeak', 'st'), ('*.st',), ('text/x-smalltalk',)), - 'SmartGameFormatLexer': ('pip._vendor.pygments.lexers.sgf', 'SmartGameFormat', ('sgf',), ('*.sgf',), ()), - 'SmartyLexer': ('pip._vendor.pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ('application/x-smarty',)), - 'SmithyLexer': ('pip._vendor.pygments.lexers.smithy', 'Smithy', ('smithy',), ('*.smithy',), ()), - 'SnobolLexer': ('pip._vendor.pygments.lexers.snobol', 'Snobol', ('snobol',), ('*.snobol',), ('text/x-snobol',)), - 'SnowballLexer': ('pip._vendor.pygments.lexers.dsls', 'Snowball', ('snowball',), ('*.sbl',), ()), - 'SolidityLexer': ('pip._vendor.pygments.lexers.solidity', 'Solidity', ('solidity',), ('*.sol',), ()), - 'SoongLexer': ('pip._vendor.pygments.lexers.soong', 'Soong', ('androidbp', 'bp', 'soong'), ('Android.bp',), ()), - 'SophiaLexer': ('pip._vendor.pygments.lexers.sophia', 'Sophia', ('sophia',), ('*.aes',), ()), - 'SourcePawnLexer': ('pip._vendor.pygments.lexers.pawn', 'SourcePawn', ('sp',), ('*.sp',), ('text/x-sourcepawn',)), - 'SourcesListLexer': ('pip._vendor.pygments.lexers.installers', 'Debian Sourcelist', ('debsources', 'sourceslist', 'sources.list'), ('sources.list',), ()), - 'SparqlLexer': ('pip._vendor.pygments.lexers.rdf', 'SPARQL', ('sparql',), ('*.rq', '*.sparql'), ('application/sparql-query',)), - 'SpiceLexer': ('pip._vendor.pygments.lexers.spice', 'Spice', ('spice', 'spicelang'), ('*.spice',), ('text/x-spice',)), - 'SqlJinjaLexer': ('pip._vendor.pygments.lexers.templates', 'SQL+Jinja', ('sql+jinja',), ('*.sql', '*.sql.j2', '*.sql.jinja2'), ()), - 'SqlLexer': ('pip._vendor.pygments.lexers.sql', 'SQL', ('sql',), ('*.sql',), ('text/x-sql',)), - 'SqliteConsoleLexer': ('pip._vendor.pygments.lexers.sql', 'sqlite3con', ('sqlite3',), ('*.sqlite3-console',), ('text/x-sqlite3-console',)), - 'SquidConfLexer': ('pip._vendor.pygments.lexers.configs', 'SquidConf', ('squidconf', 'squid.conf', 'squid'), ('squid.conf',), ('text/x-squidconf',)), - 'SrcinfoLexer': ('pip._vendor.pygments.lexers.srcinfo', 'Srcinfo', ('srcinfo',), ('.SRCINFO',), ()), - 'SspLexer': ('pip._vendor.pygments.lexers.templates', 'Scalate Server Page', ('ssp',), ('*.ssp',), ('application/x-ssp',)), - 'StanLexer': ('pip._vendor.pygments.lexers.modeling', 'Stan', ('stan',), ('*.stan',), ()), - 'StataLexer': ('pip._vendor.pygments.lexers.stata', 'Stata', ('stata', 'do'), ('*.do', '*.ado'), ('text/x-stata', 'text/stata', 'application/x-stata')), - 'SuperColliderLexer': ('pip._vendor.pygments.lexers.supercollider', 'SuperCollider', ('supercollider', 'sc'), ('*.sc', '*.scd'), ('application/supercollider', 'text/supercollider')), - 'SwiftLexer': ('pip._vendor.pygments.lexers.objective', 'Swift', ('swift',), ('*.swift',), ('text/x-swift',)), - 'SwigLexer': ('pip._vendor.pygments.lexers.c_like', 'SWIG', ('swig',), ('*.swg', '*.i'), ('text/swig',)), - 'SystemVerilogLexer': ('pip._vendor.pygments.lexers.hdl', 'systemverilog', ('systemverilog', 'sv'), ('*.sv', '*.svh'), ('text/x-systemverilog',)), - 'SystemdLexer': ('pip._vendor.pygments.lexers.configs', 'Systemd', ('systemd',), ('*.service', '*.socket', '*.device', '*.mount', '*.automount', '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope'), ()), - 'TAPLexer': ('pip._vendor.pygments.lexers.testing', 'TAP', ('tap',), ('*.tap',), ()), - 'TNTLexer': ('pip._vendor.pygments.lexers.tnt', 'Typographic Number Theory', ('tnt',), ('*.tnt',), ()), - 'TOMLLexer': ('pip._vendor.pygments.lexers.configs', 'TOML', ('toml',), ('*.toml', 'Pipfile', 'poetry.lock'), ('application/toml',)), - 'TableGenLexer': ('pip._vendor.pygments.lexers.tablegen', 'TableGen', ('tablegen', 'td'), ('*.td',), ()), - 'TactLexer': ('pip._vendor.pygments.lexers.tact', 'Tact', ('tact',), ('*.tact',), ()), - 'Tads3Lexer': ('pip._vendor.pygments.lexers.int_fiction', 'TADS 3', ('tads3',), ('*.t',), ()), - 'TalLexer': ('pip._vendor.pygments.lexers.tal', 'Tal', ('tal', 'uxntal'), ('*.tal',), ('text/x-uxntal',)), - 'TasmLexer': ('pip._vendor.pygments.lexers.asm', 'TASM', ('tasm',), ('*.asm', '*.ASM', '*.tasm'), ('text/x-tasm',)), - 'TclLexer': ('pip._vendor.pygments.lexers.tcl', 'Tcl', ('tcl',), ('*.tcl', '*.rvt'), ('text/x-tcl', 'text/x-script.tcl', 'application/x-tcl')), - 'TcshLexer': ('pip._vendor.pygments.lexers.shell', 'Tcsh', ('tcsh', 'csh'), ('*.tcsh', '*.csh'), ('application/x-csh',)), - 'TcshSessionLexer': ('pip._vendor.pygments.lexers.shell', 'Tcsh Session', ('tcshcon',), (), ()), - 'TeaTemplateLexer': ('pip._vendor.pygments.lexers.templates', 'Tea', ('tea',), ('*.tea',), ('text/x-tea',)), - 'TealLexer': ('pip._vendor.pygments.lexers.teal', 'teal', ('teal',), ('*.teal',), ()), - 'TeraTermLexer': ('pip._vendor.pygments.lexers.teraterm', 'Tera Term macro', ('teratermmacro', 'teraterm', 'ttl'), ('*.ttl',), ('text/x-teratermmacro',)), - 'TermcapLexer': ('pip._vendor.pygments.lexers.configs', 'Termcap', ('termcap',), ('termcap', 'termcap.src'), ()), - 'TerminfoLexer': ('pip._vendor.pygments.lexers.configs', 'Terminfo', ('terminfo',), ('terminfo', 'terminfo.src'), ()), - 'TerraformLexer': ('pip._vendor.pygments.lexers.configs', 'Terraform', ('terraform', 'tf', 'hcl'), ('*.tf', '*.hcl'), ('application/x-tf', 'application/x-terraform')), - 'TexLexer': ('pip._vendor.pygments.lexers.markup', 'TeX', ('tex', 'latex'), ('*.tex', '*.aux', '*.toc'), ('text/x-tex', 'text/x-latex')), - 'TextLexer': ('pip._vendor.pygments.lexers.special', 'Text only', ('text',), ('*.txt',), ('text/plain',)), - 'ThingsDBLexer': ('pip._vendor.pygments.lexers.thingsdb', 'ThingsDB', ('ti', 'thingsdb'), ('*.ti',), ()), - 'ThriftLexer': ('pip._vendor.pygments.lexers.dsls', 'Thrift', ('thrift',), ('*.thrift',), ('application/x-thrift',)), - 'TiddlyWiki5Lexer': ('pip._vendor.pygments.lexers.markup', 'tiddler', ('tid',), ('*.tid',), ('text/vnd.tiddlywiki',)), - 'TlbLexer': ('pip._vendor.pygments.lexers.tlb', 'Tl-b', ('tlb',), ('*.tlb',), ()), - 'TlsLexer': ('pip._vendor.pygments.lexers.tls', 'TLS Presentation Language', ('tls',), (), ()), - 'TodotxtLexer': ('pip._vendor.pygments.lexers.textfmts', 'Todotxt', ('todotxt',), ('todo.txt', '*.todotxt'), ('text/x-todo',)), - 'TransactSqlLexer': ('pip._vendor.pygments.lexers.sql', 'Transact-SQL', ('tsql', 't-sql'), ('*.sql',), ('text/x-tsql',)), - 'TreetopLexer': ('pip._vendor.pygments.lexers.parsers', 'Treetop', ('treetop',), ('*.treetop', '*.tt'), ()), - 'TsxLexer': ('pip._vendor.pygments.lexers.jsx', 'TSX', ('tsx',), ('*.tsx',), ('text/typescript-tsx',)), - 'TurtleLexer': ('pip._vendor.pygments.lexers.rdf', 'Turtle', ('turtle',), ('*.ttl',), ('text/turtle', 'application/x-turtle')), - 'TwigHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Twig', ('html+twig',), ('*.twig',), ('text/html+twig',)), - 'TwigLexer': ('pip._vendor.pygments.lexers.templates', 'Twig', ('twig',), (), ('application/x-twig',)), - 'TypeScriptLexer': ('pip._vendor.pygments.lexers.javascript', 'TypeScript', ('typescript', 'ts'), ('*.ts',), ('application/x-typescript', 'text/x-typescript')), - 'TypoScriptCssDataLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScriptCssData', ('typoscriptcssdata',), (), ()), - 'TypoScriptHtmlDataLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScriptHtmlData', ('typoscripthtmldata',), (), ()), - 'TypoScriptLexer': ('pip._vendor.pygments.lexers.typoscript', 'TypoScript', ('typoscript',), ('*.typoscript',), ('text/x-typoscript',)), - 'TypstLexer': ('pip._vendor.pygments.lexers.typst', 'Typst', ('typst',), ('*.typ',), ('text/x-typst',)), - 'UL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'UL4', ('ul4',), ('*.ul4',), ()), - 'UcodeLexer': ('pip._vendor.pygments.lexers.unicon', 'ucode', ('ucode',), ('*.u', '*.u1', '*.u2'), ()), - 'UniconLexer': ('pip._vendor.pygments.lexers.unicon', 'Unicon', ('unicon',), ('*.icn',), ('text/unicon',)), - 'UnixConfigLexer': ('pip._vendor.pygments.lexers.configs', 'Unix/Linux config files', ('unixconfig', 'linuxconfig'), (), ()), - 'UrbiscriptLexer': ('pip._vendor.pygments.lexers.urbi', 'UrbiScript', ('urbiscript',), ('*.u',), ('application/x-urbiscript',)), - 'UrlEncodedLexer': ('pip._vendor.pygments.lexers.html', 'urlencoded', ('urlencoded',), (), ('application/x-www-form-urlencoded',)), - 'UsdLexer': ('pip._vendor.pygments.lexers.usd', 'USD', ('usd', 'usda'), ('*.usd', '*.usda'), ()), - 'VBScriptLexer': ('pip._vendor.pygments.lexers.basic', 'VBScript', ('vbscript',), ('*.vbs', '*.VBS'), ()), - 'VCLLexer': ('pip._vendor.pygments.lexers.varnish', 'VCL', ('vcl',), ('*.vcl',), ('text/x-vclsrc',)), - 'VCLSnippetLexer': ('pip._vendor.pygments.lexers.varnish', 'VCLSnippets', ('vclsnippets', 'vclsnippet'), (), ('text/x-vclsnippet',)), - 'VCTreeStatusLexer': ('pip._vendor.pygments.lexers.console', 'VCTreeStatus', ('vctreestatus',), (), ()), - 'VGLLexer': ('pip._vendor.pygments.lexers.dsls', 'VGL', ('vgl',), ('*.rpf',), ()), - 'ValaLexer': ('pip._vendor.pygments.lexers.c_like', 'Vala', ('vala', 'vapi'), ('*.vala', '*.vapi'), ('text/x-vala',)), - 'VbNetAspxLexer': ('pip._vendor.pygments.lexers.dotnet', 'aspx-vb', ('aspx-vb',), ('*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd'), ()), - 'VbNetLexer': ('pip._vendor.pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet', 'lobas', 'oobas', 'sobas', 'visual-basic', 'visualbasic'), ('*.vb', '*.bas'), ('text/x-vbnet', 'text/x-vba')), - 'VelocityHtmlLexer': ('pip._vendor.pygments.lexers.templates', 'HTML+Velocity', ('html+velocity',), (), ('text/html+velocity',)), - 'VelocityLexer': ('pip._vendor.pygments.lexers.templates', 'Velocity', ('velocity',), ('*.vm', '*.fhtml'), ()), - 'VelocityXmlLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Velocity', ('xml+velocity',), (), ('application/xml+velocity',)), - 'VerifpalLexer': ('pip._vendor.pygments.lexers.verifpal', 'Verifpal', ('verifpal',), ('*.vp',), ('text/x-verifpal',)), - 'VerilogLexer': ('pip._vendor.pygments.lexers.hdl', 'verilog', ('verilog', 'v'), ('*.v',), ('text/x-verilog',)), - 'VhdlLexer': ('pip._vendor.pygments.lexers.hdl', 'vhdl', ('vhdl',), ('*.vhdl', '*.vhd'), ('text/x-vhdl',)), - 'VimLexer': ('pip._vendor.pygments.lexers.textedit', 'VimL', ('vim',), ('*.vim', '.vimrc', '.exrc', '.gvimrc', '_vimrc', '_exrc', '_gvimrc', 'vimrc', 'gvimrc'), ('text/x-vim',)), - 'VisualPrologGrammarLexer': ('pip._vendor.pygments.lexers.vip', 'Visual Prolog Grammar', ('visualprologgrammar',), ('*.vipgrm',), ()), - 'VisualPrologLexer': ('pip._vendor.pygments.lexers.vip', 'Visual Prolog', ('visualprolog',), ('*.pro', '*.cl', '*.i', '*.pack', '*.ph'), ()), - 'VueLexer': ('pip._vendor.pygments.lexers.html', 'Vue', ('vue',), ('*.vue',), ()), - 'VyperLexer': ('pip._vendor.pygments.lexers.vyper', 'Vyper', ('vyper',), ('*.vy',), ()), - 'WDiffLexer': ('pip._vendor.pygments.lexers.diff', 'WDiff', ('wdiff',), ('*.wdiff',), ()), - 'WatLexer': ('pip._vendor.pygments.lexers.webassembly', 'WebAssembly', ('wast', 'wat'), ('*.wat', '*.wast'), ()), - 'WebIDLLexer': ('pip._vendor.pygments.lexers.webidl', 'Web IDL', ('webidl',), ('*.webidl',), ()), - 'WgslLexer': ('pip._vendor.pygments.lexers.wgsl', 'WebGPU Shading Language', ('wgsl',), ('*.wgsl',), ('text/wgsl',)), - 'WhileyLexer': ('pip._vendor.pygments.lexers.whiley', 'Whiley', ('whiley',), ('*.whiley',), ('text/x-whiley',)), - 'WikitextLexer': ('pip._vendor.pygments.lexers.markup', 'Wikitext', ('wikitext', 'mediawiki'), (), ('text/x-wiki',)), - 'WoWTocLexer': ('pip._vendor.pygments.lexers.wowtoc', 'World of Warcraft TOC', ('wowtoc',), ('*.toc',), ()), - 'WrenLexer': ('pip._vendor.pygments.lexers.wren', 'Wren', ('wren',), ('*.wren',), ()), - 'X10Lexer': ('pip._vendor.pygments.lexers.x10', 'X10', ('x10', 'xten'), ('*.x10',), ('text/x-x10',)), - 'XMLUL4Lexer': ('pip._vendor.pygments.lexers.ul4', 'XML+UL4', ('xml+ul4',), ('*.xmlul4',), ()), - 'XQueryLexer': ('pip._vendor.pygments.lexers.webmisc', 'XQuery', ('xquery', 'xqy', 'xq', 'xql', 'xqm'), ('*.xqy', '*.xquery', '*.xq', '*.xql', '*.xqm'), ('text/xquery', 'application/xquery')), - 'XmlDjangoLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Django/Jinja', ('xml+django', 'xml+jinja'), ('*.xml.j2', '*.xml.jinja2'), ('application/xml+django', 'application/xml+jinja')), - 'XmlErbLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Ruby', ('xml+ruby', 'xml+erb'), (), ('application/xml+ruby',)), - 'XmlLexer': ('pip._vendor.pygments.lexers.html', 'XML', ('xml',), ('*.xml', '*.xsl', '*.rss', '*.xslt', '*.xsd', '*.wsdl', '*.wsf'), ('text/xml', 'application/xml', 'image/svg+xml', 'application/rss+xml', 'application/atom+xml')), - 'XmlPhpLexer': ('pip._vendor.pygments.lexers.templates', 'XML+PHP', ('xml+php',), (), ('application/xml+php',)), - 'XmlSmartyLexer': ('pip._vendor.pygments.lexers.templates', 'XML+Smarty', ('xml+smarty',), (), ('application/xml+smarty',)), - 'XorgLexer': ('pip._vendor.pygments.lexers.xorg', 'Xorg', ('xorg.conf',), ('xorg.conf',), ()), - 'XppLexer': ('pip._vendor.pygments.lexers.dotnet', 'X++', ('xpp', 'x++'), ('*.xpp',), ()), - 'XsltLexer': ('pip._vendor.pygments.lexers.html', 'XSLT', ('xslt',), ('*.xsl', '*.xslt', '*.xpl'), ('application/xsl+xml', 'application/xslt+xml')), - 'XtendLexer': ('pip._vendor.pygments.lexers.jvm', 'Xtend', ('xtend',), ('*.xtend',), ('text/x-xtend',)), - 'XtlangLexer': ('pip._vendor.pygments.lexers.lisp', 'xtlang', ('extempore',), ('*.xtm',), ()), - 'YamlJinjaLexer': ('pip._vendor.pygments.lexers.templates', 'YAML+Jinja', ('yaml+jinja', 'salt', 'sls'), ('*.sls', '*.yaml.j2', '*.yml.j2', '*.yaml.jinja2', '*.yml.jinja2'), ('text/x-yaml+jinja', 'text/x-sls')), - 'YamlLexer': ('pip._vendor.pygments.lexers.data', 'YAML', ('yaml',), ('*.yaml', '*.yml'), ('text/x-yaml',)), - 'YangLexer': ('pip._vendor.pygments.lexers.yang', 'YANG', ('yang',), ('*.yang',), ('application/yang',)), - 'YaraLexer': ('pip._vendor.pygments.lexers.yara', 'YARA', ('yara', 'yar'), ('*.yar',), ('text/x-yara',)), - 'ZeekLexer': ('pip._vendor.pygments.lexers.dsls', 'Zeek', ('zeek', 'bro'), ('*.zeek', '*.bro'), ()), - 'ZephirLexer': ('pip._vendor.pygments.lexers.php', 'Zephir', ('zephir',), ('*.zep',), ()), - 'ZigLexer': ('pip._vendor.pygments.lexers.zig', 'Zig', ('zig',), ('*.zig',), ('text/zig',)), - 'apdlexer': ('pip._vendor.pygments.lexers.apdlexer', 'ANSYS parametric design language', ('ansys', 'apdl'), ('*.ans',), ()), -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/python.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/python.py deleted file mode 100644 index 1b7882961..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +++ /dev/null @@ -1,1201 +0,0 @@ -""" - pygments.lexers.python - ~~~~~~~~~~~~~~~~~~~~~~ - - Lexers for Python and related languages. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import keyword - -from pip._vendor.pygments.lexer import DelegatingLexer, RegexLexer, include, \ - bygroups, using, default, words, combined, this -from pip._vendor.pygments.util import get_bool_opt, shebang_matches -from pip._vendor.pygments.token import Text, Comment, Operator, Keyword, Name, String, \ - Number, Punctuation, Generic, Other, Error, Whitespace -from pip._vendor.pygments import unistring as uni - -__all__ = ['PythonLexer', 'PythonConsoleLexer', 'PythonTracebackLexer', - 'Python2Lexer', 'Python2TracebackLexer', - 'CythonLexer', 'DgLexer', 'NumPyLexer'] - - -class PythonLexer(RegexLexer): - """ - For Python source code (version 3.x). - - .. versionchanged:: 2.5 - This is now the default ``PythonLexer``. It is still available as the - alias ``Python3Lexer``. - """ - - name = 'Python' - url = 'https://www.python.org' - aliases = ['python', 'py', 'sage', 'python3', 'py3', 'bazel', 'starlark', 'pyi'] - filenames = [ - '*.py', - '*.pyw', - # Type stubs - '*.pyi', - # Jython - '*.jy', - # Sage - '*.sage', - # SCons - '*.sc', - 'SConstruct', - 'SConscript', - # Skylark/Starlark (used by Bazel, Buck, and Pants) - '*.bzl', - 'BUCK', - 'BUILD', - 'BUILD.bazel', - 'WORKSPACE', - # Twisted Application infrastructure - '*.tac', - ] - mimetypes = ['text/x-python', 'application/x-python', - 'text/x-python3', 'application/x-python3'] - version_added = '0.10' - - uni_name = f"[{uni.xid_start}][{uni.xid_continue}]*" - - def innerstring_rules(ttype): - return [ - # the old style '%s' % (...) string formatting (still valid in Py3) - (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' - '[hlL]?[E-GXc-giorsaux%]', String.Interpol), - # the new style '{}'.format(...) string formatting - (r'\{' - r'((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name - r'(\![sra])?' # conversion - r'(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?' - r'\}', String.Interpol), - - # backslashes, quotes and formatting signs must be parsed one at a time - (r'[^\\\'"%{\n]+', ttype), - (r'[\'"\\]', ttype), - # unhandled string formatting sign - (r'%|(\{{1,2})', ttype) - # newlines are an error (use "nl" state) - ] - - def fstring_rules(ttype): - return [ - # Assuming that a '}' is the closing brace after format specifier. - # Sadly, this means that we won't detect syntax error. But it's - # more important to parse correct syntax correctly, than to - # highlight invalid syntax. - (r'\}', String.Interpol), - (r'\{', String.Interpol, 'expr-inside-fstring'), - # backslashes, quotes and formatting signs must be parsed one at a time - (r'[^\\\'"{}\n]+', ttype), - (r'[\'"\\]', ttype), - # newlines are an error (use "nl" state) - ] - - tokens = { - 'root': [ - (r'\n', Whitespace), - (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")', - bygroups(Whitespace, String.Affix, String.Doc)), - (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')", - bygroups(Whitespace, String.Affix, String.Doc)), - (r'\A#!.+$', Comment.Hashbang), - (r'#.*$', Comment.Single), - (r'\\\n', Text), - (r'\\', Text), - include('keywords'), - include('soft-keywords'), - (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Whitespace), 'funcname'), - (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Whitespace), 'classname'), - (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Whitespace), - 'fromimport'), - (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Whitespace), - 'import'), - include('expr'), - ], - 'expr': [ - # raw f-strings - ('(?i)(rf|fr)(""")', - bygroups(String.Affix, String.Double), - combined('rfstringescape', 'tdqf')), - ("(?i)(rf|fr)(''')", - bygroups(String.Affix, String.Single), - combined('rfstringescape', 'tsqf')), - ('(?i)(rf|fr)(")', - bygroups(String.Affix, String.Double), - combined('rfstringescape', 'dqf')), - ("(?i)(rf|fr)(')", - bygroups(String.Affix, String.Single), - combined('rfstringescape', 'sqf')), - # non-raw f-strings - ('([fF])(""")', bygroups(String.Affix, String.Double), - combined('fstringescape', 'tdqf')), - ("([fF])(''')", bygroups(String.Affix, String.Single), - combined('fstringescape', 'tsqf')), - ('([fF])(")', bygroups(String.Affix, String.Double), - combined('fstringescape', 'dqf')), - ("([fF])(')", bygroups(String.Affix, String.Single), - combined('fstringescape', 'sqf')), - # raw bytes and strings - ('(?i)(rb|br|r)(""")', - bygroups(String.Affix, String.Double), 'tdqs'), - ("(?i)(rb|br|r)(''')", - bygroups(String.Affix, String.Single), 'tsqs'), - ('(?i)(rb|br|r)(")', - bygroups(String.Affix, String.Double), 'dqs'), - ("(?i)(rb|br|r)(')", - bygroups(String.Affix, String.Single), 'sqs'), - # non-raw strings - ('([uU]?)(""")', bygroups(String.Affix, String.Double), - combined('stringescape', 'tdqs')), - ("([uU]?)(''')", bygroups(String.Affix, String.Single), - combined('stringescape', 'tsqs')), - ('([uU]?)(")', bygroups(String.Affix, String.Double), - combined('stringescape', 'dqs')), - ("([uU]?)(')", bygroups(String.Affix, String.Single), - combined('stringescape', 'sqs')), - # non-raw bytes - ('([bB])(""")', bygroups(String.Affix, String.Double), - combined('bytesescape', 'tdqs')), - ("([bB])(''')", bygroups(String.Affix, String.Single), - combined('bytesescape', 'tsqs')), - ('([bB])(")', bygroups(String.Affix, String.Double), - combined('bytesescape', 'dqs')), - ("([bB])(')", bygroups(String.Affix, String.Single), - combined('bytesescape', 'sqs')), - - (r'[^\S\n]+', Text), - include('numbers'), - (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator), - (r'[]{}:(),;[]', Punctuation), - (r'(in|is|and|or|not)\b', Operator.Word), - include('expr-keywords'), - include('builtins'), - include('magicfuncs'), - include('magicvars'), - include('name'), - ], - 'expr-inside-fstring': [ - (r'[{([]', Punctuation, 'expr-inside-fstring-inner'), - # without format specifier - (r'(=\s*)?' # debug (https://bugs.python.org/issue36817) - r'(\![sraf])?' # conversion - r'\}', String.Interpol, '#pop'), - # with format specifier - # we'll catch the remaining '}' in the outer scope - (r'(=\s*)?' # debug (https://bugs.python.org/issue36817) - r'(\![sraf])?' # conversion - r':', String.Interpol, '#pop'), - (r'\s+', Whitespace), # allow new lines - include('expr'), - ], - 'expr-inside-fstring-inner': [ - (r'[{([]', Punctuation, 'expr-inside-fstring-inner'), - (r'[])}]', Punctuation, '#pop'), - (r'\s+', Whitespace), # allow new lines - include('expr'), - ], - 'expr-keywords': [ - # Based on https://docs.python.org/3/reference/expressions.html - (words(( - 'async for', 'await', 'else', 'for', 'if', 'lambda', - 'yield', 'yield from'), suffix=r'\b'), - Keyword), - (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant), - ], - 'keywords': [ - (words(( - 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif', - 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda', - 'pass', 'raise', 'nonlocal', 'return', 'try', 'while', 'yield', - 'yield from', 'as', 'with'), suffix=r'\b'), - Keyword), - (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant), - ], - 'soft-keywords': [ - # `match`, `case` and `_` soft keywords - (r'(^[ \t]*)' # at beginning of line + possible indentation - r'(match|case)\b' # a possible keyword - r'(?![ \t]*(?:' # not followed by... - r'[:,;=^&|@~)\]}]|(?:' + # characters and keywords that mean this isn't - # pattern matching (but None/True/False is ok) - r'|'.join(k for k in keyword.kwlist if k[0].islower()) + r')\b))', - bygroups(Text, Keyword), 'soft-keywords-inner'), - ], - 'soft-keywords-inner': [ - # optional `_` keyword - (r'(\s+)([^\n_]*)(_\b)', bygroups(Whitespace, using(this), Keyword)), - default('#pop') - ], - 'builtins': [ - (words(( - '__import__', 'abs', 'aiter', 'all', 'any', 'bin', 'bool', 'bytearray', - 'breakpoint', 'bytes', 'callable', 'chr', 'classmethod', 'compile', - 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', - 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', - 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'isinstance', - 'issubclass', 'iter', 'len', 'list', 'locals', 'map', 'max', - 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', - 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', - 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', - 'tuple', 'type', 'vars', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'), - Name.Builtin), - (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo), - (words(( - 'ArithmeticError', 'AssertionError', 'AttributeError', - 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', - 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', - 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', - 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', - 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', - 'NotImplementedError', 'OSError', 'OverflowError', - 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning', - 'RuntimeError', 'RuntimeWarning', 'StopIteration', - 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', - 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', - 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', - 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', - 'Warning', 'WindowsError', 'ZeroDivisionError', - # new builtin exceptions from PEP 3151 - 'BlockingIOError', 'ChildProcessError', 'ConnectionError', - 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError', - 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError', - 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError', - 'PermissionError', 'ProcessLookupError', 'TimeoutError', - # others new in Python 3 - 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError', - 'EncodingWarning'), - prefix=r'(?<!\.)', suffix=r'\b'), - Name.Exception), - ], - 'magicfuncs': [ - (words(( - '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__', - '__and__', '__anext__', '__await__', '__bool__', '__bytes__', - '__call__', '__complex__', '__contains__', '__del__', '__delattr__', - '__delete__', '__delitem__', '__dir__', '__divmod__', '__enter__', - '__eq__', '__exit__', '__float__', '__floordiv__', '__format__', - '__ge__', '__get__', '__getattr__', '__getattribute__', - '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__', - '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__', - '__imul__', '__index__', '__init__', '__instancecheck__', - '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__', - '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__', - '__len__', '__length_hint__', '__lshift__', '__lt__', '__matmul__', - '__missing__', '__mod__', '__mul__', '__ne__', '__neg__', - '__new__', '__next__', '__or__', '__pos__', '__pow__', - '__prepare__', '__radd__', '__rand__', '__rdivmod__', '__repr__', - '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__', - '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', - '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', - '__rxor__', '__set__', '__setattr__', '__setitem__', '__str__', - '__sub__', '__subclasscheck__', '__truediv__', - '__xor__'), suffix=r'\b'), - Name.Function.Magic), - ], - 'magicvars': [ - (words(( - '__annotations__', '__bases__', '__class__', '__closure__', - '__code__', '__defaults__', '__dict__', '__doc__', '__file__', - '__func__', '__globals__', '__kwdefaults__', '__module__', - '__mro__', '__name__', '__objclass__', '__qualname__', - '__self__', '__slots__', '__weakref__'), suffix=r'\b'), - Name.Variable.Magic), - ], - 'numbers': [ - (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)' - r'([eE][+-]?\d(?:_?\d)*)?', Number.Float), - (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float), - (r'0[oO](?:_?[0-7])+', Number.Oct), - (r'0[bB](?:_?[01])+', Number.Bin), - (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex), - (r'\d(?:_?\d)*', Number.Integer), - ], - 'name': [ - (r'@' + uni_name, Name.Decorator), - (r'@', Operator), # new matrix multiplication operator - (uni_name, Name), - ], - 'funcname': [ - include('magicfuncs'), - (uni_name, Name.Function, '#pop'), - default('#pop'), - ], - 'classname': [ - (uni_name, Name.Class, '#pop'), - ], - 'import': [ - (r'(\s+)(as)(\s+)', bygroups(Whitespace, Keyword, Whitespace)), - (r'\.', Name.Namespace), - (uni_name, Name.Namespace), - (r'(\s*)(,)(\s*)', bygroups(Whitespace, Operator, Whitespace)), - default('#pop') # all else: go back - ], - 'fromimport': [ - (r'(\s+)(import)\b', bygroups(Whitespace, Keyword.Namespace), '#pop'), - (r'\.', Name.Namespace), - # if None occurs here, it's "raise x from None", since None can - # never be a module name - (r'None\b', Keyword.Constant, '#pop'), - (uni_name, Name.Namespace), - default('#pop'), - ], - 'rfstringescape': [ - (r'\{\{', String.Escape), - (r'\}\}', String.Escape), - ], - 'fstringescape': [ - include('rfstringescape'), - include('stringescape'), - ], - 'bytesescape': [ - (r'\\([\\abfnrtv"\']|\n|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape) - ], - 'stringescape': [ - (r'\\(N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})', String.Escape), - include('bytesescape') - ], - 'fstrings-single': fstring_rules(String.Single), - 'fstrings-double': fstring_rules(String.Double), - 'strings-single': innerstring_rules(String.Single), - 'strings-double': innerstring_rules(String.Double), - 'dqf': [ - (r'"', String.Double, '#pop'), - (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings - include('fstrings-double') - ], - 'sqf': [ - (r"'", String.Single, '#pop'), - (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings - include('fstrings-single') - ], - 'dqs': [ - (r'"', String.Double, '#pop'), - (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings - include('strings-double') - ], - 'sqs': [ - (r"'", String.Single, '#pop'), - (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings - include('strings-single') - ], - 'tdqf': [ - (r'"""', String.Double, '#pop'), - include('fstrings-double'), - (r'\n', String.Double) - ], - 'tsqf': [ - (r"'''", String.Single, '#pop'), - include('fstrings-single'), - (r'\n', String.Single) - ], - 'tdqs': [ - (r'"""', String.Double, '#pop'), - include('strings-double'), - (r'\n', String.Double) - ], - 'tsqs': [ - (r"'''", String.Single, '#pop'), - include('strings-single'), - (r'\n', String.Single) - ], - } - - def analyse_text(text): - return shebang_matches(text, r'pythonw?(3(\.\d)?)?') or \ - 'import ' in text[:1000] - - -Python3Lexer = PythonLexer - - -class Python2Lexer(RegexLexer): - """ - For Python 2.x source code. - - .. versionchanged:: 2.5 - This class has been renamed from ``PythonLexer``. ``PythonLexer`` now - refers to the Python 3 variant. File name patterns like ``*.py`` have - been moved to Python 3 as well. - """ - - name = 'Python 2.x' - url = 'https://www.python.org' - aliases = ['python2', 'py2'] - filenames = [] # now taken over by PythonLexer (3.x) - mimetypes = ['text/x-python2', 'application/x-python2'] - version_added = '' - - def innerstring_rules(ttype): - return [ - # the old style '%s' % (...) string formatting - (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' - '[hlL]?[E-GXc-giorsux%]', String.Interpol), - # backslashes, quotes and formatting signs must be parsed one at a time - (r'[^\\\'"%\n]+', ttype), - (r'[\'"\\]', ttype), - # unhandled string formatting sign - (r'%', ttype), - # newlines are an error (use "nl" state) - ] - - tokens = { - 'root': [ - (r'\n', Whitespace), - (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")', - bygroups(Whitespace, String.Affix, String.Doc)), - (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')", - bygroups(Whitespace, String.Affix, String.Doc)), - (r'[^\S\n]+', Text), - (r'\A#!.+$', Comment.Hashbang), - (r'#.*$', Comment.Single), - (r'[]{}:(),;[]', Punctuation), - (r'\\\n', Text), - (r'\\', Text), - (r'(in|is|and|or|not)\b', Operator.Word), - (r'!=|==|<<|>>|[-~+/*%=<>&^|.]', Operator), - include('keywords'), - (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Whitespace), 'funcname'), - (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Whitespace), 'classname'), - (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Whitespace), - 'fromimport'), - (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Whitespace), - 'import'), - include('builtins'), - include('magicfuncs'), - include('magicvars'), - include('backtick'), - ('([rR]|[uUbB][rR]|[rR][uUbB])(""")', - bygroups(String.Affix, String.Double), 'tdqs'), - ("([rR]|[uUbB][rR]|[rR][uUbB])(''')", - bygroups(String.Affix, String.Single), 'tsqs'), - ('([rR]|[uUbB][rR]|[rR][uUbB])(")', - bygroups(String.Affix, String.Double), 'dqs'), - ("([rR]|[uUbB][rR]|[rR][uUbB])(')", - bygroups(String.Affix, String.Single), 'sqs'), - ('([uUbB]?)(""")', bygroups(String.Affix, String.Double), - combined('stringescape', 'tdqs')), - ("([uUbB]?)(''')", bygroups(String.Affix, String.Single), - combined('stringescape', 'tsqs')), - ('([uUbB]?)(")', bygroups(String.Affix, String.Double), - combined('stringescape', 'dqs')), - ("([uUbB]?)(')", bygroups(String.Affix, String.Single), - combined('stringescape', 'sqs')), - include('name'), - include('numbers'), - ], - 'keywords': [ - (words(( - 'assert', 'break', 'continue', 'del', 'elif', 'else', 'except', - 'exec', 'finally', 'for', 'global', 'if', 'lambda', 'pass', - 'print', 'raise', 'return', 'try', 'while', 'yield', - 'yield from', 'as', 'with'), suffix=r'\b'), - Keyword), - ], - 'builtins': [ - (words(( - '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', - 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', - 'cmp', 'coerce', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', - 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', - 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'hex', 'id', - 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', - 'list', 'locals', 'long', 'map', 'max', 'min', 'next', 'object', - 'oct', 'open', 'ord', 'pow', 'property', 'range', 'raw_input', 'reduce', - 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', - 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', - 'unichr', 'unicode', 'vars', 'xrange', 'zip'), - prefix=r'(?<!\.)', suffix=r'\b'), - Name.Builtin), - (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|cls' - r')\b', Name.Builtin.Pseudo), - (words(( - 'ArithmeticError', 'AssertionError', 'AttributeError', - 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError', - 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', - 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', - 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', - 'MemoryError', 'NameError', - 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning', - 'PendingDeprecationWarning', 'ReferenceError', - 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', - 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', - 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', - 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', - 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning', - 'WindowsError', 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'), - Name.Exception), - ], - 'magicfuncs': [ - (words(( - '__abs__', '__add__', '__and__', '__call__', '__cmp__', '__coerce__', - '__complex__', '__contains__', '__del__', '__delattr__', '__delete__', - '__delitem__', '__delslice__', '__div__', '__divmod__', '__enter__', - '__eq__', '__exit__', '__float__', '__floordiv__', '__ge__', '__get__', - '__getattr__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', - '__hash__', '__hex__', '__iadd__', '__iand__', '__idiv__', '__ifloordiv__', - '__ilshift__', '__imod__', '__imul__', '__index__', '__init__', - '__instancecheck__', '__int__', '__invert__', '__iop__', '__ior__', - '__ipow__', '__irshift__', '__isub__', '__iter__', '__itruediv__', - '__ixor__', '__le__', '__len__', '__long__', '__lshift__', '__lt__', - '__missing__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', - '__nonzero__', '__oct__', '__op__', '__or__', '__pos__', '__pow__', - '__radd__', '__rand__', '__rcmp__', '__rdiv__', '__rdivmod__', '__repr__', - '__reversed__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', - '__rop__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', - '__rtruediv__', '__rxor__', '__set__', '__setattr__', '__setitem__', - '__setslice__', '__str__', '__sub__', '__subclasscheck__', '__truediv__', - '__unicode__', '__xor__'), suffix=r'\b'), - Name.Function.Magic), - ], - 'magicvars': [ - (words(( - '__bases__', '__class__', '__closure__', '__code__', '__defaults__', - '__dict__', '__doc__', '__file__', '__func__', '__globals__', - '__metaclass__', '__module__', '__mro__', '__name__', '__self__', - '__slots__', '__weakref__'), - suffix=r'\b'), - Name.Variable.Magic), - ], - 'numbers': [ - (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float), - (r'\d+[eE][+-]?[0-9]+j?', Number.Float), - (r'0[0-7]+j?', Number.Oct), - (r'0[bB][01]+', Number.Bin), - (r'0[xX][a-fA-F0-9]+', Number.Hex), - (r'\d+L', Number.Integer.Long), - (r'\d+j?', Number.Integer) - ], - 'backtick': [ - ('`.*?`', String.Backtick), - ], - 'name': [ - (r'@[\w.]+', Name.Decorator), - (r'[a-zA-Z_]\w*', Name), - ], - 'funcname': [ - include('magicfuncs'), - (r'[a-zA-Z_]\w*', Name.Function, '#pop'), - default('#pop'), - ], - 'classname': [ - (r'[a-zA-Z_]\w*', Name.Class, '#pop') - ], - 'import': [ - (r'(?:[ \t]|\\\n)+', Text), - (r'as\b', Keyword.Namespace), - (r',', Operator), - (r'[a-zA-Z_][\w.]*', Name.Namespace), - default('#pop') # all else: go back - ], - 'fromimport': [ - (r'(?:[ \t]|\\\n)+', Text), - (r'import\b', Keyword.Namespace, '#pop'), - # if None occurs here, it's "raise x from None", since None can - # never be a module name - (r'None\b', Name.Builtin.Pseudo, '#pop'), - # sadly, in "raise x from y" y will be highlighted as namespace too - (r'[a-zA-Z_.][\w.]*', Name.Namespace), - # anything else here also means "raise x from y" and is therefore - # not an error - default('#pop'), - ], - 'stringescape': [ - (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|' - r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape) - ], - 'strings-single': innerstring_rules(String.Single), - 'strings-double': innerstring_rules(String.Double), - 'dqs': [ - (r'"', String.Double, '#pop'), - (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings - include('strings-double') - ], - 'sqs': [ - (r"'", String.Single, '#pop'), - (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings - include('strings-single') - ], - 'tdqs': [ - (r'"""', String.Double, '#pop'), - include('strings-double'), - (r'\n', String.Double) - ], - 'tsqs': [ - (r"'''", String.Single, '#pop'), - include('strings-single'), - (r'\n', String.Single) - ], - } - - def analyse_text(text): - return shebang_matches(text, r'pythonw?2(\.\d)?') - - -class _PythonConsoleLexerBase(RegexLexer): - name = 'Python console session' - aliases = ['pycon', 'python-console'] - mimetypes = ['text/x-python-doctest'] - - """Auxiliary lexer for `PythonConsoleLexer`. - - Code tokens are output as ``Token.Other.Code``, traceback tokens as - ``Token.Other.Traceback``. - """ - tokens = { - 'root': [ - (r'(>>> )(.*\n)', bygroups(Generic.Prompt, Other.Code), 'continuations'), - # This happens, e.g., when tracebacks are embedded in documentation; - # trailing whitespaces are often stripped in such contexts. - (r'(>>>)(\n)', bygroups(Generic.Prompt, Whitespace)), - (r'(\^C)?Traceback \(most recent call last\):\n', Other.Traceback, 'traceback'), - # SyntaxError starts with this - (r' File "[^"]+", line \d+', Other.Traceback, 'traceback'), - (r'.*\n', Generic.Output), - ], - 'continuations': [ - (r'(\.\.\. )(.*\n)', bygroups(Generic.Prompt, Other.Code)), - # See above. - (r'(\.\.\.)(\n)', bygroups(Generic.Prompt, Whitespace)), - default('#pop'), - ], - 'traceback': [ - # As soon as we see a traceback, consume everything until the next - # >>> prompt. - (r'(?=>>>( |$))', Text, '#pop'), - (r'(KeyboardInterrupt)(\n)', bygroups(Name.Class, Whitespace)), - (r'.*\n', Other.Traceback), - ], - } - - -class PythonConsoleLexer(DelegatingLexer): - """ - For Python console output or doctests, such as: - - .. sourcecode:: pycon - - >>> a = 'foo' - >>> print(a) - foo - >>> 1 / 0 - Traceback (most recent call last): - File "<stdin>", line 1, in <module> - ZeroDivisionError: integer division or modulo by zero - - Additional options: - - `python3` - Use Python 3 lexer for code. Default is ``True``. - - .. versionadded:: 1.0 - .. versionchanged:: 2.5 - Now defaults to ``True``. - """ - - name = 'Python console session' - aliases = ['pycon', 'python-console'] - mimetypes = ['text/x-python-doctest'] - url = 'https://python.org' - version_added = '' - - def __init__(self, **options): - python3 = get_bool_opt(options, 'python3', True) - if python3: - pylexer = PythonLexer - tblexer = PythonTracebackLexer - else: - pylexer = Python2Lexer - tblexer = Python2TracebackLexer - # We have two auxiliary lexers. Use DelegatingLexer twice with - # different tokens. TODO: DelegatingLexer should support this - # directly, by accepting a tuplet of auxiliary lexers and a tuple of - # distinguishing tokens. Then we wouldn't need this intermediary - # class. - class _ReplaceInnerCode(DelegatingLexer): - def __init__(self, **options): - super().__init__(pylexer, _PythonConsoleLexerBase, Other.Code, **options) - super().__init__(tblexer, _ReplaceInnerCode, Other.Traceback, **options) - - -class PythonTracebackLexer(RegexLexer): - """ - For Python 3.x tracebacks, with support for chained exceptions. - - .. versionchanged:: 2.5 - This is now the default ``PythonTracebackLexer``. It is still available - as the alias ``Python3TracebackLexer``. - """ - - name = 'Python Traceback' - aliases = ['pytb', 'py3tb'] - filenames = ['*.pytb', '*.py3tb'] - mimetypes = ['text/x-python-traceback', 'text/x-python3-traceback'] - url = 'https://python.org' - version_added = '1.0' - - tokens = { - 'root': [ - (r'\n', Whitespace), - (r'^(\^C)?Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'), - (r'^During handling of the above exception, another ' - r'exception occurred:\n\n', Generic.Traceback), - (r'^The above exception was the direct cause of the ' - r'following exception:\n\n', Generic.Traceback), - (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'), - (r'^.*\n', Other), - ], - 'intb': [ - (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)', - bygroups(Text, Name.Builtin, Text, Number, Text, Name, Whitespace)), - (r'^( File )("[^"]+")(, line )(\d+)(\n)', - bygroups(Text, Name.Builtin, Text, Number, Whitespace)), - (r'^( )(.+)(\n)', - bygroups(Whitespace, using(PythonLexer), Whitespace), 'markers'), - (r'^([ \t]*)(\.\.\.)(\n)', - bygroups(Whitespace, Comment, Whitespace)), # for doctests... - (r'^([^:]+)(: )(.+)(\n)', - bygroups(Generic.Error, Text, Name, Whitespace), '#pop'), - (r'^([a-zA-Z_][\w.]*)(:?\n)', - bygroups(Generic.Error, Whitespace), '#pop'), - default('#pop'), - ], - 'markers': [ - # Either `PEP 657 <https://www.python.org/dev/peps/pep-0657/>` - # error locations in Python 3.11+, or single-caret markers - # for syntax errors before that. - (r'^( {4,})([~^]+)(\n)', - bygroups(Whitespace, Punctuation.Marker, Whitespace), - '#pop'), - default('#pop'), - ], - } - - -Python3TracebackLexer = PythonTracebackLexer - - -class Python2TracebackLexer(RegexLexer): - """ - For Python tracebacks. - - .. versionchanged:: 2.5 - This class has been renamed from ``PythonTracebackLexer``. - ``PythonTracebackLexer`` now refers to the Python 3 variant. - """ - - name = 'Python 2.x Traceback' - aliases = ['py2tb'] - filenames = ['*.py2tb'] - mimetypes = ['text/x-python2-traceback'] - url = 'https://python.org' - version_added = '0.7' - - tokens = { - 'root': [ - # Cover both (most recent call last) and (innermost last) - # The optional ^C allows us to catch keyboard interrupt signals. - (r'^(\^C)?(Traceback.*\n)', - bygroups(Text, Generic.Traceback), 'intb'), - # SyntaxError starts with this. - (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'), - (r'^.*\n', Other), - ], - 'intb': [ - (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)', - bygroups(Text, Name.Builtin, Text, Number, Text, Name, Whitespace)), - (r'^( File )("[^"]+")(, line )(\d+)(\n)', - bygroups(Text, Name.Builtin, Text, Number, Whitespace)), - (r'^( )(.+)(\n)', - bygroups(Text, using(Python2Lexer), Whitespace), 'marker'), - (r'^([ \t]*)(\.\.\.)(\n)', - bygroups(Text, Comment, Whitespace)), # for doctests... - (r'^([^:]+)(: )(.+)(\n)', - bygroups(Generic.Error, Text, Name, Whitespace), '#pop'), - (r'^([a-zA-Z_]\w*)(:?\n)', - bygroups(Generic.Error, Whitespace), '#pop') - ], - 'marker': [ - # For syntax errors. - (r'( {4,})(\^)', bygroups(Text, Punctuation.Marker), '#pop'), - default('#pop'), - ], - } - - -class CythonLexer(RegexLexer): - """ - For Pyrex and Cython source code. - """ - - name = 'Cython' - url = 'https://cython.org' - aliases = ['cython', 'pyx', 'pyrex'] - filenames = ['*.pyx', '*.pxd', '*.pxi'] - mimetypes = ['text/x-cython', 'application/x-cython'] - version_added = '1.1' - - tokens = { - 'root': [ - (r'\n', Whitespace), - (r'^(\s*)("""(?:.|\n)*?""")', bygroups(Whitespace, String.Doc)), - (r"^(\s*)('''(?:.|\n)*?''')", bygroups(Whitespace, String.Doc)), - (r'[^\S\n]+', Text), - (r'#.*$', Comment), - (r'[]{}:(),;[]', Punctuation), - (r'\\\n', Whitespace), - (r'\\', Text), - (r'(in|is|and|or|not)\b', Operator.Word), - (r'(<)([a-zA-Z0-9.?]+)(>)', - bygroups(Punctuation, Keyword.Type, Punctuation)), - (r'!=|==|<<|>>|[-~+/*%=<>&^|.?]', Operator), - (r'(from)(\d+)(<=)(\s+)(<)(\d+)(:)', - bygroups(Keyword, Number.Integer, Operator, Whitespace, Operator, - Name, Punctuation)), - include('keywords'), - (r'(def|property)(\s+)', bygroups(Keyword, Whitespace), 'funcname'), - (r'(cp?def)(\s+)', bygroups(Keyword, Whitespace), 'cdef'), - # (should actually start a block with only cdefs) - (r'(cdef)(:)', bygroups(Keyword, Punctuation)), - (r'(class|struct)(\s+)', bygroups(Keyword, Whitespace), 'classname'), - (r'(from)(\s+)', bygroups(Keyword, Whitespace), 'fromimport'), - (r'(c?import)(\s+)', bygroups(Keyword, Whitespace), 'import'), - include('builtins'), - include('backtick'), - ('(?:[rR]|[uU][rR]|[rR][uU])"""', String, 'tdqs'), - ("(?:[rR]|[uU][rR]|[rR][uU])'''", String, 'tsqs'), - ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'), - ("(?:[rR]|[uU][rR]|[rR][uU])'", String, 'sqs'), - ('[uU]?"""', String, combined('stringescape', 'tdqs')), - ("[uU]?'''", String, combined('stringescape', 'tsqs')), - ('[uU]?"', String, combined('stringescape', 'dqs')), - ("[uU]?'", String, combined('stringescape', 'sqs')), - include('name'), - include('numbers'), - ], - 'keywords': [ - (words(( - 'assert', 'async', 'await', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif', - 'else', 'except', 'except?', 'exec', 'finally', 'for', 'fused', 'gil', - 'global', 'if', 'include', 'lambda', 'nogil', 'pass', 'print', - 'raise', 'return', 'try', 'while', 'yield', 'as', 'with'), suffix=r'\b'), - Keyword), - (r'(DEF|IF|ELIF|ELSE)\b', Comment.Preproc), - ], - 'builtins': [ - (words(( - '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bint', - 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', - 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'delattr', - 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', - 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', - 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', - 'issubclass', 'iter', 'len', 'list', 'locals', 'long', 'map', 'max', - 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'Py_ssize_t', - 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', - 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', - 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'unsigned', - 'vars', 'xrange', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'), - Name.Builtin), - (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|NULL' - r')\b', Name.Builtin.Pseudo), - (words(( - 'ArithmeticError', 'AssertionError', 'AttributeError', - 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError', - 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', - 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', - 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', - 'MemoryError', 'NameError', 'NotImplemented', 'NotImplementedError', - 'OSError', 'OverflowError', 'OverflowWarning', - 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', - 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', - 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', - 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', - 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', - 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', - 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'), - Name.Exception), - ], - 'numbers': [ - (r'(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float), - (r'0\d+', Number.Oct), - (r'0[xX][a-fA-F0-9]+', Number.Hex), - (r'\d+L', Number.Integer.Long), - (r'\d+', Number.Integer) - ], - 'backtick': [ - ('`.*?`', String.Backtick), - ], - 'name': [ - (r'@\w+', Name.Decorator), - (r'[a-zA-Z_]\w*', Name), - ], - 'funcname': [ - (r'[a-zA-Z_]\w*', Name.Function, '#pop') - ], - 'cdef': [ - (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved), - (r'(struct|enum|union|class)\b', Keyword), - (r'([a-zA-Z_]\w*)(\s*)(?=[(:#=]|$)', - bygroups(Name.Function, Whitespace), '#pop'), - (r'([a-zA-Z_]\w*)(\s*)(,)', - bygroups(Name.Function, Whitespace, Punctuation)), - (r'from\b', Keyword, '#pop'), - (r'as\b', Keyword), - (r':', Punctuation, '#pop'), - (r'(?=["\'])', Text, '#pop'), - (r'[a-zA-Z_]\w*', Keyword.Type), - (r'.', Text), - ], - 'classname': [ - (r'[a-zA-Z_]\w*', Name.Class, '#pop') - ], - 'import': [ - (r'(\s+)(as)(\s+)', bygroups(Whitespace, Keyword, Whitespace)), - (r'[a-zA-Z_][\w.]*', Name.Namespace), - (r'(\s*)(,)(\s*)', bygroups(Whitespace, Operator, Whitespace)), - default('#pop') # all else: go back - ], - 'fromimport': [ - (r'(\s+)(c?import)\b', bygroups(Whitespace, Keyword), '#pop'), - (r'[a-zA-Z_.][\w.]*', Name.Namespace), - # ``cdef foo from "header"``, or ``for foo from 0 < i < 10`` - default('#pop'), - ], - 'stringescape': [ - (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|' - r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape) - ], - 'strings': [ - (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' - '[hlL]?[E-GXc-giorsux%]', String.Interpol), - (r'[^\\\'"%\n]+', String), - # quotes, percents and backslashes must be parsed one at a time - (r'[\'"\\]', String), - # unhandled string formatting sign - (r'%', String) - # newlines are an error (use "nl" state) - ], - 'nl': [ - (r'\n', String) - ], - 'dqs': [ - (r'"', String, '#pop'), - (r'\\\\|\\"|\\\n', String.Escape), # included here again for raw strings - include('strings') - ], - 'sqs': [ - (r"'", String, '#pop'), - (r"\\\\|\\'|\\\n", String.Escape), # included here again for raw strings - include('strings') - ], - 'tdqs': [ - (r'"""', String, '#pop'), - include('strings'), - include('nl') - ], - 'tsqs': [ - (r"'''", String, '#pop'), - include('strings'), - include('nl') - ], - } - - -class DgLexer(RegexLexer): - """ - Lexer for dg, - a functional and object-oriented programming language - running on the CPython 3 VM. - """ - name = 'dg' - aliases = ['dg'] - filenames = ['*.dg'] - mimetypes = ['text/x-dg'] - url = 'http://pyos.github.io/dg' - version_added = '1.6' - - tokens = { - 'root': [ - (r'\s+', Text), - (r'#.*?$', Comment.Single), - - (r'(?i)0b[01]+', Number.Bin), - (r'(?i)0o[0-7]+', Number.Oct), - (r'(?i)0x[0-9a-f]+', Number.Hex), - (r'(?i)[+-]?[0-9]+\.[0-9]+(e[+-]?[0-9]+)?j?', Number.Float), - (r'(?i)[+-]?[0-9]+e[+-]?\d+j?', Number.Float), - (r'(?i)[+-]?[0-9]+j?', Number.Integer), - - (r"(?i)(br|r?b?)'''", String, combined('stringescape', 'tsqs', 'string')), - (r'(?i)(br|r?b?)"""', String, combined('stringescape', 'tdqs', 'string')), - (r"(?i)(br|r?b?)'", String, combined('stringescape', 'sqs', 'string')), - (r'(?i)(br|r?b?)"', String, combined('stringescape', 'dqs', 'string')), - - (r"`\w+'*`", Operator), - (r'\b(and|in|is|or|where)\b', Operator.Word), - (r'[!$%&*+\-./:<-@\\^|~;,]+', Operator), - - (words(( - 'bool', 'bytearray', 'bytes', 'classmethod', 'complex', 'dict', 'dict\'', - 'float', 'frozenset', 'int', 'list', 'list\'', 'memoryview', 'object', - 'property', 'range', 'set', 'set\'', 'slice', 'staticmethod', 'str', - 'super', 'tuple', 'tuple\'', 'type'), - prefix=r'(?<!\.)', suffix=r'(?![\'\w])'), - Name.Builtin), - (words(( - '__import__', 'abs', 'all', 'any', 'bin', 'bind', 'chr', 'cmp', 'compile', - 'complex', 'delattr', 'dir', 'divmod', 'drop', 'dropwhile', 'enumerate', - 'eval', 'exhaust', 'filter', 'flip', 'foldl1?', 'format', 'fst', - 'getattr', 'globals', 'hasattr', 'hash', 'head', 'hex', 'id', 'init', - 'input', 'isinstance', 'issubclass', 'iter', 'iterate', 'last', 'len', - 'locals', 'map', 'max', 'min', 'next', 'oct', 'open', 'ord', 'pow', - 'print', 'repr', 'reversed', 'round', 'setattr', 'scanl1?', 'snd', - 'sorted', 'sum', 'tail', 'take', 'takewhile', 'vars', 'zip'), - prefix=r'(?<!\.)', suffix=r'(?![\'\w])'), - Name.Builtin), - (r"(?<!\.)(self|Ellipsis|NotImplemented|None|True|False)(?!['\w])", - Name.Builtin.Pseudo), - - (r"(?<!\.)[A-Z]\w*(Error|Exception|Warning)'*(?!['\w])", - Name.Exception), - (r"(?<!\.)(Exception|GeneratorExit|KeyboardInterrupt|StopIteration|" - r"SystemExit)(?!['\w])", Name.Exception), - - (r"(?<![\w.])(except|finally|for|if|import|not|otherwise|raise|" - r"subclass|while|with|yield)(?!['\w])", Keyword.Reserved), - - (r"[A-Z_]+'*(?!['\w])", Name), - (r"[A-Z]\w+'*(?!['\w])", Keyword.Type), - (r"\w+'*", Name), - - (r'[()]', Punctuation), - (r'.', Error), - ], - 'stringescape': [ - (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|' - r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape) - ], - 'string': [ - (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' - '[hlL]?[E-GXc-giorsux%]', String.Interpol), - (r'[^\\\'"%\n]+', String), - # quotes, percents and backslashes must be parsed one at a time - (r'[\'"\\]', String), - # unhandled string formatting sign - (r'%', String), - (r'\n', String) - ], - 'dqs': [ - (r'"', String, '#pop') - ], - 'sqs': [ - (r"'", String, '#pop') - ], - 'tdqs': [ - (r'"""', String, '#pop') - ], - 'tsqs': [ - (r"'''", String, '#pop') - ], - } - - -class NumPyLexer(PythonLexer): - """ - A Python lexer recognizing Numerical Python builtins. - """ - - name = 'NumPy' - url = 'https://numpy.org/' - aliases = ['numpy'] - version_added = '0.10' - - # override the mimetypes to not inherit them from python - mimetypes = [] - filenames = [] - - EXTRA_KEYWORDS = { - 'abs', 'absolute', 'accumulate', 'add', 'alen', 'all', 'allclose', - 'alltrue', 'alterdot', 'amax', 'amin', 'angle', 'any', 'append', - 'apply_along_axis', 'apply_over_axes', 'arange', 'arccos', 'arccosh', - 'arcsin', 'arcsinh', 'arctan', 'arctan2', 'arctanh', 'argmax', 'argmin', - 'argsort', 'argwhere', 'around', 'array', 'array2string', 'array_equal', - 'array_equiv', 'array_repr', 'array_split', 'array_str', 'arrayrange', - 'asanyarray', 'asarray', 'asarray_chkfinite', 'ascontiguousarray', - 'asfarray', 'asfortranarray', 'asmatrix', 'asscalar', 'astype', - 'atleast_1d', 'atleast_2d', 'atleast_3d', 'average', 'bartlett', - 'base_repr', 'beta', 'binary_repr', 'bincount', 'binomial', - 'bitwise_and', 'bitwise_not', 'bitwise_or', 'bitwise_xor', 'blackman', - 'bmat', 'broadcast', 'byte_bounds', 'bytes', 'byteswap', 'c_', - 'can_cast', 'ceil', 'choose', 'clip', 'column_stack', 'common_type', - 'compare_chararrays', 'compress', 'concatenate', 'conj', 'conjugate', - 'convolve', 'copy', 'corrcoef', 'correlate', 'cos', 'cosh', 'cov', - 'cross', 'cumprod', 'cumproduct', 'cumsum', 'delete', 'deprecate', - 'diag', 'diagflat', 'diagonal', 'diff', 'digitize', 'disp', 'divide', - 'dot', 'dsplit', 'dstack', 'dtype', 'dump', 'dumps', 'ediff1d', 'empty', - 'empty_like', 'equal', 'exp', 'expand_dims', 'expm1', 'extract', 'eye', - 'fabs', 'fastCopyAndTranspose', 'fft', 'fftfreq', 'fftshift', 'fill', - 'finfo', 'fix', 'flat', 'flatnonzero', 'flatten', 'fliplr', 'flipud', - 'floor', 'floor_divide', 'fmod', 'frexp', 'fromarrays', 'frombuffer', - 'fromfile', 'fromfunction', 'fromiter', 'frompyfunc', 'fromstring', - 'generic', 'get_array_wrap', 'get_include', 'get_numarray_include', - 'get_numpy_include', 'get_printoptions', 'getbuffer', 'getbufsize', - 'geterr', 'geterrcall', 'geterrobj', 'getfield', 'gradient', 'greater', - 'greater_equal', 'gumbel', 'hamming', 'hanning', 'histogram', - 'histogram2d', 'histogramdd', 'hsplit', 'hstack', 'hypot', 'i0', - 'identity', 'ifft', 'imag', 'index_exp', 'indices', 'inf', 'info', - 'inner', 'insert', 'int_asbuffer', 'interp', 'intersect1d', - 'intersect1d_nu', 'inv', 'invert', 'iscomplex', 'iscomplexobj', - 'isfinite', 'isfortran', 'isinf', 'isnan', 'isneginf', 'isposinf', - 'isreal', 'isrealobj', 'isscalar', 'issctype', 'issubclass_', - 'issubdtype', 'issubsctype', 'item', 'itemset', 'iterable', 'ix_', - 'kaiser', 'kron', 'ldexp', 'left_shift', 'less', 'less_equal', 'lexsort', - 'linspace', 'load', 'loads', 'loadtxt', 'log', 'log10', 'log1p', 'log2', - 'logical_and', 'logical_not', 'logical_or', 'logical_xor', 'logspace', - 'lstsq', 'mat', 'matrix', 'max', 'maximum', 'maximum_sctype', - 'may_share_memory', 'mean', 'median', 'meshgrid', 'mgrid', 'min', - 'minimum', 'mintypecode', 'mod', 'modf', 'msort', 'multiply', 'nan', - 'nan_to_num', 'nanargmax', 'nanargmin', 'nanmax', 'nanmin', 'nansum', - 'ndenumerate', 'ndim', 'ndindex', 'negative', 'newaxis', 'newbuffer', - 'newbyteorder', 'nonzero', 'not_equal', 'obj2sctype', 'ogrid', 'ones', - 'ones_like', 'outer', 'permutation', 'piecewise', 'pinv', 'pkgload', - 'place', 'poisson', 'poly', 'poly1d', 'polyadd', 'polyder', 'polydiv', - 'polyfit', 'polyint', 'polymul', 'polysub', 'polyval', 'power', 'prod', - 'product', 'ptp', 'put', 'putmask', 'r_', 'randint', 'random_integers', - 'random_sample', 'ranf', 'rank', 'ravel', 'real', 'real_if_close', - 'recarray', 'reciprocal', 'reduce', 'remainder', 'repeat', 'require', - 'reshape', 'resize', 'restoredot', 'right_shift', 'rint', 'roll', - 'rollaxis', 'roots', 'rot90', 'round', 'round_', 'row_stack', 's_', - 'sample', 'savetxt', 'sctype2char', 'searchsorted', 'seed', 'select', - 'set_numeric_ops', 'set_printoptions', 'set_string_function', - 'setbufsize', 'setdiff1d', 'seterr', 'seterrcall', 'seterrobj', - 'setfield', 'setflags', 'setmember1d', 'setxor1d', 'shape', - 'show_config', 'shuffle', 'sign', 'signbit', 'sin', 'sinc', 'sinh', - 'size', 'slice', 'solve', 'sometrue', 'sort', 'sort_complex', 'source', - 'split', 'sqrt', 'square', 'squeeze', 'standard_normal', 'std', - 'subtract', 'sum', 'svd', 'swapaxes', 'take', 'tan', 'tanh', 'tensordot', - 'test', 'tile', 'tofile', 'tolist', 'tostring', 'trace', 'transpose', - 'trapz', 'tri', 'tril', 'trim_zeros', 'triu', 'true_divide', 'typeDict', - 'typename', 'uniform', 'union1d', 'unique', 'unique1d', 'unravel_index', - 'unwrap', 'vander', 'var', 'vdot', 'vectorize', 'view', 'vonmises', - 'vsplit', 'vstack', 'weibull', 'where', 'who', 'zeros', 'zeros_like' - } - - def get_tokens_unprocessed(self, text): - for index, token, value in \ - PythonLexer.get_tokens_unprocessed(self, text): - if token is Name and value in self.EXTRA_KEYWORDS: - yield index, Keyword.Pseudo, value - else: - yield index, token, value - - def analyse_text(text): - ltext = text[:1000] - return (shebang_matches(text, r'pythonw?(3(\.\d)?)?') or - 'import ' in ltext) \ - and ('import numpy' in ltext or 'from numpy import' in ltext) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/modeline.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/modeline.py deleted file mode 100644 index c310f0edb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/modeline.py +++ /dev/null @@ -1,43 +0,0 @@ -""" - pygments.modeline - ~~~~~~~~~~~~~~~~~ - - A simple modeline parser (based on pymodeline). - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re - -__all__ = ['get_filetype_from_buffer'] - - -modeline_re = re.compile(r''' - (?: vi | vim | ex ) (?: [<=>]? \d* )? : - .* (?: ft | filetype | syn | syntax ) = ( [^:\s]+ ) -''', re.VERBOSE) - - -def get_filetype_from_line(l): # noqa: E741 - m = modeline_re.search(l) - if m: - return m.group(1) - - -def get_filetype_from_buffer(buf, max_lines=5): - """ - Scan the buffer for modelines and return filetype if one is found. - """ - lines = buf.splitlines() - for line in lines[-1:-max_lines-1:-1]: - ret = get_filetype_from_line(line) - if ret: - return ret - for i in range(max_lines, -1, -1): - if i < len(lines): - ret = get_filetype_from_line(lines[i]) - if ret: - return ret - - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/plugin.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/plugin.py deleted file mode 100644 index 498db4238..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/plugin.py +++ /dev/null @@ -1,72 +0,0 @@ -""" - pygments.plugin - ~~~~~~~~~~~~~~~ - - Pygments plugin interface. - - lexer plugins:: - - [pygments.lexers] - yourlexer = yourmodule:YourLexer - - formatter plugins:: - - [pygments.formatters] - yourformatter = yourformatter:YourFormatter - /.ext = yourformatter:YourFormatter - - As you can see, you can define extensions for the formatter - with a leading slash. - - syntax plugins:: - - [pygments.styles] - yourstyle = yourstyle:YourStyle - - filter plugin:: - - [pygments.filter] - yourfilter = yourfilter:YourFilter - - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" -from importlib.metadata import entry_points - -LEXER_ENTRY_POINT = 'pygments.lexers' -FORMATTER_ENTRY_POINT = 'pygments.formatters' -STYLE_ENTRY_POINT = 'pygments.styles' -FILTER_ENTRY_POINT = 'pygments.filters' - - -def iter_entry_points(group_name): - groups = entry_points() - if hasattr(groups, 'select'): - # New interface in Python 3.10 and newer versions of the - # importlib_metadata backport. - return groups.select(group=group_name) - else: - # Older interface, deprecated in Python 3.10 and recent - # importlib_metadata, but we need it in Python 3.8 and 3.9. - return groups.get(group_name, []) - - -def find_plugin_lexers(): - for entrypoint in iter_entry_points(LEXER_ENTRY_POINT): - yield entrypoint.load() - - -def find_plugin_formatters(): - for entrypoint in iter_entry_points(FORMATTER_ENTRY_POINT): - yield entrypoint.name, entrypoint.load() - - -def find_plugin_styles(): - for entrypoint in iter_entry_points(STYLE_ENTRY_POINT): - yield entrypoint.name, entrypoint.load() - - -def find_plugin_filters(): - for entrypoint in iter_entry_points(FILTER_ENTRY_POINT): - yield entrypoint.name, entrypoint.load() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/regexopt.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/regexopt.py deleted file mode 100644 index cc8d2c31b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/regexopt.py +++ /dev/null @@ -1,91 +0,0 @@ -""" - pygments.regexopt - ~~~~~~~~~~~~~~~~~ - - An algorithm that generates optimized regexes for matching long lists of - literal strings. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -from re import escape -from os.path import commonprefix -from itertools import groupby -from operator import itemgetter - -CS_ESCAPE = re.compile(r'[\[\^\\\-\]]') -FIRST_ELEMENT = itemgetter(0) - - -def make_charset(letters): - return '[' + CS_ESCAPE.sub(lambda m: '\\' + m.group(), ''.join(letters)) + ']' - - -def regex_opt_inner(strings, open_paren): - """Return a regex that matches any string in the sorted list of strings.""" - close_paren = open_paren and ')' or '' - # print strings, repr(open_paren) - if not strings: - # print '-> nothing left' - return '' - first = strings[0] - if len(strings) == 1: - # print '-> only 1 string' - return open_paren + escape(first) + close_paren - if not first: - # print '-> first string empty' - return open_paren + regex_opt_inner(strings[1:], '(?:') \ - + '?' + close_paren - if len(first) == 1: - # multiple one-char strings? make a charset - oneletter = [] - rest = [] - for s in strings: - if len(s) == 1: - oneletter.append(s) - else: - rest.append(s) - if len(oneletter) > 1: # do we have more than one oneletter string? - if rest: - # print '-> 1-character + rest' - return open_paren + regex_opt_inner(rest, '') + '|' \ - + make_charset(oneletter) + close_paren - # print '-> only 1-character' - return open_paren + make_charset(oneletter) + close_paren - prefix = commonprefix(strings) - if prefix: - plen = len(prefix) - # we have a prefix for all strings - # print '-> prefix:', prefix - return open_paren + escape(prefix) \ - + regex_opt_inner([s[plen:] for s in strings], '(?:') \ - + close_paren - # is there a suffix? - strings_rev = [s[::-1] for s in strings] - suffix = commonprefix(strings_rev) - if suffix: - slen = len(suffix) - # print '-> suffix:', suffix[::-1] - return open_paren \ - + regex_opt_inner(sorted(s[:-slen] for s in strings), '(?:') \ - + escape(suffix[::-1]) + close_paren - # recurse on common 1-string prefixes - # print '-> last resort' - return open_paren + \ - '|'.join(regex_opt_inner(list(group[1]), '') - for group in groupby(strings, lambda s: s[0] == first[0])) \ - + close_paren - - -def regex_opt(strings, prefix='', suffix=''): - """Return a compiled regex that matches any string in the given list. - - The strings to match must be literal strings, not regexes. They will be - regex-escaped. - - *prefix* and *suffix* are pre- and appended to the final regex. - """ - strings = sorted(strings) - return prefix + regex_opt_inner(strings, '(') + suffix diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/scanner.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/scanner.py deleted file mode 100644 index 3c8c84873..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/scanner.py +++ /dev/null @@ -1,104 +0,0 @@ -""" - pygments.scanner - ~~~~~~~~~~~~~~~~ - - This library implements a regex based scanner. Some languages - like Pascal are easy to parse but have some keywords that - depend on the context. Because of this it's impossible to lex - that just by using a regular expression lexer like the - `RegexLexer`. - - Have a look at the `DelphiLexer` to get an idea of how to use - this scanner. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" -import re - - -class EndOfText(RuntimeError): - """ - Raise if end of text is reached and the user - tried to call a match function. - """ - - -class Scanner: - """ - Simple scanner - - All method patterns are regular expression strings (not - compiled expressions!) - """ - - def __init__(self, text, flags=0): - """ - :param text: The text which should be scanned - :param flags: default regular expression flags - """ - self.data = text - self.data_length = len(text) - self.start_pos = 0 - self.pos = 0 - self.flags = flags - self.last = None - self.match = None - self._re_cache = {} - - def eos(self): - """`True` if the scanner reached the end of text.""" - return self.pos >= self.data_length - eos = property(eos, eos.__doc__) - - def check(self, pattern): - """ - Apply `pattern` on the current position and return - the match object. (Doesn't touch pos). Use this for - lookahead. - """ - if self.eos: - raise EndOfText() - if pattern not in self._re_cache: - self._re_cache[pattern] = re.compile(pattern, self.flags) - return self._re_cache[pattern].match(self.data, self.pos) - - def test(self, pattern): - """Apply a pattern on the current position and check - if it patches. Doesn't touch pos. - """ - return self.check(pattern) is not None - - def scan(self, pattern): - """ - Scan the text for the given pattern and update pos/match - and related fields. The return value is a boolean that - indicates if the pattern matched. The matched value is - stored on the instance as ``match``, the last value is - stored as ``last``. ``start_pos`` is the position of the - pointer before the pattern was matched, ``pos`` is the - end position. - """ - if self.eos: - raise EndOfText() - if pattern not in self._re_cache: - self._re_cache[pattern] = re.compile(pattern, self.flags) - self.last = self.match - m = self._re_cache[pattern].match(self.data, self.pos) - if m is None: - return False - self.start_pos = m.start() - self.pos = m.end() - self.match = m.group() - return True - - def get_char(self): - """Scan exactly one char.""" - self.scan('.') - - def __repr__(self): - return '<%s %d/%d>' % ( - self.__class__.__name__, - self.pos, - self.data_length - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/sphinxext.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/sphinxext.py deleted file mode 100644 index 955d9584f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +++ /dev/null @@ -1,247 +0,0 @@ -""" - pygments.sphinxext - ~~~~~~~~~~~~~~~~~~ - - Sphinx extension to generate automatic documentation of lexers, - formatters and filters. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import sys - -from docutils import nodes -from docutils.statemachine import ViewList -from docutils.parsers.rst import Directive -from sphinx.util.nodes import nested_parse_with_titles - - -MODULEDOC = ''' -.. module:: %s - -%s -%s -''' - -LEXERDOC = ''' -.. class:: %s - - :Short names: %s - :Filenames: %s - :MIME types: %s - - %s - - %s - -''' - -FMTERDOC = ''' -.. class:: %s - - :Short names: %s - :Filenames: %s - - %s - -''' - -FILTERDOC = ''' -.. class:: %s - - :Name: %s - - %s - -''' - - -class PygmentsDoc(Directive): - """ - A directive to collect all lexers/formatters/filters and generate - autoclass directives for them. - """ - has_content = False - required_arguments = 1 - optional_arguments = 0 - final_argument_whitespace = False - option_spec = {} - - def run(self): - self.filenames = set() - if self.arguments[0] == 'lexers': - out = self.document_lexers() - elif self.arguments[0] == 'formatters': - out = self.document_formatters() - elif self.arguments[0] == 'filters': - out = self.document_filters() - elif self.arguments[0] == 'lexers_overview': - out = self.document_lexers_overview() - else: - raise Exception('invalid argument for "pygmentsdoc" directive') - node = nodes.compound() - vl = ViewList(out.split('\n'), source='') - nested_parse_with_titles(self.state, vl, node) - for fn in self.filenames: - self.state.document.settings.record_dependencies.add(fn) - return node.children - - def document_lexers_overview(self): - """Generate a tabular overview of all lexers. - - The columns are the lexer name, the extensions handled by this lexer - (or "None"), the aliases and a link to the lexer class.""" - from pip._vendor.pygments.lexers._mapping import LEXERS - from pip._vendor.pygments.lexers import find_lexer_class - out = [] - - table = [] - - def format_link(name, url): - if url: - return f'`{name} <{url}>`_' - return name - - for classname, data in sorted(LEXERS.items(), key=lambda x: x[1][1].lower()): - lexer_cls = find_lexer_class(data[1]) - extensions = lexer_cls.filenames + lexer_cls.alias_filenames - - table.append({ - 'name': format_link(data[1], lexer_cls.url), - 'extensions': ', '.join(extensions).replace('*', '\\*').replace('_', '\\') or 'None', - 'aliases': ', '.join(data[2]), - 'class': f'{data[0]}.{classname}' - }) - - column_names = ['name', 'extensions', 'aliases', 'class'] - column_lengths = [max([len(row[column]) for row in table if row[column]]) - for column in column_names] - - def write_row(*columns): - """Format a table row""" - out = [] - for length, col in zip(column_lengths, columns): - if col: - out.append(col.ljust(length)) - else: - out.append(' '*length) - - return ' '.join(out) - - def write_seperator(): - """Write a table separator row""" - sep = ['='*c for c in column_lengths] - return write_row(*sep) - - out.append(write_seperator()) - out.append(write_row('Name', 'Extension(s)', 'Short name(s)', 'Lexer class')) - out.append(write_seperator()) - for row in table: - out.append(write_row( - row['name'], - row['extensions'], - row['aliases'], - f':class:`~{row["class"]}`')) - out.append(write_seperator()) - - return '\n'.join(out) - - def document_lexers(self): - from pip._vendor.pygments.lexers._mapping import LEXERS - from pip._vendor import pygments - import inspect - import pathlib - - out = [] - modules = {} - moduledocstrings = {} - for classname, data in sorted(LEXERS.items(), key=lambda x: x[0]): - module = data[0] - mod = __import__(module, None, None, [classname]) - self.filenames.add(mod.__file__) - cls = getattr(mod, classname) - if not cls.__doc__: - print(f"Warning: {classname} does not have a docstring.") - docstring = cls.__doc__ - if isinstance(docstring, bytes): - docstring = docstring.decode('utf8') - - example_file = getattr(cls, '_example', None) - if example_file: - p = pathlib.Path(inspect.getabsfile(pygments)).parent.parent /\ - 'tests' / 'examplefiles' / example_file - content = p.read_text(encoding='utf-8') - if not content: - raise Exception( - f"Empty example file '{example_file}' for lexer " - f"{classname}") - - if data[2]: - lexer_name = data[2][0] - docstring += '\n\n .. admonition:: Example\n' - docstring += f'\n .. code-block:: {lexer_name}\n\n' - for line in content.splitlines(): - docstring += f' {line}\n' - - if cls.version_added: - version_line = f'.. versionadded:: {cls.version_added}' - else: - version_line = '' - - modules.setdefault(module, []).append(( - classname, - ', '.join(data[2]) or 'None', - ', '.join(data[3]).replace('*', '\\*').replace('_', '\\') or 'None', - ', '.join(data[4]) or 'None', - docstring, - version_line)) - if module not in moduledocstrings: - moddoc = mod.__doc__ - if isinstance(moddoc, bytes): - moddoc = moddoc.decode('utf8') - moduledocstrings[module] = moddoc - - for module, lexers in sorted(modules.items(), key=lambda x: x[0]): - if moduledocstrings[module] is None: - raise Exception(f"Missing docstring for {module}") - heading = moduledocstrings[module].splitlines()[4].strip().rstrip('.') - out.append(MODULEDOC % (module, heading, '-'*len(heading))) - for data in lexers: - out.append(LEXERDOC % data) - - return ''.join(out) - - def document_formatters(self): - from pip._vendor.pygments.formatters import FORMATTERS - - out = [] - for classname, data in sorted(FORMATTERS.items(), key=lambda x: x[0]): - module = data[0] - mod = __import__(module, None, None, [classname]) - self.filenames.add(mod.__file__) - cls = getattr(mod, classname) - docstring = cls.__doc__ - if isinstance(docstring, bytes): - docstring = docstring.decode('utf8') - heading = cls.__name__ - out.append(FMTERDOC % (heading, ', '.join(data[2]) or 'None', - ', '.join(data[3]).replace('*', '\\*') or 'None', - docstring)) - return ''.join(out) - - def document_filters(self): - from pip._vendor.pygments.filters import FILTERS - - out = [] - for name, cls in FILTERS.items(): - self.filenames.add(sys.modules[cls.__module__].__file__) - docstring = cls.__doc__ - if isinstance(docstring, bytes): - docstring = docstring.decode('utf8') - out.append(FILTERDOC % (cls.__name__, name, docstring)) - return ''.join(out) - - -def setup(app): - app.add_directive('pygmentsdoc', PygmentsDoc) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/style.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/style.py deleted file mode 100644 index be5f83228..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/style.py +++ /dev/null @@ -1,203 +0,0 @@ -""" - pygments.style - ~~~~~~~~~~~~~~ - - Basic style object. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from pip._vendor.pygments.token import Token, STANDARD_TYPES - -# Default mapping of ansixxx to RGB colors. -_ansimap = { - # dark - 'ansiblack': '000000', - 'ansired': '7f0000', - 'ansigreen': '007f00', - 'ansiyellow': '7f7fe0', - 'ansiblue': '00007f', - 'ansimagenta': '7f007f', - 'ansicyan': '007f7f', - 'ansigray': 'e5e5e5', - # normal - 'ansibrightblack': '555555', - 'ansibrightred': 'ff0000', - 'ansibrightgreen': '00ff00', - 'ansibrightyellow': 'ffff00', - 'ansibrightblue': '0000ff', - 'ansibrightmagenta': 'ff00ff', - 'ansibrightcyan': '00ffff', - 'ansiwhite': 'ffffff', -} -# mapping of deprecated #ansixxx colors to new color names -_deprecated_ansicolors = { - # dark - '#ansiblack': 'ansiblack', - '#ansidarkred': 'ansired', - '#ansidarkgreen': 'ansigreen', - '#ansibrown': 'ansiyellow', - '#ansidarkblue': 'ansiblue', - '#ansipurple': 'ansimagenta', - '#ansiteal': 'ansicyan', - '#ansilightgray': 'ansigray', - # normal - '#ansidarkgray': 'ansibrightblack', - '#ansired': 'ansibrightred', - '#ansigreen': 'ansibrightgreen', - '#ansiyellow': 'ansibrightyellow', - '#ansiblue': 'ansibrightblue', - '#ansifuchsia': 'ansibrightmagenta', - '#ansiturquoise': 'ansibrightcyan', - '#ansiwhite': 'ansiwhite', -} -ansicolors = set(_ansimap) - - -class StyleMeta(type): - - def __new__(mcs, name, bases, dct): - obj = type.__new__(mcs, name, bases, dct) - for token in STANDARD_TYPES: - if token not in obj.styles: - obj.styles[token] = '' - - def colorformat(text): - if text in ansicolors: - return text - if text[0:1] == '#': - col = text[1:] - if len(col) == 6: - return col - elif len(col) == 3: - return col[0] * 2 + col[1] * 2 + col[2] * 2 - elif text == '': - return '' - elif text.startswith('var') or text.startswith('calc'): - return text - assert False, f"wrong color format {text!r}" - - _styles = obj._styles = {} - - for ttype in obj.styles: - for token in ttype.split(): - if token in _styles: - continue - ndef = _styles.get(token.parent, None) - styledefs = obj.styles.get(token, '').split() - if not ndef or token is None: - ndef = ['', 0, 0, 0, '', '', 0, 0, 0] - elif 'noinherit' in styledefs and token is not Token: - ndef = _styles[Token][:] - else: - ndef = ndef[:] - _styles[token] = ndef - for styledef in obj.styles.get(token, '').split(): - if styledef == 'noinherit': - pass - elif styledef == 'bold': - ndef[1] = 1 - elif styledef == 'nobold': - ndef[1] = 0 - elif styledef == 'italic': - ndef[2] = 1 - elif styledef == 'noitalic': - ndef[2] = 0 - elif styledef == 'underline': - ndef[3] = 1 - elif styledef == 'nounderline': - ndef[3] = 0 - elif styledef[:3] == 'bg:': - ndef[4] = colorformat(styledef[3:]) - elif styledef[:7] == 'border:': - ndef[5] = colorformat(styledef[7:]) - elif styledef == 'roman': - ndef[6] = 1 - elif styledef == 'sans': - ndef[7] = 1 - elif styledef == 'mono': - ndef[8] = 1 - else: - ndef[0] = colorformat(styledef) - - return obj - - def style_for_token(cls, token): - t = cls._styles[token] - ansicolor = bgansicolor = None - color = t[0] - if color in _deprecated_ansicolors: - color = _deprecated_ansicolors[color] - if color in ansicolors: - ansicolor = color - color = _ansimap[color] - bgcolor = t[4] - if bgcolor in _deprecated_ansicolors: - bgcolor = _deprecated_ansicolors[bgcolor] - if bgcolor in ansicolors: - bgansicolor = bgcolor - bgcolor = _ansimap[bgcolor] - - return { - 'color': color or None, - 'bold': bool(t[1]), - 'italic': bool(t[2]), - 'underline': bool(t[3]), - 'bgcolor': bgcolor or None, - 'border': t[5] or None, - 'roman': bool(t[6]) or None, - 'sans': bool(t[7]) or None, - 'mono': bool(t[8]) or None, - 'ansicolor': ansicolor, - 'bgansicolor': bgansicolor, - } - - def list_styles(cls): - return list(cls) - - def styles_token(cls, ttype): - return ttype in cls._styles - - def __iter__(cls): - for token in cls._styles: - yield token, cls.style_for_token(token) - - def __len__(cls): - return len(cls._styles) - - -class Style(metaclass=StyleMeta): - - #: overall background color (``None`` means transparent) - background_color = '#ffffff' - - #: highlight background color - highlight_color = '#ffffcc' - - #: line number font color - line_number_color = 'inherit' - - #: line number background color - line_number_background_color = 'transparent' - - #: special line number font color - line_number_special_color = '#000000' - - #: special line number background color - line_number_special_background_color = '#ffffc0' - - #: Style definitions for individual token types. - styles = {} - - #: user-friendly style name (used when selecting the style, so this - # should be all-lowercase, no spaces, hyphens) - name = 'unnamed' - - aliases = [] - - # Attribute for lexers defined within Pygments. If set - # to True, the style is not shown in the style gallery - # on the website. This is intended for language-specific - # styles. - web_style_gallery_exclude = False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py deleted file mode 100644 index 96d53dce0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -""" - pygments.styles - ~~~~~~~~~~~~~~~ - - Contains built-in styles. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -from pip._vendor.pygments.plugin import find_plugin_styles -from pip._vendor.pygments.util import ClassNotFound -from pip._vendor.pygments.styles._mapping import STYLES - -#: A dictionary of built-in styles, mapping style names to -#: ``'submodule::classname'`` strings. -#: This list is deprecated. Use `pygments.styles.STYLES` instead -STYLE_MAP = {v[1]: v[0].split('.')[-1] + '::' + k for k, v in STYLES.items()} - -#: Internal reverse mapping to make `get_style_by_name` more efficient -_STYLE_NAME_TO_MODULE_MAP = {v[1]: (v[0], k) for k, v in STYLES.items()} - - -def get_style_by_name(name): - """ - Return a style class by its short name. The names of the builtin styles - are listed in :data:`pygments.styles.STYLE_MAP`. - - Will raise :exc:`pygments.util.ClassNotFound` if no style of that name is - found. - """ - if name in _STYLE_NAME_TO_MODULE_MAP: - mod, cls = _STYLE_NAME_TO_MODULE_MAP[name] - builtin = "yes" - else: - for found_name, style in find_plugin_styles(): - if name == found_name: - return style - # perhaps it got dropped into our styles package - builtin = "" - mod = 'pygments.styles.' + name - cls = name.title() + "Style" - - try: - mod = __import__(mod, None, None, [cls]) - except ImportError: - raise ClassNotFound(f"Could not find style module {mod!r}" + - (builtin and ", though it should be builtin") - + ".") - try: - return getattr(mod, cls) - except AttributeError: - raise ClassNotFound(f"Could not find style class {cls!r} in style module.") - - -def get_all_styles(): - """Return a generator for all styles by name, both builtin and plugin.""" - for v in STYLES.values(): - yield v[1] - for name, _ in find_plugin_styles(): - yield name diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 57d58e66fc538f5837c61ccb5215862265349fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2796 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-314.pyc deleted file mode 100644 index 697b9173a4dea684f2021d65f3c3891f30024f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3765 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py deleted file mode 100644 index 49a7fae92..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +++ /dev/null @@ -1,54 +0,0 @@ -# Automatically generated by scripts/gen_mapfiles.py. -# DO NOT EDIT BY HAND; run `tox -e mapfiles` instead. - -STYLES = { - 'AbapStyle': ('pygments.styles.abap', 'abap', ()), - 'AlgolStyle': ('pygments.styles.algol', 'algol', ()), - 'Algol_NuStyle': ('pygments.styles.algol_nu', 'algol_nu', ()), - 'ArduinoStyle': ('pygments.styles.arduino', 'arduino', ()), - 'AutumnStyle': ('pygments.styles.autumn', 'autumn', ()), - 'BlackWhiteStyle': ('pygments.styles.bw', 'bw', ()), - 'BorlandStyle': ('pygments.styles.borland', 'borland', ()), - 'CoffeeStyle': ('pygments.styles.coffee', 'coffee', ()), - 'ColorfulStyle': ('pygments.styles.colorful', 'colorful', ()), - 'DefaultStyle': ('pygments.styles.default', 'default', ()), - 'DraculaStyle': ('pygments.styles.dracula', 'dracula', ()), - 'EmacsStyle': ('pygments.styles.emacs', 'emacs', ()), - 'FriendlyGrayscaleStyle': ('pygments.styles.friendly_grayscale', 'friendly_grayscale', ()), - 'FriendlyStyle': ('pygments.styles.friendly', 'friendly', ()), - 'FruityStyle': ('pygments.styles.fruity', 'fruity', ()), - 'GhDarkStyle': ('pygments.styles.gh_dark', 'github-dark', ()), - 'GruvboxDarkStyle': ('pygments.styles.gruvbox', 'gruvbox-dark', ()), - 'GruvboxLightStyle': ('pygments.styles.gruvbox', 'gruvbox-light', ()), - 'IgorStyle': ('pygments.styles.igor', 'igor', ()), - 'InkPotStyle': ('pygments.styles.inkpot', 'inkpot', ()), - 'LightbulbStyle': ('pygments.styles.lightbulb', 'lightbulb', ()), - 'LilyPondStyle': ('pygments.styles.lilypond', 'lilypond', ()), - 'LovelaceStyle': ('pygments.styles.lovelace', 'lovelace', ()), - 'ManniStyle': ('pygments.styles.manni', 'manni', ()), - 'MaterialStyle': ('pygments.styles.material', 'material', ()), - 'MonokaiStyle': ('pygments.styles.monokai', 'monokai', ()), - 'MurphyStyle': ('pygments.styles.murphy', 'murphy', ()), - 'NativeStyle': ('pygments.styles.native', 'native', ()), - 'NordDarkerStyle': ('pygments.styles.nord', 'nord-darker', ()), - 'NordStyle': ('pygments.styles.nord', 'nord', ()), - 'OneDarkStyle': ('pygments.styles.onedark', 'one-dark', ()), - 'ParaisoDarkStyle': ('pygments.styles.paraiso_dark', 'paraiso-dark', ()), - 'ParaisoLightStyle': ('pygments.styles.paraiso_light', 'paraiso-light', ()), - 'PastieStyle': ('pygments.styles.pastie', 'pastie', ()), - 'PerldocStyle': ('pygments.styles.perldoc', 'perldoc', ()), - 'RainbowDashStyle': ('pygments.styles.rainbow_dash', 'rainbow_dash', ()), - 'RrtStyle': ('pygments.styles.rrt', 'rrt', ()), - 'SasStyle': ('pygments.styles.sas', 'sas', ()), - 'SolarizedDarkStyle': ('pygments.styles.solarized', 'solarized-dark', ()), - 'SolarizedLightStyle': ('pygments.styles.solarized', 'solarized-light', ()), - 'StarofficeStyle': ('pygments.styles.staroffice', 'staroffice', ()), - 'StataDarkStyle': ('pygments.styles.stata_dark', 'stata-dark', ()), - 'StataLightStyle': ('pygments.styles.stata_light', 'stata-light', ()), - 'TangoStyle': ('pygments.styles.tango', 'tango', ()), - 'TracStyle': ('pygments.styles.trac', 'trac', ()), - 'VimStyle': ('pygments.styles.vim', 'vim', ()), - 'VisualStudioStyle': ('pygments.styles.vs', 'vs', ()), - 'XcodeStyle': ('pygments.styles.xcode', 'xcode', ()), - 'ZenburnStyle': ('pygments.styles.zenburn', 'zenburn', ()), -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/token.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/token.py deleted file mode 100644 index 2f3b97e09..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/token.py +++ /dev/null @@ -1,214 +0,0 @@ -""" - pygments.token - ~~~~~~~~~~~~~~ - - Basic token types and the standard tokens. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - - -class _TokenType(tuple): - parent = None - - def split(self): - buf = [] - node = self - while node is not None: - buf.append(node) - node = node.parent - buf.reverse() - return buf - - def __init__(self, *args): - # no need to call super.__init__ - self.subtypes = set() - - def __contains__(self, val): - return self is val or ( - type(val) is self.__class__ and - val[:len(self)] == self - ) - - def __getattr__(self, val): - if not val or not val[0].isupper(): - return tuple.__getattribute__(self, val) - new = _TokenType(self + (val,)) - setattr(self, val, new) - self.subtypes.add(new) - new.parent = self - return new - - def __repr__(self): - return 'Token' + (self and '.' or '') + '.'.join(self) - - def __copy__(self): - # These instances are supposed to be singletons - return self - - def __deepcopy__(self, memo): - # These instances are supposed to be singletons - return self - - -Token = _TokenType() - -# Special token types -Text = Token.Text -Whitespace = Text.Whitespace -Escape = Token.Escape -Error = Token.Error -# Text that doesn't belong to this lexer (e.g. HTML in PHP) -Other = Token.Other - -# Common token types for source code -Keyword = Token.Keyword -Name = Token.Name -Literal = Token.Literal -String = Literal.String -Number = Literal.Number -Punctuation = Token.Punctuation -Operator = Token.Operator -Comment = Token.Comment - -# Generic types for non-source code -Generic = Token.Generic - -# String and some others are not direct children of Token. -# alias them: -Token.Token = Token -Token.String = String -Token.Number = Number - - -def is_token_subtype(ttype, other): - """ - Return True if ``ttype`` is a subtype of ``other``. - - exists for backwards compatibility. use ``ttype in other`` now. - """ - return ttype in other - - -def string_to_tokentype(s): - """ - Convert a string into a token type:: - - >>> string_to_token('String.Double') - Token.Literal.String.Double - >>> string_to_token('Token.Literal.Number') - Token.Literal.Number - >>> string_to_token('') - Token - - Tokens that are already tokens are returned unchanged: - - >>> string_to_token(String) - Token.Literal.String - """ - if isinstance(s, _TokenType): - return s - if not s: - return Token - node = Token - for item in s.split('.'): - node = getattr(node, item) - return node - - -# Map standard token types to short names, used in CSS class naming. -# If you add a new item, please be sure to run this file to perform -# a consistency check for duplicate values. -STANDARD_TYPES = { - Token: '', - - Text: '', - Whitespace: 'w', - Escape: 'esc', - Error: 'err', - Other: 'x', - - Keyword: 'k', - Keyword.Constant: 'kc', - Keyword.Declaration: 'kd', - Keyword.Namespace: 'kn', - Keyword.Pseudo: 'kp', - Keyword.Reserved: 'kr', - Keyword.Type: 'kt', - - Name: 'n', - Name.Attribute: 'na', - Name.Builtin: 'nb', - Name.Builtin.Pseudo: 'bp', - Name.Class: 'nc', - Name.Constant: 'no', - Name.Decorator: 'nd', - Name.Entity: 'ni', - Name.Exception: 'ne', - Name.Function: 'nf', - Name.Function.Magic: 'fm', - Name.Property: 'py', - Name.Label: 'nl', - Name.Namespace: 'nn', - Name.Other: 'nx', - Name.Tag: 'nt', - Name.Variable: 'nv', - Name.Variable.Class: 'vc', - Name.Variable.Global: 'vg', - Name.Variable.Instance: 'vi', - Name.Variable.Magic: 'vm', - - Literal: 'l', - Literal.Date: 'ld', - - String: 's', - String.Affix: 'sa', - String.Backtick: 'sb', - String.Char: 'sc', - String.Delimiter: 'dl', - String.Doc: 'sd', - String.Double: 's2', - String.Escape: 'se', - String.Heredoc: 'sh', - String.Interpol: 'si', - String.Other: 'sx', - String.Regex: 'sr', - String.Single: 's1', - String.Symbol: 'ss', - - Number: 'm', - Number.Bin: 'mb', - Number.Float: 'mf', - Number.Hex: 'mh', - Number.Integer: 'mi', - Number.Integer.Long: 'il', - Number.Oct: 'mo', - - Operator: 'o', - Operator.Word: 'ow', - - Punctuation: 'p', - Punctuation.Marker: 'pm', - - Comment: 'c', - Comment.Hashbang: 'ch', - Comment.Multiline: 'cm', - Comment.Preproc: 'cp', - Comment.PreprocFile: 'cpf', - Comment.Single: 'c1', - Comment.Special: 'cs', - - Generic: 'g', - Generic.Deleted: 'gd', - Generic.Emph: 'ge', - Generic.Error: 'gr', - Generic.Heading: 'gh', - Generic.Inserted: 'gi', - Generic.Output: 'go', - Generic.Prompt: 'gp', - Generic.Strong: 'gs', - Generic.Subheading: 'gu', - Generic.EmphStrong: 'ges', - Generic.Traceback: 'gt', -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/unistring.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/unistring.py deleted file mode 100644 index e3bd2e727..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/unistring.py +++ /dev/null @@ -1,153 +0,0 @@ -""" - pygments.unistring - ~~~~~~~~~~~~~~~~~~ - - Strings of all Unicode characters of a certain category. - Used for matching in Unicode-aware languages. Run to regenerate. - - Inspired by chartypes_create.py from the MoinMoin project. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -Cc = '\x00-\x1f\x7f-\x9f' - -Cf = '\xad\u0600-\u0605\u061c\u06dd\u070f\u08e2\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff\ufff9-\ufffb\U000110bd\U000110cd\U0001bca0-\U0001bca3\U0001d173-\U0001d17a\U000e0001\U000e0020-\U000e007f' - -Cn = '\u0378-\u0379\u0380-\u0383\u038b\u038d\u03a2\u0530\u0557-\u0558\u058b-\u058c\u0590\u05c8-\u05cf\u05eb-\u05ee\u05f5-\u05ff\u061d\u070e\u074b-\u074c\u07b2-\u07bf\u07fb-\u07fc\u082e-\u082f\u083f\u085c-\u085d\u085f\u086b-\u089f\u08b5\u08be-\u08d2\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09c5-\u09c6\u09c9-\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09ff-\u0a00\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a77-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0acf\u0ad1-\u0adf\u0ae4-\u0ae5\u0af2-\u0af8\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34\u0b3a-\u0b3b\u0b45-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64-\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c0d\u0c11\u0c29\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5b-\u0c5f\u0c64-\u0c65\u0c70-\u0c77\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4-\u0ce5\u0cf0\u0cf3-\u0cff\u0d04\u0d0d\u0d11\u0d45\u0d49\u0d50-\u0d53\u0d64-\u0d65\u0d80-\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe-\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0de5\u0df0-\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce-\u10cf\u1249\u124e-\u124f\u1257\u1259\u125e-\u125f\u1289\u128e-\u128f\u12b1\u12b6-\u12b7\u12bf\u12c1\u12c6-\u12c7\u12d7\u1311\u1316-\u1317\u135b-\u135c\u137d-\u137f\u139a-\u139f\u13f6-\u13f7\u13fe-\u13ff\u169d-\u169f\u16f9-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de-\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f\u181a-\u181f\u1879-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e-\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c-\u1a1d\u1a5f\u1a7d-\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae-\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c89-\u1c8f\u1cbb-\u1cbc\u1cc8-\u1ccf\u1cfa-\u1cff\u1dfa\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fc5\u1fd4-\u1fd5\u1fdc\u1ff0-\u1ff1\u1ff5\u1fff\u2065\u2072-\u2073\u208f\u209d-\u209f\u20c0-\u20cf\u20f1-\u20ff\u218c-\u218f\u2427-\u243f\u244b-\u245f\u2b74-\u2b75\u2b96-\u2b97\u2bc9\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e-\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e4f-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097-\u3098\u3100-\u3104\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9ff0-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua6f8-\ua6ff\ua7ba-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c6-\ua8cd\ua8da-\ua8df\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9ff\uaa37-\uaa3f\uaa4e-\uaa4f\uaa5a-\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07-\uab08\uab0f-\uab10\uab17-\uab1f\uab27\uab2f\uab66-\uab6f\uabee-\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\ud7ff\ufa6e-\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90-\ufd91\ufdc8-\ufdef\ufdfe-\ufdff\ufe1a-\ufe1f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd-\ufefe\uff00\uffbf-\uffc1\uffc8-\uffc9\uffd0-\uffd1\uffd8-\uffd9\uffdd-\uffdf\uffe7\uffef-\ufff8\ufffe-\uffff\U0001000c\U00010027\U0001003b\U0001003e\U0001004e-\U0001004f\U0001005e-\U0001007f\U000100fb-\U000100ff\U00010103-\U00010106\U00010134-\U00010136\U0001018f\U0001019c-\U0001019f\U000101a1-\U000101cf\U000101fe-\U0001027f\U0001029d-\U0001029f\U000102d1-\U000102df\U000102fc-\U000102ff\U00010324-\U0001032c\U0001034b-\U0001034f\U0001037b-\U0001037f\U0001039e\U000103c4-\U000103c7\U000103d6-\U000103ff\U0001049e-\U0001049f\U000104aa-\U000104af\U000104d4-\U000104d7\U000104fc-\U000104ff\U00010528-\U0001052f\U00010564-\U0001056e\U00010570-\U000105ff\U00010737-\U0001073f\U00010756-\U0001075f\U00010768-\U000107ff\U00010806-\U00010807\U00010809\U00010836\U00010839-\U0001083b\U0001083d-\U0001083e\U00010856\U0001089f-\U000108a6\U000108b0-\U000108df\U000108f3\U000108f6-\U000108fa\U0001091c-\U0001091e\U0001093a-\U0001093e\U00010940-\U0001097f\U000109b8-\U000109bb\U000109d0-\U000109d1\U00010a04\U00010a07-\U00010a0b\U00010a14\U00010a18\U00010a36-\U00010a37\U00010a3b-\U00010a3e\U00010a49-\U00010a4f\U00010a59-\U00010a5f\U00010aa0-\U00010abf\U00010ae7-\U00010aea\U00010af7-\U00010aff\U00010b36-\U00010b38\U00010b56-\U00010b57\U00010b73-\U00010b77\U00010b92-\U00010b98\U00010b9d-\U00010ba8\U00010bb0-\U00010bff\U00010c49-\U00010c7f\U00010cb3-\U00010cbf\U00010cf3-\U00010cf9\U00010d28-\U00010d2f\U00010d3a-\U00010e5f\U00010e7f-\U00010eff\U00010f28-\U00010f2f\U00010f5a-\U00010fff\U0001104e-\U00011051\U00011070-\U0001107e\U000110c2-\U000110cc\U000110ce-\U000110cf\U000110e9-\U000110ef\U000110fa-\U000110ff\U00011135\U00011147-\U0001114f\U00011177-\U0001117f\U000111ce-\U000111cf\U000111e0\U000111f5-\U000111ff\U00011212\U0001123f-\U0001127f\U00011287\U00011289\U0001128e\U0001129e\U000112aa-\U000112af\U000112eb-\U000112ef\U000112fa-\U000112ff\U00011304\U0001130d-\U0001130e\U00011311-\U00011312\U00011329\U00011331\U00011334\U0001133a\U00011345-\U00011346\U00011349-\U0001134a\U0001134e-\U0001134f\U00011351-\U00011356\U00011358-\U0001135c\U00011364-\U00011365\U0001136d-\U0001136f\U00011375-\U000113ff\U0001145a\U0001145c\U0001145f-\U0001147f\U000114c8-\U000114cf\U000114da-\U0001157f\U000115b6-\U000115b7\U000115de-\U000115ff\U00011645-\U0001164f\U0001165a-\U0001165f\U0001166d-\U0001167f\U000116b8-\U000116bf\U000116ca-\U000116ff\U0001171b-\U0001171c\U0001172c-\U0001172f\U00011740-\U000117ff\U0001183c-\U0001189f\U000118f3-\U000118fe\U00011900-\U000119ff\U00011a48-\U00011a4f\U00011a84-\U00011a85\U00011aa3-\U00011abf\U00011af9-\U00011bff\U00011c09\U00011c37\U00011c46-\U00011c4f\U00011c6d-\U00011c6f\U00011c90-\U00011c91\U00011ca8\U00011cb7-\U00011cff\U00011d07\U00011d0a\U00011d37-\U00011d39\U00011d3b\U00011d3e\U00011d48-\U00011d4f\U00011d5a-\U00011d5f\U00011d66\U00011d69\U00011d8f\U00011d92\U00011d99-\U00011d9f\U00011daa-\U00011edf\U00011ef9-\U00011fff\U0001239a-\U000123ff\U0001246f\U00012475-\U0001247f\U00012544-\U00012fff\U0001342f-\U000143ff\U00014647-\U000167ff\U00016a39-\U00016a3f\U00016a5f\U00016a6a-\U00016a6d\U00016a70-\U00016acf\U00016aee-\U00016aef\U00016af6-\U00016aff\U00016b46-\U00016b4f\U00016b5a\U00016b62\U00016b78-\U00016b7c\U00016b90-\U00016e3f\U00016e9b-\U00016eff\U00016f45-\U00016f4f\U00016f7f-\U00016f8e\U00016fa0-\U00016fdf\U00016fe2-\U00016fff\U000187f2-\U000187ff\U00018af3-\U0001afff\U0001b11f-\U0001b16f\U0001b2fc-\U0001bbff\U0001bc6b-\U0001bc6f\U0001bc7d-\U0001bc7f\U0001bc89-\U0001bc8f\U0001bc9a-\U0001bc9b\U0001bca4-\U0001cfff\U0001d0f6-\U0001d0ff\U0001d127-\U0001d128\U0001d1e9-\U0001d1ff\U0001d246-\U0001d2df\U0001d2f4-\U0001d2ff\U0001d357-\U0001d35f\U0001d379-\U0001d3ff\U0001d455\U0001d49d\U0001d4a0-\U0001d4a1\U0001d4a3-\U0001d4a4\U0001d4a7-\U0001d4a8\U0001d4ad\U0001d4ba\U0001d4bc\U0001d4c4\U0001d506\U0001d50b-\U0001d50c\U0001d515\U0001d51d\U0001d53a\U0001d53f\U0001d545\U0001d547-\U0001d549\U0001d551\U0001d6a6-\U0001d6a7\U0001d7cc-\U0001d7cd\U0001da8c-\U0001da9a\U0001daa0\U0001dab0-\U0001dfff\U0001e007\U0001e019-\U0001e01a\U0001e022\U0001e025\U0001e02b-\U0001e7ff\U0001e8c5-\U0001e8c6\U0001e8d7-\U0001e8ff\U0001e94b-\U0001e94f\U0001e95a-\U0001e95d\U0001e960-\U0001ec70\U0001ecb5-\U0001edff\U0001ee04\U0001ee20\U0001ee23\U0001ee25-\U0001ee26\U0001ee28\U0001ee33\U0001ee38\U0001ee3a\U0001ee3c-\U0001ee41\U0001ee43-\U0001ee46\U0001ee48\U0001ee4a\U0001ee4c\U0001ee50\U0001ee53\U0001ee55-\U0001ee56\U0001ee58\U0001ee5a\U0001ee5c\U0001ee5e\U0001ee60\U0001ee63\U0001ee65-\U0001ee66\U0001ee6b\U0001ee73\U0001ee78\U0001ee7d\U0001ee7f\U0001ee8a\U0001ee9c-\U0001eea0\U0001eea4\U0001eeaa\U0001eebc-\U0001eeef\U0001eef2-\U0001efff\U0001f02c-\U0001f02f\U0001f094-\U0001f09f\U0001f0af-\U0001f0b0\U0001f0c0\U0001f0d0\U0001f0f6-\U0001f0ff\U0001f10d-\U0001f10f\U0001f16c-\U0001f16f\U0001f1ad-\U0001f1e5\U0001f203-\U0001f20f\U0001f23c-\U0001f23f\U0001f249-\U0001f24f\U0001f252-\U0001f25f\U0001f266-\U0001f2ff\U0001f6d5-\U0001f6df\U0001f6ed-\U0001f6ef\U0001f6fa-\U0001f6ff\U0001f774-\U0001f77f\U0001f7d9-\U0001f7ff\U0001f80c-\U0001f80f\U0001f848-\U0001f84f\U0001f85a-\U0001f85f\U0001f888-\U0001f88f\U0001f8ae-\U0001f8ff\U0001f90c-\U0001f90f\U0001f93f\U0001f971-\U0001f972\U0001f977-\U0001f979\U0001f97b\U0001f9a3-\U0001f9af\U0001f9ba-\U0001f9bf\U0001f9c3-\U0001f9cf\U0001fa00-\U0001fa5f\U0001fa6e-\U0001ffff\U0002a6d7-\U0002a6ff\U0002b735-\U0002b73f\U0002b81e-\U0002b81f\U0002cea2-\U0002ceaf\U0002ebe1-\U0002f7ff\U0002fa1e-\U000e0000\U000e0002-\U000e001f\U000e0080-\U000e00ff\U000e01f0-\U000effff\U000ffffe-\U000fffff\U0010fffe-\U0010ffff' - -Co = '\ue000-\uf8ff\U000f0000-\U000ffffd\U00100000-\U0010fffd' - -Cs = '\ud800-\udbff\\\udc00\udc01-\udfff' - -Ll = 'a-z\xb5\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137-\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148-\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c-\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa-\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc-\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef-\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f-\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb-\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce-\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0560-\u0588\u10d0-\u10fa\u10fd-\u10ff\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a\u210e-\u210f\u2113\u212f\u2134\u2139\u213c-\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65-\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3-\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7af\ua7b5\ua7b7\ua7b9\ua7fa\uab30-\uab5a\uab60-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\U00010428-\U0001044f\U000104d8-\U000104fb\U00010cc0-\U00010cf2\U000118c0-\U000118df\U00016e60-\U00016e7f\U0001d41a-\U0001d433\U0001d44e-\U0001d454\U0001d456-\U0001d467\U0001d482-\U0001d49b\U0001d4b6-\U0001d4b9\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d4cf\U0001d4ea-\U0001d503\U0001d51e-\U0001d537\U0001d552-\U0001d56b\U0001d586-\U0001d59f\U0001d5ba-\U0001d5d3\U0001d5ee-\U0001d607\U0001d622-\U0001d63b\U0001d656-\U0001d66f\U0001d68a-\U0001d6a5\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6e1\U0001d6fc-\U0001d714\U0001d716-\U0001d71b\U0001d736-\U0001d74e\U0001d750-\U0001d755\U0001d770-\U0001d788\U0001d78a-\U0001d78f\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7c9\U0001d7cb\U0001e922-\U0001e943' - -Lm = '\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d-\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua69c-\ua69d\ua717-\ua71f\ua770\ua788\ua7f8-\ua7f9\ua9cf\ua9e6\uaa70\uaadd\uaaf3-\uaaf4\uab5c-\uab5f\uff70\uff9e-\uff9f\U00016b40-\U00016b43\U00016f93-\U00016f9f\U00016fe0-\U00016fe1' - -Lo = '\xaa\xba\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05ef-\u05f2\u0620-\u063f\u0641-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u0800-\u0815\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e45\u0e81-\u0e82\u0e84\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa-\u0eab\u0ead-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c77\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5-\u1cf6\u2135-\u2138\u2d30-\u2d67\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua014\ua016-\ua48c\ua4d0-\ua4f7\ua500-\ua60b\ua610-\ua61f\ua62a-\ua62b\ua66e\ua6a0-\ua6e5\ua78f\ua7f7\ua7fb-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9e0-\ua9e4\ua9e7-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa6f\uaa71-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadc\uaae0-\uaaea\uaaf2\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc\U00010000-\U0001000b\U0001000d-\U00010026\U00010028-\U0001003a\U0001003c-\U0001003d\U0001003f-\U0001004d\U00010050-\U0001005d\U00010080-\U000100fa\U00010280-\U0001029c\U000102a0-\U000102d0\U00010300-\U0001031f\U0001032d-\U00010340\U00010342-\U00010349\U00010350-\U00010375\U00010380-\U0001039d\U000103a0-\U000103c3\U000103c8-\U000103cf\U00010450-\U0001049d\U00010500-\U00010527\U00010530-\U00010563\U00010600-\U00010736\U00010740-\U00010755\U00010760-\U00010767\U00010800-\U00010805\U00010808\U0001080a-\U00010835\U00010837-\U00010838\U0001083c\U0001083f-\U00010855\U00010860-\U00010876\U00010880-\U0001089e\U000108e0-\U000108f2\U000108f4-\U000108f5\U00010900-\U00010915\U00010920-\U00010939\U00010980-\U000109b7\U000109be-\U000109bf\U00010a00\U00010a10-\U00010a13\U00010a15-\U00010a17\U00010a19-\U00010a35\U00010a60-\U00010a7c\U00010a80-\U00010a9c\U00010ac0-\U00010ac7\U00010ac9-\U00010ae4\U00010b00-\U00010b35\U00010b40-\U00010b55\U00010b60-\U00010b72\U00010b80-\U00010b91\U00010c00-\U00010c48\U00010d00-\U00010d23\U00010f00-\U00010f1c\U00010f27\U00010f30-\U00010f45\U00011003-\U00011037\U00011083-\U000110af\U000110d0-\U000110e8\U00011103-\U00011126\U00011144\U00011150-\U00011172\U00011176\U00011183-\U000111b2\U000111c1-\U000111c4\U000111da\U000111dc\U00011200-\U00011211\U00011213-\U0001122b\U00011280-\U00011286\U00011288\U0001128a-\U0001128d\U0001128f-\U0001129d\U0001129f-\U000112a8\U000112b0-\U000112de\U00011305-\U0001130c\U0001130f-\U00011310\U00011313-\U00011328\U0001132a-\U00011330\U00011332-\U00011333\U00011335-\U00011339\U0001133d\U00011350\U0001135d-\U00011361\U00011400-\U00011434\U00011447-\U0001144a\U00011480-\U000114af\U000114c4-\U000114c5\U000114c7\U00011580-\U000115ae\U000115d8-\U000115db\U00011600-\U0001162f\U00011644\U00011680-\U000116aa\U00011700-\U0001171a\U00011800-\U0001182b\U000118ff\U00011a00\U00011a0b-\U00011a32\U00011a3a\U00011a50\U00011a5c-\U00011a83\U00011a86-\U00011a89\U00011a9d\U00011ac0-\U00011af8\U00011c00-\U00011c08\U00011c0a-\U00011c2e\U00011c40\U00011c72-\U00011c8f\U00011d00-\U00011d06\U00011d08-\U00011d09\U00011d0b-\U00011d30\U00011d46\U00011d60-\U00011d65\U00011d67-\U00011d68\U00011d6a-\U00011d89\U00011d98\U00011ee0-\U00011ef2\U00012000-\U00012399\U00012480-\U00012543\U00013000-\U0001342e\U00014400-\U00014646\U00016800-\U00016a38\U00016a40-\U00016a5e\U00016ad0-\U00016aed\U00016b00-\U00016b2f\U00016b63-\U00016b77\U00016b7d-\U00016b8f\U00016f00-\U00016f44\U00016f50\U00017000-\U000187f1\U00018800-\U00018af2\U0001b000-\U0001b11e\U0001b170-\U0001b2fb\U0001bc00-\U0001bc6a\U0001bc70-\U0001bc7c\U0001bc80-\U0001bc88\U0001bc90-\U0001bc99\U0001e800-\U0001e8c4\U0001ee00-\U0001ee03\U0001ee05-\U0001ee1f\U0001ee21-\U0001ee22\U0001ee24\U0001ee27\U0001ee29-\U0001ee32\U0001ee34-\U0001ee37\U0001ee39\U0001ee3b\U0001ee42\U0001ee47\U0001ee49\U0001ee4b\U0001ee4d-\U0001ee4f\U0001ee51-\U0001ee52\U0001ee54\U0001ee57\U0001ee59\U0001ee5b\U0001ee5d\U0001ee5f\U0001ee61-\U0001ee62\U0001ee64\U0001ee67-\U0001ee6a\U0001ee6c-\U0001ee72\U0001ee74-\U0001ee77\U0001ee79-\U0001ee7c\U0001ee7e\U0001ee80-\U0001ee89\U0001ee8b-\U0001ee9b\U0001eea1-\U0001eea3\U0001eea5-\U0001eea9\U0001eeab-\U0001eebb\U00020000-\U0002a6d6\U0002a700-\U0002b734\U0002b740-\U0002b81d\U0002b820-\U0002cea1\U0002ceb0-\U0002ebe0\U0002f800-\U0002fa1d' - -Lt = '\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc' - -Lu = 'A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178-\u0179\u017b\u017d\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2\u01a4\u01a6-\u01a7\u01a9\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5\u01b7-\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a-\u023b\u023d-\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0-\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1c90-\u1cba\u1cbd-\u1cbf\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d-\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\ua7b8\uff21-\uff3a\U00010400-\U00010427\U000104b0-\U000104d3\U00010c80-\U00010cb2\U000118a0-\U000118bf\U00016e40-\U00016e5f\U0001d400-\U0001d419\U0001d434-\U0001d44d\U0001d468-\U0001d481\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b5\U0001d4d0-\U0001d4e9\U0001d504-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d538-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546\U0001d54a-\U0001d550\U0001d56c-\U0001d585\U0001d5a0-\U0001d5b9\U0001d5d4-\U0001d5ed\U0001d608-\U0001d621\U0001d63c-\U0001d655\U0001d670-\U0001d689\U0001d6a8-\U0001d6c0\U0001d6e2-\U0001d6fa\U0001d71c-\U0001d734\U0001d756-\U0001d76e\U0001d790-\U0001d7a8\U0001d7ca\U0001e900-\U0001e921' - -Mc = '\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e-\u094f\u0982-\u0983\u09be-\u09c0\u09c7-\u09c8\u09cb-\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb-\u0acc\u0b02-\u0b03\u0b3e\u0b40\u0b47-\u0b48\u0b4b-\u0b4c\u0b57\u0bbe-\u0bbf\u0bc1-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82-\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7-\u0cc8\u0cca-\u0ccb\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82-\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2-\u0df3\u0f3e-\u0f3f\u0f7f\u102b-\u102c\u1031\u1038\u103b-\u103c\u1056-\u1057\u1062-\u1064\u1067-\u106d\u1083-\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7-\u17c8\u1923-\u1926\u1929-\u192b\u1930-\u1931\u1933-\u1938\u1a19-\u1a1a\u1a55\u1a57\u1a61\u1a63-\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43-\u1b44\u1b82\u1ba1\u1ba6-\u1ba7\u1baa\u1be7\u1bea-\u1bec\u1bee\u1bf2-\u1bf3\u1c24-\u1c2b\u1c34-\u1c35\u1ce1\u1cf2-\u1cf3\u1cf7\u302e-\u302f\ua823-\ua824\ua827\ua880-\ua881\ua8b4-\ua8c3\ua952-\ua953\ua983\ua9b4-\ua9b5\ua9ba-\ua9bb\ua9bd-\ua9c0\uaa2f-\uaa30\uaa33-\uaa34\uaa4d\uaa7b\uaa7d\uaaeb\uaaee-\uaaef\uaaf5\uabe3-\uabe4\uabe6-\uabe7\uabe9-\uabea\uabec\U00011000\U00011002\U00011082\U000110b0-\U000110b2\U000110b7-\U000110b8\U0001112c\U00011145-\U00011146\U00011182\U000111b3-\U000111b5\U000111bf-\U000111c0\U0001122c-\U0001122e\U00011232-\U00011233\U00011235\U000112e0-\U000112e2\U00011302-\U00011303\U0001133e-\U0001133f\U00011341-\U00011344\U00011347-\U00011348\U0001134b-\U0001134d\U00011357\U00011362-\U00011363\U00011435-\U00011437\U00011440-\U00011441\U00011445\U000114b0-\U000114b2\U000114b9\U000114bb-\U000114be\U000114c1\U000115af-\U000115b1\U000115b8-\U000115bb\U000115be\U00011630-\U00011632\U0001163b-\U0001163c\U0001163e\U000116ac\U000116ae-\U000116af\U000116b6\U00011720-\U00011721\U00011726\U0001182c-\U0001182e\U00011838\U00011a39\U00011a57-\U00011a58\U00011a97\U00011c2f\U00011c3e\U00011ca9\U00011cb1\U00011cb4\U00011d8a-\U00011d8e\U00011d93-\U00011d94\U00011d96\U00011ef5-\U00011ef6\U00016f51-\U00016f7e\U0001d165-\U0001d166\U0001d16d-\U0001d172' - -Me = '\u0488-\u0489\u1abe\u20dd-\u20e0\u20e2-\u20e4\ua670-\ua672' - -Mn = '\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2-\u09e3\u09fe\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0afa-\u0aff\u0b01\u0b3c\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62-\u0b63\u0b82\u0bc0\u0bcd\u0c00\u0c04\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc6\u0ccc-\u0ccd\u0ce2-\u0ce3\u0d00-\u0d01\u0d3b-\u0d3c\u0d41-\u0d44\u0d4d\u0d62-\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u1885-\u1886\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099-\u309a\ua66f\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4-\ua8c5\ua8e0-\ua8f1\ua8ff\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\U000101fd\U000102e0\U00010376-\U0001037a\U00010a01-\U00010a03\U00010a05-\U00010a06\U00010a0c-\U00010a0f\U00010a38-\U00010a3a\U00010a3f\U00010ae5-\U00010ae6\U00010d24-\U00010d27\U00010f46-\U00010f50\U00011001\U00011038-\U00011046\U0001107f-\U00011081\U000110b3-\U000110b6\U000110b9-\U000110ba\U00011100-\U00011102\U00011127-\U0001112b\U0001112d-\U00011134\U00011173\U00011180-\U00011181\U000111b6-\U000111be\U000111c9-\U000111cc\U0001122f-\U00011231\U00011234\U00011236-\U00011237\U0001123e\U000112df\U000112e3-\U000112ea\U00011300-\U00011301\U0001133b-\U0001133c\U00011340\U00011366-\U0001136c\U00011370-\U00011374\U00011438-\U0001143f\U00011442-\U00011444\U00011446\U0001145e\U000114b3-\U000114b8\U000114ba\U000114bf-\U000114c0\U000114c2-\U000114c3\U000115b2-\U000115b5\U000115bc-\U000115bd\U000115bf-\U000115c0\U000115dc-\U000115dd\U00011633-\U0001163a\U0001163d\U0001163f-\U00011640\U000116ab\U000116ad\U000116b0-\U000116b5\U000116b7\U0001171d-\U0001171f\U00011722-\U00011725\U00011727-\U0001172b\U0001182f-\U00011837\U00011839-\U0001183a\U00011a01-\U00011a0a\U00011a33-\U00011a38\U00011a3b-\U00011a3e\U00011a47\U00011a51-\U00011a56\U00011a59-\U00011a5b\U00011a8a-\U00011a96\U00011a98-\U00011a99\U00011c30-\U00011c36\U00011c38-\U00011c3d\U00011c3f\U00011c92-\U00011ca7\U00011caa-\U00011cb0\U00011cb2-\U00011cb3\U00011cb5-\U00011cb6\U00011d31-\U00011d36\U00011d3a\U00011d3c-\U00011d3d\U00011d3f-\U00011d45\U00011d47\U00011d90-\U00011d91\U00011d95\U00011d97\U00011ef3-\U00011ef4\U00016af0-\U00016af4\U00016b30-\U00016b36\U00016f8f-\U00016f92\U0001bc9d-\U0001bc9e\U0001d167-\U0001d169\U0001d17b-\U0001d182\U0001d185-\U0001d18b\U0001d1aa-\U0001d1ad\U0001d242-\U0001d244\U0001da00-\U0001da36\U0001da3b-\U0001da6c\U0001da75\U0001da84\U0001da9b-\U0001da9f\U0001daa1-\U0001daaf\U0001e000-\U0001e006\U0001e008-\U0001e018\U0001e01b-\U0001e021\U0001e023-\U0001e024\U0001e026-\U0001e02a\U0001e8d0-\U0001e8d6\U0001e944-\U0001e94a\U000e0100-\U000e01ef' - -Nd = '0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19\U000104a0-\U000104a9\U00010d30-\U00010d39\U00011066-\U0001106f\U000110f0-\U000110f9\U00011136-\U0001113f\U000111d0-\U000111d9\U000112f0-\U000112f9\U00011450-\U00011459\U000114d0-\U000114d9\U00011650-\U00011659\U000116c0-\U000116c9\U00011730-\U00011739\U000118e0-\U000118e9\U00011c50-\U00011c59\U00011d50-\U00011d59\U00011da0-\U00011da9\U00016a60-\U00016a69\U00016b50-\U00016b59\U0001d7ce-\U0001d7ff\U0001e950-\U0001e959' - -Nl = '\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef\U00010140-\U00010174\U00010341\U0001034a\U000103d1-\U000103d5\U00012400-\U0001246e' - -No = '\xb2-\xb3\xb9\xbc-\xbe\u09f4-\u09f9\u0b72-\u0b77\u0bf0-\u0bf2\u0c78-\u0c7e\u0d58-\u0d5e\u0d70-\u0d78\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u19da\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215f\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua830-\ua835\U00010107-\U00010133\U00010175-\U00010178\U0001018a-\U0001018b\U000102e1-\U000102fb\U00010320-\U00010323\U00010858-\U0001085f\U00010879-\U0001087f\U000108a7-\U000108af\U000108fb-\U000108ff\U00010916-\U0001091b\U000109bc-\U000109bd\U000109c0-\U000109cf\U000109d2-\U000109ff\U00010a40-\U00010a48\U00010a7d-\U00010a7e\U00010a9d-\U00010a9f\U00010aeb-\U00010aef\U00010b58-\U00010b5f\U00010b78-\U00010b7f\U00010ba9-\U00010baf\U00010cfa-\U00010cff\U00010e60-\U00010e7e\U00010f1d-\U00010f26\U00010f51-\U00010f54\U00011052-\U00011065\U000111e1-\U000111f4\U0001173a-\U0001173b\U000118ea-\U000118f2\U00011c5a-\U00011c6c\U00016b5b-\U00016b61\U00016e80-\U00016e96\U0001d2e0-\U0001d2f3\U0001d360-\U0001d378\U0001e8c7-\U0001e8cf\U0001ec71-\U0001ecab\U0001ecad-\U0001ecaf\U0001ecb1-\U0001ecb4\U0001f100-\U0001f10c' - -Pc = '_\u203f-\u2040\u2054\ufe33-\ufe34\ufe4d-\ufe4f\uff3f' - -Pd = '\\-\u058a\u05be\u1400\u1806\u2010-\u2015\u2e17\u2e1a\u2e3a-\u2e3b\u2e40\u301c\u3030\u30a0\ufe31-\ufe32\ufe58\ufe63\uff0d' - -Pe = ')\\]}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u2309\u230b\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u27ed\u27ef\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u2e23\u2e25\u2e27\u2e29\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e-\u301f\ufd3e\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63' - -Pf = '\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d\u2e21' - -Pi = '\xab\u2018\u201b-\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c\u2e20' - -Po = "!-#%-'*,.-/:-;?-@\\\\\xa1\xa7\xb6-\xb7\xbf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3-\u05f4\u0609-\u060a\u060c-\u060d\u061b\u061e-\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964-\u0965\u0970\u09fd\u0a76\u0af0\u0c84\u0df4\u0e4f\u0e5a-\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9-\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d-\u166e\u16eb-\u16ed\u1735-\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944-\u1945\u1a1e-\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e-\u1c7f\u1cc0-\u1cc7\u1cd3\u2016-\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe-\u2cff\u2d70\u2e00-\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18-\u2e19\u2e1b\u2e1e-\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u2e3c-\u2e3f\u2e41\u2e43-\u2e4e\u3001-\u3003\u303d\u30fb\ua4fe-\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce-\ua8cf\ua8f8-\ua8fa\ua8fc\ua92e-\ua92f\ua95f\ua9c1-\ua9cd\ua9de-\ua9df\uaa5c-\uaa5f\uaade-\uaadf\uaaf0-\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45-\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a-\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e-\uff0f\uff1a-\uff1b\uff1f-\uff20\uff3c\uff61\uff64-\uff65\U00010100-\U00010102\U0001039f\U000103d0\U0001056f\U00010857\U0001091f\U0001093f\U00010a50-\U00010a58\U00010a7f\U00010af0-\U00010af6\U00010b39-\U00010b3f\U00010b99-\U00010b9c\U00010f55-\U00010f59\U00011047-\U0001104d\U000110bb-\U000110bc\U000110be-\U000110c1\U00011140-\U00011143\U00011174-\U00011175\U000111c5-\U000111c8\U000111cd\U000111db\U000111dd-\U000111df\U00011238-\U0001123d\U000112a9\U0001144b-\U0001144f\U0001145b\U0001145d\U000114c6\U000115c1-\U000115d7\U00011641-\U00011643\U00011660-\U0001166c\U0001173c-\U0001173e\U0001183b\U00011a3f-\U00011a46\U00011a9a-\U00011a9c\U00011a9e-\U00011aa2\U00011c41-\U00011c45\U00011c70-\U00011c71\U00011ef7-\U00011ef8\U00012470-\U00012474\U00016a6e-\U00016a6f\U00016af5\U00016b37-\U00016b3b\U00016b44\U00016e97-\U00016e9a\U0001bc9f\U0001da87-\U0001da8b\U0001e95e-\U0001e95f" - -Ps = '(\\[{\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2308\u230a\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u27ec\u27ee\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u2e22\u2e24\u2e26\u2e28\u2e42\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3f\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62' - -Sc = '$\xa2-\xa5\u058f\u060b\u07fe-\u07ff\u09f2-\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20bf\ua838\ufdfc\ufe69\uff04\uffe0-\uffe1\uffe5-\uffe6\U0001ecb0' - -Sk = '\\^`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384-\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd-\u1ffe\u309b-\u309c\ua700-\ua716\ua720-\ua721\ua789-\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3\U0001f3fb-\U0001f3ff' - -Sm = '+<->|~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a-\u219b\u21a0\u21a3\u21a6\u21ae\u21ce-\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320-\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec\U0001d6c1\U0001d6db\U0001d6fb\U0001d715\U0001d735\U0001d74f\U0001d76f\U0001d789\U0001d7a9\U0001d7c3\U0001eef0-\U0001eef1' - -So = '\xa6\xa9\xae\xb0\u0482\u058d-\u058e\u060e-\u060f\u06de\u06e9\u06fd-\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce-\u0fcf\u0fd5-\u0fd8\u109e-\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100-\u2101\u2103-\u2106\u2108-\u2109\u2114\u2116-\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a-\u213b\u214a\u214c-\u214d\u214f\u218a-\u218b\u2195-\u2199\u219c-\u219f\u21a1-\u21a2\u21a4-\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0-\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45-\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bc8\u2bca-\u2bfe\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012-\u3013\u3020\u3036-\u3037\u303e-\u303f\u3190-\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836-\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed-\uffee\ufffc-\ufffd\U00010137-\U0001013f\U00010179-\U00010189\U0001018c-\U0001018e\U00010190-\U0001019b\U000101a0\U000101d0-\U000101fc\U00010877-\U00010878\U00010ac8\U0001173f\U00016b3c-\U00016b3f\U00016b45\U0001bc9c\U0001d000-\U0001d0f5\U0001d100-\U0001d126\U0001d129-\U0001d164\U0001d16a-\U0001d16c\U0001d183-\U0001d184\U0001d18c-\U0001d1a9\U0001d1ae-\U0001d1e8\U0001d200-\U0001d241\U0001d245\U0001d300-\U0001d356\U0001d800-\U0001d9ff\U0001da37-\U0001da3a\U0001da6d-\U0001da74\U0001da76-\U0001da83\U0001da85-\U0001da86\U0001ecac\U0001f000-\U0001f02b\U0001f030-\U0001f093\U0001f0a0-\U0001f0ae\U0001f0b1-\U0001f0bf\U0001f0c1-\U0001f0cf\U0001f0d1-\U0001f0f5\U0001f110-\U0001f16b\U0001f170-\U0001f1ac\U0001f1e6-\U0001f202\U0001f210-\U0001f23b\U0001f240-\U0001f248\U0001f250-\U0001f251\U0001f260-\U0001f265\U0001f300-\U0001f3fa\U0001f400-\U0001f6d4\U0001f6e0-\U0001f6ec\U0001f6f0-\U0001f6f9\U0001f700-\U0001f773\U0001f780-\U0001f7d8\U0001f800-\U0001f80b\U0001f810-\U0001f847\U0001f850-\U0001f859\U0001f860-\U0001f887\U0001f890-\U0001f8ad\U0001f900-\U0001f90b\U0001f910-\U0001f93e\U0001f940-\U0001f970\U0001f973-\U0001f976\U0001f97a\U0001f97c-\U0001f9a2\U0001f9b0-\U0001f9b9\U0001f9c0-\U0001f9c2\U0001f9d0-\U0001f9ff\U0001fa60-\U0001fa6d' - -Zl = '\u2028' - -Zp = '\u2029' - -Zs = ' \xa0\u1680\u2000-\u200a\u202f\u205f\u3000' - -xid_continue = '0-9A-Z_a-z\xaa\xb5\xb7\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037b-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa-\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cf9\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7b9\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufc5d\ufc64-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdf9\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe71\ufe73\ufe77\ufe79\ufe7b\ufe7d\ufe7f-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc\U00010000-\U0001000b\U0001000d-\U00010026\U00010028-\U0001003a\U0001003c-\U0001003d\U0001003f-\U0001004d\U00010050-\U0001005d\U00010080-\U000100fa\U00010140-\U00010174\U000101fd\U00010280-\U0001029c\U000102a0-\U000102d0\U000102e0\U00010300-\U0001031f\U0001032d-\U0001034a\U00010350-\U0001037a\U00010380-\U0001039d\U000103a0-\U000103c3\U000103c8-\U000103cf\U000103d1-\U000103d5\U00010400-\U0001049d\U000104a0-\U000104a9\U000104b0-\U000104d3\U000104d8-\U000104fb\U00010500-\U00010527\U00010530-\U00010563\U00010600-\U00010736\U00010740-\U00010755\U00010760-\U00010767\U00010800-\U00010805\U00010808\U0001080a-\U00010835\U00010837-\U00010838\U0001083c\U0001083f-\U00010855\U00010860-\U00010876\U00010880-\U0001089e\U000108e0-\U000108f2\U000108f4-\U000108f5\U00010900-\U00010915\U00010920-\U00010939\U00010980-\U000109b7\U000109be-\U000109bf\U00010a00-\U00010a03\U00010a05-\U00010a06\U00010a0c-\U00010a13\U00010a15-\U00010a17\U00010a19-\U00010a35\U00010a38-\U00010a3a\U00010a3f\U00010a60-\U00010a7c\U00010a80-\U00010a9c\U00010ac0-\U00010ac7\U00010ac9-\U00010ae6\U00010b00-\U00010b35\U00010b40-\U00010b55\U00010b60-\U00010b72\U00010b80-\U00010b91\U00010c00-\U00010c48\U00010c80-\U00010cb2\U00010cc0-\U00010cf2\U00010d00-\U00010d27\U00010d30-\U00010d39\U00010f00-\U00010f1c\U00010f27\U00010f30-\U00010f50\U00011000-\U00011046\U00011066-\U0001106f\U0001107f-\U000110ba\U000110d0-\U000110e8\U000110f0-\U000110f9\U00011100-\U00011134\U00011136-\U0001113f\U00011144-\U00011146\U00011150-\U00011173\U00011176\U00011180-\U000111c4\U000111c9-\U000111cc\U000111d0-\U000111da\U000111dc\U00011200-\U00011211\U00011213-\U00011237\U0001123e\U00011280-\U00011286\U00011288\U0001128a-\U0001128d\U0001128f-\U0001129d\U0001129f-\U000112a8\U000112b0-\U000112ea\U000112f0-\U000112f9\U00011300-\U00011303\U00011305-\U0001130c\U0001130f-\U00011310\U00011313-\U00011328\U0001132a-\U00011330\U00011332-\U00011333\U00011335-\U00011339\U0001133b-\U00011344\U00011347-\U00011348\U0001134b-\U0001134d\U00011350\U00011357\U0001135d-\U00011363\U00011366-\U0001136c\U00011370-\U00011374\U00011400-\U0001144a\U00011450-\U00011459\U0001145e\U00011480-\U000114c5\U000114c7\U000114d0-\U000114d9\U00011580-\U000115b5\U000115b8-\U000115c0\U000115d8-\U000115dd\U00011600-\U00011640\U00011644\U00011650-\U00011659\U00011680-\U000116b7\U000116c0-\U000116c9\U00011700-\U0001171a\U0001171d-\U0001172b\U00011730-\U00011739\U00011800-\U0001183a\U000118a0-\U000118e9\U000118ff\U00011a00-\U00011a3e\U00011a47\U00011a50-\U00011a83\U00011a86-\U00011a99\U00011a9d\U00011ac0-\U00011af8\U00011c00-\U00011c08\U00011c0a-\U00011c36\U00011c38-\U00011c40\U00011c50-\U00011c59\U00011c72-\U00011c8f\U00011c92-\U00011ca7\U00011ca9-\U00011cb6\U00011d00-\U00011d06\U00011d08-\U00011d09\U00011d0b-\U00011d36\U00011d3a\U00011d3c-\U00011d3d\U00011d3f-\U00011d47\U00011d50-\U00011d59\U00011d60-\U00011d65\U00011d67-\U00011d68\U00011d6a-\U00011d8e\U00011d90-\U00011d91\U00011d93-\U00011d98\U00011da0-\U00011da9\U00011ee0-\U00011ef6\U00012000-\U00012399\U00012400-\U0001246e\U00012480-\U00012543\U00013000-\U0001342e\U00014400-\U00014646\U00016800-\U00016a38\U00016a40-\U00016a5e\U00016a60-\U00016a69\U00016ad0-\U00016aed\U00016af0-\U00016af4\U00016b00-\U00016b36\U00016b40-\U00016b43\U00016b50-\U00016b59\U00016b63-\U00016b77\U00016b7d-\U00016b8f\U00016e40-\U00016e7f\U00016f00-\U00016f44\U00016f50-\U00016f7e\U00016f8f-\U00016f9f\U00016fe0-\U00016fe1\U00017000-\U000187f1\U00018800-\U00018af2\U0001b000-\U0001b11e\U0001b170-\U0001b2fb\U0001bc00-\U0001bc6a\U0001bc70-\U0001bc7c\U0001bc80-\U0001bc88\U0001bc90-\U0001bc99\U0001bc9d-\U0001bc9e\U0001d165-\U0001d169\U0001d16d-\U0001d172\U0001d17b-\U0001d182\U0001d185-\U0001d18b\U0001d1aa-\U0001d1ad\U0001d242-\U0001d244\U0001d400-\U0001d454\U0001d456-\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b9\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d51e-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546\U0001d54a-\U0001d550\U0001d552-\U0001d6a5\U0001d6a8-\U0001d6c0\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6fa\U0001d6fc-\U0001d714\U0001d716-\U0001d734\U0001d736-\U0001d74e\U0001d750-\U0001d76e\U0001d770-\U0001d788\U0001d78a-\U0001d7a8\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7cb\U0001d7ce-\U0001d7ff\U0001da00-\U0001da36\U0001da3b-\U0001da6c\U0001da75\U0001da84\U0001da9b-\U0001da9f\U0001daa1-\U0001daaf\U0001e000-\U0001e006\U0001e008-\U0001e018\U0001e01b-\U0001e021\U0001e023-\U0001e024\U0001e026-\U0001e02a\U0001e800-\U0001e8c4\U0001e8d0-\U0001e8d6\U0001e900-\U0001e94a\U0001e950-\U0001e959\U0001ee00-\U0001ee03\U0001ee05-\U0001ee1f\U0001ee21-\U0001ee22\U0001ee24\U0001ee27\U0001ee29-\U0001ee32\U0001ee34-\U0001ee37\U0001ee39\U0001ee3b\U0001ee42\U0001ee47\U0001ee49\U0001ee4b\U0001ee4d-\U0001ee4f\U0001ee51-\U0001ee52\U0001ee54\U0001ee57\U0001ee59\U0001ee5b\U0001ee5d\U0001ee5f\U0001ee61-\U0001ee62\U0001ee64\U0001ee67-\U0001ee6a\U0001ee6c-\U0001ee72\U0001ee74-\U0001ee77\U0001ee79-\U0001ee7c\U0001ee7e\U0001ee80-\U0001ee89\U0001ee8b-\U0001ee9b\U0001eea1-\U0001eea3\U0001eea5-\U0001eea9\U0001eeab-\U0001eebb\U00020000-\U0002a6d6\U0002a700-\U0002b734\U0002b740-\U0002b81d\U0002b820-\U0002cea1\U0002ceb0-\U0002ebe0\U0002f800-\U0002fa1d\U000e0100-\U000e01ef' - -xid_start = 'A-Z_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037b-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa-\u0eab\u0ead-\u0eb0\u0eb2\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5-\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7b9\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufc5d\ufc64-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdf9\ufe71\ufe73\ufe77\ufe79\ufe7b\ufe7d\ufe7f-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc\U00010000-\U0001000b\U0001000d-\U00010026\U00010028-\U0001003a\U0001003c-\U0001003d\U0001003f-\U0001004d\U00010050-\U0001005d\U00010080-\U000100fa\U00010140-\U00010174\U00010280-\U0001029c\U000102a0-\U000102d0\U00010300-\U0001031f\U0001032d-\U0001034a\U00010350-\U00010375\U00010380-\U0001039d\U000103a0-\U000103c3\U000103c8-\U000103cf\U000103d1-\U000103d5\U00010400-\U0001049d\U000104b0-\U000104d3\U000104d8-\U000104fb\U00010500-\U00010527\U00010530-\U00010563\U00010600-\U00010736\U00010740-\U00010755\U00010760-\U00010767\U00010800-\U00010805\U00010808\U0001080a-\U00010835\U00010837-\U00010838\U0001083c\U0001083f-\U00010855\U00010860-\U00010876\U00010880-\U0001089e\U000108e0-\U000108f2\U000108f4-\U000108f5\U00010900-\U00010915\U00010920-\U00010939\U00010980-\U000109b7\U000109be-\U000109bf\U00010a00\U00010a10-\U00010a13\U00010a15-\U00010a17\U00010a19-\U00010a35\U00010a60-\U00010a7c\U00010a80-\U00010a9c\U00010ac0-\U00010ac7\U00010ac9-\U00010ae4\U00010b00-\U00010b35\U00010b40-\U00010b55\U00010b60-\U00010b72\U00010b80-\U00010b91\U00010c00-\U00010c48\U00010c80-\U00010cb2\U00010cc0-\U00010cf2\U00010d00-\U00010d23\U00010f00-\U00010f1c\U00010f27\U00010f30-\U00010f45\U00011003-\U00011037\U00011083-\U000110af\U000110d0-\U000110e8\U00011103-\U00011126\U00011144\U00011150-\U00011172\U00011176\U00011183-\U000111b2\U000111c1-\U000111c4\U000111da\U000111dc\U00011200-\U00011211\U00011213-\U0001122b\U00011280-\U00011286\U00011288\U0001128a-\U0001128d\U0001128f-\U0001129d\U0001129f-\U000112a8\U000112b0-\U000112de\U00011305-\U0001130c\U0001130f-\U00011310\U00011313-\U00011328\U0001132a-\U00011330\U00011332-\U00011333\U00011335-\U00011339\U0001133d\U00011350\U0001135d-\U00011361\U00011400-\U00011434\U00011447-\U0001144a\U00011480-\U000114af\U000114c4-\U000114c5\U000114c7\U00011580-\U000115ae\U000115d8-\U000115db\U00011600-\U0001162f\U00011644\U00011680-\U000116aa\U00011700-\U0001171a\U00011800-\U0001182b\U000118a0-\U000118df\U000118ff\U00011a00\U00011a0b-\U00011a32\U00011a3a\U00011a50\U00011a5c-\U00011a83\U00011a86-\U00011a89\U00011a9d\U00011ac0-\U00011af8\U00011c00-\U00011c08\U00011c0a-\U00011c2e\U00011c40\U00011c72-\U00011c8f\U00011d00-\U00011d06\U00011d08-\U00011d09\U00011d0b-\U00011d30\U00011d46\U00011d60-\U00011d65\U00011d67-\U00011d68\U00011d6a-\U00011d89\U00011d98\U00011ee0-\U00011ef2\U00012000-\U00012399\U00012400-\U0001246e\U00012480-\U00012543\U00013000-\U0001342e\U00014400-\U00014646\U00016800-\U00016a38\U00016a40-\U00016a5e\U00016ad0-\U00016aed\U00016b00-\U00016b2f\U00016b40-\U00016b43\U00016b63-\U00016b77\U00016b7d-\U00016b8f\U00016e40-\U00016e7f\U00016f00-\U00016f44\U00016f50\U00016f93-\U00016f9f\U00016fe0-\U00016fe1\U00017000-\U000187f1\U00018800-\U00018af2\U0001b000-\U0001b11e\U0001b170-\U0001b2fb\U0001bc00-\U0001bc6a\U0001bc70-\U0001bc7c\U0001bc80-\U0001bc88\U0001bc90-\U0001bc99\U0001d400-\U0001d454\U0001d456-\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b9\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d51e-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546\U0001d54a-\U0001d550\U0001d552-\U0001d6a5\U0001d6a8-\U0001d6c0\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6fa\U0001d6fc-\U0001d714\U0001d716-\U0001d734\U0001d736-\U0001d74e\U0001d750-\U0001d76e\U0001d770-\U0001d788\U0001d78a-\U0001d7a8\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7cb\U0001e800-\U0001e8c4\U0001e900-\U0001e943\U0001ee00-\U0001ee03\U0001ee05-\U0001ee1f\U0001ee21-\U0001ee22\U0001ee24\U0001ee27\U0001ee29-\U0001ee32\U0001ee34-\U0001ee37\U0001ee39\U0001ee3b\U0001ee42\U0001ee47\U0001ee49\U0001ee4b\U0001ee4d-\U0001ee4f\U0001ee51-\U0001ee52\U0001ee54\U0001ee57\U0001ee59\U0001ee5b\U0001ee5d\U0001ee5f\U0001ee61-\U0001ee62\U0001ee64\U0001ee67-\U0001ee6a\U0001ee6c-\U0001ee72\U0001ee74-\U0001ee77\U0001ee79-\U0001ee7c\U0001ee7e\U0001ee80-\U0001ee89\U0001ee8b-\U0001ee9b\U0001eea1-\U0001eea3\U0001eea5-\U0001eea9\U0001eeab-\U0001eebb\U00020000-\U0002a6d6\U0002a700-\U0002b734\U0002b740-\U0002b81d\U0002b820-\U0002cea1\U0002ceb0-\U0002ebe0\U0002f800-\U0002fa1d' - -cats = ['Cc', 'Cf', 'Cn', 'Co', 'Cs', 'Ll', 'Lm', 'Lo', 'Lt', 'Lu', 'Mc', 'Me', 'Mn', 'Nd', 'Nl', 'No', 'Pc', 'Pd', 'Pe', 'Pf', 'Pi', 'Po', 'Ps', 'Sc', 'Sk', 'Sm', 'So', 'Zl', 'Zp', 'Zs'] - -# Generated from unidata 11.0.0 - -def combine(*args): - return ''.join(globals()[cat] for cat in args) - - -def allexcept(*args): - newcats = cats[:] - for arg in args: - newcats.remove(arg) - return ''.join(globals()[cat] for cat in newcats) - - -def _handle_runs(char_list): # pragma: no cover - buf = [] - for c in char_list: - if len(c) == 1: - if buf and buf[-1][1] == chr(ord(c)-1): - buf[-1] = (buf[-1][0], c) - else: - buf.append((c, c)) - else: - buf.append((c, c)) - for a, b in buf: - if a == b: - yield a - else: - yield f'{a}-{b}' - - -if __name__ == '__main__': # pragma: no cover - import unicodedata - - categories = {'xid_start': [], 'xid_continue': []} - - with open(__file__, encoding='utf-8') as fp: - content = fp.read() - - header = content[:content.find('Cc =')] - footer = content[content.find("def combine("):] - - for code in range(0x110000): - c = chr(code) - cat = unicodedata.category(c) - if ord(c) == 0xdc00: - # Hack to avoid combining this combining with the preceding high - # surrogate, 0xdbff, when doing a repr. - c = '\\' + c - elif ord(c) in (0x2d, 0x5b, 0x5c, 0x5d, 0x5e): - # Escape regex metachars. - c = '\\' + c - categories.setdefault(cat, []).append(c) - # XID_START and XID_CONTINUE are special categories used for matching - # identifiers in Python 3. - if c.isidentifier(): - categories['xid_start'].append(c) - if ('a' + c).isidentifier(): - categories['xid_continue'].append(c) - - with open(__file__, 'w', encoding='utf-8') as fp: - fp.write(header) - - for cat in sorted(categories): - val = ''.join(_handle_runs(categories[cat])) - fp.write(f'{cat} = {val!a}\n\n') - - cats = sorted(categories) - cats.remove('xid_start') - cats.remove('xid_continue') - fp.write(f'cats = {cats!r}\n\n') - - fp.write(f'# Generated from unidata {unicodedata.unidata_version}\n\n') - - fp.write(footer) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/util.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/util.py deleted file mode 100644 index 71c5710ae..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pygments/util.py +++ /dev/null @@ -1,324 +0,0 @@ -""" - pygments.util - ~~~~~~~~~~~~~ - - Utility functions. - - :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -from io import TextIOWrapper - - -split_path_re = re.compile(r'[/\\ ]') -doctype_lookup_re = re.compile(r''' - <!DOCTYPE\s+( - [a-zA-Z_][a-zA-Z0-9]* - (?: \s+ # optional in HTML5 - [a-zA-Z_][a-zA-Z0-9]*\s+ - "[^"]*")? - ) - [^>]*> -''', re.DOTALL | re.MULTILINE | re.VERBOSE) -tag_re = re.compile(r'<(.+?)(\s.*?)?>.*?</.+?>', - re.IGNORECASE | re.DOTALL | re.MULTILINE) -xml_decl_re = re.compile(r'\s*<\?xml[^>]*\?>', re.I) - - -class ClassNotFound(ValueError): - """Raised if one of the lookup functions didn't find a matching class.""" - - -class OptionError(Exception): - """ - This exception will be raised by all option processing functions if - the type or value of the argument is not correct. - """ - -def get_choice_opt(options, optname, allowed, default=None, normcase=False): - """ - If the key `optname` from the dictionary is not in the sequence - `allowed`, raise an error, otherwise return it. - """ - string = options.get(optname, default) - if normcase: - string = string.lower() - if string not in allowed: - raise OptionError('Value for option {} must be one of {}'.format(optname, ', '.join(map(str, allowed)))) - return string - - -def get_bool_opt(options, optname, default=None): - """ - Intuitively, this is `options.get(optname, default)`, but restricted to - Boolean value. The Booleans can be represented as string, in order to accept - Boolean value from the command line arguments. If the key `optname` is - present in the dictionary `options` and is not associated with a Boolean, - raise an `OptionError`. If it is absent, `default` is returned instead. - - The valid string values for ``True`` are ``1``, ``yes``, ``true`` and - ``on``, the ones for ``False`` are ``0``, ``no``, ``false`` and ``off`` - (matched case-insensitively). - """ - string = options.get(optname, default) - if isinstance(string, bool): - return string - elif isinstance(string, int): - return bool(string) - elif not isinstance(string, str): - raise OptionError(f'Invalid type {string!r} for option {optname}; use ' - '1/0, yes/no, true/false, on/off') - elif string.lower() in ('1', 'yes', 'true', 'on'): - return True - elif string.lower() in ('0', 'no', 'false', 'off'): - return False - else: - raise OptionError(f'Invalid value {string!r} for option {optname}; use ' - '1/0, yes/no, true/false, on/off') - - -def get_int_opt(options, optname, default=None): - """As :func:`get_bool_opt`, but interpret the value as an integer.""" - string = options.get(optname, default) - try: - return int(string) - except TypeError: - raise OptionError(f'Invalid type {string!r} for option {optname}; you ' - 'must give an integer value') - except ValueError: - raise OptionError(f'Invalid value {string!r} for option {optname}; you ' - 'must give an integer value') - -def get_list_opt(options, optname, default=None): - """ - If the key `optname` from the dictionary `options` is a string, - split it at whitespace and return it. If it is already a list - or a tuple, it is returned as a list. - """ - val = options.get(optname, default) - if isinstance(val, str): - return val.split() - elif isinstance(val, (list, tuple)): - return list(val) - else: - raise OptionError(f'Invalid type {val!r} for option {optname}; you ' - 'must give a list value') - - -def docstring_headline(obj): - if not obj.__doc__: - return '' - res = [] - for line in obj.__doc__.strip().splitlines(): - if line.strip(): - res.append(" " + line.strip()) - else: - break - return ''.join(res).lstrip() - - -def make_analysator(f): - """Return a static text analyser function that returns float values.""" - def text_analyse(text): - try: - rv = f(text) - except Exception: - return 0.0 - if not rv: - return 0.0 - try: - return min(1.0, max(0.0, float(rv))) - except (ValueError, TypeError): - return 0.0 - text_analyse.__doc__ = f.__doc__ - return staticmethod(text_analyse) - - -def shebang_matches(text, regex): - r"""Check if the given regular expression matches the last part of the - shebang if one exists. - - >>> from pygments.util import shebang_matches - >>> shebang_matches('#!/usr/bin/env python', r'python(2\.\d)?') - True - >>> shebang_matches('#!/usr/bin/python2.4', r'python(2\.\d)?') - True - >>> shebang_matches('#!/usr/bin/python-ruby', r'python(2\.\d)?') - False - >>> shebang_matches('#!/usr/bin/python/ruby', r'python(2\.\d)?') - False - >>> shebang_matches('#!/usr/bin/startsomethingwith python', - ... r'python(2\.\d)?') - True - - It also checks for common windows executable file extensions:: - - >>> shebang_matches('#!C:\\Python2.4\\Python.exe', r'python(2\.\d)?') - True - - Parameters (``'-f'`` or ``'--foo'`` are ignored so ``'perl'`` does - the same as ``'perl -e'``) - - Note that this method automatically searches the whole string (eg: - the regular expression is wrapped in ``'^$'``) - """ - index = text.find('\n') - if index >= 0: - first_line = text[:index].lower() - else: - first_line = text.lower() - if first_line.startswith('#!'): - try: - found = [x for x in split_path_re.split(first_line[2:].strip()) - if x and not x.startswith('-')][-1] - except IndexError: - return False - regex = re.compile(rf'^{regex}(\.(exe|cmd|bat|bin))?$', re.IGNORECASE) - if regex.search(found) is not None: - return True - return False - - -def doctype_matches(text, regex): - """Check if the doctype matches a regular expression (if present). - - Note that this method only checks the first part of a DOCTYPE. - eg: 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' - """ - m = doctype_lookup_re.search(text) - if m is None: - return False - doctype = m.group(1) - return re.compile(regex, re.I).match(doctype.strip()) is not None - - -def html_doctype_matches(text): - """Check if the file looks like it has a html doctype.""" - return doctype_matches(text, r'html') - - -_looks_like_xml_cache = {} - - -def looks_like_xml(text): - """Check if a doctype exists or if we have some tags.""" - if xml_decl_re.match(text): - return True - key = hash(text) - try: - return _looks_like_xml_cache[key] - except KeyError: - m = doctype_lookup_re.search(text) - if m is not None: - return True - rv = tag_re.search(text[:1000]) is not None - _looks_like_xml_cache[key] = rv - return rv - - -def surrogatepair(c): - """Given a unicode character code with length greater than 16 bits, - return the two 16 bit surrogate pair. - """ - # From example D28 of: - # http://www.unicode.org/book/ch03.pdf - return (0xd7c0 + (c >> 10), (0xdc00 + (c & 0x3ff))) - - -def format_lines(var_name, seq, raw=False, indent_level=0): - """Formats a sequence of strings for output.""" - lines = [] - base_indent = ' ' * indent_level * 4 - inner_indent = ' ' * (indent_level + 1) * 4 - lines.append(base_indent + var_name + ' = (') - if raw: - # These should be preformatted reprs of, say, tuples. - for i in seq: - lines.append(inner_indent + i + ',') - else: - for i in seq: - # Force use of single quotes - r = repr(i + '"') - lines.append(inner_indent + r[:-2] + r[-1] + ',') - lines.append(base_indent + ')') - return '\n'.join(lines) - - -def duplicates_removed(it, already_seen=()): - """ - Returns a list with duplicates removed from the iterable `it`. - - Order is preserved. - """ - lst = [] - seen = set() - for i in it: - if i in seen or i in already_seen: - continue - lst.append(i) - seen.add(i) - return lst - - -class Future: - """Generic class to defer some work. - - Handled specially in RegexLexerMeta, to support regex string construction at - first use. - """ - def get(self): - raise NotImplementedError - - -def guess_decode(text): - """Decode *text* with guessed encoding. - - First try UTF-8; this should fail for non-UTF-8 encodings. - Then try the preferred locale encoding. - Fall back to latin-1, which always works. - """ - try: - text = text.decode('utf-8') - return text, 'utf-8' - except UnicodeDecodeError: - try: - import locale - prefencoding = locale.getpreferredencoding() - text = text.decode() - return text, prefencoding - except (UnicodeDecodeError, LookupError): - text = text.decode('latin1') - return text, 'latin1' - - -def guess_decode_from_terminal(text, term): - """Decode *text* coming from terminal *term*. - - First try the terminal encoding, if given. - Then try UTF-8. Then try the preferred locale encoding. - Fall back to latin-1, which always works. - """ - if getattr(term, 'encoding', None): - try: - text = text.decode(term.encoding) - except UnicodeDecodeError: - pass - else: - return text, term.encoding - return guess_decode(text) - - -def terminal_encoding(term): - """Return our best guess of encoding for the given *term*.""" - if getattr(term, 'encoding', None): - return term.encoding - import locale - return locale.getpreferredencoding() - - -class UnclosingTextIOWrapper(TextIOWrapper): - # Don't close underlying buffer on destruction. - def close(self): - self.flush() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE deleted file mode 100644 index b0ae9dbc2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Thomas Kluyver - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py deleted file mode 100644 index 746b89f7e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Wrappers to call pyproject.toml-based build backend hooks. -""" - -from typing import TYPE_CHECKING - -from ._impl import ( - BackendUnavailable, - BuildBackendHookCaller, - HookMissing, - UnsupportedOperation, - default_subprocess_runner, - quiet_subprocess_runner, -) - -__version__ = "1.2.0" -__all__ = [ - "BackendUnavailable", - "BackendInvalid", - "HookMissing", - "UnsupportedOperation", - "default_subprocess_runner", - "quiet_subprocess_runner", - "BuildBackendHookCaller", -] - -BackendInvalid = BackendUnavailable # Deprecated alias, previously a separate exception - -if TYPE_CHECKING: - from ._impl import SubprocessRunner - - __all__ += ["SubprocessRunner"] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 2509a12794f5a3a56a5dd7ff9a5ca77f1a0529f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmZuvL2J}N6rRaulWpT}+qF~#p{o_jqMPk%5v$^%OKBFhEwM#}w8QLXY{zDkI5Vkk zPmBM+pW#vbBSr8M5Cji;Y%S8OFLCXu59XVh%=^B4Z{FOhl*bXomruX=XAPkr+2()1 zK9AEwn1;wj3hf{lcd(-=Z5HidSL+lUUFl9y6&*tvj;Tziq)N`18k<FKL5<tUHP^AS zwsm!BTbmyV`j-*9mhpAqmsNQdZCh^9#<$C(1elcN8gnQc_0r+P7lOty6SAhFT8{=n zEgr-odd+&uR#87_bg5*1t())wkoNXj=-2k5XkXgnb)1$rUv8|BwzJZH(pg)r8)<d< zU(QxY4=4|4H(=?^a>gDVIKXYgf0#(EZ2gQ&$-~`rdMlJk97jSie;o`_#iKC2>a$lg z2^5h@7i{&Iltd(92<$6w63#9-I4rj8JN5#Yn|yvwa&wLtgYwtvrYOLiRz{9G;Q<Y} zFN*L{7#Wxulrqo(>Xp<a#E*J}q=p*A;8tV}OpAo~;~*Ey6E9LoEkX|9dZ8GggASBV zh{&Es?&c#pg(XTqv>$j|5)wV?GtpXFTJYXRV&5C}LVCR*O8l%D4IXj@AXR>gjh44D zP<v5$x3x$X$-Dda$R-0@R57CZvG<gBJ;@bo#LyVJ%cK|cxCx#@KN8LJW|O?9O+qqt zLhN{umLByZKMB}l0gnn{7;+WhxPUP}(J<Ek7zkfK(@m_MA%Np5nwS|{zqOL34b9_e kRJ}Q@{47j<)91hI*3smRqlvk%`rP}~6BFrEVhXhW0`!~aGynhq diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-314.pyc deleted file mode 100644 index 848dfde8f0dcefd22629235fa3738ba8a10eec93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21748 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 Q8*|z^7w~;L{d)rc9~7H_m;e9( diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py deleted file mode 100644 index d1e9d7bb8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +++ /dev/null @@ -1,410 +0,0 @@ -import json -import os -import sys -import tempfile -from contextlib import contextmanager -from os.path import abspath -from os.path import join as pjoin -from subprocess import STDOUT, check_call, check_output -from typing import TYPE_CHECKING, Any, Iterator, Mapping, Optional, Sequence - -from ._in_process import _in_proc_script_path - -if TYPE_CHECKING: - from typing import Protocol - - class SubprocessRunner(Protocol): - """A protocol for the subprocess runner.""" - - def __call__( - self, - cmd: Sequence[str], - cwd: Optional[str] = None, - extra_environ: Optional[Mapping[str, str]] = None, - ) -> None: - ... - - -def write_json(obj: Mapping[str, Any], path: str, **kwargs) -> None: - with open(path, "w", encoding="utf-8") as f: - json.dump(obj, f, **kwargs) - - -def read_json(path: str) -> Mapping[str, Any]: - with open(path, encoding="utf-8") as f: - return json.load(f) - - -class BackendUnavailable(Exception): - """Will be raised if the backend cannot be imported in the hook process.""" - - def __init__( - self, - traceback: str, - message: Optional[str] = None, - backend_name: Optional[str] = None, - backend_path: Optional[Sequence[str]] = None, - ) -> None: - # Preserving arg order for the sake of API backward compatibility. - self.backend_name = backend_name - self.backend_path = backend_path - self.traceback = traceback - super().__init__(message or "Error while importing backend") - - -class HookMissing(Exception): - """Will be raised on missing hooks (if a fallback can't be used).""" - - def __init__(self, hook_name: str) -> None: - super().__init__(hook_name) - self.hook_name = hook_name - - -class UnsupportedOperation(Exception): - """May be raised by build_sdist if the backend indicates that it can't.""" - - def __init__(self, traceback: str) -> None: - self.traceback = traceback - - -def default_subprocess_runner( - cmd: Sequence[str], - cwd: Optional[str] = None, - extra_environ: Optional[Mapping[str, str]] = None, -) -> None: - """The default method of calling the wrapper subprocess. - - This uses :func:`subprocess.check_call` under the hood. - """ - env = os.environ.copy() - if extra_environ: - env.update(extra_environ) - - check_call(cmd, cwd=cwd, env=env) - - -def quiet_subprocess_runner( - cmd: Sequence[str], - cwd: Optional[str] = None, - extra_environ: Optional[Mapping[str, str]] = None, -) -> None: - """Call the subprocess while suppressing output. - - This uses :func:`subprocess.check_output` under the hood. - """ - env = os.environ.copy() - if extra_environ: - env.update(extra_environ) - - check_output(cmd, cwd=cwd, env=env, stderr=STDOUT) - - -def norm_and_check(source_tree: str, requested: str) -> str: - """Normalise and check a backend path. - - Ensure that the requested backend path is specified as a relative path, - and resolves to a location under the given source tree. - - Return an absolute version of the requested path. - """ - if os.path.isabs(requested): - raise ValueError("paths must be relative") - - abs_source = os.path.abspath(source_tree) - abs_requested = os.path.normpath(os.path.join(abs_source, requested)) - # We have to use commonprefix for Python 2.7 compatibility. So we - # normalise case to avoid problems because commonprefix is a character - # based comparison :-( - norm_source = os.path.normcase(abs_source) - norm_requested = os.path.normcase(abs_requested) - if os.path.commonprefix([norm_source, norm_requested]) != norm_source: - raise ValueError("paths must be inside source tree") - - return abs_requested - - -class BuildBackendHookCaller: - """A wrapper to call the build backend hooks for a source directory.""" - - def __init__( - self, - source_dir: str, - build_backend: str, - backend_path: Optional[Sequence[str]] = None, - runner: Optional["SubprocessRunner"] = None, - python_executable: Optional[str] = None, - ) -> None: - """ - :param source_dir: The source directory to invoke the build backend for - :param build_backend: The build backend spec - :param backend_path: Additional path entries for the build backend spec - :param runner: The :ref:`subprocess runner <Subprocess Runners>` to use - :param python_executable: - The Python executable used to invoke the build backend - """ - if runner is None: - runner = default_subprocess_runner - - self.source_dir = abspath(source_dir) - self.build_backend = build_backend - if backend_path: - backend_path = [norm_and_check(self.source_dir, p) for p in backend_path] - self.backend_path = backend_path - self._subprocess_runner = runner - if not python_executable: - python_executable = sys.executable - self.python_executable = python_executable - - @contextmanager - def subprocess_runner(self, runner: "SubprocessRunner") -> Iterator[None]: - """A context manager for temporarily overriding the default - :ref:`subprocess runner <Subprocess Runners>`. - - :param runner: The new subprocess runner to use within the context. - - .. code-block:: python - - hook_caller = BuildBackendHookCaller(...) - with hook_caller.subprocess_runner(quiet_subprocess_runner): - ... - """ - prev = self._subprocess_runner - self._subprocess_runner = runner - try: - yield - finally: - self._subprocess_runner = prev - - def _supported_features(self) -> Sequence[str]: - """Return the list of optional features supported by the backend.""" - return self._call_hook("_supported_features", {}) - - def get_requires_for_build_wheel( - self, - config_settings: Optional[Mapping[str, Any]] = None, - ) -> Sequence[str]: - """Get additional dependencies required for building a wheel. - - :param config_settings: The configuration settings for the build backend - :returns: A list of :pep:`dependency specifiers <508>`. - - .. admonition:: Fallback - - If the build backend does not defined a hook with this name, an - empty list will be returned. - """ - return self._call_hook( - "get_requires_for_build_wheel", {"config_settings": config_settings} - ) - - def prepare_metadata_for_build_wheel( - self, - metadata_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - _allow_fallback: bool = True, - ) -> str: - """Prepare a ``*.dist-info`` folder with metadata for this project. - - :param metadata_directory: The directory to write the metadata to - :param config_settings: The configuration settings for the build backend - :param _allow_fallback: - Whether to allow the fallback to building a wheel and extracting - the metadata from it. Should be passed as a keyword argument only. - - :returns: Name of the newly created subfolder within - ``metadata_directory``, containing the metadata. - - .. admonition:: Fallback - - If the build backend does not define a hook with this name and - ``_allow_fallback`` is truthy, the backend will be asked to build a - wheel via the ``build_wheel`` hook and the dist-info extracted from - that will be returned. - """ - return self._call_hook( - "prepare_metadata_for_build_wheel", - { - "metadata_directory": abspath(metadata_directory), - "config_settings": config_settings, - "_allow_fallback": _allow_fallback, - }, - ) - - def build_wheel( - self, - wheel_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - metadata_directory: Optional[str] = None, - ) -> str: - """Build a wheel from this project. - - :param wheel_directory: The directory to write the wheel to - :param config_settings: The configuration settings for the build backend - :param metadata_directory: The directory to reuse existing metadata from - :returns: - The name of the newly created wheel within ``wheel_directory``. - - .. admonition:: Interaction with fallback - - If the ``build_wheel`` hook was called in the fallback for - :meth:`prepare_metadata_for_build_wheel`, the build backend would - not be invoked. Instead, the previously built wheel will be copied - to ``wheel_directory`` and the name of that file will be returned. - """ - if metadata_directory is not None: - metadata_directory = abspath(metadata_directory) - return self._call_hook( - "build_wheel", - { - "wheel_directory": abspath(wheel_directory), - "config_settings": config_settings, - "metadata_directory": metadata_directory, - }, - ) - - def get_requires_for_build_editable( - self, - config_settings: Optional[Mapping[str, Any]] = None, - ) -> Sequence[str]: - """Get additional dependencies required for building an editable wheel. - - :param config_settings: The configuration settings for the build backend - :returns: A list of :pep:`dependency specifiers <508>`. - - .. admonition:: Fallback - - If the build backend does not defined a hook with this name, an - empty list will be returned. - """ - return self._call_hook( - "get_requires_for_build_editable", {"config_settings": config_settings} - ) - - def prepare_metadata_for_build_editable( - self, - metadata_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - _allow_fallback: bool = True, - ) -> Optional[str]: - """Prepare a ``*.dist-info`` folder with metadata for this project. - - :param metadata_directory: The directory to write the metadata to - :param config_settings: The configuration settings for the build backend - :param _allow_fallback: - Whether to allow the fallback to building a wheel and extracting - the metadata from it. Should be passed as a keyword argument only. - :returns: Name of the newly created subfolder within - ``metadata_directory``, containing the metadata. - - .. admonition:: Fallback - - If the build backend does not define a hook with this name and - ``_allow_fallback`` is truthy, the backend will be asked to build a - wheel via the ``build_editable`` hook and the dist-info - extracted from that will be returned. - """ - return self._call_hook( - "prepare_metadata_for_build_editable", - { - "metadata_directory": abspath(metadata_directory), - "config_settings": config_settings, - "_allow_fallback": _allow_fallback, - }, - ) - - def build_editable( - self, - wheel_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - metadata_directory: Optional[str] = None, - ) -> str: - """Build an editable wheel from this project. - - :param wheel_directory: The directory to write the wheel to - :param config_settings: The configuration settings for the build backend - :param metadata_directory: The directory to reuse existing metadata from - :returns: - The name of the newly created wheel within ``wheel_directory``. - - .. admonition:: Interaction with fallback - - If the ``build_editable`` hook was called in the fallback for - :meth:`prepare_metadata_for_build_editable`, the build backend - would not be invoked. Instead, the previously built wheel will be - copied to ``wheel_directory`` and the name of that file will be - returned. - """ - if metadata_directory is not None: - metadata_directory = abspath(metadata_directory) - return self._call_hook( - "build_editable", - { - "wheel_directory": abspath(wheel_directory), - "config_settings": config_settings, - "metadata_directory": metadata_directory, - }, - ) - - def get_requires_for_build_sdist( - self, - config_settings: Optional[Mapping[str, Any]] = None, - ) -> Sequence[str]: - """Get additional dependencies required for building an sdist. - - :returns: A list of :pep:`dependency specifiers <508>`. - """ - return self._call_hook( - "get_requires_for_build_sdist", {"config_settings": config_settings} - ) - - def build_sdist( - self, - sdist_directory: str, - config_settings: Optional[Mapping[str, Any]] = None, - ) -> str: - """Build an sdist from this project. - - :returns: - The name of the newly created sdist within ``wheel_directory``. - """ - return self._call_hook( - "build_sdist", - { - "sdist_directory": abspath(sdist_directory), - "config_settings": config_settings, - }, - ) - - def _call_hook(self, hook_name: str, kwargs: Mapping[str, Any]) -> Any: - extra_environ = {"_PYPROJECT_HOOKS_BUILD_BACKEND": self.build_backend} - - if self.backend_path: - backend_path = os.pathsep.join(self.backend_path) - extra_environ["_PYPROJECT_HOOKS_BACKEND_PATH"] = backend_path - - with tempfile.TemporaryDirectory() as td: - hook_input = {"kwargs": kwargs} - write_json(hook_input, pjoin(td, "input.json"), indent=2) - - # Run the hook in a subprocess - with _in_proc_script_path() as script: - python = self.python_executable - self._subprocess_runner( - [python, abspath(str(script)), hook_name, td], - cwd=self.source_dir, - extra_environ=extra_environ, - ) - - data = read_json(pjoin(td, "output.json")) - if data.get("unsupported"): - raise UnsupportedOperation(data.get("traceback", "")) - if data.get("no_backend"): - raise BackendUnavailable( - data.get("traceback", ""), - message=data.get("backend_error", ""), - backend_name=self.build_backend, - backend_path=self.backend_path, - ) - if data.get("hook_missing"): - raise HookMissing(data.get("missing_hook_name") or hook_name) - return data["return_val"] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py deleted file mode 100644 index 906d0ba20..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -"""This is a subpackage because the directory is on sys.path for _in_process.py - -The subpackage should stay as empty as possible to avoid shadowing modules that -the backend might import. -""" - -import importlib.resources as resources - -try: - resources.files -except AttributeError: - # Python 3.8 compatibility - def _in_proc_script_path(): - return resources.path(__package__, "_in_process.py") - -else: - - def _in_proc_script_path(): - return resources.as_file( - resources.files(__package__).joinpath("_in_process.py") - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 72052c838d73b5834968292a54d43e07feadea84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmah|&ubGw6n>lCwCQ%+h`*sqM|v@ov_^|qt%8c6D7J(O9#)4<cG?}g$t*JyHASR& z5qj|tu-@&_n}0^N2W9Eai^oV6#FKBfNsV3{cHX?1_vXDf-}iQMbi@T5AK!iD<s85l zv*`_|tL)xKWeuvJ;UQG5Th`5-&W*zuJjg8!^ql{!<50~V1MO6;2_WzwKLB9?-~`~g zZO%_(j0xay$vz3(Dmkm~7bC6+egRRfS`yS(f@MZ(tRA!!BRXOv<dW63kZt27nnbnL zR1)ZjED1>{Z_-4HI#YPqcHKq1&=*HVq7{ck>7Y#lMOY)znUV;lcrC^Rf&`BRN0%rF z#S`9KCJhm`Vx};6pj}fy4U1yUkTm#mqzP{%Lh32^ZvD@z0rI%9aqd1tu?GIWZ2^J( zcbw|C_kiwmLi;|nGuEDAVW`ict5%_B?X45AX|0a_4N57W4oRj&OCn0?V4&y{k6D^G zQl-O`c0s2!Ej$vuX|UadU6UhybN!-!Pcf<dAY`&KJA1}|BIJsXkUv6FlwXfUE35^I zm3fnE6bN-3Gg+?q3vC^V=DErYouN-JoTrP3ejI2<btCcb@S3l<X60^j<tIFurjHS4 zA*YjeHvx@=SW(k`51OX9;hIvUJ3ZVpP*s;a(fAY{Ne?SOh*OnOtiew4_@^TISR^~% zkyrEU^BcFfz0;q($_KBqb@tk}cYW8+9dJ948*-)jAO7Oiu#@q6A&d22UiaBVZo14* zfHV<Gwlv1n$!Z)#RT@gOlycZ;rtVCPprQ_=$clgUeEs>x%GTti?c&^4VJ^E+8b}8z z4MiPEJG9r4F|SSS)10M}rirqE>F8ChC9kzKyCJ2J|71=Jb9+sHMH<{p$EouuI<{q5 z-*S%S{P4g!-Eln2{p^gqoPRO@{eYc!e|CycIQkuI>+%oB%3to}QTwILJJ!81c<q+# Iw^qsi4Sg;S82|tP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-314.pyc deleted file mode 100644 index 1d2d70c09fc37534a6328d85784ce8e3e30d0db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15966 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 L5r81nvK{z;_>zFD diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py deleted file mode 100644 index d689bab72..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +++ /dev/null @@ -1,389 +0,0 @@ -"""This is invoked in a subprocess to call the build backend hooks. - -It expects: -- Command line args: hook_name, control_dir -- Environment variables: - _PYPROJECT_HOOKS_BUILD_BACKEND=entry.point:spec - _PYPROJECT_HOOKS_BACKEND_PATH=paths (separated with os.pathsep) -- control_dir/input.json: - - {"kwargs": {...}} - -Results: -- control_dir/output.json - - {"return_val": ...} -""" -import json -import os -import os.path -import re -import shutil -import sys -import traceback -from glob import glob -from importlib import import_module -from importlib.machinery import PathFinder -from os.path import join as pjoin - -# This file is run as a script, and `import wrappers` is not zip-safe, so we -# include write_json() and read_json() from wrappers.py. - - -def write_json(obj, path, **kwargs): - with open(path, "w", encoding="utf-8") as f: - json.dump(obj, f, **kwargs) - - -def read_json(path): - with open(path, encoding="utf-8") as f: - return json.load(f) - - -class BackendUnavailable(Exception): - """Raised if we cannot import the backend""" - - def __init__(self, message, traceback=None): - super().__init__(message) - self.message = message - self.traceback = traceback - - -class HookMissing(Exception): - """Raised if a hook is missing and we are not executing the fallback""" - - def __init__(self, hook_name=None): - super().__init__(hook_name) - self.hook_name = hook_name - - -def _build_backend(): - """Find and load the build backend""" - backend_path = os.environ.get("_PYPROJECT_HOOKS_BACKEND_PATH") - ep = os.environ["_PYPROJECT_HOOKS_BUILD_BACKEND"] - mod_path, _, obj_path = ep.partition(":") - - if backend_path: - # Ensure in-tree backend directories have the highest priority when importing. - extra_pathitems = backend_path.split(os.pathsep) - sys.meta_path.insert(0, _BackendPathFinder(extra_pathitems, mod_path)) - - try: - obj = import_module(mod_path) - except ImportError: - msg = f"Cannot import {mod_path!r}" - raise BackendUnavailable(msg, traceback.format_exc()) - - if obj_path: - for path_part in obj_path.split("."): - obj = getattr(obj, path_part) - return obj - - -class _BackendPathFinder: - """Implements the MetaPathFinder interface to locate modules in ``backend-path``. - - Since the environment provided by the frontend can contain all sorts of - MetaPathFinders, the only way to ensure the backend is loaded from the - right place is to prepend our own. - """ - - def __init__(self, backend_path, backend_module): - self.backend_path = backend_path - self.backend_module = backend_module - self.backend_parent, _, _ = backend_module.partition(".") - - def find_spec(self, fullname, _path, _target=None): - if "." in fullname: - # Rely on importlib to find nested modules based on parent's path - return None - - # Ignore other items in _path or sys.path and use backend_path instead: - spec = PathFinder.find_spec(fullname, path=self.backend_path) - if spec is None and fullname == self.backend_parent: - # According to the spec, the backend MUST be loaded from backend-path. - # Therefore, we can halt the import machinery and raise a clean error. - msg = f"Cannot find module {self.backend_module!r} in {self.backend_path!r}" - raise BackendUnavailable(msg) - - return spec - - if sys.version_info >= (3, 8): - - def find_distributions(self, context=None): - # Delayed import: Python 3.7 does not contain importlib.metadata - from importlib.metadata import DistributionFinder, MetadataPathFinder - - context = DistributionFinder.Context(path=self.backend_path) - return MetadataPathFinder.find_distributions(context=context) - - -def _supported_features(): - """Return the list of options features supported by the backend. - - Returns a list of strings. - The only possible value is 'build_editable'. - """ - backend = _build_backend() - features = [] - if hasattr(backend, "build_editable"): - features.append("build_editable") - return features - - -def get_requires_for_build_wheel(config_settings): - """Invoke the optional get_requires_for_build_wheel hook - - Returns [] if the hook is not defined. - """ - backend = _build_backend() - try: - hook = backend.get_requires_for_build_wheel - except AttributeError: - return [] - else: - return hook(config_settings) - - -def get_requires_for_build_editable(config_settings): - """Invoke the optional get_requires_for_build_editable hook - - Returns [] if the hook is not defined. - """ - backend = _build_backend() - try: - hook = backend.get_requires_for_build_editable - except AttributeError: - return [] - else: - return hook(config_settings) - - -def prepare_metadata_for_build_wheel( - metadata_directory, config_settings, _allow_fallback -): - """Invoke optional prepare_metadata_for_build_wheel - - Implements a fallback by building a wheel if the hook isn't defined, - unless _allow_fallback is False in which case HookMissing is raised. - """ - backend = _build_backend() - try: - hook = backend.prepare_metadata_for_build_wheel - except AttributeError: - if not _allow_fallback: - raise HookMissing() - else: - return hook(metadata_directory, config_settings) - # fallback to build_wheel outside the try block to avoid exception chaining - # which can be confusing to users and is not relevant - whl_basename = backend.build_wheel(metadata_directory, config_settings) - return _get_wheel_metadata_from_wheel( - whl_basename, metadata_directory, config_settings - ) - - -def prepare_metadata_for_build_editable( - metadata_directory, config_settings, _allow_fallback -): - """Invoke optional prepare_metadata_for_build_editable - - Implements a fallback by building an editable wheel if the hook isn't - defined, unless _allow_fallback is False in which case HookMissing is - raised. - """ - backend = _build_backend() - try: - hook = backend.prepare_metadata_for_build_editable - except AttributeError: - if not _allow_fallback: - raise HookMissing() - try: - build_hook = backend.build_editable - except AttributeError: - raise HookMissing(hook_name="build_editable") - else: - whl_basename = build_hook(metadata_directory, config_settings) - return _get_wheel_metadata_from_wheel( - whl_basename, metadata_directory, config_settings - ) - else: - return hook(metadata_directory, config_settings) - - -WHEEL_BUILT_MARKER = "PYPROJECT_HOOKS_ALREADY_BUILT_WHEEL" - - -def _dist_info_files(whl_zip): - """Identify the .dist-info folder inside a wheel ZipFile.""" - res = [] - for path in whl_zip.namelist(): - m = re.match(r"[^/\\]+-[^/\\]+\.dist-info/", path) - if m: - res.append(path) - if res: - return res - raise Exception("No .dist-info folder found in wheel") - - -def _get_wheel_metadata_from_wheel(whl_basename, metadata_directory, config_settings): - """Extract the metadata from a wheel. - - Fallback for when the build backend does not - define the 'get_wheel_metadata' hook. - """ - from zipfile import ZipFile - - with open(os.path.join(metadata_directory, WHEEL_BUILT_MARKER), "wb"): - pass # Touch marker file - - whl_file = os.path.join(metadata_directory, whl_basename) - with ZipFile(whl_file) as zipf: - dist_info = _dist_info_files(zipf) - zipf.extractall(path=metadata_directory, members=dist_info) - return dist_info[0].split("/")[0] - - -def _find_already_built_wheel(metadata_directory): - """Check for a wheel already built during the get_wheel_metadata hook.""" - if not metadata_directory: - return None - metadata_parent = os.path.dirname(metadata_directory) - if not os.path.isfile(pjoin(metadata_parent, WHEEL_BUILT_MARKER)): - return None - - whl_files = glob(os.path.join(metadata_parent, "*.whl")) - if not whl_files: - print("Found wheel built marker, but no .whl files") - return None - if len(whl_files) > 1: - print( - "Found multiple .whl files; unspecified behaviour. " - "Will call build_wheel." - ) - return None - - # Exactly one .whl file - return whl_files[0] - - -def build_wheel(wheel_directory, config_settings, metadata_directory=None): - """Invoke the mandatory build_wheel hook. - - If a wheel was already built in the - prepare_metadata_for_build_wheel fallback, this - will copy it rather than rebuilding the wheel. - """ - prebuilt_whl = _find_already_built_wheel(metadata_directory) - if prebuilt_whl: - shutil.copy2(prebuilt_whl, wheel_directory) - return os.path.basename(prebuilt_whl) - - return _build_backend().build_wheel( - wheel_directory, config_settings, metadata_directory - ) - - -def build_editable(wheel_directory, config_settings, metadata_directory=None): - """Invoke the optional build_editable hook. - - If a wheel was already built in the - prepare_metadata_for_build_editable fallback, this - will copy it rather than rebuilding the wheel. - """ - backend = _build_backend() - try: - hook = backend.build_editable - except AttributeError: - raise HookMissing() - else: - prebuilt_whl = _find_already_built_wheel(metadata_directory) - if prebuilt_whl: - shutil.copy2(prebuilt_whl, wheel_directory) - return os.path.basename(prebuilt_whl) - - return hook(wheel_directory, config_settings, metadata_directory) - - -def get_requires_for_build_sdist(config_settings): - """Invoke the optional get_requires_for_build_wheel hook - - Returns [] if the hook is not defined. - """ - backend = _build_backend() - try: - hook = backend.get_requires_for_build_sdist - except AttributeError: - return [] - else: - return hook(config_settings) - - -class _DummyException(Exception): - """Nothing should ever raise this exception""" - - -class GotUnsupportedOperation(Exception): - """For internal use when backend raises UnsupportedOperation""" - - def __init__(self, traceback): - self.traceback = traceback - - -def build_sdist(sdist_directory, config_settings): - """Invoke the mandatory build_sdist hook.""" - backend = _build_backend() - try: - return backend.build_sdist(sdist_directory, config_settings) - except getattr(backend, "UnsupportedOperation", _DummyException): - raise GotUnsupportedOperation(traceback.format_exc()) - - -HOOK_NAMES = { - "get_requires_for_build_wheel", - "prepare_metadata_for_build_wheel", - "build_wheel", - "get_requires_for_build_editable", - "prepare_metadata_for_build_editable", - "build_editable", - "get_requires_for_build_sdist", - "build_sdist", - "_supported_features", -} - - -def main(): - if len(sys.argv) < 3: - sys.exit("Needs args: hook_name, control_dir") - hook_name = sys.argv[1] - control_dir = sys.argv[2] - if hook_name not in HOOK_NAMES: - sys.exit("Unknown hook: %s" % hook_name) - - # Remove the parent directory from sys.path to avoid polluting the backend - # import namespace with this directory. - here = os.path.dirname(__file__) - if here in sys.path: - sys.path.remove(here) - - hook = globals()[hook_name] - - hook_input = read_json(pjoin(control_dir, "input.json")) - - json_out = {"unsupported": False, "return_val": None} - try: - json_out["return_val"] = hook(**hook_input["kwargs"]) - except BackendUnavailable as e: - json_out["no_backend"] = True - json_out["traceback"] = e.traceback - json_out["backend_error"] = e.message - except GotUnsupportedOperation as e: - json_out["unsupported"] = True - json_out["traceback"] = e.traceback - except HookMissing as e: - json_out["hook_missing"] = True - json_out["missing_hook_name"] = e.hook_name or hook_name - - write_json(json_out, pjoin(control_dir, "output.json"), indent=2) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/LICENSE deleted file mode 100644 index 67db85882..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/LICENSE +++ /dev/null @@ -1,175 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__init__.py deleted file mode 100644 index 04230fc8d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__init__.py +++ /dev/null @@ -1,179 +0,0 @@ -# __ -# /__) _ _ _ _ _/ _ -# / ( (- (/ (/ (- _) / _) -# / - -""" -Requests HTTP Library -~~~~~~~~~~~~~~~~~~~~~ - -Requests is an HTTP library, written in Python, for human beings. -Basic GET usage: - - >>> import requests - >>> r = requests.get('https://www.python.org') - >>> r.status_code - 200 - >>> b'Python is a programming language' in r.content - True - -... or POST: - - >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('https://httpbin.org/post', data=payload) - >>> print(r.text) - { - ... - "form": { - "key1": "value1", - "key2": "value2" - }, - ... - } - -The other HTTP methods are supported - see `requests.api`. Full documentation -is at <https://requests.readthedocs.io>. - -:copyright: (c) 2017 by Kenneth Reitz. -:license: Apache 2.0, see LICENSE for more details. -""" - -import warnings - -from pip._vendor import urllib3 - -from .exceptions import RequestsDependencyWarning - -charset_normalizer_version = None -chardet_version = None - - -def check_compatibility(urllib3_version, chardet_version, charset_normalizer_version): - urllib3_version = urllib3_version.split(".") - assert urllib3_version != ["dev"] # Verify urllib3 isn't installed from git. - - # Sometimes, urllib3 only reports its version as 16.1. - if len(urllib3_version) == 2: - urllib3_version.append("0") - - # Check urllib3 for compatibility. - major, minor, patch = urllib3_version # noqa: F811 - major, minor, patch = int(major), int(minor), int(patch) - # urllib3 >= 1.21.1 - assert major >= 1 - if major == 1: - assert minor >= 21 - - # Check charset_normalizer for compatibility. - if chardet_version: - major, minor, patch = chardet_version.split(".")[:3] - major, minor, patch = int(major), int(minor), int(patch) - # chardet_version >= 3.0.2, < 6.0.0 - assert (3, 0, 2) <= (major, minor, patch) < (6, 0, 0) - elif charset_normalizer_version: - major, minor, patch = charset_normalizer_version.split(".")[:3] - major, minor, patch = int(major), int(minor), int(patch) - # charset_normalizer >= 2.0.0 < 4.0.0 - assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0) - else: - # pip does not need or use character detection - pass - - -def _check_cryptography(cryptography_version): - # cryptography < 1.3.4 - try: - cryptography_version = list(map(int, cryptography_version.split("."))) - except ValueError: - return - - if cryptography_version < [1, 3, 4]: - warning = "Old version of cryptography ({}) may cause slowdown.".format( - cryptography_version - ) - warnings.warn(warning, RequestsDependencyWarning) - - -# Check imported dependencies for compatibility. -try: - check_compatibility( - urllib3.__version__, chardet_version, charset_normalizer_version - ) -except (AssertionError, ValueError): - warnings.warn( - "urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported " - "version!".format( - urllib3.__version__, chardet_version, charset_normalizer_version - ), - RequestsDependencyWarning, - ) - -# Attempt to enable urllib3's fallback for SNI support -# if the standard library doesn't support SNI or the -# 'ssl' library isn't available. -try: - # Note: This logic prevents upgrading cryptography on Windows, if imported - # as part of pip. - from pip._internal.utils.compat import WINDOWS - if not WINDOWS: - raise ImportError("pip internals: don't import cryptography on Windows") - try: - import ssl - except ImportError: - ssl = None - - if not getattr(ssl, "HAS_SNI", False): - from pip._vendor.urllib3.contrib import pyopenssl - - pyopenssl.inject_into_urllib3() - - # Check cryptography version - from cryptography import __version__ as cryptography_version - - _check_cryptography(cryptography_version) -except ImportError: - pass - -# urllib3's DependencyWarnings should be silenced. -from pip._vendor.urllib3.exceptions import DependencyWarning - -warnings.simplefilter("ignore", DependencyWarning) - -# Set default logging handler to avoid "No handler found" warnings. -import logging -from logging import NullHandler - -from . import packages, utils -from .__version__ import ( - __author__, - __author_email__, - __build__, - __cake__, - __copyright__, - __description__, - __license__, - __title__, - __url__, - __version__, -) -from .api import delete, get, head, options, patch, post, put, request -from .exceptions import ( - ConnectionError, - ConnectTimeout, - FileModeWarning, - HTTPError, - JSONDecodeError, - ReadTimeout, - RequestException, - Timeout, - TooManyRedirects, - URLRequired, -) -from .models import PreparedRequest, Request, Response -from .sessions import Session, session -from .status_codes import codes - -logging.getLogger(__name__).addHandler(NullHandler()) - -# FileModeWarnings go off per the default. -warnings.simplefilter("default", FileModeWarning, append=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 0e03b7876eb19081376657b04942c3fd55f41937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5377 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-314.pyc deleted file mode 100644 index c12d9242f616fa2da08ca67b6fb9ee0f27349c12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY*XL5tHs6i(W0o2Hv?am9iN21KxwrrYi+ZV^%TvY^N^)LURklV>wF&BU1(wK)av z`ws-KdQ<!(;wki~7mtPg15T}7^c~)O-#7DS=6f^Ure$g>zJK|}zUrFxb4|9P_@B6N z)R1dLLyhRDlM<Fl8Ovk`cSr>*q>5Ei!x}NrAa$%0^On|WEDZs#QjjRK_SphM9^0qm z@tOUC3;Q&kd$Dw~n;~K%NB#bGsUyG(Fob~n(qTNS4xPiHbC*?yB`vd_KpX>xHUWlN zwm*kQvyCFwg2Tl$Gao0OA3|^F9Axbio-72LhG_p+neHk(Ki+?|S0Bzl+X_7En9Dk) z$S?v*mwS{3Abr6SWIR?vjnY&^3N$Ev4MJ{IRWV6f6e!)K)Jv5`p>XRG!`x$kt0Lw@ zEZ3V`l=|CiDQYO{&D6vv?PA^Q<@w3TeJ<4@t`~q993LOJZ@8GbiQq56N9p<zPlJgk zp~qr|DoOOB2t;q-ZrXe}IHE`N?frXn4D%%N5Gc+Q_bHpWk|Fd|gJ#|oq?@p$ul&RT z7ncvv|Hq+|ESAQDIS<kZ9*UN_-TFhwkxHwwuInpPv)XyRxYEt{3bUKnisrSvQS4q- dnsp;Li~T#_v{uo)uEbU+w~EH?cZO)H^521A(h&dv diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-314.pyc deleted file mode 100644 index 5cd9e9587d438fdf7fbef3302c12ba394a66c422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2064 zcma)6%Wu?17$2|q6>r#0C?U#=OiLQr(rgNZwk!cDg>6a1BXyQY1#gVkJIM}sZFgpt zuu+9_gcI~uMU}X4>7kW+?xFvJMJlnidWck2>M>PvsCw$>eMO{1>PQ~XH}m@*{(Zmk zspKIA!Fc)OpY&A(q2B|eJ;JTUjt`4<q#}WqkSfheLRym4&}`_cEaXvCkmloUm%aDf zNR_9grY#}|V!|Cv^gv9cgNYr8iFPpYLbMP+8xmcGNFfGqrI08nh3-PvWJnxRyVO`e zvLumI<NZjaROvWMD{DU}jC@%oT=0xeZ9$lASb9}Ziz|;_8;UZ|oCmZ-I1Y}fsNv<R zZ3^nx9E-9cu)zp6!KzkB3AbZeHC(J=wUt9zEmO0MOT;C12|G3>4+SF?0;pxO8d!}2 zaG6*xVH}_2Re&2D;#OQkq?H?K$xjrk)DqOzxnR5(cwV}*l+}14n3-l5-Wyx%{m&Lp z1wd`#&Qc5W)za8nYTt$#+Up_;G$11s-qB#Oj<i-s5n4oA2RGGPooG3hKuN<WkKE8= z=r|zf!QMX>rFO@fsI;{9^Jnw{v9W>Slc>Fdo#H)WiuW-iD+ViBgmdgHV^MQSuqUbv zI5%MBGQx>1jGzmEP#S$`#h^B{g<u;FACPw7W(Z=NPASM^Ko?4+WvrG7BZ^H-NN2EG z2ItEZ((s_69M3FVo}I;2yHSjAENCBuXRDNxjFOgpg>q_hVb~^N0V#g85tzVHv{{iK zZ|C)8rz$v*i^j*X|Mlgpc8f#1HKRn>>GS75&{iFGUvrrgu)sCba;l}G!N~-*selR6 zSQcRur?vT-C_DDq(^LAC{_x`u^*pJ#mLZ5PDz0{o7Bx-<nQ#sBzOh2M=2CZ32c}C7 zn{4ZTa-Z%qZq4rzj@~3L5E(GVf`7#TJp2qy>u6U&@x#x?zdiLTHvTd;UQZr*EN{nA zcWQlZJAzVuPb*I<-(1~HzWZ3-N+j3kcEAgn9SMQak=LU}!2c(&72s?beU8e~&;jC7 zJK`EeDo79`EgIwwMie#WIf_Q$7j+y_bU_|LR7!`}UR)t?^(xdRm@Y$?DQKc28pnqF z2{&69Kz&OHX4znd2|hfdC|MVbN}w@ZZ4s8;A4E9VEEDs724Amofs3RKP%w-@h_)ke zv!D13z6-(bW|S-o6r06G$FUSYVsMkv{HN(K3+VG@0Qu2|s)&F1R<r6{Aa0Ul%wh1e zh_?&k0r}&sEAZ=SeV|Uc-U!JK2Z!+Ri!ecZlc@XXv+@i1RbuRAV$2JVd5N*@P&m?8 zkM}%HJxP5N`z4NlO}+K^Z;6pzBt`oC)RAo&-v97!h_KN+fxb^n%Rfoea#~`CU@P6@ z$8^2qn7ZzV81bXcUt067!~%m_#2?fbXRgg&(XZxauH;nx#?1AcuIBVlzR2hNfj6Hm z<W+y@^&^OJYtL_A%+6upc(k3Vk#;73Q(e%5{r)%XH;RZ9Yl3i=gfH@YTUGA)Hm*s7 z%<m9O0H(=ze7fS4susD#Fzf}5;E!Pf!X)XhP*e)<B$1^2fkwARMxWo_xb2<1xH)pk zLxc6<W6$R{=DZUZHixG@G*CZ=pWoZK=cT7Nk6rZ8P`!=MZjM|4{MO)E@7zsqVBSMV t>qF<fk5q4P!9)F9;Vv)nPCXp+x<<Dna$m?py}R9tl-eEamiii%{tK10EtvoS diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-314.pyc deleted file mode 100644 index 964dfd54da9d7dda3a34f3cf765741da4d808c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27456 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 A>;M1& diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-314.pyc deleted file mode 100644 index efbe44d293ccbb9f4b2db106ccf4e0f9d7e51e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6955 zcmeHM&2!tv6$eP@i?rj6Q_FGvwW(WEv?<ZH<S)jRElYCcR3m99T9cWwB_MDmA_4(+ z7c?Vx+W3-7FU_F`oiaLg?3;V4d+NU+CF!`s>8+O@Q`?=+^wi&5fD|R$spDwI(`g`M zxmYary?yWZe(wQ3{l?yehU2r}|J^xzNYnmC7p)@}b)GDsb63l2f%Y>!uiw<CVnOV< zmX96Of_OfeHx6p99vJy9TzBQW(RSze<a^X;5AOG>UN3rms@IoKU``?*KcS`f-uW~k z_|NNH26D)%If-9&9En7s;z(BY%XODCr&@D)m3x6?L4~t?^b{MLyE&9d<ZQpTDxBp? zkYfXOnw>jy_8ePWWk2Sg$Ab!{JHefyM9y_=?n$0wV>QdJ@N*d^IcL*1$0ujzC)tuO zAWm>r=7Ht7aww73o4t}t>G+<sTNWY1^x;fun(^d!$~r|FQ^#EAtZ3{VZ6xZwtC#e8 ztR645M{4nf_?!{l?)Z5}%Nu!p0d`){v$2KPb=}bF@p>#Dr@xVSIQ6)8LSx!#Efqbv z4CzNS2mU##9an#3=Xc{rHAhc(SuWHb$5sMSw_!-jD`Wp&89kP>T}#TG85x#ci8`Yu znYU&MtIDb{rC-iPzsg+X3y(K;K5jC9@dIwd8>acA$%1KS(3zbp+?<`64=<)B$0oww z-0XZbVeVF|GgcU%qPuX2X--T|PZlOkC=%&W7jBN-%1^(H2JMH`79`-|*8;fHa?@<W zu~k>BW|-^9fcZ--r~_w`1TU@z=mfqpQG(%cJcT{rRje`?(eaksD(tY|ma=6luwGJX zCX}hRz2vxj&~;Y0k{nvIrA$kaMZdhNbcPdNDE|ZLd)wrXvG?X@XRs^bSgv!&T10fs zt-`Zj<g`~3Q{h&bix=6Kw45pw=Gas?tu3PAAUX*|FVx@m{S}8lyD+(ET-|%m5<4~j z@5_>XpIwxI0pCJf(@c3*m8Wv7?TNwA3(_<JA_C?wwoOsU`K4*5LmsKSfdkA1jC;0U zCa3^ezEvJl4mC}+ta=9P*_Ou^Il}PVpc=yB11XxJbjT<jAU#bnG5nQNGAw2LUI3yj z1*<il!XqJq1XdsUT90O!U6+AhEk(Xn(i;^Hf`oOpNx>FC)m9V~N?@5UIUa4Byc<ns zq*4p9%g$}?shuezGR^JMu%yMxh)@*;EeF#=R=BQJE<0f)vq(WD7Xgbq?YJZ(wmHD6 z2bJxyfPpaN36Zci1;ceqI(Bx#Sw>pQjw=&{;2p#4_F92c<$j&=%@(0d`3+XJJdgv2 zqTp35+OV9Utqp?iHWzL56E`TO7ddhdXD~?!lnk@ToJ#;qpy&VuE%;K-9KgCBh?Pa+ zGfW_&!i|RtrP-C}o*Xs9y+LPX__oSwT?!xtwic~guIo2Sf|nfu3EP9?y6?N(@`l)? zvQf6|NM$RKdp6?rED?DY9G;yc`p$;5oh71&lHsC=uOT+Umn=kwvW{sMM4c;cS1LZE z!y*K?6s!sV!{<>!6tz{WRwMIaTHxEhOJ*kUQKlefN0(MuZMzVzaF$lLd2kYZ1P57+ z<YL1a;@U>Vu`7sCi83TmSQfr3F^qhO$qmlJm6RJOQIM$6)hWpe)AP*cB5;-*+X{H( z&M<vEXZb1s7ji+(3MyMm0@iGNj4jr^GBAp*)g^zSEyH{b8QiLF+n+<scEfTdY@Shi z3NC9X3ASRi;kYg-;8d&d8Z>rSS=n!RL|z>96(wQX($1ylRZh$>(p-UDy3BSRkdd-L z80-T>HC{~*v71Y*K*=`422!+G3e>g2S5s*`?g+>cJg5uguC3G%X^Pq;>;d2*Cu1_f zCkLQK)nsc*B5_Mv%RHA$z?7q-qf|)xVCB}tXcU+1hwZ_k=<YxY_$Iw7K~R&qY?gi( z9dF1N%h_cfq|#fDqu17p{p8%4Gd~?oG`qu+sToJfGIL)`#|4##&7S$Nrfl{^g3^Yd z8c=l6-R_l!C6;Bgr&W2<t&=A+toiYHu6PT;l0{0kXD?qqQ*8KRr3hG4wIz$T>(|SR z0O}w(GC(5(L=+c;XNzHqA3i%$8Yz8v=|ZW%QBlLYrJ!0XPCJW5=>&WbW$_BkC5ttu zmMwvx%f86AY?VccK7=~EmsF+Z4V-cm&0X#3`?{9c|ETZKXMKkr^&S4A@9<jVFZ=p` z^U<$A+T3?-eQ9IgwFf8AJnYBizv5cr2xj5m=Y5C&EvcIRwEt??pORy5_RVZ7w8<i> z&}K?ZQOA!us5l;usq$D4%VWGy#H}ezn2%~&IIrc>ts?e+s(37(DxM0_kYlq^-O2!t zdh1Qd3J}kce~>W)YlY*rWtT#y83)Fj-C^Z?Uso;%gvlj>TrbFPGL8o56!4NJ_O=>A zg*=P~(CF9py!FZXwG*4kivU9M;)8DVHjIl;a9gw69>qo5+eg%sJH4IN7Ib<Mf~RA5 z{v5g4V^IRyC11a0oA-p}gcSQ=g8Q-1+RD&G9W6WWM_*7gjZ^lcft~l0oiDH1o5{@j z0-6mYBi_WV=bQMNdT2qP>vRCd=*a8&*husydt57$i`9{jQ_yv|!LVjK0xrt+ih{pk z#J!pqkW|3KjF~&?2vweXen17lZ3k%#i8o-aOeZ<&DW64okquZ<E#lW|zU1Xr8G(Y9 z$`+O*PS3T24ym$Y-FAGD-o3cnw?q9KO@m6@bgY?xu8|@k4Zj7y$WCMs76di#(;fOS za98`XU+YRfG7fAS2R8as_YQnvWdEAn|H*~5;mu@v{Un+VBOOAe?P@&OgHv(u_th#p zqmj55fQaGqL_CU0!+O{O2Pz16DJcI>-lAU(^}ELR1^^#44KjAqpbrO%gixF)%Kt7< zAc)dK-Z#)Y*(QE`KGXy?%Qz)N144S62uY#r>Uv=#dG&#T<{{Ys>V|PO#9Kr%nBT$v z3>SB`=ix2end|@1iM3nbLhWmP7kbT5i`VLbP>51_E~+Zjz_V4wQQ$#Pa~o%?s!-rk zRmJf7#71)X-i^)V@P;w`&2ja|PF&Hu?6)KqefoT<FOIJnSzUPhv@2WK62}NM+p1KC z5kbwzIJe>H;@bFT^89*vBYFPb5_%iP`L8IUUZP6<y!A2?eh%3sB)w)6cbB=#1Fo`z zc%}mR9$A-~-;#AZYtu_>^P9=j>j>1-8^&p6*t9;Aj?K)Zlg*w|sqEXOQd3he$zge; z-X~PCtLhq+WfU8*mJrcRJt}k68%VSFO87rUqv8h`LnLc5hvv(;uIvAZ_3FkyzoY2~ rA9oMxWBOB5PwJN*AL-KvAHTgvKlSw39{rk5?Fcm&o*wJd!xH*GI!Q5- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-314.pyc deleted file mode 100644 index 7a6c2e9515b358e9d910b07f04049c3fac520b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14567 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-314.pyc deleted file mode 100644 index 1904e304880ce17ce22b9b9161bf3b7b1843a60a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmY*XO=}cE5bfEW)ntMq1O!D$1&O+topo`ML`2Yl7zja@6+Fz^^v=}mwwdW3yL*zX z2g%6~y!t0Rdh~CI7w05;@n{I%?U|h%Ea;}Xs8{t~SKT~+&Lh^oe*VqBIE4HvAE)Nl z&dEdT9FYMr<T)8Q+s@;LX{?Y@bI{m$Mo4slkSk>5u98t>mGo;+-&QMag$$ZktJ8M# zM>gmwe3_#*+7D3~?Y;ibJa0JV8d4eM34%hCE1|(m5i*4_Duoe57_&Svu=N1S5<KQ1 zGYI2cL<#yZoT5VD+LI!gffNWok3Lo<N<UUItsXTLG8XQ!3HqM59m7oKz$|(m<YEGY zn(aEEKk?TgmI@f`aFHKE#I;d;oEt6$RPmGvTPyNV>~keWio&c{MMEYaoH8-Ns=1ZG z1)t+$I4Bw4XoHcpV%tGu#*~$n%)FXmR0^&|dTpm@Rj^`#(v)#Q>2AAKoTW69A*ID~ z#xtMpqll!cKHC10YS?*{`GTcrb6T0=!h9kp<(!JQTX%z}8kG)MgsQi>c`G=OYA?u? ze1W0SL72!q8Z(WZlDfULVM&6j(+i%=%v6foy*};J!;L$1h-sEs^3<eRu*1iJ<_0^p z4jou--I`nXbQ`+WHu%}BShzQz{(ZG%d6jFV*X;GD={U~u8P9S5UL?-7AI+tAuf8=e WeRmh%uYI`wX7{*B+{<dwX8r>R?d4hk diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-314.pyc deleted file mode 100644 index 1784ae9c864b032a580570d2b46eb906b2d13a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036 zcmZWqOK%fb6u#rP$B#S=ae#zO5?(HeLmp6|g$jkX;|c-_X;(I*v3*Hy7|#s%9tX^# zwOG+btNes6>8{;%Tk!`9s3N^mRHSaYsT7(bs;+wO*yhoWG~fNsx%ZqoubDZX&FBQL z$KU_X4#o-jO$og#+9kUWG(y^BnE<&?mbH=w8m^&I$P7bdj2s}9=s2lFuBLm2uh((1 z99}?cbzLV@`#VhGE3J0gBn0Bi(L4dYqK}h>?jcB3w5!9fEqV+xmCW0|u7?62+5hRo zfxa(@x*z&+jg|V%0T>ulnZ!$jW)5-zPn7nUdtt9R1Vd&X@_{Z{8aDUA{($SH1Lg>f z1Uyw5H4nnUfTv4irU8aI4&&woOqi1}X&!<@=3zK&9)Tm~Q8;QIgJWg^3c>kI=^gVp z95<(6%AAI2vj|0V24==c<pj*)eWEf4a}~t-5X@Jil?7Z+R-*G7oLbf<i9srfN^(9F zBlQ>|BV>#$M<6~*E`7tud*M;Sv_kgok2<HfnpA)&*1U#qgZ}y3m#(j@F<~^kdefnX z&*=v9n!;%rYqnc=Xx(59-{W9(tXY*g3|a;g0-fqr3b!eBjjJtK^IT)jK%1U0Uo=W! zaN4k$D~uZ+H>!5+=53qTh5oj)rVGq5V2v6sy#q$WUdO{5lnds$MSZED$&_VvWy_LU zai!MlzgpEug$ar5s_Dhi)O_+8nIwhK-RX}Q#v_`($^cWTt=ZhJ0p&)W0<8i1Hyl>w zHfK~6m%b(VsJJ?W+d{cD<o(67<xd61Qnu@q&z?DRqI}!qH_JZv*3p9~*Bq}|uiAo6 zGnWB^0NZgWpPnsusxm*jU@cg8PM@+?Xv24GpcXXz@+DR+3kG!B$Ew(?RFr+@&tRHv z-QzR8rp<IJRrFgjZ*eL-XM<WQLhDrqJb{6Z;w{uW*Cx-hgYA#EQiJWKU6fTyeV<&r zvUHKwygL1mbC0WnUcnqWtzTp{D1>EV5o5Ni4wdoCw(m1{Rc0?YL20@&+9Ye9caza| zTRDhb_PC%9vcxsuXi&OR&}H;i(*r8?V6l9sDP+9qc9iKZ>8O)U?$qfGZm&v3sjH&H z!`xZ-m@5-Vd>fw-FyZ6SNgZ`fH_#TMQeUNjO}K-dlS8k$Mcoa?J-0z!kbS{nYYo7+ z940`fl|{>{wtQO%IsB&dreWb-8MmyuSHo!wi<Xc%>`k%Tn<9pRLo?4qSY6rIm3s3j z!werB?L?er!s_kM%H&GR?=(PWF8~&;+JufAw2<RVOk}z@=ghs~$%t|*W9Y_j&2`s# z8Ce&e%hj~YRL#R-3np3cR1nY`nxb8;aWxe@qadsHBdQv_Ptk5eF&UXwTKqz&1`FP= zc0<hL1B#?ODHMZZ@<CMboPs?H_9_@skXN8S(R`l*^?Bz95M;J%-<@ebqIT54@`DP- z6c`9tYTz<eZ88U#YbhaGZ2|UISML|fYA&NU9M1-sahnawS<M10s*oA1I$fo_BXae( z;z<SgA0smHe&_Rco}Wiiz1ZRpgq^UaY0pD(EwVdEwA2foXdmpvBHHjTxuMN3p5~_> z=cgWAdy=31Zv5x`!js&|9|j)f&bBZ8xhJgUo~KD_;)y=lj_+hiBK0($e-zKRBReso zXYboz<u@;UIns{(N8C*iExk>Q7crt8`jwn}M9yuKquXR`o8({WDJ}Gpyn^AF7J5Mt zcKS)*U^}%HOSZ#XiA+1Xl^xhTdB5D&w+8lX(#>=`qe$#t=I@=$A(9;2JpWUC;x7`? ghM(o~_b%;3k^Li7FTb8x43mf9)Z#$+VZVm>FI*Q_6951J diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-314.pyc deleted file mode 100644 index d44498b1e2cfcea2c6a90e3df95268b1722d07bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25509 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-314.pyc deleted file mode 100644 index 1b37b7a4238a3bc4fb3aa1cfd0f47a2448becba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8069 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 JWm!zf{{VsnF4O=3 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-314.pyc deleted file mode 100644 index 9957b01c2ddebceec4c4d6fba9b1e828082f0c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4398 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 N>%}qp<53Fw{{yiA7)t;E diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-314.pyc deleted file mode 100644 index c5a3754db6eed351d7a90cce25b74dec1e9ee031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmY*Y&u<$=6n?W_$H{Kml#;YcmC`{`0$YgPv`N$kgakB&V3bzI^=Z*&ygRlB|Jd!! zIK@36-*Dl8#VOa`;DXfuqzy=fg$g7t98<!D8*evuC7v{I-hT7mn{VEG`^M>07N8tF z{!2VF0RBuq#zIEM@d6rsD1n9&$rDXV#(B_2DT6vwG8e(gK6q?Ney_`wR{2I4HkI|o z|HQJ&4WVc|47x2&BN^_AfGesSocb(cRnZb!AW#cs3YJF6Xqt?wp3=OXx2$*fm}s#o z=131VEo*mIautOg#dmi%Es9dcq+^WMd524;c|dD2Y*R)@ne$dWId<~L4^H+ht_-f@ z>!|wRqCSx`a2L8p0oN_`xd(Zu8pRyI6ug311dFIIrIrAP>^LOOet7$K@sq^hd%UAn zQcoIx`TnMRS8=Ia7I3+G<Hi;DekhwR7UeVUYvuZ_up3mF;wz#fG%BT8tHtHYs(YuW z8)4_#>YBIaeSUqzEAw{L!q<7a9l0Nis;h+ND-rXXtj?7iiKyV=)j=o=<MtHN!sVl0 zd@A5I)@^AoMI=52W^k#KZa-Um{YTq*w7$PIy!zGlqxGk@^Tc%iJ+K{RqSr(Fyy+)( z8p{M4Hh_8j0~&oOlefrgqq92tEx;uxKtw9!&UmcGk+@f2ZG<Ks<GA2T66e0Sr9w(% z4Tm(57d}X40V+6_N#q&0H46}#74uc77}rPvDw+3)2~oC^t)(oAX93FD$S9sW>0HIY z@iiW7+!QKe+Hc?tvUIj+Abc&t4wF3^b`Y!!tR#&D_c;w~G+>(L<4Mo+u{oaS7;&b~ zb)0K3#k7{rM4V~zUYt#f8&4&hm&C*q&HGH&Rct0uY^BvtPgGLE<>lo!DV2$d4H}V3 zeIzmmWDV+5RDJkk`lWA*gW|B%-#SEd`{DM`|9Ypt^?PpmH~Z{xegE>$_R@j9bU1fm z_`zW7*V*~O&0pp(?u)1MSHIgpHTdXoX8xy{rNf2gZ>OH;VD7@vBuvjeF=vnQ0@!iP zIOlmm=zE?_TAofw%Hn&FFDF3Ca`Nqyzxo}SkW1RAE}}Zh5JH|C7BP>`fi*jr?q~m= OAms8tr)@HqhW`g0Zz^K| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-314.pyc deleted file mode 100644 index bf8667120cb8a5ba094cb7c9578c470edc0f98bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36585 zcmd75d2}4tc_&)c8yejWbYp4kOJO0%#?o9saRE1x07+0JK&aUQtq3yML^sJ6fkwN! zK#GWEb3B=(>BuH%DMz5C7eaoT2#h@uJ+Y6Oc|I>%Jh9H1b0%0AHC%z8m}9<p^3Hn> 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-314.pyc deleted file mode 100644 index 22700e6fc67c9b5938abbba14a8d41400300c327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcma)5-%s0C6h4kkf)f)`3L`3nHK1i;Kqw@jbnW`EsI<%!W$vbRs*Pom3wU*6*S=W` zPfUBsrfH+nq_$6`Ps`r6xBUs*(?UZ=>OD@Cy0@bI1G^@+mUhw9^KkF+`SG1|zI!|s z?h68uCqF+|;|#!G&W9&{S7{kOfL&Mvfm#L(Yn0$yrmp(1?@bVTBe3)>0Hy_6qNlw~ za$`p7iG#$XskTw_$06<dB|1SgDM0*?i@3&)%gZ6yB0*v$R$?+Y05;<Qqad-lp^jiz zl^B8PtnXpG?fN%qCzpSR)Mcem90b~n5GV>T*S!;ooj&t#t?n^GkHmFWc4p((09Y6U zey@E?KJ@)b@4j3Io`;OXuf>J#auGh^BKALAggFqHd7n4oD;$spyHE1+w76gD?;a=k zC6<GE-^nYoIr1v6iWC+CX|gqrkoS8H9R7BjDS?_Gdo}@+?B7oE>Lg_c@>_~oKzN5U zR3j;Wj!FgHOxjd(XROm;qT6L;VJm4U`CG~+vXVOk|FxN94`9+~2g;_Vsp~15Q41wy z@{~<m+m`Lm>qSGsCqZ_=1+pXUlBghimY^)FMMF2SEZcrf&nuc`Gn#5)J5baMWer(2 zO%yw5Va3GO9Tjicw1!G{xLh(!w4vT5U`{}<ESHoba$rd0Cc-w?26p`c6B(M4M?XT# zp~L<<`>y!0g-lCS3do#0fBu|!M>lVYhN*vs^4JpdnqDrfD;AnjODZM@=|IzvIWs5b zw(*u;O3kI^w0t+SD1U^C1REn67Y%VmT^B7CqZyAqk#IZfl0ED3IO}<n#<tyiu|4Z0 z)7fd~KerO(d_hwb^(O?M!AL6zk%`?a&EdDIfyVG`jTw9z9j{HK>e2KUOJ82Cd~(1H z9s40NxR<@p-{b%2KU<-jp>S<r{4g}WpZ}rsxKvxX{43p9;Exh3hl!PD?Cj&y`)l=h zx)xuk#TF~8&1<>eZ~k_(_NmyoCRMWE@n7+^Xy%tojp%Zn`=AwoNc=cNx_B`NOy~*y zMze45s4sTV7u#KW+JE}xx_gOl-g}UJwEA$hx>3FH(}&fIN28g;(M)q>?9qjX7xt~j z$W&#ex%j?Y=gf5Vdi8QGI)A{Wngc`kr|wNX*w|O=1LrE)E>U$Z)grCLk9&X_Hlu{E Fe*i`TMZ*99 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-314.pyc deleted file mode 100644 index f628d97756d92396a179ee99d975576e0b56afa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27791 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-314.pyc deleted file mode 100644 index 459bd976e6b5722b2d625ba195efa2e4a9ce7aeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6060 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-314.pyc deleted file mode 100644 index afe184a04293a329f6fdf51628025969f9cee07e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5781 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-314.pyc deleted file mode 100644 index a220e06bd688a610e02d7001b24b953962008264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37066 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 BPw4;v diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__version__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__version__.py deleted file mode 100644 index effdd98cf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/__version__.py +++ /dev/null @@ -1,14 +0,0 @@ -# .-. .-. .-. . . .-. .-. .-. .-. -# |( |- |.| | | |- `-. | `-. -# ' ' `-' `-`.`-' `-' `-' ' `-' - -__title__ = "requests" -__description__ = "Python HTTP for Humans." -__url__ = "https://requests.readthedocs.io" -__version__ = "2.32.5" -__build__ = 0x023205 -__author__ = "Kenneth Reitz" -__author_email__ = "me@kennethreitz.org" -__license__ = "Apache-2.0" -__copyright__ = "Copyright Kenneth Reitz" -__cake__ = "\u2728 \U0001f370 \u2728" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/_internal_utils.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/_internal_utils.py deleted file mode 100644 index f2cf635e2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -requests._internal_utils -~~~~~~~~~~~~~~ - -Provides utility functions that are consumed internally by Requests -which depend on extremely few external helpers (such as compat) -""" -import re - -from .compat import builtin_str - -_VALID_HEADER_NAME_RE_BYTE = re.compile(rb"^[^:\s][^:\r\n]*$") -_VALID_HEADER_NAME_RE_STR = re.compile(r"^[^:\s][^:\r\n]*$") -_VALID_HEADER_VALUE_RE_BYTE = re.compile(rb"^\S[^\r\n]*$|^$") -_VALID_HEADER_VALUE_RE_STR = re.compile(r"^\S[^\r\n]*$|^$") - -_HEADER_VALIDATORS_STR = (_VALID_HEADER_NAME_RE_STR, _VALID_HEADER_VALUE_RE_STR) -_HEADER_VALIDATORS_BYTE = (_VALID_HEADER_NAME_RE_BYTE, _VALID_HEADER_VALUE_RE_BYTE) -HEADER_VALIDATORS = { - bytes: _HEADER_VALIDATORS_BYTE, - str: _HEADER_VALIDATORS_STR, -} - - -def to_native_string(string, encoding="ascii"): - """Given a string object, regardless of type, returns a representation of - that string in the native string type, encoding and decoding where - necessary. This assumes ASCII unless told otherwise. - """ - if isinstance(string, builtin_str): - out = string - else: - out = string.decode(encoding) - - return out - - -def unicode_is_ascii(u_string): - """Determine if unicode string only contains ASCII characters. - - :param str u_string: unicode string to check. Must be unicode - and not Python 2 `str`. - :rtype: bool - """ - assert isinstance(u_string, str) - try: - u_string.encode("ascii") - return True - except UnicodeEncodeError: - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/adapters.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/adapters.py deleted file mode 100644 index 67ccebcbe..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/adapters.py +++ /dev/null @@ -1,696 +0,0 @@ -""" -requests.adapters -~~~~~~~~~~~~~~~~~ - -This module contains the transport adapters that Requests uses to define -and maintain connections. -""" - -import os.path -import socket # noqa: F401 -import typing -import warnings - -from pip._vendor.urllib3.exceptions import ClosedPoolError, ConnectTimeoutError -from pip._vendor.urllib3.exceptions import HTTPError as _HTTPError -from pip._vendor.urllib3.exceptions import InvalidHeader as _InvalidHeader -from pip._vendor.urllib3.exceptions import ( - LocationValueError, - MaxRetryError, - NewConnectionError, - ProtocolError, -) -from pip._vendor.urllib3.exceptions import ProxyError as _ProxyError -from pip._vendor.urllib3.exceptions import ReadTimeoutError, ResponseError -from pip._vendor.urllib3.exceptions import SSLError as _SSLError -from pip._vendor.urllib3.poolmanager import PoolManager, proxy_from_url -from pip._vendor.urllib3.util import Timeout as TimeoutSauce -from pip._vendor.urllib3.util import parse_url -from pip._vendor.urllib3.util.retry import Retry - -from .auth import _basic_auth_str -from .compat import basestring, urlparse -from .cookies import extract_cookies_to_jar -from .exceptions import ( - ConnectionError, - ConnectTimeout, - InvalidHeader, - InvalidProxyURL, - InvalidSchema, - InvalidURL, - ProxyError, - ReadTimeout, - RetryError, - SSLError, -) -from .models import Response -from .structures import CaseInsensitiveDict -from .utils import ( - DEFAULT_CA_BUNDLE_PATH, - extract_zipped_paths, - get_auth_from_url, - get_encoding_from_headers, - prepend_scheme_if_needed, - select_proxy, - urldefragauth, -) - -try: - from pip._vendor.urllib3.contrib.socks import SOCKSProxyManager -except ImportError: - - def SOCKSProxyManager(*args, **kwargs): - raise InvalidSchema("Missing dependencies for SOCKS support.") - - -if typing.TYPE_CHECKING: - from .models import PreparedRequest - - -DEFAULT_POOLBLOCK = False -DEFAULT_POOLSIZE = 10 -DEFAULT_RETRIES = 0 -DEFAULT_POOL_TIMEOUT = None - - -def _urllib3_request_context( - request: "PreparedRequest", - verify: "bool | str | None", - client_cert: "typing.Tuple[str, str] | str | None", - poolmanager: "PoolManager", -) -> "(typing.Dict[str, typing.Any], typing.Dict[str, typing.Any])": - host_params = {} - pool_kwargs = {} - parsed_request_url = urlparse(request.url) - scheme = parsed_request_url.scheme.lower() - port = parsed_request_url.port - - cert_reqs = "CERT_REQUIRED" - if verify is False: - cert_reqs = "CERT_NONE" - elif isinstance(verify, str): - if not os.path.isdir(verify): - pool_kwargs["ca_certs"] = verify - else: - pool_kwargs["ca_cert_dir"] = verify - pool_kwargs["cert_reqs"] = cert_reqs - if client_cert is not None: - if isinstance(client_cert, tuple) and len(client_cert) == 2: - pool_kwargs["cert_file"] = client_cert[0] - pool_kwargs["key_file"] = client_cert[1] - else: - # According to our docs, we allow users to specify just the client - # cert path - pool_kwargs["cert_file"] = client_cert - host_params = { - "scheme": scheme, - "host": parsed_request_url.hostname, - "port": port, - } - return host_params, pool_kwargs - - -class BaseAdapter: - """The Base Transport Adapter""" - - def __init__(self): - super().__init__() - - def send( - self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None - ): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - """ - raise NotImplementedError - - def close(self): - """Cleans up adapter specific items.""" - raise NotImplementedError - - -class HTTPAdapter(BaseAdapter): - """The built-in HTTP Adapter for urllib3. - - Provides a general-case interface for Requests sessions to contact HTTP and - HTTPS urls by implementing the Transport Adapter interface. This class will - usually be created by the :class:`Session <Session>` class under the - covers. - - :param pool_connections: The number of urllib3 connection pools to cache. - :param pool_maxsize: The maximum number of connections to save in the pool. - :param max_retries: The maximum number of retries each connection - should attempt. Note, this applies only to failed DNS lookups, socket - connections and connection timeouts, never to requests where data has - made it to the server. By default, Requests does not retry failed - connections. If you need granular control over the conditions under - which we retry a request, import urllib3's ``Retry`` class and pass - that instead. - :param pool_block: Whether the connection pool should block for connections. - - Usage:: - - >>> import requests - >>> s = requests.Session() - >>> a = requests.adapters.HTTPAdapter(max_retries=3) - >>> s.mount('http://', a) - """ - - __attrs__ = [ - "max_retries", - "config", - "_pool_connections", - "_pool_maxsize", - "_pool_block", - ] - - def __init__( - self, - pool_connections=DEFAULT_POOLSIZE, - pool_maxsize=DEFAULT_POOLSIZE, - max_retries=DEFAULT_RETRIES, - pool_block=DEFAULT_POOLBLOCK, - ): - if max_retries == DEFAULT_RETRIES: - self.max_retries = Retry(0, read=False) - else: - self.max_retries = Retry.from_int(max_retries) - self.config = {} - self.proxy_manager = {} - - super().__init__() - - self._pool_connections = pool_connections - self._pool_maxsize = pool_maxsize - self._pool_block = pool_block - - self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) - - def __getstate__(self): - return {attr: getattr(self, attr, None) for attr in self.__attrs__} - - def __setstate__(self, state): - # Can't handle by adding 'proxy_manager' to self.__attrs__ because - # self.poolmanager uses a lambda function, which isn't pickleable. - self.proxy_manager = {} - self.config = {} - - for attr, value in state.items(): - setattr(self, attr, value) - - self.init_poolmanager( - self._pool_connections, self._pool_maxsize, block=self._pool_block - ) - - def init_poolmanager( - self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs - ): - """Initializes a urllib3 PoolManager. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param connections: The number of urllib3 connection pools to cache. - :param maxsize: The maximum number of connections to save in the pool. - :param block: Block when no free connections are available. - :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. - """ - # save these values for pickling - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = PoolManager( - num_pools=connections, - maxsize=maxsize, - block=block, - **pool_kwargs, - ) - - def proxy_manager_for(self, proxy, **proxy_kwargs): - """Return urllib3 ProxyManager for the given proxy. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxy: The proxy to return a urllib3 ProxyManager for. - :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. - :returns: ProxyManager - :rtype: urllib3.ProxyManager - """ - if proxy in self.proxy_manager: - manager = self.proxy_manager[proxy] - elif proxy.lower().startswith("socks"): - username, password = get_auth_from_url(proxy) - manager = self.proxy_manager[proxy] = SOCKSProxyManager( - proxy, - username=username, - password=password, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs, - ) - else: - proxy_headers = self.proxy_headers(proxy) - manager = self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs, - ) - - return manager - - def cert_verify(self, conn, url, verify, cert): - """Verify a SSL certificate. This method should not be called from user - code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param conn: The urllib3 connection object associated with the cert. - :param url: The requested URL. - :param verify: Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: The SSL certificate to verify. - """ - if url.lower().startswith("https") and verify: - cert_loc = None - - # Allow self-specified cert location. - if verify is not True: - cert_loc = verify - - if not cert_loc: - cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH) - - if not cert_loc or not os.path.exists(cert_loc): - raise OSError( - f"Could not find a suitable TLS CA certificate bundle, " - f"invalid path: {cert_loc}" - ) - - conn.cert_reqs = "CERT_REQUIRED" - - if not os.path.isdir(cert_loc): - conn.ca_certs = cert_loc - else: - conn.ca_cert_dir = cert_loc - else: - conn.cert_reqs = "CERT_NONE" - conn.ca_certs = None - conn.ca_cert_dir = None - - if cert: - if not isinstance(cert, basestring): - conn.cert_file = cert[0] - conn.key_file = cert[1] - else: - conn.cert_file = cert - conn.key_file = None - if conn.cert_file and not os.path.exists(conn.cert_file): - raise OSError( - f"Could not find the TLS certificate file, " - f"invalid path: {conn.cert_file}" - ) - if conn.key_file and not os.path.exists(conn.key_file): - raise OSError( - f"Could not find the TLS key file, invalid path: {conn.key_file}" - ) - - def build_response(self, req, resp): - """Builds a :class:`Response <requests.Response>` object from a urllib3 - response. This should not be called from user code, and is only exposed - for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>` - - :param req: The :class:`PreparedRequest <PreparedRequest>` used to generate the response. - :param resp: The urllib3 response object. - :rtype: requests.Response - """ - response = Response() - - # Fallback to None if there's no status_code, for whatever reason. - response.status_code = getattr(resp, "status", None) - - # Make headers case-insensitive. - response.headers = CaseInsensitiveDict(getattr(resp, "headers", {})) - - # Set encoding. - response.encoding = get_encoding_from_headers(response.headers) - response.raw = resp - response.reason = response.raw.reason - - if isinstance(req.url, bytes): - response.url = req.url.decode("utf-8") - else: - response.url = req.url - - # Add new cookies from the server. - extract_cookies_to_jar(response.cookies, req, resp) - - # Give the Response some context. - response.request = req - response.connection = self - - return response - - def build_connection_pool_key_attributes(self, request, verify, cert=None): - """Build the PoolKey attributes used by urllib3 to return a connection. - - This looks at the PreparedRequest, the user-specified verify value, - and the value of the cert parameter to determine what PoolKey values - to use to select a connection from a given urllib3 Connection Pool. - - The SSL related pool key arguments are not consistently set. As of - this writing, use the following to determine what keys may be in that - dictionary: - - * If ``verify`` is ``True``, ``"ssl_context"`` will be set and will be the - default Requests SSL Context - * If ``verify`` is ``False``, ``"ssl_context"`` will not be set but - ``"cert_reqs"`` will be set - * If ``verify`` is a string, (i.e., it is a user-specified trust bundle) - ``"ca_certs"`` will be set if the string is not a directory recognized - by :py:func:`os.path.isdir`, otherwise ``"ca_cert_dir"`` will be - set. - * If ``"cert"`` is specified, ``"cert_file"`` will always be set. If - ``"cert"`` is a tuple with a second item, ``"key_file"`` will also - be present - - To override these settings, one may subclass this class, call this - method and use the above logic to change parameters as desired. For - example, if one wishes to use a custom :py:class:`ssl.SSLContext` one - must both set ``"ssl_context"`` and based on what else they require, - alter the other keys to ensure the desired behaviour. - - :param request: - The PreparedReqest being sent over the connection. - :type request: - :class:`~requests.models.PreparedRequest` - :param verify: - Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use. - :param cert: - (optional) Any user-provided SSL certificate for client - authentication (a.k.a., mTLS). This may be a string (i.e., just - the path to a file which holds both certificate and key) or a - tuple of length 2 with the certificate file path and key file - path. - :returns: - A tuple of two dictionaries. The first is the "host parameters" - portion of the Pool Key including scheme, hostname, and port. The - second is a dictionary of SSLContext related parameters. - """ - return _urllib3_request_context(request, verify, cert, self.poolmanager) - - def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None): - """Returns a urllib3 connection for the given request and TLS settings. - This should not be called from user code, and is only exposed for use - when subclassing the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: - The :class:`PreparedRequest <PreparedRequest>` object to be sent - over the connection. - :param verify: - Either a boolean, in which case it controls whether we verify the - server's TLS certificate, or a string, in which case it must be a - path to a CA bundle to use. - :param proxies: - (optional) The proxies dictionary to apply to the request. - :param cert: - (optional) Any user-provided SSL certificate to be used for client - authentication (a.k.a., mTLS). - :rtype: - urllib3.ConnectionPool - """ - proxy = select_proxy(request.url, proxies) - try: - host_params, pool_kwargs = self.build_connection_pool_key_attributes( - request, - verify, - cert, - ) - except ValueError as e: - raise InvalidURL(e, request=request) - if proxy: - proxy = prepend_scheme_if_needed(proxy, "http") - proxy_url = parse_url(proxy) - if not proxy_url.host: - raise InvalidProxyURL( - "Please check proxy URL. It is malformed " - "and could be missing the host." - ) - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_host( - **host_params, pool_kwargs=pool_kwargs - ) - else: - # Only scheme should be lower case - conn = self.poolmanager.connection_from_host( - **host_params, pool_kwargs=pool_kwargs - ) - - return conn - - def get_connection(self, url, proxies=None): - """DEPRECATED: Users should move to `get_connection_with_tls_context` - for all subclasses of HTTPAdapter using Requests>=2.32.2. - - Returns a urllib3 connection for the given URL. This should not be - called from user code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param url: The URL to connect to. - :param proxies: (optional) A Requests-style dictionary of proxies used on this request. - :rtype: urllib3.ConnectionPool - """ - warnings.warn( - ( - "`get_connection` has been deprecated in favor of " - "`get_connection_with_tls_context`. Custom HTTPAdapter subclasses " - "will need to migrate for Requests>=2.32.2. Please see " - "https://github.com/psf/requests/pull/6710 for more details." - ), - DeprecationWarning, - ) - proxy = select_proxy(url, proxies) - - if proxy: - proxy = prepend_scheme_if_needed(proxy, "http") - proxy_url = parse_url(proxy) - if not proxy_url.host: - raise InvalidProxyURL( - "Please check proxy URL. It is malformed " - "and could be missing the host." - ) - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_url(url) - else: - # Only scheme should be lower case - parsed = urlparse(url) - url = parsed.geturl() - conn = self.poolmanager.connection_from_url(url) - - return conn - - def close(self): - """Disposes of any internal state. - - Currently, this closes the PoolManager and any active ProxyManager, - which closes any pooled connections. - """ - self.poolmanager.clear() - for proxy in self.proxy_manager.values(): - proxy.clear() - - def request_url(self, request, proxies): - """Obtain the url to use when making the final request. - - If the message is being sent through a HTTP proxy, the full URL has to - be used. Otherwise, we should only use the path portion of the URL. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. - :rtype: str - """ - proxy = select_proxy(request.url, proxies) - scheme = urlparse(request.url).scheme - - is_proxied_http_request = proxy and scheme != "https" - using_socks_proxy = False - if proxy: - proxy_scheme = urlparse(proxy).scheme.lower() - using_socks_proxy = proxy_scheme.startswith("socks") - - url = request.path_url - if url.startswith("//"): # Don't confuse urllib3 - url = f"/{url.lstrip('/')}" - - if is_proxied_http_request and not using_socks_proxy: - url = urldefragauth(request.url) - - return url - - def add_headers(self, request, **kwargs): - """Add any headers needed by the connection. As of v2.0 this does - nothing by default, but is left for overriding by users that subclass - the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` to add headers to. - :param kwargs: The keyword arguments from the call to send(). - """ - pass - - def proxy_headers(self, proxy): - """Returns a dictionary of the headers to add to any request sent - through a proxy. This works with urllib3 magic to ensure that they are - correctly sent to the proxy, rather than in a tunnelled request if - CONNECT is being used. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxy: The url of the proxy being used for this request. - :rtype: dict - """ - headers = {} - username, password = get_auth_from_url(proxy) - - if username: - headers["Proxy-Authorization"] = _basic_auth_str(username, password) - - return headers - - def send( - self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None - ): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple or urllib3 Timeout object - :param verify: (optional) Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - :rtype: requests.Response - """ - - try: - conn = self.get_connection_with_tls_context( - request, verify, proxies=proxies, cert=cert - ) - except LocationValueError as e: - raise InvalidURL(e, request=request) - - self.cert_verify(conn, request.url, verify, cert) - url = self.request_url(request, proxies) - self.add_headers( - request, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - ) - - chunked = not (request.body is None or "Content-Length" in request.headers) - - if isinstance(timeout, tuple): - try: - connect, read = timeout - timeout = TimeoutSauce(connect=connect, read=read) - except ValueError: - raise ValueError( - f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " - f"or a single float to set both timeouts to the same value." - ) - elif isinstance(timeout, TimeoutSauce): - pass - else: - timeout = TimeoutSauce(connect=timeout, read=timeout) - - try: - resp = conn.urlopen( - method=request.method, - url=url, - body=request.body, - headers=request.headers, - redirect=False, - assert_same_host=False, - preload_content=False, - decode_content=False, - retries=self.max_retries, - timeout=timeout, - chunked=chunked, - ) - - except (ProtocolError, OSError) as err: - raise ConnectionError(err, request=request) - - except MaxRetryError as e: - if isinstance(e.reason, ConnectTimeoutError): - # TODO: Remove this in 3.0.0: see #2811 - if not isinstance(e.reason, NewConnectionError): - raise ConnectTimeout(e, request=request) - - if isinstance(e.reason, ResponseError): - raise RetryError(e, request=request) - - if isinstance(e.reason, _ProxyError): - raise ProxyError(e, request=request) - - if isinstance(e.reason, _SSLError): - # This branch is for urllib3 v1.22 and later. - raise SSLError(e, request=request) - - raise ConnectionError(e, request=request) - - except ClosedPoolError as e: - raise ConnectionError(e, request=request) - - except _ProxyError as e: - raise ProxyError(e) - - except (_SSLError, _HTTPError) as e: - if isinstance(e, _SSLError): - # This branch is for urllib3 versions earlier than v1.22 - raise SSLError(e, request=request) - elif isinstance(e, ReadTimeoutError): - raise ReadTimeout(e, request=request) - elif isinstance(e, _InvalidHeader): - raise InvalidHeader(e, request=request) - else: - raise - - return self.build_response(request, resp) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/api.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/api.py deleted file mode 100644 index 596074455..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/api.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. -""" - -from . import sessions - - -def request(method, url, **kwargs): - """Constructs and sends a :class:`Request <Request>`. - - :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary, list of tuples or bytes to send - in the query string for the :class:`Request`. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. - ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` - or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string - defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers - to add for the file. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send data - before giving up, as a float, or a :ref:`(connect timeout, read - timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response <Response>` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'https://httpbin.org/get') - >>> req - <Response [200]> - """ - - # By using the 'with' statement we are sure the session is closed, thus we - # avoid leaving sockets open which can trigger a ResourceWarning in some - # cases, and look like a memory leak in others. - with sessions.Session() as session: - return session.request(method=method, url=url, **kwargs) - - -def get(url, params=None, **kwargs): - r"""Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary, list of tuples or bytes to send - in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("get", url, params=params, **kwargs) - - -def options(url, **kwargs): - r"""Sends an OPTIONS request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("options", url, **kwargs) - - -def head(url, **kwargs): - r"""Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. If - `allow_redirects` is not provided, it will be set to `False` (as - opposed to the default :meth:`request` behavior). - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", False) - return request("head", url, **kwargs) - - -def post(url, data=None, json=None, **kwargs): - r"""Sends a POST request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("post", url, data=data, json=json, **kwargs) - - -def put(url, data=None, **kwargs): - r"""Sends a PUT request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("put", url, data=data, **kwargs) - - -def patch(url, data=None, **kwargs): - r"""Sends a PATCH request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("patch", url, data=data, **kwargs) - - -def delete(url, **kwargs): - r"""Sends a DELETE request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request("delete", url, **kwargs) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/auth.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/auth.py deleted file mode 100644 index 4a7ce6dc1..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/auth.py +++ /dev/null @@ -1,314 +0,0 @@ -""" -requests.auth -~~~~~~~~~~~~~ - -This module contains the authentication handlers for Requests. -""" - -import hashlib -import os -import re -import threading -import time -import warnings -from base64 import b64encode - -from ._internal_utils import to_native_string -from .compat import basestring, str, urlparse -from .cookies import extract_cookies_to_jar -from .utils import parse_dict_header - -CONTENT_TYPE_FORM_URLENCODED = "application/x-www-form-urlencoded" -CONTENT_TYPE_MULTI_PART = "multipart/form-data" - - -def _basic_auth_str(username, password): - """Returns a Basic Auth string.""" - - # "I want us to put a big-ol' comment on top of it that - # says that this behaviour is dumb but we need to preserve - # it because people are relying on it." - # - Lukasa - # - # These are here solely to maintain backwards compatibility - # for things like ints. This will be removed in 3.0.0. - if not isinstance(username, basestring): - warnings.warn( - "Non-string usernames will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(username), - category=DeprecationWarning, - ) - username = str(username) - - if not isinstance(password, basestring): - warnings.warn( - "Non-string passwords will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(type(password)), - category=DeprecationWarning, - ) - password = str(password) - # -- End Removal -- - - if isinstance(username, str): - username = username.encode("latin1") - - if isinstance(password, str): - password = password.encode("latin1") - - authstr = "Basic " + to_native_string( - b64encode(b":".join((username, password))).strip() - ) - - return authstr - - -class AuthBase: - """Base class that all auth implementations derive from""" - - def __call__(self, r): - raise NotImplementedError("Auth hooks must be callable.") - - -class HTTPBasicAuth(AuthBase): - """Attaches HTTP Basic Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - - def __eq__(self, other): - return all( - [ - self.username == getattr(other, "username", None), - self.password == getattr(other, "password", None), - ] - ) - - def __ne__(self, other): - return not self == other - - def __call__(self, r): - r.headers["Authorization"] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPProxyAuth(HTTPBasicAuth): - """Attaches HTTP Proxy Authentication to a given Request object.""" - - def __call__(self, r): - r.headers["Proxy-Authorization"] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPDigestAuth(AuthBase): - """Attaches HTTP Digest Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - # Keep state in per-thread local storage - self._thread_local = threading.local() - - def init_per_thread_state(self): - # Ensure state is initialized just once per-thread - if not hasattr(self._thread_local, "init"): - self._thread_local.init = True - self._thread_local.last_nonce = "" - self._thread_local.nonce_count = 0 - self._thread_local.chal = {} - self._thread_local.pos = None - self._thread_local.num_401_calls = None - - def build_digest_header(self, method, url): - """ - :rtype: str - """ - - realm = self._thread_local.chal["realm"] - nonce = self._thread_local.chal["nonce"] - qop = self._thread_local.chal.get("qop") - algorithm = self._thread_local.chal.get("algorithm") - opaque = self._thread_local.chal.get("opaque") - hash_utf8 = None - - if algorithm is None: - _algorithm = "MD5" - else: - _algorithm = algorithm.upper() - # lambdas assume digest modules are imported at the top level - if _algorithm == "MD5" or _algorithm == "MD5-SESS": - - def md5_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.md5(x).hexdigest() - - hash_utf8 = md5_utf8 - elif _algorithm == "SHA": - - def sha_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha1(x).hexdigest() - - hash_utf8 = sha_utf8 - elif _algorithm == "SHA-256": - - def sha256_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha256(x).hexdigest() - - hash_utf8 = sha256_utf8 - elif _algorithm == "SHA-512": - - def sha512_utf8(x): - if isinstance(x, str): - x = x.encode("utf-8") - return hashlib.sha512(x).hexdigest() - - hash_utf8 = sha512_utf8 - - KD = lambda s, d: hash_utf8(f"{s}:{d}") # noqa:E731 - - if hash_utf8 is None: - return None - - # XXX not implemented yet - entdig = None - p_parsed = urlparse(url) - #: path is request-uri defined in RFC 2616 which should not be empty - path = p_parsed.path or "/" - if p_parsed.query: - path += f"?{p_parsed.query}" - - A1 = f"{self.username}:{realm}:{self.password}" - A2 = f"{method}:{path}" - - HA1 = hash_utf8(A1) - HA2 = hash_utf8(A2) - - if nonce == self._thread_local.last_nonce: - self._thread_local.nonce_count += 1 - else: - self._thread_local.nonce_count = 1 - ncvalue = f"{self._thread_local.nonce_count:08x}" - s = str(self._thread_local.nonce_count).encode("utf-8") - s += nonce.encode("utf-8") - s += time.ctime().encode("utf-8") - s += os.urandom(8) - - cnonce = hashlib.sha1(s).hexdigest()[:16] - if _algorithm == "MD5-SESS": - HA1 = hash_utf8(f"{HA1}:{nonce}:{cnonce}") - - if not qop: - respdig = KD(HA1, f"{nonce}:{HA2}") - elif qop == "auth" or "auth" in qop.split(","): - noncebit = f"{nonce}:{ncvalue}:{cnonce}:auth:{HA2}" - respdig = KD(HA1, noncebit) - else: - # XXX handle auth-int. - return None - - self._thread_local.last_nonce = nonce - - # XXX should the partial digests be encoded too? - base = ( - f'username="{self.username}", realm="{realm}", nonce="{nonce}", ' - f'uri="{path}", response="{respdig}"' - ) - if opaque: - base += f', opaque="{opaque}"' - if algorithm: - base += f', algorithm="{algorithm}"' - if entdig: - base += f', digest="{entdig}"' - if qop: - base += f', qop="auth", nc={ncvalue}, cnonce="{cnonce}"' - - return f"Digest {base}" - - def handle_redirect(self, r, **kwargs): - """Reset num_401_calls counter on redirects.""" - if r.is_redirect: - self._thread_local.num_401_calls = 1 - - def handle_401(self, r, **kwargs): - """ - Takes the given response and tries digest-auth, if needed. - - :rtype: requests.Response - """ - - # If response is not 4xx, do not auth - # See https://github.com/psf/requests/issues/3772 - if not 400 <= r.status_code < 500: - self._thread_local.num_401_calls = 1 - return r - - if self._thread_local.pos is not None: - # Rewind the file position indicator of the body to where - # it was to resend the request. - r.request.body.seek(self._thread_local.pos) - s_auth = r.headers.get("www-authenticate", "") - - if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2: - self._thread_local.num_401_calls += 1 - pat = re.compile(r"digest ", flags=re.IGNORECASE) - self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1)) - - # Consume content and release the original connection - # to allow our new request to reuse the same one. - r.content - r.close() - prep = r.request.copy() - extract_cookies_to_jar(prep._cookies, r.request, r.raw) - prep.prepare_cookies(prep._cookies) - - prep.headers["Authorization"] = self.build_digest_header( - prep.method, prep.url - ) - _r = r.connection.send(prep, **kwargs) - _r.history.append(r) - _r.request = prep - - return _r - - self._thread_local.num_401_calls = 1 - return r - - def __call__(self, r): - # Initialize per-thread state, if needed - self.init_per_thread_state() - # If we have a saved nonce, skip the 401 - if self._thread_local.last_nonce: - r.headers["Authorization"] = self.build_digest_header(r.method, r.url) - try: - self._thread_local.pos = r.body.tell() - except AttributeError: - # In the case of HTTPDigestAuth being reused and the body of - # the previous request was a file-like object, pos has the - # file position of the previous body. Ensure it's set to - # None. - self._thread_local.pos = None - r.register_hook("response", self.handle_401) - r.register_hook("response", self.handle_redirect) - self._thread_local.num_401_calls = 1 - - return r - - def __eq__(self, other): - return all( - [ - self.username == getattr(other, "username", None), - self.password == getattr(other, "password", None), - ] - ) - - def __ne__(self, other): - return not self == other diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/certs.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/certs.py deleted file mode 100644 index 2743144b9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/certs.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -""" -requests.certs -~~~~~~~~~~~~~~ - -This module returns the preferred default CA certificate bundle. There is -only one — the one from the certifi package. - -If you are packaging Requests, e.g., for a Linux distribution or a managed -environment, you can change the definition of where() to return a separately -packaged CA bundle. -""" -from pip._vendor.certifi import where - -if __name__ == "__main__": - print(where()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/compat.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/compat.py deleted file mode 100644 index b95a92140..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/compat.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -requests.compat -~~~~~~~~~~~~~~~ - -This module previously handled import compatibility issues -between Python 2 and Python 3. It remains for backwards -compatibility until the next major version. -""" - -import sys - -# ------- -# urllib3 -# ------- -from pip._vendor.urllib3 import __version__ as urllib3_version - -# Detect which major version of urllib3 is being used. -try: - is_urllib3_1 = int(urllib3_version.split(".")[0]) == 1 -except (TypeError, AttributeError): - # If we can't discern a version, prefer old functionality. - is_urllib3_1 = True - -# ------------------- -# Character Detection -# ------------------- - - -def _resolve_char_detection(): - """Find supported character detection libraries.""" - chardet = None - return chardet - - -chardet = _resolve_char_detection() - -# ------- -# Pythons -# ------- - -# Syntax sugar. -_ver = sys.version_info - -#: Python 2.x? -is_py2 = _ver[0] == 2 - -#: Python 3.x? -is_py3 = _ver[0] == 3 - -# Note: We've patched out simplejson support in pip because it prevents -# upgrading simplejson on Windows. -import json -from json import JSONDecodeError - -# Keep OrderedDict for backwards compatibility. -from collections import OrderedDict -from collections.abc import Callable, Mapping, MutableMapping -from http import cookiejar as cookielib -from http.cookies import Morsel -from io import StringIO - -# -------------- -# Legacy Imports -# -------------- -from urllib.parse import ( - quote, - quote_plus, - unquote, - unquote_plus, - urldefrag, - urlencode, - urljoin, - urlparse, - urlsplit, - urlunparse, -) -from urllib.request import ( - getproxies, - getproxies_environment, - parse_http_list, - proxy_bypass, - proxy_bypass_environment, -) - -builtin_str = str -str = str -bytes = bytes -basestring = (str, bytes) -numeric_types = (int, float) -integer_types = (int,) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/cookies.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/cookies.py deleted file mode 100644 index f69d0cda9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/cookies.py +++ /dev/null @@ -1,561 +0,0 @@ -""" -requests.cookies -~~~~~~~~~~~~~~~~ - -Compatibility code to be able to use `http.cookiejar.CookieJar` with requests. - -requests.utils imports from here, so be careful with imports. -""" - -import calendar -import copy -import time - -from ._internal_utils import to_native_string -from .compat import Morsel, MutableMapping, cookielib, urlparse, urlunparse - -try: - import threading -except ImportError: - import dummy_threading as threading - - -class MockRequest: - """Wraps a `requests.Request` to mimic a `urllib2.Request`. - - The code in `http.cookiejar.CookieJar` expects this interface in order to correctly - manage cookie policies, i.e., determine whether a cookie can be set, given the - domains of the request and the cookie. - - The original request object is read-only. The client is responsible for collecting - the new headers via `get_new_headers()` and interpreting them appropriately. You - probably want `get_cookie_header`, defined below. - """ - - def __init__(self, request): - self._r = request - self._new_headers = {} - self.type = urlparse(self._r.url).scheme - - def get_type(self): - return self.type - - def get_host(self): - return urlparse(self._r.url).netloc - - def get_origin_req_host(self): - return self.get_host() - - def get_full_url(self): - # Only return the response's URL if the user hadn't set the Host - # header - if not self._r.headers.get("Host"): - return self._r.url - # If they did set it, retrieve it and reconstruct the expected domain - host = to_native_string(self._r.headers["Host"], encoding="utf-8") - parsed = urlparse(self._r.url) - # Reconstruct the URL as we expect it - return urlunparse( - [ - parsed.scheme, - host, - parsed.path, - parsed.params, - parsed.query, - parsed.fragment, - ] - ) - - def is_unverifiable(self): - return True - - def has_header(self, name): - return name in self._r.headers or name in self._new_headers - - def get_header(self, name, default=None): - return self._r.headers.get(name, self._new_headers.get(name, default)) - - def add_header(self, key, val): - """cookiejar has no legitimate use for this method; add it back if you find one.""" - raise NotImplementedError( - "Cookie headers should be added with add_unredirected_header()" - ) - - def add_unredirected_header(self, name, value): - self._new_headers[name] = value - - def get_new_headers(self): - return self._new_headers - - @property - def unverifiable(self): - return self.is_unverifiable() - - @property - def origin_req_host(self): - return self.get_origin_req_host() - - @property - def host(self): - return self.get_host() - - -class MockResponse: - """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. - - ...what? Basically, expose the parsed HTTP headers from the server response - the way `http.cookiejar` expects to see them. - """ - - def __init__(self, headers): - """Make a MockResponse for `cookiejar` to read. - - :param headers: a httplib.HTTPMessage or analogous carrying the headers - """ - self._headers = headers - - def info(self): - return self._headers - - def getheaders(self, name): - self._headers.getheaders(name) - - -def extract_cookies_to_jar(jar, request, response): - """Extract the cookies from the response into a CookieJar. - - :param jar: http.cookiejar.CookieJar (not necessarily a RequestsCookieJar) - :param request: our own requests.Request object - :param response: urllib3.HTTPResponse object - """ - if not (hasattr(response, "_original_response") and response._original_response): - return - # the _original_response field is the wrapped httplib.HTTPResponse object, - req = MockRequest(request) - # pull out the HTTPMessage with the headers and put it in the mock: - res = MockResponse(response._original_response.msg) - jar.extract_cookies(res, req) - - -def get_cookie_header(jar, request): - """ - Produce an appropriate Cookie header string to be sent with `request`, or None. - - :rtype: str - """ - r = MockRequest(request) - jar.add_cookie_header(r) - return r.get_new_headers().get("Cookie") - - -def remove_cookie_by_name(cookiejar, name, domain=None, path=None): - """Unsets a cookie by name, by default over all domains and paths. - - Wraps CookieJar.clear(), is O(n). - """ - clearables = [] - for cookie in cookiejar: - if cookie.name != name: - continue - if domain is not None and domain != cookie.domain: - continue - if path is not None and path != cookie.path: - continue - clearables.append((cookie.domain, cookie.path, cookie.name)) - - for domain, path, name in clearables: - cookiejar.clear(domain, path, name) - - -class CookieConflictError(RuntimeError): - """There are two cookies that meet the criteria specified in the cookie jar. - Use .get and .set and include domain and path args in order to be more specific. - """ - - -class RequestsCookieJar(cookielib.CookieJar, MutableMapping): - """Compatibility class; is a http.cookiejar.CookieJar, but exposes a dict - interface. - - This is the CookieJar we create by default for requests and sessions that - don't specify one, since some clients may expect response.cookies and - session.cookies to support dict operations. - - Requests does not use the dict interface internally; it's just for - compatibility with external client code. All requests code should work - out of the box with externally provided instances of ``CookieJar``, e.g. - ``LWPCookieJar`` and ``FileCookieJar``. - - Unlike a regular CookieJar, this class is pickleable. - - .. warning:: dictionary operations that are normally O(1) may be O(n). - """ - - def get(self, name, default=None, domain=None, path=None): - """Dict-like get() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - - .. warning:: operation is O(n), not O(1). - """ - try: - return self._find_no_duplicates(name, domain, path) - except KeyError: - return default - - def set(self, name, value, **kwargs): - """Dict-like set() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - """ - # support client code that unsets cookies by assignment of a None value: - if value is None: - remove_cookie_by_name( - self, name, domain=kwargs.get("domain"), path=kwargs.get("path") - ) - return - - if isinstance(value, Morsel): - c = morsel_to_cookie(value) - else: - c = create_cookie(name, value, **kwargs) - self.set_cookie(c) - return c - - def iterkeys(self): - """Dict-like iterkeys() that returns an iterator of names of cookies - from the jar. - - .. seealso:: itervalues() and iteritems(). - """ - for cookie in iter(self): - yield cookie.name - - def keys(self): - """Dict-like keys() that returns a list of names of cookies from the - jar. - - .. seealso:: values() and items(). - """ - return list(self.iterkeys()) - - def itervalues(self): - """Dict-like itervalues() that returns an iterator of values of cookies - from the jar. - - .. seealso:: iterkeys() and iteritems(). - """ - for cookie in iter(self): - yield cookie.value - - def values(self): - """Dict-like values() that returns a list of values of cookies from the - jar. - - .. seealso:: keys() and items(). - """ - return list(self.itervalues()) - - def iteritems(self): - """Dict-like iteritems() that returns an iterator of name-value tuples - from the jar. - - .. seealso:: iterkeys() and itervalues(). - """ - for cookie in iter(self): - yield cookie.name, cookie.value - - def items(self): - """Dict-like items() that returns a list of name-value tuples from the - jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a - vanilla python dict of key value pairs. - - .. seealso:: keys() and values(). - """ - return list(self.iteritems()) - - def list_domains(self): - """Utility method to list all the domains in the jar.""" - domains = [] - for cookie in iter(self): - if cookie.domain not in domains: - domains.append(cookie.domain) - return domains - - def list_paths(self): - """Utility method to list all the paths in the jar.""" - paths = [] - for cookie in iter(self): - if cookie.path not in paths: - paths.append(cookie.path) - return paths - - def multiple_domains(self): - """Returns True if there are multiple domains in the jar. - Returns False otherwise. - - :rtype: bool - """ - domains = [] - for cookie in iter(self): - if cookie.domain is not None and cookie.domain in domains: - return True - domains.append(cookie.domain) - return False # there is only one domain in jar - - def get_dict(self, domain=None, path=None): - """Takes as an argument an optional domain and path and returns a plain - old Python dict of name-value pairs of cookies that meet the - requirements. - - :rtype: dict - """ - dictionary = {} - for cookie in iter(self): - if (domain is None or cookie.domain == domain) and ( - path is None or cookie.path == path - ): - dictionary[cookie.name] = cookie.value - return dictionary - - def __contains__(self, name): - try: - return super().__contains__(name) - except CookieConflictError: - return True - - def __getitem__(self, name): - """Dict-like __getitem__() for compatibility with client code. Throws - exception if there are more than one cookie with name. In that case, - use the more explicit get() method instead. - - .. warning:: operation is O(n), not O(1). - """ - return self._find_no_duplicates(name) - - def __setitem__(self, name, value): - """Dict-like __setitem__ for compatibility with client code. Throws - exception if there is already a cookie of that name in the jar. In that - case, use the more explicit set() method instead. - """ - self.set(name, value) - - def __delitem__(self, name): - """Deletes a cookie given a name. Wraps ``http.cookiejar.CookieJar``'s - ``remove_cookie_by_name()``. - """ - remove_cookie_by_name(self, name) - - def set_cookie(self, cookie, *args, **kwargs): - if ( - hasattr(cookie.value, "startswith") - and cookie.value.startswith('"') - and cookie.value.endswith('"') - ): - cookie.value = cookie.value.replace('\\"', "") - return super().set_cookie(cookie, *args, **kwargs) - - def update(self, other): - """Updates this jar with cookies from another CookieJar or dict-like""" - if isinstance(other, cookielib.CookieJar): - for cookie in other: - self.set_cookie(copy.copy(cookie)) - else: - super().update(other) - - def _find(self, name, domain=None, path=None): - """Requests uses this method internally to get cookie values. - - If there are conflicting cookies, _find arbitrarily chooses one. - See _find_no_duplicates if you want an exception thrown if there are - conflicting cookies. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :return: cookie.value - """ - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - return cookie.value - - raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") - - def _find_no_duplicates(self, name, domain=None, path=None): - """Both ``__get_item__`` and ``get`` call this function: it's never - used elsewhere in Requests. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :raises KeyError: if cookie is not found - :raises CookieConflictError: if there are multiple cookies - that match name and optionally domain and path - :return: cookie.value - """ - toReturn = None - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - if toReturn is not None: - # if there are multiple cookies that meet passed in criteria - raise CookieConflictError( - f"There are multiple cookies with name, {name!r}" - ) - # we will eventually return this as long as no cookie conflict - toReturn = cookie.value - - if toReturn: - return toReturn - raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}") - - def __getstate__(self): - """Unlike a normal CookieJar, this class is pickleable.""" - state = self.__dict__.copy() - # remove the unpickleable RLock object - state.pop("_cookies_lock") - return state - - def __setstate__(self, state): - """Unlike a normal CookieJar, this class is pickleable.""" - self.__dict__.update(state) - if "_cookies_lock" not in self.__dict__: - self._cookies_lock = threading.RLock() - - def copy(self): - """Return a copy of this RequestsCookieJar.""" - new_cj = RequestsCookieJar() - new_cj.set_policy(self.get_policy()) - new_cj.update(self) - return new_cj - - def get_policy(self): - """Return the CookiePolicy instance used.""" - return self._policy - - -def _copy_cookie_jar(jar): - if jar is None: - return None - - if hasattr(jar, "copy"): - # We're dealing with an instance of RequestsCookieJar - return jar.copy() - # We're dealing with a generic CookieJar instance - new_jar = copy.copy(jar) - new_jar.clear() - for cookie in jar: - new_jar.set_cookie(copy.copy(cookie)) - return new_jar - - -def create_cookie(name, value, **kwargs): - """Make a cookie from underspecified parameters. - - By default, the pair of `name` and `value` will be set for the domain '' - and sent on every request (this is sometimes called a "supercookie"). - """ - result = { - "version": 0, - "name": name, - "value": value, - "port": None, - "domain": "", - "path": "/", - "secure": False, - "expires": None, - "discard": True, - "comment": None, - "comment_url": None, - "rest": {"HttpOnly": None}, - "rfc2109": False, - } - - badargs = set(kwargs) - set(result) - if badargs: - raise TypeError( - f"create_cookie() got unexpected keyword arguments: {list(badargs)}" - ) - - result.update(kwargs) - result["port_specified"] = bool(result["port"]) - result["domain_specified"] = bool(result["domain"]) - result["domain_initial_dot"] = result["domain"].startswith(".") - result["path_specified"] = bool(result["path"]) - - return cookielib.Cookie(**result) - - -def morsel_to_cookie(morsel): - """Convert a Morsel object into a Cookie containing the one k/v pair.""" - - expires = None - if morsel["max-age"]: - try: - expires = int(time.time() + int(morsel["max-age"])) - except ValueError: - raise TypeError(f"max-age: {morsel['max-age']} must be integer") - elif morsel["expires"]: - time_template = "%a, %d-%b-%Y %H:%M:%S GMT" - expires = calendar.timegm(time.strptime(morsel["expires"], time_template)) - return create_cookie( - comment=morsel["comment"], - comment_url=bool(morsel["comment"]), - discard=False, - domain=morsel["domain"], - expires=expires, - name=morsel.key, - path=morsel["path"], - port=None, - rest={"HttpOnly": morsel["httponly"]}, - rfc2109=False, - secure=bool(morsel["secure"]), - value=morsel.value, - version=morsel["version"] or 0, - ) - - -def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): - """Returns a CookieJar from a key/value dictionary. - - :param cookie_dict: Dict of key/values to insert into CookieJar. - :param cookiejar: (optional) A cookiejar to add the cookies to. - :param overwrite: (optional) If False, will not replace cookies - already in the jar with new ones. - :rtype: CookieJar - """ - if cookiejar is None: - cookiejar = RequestsCookieJar() - - if cookie_dict is not None: - names_from_jar = [cookie.name for cookie in cookiejar] - for name in cookie_dict: - if overwrite or (name not in names_from_jar): - cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) - - return cookiejar - - -def merge_cookies(cookiejar, cookies): - """Add cookies to cookiejar and returns a merged CookieJar. - - :param cookiejar: CookieJar object to add the cookies to. - :param cookies: Dictionary or CookieJar object to be added. - :rtype: CookieJar - """ - if not isinstance(cookiejar, cookielib.CookieJar): - raise ValueError("You can only merge into CookieJar") - - if isinstance(cookies, dict): - cookiejar = cookiejar_from_dict(cookies, cookiejar=cookiejar, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - try: - cookiejar.update(cookies) - except AttributeError: - for cookie_in_jar in cookies: - cookiejar.set_cookie(cookie_in_jar) - - return cookiejar diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/exceptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/exceptions.py deleted file mode 100644 index 7f3660f00..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/exceptions.py +++ /dev/null @@ -1,151 +0,0 @@ -""" -requests.exceptions -~~~~~~~~~~~~~~~~~~~ - -This module contains the set of Requests' exceptions. -""" -from pip._vendor.urllib3.exceptions import HTTPError as BaseHTTPError - -from .compat import JSONDecodeError as CompatJSONDecodeError - - -class RequestException(IOError): - """There was an ambiguous exception that occurred while handling your - request. - """ - - def __init__(self, *args, **kwargs): - """Initialize RequestException with `request` and `response` objects.""" - response = kwargs.pop("response", None) - self.response = response - self.request = kwargs.pop("request", None) - if response is not None and not self.request and hasattr(response, "request"): - self.request = self.response.request - super().__init__(*args, **kwargs) - - -class InvalidJSONError(RequestException): - """A JSON error occurred.""" - - -class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError): - """Couldn't decode the text into json""" - - def __init__(self, *args, **kwargs): - """ - Construct the JSONDecodeError instance first with all - args. Then use it's args to construct the IOError so that - the json specific args aren't used as IOError specific args - and the error message from JSONDecodeError is preserved. - """ - CompatJSONDecodeError.__init__(self, *args) - InvalidJSONError.__init__(self, *self.args, **kwargs) - - def __reduce__(self): - """ - The __reduce__ method called when pickling the object must - be the one from the JSONDecodeError (be it json/simplejson) - as it expects all the arguments for instantiation, not just - one like the IOError, and the MRO would by default call the - __reduce__ method from the IOError due to the inheritance order. - """ - return CompatJSONDecodeError.__reduce__(self) - - -class HTTPError(RequestException): - """An HTTP error occurred.""" - - -class ConnectionError(RequestException): - """A Connection error occurred.""" - - -class ProxyError(ConnectionError): - """A proxy error occurred.""" - - -class SSLError(ConnectionError): - """An SSL error occurred.""" - - -class Timeout(RequestException): - """The request timed out. - - Catching this error will catch both - :exc:`~requests.exceptions.ConnectTimeout` and - :exc:`~requests.exceptions.ReadTimeout` errors. - """ - - -class ConnectTimeout(ConnectionError, Timeout): - """The request timed out while trying to connect to the remote server. - - Requests that produced this error are safe to retry. - """ - - -class ReadTimeout(Timeout): - """The server did not send any data in the allotted amount of time.""" - - -class URLRequired(RequestException): - """A valid URL is required to make a request.""" - - -class TooManyRedirects(RequestException): - """Too many redirects.""" - - -class MissingSchema(RequestException, ValueError): - """The URL scheme (e.g. http or https) is missing.""" - - -class InvalidSchema(RequestException, ValueError): - """The URL scheme provided is either invalid or unsupported.""" - - -class InvalidURL(RequestException, ValueError): - """The URL provided was somehow invalid.""" - - -class InvalidHeader(RequestException, ValueError): - """The header value provided was somehow invalid.""" - - -class InvalidProxyURL(InvalidURL): - """The proxy URL provided is invalid.""" - - -class ChunkedEncodingError(RequestException): - """The server declared chunked encoding but sent an invalid chunk.""" - - -class ContentDecodingError(RequestException, BaseHTTPError): - """Failed to decode response content.""" - - -class StreamConsumedError(RequestException, TypeError): - """The content for this response was already consumed.""" - - -class RetryError(RequestException): - """Custom retries logic failed""" - - -class UnrewindableBodyError(RequestException): - """Requests encountered an error when trying to rewind a body.""" - - -# Warnings - - -class RequestsWarning(Warning): - """Base warning for Requests.""" - - -class FileModeWarning(RequestsWarning, DeprecationWarning): - """A file was opened in text mode, but Requests determined its binary length.""" - - -class RequestsDependencyWarning(RequestsWarning): - """An imported dependency doesn't match the expected version range.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/help.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/help.py deleted file mode 100644 index ddbb6150d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/help.py +++ /dev/null @@ -1,127 +0,0 @@ -"""Module containing bug report helper(s).""" - -import json -import platform -import ssl -import sys - -from pip._vendor import idna -from pip._vendor import urllib3 - -from . import __version__ as requests_version - -charset_normalizer = None -chardet = None - -try: - from pip._vendor.urllib3.contrib import pyopenssl -except ImportError: - pyopenssl = None - OpenSSL = None - cryptography = None -else: - import cryptography - import OpenSSL - - -def _implementation(): - """Return a dict with the Python implementation and version. - - Provide both the name and the version of the Python implementation - currently running. For example, on CPython 3.10.3 it will return - {'name': 'CPython', 'version': '3.10.3'}. - - This function works best on CPython and PyPy: in particular, it probably - doesn't work for Jython or IronPython. Future investigation should be done - to work out the correct shape of the code for those platforms. - """ - implementation = platform.python_implementation() - - if implementation == "CPython": - implementation_version = platform.python_version() - elif implementation == "PyPy": - implementation_version = "{}.{}.{}".format( - sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro, - ) - if sys.pypy_version_info.releaselevel != "final": - implementation_version = "".join( - [implementation_version, sys.pypy_version_info.releaselevel] - ) - elif implementation == "Jython": - implementation_version = platform.python_version() # Complete Guess - elif implementation == "IronPython": - implementation_version = platform.python_version() # Complete Guess - else: - implementation_version = "Unknown" - - return {"name": implementation, "version": implementation_version} - - -def info(): - """Generate information for a bug report.""" - try: - platform_info = { - "system": platform.system(), - "release": platform.release(), - } - except OSError: - platform_info = { - "system": "Unknown", - "release": "Unknown", - } - - implementation_info = _implementation() - urllib3_info = {"version": urllib3.__version__} - charset_normalizer_info = {"version": None} - chardet_info = {"version": None} - if charset_normalizer: - charset_normalizer_info = {"version": charset_normalizer.__version__} - if chardet: - chardet_info = {"version": chardet.__version__} - - pyopenssl_info = { - "version": None, - "openssl_version": "", - } - if OpenSSL: - pyopenssl_info = { - "version": OpenSSL.__version__, - "openssl_version": f"{OpenSSL.SSL.OPENSSL_VERSION_NUMBER:x}", - } - cryptography_info = { - "version": getattr(cryptography, "__version__", ""), - } - idna_info = { - "version": getattr(idna, "__version__", ""), - } - - system_ssl = ssl.OPENSSL_VERSION_NUMBER - system_ssl_info = {"version": f"{system_ssl:x}" if system_ssl is not None else ""} - - return { - "platform": platform_info, - "implementation": implementation_info, - "system_ssl": system_ssl_info, - "using_pyopenssl": pyopenssl is not None, - "using_charset_normalizer": chardet is None, - "pyOpenSSL": pyopenssl_info, - "urllib3": urllib3_info, - "chardet": chardet_info, - "charset_normalizer": charset_normalizer_info, - "cryptography": cryptography_info, - "idna": idna_info, - "requests": { - "version": requests_version, - }, - } - - -def main(): - """Pretty-print the bug information as JSON.""" - print(json.dumps(info(), sort_keys=True, indent=2)) - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/hooks.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/hooks.py deleted file mode 100644 index d181ba2ec..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/hooks.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -requests.hooks -~~~~~~~~~~~~~~ - -This module provides the capabilities for the Requests hooks system. - -Available hooks: - -``response``: - The response generated from a Request. -""" -HOOKS = ["response"] - - -def default_hooks(): - return {event: [] for event in HOOKS} - - -# TODO: response is the only one - - -def dispatch_hook(key, hooks, hook_data, **kwargs): - """Dispatches a hook dictionary on a given piece of data.""" - hooks = hooks or {} - hooks = hooks.get(key) - if hooks: - if hasattr(hooks, "__call__"): - hooks = [hooks] - for hook in hooks: - _hook_data = hook(hook_data, **kwargs) - if _hook_data is not None: - hook_data = _hook_data - return hook_data diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/models.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/models.py deleted file mode 100644 index 22de95c06..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/models.py +++ /dev/null @@ -1,1039 +0,0 @@ -""" -requests.models -~~~~~~~~~~~~~~~ - -This module contains the primary objects that power Requests. -""" - -import datetime - -# Import encoding now, to avoid implicit import later. -# Implicit import within threads may cause LookupError when standard library is in a ZIP, -# such as in Embedded Python. See https://github.com/psf/requests/issues/3578. -import encodings.idna # noqa: F401 -from io import UnsupportedOperation - -from pip._vendor.urllib3.exceptions import ( - DecodeError, - LocationParseError, - ProtocolError, - ReadTimeoutError, - SSLError, -) -from pip._vendor.urllib3.fields import RequestField -from pip._vendor.urllib3.filepost import encode_multipart_formdata -from pip._vendor.urllib3.util import parse_url - -from ._internal_utils import to_native_string, unicode_is_ascii -from .auth import HTTPBasicAuth -from .compat import ( - Callable, - JSONDecodeError, - Mapping, - basestring, - builtin_str, - chardet, - cookielib, -) -from .compat import json as complexjson -from .compat import urlencode, urlsplit, urlunparse -from .cookies import _copy_cookie_jar, cookiejar_from_dict, get_cookie_header -from .exceptions import ( - ChunkedEncodingError, - ConnectionError, - ContentDecodingError, - HTTPError, - InvalidJSONError, - InvalidURL, -) -from .exceptions import JSONDecodeError as RequestsJSONDecodeError -from .exceptions import MissingSchema -from .exceptions import SSLError as RequestsSSLError -from .exceptions import StreamConsumedError -from .hooks import default_hooks -from .status_codes import codes -from .structures import CaseInsensitiveDict -from .utils import ( - check_header_validity, - get_auth_from_url, - guess_filename, - guess_json_utf, - iter_slices, - parse_header_links, - requote_uri, - stream_decode_response_unicode, - super_len, - to_key_val_list, -) - -#: The set of HTTP status codes that indicate an automatically -#: processable redirect. -REDIRECT_STATI = ( - codes.moved, # 301 - codes.found, # 302 - codes.other, # 303 - codes.temporary_redirect, # 307 - codes.permanent_redirect, # 308 -) - -DEFAULT_REDIRECT_LIMIT = 30 -CONTENT_CHUNK_SIZE = 10 * 1024 -ITER_CHUNK_SIZE = 512 - - -class RequestEncodingMixin: - @property - def path_url(self): - """Build the path URL to use.""" - - url = [] - - p = urlsplit(self.url) - - path = p.path - if not path: - path = "/" - - url.append(path) - - query = p.query - if query: - url.append("?") - url.append(query) - - return "".join(url) - - @staticmethod - def _encode_params(data): - """Encode parameters in a piece of data. - - Will successfully encode parameters when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - """ - - if isinstance(data, (str, bytes)): - return data - elif hasattr(data, "read"): - return data - elif hasattr(data, "__iter__"): - result = [] - for k, vs in to_key_val_list(data): - if isinstance(vs, basestring) or not hasattr(vs, "__iter__"): - vs = [vs] - for v in vs: - if v is not None: - result.append( - ( - k.encode("utf-8") if isinstance(k, str) else k, - v.encode("utf-8") if isinstance(v, str) else v, - ) - ) - return urlencode(result, doseq=True) - else: - return data - - @staticmethod - def _encode_files(files, data): - """Build the body for a multipart/form-data request. - - Will successfully encode files when passed as a dict or a list of - tuples. Order is retained if data is a list of tuples but arbitrary - if parameters are supplied as a dict. - The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) - or 4-tuples (filename, fileobj, contentype, custom_headers). - """ - if not files: - raise ValueError("Files must be provided.") - elif isinstance(data, basestring): - raise ValueError("Data must not be a string.") - - new_fields = [] - fields = to_key_val_list(data or {}) - files = to_key_val_list(files or {}) - - for field, val in fields: - if isinstance(val, basestring) or not hasattr(val, "__iter__"): - val = [val] - for v in val: - if v is not None: - # Don't call str() on bytestrings: in Py3 it all goes wrong. - if not isinstance(v, bytes): - v = str(v) - - new_fields.append( - ( - field.decode("utf-8") - if isinstance(field, bytes) - else field, - v.encode("utf-8") if isinstance(v, str) else v, - ) - ) - - for k, v in files: - # support for explicit filename - ft = None - fh = None - if isinstance(v, (tuple, list)): - if len(v) == 2: - fn, fp = v - elif len(v) == 3: - fn, fp, ft = v - else: - fn, fp, ft, fh = v - else: - fn = guess_filename(v) or k - fp = v - - if isinstance(fp, (str, bytes, bytearray)): - fdata = fp - elif hasattr(fp, "read"): - fdata = fp.read() - elif fp is None: - continue - else: - fdata = fp - - rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) - rf.make_multipart(content_type=ft) - new_fields.append(rf) - - body, content_type = encode_multipart_formdata(new_fields) - - return body, content_type - - -class RequestHooksMixin: - def register_hook(self, event, hook): - """Properly register a hook.""" - - if event not in self.hooks: - raise ValueError(f'Unsupported event specified, with event name "{event}"') - - if isinstance(hook, Callable): - self.hooks[event].append(hook) - elif hasattr(hook, "__iter__"): - self.hooks[event].extend(h for h in hook if isinstance(h, Callable)) - - def deregister_hook(self, event, hook): - """Deregister a previously registered hook. - Returns True if the hook existed, False if not. - """ - - try: - self.hooks[event].remove(hook) - return True - except ValueError: - return False - - -class Request(RequestHooksMixin): - """A user-created :class:`Request <Request>` object. - - Used to prepare a :class:`PreparedRequest <PreparedRequest>`, which is sent to the server. - - :param method: HTTP method to use. - :param url: URL to send. - :param headers: dictionary of headers to send. - :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary or - list of tuples ``[(key, value)]`` is provided, form-encoding will - take place. - :param json: json for the body to attach to the request (if files or data is not specified). - :param params: URL parameters to append to the URL. If a dictionary or - list of tuples ``[(key, value)]`` is provided, form-encoding will - take place. - :param auth: Auth handler or (user, pass) tuple. - :param cookies: dictionary or CookieJar of cookies to attach to this request. - :param hooks: dictionary of callback hooks, for internal usage. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'https://httpbin.org/get') - >>> req.prepare() - <PreparedRequest [GET]> - """ - - def __init__( - self, - method=None, - url=None, - headers=None, - files=None, - data=None, - params=None, - auth=None, - cookies=None, - hooks=None, - json=None, - ): - # Default empty dicts for dict params. - data = [] if data is None else data - files = [] if files is None else files - headers = {} if headers is None else headers - params = {} if params is None else params - hooks = {} if hooks is None else hooks - - self.hooks = default_hooks() - for k, v in list(hooks.items()): - self.register_hook(event=k, hook=v) - - self.method = method - self.url = url - self.headers = headers - self.files = files - self.data = data - self.json = json - self.params = params - self.auth = auth - self.cookies = cookies - - def __repr__(self): - return f"<Request [{self.method}]>" - - def prepare(self): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for transmission and returns it.""" - p = PreparedRequest() - p.prepare( - method=self.method, - url=self.url, - headers=self.headers, - files=self.files, - data=self.data, - json=self.json, - params=self.params, - auth=self.auth, - cookies=self.cookies, - hooks=self.hooks, - ) - return p - - -class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): - """The fully mutable :class:`PreparedRequest <PreparedRequest>` object, - containing the exact bytes that will be sent to the server. - - Instances are generated from a :class:`Request <Request>` object, and - should not be instantiated manually; doing so may produce undesirable - effects. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'https://httpbin.org/get') - >>> r = req.prepare() - >>> r - <PreparedRequest [GET]> - - >>> s = requests.Session() - >>> s.send(r) - <Response [200]> - """ - - def __init__(self): - #: HTTP verb to send to the server. - self.method = None - #: HTTP URL to send the request to. - self.url = None - #: dictionary of HTTP headers. - self.headers = None - # The `CookieJar` used to create the Cookie header will be stored here - # after prepare_cookies is called - self._cookies = None - #: request body to send to the server. - self.body = None - #: dictionary of callback hooks, for internal usage. - self.hooks = default_hooks() - #: integer denoting starting position of a readable file-like body. - self._body_position = None - - def prepare( - self, - method=None, - url=None, - headers=None, - files=None, - data=None, - params=None, - auth=None, - cookies=None, - hooks=None, - json=None, - ): - """Prepares the entire request with the given parameters.""" - - self.prepare_method(method) - self.prepare_url(url, params) - self.prepare_headers(headers) - self.prepare_cookies(cookies) - self.prepare_body(data, files, json) - self.prepare_auth(auth, url) - - # Note that prepare_auth must be last to enable authentication schemes - # such as OAuth to work on a fully prepared request. - - # This MUST go after prepare_auth. Authenticators could add a hook - self.prepare_hooks(hooks) - - def __repr__(self): - return f"<PreparedRequest [{self.method}]>" - - def copy(self): - p = PreparedRequest() - p.method = self.method - p.url = self.url - p.headers = self.headers.copy() if self.headers is not None else None - p._cookies = _copy_cookie_jar(self._cookies) - p.body = self.body - p.hooks = self.hooks - p._body_position = self._body_position - return p - - def prepare_method(self, method): - """Prepares the given HTTP method.""" - self.method = method - if self.method is not None: - self.method = to_native_string(self.method.upper()) - - @staticmethod - def _get_idna_encoded_host(host): - from pip._vendor import idna - - try: - host = idna.encode(host, uts46=True).decode("utf-8") - except idna.IDNAError: - raise UnicodeError - return host - - def prepare_url(self, url, params): - """Prepares the given HTTP URL.""" - #: Accept objects that have string representations. - #: We're unable to blindly call unicode/str functions - #: as this will include the bytestring indicator (b'') - #: on python 3.x. - #: https://github.com/psf/requests/pull/2238 - if isinstance(url, bytes): - url = url.decode("utf8") - else: - url = str(url) - - # Remove leading whitespaces from url - url = url.lstrip() - - # Don't do any URL preparation for non-HTTP schemes like `mailto`, - # `data` etc to work around exceptions from `url_parse`, which - # handles RFC 3986 only. - if ":" in url and not url.lower().startswith("http"): - self.url = url - return - - # Support for unicode domain names and paths. - try: - scheme, auth, host, port, path, query, fragment = parse_url(url) - except LocationParseError as e: - raise InvalidURL(*e.args) - - if not scheme: - raise MissingSchema( - f"Invalid URL {url!r}: No scheme supplied. " - f"Perhaps you meant https://{url}?" - ) - - if not host: - raise InvalidURL(f"Invalid URL {url!r}: No host supplied") - - # In general, we want to try IDNA encoding the hostname if the string contains - # non-ASCII characters. This allows users to automatically get the correct IDNA - # behaviour. For strings containing only ASCII characters, we need to also verify - # it doesn't start with a wildcard (*), before allowing the unencoded hostname. - if not unicode_is_ascii(host): - try: - host = self._get_idna_encoded_host(host) - except UnicodeError: - raise InvalidURL("URL has an invalid label.") - elif host.startswith(("*", ".")): - raise InvalidURL("URL has an invalid label.") - - # Carefully reconstruct the network location - netloc = auth or "" - if netloc: - netloc += "@" - netloc += host - if port: - netloc += f":{port}" - - # Bare domains aren't valid URLs. - if not path: - path = "/" - - if isinstance(params, (str, bytes)): - params = to_native_string(params) - - enc_params = self._encode_params(params) - if enc_params: - if query: - query = f"{query}&{enc_params}" - else: - query = enc_params - - url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) - self.url = url - - def prepare_headers(self, headers): - """Prepares the given HTTP headers.""" - - self.headers = CaseInsensitiveDict() - if headers: - for header in headers.items(): - # Raise exception on invalid header value. - check_header_validity(header) - name, value = header - self.headers[to_native_string(name)] = value - - def prepare_body(self, data, files, json=None): - """Prepares the given HTTP body data.""" - - # Check if file, fo, generator, iterator. - # If not, run through normal process. - - # Nottin' on you. - body = None - content_type = None - - if not data and json is not None: - # urllib3 requires a bytes-like body. Python 2's json.dumps - # provides this natively, but Python 3 gives a Unicode string. - content_type = "application/json" - - try: - body = complexjson.dumps(json, allow_nan=False) - except ValueError as ve: - raise InvalidJSONError(ve, request=self) - - if not isinstance(body, bytes): - body = body.encode("utf-8") - - is_stream = all( - [ - hasattr(data, "__iter__"), - not isinstance(data, (basestring, list, tuple, Mapping)), - ] - ) - - if is_stream: - try: - length = super_len(data) - except (TypeError, AttributeError, UnsupportedOperation): - length = None - - body = data - - if getattr(body, "tell", None) is not None: - # Record the current file position before reading. - # This will allow us to rewind a file in the event - # of a redirect. - try: - self._body_position = body.tell() - except OSError: - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body - self._body_position = object() - - if files: - raise NotImplementedError( - "Streamed bodies and files are mutually exclusive." - ) - - if length: - self.headers["Content-Length"] = builtin_str(length) - else: - self.headers["Transfer-Encoding"] = "chunked" - else: - # Multi-part file uploads. - if files: - (body, content_type) = self._encode_files(files, data) - else: - if data: - body = self._encode_params(data) - if isinstance(data, basestring) or hasattr(data, "read"): - content_type = None - else: - content_type = "application/x-www-form-urlencoded" - - self.prepare_content_length(body) - - # Add content-type if it wasn't explicitly provided. - if content_type and ("content-type" not in self.headers): - self.headers["Content-Type"] = content_type - - self.body = body - - def prepare_content_length(self, body): - """Prepare Content-Length header based on request method and body""" - if body is not None: - length = super_len(body) - if length: - # If length exists, set it. Otherwise, we fallback - # to Transfer-Encoding: chunked. - self.headers["Content-Length"] = builtin_str(length) - elif ( - self.method not in ("GET", "HEAD") - and self.headers.get("Content-Length") is None - ): - # Set Content-Length to 0 for methods that can have a body - # but don't provide one. (i.e. not GET or HEAD) - self.headers["Content-Length"] = "0" - - def prepare_auth(self, auth, url=""): - """Prepares the given HTTP auth data.""" - - # If no Auth is explicitly provided, extract it from the URL first. - if auth is None: - url_auth = get_auth_from_url(self.url) - auth = url_auth if any(url_auth) else None - - if auth: - if isinstance(auth, tuple) and len(auth) == 2: - # special-case basic HTTP auth - auth = HTTPBasicAuth(*auth) - - # Allow auth to make its changes. - r = auth(self) - - # Update self to reflect the auth changes. - self.__dict__.update(r.__dict__) - - # Recompute Content-Length - self.prepare_content_length(self.body) - - def prepare_cookies(self, cookies): - """Prepares the given HTTP cookie data. - - This function eventually generates a ``Cookie`` header from the - given cookies using cookielib. Due to cookielib's design, the header - will not be regenerated if it already exists, meaning this function - can only be called once for the life of the - :class:`PreparedRequest <PreparedRequest>` object. Any subsequent calls - to ``prepare_cookies`` will have no actual effect, unless the "Cookie" - header is removed beforehand. - """ - if isinstance(cookies, cookielib.CookieJar): - self._cookies = cookies - else: - self._cookies = cookiejar_from_dict(cookies) - - cookie_header = get_cookie_header(self._cookies, self) - if cookie_header is not None: - self.headers["Cookie"] = cookie_header - - def prepare_hooks(self, hooks): - """Prepares the given hooks.""" - # hooks can be passed as None to the prepare method and to this - # method. To prevent iterating over None, simply use an empty list - # if hooks is False-y - hooks = hooks or [] - for event in hooks: - self.register_hook(event, hooks[event]) - - -class Response: - """The :class:`Response <Response>` object, which contains a - server's response to an HTTP request. - """ - - __attrs__ = [ - "_content", - "status_code", - "headers", - "url", - "history", - "encoding", - "reason", - "cookies", - "elapsed", - "request", - ] - - def __init__(self): - self._content = False - self._content_consumed = False - self._next = None - - #: Integer Code of responded HTTP Status, e.g. 404 or 200. - self.status_code = None - - #: Case-insensitive Dictionary of Response Headers. - #: For example, ``headers['content-encoding']`` will return the - #: value of a ``'Content-Encoding'`` response header. - self.headers = CaseInsensitiveDict() - - #: File-like object representation of response (for advanced usage). - #: Use of ``raw`` requires that ``stream=True`` be set on the request. - #: This requirement does not apply for use internally to Requests. - self.raw = None - - #: Final URL location of Response. - self.url = None - - #: Encoding to decode with when accessing r.text. - self.encoding = None - - #: A list of :class:`Response <Response>` objects from - #: the history of the Request. Any redirect responses will end - #: up here. The list is sorted from the oldest to the most recent request. - self.history = [] - - #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". - self.reason = None - - #: A CookieJar of Cookies the server sent back. - self.cookies = cookiejar_from_dict({}) - - #: The amount of time elapsed between sending the request - #: and the arrival of the response (as a timedelta). - #: This property specifically measures the time taken between sending - #: the first byte of the request and finishing parsing the headers. It - #: is therefore unaffected by consuming the response content or the - #: value of the ``stream`` keyword argument. - self.elapsed = datetime.timedelta(0) - - #: The :class:`PreparedRequest <PreparedRequest>` object to which this - #: is a response. - self.request = None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def __getstate__(self): - # Consume everything; accessing the content attribute makes - # sure the content has been fully read. - if not self._content_consumed: - self.content - - return {attr: getattr(self, attr, None) for attr in self.__attrs__} - - def __setstate__(self, state): - for name, value in state.items(): - setattr(self, name, value) - - # pickled objects do not have .raw - setattr(self, "_content_consumed", True) - setattr(self, "raw", None) - - def __repr__(self): - return f"<Response [{self.status_code}]>" - - def __bool__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __nonzero__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __iter__(self): - """Allows you to use a response as an iterator.""" - return self.iter_content(128) - - @property - def ok(self): - """Returns True if :attr:`status_code` is less than 400, False if not. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - try: - self.raise_for_status() - except HTTPError: - return False - return True - - @property - def is_redirect(self): - """True if this Response is a well-formed HTTP redirect that could have - been processed automatically (by :meth:`Session.resolve_redirects`). - """ - return "location" in self.headers and self.status_code in REDIRECT_STATI - - @property - def is_permanent_redirect(self): - """True if this Response one of the permanent versions of redirect.""" - return "location" in self.headers and self.status_code in ( - codes.moved_permanently, - codes.permanent_redirect, - ) - - @property - def next(self): - """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" - return self._next - - @property - def apparent_encoding(self): - """The apparent encoding, provided by the charset_normalizer or chardet libraries.""" - if chardet is not None: - return chardet.detect(self.content)["encoding"] - else: - # If no character detection library is available, we'll fall back - # to a standard Python utf-8 str. - return "utf-8" - - def iter_content(self, chunk_size=1, decode_unicode=False): - """Iterates over the response data. When stream=True is set on the - request, this avoids reading the content at once into memory for - large responses. The chunk size is the number of bytes it should - read into memory. This is not necessarily the length of each item - returned as decoding can take place. - - chunk_size must be of type int or None. A value of None will - function differently depending on the value of `stream`. - stream=True will read data as it arrives in whatever size the - chunks are received. If stream=False, data is returned as - a single chunk. - - If decode_unicode is True, content will be decoded using the best - available encoding based on the response. - """ - - def generate(): - # Special case for urllib3. - if hasattr(self.raw, "stream"): - try: - yield from self.raw.stream(chunk_size, decode_content=True) - except ProtocolError as e: - raise ChunkedEncodingError(e) - except DecodeError as e: - raise ContentDecodingError(e) - except ReadTimeoutError as e: - raise ConnectionError(e) - except SSLError as e: - raise RequestsSSLError(e) - else: - # Standard file-like object. - while True: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk - - self._content_consumed = True - - if self._content_consumed and isinstance(self._content, bool): - raise StreamConsumedError() - elif chunk_size is not None and not isinstance(chunk_size, int): - raise TypeError( - f"chunk_size must be an int, it is instead a {type(chunk_size)}." - ) - # simulate reading small chunks of the content - reused_chunks = iter_slices(self._content, chunk_size) - - stream_chunks = generate() - - chunks = reused_chunks if self._content_consumed else stream_chunks - - if decode_unicode: - chunks = stream_decode_response_unicode(chunks, self) - - return chunks - - def iter_lines( - self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=False, delimiter=None - ): - """Iterates over the response data, one line at a time. When - stream=True is set on the request, this avoids reading the - content at once into memory for large responses. - - .. note:: This method is not reentrant safe. - """ - - pending = None - - for chunk in self.iter_content( - chunk_size=chunk_size, decode_unicode=decode_unicode - ): - if pending is not None: - chunk = pending + chunk - - if delimiter: - lines = chunk.split(delimiter) - else: - lines = chunk.splitlines() - - if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: - pending = lines.pop() - else: - pending = None - - yield from lines - - if pending is not None: - yield pending - - @property - def content(self): - """Content of the response, in bytes.""" - - if self._content is False: - # Read the contents. - if self._content_consumed: - raise RuntimeError("The content for this response was already consumed") - - if self.status_code == 0 or self.raw is None: - self._content = None - else: - self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b"" - - self._content_consumed = True - # don't need to release the connection; that's been handled by urllib3 - # since we exhausted the data. - return self._content - - @property - def text(self): - """Content of the response, in unicode. - - If Response.encoding is None, encoding will be guessed using - ``charset_normalizer`` or ``chardet``. - - The encoding of the response content is determined based solely on HTTP - headers, following RFC 2616 to the letter. If you can take advantage of - non-HTTP knowledge to make a better guess at the encoding, you should - set ``r.encoding`` appropriately before accessing this property. - """ - - # Try charset from content-type - content = None - encoding = self.encoding - - if not self.content: - return "" - - # Fallback to auto-detected encoding. - if self.encoding is None: - encoding = self.apparent_encoding - - # Decode unicode from given encoding. - try: - content = str(self.content, encoding, errors="replace") - except (LookupError, TypeError): - # A LookupError is raised if the encoding was not found which could - # indicate a misspelling or similar mistake. - # - # A TypeError can be raised if encoding is None - # - # So we try blindly encoding. - content = str(self.content, errors="replace") - - return content - - def json(self, **kwargs): - r"""Decodes the JSON response body (if any) as a Python object. - - This may return a dictionary, list, etc. depending on what is in the response. - - :param \*\*kwargs: Optional arguments that ``json.loads`` takes. - :raises requests.exceptions.JSONDecodeError: If the response body does not - contain valid json. - """ - - if not self.encoding and self.content and len(self.content) > 3: - # No encoding set. JSON RFC 4627 section 3 states we should expect - # UTF-8, -16 or -32. Detect which one to use; If the detection or - # decoding fails, fall back to `self.text` (using charset_normalizer to make - # a best guess). - encoding = guess_json_utf(self.content) - if encoding is not None: - try: - return complexjson.loads(self.content.decode(encoding), **kwargs) - except UnicodeDecodeError: - # Wrong UTF codec detected; usually because it's not UTF-8 - # but some other 8-bit codec. This is an RFC violation, - # and the server didn't bother to tell us what codec *was* - # used. - pass - except JSONDecodeError as e: - raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) - - try: - return complexjson.loads(self.text, **kwargs) - except JSONDecodeError as e: - # Catch JSON-related errors and raise as requests.JSONDecodeError - # This aliases json.JSONDecodeError and simplejson.JSONDecodeError - raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) - - @property - def links(self): - """Returns the parsed header links of the response, if any.""" - - header = self.headers.get("link") - - resolved_links = {} - - if header: - links = parse_header_links(header) - - for link in links: - key = link.get("rel") or link.get("url") - resolved_links[key] = link - - return resolved_links - - def raise_for_status(self): - """Raises :class:`HTTPError`, if one occurred.""" - - http_error_msg = "" - if isinstance(self.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. (See PR #3538) - try: - reason = self.reason.decode("utf-8") - except UnicodeDecodeError: - reason = self.reason.decode("iso-8859-1") - else: - reason = self.reason - - if 400 <= self.status_code < 500: - http_error_msg = ( - f"{self.status_code} Client Error: {reason} for url: {self.url}" - ) - - elif 500 <= self.status_code < 600: - http_error_msg = ( - f"{self.status_code} Server Error: {reason} for url: {self.url}" - ) - - if http_error_msg: - raise HTTPError(http_error_msg, response=self) - - def close(self): - """Releases the connection back to the pool. Once this method has been - called the underlying ``raw`` object must not be accessed again. - - *Note: Should not normally need to be called explicitly.* - """ - if not self._content_consumed: - self.raw.close() - - release_conn = getattr(self.raw, "release_conn", None) - if release_conn is not None: - release_conn() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/packages.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/packages.py deleted file mode 100644 index 200c38287..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/packages.py +++ /dev/null @@ -1,25 +0,0 @@ -import sys - -from .compat import chardet - -# This code exists for backwards compatibility reasons. -# I don't like it either. Just look the other way. :) - -for package in ("urllib3", "idna"): - vendored_package = "pip._vendor." + package - locals()[package] = __import__(vendored_package) - # This traversal is apparently necessary such that the identities are - # preserved (requests.packages.urllib3.* is urllib3.*) - for mod in list(sys.modules): - if mod == vendored_package or mod.startswith(vendored_package + '.'): - unprefixed_mod = mod[len("pip._vendor."):] - sys.modules['pip._vendor.requests.packages.' + unprefixed_mod] = sys.modules[mod] - -if chardet is not None: - target = chardet.__name__ - for mod in list(sys.modules): - if mod == target or mod.startswith(f"{target}."): - imported_mod = sys.modules[mod] - sys.modules[f"requests.packages.{mod}"] = imported_mod - mod = mod.replace(target, "chardet") - sys.modules[f"requests.packages.{mod}"] = imported_mod diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/sessions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/sessions.py deleted file mode 100644 index 731550de8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/sessions.py +++ /dev/null @@ -1,831 +0,0 @@ -""" -requests.sessions -~~~~~~~~~~~~~~~~~ - -This module provides a Session object to manage and persist settings across -requests (cookies, auth, proxies). -""" -import os -import sys -import time -from collections import OrderedDict -from datetime import timedelta - -from ._internal_utils import to_native_string -from .adapters import HTTPAdapter -from .auth import _basic_auth_str -from .compat import Mapping, cookielib, urljoin, urlparse -from .cookies import ( - RequestsCookieJar, - cookiejar_from_dict, - extract_cookies_to_jar, - merge_cookies, -) -from .exceptions import ( - ChunkedEncodingError, - ContentDecodingError, - InvalidSchema, - TooManyRedirects, -) -from .hooks import default_hooks, dispatch_hook - -# formerly defined here, reexposed here for backward compatibility -from .models import ( # noqa: F401 - DEFAULT_REDIRECT_LIMIT, - REDIRECT_STATI, - PreparedRequest, - Request, -) -from .status_codes import codes -from .structures import CaseInsensitiveDict -from .utils import ( # noqa: F401 - DEFAULT_PORTS, - default_headers, - get_auth_from_url, - get_environ_proxies, - get_netrc_auth, - requote_uri, - resolve_proxies, - rewind_body, - should_bypass_proxies, - to_key_val_list, -) - -# Preferred clock, based on which one is more accurate on a given system. -if sys.platform == "win32": - preferred_clock = time.perf_counter -else: - preferred_clock = time.time - - -def merge_setting(request_setting, session_setting, dict_class=OrderedDict): - """Determines appropriate setting for a given request, taking into account - the explicit setting on that request, and the setting in the session. If a - setting is a dictionary, they will be merged together using `dict_class` - """ - - if session_setting is None: - return request_setting - - if request_setting is None: - return session_setting - - # Bypass if not a dictionary (e.g. verify) - if not ( - isinstance(session_setting, Mapping) and isinstance(request_setting, Mapping) - ): - return request_setting - - merged_setting = dict_class(to_key_val_list(session_setting)) - merged_setting.update(to_key_val_list(request_setting)) - - # Remove keys that are set to None. Extract keys first to avoid altering - # the dictionary during iteration. - none_keys = [k for (k, v) in merged_setting.items() if v is None] - for key in none_keys: - del merged_setting[key] - - return merged_setting - - -def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): - """Properly merges both requests and session hooks. - - This is necessary because when request_hooks == {'response': []}, the - merge breaks Session hooks entirely. - """ - if session_hooks is None or session_hooks.get("response") == []: - return request_hooks - - if request_hooks is None or request_hooks.get("response") == []: - return session_hooks - - return merge_setting(request_hooks, session_hooks, dict_class) - - -class SessionRedirectMixin: - def get_redirect_target(self, resp): - """Receives a Response. Returns a redirect URI or ``None``""" - # Due to the nature of how requests processes redirects this method will - # be called at least once upon the original response and at least twice - # on each subsequent redirect response (if any). - # If a custom mixin is used to handle this logic, it may be advantageous - # to cache the redirect location onto the response object as a private - # attribute. - if resp.is_redirect: - location = resp.headers["location"] - # Currently the underlying http module on py3 decode headers - # in latin1, but empirical evidence suggests that latin1 is very - # rarely used with non-ASCII characters in HTTP headers. - # It is more likely to get UTF8 header rather than latin1. - # This causes incorrect handling of UTF8 encoded location headers. - # To solve this, we re-encode the location in latin1. - location = location.encode("latin1") - return to_native_string(location, "utf8") - return None - - def should_strip_auth(self, old_url, new_url): - """Decide whether Authorization header should be removed when redirecting""" - old_parsed = urlparse(old_url) - new_parsed = urlparse(new_url) - if old_parsed.hostname != new_parsed.hostname: - return True - # Special case: allow http -> https redirect when using the standard - # ports. This isn't specified by RFC 7235, but is kept to avoid - # breaking backwards compatibility with older versions of requests - # that allowed any redirects on the same host. - if ( - old_parsed.scheme == "http" - and old_parsed.port in (80, None) - and new_parsed.scheme == "https" - and new_parsed.port in (443, None) - ): - return False - - # Handle default port usage corresponding to scheme. - changed_port = old_parsed.port != new_parsed.port - changed_scheme = old_parsed.scheme != new_parsed.scheme - default_port = (DEFAULT_PORTS.get(old_parsed.scheme, None), None) - if ( - not changed_scheme - and old_parsed.port in default_port - and new_parsed.port in default_port - ): - return False - - # Standard case: root URI must match - return changed_port or changed_scheme - - def resolve_redirects( - self, - resp, - req, - stream=False, - timeout=None, - verify=True, - cert=None, - proxies=None, - yield_requests=False, - **adapter_kwargs, - ): - """Receives a Response. Returns a generator of Responses or Requests.""" - - hist = [] # keep track of history - - url = self.get_redirect_target(resp) - previous_fragment = urlparse(req.url).fragment - while url: - prepared_request = req.copy() - - # Update history and keep track of redirects. - # resp.history must ignore the original request in this loop - hist.append(resp) - resp.history = hist[1:] - - try: - resp.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): - resp.raw.read(decode_content=False) - - if len(resp.history) >= self.max_redirects: - raise TooManyRedirects( - f"Exceeded {self.max_redirects} redirects.", response=resp - ) - - # Release the connection back into the pool. - resp.close() - - # Handle redirection without scheme (see: RFC 1808 Section 4) - if url.startswith("//"): - parsed_rurl = urlparse(resp.url) - url = ":".join([to_native_string(parsed_rurl.scheme), url]) - - # Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2) - parsed = urlparse(url) - if parsed.fragment == "" and previous_fragment: - parsed = parsed._replace(fragment=previous_fragment) - elif parsed.fragment: - previous_fragment = parsed.fragment - url = parsed.geturl() - - # Facilitate relative 'location' headers, as allowed by RFC 7231. - # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') - # Compliant with RFC3986, we percent encode the url. - if not parsed.netloc: - url = urljoin(resp.url, requote_uri(url)) - else: - url = requote_uri(url) - - prepared_request.url = to_native_string(url) - - self.rebuild_method(prepared_request, resp) - - # https://github.com/psf/requests/issues/1084 - if resp.status_code not in ( - codes.temporary_redirect, - codes.permanent_redirect, - ): - # https://github.com/psf/requests/issues/3490 - purged_headers = ("Content-Length", "Content-Type", "Transfer-Encoding") - for header in purged_headers: - prepared_request.headers.pop(header, None) - prepared_request.body = None - - headers = prepared_request.headers - headers.pop("Cookie", None) - - # Extract any cookies sent on the response to the cookiejar - # in the new request. Because we've mutated our copied prepared - # request, use the old one that we haven't yet touched. - extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) - merge_cookies(prepared_request._cookies, self.cookies) - prepared_request.prepare_cookies(prepared_request._cookies) - - # Rebuild auth and proxy information. - proxies = self.rebuild_proxies(prepared_request, proxies) - self.rebuild_auth(prepared_request, resp) - - # A failed tell() sets `_body_position` to `object()`. This non-None - # value ensures `rewindable` will be True, allowing us to raise an - # UnrewindableBodyError, instead of hanging the connection. - rewindable = prepared_request._body_position is not None and ( - "Content-Length" in headers or "Transfer-Encoding" in headers - ) - - # Attempt to rewind consumed file-like object. - if rewindable: - rewind_body(prepared_request) - - # Override the original request. - req = prepared_request - - if yield_requests: - yield req - else: - resp = self.send( - req, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - allow_redirects=False, - **adapter_kwargs, - ) - - extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) - - # extract redirect url, if any, for the next loop - url = self.get_redirect_target(resp) - yield resp - - def rebuild_auth(self, prepared_request, response): - """When being redirected we may want to strip authentication from the - request to avoid leaking credentials. This method intelligently removes - and reapplies authentication where possible to avoid credential loss. - """ - headers = prepared_request.headers - url = prepared_request.url - - if "Authorization" in headers and self.should_strip_auth( - response.request.url, url - ): - # If we get redirected to a new host, we should strip out any - # authentication headers. - del headers["Authorization"] - - # .netrc might have more auth for us on our new host. - new_auth = get_netrc_auth(url) if self.trust_env else None - if new_auth is not None: - prepared_request.prepare_auth(new_auth) - - def rebuild_proxies(self, prepared_request, proxies): - """This method re-evaluates the proxy configuration by considering the - environment variables. If we are redirected to a URL covered by - NO_PROXY, we strip the proxy configuration. Otherwise, we set missing - proxy keys for this URL (in case they were stripped by a previous - redirect). - - This method also replaces the Proxy-Authorization header where - necessary. - - :rtype: dict - """ - headers = prepared_request.headers - scheme = urlparse(prepared_request.url).scheme - new_proxies = resolve_proxies(prepared_request, proxies, self.trust_env) - - if "Proxy-Authorization" in headers: - del headers["Proxy-Authorization"] - - try: - username, password = get_auth_from_url(new_proxies[scheme]) - except KeyError: - username, password = None, None - - # urllib3 handles proxy authorization for us in the standard adapter. - # Avoid appending this to TLS tunneled requests where it may be leaked. - if not scheme.startswith("https") and username and password: - headers["Proxy-Authorization"] = _basic_auth_str(username, password) - - return new_proxies - - def rebuild_method(self, prepared_request, response): - """When being redirected we may want to change the method of the request - based on certain specs or browser behavior. - """ - method = prepared_request.method - - # https://tools.ietf.org/html/rfc7231#section-6.4.4 - if response.status_code == codes.see_other and method != "HEAD": - method = "GET" - - # Do what the browsers do, despite standards... - # First, turn 302s into GETs. - if response.status_code == codes.found and method != "HEAD": - method = "GET" - - # Second, if a POST is responded to with a 301, turn it into a GET. - # This bizarre behaviour is explained in Issue 1704. - if response.status_code == codes.moved and method == "POST": - method = "GET" - - prepared_request.method = method - - -class Session(SessionRedirectMixin): - """A Requests session. - - Provides cookie persistence, connection-pooling, and configuration. - - Basic Usage:: - - >>> import requests - >>> s = requests.Session() - >>> s.get('https://httpbin.org/get') - <Response [200]> - - Or as a context manager:: - - >>> with requests.Session() as s: - ... s.get('https://httpbin.org/get') - <Response [200]> - """ - - __attrs__ = [ - "headers", - "cookies", - "auth", - "proxies", - "hooks", - "params", - "verify", - "cert", - "adapters", - "stream", - "trust_env", - "max_redirects", - ] - - def __init__(self): - #: A case-insensitive dictionary of headers to be sent on each - #: :class:`Request <Request>` sent from this - #: :class:`Session <Session>`. - self.headers = default_headers() - - #: Default Authentication tuple or object to attach to - #: :class:`Request <Request>`. - self.auth = None - - #: Dictionary mapping protocol or protocol and host to the URL of the proxy - #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to - #: be used on each :class:`Request <Request>`. - self.proxies = {} - - #: Event-handling hooks. - self.hooks = default_hooks() - - #: Dictionary of querystring data to attach to each - #: :class:`Request <Request>`. The dictionary values may be lists for - #: representing multivalued query parameters. - self.params = {} - - #: Stream response content default. - self.stream = False - - #: SSL Verification default. - #: Defaults to `True`, requiring requests to verify the TLS certificate at the - #: remote end. - #: If verify is set to `False`, requests will accept any TLS certificate - #: presented by the server, and will ignore hostname mismatches and/or - #: expired certificates, which will make your application vulnerable to - #: man-in-the-middle (MitM) attacks. - #: Only set this to `False` for testing. - self.verify = True - - #: SSL client certificate default, if String, path to ssl client - #: cert file (.pem). If Tuple, ('cert', 'key') pair. - self.cert = None - - #: Maximum number of redirects allowed. If the request exceeds this - #: limit, a :class:`TooManyRedirects` exception is raised. - #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is - #: 30. - self.max_redirects = DEFAULT_REDIRECT_LIMIT - - #: Trust environment settings for proxy configuration, default - #: authentication and similar. - self.trust_env = True - - #: A CookieJar containing all currently outstanding cookies set on this - #: session. By default it is a - #: :class:`RequestsCookieJar <requests.cookies.RequestsCookieJar>`, but - #: may be any other ``cookielib.CookieJar`` compatible object. - self.cookies = cookiejar_from_dict({}) - - # Default connection adapters. - self.adapters = OrderedDict() - self.mount("https://", HTTPAdapter()) - self.mount("http://", HTTPAdapter()) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def prepare_request(self, request): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for - transmission and returns it. The :class:`PreparedRequest` has settings - merged from the :class:`Request <Request>` instance and those of the - :class:`Session`. - - :param request: :class:`Request` instance to prepare with this - session's settings. - :rtype: requests.PreparedRequest - """ - cookies = request.cookies or {} - - # Bootstrap CookieJar. - if not isinstance(cookies, cookielib.CookieJar): - cookies = cookiejar_from_dict(cookies) - - # Merge with session cookies - merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies - ) - - # Set environment's basic authentication if not explicitly set. - auth = request.auth - if self.trust_env and not auth and not self.auth: - auth = get_netrc_auth(request.url) - - p = PreparedRequest() - p.prepare( - method=request.method.upper(), - url=request.url, - files=request.files, - data=request.data, - json=request.json, - headers=merge_setting( - request.headers, self.headers, dict_class=CaseInsensitiveDict - ), - params=merge_setting(request.params, self.params), - auth=merge_setting(auth, self.auth), - cookies=merged_cookies, - hooks=merge_hooks(request.hooks, self.hooks), - ) - return p - - def request( - self, - method, - url, - params=None, - data=None, - headers=None, - cookies=None, - files=None, - auth=None, - timeout=None, - allow_redirects=True, - proxies=None, - hooks=None, - stream=None, - verify=None, - cert=None, - json=None, - ): - """Constructs a :class:`Request <Request>`, prepares it and sends it. - Returns :class:`Response <Response>` object. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query - string for the :class:`Request`. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the - :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the - :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the - :class:`Request`. - :param files: (optional) Dictionary of ``'filename': file-like-objects`` - for multipart encoding upload. - :param auth: (optional) Auth tuple or callable to enable - Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Set to True by default. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol or protocol and - hostname to the URL of the proxy. - :param hooks: (optional) Dictionary mapping hook name to one event or - list of events, event must be callable. - :param stream: (optional) whether to immediately download the response - content. Defaults to ``False``. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. When set to - ``False``, requests will accept any TLS certificate presented by - the server, and will ignore hostname mismatches and/or expired - certificates, which will make your application vulnerable to - man-in-the-middle (MitM) attacks. Setting verify to ``False`` - may be useful during local development or testing. - :param cert: (optional) if String, path to ssl client cert file (.pem). - If Tuple, ('cert', 'key') pair. - :rtype: requests.Response - """ - # Create the Request. - req = Request( - method=method.upper(), - url=url, - headers=headers, - files=files, - data=data or {}, - json=json, - params=params or {}, - auth=auth, - cookies=cookies, - hooks=hooks, - ) - prep = self.prepare_request(req) - - proxies = proxies or {} - - settings = self.merge_environment_settings( - prep.url, proxies, stream, verify, cert - ) - - # Send the request. - send_kwargs = { - "timeout": timeout, - "allow_redirects": allow_redirects, - } - send_kwargs.update(settings) - resp = self.send(prep, **send_kwargs) - - return resp - - def get(self, url, **kwargs): - r"""Sends a GET request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", True) - return self.request("GET", url, **kwargs) - - def options(self, url, **kwargs): - r"""Sends a OPTIONS request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", True) - return self.request("OPTIONS", url, **kwargs) - - def head(self, url, **kwargs): - r"""Sends a HEAD request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault("allow_redirects", False) - return self.request("HEAD", url, **kwargs) - - def post(self, url, data=None, json=None, **kwargs): - r"""Sends a POST request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("POST", url, data=data, json=json, **kwargs) - - def put(self, url, data=None, **kwargs): - r"""Sends a PUT request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("PUT", url, data=data, **kwargs) - - def patch(self, url, data=None, **kwargs): - r"""Sends a PATCH request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, list of tuples, bytes, or file-like - object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("PATCH", url, data=data, **kwargs) - - def delete(self, url, **kwargs): - r"""Sends a DELETE request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request("DELETE", url, **kwargs) - - def send(self, request, **kwargs): - """Send a given PreparedRequest. - - :rtype: requests.Response - """ - # Set defaults that the hooks can utilize to ensure they always have - # the correct parameters to reproduce the previous request. - kwargs.setdefault("stream", self.stream) - kwargs.setdefault("verify", self.verify) - kwargs.setdefault("cert", self.cert) - if "proxies" not in kwargs: - kwargs["proxies"] = resolve_proxies(request, self.proxies, self.trust_env) - - # It's possible that users might accidentally send a Request object. - # Guard against that specific failure case. - if isinstance(request, Request): - raise ValueError("You can only send PreparedRequests.") - - # Set up variables needed for resolve_redirects and dispatching of hooks - allow_redirects = kwargs.pop("allow_redirects", True) - stream = kwargs.get("stream") - hooks = request.hooks - - # Get the appropriate adapter to use - adapter = self.get_adapter(url=request.url) - - # Start time (approximately) of the request - start = preferred_clock() - - # Send the request - r = adapter.send(request, **kwargs) - - # Total elapsed time of the request (approximately) - elapsed = preferred_clock() - start - r.elapsed = timedelta(seconds=elapsed) - - # Response manipulation hooks - r = dispatch_hook("response", hooks, r, **kwargs) - - # Persist cookies - if r.history: - # If the hooks create history then we want those cookies too - for resp in r.history: - extract_cookies_to_jar(self.cookies, resp.request, resp.raw) - - extract_cookies_to_jar(self.cookies, request, r.raw) - - # Resolve redirects if allowed. - if allow_redirects: - # Redirect resolving generator. - gen = self.resolve_redirects(r, request, **kwargs) - history = [resp for resp in gen] - else: - history = [] - - # Shuffle things around if there's history. - if history: - # Insert the first (original) request at the start - history.insert(0, r) - # Get the last request made - r = history.pop() - r.history = history - - # If redirects aren't being followed, store the response on the Request for Response.next(). - if not allow_redirects: - try: - r._next = next( - self.resolve_redirects(r, request, yield_requests=True, **kwargs) - ) - except StopIteration: - pass - - if not stream: - r.content - - return r - - def merge_environment_settings(self, url, proxies, stream, verify, cert): - """ - Check the environment and merge it with some settings. - - :rtype: dict - """ - # Gather clues from the surrounding environment. - if self.trust_env: - # Set environment's proxies. - no_proxy = proxies.get("no_proxy") if proxies is not None else None - env_proxies = get_environ_proxies(url, no_proxy=no_proxy) - for k, v in env_proxies.items(): - proxies.setdefault(k, v) - - # Look for requests environment configuration - # and be compatible with cURL. - if verify is True or verify is None: - verify = ( - os.environ.get("REQUESTS_CA_BUNDLE") - or os.environ.get("CURL_CA_BUNDLE") - or verify - ) - - # Merge all the kwargs. - proxies = merge_setting(proxies, self.proxies) - stream = merge_setting(stream, self.stream) - verify = merge_setting(verify, self.verify) - cert = merge_setting(cert, self.cert) - - return {"proxies": proxies, "stream": stream, "verify": verify, "cert": cert} - - def get_adapter(self, url): - """ - Returns the appropriate connection adapter for the given URL. - - :rtype: requests.adapters.BaseAdapter - """ - for prefix, adapter in self.adapters.items(): - if url.lower().startswith(prefix.lower()): - return adapter - - # Nothing matches :-/ - raise InvalidSchema(f"No connection adapters were found for {url!r}") - - def close(self): - """Closes all adapters and as such the session""" - for v in self.adapters.values(): - v.close() - - def mount(self, prefix, adapter): - """Registers a connection adapter to a prefix. - - Adapters are sorted in descending order by prefix length. - """ - self.adapters[prefix] = adapter - keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] - - for key in keys_to_move: - self.adapters[key] = self.adapters.pop(key) - - def __getstate__(self): - state = {attr: getattr(self, attr, None) for attr in self.__attrs__} - return state - - def __setstate__(self, state): - for attr, value in state.items(): - setattr(self, attr, value) - - -def session(): - """ - Returns a :class:`Session` for context-management. - - .. deprecated:: 1.0.0 - - This method has been deprecated since version 1.0.0 and is only kept for - backwards compatibility. New code should use :class:`~requests.sessions.Session` - to create a session. This may be removed at a future date. - - :rtype: Session - """ - return Session() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/status_codes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/status_codes.py deleted file mode 100644 index c7945a2f0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/status_codes.py +++ /dev/null @@ -1,128 +0,0 @@ -r""" -The ``codes`` object defines a mapping from common names for HTTP statuses -to their numerical codes, accessible either as attributes or as dictionary -items. - -Example:: - - >>> import requests - >>> requests.codes['temporary_redirect'] - 307 - >>> requests.codes.teapot - 418 - >>> requests.codes['\o/'] - 200 - -Some codes have multiple names, and both upper- and lower-case versions of -the names are allowed. For example, ``codes.ok``, ``codes.OK``, and -``codes.okay`` all correspond to the HTTP status code 200. -""" - -from .structures import LookupDict - -_codes = { - # Informational. - 100: ("continue",), - 101: ("switching_protocols",), - 102: ("processing", "early-hints"), - 103: ("checkpoint",), - 122: ("uri_too_long", "request_uri_too_long"), - 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"), - 201: ("created",), - 202: ("accepted",), - 203: ("non_authoritative_info", "non_authoritative_information"), - 204: ("no_content",), - 205: ("reset_content", "reset"), - 206: ("partial_content", "partial"), - 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"), - 208: ("already_reported",), - 226: ("im_used",), - # Redirection. - 300: ("multiple_choices",), - 301: ("moved_permanently", "moved", "\\o-"), - 302: ("found",), - 303: ("see_other", "other"), - 304: ("not_modified",), - 305: ("use_proxy",), - 306: ("switch_proxy",), - 307: ("temporary_redirect", "temporary_moved", "temporary"), - 308: ( - "permanent_redirect", - "resume_incomplete", - "resume", - ), # "resume" and "resume_incomplete" to be removed in 3.0 - # Client Error. - 400: ("bad_request", "bad"), - 401: ("unauthorized",), - 402: ("payment_required", "payment"), - 403: ("forbidden",), - 404: ("not_found", "-o-"), - 405: ("method_not_allowed", "not_allowed"), - 406: ("not_acceptable",), - 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"), - 408: ("request_timeout", "timeout"), - 409: ("conflict",), - 410: ("gone",), - 411: ("length_required",), - 412: ("precondition_failed", "precondition"), - 413: ("request_entity_too_large", "content_too_large"), - 414: ("request_uri_too_large", "uri_too_long"), - 415: ("unsupported_media_type", "unsupported_media", "media_type"), - 416: ( - "requested_range_not_satisfiable", - "requested_range", - "range_not_satisfiable", - ), - 417: ("expectation_failed",), - 418: ("im_a_teapot", "teapot", "i_am_a_teapot"), - 421: ("misdirected_request",), - 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"), - 423: ("locked",), - 424: ("failed_dependency", "dependency"), - 425: ("unordered_collection", "unordered", "too_early"), - 426: ("upgrade_required", "upgrade"), - 428: ("precondition_required", "precondition"), - 429: ("too_many_requests", "too_many"), - 431: ("header_fields_too_large", "fields_too_large"), - 444: ("no_response", "none"), - 449: ("retry_with", "retry"), - 450: ("blocked_by_windows_parental_controls", "parental_controls"), - 451: ("unavailable_for_legal_reasons", "legal_reasons"), - 499: ("client_closed_request",), - # Server Error. - 500: ("internal_server_error", "server_error", "/o\\", "✗"), - 501: ("not_implemented",), - 502: ("bad_gateway",), - 503: ("service_unavailable", "unavailable"), - 504: ("gateway_timeout",), - 505: ("http_version_not_supported", "http_version"), - 506: ("variant_also_negotiates",), - 507: ("insufficient_storage",), - 509: ("bandwidth_limit_exceeded", "bandwidth"), - 510: ("not_extended",), - 511: ("network_authentication_required", "network_auth", "network_authentication"), -} - -codes = LookupDict(name="status_codes") - - -def _init(): - for code, titles in _codes.items(): - for title in titles: - setattr(codes, title, code) - if not title.startswith(("\\", "/")): - setattr(codes, title.upper(), code) - - def doc(code): - names = ", ".join(f"``{n}``" for n in _codes[code]) - return "* %d: %s" % (code, names) - - global __doc__ - __doc__ = ( - __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes)) - if __doc__ is not None - else None - ) - - -_init() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/structures.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/structures.py deleted file mode 100644 index 188e13e48..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/structures.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -requests.structures -~~~~~~~~~~~~~~~~~~~ - -Data structures that power Requests. -""" - -from collections import OrderedDict - -from .compat import Mapping, MutableMapping - - -class CaseInsensitiveDict(MutableMapping): - """A case-insensitive ``dict``-like object. - - Implements all methods and operations of - ``MutableMapping`` as well as dict's ``copy``. Also - provides ``lower_items``. - - All keys are expected to be strings. The structure remembers the - case of the last key to be set, and ``iter(instance)``, - ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` - will contain case-sensitive keys. However, querying and contains - testing is case insensitive:: - - cid = CaseInsensitiveDict() - cid['Accept'] = 'application/json' - cid['aCCEPT'] == 'application/json' # True - list(cid) == ['Accept'] # True - - For example, ``headers['content-encoding']`` will return the - value of a ``'Content-Encoding'`` response header, regardless - of how the header name was originally stored. - - If the constructor, ``.update``, or equality comparison - operations are given keys that have equal ``.lower()``s, the - behavior is undefined. - """ - - def __init__(self, data=None, **kwargs): - self._store = OrderedDict() - if data is None: - data = {} - self.update(data, **kwargs) - - def __setitem__(self, key, value): - # Use the lowercased key for lookups, but store the actual - # key alongside the value. - self._store[key.lower()] = (key, value) - - def __getitem__(self, key): - return self._store[key.lower()][1] - - def __delitem__(self, key): - del self._store[key.lower()] - - def __iter__(self): - return (casedkey for casedkey, mappedvalue in self._store.values()) - - def __len__(self): - return len(self._store) - - def lower_items(self): - """Like iteritems(), but with all lowercase keys.""" - return ((lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items()) - - def __eq__(self, other): - if isinstance(other, Mapping): - other = CaseInsensitiveDict(other) - else: - return NotImplemented - # Compare insensitively - return dict(self.lower_items()) == dict(other.lower_items()) - - # Copy is required - def copy(self): - return CaseInsensitiveDict(self._store.values()) - - def __repr__(self): - return str(dict(self.items())) - - -class LookupDict(dict): - """Dictionary lookup object.""" - - def __init__(self, name=None): - self.name = name - super().__init__() - - def __repr__(self): - return f"<lookup '{self.name}'>" - - def __getitem__(self, key): - # We allow fall-through here, so values default to None - - return self.__dict__.get(key, None) - - def get(self, key, default=None): - return self.__dict__.get(key, default) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/utils.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/utils.py deleted file mode 100644 index e8ea5ad36..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/requests/utils.py +++ /dev/null @@ -1,1086 +0,0 @@ -""" -requests.utils -~~~~~~~~~~~~~~ - -This module provides utility functions that are used within Requests -that are also useful for external consumption. -""" - -import codecs -import contextlib -import io -import os -import re -import socket -import struct -import sys -import tempfile -import warnings -import zipfile -from collections import OrderedDict - -from pip._vendor.urllib3.util import make_headers, parse_url - -from . import certs -from .__version__ import __version__ - -# to_native_string is unused here, but imported here for backwards compatibility -from ._internal_utils import ( # noqa: F401 - _HEADER_VALIDATORS_BYTE, - _HEADER_VALIDATORS_STR, - HEADER_VALIDATORS, - to_native_string, -) -from .compat import ( - Mapping, - basestring, - bytes, - getproxies, - getproxies_environment, - integer_types, - is_urllib3_1, -) -from .compat import parse_http_list as _parse_list_header -from .compat import ( - proxy_bypass, - proxy_bypass_environment, - quote, - str, - unquote, - urlparse, - urlunparse, -) -from .cookies import cookiejar_from_dict -from .exceptions import ( - FileModeWarning, - InvalidHeader, - InvalidURL, - UnrewindableBodyError, -) -from .structures import CaseInsensitiveDict - -NETRC_FILES = (".netrc", "_netrc") - -DEFAULT_CA_BUNDLE_PATH = certs.where() - -DEFAULT_PORTS = {"http": 80, "https": 443} - -# Ensure that ', ' is used to preserve previous delimiter behavior. -DEFAULT_ACCEPT_ENCODING = ", ".join( - re.split(r",\s*", make_headers(accept_encoding=True)["accept-encoding"]) -) - - -if sys.platform == "win32": - # provide a proxy_bypass version on Windows without DNS lookups - - def proxy_bypass_registry(host): - try: - import winreg - except ImportError: - return False - - try: - internetSettings = winreg.OpenKey( - winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", - ) - # ProxyEnable could be REG_SZ or REG_DWORD, normalizing it - proxyEnable = int(winreg.QueryValueEx(internetSettings, "ProxyEnable")[0]) - # ProxyOverride is almost always a string - proxyOverride = winreg.QueryValueEx(internetSettings, "ProxyOverride")[0] - except (OSError, ValueError): - return False - if not proxyEnable or not proxyOverride: - return False - - # make a check value list from the registry entry: replace the - # '<local>' string by the localhost entry and the corresponding - # canonical entry. - proxyOverride = proxyOverride.split(";") - # filter out empty strings to avoid re.match return true in the following code. - proxyOverride = filter(None, proxyOverride) - # now check if we match one of the registry values. - for test in proxyOverride: - if test == "<local>": - if "." not in host: - return True - test = test.replace(".", r"\.") # mask dots - test = test.replace("*", r".*") # change glob sequence - test = test.replace("?", r".") # change glob char - if re.match(test, host, re.I): - return True - return False - - def proxy_bypass(host): # noqa - """Return True, if the host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) - else: - return proxy_bypass_registry(host) - - -def dict_to_sequence(d): - """Returns an internal sequence dictionary update.""" - - if hasattr(d, "items"): - d = d.items() - - return d - - -def super_len(o): - total_length = None - current_position = 0 - - if not is_urllib3_1 and isinstance(o, str): - # urllib3 2.x+ treats all strings as utf-8 instead - # of latin-1 (iso-8859-1) like http.client. - o = o.encode("utf-8") - - if hasattr(o, "__len__"): - total_length = len(o) - - elif hasattr(o, "len"): - total_length = o.len - - elif hasattr(o, "fileno"): - try: - fileno = o.fileno() - except (io.UnsupportedOperation, AttributeError): - # AttributeError is a surprising exception, seeing as how we've just checked - # that `hasattr(o, 'fileno')`. It happens for objects obtained via - # `Tarfile.extractfile()`, per issue 5229. - pass - else: - total_length = os.fstat(fileno).st_size - - # Having used fstat to determine the file length, we need to - # confirm that this file was opened up in binary mode. - if "b" not in o.mode: - warnings.warn( - ( - "Requests has determined the content-length for this " - "request using the binary size of the file: however, the " - "file has been opened in text mode (i.e. without the 'b' " - "flag in the mode). This may lead to an incorrect " - "content-length. In Requests 3.0, support will be removed " - "for files in text mode." - ), - FileModeWarning, - ) - - if hasattr(o, "tell"): - try: - current_position = o.tell() - except OSError: - # This can happen in some weird situations, such as when the file - # is actually a special file descriptor like stdin. In this - # instance, we don't know what the length is, so set it to zero and - # let requests chunk it instead. - if total_length is not None: - current_position = total_length - else: - if hasattr(o, "seek") and total_length is None: - # StringIO and BytesIO have seek but no usable fileno - try: - # seek to end of file - o.seek(0, 2) - total_length = o.tell() - - # seek back to current position to support - # partially read file-like objects - o.seek(current_position or 0) - except OSError: - total_length = 0 - - if total_length is None: - total_length = 0 - - return max(0, total_length - current_position) - - -def get_netrc_auth(url, raise_errors=False): - """Returns the Requests tuple auth for a given url from netrc.""" - - netrc_file = os.environ.get("NETRC") - if netrc_file is not None: - netrc_locations = (netrc_file,) - else: - netrc_locations = (f"~/{f}" for f in NETRC_FILES) - - try: - from netrc import NetrcParseError, netrc - - netrc_path = None - - for f in netrc_locations: - loc = os.path.expanduser(f) - if os.path.exists(loc): - netrc_path = loc - break - - # Abort early if there isn't one. - if netrc_path is None: - return - - ri = urlparse(url) - host = ri.hostname - - try: - _netrc = netrc(netrc_path).authenticators(host) - if _netrc: - # Return with login / password - login_i = 0 if _netrc[0] else 1 - return (_netrc[login_i], _netrc[2]) - except (NetrcParseError, OSError): - # If there was a parsing error or a permissions issue reading the file, - # we'll just skip netrc auth unless explicitly asked to raise errors. - if raise_errors: - raise - - # App Engine hackiness. - except (ImportError, AttributeError): - pass - - -def guess_filename(obj): - """Tries to guess the filename of the given object.""" - name = getattr(obj, "name", None) - if name and isinstance(name, basestring) and name[0] != "<" and name[-1] != ">": - return os.path.basename(name) - - -def extract_zipped_paths(path): - """Replace nonexistent paths that look like they refer to a member of a zip - archive with the location of an extracted copy of the target, or else - just return the provided path unchanged. - """ - if os.path.exists(path): - # this is already a valid path, no need to do anything further - return path - - # find the first valid part of the provided path and treat that as a zip archive - # assume the rest of the path is the name of a member in the archive - archive, member = os.path.split(path) - while archive and not os.path.exists(archive): - archive, prefix = os.path.split(archive) - if not prefix: - # If we don't check for an empty prefix after the split (in other words, archive remains unchanged after the split), - # we _can_ end up in an infinite loop on a rare corner case affecting a small number of users - break - member = "/".join([prefix, member]) - - if not zipfile.is_zipfile(archive): - return path - - zip_file = zipfile.ZipFile(archive) - if member not in zip_file.namelist(): - return path - - # we have a valid zip archive and a valid member of that archive - tmp = tempfile.gettempdir() - extracted_path = os.path.join(tmp, member.split("/")[-1]) - if not os.path.exists(extracted_path): - # use read + write to avoid the creating nested folders, we only want the file, avoids mkdir racing condition - with atomic_open(extracted_path) as file_handler: - file_handler.write(zip_file.read(member)) - return extracted_path - - -@contextlib.contextmanager -def atomic_open(filename): - """Write a file to the disk in an atomic fashion""" - tmp_descriptor, tmp_name = tempfile.mkstemp(dir=os.path.dirname(filename)) - try: - with os.fdopen(tmp_descriptor, "wb") as tmp_handler: - yield tmp_handler - os.replace(tmp_name, filename) - except BaseException: - os.remove(tmp_name) - raise - - -def from_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. Unless it can not be represented as such, return an - OrderedDict, e.g., - - :: - - >>> from_key_val_list([('key', 'val')]) - OrderedDict([('key', 'val')]) - >>> from_key_val_list('string') - Traceback (most recent call last): - ... - ValueError: cannot encode objects that are not 2-tuples - >>> from_key_val_list({'key': 'val'}) - OrderedDict([('key', 'val')]) - - :rtype: OrderedDict - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError("cannot encode objects that are not 2-tuples") - - return OrderedDict(value) - - -def to_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. If it can be, return a list of tuples, e.g., - - :: - - >>> to_key_val_list([('key', 'val')]) - [('key', 'val')] - >>> to_key_val_list({'key': 'val'}) - [('key', 'val')] - >>> to_key_val_list('string') - Traceback (most recent call last): - ... - ValueError: cannot encode objects that are not 2-tuples - - :rtype: list - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError("cannot encode objects that are not 2-tuples") - - if isinstance(value, Mapping): - value = value.items() - - return list(value) - - -# From mitsuhiko/werkzeug (used with permission). -def parse_list_header(value): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Quotes are removed automatically after parsing. - - It basically works like :func:`parse_set_header` just that items - may appear multiple times and case sensitivity is preserved. - - The return value is a standard :class:`list`: - - >>> parse_list_header('token, "quoted value"') - ['token', 'quoted value'] - - To create a header from the :class:`list` again, use the - :func:`dump_header` function. - - :param value: a string with a list header. - :return: :class:`list` - :rtype: list - """ - result = [] - for item in _parse_list_header(value): - if item[:1] == item[-1:] == '"': - item = unquote_header_value(item[1:-1]) - result.append(item) - return result - - -# From mitsuhiko/werkzeug (used with permission). -def parse_dict_header(value): - """Parse lists of key, value pairs as described by RFC 2068 Section 2 and - convert them into a python dict: - - >>> d = parse_dict_header('foo="is a fish", bar="as well"') - >>> type(d) is dict - True - >>> sorted(d.items()) - [('bar', 'as well'), ('foo', 'is a fish')] - - If there is no value for a key it will be `None`: - - >>> parse_dict_header('key_without_value') - {'key_without_value': None} - - To create a header from the :class:`dict` again, use the - :func:`dump_header` function. - - :param value: a string with a dict header. - :return: :class:`dict` - :rtype: dict - """ - result = {} - for item in _parse_list_header(value): - if "=" not in item: - result[item] = None - continue - name, value = item.split("=", 1) - if value[:1] == value[-1:] == '"': - value = unquote_header_value(value[1:-1]) - result[name] = value - return result - - -# From mitsuhiko/werkzeug (used with permission). -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - - :param value: the header value to unquote. - :rtype: str - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != "\\\\": - return value.replace("\\\\", "\\").replace('\\"', '"') - return value - - -def dict_from_cookiejar(cj): - """Returns a key/value dictionary from a CookieJar. - - :param cj: CookieJar object to extract cookies from. - :rtype: dict - """ - - cookie_dict = {cookie.name: cookie.value for cookie in cj} - return cookie_dict - - -def add_dict_to_cookiejar(cj, cookie_dict): - """Returns a CookieJar from a key/value dictionary. - - :param cj: CookieJar to insert cookies into. - :param cookie_dict: Dict of key/values to insert into CookieJar. - :rtype: CookieJar - """ - - return cookiejar_from_dict(cookie_dict, cj) - - -def get_encodings_from_content(content): - """Returns encodings from given content string. - - :param content: bytestring to extract encodings from. - """ - warnings.warn( - ( - "In requests 3.0, get_encodings_from_content will be removed. For " - "more information, please see the discussion on issue #2266. (This" - " warning should only appear once.)" - ), - DeprecationWarning, - ) - - charset_re = re.compile(r'<meta.*?charset=["\']*(.+?)["\'>]', flags=re.I) - pragma_re = re.compile(r'<meta.*?content=["\']*;?charset=(.+?)["\'>]', flags=re.I) - xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') - - return ( - charset_re.findall(content) - + pragma_re.findall(content) - + xml_re.findall(content) - ) - - -def _parse_content_type_header(header): - """Returns content type and parameters from given header - - :param header: string - :return: tuple containing content type and dictionary of - parameters - """ - - tokens = header.split(";") - content_type, params = tokens[0].strip(), tokens[1:] - params_dict = {} - items_to_strip = "\"' " - - for param in params: - param = param.strip() - if param: - key, value = param, True - index_of_equals = param.find("=") - if index_of_equals != -1: - key = param[:index_of_equals].strip(items_to_strip) - value = param[index_of_equals + 1 :].strip(items_to_strip) - params_dict[key.lower()] = value - return content_type, params_dict - - -def get_encoding_from_headers(headers): - """Returns encodings from given HTTP Header Dict. - - :param headers: dictionary to extract encoding from. - :rtype: str - """ - - content_type = headers.get("content-type") - - if not content_type: - return None - - content_type, params = _parse_content_type_header(content_type) - - if "charset" in params: - return params["charset"].strip("'\"") - - if "text" in content_type: - return "ISO-8859-1" - - if "application/json" in content_type: - # Assume UTF-8 based on RFC 4627: https://www.ietf.org/rfc/rfc4627.txt since the charset was unset - return "utf-8" - - -def stream_decode_response_unicode(iterator, r): - """Stream decodes an iterator.""" - - if r.encoding is None: - yield from iterator - return - - decoder = codecs.getincrementaldecoder(r.encoding)(errors="replace") - for chunk in iterator: - rv = decoder.decode(chunk) - if rv: - yield rv - rv = decoder.decode(b"", final=True) - if rv: - yield rv - - -def iter_slices(string, slice_length): - """Iterate over slices of a string.""" - pos = 0 - if slice_length is None or slice_length <= 0: - slice_length = len(string) - while pos < len(string): - yield string[pos : pos + slice_length] - pos += slice_length - - -def get_unicode_from_response(r): - """Returns the requested content back in unicode. - - :param r: Response object to get unicode content from. - - Tried: - - 1. charset from content-type - 2. fall back and replace all unicode characters - - :rtype: str - """ - warnings.warn( - ( - "In requests 3.0, get_unicode_from_response will be removed. For " - "more information, please see the discussion on issue #2266. (This" - " warning should only appear once.)" - ), - DeprecationWarning, - ) - - tried_encodings = [] - - # Try charset from content-type - encoding = get_encoding_from_headers(r.headers) - - if encoding: - try: - return str(r.content, encoding) - except UnicodeError: - tried_encodings.append(encoding) - - # Fall back: - try: - return str(r.content, encoding, errors="replace") - except TypeError: - return r.content - - -# The unreserved URI characters (RFC 3986) -UNRESERVED_SET = frozenset( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~" -) - - -def unquote_unreserved(uri): - """Un-escape any percent-escape sequences in a URI that are unreserved - characters. This leaves all reserved, illegal and non-ASCII bytes encoded. - - :rtype: str - """ - parts = uri.split("%") - for i in range(1, len(parts)): - h = parts[i][0:2] - if len(h) == 2 and h.isalnum(): - try: - c = chr(int(h, 16)) - except ValueError: - raise InvalidURL(f"Invalid percent-escape sequence: '{h}'") - - if c in UNRESERVED_SET: - parts[i] = c + parts[i][2:] - else: - parts[i] = f"%{parts[i]}" - else: - parts[i] = f"%{parts[i]}" - return "".join(parts) - - -def requote_uri(uri): - """Re-quote the given URI. - - This function passes the given URI through an unquote/quote cycle to - ensure that it is fully and consistently quoted. - - :rtype: str - """ - safe_with_percent = "!#$%&'()*+,/:;=?@[]~" - safe_without_percent = "!#$&'()*+,/:;=?@[]~" - try: - # Unquote only the unreserved characters - # Then quote only illegal characters (do not quote reserved, - # unreserved, or '%') - return quote(unquote_unreserved(uri), safe=safe_with_percent) - except InvalidURL: - # We couldn't unquote the given URI, so let's try quoting it, but - # there may be unquoted '%'s in the URI. We need to make sure they're - # properly quoted so they do not cause issues elsewhere. - return quote(uri, safe=safe_without_percent) - - -def address_in_network(ip, net): - """This function allows you to check if an IP belongs to a network subnet - - Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 - returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 - - :rtype: bool - """ - ipaddr = struct.unpack("=L", socket.inet_aton(ip))[0] - netaddr, bits = net.split("/") - netmask = struct.unpack("=L", socket.inet_aton(dotted_netmask(int(bits))))[0] - network = struct.unpack("=L", socket.inet_aton(netaddr))[0] & netmask - return (ipaddr & netmask) == (network & netmask) - - -def dotted_netmask(mask): - """Converts mask from /xx format to xxx.xxx.xxx.xxx - - Example: if mask is 24 function returns 255.255.255.0 - - :rtype: str - """ - bits = 0xFFFFFFFF ^ (1 << 32 - mask) - 1 - return socket.inet_ntoa(struct.pack(">I", bits)) - - -def is_ipv4_address(string_ip): - """ - :rtype: bool - """ - try: - socket.inet_aton(string_ip) - except OSError: - return False - return True - - -def is_valid_cidr(string_network): - """ - Very simple check of the cidr format in no_proxy variable. - - :rtype: bool - """ - if string_network.count("/") == 1: - try: - mask = int(string_network.split("/")[1]) - except ValueError: - return False - - if mask < 1 or mask > 32: - return False - - try: - socket.inet_aton(string_network.split("/")[0]) - except OSError: - return False - else: - return False - return True - - -@contextlib.contextmanager -def set_environ(env_name, value): - """Set the environment variable 'env_name' to 'value' - - Save previous value, yield, and then restore the previous value stored in - the environment variable 'env_name'. - - If 'value' is None, do nothing""" - value_changed = value is not None - if value_changed: - old_value = os.environ.get(env_name) - os.environ[env_name] = value - try: - yield - finally: - if value_changed: - if old_value is None: - del os.environ[env_name] - else: - os.environ[env_name] = old_value - - -def should_bypass_proxies(url, no_proxy): - """ - Returns whether we should bypass proxies or not. - - :rtype: bool - """ - - # Prioritize lowercase environment variables over uppercase - # to keep a consistent behaviour with other http projects (curl, wget). - def get_proxy(key): - return os.environ.get(key) or os.environ.get(key.upper()) - - # First check whether no_proxy is defined. If it is, check that the URL - # we're getting isn't in the no_proxy list. - no_proxy_arg = no_proxy - if no_proxy is None: - no_proxy = get_proxy("no_proxy") - parsed = urlparse(url) - - if parsed.hostname is None: - # URLs don't always have hostnames, e.g. file:/// urls. - return True - - if no_proxy: - # We need to check whether we match here. We need to see if we match - # the end of the hostname, both with and without the port. - no_proxy = (host for host in no_proxy.replace(" ", "").split(",") if host) - - if is_ipv4_address(parsed.hostname): - for proxy_ip in no_proxy: - if is_valid_cidr(proxy_ip): - if address_in_network(parsed.hostname, proxy_ip): - return True - elif parsed.hostname == proxy_ip: - # If no_proxy ip was defined in plain IP notation instead of cidr notation & - # matches the IP of the index - return True - else: - host_with_port = parsed.hostname - if parsed.port: - host_with_port += f":{parsed.port}" - - for host in no_proxy: - if parsed.hostname.endswith(host) or host_with_port.endswith(host): - # The URL does match something in no_proxy, so we don't want - # to apply the proxies on this URL. - return True - - with set_environ("no_proxy", no_proxy_arg): - # parsed.hostname can be `None` in cases such as a file URI. - try: - bypass = proxy_bypass(parsed.hostname) - except (TypeError, socket.gaierror): - bypass = False - - if bypass: - return True - - return False - - -def get_environ_proxies(url, no_proxy=None): - """ - Return a dict of environment proxies. - - :rtype: dict - """ - if should_bypass_proxies(url, no_proxy=no_proxy): - return {} - else: - return getproxies() - - -def select_proxy(url, proxies): - """Select a proxy for the url, if applicable. - - :param url: The url being for the request - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - """ - proxies = proxies or {} - urlparts = urlparse(url) - if urlparts.hostname is None: - return proxies.get(urlparts.scheme, proxies.get("all")) - - proxy_keys = [ - urlparts.scheme + "://" + urlparts.hostname, - urlparts.scheme, - "all://" + urlparts.hostname, - "all", - ] - proxy = None - for proxy_key in proxy_keys: - if proxy_key in proxies: - proxy = proxies[proxy_key] - break - - return proxy - - -def resolve_proxies(request, proxies, trust_env=True): - """This method takes proxy information from a request and configuration - input to resolve a mapping of target proxies. This will consider settings - such as NO_PROXY to strip proxy configurations. - - :param request: Request or PreparedRequest - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - :param trust_env: Boolean declaring whether to trust environment configs - - :rtype: dict - """ - proxies = proxies if proxies is not None else {} - url = request.url - scheme = urlparse(url).scheme - no_proxy = proxies.get("no_proxy") - new_proxies = proxies.copy() - - if trust_env and not should_bypass_proxies(url, no_proxy=no_proxy): - environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) - - proxy = environ_proxies.get(scheme, environ_proxies.get("all")) - - if proxy: - new_proxies.setdefault(scheme, proxy) - return new_proxies - - -def default_user_agent(name="python-requests"): - """ - Return a string representing the default user agent. - - :rtype: str - """ - return f"{name}/{__version__}" - - -def default_headers(): - """ - :rtype: requests.structures.CaseInsensitiveDict - """ - return CaseInsensitiveDict( - { - "User-Agent": default_user_agent(), - "Accept-Encoding": DEFAULT_ACCEPT_ENCODING, - "Accept": "*/*", - "Connection": "keep-alive", - } - ) - - -def parse_header_links(value): - """Return a list of parsed link headers proxies. - - i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg" - - :rtype: list - """ - - links = [] - - replace_chars = " '\"" - - value = value.strip(replace_chars) - if not value: - return links - - for val in re.split(", *<", value): - try: - url, params = val.split(";", 1) - except ValueError: - url, params = val, "" - - link = {"url": url.strip("<> '\"")} - - for param in params.split(";"): - try: - key, value = param.split("=") - except ValueError: - break - - link[key.strip(replace_chars)] = value.strip(replace_chars) - - links.append(link) - - return links - - -# Null bytes; no need to recreate these on each call to guess_json_utf -_null = "\x00".encode("ascii") # encoding to ASCII for Python 3 -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - """ - :rtype: str - """ - # JSON always starts with two ASCII characters, so detection is as - # easy as counting the nulls and from their location and count - # determine the encoding. Also detect a BOM, if present. - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): - return "utf-32" # BOM included - if sample[:3] == codecs.BOM_UTF8: - return "utf-8-sig" # BOM included, MS style (discouraged) - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return "utf-16" # BOM included - nullcount = sample.count(_null) - if nullcount == 0: - return "utf-8" - if nullcount == 2: - if sample[::2] == _null2: # 1st and 3rd are null - return "utf-16-be" - if sample[1::2] == _null2: # 2nd and 4th are null - return "utf-16-le" - # Did not detect 2 valid UTF-16 ascii-range characters - if nullcount == 3: - if sample[:3] == _null3: - return "utf-32-be" - if sample[1:] == _null3: - return "utf-32-le" - # Did not detect a valid UTF-32 ascii-range character - return None - - -def prepend_scheme_if_needed(url, new_scheme): - """Given a URL that may or may not have a scheme, prepend the given scheme. - Does not replace a present scheme with the one provided as an argument. - - :rtype: str - """ - parsed = parse_url(url) - scheme, auth, host, port, path, query, fragment = parsed - - # A defect in urlparse determines that there isn't a netloc present in some - # urls. We previously assumed parsing was overly cautious, and swapped the - # netloc and path. Due to a lack of tests on the original defect, this is - # maintained with parse_url for backwards compatibility. - netloc = parsed.netloc - if not netloc: - netloc, path = path, netloc - - if auth: - # parse_url doesn't provide the netloc with auth - # so we'll add it ourselves. - netloc = "@".join([auth, netloc]) - if scheme is None: - scheme = new_scheme - if path is None: - path = "" - - return urlunparse((scheme, netloc, path, "", query, fragment)) - - -def get_auth_from_url(url): - """Given a url with authentication components, extract them into a tuple of - username,password. - - :rtype: (str,str) - """ - parsed = urlparse(url) - - try: - auth = (unquote(parsed.username), unquote(parsed.password)) - except (AttributeError, TypeError): - auth = ("", "") - - return auth - - -def check_header_validity(header): - """Verifies that header parts don't contain leading whitespace - reserved characters, or return characters. - - :param header: tuple, in the format (name, value). - """ - name, value = header - _validate_header_part(header, name, 0) - _validate_header_part(header, value, 1) - - -def _validate_header_part(header, header_part, header_validator_index): - if isinstance(header_part, str): - validator = _HEADER_VALIDATORS_STR[header_validator_index] - elif isinstance(header_part, bytes): - validator = _HEADER_VALIDATORS_BYTE[header_validator_index] - else: - raise InvalidHeader( - f"Header part ({header_part!r}) from {header} " - f"must be of type str or bytes, not {type(header_part)}" - ) - - if not validator.match(header_part): - header_kind = "name" if header_validator_index == 0 else "value" - raise InvalidHeader( - f"Invalid leading whitespace, reserved character(s), or return " - f"character(s) in header {header_kind}: {header_part!r}" - ) - - -def urldefragauth(url): - """ - Given a url remove the fragment and the authentication part. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url) - - # see func:`prepend_scheme_if_needed` - if not netloc: - netloc, path = path, netloc - - netloc = netloc.rsplit("@", 1)[-1] - - return urlunparse((scheme, netloc, path, params, query, "")) - - -def rewind_body(prepared_request): - """Move file pointer back to its recorded starting position - so it can be read again on redirect. - """ - body_seek = getattr(prepared_request.body, "seek", None) - if body_seek is not None and isinstance( - prepared_request._body_position, integer_types - ): - try: - body_seek(prepared_request._body_position) - except OSError: - raise UnrewindableBodyError( - "An error occurred when rewinding request body for redirect." - ) - else: - raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/LICENSE deleted file mode 100644 index b9077766e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2018, Tzu-ping Chung <uranusjr@gmail.com> - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__init__.py deleted file mode 100644 index 4c7f815a8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -__all__ = [ - "AbstractProvider", - "AbstractResolver", - "BaseReporter", - "InconsistentCandidate", - "RequirementsConflicted", - "ResolutionError", - "ResolutionImpossible", - "ResolutionTooDeep", - "Resolver", - "__version__", -] - -__version__ = "1.2.1" - - -from .providers import AbstractProvider -from .reporters import BaseReporter -from .resolvers import ( - AbstractResolver, - InconsistentCandidate, - RequirementsConflicted, - ResolutionError, - ResolutionImpossible, - ResolutionTooDeep, - Resolver, -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 195f60f3e15e23b7c1668200dd1e05c649030ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmaKo&u-H|5XN_%Kepqfr2=|DLOt|CKuHKxh$4gp0m+e2sjPCdSUL6<mfBvkJ1LY? z9)K6&$g6N%i4zx&6%p!{SvOTVF_M4Y8GGmZX6~%@It1hUw_oC>L&#5?Tm<HIEcfuW zAVU(hUr`_t1^R|Y&eRDT(AXk)ZcLkD3tIKLIc<k7xS<DL=z|}2pc4iVgk9){J?L$b zsI^V{uDSAbra>hs>??UJGOj+i#>0EVai1zH+^44dEYUpTl~lmhzc(VTWq!<+xjrpZ zS!$tymoQ1nOk@dgvl;OZbD?;FRXvgAVJ=eOnOUzd&OylXg;G+PYnO#-QAw@EEazt9 zvU(upbIvQ{T}bZrJGDL4M31Ur(Xwb;xE7v;Z(%oU0>;p(MoGr{YsO_P$#ce3U_biR zYIa>WHNIL+tLxS_Kc7^e>-|^iD_LSsV!lis#jiDL#tCk9yt{ih{wUQ^j9Tw`3OY`6 zInQRe+kq$rAT*#St_I_H{{-I2^8R>-?XXV|AFu;nR5`AcK~cpo#VpnW_@GMCqvS2u zaV4q|j#p+<jaF83F&i;v8#6YnPK@`skl8%vPt;X3NAc0O5vL7G>2D_poP~ROgRE~Z Yf<J9SZ~Y+KXO2gmGlE!Js15x6FFMM>;{X5v diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-314.pyc deleted file mode 100644 index 3554ac003ca710d8c99a4b2826283fbdc76391fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10371 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 VK6>>d_2a!y&n^6?LqG8{{~Nd0Vx<58 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-314.pyc deleted file mode 100644 index b9598e5a0c33ff1b930e8e1c617d06c0d6858fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4490 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-314.pyc deleted file mode 100644 index b94436c2706016823f820ddd008769bc6e9069a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16787 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/providers.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/providers.py deleted file mode 100644 index 524e3d832..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/providers.py +++ /dev/null @@ -1,196 +0,0 @@ -from __future__ import annotations - -from typing import ( - TYPE_CHECKING, - Generic, - Iterable, - Iterator, - Mapping, - Sequence, -) - -from .structs import CT, KT, RT, Matches, RequirementInformation - -if TYPE_CHECKING: - from typing import Any, Protocol - - class Preference(Protocol): - def __lt__(self, __other: Any) -> bool: ... - - -class AbstractProvider(Generic[RT, CT, KT]): - """Delegate class to provide the required interface for the resolver.""" - - def identify(self, requirement_or_candidate: RT | CT) -> KT: - """Given a requirement or candidate, return an identifier for it. - - This is used to identify, e.g. whether two requirements - should have their specifier parts merged or a candidate matches a - requirement via ``find_matches()``. - """ - raise NotImplementedError - - def get_preference( - self, - identifier: KT, - resolutions: Mapping[KT, CT], - candidates: Mapping[KT, Iterator[CT]], - information: Mapping[KT, Iterator[RequirementInformation[RT, CT]]], - backtrack_causes: Sequence[RequirementInformation[RT, CT]], - ) -> Preference: - """Produce a sort key for given requirement based on preference. - - As this is a sort key it will be called O(n) times per backtrack - step, where n is the number of `identifier`s, if you have a check - which is expensive in some sense. E.g. It needs to make O(n) checks - per call or takes significant wall clock time, consider using - `narrow_requirement_selection` to filter the `identifier`s, which - is applied before this sort key is called. - - The preference is defined as "I think this requirement should be - resolved first". The lower the return value is, the more preferred - this group of arguments is. - - :param identifier: An identifier as returned by ``identify()``. This - identifies the requirement being considered. - :param resolutions: Mapping of candidates currently pinned by the - resolver. Each key is an identifier, and the value is a candidate. - The candidate may conflict with requirements from ``information``. - :param candidates: Mapping of each dependency's possible candidates. - Each value is an iterator of candidates. - :param information: Mapping of requirement information of each package. - Each value is an iterator of *requirement information*. - :param backtrack_causes: Sequence of *requirement information* that are - the requirements that caused the resolver to most recently - backtrack. - - A *requirement information* instance is a named tuple with two members: - - * ``requirement`` specifies a requirement contributing to the current - list of candidates. - * ``parent`` specifies the candidate that provides (depended on) the - requirement, or ``None`` to indicate a root requirement. - - The preference could depend on various issues, including (not - necessarily in this order): - - * Is this package pinned in the current resolution result? - * How relaxed is the requirement? Stricter ones should probably be - worked on first? (I don't know, actually.) - * How many possibilities are there to satisfy this requirement? Those - with few left should likely be worked on first, I guess? - * Are there any known conflicts for this requirement? We should - probably work on those with the most known conflicts. - - A sortable value should be returned (this will be used as the ``key`` - parameter of the built-in sorting function). The smaller the value is, - the more preferred this requirement is (i.e. the sorting function - is called with ``reverse=False``). - """ - raise NotImplementedError - - def find_matches( - self, - identifier: KT, - requirements: Mapping[KT, Iterator[RT]], - incompatibilities: Mapping[KT, Iterator[CT]], - ) -> Matches[CT]: - """Find all possible candidates that satisfy the given constraints. - - :param identifier: An identifier as returned by ``identify()``. All - candidates returned by this method should produce the same - identifier. - :param requirements: A mapping of requirements that all returned - candidates must satisfy. Each key is an identifier, and the value - an iterator of requirements for that dependency. - :param incompatibilities: A mapping of known incompatibile candidates of - each dependency. Each key is an identifier, and the value an - iterator of incompatibilities known to the resolver. All - incompatibilities *must* be excluded from the return value. - - This should try to get candidates based on the requirements' types. - For VCS, local, and archive requirements, the one-and-only match is - returned, and for a "named" requirement, the index(es) should be - consulted to find concrete candidates for this requirement. - - The return value should produce candidates ordered by preference; the - most preferred candidate should come first. The return type may be one - of the following: - - * A callable that returns an iterator that yields candidates. - * An collection of candidates. - * An iterable of candidates. This will be consumed immediately into a - list of candidates. - """ - raise NotImplementedError - - def is_satisfied_by(self, requirement: RT, candidate: CT) -> bool: - """Whether the given requirement can be satisfied by a candidate. - - The candidate is guaranteed to have been generated from the - requirement. - - A boolean should be returned to indicate whether ``candidate`` is a - viable solution to the requirement. - """ - raise NotImplementedError - - def get_dependencies(self, candidate: CT) -> Iterable[RT]: - """Get dependencies of a candidate. - - This should return a collection of requirements that `candidate` - specifies as its dependencies. - """ - raise NotImplementedError - - def narrow_requirement_selection( - self, - identifiers: Iterable[KT], - resolutions: Mapping[KT, CT], - candidates: Mapping[KT, Iterator[CT]], - information: Mapping[KT, Iterator[RequirementInformation[RT, CT]]], - backtrack_causes: Sequence[RequirementInformation[RT, CT]], - ) -> Iterable[KT]: - """ - An optional method to narrow the selection of requirements being - considered during resolution. This method is called O(1) time per - backtrack step. - - :param identifiers: An iterable of `identifiers` as returned by - ``identify()``. These identify all requirements currently being - considered. - :param resolutions: A mapping of candidates currently pinned by the - resolver. Each key is an identifier, and the value is a candidate - that may conflict with requirements from ``information``. - :param candidates: A mapping of each dependency's possible candidates. - Each value is an iterator of candidates. - :param information: A mapping of requirement information for each package. - Each value is an iterator of *requirement information*. - :param backtrack_causes: A sequence of *requirement information* that are - the requirements causing the resolver to most recently - backtrack. - - A *requirement information* instance is a named tuple with two members: - - * ``requirement`` specifies a requirement contributing to the current - list of candidates. - * ``parent`` specifies the candidate that provides (is depended on for) - the requirement, or ``None`` to indicate a root requirement. - - Must return a non-empty subset of `identifiers`, with the default - implementation being to return `identifiers` unchanged. Those `identifiers` - will then be passed to the sort key `get_preference` to pick the most - prefered requirement to attempt to pin, unless `narrow_requirement_selection` - returns only 1 requirement, in which case that will be used without - calling the sort key `get_preference`. - - This method is designed to be used by the provider to optimize the - dependency resolution, e.g. if a check cost is O(m) and it can be done - against all identifiers at once then filtering the requirement selection - here will cost O(m) but making it part of the sort key in `get_preference` - will cost O(m*n), where n is the number of `identifiers`. - - Returns: - Iterable[KT]: A non-empty subset of `identifiers`. - """ - return identifiers diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/reporters.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/reporters.py deleted file mode 100644 index 6c142204b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +++ /dev/null @@ -1,55 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, Collection, Generic - -from .structs import CT, KT, RT, RequirementInformation, State - -if TYPE_CHECKING: - from .resolvers import Criterion - - -class BaseReporter(Generic[RT, CT, KT]): - """Delegate class to provide progress reporting for the resolver.""" - - def starting(self) -> None: - """Called before the resolution actually starts.""" - - def starting_round(self, index: int) -> None: - """Called before each round of resolution starts. - - The index is zero-based. - """ - - def ending_round(self, index: int, state: State[RT, CT, KT]) -> None: - """Called before each round of resolution ends. - - This is NOT called if the resolution ends at this round. Use `ending` - if you want to report finalization. The index is zero-based. - """ - - def ending(self, state: State[RT, CT, KT]) -> None: - """Called before the resolution ends successfully.""" - - def adding_requirement(self, requirement: RT, parent: CT | None) -> None: - """Called when adding a new requirement into the resolve criteria. - - :param requirement: The additional requirement to be applied to filter - the available candidaites. - :param parent: The candidate that requires ``requirement`` as a - dependency, or None if ``requirement`` is one of the root - requirements passed in from ``Resolver.resolve()``. - """ - - def resolving_conflicts( - self, causes: Collection[RequirementInformation[RT, CT]] - ) -> None: - """Called when starting to attempt requirement conflict resolution. - - :param causes: The information on the collision that caused the backtracking. - """ - - def rejecting_candidate(self, criterion: Criterion[RT, CT], candidate: CT) -> None: - """Called when rejecting a candidate during backtracking.""" - - def pinning(self, candidate: CT) -> None: - """Called when adding a candidate to the potential solution.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py deleted file mode 100644 index b24922152..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -from ..structs import RequirementInformation -from .abstract import AbstractResolver, Result -from .criterion import Criterion -from .exceptions import ( - InconsistentCandidate, - RequirementsConflicted, - ResolutionError, - ResolutionImpossible, - ResolutionTooDeep, - ResolverException, -) -from .resolution import Resolution, Resolver - -__all__ = [ - "AbstractResolver", - "Criterion", - "InconsistentCandidate", - "RequirementInformation", - "RequirementsConflicted", - "Resolution", - "ResolutionError", - "ResolutionImpossible", - "ResolutionTooDeep", - "Resolver", - "ResolverException", - "Result", -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 8ed66a98a95df8a9e58f5c759c13143118a72e78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmZ9J&x_MQ6vt=MA4$`nE4p}FK`%wyT3o~x5u`38ASz+Kg&opls^cb^IP+3>Z;O9~ z|AR;W6^{dp2QPXP_pn!I(w3qF`Q*LHoA>?Z&D~ztMS6Yv`jeeo2>me0X6d|Imka$m zN5@uxedJ-ld*~PkmT!4AsCjj$S9#5Ecui<laox8)2OO^jEzbqlYeU=XK*#GsxBA}j zdtM*<-T(%BXp92;6^5Olc^eI#Uq*F^)owsPluXc!=HTZGF0u$1&xe*8Jex}pQ49f< zJY7<unmQ^|(5G56!GH==*i<+CJm$G%5_FGQlqW2Sfd122&Un5^SqwB${i<JSR1SsU zLS5f(_*ucFWb>4&o$c-s=g%oE)?3=i;b}~ZwM}<hr<^L*1uuskQP)2xng+H(&A>6} z8ng_|ortzU&!A(_&=_7*w*L1r23eg`PPCrIs;j9{t#~toN=3PJ<4Ud+E3yA{jD&K9 znP@eEl^LV1Y(k<mCFBdb)G1P*XOF`-k_s6{2^G_WgZtq}E>6Ni@b^?Z3*(fR$vl#D z#Bv525_AJ9M$_>18NB29gXuomC#R1dk|UZGslF5fSrNWq^HA#R8x>J}61}A|ELbri zOPVKKOe$|nnzH#O6mmj{ksxGToGIr?#*;FoPsL4b6YEFb(fD1%7+;`!-_iI2-MX@D VY+WIP0m7p{^={kxWQ$#0_!qo{;Y<Jk diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-314.pyc deleted file mode 100644 index 174e2713df29847cd724e2cef43453a2ac5b1f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2838 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 JX1J1g@*k9E^Zx(< diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-314.pyc deleted file mode 100644 index b4829bc93f20cf2c039c3e8b88658d09d650c7e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3876 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 GYWW{1hr#9m diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-314.pyc deleted file mode 100644 index a1cb2a2347f1df822d492c76d0ea728c91861fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5265 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 Y-oN_McN+v68oiQ`T1h}k30|cB4TBs&@c;k- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-314.pyc deleted file mode 100644 index 600b8663bf0b80ad89cd81e668b2be9ad55b37a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28216 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py deleted file mode 100644 index db32b3b51..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +++ /dev/null @@ -1,47 +0,0 @@ -from __future__ import annotations - -import collections -from typing import TYPE_CHECKING, Any, Generic, Iterable, NamedTuple - -from ..structs import CT, KT, RT, DirectedGraph - -if TYPE_CHECKING: - from ..providers import AbstractProvider - from ..reporters import BaseReporter - from .criterion import Criterion - - class Result(NamedTuple, Generic[RT, CT, KT]): - mapping: dict[KT, CT] - graph: DirectedGraph[KT | None] - criteria: dict[KT, Criterion[RT, CT]] - -else: - Result = collections.namedtuple("Result", ["mapping", "graph", "criteria"]) - - -class AbstractResolver(Generic[RT, CT, KT]): - """The thing that performs the actual resolution work.""" - - base_exception = Exception - - def __init__( - self, - provider: AbstractProvider[RT, CT, KT], - reporter: BaseReporter[RT, CT, KT], - ) -> None: - self.provider = provider - self.reporter = reporter - - def resolve(self, requirements: Iterable[RT], **kwargs: Any) -> Result[RT, CT, KT]: - """Take a collection of constraints, spit out the resolution result. - - This returns a representation of the final resolution state, with one - guarenteed attribute ``mapping`` that contains resolved candidates as - values. The keys are their respective identifiers. - - :param requirements: A collection of constraints. - :param kwargs: Additional keyword arguments that subclasses may accept. - - :raises: ``self.base_exception`` or its subclass. - """ - raise NotImplementedError diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py deleted file mode 100644 index ee5019ccd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +++ /dev/null @@ -1,48 +0,0 @@ -from __future__ import annotations - -from typing import Collection, Generic, Iterable, Iterator - -from ..structs import CT, RT, RequirementInformation - - -class Criterion(Generic[RT, CT]): - """Representation of possible resolution results of a package. - - This holds three attributes: - - * `information` is a collection of `RequirementInformation` pairs. - Each pair is a requirement contributing to this criterion, and the - candidate that provides the requirement. - * `incompatibilities` is a collection of all known not-to-work candidates - to exclude from consideration. - * `candidates` is a collection containing all possible candidates deducted - from the union of contributing requirements and known incompatibilities. - It should never be empty, except when the criterion is an attribute of a - raised `RequirementsConflicted` (in which case it is always empty). - - .. note:: - This class is intended to be externally immutable. **Do not** mutate - any of its attribute containers. - """ - - def __init__( - self, - candidates: Iterable[CT], - information: Collection[RequirementInformation[RT, CT]], - incompatibilities: Collection[CT], - ) -> None: - self.candidates = candidates - self.information = information - self.incompatibilities = incompatibilities - - def __repr__(self) -> str: - requirements = ", ".join( - f"({req!r}, via={parent!r})" for req, parent in self.information - ) - return f"Criterion({requirements})" - - def iter_requirement(self) -> Iterator[RT]: - return (i.requirement for i in self.information) - - def iter_parent(self) -> Iterator[CT | None]: - return (i.parent for i in self.information) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py deleted file mode 100644 index 35e275576..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +++ /dev/null @@ -1,57 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, Collection, Generic - -from ..structs import CT, RT, RequirementInformation - -if TYPE_CHECKING: - from .criterion import Criterion - - -class ResolverException(Exception): - """A base class for all exceptions raised by this module. - - Exceptions derived by this class should all be handled in this module. Any - bubbling pass the resolver should be treated as a bug. - """ - - -class RequirementsConflicted(ResolverException, Generic[RT, CT]): - def __init__(self, criterion: Criterion[RT, CT]) -> None: - super().__init__(criterion) - self.criterion = criterion - - def __str__(self) -> str: - return "Requirements conflict: {}".format( - ", ".join(repr(r) for r in self.criterion.iter_requirement()), - ) - - -class InconsistentCandidate(ResolverException, Generic[RT, CT]): - def __init__(self, candidate: CT, criterion: Criterion[RT, CT]): - super().__init__(candidate, criterion) - self.candidate = candidate - self.criterion = criterion - - def __str__(self) -> str: - return "Provided candidate {!r} does not satisfy {}".format( - self.candidate, - ", ".join(repr(r) for r in self.criterion.iter_requirement()), - ) - - -class ResolutionError(ResolverException): - pass - - -class ResolutionImpossible(ResolutionError, Generic[RT, CT]): - def __init__(self, causes: Collection[RequirementInformation[RT, CT]]): - super().__init__(causes) - # causes is a list of RequirementInformation objects - self.causes = causes - - -class ResolutionTooDeep(ResolutionError): - def __init__(self, round_count: int) -> None: - super().__init__(round_count) - self.round_count = round_count diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py deleted file mode 100644 index 8c13d3b27..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +++ /dev/null @@ -1,627 +0,0 @@ -from __future__ import annotations - -import collections -import itertools -import operator -from typing import TYPE_CHECKING, Generic - -from ..structs import ( - CT, - KT, - RT, - DirectedGraph, - IterableView, - IteratorMapping, - RequirementInformation, - State, - build_iter_view, -) -from .abstract import AbstractResolver, Result -from .criterion import Criterion -from .exceptions import ( - InconsistentCandidate, - RequirementsConflicted, - ResolutionImpossible, - ResolutionTooDeep, - ResolverException, -) - -if TYPE_CHECKING: - from collections.abc import Collection, Iterable, Mapping - - from ..providers import AbstractProvider, Preference - from ..reporters import BaseReporter - -_OPTIMISTIC_BACKJUMPING_RATIO: float = 0.1 - - -def _build_result(state: State[RT, CT, KT]) -> Result[RT, CT, KT]: - mapping = state.mapping - all_keys: dict[int, KT | None] = {id(v): k for k, v in mapping.items()} - all_keys[id(None)] = None - - graph: DirectedGraph[KT | None] = DirectedGraph() - graph.add(None) # Sentinel as root dependencies' parent. - - connected: set[KT | None] = {None} - for key, criterion in state.criteria.items(): - if not _has_route_to_root(state.criteria, key, all_keys, connected): - continue - if key not in graph: - graph.add(key) - for p in criterion.iter_parent(): - try: - pkey = all_keys[id(p)] - except KeyError: - continue - if pkey not in graph: - graph.add(pkey) - graph.connect(pkey, key) - - return Result( - mapping={k: v for k, v in mapping.items() if k in connected}, - graph=graph, - criteria=state.criteria, - ) - - -class Resolution(Generic[RT, CT, KT]): - """Stateful resolution object. - - This is designed as a one-off object that holds information to kick start - the resolution process, and holds the results afterwards. - """ - - def __init__( - self, - provider: AbstractProvider[RT, CT, KT], - reporter: BaseReporter[RT, CT, KT], - ) -> None: - self._p = provider - self._r = reporter - self._states: list[State[RT, CT, KT]] = [] - - # Optimistic backjumping variables - self._optimistic_backjumping_ratio = _OPTIMISTIC_BACKJUMPING_RATIO - self._save_states: list[State[RT, CT, KT]] | None = None - self._optimistic_start_round: int | None = None - - @property - def state(self) -> State[RT, CT, KT]: - try: - return self._states[-1] - except IndexError as e: - raise AttributeError("state") from e - - def _push_new_state(self) -> None: - """Push a new state into history. - - This new state will be used to hold resolution results of the next - coming round. - """ - base = self._states[-1] - state = State( - mapping=base.mapping.copy(), - criteria=base.criteria.copy(), - backtrack_causes=base.backtrack_causes[:], - ) - self._states.append(state) - - def _add_to_criteria( - self, - criteria: dict[KT, Criterion[RT, CT]], - requirement: RT, - parent: CT | None, - ) -> None: - self._r.adding_requirement(requirement=requirement, parent=parent) - - identifier = self._p.identify(requirement_or_candidate=requirement) - criterion = criteria.get(identifier) - if criterion: - incompatibilities = list(criterion.incompatibilities) - else: - incompatibilities = [] - - matches = self._p.find_matches( - identifier=identifier, - requirements=IteratorMapping( - criteria, - operator.methodcaller("iter_requirement"), - {identifier: [requirement]}, - ), - incompatibilities=IteratorMapping( - criteria, - operator.attrgetter("incompatibilities"), - {identifier: incompatibilities}, - ), - ) - - if criterion: - information = list(criterion.information) - information.append(RequirementInformation(requirement, parent)) - else: - information = [RequirementInformation(requirement, parent)] - - criterion = Criterion( - candidates=build_iter_view(matches), - information=information, - incompatibilities=incompatibilities, - ) - if not criterion.candidates: - raise RequirementsConflicted(criterion) - criteria[identifier] = criterion - - def _remove_information_from_criteria( - self, criteria: dict[KT, Criterion[RT, CT]], parents: Collection[KT] - ) -> None: - """Remove information from parents of criteria. - - Concretely, removes all values from each criterion's ``information`` - field that have one of ``parents`` as provider of the requirement. - - :param criteria: The criteria to update. - :param parents: Identifiers for which to remove information from all criteria. - """ - if not parents: - return - for key, criterion in criteria.items(): - criteria[key] = Criterion( - criterion.candidates, - [ - information - for information in criterion.information - if ( - information.parent is None - or self._p.identify(information.parent) not in parents - ) - ], - criterion.incompatibilities, - ) - - def _get_preference(self, name: KT) -> Preference: - return self._p.get_preference( - identifier=name, - resolutions=self.state.mapping, - candidates=IteratorMapping( - self.state.criteria, - operator.attrgetter("candidates"), - ), - information=IteratorMapping( - self.state.criteria, - operator.attrgetter("information"), - ), - backtrack_causes=self.state.backtrack_causes, - ) - - def _is_current_pin_satisfying( - self, name: KT, criterion: Criterion[RT, CT] - ) -> bool: - try: - current_pin = self.state.mapping[name] - except KeyError: - return False - return all( - self._p.is_satisfied_by(requirement=r, candidate=current_pin) - for r in criterion.iter_requirement() - ) - - def _get_updated_criteria(self, candidate: CT) -> dict[KT, Criterion[RT, CT]]: - criteria = self.state.criteria.copy() - for requirement in self._p.get_dependencies(candidate=candidate): - self._add_to_criteria(criteria, requirement, parent=candidate) - return criteria - - def _attempt_to_pin_criterion(self, name: KT) -> list[Criterion[RT, CT]]: - criterion = self.state.criteria[name] - - causes: list[Criterion[RT, CT]] = [] - for candidate in criterion.candidates: - try: - criteria = self._get_updated_criteria(candidate) - except RequirementsConflicted as e: - self._r.rejecting_candidate(e.criterion, candidate) - causes.append(e.criterion) - continue - - # Check the newly-pinned candidate actually works. This should - # always pass under normal circumstances, but in the case of a - # faulty provider, we will raise an error to notify the implementer - # to fix find_matches() and/or is_satisfied_by(). - satisfied = all( - self._p.is_satisfied_by(requirement=r, candidate=candidate) - for r in criterion.iter_requirement() - ) - if not satisfied: - raise InconsistentCandidate(candidate, criterion) - - self._r.pinning(candidate=candidate) - self.state.criteria.update(criteria) - - # Put newly-pinned candidate at the end. This is essential because - # backtracking looks at this mapping to get the last pin. - self.state.mapping.pop(name, None) - self.state.mapping[name] = candidate - - return [] - - # All candidates tried, nothing works. This criterion is a dead - # end, signal for backtracking. - return causes - - def _patch_criteria( - self, incompatibilities_from_broken: list[tuple[KT, list[CT]]] - ) -> bool: - # Create a new state from the last known-to-work one, and apply - # the previously gathered incompatibility information. - for k, incompatibilities in incompatibilities_from_broken: - if not incompatibilities: - continue - try: - criterion = self.state.criteria[k] - except KeyError: - continue - matches = self._p.find_matches( - identifier=k, - requirements=IteratorMapping( - self.state.criteria, - operator.methodcaller("iter_requirement"), - ), - incompatibilities=IteratorMapping( - self.state.criteria, - operator.attrgetter("incompatibilities"), - {k: incompatibilities}, - ), - ) - candidates: IterableView[CT] = build_iter_view(matches) - if not candidates: - return False - incompatibilities.extend(criterion.incompatibilities) - self.state.criteria[k] = Criterion( - candidates=candidates, - information=list(criterion.information), - incompatibilities=incompatibilities, - ) - return True - - def _save_state(self) -> None: - """Save states for potential rollback if optimistic backjumping fails.""" - if self._save_states is None: - self._save_states = [ - State( - mapping=s.mapping.copy(), - criteria=s.criteria.copy(), - backtrack_causes=s.backtrack_causes[:], - ) - for s in self._states - ] - - def _rollback_states(self) -> None: - """Rollback states and disable optimistic backjumping.""" - self._optimistic_backjumping_ratio = 0.0 - if self._save_states: - self._states = self._save_states - self._save_states = None - - def _backjump(self, causes: list[RequirementInformation[RT, CT]]) -> bool: - """Perform backjumping. - - When we enter here, the stack is like this:: - - [ state Z ] - [ state Y ] - [ state X ] - .... earlier states are irrelevant. - - 1. No pins worked for Z, so it does not have a pin. - 2. We want to reset state Y to unpinned, and pin another candidate. - 3. State X holds what state Y was before the pin, but does not - have the incompatibility information gathered in state Y. - - Each iteration of the loop will: - - 1. Identify Z. The incompatibility is not always caused by the latest - state. For example, given three requirements A, B and C, with - dependencies A1, B1 and C1, where A1 and B1 are incompatible: the - last state might be related to C, so we want to discard the - previous state. - 2. Discard Z. - 3. Discard Y but remember its incompatibility information gathered - previously, and the failure we're dealing with right now. - 4. Push a new state Y' based on X, and apply the incompatibility - information from Y to Y'. - 5a. If this causes Y' to conflict, we need to backtrack again. Make Y' - the new Z and go back to step 2. - 5b. If the incompatibilities apply cleanly, end backtracking. - """ - incompatible_reqs: Iterable[CT | RT] = itertools.chain( - (c.parent for c in causes if c.parent is not None), - (c.requirement for c in causes), - ) - incompatible_deps = {self._p.identify(r) for r in incompatible_reqs} - while len(self._states) >= 3: - # Remove the state that triggered backtracking. - del self._states[-1] - - # Optimistically backtrack to a state that caused the incompatibility - broken_state = self.state - while True: - # Retrieve the last candidate pin and known incompatibilities. - try: - broken_state = self._states.pop() - name, candidate = broken_state.mapping.popitem() - except (IndexError, KeyError): - raise ResolutionImpossible(causes) from None - - if ( - not self._optimistic_backjumping_ratio - and name not in incompatible_deps - ): - # For safe backjumping only backjump if the current dependency - # is not the same as the incompatible dependency - break - - # On the first time a non-safe backjump is done the state - # is saved so we can restore it later if the resolution fails - if ( - self._optimistic_backjumping_ratio - and self._save_states is None - and name not in incompatible_deps - ): - self._save_state() - - # If the current dependencies and the incompatible dependencies - # are overlapping then we have likely found a cause of the - # incompatibility - current_dependencies = { - self._p.identify(d) for d in self._p.get_dependencies(candidate) - } - if not current_dependencies.isdisjoint(incompatible_deps): - break - - # Fallback: We should not backtrack to the point where - # broken_state.mapping is empty, so stop backtracking for - # a chance for the resolution to recover - if not broken_state.mapping: - break - - # Guard: We need at least two state to remain to both - # backtrack and push a new state - if len(self._states) <= 1: - raise ResolutionImpossible(causes) - - incompatibilities_from_broken = [ - (k, list(v.incompatibilities)) for k, v in broken_state.criteria.items() - ] - - # Also mark the newly known incompatibility. - incompatibilities_from_broken.append((name, [candidate])) - - self._push_new_state() - success = self._patch_criteria(incompatibilities_from_broken) - - # It works! Let's work on this new state. - if success: - return True - - # State does not work after applying known incompatibilities. - # Try the still previous state. - - # No way to backtrack anymore. - return False - - def _extract_causes( - self, criteron: list[Criterion[RT, CT]] - ) -> list[RequirementInformation[RT, CT]]: - """Extract causes from list of criterion and deduplicate""" - return list({id(i): i for c in criteron for i in c.information}.values()) - - def resolve(self, requirements: Iterable[RT], max_rounds: int) -> State[RT, CT, KT]: - if self._states: - raise RuntimeError("already resolved") - - self._r.starting() - - # Initialize the root state. - self._states = [ - State( - mapping=collections.OrderedDict(), - criteria={}, - backtrack_causes=[], - ) - ] - for r in requirements: - try: - self._add_to_criteria(self.state.criteria, r, parent=None) - except RequirementsConflicted as e: - raise ResolutionImpossible(e.criterion.information) from e - - # The root state is saved as a sentinel so the first ever pin can have - # something to backtrack to if it fails. The root state is basically - # pinning the virtual "root" package in the graph. - self._push_new_state() - - # Variables for optimistic backjumping - optimistic_rounds_cutoff: int | None = None - optimistic_backjumping_start_round: int | None = None - - for round_index in range(max_rounds): - self._r.starting_round(index=round_index) - - # Handle if optimistic backjumping has been running for too long - if self._optimistic_backjumping_ratio and self._save_states is not None: - if optimistic_backjumping_start_round is None: - optimistic_backjumping_start_round = round_index - optimistic_rounds_cutoff = int( - (max_rounds - round_index) * self._optimistic_backjumping_ratio - ) - - if optimistic_rounds_cutoff <= 0: - self._rollback_states() - continue - elif optimistic_rounds_cutoff is not None: - if ( - round_index - optimistic_backjumping_start_round - >= optimistic_rounds_cutoff - ): - self._rollback_states() - continue - - unsatisfied_names = [ - key - for key, criterion in self.state.criteria.items() - if not self._is_current_pin_satisfying(key, criterion) - ] - - # All criteria are accounted for. Nothing more to pin, we are done! - if not unsatisfied_names: - self._r.ending(state=self.state) - return self.state - - # keep track of satisfied names to calculate diff after pinning - satisfied_names = set(self.state.criteria.keys()) - set(unsatisfied_names) - - if len(unsatisfied_names) > 1: - narrowed_unstatisfied_names = list( - self._p.narrow_requirement_selection( - identifiers=unsatisfied_names, - resolutions=self.state.mapping, - candidates=IteratorMapping( - self.state.criteria, - operator.attrgetter("candidates"), - ), - information=IteratorMapping( - self.state.criteria, - operator.attrgetter("information"), - ), - backtrack_causes=self.state.backtrack_causes, - ) - ) - else: - narrowed_unstatisfied_names = unsatisfied_names - - # If there are no unsatisfied names use unsatisfied names - if not narrowed_unstatisfied_names: - raise RuntimeError("narrow_requirement_selection returned 0 names") - - # If there is only 1 unsatisfied name skip calling self._get_preference - if len(narrowed_unstatisfied_names) > 1: - # Choose the most preferred unpinned criterion to try. - name = min(narrowed_unstatisfied_names, key=self._get_preference) - else: - name = narrowed_unstatisfied_names[0] - - failure_criterion = self._attempt_to_pin_criterion(name) - - if failure_criterion: - causes = self._extract_causes(failure_criterion) - # Backjump if pinning fails. The backjump process puts us in - # an unpinned state, so we can work on it in the next round. - self._r.resolving_conflicts(causes=causes) - - try: - success = self._backjump(causes) - except ResolutionImpossible: - if self._optimistic_backjumping_ratio and self._save_states: - failed_optimistic_backjumping = True - else: - raise - else: - failed_optimistic_backjumping = bool( - not success - and self._optimistic_backjumping_ratio - and self._save_states - ) - - if failed_optimistic_backjumping and self._save_states: - self._rollback_states() - else: - self.state.backtrack_causes[:] = causes - - # Dead ends everywhere. Give up. - if not success: - raise ResolutionImpossible(self.state.backtrack_causes) - else: - # discard as information sources any invalidated names - # (unsatisfied names that were previously satisfied) - newly_unsatisfied_names = { - key - for key, criterion in self.state.criteria.items() - if key in satisfied_names - and not self._is_current_pin_satisfying(key, criterion) - } - self._remove_information_from_criteria( - self.state.criteria, newly_unsatisfied_names - ) - # Pinning was successful. Push a new state to do another pin. - self._push_new_state() - - self._r.ending_round(index=round_index, state=self.state) - - raise ResolutionTooDeep(max_rounds) - - -class Resolver(AbstractResolver[RT, CT, KT]): - """The thing that performs the actual resolution work.""" - - base_exception = ResolverException - - def resolve( # type: ignore[override] - self, - requirements: Iterable[RT], - max_rounds: int = 100, - ) -> Result[RT, CT, KT]: - """Take a collection of constraints, spit out the resolution result. - - The return value is a representation to the final resolution result. It - is a tuple subclass with three public members: - - * `mapping`: A dict of resolved candidates. Each key is an identifier - of a requirement (as returned by the provider's `identify` method), - and the value is the resolved candidate. - * `graph`: A `DirectedGraph` instance representing the dependency tree. - The vertices are keys of `mapping`, and each edge represents *why* - a particular package is included. A special vertex `None` is - included to represent parents of user-supplied requirements. - * `criteria`: A dict of "criteria" that hold detailed information on - how edges in the graph are derived. Each key is an identifier of a - requirement, and the value is a `Criterion` instance. - - The following exceptions may be raised if a resolution cannot be found: - - * `ResolutionImpossible`: A resolution cannot be found for the given - combination of requirements. The `causes` attribute of the - exception is a list of (requirement, parent), giving the - requirements that could not be satisfied. - * `ResolutionTooDeep`: The dependency tree is too deeply nested and - the resolver gave up. This is usually caused by a circular - dependency, but you can try to resolve this by increasing the - `max_rounds` argument. - """ - resolution = Resolution(self.provider, self.reporter) - state = resolution.resolve(requirements, max_rounds=max_rounds) - return _build_result(state) - - -def _has_route_to_root( - criteria: Mapping[KT, Criterion[RT, CT]], - key: KT | None, - all_keys: dict[int, KT | None], - connected: set[KT | None], -) -> bool: - if key in connected: - return True - if key not in criteria: - return False - assert key is not None - for p in criteria[key].iter_parent(): - try: - pkey = all_keys[id(p)] - except KeyError: - continue - if pkey in connected: - connected.add(key) - return True - if _has_route_to_root(criteria, pkey, all_keys, connected): - connected.add(key) - return True - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/structs.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/structs.py deleted file mode 100644 index 18c74d415..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/resolvelib/structs.py +++ /dev/null @@ -1,209 +0,0 @@ -from __future__ import annotations - -import itertools -from collections import namedtuple -from typing import ( - TYPE_CHECKING, - Callable, - Generic, - Iterable, - Iterator, - Mapping, - NamedTuple, - Sequence, - TypeVar, - Union, -) - -KT = TypeVar("KT") # Identifier. -RT = TypeVar("RT") # Requirement. -CT = TypeVar("CT") # Candidate. - -Matches = Union[Iterable[CT], Callable[[], Iterable[CT]]] - -if TYPE_CHECKING: - from .resolvers.criterion import Criterion - - class RequirementInformation(NamedTuple, Generic[RT, CT]): - requirement: RT - parent: CT | None - - class State(NamedTuple, Generic[RT, CT, KT]): - """Resolution state in a round.""" - - mapping: dict[KT, CT] - criteria: dict[KT, Criterion[RT, CT]] - backtrack_causes: list[RequirementInformation[RT, CT]] - -else: - RequirementInformation = namedtuple( - "RequirementInformation", ["requirement", "parent"] - ) - State = namedtuple("State", ["mapping", "criteria", "backtrack_causes"]) - - -class DirectedGraph(Generic[KT]): - """A graph structure with directed edges.""" - - def __init__(self) -> None: - self._vertices: set[KT] = set() - self._forwards: dict[KT, set[KT]] = {} # <key> -> Set[<key>] - self._backwards: dict[KT, set[KT]] = {} # <key> -> Set[<key>] - - def __iter__(self) -> Iterator[KT]: - return iter(self._vertices) - - def __len__(self) -> int: - return len(self._vertices) - - def __contains__(self, key: KT) -> bool: - return key in self._vertices - - def copy(self) -> DirectedGraph[KT]: - """Return a shallow copy of this graph.""" - other = type(self)() - other._vertices = set(self._vertices) - other._forwards = {k: set(v) for k, v in self._forwards.items()} - other._backwards = {k: set(v) for k, v in self._backwards.items()} - return other - - def add(self, key: KT) -> None: - """Add a new vertex to the graph.""" - if key in self._vertices: - raise ValueError("vertex exists") - self._vertices.add(key) - self._forwards[key] = set() - self._backwards[key] = set() - - def remove(self, key: KT) -> None: - """Remove a vertex from the graph, disconnecting all edges from/to it.""" - self._vertices.remove(key) - for f in self._forwards.pop(key): - self._backwards[f].remove(key) - for t in self._backwards.pop(key): - self._forwards[t].remove(key) - - def connected(self, f: KT, t: KT) -> bool: - return f in self._backwards[t] and t in self._forwards[f] - - def connect(self, f: KT, t: KT) -> None: - """Connect two existing vertices. - - Nothing happens if the vertices are already connected. - """ - if t not in self._vertices: - raise KeyError(t) - self._forwards[f].add(t) - self._backwards[t].add(f) - - def iter_edges(self) -> Iterator[tuple[KT, KT]]: - for f, children in self._forwards.items(): - for t in children: - yield f, t - - def iter_children(self, key: KT) -> Iterator[KT]: - return iter(self._forwards[key]) - - def iter_parents(self, key: KT) -> Iterator[KT]: - return iter(self._backwards[key]) - - -class IteratorMapping(Mapping[KT, Iterator[CT]], Generic[RT, CT, KT]): - def __init__( - self, - mapping: Mapping[KT, RT], - accessor: Callable[[RT], Iterable[CT]], - appends: Mapping[KT, Iterable[CT]] | None = None, - ) -> None: - self._mapping = mapping - self._accessor = accessor - self._appends: Mapping[KT, Iterable[CT]] = appends or {} - - def __repr__(self) -> str: - return "IteratorMapping({!r}, {!r}, {!r})".format( - self._mapping, - self._accessor, - self._appends, - ) - - def __bool__(self) -> bool: - return bool(self._mapping or self._appends) - - def __contains__(self, key: object) -> bool: - return key in self._mapping or key in self._appends - - def __getitem__(self, k: KT) -> Iterator[CT]: - try: - v = self._mapping[k] - except KeyError: - return iter(self._appends[k]) - return itertools.chain(self._accessor(v), self._appends.get(k, ())) - - def __iter__(self) -> Iterator[KT]: - more = (k for k in self._appends if k not in self._mapping) - return itertools.chain(self._mapping, more) - - def __len__(self) -> int: - more = sum(1 for k in self._appends if k not in self._mapping) - return len(self._mapping) + more - - -class _FactoryIterableView(Iterable[RT]): - """Wrap an iterator factory returned by `find_matches()`. - - Calling `iter()` on this class would invoke the underlying iterator - factory, making it a "collection with ordering" that can be iterated - through multiple times, but lacks random access methods presented in - built-in Python sequence types. - """ - - def __init__(self, factory: Callable[[], Iterable[RT]]) -> None: - self._factory = factory - self._iterable: Iterable[RT] | None = None - - def __repr__(self) -> str: - return f"{type(self).__name__}({list(self)})" - - def __bool__(self) -> bool: - try: - next(iter(self)) - except StopIteration: - return False - return True - - def __iter__(self) -> Iterator[RT]: - iterable = self._factory() if self._iterable is None else self._iterable - self._iterable, current = itertools.tee(iterable) - return current - - -class _SequenceIterableView(Iterable[RT]): - """Wrap an iterable returned by find_matches(). - - This is essentially just a proxy to the underlying sequence that provides - the same interface as `_FactoryIterableView`. - """ - - def __init__(self, sequence: Sequence[RT]): - self._sequence = sequence - - def __repr__(self) -> str: - return f"{type(self).__name__}({self._sequence})" - - def __bool__(self) -> bool: - return bool(self._sequence) - - def __iter__(self) -> Iterator[RT]: - return iter(self._sequence) - - -def build_iter_view(matches: Matches[CT]) -> Iterable[CT]: - """Build an iterable view from the value returned by `find_matches()`.""" - if callable(matches): - return _FactoryIterableView(matches) - if not isinstance(matches, Sequence): - matches = list(matches) - return _SequenceIterableView(matches) - - -IterableView = Iterable diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/LICENSE deleted file mode 100644 index 441550556..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020 Will McGugan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__init__.py deleted file mode 100644 index 73f58d774..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__init__.py +++ /dev/null @@ -1,177 +0,0 @@ -"""Rich text and beautiful formatting in the terminal.""" - -import os -from typing import IO, TYPE_CHECKING, Any, Callable, Optional, Union - -from ._extension import load_ipython_extension # noqa: F401 - -__all__ = ["get_console", "reconfigure", "print", "inspect", "print_json"] - -if TYPE_CHECKING: - from .console import Console - -# Global console used by alternative print -_console: Optional["Console"] = None - -try: - _IMPORT_CWD = os.path.abspath(os.getcwd()) -except FileNotFoundError: - # Can happen if the cwd has been deleted - _IMPORT_CWD = "" - - -def get_console() -> "Console": - """Get a global :class:`~rich.console.Console` instance. This function is used when Rich requires a Console, - and hasn't been explicitly given one. - - Returns: - Console: A console instance. - """ - global _console - if _console is None: - from .console import Console - - _console = Console() - - return _console - - -def reconfigure(*args: Any, **kwargs: Any) -> None: - """Reconfigures the global console by replacing it with another. - - Args: - *args (Any): Positional arguments for the replacement :class:`~rich.console.Console`. - **kwargs (Any): Keyword arguments for the replacement :class:`~rich.console.Console`. - """ - from pip._vendor.rich.console import Console - - new_console = Console(*args, **kwargs) - _console = get_console() - _console.__dict__ = new_console.__dict__ - - -def print( - *objects: Any, - sep: str = " ", - end: str = "\n", - file: Optional[IO[str]] = None, - flush: bool = False, -) -> None: - r"""Print object(s) supplied via positional arguments. - This function has an identical signature to the built-in print. - For more advanced features, see the :class:`~rich.console.Console` class. - - Args: - sep (str, optional): Separator between printed objects. Defaults to " ". - end (str, optional): Character to write at end of output. Defaults to "\\n". - file (IO[str], optional): File to write to, or None for stdout. Defaults to None. - flush (bool, optional): Has no effect as Rich always flushes output. Defaults to False. - - """ - from .console import Console - - write_console = get_console() if file is None else Console(file=file) - return write_console.print(*objects, sep=sep, end=end) - - -def print_json( - json: Optional[str] = None, - *, - data: Any = None, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, -) -> None: - """Pretty prints JSON. Output will be valid JSON. - - Args: - json (str): A string containing JSON. - data (Any): If json is not supplied, then encode this data. - indent (int, optional): Number of spaces to indent. Defaults to 2. - highlight (bool, optional): Enable highlighting of output: Defaults to True. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - """ - - get_console().print_json( - json, - data=data, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - - -def inspect( - obj: Any, - *, - console: Optional["Console"] = None, - title: Optional[str] = None, - help: bool = False, - methods: bool = False, - docs: bool = True, - private: bool = False, - dunder: bool = False, - sort: bool = True, - all: bool = False, - value: bool = True, -) -> None: - """Inspect any Python object. - - * inspect(<OBJECT>) to see summarized info. - * inspect(<OBJECT>, methods=True) to see methods. - * inspect(<OBJECT>, help=True) to see full (non-abbreviated) help. - * inspect(<OBJECT>, private=True) to see private attributes (single underscore). - * inspect(<OBJECT>, dunder=True) to see attributes beginning with double underscore. - * inspect(<OBJECT>, all=True) to see all attributes. - - Args: - obj (Any): An object to inspect. - title (str, optional): Title to display over inspect result, or None use type. Defaults to None. - help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. - methods (bool, optional): Enable inspection of callables. Defaults to False. - docs (bool, optional): Also render doc strings. Defaults to True. - private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. - dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. - sort (bool, optional): Sort attributes alphabetically. Defaults to True. - all (bool, optional): Show all attributes. Defaults to False. - value (bool, optional): Pretty print value. Defaults to True. - """ - _console = console or get_console() - from pip._vendor.rich._inspect import Inspect - - # Special case for inspect(inspect) - is_inspect = obj is inspect - - _inspect = Inspect( - obj, - title=title, - help=is_inspect or help, - methods=is_inspect or methods, - docs=is_inspect or docs, - private=private, - dunder=dunder, - sort=sort, - all=all, - value=value, - ) - _console.print(_inspect) - - -if __name__ == "__main__": # pragma: no cover - print("Hello, **World**") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__main__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__main__.py deleted file mode 100644 index a583f1efa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__main__.py +++ /dev/null @@ -1,245 +0,0 @@ -import colorsys -import io -from time import process_time - -from pip._vendor.rich import box -from pip._vendor.rich.color import Color -from pip._vendor.rich.console import Console, ConsoleOptions, Group, RenderableType, RenderResult -from pip._vendor.rich.markdown import Markdown -from pip._vendor.rich.measure import Measurement -from pip._vendor.rich.pretty import Pretty -from pip._vendor.rich.segment import Segment -from pip._vendor.rich.style import Style -from pip._vendor.rich.syntax import Syntax -from pip._vendor.rich.table import Table -from pip._vendor.rich.text import Text - - -class ColorBox: - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - for y in range(0, 5): - for x in range(options.max_width): - h = x / options.max_width - l = 0.1 + ((y / 5) * 0.7) - r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0) - r2, g2, b2 = colorsys.hls_to_rgb(h, l + 0.7 / 10, 1.0) - bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255) - color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255) - yield Segment("▄", Style(color=color, bgcolor=bgcolor)) - yield Segment.line() - - def __rich_measure__( - self, console: "Console", options: ConsoleOptions - ) -> Measurement: - return Measurement(1, options.max_width) - - -def make_test_card() -> Table: - """Get a renderable that demonstrates a number of features.""" - table = Table.grid(padding=1, pad_edge=True) - table.title = "Rich features" - table.add_column("Feature", no_wrap=True, justify="center", style="bold red") - table.add_column("Demonstration") - - color_table = Table( - box=None, - expand=False, - show_header=False, - show_edge=False, - pad_edge=False, - ) - color_table.add_row( - ( - "✓ [bold green]4-bit color[/]\n" - "✓ [bold blue]8-bit color[/]\n" - "✓ [bold magenta]Truecolor (16.7 million)[/]\n" - "✓ [bold yellow]Dumb terminals[/]\n" - "✓ [bold cyan]Automatic color conversion" - ), - ColorBox(), - ) - - table.add_row("Colors", color_table) - - table.add_row( - "Styles", - "All ansi styles: [bold]bold[/], [dim]dim[/], [italic]italic[/italic], [underline]underline[/], [strike]strikethrough[/], [reverse]reverse[/], and even [blink]blink[/].", - ) - - lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at justo. Maecenas luctus velit et auctor maximus." - lorem_table = Table.grid(padding=1, collapse_padding=True) - lorem_table.pad_edge = False - lorem_table.add_row( - Text(lorem, justify="left", style="green"), - Text(lorem, justify="center", style="yellow"), - Text(lorem, justify="right", style="blue"), - Text(lorem, justify="full", style="red"), - ) - table.add_row( - "Text", - Group( - Text.from_markup( - """Word wrap text. Justify [green]left[/], [yellow]center[/], [blue]right[/] or [red]full[/].\n""" - ), - lorem_table, - ), - ) - - def comparison(renderable1: RenderableType, renderable2: RenderableType) -> Table: - table = Table(show_header=False, pad_edge=False, box=None, expand=True) - table.add_column("1", ratio=1) - table.add_column("2", ratio=1) - table.add_row(renderable1, renderable2) - return table - - table.add_row( - "Asian\nlanguage\nsupport", - ":flag_for_china: 该库支持中文,日文和韩文文本!\n:flag_for_japan: ライブラリは中国語、日本語、韓国語のテキストをサポートしています\n:flag_for_south_korea: 이 라이브러리는 중국어, 일본어 및 한국어 텍스트를 지원합니다", - ) - - markup_example = ( - "[bold magenta]Rich[/] supports a simple [i]bbcode[/i]-like [b]markup[/b] for [yellow]color[/], [underline]style[/], and emoji! " - ":+1: :apple: :ant: :bear: :baguette_bread: :bus: " - ) - table.add_row("Markup", markup_example) - - example_table = Table( - show_edge=False, - show_header=True, - expand=False, - row_styles=["none", "dim"], - box=box.SIMPLE, - ) - example_table.add_column("[green]Date", style="green", no_wrap=True) - example_table.add_column("[blue]Title", style="blue") - example_table.add_column( - "[cyan]Production Budget", - style="cyan", - justify="right", - no_wrap=True, - ) - example_table.add_column( - "[magenta]Box Office", - style="magenta", - justify="right", - no_wrap=True, - ) - example_table.add_row( - "Dec 20, 2019", - "Star Wars: The Rise of Skywalker", - "$275,000,000", - "$375,126,118", - ) - example_table.add_row( - "May 25, 2018", - "[b]Solo[/]: A Star Wars Story", - "$275,000,000", - "$393,151,347", - ) - example_table.add_row( - "Dec 15, 2017", - "Star Wars Ep. VIII: The Last Jedi", - "$262,000,000", - "[bold]$1,332,539,889[/bold]", - ) - example_table.add_row( - "May 19, 1999", - "Star Wars Ep. [b]I[/b]: [i]The phantom Menace", - "$115,000,000", - "$1,027,044,677", - ) - - table.add_row("Tables", example_table) - - code = '''\ -def iter_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value''' - - pretty_data = { - "foo": [ - 3.1427, - ( - "Paul Atreides", - "Vladimir Harkonnen", - "Thufir Hawat", - ), - ], - "atomic": (False, True, None), - } - table.add_row( - "Syntax\nhighlighting\n&\npretty\nprinting", - comparison( - Syntax(code, "python3", line_numbers=True, indent_guides=True), - Pretty(pretty_data, indent_guides=True), - ), - ) - - markdown_example = """\ -# Markdown - -Supports much of the *markdown* __syntax__! - -- Headers -- Basic formatting: **bold**, *italic*, `code` -- Block quotes -- Lists, and more... - """ - table.add_row( - "Markdown", comparison("[cyan]" + markdown_example, Markdown(markdown_example)) - ) - - table.add_row( - "+more!", - """Progress bars, columns, styled logging handler, tracebacks, etc...""", - ) - return table - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.panel import Panel - - console = Console( - file=io.StringIO(), - force_terminal=True, - ) - test_card = make_test_card() - - # Print once to warm cache - start = process_time() - console.print(test_card) - pre_cache_taken = round((process_time() - start) * 1000.0, 1) - - console.file = io.StringIO() - - start = process_time() - console.print(test_card) - taken = round((process_time() - start) * 1000.0, 1) - - c = Console(record=True) - c.print(test_card) - - console = Console() - console.print(f"[dim]rendered in [not dim]{pre_cache_taken}ms[/] (cold cache)") - console.print(f"[dim]rendered in [not dim]{taken}ms[/] (warm cache)") - console.print() - console.print( - Panel.fit( - "[b magenta]Hope you enjoy using Rich![/]\n\n" - "Please consider sponsoring me if you get value from my work.\n\n" - "Even the price of a ☕ can brighten my day!\n\n" - "https://github.com/sponsors/willmcgugan", - border_style="red", - title="Help ensure Rich is maintained", - ) - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index c40867244dbaba3c972dc28e4ca630f848db95e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8438 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 OOU33#f<GG;Q2sAojvuT5 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-314.pyc deleted file mode 100644 index 4a1a7a5fbd9094138708eb3b8bca295e188f1439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10412 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 Vb+^=Nv;Wxyy7x{GMXw`N|6l2mFMR+2 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-314.pyc deleted file mode 100644 index 533f0ff52a1c48bd005414933754f50d2df1275c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15893 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 Xe5UH_hY+O@O^6}vnbg*fzpnm&I}1>R diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc deleted file mode 100644 index 7faaa9451108444c050cc397b8b0aa32012eea66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206040 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-314.pyc deleted file mode 100644 index c674f31cbb82167a8b92e399115362986467f8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 zcmah~&2Jk;6rbJo?%Gb`I8I60q)u$7B(|~RL@`yGMr}}4lu**9o7R<(oz=$PCfnNH z)$F=$Dh_+#zyU!y009+IAtYKrg5Ij$_z#?hs%Amz0g&hkmlU<?i8pI+okT*6>^JYd zeKYeuesAU#UxydLxOe+cCF(-xHzGI#WP5Dgg~>!qNTBA>EM-u$v_a1@1~W)>^qk9Z zEl~n9$IfyFH;8g{j!*P8*TQ7Db5zbfO6B+odWYTvdQXlY1^ZoJyaJtbE%dbZaJVoM zTxqHyE$nr)t$BhL*j^-Xy{PCfQbvbB51|<Uh#15e%Y95L7NzB)Y_ao_kzcjkr!+%R z%Tn=VjI!9{^QYdJyBdy8MYD_Xqp|4GDfnfRv8Y^9FDP#t@)aW%J31B169<}3AUE&~ z{I`~Xm?(pm=*f2wDu8Z3I!&!o0+od?jUmuk+TmN;?MV@stdn*KwPllXK_KiSvf6SH zPpr;@d|s*)4e^qM6{&1kUeWeb)GNythh?LJ%Mdf88yK@>S*LiM#Iaaeo|lbPwE!V= z=T%&i44niMvEDm2l|8G=SkFoY8IK=2G?u-r;)_`gs~6<Fp=a|&wNhA?bUCS%6$6NF zKtg4l9M3MS!ItHT@wAv0uS^~k&&VaMC>gS7l(g)d%5qj$3^}Pu`HRwutY<YvONp1{ zazVu@tmIcyP2aH$tMc-wwq~`9qEs%c2H8Z!UEpCm{Pi>t6Fo(HsOV!te)V?L8JK^6 zDR@2qQLfGc|Aa$bp*l}EH{v{xJ-}_jI+Q1sat6sW$gZt#fRR{<lXw%gGQRMlQqBT| zR8F7-T3`fMiq@D6v+$x;+ids@HPRFd-2??-M+&fOWGI16H_w;{US$bvGi-*-@Dq%{ z1BBg0zvjx&VRUZBu>=&jul5U#G==Pfhw^Gc4k_gjfyF5Hz&RBX=U;c;w^-YvDSlv~ z9ndAtgM(=6bs+x--4<|nz;zp-Q>51zOd7&s0af``Oez+mF*yi#5T3%FFg5Uo{X|U) zYaQ5C{^_Ecmx}t4(d`)MB`XJjkn;2Fz+*zLzx);RdAv^8@49Ub4uFXrC(QOB$+zSD z447$#M7rR#Z^Oc-1X*NUhUDRZ#`L2_HjFa#0!iks;n+HN(IN+y%%aOFQ(~L_5DKAI zQ*)@m5l{@GGgO5Rq9LT9!%Pq<RE#<a{mQLiwW8@3TU0O0*m9qc*N$VX;uw!f0xWN% z$w|!}zATkwi+8SpJ-hA&(Khw0$VMZ{RvTfP);bS+4u?V^(=_dRSl)svHoMS@{8w38 zHg-|Y!6wg4REwv+Puxm;JG$W>dDnY`uhXn&;OFlB>u)^>CO3k~&0uP?d+he%n!mTY zFS*6gY2QDH-s7tyy2JMjn%2Mf38Fj$weH}(_F$a>_PI{*^6}6Vy4&%Zm-*2{0R@mj z3X#<&iVzCiD<x617+_;=8~vC(X}FD;xScrh5YdGQ2@?_lq7$eN4@3AfGc%3oeLEw@ zQLwPDoio5ZH_?-J)YbFAAKvhX&AFPtXWe~c<mP0xGi}b+0)3w(K1`S=9?qOvpZsF_ z)9IU?cLG24Pgl>LtGf0+bpb^Gws9Lk?LF5nY_^S5T_ZMHV?K*B)-<KOf(h0d{bJwQ zG?w8aY?WNMBe#3W@`-}HXkb{?c+70Mvh2KZ*aur#d|oYS3cPp>JPUR>w*cJa5Yl~? zd%C0+Dn<DS9tV*$g<b#xxu>XyD6xSOzaY;aXt2(qK<_pEqdwDD>)N+|q}mt1d92!( zy5BVhnn2(BNf7(Tei*9uzj{A#(Cn;x(Qv#LIq-G-%Xl?;dNU$Ch-5Y*nWyAdwl8km Gi+=%JE9M#i diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-314.pyc deleted file mode 100644 index 83e6985d1c437e2fe36b703ea48ffc3441ac5573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2395 zcmc&$PjA~c6ql21%M7gOnjyQgYO%zaWjSfqrJfxub(5?>{=s&O6)+&s5^XV&M2)0l zJBEQ>cH0-(ao?oqX~=b#9Ru_W?2(deqfLMwI*bSL&wJ#1@An>m)VFuO$Q#h!{P_<( zT{eur)g)`Vbntc+2EQ5&LmG{o%rzF|LSs=bHkKY3g-`GSs8#PjJE^x`o$euDhQUt0 znso$wFbj#q$n`N7MApm~t$l0Tgk>Q|0oloqbuWBE<Rsr=-UyAyc?8X60pk@k?lMk# zob@Ab@`Dz1uzQ{?Seedj33MiteAP}*uiAd%ggSXgZ?DFjAT6$$T^32Ji$fZWDn}#= zSaIzcIm0jesEH$ij#$LjiY|);3$Q4z)mfiY!qG7qtQA8LiWs}Z+^M?EyYWmK`Giwx z?u?bjq-v{fr)q->fPkGi1wLxn@Nb_2mg1s^T(Bl;Ca11%Ny0-K;lM-}lnkD-Va+U~ zG8zx4C;bT;`-Jv<IWf^N3?kU%OBq*edoUQ329HXN_w3DbxopF+0J_4pdf&3p0f`95 zl6Yu9rH>k536dvck#3b_DEl~|m!w1)vaED#imE>6#}qu5WEoSZ&m)S=eabPaL(FE9 zI;A1FTR{PHaj>rCN^CVquODD;7K-|8rI)on2gS@c*Ne_X$qiWF>w-Qhxh%Bt86MgJ z?FhRI_7ueS<I-lSY!6tsyJ;&Y=8cr}vRMFMd5Gn@na)4D>6<OTW7sUrpwZxIj4LQo z&IRwt20Galv{f!A5~y{B(?`w4Qx<stZ6cI~{~-%gvmcm(4!C(s0=}P1fX+Z^+>hul zed17WVnJ1LI=uB-Om9UIO-bY(I|6PVaGzpLC%xhEaHbQ`h*-%wXsOvvTDqJrFsB$; zj$k1zEMQzg-F^^Qnn0#i^nMVM%HaL0ojA6!J@1XSla=NTprr(hlqYFLL)~hNDf=f? zJY{Vys(Pd=Qr>X`8lPeyD(cnDd8CzKMv;j&P#h<&M2aa*G}2!kENso#)Jf>mL<xxV zk}09usc}2Ap3F7eBJ((LGKt0YISWZD=^@GC4N)9ZGxab4zFnVrFq{<8Y&Mz{OyGTp zCWbg`reeJZw?<k>xqLi(_%e^CugCo6q#(0R$t;VYmxT!f$iM}3mv{7oFs;+eW&IR^ z?6|OWwNgJhZk`<OIX|_I4xRmz#?fx;>Rz_ke0h+q-F1@5am(4?J$iol>S{%=)DL%? z&Ap~`+SuEF{_`KkTlJ@L^?SY2ejx}KZR`=g@#IOlJz)I29dmXD=@f0v`W-BYMI$QV zBP0$2!mW+==}7u4dbF|SY&pa2$4-lcv4Y!?Vcb5XowlHo0J82m?h(<BX>2<eB=Q)y zRb;k9hB4#PNnV6fJi1!0hRo~34+{SroKyco;vsyl7jwDX^}?55FTFNauD|(i75aPE WQO@}4;cMgWU#sYivBEzC#eV@X<K&0{ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-314.pyc deleted file mode 100644 index d7f273d0a414cba025d8ef360695d439105fbd67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmZWn&ui2`6n>M$t@g*Ff?X(LtAe<c-MF|&TSOEuEtH}`dkP)0$=Ds6O@^6SZEkxg z;veC`Ymfdb-VF30BG_AH554+ccBO(3-phOQzI-$9n^~<d%mUiiFTdm!2JnN5zvfJn z@hwb7um=I#f=y=GG6YTo0=EI_RqF)aU1(l9CGasT-Dg=5BNLF5dFU?s_&$aa?82V2 zb_9^%+D&-L`Yd1}b|w}$f$KZS=bh5-r6W~Y)4~pQwxfxq$;#TBTn{2^XoEZD$LAa2 zYa_G?qeSS=`uc<LeXb8erSrEUwkC|ze3<kiBU&<(7K5=-nhM?Ogf9x)&$EY}F7NWg zwMYDw7^pO|g4=-#w`DIh(u$Uf;)7^km{3XO^LHXka_wsw_kAu7t;mebv$iVAdCsFO z%PkRbJ%^{G(ajQu5u8JfUHeVplR2Z$XIoWc>_Vj%C1f;rrPl@~7pf~%y}AKslPPBz zcG+#{5*`gJ=ie$I1zk-{sMpMN<ejElHgJaabcQy~&{n9fEp#2R<<fs$tD{)-PynQx zLC6F*Yc-#e8anE|l@(3Ts9a3*DB)67x?ZTGuVb?kgOU;a^!yX=>347LXzQC-|FEs+ yahZ-+vxSn`z9ww-(=k-N3H#;8gFG3g;)%Y2eY$?LfZ@z#jGe&Zc@1T);C}${V6A!p diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-314.pyc deleted file mode 100644 index 1f0d13d7a9cd12ada1c5cbd0906fdef153a271c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmZWo&rcIU6n?YYF0_DY)Cee~qa;FuP>GEJG#cVBni$Xxa&dLDw9|HAyR(^{q9q=B z(8RkJ4<0<KH*X&O8}y=^c=Dj$s*qqj`DQ^q_>y`1X6DW8x8L{e<bi=KV7z<%mFG=> z&wBDFjJ<+vPh-)6yI_+tED}ZXx;DzjqN&WqluG5nHV45@4T7IjX*)dz1?!tWTp)3u z7X(6iii;pB7_m`aj(ab8zVEI1tU|Cy4;?8Sh=6QUEIP0Xca7PH099NYft#d3Y+@U> zX{U+?-k<)a(Z!h>_nGVS4Yt)&UcMbEc_+3cQ!N>6WqF|J1G*#v_EICUYC<+W73mkA zh#y^=cWy;YMvhlya%OJsv~y3$4JVXhomEuiRD98@u6Yrg;sIBfB89M-oSJcNv{gd{ zXJ$%n$-O^&)?H!E(DxK`RWo$1^ED^picN)HWy7np$O(B^bT?U06|yLKrBQS>>Of3~ z?YQ4{_X%RID+dsog(EtOsRO%kkmSDW^mM$dAJ5m5**5M%LY^*kq;Vio>1_v#4mf{E zMH)42CEU{yl2yVon$TmgN{&NmZyCl=&M~0i>`SguRPoLc$irx|$Kjkg3Y-+otq<3j zqI+L3QJ^&`n$%0?r>Iw{h*qF@P^U;X4TX??n{s4_HCdooHR+qudQq{K@I0N(F35T` zpQRXo)ua>U<-$B&_^%(^?L^-F6aO@xrz;IcC5u|VqN0|Z3<Tvh>TP;F@!KhiptK+K zstB1(Y)Nal&8pK`bV#Dh68f~K&d{_<#+fVkD=gIZEf}&F`I0$IktXUSmHqgLv)H>Y zsXT-WiGmlg=)lfFm?*wzznOS@`TcmgbM-^dz`LH|u3=?{J{}r=GW&S>dq4E&e(v-^ zZg>Y$nV}!OaCoSj!Rl9}Z+~Kqz_Y$d^A(vimkL&#b=_JE{jKeyRgEpx4v}z~!im&A tNH9qKTgwAFB^Z0pH$}DOvkUSFu4#Kj`a8NNA><RB_yYM|3k{Z>_zjP=3%CFP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-314.pyc deleted file mode 100644 index 8b0a9cb779b3f03ca7fdb312fc7f6aa67b64eb06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14675 zcmbVzeQ+DcmFEn;KM9Z^z;AL$iWDJ<pd?DN^<`V8q>z$DF(Vj?Pn2MY1S!}M0M869 zk&zwl=OK=3McY>;dZR1Td%g>Gt5oDGXHQ$_KeCChHoNyxq$r2bEM2y<uG&r2RUH+| zCp-Jk{az0S0BK5gwu^Yv)BU=q`}OPhUcY|aT;_IgNVneo=fur6j{8S?(UUo!S>bq& zo8-=LBHza;^fdHwy}ZKr8WcmXQ8D(K6jQHRG51;&OB2-_`>ee-#nx+A?7a@f(d$&4 zy)MPo>sH*oWl9-vc+u47>Gdk!-g2d!y_@?gdVPwI<t=@cy?({d^47jUZ<SKT^0vO} z-WsKb<?Vg7y>&_*%RBn&dmEGnmUs3w_BJU^y@Db%aiXh=6Wvu@(yKK4xn@o*!@K8n z)efUJH>E}NqNJQ*w2BqT`&fR1Sc$x!<=aHQl?w)bLrwaF7S%SCjK@;L=^@oJ8dvCP z#d9Q)jH}j!Jd}*dvT94n=hMSuD6-3m(Ns(slj1?EYCMn{R~<d+WHLUaB+@C>)~Cd! z*jeD&j%TPOmQ>B*u?z}K;qgpdH9ws~Y0#jWza^!|GHRI^PYr8Ls6NQ6m2r6}mWfA) z(kVqsC-EGP%P9AV@r=})7(JK74_`r%>&RGU9NA-ui;2`VUNsNIQt>1zECW(pQO1!o zhiNqUo+%u^sHirA^r0c}0Pz7!CP1R#%2t3$F2bELJo?8RH;l4+?%Vu1UgQTEA_37* z%y$_;N#kz}C{~S(g81&3l){INvO+_&jHIRWF-4|NwWxpEvuE&WIWEbAF-&^f?%i7l zFQldC2QyOoIZ#j@97?9ghR??2cxNJ&Pyl2l2I5Mc+Xe^5m2>G-_qH9;9np)A?uv%v z=QGKe5|1k9GlNeh&JM~6CEl5d4Lu(ljmv|XM5ZhHB8Z!ox}?O=xvnTW!@QMHW?Xee zqp?&ftx)r*)Pk{j@RMr+Cb|2Zk@w#vaJ6-r9`CfWw-wZKjBb>nL^Q+CRG`~{PEl5^ z0g>O4FTDWV4By0M3=!f$!$j~~aYazh#f6cCBr8HDCdEdjSmvBCBBjp@F#!|>6%(n^ z(1gL^05$DEQ4+*gL8H`w{#l9ENadq44X9lZq-Lt}Mp?JfLbp-}irGZ#k(uN^3DjIU z|JwPP!wZ4Ue{g)VFZ;q&bIw^gXR4H1fiQ$$AywpaD>speq48->;YCg{obfBh0GEa^ zQB0yiG>RtCEL!lhiZ;=XrvpDH@-F<`qOHpw;ktR+xJjGnp$(ZdC}viMt&1{k^IBL5 zHZV%GEo@~a*v2T)HnNSC1XxKGpjXlQu4W}Qti&PKD$WR}xI`mJUZ-07G%koe16myr zq{8kKl(dlN5FwTt7c_Pgj-MsQ3^^PJq)~Z~LqJNOeNO1W#t-fh4y5P}2qmpU3<;~0 zj0+uDzAZvJFA2~f%!=`;;e-tC9T(Cs#-+k{rMNtnRM0>Y`qQbnFeb+Z1)DV_9E^{| zP$koMs7m|Dxp*=obev76ldC>*;#~TIFfx`*3JgKPmKUTL_)G$`#Ztm^V_>#5EVud- zhhs@O|Bdr;Y`bB3ozEOfk!aBe51tg#Bf=22D;3KR?2wpxo!$;4<#c{Ii0=iB@z-<{ zmd5hK%1DV9v3u9)h|ONFjw#qbXUCK{eKJ0pNTslwgbNAfoG?amR~|}3kUw~=4Cz51 zDd`+y3L8`JdN@5slqr7Ufgh05lCoa+R9w=1ESWhMI~!LLMBee$y%lMKy7l@ZZlJ1S zf2%tvS?m{M$+7ils;LtJR81*@hJ>}&SbueA+GtcW<NtouL>zcnwdT1<HPPyaRcn5I zRLd|Ul4>GCs74G^HM9O#>8Ai>4vDsv=K%Kc>uabJ{3+-rKpsEC7Lw)pBpOiy!Nj1M zK?{Rc25k)58FVn{6kT0Thzqwwf>JeNqS9vMq%8zG34{oA5g?r@Z6mOqKsSL#fc~IK zveS!;01Zbq(N+x_B!OPs(I~Smh7&_dG%Ax0ZJA_}n<*r<GB2q@rMe0>9VfpG@CE6q z8gt!U0-w6Q%Vv79ao*}TZ6A7?m+kcG;5@!%C*@pRMPS)YxiTvAP|izb<&>-7%Kghe z%2iUWpK<}NtYW!}a@Cx-a=8Y%<yy{BcDD{WO+V0(DbXxxdGNEXIH2q%xxs=W+(8&f z5iV6IJLyg7ZMm>vFTYVk;YOil>bWN14p{R=C67o!k)kh?UJ<eDt%ohtTIBZf8Pi@~ z8a=r+rJKCm$tO~%)l%48@<oi9z8E&5&%!sumUS?oe^NHRkCT}c&6=f?lPP9&)62=3 zlv68(p~RGYxIgHUd?-_$=ZeOgw3C%Y&&QsJ0YggRn=lyhR?vyf5>Jk>9==JV0$0j3 zvi9~3deW=}TNH*-0vxD%iwvigFlLj{Xp*~E&(&{UsN0e?-L_Tde1TVOIe+b<zkAN# zJw3eG7@BVk&B_an-C5JCj*p#XxnSp<t26s8fT_`3W%aA}Tvg+%F66E}HTBf=L7-8| zVpYdnRmV&_UR}9B{i{w5)nEH(4voWzV|1>e6=y=A9ht8e0%V$AGqMe=k&5;t_8!}k zHCkT4LwW?@E4xp66s1p4O&tK+Y&LW4T@K()d6^z>E9`CcP5>@PJcn_*R{ke4r8}X> zzdFZ`wi5RZ(yUlo2ZQa1!2%zD6=N9U1$`8Fw}^4fS1cVYaBHz%H%noTasvgf)yIMz zYbanCBV;}C6aHi1R{@5pW{wDqb3;LkM4Jl-Dadb9{t}HwYN9d|*)P%_WFZdsQ8D9u zJ8Kz*l2;vCmaG(+*0^0aV5Pm(fv>=o#l7+bD&&3uFs6+wubwtualP(($2RNxk^3*) z?^WMy{jUxGrQx2Db9<+Zul9acUit6B)2(kj^G4&cm9tkYJGcOtw{70vHj`NJZ_PS# zo|-vZ%~yGjq!g{riU9C1p6kM1zh=<5jTlYx1LP(BLpbaRu;fYr#$gt-<1PpAW*d7H zhXVwbh^!cnZAC!_tfiF#4iv;`p$Mnr61G`apz5NznKO~dEeN+_A0jlW$Uj2Mf&>;Y zPPkw)!6H4ImS8^N6heAYb!o3y&v806XJW&{For-78rN@V2M5g(X>rv!l29Zs<*ZT7 z_+~u>dBz;<nAlzrOmuErEts?tMmEyGliZT0^78mA<4dmcsU27Ly|(X-$L3uvxr)G* zO|Nar)ojdF*50$5y^dwhY+pyF<O#~H5NAGYeKo^^84_e-7)#BIF4`L=%~UX@V&~%} z^2Wq=L5Usk%_NVA;m9QC7+<uR8}D)eZ+9=#<Jt-Kc=tPhJ^a%%tU}|If*3(NT1&jU zR{F65lU!YiLM{<Eg$=H6bde_uM^71}Xv~<<wjeyhg%%mppj*ca!}}weAIbAz#vC?n z%vTL#8`N`Q^8lSX*Cf#rHo3U%g&v`Vxq<RENO%n!_0eT4VZKB$muaedkd!M+VS{K5 z^SUo6V;!WO#nJ%r-kQ`5(?jpMFkWyvObA=XcC5Lib@iI2czsA~J6an=N5(ctmLE$4 zCDy23h8}D#PIPWJh_0}0fKKyk5{}L89eJt}rMeAat7rnW6y|6T+gmw-8_e%ej<ax@ z83bRMA!BUdp8EA*!SF#H6bYF-4e;r;atUrPFcLi47YvvpcDDiej2?vl)E7E-uxz4< z{1!2x;0Y7p<iWcx{zEFiXTsbO3Wb9G6W;uxI;7WLgHwvhi3wLSk$N5n(PVs2R~PwY zUKoodX#-);o0)AqVUNk<sUgxg@Gk-I!h}ulP@+`}dbAxz46iyObbdJ`Noh&7lb4HS zCDNX%_4o<xjdq}Fr4b}1G|j~PeRMj4zfbcHX!^_t?_U~TIvnicBV(z&hY#++_<1Nf z)hfktgdd6r9hzc0fsQrp=7<(Zqk81@m^2iJFD4nMxv6fQ5K;D8RzQuC3RG=65mZY? zijO2Ns%2DC>`|t*Y9}qpk|r$6qHtLjanwLTYpyD1a%D5*@g%owGTW<{YU-~(Gb8`- z%tFnUS^2}7?b##CE^bpO>sdCK?Bz?1Z8JkZOlFVYb8s~c)8V<`-rLptvhI(awK-SK zqN{n{)jadmji$M+2j*IyyzT1A)if;D1m|mlvzr!bc4o^y@l`GQ_RsnDUwvezd$#PR zX`ya^)^^XrxqO!&f93J%?nP(QEoW2CU;q8XOYX`=cgHPv$E<JB-FeI1nez+ZKm3Wm zHhcK9nufO;{=6aQ4P-A)y^tN8{?5$Ek5X@^Zk)K;y3qdET-)Pwbx+K>4&>baxvJot zYg5iuyJ9ufI<jS$j<<2n*6_u>9-i~o-s5<CbFM~s<;aq!nqI0^U)8b^&wsh+f+caa zX3o=kk2BcIKXu_uh3D^NQZ#>9*Rz$IaUS$?zu4+N=r;c1aU0+VHlCo1L2voN4aN^z zdB9bNR}#zgV@|?{=@{r0ewAK<O(FH7CF}??&m<C#UvE>4152(4V7lWJZ!Wvb5qz`y z?a+rc+q9Rj+7=|^TS;SFf>Mn6TOcJSafE@_+(3@B3@;k1xQHLFI}^FrP(o%S8m&!f ze^JAn@aqybV=S>oiW1#~J__=w*pn`gM>mnYiWt4z)8;Wlh#NB;hMaui>4AbqDz*{L z`nUAfn*aJJEcl4I-*6Q6sGV!%GR6$tjROUVSL{J=_j`TS@_T&Mv>pw%l#C=}Sv6Pa zj~AYf7@9GD{VUxD%mkW`&BV%PQqVGAoyjnCBj{%xDCp`UPJ|b&kK_+mP23>*)Y1T1 zXKNB}S{lfmThQ^gh;5*tcZ<ky_BxAw0;iyXi#QoLY1h-o8OI=rW|oS4qp!&@Ru41b z2IxGtCW$WK>(+-e;*5hkfa|=-O`7S>NPD6!?TR(2(0_Nne>%0SNyX7*ToG3s_B{?< z%{o%VC6<Yv0%hD02iD82uUEz$aerkTEqdGHvoMY@>%C2{DSlhW80}#g524lQc7~xh z;MVB_qsJVA`d0?Yif8GBU-X`FoY^Oq>sG&5A^P;$t(l3{%N^nmL+@Px^)qII(*GS4 z@?CKQrN(5w5LS;lV*Y*huUL7E7yaD^v9Ykm-bh(|AI%`*9Uvdvnxvm=GUbu-0rJeP zNn$`>9k`n8Sgmqevq5lxmLg?(ec_qst|sp21jiNmG~&@QbYc(x6&n{fpbtXt6i*#z z6zZU!JNgzm#n$8JlhMLVD<Tymuw5}z8mG6oPA7jSR_UvvV`FrG$NGF2pZ}Zu_}1a` z;%qX$h%bJKFvArC<RDp-#OjD|H_9{#D^_ELYII6~rnCcm`g^7_Qn~Ib)an>$vF=wQ zl_eN#{*j8}To3U_pTKOt5nX^A(PSoM61jHPBz<Lut&BRhJfFK;xrn7u$0Se*ckfx# z30@&5>mn9d_4V5eI<DB4i2lY5P55QZiFI>3jR`*3G?Bj))*bAt%n8z#Bzf~bfQR4J z4(9n5JX<&+bg%Y}8wLy0DBAwTcB`?q``-Lf7uT)lnWr0vU(zonN8Md`#gSgXgB|Hx zn3byewc84&sdoMk?MtR%63dURa&%v!rX-cf&uy^pzf0ii)9-X&H_klz@1x7~`kwzi z<^2;k#y{M4fK`9hsG&(SVhyvNBATG$nV@Pd`lus?#ftC)WUH-7BBwLr0G%b)Bz>oM z(`7iXol1<-lfa^bj+Dr#=4AQ;oFyjd1u8T?A0JmO(KsDb*mZ&C_JTF9+42s$3yBhS zWwrHz#3~{&Qjw85$>mx%&bx$c&udLn?Ms#Q(@(!~eCEWDo_YJ3S@}PlS!~-q-?n?9 zZSS0K-<)e-ky?2p0B6TMwdj~I3E}iLVF2qe*Mr!slyU5I)MAGpjeCq5<1iM2=6(?4 zND><r*rJ7H?!%=6M;X97J>=eLyME}s*7xKa9X~$KN{jOYI!m;6;0DtQWFYhQ)WN_l za={50w7PhqwZyTwFhd-L;lilL^*x*&e79lDfFm@Y;U9;Mu00cc;ec$&ACUFCN4n3Y zE9Lmbp*Xt=4)w!~e-?vK?T7R-xYE8$C1#B;$V(~{E4B;TrI6~9V<T}o=CPCNgLhFW z+9dTt{P_hP_>AthTy_1`(V3yy-3yI7=c;zid3SxW<g3R)h^iW<m8q9L^ltbU9EjX) zzhjQcKXR9IuQ@jvuNvEoZ}FRq|Ixh3s2UJ7L1Gcy{vsZSF`J`!s+Rc03?gY%vqT{( zh*z-ERdZrwT;=*FT=}zgh^_=Bh+{4sG^*|du3=M3baX6%Fc;NvK6WvRgYu|yPRnc8 zz!Q~vV|F>Hdmnk}2)dc@>6Jv8kanY3{2Ucd;4@nA2cs^=O~PB{9nvZ4z^T{bc5=dY z>Z~v{9!s5`h@I*>eJXLfcyZbx2L(ip2r{lzQ=wB`s1wIh!l|>TPn}25NlJ;G&i90t z9j6HOY)MJ*RM*+l%vYjC1jr%jDSRG*AO>OoM43K_IGy+9V58<sFb*dq)d-TXi$>MK zZklDf!Pc%H$-a@uL8Y2TrNpr6fbSJCL&>r8Db-4ODSd&>mPsTjN$4aj)C%S@(86<+ z_;3_+m&mBpZZJs}Xm0!f<*En_0jMUpf5)XL%fbO7vFlLP63b)|N}<~EHGF+6rKnB{ zV!;KM^!!*R7|>iK7pa@?v9=I`vg%Y2gOk)`9b+Zc1ENJ4ee>OzH9_cPkEp_~7cNsb zw1N_I`<Q6#sttg-P$aq^WwTIi_=@IMv0jKtboZ}%ie3^8n~1?;X&Aj_ny&6!(L5}9 z_=Kjzj-y`n^yS$p@53HPq1=G&`o(V`I6t>QIo-EGBr&<POjoX#&wc+~*0|)UnCkw) z#jI&5P&2*ZjYQU&L)CXLe>eNxJFOcRd<Wm&G2Qc%m#@8ib9k|<=St61&)Yk)2j_eT z3GLG5OW8{d4W)Usp~bEzi)cN$+P3S)*@J&+|FCvj)^lg)?gj6jcf+$ouU(qyS*Yq* zC=b3H&YI`EdvZ?C<=vNeXLsjZ<(H3q|H$;7?2+59_Rj)!SDt(Qx!J%?^X<T67@f_x zXltCeHO^d^vo+qfb>%7=7AxB3E84Qw9PUs8?el^5tn)LcZ>s0={#W)xyew94p0D0K z`{WJdLiLVpU(Qo~%d;UDXnNg~3sk>u`=sz;at&>o_idW(Uhs8gX@<8vO-pr6Gp5=8 z+jV=VY<KF~XD%+(ZJn~^0*$Yi6`Jq4yeGTo>V+BktxJD?>H5W+#-F_OpI`dG_DkR2 zx_|Cos;FA>2BzfM4L7&{vgNk-SgxV_p4sRt`z>d5mo3{kpZ}HK&ssa?T}@DvjZ<w) zRdrWhdi|wODywpxTYqxq+L@aN7dsE!>O3%C8T{GH%VuMF1zME{SDcpWvTQFF)9b(G z5puOHZ*{)e`NOU$YtCDB#q*kH#&g@d^^Uh{+WL0g_3(|hzdW_jy!*Cy&mC{|XP&BQ z^X2co^1U2BcInEcsY`b%>py8}Uu@Yq-?H<@&_c_BDNoMVa?7{rPG#M6?>i&2Pv35T z>Q|M=K0$-=E8|n+xu({|rd{(*yKamvH0_@@<?5Pl)osqzZ(gk5K3~86=8m83cz@r! zJAQfMcKx^Sv~<o6FSK+|_vGrE-a7i`(OLKH`dtOw8{N0-ANiENGm~Dd-1RAjY<s7D z)_=RDchTE-_W;jr2rfU#bFQjIr+~jXr+{U@?P~bgUB6TjSgdHdRe>v(+UdvVYBw)) z{FZO?faM~;Vg#M<5uNWExw3{Ye|yxxRUYEM{I##=%U^r<d?}L^_D2V7{rmX8aaQ+t zn*OH4LNMe*$<GZYf|lz3?WUi%S_lTKQSuAEqW=-oFMLmS;N`#XJ7C1)Z@Hdrc>MkL z{eb^t>yu@8{IAE|fdAXw1-Qy!Caq73bY&O7!~AdS2al9mE><n#C92ykWUXl79dw%d zde_{qfF%<u)bV}JXWn#|z%@h};_+_BUw8ksla*+uOTqX+1DXJSu9g3U%w)-JPVqVy z{y4)3aBzPCqonAAD_-M1%y?zqJQDhAl79Lbg_j8)1DY{Q#a=UpLGn(nDTOI)h>gLr zbR4><NHL0#L!2W-w5HH0R1A@58a=lluqZtgmt`S=YlYM>!oVnqlwL!QFq-A7DZUC( zv2sF2AY39Pu((|+9LuckeIr$qSrMa9$t?~g_B^4bQ^|4kDGS?H1zRRYgl8$Df*B^y z3JIC%cnW0N;-JxJ@wlvEJ|-8VfU&YRC=g+QQ9Uq_CaX=3BKBaktsWo?@I-r2o2V97 zcsw5_cnTysy@xf(Pdq+cq+BsN5aUiEkg!0~3o#kS1>&hf4umyJCaj1=d?P6Y$QQ!` zK&1-gU~TTBg1;a@8c?$}+qENzG=&niwxHzb4q=s{z!(|+0kGn|S`PAd^atO|nxIr( z*>}fRwFGfz`oYVKp4NF!>w>2ZHBevUm&dc?OTN~bgA2Z3_TZ9-a-QIvEy&m%w<t^# zZ>15j!7>HkNv~uKmsmS=EM)pU=vEQFlD{!>M59`WHjLBn00Wv{3xLHfQ#_T%osu<5 zh61YhQwMtqkONz@iAb+&^Y$Yei#TT}N~WV0J&4xjCGlEA@nkX@g&E0$N9g>Nw+`U1 z<|G1i|1ZA-@WsCck?tDYX4`Tj#ZcL}wjhhnq9}wq7M+DVike0iodxX@sAbVv%U&v@ z=&a=muDXFmXDwG!Ek$Q72RMHXi_TiE=Bn!MQ*_pEDH81dE`+AA_>}vVh$L91aDw|@ zTpF`0<NN)%VlbC2v-^Pi69!0~|3{*SEdU$#D#=OWfEZ}y4*|aJJXky{70-Z0heGMS z#%h-W!pX^qW2txzDH>N}F)6Iwv1{BwK^7Evf>RmJ9oklt%J8DywX?%y4_>iG0v>C< z5X=?vf2e}&XOhMiej}nT_>EWN?;O5<@IBv;`{p+6{IGEsNXTz|f9D64Ka+n}^Wom3 z3`rBv`nefB=utnWl?dyvc&dy*9P6jbHNuo=%M#9=`Mxr%f;L26H0W2o5U9q9{=C3o z!r_>Be3cl5)MJ;XOhQ1umdGFoJqS1f5+k7i4Og}FUkxGJ5$7drjce#!wVsQ~#PJf* zjU7)xJa!JH!R4beDoGaP)gXoT$kc)KE)W<sgUC#BpE+UXPTLoqEw`L4xb5@!VD%<o z{%Ykj+ZUYebEftp6?IA$boF7@&%ee4QOaq=HPRF43gYfM9ui%(FmJ=d*y3{_$;4m8 z77pHWm%#PFGCkfq^1l32_!p2ZjvlBiQSVq&(+VAPRw?Pi`r;ys&tGH-^v?h#Y8rlp z;%dW%Xk1l?*m|845DH+#B~Xjz(1bG)>OSvQgbyNUp7=!9D-UH8fz$;BiPLd2F_M6i zAxSEKbM|pSx5w~L81Z~y{IhHMA{vt^#0$Dt?l^Mdc>lpTDNZT)EF!S+VNJ~o&z{=& zoSaUDhPB#I3FgKv!p5^>i6m~|<&f6<#?#L_B(j2}KLJqr5EJ&Wy@&@jt~D^OMGP|d zQwyxk>ov7$J?<?TrSw<mgsuNEWT4zCxWJ~_*4zHjirMJ0eCiKn58X53_IhgP^p;t} zf^+knW6SJ;>!UZ~H_!Z1TnG)!b$)xnCf@Of?otE%`-s`{C5|303v=@QS^FcV^+oKz z-sM)x@L-yP4ObGDq|u{}R(qTUS+M1fYWtThy6(qay-TEBpu)qpiUAu}?qH;%tx`@K zqkPHkSvJx$^yvG(AE#OVGqe4!8D-k0S;w+9u@I~WZJNU_Y!<`GX1a68-=4tc#N8fP zpKd}$a=jWS{-nV8&yx8DTTYXLqY3;YP~INXrKHdSuiRHe<d(HEGAKYQ!g7Q;$NF+G zBCg#tWQ~$x36Tto^)N_Aj0CAe;#0Z_pxPNXGGde5NBoB7?F}SkU7q4A(e#M6EYg1i z5+iRjGT=m520L$@_?3Tm){g(t`IWO9feUxdTwu>#L{n&V4Yo@$AZtdSiE<=QSuBg@ z%3<CT3kHH6sp&~35XpSkjxkJaGA+vVs+FwmG~zkEgi#KlQW5=I8nYrb9}GFz$<xRF z6-}z7H#6LT@uU{<M`0}ZUo_@I!k%OfoN7WcQM`-ha;n9<W}K4kq-|xQAftlx6Uwy` zAX=!leVU#3nDhZ&!GWAiy9Z87p8p4~>|^feB6sv-?#Lo{WS%?nPu!-DxZp=z$46ZA uM_lzsTrJ?oobb5?|JilV6*lslvdMdhGUGRWp0YsKe_jFMe!o^{*8dN-K3I1E diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-314.pyc deleted file mode 100644 index 4785b894ccaa787696bb382dd57a39fc92b69430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4931 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 I4>8mJ2lHb4`~Uy| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-314.pyc deleted file mode 100644 index 128b2bd08baebaa585d7ecfb004a39b44b4aadc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2569 zcmd6p?`srC7{{O4*}c2ulFP*(jZu?3y=pn5rXjJI{;;Id5E}`4JuRhMk4<h(w%OdS zvwJaVL5|uNhcDVd6(s1pya`xPnnDYqCEy>B#stE)P)hrvzDu}>zUYfSGn+FfiZnu@ z^J3<^^UORqKR)w3*Al6%1}qDA{xTM2fIs+0xzKe{>O)b0bC4n@poh4mM{=be>e3i| zO!q)a>LC6|S5DCeNXZRgMqMSPpbiKfNCi=cgbt>v5|FIE&!;4*7dqkUOzSswPf6!( zY=Y@=TR*EYkE92<-*w**M9o)Jx`b5$&cZqA=obK4?Ar~e$q-2q6)k>IrLsD>v#bDD zS}_85>lZcfSUsNAE>+H})U8qirs;h?(hH1gW?px^0Mp$(%T3FSFOYG6jJx;be#<hG z#0#9a*ofvjd@p;w%g0|=&p0}BR4uEsw$9F1)r%GzR&8c|q7S%^I$&D)Y`^B{hm4%z zV&%A+Y3l4yn|f;89kO!mZ5^48%-GS_GHHFpHZ@nzxFfcD(&$$m!_^Pj+Q6_js5`1{ z*sYmSJ(smuD>DX$S~I3)*@x|MuO^exayiT8b2BW83**anTCgg>L#QIVR(W-GY>Hg_ zY=z6Iu^DA1JKJ@8@Vm&;D{l*P35SEYCN6m4`%Yj}x`JXa#L$~szCygTGAcIN1u8!+ zQO=Ub{ZdLwOYPDa6qFdGNff%P0Bk8mH+p-+09DY8I3^$tD*r`M0+3ZW3^8aDHUr+E zO<<5C)F4Uu(@sH}tH-rmHa@855Ig=6cR6<Pi-tRdALmVNFpjqsKW{L{jf)FD+?Vd2 zrk;!^%RD)!kGWp$`>tjC{tPRZq>R5JFU&_|)}c`RmhW+YJkIL)fNFmF8R42WVuv{L zQz-7^G5xvarHRq64;Fe?B&yW?8r?SW(Y@%NqOuZzaNUGbY*~=E|5CrZs4PdePMj&4 zi=mw*3R{{Utp%Z`aSe!4=Y=9G6x+X@1Umh^ri+rV!fi0wfZ|TL3+OCG^%Frg2VDMN zUl<GF`dJNDNx~x7_)kZiqJULYTezW2Y&D6k0#;XtZd|xFyu#(w(5?JTdbaKM2j5&; z+J8)#Sv^jAHnCr#<wb}Ulp>QheS%$TOTD%0q*l<oNotR7ids|KfVMl$w&ISGvVfB{ zp!Om*(?<;}@A#Cm9oXsc2ZV^OGg>7W<&Ibr8pIiYh~gQDHa1-!zSnr57%2siLm$j@ z^O3|tD6!nwd?m7~V7HHNWWKt2QEq;;7Ji!5m(e@2svxWFFxiOW+i;gef26492thd~ zas33W91#AtN=2;xqjd1B#6T;PL8a!2;oo5!!xcM+#j+nl4cWiSs~bI2r*HPIaCxg| z=FDuz-EDU-eE-(ckrPV?-xDLAL+&Ixdl7O|l1&A@_{3~EO+}QYe(X(Aw8_XY<^~>Z z(aIxp*}A#d`_85)_G2#()0I4@yM3OO4W8L<+_<Os0adV!2|%#C4s+c`z|9Dx_n=*z z{~(IzA&uD9))(I02)Nh#<|79dLI;+k+mUpEcaY;9f^c+V+r*{$>V1pyzDH|yPXoRW ze+vN*BjBAd8AI_yxGO~GWQuYwNVpDh-Iok`0e9Rsa)bU~3H~%0-;@8Rg69nJDjDC$ zGzcX8)Dn7g#LDJP{TSoViDz7q127#B@*A}L3@yLQ;o|YjCky030JHgn9T*@V?nK;# GlYamzpZUK4 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-314.pyc deleted file mode 100644 index 89fb2eaf52a0ac1798c3e9a6d7baf0c6612c4d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6664 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-314.pyc deleted file mode 100644 index fb5663817fae7691b3f7409020b9a34af12e1b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9438 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 VeEpoxDxTxde8RURT7f?X{U4-5@y`GN diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-314.pyc deleted file mode 100644 index 565e4eca42beac97cf0bb6e5b6f6d357a3b4dddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmZWo&1(}u6o0e%uuT(<DVVCIU96y~CNVUWHi}S$qF8DT8hTi|Y?4W`cC)k2&eo;} zDd?f-#e@C_1rfaXpA_{_Ry=vJx0VRK`erx5gAeBIn>X)ke!tlpXHyA4`TFIz`H=wp zlAEC@1EW8M#x86?l{|p^M38ByDp{yTvS6i!QjN|)E_Nh?bHpEc<Oq}5hSk7wAeWRV zt_ZIFGOAsu!G^N%8lZ{3Nq9^;q)IeA2}K(=hMSj$KERg${6z&@Mvi2hAKx-8kGg)G zQ{iztr*PTGkJcHpaGrRJ@vb3UIms3O)xC=L)TP|jj3(u!#l>6N3&uA!hqGt2AzZCt zF|S!ST$(p+Q=oE%VOf;tOWImbbeKI?D(hu^dtqLGLc5M-2&#*&qpg^A%{2whJ4R#E zXj4~nOsA-CQM<`_k(-T9QFqM7X2I$CNnJN=n+ch#^D!Ju!sCW0pF)acPo#Rky&wJX z@>rUmuLhnzhCxHBp~$PA!TkO@8WPuQgOm11fGkp09(X#W25DHvb`GhLR)GA&QGgop zlxdiOQJ4a4$QP`W^1w!<m7V=HoLv<is<uq-3e{$I9v4+5$|~b(2!0S@85j_dQb;70 zc-yTcRFv6}C-r(jOhsL?d#deq>y)dk71W`IElaJ+x?wODs0OSKYRJ@zy8QnLm|95e zTrA1_F5|;|9P7Dfa@x!hj)34zcpN`|EG#eI&#cPjAK;Hlc68Z*pTm8?$Q&BGaGHT+ z<{(-)7%zN_7WU?UoX_sX4#(2p$0iTQC*G`_#2_>ACl1N<yV%>?2hj^WiFvEJh#wa{ s$F$qQgAA&Eg5WIdIC7`Unw~}P@(jjHwA~b{;|L+-CtN;_Bk@7_Ul*?4SO5S3 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-314.pyc deleted file mode 100644 index 6577a620e04b440d0562ca92e59e56241ab1a7c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7688 zcmd5>Ur-#!neW-1+5haqB0yS!7<Mht+JJ;WmW*Us4njdfLec_Da$Z=Eb_bYf*&WZ! z>Ywwl=OlF~vCqiSRY*lwCKaa+UFE8*imy&r=c}@FcU6A5DiFd#b8=a}^F#awLM}xw zSNDBAGs|L0c2bpx>#FJLp6==XzOTD~-><u$@t1iBgd5j>Fa75RLjDIcR-h%2S>4DG zQXnHF#vCR+jK<Vs+IHC1W7q67Z9mNRa2nU+&>THZ&DrD9Ts>~hT~De=1BtOUB*qQ9 zJM2conkVLfFU}g0Dc8I)7o^=Z?Tb~!ypZ!@F2iVL!~R&=p6?KnK0-(>_US(y=qcCA z>&b9AZ8-q7%R6jFyB((7TE(!pfsAB_E1+-B2s6T1J^wLZTJ2VQT5!0sfedeeC)fcN zz+k=Wq2&mDqQNh)Aj;^jLyC~nq+Ax#Y)X_eQ4ZdMs_E=e31ZiA8B2wX?&=p`$&1;P zsJl)mIW3pUWm4FP6-<T5>OS})fa!;c#>9wb8*ym%YLbJ2(Abzw<3<?G0gp3I+L@Rg z%m#*!v6?$hz{s`;K?%CkW8#Ij7qjR2+^O%0DUH|01&vROqf%B>c_GV-P=Vj3=2PRm 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-314.pyc deleted file mode 100644 index f275b5a9369363a4770b647b73d966b2d9460c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15761 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-314.pyc deleted file mode 100644 index 3bb8c5a383999e1829525223082258e6b0384d48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1438 zcmaJ>&u`pB6rQoYUT3rUv8ZWjs1z5fQVWtL>I$_eLO?6EpeRb+bT4=_a=eqSiGMLO zTe>~1L?yzZBHZ9l=#hVg0}{Sa#D&~~7B#)Wd$v~!7e?C8Z{EC_`QG>5>^t*w4Fcom zpZ*LPCFBpBOov$+lh42ylU?G{Psv@X=v_@|E2O7gCa%_jT{x7!L}0F8Ag<A)J^kI~ z(vR5DOIsOk?JeS%$2fJg+}I4I%IiC$jCXyJ)19D<E3w){CN9i<AkZU<x<qNarqa)o z6zC|USL>4N)YUGK$imB`#ZGmGGK&?XSgGNPs=KDLx<t*mb)aG8wfo8s4xX%hY|Ge> zB3ll^*iIjDVebvYNQH?V0l~EZQ>@Y?8raBeVgqc@G3k<B?Z#6=`ry4p?$H5t>3#Y+ zX;ZjEJI46j6kH8O@|=nqOd)e~KNYdB@;SzW$d|Go28uC>!EcW9r?)=v9!M^v=l8i- zzj^aL@2gZCc$rAQ;DM4}5T(QZo-g@on1l*ID&Wt>>bkc*QiC+PzTROS_V~v8Y=_5L z<SWipoOzq!o+m@aS2M`lf5@emg;|?D;z>UhZ4m~8HiM&rgSBjwHyQJjBvrVX<*yZ5 zt)2B@=g4yaug2t*Xtme>Liqk(@tJ_16w0B2qf)Lp!7ZqpOV2h5s`aFGhbvp9nVs(2 zC6VKQU_2)d%?-(;eTj9rD&_%m9Rl;2k{6gW;FEL3*(WAhJa_cTv&V-Eq6MD+RL}rN zQNb%<{9grK&DGl)@G=CRog1KBEHLXWF$?Huq6r^?cUGk<h=~RCE&?D;`369x&@xK1 z{A23`KR>8qRuV*UrUS{ruQ|B}1`4%3ZN6y)e7kh|@>W2|LcERbp&ZzLVk1vGO+ZLn z4R|S}ea+7@sIv`ST_|fOY0MMoKIlyDtZjk9W*Gu`Ex`@qB0!PX)k<(9gA4LTsW{q2 zeh6do!fJju`|a$}?O&{mMM?t8yyY}<i?PIyv4<Lr#c6*Sp$*;j<<O6+l?BH3Lm^cZ zCOk=Dxz1QW4ZyIV=`$|WNSsGbmjLo5cq-7AVZeN)M7TFpTtaB;%wr086fx$|vN)*U zM`dm5cnSjkyGd+;SKk2rUk&F)ZSGWq2A=4|oIgS9)Pgd-#9EaZ;kGTOmYZsng~>yK zg%Sn=KI`JtBI`1`=uvB<%=km`HiRG#c^TkDr<DFi?B9*q!&_f(j_KcKgDxN5K59L? K^OAsB9PuyOyh}U) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-314.pyc deleted file mode 100644 index e5d36abf7f9e8f90a729a2ba59182a984c3dfade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 zcmZuw&1(}u6n`_j+1l6^tKdf!vse*>ZPK(+s%Slk9}x+4sZn8d*(B3;b+fz7OtkGO zhzCIg4+>rd4|?=Jse&J@dh(*TYW%>PZ?+o|^uc@c%e={(H^2AW14DyZKzsT8llPba zd{jSrrl+8L2|))ekZ=_&QXyxEBsqm?g-VL6R?*JrQqRE^I-At%l~`XbV(Ht!%4`FF zlTXTNQW_Q=g}kvco}KerjGK)xkZehsEjMr%7#}mkz+X1of;CMqFq^F2UMOU<c@paq z&sP!jpJoB$t_*ntn+N5}GUyt5cLqZTYH*cK-v(&n-Yz&#7Kue{%&eP5ZTbgmV<SBb zP*m;dpH(*Q6Ycsn){wEmnQZeQuT`tnJdHIWIahaKH^zL(TdowUjXm-06G!X|f^lKH zO~y-y4^P-PLw?<kc&G{qyWxlJX5AHR+zUL3K}gs486Pj%v&(WZ45mtDr|c|EA9Chc zEAm~*9NCKOb6(vRo@C>Z+qjNI2|MzlqH}`<&5#$l*H|n%iXdKymg51(af2X~>dy|} zh@B0h3ll>Jeu6=!zNqkEYE3OqDyxN=S9^~qdtE#O39kw$Gtfr?^zJPLdmx7;>>lUP z8*7B@E<q=g`%kV$#{QB=L~GQdV`^HdMVhU+Osob2D6E=h>4PYpNxhujltT%Q!a>a= zD4mIjdx13NA~TuqMoKE`=>>EDzuH;wf`xq5`-C^F^#3`&q7_Q>F>Q%F<;kQoNy)s< z)obGn4u#9OFRdPDQ{c3O(DA@N(=@qyQ=CaS=UWgDpo?P|J|jcl3>X}~d#ZEto!<X` zX!G6q`|W!{=k(j*?T^Y2cX!Ud*Zc2Wyi>V<`O(VL(be6Br}for>9s!jE2)3$*m08Y zi~Ag>88&c&NsHO^OYyyWY{=yZAC_n^9!eAG7nC&f47loNy~zznTVb>9vl+ev_Y|X| sh+$15gnXeI(Z6SbZ2btsA7Iy-0d(LE8F@iQeoz!gR|C59t3pY^-?5hfiU0rr diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-314.pyc deleted file mode 100644 index bece4f9ac7c24dfe93a979dabfcae8b309a81d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33574 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-314.pyc deleted file mode 100644 index acd27acdb39d5d089e74b9e7fe7261d8d23fc066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3136 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 S7Dl?^Nq1;u$noSlhx9*sAI+}- diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-314.pyc deleted file mode 100644 index e9f2e774e084a03f1662d339b2570e0f5cd20ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3925 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-314.pyc deleted file mode 100644 index e77de5a8be2e6ad2f853f10e7e7a0677fda15f15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3706 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 YReoTO9efPRFH+mTWILA2Q7)nW4fvj;k^lez diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-314.pyc deleted file mode 100644 index cc061c1ef500529347e7a1b0a705d16fd25528c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1954 zcmZux&2JM&6rc6(I_t&xQVR%3$p%!wfjC6CD5MAxkPuWAfhDAsYG<@wPw+PD9d~Bj z5)PFsRs9ebj=A>8u~H8`_D?`fMAfZ0RK1i-mB^@Y?0dU*oKRNUw=?^G@6CI^_uiZy z8ng*KzyA1l@IWWzFWmH=Y<JQ52NrFzOkC{-xvnW~oa`qP#LXNeu3phfV26*&RCL#v z{g{wig^)4Cn>UQ>rZUG##hf6e6h>6GGB80Z7QAL9Q_7^jOIrE`Y)_kglQuay3nvfs zELE<O+vVNfvA5r3-_yF*o3w83IKj7IKgVziTCC4sx$38(rLvnX>0E}r2fS2>(p<=X z*--ic!ht1aRLmuEPD6%5%hf@S^s{#jHLygK<(hC#HXd>VzwWZA#)MZ5nKukX%tww_ zl}dQNa;lzWjvsnbIxAc_h<3ydTo!HnCRfZ+bx(m{f;oY7BJM<t)f~kgc3%M+RPZ}- za|U5f5aDltw7@;60O{A6zv=`lju+Xy`YD6MWvkibLV+4gUOU=p3a+@%!=iHy0%P~R zMl)n{bGGfk18xEtL{fQ?&rUVgXzKAy;-#N%VJ<<Vh0i0&Lso1Gh^=o?ux%fEquU?E zfHl^ja{|OgtxcB5a%T2x=sNg2Ms90$&DHK`pFn?t)TT4Qvi=;qEH*h36lVofEfEzm zv7y$QEH<i~hp@{6zYR~tgOnyj)dF8pD$(><JO1kGT=}kKLY6%!)y#zpXUku3v04Te zkSbaBL*A-kwWfk7P#_@pFl1tCrhIEn)p>MorbJ8h{_J_W$bc$OF{&EP@`pjSECa=+ znx4Pv-D9%c44TvQb0`lN(*o)}?N$9^b1lwO>O~P(Xi4KEdmE>?TR8$T%W)8|+T<n4 zn76d;ME<b2m3$x9(tQUY#P5zEu6y+6J6B-SCgmROWC>{Pjoka%$plQuy+I^>d@pWi zsFC^y=dbqqs^5cq8w+#n_H@6g;t@(wLA!kc8C%^y6y|cE?nzH60d>>;PznnIN=kL& zgcyP~n#)!-DP*1VRWKj_A7Og|!{}lHM4P<Gl97XtT2GFi-58$vZFu3y@WM|Y{e1VA z4>sOgcw#MxQ9wN=Hw!t8De@Xv51Y~kueCy4L!~}zd0|&GOzBD>qzZ$GMI6)vl-9Tp zi+xFa4F>H|69+Nu{SY=3IPfWE7gSq{NdS)S>Per4Aq5Tua8D!_=yH;>FkzVpoDu1O zc=atLvz@U_YwK;29etU>R_N%k{5M%9i6kbNNW%*vbQ~LtaBJ+j^?Gg4IRIXF-Fah5 z$NSDrrYzR4aV`!4;%31Vhv6%Zpcq5(4hjba0@8!AP~zR5K$yfFz9D~D`4oZ57~JiP zbr=GHgP*2}-sAl+DaG!j6tP)~3IZ3$QKzZcOs<mH?q5X7VX?OIS`4vuF)iICF$K1m zto#zhmab{qGxFAp?2vX#dvxao!SB{FV&uPju&Ez<W=#HR<sW9-^S>Lp?<XHEu3y@) zCpV4L>Gt;e(1v|-(>V3g(9FSYf+9<D`G;oDU<Z*Jxa&tZ>{CyT!uBCz98MVc55`OD AdjJ3c diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-314.pyc deleted file mode 100644 index 0f0f54514a5b1dccf8b6c8f21bde566f1091f2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14985 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%0DNkJM> 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 Jh>khM{tI{r*uVe) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-314.pyc deleted file mode 100644 index 496dc0054cda7133208dedd15ddfe85531d6332e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10269 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-314.pyc deleted file mode 100644 index b8bfcf6640160c104e0b351c645e3ad9910277fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5254 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 Oj&n~(z9rbR1O5jhP)oA_ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-314.pyc deleted file mode 100644 index e64457f39da593055582a260cddb16367e344e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14412 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 ZFJ{F%a5$*@vkmWC%hw|&W-TXM`d=SofII*I diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-314.pyc deleted file mode 100644 index 759e10c14108c0f1399c0c0321baaf200f7471f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6489 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-314.pyc deleted file mode 100644 index 089bbcc5d3f8752e6387b096c6f16197826f70f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28722 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 PJJtoa)+<)={|@|LN94r3 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-314.pyc deleted file mode 100644 index 7df4f2fe9c18509568b577ea07908afd6dc454a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2422 zcmbVN&2Jk;6rb4-+ueM)iAYOnRHjK=u;My#J{mWzszMskBB;PgeW}yUW<7DX-Rzp# zaodDT3P^kj$=t#LDcqU^68%pM5)$l%NL=VG!HD$8oAIW0DoQ10wQt|N_jcyZ?|sZr zcb9=+{PgG#=Y)pP?_#n)^oVJsfmuhlP##}HS24#|6|TIB`p`*~SB|2*I*-TIrY%?V z+8|2lkHs{lgvNDig_h>36_<v({Mb#yCXN0=jW1ws!5;I7<2>TZEsd*3kPka@?Kl$8 zyk0<KSnTH}@+#27<Izey7U?vp(+}w4kuD~6@dLVqTrnXu{80W7HwuV%<PGq@BkY{^ zU7yV{2R!F%!*k1&Fj`8JGNaT>6U!@+MYl?c?XOgPk9s^H{t~fZ4!>n=48Dn13<X|s z&;|i=5wD{Hx~1ekL8t`Me)K+G#(6x8Z=zv5h_;l+!aj^K%B#%V!l4>)21v%1e70io zu*)=U*9wA?V{_9Cgz><7_~rCe@kT&dP_#;vWzU}<Dc<whonnRgx2es8qV4+C(xMg6 zvySI*AOW{rm$I|j;(M!n+4sh><L0<|KX=ZYqbn8H;?(3TmEt?jVli+yJzKHtJ64$n z#fnoIHt$le<g;Ps*vrH6$R=+>m8q<Tou+Adp3lV^W_YX}$xOQ{3BCs}0eP~H_K>QN z?h5ktto$@UjwFtP5ksUSAlBJ91&l!P9?V#8Ma|;^Bt{o1D3Ypzj*2u?*9Oa!6Ar<X zPLjw;;&^0wc9sNu)uovb4~FW<=>09UrG;8R-K9{4Sckfdb*PCr2O8{oh7iJp)1kUd z?}vvE91JAgpbApbxt$p5CqE`${!Fc1`K70~HdYI2sg0S<!Ho->{NeQG?Rqj>Ph?py zSpWZIVF~!1bpS~ztV{6Hg=S7jPuXE1?E%sUZwu_Wp58@31laIt`2kjP#DP8+>`tir zf+DF3R2_{2*xFh_R7n$P0672Fo1~eu8N<lSY!0RjfDmA3Q{)Ygu<~NlJWXh(oFNMf z10Z@mJ2H|U9ZQc+Or!=D7Ba?~CZr)whd9NKfM4t=kY^(THqS%^BqF)?BhuX-k-nN; zyRmU{V`gJ=^W^50&2tZX>dB#cVyK10e)&dehZ<9`*ngETl&~mc`HrdSSHL_PqOfJG zAWR~WLVd~gE&k%5y$Z$w0U|3TuIEIwa^K8+cY3SukzOB|___a_6t&z2V>!e=GJuzX zX|EQj6`U416Ah@EgL9~-cKw(N!By5ipZ2}GlyQjI(~jqO+$ZuV0a>K{9<)X>B70-@ z*_g}Te^c6~o4-V#c}NAq#RVZ6C|`#DN<7i(TxX4zWPVgx+ol<#EFItWFF!XKjMf6- z(F0Z5Qk;NQg4ckoqn-BDNcPrleDxue>dd$AJ{<qy^!FF*$;o<RvW4(|Vnhg|#wA$g z-xFgPiN1aT5IzGo5wEoIs^CTOutUJGV}gjpVaI`_p!oyDFHRHTiA?h+pQ4Y@ZVVY+ z53cUU5yra)>P$X(d$&XI-KeAc!L>h=z{}G}{H~`u!-Q#ia8E<CHcWHHFI8Q^LmU5~ zYPpdnX_`w83%KjRZRdkJZki?E1||WQOa(GymGukH2LutohCOY~eyQpS+djCm;9hWS z)8f#K7pt5GAO_2)mzqso*ECbO*~<jjmz%9DCKeV%9(N8HIPN<7RXY#eRv+5d(%ah5 zw%)a;z%9~HQLKAMa61NYdkS>9NCw<aZzRh-mF4y(0hf>ALfPNudP)mpe6`|uWd@am uWa&x=nu#Y3<#mv_*aYnon*clEvh1`wD#rLXbn36z0M6B>{zmYT%l`v|K{53J diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-314.pyc deleted file mode 100644 index 6f4256643495ec1eec7d2047e8c6163804fb8103..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9863 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-314.pyc deleted file mode 100644 index a764b592852b5303283d3866c2862f921213b29d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137996 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 Xu-0<2Lm%2B6LwiXo33BB%7Fh5XAaOq diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-314.pyc deleted file mode 100644 index ab8c639f69e08fda921350a547ebc775d3f8bc3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2860 zcmb_e-A^1<6u+~xJNwB;sq7lq%2FzJX<;G7hGJtRh+VWG4hXSsnGCxFOglTX-nnbR z#D*A?*2JjwrHN1VNqMqOOtcS1`yaHW31p&a6JwM&kf!LH=iC|SmQsE3Bzx|;=bn4- z`S{Jbd#Ji9LV#{x`$G=}2>BH!TLg1X8wLyuWRl3jAjt|$$oiPCiA)NzZ&1wonV-wz zU?3|osfnESJ?CvKR1uOyJO5xX8)Bhsn1!<u7Rg3gw29P{W+Dd?M3zqbyG3^ki^;(j zk`ArnH0^Ujua}r^nX2JbjlDH8p!8=4`d=FyK9Lrj*sJBzJk#iqKBt>7j}B?7U8Y)5 zGg;d21p6)1whYaw_5}AN+o_f{v!GFR%FxE<OPUjN=dxy(4VL#j=Y!`H*_ec>3K=*} zm>?78n~X3qPAtd=^UINOas)DwAVx?Qf!7)W3vivE>mWj-mPuSAaZQkGf-+=eoUpJQ zhKQq182w~a)y?;uZ861WwbVJiz-Cj{bV^OpZQoPOg87X8u4bmpa&bzdXpx^)shWqZ z*d38bADyv#BPpPYZ3iC>Ki!+^t6a9G&S-ho!FRd$9@I^CIAwWt0Q)g;si@BB#d6Ve z4NNL-PNQq?jUB0%wP_XdYNM{Fvm=rhAeZ<<lHi9)-sk~#Tv#CEWYX93At43OCdnJZ ztRO>bWpPw^o4`*v+yI6i$$mMI5g~Qbst;67<YACBjEVsF-;t=s%G4ZA`zYS!h!77T zOPaQ5QDsh*qT~(LwhMZmDT<9p?O$*%^!Mi8v>}Z-6|mBE>{w^+oJG&(O4P#q*txu6 zl?zj<t+nf>&VboWH4KfmcjZRr*{o$A>FQRxmARgy%9vIx87k8hRxIUC>QgyeXIgtn z&7W0gG&@()OBn^KSg>e@>iOABehUX3rFkc&D5_~%4EHNed>a@YmHIkx+CB*EuLZJ6 ze1XPwWH(!mtl@Y)dt>y6Auiq=o#0CwU`z6tjxEBtVIJCe280DNQEP6kkcpJJRWKrx z7P2S|FZyT=tkYUxY0>f9nlb%QW8=ZCt*x{kMkk~wm?H4LuF`u~$32gM*#cQ<IPh`J zN`1p85&ASJb_Yr;to$2L5EQb+VG*R&czqDl34MSD`OL+!O+zrFdyrxOTZCRi_u}j+ zU>*p#`!tT)1TYlrHefu-!N4oRIzhgYNUe!nIP`)m+zThx1E_HWsZ28>z6H~KAB6p+ z3F00nBOvdjY49zHYgm{aG)EQ!O}rH2zLBjaU15{MP&w^>HtfRicTl%?Q@2;_k~l7m zM0Xg$ba$V|#jX8&!Lu_E^PI5YI~j;Tj0l<_IVn9a>H@_tI4yDHaKt#Va;bpmcE47! zsGCk0+KV@buNS*@+E0_Pk*1I}19PhKv$|1Gyn5Px(6zR<rd-U`Dhhr|idTEUUPC4J z9$n*w9fSR=P>nT-#A-k7{iyeLbl*x{{Bq_}=1#2nUb1C5*?BA3`R(4TW8a;+cIv0Z za-V#wPhRR8T}qB!99l^{bNT$G^H&OASzlUL-(N}$EXM}!#0LJh5#b;7wfFT1H!?!s zQU8t3Ajtm{y4`$Wxp`75P>n#N`+@y8u$#cjeij%9wuIdS7>6~Eh-w(`h2!f17$3(p zA`t2w+V}#5C*fIx@&TTGBb8qR*dy(Z(rq02a#&nWBN)~WY9<qPaKdhg_U-~C!#m+3 zFW@5Y031T`Fh`ux7zg6x5Q`Qc{-byTz&wjx0k*xy6MP&ldjww1EAf5H@wQv>wy(Rt z>0RtyiXXjr;^%ntW$Sb6%FOrvA8W4HEXA`IqboHHH$x3P@3aw48BPnU*fP=)?5(C+ z#FrtWC`GGKHc*B)<DIf<cq=uEGObga8M>*N7Ayx9rC{aZ3)u&U&@{3PFsB}#KX_;K zyrMEj^{Fz`Y%t$b@j&J^!%&p8;I>I@6fe155?eS$hTYWdk{2M{bzdM5+N_30=udo! zHbdAI*Ld69tOGDTK%}{m;pX9Vl_RnFl5WoMx0+(%o!}Ywj~+#!IYBS2ym}S*=M5d- zecsTyFC72w>F!H(+)dGo6pMl0+bzJ>L_rYllD6MS^DiXzyI6bIKfL50zArTjji1FH J5E%F&{{Z^UdRPDe diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-314.pyc deleted file mode 100644 index 1db804d30ef7b677953810f1bbd441bb4b7ec3f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12227 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 Rf@&oqB_-)#fl)0!`M)f}1KR)q diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-314.pyc deleted file mode 100644 index 06d65aa1f0604c9775fe83ca0368080a2f34fd28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13601 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-314.pyc deleted file mode 100644 index eb95744ce7e37cde623e9bd1bb3babd1896b4e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10946 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-314.pyc deleted file mode 100644 index 29408af0ded4b3ab61b5e26de2429f3c34f22a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1722 zcmZux-ESL35a0XoM{LJVLfbSD#ZFozOvqOgNP++<aZP-wKaPuI5%tp3+1?~a?Ym=d zoiur=kx*NSm#S211(oP)-spc4H4%bsE06$*z9mEm@y71i*Pxb_Zf16N_II<tot@!m zX9&>o_|YE*Cj#&*n|On78^@c}Xo4$1;Us`tn!_BO^AevCun=cHK@u}Q?92GE-<^w6 zAQQwv*Y-&rnGg=ef#UB4N}w0ix^Q?kq6B9?1)xeZ=m)FeK`_<+A&ukCxnHv5IrHU{ z90?evW5Wtg@+6S5OvkE0(!UO|wq=-AYs=9pEvL2yb=*MEp?iF?Zo(Qh{4#<VZ&x@9 z#y&RK@dWxE_fydXC2)nG`I4qXef{7QZi7=eg&(7dB!%ZJmiQ?~1DW|<z!29gRM)Y? z(1ys3)cfkP1CgWZRfr~LXUEko3td%hWPL_+cGODEYE;X*14j(gz*IO`uhk$LnNa0z zykVJ>6I0rhc5UW8tqALOO~+8fbz99EWz{h-9I^GvRec>gs%_X~+9srDMq|jRY>ZV6 zeciMiIBIW`h^FbLX<@cqLs6O=yI$utDw^PL(8s-d#KdjURmao~Dol7IKn;3+@wiOS z)dZ@?)r+gKfyy{@M+r=|*W*C-d0y`lZSFsj+)1S3xA_v^1(t;dKL#57$9({NKB@Y> z{c_N=PV^us2_8b3zw`zG9bf?1qAiqw96pKjEH&a;GUMQ-F$mOd&s7pVTz1>j?UMI= zaatAshpz}~kB1<i@~jhmQpypah!<YuP7B+2j-EMAKU*+BGO#l%Bg4cAJ%ONYA)LTg z0&l<shNy0sdM&YK;EhBTmK*EqhPj?F%vRkQmbr8Ga(OjvZW_ok>yToUbY$q|TC4K0 zfopIl#43sH_;84DL-}MU38u1As*o)xq{CIkw34F_s*qjI<(EiwQC`vHIVGJhYO-{Z z#1@z36&j*>0iB*BE9KKm#Me^6e1Sz!&<MlRWTmj6%;kvaqDPCx6}p_0=ZeyNHcet| zF6HUkT&gIQ(&S8ODOI?b)=Ft*zOa<mvW0~ODZh{mBaw27SivDyUxc?D;-_yOnw!LD zGvW}d8zQV37_r(VLGQrC?`%65){{OGXm<t@^jZVypa`0&*P%m1rieft4*N%f4b;i7 z=zC{Zf`;kDeMUE_(FDImPk&`J7oLjYTMGx`si(2w{n$t|!{(U-@${h>?e;gNqX95F zy&sz1U3pl%+jFn)PT&2huj7xyiQScEYA-bXqZq!K`yzMu&3nl^$p@u}sc$duO<X$Y z$sUNgUs`Lo7av^v?)o>^_v7Px0~6nO@AXXnAWr@BX8?p}+*}{U=id=YP}AzVVQN~k z6D4Sd=sXpqi}s1pcApq!eZr-YoPF6n+9sz(wafCES7L0|Mq5<(zPjkPR+oO4DwYuA zlr|vtG*OHRm(bt`b*tK_!H>`d>SMjb8K>e<;5hCH=y(ERzk~BXgT-gyt!Lovzx=dQ Z9nJtTa%<;6==(_w-N+mXKz!Xr{1>j`qXqx~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-314.pyc deleted file mode 100644 index 43f7c0905eaa49d99ad4ba88503cd51cf5bdc218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5011 zcmbVPZ%kX)6~E8#*?u<0HW2<8NO(XSa6?QINJ<DxK>25rhSC>@Y%Ao+v0uQ6vEBPF zDWFaB+G(Xz)=;U^Kw8!8Te5vv`)T_!Y5Te_BZaK=by3?*l~!reV4%_N!?bhmdj^ws z?X)ZT_}p{vyMNC4oj>=0zuZfpz5C8z)2BRy`~^G3=C+xQzX^mC$W@{WF~acQ5fh>g z=7@?+j7m(3I+?SHToqI?=8C$RoAXjkj(V7f^UjzzTE@ya?~3`N<*c0Z?wCL7XZ|KK z=4i7wOO+AQh-=BQKs3mL(F#@(tz?xj$Eoh=s4pIl5LQ)9nu+SEC8~F9Pq%1|uxc(X z1F3J!y)CU7t5wT;zDY>xHNO7NUHq}SXo!X2JVXt|>TyrlD+ntG)rzO#=Ga(ZECiCu zS~AwqOvcKGdn|b=Z6@7zx7+?IxGjOTs-AXO!))(ZVE7xQUt0Xw-r{$#e-rFNhWo!b zt2pPX(DMe|=1IH_tatj0Gr#=%t3s&`i>oz(K3cbb;p$IuxuLLRmdC#}d{#RhJ$w2> zZ0NixKbvRiTsDz0otLw~nC@rNOs9!VSTKEqQ~4R_Tue`=v(R^6(#I$DECbegiOpnm zWX@iEb})8dF#Vc7nY)qJsGiRxl6qJ)-KTR|BbU)lzs*=%8KzIwvnidbx-peu$<lk; zY9<?qiUKH%2`XWZtCdVt1tzHu=2XR20@rX4<<8=Mvo%9Gh3~9fn^D+Af+^X=q#n5s zmvx!4reROhOs}R*=2BA`<b9g<!c-z-j|4RBdYT$6lg{ed91OcPEtN|GQ>|$ROR#iO zOE5;$*QS_mXd11Avu)t1&6iL2j$Sr&YK$h}K8KGVKQ#Jcj@}&2)7%X`$&ArtCO4J3 zmN4{#>1>(-f%P&OogO?qIy}QBa@nrK-CDOc-E&Nf>yw~3rfY06Kl)7i+Nc3`IG9f) zZzjfdV>F-6cWSplZ#mjY)5(cWe&<MjhE~8yIKgunP9Q%dk0gbLit=3=mOzSa<EKCp zr8=%*VhzcW2vIAZMO_Q3Llsr26LnrWLb?RiRZB9m>INFj2+TF+=2DqU!D%zWqPsAe zk9heAIBq7$JY3@Al5#Hba*3Zy0$ft22AOY!uyWN2Hm(9}p@mI}>C<cqqru;Q{hI0I z7q`22hLQ-GB5Y*fao)xVkUpV6M#xo1&kw+>K-x&26D9;zxFkFe@eU~G;NQ{ZDD@y! z1R4IMT~bMPc1mz8*Qe<9riAD*od&vr>Asbq=|q;9E~>LBnjH!|P0?VKqBST)VM0;w zrjK7}#F`v-n6B$NI+<W*xuzvE3ByRGlMFD28?+QC`T$}zk<I1+hKSrszCff@)&R4N z0U)0h$QG$}9$!cDvA<%?i5(XSR=<8}@yYpbKMW{qZWPI+vVO7SVMW`T2fAxs;`OhW z0ml)OECK{pBrf=Y=6oCf2Btu+1hXjR?TV5uYMop;l(i!vAq`{{zv69VS7aI?+3mIC zqJ9i55+^5wVYJ#~El!60kBOi=j8K29#YI)@ws-F+-x-{8?ChpGAQHk)A)`Du;w%?Q z!D@}9iHvT4r3!JO*Wn{a9K|R)A*9I(aW6>=VQKa^1B#K(j%Rc`-XtdyG?9e(81Z@s z=(y4ARiGg*ly)$FxK|lMK6l-kAK}9sFiJa*wa>$>4uwb3u?{6?2V(fH7?Tw~JEEM? zuO}c>8VbuPL%FOD8>)%4q1#*9p|DqpU55x*JYFiN8`(Cd=+kL~MZB}Y?Le8t7?e_m zOcM6cW>5xgLDGr@6=XU!yqhUs&}Yt4nxj0tnDWSg8XFjjUoypUok0wi3_WxGu>}mY z@qTC)d?5g1<OAsXi_o?D9JU6`Es(W+q&jrlvszt$+q+u3@3wEvA$p$vQ)u4;d$VEg z%<aK77x7iSTeff27rZn0qrrtI-a5E=@V)v259$xxJO8%2T;KE1*K=oZT_nDy&o-ST zShq<8SfMhs)Yx$^em}ZYe{{L>*plzqnh5fL8BmdsH!263$?uvQ2KvNZF$B-gW5|AB zzBY!CPQX=IqzX)?dyzZ=<i0>5jgzp0Vi82!fs{Hm4WslaAV+ZoRl%Lt<9uSB09ou> z!@r+(@t)<D+YSbk@p#-V>wqbc(QQW@5sJWtLkY8gP_0~S<8?AYZ%*Zv7t?G)NrF*z zBcIEr0MW`+Hl56+bY&aS#x6)>{4GKnd;n4*e8ZRFvDkpsQo7Nh=#lY=(h}7(nViyV zOr|sXOmA}wV3h|&8?5koukt0USc@oj`CwS<gL^@uF8U8eyFu6#lNp06n=7>lHMjk# zS#BZC?qW_d0$fp>dq{BKLTWkCx+J$+YDLu*)rTtPmRErJD$92Yt>nJLvN@WYq8Y#5 z*!?ie*aL(cTX43o6CjJN{BP$tFo8GQ%JK$oQ6MTLvtfIv^bZ4;DjdP8$T92g;}%g& z;bd6go(WJq4ATv~<c?2*ZfL1bTK#^USPi5=Rx9cj_PiBZ3@w)5eQqhxwj{Uhobdlr z7(D?C|BsqFjRz^wR6VMwezA)G?VJN<@rLICZOL}k_~m*6lL<qhl!Gvto&-{=5-9lq zm!J_FJ9d|!!v}LgA%Utpv#-uB$)TP7i+ZrrB-!|?kYQC*s#A4!qOIH<KBhZq)yNc+ zkm<H^fI%_&@kl}uxxC{1dVHOOsRl+BjxW(UAgmLltF_9S$e9BtEaoFm?Ya{s)?E;3 z#fEojMP25BX@T^(E54B7(l}&)Ga?LQo%2`&E8tp>wPJiKrtE1_fQP0ETOJkD0!4*~ zC5jaRH<amtOarEYB8%rJh_r}idLBs>h=FI{&Ne})&Y?EeY^8!dYl>NCx16gAWAmqQ zzfBhj)Xb-Ta^v+IciY};>3Y!8_4b)x4ZbtD+;VE!-@hXFf6lYoOWnty46p#yj0b2z z0?NW8?+7@+xYPkvB4q2Ku%A}pR75mI|DrWOOb?(elVkX#=tSWW6qfNqa8ifIL5kv= zl%7Iz2FV2^81v1Fl7cY_@mA9S**wi4Ci{8rrHwcp3GQZKN&ML>a9uNav=I9!ShFDC zZM)aA6zDEQw<IY4{(*Jl+7aTa*m6Mj*${zSLvE`E!qghZsx23|A#(LwE`-lNIlefE z_(u5NnoOj#cpQBGWu_*x2AmAR9S0GV$B=kZJl}$dH-rvqYXh%n0WMC?!IAUu^cxY5 z!-dAd$c^LzIHD?y2oUZZNRLPscrJiOJY*liharL}Eb+&|p9?=Wh2B{QRAILNn2yLH zZYL{kC{~5y=^NLx`gES2q*vesm*K~q2$8WQUw+WucUStYyfhqt&>vs%G|U~Ii_e{# zZ<&wJpL^(OSZ?q8+(5X#<WYqApd!F6eMx?C>s1MEyAOtWx(c_zt6;`3U2G-~DU`ys ztcQX1PC$1t-8ZZ^H+A!#VZFF5kKlO2*95!@c$^2IL*nH%8^thX`2}j*iXc3A?8gs0 zXQz`oFEFk5BF6@T(yW7*WyF42M$k(l*6|Ih{<mT4Rqrx#l<6r`x~apRAdqouo6bCx z2h0>Rde)Q@bo`d-F%q|QZGuf^xFIaK@W+kZXT8Z!(h1lLp=<me2vli;@B#6DNP3q^ z?<b`B5ovrx>K>7%N93t37m+GHluka7PC{K6teyYf!$4cXx9Jju=D9Q!enRu6+$9VM zbI)wTqjf-7%LqjB&CRZep${bgC(@xu(xH$2)eG?ze@o#!aPP~P@4N0z{c`r_v%mPx zN_*e3e0jAxwCNNBuEKeE9yxulT>SpU`L-3Q{(ZN1uIo<Et35A&cm9PHcipNScux*J fkV6ZtZ?!MB-#z^1fj`Rop%9fr>wAe*&+qylT@XCg diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-314.pyc deleted file mode 100644 index 2d5f265592669c6d40e3cc70fc676ba1b75ea41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2066 zcmb7_%}*0S7{+(|0c|Otidq#iAgDwEiNuI8CdPQvYKq<#C)?doMz%Z4%oHi{V2ttH zqyK_O{|`?dn|Si#(FEez_no25CQX{!gtyN=vrK>c^qsdiCdNw+yncN9%|B)w=NDdd zU-?sU{2jyxXVzJ8YR-A5=I%I~S-YlP<7U9krreBibKvH8+}^!e<Botkx|8X-IpY?< zEvD|x8@B}RSjrtSZW-M1lsjtN32-M<Zo#-y;7+I9Vr}M%vvMZrJ|n)nrx(W;L40s_ z9PQQ|oq6TzY|YiVT1Mw<S@^G9r~F97N<{3jltLcOKa2@OMR-gCyFx_5q_4S%*S<Q{ zuOpoTrLo^&ly*v#HbmHrP?ss)Z~D>c$|R+)xl}shF^dH(k5U?n0K_b%O2c*m^|h9~ z-qcJ{DsupOjMSY^kM4Od6_d*ILnb%2wr+XvgxvEIDc-U`D=&ydGpzfHt@4;_D6n4? zF}b?oJ#Xn<5#Qd}q?`2c?j8DqHIm5JjOs?>J>hjvam`i}KiKo%Fy$pYS*Hgq4uxEo zJlI_~&#u;zmc(u_1*1I1zWMC@%w3n|u0K@X`M$hM+q%_F`%F4*g}z!dK~yDvppo_i z$MJHiTX0czk>>0jxHuG2u@7m=AZ@o|?H}4UxM&>m&R3-Fhf#~X7P0|f7YhgR%^)9^ zVw!Ks@}WNz-*_Ki`6*Y5$8QYO(L_}c)eLrt32YG0S>(Zj>GkruV0q9Vif6iyXVT`S zp^I!>=WSfjhQS`;3eL`fAMt@%okKP((`mK^%ZC0?Y_olAGgYB$(9m#V>)kf1Jgeiu zL9$qAB74h&!n=TgSZ33JS1cg<LjhL$0LPyCa<7@#;4ayV|7|oJY7$E&&9-dW&>xCz zu8*zwgdcPVp#g-faC(G93xaDT<O=3VYfx~P5e~~7iU}-cW}r0`*FqoHSXDfX^mZT_ zi;w0&5@j@j;mb^TlI=IS9DF?I5e3Tv{Pm8*HA{znb*0oPK0XXsg2UcUKr?g9!8WJK zw5@3k^BtIHHT&ZDwmacr>lE(W--QQ~z$K1QwGZV_)^**JjO(tnw@w^*J1MyCe7k~r z9`$njJ?drDmG(W<71WFE2=yZBr7xFJFQLBLzKQxO>XmjGwb}D}`{rNJc3l4hXdR>H diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-314.pyc deleted file mode 100644 index ad169bde48a9ca8e8b4f4f8c31e7a4a44f16504b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4725 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-314.pyc deleted file mode 100644 index 0b66bd823f7f8632328cf0d380c4b4ab69b29fda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3758 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-314.pyc deleted file mode 100644 index 20bd6713d41dcd6bbafe5aa32ba7d43859185304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11237 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-314.pyc deleted file mode 100644 index 7d285bf81848955a0493a75823372340b3b26f23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6601 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 K@9)z-;QtFL7HKH} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-314.pyc deleted file mode 100644 index 3f34b3249513586063301b9f467bd6949a62cc1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6683 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 H#jE{4{+fK} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-314.pyc deleted file mode 100644 index 9a934d3f59b332a5db2039891587142b6e6250dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25340 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-314.pyc deleted file mode 100644 index 8547c14db36fe1865e5cdbcaf4d69fd5b3954dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23604 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-314.pyc deleted file mode 100644 index 1de6220b0844e093fbb25a492f74cc9bd6365d7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5594 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 SyGm+z><K|=*(M12-v0$DkFHk$ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-314.pyc deleted file mode 100644 index 3fcba5600da2b6ccefb5ae8139b9c70caf1b1257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15702 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-314.pyc deleted file mode 100644 index 9d2357767dc0720422eee6b9c144e5cf4e3d86fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11362 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-314.pyc deleted file mode 100644 index 038dcd451ae97010acf120af90542be27801457c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7497 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 Tj^i4x_kKpOT}z@)V_W_QLKMcW diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-314.pyc deleted file mode 100644 index 1972709d11bcc8aa44d3acb6270b2a2e86444144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8195 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 Ezj>0VnE(I) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-314.pyc deleted file mode 100644 index af4c18e9cb13ce05f2f1fb714153f0e5b5425f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2483 zcma)7&2JM&6rWvt?e$0EKp`PCZZ?=EaS;iDhz5u%AeBg}Doqy}RjQrQdc7oD*1PWP zxYRjWZKZ;GfZpKN-kM|o1pWgkw9r*isd_25M2-mRsqf9&i9-eISbj6}=Ig!Rd+)bL zy1SAD+Rs1zZBIuC`3ooQ7H<ujnnXy0ED>FrBeN2hW@Ro9;#{7K%tm>1knATzM33|l zJzA6|;T~*U5n2Vbv7)lAjTPg1eClID${!FiK$aw3ol|EMJOMXKdSWg)o8qZKQcMkz z$?zh=lf~phe{0gw=}A5HHrR&kj6|iHT#L}{Q*cLe;q`E}Qx+3DH&3=s4-!3%zqXY) z&xyZAj*yYo@nsn;w!!x-85BR<btaM}wv_LBio5c15IJ{#Cg?UwK4*r>D;8hz%6SRY zZr$v(qXiRbo&~J|02c|Dbi(B&g-3dc2XOOfQCTD>Bwg+!j*0*~J=>tf^eB%n60Yh> zj^ty3vS2J*Y_;#a;ai&N7{0Gv_Lyd9Rn(7}=xWPd5`{6o-#iRrT56C*vLsJ^4M73z z0Qpc_k#y;z^a+GmkBrMXvKD;`&XXW+dM>wI9>kc%Ys{Tr1JA%y@H+;tRSX_<Q7T?9 z+a{;f$76>Y!B;b<3m^Fw^9x4VViTuM9V=Y**p)(+d7oM)_Y0=u)ygHX{iyBQ9E8se z$FbPaiNZo1Fmz8$OwvjE#nef9$*NQxgIknWs)hIMQo*;mb+l@jSHM%hP_?V$^mEHC zdu*K9=E`^oK(!vEDK%Wz<9L<^dj())ow@`V>toJ5Z;&mbDCrFpw`bO|`~F=qYr--y z(XDnvQ~|eiGX{eO#0}yhufBJ2#k;Dt@X~Cz6^CT<99#BJCpBp8#Zg4?v^EoBt8q^& zSz6il!OOZ;9!t)zku^Dp`j&H<rQi(#>hLhz17lFbJ3%sZ2FGf9$CrfdgE8v`F`rKa zDy6PbLD!R%R=je}!7+gHS<P@-D;Y{J+sx;V?OLt}%W+D}o=GXgoMBjn!F~uUU}&4v z;GEf|8n=Adxu+xWrsX)4u1Ty14)_SrSz#?hQV~MIg@YiTe*>8P79Dz`ytX9+%*_ai z?R$o!(0V*!!hgH9p>NKDYFFXx*(sbC%Z7)A6cvR8oaFTIm>z2tP#glL2C0j6pIa3H z<mw0{tFQ4DD-0XNFU-fX=D9-ci_I@7t6{M0)nx_6C1GLZBMcc>gq5XXl$TjIDi9wS zXK*Y)3=1hlaW80t10DA6%3=)qP8Lhb@eKmvwz-bo52lz2Y<Fcb@&WwS=1CYdNTJOY zL?>;UT);gqv_+}C3eHG@QmsR}03ASz*_EotfCE5@6vX=A=&sa_QLzy0-Q|hU2_Fu? zfd=_K(|>E^e&*1_%;>$$=#PE(GZS~!iO>NwvTZ0PC>r>`NsVE-vn~*?1e#$qh3(tS zAS>Ao0s@%<I%EduUW#eDISN-G%PzEyg?YQ}APAqGkUNGT`@$@PdTnK3&9};0sjdlt z$L8}AI|4WS2h^}cdpZ$CQV{lIVl~JUHGLy>J$3WKuj)WpVl9GT=pP$Ekwx(aia`|O zC9Hj>p%_AO2t;RPA4Vk#WF;SOX;t>bRuuA1B;QsHV0yNVmDrB7R55IqQb?cfig5*a z-SRm#4Tj&%IIyDcIo2f@$9!IQEPp=V9Yl<h$uQc2mx36tS8aD$R87b+!W`kyG2Ar) zLVUgOE_NJMZ=p)5GTY^XB10?$r>fH-J-)-HU=zm7_d%>jBuV;%<Q|jW%~(Q8Uz^z^ z&}|-2rR>c&Hwkp>y(F5xw)!B_|2R7OII8{Gz5iRgap6&-=SKE=_Ez~?_F*FTOCtA3 z&D`j^-u0b(zjye7I<gfZ$;0;&xs4Qw9^6X81h(Bx<o@xI6Yli)otswfOsCFwCH@6` Cni5w4 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-314.pyc deleted file mode 100644 index 86da4d133ea471905b905c50ef19b76fc564cd3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6637 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 BbK(F1 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-314.pyc deleted file mode 100644 index aadd31c5f4731c5c3d62e7d3250d3de1a98620bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14547 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 SV<LU{PmZs*5?wt-^}hh<+P-W6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-314.pyc deleted file mode 100644 index 8ac6d0a717cfdd144584f02afede5e7801b8f1ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49615 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 N2R3Q{W+M;x{|EXYv&;Yh diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-314.pyc deleted file mode 100644 index 09d09a679adc82d638a34f25c231ebd40893443b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88784 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 R?tg47Mme?0-?rBKe*wH0k@^4t diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-314.pyc deleted file mode 100644 index 7fb30ef30d4a181cc397a3501aaffe7a5a9c9c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12232 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-314.pyc deleted file mode 100644 index 5f41d0c4918d0bfce16739771373bc7215589424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19836 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-314.pyc deleted file mode 100644 index c87d6a9844e9a231f41978c464f65c6ded0d512f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2116 zcmah~&u<%55Ps|3IL<o1n$V`CfovP4t&_${69?K5A=)Uaqe4~OkP5WzYVCcA*V*i@ z-g{|r1(FX4^%#ju4m}{z14vwuIB?}Z2r(jMl?o&(L2s!-l`AvPb{$of7<tEUXXnk% z`{tY3(asK?fNcNpj~lcQ@)zDTBvxPS=V4JHw@FS}AX!By*_eoBRiS1zp$(!vw$PG| zi})b9rJbp7a#{%)z-Q`0Yc?SggCwVkwp>de$;JDK*Dds1E36Z8oy@fjk(B-v_olQ+ zz2ui8tzdHzsW+&IIu<{^K5xxs=jX02T)UD|qE?p|Je%|Hl&CXDeTOnT@6p9_NTV^^ zE#9TfElo~MPflgL5_kM?DznN1XW0$!1{93&D|vji<SZ8ycq3jY8eA$|`xBrlWQp94 zUHF0!2W$i6L#3$X6ce7*Bo{Lq_>l1!WUoHO`>4H8q=i*0$d_nAL~%yNI`dO8hJhn3 z9|RucA72jGnk_iK`Be1f+>H4Vr;M96oaFq)ixcMEfUTM#3or;b3tq79<ZVvJT;CO- zxUfBsva$2#^|B}i{?z%5m9aj(@Rqem*Fw)0)Dml<`M#Ssxhv>cXct!P70S)f4acoJ zfLOrBnOi81!#hM!2)uMyj@m8D_WeNMc8m2uZpaPZ52`{ANL-0OL-kPI!@ut}dAAQw ziG&dsD0LXMeFirbVm9CfK%0<d>fpVjGzhbD5@8-BCeW}ZOF+0+_;tL(FV^tGLfjjj z!x|XwvSIs1trEtXT{iO6V3IA=G4f?22LPm_1e_HXmKAl^SB1dmfd?3*)JS)^gxfFB zNacb>two#LLa>y=AQ2)<c$yu7Wz^wvs}>*G$PhOP;4CaE<li`H>)n`r*jr5uACOqv z^d73+WY5Oz*ZtMxxdXLfdxEyDlT+1XX0KIiiL+h^@M@->m7)KSsX0|LRAcSn9_fd2 z>;waA1BIllAq5BP21AXT@?eq*Qeh(e1SsS~pK|UQst2d{@Na8)THZFZ1wSb-2r&Uv zXwH#PIb7^a-8qbzFga=h1b9){22Gq*EWe34OIaeBI>8zqE1yV@Ls3jQ<Iuf9lZLMY zh(I)~q?Bf~A!2qlt<5|_bxA!*USvy5EWMQG-cY-F`6AdHAo&3Kpm!;D9g%xUmb6CZ zgXHRGgqTMg4mZ0Sc}hC}JO`8T5S2w>*mWW!(U8gom<O)EVl=pn+z%P$)E8-8zr<Gf zjBbE5OK+U5mwU#zWQ2hLPZxre54+SnbUi1BSUp6|IAbgpv77k1CyZbjR)uxO-8&Q_ zyqrv0X9+kO!}Fz*(Qz0;>G}{#W9y~s4JU~RT}B0a9sRL_k#1dCxO{m&w{RmHX^e)@ zfh!b76ttoyaNw)9<1nOHs)Y^UHl#+>EqnS7bg!U}1tFs(eow453iHy5x|%>(7=`1| zIV};At=uNJ;|`XBCzAJ{!=gf-_mGwgPfiVgGrXm}wyPi67}+fC=&5Zz_2ZeJMs_CW zw<qVZfoC4v+ewaWCr5UB`!@Az@6cBJ(C)D}HcQ`*RF6&HPyT+?`0CbueYgM3&3o1U zk^5bblKsCX(~sJZJW3qjNeujw7}&IaON>29c5QT4lcQVOsO+q3srD!iDMPj8H$@(u zVfri%3O<cK58<mJ(PM*XM?e@%S0YD}JkWPU2CL1j#Ozw&tb6obHU>`EO?(K{o~kIy iA7r9RCLWU$f2-Y(wYUH5c(0;AkHh#s=z*S>LH+|D-QC6j diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-314.pyc deleted file mode 100644 index 879268b289c71ba89a8c615faed47b0087c73fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmYk4Pfrs;6u{r?wo5G(P(&{ht0u;VKp}tuCB{T!6b;c8Iq1S<*qyc`+ue0$D%4X^ z68$759{nob+{BX?y;*D2qi?!kI?25Gy_xs+{n<A?S}FprPanUD_jrCa%JIq{LGKDe z2e!c__uwwk<UCBm1#qpi;M!Yc(a!9&<>oFyCI8*16_OU$S(67Ftt8}rW|2wjNa@WX zF#PZqXySslwsYD(12KltxlLFgCO}xwdDqs?Cg`E;^Qq(Vx`?A!)3<p|L|m0wS#n>q zsNM>hL^iMGxK`E;URJ*3Jeu_h#xmQi9Bz|yZw<vN>A)szTg!(40p6a2N2Ecj@R&S< z>y}F{qs<Xp18fg)&TzkSQ(8*)Q_@cJdm_+{)M;>0Z)j|XEh1g9Ql}QnCevw&Qa@x$ z1;W>qD&u*vlOEo><~>ndDvt$R&abS@d3&+k^%5CB#~PLAhjA;|VT#X)NN5yFvoPdx zX5M?)){Qt?m|vuebbt9O-Qdk6WSUdmOuPqT$5TS{nS}Yftj?8}h@?ti@+gR9RSLgR z%^EkGw9^qvSro<EIMZ|@>-X&7rD>sBLh<)4yoRm=h2euc-60^PTgdo?;UbKT9jtYS z4Ua%+{NVo25^@h6;RCE!3Tc7T2*(7&6e(@SK`S(j3A|{r@aScX(wdM;hxoUn7@vnI z4PqbR<UmffR%EUwv6+~-@F~+;ik+6`Dzp6GZl8xCr4=GaO%-M;Zptx~(hPiG^vg3> zSY8J{=a&B1nD!fxr;aVwD|YJWb|Rv>G_#cXP8jOj80WOGnpJc|PN8Z7snaNa*o2TT RF!jrE$oRXbzX6ZF*FQ9E?qdJ| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-314.pyc deleted file mode 100644 index 158ef06be9ee7e551ea2dc3576f4dfa0b3bd908b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8914 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 E0W0ZYe*gdg diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-314.pyc deleted file mode 100644 index 18577c494a6557e32d676285ba79bbf05a4328e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7743 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 F{}1;C{Rsd7 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-314.pyc deleted file mode 100644 index cb9db11d25b2929ae39e1ea22a2beabd579d4a94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4467 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 Mx%GWS?BhrMFG5lsQ2+n{ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-314.pyc deleted file mode 100644 index 36d030950be4c484407be3f28658b254bf244736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3154 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-314.pyc deleted file mode 100644 index 83e92d1e9239692f13447c50305300bf4cd6eaa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33732 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-314.pyc deleted file mode 100644 index cb45d4769f2e2ec37cab23ee3a195ad4259c9db6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7083 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 V6Kw-x@R$A4Kv?`$xMH9w^nXkv)qVf~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-314.pyc deleted file mode 100644 index 1344788fb3deb9d48c71287bdbbafbeefaa91d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7685 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-314.pyc deleted file mode 100644 index cd304f4b5bc8932e01f5efe2b947bbe38302f6b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42095 zcmeIbdsJLknjd=V1w~O%1r+aB@dgQj9>|jQejB|IT|&riJ#Yz12pIu=s<18Ww&|Yk z2_D;H)V7ykGCe{`&oavNjMYicv^sb0jr-m^ozBgyl|rDQTv3*lo5@O?<la?koTw*R z$-Tet+vioq0pw}V+<)$o*tOqhzrMY{*Z$7>>@1gr=l+lW{lL(GB>fu-sE<?eEN!+( z(ztX{3RsRx5&E?rwX|C!)=Ki*j@sJo5j*?sM;+~Hk+k;oNIHidN1g2%kqq{y9d)&5 zMl##o5qEo5B&$6;lHKl!c-p-YZ+lK8r#&~4i+q+q`q8|0U&P0L=h6K3f=EGoVWhCV zC{om394Y4bjH4y(rIFJ1vPc<+T}R8?D<T!`m66Iy>4LpV3S<V{fviAwz!UJcrHOt- z{1<XAR0VRjSer}KE=p3QI$uKm+(Idk*Jf36)?6s#SRZ0@)YvwqP^9)kZIz^j>NsaU zau%pLBlQ7Gjnq{5IhE*Wvcxk6<<XwrVDFU>0<K^rBKL<Pk&xVEjXU~AuZ@J`j=|wz zUl^(Ba&V|`U?|e$jNA4PU60!j4fICh&ZEd3yfhe!+fNLH5k55%85kZ44#w?W*GEEe z$C)7n<M!TQID$&jLb5z8hnwti$HC#jVL9&MpU$8h4jrbXcqT`jz8;Q*uEjG@@laon z+<yrTN(+R-ql1xnhCI-FrAH2pP%8@#9X_)E%!#g^uET+oM?3bP=;>-deDZKSt1Bd5 z8$dg{u7s|I;%Pm-{5ogPrGDYd?4jNcTpEpp!f{VeI218PIC=&LhF*$0dai{c!MNje z<oaN!R~cshQ6@xM>Oe4vMR-AqSOQYSdNDs@E0Bh<BqR2KwZ#%~bW2+-0b8Lo=nUB5 zdLwBZ<KUPyj!6%sN1WYKBqQL&^kl^CJqHFNV=epreW7r#JTMX&mi>`oKjx+t4fO~8 zVQP?H>w*8$K%^yZgWC&;km!#dJN|6=TdIY#%Q7x?OBb!%zavR~h%J-8X1QVsSWa8c z0d4}eRx4g@|C~A&PeV;TL&NbjITRU{hdS<9;x?LkOv2@1`C2d%&+6&v9SnxUeOLrN zJz*+UJs$s!gFDWj35VqH`Cwm2-t_FV8_&NoEWdPqL>|5x>WzfY_YMw^_FW2wLmL3q z5jf#UaBwgrZ`gFc^LpgU@X(e`Z9Q#0uWo;)rz>=AWH1;B^+c|XoIf#e>3nz~6522l z?0qTN9}1rz85n8pc^Ru?SZ<{S(aJ;8GIBlc?&%2*4Gl-AY)?FghO)&NMKBgFh4ZU% z>4{`<R6ZtWI-H=NnFxoLkSz78lS~2fW7M2W)$m}?v2<ISX>66JTN+Zmn0kz)^>dm9 zjGRmbFmm>AXz;RJhX9XOeZ9OM{<yQJhlT<z%~Dz_g51h1<QSJ?dA_N%4|h)3f7>ay zASP*!(-FaQ+z!u5b4>Fq=GnNz1nh{T`A^z+T5V{(L#8DYw+&yqDp!&(9li(vTCPW^ z$tF|FWH+VQFAWb5Hd*B+idhFoSq$7gxtU@&z$vE`O6F0wIed>LI8)ma^mC`{Zo?m5 zVDC>~{b%<7`3+7Koiz-yJ_+xjA}nW1Cw^0(ZmH8aaY}Nt3KR%8C~<vN1O}+Zo?3?l zP+6;%i_-RfNvct%Tc&q*U}Vbh%X2Q%8bicpig<>cZE(WWpL%un(|dXV)R=s?GWi_h zv7%y_`^@ac%!;|piW%QWMYoF<Gn*DNn__tdH}~GyJJa>i^S7UWkhkG(&RpK+sC)CL zo;)5ic@xTZG`VPT4F#_e7`S?Rt_}B%4w4@L@{Q5pppxS0>A5^0ha=eVLPNtyMw|ME zd*R6dU=I#Q!aY6m7E~zjfD_M0BtUDR*RWk8Z;oL<=nV}H_Vi%o^J<`R-zOFWhFg-! z$;V%~2F|bk4*K}1efy)Fg30vpqfhJrL59O8X;>Ejh1Q1X5tZu2pY{+`(X;d?j+70! zM&E#2q(I~pwqU{xaDv+|S_Afrwt(ZJJ&<<M5lFw77I0on4`f_)23!|20+|<G0r$ns zK-NWfAiFgylGZBWoc3I@1ib9#1ajcdWj8O72fvTq{6IeZ1?(0E3gIsb6u~VH6vHiH zw=_@+e;K>wfpYjO*sTmy!tW1M2CDF{8vknWuQpKA>NseLqzCE(^??Tb<>1eQzdZcq z<F62ZMffYmUn%~|@mGnzD*RRBuLggO_-hK(x90GHvyKm(^>pA2S|iR2864Zpu^T8> z!yH@}G6JKV+QO-=T*jiMXDVeka_Xj}vTl@pnaghG)GaAxvo2&;0Xu7>Wq~K+;jl#u zdpT^?!Z{qaY2jQB+qG~WhaFnj$Kf<BoX_EOEnL81rxq^caE2Bx;;>5#7jrmM3zu-% zt%XZ3lyPs{xVKxA#-f~4p5c^jloF}nnC%?%EXP!G%npv($ua&585gR6`Rxkq-lmKa z=h?$~_EH{oCe+_ZwK607IM04#o=6RsKENplDJ4?NF^4$jFvrw!%n^=xj$`UMrk!Js za!iBL(_<WWoZ__iH!5i-IPGLoT9cC2!D*+G($*<yot*Zyq_p))T7c6|C#5wjX<eLl zCMj)$lGe>>XOq%el(Bt2Wo%#Iyk9rw)%w<&IvdLRKF4LwQ<*^>Ha03Vae-4W8f%Pf zQqp=j?Zu?D%{<;gPPs%WkuCJzi{mLR?d2SONoCuV7KJ$NGNlb#B3lEm1o|&L)2SmS z0_5NZt^@{Jt^CHTT;?S%V@0X$N?n5-e@&_D+0-%MvO}C_nDS_&wS!YeIOQ9Z64}Wy zGQ~u81;UZtKy>#6>Vajv%D6@Fb?o5#{h%WlVHdb<i_4W7<?kIH3WLT7`-d<4g9w3s z@Hf85zb`g5BkB^6!+v>qbf`~DRnUD-M|99XG<xk)NaiXu{J+^B9__v23Woich6nqa z{R2Qs2YUUXNN<ZD^n;FPhy7QAFNgeF&_-aF;T`_SmC$v6Z*a&T8h}^!Ukdq$hg^*> zzSt#?hF+w%4qv{EM!t9?I2cwUWIvEoKjHC+?-(AUXzH%qAKu~e<57CXl+(F`)J-%n zB40pd3USr6!_V>54Q<>ap;sd<{zIY5K~PCyq8F(07Oqkm27lw1tyCY<6|2UO`5Ord zOlsfZA)*R-K+(jNTh=#lZROIGxLRRlqE>vnlD=9MSS%r#aG#Z1p=Ie?wK127WL&Y9 zK0l`q4E3*F$>tSn@m~fV{d6_Sp_f63t=z3XznWvU;Q`F`hJu4DH%Q44T77J=d<R}y zxh=H3ksi4M;O)P%>HukzvC1Iz4Ub+LyzbYsuHLrGGEn4|JIKka*AN=&9gusm+E-kN zYL3<G8ODsQz7*9QtJfnIBF41YPhRX6CunJ&37jwkVprU<DQ?*uw`_@9+Txb2amzDt z%eJ^>d))GD+`4&F+`5(iHsfzg+y;=0Tl$FV8|;f)F2&OXjKwVj@eFOi<Cf95gV#G) z3DktmU>}L~7`MprbY;=RExqwHG4*jvIPTKQ<6WbufrmcsR0l8aRJ$Ly496Y3O?Jf7 zRgR9GUKF<z$0mtFCX(BRzoq-YrdFbmi8@xPVf@;Xd2vZpv-L~lWvUzb?MXEd-A!*x zj&+#ErkTd3o5ng#V>3)+U8b>_rm=3**eui7Y|~heX{=X?wIz*CjuK1bLF1RU@?5m$ z0E@_FUWE)Mu_Rw5=L|Wg$vI2T3*?+5=R7$V$mt;`NKP*~A#yI01BzafUm|A^PE$Jb zIOJ@K$bl2LVY$lNDVRYHaiUk{eZ+H_cbLS0dJ~1hd$1Up6>`kt=(0SP#7~;!Et+;r zhi;#qy857~>49fmB3-07rQDL~y4#N1;ThM1lJyUAniCl!#U*(PZ$#c5N@R+#TgooD z(f97fM3x9=OF6~Uz7Mk#9uf9RzOv~<AMQ!yh;S~w)Bf%oi98YZsrmCoxPabV`(Z_* zP=t%raIpxNsQF7pxJ=3~pYHmwBT+8G6>9yJBJ7v)N~haCY)Mp!aJ3q)5#d_uPx#$y zi8>Lk=l)F}yq!1I{^1)Bvg;o=aDreDDHM`Kv*X1dAl<n{80EMW024<?emSJ(2Ga(7 zaVz1cBe~s{%P3Wb{3p}9bF07*QmH$X*H}s2)|6Ztjfz~fzwmROmIXiEwg4uz+fMFI zi^g)|H$gUF?RKn?V((5{A;sC9zCwz(+qpuDzdK`vlzrW<6;j5#GtE;1wr=+dDfaHH z6;d4C*(;=^b$eDwN#BxXm;=nFGNw|eOZDr&>ewE(^nr6$Ch2p~WiyO?CZ&;7Mvv=P zXG7|;>#==mPOBbg$m!5ywVa01hMZ|8Ih}f(A!oWCtJUe%;|w_s<+YrC)0`Q4td?`1 z9%rc2rN?SH$MrZv&P+X4%^5I^u_341B&Yc(WtrqOjIp84Y?GXZF*fA%nB+8!v7S?3 zXD2NeX}?fpa$o>^5lUBAS$B>G{jT%0*YMMwV_2m+<a^Z>*^f9dm~+%{UoEdsVt?`j zzNAx?&ABD85|jtb=UmmV|ElkDOPj4HEdlWFhKK{t5ASZol;;QKP2fZylm03J3tdK7 zz}pEvx{RwHHFBKETI|w#wT{M(j!1q2V2L-mI+9Q@J5uuSw-kV5E{3ABSv=>pE%!W? z<0lyf2w3$zEVi;4Pyj_hp&i*W9RW=imQRFf|F7016Y*O0bQVIFmR*Cxy`a?hB%Rkc zQ7BAP$nv6$lQ^v{aDR972WNhGaOUd|DmQ{<jffwg5edl$6Us?i|1WYa=e1*~The=? zE(C3{@aEKw;nee(Nh)w)Y3$S*>5c_Lh`4JY%(68QZvt;|jF5;G!!Upr@GvOyr_7#f z!Iwgcc(i84;m|YjXb|^(TzXhmKQsEn&|+EJ{j#>ntx@-hKdt*G>;LikPeSuMP9Ves z@i~bjKPS=6=QIwVOTd{vr=$Awy$3u}Tx#+_%o+q|2Qmbf;q~-|F4J^CZY&q$Ju->H zfOw5w6S5T&tH>lGk?CBJE67QQ6SrRphOa>8L3BXRKp(2*2uIJ*=-^;eo)E-P|G#Q9 zQGNxLhG~J<*QP#xvD!$063<Q^Ud97wFfij%Vx3giG+}?o72DW0VP9}o{AW9@s6?7n zS^GQJZuI@A^xm2IO$U)9Gv;sjd!A|gkIsEkIKTBMVzM4qRzLFkrVd5D{+Ks!s%_G< z=&g%->t^=HyaiKzQE&C4w=wE%ocTt~TRh`K%A$9D)VqGRD(20f>WX@+l=Mq_{-&t6 zX-1BD3#TGcZ_T22UDUg7)~biOyiLzf=`-P&w`8U^>aAb&wnV)xvs?7~IlV9DEt;`M zy|s(p4N>ogSzl^6QJS5Vy=3$HT{H+~i6a)t>s$2H;QySb=8GCB%lpVzbo1Ecv8k`! zJT-Z0rYhzuym@r;=+yq39g`h1IWb?!%@dO+roOT0tBd+*1bpQp<D#!I>Z2j>6?2YD zdXAEtCnrx%$&0@FsIPwJYcXFbS7u%GHAH<4GeL@=m)Z0>N+`!vSkF<Rl-{!FTOak& z(BeImr%%sQro7U(=vx={t(!$_mqlR&a&o`0d9$(;wNh?gqCv{YT5uL6nx%pgULWOE zzjOXZ*AGYUcKyL?6!GtN?D?m)@4Pbkjj8&1PgOL#`Uh>Z_K#h6T=O+sqSbA4?ybKF zBy6bVoh+;-Ws#LsES9v)m9#9D1fnH@yLICC-Zt_3NuT)rMc+dHX-J)2`i7=%T(m_K z&bvg=w-QYqu(n#TAt{?P?aR#Xy|X&SBo8CwpW`p=gTo|})lu?Tf-`xRfAr=c13%O( zG{?O}yZ*SOpCveoEMo@`$|108{b18J&{og@b`#Vmn*E_~j1IgUgo;UoxTOr7jbPbA zC&YhkSPuCi?q+p|p-2m<$8?-IaiZsR*9#{OBV_9x3>)`RJJlR_2?!_uKSxu-bPA74 zUx2JDi8_n*hO6U9*anZ|F?d!QM};1?BvHv47a}Rv7O)%S_Xe6+AAPGJX$gl}m2%~I zm_x2GiSKzH@*Vk)B{-jgfIRczsf3OETX+97^v6Byf0W^U>_D98C-qBx$j=k>m+%k* z(5a4qnghT3F{ffWBesC0+oscC9MbANn>S=vi=V9-(x?RBaW)-~;}D$>{BR9KwTqAy zIW@eE(=@y(2{*z!1#YAs&cJzWL!c9sdZ?8eF4j#N6t=N1)Me)%3cVthoc|Sw2?T#X zjOEw|Nq|AP03kqt^=*>n0H+kDzYqmn05@;HzY*&)Bt#ueqCPO+WoG#Mkwo<}d(4dA zM<NDI9$;Fz&h-D%m3PQ=sx@Vi76G~q)qzTc<#BSpMUHl&ryl0tp;SK1f0KOQh0|o0 z-zC3xX2%^2xnY`i=un8WHSW4B4_{L-7_R_8Jtm5*VL}0M$oizB(wnc{c<l#U=L?%A z95HOE4jib}^%IT-XJxFg>>YQk*#Ay;%wI(@<*~AI`Yl#77MCJ_wi+t+FP5&4mad<9 zZlR!=D^lw7_$J)TL7kQ-E#0N30d;^p0r;wHNL6J^;J(DJV&xpM$Jzyy)7oYPcx_G< z!~5sRA8v%h@SaQX4rluL+kJPo{Kz)D{r86+ly6N?+`R@)68)s(Kz(R#7}Og9;$H&P ztpGo35~y2swhE_F&HQl42=3M-aJTAY8|T!({XC&){1{j~)*%h#bpnhOMpS$pgc&Vb zQO?>)r&7wJZdXK@p${4v#&4%1iJxwb353nVI^@yfN%77$_U2041u?Y!eZfdDb${T5 zMh${VAM+eD{h^+DLF^Nxo=57K@^umw>NS~&2|MIB(4r=<{62o38fs}4bQE0v4GMmT z9D-k&AQ>7^48*)ZKR|?{0i^(M27@ZKEbcMDE=Bx%$~*xFpqsr0=n`ZCcmb~~g73qE z(y2r5zeJGwu&icg|IEwtWi8Rt)*svNp83hSADx@uxIfx@AX<Eo>ri01wDN<iR3c^$ z)Y|z?ifC({-%kV71oVNFQ=CRF?!1EY0-BOx9mwS=B&>ag{}1E}x58nV_Bd)DOK@&n znU35(cqebB{rhh`C}>Gg+|Rb~&o8!dj^&_DfP^#8z4S-$0JIgpX{&V7(q$RJpV_J2 zZSACOFXd771-#N3+Zp?)tyLPe9zor&U@MW^05~=VCi^Apaez~XR3VMpM(iV+9#AFW z5ZV@?SFQtg4Qi}ZN)2F`g8Q%^X)tzaFbIhlpC;l^X4n`Q66&o0835biSA$SN4GE#V z$huo#i7mrJjlED2cxg8&bs_|1ScIC4Qhcs(Md(bDmG2+YB>R4XSPfQ_+C%5|x^?O@ z@HYa=feRcDU5AP-G#ljp(QCkDfmZ-?jX+sDOxm-3{(&JvZq;I`dkBLZVHE5!9|}TI zNJYG_1){=z;4Y+%j$l86ayK+`uZ88`!SF+4REP5KBO-2lDRe#V0D3(d3e!Z@*EjnW zn72YB+{rJ*(EWF$g-K)sC@%w*^S$$L$up4&d(7#6FY~R;d(MB7{nPA)?d=P`qjTHa z@2s1x0j-la<(Pb7#&JKt4srK=M;DyOVxHXhzWLTSr@H1n)lp~lUoF`r2r&57ALZ=N zaV0UN=)mH`*bmQYaLW{oRUEN|Lqn^PkcqXSt^%vgNWqj7=~6zO$3HrDfV%iWZgFZ7 zvx84f5ufBTHM9OX)&M6ahkpRdDx+aB$;3hd($^Pa1dx)$pjvn{Mx#la)JU$Rt4xwC zF%L?x9PL=56AP08qQyre8g-WG?WK0o^Q8t*{s<-HSvYHtTXoX7H9P7bOK@o1@T0eb z+CUFYBL3V<5p2aPjoV?{WniIYQj0VKwQV!K-VrE6neo;}Y~8kt9#h@nKcpIwYB5b^ zK}468cypa}NTfU}86gz$0~WAzHE|NQHYlpDSu1VEDNjnRHq@#qN^-6CHEY#yA-(F9 zS{<lWQ?KM&oom*rkwz=lnvPmErA(?dkYQSDOc`~rX{vG5HN0!Zce?OSO|g@E;$O2? z5;3McDdXctt(x$PYu&eIttQO=lv=Y<t4GB%xz_PDYc;`CQ)>01R!xM#qh7UUtpzFF zM=+(<T-2IpY-_-0TB`y<fojuK<6IW4`ObX2vmoi6HEY&NTW!jd(vw2eT9j04?V7cg zrBsPvO0C7HwIr$5x;1Mh!Z_tgskIcfmKkc5I{hgH5Df9Cc8h(<B)zkGd6}d-YnP{o z>KG<bXQ14WSG>a{|C;Zhb2jDC`U>Vhc3pZ`#j<yql+*JBDm$A}Dn(F77Y)KOoF~NW z3HTw_(u!ao*ZjH%CvyGRhCpaTe`pBz;J{=I^UW+>gyARp#>nJh^^`Fu>41_B6)UQY zrBe{9Rjjcx=Aw|$t77eyu`G(vw4**x;EZIAmaz=3h7NC5ZV@Gg#uY2NjAc>=MfHlc zUPO$dfW;~>qL5I-`W%S1(1{t#PI~8N){znKW3?<+ml<<YCRIO+m1jhhs;DLZ0At1a zG;xbRZXbd|s(hWI#>jb%oY%?uCY+{x<`Bixf+Hii*CqHvzqT$9k?wdgRQy<u#Db%^ z{p#?*5V%W(6^Uz);v%5@W6q7+Z(+e>0?N(u8)9c+gmBSC!IzXEV=Ehh42?^VGChl# zRdbnD^SGc>TR(9umS4G;Uq6>$KXD|MSGbthFqhXbaVX}=n;c&B)Gc`G5Ia?MbNdI| zKlPR1F3$@ey)g5_^fPylE%^3Q(la;rez2F44t>=AQTt5$^wzsg3%*@RNs*6U`{=cq z*QU4Mb1(P~8<S>hKW_QBWwvE{=e^+tUq{MowYvL0y86-8nXA*=?!L6(J7BC}W|g|_ zAG<$x&$_3dy|-b(*KRBY*~3ansTC#<gxaFnwvYFIymxl*^seZ>&IRAssPb)#c{K}p zH8d8>+p8ze`aUlIxO}#JddIzv1>f=HlBtQFy!T#v>$Ury`cJ(DlM&(yE*3V-6*eq* z8!=Xd_ult3a@q%Ok>#5=zPVV~G*{TP;9W;q#@-v77^9?@Kgbq2#%_!)c&lS|jdU+- z_Ue4yvx{{Hqjd-Gbx#~xa95)cCVtLS7j@R@nCxF4qXt?}nrLg|)I^pWX^{#dLMo<f z`A2UF>f(o5#5gr=-YenM>W;jQ#Qm1Bohk)65QdI2blv>}m$8L`?hGe0xtkUCH}k7C zD&;rvCix%0G14fwy+&%~06I-@D#F|!L8Uy(E4;bm#*TO1h&s#lo~UDL7d?@d=xA7t z%nJ~=)nd>kh`X78-V^4F$l}(cRVM!7Q__E3H0C6#X0A&UNwDDDIhUZHpPuHBXfTmd z>XQZ!54{&nUuozMTQ2`!bVPxi0lU$ZoUyGy&e+Y#5yYC16Go(D#L?|gryP1#;49-8 zcC0}B07)j&2*i*5qGXg$>Blk3nv*!jvPlxJq_XCOjInIeoz|qX=H!a8Y?3~zv24Jc z*xNz<J+DcFF4`|<sLW%pbOdO}NE(e*cbf6WuyJ(NkrjGL$FXc^^v)hJAG_o01xE}T zgyv(I+MbMyS$`|-kvdHXz0k9~8myff!&_bK=%s0iPLfTgJUXJ*sWI{OEGjqAFjtZp zqdv5A)wY-rOkch&#JyGT?dk0aIB>;n+0(5N{ZEBzrj32~ITg>`-*NgVvwN`Ll68P9 z*mxQD1cxu>Dv`2@`5XDpkT9*F-5?ShTq;`-xXuo+1ZBFe0$ec?ghCE`VUVE3CErC) z<R8H~0?Pm{T^1R)>}+xiVIN~sE=8l~T5yDKLo-encYrzBA7V)$3_`pb0kRj*=o@}z zs9%QJfOt0DfhKMiM0$9gK->NVFM~EVA#C!`;6NX!UuJYo{yD|{gd8GX!s&1z8l*>{ zZeF3`q}LcP5InEc_%7PAzYB*&g>LVAJKowcpIII&ubem-%P+e5^&4LYDpy>7t8%&$ z=v{I7VsX=4antOf#pZo;&HEk{@0&RGnWuPSES6V3W4XEKgFV1lrgqE(zrTCIhfCYP zcBE%9uXQ1>^<ic0%-3cuzxUddEmm4Ln={+{heeB}oByJ8^QUFiGdq5N?_ZQ{dF+t< z>%qeFRm>!nvi{!dYm{mhj6Z=KL7(WR>xOHp?bgoeor|R#=Snx;Et@ahvsij^uJq)5 z>8S;8r;aWuxnoe#IeFtGG-2kT33FoJ_w1steGYhHO(Qf>@{d}UBx`=b7dCrNZo(y% zl;0|vE}E(NyX6yy-T@aEh}BzTs<H%=2++1jzZQHoJTMmO#q5wi89!g{be9aLyZiwv z5Q3Da<4S&umWFnkXE~Z4OK_%p6ZCVtmqW`>b7Fh*X-=5UxKt_`75~hnBKj_;?i@9e zU((ee%~*+PQXkemYbRJbaW1Dm>fYF?olklWHEq;d4m55++G#771}s45e%?W5J_a%3 z{@`+wHav{|CWt$XMC*oy&;ZvT{b9OD6}o&Grar_)NiCA7%b|W38EpxLA*Fx;0T!|7 zJC&fD8<CL}97IqjqfIv`(Ma0=u93)Od6}j(A^d(BU6ygeOL3teaQZr$@TxF41C;_; zSRp$%uaMmvA;zHfkz}R=gtjsus+dxXc$3z~VHCi&QDn<#dYD%*8NPY_#`T%}`ND?z zyvC@z@mCK$`HP<VIZyo;k|hIsLD9{fH+H_idoizmF0USW?z;gSNcpc}IwrqeTqgbQ zmi@W5pXFHKny>n2ka0DfmM~f)0<j#&O%u`?6}zRwJDzcxCY5aWtW8(kpq|&F6yvxK z$9`zWl6$-8PSb;`wgd-$S}Y=U>>LI70cc3rt=&t&S1@?p79dMlq=eK8W$WWu&fQiL z<JGVTPzRrYc17cgrO7&0(h2FCpUqf++8El<0X~Cr8jjV5ULC=LgpdR)b}$sg{Ygqq z&PM88-6X2wHKB^E7tt>H@52!y>vhV3;u^u*gwYITJ+<gDlQbrT&y7n<X;MMi#9@ez z7d(DwmweBSUAdqP+F+jIXz||p?0r$^K7CkFkRPH4XlR!Fa8{dOl1;H_1!5jjDPMcS zrl@f~WaSCVaexAZGyO9E=q*78ey9~Sbf2aRZK?)KOx&sIRFaK90m~NKtJ1gwY%>z2 zP#;nrLyi@w6GM&_=oCW^m{l^PSqwQ~X30zo-jE~R9RD=rfKjGS6G4I@2ej}zX=h1! z3^`oLVZz`y<j6!0nw6Btki(4}1u4l08ggVIhY6e9kRuy8N>;7IgB)e6<v{vsjA&ry zxJ89~6K1UEEmmcHVAYa^q^&lbG&!u>)$!{qWWR)Fiz|Dg%CD$K>Md8hj5z@VSehL& za47P4+r+g2LnK366+rHD08T7BA8aOYh-TWN*$wxd4YBOPDc`NK>9UzfG<*Gh=lWQ- zZ?f;^z>NW@XlK{och<+U^Cr7)K7ZqR=wN5p-gnl<vJ0l{w=$<QXS$-<P4}HmvFu`? zW_zah%(g|dH{N${G<nOiBFkR8EMi%alBq+tPEDVh#cMa+cWyFyOVL#Atqs#q>5gV^ zxbNJM)R(&Z&bnBp=e-^8?U>jR%cZPM(@oLbngw^wW1HkI_^UASJ-&UY{!pXE{H%L= z{*9t;9Cr+pK?XkB?pRs-?J1dMe}D;F(oj8{V++}$+A@8RtW#~deTYNLQ9V04fb9}j z58;6Zvbve$R5PfxD%+w)?&I_W<ABQYQ$qwX;!+<KO@r)umDKI+v|Gy&l)ht^NAbg2 zT=DFV;mA=^WFhsCP#+nEqI(gr&}0?#)W1R2BxEP8rzi9cENZv9s42wbvH@9f@556( zRrdoRG!6GX4G;6GqV6h%2zdL=nYxc!Znw-=Z=UmPjygB%hl)BP%1C_~o}B!DQfK}W z&e})ZUA#yBx0JsHPLc^X<<0+}&QZTMNAka;M*aslsbfFHM!M9orx14vJU^vVG?eOa z(vqTc`suL+xdGYN9>_n&8+2U3P7F*q)6gEnk3Oxaiywv7aW0J`2xQJwTo%e={)=fE zt~pUZ_&HCt@uOdDQYoUR;gm2C0E_!B>R_Ej*gWGk57q+grKE1=^5@8>GnoZ+aQ`<U zfsC+W^LlH?{md%J6o}m%b(cTPFaF);naF%e^L+jWzL}9sxhCyn)G?l<jqt37(xu|; z8j2_1K*_Zy?N4da2n}Ea&*~^87JuoDS8qE$e3QM)Cyo{p+U8y&++d}NV;+A?7ic`4 z*&`VFn%cSG_k#;XB0*TUA>|_yzAYQ<0Yt_##qwq*`~O6Z7VLbD_Yid&))+OBp1-wW z{8`E{D#}|$x9h$SYmw07`n88qSFwMJVWgQ^HjGyhsY)Xib^cG#Z21o<Gw*#gY+v2b z;j|zE@hQb0KTjD!ae)U)r{NE;(Fhu57nSluO?|qBn0tbh-^gqYY&C)I7mE$54a-M~ z@Iv)g4oRE-jM`;fYX)Xh63G5F_SHYdyVeHLe@-pXXfUf|FAc}uJ9hrjCk}P-qqM`l z^mPPR0?&Zum}F330H>MwLFRj~8EppewvIh>@Ja|&GzOH}Hmt`G2I)L-d4Py#p;L-$ zq;y?MU%o9J=rXTG+&QJIn`C_|b+N_^SRqvu?$Ha!%fvQdp89{#NY!z-#lG<RTdxBZ zrt5%vqMkjFC%=CC^~Huga}9f<&OQ3j(L$m}n?l0kSK4*OB{lgiWRZUh&e{_gO_{*; zG;`}`a32CcdMi*DKX$mhtO+KQFvAtdWL0>;lTxnARr%(SK62n;3|^-#mWCc}=36%8 zUpDk!y^!F>tL*R8_<uqDBH@a-u!ftVx6V(WU+}DpI@jslQU_P*mbCOVY$zOS*5oVP z+QEiX8eE<)bxGv`HIzE69CByCcCtFoSZ?%9Z@F!o+Wz5?2<weTUVb$3D$Vptz$AE2 zt-z%X2nltUpYv3Q@M$8`<gV$0Kyv_85gAn^$7kzq(&|msLH9S3X*oJiVOOpfD%|}9 zh?jxEkWdDE%Td1F(bNJyCsV4#J4_i)ncADWD43*Gw?%sE0u3o4C#?5dP(ref`}qwM za@5)N!>%9K{y6-n2k*Z6$1VSR-7oC_!u8Kw^9N4PZ|FjzKE~?8_#1+{IJHpQHobH+ z3C`3j{G+#mX9kY4JfRniax2X=A;R?Zr86ByE$4^nFbxG&V{t)In|pN*M_@p^+oE4X z<d9a9Ls}UQ;Z5Sf+Av`op)PGzA%_Xu2ssE|_(2XDk(38HTxyhg4z1rf2tj}1xDZeB zttaRc+EAA!(hb-VQnP}EgAmYp@o<QaReriHSksO%MN_?Zc!X~s>8FZ*3lgen*Ptub z*CK8o@#VoIO&-2DB)@~o*0_yCbh=O!<I|r;S6n}0a3J*mjzZ*q0KXu#6fSNSwPJWQ zqFfwQ7&u9hpVFH99Ta4!Ab}upFdpWW1OJZ|mfn2*#_K;gJYTrZ<SJp(eWWt~Vp;QC z87>LZWkP@LqQ7m<-zKgY0@kkH5Lb-aw*TbVPmbL^_Pft1my_m7TR%A<ZX;2Bnd;5M z)O&`kK9_{OD9iuLSbpa_4smao&V8c^hI$%PK3<+qRQ7+<plSS*y#%OmZl6xj&+J(a z33%1u4R4?|&8OriZ~?ETSBct?iJpLE`}302k1|j*(QeiC=Wtju6RfEv8M0|`Ql1fO zz>3Sp))9NFGy=7Xk+kzVq^>Gf({_UN?sTto*m4A|8gX_zR};65WWXqsjr!1cgdtFa zBN%wHtLFmcQX#dUQM&UQgqiIf(23Q|AYZXS*r@FuX1fHGb2OvJF#3`)Vn6<(gt&l{ z+jU^oc3C@#vP*gN`bILlGcRKaU~gHg#pvS>D_!+c#}S_-aGgCzi|#nq8`_h}?ZN#u z)b>@4lV-m8iUmDSJN~aE>FoEQry}*Cy<lNyoegwn7-eVNo`ggq+%Gq(w!@a=*g@$6 z+j#;CeqhYogBuQB7zfMjPHVMwI}TXv(ulj;T_Zu<t1<c^+O4JbjJVbu$FwdU$3S|Q z3!|ys`UqIB(8_l0bq!cl@$RqrhU~T9(3Cs2&`I`YKsE4wg6~+UCS8)$Q&Kk@zd`<+ zs(YeTMS|eqKp4h%*|05`IryGP3zHEBsqPN{Q6m|nzuq5a(XStTih&`BKL>EBE&0~{ zi(J=>`kgq{kPh@-{t>3HL+CWW3GY}j^Dq3mgpqNxhT)-xG4H4_fQ!3#Y<kB(R^TTC z!zm_;clzTtAb4ZVS{-7*^iO*Te6InS8k)g<ffl&`2y0Z26~mzCvUd}a+t4+ZNiXBp z?ey#S=LLn6E#F7u<==(_`6b!2=-J=Z6*zj}OxNMlaXT*c$+&1gGB^;C=P8eU2$VL9 z&*eEPh<#R)UnYlOA#MXxjSq;XEFnD4#R(wilQTe>m@4@R`Is1Y&~?RdJZo4U=%){~ z^iVi%XV<~g8PCvq&x#sh0((WJ2U<ONgiRf4g33tZG5$|<^!!ISIIqhjcbTe>T{H9Y zLgt3Wtx%9IxVint_V<Z__o%dDv9uLOY}8p4tE|BpUR5`d9&6n+;fhsMPuTy`>x<^s zE#|ME%U=%`-@LbF!tt=Ydg5d(&##H?g+6!Wo!1{0mQEd>+5G;SllIRFOCOf_7fUwX zFWD5`d~&{|BkJo&SRFb3hp-8A{Cme|><hj+XugzIelPt|PX1K>2jzz1v9jjHvW;_P z8}It&%buCch~<^t&#TpHjFlYuB=WN>(V|mJHfw1?f>dch9XGX1y5_xgR9(Rb6^80e zTLa|fdv@eq$Z3jgeRk3{d+0&wrg`t?MB4IJ7MH*8cznttRn&aZX_0aY=Da7S4oAHw zX1Bq)2WvtnJ}E&Q#*eN@|LTi_7OAM=3(1D=s-qAqSvT8ur!l&@{TKPaNRJkEa?>A` zRwf+QeE)w-*pT_Zeeujn<?gP(7rJ*gT6EZ?*nefJ<$tXyIK0RDXW0cuTCIP!C-X?N z<L4O_M;aVIZ*Y*mHS@W0$Io|EJXhrSr$r9<&2gotp=6DRLV%Qptp>HCxC1yYE*j8j z0lJpiWyFkqN}d_rBMAGEpXu6a2h_CT+-|>f;X&=r1o?j!=BVZ96Co>%KAm9nDam#T z(uf;$9$CaQV)^PchoKj2Du-7Q7jePyg)X@Z`82XbZHeJ()Cp>3xBW6;osc>+P12J% zFio{cHDwT>Z5mN!Mm$wX=Sfk5pR+-8iFzAGkRBBw8L@ZUL%T%l)_8k5Y3)M)A>B+8 zZ$xtFsvUCLo+_s!)WmOhn7=(>4>-0dsPu?vLE2N*YpM;P&6_~3sg>HdGnk`TCPv5T znv^kK<y>87K!1+`9mQJl8{Z)OChyU{)4^@4eyTEtE1v;(C-E0k9$hOJWNg-0KCxzk z{)4AaE69wD&*-%Di$ag~j=`EWO!V*Yj};O}dP85RcNjOppx?GZNjM_^Z^%5BtDpU9 z%2>{2DA#UyB{a}~C9;F>gN@~K6k`E9luKY^B`G!U&@Y3Hl`l&J3J}_$*is)WUY4xh z%^I`r^usD1QU5}bRzIyTP~2%aaj!1#Q3&NM9QQq7J)xWEHX{RZHyiOFJ-R{Q0>qPu z8`+MWGj6*QdR5qFK1<cVKu(Yx8cO+3;50dfK)MP?I1Frs!>R46p@dA{WJPPj#4S-# z1EKEA>cdwe*9H}Cr;qWu7HYK~+e%w)NMH(SIMf!stx<35LUAjOF<AMr#d3T%OKy}* zq&@QbNC6hnxdk_yZ!`l#fG}{^d%Grf#mZ|Zw^3;Od)p_rKU&xN4>n9X7QOZNz4iCb zEbi`{+ua%cTKD|!vru}?Du>orehG}k-S^c$^cF`;)-5(4m}@@p$-#MVJI=NI?1{rT z#@#vhGs|Knm5U`C=1MlqhUQD!CXRpV&Ye6vb?#QrbWgNwLo}~t!QG0uXnynTxsQA9 z^hBF?NAvb9xc9~~bMI$X#7e3bOIqhjTJJhOsf(7h&X=@v9nt)T+02hUcRbOC?a{nv z7u-9j@z1{Z?8LKFTVDNwyMbbMzPEE?C&x4_xEm>E&wG0&_Haz=f_r0fp3MvHEfll+ zz1<VLIS)0D)B&!)b$u%D?KLjuY{vYp#G1$HirqBn#07~?=PmRbKp5dWbqpq9!Jgn# z*CNv)vo;g|Oww8FA}tR%)6dWJKPZPW6!`CM<EZ6lZ5m#HGs3-e0G=d<zJ3l_b=GmW z)gaB*$Xu1kXXfv>4-Q|uM4zA#-C@gMSg&A?(FYHgQ%qrhqx#v!bG*9A*bjU7vmd>p zwp7A~GZ0y$n<LXn8>r0`0376Rqfc@Xe293L{4ES}L=y;j3MZTI!RE(JS0#~3kQ4@& zh-m~_f=>c&{LK4<6PXV^xsyA8V4pcR@82}PmU>7vO0Tps=zDfzCCD47)xU+jYtQ*5 zG)m`8sdGN{98dRbx?#Fer}ofvr+=l>{r6I)n{Nn@4CDKTWU6UUGv%U~ZVCEf%e5b0 zm*CZrv>MiN)Zf5zkT=q>Zi17n`s#obVqi!mx;PNTsLER@dkaP?3A08DLCVuuiTpAG zI5HBZivoPaVT3c;&p&!A@M3=Ka2Z~SJp7v!1(;*PV3Sh|_%X+UkwX(1AP12RDGzec zGUNw2G^Uyw2S%AiH+qH~8Wx<CgAPl6kb_9~lm~SH8xs$5&@rC!Acuy-o9EDQG-jkF zi54vCp67<WC}7D3(E{os9fy<$IW&eJiz2ji<Tt@XkzX4b7D3p@dIavKiy#cQq>^kc zCT)%!0QBK2PcWb??l%ndLGC>O<Iu*t{4Tbc_SH!(NMIo(dD#Sd1V5^gLp$|B71@!W zq2R~J0cM9=T0=OY$r!5Z7pu3=Rc|NZ11ui0IYfvS$aLDR@@Zi{?JE#h=t7MGRdS&< z!Q7JC-_Tz1UDLf{W~IG?b}Qa1<o|!Kz);WwSX*PSVBw#(FEC`|8i#l|P216up*UHD zs6gzMl^|AtA+a|ZKUyX$S0#xl>|6z~J2Vrl_>e8GgS5DWrP3o!*?(PO<9E<Qp<&3v z#$^!e!xy1~GJioD*BSfREO|Iy!VPLMOZyJ3)elfBAUgYR5u#bNm~7irgIZ2Ahgdq* z_;hcBXC+LHaCrQsTtrGXUCO%qguM$q{=dVwHZu2jX|OaU5Y;mAZRef5-_J^rk>Y!W zY^!)V{;ss!z4V3(<M>T|3`*Nd>PjZUj7CcVE801&*N7Z6PW&K;b_%O;fHCWuID&Oe z9Km1&6>rf_!lbtVkrmI`T!W&4CPEeBFWpQk6arFDZG*W~K(p0g1KEy{2I**l*@<p2 zj@nITPaR{wXMlIs3xKWD0bC(uH8Z}S#`l{E?vqeo-Uvuslw?Vfz&xdpiK)|MfzK*O zKSVxnV7&N%@1U*XeG0KKe4KpWB8Qb+sk8bOXYqLg8tfEfsC>ACHB4l$_{<c+dooFt zDXc4sFVN?R?ZObn3;#ou!Y+|36_q7xA!w)UuYb_LllfWOcB3xBy-U~)H1o&W7NNaT z+a~0np?UG_!BBs&_j=DO1Ncb$E8!zaqyYf|ZypEWS#9%RCcA|g?a7P)#NeVmZ7;2M zT1bK+U?*-Dzh1_-1H=_y*!da4O9VSUk9^zVti8khL)u{|>#yj$A4QI$$K?F$?3{#y z0#2#0a{9Fg1?v+T6m&_&<%vx4xg}TD<1F}+w;t3+bfiEp($F}NB0AuK007%tx%Ws% zApi)OQy+tpCk|yr$y3{0^xQfNli1f9QjS9!(rtW{%1vx)3tZb~*z<$&R$}AR#+dSG zC7ZZ?HZ|N|#Wk&PO%L_1P#;oY3IlHX=5#VCf|+v$eHe@Yi~vBbjdX;TSvD}Ed}*Fp zTAT#_`#~eK+!#{VFe$Pm+dr?a7GFbUexzm<K{KFykQkc6Jc8M`R)wVmGNy{Xi5okd zT)m-uOIP5`;e)46oC>6JVbDP0!6@xC*jC_fbE6@*Witz7*3xrv%e66k>A8*9#?nhK zY~MN1w_E-*%n_2#i<q6I=dr-Y5hwpSIjjfu9r&OV$h%BC!NJcci6A2GAlYg-?i76p z_3_oKdVIG;HJ6YkQq;>oBE+!pIw}Du_+b}x^7Z?L>v0)k;&@CjNEf~Pqu%}a+C{~d zxr!}!Ps~^BpKyHE_Uz=DsjX8DGdVMDGxf9Sb9o!@MJAlYFJx7!TSJd>%b;g^Vfw<< zso71lT_1n_&evy8+)KOn>b<MK$c}oMcbZSyzeN)sowP?s_@Nd1m7pLzNQ8oP$WMoU z{5fq78v3E~lBSDp*L=TRun%#!7SYLj05zIOeYDxV^gVdSr6f@uj!zcVsr|z)(5CoD z4EM;)Al2+<7+_i>=;_ts(TxlM4lTOo4PD&@Jle+YoRz`vWBq!8bc<ElHy{IX#&=Z# z0bmF6$C|OayU6kgu<<Lyur;h0BMF5gWG-Z6R0dlM76MpV*=UzUfUgF5fQDp<>mu-0 zfmpj@0$GFrYd_g@!@J`aR|mF!+TLLh<a(GG!ua@WB<^^Hx*(s#;9;ZJ;2`Oy70!xq zM5U<7&vQx}KA)`g;TeC_<NqK$)%O1N3Hw85=6kNUT#L@4IcE{>Lmr<#K5L%`KfbhO z_ENNX(_gH5*^Qd8`Z1S$ye09ug}DkwJ7|r<?ib-%YoB1B(jxUEE1zHm4&20tGu=3| z4PTH<kpC{Yp7>e5N)^a*F8vYKDxFjzoSZC}MRlo<dMXHEFMYAf{Par6Cr&w&(@Vb* zsjYr1K5%A0qd7!v<Okwnjr>&OB;$n$7Amud&?Fz~C79&LT<~l-b@iGwR97v_XuO90 zV+71laElphu2C`?gF+jgx}>pOb9z!sv=CZi$__M(O{qg8RnVqfy>``SIxZ&pFv8kC zgqnP6dHvV4CX;-qNt;2`q*tK%kVE&IUYgfd;VxxG7ia}EkCta0<<Y<Y&`K-Ygs?eC zcBM_@)fJ3(X-tumb*RPUttO*jG0SJHiy=W<FGN&{%a4i<^_L=8zJvY?_9Fp=xcB~D z_*8<0Xq9*deb$9fgk-YC-V^NWQ@2y{$7uJV9e5nJF}=UFd+PA5<F}4akzGch4Jrx% zQz#QBVx^V0c1`d4p<}+ZWg;V1QZbS7jwe>XZX#pBSraSuQ{rOjGtts#U><Vkot+e4 z6f3X3b#eOQV)?FU`L5Z>$KSm3O^Ppp9@k>krn#z3ch4+tJvO)XShVffgQ{aOcg~`_ ze9m1y<5=`>o%3&f;NJS5ZPqFm6)FdcQP;FsyM3;9`@OA;J3Hrgc0Q=>q@*f{V{fgW zUcXqfC0eotW+Y4QlyLJ_dcDZbS=3HW)!kZuYyH&vhZQx^+P%2Abp7^qc<vtl$*~_D zgJ-^C-^9^(Pd%!rzIAo_>SD#VXvMbK!yg~NbA00HJEzp~@DxE+Z51TwuXo1C&tr<@ z7sN>kG+&aj<^}J$dR!>lHB;;`oX0e!weawPVs&)#&6`e(CO4%h5}eZS@<WBTdi*(; z2I0Y>V)_**9X(mex}gS~LgCwL_8o{eyn&t?e9uw^37bsU@&(zwi~6h3;k>M~70G3v z+1iHnS1f3w^;Zt^a6mH|eIfpN@pSRb*7@S5iR@V8GmDKo@ju$QbK;FfPxYLqdfrnT zb)Nd90?sOP_(!PC98YK^KH4%~+D?2nhj4-w(yU6F75QuizuizKiLgdKhmvN4Kh2OY z>1*XkOQ$p<;F$C_WrNV>A=s<LA_b;Kho;aUZ6qHdTli4?bzom>V>30#944~{zxq4U zx24D1rL6oLXWl(EXD@yHtYon~-a+4q9({Ls&R+g_Cq?X%a`WfxzQ?;MutzE=p0gJ{ z-b;af7Rl|qaq!*U6tmw#Q3nv^{nqiv2RU?zGaP<*@0`8lmxn2e=d3AHP+ENLgjqh! z{NZkDgqPSsf0O!GM$Wh3px}yZqVG_qaW$v@;T*v$vUYTc4c#KXthHChu_ej7$=O5B zUUK%4v!9%wlf%llTi}al_6`QaVS%2r#;;7QBmQKE&||Km;2CmGlcTHVoTK1*axRe5 zLr##KUUEX@TqdU<PTV;n594cjk?ZmwP~1<+`CrKSb8-mo<ppy7B{`pw^B>7ckn=e? z1LRyKhq=Kv3w-J1&{iRP$oDe&){$=uIoru0FqSc!l8hOX*gk7KL!-SJ|Ci5D3PXMn zK73^q+<0hH!&rCE<<X&Dm~1&fH6JAB5F9o^yHD(VjB}I2i_huc#WyZJwih{^zdU4d z=cJ7vP57k@*Tj~XGvle9wwTie)nU!SS08iJ#*ZcZg+*yGXV%1M!Uo?XXXeD2gabaD zP8pubv_v}jol=H-qC1g6ewUPyGufEPB)^;DpHF0wKU>Q1O`c15$nT~2bBP@C=Smsg z$-+b)`F)~nKKTozjNHj*6NTh2qWmu;ipgIh;!DY2CgRJ<Um?m?k{{it_g0a=TFS_u z98A=ZzZM^zoEVHbJ(GnoXYS-N#mSub`r{2qkJ^2S&HN#E^sZ&I@|}D1ZeyGBWqb6_ zU#oo89=)rqQNC!8-c{EtU$aN=>Y9`<*`s$=b;?)l(L3Z3U$95-Y8sTU*Q0mvi!axs zcgQ2YT94k<uT#EQkKUmk@wIyNuC`J6QaySHzxYZ$dWZIiFVrXMrFAV&#7F6WiLbpo zx-5z3tx{Uf6DuydFWKNrkPm&MI8|1mBp{e*;RJkDO^Jgq(a3S?=bDrR3RYvInzX#V zZT!%uuI!0#yxlN<@YAfE$*Q-{jvx6HteLO9pFV!{Q{>5c`?>MMdQx`o<fga#$DjLD z^Jt}V@+X7u7mgpJQn_!pqZEvDA9(xK@pjGg$dN_eDW`^HQ+LXrIPpc61bvp}$$1Ox zNkbLgQSrnH^TurBIMHoE4?cBdPev9TWlyXylt^W{f}DgML5wqv2U(0$x<}q8*)U0# zAiHEw>S1w*&F(yL={{H=NstK=tcbL1YEr4zq*5ATjx#h<i{qK#rt?g2zP(!6y;{EY zTHJaq?hLn(3!kwlvABM!<b)6F!Pr?`b)z)3vvdpY09J%Y84IX#vm!U=Nmvm~fCEK? z0hSR(V!^<N#kwr+NfC5i5~T3*xS1*pFE~n{SP`URWeM^<X~vrRCCR`Zw}1_e=C<xw zY&kgBa*$co1XguVh*iBr4DBavc+)S5SM?aLQ(Fk8fYLblo@^w1j^?-1^5jARPQ%|& zw0*EMY7g!5^ep{0oFH(b3sS@qkRrfPBDMl)80@8pJz#6GM8F*0f=|;FN`uaT1Fkm$ zTWyF*<Ct`gNxuNwYlw4lTn5FdI9&ub*O21kluXVI8*7Mhb4(V;WCpS$u$mUh3V48{ zcoo9rG(KeY(!gH<jUCI~4_*>Nn&rrFOFRw8AEJ^Z6?XK7y0%me#~d{aK%Ip@+QuR+ zA&JOROd$w#QrA%ISX)^wUU-^#*WA{m50U>5Lca<3VD#HUN{eu2`tkX3=qrNZh@a(H zHwp=?n<!3V<+NCgHgxEF?Tlf7t@IKONR?l94SplPOlEvST$5FsCcc`^%_8C!XmIVO znZ5XAaOQFpS82wVF;p~*I#<UFhtNn1W=B^Cvp8C599qdx5q|V`pe}xBF7fAFs)c7| zgNAe~5!_Mwl&f{jy-N_hyk6p#J@N?Nn|i693~P~rQ_UKjI!Ypvo0-q=jOCP1_1$`D z`lacf+5J&ZOVrt-w-Yt<^X1126G*7a+9T#j8ZoPbZQ4{$Lyr!Ay(LORR682(CBoU6 zY*SMVzc7t%;D7L_)stwKBs#pD$^0e-BEusDa^z)TYx(^D!DBw6>Aj;e1Q3yUt^p#H zI6HNMm`&i;@~6sRv3P3pyKhFF6?zxc!L%bEO*~KfN<d6B6ag~d=n)#mx}o3>`BhZ5 z_Sj}nvosh@bF@8{;7r#g=w}Az<M1QeM-!|*O8eYP8fC1e7=FzzHiL#X<WRlITGQQ@ zW;Fr7DnknFeha3_HWum}4PWsG4Qj!|{K-IlhK!th1_Xa2&j+-Qb-fyJ>lG4O2o02J z5)6A%w;2=TM|+IW>(@1A>V@jQeFQC0?CT2Pp$Hz)8nhe}4IDR%z6!YLESYnb2(#2P z^7r@7o_PQR*iL2lqgkgvdcHguJ>^8_&_w(22HuR*35ej_IKw~s3gkxU?Qky<NwpFX zna!|z>M{FTt<CUj0(hZLz!>O0#X>XdOZ5$edxP?_+pav1Vj7bs%-@KQc;MsIF9!z( zgO{LujO(NVT$OB1F5`s8Z6m`YsT-pF8<+&eteP^N!y`OwejWpDHsABS<sr)mxHOOg z#JnwZK=EQ1N~}!u($OT3(!#n-&THh5S!Qm*D&*Z&%0mue1mWYT1-ylE=~H{zqnzSN z*Z9#Vb{wgEygo_8X+pkM>^1_)tRxJHal*<cPJlIo_!BQy!GEEpz-xeOZ)%VOcu72i z=*<W|X%c3VIPN5xIT*n$8iN0L8d(v>Ctg8iN^G_zo(4<#eZ$w}bWV<3AAwX&*s>&k zI$w2=>EIQ76;hU!i4`of9hf)C=Ou@UYcR{ig<bI#6I!`(I~`4IJ6I;<AfBzt^?CsO zxX8$NgNmr&7vv0)6C<aJ943z6As>(9Z;`Ksob_<x&Ry4r`*2fgkNgh$j{j2l1{_$q zwpjk9<oZ`qCH{X#ZpmlT(M9R#yma*6O1{se{qxfP&!if7{<Wt#W_M3qo!Ss>+Hvo> zPtM|^jMqBu1_qmzJ6SXN%4G8ccjb7-leA2W@3902WSlkgiS<+_>_;Rd{=p<!GZP}} XabJOyod-h6^(3v*Qn@6-;U@pT)2b7M diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-314.pyc deleted file mode 100644 index e5cea4f8958805f82ba7c4c146a7ce061629ad8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2750 zcmbtW-ESL35a08C_%pE+Cv}?!;xuhqx5R1HfYMU64QW+dEhbz`%7>HF#l9v-&v#~T zLrGuihYBKuK!}&}fGAIpC+HLX6A(|KL25V=L4^>Mr$j-7M`rfyd==3LR>|D#%+BuY z%x`9WsJSUZVBEX&yZMJi$S*i)47tv%ehW;Ej1yJJlbpbWE;25tfqWn*GLiFQUdqW# z=Dd_wazPgCB4fh-`Ud4DLORh#&WCbg7S2UjBo}4TT#UuKNIU5!s*)mVa3J6tu%@wQ zH8l7#A?03fNz`yYo=dO<oIun_z9rYnTH%DIZZg&i*3kjMw^U>6dnCsapiMS3T|{l_ z;s2TDhqyQ+cukjH89A#B=gtnF&lk?k310MhLwBdCQ88==`rt)lvd)GtvKh;`G*dM) zk{29yY}c_2uer{=P-P~FyqId(WrM1QJ8dzq*`MhXzG2CC(WmvBlGRsXu0wRk2oqGo z0^?C8?jR1tnn|PND8xBMtdJ@KO)!~DBrcJ;MBx&M9;^v+Nl*>3&?sSHHQYlo5l`Ws zm#=>^RIOSwX+7=YP14K(mU4H|!E7WlL?_+jku;1Aar(g4J7kWhhwPb63$on6-}1ml zj9}TObNqu#)N$Q3n=;Z6U6UGHb}3;3>q#UE@FM)LLiWiCp+-i@cwq1*zyYM4<V9gh zP$4j?s7k7=D*Yl{H24rh>P0qur%@Eh+&3CTUZDn?rgmYDWCEUY#i13Qc}<#DvUJxi zn<b`cF7C3Y=G`1VUVO<ls9V$_p+}A#J6ycx(5uBNbzV10%q^BIXSzJ0yGEaBn+%A{ zbjvbm-;v_T44ZQ7qelj`0qw29XS7R3rE2NS&{(BfykJfgU6UDoRlRgopETTJ)vWew zZ$c&<+E2~WR6qB)oUP7yF-_BL+hJ&|c}X7Ma(1&Y3GTW*K>n_gH4>0_uOON4Il7GB zyXX1mn=@Rx3d=|d1KSvQS(t}bp9H2xE+_1UhFnhDjdT!|^pH8BFc+W+(9;$m8PStm z!@9B|adG3`-d?%`zFtVvFfQPAeBEnbz&(z^ni^T`*!y05vAyH{2;BvO|BnG0$FqYa zzdUJ(&m6xvX&7d-6$!RHihg7Qv<>-oAoa|1_h|~HJAokM?gPT(tH?W72$028dRfHp zp=bH`=WuF8hPi)@%@LNslt=hBFaTs>WId`NsE<)Hf|=Mh8l9^uf>omzZ(0LZSSZ`Z zXrR#nt5OjIz{d#h@{O7Q?IxFp*VoFUau1=qL6cFu@T9>sziu$sSU1?#{9NOiUR1}L z_Sa+-`UJ>mH<CR_xKWF5WRx}6@1m|3YH%)Y0$9Ob!{L(9G=#oZ&m6!ewGNxD3Z9T* zFt3qig|zIvpXmNB(S3XG=LbJKxRB_Zl@~jEJ}rD)_+sG8Q*)>8o?GZVGauUZW3uCZ zviDxHcYgoiLh|%%Xfd9ejsFMg4!{YI>pT~Q*9h-D3dfxv01UYwg$=wR2p$i$E?DIr z1j3;v%FhWa1Stm_XAo`3JP5a~$jCg3H^d3Y+ZkYLqzKd>|AsI?Kr5gK-P<+>>KJZd zLZrB{Cju}y3NqrhoNulEMmj70bNXmH*A@KISo}5er$Q3DKe+Mkja%2gYWuqDPS-+w zXg)N=??^jgNdaCn=qt8f!EPAQw2D)nwvdND`Np(v)irTVyJAw8S*C5+4yc2gR(47N zF>G@*gCq;YYlnUhz11vfI%CwFm}Z6x%Ud?R2qnX^G%X|eEdp!zwBI4%Ck>%U@Rjk? z_6}TPB_PY8wPxtOyz{Pwpern6%UDZb!v5kJ^{<4+c%O=H+IWN~SE<Q=cgQ2UZCIW> z1&2G=gN~h^u%?Ydrp;5>Ox3g}DW=B@)}!d>CRi^ninYZ{kUx5xP{{$wdmsADou`L! zqXaxb+4>Wd#d4#ADBiJMoUNi?^cX5-pT{ohU&n9zC;Xh8q(h*<aJedwWl<1>C6fM? zq?br1{QV{-ev%3cQejO=2?%tg%L7D;&0har+_fb2E=f;4h_!zB^sUrKCvP8Hi1pRZ S{vd^C_q}~#B}$|Ye&#;}b8ch+ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-314.pyc deleted file mode 100644 index 381dab6b5326c9cca62e26af6f679f2ccf4044be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46261 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-314.pyc deleted file mode 100644 index 51bc02bd0011456b070c69f398e10e4847ceed9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51605 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-314.pyc deleted file mode 100644 index 11b29e6a8aede2949779d2e5a78c2dae07b8eed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3721 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 RVz%vgfL~keRhE^L`!91TWMcpT diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-314.pyc deleted file mode 100644 index 24595968c2d407a000ae58ad90cf7cb9bdfc500a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73108 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 V)*6|qG?w>`gUg!~OF*o4{|gdX<0b$A diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-314.pyc deleted file mode 100644 index e4ac89ce75071c28663f45f458f28f2f53ab9801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7837 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 HL!0vdkE~e} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-314.pyc deleted file mode 100644 index f931bd3ecda2b2d168f1f432072bae6c84ccdff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmXv}PfG$p6rXW5OKIs=H;GObYLY}o1W|^9MCf`5#)fhCnUlNjGBZ}*BKiP*jgEbl zx-EF>Qn$h{&`jCy@ZRtJ|Gh1HIfFD_Up{zW`*#!k!<v&>QImUgiCegV>R92N;fY3~ zZYe8=y4E`C;tKxjR>_vNf%3^u6X$VkpVUr|I!%YRor`9zturZS00ErkQ?czqpN)M* zrJDF4g*h0flqrj(;pzGCGn$$0@#FD6=|~WgFb_nzTHPkMp%{`#gxBCINnAf1dp#zh zz(-tZBNg*~5QQ>1pQu4N+9_9Ph2HJ$QU`*_X9}naBGTkNBDsP>#M~jf0!bnsmFNwO zyik+`cL$|kS+W>S;>Cj?^u|6MimVo8{*<fQd|4RdDcYQ(weJO#U3s$KGP#GeSkkp0 DgZX2f diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-314.pyc deleted file mode 100644 index 1f1c3dabf00bbd283a27db69b76595fba16fb61f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42713 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 O*N&`i=agk^4*Y)=hvvWl diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-314.pyc deleted file mode 100644 index 9aacab0e44c123946cda21cb67f9e7968ff581a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13260 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_cell_widths.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_cell_widths.py deleted file mode 100644 index 608ae3a75..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +++ /dev/null @@ -1,454 +0,0 @@ -# Auto generated by make_terminal_widths.py - -CELL_WIDTHS = [ - (0, 0, 0), - (1, 31, -1), - (127, 159, -1), - (173, 173, 0), - (768, 879, 0), - (1155, 1161, 0), - (1425, 1469, 0), - (1471, 1471, 0), - (1473, 1474, 0), - (1476, 1477, 0), - (1479, 1479, 0), - (1536, 1541, 0), - (1552, 1562, 0), - (1564, 1564, 0), - (1611, 1631, 0), - (1648, 1648, 0), - (1750, 1757, 0), - (1759, 1764, 0), - (1767, 1768, 0), - (1770, 1773, 0), - (1807, 1807, 0), - (1809, 1809, 0), - (1840, 1866, 0), - (1958, 1968, 0), - (2027, 2035, 0), - (2045, 2045, 0), - (2070, 2073, 0), - (2075, 2083, 0), - (2085, 2087, 0), - (2089, 2093, 0), - (2137, 2139, 0), - (2192, 2193, 0), - (2200, 2207, 0), - (2250, 2307, 0), - (2362, 2364, 0), - (2366, 2383, 0), - (2385, 2391, 0), - (2402, 2403, 0), - (2433, 2435, 0), - (2492, 2492, 0), - (2494, 2500, 0), - (2503, 2504, 0), - (2507, 2509, 0), - (2519, 2519, 0), - (2530, 2531, 0), - (2558, 2558, 0), - (2561, 2563, 0), - (2620, 2620, 0), - (2622, 2626, 0), - (2631, 2632, 0), - (2635, 2637, 0), - (2641, 2641, 0), - (2672, 2673, 0), - (2677, 2677, 0), - (2689, 2691, 0), - (2748, 2748, 0), - (2750, 2757, 0), - (2759, 2761, 0), - (2763, 2765, 0), - (2786, 2787, 0), - (2810, 2815, 0), - (2817, 2819, 0), - (2876, 2876, 0), - (2878, 2884, 0), - (2887, 2888, 0), - (2891, 2893, 0), - (2901, 2903, 0), - (2914, 2915, 0), - (2946, 2946, 0), - (3006, 3010, 0), - (3014, 3016, 0), - (3018, 3021, 0), - (3031, 3031, 0), - (3072, 3076, 0), - (3132, 3132, 0), - (3134, 3140, 0), - (3142, 3144, 0), - (3146, 3149, 0), - (3157, 3158, 0), - (3170, 3171, 0), - (3201, 3203, 0), - (3260, 3260, 0), - (3262, 3268, 0), - (3270, 3272, 0), - (3274, 3277, 0), - (3285, 3286, 0), - (3298, 3299, 0), - (3315, 3315, 0), - (3328, 3331, 0), - (3387, 3388, 0), - (3390, 3396, 0), - (3398, 3400, 0), - (3402, 3405, 0), - (3415, 3415, 0), - (3426, 3427, 0), - (3457, 3459, 0), - (3530, 3530, 0), - (3535, 3540, 0), - (3542, 3542, 0), - (3544, 3551, 0), - (3570, 3571, 0), - (3633, 3633, 0), - (3636, 3642, 0), - (3655, 3662, 0), - (3761, 3761, 0), - (3764, 3772, 0), - (3784, 3790, 0), - (3864, 3865, 0), - (3893, 3893, 0), - (3895, 3895, 0), - (3897, 3897, 0), - (3902, 3903, 0), - (3953, 3972, 0), - (3974, 3975, 0), - (3981, 3991, 0), - (3993, 4028, 0), - (4038, 4038, 0), - (4139, 4158, 0), - (4182, 4185, 0), - (4190, 4192, 0), - (4194, 4196, 0), - (4199, 4205, 0), - (4209, 4212, 0), - (4226, 4237, 0), - (4239, 4239, 0), - (4250, 4253, 0), - (4352, 4447, 2), - (4448, 4607, 0), - (4957, 4959, 0), - (5906, 5909, 0), - (5938, 5940, 0), - (5970, 5971, 0), - (6002, 6003, 0), - (6068, 6099, 0), - (6109, 6109, 0), - (6155, 6159, 0), - (6277, 6278, 0), - (6313, 6313, 0), - (6432, 6443, 0), - (6448, 6459, 0), - (6679, 6683, 0), - (6741, 6750, 0), - (6752, 6780, 0), - (6783, 6783, 0), - (6832, 6862, 0), - (6912, 6916, 0), - (6964, 6980, 0), - (7019, 7027, 0), - (7040, 7042, 0), - (7073, 7085, 0), - (7142, 7155, 0), - (7204, 7223, 0), - (7376, 7378, 0), - (7380, 7400, 0), - (7405, 7405, 0), - (7412, 7412, 0), - (7415, 7417, 0), - (7616, 7679, 0), - (8203, 8207, 0), - (8232, 8238, 0), - (8288, 8292, 0), - (8294, 8303, 0), - (8400, 8432, 0), - (8986, 8987, 2), - (9001, 9002, 2), - (9193, 9196, 2), - (9200, 9200, 2), - (9203, 9203, 2), - (9725, 9726, 2), - (9748, 9749, 2), - (9800, 9811, 2), - (9855, 9855, 2), - (9875, 9875, 2), - (9889, 9889, 2), - (9898, 9899, 2), - (9917, 9918, 2), - (9924, 9925, 2), - (9934, 9934, 2), - (9940, 9940, 2), - (9962, 9962, 2), - (9970, 9971, 2), - (9973, 9973, 2), - (9978, 9978, 2), - (9981, 9981, 2), - (9989, 9989, 2), - (9994, 9995, 2), - (10024, 10024, 2), - (10060, 10060, 2), - (10062, 10062, 2), - (10067, 10069, 2), - (10071, 10071, 2), - (10133, 10135, 2), - (10160, 10160, 2), - (10175, 10175, 2), - (11035, 11036, 2), - (11088, 11088, 2), - (11093, 11093, 2), - (11503, 11505, 0), - (11647, 11647, 0), - (11744, 11775, 0), - (11904, 11929, 2), - (11931, 12019, 2), - (12032, 12245, 2), - (12272, 12329, 2), - (12330, 12335, 0), - (12336, 12350, 2), - (12353, 12438, 2), - (12441, 12442, 0), - (12443, 12543, 2), - (12549, 12591, 2), - (12593, 12686, 2), - (12688, 12771, 2), - (12783, 12830, 2), - (12832, 12871, 2), - (12880, 19903, 2), - (19968, 42124, 2), - (42128, 42182, 2), - (42607, 42610, 0), - (42612, 42621, 0), - (42654, 42655, 0), - (42736, 42737, 0), - (43010, 43010, 0), - (43014, 43014, 0), - (43019, 43019, 0), - (43043, 43047, 0), - (43052, 43052, 0), - (43136, 43137, 0), - (43188, 43205, 0), - (43232, 43249, 0), - (43263, 43263, 0), - (43302, 43309, 0), - (43335, 43347, 0), - (43360, 43388, 2), - (43392, 43395, 0), - (43443, 43456, 0), - (43493, 43493, 0), - (43561, 43574, 0), - (43587, 43587, 0), - (43596, 43597, 0), - (43643, 43645, 0), - (43696, 43696, 0), - (43698, 43700, 0), - (43703, 43704, 0), - (43710, 43711, 0), - (43713, 43713, 0), - (43755, 43759, 0), - (43765, 43766, 0), - (44003, 44010, 0), - (44012, 44013, 0), - (44032, 55203, 2), - (55216, 55295, 0), - (63744, 64255, 2), - (64286, 64286, 0), - (65024, 65039, 0), - (65040, 65049, 2), - (65056, 65071, 0), - (65072, 65106, 2), - (65108, 65126, 2), - (65128, 65131, 2), - (65279, 65279, 0), - (65281, 65376, 2), - (65504, 65510, 2), - (65529, 65531, 0), - (66045, 66045, 0), - (66272, 66272, 0), - (66422, 66426, 0), - (68097, 68099, 0), - (68101, 68102, 0), - (68108, 68111, 0), - (68152, 68154, 0), - (68159, 68159, 0), - (68325, 68326, 0), - (68900, 68903, 0), - (69291, 69292, 0), - (69373, 69375, 0), - (69446, 69456, 0), - (69506, 69509, 0), - (69632, 69634, 0), - (69688, 69702, 0), - (69744, 69744, 0), - (69747, 69748, 0), - (69759, 69762, 0), - (69808, 69818, 0), - (69821, 69821, 0), - (69826, 69826, 0), - (69837, 69837, 0), - (69888, 69890, 0), - (69927, 69940, 0), - (69957, 69958, 0), - (70003, 70003, 0), - (70016, 70018, 0), - (70067, 70080, 0), - (70089, 70092, 0), - (70094, 70095, 0), - (70188, 70199, 0), - (70206, 70206, 0), - (70209, 70209, 0), - (70367, 70378, 0), - (70400, 70403, 0), - (70459, 70460, 0), - (70462, 70468, 0), - (70471, 70472, 0), - (70475, 70477, 0), - (70487, 70487, 0), - (70498, 70499, 0), - (70502, 70508, 0), - (70512, 70516, 0), - (70709, 70726, 0), - (70750, 70750, 0), - (70832, 70851, 0), - (71087, 71093, 0), - (71096, 71104, 0), - (71132, 71133, 0), - (71216, 71232, 0), - (71339, 71351, 0), - (71453, 71467, 0), - (71724, 71738, 0), - (71984, 71989, 0), - (71991, 71992, 0), - (71995, 71998, 0), - (72000, 72000, 0), - (72002, 72003, 0), - (72145, 72151, 0), - (72154, 72160, 0), - (72164, 72164, 0), - (72193, 72202, 0), - (72243, 72249, 0), - (72251, 72254, 0), - (72263, 72263, 0), - (72273, 72283, 0), - (72330, 72345, 0), - (72751, 72758, 0), - (72760, 72767, 0), - (72850, 72871, 0), - (72873, 72886, 0), - (73009, 73014, 0), - (73018, 73018, 0), - (73020, 73021, 0), - (73023, 73029, 0), - (73031, 73031, 0), - (73098, 73102, 0), - (73104, 73105, 0), - (73107, 73111, 0), - (73459, 73462, 0), - (73472, 73473, 0), - (73475, 73475, 0), - (73524, 73530, 0), - (73534, 73538, 0), - (78896, 78912, 0), - (78919, 78933, 0), - (92912, 92916, 0), - (92976, 92982, 0), - (94031, 94031, 0), - (94033, 94087, 0), - (94095, 94098, 0), - (94176, 94179, 2), - (94180, 94180, 0), - (94192, 94193, 0), - (94208, 100343, 2), - (100352, 101589, 2), - (101632, 101640, 2), - (110576, 110579, 2), - (110581, 110587, 2), - (110589, 110590, 2), - (110592, 110882, 2), - (110898, 110898, 2), - (110928, 110930, 2), - (110933, 110933, 2), - (110948, 110951, 2), - (110960, 111355, 2), - (113821, 113822, 0), - (113824, 113827, 0), - (118528, 118573, 0), - (118576, 118598, 0), - (119141, 119145, 0), - (119149, 119170, 0), - (119173, 119179, 0), - (119210, 119213, 0), - (119362, 119364, 0), - (121344, 121398, 0), - (121403, 121452, 0), - (121461, 121461, 0), - (121476, 121476, 0), - (121499, 121503, 0), - (121505, 121519, 0), - (122880, 122886, 0), - (122888, 122904, 0), - (122907, 122913, 0), - (122915, 122916, 0), - (122918, 122922, 0), - (123023, 123023, 0), - (123184, 123190, 0), - (123566, 123566, 0), - (123628, 123631, 0), - (124140, 124143, 0), - (125136, 125142, 0), - (125252, 125258, 0), - (126980, 126980, 2), - (127183, 127183, 2), - (127374, 127374, 2), - (127377, 127386, 2), - (127488, 127490, 2), - (127504, 127547, 2), - (127552, 127560, 2), - (127568, 127569, 2), - (127584, 127589, 2), - (127744, 127776, 2), - (127789, 127797, 2), - (127799, 127868, 2), - (127870, 127891, 2), - (127904, 127946, 2), - (127951, 127955, 2), - (127968, 127984, 2), - (127988, 127988, 2), - (127992, 127994, 2), - (127995, 127999, 0), - (128000, 128062, 2), - (128064, 128064, 2), - (128066, 128252, 2), - (128255, 128317, 2), - (128331, 128334, 2), - (128336, 128359, 2), - (128378, 128378, 2), - (128405, 128406, 2), - (128420, 128420, 2), - (128507, 128591, 2), - (128640, 128709, 2), - (128716, 128716, 2), - (128720, 128722, 2), - (128725, 128727, 2), - (128732, 128735, 2), - (128747, 128748, 2), - (128756, 128764, 2), - (128992, 129003, 2), - (129008, 129008, 2), - (129292, 129338, 2), - (129340, 129349, 2), - (129351, 129535, 2), - (129648, 129660, 2), - (129664, 129672, 2), - (129680, 129725, 2), - (129727, 129733, 2), - (129742, 129755, 2), - (129760, 129768, 2), - (129776, 129784, 2), - (131072, 196605, 2), - (196608, 262141, 2), - (917505, 917505, 0), - (917536, 917631, 0), - (917760, 917999, 0), -] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py deleted file mode 100644 index 1f2877bb2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +++ /dev/null @@ -1,3610 +0,0 @@ -EMOJI = { - "1st_place_medal": "🥇", - "2nd_place_medal": "🥈", - "3rd_place_medal": "🥉", - "ab_button_(blood_type)": "🆎", - "atm_sign": "🏧", - "a_button_(blood_type)": "🅰", - "afghanistan": "🇦🇫", - "albania": "🇦🇱", - "algeria": "🇩🇿", - "american_samoa": "🇦🇸", - "andorra": "🇦🇩", - "angola": "🇦🇴", - "anguilla": "🇦🇮", - "antarctica": "🇦🇶", - "antigua_&_barbuda": "🇦🇬", - "aquarius": "♒", - "argentina": "🇦🇷", - "aries": "♈", - "armenia": "🇦🇲", - "aruba": "🇦🇼", - "ascension_island": "🇦🇨", - "australia": "🇦🇺", - "austria": "🇦🇹", - "azerbaijan": "🇦🇿", - "back_arrow": "🔙", - "b_button_(blood_type)": "🅱", - "bahamas": "🇧🇸", - "bahrain": "🇧🇭", - "bangladesh": "🇧🇩", - "barbados": "🇧🇧", - "belarus": "🇧🇾", - "belgium": "🇧🇪", - "belize": "🇧🇿", - "benin": "🇧🇯", - "bermuda": "🇧🇲", - "bhutan": "🇧🇹", - "bolivia": "🇧🇴", - "bosnia_&_herzegovina": "🇧🇦", - "botswana": "🇧🇼", - "bouvet_island": "🇧🇻", - "brazil": "🇧🇷", - "british_indian_ocean_territory": "🇮🇴", - "british_virgin_islands": "🇻🇬", - "brunei": "🇧🇳", - "bulgaria": "🇧🇬", - "burkina_faso": "🇧🇫", - "burundi": "🇧🇮", - "cl_button": "🆑", - "cool_button": "🆒", - "cambodia": "🇰🇭", - "cameroon": "🇨🇲", - "canada": "🇨🇦", - "canary_islands": "🇮🇨", - "cancer": "♋", - "cape_verde": "🇨🇻", - "capricorn": "♑", - "caribbean_netherlands": "🇧🇶", - "cayman_islands": "🇰🇾", - "central_african_republic": "🇨🇫", - "ceuta_&_melilla": "🇪🇦", - "chad": "🇹🇩", - "chile": "🇨🇱", - "china": "🇨🇳", - "christmas_island": "🇨🇽", - "christmas_tree": "🎄", - "clipperton_island": "🇨🇵", - "cocos_(keeling)_islands": "🇨🇨", - "colombia": "🇨🇴", - "comoros": "🇰🇲", - "congo_-_brazzaville": "🇨🇬", - "congo_-_kinshasa": "🇨🇩", - "cook_islands": "🇨🇰", - "costa_rica": "🇨🇷", - "croatia": "🇭🇷", - "cuba": "🇨🇺", - "curaçao": "🇨🇼", - "cyprus": "🇨🇾", - "czechia": "🇨🇿", - "côte_d’ivoire": "🇨🇮", - "denmark": "🇩🇰", - "diego_garcia": "🇩🇬", - "djibouti": "🇩🇯", - "dominica": "🇩🇲", - "dominican_republic": "🇩🇴", - "end_arrow": "🔚", - "ecuador": "🇪🇨", - "egypt": "🇪🇬", - "el_salvador": "🇸🇻", - "england": "🏴\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", - "equatorial_guinea": "🇬🇶", - "eritrea": "🇪🇷", - "estonia": "🇪🇪", - "ethiopia": "🇪🇹", - "european_union": "🇪🇺", - "free_button": "🆓", - "falkland_islands": "🇫🇰", - "faroe_islands": "🇫🇴", - "fiji": "🇫🇯", - "finland": "🇫🇮", - "france": "🇫🇷", - "french_guiana": "🇬🇫", - "french_polynesia": "🇵🇫", - "french_southern_territories": "🇹🇫", - "gabon": "🇬🇦", - "gambia": "🇬🇲", - "gemini": "♊", - "georgia": "🇬🇪", - "germany": "🇩🇪", - "ghana": "🇬🇭", - "gibraltar": "🇬🇮", - "greece": "🇬🇷", - "greenland": "🇬🇱", - "grenada": "🇬🇩", - "guadeloupe": "🇬🇵", - "guam": "🇬🇺", - "guatemala": "🇬🇹", - "guernsey": "🇬🇬", - "guinea": "🇬🇳", - "guinea-bissau": "🇬🇼", - "guyana": "🇬🇾", - "haiti": "🇭🇹", - "heard_&_mcdonald_islands": "🇭🇲", - "honduras": "🇭🇳", - "hong_kong_sar_china": "🇭🇰", - "hungary": "🇭🇺", - "id_button": "🆔", - "iceland": "🇮🇸", - "india": "🇮🇳", - "indonesia": "🇮🇩", - "iran": "🇮🇷", - "iraq": "🇮🇶", - "ireland": "🇮🇪", - "isle_of_man": "🇮🇲", - "israel": "🇮🇱", - "italy": "🇮🇹", - "jamaica": "🇯🇲", - "japan": "🗾", - "japanese_acceptable_button": "🉑", - "japanese_application_button": "🈸", - "japanese_bargain_button": "🉐", - "japanese_castle": "🏯", - "japanese_congratulations_button": "㊗", - "japanese_discount_button": "🈹", - "japanese_dolls": "🎎", - "japanese_free_of_charge_button": "🈚", - "japanese_here_button": "🈁", - "japanese_monthly_amount_button": "🈷", - "japanese_no_vacancy_button": "🈵", - "japanese_not_free_of_charge_button": "🈶", - "japanese_open_for_business_button": "🈺", - "japanese_passing_grade_button": "🈴", - "japanese_post_office": "🏣", - "japanese_prohibited_button": "🈲", - "japanese_reserved_button": "🈯", - "japanese_secret_button": "㊙", - "japanese_service_charge_button": "🈂", - "japanese_symbol_for_beginner": "🔰", - "japanese_vacancy_button": "🈳", - "jersey": "🇯🇪", - "jordan": "🇯🇴", - "kazakhstan": "🇰🇿", - "kenya": "🇰🇪", - "kiribati": "🇰🇮", - "kosovo": "🇽🇰", - "kuwait": "🇰🇼", - "kyrgyzstan": "🇰🇬", - "laos": "🇱🇦", - "latvia": "🇱🇻", - "lebanon": "🇱🇧", - "leo": "♌", - "lesotho": "🇱🇸", - "liberia": "🇱🇷", - "libra": "♎", - "libya": "🇱🇾", - "liechtenstein": "🇱🇮", - "lithuania": "🇱🇹", - "luxembourg": "🇱🇺", - "macau_sar_china": "🇲🇴", - "macedonia": "🇲🇰", - "madagascar": "🇲🇬", - "malawi": "🇲🇼", - "malaysia": "🇲🇾", - "maldives": "🇲🇻", - "mali": "🇲🇱", - "malta": "🇲🇹", - "marshall_islands": "🇲🇭", - "martinique": "🇲🇶", - "mauritania": "🇲🇷", - "mauritius": "🇲🇺", - "mayotte": "🇾🇹", - "mexico": "🇲🇽", - "micronesia": "🇫🇲", - "moldova": "🇲🇩", - "monaco": "🇲🇨", - "mongolia": "🇲🇳", - "montenegro": "🇲🇪", - "montserrat": "🇲🇸", - "morocco": "🇲🇦", - "mozambique": "🇲🇿", - "mrs._claus": "🤶", - "mrs._claus_dark_skin_tone": "🤶🏿", - "mrs._claus_light_skin_tone": "🤶🏻", - "mrs._claus_medium-dark_skin_tone": "🤶🏾", - "mrs._claus_medium-light_skin_tone": "🤶🏼", - "mrs._claus_medium_skin_tone": "🤶🏽", - "myanmar_(burma)": "🇲🇲", - "new_button": "🆕", - "ng_button": "🆖", - "namibia": "🇳🇦", - "nauru": "🇳🇷", - "nepal": "🇳🇵", - "netherlands": "🇳🇱", - "new_caledonia": "🇳🇨", - "new_zealand": "🇳🇿", - "nicaragua": "🇳🇮", - "niger": "🇳🇪", - "nigeria": "🇳🇬", - "niue": "🇳🇺", - "norfolk_island": "🇳🇫", - "north_korea": "🇰🇵", - "northern_mariana_islands": "🇲🇵", - "norway": "🇳🇴", - "ok_button": "🆗", - "ok_hand": "👌", - "ok_hand_dark_skin_tone": "👌🏿", - "ok_hand_light_skin_tone": "👌🏻", - "ok_hand_medium-dark_skin_tone": "👌🏾", - "ok_hand_medium-light_skin_tone": "👌🏼", - "ok_hand_medium_skin_tone": "👌🏽", - "on!_arrow": "🔛", - "o_button_(blood_type)": "🅾", - "oman": "🇴🇲", - "ophiuchus": "⛎", - "p_button": "🅿", - "pakistan": "🇵🇰", - "palau": "🇵🇼", - "palestinian_territories": "🇵🇸", - "panama": "🇵🇦", - "papua_new_guinea": "🇵🇬", - "paraguay": "🇵🇾", - "peru": "🇵🇪", - "philippines": "🇵🇭", - "pisces": "♓", - "pitcairn_islands": "🇵🇳", - "poland": "🇵🇱", - "portugal": "🇵🇹", - "puerto_rico": "🇵🇷", - "qatar": "🇶🇦", - "romania": "🇷🇴", - "russia": "🇷🇺", - "rwanda": "🇷🇼", - "réunion": "🇷🇪", - "soon_arrow": "🔜", - "sos_button": "🆘", - "sagittarius": "♐", - "samoa": "🇼🇸", - "san_marino": "🇸🇲", - "santa_claus": "🎅", - "santa_claus_dark_skin_tone": "🎅🏿", - "santa_claus_light_skin_tone": "🎅🏻", - "santa_claus_medium-dark_skin_tone": "🎅🏾", - "santa_claus_medium-light_skin_tone": "🎅🏼", - "santa_claus_medium_skin_tone": "🎅🏽", - "saudi_arabia": "🇸🇦", - "scorpio": "♏", - "scotland": "🏴\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", - "senegal": "🇸🇳", - "serbia": "🇷🇸", - "seychelles": "🇸🇨", - "sierra_leone": "🇸🇱", - "singapore": "🇸🇬", - "sint_maarten": "🇸🇽", - "slovakia": "🇸🇰", - "slovenia": "🇸🇮", - "solomon_islands": "🇸🇧", - "somalia": "🇸🇴", - "south_africa": "🇿🇦", - "south_georgia_&_south_sandwich_islands": "🇬🇸", - "south_korea": "🇰🇷", - "south_sudan": "🇸🇸", - "spain": "🇪🇸", - "sri_lanka": "🇱🇰", - "st._barthélemy": "🇧🇱", - "st._helena": "🇸🇭", - "st._kitts_&_nevis": "🇰🇳", - "st._lucia": "🇱🇨", - "st._martin": "🇲🇫", - "st._pierre_&_miquelon": "🇵🇲", - "st._vincent_&_grenadines": "🇻🇨", - "statue_of_liberty": "🗽", - "sudan": "🇸🇩", - "suriname": "🇸🇷", - "svalbard_&_jan_mayen": "🇸🇯", - "swaziland": "🇸🇿", - "sweden": "🇸🇪", - "switzerland": "🇨🇭", - "syria": "🇸🇾", - "são_tomé_&_príncipe": "🇸🇹", - "t-rex": "🦖", - "top_arrow": "🔝", - "taiwan": "🇹🇼", - "tajikistan": "🇹🇯", - "tanzania": "🇹🇿", - "taurus": "♉", - "thailand": "🇹🇭", - "timor-leste": "🇹🇱", - "togo": "🇹🇬", - "tokelau": "🇹🇰", - "tokyo_tower": "🗼", - "tonga": "🇹🇴", - "trinidad_&_tobago": "🇹🇹", - "tristan_da_cunha": "🇹🇦", - "tunisia": "🇹🇳", - "turkey": "🦃", - "turkmenistan": "🇹🇲", - "turks_&_caicos_islands": "🇹🇨", - "tuvalu": "🇹🇻", - "u.s._outlying_islands": "🇺🇲", - "u.s._virgin_islands": "🇻🇮", - "up!_button": "🆙", - "uganda": "🇺🇬", - "ukraine": "🇺🇦", - "united_arab_emirates": "🇦🇪", - "united_kingdom": "🇬🇧", - "united_nations": "🇺🇳", - "united_states": "🇺🇸", - "uruguay": "🇺🇾", - "uzbekistan": "🇺🇿", - "vs_button": "🆚", - "vanuatu": "🇻🇺", - "vatican_city": "🇻🇦", - "venezuela": "🇻🇪", - "vietnam": "🇻🇳", - "virgo": "♍", - "wales": "🏴\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f", - "wallis_&_futuna": "🇼🇫", - "western_sahara": "🇪🇭", - "yemen": "🇾🇪", - "zambia": "🇿🇲", - "zimbabwe": "🇿🇼", - "abacus": "🧮", - "adhesive_bandage": "🩹", - "admission_tickets": "🎟", - "adult": "🧑", - "adult_dark_skin_tone": "🧑🏿", - "adult_light_skin_tone": "🧑🏻", - "adult_medium-dark_skin_tone": "🧑🏾", - "adult_medium-light_skin_tone": "🧑🏼", - "adult_medium_skin_tone": "🧑🏽", - "aerial_tramway": "🚡", - "airplane": "✈", - "airplane_arrival": "🛬", - "airplane_departure": "🛫", - "alarm_clock": "⏰", - "alembic": "⚗", - "alien": "👽", - "alien_monster": "👾", - "ambulance": "🚑", - "american_football": "🏈", - "amphora": "🏺", - "anchor": "⚓", - "anger_symbol": "💢", - "angry_face": "😠", - "angry_face_with_horns": "👿", - "anguished_face": "😧", - "ant": "🐜", - "antenna_bars": "📶", - "anxious_face_with_sweat": "😰", - "articulated_lorry": "🚛", - "artist_palette": "🎨", - "astonished_face": "😲", - "atom_symbol": "⚛", - "auto_rickshaw": "🛺", - "automobile": "🚗", - "avocado": "🥑", - "axe": "🪓", - "baby": "👶", - "baby_angel": "👼", - "baby_angel_dark_skin_tone": "👼🏿", - "baby_angel_light_skin_tone": "👼🏻", - "baby_angel_medium-dark_skin_tone": "👼🏾", - "baby_angel_medium-light_skin_tone": "👼🏼", - "baby_angel_medium_skin_tone": "👼🏽", - "baby_bottle": "🍼", - "baby_chick": "🐤", - "baby_dark_skin_tone": "👶🏿", - "baby_light_skin_tone": "👶🏻", - "baby_medium-dark_skin_tone": "👶🏾", - "baby_medium-light_skin_tone": "👶🏼", - "baby_medium_skin_tone": "👶🏽", - "baby_symbol": "🚼", - "backhand_index_pointing_down": "👇", - "backhand_index_pointing_down_dark_skin_tone": "👇🏿", - "backhand_index_pointing_down_light_skin_tone": "👇🏻", - "backhand_index_pointing_down_medium-dark_skin_tone": "👇🏾", - "backhand_index_pointing_down_medium-light_skin_tone": "👇🏼", - "backhand_index_pointing_down_medium_skin_tone": "👇🏽", - "backhand_index_pointing_left": "👈", - "backhand_index_pointing_left_dark_skin_tone": "👈🏿", - "backhand_index_pointing_left_light_skin_tone": "👈🏻", - "backhand_index_pointing_left_medium-dark_skin_tone": "👈🏾", - "backhand_index_pointing_left_medium-light_skin_tone": "👈🏼", - "backhand_index_pointing_left_medium_skin_tone": "👈🏽", - "backhand_index_pointing_right": "👉", - "backhand_index_pointing_right_dark_skin_tone": "👉🏿", - "backhand_index_pointing_right_light_skin_tone": "👉🏻", - "backhand_index_pointing_right_medium-dark_skin_tone": "👉🏾", - "backhand_index_pointing_right_medium-light_skin_tone": "👉🏼", - "backhand_index_pointing_right_medium_skin_tone": "👉🏽", - "backhand_index_pointing_up": "👆", - "backhand_index_pointing_up_dark_skin_tone": "👆🏿", - "backhand_index_pointing_up_light_skin_tone": "👆🏻", - "backhand_index_pointing_up_medium-dark_skin_tone": "👆🏾", - "backhand_index_pointing_up_medium-light_skin_tone": "👆🏼", - "backhand_index_pointing_up_medium_skin_tone": "👆🏽", - "bacon": "🥓", - "badger": "🦡", - "badminton": "🏸", - "bagel": "🥯", - "baggage_claim": "🛄", - "baguette_bread": "🥖", - "balance_scale": "⚖", - "bald": "🦲", - "bald_man": "👨\u200d🦲", - "bald_woman": "👩\u200d🦲", - "ballet_shoes": "🩰", - "balloon": "🎈", - "ballot_box_with_ballot": "🗳", - "ballot_box_with_check": "☑", - "banana": "🍌", - "banjo": "🪕", - "bank": "🏦", - "bar_chart": "📊", - "barber_pole": "💈", - "baseball": "⚾", - "basket": "🧺", - "basketball": "🏀", - "bat": "🦇", - "bathtub": "🛁", - "battery": "🔋", - "beach_with_umbrella": "🏖", - "beaming_face_with_smiling_eyes": "😁", - "bear_face": "🐻", - "bearded_person": "🧔", - "bearded_person_dark_skin_tone": "🧔🏿", - "bearded_person_light_skin_tone": "🧔🏻", - "bearded_person_medium-dark_skin_tone": "🧔🏾", - "bearded_person_medium-light_skin_tone": "🧔🏼", - "bearded_person_medium_skin_tone": "🧔🏽", - "beating_heart": "💓", - "bed": "🛏", - "beer_mug": "🍺", - "bell": "🔔", - "bell_with_slash": "🔕", - "bellhop_bell": "🛎", - "bento_box": "🍱", - "beverage_box": "🧃", - "bicycle": "🚲", - "bikini": "👙", - "billed_cap": "🧢", - "biohazard": "☣", - "bird": "🐦", - "birthday_cake": "🎂", - "black_circle": "⚫", - "black_flag": "🏴", - "black_heart": "🖤", - "black_large_square": "⬛", - "black_medium-small_square": "◾", - "black_medium_square": "◼", - "black_nib": "✒", - "black_small_square": "▪", - "black_square_button": "🔲", - "blond-haired_man": "👱\u200d♂️", - "blond-haired_man_dark_skin_tone": "👱🏿\u200d♂️", - "blond-haired_man_light_skin_tone": "👱🏻\u200d♂️", - "blond-haired_man_medium-dark_skin_tone": "👱🏾\u200d♂️", - "blond-haired_man_medium-light_skin_tone": "👱🏼\u200d♂️", - "blond-haired_man_medium_skin_tone": "👱🏽\u200d♂️", - "blond-haired_person": "👱", - "blond-haired_person_dark_skin_tone": "👱🏿", - "blond-haired_person_light_skin_tone": "👱🏻", - "blond-haired_person_medium-dark_skin_tone": "👱🏾", - "blond-haired_person_medium-light_skin_tone": "👱🏼", - "blond-haired_person_medium_skin_tone": "👱🏽", - "blond-haired_woman": "👱\u200d♀️", - "blond-haired_woman_dark_skin_tone": "👱🏿\u200d♀️", - "blond-haired_woman_light_skin_tone": "👱🏻\u200d♀️", - "blond-haired_woman_medium-dark_skin_tone": "👱🏾\u200d♀️", - "blond-haired_woman_medium-light_skin_tone": "👱🏼\u200d♀️", - "blond-haired_woman_medium_skin_tone": "👱🏽\u200d♀️", - "blossom": "🌼", - "blowfish": "🐡", - "blue_book": "📘", - "blue_circle": "🔵", - "blue_heart": "💙", - "blue_square": "🟦", - "boar": "🐗", - "bomb": "💣", - "bone": "🦴", - "bookmark": "🔖", - "bookmark_tabs": "📑", - "books": "📚", - "bottle_with_popping_cork": "🍾", - "bouquet": "💐", - "bow_and_arrow": "🏹", - "bowl_with_spoon": "🥣", - "bowling": "🎳", - "boxing_glove": "🥊", - "boy": "👦", - "boy_dark_skin_tone": "👦🏿", - "boy_light_skin_tone": "👦🏻", - "boy_medium-dark_skin_tone": "👦🏾", - "boy_medium-light_skin_tone": "👦🏼", - "boy_medium_skin_tone": "👦🏽", - "brain": "🧠", - "bread": "🍞", - "breast-feeding": "🤱", - "breast-feeding_dark_skin_tone": "🤱🏿", - "breast-feeding_light_skin_tone": "🤱🏻", - "breast-feeding_medium-dark_skin_tone": "🤱🏾", - "breast-feeding_medium-light_skin_tone": "🤱🏼", - "breast-feeding_medium_skin_tone": "🤱🏽", - "brick": "🧱", - "bride_with_veil": "👰", - "bride_with_veil_dark_skin_tone": "👰🏿", - "bride_with_veil_light_skin_tone": "👰🏻", - "bride_with_veil_medium-dark_skin_tone": "👰🏾", - "bride_with_veil_medium-light_skin_tone": "👰🏼", - "bride_with_veil_medium_skin_tone": "👰🏽", - "bridge_at_night": "🌉", - "briefcase": "💼", - "briefs": "🩲", - "bright_button": "🔆", - "broccoli": "🥦", - "broken_heart": "💔", - "broom": "🧹", - "brown_circle": "🟤", - "brown_heart": "🤎", - "brown_square": "🟫", - "bug": "🐛", - "building_construction": "🏗", - "bullet_train": "🚅", - "burrito": "🌯", - "bus": "🚌", - "bus_stop": "🚏", - "bust_in_silhouette": "👤", - "busts_in_silhouette": "👥", - "butter": "🧈", - "butterfly": "🦋", - "cactus": "🌵", - "calendar": "📆", - "call_me_hand": "🤙", - "call_me_hand_dark_skin_tone": "🤙🏿", - "call_me_hand_light_skin_tone": "🤙🏻", - "call_me_hand_medium-dark_skin_tone": "🤙🏾", - "call_me_hand_medium-light_skin_tone": "🤙🏼", - "call_me_hand_medium_skin_tone": "🤙🏽", - "camel": "🐫", - "camera": "📷", - "camera_with_flash": "📸", - "camping": "🏕", - "candle": "🕯", - "candy": "🍬", - "canned_food": "🥫", - "canoe": "🛶", - "card_file_box": "🗃", - "card_index": "📇", - "card_index_dividers": "🗂", - "carousel_horse": "🎠", - "carp_streamer": "🎏", - "carrot": "🥕", - "castle": "🏰", - "cat": "🐱", - "cat_face": "🐱", - "cat_face_with_tears_of_joy": "😹", - "cat_face_with_wry_smile": "😼", - "chains": "⛓", - "chair": "🪑", - "chart_decreasing": "📉", - "chart_increasing": "📈", - "chart_increasing_with_yen": "💹", - "cheese_wedge": "🧀", - "chequered_flag": "🏁", - "cherries": "🍒", - "cherry_blossom": "🌸", - "chess_pawn": "♟", - "chestnut": "🌰", - "chicken": "🐔", - "child": "🧒", - "child_dark_skin_tone": "🧒🏿", - "child_light_skin_tone": "🧒🏻", - "child_medium-dark_skin_tone": "🧒🏾", - "child_medium-light_skin_tone": "🧒🏼", - "child_medium_skin_tone": "🧒🏽", - "children_crossing": "🚸", - "chipmunk": "🐿", - "chocolate_bar": "🍫", - "chopsticks": "🥢", - "church": "⛪", - "cigarette": "🚬", - "cinema": "🎦", - "circled_m": "Ⓜ", - "circus_tent": "🎪", - "cityscape": "🏙", - "cityscape_at_dusk": "🌆", - "clamp": "🗜", - "clapper_board": "🎬", - "clapping_hands": "👏", - "clapping_hands_dark_skin_tone": "👏🏿", - "clapping_hands_light_skin_tone": "👏🏻", - "clapping_hands_medium-dark_skin_tone": "👏🏾", - "clapping_hands_medium-light_skin_tone": "👏🏼", - "clapping_hands_medium_skin_tone": "👏🏽", - "classical_building": "🏛", - "clinking_beer_mugs": "🍻", - "clinking_glasses": "🥂", - "clipboard": "📋", - "clockwise_vertical_arrows": "🔃", - "closed_book": "📕", - "closed_mailbox_with_lowered_flag": "📪", - "closed_mailbox_with_raised_flag": "📫", - "closed_umbrella": "🌂", - "cloud": "☁", - "cloud_with_lightning": "🌩", - "cloud_with_lightning_and_rain": "⛈", - "cloud_with_rain": "🌧", - "cloud_with_snow": "🌨", - "clown_face": "🤡", - "club_suit": "♣", - "clutch_bag": "👝", - "coat": "🧥", - "cocktail_glass": "🍸", - "coconut": "🥥", - "coffin": "⚰", - "cold_face": "🥶", - "collision": "💥", - "comet": "☄", - "compass": "🧭", - "computer_disk": "💽", - "computer_mouse": "🖱", - "confetti_ball": "🎊", - "confounded_face": "😖", - "confused_face": "😕", - "construction": "🚧", - "construction_worker": "👷", - "construction_worker_dark_skin_tone": "👷🏿", - "construction_worker_light_skin_tone": "👷🏻", - "construction_worker_medium-dark_skin_tone": "👷🏾", - "construction_worker_medium-light_skin_tone": "👷🏼", - "construction_worker_medium_skin_tone": "👷🏽", - "control_knobs": "🎛", - "convenience_store": "🏪", - "cooked_rice": "🍚", - "cookie": "🍪", - "cooking": "🍳", - "copyright": "©", - "couch_and_lamp": "🛋", - "counterclockwise_arrows_button": "🔄", - "couple_with_heart": "💑", - "couple_with_heart_man_man": "👨\u200d❤️\u200d👨", - "couple_with_heart_woman_man": "👩\u200d❤️\u200d👨", - "couple_with_heart_woman_woman": "👩\u200d❤️\u200d👩", - "cow": "🐮", - "cow_face": "🐮", - "cowboy_hat_face": "🤠", - "crab": "🦀", - "crayon": "🖍", - "credit_card": "💳", - "crescent_moon": "🌙", - "cricket": "🦗", - "cricket_game": "🏏", - "crocodile": "🐊", - "croissant": "🥐", - "cross_mark": "❌", - "cross_mark_button": "❎", - "crossed_fingers": "🤞", - "crossed_fingers_dark_skin_tone": "🤞🏿", - "crossed_fingers_light_skin_tone": "🤞🏻", - "crossed_fingers_medium-dark_skin_tone": "🤞🏾", - "crossed_fingers_medium-light_skin_tone": "🤞🏼", - "crossed_fingers_medium_skin_tone": "🤞🏽", - "crossed_flags": "🎌", - "crossed_swords": "⚔", - "crown": "👑", - "crying_cat_face": "😿", - "crying_face": "😢", - "crystal_ball": "🔮", - "cucumber": "🥒", - "cupcake": "🧁", - "cup_with_straw": "🥤", - "curling_stone": "🥌", - "curly_hair": "🦱", - "curly-haired_man": "👨\u200d🦱", - "curly-haired_woman": "👩\u200d🦱", - "curly_loop": "➰", - "currency_exchange": "💱", - "curry_rice": "🍛", - "custard": "🍮", - "customs": "🛃", - "cut_of_meat": "🥩", - "cyclone": "🌀", - "dagger": "🗡", - "dango": "🍡", - "dashing_away": "💨", - "deaf_person": "🧏", - "deciduous_tree": "🌳", - "deer": "🦌", - "delivery_truck": "🚚", - "department_store": "🏬", - "derelict_house": "🏚", - "desert": "🏜", - "desert_island": "🏝", - "desktop_computer": "🖥", - "detective": "🕵", - "detective_dark_skin_tone": "🕵🏿", - "detective_light_skin_tone": "🕵🏻", - "detective_medium-dark_skin_tone": "🕵🏾", - "detective_medium-light_skin_tone": "🕵🏼", - "detective_medium_skin_tone": "🕵🏽", - "diamond_suit": "♦", - "diamond_with_a_dot": "💠", - "dim_button": "🔅", - "direct_hit": "🎯", - "disappointed_face": "😞", - "diving_mask": "🤿", - "diya_lamp": "🪔", - "dizzy": "💫", - "dizzy_face": "😵", - "dna": "🧬", - "dog": "🐶", - "dog_face": "🐶", - "dollar_banknote": "💵", - "dolphin": "🐬", - "door": "🚪", - "dotted_six-pointed_star": "🔯", - "double_curly_loop": "➿", - "double_exclamation_mark": "‼", - "doughnut": "🍩", - "dove": "🕊", - "down-left_arrow": "↙", - "down-right_arrow": "↘", - "down_arrow": "⬇", - "downcast_face_with_sweat": "😓", - "downwards_button": "🔽", - "dragon": "🐉", - "dragon_face": "🐲", - "dress": "👗", - "drooling_face": "🤤", - "drop_of_blood": "🩸", - "droplet": "💧", - "drum": "🥁", - "duck": "🦆", - "dumpling": "🥟", - "dvd": "📀", - "e-mail": "📧", - "eagle": "🦅", - "ear": "👂", - "ear_dark_skin_tone": "👂🏿", - "ear_light_skin_tone": "👂🏻", - "ear_medium-dark_skin_tone": "👂🏾", - "ear_medium-light_skin_tone": "👂🏼", - "ear_medium_skin_tone": "👂🏽", - "ear_of_corn": "🌽", - "ear_with_hearing_aid": "🦻", - "egg": "🍳", - "eggplant": "🍆", - "eight-pointed_star": "✴", - "eight-spoked_asterisk": "✳", - "eight-thirty": "🕣", - "eight_o’clock": "🕗", - "eject_button": "⏏", - "electric_plug": "🔌", - "elephant": "🐘", - "eleven-thirty": "🕦", - "eleven_o’clock": "🕚", - "elf": "🧝", - "elf_dark_skin_tone": "🧝🏿", - "elf_light_skin_tone": "🧝🏻", - "elf_medium-dark_skin_tone": "🧝🏾", - "elf_medium-light_skin_tone": "🧝🏼", - "elf_medium_skin_tone": "🧝🏽", - "envelope": "✉", - "envelope_with_arrow": "📩", - "euro_banknote": "💶", - "evergreen_tree": "🌲", - "ewe": "🐑", - "exclamation_mark": "❗", - "exclamation_question_mark": "⁉", - "exploding_head": "🤯", - "expressionless_face": "😑", - "eye": "👁", - "eye_in_speech_bubble": "👁️\u200d🗨️", - "eyes": "👀", - "face_blowing_a_kiss": "😘", - "face_savoring_food": "😋", - "face_screaming_in_fear": "😱", - "face_vomiting": "🤮", - "face_with_hand_over_mouth": "🤭", - "face_with_head-bandage": "🤕", - "face_with_medical_mask": "😷", - "face_with_monocle": "🧐", - "face_with_open_mouth": "😮", - "face_with_raised_eyebrow": "🤨", - "face_with_rolling_eyes": "🙄", - "face_with_steam_from_nose": "😤", - "face_with_symbols_on_mouth": "🤬", - "face_with_tears_of_joy": "😂", - "face_with_thermometer": "🤒", - "face_with_tongue": "😛", - "face_without_mouth": "😶", - "factory": "🏭", - "fairy": "🧚", - "fairy_dark_skin_tone": "🧚🏿", - "fairy_light_skin_tone": "🧚🏻", - "fairy_medium-dark_skin_tone": "🧚🏾", - "fairy_medium-light_skin_tone": "🧚🏼", - "fairy_medium_skin_tone": "🧚🏽", - "falafel": "🧆", - "fallen_leaf": "🍂", - "family": "👪", - "family_man_boy": "👨\u200d👦", - "family_man_boy_boy": "👨\u200d👦\u200d👦", - "family_man_girl": "👨\u200d👧", - "family_man_girl_boy": "👨\u200d👧\u200d👦", - "family_man_girl_girl": "👨\u200d👧\u200d👧", - "family_man_man_boy": "👨\u200d👨\u200d👦", - "family_man_man_boy_boy": "👨\u200d👨\u200d👦\u200d👦", - "family_man_man_girl": "👨\u200d👨\u200d👧", - "family_man_man_girl_boy": "👨\u200d👨\u200d👧\u200d👦", - "family_man_man_girl_girl": "👨\u200d👨\u200d👧\u200d👧", - "family_man_woman_boy": "👨\u200d👩\u200d👦", - "family_man_woman_boy_boy": "👨\u200d👩\u200d👦\u200d👦", - "family_man_woman_girl": "👨\u200d👩\u200d👧", - "family_man_woman_girl_boy": "👨\u200d👩\u200d👧\u200d👦", - "family_man_woman_girl_girl": "👨\u200d👩\u200d👧\u200d👧", - "family_woman_boy": "👩\u200d👦", - "family_woman_boy_boy": "👩\u200d👦\u200d👦", - "family_woman_girl": "👩\u200d👧", - "family_woman_girl_boy": "👩\u200d👧\u200d👦", - "family_woman_girl_girl": "👩\u200d👧\u200d👧", - "family_woman_woman_boy": "👩\u200d👩\u200d👦", - "family_woman_woman_boy_boy": "👩\u200d👩\u200d👦\u200d👦", - "family_woman_woman_girl": "👩\u200d👩\u200d👧", - "family_woman_woman_girl_boy": "👩\u200d👩\u200d👧\u200d👦", - "family_woman_woman_girl_girl": "👩\u200d👩\u200d👧\u200d👧", - "fast-forward_button": "⏩", - "fast_down_button": "⏬", - "fast_reverse_button": "⏪", - "fast_up_button": "⏫", - "fax_machine": "📠", - "fearful_face": "😨", - "female_sign": "♀", - "ferris_wheel": "🎡", - "ferry": "⛴", - "field_hockey": "🏑", - "file_cabinet": "🗄", - "file_folder": "📁", - "film_frames": "🎞", - "film_projector": "📽", - "fire": "🔥", - "fire_extinguisher": "🧯", - "firecracker": "🧨", - "fire_engine": "🚒", - "fireworks": "🎆", - "first_quarter_moon": "🌓", - "first_quarter_moon_face": "🌛", - "fish": "🐟", - "fish_cake_with_swirl": "🍥", - "fishing_pole": "🎣", - "five-thirty": "🕠", - "five_o’clock": "🕔", - "flag_in_hole": "⛳", - "flamingo": "🦩", - "flashlight": "🔦", - "flat_shoe": "🥿", - "fleur-de-lis": "⚜", - "flexed_biceps": "💪", - "flexed_biceps_dark_skin_tone": "💪🏿", - "flexed_biceps_light_skin_tone": "💪🏻", - "flexed_biceps_medium-dark_skin_tone": "💪🏾", - "flexed_biceps_medium-light_skin_tone": "💪🏼", - "flexed_biceps_medium_skin_tone": "💪🏽", - "floppy_disk": "💾", - "flower_playing_cards": "🎴", - "flushed_face": "😳", - "flying_disc": "🥏", - "flying_saucer": "🛸", - "fog": "🌫", - "foggy": "🌁", - "folded_hands": "🙏", - "folded_hands_dark_skin_tone": "🙏🏿", - "folded_hands_light_skin_tone": "🙏🏻", - "folded_hands_medium-dark_skin_tone": "🙏🏾", - "folded_hands_medium-light_skin_tone": "🙏🏼", - "folded_hands_medium_skin_tone": "🙏🏽", - "foot": "🦶", - "footprints": "👣", - "fork_and_knife": "🍴", - "fork_and_knife_with_plate": "🍽", - "fortune_cookie": "🥠", - "fountain": "⛲", - "fountain_pen": "🖋", - "four-thirty": "🕟", - "four_leaf_clover": "🍀", - "four_o’clock": "🕓", - "fox_face": "🦊", - "framed_picture": "🖼", - "french_fries": "🍟", - "fried_shrimp": "🍤", - "frog_face": "🐸", - "front-facing_baby_chick": "🐥", - "frowning_face": "☹", - "frowning_face_with_open_mouth": "😦", - "fuel_pump": "⛽", - "full_moon": "🌕", - "full_moon_face": "🌝", - "funeral_urn": "⚱", - "game_die": "🎲", - "garlic": "🧄", - "gear": "⚙", - "gem_stone": "💎", - "genie": "🧞", - "ghost": "👻", - "giraffe": "🦒", - "girl": "👧", - "girl_dark_skin_tone": "👧🏿", - "girl_light_skin_tone": "👧🏻", - "girl_medium-dark_skin_tone": "👧🏾", - "girl_medium-light_skin_tone": "👧🏼", - "girl_medium_skin_tone": "👧🏽", - "glass_of_milk": "🥛", - "glasses": "👓", - "globe_showing_americas": "🌎", - "globe_showing_asia-australia": "🌏", - "globe_showing_europe-africa": "🌍", - "globe_with_meridians": "🌐", - "gloves": "🧤", - "glowing_star": "🌟", - "goal_net": "🥅", - "goat": "🐐", - "goblin": "👺", - "goggles": "🥽", - "gorilla": "🦍", - "graduation_cap": "🎓", - "grapes": "🍇", - "green_apple": "🍏", - "green_book": "📗", - "green_circle": "🟢", - "green_heart": "💚", - "green_salad": "🥗", - "green_square": "🟩", - "grimacing_face": "😬", - "grinning_cat_face": "😺", - "grinning_cat_face_with_smiling_eyes": "😸", - "grinning_face": "😀", - "grinning_face_with_big_eyes": "😃", - "grinning_face_with_smiling_eyes": "😄", - "grinning_face_with_sweat": "😅", - "grinning_squinting_face": "😆", - "growing_heart": "💗", - "guard": "💂", - "guard_dark_skin_tone": "💂🏿", - "guard_light_skin_tone": "💂🏻", - "guard_medium-dark_skin_tone": "💂🏾", - "guard_medium-light_skin_tone": "💂🏼", - "guard_medium_skin_tone": "💂🏽", - "guide_dog": "🦮", - "guitar": "🎸", - "hamburger": "🍔", - "hammer": "🔨", - "hammer_and_pick": "⚒", - "hammer_and_wrench": "🛠", - "hamster_face": "🐹", - "hand_with_fingers_splayed": "🖐", - "hand_with_fingers_splayed_dark_skin_tone": "🖐🏿", - "hand_with_fingers_splayed_light_skin_tone": "🖐🏻", - "hand_with_fingers_splayed_medium-dark_skin_tone": "🖐🏾", - "hand_with_fingers_splayed_medium-light_skin_tone": "🖐🏼", - "hand_with_fingers_splayed_medium_skin_tone": "🖐🏽", - "handbag": "👜", - "handshake": "🤝", - "hatching_chick": "🐣", - "headphone": "🎧", - "hear-no-evil_monkey": "🙉", - "heart_decoration": "💟", - "heart_suit": "♥", - "heart_with_arrow": "💘", - "heart_with_ribbon": "💝", - "heavy_check_mark": "✔", - "heavy_division_sign": "➗", - "heavy_dollar_sign": "💲", - "heavy_heart_exclamation": "❣", - "heavy_large_circle": "⭕", - "heavy_minus_sign": "➖", - "heavy_multiplication_x": "✖", - "heavy_plus_sign": "➕", - "hedgehog": "🦔", - "helicopter": "🚁", - "herb": "🌿", - "hibiscus": "🌺", - "high-heeled_shoe": "👠", - "high-speed_train": "🚄", - "high_voltage": "⚡", - "hiking_boot": "🥾", - "hindu_temple": "🛕", - "hippopotamus": "🦛", - "hole": "🕳", - "honey_pot": "🍯", - "honeybee": "🐝", - "horizontal_traffic_light": "🚥", - "horse": "🐴", - "horse_face": "🐴", - "horse_racing": "🏇", - "horse_racing_dark_skin_tone": "🏇🏿", - "horse_racing_light_skin_tone": "🏇🏻", - "horse_racing_medium-dark_skin_tone": "🏇🏾", - "horse_racing_medium-light_skin_tone": "🏇🏼", - "horse_racing_medium_skin_tone": "🏇🏽", - "hospital": "🏥", - "hot_beverage": "☕", - "hot_dog": "🌭", - "hot_face": "🥵", - "hot_pepper": "🌶", - "hot_springs": "♨", - "hotel": "🏨", - "hourglass_done": "⌛", - "hourglass_not_done": "⏳", - "house": "🏠", - "house_with_garden": "🏡", - "houses": "🏘", - "hugging_face": "🤗", - "hundred_points": "💯", - "hushed_face": "😯", - "ice": "🧊", - "ice_cream": "🍨", - "ice_hockey": "🏒", - "ice_skate": "⛸", - "inbox_tray": "📥", - "incoming_envelope": "📨", - "index_pointing_up": "☝", - "index_pointing_up_dark_skin_tone": "☝🏿", - "index_pointing_up_light_skin_tone": "☝🏻", - "index_pointing_up_medium-dark_skin_tone": "☝🏾", - "index_pointing_up_medium-light_skin_tone": "☝🏼", - "index_pointing_up_medium_skin_tone": "☝🏽", - "infinity": "♾", - "information": "ℹ", - "input_latin_letters": "🔤", - "input_latin_lowercase": "🔡", - "input_latin_uppercase": "🔠", - "input_numbers": "🔢", - "input_symbols": "🔣", - "jack-o-lantern": "🎃", - "jeans": "👖", - "jigsaw": "🧩", - "joker": "🃏", - "joystick": "🕹", - "kaaba": "🕋", - "kangaroo": "🦘", - "key": "🔑", - "keyboard": "⌨", - "keycap_#": "#️⃣", - "keycap_*": "*️⃣", - "keycap_0": "0️⃣", - "keycap_1": "1️⃣", - "keycap_10": "🔟", - "keycap_2": "2️⃣", - "keycap_3": "3️⃣", - "keycap_4": "4️⃣", - "keycap_5": "5️⃣", - "keycap_6": "6️⃣", - "keycap_7": "7️⃣", - "keycap_8": "8️⃣", - "keycap_9": "9️⃣", - "kick_scooter": "🛴", - "kimono": "👘", - "kiss": "💋", - "kiss_man_man": "👨\u200d❤️\u200d💋\u200d👨", - "kiss_mark": "💋", - "kiss_woman_man": "👩\u200d❤️\u200d💋\u200d👨", - "kiss_woman_woman": "👩\u200d❤️\u200d💋\u200d👩", - "kissing_cat_face": "😽", - "kissing_face": "😗", - "kissing_face_with_closed_eyes": "😚", - "kissing_face_with_smiling_eyes": "😙", - "kitchen_knife": "🔪", - "kite": "🪁", - "kiwi_fruit": "🥝", - "koala": "🐨", - "lab_coat": "🥼", - "label": "🏷", - "lacrosse": "🥍", - "lady_beetle": "🐞", - "laptop_computer": "💻", - "large_blue_diamond": "🔷", - "large_orange_diamond": "🔶", - "last_quarter_moon": "🌗", - "last_quarter_moon_face": "🌜", - "last_track_button": "⏮", - "latin_cross": "✝", - "leaf_fluttering_in_wind": "🍃", - "leafy_green": "🥬", - "ledger": "📒", - "left-facing_fist": "🤛", - "left-facing_fist_dark_skin_tone": "🤛🏿", - "left-facing_fist_light_skin_tone": "🤛🏻", - "left-facing_fist_medium-dark_skin_tone": "🤛🏾", - "left-facing_fist_medium-light_skin_tone": "🤛🏼", - "left-facing_fist_medium_skin_tone": "🤛🏽", - "left-right_arrow": "↔", - "left_arrow": "⬅", - "left_arrow_curving_right": "↪", - "left_luggage": "🛅", - "left_speech_bubble": "🗨", - "leg": "🦵", - "lemon": "🍋", - "leopard": "🐆", - "level_slider": "🎚", - "light_bulb": "💡", - "light_rail": "🚈", - "link": "🔗", - "linked_paperclips": "🖇", - "lion_face": "🦁", - "lipstick": "💄", - "litter_in_bin_sign": "🚮", - "lizard": "🦎", - "llama": "🦙", - "lobster": "🦞", - "locked": "🔒", - "locked_with_key": "🔐", - "locked_with_pen": "🔏", - "locomotive": "🚂", - "lollipop": "🍭", - "lotion_bottle": "🧴", - "loudly_crying_face": "😭", - "loudspeaker": "📢", - "love-you_gesture": "🤟", - "love-you_gesture_dark_skin_tone": "🤟🏿", - "love-you_gesture_light_skin_tone": "🤟🏻", - "love-you_gesture_medium-dark_skin_tone": "🤟🏾", - "love-you_gesture_medium-light_skin_tone": "🤟🏼", - "love-you_gesture_medium_skin_tone": "🤟🏽", - "love_hotel": "🏩", - "love_letter": "💌", - "luggage": "🧳", - "lying_face": "🤥", - "mage": "🧙", - "mage_dark_skin_tone": "🧙🏿", - "mage_light_skin_tone": "🧙🏻", - "mage_medium-dark_skin_tone": "🧙🏾", - "mage_medium-light_skin_tone": "🧙🏼", - "mage_medium_skin_tone": "🧙🏽", - "magnet": "🧲", - "magnifying_glass_tilted_left": "🔍", - "magnifying_glass_tilted_right": "🔎", - "mahjong_red_dragon": "🀄", - "male_sign": "♂", - "man": "👨", - "man_and_woman_holding_hands": "👫", - "man_artist": "👨\u200d🎨", - "man_artist_dark_skin_tone": "👨🏿\u200d🎨", - "man_artist_light_skin_tone": "👨🏻\u200d🎨", - "man_artist_medium-dark_skin_tone": "👨🏾\u200d🎨", - "man_artist_medium-light_skin_tone": "👨🏼\u200d🎨", - "man_artist_medium_skin_tone": "👨🏽\u200d🎨", - "man_astronaut": "👨\u200d🚀", - "man_astronaut_dark_skin_tone": "👨🏿\u200d🚀", - "man_astronaut_light_skin_tone": "👨🏻\u200d🚀", - "man_astronaut_medium-dark_skin_tone": "👨🏾\u200d🚀", - "man_astronaut_medium-light_skin_tone": "👨🏼\u200d🚀", - "man_astronaut_medium_skin_tone": "👨🏽\u200d🚀", - "man_biking": "🚴\u200d♂️", - "man_biking_dark_skin_tone": "🚴🏿\u200d♂️", - "man_biking_light_skin_tone": "🚴🏻\u200d♂️", - "man_biking_medium-dark_skin_tone": "🚴🏾\u200d♂️", - "man_biking_medium-light_skin_tone": "🚴🏼\u200d♂️", - "man_biking_medium_skin_tone": "🚴🏽\u200d♂️", - "man_bouncing_ball": "⛹️\u200d♂️", - "man_bouncing_ball_dark_skin_tone": "⛹🏿\u200d♂️", - "man_bouncing_ball_light_skin_tone": "⛹🏻\u200d♂️", - "man_bouncing_ball_medium-dark_skin_tone": "⛹🏾\u200d♂️", - "man_bouncing_ball_medium-light_skin_tone": "⛹🏼\u200d♂️", - "man_bouncing_ball_medium_skin_tone": "⛹🏽\u200d♂️", - "man_bowing": "🙇\u200d♂️", - "man_bowing_dark_skin_tone": "🙇🏿\u200d♂️", - "man_bowing_light_skin_tone": "🙇🏻\u200d♂️", - "man_bowing_medium-dark_skin_tone": "🙇🏾\u200d♂️", - "man_bowing_medium-light_skin_tone": "🙇🏼\u200d♂️", - "man_bowing_medium_skin_tone": "🙇🏽\u200d♂️", - "man_cartwheeling": "🤸\u200d♂️", - "man_cartwheeling_dark_skin_tone": "🤸🏿\u200d♂️", - "man_cartwheeling_light_skin_tone": "🤸🏻\u200d♂️", - "man_cartwheeling_medium-dark_skin_tone": "🤸🏾\u200d♂️", - "man_cartwheeling_medium-light_skin_tone": "🤸🏼\u200d♂️", - "man_cartwheeling_medium_skin_tone": "🤸🏽\u200d♂️", - "man_climbing": "🧗\u200d♂️", - "man_climbing_dark_skin_tone": "🧗🏿\u200d♂️", - "man_climbing_light_skin_tone": "🧗🏻\u200d♂️", - "man_climbing_medium-dark_skin_tone": "🧗🏾\u200d♂️", - "man_climbing_medium-light_skin_tone": "🧗🏼\u200d♂️", - "man_climbing_medium_skin_tone": "🧗🏽\u200d♂️", - "man_construction_worker": "👷\u200d♂️", - "man_construction_worker_dark_skin_tone": "👷🏿\u200d♂️", - "man_construction_worker_light_skin_tone": "👷🏻\u200d♂️", - "man_construction_worker_medium-dark_skin_tone": "👷🏾\u200d♂️", - "man_construction_worker_medium-light_skin_tone": "👷🏼\u200d♂️", - "man_construction_worker_medium_skin_tone": "👷🏽\u200d♂️", - "man_cook": "👨\u200d🍳", - "man_cook_dark_skin_tone": "👨🏿\u200d🍳", - "man_cook_light_skin_tone": "👨🏻\u200d🍳", - "man_cook_medium-dark_skin_tone": "👨🏾\u200d🍳", - "man_cook_medium-light_skin_tone": "👨🏼\u200d🍳", - "man_cook_medium_skin_tone": "👨🏽\u200d🍳", - "man_dancing": "🕺", - "man_dancing_dark_skin_tone": "🕺🏿", - "man_dancing_light_skin_tone": "🕺🏻", - "man_dancing_medium-dark_skin_tone": "🕺🏾", - "man_dancing_medium-light_skin_tone": "🕺🏼", - "man_dancing_medium_skin_tone": "🕺🏽", - "man_dark_skin_tone": "👨🏿", - "man_detective": "🕵️\u200d♂️", - "man_detective_dark_skin_tone": "🕵🏿\u200d♂️", - "man_detective_light_skin_tone": "🕵🏻\u200d♂️", - "man_detective_medium-dark_skin_tone": "🕵🏾\u200d♂️", - "man_detective_medium-light_skin_tone": "🕵🏼\u200d♂️", - "man_detective_medium_skin_tone": "🕵🏽\u200d♂️", - "man_elf": "🧝\u200d♂️", - "man_elf_dark_skin_tone": "🧝🏿\u200d♂️", - "man_elf_light_skin_tone": "🧝🏻\u200d♂️", - "man_elf_medium-dark_skin_tone": "🧝🏾\u200d♂️", - "man_elf_medium-light_skin_tone": "🧝🏼\u200d♂️", - "man_elf_medium_skin_tone": "🧝🏽\u200d♂️", - "man_facepalming": "🤦\u200d♂️", - "man_facepalming_dark_skin_tone": "🤦🏿\u200d♂️", - "man_facepalming_light_skin_tone": "🤦🏻\u200d♂️", - "man_facepalming_medium-dark_skin_tone": "🤦🏾\u200d♂️", - "man_facepalming_medium-light_skin_tone": "🤦🏼\u200d♂️", - "man_facepalming_medium_skin_tone": "🤦🏽\u200d♂️", - "man_factory_worker": "👨\u200d🏭", - "man_factory_worker_dark_skin_tone": "👨🏿\u200d🏭", - "man_factory_worker_light_skin_tone": "👨🏻\u200d🏭", - "man_factory_worker_medium-dark_skin_tone": "👨🏾\u200d🏭", - "man_factory_worker_medium-light_skin_tone": "👨🏼\u200d🏭", - "man_factory_worker_medium_skin_tone": "👨🏽\u200d🏭", - "man_fairy": "🧚\u200d♂️", - "man_fairy_dark_skin_tone": "🧚🏿\u200d♂️", - "man_fairy_light_skin_tone": "🧚🏻\u200d♂️", - "man_fairy_medium-dark_skin_tone": "🧚🏾\u200d♂️", - "man_fairy_medium-light_skin_tone": "🧚🏼\u200d♂️", - "man_fairy_medium_skin_tone": "🧚🏽\u200d♂️", - "man_farmer": "👨\u200d🌾", - "man_farmer_dark_skin_tone": "👨🏿\u200d🌾", - "man_farmer_light_skin_tone": "👨🏻\u200d🌾", - "man_farmer_medium-dark_skin_tone": "👨🏾\u200d🌾", - "man_farmer_medium-light_skin_tone": "👨🏼\u200d🌾", - "man_farmer_medium_skin_tone": "👨🏽\u200d🌾", - "man_firefighter": "👨\u200d🚒", - "man_firefighter_dark_skin_tone": "👨🏿\u200d🚒", - "man_firefighter_light_skin_tone": "👨🏻\u200d🚒", - "man_firefighter_medium-dark_skin_tone": "👨🏾\u200d🚒", - "man_firefighter_medium-light_skin_tone": "👨🏼\u200d🚒", - "man_firefighter_medium_skin_tone": "👨🏽\u200d🚒", - "man_frowning": "🙍\u200d♂️", - "man_frowning_dark_skin_tone": "🙍🏿\u200d♂️", - "man_frowning_light_skin_tone": "🙍🏻\u200d♂️", - "man_frowning_medium-dark_skin_tone": "🙍🏾\u200d♂️", - "man_frowning_medium-light_skin_tone": "🙍🏼\u200d♂️", - "man_frowning_medium_skin_tone": "🙍🏽\u200d♂️", - "man_genie": "🧞\u200d♂️", - "man_gesturing_no": "🙅\u200d♂️", - "man_gesturing_no_dark_skin_tone": "🙅🏿\u200d♂️", - "man_gesturing_no_light_skin_tone": "🙅🏻\u200d♂️", - "man_gesturing_no_medium-dark_skin_tone": "🙅🏾\u200d♂️", - "man_gesturing_no_medium-light_skin_tone": "🙅🏼\u200d♂️", - "man_gesturing_no_medium_skin_tone": "🙅🏽\u200d♂️", - "man_gesturing_ok": "🙆\u200d♂️", - "man_gesturing_ok_dark_skin_tone": "🙆🏿\u200d♂️", - "man_gesturing_ok_light_skin_tone": "🙆🏻\u200d♂️", - "man_gesturing_ok_medium-dark_skin_tone": "🙆🏾\u200d♂️", - "man_gesturing_ok_medium-light_skin_tone": "🙆🏼\u200d♂️", - "man_gesturing_ok_medium_skin_tone": "🙆🏽\u200d♂️", - "man_getting_haircut": "💇\u200d♂️", - "man_getting_haircut_dark_skin_tone": "💇🏿\u200d♂️", - "man_getting_haircut_light_skin_tone": "💇🏻\u200d♂️", - "man_getting_haircut_medium-dark_skin_tone": "💇🏾\u200d♂️", - "man_getting_haircut_medium-light_skin_tone": "💇🏼\u200d♂️", - "man_getting_haircut_medium_skin_tone": "💇🏽\u200d♂️", - "man_getting_massage": "💆\u200d♂️", - "man_getting_massage_dark_skin_tone": "💆🏿\u200d♂️", - "man_getting_massage_light_skin_tone": "💆🏻\u200d♂️", - "man_getting_massage_medium-dark_skin_tone": "💆🏾\u200d♂️", - "man_getting_massage_medium-light_skin_tone": "💆🏼\u200d♂️", - "man_getting_massage_medium_skin_tone": "💆🏽\u200d♂️", - "man_golfing": "🏌️\u200d♂️", - "man_golfing_dark_skin_tone": "🏌🏿\u200d♂️", - "man_golfing_light_skin_tone": "🏌🏻\u200d♂️", - "man_golfing_medium-dark_skin_tone": "🏌🏾\u200d♂️", - "man_golfing_medium-light_skin_tone": "🏌🏼\u200d♂️", - "man_golfing_medium_skin_tone": "🏌🏽\u200d♂️", - "man_guard": "💂\u200d♂️", - "man_guard_dark_skin_tone": "💂🏿\u200d♂️", - "man_guard_light_skin_tone": "💂🏻\u200d♂️", - "man_guard_medium-dark_skin_tone": "💂🏾\u200d♂️", - "man_guard_medium-light_skin_tone": "💂🏼\u200d♂️", - "man_guard_medium_skin_tone": "💂🏽\u200d♂️", - "man_health_worker": "👨\u200d⚕️", - "man_health_worker_dark_skin_tone": "👨🏿\u200d⚕️", - "man_health_worker_light_skin_tone": "👨🏻\u200d⚕️", - "man_health_worker_medium-dark_skin_tone": "👨🏾\u200d⚕️", - "man_health_worker_medium-light_skin_tone": "👨🏼\u200d⚕️", - "man_health_worker_medium_skin_tone": "👨🏽\u200d⚕️", - "man_in_lotus_position": "🧘\u200d♂️", - "man_in_lotus_position_dark_skin_tone": "🧘🏿\u200d♂️", - "man_in_lotus_position_light_skin_tone": "🧘🏻\u200d♂️", - "man_in_lotus_position_medium-dark_skin_tone": "🧘🏾\u200d♂️", - "man_in_lotus_position_medium-light_skin_tone": "🧘🏼\u200d♂️", - "man_in_lotus_position_medium_skin_tone": "🧘🏽\u200d♂️", - "man_in_manual_wheelchair": "👨\u200d🦽", - "man_in_motorized_wheelchair": "👨\u200d🦼", - "man_in_steamy_room": "🧖\u200d♂️", - "man_in_steamy_room_dark_skin_tone": "🧖🏿\u200d♂️", - "man_in_steamy_room_light_skin_tone": "🧖🏻\u200d♂️", - "man_in_steamy_room_medium-dark_skin_tone": "🧖🏾\u200d♂️", - "man_in_steamy_room_medium-light_skin_tone": "🧖🏼\u200d♂️", - "man_in_steamy_room_medium_skin_tone": "🧖🏽\u200d♂️", - "man_in_suit_levitating": "🕴", - "man_in_suit_levitating_dark_skin_tone": "🕴🏿", - "man_in_suit_levitating_light_skin_tone": "🕴🏻", - "man_in_suit_levitating_medium-dark_skin_tone": "🕴🏾", - "man_in_suit_levitating_medium-light_skin_tone": "🕴🏼", - "man_in_suit_levitating_medium_skin_tone": "🕴🏽", - "man_in_tuxedo": "🤵", - "man_in_tuxedo_dark_skin_tone": "🤵🏿", - "man_in_tuxedo_light_skin_tone": "🤵🏻", - "man_in_tuxedo_medium-dark_skin_tone": "🤵🏾", - "man_in_tuxedo_medium-light_skin_tone": "🤵🏼", - "man_in_tuxedo_medium_skin_tone": "🤵🏽", - "man_judge": "👨\u200d⚖️", - "man_judge_dark_skin_tone": "👨🏿\u200d⚖️", - "man_judge_light_skin_tone": "👨🏻\u200d⚖️", - "man_judge_medium-dark_skin_tone": "👨🏾\u200d⚖️", - "man_judge_medium-light_skin_tone": "👨🏼\u200d⚖️", - "man_judge_medium_skin_tone": "👨🏽\u200d⚖️", - "man_juggling": "🤹\u200d♂️", - "man_juggling_dark_skin_tone": "🤹🏿\u200d♂️", - "man_juggling_light_skin_tone": "🤹🏻\u200d♂️", - "man_juggling_medium-dark_skin_tone": "🤹🏾\u200d♂️", - "man_juggling_medium-light_skin_tone": "🤹🏼\u200d♂️", - "man_juggling_medium_skin_tone": "🤹🏽\u200d♂️", - "man_lifting_weights": "🏋️\u200d♂️", - "man_lifting_weights_dark_skin_tone": "🏋🏿\u200d♂️", - "man_lifting_weights_light_skin_tone": "🏋🏻\u200d♂️", - "man_lifting_weights_medium-dark_skin_tone": "🏋🏾\u200d♂️", - "man_lifting_weights_medium-light_skin_tone": "🏋🏼\u200d♂️", - "man_lifting_weights_medium_skin_tone": "🏋🏽\u200d♂️", - "man_light_skin_tone": "👨🏻", - "man_mage": "🧙\u200d♂️", - "man_mage_dark_skin_tone": "🧙🏿\u200d♂️", - "man_mage_light_skin_tone": "🧙🏻\u200d♂️", - "man_mage_medium-dark_skin_tone": "🧙🏾\u200d♂️", - "man_mage_medium-light_skin_tone": "🧙🏼\u200d♂️", - "man_mage_medium_skin_tone": "🧙🏽\u200d♂️", - "man_mechanic": "👨\u200d🔧", - "man_mechanic_dark_skin_tone": "👨🏿\u200d🔧", - "man_mechanic_light_skin_tone": "👨🏻\u200d🔧", - "man_mechanic_medium-dark_skin_tone": "👨🏾\u200d🔧", - "man_mechanic_medium-light_skin_tone": "👨🏼\u200d🔧", - "man_mechanic_medium_skin_tone": "👨🏽\u200d🔧", - "man_medium-dark_skin_tone": "👨🏾", - "man_medium-light_skin_tone": "👨🏼", - "man_medium_skin_tone": "👨🏽", - "man_mountain_biking": "🚵\u200d♂️", - "man_mountain_biking_dark_skin_tone": "🚵🏿\u200d♂️", - "man_mountain_biking_light_skin_tone": "🚵🏻\u200d♂️", - "man_mountain_biking_medium-dark_skin_tone": "🚵🏾\u200d♂️", - "man_mountain_biking_medium-light_skin_tone": "🚵🏼\u200d♂️", - "man_mountain_biking_medium_skin_tone": "🚵🏽\u200d♂️", - "man_office_worker": "👨\u200d💼", - "man_office_worker_dark_skin_tone": "👨🏿\u200d💼", - "man_office_worker_light_skin_tone": "👨🏻\u200d💼", - "man_office_worker_medium-dark_skin_tone": "👨🏾\u200d💼", - "man_office_worker_medium-light_skin_tone": "👨🏼\u200d💼", - "man_office_worker_medium_skin_tone": "👨🏽\u200d💼", - "man_pilot": "👨\u200d✈️", - "man_pilot_dark_skin_tone": "👨🏿\u200d✈️", - "man_pilot_light_skin_tone": "👨🏻\u200d✈️", - "man_pilot_medium-dark_skin_tone": "👨🏾\u200d✈️", - "man_pilot_medium-light_skin_tone": "👨🏼\u200d✈️", - "man_pilot_medium_skin_tone": "👨🏽\u200d✈️", - "man_playing_handball": "🤾\u200d♂️", - "man_playing_handball_dark_skin_tone": "🤾🏿\u200d♂️", - "man_playing_handball_light_skin_tone": "🤾🏻\u200d♂️", - "man_playing_handball_medium-dark_skin_tone": "🤾🏾\u200d♂️", - "man_playing_handball_medium-light_skin_tone": "🤾🏼\u200d♂️", - "man_playing_handball_medium_skin_tone": "🤾🏽\u200d♂️", - "man_playing_water_polo": "🤽\u200d♂️", - "man_playing_water_polo_dark_skin_tone": "🤽🏿\u200d♂️", - "man_playing_water_polo_light_skin_tone": "🤽🏻\u200d♂️", - "man_playing_water_polo_medium-dark_skin_tone": "🤽🏾\u200d♂️", - "man_playing_water_polo_medium-light_skin_tone": "🤽🏼\u200d♂️", - "man_playing_water_polo_medium_skin_tone": "🤽🏽\u200d♂️", - "man_police_officer": "👮\u200d♂️", - "man_police_officer_dark_skin_tone": "👮🏿\u200d♂️", - "man_police_officer_light_skin_tone": "👮🏻\u200d♂️", - "man_police_officer_medium-dark_skin_tone": "👮🏾\u200d♂️", - "man_police_officer_medium-light_skin_tone": "👮🏼\u200d♂️", - "man_police_officer_medium_skin_tone": "👮🏽\u200d♂️", - "man_pouting": "🙎\u200d♂️", - "man_pouting_dark_skin_tone": "🙎🏿\u200d♂️", - "man_pouting_light_skin_tone": "🙎🏻\u200d♂️", - "man_pouting_medium-dark_skin_tone": "🙎🏾\u200d♂️", - "man_pouting_medium-light_skin_tone": "🙎🏼\u200d♂️", - "man_pouting_medium_skin_tone": "🙎🏽\u200d♂️", - "man_raising_hand": "🙋\u200d♂️", - "man_raising_hand_dark_skin_tone": "🙋🏿\u200d♂️", - "man_raising_hand_light_skin_tone": "🙋🏻\u200d♂️", - "man_raising_hand_medium-dark_skin_tone": "🙋🏾\u200d♂️", - "man_raising_hand_medium-light_skin_tone": "🙋🏼\u200d♂️", - "man_raising_hand_medium_skin_tone": "🙋🏽\u200d♂️", - "man_rowing_boat": "🚣\u200d♂️", - "man_rowing_boat_dark_skin_tone": "🚣🏿\u200d♂️", - "man_rowing_boat_light_skin_tone": "🚣🏻\u200d♂️", - "man_rowing_boat_medium-dark_skin_tone": "🚣🏾\u200d♂️", - "man_rowing_boat_medium-light_skin_tone": "🚣🏼\u200d♂️", - "man_rowing_boat_medium_skin_tone": "🚣🏽\u200d♂️", - "man_running": "🏃\u200d♂️", - "man_running_dark_skin_tone": "🏃🏿\u200d♂️", - "man_running_light_skin_tone": "🏃🏻\u200d♂️", - "man_running_medium-dark_skin_tone": "🏃🏾\u200d♂️", - "man_running_medium-light_skin_tone": "🏃🏼\u200d♂️", - "man_running_medium_skin_tone": "🏃🏽\u200d♂️", - "man_scientist": "👨\u200d🔬", - "man_scientist_dark_skin_tone": "👨🏿\u200d🔬", - "man_scientist_light_skin_tone": "👨🏻\u200d🔬", - "man_scientist_medium-dark_skin_tone": "👨🏾\u200d🔬", - "man_scientist_medium-light_skin_tone": "👨🏼\u200d🔬", - "man_scientist_medium_skin_tone": "👨🏽\u200d🔬", - "man_shrugging": "🤷\u200d♂️", - "man_shrugging_dark_skin_tone": "🤷🏿\u200d♂️", - "man_shrugging_light_skin_tone": "🤷🏻\u200d♂️", - "man_shrugging_medium-dark_skin_tone": "🤷🏾\u200d♂️", - "man_shrugging_medium-light_skin_tone": "🤷🏼\u200d♂️", - "man_shrugging_medium_skin_tone": "🤷🏽\u200d♂️", - "man_singer": "👨\u200d🎤", - "man_singer_dark_skin_tone": "👨🏿\u200d🎤", - "man_singer_light_skin_tone": "👨🏻\u200d🎤", - "man_singer_medium-dark_skin_tone": "👨🏾\u200d🎤", - "man_singer_medium-light_skin_tone": "👨🏼\u200d🎤", - "man_singer_medium_skin_tone": "👨🏽\u200d🎤", - "man_student": "👨\u200d🎓", - "man_student_dark_skin_tone": "👨🏿\u200d🎓", - "man_student_light_skin_tone": "👨🏻\u200d🎓", - "man_student_medium-dark_skin_tone": "👨🏾\u200d🎓", - "man_student_medium-light_skin_tone": "👨🏼\u200d🎓", - "man_student_medium_skin_tone": "👨🏽\u200d🎓", - "man_surfing": "🏄\u200d♂️", - "man_surfing_dark_skin_tone": "🏄🏿\u200d♂️", - "man_surfing_light_skin_tone": "🏄🏻\u200d♂️", - "man_surfing_medium-dark_skin_tone": "🏄🏾\u200d♂️", - "man_surfing_medium-light_skin_tone": "🏄🏼\u200d♂️", - "man_surfing_medium_skin_tone": "🏄🏽\u200d♂️", - "man_swimming": "🏊\u200d♂️", - "man_swimming_dark_skin_tone": "🏊🏿\u200d♂️", - "man_swimming_light_skin_tone": "🏊🏻\u200d♂️", - "man_swimming_medium-dark_skin_tone": "🏊🏾\u200d♂️", - "man_swimming_medium-light_skin_tone": "🏊🏼\u200d♂️", - "man_swimming_medium_skin_tone": "🏊🏽\u200d♂️", - "man_teacher": "👨\u200d🏫", - "man_teacher_dark_skin_tone": "👨🏿\u200d🏫", - "man_teacher_light_skin_tone": "👨🏻\u200d🏫", - "man_teacher_medium-dark_skin_tone": "👨🏾\u200d🏫", - "man_teacher_medium-light_skin_tone": "👨🏼\u200d🏫", - "man_teacher_medium_skin_tone": "👨🏽\u200d🏫", - "man_technologist": "👨\u200d💻", - "man_technologist_dark_skin_tone": "👨🏿\u200d💻", - "man_technologist_light_skin_tone": "👨🏻\u200d💻", - "man_technologist_medium-dark_skin_tone": "👨🏾\u200d💻", - "man_technologist_medium-light_skin_tone": "👨🏼\u200d💻", - "man_technologist_medium_skin_tone": "👨🏽\u200d💻", - "man_tipping_hand": "💁\u200d♂️", - "man_tipping_hand_dark_skin_tone": "💁🏿\u200d♂️", - "man_tipping_hand_light_skin_tone": "💁🏻\u200d♂️", - "man_tipping_hand_medium-dark_skin_tone": "💁🏾\u200d♂️", - "man_tipping_hand_medium-light_skin_tone": "💁🏼\u200d♂️", - "man_tipping_hand_medium_skin_tone": "💁🏽\u200d♂️", - "man_vampire": "🧛\u200d♂️", - "man_vampire_dark_skin_tone": "🧛🏿\u200d♂️", - "man_vampire_light_skin_tone": "🧛🏻\u200d♂️", - "man_vampire_medium-dark_skin_tone": "🧛🏾\u200d♂️", - "man_vampire_medium-light_skin_tone": "🧛🏼\u200d♂️", - "man_vampire_medium_skin_tone": "🧛🏽\u200d♂️", - "man_walking": "🚶\u200d♂️", - "man_walking_dark_skin_tone": "🚶🏿\u200d♂️", - "man_walking_light_skin_tone": "🚶🏻\u200d♂️", - "man_walking_medium-dark_skin_tone": "🚶🏾\u200d♂️", - "man_walking_medium-light_skin_tone": "🚶🏼\u200d♂️", - "man_walking_medium_skin_tone": "🚶🏽\u200d♂️", - "man_wearing_turban": "👳\u200d♂️", - "man_wearing_turban_dark_skin_tone": "👳🏿\u200d♂️", - "man_wearing_turban_light_skin_tone": "👳🏻\u200d♂️", - "man_wearing_turban_medium-dark_skin_tone": "👳🏾\u200d♂️", - "man_wearing_turban_medium-light_skin_tone": "👳🏼\u200d♂️", - "man_wearing_turban_medium_skin_tone": "👳🏽\u200d♂️", - "man_with_probing_cane": "👨\u200d🦯", - "man_with_chinese_cap": "👲", - "man_with_chinese_cap_dark_skin_tone": "👲🏿", - "man_with_chinese_cap_light_skin_tone": "👲🏻", - "man_with_chinese_cap_medium-dark_skin_tone": "👲🏾", - "man_with_chinese_cap_medium-light_skin_tone": "👲🏼", - "man_with_chinese_cap_medium_skin_tone": "👲🏽", - "man_zombie": "🧟\u200d♂️", - "mango": "🥭", - "mantelpiece_clock": "🕰", - "manual_wheelchair": "🦽", - "man’s_shoe": "👞", - "map_of_japan": "🗾", - "maple_leaf": "🍁", - "martial_arts_uniform": "🥋", - "mate": "🧉", - "meat_on_bone": "🍖", - "mechanical_arm": "🦾", - "mechanical_leg": "🦿", - "medical_symbol": "⚕", - "megaphone": "📣", - "melon": "🍈", - "memo": "📝", - "men_with_bunny_ears": "👯\u200d♂️", - "men_wrestling": "🤼\u200d♂️", - "menorah": "🕎", - "men’s_room": "🚹", - "mermaid": "🧜\u200d♀️", - "mermaid_dark_skin_tone": "🧜🏿\u200d♀️", - "mermaid_light_skin_tone": "🧜🏻\u200d♀️", - "mermaid_medium-dark_skin_tone": "🧜🏾\u200d♀️", - "mermaid_medium-light_skin_tone": "🧜🏼\u200d♀️", - "mermaid_medium_skin_tone": "🧜🏽\u200d♀️", - "merman": "🧜\u200d♂️", - "merman_dark_skin_tone": "🧜🏿\u200d♂️", - "merman_light_skin_tone": "🧜🏻\u200d♂️", - "merman_medium-dark_skin_tone": "🧜🏾\u200d♂️", - "merman_medium-light_skin_tone": "🧜🏼\u200d♂️", - "merman_medium_skin_tone": "🧜🏽\u200d♂️", - "merperson": "🧜", - "merperson_dark_skin_tone": "🧜🏿", - "merperson_light_skin_tone": "🧜🏻", - "merperson_medium-dark_skin_tone": "🧜🏾", - "merperson_medium-light_skin_tone": "🧜🏼", - "merperson_medium_skin_tone": "🧜🏽", - "metro": "🚇", - "microbe": "🦠", - "microphone": "🎤", - "microscope": "🔬", - "middle_finger": "🖕", - "middle_finger_dark_skin_tone": "🖕🏿", - "middle_finger_light_skin_tone": "🖕🏻", - "middle_finger_medium-dark_skin_tone": "🖕🏾", - "middle_finger_medium-light_skin_tone": "🖕🏼", - "middle_finger_medium_skin_tone": "🖕🏽", - "military_medal": "🎖", - "milky_way": "🌌", - "minibus": "🚐", - "moai": "🗿", - "mobile_phone": "📱", - "mobile_phone_off": "📴", - "mobile_phone_with_arrow": "📲", - "money-mouth_face": "🤑", - "money_bag": "💰", - "money_with_wings": "💸", - "monkey": "🐒", - "monkey_face": "🐵", - "monorail": "🚝", - "moon_cake": "🥮", - "moon_viewing_ceremony": "🎑", - "mosque": "🕌", - "mosquito": "🦟", - "motor_boat": "🛥", - "motor_scooter": "🛵", - "motorcycle": "🏍", - "motorized_wheelchair": "🦼", - "motorway": "🛣", - "mount_fuji": "🗻", - "mountain": "⛰", - "mountain_cableway": "🚠", - "mountain_railway": "🚞", - "mouse": "🐭", - "mouse_face": "🐭", - "mouth": "👄", - "movie_camera": "🎥", - "mushroom": "🍄", - "musical_keyboard": "🎹", - "musical_note": "🎵", - "musical_notes": "🎶", - "musical_score": "🎼", - "muted_speaker": "🔇", - "nail_polish": "💅", - "nail_polish_dark_skin_tone": "💅🏿", - "nail_polish_light_skin_tone": "💅🏻", - "nail_polish_medium-dark_skin_tone": "💅🏾", - "nail_polish_medium-light_skin_tone": "💅🏼", - "nail_polish_medium_skin_tone": "💅🏽", - "name_badge": "📛", - "national_park": "🏞", - "nauseated_face": "🤢", - "nazar_amulet": "🧿", - "necktie": "👔", - "nerd_face": "🤓", - "neutral_face": "😐", - "new_moon": "🌑", - "new_moon_face": "🌚", - "newspaper": "📰", - "next_track_button": "⏭", - "night_with_stars": "🌃", - "nine-thirty": "🕤", - "nine_o’clock": "🕘", - "no_bicycles": "🚳", - "no_entry": "⛔", - "no_littering": "🚯", - "no_mobile_phones": "📵", - "no_one_under_eighteen": "🔞", - "no_pedestrians": "🚷", - "no_smoking": "🚭", - "non-potable_water": "🚱", - "nose": "👃", - "nose_dark_skin_tone": "👃🏿", - "nose_light_skin_tone": "👃🏻", - "nose_medium-dark_skin_tone": "👃🏾", - "nose_medium-light_skin_tone": "👃🏼", - "nose_medium_skin_tone": "👃🏽", - "notebook": "📓", - "notebook_with_decorative_cover": "📔", - "nut_and_bolt": "🔩", - "octopus": "🐙", - "oden": "🍢", - "office_building": "🏢", - "ogre": "👹", - "oil_drum": "🛢", - "old_key": "🗝", - "old_man": "👴", - "old_man_dark_skin_tone": "👴🏿", - "old_man_light_skin_tone": "👴🏻", - "old_man_medium-dark_skin_tone": "👴🏾", - "old_man_medium-light_skin_tone": "👴🏼", - "old_man_medium_skin_tone": "👴🏽", - "old_woman": "👵", - "old_woman_dark_skin_tone": "👵🏿", - "old_woman_light_skin_tone": "👵🏻", - "old_woman_medium-dark_skin_tone": "👵🏾", - "old_woman_medium-light_skin_tone": "👵🏼", - "old_woman_medium_skin_tone": "👵🏽", - "older_adult": "🧓", - "older_adult_dark_skin_tone": "🧓🏿", - "older_adult_light_skin_tone": "🧓🏻", - "older_adult_medium-dark_skin_tone": "🧓🏾", - "older_adult_medium-light_skin_tone": "🧓🏼", - "older_adult_medium_skin_tone": "🧓🏽", - "om": "🕉", - "oncoming_automobile": "🚘", - "oncoming_bus": "🚍", - "oncoming_fist": "👊", - "oncoming_fist_dark_skin_tone": "👊🏿", - "oncoming_fist_light_skin_tone": "👊🏻", - "oncoming_fist_medium-dark_skin_tone": "👊🏾", - "oncoming_fist_medium-light_skin_tone": "👊🏼", - "oncoming_fist_medium_skin_tone": "👊🏽", - "oncoming_police_car": "🚔", - "oncoming_taxi": "🚖", - "one-piece_swimsuit": "🩱", - "one-thirty": "🕜", - "one_o’clock": "🕐", - "onion": "🧅", - "open_book": "📖", - "open_file_folder": "📂", - "open_hands": "👐", - "open_hands_dark_skin_tone": "👐🏿", - "open_hands_light_skin_tone": "👐🏻", - "open_hands_medium-dark_skin_tone": "👐🏾", - "open_hands_medium-light_skin_tone": "👐🏼", - "open_hands_medium_skin_tone": "👐🏽", - "open_mailbox_with_lowered_flag": "📭", - "open_mailbox_with_raised_flag": "📬", - "optical_disk": "💿", - "orange_book": "📙", - "orange_circle": "🟠", - "orange_heart": "🧡", - "orange_square": "🟧", - "orangutan": "🦧", - "orthodox_cross": "☦", - "otter": "🦦", - "outbox_tray": "📤", - "owl": "🦉", - "ox": "🐂", - "oyster": "🦪", - "package": "📦", - "page_facing_up": "📄", - "page_with_curl": "📃", - "pager": "📟", - "paintbrush": "🖌", - "palm_tree": "🌴", - "palms_up_together": "🤲", - "palms_up_together_dark_skin_tone": "🤲🏿", - "palms_up_together_light_skin_tone": "🤲🏻", - "palms_up_together_medium-dark_skin_tone": "🤲🏾", - "palms_up_together_medium-light_skin_tone": "🤲🏼", - "palms_up_together_medium_skin_tone": "🤲🏽", - "pancakes": "🥞", - "panda_face": "🐼", - "paperclip": "📎", - "parrot": "🦜", - "part_alternation_mark": "〽", - "party_popper": "🎉", - "partying_face": "🥳", - "passenger_ship": "🛳", - "passport_control": "🛂", - "pause_button": "⏸", - "paw_prints": "🐾", - "peace_symbol": "☮", - "peach": "🍑", - "peacock": "🦚", - "peanuts": "🥜", - "pear": "🍐", - "pen": "🖊", - "pencil": "📝", - "penguin": "🐧", - "pensive_face": "😔", - "people_holding_hands": "🧑\u200d🤝\u200d🧑", - "people_with_bunny_ears": "👯", - "people_wrestling": "🤼", - "performing_arts": "🎭", - "persevering_face": "😣", - "person_biking": "🚴", - "person_biking_dark_skin_tone": "🚴🏿", - "person_biking_light_skin_tone": "🚴🏻", - "person_biking_medium-dark_skin_tone": "🚴🏾", - "person_biking_medium-light_skin_tone": "🚴🏼", - "person_biking_medium_skin_tone": "🚴🏽", - "person_bouncing_ball": "⛹", - "person_bouncing_ball_dark_skin_tone": "⛹🏿", - "person_bouncing_ball_light_skin_tone": "⛹🏻", - "person_bouncing_ball_medium-dark_skin_tone": "⛹🏾", - "person_bouncing_ball_medium-light_skin_tone": "⛹🏼", - "person_bouncing_ball_medium_skin_tone": "⛹🏽", - "person_bowing": "🙇", - "person_bowing_dark_skin_tone": "🙇🏿", - "person_bowing_light_skin_tone": "🙇🏻", - "person_bowing_medium-dark_skin_tone": "🙇🏾", - "person_bowing_medium-light_skin_tone": "🙇🏼", - "person_bowing_medium_skin_tone": "🙇🏽", - "person_cartwheeling": "🤸", - "person_cartwheeling_dark_skin_tone": "🤸🏿", - "person_cartwheeling_light_skin_tone": "🤸🏻", - "person_cartwheeling_medium-dark_skin_tone": "🤸🏾", - "person_cartwheeling_medium-light_skin_tone": "🤸🏼", - "person_cartwheeling_medium_skin_tone": "🤸🏽", - "person_climbing": "🧗", - "person_climbing_dark_skin_tone": "🧗🏿", - "person_climbing_light_skin_tone": "🧗🏻", - "person_climbing_medium-dark_skin_tone": "🧗🏾", - "person_climbing_medium-light_skin_tone": "🧗🏼", - "person_climbing_medium_skin_tone": "🧗🏽", - "person_facepalming": "🤦", - "person_facepalming_dark_skin_tone": "🤦🏿", - "person_facepalming_light_skin_tone": "🤦🏻", - "person_facepalming_medium-dark_skin_tone": "🤦🏾", - "person_facepalming_medium-light_skin_tone": "🤦🏼", - "person_facepalming_medium_skin_tone": "🤦🏽", - "person_fencing": "🤺", - "person_frowning": "🙍", - "person_frowning_dark_skin_tone": "🙍🏿", - "person_frowning_light_skin_tone": "🙍🏻", - "person_frowning_medium-dark_skin_tone": "🙍🏾", - "person_frowning_medium-light_skin_tone": "🙍🏼", - "person_frowning_medium_skin_tone": "🙍🏽", - "person_gesturing_no": "🙅", - "person_gesturing_no_dark_skin_tone": "🙅🏿", - "person_gesturing_no_light_skin_tone": "🙅🏻", - "person_gesturing_no_medium-dark_skin_tone": "🙅🏾", - "person_gesturing_no_medium-light_skin_tone": "🙅🏼", - "person_gesturing_no_medium_skin_tone": "🙅🏽", - "person_gesturing_ok": "🙆", - "person_gesturing_ok_dark_skin_tone": "🙆🏿", - "person_gesturing_ok_light_skin_tone": "🙆🏻", - "person_gesturing_ok_medium-dark_skin_tone": "🙆🏾", - "person_gesturing_ok_medium-light_skin_tone": "🙆🏼", - "person_gesturing_ok_medium_skin_tone": "🙆🏽", - "person_getting_haircut": "💇", - "person_getting_haircut_dark_skin_tone": "💇🏿", - "person_getting_haircut_light_skin_tone": "💇🏻", - "person_getting_haircut_medium-dark_skin_tone": "💇🏾", - "person_getting_haircut_medium-light_skin_tone": "💇🏼", - "person_getting_haircut_medium_skin_tone": "💇🏽", - "person_getting_massage": "💆", - "person_getting_massage_dark_skin_tone": "💆🏿", - "person_getting_massage_light_skin_tone": "💆🏻", - "person_getting_massage_medium-dark_skin_tone": "💆🏾", - "person_getting_massage_medium-light_skin_tone": "💆🏼", - "person_getting_massage_medium_skin_tone": "💆🏽", - "person_golfing": "🏌", - "person_golfing_dark_skin_tone": "🏌🏿", - "person_golfing_light_skin_tone": "🏌🏻", - "person_golfing_medium-dark_skin_tone": "🏌🏾", - "person_golfing_medium-light_skin_tone": "🏌🏼", - "person_golfing_medium_skin_tone": "🏌🏽", - "person_in_bed": "🛌", - "person_in_bed_dark_skin_tone": "🛌🏿", - "person_in_bed_light_skin_tone": "🛌🏻", - "person_in_bed_medium-dark_skin_tone": "🛌🏾", - "person_in_bed_medium-light_skin_tone": "🛌🏼", - "person_in_bed_medium_skin_tone": "🛌🏽", - "person_in_lotus_position": "🧘", - "person_in_lotus_position_dark_skin_tone": "🧘🏿", - "person_in_lotus_position_light_skin_tone": "🧘🏻", - "person_in_lotus_position_medium-dark_skin_tone": "🧘🏾", - "person_in_lotus_position_medium-light_skin_tone": "🧘🏼", - "person_in_lotus_position_medium_skin_tone": "🧘🏽", - "person_in_steamy_room": "🧖", - "person_in_steamy_room_dark_skin_tone": "🧖🏿", - "person_in_steamy_room_light_skin_tone": "🧖🏻", - "person_in_steamy_room_medium-dark_skin_tone": "🧖🏾", - "person_in_steamy_room_medium-light_skin_tone": "🧖🏼", - "person_in_steamy_room_medium_skin_tone": "🧖🏽", - "person_juggling": "🤹", - "person_juggling_dark_skin_tone": "🤹🏿", - "person_juggling_light_skin_tone": "🤹🏻", - "person_juggling_medium-dark_skin_tone": "🤹🏾", - "person_juggling_medium-light_skin_tone": "🤹🏼", - "person_juggling_medium_skin_tone": "🤹🏽", - "person_kneeling": "🧎", - "person_lifting_weights": "🏋", - "person_lifting_weights_dark_skin_tone": "🏋🏿", - "person_lifting_weights_light_skin_tone": "🏋🏻", - "person_lifting_weights_medium-dark_skin_tone": "🏋🏾", - "person_lifting_weights_medium-light_skin_tone": "🏋🏼", - "person_lifting_weights_medium_skin_tone": "🏋🏽", - "person_mountain_biking": "🚵", - "person_mountain_biking_dark_skin_tone": "🚵🏿", - "person_mountain_biking_light_skin_tone": "🚵🏻", - "person_mountain_biking_medium-dark_skin_tone": "🚵🏾", - "person_mountain_biking_medium-light_skin_tone": "🚵🏼", - "person_mountain_biking_medium_skin_tone": "🚵🏽", - "person_playing_handball": "🤾", - "person_playing_handball_dark_skin_tone": "🤾🏿", - "person_playing_handball_light_skin_tone": "🤾🏻", - "person_playing_handball_medium-dark_skin_tone": "🤾🏾", - "person_playing_handball_medium-light_skin_tone": "🤾🏼", - "person_playing_handball_medium_skin_tone": "🤾🏽", - "person_playing_water_polo": "🤽", - "person_playing_water_polo_dark_skin_tone": "🤽🏿", - "person_playing_water_polo_light_skin_tone": "🤽🏻", - "person_playing_water_polo_medium-dark_skin_tone": "🤽🏾", - "person_playing_water_polo_medium-light_skin_tone": "🤽🏼", - "person_playing_water_polo_medium_skin_tone": "🤽🏽", - "person_pouting": "🙎", - "person_pouting_dark_skin_tone": "🙎🏿", - "person_pouting_light_skin_tone": "🙎🏻", - "person_pouting_medium-dark_skin_tone": "🙎🏾", - "person_pouting_medium-light_skin_tone": "🙎🏼", - "person_pouting_medium_skin_tone": "🙎🏽", - "person_raising_hand": "🙋", - "person_raising_hand_dark_skin_tone": "🙋🏿", - "person_raising_hand_light_skin_tone": "🙋🏻", - "person_raising_hand_medium-dark_skin_tone": "🙋🏾", - "person_raising_hand_medium-light_skin_tone": "🙋🏼", - "person_raising_hand_medium_skin_tone": "🙋🏽", - "person_rowing_boat": "🚣", - "person_rowing_boat_dark_skin_tone": "🚣🏿", - "person_rowing_boat_light_skin_tone": "🚣🏻", - "person_rowing_boat_medium-dark_skin_tone": "🚣🏾", - "person_rowing_boat_medium-light_skin_tone": "🚣🏼", - "person_rowing_boat_medium_skin_tone": "🚣🏽", - "person_running": "🏃", - "person_running_dark_skin_tone": "🏃🏿", - "person_running_light_skin_tone": "🏃🏻", - "person_running_medium-dark_skin_tone": "🏃🏾", - "person_running_medium-light_skin_tone": "🏃🏼", - "person_running_medium_skin_tone": "🏃🏽", - "person_shrugging": "🤷", - "person_shrugging_dark_skin_tone": "🤷🏿", - "person_shrugging_light_skin_tone": "🤷🏻", - "person_shrugging_medium-dark_skin_tone": "🤷🏾", - "person_shrugging_medium-light_skin_tone": "🤷🏼", - "person_shrugging_medium_skin_tone": "🤷🏽", - "person_standing": "🧍", - "person_surfing": "🏄", - "person_surfing_dark_skin_tone": "🏄🏿", - "person_surfing_light_skin_tone": "🏄🏻", - "person_surfing_medium-dark_skin_tone": "🏄🏾", - "person_surfing_medium-light_skin_tone": "🏄🏼", - "person_surfing_medium_skin_tone": "🏄🏽", - "person_swimming": "🏊", - "person_swimming_dark_skin_tone": "🏊🏿", - "person_swimming_light_skin_tone": "🏊🏻", - "person_swimming_medium-dark_skin_tone": "🏊🏾", - "person_swimming_medium-light_skin_tone": "🏊🏼", - "person_swimming_medium_skin_tone": "🏊🏽", - "person_taking_bath": "🛀", - "person_taking_bath_dark_skin_tone": "🛀🏿", - "person_taking_bath_light_skin_tone": "🛀🏻", - "person_taking_bath_medium-dark_skin_tone": "🛀🏾", - "person_taking_bath_medium-light_skin_tone": "🛀🏼", - "person_taking_bath_medium_skin_tone": "🛀🏽", - "person_tipping_hand": "💁", - "person_tipping_hand_dark_skin_tone": "💁🏿", - "person_tipping_hand_light_skin_tone": "💁🏻", - "person_tipping_hand_medium-dark_skin_tone": "💁🏾", - "person_tipping_hand_medium-light_skin_tone": "💁🏼", - "person_tipping_hand_medium_skin_tone": "💁🏽", - "person_walking": "🚶", - "person_walking_dark_skin_tone": "🚶🏿", - "person_walking_light_skin_tone": "🚶🏻", - "person_walking_medium-dark_skin_tone": "🚶🏾", - "person_walking_medium-light_skin_tone": "🚶🏼", - "person_walking_medium_skin_tone": "🚶🏽", - "person_wearing_turban": "👳", - "person_wearing_turban_dark_skin_tone": "👳🏿", - "person_wearing_turban_light_skin_tone": "👳🏻", - "person_wearing_turban_medium-dark_skin_tone": "👳🏾", - "person_wearing_turban_medium-light_skin_tone": "👳🏼", - "person_wearing_turban_medium_skin_tone": "👳🏽", - "petri_dish": "🧫", - "pick": "⛏", - "pie": "🥧", - "pig": "🐷", - "pig_face": "🐷", - "pig_nose": "🐽", - "pile_of_poo": "💩", - "pill": "💊", - "pinching_hand": "🤏", - "pine_decoration": "🎍", - "pineapple": "🍍", - "ping_pong": "🏓", - "pirate_flag": "🏴\u200d☠️", - "pistol": "🔫", - "pizza": "🍕", - "place_of_worship": "🛐", - "play_button": "▶", - "play_or_pause_button": "⏯", - "pleading_face": "🥺", - "police_car": "🚓", - "police_car_light": "🚨", - "police_officer": "👮", - "police_officer_dark_skin_tone": "👮🏿", - "police_officer_light_skin_tone": "👮🏻", - "police_officer_medium-dark_skin_tone": "👮🏾", - "police_officer_medium-light_skin_tone": "👮🏼", - "police_officer_medium_skin_tone": "👮🏽", - "poodle": "🐩", - "pool_8_ball": "🎱", - "popcorn": "🍿", - "post_office": "🏣", - "postal_horn": "📯", - "postbox": "📮", - "pot_of_food": "🍲", - "potable_water": "🚰", - "potato": "🥔", - "poultry_leg": "🍗", - "pound_banknote": "💷", - "pouting_cat_face": "😾", - "pouting_face": "😡", - "prayer_beads": "📿", - "pregnant_woman": "🤰", - "pregnant_woman_dark_skin_tone": "🤰🏿", - "pregnant_woman_light_skin_tone": "🤰🏻", - "pregnant_woman_medium-dark_skin_tone": "🤰🏾", - "pregnant_woman_medium-light_skin_tone": "🤰🏼", - "pregnant_woman_medium_skin_tone": "🤰🏽", - "pretzel": "🥨", - "probing_cane": "🦯", - "prince": "🤴", - "prince_dark_skin_tone": "🤴🏿", - "prince_light_skin_tone": "🤴🏻", - "prince_medium-dark_skin_tone": "🤴🏾", - "prince_medium-light_skin_tone": "🤴🏼", - "prince_medium_skin_tone": "🤴🏽", - "princess": "👸", - "princess_dark_skin_tone": "👸🏿", - "princess_light_skin_tone": "👸🏻", - "princess_medium-dark_skin_tone": "👸🏾", - "princess_medium-light_skin_tone": "👸🏼", - "princess_medium_skin_tone": "👸🏽", - "printer": "🖨", - "prohibited": "🚫", - "purple_circle": "🟣", - "purple_heart": "💜", - "purple_square": "🟪", - "purse": "👛", - "pushpin": "📌", - "question_mark": "❓", - "rabbit": "🐰", - "rabbit_face": "🐰", - "raccoon": "🦝", - "racing_car": "🏎", - "radio": "📻", - "radio_button": "🔘", - "radioactive": "☢", - "railway_car": "🚃", - "railway_track": "🛤", - "rainbow": "🌈", - "rainbow_flag": "🏳️\u200d🌈", - "raised_back_of_hand": "🤚", - "raised_back_of_hand_dark_skin_tone": "🤚🏿", - "raised_back_of_hand_light_skin_tone": "🤚🏻", - "raised_back_of_hand_medium-dark_skin_tone": "🤚🏾", - "raised_back_of_hand_medium-light_skin_tone": "🤚🏼", - "raised_back_of_hand_medium_skin_tone": "🤚🏽", - "raised_fist": "✊", - "raised_fist_dark_skin_tone": "✊🏿", - "raised_fist_light_skin_tone": "✊🏻", - "raised_fist_medium-dark_skin_tone": "✊🏾", - "raised_fist_medium-light_skin_tone": "✊🏼", - "raised_fist_medium_skin_tone": "✊🏽", - "raised_hand": "✋", - "raised_hand_dark_skin_tone": "✋🏿", - "raised_hand_light_skin_tone": "✋🏻", - "raised_hand_medium-dark_skin_tone": "✋🏾", - "raised_hand_medium-light_skin_tone": "✋🏼", - "raised_hand_medium_skin_tone": "✋🏽", - "raising_hands": "🙌", - "raising_hands_dark_skin_tone": "🙌🏿", - "raising_hands_light_skin_tone": "🙌🏻", - "raising_hands_medium-dark_skin_tone": "🙌🏾", - "raising_hands_medium-light_skin_tone": "🙌🏼", - "raising_hands_medium_skin_tone": "🙌🏽", - "ram": "🐏", - "rat": "🐀", - "razor": "🪒", - "ringed_planet": "🪐", - "receipt": "🧾", - "record_button": "⏺", - "recycling_symbol": "♻", - "red_apple": "🍎", - "red_circle": "🔴", - "red_envelope": "🧧", - "red_hair": "🦰", - "red-haired_man": "👨\u200d🦰", - "red-haired_woman": "👩\u200d🦰", - "red_heart": "❤", - "red_paper_lantern": "🏮", - "red_square": "🟥", - "red_triangle_pointed_down": "🔻", - "red_triangle_pointed_up": "🔺", - "registered": "®", - "relieved_face": "😌", - "reminder_ribbon": "🎗", - "repeat_button": "🔁", - "repeat_single_button": "🔂", - "rescue_worker’s_helmet": "⛑", - "restroom": "🚻", - "reverse_button": "◀", - "revolving_hearts": "💞", - "rhinoceros": "🦏", - "ribbon": "🎀", - "rice_ball": "🍙", - "rice_cracker": "🍘", - "right-facing_fist": "🤜", - "right-facing_fist_dark_skin_tone": "🤜🏿", - "right-facing_fist_light_skin_tone": "🤜🏻", - "right-facing_fist_medium-dark_skin_tone": "🤜🏾", - "right-facing_fist_medium-light_skin_tone": "🤜🏼", - "right-facing_fist_medium_skin_tone": "🤜🏽", - "right_anger_bubble": "🗯", - "right_arrow": "➡", - "right_arrow_curving_down": "⤵", - "right_arrow_curving_left": "↩", - "right_arrow_curving_up": "⤴", - "ring": "💍", - "roasted_sweet_potato": "🍠", - "robot_face": "🤖", - "rocket": "🚀", - "roll_of_paper": "🧻", - "rolled-up_newspaper": "🗞", - "roller_coaster": "🎢", - "rolling_on_the_floor_laughing": "🤣", - "rooster": "🐓", - "rose": "🌹", - "rosette": "🏵", - "round_pushpin": "📍", - "rugby_football": "🏉", - "running_shirt": "🎽", - "running_shoe": "👟", - "sad_but_relieved_face": "😥", - "safety_pin": "🧷", - "safety_vest": "🦺", - "salt": "🧂", - "sailboat": "⛵", - "sake": "🍶", - "sandwich": "🥪", - "sari": "🥻", - "satellite": "📡", - "satellite_antenna": "📡", - "sauropod": "🦕", - "saxophone": "🎷", - "scarf": "🧣", - "school": "🏫", - "school_backpack": "🎒", - "scissors": "✂", - "scorpion": "🦂", - "scroll": "📜", - "seat": "💺", - "see-no-evil_monkey": "🙈", - "seedling": "🌱", - "selfie": "🤳", - "selfie_dark_skin_tone": "🤳🏿", - "selfie_light_skin_tone": "🤳🏻", - "selfie_medium-dark_skin_tone": "🤳🏾", - "selfie_medium-light_skin_tone": "🤳🏼", - "selfie_medium_skin_tone": "🤳🏽", - "service_dog": "🐕\u200d🦺", - "seven-thirty": "🕢", - "seven_o’clock": "🕖", - "shallow_pan_of_food": "🥘", - "shamrock": "☘", - "shark": "🦈", - "shaved_ice": "🍧", - "sheaf_of_rice": "🌾", - "shield": "🛡", - "shinto_shrine": "⛩", - "ship": "🚢", - "shooting_star": "🌠", - "shopping_bags": "🛍", - "shopping_cart": "🛒", - "shortcake": "🍰", - "shorts": "🩳", - "shower": "🚿", - "shrimp": "🦐", - "shuffle_tracks_button": "🔀", - "shushing_face": "🤫", - "sign_of_the_horns": "🤘", - "sign_of_the_horns_dark_skin_tone": "🤘🏿", - "sign_of_the_horns_light_skin_tone": "🤘🏻", - "sign_of_the_horns_medium-dark_skin_tone": "🤘🏾", - "sign_of_the_horns_medium-light_skin_tone": "🤘🏼", - "sign_of_the_horns_medium_skin_tone": "🤘🏽", - "six-thirty": "🕡", - "six_o’clock": "🕕", - "skateboard": "🛹", - "skier": "⛷", - "skis": "🎿", - "skull": "💀", - "skull_and_crossbones": "☠", - "skunk": "🦨", - "sled": "🛷", - "sleeping_face": "😴", - "sleepy_face": "😪", - "slightly_frowning_face": "🙁", - "slightly_smiling_face": "🙂", - "slot_machine": "🎰", - "sloth": "🦥", - "small_airplane": "🛩", - "small_blue_diamond": "🔹", - "small_orange_diamond": "🔸", - "smiling_cat_face_with_heart-eyes": "😻", - "smiling_face": "☺", - "smiling_face_with_halo": "😇", - "smiling_face_with_3_hearts": "🥰", - "smiling_face_with_heart-eyes": "😍", - "smiling_face_with_horns": "😈", - "smiling_face_with_smiling_eyes": "😊", - "smiling_face_with_sunglasses": "😎", - "smirking_face": "😏", - "snail": "🐌", - "snake": "🐍", - "sneezing_face": "🤧", - "snow-capped_mountain": "🏔", - "snowboarder": "🏂", - "snowboarder_dark_skin_tone": "🏂🏿", - "snowboarder_light_skin_tone": "🏂🏻", - "snowboarder_medium-dark_skin_tone": "🏂🏾", - "snowboarder_medium-light_skin_tone": "🏂🏼", - "snowboarder_medium_skin_tone": "🏂🏽", - "snowflake": "❄", - "snowman": "☃", - "snowman_without_snow": "⛄", - "soap": "🧼", - "soccer_ball": "⚽", - "socks": "🧦", - "softball": "🥎", - "soft_ice_cream": "🍦", - "spade_suit": "♠", - "spaghetti": "🍝", - "sparkle": "❇", - "sparkler": "🎇", - "sparkles": "✨", - "sparkling_heart": "💖", - "speak-no-evil_monkey": "🙊", - "speaker_high_volume": "🔊", - "speaker_low_volume": "🔈", - "speaker_medium_volume": "🔉", - "speaking_head": "🗣", - "speech_balloon": "💬", - "speedboat": "🚤", - "spider": "🕷", - "spider_web": "🕸", - "spiral_calendar": "🗓", - "spiral_notepad": "🗒", - "spiral_shell": "🐚", - "spoon": "🥄", - "sponge": "🧽", - "sport_utility_vehicle": "🚙", - "sports_medal": "🏅", - "spouting_whale": "🐳", - "squid": "🦑", - "squinting_face_with_tongue": "😝", - "stadium": "🏟", - "star-struck": "🤩", - "star_and_crescent": "☪", - "star_of_david": "✡", - "station": "🚉", - "steaming_bowl": "🍜", - "stethoscope": "🩺", - "stop_button": "⏹", - "stop_sign": "🛑", - "stopwatch": "⏱", - "straight_ruler": "📏", - "strawberry": "🍓", - "studio_microphone": "🎙", - "stuffed_flatbread": "🥙", - "sun": "☀", - "sun_behind_cloud": "⛅", - "sun_behind_large_cloud": "🌥", - "sun_behind_rain_cloud": "🌦", - "sun_behind_small_cloud": "🌤", - "sun_with_face": "🌞", - "sunflower": "🌻", - "sunglasses": "😎", - "sunrise": "🌅", - "sunrise_over_mountains": "🌄", - "sunset": "🌇", - "superhero": "🦸", - "supervillain": "🦹", - "sushi": "🍣", - "suspension_railway": "🚟", - "swan": "🦢", - "sweat_droplets": "💦", - "synagogue": "🕍", - "syringe": "💉", - "t-shirt": "👕", - "taco": "🌮", - "takeout_box": "🥡", - "tanabata_tree": "🎋", - "tangerine": "🍊", - "taxi": "🚕", - "teacup_without_handle": "🍵", - "tear-off_calendar": "📆", - "teddy_bear": "🧸", - "telephone": "☎", - "telephone_receiver": "📞", - "telescope": "🔭", - "television": "📺", - "ten-thirty": "🕥", - "ten_o’clock": "🕙", - "tennis": "🎾", - "tent": "⛺", - "test_tube": "🧪", - "thermometer": "🌡", - "thinking_face": "🤔", - "thought_balloon": "💭", - "thread": "🧵", - "three-thirty": "🕞", - "three_o’clock": "🕒", - "thumbs_down": "👎", - "thumbs_down_dark_skin_tone": "👎🏿", - "thumbs_down_light_skin_tone": "👎🏻", - "thumbs_down_medium-dark_skin_tone": "👎🏾", - "thumbs_down_medium-light_skin_tone": "👎🏼", - "thumbs_down_medium_skin_tone": "👎🏽", - "thumbs_up": "👍", - "thumbs_up_dark_skin_tone": "👍🏿", - "thumbs_up_light_skin_tone": "👍🏻", - "thumbs_up_medium-dark_skin_tone": "👍🏾", - "thumbs_up_medium-light_skin_tone": "👍🏼", - "thumbs_up_medium_skin_tone": "👍🏽", - "ticket": "🎫", - "tiger": "🐯", - "tiger_face": "🐯", - "timer_clock": "⏲", - "tired_face": "😫", - "toolbox": "🧰", - "toilet": "🚽", - "tomato": "🍅", - "tongue": "👅", - "tooth": "🦷", - "top_hat": "🎩", - "tornado": "🌪", - "trackball": "🖲", - "tractor": "🚜", - "trade_mark": "™", - "train": "🚋", - "tram": "🚊", - "tram_car": "🚋", - "triangular_flag": "🚩", - "triangular_ruler": "📐", - "trident_emblem": "🔱", - "trolleybus": "🚎", - "trophy": "🏆", - "tropical_drink": "🍹", - "tropical_fish": "🐠", - "trumpet": "🎺", - "tulip": "🌷", - "tumbler_glass": "🥃", - "turtle": "🐢", - "twelve-thirty": "🕧", - "twelve_o’clock": "🕛", - "two-hump_camel": "🐫", - "two-thirty": "🕝", - "two_hearts": "💕", - "two_men_holding_hands": "👬", - "two_o’clock": "🕑", - "two_women_holding_hands": "👭", - "umbrella": "☂", - "umbrella_on_ground": "⛱", - "umbrella_with_rain_drops": "☔", - "unamused_face": "😒", - "unicorn_face": "🦄", - "unlocked": "🔓", - "up-down_arrow": "↕", - "up-left_arrow": "↖", - "up-right_arrow": "↗", - "up_arrow": "⬆", - "upside-down_face": "🙃", - "upwards_button": "🔼", - "vampire": "🧛", - "vampire_dark_skin_tone": "🧛🏿", - "vampire_light_skin_tone": "🧛🏻", - "vampire_medium-dark_skin_tone": "🧛🏾", - "vampire_medium-light_skin_tone": "🧛🏼", - "vampire_medium_skin_tone": "🧛🏽", - "vertical_traffic_light": "🚦", - "vibration_mode": "📳", - "victory_hand": "✌", - "victory_hand_dark_skin_tone": "✌🏿", - "victory_hand_light_skin_tone": "✌🏻", - "victory_hand_medium-dark_skin_tone": "✌🏾", - "victory_hand_medium-light_skin_tone": "✌🏼", - "victory_hand_medium_skin_tone": "✌🏽", - "video_camera": "📹", - "video_game": "🎮", - "videocassette": "📼", - "violin": "🎻", - "volcano": "🌋", - "volleyball": "🏐", - "vulcan_salute": "🖖", - "vulcan_salute_dark_skin_tone": "🖖🏿", - "vulcan_salute_light_skin_tone": "🖖🏻", - "vulcan_salute_medium-dark_skin_tone": "🖖🏾", - "vulcan_salute_medium-light_skin_tone": "🖖🏼", - "vulcan_salute_medium_skin_tone": "🖖🏽", - "waffle": "🧇", - "waning_crescent_moon": "🌘", - "waning_gibbous_moon": "🌖", - "warning": "⚠", - "wastebasket": "🗑", - "watch": "⌚", - "water_buffalo": "🐃", - "water_closet": "🚾", - "water_wave": "🌊", - "watermelon": "🍉", - "waving_hand": "👋", - "waving_hand_dark_skin_tone": "👋🏿", - "waving_hand_light_skin_tone": "👋🏻", - "waving_hand_medium-dark_skin_tone": "👋🏾", - "waving_hand_medium-light_skin_tone": "👋🏼", - "waving_hand_medium_skin_tone": "👋🏽", - "wavy_dash": "〰", - "waxing_crescent_moon": "🌒", - "waxing_gibbous_moon": "🌔", - "weary_cat_face": "🙀", - "weary_face": "😩", - "wedding": "💒", - "whale": "🐳", - "wheel_of_dharma": "☸", - "wheelchair_symbol": "♿", - "white_circle": "⚪", - "white_exclamation_mark": "❕", - "white_flag": "🏳", - "white_flower": "💮", - "white_hair": "🦳", - "white-haired_man": "👨\u200d🦳", - "white-haired_woman": "👩\u200d🦳", - "white_heart": "🤍", - "white_heavy_check_mark": "✅", - "white_large_square": "⬜", - "white_medium-small_square": "◽", - "white_medium_square": "◻", - "white_medium_star": "⭐", - "white_question_mark": "❔", - "white_small_square": "▫", - "white_square_button": "🔳", - "wilted_flower": "🥀", - "wind_chime": "🎐", - "wind_face": "🌬", - "wine_glass": "🍷", - "winking_face": "😉", - "winking_face_with_tongue": "😜", - "wolf_face": "🐺", - "woman": "👩", - "woman_artist": "👩\u200d🎨", - "woman_artist_dark_skin_tone": "👩🏿\u200d🎨", - "woman_artist_light_skin_tone": "👩🏻\u200d🎨", - "woman_artist_medium-dark_skin_tone": "👩🏾\u200d🎨", - "woman_artist_medium-light_skin_tone": "👩🏼\u200d🎨", - "woman_artist_medium_skin_tone": "👩🏽\u200d🎨", - "woman_astronaut": "👩\u200d🚀", - "woman_astronaut_dark_skin_tone": "👩🏿\u200d🚀", - "woman_astronaut_light_skin_tone": "👩🏻\u200d🚀", - "woman_astronaut_medium-dark_skin_tone": "👩🏾\u200d🚀", - "woman_astronaut_medium-light_skin_tone": "👩🏼\u200d🚀", - "woman_astronaut_medium_skin_tone": "👩🏽\u200d🚀", - "woman_biking": "🚴\u200d♀️", - "woman_biking_dark_skin_tone": "🚴🏿\u200d♀️", - "woman_biking_light_skin_tone": "🚴🏻\u200d♀️", - "woman_biking_medium-dark_skin_tone": "🚴🏾\u200d♀️", - "woman_biking_medium-light_skin_tone": "🚴🏼\u200d♀️", - "woman_biking_medium_skin_tone": "🚴🏽\u200d♀️", - "woman_bouncing_ball": "⛹️\u200d♀️", - "woman_bouncing_ball_dark_skin_tone": "⛹🏿\u200d♀️", - "woman_bouncing_ball_light_skin_tone": "⛹🏻\u200d♀️", - "woman_bouncing_ball_medium-dark_skin_tone": "⛹🏾\u200d♀️", - "woman_bouncing_ball_medium-light_skin_tone": "⛹🏼\u200d♀️", - "woman_bouncing_ball_medium_skin_tone": "⛹🏽\u200d♀️", - "woman_bowing": "🙇\u200d♀️", - "woman_bowing_dark_skin_tone": "🙇🏿\u200d♀️", - "woman_bowing_light_skin_tone": "🙇🏻\u200d♀️", - "woman_bowing_medium-dark_skin_tone": "🙇🏾\u200d♀️", - "woman_bowing_medium-light_skin_tone": "🙇🏼\u200d♀️", - "woman_bowing_medium_skin_tone": "🙇🏽\u200d♀️", - "woman_cartwheeling": "🤸\u200d♀️", - "woman_cartwheeling_dark_skin_tone": "🤸🏿\u200d♀️", - "woman_cartwheeling_light_skin_tone": "🤸🏻\u200d♀️", - "woman_cartwheeling_medium-dark_skin_tone": "🤸🏾\u200d♀️", - "woman_cartwheeling_medium-light_skin_tone": "🤸🏼\u200d♀️", - "woman_cartwheeling_medium_skin_tone": "🤸🏽\u200d♀️", - "woman_climbing": "🧗\u200d♀️", - "woman_climbing_dark_skin_tone": "🧗🏿\u200d♀️", - "woman_climbing_light_skin_tone": "🧗🏻\u200d♀️", - "woman_climbing_medium-dark_skin_tone": "🧗🏾\u200d♀️", - "woman_climbing_medium-light_skin_tone": "🧗🏼\u200d♀️", - "woman_climbing_medium_skin_tone": "🧗🏽\u200d♀️", - "woman_construction_worker": "👷\u200d♀️", - "woman_construction_worker_dark_skin_tone": "👷🏿\u200d♀️", - "woman_construction_worker_light_skin_tone": "👷🏻\u200d♀️", - "woman_construction_worker_medium-dark_skin_tone": "👷🏾\u200d♀️", - "woman_construction_worker_medium-light_skin_tone": "👷🏼\u200d♀️", - "woman_construction_worker_medium_skin_tone": "👷🏽\u200d♀️", - "woman_cook": "👩\u200d🍳", - "woman_cook_dark_skin_tone": "👩🏿\u200d🍳", - "woman_cook_light_skin_tone": "👩🏻\u200d🍳", - "woman_cook_medium-dark_skin_tone": "👩🏾\u200d🍳", - "woman_cook_medium-light_skin_tone": "👩🏼\u200d🍳", - "woman_cook_medium_skin_tone": "👩🏽\u200d🍳", - "woman_dancing": "💃", - "woman_dancing_dark_skin_tone": "💃🏿", - "woman_dancing_light_skin_tone": "💃🏻", - "woman_dancing_medium-dark_skin_tone": "💃🏾", - "woman_dancing_medium-light_skin_tone": "💃🏼", - "woman_dancing_medium_skin_tone": "💃🏽", - "woman_dark_skin_tone": "👩🏿", - "woman_detective": "🕵️\u200d♀️", - "woman_detective_dark_skin_tone": "🕵🏿\u200d♀️", - "woman_detective_light_skin_tone": "🕵🏻\u200d♀️", - "woman_detective_medium-dark_skin_tone": "🕵🏾\u200d♀️", - "woman_detective_medium-light_skin_tone": "🕵🏼\u200d♀️", - "woman_detective_medium_skin_tone": "🕵🏽\u200d♀️", - "woman_elf": "🧝\u200d♀️", - "woman_elf_dark_skin_tone": "🧝🏿\u200d♀️", - "woman_elf_light_skin_tone": "🧝🏻\u200d♀️", - "woman_elf_medium-dark_skin_tone": "🧝🏾\u200d♀️", - "woman_elf_medium-light_skin_tone": "🧝🏼\u200d♀️", - "woman_elf_medium_skin_tone": "🧝🏽\u200d♀️", - "woman_facepalming": "🤦\u200d♀️", - "woman_facepalming_dark_skin_tone": "🤦🏿\u200d♀️", - "woman_facepalming_light_skin_tone": "🤦🏻\u200d♀️", - "woman_facepalming_medium-dark_skin_tone": "🤦🏾\u200d♀️", - "woman_facepalming_medium-light_skin_tone": "🤦🏼\u200d♀️", - "woman_facepalming_medium_skin_tone": "🤦🏽\u200d♀️", - "woman_factory_worker": "👩\u200d🏭", - "woman_factory_worker_dark_skin_tone": "👩🏿\u200d🏭", - "woman_factory_worker_light_skin_tone": "👩🏻\u200d🏭", - "woman_factory_worker_medium-dark_skin_tone": "👩🏾\u200d🏭", - "woman_factory_worker_medium-light_skin_tone": "👩🏼\u200d🏭", - "woman_factory_worker_medium_skin_tone": "👩🏽\u200d🏭", - "woman_fairy": "🧚\u200d♀️", - "woman_fairy_dark_skin_tone": "🧚🏿\u200d♀️", - "woman_fairy_light_skin_tone": "🧚🏻\u200d♀️", - "woman_fairy_medium-dark_skin_tone": "🧚🏾\u200d♀️", - "woman_fairy_medium-light_skin_tone": "🧚🏼\u200d♀️", - "woman_fairy_medium_skin_tone": "🧚🏽\u200d♀️", - "woman_farmer": "👩\u200d🌾", - "woman_farmer_dark_skin_tone": "👩🏿\u200d🌾", - "woman_farmer_light_skin_tone": "👩🏻\u200d🌾", - "woman_farmer_medium-dark_skin_tone": "👩🏾\u200d🌾", - "woman_farmer_medium-light_skin_tone": "👩🏼\u200d🌾", - "woman_farmer_medium_skin_tone": "👩🏽\u200d🌾", - "woman_firefighter": "👩\u200d🚒", - "woman_firefighter_dark_skin_tone": "👩🏿\u200d🚒", - "woman_firefighter_light_skin_tone": "👩🏻\u200d🚒", - "woman_firefighter_medium-dark_skin_tone": "👩🏾\u200d🚒", - "woman_firefighter_medium-light_skin_tone": "👩🏼\u200d🚒", - "woman_firefighter_medium_skin_tone": "👩🏽\u200d🚒", - "woman_frowning": "🙍\u200d♀️", - "woman_frowning_dark_skin_tone": "🙍🏿\u200d♀️", - "woman_frowning_light_skin_tone": "🙍🏻\u200d♀️", - "woman_frowning_medium-dark_skin_tone": "🙍🏾\u200d♀️", - "woman_frowning_medium-light_skin_tone": "🙍🏼\u200d♀️", - "woman_frowning_medium_skin_tone": "🙍🏽\u200d♀️", - "woman_genie": "🧞\u200d♀️", - "woman_gesturing_no": "🙅\u200d♀️", - "woman_gesturing_no_dark_skin_tone": "🙅🏿\u200d♀️", - "woman_gesturing_no_light_skin_tone": "🙅🏻\u200d♀️", - "woman_gesturing_no_medium-dark_skin_tone": "🙅🏾\u200d♀️", - "woman_gesturing_no_medium-light_skin_tone": "🙅🏼\u200d♀️", - "woman_gesturing_no_medium_skin_tone": "🙅🏽\u200d♀️", - "woman_gesturing_ok": "🙆\u200d♀️", - "woman_gesturing_ok_dark_skin_tone": "🙆🏿\u200d♀️", - "woman_gesturing_ok_light_skin_tone": "🙆🏻\u200d♀️", - "woman_gesturing_ok_medium-dark_skin_tone": "🙆🏾\u200d♀️", - "woman_gesturing_ok_medium-light_skin_tone": "🙆🏼\u200d♀️", - "woman_gesturing_ok_medium_skin_tone": "🙆🏽\u200d♀️", - "woman_getting_haircut": "💇\u200d♀️", - "woman_getting_haircut_dark_skin_tone": "💇🏿\u200d♀️", - "woman_getting_haircut_light_skin_tone": "💇🏻\u200d♀️", - "woman_getting_haircut_medium-dark_skin_tone": "💇🏾\u200d♀️", - "woman_getting_haircut_medium-light_skin_tone": "💇🏼\u200d♀️", - "woman_getting_haircut_medium_skin_tone": "💇🏽\u200d♀️", - "woman_getting_massage": "💆\u200d♀️", - "woman_getting_massage_dark_skin_tone": "💆🏿\u200d♀️", - "woman_getting_massage_light_skin_tone": "💆🏻\u200d♀️", - "woman_getting_massage_medium-dark_skin_tone": "💆🏾\u200d♀️", - "woman_getting_massage_medium-light_skin_tone": "💆🏼\u200d♀️", - "woman_getting_massage_medium_skin_tone": "💆🏽\u200d♀️", - "woman_golfing": "🏌️\u200d♀️", - "woman_golfing_dark_skin_tone": "🏌🏿\u200d♀️", - "woman_golfing_light_skin_tone": "🏌🏻\u200d♀️", - "woman_golfing_medium-dark_skin_tone": "🏌🏾\u200d♀️", - "woman_golfing_medium-light_skin_tone": "🏌🏼\u200d♀️", - "woman_golfing_medium_skin_tone": "🏌🏽\u200d♀️", - "woman_guard": "💂\u200d♀️", - "woman_guard_dark_skin_tone": "💂🏿\u200d♀️", - "woman_guard_light_skin_tone": "💂🏻\u200d♀️", - "woman_guard_medium-dark_skin_tone": "💂🏾\u200d♀️", - "woman_guard_medium-light_skin_tone": "💂🏼\u200d♀️", - "woman_guard_medium_skin_tone": "💂🏽\u200d♀️", - "woman_health_worker": "👩\u200d⚕️", - "woman_health_worker_dark_skin_tone": "👩🏿\u200d⚕️", - "woman_health_worker_light_skin_tone": "👩🏻\u200d⚕️", - "woman_health_worker_medium-dark_skin_tone": "👩🏾\u200d⚕️", - "woman_health_worker_medium-light_skin_tone": "👩🏼\u200d⚕️", - "woman_health_worker_medium_skin_tone": "👩🏽\u200d⚕️", - "woman_in_lotus_position": "🧘\u200d♀️", - "woman_in_lotus_position_dark_skin_tone": "🧘🏿\u200d♀️", - "woman_in_lotus_position_light_skin_tone": "🧘🏻\u200d♀️", - "woman_in_lotus_position_medium-dark_skin_tone": "🧘🏾\u200d♀️", - "woman_in_lotus_position_medium-light_skin_tone": "🧘🏼\u200d♀️", - "woman_in_lotus_position_medium_skin_tone": "🧘🏽\u200d♀️", - "woman_in_manual_wheelchair": "👩\u200d🦽", - "woman_in_motorized_wheelchair": "👩\u200d🦼", - "woman_in_steamy_room": "🧖\u200d♀️", - "woman_in_steamy_room_dark_skin_tone": "🧖🏿\u200d♀️", - "woman_in_steamy_room_light_skin_tone": "🧖🏻\u200d♀️", - "woman_in_steamy_room_medium-dark_skin_tone": "🧖🏾\u200d♀️", - "woman_in_steamy_room_medium-light_skin_tone": "🧖🏼\u200d♀️", - "woman_in_steamy_room_medium_skin_tone": "🧖🏽\u200d♀️", - "woman_judge": "👩\u200d⚖️", - "woman_judge_dark_skin_tone": "👩🏿\u200d⚖️", - "woman_judge_light_skin_tone": "👩🏻\u200d⚖️", - "woman_judge_medium-dark_skin_tone": "👩🏾\u200d⚖️", - "woman_judge_medium-light_skin_tone": "👩🏼\u200d⚖️", - "woman_judge_medium_skin_tone": "👩🏽\u200d⚖️", - "woman_juggling": "🤹\u200d♀️", - "woman_juggling_dark_skin_tone": "🤹🏿\u200d♀️", - "woman_juggling_light_skin_tone": "🤹🏻\u200d♀️", - "woman_juggling_medium-dark_skin_tone": "🤹🏾\u200d♀️", - "woman_juggling_medium-light_skin_tone": "🤹🏼\u200d♀️", - "woman_juggling_medium_skin_tone": "🤹🏽\u200d♀️", - "woman_lifting_weights": "🏋️\u200d♀️", - "woman_lifting_weights_dark_skin_tone": "🏋🏿\u200d♀️", - "woman_lifting_weights_light_skin_tone": "🏋🏻\u200d♀️", - "woman_lifting_weights_medium-dark_skin_tone": "🏋🏾\u200d♀️", - "woman_lifting_weights_medium-light_skin_tone": "🏋🏼\u200d♀️", - "woman_lifting_weights_medium_skin_tone": "🏋🏽\u200d♀️", - "woman_light_skin_tone": "👩🏻", - "woman_mage": "🧙\u200d♀️", - "woman_mage_dark_skin_tone": "🧙🏿\u200d♀️", - "woman_mage_light_skin_tone": "🧙🏻\u200d♀️", - "woman_mage_medium-dark_skin_tone": "🧙🏾\u200d♀️", - "woman_mage_medium-light_skin_tone": "🧙🏼\u200d♀️", - "woman_mage_medium_skin_tone": "🧙🏽\u200d♀️", - "woman_mechanic": "👩\u200d🔧", - "woman_mechanic_dark_skin_tone": "👩🏿\u200d🔧", - "woman_mechanic_light_skin_tone": "👩🏻\u200d🔧", - "woman_mechanic_medium-dark_skin_tone": "👩🏾\u200d🔧", - "woman_mechanic_medium-light_skin_tone": "👩🏼\u200d🔧", - "woman_mechanic_medium_skin_tone": "👩🏽\u200d🔧", - "woman_medium-dark_skin_tone": "👩🏾", - "woman_medium-light_skin_tone": "👩🏼", - "woman_medium_skin_tone": "👩🏽", - "woman_mountain_biking": "🚵\u200d♀️", - "woman_mountain_biking_dark_skin_tone": "🚵🏿\u200d♀️", - "woman_mountain_biking_light_skin_tone": "🚵🏻\u200d♀️", - "woman_mountain_biking_medium-dark_skin_tone": "🚵🏾\u200d♀️", - "woman_mountain_biking_medium-light_skin_tone": "🚵🏼\u200d♀️", - "woman_mountain_biking_medium_skin_tone": "🚵🏽\u200d♀️", - "woman_office_worker": "👩\u200d💼", - "woman_office_worker_dark_skin_tone": "👩🏿\u200d💼", - "woman_office_worker_light_skin_tone": "👩🏻\u200d💼", - "woman_office_worker_medium-dark_skin_tone": "👩🏾\u200d💼", - "woman_office_worker_medium-light_skin_tone": "👩🏼\u200d💼", - "woman_office_worker_medium_skin_tone": "👩🏽\u200d💼", - "woman_pilot": "👩\u200d✈️", - "woman_pilot_dark_skin_tone": "👩🏿\u200d✈️", - "woman_pilot_light_skin_tone": "👩🏻\u200d✈️", - "woman_pilot_medium-dark_skin_tone": "👩🏾\u200d✈️", - "woman_pilot_medium-light_skin_tone": "👩🏼\u200d✈️", - "woman_pilot_medium_skin_tone": "👩🏽\u200d✈️", - "woman_playing_handball": "🤾\u200d♀️", - "woman_playing_handball_dark_skin_tone": "🤾🏿\u200d♀️", - "woman_playing_handball_light_skin_tone": "🤾🏻\u200d♀️", - "woman_playing_handball_medium-dark_skin_tone": "🤾🏾\u200d♀️", - "woman_playing_handball_medium-light_skin_tone": "🤾🏼\u200d♀️", - "woman_playing_handball_medium_skin_tone": "🤾🏽\u200d♀️", - "woman_playing_water_polo": "🤽\u200d♀️", - "woman_playing_water_polo_dark_skin_tone": "🤽🏿\u200d♀️", - "woman_playing_water_polo_light_skin_tone": "🤽🏻\u200d♀️", - "woman_playing_water_polo_medium-dark_skin_tone": "🤽🏾\u200d♀️", - "woman_playing_water_polo_medium-light_skin_tone": "🤽🏼\u200d♀️", - "woman_playing_water_polo_medium_skin_tone": "🤽🏽\u200d♀️", - "woman_police_officer": "👮\u200d♀️", - "woman_police_officer_dark_skin_tone": "👮🏿\u200d♀️", - "woman_police_officer_light_skin_tone": "👮🏻\u200d♀️", - "woman_police_officer_medium-dark_skin_tone": "👮🏾\u200d♀️", - "woman_police_officer_medium-light_skin_tone": "👮🏼\u200d♀️", - "woman_police_officer_medium_skin_tone": "👮🏽\u200d♀️", - "woman_pouting": "🙎\u200d♀️", - "woman_pouting_dark_skin_tone": "🙎🏿\u200d♀️", - "woman_pouting_light_skin_tone": "🙎🏻\u200d♀️", - "woman_pouting_medium-dark_skin_tone": "🙎🏾\u200d♀️", - "woman_pouting_medium-light_skin_tone": "🙎🏼\u200d♀️", - "woman_pouting_medium_skin_tone": "🙎🏽\u200d♀️", - "woman_raising_hand": "🙋\u200d♀️", - "woman_raising_hand_dark_skin_tone": "🙋🏿\u200d♀️", - "woman_raising_hand_light_skin_tone": "🙋🏻\u200d♀️", - "woman_raising_hand_medium-dark_skin_tone": "🙋🏾\u200d♀️", - "woman_raising_hand_medium-light_skin_tone": "🙋🏼\u200d♀️", - "woman_raising_hand_medium_skin_tone": "🙋🏽\u200d♀️", - "woman_rowing_boat": "🚣\u200d♀️", - "woman_rowing_boat_dark_skin_tone": "🚣🏿\u200d♀️", - "woman_rowing_boat_light_skin_tone": "🚣🏻\u200d♀️", - "woman_rowing_boat_medium-dark_skin_tone": "🚣🏾\u200d♀️", - "woman_rowing_boat_medium-light_skin_tone": "🚣🏼\u200d♀️", - "woman_rowing_boat_medium_skin_tone": "🚣🏽\u200d♀️", - "woman_running": "🏃\u200d♀️", - "woman_running_dark_skin_tone": "🏃🏿\u200d♀️", - "woman_running_light_skin_tone": "🏃🏻\u200d♀️", - "woman_running_medium-dark_skin_tone": "🏃🏾\u200d♀️", - "woman_running_medium-light_skin_tone": "🏃🏼\u200d♀️", - "woman_running_medium_skin_tone": "🏃🏽\u200d♀️", - "woman_scientist": "👩\u200d🔬", - "woman_scientist_dark_skin_tone": "👩🏿\u200d🔬", - "woman_scientist_light_skin_tone": "👩🏻\u200d🔬", - "woman_scientist_medium-dark_skin_tone": "👩🏾\u200d🔬", - "woman_scientist_medium-light_skin_tone": "👩🏼\u200d🔬", - "woman_scientist_medium_skin_tone": "👩🏽\u200d🔬", - "woman_shrugging": "🤷\u200d♀️", - "woman_shrugging_dark_skin_tone": "🤷🏿\u200d♀️", - "woman_shrugging_light_skin_tone": "🤷🏻\u200d♀️", - "woman_shrugging_medium-dark_skin_tone": "🤷🏾\u200d♀️", - "woman_shrugging_medium-light_skin_tone": "🤷🏼\u200d♀️", - "woman_shrugging_medium_skin_tone": "🤷🏽\u200d♀️", - "woman_singer": "👩\u200d🎤", - "woman_singer_dark_skin_tone": "👩🏿\u200d🎤", - "woman_singer_light_skin_tone": "👩🏻\u200d🎤", - "woman_singer_medium-dark_skin_tone": "👩🏾\u200d🎤", - "woman_singer_medium-light_skin_tone": "👩🏼\u200d🎤", - "woman_singer_medium_skin_tone": "👩🏽\u200d🎤", - "woman_student": "👩\u200d🎓", - "woman_student_dark_skin_tone": "👩🏿\u200d🎓", - "woman_student_light_skin_tone": "👩🏻\u200d🎓", - "woman_student_medium-dark_skin_tone": "👩🏾\u200d🎓", - "woman_student_medium-light_skin_tone": "👩🏼\u200d🎓", - "woman_student_medium_skin_tone": "👩🏽\u200d🎓", - "woman_surfing": "🏄\u200d♀️", - "woman_surfing_dark_skin_tone": "🏄🏿\u200d♀️", - "woman_surfing_light_skin_tone": "🏄🏻\u200d♀️", - "woman_surfing_medium-dark_skin_tone": "🏄🏾\u200d♀️", - "woman_surfing_medium-light_skin_tone": "🏄🏼\u200d♀️", - "woman_surfing_medium_skin_tone": "🏄🏽\u200d♀️", - "woman_swimming": "🏊\u200d♀️", - "woman_swimming_dark_skin_tone": "🏊🏿\u200d♀️", - "woman_swimming_light_skin_tone": "🏊🏻\u200d♀️", - "woman_swimming_medium-dark_skin_tone": "🏊🏾\u200d♀️", - "woman_swimming_medium-light_skin_tone": "🏊🏼\u200d♀️", - "woman_swimming_medium_skin_tone": "🏊🏽\u200d♀️", - "woman_teacher": "👩\u200d🏫", - "woman_teacher_dark_skin_tone": "👩🏿\u200d🏫", - "woman_teacher_light_skin_tone": "👩🏻\u200d🏫", - "woman_teacher_medium-dark_skin_tone": "👩🏾\u200d🏫", - "woman_teacher_medium-light_skin_tone": "👩🏼\u200d🏫", - "woman_teacher_medium_skin_tone": "👩🏽\u200d🏫", - "woman_technologist": "👩\u200d💻", - "woman_technologist_dark_skin_tone": "👩🏿\u200d💻", - "woman_technologist_light_skin_tone": "👩🏻\u200d💻", - "woman_technologist_medium-dark_skin_tone": "👩🏾\u200d💻", - "woman_technologist_medium-light_skin_tone": "👩🏼\u200d💻", - "woman_technologist_medium_skin_tone": "👩🏽\u200d💻", - "woman_tipping_hand": "💁\u200d♀️", - "woman_tipping_hand_dark_skin_tone": "💁🏿\u200d♀️", - "woman_tipping_hand_light_skin_tone": "💁🏻\u200d♀️", - "woman_tipping_hand_medium-dark_skin_tone": "💁🏾\u200d♀️", - "woman_tipping_hand_medium-light_skin_tone": "💁🏼\u200d♀️", - "woman_tipping_hand_medium_skin_tone": "💁🏽\u200d♀️", - "woman_vampire": "🧛\u200d♀️", - "woman_vampire_dark_skin_tone": "🧛🏿\u200d♀️", - "woman_vampire_light_skin_tone": "🧛🏻\u200d♀️", - "woman_vampire_medium-dark_skin_tone": "🧛🏾\u200d♀️", - "woman_vampire_medium-light_skin_tone": "🧛🏼\u200d♀️", - "woman_vampire_medium_skin_tone": "🧛🏽\u200d♀️", - "woman_walking": "🚶\u200d♀️", - "woman_walking_dark_skin_tone": "🚶🏿\u200d♀️", - "woman_walking_light_skin_tone": "🚶🏻\u200d♀️", - "woman_walking_medium-dark_skin_tone": "🚶🏾\u200d♀️", - "woman_walking_medium-light_skin_tone": "🚶🏼\u200d♀️", - "woman_walking_medium_skin_tone": "🚶🏽\u200d♀️", - "woman_wearing_turban": "👳\u200d♀️", - "woman_wearing_turban_dark_skin_tone": "👳🏿\u200d♀️", - "woman_wearing_turban_light_skin_tone": "👳🏻\u200d♀️", - "woman_wearing_turban_medium-dark_skin_tone": "👳🏾\u200d♀️", - "woman_wearing_turban_medium-light_skin_tone": "👳🏼\u200d♀️", - "woman_wearing_turban_medium_skin_tone": "👳🏽\u200d♀️", - "woman_with_headscarf": "🧕", - "woman_with_headscarf_dark_skin_tone": "🧕🏿", - "woman_with_headscarf_light_skin_tone": "🧕🏻", - "woman_with_headscarf_medium-dark_skin_tone": "🧕🏾", - "woman_with_headscarf_medium-light_skin_tone": "🧕🏼", - "woman_with_headscarf_medium_skin_tone": "🧕🏽", - "woman_with_probing_cane": "👩\u200d🦯", - "woman_zombie": "🧟\u200d♀️", - "woman’s_boot": "👢", - "woman’s_clothes": "👚", - "woman’s_hat": "👒", - "woman’s_sandal": "👡", - "women_with_bunny_ears": "👯\u200d♀️", - "women_wrestling": "🤼\u200d♀️", - "women’s_room": "🚺", - "woozy_face": "🥴", - "world_map": "🗺", - "worried_face": "😟", - "wrapped_gift": "🎁", - "wrench": "🔧", - "writing_hand": "✍", - "writing_hand_dark_skin_tone": "✍🏿", - "writing_hand_light_skin_tone": "✍🏻", - "writing_hand_medium-dark_skin_tone": "✍🏾", - "writing_hand_medium-light_skin_tone": "✍🏼", - "writing_hand_medium_skin_tone": "✍🏽", - "yarn": "🧶", - "yawning_face": "🥱", - "yellow_circle": "🟡", - "yellow_heart": "💛", - "yellow_square": "🟨", - "yen_banknote": "💴", - "yo-yo": "🪀", - "yin_yang": "☯", - "zany_face": "🤪", - "zebra": "🦓", - "zipper-mouth_face": "🤐", - "zombie": "🧟", - "zzz": "💤", - "åland_islands": "🇦🇽", - "keycap_asterisk": "*⃣", - "keycap_digit_eight": "8⃣", - "keycap_digit_five": "5⃣", - "keycap_digit_four": "4⃣", - "keycap_digit_nine": "9⃣", - "keycap_digit_one": "1⃣", - "keycap_digit_seven": "7⃣", - "keycap_digit_six": "6⃣", - "keycap_digit_three": "3⃣", - "keycap_digit_two": "2⃣", - "keycap_digit_zero": "0⃣", - "keycap_number_sign": "#⃣", - "light_skin_tone": "🏻", - "medium_light_skin_tone": "🏼", - "medium_skin_tone": "🏽", - "medium_dark_skin_tone": "🏾", - "dark_skin_tone": "🏿", - "regional_indicator_symbol_letter_a": "🇦", - "regional_indicator_symbol_letter_b": "🇧", - "regional_indicator_symbol_letter_c": "🇨", - "regional_indicator_symbol_letter_d": "🇩", - "regional_indicator_symbol_letter_e": "🇪", - "regional_indicator_symbol_letter_f": "🇫", - "regional_indicator_symbol_letter_g": "🇬", - "regional_indicator_symbol_letter_h": "🇭", - "regional_indicator_symbol_letter_i": "🇮", - "regional_indicator_symbol_letter_j": "🇯", - "regional_indicator_symbol_letter_k": "🇰", - "regional_indicator_symbol_letter_l": "🇱", - "regional_indicator_symbol_letter_m": "🇲", - "regional_indicator_symbol_letter_n": "🇳", - "regional_indicator_symbol_letter_o": "🇴", - "regional_indicator_symbol_letter_p": "🇵", - "regional_indicator_symbol_letter_q": "🇶", - "regional_indicator_symbol_letter_r": "🇷", - "regional_indicator_symbol_letter_s": "🇸", - "regional_indicator_symbol_letter_t": "🇹", - "regional_indicator_symbol_letter_u": "🇺", - "regional_indicator_symbol_letter_v": "🇻", - "regional_indicator_symbol_letter_w": "🇼", - "regional_indicator_symbol_letter_x": "🇽", - "regional_indicator_symbol_letter_y": "🇾", - "regional_indicator_symbol_letter_z": "🇿", - "airplane_arriving": "🛬", - "space_invader": "👾", - "football": "🏈", - "anger": "💢", - "angry": "😠", - "anguished": "😧", - "signal_strength": "📶", - "arrows_counterclockwise": "🔄", - "arrow_heading_down": "⤵", - "arrow_heading_up": "⤴", - "art": "🎨", - "astonished": "😲", - "athletic_shoe": "👟", - "atm": "🏧", - "car": "🚗", - "red_car": "🚗", - "angel": "👼", - "back": "🔙", - "badminton_racquet_and_shuttlecock": "🏸", - "dollar": "💵", - "euro": "💶", - "pound": "💷", - "yen": "💴", - "barber": "💈", - "bath": "🛀", - "bear": "🐻", - "heartbeat": "💓", - "beer": "🍺", - "no_bell": "🔕", - "bento": "🍱", - "bike": "🚲", - "bicyclist": "🚴", - "8ball": "🎱", - "biohazard_sign": "☣", - "birthday": "🎂", - "black_circle_for_record": "⏺", - "clubs": "♣", - "diamonds": "♦", - "arrow_double_down": "⏬", - "hearts": "♥", - "rewind": "⏪", - "black_left__pointing_double_triangle_with_vertical_bar": "⏮", - "arrow_backward": "◀", - "black_medium_small_square": "◾", - "question": "❓", - "fast_forward": "⏩", - "black_right__pointing_double_triangle_with_vertical_bar": "⏭", - "arrow_forward": "▶", - "black_right__pointing_triangle_with_double_vertical_bar": "⏯", - "arrow_right": "➡", - "spades": "♠", - "black_square_for_stop": "⏹", - "sunny": "☀", - "phone": "☎", - "recycle": "♻", - "arrow_double_up": "⏫", - "busstop": "🚏", - "date": "📅", - "flags": "🎏", - "cat2": "🐈", - "joy_cat": "😹", - "smirk_cat": "😼", - "chart_with_downwards_trend": "📉", - "chart_with_upwards_trend": "📈", - "chart": "💹", - "mega": "📣", - "checkered_flag": "🏁", - "accept": "🉑", - "ideograph_advantage": "🉐", - "congratulations": "㊗", - "secret": "㊙", - "m": "Ⓜ", - "city_sunset": "🌆", - "clapper": "🎬", - "clap": "👏", - "beers": "🍻", - "clock830": "🕣", - "clock8": "🕗", - "clock1130": "🕦", - "clock11": "🕚", - "clock530": "🕠", - "clock5": "🕔", - "clock430": "🕟", - "clock4": "🕓", - "clock930": "🕤", - "clock9": "🕘", - "clock130": "🕜", - "clock1": "🕐", - "clock730": "🕢", - "clock7": "🕖", - "clock630": "🕡", - "clock6": "🕕", - "clock1030": "🕥", - "clock10": "🕙", - "clock330": "🕞", - "clock3": "🕒", - "clock1230": "🕧", - "clock12": "🕛", - "clock230": "🕝", - "clock2": "🕑", - "arrows_clockwise": "🔃", - "repeat": "🔁", - "repeat_one": "🔂", - "closed_lock_with_key": "🔐", - "mailbox_closed": "📪", - "mailbox": "📫", - "cloud_with_tornado": "🌪", - "cocktail": "🍸", - "boom": "💥", - "compression": "🗜", - "confounded": "😖", - "confused": "😕", - "rice": "🍚", - "cow2": "🐄", - "cricket_bat_and_ball": "🏏", - "x": "❌", - "cry": "😢", - "curry": "🍛", - "dagger_knife": "🗡", - "dancer": "💃", - "dark_sunglasses": "🕶", - "dash": "💨", - "truck": "🚚", - "derelict_house_building": "🏚", - "diamond_shape_with_a_dot_inside": "💠", - "dart": "🎯", - "disappointed_relieved": "😥", - "disappointed": "😞", - "do_not_litter": "🚯", - "dog2": "🐕", - "flipper": "🐬", - "loop": "➿", - "bangbang": "‼", - "double_vertical_bar": "⏸", - "dove_of_peace": "🕊", - "small_red_triangle_down": "🔻", - "arrow_down_small": "🔽", - "arrow_down": "⬇", - "dromedary_camel": "🐪", - "e__mail": "📧", - "corn": "🌽", - "ear_of_rice": "🌾", - "earth_americas": "🌎", - "earth_asia": "🌏", - "earth_africa": "🌍", - "eight_pointed_black_star": "✴", - "eight_spoked_asterisk": "✳", - "eject_symbol": "⏏", - "bulb": "💡", - "emoji_modifier_fitzpatrick_type__1__2": "🏻", - "emoji_modifier_fitzpatrick_type__3": "🏼", - "emoji_modifier_fitzpatrick_type__4": "🏽", - "emoji_modifier_fitzpatrick_type__5": "🏾", - "emoji_modifier_fitzpatrick_type__6": "🏿", - "end": "🔚", - "email": "✉", - "european_castle": "🏰", - "european_post_office": "🏤", - "interrobang": "⁉", - "expressionless": "😑", - "eyeglasses": "👓", - "massage": "💆", - "yum": "😋", - "scream": "😱", - "kissing_heart": "😘", - "sweat": "😓", - "face_with_head__bandage": "🤕", - "triumph": "😤", - "mask": "😷", - "no_good": "🙅", - "ok_woman": "🙆", - "open_mouth": "😮", - "cold_sweat": "😰", - "stuck_out_tongue": "😛", - "stuck_out_tongue_closed_eyes": "😝", - "stuck_out_tongue_winking_eye": "😜", - "joy": "😂", - "no_mouth": "😶", - "santa": "🎅", - "fax": "📠", - "fearful": "😨", - "field_hockey_stick_and_ball": "🏑", - "first_quarter_moon_with_face": "🌛", - "fish_cake": "🍥", - "fishing_pole_and_fish": "🎣", - "facepunch": "👊", - "punch": "👊", - "flag_for_afghanistan": "🇦🇫", - "flag_for_albania": "🇦🇱", - "flag_for_algeria": "🇩🇿", - "flag_for_american_samoa": "🇦🇸", - "flag_for_andorra": "🇦🇩", - "flag_for_angola": "🇦🇴", - "flag_for_anguilla": "🇦🇮", - "flag_for_antarctica": "🇦🇶", - "flag_for_antigua_&_barbuda": "🇦🇬", - "flag_for_argentina": "🇦🇷", - "flag_for_armenia": "🇦🇲", - "flag_for_aruba": "🇦🇼", - "flag_for_ascension_island": "🇦🇨", - "flag_for_australia": "🇦🇺", - "flag_for_austria": "🇦🇹", - "flag_for_azerbaijan": "🇦🇿", - "flag_for_bahamas": "🇧🇸", - "flag_for_bahrain": "🇧🇭", - "flag_for_bangladesh": "🇧🇩", - "flag_for_barbados": "🇧🇧", - "flag_for_belarus": "🇧🇾", - "flag_for_belgium": "🇧🇪", - "flag_for_belize": "🇧🇿", - "flag_for_benin": "🇧🇯", - "flag_for_bermuda": "🇧🇲", - "flag_for_bhutan": "🇧🇹", - "flag_for_bolivia": "🇧🇴", - "flag_for_bosnia_&_herzegovina": "🇧🇦", - "flag_for_botswana": "🇧🇼", - "flag_for_bouvet_island": "🇧🇻", - "flag_for_brazil": "🇧🇷", - "flag_for_british_indian_ocean_territory": "🇮🇴", - "flag_for_british_virgin_islands": "🇻🇬", - "flag_for_brunei": "🇧🇳", - "flag_for_bulgaria": "🇧🇬", - "flag_for_burkina_faso": "🇧🇫", - "flag_for_burundi": "🇧🇮", - "flag_for_cambodia": "🇰🇭", - "flag_for_cameroon": "🇨🇲", - "flag_for_canada": "🇨🇦", - "flag_for_canary_islands": "🇮🇨", - "flag_for_cape_verde": "🇨🇻", - "flag_for_caribbean_netherlands": "🇧🇶", - "flag_for_cayman_islands": "🇰🇾", - "flag_for_central_african_republic": "🇨🇫", - "flag_for_ceuta_&_melilla": "🇪🇦", - "flag_for_chad": "🇹🇩", - "flag_for_chile": "🇨🇱", - "flag_for_china": "🇨🇳", - "flag_for_christmas_island": "🇨🇽", - "flag_for_clipperton_island": "🇨🇵", - "flag_for_cocos__islands": "🇨🇨", - "flag_for_colombia": "🇨🇴", - "flag_for_comoros": "🇰🇲", - "flag_for_congo____brazzaville": "🇨🇬", - "flag_for_congo____kinshasa": "🇨🇩", - "flag_for_cook_islands": "🇨🇰", - "flag_for_costa_rica": "🇨🇷", - "flag_for_croatia": "🇭🇷", - "flag_for_cuba": "🇨🇺", - "flag_for_curaçao": "🇨🇼", - "flag_for_cyprus": "🇨🇾", - "flag_for_czech_republic": "🇨🇿", - "flag_for_côte_d’ivoire": "🇨🇮", - "flag_for_denmark": "🇩🇰", - "flag_for_diego_garcia": "🇩🇬", - "flag_for_djibouti": "🇩🇯", - "flag_for_dominica": "🇩🇲", - "flag_for_dominican_republic": "🇩🇴", - "flag_for_ecuador": "🇪🇨", - "flag_for_egypt": "🇪🇬", - "flag_for_el_salvador": "🇸🇻", - "flag_for_equatorial_guinea": "🇬🇶", - "flag_for_eritrea": "🇪🇷", - "flag_for_estonia": "🇪🇪", - "flag_for_ethiopia": "🇪🇹", - "flag_for_european_union": "🇪🇺", - "flag_for_falkland_islands": "🇫🇰", - "flag_for_faroe_islands": "🇫🇴", - "flag_for_fiji": "🇫🇯", - "flag_for_finland": "🇫🇮", - "flag_for_france": "🇫🇷", - "flag_for_french_guiana": "🇬🇫", - "flag_for_french_polynesia": "🇵🇫", - "flag_for_french_southern_territories": "🇹🇫", - "flag_for_gabon": "🇬🇦", - "flag_for_gambia": "🇬🇲", - "flag_for_georgia": "🇬🇪", - "flag_for_germany": "🇩🇪", - "flag_for_ghana": "🇬🇭", - "flag_for_gibraltar": "🇬🇮", - "flag_for_greece": "🇬🇷", - "flag_for_greenland": "🇬🇱", - "flag_for_grenada": "🇬🇩", - "flag_for_guadeloupe": "🇬🇵", - "flag_for_guam": "🇬🇺", - "flag_for_guatemala": "🇬🇹", - "flag_for_guernsey": "🇬🇬", - "flag_for_guinea": "🇬🇳", - "flag_for_guinea__bissau": "🇬🇼", - "flag_for_guyana": "🇬🇾", - "flag_for_haiti": "🇭🇹", - "flag_for_heard_&_mcdonald_islands": "🇭🇲", - "flag_for_honduras": "🇭🇳", - "flag_for_hong_kong": "🇭🇰", - "flag_for_hungary": "🇭🇺", - "flag_for_iceland": "🇮🇸", - "flag_for_india": "🇮🇳", - "flag_for_indonesia": "🇮🇩", - "flag_for_iran": "🇮🇷", - "flag_for_iraq": "🇮🇶", - "flag_for_ireland": "🇮🇪", - "flag_for_isle_of_man": "🇮🇲", - "flag_for_israel": "🇮🇱", - "flag_for_italy": "🇮🇹", - "flag_for_jamaica": "🇯🇲", - "flag_for_japan": "🇯🇵", - "flag_for_jersey": "🇯🇪", - "flag_for_jordan": "🇯🇴", - "flag_for_kazakhstan": "🇰🇿", - "flag_for_kenya": "🇰🇪", - "flag_for_kiribati": "🇰🇮", - "flag_for_kosovo": "🇽🇰", - "flag_for_kuwait": "🇰🇼", - "flag_for_kyrgyzstan": "🇰🇬", - "flag_for_laos": "🇱🇦", - "flag_for_latvia": "🇱🇻", - "flag_for_lebanon": "🇱🇧", - "flag_for_lesotho": "🇱🇸", - "flag_for_liberia": "🇱🇷", - "flag_for_libya": "🇱🇾", - "flag_for_liechtenstein": "🇱🇮", - "flag_for_lithuania": "🇱🇹", - "flag_for_luxembourg": "🇱🇺", - "flag_for_macau": "🇲🇴", - "flag_for_macedonia": "🇲🇰", - "flag_for_madagascar": "🇲🇬", - "flag_for_malawi": "🇲🇼", - "flag_for_malaysia": "🇲🇾", - "flag_for_maldives": "🇲🇻", - "flag_for_mali": "🇲🇱", - "flag_for_malta": "🇲🇹", - "flag_for_marshall_islands": "🇲🇭", - "flag_for_martinique": "🇲🇶", - "flag_for_mauritania": "🇲🇷", - "flag_for_mauritius": "🇲🇺", - "flag_for_mayotte": "🇾🇹", - "flag_for_mexico": "🇲🇽", - "flag_for_micronesia": "🇫🇲", - "flag_for_moldova": "🇲🇩", - "flag_for_monaco": "🇲🇨", - "flag_for_mongolia": "🇲🇳", - "flag_for_montenegro": "🇲🇪", - "flag_for_montserrat": "🇲🇸", - "flag_for_morocco": "🇲🇦", - "flag_for_mozambique": "🇲🇿", - "flag_for_myanmar": "🇲🇲", - "flag_for_namibia": "🇳🇦", - "flag_for_nauru": "🇳🇷", - "flag_for_nepal": "🇳🇵", - "flag_for_netherlands": "🇳🇱", - "flag_for_new_caledonia": "🇳🇨", - "flag_for_new_zealand": "🇳🇿", - "flag_for_nicaragua": "🇳🇮", - "flag_for_niger": "🇳🇪", - "flag_for_nigeria": "🇳🇬", - "flag_for_niue": "🇳🇺", - "flag_for_norfolk_island": "🇳🇫", - "flag_for_north_korea": "🇰🇵", - "flag_for_northern_mariana_islands": "🇲🇵", - "flag_for_norway": "🇳🇴", - "flag_for_oman": "🇴🇲", - "flag_for_pakistan": "🇵🇰", - "flag_for_palau": "🇵🇼", - "flag_for_palestinian_territories": "🇵🇸", - "flag_for_panama": "🇵🇦", - "flag_for_papua_new_guinea": "🇵🇬", - "flag_for_paraguay": "🇵🇾", - "flag_for_peru": "🇵🇪", - "flag_for_philippines": "🇵🇭", - "flag_for_pitcairn_islands": "🇵🇳", - "flag_for_poland": "🇵🇱", - "flag_for_portugal": "🇵🇹", - "flag_for_puerto_rico": "🇵🇷", - "flag_for_qatar": "🇶🇦", - "flag_for_romania": "🇷🇴", - "flag_for_russia": "🇷🇺", - "flag_for_rwanda": "🇷🇼", - "flag_for_réunion": "🇷🇪", - "flag_for_samoa": "🇼🇸", - "flag_for_san_marino": "🇸🇲", - "flag_for_saudi_arabia": "🇸🇦", - "flag_for_senegal": "🇸🇳", - "flag_for_serbia": "🇷🇸", - "flag_for_seychelles": "🇸🇨", - "flag_for_sierra_leone": "🇸🇱", - "flag_for_singapore": "🇸🇬", - "flag_for_sint_maarten": "🇸🇽", - "flag_for_slovakia": "🇸🇰", - "flag_for_slovenia": "🇸🇮", - "flag_for_solomon_islands": "🇸🇧", - "flag_for_somalia": "🇸🇴", - "flag_for_south_africa": "🇿🇦", - "flag_for_south_georgia_&_south_sandwich_islands": "🇬🇸", - "flag_for_south_korea": "🇰🇷", - "flag_for_south_sudan": "🇸🇸", - "flag_for_spain": "🇪🇸", - "flag_for_sri_lanka": "🇱🇰", - "flag_for_st._barthélemy": "🇧🇱", - "flag_for_st._helena": "🇸🇭", - "flag_for_st._kitts_&_nevis": "🇰🇳", - "flag_for_st._lucia": "🇱🇨", - "flag_for_st._martin": "🇲🇫", - "flag_for_st._pierre_&_miquelon": "🇵🇲", - "flag_for_st._vincent_&_grenadines": "🇻🇨", - "flag_for_sudan": "🇸🇩", - "flag_for_suriname": "🇸🇷", - "flag_for_svalbard_&_jan_mayen": "🇸🇯", - "flag_for_swaziland": "🇸🇿", - "flag_for_sweden": "🇸🇪", - "flag_for_switzerland": "🇨🇭", - "flag_for_syria": "🇸🇾", - "flag_for_são_tomé_&_príncipe": "🇸🇹", - "flag_for_taiwan": "🇹🇼", - "flag_for_tajikistan": "🇹🇯", - "flag_for_tanzania": "🇹🇿", - "flag_for_thailand": "🇹🇭", - "flag_for_timor__leste": "🇹🇱", - "flag_for_togo": "🇹🇬", - "flag_for_tokelau": "🇹🇰", - "flag_for_tonga": "🇹🇴", - "flag_for_trinidad_&_tobago": "🇹🇹", - "flag_for_tristan_da_cunha": "🇹🇦", - "flag_for_tunisia": "🇹🇳", - "flag_for_turkey": "🇹🇷", - "flag_for_turkmenistan": "🇹🇲", - "flag_for_turks_&_caicos_islands": "🇹🇨", - "flag_for_tuvalu": "🇹🇻", - "flag_for_u.s._outlying_islands": "🇺🇲", - "flag_for_u.s._virgin_islands": "🇻🇮", - "flag_for_uganda": "🇺🇬", - "flag_for_ukraine": "🇺🇦", - "flag_for_united_arab_emirates": "🇦🇪", - "flag_for_united_kingdom": "🇬🇧", - "flag_for_united_states": "🇺🇸", - "flag_for_uruguay": "🇺🇾", - "flag_for_uzbekistan": "🇺🇿", - "flag_for_vanuatu": "🇻🇺", - "flag_for_vatican_city": "🇻🇦", - "flag_for_venezuela": "🇻🇪", - "flag_for_vietnam": "🇻🇳", - "flag_for_wallis_&_futuna": "🇼🇫", - "flag_for_western_sahara": "🇪🇭", - "flag_for_yemen": "🇾🇪", - "flag_for_zambia": "🇿🇲", - "flag_for_zimbabwe": "🇿🇼", - "flag_for_åland_islands": "🇦🇽", - "golf": "⛳", - "fleur__de__lis": "⚜", - "muscle": "💪", - "flushed": "😳", - "frame_with_picture": "🖼", - "fries": "🍟", - "frog": "🐸", - "hatched_chick": "🐥", - "frowning": "😦", - "fuelpump": "⛽", - "full_moon_with_face": "🌝", - "gem": "💎", - "star2": "🌟", - "golfer": "🏌", - "mortar_board": "🎓", - "grimacing": "😬", - "smile_cat": "😸", - "grinning": "😀", - "grin": "😁", - "heartpulse": "💗", - "guardsman": "💂", - "haircut": "💇", - "hamster": "🐹", - "raising_hand": "🙋", - "headphones": "🎧", - "hear_no_evil": "🙉", - "cupid": "💘", - "gift_heart": "💝", - "heart": "❤", - "exclamation": "❗", - "heavy_exclamation_mark": "❗", - "heavy_heart_exclamation_mark_ornament": "❣", - "o": "⭕", - "helm_symbol": "⎈", - "helmet_with_white_cross": "⛑", - "high_heel": "👠", - "bullettrain_side": "🚄", - "bullettrain_front": "🚅", - "high_brightness": "🔆", - "zap": "⚡", - "hocho": "🔪", - "knife": "🔪", - "bee": "🐝", - "traffic_light": "🚥", - "racehorse": "🐎", - "coffee": "☕", - "hotsprings": "♨", - "hourglass": "⌛", - "hourglass_flowing_sand": "⏳", - "house_buildings": "🏘", - "100": "💯", - "hushed": "😯", - "ice_hockey_stick_and_puck": "🏒", - "imp": "👿", - "information_desk_person": "💁", - "information_source": "ℹ", - "capital_abcd": "🔠", - "abc": "🔤", - "abcd": "🔡", - "1234": "🔢", - "symbols": "🔣", - "izakaya_lantern": "🏮", - "lantern": "🏮", - "jack_o_lantern": "🎃", - "dolls": "🎎", - "japanese_goblin": "👺", - "japanese_ogre": "👹", - "beginner": "🔰", - "zero": "0️⃣", - "one": "1️⃣", - "ten": "🔟", - "two": "2️⃣", - "three": "3️⃣", - "four": "4️⃣", - "five": "5️⃣", - "six": "6️⃣", - "seven": "7️⃣", - "eight": "8️⃣", - "nine": "9️⃣", - "couplekiss": "💏", - "kissing_cat": "😽", - "kissing": "😗", - "kissing_closed_eyes": "😚", - "kissing_smiling_eyes": "😙", - "beetle": "🐞", - "large_blue_circle": "🔵", - "last_quarter_moon_with_face": "🌜", - "leaves": "🍃", - "mag": "🔍", - "left_right_arrow": "↔", - "leftwards_arrow_with_hook": "↩", - "arrow_left": "⬅", - "lock": "🔒", - "lock_with_ink_pen": "🔏", - "sob": "😭", - "low_brightness": "🔅", - "lower_left_ballpoint_pen": "🖊", - "lower_left_crayon": "🖍", - "lower_left_fountain_pen": "🖋", - "lower_left_paintbrush": "🖌", - "mahjong": "🀄", - "couple": "👫", - "man_in_business_suit_levitating": "🕴", - "man_with_gua_pi_mao": "👲", - "man_with_turban": "👳", - "mans_shoe": "👞", - "shoe": "👞", - "menorah_with_nine_branches": "🕎", - "mens": "🚹", - "minidisc": "💽", - "iphone": "📱", - "calling": "📲", - "money__mouth_face": "🤑", - "moneybag": "💰", - "rice_scene": "🎑", - "mountain_bicyclist": "🚵", - "mouse2": "🐁", - "lips": "👄", - "moyai": "🗿", - "notes": "🎶", - "nail_care": "💅", - "ab": "🆎", - "negative_squared_cross_mark": "❎", - "a": "🅰", - "b": "🅱", - "o2": "🅾", - "parking": "🅿", - "new_moon_with_face": "🌚", - "no_entry_sign": "🚫", - "underage": "🔞", - "non__potable_water": "🚱", - "arrow_upper_right": "↗", - "arrow_upper_left": "↖", - "office": "🏢", - "older_man": "👴", - "older_woman": "👵", - "om_symbol": "🕉", - "on": "🔛", - "book": "📖", - "unlock": "🔓", - "mailbox_with_no_mail": "📭", - "mailbox_with_mail": "📬", - "cd": "💿", - "tada": "🎉", - "feet": "🐾", - "walking": "🚶", - "pencil2": "✏", - "pensive": "😔", - "persevere": "😣", - "bow": "🙇", - "raised_hands": "🙌", - "person_with_ball": "⛹", - "person_with_blond_hair": "👱", - "pray": "🙏", - "person_with_pouting_face": "🙎", - "computer": "💻", - "pig2": "🐖", - "hankey": "💩", - "poop": "💩", - "shit": "💩", - "bamboo": "🎍", - "gun": "🔫", - "black_joker": "🃏", - "rotating_light": "🚨", - "cop": "👮", - "stew": "🍲", - "pouch": "👝", - "pouting_cat": "😾", - "rage": "😡", - "put_litter_in_its_place": "🚮", - "rabbit2": "🐇", - "racing_motorcycle": "🏍", - "radioactive_sign": "☢", - "fist": "✊", - "hand": "✋", - "raised_hand_with_fingers_splayed": "🖐", - "raised_hand_with_part_between_middle_and_ring_fingers": "🖖", - "blue_car": "🚙", - "apple": "🍎", - "relieved": "😌", - "reversed_hand_with_middle_finger_extended": "🖕", - "mag_right": "🔎", - "arrow_right_hook": "↪", - "sweet_potato": "🍠", - "robot": "🤖", - "rolled__up_newspaper": "🗞", - "rowboat": "🚣", - "runner": "🏃", - "running": "🏃", - "running_shirt_with_sash": "🎽", - "boat": "⛵", - "scales": "⚖", - "school_satchel": "🎒", - "scorpius": "♏", - "see_no_evil": "🙈", - "sheep": "🐑", - "stars": "🌠", - "cake": "🍰", - "six_pointed_star": "🔯", - "ski": "🎿", - "sleeping_accommodation": "🛌", - "sleeping": "😴", - "sleepy": "😪", - "sleuth_or_spy": "🕵", - "heart_eyes_cat": "😻", - "smiley_cat": "😺", - "innocent": "😇", - "heart_eyes": "😍", - "smiling_imp": "😈", - "smiley": "😃", - "sweat_smile": "😅", - "smile": "😄", - "laughing": "😆", - "satisfied": "😆", - "blush": "😊", - "smirk": "😏", - "smoking": "🚬", - "snow_capped_mountain": "🏔", - "soccer": "⚽", - "icecream": "🍦", - "soon": "🔜", - "arrow_lower_right": "↘", - "arrow_lower_left": "↙", - "speak_no_evil": "🙊", - "speaker": "🔈", - "mute": "🔇", - "sound": "🔉", - "loud_sound": "🔊", - "speaking_head_in_silhouette": "🗣", - "spiral_calendar_pad": "🗓", - "spiral_note_pad": "🗒", - "shell": "🐚", - "sweat_drops": "💦", - "u5272": "🈹", - "u5408": "🈴", - "u55b6": "🈺", - "u6307": "🈯", - "u6708": "🈷", - "u6709": "🈶", - "u6e80": "🈵", - "u7121": "🈚", - "u7533": "🈸", - "u7981": "🈲", - "u7a7a": "🈳", - "cl": "🆑", - "cool": "🆒", - "free": "🆓", - "id": "🆔", - "koko": "🈁", - "sa": "🈂", - "new": "🆕", - "ng": "🆖", - "ok": "🆗", - "sos": "🆘", - "up": "🆙", - "vs": "🆚", - "steam_locomotive": "🚂", - "ramen": "🍜", - "partly_sunny": "⛅", - "city_sunrise": "🌇", - "surfer": "🏄", - "swimmer": "🏊", - "shirt": "👕", - "tshirt": "👕", - "table_tennis_paddle_and_ball": "🏓", - "tea": "🍵", - "tv": "📺", - "three_button_mouse": "🖱", - "+1": "👍", - "thumbsup": "👍", - "__1": "👎", - "-1": "👎", - "thumbsdown": "👎", - "thunder_cloud_and_rain": "⛈", - "tiger2": "🐅", - "tophat": "🎩", - "top": "🔝", - "tm": "™", - "train2": "🚆", - "triangular_flag_on_post": "🚩", - "trident": "🔱", - "twisted_rightwards_arrows": "🔀", - "unamused": "😒", - "small_red_triangle": "🔺", - "arrow_up_small": "🔼", - "arrow_up_down": "↕", - "upside__down_face": "🙃", - "arrow_up": "⬆", - "v": "✌", - "vhs": "📼", - "wc": "🚾", - "ocean": "🌊", - "waving_black_flag": "🏴", - "wave": "👋", - "waving_white_flag": "🏳", - "moon": "🌔", - "scream_cat": "🙀", - "weary": "😩", - "weight_lifter": "🏋", - "whale2": "🐋", - "wheelchair": "♿", - "point_down": "👇", - "grey_exclamation": "❕", - "white_frowning_face": "☹", - "white_check_mark": "✅", - "point_left": "👈", - "white_medium_small_square": "◽", - "star": "⭐", - "grey_question": "❔", - "point_right": "👉", - "relaxed": "☺", - "white_sun_behind_cloud": "🌥", - "white_sun_behind_cloud_with_rain": "🌦", - "white_sun_with_small_cloud": "🌤", - "point_up_2": "👆", - "point_up": "☝", - "wind_blowing_face": "🌬", - "wink": "😉", - "wolf": "🐺", - "dancers": "👯", - "boot": "👢", - "womans_clothes": "👚", - "womans_hat": "👒", - "sandal": "👡", - "womens": "🚺", - "worried": "😟", - "gift": "🎁", - "zipper__mouth_face": "🤐", - "regional_indicator_a": "🇦", - "regional_indicator_b": "🇧", - "regional_indicator_c": "🇨", - "regional_indicator_d": "🇩", - "regional_indicator_e": "🇪", - "regional_indicator_f": "🇫", - "regional_indicator_g": "🇬", - "regional_indicator_h": "🇭", - "regional_indicator_i": "🇮", - "regional_indicator_j": "🇯", - "regional_indicator_k": "🇰", - "regional_indicator_l": "🇱", - "regional_indicator_m": "🇲", - "regional_indicator_n": "🇳", - "regional_indicator_o": "🇴", - "regional_indicator_p": "🇵", - "regional_indicator_q": "🇶", - "regional_indicator_r": "🇷", - "regional_indicator_s": "🇸", - "regional_indicator_t": "🇹", - "regional_indicator_u": "🇺", - "regional_indicator_v": "🇻", - "regional_indicator_w": "🇼", - "regional_indicator_x": "🇽", - "regional_indicator_y": "🇾", - "regional_indicator_z": "🇿", -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py deleted file mode 100644 index bb2cafa18..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Callable, Match, Optional -import re - -from ._emoji_codes import EMOJI - - -_ReStringMatch = Match[str] # regex match object -_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub -_EmojiSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re - - -def _emoji_replace( - text: str, - default_variant: Optional[str] = None, - _emoji_sub: _EmojiSubMethod = re.compile(r"(:(\S*?)(?:(?:\-)(emoji|text))?:)").sub, -) -> str: - """Replace emoji code in text.""" - get_emoji = EMOJI.__getitem__ - variants = {"text": "\uFE0E", "emoji": "\uFE0F"} - get_variant = variants.get - default_variant_code = variants.get(default_variant, "") if default_variant else "" - - def do_replace(match: Match[str]) -> str: - emoji_code, emoji_name, variant = match.groups() - try: - return get_emoji(emoji_name.lower()) + get_variant( - variant, default_variant_code - ) - except KeyError: - return emoji_code - - return _emoji_sub(do_replace, text) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_export_format.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_export_format.py deleted file mode 100644 index e7527e52f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_export_format.py +++ /dev/null @@ -1,76 +0,0 @@ -CONSOLE_HTML_FORMAT = """\ -<!DOCTYPE html> -<html> -<head> -<meta charset="UTF-8"> -<style> -{stylesheet} -body {{ - color: {foreground}; - background-color: {background}; -}} -</style> -</head> -<body> - <pre style="font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><code style="font-family:inherit">{code}</code></pre> -</body> -</html> -""" - -CONSOLE_SVG_FORMAT = """\ -<svg class="rich-terminal" viewBox="0 0 {width} {height}" xmlns="http://www.w3.org/2000/svg"> - <!-- Generated with Rich https://www.textualize.io --> - <style> - - @font-face {{ - font-family: "Fira Code"; - src: local("FiraCode-Regular"), - url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"), - url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff"); - font-style: normal; - font-weight: 400; - }} - @font-face {{ - font-family: "Fira Code"; - src: local("FiraCode-Bold"), - url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"), - url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff"); - font-style: bold; - font-weight: 700; - }} - - .{unique_id}-matrix {{ - font-family: Fira Code, monospace; - font-size: {char_height}px; - line-height: {line_height}px; - font-variant-east-asian: full-width; - }} - - .{unique_id}-title {{ - font-size: 18px; - font-weight: bold; - font-family: arial; - }} - - {styles} - </style> - - <defs> - <clipPath id="{unique_id}-clip-terminal"> - <rect x="0" y="0" width="{terminal_width}" height="{terminal_height}" /> - </clipPath> - {lines} - </defs> - - {chrome} - <g transform="translate({terminal_x}, {terminal_y})" clip-path="url(#{unique_id}-clip-terminal)"> - {backgrounds} - <g class="{unique_id}-matrix"> - {matrix} - </g> - </g> -</svg> -""" - -_SVG_FONT_FAMILY = "Rich Fira Code" -_SVG_CLASSES_PREFIX = "rich-svg" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_extension.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_extension.py deleted file mode 100644 index cbd6da9be..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_extension.py +++ /dev/null @@ -1,10 +0,0 @@ -from typing import Any - - -def load_ipython_extension(ip: Any) -> None: # pragma: no cover - # prevent circular import - from pip._vendor.rich.pretty import install - from pip._vendor.rich.traceback import install as tr_install - - install() - tr_install() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_fileno.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_fileno.py deleted file mode 100644 index b17ee6511..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_fileno.py +++ /dev/null @@ -1,24 +0,0 @@ -from __future__ import annotations - -from typing import IO, Callable - - -def get_fileno(file_like: IO[str]) -> int | None: - """Get fileno() from a file, accounting for poorly implemented file-like objects. - - Args: - file_like (IO): A file-like object. - - Returns: - int | None: The result of fileno if available, or None if operation failed. - """ - fileno: Callable[[], int] | None = getattr(file_like, "fileno", None) - if fileno is not None: - try: - return fileno() - except Exception: - # `fileno` is documented as potentially raising a OSError - # Alas, from the issues, there are so many poorly implemented file-like objects, - # that `fileno()` can raise just about anything. - return None - return None diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_inspect.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_inspect.py deleted file mode 100644 index 27d65cec9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_inspect.py +++ /dev/null @@ -1,268 +0,0 @@ -import inspect -from inspect import cleandoc, getdoc, getfile, isclass, ismodule, signature -from typing import Any, Collection, Iterable, Optional, Tuple, Type, Union - -from .console import Group, RenderableType -from .control import escape_control_codes -from .highlighter import ReprHighlighter -from .jupyter import JupyterMixin -from .panel import Panel -from .pretty import Pretty -from .table import Table -from .text import Text, TextType - - -def _first_paragraph(doc: str) -> str: - """Get the first paragraph from a docstring.""" - paragraph, _, _ = doc.partition("\n\n") - return paragraph - - -class Inspect(JupyterMixin): - """A renderable to inspect any Python Object. - - Args: - obj (Any): An object to inspect. - title (str, optional): Title to display over inspect result, or None use type. Defaults to None. - help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. - methods (bool, optional): Enable inspection of callables. Defaults to False. - docs (bool, optional): Also render doc strings. Defaults to True. - private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. - dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. - sort (bool, optional): Sort attributes alphabetically. Defaults to True. - all (bool, optional): Show all attributes. Defaults to False. - value (bool, optional): Pretty print value of object. Defaults to True. - """ - - def __init__( - self, - obj: Any, - *, - title: Optional[TextType] = None, - help: bool = False, - methods: bool = False, - docs: bool = True, - private: bool = False, - dunder: bool = False, - sort: bool = True, - all: bool = True, - value: bool = True, - ) -> None: - self.highlighter = ReprHighlighter() - self.obj = obj - self.title = title or self._make_title(obj) - if all: - methods = private = dunder = True - self.help = help - self.methods = methods - self.docs = docs or help - self.private = private or dunder - self.dunder = dunder - self.sort = sort - self.value = value - - def _make_title(self, obj: Any) -> Text: - """Make a default title.""" - title_str = ( - str(obj) - if (isclass(obj) or callable(obj) or ismodule(obj)) - else str(type(obj)) - ) - title_text = self.highlighter(title_str) - return title_text - - def __rich__(self) -> Panel: - return Panel.fit( - Group(*self._render()), - title=self.title, - border_style="scope.border", - padding=(0, 1), - ) - - def _get_signature(self, name: str, obj: Any) -> Optional[Text]: - """Get a signature for a callable.""" - try: - _signature = str(signature(obj)) + ":" - except ValueError: - _signature = "(...)" - except TypeError: - return None - - source_filename: Optional[str] = None - try: - source_filename = getfile(obj) - except (OSError, TypeError): - # OSError is raised if obj has no source file, e.g. when defined in REPL. - pass - - callable_name = Text(name, style="inspect.callable") - if source_filename: - callable_name.stylize(f"link file://{source_filename}") - signature_text = self.highlighter(_signature) - - qualname = name or getattr(obj, "__qualname__", name) - - # If obj is a module, there may be classes (which are callable) to display - if inspect.isclass(obj): - prefix = "class" - elif inspect.iscoroutinefunction(obj): - prefix = "async def" - else: - prefix = "def" - - qual_signature = Text.assemble( - (f"{prefix} ", f"inspect.{prefix.replace(' ', '_')}"), - (qualname, "inspect.callable"), - signature_text, - ) - - return qual_signature - - def _render(self) -> Iterable[RenderableType]: - """Render object.""" - - def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]: - key, (_error, value) = item - return (callable(value), key.strip("_").lower()) - - def safe_getattr(attr_name: str) -> Tuple[Any, Any]: - """Get attribute or any exception.""" - try: - return (None, getattr(obj, attr_name)) - except Exception as error: - return (error, None) - - obj = self.obj - keys = dir(obj) - total_items = len(keys) - if not self.dunder: - keys = [key for key in keys if not key.startswith("__")] - if not self.private: - keys = [key for key in keys if not key.startswith("_")] - not_shown_count = total_items - len(keys) - items = [(key, safe_getattr(key)) for key in keys] - if self.sort: - items.sort(key=sort_items) - - items_table = Table.grid(padding=(0, 1), expand=False) - items_table.add_column(justify="right") - add_row = items_table.add_row - highlighter = self.highlighter - - if callable(obj): - signature = self._get_signature("", obj) - if signature is not None: - yield signature - yield "" - - if self.docs: - _doc = self._get_formatted_doc(obj) - if _doc is not None: - doc_text = Text(_doc, style="inspect.help") - doc_text = highlighter(doc_text) - yield doc_text - yield "" - - if self.value and not (isclass(obj) or callable(obj) or ismodule(obj)): - yield Panel( - Pretty(obj, indent_guides=True, max_length=10, max_string=60), - border_style="inspect.value.border", - ) - yield "" - - for key, (error, value) in items: - key_text = Text.assemble( - ( - key, - "inspect.attr.dunder" if key.startswith("__") else "inspect.attr", - ), - (" =", "inspect.equals"), - ) - if error is not None: - warning = key_text.copy() - warning.stylize("inspect.error") - add_row(warning, highlighter(repr(error))) - continue - - if callable(value): - if not self.methods: - continue - - _signature_text = self._get_signature(key, value) - if _signature_text is None: - add_row(key_text, Pretty(value, highlighter=highlighter)) - else: - if self.docs: - docs = self._get_formatted_doc(value) - if docs is not None: - _signature_text.append("\n" if "\n" in docs else " ") - doc = highlighter(docs) - doc.stylize("inspect.doc") - _signature_text.append(doc) - - add_row(key_text, _signature_text) - else: - add_row(key_text, Pretty(value, highlighter=highlighter)) - if items_table.row_count: - yield items_table - elif not_shown_count: - yield Text.from_markup( - f"[b cyan]{not_shown_count}[/][i] attribute(s) not shown.[/i] " - f"Run [b][magenta]inspect[/]([not b]inspect[/])[/b] for options." - ) - - def _get_formatted_doc(self, object_: Any) -> Optional[str]: - """ - Extract the docstring of an object, process it and returns it. - The processing consists in cleaning up the docstring's indentation, - taking only its 1st paragraph if `self.help` is not True, - and escape its control codes. - - Args: - object_ (Any): the object to get the docstring from. - - Returns: - Optional[str]: the processed docstring, or None if no docstring was found. - """ - docs = getdoc(object_) - if docs is None: - return None - docs = cleandoc(docs).strip() - if not self.help: - docs = _first_paragraph(docs) - return escape_control_codes(docs) - - -def get_object_types_mro(obj: Union[object, Type[Any]]) -> Tuple[type, ...]: - """Returns the MRO of an object's class, or of the object itself if it's a class.""" - if not hasattr(obj, "__mro__"): - # N.B. we cannot use `if type(obj) is type` here because it doesn't work with - # some types of classes, such as the ones that use abc.ABCMeta. - obj = type(obj) - return getattr(obj, "__mro__", ()) - - -def get_object_types_mro_as_strings(obj: object) -> Collection[str]: - """ - Returns the MRO of an object's class as full qualified names, or of the object itself if it's a class. - - Examples: - `object_types_mro_as_strings(JSONDecoder)` will return `['json.decoder.JSONDecoder', 'builtins.object']` - """ - return [ - f'{getattr(type_, "__module__", "")}.{getattr(type_, "__qualname__", "")}' - for type_ in get_object_types_mro(obj) - ] - - -def is_object_one_of_types( - obj: object, fully_qualified_types_names: Collection[str] -) -> bool: - """ - Returns `True` if the given object's class (or the object itself, if it's a class) has one of the - fully qualified names in its MRO. - """ - for type_name in get_object_types_mro_as_strings(obj): - if type_name in fully_qualified_types_names: - return True - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_log_render.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_log_render.py deleted file mode 100644 index fc16c8443..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_log_render.py +++ /dev/null @@ -1,94 +0,0 @@ -from datetime import datetime -from typing import Iterable, List, Optional, TYPE_CHECKING, Union, Callable - - -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import Console, ConsoleRenderable, RenderableType - from .table import Table - -FormatTimeCallable = Callable[[datetime], Text] - - -class LogRender: - def __init__( - self, - show_time: bool = True, - show_level: bool = False, - show_path: bool = True, - time_format: Union[str, FormatTimeCallable] = "[%x %X]", - omit_repeated_times: bool = True, - level_width: Optional[int] = 8, - ) -> None: - self.show_time = show_time - self.show_level = show_level - self.show_path = show_path - self.time_format = time_format - self.omit_repeated_times = omit_repeated_times - self.level_width = level_width - self._last_time: Optional[Text] = None - - def __call__( - self, - console: "Console", - renderables: Iterable["ConsoleRenderable"], - log_time: Optional[datetime] = None, - time_format: Optional[Union[str, FormatTimeCallable]] = None, - level: TextType = "", - path: Optional[str] = None, - line_no: Optional[int] = None, - link_path: Optional[str] = None, - ) -> "Table": - from .containers import Renderables - from .table import Table - - output = Table.grid(padding=(0, 1)) - output.expand = True - if self.show_time: - output.add_column(style="log.time") - if self.show_level: - output.add_column(style="log.level", width=self.level_width) - output.add_column(ratio=1, style="log.message", overflow="fold") - if self.show_path and path: - output.add_column(style="log.path") - row: List["RenderableType"] = [] - if self.show_time: - log_time = log_time or console.get_datetime() - time_format = time_format or self.time_format - if callable(time_format): - log_time_display = time_format(log_time) - else: - log_time_display = Text(log_time.strftime(time_format)) - if log_time_display == self._last_time and self.omit_repeated_times: - row.append(Text(" " * len(log_time_display))) - else: - row.append(log_time_display) - self._last_time = log_time_display - if self.show_level: - row.append(level) - - row.append(Renderables(renderables)) - if self.show_path and path: - path_text = Text() - path_text.append( - path, style=f"link file://{link_path}" if link_path else "" - ) - if line_no: - path_text.append(":") - path_text.append( - f"{line_no}", - style=f"link file://{link_path}#{line_no}" if link_path else "", - ) - row.append(path_text) - - output.add_row(*row) - return output - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - c = Console() - c.print("[on blue]Hello", justify="right") - c.log("[on blue]hello", justify="right") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_loop.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_loop.py deleted file mode 100644 index 01c6cafbe..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_loop.py +++ /dev/null @@ -1,43 +0,0 @@ -from typing import Iterable, Tuple, TypeVar - -T = TypeVar("T") - - -def loop_first(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for first value.""" - iter_values = iter(values) - try: - value = next(iter_values) - except StopIteration: - return - yield True, value - for value in iter_values: - yield False, value - - -def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value - - -def loop_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]: - """Iterate and generate a tuple with a flag for first and last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - first = True - for value in iter_values: - yield first, False, previous_value - first = False - previous_value = value - yield first, True, previous_value diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_null_file.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_null_file.py deleted file mode 100644 index 6ae05d3e2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_null_file.py +++ /dev/null @@ -1,69 +0,0 @@ -from types import TracebackType -from typing import IO, Iterable, Iterator, List, Optional, Type - - -class NullFile(IO[str]): - def close(self) -> None: - pass - - def isatty(self) -> bool: - return False - - def read(self, __n: int = 1) -> str: - return "" - - def readable(self) -> bool: - return False - - def readline(self, __limit: int = 1) -> str: - return "" - - def readlines(self, __hint: int = 1) -> List[str]: - return [] - - def seek(self, __offset: int, __whence: int = 1) -> int: - return 0 - - def seekable(self) -> bool: - return False - - def tell(self) -> int: - return 0 - - def truncate(self, __size: Optional[int] = 1) -> int: - return 0 - - def writable(self) -> bool: - return False - - def writelines(self, __lines: Iterable[str]) -> None: - pass - - def __next__(self) -> str: - return "" - - def __iter__(self) -> Iterator[str]: - return iter([""]) - - def __enter__(self) -> IO[str]: - return self - - def __exit__( - self, - __t: Optional[Type[BaseException]], - __value: Optional[BaseException], - __traceback: Optional[TracebackType], - ) -> None: - pass - - def write(self, text: str) -> int: - return 0 - - def flush(self) -> None: - pass - - def fileno(self) -> int: - return -1 - - -NULL_FILE = NullFile() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_palettes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_palettes.py deleted file mode 100644 index 3c748d33e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_palettes.py +++ /dev/null @@ -1,309 +0,0 @@ -from .palette import Palette - - -# Taken from https://en.wikipedia.org/wiki/ANSI_escape_code (Windows 10 column) -WINDOWS_PALETTE = Palette( - [ - (12, 12, 12), - (197, 15, 31), - (19, 161, 14), - (193, 156, 0), - (0, 55, 218), - (136, 23, 152), - (58, 150, 221), - (204, 204, 204), - (118, 118, 118), - (231, 72, 86), - (22, 198, 12), - (249, 241, 165), - (59, 120, 255), - (180, 0, 158), - (97, 214, 214), - (242, 242, 242), - ] -) - -# # The standard ansi colors (including bright variants) -STANDARD_PALETTE = Palette( - [ - (0, 0, 0), - (170, 0, 0), - (0, 170, 0), - (170, 85, 0), - (0, 0, 170), - (170, 0, 170), - (0, 170, 170), - (170, 170, 170), - (85, 85, 85), - (255, 85, 85), - (85, 255, 85), - (255, 255, 85), - (85, 85, 255), - (255, 85, 255), - (85, 255, 255), - (255, 255, 255), - ] -) - - -# The 256 color palette -EIGHT_BIT_PALETTE = Palette( - [ - (0, 0, 0), - (128, 0, 0), - (0, 128, 0), - (128, 128, 0), - (0, 0, 128), - (128, 0, 128), - (0, 128, 128), - (192, 192, 192), - (128, 128, 128), - (255, 0, 0), - (0, 255, 0), - (255, 255, 0), - (0, 0, 255), - (255, 0, 255), - (0, 255, 255), - (255, 255, 255), - (0, 0, 0), - (0, 0, 95), - (0, 0, 135), - (0, 0, 175), - (0, 0, 215), - (0, 0, 255), - (0, 95, 0), - (0, 95, 95), - (0, 95, 135), - (0, 95, 175), - (0, 95, 215), - (0, 95, 255), - (0, 135, 0), - (0, 135, 95), - (0, 135, 135), - (0, 135, 175), - (0, 135, 215), - (0, 135, 255), - (0, 175, 0), - (0, 175, 95), - (0, 175, 135), - (0, 175, 175), - (0, 175, 215), - (0, 175, 255), - (0, 215, 0), - (0, 215, 95), - (0, 215, 135), - (0, 215, 175), - (0, 215, 215), - (0, 215, 255), - (0, 255, 0), - (0, 255, 95), - (0, 255, 135), - (0, 255, 175), - (0, 255, 215), - (0, 255, 255), - (95, 0, 0), - (95, 0, 95), - (95, 0, 135), - (95, 0, 175), - (95, 0, 215), - (95, 0, 255), - (95, 95, 0), - (95, 95, 95), - (95, 95, 135), - (95, 95, 175), - (95, 95, 215), - (95, 95, 255), - (95, 135, 0), - (95, 135, 95), - (95, 135, 135), - (95, 135, 175), - (95, 135, 215), - (95, 135, 255), - (95, 175, 0), - (95, 175, 95), - (95, 175, 135), - (95, 175, 175), - (95, 175, 215), - (95, 175, 255), - (95, 215, 0), - (95, 215, 95), - (95, 215, 135), - (95, 215, 175), - (95, 215, 215), - (95, 215, 255), - (95, 255, 0), - (95, 255, 95), - (95, 255, 135), - (95, 255, 175), - (95, 255, 215), - (95, 255, 255), - (135, 0, 0), - (135, 0, 95), - (135, 0, 135), - (135, 0, 175), - (135, 0, 215), - (135, 0, 255), - (135, 95, 0), - (135, 95, 95), - (135, 95, 135), - (135, 95, 175), - (135, 95, 215), - (135, 95, 255), - (135, 135, 0), - (135, 135, 95), - (135, 135, 135), - (135, 135, 175), - (135, 135, 215), - (135, 135, 255), - (135, 175, 0), - (135, 175, 95), - (135, 175, 135), - (135, 175, 175), - (135, 175, 215), - (135, 175, 255), - (135, 215, 0), - (135, 215, 95), - (135, 215, 135), - (135, 215, 175), - (135, 215, 215), - (135, 215, 255), - (135, 255, 0), - (135, 255, 95), - (135, 255, 135), - (135, 255, 175), - (135, 255, 215), - (135, 255, 255), - (175, 0, 0), - (175, 0, 95), - (175, 0, 135), - (175, 0, 175), - (175, 0, 215), - (175, 0, 255), - (175, 95, 0), - (175, 95, 95), - (175, 95, 135), - (175, 95, 175), - (175, 95, 215), - (175, 95, 255), - (175, 135, 0), - (175, 135, 95), - (175, 135, 135), - (175, 135, 175), - (175, 135, 215), - (175, 135, 255), - (175, 175, 0), - (175, 175, 95), - (175, 175, 135), - (175, 175, 175), - (175, 175, 215), - (175, 175, 255), - (175, 215, 0), - (175, 215, 95), - (175, 215, 135), - (175, 215, 175), - (175, 215, 215), - (175, 215, 255), - (175, 255, 0), - (175, 255, 95), - (175, 255, 135), - (175, 255, 175), - (175, 255, 215), - (175, 255, 255), - (215, 0, 0), - (215, 0, 95), - (215, 0, 135), - (215, 0, 175), - (215, 0, 215), - (215, 0, 255), - (215, 95, 0), - (215, 95, 95), - (215, 95, 135), - (215, 95, 175), - (215, 95, 215), - (215, 95, 255), - (215, 135, 0), - (215, 135, 95), - (215, 135, 135), - (215, 135, 175), - (215, 135, 215), - (215, 135, 255), - (215, 175, 0), - (215, 175, 95), - (215, 175, 135), - (215, 175, 175), - (215, 175, 215), - (215, 175, 255), - (215, 215, 0), - (215, 215, 95), - (215, 215, 135), - (215, 215, 175), - (215, 215, 215), - (215, 215, 255), - (215, 255, 0), - (215, 255, 95), - (215, 255, 135), - (215, 255, 175), - (215, 255, 215), - (215, 255, 255), - (255, 0, 0), - (255, 0, 95), - (255, 0, 135), - (255, 0, 175), - (255, 0, 215), - (255, 0, 255), - (255, 95, 0), - (255, 95, 95), - (255, 95, 135), - (255, 95, 175), - (255, 95, 215), - (255, 95, 255), - (255, 135, 0), - (255, 135, 95), - (255, 135, 135), - (255, 135, 175), - (255, 135, 215), - (255, 135, 255), - (255, 175, 0), - (255, 175, 95), - (255, 175, 135), - (255, 175, 175), - (255, 175, 215), - (255, 175, 255), - (255, 215, 0), - (255, 215, 95), - (255, 215, 135), - (255, 215, 175), - (255, 215, 215), - (255, 215, 255), - (255, 255, 0), - (255, 255, 95), - (255, 255, 135), - (255, 255, 175), - (255, 255, 215), - (255, 255, 255), - (8, 8, 8), - (18, 18, 18), - (28, 28, 28), - (38, 38, 38), - (48, 48, 48), - (58, 58, 58), - (68, 68, 68), - (78, 78, 78), - (88, 88, 88), - (98, 98, 98), - (108, 108, 108), - (118, 118, 118), - (128, 128, 128), - (138, 138, 138), - (148, 148, 148), - (158, 158, 158), - (168, 168, 168), - (178, 178, 178), - (188, 188, 188), - (198, 198, 198), - (208, 208, 208), - (218, 218, 218), - (228, 228, 228), - (238, 238, 238), - ] -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_pick.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_pick.py deleted file mode 100644 index 4f6d8b2d7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_pick.py +++ /dev/null @@ -1,17 +0,0 @@ -from typing import Optional - - -def pick_bool(*values: Optional[bool]) -> bool: - """Pick the first non-none bool or return the last value. - - Args: - *values (bool): Any number of boolean or None values. - - Returns: - bool: First non-none boolean. - """ - assert values, "1 or more values required" - for value in values: - if value is not None: - return value - return bool(value) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_ratio.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_ratio.py deleted file mode 100644 index 5fd5a383d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_ratio.py +++ /dev/null @@ -1,153 +0,0 @@ -from fractions import Fraction -from math import ceil -from typing import cast, List, Optional, Sequence, Protocol - - -class Edge(Protocol): - """Any object that defines an edge (such as Layout).""" - - size: Optional[int] = None - ratio: int = 1 - minimum_size: int = 1 - - -def ratio_resolve(total: int, edges: Sequence[Edge]) -> List[int]: - """Divide total space to satisfy size, ratio, and minimum_size, constraints. - - The returned list of integers should add up to total in most cases, unless it is - impossible to satisfy all the constraints. For instance, if there are two edges - with a minimum size of 20 each and `total` is 30 then the returned list will be - greater than total. In practice, this would mean that a Layout object would - clip the rows that would overflow the screen height. - - Args: - total (int): Total number of characters. - edges (List[Edge]): Edges within total space. - - Returns: - List[int]: Number of characters for each edge. - """ - # Size of edge or None for yet to be determined - sizes = [(edge.size or None) for edge in edges] - - _Fraction = Fraction - - # While any edges haven't been calculated - while None in sizes: - # Get flexible edges and index to map these back on to sizes list - flexible_edges = [ - (index, edge) - for index, (size, edge) in enumerate(zip(sizes, edges)) - if size is None - ] - # Remaining space in total - remaining = total - sum(size or 0 for size in sizes) - if remaining <= 0: - # No room for flexible edges - return [ - ((edge.minimum_size or 1) if size is None else size) - for size, edge in zip(sizes, edges) - ] - # Calculate number of characters in a ratio portion - portion = _Fraction( - remaining, sum((edge.ratio or 1) for _, edge in flexible_edges) - ) - - # If any edges will be less than their minimum, replace size with the minimum - for index, edge in flexible_edges: - if portion * edge.ratio <= edge.minimum_size: - sizes[index] = edge.minimum_size - # New fixed size will invalidate calculations, so we need to repeat the process - break - else: - # Distribute flexible space and compensate for rounding error - # Since edge sizes can only be integers we need to add the remainder - # to the following line - remainder = _Fraction(0) - for index, edge in flexible_edges: - size, remainder = divmod(portion * edge.ratio + remainder, 1) - sizes[index] = size - break - # Sizes now contains integers only - return cast(List[int], sizes) - - -def ratio_reduce( - total: int, ratios: List[int], maximums: List[int], values: List[int] -) -> List[int]: - """Divide an integer total in to parts based on ratios. - - Args: - total (int): The total to divide. - ratios (List[int]): A list of integer ratios. - maximums (List[int]): List of maximums values for each slot. - values (List[int]): List of values - - Returns: - List[int]: A list of integers guaranteed to sum to total. - """ - ratios = [ratio if _max else 0 for ratio, _max in zip(ratios, maximums)] - total_ratio = sum(ratios) - if not total_ratio: - return values[:] - total_remaining = total - result: List[int] = [] - append = result.append - for ratio, maximum, value in zip(ratios, maximums, values): - if ratio and total_ratio > 0: - distributed = min(maximum, round(ratio * total_remaining / total_ratio)) - append(value - distributed) - total_remaining -= distributed - total_ratio -= ratio - else: - append(value) - return result - - -def ratio_distribute( - total: int, ratios: List[int], minimums: Optional[List[int]] = None -) -> List[int]: - """Distribute an integer total in to parts based on ratios. - - Args: - total (int): The total to divide. - ratios (List[int]): A list of integer ratios. - minimums (List[int]): List of minimum values for each slot. - - Returns: - List[int]: A list of integers guaranteed to sum to total. - """ - if minimums: - ratios = [ratio if _min else 0 for ratio, _min in zip(ratios, minimums)] - total_ratio = sum(ratios) - assert total_ratio > 0, "Sum of ratios must be > 0" - - total_remaining = total - distributed_total: List[int] = [] - append = distributed_total.append - if minimums is None: - _minimums = [0] * len(ratios) - else: - _minimums = minimums - for ratio, minimum in zip(ratios, _minimums): - if total_ratio > 0: - distributed = max(minimum, ceil(ratio * total_remaining / total_ratio)) - else: - distributed = total_remaining - append(distributed) - total_ratio -= ratio - total_remaining -= distributed - return distributed_total - - -if __name__ == "__main__": - from dataclasses import dataclass - - @dataclass - class E: - size: Optional[int] = None - ratio: int = 1 - minimum_size: int = 1 - - resolved = ratio_resolve(110, [E(None, 1, 1), E(None, 1, 1), E(None, 1, 1)]) - print(sum(resolved)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_spinners.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_spinners.py deleted file mode 100644 index d0bb1fe75..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_spinners.py +++ /dev/null @@ -1,482 +0,0 @@ -""" -Spinners are from: -* cli-spinners: - MIT License - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE - FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -""" - -SPINNERS = { - "dots": { - "interval": 80, - "frames": "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏", - }, - "dots2": {"interval": 80, "frames": "⣾⣽⣻⢿⡿⣟⣯⣷"}, - "dots3": { - "interval": 80, - "frames": "⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓", - }, - "dots4": { - "interval": 80, - "frames": "⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆", - }, - "dots5": { - "interval": 80, - "frames": "⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋", - }, - "dots6": { - "interval": 80, - "frames": "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁", - }, - "dots7": { - "interval": 80, - "frames": "⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈", - }, - "dots8": { - "interval": 80, - "frames": "⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈", - }, - "dots9": {"interval": 80, "frames": "⢹⢺⢼⣸⣇⡧⡗⡏"}, - "dots10": {"interval": 80, "frames": "⢄⢂⢁⡁⡈⡐⡠"}, - "dots11": {"interval": 100, "frames": "⠁⠂⠄⡀⢀⠠⠐⠈"}, - "dots12": { - "interval": 80, - "frames": [ - "⢀⠀", - "⡀⠀", - "⠄⠀", - "⢂⠀", - "⡂⠀", - "⠅⠀", - "⢃⠀", - "⡃⠀", - "⠍⠀", - "⢋⠀", - "⡋⠀", - "⠍⠁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⢈⠩", - "⡀⢙", - "⠄⡙", - "⢂⠩", - "⡂⢘", - "⠅⡘", - "⢃⠨", - "⡃⢐", - "⠍⡐", - "⢋⠠", - "⡋⢀", - "⠍⡁", - "⢋⠁", - "⡋⠁", - "⠍⠉", - "⠋⠉", - "⠋⠉", - "⠉⠙", - "⠉⠙", - "⠉⠩", - "⠈⢙", - "⠈⡙", - "⠈⠩", - "⠀⢙", - "⠀⡙", - "⠀⠩", - "⠀⢘", - "⠀⡘", - "⠀⠨", - "⠀⢐", - "⠀⡐", - "⠀⠠", - "⠀⢀", - "⠀⡀", - ], - }, - "dots8Bit": { - "interval": 80, - "frames": "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙" - "⡚⡛⡜⡝⡞⡟⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻" - "⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕" - "⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷" - "⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿", - }, - "line": {"interval": 130, "frames": ["-", "\\", "|", "/"]}, - "line2": {"interval": 100, "frames": "⠂-–—–-"}, - "pipe": {"interval": 100, "frames": "┤┘┴└├┌┬┐"}, - "simpleDots": {"interval": 400, "frames": [". ", ".. ", "...", " "]}, - "simpleDotsScrolling": { - "interval": 200, - "frames": [". ", ".. ", "...", " ..", " .", " "], - }, - "star": {"interval": 70, "frames": "✶✸✹✺✹✷"}, - "star2": {"interval": 80, "frames": "+x*"}, - "flip": { - "interval": 70, - "frames": "___-``'´-___", - }, - "hamburger": {"interval": 100, "frames": "☱☲☴"}, - "growVertical": { - "interval": 120, - "frames": "▁▃▄▅▆▇▆▅▄▃", - }, - "growHorizontal": { - "interval": 120, - "frames": "▏▎▍▌▋▊▉▊▋▌▍▎", - }, - "balloon": {"interval": 140, "frames": " .oO@* "}, - "balloon2": {"interval": 120, "frames": ".oO°Oo."}, - "noise": {"interval": 100, "frames": "▓▒░"}, - "bounce": {"interval": 120, "frames": "⠁⠂⠄⠂"}, - "boxBounce": {"interval": 120, "frames": "▖▘▝▗"}, - "boxBounce2": {"interval": 100, "frames": "▌▀▐▄"}, - "triangle": {"interval": 50, "frames": "◢◣◤◥"}, - "arc": {"interval": 100, "frames": "◜◠◝◞◡◟"}, - "circle": {"interval": 120, "frames": "◡⊙◠"}, - "squareCorners": {"interval": 180, "frames": "◰◳◲◱"}, - "circleQuarters": {"interval": 120, "frames": "◴◷◶◵"}, - "circleHalves": {"interval": 50, "frames": "◐◓◑◒"}, - "squish": {"interval": 100, "frames": "╫╪"}, - "toggle": {"interval": 250, "frames": "⊶⊷"}, - "toggle2": {"interval": 80, "frames": "▫▪"}, - "toggle3": {"interval": 120, "frames": "□■"}, - "toggle4": {"interval": 100, "frames": "■□▪▫"}, - "toggle5": {"interval": 100, "frames": "▮▯"}, - "toggle6": {"interval": 300, "frames": "ဝ၀"}, - "toggle7": {"interval": 80, "frames": "⦾⦿"}, - "toggle8": {"interval": 100, "frames": "◍◌"}, - "toggle9": {"interval": 100, "frames": "◉◎"}, - "toggle10": {"interval": 100, "frames": "㊂㊀㊁"}, - "toggle11": {"interval": 50, "frames": "⧇⧆"}, - "toggle12": {"interval": 120, "frames": "☗☖"}, - "toggle13": {"interval": 80, "frames": "=*-"}, - "arrow": {"interval": 100, "frames": "←↖↑↗→↘↓↙"}, - "arrow2": { - "interval": 80, - "frames": ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "], - }, - "arrow3": { - "interval": 120, - "frames": ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"], - }, - "bouncingBar": { - "interval": 80, - "frames": [ - "[ ]", - "[= ]", - "[== ]", - "[=== ]", - "[ ===]", - "[ ==]", - "[ =]", - "[ ]", - "[ =]", - "[ ==]", - "[ ===]", - "[====]", - "[=== ]", - "[== ]", - "[= ]", - ], - }, - "bouncingBall": { - "interval": 80, - "frames": [ - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "( ●)", - "( ● )", - "( ● )", - "( ● )", - "( ● )", - "(● )", - ], - }, - "smiley": {"interval": 200, "frames": ["😄 ", "😝 "]}, - "monkey": {"interval": 300, "frames": ["🙈 ", "🙈 ", "🙉 ", "🙊 "]}, - "hearts": {"interval": 100, "frames": ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]}, - "clock": { - "interval": 100, - "frames": [ - "🕛 ", - "🕐 ", - "🕑 ", - "🕒 ", - "🕓 ", - "🕔 ", - "🕕 ", - "🕖 ", - "🕗 ", - "🕘 ", - "🕙 ", - "🕚 ", - ], - }, - "earth": {"interval": 180, "frames": ["🌍 ", "🌎 ", "🌏 "]}, - "material": { - "interval": 17, - "frames": [ - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "██████████▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "█████████████▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁██████████████▁▁▁▁", - "▁▁▁██████████████▁▁▁", - "▁▁▁▁█████████████▁▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁██████████████▁▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁██████████████▁", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁██████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁█████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁████████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁███████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁██████████", - "▁▁▁▁▁▁▁▁▁▁▁▁████████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "████████▁▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "█████████▁▁▁▁▁▁▁▁▁▁▁", - "███████████▁▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "████████████▁▁▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "██████████████▁▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁██████████████▁▁▁▁▁", - "▁▁▁█████████████▁▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁████████████▁▁▁", - "▁▁▁▁▁▁███████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁█████████▁▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁█████████▁▁", - "▁▁▁▁▁▁▁▁▁▁█████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁████████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", - ], - }, - "moon": { - "interval": 80, - "frames": ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "], - }, - "runner": {"interval": 140, "frames": ["🚶 ", "🏃 "]}, - "pong": { - "interval": 80, - "frames": [ - "▐⠂ ▌", - "▐⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂▌", - "▐ ⠠▌", - "▐ ⡀▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐ ⠠ ▌", - "▐ ⠂ ▌", - "▐ ⠈ ▌", - "▐ ⠂ ▌", - "▐ ⠠ ▌", - "▐ ⡀ ▌", - "▐⠠ ▌", - ], - }, - "shark": { - "interval": 120, - "frames": [ - "▐|\\____________▌", - "▐_|\\___________▌", - "▐__|\\__________▌", - "▐___|\\_________▌", - "▐____|\\________▌", - "▐_____|\\_______▌", - "▐______|\\______▌", - "▐_______|\\_____▌", - "▐________|\\____▌", - "▐_________|\\___▌", - "▐__________|\\__▌", - "▐___________|\\_▌", - "▐____________|\\▌", - "▐____________/|▌", - "▐___________/|_▌", - "▐__________/|__▌", - "▐_________/|___▌", - "▐________/|____▌", - "▐_______/|_____▌", - "▐______/|______▌", - "▐_____/|_______▌", - "▐____/|________▌", - "▐___/|_________▌", - "▐__/|__________▌", - "▐_/|___________▌", - "▐/|____________▌", - ], - }, - "dqpb": {"interval": 100, "frames": "dqpb"}, - "weather": { - "interval": 100, - "frames": [ - "☀️ ", - "☀️ ", - "☀️ ", - "🌤 ", - "⛅️ ", - "🌥 ", - "☁️ ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "🌧 ", - "🌨 ", - "⛈ ", - "🌨 ", - "🌧 ", - "🌨 ", - "☁️ ", - "🌥 ", - "⛅️ ", - "🌤 ", - "☀️ ", - "☀️ ", - ], - }, - "christmas": {"interval": 400, "frames": "🌲🎄"}, - "grenade": { - "interval": 80, - "frames": [ - "، ", - "′ ", - " ´ ", - " ‾ ", - " ⸌", - " ⸊", - " |", - " ⁎", - " ⁕", - " ෴ ", - " ⁓", - " ", - " ", - " ", - ], - }, - "point": {"interval": 125, "frames": ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"]}, - "layer": {"interval": 150, "frames": "-=≡"}, - "betaWave": { - "interval": 80, - "frames": [ - "ρββββββ", - "βρβββββ", - "ββρββββ", - "βββρβββ", - "ββββρββ", - "βββββρβ", - "ββββββρ", - ], - }, - "aesthetic": { - "interval": 80, - "frames": [ - "▰▱▱▱▱▱▱", - "▰▰▱▱▱▱▱", - "▰▰▰▱▱▱▱", - "▰▰▰▰▱▱▱", - "▰▰▰▰▰▱▱", - "▰▰▰▰▰▰▱", - "▰▰▰▰▰▰▰", - "▰▱▱▱▱▱▱", - ], - }, -} diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_stack.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_stack.py deleted file mode 100644 index 194564e76..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_stack.py +++ /dev/null @@ -1,16 +0,0 @@ -from typing import List, TypeVar - -T = TypeVar("T") - - -class Stack(List[T]): - """A small shim over builtin list.""" - - @property - def top(self) -> T: - """Get top of stack.""" - return self[-1] - - def push(self, item: T) -> None: - """Push an item on to the stack (append in stack nomenclature).""" - self.append(item) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_timer.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_timer.py deleted file mode 100644 index a2ca6be03..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_timer.py +++ /dev/null @@ -1,19 +0,0 @@ -""" -Timer context manager, only used in debug. - -""" - -from time import time - -import contextlib -from typing import Generator - - -@contextlib.contextmanager -def timer(subject: str = "time") -> Generator[None, None, None]: - """print the elapsed time. (only used in debugging)""" - start = time() - yield - elapsed = time() - start - elapsed_ms = elapsed * 1000 - print(f"{subject} elapsed {elapsed_ms:.1f}ms") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_win32_console.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_win32_console.py deleted file mode 100644 index 2eba1b9b4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_win32_console.py +++ /dev/null @@ -1,661 +0,0 @@ -"""Light wrapper around the Win32 Console API - this module should only be imported on Windows - -The API that this module wraps is documented at https://docs.microsoft.com/en-us/windows/console/console-functions -""" - -import ctypes -import sys -from typing import Any - -windll: Any = None -if sys.platform == "win32": - windll = ctypes.LibraryLoader(ctypes.WinDLL) -else: - raise ImportError(f"{__name__} can only be imported on Windows") - -import time -from ctypes import Structure, byref, wintypes -from typing import IO, NamedTuple, Type, cast - -from pip._vendor.rich.color import ColorSystem -from pip._vendor.rich.style import Style - -STDOUT = -11 -ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4 - -COORD = wintypes._COORD - - -class LegacyWindowsError(Exception): - pass - - -class WindowsCoordinates(NamedTuple): - """Coordinates in the Windows Console API are (y, x), not (x, y). - This class is intended to prevent that confusion. - Rows and columns are indexed from 0. - This class can be used in place of wintypes._COORD in arguments and argtypes. - """ - - row: int - col: int - - @classmethod - def from_param(cls, value: "WindowsCoordinates") -> COORD: - """Converts a WindowsCoordinates into a wintypes _COORD structure. - This classmethod is internally called by ctypes to perform the conversion. - - Args: - value (WindowsCoordinates): The input coordinates to convert. - - Returns: - wintypes._COORD: The converted coordinates struct. - """ - return COORD(value.col, value.row) - - -class CONSOLE_SCREEN_BUFFER_INFO(Structure): - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", wintypes.WORD), - ("srWindow", wintypes.SMALL_RECT), - ("dwMaximumWindowSize", COORD), - ] - - -class CONSOLE_CURSOR_INFO(ctypes.Structure): - _fields_ = [("dwSize", wintypes.DWORD), ("bVisible", wintypes.BOOL)] - - -_GetStdHandle = windll.kernel32.GetStdHandle -_GetStdHandle.argtypes = [ - wintypes.DWORD, -] -_GetStdHandle.restype = wintypes.HANDLE - - -def GetStdHandle(handle: int = STDOUT) -> wintypes.HANDLE: - """Retrieves a handle to the specified standard device (standard input, standard output, or standard error). - - Args: - handle (int): Integer identifier for the handle. Defaults to -11 (stdout). - - Returns: - wintypes.HANDLE: The handle - """ - return cast(wintypes.HANDLE, _GetStdHandle(handle)) - - -_GetConsoleMode = windll.kernel32.GetConsoleMode -_GetConsoleMode.argtypes = [wintypes.HANDLE, wintypes.LPDWORD] -_GetConsoleMode.restype = wintypes.BOOL - - -def GetConsoleMode(std_handle: wintypes.HANDLE) -> int: - """Retrieves the current input mode of a console's input buffer - or the current output mode of a console screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - - Raises: - LegacyWindowsError: If any error occurs while calling the Windows console API. - - Returns: - int: Value representing the current console mode as documented at - https://docs.microsoft.com/en-us/windows/console/getconsolemode#parameters - """ - - console_mode = wintypes.DWORD() - success = bool(_GetConsoleMode(std_handle, console_mode)) - if not success: - raise LegacyWindowsError("Unable to get legacy Windows Console Mode") - return console_mode.value - - -_FillConsoleOutputCharacterW = windll.kernel32.FillConsoleOutputCharacterW -_FillConsoleOutputCharacterW.argtypes = [ - wintypes.HANDLE, - ctypes.c_char, - wintypes.DWORD, - cast(Type[COORD], WindowsCoordinates), - ctypes.POINTER(wintypes.DWORD), -] -_FillConsoleOutputCharacterW.restype = wintypes.BOOL - - -def FillConsoleOutputCharacter( - std_handle: wintypes.HANDLE, - char: str, - length: int, - start: WindowsCoordinates, -) -> int: - """Writes a character to the console screen buffer a specified number of times, beginning at the specified coordinates. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - char (str): The character to write. Must be a string of length 1. - length (int): The number of times to write the character. - start (WindowsCoordinates): The coordinates to start writing at. - - Returns: - int: The number of characters written. - """ - character = ctypes.c_char(char.encode()) - num_characters = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - _FillConsoleOutputCharacterW( - std_handle, - character, - num_characters, - start, - byref(num_written), - ) - return num_written.value - - -_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute -_FillConsoleOutputAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - wintypes.DWORD, - cast(Type[COORD], WindowsCoordinates), - ctypes.POINTER(wintypes.DWORD), -] -_FillConsoleOutputAttribute.restype = wintypes.BOOL - - -def FillConsoleOutputAttribute( - std_handle: wintypes.HANDLE, - attributes: int, - length: int, - start: WindowsCoordinates, -) -> int: - """Sets the character attributes for a specified number of character cells, - beginning at the specified coordinates in a screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - attributes (int): Integer value representing the foreground and background colours of the cells. - length (int): The number of cells to set the output attribute of. - start (WindowsCoordinates): The coordinates of the first cell whose attributes are to be set. - - Returns: - int: The number of cells whose attributes were actually set. - """ - num_cells = wintypes.DWORD(length) - style_attrs = wintypes.WORD(attributes) - num_written = wintypes.DWORD(0) - _FillConsoleOutputAttribute( - std_handle, style_attrs, num_cells, start, byref(num_written) - ) - return num_written.value - - -_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute -_SetConsoleTextAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, -] -_SetConsoleTextAttribute.restype = wintypes.BOOL - - -def SetConsoleTextAttribute( - std_handle: wintypes.HANDLE, attributes: wintypes.WORD -) -> bool: - """Set the colour attributes for all text written after this function is called. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - attributes (int): Integer value representing the foreground and background colours. - - - Returns: - bool: True if the attribute was set successfully, otherwise False. - """ - return bool(_SetConsoleTextAttribute(std_handle, attributes)) - - -_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo -_GetConsoleScreenBufferInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO), -] -_GetConsoleScreenBufferInfo.restype = wintypes.BOOL - - -def GetConsoleScreenBufferInfo( - std_handle: wintypes.HANDLE, -) -> CONSOLE_SCREEN_BUFFER_INFO: - """Retrieves information about the specified console screen buffer. - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - - Returns: - CONSOLE_SCREEN_BUFFER_INFO: A CONSOLE_SCREEN_BUFFER_INFO ctype struct contain information about - screen size, cursor position, colour attributes, and more.""" - console_screen_buffer_info = CONSOLE_SCREEN_BUFFER_INFO() - _GetConsoleScreenBufferInfo(std_handle, byref(console_screen_buffer_info)) - return console_screen_buffer_info - - -_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition -_SetConsoleCursorPosition.argtypes = [ - wintypes.HANDLE, - cast(Type[COORD], WindowsCoordinates), -] -_SetConsoleCursorPosition.restype = wintypes.BOOL - - -def SetConsoleCursorPosition( - std_handle: wintypes.HANDLE, coords: WindowsCoordinates -) -> bool: - """Set the position of the cursor in the console screen - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - coords (WindowsCoordinates): The coordinates to move the cursor to. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleCursorPosition(std_handle, coords)) - - -_GetConsoleCursorInfo = windll.kernel32.GetConsoleCursorInfo -_GetConsoleCursorInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_CURSOR_INFO), -] -_GetConsoleCursorInfo.restype = wintypes.BOOL - - -def GetConsoleCursorInfo( - std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO -) -> bool: - """Get the cursor info - used to get cursor visibility and width - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct that receives information - about the console's cursor. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_GetConsoleCursorInfo(std_handle, byref(cursor_info))) - - -_SetConsoleCursorInfo = windll.kernel32.SetConsoleCursorInfo -_SetConsoleCursorInfo.argtypes = [ - wintypes.HANDLE, - ctypes.POINTER(CONSOLE_CURSOR_INFO), -] -_SetConsoleCursorInfo.restype = wintypes.BOOL - - -def SetConsoleCursorInfo( - std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO -) -> bool: - """Set the cursor info - used for adjusting cursor visibility and width - - Args: - std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer. - cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct containing the new cursor info. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleCursorInfo(std_handle, byref(cursor_info))) - - -_SetConsoleTitle = windll.kernel32.SetConsoleTitleW -_SetConsoleTitle.argtypes = [wintypes.LPCWSTR] -_SetConsoleTitle.restype = wintypes.BOOL - - -def SetConsoleTitle(title: str) -> bool: - """Sets the title of the current console window - - Args: - title (str): The new title of the console window. - - Returns: - bool: True if the function succeeds, otherwise False. - """ - return bool(_SetConsoleTitle(title)) - - -class LegacyWindowsTerm: - """This class allows interaction with the legacy Windows Console API. It should only be used in the context - of environments where virtual terminal processing is not available. However, if it is used in a Windows environment, - the entire API should work. - - Args: - file (IO[str]): The file which the Windows Console API HANDLE is retrieved from, defaults to sys.stdout. - """ - - BRIGHT_BIT = 8 - - # Indices are ANSI color numbers, values are the corresponding Windows Console API color numbers - ANSI_TO_WINDOWS = [ - 0, # black The Windows colours are defined in wincon.h as follows: - 4, # red define FOREGROUND_BLUE 0x0001 -- 0000 0001 - 2, # green define FOREGROUND_GREEN 0x0002 -- 0000 0010 - 6, # yellow define FOREGROUND_RED 0x0004 -- 0000 0100 - 1, # blue define FOREGROUND_INTENSITY 0x0008 -- 0000 1000 - 5, # magenta define BACKGROUND_BLUE 0x0010 -- 0001 0000 - 3, # cyan define BACKGROUND_GREEN 0x0020 -- 0010 0000 - 7, # white define BACKGROUND_RED 0x0040 -- 0100 0000 - 8, # bright black (grey) define BACKGROUND_INTENSITY 0x0080 -- 1000 0000 - 12, # bright red - 10, # bright green - 14, # bright yellow - 9, # bright blue - 13, # bright magenta - 11, # bright cyan - 15, # bright white - ] - - def __init__(self, file: "IO[str]") -> None: - handle = GetStdHandle(STDOUT) - self._handle = handle - default_text = GetConsoleScreenBufferInfo(handle).wAttributes - self._default_text = default_text - - self._default_fore = default_text & 7 - self._default_back = (default_text >> 4) & 7 - self._default_attrs = self._default_fore | (self._default_back << 4) - - self._file = file - self.write = file.write - self.flush = file.flush - - @property - def cursor_position(self) -> WindowsCoordinates: - """Returns the current position of the cursor (0-based) - - Returns: - WindowsCoordinates: The current cursor position. - """ - coord: COORD = GetConsoleScreenBufferInfo(self._handle).dwCursorPosition - return WindowsCoordinates(row=coord.Y, col=coord.X) - - @property - def screen_size(self) -> WindowsCoordinates: - """Returns the current size of the console screen buffer, in character columns and rows - - Returns: - WindowsCoordinates: The width and height of the screen as WindowsCoordinates. - """ - screen_size: COORD = GetConsoleScreenBufferInfo(self._handle).dwSize - return WindowsCoordinates(row=screen_size.Y, col=screen_size.X) - - def write_text(self, text: str) -> None: - """Write text directly to the terminal without any modification of styles - - Args: - text (str): The text to write to the console - """ - self.write(text) - self.flush() - - def write_styled(self, text: str, style: Style) -> None: - """Write styled text to the terminal. - - Args: - text (str): The text to write - style (Style): The style of the text - """ - color = style.color - bgcolor = style.bgcolor - if style.reverse: - color, bgcolor = bgcolor, color - - if color: - fore = color.downgrade(ColorSystem.WINDOWS).number - fore = fore if fore is not None else 7 # Default to ANSI 7: White - if style.bold: - fore = fore | self.BRIGHT_BIT - if style.dim: - fore = fore & ~self.BRIGHT_BIT - fore = self.ANSI_TO_WINDOWS[fore] - else: - fore = self._default_fore - - if bgcolor: - back = bgcolor.downgrade(ColorSystem.WINDOWS).number - back = back if back is not None else 0 # Default to ANSI 0: Black - back = self.ANSI_TO_WINDOWS[back] - else: - back = self._default_back - - assert fore is not None - assert back is not None - - SetConsoleTextAttribute( - self._handle, attributes=ctypes.c_ushort(fore | (back << 4)) - ) - self.write_text(text) - SetConsoleTextAttribute(self._handle, attributes=self._default_text) - - def move_cursor_to(self, new_position: WindowsCoordinates) -> None: - """Set the position of the cursor - - Args: - new_position (WindowsCoordinates): The WindowsCoordinates representing the new position of the cursor. - """ - if new_position.col < 0 or new_position.row < 0: - return - SetConsoleCursorPosition(self._handle, coords=new_position) - - def erase_line(self) -> None: - """Erase all content on the line the cursor is currently located at""" - screen_size = self.screen_size - cursor_position = self.cursor_position - cells_to_erase = screen_size.col - start_coordinates = WindowsCoordinates(row=cursor_position.row, col=0) - FillConsoleOutputCharacter( - self._handle, " ", length=cells_to_erase, start=start_coordinates - ) - FillConsoleOutputAttribute( - self._handle, - self._default_attrs, - length=cells_to_erase, - start=start_coordinates, - ) - - def erase_end_of_line(self) -> None: - """Erase all content from the cursor position to the end of that line""" - cursor_position = self.cursor_position - cells_to_erase = self.screen_size.col - cursor_position.col - FillConsoleOutputCharacter( - self._handle, " ", length=cells_to_erase, start=cursor_position - ) - FillConsoleOutputAttribute( - self._handle, - self._default_attrs, - length=cells_to_erase, - start=cursor_position, - ) - - def erase_start_of_line(self) -> None: - """Erase all content from the cursor position to the start of that line""" - row, col = self.cursor_position - start = WindowsCoordinates(row, 0) - FillConsoleOutputCharacter(self._handle, " ", length=col, start=start) - FillConsoleOutputAttribute( - self._handle, self._default_attrs, length=col, start=start - ) - - def move_cursor_up(self) -> None: - """Move the cursor up a single cell""" - cursor_position = self.cursor_position - SetConsoleCursorPosition( - self._handle, - coords=WindowsCoordinates( - row=cursor_position.row - 1, col=cursor_position.col - ), - ) - - def move_cursor_down(self) -> None: - """Move the cursor down a single cell""" - cursor_position = self.cursor_position - SetConsoleCursorPosition( - self._handle, - coords=WindowsCoordinates( - row=cursor_position.row + 1, - col=cursor_position.col, - ), - ) - - def move_cursor_forward(self) -> None: - """Move the cursor forward a single cell. Wrap to the next line if required.""" - row, col = self.cursor_position - if col == self.screen_size.col - 1: - row += 1 - col = 0 - else: - col += 1 - SetConsoleCursorPosition( - self._handle, coords=WindowsCoordinates(row=row, col=col) - ) - - def move_cursor_to_column(self, column: int) -> None: - """Move cursor to the column specified by the zero-based column index, staying on the same row - - Args: - column (int): The zero-based column index to move the cursor to. - """ - row, _ = self.cursor_position - SetConsoleCursorPosition(self._handle, coords=WindowsCoordinates(row, column)) - - def move_cursor_backward(self) -> None: - """Move the cursor backward a single cell. Wrap to the previous line if required.""" - row, col = self.cursor_position - if col == 0: - row -= 1 - col = self.screen_size.col - 1 - else: - col -= 1 - SetConsoleCursorPosition( - self._handle, coords=WindowsCoordinates(row=row, col=col) - ) - - def hide_cursor(self) -> None: - """Hide the cursor""" - current_cursor_size = self._get_cursor_size() - invisible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=0) - SetConsoleCursorInfo(self._handle, cursor_info=invisible_cursor) - - def show_cursor(self) -> None: - """Show the cursor""" - current_cursor_size = self._get_cursor_size() - visible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=1) - SetConsoleCursorInfo(self._handle, cursor_info=visible_cursor) - - def set_title(self, title: str) -> None: - """Set the title of the terminal window - - Args: - title (str): The new title of the console window - """ - assert len(title) < 255, "Console title must be less than 255 characters" - SetConsoleTitle(title) - - def _get_cursor_size(self) -> int: - """Get the percentage of the character cell that is filled by the cursor""" - cursor_info = CONSOLE_CURSOR_INFO() - GetConsoleCursorInfo(self._handle, cursor_info=cursor_info) - return int(cursor_info.dwSize) - - -if __name__ == "__main__": - handle = GetStdHandle() - - from pip._vendor.rich.console import Console - - console = Console() - - term = LegacyWindowsTerm(sys.stdout) - term.set_title("Win32 Console Examples") - - style = Style(color="black", bgcolor="red") - - heading = Style.parse("black on green") - - # Check colour output - console.rule("Checking colour output") - console.print("[on red]on red!") - console.print("[blue]blue!") - console.print("[yellow]yellow!") - console.print("[bold yellow]bold yellow!") - console.print("[bright_yellow]bright_yellow!") - console.print("[dim bright_yellow]dim bright_yellow!") - console.print("[italic cyan]italic cyan!") - console.print("[bold white on blue]bold white on blue!") - console.print("[reverse bold white on blue]reverse bold white on blue!") - console.print("[bold black on cyan]bold black on cyan!") - console.print("[black on green]black on green!") - console.print("[blue on green]blue on green!") - console.print("[white on black]white on black!") - console.print("[black on white]black on white!") - console.print("[#1BB152 on #DA812D]#1BB152 on #DA812D!") - - # Check cursor movement - console.rule("Checking cursor movement") - console.print() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("went back and wrapped to prev line") - time.sleep(1) - term.move_cursor_up() - term.write_text("we go up") - time.sleep(1) - term.move_cursor_down() - term.write_text("and down") - time.sleep(1) - term.move_cursor_up() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("we went up and back 2") - time.sleep(1) - term.move_cursor_down() - term.move_cursor_backward() - term.move_cursor_backward() - term.write_text("we went down and back 2") - time.sleep(1) - - # Check erasing of lines - term.hide_cursor() - console.print() - console.rule("Checking line erasing") - console.print("\n...Deleting to the start of the line...") - term.write_text("The red arrow shows the cursor location, and direction of erase") - time.sleep(1) - term.move_cursor_to_column(16) - term.write_styled("<", Style.parse("black on red")) - term.move_cursor_backward() - time.sleep(1) - term.erase_start_of_line() - time.sleep(1) - - console.print("\n\n...And to the end of the line...") - term.write_text("The red arrow shows the cursor location, and direction of erase") - time.sleep(1) - - term.move_cursor_to_column(16) - term.write_styled(">", Style.parse("black on red")) - time.sleep(1) - term.erase_end_of_line() - time.sleep(1) - - console.print("\n\n...Now the whole line will be erased...") - term.write_styled("I'm going to disappear!", style=Style.parse("black on cyan")) - time.sleep(1) - term.erase_line() - - term.show_cursor() - print("\n") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows.py deleted file mode 100644 index 7520a9f90..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows.py +++ /dev/null @@ -1,71 +0,0 @@ -import sys -from dataclasses import dataclass - - -@dataclass -class WindowsConsoleFeatures: - """Windows features available.""" - - vt: bool = False - """The console supports VT codes.""" - truecolor: bool = False - """The console supports truecolor.""" - - -try: - import ctypes - from ctypes import LibraryLoader - - if sys.platform == "win32": - windll = LibraryLoader(ctypes.WinDLL) - else: - windll = None - raise ImportError("Not windows") - - from pip._vendor.rich._win32_console import ( - ENABLE_VIRTUAL_TERMINAL_PROCESSING, - GetConsoleMode, - GetStdHandle, - LegacyWindowsError, - ) - -except (AttributeError, ImportError, ValueError): - # Fallback if we can't load the Windows DLL - def get_windows_console_features() -> WindowsConsoleFeatures: - features = WindowsConsoleFeatures() - return features - -else: - - def get_windows_console_features() -> WindowsConsoleFeatures: - """Get windows console features. - - Returns: - WindowsConsoleFeatures: An instance of WindowsConsoleFeatures. - """ - handle = GetStdHandle() - try: - console_mode = GetConsoleMode(handle) - success = True - except LegacyWindowsError: - console_mode = 0 - success = False - vt = bool(success and console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) - truecolor = False - if vt: - win_version = sys.getwindowsversion() - truecolor = win_version.major > 10 or ( - win_version.major == 10 and win_version.build >= 15063 - ) - features = WindowsConsoleFeatures(vt=vt, truecolor=truecolor) - return features - - -if __name__ == "__main__": - import platform - - features = get_windows_console_features() - from pip._vendor.rich import print - - print(f'platform="{platform.system()}"') - print(repr(features)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py deleted file mode 100644 index 5ece05649..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +++ /dev/null @@ -1,56 +0,0 @@ -from typing import Iterable, Sequence, Tuple, cast - -from pip._vendor.rich._win32_console import LegacyWindowsTerm, WindowsCoordinates -from pip._vendor.rich.segment import ControlCode, ControlType, Segment - - -def legacy_windows_render(buffer: Iterable[Segment], term: LegacyWindowsTerm) -> None: - """Makes appropriate Windows Console API calls based on the segments in the buffer. - - Args: - buffer (Iterable[Segment]): Iterable of Segments to convert to Win32 API calls. - term (LegacyWindowsTerm): Used to call the Windows Console API. - """ - for text, style, control in buffer: - if not control: - if style: - term.write_styled(text, style) - else: - term.write_text(text) - else: - control_codes: Sequence[ControlCode] = control - for control_code in control_codes: - control_type = control_code[0] - if control_type == ControlType.CURSOR_MOVE_TO: - _, x, y = cast(Tuple[ControlType, int, int], control_code) - term.move_cursor_to(WindowsCoordinates(row=y - 1, col=x - 1)) - elif control_type == ControlType.CARRIAGE_RETURN: - term.write_text("\r") - elif control_type == ControlType.HOME: - term.move_cursor_to(WindowsCoordinates(0, 0)) - elif control_type == ControlType.CURSOR_UP: - term.move_cursor_up() - elif control_type == ControlType.CURSOR_DOWN: - term.move_cursor_down() - elif control_type == ControlType.CURSOR_FORWARD: - term.move_cursor_forward() - elif control_type == ControlType.CURSOR_BACKWARD: - term.move_cursor_backward() - elif control_type == ControlType.CURSOR_MOVE_TO_COLUMN: - _, column = cast(Tuple[ControlType, int], control_code) - term.move_cursor_to_column(column - 1) - elif control_type == ControlType.HIDE_CURSOR: - term.hide_cursor() - elif control_type == ControlType.SHOW_CURSOR: - term.show_cursor() - elif control_type == ControlType.ERASE_IN_LINE: - _, mode = cast(Tuple[ControlType, int], control_code) - if mode == 0: - term.erase_end_of_line() - elif mode == 1: - term.erase_start_of_line() - elif mode == 2: - term.erase_line() - elif control_type == ControlType.SET_WINDOW_TITLE: - _, title = cast(Tuple[ControlType, str], control_code) - term.set_title(title) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_wrap.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_wrap.py deleted file mode 100644 index 2e94ff6f4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/_wrap.py +++ /dev/null @@ -1,93 +0,0 @@ -from __future__ import annotations - -import re -from typing import Iterable - -from ._loop import loop_last -from .cells import cell_len, chop_cells - -re_word = re.compile(r"\s*\S+\s*") - - -def words(text: str) -> Iterable[tuple[int, int, str]]: - """Yields each word from the text as a tuple - containing (start_index, end_index, word). A "word" in this context may - include the actual word and any whitespace to the right. - """ - position = 0 - word_match = re_word.match(text, position) - while word_match is not None: - start, end = word_match.span() - word = word_match.group(0) - yield start, end, word - word_match = re_word.match(text, end) - - -def divide_line(text: str, width: int, fold: bool = True) -> list[int]: - """Given a string of text, and a width (measured in cells), return a list - of cell offsets which the string should be split at in order for it to fit - within the given width. - - Args: - text: The text to examine. - width: The available cell width. - fold: If True, words longer than `width` will be folded onto a new line. - - Returns: - A list of indices to break the line at. - """ - break_positions: list[int] = [] # offsets to insert the breaks at - append = break_positions.append - cell_offset = 0 - _cell_len = cell_len - - for start, _end, word in words(text): - word_length = _cell_len(word.rstrip()) - remaining_space = width - cell_offset - word_fits_remaining_space = remaining_space >= word_length - - if word_fits_remaining_space: - # Simplest case - the word fits within the remaining width for this line. - cell_offset += _cell_len(word) - else: - # Not enough space remaining for this word on the current line. - if word_length > width: - # The word doesn't fit on any line, so we can't simply - # place it on the next line... - if fold: - # Fold the word across multiple lines. - folded_word = chop_cells(word, width=width) - for last, line in loop_last(folded_word): - if start: - append(start) - if last: - cell_offset = _cell_len(line) - else: - start += len(line) - else: - # Folding isn't allowed, so crop the word. - if start: - append(start) - cell_offset = _cell_len(word) - elif cell_offset and start: - # The word doesn't fit within the remaining space on the current - # line, but it *can* fit on to the next (empty) line. - append(start) - cell_offset = _cell_len(word) - - return break_positions - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - - console = Console(width=10) - console.print("12345 abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ 12345") - print(chop_cells("abcdefghijklmnopqrstuvwxyz", 10)) - - console = Console(width=20) - console.rule() - console.print("TextualはPythonの高速アプリケーション開発フレームワークです") - - console.rule() - console.print("アプリケーションは1670万色を使用でき") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/abc.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/abc.py deleted file mode 100644 index e6e498efa..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/abc.py +++ /dev/null @@ -1,33 +0,0 @@ -from abc import ABC - - -class RichRenderable(ABC): - """An abstract base class for Rich renderables. - - Note that there is no need to extend this class, the intended use is to check if an - object supports the Rich renderable protocol. For example:: - - if isinstance(my_object, RichRenderable): - console.print(my_object) - - """ - - @classmethod - def __subclasshook__(cls, other: type) -> bool: - """Check if this class supports the rich render protocol.""" - return hasattr(other, "__rich_console__") or hasattr(other, "__rich__") - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.text import Text - - t = Text() - print(isinstance(Text, RichRenderable)) - print(isinstance(t, RichRenderable)) - - class Foo: - pass - - f = Foo() - print(isinstance(f, RichRenderable)) - print(isinstance("", RichRenderable)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/align.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/align.py deleted file mode 100644 index e65dc5ba2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/align.py +++ /dev/null @@ -1,306 +0,0 @@ -from itertools import chain -from typing import TYPE_CHECKING, Iterable, Optional, Literal - -from .constrain import Constrain -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - -AlignMethod = Literal["left", "center", "right"] -VerticalAlignMethod = Literal["top", "middle", "bottom"] - - -class Align(JupyterMixin): - """Align a renderable by adding spaces if necessary. - - Args: - renderable (RenderableType): A console renderable. - align (AlignMethod): One of "left", "center", or "right"" - style (StyleType, optional): An optional style to apply to the background. - vertical (Optional[VerticalAlignMethod], optional): Optional vertical align, one of "top", "middle", or "bottom". Defaults to None. - pad (bool, optional): Pad the right with spaces. Defaults to True. - width (int, optional): Restrict contents to given width, or None to use default width. Defaults to None. - height (int, optional): Set height of align renderable, or None to fit to contents. Defaults to None. - - Raises: - ValueError: if ``align`` is not one of the expected values. - """ - - def __init__( - self, - renderable: "RenderableType", - align: AlignMethod = "left", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> None: - if align not in ("left", "center", "right"): - raise ValueError( - f'invalid value for align, expected "left", "center", or "right" (not {align!r})' - ) - if vertical is not None and vertical not in ("top", "middle", "bottom"): - raise ValueError( - f'invalid value for vertical, expected "top", "middle", or "bottom" (not {vertical!r})' - ) - self.renderable = renderable - self.align = align - self.style = style - self.vertical = vertical - self.pad = pad - self.width = width - self.height = height - - def __repr__(self) -> str: - return f"Align({self.renderable!r}, {self.align!r})" - - @classmethod - def left( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the left.""" - return cls( - renderable, - "left", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - @classmethod - def center( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the center.""" - return cls( - renderable, - "center", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - @classmethod - def right( - cls, - renderable: "RenderableType", - style: Optional[StyleType] = None, - *, - vertical: Optional[VerticalAlignMethod] = None, - pad: bool = True, - width: Optional[int] = None, - height: Optional[int] = None, - ) -> "Align": - """Align a renderable to the right.""" - return cls( - renderable, - "right", - style=style, - vertical=vertical, - pad=pad, - width=width, - height=height, - ) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - align = self.align - width = console.measure(self.renderable, options=options).maximum - rendered = console.render( - Constrain( - self.renderable, width if self.width is None else min(width, self.width) - ), - options.update(height=None), - ) - lines = list(Segment.split_lines(rendered)) - width, height = Segment.get_shape(lines) - lines = Segment.set_shape(lines, width, height) - new_line = Segment.line() - excess_space = options.max_width - width - style = console.get_style(self.style) if self.style is not None else None - - def generate_segments() -> Iterable[Segment]: - if excess_space <= 0: - # Exact fit - for line in lines: - yield from line - yield new_line - - elif align == "left": - # Pad on the right - pad = Segment(" " * excess_space, style) if self.pad else None - for line in lines: - yield from line - if pad: - yield pad - yield new_line - - elif align == "center": - # Pad left and right - left = excess_space // 2 - pad = Segment(" " * left, style) - pad_right = ( - Segment(" " * (excess_space - left), style) if self.pad else None - ) - for line in lines: - if left: - yield pad - yield from line - if pad_right: - yield pad_right - yield new_line - - elif align == "right": - # Padding on left - pad = Segment(" " * excess_space, style) - for line in lines: - yield pad - yield from line - yield new_line - - blank_line = ( - Segment(f"{' ' * (self.width or options.max_width)}\n", style) - if self.pad - else Segment("\n") - ) - - def blank_lines(count: int) -> Iterable[Segment]: - if count > 0: - for _ in range(count): - yield blank_line - - vertical_height = self.height or options.height - iter_segments: Iterable[Segment] - if self.vertical and vertical_height is not None: - if self.vertical == "top": - bottom_space = vertical_height - height - iter_segments = chain(generate_segments(), blank_lines(bottom_space)) - elif self.vertical == "middle": - top_space = (vertical_height - height) // 2 - bottom_space = vertical_height - top_space - height - iter_segments = chain( - blank_lines(top_space), - generate_segments(), - blank_lines(bottom_space), - ) - else: # self.vertical == "bottom": - top_space = vertical_height - height - iter_segments = chain(blank_lines(top_space), generate_segments()) - else: - iter_segments = generate_segments() - if self.style: - style = console.get_style(self.style) - iter_segments = Segment.apply_style(iter_segments, style) - yield from iter_segments - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - measurement = Measurement.get(console, options, self.renderable) - return measurement - - -class VerticalCenter(JupyterMixin): - """Vertically aligns a renderable. - - Warn: - This class is deprecated and may be removed in a future version. Use Align class with - `vertical="middle"`. - - Args: - renderable (RenderableType): A renderable object. - style (StyleType, optional): An optional style to apply to the background. Defaults to None. - """ - - def __init__( - self, - renderable: "RenderableType", - style: Optional[StyleType] = None, - ) -> None: - self.renderable = renderable - self.style = style - - def __repr__(self) -> str: - return f"VerticalCenter({self.renderable!r})" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) if self.style is not None else None - lines = console.render_lines( - self.renderable, options.update(height=None), pad=False - ) - width, _height = Segment.get_shape(lines) - new_line = Segment.line() - height = options.height or options.size.height - top_space = (height - len(lines)) // 2 - bottom_space = height - top_space - len(lines) - blank_line = Segment(f"{' ' * width}", style) - - def blank_lines(count: int) -> Iterable[Segment]: - for _ in range(count): - yield blank_line - yield new_line - - if top_space > 0: - yield from blank_lines(top_space) - for line in lines: - yield from line - yield new_line - if bottom_space > 0: - yield from blank_lines(bottom_space) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - measurement = Measurement.get(console, options, self.renderable) - return measurement - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console, Group - from pip._vendor.rich.highlighter import ReprHighlighter - from pip._vendor.rich.panel import Panel - - highlighter = ReprHighlighter() - console = Console() - - panel = Panel( - Group( - Align.left(highlighter("align='left'")), - Align.center(highlighter("align='center'")), - Align.right(highlighter("align='right'")), - ), - width=60, - style="on dark_blue", - title="Align", - ) - - console.print( - Align.center(panel, vertical="middle", style="on red", height=console.height) - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/ansi.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/ansi.py deleted file mode 100644 index 7de86ce50..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/ansi.py +++ /dev/null @@ -1,241 +0,0 @@ -import re -import sys -from contextlib import suppress -from typing import Iterable, NamedTuple, Optional - -from .color import Color -from .style import Style -from .text import Text - -re_ansi = re.compile( - r""" -(?:\x1b[0-?])| -(?:\x1b\](.*?)\x1b\\)| -(?:\x1b([(@-Z\\-_]|\[[0-?]*[ -/]*[@-~])) -""", - re.VERBOSE, -) - - -class _AnsiToken(NamedTuple): - """Result of ansi tokenized string.""" - - plain: str = "" - sgr: Optional[str] = "" - osc: Optional[str] = "" - - -def _ansi_tokenize(ansi_text: str) -> Iterable[_AnsiToken]: - """Tokenize a string in to plain text and ANSI codes. - - Args: - ansi_text (str): A String containing ANSI codes. - - Yields: - AnsiToken: A named tuple of (plain, sgr, osc) - """ - - position = 0 - sgr: Optional[str] - osc: Optional[str] - for match in re_ansi.finditer(ansi_text): - start, end = match.span(0) - osc, sgr = match.groups() - if start > position: - yield _AnsiToken(ansi_text[position:start]) - if sgr: - if sgr == "(": - position = end + 1 - continue - if sgr.endswith("m"): - yield _AnsiToken("", sgr[1:-1], osc) - else: - yield _AnsiToken("", sgr, osc) - position = end - if position < len(ansi_text): - yield _AnsiToken(ansi_text[position:]) - - -SGR_STYLE_MAP = { - 1: "bold", - 2: "dim", - 3: "italic", - 4: "underline", - 5: "blink", - 6: "blink2", - 7: "reverse", - 8: "conceal", - 9: "strike", - 21: "underline2", - 22: "not dim not bold", - 23: "not italic", - 24: "not underline", - 25: "not blink", - 26: "not blink2", - 27: "not reverse", - 28: "not conceal", - 29: "not strike", - 30: "color(0)", - 31: "color(1)", - 32: "color(2)", - 33: "color(3)", - 34: "color(4)", - 35: "color(5)", - 36: "color(6)", - 37: "color(7)", - 39: "default", - 40: "on color(0)", - 41: "on color(1)", - 42: "on color(2)", - 43: "on color(3)", - 44: "on color(4)", - 45: "on color(5)", - 46: "on color(6)", - 47: "on color(7)", - 49: "on default", - 51: "frame", - 52: "encircle", - 53: "overline", - 54: "not frame not encircle", - 55: "not overline", - 90: "color(8)", - 91: "color(9)", - 92: "color(10)", - 93: "color(11)", - 94: "color(12)", - 95: "color(13)", - 96: "color(14)", - 97: "color(15)", - 100: "on color(8)", - 101: "on color(9)", - 102: "on color(10)", - 103: "on color(11)", - 104: "on color(12)", - 105: "on color(13)", - 106: "on color(14)", - 107: "on color(15)", -} - - -class AnsiDecoder: - """Translate ANSI code in to styled Text.""" - - def __init__(self) -> None: - self.style = Style.null() - - def decode(self, terminal_text: str) -> Iterable[Text]: - """Decode ANSI codes in an iterable of lines. - - Args: - lines (Iterable[str]): An iterable of lines of terminal output. - - Yields: - Text: Marked up Text. - """ - for line in terminal_text.splitlines(): - yield self.decode_line(line) - - def decode_line(self, line: str) -> Text: - """Decode a line containing ansi codes. - - Args: - line (str): A line of terminal output. - - Returns: - Text: A Text instance marked up according to ansi codes. - """ - from_ansi = Color.from_ansi - from_rgb = Color.from_rgb - _Style = Style - text = Text() - append = text.append - line = line.rsplit("\r", 1)[-1] - for plain_text, sgr, osc in _ansi_tokenize(line): - if plain_text: - append(plain_text, self.style or None) - elif osc is not None: - if osc.startswith("8;"): - _params, semicolon, link = osc[2:].partition(";") - if semicolon: - self.style = self.style.update_link(link or None) - elif sgr is not None: - # Translate in to semi-colon separated codes - # Ignore invalid codes, because we want to be lenient - codes = [ - min(255, int(_code) if _code else 0) - for _code in sgr.split(";") - if _code.isdigit() or _code == "" - ] - iter_codes = iter(codes) - for code in iter_codes: - if code == 0: - # reset - self.style = _Style.null() - elif code in SGR_STYLE_MAP: - # styles - self.style += _Style.parse(SGR_STYLE_MAP[code]) - elif code == 38: - #  Foreground - with suppress(StopIteration): - color_type = next(iter_codes) - if color_type == 5: - self.style += _Style.from_color( - from_ansi(next(iter_codes)) - ) - elif color_type == 2: - self.style += _Style.from_color( - from_rgb( - next(iter_codes), - next(iter_codes), - next(iter_codes), - ) - ) - elif code == 48: - # Background - with suppress(StopIteration): - color_type = next(iter_codes) - if color_type == 5: - self.style += _Style.from_color( - None, from_ansi(next(iter_codes)) - ) - elif color_type == 2: - self.style += _Style.from_color( - None, - from_rgb( - next(iter_codes), - next(iter_codes), - next(iter_codes), - ), - ) - - return text - - -if sys.platform != "win32" and __name__ == "__main__": # pragma: no cover - import io - import os - import pty - import sys - - decoder = AnsiDecoder() - - stdout = io.BytesIO() - - def read(fd: int) -> bytes: - data = os.read(fd, 1024) - stdout.write(data) - return data - - pty.spawn(sys.argv[1:], read) - - from .console import Console - - console = Console(record=True) - - stdout_result = stdout.getvalue().decode("utf-8") - print(stdout_result) - - for line in decoder.decode(stdout_result): - console.print(line) - - console.save_html("stdout.html") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/bar.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/bar.py deleted file mode 100644 index 022284b57..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/bar.py +++ /dev/null @@ -1,93 +0,0 @@ -from typing import Optional, Union - -from .color import Color -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style - -# There are left-aligned characters for 1/8 to 7/8, but -# the right-aligned characters exist only for 1/8 and 4/8. -BEGIN_BLOCK_ELEMENTS = ["█", "█", "█", "▐", "▐", "▐", "▕", "▕"] -END_BLOCK_ELEMENTS = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉"] -FULL_BLOCK = "█" - - -class Bar(JupyterMixin): - """Renders a solid block bar. - - Args: - size (float): Value for the end of the bar. - begin (float): Begin point (between 0 and size, inclusive). - end (float): End point (between 0 and size, inclusive). - width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None. - color (Union[Color, str], optional): Color of the bar. Defaults to "default". - bgcolor (Union[Color, str], optional): Color of bar background. Defaults to "default". - """ - - def __init__( - self, - size: float, - begin: float, - end: float, - *, - width: Optional[int] = None, - color: Union[Color, str] = "default", - bgcolor: Union[Color, str] = "default", - ): - self.size = size - self.begin = max(begin, 0) - self.end = min(end, size) - self.width = width - self.style = Style(color=color, bgcolor=bgcolor) - - def __repr__(self) -> str: - return f"Bar({self.size}, {self.begin}, {self.end})" - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = min( - self.width if self.width is not None else options.max_width, - options.max_width, - ) - - if self.begin >= self.end: - yield Segment(" " * width, self.style) - yield Segment.line() - return - - prefix_complete_eights = int(width * 8 * self.begin / self.size) - prefix_bar_count = prefix_complete_eights // 8 - prefix_eights_count = prefix_complete_eights % 8 - - body_complete_eights = int(width * 8 * self.end / self.size) - body_bar_count = body_complete_eights // 8 - body_eights_count = body_complete_eights % 8 - - # When start and end fall into the same cell, we ideally should render - # a symbol that's "center-aligned", but there is no good symbol in Unicode. - # In this case, we fall back to right-aligned block symbol for simplicity. - - prefix = " " * prefix_bar_count - if prefix_eights_count: - prefix += BEGIN_BLOCK_ELEMENTS[prefix_eights_count] - - body = FULL_BLOCK * body_bar_count - if body_eights_count: - body += END_BLOCK_ELEMENTS[body_eights_count] - - suffix = " " * (width - len(body)) - - yield Segment(prefix + body[len(prefix) :] + suffix, self.style) - yield Segment.line() - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return ( - Measurement(self.width, self.width) - if self.width is not None - else Measurement(4, options.max_width) - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/box.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/box.py deleted file mode 100644 index 3f330ccb5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/box.py +++ /dev/null @@ -1,474 +0,0 @@ -from typing import TYPE_CHECKING, Iterable, List, Literal - - -from ._loop import loop_last - -if TYPE_CHECKING: - from pip._vendor.rich.console import ConsoleOptions - - -class Box: - """Defines characters to render boxes. - - ┌─┬┐ top - │ ││ head - ├─┼┤ head_row - │ ││ mid - ├─┼┤ row - ├─┼┤ foot_row - │ ││ foot - └─┴┘ bottom - - Args: - box (str): Characters making up box. - ascii (bool, optional): True if this box uses ascii characters only. Default is False. - """ - - def __init__(self, box: str, *, ascii: bool = False) -> None: - self._box = box - self.ascii = ascii - line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines() - # top - self.top_left, self.top, self.top_divider, self.top_right = iter(line1) - # head - self.head_left, _, self.head_vertical, self.head_right = iter(line2) - # head_row - ( - self.head_row_left, - self.head_row_horizontal, - self.head_row_cross, - self.head_row_right, - ) = iter(line3) - - # mid - self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4) - # row - self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5) - # foot_row - ( - self.foot_row_left, - self.foot_row_horizontal, - self.foot_row_cross, - self.foot_row_right, - ) = iter(line6) - # foot - self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7) - # bottom - self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter( - line8 - ) - - def __repr__(self) -> str: - return "Box(...)" - - def __str__(self) -> str: - return self._box - - def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box": - """Substitute this box for another if it won't render due to platform issues. - - Args: - options (ConsoleOptions): Console options used in rendering. - safe (bool, optional): Substitute this for another Box if there are known problems - displaying on the platform (currently only relevant on Windows). Default is True. - - Returns: - Box: A different Box or the same Box. - """ - box = self - if options.legacy_windows and safe: - box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box) - if options.ascii_only and not box.ascii: - box = ASCII - return box - - def get_plain_headed_box(self) -> "Box": - """If this box uses special characters for the borders of the header, then - return the equivalent box that does not. - - Returns: - Box: The most similar Box that doesn't use header-specific box characters. - If the current Box already satisfies this criterion, then it's returned. - """ - return PLAIN_HEADED_SUBSTITUTIONS.get(self, self) - - def get_top(self, widths: Iterable[int]) -> str: - """Get the top of a simple box. - - Args: - widths (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - - parts: List[str] = [] - append = parts.append - append(self.top_left) - for last, width in loop_last(widths): - append(self.top * width) - if not last: - append(self.top_divider) - append(self.top_right) - return "".join(parts) - - def get_row( - self, - widths: Iterable[int], - level: Literal["head", "row", "foot", "mid"] = "row", - edge: bool = True, - ) -> str: - """Get the top of a simple box. - - Args: - width (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - if level == "head": - left = self.head_row_left - horizontal = self.head_row_horizontal - cross = self.head_row_cross - right = self.head_row_right - elif level == "row": - left = self.row_left - horizontal = self.row_horizontal - cross = self.row_cross - right = self.row_right - elif level == "mid": - left = self.mid_left - horizontal = " " - cross = self.mid_vertical - right = self.mid_right - elif level == "foot": - left = self.foot_row_left - horizontal = self.foot_row_horizontal - cross = self.foot_row_cross - right = self.foot_row_right - else: - raise ValueError("level must be 'head', 'row' or 'foot'") - - parts: List[str] = [] - append = parts.append - if edge: - append(left) - for last, width in loop_last(widths): - append(horizontal * width) - if not last: - append(cross) - if edge: - append(right) - return "".join(parts) - - def get_bottom(self, widths: Iterable[int]) -> str: - """Get the bottom of a simple box. - - Args: - widths (List[int]): Widths of columns. - - Returns: - str: A string of box characters. - """ - - parts: List[str] = [] - append = parts.append - append(self.bottom_left) - for last, width in loop_last(widths): - append(self.bottom * width) - if not last: - append(self.bottom_divider) - append(self.bottom_right) - return "".join(parts) - - -# fmt: off -ASCII: Box = Box( - "+--+\n" - "| ||\n" - "|-+|\n" - "| ||\n" - "|-+|\n" - "|-+|\n" - "| ||\n" - "+--+\n", - ascii=True, -) - -ASCII2: Box = Box( - "+-++\n" - "| ||\n" - "+-++\n" - "| ||\n" - "+-++\n" - "+-++\n" - "| ||\n" - "+-++\n", - ascii=True, -) - -ASCII_DOUBLE_HEAD: Box = Box( - "+-++\n" - "| ||\n" - "+=++\n" - "| ||\n" - "+-++\n" - "+-++\n" - "| ||\n" - "+-++\n", - ascii=True, -) - -SQUARE: Box = Box( - "┌─┬┐\n" - "│ ││\n" - "├─┼┤\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -SQUARE_DOUBLE_HEAD: Box = Box( - "┌─┬┐\n" - "│ ││\n" - "╞═╪╡\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -MINIMAL: Box = Box( - " ╷ \n" - " │ \n" - "╶─┼╴\n" - " │ \n" - "╶─┼╴\n" - "╶─┼╴\n" - " │ \n" - " ╵ \n" -) - - -MINIMAL_HEAVY_HEAD: Box = Box( - " ╷ \n" - " │ \n" - "╺━┿╸\n" - " │ \n" - "╶─┼╴\n" - "╶─┼╴\n" - " │ \n" - " ╵ \n" -) - -MINIMAL_DOUBLE_HEAD: Box = Box( - " ╷ \n" - " │ \n" - " ═╪ \n" - " │ \n" - " ─┼ \n" - " ─┼ \n" - " │ \n" - " ╵ \n" -) - - -SIMPLE: Box = Box( - " \n" - " \n" - " ── \n" - " \n" - " \n" - " ── \n" - " \n" - " \n" -) - -SIMPLE_HEAD: Box = Box( - " \n" - " \n" - " ── \n" - " \n" - " \n" - " \n" - " \n" - " \n" -) - - -SIMPLE_HEAVY: Box = Box( - " \n" - " \n" - " ━━ \n" - " \n" - " \n" - " ━━ \n" - " \n" - " \n" -) - - -HORIZONTALS: Box = Box( - " ── \n" - " \n" - " ── \n" - " \n" - " ── \n" - " ── \n" - " \n" - " ── \n" -) - -ROUNDED: Box = Box( - "╭─┬╮\n" - "│ ││\n" - "├─┼┤\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "╰─┴╯\n" -) - -HEAVY: Box = Box( - "┏━┳┓\n" - "┃ ┃┃\n" - "┣━╋┫\n" - "┃ ┃┃\n" - "┣━╋┫\n" - "┣━╋┫\n" - "┃ ┃┃\n" - "┗━┻┛\n" -) - -HEAVY_EDGE: Box = Box( - "┏━┯┓\n" - "┃ │┃\n" - "┠─┼┨\n" - "┃ │┃\n" - "┠─┼┨\n" - "┠─┼┨\n" - "┃ │┃\n" - "┗━┷┛\n" -) - -HEAVY_HEAD: Box = Box( - "┏━┳┓\n" - "┃ ┃┃\n" - "┡━╇┩\n" - "│ ││\n" - "├─┼┤\n" - "├─┼┤\n" - "│ ││\n" - "└─┴┘\n" -) - -DOUBLE: Box = Box( - "╔═╦╗\n" - "║ ║║\n" - "╠═╬╣\n" - "║ ║║\n" - "╠═╬╣\n" - "╠═╬╣\n" - "║ ║║\n" - "╚═╩╝\n" -) - -DOUBLE_EDGE: Box = Box( - "╔═╤╗\n" - "║ │║\n" - "╟─┼╢\n" - "║ │║\n" - "╟─┼╢\n" - "╟─┼╢\n" - "║ │║\n" - "╚═╧╝\n" -) - -MARKDOWN: Box = Box( - " \n" - "| ||\n" - "|-||\n" - "| ||\n" - "|-||\n" - "|-||\n" - "| ||\n" - " \n", - ascii=True, -) -# fmt: on - -# Map Boxes that don't render with raster fonts on to equivalent that do -LEGACY_WINDOWS_SUBSTITUTIONS = { - ROUNDED: SQUARE, - MINIMAL_HEAVY_HEAD: MINIMAL, - SIMPLE_HEAVY: SIMPLE, - HEAVY: SQUARE, - HEAVY_EDGE: SQUARE, - HEAVY_HEAD: SQUARE, -} - -# Map headed boxes to their headerless equivalents -PLAIN_HEADED_SUBSTITUTIONS = { - HEAVY_HEAD: SQUARE, - SQUARE_DOUBLE_HEAD: SQUARE, - MINIMAL_DOUBLE_HEAD: MINIMAL, - MINIMAL_HEAVY_HEAD: MINIMAL, - ASCII_DOUBLE_HEAD: ASCII2, -} - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.columns import Columns - from pip._vendor.rich.panel import Panel - - from . import box as box - from .console import Console - from .table import Table - from .text import Text - - console = Console(record=True) - - BOXES = [ - "ASCII", - "ASCII2", - "ASCII_DOUBLE_HEAD", - "SQUARE", - "SQUARE_DOUBLE_HEAD", - "MINIMAL", - "MINIMAL_HEAVY_HEAD", - "MINIMAL_DOUBLE_HEAD", - "SIMPLE", - "SIMPLE_HEAD", - "SIMPLE_HEAVY", - "HORIZONTALS", - "ROUNDED", - "HEAVY", - "HEAVY_EDGE", - "HEAVY_HEAD", - "DOUBLE", - "DOUBLE_EDGE", - "MARKDOWN", - ] - - console.print(Panel("[bold green]Box Constants", style="green"), justify="center") - console.print() - - columns = Columns(expand=True, padding=2) - for box_name in sorted(BOXES): - table = Table( - show_footer=True, style="dim", border_style="not dim", expand=True - ) - table.add_column("Header 1", "Footer 1") - table.add_column("Header 2", "Footer 2") - table.add_row("Cell", "Cell") - table.add_row("Cell", "Cell") - table.box = getattr(box, box_name) - table.title = Text(f"box.{box_name}", style="magenta") - columns.add_renderable(table) - console.print(columns) - - # console.save_svg("box.svg") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/cells.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/cells.py deleted file mode 100644 index a85462271..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/cells.py +++ /dev/null @@ -1,174 +0,0 @@ -from __future__ import annotations - -from functools import lru_cache -from typing import Callable - -from ._cell_widths import CELL_WIDTHS - -# Ranges of unicode ordinals that produce a 1-cell wide character -# This is non-exhaustive, but covers most common Western characters -_SINGLE_CELL_UNICODE_RANGES: list[tuple[int, int]] = [ - (0x20, 0x7E), # Latin (excluding non-printable) - (0xA0, 0xAC), - (0xAE, 0x002FF), - (0x00370, 0x00482), # Greek / Cyrillic - (0x02500, 0x025FC), # Box drawing, box elements, geometric shapes - (0x02800, 0x028FF), # Braille -] - -# A set of characters that are a single cell wide -_SINGLE_CELLS = frozenset( - [ - character - for _start, _end in _SINGLE_CELL_UNICODE_RANGES - for character in map(chr, range(_start, _end + 1)) - ] -) - -# When called with a string this will return True if all -# characters are single-cell, otherwise False -_is_single_cell_widths: Callable[[str], bool] = _SINGLE_CELLS.issuperset - - -@lru_cache(4096) -def cached_cell_len(text: str) -> int: - """Get the number of cells required to display text. - - This method always caches, which may use up a lot of memory. It is recommended to use - `cell_len` over this method. - - Args: - text (str): Text to display. - - Returns: - int: Get the number of cells required to display text. - """ - if _is_single_cell_widths(text): - return len(text) - return sum(map(get_character_cell_size, text)) - - -def cell_len(text: str, _cell_len: Callable[[str], int] = cached_cell_len) -> int: - """Get the number of cells required to display text. - - Args: - text (str): Text to display. - - Returns: - int: Get the number of cells required to display text. - """ - if len(text) < 512: - return _cell_len(text) - if _is_single_cell_widths(text): - return len(text) - return sum(map(get_character_cell_size, text)) - - -@lru_cache(maxsize=4096) -def get_character_cell_size(character: str) -> int: - """Get the cell size of a character. - - Args: - character (str): A single character. - - Returns: - int: Number of cells (0, 1 or 2) occupied by that character. - """ - codepoint = ord(character) - _table = CELL_WIDTHS - lower_bound = 0 - upper_bound = len(_table) - 1 - index = (lower_bound + upper_bound) // 2 - while True: - start, end, width = _table[index] - if codepoint < start: - upper_bound = index - 1 - elif codepoint > end: - lower_bound = index + 1 - else: - return 0 if width == -1 else width - if upper_bound < lower_bound: - break - index = (lower_bound + upper_bound) // 2 - return 1 - - -def set_cell_size(text: str, total: int) -> str: - """Set the length of a string to fit within given number of cells.""" - - if _is_single_cell_widths(text): - size = len(text) - if size < total: - return text + " " * (total - size) - return text[:total] - - if total <= 0: - return "" - cell_size = cell_len(text) - if cell_size == total: - return text - if cell_size < total: - return text + " " * (total - cell_size) - - start = 0 - end = len(text) - - # Binary search until we find the right size - while True: - pos = (start + end) // 2 - before = text[: pos + 1] - before_len = cell_len(before) - if before_len == total + 1 and cell_len(before[-1]) == 2: - return before[:-1] + " " - if before_len == total: - return before - if before_len > total: - end = pos - else: - start = pos - - -def chop_cells( - text: str, - width: int, -) -> list[str]: - """Split text into lines such that each line fits within the available (cell) width. - - Args: - text: The text to fold such that it fits in the given width. - width: The width available (number of cells). - - Returns: - A list of strings such that each string in the list has cell width - less than or equal to the available width. - """ - _get_character_cell_size = get_character_cell_size - lines: list[list[str]] = [[]] - - append_new_line = lines.append - append_to_last_line = lines[-1].append - - total_width = 0 - - for character in text: - cell_width = _get_character_cell_size(character) - char_doesnt_fit = total_width + cell_width > width - - if char_doesnt_fit: - append_new_line([character]) - append_to_last_line = lines[-1].append - total_width = cell_width - else: - append_to_last_line(character) - total_width += cell_width - - return ["".join(line) for line in lines] - - -if __name__ == "__main__": # pragma: no cover - print(get_character_cell_size("😽")) - for line in chop_cells("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", 8): - print(line) - for n in range(80, 1, -1): - print(set_cell_size("""这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑。""", n) + "|") - print("x" * n) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color.py deleted file mode 100644 index e2c23a6a9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color.py +++ /dev/null @@ -1,621 +0,0 @@ -import re -import sys -from colorsys import rgb_to_hls -from enum import IntEnum -from functools import lru_cache -from typing import TYPE_CHECKING, NamedTuple, Optional, Tuple - -from ._palettes import EIGHT_BIT_PALETTE, STANDARD_PALETTE, WINDOWS_PALETTE -from .color_triplet import ColorTriplet -from .repr import Result, rich_repr -from .terminal_theme import DEFAULT_TERMINAL_THEME - -if TYPE_CHECKING: # pragma: no cover - from .terminal_theme import TerminalTheme - from .text import Text - - -WINDOWS = sys.platform == "win32" - - -class ColorSystem(IntEnum): - """One of the 3 color system supported by terminals.""" - - STANDARD = 1 - EIGHT_BIT = 2 - TRUECOLOR = 3 - WINDOWS = 4 - - def __repr__(self) -> str: - return f"ColorSystem.{self.name}" - - def __str__(self) -> str: - return repr(self) - - -class ColorType(IntEnum): - """Type of color stored in Color class.""" - - DEFAULT = 0 - STANDARD = 1 - EIGHT_BIT = 2 - TRUECOLOR = 3 - WINDOWS = 4 - - def __repr__(self) -> str: - return f"ColorType.{self.name}" - - -ANSI_COLOR_NAMES = { - "black": 0, - "red": 1, - "green": 2, - "yellow": 3, - "blue": 4, - "magenta": 5, - "cyan": 6, - "white": 7, - "bright_black": 8, - "bright_red": 9, - "bright_green": 10, - "bright_yellow": 11, - "bright_blue": 12, - "bright_magenta": 13, - "bright_cyan": 14, - "bright_white": 15, - "grey0": 16, - "gray0": 16, - "navy_blue": 17, - "dark_blue": 18, - "blue3": 20, - "blue1": 21, - "dark_green": 22, - "deep_sky_blue4": 25, - "dodger_blue3": 26, - "dodger_blue2": 27, - "green4": 28, - "spring_green4": 29, - "turquoise4": 30, - "deep_sky_blue3": 32, - "dodger_blue1": 33, - "green3": 40, - "spring_green3": 41, - "dark_cyan": 36, - "light_sea_green": 37, - "deep_sky_blue2": 38, - "deep_sky_blue1": 39, - "spring_green2": 47, - "cyan3": 43, - "dark_turquoise": 44, - "turquoise2": 45, - "green1": 46, - "spring_green1": 48, - "medium_spring_green": 49, - "cyan2": 50, - "cyan1": 51, - "dark_red": 88, - "deep_pink4": 125, - "purple4": 55, - "purple3": 56, - "blue_violet": 57, - "orange4": 94, - "grey37": 59, - "gray37": 59, - "medium_purple4": 60, - "slate_blue3": 62, - "royal_blue1": 63, - "chartreuse4": 64, - "dark_sea_green4": 71, - "pale_turquoise4": 66, - "steel_blue": 67, - "steel_blue3": 68, - "cornflower_blue": 69, - "chartreuse3": 76, - "cadet_blue": 73, - "sky_blue3": 74, - "steel_blue1": 81, - "pale_green3": 114, - "sea_green3": 78, - "aquamarine3": 79, - "medium_turquoise": 80, - "chartreuse2": 112, - "sea_green2": 83, - "sea_green1": 85, - "aquamarine1": 122, - "dark_slate_gray2": 87, - "dark_magenta": 91, - "dark_violet": 128, - "purple": 129, - "light_pink4": 95, - "plum4": 96, - "medium_purple3": 98, - "slate_blue1": 99, - "yellow4": 106, - "wheat4": 101, - "grey53": 102, - "gray53": 102, - "light_slate_grey": 103, - "light_slate_gray": 103, - "medium_purple": 104, - "light_slate_blue": 105, - "dark_olive_green3": 149, - "dark_sea_green": 108, - "light_sky_blue3": 110, - "sky_blue2": 111, - "dark_sea_green3": 150, - "dark_slate_gray3": 116, - "sky_blue1": 117, - "chartreuse1": 118, - "light_green": 120, - "pale_green1": 156, - "dark_slate_gray1": 123, - "red3": 160, - "medium_violet_red": 126, - "magenta3": 164, - "dark_orange3": 166, - "indian_red": 167, - "hot_pink3": 168, - "medium_orchid3": 133, - "medium_orchid": 134, - "medium_purple2": 140, - "dark_goldenrod": 136, - "light_salmon3": 173, - "rosy_brown": 138, - "grey63": 139, - "gray63": 139, - "medium_purple1": 141, - "gold3": 178, - "dark_khaki": 143, - "navajo_white3": 144, - "grey69": 145, - "gray69": 145, - "light_steel_blue3": 146, - "light_steel_blue": 147, - "yellow3": 184, - "dark_sea_green2": 157, - "light_cyan3": 152, - "light_sky_blue1": 153, - "green_yellow": 154, - "dark_olive_green2": 155, - "dark_sea_green1": 193, - "pale_turquoise1": 159, - "deep_pink3": 162, - "magenta2": 200, - "hot_pink2": 169, - "orchid": 170, - "medium_orchid1": 207, - "orange3": 172, - "light_pink3": 174, - "pink3": 175, - "plum3": 176, - "violet": 177, - "light_goldenrod3": 179, - "tan": 180, - "misty_rose3": 181, - "thistle3": 182, - "plum2": 183, - "khaki3": 185, - "light_goldenrod2": 222, - "light_yellow3": 187, - "grey84": 188, - "gray84": 188, - "light_steel_blue1": 189, - "yellow2": 190, - "dark_olive_green1": 192, - "honeydew2": 194, - "light_cyan1": 195, - "red1": 196, - "deep_pink2": 197, - "deep_pink1": 199, - "magenta1": 201, - "orange_red1": 202, - "indian_red1": 204, - "hot_pink": 206, - "dark_orange": 208, - "salmon1": 209, - "light_coral": 210, - "pale_violet_red1": 211, - "orchid2": 212, - "orchid1": 213, - "orange1": 214, - "sandy_brown": 215, - "light_salmon1": 216, - "light_pink1": 217, - "pink1": 218, - "plum1": 219, - "gold1": 220, - "navajo_white1": 223, - "misty_rose1": 224, - "thistle1": 225, - "yellow1": 226, - "light_goldenrod1": 227, - "khaki1": 228, - "wheat1": 229, - "cornsilk1": 230, - "grey100": 231, - "gray100": 231, - "grey3": 232, - "gray3": 232, - "grey7": 233, - "gray7": 233, - "grey11": 234, - "gray11": 234, - "grey15": 235, - "gray15": 235, - "grey19": 236, - "gray19": 236, - "grey23": 237, - "gray23": 237, - "grey27": 238, - "gray27": 238, - "grey30": 239, - "gray30": 239, - "grey35": 240, - "gray35": 240, - "grey39": 241, - "gray39": 241, - "grey42": 242, - "gray42": 242, - "grey46": 243, - "gray46": 243, - "grey50": 244, - "gray50": 244, - "grey54": 245, - "gray54": 245, - "grey58": 246, - "gray58": 246, - "grey62": 247, - "gray62": 247, - "grey66": 248, - "gray66": 248, - "grey70": 249, - "gray70": 249, - "grey74": 250, - "gray74": 250, - "grey78": 251, - "gray78": 251, - "grey82": 252, - "gray82": 252, - "grey85": 253, - "gray85": 253, - "grey89": 254, - "gray89": 254, - "grey93": 255, - "gray93": 255, -} - - -class ColorParseError(Exception): - """The color could not be parsed.""" - - -RE_COLOR = re.compile( - r"""^ -\#([0-9a-f]{6})$| -color\(([0-9]{1,3})\)$| -rgb\(([\d\s,]+)\)$ -""", - re.VERBOSE, -) - - -@rich_repr -class Color(NamedTuple): - """Terminal color definition.""" - - name: str - """The name of the color (typically the input to Color.parse).""" - type: ColorType - """The type of the color.""" - number: Optional[int] = None - """The color number, if a standard color, or None.""" - triplet: Optional[ColorTriplet] = None - """A triplet of color components, if an RGB color.""" - - def __rich__(self) -> "Text": - """Displays the actual color if Rich printed.""" - from .style import Style - from .text import Text - - return Text.assemble( - f"<color {self.name!r} ({self.type.name.lower()})", - ("⬤", Style(color=self)), - " >", - ) - - def __rich_repr__(self) -> Result: - yield self.name - yield self.type - yield "number", self.number, None - yield "triplet", self.triplet, None - - @property - def system(self) -> ColorSystem: - """Get the native color system for this color.""" - if self.type == ColorType.DEFAULT: - return ColorSystem.STANDARD - return ColorSystem(int(self.type)) - - @property - def is_system_defined(self) -> bool: - """Check if the color is ultimately defined by the system.""" - return self.system not in (ColorSystem.EIGHT_BIT, ColorSystem.TRUECOLOR) - - @property - def is_default(self) -> bool: - """Check if the color is a default color.""" - return self.type == ColorType.DEFAULT - - def get_truecolor( - self, theme: Optional["TerminalTheme"] = None, foreground: bool = True - ) -> ColorTriplet: - """Get an equivalent color triplet for this color. - - Args: - theme (TerminalTheme, optional): Optional terminal theme, or None to use default. Defaults to None. - foreground (bool, optional): True for a foreground color, or False for background. Defaults to True. - - Returns: - ColorTriplet: A color triplet containing RGB components. - """ - - if theme is None: - theme = DEFAULT_TERMINAL_THEME - if self.type == ColorType.TRUECOLOR: - assert self.triplet is not None - return self.triplet - elif self.type == ColorType.EIGHT_BIT: - assert self.number is not None - return EIGHT_BIT_PALETTE[self.number] - elif self.type == ColorType.STANDARD: - assert self.number is not None - return theme.ansi_colors[self.number] - elif self.type == ColorType.WINDOWS: - assert self.number is not None - return WINDOWS_PALETTE[self.number] - else: # self.type == ColorType.DEFAULT: - assert self.number is None - return theme.foreground_color if foreground else theme.background_color - - @classmethod - def from_ansi(cls, number: int) -> "Color": - """Create a Color number from it's 8-bit ansi number. - - Args: - number (int): A number between 0-255 inclusive. - - Returns: - Color: A new Color instance. - """ - return cls( - name=f"color({number})", - type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), - number=number, - ) - - @classmethod - def from_triplet(cls, triplet: "ColorTriplet") -> "Color": - """Create a truecolor RGB color from a triplet of values. - - Args: - triplet (ColorTriplet): A color triplet containing red, green and blue components. - - Returns: - Color: A new color object. - """ - return cls(name=triplet.hex, type=ColorType.TRUECOLOR, triplet=triplet) - - @classmethod - def from_rgb(cls, red: float, green: float, blue: float) -> "Color": - """Create a truecolor from three color components in the range(0->255). - - Args: - red (float): Red component in range 0-255. - green (float): Green component in range 0-255. - blue (float): Blue component in range 0-255. - - Returns: - Color: A new color object. - """ - return cls.from_triplet(ColorTriplet(int(red), int(green), int(blue))) - - @classmethod - def default(cls) -> "Color": - """Get a Color instance representing the default color. - - Returns: - Color: Default color. - """ - return cls(name="default", type=ColorType.DEFAULT) - - @classmethod - @lru_cache(maxsize=1024) - def parse(cls, color: str) -> "Color": - """Parse a color definition.""" - original_color = color - color = color.lower().strip() - - if color == "default": - return cls(color, type=ColorType.DEFAULT) - - color_number = ANSI_COLOR_NAMES.get(color) - if color_number is not None: - return cls( - color, - type=(ColorType.STANDARD if color_number < 16 else ColorType.EIGHT_BIT), - number=color_number, - ) - - color_match = RE_COLOR.match(color) - if color_match is None: - raise ColorParseError(f"{original_color!r} is not a valid color") - - color_24, color_8, color_rgb = color_match.groups() - if color_24: - triplet = ColorTriplet( - int(color_24[0:2], 16), int(color_24[2:4], 16), int(color_24[4:6], 16) - ) - return cls(color, ColorType.TRUECOLOR, triplet=triplet) - - elif color_8: - number = int(color_8) - if number > 255: - raise ColorParseError(f"color number must be <= 255 in {color!r}") - return cls( - color, - type=(ColorType.STANDARD if number < 16 else ColorType.EIGHT_BIT), - number=number, - ) - - else: # color_rgb: - components = color_rgb.split(",") - if len(components) != 3: - raise ColorParseError( - f"expected three components in {original_color!r}" - ) - red, green, blue = components - triplet = ColorTriplet(int(red), int(green), int(blue)) - if not all(component <= 255 for component in triplet): - raise ColorParseError( - f"color components must be <= 255 in {original_color!r}" - ) - return cls(color, ColorType.TRUECOLOR, triplet=triplet) - - @lru_cache(maxsize=1024) - def get_ansi_codes(self, foreground: bool = True) -> Tuple[str, ...]: - """Get the ANSI escape codes for this color.""" - _type = self.type - if _type == ColorType.DEFAULT: - return ("39" if foreground else "49",) - - elif _type == ColorType.WINDOWS: - number = self.number - assert number is not None - fore, back = (30, 40) if number < 8 else (82, 92) - return (str(fore + number if foreground else back + number),) - - elif _type == ColorType.STANDARD: - number = self.number - assert number is not None - fore, back = (30, 40) if number < 8 else (82, 92) - return (str(fore + number if foreground else back + number),) - - elif _type == ColorType.EIGHT_BIT: - assert self.number is not None - return ("38" if foreground else "48", "5", str(self.number)) - - else: # self.standard == ColorStandard.TRUECOLOR: - assert self.triplet is not None - red, green, blue = self.triplet - return ("38" if foreground else "48", "2", str(red), str(green), str(blue)) - - @lru_cache(maxsize=1024) - def downgrade(self, system: ColorSystem) -> "Color": - """Downgrade a color system to a system with fewer colors.""" - - if self.type in (ColorType.DEFAULT, system): - return self - # Convert to 8-bit color from truecolor color - if system == ColorSystem.EIGHT_BIT and self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - _h, l, s = rgb_to_hls(*self.triplet.normalized) - # If saturation is under 15% assume it is grayscale - if s < 0.15: - gray = round(l * 25.0) - if gray == 0: - color_number = 16 - elif gray == 25: - color_number = 231 - else: - color_number = 231 + gray - return Color(self.name, ColorType.EIGHT_BIT, number=color_number) - - red, green, blue = self.triplet - six_red = red / 95 if red < 95 else 1 + (red - 95) / 40 - six_green = green / 95 if green < 95 else 1 + (green - 95) / 40 - six_blue = blue / 95 if blue < 95 else 1 + (blue - 95) / 40 - - color_number = ( - 16 + 36 * round(six_red) + 6 * round(six_green) + round(six_blue) - ) - return Color(self.name, ColorType.EIGHT_BIT, number=color_number) - - # Convert to standard from truecolor or 8-bit - elif system == ColorSystem.STANDARD: - if self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - triplet = self.triplet - else: # self.system == ColorSystem.EIGHT_BIT - assert self.number is not None - triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) - - color_number = STANDARD_PALETTE.match(triplet) - return Color(self.name, ColorType.STANDARD, number=color_number) - - elif system == ColorSystem.WINDOWS: - if self.system == ColorSystem.TRUECOLOR: - assert self.triplet is not None - triplet = self.triplet - else: # self.system == ColorSystem.EIGHT_BIT - assert self.number is not None - if self.number < 16: - return Color(self.name, ColorType.WINDOWS, number=self.number) - triplet = ColorTriplet(*EIGHT_BIT_PALETTE[self.number]) - - color_number = WINDOWS_PALETTE.match(triplet) - return Color(self.name, ColorType.WINDOWS, number=color_number) - - return self - - -def parse_rgb_hex(hex_color: str) -> ColorTriplet: - """Parse six hex characters in to RGB triplet.""" - assert len(hex_color) == 6, "must be 6 characters" - color = ColorTriplet( - int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16) - ) - return color - - -def blend_rgb( - color1: ColorTriplet, color2: ColorTriplet, cross_fade: float = 0.5 -) -> ColorTriplet: - """Blend one RGB color in to another.""" - r1, g1, b1 = color1 - r2, g2, b2 = color2 - new_color = ColorTriplet( - int(r1 + (r2 - r1) * cross_fade), - int(g1 + (g2 - g1) * cross_fade), - int(b1 + (b2 - b1) * cross_fade), - ) - return new_color - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - from .table import Table - from .text import Text - - console = Console() - - table = Table(show_footer=False, show_edge=True) - table.add_column("Color", width=10, overflow="ellipsis") - table.add_column("Number", justify="right", style="yellow") - table.add_column("Name", style="green") - table.add_column("Hex", style="blue") - table.add_column("RGB", style="magenta") - - colors = sorted((v, k) for k, v in ANSI_COLOR_NAMES.items()) - for color_number, name in colors: - if "grey" in name: - continue - color_cell = Text(" " * 10, style=f"on {name}") - if color_number < 16: - table.add_row(color_cell, f"{color_number}", Text(f'"{name}"')) - else: - color = EIGHT_BIT_PALETTE[color_number] # type: ignore[has-type] - table.add_row( - color_cell, str(color_number), Text(f'"{name}"'), color.hex, color.rgb - ) - - console.print(table) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color_triplet.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color_triplet.py deleted file mode 100644 index 02cab3282..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/color_triplet.py +++ /dev/null @@ -1,38 +0,0 @@ -from typing import NamedTuple, Tuple - - -class ColorTriplet(NamedTuple): - """The red, green, and blue components of a color.""" - - red: int - """Red component in 0 to 255 range.""" - green: int - """Green component in 0 to 255 range.""" - blue: int - """Blue component in 0 to 255 range.""" - - @property - def hex(self) -> str: - """get the color triplet in CSS style.""" - red, green, blue = self - return f"#{red:02x}{green:02x}{blue:02x}" - - @property - def rgb(self) -> str: - """The color in RGB format. - - Returns: - str: An rgb color, e.g. ``"rgb(100,23,255)"``. - """ - red, green, blue = self - return f"rgb({red},{green},{blue})" - - @property - def normalized(self) -> Tuple[float, float, float]: - """Convert components into floats between 0 and 1. - - Returns: - Tuple[float, float, float]: A tuple of three normalized colour components. - """ - red, green, blue = self - return red / 255.0, green / 255.0, blue / 255.0 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/columns.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/columns.py deleted file mode 100644 index 669a3a707..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/columns.py +++ /dev/null @@ -1,187 +0,0 @@ -from collections import defaultdict -from itertools import chain -from operator import itemgetter -from typing import Dict, Iterable, List, Optional, Tuple - -from .align import Align, AlignMethod -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .constrain import Constrain -from .measure import Measurement -from .padding import Padding, PaddingDimensions -from .table import Table -from .text import TextType -from .jupyter import JupyterMixin - - -class Columns(JupyterMixin): - """Display renderables in neat columns. - - Args: - renderables (Iterable[RenderableType]): Any number of Rich renderables (including str). - width (int, optional): The desired width of the columns, or None to auto detect. Defaults to None. - padding (PaddingDimensions, optional): Optional padding around cells. Defaults to (0, 1). - expand (bool, optional): Expand columns to full width. Defaults to False. - equal (bool, optional): Arrange in to equal sized columns. Defaults to False. - column_first (bool, optional): Align items from top to bottom (rather than left to right). Defaults to False. - right_to_left (bool, optional): Start column from right hand side. Defaults to False. - align (str, optional): Align value ("left", "right", or "center") or None for default. Defaults to None. - title (TextType, optional): Optional title for Columns. - """ - - def __init__( - self, - renderables: Optional[Iterable[RenderableType]] = None, - padding: PaddingDimensions = (0, 1), - *, - width: Optional[int] = None, - expand: bool = False, - equal: bool = False, - column_first: bool = False, - right_to_left: bool = False, - align: Optional[AlignMethod] = None, - title: Optional[TextType] = None, - ) -> None: - self.renderables = list(renderables or []) - self.width = width - self.padding = padding - self.expand = expand - self.equal = equal - self.column_first = column_first - self.right_to_left = right_to_left - self.align: Optional[AlignMethod] = align - self.title = title - - def add_renderable(self, renderable: RenderableType) -> None: - """Add a renderable to the columns. - - Args: - renderable (RenderableType): Any renderable object. - """ - self.renderables.append(renderable) - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - render_str = console.render_str - renderables = [ - render_str(renderable) if isinstance(renderable, str) else renderable - for renderable in self.renderables - ] - if not renderables: - return - _top, right, _bottom, left = Padding.unpack(self.padding) - width_padding = max(left, right) - max_width = options.max_width - widths: Dict[int, int] = defaultdict(int) - column_count = len(renderables) - - get_measurement = Measurement.get - renderable_widths = [ - get_measurement(console, options, renderable).maximum - for renderable in renderables - ] - if self.equal: - renderable_widths = [max(renderable_widths)] * len(renderable_widths) - - def iter_renderables( - column_count: int, - ) -> Iterable[Tuple[int, Optional[RenderableType]]]: - item_count = len(renderables) - if self.column_first: - width_renderables = list(zip(renderable_widths, renderables)) - - column_lengths: List[int] = [item_count // column_count] * column_count - for col_no in range(item_count % column_count): - column_lengths[col_no] += 1 - - row_count = (item_count + column_count - 1) // column_count - cells = [[-1] * column_count for _ in range(row_count)] - row = col = 0 - for index in range(item_count): - cells[row][col] = index - column_lengths[col] -= 1 - if column_lengths[col]: - row += 1 - else: - col += 1 - row = 0 - for index in chain.from_iterable(cells): - if index == -1: - break - yield width_renderables[index] - else: - yield from zip(renderable_widths, renderables) - # Pad odd elements with spaces - if item_count % column_count: - for _ in range(column_count - (item_count % column_count)): - yield 0, None - - table = Table.grid(padding=self.padding, collapse_padding=True, pad_edge=False) - table.expand = self.expand - table.title = self.title - - if self.width is not None: - column_count = (max_width) // (self.width + width_padding) - for _ in range(column_count): - table.add_column(width=self.width) - else: - while column_count > 1: - widths.clear() - column_no = 0 - for renderable_width, _ in iter_renderables(column_count): - widths[column_no] = max(widths[column_no], renderable_width) - total_width = sum(widths.values()) + width_padding * ( - len(widths) - 1 - ) - if total_width > max_width: - column_count = len(widths) - 1 - break - else: - column_no = (column_no + 1) % column_count - else: - break - - get_renderable = itemgetter(1) - _renderables = [ - get_renderable(_renderable) - for _renderable in iter_renderables(column_count) - ] - if self.equal: - _renderables = [ - None - if renderable is None - else Constrain(renderable, renderable_widths[0]) - for renderable in _renderables - ] - if self.align: - align = self.align - _Align = Align - _renderables = [ - None if renderable is None else _Align(renderable, align) - for renderable in _renderables - ] - - right_to_left = self.right_to_left - add_row = table.add_row - for start in range(0, len(_renderables), column_count): - row = _renderables[start : start + column_count] - if right_to_left: - row = row[::-1] - add_row(*row) - yield table - - -if __name__ == "__main__": # pragma: no cover - import os - - console = Console() - - files = [f"{i} {s}" for i, s in enumerate(sorted(os.listdir()))] - columns = Columns(files, padding=(0, 1), expand=False, equal=False) - console.print(columns) - console.rule() - columns.column_first = True - console.print(columns) - columns.right_to_left = True - console.rule() - console.print(columns) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/console.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/console.py deleted file mode 100644 index db2ba55ab..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/console.py +++ /dev/null @@ -1,2680 +0,0 @@ -import inspect -import os -import sys -import threading -import zlib -from abc import ABC, abstractmethod -from dataclasses import dataclass, field -from datetime import datetime -from functools import wraps -from getpass import getpass -from html import escape -from inspect import isclass -from itertools import islice -from math import ceil -from time import monotonic -from types import FrameType, ModuleType, TracebackType -from typing import ( - IO, - TYPE_CHECKING, - Any, - Callable, - Dict, - Iterable, - List, - Literal, - Mapping, - NamedTuple, - Optional, - Protocol, - TextIO, - Tuple, - Type, - Union, - cast, - runtime_checkable, -) - -from pip._vendor.rich._null_file import NULL_FILE - -from . import errors, themes -from ._emoji_replace import _emoji_replace -from ._export_format import CONSOLE_HTML_FORMAT, CONSOLE_SVG_FORMAT -from ._fileno import get_fileno -from ._log_render import FormatTimeCallable, LogRender -from .align import Align, AlignMethod -from .color import ColorSystem, blend_rgb -from .control import Control -from .emoji import EmojiVariant -from .highlighter import NullHighlighter, ReprHighlighter -from .markup import render as render_markup -from .measure import Measurement, measure_renderables -from .pager import Pager, SystemPager -from .pretty import Pretty, is_expandable -from .protocol import rich_cast -from .region import Region -from .scope import render_scope -from .screen import Screen -from .segment import Segment -from .style import Style, StyleType -from .styled import Styled -from .terminal_theme import DEFAULT_TERMINAL_THEME, SVG_EXPORT_THEME, TerminalTheme -from .text import Text, TextType -from .theme import Theme, ThemeStack - -if TYPE_CHECKING: - from ._windows import WindowsConsoleFeatures - from .live import Live - from .status import Status - -JUPYTER_DEFAULT_COLUMNS = 115 -JUPYTER_DEFAULT_LINES = 100 -WINDOWS = sys.platform == "win32" - -HighlighterType = Callable[[Union[str, "Text"]], "Text"] -JustifyMethod = Literal["default", "left", "center", "right", "full"] -OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"] - - -class NoChange: - pass - - -NO_CHANGE = NoChange() - -try: - _STDIN_FILENO = sys.__stdin__.fileno() # type: ignore[union-attr] -except Exception: - _STDIN_FILENO = 0 -try: - _STDOUT_FILENO = sys.__stdout__.fileno() # type: ignore[union-attr] -except Exception: - _STDOUT_FILENO = 1 -try: - _STDERR_FILENO = sys.__stderr__.fileno() # type: ignore[union-attr] -except Exception: - _STDERR_FILENO = 2 - -_STD_STREAMS = (_STDIN_FILENO, _STDOUT_FILENO, _STDERR_FILENO) -_STD_STREAMS_OUTPUT = (_STDOUT_FILENO, _STDERR_FILENO) - - -_TERM_COLORS = { - "kitty": ColorSystem.EIGHT_BIT, - "256color": ColorSystem.EIGHT_BIT, - "16color": ColorSystem.STANDARD, -} - - -class ConsoleDimensions(NamedTuple): - """Size of the terminal.""" - - width: int - """The width of the console in 'cells'.""" - height: int - """The height of the console in lines.""" - - -@dataclass -class ConsoleOptions: - """Options for __rich_console__ method.""" - - size: ConsoleDimensions - """Size of console.""" - legacy_windows: bool - """legacy_windows: flag for legacy windows.""" - min_width: int - """Minimum width of renderable.""" - max_width: int - """Maximum width of renderable.""" - is_terminal: bool - """True if the target is a terminal, otherwise False.""" - encoding: str - """Encoding of terminal.""" - max_height: int - """Height of container (starts as terminal)""" - justify: Optional[JustifyMethod] = None - """Justify value override for renderable.""" - overflow: Optional[OverflowMethod] = None - """Overflow value override for renderable.""" - no_wrap: Optional[bool] = False - """Disable wrapping for text.""" - highlight: Optional[bool] = None - """Highlight override for render_str.""" - markup: Optional[bool] = None - """Enable markup when rendering strings.""" - height: Optional[int] = None - - @property - def ascii_only(self) -> bool: - """Check if renderables should use ascii only.""" - return not self.encoding.startswith("utf") - - def copy(self) -> "ConsoleOptions": - """Return a copy of the options. - - Returns: - ConsoleOptions: a copy of self. - """ - options: ConsoleOptions = ConsoleOptions.__new__(ConsoleOptions) - options.__dict__ = self.__dict__.copy() - return options - - def update( - self, - *, - width: Union[int, NoChange] = NO_CHANGE, - min_width: Union[int, NoChange] = NO_CHANGE, - max_width: Union[int, NoChange] = NO_CHANGE, - justify: Union[Optional[JustifyMethod], NoChange] = NO_CHANGE, - overflow: Union[Optional[OverflowMethod], NoChange] = NO_CHANGE, - no_wrap: Union[Optional[bool], NoChange] = NO_CHANGE, - highlight: Union[Optional[bool], NoChange] = NO_CHANGE, - markup: Union[Optional[bool], NoChange] = NO_CHANGE, - height: Union[Optional[int], NoChange] = NO_CHANGE, - ) -> "ConsoleOptions": - """Update values, return a copy.""" - options = self.copy() - if not isinstance(width, NoChange): - options.min_width = options.max_width = max(0, width) - if not isinstance(min_width, NoChange): - options.min_width = min_width - if not isinstance(max_width, NoChange): - options.max_width = max_width - if not isinstance(justify, NoChange): - options.justify = justify - if not isinstance(overflow, NoChange): - options.overflow = overflow - if not isinstance(no_wrap, NoChange): - options.no_wrap = no_wrap - if not isinstance(highlight, NoChange): - options.highlight = highlight - if not isinstance(markup, NoChange): - options.markup = markup - if not isinstance(height, NoChange): - if height is not None: - options.max_height = height - options.height = None if height is None else max(0, height) - return options - - def update_width(self, width: int) -> "ConsoleOptions": - """Update just the width, return a copy. - - Args: - width (int): New width (sets both min_width and max_width) - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.min_width = options.max_width = max(0, width) - return options - - def update_height(self, height: int) -> "ConsoleOptions": - """Update the height, and return a copy. - - Args: - height (int): New height - - Returns: - ~ConsoleOptions: New Console options instance. - """ - options = self.copy() - options.max_height = options.height = height - return options - - def reset_height(self) -> "ConsoleOptions": - """Return a copy of the options with height set to ``None``. - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.height = None - return options - - def update_dimensions(self, width: int, height: int) -> "ConsoleOptions": - """Update the width and height, and return a copy. - - Args: - width (int): New width (sets both min_width and max_width). - height (int): New height. - - Returns: - ~ConsoleOptions: New console options instance. - """ - options = self.copy() - options.min_width = options.max_width = max(0, width) - options.height = options.max_height = height - return options - - -@runtime_checkable -class RichCast(Protocol): - """An object that may be 'cast' to a console renderable.""" - - def __rich__( - self, - ) -> Union["ConsoleRenderable", "RichCast", str]: # pragma: no cover - ... - - -@runtime_checkable -class ConsoleRenderable(Protocol): - """An object that supports the console protocol.""" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": # pragma: no cover - ... - - -# A type that may be rendered by Console. -RenderableType = Union[ConsoleRenderable, RichCast, str] -"""A string or any object that may be rendered by Rich.""" - -# The result of calling a __rich_console__ method. -RenderResult = Iterable[Union[RenderableType, Segment]] - -_null_highlighter = NullHighlighter() - - -class CaptureError(Exception): - """An error in the Capture context manager.""" - - -class NewLine: - """A renderable to generate new line(s)""" - - def __init__(self, count: int = 1) -> None: - self.count = count - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> Iterable[Segment]: - yield Segment("\n" * self.count) - - -class ScreenUpdate: - """Render a list of lines at a given offset.""" - - def __init__(self, lines: List[List[Segment]], x: int, y: int) -> None: - self._lines = lines - self.x = x - self.y = y - - def __rich_console__( - self, console: "Console", options: ConsoleOptions - ) -> RenderResult: - x = self.x - move_to = Control.move_to - for offset, line in enumerate(self._lines, self.y): - yield move_to(x, offset) - yield from line - - -class Capture: - """Context manager to capture the result of printing to the console. - See :meth:`~rich.console.Console.capture` for how to use. - - Args: - console (Console): A console instance to capture output. - """ - - def __init__(self, console: "Console") -> None: - self._console = console - self._result: Optional[str] = None - - def __enter__(self) -> "Capture": - self._console.begin_capture() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self._result = self._console.end_capture() - - def get(self) -> str: - """Get the result of the capture.""" - if self._result is None: - raise CaptureError( - "Capture result is not available until context manager exits." - ) - return self._result - - -class ThemeContext: - """A context manager to use a temporary theme. See :meth:`~rich.console.Console.use_theme` for usage.""" - - def __init__(self, console: "Console", theme: Theme, inherit: bool = True) -> None: - self.console = console - self.theme = theme - self.inherit = inherit - - def __enter__(self) -> "ThemeContext": - self.console.push_theme(self.theme) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.console.pop_theme() - - -class PagerContext: - """A context manager that 'pages' content. See :meth:`~rich.console.Console.pager` for usage.""" - - def __init__( - self, - console: "Console", - pager: Optional[Pager] = None, - styles: bool = False, - links: bool = False, - ) -> None: - self._console = console - self.pager = SystemPager() if pager is None else pager - self.styles = styles - self.links = links - - def __enter__(self) -> "PagerContext": - self._console._enter_buffer() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - if exc_type is None: - with self._console._lock: - buffer: List[Segment] = self._console._buffer[:] - del self._console._buffer[:] - segments: Iterable[Segment] = buffer - if not self.styles: - segments = Segment.strip_styles(segments) - elif not self.links: - segments = Segment.strip_links(segments) - content = self._console._render_buffer(segments) - self.pager.show(content) - self._console._exit_buffer() - - -class ScreenContext: - """A context manager that enables an alternative screen. See :meth:`~rich.console.Console.screen` for usage.""" - - def __init__( - self, console: "Console", hide_cursor: bool, style: StyleType = "" - ) -> None: - self.console = console - self.hide_cursor = hide_cursor - self.screen = Screen(style=style) - self._changed = False - - def update( - self, *renderables: RenderableType, style: Optional[StyleType] = None - ) -> None: - """Update the screen. - - Args: - renderable (RenderableType, optional): Optional renderable to replace current renderable, - or None for no change. Defaults to None. - style: (Style, optional): Replacement style, or None for no change. Defaults to None. - """ - if renderables: - self.screen.renderable = ( - Group(*renderables) if len(renderables) > 1 else renderables[0] - ) - if style is not None: - self.screen.style = style - self.console.print(self.screen, end="") - - def __enter__(self) -> "ScreenContext": - self._changed = self.console.set_alt_screen(True) - if self._changed and self.hide_cursor: - self.console.show_cursor(False) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - if self._changed: - self.console.set_alt_screen(False) - if self.hide_cursor: - self.console.show_cursor(True) - - -class Group: - """Takes a group of renderables and returns a renderable object that renders the group. - - Args: - renderables (Iterable[RenderableType]): An iterable of renderable objects. - fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. - """ - - def __init__(self, *renderables: "RenderableType", fit: bool = True) -> None: - self._renderables = renderables - self.fit = fit - self._render: Optional[List[RenderableType]] = None - - @property - def renderables(self) -> List["RenderableType"]: - if self._render is None: - self._render = list(self._renderables) - return self._render - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - if self.fit: - return measure_renderables(console, options, self.renderables) - else: - return Measurement(options.max_width, options.max_width) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> RenderResult: - yield from self.renderables - - -def group(fit: bool = True) -> Callable[..., Callable[..., Group]]: - """A decorator that turns an iterable of renderables in to a group. - - Args: - fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True. - """ - - def decorator( - method: Callable[..., Iterable[RenderableType]], - ) -> Callable[..., Group]: - """Convert a method that returns an iterable of renderables in to a Group.""" - - @wraps(method) - def _replace(*args: Any, **kwargs: Any) -> Group: - renderables = method(*args, **kwargs) - return Group(*renderables, fit=fit) - - return _replace - - return decorator - - -def _is_jupyter() -> bool: # pragma: no cover - """Check if we're running in a Jupyter notebook.""" - try: - get_ipython # type: ignore[name-defined] - except NameError: - return False - ipython = get_ipython() # type: ignore[name-defined] - shell = ipython.__class__.__name__ - if ( - "google.colab" in str(ipython.__class__) - or os.getenv("DATABRICKS_RUNTIME_VERSION") - or shell == "ZMQInteractiveShell" - ): - return True # Jupyter notebook or qtconsole - elif shell == "TerminalInteractiveShell": - return False # Terminal running IPython - else: - return False # Other type (?) - - -COLOR_SYSTEMS = { - "standard": ColorSystem.STANDARD, - "256": ColorSystem.EIGHT_BIT, - "truecolor": ColorSystem.TRUECOLOR, - "windows": ColorSystem.WINDOWS, -} - -_COLOR_SYSTEMS_NAMES = {system: name for name, system in COLOR_SYSTEMS.items()} - - -@dataclass -class ConsoleThreadLocals(threading.local): - """Thread local values for Console context.""" - - theme_stack: ThemeStack - buffer: List[Segment] = field(default_factory=list) - buffer_index: int = 0 - - -class RenderHook(ABC): - """Provides hooks in to the render process.""" - - @abstractmethod - def process_renderables( - self, renderables: List[ConsoleRenderable] - ) -> List[ConsoleRenderable]: - """Called with a list of objects to render. - - This method can return a new list of renderables, or modify and return the same list. - - Args: - renderables (List[ConsoleRenderable]): A number of renderable objects. - - Returns: - List[ConsoleRenderable]: A replacement list of renderables. - """ - - -_windows_console_features: Optional["WindowsConsoleFeatures"] = None - - -def get_windows_console_features() -> "WindowsConsoleFeatures": # pragma: no cover - global _windows_console_features - if _windows_console_features is not None: - return _windows_console_features - from ._windows import get_windows_console_features - - _windows_console_features = get_windows_console_features() - return _windows_console_features - - -def detect_legacy_windows() -> bool: - """Detect legacy Windows.""" - return WINDOWS and not get_windows_console_features().vt - - -class Console: - """A high level console interface. - - Args: - color_system (str, optional): The color system supported by your terminal, - either ``"standard"``, ``"256"`` or ``"truecolor"``. Leave as ``"auto"`` to autodetect. - force_terminal (Optional[bool], optional): Enable/disable terminal control codes, or None to auto-detect terminal. Defaults to None. - force_jupyter (Optional[bool], optional): Enable/disable Jupyter rendering, or None to auto-detect Jupyter. Defaults to None. - force_interactive (Optional[bool], optional): Enable/disable interactive mode, or None to auto detect. Defaults to None. - soft_wrap (Optional[bool], optional): Set soft wrap default on print method. Defaults to False. - theme (Theme, optional): An optional style theme object, or ``None`` for default theme. - stderr (bool, optional): Use stderr rather than stdout if ``file`` is not specified. Defaults to False. - file (IO, optional): A file object where the console should write to. Defaults to stdout. - quiet (bool, Optional): Boolean to suppress all output. Defaults to False. - width (int, optional): The width of the terminal. Leave as default to auto-detect width. - height (int, optional): The height of the terminal. Leave as default to auto-detect height. - style (StyleType, optional): Style to apply to all output, or None for no style. Defaults to None. - no_color (Optional[bool], optional): Enabled no color mode, or None to auto detect. Defaults to None. - tab_size (int, optional): Number of spaces used to replace a tab character. Defaults to 8. - record (bool, optional): Boolean to enable recording of terminal output, - required to call :meth:`export_html`, :meth:`export_svg`, and :meth:`export_text`. Defaults to False. - markup (bool, optional): Boolean to enable :ref:`console_markup`. Defaults to True. - emoji (bool, optional): Enable emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - highlight (bool, optional): Enable automatic highlighting. Defaults to True. - log_time (bool, optional): Boolean to enable logging of time by :meth:`log` methods. Defaults to True. - log_path (bool, optional): Boolean to enable the logging of the caller by :meth:`log`. Defaults to True. - log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%X] ". - highlighter (HighlighterType, optional): Default highlighter. - legacy_windows (bool, optional): Enable legacy Windows mode, or ``None`` to auto detect. Defaults to ``None``. - safe_box (bool, optional): Restrict box options that don't render on legacy Windows. - get_datetime (Callable[[], datetime], optional): Callable that gets the current time as a datetime.datetime object (used by Console.log), - or None for datetime.now. - get_time (Callable[[], time], optional): Callable that gets the current time in seconds, default uses time.monotonic. - """ - - _environ: Mapping[str, str] = os.environ - - def __init__( - self, - *, - color_system: Optional[ - Literal["auto", "standard", "256", "truecolor", "windows"] - ] = "auto", - force_terminal: Optional[bool] = None, - force_jupyter: Optional[bool] = None, - force_interactive: Optional[bool] = None, - soft_wrap: bool = False, - theme: Optional[Theme] = None, - stderr: bool = False, - file: Optional[IO[str]] = None, - quiet: bool = False, - width: Optional[int] = None, - height: Optional[int] = None, - style: Optional[StyleType] = None, - no_color: Optional[bool] = None, - tab_size: int = 8, - record: bool = False, - markup: bool = True, - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, - highlight: bool = True, - log_time: bool = True, - log_path: bool = True, - log_time_format: Union[str, FormatTimeCallable] = "[%X]", - highlighter: Optional["HighlighterType"] = ReprHighlighter(), - legacy_windows: Optional[bool] = None, - safe_box: bool = True, - get_datetime: Optional[Callable[[], datetime]] = None, - get_time: Optional[Callable[[], float]] = None, - _environ: Optional[Mapping[str, str]] = None, - ): - # Copy of os.environ allows us to replace it for testing - if _environ is not None: - self._environ = _environ - - self.is_jupyter = _is_jupyter() if force_jupyter is None else force_jupyter - if self.is_jupyter: - if width is None: - jupyter_columns = self._environ.get("JUPYTER_COLUMNS") - if jupyter_columns is not None and jupyter_columns.isdigit(): - width = int(jupyter_columns) - else: - width = JUPYTER_DEFAULT_COLUMNS - if height is None: - jupyter_lines = self._environ.get("JUPYTER_LINES") - if jupyter_lines is not None and jupyter_lines.isdigit(): - height = int(jupyter_lines) - else: - height = JUPYTER_DEFAULT_LINES - - self.tab_size = tab_size - self.record = record - self._markup = markup - self._emoji = emoji - self._emoji_variant: Optional[EmojiVariant] = emoji_variant - self._highlight = highlight - self.legacy_windows: bool = ( - (detect_legacy_windows() and not self.is_jupyter) - if legacy_windows is None - else legacy_windows - ) - - if width is None: - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - self.legacy_windows - if height is None: - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - self.soft_wrap = soft_wrap - self._width = width - self._height = height - - self._color_system: Optional[ColorSystem] - - self._force_terminal = None - if force_terminal is not None: - self._force_terminal = force_terminal - - self._file = file - self.quiet = quiet - self.stderr = stderr - - if color_system is None: - self._color_system = None - elif color_system == "auto": - self._color_system = self._detect_color_system() - else: - self._color_system = COLOR_SYSTEMS[color_system] - - self._lock = threading.RLock() - self._log_render = LogRender( - show_time=log_time, - show_path=log_path, - time_format=log_time_format, - ) - self.highlighter: HighlighterType = highlighter or _null_highlighter - self.safe_box = safe_box - self.get_datetime = get_datetime or datetime.now - self.get_time = get_time or monotonic - self.style = style - self.no_color = ( - no_color - if no_color is not None - else self._environ.get("NO_COLOR", "") != "" - ) - if force_interactive is None: - tty_interactive = self._environ.get("TTY_INTERACTIVE", None) - if tty_interactive is not None: - if tty_interactive == "0": - force_interactive = False - elif tty_interactive == "1": - force_interactive = True - - self.is_interactive = ( - (self.is_terminal and not self.is_dumb_terminal) - if force_interactive is None - else force_interactive - ) - - self._record_buffer_lock = threading.RLock() - self._thread_locals = ConsoleThreadLocals( - theme_stack=ThemeStack(themes.DEFAULT if theme is None else theme) - ) - self._record_buffer: List[Segment] = [] - self._render_hooks: List[RenderHook] = [] - self._live_stack: List[Live] = [] - self._is_alt_screen = False - - def __repr__(self) -> str: - return f"<console width={self.width} {self._color_system!s}>" - - @property - def file(self) -> IO[str]: - """Get the file object to write to.""" - file = self._file or (sys.stderr if self.stderr else sys.stdout) - file = getattr(file, "rich_proxied_file", file) - if file is None: - file = NULL_FILE - return file - - @file.setter - def file(self, new_file: IO[str]) -> None: - """Set a new file object.""" - self._file = new_file - - @property - def _buffer(self) -> List[Segment]: - """Get a thread local buffer.""" - return self._thread_locals.buffer - - @property - def _buffer_index(self) -> int: - """Get a thread local buffer.""" - return self._thread_locals.buffer_index - - @_buffer_index.setter - def _buffer_index(self, value: int) -> None: - self._thread_locals.buffer_index = value - - @property - def _theme_stack(self) -> ThemeStack: - """Get the thread local theme stack.""" - return self._thread_locals.theme_stack - - def _detect_color_system(self) -> Optional[ColorSystem]: - """Detect color system from env vars.""" - if self.is_jupyter: - return ColorSystem.TRUECOLOR - if not self.is_terminal or self.is_dumb_terminal: - return None - if WINDOWS: # pragma: no cover - if self.legacy_windows: # pragma: no cover - return ColorSystem.WINDOWS - windows_console_features = get_windows_console_features() - return ( - ColorSystem.TRUECOLOR - if windows_console_features.truecolor - else ColorSystem.EIGHT_BIT - ) - else: - color_term = self._environ.get("COLORTERM", "").strip().lower() - if color_term in ("truecolor", "24bit"): - return ColorSystem.TRUECOLOR - term = self._environ.get("TERM", "").strip().lower() - _term_name, _hyphen, colors = term.rpartition("-") - color_system = _TERM_COLORS.get(colors, ColorSystem.STANDARD) - return color_system - - def _enter_buffer(self) -> None: - """Enter in to a buffer context, and buffer all output.""" - self._buffer_index += 1 - - def _exit_buffer(self) -> None: - """Leave buffer context, and render content if required.""" - self._buffer_index -= 1 - self._check_buffer() - - def set_live(self, live: "Live") -> bool: - """Set Live instance. Used by Live context manager (no need to call directly). - - Args: - live (Live): Live instance using this Console. - - Returns: - Boolean that indicates if the live is the topmost of the stack. - - Raises: - errors.LiveError: If this Console has a Live context currently active. - """ - with self._lock: - self._live_stack.append(live) - return len(self._live_stack) == 1 - - def clear_live(self) -> None: - """Clear the Live instance. Used by the Live context manager (no need to call directly).""" - with self._lock: - self._live_stack.pop() - - def push_render_hook(self, hook: RenderHook) -> None: - """Add a new render hook to the stack. - - Args: - hook (RenderHook): Render hook instance. - """ - with self._lock: - self._render_hooks.append(hook) - - def pop_render_hook(self) -> None: - """Pop the last renderhook from the stack.""" - with self._lock: - self._render_hooks.pop() - - def __enter__(self) -> "Console": - """Own context manager to enter buffer context.""" - self._enter_buffer() - return self - - def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: - """Exit buffer context.""" - self._exit_buffer() - - def begin_capture(self) -> None: - """Begin capturing console output. Call :meth:`end_capture` to exit capture mode and return output.""" - self._enter_buffer() - - def end_capture(self) -> str: - """End capture mode and return captured string. - - Returns: - str: Console output. - """ - render_result = self._render_buffer(self._buffer) - del self._buffer[:] - self._exit_buffer() - return render_result - - def push_theme(self, theme: Theme, *, inherit: bool = True) -> None: - """Push a new theme on to the top of the stack, replacing the styles from the previous theme. - Generally speaking, you should call :meth:`~rich.console.Console.use_theme` to get a context manager, rather - than calling this method directly. - - Args: - theme (Theme): A theme instance. - inherit (bool, optional): Inherit existing styles. Defaults to True. - """ - self._theme_stack.push_theme(theme, inherit=inherit) - - def pop_theme(self) -> None: - """Remove theme from top of stack, restoring previous theme.""" - self._theme_stack.pop_theme() - - def use_theme(self, theme: Theme, *, inherit: bool = True) -> ThemeContext: - """Use a different theme for the duration of the context manager. - - Args: - theme (Theme): Theme instance to user. - inherit (bool, optional): Inherit existing console styles. Defaults to True. - - Returns: - ThemeContext: [description] - """ - return ThemeContext(self, theme, inherit) - - @property - def color_system(self) -> Optional[str]: - """Get color system string. - - Returns: - Optional[str]: "standard", "256" or "truecolor". - """ - - if self._color_system is not None: - return _COLOR_SYSTEMS_NAMES[self._color_system] - else: - return None - - @property - def encoding(self) -> str: - """Get the encoding of the console file, e.g. ``"utf-8"``. - - Returns: - str: A standard encoding string. - """ - return (getattr(self.file, "encoding", "utf-8") or "utf-8").lower() - - @property - def is_terminal(self) -> bool: - """Check if the console is writing to a terminal. - - Returns: - bool: True if the console writing to a device capable of - understanding escape sequences, otherwise False. - """ - # If dev has explicitly set this value, return it - if self._force_terminal is not None: - return self._force_terminal - - # Fudge for Idle - if hasattr(sys.stdin, "__module__") and sys.stdin.__module__.startswith( - "idlelib" - ): - # Return False for Idle which claims to be a tty but can't handle ansi codes - return False - - if self.is_jupyter: - # return False for Jupyter, which may have FORCE_COLOR set - return False - - environ = self._environ - - tty_compatible = environ.get("TTY_COMPATIBLE", "") - # 0 indicates device is not tty compatible - if tty_compatible == "0": - return False - # 1 indicates device is tty compatible - if tty_compatible == "1": - return True - - # https://force-color.org/ - force_color = environ.get("FORCE_COLOR") - if force_color is not None: - return force_color != "" - - # Any other value defaults to auto detect - isatty: Optional[Callable[[], bool]] = getattr(self.file, "isatty", None) - try: - return False if isatty is None else isatty() - except ValueError: - # in some situation (at the end of a pytest run for example) isatty() can raise - # ValueError: I/O operation on closed file - # return False because we aren't in a terminal anymore - return False - - @property - def is_dumb_terminal(self) -> bool: - """Detect dumb terminal. - - Returns: - bool: True if writing to a dumb terminal, otherwise False. - - """ - _term = self._environ.get("TERM", "") - is_dumb = _term.lower() in ("dumb", "unknown") - return self.is_terminal and is_dumb - - @property - def options(self) -> ConsoleOptions: - """Get default console options.""" - size = self.size - return ConsoleOptions( - max_height=size.height, - size=size, - legacy_windows=self.legacy_windows, - min_width=1, - max_width=size.width, - encoding=self.encoding, - is_terminal=self.is_terminal, - ) - - @property - def size(self) -> ConsoleDimensions: - """Get the size of the console. - - Returns: - ConsoleDimensions: A named tuple containing the dimensions. - """ - - if self._width is not None and self._height is not None: - return ConsoleDimensions(self._width - self.legacy_windows, self._height) - - if self.is_dumb_terminal: - return ConsoleDimensions(80, 25) - - width: Optional[int] = None - height: Optional[int] = None - - streams = _STD_STREAMS_OUTPUT if WINDOWS else _STD_STREAMS - for file_descriptor in streams: - try: - width, height = os.get_terminal_size(file_descriptor) - except (AttributeError, ValueError, OSError): # Probably not a terminal - pass - else: - break - - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - # get_terminal_size can report 0, 0 if run from pseudo-terminal - width = width or 80 - height = height or 25 - return ConsoleDimensions( - width - self.legacy_windows if self._width is None else self._width, - height if self._height is None else self._height, - ) - - @size.setter - def size(self, new_size: Tuple[int, int]) -> None: - """Set a new size for the terminal. - - Args: - new_size (Tuple[int, int]): New width and height. - """ - width, height = new_size - self._width = width - self._height = height - - @property - def width(self) -> int: - """Get the width of the console. - - Returns: - int: The width (in characters) of the console. - """ - return self.size.width - - @width.setter - def width(self, width: int) -> None: - """Set width. - - Args: - width (int): New width. - """ - self._width = width - - @property - def height(self) -> int: - """Get the height of the console. - - Returns: - int: The height (in lines) of the console. - """ - return self.size.height - - @height.setter - def height(self, height: int) -> None: - """Set height. - - Args: - height (int): new height. - """ - self._height = height - - def bell(self) -> None: - """Play a 'bell' sound (if supported by the terminal).""" - self.control(Control.bell()) - - def capture(self) -> Capture: - """A context manager to *capture* the result of print() or log() in a string, - rather than writing it to the console. - - Example: - >>> from rich.console import Console - >>> console = Console() - >>> with console.capture() as capture: - ... console.print("[bold magenta]Hello World[/]") - >>> print(capture.get()) - - Returns: - Capture: Context manager with disables writing to the terminal. - """ - capture = Capture(self) - return capture - - def pager( - self, pager: Optional[Pager] = None, styles: bool = False, links: bool = False - ) -> PagerContext: - """A context manager to display anything printed within a "pager". The pager application - is defined by the system and will typically support at least pressing a key to scroll. - - Args: - pager (Pager, optional): A pager object, or None to use :class:`~rich.pager.SystemPager`. Defaults to None. - styles (bool, optional): Show styles in pager. Defaults to False. - links (bool, optional): Show links in pager. Defaults to False. - - Example: - >>> from rich.console import Console - >>> from rich.__main__ import make_test_card - >>> console = Console() - >>> with console.pager(): - console.print(make_test_card()) - - Returns: - PagerContext: A context manager. - """ - return PagerContext(self, pager=pager, styles=styles, links=links) - - def line(self, count: int = 1) -> None: - """Write new line(s). - - Args: - count (int, optional): Number of new lines. Defaults to 1. - """ - - assert count >= 0, "count must be >= 0" - self.print(NewLine(count)) - - def clear(self, home: bool = True) -> None: - """Clear the screen. - - Args: - home (bool, optional): Also move the cursor to 'home' position. Defaults to True. - """ - if home: - self.control(Control.clear(), Control.home()) - else: - self.control(Control.clear()) - - def status( - self, - status: RenderableType, - *, - spinner: str = "dots", - spinner_style: StyleType = "status.spinner", - speed: float = 1.0, - refresh_per_second: float = 12.5, - ) -> "Status": - """Display a status and spinner. - - Args: - status (RenderableType): A status renderable (str or Text typically). - spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". - spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". - speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. - refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. - - Returns: - Status: A Status object that may be used as a context manager. - """ - from .status import Status - - status_renderable = Status( - status, - console=self, - spinner=spinner, - spinner_style=spinner_style, - speed=speed, - refresh_per_second=refresh_per_second, - ) - return status_renderable - - def show_cursor(self, show: bool = True) -> bool: - """Show or hide the cursor. - - Args: - show (bool, optional): Set visibility of the cursor. - """ - if self.is_terminal: - self.control(Control.show_cursor(show)) - return True - return False - - def set_alt_screen(self, enable: bool = True) -> bool: - """Enables alternative screen mode. - - Note, if you enable this mode, you should ensure that is disabled before - the application exits. See :meth:`~rich.Console.screen` for a context manager - that handles this for you. - - Args: - enable (bool, optional): Enable (True) or disable (False) alternate screen. Defaults to True. - - Returns: - bool: True if the control codes were written. - - """ - changed = False - if self.is_terminal and not self.legacy_windows: - self.control(Control.alt_screen(enable)) - changed = True - self._is_alt_screen = enable - return changed - - @property - def is_alt_screen(self) -> bool: - """Check if the alt screen was enabled. - - Returns: - bool: True if the alt screen was enabled, otherwise False. - """ - return self._is_alt_screen - - def set_window_title(self, title: str) -> bool: - """Set the title of the console terminal window. - - Warning: There is no means within Rich of "resetting" the window title to its - previous value, meaning the title you set will persist even after your application - exits. - - ``fish`` shell resets the window title before and after each command by default, - negating this issue. Windows Terminal and command prompt will also reset the title for you. - Most other shells and terminals, however, do not do this. - - Some terminals may require configuration changes before you can set the title. - Some terminals may not support setting the title at all. - - Other software (including the terminal itself, the shell, custom prompts, plugins, etc.) - may also set the terminal window title. This could result in whatever value you write - using this method being overwritten. - - Args: - title (str): The new title of the terminal window. - - Returns: - bool: True if the control code to change the terminal title was - written, otherwise False. Note that a return value of True - does not guarantee that the window title has actually changed, - since the feature may be unsupported/disabled in some terminals. - """ - if self.is_terminal: - self.control(Control.title(title)) - return True - return False - - def screen( - self, hide_cursor: bool = True, style: Optional[StyleType] = None - ) -> "ScreenContext": - """Context manager to enable and disable 'alternative screen' mode. - - Args: - hide_cursor (bool, optional): Also hide the cursor. Defaults to False. - style (Style, optional): Optional style for screen. Defaults to None. - - Returns: - ~ScreenContext: Context which enables alternate screen on enter, and disables it on exit. - """ - return ScreenContext(self, hide_cursor=hide_cursor, style=style or "") - - def measure( - self, renderable: RenderableType, *, options: Optional[ConsoleOptions] = None - ) -> Measurement: - """Measure a renderable. Returns a :class:`~rich.measure.Measurement` object which contains - information regarding the number of characters required to print the renderable. - - Args: - renderable (RenderableType): Any renderable or string. - options (Optional[ConsoleOptions], optional): Options to use when measuring, or None - to use default options. Defaults to None. - - Returns: - Measurement: A measurement of the renderable. - """ - measurement = Measurement.get(self, options or self.options, renderable) - return measurement - - def render( - self, renderable: RenderableType, options: Optional[ConsoleOptions] = None - ) -> Iterable[Segment]: - """Render an object in to an iterable of `Segment` instances. - - This method contains the logic for rendering objects with the console protocol. - You are unlikely to need to use it directly, unless you are extending the library. - - Args: - renderable (RenderableType): An object supporting the console protocol, or - an object that may be converted to a string. - options (ConsoleOptions, optional): An options object, or None to use self.options. Defaults to None. - - Returns: - Iterable[Segment]: An iterable of segments that may be rendered. - """ - - _options = options or self.options - if _options.max_width < 1: - # No space to render anything. This prevents potential recursion errors. - return - render_iterable: RenderResult - - renderable = rich_cast(renderable) - if hasattr(renderable, "__rich_console__") and not isclass(renderable): - render_iterable = renderable.__rich_console__(self, _options) - elif isinstance(renderable, str): - text_renderable = self.render_str( - renderable, highlight=_options.highlight, markup=_options.markup - ) - render_iterable = text_renderable.__rich_console__(self, _options) - else: - raise errors.NotRenderableError( - f"Unable to render {renderable!r}; " - "A str, Segment or object with __rich_console__ method is required" - ) - - try: - iter_render = iter(render_iterable) - except TypeError: - raise errors.NotRenderableError( - f"object {render_iterable!r} is not renderable" - ) - _Segment = Segment - _options = _options.reset_height() - for render_output in iter_render: - if isinstance(render_output, _Segment): - yield render_output - else: - yield from self.render(render_output, _options) - - def render_lines( - self, - renderable: RenderableType, - options: Optional[ConsoleOptions] = None, - *, - style: Optional[Style] = None, - pad: bool = True, - new_lines: bool = False, - ) -> List[List[Segment]]: - """Render objects in to a list of lines. - - The output of render_lines is useful when further formatting of rendered console text - is required, such as the Panel class which draws a border around any renderable object. - - Args: - renderable (RenderableType): Any object renderable in the console. - options (Optional[ConsoleOptions], optional): Console options, or None to use self.options. Default to ``None``. - style (Style, optional): Optional style to apply to renderables. Defaults to ``None``. - pad (bool, optional): Pad lines shorter than render width. Defaults to ``True``. - new_lines (bool, optional): Include "\n" characters at end of lines. - - Returns: - List[List[Segment]]: A list of lines, where a line is a list of Segment objects. - """ - with self._lock: - render_options = options or self.options - _rendered = self.render(renderable, render_options) - if style: - _rendered = Segment.apply_style(_rendered, style) - - render_height = render_options.height - if render_height is not None: - render_height = max(0, render_height) - - lines = list( - islice( - Segment.split_and_crop_lines( - _rendered, - render_options.max_width, - include_new_lines=new_lines, - pad=pad, - style=style, - ), - None, - render_height, - ) - ) - if render_options.height is not None: - extra_lines = render_options.height - len(lines) - if extra_lines > 0: - pad_line = [ - ( - [ - Segment(" " * render_options.max_width, style), - Segment("\n"), - ] - if new_lines - else [Segment(" " * render_options.max_width, style)] - ) - ] - lines.extend(pad_line * extra_lines) - - return lines - - def render_str( - self, - text: str, - *, - style: Union[str, Style] = "", - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - highlighter: Optional[HighlighterType] = None, - ) -> "Text": - """Convert a string to a Text instance. This is called automatically if - you print or log a string. - - Args: - text (str): Text to render. - style (Union[str, Style], optional): Style to apply to rendered text. - justify (str, optional): Justify method: "default", "left", "center", "full", or "right". Defaults to ``None``. - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji, or ``None`` to use Console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use Console default. - highlight (Optional[bool], optional): Enable highlighting, or ``None`` to use Console default. - highlighter (HighlighterType, optional): Optional highlighter to apply. - Returns: - ConsoleRenderable: Renderable object. - - """ - emoji_enabled = emoji or (emoji is None and self._emoji) - markup_enabled = markup or (markup is None and self._markup) - highlight_enabled = highlight or (highlight is None and self._highlight) - - if markup_enabled: - rich_text = render_markup( - text, - style=style, - emoji=emoji_enabled, - emoji_variant=self._emoji_variant, - ) - rich_text.justify = justify - rich_text.overflow = overflow - else: - rich_text = Text( - ( - _emoji_replace(text, default_variant=self._emoji_variant) - if emoji_enabled - else text - ), - justify=justify, - overflow=overflow, - style=style, - ) - - _highlighter = (highlighter or self.highlighter) if highlight_enabled else None - if _highlighter is not None: - highlight_text = _highlighter(str(rich_text)) - highlight_text.copy_styles(rich_text) - return highlight_text - - return rich_text - - def get_style( - self, name: Union[str, Style], *, default: Optional[Union[Style, str]] = None - ) -> Style: - """Get a Style instance by its theme name or parse a definition. - - Args: - name (str): The name of a style or a style definition. - - Returns: - Style: A Style object. - - Raises: - MissingStyle: If no style could be parsed from name. - - """ - if isinstance(name, Style): - return name - - try: - style = self._theme_stack.get(name) - if style is None: - style = Style.parse(name) - return style.copy() if style.link else style - except errors.StyleSyntaxError as error: - if default is not None: - return self.get_style(default) - raise errors.MissingStyle( - f"Failed to get style {name!r}; {error}" - ) from None - - def _collect_renderables( - self, - objects: Iterable[Any], - sep: str, - end: str, - *, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - ) -> List[ConsoleRenderable]: - """Combine a number of renderables and text into one renderable. - - Args: - objects (Iterable[Any]): Anything that Rich can render. - sep (str): String to write between print data. - end (str): String to write at end of print data. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. - - Returns: - List[ConsoleRenderable]: A list of things to render. - """ - renderables: List[ConsoleRenderable] = [] - _append = renderables.append - text: List[Text] = [] - append_text = text.append - - append = _append - if justify in ("left", "center", "right"): - - def align_append(renderable: RenderableType) -> None: - _append(Align(renderable, cast(AlignMethod, justify))) - - append = align_append - - _highlighter: HighlighterType = _null_highlighter - if highlight or (highlight is None and self._highlight): - _highlighter = self.highlighter - - def check_text() -> None: - if text: - sep_text = Text(sep, justify=justify, end=end) - append(sep_text.join(text)) - text.clear() - - for renderable in objects: - renderable = rich_cast(renderable) - if isinstance(renderable, str): - append_text( - self.render_str( - renderable, - emoji=emoji, - markup=markup, - highlight=highlight, - highlighter=_highlighter, - ) - ) - elif isinstance(renderable, Text): - append_text(renderable) - elif isinstance(renderable, ConsoleRenderable): - check_text() - append(renderable) - elif is_expandable(renderable): - check_text() - append(Pretty(renderable, highlighter=_highlighter)) - else: - append_text(_highlighter(str(renderable))) - - check_text() - - if self.style is not None: - style = self.get_style(self.style) - renderables = [Styled(renderable, style) for renderable in renderables] - - return renderables - - def rule( - self, - title: TextType = "", - *, - characters: str = "─", - style: Union[str, Style] = "rule.line", - align: AlignMethod = "center", - ) -> None: - """Draw a line with optional centered title. - - Args: - title (str, optional): Text to render over the rule. Defaults to "". - characters (str, optional): Character(s) to form the line. Defaults to "─". - style (str, optional): Style of line. Defaults to "rule.line". - align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". - """ - from .rule import Rule - - rule = Rule(title=title, characters=characters, style=style, align=align) - self.print(rule) - - def control(self, *control: Control) -> None: - """Insert non-printing control codes. - - Args: - control_codes (str): Control codes, such as those that may move the cursor. - """ - if not self.is_dumb_terminal: - with self: - self._buffer.extend(_control.segment for _control in control) - - def out( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - highlight: Optional[bool] = None, - ) -> None: - """Output to the terminal. This is a low-level way of writing to the terminal which unlike - :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markup, but will - optionally apply highlighting and a basic style. - - Args: - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use - console default. Defaults to ``None``. - """ - raw_output: str = sep.join(str(_object) for _object in objects) - self.print( - raw_output, - style=style, - highlight=highlight, - emoji=False, - markup=False, - no_wrap=True, - overflow="ignore", - crop=False, - end=end, - ) - - def print( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - no_wrap: Optional[bool] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - width: Optional[int] = None, - height: Optional[int] = None, - crop: bool = True, - soft_wrap: Optional[bool] = None, - new_line_start: bool = False, - ) -> None: - """Print to the console. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): Justify method: "default", "left", "right", "center", or "full". Defaults to ``None``. - overflow (str, optional): Overflow method: "ignore", "crop", "fold", or "ellipsis". Defaults to None. - no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to None. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to ``None``. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to ``None``. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to ``None``. - width (Optional[int], optional): Width of output, or ``None`` to auto-detect. Defaults to ``None``. - crop (Optional[bool], optional): Crop output to width of terminal. Defaults to True. - soft_wrap (bool, optional): Enable soft wrap mode which disables word wrapping and cropping of text or ``None`` for - Console default. Defaults to ``None``. - new_line_start (bool, False): Insert a new line at the start if the output contains more than one line. Defaults to ``False``. - """ - if not objects: - objects = (NewLine(),) - - if soft_wrap is None: - soft_wrap = self.soft_wrap - if soft_wrap: - if no_wrap is None: - no_wrap = True - if overflow is None: - overflow = "ignore" - crop = False - render_hooks = self._render_hooks[:] - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - render_options = self.options.update( - justify=justify, - overflow=overflow, - width=min(width, self.width) if width is not None else NO_CHANGE, - height=height, - no_wrap=no_wrap, - markup=markup, - highlight=highlight, - ) - - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - if style is None: - for renderable in renderables: - extend(render(renderable, render_options)) - else: - for renderable in renderables: - extend( - Segment.apply_style( - render(renderable, render_options), self.get_style(style) - ) - ) - if new_line_start: - if ( - len("".join(segment.text for segment in new_segments).splitlines()) - > 1 - ): - new_segments.insert(0, Segment.line()) - if crop: - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line) - else: - self._buffer.extend(new_segments) - - def print_json( - self, - json: Optional[str] = None, - *, - data: Any = None, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, - ) -> None: - """Pretty prints JSON. Output will be valid JSON. - - Args: - json (Optional[str]): A string containing JSON. - data (Any): If json is not supplied, then encode this data. - indent (Union[None, int, str], optional): Number of spaces to indent. Defaults to 2. - highlight (bool, optional): Enable highlighting of output: Defaults to True. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - """ - from pip._vendor.rich.json import JSON - - if json is None: - json_renderable = JSON.from_data( - data, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - else: - if not isinstance(json, str): - raise TypeError( - f"json must be str. Did you mean print_json(data={json!r}) ?" - ) - json_renderable = JSON( - json, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - self.print(json_renderable, soft_wrap=True) - - def update_screen( - self, - renderable: RenderableType, - *, - region: Optional[Region] = None, - options: Optional[ConsoleOptions] = None, - ) -> None: - """Update the screen at a given offset. - - Args: - renderable (RenderableType): A Rich renderable. - region (Region, optional): Region of screen to update, or None for entire screen. Defaults to None. - x (int, optional): x offset. Defaults to 0. - y (int, optional): y offset. Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - render_options = options or self.options - if region is None: - x = y = 0 - render_options = render_options.update_dimensions( - render_options.max_width, render_options.height or self.height - ) - else: - x, y, width, height = region - render_options = render_options.update_dimensions(width, height) - - lines = self.render_lines(renderable, options=render_options) - self.update_screen_lines(lines, x, y) - - def update_screen_lines( - self, lines: List[List[Segment]], x: int = 0, y: int = 0 - ) -> None: - """Update lines of the screen at a given offset. - - Args: - lines (List[List[Segment]]): Rendered lines (as produced by :meth:`~rich.Console.render_lines`). - x (int, optional): x offset (column no). Defaults to 0. - y (int, optional): y offset (column no). Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - screen_update = ScreenUpdate(lines, x, y) - segments = self.render(screen_update) - self._buffer.extend(segments) - self._check_buffer() - - def print_exception( - self, - *, - width: Optional[int] = 100, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ) -> None: - """Prints a rich render of the last exception and traceback. - - Args: - width (Optional[int], optional): Number of characters used to render code. Defaults to 100. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - """ - from .traceback import Traceback - - traceback = Traceback( - width=width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - suppress=suppress, - max_frames=max_frames, - ) - self.print(traceback) - - @staticmethod - def _caller_frame_info( - offset: int, - currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe, - ) -> Tuple[str, int, Dict[str, Any]]: - """Get caller frame information. - - Args: - offset (int): the caller offset within the current frame stack. - currentframe (Callable[[], Optional[FrameType]], optional): the callable to use to - retrieve the current frame. Defaults to ``inspect.currentframe``. - - Returns: - Tuple[str, int, Dict[str, Any]]: A tuple containing the filename, the line number and - the dictionary of local variables associated with the caller frame. - - Raises: - RuntimeError: If the stack offset is invalid. - """ - # Ignore the frame of this local helper - offset += 1 - - frame = currentframe() - if frame is not None: - # Use the faster currentframe where implemented - while offset and frame is not None: - frame = frame.f_back - offset -= 1 - assert frame is not None - return frame.f_code.co_filename, frame.f_lineno, frame.f_locals - else: - # Fallback to the slower stack - frame_info = inspect.stack()[offset] - return frame_info.filename, frame_info.lineno, frame_info.frame.f_locals - - def log( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - log_locals: bool = False, - _stack_offset: int = 1, - ) -> None: - """Log rich content to the terminal. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to None. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to None. - log_locals (bool, optional): Boolean to enable logging of locals where ``log()`` - was called. Defaults to False. - _stack_offset (int, optional): Offset of caller from end of call stack. Defaults to 1. - """ - if not objects: - objects = (NewLine(),) - - render_hooks = self._render_hooks[:] - - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - if style is not None: - renderables = [Styled(renderable, style) for renderable in renderables] - - filename, line_no, locals = self._caller_frame_info(_stack_offset) - link_path = None if filename.startswith("<") else os.path.abspath(filename) - path = filename.rpartition(os.sep)[-1] - if log_locals: - locals_map = { - key: value - for key, value in locals.items() - if not key.startswith("__") - } - renderables.append(render_scope(locals_map, title="[i]locals")) - - renderables = [ - self._log_render( - self, - renderables, - log_time=self.get_datetime(), - path=path, - line_no=line_no, - link_path=link_path, - ) - ] - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - render_options = self.options - for renderable in renderables: - extend(render(renderable, render_options)) - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line) - - def on_broken_pipe(self) -> None: - """This function is called when a `BrokenPipeError` is raised. - - This can occur when piping Textual output in Linux and macOS. - The default implementation is to exit the app, but you could implement - this method in a subclass to change the behavior. - - See https://docs.python.org/3/library/signal.html#note-on-sigpipe for details. - """ - self.quiet = True - devnull = os.open(os.devnull, os.O_WRONLY) - os.dup2(devnull, sys.stdout.fileno()) - raise SystemExit(1) - - def _check_buffer(self) -> None: - """Check if the buffer may be rendered. Render it if it can (e.g. Console.quiet is False) - Rendering is supported on Windows, Unix and Jupyter environments. For - legacy Windows consoles, the win32 API is called directly. - This method will also record what it renders if recording is enabled via Console.record. - """ - if self.quiet: - del self._buffer[:] - return - - try: - self._write_buffer() - except BrokenPipeError: - self.on_broken_pipe() - - def _write_buffer(self) -> None: - """Write the buffer to the output file.""" - - with self._lock: - if self.record and not self._buffer_index: - with self._record_buffer_lock: - self._record_buffer.extend(self._buffer[:]) - - if self._buffer_index == 0: - if self.is_jupyter: # pragma: no cover - from .jupyter import display - - display(self._buffer, self._render_buffer(self._buffer[:])) - del self._buffer[:] - else: - if WINDOWS: - use_legacy_windows_render = False - if self.legacy_windows: - fileno = get_fileno(self.file) - if fileno is not None: - use_legacy_windows_render = ( - fileno in _STD_STREAMS_OUTPUT - ) - - if use_legacy_windows_render: - from pip._vendor.rich._win32_console import LegacyWindowsTerm - from pip._vendor.rich._windows_renderer import legacy_windows_render - - buffer = self._buffer[:] - if self.no_color and self._color_system: - buffer = list(Segment.remove_color(buffer)) - - legacy_windows_render(buffer, LegacyWindowsTerm(self.file)) - else: - # Either a non-std stream on legacy Windows, or modern Windows. - text = self._render_buffer(self._buffer[:]) - # https://bugs.python.org/issue37871 - # https://github.com/python/cpython/issues/82052 - # We need to avoid writing more than 32Kb in a single write, due to the above bug - write = self.file.write - # Worse case scenario, every character is 4 bytes of utf-8 - MAX_WRITE = 32 * 1024 // 4 - try: - if len(text) <= MAX_WRITE: - write(text) - else: - batch: List[str] = [] - batch_append = batch.append - size = 0 - for line in text.splitlines(True): - if size + len(line) > MAX_WRITE and batch: - write("".join(batch)) - batch.clear() - size = 0 - batch_append(line) - size += len(line) - if batch: - write("".join(batch)) - batch.clear() - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - else: - text = self._render_buffer(self._buffer[:]) - try: - self.file.write(text) - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - - self.file.flush() - del self._buffer[:] - - def _render_buffer(self, buffer: Iterable[Segment]) -> str: - """Render buffered output, and clear buffer.""" - output: List[str] = [] - append = output.append - color_system = self._color_system - legacy_windows = self.legacy_windows - not_terminal = not self.is_terminal - if self.no_color and color_system: - buffer = Segment.remove_color(buffer) - for text, style, control in buffer: - if style: - append( - style.render( - text, - color_system=color_system, - legacy_windows=legacy_windows, - ) - ) - elif not (not_terminal and control): - append(text) - - rendered = "".join(output) - return rendered - - def input( - self, - prompt: TextType = "", - *, - markup: bool = True, - emoji: bool = True, - password: bool = False, - stream: Optional[TextIO] = None, - ) -> str: - """Displays a prompt and waits for input from the user. The prompt may contain color / style. - - It works in the same way as Python's builtin :func:`input` function and provides elaborate line editing and history features if Python's builtin :mod:`readline` module is previously loaded. - - Args: - prompt (Union[str, Text]): Text to render in the prompt. - markup (bool, optional): Enable console markup (requires a str prompt). Defaults to True. - emoji (bool, optional): Enable emoji (requires a str prompt). Defaults to True. - password: (bool, optional): Hide typed text. Defaults to False. - stream: (TextIO, optional): Optional file to read input from (rather than stdin). Defaults to None. - - Returns: - str: Text read from stdin. - """ - if prompt: - self.print(prompt, markup=markup, emoji=emoji, end="") - if password: - result = getpass("", stream=stream) - else: - if stream: - result = stream.readline() - else: - result = input() - return result - - def export_text(self, *, clear: bool = True, styles: bool = False) -> str: - """Generate text from console contents (requires record=True argument in constructor). - - Args: - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi escape codes will be included. ``False`` for plain text. - Defaults to ``False``. - - Returns: - str: String containing console contents. - - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - - with self._record_buffer_lock: - if styles: - text = "".join( - (style.render(text) if style else text) - for text, style, _ in self._record_buffer - ) - else: - text = "".join( - segment.text - for segment in self._record_buffer - if not segment.control - ) - if clear: - del self._record_buffer[:] - return text - - def save_text(self, path: str, *, clear: bool = True, styles: bool = False) -> None: - """Generate text from console and save to a given location (requires record=True argument in constructor). - - Args: - path (str): Path to write text files. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi style codes will be included. ``False`` for plain text. - Defaults to ``False``. - - """ - text = self.export_text(clear=clear, styles=styles) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(text) - - def export_html( - self, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: Optional[str] = None, - inline_styles: bool = False, - ) -> str: - """Generate HTML from console contents (requires record=True argument in constructor). - - Args: - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - Returns: - str: String containing console contents as HTML. - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - fragments: List[str] = [] - append = fragments.append - _theme = theme or DEFAULT_TERMINAL_THEME - stylesheet = "" - - render_code_format = CONSOLE_HTML_FORMAT if code_format is None else code_format - - with self._record_buffer_lock: - if inline_styles: - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - if style.link: - text = f'<a href="{style.link}">{text}</a>' - text = f'<span style="{rule}">{text}</span>' if rule else text - append(text) - else: - styles: Dict[str, int] = {} - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - style_number = styles.setdefault(rule, len(styles) + 1) - if style.link: - text = f'<a class="r{style_number}" href="{style.link}">{text}</a>' - else: - text = f'<span class="r{style_number}">{text}</span>' - append(text) - stylesheet_rules: List[str] = [] - stylesheet_append = stylesheet_rules.append - for style_rule, style_number in styles.items(): - if style_rule: - stylesheet_append(f".r{style_number} {{{style_rule}}}") - stylesheet = "\n".join(stylesheet_rules) - - rendered_code = render_code_format.format( - code="".join(fragments), - stylesheet=stylesheet, - foreground=_theme.foreground_color.hex, - background=_theme.background_color.hex, - ) - if clear: - del self._record_buffer[:] - return rendered_code - - def save_html( - self, - path: str, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_HTML_FORMAT, - inline_styles: bool = False, - ) -> None: - """Generate HTML from console contents and write to a file (requires record=True argument in constructor). - - Args: - path (str): Path to write html file. - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - """ - html = self.export_html( - theme=theme, - clear=clear, - code_format=code_format, - inline_styles=inline_styles, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(html) - - def export_svg( - self, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> str: - """ - Generate an SVG from the console contents (requires record=True in Console constructor). - - Args: - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - - from pip._vendor.rich.cells import cell_len - - style_cache: Dict[Style, str] = {} - - def get_svg_style(style: Style) -> str: - """Convert a Style to CSS rules for SVG.""" - if style in style_cache: - return style_cache[style] - css_rules = [] - color = ( - _theme.foreground_color - if (style.color is None or style.color.is_default) - else style.color.get_truecolor(_theme) - ) - bgcolor = ( - _theme.background_color - if (style.bgcolor is None or style.bgcolor.is_default) - else style.bgcolor.get_truecolor(_theme) - ) - if style.reverse: - color, bgcolor = bgcolor, color - if style.dim: - color = blend_rgb(color, bgcolor, 0.4) - css_rules.append(f"fill: {color.hex}") - if style.bold: - css_rules.append("font-weight: bold") - if style.italic: - css_rules.append("font-style: italic;") - if style.underline: - css_rules.append("text-decoration: underline;") - if style.strike: - css_rules.append("text-decoration: line-through;") - - css = ";".join(css_rules) - style_cache[style] = css - return css - - _theme = theme or SVG_EXPORT_THEME - - width = self.width - char_height = 20 - char_width = char_height * font_aspect_ratio - line_height = char_height * 1.22 - - margin_top = 1 - margin_right = 1 - margin_bottom = 1 - margin_left = 1 - - padding_top = 40 - padding_right = 8 - padding_bottom = 8 - padding_left = 8 - - padding_width = padding_left + padding_right - padding_height = padding_top + padding_bottom - margin_width = margin_left + margin_right - margin_height = margin_top + margin_bottom - - text_backgrounds: List[str] = [] - text_group: List[str] = [] - classes: Dict[str, int] = {} - style_no = 1 - - def escape_text(text: str) -> str: - """HTML escape text and replace spaces with nbsp.""" - return escape(text).replace(" ", "&#160;") - - def make_tag( - name: str, content: Optional[str] = None, **attribs: object - ) -> str: - """Make a tag from name, content, and attributes.""" - - def stringify(value: object) -> str: - if isinstance(value, (float)): - return format(value, "g") - return str(value) - - tag_attribs = " ".join( - f'{k.lstrip("_").replace("_", "-")}="{stringify(v)}"' - for k, v in attribs.items() - ) - return ( - f"<{name} {tag_attribs}>{content}</{name}>" - if content - else f"<{name} {tag_attribs}/>" - ) - - with self._record_buffer_lock: - segments = list(Segment.filter_control(self._record_buffer)) - if clear: - self._record_buffer.clear() - - if unique_id is None: - unique_id = "terminal-" + str( - zlib.adler32( - ("".join(repr(segment) for segment in segments)).encode( - "utf-8", - "ignore", - ) - + title.encode("utf-8", "ignore") - ) - ) - y = 0 - for y, line in enumerate(Segment.split_and_crop_lines(segments, length=width)): - x = 0 - for text, style, _control in line: - style = style or Style() - rules = get_svg_style(style) - if rules not in classes: - classes[rules] = style_no - style_no += 1 - class_name = f"r{classes[rules]}" - - if style.reverse: - has_background = True - background = ( - _theme.foreground_color.hex - if style.color is None - else style.color.get_truecolor(_theme).hex - ) - else: - bgcolor = style.bgcolor - has_background = bgcolor is not None and not bgcolor.is_default - background = ( - _theme.background_color.hex - if style.bgcolor is None - else style.bgcolor.get_truecolor(_theme).hex - ) - - text_length = cell_len(text) - if has_background: - text_backgrounds.append( - make_tag( - "rect", - fill=background, - x=x * char_width, - y=y * line_height + 1.5, - width=char_width * text_length, - height=line_height + 0.25, - shape_rendering="crispEdges", - ) - ) - - if text != " " * len(text): - text_group.append( - make_tag( - "text", - escape_text(text), - _class=f"{unique_id}-{class_name}", - x=x * char_width, - y=y * line_height + char_height, - textLength=char_width * len(text), - clip_path=f"url(#{unique_id}-line-{y})", - ) - ) - x += cell_len(text) - - line_offsets = [line_no * line_height + 1.5 for line_no in range(y)] - lines = "\n".join( - f"""<clipPath id="{unique_id}-line-{line_no}"> - {make_tag("rect", x=0, y=offset, width=char_width * width, height=line_height + 0.25)} - </clipPath>""" - for line_no, offset in enumerate(line_offsets) - ) - - styles = "\n".join( - f".{unique_id}-r{rule_no} {{ {css} }}" for css, rule_no in classes.items() - ) - backgrounds = "".join(text_backgrounds) - matrix = "".join(text_group) - - terminal_width = ceil(width * char_width + padding_width) - terminal_height = (y + 1) * line_height + padding_height - chrome = make_tag( - "rect", - fill=_theme.background_color.hex, - stroke="rgba(255,255,255,0.35)", - stroke_width="1", - x=margin_left, - y=margin_top, - width=terminal_width, - height=terminal_height, - rx=8, - ) - - title_color = _theme.foreground_color.hex - if title: - chrome += make_tag( - "text", - escape_text(title), - _class=f"{unique_id}-title", - fill=title_color, - text_anchor="middle", - x=terminal_width // 2, - y=margin_top + char_height + 6, - ) - chrome += f""" - <g transform="translate(26,22)"> - <circle cx="0" cy="0" r="7" fill="#ff5f57"/> - <circle cx="22" cy="0" r="7" fill="#febc2e"/> - <circle cx="44" cy="0" r="7" fill="#28c840"/> - </g> - """ - - svg = code_format.format( - unique_id=unique_id, - char_width=char_width, - char_height=char_height, - line_height=line_height, - terminal_width=char_width * width - 1, - terminal_height=(y + 1) * line_height - 1, - width=terminal_width + margin_width, - height=terminal_height + margin_height, - terminal_x=margin_left + padding_left, - terminal_y=margin_top + padding_top, - styles=styles, - chrome=chrome, - backgrounds=backgrounds, - matrix=matrix, - lines=lines, - ) - return svg - - def save_svg( - self, - path: str, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> None: - """Generate an SVG file from the console contents (requires record=True in Console constructor). - - Args: - path (str): The path to write the SVG to. - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - svg = self.export_svg( - title=title, - theme=theme, - clear=clear, - code_format=code_format, - font_aspect_ratio=font_aspect_ratio, - unique_id=unique_id, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(svg) - - -def _svg_hash(svg_main_code: str) -> str: - """Returns a unique hash for the given SVG main code. - - Args: - svg_main_code (str): The content we're going to inject in the SVG envelope. - - Returns: - str: a hash of the given content - """ - return str(zlib.adler32(svg_main_code.encode())) - - -if __name__ == "__main__": # pragma: no cover - console = Console(record=True) - - console.log( - "JSONRPC [i]request[/i]", - 5, - 1.3, - True, - False, - None, - { - "jsonrpc": "2.0", - "method": "subtract", - "params": {"minuend": 42, "subtrahend": 23}, - "id": 3, - }, - ) - - console.log("Hello, World!", "{'a': 1}", repr(console)) - - console.print( - { - "name": None, - "empty": [], - "quiz": { - "sport": { - "answered": True, - "q1": { - "question": "Which one is correct team name in NBA?", - "options": [ - "New York Bulls", - "Los Angeles Kings", - "Golden State Warriors", - "Huston Rocket", - ], - "answer": "Huston Rocket", - }, - }, - "maths": { - "answered": False, - "q1": { - "question": "5 + 7 = ?", - "options": [10, 11, 12, 13], - "answer": 12, - }, - "q2": { - "question": "12 - 8 = ?", - "options": [1, 2, 3, 4], - "answer": 4, - }, - }, - }, - } - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/constrain.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/constrain.py deleted file mode 100644 index 65fdf5634..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/constrain.py +++ /dev/null @@ -1,37 +0,0 @@ -from typing import Optional, TYPE_CHECKING - -from .jupyter import JupyterMixin -from .measure import Measurement - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - - -class Constrain(JupyterMixin): - """Constrain the width of a renderable to a given number of characters. - - Args: - renderable (RenderableType): A renderable object. - width (int, optional): The maximum width (in characters) to render. Defaults to 80. - """ - - def __init__(self, renderable: "RenderableType", width: Optional[int] = 80) -> None: - self.renderable = renderable - self.width = width - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.width is None: - yield self.renderable - else: - child_options = options.update_width(min(self.width, options.max_width)) - yield from console.render(self.renderable, child_options) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - if self.width is not None: - options = options.update_width(self.width) - measurement = Measurement.get(console, options, self.renderable) - return measurement diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/containers.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/containers.py deleted file mode 100644 index 901ff8ba6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/containers.py +++ /dev/null @@ -1,167 +0,0 @@ -from itertools import zip_longest -from typing import ( - TYPE_CHECKING, - Iterable, - Iterator, - List, - Optional, - TypeVar, - Union, - overload, -) - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - JustifyMethod, - OverflowMethod, - RenderResult, - RenderableType, - ) - from .text import Text - -from .cells import cell_len -from .measure import Measurement - -T = TypeVar("T") - - -class Renderables: - """A list subclass which renders its contents to the console.""" - - def __init__( - self, renderables: Optional[Iterable["RenderableType"]] = None - ) -> None: - self._renderables: List["RenderableType"] = ( - list(renderables) if renderables is not None else [] - ) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - """Console render method to insert line-breaks.""" - yield from self._renderables - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - dimensions = [ - Measurement.get(console, options, renderable) - for renderable in self._renderables - ] - if not dimensions: - return Measurement(1, 1) - _min = max(dimension.minimum for dimension in dimensions) - _max = max(dimension.maximum for dimension in dimensions) - return Measurement(_min, _max) - - def append(self, renderable: "RenderableType") -> None: - self._renderables.append(renderable) - - def __iter__(self) -> Iterable["RenderableType"]: - return iter(self._renderables) - - -class Lines: - """A list subclass which can render to the console.""" - - def __init__(self, lines: Iterable["Text"] = ()) -> None: - self._lines: List["Text"] = list(lines) - - def __repr__(self) -> str: - return f"Lines({self._lines!r})" - - def __iter__(self) -> Iterator["Text"]: - return iter(self._lines) - - @overload - def __getitem__(self, index: int) -> "Text": - ... - - @overload - def __getitem__(self, index: slice) -> List["Text"]: - ... - - def __getitem__(self, index: Union[slice, int]) -> Union["Text", List["Text"]]: - return self._lines[index] - - def __setitem__(self, index: int, value: "Text") -> "Lines": - self._lines[index] = value - return self - - def __len__(self) -> int: - return self._lines.__len__() - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - """Console render method to insert line-breaks.""" - yield from self._lines - - def append(self, line: "Text") -> None: - self._lines.append(line) - - def extend(self, lines: Iterable["Text"]) -> None: - self._lines.extend(lines) - - def pop(self, index: int = -1) -> "Text": - return self._lines.pop(index) - - def justify( - self, - console: "Console", - width: int, - justify: "JustifyMethod" = "left", - overflow: "OverflowMethod" = "fold", - ) -> None: - """Justify and overflow text to a given width. - - Args: - console (Console): Console instance. - width (int): Number of cells available per line. - justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left". - overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold". - - """ - from .text import Text - - if justify == "left": - for line in self._lines: - line.truncate(width, overflow=overflow, pad=True) - elif justify == "center": - for line in self._lines: - line.rstrip() - line.truncate(width, overflow=overflow) - line.pad_left((width - cell_len(line.plain)) // 2) - line.pad_right(width - cell_len(line.plain)) - elif justify == "right": - for line in self._lines: - line.rstrip() - line.truncate(width, overflow=overflow) - line.pad_left(width - cell_len(line.plain)) - elif justify == "full": - for line_index, line in enumerate(self._lines): - if line_index == len(self._lines) - 1: - break - words = line.split(" ") - words_size = sum(cell_len(word.plain) for word in words) - num_spaces = len(words) - 1 - spaces = [1 for _ in range(num_spaces)] - index = 0 - if spaces: - while words_size + num_spaces < width: - spaces[len(spaces) - index - 1] += 1 - num_spaces += 1 - index = (index + 1) % len(spaces) - tokens: List[Text] = [] - for index, (word, next_word) in enumerate( - zip_longest(words, words[1:]) - ): - tokens.append(word) - if index < len(spaces): - style = word.get_style_at_offset(console, -1) - next_style = next_word.get_style_at_offset(console, 0) - space_style = style if style == next_style else line.style - tokens.append(Text(" " * spaces[index], style=space_style)) - self[line_index] = Text("").join(tokens) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/control.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/control.py deleted file mode 100644 index 84963e9dd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/control.py +++ /dev/null @@ -1,219 +0,0 @@ -import time -from typing import TYPE_CHECKING, Callable, Dict, Iterable, List, Union, Final - -from .segment import ControlCode, ControlType, Segment - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - -STRIP_CONTROL_CODES: Final = [ - 7, # Bell - 8, # Backspace - 11, # Vertical tab - 12, # Form feed - 13, # Carriage return -] -_CONTROL_STRIP_TRANSLATE: Final = { - _codepoint: None for _codepoint in STRIP_CONTROL_CODES -} - -CONTROL_ESCAPE: Final = { - 7: "\\a", - 8: "\\b", - 11: "\\v", - 12: "\\f", - 13: "\\r", -} - -CONTROL_CODES_FORMAT: Dict[int, Callable[..., str]] = { - ControlType.BELL: lambda: "\x07", - ControlType.CARRIAGE_RETURN: lambda: "\r", - ControlType.HOME: lambda: "\x1b[H", - ControlType.CLEAR: lambda: "\x1b[2J", - ControlType.ENABLE_ALT_SCREEN: lambda: "\x1b[?1049h", - ControlType.DISABLE_ALT_SCREEN: lambda: "\x1b[?1049l", - ControlType.SHOW_CURSOR: lambda: "\x1b[?25h", - ControlType.HIDE_CURSOR: lambda: "\x1b[?25l", - ControlType.CURSOR_UP: lambda param: f"\x1b[{param}A", - ControlType.CURSOR_DOWN: lambda param: f"\x1b[{param}B", - ControlType.CURSOR_FORWARD: lambda param: f"\x1b[{param}C", - ControlType.CURSOR_BACKWARD: lambda param: f"\x1b[{param}D", - ControlType.CURSOR_MOVE_TO_COLUMN: lambda param: f"\x1b[{param+1}G", - ControlType.ERASE_IN_LINE: lambda param: f"\x1b[{param}K", - ControlType.CURSOR_MOVE_TO: lambda x, y: f"\x1b[{y+1};{x+1}H", - ControlType.SET_WINDOW_TITLE: lambda title: f"\x1b]0;{title}\x07", -} - - -class Control: - """A renderable that inserts a control code (non printable but may move cursor). - - Args: - *codes (str): Positional arguments are either a :class:`~rich.segment.ControlType` enum or a - tuple of ControlType and an integer parameter - """ - - __slots__ = ["segment"] - - def __init__(self, *codes: Union[ControlType, ControlCode]) -> None: - control_codes: List[ControlCode] = [ - (code,) if isinstance(code, ControlType) else code for code in codes - ] - _format_map = CONTROL_CODES_FORMAT - rendered_codes = "".join( - _format_map[code](*parameters) for code, *parameters in control_codes - ) - self.segment = Segment(rendered_codes, None, control_codes) - - @classmethod - def bell(cls) -> "Control": - """Ring the 'bell'.""" - return cls(ControlType.BELL) - - @classmethod - def home(cls) -> "Control": - """Move cursor to 'home' position.""" - return cls(ControlType.HOME) - - @classmethod - def move(cls, x: int = 0, y: int = 0) -> "Control": - """Move cursor relative to current position. - - Args: - x (int): X offset. - y (int): Y offset. - - Returns: - ~Control: Control object. - - """ - - def get_codes() -> Iterable[ControlCode]: - control = ControlType - if x: - yield ( - control.CURSOR_FORWARD if x > 0 else control.CURSOR_BACKWARD, - abs(x), - ) - if y: - yield ( - control.CURSOR_DOWN if y > 0 else control.CURSOR_UP, - abs(y), - ) - - control = cls(*get_codes()) - return control - - @classmethod - def move_to_column(cls, x: int, y: int = 0) -> "Control": - """Move to the given column, optionally add offset to row. - - Returns: - x (int): absolute x (column) - y (int): optional y offset (row) - - Returns: - ~Control: Control object. - """ - - return ( - cls( - (ControlType.CURSOR_MOVE_TO_COLUMN, x), - ( - ControlType.CURSOR_DOWN if y > 0 else ControlType.CURSOR_UP, - abs(y), - ), - ) - if y - else cls((ControlType.CURSOR_MOVE_TO_COLUMN, x)) - ) - - @classmethod - def move_to(cls, x: int, y: int) -> "Control": - """Move cursor to absolute position. - - Args: - x (int): x offset (column) - y (int): y offset (row) - - Returns: - ~Control: Control object. - """ - return cls((ControlType.CURSOR_MOVE_TO, x, y)) - - @classmethod - def clear(cls) -> "Control": - """Clear the screen.""" - return cls(ControlType.CLEAR) - - @classmethod - def show_cursor(cls, show: bool) -> "Control": - """Show or hide the cursor.""" - return cls(ControlType.SHOW_CURSOR if show else ControlType.HIDE_CURSOR) - - @classmethod - def alt_screen(cls, enable: bool) -> "Control": - """Enable or disable alt screen.""" - if enable: - return cls(ControlType.ENABLE_ALT_SCREEN, ControlType.HOME) - else: - return cls(ControlType.DISABLE_ALT_SCREEN) - - @classmethod - def title(cls, title: str) -> "Control": - """Set the terminal window title - - Args: - title (str): The new terminal window title - """ - return cls((ControlType.SET_WINDOW_TITLE, title)) - - def __str__(self) -> str: - return self.segment.text - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.segment.text: - yield self.segment - - -def strip_control_codes( - text: str, _translate_table: Dict[int, None] = _CONTROL_STRIP_TRANSLATE -) -> str: - """Remove control codes from text. - - Args: - text (str): A string possibly contain control codes. - - Returns: - str: String with control codes removed. - """ - return text.translate(_translate_table) - - -def escape_control_codes( - text: str, - _translate_table: Dict[int, str] = CONTROL_ESCAPE, -) -> str: - """Replace control codes with their "escaped" equivalent in the given text. - (e.g. "\b" becomes "\\b") - - Args: - text (str): A string possibly containing control codes. - - Returns: - str: String with control codes replaced with their escaped version. - """ - return text.translate(_translate_table) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - console = Console() - console.print("Look at the title of your terminal window ^") - # console.print(Control((ControlType.SET_WINDOW_TITLE, "Hello, world!"))) - for i in range(10): - console.set_window_title("🚀 Loading" + "." * i) - time.sleep(0.5) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/default_styles.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/default_styles.py deleted file mode 100644 index 61797bf31..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/default_styles.py +++ /dev/null @@ -1,193 +0,0 @@ -from typing import Dict - -from .style import Style - -DEFAULT_STYLES: Dict[str, Style] = { - "none": Style.null(), - "reset": Style( - color="default", - bgcolor="default", - dim=False, - bold=False, - italic=False, - underline=False, - blink=False, - blink2=False, - reverse=False, - conceal=False, - strike=False, - ), - "dim": Style(dim=True), - "bright": Style(dim=False), - "bold": Style(bold=True), - "strong": Style(bold=True), - "code": Style(reverse=True, bold=True), - "italic": Style(italic=True), - "emphasize": Style(italic=True), - "underline": Style(underline=True), - "blink": Style(blink=True), - "blink2": Style(blink2=True), - "reverse": Style(reverse=True), - "strike": Style(strike=True), - "black": Style(color="black"), - "red": Style(color="red"), - "green": Style(color="green"), - "yellow": Style(color="yellow"), - "magenta": Style(color="magenta"), - "cyan": Style(color="cyan"), - "white": Style(color="white"), - "inspect.attr": Style(color="yellow", italic=True), - "inspect.attr.dunder": Style(color="yellow", italic=True, dim=True), - "inspect.callable": Style(bold=True, color="red"), - "inspect.async_def": Style(italic=True, color="bright_cyan"), - "inspect.def": Style(italic=True, color="bright_cyan"), - "inspect.class": Style(italic=True, color="bright_cyan"), - "inspect.error": Style(bold=True, color="red"), - "inspect.equals": Style(), - "inspect.help": Style(color="cyan"), - "inspect.doc": Style(dim=True), - "inspect.value.border": Style(color="green"), - "live.ellipsis": Style(bold=True, color="red"), - "layout.tree.row": Style(dim=False, color="red"), - "layout.tree.column": Style(dim=False, color="blue"), - "logging.keyword": Style(bold=True, color="yellow"), - "logging.level.notset": Style(dim=True), - "logging.level.debug": Style(color="green"), - "logging.level.info": Style(color="blue"), - "logging.level.warning": Style(color="yellow"), - "logging.level.error": Style(color="red", bold=True), - "logging.level.critical": Style(color="red", bold=True, reverse=True), - "log.level": Style.null(), - "log.time": Style(color="cyan", dim=True), - "log.message": Style.null(), - "log.path": Style(dim=True), - "repr.ellipsis": Style(color="yellow"), - "repr.indent": Style(color="green", dim=True), - "repr.error": Style(color="red", bold=True), - "repr.str": Style(color="green", italic=False, bold=False), - "repr.brace": Style(bold=True), - "repr.comma": Style(bold=True), - "repr.ipv4": Style(bold=True, color="bright_green"), - "repr.ipv6": Style(bold=True, color="bright_green"), - "repr.eui48": Style(bold=True, color="bright_green"), - "repr.eui64": Style(bold=True, color="bright_green"), - "repr.tag_start": Style(bold=True), - "repr.tag_name": Style(color="bright_magenta", bold=True), - "repr.tag_contents": Style(color="default"), - "repr.tag_end": Style(bold=True), - "repr.attrib_name": Style(color="yellow", italic=False), - "repr.attrib_equal": Style(bold=True), - "repr.attrib_value": Style(color="magenta", italic=False), - "repr.number": Style(color="cyan", bold=True, italic=False), - "repr.number_complex": Style(color="cyan", bold=True, italic=False), # same - "repr.bool_true": Style(color="bright_green", italic=True), - "repr.bool_false": Style(color="bright_red", italic=True), - "repr.none": Style(color="magenta", italic=True), - "repr.url": Style(underline=True, color="bright_blue", italic=False, bold=False), - "repr.uuid": Style(color="bright_yellow", bold=False), - "repr.call": Style(color="magenta", bold=True), - "repr.path": Style(color="magenta"), - "repr.filename": Style(color="bright_magenta"), - "rule.line": Style(color="bright_green"), - "rule.text": Style.null(), - "json.brace": Style(bold=True), - "json.bool_true": Style(color="bright_green", italic=True), - "json.bool_false": Style(color="bright_red", italic=True), - "json.null": Style(color="magenta", italic=True), - "json.number": Style(color="cyan", bold=True, italic=False), - "json.str": Style(color="green", italic=False, bold=False), - "json.key": Style(color="blue", bold=True), - "prompt": Style.null(), - "prompt.choices": Style(color="magenta", bold=True), - "prompt.default": Style(color="cyan", bold=True), - "prompt.invalid": Style(color="red"), - "prompt.invalid.choice": Style(color="red"), - "pretty": Style.null(), - "scope.border": Style(color="blue"), - "scope.key": Style(color="yellow", italic=True), - "scope.key.special": Style(color="yellow", italic=True, dim=True), - "scope.equals": Style(color="red"), - "table.header": Style(bold=True), - "table.footer": Style(bold=True), - "table.cell": Style.null(), - "table.title": Style(italic=True), - "table.caption": Style(italic=True, dim=True), - "traceback.error": Style(color="red", italic=True), - "traceback.border.syntax_error": Style(color="bright_red"), - "traceback.border": Style(color="red"), - "traceback.text": Style.null(), - "traceback.title": Style(color="red", bold=True), - "traceback.exc_type": Style(color="bright_red", bold=True), - "traceback.exc_value": Style.null(), - "traceback.offset": Style(color="bright_red", bold=True), - "traceback.error_range": Style(underline=True, bold=True), - "traceback.note": Style(color="green", bold=True), - "traceback.group.border": Style(color="magenta"), - "bar.back": Style(color="grey23"), - "bar.complete": Style(color="rgb(249,38,114)"), - "bar.finished": Style(color="rgb(114,156,31)"), - "bar.pulse": Style(color="rgb(249,38,114)"), - "progress.description": Style.null(), - "progress.filesize": Style(color="green"), - "progress.filesize.total": Style(color="green"), - "progress.download": Style(color="green"), - "progress.elapsed": Style(color="yellow"), - "progress.percentage": Style(color="magenta"), - "progress.remaining": Style(color="cyan"), - "progress.data.speed": Style(color="red"), - "progress.spinner": Style(color="green"), - "status.spinner": Style(color="green"), - "tree": Style(), - "tree.line": Style(), - "markdown.paragraph": Style(), - "markdown.text": Style(), - "markdown.em": Style(italic=True), - "markdown.emph": Style(italic=True), # For commonmark backwards compatibility - "markdown.strong": Style(bold=True), - "markdown.code": Style(bold=True, color="cyan", bgcolor="black"), - "markdown.code_block": Style(color="cyan", bgcolor="black"), - "markdown.block_quote": Style(color="magenta"), - "markdown.list": Style(color="cyan"), - "markdown.item": Style(), - "markdown.item.bullet": Style(color="yellow", bold=True), - "markdown.item.number": Style(color="yellow", bold=True), - "markdown.hr": Style(color="yellow"), - "markdown.h1.border": Style(), - "markdown.h1": Style(bold=True), - "markdown.h2": Style(bold=True, underline=True), - "markdown.h3": Style(bold=True), - "markdown.h4": Style(bold=True, dim=True), - "markdown.h5": Style(underline=True), - "markdown.h6": Style(italic=True), - "markdown.h7": Style(italic=True, dim=True), - "markdown.link": Style(color="bright_blue"), - "markdown.link_url": Style(color="blue", underline=True), - "markdown.s": Style(strike=True), - "iso8601.date": Style(color="blue"), - "iso8601.time": Style(color="magenta"), - "iso8601.timezone": Style(color="yellow"), -} - - -if __name__ == "__main__": # pragma: no cover - import argparse - import io - - from pip._vendor.rich.console import Console - from pip._vendor.rich.table import Table - from pip._vendor.rich.text import Text - - parser = argparse.ArgumentParser() - parser.add_argument("--html", action="store_true", help="Export as HTML table") - args = parser.parse_args() - html: bool = args.html - console = Console(record=True, width=70, file=io.StringIO()) if html else Console() - - table = Table("Name", "Styling") - - for style_name, style in DEFAULT_STYLES.items(): - table.add_row(Text(style_name, style=style), str(style)) - - console.print(table) - if html: - print(console.export_html(inline_styles=True)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/diagnose.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/diagnose.py deleted file mode 100644 index 92893b32c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/diagnose.py +++ /dev/null @@ -1,39 +0,0 @@ -import os -import platform - -from pip._vendor.rich import inspect -from pip._vendor.rich.console import Console, get_windows_console_features -from pip._vendor.rich.panel import Panel -from pip._vendor.rich.pretty import Pretty - - -def report() -> None: # pragma: no cover - """Print a report to the terminal with debugging information""" - console = Console() - inspect(console) - features = get_windows_console_features() - inspect(features) - - env_names = ( - "CLICOLOR", - "COLORTERM", - "COLUMNS", - "JPY_PARENT_PID", - "JUPYTER_COLUMNS", - "JUPYTER_LINES", - "LINES", - "NO_COLOR", - "TERM_PROGRAM", - "TERM", - "TTY_COMPATIBLE", - "TTY_INTERACTIVE", - "VSCODE_VERBOSE_LOGGING", - ) - env = {name: os.getenv(name) for name in env_names} - console.print(Panel.fit((Pretty(env)), title="[b]Environment Variables")) - - console.print(f'platform="{platform.system()}"') - - -if __name__ == "__main__": # pragma: no cover - report() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/emoji.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/emoji.py deleted file mode 100644 index 4a667edde..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/emoji.py +++ /dev/null @@ -1,91 +0,0 @@ -import sys -from typing import TYPE_CHECKING, Optional, Union, Literal - -from .jupyter import JupyterMixin -from .segment import Segment -from .style import Style -from ._emoji_codes import EMOJI -from ._emoji_replace import _emoji_replace - - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - - -EmojiVariant = Literal["emoji", "text"] - - -class NoEmoji(Exception): - """No emoji by that name.""" - - -class Emoji(JupyterMixin): - __slots__ = ["name", "style", "_char", "variant"] - - VARIANTS = {"text": "\uFE0E", "emoji": "\uFE0F"} - - def __init__( - self, - name: str, - style: Union[str, Style] = "none", - variant: Optional[EmojiVariant] = None, - ) -> None: - """A single emoji character. - - Args: - name (str): Name of emoji. - style (Union[str, Style], optional): Optional style. Defaults to None. - - Raises: - NoEmoji: If the emoji doesn't exist. - """ - self.name = name - self.style = style - self.variant = variant - try: - self._char = EMOJI[name] - except KeyError: - raise NoEmoji(f"No emoji called {name!r}") - if variant is not None: - self._char += self.VARIANTS.get(variant, "") - - @classmethod - def replace(cls, text: str) -> str: - """Replace emoji markup with corresponding unicode characters. - - Args: - text (str): A string with emojis codes, e.g. "Hello :smiley:!" - - Returns: - str: A string with emoji codes replaces with actual emoji. - """ - return _emoji_replace(text) - - def __repr__(self) -> str: - return f"<emoji {self.name!r}>" - - def __str__(self) -> str: - return self._char - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - yield Segment(self._char, console.get_style(self.style)) - - -if __name__ == "__main__": # pragma: no cover - import sys - - from pip._vendor.rich.columns import Columns - from pip._vendor.rich.console import Console - - console = Console(record=True) - - columns = Columns( - (f":{name}: {name}" for name in sorted(EMOJI.keys()) if "\u200D" not in name), - column_first=True, - ) - - console.print(columns) - if len(sys.argv) > 1: - console.save_html(sys.argv[1]) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/errors.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/errors.py deleted file mode 100644 index 0bcbe53ef..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/errors.py +++ /dev/null @@ -1,34 +0,0 @@ -class ConsoleError(Exception): - """An error in console operation.""" - - -class StyleError(Exception): - """An error in styles.""" - - -class StyleSyntaxError(ConsoleError): - """Style was badly formatted.""" - - -class MissingStyle(StyleError): - """No such style.""" - - -class StyleStackError(ConsoleError): - """Style stack is invalid.""" - - -class NotRenderableError(ConsoleError): - """Object is not renderable.""" - - -class MarkupError(ConsoleError): - """Markup was badly formatted.""" - - -class LiveError(ConsoleError): - """Error related to Live display.""" - - -class NoAltScreen(ConsoleError): - """Alt screen mode was required.""" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/file_proxy.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/file_proxy.py deleted file mode 100644 index 4b0b0da6c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/file_proxy.py +++ /dev/null @@ -1,57 +0,0 @@ -import io -from typing import IO, TYPE_CHECKING, Any, List - -from .ansi import AnsiDecoder -from .text import Text - -if TYPE_CHECKING: - from .console import Console - - -class FileProxy(io.TextIOBase): - """Wraps a file (e.g. sys.stdout) and redirects writes to a console.""" - - def __init__(self, console: "Console", file: IO[str]) -> None: - self.__console = console - self.__file = file - self.__buffer: List[str] = [] - self.__ansi_decoder = AnsiDecoder() - - @property - def rich_proxied_file(self) -> IO[str]: - """Get proxied file.""" - return self.__file - - def __getattr__(self, name: str) -> Any: - return getattr(self.__file, name) - - def write(self, text: str) -> int: - if not isinstance(text, str): - raise TypeError(f"write() argument must be str, not {type(text).__name__}") - buffer = self.__buffer - lines: List[str] = [] - while text: - line, new_line, text = text.partition("\n") - if new_line: - lines.append("".join(buffer) + line) - buffer.clear() - else: - buffer.append(line) - break - if lines: - console = self.__console - with console: - output = Text("\n").join( - self.__ansi_decoder.decode_line(line) for line in lines - ) - console.print(output) - return len(text) - - def flush(self) -> None: - output = "".join(self.__buffer) - if output: - self.__console.print(output) - del self.__buffer[:] - - def fileno(self) -> int: - return self.__file.fileno() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/filesize.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/filesize.py deleted file mode 100644 index 83bc9118d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/filesize.py +++ /dev/null @@ -1,88 +0,0 @@ -"""Functions for reporting filesizes. Borrowed from https://github.com/PyFilesystem/pyfilesystem2 - -The functions declared in this module should cover the different -use cases needed to generate a string representation of a file size -using several different units. Since there are many standards regarding -file size units, three different functions have been implemented. - -See Also: - * `Wikipedia: Binary prefix <https://en.wikipedia.org/wiki/Binary_prefix>`_ - -""" - -__all__ = ["decimal"] - -from typing import Iterable, List, Optional, Tuple - - -def _to_str( - size: int, - suffixes: Iterable[str], - base: int, - *, - precision: Optional[int] = 1, - separator: Optional[str] = " ", -) -> str: - if size == 1: - return "1 byte" - elif size < base: - return f"{size:,} bytes" - - for i, suffix in enumerate(suffixes, 2): # noqa: B007 - unit = base**i - if size < unit: - break - return "{:,.{precision}f}{separator}{}".format( - (base * size / unit), - suffix, - precision=precision, - separator=separator, - ) - - -def pick_unit_and_suffix(size: int, suffixes: List[str], base: int) -> Tuple[int, str]: - """Pick a suffix and base for the given size.""" - for i, suffix in enumerate(suffixes): - unit = base**i - if size < unit * base: - break - return unit, suffix - - -def decimal( - size: int, - *, - precision: Optional[int] = 1, - separator: Optional[str] = " ", -) -> str: - """Convert a filesize in to a string (powers of 1000, SI prefixes). - - In this convention, ``1000 B = 1 kB``. - - This is typically the format used to advertise the storage - capacity of USB flash drives and the like (*256 MB* meaning - actually a storage capacity of more than *256 000 000 B*), - or used by **Mac OS X** since v10.6 to report file sizes. - - Arguments: - int (size): A file size. - int (precision): The number of decimal places to include (default = 1). - str (separator): The string to separate the value from the units (default = " "). - - Returns: - `str`: A string containing a abbreviated file size and units. - - Example: - >>> filesize.decimal(30000) - '30.0 kB' - >>> filesize.decimal(30000, precision=2, separator="") - '30.00kB' - - """ - return _to_str( - size, - ("kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"), - 1000, - precision=precision, - separator=separator, - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/highlighter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/highlighter.py deleted file mode 100644 index e4c462e2b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/highlighter.py +++ /dev/null @@ -1,232 +0,0 @@ -import re -from abc import ABC, abstractmethod -from typing import List, Union - -from .text import Span, Text - - -def _combine_regex(*regexes: str) -> str: - """Combine a number of regexes in to a single regex. - - Returns: - str: New regex with all regexes ORed together. - """ - return "|".join(regexes) - - -class Highlighter(ABC): - """Abstract base class for highlighters.""" - - def __call__(self, text: Union[str, Text]) -> Text: - """Highlight a str or Text instance. - - Args: - text (Union[str, ~Text]): Text to highlight. - - Raises: - TypeError: If not called with text or str. - - Returns: - Text: A test instance with highlighting applied. - """ - if isinstance(text, str): - highlight_text = Text(text) - elif isinstance(text, Text): - highlight_text = text.copy() - else: - raise TypeError(f"str or Text instance required, not {text!r}") - self.highlight(highlight_text) - return highlight_text - - @abstractmethod - def highlight(self, text: Text) -> None: - """Apply highlighting in place to text. - - Args: - text (~Text): A text object highlight. - """ - - -class NullHighlighter(Highlighter): - """A highlighter object that doesn't highlight. - - May be used to disable highlighting entirely. - - """ - - def highlight(self, text: Text) -> None: - """Nothing to do""" - - -class RegexHighlighter(Highlighter): - """Applies highlighting from a list of regular expressions.""" - - highlights: List[str] = [] - base_style: str = "" - - def highlight(self, text: Text) -> None: - """Highlight :class:`rich.text.Text` using regular expressions. - - Args: - text (~Text): Text to highlighted. - - """ - - highlight_regex = text.highlight_regex - for re_highlight in self.highlights: - highlight_regex(re_highlight, style_prefix=self.base_style) - - -class ReprHighlighter(RegexHighlighter): - """Highlights the text typically produced from ``__repr__`` methods.""" - - base_style = "repr." - highlights = [ - r"(?P<tag_start><)(?P<tag_name>[-\w.:|]*)(?P<tag_contents>[\w\W]*)(?P<tag_end>>)", - r'(?P<attrib_name>[\w_]{1,50})=(?P<attrib_value>"?[\w_]+"?)?', - r"(?P<brace>[][{}()])", - _combine_regex( - r"(?P<ipv4>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})", - r"(?P<ipv6>([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})", - r"(?P<eui64>(?:[0-9A-Fa-f]{1,2}-){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){7}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){3}[0-9A-Fa-f]{4})", - r"(?P<eui48>(?:[0-9A-Fa-f]{1,2}-){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{1,2}:){5}[0-9A-Fa-f]{1,2}|(?:[0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})", - r"(?P<uuid>[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})", - r"(?P<call>[\w.]*?)\(", - r"\b(?P<bool_true>True)\b|\b(?P<bool_false>False)\b|\b(?P<none>None)\b", - r"(?P<ellipsis>\.\.\.)", - r"(?P<number_complex>(?<!\w)(?:\-?[0-9]+\.?[0-9]*(?:e[-+]?\d+?)?)(?:[-+](?:[0-9]+\.?[0-9]*(?:e[-+]?\d+)?))?j)", - r"(?P<number>(?<!\w)\-?[0-9]+\.?[0-9]*(e[-+]?\d+?)?\b|0x[0-9a-fA-F]*)", - r"(?P<path>\B(/[-\w._+]+)*\/)(?P<filename>[-\w._+]*)?", - r"(?<![\\\w])(?P<str>b?'''.*?(?<!\\)'''|b?'.*?(?<!\\)'|b?\"\"\".*?(?<!\\)\"\"\"|b?\".*?(?<!\\)\")", - r"(?P<url>(file|https|http|ws|wss)://[-0-9a-zA-Z$_+!`(),.?/;:&=%#~@]*)", - ), - ] - - -class JSONHighlighter(RegexHighlighter): - """Highlights JSON""" - - # Captures the start and end of JSON strings, handling escaped quotes - JSON_STR = r"(?<![\\\w])(?P<str>b?\".*?(?<!\\)\")" - JSON_WHITESPACE = {" ", "\n", "\r", "\t"} - - base_style = "json." - highlights = [ - _combine_regex( - r"(?P<brace>[\{\[\(\)\]\}])", - r"\b(?P<bool_true>true)\b|\b(?P<bool_false>false)\b|\b(?P<null>null)\b", - r"(?P<number>(?<!\w)\-?[0-9]+\.?[0-9]*(e[\-\+]?\d+?)?\b|0x[0-9a-fA-F]*)", - JSON_STR, - ), - ] - - def highlight(self, text: Text) -> None: - super().highlight(text) - - # Additional work to handle highlighting JSON keys - plain = text.plain - append = text.spans.append - whitespace = self.JSON_WHITESPACE - for match in re.finditer(self.JSON_STR, plain): - start, end = match.span() - cursor = end - while cursor < len(plain): - char = plain[cursor] - cursor += 1 - if char == ":": - append(Span(start, end, "json.key")) - elif char in whitespace: - continue - break - - -class ISO8601Highlighter(RegexHighlighter): - """Highlights the ISO8601 date time strings. - Regex reference: https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html - """ - - base_style = "iso8601." - highlights = [ - # - # Dates - # - # Calendar month (e.g. 2008-08). The hyphen is required - r"^(?P<year>[0-9]{4})-(?P<month>1[0-2]|0[1-9])$", - # Calendar date w/o hyphens (e.g. 20080830) - r"^(?P<date>(?P<year>[0-9]{4})(?P<month>1[0-2]|0[1-9])(?P<day>3[01]|0[1-9]|[12][0-9]))$", - # Ordinal date (e.g. 2008-243). The hyphen is optional - r"^(?P<date>(?P<year>[0-9]{4})-?(?P<day>36[0-6]|3[0-5][0-9]|[12][0-9]{2}|0[1-9][0-9]|00[1-9]))$", - # - # Weeks - # - # Week of the year (e.g., 2008-W35). The hyphen is optional - r"^(?P<date>(?P<year>[0-9]{4})-?W(?P<week>5[0-3]|[1-4][0-9]|0[1-9]))$", - # Week date (e.g., 2008-W35-6). The hyphens are optional - r"^(?P<date>(?P<year>[0-9]{4})-?W(?P<week>5[0-3]|[1-4][0-9]|0[1-9])-?(?P<day>[1-7]))$", - # - # Times - # - # Hours and minutes (e.g., 17:21). The colon is optional - r"^(?P<time>(?P<hour>2[0-3]|[01][0-9]):?(?P<minute>[0-5][0-9]))$", - # Hours, minutes, and seconds w/o colons (e.g., 172159) - r"^(?P<time>(?P<hour>2[0-3]|[01][0-9])(?P<minute>[0-5][0-9])(?P<second>[0-5][0-9]))$", - # Time zone designator (e.g., Z, +07 or +07:00). The colons and the minutes are optional - r"^(?P<timezone>(Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?))$", - # Hours, minutes, and seconds with time zone designator (e.g., 17:21:59+07:00). - # All the colons are optional. The minutes in the time zone designator are also optional - r"^(?P<time>(?P<hour>2[0-3]|[01][0-9])(?P<minute>[0-5][0-9])(?P<second>[0-5][0-9]))(?P<timezone>Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)$", - # - # Date and Time - # - # Calendar date with hours, minutes, and seconds (e.g., 2008-08-30 17:21:59 or 20080830 172159). - # A space is required between the date and the time. The hyphens and colons are optional. - # This regex matches dates and times that specify some hyphens or colons but omit others. - # This does not follow ISO 8601 - r"^(?P<date>(?P<year>[0-9]{4})(?P<hyphen>-)?(?P<month>1[0-2]|0[1-9])(?(hyphen)-)(?P<day>3[01]|0[1-9]|[12][0-9])) (?P<time>(?P<hour>2[0-3]|[01][0-9])(?(hyphen):)(?P<minute>[0-5][0-9])(?(hyphen):)(?P<second>[0-5][0-9]))$", - # - # XML Schema dates and times - # - # Date, with optional time zone (e.g., 2008-08-30 or 2008-08-30+07:00). - # Hyphens are required. This is the XML Schema 'date' type - r"^(?P<date>(?P<year>-?(?:[1-9][0-9]*)?[0-9]{4})-(?P<month>1[0-2]|0[1-9])-(?P<day>3[01]|0[1-9]|[12][0-9]))(?P<timezone>Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - # Time, with optional fractional seconds and time zone (e.g., 01:45:36 or 01:45:36.123+07:00). - # There is no limit on the number of digits for the fractional seconds. This is the XML Schema 'time' type - r"^(?P<time>(?P<hour>2[0-3]|[01][0-9]):(?P<minute>[0-5][0-9]):(?P<second>[0-5][0-9])(?P<frac>\.[0-9]+)?)(?P<timezone>Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - # Date and time, with optional fractional seconds and time zone (e.g., 2008-08-30T01:45:36 or 2008-08-30T01:45:36.123Z). - # This is the XML Schema 'dateTime' type - r"^(?P<date>(?P<year>-?(?:[1-9][0-9]*)?[0-9]{4})-(?P<month>1[0-2]|0[1-9])-(?P<day>3[01]|0[1-9]|[12][0-9]))T(?P<time>(?P<hour>2[0-3]|[01][0-9]):(?P<minute>[0-5][0-9]):(?P<second>[0-5][0-9])(?P<ms>\.[0-9]+)?)(?P<timezone>Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - ] - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - - console = Console() - console.print("[bold green]hello world![/bold green]") - console.print("'[bold green]hello world![/bold green]'") - - console.print(" /foo") - console.print("/foo/") - console.print("/foo/bar") - console.print("foo/bar/baz") - - console.print("/foo/bar/baz?foo=bar+egg&egg=baz") - console.print("/foo/bar/baz/") - console.print("/foo/bar/baz/egg") - console.print("/foo/bar/baz/egg.py") - console.print("/foo/bar/baz/egg.py word") - console.print(" /foo/bar/baz/egg.py word") - console.print("foo /foo/bar/baz/egg.py word") - console.print("foo /foo/bar/ba._++z/egg+.py word") - console.print("https://example.org?foo=bar#header") - - console.print(1234567.34) - console.print(1 / 2) - console.print(-1 / 123123123123) - - console.print( - "127.0.1.1 bar 192.168.1.4 2001:0db8:85a3:0000:0000:8a2e:0370:7334 foo" - ) - import json - - console.print_json(json.dumps(obj={"name": "apple", "count": 1}), indent=None) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/json.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/json.py deleted file mode 100644 index 4087c79bb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/json.py +++ /dev/null @@ -1,139 +0,0 @@ -from pathlib import Path -from json import loads, dumps -from typing import Any, Callable, Optional, Union - -from .text import Text -from .highlighter import JSONHighlighter, NullHighlighter - - -class JSON: - """A renderable which pretty prints JSON. - - Args: - json (str): JSON encoded data. - indent (Union[None, int, str], optional): Number of characters to indent by. Defaults to 2. - highlight (bool, optional): Enable highlighting. Defaults to True. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - """ - - def __init__( - self, - json: str, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, - ) -> None: - data = loads(json) - json = dumps( - data, - indent=indent, - skipkeys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - highlighter = JSONHighlighter() if highlight else NullHighlighter() - self.text = highlighter(json) - self.text.no_wrap = True - self.text.overflow = None - - @classmethod - def from_data( - cls, - data: Any, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, - ) -> "JSON": - """Encodes a JSON object from arbitrary data. - - Args: - data (Any): An object that may be encoded in to JSON - indent (Union[None, int, str], optional): Number of characters to indent by. Defaults to 2. - highlight (bool, optional): Enable highlighting. Defaults to True. - default (Callable, optional): Optional callable which will be called for objects that cannot be serialized. Defaults to None. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - - Returns: - JSON: New JSON object from the given data. - """ - json_instance: "JSON" = cls.__new__(cls) - json = dumps( - data, - indent=indent, - skipkeys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - highlighter = JSONHighlighter() if highlight else NullHighlighter() - json_instance.text = highlighter(json) - json_instance.text.no_wrap = True - json_instance.text.overflow = None - return json_instance - - def __rich__(self) -> Text: - return self.text - - -if __name__ == "__main__": - import argparse - import sys - - parser = argparse.ArgumentParser(description="Pretty print json") - parser.add_argument( - "path", - metavar="PATH", - help="path to file, or - for stdin", - ) - parser.add_argument( - "-i", - "--indent", - metavar="SPACES", - type=int, - help="Number of spaces in an indent", - default=2, - ) - args = parser.parse_args() - - from pip._vendor.rich.console import Console - - console = Console() - error_console = Console(stderr=True) - - try: - if args.path == "-": - json_data = sys.stdin.read() - else: - json_data = Path(args.path).read_text() - except Exception as error: - error_console.print(f"Unable to read {args.path!r}; {error}") - sys.exit(-1) - - console.print(JSON(json_data, indent=args.indent), soft_wrap=True) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/jupyter.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/jupyter.py deleted file mode 100644 index 22f4d716a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/jupyter.py +++ /dev/null @@ -1,101 +0,0 @@ -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Sequence - -if TYPE_CHECKING: - from pip._vendor.rich.console import ConsoleRenderable - -from . import get_console -from .segment import Segment -from .terminal_theme import DEFAULT_TERMINAL_THEME - -if TYPE_CHECKING: - from pip._vendor.rich.console import ConsoleRenderable - -JUPYTER_HTML_FORMAT = """\ -<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">{code}</pre> -""" - - -class JupyterRenderable: - """A shim to write html to Jupyter notebook.""" - - def __init__(self, html: str, text: str) -> None: - self.html = html - self.text = text - - def _repr_mimebundle_( - self, include: Sequence[str], exclude: Sequence[str], **kwargs: Any - ) -> Dict[str, str]: - data = {"text/plain": self.text, "text/html": self.html} - if include: - data = {k: v for (k, v) in data.items() if k in include} - if exclude: - data = {k: v for (k, v) in data.items() if k not in exclude} - return data - - -class JupyterMixin: - """Add to an Rich renderable to make it render in Jupyter notebook.""" - - __slots__ = () - - def _repr_mimebundle_( - self: "ConsoleRenderable", - include: Sequence[str], - exclude: Sequence[str], - **kwargs: Any, - ) -> Dict[str, str]: - console = get_console() - segments = list(console.render(self, console.options)) - html = _render_segments(segments) - text = console._render_buffer(segments) - data = {"text/plain": text, "text/html": html} - if include: - data = {k: v for (k, v) in data.items() if k in include} - if exclude: - data = {k: v for (k, v) in data.items() if k not in exclude} - return data - - -def _render_segments(segments: Iterable[Segment]) -> str: - def escape(text: str) -> str: - """Escape html.""" - return text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;") - - fragments: List[str] = [] - append_fragment = fragments.append - theme = DEFAULT_TERMINAL_THEME - for text, style, control in Segment.simplify(segments): - if control: - continue - text = escape(text) - if style: - rule = style.get_html_style(theme) - text = f'<span style="{rule}">{text}</span>' if rule else text - if style.link: - text = f'<a href="{style.link}" target="_blank">{text}</a>' - append_fragment(text) - - code = "".join(fragments) - html = JUPYTER_HTML_FORMAT.format(code=code) - - return html - - -def display(segments: Iterable[Segment], text: str) -> None: - """Render segments to Jupyter.""" - html = _render_segments(segments) - jupyter_renderable = JupyterRenderable(html, text) - try: - from IPython.display import display as ipython_display - - ipython_display(jupyter_renderable) - except ModuleNotFoundError: - # Handle the case where the Console has force_jupyter=True, - # but IPython is not installed. - pass - - -def print(*args: Any, **kwargs: Any) -> None: - """Proxy for Console print.""" - console = get_console() - return console.print(*args, **kwargs) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/layout.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/layout.py deleted file mode 100644 index a6f1a31b2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/layout.py +++ /dev/null @@ -1,442 +0,0 @@ -from abc import ABC, abstractmethod -from itertools import islice -from operator import itemgetter -from threading import RLock -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Union, -) - -from ._ratio import ratio_resolve -from .align import Align -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .highlighter import ReprHighlighter -from .panel import Panel -from .pretty import Pretty -from .region import Region -from .repr import Result, rich_repr -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from pip._vendor.rich.tree import Tree - - -class LayoutRender(NamedTuple): - """An individual layout render.""" - - region: Region - render: List[List[Segment]] - - -RegionMap = Dict["Layout", Region] -RenderMap = Dict["Layout", LayoutRender] - - -class LayoutError(Exception): - """Layout related error.""" - - -class NoSplitter(LayoutError): - """Requested splitter does not exist.""" - - -class _Placeholder: - """An internal renderable used as a Layout placeholder.""" - - highlighter = ReprHighlighter() - - def __init__(self, layout: "Layout", style: StyleType = "") -> None: - self.layout = layout - self.style = style - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = options.max_width - height = options.height or options.size.height - layout = self.layout - title = ( - f"{layout.name!r} ({width} x {height})" - if layout.name - else f"({width} x {height})" - ) - yield Panel( - Align.center(Pretty(layout), vertical="middle"), - style=self.style, - title=self.highlighter(title), - border_style="blue", - height=height, - ) - - -class Splitter(ABC): - """Base class for a splitter.""" - - name: str = "" - - @abstractmethod - def get_tree_icon(self) -> str: - """Get the icon (emoji) used in layout.tree""" - - @abstractmethod - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - """Divide a region amongst several child layouts. - - Args: - children (Sequence(Layout)): A number of child layouts. - region (Region): A rectangular region to divide. - """ - - -class RowSplitter(Splitter): - """Split a layout region in to rows.""" - - name = "row" - - def get_tree_icon(self) -> str: - return "[layout.tree.row]⬌" - - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - x, y, width, height = region - render_widths = ratio_resolve(width, children) - offset = 0 - _Region = Region - for child, child_width in zip(children, render_widths): - yield child, _Region(x + offset, y, child_width, height) - offset += child_width - - -class ColumnSplitter(Splitter): - """Split a layout region in to columns.""" - - name = "column" - - def get_tree_icon(self) -> str: - return "[layout.tree.column]⬍" - - def divide( - self, children: Sequence["Layout"], region: Region - ) -> Iterable[Tuple["Layout", Region]]: - x, y, width, height = region - render_heights = ratio_resolve(height, children) - offset = 0 - _Region = Region - for child, child_height in zip(children, render_heights): - yield child, _Region(x, y + offset, width, child_height) - offset += child_height - - -@rich_repr -class Layout: - """A renderable to divide a fixed height in to rows or columns. - - Args: - renderable (RenderableType, optional): Renderable content, or None for placeholder. Defaults to None. - name (str, optional): Optional identifier for Layout. Defaults to None. - size (int, optional): Optional fixed size of layout. Defaults to None. - minimum_size (int, optional): Minimum size of layout. Defaults to 1. - ratio (int, optional): Optional ratio for flexible layout. Defaults to 1. - visible (bool, optional): Visibility of layout. Defaults to True. - """ - - splitters = {"row": RowSplitter, "column": ColumnSplitter} - - def __init__( - self, - renderable: Optional[RenderableType] = None, - *, - name: Optional[str] = None, - size: Optional[int] = None, - minimum_size: int = 1, - ratio: int = 1, - visible: bool = True, - ) -> None: - self._renderable = renderable or _Placeholder(self) - self.size = size - self.minimum_size = minimum_size - self.ratio = ratio - self.name = name - self.visible = visible - self.splitter: Splitter = self.splitters["column"]() - self._children: List[Layout] = [] - self._render_map: RenderMap = {} - self._lock = RLock() - - def __rich_repr__(self) -> Result: - yield "name", self.name, None - yield "size", self.size, None - yield "minimum_size", self.minimum_size, 1 - yield "ratio", self.ratio, 1 - - @property - def renderable(self) -> RenderableType: - """Layout renderable.""" - return self if self._children else self._renderable - - @property - def children(self) -> List["Layout"]: - """Gets (visible) layout children.""" - return [child for child in self._children if child.visible] - - @property - def map(self) -> RenderMap: - """Get a map of the last render.""" - return self._render_map - - def get(self, name: str) -> Optional["Layout"]: - """Get a named layout, or None if it doesn't exist. - - Args: - name (str): Name of layout. - - Returns: - Optional[Layout]: Layout instance or None if no layout was found. - """ - if self.name == name: - return self - else: - for child in self._children: - named_layout = child.get(name) - if named_layout is not None: - return named_layout - return None - - def __getitem__(self, name: str) -> "Layout": - layout = self.get(name) - if layout is None: - raise KeyError(f"No layout with name {name!r}") - return layout - - @property - def tree(self) -> "Tree": - """Get a tree renderable to show layout structure.""" - from pip._vendor.rich.styled import Styled - from pip._vendor.rich.table import Table - from pip._vendor.rich.tree import Tree - - def summary(layout: "Layout") -> Table: - icon = layout.splitter.get_tree_icon() - - table = Table.grid(padding=(0, 1, 0, 0)) - - text: RenderableType = ( - Pretty(layout) if layout.visible else Styled(Pretty(layout), "dim") - ) - table.add_row(icon, text) - _summary = table - return _summary - - layout = self - tree = Tree( - summary(layout), - guide_style=f"layout.tree.{layout.splitter.name}", - highlight=True, - ) - - def recurse(tree: "Tree", layout: "Layout") -> None: - for child in layout._children: - recurse( - tree.add( - summary(child), - guide_style=f"layout.tree.{child.splitter.name}", - ), - child, - ) - - recurse(tree, self) - return tree - - def split( - self, - *layouts: Union["Layout", RenderableType], - splitter: Union[Splitter, str] = "column", - ) -> None: - """Split the layout in to multiple sub-layouts. - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - splitter (Union[Splitter, str]): Splitter instance or name of splitter. - """ - _layouts = [ - layout if isinstance(layout, Layout) else Layout(layout) - for layout in layouts - ] - try: - self.splitter = ( - splitter - if isinstance(splitter, Splitter) - else self.splitters[splitter]() - ) - except KeyError: - raise NoSplitter(f"No splitter called {splitter!r}") - self._children[:] = _layouts - - def add_split(self, *layouts: Union["Layout", RenderableType]) -> None: - """Add a new layout(s) to existing split. - - Args: - *layouts (Union[Layout, RenderableType]): Positional arguments should be renderables or (sub) Layout instances. - - """ - _layouts = ( - layout if isinstance(layout, Layout) else Layout(layout) - for layout in layouts - ) - self._children.extend(_layouts) - - def split_row(self, *layouts: Union["Layout", RenderableType]) -> None: - """Split the layout in to a row (layouts side by side). - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - """ - self.split(*layouts, splitter="row") - - def split_column(self, *layouts: Union["Layout", RenderableType]) -> None: - """Split the layout in to a column (layouts stacked on top of each other). - - Args: - *layouts (Layout): Positional arguments should be (sub) Layout instances. - """ - self.split(*layouts, splitter="column") - - def unsplit(self) -> None: - """Reset splits to initial state.""" - del self._children[:] - - def update(self, renderable: RenderableType) -> None: - """Update renderable. - - Args: - renderable (RenderableType): New renderable object. - """ - with self._lock: - self._renderable = renderable - - def refresh_screen(self, console: "Console", layout_name: str) -> None: - """Refresh a sub-layout. - - Args: - console (Console): Console instance where Layout is to be rendered. - layout_name (str): Name of layout. - """ - with self._lock: - layout = self[layout_name] - region, _lines = self._render_map[layout] - (x, y, width, height) = region - lines = console.render_lines( - layout, console.options.update_dimensions(width, height) - ) - self._render_map[layout] = LayoutRender(region, lines) - console.update_screen_lines(lines, x, y) - - def _make_region_map(self, width: int, height: int) -> RegionMap: - """Create a dict that maps layout on to Region.""" - stack: List[Tuple[Layout, Region]] = [(self, Region(0, 0, width, height))] - push = stack.append - pop = stack.pop - layout_regions: List[Tuple[Layout, Region]] = [] - append_layout_region = layout_regions.append - while stack: - append_layout_region(pop()) - layout, region = layout_regions[-1] - children = layout.children - if children: - for child_and_region in layout.splitter.divide(children, region): - push(child_and_region) - - region_map = { - layout: region - for layout, region in sorted(layout_regions, key=itemgetter(1)) - } - return region_map - - def render(self, console: Console, options: ConsoleOptions) -> RenderMap: - """Render the sub_layouts. - - Args: - console (Console): Console instance. - options (ConsoleOptions): Console options. - - Returns: - RenderMap: A dict that maps Layout on to a tuple of Region, lines - """ - render_width = options.max_width - render_height = options.height or console.height - region_map = self._make_region_map(render_width, render_height) - layout_regions = [ - (layout, region) - for layout, region in region_map.items() - if not layout.children - ] - render_map: Dict["Layout", "LayoutRender"] = {} - render_lines = console.render_lines - update_dimensions = options.update_dimensions - - for layout, region in layout_regions: - lines = render_lines( - layout.renderable, update_dimensions(region.width, region.height) - ) - render_map[layout] = LayoutRender(region, lines) - return render_map - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - with self._lock: - width = options.max_width or console.width - height = options.height or console.height - render_map = self.render(console, options.update_dimensions(width, height)) - self._render_map = render_map - layout_lines: List[List[Segment]] = [[] for _ in range(height)] - _islice = islice - for region, lines in render_map.values(): - _x, y, _layout_width, layout_height = region - for row, line in zip( - _islice(layout_lines, y, y + layout_height), lines - ): - row.extend(line) - - new_line = Segment.line() - for layout_row in layout_lines: - yield from layout_row - yield new_line - - -if __name__ == "__main__": - from pip._vendor.rich.console import Console - - console = Console() - layout = Layout() - - layout.split_column( - Layout(name="header", size=3), - Layout(ratio=1, name="main"), - Layout(size=10, name="footer"), - ) - - layout["main"].split_row(Layout(name="side"), Layout(name="body", ratio=2)) - - layout["body"].split_row(Layout(name="content", ratio=2), Layout(name="s2")) - - layout["s2"].split_column( - Layout(name="top"), Layout(name="middle"), Layout(name="bottom") - ) - - layout["side"].split_column(Layout(layout.tree, name="left1"), Layout(name="left2")) - - layout["content"].update("foo") - - console.print(layout) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live.py deleted file mode 100644 index cc3a39bd5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live.py +++ /dev/null @@ -1,400 +0,0 @@ -from __future__ import annotations - -import sys -from threading import Event, RLock, Thread -from types import TracebackType -from typing import IO, TYPE_CHECKING, Any, Callable, List, Optional, TextIO, Type, cast - -from . import get_console -from .console import Console, ConsoleRenderable, Group, RenderableType, RenderHook -from .control import Control -from .file_proxy import FileProxy -from .jupyter import JupyterMixin -from .live_render import LiveRender, VerticalOverflowMethod -from .screen import Screen -from .text import Text - -if TYPE_CHECKING: - # Can be replaced with `from typing import Self` in Python 3.11+ - from typing_extensions import Self # pragma: no cover - - -class _RefreshThread(Thread): - """A thread that calls refresh() at regular intervals.""" - - def __init__(self, live: "Live", refresh_per_second: float) -> None: - self.live = live - self.refresh_per_second = refresh_per_second - self.done = Event() - super().__init__(daemon=True) - - def stop(self) -> None: - self.done.set() - - def run(self) -> None: - while not self.done.wait(1 / self.refresh_per_second): - with self.live._lock: - if not self.done.is_set(): - self.live.refresh() - - -class Live(JupyterMixin, RenderHook): - """Renders an auto-updating live display of any given renderable. - - Args: - renderable (RenderableType, optional): The renderable to live display. Defaults to displaying nothing. - console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout. - screen (bool, optional): Enable alternate screen mode. Defaults to False. - auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()` or `update()` with refresh flag. Defaults to True - refresh_per_second (float, optional): Number of times per second to refresh the live display. Defaults to 4. - transient (bool, optional): Clear the renderable on exit (has no effect when screen=True). Defaults to False. - redirect_stdout (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True. - redirect_stderr (bool, optional): Enable redirection of stderr. Defaults to True. - vertical_overflow (VerticalOverflowMethod, optional): How to handle renderable when it is too tall for the console. Defaults to "ellipsis". - get_renderable (Callable[[], RenderableType], optional): Optional callable to get renderable. Defaults to None. - """ - - def __init__( - self, - renderable: Optional[RenderableType] = None, - *, - console: Optional[Console] = None, - screen: bool = False, - auto_refresh: bool = True, - refresh_per_second: float = 4, - transient: bool = False, - redirect_stdout: bool = True, - redirect_stderr: bool = True, - vertical_overflow: VerticalOverflowMethod = "ellipsis", - get_renderable: Optional[Callable[[], RenderableType]] = None, - ) -> None: - assert refresh_per_second > 0, "refresh_per_second must be > 0" - self._renderable = renderable - self.console = console if console is not None else get_console() - self._screen = screen - self._alt_screen = False - - self._redirect_stdout = redirect_stdout - self._redirect_stderr = redirect_stderr - self._restore_stdout: Optional[IO[str]] = None - self._restore_stderr: Optional[IO[str]] = None - - self._lock = RLock() - self.ipy_widget: Optional[Any] = None - self.auto_refresh = auto_refresh - self._started: bool = False - self.transient = True if screen else transient - - self._refresh_thread: Optional[_RefreshThread] = None - self.refresh_per_second = refresh_per_second - - self.vertical_overflow = vertical_overflow - self._get_renderable = get_renderable - self._live_render = LiveRender( - self.get_renderable(), vertical_overflow=vertical_overflow - ) - self._nested = False - - @property - def is_started(self) -> bool: - """Check if live display has been started.""" - return self._started - - def get_renderable(self) -> RenderableType: - renderable = ( - self._get_renderable() - if self._get_renderable is not None - else self._renderable - ) - return renderable or "" - - def start(self, refresh: bool = False) -> None: - """Start live rendering display. - - Args: - refresh (bool, optional): Also refresh. Defaults to False. - """ - with self._lock: - if self._started: - return - self._started = True - - if not self.console.set_live(self): - self._nested = True - return - - if self._screen: - self._alt_screen = self.console.set_alt_screen(True) - self.console.show_cursor(False) - self._enable_redirect_io() - self.console.push_render_hook(self) - if refresh: - try: - self.refresh() - except Exception: - # If refresh fails, we want to stop the redirection of sys.stderr, - # so the error stacktrace is properly displayed in the terminal. - # (or, if the code that calls Rich captures the exception and wants to display something, - # let this be displayed in the terminal). - self.stop() - raise - if self.auto_refresh: - self._refresh_thread = _RefreshThread(self, self.refresh_per_second) - self._refresh_thread.start() - - def stop(self) -> None: - """Stop live rendering display.""" - with self._lock: - if not self._started: - return - self._started = False - self.console.clear_live() - if self._nested: - if not self.transient: - self.console.print(self.renderable) - return - - if self.auto_refresh and self._refresh_thread is not None: - self._refresh_thread.stop() - self._refresh_thread = None - # allow it to fully render on the last even if overflow - self.vertical_overflow = "visible" - with self.console: - try: - if not self._alt_screen and not self.console.is_jupyter: - self.refresh() - finally: - self._disable_redirect_io() - self.console.pop_render_hook() - if not self._alt_screen and self.console.is_terminal: - self.console.line() - self.console.show_cursor(True) - if self._alt_screen: - self.console.set_alt_screen(False) - if self.transient and not self._alt_screen: - self.console.control(self._live_render.restore_cursor()) - if self.ipy_widget is not None and self.transient: - self.ipy_widget.close() # pragma: no cover - - def __enter__(self) -> Self: - self.start(refresh=self._renderable is not None) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - def _enable_redirect_io(self) -> None: - """Enable redirecting of stdout / stderr.""" - if self.console.is_terminal or self.console.is_jupyter: - if self._redirect_stdout and not isinstance(sys.stdout, FileProxy): - self._restore_stdout = sys.stdout - sys.stdout = cast("TextIO", FileProxy(self.console, sys.stdout)) - if self._redirect_stderr and not isinstance(sys.stderr, FileProxy): - self._restore_stderr = sys.stderr - sys.stderr = cast("TextIO", FileProxy(self.console, sys.stderr)) - - def _disable_redirect_io(self) -> None: - """Disable redirecting of stdout / stderr.""" - if self._restore_stdout: - sys.stdout = cast("TextIO", self._restore_stdout) - self._restore_stdout = None - if self._restore_stderr: - sys.stderr = cast("TextIO", self._restore_stderr) - self._restore_stderr = None - - @property - def renderable(self) -> RenderableType: - """Get the renderable that is being displayed - - Returns: - RenderableType: Displayed renderable. - """ - live_stack = self.console._live_stack - renderable: RenderableType - if live_stack and self is live_stack[0]: - # The first Live instance will render everything in the Live stack - renderable = Group(*[live.get_renderable() for live in live_stack]) - else: - renderable = self.get_renderable() - return Screen(renderable) if self._alt_screen else renderable - - def update(self, renderable: RenderableType, *, refresh: bool = False) -> None: - """Update the renderable that is being displayed - - Args: - renderable (RenderableType): New renderable to use. - refresh (bool, optional): Refresh the display. Defaults to False. - """ - if isinstance(renderable, str): - renderable = self.console.render_str(renderable) - with self._lock: - self._renderable = renderable - if refresh: - self.refresh() - - def refresh(self) -> None: - """Update the display of the Live Render.""" - with self._lock: - self._live_render.set_renderable(self.renderable) - if self._nested: - if self.console._live_stack: - self.console._live_stack[0].refresh() - return - - if self.console.is_jupyter: # pragma: no cover - try: - from IPython.display import display - from ipywidgets import Output - except ImportError: - import warnings - - warnings.warn('install "ipywidgets" for Jupyter support') - else: - if self.ipy_widget is None: - self.ipy_widget = Output() - display(self.ipy_widget) - - with self.ipy_widget: - self.ipy_widget.clear_output(wait=True) - self.console.print(self._live_render.renderable) - elif self.console.is_terminal and not self.console.is_dumb_terminal: - with self.console: - self.console.print(Control()) - elif ( - not self._started and not self.transient - ): # if it is finished allow files or dumb-terminals to see final result - with self.console: - self.console.print(Control()) - - def process_renderables( - self, renderables: List[ConsoleRenderable] - ) -> List[ConsoleRenderable]: - """Process renderables to restore cursor and display progress.""" - self._live_render.vertical_overflow = self.vertical_overflow - if self.console.is_interactive: - # lock needs acquiring as user can modify live_render renderable at any time unlike in Progress. - with self._lock: - reset = ( - Control.home() - if self._alt_screen - else self._live_render.position_cursor() - ) - renderables = [reset, *renderables, self._live_render] - elif ( - not self._started and not self.transient - ): # if it is finished render the final output for files or dumb_terminals - renderables = [*renderables, self._live_render] - - return renderables - - -if __name__ == "__main__": # pragma: no cover - import random - import time - from itertools import cycle - from typing import Dict, List, Tuple - - from .align import Align - from .console import Console - from .live import Live as Live - from .panel import Panel - from .rule import Rule - from .syntax import Syntax - from .table import Table - - console = Console() - - syntax = Syntax( - '''def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value''', - "python", - line_numbers=True, - ) - - table = Table("foo", "bar", "baz") - table.add_row("1", "2", "3") - - progress_renderables = [ - "You can make the terminal shorter and taller to see the live table hide" - "Text may be printed while the progress bars are rendering.", - Panel("In fact, [i]any[/i] renderable will work"), - "Such as [magenta]tables[/]...", - table, - "Pretty printed structures...", - {"type": "example", "text": "Pretty printed"}, - "Syntax...", - syntax, - Rule("Give it a try!"), - ] - - examples = cycle(progress_renderables) - - exchanges = [ - "SGD", - "MYR", - "EUR", - "USD", - "AUD", - "JPY", - "CNH", - "HKD", - "CAD", - "INR", - "DKK", - "GBP", - "RUB", - "NZD", - "MXN", - "IDR", - "TWD", - "THB", - "VND", - ] - with Live(console=console) as live_table: - exchange_rate_dict: Dict[Tuple[str, str], float] = {} - - for index in range(100): - select_exchange = exchanges[index % len(exchanges)] - - for exchange in exchanges: - if exchange == select_exchange: - continue - time.sleep(0.4) - if random.randint(0, 10) < 1: - console.log(next(examples)) - exchange_rate_dict[(select_exchange, exchange)] = 200 / ( - (random.random() * 320) + 1 - ) - if len(exchange_rate_dict) > len(exchanges) - 1: - exchange_rate_dict.pop(list(exchange_rate_dict.keys())[0]) - table = Table(title="Exchange Rates") - - table.add_column("Source Currency") - table.add_column("Destination Currency") - table.add_column("Exchange Rate") - - for (source, dest), exchange_rate in exchange_rate_dict.items(): - table.add_row( - source, - dest, - Text( - f"{exchange_rate:.4f}", - style="red" if exchange_rate < 1.0 else "green", - ), - ) - - live_table.update(Align.center(table)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live_render.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live_render.py deleted file mode 100644 index d3da5111d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/live_render.py +++ /dev/null @@ -1,106 +0,0 @@ -from typing import Optional, Tuple, Literal - - -from ._loop import loop_last -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .control import Control -from .segment import ControlType, Segment -from .style import StyleType -from .text import Text - -VerticalOverflowMethod = Literal["crop", "ellipsis", "visible"] - - -class LiveRender: - """Creates a renderable that may be updated. - - Args: - renderable (RenderableType): Any renderable object. - style (StyleType, optional): An optional style to apply to the renderable. Defaults to "". - """ - - def __init__( - self, - renderable: RenderableType, - style: StyleType = "", - vertical_overflow: VerticalOverflowMethod = "ellipsis", - ) -> None: - self.renderable = renderable - self.style = style - self.vertical_overflow = vertical_overflow - self._shape: Optional[Tuple[int, int]] = None - - def set_renderable(self, renderable: RenderableType) -> None: - """Set a new renderable. - - Args: - renderable (RenderableType): Any renderable object, including str. - """ - self.renderable = renderable - - def position_cursor(self) -> Control: - """Get control codes to move cursor to beginning of live render. - - Returns: - Control: A control instance that may be printed. - """ - if self._shape is not None: - _, height = self._shape - return Control( - ControlType.CARRIAGE_RETURN, - (ControlType.ERASE_IN_LINE, 2), - *( - ( - (ControlType.CURSOR_UP, 1), - (ControlType.ERASE_IN_LINE, 2), - ) - * (height - 1) - ) - ) - return Control() - - def restore_cursor(self) -> Control: - """Get control codes to clear the render and restore the cursor to its previous position. - - Returns: - Control: A Control instance that may be printed. - """ - if self._shape is not None: - _, height = self._shape - return Control( - ControlType.CARRIAGE_RETURN, - *((ControlType.CURSOR_UP, 1), (ControlType.ERASE_IN_LINE, 2)) * height - ) - return Control() - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - renderable = self.renderable - style = console.get_style(self.style) - lines = console.render_lines(renderable, options, style=style, pad=False) - shape = Segment.get_shape(lines) - - _, height = shape - if height > options.size.height: - if self.vertical_overflow == "crop": - lines = lines[: options.size.height] - shape = Segment.get_shape(lines) - elif self.vertical_overflow == "ellipsis": - lines = lines[: (options.size.height - 1)] - overflow_text = Text( - "...", - overflow="crop", - justify="center", - end="", - style="live.ellipsis", - ) - lines.append(list(console.render(overflow_text))) - shape = Segment.get_shape(lines) - self._shape = shape - - new_line = Segment.line() - for last, line in loop_last(lines): - yield from line - if not last: - yield new_line diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/logging.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/logging.py deleted file mode 100644 index 08f34c70b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/logging.py +++ /dev/null @@ -1,297 +0,0 @@ -import logging -from datetime import datetime -from logging import Handler, LogRecord -from pathlib import Path -from types import ModuleType -from typing import ClassVar, Iterable, List, Optional, Type, Union - -from pip._vendor.rich._null_file import NullFile - -from . import get_console -from ._log_render import FormatTimeCallable, LogRender -from .console import Console, ConsoleRenderable -from .highlighter import Highlighter, ReprHighlighter -from .text import Text -from .traceback import Traceback - - -class RichHandler(Handler): - """A logging handler that renders output with Rich. The time / level / message and file are displayed in columns. - The level is color coded, and the message is syntax highlighted. - - Note: - Be careful when enabling console markup in log messages if you have configured logging for libraries not - under your control. If a dependency writes messages containing square brackets, it may not produce the intended output. - - Args: - level (Union[int, str], optional): Log level. Defaults to logging.NOTSET. - console (:class:`~rich.console.Console`, optional): Optional console instance to write logs. - Default will use a global console instance writing to stdout. - show_time (bool, optional): Show a column for the time. Defaults to True. - omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True. - show_level (bool, optional): Show a column for the level. Defaults to True. - show_path (bool, optional): Show the path to the original log call. Defaults to True. - enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True. - highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None. - markup (bool, optional): Enable console markup in log messages. Defaults to False. - rich_tracebacks (bool, optional): Enable rich tracebacks with syntax highlighting and formatting. Defaults to False. - tracebacks_width (Optional[int], optional): Number of characters used to render tracebacks, or None for full width. Defaults to None. - tracebacks_code_width (int, optional): Number of code characters used to render tracebacks, or None for full width. Defaults to 88. - tracebacks_extra_lines (int, optional): Additional lines of code to render tracebacks, or None for full width. Defaults to None. - tracebacks_theme (str, optional): Override pygments theme used in traceback. - tracebacks_word_wrap (bool, optional): Enable word wrapping of long tracebacks lines. Defaults to True. - tracebacks_show_locals (bool, optional): Enable display of locals in tracebacks. Defaults to False. - tracebacks_suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - tracebacks_max_frames (int, optional): Optional maximum number of frames returned by traceback. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%x %X] ". - keywords (List[str], optional): List of words to highlight instead of ``RichHandler.KEYWORDS``. - """ - - KEYWORDS: ClassVar[Optional[List[str]]] = [ - "GET", - "POST", - "HEAD", - "PUT", - "DELETE", - "OPTIONS", - "TRACE", - "PATCH", - ] - HIGHLIGHTER_CLASS: ClassVar[Type[Highlighter]] = ReprHighlighter - - def __init__( - self, - level: Union[int, str] = logging.NOTSET, - console: Optional[Console] = None, - *, - show_time: bool = True, - omit_repeated_times: bool = True, - show_level: bool = True, - show_path: bool = True, - enable_link_path: bool = True, - highlighter: Optional[Highlighter] = None, - markup: bool = False, - rich_tracebacks: bool = False, - tracebacks_width: Optional[int] = None, - tracebacks_code_width: Optional[int] = 88, - tracebacks_extra_lines: int = 3, - tracebacks_theme: Optional[str] = None, - tracebacks_word_wrap: bool = True, - tracebacks_show_locals: bool = False, - tracebacks_suppress: Iterable[Union[str, ModuleType]] = (), - tracebacks_max_frames: int = 100, - locals_max_length: int = 10, - locals_max_string: int = 80, - log_time_format: Union[str, FormatTimeCallable] = "[%x %X]", - keywords: Optional[List[str]] = None, - ) -> None: - super().__init__(level=level) - self.console = console or get_console() - self.highlighter = highlighter or self.HIGHLIGHTER_CLASS() - self._log_render = LogRender( - show_time=show_time, - show_level=show_level, - show_path=show_path, - time_format=log_time_format, - omit_repeated_times=omit_repeated_times, - level_width=None, - ) - self.enable_link_path = enable_link_path - self.markup = markup - self.rich_tracebacks = rich_tracebacks - self.tracebacks_width = tracebacks_width - self.tracebacks_extra_lines = tracebacks_extra_lines - self.tracebacks_theme = tracebacks_theme - self.tracebacks_word_wrap = tracebacks_word_wrap - self.tracebacks_show_locals = tracebacks_show_locals - self.tracebacks_suppress = tracebacks_suppress - self.tracebacks_max_frames = tracebacks_max_frames - self.tracebacks_code_width = tracebacks_code_width - self.locals_max_length = locals_max_length - self.locals_max_string = locals_max_string - self.keywords = keywords - - def get_level_text(self, record: LogRecord) -> Text: - """Get the level name from the record. - - Args: - record (LogRecord): LogRecord instance. - - Returns: - Text: A tuple of the style and level name. - """ - level_name = record.levelname - level_text = Text.styled( - level_name.ljust(8), f"logging.level.{level_name.lower()}" - ) - return level_text - - def emit(self, record: LogRecord) -> None: - """Invoked by logging.""" - message = self.format(record) - traceback = None - if ( - self.rich_tracebacks - and record.exc_info - and record.exc_info != (None, None, None) - ): - exc_type, exc_value, exc_traceback = record.exc_info - assert exc_type is not None - assert exc_value is not None - traceback = Traceback.from_exception( - exc_type, - exc_value, - exc_traceback, - width=self.tracebacks_width, - code_width=self.tracebacks_code_width, - extra_lines=self.tracebacks_extra_lines, - theme=self.tracebacks_theme, - word_wrap=self.tracebacks_word_wrap, - show_locals=self.tracebacks_show_locals, - locals_max_length=self.locals_max_length, - locals_max_string=self.locals_max_string, - suppress=self.tracebacks_suppress, - max_frames=self.tracebacks_max_frames, - ) - message = record.getMessage() - if self.formatter: - record.message = record.getMessage() - formatter = self.formatter - if hasattr(formatter, "usesTime") and formatter.usesTime(): - record.asctime = formatter.formatTime(record, formatter.datefmt) - message = formatter.formatMessage(record) - - message_renderable = self.render_message(record, message) - log_renderable = self.render( - record=record, traceback=traceback, message_renderable=message_renderable - ) - if isinstance(self.console.file, NullFile): - # Handles pythonw, where stdout/stderr are null, and we return NullFile - # instance from Console.file. In this case, we still want to make a log record - # even though we won't be writing anything to a file. - self.handleError(record) - else: - try: - self.console.print(log_renderable) - except Exception: - self.handleError(record) - - def render_message(self, record: LogRecord, message: str) -> "ConsoleRenderable": - """Render message text in to Text. - - Args: - record (LogRecord): logging Record. - message (str): String containing log message. - - Returns: - ConsoleRenderable: Renderable to display log message. - """ - use_markup = getattr(record, "markup", self.markup) - message_text = Text.from_markup(message) if use_markup else Text(message) - - highlighter = getattr(record, "highlighter", self.highlighter) - if highlighter: - message_text = highlighter(message_text) - - if self.keywords is None: - self.keywords = self.KEYWORDS - - if self.keywords: - message_text.highlight_words(self.keywords, "logging.keyword") - - return message_text - - def render( - self, - *, - record: LogRecord, - traceback: Optional[Traceback], - message_renderable: "ConsoleRenderable", - ) -> "ConsoleRenderable": - """Render log for display. - - Args: - record (LogRecord): logging Record. - traceback (Optional[Traceback]): Traceback instance or None for no Traceback. - message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents. - - Returns: - ConsoleRenderable: Renderable to display log. - """ - path = Path(record.pathname).name - level = self.get_level_text(record) - time_format = None if self.formatter is None else self.formatter.datefmt - log_time = datetime.fromtimestamp(record.created) - - log_renderable = self._log_render( - self.console, - [message_renderable] if not traceback else [message_renderable, traceback], - log_time=log_time, - time_format=time_format, - level=level, - path=path, - line_no=record.lineno, - link_path=record.pathname if self.enable_link_path else None, - ) - return log_renderable - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - FORMAT = "%(message)s" - # FORMAT = "%(asctime)-15s - %(levelname)s - %(message)s" - logging.basicConfig( - level="NOTSET", - format=FORMAT, - datefmt="[%X]", - handlers=[RichHandler(rich_tracebacks=True, tracebacks_show_locals=True)], - ) - log = logging.getLogger("rich") - - log.info("Server starting...") - log.info("Listening on http://127.0.0.1:8080") - sleep(1) - - log.info("GET /index.html 200 1298") - log.info("GET /imgs/backgrounds/back1.jpg 200 54386") - log.info("GET /css/styles.css 200 54386") - log.warning("GET /favicon.ico 404 242") - sleep(1) - - log.debug( - "JSONRPC request\n--> %r\n<-- %r", - { - "version": "1.1", - "method": "confirmFruitPurchase", - "params": [["apple", "orange", "mangoes", "pomelo"], 1.123], - "id": "194521489", - }, - {"version": "1.1", "result": True, "error": None, "id": "194521489"}, - ) - log.debug( - "Loading configuration file /adasd/asdasd/qeqwe/qwrqwrqwr/sdgsdgsdg/werwerwer/dfgerert/ertertert/ertetert/werwerwer" - ) - log.error("Unable to find 'pomelo' in database!") - log.info("POST /jsonrpc/ 200 65532") - log.info("POST /admin/ 401 42234") - log.warning("password was rejected for admin site.") - - def divide() -> None: - number = 1 - divisor = 0 - foos = ["foo"] * 100 - log.debug("in divide") - try: - number / divisor - except: - log.exception("An error of some kind occurred!") - - divide() - sleep(1) - log.critical("Out of memory!") - log.info("Server exited with code=-1") - log.info("[bold]EXITING...[/bold]", extra=dict(markup=True)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/markup.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/markup.py deleted file mode 100644 index f6171878f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/markup.py +++ /dev/null @@ -1,251 +0,0 @@ -import re -from ast import literal_eval -from operator import attrgetter -from typing import Callable, Iterable, List, Match, NamedTuple, Optional, Tuple, Union - -from ._emoji_replace import _emoji_replace -from .emoji import EmojiVariant -from .errors import MarkupError -from .style import Style -from .text import Span, Text - -RE_TAGS = re.compile( - r"""((\\*)\[([a-z#/@][^[]*?)])""", - re.VERBOSE, -) - -RE_HANDLER = re.compile(r"^([\w.]*?)(\(.*?\))?$") - - -class Tag(NamedTuple): - """A tag in console markup.""" - - name: str - """The tag name. e.g. 'bold'.""" - parameters: Optional[str] - """Any additional parameters after the name.""" - - def __str__(self) -> str: - return ( - self.name if self.parameters is None else f"{self.name} {self.parameters}" - ) - - @property - def markup(self) -> str: - """Get the string representation of this tag.""" - return ( - f"[{self.name}]" - if self.parameters is None - else f"[{self.name}={self.parameters}]" - ) - - -_ReStringMatch = Match[str] # regex match object -_ReSubCallable = Callable[[_ReStringMatch], str] # Callable invoked by re.sub -_EscapeSubMethod = Callable[[_ReSubCallable, str], str] # Sub method of a compiled re - - -def escape( - markup: str, - _escape: _EscapeSubMethod = re.compile(r"(\\*)(\[[a-z#/@][^[]*?])").sub, -) -> str: - """Escapes text so that it won't be interpreted as markup. - - Args: - markup (str): Content to be inserted in to markup. - - Returns: - str: Markup with square brackets escaped. - """ - - def escape_backslashes(match: Match[str]) -> str: - """Called by re.sub replace matches.""" - backslashes, text = match.groups() - return f"{backslashes}{backslashes}\\{text}" - - markup = _escape(escape_backslashes, markup) - if markup.endswith("\\") and not markup.endswith("\\\\"): - return markup + "\\" - - return markup - - -def _parse(markup: str) -> Iterable[Tuple[int, Optional[str], Optional[Tag]]]: - """Parse markup in to an iterable of tuples of (position, text, tag). - - Args: - markup (str): A string containing console markup - - """ - position = 0 - _divmod = divmod - _Tag = Tag - for match in RE_TAGS.finditer(markup): - full_text, escapes, tag_text = match.groups() - start, end = match.span() - if start > position: - yield start, markup[position:start], None - if escapes: - backslashes, escaped = _divmod(len(escapes), 2) - if backslashes: - # Literal backslashes - yield start, "\\" * backslashes, None - start += backslashes * 2 - if escaped: - # Escape of tag - yield start, full_text[len(escapes) :], None - position = end - continue - text, equals, parameters = tag_text.partition("=") - yield start, None, _Tag(text, parameters if equals else None) - position = end - if position < len(markup): - yield position, markup[position:], None - - -def render( - markup: str, - style: Union[str, Style] = "", - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, -) -> Text: - """Render console markup in to a Text instance. - - Args: - markup (str): A string containing console markup. - style: (Union[str, Style]): The style to use. - emoji (bool, optional): Also render emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - - - Raises: - MarkupError: If there is a syntax error in the markup. - - Returns: - Text: A test instance. - """ - emoji_replace = _emoji_replace - if "[" not in markup: - return Text( - emoji_replace(markup, default_variant=emoji_variant) if emoji else markup, - style=style, - ) - text = Text(style=style) - append = text.append - normalize = Style.normalize - - style_stack: List[Tuple[int, Tag]] = [] - pop = style_stack.pop - - spans: List[Span] = [] - append_span = spans.append - - _Span = Span - _Tag = Tag - - def pop_style(style_name: str) -> Tuple[int, Tag]: - """Pop tag matching given style name.""" - for index, (_, tag) in enumerate(reversed(style_stack), 1): - if tag.name == style_name: - return pop(-index) - raise KeyError(style_name) - - for position, plain_text, tag in _parse(markup): - if plain_text is not None: - # Handle open brace escapes, where the brace is not part of a tag. - plain_text = plain_text.replace("\\[", "[") - append(emoji_replace(plain_text) if emoji else plain_text) - elif tag is not None: - if tag.name.startswith("/"): # Closing tag - style_name = tag.name[1:].strip() - - if style_name: # explicit close - style_name = normalize(style_name) - try: - start, open_tag = pop_style(style_name) - except KeyError: - raise MarkupError( - f"closing tag '{tag.markup}' at position {position} doesn't match any open tag" - ) from None - else: # implicit close - try: - start, open_tag = pop() - except IndexError: - raise MarkupError( - f"closing tag '[/]' at position {position} has nothing to close" - ) from None - - if open_tag.name.startswith("@"): - if open_tag.parameters: - handler_name = "" - parameters = open_tag.parameters.strip() - handler_match = RE_HANDLER.match(parameters) - if handler_match is not None: - handler_name, match_parameters = handler_match.groups() - parameters = ( - "()" if match_parameters is None else match_parameters - ) - - try: - meta_params = literal_eval(parameters) - except SyntaxError as error: - raise MarkupError( - f"error parsing {parameters!r} in {open_tag.parameters!r}; {error.msg}" - ) - except Exception as error: - raise MarkupError( - f"error parsing {open_tag.parameters!r}; {error}" - ) from None - - if handler_name: - meta_params = ( - handler_name, - meta_params - if isinstance(meta_params, tuple) - else (meta_params,), - ) - - else: - meta_params = () - - append_span( - _Span( - start, len(text), Style(meta={open_tag.name: meta_params}) - ) - ) - else: - append_span(_Span(start, len(text), str(open_tag))) - - else: # Opening tag - normalized_tag = _Tag(normalize(tag.name), tag.parameters) - style_stack.append((len(text), normalized_tag)) - - text_length = len(text) - while style_stack: - start, tag = style_stack.pop() - style = str(tag) - if style: - append_span(_Span(start, text_length, style)) - - text.spans = sorted(spans[::-1], key=attrgetter("start")) - return text - - -if __name__ == "__main__": # pragma: no cover - MARKUP = [ - "[red]Hello World[/red]", - "[magenta]Hello [b]World[/b]", - "[bold]Bold[italic] bold and italic [/bold]italic[/italic]", - "Click [link=https://www.willmcgugan.com]here[/link] to visit my Blog", - ":warning-emoji: [bold red blink] DANGER![/]", - ] - - from pip._vendor.rich import print - from pip._vendor.rich.table import Table - - grid = Table("Markup", "Result", padding=(0, 1)) - - for markup in MARKUP: - grid.add_row(Text(markup), markup) - - print(grid) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/measure.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/measure.py deleted file mode 100644 index a508ffa80..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/measure.py +++ /dev/null @@ -1,151 +0,0 @@ -from operator import itemgetter -from typing import TYPE_CHECKING, Callable, NamedTuple, Optional, Sequence - -from . import errors -from .protocol import is_renderable, rich_cast - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType - - -class Measurement(NamedTuple): - """Stores the minimum and maximum widths (in characters) required to render an object.""" - - minimum: int - """Minimum number of cells required to render.""" - maximum: int - """Maximum number of cells required to render.""" - - @property - def span(self) -> int: - """Get difference between maximum and minimum.""" - return self.maximum - self.minimum - - def normalize(self) -> "Measurement": - """Get measurement that ensures that minimum <= maximum and minimum >= 0 - - Returns: - Measurement: A normalized measurement. - """ - minimum, maximum = self - minimum = min(max(0, minimum), maximum) - return Measurement(max(0, minimum), max(0, max(minimum, maximum))) - - def with_maximum(self, width: int) -> "Measurement": - """Get a RenderableWith where the widths are <= width. - - Args: - width (int): Maximum desired width. - - Returns: - Measurement: New Measurement object. - """ - minimum, maximum = self - return Measurement(min(minimum, width), min(maximum, width)) - - def with_minimum(self, width: int) -> "Measurement": - """Get a RenderableWith where the widths are >= width. - - Args: - width (int): Minimum desired width. - - Returns: - Measurement: New Measurement object. - """ - minimum, maximum = self - width = max(0, width) - return Measurement(max(minimum, width), max(maximum, width)) - - def clamp( - self, min_width: Optional[int] = None, max_width: Optional[int] = None - ) -> "Measurement": - """Clamp a measurement within the specified range. - - Args: - min_width (int): Minimum desired width, or ``None`` for no minimum. Defaults to None. - max_width (int): Maximum desired width, or ``None`` for no maximum. Defaults to None. - - Returns: - Measurement: New Measurement object. - """ - measurement = self - if min_width is not None: - measurement = measurement.with_minimum(min_width) - if max_width is not None: - measurement = measurement.with_maximum(max_width) - return measurement - - @classmethod - def get( - cls, console: "Console", options: "ConsoleOptions", renderable: "RenderableType" - ) -> "Measurement": - """Get a measurement for a renderable. - - Args: - console (~rich.console.Console): Console instance. - options (~rich.console.ConsoleOptions): Console options. - renderable (RenderableType): An object that may be rendered with Rich. - - Raises: - errors.NotRenderableError: If the object is not renderable. - - Returns: - Measurement: Measurement object containing range of character widths required to render the object. - """ - _max_width = options.max_width - if _max_width < 1: - return Measurement(0, 0) - if isinstance(renderable, str): - renderable = console.render_str( - renderable, markup=options.markup, highlight=False - ) - renderable = rich_cast(renderable) - if is_renderable(renderable): - get_console_width: Optional[ - Callable[["Console", "ConsoleOptions"], "Measurement"] - ] = getattr(renderable, "__rich_measure__", None) - if get_console_width is not None: - render_width = ( - get_console_width(console, options) - .normalize() - .with_maximum(_max_width) - ) - if render_width.maximum < 1: - return Measurement(0, 0) - return render_width.normalize() - else: - return Measurement(0, _max_width) - else: - raise errors.NotRenderableError( - f"Unable to get render width for {renderable!r}; " - "a str, Segment, or object with __rich_console__ method is required" - ) - - -def measure_renderables( - console: "Console", - options: "ConsoleOptions", - renderables: Sequence["RenderableType"], -) -> "Measurement": - """Get a measurement that would fit a number of renderables. - - Args: - console (~rich.console.Console): Console instance. - options (~rich.console.ConsoleOptions): Console options. - renderables (Iterable[RenderableType]): One or more renderable objects. - - Returns: - Measurement: Measurement object containing range of character widths required to - contain all given renderables. - """ - if not renderables: - return Measurement(0, 0) - get_measurement = Measurement.get - measurements = [ - get_measurement(console, options, renderable) for renderable in renderables - ] - measured_width = Measurement( - max(measurements, key=itemgetter(0)).minimum, - max(measurements, key=itemgetter(1)).maximum, - ) - return measured_width diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/padding.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/padding.py deleted file mode 100644 index 0161cd182..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/padding.py +++ /dev/null @@ -1,141 +0,0 @@ -from typing import TYPE_CHECKING, List, Optional, Tuple, Union - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - RenderableType, - RenderResult, - ) - -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style - -PaddingDimensions = Union[int, Tuple[int], Tuple[int, int], Tuple[int, int, int, int]] - - -class Padding(JupyterMixin): - """Draw space around content. - - Example: - >>> print(Padding("Hello", (2, 4), style="on blue")) - - Args: - renderable (RenderableType): String or other renderable. - pad (Union[int, Tuple[int]]): Padding for top, right, bottom, and left borders. - May be specified with 1, 2, or 4 integers (CSS style). - style (Union[str, Style], optional): Style for padding characters. Defaults to "none". - expand (bool, optional): Expand padding to fit available width. Defaults to True. - """ - - def __init__( - self, - renderable: "RenderableType", - pad: "PaddingDimensions" = (0, 0, 0, 0), - *, - style: Union[str, Style] = "none", - expand: bool = True, - ): - self.renderable = renderable - self.top, self.right, self.bottom, self.left = self.unpack(pad) - self.style = style - self.expand = expand - - @classmethod - def indent(cls, renderable: "RenderableType", level: int) -> "Padding": - """Make padding instance to render an indent. - - Args: - renderable (RenderableType): String or other renderable. - level (int): Number of characters to indent. - - Returns: - Padding: A Padding instance. - """ - - return Padding(renderable, pad=(0, 0, 0, level), expand=False) - - @staticmethod - def unpack(pad: "PaddingDimensions") -> Tuple[int, int, int, int]: - """Unpack padding specified in CSS style.""" - if isinstance(pad, int): - return (pad, pad, pad, pad) - if len(pad) == 1: - _pad = pad[0] - return (_pad, _pad, _pad, _pad) - if len(pad) == 2: - pad_top, pad_right = pad - return (pad_top, pad_right, pad_top, pad_right) - if len(pad) == 4: - top, right, bottom, left = pad - return (top, right, bottom, left) - raise ValueError(f"1, 2 or 4 integers required for padding; {len(pad)} given") - - def __repr__(self) -> str: - return f"Padding({self.renderable!r}, ({self.top},{self.right},{self.bottom},{self.left}))" - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) - if self.expand: - width = options.max_width - else: - width = min( - Measurement.get(console, options, self.renderable).maximum - + self.left - + self.right, - options.max_width, - ) - render_options = options.update_width(width - self.left - self.right) - if render_options.height is not None: - render_options = render_options.update_height( - height=render_options.height - self.top - self.bottom - ) - lines = console.render_lines( - self.renderable, render_options, style=style, pad=True - ) - _Segment = Segment - - left = _Segment(" " * self.left, style) if self.left else None - right = ( - [_Segment(f'{" " * self.right}', style), _Segment.line()] - if self.right - else [_Segment.line()] - ) - blank_line: Optional[List[Segment]] = None - if self.top: - blank_line = [_Segment(f'{" " * width}\n', style)] - yield from blank_line * self.top - if left: - for line in lines: - yield left - yield from line - yield from right - else: - for line in lines: - yield from line - yield from right - if self.bottom: - blank_line = blank_line or [_Segment(f'{" " * width}\n', style)] - yield from blank_line * self.bottom - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - max_width = options.max_width - extra_width = self.left + self.right - if max_width - extra_width < 1: - return Measurement(max_width, max_width) - measure_min, measure_max = Measurement.get(console, options, self.renderable) - measurement = Measurement(measure_min + extra_width, measure_max + extra_width) - measurement = measurement.with_maximum(max_width) - return measurement - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - print(Padding("Hello, World", (2, 4), style="on blue")) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pager.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pager.py deleted file mode 100644 index a3f7aa62a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pager.py +++ /dev/null @@ -1,34 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Any - - -class Pager(ABC): - """Base class for a pager.""" - - @abstractmethod - def show(self, content: str) -> None: - """Show content in pager. - - Args: - content (str): Content to be displayed. - """ - - -class SystemPager(Pager): - """Uses the pager installed on the system.""" - - def _pager(self, content: str) -> Any: #  pragma: no cover - return __import__("pydoc").pager(content) - - def show(self, content: str) -> None: - """Use the same pager used by pydoc.""" - self._pager(content) - - -if __name__ == "__main__": # pragma: no cover - from .__main__ import make_test_card - from .console import Console - - console = Console() - with console.pager(styles=True): - console.print(make_test_card()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/palette.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/palette.py deleted file mode 100644 index fa0c4dd40..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/palette.py +++ /dev/null @@ -1,100 +0,0 @@ -from math import sqrt -from functools import lru_cache -from typing import Sequence, Tuple, TYPE_CHECKING - -from .color_triplet import ColorTriplet - -if TYPE_CHECKING: - from pip._vendor.rich.table import Table - - -class Palette: - """A palette of available colors.""" - - def __init__(self, colors: Sequence[Tuple[int, int, int]]): - self._colors = colors - - def __getitem__(self, number: int) -> ColorTriplet: - return ColorTriplet(*self._colors[number]) - - def __rich__(self) -> "Table": - from pip._vendor.rich.color import Color - from pip._vendor.rich.style import Style - from pip._vendor.rich.text import Text - from pip._vendor.rich.table import Table - - table = Table( - "index", - "RGB", - "Color", - title="Palette", - caption=f"{len(self._colors)} colors", - highlight=True, - caption_justify="right", - ) - for index, color in enumerate(self._colors): - table.add_row( - str(index), - repr(color), - Text(" " * 16, style=Style(bgcolor=Color.from_rgb(*color))), - ) - return table - - # This is somewhat inefficient and needs caching - @lru_cache(maxsize=1024) - def match(self, color: Tuple[int, int, int]) -> int: - """Find a color from a palette that most closely matches a given color. - - Args: - color (Tuple[int, int, int]): RGB components in range 0 > 255. - - Returns: - int: Index of closes matching color. - """ - red1, green1, blue1 = color - _sqrt = sqrt - get_color = self._colors.__getitem__ - - def get_color_distance(index: int) -> float: - """Get the distance to a color.""" - red2, green2, blue2 = get_color(index) - red_mean = (red1 + red2) // 2 - red = red1 - red2 - green = green1 - green2 - blue = blue1 - blue2 - return _sqrt( - (((512 + red_mean) * red * red) >> 8) - + 4 * green * green - + (((767 - red_mean) * blue * blue) >> 8) - ) - - min_index = min(range(len(self._colors)), key=get_color_distance) - return min_index - - -if __name__ == "__main__": # pragma: no cover - import colorsys - from typing import Iterable - from pip._vendor.rich.color import Color - from pip._vendor.rich.console import Console, ConsoleOptions - from pip._vendor.rich.segment import Segment - from pip._vendor.rich.style import Style - - class ColorBox: - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> Iterable[Segment]: - height = console.size.height - 3 - for y in range(0, height): - for x in range(options.max_width): - h = x / options.max_width - l = y / (height + 1) - r1, g1, b1 = colorsys.hls_to_rgb(h, l, 1.0) - r2, g2, b2 = colorsys.hls_to_rgb(h, l + (1 / height / 2), 1.0) - bgcolor = Color.from_rgb(r1 * 255, g1 * 255, b1 * 255) - color = Color.from_rgb(r2 * 255, g2 * 255, b2 * 255) - yield Segment("▄", Style(color=color, bgcolor=bgcolor)) - yield Segment.line() - - console = Console() - console.print(ColorBox()) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/panel.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/panel.py deleted file mode 100644 index 07587e3b3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/panel.py +++ /dev/null @@ -1,317 +0,0 @@ -from typing import TYPE_CHECKING, Optional - -from .align import AlignMethod -from .box import ROUNDED, Box -from .cells import cell_len -from .jupyter import JupyterMixin -from .measure import Measurement, measure_renderables -from .padding import Padding, PaddingDimensions -from .segment import Segment -from .style import Style, StyleType -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - - -class Panel(JupyterMixin): - """A console renderable that draws a border around its contents. - - Example: - >>> console.print(Panel("Hello, World!")) - - Args: - renderable (RenderableType): A console renderable object. - box (Box): A Box instance that defines the look of the border (see :ref:`appendix_box`. Defaults to box.ROUNDED. - title (Optional[TextType], optional): Optional title displayed in panel header. Defaults to None. - title_align (AlignMethod, optional): Alignment of title. Defaults to "center". - subtitle (Optional[TextType], optional): Optional subtitle displayed in panel footer. Defaults to None. - subtitle_align (AlignMethod, optional): Alignment of subtitle. Defaults to "center". - safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - expand (bool, optional): If True the panel will stretch to fill the console width, otherwise it will be sized to fit the contents. Defaults to True. - style (str, optional): The style of the panel (border and contents). Defaults to "none". - border_style (str, optional): The style of the border. Defaults to "none". - width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect. - height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect. - padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0. - highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False. - """ - - def __init__( - self, - renderable: "RenderableType", - box: Box = ROUNDED, - *, - title: Optional[TextType] = None, - title_align: AlignMethod = "center", - subtitle: Optional[TextType] = None, - subtitle_align: AlignMethod = "center", - safe_box: Optional[bool] = None, - expand: bool = True, - style: StyleType = "none", - border_style: StyleType = "none", - width: Optional[int] = None, - height: Optional[int] = None, - padding: PaddingDimensions = (0, 1), - highlight: bool = False, - ) -> None: - self.renderable = renderable - self.box = box - self.title = title - self.title_align: AlignMethod = title_align - self.subtitle = subtitle - self.subtitle_align = subtitle_align - self.safe_box = safe_box - self.expand = expand - self.style = style - self.border_style = border_style - self.width = width - self.height = height - self.padding = padding - self.highlight = highlight - - @classmethod - def fit( - cls, - renderable: "RenderableType", - box: Box = ROUNDED, - *, - title: Optional[TextType] = None, - title_align: AlignMethod = "center", - subtitle: Optional[TextType] = None, - subtitle_align: AlignMethod = "center", - safe_box: Optional[bool] = None, - style: StyleType = "none", - border_style: StyleType = "none", - width: Optional[int] = None, - height: Optional[int] = None, - padding: PaddingDimensions = (0, 1), - highlight: bool = False, - ) -> "Panel": - """An alternative constructor that sets expand=False.""" - return cls( - renderable, - box, - title=title, - title_align=title_align, - subtitle=subtitle, - subtitle_align=subtitle_align, - safe_box=safe_box, - style=style, - border_style=border_style, - width=width, - height=height, - padding=padding, - highlight=highlight, - expand=False, - ) - - @property - def _title(self) -> Optional[Text]: - if self.title: - title_text = ( - Text.from_markup(self.title) - if isinstance(self.title, str) - else self.title.copy() - ) - title_text.end = "" - title_text.plain = title_text.plain.replace("\n", " ") - title_text.no_wrap = True - title_text.expand_tabs() - title_text.pad(1) - return title_text - return None - - @property - def _subtitle(self) -> Optional[Text]: - if self.subtitle: - subtitle_text = ( - Text.from_markup(self.subtitle) - if isinstance(self.subtitle, str) - else self.subtitle.copy() - ) - subtitle_text.end = "" - subtitle_text.plain = subtitle_text.plain.replace("\n", " ") - subtitle_text.no_wrap = True - subtitle_text.expand_tabs() - subtitle_text.pad(1) - return subtitle_text - return None - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - _padding = Padding.unpack(self.padding) - renderable = ( - Padding(self.renderable, _padding) if any(_padding) else self.renderable - ) - style = console.get_style(self.style) - border_style = style + console.get_style(self.border_style) - width = ( - options.max_width - if self.width is None - else min(options.max_width, self.width) - ) - - safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box - box = self.box.substitute(options, safe=safe_box) - - def align_text( - text: Text, width: int, align: str, character: str, style: Style - ) -> Text: - """Gets new aligned text. - - Args: - text (Text): Title or subtitle text. - width (int): Desired width. - align (str): Alignment. - character (str): Character for alignment. - style (Style): Border style - - Returns: - Text: New text instance - """ - text = text.copy() - text.truncate(width) - excess_space = width - cell_len(text.plain) - if text.style: - text.stylize(console.get_style(text.style)) - - if excess_space: - if align == "left": - return Text.assemble( - text, - (character * excess_space, style), - no_wrap=True, - end="", - ) - elif align == "center": - left = excess_space // 2 - return Text.assemble( - (character * left, style), - text, - (character * (excess_space - left), style), - no_wrap=True, - end="", - ) - else: - return Text.assemble( - (character * excess_space, style), - text, - no_wrap=True, - end="", - ) - return text - - title_text = self._title - if title_text is not None: - title_text.stylize_before(border_style) - - child_width = ( - width - 2 - if self.expand - else console.measure( - renderable, options=options.update_width(width - 2) - ).maximum - ) - child_height = self.height or options.height or None - if child_height: - child_height -= 2 - if title_text is not None: - child_width = min( - options.max_width - 2, max(child_width, title_text.cell_len + 2) - ) - - width = child_width + 2 - child_options = options.update( - width=child_width, height=child_height, highlight=self.highlight - ) - lines = console.render_lines(renderable, child_options, style=style) - - line_start = Segment(box.mid_left, border_style) - line_end = Segment(f"{box.mid_right}", border_style) - new_line = Segment.line() - if title_text is None or width <= 4: - yield Segment(box.get_top([width - 2]), border_style) - else: - title_text = align_text( - title_text, - width - 4, - self.title_align, - box.top, - border_style, - ) - yield Segment(box.top_left + box.top, border_style) - yield from console.render(title_text, child_options.update_width(width - 4)) - yield Segment(box.top + box.top_right, border_style) - - yield new_line - for line in lines: - yield line_start - yield from line - yield line_end - yield new_line - - subtitle_text = self._subtitle - if subtitle_text is not None: - subtitle_text.stylize_before(border_style) - - if subtitle_text is None or width <= 4: - yield Segment(box.get_bottom([width - 2]), border_style) - else: - subtitle_text = align_text( - subtitle_text, - width - 4, - self.subtitle_align, - box.bottom, - border_style, - ) - yield Segment(box.bottom_left + box.bottom, border_style) - yield from console.render( - subtitle_text, child_options.update_width(width - 4) - ) - yield Segment(box.bottom + box.bottom_right, border_style) - - yield new_line - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - _title = self._title - _, right, _, left = Padding.unpack(self.padding) - padding = left + right - renderables = [self.renderable, _title] if _title else [self.renderable] - - if self.width is None: - width = ( - measure_renderables( - console, - options.update_width(options.max_width - padding - 2), - renderables, - ).maximum - + padding - + 2 - ) - else: - width = self.width - return Measurement(width, width) - - -if __name__ == "__main__": # pragma: no cover - from .console import Console - - c = Console() - - from .box import DOUBLE, ROUNDED - from .padding import Padding - - p = Panel( - "Hello, World!", - title="rich.Panel", - style="white on blue", - box=DOUBLE, - padding=1, - ) - - c.print() - c.print(p) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pretty.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pretty.py deleted file mode 100644 index c4a274f8c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/pretty.py +++ /dev/null @@ -1,1016 +0,0 @@ -import builtins -import collections -import dataclasses -import inspect -import os -import reprlib -import sys -from array import array -from collections import Counter, UserDict, UserList, defaultdict, deque -from dataclasses import dataclass, fields, is_dataclass -from inspect import isclass -from itertools import islice -from types import MappingProxyType -from typing import ( - TYPE_CHECKING, - Any, - Callable, - DefaultDict, - Deque, - Dict, - Iterable, - List, - Optional, - Sequence, - Set, - Tuple, - Union, -) - -from pip._vendor.rich.repr import RichReprResult - -try: - import attr as _attr_module - - _has_attrs = hasattr(_attr_module, "ib") -except ImportError: # pragma: no cover - _has_attrs = False - -from . import get_console -from ._loop import loop_last -from ._pick import pick_bool -from .abc import RichRenderable -from .cells import cell_len -from .highlighter import ReprHighlighter -from .jupyter import JupyterMixin, JupyterRenderable -from .measure import Measurement -from .text import Text - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - HighlighterType, - JustifyMethod, - OverflowMethod, - RenderResult, - ) - - -def _is_attr_object(obj: Any) -> bool: - """Check if an object was created with attrs module.""" - return _has_attrs and _attr_module.has(type(obj)) - - -def _get_attr_fields(obj: Any) -> Sequence["_attr_module.Attribute[Any]"]: - """Get fields for an attrs object.""" - return _attr_module.fields(type(obj)) if _has_attrs else [] - - -def _is_dataclass_repr(obj: object) -> bool: - """Check if an instance of a dataclass contains the default repr. - - Args: - obj (object): A dataclass instance. - - Returns: - bool: True if the default repr is used, False if there is a custom repr. - """ - # Digging in to a lot of internals here - # Catching all exceptions in case something is missing on a non CPython implementation - try: - return obj.__repr__.__code__.co_filename in ( - dataclasses.__file__, - reprlib.__file__, - ) - except Exception: # pragma: no coverage - return False - - -_dummy_namedtuple = collections.namedtuple("_dummy_namedtuple", []) - - -def _has_default_namedtuple_repr(obj: object) -> bool: - """Check if an instance of namedtuple contains the default repr - - Args: - obj (object): A namedtuple - - Returns: - bool: True if the default repr is used, False if there's a custom repr. - """ - obj_file = None - try: - obj_file = inspect.getfile(obj.__repr__) - except (OSError, TypeError): - # OSError handles case where object is defined in __main__ scope, e.g. REPL - no filename available. - # TypeError trapped defensively, in case of object without filename slips through. - pass - default_repr_file = inspect.getfile(_dummy_namedtuple.__repr__) - return obj_file == default_repr_file - - -def _ipy_display_hook( - value: Any, - console: Optional["Console"] = None, - overflow: "OverflowMethod" = "ignore", - crop: bool = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> Union[str, None]: - # needed here to prevent circular import: - from .console import ConsoleRenderable - - # always skip rich generated jupyter renderables or None values - if _safe_isinstance(value, JupyterRenderable) or value is None: - return None - - console = console or get_console() - - with console.capture() as capture: - # certain renderables should start on a new line - if _safe_isinstance(value, ConsoleRenderable): - console.line() - console.print( - ( - value - if _safe_isinstance(value, RichRenderable) - else Pretty( - value, - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - margin=12, - ) - ), - crop=crop, - new_line_start=True, - end="", - ) - # strip trailing newline, not usually part of a text repr - # I'm not sure if this should be prevented at a lower level - return capture.get().rstrip("\n") - - -def _safe_isinstance( - obj: object, class_or_tuple: Union[type, Tuple[type, ...]] -) -> bool: - """isinstance can fail in rare cases, for example types with no __class__""" - try: - return isinstance(obj, class_or_tuple) - except Exception: - return False - - -def install( - console: Optional["Console"] = None, - overflow: "OverflowMethod" = "ignore", - crop: bool = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> None: - """Install automatic pretty printing in the Python REPL. - - Args: - console (Console, optional): Console instance or ``None`` to use global console. Defaults to None. - overflow (Optional[OverflowMethod], optional): Overflow method. Defaults to "ignore". - crop (Optional[bool], optional): Enable cropping of long lines. Defaults to False. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None. - expand_all (bool, optional): Expand all containers. Defaults to False. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - """ - from pip._vendor.rich import get_console - - console = console or get_console() - assert console is not None - - def display_hook(value: Any) -> None: - """Replacement sys.displayhook which prettifies objects with Rich.""" - if value is not None: - assert console is not None - builtins._ = None # type: ignore[attr-defined] - console.print( - ( - value - if _safe_isinstance(value, RichRenderable) - else Pretty( - value, - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - ) - ), - crop=crop, - ) - builtins._ = value # type: ignore[attr-defined] - - try: - ip = get_ipython() # type: ignore[name-defined] - except NameError: - sys.displayhook = display_hook - else: - from IPython.core.formatters import BaseFormatter - - class RichFormatter(BaseFormatter): # type: ignore[misc] - pprint: bool = True - - def __call__(self, value: Any) -> Any: - if self.pprint: - return _ipy_display_hook( - value, - console=get_console(), - overflow=overflow, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - expand_all=expand_all, - ) - else: - return repr(value) - - # replace plain text formatter with rich formatter - rich_formatter = RichFormatter() - ip.display_formatter.formatters["text/plain"] = rich_formatter - - -class Pretty(JupyterMixin): - """A rich renderable that pretty prints an object. - - Args: - _object (Any): An object to pretty print. - highlighter (HighlighterType, optional): Highlighter object to apply to result, or None for ReprHighlighter. Defaults to None. - indent_size (int, optional): Number of spaces in indent. Defaults to 4. - justify (JustifyMethod, optional): Justify method, or None for default. Defaults to None. - overflow (OverflowMethod, optional): Overflow method, or None for default. Defaults to None. - no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to False. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth of nested data structures, or None for no maximum. Defaults to None. - expand_all (bool, optional): Expand all containers. Defaults to False. - margin (int, optional): Subtrace a margin from width to force containers to expand earlier. Defaults to 0. - insert_line (bool, optional): Insert a new line if the output has multiple new lines. Defaults to False. - """ - - def __init__( - self, - _object: Any, - highlighter: Optional["HighlighterType"] = None, - *, - indent_size: int = 4, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = False, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, - margin: int = 0, - insert_line: bool = False, - ) -> None: - self._object = _object - self.highlighter = highlighter or ReprHighlighter() - self.indent_size = indent_size - self.justify: Optional["JustifyMethod"] = justify - self.overflow: Optional["OverflowMethod"] = overflow - self.no_wrap = no_wrap - self.indent_guides = indent_guides - self.max_length = max_length - self.max_string = max_string - self.max_depth = max_depth - self.expand_all = expand_all - self.margin = margin - self.insert_line = insert_line - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - pretty_str = pretty_repr( - self._object, - max_width=options.max_width - self.margin, - indent_size=self.indent_size, - max_length=self.max_length, - max_string=self.max_string, - max_depth=self.max_depth, - expand_all=self.expand_all, - ) - pretty_text = Text.from_ansi( - pretty_str, - justify=self.justify or options.justify, - overflow=self.overflow or options.overflow, - no_wrap=pick_bool(self.no_wrap, options.no_wrap), - style="pretty", - ) - pretty_text = ( - self.highlighter(pretty_text) - if pretty_text - else Text( - f"{type(self._object)}.__repr__ returned empty string", - style="dim italic", - ) - ) - if self.indent_guides and not options.ascii_only: - pretty_text = pretty_text.with_indent_guides( - self.indent_size, style="repr.indent" - ) - if self.insert_line and "\n" in pretty_text: - yield "" - yield pretty_text - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - pretty_str = pretty_repr( - self._object, - max_width=options.max_width, - indent_size=self.indent_size, - max_length=self.max_length, - max_string=self.max_string, - max_depth=self.max_depth, - expand_all=self.expand_all, - ) - text_width = ( - max(cell_len(line) for line in pretty_str.splitlines()) if pretty_str else 0 - ) - return Measurement(text_width, text_width) - - -def _get_braces_for_defaultdict(_object: DefaultDict[Any, Any]) -> Tuple[str, str, str]: - return ( - f"defaultdict({_object.default_factory!r}, {{", - "})", - f"defaultdict({_object.default_factory!r}, {{}})", - ) - - -def _get_braces_for_deque(_object: Deque[Any]) -> Tuple[str, str, str]: - if _object.maxlen is None: - return ("deque([", "])", "deque()") - return ( - "deque([", - f"], maxlen={_object.maxlen})", - f"deque(maxlen={_object.maxlen})", - ) - - -def _get_braces_for_array(_object: "array[Any]") -> Tuple[str, str, str]: - return (f"array({_object.typecode!r}, [", "])", f"array({_object.typecode!r})") - - -_BRACES: Dict[type, Callable[[Any], Tuple[str, str, str]]] = { - os._Environ: lambda _object: ("environ({", "})", "environ({})"), - array: _get_braces_for_array, - defaultdict: _get_braces_for_defaultdict, - Counter: lambda _object: ("Counter({", "})", "Counter()"), - deque: _get_braces_for_deque, - dict: lambda _object: ("{", "}", "{}"), - UserDict: lambda _object: ("{", "}", "{}"), - frozenset: lambda _object: ("frozenset({", "})", "frozenset()"), - list: lambda _object: ("[", "]", "[]"), - UserList: lambda _object: ("[", "]", "[]"), - set: lambda _object: ("{", "}", "set()"), - tuple: lambda _object: ("(", ")", "()"), - MappingProxyType: lambda _object: ("mappingproxy({", "})", "mappingproxy({})"), -} -_CONTAINERS = tuple(_BRACES.keys()) -_MAPPING_CONTAINERS = (dict, os._Environ, MappingProxyType, UserDict) - - -def is_expandable(obj: Any) -> bool: - """Check if an object may be expanded by pretty print.""" - return ( - _safe_isinstance(obj, _CONTAINERS) - or (is_dataclass(obj)) - or (hasattr(obj, "__rich_repr__")) - or _is_attr_object(obj) - ) and not isclass(obj) - - -@dataclass -class Node: - """A node in a repr tree. May be atomic or a container.""" - - key_repr: str = "" - value_repr: str = "" - open_brace: str = "" - close_brace: str = "" - empty: str = "" - last: bool = False - is_tuple: bool = False - is_namedtuple: bool = False - children: Optional[List["Node"]] = None - key_separator: str = ": " - separator: str = ", " - - def iter_tokens(self) -> Iterable[str]: - """Generate tokens for this node.""" - if self.key_repr: - yield self.key_repr - yield self.key_separator - if self.value_repr: - yield self.value_repr - elif self.children is not None: - if self.children: - yield self.open_brace - if self.is_tuple and not self.is_namedtuple and len(self.children) == 1: - yield from self.children[0].iter_tokens() - yield "," - else: - for child in self.children: - yield from child.iter_tokens() - if not child.last: - yield self.separator - yield self.close_brace - else: - yield self.empty - - def check_length(self, start_length: int, max_length: int) -> bool: - """Check the length fits within a limit. - - Args: - start_length (int): Starting length of the line (indent, prefix, suffix). - max_length (int): Maximum length. - - Returns: - bool: True if the node can be rendered within max length, otherwise False. - """ - total_length = start_length - for token in self.iter_tokens(): - total_length += cell_len(token) - if total_length > max_length: - return False - return True - - def __str__(self) -> str: - repr_text = "".join(self.iter_tokens()) - return repr_text - - def render( - self, max_width: int = 80, indent_size: int = 4, expand_all: bool = False - ) -> str: - """Render the node to a pretty repr. - - Args: - max_width (int, optional): Maximum width of the repr. Defaults to 80. - indent_size (int, optional): Size of indents. Defaults to 4. - expand_all (bool, optional): Expand all levels. Defaults to False. - - Returns: - str: A repr string of the original object. - """ - lines = [_Line(node=self, is_root=True)] - line_no = 0 - while line_no < len(lines): - line = lines[line_no] - if line.expandable and not line.expanded: - if expand_all or not line.check_length(max_width): - lines[line_no : line_no + 1] = line.expand(indent_size) - line_no += 1 - - repr_str = "\n".join(str(line) for line in lines) - return repr_str - - -@dataclass -class _Line: - """A line in repr output.""" - - parent: Optional["_Line"] = None - is_root: bool = False - node: Optional[Node] = None - text: str = "" - suffix: str = "" - whitespace: str = "" - expanded: bool = False - last: bool = False - - @property - def expandable(self) -> bool: - """Check if the line may be expanded.""" - return bool(self.node is not None and self.node.children) - - def check_length(self, max_length: int) -> bool: - """Check this line fits within a given number of cells.""" - start_length = ( - len(self.whitespace) + cell_len(self.text) + cell_len(self.suffix) - ) - assert self.node is not None - return self.node.check_length(start_length, max_length) - - def expand(self, indent_size: int) -> Iterable["_Line"]: - """Expand this line by adding children on their own line.""" - node = self.node - assert node is not None - whitespace = self.whitespace - assert node.children - if node.key_repr: - new_line = yield _Line( - text=f"{node.key_repr}{node.key_separator}{node.open_brace}", - whitespace=whitespace, - ) - else: - new_line = yield _Line(text=node.open_brace, whitespace=whitespace) - child_whitespace = self.whitespace + " " * indent_size - tuple_of_one = node.is_tuple and len(node.children) == 1 - for last, child in loop_last(node.children): - separator = "," if tuple_of_one else node.separator - line = _Line( - parent=new_line, - node=child, - whitespace=child_whitespace, - suffix=separator, - last=last and not tuple_of_one, - ) - yield line - - yield _Line( - text=node.close_brace, - whitespace=whitespace, - suffix=self.suffix, - last=self.last, - ) - - def __str__(self) -> str: - if self.last: - return f"{self.whitespace}{self.text}{self.node or ''}" - else: - return ( - f"{self.whitespace}{self.text}{self.node or ''}{self.suffix.rstrip()}" - ) - - -def _is_namedtuple(obj: Any) -> bool: - """Checks if an object is most likely a namedtuple. It is possible - to craft an object that passes this check and isn't a namedtuple, but - there is only a minuscule chance of this happening unintentionally. - - Args: - obj (Any): The object to test - - Returns: - bool: True if the object is a namedtuple. False otherwise. - """ - try: - fields = getattr(obj, "_fields", None) - except Exception: - # Being very defensive - if we cannot get the attr then its not a namedtuple - return False - return isinstance(obj, tuple) and isinstance(fields, tuple) - - -def traverse( - _object: Any, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, -) -> Node: - """Traverse object and generate a tree. - - Args: - _object (Any): Object to be traversed. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable truncating. - Defaults to None. - max_depth (int, optional): Maximum depth of data structures, or None for no maximum. - Defaults to None. - - Returns: - Node: The root of a tree structure which can be used to render a pretty repr. - """ - - def to_repr(obj: Any) -> str: - """Get repr string for an object, but catch errors.""" - if ( - max_string is not None - and _safe_isinstance(obj, (bytes, str)) - and len(obj) > max_string - ): - truncated = len(obj) - max_string - obj_repr = f"{obj[:max_string]!r}+{truncated}" - else: - try: - obj_repr = repr(obj) - except Exception as error: - obj_repr = f"<repr-error {str(error)!r}>" - return obj_repr - - visited_ids: Set[int] = set() - push_visited = visited_ids.add - pop_visited = visited_ids.remove - - def _traverse(obj: Any, root: bool = False, depth: int = 0) -> Node: - """Walk the object depth first.""" - - obj_id = id(obj) - if obj_id in visited_ids: - # Recursion detected - return Node(value_repr="...") - - obj_type = type(obj) - children: List[Node] - reached_max_depth = max_depth is not None and depth >= max_depth - - def iter_rich_args(rich_args: Any) -> Iterable[Union[Any, Tuple[str, Any]]]: - for arg in rich_args: - if _safe_isinstance(arg, tuple): - if len(arg) == 3: - key, child, default = arg - if default == child: - continue - yield key, child - elif len(arg) == 2: - key, child = arg - yield key, child - elif len(arg) == 1: - yield arg[0] - else: - yield arg - - try: - fake_attributes = hasattr( - obj, "awehoi234_wdfjwljet234_234wdfoijsdfmmnxpi492" - ) - except Exception: - fake_attributes = False - - rich_repr_result: Optional[RichReprResult] = None - if not fake_attributes: - try: - if hasattr(obj, "__rich_repr__") and not isclass(obj): - rich_repr_result = obj.__rich_repr__() - except Exception: - pass - - if rich_repr_result is not None: - push_visited(obj_id) - angular = getattr(obj.__rich_repr__, "angular", False) - args = list(iter_rich_args(rich_repr_result)) - class_name = obj.__class__.__name__ - - if args: - children = [] - append = children.append - - if reached_max_depth: - if angular: - node = Node(value_repr=f"<{class_name}...>") - else: - node = Node(value_repr=f"{class_name}(...)") - else: - if angular: - node = Node( - open_brace=f"<{class_name} ", - close_brace=">", - children=children, - last=root, - separator=" ", - ) - else: - node = Node( - open_brace=f"{class_name}(", - close_brace=")", - children=children, - last=root, - ) - for last, arg in loop_last(args): - if _safe_isinstance(arg, tuple): - key, child = arg - child_node = _traverse(child, depth=depth + 1) - child_node.last = last - child_node.key_repr = key - child_node.key_separator = "=" - append(child_node) - else: - child_node = _traverse(arg, depth=depth + 1) - child_node.last = last - append(child_node) - else: - node = Node( - value_repr=f"<{class_name}>" if angular else f"{class_name}()", - children=[], - last=root, - ) - pop_visited(obj_id) - elif _is_attr_object(obj) and not fake_attributes: - push_visited(obj_id) - children = [] - append = children.append - - attr_fields = _get_attr_fields(obj) - if attr_fields: - if reached_max_depth: - node = Node(value_repr=f"{obj.__class__.__name__}(...)") - else: - node = Node( - open_brace=f"{obj.__class__.__name__}(", - close_brace=")", - children=children, - last=root, - ) - - def iter_attrs() -> ( - Iterable[Tuple[str, Any, Optional[Callable[[Any], str]]]] - ): - """Iterate over attr fields and values.""" - for attr in attr_fields: - if attr.repr: - try: - value = getattr(obj, attr.name) - except Exception as error: - # Can happen, albeit rarely - yield (attr.name, error, None) - else: - yield ( - attr.name, - value, - attr.repr if callable(attr.repr) else None, - ) - - for last, (name, value, repr_callable) in loop_last(iter_attrs()): - if repr_callable: - child_node = Node(value_repr=str(repr_callable(value))) - else: - child_node = _traverse(value, depth=depth + 1) - child_node.last = last - child_node.key_repr = name - child_node.key_separator = "=" - append(child_node) - else: - node = Node( - value_repr=f"{obj.__class__.__name__}()", children=[], last=root - ) - pop_visited(obj_id) - elif ( - is_dataclass(obj) - and not _safe_isinstance(obj, type) - and not fake_attributes - and _is_dataclass_repr(obj) - ): - push_visited(obj_id) - children = [] - append = children.append - if reached_max_depth: - node = Node(value_repr=f"{obj.__class__.__name__}(...)") - else: - node = Node( - open_brace=f"{obj.__class__.__name__}(", - close_brace=")", - children=children, - last=root, - empty=f"{obj.__class__.__name__}()", - ) - - for last, field in loop_last( - field - for field in fields(obj) - if field.repr and hasattr(obj, field.name) - ): - child_node = _traverse(getattr(obj, field.name), depth=depth + 1) - child_node.key_repr = field.name - child_node.last = last - child_node.key_separator = "=" - append(child_node) - - pop_visited(obj_id) - elif _is_namedtuple(obj) and _has_default_namedtuple_repr(obj): - push_visited(obj_id) - class_name = obj.__class__.__name__ - if reached_max_depth: - # If we've reached the max depth, we still show the class name, but not its contents - node = Node( - value_repr=f"{class_name}(...)", - ) - else: - children = [] - append = children.append - node = Node( - open_brace=f"{class_name}(", - close_brace=")", - children=children, - empty=f"{class_name}()", - ) - for last, (key, value) in loop_last(obj._asdict().items()): - child_node = _traverse(value, depth=depth + 1) - child_node.key_repr = key - child_node.last = last - child_node.key_separator = "=" - append(child_node) - pop_visited(obj_id) - elif _safe_isinstance(obj, _CONTAINERS): - for container_type in _CONTAINERS: - if _safe_isinstance(obj, container_type): - obj_type = container_type - break - - push_visited(obj_id) - - open_brace, close_brace, empty = _BRACES[obj_type](obj) - - if reached_max_depth: - node = Node(value_repr=f"{open_brace}...{close_brace}") - elif obj_type.__repr__ != type(obj).__repr__: - node = Node(value_repr=to_repr(obj), last=root) - elif obj: - children = [] - node = Node( - open_brace=open_brace, - close_brace=close_brace, - children=children, - last=root, - ) - append = children.append - num_items = len(obj) - last_item_index = num_items - 1 - - if _safe_isinstance(obj, _MAPPING_CONTAINERS): - iter_items = iter(obj.items()) - if max_length is not None: - iter_items = islice(iter_items, max_length) - for index, (key, child) in enumerate(iter_items): - child_node = _traverse(child, depth=depth + 1) - child_node.key_repr = to_repr(key) - child_node.last = index == last_item_index - append(child_node) - else: - iter_values = iter(obj) - if max_length is not None: - iter_values = islice(iter_values, max_length) - for index, child in enumerate(iter_values): - child_node = _traverse(child, depth=depth + 1) - child_node.last = index == last_item_index - append(child_node) - if max_length is not None and num_items > max_length: - append(Node(value_repr=f"... +{num_items - max_length}", last=True)) - else: - node = Node(empty=empty, children=[], last=root) - - pop_visited(obj_id) - else: - node = Node(value_repr=to_repr(obj), last=root) - node.is_tuple = type(obj) == tuple - node.is_namedtuple = _is_namedtuple(obj) - return node - - node = _traverse(_object, root=True) - return node - - -def pretty_repr( - _object: Any, - *, - max_width: int = 80, - indent_size: int = 4, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> str: - """Prettify repr string by expanding on to new lines to fit within a given width. - - Args: - _object (Any): Object to repr. - max_width (int, optional): Desired maximum width of repr string. Defaults to 80. - indent_size (int, optional): Number of spaces to indent. Defaults to 4. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable truncating. - Defaults to None. - max_depth (int, optional): Maximum depth of nested data structure, or None for no depth. - Defaults to None. - expand_all (bool, optional): Expand all containers regardless of available width. Defaults to False. - - Returns: - str: A possibly multi-line representation of the object. - """ - - if _safe_isinstance(_object, Node): - node = _object - else: - node = traverse( - _object, max_length=max_length, max_string=max_string, max_depth=max_depth - ) - repr_str: str = node.render( - max_width=max_width, indent_size=indent_size, expand_all=expand_all - ) - return repr_str - - -def pprint( - _object: Any, - *, - console: Optional["Console"] = None, - indent_guides: bool = True, - max_length: Optional[int] = None, - max_string: Optional[int] = None, - max_depth: Optional[int] = None, - expand_all: bool = False, -) -> None: - """A convenience function for pretty printing. - - Args: - _object (Any): Object to pretty print. - console (Console, optional): Console instance, or None to use default. Defaults to None. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of strings before truncating, or None to disable. Defaults to None. - max_depth (int, optional): Maximum depth for nested data structures, or None for unlimited depth. Defaults to None. - indent_guides (bool, optional): Enable indentation guides. Defaults to True. - expand_all (bool, optional): Expand all containers. Defaults to False. - """ - _console = get_console() if console is None else console - _console.print( - Pretty( - _object, - max_length=max_length, - max_string=max_string, - max_depth=max_depth, - indent_guides=indent_guides, - expand_all=expand_all, - overflow="ignore", - ), - soft_wrap=True, - ) - - -if __name__ == "__main__": # pragma: no cover - - class BrokenRepr: - def __repr__(self) -> str: - 1 / 0 - return "this will fail" - - from typing import NamedTuple - - class StockKeepingUnit(NamedTuple): - name: str - description: str - price: float - category: str - reviews: List[str] - - d = defaultdict(int) - d["foo"] = 5 - data = { - "foo": [ - 1, - "Hello World!", - 100.123, - 323.232, - 432324.0, - {5, 6, 7, (1, 2, 3, 4), 8}, - ], - "bar": frozenset({1, 2, 3}), - "defaultdict": defaultdict( - list, {"crumble": ["apple", "rhubarb", "butter", "sugar", "flour"]} - ), - "counter": Counter( - [ - "apple", - "orange", - "pear", - "kumquat", - "kumquat", - "durian" * 100, - ] - ), - "atomic": (False, True, None), - "namedtuple": StockKeepingUnit( - "Sparkling British Spring Water", - "Carbonated spring water", - 0.9, - "water", - ["its amazing!", "its terrible!"], - ), - "Broken": BrokenRepr(), - } - data["foo"].append(data) # type: ignore[attr-defined] - - from pip._vendor.rich import print - - print(Pretty(data, indent_guides=True, max_string=20)) - - class Thing: - def __repr__(self) -> str: - return "Hello\x1b[38;5;239m World!" - - print(Pretty(Thing())) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress.py deleted file mode 100644 index ef6ad60f0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress.py +++ /dev/null @@ -1,1715 +0,0 @@ -from __future__ import annotations - -import io -import typing -import warnings -from abc import ABC, abstractmethod -from collections import deque -from dataclasses import dataclass, field -from datetime import timedelta -from io import RawIOBase, UnsupportedOperation -from math import ceil -from mmap import mmap -from operator import length_hint -from os import PathLike, stat -from threading import Event, RLock, Thread -from types import TracebackType -from typing import ( - TYPE_CHECKING, - Any, - BinaryIO, - Callable, - ContextManager, - Deque, - Dict, - Generic, - Iterable, - List, - Literal, - NamedTuple, - NewType, - Optional, - TextIO, - Tuple, - Type, - TypeVar, - Union, -) - -if TYPE_CHECKING: - # Can be replaced with `from typing import Self` in Python 3.11+ - from typing_extensions import Self # pragma: no cover - -from . import filesize, get_console -from .console import Console, Group, JustifyMethod, RenderableType -from .highlighter import Highlighter -from .jupyter import JupyterMixin -from .live import Live -from .progress_bar import ProgressBar -from .spinner import Spinner -from .style import StyleType -from .table import Column, Table -from .text import Text, TextType - -TaskID = NewType("TaskID", int) - -ProgressType = TypeVar("ProgressType") - -GetTimeCallable = Callable[[], float] - - -_I = typing.TypeVar("_I", TextIO, BinaryIO) - - -class _TrackThread(Thread): - """A thread to periodically update progress.""" - - def __init__(self, progress: "Progress", task_id: "TaskID", update_period: float): - self.progress = progress - self.task_id = task_id - self.update_period = update_period - self.done = Event() - - self.completed = 0 - super().__init__(daemon=True) - - def run(self) -> None: - task_id = self.task_id - advance = self.progress.advance - update_period = self.update_period - last_completed = 0 - wait = self.done.wait - while not wait(update_period) and self.progress.live.is_started: - completed = self.completed - if last_completed != completed: - advance(task_id, completed - last_completed) - last_completed = completed - - self.progress.update(self.task_id, completed=self.completed, refresh=True) - - def __enter__(self) -> "_TrackThread": - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.done.set() - self.join() - - -def track( - sequence: Iterable[ProgressType], - description: str = "Working...", - total: Optional[float] = None, - completed: int = 0, - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - update_period: float = 0.1, - disable: bool = False, - show_speed: bool = True, -) -> Iterable[ProgressType]: - """Track progress by iterating over a sequence. - - You can also track progress of an iterable, which might require that you additionally specify ``total``. - - Args: - sequence (Iterable[ProgressType]): Values you wish to iterate over and track progress. - description (str, optional): Description of task show next to progress bar. Defaults to "Working". - total: (float, optional): Total number of steps. Default is len(sequence). - completed (int, optional): Number of steps completed so far. Defaults to 0. - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1. - disable (bool, optional): Disable display of progress. - show_speed (bool, optional): Show speed if total isn't known. Defaults to True. - Returns: - Iterable[ProgressType]: An iterable of the values in the sequence. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - TaskProgressColumn(show_speed=show_speed), - TimeRemainingColumn(elapsed_when_finished=True), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - with progress: - yield from progress.track( - sequence, - total=total, - completed=completed, - description=description, - update_period=update_period, - ) - - -class _Reader(RawIOBase, BinaryIO): - """A reader that tracks progress while it's being read from.""" - - def __init__( - self, - handle: BinaryIO, - progress: "Progress", - task: TaskID, - close_handle: bool = True, - ) -> None: - self.handle = handle - self.progress = progress - self.task = task - self.close_handle = close_handle - self._closed = False - - def __enter__(self) -> "_Reader": - self.handle.__enter__() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.close() - - def __iter__(self) -> BinaryIO: - return self - - def __next__(self) -> bytes: - line = next(self.handle) - self.progress.advance(self.task, advance=len(line)) - return line - - @property - def closed(self) -> bool: - return self._closed - - def fileno(self) -> int: - return self.handle.fileno() - - def isatty(self) -> bool: - return self.handle.isatty() - - @property - def mode(self) -> str: - return self.handle.mode - - @property - def name(self) -> str: - return self.handle.name - - def readable(self) -> bool: - return self.handle.readable() - - def seekable(self) -> bool: - return self.handle.seekable() - - def writable(self) -> bool: - return False - - def read(self, size: int = -1) -> bytes: - block = self.handle.read(size) - self.progress.advance(self.task, advance=len(block)) - return block - - def readinto(self, b: Union[bytearray, memoryview, mmap]): # type: ignore[no-untyped-def, override] - n = self.handle.readinto(b) # type: ignore[attr-defined] - self.progress.advance(self.task, advance=n) - return n - - def readline(self, size: int = -1) -> bytes: # type: ignore[override] - line = self.handle.readline(size) - self.progress.advance(self.task, advance=len(line)) - return line - - def readlines(self, hint: int = -1) -> List[bytes]: - lines = self.handle.readlines(hint) - self.progress.advance(self.task, advance=sum(map(len, lines))) - return lines - - def close(self) -> None: - if self.close_handle: - self.handle.close() - self._closed = True - - def seek(self, offset: int, whence: int = 0) -> int: - pos = self.handle.seek(offset, whence) - self.progress.update(self.task, completed=pos) - return pos - - def tell(self) -> int: - return self.handle.tell() - - def write(self, s: Any) -> int: - raise UnsupportedOperation("write") - - def writelines(self, lines: Iterable[Any]) -> None: - raise UnsupportedOperation("writelines") - - -class _ReadContext(ContextManager[_I], Generic[_I]): - """A utility class to handle a context for both a reader and a progress.""" - - def __init__(self, progress: "Progress", reader: _I) -> None: - self.progress = progress - self.reader: _I = reader - - def __enter__(self) -> _I: - self.progress.start() - return self.reader.__enter__() - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.progress.stop() - self.reader.__exit__(exc_type, exc_val, exc_tb) - - -def wrap_file( - file: BinaryIO, - total: int, - *, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[BinaryIO]: - """Read bytes from a file while tracking progress. - - Args: - file (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode. - total (int): Total number of bytes to read. - description (str, optional): Description of task show next to progress bar. Defaults to "Reading". - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - disable (bool, optional): Disable display of progress. - Returns: - ContextManager[BinaryIO]: A context manager yielding a progress reader. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - DownloadColumn(), - TimeRemainingColumn(), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - reader = progress.wrap_file(file, total=total, description=description) - return _ReadContext(progress, reader) - - -@typing.overload -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rt"], Literal["r"]], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[TextIO]: - pass - - -@typing.overload -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Literal["rb"], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> ContextManager[BinaryIO]: - pass - - -def open( - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rb"], Literal["rt"], Literal["r"]] = "r", - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - description: str = "Reading...", - auto_refresh: bool = True, - console: Optional[Console] = None, - transient: bool = False, - get_time: Optional[Callable[[], float]] = None, - refresh_per_second: float = 10, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - disable: bool = False, -) -> Union[ContextManager[BinaryIO], ContextManager[TextIO]]: - """Read bytes from a file while tracking progress. - - Args: - path (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode. - mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt". - buffering (int): The buffering strategy to use, see :func:`io.open`. - encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`. - errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`. - newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open` - total: (int, optional): Total number of bytes to read. Must be provided if reading from a file handle. Default for a path is os.stat(file).st_size. - description (str, optional): Description of task show next to progress bar. Defaults to "Reading". - auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - console (Console, optional): Console to write to. Default creates internal Console instance. - refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - disable (bool, optional): Disable display of progress. - encoding (str, optional): The encoding to use when reading in text mode. - - Returns: - ContextManager[BinaryIO]: A context manager yielding a progress reader. - - """ - - columns: List["ProgressColumn"] = ( - [TextColumn("[progress.description]{task.description}")] if description else [] - ) - columns.extend( - ( - BarColumn( - style=style, - complete_style=complete_style, - finished_style=finished_style, - pulse_style=pulse_style, - ), - DownloadColumn(), - TimeRemainingColumn(), - ) - ) - progress = Progress( - *columns, - auto_refresh=auto_refresh, - console=console, - transient=transient, - get_time=get_time, - refresh_per_second=refresh_per_second or 10, - disable=disable, - ) - - reader = progress.open( - file, - mode=mode, - buffering=buffering, - encoding=encoding, - errors=errors, - newline=newline, - total=total, - description=description, - ) - return _ReadContext(progress, reader) # type: ignore[return-value, type-var] - - -class ProgressColumn(ABC): - """Base class for a widget to use in progress display.""" - - max_refresh: Optional[float] = None - - def __init__(self, table_column: Optional[Column] = None) -> None: - self._table_column = table_column - self._renderable_cache: Dict[TaskID, Tuple[float, RenderableType]] = {} - self._update_time: Optional[float] = None - - def get_table_column(self) -> Column: - """Get a table column, used to build tasks table.""" - return self._table_column or Column() - - def __call__(self, task: "Task") -> RenderableType: - """Called by the Progress object to return a renderable for the given task. - - Args: - task (Task): An object containing information regarding the task. - - Returns: - RenderableType: Anything renderable (including str). - """ - current_time = task.get_time() - if self.max_refresh is not None and not task.completed: - try: - timestamp, renderable = self._renderable_cache[task.id] - except KeyError: - pass - else: - if timestamp + self.max_refresh > current_time: - return renderable - - renderable = self.render(task) - self._renderable_cache[task.id] = (current_time, renderable) - return renderable - - @abstractmethod - def render(self, task: "Task") -> RenderableType: - """Should return a renderable object.""" - - -class RenderableColumn(ProgressColumn): - """A column to insert an arbitrary column. - - Args: - renderable (RenderableType, optional): Any renderable. Defaults to empty string. - """ - - def __init__( - self, renderable: RenderableType = "", *, table_column: Optional[Column] = None - ): - self.renderable = renderable - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> RenderableType: - return self.renderable - - -class SpinnerColumn(ProgressColumn): - """A column with a 'spinner' animation. - - Args: - spinner_name (str, optional): Name of spinner animation. Defaults to "dots". - style (StyleType, optional): Style of spinner. Defaults to "progress.spinner". - speed (float, optional): Speed factor of spinner. Defaults to 1.0. - finished_text (TextType, optional): Text used when task is finished. Defaults to " ". - """ - - def __init__( - self, - spinner_name: str = "dots", - style: Optional[StyleType] = "progress.spinner", - speed: float = 1.0, - finished_text: TextType = " ", - table_column: Optional[Column] = None, - ): - self.spinner = Spinner(spinner_name, style=style, speed=speed) - self.finished_text = ( - Text.from_markup(finished_text) - if isinstance(finished_text, str) - else finished_text - ) - super().__init__(table_column=table_column) - - def set_spinner( - self, - spinner_name: str, - spinner_style: Optional[StyleType] = "progress.spinner", - speed: float = 1.0, - ) -> None: - """Set a new spinner. - - Args: - spinner_name (str): Spinner name, see python -m rich.spinner. - spinner_style (Optional[StyleType], optional): Spinner style. Defaults to "progress.spinner". - speed (float, optional): Speed factor of spinner. Defaults to 1.0. - """ - self.spinner = Spinner(spinner_name, style=spinner_style, speed=speed) - - def render(self, task: "Task") -> RenderableType: - text = ( - self.finished_text - if task.finished - else self.spinner.render(task.get_time()) - ) - return text - - -class TextColumn(ProgressColumn): - """A column containing text.""" - - def __init__( - self, - text_format: str, - style: StyleType = "none", - justify: JustifyMethod = "left", - markup: bool = True, - highlighter: Optional[Highlighter] = None, - table_column: Optional[Column] = None, - ) -> None: - self.text_format = text_format - self.justify: JustifyMethod = justify - self.style = style - self.markup = markup - self.highlighter = highlighter - super().__init__(table_column=table_column or Column(no_wrap=True)) - - def render(self, task: "Task") -> Text: - _text = self.text_format.format(task=task) - if self.markup: - text = Text.from_markup(_text, style=self.style, justify=self.justify) - else: - text = Text(_text, style=self.style, justify=self.justify) - if self.highlighter: - self.highlighter.highlight(text) - return text - - -class BarColumn(ProgressColumn): - """Renders a visual progress bar. - - Args: - bar_width (Optional[int], optional): Width of bar or None for full width. Defaults to 40. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - """ - - def __init__( - self, - bar_width: Optional[int] = 40, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - table_column: Optional[Column] = None, - ) -> None: - self.bar_width = bar_width - self.style = style - self.complete_style = complete_style - self.finished_style = finished_style - self.pulse_style = pulse_style - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> ProgressBar: - """Gets a progress bar widget for a task.""" - return ProgressBar( - total=max(0, task.total) if task.total is not None else None, - completed=max(0, task.completed), - width=None if self.bar_width is None else max(1, self.bar_width), - pulse=not task.started, - animation_time=task.get_time(), - style=self.style, - complete_style=self.complete_style, - finished_style=self.finished_style, - pulse_style=self.pulse_style, - ) - - -class TimeElapsedColumn(ProgressColumn): - """Renders time elapsed.""" - - def render(self, task: "Task") -> Text: - """Show time elapsed.""" - elapsed = task.finished_time if task.finished else task.elapsed - if elapsed is None: - return Text("-:--:--", style="progress.elapsed") - delta = timedelta(seconds=max(0, int(elapsed))) - return Text(str(delta), style="progress.elapsed") - - -class TaskProgressColumn(TextColumn): - """Show task progress as a percentage. - - Args: - text_format (str, optional): Format for percentage display. Defaults to "[progress.percentage]{task.percentage:>3.0f}%". - text_format_no_percentage (str, optional): Format if percentage is unknown. Defaults to "". - style (StyleType, optional): Style of output. Defaults to "none". - justify (JustifyMethod, optional): Text justification. Defaults to "left". - markup (bool, optional): Enable markup. Defaults to True. - highlighter (Optional[Highlighter], optional): Highlighter to apply to output. Defaults to None. - table_column (Optional[Column], optional): Table Column to use. Defaults to None. - show_speed (bool, optional): Show speed if total is unknown. Defaults to False. - """ - - def __init__( - self, - text_format: str = "[progress.percentage]{task.percentage:>3.0f}%", - text_format_no_percentage: str = "", - style: StyleType = "none", - justify: JustifyMethod = "left", - markup: bool = True, - highlighter: Optional[Highlighter] = None, - table_column: Optional[Column] = None, - show_speed: bool = False, - ) -> None: - self.text_format_no_percentage = text_format_no_percentage - self.show_speed = show_speed - super().__init__( - text_format=text_format, - style=style, - justify=justify, - markup=markup, - highlighter=highlighter, - table_column=table_column, - ) - - @classmethod - def render_speed(cls, speed: Optional[float]) -> Text: - """Render the speed in iterations per second. - - Args: - task (Task): A Task object. - - Returns: - Text: Text object containing the task speed. - """ - if speed is None: - return Text("", style="progress.percentage") - unit, suffix = filesize.pick_unit_and_suffix( - int(speed), - ["", "×10³", "×10⁶", "×10⁹", "×10¹²"], - 1000, - ) - data_speed = speed / unit - return Text(f"{data_speed:.1f}{suffix} it/s", style="progress.percentage") - - def render(self, task: "Task") -> Text: - if task.total is None and self.show_speed: - return self.render_speed(task.finished_speed or task.speed) - text_format = ( - self.text_format_no_percentage if task.total is None else self.text_format - ) - _text = text_format.format(task=task) - if self.markup: - text = Text.from_markup(_text, style=self.style, justify=self.justify) - else: - text = Text(_text, style=self.style, justify=self.justify) - if self.highlighter: - self.highlighter.highlight(text) - return text - - -class TimeRemainingColumn(ProgressColumn): - """Renders estimated time remaining. - - Args: - compact (bool, optional): Render MM:SS when time remaining is less than an hour. Defaults to False. - elapsed_when_finished (bool, optional): Render time elapsed when the task is finished. Defaults to False. - """ - - # Only refresh twice a second to prevent jitter - max_refresh = 0.5 - - def __init__( - self, - compact: bool = False, - elapsed_when_finished: bool = False, - table_column: Optional[Column] = None, - ): - self.compact = compact - self.elapsed_when_finished = elapsed_when_finished - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Show time remaining.""" - if self.elapsed_when_finished and task.finished: - task_time = task.finished_time - style = "progress.elapsed" - else: - task_time = task.time_remaining - style = "progress.remaining" - - if task.total is None: - return Text("", style=style) - - if task_time is None: - return Text("--:--" if self.compact else "-:--:--", style=style) - - # Based on https://github.com/tqdm/tqdm/blob/master/tqdm/std.py - minutes, seconds = divmod(int(task_time), 60) - hours, minutes = divmod(minutes, 60) - - if self.compact and not hours: - formatted = f"{minutes:02d}:{seconds:02d}" - else: - formatted = f"{hours:d}:{minutes:02d}:{seconds:02d}" - - return Text(formatted, style=style) - - -class FileSizeColumn(ProgressColumn): - """Renders completed filesize.""" - - def render(self, task: "Task") -> Text: - """Show data completed.""" - data_size = filesize.decimal(int(task.completed)) - return Text(data_size, style="progress.filesize") - - -class TotalFileSizeColumn(ProgressColumn): - """Renders total filesize.""" - - def render(self, task: "Task") -> Text: - """Show data completed.""" - data_size = filesize.decimal(int(task.total)) if task.total is not None else "" - return Text(data_size, style="progress.filesize.total") - - -class MofNCompleteColumn(ProgressColumn): - """Renders completed count/total, e.g. ' 10/1000'. - - Best for bounded tasks with int quantities. - - Space pads the completed count so that progress length does not change as task progresses - past powers of 10. - - Args: - separator (str, optional): Text to separate completed and total values. Defaults to "/". - """ - - def __init__(self, separator: str = "/", table_column: Optional[Column] = None): - self.separator = separator - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Show completed/total.""" - completed = int(task.completed) - total = int(task.total) if task.total is not None else "?" - total_width = len(str(total)) - return Text( - f"{completed:{total_width}d}{self.separator}{total}", - style="progress.download", - ) - - -class DownloadColumn(ProgressColumn): - """Renders file size downloaded and total, e.g. '0.5/2.3 GB'. - - Args: - binary_units (bool, optional): Use binary units, KiB, MiB etc. Defaults to False. - """ - - def __init__( - self, binary_units: bool = False, table_column: Optional[Column] = None - ) -> None: - self.binary_units = binary_units - super().__init__(table_column=table_column) - - def render(self, task: "Task") -> Text: - """Calculate common unit for completed and total.""" - completed = int(task.completed) - - unit_and_suffix_calculation_base = ( - int(task.total) if task.total is not None else completed - ) - if self.binary_units: - unit, suffix = filesize.pick_unit_and_suffix( - unit_and_suffix_calculation_base, - ["bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"], - 1024, - ) - else: - unit, suffix = filesize.pick_unit_and_suffix( - unit_and_suffix_calculation_base, - ["bytes", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"], - 1000, - ) - precision = 0 if unit == 1 else 1 - - completed_ratio = completed / unit - completed_str = f"{completed_ratio:,.{precision}f}" - - if task.total is not None: - total = int(task.total) - total_ratio = total / unit - total_str = f"{total_ratio:,.{precision}f}" - else: - total_str = "?" - - download_status = f"{completed_str}/{total_str} {suffix}" - download_text = Text(download_status, style="progress.download") - return download_text - - -class TransferSpeedColumn(ProgressColumn): - """Renders human readable transfer speed.""" - - def render(self, task: "Task") -> Text: - """Show data transfer speed.""" - speed = task.finished_speed or task.speed - if speed is None: - return Text("?", style="progress.data.speed") - data_speed = filesize.decimal(int(speed)) - return Text(f"{data_speed}/s", style="progress.data.speed") - - -class ProgressSample(NamedTuple): - """Sample of progress for a given time.""" - - timestamp: float - """Timestamp of sample.""" - completed: float - """Number of steps completed.""" - - -@dataclass -class Task: - """Information regarding a progress task. - - This object should be considered read-only outside of the :class:`~Progress` class. - - """ - - id: TaskID - """Task ID associated with this task (used in Progress methods).""" - - description: str - """str: Description of the task.""" - - total: Optional[float] - """Optional[float]: Total number of steps in this task.""" - - completed: float - """float: Number of steps completed""" - - _get_time: GetTimeCallable - """Callable to get the current time.""" - - finished_time: Optional[float] = None - """float: Time task was finished.""" - - visible: bool = True - """bool: Indicates if this task is visible in the progress display.""" - - fields: Dict[str, Any] = field(default_factory=dict) - """dict: Arbitrary fields passed in via Progress.update.""" - - start_time: Optional[float] = field(default=None, init=False, repr=False) - """Optional[float]: Time this task was started, or None if not started.""" - - stop_time: Optional[float] = field(default=None, init=False, repr=False) - """Optional[float]: Time this task was stopped, or None if not stopped.""" - - finished_speed: Optional[float] = None - """Optional[float]: The last speed for a finished task.""" - - _progress: Deque[ProgressSample] = field( - default_factory=lambda: deque(maxlen=1000), init=False, repr=False - ) - - _lock: RLock = field(repr=False, default_factory=RLock) - """Thread lock.""" - - def get_time(self) -> float: - """float: Get the current time, in seconds.""" - return self._get_time() - - @property - def started(self) -> bool: - """bool: Check if the task as started.""" - return self.start_time is not None - - @property - def remaining(self) -> Optional[float]: - """Optional[float]: Get the number of steps remaining, if a non-None total was set.""" - if self.total is None: - return None - return self.total - self.completed - - @property - def elapsed(self) -> Optional[float]: - """Optional[float]: Time elapsed since task was started, or ``None`` if the task hasn't started.""" - if self.start_time is None: - return None - if self.stop_time is not None: - return self.stop_time - self.start_time - return self.get_time() - self.start_time - - @property - def finished(self) -> bool: - """Check if the task has finished.""" - return self.finished_time is not None - - @property - def percentage(self) -> float: - """float: Get progress of task as a percentage. If a None total was set, returns 0""" - if not self.total: - return 0.0 - completed = (self.completed / self.total) * 100.0 - completed = min(100.0, max(0.0, completed)) - return completed - - @property - def speed(self) -> Optional[float]: - """Optional[float]: Get the estimated speed in steps per second.""" - if self.start_time is None: - return None - with self._lock: - progress = self._progress - if not progress: - return None - total_time = progress[-1].timestamp - progress[0].timestamp - if total_time == 0: - return None - iter_progress = iter(progress) - next(iter_progress) - total_completed = sum(sample.completed for sample in iter_progress) - speed = total_completed / total_time - return speed - - @property - def time_remaining(self) -> Optional[float]: - """Optional[float]: Get estimated time to completion, or ``None`` if no data.""" - if self.finished: - return 0.0 - speed = self.speed - if not speed: - return None - remaining = self.remaining - if remaining is None: - return None - estimate = ceil(remaining / speed) - return estimate - - def _reset(self) -> None: - """Reset progress.""" - self._progress.clear() - self.finished_time = None - self.finished_speed = None - - -class Progress(JupyterMixin): - """Renders an auto-updating progress bar(s). - - Args: - console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout. - auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()`. - refresh_per_second (Optional[float], optional): Number of times per second to refresh the progress information or None to use default (10). Defaults to None. - speed_estimate_period: (float, optional): Period (in seconds) used to calculate the speed estimate. Defaults to 30. - transient: (bool, optional): Clear the progress on exit. Defaults to False. - redirect_stdout: (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True. - redirect_stderr: (bool, optional): Enable redirection of stderr. Defaults to True. - get_time: (Callable, optional): A callable that gets the current time, or None to use Console.get_time. Defaults to None. - disable (bool, optional): Disable progress display. Defaults to False - expand (bool, optional): Expand tasks table to fit width. Defaults to False. - """ - - def __init__( - self, - *columns: Union[str, ProgressColumn], - console: Optional[Console] = None, - auto_refresh: bool = True, - refresh_per_second: float = 10, - speed_estimate_period: float = 30.0, - transient: bool = False, - redirect_stdout: bool = True, - redirect_stderr: bool = True, - get_time: Optional[GetTimeCallable] = None, - disable: bool = False, - expand: bool = False, - ) -> None: - assert refresh_per_second > 0, "refresh_per_second must be > 0" - self._lock = RLock() - self.columns = columns or self.get_default_columns() - self.speed_estimate_period = speed_estimate_period - - self.disable = disable - self.expand = expand - self._tasks: Dict[TaskID, Task] = {} - self._task_index: TaskID = TaskID(0) - self.live = Live( - console=console or get_console(), - auto_refresh=auto_refresh, - refresh_per_second=refresh_per_second, - transient=transient, - redirect_stdout=redirect_stdout, - redirect_stderr=redirect_stderr, - get_renderable=self.get_renderable, - ) - self.get_time = get_time or self.console.get_time - self.print = self.console.print - self.log = self.console.log - - @classmethod - def get_default_columns(cls) -> Tuple[ProgressColumn, ...]: - """Get the default columns used for a new Progress instance: - - a text column for the description (TextColumn) - - the bar itself (BarColumn) - - a text column showing completion percentage (TextColumn) - - an estimated-time-remaining column (TimeRemainingColumn) - If the Progress instance is created without passing a columns argument, - the default columns defined here will be used. - - You can also create a Progress instance using custom columns before - and/or after the defaults, as in this example: - - progress = Progress( - SpinnerColumn(), - *Progress.get_default_columns(), - "Elapsed:", - TimeElapsedColumn(), - ) - - This code shows the creation of a Progress display, containing - a spinner to the left, the default columns, and a labeled elapsed - time column. - """ - return ( - TextColumn("[progress.description]{task.description}"), - BarColumn(), - TaskProgressColumn(), - TimeRemainingColumn(), - ) - - @property - def console(self) -> Console: - return self.live.console - - @property - def tasks(self) -> List[Task]: - """Get a list of Task instances.""" - with self._lock: - return list(self._tasks.values()) - - @property - def task_ids(self) -> List[TaskID]: - """A list of task IDs.""" - with self._lock: - return list(self._tasks.keys()) - - @property - def finished(self) -> bool: - """Check if all tasks have been completed.""" - with self._lock: - if not self._tasks: - return True - return all(task.finished for task in self._tasks.values()) - - def start(self) -> None: - """Start the progress display.""" - if not self.disable: - self.live.start(refresh=True) - - def stop(self) -> None: - """Stop the progress display.""" - self.live.stop() - if not self.console.is_interactive and not self.console.is_jupyter: - self.console.print() - - def __enter__(self) -> Self: - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - def track( - self, - sequence: Iterable[ProgressType], - total: Optional[float] = None, - completed: int = 0, - task_id: Optional[TaskID] = None, - description: str = "Working...", - update_period: float = 0.1, - ) -> Iterable[ProgressType]: - """Track progress by iterating over a sequence. - - You can also track progress of an iterable, which might require that you additionally specify ``total``. - - Args: - sequence (Iterable[ProgressType]): Values you want to iterate over and track progress. - total: (float, optional): Total number of steps. Default is len(sequence). - completed (int, optional): Number of steps completed so far. Defaults to 0. - task_id: (TaskID): Task to track. Default is new task. - description: (str, optional): Description of task, if new task is created. - update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1. - - Returns: - Iterable[ProgressType]: An iterable of values taken from the provided sequence. - """ - if total is None: - total = float(length_hint(sequence)) or None - - if task_id is None: - task_id = self.add_task(description, total=total, completed=completed) - else: - self.update(task_id, total=total, completed=completed) - - if self.live.auto_refresh: - with _TrackThread(self, task_id, update_period) as track_thread: - for value in sequence: - yield value - track_thread.completed += 1 - else: - advance = self.advance - refresh = self.refresh - for value in sequence: - yield value - advance(task_id, 1) - refresh() - - def wrap_file( - self, - file: BinaryIO, - total: Optional[int] = None, - *, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> BinaryIO: - """Track progress file reading from a binary file. - - Args: - file (BinaryIO): A file-like object opened in binary mode. - total (int, optional): Total number of bytes to read. This must be provided unless a task with a total is also given. - task_id (TaskID): Task to track. Default is new task. - description (str, optional): Description of task, if new task is created. - - Returns: - BinaryIO: A readable file-like object in binary mode. - - Raises: - ValueError: When no total value can be extracted from the arguments or the task. - """ - # attempt to recover the total from the task - total_bytes: Optional[float] = None - if total is not None: - total_bytes = total - elif task_id is not None: - with self._lock: - total_bytes = self._tasks[task_id].total - if total_bytes is None: - raise ValueError( - f"unable to get the total number of bytes, please specify 'total'" - ) - - # update total of task or create new task - if task_id is None: - task_id = self.add_task(description, total=total_bytes) - else: - self.update(task_id, total=total_bytes) - - return _Reader(file, self, task_id, close_handle=False) - - @typing.overload - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Literal["rb"], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> BinaryIO: - pass - - @typing.overload - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["r"], Literal["rt"]], - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> TextIO: - pass - - def open( - self, - file: Union[str, "PathLike[str]", bytes], - mode: Union[Literal["rb"], Literal["rt"], Literal["r"]] = "r", - buffering: int = -1, - encoding: Optional[str] = None, - errors: Optional[str] = None, - newline: Optional[str] = None, - *, - total: Optional[int] = None, - task_id: Optional[TaskID] = None, - description: str = "Reading...", - ) -> Union[BinaryIO, TextIO]: - """Track progress while reading from a binary file. - - Args: - path (Union[str, PathLike[str]]): The path to the file to read. - mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt". - buffering (int): The buffering strategy to use, see :func:`io.open`. - encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`. - errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`. - newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open`. - total (int, optional): Total number of bytes to read. If none given, os.stat(path).st_size is used. - task_id (TaskID): Task to track. Default is new task. - description (str, optional): Description of task, if new task is created. - - Returns: - BinaryIO: A readable file-like object in binary mode. - - Raises: - ValueError: When an invalid mode is given. - """ - # normalize the mode (always rb, rt) - _mode = "".join(sorted(mode, reverse=False)) - if _mode not in ("br", "rt", "r"): - raise ValueError(f"invalid mode {mode!r}") - - # patch buffering to provide the same behaviour as the builtin `open` - line_buffering = buffering == 1 - if _mode == "br" and buffering == 1: - warnings.warn( - "line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used", - RuntimeWarning, - ) - buffering = -1 - elif _mode in ("rt", "r"): - if buffering == 0: - raise ValueError("can't have unbuffered text I/O") - elif buffering == 1: - buffering = -1 - - # attempt to get the total with `os.stat` - if total is None: - total = stat(file).st_size - - # update total of task or create new task - if task_id is None: - task_id = self.add_task(description, total=total) - else: - self.update(task_id, total=total) - - # open the file in binary mode, - handle = io.open(file, "rb", buffering=buffering) - reader = _Reader(handle, self, task_id, close_handle=True) - - # wrap the reader in a `TextIOWrapper` if text mode - if mode in ("r", "rt"): - return io.TextIOWrapper( - reader, - encoding=encoding, - errors=errors, - newline=newline, - line_buffering=line_buffering, - ) - - return reader - - def start_task(self, task_id: TaskID) -> None: - """Start a task. - - Starts a task (used when calculating elapsed time). You may need to call this manually, - if you called ``add_task`` with ``start=False``. - - Args: - task_id (TaskID): ID of task. - """ - with self._lock: - task = self._tasks[task_id] - if task.start_time is None: - task.start_time = self.get_time() - - def stop_task(self, task_id: TaskID) -> None: - """Stop a task. - - This will freeze the elapsed time on the task. - - Args: - task_id (TaskID): ID of task. - """ - with self._lock: - task = self._tasks[task_id] - current_time = self.get_time() - if task.start_time is None: - task.start_time = current_time - task.stop_time = current_time - - def update( - self, - task_id: TaskID, - *, - total: Optional[float] = None, - completed: Optional[float] = None, - advance: Optional[float] = None, - description: Optional[str] = None, - visible: Optional[bool] = None, - refresh: bool = False, - **fields: Any, - ) -> None: - """Update information associated with a task. - - Args: - task_id (TaskID): Task id (returned by add_task). - total (float, optional): Updates task.total if not None. - completed (float, optional): Updates task.completed if not None. - advance (float, optional): Add a value to task.completed if not None. - description (str, optional): Change task description if not None. - visible (bool, optional): Set visible flag if not None. - refresh (bool): Force a refresh of progress information. Default is False. - **fields (Any): Additional data fields required for rendering. - """ - with self._lock: - task = self._tasks[task_id] - completed_start = task.completed - - if total is not None and total != task.total: - task.total = total - task._reset() - if advance is not None: - task.completed += advance - if completed is not None: - task.completed = completed - if description is not None: - task.description = description - if visible is not None: - task.visible = visible - task.fields.update(fields) - update_completed = task.completed - completed_start - - current_time = self.get_time() - old_sample_time = current_time - self.speed_estimate_period - _progress = task._progress - - popleft = _progress.popleft - while _progress and _progress[0].timestamp < old_sample_time: - popleft() - if update_completed > 0: - _progress.append(ProgressSample(current_time, update_completed)) - if ( - task.total is not None - and task.completed >= task.total - and task.finished_time is None - ): - task.finished_time = task.elapsed - - if refresh: - self.refresh() - - def reset( - self, - task_id: TaskID, - *, - start: bool = True, - total: Optional[float] = None, - completed: int = 0, - visible: Optional[bool] = None, - description: Optional[str] = None, - **fields: Any, - ) -> None: - """Reset a task so completed is 0 and the clock is reset. - - Args: - task_id (TaskID): ID of task. - start (bool, optional): Start the task after reset. Defaults to True. - total (float, optional): New total steps in task, or None to use current total. Defaults to None. - completed (int, optional): Number of steps completed. Defaults to 0. - visible (bool, optional): Enable display of the task. Defaults to True. - description (str, optional): Change task description if not None. Defaults to None. - **fields (str): Additional data fields required for rendering. - """ - current_time = self.get_time() - with self._lock: - task = self._tasks[task_id] - task._reset() - task.start_time = current_time if start else None - if total is not None: - task.total = total - task.completed = completed - if visible is not None: - task.visible = visible - if fields: - task.fields = fields - if description is not None: - task.description = description - task.finished_time = None - self.refresh() - - def advance(self, task_id: TaskID, advance: float = 1) -> None: - """Advance task by a number of steps. - - Args: - task_id (TaskID): ID of task. - advance (float): Number of steps to advance. Default is 1. - """ - current_time = self.get_time() - with self._lock: - task = self._tasks[task_id] - completed_start = task.completed - task.completed += advance - update_completed = task.completed - completed_start - old_sample_time = current_time - self.speed_estimate_period - _progress = task._progress - - popleft = _progress.popleft - while _progress and _progress[0].timestamp < old_sample_time: - popleft() - while len(_progress) > 1000: - popleft() - _progress.append(ProgressSample(current_time, update_completed)) - if ( - task.total is not None - and task.completed >= task.total - and task.finished_time is None - ): - task.finished_time = task.elapsed - task.finished_speed = task.speed - - def refresh(self) -> None: - """Refresh (render) the progress information.""" - if not self.disable and self.live.is_started: - self.live.refresh() - - def get_renderable(self) -> RenderableType: - """Get a renderable for the progress display.""" - renderable = Group(*self.get_renderables()) - return renderable - - def get_renderables(self) -> Iterable[RenderableType]: - """Get a number of renderables for the progress display.""" - table = self.make_tasks_table(self.tasks) - yield table - - def make_tasks_table(self, tasks: Iterable[Task]) -> Table: - """Get a table to render the Progress display. - - Args: - tasks (Iterable[Task]): An iterable of Task instances, one per row of the table. - - Returns: - Table: A table instance. - """ - table_columns = ( - ( - Column(no_wrap=True) - if isinstance(_column, str) - else _column.get_table_column().copy() - ) - for _column in self.columns - ) - table = Table.grid(*table_columns, padding=(0, 1), expand=self.expand) - - for task in tasks: - if task.visible: - table.add_row( - *( - ( - column.format(task=task) - if isinstance(column, str) - else column(task) - ) - for column in self.columns - ) - ) - return table - - def __rich__(self) -> RenderableType: - """Makes the Progress class itself renderable.""" - with self._lock: - return self.get_renderable() - - def add_task( - self, - description: str, - start: bool = True, - total: Optional[float] = 100.0, - completed: int = 0, - visible: bool = True, - **fields: Any, - ) -> TaskID: - """Add a new 'task' to the Progress display. - - Args: - description (str): A description of the task. - start (bool, optional): Start the task immediately (to calculate elapsed time). If set to False, - you will need to call `start` manually. Defaults to True. - total (float, optional): Number of total steps in the progress if known. - Set to None to render a pulsing animation. Defaults to 100. - completed (int, optional): Number of steps completed so far. Defaults to 0. - visible (bool, optional): Enable display of the task. Defaults to True. - **fields (str): Additional data fields required for rendering. - - Returns: - TaskID: An ID you can use when calling `update`. - """ - with self._lock: - task = Task( - self._task_index, - description, - total, - completed, - visible=visible, - fields=fields, - _get_time=self.get_time, - _lock=self._lock, - ) - self._tasks[self._task_index] = task - if start: - self.start_task(self._task_index) - new_task_index = self._task_index - self._task_index = TaskID(int(self._task_index) + 1) - self.refresh() - return new_task_index - - def remove_task(self, task_id: TaskID) -> None: - """Delete a task if it exists. - - Args: - task_id (TaskID): A task ID. - - """ - with self._lock: - del self._tasks[task_id] - - -if __name__ == "__main__": # pragma: no coverage - import random - import time - - from .panel import Panel - from .rule import Rule - from .syntax import Syntax - from .table import Table - - syntax = Syntax( - '''def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]: - """Iterate and generate a tuple with a flag for last value.""" - iter_values = iter(values) - try: - previous_value = next(iter_values) - except StopIteration: - return - for value in iter_values: - yield False, previous_value - previous_value = value - yield True, previous_value''', - "python", - line_numbers=True, - ) - - table = Table("foo", "bar", "baz") - table.add_row("1", "2", "3") - - progress_renderables = [ - "Text may be printed while the progress bars are rendering.", - Panel("In fact, [i]any[/i] renderable will work"), - "Such as [magenta]tables[/]...", - table, - "Pretty printed structures...", - {"type": "example", "text": "Pretty printed"}, - "Syntax...", - syntax, - Rule("Give it a try!"), - ] - - from itertools import cycle - - examples = cycle(progress_renderables) - - console = Console(record=True) - - with Progress( - SpinnerColumn(), - *Progress.get_default_columns(), - TimeElapsedColumn(), - console=console, - transient=False, - ) as progress: - task1 = progress.add_task("[red]Downloading", total=1000) - task2 = progress.add_task("[green]Processing", total=1000) - task3 = progress.add_task("[yellow]Thinking", total=None) - - while not progress.finished: - progress.update(task1, advance=0.5) - progress.update(task2, advance=0.3) - time.sleep(0.01) - if random.randint(0, 100) < 1: - progress.log(next(examples)) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress_bar.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress_bar.py deleted file mode 100644 index 41794f767..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/progress_bar.py +++ /dev/null @@ -1,223 +0,0 @@ -import math -from functools import lru_cache -from time import monotonic -from typing import Iterable, List, Optional - -from .color import Color, blend_rgb -from .color_triplet import ColorTriplet -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleType - -# Number of characters before 'pulse' animation repeats -PULSE_SIZE = 20 - - -class ProgressBar(JupyterMixin): - """Renders a (progress) bar. Used by rich.progress. - - Args: - total (float, optional): Number of steps in the bar. Defaults to 100. Set to None to render a pulsing animation. - completed (float, optional): Number of steps completed. Defaults to 0. - width (int, optional): Width of the bar, or ``None`` for maximum width. Defaults to None. - pulse (bool, optional): Enable pulse effect. Defaults to False. Will pulse if a None total was passed. - style (StyleType, optional): Style for the bar background. Defaults to "bar.back". - complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete". - finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished". - pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse". - animation_time (Optional[float], optional): Time in seconds to use for animation, or None to use system time. - """ - - def __init__( - self, - total: Optional[float] = 100.0, - completed: float = 0, - width: Optional[int] = None, - pulse: bool = False, - style: StyleType = "bar.back", - complete_style: StyleType = "bar.complete", - finished_style: StyleType = "bar.finished", - pulse_style: StyleType = "bar.pulse", - animation_time: Optional[float] = None, - ): - self.total = total - self.completed = completed - self.width = width - self.pulse = pulse - self.style = style - self.complete_style = complete_style - self.finished_style = finished_style - self.pulse_style = pulse_style - self.animation_time = animation_time - - self._pulse_segments: Optional[List[Segment]] = None - - def __repr__(self) -> str: - return f"<Bar {self.completed!r} of {self.total!r}>" - - @property - def percentage_completed(self) -> Optional[float]: - """Calculate percentage complete.""" - if self.total is None: - return None - completed = (self.completed / self.total) * 100.0 - completed = min(100, max(0.0, completed)) - return completed - - @lru_cache(maxsize=16) - def _get_pulse_segments( - self, - fore_style: Style, - back_style: Style, - color_system: str, - no_color: bool, - ascii: bool = False, - ) -> List[Segment]: - """Get a list of segments to render a pulse animation. - - Returns: - List[Segment]: A list of segments, one segment per character. - """ - bar = "-" if ascii else "━" - segments: List[Segment] = [] - if color_system not in ("standard", "eight_bit", "truecolor") or no_color: - segments += [Segment(bar, fore_style)] * (PULSE_SIZE // 2) - segments += [Segment(" " if no_color else bar, back_style)] * ( - PULSE_SIZE - (PULSE_SIZE // 2) - ) - return segments - - append = segments.append - fore_color = ( - fore_style.color.get_truecolor() - if fore_style.color - else ColorTriplet(255, 0, 255) - ) - back_color = ( - back_style.color.get_truecolor() - if back_style.color - else ColorTriplet(0, 0, 0) - ) - cos = math.cos - pi = math.pi - _Segment = Segment - _Style = Style - from_triplet = Color.from_triplet - - for index in range(PULSE_SIZE): - position = index / PULSE_SIZE - fade = 0.5 + cos(position * pi * 2) / 2.0 - color = blend_rgb(fore_color, back_color, cross_fade=fade) - append(_Segment(bar, _Style(color=from_triplet(color)))) - return segments - - def update(self, completed: float, total: Optional[float] = None) -> None: - """Update progress with new values. - - Args: - completed (float): Number of steps completed. - total (float, optional): Total number of steps, or ``None`` to not change. Defaults to None. - """ - self.completed = completed - self.total = total if total is not None else self.total - - def _render_pulse( - self, console: Console, width: int, ascii: bool = False - ) -> Iterable[Segment]: - """Renders the pulse animation. - - Args: - console (Console): Console instance. - width (int): Width in characters of pulse animation. - - Returns: - RenderResult: [description] - - Yields: - Iterator[Segment]: Segments to render pulse - """ - fore_style = console.get_style(self.pulse_style, default="white") - back_style = console.get_style(self.style, default="black") - - pulse_segments = self._get_pulse_segments( - fore_style, back_style, console.color_system, console.no_color, ascii=ascii - ) - segment_count = len(pulse_segments) - current_time = ( - monotonic() if self.animation_time is None else self.animation_time - ) - segments = pulse_segments * (int(width / segment_count) + 2) - offset = int(-current_time * 15) % segment_count - segments = segments[offset : offset + width] - yield from segments - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = min(self.width or options.max_width, options.max_width) - ascii = options.legacy_windows or options.ascii_only - should_pulse = self.pulse or self.total is None - if should_pulse: - yield from self._render_pulse(console, width, ascii=ascii) - return - - completed: Optional[float] = ( - min(self.total, max(0, self.completed)) if self.total is not None else None - ) - - bar = "-" if ascii else "━" - half_bar_right = " " if ascii else "╸" - half_bar_left = " " if ascii else "╺" - complete_halves = ( - int(width * 2 * completed / self.total) - if self.total and completed is not None - else width * 2 - ) - bar_count = complete_halves // 2 - half_bar_count = complete_halves % 2 - style = console.get_style(self.style) - is_finished = self.total is None or self.completed >= self.total - complete_style = console.get_style( - self.finished_style if is_finished else self.complete_style - ) - _Segment = Segment - if bar_count: - yield _Segment(bar * bar_count, complete_style) - if half_bar_count: - yield _Segment(half_bar_right * half_bar_count, complete_style) - - if not console.no_color: - remaining_bars = width - bar_count - half_bar_count - if remaining_bars and console.color_system is not None: - if not half_bar_count and bar_count: - yield _Segment(half_bar_left, style) - remaining_bars -= 1 - if remaining_bars: - yield _Segment(bar * remaining_bars, style) - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return ( - Measurement(self.width, self.width) - if self.width is not None - else Measurement(4, options.max_width) - ) - - -if __name__ == "__main__": # pragma: no cover - console = Console() - bar = ProgressBar(width=50, total=100) - - import time - - console.show_cursor(False) - for n in range(0, 101, 1): - bar.update(n) - console.print(bar) - console.file.write("\r") - time.sleep(0.05) - console.show_cursor(True) - console.print() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/prompt.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/prompt.py deleted file mode 100644 index fccb70dbd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/prompt.py +++ /dev/null @@ -1,400 +0,0 @@ -from typing import Any, Generic, List, Optional, TextIO, TypeVar, Union, overload - -from . import get_console -from .console import Console -from .text import Text, TextType - -PromptType = TypeVar("PromptType") -DefaultType = TypeVar("DefaultType") - - -class PromptError(Exception): - """Exception base class for prompt related errors.""" - - -class InvalidResponse(PromptError): - """Exception to indicate a response was invalid. Raise this within process_response() to indicate an error - and provide an error message. - - Args: - message (Union[str, Text]): Error message. - """ - - def __init__(self, message: TextType) -> None: - self.message = message - - def __rich__(self) -> TextType: - return self.message - - -class PromptBase(Generic[PromptType]): - """Ask the user for input until a valid response is received. This is the base class, see one of - the concrete classes for examples. - - Args: - prompt (TextType, optional): Prompt text. Defaults to "". - console (Console, optional): A Console instance or None to use global console. Defaults to None. - password (bool, optional): Enable password input. Defaults to False. - choices (List[str], optional): A list of valid choices. Defaults to None. - case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True. - show_default (bool, optional): Show default in prompt. Defaults to True. - show_choices (bool, optional): Show choices in prompt. Defaults to True. - """ - - response_type: type = str - - validate_error_message = "[prompt.invalid]Please enter a valid value" - illegal_choice_message = ( - "[prompt.invalid.choice]Please select one of the available options" - ) - prompt_suffix = ": " - - choices: Optional[List[str]] = None - - def __init__( - self, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - ) -> None: - self.console = console or get_console() - self.prompt = ( - Text.from_markup(prompt, style="prompt") - if isinstance(prompt, str) - else prompt - ) - self.password = password - if choices is not None: - self.choices = choices - self.case_sensitive = case_sensitive - self.show_default = show_default - self.show_choices = show_choices - - @classmethod - @overload - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - default: DefaultType, - stream: Optional[TextIO] = None, - ) -> Union[DefaultType, PromptType]: - ... - - @classmethod - @overload - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - stream: Optional[TextIO] = None, - ) -> PromptType: - ... - - @classmethod - def ask( - cls, - prompt: TextType = "", - *, - console: Optional[Console] = None, - password: bool = False, - choices: Optional[List[str]] = None, - case_sensitive: bool = True, - show_default: bool = True, - show_choices: bool = True, - default: Any = ..., - stream: Optional[TextIO] = None, - ) -> Any: - """Shortcut to construct and run a prompt loop and return the result. - - Example: - >>> filename = Prompt.ask("Enter a filename") - - Args: - prompt (TextType, optional): Prompt text. Defaults to "". - console (Console, optional): A Console instance or None to use global console. Defaults to None. - password (bool, optional): Enable password input. Defaults to False. - choices (List[str], optional): A list of valid choices. Defaults to None. - case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True. - show_default (bool, optional): Show default in prompt. Defaults to True. - show_choices (bool, optional): Show choices in prompt. Defaults to True. - stream (TextIO, optional): Optional text file open for reading to get input. Defaults to None. - """ - _prompt = cls( - prompt, - console=console, - password=password, - choices=choices, - case_sensitive=case_sensitive, - show_default=show_default, - show_choices=show_choices, - ) - return _prompt(default=default, stream=stream) - - def render_default(self, default: DefaultType) -> Text: - """Turn the supplied default in to a Text instance. - - Args: - default (DefaultType): Default value. - - Returns: - Text: Text containing rendering of default value. - """ - return Text(f"({default})", "prompt.default") - - def make_prompt(self, default: DefaultType) -> Text: - """Make prompt text. - - Args: - default (DefaultType): Default value. - - Returns: - Text: Text to display in prompt. - """ - prompt = self.prompt.copy() - prompt.end = "" - - if self.show_choices and self.choices: - _choices = "/".join(self.choices) - choices = f"[{_choices}]" - prompt.append(" ") - prompt.append(choices, "prompt.choices") - - if ( - default != ... - and self.show_default - and isinstance(default, (str, self.response_type)) - ): - prompt.append(" ") - _default = self.render_default(default) - prompt.append(_default) - - prompt.append(self.prompt_suffix) - - return prompt - - @classmethod - def get_input( - cls, - console: Console, - prompt: TextType, - password: bool, - stream: Optional[TextIO] = None, - ) -> str: - """Get input from user. - - Args: - console (Console): Console instance. - prompt (TextType): Prompt text. - password (bool): Enable password entry. - - Returns: - str: String from user. - """ - return console.input(prompt, password=password, stream=stream) - - def check_choice(self, value: str) -> bool: - """Check value is in the list of valid choices. - - Args: - value (str): Value entered by user. - - Returns: - bool: True if choice was valid, otherwise False. - """ - assert self.choices is not None - if self.case_sensitive: - return value.strip() in self.choices - return value.strip().lower() in [choice.lower() for choice in self.choices] - - def process_response(self, value: str) -> PromptType: - """Process response from user, convert to prompt type. - - Args: - value (str): String typed by user. - - Raises: - InvalidResponse: If ``value`` is invalid. - - Returns: - PromptType: The value to be returned from ask method. - """ - value = value.strip() - try: - return_value: PromptType = self.response_type(value) - except ValueError: - raise InvalidResponse(self.validate_error_message) - - if self.choices is not None: - if not self.check_choice(value): - raise InvalidResponse(self.illegal_choice_message) - - if not self.case_sensitive: - # return the original choice, not the lower case version - return_value = self.response_type( - self.choices[ - [choice.lower() for choice in self.choices].index(value.lower()) - ] - ) - return return_value - - def on_validate_error(self, value: str, error: InvalidResponse) -> None: - """Called to handle validation error. - - Args: - value (str): String entered by user. - error (InvalidResponse): Exception instance the initiated the error. - """ - self.console.print(error) - - def pre_prompt(self) -> None: - """Hook to display something before the prompt.""" - - @overload - def __call__(self, *, stream: Optional[TextIO] = None) -> PromptType: - ... - - @overload - def __call__( - self, *, default: DefaultType, stream: Optional[TextIO] = None - ) -> Union[PromptType, DefaultType]: - ... - - def __call__(self, *, default: Any = ..., stream: Optional[TextIO] = None) -> Any: - """Run the prompt loop. - - Args: - default (Any, optional): Optional default value. - - Returns: - PromptType: Processed value. - """ - while True: - self.pre_prompt() - prompt = self.make_prompt(default) - value = self.get_input(self.console, prompt, self.password, stream=stream) - if value == "" and default != ...: - return default - try: - return_value = self.process_response(value) - except InvalidResponse as error: - self.on_validate_error(value, error) - continue - else: - return return_value - - -class Prompt(PromptBase[str]): - """A prompt that returns a str. - - Example: - >>> name = Prompt.ask("Enter your name") - - - """ - - response_type = str - - -class IntPrompt(PromptBase[int]): - """A prompt that returns an integer. - - Example: - >>> burrito_count = IntPrompt.ask("How many burritos do you want to order") - - """ - - response_type = int - validate_error_message = "[prompt.invalid]Please enter a valid integer number" - - -class FloatPrompt(PromptBase[float]): - """A prompt that returns a float. - - Example: - >>> temperature = FloatPrompt.ask("Enter desired temperature") - - """ - - response_type = float - validate_error_message = "[prompt.invalid]Please enter a number" - - -class Confirm(PromptBase[bool]): - """A yes / no confirmation prompt. - - Example: - >>> if Confirm.ask("Continue"): - run_job() - - """ - - response_type = bool - validate_error_message = "[prompt.invalid]Please enter Y or N" - choices: List[str] = ["y", "n"] - - def render_default(self, default: DefaultType) -> Text: - """Render the default as (y) or (n) rather than True/False.""" - yes, no = self.choices - return Text(f"({yes})" if default else f"({no})", style="prompt.default") - - def process_response(self, value: str) -> bool: - """Convert choices to a bool.""" - value = value.strip().lower() - if value not in self.choices: - raise InvalidResponse(self.validate_error_message) - return value == self.choices[0] - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - if Confirm.ask("Run [i]prompt[/i] tests?", default=True): - while True: - result = IntPrompt.ask( - ":rocket: Enter a number between [b]1[/b] and [b]10[/b]", default=5 - ) - if result >= 1 and result <= 10: - break - print(":pile_of_poo: [prompt.invalid]Number must be between 1 and 10") - print(f"number={result}") - - while True: - password = Prompt.ask( - "Please enter a password [cyan](must be at least 5 characters)", - password=True, - ) - if len(password) >= 5: - break - print("[prompt.invalid]password too short") - print(f"password={password!r}") - - fruit = Prompt.ask("Enter a fruit", choices=["apple", "orange", "pear"]) - print(f"fruit={fruit!r}") - - doggie = Prompt.ask( - "What's the best Dog? (Case INSENSITIVE)", - choices=["Border Terrier", "Collie", "Labradoodle"], - case_sensitive=False, - ) - print(f"doggie={doggie!r}") - - else: - print("[b]OK :loudly_crying_face:") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/protocol.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/protocol.py deleted file mode 100644 index 12ab23713..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/protocol.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import Any, cast, Set, TYPE_CHECKING -from inspect import isclass - -if TYPE_CHECKING: - from pip._vendor.rich.console import RenderableType - -_GIBBERISH = """aihwerij235234ljsdnp34ksodfipwoe234234jlskjdf""" - - -def is_renderable(check_object: Any) -> bool: - """Check if an object may be rendered by Rich.""" - return ( - isinstance(check_object, str) - or hasattr(check_object, "__rich__") - or hasattr(check_object, "__rich_console__") - ) - - -def rich_cast(renderable: object) -> "RenderableType": - """Cast an object to a renderable by calling __rich__ if present. - - Args: - renderable (object): A potentially renderable object - - Returns: - object: The result of recursively calling __rich__. - """ - from pip._vendor.rich.console import RenderableType - - rich_visited_set: Set[type] = set() # Prevent potential infinite loop - while hasattr(renderable, "__rich__") and not isclass(renderable): - # Detect object which claim to have all the attributes - if hasattr(renderable, _GIBBERISH): - return repr(renderable) - cast_method = getattr(renderable, "__rich__") - renderable = cast_method() - renderable_type = type(renderable) - if renderable_type in rich_visited_set: - break - rich_visited_set.add(renderable_type) - - return cast(RenderableType, renderable) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/region.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/region.py deleted file mode 100644 index 75b3631c3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/region.py +++ /dev/null @@ -1,10 +0,0 @@ -from typing import NamedTuple - - -class Region(NamedTuple): - """Defines a rectangular region of the screen.""" - - x: int - y: int - width: int - height: int diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/repr.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/repr.py deleted file mode 100644 index 10efc427c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/repr.py +++ /dev/null @@ -1,149 +0,0 @@ -import inspect -from functools import partial -from typing import ( - Any, - Callable, - Iterable, - List, - Optional, - Tuple, - Type, - TypeVar, - Union, - overload, -) - -T = TypeVar("T") - - -Result = Iterable[Union[Any, Tuple[Any], Tuple[str, Any], Tuple[str, Any, Any]]] -RichReprResult = Result - - -class ReprError(Exception): - """An error occurred when attempting to build a repr.""" - - -@overload -def auto(cls: Optional[Type[T]]) -> Type[T]: - ... - - -@overload -def auto(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: - ... - - -def auto( - cls: Optional[Type[T]] = None, *, angular: Optional[bool] = None -) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: - """Class decorator to create __repr__ from __rich_repr__""" - - def do_replace(cls: Type[T], angular: Optional[bool] = None) -> Type[T]: - def auto_repr(self: T) -> str: - """Create repr string from __rich_repr__""" - repr_str: List[str] = [] - append = repr_str.append - - angular: bool = getattr(self.__rich_repr__, "angular", False) # type: ignore[attr-defined] - for arg in self.__rich_repr__(): # type: ignore[attr-defined] - if isinstance(arg, tuple): - if len(arg) == 1: - append(repr(arg[0])) - else: - key, value, *default = arg - if key is None: - append(repr(value)) - else: - if default and default[0] == value: - continue - append(f"{key}={value!r}") - else: - append(repr(arg)) - if angular: - return f"<{self.__class__.__name__} {' '.join(repr_str)}>" - else: - return f"{self.__class__.__name__}({', '.join(repr_str)})" - - def auto_rich_repr(self: Type[T]) -> Result: - """Auto generate __rich_rep__ from signature of __init__""" - try: - signature = inspect.signature(self.__init__) - for name, param in signature.parameters.items(): - if param.kind == param.POSITIONAL_ONLY: - yield getattr(self, name) - elif param.kind in ( - param.POSITIONAL_OR_KEYWORD, - param.KEYWORD_ONLY, - ): - if param.default is param.empty: - yield getattr(self, param.name) - else: - yield param.name, getattr(self, param.name), param.default - except Exception as error: - raise ReprError( - f"Failed to auto generate __rich_repr__; {error}" - ) from None - - if not hasattr(cls, "__rich_repr__"): - auto_rich_repr.__doc__ = "Build a rich repr" - cls.__rich_repr__ = auto_rich_repr # type: ignore[attr-defined] - - auto_repr.__doc__ = "Return repr(self)" - cls.__repr__ = auto_repr # type: ignore[assignment] - if angular is not None: - cls.__rich_repr__.angular = angular # type: ignore[attr-defined] - return cls - - if cls is None: - return partial(do_replace, angular=angular) - else: - return do_replace(cls, angular=angular) - - -@overload -def rich_repr(cls: Optional[Type[T]]) -> Type[T]: - ... - - -@overload -def rich_repr(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: - ... - - -def rich_repr( - cls: Optional[Type[T]] = None, *, angular: bool = False -) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: - if cls is None: - return auto(angular=angular) - else: - return auto(cls) - - -if __name__ == "__main__": - - @auto - class Foo: - def __rich_repr__(self) -> Result: - yield "foo" - yield "bar", {"shopping": ["eggs", "ham", "pineapple"]} - yield "buy", "hand sanitizer" - - foo = Foo() - from pip._vendor.rich.console import Console - - console = Console() - - console.rule("Standard repr") - console.print(foo) - - console.print(foo, width=60) - console.print(foo, width=30) - - console.rule("Angular repr") - Foo.__rich_repr__.angular = True # type: ignore[attr-defined] - - console.print(foo) - - console.print(foo, width=60) - console.print(foo, width=30) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/rule.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/rule.py deleted file mode 100644 index fd00ce6e4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/rule.py +++ /dev/null @@ -1,130 +0,0 @@ -from typing import Union - -from .align import AlignMethod -from .cells import cell_len, set_cell_size -from .console import Console, ConsoleOptions, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .style import Style -from .text import Text - - -class Rule(JupyterMixin): - """A console renderable to draw a horizontal rule (line). - - Args: - title (Union[str, Text], optional): Text to render in the rule. Defaults to "". - characters (str, optional): Character(s) used to draw the line. Defaults to "─". - style (StyleType, optional): Style of Rule. Defaults to "rule.line". - end (str, optional): Character at end of Rule. defaults to "\\\\n" - align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". - """ - - def __init__( - self, - title: Union[str, Text] = "", - *, - characters: str = "─", - style: Union[str, Style] = "rule.line", - end: str = "\n", - align: AlignMethod = "center", - ) -> None: - if cell_len(characters) < 1: - raise ValueError( - "'characters' argument must have a cell width of at least 1" - ) - if align not in ("left", "center", "right"): - raise ValueError( - f'invalid value for align, expected "left", "center", "right" (not {align!r})' - ) - self.title = title - self.characters = characters - self.style = style - self.end = end - self.align = align - - def __repr__(self) -> str: - return f"Rule({self.title!r}, {self.characters!r})" - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - width = options.max_width - - characters = ( - "-" - if (options.ascii_only and not self.characters.isascii()) - else self.characters - ) - - chars_len = cell_len(characters) - if not self.title: - yield self._rule_line(chars_len, width) - return - - if isinstance(self.title, Text): - title_text = self.title - else: - title_text = console.render_str(self.title, style="rule.text") - - title_text.plain = title_text.plain.replace("\n", " ") - title_text.expand_tabs() - - required_space = 4 if self.align == "center" else 2 - truncate_width = max(0, width - required_space) - if not truncate_width: - yield self._rule_line(chars_len, width) - return - - rule_text = Text(end=self.end) - if self.align == "center": - title_text.truncate(truncate_width, overflow="ellipsis") - side_width = (width - cell_len(title_text.plain)) // 2 - left = Text(characters * (side_width // chars_len + 1)) - left.truncate(side_width - 1) - right_length = width - cell_len(left.plain) - cell_len(title_text.plain) - right = Text(characters * (side_width // chars_len + 1)) - right.truncate(right_length) - rule_text.append(left.plain + " ", self.style) - rule_text.append(title_text) - rule_text.append(" " + right.plain, self.style) - elif self.align == "left": - title_text.truncate(truncate_width, overflow="ellipsis") - rule_text.append(title_text) - rule_text.append(" ") - rule_text.append(characters * (width - rule_text.cell_len), self.style) - elif self.align == "right": - title_text.truncate(truncate_width, overflow="ellipsis") - rule_text.append(characters * (width - title_text.cell_len - 1), self.style) - rule_text.append(" ") - rule_text.append(title_text) - - rule_text.plain = set_cell_size(rule_text.plain, width) - yield rule_text - - def _rule_line(self, chars_len: int, width: int) -> Text: - rule_text = Text(self.characters * ((width // chars_len) + 1), self.style) - rule_text.truncate(width) - rule_text.plain = set_cell_size(rule_text.plain, width) - return rule_text - - def __rich_measure__( - self, console: Console, options: ConsoleOptions - ) -> Measurement: - return Measurement(1, 1) - - -if __name__ == "__main__": # pragma: no cover - import sys - - from pip._vendor.rich.console import Console - - try: - text = sys.argv[1] - except IndexError: - text = "Hello, World" - console = Console() - console.print(Rule(title=text)) - - console = Console() - console.print(Rule("foo"), width=4) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/scope.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/scope.py deleted file mode 100644 index c9d134cc3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/scope.py +++ /dev/null @@ -1,86 +0,0 @@ -from collections.abc import Mapping -from typing import TYPE_CHECKING, Any, Optional, Tuple - -from .highlighter import ReprHighlighter -from .panel import Panel -from .pretty import Pretty -from .table import Table -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import ConsoleRenderable - - -def render_scope( - scope: "Mapping[str, Any]", - *, - title: Optional[TextType] = None, - sort_keys: bool = True, - indent_guides: bool = False, - max_length: Optional[int] = None, - max_string: Optional[int] = None, -) -> "ConsoleRenderable": - """Render python variables in a given scope. - - Args: - scope (Mapping): A mapping containing variable names and values. - title (str, optional): Optional title. Defaults to None. - sort_keys (bool, optional): Enable sorting of items. Defaults to True. - indent_guides (bool, optional): Enable indentation guides. Defaults to False. - max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to None. - max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None. - - Returns: - ConsoleRenderable: A renderable object. - """ - highlighter = ReprHighlighter() - items_table = Table.grid(padding=(0, 1), expand=False) - items_table.add_column(justify="right") - - def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]: - """Sort special variables first, then alphabetically.""" - key, _ = item - return (not key.startswith("__"), key.lower()) - - items = sorted(scope.items(), key=sort_items) if sort_keys else scope.items() - for key, value in items: - key_text = Text.assemble( - (key, "scope.key.special" if key.startswith("__") else "scope.key"), - (" =", "scope.equals"), - ) - items_table.add_row( - key_text, - Pretty( - value, - highlighter=highlighter, - indent_guides=indent_guides, - max_length=max_length, - max_string=max_string, - ), - ) - return Panel.fit( - items_table, - title=title, - border_style="scope.border", - padding=(0, 1), - ) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - - print() - - def test(foo: float, bar: float) -> None: - list_of_things = [1, 2, 3, None, 4, True, False, "Hello World"] - dict_of_things = { - "version": "1.1", - "method": "confirmFruitPurchase", - "params": [["apple", "orange", "mangoes", "pomelo"], 1.123], - "id": "194521489", - } - print(render_scope(locals(), title="[i]locals", sort_keys=False)) - - test(20.3423, 3.1427) - print() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/screen.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/screen.py deleted file mode 100644 index 7f416e1e7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/screen.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import Optional, TYPE_CHECKING - -from .segment import Segment -from .style import StyleType -from ._loop import loop_last - - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - RenderResult, - RenderableType, - Group, - ) - - -class Screen: - """A renderable that fills the terminal screen and crops excess. - - Args: - renderable (RenderableType): Child renderable. - style (StyleType, optional): Optional background style. Defaults to None. - """ - - renderable: "RenderableType" - - def __init__( - self, - *renderables: "RenderableType", - style: Optional[StyleType] = None, - application_mode: bool = False, - ) -> None: - from pip._vendor.rich.console import Group - - self.renderable = Group(*renderables) - self.style = style - self.application_mode = application_mode - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - width, height = options.size - style = console.get_style(self.style) if self.style else None - render_options = options.update(width=width, height=height) - lines = console.render_lines( - self.renderable or "", render_options, style=style, pad=True - ) - lines = Segment.set_shape(lines, width, height, style=style) - new_line = Segment("\n\r") if self.application_mode else Segment.line() - for last, line in loop_last(lines): - yield from line - if not last: - yield new_line diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/segment.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/segment.py deleted file mode 100644 index 4b5f99792..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/segment.py +++ /dev/null @@ -1,752 +0,0 @@ -from enum import IntEnum -from functools import lru_cache -from itertools import filterfalse -from logging import getLogger -from operator import attrgetter -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Type, - Union, -) - -from .cells import ( - _is_single_cell_widths, - cached_cell_len, - cell_len, - get_character_cell_size, - set_cell_size, -) -from .repr import Result, rich_repr -from .style import Style - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult - -log = getLogger("rich") - - -class ControlType(IntEnum): - """Non-printable control codes which typically translate to ANSI codes.""" - - BELL = 1 - CARRIAGE_RETURN = 2 - HOME = 3 - CLEAR = 4 - SHOW_CURSOR = 5 - HIDE_CURSOR = 6 - ENABLE_ALT_SCREEN = 7 - DISABLE_ALT_SCREEN = 8 - CURSOR_UP = 9 - CURSOR_DOWN = 10 - CURSOR_FORWARD = 11 - CURSOR_BACKWARD = 12 - CURSOR_MOVE_TO_COLUMN = 13 - CURSOR_MOVE_TO = 14 - ERASE_IN_LINE = 15 - SET_WINDOW_TITLE = 16 - - -ControlCode = Union[ - Tuple[ControlType], - Tuple[ControlType, Union[int, str]], - Tuple[ControlType, int, int], -] - - -@rich_repr() -class Segment(NamedTuple): - """A piece of text with associated style. Segments are produced by the Console render process and - are ultimately converted in to strings to be written to the terminal. - - Args: - text (str): A piece of text. - style (:class:`~rich.style.Style`, optional): An optional style to apply to the text. - control (Tuple[ControlCode], optional): Optional sequence of control codes. - - Attributes: - cell_length (int): The cell length of this Segment. - """ - - text: str - style: Optional[Style] = None - control: Optional[Sequence[ControlCode]] = None - - @property - def cell_length(self) -> int: - """The number of terminal cells required to display self.text. - - Returns: - int: A number of cells. - """ - text, _style, control = self - return 0 if control else cell_len(text) - - def __rich_repr__(self) -> Result: - yield self.text - if self.control is None: - if self.style is not None: - yield self.style - else: - yield self.style - yield self.control - - def __bool__(self) -> bool: - """Check if the segment contains text.""" - return bool(self.text) - - @property - def is_control(self) -> bool: - """Check if the segment contains control codes.""" - return self.control is not None - - @classmethod - @lru_cache(1024 * 16) - def _split_cells(cls, segment: "Segment", cut: int) -> Tuple["Segment", "Segment"]: - """Split a segment in to two at a given cell position. - - Note that splitting a double-width character, may result in that character turning - into two spaces. - - Args: - segment (Segment): A segment to split. - cut (int): A cell position to cut on. - - Returns: - A tuple of two segments. - """ - text, style, control = segment - _Segment = Segment - cell_length = segment.cell_length - if cut >= cell_length: - return segment, _Segment("", style, control) - - cell_size = get_character_cell_size - - pos = int((cut / cell_length) * len(text)) - - while True: - before = text[:pos] - cell_pos = cell_len(before) - out_by = cell_pos - cut - if not out_by: - return ( - _Segment(before, style, control), - _Segment(text[pos:], style, control), - ) - if out_by == -1 and cell_size(text[pos]) == 2: - return ( - _Segment(text[:pos] + " ", style, control), - _Segment(" " + text[pos + 1 :], style, control), - ) - if out_by == +1 and cell_size(text[pos - 1]) == 2: - return ( - _Segment(text[: pos - 1] + " ", style, control), - _Segment(" " + text[pos:], style, control), - ) - if cell_pos < cut: - pos += 1 - else: - pos -= 1 - - def split_cells(self, cut: int) -> Tuple["Segment", "Segment"]: - """Split segment in to two segments at the specified column. - - If the cut point falls in the middle of a 2-cell wide character then it is replaced - by two spaces, to preserve the display width of the parent segment. - - Args: - cut (int): Offset within the segment to cut. - - Returns: - Tuple[Segment, Segment]: Two segments. - """ - text, style, control = self - assert cut >= 0 - - if _is_single_cell_widths(text): - # Fast path with all 1 cell characters - if cut >= len(text): - return self, Segment("", style, control) - return ( - Segment(text[:cut], style, control), - Segment(text[cut:], style, control), - ) - - return self._split_cells(self, cut) - - @classmethod - def line(cls) -> "Segment": - """Make a new line segment.""" - return cls("\n") - - @classmethod - def apply_style( - cls, - segments: Iterable["Segment"], - style: Optional[Style] = None, - post_style: Optional[Style] = None, - ) -> Iterable["Segment"]: - """Apply style(s) to an iterable of segments. - - Returns an iterable of segments where the style is replaced by ``style + segment.style + post_style``. - - Args: - segments (Iterable[Segment]): Segments to process. - style (Style, optional): Base style. Defaults to None. - post_style (Style, optional): Style to apply on top of segment style. Defaults to None. - - Returns: - Iterable[Segments]: A new iterable of segments (possibly the same iterable). - """ - result_segments = segments - if style: - apply = style.__add__ - result_segments = ( - cls(text, None if control else apply(_style), control) - for text, _style, control in result_segments - ) - if post_style: - result_segments = ( - cls( - text, - ( - None - if control - else (_style + post_style if _style else post_style) - ), - control, - ) - for text, _style, control in result_segments - ) - return result_segments - - @classmethod - def filter_control( - cls, segments: Iterable["Segment"], is_control: bool = False - ) -> Iterable["Segment"]: - """Filter segments by ``is_control`` attribute. - - Args: - segments (Iterable[Segment]): An iterable of Segment instances. - is_control (bool, optional): is_control flag to match in search. - - Returns: - Iterable[Segment]: And iterable of Segment instances. - - """ - if is_control: - return filter(attrgetter("control"), segments) - else: - return filterfalse(attrgetter("control"), segments) - - @classmethod - def split_lines(cls, segments: Iterable["Segment"]) -> Iterable[List["Segment"]]: - """Split a sequence of segments in to a list of lines. - - Args: - segments (Iterable[Segment]): Segments potentially containing line feeds. - - Yields: - Iterable[List[Segment]]: Iterable of segment lists, one per line. - """ - line: List[Segment] = [] - append = line.append - - for segment in segments: - if "\n" in segment.text and not segment.control: - text, style, _ = segment - while text: - _text, new_line, text = text.partition("\n") - if _text: - append(cls(_text, style)) - if new_line: - yield line - line = [] - append = line.append - else: - append(segment) - if line: - yield line - - @classmethod - def split_and_crop_lines( - cls, - segments: Iterable["Segment"], - length: int, - style: Optional[Style] = None, - pad: bool = True, - include_new_lines: bool = True, - ) -> Iterable[List["Segment"]]: - """Split segments in to lines, and crop lines greater than a given length. - - Args: - segments (Iterable[Segment]): An iterable of segments, probably - generated from console.render. - length (int): Desired line length. - style (Style, optional): Style to use for any padding. - pad (bool): Enable padding of lines that are less than `length`. - - Returns: - Iterable[List[Segment]]: An iterable of lines of segments. - """ - line: List[Segment] = [] - append = line.append - - adjust_line_length = cls.adjust_line_length - new_line_segment = cls("\n") - - for segment in segments: - if "\n" in segment.text and not segment.control: - text, segment_style, _ = segment - while text: - _text, new_line, text = text.partition("\n") - if _text: - append(cls(_text, segment_style)) - if new_line: - cropped_line = adjust_line_length( - line, length, style=style, pad=pad - ) - if include_new_lines: - cropped_line.append(new_line_segment) - yield cropped_line - line.clear() - else: - append(segment) - if line: - yield adjust_line_length(line, length, style=style, pad=pad) - - @classmethod - def adjust_line_length( - cls, - line: List["Segment"], - length: int, - style: Optional[Style] = None, - pad: bool = True, - ) -> List["Segment"]: - """Adjust a line to a given width (cropping or padding as required). - - Args: - segments (Iterable[Segment]): A list of segments in a single line. - length (int): The desired width of the line. - style (Style, optional): The style of padding if used (space on the end). Defaults to None. - pad (bool, optional): Pad lines with spaces if they are shorter than `length`. Defaults to True. - - Returns: - List[Segment]: A line of segments with the desired length. - """ - line_length = sum(segment.cell_length for segment in line) - new_line: List[Segment] - - if line_length < length: - if pad: - new_line = line + [cls(" " * (length - line_length), style)] - else: - new_line = line[:] - elif line_length > length: - new_line = [] - append = new_line.append - line_length = 0 - for segment in line: - segment_length = segment.cell_length - if line_length + segment_length < length or segment.control: - append(segment) - line_length += segment_length - else: - text, segment_style, _ = segment - text = set_cell_size(text, length - line_length) - append(cls(text, segment_style)) - break - else: - new_line = line[:] - return new_line - - @classmethod - def get_line_length(cls, line: List["Segment"]) -> int: - """Get the length of list of segments. - - Args: - line (List[Segment]): A line encoded as a list of Segments (assumes no '\\\\n' characters), - - Returns: - int: The length of the line. - """ - _cell_len = cell_len - return sum(_cell_len(text) for text, style, control in line if not control) - - @classmethod - def get_shape(cls, lines: List[List["Segment"]]) -> Tuple[int, int]: - """Get the shape (enclosing rectangle) of a list of lines. - - Args: - lines (List[List[Segment]]): A list of lines (no '\\\\n' characters). - - Returns: - Tuple[int, int]: Width and height in characters. - """ - get_line_length = cls.get_line_length - max_width = max(get_line_length(line) for line in lines) if lines else 0 - return (max_width, len(lines)) - - @classmethod - def set_shape( - cls, - lines: List[List["Segment"]], - width: int, - height: Optional[int] = None, - style: Optional[Style] = None, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Set the shape of a list of lines (enclosing rectangle). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style, optional): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - _height = height or len(lines) - - blank = ( - [cls(" " * width + "\n", style)] if new_lines else [cls(" " * width, style)] - ) - - adjust_line_length = cls.adjust_line_length - shaped_lines = lines[:_height] - shaped_lines[:] = [ - adjust_line_length(line, width, style=style) for line in lines - ] - if len(shaped_lines) < _height: - shaped_lines.extend([blank] * (_height - len(shaped_lines))) - return shaped_lines - - @classmethod - def align_top( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns lines to top (adds extra lines to bottom as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - lines = lines + [[blank]] * extra_lines - return lines - - @classmethod - def align_bottom( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns render to bottom (adds extra lines above as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. Defaults to None. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - lines = [[blank]] * extra_lines + lines - return lines - - @classmethod - def align_middle( - cls: Type["Segment"], - lines: List[List["Segment"]], - width: int, - height: int, - style: Style, - new_lines: bool = False, - ) -> List[List["Segment"]]: - """Aligns lines to middle (adds extra lines to above and below as required). - - Args: - lines (List[List[Segment]]): A list of lines. - width (int): Desired width. - height (int, optional): Desired height or None for no change. - style (Style): Style of any padding added. - new_lines (bool, optional): Padded lines should include "\n". Defaults to False. - - Returns: - List[List[Segment]]: New list of lines. - """ - extra_lines = height - len(lines) - if not extra_lines: - return lines[:] - lines = lines[:height] - blank = cls(" " * width + "\n", style) if new_lines else cls(" " * width, style) - top_lines = extra_lines // 2 - bottom_lines = extra_lines - top_lines - lines = [[blank]] * top_lines + lines + [[blank]] * bottom_lines - return lines - - @classmethod - def simplify(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Simplify an iterable of segments by combining contiguous segments with the same style. - - Args: - segments (Iterable[Segment]): An iterable of segments. - - Returns: - Iterable[Segment]: A possibly smaller iterable of segments that will render the same way. - """ - iter_segments = iter(segments) - try: - last_segment = next(iter_segments) - except StopIteration: - return - - _Segment = Segment - for segment in iter_segments: - if last_segment.style == segment.style and not segment.control: - last_segment = _Segment( - last_segment.text + segment.text, last_segment.style - ) - else: - yield last_segment - last_segment = segment - yield last_segment - - @classmethod - def strip_links(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all links from an iterable of styles. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with link removed. - """ - for segment in segments: - if segment.control or segment.style is None: - yield segment - else: - text, style, _control = segment - yield cls(text, style.update_link(None) if style else None) - - @classmethod - def strip_styles(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all styles from an iterable of segments. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with styles replace with None - """ - for text, _style, control in segments: - yield cls(text, None, control) - - @classmethod - def remove_color(cls, segments: Iterable["Segment"]) -> Iterable["Segment"]: - """Remove all color from an iterable of segments. - - Args: - segments (Iterable[Segment]): An iterable segments. - - Yields: - Segment: Segments with colorless style. - """ - - cache: Dict[Style, Style] = {} - for text, style, control in segments: - if style: - colorless_style = cache.get(style) - if colorless_style is None: - colorless_style = style.without_color - cache[style] = colorless_style - yield cls(text, colorless_style, control) - else: - yield cls(text, None, control) - - @classmethod - def divide( - cls, segments: Iterable["Segment"], cuts: Iterable[int] - ) -> Iterable[List["Segment"]]: - """Divides an iterable of segments in to portions. - - Args: - cuts (Iterable[int]): Cell positions where to divide. - - Yields: - [Iterable[List[Segment]]]: An iterable of Segments in List. - """ - split_segments: List["Segment"] = [] - add_segment = split_segments.append - - iter_cuts = iter(cuts) - - while True: - cut = next(iter_cuts, -1) - if cut == -1: - return - if cut != 0: - break - yield [] - pos = 0 - - segments_clear = split_segments.clear - segments_copy = split_segments.copy - - _cell_len = cached_cell_len - for segment in segments: - text, _style, control = segment - while text: - end_pos = pos if control else pos + _cell_len(text) - if end_pos < cut: - add_segment(segment) - pos = end_pos - break - - if end_pos == cut: - add_segment(segment) - yield segments_copy() - segments_clear() - pos = end_pos - - cut = next(iter_cuts, -1) - if cut == -1: - if split_segments: - yield segments_copy() - return - - break - - else: - before, segment = segment.split_cells(cut - pos) - text, _style, control = segment - add_segment(before) - yield segments_copy() - segments_clear() - pos = cut - - cut = next(iter_cuts, -1) - if cut == -1: - if split_segments: - yield segments_copy() - return - - yield segments_copy() - - -class Segments: - """A simple renderable to render an iterable of segments. This class may be useful if - you want to print segments outside of a __rich_console__ method. - - Args: - segments (Iterable[Segment]): An iterable of segments. - new_lines (bool, optional): Add new lines between segments. Defaults to False. - """ - - def __init__(self, segments: Iterable[Segment], new_lines: bool = False) -> None: - self.segments = list(segments) - self.new_lines = new_lines - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.new_lines: - line = Segment.line() - for segment in self.segments: - yield segment - yield line - else: - yield from self.segments - - -class SegmentLines: - def __init__(self, lines: Iterable[List[Segment]], new_lines: bool = False) -> None: - """A simple renderable containing a number of lines of segments. May be used as an intermediate - in rendering process. - - Args: - lines (Iterable[List[Segment]]): Lists of segments forming lines. - new_lines (bool, optional): Insert new lines after each line. Defaults to False. - """ - self.lines = list(lines) - self.new_lines = new_lines - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if self.new_lines: - new_line = Segment.line() - for line in self.lines: - yield from line - yield new_line - else: - for line in self.lines: - yield from line - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - from pip._vendor.rich.syntax import Syntax - from pip._vendor.rich.text import Text - - code = """from rich.console import Console -console = Console() -text = Text.from_markup("Hello, [bold magenta]World[/]!") -console.print(text)""" - - text = Text.from_markup("Hello, [bold magenta]World[/]!") - - console = Console() - - console.rule("rich.Segment") - console.print( - "A Segment is the last step in the Rich render process before generating text with ANSI codes." - ) - console.print("\nConsider the following code:\n") - console.print(Syntax(code, "python", line_numbers=True)) - console.print() - console.print( - "When you call [b]print()[/b], Rich [i]renders[/i] the object in to the following:\n" - ) - fragments = list(console.render(text)) - console.print(fragments) - console.print() - console.print("The Segments are then processed to produce the following output:\n") - console.print(text) - console.print( - "\nYou will only need to know this if you are implementing your own Rich renderables." - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/spinner.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/spinner.py deleted file mode 100644 index a3a3caf84..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/spinner.py +++ /dev/null @@ -1,132 +0,0 @@ -from typing import TYPE_CHECKING, List, Optional, Union, cast - -from ._spinners import SPINNERS -from .measure import Measurement -from .table import Table -from .text import Text - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderableType, RenderResult - from .style import StyleType - - -class Spinner: - """A spinner animation. - - Args: - name (str): Name of spinner (run python -m rich.spinner). - text (RenderableType, optional): A renderable to display at the right of the spinner (str or Text typically). Defaults to "". - style (StyleType, optional): Style for spinner animation. Defaults to None. - speed (float, optional): Speed factor for animation. Defaults to 1.0. - - Raises: - KeyError: If name isn't one of the supported spinner animations. - """ - - def __init__( - self, - name: str, - text: "RenderableType" = "", - *, - style: Optional["StyleType"] = None, - speed: float = 1.0, - ) -> None: - try: - spinner = SPINNERS[name] - except KeyError: - raise KeyError(f"no spinner called {name!r}") - self.text: "Union[RenderableType, Text]" = ( - Text.from_markup(text) if isinstance(text, str) else text - ) - self.name = name - self.frames = cast(List[str], spinner["frames"])[:] - self.interval = cast(float, spinner["interval"]) - self.start_time: Optional[float] = None - self.style = style - self.speed = speed - self.frame_no_offset: float = 0.0 - self._update_speed = 0.0 - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - yield self.render(console.get_time()) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - text = self.render(0) - return Measurement.get(console, options, text) - - def render(self, time: float) -> "RenderableType": - """Render the spinner for a given time. - - Args: - time (float): Time in seconds. - - Returns: - RenderableType: A renderable containing animation frame. - """ - if self.start_time is None: - self.start_time = time - - frame_no = ((time - self.start_time) * self.speed) / ( - self.interval / 1000.0 - ) + self.frame_no_offset - frame = Text( - self.frames[int(frame_no) % len(self.frames)], style=self.style or "" - ) - - if self._update_speed: - self.frame_no_offset = frame_no - self.start_time = time - self.speed = self._update_speed - self._update_speed = 0.0 - - if not self.text: - return frame - elif isinstance(self.text, (str, Text)): - return Text.assemble(frame, " ", self.text) - else: - table = Table.grid(padding=1) - table.add_row(frame, self.text) - return table - - def update( - self, - *, - text: "RenderableType" = "", - style: Optional["StyleType"] = None, - speed: Optional[float] = None, - ) -> None: - """Updates attributes of a spinner after it has been started. - - Args: - text (RenderableType, optional): A renderable to display at the right of the spinner (str or Text typically). Defaults to "". - style (StyleType, optional): Style for spinner animation. Defaults to None. - speed (float, optional): Speed factor for animation. Defaults to None. - """ - if text: - self.text = Text.from_markup(text) if isinstance(text, str) else text - if style: - self.style = style - if speed: - self._update_speed = speed - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - from .console import Group - from .live import Live - - all_spinners = Group( - *[ - Spinner(spinner_name, text=Text(repr(spinner_name), style="green")) - for spinner_name in sorted(SPINNERS.keys()) - ] - ) - - with Live(all_spinners, refresh_per_second=20) as live: - while True: - sleep(0.1) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/status.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/status.py deleted file mode 100644 index 65744838e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/status.py +++ /dev/null @@ -1,131 +0,0 @@ -from types import TracebackType -from typing import Optional, Type - -from .console import Console, RenderableType -from .jupyter import JupyterMixin -from .live import Live -from .spinner import Spinner -from .style import StyleType - - -class Status(JupyterMixin): - """Displays a status indicator with a 'spinner' animation. - - Args: - status (RenderableType): A status renderable (str or Text typically). - console (Console, optional): Console instance to use, or None for global console. Defaults to None. - spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". - spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". - speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. - refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. - """ - - def __init__( - self, - status: RenderableType, - *, - console: Optional[Console] = None, - spinner: str = "dots", - spinner_style: StyleType = "status.spinner", - speed: float = 1.0, - refresh_per_second: float = 12.5, - ): - self.status = status - self.spinner_style = spinner_style - self.speed = speed - self._spinner = Spinner(spinner, text=status, style=spinner_style, speed=speed) - self._live = Live( - self.renderable, - console=console, - refresh_per_second=refresh_per_second, - transient=True, - ) - - @property - def renderable(self) -> Spinner: - return self._spinner - - @property - def console(self) -> "Console": - """Get the Console used by the Status objects.""" - return self._live.console - - def update( - self, - status: Optional[RenderableType] = None, - *, - spinner: Optional[str] = None, - spinner_style: Optional[StyleType] = None, - speed: Optional[float] = None, - ) -> None: - """Update status. - - Args: - status (Optional[RenderableType], optional): New status renderable or None for no change. Defaults to None. - spinner (Optional[str], optional): New spinner or None for no change. Defaults to None. - spinner_style (Optional[StyleType], optional): New spinner style or None for no change. Defaults to None. - speed (Optional[float], optional): Speed factor for spinner animation or None for no change. Defaults to None. - """ - if status is not None: - self.status = status - if spinner_style is not None: - self.spinner_style = spinner_style - if speed is not None: - self.speed = speed - if spinner is not None: - self._spinner = Spinner( - spinner, text=self.status, style=self.spinner_style, speed=self.speed - ) - self._live.update(self.renderable, refresh=True) - else: - self._spinner.update( - text=self.status, style=self.spinner_style, speed=self.speed - ) - - def start(self) -> None: - """Start the status animation.""" - self._live.start() - - def stop(self) -> None: - """Stop the spinner animation.""" - self._live.stop() - - def __rich__(self) -> RenderableType: - return self.renderable - - def __enter__(self) -> "Status": - self.start() - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - self.stop() - - -if __name__ == "__main__": # pragma: no cover - from time import sleep - - from .console import Console - - console = Console() - with console.status("[magenta]Covid detector booting up") as status: - sleep(3) - console.log("Importing advanced AI") - sleep(3) - console.log("Advanced Covid AI Ready") - sleep(3) - status.update(status="[bold blue] Scanning for Covid", spinner="earth") - sleep(3) - console.log("Found 10,000,000,000 copies of Covid32.exe") - sleep(3) - status.update( - status="[bold red]Moving Covid32.exe to Trash", - spinner="bouncingBall", - spinner_style="yellow", - ) - sleep(5) - console.print("[bold green]Covid deleted successfully") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/style.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/style.py deleted file mode 100644 index 529424189..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/style.py +++ /dev/null @@ -1,792 +0,0 @@ -import sys -from functools import lru_cache -from operator import attrgetter -from pickle import dumps, loads -from random import randint -from typing import Any, Dict, Iterable, List, Optional, Type, Union, cast - -from . import errors -from .color import Color, ColorParseError, ColorSystem, blend_rgb -from .repr import Result, rich_repr -from .terminal_theme import DEFAULT_TERMINAL_THEME, TerminalTheme - -_hash_getter = attrgetter( - "_color", "_bgcolor", "_attributes", "_set_attributes", "_link", "_meta" -) - -# Style instances and style definitions are often interchangeable -StyleType = Union[str, "Style"] - - -class _Bit: - """A descriptor to get/set a style attribute bit.""" - - __slots__ = ["bit"] - - def __init__(self, bit_no: int) -> None: - self.bit = 1 << bit_no - - def __get__(self, obj: "Style", objtype: Type["Style"]) -> Optional[bool]: - if obj._set_attributes & self.bit: - return obj._attributes & self.bit != 0 - return None - - -@rich_repr -class Style: - """A terminal style. - - A terminal style consists of a color (`color`), a background color (`bgcolor`), and a number of attributes, such - as bold, italic etc. The attributes have 3 states: they can either be on - (``True``), off (``False``), or not set (``None``). - - Args: - color (Union[Color, str], optional): Color of terminal text. Defaults to None. - bgcolor (Union[Color, str], optional): Color of terminal background. Defaults to None. - bold (bool, optional): Enable bold text. Defaults to None. - dim (bool, optional): Enable dim text. Defaults to None. - italic (bool, optional): Enable italic text. Defaults to None. - underline (bool, optional): Enable underlined text. Defaults to None. - blink (bool, optional): Enabled blinking text. Defaults to None. - blink2 (bool, optional): Enable fast blinking text. Defaults to None. - reverse (bool, optional): Enabled reverse text. Defaults to None. - conceal (bool, optional): Enable concealed text. Defaults to None. - strike (bool, optional): Enable strikethrough text. Defaults to None. - underline2 (bool, optional): Enable doubly underlined text. Defaults to None. - frame (bool, optional): Enable framed text. Defaults to None. - encircle (bool, optional): Enable encircled text. Defaults to None. - overline (bool, optional): Enable overlined text. Defaults to None. - link (str, link): Link URL. Defaults to None. - - """ - - _color: Optional[Color] - _bgcolor: Optional[Color] - _attributes: int - _set_attributes: int - _hash: Optional[int] - _null: bool - _meta: Optional[bytes] - - __slots__ = [ - "_color", - "_bgcolor", - "_attributes", - "_set_attributes", - "_link", - "_link_id", - "_ansi", - "_style_definition", - "_hash", - "_null", - "_meta", - ] - - # maps bits on to SGR parameter - _style_map = { - 0: "1", - 1: "2", - 2: "3", - 3: "4", - 4: "5", - 5: "6", - 6: "7", - 7: "8", - 8: "9", - 9: "21", - 10: "51", - 11: "52", - 12: "53", - } - - STYLE_ATTRIBUTES = { - "dim": "dim", - "d": "dim", - "bold": "bold", - "b": "bold", - "italic": "italic", - "i": "italic", - "underline": "underline", - "u": "underline", - "blink": "blink", - "blink2": "blink2", - "reverse": "reverse", - "r": "reverse", - "conceal": "conceal", - "c": "conceal", - "strike": "strike", - "s": "strike", - "underline2": "underline2", - "uu": "underline2", - "frame": "frame", - "encircle": "encircle", - "overline": "overline", - "o": "overline", - } - - def __init__( - self, - *, - color: Optional[Union[Color, str]] = None, - bgcolor: Optional[Union[Color, str]] = None, - bold: Optional[bool] = None, - dim: Optional[bool] = None, - italic: Optional[bool] = None, - underline: Optional[bool] = None, - blink: Optional[bool] = None, - blink2: Optional[bool] = None, - reverse: Optional[bool] = None, - conceal: Optional[bool] = None, - strike: Optional[bool] = None, - underline2: Optional[bool] = None, - frame: Optional[bool] = None, - encircle: Optional[bool] = None, - overline: Optional[bool] = None, - link: Optional[str] = None, - meta: Optional[Dict[str, Any]] = None, - ): - self._ansi: Optional[str] = None - self._style_definition: Optional[str] = None - - def _make_color(color: Union[Color, str]) -> Color: - return color if isinstance(color, Color) else Color.parse(color) - - self._color = None if color is None else _make_color(color) - self._bgcolor = None if bgcolor is None else _make_color(bgcolor) - self._set_attributes = sum( - ( - bold is not None, - dim is not None and 2, - italic is not None and 4, - underline is not None and 8, - blink is not None and 16, - blink2 is not None and 32, - reverse is not None and 64, - conceal is not None and 128, - strike is not None and 256, - underline2 is not None and 512, - frame is not None and 1024, - encircle is not None and 2048, - overline is not None and 4096, - ) - ) - self._attributes = ( - sum( - ( - bold and 1 or 0, - dim and 2 or 0, - italic and 4 or 0, - underline and 8 or 0, - blink and 16 or 0, - blink2 and 32 or 0, - reverse and 64 or 0, - conceal and 128 or 0, - strike and 256 or 0, - underline2 and 512 or 0, - frame and 1024 or 0, - encircle and 2048 or 0, - overline and 4096 or 0, - ) - ) - if self._set_attributes - else 0 - ) - - self._link = link - self._meta = None if meta is None else dumps(meta) - self._link_id = ( - f"{randint(0, 999999)}{hash(self._meta)}" if (link or meta) else "" - ) - self._hash: Optional[int] = None - self._null = not (self._set_attributes or color or bgcolor or link or meta) - - @classmethod - def null(cls) -> "Style": - """Create an 'null' style, equivalent to Style(), but more performant.""" - return NULL_STYLE - - @classmethod - def from_color( - cls, color: Optional[Color] = None, bgcolor: Optional[Color] = None - ) -> "Style": - """Create a new style with colors and no attributes. - - Returns: - color (Optional[Color]): A (foreground) color, or None for no color. Defaults to None. - bgcolor (Optional[Color]): A (background) color, or None for no color. Defaults to None. - """ - style: Style = cls.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = color - style._bgcolor = bgcolor - style._set_attributes = 0 - style._attributes = 0 - style._link = None - style._link_id = "" - style._meta = None - style._null = not (color or bgcolor) - style._hash = None - return style - - @classmethod - def from_meta(cls, meta: Optional[Dict[str, Any]]) -> "Style": - """Create a new style with meta data. - - Returns: - meta (Optional[Dict[str, Any]]): A dictionary of meta data. Defaults to None. - """ - style: Style = cls.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = None - style._bgcolor = None - style._set_attributes = 0 - style._attributes = 0 - style._link = None - style._meta = dumps(meta) - style._link_id = f"{randint(0, 999999)}{hash(style._meta)}" - style._hash = None - style._null = not (meta) - return style - - @classmethod - def on(cls, meta: Optional[Dict[str, Any]] = None, **handlers: Any) -> "Style": - """Create a blank style with meta information. - - Example: - style = Style.on(click=self.on_click) - - Args: - meta (Optional[Dict[str, Any]], optional): An optional dict of meta information. - **handlers (Any): Keyword arguments are translated in to handlers. - - Returns: - Style: A Style with meta information attached. - """ - meta = {} if meta is None else meta - meta.update({f"@{key}": value for key, value in handlers.items()}) - return cls.from_meta(meta) - - bold = _Bit(0) - dim = _Bit(1) - italic = _Bit(2) - underline = _Bit(3) - blink = _Bit(4) - blink2 = _Bit(5) - reverse = _Bit(6) - conceal = _Bit(7) - strike = _Bit(8) - underline2 = _Bit(9) - frame = _Bit(10) - encircle = _Bit(11) - overline = _Bit(12) - - @property - def link_id(self) -> str: - """Get a link id, used in ansi code for links.""" - return self._link_id - - def __str__(self) -> str: - """Re-generate style definition from attributes.""" - if self._style_definition is None: - attributes: List[str] = [] - append = attributes.append - bits = self._set_attributes - if bits & 0b0000000001111: - if bits & 1: - append("bold" if self.bold else "not bold") - if bits & (1 << 1): - append("dim" if self.dim else "not dim") - if bits & (1 << 2): - append("italic" if self.italic else "not italic") - if bits & (1 << 3): - append("underline" if self.underline else "not underline") - if bits & 0b0000111110000: - if bits & (1 << 4): - append("blink" if self.blink else "not blink") - if bits & (1 << 5): - append("blink2" if self.blink2 else "not blink2") - if bits & (1 << 6): - append("reverse" if self.reverse else "not reverse") - if bits & (1 << 7): - append("conceal" if self.conceal else "not conceal") - if bits & (1 << 8): - append("strike" if self.strike else "not strike") - if bits & 0b1111000000000: - if bits & (1 << 9): - append("underline2" if self.underline2 else "not underline2") - if bits & (1 << 10): - append("frame" if self.frame else "not frame") - if bits & (1 << 11): - append("encircle" if self.encircle else "not encircle") - if bits & (1 << 12): - append("overline" if self.overline else "not overline") - if self._color is not None: - append(self._color.name) - if self._bgcolor is not None: - append("on") - append(self._bgcolor.name) - if self._link: - append("link") - append(self._link) - self._style_definition = " ".join(attributes) or "none" - return self._style_definition - - def __bool__(self) -> bool: - """A Style is false if it has no attributes, colors, or links.""" - return not self._null - - def _make_ansi_codes(self, color_system: ColorSystem) -> str: - """Generate ANSI codes for this style. - - Args: - color_system (ColorSystem): Color system. - - Returns: - str: String containing codes. - """ - - if self._ansi is None: - sgr: List[str] = [] - append = sgr.append - _style_map = self._style_map - attributes = self._attributes & self._set_attributes - if attributes: - if attributes & 1: - append(_style_map[0]) - if attributes & 2: - append(_style_map[1]) - if attributes & 4: - append(_style_map[2]) - if attributes & 8: - append(_style_map[3]) - if attributes & 0b0000111110000: - for bit in range(4, 9): - if attributes & (1 << bit): - append(_style_map[bit]) - if attributes & 0b1111000000000: - for bit in range(9, 13): - if attributes & (1 << bit): - append(_style_map[bit]) - if self._color is not None: - sgr.extend(self._color.downgrade(color_system).get_ansi_codes()) - if self._bgcolor is not None: - sgr.extend( - self._bgcolor.downgrade(color_system).get_ansi_codes( - foreground=False - ) - ) - self._ansi = ";".join(sgr) - return self._ansi - - @classmethod - @lru_cache(maxsize=1024) - def normalize(cls, style: str) -> str: - """Normalize a style definition so that styles with the same effect have the same string - representation. - - Args: - style (str): A style definition. - - Returns: - str: Normal form of style definition. - """ - try: - return str(cls.parse(style)) - except errors.StyleSyntaxError: - return style.strip().lower() - - @classmethod - def pick_first(cls, *values: Optional[StyleType]) -> StyleType: - """Pick first non-None style.""" - for value in values: - if value is not None: - return value - raise ValueError("expected at least one non-None style") - - def __rich_repr__(self) -> Result: - yield "color", self.color, None - yield "bgcolor", self.bgcolor, None - yield "bold", self.bold, None, - yield "dim", self.dim, None, - yield "italic", self.italic, None - yield "underline", self.underline, None, - yield "blink", self.blink, None - yield "blink2", self.blink2, None - yield "reverse", self.reverse, None - yield "conceal", self.conceal, None - yield "strike", self.strike, None - yield "underline2", self.underline2, None - yield "frame", self.frame, None - yield "encircle", self.encircle, None - yield "link", self.link, None - if self._meta: - yield "meta", self.meta - - def __eq__(self, other: Any) -> bool: - if not isinstance(other, Style): - return NotImplemented - return self.__hash__() == other.__hash__() - - def __ne__(self, other: Any) -> bool: - if not isinstance(other, Style): - return NotImplemented - return self.__hash__() != other.__hash__() - - def __hash__(self) -> int: - if self._hash is not None: - return self._hash - self._hash = hash(_hash_getter(self)) - return self._hash - - @property - def color(self) -> Optional[Color]: - """The foreground color or None if it is not set.""" - return self._color - - @property - def bgcolor(self) -> Optional[Color]: - """The background color or None if it is not set.""" - return self._bgcolor - - @property - def link(self) -> Optional[str]: - """Link text, if set.""" - return self._link - - @property - def transparent_background(self) -> bool: - """Check if the style specified a transparent background.""" - return self.bgcolor is None or self.bgcolor.is_default - - @property - def background_style(self) -> "Style": - """A Style with background only.""" - return Style(bgcolor=self.bgcolor) - - @property - def meta(self) -> Dict[str, Any]: - """Get meta information (can not be changed after construction).""" - return {} if self._meta is None else cast(Dict[str, Any], loads(self._meta)) - - @property - def without_color(self) -> "Style": - """Get a copy of the style with color removed.""" - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = None - style._style_definition = None - style._color = None - style._bgcolor = None - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = self._link - style._link_id = f"{randint(0, 999999)}" if self._link else "" - style._null = False - style._meta = None - style._hash = None - return style - - @classmethod - @lru_cache(maxsize=4096) - def parse(cls, style_definition: str) -> "Style": - """Parse a style definition. - - Args: - style_definition (str): A string containing a style. - - Raises: - errors.StyleSyntaxError: If the style definition syntax is invalid. - - Returns: - `Style`: A Style instance. - """ - if style_definition.strip() == "none" or not style_definition: - return cls.null() - - STYLE_ATTRIBUTES = cls.STYLE_ATTRIBUTES - color: Optional[str] = None - bgcolor: Optional[str] = None - attributes: Dict[str, Optional[Any]] = {} - link: Optional[str] = None - - words = iter(style_definition.split()) - for original_word in words: - word = original_word.lower() - if word == "on": - word = next(words, "") - if not word: - raise errors.StyleSyntaxError("color expected after 'on'") - try: - Color.parse(word) - except ColorParseError as error: - raise errors.StyleSyntaxError( - f"unable to parse {word!r} as background color; {error}" - ) from None - bgcolor = word - - elif word == "not": - word = next(words, "") - attribute = STYLE_ATTRIBUTES.get(word) - if attribute is None: - raise errors.StyleSyntaxError( - f"expected style attribute after 'not', found {word!r}" - ) - attributes[attribute] = False - - elif word == "link": - word = next(words, "") - if not word: - raise errors.StyleSyntaxError("URL expected after 'link'") - link = word - - elif word in STYLE_ATTRIBUTES: - attributes[STYLE_ATTRIBUTES[word]] = True - - else: - try: - Color.parse(word) - except ColorParseError as error: - raise errors.StyleSyntaxError( - f"unable to parse {word!r} as color; {error}" - ) from None - color = word - style = Style(color=color, bgcolor=bgcolor, link=link, **attributes) - return style - - @lru_cache(maxsize=1024) - def get_html_style(self, theme: Optional[TerminalTheme] = None) -> str: - """Get a CSS style rule.""" - theme = theme or DEFAULT_TERMINAL_THEME - css: List[str] = [] - append = css.append - - color = self.color - bgcolor = self.bgcolor - if self.reverse: - color, bgcolor = bgcolor, color - if self.dim: - foreground_color = ( - theme.foreground_color if color is None else color.get_truecolor(theme) - ) - color = Color.from_triplet( - blend_rgb(foreground_color, theme.background_color, 0.5) - ) - if color is not None: - theme_color = color.get_truecolor(theme) - append(f"color: {theme_color.hex}") - append(f"text-decoration-color: {theme_color.hex}") - if bgcolor is not None: - theme_color = bgcolor.get_truecolor(theme, foreground=False) - append(f"background-color: {theme_color.hex}") - if self.bold: - append("font-weight: bold") - if self.italic: - append("font-style: italic") - if self.underline: - append("text-decoration: underline") - if self.strike: - append("text-decoration: line-through") - if self.overline: - append("text-decoration: overline") - return "; ".join(css) - - @classmethod - def combine(cls, styles: Iterable["Style"]) -> "Style": - """Combine styles and get result. - - Args: - styles (Iterable[Style]): Styles to combine. - - Returns: - Style: A new style instance. - """ - iter_styles = iter(styles) - return sum(iter_styles, next(iter_styles)) - - @classmethod - def chain(cls, *styles: "Style") -> "Style": - """Combine styles from positional argument in to a single style. - - Args: - *styles (Iterable[Style]): Styles to combine. - - Returns: - Style: A new style instance. - """ - iter_styles = iter(styles) - return sum(iter_styles, next(iter_styles)) - - def copy(self) -> "Style": - """Get a copy of this style. - - Returns: - Style: A new Style instance with identical attributes. - """ - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = self._link - style._link_id = f"{randint(0, 999999)}" if self._link else "" - style._hash = self._hash - style._null = False - style._meta = self._meta - return style - - @lru_cache(maxsize=128) - def clear_meta_and_links(self) -> "Style": - """Get a copy of this style with link and meta information removed. - - Returns: - Style: New style object. - """ - if self._null: - return NULL_STYLE - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = None - style._link_id = "" - style._hash = None - style._null = False - style._meta = None - return style - - def update_link(self, link: Optional[str] = None) -> "Style": - """Get a copy with a different value for link. - - Args: - link (str, optional): New value for link. Defaults to None. - - Returns: - Style: A new Style instance. - """ - style: Style = self.__new__(Style) - style._ansi = self._ansi - style._style_definition = self._style_definition - style._color = self._color - style._bgcolor = self._bgcolor - style._attributes = self._attributes - style._set_attributes = self._set_attributes - style._link = link - style._link_id = f"{randint(0, 999999)}" if link else "" - style._hash = None - style._null = False - style._meta = self._meta - return style - - def render( - self, - text: str = "", - *, - color_system: Optional[ColorSystem] = ColorSystem.TRUECOLOR, - legacy_windows: bool = False, - ) -> str: - """Render the ANSI codes for the style. - - Args: - text (str, optional): A string to style. Defaults to "". - color_system (Optional[ColorSystem], optional): Color system to render to. Defaults to ColorSystem.TRUECOLOR. - - Returns: - str: A string containing ANSI style codes. - """ - if not text or color_system is None: - return text - attrs = self._ansi or self._make_ansi_codes(color_system) - rendered = f"\x1b[{attrs}m{text}\x1b[0m" if attrs else text - if self._link and not legacy_windows: - rendered = ( - f"\x1b]8;id={self._link_id};{self._link}\x1b\\{rendered}\x1b]8;;\x1b\\" - ) - return rendered - - def test(self, text: Optional[str] = None) -> None: - """Write text with style directly to terminal. - - This method is for testing purposes only. - - Args: - text (Optional[str], optional): Text to style or None for style name. - - """ - text = text or str(self) - sys.stdout.write(f"{self.render(text)}\n") - - @lru_cache(maxsize=1024) - def _add(self, style: Optional["Style"]) -> "Style": - if style is None or style._null: - return self - if self._null: - return style - new_style: Style = self.__new__(Style) - new_style._ansi = None - new_style._style_definition = None - new_style._color = style._color or self._color - new_style._bgcolor = style._bgcolor or self._bgcolor - new_style._attributes = (self._attributes & ~style._set_attributes) | ( - style._attributes & style._set_attributes - ) - new_style._set_attributes = self._set_attributes | style._set_attributes - new_style._link = style._link or self._link - new_style._link_id = style._link_id or self._link_id - new_style._null = style._null - if self._meta and style._meta: - new_style._meta = dumps({**self.meta, **style.meta}) - else: - new_style._meta = self._meta or style._meta - new_style._hash = None - return new_style - - def __add__(self, style: Optional["Style"]) -> "Style": - combined_style = self._add(style) - return combined_style.copy() if combined_style.link else combined_style - - -NULL_STYLE = Style() - - -class StyleStack: - """A stack of styles.""" - - __slots__ = ["_stack"] - - def __init__(self, default_style: "Style") -> None: - self._stack: List[Style] = [default_style] - - def __repr__(self) -> str: - return f"<stylestack {self._stack!r}>" - - @property - def current(self) -> Style: - """Get the Style at the top of the stack.""" - return self._stack[-1] - - def push(self, style: Style) -> None: - """Push a new style on to the stack. - - Args: - style (Style): New style to combine with current style. - """ - self._stack.append(self._stack[-1] + style) - - def pop(self) -> Style: - """Pop last style and discard. - - Returns: - Style: New current style (also available as stack.current) - """ - self._stack.pop() - return self._stack[-1] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/styled.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/styled.py deleted file mode 100644 index 91cd0db31..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/styled.py +++ /dev/null @@ -1,42 +0,0 @@ -from typing import TYPE_CHECKING - -from .measure import Measurement -from .segment import Segment -from .style import StyleType - -if TYPE_CHECKING: - from .console import Console, ConsoleOptions, RenderResult, RenderableType - - -class Styled: - """Apply a style to a renderable. - - Args: - renderable (RenderableType): Any renderable. - style (StyleType): A style to apply across the entire renderable. - """ - - def __init__(self, renderable: "RenderableType", style: "StyleType") -> None: - self.renderable = renderable - self.style = style - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - style = console.get_style(self.style) - rendered_segments = console.render(self.renderable, options) - segments = Segment.apply_style(rendered_segments, style) - return segments - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - return Measurement.get(console, options, self.renderable) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich import print - from pip._vendor.rich.panel import Panel - - panel = Styled(Panel("hello"), "on blue") - print(panel) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/syntax.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/syntax.py deleted file mode 100644 index ec0d903e0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/syntax.py +++ /dev/null @@ -1,985 +0,0 @@ -from __future__ import annotations - -import os.path -import re -import sys -import textwrap -from abc import ABC, abstractmethod -from pathlib import Path -from typing import ( - Any, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Set, - Tuple, - Type, - Union, -) - -from pip._vendor.pygments.lexer import Lexer -from pip._vendor.pygments.lexers import get_lexer_by_name, guess_lexer_for_filename -from pip._vendor.pygments.style import Style as PygmentsStyle -from pip._vendor.pygments.styles import get_style_by_name -from pip._vendor.pygments.token import ( - Comment, - Error, - Generic, - Keyword, - Name, - Number, - Operator, - String, - Token, - Whitespace, -) -from pip._vendor.pygments.util import ClassNotFound - -from pip._vendor.rich.containers import Lines -from pip._vendor.rich.padding import Padding, PaddingDimensions - -from ._loop import loop_first -from .cells import cell_len -from .color import Color, blend_rgb -from .console import Console, ConsoleOptions, JustifyMethod, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment, Segments -from .style import Style, StyleType -from .text import Text - -TokenType = Tuple[str, ...] - -WINDOWS = sys.platform == "win32" -DEFAULT_THEME = "monokai" - -# The following styles are based on https://github.com/pygments/pygments/blob/master/pygments/formatters/terminal.py -# A few modifications were made - -ANSI_LIGHT: Dict[TokenType, Style] = { - Token: Style(), - Whitespace: Style(color="white"), - Comment: Style(dim=True), - Comment.Preproc: Style(color="cyan"), - Keyword: Style(color="blue"), - Keyword.Type: Style(color="cyan"), - Operator.Word: Style(color="magenta"), - Name.Builtin: Style(color="cyan"), - Name.Function: Style(color="green"), - Name.Namespace: Style(color="cyan", underline=True), - Name.Class: Style(color="green", underline=True), - Name.Exception: Style(color="cyan"), - Name.Decorator: Style(color="magenta", bold=True), - Name.Variable: Style(color="red"), - Name.Constant: Style(color="red"), - Name.Attribute: Style(color="cyan"), - Name.Tag: Style(color="bright_blue"), - String: Style(color="yellow"), - Number: Style(color="blue"), - Generic.Deleted: Style(color="bright_red"), - Generic.Inserted: Style(color="green"), - Generic.Heading: Style(bold=True), - Generic.Subheading: Style(color="magenta", bold=True), - Generic.Prompt: Style(bold=True), - Generic.Error: Style(color="bright_red"), - Error: Style(color="red", underline=True), -} - -ANSI_DARK: Dict[TokenType, Style] = { - Token: Style(), - Whitespace: Style(color="bright_black"), - Comment: Style(dim=True), - Comment.Preproc: Style(color="bright_cyan"), - Keyword: Style(color="bright_blue"), - Keyword.Type: Style(color="bright_cyan"), - Operator.Word: Style(color="bright_magenta"), - Name.Builtin: Style(color="bright_cyan"), - Name.Function: Style(color="bright_green"), - Name.Namespace: Style(color="bright_cyan", underline=True), - Name.Class: Style(color="bright_green", underline=True), - Name.Exception: Style(color="bright_cyan"), - Name.Decorator: Style(color="bright_magenta", bold=True), - Name.Variable: Style(color="bright_red"), - Name.Constant: Style(color="bright_red"), - Name.Attribute: Style(color="bright_cyan"), - Name.Tag: Style(color="bright_blue"), - String: Style(color="yellow"), - Number: Style(color="bright_blue"), - Generic.Deleted: Style(color="bright_red"), - Generic.Inserted: Style(color="bright_green"), - Generic.Heading: Style(bold=True), - Generic.Subheading: Style(color="bright_magenta", bold=True), - Generic.Prompt: Style(bold=True), - Generic.Error: Style(color="bright_red"), - Error: Style(color="red", underline=True), -} - -RICH_SYNTAX_THEMES = {"ansi_light": ANSI_LIGHT, "ansi_dark": ANSI_DARK} -NUMBERS_COLUMN_DEFAULT_PADDING = 2 - - -class SyntaxTheme(ABC): - """Base class for a syntax theme.""" - - @abstractmethod - def get_style_for_token(self, token_type: TokenType) -> Style: - """Get a style for a given Pygments token.""" - raise NotImplementedError # pragma: no cover - - @abstractmethod - def get_background_style(self) -> Style: - """Get the background color.""" - raise NotImplementedError # pragma: no cover - - -class PygmentsSyntaxTheme(SyntaxTheme): - """Syntax theme that delegates to Pygments theme.""" - - def __init__(self, theme: Union[str, Type[PygmentsStyle]]) -> None: - self._style_cache: Dict[TokenType, Style] = {} - if isinstance(theme, str): - try: - self._pygments_style_class = get_style_by_name(theme) - except ClassNotFound: - self._pygments_style_class = get_style_by_name("default") - else: - self._pygments_style_class = theme - - self._background_color = self._pygments_style_class.background_color - self._background_style = Style(bgcolor=self._background_color) - - def get_style_for_token(self, token_type: TokenType) -> Style: - """Get a style from a Pygments class.""" - try: - return self._style_cache[token_type] - except KeyError: - try: - pygments_style = self._pygments_style_class.style_for_token(token_type) - except KeyError: - style = Style.null() - else: - color = pygments_style["color"] - bgcolor = pygments_style["bgcolor"] - style = Style( - color="#" + color if color else "#000000", - bgcolor="#" + bgcolor if bgcolor else self._background_color, - bold=pygments_style["bold"], - italic=pygments_style["italic"], - underline=pygments_style["underline"], - ) - self._style_cache[token_type] = style - return style - - def get_background_style(self) -> Style: - return self._background_style - - -class ANSISyntaxTheme(SyntaxTheme): - """Syntax theme to use standard colors.""" - - def __init__(self, style_map: Dict[TokenType, Style]) -> None: - self.style_map = style_map - self._missing_style = Style.null() - self._background_style = Style.null() - self._style_cache: Dict[TokenType, Style] = {} - - def get_style_for_token(self, token_type: TokenType) -> Style: - """Look up style in the style map.""" - try: - return self._style_cache[token_type] - except KeyError: - # Styles form a hierarchy - # We need to go from most to least specific - # e.g. ("foo", "bar", "baz") to ("foo", "bar") to ("foo",) - get_style = self.style_map.get - token = tuple(token_type) - style = self._missing_style - while token: - _style = get_style(token) - if _style is not None: - style = _style - break - token = token[:-1] - self._style_cache[token_type] = style - return style - - def get_background_style(self) -> Style: - return self._background_style - - -SyntaxPosition = Tuple[int, int] - - -class _SyntaxHighlightRange(NamedTuple): - """ - A range to highlight in a Syntax object. - `start` and `end` are 2-integers tuples, where the first integer is the line number - (starting from 1) and the second integer is the column index (starting from 0). - """ - - style: StyleType - start: SyntaxPosition - end: SyntaxPosition - style_before: bool = False - - -class PaddingProperty: - """Descriptor to get and set padding.""" - - def __get__(self, obj: Syntax, objtype: Type[Syntax]) -> Tuple[int, int, int, int]: - """Space around the Syntax.""" - return obj._padding - - def __set__(self, obj: Syntax, padding: PaddingDimensions) -> None: - obj._padding = Padding.unpack(padding) - - -class Syntax(JupyterMixin): - """Construct a Syntax object to render syntax highlighted code. - - Args: - code (str): Code to highlight. - lexer (Lexer | str): Lexer to use (see https://pygments.org/docs/lexers/) - theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "monokai". - dedent (bool, optional): Enable stripping of initial whitespace. Defaults to False. - line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False. - start_line (int, optional): Starting number for line numbers. Defaults to 1. - line_range (Tuple[int | None, int | None], optional): If given should be a tuple of the start and end line to render. - A value of None in the tuple indicates the range is open in that direction. - highlight_lines (Set[int]): A set of line numbers to highlight. - code_width: Width of code to render (not including line numbers), or ``None`` to use all available width. - tab_size (int, optional): Size of tabs. Defaults to 4. - word_wrap (bool, optional): Enable word wrapping. - background_color (str, optional): Optional background color, or None to use theme color. Defaults to None. - indent_guides (bool, optional): Show indent guides. Defaults to False. - padding (PaddingDimensions): Padding to apply around the syntax. Defaults to 0 (no padding). - """ - - _pygments_style_class: Type[PygmentsStyle] - _theme: SyntaxTheme - - @classmethod - def get_theme(cls, name: Union[str, SyntaxTheme]) -> SyntaxTheme: - """Get a syntax theme instance.""" - if isinstance(name, SyntaxTheme): - return name - theme: SyntaxTheme - if name in RICH_SYNTAX_THEMES: - theme = ANSISyntaxTheme(RICH_SYNTAX_THEMES[name]) - else: - theme = PygmentsSyntaxTheme(name) - return theme - - def __init__( - self, - code: str, - lexer: Union[Lexer, str], - *, - theme: Union[str, SyntaxTheme] = DEFAULT_THEME, - dedent: bool = False, - line_numbers: bool = False, - start_line: int = 1, - line_range: Optional[Tuple[Optional[int], Optional[int]]] = None, - highlight_lines: Optional[Set[int]] = None, - code_width: Optional[int] = None, - tab_size: int = 4, - word_wrap: bool = False, - background_color: Optional[str] = None, - indent_guides: bool = False, - padding: PaddingDimensions = 0, - ) -> None: - self.code = code - self._lexer = lexer - self.dedent = dedent - self.line_numbers = line_numbers - self.start_line = start_line - self.line_range = line_range - self.highlight_lines = highlight_lines or set() - self.code_width = code_width - self.tab_size = tab_size - self.word_wrap = word_wrap - self.background_color = background_color - self.background_style = ( - Style(bgcolor=background_color) if background_color else Style() - ) - self.indent_guides = indent_guides - self._padding = Padding.unpack(padding) - - self._theme = self.get_theme(theme) - self._stylized_ranges: List[_SyntaxHighlightRange] = [] - - padding = PaddingProperty() - - @classmethod - def from_path( - cls, - path: str, - encoding: str = "utf-8", - lexer: Optional[Union[Lexer, str]] = None, - theme: Union[str, SyntaxTheme] = DEFAULT_THEME, - dedent: bool = False, - line_numbers: bool = False, - line_range: Optional[Tuple[int, int]] = None, - start_line: int = 1, - highlight_lines: Optional[Set[int]] = None, - code_width: Optional[int] = None, - tab_size: int = 4, - word_wrap: bool = False, - background_color: Optional[str] = None, - indent_guides: bool = False, - padding: PaddingDimensions = 0, - ) -> "Syntax": - """Construct a Syntax object from a file. - - Args: - path (str): Path to file to highlight. - encoding (str): Encoding of file. - lexer (str | Lexer, optional): Lexer to use. If None, lexer will be auto-detected from path/file content. - theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "emacs". - dedent (bool, optional): Enable stripping of initial whitespace. Defaults to True. - line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False. - start_line (int, optional): Starting number for line numbers. Defaults to 1. - line_range (Tuple[int, int], optional): If given should be a tuple of the start and end line to render. - highlight_lines (Set[int]): A set of line numbers to highlight. - code_width: Width of code to render (not including line numbers), or ``None`` to use all available width. - tab_size (int, optional): Size of tabs. Defaults to 4. - word_wrap (bool, optional): Enable word wrapping of code. - background_color (str, optional): Optional background color, or None to use theme color. Defaults to None. - indent_guides (bool, optional): Show indent guides. Defaults to False. - padding (PaddingDimensions): Padding to apply around the syntax. Defaults to 0 (no padding). - - Returns: - [Syntax]: A Syntax object that may be printed to the console - """ - code = Path(path).read_text(encoding=encoding) - - if not lexer: - lexer = cls.guess_lexer(path, code=code) - - return cls( - code, - lexer, - theme=theme, - dedent=dedent, - line_numbers=line_numbers, - line_range=line_range, - start_line=start_line, - highlight_lines=highlight_lines, - code_width=code_width, - tab_size=tab_size, - word_wrap=word_wrap, - background_color=background_color, - indent_guides=indent_guides, - padding=padding, - ) - - @classmethod - def guess_lexer(cls, path: str, code: Optional[str] = None) -> str: - """Guess the alias of the Pygments lexer to use based on a path and an optional string of code. - If code is supplied, it will use a combination of the code and the filename to determine the - best lexer to use. For example, if the file is ``index.html`` and the file contains Django - templating syntax, then "html+django" will be returned. If the file is ``index.html``, and no - templating language is used, the "html" lexer will be used. If no string of code - is supplied, the lexer will be chosen based on the file extension.. - - Args: - path (AnyStr): The path to the file containing the code you wish to know the lexer for. - code (str, optional): Optional string of code that will be used as a fallback if no lexer - is found for the supplied path. - - Returns: - str: The name of the Pygments lexer that best matches the supplied path/code. - """ - lexer: Optional[Lexer] = None - lexer_name = "default" - if code: - try: - lexer = guess_lexer_for_filename(path, code) - except ClassNotFound: - pass - - if not lexer: - try: - _, ext = os.path.splitext(path) - if ext: - extension = ext.lstrip(".").lower() - lexer = get_lexer_by_name(extension) - except ClassNotFound: - pass - - if lexer: - if lexer.aliases: - lexer_name = lexer.aliases[0] - else: - lexer_name = lexer.name - - return lexer_name - - def _get_base_style(self) -> Style: - """Get the base style.""" - default_style = self._theme.get_background_style() + self.background_style - return default_style - - def _get_token_color(self, token_type: TokenType) -> Optional[Color]: - """Get a color (if any) for the given token. - - Args: - token_type (TokenType): A token type tuple from Pygments. - - Returns: - Optional[Color]: Color from theme, or None for no color. - """ - style = self._theme.get_style_for_token(token_type) - return style.color - - @property - def lexer(self) -> Optional[Lexer]: - """The lexer for this syntax, or None if no lexer was found. - - Tries to find the lexer by name if a string was passed to the constructor. - """ - - if isinstance(self._lexer, Lexer): - return self._lexer - try: - return get_lexer_by_name( - self._lexer, - stripnl=False, - ensurenl=True, - tabsize=self.tab_size, - ) - except ClassNotFound: - return None - - @property - def default_lexer(self) -> Lexer: - """A Pygments Lexer to use if one is not specified or invalid.""" - return get_lexer_by_name( - "text", - stripnl=False, - ensurenl=True, - tabsize=self.tab_size, - ) - - def highlight( - self, - code: str, - line_range: Optional[Tuple[Optional[int], Optional[int]]] = None, - ) -> Text: - """Highlight code and return a Text instance. - - Args: - code (str): Code to highlight. - line_range(Tuple[int, int], optional): Optional line range to highlight. - - Returns: - Text: A text instance containing highlighted syntax. - """ - - base_style = self._get_base_style() - justify: JustifyMethod = ( - "default" if base_style.transparent_background else "left" - ) - - text = Text( - justify=justify, - style=base_style, - tab_size=self.tab_size, - no_wrap=not self.word_wrap, - ) - _get_theme_style = self._theme.get_style_for_token - - lexer = self.lexer or self.default_lexer - - if lexer is None: - text.append(code) - else: - if line_range: - # More complicated path to only stylize a portion of the code - # This speeds up further operations as there are less spans to process - line_start, line_end = line_range - - def line_tokenize() -> Iterable[Tuple[Any, str]]: - """Split tokens to one per line.""" - assert lexer # required to make MyPy happy - we know lexer is not None at this point - - for token_type, token in lexer.get_tokens(code): - while token: - line_token, new_line, token = token.partition("\n") - yield token_type, line_token + new_line - - def tokens_to_spans() -> Iterable[Tuple[str, Optional[Style]]]: - """Convert tokens to spans.""" - tokens = iter(line_tokenize()) - line_no = 0 - _line_start = line_start - 1 if line_start else 0 - - # Skip over tokens until line start - while line_no < _line_start: - try: - _token_type, token = next(tokens) - except StopIteration: - break - yield (token, None) - if token.endswith("\n"): - line_no += 1 - # Generate spans until line end - for token_type, token in tokens: - yield (token, _get_theme_style(token_type)) - if token.endswith("\n"): - line_no += 1 - if line_end and line_no >= line_end: - break - - text.append_tokens(tokens_to_spans()) - - else: - text.append_tokens( - (token, _get_theme_style(token_type)) - for token_type, token in lexer.get_tokens(code) - ) - if self.background_color is not None: - text.stylize(f"on {self.background_color}") - - if self._stylized_ranges: - self._apply_stylized_ranges(text) - - return text - - def stylize_range( - self, - style: StyleType, - start: SyntaxPosition, - end: SyntaxPosition, - style_before: bool = False, - ) -> None: - """ - Adds a custom style on a part of the code, that will be applied to the syntax display when it's rendered. - Line numbers are 1-based, while column indexes are 0-based. - - Args: - style (StyleType): The style to apply. - start (Tuple[int, int]): The start of the range, in the form `[line number, column index]`. - end (Tuple[int, int]): The end of the range, in the form `[line number, column index]`. - style_before (bool): Apply the style before any existing styles. - """ - self._stylized_ranges.append( - _SyntaxHighlightRange(style, start, end, style_before) - ) - - def _get_line_numbers_color(self, blend: float = 0.3) -> Color: - background_style = self._theme.get_background_style() + self.background_style - background_color = background_style.bgcolor - if background_color is None or background_color.is_system_defined: - return Color.default() - foreground_color = self._get_token_color(Token.Text) - if foreground_color is None or foreground_color.is_system_defined: - return foreground_color or Color.default() - new_color = blend_rgb( - background_color.get_truecolor(), - foreground_color.get_truecolor(), - cross_fade=blend, - ) - return Color.from_triplet(new_color) - - @property - def _numbers_column_width(self) -> int: - """Get the number of characters used to render the numbers column.""" - column_width = 0 - if self.line_numbers: - column_width = ( - len(str(self.start_line + self.code.count("\n"))) - + NUMBERS_COLUMN_DEFAULT_PADDING - ) - return column_width - - def _get_number_styles(self, console: Console) -> Tuple[Style, Style, Style]: - """Get background, number, and highlight styles for line numbers.""" - background_style = self._get_base_style() - if background_style.transparent_background: - return Style.null(), Style(dim=True), Style.null() - if console.color_system in ("256", "truecolor"): - number_style = Style.chain( - background_style, - self._theme.get_style_for_token(Token.Text), - Style(color=self._get_line_numbers_color()), - self.background_style, - ) - highlight_number_style = Style.chain( - background_style, - self._theme.get_style_for_token(Token.Text), - Style(bold=True, color=self._get_line_numbers_color(0.9)), - self.background_style, - ) - else: - number_style = background_style + Style(dim=True) - highlight_number_style = background_style + Style(dim=False) - return background_style, number_style, highlight_number_style - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - _, right, _, left = self.padding - padding = left + right - if self.code_width is not None: - width = self.code_width + self._numbers_column_width + padding + 1 - return Measurement(self._numbers_column_width, width) - lines = self.code.splitlines() - width = ( - self._numbers_column_width - + padding - + (max(cell_len(line) for line in lines) if lines else 0) - ) - if self.line_numbers: - width += 1 - return Measurement(self._numbers_column_width, width) - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - segments = Segments(self._get_syntax(console, options)) - if any(self.padding): - yield Padding(segments, style=self._get_base_style(), pad=self.padding) - else: - yield segments - - def _get_syntax( - self, - console: Console, - options: ConsoleOptions, - ) -> Iterable[Segment]: - """ - Get the Segments for the Syntax object, excluding any vertical/horizontal padding - """ - transparent_background = self._get_base_style().transparent_background - _pad_top, pad_right, _pad_bottom, pad_left = self.padding - horizontal_padding = pad_left + pad_right - code_width = ( - ( - (options.max_width - self._numbers_column_width - 1) - if self.line_numbers - else options.max_width - ) - - horizontal_padding - if self.code_width is None - else self.code_width - ) - code_width = max(0, code_width) - - ends_on_nl, processed_code = self._process_code(self.code) - text = self.highlight(processed_code, self.line_range) - - if not self.line_numbers and not self.word_wrap and not self.line_range: - if not ends_on_nl: - text.remove_suffix("\n") - # Simple case of just rendering text - style = ( - self._get_base_style() - + self._theme.get_style_for_token(Comment) - + Style(dim=True) - + self.background_style - ) - if self.indent_guides and not options.ascii_only: - text = text.with_indent_guides(self.tab_size, style=style) - text.overflow = "crop" - if style.transparent_background: - yield from console.render( - text, options=options.update(width=code_width) - ) - else: - syntax_lines = console.render_lines( - text, - options.update(width=code_width, height=None, justify="left"), - style=self.background_style, - pad=True, - new_lines=True, - ) - for syntax_line in syntax_lines: - yield from syntax_line - return - - start_line, end_line = self.line_range or (None, None) - line_offset = 0 - if start_line: - line_offset = max(0, start_line - 1) - lines: Union[List[Text], Lines] = text.split("\n", allow_blank=ends_on_nl) - if self.line_range: - if line_offset > len(lines): - return - lines = lines[line_offset:end_line] - - if self.indent_guides and not options.ascii_only: - style = ( - self._get_base_style() - + self._theme.get_style_for_token(Comment) - + Style(dim=True) - + self.background_style - ) - lines = ( - Text("\n") - .join(lines) - .with_indent_guides(self.tab_size, style=style + Style(italic=False)) - .split("\n", allow_blank=True) - ) - - numbers_column_width = self._numbers_column_width - render_options = options.update(width=code_width) - - highlight_line = self.highlight_lines.__contains__ - _Segment = Segment - new_line = _Segment("\n") - - line_pointer = "> " if options.legacy_windows else "❱ " - - ( - background_style, - number_style, - highlight_number_style, - ) = self._get_number_styles(console) - - for line_no, line in enumerate(lines, self.start_line + line_offset): - if self.word_wrap: - wrapped_lines = console.render_lines( - line, - render_options.update(height=None, justify="left"), - style=background_style, - pad=not transparent_background, - ) - else: - segments = list(line.render(console, end="")) - if options.no_wrap: - wrapped_lines = [segments] - else: - wrapped_lines = [ - _Segment.adjust_line_length( - segments, - render_options.max_width, - style=background_style, - pad=not transparent_background, - ) - ] - - if self.line_numbers: - wrapped_line_left_pad = _Segment( - " " * numbers_column_width + " ", background_style - ) - for first, wrapped_line in loop_first(wrapped_lines): - if first: - line_column = str(line_no).rjust(numbers_column_width - 2) + " " - if highlight_line(line_no): - yield _Segment(line_pointer, Style(color="red")) - yield _Segment(line_column, highlight_number_style) - else: - yield _Segment(" ", highlight_number_style) - yield _Segment(line_column, number_style) - else: - yield wrapped_line_left_pad - yield from wrapped_line - yield new_line - else: - for wrapped_line in wrapped_lines: - yield from wrapped_line - yield new_line - - def _apply_stylized_ranges(self, text: Text) -> None: - """ - Apply stylized ranges to a text instance, - using the given code to determine the right portion to apply the style to. - - Args: - text (Text): Text instance to apply the style to. - """ - code = text.plain - newlines_offsets = [ - # Let's add outer boundaries at each side of the list: - 0, - # N.B. using "\n" here is much faster than using metacharacters such as "^" or "\Z": - *[ - match.start() + 1 - for match in re.finditer("\n", code, flags=re.MULTILINE) - ], - len(code) + 1, - ] - - for stylized_range in self._stylized_ranges: - start = _get_code_index_for_syntax_position( - newlines_offsets, stylized_range.start - ) - end = _get_code_index_for_syntax_position( - newlines_offsets, stylized_range.end - ) - if start is not None and end is not None: - if stylized_range.style_before: - text.stylize_before(stylized_range.style, start, end) - else: - text.stylize(stylized_range.style, start, end) - - def _process_code(self, code: str) -> Tuple[bool, str]: - """ - Applies various processing to a raw code string - (normalises it so it always ends with a line return, dedents it if necessary, etc.) - - Args: - code (str): The raw code string to process - - Returns: - Tuple[bool, str]: the boolean indicates whether the raw code ends with a line return, - while the string is the processed code. - """ - ends_on_nl = code.endswith("\n") - processed_code = code if ends_on_nl else code + "\n" - processed_code = ( - textwrap.dedent(processed_code) if self.dedent else processed_code - ) - processed_code = processed_code.expandtabs(self.tab_size) - return ends_on_nl, processed_code - - -def _get_code_index_for_syntax_position( - newlines_offsets: Sequence[int], position: SyntaxPosition -) -> Optional[int]: - """ - Returns the index of the code string for the given positions. - - Args: - newlines_offsets (Sequence[int]): The offset of each newline character found in the code snippet. - position (SyntaxPosition): The position to search for. - - Returns: - Optional[int]: The index of the code string for this position, or `None` - if the given position's line number is out of range (if it's the column that is out of range - we silently clamp its value so that it reaches the end of the line) - """ - lines_count = len(newlines_offsets) - - line_number, column_index = position - if line_number > lines_count or len(newlines_offsets) < (line_number + 1): - return None # `line_number` is out of range - line_index = line_number - 1 - line_length = newlines_offsets[line_index + 1] - newlines_offsets[line_index] - 1 - # If `column_index` is out of range: let's silently clamp it: - column_index = min(line_length, column_index) - return newlines_offsets[line_index] + column_index - - -if __name__ == "__main__": # pragma: no cover - import argparse - import sys - - parser = argparse.ArgumentParser( - description="Render syntax to the console with Rich" - ) - parser.add_argument( - "path", - metavar="PATH", - help="path to file, or - for stdin", - ) - parser.add_argument( - "-c", - "--force-color", - dest="force_color", - action="store_true", - default=None, - help="force color for non-terminals", - ) - parser.add_argument( - "-i", - "--indent-guides", - dest="indent_guides", - action="store_true", - default=False, - help="display indent guides", - ) - parser.add_argument( - "-l", - "--line-numbers", - dest="line_numbers", - action="store_true", - help="render line numbers", - ) - parser.add_argument( - "-w", - "--width", - type=int, - dest="width", - default=None, - help="width of output (default will auto-detect)", - ) - parser.add_argument( - "-r", - "--wrap", - dest="word_wrap", - action="store_true", - default=False, - help="word wrap long lines", - ) - parser.add_argument( - "-s", - "--soft-wrap", - action="store_true", - dest="soft_wrap", - default=False, - help="enable soft wrapping mode", - ) - parser.add_argument( - "-t", "--theme", dest="theme", default="monokai", help="pygments theme" - ) - parser.add_argument( - "-b", - "--background-color", - dest="background_color", - default=None, - help="Override background color", - ) - parser.add_argument( - "-x", - "--lexer", - default=None, - dest="lexer_name", - help="Lexer name", - ) - parser.add_argument( - "-p", "--padding", type=int, default=0, dest="padding", help="Padding" - ) - parser.add_argument( - "--highlight-line", - type=int, - default=None, - dest="highlight_line", - help="The line number (not index!) to highlight", - ) - args = parser.parse_args() - - from pip._vendor.rich.console import Console - - console = Console(force_terminal=args.force_color, width=args.width) - - if args.path == "-": - code = sys.stdin.read() - syntax = Syntax( - code=code, - lexer=args.lexer_name, - line_numbers=args.line_numbers, - word_wrap=args.word_wrap, - theme=args.theme, - background_color=args.background_color, - indent_guides=args.indent_guides, - padding=args.padding, - highlight_lines={args.highlight_line}, - ) - else: - syntax = Syntax.from_path( - args.path, - lexer=args.lexer_name, - line_numbers=args.line_numbers, - word_wrap=args.word_wrap, - theme=args.theme, - background_color=args.background_color, - indent_guides=args.indent_guides, - padding=args.padding, - highlight_lines={args.highlight_line}, - ) - console.print(syntax, soft_wrap=args.soft_wrap) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/table.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/table.py deleted file mode 100644 index 2b9e3b5d7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/table.py +++ /dev/null @@ -1,1006 +0,0 @@ -from dataclasses import dataclass, field, replace -from typing import ( - TYPE_CHECKING, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Sequence, - Tuple, - Union, -) - -from . import box, errors -from ._loop import loop_first_last, loop_last -from ._pick import pick_bool -from ._ratio import ratio_distribute, ratio_reduce -from .align import VerticalAlignMethod -from .jupyter import JupyterMixin -from .measure import Measurement -from .padding import Padding, PaddingDimensions -from .protocol import is_renderable -from .segment import Segment -from .style import Style, StyleType -from .text import Text, TextType - -if TYPE_CHECKING: - from .console import ( - Console, - ConsoleOptions, - JustifyMethod, - OverflowMethod, - RenderableType, - RenderResult, - ) - - -@dataclass -class Column: - """Defines a column within a ~Table. - - Args: - title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. - caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. - width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. - min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. - box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. - safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. - pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - show_header (bool, optional): Show a header row. Defaults to True. - show_footer (bool, optional): Show a footer row. Defaults to False. - show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. - show_lines (bool, optional): Draw lines between every row. Defaults to False. - leading (int, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. - style (Union[str, Style], optional): Default style for the table. Defaults to "none". - row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. - header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". - footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". - border_style (Union[str, Style], optional): Style of the border. Defaults to None. - title_style (Union[str, Style], optional): Style of the title. Defaults to None. - caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. - title_justify (str, optional): Justify method for title. Defaults to "center". - caption_justify (str, optional): Justify method for caption. Defaults to "center". - highlight (bool, optional): Highlight cell contents (if str). Defaults to False. - """ - - header: "RenderableType" = "" - """RenderableType: Renderable for the header (typically a string)""" - - footer: "RenderableType" = "" - """RenderableType: Renderable for the footer (typically a string)""" - - header_style: StyleType = "" - """StyleType: The style of the header.""" - - footer_style: StyleType = "" - """StyleType: The style of the footer.""" - - style: StyleType = "" - """StyleType: The style of the column.""" - - justify: "JustifyMethod" = "left" - """str: How to justify text within the column ("left", "center", "right", or "full")""" - - vertical: "VerticalAlignMethod" = "top" - """str: How to vertically align content ("top", "middle", or "bottom")""" - - overflow: "OverflowMethod" = "ellipsis" - """str: Overflow method.""" - - width: Optional[int] = None - """Optional[int]: Width of the column, or ``None`` (default) to auto calculate width.""" - - min_width: Optional[int] = None - """Optional[int]: Minimum width of column, or ``None`` for no minimum. Defaults to None.""" - - max_width: Optional[int] = None - """Optional[int]: Maximum width of column, or ``None`` for no maximum. Defaults to None.""" - - ratio: Optional[int] = None - """Optional[int]: Ratio to use when calculating column width, or ``None`` (default) to adapt to column contents.""" - - no_wrap: bool = False - """bool: Prevent wrapping of text within the column. Defaults to ``False``.""" - - highlight: bool = False - """bool: Apply highlighter to column. Defaults to ``False``.""" - - _index: int = 0 - """Index of column.""" - - _cells: List["RenderableType"] = field(default_factory=list) - - def copy(self) -> "Column": - """Return a copy of this Column.""" - return replace(self, _cells=[]) - - @property - def cells(self) -> Iterable["RenderableType"]: - """Get all cells in the column, not including header.""" - yield from self._cells - - @property - def flexible(self) -> bool: - """Check if this column is flexible.""" - return self.ratio is not None - - -@dataclass -class Row: - """Information regarding a row.""" - - style: Optional[StyleType] = None - """Style to apply to row.""" - - end_section: bool = False - """Indicated end of section, which will force a line beneath the row.""" - - -class _Cell(NamedTuple): - """A single cell in a table.""" - - style: StyleType - """Style to apply to cell.""" - renderable: "RenderableType" - """Cell renderable.""" - vertical: VerticalAlignMethod - """Cell vertical alignment.""" - - -class Table(JupyterMixin): - """A console renderable to draw a table. - - Args: - *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. - title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. - caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. - width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. - min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. - box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. - safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. - padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. - pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - show_header (bool, optional): Show a header row. Defaults to True. - show_footer (bool, optional): Show a footer row. Defaults to False. - show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. - show_lines (bool, optional): Draw lines between every row. Defaults to False. - leading (int, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. - style (Union[str, Style], optional): Default style for the table. Defaults to "none". - row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. - header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". - footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". - border_style (Union[str, Style], optional): Style of the border. Defaults to None. - title_style (Union[str, Style], optional): Style of the title. Defaults to None. - caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. - title_justify (str, optional): Justify method for title. Defaults to "center". - caption_justify (str, optional): Justify method for caption. Defaults to "center". - highlight (bool, optional): Highlight cell contents (if str). Defaults to False. - """ - - columns: List[Column] - rows: List[Row] - - def __init__( - self, - *headers: Union[Column, str], - title: Optional[TextType] = None, - caption: Optional[TextType] = None, - width: Optional[int] = None, - min_width: Optional[int] = None, - box: Optional[box.Box] = box.HEAVY_HEAD, - safe_box: Optional[bool] = None, - padding: PaddingDimensions = (0, 1), - collapse_padding: bool = False, - pad_edge: bool = True, - expand: bool = False, - show_header: bool = True, - show_footer: bool = False, - show_edge: bool = True, - show_lines: bool = False, - leading: int = 0, - style: StyleType = "none", - row_styles: Optional[Iterable[StyleType]] = None, - header_style: Optional[StyleType] = "table.header", - footer_style: Optional[StyleType] = "table.footer", - border_style: Optional[StyleType] = None, - title_style: Optional[StyleType] = None, - caption_style: Optional[StyleType] = None, - title_justify: "JustifyMethod" = "center", - caption_justify: "JustifyMethod" = "center", - highlight: bool = False, - ) -> None: - self.columns: List[Column] = [] - self.rows: List[Row] = [] - self.title = title - self.caption = caption - self.width = width - self.min_width = min_width - self.box = box - self.safe_box = safe_box - self._padding = Padding.unpack(padding) - self.pad_edge = pad_edge - self._expand = expand - self.show_header = show_header - self.show_footer = show_footer - self.show_edge = show_edge - self.show_lines = show_lines - self.leading = leading - self.collapse_padding = collapse_padding - self.style = style - self.header_style = header_style or "" - self.footer_style = footer_style or "" - self.border_style = border_style - self.title_style = title_style - self.caption_style = caption_style - self.title_justify: "JustifyMethod" = title_justify - self.caption_justify: "JustifyMethod" = caption_justify - self.highlight = highlight - self.row_styles: Sequence[StyleType] = list(row_styles or []) - append_column = self.columns.append - for header in headers: - if isinstance(header, str): - self.add_column(header=header) - else: - header._index = len(self.columns) - append_column(header) - - @classmethod - def grid( - cls, - *headers: Union[Column, str], - padding: PaddingDimensions = 0, - collapse_padding: bool = True, - pad_edge: bool = False, - expand: bool = False, - ) -> "Table": - """Get a table with no lines, headers, or footer. - - Args: - *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. - padding (PaddingDimensions, optional): Get padding around cells. Defaults to 0. - collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to True. - pad_edge (bool, optional): Enable padding around edges of table. Defaults to False. - expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. - - Returns: - Table: A table instance. - """ - return cls( - *headers, - box=None, - padding=padding, - collapse_padding=collapse_padding, - show_header=False, - show_footer=False, - show_edge=False, - pad_edge=pad_edge, - expand=expand, - ) - - @property - def expand(self) -> bool: - """Setting a non-None self.width implies expand.""" - return self._expand or self.width is not None - - @expand.setter - def expand(self, expand: bool) -> None: - """Set expand.""" - self._expand = expand - - @property - def _extra_width(self) -> int: - """Get extra width to add to cell content.""" - width = 0 - if self.box and self.show_edge: - width += 2 - if self.box: - width += len(self.columns) - 1 - return width - - @property - def row_count(self) -> int: - """Get the current number of rows.""" - return len(self.rows) - - def get_row_style(self, console: "Console", index: int) -> StyleType: - """Get the current row style.""" - style = Style.null() - if self.row_styles: - style += console.get_style(self.row_styles[index % len(self.row_styles)]) - row_style = self.rows[index].style - if row_style is not None: - style += console.get_style(row_style) - return style - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - max_width = options.max_width - if self.width is not None: - max_width = self.width - if max_width < 0: - return Measurement(0, 0) - - extra_width = self._extra_width - max_width = sum( - self._calculate_column_widths( - console, options.update_width(max_width - extra_width) - ) - ) - _measure_column = self._measure_column - - measurements = [ - _measure_column(console, options.update_width(max_width), column) - for column in self.columns - ] - minimum_width = ( - sum(measurement.minimum for measurement in measurements) + extra_width - ) - maximum_width = ( - sum(measurement.maximum for measurement in measurements) + extra_width - if (self.width is None) - else self.width - ) - measurement = Measurement(minimum_width, maximum_width) - measurement = measurement.clamp(self.min_width) - return measurement - - @property - def padding(self) -> Tuple[int, int, int, int]: - """Get cell padding.""" - return self._padding - - @padding.setter - def padding(self, padding: PaddingDimensions) -> "Table": - """Set cell padding.""" - self._padding = Padding.unpack(padding) - return self - - def add_column( - self, - header: "RenderableType" = "", - footer: "RenderableType" = "", - *, - header_style: Optional[StyleType] = None, - highlight: Optional[bool] = None, - footer_style: Optional[StyleType] = None, - style: Optional[StyleType] = None, - justify: "JustifyMethod" = "left", - vertical: "VerticalAlignMethod" = "top", - overflow: "OverflowMethod" = "ellipsis", - width: Optional[int] = None, - min_width: Optional[int] = None, - max_width: Optional[int] = None, - ratio: Optional[int] = None, - no_wrap: bool = False, - ) -> None: - """Add a column to the table. - - Args: - header (RenderableType, optional): Text or renderable for the header. - Defaults to "". - footer (RenderableType, optional): Text or renderable for the footer. - Defaults to "". - header_style (Union[str, Style], optional): Style for the header, or None for default. Defaults to None. - highlight (bool, optional): Whether to highlight the text. The default of None uses the value of the table (self) object. - footer_style (Union[str, Style], optional): Style for the footer, or None for default. Defaults to None. - style (Union[str, Style], optional): Style for the column cells, or None for default. Defaults to None. - justify (JustifyMethod, optional): Alignment for cells. Defaults to "left". - vertical (VerticalAlignMethod, optional): Vertical alignment, one of "top", "middle", or "bottom". Defaults to "top". - overflow (OverflowMethod): Overflow method: "crop", "fold", "ellipsis". Defaults to "ellipsis". - width (int, optional): Desired width of column in characters, or None to fit to contents. Defaults to None. - min_width (Optional[int], optional): Minimum width of column, or ``None`` for no minimum. Defaults to None. - max_width (Optional[int], optional): Maximum width of column, or ``None`` for no maximum. Defaults to None. - ratio (int, optional): Flexible ratio for the column (requires ``Table.expand`` or ``Table.width``). Defaults to None. - no_wrap (bool, optional): Set to ``True`` to disable wrapping of this column. - """ - - column = Column( - _index=len(self.columns), - header=header, - footer=footer, - header_style=header_style or "", - highlight=highlight if highlight is not None else self.highlight, - footer_style=footer_style or "", - style=style or "", - justify=justify, - vertical=vertical, - overflow=overflow, - width=width, - min_width=min_width, - max_width=max_width, - ratio=ratio, - no_wrap=no_wrap, - ) - self.columns.append(column) - - def add_row( - self, - *renderables: Optional["RenderableType"], - style: Optional[StyleType] = None, - end_section: bool = False, - ) -> None: - """Add a row of renderables. - - Args: - *renderables (None or renderable): Each cell in a row must be a renderable object (including str), - or ``None`` for a blank cell. - style (StyleType, optional): An optional style to apply to the entire row. Defaults to None. - end_section (bool, optional): End a section and draw a line. Defaults to False. - - Raises: - errors.NotRenderableError: If you add something that can't be rendered. - """ - - def add_cell(column: Column, renderable: "RenderableType") -> None: - column._cells.append(renderable) - - cell_renderables: List[Optional["RenderableType"]] = list(renderables) - - columns = self.columns - if len(cell_renderables) < len(columns): - cell_renderables = [ - *cell_renderables, - *[None] * (len(columns) - len(cell_renderables)), - ] - for index, renderable in enumerate(cell_renderables): - if index == len(columns): - column = Column(_index=index, highlight=self.highlight) - for _ in self.rows: - add_cell(column, Text("")) - self.columns.append(column) - else: - column = columns[index] - if renderable is None: - add_cell(column, "") - elif is_renderable(renderable): - add_cell(column, renderable) - else: - raise errors.NotRenderableError( - f"unable to render {type(renderable).__name__}; a string or other renderable object is required" - ) - self.rows.append(Row(style=style, end_section=end_section)) - - def add_section(self) -> None: - """Add a new section (draw a line after current row).""" - - if self.rows: - self.rows[-1].end_section = True - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - if not self.columns: - yield Segment("\n") - return - - max_width = options.max_width - if self.width is not None: - max_width = self.width - - extra_width = self._extra_width - widths = self._calculate_column_widths( - console, options.update_width(max_width - extra_width) - ) - table_width = sum(widths) + extra_width - - render_options = options.update( - width=table_width, highlight=self.highlight, height=None - ) - - def render_annotation( - text: TextType, style: StyleType, justify: "JustifyMethod" = "center" - ) -> "RenderResult": - render_text = ( - console.render_str(text, style=style, highlight=False) - if isinstance(text, str) - else text - ) - return console.render( - render_text, options=render_options.update(justify=justify) - ) - - if self.title: - yield from render_annotation( - self.title, - style=Style.pick_first(self.title_style, "table.title"), - justify=self.title_justify, - ) - yield from self._render(console, render_options, widths) - if self.caption: - yield from render_annotation( - self.caption, - style=Style.pick_first(self.caption_style, "table.caption"), - justify=self.caption_justify, - ) - - def _calculate_column_widths( - self, console: "Console", options: "ConsoleOptions" - ) -> List[int]: - """Calculate the widths of each column, including padding, not including borders.""" - max_width = options.max_width - columns = self.columns - width_ranges = [ - self._measure_column(console, options, column) for column in columns - ] - widths = [_range.maximum or 1 for _range in width_ranges] - get_padding_width = self._get_padding_width - extra_width = self._extra_width - if self.expand: - ratios = [col.ratio or 0 for col in columns if col.flexible] - if any(ratios): - fixed_widths = [ - 0 if column.flexible else _range.maximum - for _range, column in zip(width_ranges, columns) - ] - flex_minimum = [ - (column.width or 1) + get_padding_width(column._index) - for column in columns - if column.flexible - ] - flexible_width = max_width - sum(fixed_widths) - flex_widths = ratio_distribute(flexible_width, ratios, flex_minimum) - iter_flex_widths = iter(flex_widths) - for index, column in enumerate(columns): - if column.flexible: - widths[index] = fixed_widths[index] + next(iter_flex_widths) - table_width = sum(widths) - - if table_width > max_width: - widths = self._collapse_widths( - widths, - [(column.width is None and not column.no_wrap) for column in columns], - max_width, - ) - table_width = sum(widths) - # last resort, reduce columns evenly - if table_width > max_width: - excess_width = table_width - max_width - widths = ratio_reduce(excess_width, [1] * len(widths), widths, widths) - table_width = sum(widths) - - width_ranges = [ - self._measure_column(console, options.update_width(width), column) - for width, column in zip(widths, columns) - ] - widths = [_range.maximum or 0 for _range in width_ranges] - - if (table_width < max_width and self.expand) or ( - self.min_width is not None and table_width < (self.min_width - extra_width) - ): - _max_width = ( - max_width - if self.min_width is None - else min(self.min_width - extra_width, max_width) - ) - pad_widths = ratio_distribute(_max_width - table_width, widths) - widths = [_width + pad for _width, pad in zip(widths, pad_widths)] - - return widths - - @classmethod - def _collapse_widths( - cls, widths: List[int], wrapable: List[bool], max_width: int - ) -> List[int]: - """Reduce widths so that the total is under max_width. - - Args: - widths (List[int]): List of widths. - wrapable (List[bool]): List of booleans that indicate if a column may shrink. - max_width (int): Maximum width to reduce to. - - Returns: - List[int]: A new list of widths. - """ - total_width = sum(widths) - excess_width = total_width - max_width - if any(wrapable): - while total_width and excess_width > 0: - max_column = max( - width for width, allow_wrap in zip(widths, wrapable) if allow_wrap - ) - second_max_column = max( - width if allow_wrap and width != max_column else 0 - for width, allow_wrap in zip(widths, wrapable) - ) - column_difference = max_column - second_max_column - ratios = [ - (1 if (width == max_column and allow_wrap) else 0) - for width, allow_wrap in zip(widths, wrapable) - ] - if not any(ratios) or not column_difference: - break - max_reduce = [min(excess_width, column_difference)] * len(widths) - widths = ratio_reduce(excess_width, ratios, max_reduce, widths) - - total_width = sum(widths) - excess_width = total_width - max_width - return widths - - def _get_cells( - self, console: "Console", column_index: int, column: Column - ) -> Iterable[_Cell]: - """Get all the cells with padding and optional header.""" - - collapse_padding = self.collapse_padding - pad_edge = self.pad_edge - padding = self.padding - any_padding = any(padding) - - first_column = column_index == 0 - last_column = column_index == len(self.columns) - 1 - - _padding_cache: Dict[Tuple[bool, bool], Tuple[int, int, int, int]] = {} - - def get_padding(first_row: bool, last_row: bool) -> Tuple[int, int, int, int]: - cached = _padding_cache.get((first_row, last_row)) - if cached: - return cached - top, right, bottom, left = padding - - if collapse_padding: - if not first_column: - left = max(0, left - right) - if not last_row: - bottom = max(0, top - bottom) - - if not pad_edge: - if first_column: - left = 0 - if last_column: - right = 0 - if first_row: - top = 0 - if last_row: - bottom = 0 - _padding = (top, right, bottom, left) - _padding_cache[(first_row, last_row)] = _padding - return _padding - - raw_cells: List[Tuple[StyleType, "RenderableType"]] = [] - _append = raw_cells.append - get_style = console.get_style - if self.show_header: - header_style = get_style(self.header_style or "") + get_style( - column.header_style - ) - _append((header_style, column.header)) - cell_style = get_style(column.style or "") - for cell in column.cells: - _append((cell_style, cell)) - if self.show_footer: - footer_style = get_style(self.footer_style or "") + get_style( - column.footer_style - ) - _append((footer_style, column.footer)) - - if any_padding: - _Padding = Padding - for first, last, (style, renderable) in loop_first_last(raw_cells): - yield _Cell( - style, - _Padding(renderable, get_padding(first, last)), - getattr(renderable, "vertical", None) or column.vertical, - ) - else: - for style, renderable in raw_cells: - yield _Cell( - style, - renderable, - getattr(renderable, "vertical", None) or column.vertical, - ) - - def _get_padding_width(self, column_index: int) -> int: - """Get extra width from padding.""" - _, pad_right, _, pad_left = self.padding - if self.collapse_padding: - if column_index > 0: - pad_left = max(0, pad_left - pad_right) - return pad_left + pad_right - - def _measure_column( - self, - console: "Console", - options: "ConsoleOptions", - column: Column, - ) -> Measurement: - """Get the minimum and maximum width of the column.""" - - max_width = options.max_width - if max_width < 1: - return Measurement(0, 0) - - padding_width = self._get_padding_width(column._index) - - if column.width is not None: - # Fixed width column - return Measurement( - column.width + padding_width, column.width + padding_width - ).with_maximum(max_width) - # Flexible column, we need to measure contents - min_widths: List[int] = [] - max_widths: List[int] = [] - append_min = min_widths.append - append_max = max_widths.append - get_render_width = Measurement.get - for cell in self._get_cells(console, column._index, column): - _min, _max = get_render_width(console, options, cell.renderable) - append_min(_min) - append_max(_max) - - measurement = Measurement( - max(min_widths) if min_widths else 1, - max(max_widths) if max_widths else max_width, - ).with_maximum(max_width) - measurement = measurement.clamp( - None if column.min_width is None else column.min_width + padding_width, - None if column.max_width is None else column.max_width + padding_width, - ) - return measurement - - def _render( - self, console: "Console", options: "ConsoleOptions", widths: List[int] - ) -> "RenderResult": - table_style = console.get_style(self.style or "") - - border_style = table_style + console.get_style(self.border_style or "") - _column_cells = ( - self._get_cells(console, column_index, column) - for column_index, column in enumerate(self.columns) - ) - row_cells: List[Tuple[_Cell, ...]] = list(zip(*_column_cells)) - _box = ( - self.box.substitute( - options, safe=pick_bool(self.safe_box, console.safe_box) - ) - if self.box - else None - ) - _box = _box.get_plain_headed_box() if _box and not self.show_header else _box - - new_line = Segment.line() - - columns = self.columns - show_header = self.show_header - show_footer = self.show_footer - show_edge = self.show_edge - show_lines = self.show_lines - leading = self.leading - - _Segment = Segment - if _box: - box_segments = [ - ( - _Segment(_box.head_left, border_style), - _Segment(_box.head_right, border_style), - _Segment(_box.head_vertical, border_style), - ), - ( - _Segment(_box.mid_left, border_style), - _Segment(_box.mid_right, border_style), - _Segment(_box.mid_vertical, border_style), - ), - ( - _Segment(_box.foot_left, border_style), - _Segment(_box.foot_right, border_style), - _Segment(_box.foot_vertical, border_style), - ), - ] - if show_edge: - yield _Segment(_box.get_top(widths), border_style) - yield new_line - else: - box_segments = [] - - get_row_style = self.get_row_style - get_style = console.get_style - - for index, (first, last, row_cell) in enumerate(loop_first_last(row_cells)): - header_row = first and show_header - footer_row = last and show_footer - row = ( - self.rows[index - show_header] - if (not header_row and not footer_row) - else None - ) - max_height = 1 - cells: List[List[List[Segment]]] = [] - if header_row or footer_row: - row_style = Style.null() - else: - row_style = get_style( - get_row_style(console, index - 1 if show_header else index) - ) - for width, cell, column in zip(widths, row_cell, columns): - render_options = options.update( - width=width, - justify=column.justify, - no_wrap=column.no_wrap, - overflow=column.overflow, - height=None, - highlight=column.highlight, - ) - lines = console.render_lines( - cell.renderable, - render_options, - style=get_style(cell.style) + row_style, - ) - max_height = max(max_height, len(lines)) - cells.append(lines) - - row_height = max(len(cell) for cell in cells) - - def align_cell( - cell: List[List[Segment]], - vertical: "VerticalAlignMethod", - width: int, - style: Style, - ) -> List[List[Segment]]: - if header_row: - vertical = "bottom" - elif footer_row: - vertical = "top" - - if vertical == "top": - return _Segment.align_top(cell, width, row_height, style) - elif vertical == "middle": - return _Segment.align_middle(cell, width, row_height, style) - return _Segment.align_bottom(cell, width, row_height, style) - - cells[:] = [ - _Segment.set_shape( - align_cell( - cell, - _cell.vertical, - width, - get_style(_cell.style) + row_style, - ), - width, - max_height, - ) - for width, _cell, cell, column in zip(widths, row_cell, cells, columns) - ] - - if _box: - if last and show_footer: - yield _Segment( - _box.get_row(widths, "foot", edge=show_edge), border_style - ) - yield new_line - left, right, _divider = box_segments[0 if first else (2 if last else 1)] - - # If the column divider is whitespace also style it with the row background - divider = ( - _divider - if _divider.text.strip() - else _Segment( - _divider.text, row_style.background_style + _divider.style - ) - ) - for line_no in range(max_height): - if show_edge: - yield left - for last_cell, rendered_cell in loop_last(cells): - yield from rendered_cell[line_no] - if not last_cell: - yield divider - if show_edge: - yield right - yield new_line - else: - for line_no in range(max_height): - for rendered_cell in cells: - yield from rendered_cell[line_no] - yield new_line - if _box and first and show_header: - yield _Segment( - _box.get_row(widths, "head", edge=show_edge), border_style - ) - yield new_line - end_section = row and row.end_section - if _box and (show_lines or leading or end_section): - if ( - not last - and not (show_footer and index >= len(row_cells) - 2) - and not (show_header and header_row) - ): - if leading: - yield _Segment( - _box.get_row(widths, "mid", edge=show_edge) * leading, - border_style, - ) - else: - yield _Segment( - _box.get_row(widths, "row", edge=show_edge), border_style - ) - yield new_line - - if _box and show_edge: - yield _Segment(_box.get_bottom(widths), border_style) - yield new_line - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - from pip._vendor.rich.highlighter import ReprHighlighter - - from ._timer import timer - - with timer("Table render"): - table = Table( - title="Star Wars Movies", - caption="Rich example table", - caption_justify="right", - ) - - table.add_column( - "Released", header_style="bright_cyan", style="cyan", no_wrap=True - ) - table.add_column("Title", style="magenta") - table.add_column("Box Office", justify="right", style="green") - - table.add_row( - "Dec 20, 2019", - "Star Wars: The Rise of Skywalker", - "$952,110,690", - ) - table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347") - table.add_row( - "Dec 15, 2017", - "Star Wars Ep. V111: The Last Jedi", - "$1,332,539,889", - style="on black", - end_section=True, - ) - table.add_row( - "Dec 16, 2016", - "Rogue One: A Star Wars Story", - "$1,332,439,889", - ) - - def header(text: str) -> None: - console.print() - console.rule(highlight(text)) - console.print() - - console = Console() - highlight = ReprHighlighter() - header("Example Table") - console.print(table, justify="center") - - table.expand = True - header("expand=True") - console.print(table) - - table.width = 50 - header("width=50") - - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - header("row_styles=['dim', 'none']") - - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - table.leading = 1 - header("leading=1, row_styles=['dim', 'none']") - console.print(table, justify="center") - - table.width = None - table.expand = False - table.row_styles = ["dim", "none"] - table.show_lines = True - table.leading = 0 - header("show_lines=True, row_styles=['dim', 'none']") - console.print(table, justify="center") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/terminal_theme.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/terminal_theme.py deleted file mode 100644 index 565e9d960..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +++ /dev/null @@ -1,153 +0,0 @@ -from typing import List, Optional, Tuple - -from .color_triplet import ColorTriplet -from .palette import Palette - -_ColorTuple = Tuple[int, int, int] - - -class TerminalTheme: - """A color theme used when exporting console content. - - Args: - background (Tuple[int, int, int]): The background color. - foreground (Tuple[int, int, int]): The foreground (text) color. - normal (List[Tuple[int, int, int]]): A list of 8 normal intensity colors. - bright (List[Tuple[int, int, int]], optional): A list of 8 bright colors, or None - to repeat normal intensity. Defaults to None. - """ - - def __init__( - self, - background: _ColorTuple, - foreground: _ColorTuple, - normal: List[_ColorTuple], - bright: Optional[List[_ColorTuple]] = None, - ) -> None: - self.background_color = ColorTriplet(*background) - self.foreground_color = ColorTriplet(*foreground) - self.ansi_colors = Palette(normal + (bright or normal)) - - -DEFAULT_TERMINAL_THEME = TerminalTheme( - (255, 255, 255), - (0, 0, 0), - [ - (0, 0, 0), - (128, 0, 0), - (0, 128, 0), - (128, 128, 0), - (0, 0, 128), - (128, 0, 128), - (0, 128, 128), - (192, 192, 192), - ], - [ - (128, 128, 128), - (255, 0, 0), - (0, 255, 0), - (255, 255, 0), - (0, 0, 255), - (255, 0, 255), - (0, 255, 255), - (255, 255, 255), - ], -) - -MONOKAI = TerminalTheme( - (12, 12, 12), - (217, 217, 217), - [ - (26, 26, 26), - (244, 0, 95), - (152, 224, 36), - (253, 151, 31), - (157, 101, 255), - (244, 0, 95), - (88, 209, 235), - (196, 197, 181), - (98, 94, 76), - ], - [ - (244, 0, 95), - (152, 224, 36), - (224, 213, 97), - (157, 101, 255), - (244, 0, 95), - (88, 209, 235), - (246, 246, 239), - ], -) -DIMMED_MONOKAI = TerminalTheme( - (25, 25, 25), - (185, 188, 186), - [ - (58, 61, 67), - (190, 63, 72), - (135, 154, 59), - (197, 166, 53), - (79, 118, 161), - (133, 92, 141), - (87, 143, 164), - (185, 188, 186), - (136, 137, 135), - ], - [ - (251, 0, 31), - (15, 114, 47), - (196, 112, 51), - (24, 109, 227), - (251, 0, 103), - (46, 112, 109), - (253, 255, 185), - ], -) -NIGHT_OWLISH = TerminalTheme( - (255, 255, 255), - (64, 63, 83), - [ - (1, 22, 39), - (211, 66, 62), - (42, 162, 152), - (218, 170, 1), - (72, 118, 214), - (64, 63, 83), - (8, 145, 106), - (122, 129, 129), - (122, 129, 129), - ], - [ - (247, 110, 110), - (73, 208, 197), - (218, 194, 107), - (92, 167, 228), - (105, 112, 152), - (0, 201, 144), - (152, 159, 177), - ], -) - -SVG_EXPORT_THEME = TerminalTheme( - (41, 41, 41), - (197, 200, 198), - [ - (75, 78, 85), - (204, 85, 90), - (152, 168, 75), - (208, 179, 68), - (96, 138, 177), - (152, 114, 159), - (104, 160, 179), - (197, 200, 198), - (154, 155, 153), - ], - [ - (255, 38, 39), - (0, 130, 61), - (208, 132, 66), - (25, 132, 233), - (255, 44, 122), - (57, 130, 128), - (253, 253, 197), - ], -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/text.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/text.py deleted file mode 100644 index 5a0c6b142..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/text.py +++ /dev/null @@ -1,1361 +0,0 @@ -import re -from functools import partial, reduce -from math import gcd -from operator import itemgetter -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - Iterable, - List, - NamedTuple, - Optional, - Pattern, - Tuple, - Union, -) - -from ._loop import loop_last -from ._pick import pick_bool -from ._wrap import divide_line -from .align import AlignMethod -from .cells import cell_len, set_cell_size -from .containers import Lines -from .control import strip_control_codes -from .emoji import EmojiVariant -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleType - -if TYPE_CHECKING: # pragma: no cover - from .console import Console, ConsoleOptions, JustifyMethod, OverflowMethod - -DEFAULT_JUSTIFY: "JustifyMethod" = "default" -DEFAULT_OVERFLOW: "OverflowMethod" = "fold" - - -_re_whitespace = re.compile(r"\s+$") - -TextType = Union[str, "Text"] -"""A plain string or a :class:`Text` instance.""" - -GetStyleCallable = Callable[[str], Optional[StyleType]] - - -class Span(NamedTuple): - """A marked up region in some text.""" - - start: int - """Span start index.""" - end: int - """Span end index.""" - style: Union[str, Style] - """Style associated with the span.""" - - def __repr__(self) -> str: - return f"Span({self.start}, {self.end}, {self.style!r})" - - def __bool__(self) -> bool: - return self.end > self.start - - def split(self, offset: int) -> Tuple["Span", Optional["Span"]]: - """Split a span in to 2 from a given offset.""" - - if offset < self.start: - return self, None - if offset >= self.end: - return self, None - - start, end, style = self - span1 = Span(start, min(end, offset), style) - span2 = Span(span1.end, end, style) - return span1, span2 - - def move(self, offset: int) -> "Span": - """Move start and end by a given offset. - - Args: - offset (int): Number of characters to add to start and end. - - Returns: - TextSpan: A new TextSpan with adjusted position. - """ - start, end, style = self - return Span(start + offset, end + offset, style) - - def right_crop(self, offset: int) -> "Span": - """Crop the span at the given offset. - - Args: - offset (int): A value between start and end. - - Returns: - Span: A new (possibly smaller) span. - """ - start, end, style = self - if offset >= end: - return self - return Span(start, min(offset, end), style) - - def extend(self, cells: int) -> "Span": - """Extend the span by the given number of cells. - - Args: - cells (int): Additional space to add to end of span. - - Returns: - Span: A span. - """ - if cells: - start, end, style = self - return Span(start, end + cells, style) - else: - return self - - -class Text(JupyterMixin): - """Text with color / style. - - Args: - text (str, optional): Default unstyled text. Defaults to "". - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - spans (List[Span], optional). A list of predefined style spans. Defaults to None. - """ - - __slots__ = [ - "_text", - "style", - "justify", - "overflow", - "no_wrap", - "end", - "tab_size", - "_spans", - "_length", - ] - - def __init__( - self, - text: str = "", - style: Union[str, Style] = "", - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: Optional[int] = None, - spans: Optional[List[Span]] = None, - ) -> None: - sanitized_text = strip_control_codes(text) - self._text = [sanitized_text] - self.style = style - self.justify: Optional["JustifyMethod"] = justify - self.overflow: Optional["OverflowMethod"] = overflow - self.no_wrap = no_wrap - self.end = end - self.tab_size = tab_size - self._spans: List[Span] = spans or [] - self._length: int = len(sanitized_text) - - def __len__(self) -> int: - return self._length - - def __bool__(self) -> bool: - return bool(self._length) - - def __str__(self) -> str: - return self.plain - - def __repr__(self) -> str: - return f"<text {self.plain!r} {self._spans!r} {self.style!r}>" - - def __add__(self, other: Any) -> "Text": - if isinstance(other, (str, Text)): - result = self.copy() - result.append(other) - return result - return NotImplemented - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Text): - return NotImplemented - return self.plain == other.plain and self._spans == other._spans - - def __contains__(self, other: object) -> bool: - if isinstance(other, str): - return other in self.plain - elif isinstance(other, Text): - return other.plain in self.plain - return False - - def __getitem__(self, slice: Union[int, slice]) -> "Text": - def get_text_at(offset: int) -> "Text": - _Span = Span - text = Text( - self.plain[offset], - spans=[ - _Span(0, 1, style) - for start, end, style in self._spans - if end > offset >= start - ], - end="", - ) - return text - - if isinstance(slice, int): - return get_text_at(slice) - else: - start, stop, step = slice.indices(len(self.plain)) - if step == 1: - lines = self.divide([start, stop]) - return lines[1] - else: - # This would be a bit of work to implement efficiently - # For now, its not required - raise TypeError("slices with step!=1 are not supported") - - @property - def cell_len(self) -> int: - """Get the number of cells required to render this text.""" - return cell_len(self.plain) - - @property - def markup(self) -> str: - """Get console markup to render this Text. - - Returns: - str: A string potentially creating markup tags. - """ - from .markup import escape - - output: List[str] = [] - - plain = self.plain - markup_spans = [ - (0, False, self.style), - *((span.start, False, span.style) for span in self._spans), - *((span.end, True, span.style) for span in self._spans), - (len(plain), True, self.style), - ] - markup_spans.sort(key=itemgetter(0, 1)) - position = 0 - append = output.append - for offset, closing, style in markup_spans: - if offset > position: - append(escape(plain[position:offset])) - position = offset - if style: - append(f"[/{style}]" if closing else f"[{style}]") - markup = "".join(output) - return markup - - @classmethod - def from_markup( - cls, - text: str, - *, - style: Union[str, Style] = "", - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - end: str = "\n", - ) -> "Text": - """Create Text instance from markup. - - Args: - text (str): A string containing console markup. - style (Union[str, Style], optional): Base style for text. Defaults to "". - emoji (bool, optional): Also render emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - - Returns: - Text: A Text instance with markup rendered. - """ - from .markup import render - - rendered_text = render(text, style, emoji=emoji, emoji_variant=emoji_variant) - rendered_text.justify = justify - rendered_text.overflow = overflow - rendered_text.end = end - return rendered_text - - @classmethod - def from_ansi( - cls, - text: str, - *, - style: Union[str, Style] = "", - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: Optional[int] = 8, - ) -> "Text": - """Create a Text object from a string containing ANSI escape codes. - - Args: - text (str): A string containing escape codes. - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - """ - from .ansi import AnsiDecoder - - joiner = Text( - "\n", - justify=justify, - overflow=overflow, - no_wrap=no_wrap, - end=end, - tab_size=tab_size, - style=style, - ) - decoder = AnsiDecoder() - result = joiner.join(line for line in decoder.decode(text)) - return result - - @classmethod - def styled( - cls, - text: str, - style: StyleType = "", - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - ) -> "Text": - """Construct a Text instance with a pre-applied styled. A style applied in this way won't be used - to pad the text when it is justified. - - Args: - text (str): A string containing console markup. - style (Union[str, Style]): Style to apply to the text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - - Returns: - Text: A text instance with a style applied to the entire string. - """ - styled_text = cls(text, justify=justify, overflow=overflow) - styled_text.stylize(style) - return styled_text - - @classmethod - def assemble( - cls, - *parts: Union[str, "Text", Tuple[str, StyleType]], - style: Union[str, Style] = "", - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - no_wrap: Optional[bool] = None, - end: str = "\n", - tab_size: int = 8, - meta: Optional[Dict[str, Any]] = None, - ) -> "Text": - """Construct a text instance by combining a sequence of strings with optional styles. - The positional arguments should be either strings, or a tuple of string + style. - - Args: - style (Union[str, Style], optional): Base style for text. Defaults to "". - justify (str, optional): Justify method: "left", "center", "full", "right". Defaults to None. - overflow (str, optional): Overflow method: "crop", "fold", "ellipsis". Defaults to None. - no_wrap (bool, optional): Disable text wrapping, or None for default. Defaults to None. - end (str, optional): Character to end text with. Defaults to "\\\\n". - tab_size (int): Number of spaces per tab, or ``None`` to use ``console.tab_size``. Defaults to None. - meta (Dict[str, Any], optional). Meta data to apply to text, or None for no meta data. Default to None - - Returns: - Text: A new text instance. - """ - text = cls( - style=style, - justify=justify, - overflow=overflow, - no_wrap=no_wrap, - end=end, - tab_size=tab_size, - ) - append = text.append - _Text = Text - for part in parts: - if isinstance(part, (_Text, str)): - append(part) - else: - append(*part) - if meta: - text.apply_meta(meta) - return text - - @property - def plain(self) -> str: - """Get the text as a single string.""" - if len(self._text) != 1: - self._text[:] = ["".join(self._text)] - return self._text[0] - - @plain.setter - def plain(self, new_text: str) -> None: - """Set the text to a new value.""" - if new_text != self.plain: - sanitized_text = strip_control_codes(new_text) - self._text[:] = [sanitized_text] - old_length = self._length - self._length = len(sanitized_text) - if old_length > self._length: - self._trim_spans() - - @property - def spans(self) -> List[Span]: - """Get a reference to the internal list of spans.""" - return self._spans - - @spans.setter - def spans(self, spans: List[Span]) -> None: - """Set spans.""" - self._spans = spans[:] - - def blank_copy(self, plain: str = "") -> "Text": - """Return a new Text instance with copied metadata (but not the string or spans).""" - copy_self = Text( - plain, - style=self.style, - justify=self.justify, - overflow=self.overflow, - no_wrap=self.no_wrap, - end=self.end, - tab_size=self.tab_size, - ) - return copy_self - - def copy(self) -> "Text": - """Return a copy of this instance.""" - copy_self = Text( - self.plain, - style=self.style, - justify=self.justify, - overflow=self.overflow, - no_wrap=self.no_wrap, - end=self.end, - tab_size=self.tab_size, - ) - copy_self._spans[:] = self._spans - return copy_self - - def stylize( - self, - style: Union[str, Style], - start: int = 0, - end: Optional[int] = None, - ) -> None: - """Apply a style to the text, or a portion of the text. - - Args: - style (Union[str, Style]): Style instance or style definition to apply. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - """ - if style: - length = len(self) - if start < 0: - start = length + start - if end is None: - end = length - if end < 0: - end = length + end - if start >= length or end <= start: - # Span not in text or not valid - return - self._spans.append(Span(start, min(length, end), style)) - - def stylize_before( - self, - style: Union[str, Style], - start: int = 0, - end: Optional[int] = None, - ) -> None: - """Apply a style to the text, or a portion of the text. Styles will be applied before other styles already present. - - Args: - style (Union[str, Style]): Style instance or style definition to apply. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - """ - if style: - length = len(self) - if start < 0: - start = length + start - if end is None: - end = length - if end < 0: - end = length + end - if start >= length or end <= start: - # Span not in text or not valid - return - self._spans.insert(0, Span(start, min(length, end), style)) - - def apply_meta( - self, meta: Dict[str, Any], start: int = 0, end: Optional[int] = None - ) -> None: - """Apply metadata to the text, or a portion of the text. - - Args: - meta (Dict[str, Any]): A dict of meta information. - start (int): Start offset (negative indexing is supported). Defaults to 0. - end (Optional[int], optional): End offset (negative indexing is supported), or None for end of text. Defaults to None. - - """ - style = Style.from_meta(meta) - self.stylize(style, start=start, end=end) - - def on(self, meta: Optional[Dict[str, Any]] = None, **handlers: Any) -> "Text": - """Apply event handlers (used by Textual project). - - Example: - >>> from rich.text import Text - >>> text = Text("hello world") - >>> text.on(click="view.toggle('world')") - - Args: - meta (Dict[str, Any]): Mapping of meta information. - **handlers: Keyword args are prefixed with "@" to defined handlers. - - Returns: - Text: Self is returned to method may be chained. - """ - meta = {} if meta is None else meta - meta.update({f"@{key}": value for key, value in handlers.items()}) - self.stylize(Style.from_meta(meta)) - return self - - def remove_suffix(self, suffix: str) -> None: - """Remove a suffix if it exists. - - Args: - suffix (str): Suffix to remove. - """ - if self.plain.endswith(suffix): - self.right_crop(len(suffix)) - - def get_style_at_offset(self, console: "Console", offset: int) -> Style: - """Get the style of a character at give offset. - - Args: - console (~Console): Console where text will be rendered. - offset (int): Offset in to text (negative indexing supported) - - Returns: - Style: A Style instance. - """ - # TODO: This is a little inefficient, it is only used by full justify - if offset < 0: - offset = len(self) + offset - get_style = console.get_style - style = get_style(self.style).copy() - for start, end, span_style in self._spans: - if end > offset >= start: - style += get_style(span_style, default="") - return style - - def extend_style(self, spaces: int) -> None: - """Extend the Text given number of spaces where the spaces have the same style as the last character. - - Args: - spaces (int): Number of spaces to add to the Text. - """ - if spaces <= 0: - return - spans = self.spans - new_spaces = " " * spaces - if spans: - end_offset = len(self) - self._spans[:] = [ - span.extend(spaces) if span.end >= end_offset else span - for span in spans - ] - self._text.append(new_spaces) - self._length += spaces - else: - self.plain += new_spaces - - def highlight_regex( - self, - re_highlight: Union[Pattern[str], str], - style: Optional[Union[GetStyleCallable, StyleType]] = None, - *, - style_prefix: str = "", - ) -> int: - """Highlight text with a regular expression, where group names are - translated to styles. - - Args: - re_highlight (Union[re.Pattern, str]): A regular expression object or string. - style (Union[GetStyleCallable, StyleType]): Optional style to apply to whole match, or a callable - which accepts the matched text and returns a style. Defaults to None. - style_prefix (str, optional): Optional prefix to add to style group names. - - Returns: - int: Number of regex matches - """ - count = 0 - append_span = self._spans.append - _Span = Span - plain = self.plain - if isinstance(re_highlight, str): - re_highlight = re.compile(re_highlight) - for match in re_highlight.finditer(plain): - get_span = match.span - if style: - start, end = get_span() - match_style = style(plain[start:end]) if callable(style) else style - if match_style is not None and end > start: - append_span(_Span(start, end, match_style)) - - count += 1 - for name in match.groupdict().keys(): - start, end = get_span(name) - if start != -1 and end > start: - append_span(_Span(start, end, f"{style_prefix}{name}")) - return count - - def highlight_words( - self, - words: Iterable[str], - style: Union[str, Style], - *, - case_sensitive: bool = True, - ) -> int: - """Highlight words with a style. - - Args: - words (Iterable[str]): Words to highlight. - style (Union[str, Style]): Style to apply. - case_sensitive (bool, optional): Enable case sensitive matching. Defaults to True. - - Returns: - int: Number of words highlighted. - """ - re_words = "|".join(re.escape(word) for word in words) - add_span = self._spans.append - count = 0 - _Span = Span - for match in re.finditer( - re_words, self.plain, flags=0 if case_sensitive else re.IGNORECASE - ): - start, end = match.span(0) - add_span(_Span(start, end, style)) - count += 1 - return count - - def rstrip(self) -> None: - """Strip whitespace from end of text.""" - self.plain = self.plain.rstrip() - - def rstrip_end(self, size: int) -> None: - """Remove whitespace beyond a certain width at the end of the text. - - Args: - size (int): The desired size of the text. - """ - text_length = len(self) - if text_length > size: - excess = text_length - size - whitespace_match = _re_whitespace.search(self.plain) - if whitespace_match is not None: - whitespace_count = len(whitespace_match.group(0)) - self.right_crop(min(whitespace_count, excess)) - - def set_length(self, new_length: int) -> None: - """Set new length of the text, clipping or padding is required.""" - length = len(self) - if length != new_length: - if length < new_length: - self.pad_right(new_length - length) - else: - self.right_crop(length - new_length) - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> Iterable[Segment]: - tab_size: int = console.tab_size if self.tab_size is None else self.tab_size - justify = self.justify or options.justify or DEFAULT_JUSTIFY - - overflow = self.overflow or options.overflow or DEFAULT_OVERFLOW - - lines = self.wrap( - console, - options.max_width, - justify=justify, - overflow=overflow, - tab_size=tab_size or 8, - no_wrap=pick_bool(self.no_wrap, options.no_wrap, False), - ) - all_lines = Text("\n").join(lines) - yield from all_lines.render(console, end=self.end) - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> Measurement: - text = self.plain - lines = text.splitlines() - max_text_width = max(cell_len(line) for line in lines) if lines else 0 - words = text.split() - min_text_width = ( - max(cell_len(word) for word in words) if words else max_text_width - ) - return Measurement(min_text_width, max_text_width) - - def render(self, console: "Console", end: str = "") -> Iterable["Segment"]: - """Render the text as Segments. - - Args: - console (Console): Console instance. - end (Optional[str], optional): Optional end character. - - Returns: - Iterable[Segment]: Result of render that may be written to the console. - """ - _Segment = Segment - text = self.plain - if not self._spans: - yield Segment(text) - if end: - yield _Segment(end) - return - get_style = partial(console.get_style, default=Style.null()) - - enumerated_spans = list(enumerate(self._spans, 1)) - style_map = {index: get_style(span.style) for index, span in enumerated_spans} - style_map[0] = get_style(self.style) - - spans = [ - (0, False, 0), - *((span.start, False, index) for index, span in enumerated_spans), - *((span.end, True, index) for index, span in enumerated_spans), - (len(text), True, 0), - ] - spans.sort(key=itemgetter(0, 1)) - - stack: List[int] = [] - stack_append = stack.append - stack_pop = stack.remove - - style_cache: Dict[Tuple[Style, ...], Style] = {} - style_cache_get = style_cache.get - combine = Style.combine - - def get_current_style() -> Style: - """Construct current style from stack.""" - styles = tuple(style_map[_style_id] for _style_id in sorted(stack)) - cached_style = style_cache_get(styles) - if cached_style is not None: - return cached_style - current_style = combine(styles) - style_cache[styles] = current_style - return current_style - - for (offset, leaving, style_id), (next_offset, _, _) in zip(spans, spans[1:]): - if leaving: - stack_pop(style_id) - else: - stack_append(style_id) - if next_offset > offset: - yield _Segment(text[offset:next_offset], get_current_style()) - if end: - yield _Segment(end) - - def join(self, lines: Iterable["Text"]) -> "Text": - """Join text together with this instance as the separator. - - Args: - lines (Iterable[Text]): An iterable of Text instances to join. - - Returns: - Text: A new text instance containing join text. - """ - - new_text = self.blank_copy() - - def iter_text() -> Iterable["Text"]: - if self.plain: - for last, line in loop_last(lines): - yield line - if not last: - yield self - else: - yield from lines - - extend_text = new_text._text.extend - append_span = new_text._spans.append - extend_spans = new_text._spans.extend - offset = 0 - _Span = Span - - for text in iter_text(): - extend_text(text._text) - if text.style: - append_span(_Span(offset, offset + len(text), text.style)) - extend_spans( - _Span(offset + start, offset + end, style) - for start, end, style in text._spans - ) - offset += len(text) - new_text._length = offset - return new_text - - def expand_tabs(self, tab_size: Optional[int] = None) -> None: - """Converts tabs to spaces. - - Args: - tab_size (int, optional): Size of tabs. Defaults to 8. - - """ - if "\t" not in self.plain: - return - if tab_size is None: - tab_size = self.tab_size - if tab_size is None: - tab_size = 8 - - new_text: List[Text] = [] - append = new_text.append - - for line in self.split("\n", include_separator=True): - if "\t" not in line.plain: - append(line) - else: - cell_position = 0 - parts = line.split("\t", include_separator=True) - for part in parts: - if part.plain.endswith("\t"): - part._text[-1] = part._text[-1][:-1] + " " - cell_position += part.cell_len - tab_remainder = cell_position % tab_size - if tab_remainder: - spaces = tab_size - tab_remainder - part.extend_style(spaces) - cell_position += spaces - else: - cell_position += part.cell_len - append(part) - - result = Text("").join(new_text) - - self._text = [result.plain] - self._length = len(self.plain) - self._spans[:] = result._spans - - def truncate( - self, - max_width: int, - *, - overflow: Optional["OverflowMethod"] = None, - pad: bool = False, - ) -> None: - """Truncate text if it is longer that a given width. - - Args: - max_width (int): Maximum number of characters in text. - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None, to use self.overflow. - pad (bool, optional): Pad with spaces if the length is less than max_width. Defaults to False. - """ - _overflow = overflow or self.overflow or DEFAULT_OVERFLOW - if _overflow != "ignore": - length = cell_len(self.plain) - if length > max_width: - if _overflow == "ellipsis": - self.plain = set_cell_size(self.plain, max_width - 1) + "…" - else: - self.plain = set_cell_size(self.plain, max_width) - if pad and length < max_width: - spaces = max_width - length - self._text = [f"{self.plain}{' ' * spaces}"] - self._length = len(self.plain) - - def _trim_spans(self) -> None: - """Remove or modify any spans that are over the end of the text.""" - max_offset = len(self.plain) - _Span = Span - self._spans[:] = [ - ( - span - if span.end < max_offset - else _Span(span.start, min(max_offset, span.end), span.style) - ) - for span in self._spans - if span.start < max_offset - ] - - def pad(self, count: int, character: str = " ") -> None: - """Pad left and right with a given number of characters. - - Args: - count (int): Width of padding. - character (str): The character to pad with. Must be a string of length 1. - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - pad_characters = character * count - self.plain = f"{pad_characters}{self.plain}{pad_characters}" - _Span = Span - self._spans[:] = [ - _Span(start + count, end + count, style) - for start, end, style in self._spans - ] - - def pad_left(self, count: int, character: str = " ") -> None: - """Pad the left with a given character. - - Args: - count (int): Number of characters to pad. - character (str, optional): Character to pad with. Defaults to " ". - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - self.plain = f"{character * count}{self.plain}" - _Span = Span - self._spans[:] = [ - _Span(start + count, end + count, style) - for start, end, style in self._spans - ] - - def pad_right(self, count: int, character: str = " ") -> None: - """Pad the right with a given character. - - Args: - count (int): Number of characters to pad. - character (str, optional): Character to pad with. Defaults to " ". - """ - assert len(character) == 1, "Character must be a string of length 1" - if count: - self.plain = f"{self.plain}{character * count}" - - def align(self, align: AlignMethod, width: int, character: str = " ") -> None: - """Align text to a given width. - - Args: - align (AlignMethod): One of "left", "center", or "right". - width (int): Desired width. - character (str, optional): Character to pad with. Defaults to " ". - """ - self.truncate(width) - excess_space = width - cell_len(self.plain) - if excess_space: - if align == "left": - self.pad_right(excess_space, character) - elif align == "center": - left = excess_space // 2 - self.pad_left(left, character) - self.pad_right(excess_space - left, character) - else: - self.pad_left(excess_space, character) - - def append( - self, text: Union["Text", str], style: Optional[Union[str, "Style"]] = None - ) -> "Text": - """Add text with an optional style. - - Args: - text (Union[Text, str]): A str or Text to append. - style (str, optional): A style name. Defaults to None. - - Returns: - Text: Returns self for chaining. - """ - - if not isinstance(text, (str, Text)): - raise TypeError("Only str or Text can be appended to Text") - - if len(text): - if isinstance(text, str): - sanitized_text = strip_control_codes(text) - self._text.append(sanitized_text) - offset = len(self) - text_length = len(sanitized_text) - if style: - self._spans.append(Span(offset, offset + text_length, style)) - self._length += text_length - elif isinstance(text, Text): - _Span = Span - if style is not None: - raise ValueError( - "style must not be set when appending Text instance" - ) - text_length = self._length - if text.style: - self._spans.append( - _Span(text_length, text_length + len(text), text.style) - ) - self._text.append(text.plain) - self._spans.extend( - _Span(start + text_length, end + text_length, style) - for start, end, style in text._spans.copy() - ) - self._length += len(text) - return self - - def append_text(self, text: "Text") -> "Text": - """Append another Text instance. This method is more performant that Text.append, but - only works for Text. - - Args: - text (Text): The Text instance to append to this instance. - - Returns: - Text: Returns self for chaining. - """ - _Span = Span - text_length = self._length - if text.style: - self._spans.append(_Span(text_length, text_length + len(text), text.style)) - self._text.append(text.plain) - self._spans.extend( - _Span(start + text_length, end + text_length, style) - for start, end, style in text._spans.copy() - ) - self._length += len(text) - return self - - def append_tokens( - self, tokens: Iterable[Tuple[str, Optional[StyleType]]] - ) -> "Text": - """Append iterable of str and style. Style may be a Style instance or a str style definition. - - Args: - tokens (Iterable[Tuple[str, Optional[StyleType]]]): An iterable of tuples containing str content and style. - - Returns: - Text: Returns self for chaining. - """ - append_text = self._text.append - append_span = self._spans.append - _Span = Span - offset = len(self) - for content, style in tokens: - content = strip_control_codes(content) - append_text(content) - if style: - append_span(_Span(offset, offset + len(content), style)) - offset += len(content) - self._length = offset - return self - - def copy_styles(self, text: "Text") -> None: - """Copy styles from another Text instance. - - Args: - text (Text): A Text instance to copy styles from, must be the same length. - """ - self._spans.extend(text._spans) - - def split( - self, - separator: str = "\n", - *, - include_separator: bool = False, - allow_blank: bool = False, - ) -> Lines: - """Split rich text in to lines, preserving styles. - - Args: - separator (str, optional): String to split on. Defaults to "\\\\n". - include_separator (bool, optional): Include the separator in the lines. Defaults to False. - allow_blank (bool, optional): Return a blank line if the text ends with a separator. Defaults to False. - - Returns: - List[RichText]: A list of rich text, one per line of the original. - """ - assert separator, "separator must not be empty" - - text = self.plain - if separator not in text: - return Lines([self.copy()]) - - if include_separator: - lines = self.divide( - match.end() for match in re.finditer(re.escape(separator), text) - ) - else: - - def flatten_spans() -> Iterable[int]: - for match in re.finditer(re.escape(separator), text): - start, end = match.span() - yield start - yield end - - lines = Lines( - line for line in self.divide(flatten_spans()) if line.plain != separator - ) - - if not allow_blank and text.endswith(separator): - lines.pop() - - return lines - - def divide(self, offsets: Iterable[int]) -> Lines: - """Divide text in to a number of lines at given offsets. - - Args: - offsets (Iterable[int]): Offsets used to divide text. - - Returns: - Lines: New RichText instances between offsets. - """ - _offsets = list(offsets) - - if not _offsets: - return Lines([self.copy()]) - - text = self.plain - text_length = len(text) - divide_offsets = [0, *_offsets, text_length] - line_ranges = list(zip(divide_offsets, divide_offsets[1:])) - - style = self.style - justify = self.justify - overflow = self.overflow - _Text = Text - new_lines = Lines( - _Text( - text[start:end], - style=style, - justify=justify, - overflow=overflow, - ) - for start, end in line_ranges - ) - if not self._spans: - return new_lines - - _line_appends = [line._spans.append for line in new_lines._lines] - line_count = len(line_ranges) - _Span = Span - - for span_start, span_end, style in self._spans: - lower_bound = 0 - upper_bound = line_count - start_line_no = (lower_bound + upper_bound) // 2 - - while True: - line_start, line_end = line_ranges[start_line_no] - if span_start < line_start: - upper_bound = start_line_no - 1 - elif span_start > line_end: - lower_bound = start_line_no + 1 - else: - break - start_line_no = (lower_bound + upper_bound) // 2 - - if span_end < line_end: - end_line_no = start_line_no - else: - end_line_no = lower_bound = start_line_no - upper_bound = line_count - - while True: - line_start, line_end = line_ranges[end_line_no] - if span_end < line_start: - upper_bound = end_line_no - 1 - elif span_end > line_end: - lower_bound = end_line_no + 1 - else: - break - end_line_no = (lower_bound + upper_bound) // 2 - - for line_no in range(start_line_no, end_line_no + 1): - line_start, line_end = line_ranges[line_no] - new_start = max(0, span_start - line_start) - new_end = min(span_end - line_start, line_end - line_start) - if new_end > new_start: - _line_appends[line_no](_Span(new_start, new_end, style)) - - return new_lines - - def right_crop(self, amount: int = 1) -> None: - """Remove a number of characters from the end of the text.""" - max_offset = len(self.plain) - amount - _Span = Span - self._spans[:] = [ - ( - span - if span.end < max_offset - else _Span(span.start, min(max_offset, span.end), span.style) - ) - for span in self._spans - if span.start < max_offset - ] - self._text = [self.plain[:-amount]] - self._length -= amount - - def wrap( - self, - console: "Console", - width: int, - *, - justify: Optional["JustifyMethod"] = None, - overflow: Optional["OverflowMethod"] = None, - tab_size: int = 8, - no_wrap: Optional[bool] = None, - ) -> Lines: - """Word wrap the text. - - Args: - console (Console): Console instance. - width (int): Number of cells available per line. - justify (str, optional): Justify method: "default", "left", "center", "full", "right". Defaults to "default". - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to None. - tab_size (int, optional): Default tab size. Defaults to 8. - no_wrap (bool, optional): Disable wrapping, Defaults to False. - - Returns: - Lines: Number of lines. - """ - wrap_justify = justify or self.justify or DEFAULT_JUSTIFY - wrap_overflow = overflow or self.overflow or DEFAULT_OVERFLOW - - no_wrap = pick_bool(no_wrap, self.no_wrap, False) or overflow == "ignore" - - lines = Lines() - for line in self.split(allow_blank=True): - if "\t" in line: - line.expand_tabs(tab_size) - if no_wrap: - new_lines = Lines([line]) - else: - offsets = divide_line(str(line), width, fold=wrap_overflow == "fold") - new_lines = line.divide(offsets) - for line in new_lines: - line.rstrip_end(width) - if wrap_justify: - new_lines.justify( - console, width, justify=wrap_justify, overflow=wrap_overflow - ) - for line in new_lines: - line.truncate(width, overflow=wrap_overflow) - lines.extend(new_lines) - return lines - - def fit(self, width: int) -> Lines: - """Fit the text in to given width by chopping in to lines. - - Args: - width (int): Maximum characters in a line. - - Returns: - Lines: Lines container. - """ - lines: Lines = Lines() - append = lines.append - for line in self.split(): - line.set_length(width) - append(line) - return lines - - def detect_indentation(self) -> int: - """Auto-detect indentation of code. - - Returns: - int: Number of spaces used to indent code. - """ - - _indentations = { - len(match.group(1)) - for match in re.finditer(r"^( *)(.*)$", self.plain, flags=re.MULTILINE) - } - - try: - indentation = ( - reduce(gcd, [indent for indent in _indentations if not indent % 2]) or 1 - ) - except TypeError: - indentation = 1 - - return indentation - - def with_indent_guides( - self, - indent_size: Optional[int] = None, - *, - character: str = "│", - style: StyleType = "dim green", - ) -> "Text": - """Adds indent guide lines to text. - - Args: - indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None. - character (str, optional): Character to use for indentation. Defaults to "│". - style (Union[Style, str], optional): Style of indent guides. - - Returns: - Text: New text with indentation guides. - """ - - _indent_size = self.detect_indentation() if indent_size is None else indent_size - - text = self.copy() - text.expand_tabs() - indent_line = f"{character}{' ' * (_indent_size - 1)}" - - re_indent = re.compile(r"^( *)(.*)$") - new_lines: List[Text] = [] - add_line = new_lines.append - blank_lines = 0 - for line in text.split(allow_blank=True): - match = re_indent.match(line.plain) - if not match or not match.group(2): - blank_lines += 1 - continue - indent = match.group(1) - full_indents, remaining_space = divmod(len(indent), _indent_size) - new_indent = f"{indent_line * full_indents}{' ' * remaining_space}" - line.plain = new_indent + line.plain[len(new_indent) :] - line.stylize(style, 0, len(new_indent)) - if blank_lines: - new_lines.extend([Text(new_indent, style=style)] * blank_lines) - blank_lines = 0 - add_line(line) - if blank_lines: - new_lines.extend([Text("", style=style)] * blank_lines) - - new_text = text.blank_copy("\n").join(new_lines) - return new_text - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Console - - text = Text( - """\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n""" - ) - text.highlight_words(["Lorem"], "bold") - text.highlight_words(["ipsum"], "italic") - - console = Console() - - console.rule("justify='left'") - console.print(text, style="red") - console.print() - - console.rule("justify='center'") - console.print(text, style="green", justify="center") - console.print() - - console.rule("justify='right'") - console.print(text, style="blue", justify="right") - console.print() - - console.rule("justify='full'") - console.print(text, style="magenta", justify="full") - console.print() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/theme.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/theme.py deleted file mode 100644 index 227f1d863..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/theme.py +++ /dev/null @@ -1,115 +0,0 @@ -import configparser -from typing import IO, Dict, List, Mapping, Optional - -from .default_styles import DEFAULT_STYLES -from .style import Style, StyleType - - -class Theme: - """A container for style information, used by :class:`~rich.console.Console`. - - Args: - styles (Dict[str, Style], optional): A mapping of style names on to styles. Defaults to None for a theme with no styles. - inherit (bool, optional): Inherit default styles. Defaults to True. - """ - - styles: Dict[str, Style] - - def __init__( - self, styles: Optional[Mapping[str, StyleType]] = None, inherit: bool = True - ): - self.styles = DEFAULT_STYLES.copy() if inherit else {} - if styles is not None: - self.styles.update( - { - name: style if isinstance(style, Style) else Style.parse(style) - for name, style in styles.items() - } - ) - - @property - def config(self) -> str: - """Get contents of a config file for this theme.""" - config = "[styles]\n" + "\n".join( - f"{name} = {style}" for name, style in sorted(self.styles.items()) - ) - return config - - @classmethod - def from_file( - cls, config_file: IO[str], source: Optional[str] = None, inherit: bool = True - ) -> "Theme": - """Load a theme from a text mode file. - - Args: - config_file (IO[str]): An open conf file. - source (str, optional): The filename of the open file. Defaults to None. - inherit (bool, optional): Inherit default styles. Defaults to True. - - Returns: - Theme: A New theme instance. - """ - config = configparser.ConfigParser() - config.read_file(config_file, source=source) - styles = {name: Style.parse(value) for name, value in config.items("styles")} - theme = Theme(styles, inherit=inherit) - return theme - - @classmethod - def read( - cls, path: str, inherit: bool = True, encoding: Optional[str] = None - ) -> "Theme": - """Read a theme from a path. - - Args: - path (str): Path to a config file readable by Python configparser module. - inherit (bool, optional): Inherit default styles. Defaults to True. - encoding (str, optional): Encoding of the config file. Defaults to None. - - Returns: - Theme: A new theme instance. - """ - with open(path, encoding=encoding) as config_file: - return cls.from_file(config_file, source=path, inherit=inherit) - - -class ThemeStackError(Exception): - """Base exception for errors related to the theme stack.""" - - -class ThemeStack: - """A stack of themes. - - Args: - theme (Theme): A theme instance - """ - - def __init__(self, theme: Theme) -> None: - self._entries: List[Dict[str, Style]] = [theme.styles] - self.get = self._entries[-1].get - - def push_theme(self, theme: Theme, inherit: bool = True) -> None: - """Push a theme on the top of the stack. - - Args: - theme (Theme): A Theme instance. - inherit (boolean, optional): Inherit styles from current top of stack. - """ - styles: Dict[str, Style] - styles = ( - {**self._entries[-1], **theme.styles} if inherit else theme.styles.copy() - ) - self._entries.append(styles) - self.get = self._entries[-1].get - - def pop_theme(self) -> None: - """Pop (and discard) the top-most theme.""" - if len(self._entries) == 1: - raise ThemeStackError("Unable to pop base theme") - self._entries.pop() - self.get = self._entries[-1].get - - -if __name__ == "__main__": # pragma: no cover - theme = Theme() - print(theme.config) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/themes.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/themes.py deleted file mode 100644 index bf6db104a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/themes.py +++ /dev/null @@ -1,5 +0,0 @@ -from .default_styles import DEFAULT_STYLES -from .theme import Theme - - -DEFAULT = Theme(DEFAULT_STYLES) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/traceback.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/traceback.py deleted file mode 100644 index 01b2f5023..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/traceback.py +++ /dev/null @@ -1,899 +0,0 @@ -import inspect -import linecache -import os -import sys -from dataclasses import dataclass, field -from itertools import islice -from traceback import walk_tb -from types import ModuleType, TracebackType -from typing import ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Sequence, - Set, - Tuple, - Type, - Union, -) - -from pip._vendor.pygments.lexers import guess_lexer_for_filename -from pip._vendor.pygments.token import Comment, Keyword, Name, Number, Operator, String -from pip._vendor.pygments.token import Text as TextToken -from pip._vendor.pygments.token import Token -from pip._vendor.pygments.util import ClassNotFound - -from . import pretty -from ._loop import loop_first_last, loop_last -from .columns import Columns -from .console import ( - Console, - ConsoleOptions, - ConsoleRenderable, - Group, - RenderResult, - group, -) -from .constrain import Constrain -from .highlighter import RegexHighlighter, ReprHighlighter -from .panel import Panel -from .scope import render_scope -from .style import Style -from .syntax import Syntax, SyntaxPosition -from .text import Text -from .theme import Theme - -WINDOWS = sys.platform == "win32" - -LOCALS_MAX_LENGTH = 10 -LOCALS_MAX_STRING = 80 - - -def _iter_syntax_lines( - start: SyntaxPosition, end: SyntaxPosition -) -> Iterable[Tuple[int, int, int]]: - """Yield start and end positions per line. - - Args: - start: Start position. - end: End position. - - Returns: - Iterable of (LINE, COLUMN1, COLUMN2). - """ - - line1, column1 = start - line2, column2 = end - - if line1 == line2: - yield line1, column1, column2 - else: - for first, last, line_no in loop_first_last(range(line1, line2 + 1)): - if first: - yield line_no, column1, -1 - elif last: - yield line_no, 0, column2 - else: - yield line_no, 0, -1 - - -def install( - *, - console: Optional[Console] = None, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: Optional[bool] = None, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, -) -> Callable[[Type[BaseException], BaseException, Optional[TracebackType]], Any]: - """Install a rich traceback handler. - - Once installed, any tracebacks will be printed with syntax highlighting and rich formatting. - - - Args: - console (Optional[Console], optional): Console to write exception to. Default uses internal Console instance. - width (Optional[int], optional): Width (in characters) of traceback. Defaults to 100. - code_width (Optional[int], optional): Code width (in characters) of traceback. Defaults to 88. - extra_lines (int, optional): Extra lines of code. Defaults to 3. - theme (Optional[str], optional): Pygments theme to use in traceback. Defaults to ``None`` which will pick - a theme appropriate for the platform. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - - Returns: - Callable: The previous exception handler that was replaced. - - """ - traceback_console = Console(stderr=True) if console is None else console - - locals_hide_sunder = ( - True - if (traceback_console.is_jupyter and locals_hide_sunder is None) - else locals_hide_sunder - ) - - def excepthook( - type_: Type[BaseException], - value: BaseException, - traceback: Optional[TracebackType], - ) -> None: - exception_traceback = Traceback.from_exception( - type_, - value, - traceback, - width=width, - code_width=code_width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=bool(locals_hide_sunder), - indent_guides=indent_guides, - suppress=suppress, - max_frames=max_frames, - ) - traceback_console.print(exception_traceback) - - def ipy_excepthook_closure(ip: Any) -> None: # pragma: no cover - tb_data = {} # store information about showtraceback call - default_showtraceback = ip.showtraceback # keep reference of default traceback - - def ipy_show_traceback(*args: Any, **kwargs: Any) -> None: - """wrap the default ip.showtraceback to store info for ip._showtraceback""" - nonlocal tb_data - tb_data = kwargs - default_showtraceback(*args, **kwargs) - - def ipy_display_traceback( - *args: Any, is_syntax: bool = False, **kwargs: Any - ) -> None: - """Internally called traceback from ip._showtraceback""" - nonlocal tb_data - exc_tuple = ip._get_exc_info() - - # do not display trace on syntax error - tb: Optional[TracebackType] = None if is_syntax else exc_tuple[2] - - # determine correct tb_offset - compiled = tb_data.get("running_compiled_code", False) - tb_offset = tb_data.get("tb_offset") - if tb_offset is None: - tb_offset = 1 if compiled else 0 - # remove ipython internal frames from trace with tb_offset - for _ in range(tb_offset): - if tb is None: - break - tb = tb.tb_next - - excepthook(exc_tuple[0], exc_tuple[1], tb) - tb_data = {} # clear data upon usage - - # replace _showtraceback instead of showtraceback to allow ipython features such as debugging to work - # this is also what the ipython docs recommends to modify when subclassing InteractiveShell - ip._showtraceback = ipy_display_traceback - # add wrapper to capture tb_data - ip.showtraceback = ipy_show_traceback - ip.showsyntaxerror = lambda *args, **kwargs: ipy_display_traceback( - *args, is_syntax=True, **kwargs - ) - - try: # pragma: no cover - # if within ipython, use customized traceback - ip = get_ipython() # type: ignore[name-defined] - ipy_excepthook_closure(ip) - return sys.excepthook - except Exception: - # otherwise use default system hook - old_excepthook = sys.excepthook - sys.excepthook = excepthook - return old_excepthook - - -@dataclass -class Frame: - filename: str - lineno: int - name: str - line: str = "" - locals: Optional[Dict[str, pretty.Node]] = None - last_instruction: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] = None - - -@dataclass -class _SyntaxError: - offset: int - filename: str - line: str - lineno: int - msg: str - notes: List[str] = field(default_factory=list) - - -@dataclass -class Stack: - exc_type: str - exc_value: str - syntax_error: Optional[_SyntaxError] = None - is_cause: bool = False - frames: List[Frame] = field(default_factory=list) - notes: List[str] = field(default_factory=list) - is_group: bool = False - exceptions: List["Trace"] = field(default_factory=list) - - -@dataclass -class Trace: - stacks: List[Stack] - - -class PathHighlighter(RegexHighlighter): - highlights = [r"(?P<dim>.*/)(?P<bold>.+)"] - - -class Traceback: - """A Console renderable that renders a traceback. - - Args: - trace (Trace, optional): A `Trace` object produced from `extract`. Defaults to None, which uses - the last exception. - width (Optional[int], optional): Number of characters used to traceback. Defaults to 100. - code_width (Optional[int], optional): Number of code characters used to traceback. Defaults to 88. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - - """ - - LEXERS = { - "": "text", - ".py": "python", - ".pxd": "cython", - ".pyx": "cython", - ".pxi": "pyrex", - } - - def __init__( - self, - trace: Optional[Trace] = None, - *, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ): - if trace is None: - exc_type, exc_value, traceback = sys.exc_info() - if exc_type is None or exc_value is None or traceback is None: - raise ValueError( - "Value for 'trace' required if not called in except: block" - ) - trace = self.extract( - exc_type, exc_value, traceback, show_locals=show_locals - ) - self.trace = trace - self.width = width - self.code_width = code_width - self.extra_lines = extra_lines - self.theme = Syntax.get_theme(theme or "ansi_dark") - self.word_wrap = word_wrap - self.show_locals = show_locals - self.indent_guides = indent_guides - self.locals_max_length = locals_max_length - self.locals_max_string = locals_max_string - self.locals_hide_dunder = locals_hide_dunder - self.locals_hide_sunder = locals_hide_sunder - - self.suppress: Sequence[str] = [] - for suppress_entity in suppress: - if not isinstance(suppress_entity, str): - assert ( - suppress_entity.__file__ is not None - ), f"{suppress_entity!r} must be a module with '__file__' attribute" - path = os.path.dirname(suppress_entity.__file__) - else: - path = suppress_entity - path = os.path.normpath(os.path.abspath(path)) - self.suppress.append(path) - self.max_frames = max(4, max_frames) if max_frames > 0 else 0 - - @classmethod - def from_exception( - cls, - exc_type: Type[Any], - exc_value: BaseException, - traceback: Optional[TracebackType], - *, - width: Optional[int] = 100, - code_width: Optional[int] = 88, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - indent_guides: bool = True, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ) -> "Traceback": - """Create a traceback from exception info - - Args: - exc_type (Type[BaseException]): Exception type. - exc_value (BaseException): Exception value. - traceback (TracebackType): Python Traceback object. - width (Optional[int], optional): Number of characters used to traceback. Defaults to 100. - code_width (Optional[int], optional): Number of code characters used to traceback. Defaults to 88. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback. - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - indent_guides (bool, optional): Enable indent guides in code and locals. Defaults to True. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - - Returns: - Traceback: A Traceback instance that may be printed. - """ - rich_traceback = cls.extract( - exc_type, - exc_value, - traceback, - show_locals=show_locals, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=locals_hide_sunder, - ) - - return cls( - rich_traceback, - width=width, - code_width=code_width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - indent_guides=indent_guides, - locals_max_length=locals_max_length, - locals_max_string=locals_max_string, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=locals_hide_sunder, - suppress=suppress, - max_frames=max_frames, - ) - - @classmethod - def extract( - cls, - exc_type: Type[BaseException], - exc_value: BaseException, - traceback: Optional[TracebackType], - *, - show_locals: bool = False, - locals_max_length: int = LOCALS_MAX_LENGTH, - locals_max_string: int = LOCALS_MAX_STRING, - locals_hide_dunder: bool = True, - locals_hide_sunder: bool = False, - _visited_exceptions: Optional[Set[BaseException]] = None, - ) -> Trace: - """Extract traceback information. - - Args: - exc_type (Type[BaseException]): Exception type. - exc_value (BaseException): Exception value. - traceback (TracebackType): Python Traceback object. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation. - Defaults to 10. - locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80. - locals_hide_dunder (bool, optional): Hide locals prefixed with double underscore. Defaults to True. - locals_hide_sunder (bool, optional): Hide locals prefixed with single underscore. Defaults to False. - - Returns: - Trace: A Trace instance which you can use to construct a `Traceback`. - """ - - stacks: List[Stack] = [] - is_cause = False - - from pip._vendor.rich import _IMPORT_CWD - - notes: List[str] = getattr(exc_value, "__notes__", None) or [] - - grouped_exceptions: Set[BaseException] = ( - set() if _visited_exceptions is None else _visited_exceptions - ) - - def safe_str(_object: Any) -> str: - """Don't allow exceptions from __str__ to propagate.""" - try: - return str(_object) - except Exception: - return "<exception str() failed>" - - while True: - stack = Stack( - exc_type=safe_str(exc_type.__name__), - exc_value=safe_str(exc_value), - is_cause=is_cause, - notes=notes, - ) - - if sys.version_info >= (3, 11): - if isinstance(exc_value, (BaseExceptionGroup, ExceptionGroup)): - stack.is_group = True - for exception in exc_value.exceptions: - if exception in grouped_exceptions: - continue - grouped_exceptions.add(exception) - stack.exceptions.append( - Traceback.extract( - type(exception), - exception, - exception.__traceback__, - show_locals=show_locals, - locals_max_length=locals_max_length, - locals_hide_dunder=locals_hide_dunder, - locals_hide_sunder=locals_hide_sunder, - _visited_exceptions=grouped_exceptions, - ) - ) - - if isinstance(exc_value, SyntaxError): - stack.syntax_error = _SyntaxError( - offset=exc_value.offset or 0, - filename=exc_value.filename or "?", - lineno=exc_value.lineno or 0, - line=exc_value.text or "", - msg=exc_value.msg, - notes=notes, - ) - - stacks.append(stack) - append = stack.frames.append - - def get_locals( - iter_locals: Iterable[Tuple[str, object]], - ) -> Iterable[Tuple[str, object]]: - """Extract locals from an iterator of key pairs.""" - if not (locals_hide_dunder or locals_hide_sunder): - yield from iter_locals - return - for key, value in iter_locals: - if locals_hide_dunder and key.startswith("__"): - continue - if locals_hide_sunder and key.startswith("_"): - continue - yield key, value - - for frame_summary, line_no in walk_tb(traceback): - filename = frame_summary.f_code.co_filename - - last_instruction: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] - last_instruction = None - if sys.version_info >= (3, 11): - instruction_index = frame_summary.f_lasti // 2 - instruction_position = next( - islice( - frame_summary.f_code.co_positions(), - instruction_index, - instruction_index + 1, - ) - ) - ( - start_line, - end_line, - start_column, - end_column, - ) = instruction_position - if ( - start_line is not None - and end_line is not None - and start_column is not None - and end_column is not None - ): - last_instruction = ( - (start_line, start_column), - (end_line, end_column), - ) - - if filename and not filename.startswith("<"): - if not os.path.isabs(filename): - filename = os.path.join(_IMPORT_CWD, filename) - if frame_summary.f_locals.get("_rich_traceback_omit", False): - continue - - frame = Frame( - filename=filename or "?", - lineno=line_no, - name=frame_summary.f_code.co_name, - locals=( - { - key: pretty.traverse( - value, - max_length=locals_max_length, - max_string=locals_max_string, - ) - for key, value in get_locals(frame_summary.f_locals.items()) - if not (inspect.isfunction(value) or inspect.isclass(value)) - } - if show_locals - else None - ), - last_instruction=last_instruction, - ) - append(frame) - if frame_summary.f_locals.get("_rich_traceback_guard", False): - del stack.frames[:] - - if not grouped_exceptions: - cause = getattr(exc_value, "__cause__", None) - if cause is not None and cause is not exc_value: - exc_type = cause.__class__ - exc_value = cause - # __traceback__ can be None, e.g. for exceptions raised by the - # 'multiprocessing' module - traceback = cause.__traceback__ - is_cause = True - continue - - cause = exc_value.__context__ - if cause is not None and not getattr( - exc_value, "__suppress_context__", False - ): - exc_type = cause.__class__ - exc_value = cause - traceback = cause.__traceback__ - is_cause = False - continue - # No cover, code is reached but coverage doesn't recognize it. - break # pragma: no cover - - trace = Trace(stacks=stacks) - - return trace - - def __rich_console__( - self, console: Console, options: ConsoleOptions - ) -> RenderResult: - theme = self.theme - background_style = theme.get_background_style() - token_style = theme.get_style_for_token - - traceback_theme = Theme( - { - "pretty": token_style(TextToken), - "pygments.text": token_style(Token), - "pygments.string": token_style(String), - "pygments.function": token_style(Name.Function), - "pygments.number": token_style(Number), - "repr.indent": token_style(Comment) + Style(dim=True), - "repr.str": token_style(String), - "repr.brace": token_style(TextToken) + Style(bold=True), - "repr.number": token_style(Number), - "repr.bool_true": token_style(Keyword.Constant), - "repr.bool_false": token_style(Keyword.Constant), - "repr.none": token_style(Keyword.Constant), - "scope.border": token_style(String.Delimiter), - "scope.equals": token_style(Operator), - "scope.key": token_style(Name), - "scope.key.special": token_style(Name.Constant) + Style(dim=True), - }, - inherit=False, - ) - - highlighter = ReprHighlighter() - - @group() - def render_stack(stack: Stack, last: bool) -> RenderResult: - if stack.frames: - stack_renderable: ConsoleRenderable = Panel( - self._render_stack(stack), - title="[traceback.title]Traceback [dim](most recent call last)", - style=background_style, - border_style="traceback.border", - expand=True, - padding=(0, 1), - ) - stack_renderable = Constrain(stack_renderable, self.width) - with console.use_theme(traceback_theme): - yield stack_renderable - - if stack.syntax_error is not None: - with console.use_theme(traceback_theme): - yield Constrain( - Panel( - self._render_syntax_error(stack.syntax_error), - style=background_style, - border_style="traceback.border.syntax_error", - expand=True, - padding=(0, 1), - width=self.width, - ), - self.width, - ) - yield Text.assemble( - (f"{stack.exc_type}: ", "traceback.exc_type"), - highlighter(stack.syntax_error.msg), - ) - elif stack.exc_value: - yield Text.assemble( - (f"{stack.exc_type}: ", "traceback.exc_type"), - highlighter(stack.exc_value), - ) - else: - yield Text.assemble((f"{stack.exc_type}", "traceback.exc_type")) - - for note in stack.notes: - yield Text.assemble(("[NOTE] ", "traceback.note"), highlighter(note)) - - if stack.is_group: - for group_no, group_exception in enumerate(stack.exceptions, 1): - grouped_exceptions: List[Group] = [] - for group_last, group_stack in loop_last(group_exception.stacks): - grouped_exceptions.append(render_stack(group_stack, group_last)) - yield "" - yield Constrain( - Panel( - Group(*grouped_exceptions), - title=f"Sub-exception #{group_no}", - border_style="traceback.group.border", - ), - self.width, - ) - - if not last: - if stack.is_cause: - yield Text.from_markup( - "\n[i]The above exception was the direct cause of the following exception:\n", - ) - else: - yield Text.from_markup( - "\n[i]During handling of the above exception, another exception occurred:\n", - ) - - for last, stack in loop_last(reversed(self.trace.stacks)): - yield render_stack(stack, last) - - @group() - def _render_syntax_error(self, syntax_error: _SyntaxError) -> RenderResult: - highlighter = ReprHighlighter() - path_highlighter = PathHighlighter() - if syntax_error.filename != "<stdin>": - if os.path.exists(syntax_error.filename): - text = Text.assemble( - (f" {syntax_error.filename}", "pygments.string"), - (":", "pygments.text"), - (str(syntax_error.lineno), "pygments.number"), - style="pygments.text", - ) - yield path_highlighter(text) - syntax_error_text = highlighter(syntax_error.line.rstrip()) - syntax_error_text.no_wrap = True - offset = min(syntax_error.offset - 1, len(syntax_error_text)) - syntax_error_text.stylize("bold underline", offset, offset) - syntax_error_text += Text.from_markup( - "\n" + " " * offset + "[traceback.offset]▲[/]", - style="pygments.text", - ) - yield syntax_error_text - - @classmethod - def _guess_lexer(cls, filename: str, code: str) -> str: - ext = os.path.splitext(filename)[-1] - if not ext: - # No extension, look at first line to see if it is a hashbang - # Note, this is an educated guess and not a guarantee - # If it fails, the only downside is that the code is highlighted strangely - new_line_index = code.index("\n") - first_line = code[:new_line_index] if new_line_index != -1 else code - if first_line.startswith("#!") and "python" in first_line.lower(): - return "python" - try: - return cls.LEXERS.get(ext) or guess_lexer_for_filename(filename, code).name - except ClassNotFound: - return "text" - - @group() - def _render_stack(self, stack: Stack) -> RenderResult: - path_highlighter = PathHighlighter() - theme = self.theme - - def render_locals(frame: Frame) -> Iterable[ConsoleRenderable]: - if frame.locals: - yield render_scope( - frame.locals, - title="locals", - indent_guides=self.indent_guides, - max_length=self.locals_max_length, - max_string=self.locals_max_string, - ) - - exclude_frames: Optional[range] = None - if self.max_frames != 0: - exclude_frames = range( - self.max_frames // 2, - len(stack.frames) - self.max_frames // 2, - ) - - excluded = False - for frame_index, frame in enumerate(stack.frames): - if exclude_frames and frame_index in exclude_frames: - excluded = True - continue - - if excluded: - assert exclude_frames is not None - yield Text( - f"\n... {len(exclude_frames)} frames hidden ...", - justify="center", - style="traceback.error", - ) - excluded = False - - first = frame_index == 0 - frame_filename = frame.filename - suppressed = any(frame_filename.startswith(path) for path in self.suppress) - - if os.path.exists(frame.filename): - text = Text.assemble( - path_highlighter(Text(frame.filename, style="pygments.string")), - (":", "pygments.text"), - (str(frame.lineno), "pygments.number"), - " in ", - (frame.name, "pygments.function"), - style="pygments.text", - ) - else: - text = Text.assemble( - "in ", - (frame.name, "pygments.function"), - (":", "pygments.text"), - (str(frame.lineno), "pygments.number"), - style="pygments.text", - ) - if not frame.filename.startswith("<") and not first: - yield "" - yield text - if frame.filename.startswith("<"): - yield from render_locals(frame) - continue - if not suppressed: - try: - code_lines = linecache.getlines(frame.filename) - code = "".join(code_lines) - if not code: - # code may be an empty string if the file doesn't exist, OR - # if the traceback filename is generated dynamically - continue - lexer_name = self._guess_lexer(frame.filename, code) - syntax = Syntax( - code, - lexer_name, - theme=theme, - line_numbers=True, - line_range=( - frame.lineno - self.extra_lines, - frame.lineno + self.extra_lines, - ), - highlight_lines={frame.lineno}, - word_wrap=self.word_wrap, - code_width=self.code_width, - indent_guides=self.indent_guides, - dedent=False, - ) - yield "" - except Exception as error: - yield Text.assemble( - (f"\n{error}", "traceback.error"), - ) - else: - if frame.last_instruction is not None: - start, end = frame.last_instruction - - # Stylize a line at a time - # So that indentation isn't underlined (which looks bad) - for line1, column1, column2 in _iter_syntax_lines(start, end): - try: - if column1 == 0: - line = code_lines[line1 - 1] - column1 = len(line) - len(line.lstrip()) - if column2 == -1: - column2 = len(code_lines[line1 - 1]) - except IndexError: - # Being defensive here - # If last_instruction reports a line out-of-bounds, we don't want to crash - continue - - syntax.stylize_range( - style="traceback.error_range", - start=(line1, column1), - end=(line1, column2), - ) - yield ( - Columns( - [ - syntax, - *render_locals(frame), - ], - padding=1, - ) - if frame.locals - else syntax - ) - - -if __name__ == "__main__": # pragma: no cover - install(show_locals=True) - import sys - - def bar( - a: Any, - ) -> None: # 这是对亚洲语言支持的测试。面对模棱两可的想法,拒绝猜测的诱惑 - one = 1 - print(one / a) - - def foo(a: Any) -> None: - _rich_traceback_guard = True - zed = { - "characters": { - "Paul Atreides", - "Vladimir Harkonnen", - "Thufir Hawat", - "Duncan Idaho", - }, - "atomic_types": (None, False, True), - } - bar(a) - - def error() -> None: - foo(0) - - error() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/tree.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/tree.py deleted file mode 100644 index 27c5cf7b2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/rich/tree.py +++ /dev/null @@ -1,257 +0,0 @@ -from typing import Iterator, List, Optional, Tuple - -from ._loop import loop_first, loop_last -from .console import Console, ConsoleOptions, RenderableType, RenderResult -from .jupyter import JupyterMixin -from .measure import Measurement -from .segment import Segment -from .style import Style, StyleStack, StyleType -from .styled import Styled - -GuideType = Tuple[str, str, str, str] - - -class Tree(JupyterMixin): - """A renderable for a tree structure. - - Attributes: - ASCII_GUIDES (GuideType): Guide lines used when Console.ascii_only is True. - TREE_GUIDES (List[GuideType, GuideType, GuideType]): Default guide lines. - - Args: - label (RenderableType): The renderable or str for the tree label. - style (StyleType, optional): Style of this tree. Defaults to "tree". - guide_style (StyleType, optional): Style of the guide lines. Defaults to "tree.line". - expanded (bool, optional): Also display children. Defaults to True. - highlight (bool, optional): Highlight renderable (if str). Defaults to False. - hide_root (bool, optional): Hide the root node. Defaults to False. - """ - - ASCII_GUIDES = (" ", "| ", "+-- ", "`-- ") - TREE_GUIDES = [ - (" ", "│ ", "├── ", "└── "), - (" ", "┃ ", "┣━━ ", "┗━━ "), - (" ", "║ ", "╠══ ", "╚══ "), - ] - - def __init__( - self, - label: RenderableType, - *, - style: StyleType = "tree", - guide_style: StyleType = "tree.line", - expanded: bool = True, - highlight: bool = False, - hide_root: bool = False, - ) -> None: - self.label = label - self.style = style - self.guide_style = guide_style - self.children: List[Tree] = [] - self.expanded = expanded - self.highlight = highlight - self.hide_root = hide_root - - def add( - self, - label: RenderableType, - *, - style: Optional[StyleType] = None, - guide_style: Optional[StyleType] = None, - expanded: bool = True, - highlight: Optional[bool] = False, - ) -> "Tree": - """Add a child tree. - - Args: - label (RenderableType): The renderable or str for the tree label. - style (StyleType, optional): Style of this tree. Defaults to "tree". - guide_style (StyleType, optional): Style of the guide lines. Defaults to "tree.line". - expanded (bool, optional): Also display children. Defaults to True. - highlight (Optional[bool], optional): Highlight renderable (if str). Defaults to False. - - Returns: - Tree: A new child Tree, which may be further modified. - """ - node = Tree( - label, - style=self.style if style is None else style, - guide_style=self.guide_style if guide_style is None else guide_style, - expanded=expanded, - highlight=self.highlight if highlight is None else highlight, - ) - self.children.append(node) - return node - - def __rich_console__( - self, console: "Console", options: "ConsoleOptions" - ) -> "RenderResult": - stack: List[Iterator[Tuple[bool, Tree]]] = [] - pop = stack.pop - push = stack.append - new_line = Segment.line() - - get_style = console.get_style - null_style = Style.null() - guide_style = get_style(self.guide_style, default="") or null_style - SPACE, CONTINUE, FORK, END = range(4) - - _Segment = Segment - - def make_guide(index: int, style: Style) -> Segment: - """Make a Segment for a level of the guide lines.""" - if options.ascii_only: - line = self.ASCII_GUIDES[index] - else: - guide = 1 if style.bold else (2 if style.underline2 else 0) - line = self.TREE_GUIDES[0 if options.legacy_windows else guide][index] - return _Segment(line, style) - - levels: List[Segment] = [make_guide(CONTINUE, guide_style)] - push(iter(loop_last([self]))) - - guide_style_stack = StyleStack(get_style(self.guide_style)) - style_stack = StyleStack(get_style(self.style)) - remove_guide_styles = Style(bold=False, underline2=False) - - depth = 0 - - while stack: - stack_node = pop() - try: - last, node = next(stack_node) - except StopIteration: - levels.pop() - if levels: - guide_style = levels[-1].style or null_style - levels[-1] = make_guide(FORK, guide_style) - guide_style_stack.pop() - style_stack.pop() - continue - push(stack_node) - if last: - levels[-1] = make_guide(END, levels[-1].style or null_style) - - guide_style = guide_style_stack.current + get_style(node.guide_style) - style = style_stack.current + get_style(node.style) - prefix = levels[(2 if self.hide_root else 1) :] - renderable_lines = console.render_lines( - Styled(node.label, style), - options.update( - width=options.max_width - - sum(level.cell_length for level in prefix), - highlight=self.highlight, - height=None, - ), - pad=options.justify is not None, - ) - - if not (depth == 0 and self.hide_root): - for first, line in loop_first(renderable_lines): - if prefix: - yield from _Segment.apply_style( - prefix, - style.background_style, - post_style=remove_guide_styles, - ) - yield from line - yield new_line - if first and prefix: - prefix[-1] = make_guide( - SPACE if last else CONTINUE, prefix[-1].style or null_style - ) - - if node.expanded and node.children: - levels[-1] = make_guide( - SPACE if last else CONTINUE, levels[-1].style or null_style - ) - levels.append( - make_guide(END if len(node.children) == 1 else FORK, guide_style) - ) - style_stack.push(get_style(node.style)) - guide_style_stack.push(get_style(node.guide_style)) - push(iter(loop_last(node.children))) - depth += 1 - - def __rich_measure__( - self, console: "Console", options: "ConsoleOptions" - ) -> "Measurement": - stack: List[Iterator[Tree]] = [iter([self])] - pop = stack.pop - push = stack.append - minimum = 0 - maximum = 0 - measure = Measurement.get - level = 0 - while stack: - iter_tree = pop() - try: - tree = next(iter_tree) - except StopIteration: - level -= 1 - continue - push(iter_tree) - min_measure, max_measure = measure(console, options, tree.label) - indent = level * 4 - minimum = max(min_measure + indent, minimum) - maximum = max(max_measure + indent, maximum) - if tree.expanded and tree.children: - push(iter(tree.children)) - level += 1 - return Measurement(minimum, maximum) - - -if __name__ == "__main__": # pragma: no cover - from pip._vendor.rich.console import Group - from pip._vendor.rich.markdown import Markdown - from pip._vendor.rich.panel import Panel - from pip._vendor.rich.syntax import Syntax - from pip._vendor.rich.table import Table - - table = Table(row_styles=["", "dim"]) - - table.add_column("Released", style="cyan", no_wrap=True) - table.add_column("Title", style="magenta") - table.add_column("Box Office", justify="right", style="green") - - table.add_row("Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$952,110,690") - table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347") - table.add_row("Dec 15, 2017", "Star Wars Ep. V111: The Last Jedi", "$1,332,539,889") - table.add_row("Dec 16, 2016", "Rogue One: A Star Wars Story", "$1,332,439,889") - - code = """\ -class Segment(NamedTuple): - text: str = "" - style: Optional[Style] = None - is_control: bool = False -""" - syntax = Syntax(code, "python", theme="monokai", line_numbers=True) - - markdown = Markdown( - """\ -### example.md -> Hello, World! -> -> Markdown _all_ the things -""" - ) - - root = Tree("🌲 [b green]Rich Tree", highlight=True, hide_root=True) - - node = root.add(":file_folder: Renderables", guide_style="red") - simple_node = node.add(":file_folder: [bold yellow]Atomic", guide_style="uu green") - simple_node.add(Group("📄 Syntax", syntax)) - simple_node.add(Group("📄 Markdown", Panel(markdown, border_style="green"))) - - containers_node = node.add( - ":file_folder: [bold magenta]Containers", guide_style="bold magenta" - ) - containers_node.expanded = True - panel = Panel.fit("Just a panel", border_style="red") - containers_node.add(Group("📄 Panels", panel)) - - containers_node.add(Group("📄 [b magenta]Table", table)) - - console = Console() - - console.print(root) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/LICENSE deleted file mode 100644 index e859590f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Taneli Hukkinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__init__.py deleted file mode 100644 index 9395b0438..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -__all__ = ("loads", "load", "TOMLDecodeError") -__version__ = "2.3.0" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT - -from ._parser import TOMLDecodeError, load, loads diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 35b419e912f62b6fdd70f18bccf60d711aca14fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmXv~O-sW-5ZyG1)duTHJPLXW(x$ORY!NRiRHz?>dRtt!$)ao1>@vGm>!~+?i%0*8 zUL;o!dMxx0xT!jaH}5fzH^b~yS1ZWW+v_*)SO|R<;=f9NWWHs{6h)3kk)^F`D=M9q zy0*5vj&{1Pb~jOEZzJE$-Bi#-J-NH}X1(Ft`C9+ttar>}k+2g00l8Bcpa?$q?L`O2 z2(S(KOL>_Pnx=&09wGM(6c?EhWg;mk1`F4(zespNbAu><KI-5rGgg=;48nH1fgc16 zu>^6)Vy$qTig7Zaiq&|=wE?Bg76!EtUrzL`$eLk`w8-QB9_h1@OsQr>k0kE#0ajeI znxyfN-Y|tFmw`DfO9TX3j8YyDQe+ZRmy>+?U?h@p$_~LZcbRV@wP9dpTb4DeATOAf RKdS3f?+b<RD1;R=`vKuMYfAtC diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-314.pyc deleted file mode 100644 index 6a660b40ebc15d77345a7f762381d7df3b8cdf92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35905 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%0D8EKRd5bEoFB|8Q`|zLHx!`})1y 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 aABO4R@ryiZ*&e@QA|~yL9qa)^I{y=5!z)4n diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-314.pyc deleted file mode 100644 index b3347d7c32d9b4dab2726728fd3faa1a1c9c72ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4786 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 PUp0})dp`sZgc|pMRU-ej diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-314.pyc deleted file mode 100644 index a68512613df9b0afde854b81b2d5da9fdc89a61b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmZ8cu}VWR6ir^*r&g+i;NT+SpheqS6j2dD3Q|#|RNeA?r0qph)0dE>YPTW?jvf64 zM?XbDkgP7c2@Y;z3c7gVo_p@)95{DjESo{To*v%#x1X<r<*&#u`P}!UhfYup@1hE} zxDwc)LM)j^Q4pmHIKs=p;?$oFA)Ag!l&S^)u3<D}hihaO<x=khagI2$opjxBnF+z_ z0$lp2qXZNVaw9IZUB#1AJqV#w14w&t#8~YzRi+K>2+6D?d(d@+C!STMxksN~h1^Yf zgB}~uhO#E;()#)my_EW#DlJ>ku!c5->@@4lK%OVudN9_90G%(<YS*60WVy5wuf$ht ztML)Em0%WP+g5a+*Qwza@`^Ri*(n&RxGKgMkTj((TG<x782jj83d(=B*_O?YfGs`l zQ(@nx<l%#0jK4An&p)EMj}VPb_Dvt|4*RX=>`X875{}-M`xCd78`&c-;m9@7S?~G* D1}t|x diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_parser.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_parser.py deleted file mode 100644 index 26170e8ed..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_parser.py +++ /dev/null @@ -1,777 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -import sys -from types import MappingProxyType - -from ._re import ( - RE_DATETIME, - RE_LOCALTIME, - RE_NUMBER, - match_to_datetime, - match_to_localtime, - match_to_number, -) - -TYPE_CHECKING = False -if TYPE_CHECKING: - from collections.abc import Iterable - from typing import IO, Any, Final - - from ._types import Key, ParseFloat, Pos - -# Inline tables/arrays are implemented using recursion. Pathologically -# nested documents cause pure Python to raise RecursionError (which is OK), -# but mypyc binary wheels will crash unrecoverably (not OK). According to -# mypyc docs this will be fixed in the future: -# https://mypyc.readthedocs.io/en/latest/differences_from_python.html#stack-overflows -# Before mypyc's fix is in, recursion needs to be limited by this library. -# Choosing `sys.getrecursionlimit()` as maximum inline table/array nesting -# level, as it allows more nesting than pure Python, but still seems a far -# lower number than where mypyc binaries crash. -MAX_INLINE_NESTING: Final = sys.getrecursionlimit() - -ASCII_CTRL: Final = frozenset(chr(i) for i in range(32)) | frozenset(chr(127)) - -# Neither of these sets include quotation mark or backslash. They are -# currently handled as separate cases in the parser functions. -ILLEGAL_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t") -ILLEGAL_MULTILINE_BASIC_STR_CHARS: Final = ASCII_CTRL - frozenset("\t\n") - -ILLEGAL_LITERAL_STR_CHARS: Final = ILLEGAL_BASIC_STR_CHARS -ILLEGAL_MULTILINE_LITERAL_STR_CHARS: Final = ILLEGAL_MULTILINE_BASIC_STR_CHARS - -ILLEGAL_COMMENT_CHARS: Final = ILLEGAL_BASIC_STR_CHARS - -TOML_WS: Final = frozenset(" \t") -TOML_WS_AND_NEWLINE: Final = TOML_WS | frozenset("\n") -BARE_KEY_CHARS: Final = frozenset( - "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-_" -) -KEY_INITIAL_CHARS: Final = BARE_KEY_CHARS | frozenset("\"'") -HEXDIGIT_CHARS: Final = frozenset("abcdef" "ABCDEF" "0123456789") - -BASIC_STR_ESCAPE_REPLACEMENTS: Final = MappingProxyType( - { - "\\b": "\u0008", # backspace - "\\t": "\u0009", # tab - "\\n": "\u000a", # linefeed - "\\f": "\u000c", # form feed - "\\r": "\u000d", # carriage return - '\\"': "\u0022", # quote - "\\\\": "\u005c", # backslash - } -) - - -class DEPRECATED_DEFAULT: - """Sentinel to be used as default arg during deprecation - period of TOMLDecodeError's free-form arguments.""" - - -class TOMLDecodeError(ValueError): - """An error raised if a document is not valid TOML. - - Adds the following attributes to ValueError: - msg: The unformatted error message - doc: The TOML document being parsed - pos: The index of doc where parsing failed - lineno: The line corresponding to pos - colno: The column corresponding to pos - """ - - def __init__( - self, - msg: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - doc: str | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - pos: Pos | type[DEPRECATED_DEFAULT] = DEPRECATED_DEFAULT, - *args: Any, - ): - if ( - args - or not isinstance(msg, str) - or not isinstance(doc, str) - or not isinstance(pos, int) - ): - import warnings - - warnings.warn( - "Free-form arguments for TOMLDecodeError are deprecated. " - "Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.", - DeprecationWarning, - stacklevel=2, - ) - if pos is not DEPRECATED_DEFAULT: - args = pos, *args - if doc is not DEPRECATED_DEFAULT: - args = doc, *args - if msg is not DEPRECATED_DEFAULT: - args = msg, *args - ValueError.__init__(self, *args) - return - - lineno = doc.count("\n", 0, pos) + 1 - if lineno == 1: - colno = pos + 1 - else: - colno = pos - doc.rindex("\n", 0, pos) - - if pos >= len(doc): - coord_repr = "end of document" - else: - coord_repr = f"line {lineno}, column {colno}" - errmsg = f"{msg} (at {coord_repr})" - ValueError.__init__(self, errmsg) - - self.msg = msg - self.doc = doc - self.pos = pos - self.lineno = lineno - self.colno = colno - - -def load(__fp: IO[bytes], *, parse_float: ParseFloat = float) -> dict[str, Any]: - """Parse TOML from a binary file object.""" - b = __fp.read() - try: - s = b.decode() - except AttributeError: - raise TypeError( - "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`" - ) from None - return loads(s, parse_float=parse_float) - - -def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]: # noqa: C901 - """Parse TOML from a string.""" - - # The spec allows converting "\r\n" to "\n", even in string - # literals. Let's do so to simplify parsing. - try: - src = __s.replace("\r\n", "\n") - except (AttributeError, TypeError): - raise TypeError( - f"Expected str object, not '{type(__s).__qualname__}'" - ) from None - pos = 0 - out = Output() - header: Key = () - parse_float = make_safe_parse_float(parse_float) - - # Parse one statement at a time - # (typically means one line in TOML source) - while True: - # 1. Skip line leading whitespace - pos = skip_chars(src, pos, TOML_WS) - - # 2. Parse rules. Expect one of the following: - # - end of file - # - end of line - # - comment - # - key/value pair - # - append dict to list (and move to its namespace) - # - create dict (and move to its namespace) - # Skip trailing whitespace when applicable. - try: - char = src[pos] - except IndexError: - break - if char == "\n": - pos += 1 - continue - if char in KEY_INITIAL_CHARS: - pos = key_value_rule(src, pos, out, header, parse_float) - pos = skip_chars(src, pos, TOML_WS) - elif char == "[": - try: - second_char: str | None = src[pos + 1] - except IndexError: - second_char = None - out.flags.finalize_pending() - if second_char == "[": - pos, header = create_list_rule(src, pos, out) - else: - pos, header = create_dict_rule(src, pos, out) - pos = skip_chars(src, pos, TOML_WS) - elif char != "#": - raise TOMLDecodeError("Invalid statement", src, pos) - - # 3. Skip comment - pos = skip_comment(src, pos) - - # 4. Expect end of line or end of file - try: - char = src[pos] - except IndexError: - break - if char != "\n": - raise TOMLDecodeError( - "Expected newline or end of document after a statement", src, pos - ) - pos += 1 - - return out.data.dict - - -class Flags: - """Flags that map to parsed keys/namespaces.""" - - # Marks an immutable namespace (inline array or inline table). - FROZEN: Final = 0 - # Marks a nest that has been explicitly created and can no longer - # be opened using the "[table]" syntax. - EXPLICIT_NEST: Final = 1 - - def __init__(self) -> None: - self._flags: dict[str, dict[Any, Any]] = {} - self._pending_flags: set[tuple[Key, int]] = set() - - def add_pending(self, key: Key, flag: int) -> None: - self._pending_flags.add((key, flag)) - - def finalize_pending(self) -> None: - for key, flag in self._pending_flags: - self.set(key, flag, recursive=False) - self._pending_flags.clear() - - def unset_all(self, key: Key) -> None: - cont = self._flags - for k in key[:-1]: - if k not in cont: - return - cont = cont[k]["nested"] - cont.pop(key[-1], None) - - def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003 - cont = self._flags - key_parent, key_stem = key[:-1], key[-1] - for k in key_parent: - if k not in cont: - cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont = cont[k]["nested"] - if key_stem not in cont: - cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag) - - def is_(self, key: Key, flag: int) -> bool: - if not key: - return False # document root has no flags - cont = self._flags - for k in key[:-1]: - if k not in cont: - return False - inner_cont = cont[k] - if flag in inner_cont["recursive_flags"]: - return True - cont = inner_cont["nested"] - key_stem = key[-1] - if key_stem in cont: - inner_cont = cont[key_stem] - return flag in inner_cont["flags"] or flag in inner_cont["recursive_flags"] - return False - - -class NestedDict: - def __init__(self) -> None: - # The parsed content of the TOML document - self.dict: dict[str, Any] = {} - - def get_or_create_nest( - self, - key: Key, - *, - access_lists: bool = True, - ) -> dict[str, Any]: - cont: Any = self.dict - for k in key: - if k not in cont: - cont[k] = {} - cont = cont[k] - if access_lists and isinstance(cont, list): - cont = cont[-1] - if not isinstance(cont, dict): - raise KeyError("There is no nest behind this key") - return cont # type: ignore[no-any-return] - - def append_nest_to_list(self, key: Key) -> None: - cont = self.get_or_create_nest(key[:-1]) - last_key = key[-1] - if last_key in cont: - list_ = cont[last_key] - if not isinstance(list_, list): - raise KeyError("An object other than list found behind this key") - list_.append({}) - else: - cont[last_key] = [{}] - - -class Output: - def __init__(self) -> None: - self.data = NestedDict() - self.flags = Flags() - - -def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos: - try: - while src[pos] in chars: - pos += 1 - except IndexError: - pass - return pos - - -def skip_until( - src: str, - pos: Pos, - expect: str, - *, - error_on: frozenset[str], - error_on_eof: bool, -) -> Pos: - try: - new_pos = src.index(expect, pos) - except ValueError: - new_pos = len(src) - if error_on_eof: - raise TOMLDecodeError(f"Expected {expect!r}", src, new_pos) from None - - if not error_on.isdisjoint(src[pos:new_pos]): - while src[pos] not in error_on: - pos += 1 - raise TOMLDecodeError(f"Found invalid character {src[pos]!r}", src, pos) - return new_pos - - -def skip_comment(src: str, pos: Pos) -> Pos: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char == "#": - return skip_until( - src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False - ) - return pos - - -def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos: - while True: - pos_before_skip = pos - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - pos = skip_comment(src, pos) - if pos == pos_before_skip: - return pos - - -def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 1 # Skip "[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot declare {key} twice", src, pos) - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.get_or_create_nest(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]", pos): - raise TOMLDecodeError( - "Expected ']' at the end of a table declaration", src, pos - ) - return pos + 1, key - - -def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 2 # Skip "[[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - # Free the namespace now that it points to another empty list item... - out.flags.unset_all(key) - # ...but this key precisely is still prohibited from table declaration - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.append_nest_to_list(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]]", pos): - raise TOMLDecodeError( - "Expected ']]' at the end of an array declaration", src, pos - ) - return pos + 2, key - - -def key_value_rule( - src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat -) -> Pos: - pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) - key_parent, key_stem = key[:-1], key[-1] - abs_key_parent = header + key_parent - - relative_path_cont_keys = (header + key[:i] for i in range(1, len(key))) - for cont_key in relative_path_cont_keys: - # Check that dotted key syntax does not redefine an existing table - if out.flags.is_(cont_key, Flags.EXPLICIT_NEST): - raise TOMLDecodeError(f"Cannot redefine namespace {cont_key}", src, pos) - # Containers in the relative path can't be opened with the table syntax or - # dotted key/value syntax in following table sections. - out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST) - - if out.flags.is_(abs_key_parent, Flags.FROZEN): - raise TOMLDecodeError( - f"Cannot mutate immutable namespace {abs_key_parent}", src, pos - ) - - try: - nest = out.data.get_or_create_nest(abs_key_parent) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) - # Mark inline table and array namespaces recursively immutable - if isinstance(value, (dict, list)): - out.flags.set(header + key, Flags.FROZEN, recursive=True) - nest[key_stem] = value - return pos - - -def parse_key_value_pair( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, Key, Any]: - pos, key = parse_key(src, pos) - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != "=": - raise TOMLDecodeError("Expected '=' after a key in a key/value pair", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, value = parse_value(src, pos, parse_float, nest_lvl) - return pos, key, value - - -def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]: - pos, key_part = parse_key_part(src, pos) - key: Key = (key_part,) - pos = skip_chars(src, pos, TOML_WS) - while True: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != ".": - return pos, key - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, key_part = parse_key_part(src, pos) - key += (key_part,) - pos = skip_chars(src, pos, TOML_WS) - - -def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char in BARE_KEY_CHARS: - start_pos = pos - pos = skip_chars(src, pos, BARE_KEY_CHARS) - return pos, src[start_pos:pos] - if char == "'": - return parse_literal_str(src, pos) - if char == '"': - return parse_one_line_basic_str(src, pos) - raise TOMLDecodeError("Invalid initial character for a key part", src, pos) - - -def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 - return parse_basic_str(src, pos, multiline=False) - - -def parse_array( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, list[Any]]: - pos += 1 - array: list[Any] = [] - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - while True: - pos, val = parse_value(src, pos, parse_float, nest_lvl) - array.append(val) - pos = skip_comments_and_array_ws(src, pos) - - c = src[pos : pos + 1] - if c == "]": - return pos + 1, array - if c != ",": - raise TOMLDecodeError("Unclosed array", src, pos) - pos += 1 - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - - -def parse_inline_table( - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, dict[str, Any]]: - pos += 1 - nested_dict = NestedDict() - flags = Flags() - - pos = skip_chars(src, pos, TOML_WS) - if src.startswith("}", pos): - return pos + 1, nested_dict.dict - while True: - pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl) - key_parent, key_stem = key[:-1], key[-1] - if flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - try: - nest = nested_dict.get_or_create_nest(key_parent, access_lists=False) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError(f"Duplicate inline table key {key_stem!r}", src, pos) - nest[key_stem] = value - pos = skip_chars(src, pos, TOML_WS) - c = src[pos : pos + 1] - if c == "}": - return pos + 1, nested_dict.dict - if c != ",": - raise TOMLDecodeError("Unclosed inline table", src, pos) - if isinstance(value, (dict, list)): - flags.set(key, Flags.FROZEN, recursive=True) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - - -def parse_basic_str_escape( - src: str, pos: Pos, *, multiline: bool = False -) -> tuple[Pos, str]: - escape_id = src[pos : pos + 2] - pos += 2 - if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}: - # Skip whitespace until next non-whitespace character or end of - # the doc. Error if non-whitespace is found before newline. - if escape_id != "\\\n": - pos = skip_chars(src, pos, TOML_WS) - try: - char = src[pos] - except IndexError: - return pos, "" - if char != "\n": - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - return pos, "" - if escape_id == "\\u": - return parse_hex_char(src, pos, 4) - if escape_id == "\\U": - return parse_hex_char(src, pos, 8) - try: - return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id] - except KeyError: - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) from None - - -def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]: - return parse_basic_str_escape(src, pos, multiline=True) - - -def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]: - hex_str = src[pos : pos + hex_len] - if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str): - raise TOMLDecodeError("Invalid hex value", src, pos) - pos += hex_len - hex_int = int(hex_str, 16) - if not is_unicode_scalar_value(hex_int): - raise TOMLDecodeError( - "Escaped character is not a Unicode scalar value", src, pos - ) - return pos, chr(hex_int) - - -def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 # Skip starting apostrophe - start_pos = pos - pos = skip_until( - src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True - ) - return pos + 1, src[start_pos:pos] # Skip ending apostrophe - - -def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]: - pos += 3 - if src.startswith("\n", pos): - pos += 1 - - if literal: - delim = "'" - end_pos = skip_until( - src, - pos, - "'''", - error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS, - error_on_eof=True, - ) - result = src[pos:end_pos] - pos = end_pos + 3 - else: - delim = '"' - pos, result = parse_basic_str(src, pos, multiline=True) - - # Add at maximum two extra apostrophes/quotes if the end sequence - # is 4 or 5 chars long instead of just 3. - if not src.startswith(delim, pos): - return pos, result - pos += 1 - if not src.startswith(delim, pos): - return pos, result + delim - pos += 1 - return pos, result + (delim * 2) - - -def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]: - if multiline: - error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape_multiline - else: - error_on = ILLEGAL_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape - result = "" - start_pos = pos - while True: - try: - char = src[pos] - except IndexError: - raise TOMLDecodeError("Unterminated string", src, pos) from None - if char == '"': - if not multiline: - return pos + 1, result + src[start_pos:pos] - if src.startswith('"""', pos): - return pos + 3, result + src[start_pos:pos] - pos += 1 - continue - if char == "\\": - result += src[start_pos:pos] - pos, parsed_escape = parse_escapes(src, pos) - result += parsed_escape - start_pos = pos - continue - if char in error_on: - raise TOMLDecodeError(f"Illegal character {char!r}", src, pos) - pos += 1 - - -def parse_value( # noqa: C901 - src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int -) -> tuple[Pos, Any]: - if nest_lvl > MAX_INLINE_NESTING: - # Pure Python should have raised RecursionError already. - # This ensures mypyc binaries eventually do the same. - raise RecursionError( # pragma: no cover - "TOML inline arrays/tables are nested more than the allowed" - f" {MAX_INLINE_NESTING} levels" - ) - - try: - char: str | None = src[pos] - except IndexError: - char = None - - # IMPORTANT: order conditions based on speed of checking and likelihood - - # Basic strings - if char == '"': - if src.startswith('"""', pos): - return parse_multiline_str(src, pos, literal=False) - return parse_one_line_basic_str(src, pos) - - # Literal strings - if char == "'": - if src.startswith("'''", pos): - return parse_multiline_str(src, pos, literal=True) - return parse_literal_str(src, pos) - - # Booleans - if char == "t": - if src.startswith("true", pos): - return pos + 4, True - if char == "f": - if src.startswith("false", pos): - return pos + 5, False - - # Arrays - if char == "[": - return parse_array(src, pos, parse_float, nest_lvl + 1) - - # Inline tables - if char == "{": - return parse_inline_table(src, pos, parse_float, nest_lvl + 1) - - # Dates and times - datetime_match = RE_DATETIME.match(src, pos) - if datetime_match: - try: - datetime_obj = match_to_datetime(datetime_match) - except ValueError as e: - raise TOMLDecodeError("Invalid date or datetime", src, pos) from e - return datetime_match.end(), datetime_obj - localtime_match = RE_LOCALTIME.match(src, pos) - if localtime_match: - return localtime_match.end(), match_to_localtime(localtime_match) - - # Integers and "normal" floats. - # The regex will greedily match any type starting with a decimal - # char, so needs to be located after handling of dates and times. - number_match = RE_NUMBER.match(src, pos) - if number_match: - return number_match.end(), match_to_number(number_match, parse_float) - - # Special floats - first_three = src[pos : pos + 3] - if first_three in {"inf", "nan"}: - return pos + 3, parse_float(first_three) - first_four = src[pos : pos + 4] - if first_four in {"-inf", "+inf", "-nan", "+nan"}: - return pos + 4, parse_float(first_four) - - raise TOMLDecodeError("Invalid value", src, pos) - - -def is_unicode_scalar_value(codepoint: int) -> bool: - return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111) - - -def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat: - """A decorator to make `parse_float` safe. - - `parse_float` must not return dicts or lists, because these types - would be mixed with parsed TOML tables and arrays, thus confusing - the parser. The returned decorated callable raises `ValueError` - instead of returning illegal types. - """ - # The default `float` callable never returns illegal types. Optimize it. - if parse_float is float: - return float - - def safe_parse_float(float_str: str) -> Any: - float_value = parse_float(float_str) - if isinstance(float_value, (dict, list)): - raise ValueError("parse_float must not return dicts or lists") - return float_value - - return safe_parse_float diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_re.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_re.py deleted file mode 100644 index c159dcfae..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_re.py +++ /dev/null @@ -1,115 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -from datetime import date, datetime, time, timedelta, timezone, tzinfo -from functools import lru_cache -import re - -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Any, Final - - from ._types import ParseFloat - -# E.g. -# - 00:32:00.999999 -# - 00:32:00 -_TIME_RE_STR: Final = ( - r"([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:\.([0-9]{1,6})[0-9]*)?" -) - -RE_NUMBER: Final = re.compile( - r""" -0 -(?: - x[0-9A-Fa-f](?:_?[0-9A-Fa-f])* # hex - | - b[01](?:_?[01])* # bin - | - o[0-7](?:_?[0-7])* # oct -) -| -[+-]?(?:0|[1-9](?:_?[0-9])*) # dec, integer part -(?P<floatpart> - (?:\.[0-9](?:_?[0-9])*)? # optional fractional part - (?:[eE][+-]?[0-9](?:_?[0-9])*)? # optional exponent part -) -""", - flags=re.VERBOSE, -) -RE_LOCALTIME: Final = re.compile(_TIME_RE_STR) -RE_DATETIME: Final = re.compile( - rf""" -([0-9]{{4}})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) # date, e.g. 1988-10-27 -(?: - [Tt ] - {_TIME_RE_STR} - (?:([Zz])|([+-])([01][0-9]|2[0-3]):([0-5][0-9]))? # optional time offset -)? -""", - flags=re.VERBOSE, -) - - -def match_to_datetime(match: re.Match[str]) -> datetime | date: - """Convert a `RE_DATETIME` match to `datetime.datetime` or `datetime.date`. - - Raises ValueError if the match does not correspond to a valid date - or datetime. - """ - ( - year_str, - month_str, - day_str, - hour_str, - minute_str, - sec_str, - micros_str, - zulu_time, - offset_sign_str, - offset_hour_str, - offset_minute_str, - ) = match.groups() - year, month, day = int(year_str), int(month_str), int(day_str) - if hour_str is None: - return date(year, month, day) - hour, minute, sec = int(hour_str), int(minute_str), int(sec_str) - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - if offset_sign_str: - tz: tzinfo | None = cached_tz( - offset_hour_str, offset_minute_str, offset_sign_str - ) - elif zulu_time: - tz = timezone.utc - else: # local date-time - tz = None - return datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz) - - -# No need to limit cache size. This is only ever called on input -# that matched RE_DATETIME, so there is an implicit bound of -# 24 (hours) * 60 (minutes) * 2 (offset direction) = 2880. -@lru_cache(maxsize=None) -def cached_tz(hour_str: str, minute_str: str, sign_str: str) -> timezone: - sign = 1 if sign_str == "+" else -1 - return timezone( - timedelta( - hours=sign * int(hour_str), - minutes=sign * int(minute_str), - ) - ) - - -def match_to_localtime(match: re.Match[str]) -> time: - hour_str, minute_str, sec_str, micros_str = match.groups() - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - return time(int(hour_str), int(minute_str), int(sec_str), micros) - - -def match_to_number(match: re.Match[str], parse_float: ParseFloat) -> Any: - if match.group("floatpart"): - return parse_float(match.group()) - return int(match.group(), 0) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_types.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_types.py deleted file mode 100644 index d949412e0..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/_types.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from typing import Any, Callable, Tuple - -# Type annotations -ParseFloat = Callable[[str], Any] -Key = Tuple[str, ...] -Pos = int diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/py.typed deleted file mode 100644 index 7632ecf77..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/LICENSE deleted file mode 100644 index e859590f8..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Taneli Hukkinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__init__.py deleted file mode 100644 index 6349c1f05..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -__all__ = ("dumps", "dump") -__version__ = "1.2.0" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT - -from pip._vendor.tomli_w._writer import dump, dumps diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index d7c892710d4afa497f213e7cf87c10a173d7eab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmXw#ze)o^5XSfZgoFgsr3z?ab;w<ECWsNSv56oehjxp@CAa9ByW3@VlNhVCK1xa- zMXPYFg_c5Iz_}0yc4mI;&Nm->)ZD8RjL-KUzQX!d!hhJiX0wmYl0>c{k!7q064_Vw z&@s-?HSPh4oI~POib^ugq<*c0!Ew;_?7}Tsl^Qpmy{*bYz?W5kI86bH2EdFd%|(vT zmRttNc_LI`M3!=x2QXLMFtwfBYOKhnbXB}vp3!@a!!%Bq3I~HOoeMRgQi*3aHkyu8 zF-=CXW<Jlk!K4i?Wy%lf?ZP~XychPN4=<-DaK|#4#)g5(B)#S%s&S_;<MAYZWSXL{ z&dyh7=c@xyssaRZQPj>ekxWx|p~|nc@aPt%U&penb-lf;uA8l8<D2w8NKe)9<`3I; BY%~A> diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/__pycache__/_writer.cpython-314.pyc deleted file mode 100644 index c5dc409d3d3d3fddae63800aecdc30e73b4b56ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13183 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/_writer.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/_writer.py deleted file mode 100644 index b1acd3f26..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +++ /dev/null @@ -1,229 +0,0 @@ -from __future__ import annotations - -from collections.abc import Mapping -from datetime import date, datetime, time -from types import MappingProxyType - -TYPE_CHECKING = False -if TYPE_CHECKING: - from collections.abc import Generator - from decimal import Decimal - from typing import IO, Any, Final - -ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127)) -ILLEGAL_BASIC_STR_CHARS = frozenset('"\\') | ASCII_CTRL - frozenset("\t") -BARE_KEY_CHARS = frozenset( - "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-_" -) -ARRAY_TYPES = (list, tuple) -MAX_LINE_LENGTH = 100 - -COMPACT_ESCAPES = MappingProxyType( - { - "\u0008": "\\b", # backspace - "\u000A": "\\n", # linefeed - "\u000C": "\\f", # form feed - "\u000D": "\\r", # carriage return - "\u0022": '\\"', # quote - "\u005C": "\\\\", # backslash - } -) - - -class Context: - def __init__(self, allow_multiline: bool, indent: int): - if indent < 0: - raise ValueError("Indent width must be non-negative") - self.allow_multiline: Final = allow_multiline - # cache rendered inline tables (mapping from object id to rendered inline table) - self.inline_table_cache: Final[dict[int, str]] = {} - self.indent_str: Final = " " * indent - - -def dump( - obj: Mapping[str, Any], - fp: IO[bytes], - /, - *, - multiline_strings: bool = False, - indent: int = 4, -) -> None: - ctx = Context(multiline_strings, indent) - for chunk in gen_table_chunks(obj, ctx, name=""): - fp.write(chunk.encode()) - - -def dumps( - obj: Mapping[str, Any], /, *, multiline_strings: bool = False, indent: int = 4 -) -> str: - ctx = Context(multiline_strings, indent) - return "".join(gen_table_chunks(obj, ctx, name="")) - - -def gen_table_chunks( - table: Mapping[str, Any], - ctx: Context, - *, - name: str, - inside_aot: bool = False, -) -> Generator[str, None, None]: - yielded = False - literals = [] - tables: list[tuple[str, Any, bool]] = [] # => [(key, value, inside_aot)] - for k, v in table.items(): - if isinstance(v, Mapping): - tables.append((k, v, False)) - elif is_aot(v) and not all(is_suitable_inline_table(t, ctx) for t in v): - tables.extend((k, t, True) for t in v) - else: - literals.append((k, v)) - - if inside_aot or name and (literals or not tables): - yielded = True - yield f"[[{name}]]\n" if inside_aot else f"[{name}]\n" - - if literals: - yielded = True - for k, v in literals: - yield f"{format_key_part(k)} = {format_literal(v, ctx)}\n" - - for k, v, in_aot in tables: - if yielded: - yield "\n" - else: - yielded = True - key_part = format_key_part(k) - display_name = f"{name}.{key_part}" if name else key_part - yield from gen_table_chunks(v, ctx, name=display_name, inside_aot=in_aot) - - -def format_literal(obj: object, ctx: Context, *, nest_level: int = 0) -> str: - if isinstance(obj, bool): - return "true" if obj else "false" - if isinstance(obj, (int, float, date, datetime)): - return str(obj) - if isinstance(obj, time): - if obj.tzinfo: - raise ValueError("TOML does not support offset times") - return str(obj) - if isinstance(obj, str): - return format_string(obj, allow_multiline=ctx.allow_multiline) - if isinstance(obj, ARRAY_TYPES): - return format_inline_array(obj, ctx, nest_level) - if isinstance(obj, Mapping): - return format_inline_table(obj, ctx) - - # Lazy import to improve module import time - from decimal import Decimal - - if isinstance(obj, Decimal): - return format_decimal(obj) - raise TypeError( - f"Object of type '{type(obj).__qualname__}' is not TOML serializable" - ) - - -def format_decimal(obj: Decimal) -> str: - if obj.is_nan(): - return "nan" - if obj.is_infinite(): - return "-inf" if obj.is_signed() else "inf" - dec_str = str(obj).lower() - return dec_str if "." in dec_str or "e" in dec_str else dec_str + ".0" - - -def format_inline_table(obj: Mapping, ctx: Context) -> str: - # check cache first - obj_id = id(obj) - if obj_id in ctx.inline_table_cache: - return ctx.inline_table_cache[obj_id] - - if not obj: - rendered = "{}" - else: - rendered = ( - "{ " - + ", ".join( - f"{format_key_part(k)} = {format_literal(v, ctx)}" - for k, v in obj.items() - ) - + " }" - ) - ctx.inline_table_cache[obj_id] = rendered - return rendered - - -def format_inline_array(obj: tuple | list, ctx: Context, nest_level: int) -> str: - if not obj: - return "[]" - item_indent = ctx.indent_str * (1 + nest_level) - closing_bracket_indent = ctx.indent_str * nest_level - return ( - "[\n" - + ",\n".join( - item_indent + format_literal(item, ctx, nest_level=nest_level + 1) - for item in obj - ) - + f",\n{closing_bracket_indent}]" - ) - - -def format_key_part(part: str) -> str: - try: - only_bare_key_chars = BARE_KEY_CHARS.issuperset(part) - except TypeError: - raise TypeError( - f"Invalid mapping key '{part}' of type '{type(part).__qualname__}'." - " A string is required." - ) from None - - if part and only_bare_key_chars: - return part - return format_string(part, allow_multiline=False) - - -def format_string(s: str, *, allow_multiline: bool) -> str: - do_multiline = allow_multiline and "\n" in s - if do_multiline: - result = '"""\n' - s = s.replace("\r\n", "\n") - else: - result = '"' - - pos = seq_start = 0 - while True: - try: - char = s[pos] - except IndexError: - result += s[seq_start:pos] - if do_multiline: - return result + '"""' - return result + '"' - if char in ILLEGAL_BASIC_STR_CHARS: - result += s[seq_start:pos] - if char in COMPACT_ESCAPES: - if do_multiline and char == "\n": - result += "\n" - else: - result += COMPACT_ESCAPES[char] - else: - result += "\\u" + hex(ord(char))[2:].rjust(4, "0") - seq_start = pos + 1 - pos += 1 - - -def is_aot(obj: Any) -> bool: - """Decides if an object behaves as an array of tables (i.e. a nonempty list - of dicts).""" - return bool( - isinstance(obj, ARRAY_TYPES) - and obj - and all(isinstance(v, Mapping) for v in obj) - ) - - -def is_suitable_inline_table(obj: Mapping, ctx: Context) -> bool: - """Use heuristics to decide if the inline-style representation is a good - choice for a given table.""" - rendered_inline = f"{ctx.indent_str}{format_inline_table(obj, ctx)}," - return len(rendered_inline) <= MAX_LINE_LENGTH and "\n" not in rendered_inline diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/py.typed deleted file mode 100644 index 7632ecf77..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/tomli_w/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/LICENSE b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/LICENSE deleted file mode 100644 index 7ec568c11..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2022 Seth Michael Larson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__init__.py deleted file mode 100644 index 0166459b4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -"""Verify certificates using native system trust stores""" - -import sys as _sys - -if _sys.version_info < (3, 10): - raise ImportError("truststore requires Python 3.10 or later") - -# Detect Python runtimes which don't implement SSLObject.get_unverified_chain() API -# This API only became public in Python 3.13 but was available in CPython and PyPy since 3.10. -if _sys.version_info < (3, 13) and _sys.implementation.name not in ("cpython", "pypy"): - try: - import ssl as _ssl - except ImportError: - raise ImportError("truststore requires the 'ssl' module") - else: - _sslmem = _ssl.MemoryBIO() - _sslobj = _ssl.create_default_context().wrap_bio( - _sslmem, - _sslmem, - ) - try: - while not hasattr(_sslobj, "get_unverified_chain"): - _sslobj = _sslobj._sslobj # type: ignore[attr-defined] - except AttributeError: - raise ImportError( - "truststore requires peer certificate chain APIs to be available" - ) from None - - del _ssl, _sslobj, _sslmem # noqa: F821 - -from ._api import SSLContext, extract_from_ssl, inject_into_ssl # noqa: E402 - -del _api, _sys # type: ignore[name-defined] # noqa: F821 - -__all__ = ["SSLContext", "inject_into_ssl", "extract_from_ssl"] -__version__ = "0.10.4" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 3ccef89698871e3b5dfe1d5d35ae655c62414d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1505 zcmZ`(&rcgi6rTNIyezCSYhnT^$x=rmR)r0UMIp41#i|5K+PF^3p|Z1D+XJ4&`=hgC zh&e?)ap)n+rRk}?_SpZRP5%J{kqp}lY7Q+oOXN_shxV<FOO&Le)!Ugj-}m14-puZM z5k*EY_J90?Tni!eB3Sf>cs4oxi9_fS$|HvEp**+7F}}#>`g*YQcV3!T5vuef^bRVD zlPJ$;fEkP`_dksO4x`>-@VSnbE~962gT2}LJ1;Ll+{zaL>rz)!m`Oz`2iadAlPGiM zVlp7&ukRytj>wI@xm%Qra)$5vnQ{pgBa^78<b|GZ>Ws2E)Tu$qjlUU#DYqsNDAgrh z(dBzwzHcqMI?RSwRi>`SSnLYYqdK2L`GGqe8_9>+g*=x)8Y&L;p~^rI_e!^)Vy~Zh zuF4a%C`=&20Zs%Q^zJ`gsE4a^JyddVC$o+z*=T5GOc~iAWs_k~t9!)W)NGTHEv$JB zk6}w=wC*v@V-CgMCp*_V%g#!p_{%y0ua;}Ds$*-{Q?oOgL$w;jqW;JxW=7rK3epf< zG0Ihw*gMN_<GUEsSA}RDtfuGIJdHV832Ww-Nor=PhIg*MEdZ-xZOZd%Q<~*e>NT7c zeEII(+gZnE_#yM7V5nJU#s+mP191KjvF~GW5SuxHW2bKh#HTVz{zQNyI|=SylBdD7 zK2bVzKU{V@W%{Dqa2rX120#j*38KNbk&OFc!>BlA!|(-Yoi7@J9fbNl;@FUB!|?~! zEZ3pzBT60WM~LOtu!U^~{dR0$v`q^G7vupKZ2!mDa%f{^?GA(nhlMRaUZxn@YgF)t zS+6mpd{&~gO-<J*5vL1vO85P6)$~lpAdwE1l<Ew36N`rFlCJzfd8dXzyjiP(_yNP{ zX*Pa9rvO0y*V!9|&poK5U{)}lU09eYY&-Np!KF^nMz2t=IrU1(^zbyX2?OIXh=%F( zY@vHOuFqzSjPY=O&iD*N*+B`+atpUfso)WYr(LuBz}&=M!6j}Q1lSdarq7Q$Z9oGF zGmMnm@TCvBr@TZbL0s@t@%{nR7C4SOLN{I@^;ihEgpoaA<ni`%;qsAup&7q<AnQ$0 zZ%as&UfKIT(@M<kCFWX*#l6I0GrRsgvEJs@P~ul<9I&y`Z&FWE2kN`K;X^gvQm6OT z=>s+0Qs?*7`NP2&Jf|TcChvyZQeXeYqxi(r&F0jHt@zS@eCcp}^1Jl6=_lc~fJT?w z5u^-1o_hNJ?`U}sEgy^0?$zJq<wxPeNc^jTKigv{dif<1Ac#6~82$8A;A4^F*l0V% zD;L`W`2TK?qQTLZhzqT7N0G7S_|1ce-jsBx8$5q`m!StgD`Hkb&&0^e0(utf*oEP& LEc~KGvlGI<*1?Q^ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-314.pyc deleted file mode 100644 index 023f5142eb743da66b8c16fb790487c4fc8a3672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24656 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 Q@OXb&O#Z=wQ`gx44+Weuo&W#< diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-314.pyc deleted file mode 100644 index a23e81b9d9f3255296ebb367f7f7eab5253a23c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21103 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-314.pyc deleted file mode 100644 index 22e280c2b911d0103694677527c92b335cb0de8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2902 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-314.pyc deleted file mode 100644 index 54e3858696b91dc77e1e0106740ee5ce016a7ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1580 zcmZ`3O>Y}T^o@7DN$tdKAt6=jG-@J}I*_<&Bgh9-NbLnF3GTK84(p6I_B7eX-d)X% zOMR(~gv7bMlq*st#0ii%@H6c2k+M`G5*K<)YNT-F&Dcp6DxP-VoA<f%zV?kwe+m$G zzWdX=YXbbCm?J=5L;D9LE;PVS4uQ;E1_|q6llO@vnkHmIQ$rd>Qt0h^#fVH6t&31h z7L#*{j#%~-F~&9-1*AmNMBz-#rF$&A^0LfM%zq3}wg9piQ>JVp(<^4NPo|Jd+r|*s z<`7iQ$bOrQL(Y1xLaatTrLZoy0>4C%Rj&dJ0tUWq2T=poU_CMa83spL7H*O)ViTq5 zK%sm2BVJKE5z`+PEM{OEwwX8Z8p-F%J4y>tp{2l=?7ocB_Zau?)M+&+v&iC1*0{f# zGa>_xqSUQh%h$VxsWol5f_6C)S$6_nb)`^Aj75*GFFGFz#)adS8J}HPxa@oq@NFmL z!Ch98!YNgPT6x12Y})fZiAYGdQek|0)+y+UT%DbxbM*fFTl6-oh80&bDyyNh>}@#0 zlWaP4OWW=y6He%bd3ule<$&iUuL&t+z*(MlbHcd36f<Ex>Z8>4{XnWvlxOgsS$xGT zq6Qp-K~~6t#?Q_UJihSo!oHzI&t_)7@xS&v%wF=;K~hQE=me#B=~bC^({AW^u?EDg zlp8`J*`aa#5jmQ}QLq7<LsZp=X~4Zr&vz?S)I!GTNdtHfx<@^f3MMJdCAgX!EfngL z6BE2&8DzCS)?qBxafA7*Xrjw-4i63Z%Yx+St~u2*r*_RNE%VB^OTU=Q{4^^6HKNDa zKGJS4k7yn@>7)h=XjL9nUviGCQBX1d1CB~T!<)lLCxE4dO(u|CkBz;Kh<^!;c<h6A z31x@1Gq|d7G)_+@B33zCuK75Yv{Z40h{pcMs8erklQX09RBcGvlU|^j(VZk@1f`KB z>!IgwM!g?|9ere?1lNN1;Wautp}V2SP9wD^;wqvBe4hF=b(jURv;&Jz*1n=&((iBo z{Q6=G77s>%qz}h{<aXfFlN&9#^kN((x*xgId<fn7DMYxOb-`5&x%zWP11D2+GA~h5 zXT;Aci;Ra$#j4E5b-*Md(|4<kzosG#D!mnKs72NDq3?^isL$zK-s?<O?>qR9s8!fC zei1b~p)EZ8y>Adgeuq>e^&8;Rzuybz&Od(e@Iey>ejOQWj=$YpSov{ewF$%R45r<- yFu^^;+BF7S#^A0o+%ks0@P0BTpXT0eniEf_W?JUtUM{cC*P7<!p`~_ESK%LU&12&L diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-314.pyc deleted file mode 100644 index d6050408b498b0f9fc6ac608e5fa99efd087589c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17453 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_api.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_api.py deleted file mode 100644 index a54ff9f22..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_api.py +++ /dev/null @@ -1,341 +0,0 @@ -import contextlib -import os -import platform -import socket -import ssl -import sys -import threading -import typing - -import _ssl - -from ._ssl_constants import ( - _original_SSLContext, - _original_super_SSLContext, - _truststore_SSLContext_dunder_class, - _truststore_SSLContext_super_class, -) - -if platform.system() == "Windows": - from ._windows import _configure_context, _verify_peercerts_impl -elif platform.system() == "Darwin": - from ._macos import _configure_context, _verify_peercerts_impl -else: - from ._openssl import _configure_context, _verify_peercerts_impl - -if typing.TYPE_CHECKING: - from typing_extensions import Buffer - -# From typeshed/stdlib/ssl.pyi -_StrOrBytesPath: typing.TypeAlias = str | bytes | os.PathLike[str] | os.PathLike[bytes] -_PasswordType: typing.TypeAlias = str | bytes | typing.Callable[[], str | bytes] - - -def inject_into_ssl() -> None: - """Injects the :class:`truststore.SSLContext` into the ``ssl`` - module by replacing :class:`ssl.SSLContext`. - """ - setattr(ssl, "SSLContext", SSLContext) - # urllib3 holds on to its own reference of ssl.SSLContext - # so we need to replace that reference too. - try: - import pip._vendor.urllib3.util.ssl_ as urllib3_ssl - - setattr(urllib3_ssl, "SSLContext", SSLContext) - except ImportError: - pass - - # requests starting with 2.32.0 added a preloaded SSL context to improve concurrent performance; - # this unfortunately leads to a RecursionError, which can be avoided by patching the preloaded SSL context with - # the truststore patched instance - # also see https://github.com/psf/requests/pull/6667 - try: - from pip._vendor.requests import adapters as requests_adapters - - preloaded_context = getattr(requests_adapters, "_preloaded_ssl_context", None) - if preloaded_context is not None: - setattr( - requests_adapters, - "_preloaded_ssl_context", - SSLContext(ssl.PROTOCOL_TLS_CLIENT), - ) - except ImportError: - pass - - -def extract_from_ssl() -> None: - """Restores the :class:`ssl.SSLContext` class to its original state""" - setattr(ssl, "SSLContext", _original_SSLContext) - try: - import pip._vendor.urllib3.util.ssl_ as urllib3_ssl - - urllib3_ssl.SSLContext = _original_SSLContext - except ImportError: - pass - - -class SSLContext(_truststore_SSLContext_super_class): # type: ignore[misc] - """SSLContext API that uses system certificates on all platforms""" - - @property # type: ignore[misc] - def __class__(self) -> type: - # Dirty hack to get around isinstance() checks - # for ssl.SSLContext instances in aiohttp/trustme - # when using non-CPython implementations. - return _truststore_SSLContext_dunder_class or SSLContext - - def __init__(self, protocol: int = None) -> None: # type: ignore[assignment] - self._ctx = _original_SSLContext(protocol) - self._ctx_lock = threading.Lock() - - class TruststoreSSLObject(ssl.SSLObject): - # This object exists because wrap_bio() doesn't - # immediately do the handshake so we need to do - # certificate verifications after SSLObject.do_handshake() - - def do_handshake(self) -> None: - ret = super().do_handshake() - _verify_peercerts(self, server_hostname=self.server_hostname) - return ret - - self._ctx.sslobject_class = TruststoreSSLObject - - def wrap_socket( - self, - sock: socket.socket, - server_side: bool = False, - do_handshake_on_connect: bool = True, - suppress_ragged_eofs: bool = True, - server_hostname: str | None = None, - session: ssl.SSLSession | None = None, - ) -> ssl.SSLSocket: - - # We need to lock around the .__enter__() - # but we don't need to lock within the - # context manager, so we need to expand the - # syntactic sugar of the `with` statement. - with contextlib.ExitStack() as stack: - with self._ctx_lock: - stack.enter_context(_configure_context(self._ctx)) - - ssl_sock = self._ctx.wrap_socket( - sock, - server_side=server_side, - server_hostname=server_hostname, - do_handshake_on_connect=do_handshake_on_connect, - suppress_ragged_eofs=suppress_ragged_eofs, - session=session, - ) - try: - _verify_peercerts(ssl_sock, server_hostname=server_hostname) - except Exception: - ssl_sock.close() - raise - return ssl_sock - - def wrap_bio( - self, - incoming: ssl.MemoryBIO, - outgoing: ssl.MemoryBIO, - server_side: bool = False, - server_hostname: str | None = None, - session: ssl.SSLSession | None = None, - ) -> ssl.SSLObject: - with _configure_context(self._ctx): - ssl_obj = self._ctx.wrap_bio( - incoming, - outgoing, - server_hostname=server_hostname, - server_side=server_side, - session=session, - ) - return ssl_obj - - def load_verify_locations( - self, - cafile: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None, - capath: str | bytes | os.PathLike[str] | os.PathLike[bytes] | None = None, - cadata: typing.Union[str, "Buffer", None] = None, - ) -> None: - return self._ctx.load_verify_locations( - cafile=cafile, capath=capath, cadata=cadata - ) - - def load_cert_chain( - self, - certfile: _StrOrBytesPath, - keyfile: _StrOrBytesPath | None = None, - password: _PasswordType | None = None, - ) -> None: - return self._ctx.load_cert_chain( - certfile=certfile, keyfile=keyfile, password=password - ) - - def load_default_certs( - self, purpose: ssl.Purpose = ssl.Purpose.SERVER_AUTH - ) -> None: - return self._ctx.load_default_certs(purpose) - - def set_alpn_protocols(self, alpn_protocols: typing.Iterable[str]) -> None: - return self._ctx.set_alpn_protocols(alpn_protocols) - - def set_npn_protocols(self, npn_protocols: typing.Iterable[str]) -> None: - return self._ctx.set_npn_protocols(npn_protocols) - - def set_ciphers(self, __cipherlist: str) -> None: - return self._ctx.set_ciphers(__cipherlist) - - def get_ciphers(self) -> typing.Any: - return self._ctx.get_ciphers() - - def session_stats(self) -> dict[str, int]: - return self._ctx.session_stats() - - def cert_store_stats(self) -> dict[str, int]: - raise NotImplementedError() - - def set_default_verify_paths(self) -> None: - self._ctx.set_default_verify_paths() - - @typing.overload - def get_ca_certs( - self, binary_form: typing.Literal[False] = ... - ) -> list[typing.Any]: ... - - @typing.overload - def get_ca_certs(self, binary_form: typing.Literal[True] = ...) -> list[bytes]: ... - - @typing.overload - def get_ca_certs(self, binary_form: bool = ...) -> typing.Any: ... - - def get_ca_certs(self, binary_form: bool = False) -> list[typing.Any] | list[bytes]: - raise NotImplementedError() - - @property - def check_hostname(self) -> bool: - return self._ctx.check_hostname - - @check_hostname.setter - def check_hostname(self, value: bool) -> None: - self._ctx.check_hostname = value - - @property - def hostname_checks_common_name(self) -> bool: - return self._ctx.hostname_checks_common_name - - @hostname_checks_common_name.setter - def hostname_checks_common_name(self, value: bool) -> None: - self._ctx.hostname_checks_common_name = value - - @property - def keylog_filename(self) -> str: - return self._ctx.keylog_filename - - @keylog_filename.setter - def keylog_filename(self, value: str) -> None: - self._ctx.keylog_filename = value - - @property - def maximum_version(self) -> ssl.TLSVersion: - return self._ctx.maximum_version - - @maximum_version.setter - def maximum_version(self, value: ssl.TLSVersion) -> None: - _original_super_SSLContext.maximum_version.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def minimum_version(self) -> ssl.TLSVersion: - return self._ctx.minimum_version - - @minimum_version.setter - def minimum_version(self, value: ssl.TLSVersion) -> None: - _original_super_SSLContext.minimum_version.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def options(self) -> ssl.Options: - return self._ctx.options - - @options.setter - def options(self, value: ssl.Options) -> None: - _original_super_SSLContext.options.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def post_handshake_auth(self) -> bool: - return self._ctx.post_handshake_auth - - @post_handshake_auth.setter - def post_handshake_auth(self, value: bool) -> None: - self._ctx.post_handshake_auth = value - - @property - def protocol(self) -> ssl._SSLMethod: - return self._ctx.protocol - - @property - def security_level(self) -> int: - return self._ctx.security_level - - @property - def verify_flags(self) -> ssl.VerifyFlags: - return self._ctx.verify_flags - - @verify_flags.setter - def verify_flags(self, value: ssl.VerifyFlags) -> None: - _original_super_SSLContext.verify_flags.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - @property - def verify_mode(self) -> ssl.VerifyMode: - return self._ctx.verify_mode - - @verify_mode.setter - def verify_mode(self, value: ssl.VerifyMode) -> None: - _original_super_SSLContext.verify_mode.__set__( # type: ignore[attr-defined] - self._ctx, value - ) - - -# Python 3.13+ makes get_unverified_chain() a public API that only returns DER -# encoded certificates. We detect whether we need to call public_bytes() for 3.10->3.12 -# Pre-3.13 returned None instead of an empty list from get_unverified_chain() -if sys.version_info >= (3, 13): - - def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]: - unverified_chain = sslobj.get_unverified_chain() or () - return [ - cert if isinstance(cert, bytes) else cert.public_bytes(_ssl.ENCODING_DER) - for cert in unverified_chain - ] - -else: - - def _get_unverified_chain_bytes(sslobj: ssl.SSLObject) -> list[bytes]: - unverified_chain = sslobj.get_unverified_chain() or () # type: ignore[attr-defined] - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in unverified_chain] - - -def _verify_peercerts( - sock_or_sslobj: ssl.SSLSocket | ssl.SSLObject, server_hostname: str | None -) -> None: - """ - Verifies the peer certificates from an SSLSocket or SSLObject - against the certificates in the OS trust store. - """ - sslobj: ssl.SSLObject = sock_or_sslobj # type: ignore[assignment] - try: - while not hasattr(sslobj, "get_unverified_chain"): - sslobj = sslobj._sslobj # type: ignore[attr-defined] - except AttributeError: - pass - - cert_bytes = _get_unverified_chain_bytes(sslobj) - _verify_peercerts_impl( - sock_or_sslobj.context, cert_bytes, server_hostname=server_hostname - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_macos.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_macos.py deleted file mode 100644 index 345030772..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_macos.py +++ /dev/null @@ -1,571 +0,0 @@ -import contextlib -import ctypes -import platform -import ssl -import typing -from ctypes import ( - CDLL, - POINTER, - c_bool, - c_char_p, - c_int32, - c_long, - c_uint32, - c_ulong, - c_void_p, -) -from ctypes.util import find_library - -from ._ssl_constants import _set_ssl_context_verify_mode - -_mac_version = platform.mac_ver()[0] -_mac_version_info = tuple(map(int, _mac_version.split("."))) -if _mac_version_info < (10, 8): - raise ImportError( - f"Only OS X 10.8 and newer are supported, not {_mac_version_info[0]}.{_mac_version_info[1]}" - ) - -_is_macos_version_10_14_or_later = _mac_version_info >= (10, 14) - - -def _load_cdll(name: str, macos10_16_path: str) -> CDLL: - """Loads a CDLL by name, falling back to known path on 10.16+""" - try: - # Big Sur is technically 11 but we use 10.16 due to the Big Sur - # beta being labeled as 10.16. - path: str | None - if _mac_version_info >= (10, 16): - path = macos10_16_path - else: - path = find_library(name) - if not path: - raise OSError # Caught and reraised as 'ImportError' - return CDLL(path, use_errno=True) - except OSError: - raise ImportError(f"The library {name} failed to load") from None - - -Security = _load_cdll( - "Security", "/System/Library/Frameworks/Security.framework/Security" -) -CoreFoundation = _load_cdll( - "CoreFoundation", - "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", -) - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFErrorRef = POINTER(CFError) -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFArrayCallBacks = c_void_p -CFOptionFlags = c_uint32 - -SecCertificateRef = POINTER(c_void_p) -SecPolicyRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 - -try: - Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [SecCertificateRef] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argtypes = [SecTrustRef, Boolean] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecPolicyCreateRevocation.argtypes = [CFOptionFlags] - Security.SecPolicyCreateRevocation.restype = SecPolicyRef - - Security.SecPolicyCreateSSL.argtypes = [Boolean, CFStringRef] - Security.SecPolicyCreateSSL.restype = SecPolicyRef - - Security.SecTrustCreateWithCertificates.argtypes = [ - CFTypeRef, - CFTypeRef, - POINTER(SecTrustRef), - ] - Security.SecTrustCreateWithCertificates.restype = OSStatus - - Security.SecTrustGetTrustResult.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType), - ] - Security.SecTrustGetTrustResult.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType), - ] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustRef = SecTrustRef # type: ignore[attr-defined] - Security.SecTrustResultType = SecTrustResultType # type: ignore[attr-defined] - Security.OSStatus = OSStatus # type: ignore[attr-defined] - - kSecRevocationUseAnyAvailableMethod = 3 - kSecRevocationRequirePositiveResponse = 8 - - CoreFoundation.CFRelease.argtypes = [CFTypeRef] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding, - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding, - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [CFDataRef] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.CFErrorGetCode.argtypes = [CFErrorRef] - CoreFoundation.CFErrorGetCode.restype = CFIndex - - CoreFoundation.CFErrorCopyDescription.argtypes = [CFErrorRef] - CoreFoundation.CFErrorCopyDescription.restype = CFStringRef - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( # type: ignore[attr-defined] - CoreFoundation, "kCFAllocatorDefault" - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( # type: ignore[attr-defined] - CoreFoundation, "kCFTypeArrayCallBacks" - ) - - CoreFoundation.CFTypeRef = CFTypeRef # type: ignore[attr-defined] - CoreFoundation.CFArrayRef = CFArrayRef # type: ignore[attr-defined] - CoreFoundation.CFStringRef = CFStringRef # type: ignore[attr-defined] - CoreFoundation.CFErrorRef = CFErrorRef # type: ignore[attr-defined] - -except AttributeError as e: - raise ImportError(f"Error initializing ctypes: {e}") from None - -# SecTrustEvaluateWithError is macOS 10.14+ -if _is_macos_version_10_14_or_later: - try: - Security.SecTrustEvaluateWithError.argtypes = [ - SecTrustRef, - POINTER(CFErrorRef), - ] - Security.SecTrustEvaluateWithError.restype = c_bool - except AttributeError as e: - raise ImportError(f"Error initializing ctypes: {e}") from None - - -def _handle_osstatus(result: OSStatus, _: typing.Any, args: typing.Any) -> typing.Any: - """ - Raises an error if the OSStatus value is non-zero. - """ - if int(result) == 0: - return args - - # Returns a CFString which we need to transform - # into a UTF-8 Python string. - error_message_cfstring = None - try: - error_message_cfstring = Security.SecCopyErrorMessageString(result, None) - - # First step is convert the CFString into a C string pointer. - # We try the fast no-copy way first. - error_message_cfstring_c_void_p = ctypes.cast( - error_message_cfstring, ctypes.POINTER(ctypes.c_void_p) - ) - message = CoreFoundation.CFStringGetCStringPtr( - error_message_cfstring_c_void_p, CFConst.kCFStringEncodingUTF8 - ) - - # Quoting the Apple dev docs: - # - # "A pointer to a C string or NULL if the internal - # storage of theString does not allow this to be - # returned efficiently." - # - # So we need to get our hands dirty. - if message is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - error_message_cfstring_c_void_p, - buffer, - 1024, - CFConst.kCFStringEncodingUTF8, - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - message = buffer.value - - finally: - if error_message_cfstring is not None: - CoreFoundation.CFRelease(error_message_cfstring) - - # If no message can be found for this status we come - # up with a generic one that forwards the status code. - if message is None or message == "": - message = f"SecureTransport operation returned a non-zero OSStatus: {result}" - - raise ssl.SSLError(message) - - -Security.SecTrustCreateWithCertificates.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustSetAnchorCertificates.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustSetAnchorCertificatesOnly.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustGetTrustResult.errcheck = _handle_osstatus # type: ignore[assignment] -Security.SecTrustEvaluate.errcheck = _handle_osstatus # type: ignore[assignment] - - -class CFConst: - """CoreFoundation constants""" - - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - errSecIncompleteCertRevocationCheck = -67635 - errSecHostNameMismatch = -67602 - errSecCertificateExpired = -67818 - errSecNotTrusted = -67843 - - -def _bytes_to_cf_data_ref(value: bytes) -> CFDataRef: # type: ignore[valid-type] - return CoreFoundation.CFDataCreate( # type: ignore[no-any-return] - CoreFoundation.kCFAllocatorDefault, value, len(value) - ) - - -def _bytes_to_cf_string(value: bytes) -> CFString: - """ - Given a Python binary data, create a CFString. - The string must be CFReleased by the caller. - """ - c_str = ctypes.c_char_p(value) - cf_str = CoreFoundation.CFStringCreateWithCString( - CoreFoundation.kCFAllocatorDefault, - c_str, - CFConst.kCFStringEncodingUTF8, - ) - return cf_str # type: ignore[no-any-return] - - -def _cf_string_ref_to_str(cf_string_ref: CFStringRef) -> str | None: # type: ignore[valid-type] - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - Yes, it annoys me quite a lot that this function is this complex. - """ - - string = CoreFoundation.CFStringGetCStringPtr( - cf_string_ref, CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - cf_string_ref, buffer, 1024, CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - string = buffer.value - if string is not None: - string = string.decode("utf-8") - return string # type: ignore[no-any-return] - - -def _der_certs_to_cf_cert_array(certs: list[bytes]) -> CFMutableArrayRef: # type: ignore[valid-type] - """Builds a CFArray of SecCertificateRefs from a list of DER-encoded certificates. - Responsibility of the caller to call CoreFoundation.CFRelease on the CFArray. - """ - cf_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cf_array: - raise MemoryError("Unable to allocate memory!") - - for cert_data in certs: - cf_data = None - sec_cert_ref = None - try: - cf_data = _bytes_to_cf_data_ref(cert_data) - sec_cert_ref = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, cf_data - ) - CoreFoundation.CFArrayAppendValue(cf_array, sec_cert_ref) - finally: - if cf_data: - CoreFoundation.CFRelease(cf_data) - if sec_cert_ref: - CoreFoundation.CFRelease(sec_cert_ref) - - return cf_array # type: ignore[no-any-return] - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - check_hostname = ctx.check_hostname - verify_mode = ctx.verify_mode - ctx.check_hostname = False - _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE) - try: - yield - finally: - ctx.check_hostname = check_hostname - _set_ssl_context_verify_mode(ctx, verify_mode) - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - certs = None - policies = None - trust = None - try: - # Only set a hostname on the policy if we're verifying the hostname - # on the leaf certificate. - if server_hostname is not None and ssl_context.check_hostname: - cf_str_hostname = None - try: - cf_str_hostname = _bytes_to_cf_string(server_hostname.encode("ascii")) - ssl_policy = Security.SecPolicyCreateSSL(True, cf_str_hostname) - finally: - if cf_str_hostname: - CoreFoundation.CFRelease(cf_str_hostname) - else: - ssl_policy = Security.SecPolicyCreateSSL(True, None) - - policies = ssl_policy - if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN: - # Add explicit policy requiring positive revocation checks - policies = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - CoreFoundation.CFArrayAppendValue(policies, ssl_policy) - CoreFoundation.CFRelease(ssl_policy) - revocation_policy = Security.SecPolicyCreateRevocation( - kSecRevocationUseAnyAvailableMethod - | kSecRevocationRequirePositiveResponse - ) - CoreFoundation.CFArrayAppendValue(policies, revocation_policy) - CoreFoundation.CFRelease(revocation_policy) - elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF: - raise NotImplementedError("VERIFY_CRL_CHECK_LEAF not implemented for macOS") - - certs = None - try: - certs = _der_certs_to_cf_cert_array(cert_chain) - - # Now that we have certificates loaded and a SecPolicy - # we can finally create a SecTrust object! - trust = Security.SecTrustRef() - Security.SecTrustCreateWithCertificates( - certs, policies, ctypes.byref(trust) - ) - - finally: - # The certs are now being held by SecTrust so we can - # release our handles for the array. - if certs: - CoreFoundation.CFRelease(certs) - - # If there are additional trust anchors to load we need to transform - # the list of DER-encoded certificates into a CFArray. - ctx_ca_certs_der: list[bytes] | None = ssl_context.get_ca_certs( - binary_form=True - ) - if ctx_ca_certs_der: - ctx_ca_certs = None - try: - ctx_ca_certs = _der_certs_to_cf_cert_array(ctx_ca_certs_der) - Security.SecTrustSetAnchorCertificates(trust, ctx_ca_certs) - finally: - if ctx_ca_certs: - CoreFoundation.CFRelease(ctx_ca_certs) - - # We always want system certificates. - Security.SecTrustSetAnchorCertificatesOnly(trust, False) - - # macOS 10.13 and earlier don't support SecTrustEvaluateWithError() - # so we use SecTrustEvaluate() which means we need to construct error - # messages ourselves. - if _is_macos_version_10_14_or_later: - _verify_peercerts_impl_macos_10_14(ssl_context, trust) - else: - _verify_peercerts_impl_macos_10_13(ssl_context, trust) - finally: - if policies: - CoreFoundation.CFRelease(policies) - if trust: - CoreFoundation.CFRelease(trust) - - -def _verify_peercerts_impl_macos_10_13( - ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any -) -> None: - """Verify using 'SecTrustEvaluate' API for macOS 10.13 and earlier. - macOS 10.14 added the 'SecTrustEvaluateWithError' API. - """ - sec_trust_result_type = Security.SecTrustResultType() - Security.SecTrustEvaluate(sec_trust_ref, ctypes.byref(sec_trust_result_type)) - - try: - sec_trust_result_type_as_int = int(sec_trust_result_type.value) - except (ValueError, TypeError): - sec_trust_result_type_as_int = -1 - - # Apple doesn't document these values in their own API docs. - # See: https://github.com/xybp888/iOS-SDKs/blob/master/iPhoneOS13.0.sdk/System/Library/Frameworks/Security.framework/Headers/SecTrust.h#L84 - if ( - ssl_context.verify_mode == ssl.CERT_REQUIRED - and sec_trust_result_type_as_int not in (1, 4) - ): - # Note that we're not able to ignore only hostname errors - # for macOS 10.13 and earlier, so check_hostname=False will - # still return an error. - sec_trust_result_type_to_message = { - 0: "Invalid trust result type", - # 1: "Trust evaluation succeeded", - 2: "User confirmation required", - 3: "User specified that certificate is not trusted", - # 4: "Trust result is unspecified", - 5: "Recoverable trust failure occurred", - 6: "Fatal trust failure occurred", - 7: "Other error occurred, certificate may be revoked", - } - error_message = sec_trust_result_type_to_message.get( - sec_trust_result_type_as_int, - f"Unknown trust result: {sec_trust_result_type_as_int}", - ) - - err = ssl.SSLCertVerificationError(error_message) - err.verify_message = error_message - err.verify_code = sec_trust_result_type_as_int - raise err - - -def _verify_peercerts_impl_macos_10_14( - ssl_context: ssl.SSLContext, sec_trust_ref: typing.Any -) -> None: - """Verify using 'SecTrustEvaluateWithError' API for macOS 10.14+.""" - cf_error = CoreFoundation.CFErrorRef() - sec_trust_eval_result = Security.SecTrustEvaluateWithError( - sec_trust_ref, ctypes.byref(cf_error) - ) - # sec_trust_eval_result is a bool (0 or 1) - # where 1 means that the certs are trusted. - if sec_trust_eval_result == 1: - is_trusted = True - elif sec_trust_eval_result == 0: - is_trusted = False - else: - raise ssl.SSLError( - f"Unknown result from Security.SecTrustEvaluateWithError: {sec_trust_eval_result!r}" - ) - - cf_error_code = 0 - if not is_trusted: - cf_error_code = CoreFoundation.CFErrorGetCode(cf_error) - - # If the error is a known failure that we're - # explicitly okay with from SSLContext configuration - # we can set is_trusted accordingly. - if ssl_context.verify_mode != ssl.CERT_REQUIRED and ( - cf_error_code == CFConst.errSecNotTrusted - or cf_error_code == CFConst.errSecCertificateExpired - ): - is_trusted = True - - # If we're still not trusted then we start to - # construct and raise the SSLCertVerificationError. - if not is_trusted: - cf_error_string_ref = None - try: - cf_error_string_ref = CoreFoundation.CFErrorCopyDescription(cf_error) - - # Can this ever return 'None' if there's a CFError? - cf_error_message = ( - _cf_string_ref_to_str(cf_error_string_ref) - or "Certificate verification failed" - ) - - # TODO: Not sure if we need the SecTrustResultType for anything? - # We only care whether or not it's a success or failure for now. - sec_trust_result_type = Security.SecTrustResultType() - Security.SecTrustGetTrustResult( - sec_trust_ref, ctypes.byref(sec_trust_result_type) - ) - - err = ssl.SSLCertVerificationError(cf_error_message) - err.verify_message = cf_error_message - err.verify_code = cf_error_code - raise err - finally: - if cf_error_string_ref: - CoreFoundation.CFRelease(cf_error_string_ref) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_openssl.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_openssl.py deleted file mode 100644 index 3e25a5677..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_openssl.py +++ /dev/null @@ -1,68 +0,0 @@ -import contextlib -import os -import re -import ssl -import typing - -# candidates based on https://github.com/tiran/certifi-system-store by Christian Heimes -_CA_FILE_CANDIDATES = [ - # Alpine, Arch, Fedora 34-42, OpenWRT, RHEL 9-10, BSD - "/etc/ssl/cert.pem", - # Fedora 43+, RHEL 11+ - "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", - # Fedora <= 34, RHEL <= 9, CentOS <= 9 - "/etc/pki/tls/cert.pem", - # Debian, Ubuntu (requires ca-certificates) - "/etc/ssl/certs/ca-certificates.crt", - # SUSE - "/etc/ssl/ca-bundle.pem", -] - -_HASHED_CERT_FILENAME_RE = re.compile(r"^[0-9a-fA-F]{8}\.[0-9]$") - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - # First, check whether the default locations from OpenSSL - # seem like they will give us a usable set of CA certs. - # ssl.get_default_verify_paths already takes care of: - # - getting cafile from either the SSL_CERT_FILE env var - # or the path configured when OpenSSL was compiled, - # and verifying that that path exists - # - getting capath from either the SSL_CERT_DIR env var - # or the path configured when OpenSSL was compiled, - # and verifying that that path exists - # In addition we'll check whether capath appears to contain certs. - defaults = ssl.get_default_verify_paths() - if defaults.cafile or (defaults.capath and _capath_contains_certs(defaults.capath)): - ctx.set_default_verify_paths() - else: - # cafile from OpenSSL doesn't exist - # and capath from OpenSSL doesn't contain certs. - # Let's search other common locations instead. - for cafile in _CA_FILE_CANDIDATES: - if os.path.isfile(cafile): - ctx.load_verify_locations(cafile=cafile) - break - - yield - - -def _capath_contains_certs(capath: str) -> bool: - """Check whether capath exists and contains certs in the expected format.""" - if not os.path.isdir(capath): - return False - for name in os.listdir(capath): - if _HASHED_CERT_FILENAME_RE.match(name): - return True - return False - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - # This is a no-op because we've enabled SSLContext's built-in - # verification via verify_mode=CERT_REQUIRED, and don't need to repeat it. - pass diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py deleted file mode 100644 index b1ee7a3cb..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +++ /dev/null @@ -1,31 +0,0 @@ -import ssl -import sys -import typing - -# Hold on to the original class so we can create it consistently -# even if we inject our own SSLContext into the ssl module. -_original_SSLContext = ssl.SSLContext -_original_super_SSLContext = super(_original_SSLContext, _original_SSLContext) - -# CPython is known to be good, but non-CPython implementations -# may implement SSLContext differently so to be safe we don't -# subclass the SSLContext. - -# This is returned by truststore.SSLContext.__class__() -_truststore_SSLContext_dunder_class: typing.Optional[type] - -# This value is the superclass of truststore.SSLContext. -_truststore_SSLContext_super_class: type - -if sys.implementation.name == "cpython": - _truststore_SSLContext_super_class = _original_SSLContext - _truststore_SSLContext_dunder_class = None -else: - _truststore_SSLContext_super_class = object - _truststore_SSLContext_dunder_class = _original_SSLContext - - -def _set_ssl_context_verify_mode( - ssl_context: ssl.SSLContext, verify_mode: ssl.VerifyMode -) -> None: - _original_super_SSLContext.verify_mode.__set__(ssl_context, verify_mode) # type: ignore[attr-defined] diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_windows.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_windows.py deleted file mode 100644 index a9bf9abdf..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/_windows.py +++ /dev/null @@ -1,567 +0,0 @@ -import contextlib -import ssl -import typing -from ctypes import WinDLL # type: ignore -from ctypes import WinError # type: ignore -from ctypes import ( - POINTER, - Structure, - c_char_p, - c_ulong, - c_void_p, - c_wchar_p, - cast, - create_unicode_buffer, - pointer, - sizeof, -) -from ctypes.wintypes import ( - BOOL, - DWORD, - HANDLE, - LONG, - LPCSTR, - LPCVOID, - LPCWSTR, - LPFILETIME, - LPSTR, - LPWSTR, -) -from typing import TYPE_CHECKING, Any - -from ._ssl_constants import _set_ssl_context_verify_mode - -HCERTCHAINENGINE = HANDLE -HCERTSTORE = HANDLE -HCRYPTPROV_LEGACY = HANDLE - - -class CERT_CONTEXT(Structure): - _fields_ = ( - ("dwCertEncodingType", DWORD), - ("pbCertEncoded", c_void_p), - ("cbCertEncoded", DWORD), - ("pCertInfo", c_void_p), - ("hCertStore", HCERTSTORE), - ) - - -PCERT_CONTEXT = POINTER(CERT_CONTEXT) -PCCERT_CONTEXT = POINTER(PCERT_CONTEXT) - - -class CERT_ENHKEY_USAGE(Structure): - _fields_ = ( - ("cUsageIdentifier", DWORD), - ("rgpszUsageIdentifier", POINTER(LPSTR)), - ) - - -PCERT_ENHKEY_USAGE = POINTER(CERT_ENHKEY_USAGE) - - -class CERT_USAGE_MATCH(Structure): - _fields_ = ( - ("dwType", DWORD), - ("Usage", CERT_ENHKEY_USAGE), - ) - - -class CERT_CHAIN_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("RequestedUsage", CERT_USAGE_MATCH), - ("RequestedIssuancePolicy", CERT_USAGE_MATCH), - ("dwUrlRetrievalTimeout", DWORD), - ("fCheckRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ("pftCacheResync", LPFILETIME), - ("pStrongSignPara", c_void_p), - ("dwStrongSignFlags", DWORD), - ) - - -if TYPE_CHECKING: - PCERT_CHAIN_PARA = pointer[CERT_CHAIN_PARA] # type: ignore[misc] -else: - PCERT_CHAIN_PARA = POINTER(CERT_CHAIN_PARA) - - -class CERT_TRUST_STATUS(Structure): - _fields_ = ( - ("dwErrorStatus", DWORD), - ("dwInfoStatus", DWORD), - ) - - -class CERT_CHAIN_ELEMENT(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("pCertContext", PCERT_CONTEXT), - ("TrustStatus", CERT_TRUST_STATUS), - ("pRevocationInfo", c_void_p), - ("pIssuanceUsage", PCERT_ENHKEY_USAGE), - ("pApplicationUsage", PCERT_ENHKEY_USAGE), - ("pwszExtendedErrorInfo", LPCWSTR), - ) - - -PCERT_CHAIN_ELEMENT = POINTER(CERT_CHAIN_ELEMENT) - - -class CERT_SIMPLE_CHAIN(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("TrustStatus", CERT_TRUST_STATUS), - ("cElement", DWORD), - ("rgpElement", POINTER(PCERT_CHAIN_ELEMENT)), - ("pTrustListInfo", c_void_p), - ("fHasRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ) - - -PCERT_SIMPLE_CHAIN = POINTER(CERT_SIMPLE_CHAIN) - - -class CERT_CHAIN_CONTEXT(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("TrustStatus", CERT_TRUST_STATUS), - ("cChain", DWORD), - ("rgpChain", POINTER(PCERT_SIMPLE_CHAIN)), - ("cLowerQualityChainContext", DWORD), - ("rgpLowerQualityChainContext", c_void_p), - ("fHasRevocationFreshnessTime", BOOL), - ("dwRevocationFreshnessTime", DWORD), - ) - - -PCERT_CHAIN_CONTEXT = POINTER(CERT_CHAIN_CONTEXT) -PCCERT_CHAIN_CONTEXT = POINTER(PCERT_CHAIN_CONTEXT) - - -class SSL_EXTRA_CERT_CHAIN_POLICY_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwAuthType", DWORD), - ("fdwChecks", DWORD), - ("pwszServerName", LPCWSTR), - ) - - -class CERT_CHAIN_POLICY_PARA(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwFlags", DWORD), - ("pvExtraPolicyPara", c_void_p), - ) - - -PCERT_CHAIN_POLICY_PARA = POINTER(CERT_CHAIN_POLICY_PARA) - - -class CERT_CHAIN_POLICY_STATUS(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("dwError", DWORD), - ("lChainIndex", LONG), - ("lElementIndex", LONG), - ("pvExtraPolicyStatus", c_void_p), - ) - - -PCERT_CHAIN_POLICY_STATUS = POINTER(CERT_CHAIN_POLICY_STATUS) - - -class CERT_CHAIN_ENGINE_CONFIG(Structure): - _fields_ = ( - ("cbSize", DWORD), - ("hRestrictedRoot", HCERTSTORE), - ("hRestrictedTrust", HCERTSTORE), - ("hRestrictedOther", HCERTSTORE), - ("cAdditionalStore", DWORD), - ("rghAdditionalStore", c_void_p), - ("dwFlags", DWORD), - ("dwUrlRetrievalTimeout", DWORD), - ("MaximumCachedCertificates", DWORD), - ("CycleDetectionModulus", DWORD), - ("hExclusiveRoot", HCERTSTORE), - ("hExclusiveTrustedPeople", HCERTSTORE), - ("dwExclusiveFlags", DWORD), - ) - - -PCERT_CHAIN_ENGINE_CONFIG = POINTER(CERT_CHAIN_ENGINE_CONFIG) -PHCERTCHAINENGINE = POINTER(HCERTCHAINENGINE) - -X509_ASN_ENCODING = 0x00000001 -PKCS_7_ASN_ENCODING = 0x00010000 -CERT_STORE_PROV_MEMORY = b"Memory" -CERT_STORE_ADD_USE_EXISTING = 2 -USAGE_MATCH_TYPE_OR = 1 -OID_PKIX_KP_SERVER_AUTH = c_char_p(b"1.3.6.1.5.5.7.3.1") -CERT_CHAIN_REVOCATION_CHECK_END_CERT = 0x10000000 -CERT_CHAIN_REVOCATION_CHECK_CHAIN = 0x20000000 -CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS = 0x00000007 -CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG = 0x00000008 -CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG = 0x00000010 -CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG = 0x00000040 -CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG = 0x00000020 -CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG = 0x00000080 -CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS = 0x00000F00 -CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG = 0x00008000 -CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG = 0x00004000 -SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000 -AUTHTYPE_SERVER = 2 -CERT_CHAIN_POLICY_SSL = 4 -FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 -FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200 - -# Flags to set for SSLContext.verify_mode=CERT_NONE -CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS = ( - CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS - | CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG - | CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG - | CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG - | CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG - | CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG - | CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS - | CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG - | CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG -) - -wincrypt = WinDLL("crypt32.dll") -kernel32 = WinDLL("kernel32.dll") - - -def _handle_win_error(result: bool, _: Any, args: Any) -> Any: - if not result: - # Note, actually raises OSError after calling GetLastError and FormatMessage - raise WinError() - return args - - -CertCreateCertificateChainEngine = wincrypt.CertCreateCertificateChainEngine -CertCreateCertificateChainEngine.argtypes = ( - PCERT_CHAIN_ENGINE_CONFIG, - PHCERTCHAINENGINE, -) -CertCreateCertificateChainEngine.errcheck = _handle_win_error - -CertOpenStore = wincrypt.CertOpenStore -CertOpenStore.argtypes = (LPCSTR, DWORD, HCRYPTPROV_LEGACY, DWORD, c_void_p) -CertOpenStore.restype = HCERTSTORE -CertOpenStore.errcheck = _handle_win_error - -CertAddEncodedCertificateToStore = wincrypt.CertAddEncodedCertificateToStore -CertAddEncodedCertificateToStore.argtypes = ( - HCERTSTORE, - DWORD, - c_char_p, - DWORD, - DWORD, - PCCERT_CONTEXT, -) -CertAddEncodedCertificateToStore.restype = BOOL - -CertCreateCertificateContext = wincrypt.CertCreateCertificateContext -CertCreateCertificateContext.argtypes = (DWORD, c_char_p, DWORD) -CertCreateCertificateContext.restype = PCERT_CONTEXT -CertCreateCertificateContext.errcheck = _handle_win_error - -CertGetCertificateChain = wincrypt.CertGetCertificateChain -CertGetCertificateChain.argtypes = ( - HCERTCHAINENGINE, - PCERT_CONTEXT, - LPFILETIME, - HCERTSTORE, - PCERT_CHAIN_PARA, - DWORD, - c_void_p, - PCCERT_CHAIN_CONTEXT, -) -CertGetCertificateChain.restype = BOOL -CertGetCertificateChain.errcheck = _handle_win_error - -CertVerifyCertificateChainPolicy = wincrypt.CertVerifyCertificateChainPolicy -CertVerifyCertificateChainPolicy.argtypes = ( - c_ulong, - PCERT_CHAIN_CONTEXT, - PCERT_CHAIN_POLICY_PARA, - PCERT_CHAIN_POLICY_STATUS, -) -CertVerifyCertificateChainPolicy.restype = BOOL - -CertCloseStore = wincrypt.CertCloseStore -CertCloseStore.argtypes = (HCERTSTORE, DWORD) -CertCloseStore.restype = BOOL -CertCloseStore.errcheck = _handle_win_error - -CertFreeCertificateChain = wincrypt.CertFreeCertificateChain -CertFreeCertificateChain.argtypes = (PCERT_CHAIN_CONTEXT,) - -CertFreeCertificateContext = wincrypt.CertFreeCertificateContext -CertFreeCertificateContext.argtypes = (PCERT_CONTEXT,) - -CertFreeCertificateChainEngine = wincrypt.CertFreeCertificateChainEngine -CertFreeCertificateChainEngine.argtypes = (HCERTCHAINENGINE,) - -FormatMessageW = kernel32.FormatMessageW -FormatMessageW.argtypes = ( - DWORD, - LPCVOID, - DWORD, - DWORD, - LPWSTR, - DWORD, - c_void_p, -) -FormatMessageW.restype = DWORD - - -def _verify_peercerts_impl( - ssl_context: ssl.SSLContext, - cert_chain: list[bytes], - server_hostname: str | None = None, -) -> None: - """Verify the cert_chain from the server using Windows APIs.""" - - # If the peer didn't send any certificates then - # we can't do verification. Raise an error. - if not cert_chain: - raise ssl.SSLCertVerificationError("Peer sent no certificates to verify") - - pCertContext = None - hIntermediateCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None) - try: - # Add intermediate certs to an in-memory cert store - for cert_bytes in cert_chain[1:]: - CertAddEncodedCertificateToStore( - hIntermediateCertStore, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - cert_bytes, - len(cert_bytes), - CERT_STORE_ADD_USE_EXISTING, - None, - ) - - # Cert context for leaf cert - leaf_cert = cert_chain[0] - pCertContext = CertCreateCertificateContext( - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, leaf_cert, len(leaf_cert) - ) - - # Chain params to match certs for serverAuth extended usage - cert_enhkey_usage = CERT_ENHKEY_USAGE() - cert_enhkey_usage.cUsageIdentifier = 1 - cert_enhkey_usage.rgpszUsageIdentifier = (c_char_p * 1)(OID_PKIX_KP_SERVER_AUTH) - cert_usage_match = CERT_USAGE_MATCH() - cert_usage_match.Usage = cert_enhkey_usage - chain_params = CERT_CHAIN_PARA() - chain_params.RequestedUsage = cert_usage_match - chain_params.cbSize = sizeof(chain_params) - pChainPara = pointer(chain_params) - - if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN: - chain_flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN - elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF: - chain_flags = CERT_CHAIN_REVOCATION_CHECK_END_CERT - else: - chain_flags = 0 - - try: - # First attempt to verify using the default Windows system trust roots - # (default chain engine). - _get_and_verify_cert_chain( - ssl_context, - None, - hIntermediateCertStore, - pCertContext, - pChainPara, - server_hostname, - chain_flags=chain_flags, - ) - except ssl.SSLCertVerificationError as e: - # If that fails but custom CA certs have been added - # to the SSLContext using load_verify_locations, - # try verifying using a custom chain engine - # that trusts the custom CA certs. - custom_ca_certs: list[bytes] | None = ssl_context.get_ca_certs( - binary_form=True - ) - if custom_ca_certs: - try: - _verify_using_custom_ca_certs( - ssl_context, - custom_ca_certs, - hIntermediateCertStore, - pCertContext, - pChainPara, - server_hostname, - chain_flags=chain_flags, - ) - # Raise the original error, not the new error. - except ssl.SSLCertVerificationError: - raise e from None - else: - raise - finally: - CertCloseStore(hIntermediateCertStore, 0) - if pCertContext: - CertFreeCertificateContext(pCertContext) - - -def _get_and_verify_cert_chain( - ssl_context: ssl.SSLContext, - hChainEngine: HCERTCHAINENGINE | None, - hIntermediateCertStore: HCERTSTORE, - pPeerCertContext: c_void_p, - pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type] - server_hostname: str | None, - chain_flags: int, -) -> None: - ppChainContext = None - try: - # Get cert chain - ppChainContext = pointer(PCERT_CHAIN_CONTEXT()) - CertGetCertificateChain( - hChainEngine, # chain engine - pPeerCertContext, # leaf cert context - None, # current system time - hIntermediateCertStore, # additional in-memory cert store - pChainPara, # chain-building parameters - chain_flags, - None, # reserved - ppChainContext, # the resulting chain context - ) - pChainContext = ppChainContext.contents - - # Verify cert chain - ssl_extra_cert_chain_policy_para = SSL_EXTRA_CERT_CHAIN_POLICY_PARA() - ssl_extra_cert_chain_policy_para.cbSize = sizeof( - ssl_extra_cert_chain_policy_para - ) - ssl_extra_cert_chain_policy_para.dwAuthType = AUTHTYPE_SERVER - ssl_extra_cert_chain_policy_para.fdwChecks = 0 - if ssl_context.check_hostname is False: - ssl_extra_cert_chain_policy_para.fdwChecks = ( - SECURITY_FLAG_IGNORE_CERT_CN_INVALID - ) - if server_hostname: - ssl_extra_cert_chain_policy_para.pwszServerName = c_wchar_p(server_hostname) - - chain_policy = CERT_CHAIN_POLICY_PARA() - chain_policy.pvExtraPolicyPara = cast( - pointer(ssl_extra_cert_chain_policy_para), c_void_p - ) - if ssl_context.verify_mode == ssl.CERT_NONE: - chain_policy.dwFlags |= CERT_CHAIN_POLICY_VERIFY_MODE_NONE_FLAGS - chain_policy.cbSize = sizeof(chain_policy) - - pPolicyPara = pointer(chain_policy) - policy_status = CERT_CHAIN_POLICY_STATUS() - policy_status.cbSize = sizeof(policy_status) - pPolicyStatus = pointer(policy_status) - CertVerifyCertificateChainPolicy( - CERT_CHAIN_POLICY_SSL, - pChainContext, - pPolicyPara, - pPolicyStatus, - ) - - # Check status - error_code = policy_status.dwError - if error_code: - # Try getting a human readable message for an error code. - error_message_buf = create_unicode_buffer(1024) - error_message_chars = FormatMessageW( - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - None, - error_code, - 0, - error_message_buf, - sizeof(error_message_buf), - None, - ) - - # See if we received a message for the error, - # otherwise we use a generic error with the - # error code and hope that it's search-able. - if error_message_chars <= 0: - error_message = f"Certificate chain policy error {error_code:#x} [{policy_status.lElementIndex}]" - else: - error_message = error_message_buf.value.strip() - - err = ssl.SSLCertVerificationError(error_message) - err.verify_message = error_message - err.verify_code = error_code - raise err from None - finally: - if ppChainContext: - CertFreeCertificateChain(ppChainContext.contents) - - -def _verify_using_custom_ca_certs( - ssl_context: ssl.SSLContext, - custom_ca_certs: list[bytes], - hIntermediateCertStore: HCERTSTORE, - pPeerCertContext: c_void_p, - pChainPara: PCERT_CHAIN_PARA, # type: ignore[valid-type] - server_hostname: str | None, - chain_flags: int, -) -> None: - hChainEngine = None - hRootCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, None, 0, None) - try: - # Add custom CA certs to an in-memory cert store - for cert_bytes in custom_ca_certs: - CertAddEncodedCertificateToStore( - hRootCertStore, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - cert_bytes, - len(cert_bytes), - CERT_STORE_ADD_USE_EXISTING, - None, - ) - - # Create a custom cert chain engine which exclusively trusts - # certs from our hRootCertStore - cert_chain_engine_config = CERT_CHAIN_ENGINE_CONFIG() - cert_chain_engine_config.cbSize = sizeof(cert_chain_engine_config) - cert_chain_engine_config.hExclusiveRoot = hRootCertStore - pConfig = pointer(cert_chain_engine_config) - phChainEngine = pointer(HCERTCHAINENGINE()) - CertCreateCertificateChainEngine( - pConfig, - phChainEngine, - ) - hChainEngine = phChainEngine.contents - - # Get and verify a cert chain using the custom chain engine - _get_and_verify_cert_chain( - ssl_context, - hChainEngine, - hIntermediateCertStore, - pPeerCertContext, - pChainPara, - server_hostname, - chain_flags, - ) - finally: - if hChainEngine: - CertFreeCertificateChainEngine(hChainEngine) - CertCloseStore(hRootCertStore, 0) - - -@contextlib.contextmanager -def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]: - check_hostname = ctx.check_hostname - verify_mode = ctx.verify_mode - ctx.check_hostname = False - _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE) - try: - yield - finally: - ctx.check_hostname = check_hostname - _set_ssl_context_verify_mode(ctx, verify_mode) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/truststore/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt deleted file mode 100644 index 429a1767e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2008-2020 Andrey Petrov and contributors (see CONTRIBUTORS.txt) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__init__.py deleted file mode 100644 index c6fa38212..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__init__.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more -""" -from __future__ import absolute_import - -# Set default logging handler to avoid "No handler found" warnings. -import logging -import warnings -from logging import NullHandler - -from . import exceptions -from ._version import __version__ -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host - -# === NOTE TO REPACKAGERS AND VENDORS === -# Please delete this block, this logic is only -# for urllib3 being distributed via PyPI. -# See: https://github.com/urllib3/urllib3/issues/2680 -try: - import urllib3_secure_extra # type: ignore # noqa: F401 -except ImportError: - pass -else: - warnings.warn( - "'urllib3[secure]' extra is deprecated and will be removed " - "in a future release of urllib3 2.x. Read more in this issue: " - "https://github.com/urllib3/urllib3/issues/2680", - category=DeprecationWarning, - stacklevel=2, - ) - -__author__ = "Andrey Petrov (andrey.petrov@shazow.net)" -__license__ = "MIT" -__version__ = __version__ - -__all__ = ( - "HTTPConnectionPool", - "HTTPSConnectionPool", - "PoolManager", - "ProxyManager", - "HTTPResponse", - "Retry", - "Timeout", - "add_stderr_logger", - "connection_from_url", - "disable_warnings", - "encode_multipart_formdata", - "get_host", - "make_headers", - "proxy_from_url", -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug("Added a stderr logging handler to logger: %s", __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter("always", exceptions.SecurityWarning, append=True) -# SubjectAltNameWarning's should go off once per host -warnings.simplefilter("default", exceptions.SubjectAltNameWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True) -# SNIMissingWarnings should go off only once. -warnings.simplefilter("default", exceptions.SNIMissingWarning, append=True) - - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter("ignore", category) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index d31954f8e9e75412f8211ca5c8c63643a870665a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 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 V{{FJK=tH0QLW^<#Couume*;o^WD)=X diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-314.pyc deleted file mode 100644 index 4d1f952414798f004dde924a11a22c98fd09b7c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16971 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-314.pyc deleted file mode 100644 index 54a5be1e30fa8527e63f224c192559420e1a1a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmdPq<K<!if=e4;WI6!p#~=<2FhUuhK}s4Jf*48|f*6$<G?}W{4fTx7^o$JrG#PJk z$H$kY78Pga=f%gbWcUoybF0(YDkiiTC>oQPl3HYFX=xBso?nz5Q&5zjm6}{q9Fv@r zUz(DXSe&YxnU`4tB#KKCb8=FPbPZzyDoZl*^NbBm;!WZ!EX?9VQgaJ(5=&C!OL7Zh zd@_?_iZe@6bqf-cvlG)(i(?8h3-o~w$V<sD(l0H_$;nJI2JyiT(krOE#bJ}1pHiBW eYFEStbQ#D?#USr|U}j`we84B(#9hP!<N^RZgH3$^ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-314.pyc deleted file mode 100644 index 5c93e21d0dd0d4819c968cd70dcde00182f2e741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21167 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%0AA+zVkf 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 NrM)GV|Kc|x{=ZLnU*-S+ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-314.pyc deleted file mode 100644 index 622156795b7b7e014d647814dc6414d286fc13aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36923 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 PS#jx^D&wD38sPrFj8#EX diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-314.pyc deleted file mode 100644 index 337834c2023c2a10f62a35a627f168dd25d71dc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14432 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 XbGpLlYNjdZ<x{XU_#gBL*Ma{APj{P6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-314.pyc deleted file mode 100644 index 73676fbd8a3baba4384be9042947ce7b2e031010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10442 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 J9%zF6e*p6z5MBTP diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-314.pyc deleted file mode 100644 index 2d4729e09f865dcc530d7457a973c047bb55be90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4078 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 K=;T8BdH)M0uzHOE diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-314.pyc deleted file mode 100644 index 26fe9816936f60ca912889df47eda844e585fe0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20397 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 K#guommHGcZH^kKd diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-314.pyc deleted file mode 100644 index 4b09681b13a80a008435eb234625c323087178f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7126 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 K8A%xur2HSluh!WB diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-314.pyc deleted file mode 100644 index 4abc3394ee6f1acdc16774a45c788380f7c8a3cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35025 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%0D-Y7wVpTkzp+1E)0wR4 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 RYhK(=&J6z`&^>F^{{wN+f~)`l diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_collections.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_collections.py deleted file mode 100644 index bceb8451f..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_collections.py +++ /dev/null @@ -1,355 +0,0 @@ -from __future__ import absolute_import - -try: - from collections.abc import Mapping, MutableMapping -except ImportError: - from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -from collections import OrderedDict - -from .exceptions import InvalidHeader -from .packages import six -from .packages.six import iterkeys, itervalues - -__all__ = ["RecentlyUsedContainer", "HTTPHeaderDict"] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError( - "Iteration over this class is unlikely to be threadsafe." - ) - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -class HTTPHeaderDict(MutableMapping): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - super(HTTPHeaderDict, self).__init__() - self._container = OrderedDict() - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - self._container[key.lower()] = [key, val] - return self._container[key.lower()] - - def __getitem__(self, key): - val = self._container[key.lower()] - return ", ".join(val[1:]) - - def __delitem__(self, key): - del self._container[key.lower()] - - def __contains__(self, key): - return key.lower() in self._container - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, "keys"): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return dict((k.lower(), v) for k, v in self.itermerged()) == dict( - (k.lower(), v) for k, v in other.itermerged() - ) - - def __ne__(self, other): - return not self.__eq__(other) - - if six.PY2: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def __len__(self): - return len(self._container) - - def __iter__(self): - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def pop(self, key, default=__marker): - """D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - """ - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - vals.append(val) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError( - "extend() takes at most 1 positional " - "arguments ({0} given)".format(len(args)) - ) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key, default=__marker): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = self._container[key.lower()] - except KeyError: - if default is self.__marker: - return [] - return default - else: - return vals[1:] - - def _prepare_for_method_change(self): - """ - Remove content-specific header fields before changing the request - method to GET or HEAD according to RFC 9110, Section 15.4. - """ - content_specific_headers = [ - "Content-Encoding", - "Content-Language", - "Content-Location", - "Content-Type", - "Content-Length", - "Digest", - "Last-Modified", - ] - for header in content_specific_headers: - self.discard(header) - return self - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - # Backwards compatibility for http.cookiejar - get_all = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = other.getlist(key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - self._container[key.lower()] = [key] + val - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ", ".join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - obs_fold_continued_leaders = (" ", "\t") - headers = [] - - for line in message.headers: - if line.startswith(obs_fold_continued_leaders): - if not headers: - # We received a header line that starts with OWS as described - # in RFC-7230 S3.2.4. This indicates a multiline header, but - # there exists no previous header to which we can attach it. - raise InvalidHeader( - "Header continuation with no previous header: %s" % line - ) - else: - key, value = headers[-1] - headers[-1] = (key, value + " " + line.strip()) - continue - - key, value = line.split(":", 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_version.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_version.py deleted file mode 100644 index d49df2a0c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/_version.py +++ /dev/null @@ -1,2 +0,0 @@ -# This file is protected via CODEOWNERS -__version__ = "1.26.20" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connection.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connection.py deleted file mode 100644 index de35b63d6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connection.py +++ /dev/null @@ -1,572 +0,0 @@ -from __future__ import absolute_import - -import datetime -import logging -import os -import re -import socket -import warnings -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from .packages import six -from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection -from .packages.six.moves.http_client import HTTPException # noqa: F401 -from .util.proxy import create_proxy_ssl_context - -try: # Compiled with SSL? - import ssl - - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: - # Python 3: not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: - # Python 2 - class ConnectionError(Exception): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - BrokenPipeError = BrokenPipeError -except NameError: # Python 2: - - class BrokenPipeError(Exception): - pass - - -from ._collections import HTTPHeaderDict # noqa (historical, removed in v2) -from ._version import __version__ -from .exceptions import ( - ConnectTimeoutError, - NewConnectionError, - SubjectAltNameWarning, - SystemTimeWarning, -) -from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection -from .util.ssl_ import ( - assert_fingerprint, - create_urllib3_context, - is_ipaddress, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .util.ssl_match_hostname import CertificateError, match_hostname - -log = logging.getLogger(__name__) - -port_by_scheme = {"http": 80, "https": 443} - -# When it comes time to update this value as a part of regular maintenance -# (ie test_recent_date is failing) update it to ~6 months before the current date. -RECENT_DATE = datetime.date(2024, 1, 1) - -_CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]") - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on :class:`http.client.HTTPConnection` but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass: - - .. code-block:: python - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme["http"] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - #: Whether this proxy connection (if used) verifies the proxy host's - #: certificate. - proxy_is_verified = None - - def __init__(self, *args, **kw): - if not six.PY2: - kw.pop("strict", None) - - # Pre-set source_address. - self.source_address = kw.get("source_address") - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop("socket_options", self.default_socket_options) - - # Proxy options provided by the user. - self.proxy = kw.pop("proxy", None) - self.proxy_config = kw.pop("proxy_config", None) - - _HTTPConnection.__init__(self, *args, **kw) - - @property - def host(self): - """ - Getter method to remove any trailing dots that indicate the hostname is an FQDN. - - In general, SSL certificates don't include the trailing dot indicating a - fully-qualified domain name, and thus, they don't validate properly when - checked against a domain name that includes the dot. In addition, some - servers may not expect to receive the trailing dot when provided. - - However, the hostname with trailing dot is critical to DNS resolution; doing a - lookup with the trailing dot will properly only resolve the appropriate FQDN, - whereas a lookup without a trailing dot will search the system's search domain - list. Thus, it's important to keep the original host around for use only in - those cases where it's appropriate (i.e., when doing DNS lookup to establish the - actual TCP connection across which we're going to send HTTP requests). - """ - return self._dns_host.rstrip(".") - - @host.setter - def host(self, value): - """ - Setter for the `host` property. - - We assume that only urllib3 uses the _dns_host attribute; httplib itself - only uses `host`, and it seems reasonable that other libraries follow suit. - """ - self._dns_host = value - - def _new_conn(self): - """Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw["source_address"] = self.source_address - - if self.socket_options: - extra_kw["socket_options"] = self.socket_options - - try: - conn = connection.create_connection( - (self._dns_host, self.port), self.timeout, **extra_kw - ) - - except SocketTimeout: - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - - except SocketError as e: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - return conn - - def _is_using_tunnel(self): - # Google App Engine's httplib does not define _tunnel_host - return getattr(self, "_tunnel_host", None) - - def _prepare_conn(self, conn): - self.sock = conn - if self._is_using_tunnel(): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - def putrequest(self, method, url, *args, **kwargs): - """ """ - # Empty docstring because the indentation of CPython's implementation - # is broken but we don't want this method in our documentation. - match = _CONTAINS_CONTROL_CHAR_RE.search(method) - if match: - raise ValueError( - "Method cannot contain non-token characters %r (found at least %r)" - % (method, match.group()) - ) - - return _HTTPConnection.putrequest(self, method, url, *args, **kwargs) - - def putheader(self, header, *values): - """ """ - if not any(isinstance(v, str) and v == SKIP_HEADER for v in values): - _HTTPConnection.putheader(self, header, *values) - elif six.ensure_str(header.lower()) not in SKIPPABLE_HEADERS: - raise ValueError( - "urllib3.util.SKIP_HEADER only supports '%s'" - % ("', '".join(map(str.title, sorted(SKIPPABLE_HEADERS))),) - ) - - def request(self, method, url, body=None, headers=None): - # Update the inner socket's timeout value to send the request. - # This only triggers if the connection is re-used. - if getattr(self, "sock", None) is not None: - self.sock.settimeout(self.timeout) - - if headers is None: - headers = {} - else: - # Avoid modifying the headers passed into .request() - headers = headers.copy() - if "user-agent" not in (six.ensure_str(k.lower()) for k in headers): - headers["User-Agent"] = _get_default_user_agent() - super(HTTPConnection, self).request(method, url, body=body, headers=headers) - - def request_chunked(self, method, url, body=None, headers=None): - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - headers = headers or {} - header_keys = set([six.ensure_str(k.lower()) for k in headers]) - skip_accept_encoding = "accept-encoding" in header_keys - skip_host = "host" in header_keys - self.putrequest( - method, url, skip_accept_encoding=skip_accept_encoding, skip_host=skip_host - ) - if "user-agent" not in header_keys: - self.putheader("User-Agent", _get_default_user_agent()) - for header, value in headers.items(): - self.putheader(header, value) - if "transfer-encoding" not in header_keys: - self.putheader("Transfer-Encoding", "chunked") - self.endheaders() - - if body is not None: - stringish_types = six.string_types + (bytes,) - if isinstance(body, stringish_types): - body = (body,) - for chunk in body: - if not chunk: - continue - if not isinstance(chunk, bytes): - chunk = chunk.encode("utf8") - len_str = hex(len(chunk))[2:] - to_send = bytearray(len_str.encode()) - to_send += b"\r\n" - to_send += chunk - to_send += b"\r\n" - self.send(to_send) - - # After the if clause, to always have a closed body - self.send(b"0\r\n\r\n") - - -class HTTPSConnection(HTTPConnection): - """ - Many of the parameters to this constructor are passed to the underlying SSL - socket by means of :py:func:`urllib3.util.ssl_wrap_socket`. - """ - - default_port = port_by_scheme["https"] - - cert_reqs = None - ca_certs = None - ca_cert_dir = None - ca_cert_data = None - ssl_version = None - assert_fingerprint = None - tls_in_tls_required = False - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - key_password=None, - strict=None, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - ssl_context=None, - server_hostname=None, - **kw - ): - - HTTPConnection.__init__(self, host, port, strict=strict, timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - self.ssl_context = ssl_context - self.server_hostname = server_hostname - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = "https" - - def set_cert( - self, - key_file=None, - cert_file=None, - cert_reqs=None, - key_password=None, - ca_certs=None, - assert_hostname=None, - assert_fingerprint=None, - ca_cert_dir=None, - ca_cert_data=None, - ): - """ - This method should only be called once, before the connection is used. - """ - # If cert_reqs is not provided we'll assume CERT_REQUIRED unless we also - # have an SSLContext object in which case we'll use its verify_mode. - if cert_reqs is None: - if self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - else: - cert_reqs = resolve_cert_reqs(None) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - self.ca_cert_data = ca_cert_data - - def connect(self): - # Add certificate verification - self.sock = conn = self._new_conn() - hostname = self.host - tls_in_tls = False - - if self._is_using_tunnel(): - if self.tls_in_tls_required: - self.sock = conn = self._connect_tls_proxy(hostname, conn) - tls_in_tls = True - - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - server_hostname = hostname - if self.server_hostname is not None: - server_hostname = self.server_hostname - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn( - ( - "System time is way off (before {0}). This will probably " - "lead to SSL verification errors" - ).format(RECENT_DATE), - SystemTimeWarning, - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - default_ssl_context = False - if self.ssl_context is None: - default_ssl_context = True - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(self.ssl_version), - cert_reqs=resolve_cert_reqs(self.cert_reqs), - ) - - context = self.ssl_context - context.verify_mode = resolve_cert_reqs(self.cert_reqs) - - # Try to load OS default certs if none are given. - # Works well on Windows (requires Python3.4+) - if ( - not self.ca_certs - and not self.ca_cert_dir - and not self.ca_cert_data - and default_ssl_context - and hasattr(context, "load_default_certs") - ): - context.load_default_certs() - - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - key_password=self.key_password, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - server_hostname=server_hostname, - ssl_context=context, - tls_in_tls=tls_in_tls, - ) - - # If we're using all defaults and the connection - # is TLSv1 or TLSv1.1 we throw a DeprecationWarning - # for the host. - if ( - default_ssl_context - and self.ssl_version is None - and hasattr(self.sock, "version") - and self.sock.version() in {"TLSv1", "TLSv1.1"} - ): # Defensive: - warnings.warn( - "Negotiating TLSv1/TLSv1.1 by default is deprecated " - "and will be disabled in urllib3 v2.0.0. Connecting to " - "'%s' with '%s' can be enabled by explicitly opting-in " - "with 'ssl_version'" % (self.host, self.sock.version()), - DeprecationWarning, - ) - - if self.assert_fingerprint: - assert_fingerprint( - self.sock.getpeercert(binary_form=True), self.assert_fingerprint - ) - elif ( - context.verify_mode != ssl.CERT_NONE - and not getattr(context, "check_hostname", False) - and self.assert_hostname is not False - ): - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = self.sock.getpeercert() - if not cert.get("subjectAltName", ()): - warnings.warn( - ( - "Certificate for {0} has no `subjectAltName`, falling back to check for a " - "`commonName` for now. This feature is being removed by major browsers and " - "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 " - "for details.)".format(hostname) - ), - SubjectAltNameWarning, - ) - _match_hostname(cert, self.assert_hostname or server_hostname) - - self.is_verified = ( - context.verify_mode == ssl.CERT_REQUIRED - or self.assert_fingerprint is not None - ) - - def _connect_tls_proxy(self, hostname, conn): - """ - Establish a TLS connection to the proxy using the provided SSL context. - """ - proxy_config = self.proxy_config - ssl_context = proxy_config.ssl_context - if ssl_context: - # If the user provided a proxy context, we assume CA and client - # certificates have already been set - return ssl_wrap_socket( - sock=conn, - server_hostname=hostname, - ssl_context=ssl_context, - ) - - ssl_context = create_proxy_ssl_context( - self.ssl_version, - self.cert_reqs, - self.ca_certs, - self.ca_cert_dir, - self.ca_cert_data, - ) - - # If no cert was provided, use only the default options for server - # certificate validation - socket = ssl_wrap_socket( - sock=conn, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - ca_cert_data=self.ca_cert_data, - server_hostname=hostname, - ssl_context=ssl_context, - ) - - if ssl_context.verify_mode != ssl.CERT_NONE and not getattr( - ssl_context, "check_hostname", False - ): - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = socket.getpeercert() - if not cert.get("subjectAltName", ()): - warnings.warn( - ( - "Certificate for {0} has no `subjectAltName`, falling back to check for a " - "`commonName` for now. This feature is being removed by major browsers and " - "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 " - "for details.)".format(hostname) - ), - SubjectAltNameWarning, - ) - _match_hostname(cert, hostname) - - self.proxy_is_verified = ssl_context.verify_mode == ssl.CERT_REQUIRED - return socket - - -def _match_hostname(cert, asserted_hostname): - # Our upstream implementation of ssl.match_hostname() - # only applies this normalization to IP addresses so it doesn't - # match DNS SANs so we do the same thing! - stripped_hostname = asserted_hostname.strip("u[]") - if is_ipaddress(stripped_hostname): - asserted_hostname = stripped_hostname - - try: - match_hostname(cert, asserted_hostname) - except CertificateError as e: - log.warning( - "Certificate did not match expected hostname: %s. Certificate: %s", - asserted_hostname, - cert, - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert - raise - - -def _get_default_user_agent(): - return "python-urllib3/%s" % __version__ - - -class DummyConnection(object): - """Used to detect a failed ConnectionCls import.""" - - pass - - -if not ssl: - HTTPSConnection = DummyConnection # noqa: F811 - - -VerifiedHTTPSConnection = HTTPSConnection diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py deleted file mode 100644 index 0872ed770..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +++ /dev/null @@ -1,1140 +0,0 @@ -from __future__ import absolute_import - -import errno -import logging -import re -import socket -import sys -import warnings -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from ._collections import HTTPHeaderDict -from .connection import ( - BaseSSLError, - BrokenPipeError, - DummyConnection, - HTTPConnection, - HTTPException, - HTTPSConnection, - VerifiedHTTPSConnection, - port_by_scheme, -) -from .exceptions import ( - ClosedPoolError, - EmptyPoolError, - HeaderParsingError, - HostChangedError, - InsecureRequestWarning, - LocationValueError, - MaxRetryError, - NewConnectionError, - ProtocolError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, -) -from .packages import six -from .packages.six.moves import queue -from .request import RequestMethods -from .response import HTTPResponse -from .util.connection import is_connection_dropped -from .util.proxy import connection_requires_http_tunnel -from .util.queue import LifoQueue -from .util.request import set_file_position -from .util.response import assert_header_parsing -from .util.retry import Retry -from .util.ssl_match_hostname import CertificateError -from .util.timeout import Timeout -from .util.url import Url, _encode_target -from .util.url import _normalize_host as normalize_host -from .util.url import get_host, parse_url - -try: # Platform-specific: Python 3 - import weakref - - weakref_finalize = weakref.finalize -except AttributeError: # Platform-specific: Python 2 - from .packages.backports.weakref_finalize import weakref_finalize - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -# Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - - .. note:: - ConnectionPool.urlopen() does not normalize or percent-encode target URIs - which is useful if your target server doesn't support percent-encoded - target URIs. - """ - - scheme = None - QueueCls = LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - self.host = _normalize_host(host, scheme=self.scheme) - self._proxy_host = host.lower() - self.port = port - - def __str__(self): - return "%s(host=%r, port=%r)" % (type(self).__name__, self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`http.client.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`http.client.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`http.client.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.ProxyManager` - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.ProxyManager` - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = "http" - ConnectionCls = HTTPConnection - ResponseCls = HTTPResponse - - def __init__( - self, - host, - port=None, - strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, - maxsize=1, - block=False, - headers=None, - retries=None, - _proxy=None, - _proxy_headers=None, - _proxy_config=None, - **conn_kw - ): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - self.proxy_config = _proxy_config - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault("socket_options", []) - - self.conn_kw["proxy"] = self.proxy - self.conn_kw["proxy_config"] = self.proxy_config - - # Do not pass 'self' as callback to 'finalize'. - # Then the 'finalize' would keep an endless living (leak) to self. - # By just passing a reference to the pool allows the garbage collector - # to free self if nobody else has a reference to it. - pool = self.pool - - # Close all the HTTPConnections in the pool before the - # HTTPConnectionPool object is garbage collected. - weakref_finalize(self, _close_pool_connections, pool) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTP connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "80", - ) - - conn = self.ConnectionCls( - host=self.host, - port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, - **self.conn_kw - ) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except queue.Empty: - if self.block: - raise EmptyPoolError( - self, - "Pool reached maximum size and no more connections are allowed.", - ) - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - if getattr(conn, "auto_open", 1) == 0: - # This is a proxied connection that has been mutated by - # http.client._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s. Connection pool size: %s", - self.host, - self.pool.qsize(), - ) - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """Helper that always returns a :class:`urllib3.util.Timeout`""" - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, "errno") and err.errno in _blocking_errnos: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if "timed out" in str(err) or "did not complete (read)" in str( - err - ): # Python < 2.7.4 - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % timeout_value - ) - - def _make_request( - self, conn, method, url, timeout=_Default, chunked=False, **httplib_request_kw - ): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls http.client.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - try: - if chunked: - conn.request_chunked(method, url, **httplib_request_kw) - else: - conn.request(method, url, **httplib_request_kw) - - # We are swallowing BrokenPipeError (errno.EPIPE) since the server is - # legitimately able to close the connection after sending a valid response. - # With this behaviour, the received response is still readable. - except BrokenPipeError: - # Python 3 - pass - except IOError as e: - # Python 2 and macOS/Linux - # EPIPE and ESHUTDOWN are BrokenPipeError on Python 2, and EPROTOTYPE/ECONNRESET are needed on macOS - # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ - if e.errno not in { - errno.EPIPE, - errno.ESHUTDOWN, - errno.EPROTOTYPE, - errno.ECONNRESET, - }: - raise - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, "sock", None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout - ) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: - # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: - # Python 3 - try: - httplib_response = conn.getresponse() - except BaseException as e: - # Remove the TypeError from the exception chain in - # Python 3 (including for exceptions like SystemExit). - # Otherwise it looks like a bug in the code. - six.raise_from(e, None) - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, "_http_vsn_str", "HTTP/?") - log.debug( - '%s://%s:%s "%s %s %s" %s %s', - self.scheme, - self.host, - self.port, - method, - url, - http_version, - httplib_response.status, - httplib_response.length, - ) - - try: - assert_header_parsing(httplib_response.msg) - except (HeaderParsingError, TypeError) as hpe: # Platform-specific: Python 3 - log.warning( - "Failed to parse headers (url=%s): %s", - self._absolute_url(url), - hpe, - exc_info=True, - ) - - return httplib_response - - def _absolute_url(self, path): - return Url(scheme=self.scheme, host=self.host, port=self.port, path=path).url - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - if self.pool is None: - return - # Disable access to the pool - old_pool, self.pool = self.pool, None - - # Close all the HTTPConnections in the pool. - _close_pool_connections(old_pool) - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith("/"): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - if host is not None: - host = _normalize_host(host, scheme=scheme) - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=None, - redirect=True, - assert_same_host=True, - timeout=_Default, - pool_timeout=None, - release_conn=None, - chunked=False, - body_pos=None, - **response_kw - ): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param url: - The URL to perform the request on. - - :param body: - Data to send in the request body, either :class:`str`, :class:`bytes`, - an iterable of :class:`str`/:class:`bytes`, or a file-like object. - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When ``False``, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - - :param \\**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - - parsed_url = parse_url(url) - destination_scheme = parsed_url.scheme - - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get("preload_content", True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - # Ensure that the URL we're connecting to is properly encoded - if url.startswith("/"): - url = six.ensure_str(_encode_target(url)) - else: - url = six.ensure_str(parsed_url.url) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] <https://github.com/urllib3/urllib3/issues/651> - release_this_conn = release_conn - - http_tunnel_required = connection_requires_http_tunnel( - self.proxy, self.proxy_config, destination_scheme - ) - - # Merge the proxy headers. Only done when not using HTTP CONNECT. We - # have to copy the headers dict so we can safely change it without those - # changes being reflected in anyone else's copy. - if not http_tunnel_required: - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr( - conn, "sock", None - ) - if is_new_proxy_conn and http_tunnel_required: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request( - conn, - method, - url, - timeout=timeout_obj, - body=body, - headers=headers, - chunked=chunked, - ) - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Pass method to Response for length checking - response_kw["request_method"] = method - - # Import httplib's response into our own wrapper object - response = self.ResponseCls.from_httplib( - httplib_response, - pool=self, - connection=response_conn, - retries=retries, - **response_kw - ) - - # Everything went great! - clean_exit = True - - except EmptyPoolError: - # Didn't get a connection from the pool, no need to clean up - clean_exit = True - release_this_conn = False - raise - - except ( - TimeoutError, - HTTPException, - SocketError, - ProtocolError, - BaseSSLError, - SSLError, - CertificateError, - ) as e: - # Discard the connection for these exceptions. It will be - # replaced during the next _get_conn() call. - clean_exit = False - - def _is_ssl_error_message_from_http_proxy(ssl_error): - # We're trying to detect the message 'WRONG_VERSION_NUMBER' but - # SSLErrors are kinda all over the place when it comes to the message, - # so we try to cover our bases here! - message = " ".join(re.split("[^a-z]", str(ssl_error).lower())) - return ( - "wrong version number" in message - or "unknown protocol" in message - or "record layer failure" in message - ) - - # Try to detect a common user error with proxies which is to - # set an HTTP proxy to be HTTPS when it should be 'http://' - # (ie {'http': 'http://proxy', 'https': 'https://proxy'}) - # Instead we add a nice error message and point to a URL. - if ( - isinstance(e, BaseSSLError) - and self.proxy - and _is_ssl_error_message_from_http_proxy(e) - and conn.proxy - and conn.proxy.scheme == "https" - ): - e = ProxyError( - "Your proxy appears to only use HTTP and not HTTPS, " - "try changing your proxy URL to be HTTP. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#https-proxy-error-http-proxy", - SSLError(e), - ) - elif isinstance(e, (BaseSSLError, CertificateError)): - e = SSLError(e) - elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: - e = ProxyError("Cannot connect to proxy.", e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError("Connection aborted.", e) - - retries = retries.increment( - method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2] - ) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - conn = conn and conn.close() - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning( - "Retrying (%r) after connection broken by '%r': %s", retries, err, url - ) - return self.urlopen( - method, - url, - body, - headers, - retries, - redirect, - assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - body = None - headers = HTTPHeaderDict(headers)._prepare_for_method_change() - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, - redirect_location, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.headers.get("Retry-After")) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - response.drain_conn() - raise - return response - - response.drain_conn() - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, - url, - body, - headers, - retries=retries, - redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, - pool_timeout=pool_timeout, - release_conn=release_conn, - chunked=chunked, - body_pos=body_pos, - **response_kw - ) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - :class:`.HTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl` - is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = "https" - ConnectionCls = HTTPSConnection - - def __init__( - self, - host, - port=None, - strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, - maxsize=1, - block=False, - headers=None, - retries=None, - _proxy=None, - _proxy_headers=None, - key_file=None, - cert_file=None, - cert_reqs=None, - key_password=None, - ca_certs=None, - ssl_version=None, - assert_hostname=None, - assert_fingerprint=None, - ca_cert_dir=None, - **conn_kw - ): - - HTTPConnectionPool.__init__( - self, - host, - port, - strict, - timeout, - maxsize, - block, - headers, - retries, - _proxy, - _proxy_headers, - **conn_kw - ) - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.key_password = key_password - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert( - key_file=self.key_file, - key_password=self.key_password, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint, - ) - conn.ssl_version = self.ssl_version - return conn - - def _prepare_proxy(self, conn): - """ - Establishes a tunnel connection through HTTP CONNECT. - - Tunnel connection is established early because otherwise httplib would - improperly set Host: header to proxy's IP:port. - """ - - conn.set_tunnel(self._proxy_host, self.port, self.proxy_headers) - - if self.proxy.scheme == "https": - conn.tls_in_tls_required = True - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`http.client.HTTPSConnection`. - """ - self.num_connections += 1 - log.debug( - "Starting new HTTPS connection (%d): %s:%s", - self.num_connections, - self.host, - self.port or "443", - ) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError( - "Can't connect to HTTPS URL because the SSL module is not available." - ) - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls( - host=actual_host, - port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, - cert_file=self.cert_file, - key_file=self.key_file, - key_password=self.key_password, - **self.conn_kw - ) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, "sock", None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn( - ( - "Unverified HTTPS request is being made to host '%s'. " - "Adding certificate verification is strongly advised. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings" % conn.host - ), - InsecureRequestWarning, - ) - - if getattr(conn, "proxy_is_verified", None) is False: - warnings.warn( - ( - "Unverified HTTPS connection done to an HTTPS proxy. " - "Adding certificate verification is strongly advised. See: " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings" - ), - InsecureRequestWarning, - ) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - port = port or port_by_scheme.get(scheme, 80) - if scheme == "https": - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) - - -def _normalize_host(host, scheme): - """ - Normalize hosts for comparisons and use with sockets. - """ - - host = normalize_host(host, scheme) - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - if host.startswith("[") and host.endswith("]"): - host = host[1:-1] - return host - - -def _close_pool_connections(pool): - """Drains a queue of connections and closes each one.""" - try: - while True: - conn = pool.get(block=False) - if conn: - conn.close() - except queue.Empty: - pass # Done. diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 60ff1d45e14159ba85eb429c0c582005345e1518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmdPq<K<!if=e4;WP<3&AOZ#$p^VRLKt=;Y5Q8#<CZpd<h9V{)|1(JP)<kEkn9$<X zqT-mul++?aOG|^8^8BLgn1Z7GtkmR^;+W)|{L+-9#Nt%l%)HDJAW>YBn3I!Qq-z)x zP+5|ZpJ!}n5^oY;VPO^@lA2qPlUR}(Uy@r8<CB>bQ=D0ns#}nloSm4SS{zf5S)d<Z zmYSE6U!-4Jl#`R0WUQZ@pI1_pnWP^d4>CPIUaz3?7Kcr4eoARhs$CH)(1jpB6oVL_ Mm>C%vi<p5d0C4q2*Z=?k diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-314.pyc deleted file mode 100644 index 28cc553879e1cb9537f7b4dadd90775f9638e51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1949 zcmdT_&u<$=6rNo>wq?5^2~|r&aVL$ya!I^RYNbsYDh2A6C?#0i6eP4_wcefBldN}F zGh?^O$(*@xLLiV35)$e$5>ih{{0VLYYPI50^#I2ZSK`W>jh&=P;m(uxo7wsC_RaUc zdHeR@i8KOxwDl+bIfl?P`O-JF*Xdq_P8;b+pihymEGk0L)ze6*dJHh8#{uK|0N{Y0 z08Hr0I4UGJ-%YR7DaQ@pX}Sal%x_VLz&o)#j)jjMB8V-ps1v*p1i0+gs7EmIT9o-- zgLtBtUbg$e$W{gfL89&)KpPnfG?A5h?Nue;>(w#{oki!6A=gLNUjv~j%LO$Yq1<$R z+j31S2uSqpa2UoQPUm3gKI+Qd;WzKi8Fx5g+^`(Nre<d^8h3rRZouj_I0QFr*Kayi zi<3#}Q31e(<+_ATP8pRAQTM$|Qzf%x-n%kmu8>CHT7sCO5g4~<)!<Z+$-uJLts3D* zKm*Ne5zq0N)?}_rtCuv}_XML=?I19-$5S!b2(u9O{vlWj;*}3S4bVovXWrP(oO_&^ z>11Yp9WQN<&vfE5ECF*b<2K&?B--^~+&ZuKxa|uBRpPMei0R72=)sV#UU?rO;67%( z3Te|x;4{H7U5(NY!DCPgYkD5_YM6S_=qhDg;2QA=vjp`$%q`EU`uB=y5Ej9l04vVn zdDt&#10-fKf<aq#k3xRk4a@~~UFp{9`<TGhrodFBr9hi@9lL}>0E7e0wxBICfw|xF zEj?`bP0Z_l({;SOz#buvRIptq_Bvkm8F(tDIU%?%M8M}XEs{gA=KD356m7qu?dL~x ze4A^a4$rZeqxEA>hr<h%N_qL_;&R#4?<}t@eozimK_s2&%Y|5!)=>3%nCxYq4FJ7S zB3Tl8;mN})Fne6FL72+I!^Z*I==mVZzV`XG$C;&0X6f7NcWYm-bqe#p<=**a^kHtP z6JI*644GSbi@IM%9&}_tyJwYs1@uP{nuYGcJ#?UUME7ui!OQkk<WY{84n?Na^Iwq% zJYssR)Vu$nsyLHnEPUm5S^uc4o3}r_vGVbPUJlV__Bv@1*AHYp(eB5Y<bs`$i(@q+ z!ZaiTgm{;V`Vl^vJaYu6pu?{Mw9%7H?uYX~UikjP!_36rNX?GzNcd^w!RXfLgWOi` zN$Sj3)7_Xlo%ka$^x4`Mx$Okr8Bhnt{?D|sA<4urz~;!!NYRJtwZ=x|?2B4tQZo^p zg$|zwIL=*Oa+m*C?mEM7ZYSQ7<mHc(Co>QEiFaikgI|;U;i#LL>m*>rhSKU3Z|sHi zVqD>=V+G!9v>KerQh6R8F4wow)67ux%|bFvnkHOW)7%q|tgF$L+EYh#Ou6^S`NP!w z-e2z;I|H*aT3!Iyi7ATmm#Ql9ZVD;s-GriC-c2QyTgvXqm@>ATjVbx(SydU1zWxs| C9Hv_U diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-314.pyc deleted file mode 100644 index f5b9cda45d86fae1ab0f90ec2ac4ae06b9528946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12080 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%0DJrI<-I@J~Ql!oAZ2_Gh82 z?0NBUweq&Q;Ur0Tup!#*3jA=n8XBvF#@1b9|Jo7WbalSH{G(e{SM-T1TJweOefzuL ze&QR^?d>O{)0_UT2cG*7*JnD<F`ooSw`^b&0dEC&J$U*1FPGgcjJoSpxeK_-NVw;e zySnH>ZfI)Y7=sJ-ebYH+d5G@3(cUWl3|CbFi2SzTsRYp@J4FWgpao|caE3MRGkDCv z+la+3Lu8C{Xp8GIeV(k!sRkdm;yrpHXJ}1*#mK41k+8$mfkst=%(S**FzEJJh01m4 zcfqv}y^1!%1aONjEEn*;RAVJ%*mQOjc~p1Zpa6a&TTF}aF$Q{V@t9M*4XajfknH%$ zA>2L5)NiEf19?)h;6xO|9qbu1tDK3HpzRWFzHy;+3SN}H*8HihVNZiCH+|g?qd$JB z>We+`#Wq8`9u)2u9$oz)_|LsR@7)MpxqJSpD{$|Xd#~Jm<>B%>xp#68bB~v+@#F9- z$B%EigZD0e?;;x2Gt4Lc5nxd81i+pSYitRqQY>N5)hn==Wo|B+1m_uT6|oaDv_eD- zVJfy%3a<CyV-sLSB4YGQ+>aR^Xz><i=+%m--9$WvA}&?zf=p>orRbM$S@`lR!{u_R z6a<VsO_lIf3oM$PP!(hZ2V!;!{-s&Se)Gq0MxUA5t@f=wVe7=F`x$HS(>9Z}6Z{-+ zpym(auf4P8538==R(p}L_I;W)4_cj{PBSiR__H3!>I5=+BI)$8sQ4Y29KXL=D#`G% z7c34>n3%&_8$=(#4q2xAt2p5Xi&H=U6LCXD3uac#@W6>S%xHurqJJP0m-yRpG)5%t zGu1dS8GM?fhBCBZoQMaFh8$F5#aWX199*XYPpS;)rWJa8h)Pc);<-|S+NYLj{cBqI znw3{0O|BXGJ**nJae(Zbg|%>^y04cJB1E~hPhybJio5wMS0&i|rhoIQ1fUi}I=LqM zYXt{~Ua-qj`I~uZ#|Joy{h0cd({b^KFbelu`UtYRnPHe`rag@1*Kl{oM1Msbza-vY z65nSQ8)N#6K=x}tVGe#wc7IHUJ|_JilfjP(Tep~*;K!CRkhnH)wJrRlE&R~F-ZpT@ zyw%1qj)%Vw?jqyZvSaz0R$eqS;kVz~BKWM&*@%Cz>Wf!=@jDP5h*iVKE8*j160CJb ztDQ$Hokz<gPz&y<1`k()hs&hB*1fOVeX7!Z>In(`re3lUdk4-NgqzauOyeqozm-s& V{nXiZnjt@99H%|zpSc;x{~L%vcB=pY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-314.pyc deleted file mode 100644 index 5e51379d6cef5803e0db38e99c0ada4c79bcbc13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5878 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 HSUdg;|4cVZ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-314.pyc deleted file mode 100644 index 54454c96290762c49e321000189915d2b31de70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25213 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-314.pyc deleted file mode 100644 index b73400d30d53bb74b08a13d568f372eb6d9dc697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36604 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-314.pyc deleted file mode 100644 index 3a5ea6cec901c514f760144e26e8369764fd2a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7996 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 XO@4N&`+O(+QMc#(G4`XQ42=H=9<ir? diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py deleted file mode 100644 index 8765b907d..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -This module provides means to detect the App Engine environment. -""" - -import os - - -def is_appengine(): - return is_local_appengine() or is_prod_appengine() - - -def is_appengine_sandbox(): - """Reports if the app is running in the first generation sandbox. - - The second generation runtimes are technically still in a sandbox, but it - is much less restrictive, so generally you shouldn't need to check for it. - see https://cloud.google.com/appengine/docs/standard/runtimes - """ - return is_appengine() and os.environ["APPENGINE_RUNTIME"] == "python27" - - -def is_local_appengine(): - return "APPENGINE_RUNTIME" in os.environ and os.environ.get( - "SERVER_SOFTWARE", "" - ).startswith("Development/") - - -def is_prod_appengine(): - return "APPENGINE_RUNTIME" in os.environ and os.environ.get( - "SERVER_SOFTWARE", "" - ).startswith("Google App Engine/") - - -def is_prod_appengine_mvms(): - """Deprecated.""" - return False diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 09e8b11cb66893355f52186b9643aadbacb7cc00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmXw!u}TCn5QY;EMGo{OtVGth+##Nbjjf2t*#(AdcF=g)O_<55*ZC}VmcEMRwKmq? z3z)$97yo?2U(7#8`+H-N_4WDV%KR?&FS&vBPKGyeCl17+y!jBcmG^ZCSMOKn`ks+k zn--~_%}(@7poNYUp3o-N)`y{O3}fYbm$Gp(-Xm4DzFnrr&`;_qOyTwH6z14PZxTZ4 zqP}*GW|y#v#xBeQvW_k)c*edBqz3ZdH4|k+pU5=|80|oq$n+coB?VB<0UXEWYWJcG V?cni}wsYn36c_j%NhxWR=@0ufP3r&v diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-314.pyc deleted file mode 100644 index fc5788b388eb82c2019ce85b3e5537d8c2e5a674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17486 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-314.pyc deleted file mode 100644 index e8c3bb5c3a3e23b3d97c8707bf0b1df9d57903d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15004 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py deleted file mode 100644 index 264d564db..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +++ /dev/null @@ -1,519 +0,0 @@ -""" -This module uses ctypes to bind a whole bunch of functions and constants from -SecureTransport. The goal here is to provide the low-level API to -SecureTransport. These are essentially the C-level functions and constants, and -they're pretty gross to work with. - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - - Copyright (c) 2015-2016 Will Bond <will@wbond.net> - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - -import platform -from ctypes import ( - CDLL, - CFUNCTYPE, - POINTER, - c_bool, - c_byte, - c_char_p, - c_int32, - c_long, - c_size_t, - c_uint32, - c_ulong, - c_void_p, -) -from ctypes.util import find_library - -from ...packages.six import raise_from - -if platform.system() != "Darwin": - raise ImportError("Only macOS is supported") - -version = platform.mac_ver()[0] -version_info = tuple(map(int, version.split("."))) -if version_info < (10, 8): - raise OSError( - "Only OS X 10.8 and newer are supported, not %s.%s" - % (version_info[0], version_info[1]) - ) - - -def load_cdll(name, macos10_16_path): - """Loads a CDLL by name, falling back to known path on 10.16+""" - try: - # Big Sur is technically 11 but we use 10.16 due to the Big Sur - # beta being labeled as 10.16. - if version_info >= (10, 16): - path = macos10_16_path - else: - path = find_library(name) - if not path: - raise OSError # Caught and reraised as 'ImportError' - return CDLL(path, use_errno=True) - except OSError: - raise_from(ImportError("The library %s failed to load" % name), None) - - -Security = load_cdll( - "Security", "/System/Library/Frameworks/Security.framework/Security" -) -CoreFoundation = load_cdll( - "CoreFoundation", - "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", -) - - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFDictionary = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong - -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFDictionaryRef = POINTER(CFDictionary) -CFArrayCallBacks = c_void_p -CFDictionaryKeyCallBacks = c_void_p -CFDictionaryValueCallBacks = c_void_p - -SecCertificateRef = POINTER(c_void_p) -SecExternalFormat = c_uint32 -SecExternalItemType = c_uint32 -SecIdentityRef = POINTER(c_void_p) -SecItemImportExportFlags = c_uint32 -SecItemImportExportKeyParameters = c_void_p -SecKeychainRef = POINTER(c_void_p) -SSLProtocol = c_uint32 -SSLCipherSuite = c_uint32 -SSLContextRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SSLConnectionRef = c_uint32 -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 -SSLProtocolSide = c_uint32 -SSLConnectionType = c_uint32 -SSLSessionOption = c_uint32 - - -try: - Security.SecItemImport.argtypes = [ - CFDataRef, - CFStringRef, - POINTER(SecExternalFormat), - POINTER(SecExternalItemType), - SecItemImportExportFlags, - POINTER(SecItemImportExportKeyParameters), - SecKeychainRef, - POINTER(CFArrayRef), - ] - Security.SecItemImport.restype = OSStatus - - Security.SecCertificateGetTypeID.argtypes = [] - Security.SecCertificateGetTypeID.restype = CFTypeID - - Security.SecIdentityGetTypeID.argtypes = [] - Security.SecIdentityGetTypeID.restype = CFTypeID - - Security.SecKeyGetTypeID.argtypes = [] - Security.SecKeyGetTypeID.restype = CFTypeID - - Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [SecCertificateRef] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecIdentityCreateWithCertificate.argtypes = [ - CFTypeRef, - SecCertificateRef, - POINTER(SecIdentityRef), - ] - Security.SecIdentityCreateWithCertificate.restype = OSStatus - - Security.SecKeychainCreate.argtypes = [ - c_char_p, - c_uint32, - c_void_p, - Boolean, - c_void_p, - POINTER(SecKeychainRef), - ] - Security.SecKeychainCreate.restype = OSStatus - - Security.SecKeychainDelete.argtypes = [SecKeychainRef] - Security.SecKeychainDelete.restype = OSStatus - - Security.SecPKCS12Import.argtypes = [ - CFDataRef, - CFDictionaryRef, - POINTER(CFArrayRef), - ] - Security.SecPKCS12Import.restype = OSStatus - - SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t)) - SSLWriteFunc = CFUNCTYPE( - OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t) - ) - - Security.SSLSetIOFuncs.argtypes = [SSLContextRef, SSLReadFunc, SSLWriteFunc] - Security.SSLSetIOFuncs.restype = OSStatus - - Security.SSLSetPeerID.argtypes = [SSLContextRef, c_char_p, c_size_t] - Security.SSLSetPeerID.restype = OSStatus - - Security.SSLSetCertificate.argtypes = [SSLContextRef, CFArrayRef] - Security.SSLSetCertificate.restype = OSStatus - - Security.SSLSetCertificateAuthorities.argtypes = [SSLContextRef, CFTypeRef, Boolean] - Security.SSLSetCertificateAuthorities.restype = OSStatus - - Security.SSLSetConnection.argtypes = [SSLContextRef, SSLConnectionRef] - Security.SSLSetConnection.restype = OSStatus - - Security.SSLSetPeerDomainName.argtypes = [SSLContextRef, c_char_p, c_size_t] - Security.SSLSetPeerDomainName.restype = OSStatus - - Security.SSLHandshake.argtypes = [SSLContextRef] - Security.SSLHandshake.restype = OSStatus - - Security.SSLRead.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)] - Security.SSLRead.restype = OSStatus - - Security.SSLWrite.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)] - Security.SSLWrite.restype = OSStatus - - Security.SSLClose.argtypes = [SSLContextRef] - Security.SSLClose.restype = OSStatus - - Security.SSLGetNumberSupportedCiphers.argtypes = [SSLContextRef, POINTER(c_size_t)] - Security.SSLGetNumberSupportedCiphers.restype = OSStatus - - Security.SSLGetSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t), - ] - Security.SSLGetSupportedCiphers.restype = OSStatus - - Security.SSLSetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - c_size_t, - ] - Security.SSLSetEnabledCiphers.restype = OSStatus - - Security.SSLGetNumberEnabledCiphers.argtype = [SSLContextRef, POINTER(c_size_t)] - Security.SSLGetNumberEnabledCiphers.restype = OSStatus - - Security.SSLGetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t), - ] - Security.SSLGetEnabledCiphers.restype = OSStatus - - Security.SSLGetNegotiatedCipher.argtypes = [SSLContextRef, POINTER(SSLCipherSuite)] - Security.SSLGetNegotiatedCipher.restype = OSStatus - - Security.SSLGetNegotiatedProtocolVersion.argtypes = [ - SSLContextRef, - POINTER(SSLProtocol), - ] - Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus - - Security.SSLCopyPeerTrust.argtypes = [SSLContextRef, POINTER(SecTrustRef)] - Security.SSLCopyPeerTrust.restype = OSStatus - - Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argstypes = [SecTrustRef, Boolean] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [SecTrustRef, POINTER(SecTrustResultType)] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustGetCertificateCount.argtypes = [SecTrustRef] - Security.SecTrustGetCertificateCount.restype = CFIndex - - Security.SecTrustGetCertificateAtIndex.argtypes = [SecTrustRef, CFIndex] - Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef - - Security.SSLCreateContext.argtypes = [ - CFAllocatorRef, - SSLProtocolSide, - SSLConnectionType, - ] - Security.SSLCreateContext.restype = SSLContextRef - - Security.SSLSetSessionOption.argtypes = [SSLContextRef, SSLSessionOption, Boolean] - Security.SSLSetSessionOption.restype = OSStatus - - Security.SSLSetProtocolVersionMin.argtypes = [SSLContextRef, SSLProtocol] - Security.SSLSetProtocolVersionMin.restype = OSStatus - - Security.SSLSetProtocolVersionMax.argtypes = [SSLContextRef, SSLProtocol] - Security.SSLSetProtocolVersionMax.restype = OSStatus - - try: - Security.SSLSetALPNProtocols.argtypes = [SSLContextRef, CFArrayRef] - Security.SSLSetALPNProtocols.restype = OSStatus - except AttributeError: - # Supported only in 10.12+ - pass - - Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SSLReadFunc = SSLReadFunc - Security.SSLWriteFunc = SSLWriteFunc - Security.SSLContextRef = SSLContextRef - Security.SSLProtocol = SSLProtocol - Security.SSLCipherSuite = SSLCipherSuite - Security.SecIdentityRef = SecIdentityRef - Security.SecKeychainRef = SecKeychainRef - Security.SecTrustRef = SecTrustRef - Security.SecTrustResultType = SecTrustResultType - Security.SecExternalFormat = SecExternalFormat - Security.OSStatus = OSStatus - - Security.kSecImportExportPassphrase = CFStringRef.in_dll( - Security, "kSecImportExportPassphrase" - ) - Security.kSecImportItemIdentity = CFStringRef.in_dll( - Security, "kSecImportItemIdentity" - ) - - # CoreFoundation time! - CoreFoundation.CFRetain.argtypes = [CFTypeRef] - CoreFoundation.CFRetain.restype = CFTypeRef - - CoreFoundation.CFRelease.argtypes = [CFTypeRef] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding, - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding, - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [CFDataRef] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFDictionaryCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - POINTER(CFTypeRef), - CFIndex, - CFDictionaryKeyCallBacks, - CFDictionaryValueCallBacks, - ] - CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef - - CoreFoundation.CFDictionaryGetValue.argtypes = [CFDictionaryRef, CFTypeRef] - CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( - CoreFoundation, "kCFAllocatorDefault" - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeArrayCallBacks" - ) - CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeDictionaryKeyCallBacks" - ) - CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll( - CoreFoundation, "kCFTypeDictionaryValueCallBacks" - ) - - CoreFoundation.CFTypeRef = CFTypeRef - CoreFoundation.CFArrayRef = CFArrayRef - CoreFoundation.CFStringRef = CFStringRef - CoreFoundation.CFDictionaryRef = CFDictionaryRef - -except (AttributeError): - raise ImportError("Error initializing ctypes") - - -class CFConst(object): - """ - A class object that acts as essentially a namespace for CoreFoundation - constants. - """ - - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - -class SecurityConst(object): - """ - A class object that acts as essentially a namespace for Security constants. - """ - - kSSLSessionOptionBreakOnServerAuth = 0 - - kSSLProtocol2 = 1 - kSSLProtocol3 = 2 - kTLSProtocol1 = 4 - kTLSProtocol11 = 7 - kTLSProtocol12 = 8 - # SecureTransport does not support TLS 1.3 even if there's a constant for it - kTLSProtocol13 = 10 - kTLSProtocolMaxSupported = 999 - - kSSLClientSide = 1 - kSSLStreamType = 0 - - kSecFormatPEMSequence = 10 - - kSecTrustResultInvalid = 0 - kSecTrustResultProceed = 1 - # This gap is present on purpose: this was kSecTrustResultConfirm, which - # is deprecated. - kSecTrustResultDeny = 3 - kSecTrustResultUnspecified = 4 - kSecTrustResultRecoverableTrustFailure = 5 - kSecTrustResultFatalTrustFailure = 6 - kSecTrustResultOtherError = 7 - - errSSLProtocol = -9800 - errSSLWouldBlock = -9803 - errSSLClosedGraceful = -9805 - errSSLClosedNoNotify = -9816 - errSSLClosedAbort = -9806 - - errSSLXCertChainInvalid = -9807 - errSSLCrypto = -9809 - errSSLInternal = -9810 - errSSLCertExpired = -9814 - errSSLCertNotYetValid = -9815 - errSSLUnknownRootCert = -9812 - errSSLNoRootCert = -9813 - errSSLHostNameMismatch = -9843 - errSSLPeerHandshakeFail = -9824 - errSSLPeerUserCancelled = -9839 - errSSLWeakPeerEphemeralDHKey = -9850 - errSSLServerAuthCompleted = -9841 - errSSLRecordOverflow = -9847 - - errSecVerifyFailed = -67808 - errSecNoTrustSettings = -25263 - errSecItemNotFound = -25300 - errSecInvalidTrustSettings = -25262 - - # Cipher suites. We only pick the ones our default cipher string allows. - # Source: https://developer.apple.com/documentation/security/1550981-ssl_cipher_suite_values - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA8 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B - TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 - TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D - TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C - TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D - TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C - TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F - TLS_AES_128_GCM_SHA256 = 0x1301 - TLS_AES_256_GCM_SHA384 = 0x1302 - TLS_AES_128_CCM_8_SHA256 = 0x1305 - TLS_AES_128_CCM_SHA256 = 0x1304 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py deleted file mode 100644 index fa0b245d2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +++ /dev/null @@ -1,397 +0,0 @@ -""" -Low-level helpers for the SecureTransport bindings. - -These are Python functions that are not directly related to the high-level APIs -but are necessary to get them to work. They include a whole bunch of low-level -CoreFoundation messing about and memory management. The concerns in this module -are almost entirely about trying to avoid memory leaks and providing -appropriate and useful assistance to the higher-level code. -""" -import base64 -import ctypes -import itertools -import os -import re -import ssl -import struct -import tempfile - -from .bindings import CFConst, CoreFoundation, Security - -# This regular expression is used to grab PEM data out of a PEM bundle. -_PEM_CERTS_RE = re.compile( - b"-----BEGIN CERTIFICATE-----\n(.*?)\n-----END CERTIFICATE-----", re.DOTALL -) - - -def _cf_data_from_bytes(bytestring): - """ - Given a bytestring, create a CFData object from it. This CFData object must - be CFReleased by the caller. - """ - return CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, bytestring, len(bytestring) - ) - - -def _cf_dictionary_from_tuples(tuples): - """ - Given a list of Python tuples, create an associated CFDictionary. - """ - dictionary_size = len(tuples) - - # We need to get the dictionary keys and values out in the same order. - keys = (t[0] for t in tuples) - values = (t[1] for t in tuples) - cf_keys = (CoreFoundation.CFTypeRef * dictionary_size)(*keys) - cf_values = (CoreFoundation.CFTypeRef * dictionary_size)(*values) - - return CoreFoundation.CFDictionaryCreate( - CoreFoundation.kCFAllocatorDefault, - cf_keys, - cf_values, - dictionary_size, - CoreFoundation.kCFTypeDictionaryKeyCallBacks, - CoreFoundation.kCFTypeDictionaryValueCallBacks, - ) - - -def _cfstr(py_bstr): - """ - Given a Python binary data, create a CFString. - The string must be CFReleased by the caller. - """ - c_str = ctypes.c_char_p(py_bstr) - cf_str = CoreFoundation.CFStringCreateWithCString( - CoreFoundation.kCFAllocatorDefault, - c_str, - CFConst.kCFStringEncodingUTF8, - ) - return cf_str - - -def _create_cfstring_array(lst): - """ - Given a list of Python binary data, create an associated CFMutableArray. - The array must be CFReleased by the caller. - - Raises an ssl.SSLError on failure. - """ - cf_arr = None - try: - cf_arr = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cf_arr: - raise MemoryError("Unable to allocate memory!") - for item in lst: - cf_str = _cfstr(item) - if not cf_str: - raise MemoryError("Unable to allocate memory!") - try: - CoreFoundation.CFArrayAppendValue(cf_arr, cf_str) - finally: - CoreFoundation.CFRelease(cf_str) - except BaseException as e: - if cf_arr: - CoreFoundation.CFRelease(cf_arr) - raise ssl.SSLError("Unable to allocate array: %s" % (e,)) - return cf_arr - - -def _cf_string_to_unicode(value): - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - - Yes, it annoys me quite a lot that this function is this complex. - """ - value_as_void_p = ctypes.cast(value, ctypes.POINTER(ctypes.c_void_p)) - - string = CoreFoundation.CFStringGetCStringPtr( - value_as_void_p, CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - value_as_void_p, buffer, 1024, CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError("Error copying C string from CFStringRef") - string = buffer.value - if string is not None: - string = string.decode("utf-8") - return string - - -def _assert_no_error(error, exception_class=None): - """ - Checks the return code and throws an exception if there is an error to - report - """ - if error == 0: - return - - cf_error_string = Security.SecCopyErrorMessageString(error, None) - output = _cf_string_to_unicode(cf_error_string) - CoreFoundation.CFRelease(cf_error_string) - - if output is None or output == u"": - output = u"OSStatus %s" % error - - if exception_class is None: - exception_class = ssl.SSLError - - raise exception_class(output) - - -def _cert_array_from_pem(pem_bundle): - """ - Given a bundle of certs in PEM format, turns them into a CFArray of certs - that can be used to validate a cert chain. - """ - # Normalize the PEM bundle's line endings. - pem_bundle = pem_bundle.replace(b"\r\n", b"\n") - - der_certs = [ - base64.b64decode(match.group(1)) for match in _PEM_CERTS_RE.finditer(pem_bundle) - ] - if not der_certs: - raise ssl.SSLError("No root certificates specified") - - cert_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - if not cert_array: - raise ssl.SSLError("Unable to allocate memory!") - - try: - for der_bytes in der_certs: - certdata = _cf_data_from_bytes(der_bytes) - if not certdata: - raise ssl.SSLError("Unable to allocate memory!") - cert = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, certdata - ) - CoreFoundation.CFRelease(certdata) - if not cert: - raise ssl.SSLError("Unable to build cert object!") - - CoreFoundation.CFArrayAppendValue(cert_array, cert) - CoreFoundation.CFRelease(cert) - except Exception: - # We need to free the array before the exception bubbles further. - # We only want to do that if an error occurs: otherwise, the caller - # should free. - CoreFoundation.CFRelease(cert_array) - raise - - return cert_array - - -def _is_cert(item): - """ - Returns True if a given CFTypeRef is a certificate. - """ - expected = Security.SecCertificateGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _is_identity(item): - """ - Returns True if a given CFTypeRef is an identity. - """ - expected = Security.SecIdentityGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _temporary_keychain(): - """ - This function creates a temporary Mac keychain that we can use to work with - credentials. This keychain uses a one-time password and a temporary file to - store the data. We expect to have one keychain per socket. The returned - SecKeychainRef must be freed by the caller, including calling - SecKeychainDelete. - - Returns a tuple of the SecKeychainRef and the path to the temporary - directory that contains it. - """ - # Unfortunately, SecKeychainCreate requires a path to a keychain. This - # means we cannot use mkstemp to use a generic temporary file. Instead, - # we're going to create a temporary directory and a filename to use there. - # This filename will be 8 random bytes expanded into base64. We also need - # some random bytes to password-protect the keychain we're creating, so we - # ask for 40 random bytes. - random_bytes = os.urandom(40) - filename = base64.b16encode(random_bytes[:8]).decode("utf-8") - password = base64.b16encode(random_bytes[8:]) # Must be valid UTF-8 - tempdirectory = tempfile.mkdtemp() - - keychain_path = os.path.join(tempdirectory, filename).encode("utf-8") - - # We now want to create the keychain itself. - keychain = Security.SecKeychainRef() - status = Security.SecKeychainCreate( - keychain_path, len(password), password, False, None, ctypes.byref(keychain) - ) - _assert_no_error(status) - - # Having created the keychain, we want to pass it off to the caller. - return keychain, tempdirectory - - -def _load_items_from_file(keychain, path): - """ - Given a single file, loads all the trust objects from it into arrays and - the keychain. - Returns a tuple of lists: the first list is a list of identities, the - second a list of certs. - """ - certificates = [] - identities = [] - result_array = None - - with open(path, "rb") as f: - raw_filedata = f.read() - - try: - filedata = CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, raw_filedata, len(raw_filedata) - ) - result_array = CoreFoundation.CFArrayRef() - result = Security.SecItemImport( - filedata, # cert data - None, # Filename, leaving it out for now - None, # What the type of the file is, we don't care - None, # what's in the file, we don't care - 0, # import flags - None, # key params, can include passphrase in the future - keychain, # The keychain to insert into - ctypes.byref(result_array), # Results - ) - _assert_no_error(result) - - # A CFArray is not very useful to us as an intermediary - # representation, so we are going to extract the objects we want - # and then free the array. We don't need to keep hold of keys: the - # keychain already has them! - result_count = CoreFoundation.CFArrayGetCount(result_array) - for index in range(result_count): - item = CoreFoundation.CFArrayGetValueAtIndex(result_array, index) - item = ctypes.cast(item, CoreFoundation.CFTypeRef) - - if _is_cert(item): - CoreFoundation.CFRetain(item) - certificates.append(item) - elif _is_identity(item): - CoreFoundation.CFRetain(item) - identities.append(item) - finally: - if result_array: - CoreFoundation.CFRelease(result_array) - - CoreFoundation.CFRelease(filedata) - - return (identities, certificates) - - -def _load_client_cert_chain(keychain, *paths): - """ - Load certificates and maybe keys from a number of files. Has the end goal - of returning a CFArray containing one SecIdentityRef, and then zero or more - SecCertificateRef objects, suitable for use as a client certificate trust - chain. - """ - # Ok, the strategy. - # - # This relies on knowing that macOS will not give you a SecIdentityRef - # unless you have imported a key into a keychain. This is a somewhat - # artificial limitation of macOS (for example, it doesn't necessarily - # affect iOS), but there is nothing inside Security.framework that lets you - # get a SecIdentityRef without having a key in a keychain. - # - # So the policy here is we take all the files and iterate them in order. - # Each one will use SecItemImport to have one or more objects loaded from - # it. We will also point at a keychain that macOS can use to work with the - # private key. - # - # Once we have all the objects, we'll check what we actually have. If we - # already have a SecIdentityRef in hand, fab: we'll use that. Otherwise, - # we'll take the first certificate (which we assume to be our leaf) and - # ask the keychain to give us a SecIdentityRef with that cert's associated - # key. - # - # We'll then return a CFArray containing the trust chain: one - # SecIdentityRef and then zero-or-more SecCertificateRef objects. The - # responsibility for freeing this CFArray will be with the caller. This - # CFArray must remain alive for the entire connection, so in practice it - # will be stored with a single SSLSocket, along with the reference to the - # keychain. - certificates = [] - identities = [] - - # Filter out bad paths. - paths = (path for path in paths if path) - - try: - for file_path in paths: - new_identities, new_certs = _load_items_from_file(keychain, file_path) - identities.extend(new_identities) - certificates.extend(new_certs) - - # Ok, we have everything. The question is: do we have an identity? If - # not, we want to grab one from the first cert we have. - if not identities: - new_identity = Security.SecIdentityRef() - status = Security.SecIdentityCreateWithCertificate( - keychain, certificates[0], ctypes.byref(new_identity) - ) - _assert_no_error(status) - identities.append(new_identity) - - # We now want to release the original certificate, as we no longer - # need it. - CoreFoundation.CFRelease(certificates.pop(0)) - - # We now need to build a new CFArray that holds the trust chain. - trust_chain = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - for item in itertools.chain(identities, certificates): - # ArrayAppendValue does a CFRetain on the item. That's fine, - # because the finally block will release our other refs to them. - CoreFoundation.CFArrayAppendValue(trust_chain, item) - - return trust_chain - finally: - for obj in itertools.chain(identities, certificates): - CoreFoundation.CFRelease(obj) - - -TLS_PROTOCOL_VERSIONS = { - "SSLv2": (0, 2), - "SSLv3": (3, 0), - "TLSv1": (3, 1), - "TLSv1.1": (3, 2), - "TLSv1.2": (3, 3), -} - - -def _build_tls_unknown_ca_alert(version): - """ - Builds a TLS alert record for an unknown CA. - """ - ver_maj, ver_min = TLS_PROTOCOL_VERSIONS[version] - severity_fatal = 0x02 - description_unknown_ca = 0x30 - msg = struct.pack(">BB", severity_fatal, description_unknown_ca) - msg_len = len(msg) - record_type_alert = 0x15 - record = struct.pack(">BBBH", record_type_alert, ver_maj, ver_min, msg_len) + msg - return record diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py deleted file mode 100644 index 1717ee22c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +++ /dev/null @@ -1,314 +0,0 @@ -""" -This module provides a pool manager that uses Google App Engine's -`URLFetch Service <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - -Example usage:: - - from pip._vendor.urllib3 import PoolManager - from pip._vendor.urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox - - if is_appengine_sandbox(): - # AppEngineManager uses AppEngine's URLFetch API behind the scenes - http = AppEngineManager() - else: - # PoolManager uses a socket-level API behind the scenes - http = PoolManager() - - r = http.request('GET', 'https://google.com/') - -There are `limitations <https://cloud.google.com/appengine/docs/python/\ -urlfetch/#Python_Quotas_and_limits>`_ to the URLFetch service and it may not be -the best choice for your application. There are three options for using -urllib3 on Google App Engine: - -1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is - cost-effective in many circumstances as long as your usage is within the - limitations. -2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets. - Sockets also have `limitations and restrictions - <https://cloud.google.com/appengine/docs/python/sockets/\ - #limitations-and-restrictions>`_ and have a lower free quota than URLFetch. - To use sockets, be sure to specify the following in your ``app.yaml``:: - - env_variables: - GAE_USE_SOCKETS_HTTPLIB : 'true' - -3. If you are using `App Engine Flexible -<https://cloud.google.com/appengine/docs/flexible/>`_, you can use the standard -:class:`PoolManager` without any configuration or special environment variables. -""" - -from __future__ import absolute_import - -import io -import logging -import warnings - -from ..exceptions import ( - HTTPError, - HTTPWarning, - MaxRetryError, - ProtocolError, - SSLError, - TimeoutError, -) -from ..packages.six.moves.urllib.parse import urljoin -from ..request import RequestMethods -from ..response import HTTPResponse -from ..util.retry import Retry -from ..util.timeout import Timeout -from . import _appengine_environ - -try: - from google.appengine.api import urlfetch -except ImportError: - urlfetch = None - - -log = logging.getLogger(__name__) - - -class AppEnginePlatformWarning(HTTPWarning): - pass - - -class AppEnginePlatformError(HTTPError): - pass - - -class AppEngineManager(RequestMethods): - """ - Connection manager for Google App Engine sandbox applications. - - This manager uses the URLFetch service directly instead of using the - emulated httplib, and is subject to URLFetch limitations as described in - the App Engine documentation `here - <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - - Notably it will raise an :class:`AppEnginePlatformError` if: - * URLFetch is not available. - * If you attempt to use this on App Engine Flexible, as full socket - support is available. - * If a request size is more than 10 megabytes. - * If a response size is more than 32 megabytes. - * If you use an unsupported request method such as OPTIONS. - - Beyond those cases, it will raise normal urllib3 errors. - """ - - def __init__( - self, - headers=None, - retries=None, - validate_certificate=True, - urlfetch_retries=True, - ): - if not urlfetch: - raise AppEnginePlatformError( - "URLFetch is not available in this environment." - ) - - warnings.warn( - "urllib3 is using URLFetch on Google App Engine sandbox instead " - "of sockets. To use sockets directly instead of URLFetch see " - "https://urllib3.readthedocs.io/en/1.26.x/reference/urllib3.contrib.html.", - AppEnginePlatformWarning, - ) - - RequestMethods.__init__(self, headers) - self.validate_certificate = validate_certificate - self.urlfetch_retries = urlfetch_retries - - self.retries = retries or Retry.DEFAULT - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - # Return False to re-raise any potential exceptions - return False - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=None, - redirect=True, - timeout=Timeout.DEFAULT_TIMEOUT, - **response_kw - ): - - retries = self._get_retries(retries, redirect) - - try: - follow_redirects = redirect and retries.redirect != 0 and retries.total - response = urlfetch.fetch( - url, - payload=body, - method=method, - headers=headers or {}, - allow_truncated=False, - follow_redirects=self.urlfetch_retries and follow_redirects, - deadline=self._get_absolute_timeout(timeout), - validate_certificate=self.validate_certificate, - ) - except urlfetch.DeadlineExceededError as e: - raise TimeoutError(self, e) - - except urlfetch.InvalidURLError as e: - if "too large" in str(e): - raise AppEnginePlatformError( - "URLFetch request too large, URLFetch only " - "supports requests up to 10mb in size.", - e, - ) - raise ProtocolError(e) - - except urlfetch.DownloadError as e: - if "Too many redirects" in str(e): - raise MaxRetryError(self, url, reason=e) - raise ProtocolError(e) - - except urlfetch.ResponseTooLargeError as e: - raise AppEnginePlatformError( - "URLFetch response too large, URLFetch only supports" - "responses up to 32mb in size.", - e, - ) - - except urlfetch.SSLCertificateError as e: - raise SSLError(e) - - except urlfetch.InvalidMethodError as e: - raise AppEnginePlatformError( - "URLFetch does not support method: %s" % method, e - ) - - http_response = self._urlfetch_response_to_http_response( - response, retries=retries, **response_kw - ) - - # Handle redirect? - redirect_location = redirect and http_response.get_redirect_location() - if redirect_location: - # Check for redirect response - if self.urlfetch_retries and retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - else: - if http_response.status == 303: - method = "GET" - - try: - retries = retries.increment( - method, url, response=http_response, _pool=self - ) - except MaxRetryError: - if retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - return http_response - - retries.sleep_for_retry(http_response) - log.debug("Redirecting %s -> %s", url, redirect_location) - redirect_url = urljoin(url, redirect_location) - return self.urlopen( - method, - redirect_url, - body, - headers, - retries=retries, - redirect=redirect, - timeout=timeout, - **response_kw - ) - - # Check if we should retry the HTTP response. - has_retry_after = bool(http_response.headers.get("Retry-After")) - if retries.is_retry(method, http_response.status, has_retry_after): - retries = retries.increment(method, url, response=http_response, _pool=self) - log.debug("Retry: %s", url) - retries.sleep(http_response) - return self.urlopen( - method, - url, - body=body, - headers=headers, - retries=retries, - redirect=redirect, - timeout=timeout, - **response_kw - ) - - return http_response - - def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw): - - if is_prod_appengine(): - # Production GAE handles deflate encoding automatically, but does - # not remove the encoding header. - content_encoding = urlfetch_resp.headers.get("content-encoding") - - if content_encoding == "deflate": - del urlfetch_resp.headers["content-encoding"] - - transfer_encoding = urlfetch_resp.headers.get("transfer-encoding") - # We have a full response's content, - # so let's make sure we don't report ourselves as chunked data. - if transfer_encoding == "chunked": - encodings = transfer_encoding.split(",") - encodings.remove("chunked") - urlfetch_resp.headers["transfer-encoding"] = ",".join(encodings) - - original_response = HTTPResponse( - # In order for decoding to work, we must present the content as - # a file-like object. - body=io.BytesIO(urlfetch_resp.content), - msg=urlfetch_resp.header_msg, - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - **response_kw - ) - - return HTTPResponse( - body=io.BytesIO(urlfetch_resp.content), - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - original_response=original_response, - **response_kw - ) - - def _get_absolute_timeout(self, timeout): - if timeout is Timeout.DEFAULT_TIMEOUT: - return None # Defer to URLFetch's default. - if isinstance(timeout, Timeout): - if timeout._read is not None or timeout._connect is not None: - warnings.warn( - "URLFetch does not support granular timeout settings, " - "reverting to total or default URLFetch timeout.", - AppEnginePlatformWarning, - ) - return timeout.total - return timeout - - def _get_retries(self, retries, redirect): - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if retries.connect or retries.read or retries.redirect: - warnings.warn( - "URLFetch only supports total retries and does not " - "recognize connect, read, or redirect retry parameters.", - AppEnginePlatformWarning, - ) - - return retries - - -# Alias methods from _appengine_environ to maintain public API interface. - -is_appengine = _appengine_environ.is_appengine -is_appengine_sandbox = _appengine_environ.is_appengine_sandbox -is_local_appengine = _appengine_environ.is_local_appengine -is_prod_appengine = _appengine_environ.is_prod_appengine -is_prod_appengine_mvms = _appengine_environ.is_prod_appengine_mvms diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py deleted file mode 100644 index 471665754..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,130 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" -from __future__ import absolute_import - -import warnings -from logging import getLogger - -from ntlm import ntlm - -from .. import HTTPSConnectionPool -from ..packages.six.moves.http_client import HTTPSConnection - -warnings.warn( - "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed " - "in urllib3 v2.0 release, urllib3 is not able to support it properly due " - "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. " - "If you are a user of this module please comment in the mentioned issue.", - DeprecationWarning, -) - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = "https" - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split("\\", 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug( - "Starting NTLM HTTPS connection no. %d: https://%s%s", - self.num_connections, - self.host, - self.authurl, - ) - - headers = {"Connection": "Keep-Alive"} - req_header = "Authorization" - resp_header = "www-authenticate" - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = "NTLM %s" % ntlm.create_NTLM_NEGOTIATE_MESSAGE( - self.rawuser - ) - log.debug("Request headers: %s", headers) - conn.request("GET", self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.headers) - log.debug("Response status: %s %s", res.status, res.reason) - log.debug("Response headers: %s", reshdr) - log.debug("Response data: %s [...]", res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(", ") - auth_header_value = None - for s in auth_header_values: - if s[:5] == "NTLM ": - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception( - "Unexpected %s response header: %s" % (resp_header, reshdr[resp_header]) - ) - - # Send authentication message - ServerChallenge, NegotiateFlags = ntlm.parse_NTLM_CHALLENGE_MESSAGE( - auth_header_value - ) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE( - ServerChallenge, self.user, self.domain, self.pw, NegotiateFlags - ) - headers[req_header] = "NTLM %s" % auth_msg - log.debug("Request headers: %s", headers) - conn.request("GET", self.authurl, None, headers) - res = conn.getresponse() - log.debug("Response status: %s %s", res.status, res.reason) - log.debug("Response headers: %s", dict(res.headers)) - log.debug("Response data: %s [...]", res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception("Server rejected request: wrong username or password") - raise Exception("Wrong server response: %s %s" % (res.status, res.reason)) - - res.fp = None - log.debug("Connection established") - return conn - - def urlopen( - self, - method, - url, - body=None, - headers=None, - retries=3, - redirect=True, - assert_same_host=True, - ): - if headers is None: - headers = {} - headers["Connection"] = "Keep-Alive" - return super(NTLMConnectionPool, self).urlopen( - method, url, body, headers, retries, redirect, assert_same_host - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py deleted file mode 100644 index 19e4aa97c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,518 +0,0 @@ -""" -TLS with SNI_-support for Python 2. Follow these instructions if you would -like to verify TLS certificates in Python 2. Note, the default libraries do -*not* do certificate checking; you need to do additional work to validate -certificates yourself. - -This needs the following packages installed: - -* `pyOpenSSL`_ (tested with 16.0.0) -* `cryptography`_ (minimum 1.3.4, from pyopenssl) -* `idna`_ (minimum 2.0, from cryptography) - -However, pyopenssl depends on cryptography, which depends on idna, so while we -use all three directly here we end up having relatively few packages required. - -You can install them with the following command: - -.. code-block:: bash - - $ python -m pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this: - -.. code-block:: python - - try: - import pip._vendor.urllib3.contrib.pyopenssl as pyopenssl - pyopenssl.inject_into_urllib3() - except ImportError: - pass - -Now you can use :mod:`urllib3` as you normally would, and it will support SNI -when the required modules are installed. - -Activating this module also has the positive side effect of disabling SSL/TLS -compression in Python 2 (see `CRIME attack`_). - -.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication -.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) -.. _pyopenssl: https://www.pyopenssl.org -.. _cryptography: https://cryptography.io -.. _idna: https://github.com/kjd/idna -""" -from __future__ import absolute_import - -import OpenSSL.crypto -import OpenSSL.SSL -from cryptography import x509 -from cryptography.hazmat.backends.openssl import backend as openssl_backend - -try: - from cryptography.x509 import UnsupportedExtension -except ImportError: - # UnsupportedExtension is gone in cryptography >= 2.1.0 - class UnsupportedExtension(Exception): - pass - - -from io import BytesIO -from socket import error as SocketError -from socket import timeout - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -import logging -import ssl -import sys -import warnings - -from .. import util -from ..packages import six -from ..util.ssl_ import PROTOCOL_TLS_CLIENT - -warnings.warn( - "'urllib3.contrib.pyopenssl' module is deprecated and will be removed " - "in a future release of urllib3 2.x. Read more in this issue: " - "https://github.com/urllib3/urllib3/issues/2680", - category=DeprecationWarning, - stacklevel=2, -) - -__all__ = ["inject_into_urllib3", "extract_from_urllib3"] - -# SNI always works. -HAS_SNI = True - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions = { - util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD, - PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD, - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, "PROTOCOL_SSLv3") and hasattr(OpenSSL.SSL, "SSLv3_METHOD"): - _openssl_versions[ssl.PROTOCOL_SSLv3] = OpenSSL.SSL.SSLv3_METHOD - -if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER - + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = dict((v, k) for k, v in _stdlib_to_openssl_verify.items()) - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3(): - "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support." - - _validate_dependencies_met() - - util.SSLContext = PyOpenSSLContext - util.ssl_.SSLContext = PyOpenSSLContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3(): - "Undo monkey-patching by :func:`inject_into_urllib3`." - - util.SSLContext = orig_util_SSLContext - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met(): - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError( - "'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer." - ) - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError( - "'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer." - ) - - -def _dnsname_to_stdlib(name): - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - - If the name cannot be idna-encoded then we return None signalling that - the name given should be skipped. - """ - - def idna_encode(name): - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - from pip._vendor import idna - - try: - for prefix in [u"*.", u"."]: - if name.startswith(prefix): - name = name[len(prefix) :] - return prefix.encode("ascii") + idna.encode(name) - return idna.encode(name) - except idna.core.IDNAError: - return None - - # Don't send IPv6 addresses through the IDNA encoder. - if ":" in name: - return name - - name = idna_encode(name) - if name is None: - return None - elif sys.version_info >= (3, 0): - name = name.decode("utf-8") - return name - - -def get_subj_alt_name(peer_cert): - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - # Pass the cert to cryptography, which has much better APIs for this. - if hasattr(peer_cert, "to_cryptography"): - cert = peer_cert.to_cryptography() - else: - der = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, peer_cert) - cert = x509.load_der_x509_certificate(der, openssl_backend) - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except ( - x509.DuplicateExtension, - UnsupportedExtension, - x509.UnsupportedGeneralNameType, - UnicodeError, - ) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - # We also want to skip over names which cannot be idna encoded. - names = [ - ("DNS", name) - for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName)) - if name is not None - ] - names.extend( - ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket(object): - """API-compatibility wrapper for Python OpenSSL's Connection-class. - - Note: _makefile_refs, _drop() and _reuse() are needed for the garbage - collector of pypy. - """ - - def __init__(self, connection, socket, suppress_ragged_eofs=True): - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 - self._closed = False - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args, **kwargs): - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return b"" - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b"" - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") - else: - return self.recv(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("read error: %r" % e) - else: - return data - - def recv_into(self, *args, **kwargs): - try: - return self.connection.recv_into(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): - return 0 - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout("The read operation timed out") - else: - return self.recv_into(*args, **kwargs) - - # TLS 1.3 post-handshake authentication - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("read error: %r" % e) - - def settimeout(self, timeout): - return self.socket.settimeout(timeout) - - def _send_until_done(self, data): - while True: - try: - return self.connection.send(data) - except OpenSSL.SSL.WantWriteError: - if not util.wait_for_write(self.socket, self.socket.gettimeout()): - raise timeout() - continue - except OpenSSL.SSL.SysCallError as e: - raise SocketError(str(e)) - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done( - data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE] - ) - total_sent += sent - - def shutdown(self): - # FIXME rethrow compatible exceptions should we ever use this - self.connection.shutdown() - - def close(self): - if self._makefile_refs < 1: - try: - self._closed = True - return self.connection.close() - except OpenSSL.SSL.Error: - return - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 - - if binary_form: - return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509) - - return { - "subject": ((("commonName", x509.get_subject().CN),),), - "subjectAltName": get_subj_alt_name(x509), - } - - def version(self): - return self.connection.get_protocol_version_name() - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) - -else: # Platform-specific: Python 3 - makefile = backport_makefile - -WrappedSocket.makefile = makefile - - -class PyOpenSSLContext(object): - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - - def __init__(self, protocol): - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - - @property - def options(self): - return self._options - - @options.setter - def options(self, value): - self._options = value - self._ctx.set_options(value) - - @property - def verify_mode(self): - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value): - self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback) - - def set_default_verify_paths(self): - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers): - if isinstance(ciphers, six.text_type): - ciphers = ciphers.encode("utf-8") - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - if cafile is not None: - cafile = cafile.encode("utf-8") - if capath is not None: - capath = capath.encode("utf-8") - try: - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("unable to load trusted certificates: %r" % e) - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._ctx.use_certificate_chain_file(certfile) - if password is not None: - if not isinstance(password, six.binary_type): - password = password.encode("utf-8") - self._ctx.set_passwd_cb(lambda *_: password) - self._ctx.use_privatekey_file(keyfile or certfile) - - def set_alpn_protocols(self, protocols): - protocols = [six.ensure_binary(p) for p in protocols] - return self._ctx.set_alpn_protos(protocols) - - def wrap_socket( - self, - sock, - server_side=False, - do_handshake_on_connect=True, - suppress_ragged_eofs=True, - server_hostname=None, - ): - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3 - server_hostname = server_hostname.encode("utf-8") - - if server_hostname is not None: - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(sock, sock.gettimeout()): - raise timeout("select timed out") - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError("bad handshake: %r" % e) - break - - return WrappedSocket(cnx, sock) - - -def _verify_callback(cnx, x509, err_no, err_depth, return_code): - return err_no == 0 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py deleted file mode 100644 index 722ee4e12..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +++ /dev/null @@ -1,920 +0,0 @@ -""" -SecureTranport support for urllib3 via ctypes. - -This makes platform-native TLS available to urllib3 users on macOS without the -use of a compiler. This is an important feature because the Python Package -Index is moving to become a TLSv1.2-or-higher server, and the default OpenSSL -that ships with macOS is not capable of doing TLSv1.2. The only way to resolve -this is to give macOS users an alternative solution to the problem, and that -solution is to use SecureTransport. - -We use ctypes here because this solution must not require a compiler. That's -because pip is not allowed to require a compiler either. - -This is not intended to be a seriously long-term solution to this problem. -The hope is that PEP 543 will eventually solve this issue for us, at which -point we can retire this contrib module. But in the short term, we need to -solve the impending tire fire that is Python on Mac without this kind of -contrib module. So...here we are. - -To use this module, simply import and inject it:: - - import pip._vendor.urllib3.contrib.securetransport as securetransport - securetransport.inject_into_urllib3() - -Happy TLSing! - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - -.. code-block:: - - Copyright (c) 2015-2016 Will Bond <will@wbond.net> - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - -import contextlib -import ctypes -import errno -import os.path -import shutil -import socket -import ssl -import struct -import threading -import weakref - -from .. import util -from ..packages import six -from ..util.ssl_ import PROTOCOL_TLS_CLIENT -from ._securetransport.bindings import CoreFoundation, Security, SecurityConst -from ._securetransport.low_level import ( - _assert_no_error, - _build_tls_unknown_ca_alert, - _cert_array_from_pem, - _create_cfstring_array, - _load_client_cert_chain, - _temporary_keychain, -) - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -__all__ = ["inject_into_urllib3", "extract_from_urllib3"] - -# SNI always works -HAS_SNI = True - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - -# This dictionary is used by the read callback to obtain a handle to the -# calling wrapped socket. This is a pretty silly approach, but for now it'll -# do. I feel like I should be able to smuggle a handle to the wrapped socket -# directly in the SSLConnectionRef, but for now this approach will work I -# guess. -# -# We need to lock around this structure for inserts, but we don't do it for -# reads/writes in the callbacks. The reasoning here goes as follows: -# -# 1. It is not possible to call into the callbacks before the dictionary is -# populated, so once in the callback the id must be in the dictionary. -# 2. The callbacks don't mutate the dictionary, they only read from it, and -# so cannot conflict with any of the insertions. -# -# This is good: if we had to lock in the callbacks we'd drastically slow down -# the performance of this code. -_connection_refs = weakref.WeakValueDictionary() -_connection_ref_lock = threading.Lock() - -# Limit writes to 16kB. This is OpenSSL's limit, but we'll cargo-cult it over -# for no better reason than we need *a* limit, and this one is right there. -SSL_WRITE_BLOCKSIZE = 16384 - -# This is our equivalent of util.ssl_.DEFAULT_CIPHERS, but expanded out to -# individual cipher suites. We need to do this because this is how -# SecureTransport wants them. -CIPHER_SUITES = [ - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_AES_256_GCM_SHA384, - SecurityConst.TLS_AES_128_GCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_AES_128_CCM_8_SHA256, - SecurityConst.TLS_AES_128_CCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA, -] - -# Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. -# TLSv1 to 1.2 are supported on macOS 10.8+ -_protocol_to_min_max = { - util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), - PROTOCOL_TLS_CLIENT: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), -} - -if hasattr(ssl, "PROTOCOL_SSLv2"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv2] = ( - SecurityConst.kSSLProtocol2, - SecurityConst.kSSLProtocol2, - ) -if hasattr(ssl, "PROTOCOL_SSLv3"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv3] = ( - SecurityConst.kSSLProtocol3, - SecurityConst.kSSLProtocol3, - ) -if hasattr(ssl, "PROTOCOL_TLSv1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1] = ( - SecurityConst.kTLSProtocol1, - SecurityConst.kTLSProtocol1, - ) -if hasattr(ssl, "PROTOCOL_TLSv1_1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_1] = ( - SecurityConst.kTLSProtocol11, - SecurityConst.kTLSProtocol11, - ) -if hasattr(ssl, "PROTOCOL_TLSv1_2"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_2] = ( - SecurityConst.kTLSProtocol12, - SecurityConst.kTLSProtocol12, - ) - - -def inject_into_urllib3(): - """ - Monkey-patch urllib3 with SecureTransport-backed SSL-support. - """ - util.SSLContext = SecureTransportContext - util.ssl_.SSLContext = SecureTransportContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_SECURETRANSPORT = True - util.ssl_.IS_SECURETRANSPORT = True - - -def extract_from_urllib3(): - """ - Undo monkey-patching by :func:`inject_into_urllib3`. - """ - util.SSLContext = orig_util_SSLContext - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_SECURETRANSPORT = False - util.ssl_.IS_SECURETRANSPORT = False - - -def _read_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport read callback. This is called by ST to request that data - be returned from the socket. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - requested_length = data_length_pointer[0] - - timeout = wrapped_socket.gettimeout() - error = None - read_count = 0 - - try: - while read_count < requested_length: - if timeout is None or timeout >= 0: - if not util.wait_for_read(base_socket, timeout): - raise socket.error(errno.EAGAIN, "timed out") - - remaining = requested_length - read_count - buffer = (ctypes.c_char * remaining).from_address( - data_buffer + read_count - ) - chunk_size = base_socket.recv_into(buffer, remaining) - read_count += chunk_size - if not chunk_size: - if not read_count: - return SecurityConst.errSSLClosedGraceful - break - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = read_count - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = read_count - - if read_count != requested_length: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -def _write_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport write callback. This is called by ST to request that data - actually be sent on the network. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - bytes_to_write = data_length_pointer[0] - data = ctypes.string_at(data_buffer, bytes_to_write) - - timeout = wrapped_socket.gettimeout() - error = None - sent = 0 - - try: - while sent < bytes_to_write: - if timeout is None or timeout >= 0: - if not util.wait_for_write(base_socket, timeout): - raise socket.error(errno.EAGAIN, "timed out") - chunk_sent = base_socket.send(data) - sent += chunk_sent - - # This has some needless copying here, but I'm not sure there's - # much value in optimising this data path. - data = data[chunk_sent:] - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = sent - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = sent - - if sent != bytes_to_write: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -# We need to keep these two objects references alive: if they get GC'd while -# in use then SecureTransport could attempt to call a function that is in freed -# memory. That would be...uh...bad. Yeah, that's the word. Bad. -_read_callback_pointer = Security.SSLReadFunc(_read_callback) -_write_callback_pointer = Security.SSLWriteFunc(_write_callback) - - -class WrappedSocket(object): - """ - API-compatibility wrapper for Python's OpenSSL wrapped socket object. - - Note: _makefile_refs, _drop(), and _reuse() are needed for the garbage - collector of PyPy. - """ - - def __init__(self, socket): - self.socket = socket - self.context = None - self._makefile_refs = 0 - self._closed = False - self._exception = None - self._keychain = None - self._keychain_dir = None - self._client_cert_chain = None - - # We save off the previously-configured timeout and then set it to - # zero. This is done because we use select and friends to handle the - # timeouts, but if we leave the timeout set on the lower socket then - # Python will "kindly" call select on that socket again for us. Avoid - # that by forcing the timeout to zero. - self._timeout = self.socket.gettimeout() - self.socket.settimeout(0) - - @contextlib.contextmanager - def _raise_on_error(self): - """ - A context manager that can be used to wrap calls that do I/O from - SecureTransport. If any of the I/O callbacks hit an exception, this - context manager will correctly propagate the exception after the fact. - This avoids silently swallowing those exceptions. - - It also correctly forces the socket closed. - """ - self._exception = None - - # We explicitly don't catch around this yield because in the unlikely - # event that an exception was hit in the block we don't want to swallow - # it. - yield - if self._exception is not None: - exception, self._exception = self._exception, None - self.close() - raise exception - - def _set_ciphers(self): - """ - Sets up the allowed ciphers. By default this matches the set in - util.ssl_.DEFAULT_CIPHERS, at least as supported by macOS. This is done - custom and doesn't allow changing at this time, mostly because parsing - OpenSSL cipher strings is going to be a freaking nightmare. - """ - ciphers = (Security.SSLCipherSuite * len(CIPHER_SUITES))(*CIPHER_SUITES) - result = Security.SSLSetEnabledCiphers( - self.context, ciphers, len(CIPHER_SUITES) - ) - _assert_no_error(result) - - def _set_alpn_protocols(self, protocols): - """ - Sets up the ALPN protocols on the context. - """ - if not protocols: - return - protocols_arr = _create_cfstring_array(protocols) - try: - result = Security.SSLSetALPNProtocols(self.context, protocols_arr) - _assert_no_error(result) - finally: - CoreFoundation.CFRelease(protocols_arr) - - def _custom_validate(self, verify, trust_bundle): - """ - Called when we have set custom validation. We do this in two cases: - first, when cert validation is entirely disabled; and second, when - using a custom trust DB. - Raises an SSLError if the connection is not trusted. - """ - # If we disabled cert validation, just say: cool. - if not verify: - return - - successes = ( - SecurityConst.kSecTrustResultUnspecified, - SecurityConst.kSecTrustResultProceed, - ) - try: - trust_result = self._evaluate_trust(trust_bundle) - if trust_result in successes: - return - reason = "error code: %d" % (trust_result,) - except Exception as e: - # Do not trust on error - reason = "exception: %r" % (e,) - - # SecureTransport does not send an alert nor shuts down the connection. - rec = _build_tls_unknown_ca_alert(self.version()) - self.socket.sendall(rec) - # close the connection immediately - # l_onoff = 1, activate linger - # l_linger = 0, linger for 0 seoncds - opts = struct.pack("ii", 1, 0) - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, opts) - self.close() - raise ssl.SSLError("certificate verify failed, %s" % reason) - - def _evaluate_trust(self, trust_bundle): - # We want data in memory, so load it up. - if os.path.isfile(trust_bundle): - with open(trust_bundle, "rb") as f: - trust_bundle = f.read() - - cert_array = None - trust = Security.SecTrustRef() - - try: - # Get a CFArray that contains the certs we want. - cert_array = _cert_array_from_pem(trust_bundle) - - # Ok, now the hard part. We want to get the SecTrustRef that ST has - # created for this connection, shove our CAs into it, tell ST to - # ignore everything else it knows, and then ask if it can build a - # chain. This is a buuuunch of code. - result = Security.SSLCopyPeerTrust(self.context, ctypes.byref(trust)) - _assert_no_error(result) - if not trust: - raise ssl.SSLError("Failed to copy trust reference") - - result = Security.SecTrustSetAnchorCertificates(trust, cert_array) - _assert_no_error(result) - - result = Security.SecTrustSetAnchorCertificatesOnly(trust, True) - _assert_no_error(result) - - trust_result = Security.SecTrustResultType() - result = Security.SecTrustEvaluate(trust, ctypes.byref(trust_result)) - _assert_no_error(result) - finally: - if trust: - CoreFoundation.CFRelease(trust) - - if cert_array is not None: - CoreFoundation.CFRelease(cert_array) - - return trust_result.value - - def handshake( - self, - server_hostname, - verify, - trust_bundle, - min_version, - max_version, - client_cert, - client_key, - client_key_passphrase, - alpn_protocols, - ): - """ - Actually performs the TLS handshake. This is run automatically by - wrapped socket, and shouldn't be needed in user code. - """ - # First, we do the initial bits of connection setup. We need to create - # a context, set its I/O funcs, and set the connection reference. - self.context = Security.SSLCreateContext( - None, SecurityConst.kSSLClientSide, SecurityConst.kSSLStreamType - ) - result = Security.SSLSetIOFuncs( - self.context, _read_callback_pointer, _write_callback_pointer - ) - _assert_no_error(result) - - # Here we need to compute the handle to use. We do this by taking the - # id of self modulo 2**31 - 1. If this is already in the dictionary, we - # just keep incrementing by one until we find a free space. - with _connection_ref_lock: - handle = id(self) % 2147483647 - while handle in _connection_refs: - handle = (handle + 1) % 2147483647 - _connection_refs[handle] = self - - result = Security.SSLSetConnection(self.context, handle) - _assert_no_error(result) - - # If we have a server hostname, we should set that too. - if server_hostname: - if not isinstance(server_hostname, bytes): - server_hostname = server_hostname.encode("utf-8") - - result = Security.SSLSetPeerDomainName( - self.context, server_hostname, len(server_hostname) - ) - _assert_no_error(result) - - # Setup the ciphers. - self._set_ciphers() - - # Setup the ALPN protocols. - self._set_alpn_protocols(alpn_protocols) - - # Set the minimum and maximum TLS versions. - result = Security.SSLSetProtocolVersionMin(self.context, min_version) - _assert_no_error(result) - - result = Security.SSLSetProtocolVersionMax(self.context, max_version) - _assert_no_error(result) - - # If there's a trust DB, we need to use it. We do that by telling - # SecureTransport to break on server auth. We also do that if we don't - # want to validate the certs at all: we just won't actually do any - # authing in that case. - if not verify or trust_bundle is not None: - result = Security.SSLSetSessionOption( - self.context, SecurityConst.kSSLSessionOptionBreakOnServerAuth, True - ) - _assert_no_error(result) - - # If there's a client cert, we need to use it. - if client_cert: - self._keychain, self._keychain_dir = _temporary_keychain() - self._client_cert_chain = _load_client_cert_chain( - self._keychain, client_cert, client_key - ) - result = Security.SSLSetCertificate(self.context, self._client_cert_chain) - _assert_no_error(result) - - while True: - with self._raise_on_error(): - result = Security.SSLHandshake(self.context) - - if result == SecurityConst.errSSLWouldBlock: - raise socket.timeout("handshake timed out") - elif result == SecurityConst.errSSLServerAuthCompleted: - self._custom_validate(verify, trust_bundle) - continue - else: - _assert_no_error(result) - break - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, bufsiz): - buffer = ctypes.create_string_buffer(bufsiz) - bytes_read = self.recv_into(buffer, bufsiz) - data = buffer[:bytes_read] - return data - - def recv_into(self, buffer, nbytes=None): - # Read short on EOF. - if self._closed: - return 0 - - if nbytes is None: - nbytes = len(buffer) - - buffer = (ctypes.c_char * nbytes).from_buffer(buffer) - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLRead( - self.context, buffer, nbytes, ctypes.byref(processed_bytes) - ) - - # There are some result codes that we want to treat as "not always - # errors". Specifically, those are errSSLWouldBlock, - # errSSLClosedGraceful, and errSSLClosedNoNotify. - if result == SecurityConst.errSSLWouldBlock: - # If we didn't process any bytes, then this was just a time out. - # However, we can get errSSLWouldBlock in situations when we *did* - # read some data, and in those cases we should just read "short" - # and return. - if processed_bytes.value == 0: - # Timed out, no data read. - raise socket.timeout("recv timed out") - elif result in ( - SecurityConst.errSSLClosedGraceful, - SecurityConst.errSSLClosedNoNotify, - ): - # The remote peer has closed this connection. We should do so as - # well. Note that we don't actually return here because in - # principle this could actually be fired along with return data. - # It's unlikely though. - self.close() - else: - _assert_no_error(result) - - # Ok, we read and probably succeeded. We should return whatever data - # was actually read. - return processed_bytes.value - - def settimeout(self, timeout): - self._timeout = timeout - - def gettimeout(self): - return self._timeout - - def send(self, data): - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLWrite( - self.context, data, len(data), ctypes.byref(processed_bytes) - ) - - if result == SecurityConst.errSSLWouldBlock and processed_bytes.value == 0: - # Timed out - raise socket.timeout("send timed out") - else: - _assert_no_error(result) - - # We sent, and probably succeeded. Tell them how much we sent. - return processed_bytes.value - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self.send(data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - with self._raise_on_error(): - Security.SSLClose(self.context) - - def close(self): - # TODO: should I do clean shutdown here? Do I have to? - if self._makefile_refs < 1: - self._closed = True - if self.context: - CoreFoundation.CFRelease(self.context) - self.context = None - if self._client_cert_chain: - CoreFoundation.CFRelease(self._client_cert_chain) - self._client_cert_chain = None - if self._keychain: - Security.SecKeychainDelete(self._keychain) - CoreFoundation.CFRelease(self._keychain) - shutil.rmtree(self._keychain_dir) - self._keychain = self._keychain_dir = None - return self.socket.close() - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - # Urgh, annoying. - # - # Here's how we do this: - # - # 1. Call SSLCopyPeerTrust to get hold of the trust object for this - # connection. - # 2. Call SecTrustGetCertificateAtIndex for index 0 to get the leaf. - # 3. To get the CN, call SecCertificateCopyCommonName and process that - # string so that it's of the appropriate type. - # 4. To get the SAN, we need to do something a bit more complex: - # a. Call SecCertificateCopyValues to get the data, requesting - # kSecOIDSubjectAltName. - # b. Mess about with this dictionary to try to get the SANs out. - # - # This is gross. Really gross. It's going to be a few hundred LoC extra - # just to repeat something that SecureTransport can *already do*. So my - # operating assumption at this time is that what we want to do is - # instead to just flag to urllib3 that it shouldn't do its own hostname - # validation when using SecureTransport. - if not binary_form: - raise ValueError("SecureTransport only supports dumping binary certs") - trust = Security.SecTrustRef() - certdata = None - der_bytes = None - - try: - # Grab the trust store. - result = Security.SSLCopyPeerTrust(self.context, ctypes.byref(trust)) - _assert_no_error(result) - if not trust: - # Probably we haven't done the handshake yet. No biggie. - return None - - cert_count = Security.SecTrustGetCertificateCount(trust) - if not cert_count: - # Also a case that might happen if we haven't handshaked. - # Handshook? Handshaken? - return None - - leaf = Security.SecTrustGetCertificateAtIndex(trust, 0) - assert leaf - - # Ok, now we want the DER bytes. - certdata = Security.SecCertificateCopyData(leaf) - assert certdata - - data_length = CoreFoundation.CFDataGetLength(certdata) - data_buffer = CoreFoundation.CFDataGetBytePtr(certdata) - der_bytes = ctypes.string_at(data_buffer, data_length) - finally: - if certdata: - CoreFoundation.CFRelease(certdata) - if trust: - CoreFoundation.CFRelease(trust) - - return der_bytes - - def version(self): - protocol = Security.SSLProtocol() - result = Security.SSLGetNegotiatedProtocolVersion( - self.context, ctypes.byref(protocol) - ) - _assert_no_error(result) - if protocol.value == SecurityConst.kTLSProtocol13: - raise ssl.SSLError("SecureTransport does not support TLS 1.3") - elif protocol.value == SecurityConst.kTLSProtocol12: - return "TLSv1.2" - elif protocol.value == SecurityConst.kTLSProtocol11: - return "TLSv1.1" - elif protocol.value == SecurityConst.kTLSProtocol1: - return "TLSv1" - elif protocol.value == SecurityConst.kSSLProtocol3: - return "SSLv3" - elif protocol.value == SecurityConst.kSSLProtocol2: - return "SSLv2" - else: - raise ssl.SSLError("Unknown TLS version: %r" % protocol) - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) - -else: # Platform-specific: Python 3 - - def makefile(self, mode="r", buffering=None, *args, **kwargs): - # We disable buffering with SecureTransport because it conflicts with - # the buffering that ST does internally (see issue #1153 for more). - buffering = 0 - return backport_makefile(self, mode, buffering, *args, **kwargs) - - -WrappedSocket.makefile = makefile - - -class SecureTransportContext(object): - """ - I am a wrapper class for the SecureTransport library, to translate the - interface of the standard library ``SSLContext`` object to calls into - SecureTransport. - """ - - def __init__(self, protocol): - self._min_version, self._max_version = _protocol_to_min_max[protocol] - self._options = 0 - self._verify = False - self._trust_bundle = None - self._client_cert = None - self._client_key = None - self._client_key_passphrase = None - self._alpn_protocols = None - - @property - def check_hostname(self): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - return True - - @check_hostname.setter - def check_hostname(self, value): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - pass - - @property - def options(self): - # TODO: Well, crap. - # - # So this is the bit of the code that is the most likely to cause us - # trouble. Essentially we need to enumerate all of the SSL options that - # users might want to use and try to see if we can sensibly translate - # them, or whether we should just ignore them. - return self._options - - @options.setter - def options(self, value): - # TODO: Update in line with above. - self._options = value - - @property - def verify_mode(self): - return ssl.CERT_REQUIRED if self._verify else ssl.CERT_NONE - - @verify_mode.setter - def verify_mode(self, value): - self._verify = True if value == ssl.CERT_REQUIRED else False - - def set_default_verify_paths(self): - # So, this has to do something a bit weird. Specifically, what it does - # is nothing. - # - # This means that, if we had previously had load_verify_locations - # called, this does not undo that. We need to do that because it turns - # out that the rest of the urllib3 code will attempt to load the - # default verify paths if it hasn't been told about any paths, even if - # the context itself was sometime earlier. We resolve that by just - # ignoring it. - pass - - def load_default_certs(self): - return self.set_default_verify_paths() - - def set_ciphers(self, ciphers): - # For now, we just require the default cipher string. - if ciphers != util.ssl_.DEFAULT_CIPHERS: - raise ValueError("SecureTransport doesn't support custom cipher strings") - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - # OK, we only really support cadata and cafile. - if capath is not None: - raise ValueError("SecureTransport does not support cert directories") - - # Raise if cafile does not exist. - if cafile is not None: - with open(cafile): - pass - - self._trust_bundle = cafile or cadata - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._client_cert = certfile - self._client_key = keyfile - self._client_cert_passphrase = password - - def set_alpn_protocols(self, protocols): - """ - Sets the ALPN protocols that will later be set on the context. - - Raises a NotImplementedError if ALPN is not supported. - """ - if not hasattr(Security, "SSLSetALPNProtocols"): - raise NotImplementedError( - "SecureTransport supports ALPN only in macOS 10.12+" - ) - self._alpn_protocols = [six.ensure_binary(p) for p in protocols] - - def wrap_socket( - self, - sock, - server_side=False, - do_handshake_on_connect=True, - suppress_ragged_eofs=True, - server_hostname=None, - ): - # So, what do we do here? Firstly, we assert some properties. This is a - # stripped down shim, so there is some functionality we don't support. - # See PEP 543 for the real deal. - assert not server_side - assert do_handshake_on_connect - assert suppress_ragged_eofs - - # Ok, we're good to go. Now we want to create the wrapped socket object - # and store it in the appropriate place. - wrapped_socket = WrappedSocket(sock) - - # Now we can handshake - wrapped_socket.handshake( - server_hostname, - self._verify, - self._trust_bundle, - self._min_version, - self._max_version, - self._client_cert, - self._client_key, - self._client_key_passphrase, - self._alpn_protocols, - ) - return wrapped_socket diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py deleted file mode 100644 index c326e80dd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4, SOCKS4A (an extension of SOCKS4), and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4A (``proxy_url='socks4a://...``) -- SOCKS4 (``proxy_url='socks4://...``) -- SOCKS5 with remote DNS (``proxy_url='socks5h://...``) -- SOCKS5 with local DNS (``proxy_url='socks5://...``) -- Usernames and passwords for the SOCKS proxy - -.. note:: - It is recommended to use ``socks5h://`` or ``socks4a://`` schemes in - your ``proxy_url`` to ensure that DNS resolution is done from the remote - server instead of client-side when connecting to a domain name. - -SOCKS4 supports IPv4 and domain names with the SOCKS4A extension. SOCKS5 -supports IPv4, IPv6, and domain names. - -When connecting to a SOCKS4 proxy the ``username`` portion of the ``proxy_url`` -will be sent as the ``userid`` section of the SOCKS request: - -.. code-block:: python - - proxy_url="socks4a://<userid>@proxy-host" - -When connecting to a SOCKS5 proxy the ``username`` and ``password`` portion -of the ``proxy_url`` will be sent as the username/password to authenticate -with the proxy: - -.. code-block:: python - - proxy_url="socks5h://<username>:<password>@proxy-host" - -""" -from __future__ import absolute_import - -try: - import socks -except ImportError: - import warnings - - from ..exceptions import DependencyWarning - - warnings.warn( - ( - "SOCKS support in urllib3 requires the installation of optional " - "dependencies: specifically, PySocks. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/contrib.html#socks-proxies" - ), - DependencyWarning, - ) - raise - -from socket import error as SocketError -from socket import timeout as SocketTimeout - -from ..connection import HTTPConnection, HTTPSConnection -from ..connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - - def __init__(self, *args, **kwargs): - self._socks_options = kwargs.pop("_socks_options") - super(SOCKSConnection, self).__init__(*args, **kwargs) - - def _new_conn(self): - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw = {} - if self.source_address: - extra_kw["source_address"] = self.source_address - - if self.socket_options: - extra_kw["socket_options"] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options["socks_version"], - proxy_addr=self._socks_options["proxy_host"], - proxy_port=self._socks_options["proxy_port"], - proxy_username=self._socks_options["username"], - proxy_password=self._socks_options["password"], - proxy_rdns=self._socks_options["rdns"], - timeout=self.timeout, - **extra_kw - ) - - except SocketTimeout: - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" - % (self.host, self.timeout), - ) - else: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % error - ) - else: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - except SocketError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e - ) - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - - pool_classes_by_scheme = { - "http": SOCKSHTTPConnectionPool, - "https": SOCKSHTTPSConnectionPool, - } - - def __init__( - self, - proxy_url, - username=None, - password=None, - num_pools=10, - headers=None, - **connection_pool_kw - ): - parsed = parse_url(proxy_url) - - if username is None and password is None and parsed.auth is not None: - split = parsed.auth.split(":") - if len(split) == 2: - username, password = split - if parsed.scheme == "socks5": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == "socks5h": - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == "socks4": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == "socks4a": - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError("Unable to determine SOCKS version from %s" % proxy_url) - - self.proxy_url = proxy_url - - socks_options = { - "socks_version": socks_version, - "proxy_host": parsed.host, - "proxy_port": parsed.port, - "username": username, - "password": password, - "rdns": rdns, - } - connection_pool_kw["_socks_options"] = socks_options - - super(SOCKSProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw - ) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/exceptions.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/exceptions.py deleted file mode 100644 index cba6f3f56..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +++ /dev/null @@ -1,323 +0,0 @@ -from __future__ import absolute_import - -from .packages.six.moves.http_client import IncompleteRead as httplib_IncompleteRead - -# Base Exceptions - - -class HTTPError(Exception): - """Base exception used by this module.""" - - pass - - -class HTTPWarning(Warning): - """Base warning used by this module.""" - - pass - - -class PoolError(HTTPError): - """Base exception for errors caused within a pool.""" - - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - """Base exception for PoolErrors that have associated URLs.""" - - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - """Raised when SSL certificate fails in an HTTPS connection.""" - - pass - - -class ProxyError(HTTPError): - """Raised when the connection to a proxy fails.""" - - def __init__(self, message, error, *args): - super(ProxyError, self).__init__(message, error, *args) - self.original_error = error - - -class DecodeError(HTTPError): - """Raised when automatic decoding based on Content-Type fails.""" - - pass - - -class ProtocolError(HTTPError): - """Raised when something unexpected happens mid-request/response.""" - - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % (url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - """Raised when an existing pool gets a request for a foreign host.""" - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """Raised when passing an invalid state to a timeout""" - - pass - - -class TimeoutError(HTTPError): - """Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`. - """ - - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - """Raised when a socket timeout occurs while receiving data from a server""" - - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - """Raised when a socket timeout occurs while connecting to a server""" - - pass - - -class NewConnectionError(ConnectTimeoutError, PoolError): - """Raised when we fail to establish a new connection. Usually ECONNREFUSED.""" - - pass - - -class EmptyPoolError(PoolError): - """Raised when a pool runs out of connections and no more are allowed.""" - - pass - - -class ClosedPoolError(PoolError): - """Raised when a request enters a pool after the pool has been closed.""" - - pass - - -class LocationValueError(ValueError, HTTPError): - """Raised when there is something wrong with a given URL input.""" - - pass - - -class LocationParseError(LocationValueError): - """Raised when get_host or similar fails to parse the URL input.""" - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class URLSchemeUnknown(LocationValueError): - """Raised when a URL input has an unsupported scheme.""" - - def __init__(self, scheme): - message = "Not supported URL scheme %s" % scheme - super(URLSchemeUnknown, self).__init__(message) - - self.scheme = scheme - - -class ResponseError(HTTPError): - """Used as a container for an error reason supplied in a MaxRetryError.""" - - GENERIC_ERROR = "too many error responses" - SPECIFIC_ERROR = "too many {status_code} error responses" - - -class SecurityWarning(HTTPWarning): - """Warned when performing security reducing actions""" - - pass - - -class SubjectAltNameWarning(SecurityWarning): - """Warned when connecting to a host with a certificate missing a SAN.""" - - pass - - -class InsecureRequestWarning(SecurityWarning): - """Warned when making an unverified HTTPS request.""" - - pass - - -class SystemTimeWarning(SecurityWarning): - """Warned when system time is suspected to be wrong""" - - pass - - -class InsecurePlatformWarning(SecurityWarning): - """Warned when certain TLS/SSL configuration is not available on a platform.""" - - pass - - -class SNIMissingWarning(HTTPWarning): - """Warned when making a HTTPS request without SNI available.""" - - pass - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - """Response needs to be chunked in order to read it as chunks.""" - - pass - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be :class:`http.client.HTTPResponse` like - (have an fp attribute which returns raw chunks) for read_chunked(). - """ - - pass - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of :class:`http.client.IncompleteRead` to allow int value - for ``partial`` to avoid creating large objects on streamed reads. - """ - - def __init__(self, partial, expected): - super(IncompleteRead, self).__init__(partial, expected) - - def __repr__(self): - return "IncompleteRead(%i bytes read, %i more expected)" % ( - self.partial, - self.expected, - ) - - -class InvalidChunkLength(HTTPError, httplib_IncompleteRead): - """Invalid chunk length in a chunked response.""" - - def __init__(self, response, length): - super(InvalidChunkLength, self).__init__( - response.tell(), response.length_remaining - ) - self.response = response - self.length = length - - def __repr__(self): - return "InvalidChunkLength(got length %r, %i bytes read)" % ( - self.length, - self.partial, - ) - - -class InvalidHeader(HTTPError): - """The header provided was somehow invalid.""" - - pass - - -class ProxySchemeUnknown(AssertionError, URLSchemeUnknown): - """ProxyManager does not support the supplied scheme""" - - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme): - # 'localhost' is here because our URL parser parses - # localhost:8080 -> scheme=localhost, remove if we fix this. - if scheme == "localhost": - scheme = None - if scheme is None: - message = "Proxy URL had no scheme, should start with http:// or https://" - else: - message = ( - "Proxy URL had unsupported scheme %s, should use http:// or https://" - % scheme - ) - super(ProxySchemeUnknown, self).__init__(message) - - -class ProxySchemeUnsupported(ValueError): - """Fetching HTTPS resources through HTTPS proxies is unsupported""" - - pass - - -class HeaderParsingError(HTTPError): - """Raised by assert_header_parsing, but we convert it to a log.warning statement.""" - - def __init__(self, defects, unparsed_data): - message = "%s, unparsed data: %r" % (defects or "Unknown", unparsed_data) - super(HeaderParsingError, self).__init__(message) - - -class UnrewindableBodyError(HTTPError): - """urllib3 encountered an error when trying to rewind a body""" - - pass diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/fields.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/fields.py deleted file mode 100644 index 9d630f491..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/fields.py +++ /dev/null @@ -1,274 +0,0 @@ -from __future__ import absolute_import - -import email.utils -import mimetypes -import re - -from .packages import six - - -def guess_content_type(filename, default="application/octet-stream"): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param_rfc2231(name, value): - """ - Helper function to format and quote a single header parameter using the - strategy defined in RFC 2231. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows - `RFC 2388 Section 4.4 <https://tools.ietf.org/html/rfc2388#section-4.4>`_. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as ``bytes`` or `str``. - :ret: - An RFC-2231-formatted unicode string. - """ - if isinstance(value, six.binary_type): - value = value.decode("utf-8") - - if not any(ch in value for ch in '"\\\r\n'): - result = u'%s="%s"' % (name, value) - try: - result.encode("ascii") - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - - if six.PY2: # Python 2: - value = value.encode("utf-8") - - # encode_rfc2231 accepts an encoded string and returns an ascii-encoded - # string in Python 2 but accepts and returns unicode strings in Python 3 - value = email.utils.encode_rfc2231(value, "utf-8") - value = "%s*=%s" % (name, value) - - if six.PY2: # Python 2: - value = value.decode("utf-8") - - return value - - -_HTML5_REPLACEMENTS = { - u"\u0022": u"%22", - # Replace "\" with "\\". - u"\u005C": u"\u005C\u005C", -} - -# All control characters from 0x00 to 0x1F *except* 0x1B. -_HTML5_REPLACEMENTS.update( - { - six.unichr(cc): u"%{:02X}".format(cc) - for cc in range(0x00, 0x1F + 1) - if cc not in (0x1B,) - } -) - - -def _replace_multiple(value, needles_and_replacements): - def replacer(match): - return needles_and_replacements[match.group(0)] - - pattern = re.compile( - r"|".join([re.escape(needle) for needle in needles_and_replacements.keys()]) - ) - - result = pattern.sub(replacer, value) - - return result - - -def format_header_param_html5(name, value): - """ - Helper function to format and quote a single header parameter using the - HTML5 strategy. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows the `HTML5 Working Draft - Section 4.10.22.7`_ and matches the behavior of curl and modern browsers. - - .. _HTML5 Working Draft Section 4.10.22.7: - https://w3c.github.io/html/sec-forms.html#multipart-form-data - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as ``bytes`` or `str``. - :ret: - A unicode string, stripped of troublesome characters. - """ - if isinstance(value, six.binary_type): - value = value.decode("utf-8") - - value = _replace_multiple(value, _HTML5_REPLACEMENTS) - - return u'%s="%s"' % (name, value) - - -# For backwards-compatibility. -format_header_param = format_header_param_html5 - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. Must be unicode. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. Must be unicode. - :param headers: - An optional dict-like object of headers to initially use for the field. - :param header_formatter: - An optional callable that is used to encode and format the headers. By - default, this is :func:`format_header_param_html5`. - """ - - def __init__( - self, - name, - data, - filename=None, - headers=None, - header_formatter=format_header_param_html5, - ): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - self.header_formatter = header_formatter - - @classmethod - def from_tuples(cls, fieldname, value, header_formatter=format_header_param_html5): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls( - fieldname, data, filename=filename, header_formatter=header_formatter - ) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. By - default, this calls ``self.header_formatter``. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - - return self.header_formatter(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return u"; ".join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ["Content-Disposition", "Content-Type", "Content-Location"] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append(u"%s: %s" % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append(u"%s: %s" % (header_name, header_value)) - - lines.append(u"\r\n") - return u"\r\n".join(lines) - - def make_multipart( - self, content_disposition=None, content_type=None, content_location=None - ): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers["Content-Disposition"] = content_disposition or u"form-data" - self.headers["Content-Disposition"] += u"; ".join( - [ - u"", - self._render_parts( - ((u"name", self._name), (u"filename", self._filename)) - ), - ] - ) - self.headers["Content-Type"] = content_type - self.headers["Content-Location"] = content_location diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/filepost.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/filepost.py deleted file mode 100644 index 36c9252c6..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/filepost.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import absolute_import - -import binascii -import codecs -import os -from io import BytesIO - -from .fields import RequestField -from .packages import six -from .packages.six import b - -writer = codecs.lookup("utf-8")[3] - - -def choose_boundary(): - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - boundary = binascii.hexlify(os.urandom(16)) - if not six.PY2: - boundary = boundary.decode("ascii") - return boundary - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`urllib3.filepost.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b("--%s\r\n" % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b"\r\n") - - body.write(b("--%s--\r\n" % (boundary))) - - content_type = str("multipart/form-data; boundary=%s" % boundary) - - return body.getvalue(), content_type diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 02d1ded4f0eb65afb7538d1221a7ba096acf0629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmdPq<K<!if=e4;WP<3&AOZ#$p^VRLKt=;Y5Q8#<CZpd<h9V{)|1(JP)+A@En9$<X zqT-mul++?aOG|^8^8BLgn1Z7GtkmR^;+W)|{L+-9#Nt%l%)HDJAW>YBn3I!Qq-z)x zP+5|ZpJ!}n5^oY;VPO^@lA2qPlUR}(Uy@r8<CB>bQ=D0ns#}nloSm4SS{zf5S)d<Z zmYSE6U!-4Jl#`R0WULR9)Q^t`86O|7S5SG2!zMRBr8Fniu80-rM35(nL5xq#jEsy$ H%s>_ZyO&2N diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-314.pyc deleted file mode 100644 index bfd2bd594f6d205885cd3dd19d7eddcba00081ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42934 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 DTM$4~ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index e218c45d727627bdd05dc897a770bfb08ca82579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmdPq<K<!if=e4;WP<3&AOZ#$p^VRLKt=;Y5Q8#<CZpd<h9V{)|1(JP)*NT6n9$<X zqT-mul++?aOG|^8^8BLgn1Z7GtkmR^;+W)|{L+-9#Nt%l%)HDJAW>YBn3I!Qq-z)x zP+5|ZpJ!}n5^oY;VPO^@lA2qPlUR}(Uy@r8<CB>bQ=D0ns#}nloSm4SS{zf5S)d<Z zmYSE6U!-4Jl#`R0WULR9)K3DcD#$M?Db|mV2U!#!uUAlci^C>2KczG$)vkyY=va_< Qib0G|%#4hTMa)1J0P12(DF6Tf diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-314.pyc deleted file mode 100644 index 53de2e4c4e83b2063befb573a680d1c6b8c6127b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2012 zcmah~-A~(A6u(YPKJ3IvC?%~*#Raq$x&ozSYiXx$P@qGlEpw@}tro_KZ-R$oTh~rg zkXGfP4?)u;-dataRPCwT+q6GnFMG^j6_G{7!ydN1ZDQK%b{*%dY|_qyea<~!_x$d; z=f25B89->~+h5hKE&zUZg(mqL%;7L$%76zpSOGk>K-m=e`xbof`)z+e;A!5U1R7=2 zJT(MHx;DRLGIDm^G_Y-r736i4Q#Hgq`WG?GOw$b7YX~lF*lUIkC*kU<Wn|Zp-Ev-C zg#|>E3d|W87A*uzs=Wqfop`8vo_NbPQ<8Ptg0=y(7|Aw*G91j2<b%))293-oC~J=~ zw?`-^bhn;h;Z8QtESCIT-VXqM_yeiD3`DA_6R1>!zX149fx3JJfP4agJ|Gf%k9b<3 zuJ|H=@4D!3TCY*OPoSoVff?W_kGo2pZFuBEZiIdy1ez=7fEg5mO)1a1`nEPta`k}^ z0Ey~vL=Eu)Gu-x2$XODPFi)M2Hj=ox!|fO?3*YM&A~}1H(&1F&+)YLRSE;2=gc>$0 zuf;F=^cD(&FIV3sA2xl0Zv|ZL20-zUBGr1dRPVT^<oz4g9}?@{dJUl#3K3WCz&Y4P zS73%fNA&}B&lZ}>$+~AdFNt)N20;27!Ix_6-(+vS+Y#@?5r6KeHvq){s}^4DE!al7 zeOh9B2l4-lAhhaM>NpDQ5a{qHXdWf9gYVLFDcV~%Bk4Z9g|84H_mSDW*t%%Y$o=Q- z%3-6>x_@JDjWG^|9jfF|na!xGKae$5fdxZBa5D*q4PD!S_&h9~hZ!hqno&Z^hyykU zih8D)%OQ*uXxZcv7A#mOS~koem{D~ZZ(MV6#%@DlcfZ(ey5IgLG{QQ53)v1M$XXH2 zVQgURcA>*b%>g1|l(QV4YB<Mc=jNyHEiOwl_vYv4c<JuK$8!!h(@4#ymt+-p$VgUD zhn&W$P2}h@dT1})Nn_bGiAcNEjYJ*VLRt>HFgszd7&2d+5Yn@T;&K7x?#*(7Ix1<Z zj+|hL#B()4Qm|*@)k+rRk{i|W6UGU6(Hz<)c`f&Lo~aY`$a!}Cig?dL*b?3CPE1W* z5K9JL7fo!qW6Kh=no(3TvV}%fUA4)_vI+JGk4}i*;GCRDNh#^!<+r6}R4_F%0wud( zii>JSv`ERLCK<MJ9$BKPn&Z*~q$>s<FJetoGn3;@<#=myk2irIGdG+>bGdaK7?Kj) zGOQso8q46%2#CZg_GeRH#C~GWzT!@Nzg#_ebC+AJh8AmFVtaXOy?mp=>~X_YZuoif z+5Pg31Gf7~zDl32vZrg&`1b79{qlT`ixWkVtA%3Qlb>^yU?;!NbZ@72nSt{48XelB zlRI?s>BLLA?<JkA1>-xx6Sbb+N|><Q6OTXL@9Ev^Irn4FId5h9@uP#-@%`?;>go4( zyQiy>=~}G2!jSM!F6}3d?Ii|x5`)htUwpKixU>~G2**1XcM})40>8w1D_o`Y`f??3 z5RBGh$1Bl&HoC{2+F?&Uoqv(rWv`WIYw@1P3pF-YzIjNnB9CLe@oy6v>2iXSq!?LA z!tP*l0^U1S@B2EsUjs}g8o>RoHuMhZrJ{ze;WvorzD8D(e17*+6!ixkpy)#mP|PcE M>aV~VDqeT|2O_23`~Uy| diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-314.pyc deleted file mode 100644 index e49ac3814548c03a90810126a509e4bd01e98ad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7756 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py deleted file mode 100644 index b8fb2154b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.makefile -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``socket.makefile`` method for use with anything that -wants to create a "fake" socket object. -""" -import io -from socket import SocketIO - - -def backport_makefile( - self, mode="r", buffering=None, encoding=None, errors=None, newline=None -): - """ - Backport of ``socket.makefile`` from Python 3.5. - """ - if not set(mode) <= {"r", "w", "b"}: - raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._makefile_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py deleted file mode 100644 index a2f2966e5..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.weakref_finalize -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``weakref.finalize`` method. -""" -from __future__ import absolute_import - -import itertools -import sys -from weakref import ref - -__all__ = ["weakref_finalize"] - - -class weakref_finalize(object): - """Class for finalization of weakrefable objects - finalize(obj, func, *args, **kwargs) returns a callable finalizer - object which will be called when obj is garbage collected. The - first time the finalizer is called it evaluates func(*arg, **kwargs) - and returns the result. After this the finalizer is dead, and - calling it just returns None. - When the program exits any remaining finalizers for which the - atexit attribute is true will be run in reverse order of creation. - By default atexit is true. - """ - - # Finalizer objects don't have any state of their own. They are - # just used as keys to lookup _Info objects in the registry. This - # ensures that they cannot be part of a ref-cycle. - - __slots__ = () - _registry = {} - _shutdown = False - _index_iter = itertools.count() - _dirty = False - _registered_with_atexit = False - - class _Info(object): - __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index") - - def __init__(self, obj, func, *args, **kwargs): - if not self._registered_with_atexit: - # We may register the exit function more than once because - # of a thread race, but that is harmless - import atexit - - atexit.register(self._exitfunc) - weakref_finalize._registered_with_atexit = True - info = self._Info() - info.weakref = ref(obj, self) - info.func = func - info.args = args - info.kwargs = kwargs or None - info.atexit = True - info.index = next(self._index_iter) - self._registry[self] = info - weakref_finalize._dirty = True - - def __call__(self, _=None): - """If alive then mark as dead and return func(*args, **kwargs); - otherwise return None""" - info = self._registry.pop(self, None) - if info and not self._shutdown: - return info.func(*info.args, **(info.kwargs or {})) - - def detach(self): - """If alive then mark as dead and return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None and self._registry.pop(self, None): - return (obj, info.func, info.args, info.kwargs or {}) - - def peek(self): - """If alive then return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None: - return (obj, info.func, info.args, info.kwargs or {}) - - @property - def alive(self): - """Whether finalizer is alive""" - return self in self._registry - - @property - def atexit(self): - """Whether finalizer should be called at exit""" - info = self._registry.get(self) - return bool(info) and info.atexit - - @atexit.setter - def atexit(self, value): - info = self._registry.get(self) - if info: - info.atexit = bool(value) - - def __repr__(self): - info = self._registry.get(self) - obj = info and info.weakref() - if obj is None: - return "<%s object at %#x; dead>" % (type(self).__name__, id(self)) - else: - return "<%s object at %#x; for %r at %#x>" % ( - type(self).__name__, - id(self), - type(obj).__name__, - id(obj), - ) - - @classmethod - def _select_for_exit(cls): - # Return live finalizers marked for exit, oldest first - L = [(f, i) for (f, i) in cls._registry.items() if i.atexit] - L.sort(key=lambda item: item[1].index) - return [f for (f, i) in L] - - @classmethod - def _exitfunc(cls): - # At shutdown invoke finalizers for which atexit is true. - # This is called once all other non-daemonic threads have been - # joined. - reenable_gc = False - try: - if cls._registry: - import gc - - if gc.isenabled(): - reenable_gc = True - gc.disable() - pending = None - while True: - if pending is None or weakref_finalize._dirty: - pending = cls._select_for_exit() - weakref_finalize._dirty = False - if not pending: - break - f = pending.pop() - try: - # gc is disabled, so (assuming no daemonic - # threads) the following is the only line in - # this function which might trigger creation - # of a new finalizer - f() - except Exception: - sys.excepthook(*sys.exc_info()) - assert f not in cls._registry - finally: - # prevent any more finalizers from executing during shutdown - weakref_finalize._shutdown = True - if reenable_gc: - gc.enable() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/six.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/six.py deleted file mode 100644 index f099a3dcd..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +++ /dev/null @@ -1,1076 +0,0 @@ -# Copyright (c) 2010-2020 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.16.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = (str,) - integer_types = (int,) - class_types = (type,) - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = (basestring,) - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - def __len__(self): - return 1 << 31 - - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - -if PY34: - from importlib.util import spec_from_loader -else: - spec_from_loader = None - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def find_spec(self, fullname, path, target=None): - if fullname in self.known_modules: - return spec_from_loader(fullname, self) - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - - get_source = get_code # same as get_code - - def create_module(self, spec): - return self.load_module(spec.name) - - def exec_module(self, module): - pass - - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute( - "filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse" - ), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute( - "reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload" - ), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute( - "zip_longest", "itertools", "itertools", "izip_longest", "zip_longest" - ), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule( - "collections_abc", - "collections", - "collections.abc" if sys.version_info >= (3, 3) else "collections", - ), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), - MovedModule( - "_dummy_thread", - "dummy_thread", - "_dummy_thread" if sys.version_info < (3, 9) else "_thread", - ), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule( - "email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart" - ), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute( - "unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes" - ), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", - "moves.urllib.parse", -) - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", - "moves.urllib.error", -) - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", - "moves.urllib.request", -) - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module( - Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", - "moves.urllib.response", -) - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = ( - _urllib_robotparser_moved_attributes -) - -_importer._add_module( - Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", - "moves.urllib.robotparser", -) - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ["parse", "error", "request", "response", "robotparser"] - - -_importer._add_module( - Module_six_moves_urllib(__name__ + ".moves.urllib"), "moves.urllib" -) - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - - def advance_iterator(it): - return it.next() - - -next = advance_iterator - - -try: - callable = callable -except NameError: - - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc( - get_unbound_function, """Get the function out of a possibly unbound function""" -) - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc( - iterlists, "Return an iterator over the (key, [values]) pairs of a dictionary." -) - - -if PY3: - - def b(s): - return s.encode("latin-1") - - def u(s): - return s - - unichr = chr - import struct - - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - - StringIO = io.StringIO - BytesIO = io.BytesIO - del io - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" - _assertNotRegex = "assertNotRegex" -else: - - def b(s): - return s - - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r"\\", r"\\\\"), "unicode_escape") - - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - _assertNotRegex = "assertNotRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -def assertNotRegex(self, *args, **kwargs): - return getattr(self, _assertNotRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec ("""exec _code_ in _globs_, _locs_""") - - exec_( - """def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""" - ) - - -if sys.version_info[:2] > (3,): - exec_( - """def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""" - ) -else: - - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if ( - isinstance(fp, file) - and isinstance(data, unicode) - and fp.encoding is not None - ): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) - - -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - # This does exactly the same what the :func:`py3:functools.update_wrapper` - # function does on Python versions after 3.2. It sets the ``__wrapped__`` - # attribute on ``wrapper`` object and it doesn't raise an error if any of - # the attributes mentioned in ``assigned`` and ``updated`` are missing on - # ``wrapped`` object. - def _update_wrapper( - wrapper, - wrapped, - assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES, - ): - for attr in assigned: - try: - value = getattr(wrapped, attr) - except AttributeError: - continue - else: - setattr(wrapper, attr, value) - for attr in updated: - getattr(wrapper, attr).update(getattr(wrapped, attr, {})) - wrapper.__wrapped__ = wrapped - return wrapper - - _update_wrapper.__doc__ = functools.update_wrapper.__doc__ - - def wraps( - wrapped, - assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES, - ): - return functools.partial( - _update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated - ) - - wraps.__doc__ = functools.wraps.__doc__ - -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - def __new__(cls, name, this_bases, d): - if sys.version_info[:2] >= (3, 7): - # This version introduced PEP 560 that requires a bit - # of extra care (we mimic what is done by __build_class__). - resolved_bases = types.resolve_bases(bases) - if resolved_bases is not bases: - d["__orig_bases__"] = bases - else: - resolved_bases = bases - return meta(name, resolved_bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - - return type.__new__(metaclass, "temporary_class", (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get("__slots__") - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop("__dict__", None) - orig_vars.pop("__weakref__", None) - if hasattr(cls, "__qualname__"): - orig_vars["__qualname__"] = cls.__qualname__ - return metaclass(cls.__name__, cls.__bases__, orig_vars) - - return wrapper - - -def ensure_binary(s, encoding="utf-8", errors="strict"): - """Coerce **s** to six.binary_type. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> encoded to `bytes` - - `bytes` -> `bytes` - """ - if isinstance(s, binary_type): - return s - if isinstance(s, text_type): - return s.encode(encoding, errors) - raise TypeError("not expecting type '%s'" % type(s)) - - -def ensure_str(s, encoding="utf-8", errors="strict"): - """Coerce *s* to `str`. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - # Optimization: Fast return for the common case. - if type(s) is str: - return s - if PY2 and isinstance(s, text_type): - return s.encode(encoding, errors) - elif PY3 and isinstance(s, binary_type): - return s.decode(encoding, errors) - elif not isinstance(s, (text_type, binary_type)): - raise TypeError("not expecting type '%s'" % type(s)) - return s - - -def ensure_text(s, encoding="utf-8", errors="strict"): - """Coerce *s* to six.text_type. - - For Python 2: - - `unicode` -> `unicode` - - `str` -> `unicode` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - if isinstance(s, binary_type): - return s.decode(encoding, errors) - elif isinstance(s, text_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) - - -def python_2_unicode_compatible(klass): - """ - A class decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if "__str__" not in klass.__dict__: - raise ValueError( - "@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % klass.__name__ - ) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode("utf-8") - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if ( - type(importer).__name__ == "_SixMetaPathImporter" - and importer.name == __name__ - ): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py deleted file mode 100644 index fb51bf7d9..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +++ /dev/null @@ -1,540 +0,0 @@ -from __future__ import absolute_import - -import collections -import functools -import logging - -from ._collections import HTTPHeaderDict, RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, port_by_scheme -from .exceptions import ( - LocationValueError, - MaxRetryError, - ProxySchemeUnknown, - ProxySchemeUnsupported, - URLSchemeUnknown, -) -from .packages import six -from .packages.six.moves.urllib.parse import urljoin -from .request import RequestMethods -from .util.proxy import connection_requires_http_tunnel -from .util.retry import Retry -from .util.url import parse_url - -__all__ = ["PoolManager", "ProxyManager", "proxy_from_url"] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ( - "key_file", - "cert_file", - "cert_reqs", - "ca_certs", - "ssl_version", - "ca_cert_dir", - "ssl_context", - "key_password", - "server_hostname", -) - -# All known keyword arguments that could be provided to the pool manager, its -# pools, or the underlying connections. This is used to construct a pool key. -_key_fields = ( - "key_scheme", # str - "key_host", # str - "key_port", # int - "key_timeout", # int or float or Timeout - "key_retries", # int or Retry - "key_strict", # bool - "key_block", # bool - "key_source_address", # str - "key_key_file", # str - "key_key_password", # str - "key_cert_file", # str - "key_cert_reqs", # str - "key_ca_certs", # str - "key_ssl_version", # str - "key_ca_cert_dir", # str - "key_ssl_context", # instance of ssl.SSLContext or urllib3.util.ssl_.SSLContext - "key_maxsize", # int - "key_headers", # dict - "key__proxy", # parsed proxy url - "key__proxy_headers", # dict - "key__proxy_config", # class - "key_socket_options", # list of (level (int), optname (int), value (int or str)) tuples - "key__socks_options", # dict - "key_assert_hostname", # bool or string - "key_assert_fingerprint", # str - "key_server_hostname", # str -) - -#: The namedtuple class used to construct keys for the connection pool. -#: All custom key schemes should include the fields in this key at a minimum. -PoolKey = collections.namedtuple("PoolKey", _key_fields) - -_proxy_config_fields = ("ssl_context", "use_forwarding_for_https") -ProxyConfig = collections.namedtuple("ProxyConfig", _proxy_config_fields) - - -def _default_key_normalizer(key_class, request_context): - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context["scheme"] = context["scheme"].lower() - context["host"] = context["host"].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ("headers", "_proxy_headers", "_socks_options"): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get("socket_options") - if socket_opts is not None: - context["socket_options"] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context["key_" + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - "http": functools.partial(_default_key_normalizer, PoolKey), - "https": functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = {"http": HTTPConnectionPool, "https": HTTPSConnectionPool} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - proxy_config = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port, request_context=None): - """ - Create a new :class:`urllib3.connectionpool.ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ("scheme", "host", "port"): - request_context.pop(key, None) - - if scheme == "http": - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme="http", pool_kwargs=None): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context["scheme"] = scheme or "http" - if not port: - port = port_by_scheme.get(request_context["scheme"].lower(), 80) - request_context["port"] = port - request_context["host"] = host - - return self.connection_from_context(request_context) - - def connection_from_context(self, request_context): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - scheme = request_context["scheme"].lower() - pool_key_constructor = self.key_fn_by_scheme.get(scheme) - if not pool_key_constructor: - raise URLSchemeUnknown(scheme) - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key(self, pool_key, request_context=None): - """ - Get a :class:`urllib3.connectionpool.ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context["scheme"] - host = request_context["host"] - port = request_context["port"] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url, pool_kwargs=None): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host( - u.host, port=u.port, scheme=u.scheme, pool_kwargs=pool_kwargs - ) - - def _merge_pool_kwargs(self, override): - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def _proxy_requires_url_absolute_form(self, parsed_url): - """ - Indicates if the proxy requires the complete destination URL in the - request. Normally this is only needed when not using an HTTP CONNECT - tunnel. - """ - if self.proxy is None: - return False - - return not connection_requires_http_tunnel( - self.proxy, self.proxy_config, parsed_url.scheme - ) - - def _validate_proxy_scheme_url_selection(self, url_scheme): - """ - Validates that were not attempting to do TLS in TLS connections on - Python2 or with unsupported SSL implementations. - """ - if self.proxy is None or url_scheme != "https": - return - - if self.proxy.scheme != "https": - return - - if six.PY2 and not self.proxy_config.use_forwarding_for_https: - raise ProxySchemeUnsupported( - "Contacting HTTPS destinations through HTTPS proxies " - "'via CONNECT tunnels' is not supported in Python 2" - ) - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - self._validate_proxy_scheme_url_selection(u.scheme) - - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw["assert_same_host"] = False - kw["redirect"] = False - - if "headers" not in kw: - kw["headers"] = self.headers.copy() - - if self._proxy_requires_url_absolute_form(u): - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - if response.status == 303: - # Change the method according to RFC 9110, Section 15.4.4. - method = "GET" - # And lose the body not to transfer anything sensitive. - kw["body"] = None - kw["headers"] = HTTPHeaderDict(kw["headers"])._prepare_for_method_change() - - retries = kw.get("retries") - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - # Strip headers marked as unsafe to forward to the redirected location. - # Check remove_headers_on_redirect to avoid a potential network call within - # conn.is_same_host() which may use socket.gethostbyname() in the future. - if retries.remove_headers_on_redirect and not conn.is_same_host( - redirect_location - ): - headers = list(six.iterkeys(kw["headers"])) - for header in headers: - if header.lower() in retries.remove_headers_on_redirect: - kw["headers"].pop(header, None) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - response.drain_conn() - raise - return response - - kw["retries"] = retries - kw["redirect"] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - - response.drain_conn() - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary containing headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - :param proxy_ssl_context: - The proxy SSL context is used to establish the TLS connection to the - proxy when using HTTPS proxies. - - :param use_forwarding_for_https: - (Defaults to False) If set to True will forward requests to the HTTPS - proxy to be made on behalf of the client instead of creating a TLS - tunnel via the CONNECT method. **Enabling this flag means that request - and response headers and content will be visible from the HTTPS proxy** - whereas tunneling keeps request and response headers and content - private. IP address, target hostname, SNI, and port are always visible - to an HTTPS proxy even when this flag is disabled. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__( - self, - proxy_url, - num_pools=10, - headers=None, - proxy_headers=None, - proxy_ssl_context=None, - use_forwarding_for_https=False, - **connection_pool_kw - ): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = "%s://%s:%i" % ( - proxy_url.scheme, - proxy_url.host, - proxy_url.port, - ) - proxy = parse_url(proxy_url) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - self.proxy_ssl_context = proxy_ssl_context - self.proxy_config = ProxyConfig(proxy_ssl_context, use_forwarding_for_https) - - connection_pool_kw["_proxy"] = self.proxy - connection_pool_kw["_proxy_headers"] = self.proxy_headers - connection_pool_kw["_proxy_config"] = self.proxy_config - - super(ProxyManager, self).__init__(num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme="http", pool_kwargs=None): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs - ) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs - ) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {"Accept": "*/*"} - - netloc = parse_url(url).netloc - if netloc: - headers_["Host"] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - if not connection_requires_http_tunnel(self.proxy, self.proxy_config, u.scheme): - # For connections using HTTP CONNECT, httplib sets the necessary - # headers on the CONNECT to the proxy. If we're not using CONNECT, - # we'll definitely need to set 'Host' at the very least. - headers = kw.get("headers", self.headers) - kw["headers"] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/request.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/request.py deleted file mode 100644 index 3b4cf9992..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/request.py +++ /dev/null @@ -1,191 +0,0 @@ -from __future__ import absolute_import - -import sys - -from .filepost import encode_multipart_formdata -from .packages import six -from .packages.six.moves.urllib.parse import urlencode - -__all__ = ["RequestMethods"] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`urllib3.HTTPConnectionPool` and - :class:`urllib3.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"} - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen( - self, - method, - url, - body=None, - headers=None, - encode_multipart=True, - multipart_boundary=None, - **kw - ): # Abstract - raise NotImplementedError( - "Classes extending RequestMethods must implement " - "their own ``urlopen`` method." - ) - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - urlopen_kw["request_url"] = url - - if method in self._encode_url_methods: - return self.request_encode_url( - method, url, fields=fields, headers=headers, **urlopen_kw - ) - else: - return self.request_encode_body( - method, url, fields=fields, headers=headers, **urlopen_kw - ) - - def request_encode_url(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if headers is None: - headers = self.headers - - extra_kw = {"headers": headers} - extra_kw.update(urlopen_kw) - - if fields: - url += "?" + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body( - self, - method, - url, - fields=None, - headers=None, - encode_multipart=True, - multipart_boundary=None, - **urlopen_kw - ): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :func:`urllib3.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :func:`urllib.parse.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimic behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {"headers": {}} - - if fields: - if "body" in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one." - ) - - if encode_multipart: - body, content_type = encode_multipart_formdata( - fields, boundary=multipart_boundary - ) - else: - body, content_type = ( - urlencode(fields), - "application/x-www-form-urlencoded", - ) - - extra_kw["body"] = body - extra_kw["headers"] = {"Content-Type": content_type} - - extra_kw["headers"].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) - - -if not six.PY2: - - class RequestModule(sys.modules[__name__].__class__): - def __call__(self, *args, **kwargs): - """ - If user tries to call this module directly urllib3 v2.x style raise an error to the user - suggesting they may need urllib3 v2 - """ - raise TypeError( - "'module' object is not callable\n" - "urllib3.request() method is not supported in this release, " - "upgrade to urllib3 v2 to use it\n" - "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html" - ) - - sys.modules[__name__].__class__ = RequestModule diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/response.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/response.py deleted file mode 100644 index 8909f8454..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/response.py +++ /dev/null @@ -1,879 +0,0 @@ -from __future__ import absolute_import - -import io -import logging -import sys -import warnings -import zlib -from contextlib import contextmanager -from socket import error as SocketError -from socket import timeout as SocketTimeout - -brotli = None - -from . import util -from ._collections import HTTPHeaderDict -from .connection import BaseSSLError, HTTPException -from .exceptions import ( - BodyNotHttplibCompatible, - DecodeError, - HTTPError, - IncompleteRead, - InvalidChunkLength, - InvalidHeader, - ProtocolError, - ReadTimeoutError, - ResponseNotChunked, - SSLError, -) -from .packages import six -from .util.response import is_fp_closed, is_response_to_head - -log = logging.getLogger(__name__) - - -class DeflateDecoder(object): - def __init__(self): - self._first_try = True - self._data = b"" - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - decompressed = self._obj.decompress(data) - if decompressed: - self._first_try = False - self._data = None - return decompressed - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoderState(object): - - FIRST_MEMBER = 0 - OTHER_MEMBERS = 1 - SWALLOW_DATA = 2 - - -class GzipDecoder(object): - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - self._state = GzipDecoderState.FIRST_MEMBER - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - ret = bytearray() - if self._state == GzipDecoderState.SWALLOW_DATA or not data: - return bytes(ret) - while True: - try: - ret += self._obj.decompress(data) - except zlib.error: - previous_state = self._state - # Ignore data after the first error - self._state = GzipDecoderState.SWALLOW_DATA - if previous_state == GzipDecoderState.OTHER_MEMBERS: - # Allow trailing garbage acceptable in other gzip clients - return bytes(ret) - raise - data = self._obj.unused_data - if not data: - return bytes(ret) - self._state = GzipDecoderState.OTHER_MEMBERS - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - -if brotli is not None: - - class BrotliDecoder(object): - # Supports both 'brotlipy' and 'Brotli' packages - # since they share an import name. The top branches - # are for 'brotlipy' and bottom branches for 'Brotli' - def __init__(self): - self._obj = brotli.Decompressor() - if hasattr(self._obj, "decompress"): - self.decompress = self._obj.decompress - else: - self.decompress = self._obj.process - - def flush(self): - if hasattr(self._obj, "flush"): - return self._obj.flush() - return b"" - - -class MultiDecoder(object): - """ - From RFC7231: - If one or more encodings have been applied to a representation, the - sender that applied the encodings MUST generate a Content-Encoding - header field that lists the content codings in the order in which - they were applied. - """ - - def __init__(self, modes): - self._decoders = [_get_decoder(m.strip()) for m in modes.split(",")] - - def flush(self): - return self._decoders[0].flush() - - def decompress(self, data): - for d in reversed(self._decoders): - data = d.decompress(data) - return data - - -def _get_decoder(mode): - if "," in mode: - return MultiDecoder(mode) - - if mode == "gzip": - return GzipDecoder() - - if brotli is not None and mode == "br": - return BrotliDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible with :class:`http.client.HTTPResponse` but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in :class:`http.client.HTTPResponse`: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param original_response: - When this HTTPResponse wrapper is generated from an :class:`http.client.HTTPResponse` - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - CONTENT_DECODERS = ["gzip", "deflate"] - if brotli is not None: - CONTENT_DECODERS += ["br"] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__( - self, - body="", - headers=None, - status=0, - version=0, - reason=None, - strict=0, - preload_content=True, - decode_content=True, - original_response=None, - pool=None, - connection=None, - msg=None, - retries=None, - enforce_content_length=False, - request_method=None, - request_url=None, - auto_close=True, - ): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - self.retries = retries - self.enforce_content_length = enforce_content_length - self.auto_close = auto_close - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - self.msg = msg - self._request_url = request_url - - if body and isinstance(body, (six.string_types, bytes)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, "read"): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get("transfer-encoding", "").lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get("location") - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - def drain_conn(self): - """ - Read and discard any remaining HTTP response data in the response connection. - - Unread data in the HTTPResponse connection blocks the connection from being released back to the pool. - """ - try: - self.read() - except (HTTPError, SocketError, BaseSSLError, HTTPException): - pass - - @property - def data(self): - # For backwards-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - @property - def connection(self): - return self._connection - - def isclosed(self): - return is_fp_closed(self._fp) - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``urllib3.response.HTTPResponse.read`` - if bytes are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method): - """ - Set initial length value for Response content if available. - """ - length = self.headers.get("content-length") - - if length is not None: - if self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning( - "Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked." - ) - return None - - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = set([int(val) for val in length.split(",")]) - if len(lengths) > 1: - raise InvalidHeader( - "Content-Length contained multiple " - "unmatching values (%s)" % length - ) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == "HEAD": - length = 0 - - return length - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get("content-encoding", "").lower() - if self._decoder is None: - if content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - elif "," in content_encoding: - encodings = [ - e.strip() - for e in content_encoding.split(",") - if e.strip() in self.CONTENT_DECODERS - ] - if len(encodings): - self._decoder = _get_decoder(content_encoding) - - DECODER_ERROR_CLASSES = (IOError, zlib.error) - if brotli is not None: - DECODER_ERROR_CLASSES += (brotli.error,) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - if not decode_content: - return data - - try: - if self._decoder: - data = self._decoder.decompress(data) - except self.DECODER_ERROR_CLASSES as e: - content_encoding = self.headers.get("content-encoding", "").lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, - e, - ) - if flush_decoder: - data += self._flush_decoder() - - return data - - def _flush_decoder(self): - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - buf = self._decoder.decompress(b"") - return buf + self._decoder.flush() - - return b"" - - @contextmanager - def _error_catcher(self): - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, "Read timed out.") - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if "read operation timed out" not in str(e): - # SSL errors related to framing/MAC get wrapped and reraised here - raise SSLError(e) - - raise ReadTimeoutError(self._pool, None, "Read timed out.") - - except (HTTPException, SocketError) as e: - # This includes IncompleteRead. - raise ProtocolError("Connection broken: %r" % e, e) - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def _fp_read(self, amt): - """ - Read a response with the thought that reading the number of bytes - larger than can fit in a 32-bit int at a time via SSL in some - known cases leads to an overflow error that has to be prevented - if `amt` or `self.length_remaining` indicate that a problem may - happen. - - The known cases: - * 3.8 <= CPython < 3.9.7 because of a bug - https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900. - * urllib3 injected with pyOpenSSL-backed SSL-support. - * CPython < 3.10 only when `amt` does not fit 32-bit int. - """ - assert self._fp - c_int_max = 2 ** 31 - 1 - if ( - ( - (amt and amt > c_int_max) - or (self.length_remaining and self.length_remaining > c_int_max) - ) - and not util.IS_SECURETRANSPORT - and (util.IS_PYOPENSSL or sys.version_info < (3, 10)) - ): - buffer = io.BytesIO() - # Besides `max_chunk_amt` being a maximum chunk size, it - # affects memory overhead of reading a response by this - # method in CPython. - # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum - # chunk size that does not lead to an overflow error, but - # 256 MiB is a compromise. - max_chunk_amt = 2 ** 28 - while amt is None or amt != 0: - if amt is not None: - chunk_amt = min(amt, max_chunk_amt) - amt -= chunk_amt - else: - chunk_amt = max_chunk_amt - data = self._fp.read(chunk_amt) - if not data: - break - buffer.write(data) - del data # to reduce peak memory usage by `max_chunk_amt`. - return buffer.getvalue() - else: - # StringIO doesn't like amt=None - return self._fp.read(amt) if amt is not None else self._fp.read() - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`http.client.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - fp_closed = getattr(self._fp, "closed", False) - - with self._error_catcher(): - data = self._fp_read(amt) if not fp_closed else b"" - if amt is None: - flush_decoder = True - else: - cache_content = False - if ( - amt != 0 and not data - ): # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - if self.enforce_content_length and self.length_remaining not in ( - 0, - None, - ): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - def stream(self, amt=2 ** 16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`http.client.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - - if not isinstance(headers, HTTPHeaderDict): - if six.PY2: - # Python 2.7 - headers = HTTPHeaderDict.from_httplib(headers) - else: - headers = HTTPHeaderDict(headers.items()) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, "strict", 0) - resp = ResponseCls( - body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw - ) - return resp - - # Backwards-compatibility methods for http.client.HTTPResponse - def getheaders(self): - warnings.warn( - "HTTPResponse.getheaders() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead access HTTPResponse.headers directly.", - category=DeprecationWarning, - stacklevel=2, - ) - return self.headers - - def getheader(self, name, default=None): - warnings.warn( - "HTTPResponse.getheader() is deprecated and will be removed " - "in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default).", - category=DeprecationWarning, - stacklevel=2, - ) - return self.headers.get(name, default) - - # Backwards compatibility for http.cookiejar - def info(self): - return self.headers - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - if self._connection: - self._connection.close() - - if not self.auto_close: - io.IOBase.close(self) - - @property - def closed(self): - if not self.auto_close: - return io.IOBase.closed.__get__(self) - elif self._fp is None: - return True - elif hasattr(self._fp, "isclosed"): - return self._fp.isclosed() - elif hasattr(self._fp, "closed"): - return self._fp.closed - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError( - "The file-like object this HTTPResponse is wrapped " - "around has no file descriptor" - ) - - def flush(self): - if ( - self._fp is not None - and hasattr(self._fp, "flush") - and not getattr(self._fp, "closed", False) - ): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[: len(temp)] = temp - return len(temp) - - def supports_chunked_reads(self): - """ - Checks if the underlying file-like object looks like a - :class:`http.client.HTTPResponse` object. We do this by testing for - the fp attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, "fp") - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b";", 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise InvalidChunkLength(self, line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing." - ) - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be http.client.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks." - ) - - with self._error_catcher(): - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return - - # If a response is already read and closed - # then return immediately. - if self._fp.fp is None: - return - - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode( - chunk, decode_content=decode_content, flush_decoder=False - ) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b"\r\n": - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() - - def geturl(self): - """ - Returns the URL that was the source of this response. - If the request that generated this response redirected, this method - will return the final redirect location. - """ - if self.retries is not None and len(self.retries.history): - return self.retries.history[-1].redirect_location - else: - return self._request_url - - def __iter__(self): - buffer = [] - for chunk in self.stream(decode_content=True): - if b"\n" in chunk: - chunk = chunk.split(b"\n") - yield b"".join(buffer) + chunk[0] + b"\n" - for x in chunk[1:-1]: - yield x + b"\n" - if chunk[-1]: - buffer = [chunk[-1]] - else: - buffer = [] - else: - buffer.append(chunk) - if buffer: - yield b"".join(buffer) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py deleted file mode 100644 index 4547fc522..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +++ /dev/null @@ -1,49 +0,0 @@ -from __future__ import absolute_import - -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import SKIP_HEADER, SKIPPABLE_HEADERS, make_headers -from .response import is_fp_closed -from .retry import Retry -from .ssl_ import ( - ALPN_PROTOCOLS, - HAS_SNI, - IS_PYOPENSSL, - IS_SECURETRANSPORT, - PROTOCOL_TLS, - SSLContext, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import Timeout, current_time -from .url import Url, get_host, parse_url, split_first -from .wait import wait_for_read, wait_for_write - -__all__ = ( - "HAS_SNI", - "IS_PYOPENSSL", - "IS_SECURETRANSPORT", - "SSLContext", - "PROTOCOL_TLS", - "ALPN_PROTOCOLS", - "Retry", - "Timeout", - "Url", - "assert_fingerprint", - "current_time", - "is_connection_dropped", - "is_fp_closed", - "get_host", - "parse_url", - "make_headers", - "resolve_cert_reqs", - "resolve_ssl_version", - "split_first", - "ssl_wrap_socket", - "wait_for_read", - "wait_for_write", - "SKIP_HEADER", - "SKIPPABLE_HEADERS", -) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index a19d99588b6d1999abd8251c8107849e1fd7ac6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1187 zcmZ9LOK;mo5XYB#QEyrDBXXR?c>pbhz)_3@MpLu}R9C<f6)ZuN4+VrQXlZRTrbu>o z7{|Awz4v?c*h{}h+uH($552Uv06~#!XXrQrN`OD?47tPqe|Gq|UMn-a{`mE8|EC;d ze^GFAWj-w4{f3Jl*h@CH9L6oMw%JQ-oN+Qd3)ys?b#gopd0v15x4}+xIj6`=P)gT% zr_3u*N!JCZ%4<;Lb*S?OH24av@Fp~Q3tD^?R{0vN@pV||8?ceSZ#%bm8`^vmHq*H1 z+~!-b#qYo!ei!cYdvGt!mz-^WAMW!9@L-#bEAVh!e#AP}f5=3~G7axYM?nHo_=`AF zfT?v~i&+$gat3}Bin)s7Sk60HQ*pm_MuPWy-}J|(Nx`W1^`QSD<C^NiJCov6dUL5X z7OG;Q<5<jsNaKFX<i`@!MW<})y}{@}jK;&saDO;(jm>+ma1R_)bzCv}ZaC^6xbDET zFmn6*hvWWa+&geb!|}vaZ+3|ZZY<+#`%wt;4VadvwNxOE{qRJpSotBCrjqFHwG=aY zqU875tlp%w4#aB|iXKgaf^+4?LPxVR37w3wC;mc437G0EQA&m&027^@$sVe}6i+0G z(@29U#h%hqB$%w|IPgh;(o~^#?okve{IEAS^^f7X@<ASS+Ny$QpsIu#p+Tq<X!ul# zutwM*tPs`-IFL*g3AYGsf=y@=T7*r)D&aO^i;yQ25S>S+EW~jFiIPI7ET&9(dE#k( zV`H}xsbRS-{e~%G|KcdbR+9pgS9GSSR+FPHUTgoKv(!{-FLklhNfM1soyAsPn<a}T zi~YQ|y|hT4Opdy^G-YfdydV(b7xoSxGxPKQ=hH(Jr>8W9yDwfmot{VPY#OWR6%MqX z;xs1nBTvg6KlA~i0SidAvpXGKz-bgd+kGyci#MO`iHTgqfrq~aEaK_FKbmShx1HFV zop~oxPh&ss;sk~BNOe(e;2%BfCg2BMA*i$vPvQ$x{9+N!lR$o@Iw;S=TYrgoo3$+K zl6~@Tfmu(kSnqe%yJQb9S^IsaVrAa5k7zUN@fF+qlkHux?%UjECG(@LKE(?E0fg>G A9{>OV diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-314.pyc deleted file mode 100644 index f6da5a54d5e6ba083cb230ce041e931b7ba4df2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4876 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-314.pyc deleted file mode 100644 index be75322741258d6296e612f451d3c72c1230f3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1640 zcmYjR%}?V-6d%V)Fu@BU$+FRw7FSWjM!SR}Qo4((N-f$hXjf?zWuqRfTE?D$yN>P7 zj9KWR%DtB!_t;~5?5%$Wut>BP5?l4My-|VMYu}9Rz$h8N_vU@h{NB4ieXD?A9sl~) zd7MY+FV3VZlMt6pAV%nGsVi-vO^HdH8J5|UnY@6yxvqQ%xf06)l@(O3o2j8j{%;A4 z8geve5o|JSgv527?N!6_J%;yLG)pk`-92nrm@tFjZ)sFcMU=Y69wyZBy|yK%>A;s~ z1bp`Ldmu)rj|RZaqpnm#{Y*FW@GFGuYYFPyFipv>EVSO`c716v5!<(8zLVCRs>64z zGxprgLWMbV0ZJ@%F$;-DwH^tv<_t8pi#4dx!xn?|H7G1}pf1hyw9Q_xqiuZIZa?1W zfgbV0on4_H5P$!mStzUrCNYQF^X@ZEi1?+g7c^L0<j2kv<wUo`O*edR;Orze5FD7; zOq}v`KoSyDWHccDPz!wD9h#oGgGn<uNCQ(wG#gXqctX{n)-E36*i{eeiup8=8=6h+ zp3}tIE@J_GAU+Q?%&bP?izv&5QBEB78kr~`JBg|x#m2xVFHK@Q-VP@Xp#+$j99JKy zF&UQ-m2SjLvZL@Ss9vu}KWwb)&ncirH*HK-9zFU{f9aDKIym?S9)s$Z>xcHXN%4~7 zISe++OxML^X+`fGuwCC<U1=FDWB=ir(Zj>Q<)~%DK!4_J>(pU*DKM=UaAQ;toM0IM z>e)V7PH?>(GRIvO$-;$33y^RE0gi0}0a2d8LO5{A3}l^!Km8205xSU1%Ixt(^^cj# zMII@4U-eHWYMfEfWa(6?9x2sVPfnEDxmx{Qt)8kY@H<pj{+y}&lSgXt5}Y6_$M<AG zFUOto8xSL;^KKMN=l3O6AGH#xKDO*jsjMq~ob*DF>u1s)*jW{QB9Hm|g3pfm8t3(i zaSWISt;A2NW6uhkTxT-Xy8gBjasl;o&|~s<ox&6BVSp}gApqyV3|$r@U4t>fvCYQ` z?>yfF1e(-aWZE{y9#`6PY;0@W2fWJ)065Yt00gIQ%$I2Ldj6DL-?WV+hL}sVkt6)R z2)`i0-z%Dc5GG@URDf&bNr|77`H5ngu~9UYP=@W0NF6gKGvnAv(v&|EK(}7k$Tas* zO=e|`d7fpWN$$e&2k@s`u#M2wG%7dFDvLi)y{@#*O0}Q1UYD9zIk}u4J^fEbw{D*o z-#IVNpQ+^^pB}#d(W$z2tggLL%BM>GNU5JF_ufp+9cJf95xh0zcDvokM_C>(u9g=X zm&{=*g8zbqa-65~$<Vh$7k^4%j3N#qItSZ@EJ@Ni>KviYRsKDx`0wXZMY<#G{s&;R BuN?pY diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-314.pyc deleted file mode 100644 index 7153353cf8354b01699a5c97bfe36de938f4ec36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1520 zcma)6-)kI29G}@=+1#bMHtiWwtd|fudukG6j>d*k1Ya5`;aoHzY%*;2CUx!J?q+7T zwn6H>#ZWNqQ~ek6=zmgMuys@@6hYrYQd%GV&g@-CLLVHs?|#4EnfZJ_^ZCxr2g9dI z2*%@||Bm)CLN8R%A9l|<_zs*dT16gSL;|fEp0S9p8N#S3-&{1WS;DHJ6{DrG`rC`| zd%ds?Xm1x7ju@z-3FKL$$g@|h*3j`CDr%ZVPPiVPL=ER36)rWfG<kG;7fX91r#TIa zMTIqb!NFB<0^qxX1on_HR?EVC3#Gt*6bWm^p2MCoiefAr&xFi?;sJGRF}RFG$#bCI zfE>IYt*4*sB7I<muY9299xQ;<MZU`E(K@=SmzzM%p0|vW!+8%)qFubyFl9MR<Cumb zN)s;aHia`WrFp}U7N_yL#DuGD^}4+G*@FKir;PhSo3h!<mp}5qP1#L9W9c`5!2K{z z^Y&W6=~R?N0t^=cfU~Jtzja4^ohEa$P0}Q{Ke<G{pq(rZ1SO)A`PZX0pGSgDWkGl| zxIwv}McE9wMU!^QW^xwC(c0WhE~0owOFo_5kv35^WaUtzX`N7Q<Rf6Z=#T37(`x;3 zwf>}f@dxY2(g9>qcqjn`s=r#uIyhalj3>}CYJq=pG~rgNF^Sk9e3%8MVK7xpnlVj! z3bA38aL5LaHmN*)gqqG&V3wZ-(?!2kM(#HsE<9Mc_x&UH9d-tiZ)SEyFMl(umg0Y6 zEaN`c8d6Qxe1WQJsdR!Y15NwPEs(r(jJid#T*%=g#35E{@^fIi=$SjTQ`#;)b;o{j z$9{VESGQJB@5!UND1o)8m-LqZPrZLnPmngVG;3h3HCJ`&g~}GWL61{~xC-<9tgid4 za&~8PdvoXR_T49y+M^y*-MOVkS-ONIL5C6|ON4aNb{;E#h>(puh<h^?Le?Y3MI0qG zNeN-9flR?OB?lW*<^mX5B?PXzh(Zzw!J@TXP!4cs2npkW^L7-9kj60~@OYd$l7wyQ zNT2E>u>pmrOc{QB63o9_Ao{+6?Z%#i&R=+muwC1Cus!}-nLP-{bp!OS#voHqpLF~G zBBt(#9O;MC@M=wW(p!`lx4~?E^|7?|^CHiYJjpq2_odKTjk=493i@ihR|=`FvJU}T wQRnZ2*)uW5zoU`A(D^@6{kiFE&2P<j=U-SCUpi$xe&2preo%gez|~m)0plD(cmMzZ diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-314.pyc deleted file mode 100644 index c68c6d7ff1f64072780dcd2f3641165d5de9b998..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4209 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-314.pyc deleted file mode 100644 index 33c378bfaa7fbeb49acd25cfb13148d8a1b02099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3111 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-314.pyc deleted file mode 100644 index f4b41337b89989aaaa656e66dfa44f91f56926f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21922 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-314.pyc deleted file mode 100644 index 19314c4d80d6181a4fff9e587494a812f6eb606c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15801 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 A3;+NC diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-314.pyc deleted file mode 100644 index e7977839cb937ef181d415561ade83505edaf45e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5361 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 Bjx+!O diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-314.pyc deleted file mode 100644 index 05148f1ea33059adb19fa22e0a5e41dcb7e6ceaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11150 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 G8TxM|j~8D6 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-314.pyc deleted file mode 100644 index 0b4b4f1d656a33185491a662f5d0c8f48618fafc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10828 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 I(JzPpKcA0&s{jB1 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-314.pyc deleted file mode 100644 index b9bcbeaea33b2ec8089f363808c05e5f6d5ae9cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16709 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-314.pyc b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-314.pyc deleted file mode 100644 index b8682bb527e5134c906bb47bfd953b9b29b515c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4717 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 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/connection.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/connection.py deleted file mode 100644 index 6af1138f2..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +++ /dev/null @@ -1,149 +0,0 @@ -from __future__ import absolute_import - -import socket - -from ..contrib import _appengine_environ -from ..exceptions import LocationParseError -from ..packages import six -from .wait import NoWayToWaitForSocketError, wait_for_read - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`http.client.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, "sock", False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - try: - # Returns True if readable, which here means it's been dropped - return wait_for_read(sock, timeout=0.0) - except NoWayToWaitForSocketError: # Platform-specific: AppEngine - return False - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection( - address, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, - socket_options=None, -): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`socket.getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith("["): - host = host.strip("[]") - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - try: - host.encode("idna") - except UnicodeError: - return six.raise_from( - LocationParseError(u"'%s', label empty or too long" % host), None - ) - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as e: - err = e - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family(): - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host): - """Returns True if the system can bind an IPv6 address.""" - sock = None - has_ipv6 = False - - # App Engine doesn't support IPV6 sockets and actually has a quota on the - # number of sockets that can be used, so just early out here instead of - # creating a socket needlessly. - # See https://github.com/urllib3/urllib3/issues/1446 - if _appengine_environ.is_appengine_sandbox(): - return False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/urllib3/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6("::1") diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py deleted file mode 100644 index 2199cc7b7..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +++ /dev/null @@ -1,57 +0,0 @@ -from .ssl_ import create_urllib3_context, resolve_cert_reqs, resolve_ssl_version - - -def connection_requires_http_tunnel( - proxy_url=None, proxy_config=None, destination_scheme=None -): - """ - Returns True if the connection requires an HTTP CONNECT through the proxy. - - :param URL proxy_url: - URL of the proxy. - :param ProxyConfig proxy_config: - Proxy configuration from poolmanager.py - :param str destination_scheme: - The scheme of the destination. (i.e https, http, etc) - """ - # If we're not using a proxy, no way to use a tunnel. - if proxy_url is None: - return False - - # HTTP destinations never require tunneling, we always forward. - if destination_scheme == "http": - return False - - # Support for forwarding with HTTPS proxies and HTTPS destinations. - if ( - proxy_url.scheme == "https" - and proxy_config - and proxy_config.use_forwarding_for_https - ): - return False - - # Otherwise always use a tunnel. - return True - - -def create_proxy_ssl_context( - ssl_version, cert_reqs, ca_certs=None, ca_cert_dir=None, ca_cert_data=None -): - """ - Generates a default proxy ssl context if one hasn't been provided by the - user. - """ - ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(ssl_version), - cert_reqs=resolve_cert_reqs(cert_reqs), - ) - - if ( - not ca_certs - and not ca_cert_dir - and not ca_cert_data - and hasattr(ssl_context, "load_default_certs") - ): - ssl_context.load_default_certs() - - return ssl_context diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/queue.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/queue.py deleted file mode 100644 index 41784104e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +++ /dev/null @@ -1,22 +0,0 @@ -import collections - -from ..packages import six -from ..packages.six.moves import queue - -if six.PY2: - # Queue is imported for side effects on MS Windows. See issue #229. - import Queue as _unused_module_Queue # noqa: F401 - - -class LifoQueue(queue.Queue): - def _init(self, _): - self.queue = collections.deque() - - def _qsize(self, len=len): - return len(self.queue) - - def _put(self, item): - self.queue.append(item) - - def _get(self): - return self.queue.pop() diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/request.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/request.py deleted file mode 100644 index 330766ef4..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/request.py +++ /dev/null @@ -1,137 +0,0 @@ -from __future__ import absolute_import - -from base64 import b64encode - -from ..exceptions import UnrewindableBodyError -from ..packages.six import b, integer_types - -# Pass as a value within ``headers`` to skip -# emitting some HTTP headers that are added automatically. -# The only headers that are supported are ``Accept-Encoding``, -# ``Host``, and ``User-Agent``. -SKIP_HEADER = "@@@SKIP_HEADER@@@" -SKIPPABLE_HEADERS = frozenset(["accept-encoding", "host", "user-agent"]) - -ACCEPT_ENCODING = "gzip,deflate" - -_FAILEDTELL = object() - - -def make_headers( - keep_alive=None, - accept_encoding=None, - user_agent=None, - basic_auth=None, - proxy_basic_auth=None, - disable_cache=None, -): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ",".join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers["accept-encoding"] = accept_encoding - - if user_agent: - headers["user-agent"] = user_agent - - if keep_alive: - headers["connection"] = "keep-alive" - - if basic_auth: - headers["authorization"] = "Basic " + b64encode(b(basic_auth)).decode("utf-8") - - if proxy_basic_auth: - headers["proxy-authorization"] = "Basic " + b64encode( - b(proxy_basic_auth) - ).decode("utf-8") - - if disable_cache: - headers["cache-control"] = "no-cache" - - return headers - - -def set_file_position(body, pos): - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, "tell", None) is not None: - try: - pos = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body, body_pos): - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, "seek", None) - if body_seek is not None and isinstance(body_pos, integer_types): - try: - body_seek(body_pos) - except (IOError, OSError): - raise UnrewindableBodyError( - "An error occurred when rewinding request body for redirect/retry." - ) - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError( - "Unable to record file position for rewinding " - "request body during a redirect/retry." - ) - else: - raise ValueError( - "body_pos must be of type integer, instead it was %s." % type(body_pos) - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/response.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/response.py deleted file mode 100644 index 5ea609cce..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/response.py +++ /dev/null @@ -1,107 +0,0 @@ -from __future__ import absolute_import - -from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect - -from ..exceptions import HeaderParsingError -from ..packages.six.moves import http_client as httplib - - -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers): - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param http.client.HTTPMessage headers: Headers to verify. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError("expected httplib.Message, got {0}.".format(type(headers))) - - defects = getattr(headers, "defects", None) - get_payload = getattr(headers, "get_payload", None) - - unparsed_data = None - if get_payload: - # get_payload is actually email.message.Message.get_payload; - # we're only interested in the result if it's not a multipart message - if not headers.is_multipart(): - payload = get_payload() - - if isinstance(payload, (bytes, str)): - unparsed_data = payload - if defects: - # httplib is assuming a response body is available - # when parsing headers even when httplib only sends - # header data to parse_headers() This results in - # defects on multipart responses in particular. - # See: https://github.com/urllib3/urllib3/issues/800 - - # So we ignore the following defects: - # - StartBoundaryNotFoundDefect: - # The claimed start boundary was never found. - # - MultipartInvariantViolationDefect: - # A message claimed to be a multipart but no subparts were found. - defects = [ - defect - for defect in defects - if not isinstance( - defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect) - ) - ] - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response): - """ - Checks whether the request of a response has been a HEAD-request. - Handles the quirks of AppEngine. - - :param http.client.HTTPResponse response: - Response to check if the originating request - used 'HEAD' as a method. - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method = response._method - if isinstance(method, int): # Platform-specific: Appengine - return method == 3 - return method.upper() == "HEAD" diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/retry.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/retry.py deleted file mode 100644 index 9a1e90d0b..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +++ /dev/null @@ -1,622 +0,0 @@ -from __future__ import absolute_import - -import email -import logging -import re -import time -import warnings -from collections import namedtuple -from itertools import takewhile - -from ..exceptions import ( - ConnectTimeoutError, - InvalidHeader, - MaxRetryError, - ProtocolError, - ProxyError, - ReadTimeoutError, - ResponseError, -) -from ..packages import six - -log = logging.getLogger(__name__) - - -# Data structure for representing the metadata of requests that result in a retry. -RequestHistory = namedtuple( - "RequestHistory", ["method", "url", "error", "status", "redirect_location"] -) - - -# TODO: In v2 we can remove this sentinel and metaclass with deprecated options. -_Default = object() - - -class _RetryMeta(type): - @property - def DEFAULT_METHOD_WHITELIST(cls): - warnings.warn( - "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead", - DeprecationWarning, - ) - return cls.DEFAULT_ALLOWED_METHODS - - @DEFAULT_METHOD_WHITELIST.setter - def DEFAULT_METHOD_WHITELIST(cls, value): - warnings.warn( - "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead", - DeprecationWarning, - ) - cls.DEFAULT_ALLOWED_METHODS = value - - @property - def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls): - warnings.warn( - "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead", - DeprecationWarning, - ) - return cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT - - @DEFAULT_REDIRECT_HEADERS_BLACKLIST.setter - def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls, value): - warnings.warn( - "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead", - DeprecationWarning, - ) - cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT = value - - @property - def BACKOFF_MAX(cls): - warnings.warn( - "Using 'Retry.BACKOFF_MAX' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead", - DeprecationWarning, - ) - return cls.DEFAULT_BACKOFF_MAX - - @BACKOFF_MAX.setter - def BACKOFF_MAX(cls, value): - warnings.warn( - "Using 'Retry.BACKOFF_MAX' is deprecated and " - "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead", - DeprecationWarning, - ) - cls.DEFAULT_BACKOFF_MAX = value - - -@six.add_metaclass(_RetryMeta) -class Retry(object): - """Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param int other: - How many times to retry on other errors. - - Other errors are errors that are not connect, read, redirect or status errors. - These errors might be raised after the request was sent to the server, so the - request might have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - If ``total`` is not set, it's a good idea to set this to 0 to account - for unexpected edge cases and avoid infinite retry loops. - - :param iterable allowed_methods: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_ALLOWED_METHODS`. - - Set to a ``False`` value to retry on any verb. - - .. warning:: - - Previously this parameter was named ``method_whitelist``, that - usage is deprecated in v1.26.0 and will be removed in v2.0. - - :param iterable status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``allowed_methods`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ** ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.DEFAULT_BACKOFF_MAX`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - :param iterable remove_headers_on_redirect: - Sequence of headers to remove from the request when a response - indicating a redirect is returned before firing off the redirected - request. - """ - - #: Default methods to be used for ``allowed_methods`` - DEFAULT_ALLOWED_METHODS = frozenset( - ["HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"] - ) - - #: Default status codes to be used for ``status_forcelist`` - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - #: Default headers to be used for ``remove_headers_on_redirect`` - DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset( - ["Cookie", "Authorization", "Proxy-Authorization"] - ) - - #: Maximum backoff time. - DEFAULT_BACKOFF_MAX = 120 - - def __init__( - self, - total=10, - connect=None, - read=None, - redirect=None, - status=None, - other=None, - allowed_methods=_Default, - status_forcelist=None, - backoff_factor=0, - raise_on_redirect=True, - raise_on_status=True, - history=None, - respect_retry_after_header=True, - remove_headers_on_redirect=_Default, - # TODO: Deprecated, remove in v2.0 - method_whitelist=_Default, - ): - - if method_whitelist is not _Default: - if allowed_methods is not _Default: - raise ValueError( - "Using both 'allowed_methods' and " - "'method_whitelist' together is not allowed. " - "Instead only use 'allowed_methods'" - ) - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - stacklevel=2, - ) - allowed_methods = method_whitelist - if allowed_methods is _Default: - allowed_methods = self.DEFAULT_ALLOWED_METHODS - if remove_headers_on_redirect is _Default: - remove_headers_on_redirect = self.DEFAULT_REMOVE_HEADERS_ON_REDIRECT - - self.total = total - self.connect = connect - self.read = read - self.status = status - self.other = other - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.allowed_methods = allowed_methods - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or tuple() - self.respect_retry_after_header = respect_retry_after_header - self.remove_headers_on_redirect = frozenset( - [h.lower() for h in remove_headers_on_redirect] - ) - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, - read=self.read, - redirect=self.redirect, - status=self.status, - other=self.other, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - remove_headers_on_redirect=self.remove_headers_on_redirect, - respect_retry_after_header=self.respect_retry_after_header, - ) - - # TODO: If already given in **kw we use what's given to us - # If not given we need to figure out what to pass. We decide - # based on whether our class has the 'method_whitelist' property - # and if so we pass the deprecated 'method_whitelist' otherwise - # we use 'allowed_methods'. Remove in v2.0 - if "method_whitelist" not in kw and "allowed_methods" not in kw: - if "method_whitelist" in self.__dict__: - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - params["method_whitelist"] = self.allowed_methods - else: - params["allowed_methods"] = self.allowed_methods - - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self): - """Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len( - list( - takewhile(lambda x: x.redirect_location is None, reversed(self.history)) - ) - ) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - return min(self.DEFAULT_BACKOFF_MAX, backoff_value) - - def parse_retry_after(self, retry_after): - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate_tz(retry_after) - if retry_date_tuple is None: - raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) - if retry_date_tuple[9] is None: # Python 2 - # Assume UTC if no timezone was specified - # On Python2.7, parsedate_tz returns None for a timezone offset - # instead of 0 if no timezone is given, where mktime_tz treats - # a None timezone offset as local time. - retry_date_tuple = retry_date_tuple[:9] + (0,) + retry_date_tuple[10:] - - retry_date = email.utils.mktime_tz(retry_date_tuple) - seconds = retry_date - time.time() - - if seconds < 0: - seconds = 0 - - return seconds - - def get_retry_after(self, response): - """Get the value of Retry-After in seconds.""" - - retry_after = response.headers.get("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response=None): - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self): - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response=None): - """Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if self.respect_retry_after_header and response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err): - """Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - if isinstance(err, ProxyError): - err = err.original_error - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method): - """Checks if a given HTTP method should be retried upon, depending if - it is included in the allowed_methods - """ - # TODO: For now favor if the Retry implementation sets its own method_whitelist - # property outside of our constructor to avoid breaking custom implementations. - if "method_whitelist" in self.__dict__: - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - allowed_methods = self.method_whitelist - else: - allowed_methods = self.allowed_methods - - if allowed_methods and method.upper() not in allowed_methods: - return False - return True - - def is_retry(self, method, status_code, has_retry_after=False): - """Is this method/status code retryable? (Based on allowlists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return ( - self.total - and self.respect_retry_after_header - and has_retry_after - and (status_code in self.RETRY_AFTER_STATUS_CODES) - ) - - def is_exhausted(self): - """Are we out of retries?""" - retry_counts = ( - self.total, - self.connect, - self.read, - self.redirect, - self.status, - self.other, - ) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment( - self, - method=None, - url=None, - response=None, - error=None, - _pool=None, - _stacktrace=None, - ): - """Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - other = self.other - cause = "unknown" - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or not self._is_method_retryable(method): - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif error: - # Other retry? - if other is not None: - other -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = "too many redirects" - redirect_location = response.get_redirect_location() - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and the given method is in the allowed_methods - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) - status = response.status - - history = self.history + ( - RequestHistory(method, url, error, status, redirect_location), - ) - - new_retry = self.new( - total=total, - connect=connect, - read=read, - redirect=redirect, - status=status_count, - other=other, - history=history, - ) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self): - return ( - "{cls.__name__}(total={self.total}, connect={self.connect}, " - "read={self.read}, redirect={self.redirect}, status={self.status})" - ).format(cls=type(self), self=self) - - def __getattr__(self, item): - if item == "method_whitelist": - # TODO: Remove this deprecated alias in v2.0 - warnings.warn( - "Using 'method_whitelist' with Retry is deprecated and " - "will be removed in v2.0. Use 'allowed_methods' instead", - DeprecationWarning, - ) - return self.allowed_methods - try: - return getattr(super(Retry, self), item) - except AttributeError: - return getattr(Retry, item) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py deleted file mode 100644 index 0a6a0e06a..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +++ /dev/null @@ -1,504 +0,0 @@ -from __future__ import absolute_import - -import hashlib -import hmac -import os -import sys -import warnings -from binascii import hexlify, unhexlify - -from ..exceptions import ( - InsecurePlatformWarning, - ProxySchemeUnsupported, - SNIMissingWarning, - SSLError, -) -from ..packages import six -from .url import BRACELESS_IPV6_ADDRZ_RE, IPV4_RE - -SSLContext = None -SSLTransport = None -HAS_SNI = False -IS_PYOPENSSL = False -IS_SECURETRANSPORT = False -ALPN_PROTOCOLS = ["http/1.1"] - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - length: getattr(hashlib, algorithm, None) - for length, algorithm in ((32, "md5"), (40, "sha1"), (64, "sha256")) -} - - -def _const_compare_digest_backport(a, b): - """ - Compare two digests of equal length in constant time. - - The digests must be of type str/bytes. - Returns True if the digests match, and False otherwise. - """ - result = abs(len(a) - len(b)) - for left, right in zip(bytearray(a), bytearray(b)): - result |= left ^ right - return result == 0 - - -_const_compare_digest = getattr(hmac, "compare_digest", _const_compare_digest_backport) - -try: # Test for SSL features - import ssl - from ssl import CERT_REQUIRED, wrap_socket -except ImportError: - pass - -try: - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - -try: - from .ssltransport import SSLTransport -except ImportError: - pass - - -try: # Platform-specific: Python 3.6 - from ssl import PROTOCOL_TLS - - PROTOCOL_SSLv23 = PROTOCOL_TLS -except ImportError: - try: - from ssl import PROTOCOL_SSLv23 as PROTOCOL_TLS - - PROTOCOL_SSLv23 = PROTOCOL_TLS - except ImportError: - PROTOCOL_SSLv23 = PROTOCOL_TLS = 2 - -try: - from ssl import PROTOCOL_TLS_CLIENT -except ImportError: - PROTOCOL_TLS_CLIENT = PROTOCOL_TLS - - -try: - from ssl import OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3 -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - - -try: # OP_NO_TICKET was added in Python 3.6 - from ssl import OP_NO_TICKET -except ImportError: - OP_NO_TICKET = 0x4000 - - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and -# security, -# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common, -# - disable NULL authentication, MD5 MACs, DSS, and other -# insecure ciphers for security reasons. -# - NOTE: TLS 1.3 cipher suites are managed through a different interface -# not exposed by CPython (yet!) and are enabled by default if they're available. -DEFAULT_CIPHERS = ":".join( - [ - "ECDHE+AESGCM", - "ECDHE+CHACHA20", - "DHE+AESGCM", - "DHE+CHACHA20", - "ECDH+AESGCM", - "DH+AESGCM", - "ECDH+AES", - "DH+AES", - "RSA+AESGCM", - "RSA+AES", - "!aNULL", - "!eNULL", - "!MD5", - "!DSS", - ] -) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - - class SSLContext(object): # Platform-specific: Python 2 - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - self.ca_certs = cafile - - if capath is not None: - raise SSLError("CA directories not supported in older Pythons") - - if cadata is not None: - raise SSLError("CA data not supported in older Pythons") - - def set_ciphers(self, cipher_suite): - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None, server_side=False): - warnings.warn( - "A true SSLContext object is not available. This prevents " - "urllib3 from configuring SSL appropriately and may cause " - "certain SSL connections to fail. You can upgrade to a newer " - "version of Python to solve this. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings", - InsecurePlatformWarning, - ) - kwargs = { - "keyfile": self.keyfile, - "certfile": self.certfile, - "ca_certs": self.ca_certs, - "cert_reqs": self.verify_mode, - "ssl_version": self.protocol, - "server_side": server_side, - } - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - fingerprint = fingerprint.replace(":", "").lower() - digest_length = len(fingerprint) - if digest_length not in HASHFUNC_MAP: - raise SSLError("Fingerprint of invalid length: {0}".format(fingerprint)) - hashfunc = HASHFUNC_MAP.get(digest_length) - if hashfunc is None: - raise SSLError( - "Hash function implementation unavailable for fingerprint length: {0}".format( - digest_length - ) - ) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not _const_compare_digest(cert_digest, fingerprint_bytes): - raise SSLError( - 'Fingerprints did not match. Expected "{0}", got "{1}".'.format( - fingerprint, hexlify(cert_digest) - ) - ) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_REQUIRED`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbreviation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_REQUIRED - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "CERT_" + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_TLS - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, "PROTOCOL_" + candidate) - return res - - return candidate - - -def create_urllib3_context( - ssl_version=None, cert_reqs=None, options=None, ciphers=None -): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from pip._vendor.urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - # PROTOCOL_TLS is deprecated in Python 3.10 - if not ssl_version or ssl_version == PROTOCOL_TLS: - ssl_version = PROTOCOL_TLS_CLIENT - - context = SSLContext(ssl_version) - - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - # TLSv1.2 only. Unless set explicitly, do not request tickets. - # This may save some bandwidth on wire, and although the ticket is encrypted, - # there is a risk associated with it being on wire, - # if the server is not rotating its ticketing keys properly. - options |= OP_NO_TICKET - - context.options |= options - - # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is - # necessary for conditional client cert authentication with TLS 1.3. - # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older - # versions of Python. We only enable on Python 3.7.4+ or if certificate - # verification is enabled to work around Python issue #37428 - # See: https://bugs.python.org/issue37428 - if (cert_reqs == ssl.CERT_REQUIRED or sys.version_info >= (3, 7, 4)) and getattr( - context, "post_handshake_auth", None - ) is not None: - context.post_handshake_auth = True - - def disable_check_hostname(): - if ( - getattr(context, "check_hostname", None) is not None - ): # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - - # The order of the below lines setting verify_mode and check_hostname - # matter due to safe-guards SSLContext has to prevent an SSLContext with - # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more - # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used - # or not so we don't know the initial state of the freshly created SSLContext. - if cert_reqs == ssl.CERT_REQUIRED: - context.verify_mode = cert_reqs - disable_check_hostname() - else: - disable_check_hostname() - context.verify_mode = cert_reqs - - # Enable logging of TLS session keys via defacto standard environment variable - # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values. - if hasattr(context, "keylog_filename"): - sslkeylogfile = os.environ.get("SSLKEYLOGFILE") - if sslkeylogfile: - context.keylog_filename = sslkeylogfile - - return context - - -def ssl_wrap_socket( - sock, - keyfile=None, - certfile=None, - cert_reqs=None, - ca_certs=None, - server_hostname=None, - ssl_version=None, - ciphers=None, - ssl_context=None, - ca_cert_dir=None, - key_password=None, - ca_cert_data=None, - tls_in_tls=False, -): - """ - All arguments except for server_hostname, ssl_context, and ca_cert_dir have - the same meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - :param key_password: - Optional password if the keyfile is encrypted. - :param ca_cert_data: - Optional string containing CA certificates in PEM format suitable for - passing as the cadata parameter to SSLContext.load_verify_locations() - :param tls_in_tls: - Use SSLTransport to wrap the existing socket. - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are no longer - # used by urllib3 itself. We should consider deprecating and removing - # this code. - context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers) - - if ca_certs or ca_cert_dir or ca_cert_data: - try: - context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data) - except (IOError, OSError) as e: - raise SSLError(e) - - elif ssl_context is None and hasattr(context, "load_default_certs"): - # try to load OS default certs; works well on Windows (require Python3.4+) - context.load_default_certs() - - # Attempt to detect if we get the goofy behavior of the - # keyfile being encrypted and OpenSSL asking for the - # passphrase via the terminal and instead error out. - if keyfile and key_password is None and _is_key_file_encrypted(keyfile): - raise SSLError("Client private key is encrypted, password is required") - - if certfile: - if key_password is None: - context.load_cert_chain(certfile, keyfile) - else: - context.load_cert_chain(certfile, keyfile, key_password) - - try: - if hasattr(context, "set_alpn_protocols"): - context.set_alpn_protocols(ALPN_PROTOCOLS) - except NotImplementedError: # Defensive: in CI, we always have set_alpn_protocols - pass - - # If we detect server_hostname is an IP address then the SNI - # extension should not be used according to RFC3546 Section 3.1 - use_sni_hostname = server_hostname and not is_ipaddress(server_hostname) - # SecureTransport uses server_hostname in certificate verification. - send_sni = (use_sni_hostname and HAS_SNI) or ( - IS_SECURETRANSPORT and server_hostname - ) - # Do not warn the user if server_hostname is an invalid SNI hostname. - if not HAS_SNI and use_sni_hostname: - warnings.warn( - "An HTTPS request has been made, but the SNI (Server Name " - "Indication) extension to TLS is not available on this platform. " - "This may cause the server to present an incorrect TLS " - "certificate, which can cause validation failures. You can upgrade to " - "a newer version of Python to solve this. For more information, see " - "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html" - "#ssl-warnings", - SNIMissingWarning, - ) - - if send_sni: - ssl_sock = _ssl_wrap_socket_impl( - sock, context, tls_in_tls, server_hostname=server_hostname - ) - else: - ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls) - return ssl_sock - - -def is_ipaddress(hostname): - """Detects whether the hostname given is an IPv4 or IPv6 address. - Also detects IPv6 addresses with Zone IDs. - - :param str hostname: Hostname to examine. - :return: True if the hostname is an IP address, False otherwise. - """ - if not six.PY2 and isinstance(hostname, bytes): - # IDN A-label bytes are ASCII compatible. - hostname = hostname.decode("ascii") - return bool(IPV4_RE.match(hostname) or BRACELESS_IPV6_ADDRZ_RE.match(hostname)) - - -def _is_key_file_encrypted(key_file): - """Detects if a key file is encrypted or not.""" - with open(key_file, "r") as f: - for line in f: - # Look for Proc-Type: 4,ENCRYPTED - if "ENCRYPTED" in line: - return True - - return False - - -def _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None): - if tls_in_tls: - if not SSLTransport: - # Import error, ssl is not available. - raise ProxySchemeUnsupported( - "TLS in TLS requires support for the 'ssl' module" - ) - - SSLTransport._validate_ssl_context_for_tls_in_tls(ssl_context) - return SSLTransport(sock, ssl_context, server_hostname) - - if server_hostname: - return ssl_context.wrap_socket(sock, server_hostname=server_hostname) - else: - return ssl_context.wrap_socket(sock) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py deleted file mode 100644 index 1dd950c48..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +++ /dev/null @@ -1,159 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re -import sys - -# ipaddress has been backported to 2.6+ in pypi. If it is installed on the -# system, use it to handle IPAddress ServerAltnames (this was added in -# python-3.5) otherwise only do DNS matching. This allows -# util.ssl_match_hostname to continue to be used in Python 2.7. -try: - import ipaddress -except ImportError: - ipaddress = None - -__version__ = "3.5.0.1" - - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r".") - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count("*") - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn) - ) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == "*": - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append("[^.]+") - elif leftmost.startswith("xn--") or hostname.startswith("xn--"): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r"\*", "[^.]*")) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r"\A" + r"\.".join(pats) + r"\Z", re.IGNORECASE) - return pat.match(hostname) - - -def _to_unicode(obj): - if isinstance(obj, str) and sys.version_info < (3,): - # ignored flake8 # F821 to support python 2.7 function - obj = unicode(obj, encoding="ascii", errors="strict") # noqa: F821 - return obj - - -def _ipaddress_match(ipname, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(_to_unicode(ipname).rstrip()) - return ip == host_ip - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError( - "empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED" - ) - try: - # Divergence from upstream: ipaddress can't handle byte str - host_ip = ipaddress.ip_address(_to_unicode(hostname)) - except (UnicodeError, ValueError): - # ValueError: Not an IP address (common case) - # UnicodeError: Divergence from upstream: Have to deal with ipaddress not taking - # byte strings. addresses should be all ascii, so we consider it not - # an ipaddress in this case - host_ip = None - except AttributeError: - # Divergence from upstream: Make ipaddress library optional - if ipaddress is None: - host_ip = None - else: # Defensive - raise - dnsnames = [] - san = cert.get("subjectAltName", ()) - for key, value in san: - if key == "DNS": - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == "IP Address": - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get("subject", ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == "commonName": - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError( - "hostname %r " - "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames))) - ) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0])) - else: - raise CertificateError( - "no appropriate commonName or subjectAltName fields were found" - ) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py deleted file mode 100644 index 4a7105d17..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +++ /dev/null @@ -1,221 +0,0 @@ -import io -import socket -import ssl - -from ..exceptions import ProxySchemeUnsupported -from ..packages import six - -SSL_BLOCKSIZE = 16384 - - -class SSLTransport: - """ - The SSLTransport wraps an existing socket and establishes an SSL connection. - - Contrary to Python's implementation of SSLSocket, it allows you to chain - multiple TLS connections together. It's particularly useful if you need to - implement TLS within TLS. - - The class supports most of the socket API operations. - """ - - @staticmethod - def _validate_ssl_context_for_tls_in_tls(ssl_context): - """ - Raises a ProxySchemeUnsupported if the provided ssl_context can't be used - for TLS in TLS. - - The only requirement is that the ssl_context provides the 'wrap_bio' - methods. - """ - - if not hasattr(ssl_context, "wrap_bio"): - if six.PY2: - raise ProxySchemeUnsupported( - "TLS in TLS requires SSLContext.wrap_bio() which isn't " - "supported on Python 2" - ) - else: - raise ProxySchemeUnsupported( - "TLS in TLS requires SSLContext.wrap_bio() which isn't " - "available on non-native SSLContext" - ) - - def __init__( - self, socket, ssl_context, server_hostname=None, suppress_ragged_eofs=True - ): - """ - Create an SSLTransport around socket using the provided ssl_context. - """ - self.incoming = ssl.MemoryBIO() - self.outgoing = ssl.MemoryBIO() - - self.suppress_ragged_eofs = suppress_ragged_eofs - self.socket = socket - - self.sslobj = ssl_context.wrap_bio( - self.incoming, self.outgoing, server_hostname=server_hostname - ) - - # Perform initial handshake. - self._ssl_io_loop(self.sslobj.do_handshake) - - def __enter__(self): - return self - - def __exit__(self, *_): - self.close() - - def fileno(self): - return self.socket.fileno() - - def read(self, len=1024, buffer=None): - return self._wrap_ssl_read(len, buffer) - - def recv(self, len=1024, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv") - return self._wrap_ssl_read(len) - - def recv_into(self, buffer, nbytes=None, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to recv_into") - if buffer and (nbytes is None): - nbytes = len(buffer) - elif nbytes is None: - nbytes = 1024 - return self.read(nbytes, buffer) - - def sendall(self, data, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to sendall") - count = 0 - with memoryview(data) as view, view.cast("B") as byte_view: - amount = len(byte_view) - while count < amount: - v = self.send(byte_view[count:]) - count += v - - def send(self, data, flags=0): - if flags != 0: - raise ValueError("non-zero flags not allowed in calls to send") - response = self._ssl_io_loop(self.sslobj.write, data) - return response - - def makefile( - self, mode="r", buffering=None, encoding=None, errors=None, newline=None - ): - """ - Python's httpclient uses makefile and buffered io when reading HTTP - messages and we need to support it. - - This is unfortunately a copy and paste of socket.py makefile with small - changes to point to the socket directly. - """ - if not set(mode) <= {"r", "w", "b"}: - raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) - - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = socket.SocketIO(self, rawmode) - self.socket._io_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text - - def unwrap(self): - self._ssl_io_loop(self.sslobj.unwrap) - - def close(self): - self.socket.close() - - def getpeercert(self, binary_form=False): - return self.sslobj.getpeercert(binary_form) - - def version(self): - return self.sslobj.version() - - def cipher(self): - return self.sslobj.cipher() - - def selected_alpn_protocol(self): - return self.sslobj.selected_alpn_protocol() - - def selected_npn_protocol(self): - return self.sslobj.selected_npn_protocol() - - def shared_ciphers(self): - return self.sslobj.shared_ciphers() - - def compression(self): - return self.sslobj.compression() - - def settimeout(self, value): - self.socket.settimeout(value) - - def gettimeout(self): - return self.socket.gettimeout() - - def _decref_socketios(self): - self.socket._decref_socketios() - - def _wrap_ssl_read(self, len, buffer=None): - try: - return self._ssl_io_loop(self.sslobj.read, len, buffer) - except ssl.SSLError as e: - if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs: - return 0 # eof, return 0. - else: - raise - - def _ssl_io_loop(self, func, *args): - """Performs an I/O loop between incoming/outgoing and the socket.""" - should_loop = True - ret = None - - while should_loop: - errno = None - try: - ret = func(*args) - except ssl.SSLError as e: - if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE): - # WANT_READ, and WANT_WRITE are expected, others are not. - raise e - errno = e.errno - - buf = self.outgoing.read() - self.socket.sendall(buf) - - if errno is None: - should_loop = False - elif errno == ssl.SSL_ERROR_WANT_READ: - buf = self.socket.recv(SSL_BLOCKSIZE) - if buf: - self.incoming.write(buf) - else: - self.incoming.write_eof() - return ret diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py deleted file mode 100644 index 78e18a627..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +++ /dev/null @@ -1,271 +0,0 @@ -from __future__ import absolute_import - -import time - -# The default socket timeout, used by httplib to indicate that no timeout was; specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - - -# Use time.monotonic if available. -current_time = getattr(time, "monotonic", time.time) - - -class Timeout(object): - """Timeout configuration. - - Timeouts can be defined as a default for a pool: - - .. code-block:: python - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool): - - .. code-block:: python - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``: - - .. code-block:: python - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: int, float, or None - - :param connect: - The maximum amount of time (in seconds) to wait for a connection - attempt to a server to succeed. Omitting the parameter will default the - connect timeout to the system default, probably `the global default - timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout for connection attempts. - - :type connect: int, float, or None - - :param read: - The maximum amount of time (in seconds) to wait between consecutive - read operations for a response from the server. Omitting the parameter - will default the read timeout to the system default, probably `the - global default timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout. - - :type read: int, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, "connect") - self._read = self._validate_timeout(read, "read") - self.total = self._validate_timeout(total, "total") - self._start_connect = None - - def __repr__(self): - return "%s(connect=%r, read=%r, total=%r)" % ( - type(self).__name__, - self._connect, - self._read, - self.total, - ) - - # __str__ provided for backwards compatibility - __str__ = __repr__ - - @classmethod - def resolve_default_timeout(cls, timeout): - return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout - - @classmethod - def _validate_timeout(cls, value, name): - """Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError( - "Timeout cannot be a boolean value. It must " - "be an int, float or None." - ) - try: - float(value) - except (TypeError, ValueError): - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) - - try: - if value <= 0: - raise ValueError( - "Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value) - ) - except TypeError: - # Python 3 - raise ValueError( - "Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value) - ) - - return value - - @classmethod - def from_float(cls, timeout): - """Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, total=self.total) - - def start_connect(self): - """Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time in seconds. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError( - "Can't get connect duration for timer that has not started." - ) - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if ( - self.total is not None - and self.total is not self.DEFAULT_TIMEOUT - and self._read is not None - and self._read is not self.DEFAULT_TIMEOUT - ): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/url.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/url.py deleted file mode 100644 index a960b2f3c..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/url.py +++ /dev/null @@ -1,435 +0,0 @@ -from __future__ import absolute_import - -import re -from collections import namedtuple - -from ..exceptions import LocationParseError -from ..packages import six - -url_attrs = ["scheme", "auth", "host", "port", "path", "query", "fragment"] - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -NORMALIZABLE_SCHEMES = ("http", "https", None) - -# Almost all of these patterns were derived from the -# 'rfc3986' module: https://github.com/python-hyper/rfc3986 -PERCENT_RE = re.compile(r"%[a-fA-F0-9]{2}") -SCHEME_RE = re.compile(r"^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)") -URI_RE = re.compile( - r"^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?" - r"(?://([^\\/?#]*))?" - r"([^?#]*)" - r"(?:\?([^#]*))?" - r"(?:#(.*))?$", - re.UNICODE | re.DOTALL, -) - -IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}" -HEX_PAT = "[0-9A-Fa-f]{1,4}" -LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=HEX_PAT, ipv4=IPV4_PAT) -_subs = {"hex": HEX_PAT, "ls32": LS32_PAT} -_variations = [ - # 6( h16 ":" ) ls32 - "(?:%(hex)s:){6}%(ls32)s", - # "::" 5( h16 ":" ) ls32 - "::(?:%(hex)s:){5}%(ls32)s", - # [ h16 ] "::" 4( h16 ":" ) ls32 - "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s", - # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s", - # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s", - # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s", - # [ *4( h16 ":" ) h16 ] "::" ls32 - "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s", - # [ *5( h16 ":" ) h16 ] "::" h16 - "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s", - # [ *6( h16 ":" ) h16 ] "::" - "(?:(?:%(hex)s:){0,6}%(hex)s)?::", -] - -UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~" -IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" -ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" -IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]" -REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*" -TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$") - -IPV4_RE = re.compile("^" + IPV4_PAT + "$") -IPV6_RE = re.compile("^" + IPV6_PAT + "$") -IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT + "$") -BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$") -ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$") - -_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % ( - REG_NAME_PAT, - IPV4_PAT, - IPV6_ADDRZ_PAT, -) -_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL) - -UNRESERVED_CHARS = set( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~" -) -SUB_DELIM_CHARS = set("!$&'()*+,;=") -USERINFO_CHARS = UNRESERVED_CHARS | SUB_DELIM_CHARS | {":"} -PATH_CHARS = USERINFO_CHARS | {"@", "/"} -QUERY_CHARS = FRAGMENT_CHARS = PATH_CHARS | {"?"} - - -class Url(namedtuple("Url", url_attrs)): - """ - Data structure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - - __slots__ = () - - def __new__( - cls, - scheme=None, - auth=None, - host=None, - port=None, - path=None, - query=None, - fragment=None, - ): - if path and not path.startswith("/"): - path = "/" + path - if scheme is not None: - scheme = scheme.lower() - return super(Url, cls).__new__( - cls, scheme, auth, host, port, path, query, fragment - ) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or "/" - - if self.query is not None: - uri += "?" + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return "%s:%d" % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = u"" - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + u"://" - if auth is not None: - url += auth + u"@" - if host is not None: - url += host - if port is not None: - url += u":" + str(port) - if path is not None: - url += path - if query is not None: - url += u"?" + query - if fragment is not None: - url += u"#" + fragment - - return url - - def __str__(self): - return self.url - - -def split_first(s, delims): - """ - .. deprecated:: 1.25 - - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, "", None - - return s[:min_idx], s[min_idx + 1 :], min_delim - - -def _encode_invalid_chars(component, allowed_chars, encoding="utf-8"): - """Percent-encodes a URI component without reapplying - onto an already percent-encoded component. - """ - if component is None: - return component - - component = six.ensure_text(component) - - # Normalize existing percent-encoded bytes. - # Try to see if the component we're encoding is already percent-encoded - # so we can skip all '%' characters but still encode all others. - component, percent_encodings = PERCENT_RE.subn( - lambda match: match.group(0).upper(), component - ) - - uri_bytes = component.encode("utf-8", "surrogatepass") - is_percent_encoded = percent_encodings == uri_bytes.count(b"%") - encoded_component = bytearray() - - for i in range(0, len(uri_bytes)): - # Will return a single character bytestring on both Python 2 & 3 - byte = uri_bytes[i : i + 1] - byte_ord = ord(byte) - if (is_percent_encoded and byte == b"%") or ( - byte_ord < 128 and byte.decode() in allowed_chars - ): - encoded_component += byte - continue - encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper())) - - return encoded_component.decode(encoding) - - -def _remove_path_dot_segments(path): - # See http://tools.ietf.org/html/rfc3986#section-5.2.4 for pseudo-code - segments = path.split("/") # Turn the path into a list of segments - output = [] # Initialize the variable to use to store output - - for segment in segments: - # '.' is the current directory, so ignore it, it is superfluous - if segment == ".": - continue - # Anything other than '..', should be appended to the output - elif segment != "..": - output.append(segment) - # In this case segment == '..', if we can, we should pop the last - # element - elif output: - output.pop() - - # If the path starts with '/' and the output is empty or the first string - # is non-empty - if path.startswith("/") and (not output or output[0]): - output.insert(0, "") - - # If the path starts with '/.' or '/..' ensure we add one more empty - # string to add a trailing '/' - if path.endswith(("/.", "/..")): - output.append("") - - return "/".join(output) - - -def _normalize_host(host, scheme): - if host: - if isinstance(host, six.binary_type): - host = six.ensure_str(host) - - if scheme in NORMALIZABLE_SCHEMES: - is_ipv6 = IPV6_ADDRZ_RE.match(host) - if is_ipv6: - # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as - # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID - # separator as necessary to return a valid RFC 4007 scoped IP. - match = ZONE_ID_RE.search(host) - if match: - start, end = match.span(1) - zone_id = host[start:end] - - if zone_id.startswith("%25") and zone_id != "%25": - zone_id = zone_id[3:] - else: - zone_id = zone_id[1:] - zone_id = "%" + _encode_invalid_chars(zone_id, UNRESERVED_CHARS) - return host[:start].lower() + zone_id + host[end:] - else: - return host.lower() - elif not IPV4_RE.match(host): - return six.ensure_str( - b".".join([_idna_encode(label) for label in host.split(".")]) - ) - return host - - -def _idna_encode(name): - if name and any(ord(x) >= 128 for x in name): - try: - from pip._vendor import idna - except ImportError: - six.raise_from( - LocationParseError("Unable to parse URL without the 'idna' module"), - None, - ) - try: - return idna.encode(name.lower(), strict=True, std3_rules=True) - except idna.IDNAError: - six.raise_from( - LocationParseError(u"Name '%s' is not a valid IDNA label" % name), None - ) - return name.lower().encode("ascii") - - -def _encode_target(target): - """Percent-encodes a request target so that there are no invalid characters""" - path, query = TARGET_RE.match(target).groups() - target = _encode_invalid_chars(path, PATH_CHARS) - query = _encode_invalid_chars(query, QUERY_CHARS) - if query is not None: - target += "?" + query - return target - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - This parser is RFC 3986 and RFC 6874 compliant. - - The parser logic and helper functions are based heavily on - work done in the ``rfc3986`` module. - - :param str url: URL to parse into a :class:`.Url` namedtuple. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - if not url: - # Empty - return Url() - - source_url = url - if not SCHEME_RE.search(url): - url = "//" + url - - try: - scheme, authority, path, query, fragment = URI_RE.match(url).groups() - normalize_uri = scheme is None or scheme.lower() in NORMALIZABLE_SCHEMES - - if scheme: - scheme = scheme.lower() - - if authority: - auth, _, host_port = authority.rpartition("@") - auth = auth or None - host, port = _HOST_PORT_RE.match(host_port).groups() - if auth and normalize_uri: - auth = _encode_invalid_chars(auth, USERINFO_CHARS) - if port == "": - port = None - else: - auth, host, port = None, None, None - - if port is not None: - port = int(port) - if not (0 <= port <= 65535): - raise LocationParseError(url) - - host = _normalize_host(host, scheme) - - if normalize_uri and path: - path = _remove_path_dot_segments(path) - path = _encode_invalid_chars(path, PATH_CHARS) - if normalize_uri and query: - query = _encode_invalid_chars(query, QUERY_CHARS) - if normalize_uri and fragment: - fragment = _encode_invalid_chars(fragment, FRAGMENT_CHARS) - - except (ValueError, AttributeError): - return six.raise_from(LocationParseError(source_url), None) - - # For the sake of backwards compatibility we put empty - # string values for path if there are any defined values - # beyond the path in the URL. - # TODO: Remove this when we break backwards compatibility. - if not path: - if query is not None or fragment is not None: - path = "" - else: - path = None - - # Ensure that each part of the URL is a `str` for - # backwards compatibility. - if isinstance(url, six.text_type): - ensure_func = six.ensure_text - else: - ensure_func = six.ensure_str - - def ensure_type(x): - return x if x is None else ensure_func(x) - - return Url( - scheme=ensure_type(scheme), - auth=ensure_type(auth), - host=ensure_type(host), - port=port, - path=ensure_type(path), - query=ensure_type(query), - fragment=ensure_type(fragment), - ) - - -def get_host(url): - """ - Deprecated. Use :func:`parse_url` instead. - """ - p = parse_url(url) - return p.scheme or "http", p.hostname, p.port diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/wait.py b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/wait.py deleted file mode 100644 index 21b4590b3..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +++ /dev/null @@ -1,152 +0,0 @@ -import errno -import select -import sys -from functools import partial - -try: - from time import monotonic -except ImportError: - from time import time as monotonic - -__all__ = ["NoWayToWaitForSocketError", "wait_for_read", "wait_for_write"] - - -class NoWayToWaitForSocketError(Exception): - pass - - -# How should we wait on sockets? -# -# There are two types of APIs you can use for waiting on sockets: the fancy -# modern stateful APIs like epoll/kqueue, and the older stateless APIs like -# select/poll. The stateful APIs are more efficient when you have a lots of -# sockets to keep track of, because you can set them up once and then use them -# lots of times. But we only ever want to wait on a single socket at a time -# and don't want to keep track of state, so the stateless APIs are actually -# more efficient. So we want to use select() or poll(). -# -# Now, how do we choose between select() and poll()? On traditional Unixes, -# select() has a strange calling convention that makes it slow, or fail -# altogether, for high-numbered file descriptors. The point of poll() is to fix -# that, so on Unixes, we prefer poll(). -# -# On Windows, there is no poll() (or at least Python doesn't provide a wrapper -# for it), but that's OK, because on Windows, select() doesn't have this -# strange calling convention; plain select() works fine. -# -# So: on Windows we use select(), and everywhere else we use poll(). We also -# fall back to select() in case poll() is somehow broken or missing. - -if sys.version_info >= (3, 5): - # Modern Python, that retries syscalls by default - def _retry_on_intr(fn, timeout): - return fn(timeout) - -else: - # Old and broken Pythons. - def _retry_on_intr(fn, timeout): - if timeout is None: - deadline = float("inf") - else: - deadline = monotonic() + timeout - - while True: - try: - return fn(timeout) - # OSError for 3 <= pyver < 3.5, select.error for pyver <= 2.7 - except (OSError, select.error) as e: - # 'e.args[0]' incantation works for both OSError and select.error - if e.args[0] != errno.EINTR: - raise - else: - timeout = deadline - monotonic() - if timeout < 0: - timeout = 0 - if timeout == float("inf"): - timeout = None - continue - - -def select_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - rcheck = [] - wcheck = [] - if read: - rcheck.append(sock) - if write: - wcheck.append(sock) - # When doing a non-blocking connect, most systems signal success by - # marking the socket writable. Windows, though, signals success by marked - # it as "exceptional". We paper over the difference by checking the write - # sockets for both conditions. (The stdlib selectors module does the same - # thing.) - fn = partial(select.select, rcheck, wcheck, wcheck) - rready, wready, xready = _retry_on_intr(fn, timeout) - return bool(rready or wready or xready) - - -def poll_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - mask = 0 - if read: - mask |= select.POLLIN - if write: - mask |= select.POLLOUT - poll_obj = select.poll() - poll_obj.register(sock, mask) - - # For some reason, poll() takes timeout in milliseconds - def do_poll(t): - if t is not None: - t *= 1000 - return poll_obj.poll(t) - - return bool(_retry_on_intr(do_poll, timeout)) - - -def null_wait_for_socket(*args, **kwargs): - raise NoWayToWaitForSocketError("no select-equivalent available") - - -def _have_working_poll(): - # Apparently some systems have a select.poll that fails as soon as you try - # to use it, either due to strange configuration or broken monkeypatching - # from libraries like eventlet/greenlet. - try: - poll_obj = select.poll() - _retry_on_intr(poll_obj.poll, 0) - except (AttributeError, OSError): - return False - else: - return True - - -def wait_for_socket(*args, **kwargs): - # We delay choosing which implementation to use until the first time we're - # called. We could do it at import time, but then we might make the wrong - # decision if someone goes wild with monkeypatching select.poll after - # we're imported. - global wait_for_socket - if _have_working_poll(): - wait_for_socket = poll_wait_for_socket - elif hasattr(select, "select"): - wait_for_socket = select_wait_for_socket - else: # Platform-specific: Appengine. - wait_for_socket = null_wait_for_socket - return wait_for_socket(*args, **kwargs) - - -def wait_for_read(sock, timeout=None): - """Waits for reading to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, read=True, timeout=timeout) - - -def wait_for_write(sock, timeout=None): - """Waits for writing to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, write=True, timeout=timeout) diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/vendor.txt b/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/vendor.txt deleted file mode 100644 index dd2f5f348..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/_vendor/vendor.txt +++ /dev/null @@ -1,19 +0,0 @@ -CacheControl==0.14.4 -distlib==0.4.0 -distro==1.9.0 -msgpack==1.1.2 -packaging==26.0 -platformdirs==4.5.1 -pyproject-hooks==1.2.0 -requests==2.32.5 - certifi==2026.1.4 - idna==3.11 - urllib3==1.26.20 -rich==14.2.0 - pygments==2.19.2 -resolvelib==1.2.1 -setuptools==70.3.0 -tomli==2.3.0 -tomli-w==1.2.0 -truststore==0.10.4 -dependency-groups==1.3.1 diff --git a/Python314_4_x86_Template/Lib/site-packages/pip/py.typed b/Python314_4_x86_Template/Lib/site-packages/pip/py.typed deleted file mode 100644 index 493b53e4e..000000000 --- a/Python314_4_x86_Template/Lib/site-packages/pip/py.typed +++ /dev/null @@ -1,4 +0,0 @@ -pip is a command line program. While it is implemented in Python, and so is -available for import, you must not use pip's internal APIs in this way. Typing -information is provided as a convenience only and is not a guarantee. Expect -unannounced changes to the API and types in releases. diff --git a/Python314_4_x86_Template/Lib/site.py b/Python314_4_x86_Template/Lib/site.py deleted file mode 100644 index aeb7c6cfc..000000000 --- a/Python314_4_x86_Template/Lib/site.py +++ /dev/null @@ -1,779 +0,0 @@ -"""Append module search paths for third-party packages to sys.path. - -**************************************************************** -* This module is automatically imported during initialization. * -**************************************************************** - -This will append site-specific paths to the module search path. On -Unix (including Mac OSX), it starts with sys.prefix and -sys.exec_prefix (if different) and appends -lib/python<version>/site-packages. -On other platforms (such as Windows), it tries each of the -prefixes directly, as well as with lib/site-packages appended. The -resulting directories, if they exist, are appended to sys.path, and -also inspected for path configuration files. - -If a file named "pyvenv.cfg" exists one directory above sys.executable, -sys.prefix and sys.exec_prefix are set to that directory and -it is also checked for site-packages (sys.base_prefix and -sys.base_exec_prefix will always be the "real" prefixes of the Python -installation). If "pyvenv.cfg" (a bootstrap configuration file) contains -the key "include-system-site-packages" set to anything other than "false" -(case-insensitive), the system-level prefixes will still also be -searched for site-packages; otherwise they won't. - -All of the resulting site-specific directories, if they exist, are -appended to sys.path, and also inspected for path configuration -files. - -A path configuration file is a file whose name has the form -<package>.pth; its contents are additional directories (one per line) -to be added to sys.path. Non-existing directories (or -non-directories) are never added to sys.path; no directory is added to -sys.path more than once. Blank lines and lines beginning with -'#' are skipped. Lines starting with 'import' are executed. - -For example, suppose sys.prefix and sys.exec_prefix are set to -/usr/local and there is a directory /usr/local/lib/python2.5/site-packages -with three subdirectories, foo, bar and spam, and two path -configuration files, foo.pth and bar.pth. Assume foo.pth contains the -following: - - # foo package configuration - foo - bar - bletch - -and bar.pth contains: - - # bar package configuration - bar - -Then the following directories are added to sys.path, in this order: - - /usr/local/lib/python2.5/site-packages/bar - /usr/local/lib/python2.5/site-packages/foo - -Note that bletch is omitted because it doesn't exist; bar precedes foo -because bar.pth comes alphabetically before foo.pth; and spam is -omitted because it is not mentioned in either path configuration file. - -The readline module is also automatically configured to enable -completion for systems that support it. This can be overridden in -sitecustomize, usercustomize or PYTHONSTARTUP. Starting Python in -isolated mode (-I) disables automatic readline configuration. - -After these operations, an attempt is made to import a module -named sitecustomize, which can perform arbitrary additional -site-specific customizations. If this import fails with an -ImportError exception, it is silently ignored. -""" - -import sys -import os -import builtins -import _sitebuiltins -import _io as io -import stat -import errno - -# Prefixes for site-packages; add additional prefixes like /usr/local here -PREFIXES = [sys.prefix, sys.exec_prefix] -# Enable per user site-packages directory -# set it to False to disable the feature or True to force the feature -ENABLE_USER_SITE = None - -# for distutils.commands.install -# These values are initialized by the getuserbase() and getusersitepackages() -# functions, through the main() function when Python starts. -USER_SITE = None -USER_BASE = None - - -def _trace(message): - if sys.flags.verbose: - print(message, file=sys.stderr) - - -def _warn(*args, **kwargs): - import warnings - - warnings.warn(*args, **kwargs) - - -def makepath(*paths): - dir = os.path.join(*paths) - try: - dir = os.path.abspath(dir) - except OSError: - pass - return dir, os.path.normcase(dir) - - -def abs_paths(): - """Set all module __file__ and __cached__ attributes to an absolute path""" - for m in set(sys.modules.values()): - loader_module = None - try: - loader_module = m.__loader__.__module__ - except AttributeError: - try: - loader_module = m.__spec__.loader.__module__ - except AttributeError: - pass - if loader_module not in {'_frozen_importlib', '_frozen_importlib_external'}: - continue # don't mess with a PEP 302-supplied __file__ - try: - m.__file__ = os.path.abspath(m.__file__) - except (AttributeError, OSError, TypeError): - pass - try: - m.__cached__ = os.path.abspath(m.__cached__) - except (AttributeError, OSError, TypeError): - pass - - -def removeduppaths(): - """ Remove duplicate entries from sys.path along with making them - absolute""" - # This ensures that the initial path provided by the interpreter contains - # only absolute pathnames, even if we're running from the build directory. - L = [] - known_paths = set() - for dir in sys.path: - # Filter out duplicate paths (on case-insensitive file systems also - # if they only differ in case); turn relative paths into absolute - # paths. - dir, dircase = makepath(dir) - if dircase not in known_paths: - L.append(dir) - known_paths.add(dircase) - sys.path[:] = L - return known_paths - - -def _init_pathinfo(): - """Return a set containing all existing file system items from sys.path.""" - d = set() - for item in sys.path: - try: - if os.path.exists(item): - _, itemcase = makepath(item) - d.add(itemcase) - except TypeError: - continue - return d - - -def addpackage(sitedir, name, known_paths): - """Process a .pth file within the site-packages directory: - For each line in the file, either combine it with sitedir to a path - and add that to known_paths, or execute it if it starts with 'import '. - """ - if known_paths is None: - known_paths = _init_pathinfo() - reset = True - else: - reset = False - fullname = os.path.join(sitedir, name) - try: - st = os.lstat(fullname) - except OSError: - return - if ((getattr(st, 'st_flags', 0) & stat.UF_HIDDEN) or - (getattr(st, 'st_file_attributes', 0) & stat.FILE_ATTRIBUTE_HIDDEN)): - _trace(f"Skipping hidden .pth file: {fullname!r}") - return - _trace(f"Processing .pth file: {fullname!r}") - try: - with io.open_code(fullname) as f: - pth_content = f.read() - except OSError: - return - - try: - # Accept BOM markers in .pth files as we do in source files - # (Windows PowerShell 5.1 makes it hard to emit UTF-8 files without a BOM) - pth_content = pth_content.decode("utf-8-sig") - except UnicodeDecodeError: - # Fallback to locale encoding for backward compatibility. - # We will deprecate this fallback in the future. - import locale - pth_content = pth_content.decode(locale.getencoding()) - _trace(f"Cannot read {fullname!r} as UTF-8. " - f"Using fallback encoding {locale.getencoding()!r}") - - for n, line in enumerate(pth_content.splitlines(), 1): - if line.startswith("#"): - continue - if line.strip() == "": - continue - try: - if line.startswith(("import ", "import\t")): - exec(line) - continue - line = line.rstrip() - dir, dircase = makepath(sitedir, line) - if dircase not in known_paths and os.path.exists(dir): - sys.path.append(dir) - known_paths.add(dircase) - except Exception as exc: - print(f"Error processing line {n:d} of {fullname}:\n", - file=sys.stderr) - import traceback - for record in traceback.format_exception(exc): - for line in record.splitlines(): - print(' '+line, file=sys.stderr) - print("\nRemainder of file ignored", file=sys.stderr) - break - if reset: - known_paths = None - return known_paths - - -def addsitedir(sitedir, known_paths=None): - """Add 'sitedir' argument to sys.path if missing and handle .pth files in - 'sitedir'""" - _trace(f"Adding directory: {sitedir!r}") - if known_paths is None: - known_paths = _init_pathinfo() - reset = True - else: - reset = False - sitedir, sitedircase = makepath(sitedir) - if not sitedircase in known_paths: - sys.path.append(sitedir) # Add path component - known_paths.add(sitedircase) - try: - names = os.listdir(sitedir) - except OSError: - return - names = [name for name in names - if name.endswith(".pth") and not name.startswith(".")] - for name in sorted(names): - addpackage(sitedir, name, known_paths) - if reset: - known_paths = None - return known_paths - - -def check_enableusersite(): - """Check if user site directory is safe for inclusion - - The function tests for the command line flag (including environment var), - process uid/gid equal to effective uid/gid. - - None: Disabled for security reasons - False: Disabled by user (command line option) - True: Safe and enabled - """ - if sys.flags.no_user_site: - return False - - if hasattr(os, "getuid") and hasattr(os, "geteuid"): - # check process uid == effective uid - if os.geteuid() != os.getuid(): - return None - if hasattr(os, "getgid") and hasattr(os, "getegid"): - # check process gid == effective gid - if os.getegid() != os.getgid(): - return None - - return True - - -# NOTE: sysconfig and it's dependencies are relatively large but site module -# needs very limited part of them. -# To speedup startup time, we have copy of them. -# -# See https://bugs.python.org/issue29585 - -# Copy of sysconfig._get_implementation() -def _get_implementation(): - return 'Python' - -# Copy of sysconfig._getuserbase() -def _getuserbase(): - env_base = os.environ.get("PYTHONUSERBASE", None) - if env_base: - return env_base - - # Emscripten, iOS, tvOS, VxWorks, WASI, and watchOS have no home directories - if sys.platform in {"emscripten", "ios", "tvos", "vxworks", "wasi", "watchos"}: - return None - - def joinuser(*args): - return os.path.expanduser(os.path.join(*args)) - - if os.name == "nt": - base = os.environ.get("APPDATA") or "~" - return joinuser(base, _get_implementation()) - - if sys.platform == "darwin" and sys._framework: - return joinuser("~", "Library", sys._framework, - "%d.%d" % sys.version_info[:2]) - - return joinuser("~", ".local") - - -# Same to sysconfig.get_path('purelib', os.name+'_user') -def _get_path(userbase): - version = sys.version_info - if hasattr(sys, 'abiflags') and 't' in sys.abiflags: - abi_thread = 't' - else: - abi_thread = '' - - implementation = _get_implementation() - implementation_lower = implementation.lower() - if os.name == 'nt': - ver_nodot = sys.winver.replace('.', '') - return f'{userbase}\\{implementation}{ver_nodot}\\site-packages' - - if sys.platform == 'darwin' and sys._framework: - return f'{userbase}/lib/{implementation_lower}/site-packages' - - return f'{userbase}/lib/python{version[0]}.{version[1]}{abi_thread}/site-packages' - - -def getuserbase(): - """Returns the `user base` directory path. - - The `user base` directory can be used to store data. If the global - variable ``USER_BASE`` is not initialized yet, this function will also set - it. - """ - global USER_BASE - if USER_BASE is None: - USER_BASE = _getuserbase() - return USER_BASE - - -def getusersitepackages(): - """Returns the user-specific site-packages directory path. - - If the global variable ``USER_SITE`` is not initialized yet, this - function will also set it. - """ - global USER_SITE, ENABLE_USER_SITE - userbase = getuserbase() # this will also set USER_BASE - - if USER_SITE is None: - if userbase is None: - ENABLE_USER_SITE = False # disable user site and return None - else: - USER_SITE = _get_path(userbase) - - return USER_SITE - -def addusersitepackages(known_paths): - """Add a per user site-package to sys.path - - Each user has its own python directory with site-packages in the - home directory. - """ - # get the per user site-package path - # this call will also make sure USER_BASE and USER_SITE are set - _trace("Processing user site-packages") - user_site = getusersitepackages() - - if ENABLE_USER_SITE and os.path.isdir(user_site): - addsitedir(user_site, known_paths) - return known_paths - -def getsitepackages(prefixes=None): - """Returns a list containing all global site-packages directories. - - For each directory present in ``prefixes`` (or the global ``PREFIXES``), - this function will find its `site-packages` subdirectory depending on the - system environment, and will return a list of full paths. - """ - sitepackages = [] - seen = set() - - if prefixes is None: - prefixes = PREFIXES - - for prefix in prefixes: - if not prefix or prefix in seen: - continue - seen.add(prefix) - - implementation = _get_implementation().lower() - ver = sys.version_info - if hasattr(sys, 'abiflags') and 't' in sys.abiflags: - abi_thread = 't' - else: - abi_thread = '' - if os.sep == '/': - libdirs = [sys.platlibdir] - if sys.platlibdir != "lib": - libdirs.append("lib") - - for libdir in libdirs: - path = os.path.join(prefix, libdir, - f"{implementation}{ver[0]}.{ver[1]}{abi_thread}", - "site-packages") - sitepackages.append(path) - else: - sitepackages.append(prefix) - sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) - return sitepackages - -def addsitepackages(known_paths, prefixes=None): - """Add site-packages to sys.path""" - _trace("Processing global site-packages") - for sitedir in getsitepackages(prefixes): - if os.path.isdir(sitedir): - addsitedir(sitedir, known_paths) - - return known_paths - -def setquit(): - """Define new builtins 'quit' and 'exit'. - - These are objects which make the interpreter exit when called. - The repr of each object contains a hint at how it works. - - """ - if os.sep == '\\': - eof = 'Ctrl-Z plus Return' - else: - eof = 'Ctrl-D (i.e. EOF)' - - builtins.quit = _sitebuiltins.Quitter('quit', eof) - builtins.exit = _sitebuiltins.Quitter('exit', eof) - - -def setcopyright(): - """Set 'copyright' and 'credits' in builtins""" - builtins.copyright = _sitebuiltins._Printer("copyright", sys.copyright) - builtins.credits = _sitebuiltins._Printer("credits", """\ -Thanks to CWI, CNRI, BeOpen, Zope Corporation, the Python Software -Foundation, and a cast of thousands for supporting Python -development. See www.python.org for more information.""") - files, dirs = [], [] - # Not all modules are required to have a __file__ attribute. See - # PEP 420 for more details. - here = getattr(sys, '_stdlib_dir', None) - if not here and hasattr(os, '__file__'): - here = os.path.dirname(os.__file__) - if here: - files.extend(["LICENSE.txt", "LICENSE"]) - dirs.extend([os.path.join(here, os.pardir), here, os.curdir]) - builtins.license = _sitebuiltins._Printer( - "license", - "See https://www.python.org/psf/license/", - files, dirs) - - -def sethelper(): - builtins.help = _sitebuiltins._Helper() - - -def gethistoryfile(): - """Check if the PYTHON_HISTORY environment variable is set and define - it as the .python_history file. If PYTHON_HISTORY is not set, use the - default .python_history file. - """ - if not sys.flags.ignore_environment: - history = os.environ.get("PYTHON_HISTORY") - if history: - return history - return os.path.join(os.path.expanduser('~'), - '.python_history') - - -def enablerlcompleter(): - """Enable default readline configuration on interactive prompts, by - registering a sys.__interactivehook__. - """ - sys.__interactivehook__ = register_readline - - -def register_readline(): - """Configure readline completion on interactive prompts. - - If the readline module can be imported, the hook will set the Tab key - as completion key and register ~/.python_history as history file. - This can be overridden in the sitecustomize or usercustomize module, - or in a PYTHONSTARTUP file. - """ - if not sys.flags.ignore_environment: - PYTHON_BASIC_REPL = os.getenv("PYTHON_BASIC_REPL") - else: - PYTHON_BASIC_REPL = False - - import atexit - - try: - try: - import readline - except ImportError: - readline = None - else: - import rlcompleter # noqa: F401 - except ImportError: - return - - try: - if PYTHON_BASIC_REPL: - CAN_USE_PYREPL = False - else: - original_path = sys.path - sys.path = [p for p in original_path if p != ''] - try: - import _pyrepl.readline - if os.name == "nt": - import _pyrepl.windows_console - console_errors = (_pyrepl.windows_console._error,) - else: - import _pyrepl.unix_console - console_errors = _pyrepl.unix_console._error - from _pyrepl.main import CAN_USE_PYREPL - finally: - sys.path = original_path - except ImportError: - return - - if readline is not None: - # Reading the initialization (config) file may not be enough to set a - # completion key, so we set one first and then read the file. - if readline.backend == 'editline': - readline.parse_and_bind('bind ^I rl_complete') - else: - readline.parse_and_bind('tab: complete') - - try: - readline.read_init_file() - except OSError: - # An OSError here could have many causes, but the most likely one - # is that there's no .inputrc file (or .editrc file in the case of - # Mac OS X + libedit) in the expected location. In that case, we - # want to ignore the exception. - pass - - if readline is None or readline.get_current_history_length() == 0: - # If no history was loaded, default to .python_history, - # or PYTHON_HISTORY. - # The guard is necessary to avoid doubling history size at - # each interpreter exit when readline was already configured - # through a PYTHONSTARTUP hook, see: - # http://bugs.python.org/issue5845#msg198636 - history = gethistoryfile() - - if CAN_USE_PYREPL: - readline_module = _pyrepl.readline - exceptions = (OSError, *console_errors) - else: - if readline is None: - return - readline_module = readline - exceptions = OSError - - try: - readline_module.read_history_file(history) - except exceptions: - pass - - def write_history(): - try: - readline_module.write_history_file(history) - except FileNotFoundError, PermissionError: - # home directory does not exist or is not writable - # https://bugs.python.org/issue19891 - pass - except OSError: - if errno.EROFS: - pass # gh-128066: read-only file system - else: - raise - - atexit.register(write_history) - - -def venv(known_paths): - global PREFIXES, ENABLE_USER_SITE - - env = os.environ - if sys.platform == 'darwin' and '__PYVENV_LAUNCHER__' in env: - executable = sys._base_executable = os.environ['__PYVENV_LAUNCHER__'] - else: - executable = sys.executable - exe_dir = os.path.dirname(os.path.abspath(executable)) - site_prefix = os.path.dirname(exe_dir) - sys._home = None - conf_basename = 'pyvenv.cfg' - candidate_conf = next( - ( - conffile for conffile in ( - os.path.join(exe_dir, conf_basename), - os.path.join(site_prefix, conf_basename) - ) - if os.path.isfile(conffile) - ), - None - ) - - if candidate_conf: - virtual_conf = candidate_conf - system_site = "true" - # Issue 25185: Use UTF-8, as that's what the venv module uses when - # writing the file. - with open(virtual_conf, encoding='utf-8') as f: - for line in f: - if '=' in line: - key, _, value = line.partition('=') - key = key.strip().lower() - value = value.strip() - if key == 'include-system-site-packages': - system_site = value.lower() - elif key == 'home': - sys._home = value - - if sys.prefix != site_prefix: - _warn(f'Unexpected value in sys.prefix, expected {site_prefix}, got {sys.prefix}', RuntimeWarning) - if sys.exec_prefix != site_prefix: - _warn(f'Unexpected value in sys.exec_prefix, expected {site_prefix}, got {sys.exec_prefix}', RuntimeWarning) - - # Doing this here ensures venv takes precedence over user-site - addsitepackages(known_paths, [sys.prefix]) - - if system_site == "true": - PREFIXES += [sys.base_prefix, sys.base_exec_prefix] - else: - ENABLE_USER_SITE = False - - return known_paths - - -def execsitecustomize(): - """Run custom site specific code, if available.""" - try: - try: - import sitecustomize # noqa: F401 - except ImportError as exc: - if exc.name == 'sitecustomize': - pass - else: - raise - except Exception as err: - if sys.flags.verbose: - sys.excepthook(*sys.exc_info()) - else: - sys.stderr.write( - "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" - "%s: %s\n" % - (err.__class__.__name__, err)) - - -def execusercustomize(): - """Run custom user specific code, if available.""" - try: - try: - import usercustomize # noqa: F401 - except ImportError as exc: - if exc.name == 'usercustomize': - pass - else: - raise - except Exception as err: - if sys.flags.verbose: - sys.excepthook(*sys.exc_info()) - else: - sys.stderr.write( - "Error in usercustomize; set PYTHONVERBOSE for traceback:\n" - "%s: %s\n" % - (err.__class__.__name__, err)) - - -def main(): - """Add standard site-specific directories to the module search path. - - This function is called automatically when this module is imported, - unless the python interpreter was started with the -S flag. - """ - global ENABLE_USER_SITE - - orig_path = sys.path[:] - known_paths = removeduppaths() - if orig_path != sys.path: - # removeduppaths() might make sys.path absolute. - # fix __file__ and __cached__ of already imported modules too. - abs_paths() - - known_paths = venv(known_paths) - if ENABLE_USER_SITE is None: - ENABLE_USER_SITE = check_enableusersite() - known_paths = addusersitepackages(known_paths) - known_paths = addsitepackages(known_paths) - setquit() - setcopyright() - sethelper() - if not sys.flags.isolated: - enablerlcompleter() - execsitecustomize() - if ENABLE_USER_SITE: - execusercustomize() - -# Prevent extending of sys.path when python was started with -S and -# site is imported later. -if not sys.flags.no_site: - main() - -def _script(): - help = """\ - %s [--user-base] [--user-site] - - Without arguments print some useful information - With arguments print the value of USER_BASE and/or USER_SITE separated - by '%s'. - - Exit codes with --user-base or --user-site: - 0 - user site directory is enabled - 1 - user site directory is disabled by user - 2 - user site directory is disabled by super user - or for security reasons - >2 - unknown error - """ - args = sys.argv[1:] - if not args: - user_base = getuserbase() - user_site = getusersitepackages() - print("sys.path = [") - for dir in sys.path: - print(" %r," % (dir,)) - print("]") - def exists(path): - if path is not None and os.path.isdir(path): - return "exists" - else: - return "doesn't exist" - print(f"USER_BASE: {user_base!r} ({exists(user_base)})") - print(f"USER_SITE: {user_site!r} ({exists(user_site)})") - print(f"ENABLE_USER_SITE: {ENABLE_USER_SITE!r}") - sys.exit(0) - - buffer = [] - if '--user-base' in args: - buffer.append(USER_BASE) - if '--user-site' in args: - buffer.append(USER_SITE) - - if buffer: - print(os.pathsep.join(buffer)) - if ENABLE_USER_SITE: - sys.exit(0) - elif ENABLE_USER_SITE is False: - sys.exit(1) - elif ENABLE_USER_SITE is None: - sys.exit(2) - else: - sys.exit(3) - else: - import textwrap - print(textwrap.dedent(help % (sys.argv[0], os.pathsep))) - sys.exit(10) - -if __name__ == '__main__': - _script() diff --git a/Python314_4_x86_Template/Lib/smtplib.py b/Python314_4_x86_Template/Lib/smtplib.py deleted file mode 100644 index 72093f7f8..000000000 --- a/Python314_4_x86_Template/Lib/smtplib.py +++ /dev/null @@ -1,1121 +0,0 @@ -'''SMTP/ESMTP client class. - -This should follow RFC 821 (SMTP), RFC 1869 (ESMTP), RFC 2554 (SMTP -Authentication) and RFC 2487 (Secure SMTP over TLS). - -Notes: - -Please remember, when doing ESMTP, that the names of the SMTP service -extensions are NOT the same thing as the option keywords for the RCPT -and MAIL commands! - -Example: - - >>> import smtplib - >>> s=smtplib.SMTP("localhost") - >>> print(s.help()) - This is Sendmail version 8.8.4 - Topics: - HELO EHLO MAIL RCPT DATA - RSET NOOP QUIT HELP VRFY - EXPN VERB ETRN DSN - For more info use "HELP <topic>". - To report bugs in the implementation send email to - sendmail-bugs@sendmail.org. - For local information send email to Postmaster at your site. - End of HELP info - >>> s.putcmd("vrfy","someone@here") - >>> s.getreply() - (250, "Somebody OverHere <somebody@here.my.org>") - >>> s.quit() -''' - -# Author: The Dragon De Monsyne <dragondm@integral.org> -# ESMTP support, test code and doc fixes added by -# Eric S. Raymond <esr@thyrsus.com> -# Better RFC 821 compliance (MAIL and RCPT, and CRLF in data) -# by Carey Evans <c.evans@clear.net.nz>, for picky mail servers. -# RFC 2554 (authentication) support by Gerhard Haering <gerhard@bigfoot.de>. -# -# This was modified from the Python 1.5 library HTTP lib. - -import socket -import io -import re -import email.utils -import email.message -import email.generator -import base64 -import hmac -import copy -import datetime -import sys -from email.base64mime import body_encode as encode_base64 - -__all__ = ["SMTPException", "SMTPNotSupportedError", "SMTPServerDisconnected", "SMTPResponseException", - "SMTPSenderRefused", "SMTPRecipientsRefused", "SMTPDataError", - "SMTPConnectError", "SMTPHeloError", "SMTPAuthenticationError", - "quoteaddr", "quotedata", "SMTP"] - -SMTP_PORT = 25 -SMTP_SSL_PORT = 465 -CRLF = "\r\n" -bCRLF = b"\r\n" -_MAXLINE = 8192 # more than 8 times larger than RFC 821, 4.5.3 -_MAXCHALLENGE = 5 # Maximum number of AUTH challenges sent - -OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I) - -# Exception classes used by this module. -class SMTPException(OSError): - """Base class for all exceptions raised by this module.""" - -class SMTPNotSupportedError(SMTPException): - """The command or option is not supported by the SMTP server. - - This exception is raised when an attempt is made to run a command or a - command with an option which is not supported by the server. - """ - -class SMTPServerDisconnected(SMTPException): - """Not connected to any SMTP server. - - This exception is raised when the server unexpectedly disconnects, - or when an attempt is made to use the SMTP instance before - connecting it to a server. - """ - -class SMTPResponseException(SMTPException): - """Base class for all exceptions that include an SMTP error code. - - These exceptions are generated in some instances when the SMTP - server returns an error code. The error code is stored in the - `smtp_code' attribute of the error, and the `smtp_error' attribute - is set to the error message. - """ - - def __init__(self, code, msg): - self.smtp_code = code - self.smtp_error = msg - self.args = (code, msg) - -class SMTPSenderRefused(SMTPResponseException): - """Sender address refused. - - In addition to the attributes set by on all SMTPResponseException - exceptions, this sets 'sender' to the string that the SMTP refused. - """ - - def __init__(self, code, msg, sender): - self.smtp_code = code - self.smtp_error = msg - self.sender = sender - self.args = (code, msg, sender) - -class SMTPRecipientsRefused(SMTPException): - """All recipient addresses refused. - - The errors for each recipient are accessible through the attribute - 'recipients', which is a dictionary of exactly the same sort as - SMTP.sendmail() returns. - """ - - def __init__(self, recipients): - self.recipients = recipients - self.args = (recipients,) - - -class SMTPDataError(SMTPResponseException): - """The SMTP server didn't accept the data.""" - -class SMTPConnectError(SMTPResponseException): - """Error during connection establishment.""" - -class SMTPHeloError(SMTPResponseException): - """The server refused our HELO reply.""" - -class SMTPAuthenticationError(SMTPResponseException): - """Authentication error. - - Most probably the server didn't accept the username/password - combination provided. - """ - -def quoteaddr(addrstring): - """Quote a subset of the email addresses defined by RFC 821. - - Should be able to handle anything email.utils.parseaddr can handle. - """ - displayname, addr = email.utils.parseaddr(addrstring) - if (displayname, addr) == ('', ''): - # parseaddr couldn't parse it, use it as is and hope for the best. - if addrstring.strip().startswith('<'): - return addrstring - return "<%s>" % addrstring - return "<%s>" % addr - -def _addr_only(addrstring): - displayname, addr = email.utils.parseaddr(addrstring) - if (displayname, addr) == ('', ''): - # parseaddr couldn't parse it, so use it as is. - return addrstring - return addr - -# Legacy method kept for backward compatibility. -def quotedata(data): - """Quote data for email. - - Double leading '.', and change Unix newline '\\n', or Mac '\\r' into - internet CRLF end-of-line. - """ - return re.sub(r'(?m)^\.', '..', - re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data)) - -def _quote_periods(bindata): - return re.sub(br'(?m)^\.', b'..', bindata) - -def _fix_eols(data): - return re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data) - - -try: - hmac.digest(b'', b'', 'md5') -except ValueError: - _have_cram_md5_support = False -else: - _have_cram_md5_support = True - - -try: - import ssl -except ImportError: - _have_ssl = False -else: - _have_ssl = True - - -class SMTP: - """This class manages a connection to an SMTP or ESMTP server. - SMTP Objects: - SMTP objects have the following attributes: - helo_resp - This is the message given by the server in response to the - most recent HELO command. - - ehlo_resp - This is the message given by the server in response to the - most recent EHLO command. This is usually multiline. - - does_esmtp - This is a True value _after you do an EHLO command_, if the - server supports ESMTP. - - esmtp_features - This is a dictionary, which, if the server supports ESMTP, - will _after you do an EHLO command_, contain the names of the - SMTP service extensions this server supports, and their - parameters (if any). - - Note, all extension names are mapped to lower case in the - dictionary. - - See each method's docstrings for details. In general, there is a - method of the same name to perform each SMTP command. There is also a - method called 'sendmail' that will do an entire mail transaction. - """ - debuglevel = 0 - - sock = None - file = None - helo_resp = None - ehlo_msg = "ehlo" - ehlo_resp = None - does_esmtp = False - default_port = SMTP_PORT - - def __init__(self, host='', port=0, local_hostname=None, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None): - """Initialize a new instance. - - If specified, `host` is the name of the remote host to which to - connect. If specified, `port` specifies the port to which to connect. - By default, smtplib.SMTP_PORT is used. If a host is specified the - connect method is called, and if it returns anything other than a - success code an SMTPConnectError is raised. If specified, - `local_hostname` is used as the FQDN of the local host in the HELO/EHLO - command. Otherwise, the local hostname is found using - socket.getfqdn(). The `source_address` parameter takes a 2-tuple (host, - port) for the socket to bind to as its source address before - connecting. If the host is '' and port is 0, the OS default behavior - will be used. - - """ - self._host = host - self.timeout = timeout - self.esmtp_features = {} - self.command_encoding = 'ascii' - self.source_address = source_address - self._auth_challenge_count = 0 - - if host: - (code, msg) = self.connect(host, port) - if code != 220: - self.close() - raise SMTPConnectError(code, msg) - if local_hostname is not None: - self.local_hostname = local_hostname - else: - # RFC 2821 says we should use the fqdn in the EHLO/HELO verb, and - # if that can't be calculated, that we should use a domain literal - # instead (essentially an encoded IP address like [A.B.C.D]). - fqdn = socket.getfqdn() - if '.' in fqdn: - self.local_hostname = fqdn - else: - # We can't find an fqdn hostname, so use a domain literal - addr = '127.0.0.1' - try: - addr = socket.gethostbyname(socket.gethostname()) - except socket.gaierror: - pass - self.local_hostname = '[%s]' % addr - - def __enter__(self): - return self - - def __exit__(self, *args): - try: - code, message = self.docmd("QUIT") - if code != 221: - raise SMTPResponseException(code, message) - except SMTPServerDisconnected: - pass - finally: - self.close() - - def set_debuglevel(self, debuglevel): - """Set the debug output level. - - A non-false value results in debug messages for connection and for all - messages sent to and received from the server. - - """ - self.debuglevel = debuglevel - - def _print_debug(self, *args): - if self.debuglevel > 1: - print(datetime.datetime.now().time(), *args, file=sys.stderr) - else: - print(*args, file=sys.stderr) - - def _get_socket(self, host, port, timeout): - # This makes it simpler for SMTP_SSL to use the SMTP connect code - # and just alter the socket connection bit. - if timeout is not None and not timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') - if self.debuglevel > 0: - self._print_debug('connect: to', (host, port), self.source_address) - return socket.create_connection((host, port), timeout, - self.source_address) - - def connect(self, host='localhost', port=0, source_address=None): - """Connect to a host on a given port. - - If the hostname ends with a colon (':') followed by a number, and - there is no port specified, that suffix will be stripped off and the - number interpreted as the port number to use. - - Note: This method is automatically invoked by __init__, if a host is - specified during instantiation. - - """ - - if source_address: - self.source_address = source_address - - if not port and (host.find(':') == host.rfind(':')): - i = host.rfind(':') - if i >= 0: - host, port = host[:i], host[i + 1:] - try: - port = int(port) - except ValueError: - raise OSError("nonnumeric port") - if not port: - port = self.default_port - sys.audit("smtplib.connect", self, host, port) - self.sock = self._get_socket(host, port, self.timeout) - self.file = None - (code, msg) = self.getreply() - if self.debuglevel > 0: - self._print_debug('connect:', repr(msg)) - return (code, msg) - - def send(self, s): - """Send 's' to the server.""" - if self.debuglevel > 0: - self._print_debug('send:', repr(s)) - if self.sock: - if isinstance(s, str): - # send is used by the 'data' command, where command_encoding - # should not be used, but 'data' needs to convert the string to - # binary itself anyway, so that's not a problem. - s = s.encode(self.command_encoding) - sys.audit("smtplib.send", self, s) - try: - self.sock.sendall(s) - except OSError: - self.close() - raise SMTPServerDisconnected('Server not connected') - else: - raise SMTPServerDisconnected('please run connect() first') - - def putcmd(self, cmd, args=""): - """Send a command to the server.""" - if args == "": - s = cmd - else: - s = f'{cmd} {args}' - if '\r' in s or '\n' in s: - s = s.replace('\n', '\\n').replace('\r', '\\r') - raise ValueError( - f'command and arguments contain prohibited newline characters: {s}' - ) - self.send(f'{s}{CRLF}') - - def getreply(self): - """Get a reply from the server. - - Returns a tuple consisting of: - - - server response code (e.g. '250', or such, if all goes well) - Note: returns -1 if it can't read response code. - - - server response string corresponding to response code (multiline - responses are converted to a single, multiline string). - - Raises SMTPServerDisconnected if end-of-file is reached. - """ - resp = [] - if self.file is None: - self.file = self.sock.makefile('rb') - while 1: - try: - line = self.file.readline(_MAXLINE + 1) - except OSError as e: - self.close() - raise SMTPServerDisconnected("Connection unexpectedly closed: " - + str(e)) - if not line: - self.close() - raise SMTPServerDisconnected("Connection unexpectedly closed") - if self.debuglevel > 0: - self._print_debug('reply:', repr(line)) - if len(line) > _MAXLINE: - self.close() - raise SMTPResponseException(500, "Line too long.") - resp.append(line[4:].strip(b' \t\r\n')) - code = line[:3] - # Check that the error code is syntactically correct. - # Don't attempt to read a continuation line if it is broken. - try: - errcode = int(code) - except ValueError: - errcode = -1 - break - # Check if multiline response. - if line[3:4] != b"-": - break - - errmsg = b"\n".join(resp) - if self.debuglevel > 0: - self._print_debug('reply: retcode (%s); Msg: %a' % (errcode, errmsg)) - return errcode, errmsg - - def docmd(self, cmd, args=""): - """Send a command, and return its response code.""" - self.putcmd(cmd, args) - return self.getreply() - - # std smtp commands - def helo(self, name=''): - """SMTP 'helo' command. - Hostname to send for this command defaults to the FQDN of the local - host. - """ - self.putcmd("helo", name or self.local_hostname) - (code, msg) = self.getreply() - self.helo_resp = msg - return (code, msg) - - def ehlo(self, name=''): - """ SMTP 'ehlo' command. - Hostname to send for this command defaults to the FQDN of the local - host. - """ - self.esmtp_features = {} - self.putcmd(self.ehlo_msg, name or self.local_hostname) - (code, msg) = self.getreply() - # According to RFC1869 some (badly written) - # MTA's will disconnect on an ehlo. Toss an exception if - # that happens -ddm - if code == -1 and len(msg) == 0: - self.close() - raise SMTPServerDisconnected("Server not connected") - self.ehlo_resp = msg - if code != 250: - return (code, msg) - self.does_esmtp = True - #parse the ehlo response -ddm - assert isinstance(self.ehlo_resp, bytes), repr(self.ehlo_resp) - resp = self.ehlo_resp.decode("latin-1").split('\n') - del resp[0] - for each in resp: - # To be able to communicate with as many SMTP servers as possible, - # we have to take the old-style auth advertisement into account, - # because: - # 1) Else our SMTP feature parser gets confused. - # 2) There are some servers that only advertise the auth methods we - # support using the old style. - auth_match = OLDSTYLE_AUTH.match(each) - if auth_match: - # This doesn't remove duplicates, but that's no problem - self.esmtp_features["auth"] = self.esmtp_features.get("auth", "") \ - + " " + auth_match.groups(0)[0] - continue - - # RFC 1869 requires a space between ehlo keyword and parameters. - # It's actually stricter, in that only spaces are allowed between - # parameters, but were not going to check for that here. Note - # that the space isn't present if there are no parameters. - m = re.match(r'(?P<feature>[A-Za-z0-9][A-Za-z0-9\-]*) ?', each) - if m: - feature = m.group("feature").lower() - params = m.string[m.end("feature"):].strip() - if feature == "auth": - self.esmtp_features[feature] = self.esmtp_features.get(feature, "") \ - + " " + params - else: - self.esmtp_features[feature] = params - return (code, msg) - - def has_extn(self, opt): - """Does the server support a given SMTP service extension?""" - return opt.lower() in self.esmtp_features - - def help(self, args=''): - """SMTP 'help' command. - Returns help text from server.""" - self.putcmd("help", args) - return self.getreply()[1] - - def rset(self): - """SMTP 'rset' command -- resets session.""" - self.command_encoding = 'ascii' - return self.docmd("rset") - - def _rset(self): - """Internal 'rset' command which ignores any SMTPServerDisconnected error. - - Used internally in the library, since the server disconnected error - should appear to the application when the *next* command is issued, if - we are doing an internal "safety" reset. - """ - try: - self.rset() - except SMTPServerDisconnected: - pass - - def noop(self): - """SMTP 'noop' command -- doesn't do anything :>""" - return self.docmd("noop") - - def mail(self, sender, options=()): - """SMTP 'mail' command -- begins mail xfer session. - - This method may raise the following exceptions: - - SMTPNotSupportedError The options parameter includes 'SMTPUTF8' - but the SMTPUTF8 extension is not supported by - the server. - """ - optionlist = '' - if options and self.does_esmtp: - if any(x.lower()=='smtputf8' for x in options): - if self.has_extn('smtputf8'): - self.command_encoding = 'utf-8' - else: - raise SMTPNotSupportedError( - 'SMTPUTF8 not supported by server') - optionlist = ' ' + ' '.join(options) - self.putcmd("mail", "from:%s%s" % (quoteaddr(sender), optionlist)) - return self.getreply() - - def rcpt(self, recip, options=()): - """SMTP 'rcpt' command -- indicates 1 recipient for this mail.""" - optionlist = '' - if options and self.does_esmtp: - optionlist = ' ' + ' '.join(options) - self.putcmd("rcpt", "to:%s%s" % (quoteaddr(recip), optionlist)) - return self.getreply() - - def data(self, msg): - """SMTP 'DATA' command -- sends message data to server. - - Automatically quotes lines beginning with a period per rfc821. - Raises SMTPDataError if there is an unexpected reply to the - DATA command; the return value from this method is the final - response code received when the all data is sent. If msg - is a string, lone '\\r' and '\\n' characters are converted to - '\\r\\n' characters. If msg is bytes, it is transmitted as is. - """ - self.putcmd("data") - (code, repl) = self.getreply() - if self.debuglevel > 0: - self._print_debug('data:', (code, repl)) - if code != 354: - raise SMTPDataError(code, repl) - else: - if isinstance(msg, str): - msg = _fix_eols(msg).encode('ascii') - q = _quote_periods(msg) - if q[-2:] != bCRLF: - q = q + bCRLF - q = q + b"." + bCRLF - self.send(q) - (code, msg) = self.getreply() - if self.debuglevel > 0: - self._print_debug('data:', (code, msg)) - return (code, msg) - - def verify(self, address): - """SMTP 'verify' command -- checks for address validity.""" - self.putcmd("vrfy", _addr_only(address)) - return self.getreply() - # a.k.a. - vrfy = verify - - def expn(self, address): - """SMTP 'expn' command -- expands a mailing list.""" - self.putcmd("expn", _addr_only(address)) - return self.getreply() - - # some useful methods - - def ehlo_or_helo_if_needed(self): - """Call self.ehlo() and/or self.helo() if needed. - - If there has been no previous EHLO or HELO command this session, this - method tries ESMTP EHLO first. - - This method may raise the following exceptions: - - SMTPHeloError The server didn't reply properly to - the helo greeting. - """ - if self.helo_resp is None and self.ehlo_resp is None: - if not (200 <= self.ehlo()[0] <= 299): - (code, resp) = self.helo() - if not (200 <= code <= 299): - raise SMTPHeloError(code, resp) - - def auth(self, mechanism, authobject, *, initial_response_ok=True): - """Authentication command - requires response processing. - - 'mechanism' specifies which authentication mechanism is to - be used - the valid values are those listed in the 'auth' - element of 'esmtp_features'. - - 'authobject' must be a callable object taking a single argument: - - data = authobject(challenge) - - It will be called to process the server's challenge response; the - challenge argument it is passed will be a bytes. It should return - an ASCII string that will be base64 encoded and sent to the server. - - Keyword arguments: - - initial_response_ok: Allow sending the RFC 4954 initial-response - to the AUTH command, if the authentication methods supports it. - """ - # RFC 4954 allows auth methods to provide an initial response. Not all - # methods support it. By definition, if they return something other - # than None when challenge is None, then they do. See issue #15014. - mechanism = mechanism.upper() - initial_response = (authobject() if initial_response_ok else None) - if initial_response is not None: - response = encode_base64(initial_response.encode('ascii'), eol='') - (code, resp) = self.docmd("AUTH", mechanism + " " + response) - self._auth_challenge_count = 1 - else: - (code, resp) = self.docmd("AUTH", mechanism) - self._auth_challenge_count = 0 - # If server responds with a challenge, send the response. - while code == 334: - self._auth_challenge_count += 1 - challenge = base64.decodebytes(resp) - response = encode_base64( - authobject(challenge).encode('ascii'), eol='') - (code, resp) = self.docmd(response) - # If server keeps sending challenges, something is wrong. - if self._auth_challenge_count > _MAXCHALLENGE: - raise SMTPException( - "Server AUTH mechanism infinite loop. Last response: " - + repr((code, resp)) - ) - if code in (235, 503): - return (code, resp) - raise SMTPAuthenticationError(code, resp) - - def auth_cram_md5(self, challenge=None): - """ Authobject to use with CRAM-MD5 authentication. Requires self.user - and self.password to be set.""" - # CRAM-MD5 does not support initial-response. - if challenge is None: - return None - if not _have_cram_md5_support: - raise SMTPException("CRAM-MD5 is not supported") - password = self.password.encode('ascii') - authcode = hmac.HMAC(password, challenge, 'md5') - return f"{self.user} {authcode.hexdigest()}" - - def auth_plain(self, challenge=None): - """ Authobject to use with PLAIN authentication. Requires self.user and - self.password to be set.""" - return "\0%s\0%s" % (self.user, self.password) - - def auth_login(self, challenge=None): - """ Authobject to use with LOGIN authentication. Requires self.user and - self.password to be set.""" - if challenge is None or self._auth_challenge_count < 2: - return self.user - else: - return self.password - - def login(self, user, password, *, initial_response_ok=True): - """Log in on an SMTP server that requires authentication. - - The arguments are: - - user: The user name to authenticate with. - - password: The password for the authentication. - - Keyword arguments: - - initial_response_ok: Allow sending the RFC 4954 initial-response - to the AUTH command, if the authentication methods supports it. - - If there has been no previous EHLO or HELO command this session, this - method tries ESMTP EHLO first. - - This method will return normally if the authentication was successful. - - This method may raise the following exceptions: - - SMTPHeloError The server didn't reply properly to - the helo greeting. - SMTPAuthenticationError The server didn't accept the username/ - password combination. - SMTPNotSupportedError The AUTH command is not supported by the - server. - SMTPException No suitable authentication method was - found. - """ - - self.ehlo_or_helo_if_needed() - if not self.has_extn("auth"): - raise SMTPNotSupportedError( - "SMTP AUTH extension not supported by server.") - - # Authentication methods the server claims to support - advertised_authlist = self.esmtp_features["auth"].split() - - # Authentication methods we can handle in our preferred order: - if _have_cram_md5_support: - preferred_auths = ['CRAM-MD5', 'PLAIN', 'LOGIN'] - else: - preferred_auths = ['PLAIN', 'LOGIN'] - # We try the supported authentications in our preferred order, if - # the server supports them. - authlist = [auth for auth in preferred_auths - if auth in advertised_authlist] - if not authlist: - raise SMTPException("No suitable authentication method found.") - - # Some servers advertise authentication methods they don't really - # support, so if authentication fails, we continue until we've tried - # all methods. - self.user, self.password = user, password - for authmethod in authlist: - method_name = 'auth_' + authmethod.lower().replace('-', '_') - try: - (code, resp) = self.auth( - authmethod, getattr(self, method_name), - initial_response_ok=initial_response_ok) - # 235 == 'Authentication successful' - # 503 == 'Error: already authenticated' - if code in (235, 503): - return (code, resp) - except SMTPAuthenticationError as e: - last_exception = e - - # We could not login successfully. Return result of last attempt. - raise last_exception - - def starttls(self, *, context=None): - """Puts the connection to the SMTP server into TLS mode. - - If there has been no previous EHLO or HELO command this session, this - method tries ESMTP EHLO first. - - If the server supports TLS, this will encrypt the rest of the SMTP - session. If you provide the context parameter, - the identity of the SMTP server and client can be checked. This, - however, depends on whether the socket module really checks the - certificates. - - This method may raise the following exceptions: - - SMTPHeloError The server didn't reply properly to - the helo greeting. - """ - self.ehlo_or_helo_if_needed() - if not self.has_extn("starttls"): - raise SMTPNotSupportedError( - "STARTTLS extension not supported by server.") - (resp, reply) = self.docmd("STARTTLS") - if resp == 220: - if not _have_ssl: - raise RuntimeError("No SSL support included in this Python") - if context is None: - context = ssl._create_stdlib_context() - self.sock = context.wrap_socket(self.sock, - server_hostname=self._host) - self.file = None - # RFC 3207: - # The client MUST discard any knowledge obtained from - # the server, such as the list of SMTP service extensions, - # which was not obtained from the TLS negotiation itself. - self.helo_resp = None - self.ehlo_resp = None - self.esmtp_features = {} - self.does_esmtp = False - else: - # RFC 3207: - # 501 Syntax error (no parameters allowed) - # 454 TLS not available due to temporary reason - raise SMTPResponseException(resp, reply) - return (resp, reply) - - def sendmail(self, from_addr, to_addrs, msg, mail_options=(), - rcpt_options=()): - """This command performs an entire mail transaction. - - The arguments are: - - from_addr : The address sending this mail. - - to_addrs : A list of addresses to send this mail to. A bare - string will be treated as a list with 1 address. - - msg : The message to send. - - mail_options : List of ESMTP options (such as 8bitmime) for the - mail command. - - rcpt_options : List of ESMTP options (such as DSN commands) for - all the rcpt commands. - - msg may be a string containing characters in the ASCII range, or a byte - string. A string is encoded to bytes using the ascii codec, and lone - \\r and \\n characters are converted to \\r\\n characters. - - If there has been no previous EHLO or HELO command this session, this - method tries ESMTP EHLO first. If the server does ESMTP, message size - and each of the specified options will be passed to it. If EHLO - fails, HELO will be tried and ESMTP options suppressed. - - This method will return normally if the mail is accepted for at least - one recipient. It returns a dictionary, with one entry for each - recipient that was refused. Each entry contains a tuple of the SMTP - error code and the accompanying error message sent by the server. - - This method may raise the following exceptions: - - SMTPHeloError The server didn't reply properly to - the helo greeting. - SMTPRecipientsRefused The server rejected ALL recipients - (no mail was sent). - SMTPSenderRefused The server didn't accept the from_addr. - SMTPDataError The server replied with an unexpected - error code (other than a refusal of - a recipient). - SMTPNotSupportedError The mail_options parameter includes 'SMTPUTF8' - but the SMTPUTF8 extension is not supported by - the server. - - Note: the connection will be open even after an exception is raised. - - Example: - - >>> import smtplib - >>> s=smtplib.SMTP("localhost") - >>> tolist=["one@one.org","two@two.org","three@three.org","four@four.org"] - >>> msg = '''\\ - ... From: Me@my.org - ... Subject: testin'... - ... - ... This is a test ''' - >>> s.sendmail("me@my.org",tolist,msg) - { "three@three.org" : ( 550 ,"User unknown" ) } - >>> s.quit() - - In the above example, the message was accepted for delivery to three - of the four addresses, and one was rejected, with the error code - 550. If all addresses are accepted, then the method will return an - empty dictionary. - - """ - self.ehlo_or_helo_if_needed() - esmtp_opts = [] - if isinstance(msg, str): - msg = _fix_eols(msg).encode('ascii') - if self.does_esmtp: - if self.has_extn('size'): - esmtp_opts.append("size=%d" % len(msg)) - for option in mail_options: - esmtp_opts.append(option) - (code, resp) = self.mail(from_addr, esmtp_opts) - if code != 250: - if code == 421: - self.close() - else: - self._rset() - raise SMTPSenderRefused(code, resp, from_addr) - senderrs = {} - if isinstance(to_addrs, str): - to_addrs = [to_addrs] - for each in to_addrs: - (code, resp) = self.rcpt(each, rcpt_options) - if (code != 250) and (code != 251): - senderrs[each] = (code, resp) - if code == 421: - self.close() - raise SMTPRecipientsRefused(senderrs) - if len(senderrs) == len(to_addrs): - # the server refused all our recipients - self._rset() - raise SMTPRecipientsRefused(senderrs) - (code, resp) = self.data(msg) - if code != 250: - if code == 421: - self.close() - else: - self._rset() - raise SMTPDataError(code, resp) - #if we got here then somebody got our mail - return senderrs - - def send_message(self, msg, from_addr=None, to_addrs=None, - mail_options=(), rcpt_options=()): - """Converts message to a bytestring and passes it to sendmail. - - The arguments are as for sendmail, except that msg is an - email.message.Message object. If from_addr is None or to_addrs is - None, these arguments are taken from the headers of the Message as - described in RFC 5322 (a ValueError is raised if there is more than - one set of 'Resent-' headers). Regardless of the values of from_addr and - to_addr, any Bcc field (or Resent-Bcc field, when the Message is a - resent) of the Message object won't be transmitted. The Message - object is then serialized using email.generator.BytesGenerator and - sendmail is called to transmit the message. If the sender or any of - the recipient addresses contain non-ASCII and the server advertises the - SMTPUTF8 capability, the policy is cloned with utf8 set to True for the - serialization, and SMTPUTF8 and BODY=8BITMIME are asserted on the send. - If the server does not support SMTPUTF8, an SMTPNotSupported error is - raised. Otherwise the generator is called without modifying the - policy. - - """ - # 'Resent-Date' is a mandatory field if the Message is resent (RFC 5322 - # Section 3.6.6). In such a case, we use the 'Resent-*' fields. However, - # if there is more than one 'Resent-' block there's no way to - # unambiguously determine which one is the most recent in all cases, - # so rather than guess we raise a ValueError in that case. - # - # TODO implement heuristics to guess the correct Resent-* block with an - # option allowing the user to enable the heuristics. (It should be - # possible to guess correctly almost all of the time.) - - self.ehlo_or_helo_if_needed() - resent = msg.get_all('Resent-Date') - if resent is None: - header_prefix = '' - elif len(resent) == 1: - header_prefix = 'Resent-' - else: - raise ValueError("message has more than one 'Resent-' header block") - if from_addr is None: - # Prefer the sender field per RFC 5322 section 3.6.2. - from_addr = (msg[header_prefix + 'Sender'] - if (header_prefix + 'Sender') in msg - else msg[header_prefix + 'From']) - from_addr = email.utils.getaddresses([from_addr])[0][1] - if to_addrs is None: - addr_fields = [f for f in (msg[header_prefix + 'To'], - msg[header_prefix + 'Bcc'], - msg[header_prefix + 'Cc']) - if f is not None] - to_addrs = [a[1] for a in email.utils.getaddresses(addr_fields)] - # Make a local copy so we can delete the bcc headers. - msg_copy = copy.copy(msg) - del msg_copy['Bcc'] - del msg_copy['Resent-Bcc'] - international = False - try: - ''.join([from_addr, *to_addrs]).encode('ascii') - except UnicodeEncodeError: - if not self.has_extn('smtputf8'): - raise SMTPNotSupportedError( - "One or more source or delivery addresses require" - " internationalized email support, but the server" - " does not advertise the required SMTPUTF8 capability") - international = True - with io.BytesIO() as bytesmsg: - if international: - g = email.generator.BytesGenerator( - bytesmsg, policy=msg.policy.clone(utf8=True)) - mail_options = (*mail_options, 'SMTPUTF8', 'BODY=8BITMIME') - else: - g = email.generator.BytesGenerator(bytesmsg) - g.flatten(msg_copy, linesep='\r\n') - flatmsg = bytesmsg.getvalue() - return self.sendmail(from_addr, to_addrs, flatmsg, mail_options, - rcpt_options) - - def close(self): - """Close the connection to the SMTP server.""" - try: - file = self.file - self.file = None - if file: - file.close() - finally: - sock = self.sock - self.sock = None - if sock: - sock.close() - - def quit(self): - """Terminate the SMTP session.""" - res = self.docmd("quit") - # A new EHLO is required after reconnecting with connect() - self.ehlo_resp = self.helo_resp = None - self.esmtp_features = {} - self.does_esmtp = False - self.close() - return res - -if _have_ssl: - - class SMTP_SSL(SMTP): - """ This is a subclass derived from SMTP that connects over an SSL - encrypted socket (to use this class you need a socket module that was - compiled with SSL support). If host is not specified, '' (the local - host) is used. If port is omitted, the standard SMTP-over-SSL port - (465) is used. local_hostname and source_address have the same meaning - as they do in the SMTP class. context also optional, can contain a - SSLContext. - - """ - - default_port = SMTP_SSL_PORT - - def __init__(self, host='', port=0, local_hostname=None, - *, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, context=None): - if context is None: - context = ssl._create_stdlib_context() - self.context = context - SMTP.__init__(self, host, port, local_hostname, timeout, - source_address) - - def _get_socket(self, host, port, timeout): - if self.debuglevel > 0: - self._print_debug('connect:', (host, port)) - new_socket = super()._get_socket(host, port, timeout) - new_socket = self.context.wrap_socket(new_socket, - server_hostname=self._host) - return new_socket - - __all__.append("SMTP_SSL") - -# -# LMTP extension -# -LMTP_PORT = 2003 - -class LMTP(SMTP): - """LMTP - Local Mail Transfer Protocol - - The LMTP protocol, which is very similar to ESMTP, is heavily based - on the standard SMTP client. It's common to use Unix sockets for - LMTP, so our connect() method must support that as well as a regular - host:port server. local_hostname and source_address have the same - meaning as they do in the SMTP class. To specify a Unix socket, - you must use an absolute path as the host, starting with a '/'. - - Authentication is supported, using the regular SMTP mechanism. When - using a Unix socket, LMTP generally don't support or require any - authentication, but your mileage might vary.""" - - ehlo_msg = "lhlo" - - def __init__(self, host='', port=LMTP_PORT, local_hostname=None, - source_address=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): - """Initialize a new instance.""" - super().__init__(host, port, local_hostname=local_hostname, - source_address=source_address, timeout=timeout) - - def connect(self, host='localhost', port=0, source_address=None): - """Connect to the LMTP daemon, on either a Unix or a TCP socket.""" - if host[0] != '/': - return super().connect(host, port, source_address=source_address) - - if self.timeout is not None and not self.timeout: - raise ValueError('Non-blocking socket (timeout=0) is not supported') - - # Handle Unix-domain sockets. - try: - self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - if self.timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - self.sock.settimeout(self.timeout) - self.file = None - self.sock.connect(host) - except OSError: - if self.debuglevel > 0: - self._print_debug('connect fail:', host) - if self.sock: - self.sock.close() - self.sock = None - raise - (code, msg) = self.getreply() - if self.debuglevel > 0: - self._print_debug('connect:', msg) - return (code, msg) - - -# Test the sendmail method, which tests most of the others. -# Note: This always sends to localhost. -if __name__ == '__main__': - def prompt(prompt): - sys.stdout.write(prompt + ": ") - sys.stdout.flush() - return sys.stdin.readline().strip() - - fromaddr = prompt("From") - toaddrs = prompt("To").split(',') - print("Enter message, end with ^D:") - msg = '' - while line := sys.stdin.readline(): - msg = msg + line - print("Message length is %d" % len(msg)) - - server = SMTP('localhost') - server.set_debuglevel(1) - server.sendmail(fromaddr, toaddrs, msg) - server.quit() diff --git a/Python314_4_x86_Template/Lib/socket.py b/Python314_4_x86_Template/Lib/socket.py deleted file mode 100644 index 727b0e75f..000000000 --- a/Python314_4_x86_Template/Lib/socket.py +++ /dev/null @@ -1,988 +0,0 @@ -# Wrapper module for _socket, providing some additional facilities -# implemented in Python. - -"""\ -This module provides socket operations and some related functions. -On Unix, it supports IP (Internet Protocol) and Unix domain sockets. -On other systems, it only supports IP. Functions specific for a -socket are available as methods of the socket object. - -Functions: - -socket() -- create a new socket object -socketpair() -- create a pair of new socket objects [*] -fromfd() -- create a socket object from an open file descriptor [*] -send_fds() -- Send file descriptor to the socket. -recv_fds() -- Receive file descriptors from the socket. -fromshare() -- create a socket object from data received from socket.share() [*] -gethostname() -- return the current hostname -gethostbyname() -- map a hostname to its IP number -gethostbyaddr() -- map an IP number or hostname to DNS info -getservbyname() -- map a service name and a protocol name to a port number -getprotobyname() -- map a protocol name (e.g. 'tcp') to a number -ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order -htons(), htonl() -- convert 16, 32 bit int from host to network byte order -inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format -inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89) -socket.getdefaulttimeout() -- get the default timeout value -socket.setdefaulttimeout() -- set the default timeout value -create_connection() -- connects to an address, with an optional timeout and - optional source address. -create_server() -- create a TCP socket and bind it to a specified address. - - [*] not available on all platforms! - -Special objects: - -SocketType -- type object for socket objects -error -- exception raised for I/O errors -has_ipv6 -- boolean value indicating if IPv6 is supported - -IntEnum constants: - -AF_INET, AF_UNIX -- socket domains (first argument to socket() call) -SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument) - -Integer constants: - -Many other constants may be defined; these may be used in calls to -the setsockopt() and getsockopt() methods. -""" - -import _socket -from _socket import * - -import io -import os -import sys -from enum import IntEnum, IntFlag - -try: - import errno -except ImportError: - errno = None -EBADF = getattr(errno, 'EBADF', 9) -EAGAIN = getattr(errno, 'EAGAIN', 11) -EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11) - -__all__ = ["fromfd", "getfqdn", "create_connection", "create_server", - "has_dualstack_ipv6", "AddressFamily", "SocketKind"] -__all__.extend(os._get_exports_list(_socket)) - -# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for -# nicer string representations. -# Note that _socket only knows about the integer values. The public interface -# in this module understands the enums and translates them back from integers -# where needed (e.g. .family property of a socket object). - -IntEnum._convert_( - 'AddressFamily', - __name__, - lambda C: C.isupper() and C.startswith('AF_')) - -IntEnum._convert_( - 'SocketKind', - __name__, - lambda C: C.isupper() and C.startswith('SOCK_')) - -IntFlag._convert_( - 'MsgFlag', - __name__, - lambda C: C.isupper() and C.startswith('MSG_')) - -IntFlag._convert_( - 'AddressInfo', - __name__, - lambda C: C.isupper() and C.startswith('AI_')) - -_LOCALHOST = '127.0.0.1' -_LOCALHOST_V6 = '::1' - - -def _intenum_converter(value, enum_klass): - """Convert a numeric family value to an IntEnum member. - - If it's not a known member, return the numeric value itself. - """ - try: - return enum_klass(value) - except ValueError: - return value - - -# WSA error codes -if sys.platform.lower().startswith("win"): - errorTab = { - 6: "Specified event object handle is invalid.", - 8: "Insufficient memory available.", - 87: "One or more parameters are invalid.", - 995: "Overlapped operation aborted.", - 996: "Overlapped I/O event object not in signaled state.", - 997: "Overlapped operation will complete later.", - 10004: "The operation was interrupted.", - 10009: "A bad file handle was passed.", - 10013: "Permission denied.", - 10014: "A fault occurred on the network??", - 10022: "An invalid operation was attempted.", - 10024: "Too many open files.", - 10035: "The socket operation would block.", - 10036: "A blocking operation is already in progress.", - 10037: "Operation already in progress.", - 10038: "Socket operation on nonsocket.", - 10039: "Destination address required.", - 10040: "Message too long.", - 10041: "Protocol wrong type for socket.", - 10042: "Bad protocol option.", - 10043: "Protocol not supported.", - 10044: "Socket type not supported.", - 10045: "Operation not supported.", - 10046: "Protocol family not supported.", - 10047: "Address family not supported by protocol family.", - 10048: "The network address is in use.", - 10049: "Cannot assign requested address.", - 10050: "Network is down.", - 10051: "Network is unreachable.", - 10052: "Network dropped connection on reset.", - 10053: "Software caused connection abort.", - 10054: "The connection has been reset.", - 10055: "No buffer space available.", - 10056: "Socket is already connected.", - 10057: "Socket is not connected.", - 10058: "The network has been shut down.", - 10059: "Too many references.", - 10060: "The operation timed out.", - 10061: "Connection refused.", - 10062: "Cannot translate name.", - 10063: "The name is too long.", - 10064: "The host is down.", - 10065: "The host is unreachable.", - 10066: "Directory not empty.", - 10067: "Too many processes.", - 10068: "User quota exceeded.", - 10069: "Disk quota exceeded.", - 10070: "Stale file handle reference.", - 10071: "Item is remote.", - 10091: "Network subsystem is unavailable.", - 10092: "Winsock.dll version out of range.", - 10093: "Successful WSAStartup not yet performed.", - 10101: "Graceful shutdown in progress.", - 10102: "No more results from WSALookupServiceNext.", - 10103: "Call has been canceled.", - 10104: "Procedure call table is invalid.", - 10105: "Service provider is invalid.", - 10106: "Service provider failed to initialize.", - 10107: "System call failure.", - 10108: "Service not found.", - 10109: "Class type not found.", - 10110: "No more results from WSALookupServiceNext.", - 10111: "Call was canceled.", - 10112: "Database query was refused.", - 11001: "Host not found.", - 11002: "Nonauthoritative host not found.", - 11003: "This is a nonrecoverable error.", - 11004: "Valid name, no data record requested type.", - 11005: "QoS receivers.", - 11006: "QoS senders.", - 11007: "No QoS senders.", - 11008: "QoS no receivers.", - 11009: "QoS request confirmed.", - 11010: "QoS admission error.", - 11011: "QoS policy failure.", - 11012: "QoS bad style.", - 11013: "QoS bad object.", - 11014: "QoS traffic control error.", - 11015: "QoS generic error.", - 11016: "QoS service type error.", - 11017: "QoS flowspec error.", - 11018: "Invalid QoS provider buffer.", - 11019: "Invalid QoS filter style.", - 11020: "Invalid QoS filter style.", - 11021: "Incorrect QoS filter count.", - 11022: "Invalid QoS object length.", - 11023: "Incorrect QoS flow count.", - 11024: "Unrecognized QoS object.", - 11025: "Invalid QoS policy object.", - 11026: "Invalid QoS flow descriptor.", - 11027: "Invalid QoS provider-specific flowspec.", - 11028: "Invalid QoS provider-specific filterspec.", - 11029: "Invalid QoS shape discard mode object.", - 11030: "Invalid QoS shaping rate object.", - 11031: "Reserved policy QoS element type." - } - __all__.append("errorTab") - - -class _GiveupOnSendfile(Exception): pass - - -class socket(_socket.socket): - - """A subclass of _socket.socket adding the makefile() method.""" - - __slots__ = ["__weakref__", "_io_refs", "_closed"] - - def __init__(self, family=-1, type=-1, proto=-1, fileno=None): - # For user code address family and type values are IntEnum members, but - # for the underlying _socket.socket they're just integers. The - # constructor of _socket.socket converts the given argument to an - # integer automatically. - if fileno is None: - if family == -1: - family = AF_INET - if type == -1: - type = SOCK_STREAM - if proto == -1: - proto = 0 - _socket.socket.__init__(self, family, type, proto, fileno) - self._io_refs = 0 - self._closed = False - - def __enter__(self): - return self - - def __exit__(self, *args): - if not self._closed: - self.close() - - def __repr__(self): - """Wrap __repr__() to reveal the real class name and socket - address(es). - """ - closed = getattr(self, '_closed', False) - s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \ - % (self.__class__.__module__, - self.__class__.__qualname__, - " [closed]" if closed else "", - self.fileno(), - self.family, - self.type, - self.proto) - if not closed: - # getsockname and getpeername may not be available on WASI. - try: - laddr = self.getsockname() - if laddr: - s += ", laddr=%s" % str(laddr) - except (error, AttributeError): - pass - try: - raddr = self.getpeername() - if raddr: - s += ", raddr=%s" % str(raddr) - except (error, AttributeError): - pass - s += '>' - return s - - def __getstate__(self): - raise TypeError(f"cannot pickle {self.__class__.__name__!r} object") - - def dup(self): - """dup() -> socket object - - Duplicate the socket. Return a new socket object connected to the same - system resource. The new socket is non-inheritable. - """ - fd = dup(self.fileno()) - sock = self.__class__(self.family, self.type, self.proto, fileno=fd) - sock.settimeout(self.gettimeout()) - return sock - - def accept(self): - """accept() -> (socket object, address info) - - Wait for an incoming connection. Return a new socket - representing the connection, and the address of the client. - For IP sockets, the address info is a pair (hostaddr, port). - """ - fd, addr = self._accept() - sock = socket(self.family, self.type, self.proto, fileno=fd) - # Issue #7995: if no default timeout is set and the listening - # socket had a (non-zero) timeout, force the new socket in blocking - # mode to override platform-specific socket flags inheritance. - if getdefaulttimeout() is None and self.gettimeout(): - sock.setblocking(True) - return sock, addr - - def makefile(self, mode="r", buffering=None, *, - encoding=None, errors=None, newline=None): - """makefile(...) -> an I/O stream connected to the socket - - The arguments are as for io.open() after the filename, except the only - supported mode values are 'r' (default), 'w', 'b', or a combination of - those. - """ - # XXX refactor to share code? - if not set(mode) <= {"r", "w", "b"}: - raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._io_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - encoding = io.text_encoding(encoding) - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text - - if hasattr(os, 'sendfile'): - - def _sendfile_use_sendfile(self, file, offset=0, count=None): - # Lazy import to improve module import time - import selectors - - self._check_sendfile_params(file, offset, count) - sockno = self.fileno() - try: - fileno = file.fileno() - except (AttributeError, io.UnsupportedOperation) as err: - raise _GiveupOnSendfile(err) # not a regular file - try: - fsize = os.fstat(fileno).st_size - except OSError as err: - raise _GiveupOnSendfile(err) # not a regular file - if not fsize: - return 0 # empty file - # Truncate to 1GiB to avoid OverflowError, see bpo-38319. - blocksize = min(count or fsize, 2 ** 30) - timeout = self.gettimeout() - if timeout == 0: - raise ValueError("non-blocking sockets are not supported") - # poll/select have the advantage of not requiring any - # extra file descriptor, contrarily to epoll/kqueue - # (also, they require a single syscall). - if hasattr(selectors, 'PollSelector'): - selector = selectors.PollSelector() - else: - selector = selectors.SelectSelector() - selector.register(sockno, selectors.EVENT_WRITE) - - total_sent = 0 - # localize variable access to minimize overhead - selector_select = selector.select - os_sendfile = os.sendfile - try: - while True: - if timeout and not selector_select(timeout): - raise TimeoutError('timed out') - if count: - blocksize = min(count - total_sent, blocksize) - if blocksize <= 0: - break - try: - sent = os_sendfile(sockno, fileno, offset, blocksize) - except BlockingIOError: - if not timeout: - # Block until the socket is ready to send some - # data; avoids hogging CPU resources. - selector_select() - continue - except OSError as err: - if total_sent == 0: - # We can get here for different reasons, the main - # one being 'file' is not a regular mmap(2)-like - # file, in which case we'll fall back on using - # plain send(). - raise _GiveupOnSendfile(err) - raise err from None - else: - if sent == 0: - break # EOF - offset += sent - total_sent += sent - return total_sent - finally: - if total_sent > 0 and hasattr(file, 'seek'): - file.seek(offset) - else: - def _sendfile_use_sendfile(self, file, offset=0, count=None): - raise _GiveupOnSendfile( - "os.sendfile() not available on this platform") - - def _sendfile_use_send(self, file, offset=0, count=None): - self._check_sendfile_params(file, offset, count) - if self.gettimeout() == 0: - raise ValueError("non-blocking sockets are not supported") - if offset: - file.seek(offset) - blocksize = min(count, 8192) if count else 8192 - total_sent = 0 - # localize variable access to minimize overhead - file_read = file.read - sock_send = self.send - try: - while True: - if count: - blocksize = min(count - total_sent, blocksize) - if blocksize <= 0: - break - data = memoryview(file_read(blocksize)) - if not data: - break # EOF - while True: - try: - sent = sock_send(data) - except BlockingIOError: - continue - else: - total_sent += sent - if sent < len(data): - data = data[sent:] - else: - break - return total_sent - finally: - if total_sent > 0 and hasattr(file, 'seek'): - file.seek(offset + total_sent) - - def _check_sendfile_params(self, file, offset, count): - if 'b' not in getattr(file, 'mode', 'b'): - raise ValueError("file should be opened in binary mode") - if not self.type & SOCK_STREAM: - raise ValueError("only SOCK_STREAM type sockets are supported") - if count is not None: - if not isinstance(count, int): - raise TypeError( - "count must be a positive integer (got {!r})".format(count)) - if count <= 0: - raise ValueError( - "count must be a positive integer (got {!r})".format(count)) - - def sendfile(self, file, offset=0, count=None): - """sendfile(file[, offset[, count]]) -> sent - - Send a file until EOF is reached by using high-performance - os.sendfile() and return the total number of bytes which - were sent. - *file* must be a regular file object opened in binary mode. - If os.sendfile() is not available (e.g. Windows) or file is - not a regular file socket.send() will be used instead. - *offset* tells from where to start reading the file. - If specified, *count* is the total number of bytes to transmit - as opposed to sending the file until EOF is reached. - File position is updated on return or also in case of error in - which case file.tell() can be used to figure out the number of - bytes which were sent. - The socket must be of SOCK_STREAM type. - Non-blocking sockets are not supported. - """ - try: - return self._sendfile_use_sendfile(file, offset, count) - except _GiveupOnSendfile: - return self._sendfile_use_send(file, offset, count) - - def _decref_socketios(self): - if self._io_refs > 0: - self._io_refs -= 1 - if self._closed: - self.close() - - def _real_close(self, _ss=_socket.socket): - # This function should not reference any globals. See issue #808164. - _ss.close(self) - - def close(self): - # This function should not reference any globals. See issue #808164. - self._closed = True - if self._io_refs <= 0: - self._real_close() - - def detach(self): - """detach() -> file descriptor - - Close the socket object without closing the underlying file descriptor. - The object cannot be used after this call, but the file descriptor - can be reused for other purposes. The file descriptor is returned. - """ - self._closed = True - return super().detach() - - @property - def family(self): - """Read-only access to the address family for this socket. - """ - return _intenum_converter(super().family, AddressFamily) - - @property - def type(self): - """Read-only access to the socket type. - """ - return _intenum_converter(super().type, SocketKind) - - if os.name == 'nt': - def get_inheritable(self): - return os.get_handle_inheritable(self.fileno()) - def set_inheritable(self, inheritable): - os.set_handle_inheritable(self.fileno(), inheritable) - else: - def get_inheritable(self): - return os.get_inheritable(self.fileno()) - def set_inheritable(self, inheritable): - os.set_inheritable(self.fileno(), inheritable) - get_inheritable.__doc__ = "Get the inheritable flag of the socket" - set_inheritable.__doc__ = "Set the inheritable flag of the socket" - -def fromfd(fd, family, type, proto=0): - """ fromfd(fd, family, type[, proto]) -> socket object - - Create a socket object from a duplicate of the given file - descriptor. The remaining arguments are the same as for socket(). - """ - nfd = dup(fd) - return socket(family, type, proto, nfd) - -if hasattr(_socket.socket, "sendmsg"): - def send_fds(sock, buffers, fds, flags=0, address=None): - """ send_fds(sock, buffers, fds[, flags[, address]]) -> integer - - Send the list of file descriptors fds over an AF_UNIX socket. - """ - import array - - return sock.sendmsg(buffers, [(_socket.SOL_SOCKET, - _socket.SCM_RIGHTS, array.array("i", fds))]) - __all__.append("send_fds") - -if hasattr(_socket.socket, "recvmsg"): - def recv_fds(sock, bufsize, maxfds, flags=0): - """ recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file - descriptors, msg_flags, address) - - Receive up to maxfds file descriptors returning the message - data and a list containing the descriptors. - """ - import array - - # Array of ints - fds = array.array("i") - msg, ancdata, flags, addr = sock.recvmsg(bufsize, - _socket.CMSG_LEN(maxfds * fds.itemsize)) - for cmsg_level, cmsg_type, cmsg_data in ancdata: - if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS): - fds.frombytes(cmsg_data[: - len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) - - return msg, list(fds), flags, addr - __all__.append("recv_fds") - -if hasattr(_socket.socket, "share"): - def fromshare(info): - """ fromshare(info) -> socket object - - Create a socket object from the bytes object returned by - socket.share(pid). - """ - return socket(0, 0, 0, info) - __all__.append("fromshare") - -# Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain. -# This is used if _socket doesn't natively provide socketpair. It's -# always defined so that it can be patched in for testing purposes. -def _fallback_socketpair(family=AF_INET, type=SOCK_STREAM, proto=0): - if family == AF_INET: - host = _LOCALHOST - elif family == AF_INET6: - host = _LOCALHOST_V6 - else: - raise ValueError("Only AF_INET and AF_INET6 socket address families " - "are supported") - if type != SOCK_STREAM: - raise ValueError("Only SOCK_STREAM socket type is supported") - if proto != 0: - raise ValueError("Only protocol zero is supported") - - # We create a connected TCP socket. Note the trick with - # setblocking(False) that prevents us from having to create a thread. - lsock = socket(family, type, proto) - try: - lsock.bind((host, 0)) - lsock.listen() - # On IPv6, ignore flow_info and scope_id - addr, port = lsock.getsockname()[:2] - csock = socket(family, type, proto) - try: - csock.setblocking(False) - try: - csock.connect((addr, port)) - except (BlockingIOError, InterruptedError): - pass - csock.setblocking(True) - ssock, _ = lsock.accept() - except: - csock.close() - raise - finally: - lsock.close() - - # Authenticating avoids using a connection from something else - # able to connect to {host}:{port} instead of us. - # We expect only AF_INET and AF_INET6 families. - try: - if ( - ssock.getsockname() != csock.getpeername() - or csock.getsockname() != ssock.getpeername() - ): - raise ConnectionError("Unexpected peer connection") - except: - # getsockname() and getpeername() can fail - # if either socket isn't connected. - ssock.close() - csock.close() - raise - - return (ssock, csock) - -if hasattr(_socket, "socketpair"): - def socketpair(family=None, type=SOCK_STREAM, proto=0): - if family is None: - try: - family = AF_UNIX - except NameError: - family = AF_INET - a, b = _socket.socketpair(family, type, proto) - a = socket(family, type, proto, a.detach()) - b = socket(family, type, proto, b.detach()) - return a, b - -else: - socketpair = _fallback_socketpair - __all__.append("socketpair") - -socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object) -Create a pair of socket objects from the sockets returned by the platform -socketpair() function. -The arguments are the same as for socket() except the default family is AF_UNIX -if defined on the platform; otherwise, the default is AF_INET. -""" - -_blocking_errnos = { EAGAIN, EWOULDBLOCK } - -class SocketIO(io.RawIOBase): - - """Raw I/O implementation for stream sockets. - - This class supports the makefile() method on sockets. It provides - the raw I/O interface on top of a socket object. - """ - - # One might wonder why not let FileIO do the job instead. There are two - # main reasons why FileIO is not adapted: - # - it wouldn't work under Windows (where you can't used read() and - # write() on a socket handle) - # - it wouldn't work with socket timeouts (FileIO would ignore the - # timeout and consider the socket non-blocking) - - # XXX More docs - - def __init__(self, sock, mode): - if mode not in ("r", "w", "rw", "rb", "wb", "rwb"): - raise ValueError("invalid mode: %r" % mode) - io.RawIOBase.__init__(self) - self._sock = sock - if "b" not in mode: - mode += "b" - self._mode = mode - self._reading = "r" in mode - self._writing = "w" in mode - self._timeout_occurred = False - - def readinto(self, b): - """Read up to len(b) bytes into the writable buffer *b* and return - the number of bytes read. If the socket is non-blocking and no bytes - are available, None is returned. - - If *b* is non-empty, a 0 return value indicates that the connection - was shutdown at the other end. - """ - self._checkClosed() - self._checkReadable() - if self._timeout_occurred: - raise OSError("cannot read from timed out object") - try: - return self._sock.recv_into(b) - except timeout: - self._timeout_occurred = True - raise - except error as e: - if e.errno in _blocking_errnos: - return None - raise - - def write(self, b): - """Write the given bytes or bytearray object *b* to the socket - and return the number of bytes written. This can be less than - len(b) if not all data could be written. If the socket is - non-blocking and no bytes could be written None is returned. - """ - self._checkClosed() - self._checkWritable() - try: - return self._sock.send(b) - except error as e: - # XXX what about EINTR? - if e.errno in _blocking_errnos: - return None - raise - - def readable(self): - """True if the SocketIO is open for reading. - """ - if self.closed: - raise ValueError("I/O operation on closed socket.") - return self._reading - - def writable(self): - """True if the SocketIO is open for writing. - """ - if self.closed: - raise ValueError("I/O operation on closed socket.") - return self._writing - - def seekable(self): - """True if the SocketIO is open for seeking. - """ - if self.closed: - raise ValueError("I/O operation on closed socket.") - return super().seekable() - - def fileno(self): - """Return the file descriptor of the underlying socket. - """ - self._checkClosed() - return self._sock.fileno() - - @property - def name(self): - if not self.closed: - return self.fileno() - else: - return -1 - - @property - def mode(self): - return self._mode - - def close(self): - """Close the SocketIO object. This doesn't close the underlying - socket, except if all references to it have disappeared. - """ - if self.closed: - return - io.RawIOBase.close(self) - self._sock._decref_socketios() - self._sock = None - - -def getfqdn(name=''): - """Get fully qualified domain name from name. - - An empty argument is interpreted as meaning the local host. - - First the hostname returned by gethostbyaddr() is checked, then - possibly existing aliases. In case no FQDN is available and `name` - was given, it is returned unchanged. If `name` was empty, '0.0.0.0' or '::', - hostname from gethostname() is returned. - """ - name = name.strip() - if not name or name in ('0.0.0.0', '::'): - name = gethostname() - try: - hostname, aliases, ipaddrs = gethostbyaddr(name) - except error: - pass - else: - aliases.insert(0, hostname) - for name in aliases: - if '.' in name: - break - else: - name = hostname - return name - - -_GLOBAL_DEFAULT_TIMEOUT = object() - -def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, - source_address=None, *, all_errors=False): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - A host of '' or port 0 tells the OS to use the default. When a connection - cannot be created, raises the last error if *all_errors* is False, - and an ExceptionGroup of all errors if *all_errors* is True. - """ - - host, port = address - exceptions = [] - for res in getaddrinfo(host, port, 0, SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket(af, socktype, proto) - if timeout is not _GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - # Break explicitly a reference cycle - exceptions.clear() - return sock - - except error as exc: - if not all_errors: - exceptions.clear() # raise only the last error - exceptions.append(exc) - if sock is not None: - sock.close() - - if len(exceptions): - try: - if not all_errors: - raise exceptions[0] - raise ExceptionGroup("create_connection failed", exceptions) - finally: - # Break explicitly a reference cycle - exceptions.clear() - else: - raise error("getaddrinfo returns an empty list") - - -def has_dualstack_ipv6(): - """Return True if the platform supports creating a SOCK_STREAM socket - which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections. - """ - if not has_ipv6 \ - or not hasattr(_socket, 'IPPROTO_IPV6') \ - or not hasattr(_socket, 'IPV6_V6ONLY'): - return False - try: - with socket(AF_INET6, SOCK_STREAM) as sock: - sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0) - return True - except error: - return False - - -def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False, - dualstack_ipv6=False): - """Convenience function which creates a SOCK_STREAM type socket - bound to *address* (a 2-tuple (host, port)) and return the socket - object. - - *family* should be either AF_INET or AF_INET6. - *backlog* is the queue size passed to socket.listen(). - *reuse_port* dictates whether to use the SO_REUSEPORT socket option. - *dualstack_ipv6*: if true and the platform supports it, it will - create an AF_INET6 socket able to accept both IPv4 or IPv6 - connections. When false it will explicitly disable this option on - platforms that enable it by default (e.g. Linux). - - >>> with create_server(('', 8000)) as server: - ... while True: - ... conn, addr = server.accept() - ... # handle new connection - """ - if reuse_port and not hasattr(_socket, "SO_REUSEPORT"): - raise ValueError("SO_REUSEPORT not supported on this platform") - if dualstack_ipv6: - if not has_dualstack_ipv6(): - raise ValueError("dualstack_ipv6 not supported on this platform") - if family != AF_INET6: - raise ValueError("dualstack_ipv6 requires AF_INET6 family") - sock = socket(family, SOCK_STREAM) - try: - # Note about Windows. We don't set SO_REUSEADDR because: - # 1) It's unnecessary: bind() will succeed even in case of a - # previous closed socket on the same address and still in - # TIME_WAIT state. - # 2) If set, another socket is free to bind() on the same - # address, effectively preventing this one from accepting - # connections. Also, it may set the process in a state where - # it'll no longer respond to any signals or graceful kills. - # See: https://learn.microsoft.com/windows/win32/winsock/using-so-reuseaddr-and-so-exclusiveaddruse - if os.name not in ('nt', 'cygwin') and \ - hasattr(_socket, 'SO_REUSEADDR'): - try: - sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) - except error: - # Fail later on bind(), for platforms which may not - # support this option. - pass - # Since Linux 6.12.9, SO_REUSEPORT is not allowed - # on other address families than AF_INET/AF_INET6. - if reuse_port and family in (AF_INET, AF_INET6): - sock.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) - if has_ipv6 and family == AF_INET6: - if dualstack_ipv6: - sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0) - elif hasattr(_socket, "IPV6_V6ONLY") and \ - hasattr(_socket, "IPPROTO_IPV6"): - sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 1) - try: - sock.bind(address) - except error as err: - msg = '%s (while attempting to bind on address %r)' % \ - (err.strerror, address) - raise error(err.errno, msg) from None - if backlog is None: - sock.listen() - else: - sock.listen(backlog) - return sock - except error: - sock.close() - raise - - -def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): - """Resolve host and port into list of address info entries. - - Translate the host/port argument into a sequence of 5-tuples that contain - all the necessary arguments for creating a socket connected to that service. - host is a domain name, a string representation of an IPv4/v6 address or - None. port is a string service name such as 'http', a numeric port number or - None. By passing None as the value of host and port, you can pass NULL to - the underlying C API. - - The family, type and proto arguments can be optionally specified in order to - narrow the list of addresses returned. Passing zero as a value for each of - these arguments selects the full range of results. - """ - # We override this function since we want to translate the numeric family - # and socket type values to enum constants. - addrlist = [] - for res in _socket.getaddrinfo(host, port, family, type, proto, flags): - af, socktype, proto, canonname, sa = res - addrlist.append((_intenum_converter(af, AddressFamily), - _intenum_converter(socktype, SocketKind), - proto, canonname, sa)) - return addrlist diff --git a/Python314_4_x86_Template/Lib/socketserver.py b/Python314_4_x86_Template/Lib/socketserver.py deleted file mode 100644 index 35b2723de..000000000 --- a/Python314_4_x86_Template/Lib/socketserver.py +++ /dev/null @@ -1,863 +0,0 @@ -"""Generic socket server classes. - -This module tries to capture the various aspects of defining a server: - -For socket-based servers: - -- address family: - - AF_INET{,6}: IP (Internet Protocol) sockets (default) - - AF_UNIX: Unix domain sockets - - others, e.g. AF_DECNET are conceivable (see <socket.h> -- socket type: - - SOCK_STREAM (reliable stream, e.g. TCP) - - SOCK_DGRAM (datagrams, e.g. UDP) - -For request-based servers (including socket-based): - -- client address verification before further looking at the request - (This is actually a hook for any processing that needs to look - at the request before anything else, e.g. logging) -- how to handle multiple requests: - - synchronous (one request is handled at a time) - - forking (each request is handled by a new process) - - threading (each request is handled by a new thread) - -The classes in this module favor the server type that is simplest to -write: a synchronous TCP/IP server. This is bad class design, but -saves some typing. (There's also the issue that a deep class hierarchy -slows down method lookups.) - -There are five classes in an inheritance diagram, four of which represent -synchronous servers of four types: - - +------------+ - | BaseServer | - +------------+ - | - v - +-----------+ +------------------+ - | TCPServer |------->| UnixStreamServer | - +-----------+ +------------------+ - | - v - +-----------+ +--------------------+ - | UDPServer |------->| UnixDatagramServer | - +-----------+ +--------------------+ - -Note that UnixDatagramServer derives from UDPServer, not from -UnixStreamServer -- the only difference between an IP and a Unix -stream server is the address family, which is simply repeated in both -unix server classes. - -Forking and threading versions of each type of server can be created -using the ForkingMixIn and ThreadingMixIn mix-in classes. For -instance, a threading UDP server class is created as follows: - - class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass - -The Mix-in class must come first, since it overrides a method defined -in UDPServer! Setting the various member variables also changes -the behavior of the underlying server mechanism. - -To implement a service, you must derive a class from -BaseRequestHandler and redefine its handle() method. You can then run -various versions of the service by combining one of the server classes -with your request handler class. - -The request handler class must be different for datagram or stream -services. This can be hidden by using the request handler -subclasses StreamRequestHandler or DatagramRequestHandler. - -Of course, you still have to use your head! - -For instance, it makes no sense to use a forking server if the service -contains state in memory that can be modified by requests (since the -modifications in the child process would never reach the initial state -kept in the parent process and passed to each child). In this case, -you can use a threading server, but you will probably have to use -locks to avoid two requests that come in nearly simultaneous to apply -conflicting changes to the server state. - -On the other hand, if you are building e.g. an HTTP server, where all -data is stored externally (e.g. in the file system), a synchronous -class will essentially render the service "deaf" while one request is -being handled -- which may be for a very long time if a client is slow -to read all the data it has requested. Here a threading or forking -server is appropriate. - -In some cases, it may be appropriate to process part of a request -synchronously, but to finish processing in a forked child depending on -the request data. This can be implemented by using a synchronous -server and doing an explicit fork in the request handler class -handle() method. - -Another approach to handling multiple simultaneous requests in an -environment that supports neither threads nor fork (or where these are -too expensive or inappropriate for the service) is to maintain an -explicit table of partially finished requests and to use a selector to -decide which request to work on next (or whether to handle a new -incoming request). This is particularly important for stream services -where each client can potentially be connected for a long time (if -threads or subprocesses cannot be used). - -Future work: -- Standard classes for Sun RPC (which uses either UDP or TCP) -- Standard mix-in classes to implement various authentication - and encryption schemes - -XXX Open problems: -- What to do with out-of-band data? - -BaseServer: -- split generic "request" functionality out into BaseServer class. - Copyright (C) 2000 Luke Kenneth Casson Leighton <lkcl@samba.org> - - example: read entries from a SQL database (requires overriding - get_request() to return a table entry from the database). - entry is processed by a RequestHandlerClass. - -""" - -# Author of the BaseServer patch: Luke Kenneth Casson Leighton - -__version__ = "0.4" - - -import socket -import selectors -import os -import sys -import threading -from io import BufferedIOBase -from time import monotonic as time - -__all__ = ["BaseServer", "TCPServer", "UDPServer", - "ThreadingUDPServer", "ThreadingTCPServer", - "BaseRequestHandler", "StreamRequestHandler", - "DatagramRequestHandler", "ThreadingMixIn"] -if hasattr(os, "fork"): - __all__.extend(["ForkingUDPServer","ForkingTCPServer", "ForkingMixIn"]) -if hasattr(socket, "AF_UNIX"): - __all__.extend(["UnixStreamServer","UnixDatagramServer", - "ThreadingUnixStreamServer", - "ThreadingUnixDatagramServer"]) - if hasattr(os, "fork"): - __all__.extend(["ForkingUnixStreamServer", "ForkingUnixDatagramServer"]) - -# poll/select have the advantage of not requiring any extra file descriptor, -# contrarily to epoll/kqueue (also, they require a single syscall). -if hasattr(selectors, 'PollSelector'): - _ServerSelector = selectors.PollSelector -else: - _ServerSelector = selectors.SelectSelector - - -class BaseServer: - - """Base class for server classes. - - Methods for the caller: - - - __init__(server_address, RequestHandlerClass) - - serve_forever(poll_interval=0.5) - - shutdown() - - handle_request() # if you do not use serve_forever() - - fileno() -> int # for selector - - Methods that may be overridden: - - - server_bind() - - server_activate() - - get_request() -> request, client_address - - handle_timeout() - - verify_request(request, client_address) - - server_close() - - process_request(request, client_address) - - shutdown_request(request) - - close_request(request) - - service_actions() - - handle_error() - - Methods for derived classes: - - - finish_request(request, client_address) - - Class variables that may be overridden by derived classes or - instances: - - - timeout - - address_family - - socket_type - - allow_reuse_address - - allow_reuse_port - - Instance variables: - - - RequestHandlerClass - - socket - - """ - - timeout = None - - def __init__(self, server_address, RequestHandlerClass): - """Constructor. May be extended, do not override.""" - self.server_address = server_address - self.RequestHandlerClass = RequestHandlerClass - self.__is_shut_down = threading.Event() - self.__shutdown_request = False - - def server_activate(self): - """Called by constructor to activate the server. - - May be overridden. - - """ - pass - - def serve_forever(self, poll_interval=0.5): - """Handle one request at a time until shutdown. - - Polls for shutdown every poll_interval seconds. Ignores - self.timeout. If you need to do periodic tasks, do them in - another thread. - """ - self.__is_shut_down.clear() - try: - # XXX: Consider using another file descriptor or connecting to the - # socket to wake this up instead of polling. Polling reduces our - # responsiveness to a shutdown request and wastes cpu at all other - # times. - with _ServerSelector() as selector: - selector.register(self, selectors.EVENT_READ) - - while not self.__shutdown_request: - ready = selector.select(poll_interval) - # bpo-35017: shutdown() called during select(), exit immediately. - if self.__shutdown_request: - break - if ready: - self._handle_request_noblock() - - self.service_actions() - finally: - self.__shutdown_request = False - self.__is_shut_down.set() - - def shutdown(self): - """Stops the serve_forever loop. - - Blocks until the loop has finished. This must be called while - serve_forever() is running in another thread, or it will - deadlock. - """ - self.__shutdown_request = True - self.__is_shut_down.wait() - - def service_actions(self): - """Called by the serve_forever() loop. - - May be overridden by a subclass / Mixin to implement any code that - needs to be run during the loop. - """ - pass - - # The distinction between handling, getting, processing and finishing a - # request is fairly arbitrary. Remember: - # - # - handle_request() is the top-level call. It calls selector.select(), - # get_request(), verify_request() and process_request() - # - get_request() is different for stream or datagram sockets - # - process_request() is the place that may fork a new process or create a - # new thread to finish the request - # - finish_request() instantiates the request handler class; this - # constructor will handle the request all by itself - - def handle_request(self): - """Handle one request, possibly blocking. - - Respects self.timeout. - """ - # Support people who used socket.settimeout() to escape - # handle_request before self.timeout was available. - timeout = self.socket.gettimeout() - if timeout is None: - timeout = self.timeout - elif self.timeout is not None: - timeout = min(timeout, self.timeout) - if timeout is not None: - deadline = time() + timeout - - # Wait until a request arrives or the timeout expires - the loop is - # necessary to accommodate early wakeups due to EINTR. - with _ServerSelector() as selector: - selector.register(self, selectors.EVENT_READ) - - while True: - if selector.select(timeout): - return self._handle_request_noblock() - else: - if timeout is not None: - timeout = deadline - time() - if timeout < 0: - return self.handle_timeout() - - def _handle_request_noblock(self): - """Handle one request, without blocking. - - I assume that selector.select() has returned that the socket is - readable before this function was called, so there should be no risk of - blocking in get_request(). - """ - try: - request, client_address = self.get_request() - except OSError: - return - if self.verify_request(request, client_address): - try: - self.process_request(request, client_address) - except Exception: - self.handle_error(request, client_address) - self.shutdown_request(request) - except: - self.shutdown_request(request) - raise - else: - self.shutdown_request(request) - - def handle_timeout(self): - """Called if no new request arrives within self.timeout. - - Overridden by ForkingMixIn. - """ - pass - - def verify_request(self, request, client_address): - """Verify the request. May be overridden. - - Return True if we should proceed with this request. - - """ - return True - - def process_request(self, request, client_address): - """Call finish_request. - - Overridden by ForkingMixIn and ThreadingMixIn. - - """ - self.finish_request(request, client_address) - self.shutdown_request(request) - - def server_close(self): - """Called to clean-up the server. - - May be overridden. - - """ - pass - - def finish_request(self, request, client_address): - """Finish one request by instantiating RequestHandlerClass.""" - self.RequestHandlerClass(request, client_address, self) - - def shutdown_request(self, request): - """Called to shutdown and close an individual request.""" - self.close_request(request) - - def close_request(self, request): - """Called to clean up an individual request.""" - pass - - def handle_error(self, request, client_address): - """Handle an error gracefully. May be overridden. - - The default is to print a traceback and continue. - - """ - print('-'*40, file=sys.stderr) - print('Exception occurred during processing of request from', - client_address, file=sys.stderr) - import traceback - traceback.print_exc() - print('-'*40, file=sys.stderr) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.server_close() - - -class TCPServer(BaseServer): - - """Base class for various socket-based server classes. - - Defaults to synchronous IP stream (i.e., TCP). - - Methods for the caller: - - - __init__(server_address, RequestHandlerClass, bind_and_activate=True) - - serve_forever(poll_interval=0.5) - - shutdown() - - handle_request() # if you don't use serve_forever() - - fileno() -> int # for selector - - Methods that may be overridden: - - - server_bind() - - server_activate() - - get_request() -> request, client_address - - handle_timeout() - - verify_request(request, client_address) - - process_request(request, client_address) - - shutdown_request(request) - - close_request(request) - - handle_error() - - Methods for derived classes: - - - finish_request(request, client_address) - - Class variables that may be overridden by derived classes or - instances: - - - timeout - - address_family - - socket_type - - request_queue_size (only for stream sockets) - - allow_reuse_address - - allow_reuse_port - - Instance variables: - - - server_address - - RequestHandlerClass - - socket - - """ - - address_family = socket.AF_INET - - socket_type = socket.SOCK_STREAM - - request_queue_size = 5 - - allow_reuse_address = False - - allow_reuse_port = False - - def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True): - """Constructor. May be extended, do not override.""" - BaseServer.__init__(self, server_address, RequestHandlerClass) - self.socket = socket.socket(self.address_family, - self.socket_type) - if bind_and_activate: - try: - self.server_bind() - self.server_activate() - except: - self.server_close() - raise - - def server_bind(self): - """Called by constructor to bind the socket. - - May be overridden. - - """ - if self.allow_reuse_address and hasattr(socket, "SO_REUSEADDR"): - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - # Since Linux 6.12.9, SO_REUSEPORT is not allowed - # on other address families than AF_INET/AF_INET6. - if ( - self.allow_reuse_port and hasattr(socket, "SO_REUSEPORT") - and self.address_family in (socket.AF_INET, socket.AF_INET6) - ): - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - self.socket.bind(self.server_address) - self.server_address = self.socket.getsockname() - - def server_activate(self): - """Called by constructor to activate the server. - - May be overridden. - - """ - self.socket.listen(self.request_queue_size) - - def server_close(self): - """Called to clean-up the server. - - May be overridden. - - """ - self.socket.close() - - def fileno(self): - """Return socket file number. - - Interface required by selector. - - """ - return self.socket.fileno() - - def get_request(self): - """Get the request and client address from the socket. - - May be overridden. - - """ - return self.socket.accept() - - def shutdown_request(self, request): - """Called to shutdown and close an individual request.""" - try: - #explicitly shutdown. socket.close() merely releases - #the socket and waits for GC to perform the actual close. - request.shutdown(socket.SHUT_WR) - except OSError: - pass #some platforms may raise ENOTCONN here - self.close_request(request) - - def close_request(self, request): - """Called to clean up an individual request.""" - request.close() - - -class UDPServer(TCPServer): - - """UDP server class.""" - - allow_reuse_address = False - - allow_reuse_port = False - - socket_type = socket.SOCK_DGRAM - - max_packet_size = 8192 - - def get_request(self): - data, client_addr = self.socket.recvfrom(self.max_packet_size) - return (data, self.socket), client_addr - - def server_activate(self): - # No need to call listen() for UDP. - pass - - def shutdown_request(self, request): - # No need to shutdown anything. - self.close_request(request) - - def close_request(self, request): - # No need to close anything. - pass - -if hasattr(os, "fork"): - class ForkingMixIn: - """Mix-in class to handle each request in a new process.""" - - timeout = 300 - active_children = None - max_children = 40 - # If true, server_close() waits until all child processes complete. - block_on_close = True - - def collect_children(self, *, blocking=False): - """Internal routine to wait for children that have exited.""" - if self.active_children is None: - return - - # If we're above the max number of children, wait and reap them until - # we go back below threshold. Note that we use waitpid(-1) below to be - # able to collect children in size(<defunct children>) syscalls instead - # of size(<children>): the downside is that this might reap children - # which we didn't spawn, which is why we only resort to this when we're - # above max_children. - while len(self.active_children) >= self.max_children: - try: - pid, _ = os.waitpid(-1, 0) - self.active_children.discard(pid) - except ChildProcessError: - # we don't have any children, we're done - self.active_children.clear() - except OSError: - break - - # Now reap all defunct children. - for pid in self.active_children.copy(): - try: - flags = 0 if blocking else os.WNOHANG - pid, _ = os.waitpid(pid, flags) - # if the child hasn't exited yet, pid will be 0 and ignored by - # discard() below - self.active_children.discard(pid) - except ChildProcessError: - # someone else reaped it - self.active_children.discard(pid) - except OSError: - pass - - def handle_timeout(self): - """Wait for zombies after self.timeout seconds of inactivity. - - May be extended, do not override. - """ - self.collect_children() - - def service_actions(self): - """Collect the zombie child processes regularly in the ForkingMixIn. - - service_actions is called in the BaseServer's serve_forever loop. - """ - self.collect_children() - - def process_request(self, request, client_address): - """Fork a new subprocess to process the request.""" - pid = os.fork() - if pid: - # Parent process - if self.active_children is None: - self.active_children = set() - self.active_children.add(pid) - self.close_request(request) - return - else: - # Child process. - # This must never return, hence os._exit()! - status = 1 - try: - self.finish_request(request, client_address) - status = 0 - except Exception: - self.handle_error(request, client_address) - finally: - try: - self.shutdown_request(request) - finally: - os._exit(status) - - def server_close(self): - super().server_close() - self.collect_children(blocking=self.block_on_close) - - -class _Threads(list): - """ - Joinable list of all non-daemon threads. - """ - def append(self, thread): - self.reap() - if thread.daemon: - return - super().append(thread) - - def pop_all(self): - self[:], result = [], self[:] - return result - - def join(self): - for thread in self.pop_all(): - thread.join() - - def reap(self): - self[:] = (thread for thread in self if thread.is_alive()) - - -class _NoThreads: - """ - Degenerate version of _Threads. - """ - def append(self, thread): - pass - - def join(self): - pass - - -class ThreadingMixIn: - """Mix-in class to handle each request in a new thread.""" - - # Decides how threads will act upon termination of the - # main process - daemon_threads = False - # If true, server_close() waits until all non-daemonic threads terminate. - block_on_close = True - # Threads object - # used by server_close() to wait for all threads completion. - _threads = _NoThreads() - - def process_request_thread(self, request, client_address): - """Same as in BaseServer but as a thread. - - In addition, exception handling is done here. - - """ - try: - self.finish_request(request, client_address) - except Exception: - self.handle_error(request, client_address) - finally: - self.shutdown_request(request) - - def process_request(self, request, client_address): - """Start a new thread to process the request.""" - if self.block_on_close: - vars(self).setdefault('_threads', _Threads()) - t = threading.Thread(target = self.process_request_thread, - args = (request, client_address)) - t.daemon = self.daemon_threads - self._threads.append(t) - t.start() - - def server_close(self): - super().server_close() - self._threads.join() - - -if hasattr(os, "fork"): - class ForkingUDPServer(ForkingMixIn, UDPServer): pass - class ForkingTCPServer(ForkingMixIn, TCPServer): pass - -class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass -class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass - -if hasattr(socket, 'AF_UNIX'): - - class UnixStreamServer(TCPServer): - address_family = socket.AF_UNIX - - class UnixDatagramServer(UDPServer): - address_family = socket.AF_UNIX - - class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass - - class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass - - if hasattr(os, "fork"): - class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass - - class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass - -class BaseRequestHandler: - - """Base class for request handler classes. - - This class is instantiated for each request to be handled. The - constructor sets the instance variables request, client_address - and server, and then calls the handle() method. To implement a - specific service, all you need to do is to derive a class which - defines a handle() method. - - The handle() method can find the request as self.request, the - client address as self.client_address, and the server (in case it - needs access to per-server information) as self.server. Since a - separate instance is created for each request, the handle() method - can define other arbitrary instance variables. - - """ - - def __init__(self, request, client_address, server): - self.request = request - self.client_address = client_address - self.server = server - self.setup() - try: - self.handle() - finally: - self.finish() - - def setup(self): - pass - - def handle(self): - pass - - def finish(self): - pass - - -# The following two classes make it possible to use the same service -# class for stream or datagram servers. -# Each class sets up these instance variables: -# - rfile: a file object from which receives the request is read -# - wfile: a file object to which the reply is written -# When the handle() method returns, wfile is flushed properly - - -class StreamRequestHandler(BaseRequestHandler): - - """Define self.rfile and self.wfile for stream sockets.""" - - # Default buffer sizes for rfile, wfile. - # We default rfile to buffered because otherwise it could be - # really slow for large data (a getc() call per byte); we make - # wfile unbuffered because (a) often after a write() we want to - # read and we need to flush the line; (b) big writes to unbuffered - # files are typically optimized by stdio even when big reads - # aren't. - rbufsize = -1 - wbufsize = 0 - - # A timeout to apply to the request socket, if not None. - timeout = None - - # Disable nagle algorithm for this socket, if True. - # Use only when wbufsize != 0, to avoid small packets. - disable_nagle_algorithm = False - - def setup(self): - self.connection = self.request - if self.timeout is not None: - self.connection.settimeout(self.timeout) - if self.disable_nagle_algorithm: - self.connection.setsockopt(socket.IPPROTO_TCP, - socket.TCP_NODELAY, True) - self.rfile = self.connection.makefile('rb', self.rbufsize) - if self.wbufsize == 0: - self.wfile = _SocketWriter(self.connection) - else: - self.wfile = self.connection.makefile('wb', self.wbufsize) - - def finish(self): - if not self.wfile.closed: - try: - self.wfile.flush() - except socket.error: - # A final socket error may have occurred here, such as - # the local error ECONNABORTED. - pass - self.wfile.close() - self.rfile.close() - -class _SocketWriter(BufferedIOBase): - """Simple writable BufferedIOBase implementation for a socket - - Does not hold data in a buffer, avoiding any need to call flush().""" - - def __init__(self, sock): - self._sock = sock - - def writable(self): - return True - - def write(self, b): - self._sock.sendall(b) - with memoryview(b) as view: - return view.nbytes - - def fileno(self): - return self._sock.fileno() - -class DatagramRequestHandler(BaseRequestHandler): - - """Define self.rfile and self.wfile for datagram sockets.""" - - def setup(self): - from io import BytesIO - self.packet, self.socket = self.request - self.rfile = BytesIO(self.packet) - self.wfile = BytesIO() - - def finish(self): - self.socket.sendto(self.wfile.getvalue(), self.client_address) diff --git a/Python314_4_x86_Template/Lib/sqlite3/__init__.py b/Python314_4_x86_Template/Lib/sqlite3/__init__.py deleted file mode 100644 index ed727fae6..000000000 --- a/Python314_4_x86_Template/Lib/sqlite3/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ -# pysqlite2/__init__.py: the pysqlite2 package. -# -# Copyright (C) 2005 Gerhard Häring <gh@ghaering.de> -# -# This file is part of pysqlite. -# -# This software is provided 'as-is', without any express or implied -# warranty. In no event will the authors be held liable for any damages -# arising from the use of this software. -# -# Permission is granted to anyone to use this software for any purpose, -# including commercial applications, and to alter it and redistribute it -# freely, subject to the following restrictions: -# -# 1. The origin of this software must not be misrepresented; you must not -# claim that you wrote the original software. If you use this software -# in a product, an acknowledgment in the product documentation would be -# appreciated but is not required. -# 2. Altered source versions must be plainly marked as such, and must not be -# misrepresented as being the original software. -# 3. This notice may not be removed or altered from any source distribution. - -""" -The sqlite3 extension module provides a DB-API 2.0 (PEP 249) compliant -interface to the SQLite library, and requires SQLite 3.15.2 or newer. - -To use the module, start by creating a database Connection object: - - import sqlite3 - cx = sqlite3.connect("test.db") # test.db will be created or opened - -The special path name ":memory:" can be provided to connect to a transient -in-memory database: - - cx = sqlite3.connect(":memory:") # connect to a database in RAM - -Once a connection has been established, create a Cursor object and call -its execute() method to perform SQL queries: - - cu = cx.cursor() - - # create a table - cu.execute("create table lang(name, first_appeared)") - - # insert values into a table - cu.execute("insert into lang values (?, ?)", ("C", 1972)) - - # execute a query and iterate over the result - for row in cu.execute("select * from lang"): - print(row) - - cx.close() - -The sqlite3 module is written by Gerhard Häring <gh@ghaering.de>. -""" - -from sqlite3.dbapi2 import * diff --git a/Python314_4_x86_Template/Lib/sqlite3/__main__.py b/Python314_4_x86_Template/Lib/sqlite3/__main__.py deleted file mode 100644 index 4ccf292dd..000000000 --- a/Python314_4_x86_Template/Lib/sqlite3/__main__.py +++ /dev/null @@ -1,139 +0,0 @@ -"""A simple SQLite CLI for the sqlite3 module. - -Apart from using 'argparse' for the command-line interface, -this module implements the REPL as a thin wrapper around -the InteractiveConsole class from the 'code' stdlib module. -""" -import sqlite3 -import sys - -from argparse import ArgumentParser -from code import InteractiveConsole -from textwrap import dedent - - -def execute(c, sql, suppress_errors=True): - """Helper that wraps execution of SQL code. - - This is used both by the REPL and by direct execution from the CLI. - - 'c' may be a cursor or a connection. - 'sql' is the SQL string to execute. - """ - - try: - for row in c.execute(sql): - print(row) - except sqlite3.Error as e: - tp = type(e).__name__ - try: - print(f"{tp} ({e.sqlite_errorname}): {e}", file=sys.stderr) - except AttributeError: - print(f"{tp}: {e}", file=sys.stderr) - if not suppress_errors: - sys.exit(1) - - -class SqliteInteractiveConsole(InteractiveConsole): - """A simple SQLite REPL.""" - - def __init__(self, connection): - super().__init__() - self._con = connection - self._cur = connection.cursor() - - def runsource(self, source, filename="<input>", symbol="single"): - """Override runsource, the core of the InteractiveConsole REPL. - - Return True if more input is needed; buffering is done automatically. - Return False if input is a complete statement ready for execution. - """ - if not source or source.isspace(): - return False - if source[0] == ".": - match source[1:].strip(): - case "version": - print(f"{sqlite3.sqlite_version}") - case "help": - print("Enter SQL code and press enter.") - case "quit": - sys.exit(0) - case "": - pass - case _ as unknown: - self.write("Error: unknown command or invalid arguments:" - f' "{unknown}".\n') - else: - if not sqlite3.complete_statement(source): - return True - execute(self._cur, source) - return False - - -def main(*args): - parser = ArgumentParser( - description="Python sqlite3 CLI", - color=True, - ) - parser.add_argument( - "filename", type=str, default=":memory:", nargs="?", - help=( - "SQLite database to open (defaults to ':memory:'). " - "A new database is created if the file does not previously exist." - ), - ) - parser.add_argument( - "sql", type=str, nargs="?", - help=( - "An SQL query to execute. " - "Any returned rows are printed to stdout." - ), - ) - parser.add_argument( - "-v", "--version", action="version", - version=f"SQLite version {sqlite3.sqlite_version}", - help="Print underlying SQLite library version", - ) - args = parser.parse_args(*args) - - if args.filename == ":memory:": - db_name = "a transient in-memory database" - else: - db_name = repr(args.filename) - - # Prepare REPL banner and prompts. - if sys.platform == "win32" and "idlelib.run" not in sys.modules: - eofkey = "CTRL-Z" - else: - eofkey = "CTRL-D" - banner = dedent(f""" - sqlite3 shell, running on SQLite version {sqlite3.sqlite_version} - Connected to {db_name} - - Each command will be run using execute() on the cursor. - Type ".help" for more information; type ".quit" or {eofkey} to quit. - """).strip() - sys.ps1 = "sqlite> " - sys.ps2 = " ... " - - con = sqlite3.connect(args.filename, isolation_level=None) - try: - if args.sql: - # SQL statement provided on the command-line; execute it directly. - execute(con, args.sql, suppress_errors=False) - else: - # No SQL provided; start the REPL. - console = SqliteInteractiveConsole(con) - try: - import readline # noqa: F401 - except ImportError: - pass - console.interact(banner, exitmsg="") - finally: - con.close() - - sys.exit(0) - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/Python314_4_x86_Template/Lib/sqlite3/dbapi2.py b/Python314_4_x86_Template/Lib/sqlite3/dbapi2.py deleted file mode 100644 index 031576051..000000000 --- a/Python314_4_x86_Template/Lib/sqlite3/dbapi2.py +++ /dev/null @@ -1,96 +0,0 @@ -# pysqlite2/dbapi2.py: the DB-API 2.0 interface -# -# Copyright (C) 2004-2005 Gerhard Häring <gh@ghaering.de> -# -# This file is part of pysqlite. -# -# This software is provided 'as-is', without any express or implied -# warranty. In no event will the authors be held liable for any damages -# arising from the use of this software. -# -# Permission is granted to anyone to use this software for any purpose, -# including commercial applications, and to alter it and redistribute it -# freely, subject to the following restrictions: -# -# 1. The origin of this software must not be misrepresented; you must not -# claim that you wrote the original software. If you use this software -# in a product, an acknowledgment in the product documentation would be -# appreciated but is not required. -# 2. Altered source versions must be plainly marked as such, and must not be -# misrepresented as being the original software. -# 3. This notice may not be removed or altered from any source distribution. - -import datetime -import time -import collections.abc - -from _sqlite3 import * - -paramstyle = "qmark" - -apilevel = "2.0" - -Date = datetime.date - -Time = datetime.time - -Timestamp = datetime.datetime - -def DateFromTicks(ticks): - return Date(*time.localtime(ticks)[:3]) - -def TimeFromTicks(ticks): - return Time(*time.localtime(ticks)[3:6]) - -def TimestampFromTicks(ticks): - return Timestamp(*time.localtime(ticks)[:6]) - - -sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")]) - -Binary = memoryview -collections.abc.Sequence.register(Row) - -def register_adapters_and_converters(): - from warnings import warn - - msg = ("The default {what} is deprecated as of Python 3.12; " - "see the sqlite3 documentation for suggested replacement recipes") - - def adapt_date(val): - warn(msg.format(what="date adapter"), DeprecationWarning, stacklevel=2) - return val.isoformat() - - def adapt_datetime(val): - warn(msg.format(what="datetime adapter"), DeprecationWarning, stacklevel=2) - return val.isoformat(" ") - - def convert_date(val): - warn(msg.format(what="date converter"), DeprecationWarning, stacklevel=2) - return datetime.date(*map(int, val.split(b"-"))) - - def convert_timestamp(val): - warn(msg.format(what="timestamp converter"), DeprecationWarning, stacklevel=2) - datepart, timepart = val.split(b" ") - year, month, day = map(int, datepart.split(b"-")) - timepart_full = timepart.split(b".") - hours, minutes, seconds = map(int, timepart_full[0].split(b":")) - if len(timepart_full) == 2: - microseconds = int('{:0<6.6}'.format(timepart_full[1].decode())) - else: - microseconds = 0 - - val = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds) - return val - - - register_adapter(datetime.date, adapt_date) - register_adapter(datetime.datetime, adapt_datetime) - register_converter("date", convert_date) - register_converter("timestamp", convert_timestamp) - -register_adapters_and_converters() - -# Clean up namespace - -del(register_adapters_and_converters) diff --git a/Python314_4_x86_Template/Lib/sqlite3/dump.py b/Python314_4_x86_Template/Lib/sqlite3/dump.py deleted file mode 100644 index 57e6a3b4f..000000000 --- a/Python314_4_x86_Template/Lib/sqlite3/dump.py +++ /dev/null @@ -1,113 +0,0 @@ -# Mimic the sqlite3 console shell's .dump command -# Author: Paul Kippes <kippesp@gmail.com> - -# Every identifier in sql is quoted based on a comment in sqlite -# documentation "SQLite adds new keywords from time to time when it -# takes on new features. So to prevent your code from being broken by -# future enhancements, you should normally quote any identifier that -# is an English language word, even if you do not have to." - -def _quote_name(name): - return '"{0}"'.format(name.replace('"', '""')) - - -def _quote_value(value): - return "'{0}'".format(value.replace("'", "''")) - - -def _iterdump(connection, *, filter=None): - """ - Returns an iterator to the dump of the database in an SQL text format. - - Used to produce an SQL dump of the database. Useful to save an in-memory - database for later restoration. This function should not be called - directly but instead called from the Connection method, iterdump(). - """ - - writeable_schema = False - cu = connection.cursor() - cu.row_factory = None # Make sure we get predictable results. - # Disable foreign key constraints, if there is any foreign key violation. - violations = cu.execute("PRAGMA foreign_key_check").fetchall() - if violations: - yield('PRAGMA foreign_keys=OFF;') - yield('BEGIN TRANSACTION;') - - if filter: - # Return database objects which match the filter pattern. - filter_name_clause = 'AND "name" LIKE ?' - params = [filter] - else: - filter_name_clause = "" - params = [] - # sqlite_master table contains the SQL CREATE statements for the database. - q = f""" - SELECT "name", "type", "sql" - FROM "sqlite_master" - WHERE "sql" NOT NULL AND - "type" == 'table' - {filter_name_clause} - ORDER BY "name" - """ - schema_res = cu.execute(q, params) - sqlite_sequence = [] - for table_name, type, sql in schema_res.fetchall(): - if table_name == 'sqlite_sequence': - rows = cu.execute('SELECT * FROM "sqlite_sequence";') - sqlite_sequence = ['DELETE FROM "sqlite_sequence"'] - sqlite_sequence += [ - f'INSERT INTO "sqlite_sequence" VALUES({_quote_value(table_name)},{seq_value})' - for table_name, seq_value in rows.fetchall() - ] - continue - elif table_name == 'sqlite_stat1': - yield('ANALYZE "sqlite_master";') - elif table_name.startswith('sqlite_'): - continue - elif sql.startswith('CREATE VIRTUAL TABLE'): - if not writeable_schema: - writeable_schema = True - yield('PRAGMA writable_schema=ON;') - yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)" - "VALUES('table',{0},{0},0,{1});".format( - _quote_value(table_name), - _quote_value(sql), - )) - else: - yield('{0};'.format(sql)) - - # Build the insert statement for each row of the current table - table_name_ident = _quote_name(table_name) - res = cu.execute(f'PRAGMA table_info({table_name_ident})') - column_names = [str(table_info[1]) for table_info in res.fetchall()] - q = "SELECT 'INSERT INTO {0} VALUES('{1}')' FROM {0};".format( - table_name_ident, - "','".join( - "||quote({0})||".format(_quote_name(col)) for col in column_names - ) - ) - query_res = cu.execute(q) - for row in query_res: - yield("{0};".format(row[0])) - - # Now when the type is 'index', 'trigger', or 'view' - q = f""" - SELECT "name", "type", "sql" - FROM "sqlite_master" - WHERE "sql" NOT NULL AND - "type" IN ('index', 'trigger', 'view') - {filter_name_clause} - """ - schema_res = cu.execute(q, params) - for name, type, sql in schema_res.fetchall(): - yield('{0};'.format(sql)) - - if writeable_schema: - yield('PRAGMA writable_schema=OFF;') - - # gh-79009: Yield statements concerning the sqlite_sequence table at the - # end of the transaction. - for row in sqlite_sequence: - yield('{0};'.format(row)) - - yield('COMMIT;') diff --git a/Python314_4_x86_Template/Lib/sre_compile.py b/Python314_4_x86_Template/Lib/sre_compile.py deleted file mode 100644 index f9da61e64..000000000 --- a/Python314_4_x86_Template/Lib/sre_compile.py +++ /dev/null @@ -1,7 +0,0 @@ -import warnings -warnings.warn(f"module {__name__!r} is deprecated", - DeprecationWarning, - stacklevel=2) - -from re import _compiler as _ -globals().update({k: v for k, v in vars(_).items() if k[:2] != '__'}) diff --git a/Python314_4_x86_Template/Lib/sre_constants.py b/Python314_4_x86_Template/Lib/sre_constants.py deleted file mode 100644 index fa09d0442..000000000 --- a/Python314_4_x86_Template/Lib/sre_constants.py +++ /dev/null @@ -1,7 +0,0 @@ -import warnings -warnings.warn(f"module {__name__!r} is deprecated", - DeprecationWarning, - stacklevel=2) - -from re import _constants as _ -globals().update({k: v for k, v in vars(_).items() if k[:2] != '__'}) diff --git a/Python314_4_x86_Template/Lib/sre_parse.py b/Python314_4_x86_Template/Lib/sre_parse.py deleted file mode 100644 index 25a3f557d..000000000 --- a/Python314_4_x86_Template/Lib/sre_parse.py +++ /dev/null @@ -1,7 +0,0 @@ -import warnings -warnings.warn(f"module {__name__!r} is deprecated", - DeprecationWarning, - stacklevel=2) - -from re import _parser as _ -globals().update({k: v for k, v in vars(_).items() if k[:2] != '__'}) diff --git a/Python314_4_x86_Template/Lib/ssl.py b/Python314_4_x86_Template/Lib/ssl.py deleted file mode 100644 index 8889aff92..000000000 --- a/Python314_4_x86_Template/Lib/ssl.py +++ /dev/null @@ -1,1529 +0,0 @@ -# Wrapper module for _ssl, providing some additional facilities -# implemented in Python. Written by Bill Janssen. - -"""This module provides some more Pythonic support for SSL. - -Object types: - - SSLSocket -- subtype of socket.socket which does SSL over the socket - -Exceptions: - - SSLError -- exception raised for I/O errors - -Functions: - - cert_time_to_seconds -- convert time string used for certificate - notBefore and notAfter functions to integer - seconds past the Epoch (the time values - returned from time.time()) - - get_server_certificate (addr, ssl_version, ca_certs, timeout) -- Retrieve the - certificate from the server at the specified - address and return it as a PEM-encoded string - - -Integer constants: - -SSL_ERROR_ZERO_RETURN -SSL_ERROR_WANT_READ -SSL_ERROR_WANT_WRITE -SSL_ERROR_WANT_X509_LOOKUP -SSL_ERROR_SYSCALL -SSL_ERROR_SSL -SSL_ERROR_WANT_CONNECT - -SSL_ERROR_EOF -SSL_ERROR_INVALID_ERROR_CODE - -The following group define certificate requirements that one side is -allowing/requiring from the other side: - -CERT_NONE - no certificates from the other side are required (or will - be looked at if provided) -CERT_OPTIONAL - certificates are not required, but if provided will be - validated, and if validation fails, the connection will - also fail -CERT_REQUIRED - certificates are required, and will be validated, and - if validation fails, the connection will also fail - -The following constants identify various SSL protocol variants: - -PROTOCOL_SSLv2 -PROTOCOL_SSLv3 -PROTOCOL_SSLv23 -PROTOCOL_TLS -PROTOCOL_TLS_CLIENT -PROTOCOL_TLS_SERVER -PROTOCOL_TLSv1 -PROTOCOL_TLSv1_1 -PROTOCOL_TLSv1_2 - -The following constants identify various SSL alert message descriptions as per -http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6 - -ALERT_DESCRIPTION_CLOSE_NOTIFY -ALERT_DESCRIPTION_UNEXPECTED_MESSAGE -ALERT_DESCRIPTION_BAD_RECORD_MAC -ALERT_DESCRIPTION_RECORD_OVERFLOW -ALERT_DESCRIPTION_DECOMPRESSION_FAILURE -ALERT_DESCRIPTION_HANDSHAKE_FAILURE -ALERT_DESCRIPTION_BAD_CERTIFICATE -ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE -ALERT_DESCRIPTION_CERTIFICATE_REVOKED -ALERT_DESCRIPTION_CERTIFICATE_EXPIRED -ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN -ALERT_DESCRIPTION_ILLEGAL_PARAMETER -ALERT_DESCRIPTION_UNKNOWN_CA -ALERT_DESCRIPTION_ACCESS_DENIED -ALERT_DESCRIPTION_DECODE_ERROR -ALERT_DESCRIPTION_DECRYPT_ERROR -ALERT_DESCRIPTION_PROTOCOL_VERSION -ALERT_DESCRIPTION_INSUFFICIENT_SECURITY -ALERT_DESCRIPTION_INTERNAL_ERROR -ALERT_DESCRIPTION_USER_CANCELLED -ALERT_DESCRIPTION_NO_RENEGOTIATION -ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION -ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE -ALERT_DESCRIPTION_UNRECOGNIZED_NAME -ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE -ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE -ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY -""" - -import sys -import os -from collections import namedtuple -from enum import Enum as _Enum, IntEnum as _IntEnum, IntFlag as _IntFlag -from enum import _simple_enum - -import _ssl # if we can't import it, let the error propagate - -from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION -from _ssl import _SSLContext, MemoryBIO, SSLSession -from _ssl import ( - SSLError, SSLZeroReturnError, SSLWantReadError, SSLWantWriteError, - SSLSyscallError, SSLEOFError, SSLCertVerificationError - ) -from _ssl import txt2obj as _txt2obj, nid2obj as _nid2obj -from _ssl import RAND_status, RAND_add, RAND_bytes -try: - from _ssl import RAND_egd -except ImportError: - # RAND_egd is not supported on some platforms - pass - - -from _ssl import ( - HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_SSLv2, HAS_SSLv3, HAS_TLSv1, - HAS_TLSv1_1, HAS_TLSv1_2, HAS_TLSv1_3, HAS_PSK, HAS_PHA -) -from _ssl import _DEFAULT_CIPHERS, _OPENSSL_API_VERSION - -_IntEnum._convert_( - '_SSLMethod', __name__, - lambda name: name.startswith('PROTOCOL_') and name != 'PROTOCOL_SSLv23', - source=_ssl) - -_IntFlag._convert_( - 'Options', __name__, - lambda name: name.startswith('OP_'), - source=_ssl) - -_IntEnum._convert_( - 'AlertDescription', __name__, - lambda name: name.startswith('ALERT_DESCRIPTION_'), - source=_ssl) - -_IntEnum._convert_( - 'SSLErrorNumber', __name__, - lambda name: name.startswith('SSL_ERROR_'), - source=_ssl) - -_IntFlag._convert_( - 'VerifyFlags', __name__, - lambda name: name.startswith('VERIFY_'), - source=_ssl) - -_IntEnum._convert_( - 'VerifyMode', __name__, - lambda name: name.startswith('CERT_'), - source=_ssl) - -PROTOCOL_SSLv23 = _SSLMethod.PROTOCOL_SSLv23 = _SSLMethod.PROTOCOL_TLS -_PROTOCOL_NAMES = {value: name for name, value in _SSLMethod.__members__.items()} - -_SSLv2_IF_EXISTS = getattr(_SSLMethod, 'PROTOCOL_SSLv2', None) - - -@_simple_enum(_IntEnum) -class TLSVersion: - MINIMUM_SUPPORTED = _ssl.PROTO_MINIMUM_SUPPORTED - SSLv3 = _ssl.PROTO_SSLv3 - TLSv1 = _ssl.PROTO_TLSv1 - TLSv1_1 = _ssl.PROTO_TLSv1_1 - TLSv1_2 = _ssl.PROTO_TLSv1_2 - TLSv1_3 = _ssl.PROTO_TLSv1_3 - MAXIMUM_SUPPORTED = _ssl.PROTO_MAXIMUM_SUPPORTED - - -@_simple_enum(_IntEnum) -class _TLSContentType: - """Content types (record layer) - - See RFC 8446, section B.1 - """ - CHANGE_CIPHER_SPEC = 20 - ALERT = 21 - HANDSHAKE = 22 - APPLICATION_DATA = 23 - # pseudo content types - HEADER = 0x100 - INNER_CONTENT_TYPE = 0x101 - - -@_simple_enum(_IntEnum) -class _TLSAlertType: - """Alert types for TLSContentType.ALERT messages - - See RFC 8446, section B.2 - """ - CLOSE_NOTIFY = 0 - UNEXPECTED_MESSAGE = 10 - BAD_RECORD_MAC = 20 - DECRYPTION_FAILED = 21 - RECORD_OVERFLOW = 22 - DECOMPRESSION_FAILURE = 30 - HANDSHAKE_FAILURE = 40 - NO_CERTIFICATE = 41 - BAD_CERTIFICATE = 42 - UNSUPPORTED_CERTIFICATE = 43 - CERTIFICATE_REVOKED = 44 - CERTIFICATE_EXPIRED = 45 - CERTIFICATE_UNKNOWN = 46 - ILLEGAL_PARAMETER = 47 - UNKNOWN_CA = 48 - ACCESS_DENIED = 49 - DECODE_ERROR = 50 - DECRYPT_ERROR = 51 - EXPORT_RESTRICTION = 60 - PROTOCOL_VERSION = 70 - INSUFFICIENT_SECURITY = 71 - INTERNAL_ERROR = 80 - INAPPROPRIATE_FALLBACK = 86 - USER_CANCELED = 90 - NO_RENEGOTIATION = 100 - MISSING_EXTENSION = 109 - UNSUPPORTED_EXTENSION = 110 - CERTIFICATE_UNOBTAINABLE = 111 - UNRECOGNIZED_NAME = 112 - BAD_CERTIFICATE_STATUS_RESPONSE = 113 - BAD_CERTIFICATE_HASH_VALUE = 114 - UNKNOWN_PSK_IDENTITY = 115 - CERTIFICATE_REQUIRED = 116 - NO_APPLICATION_PROTOCOL = 120 - - -@_simple_enum(_IntEnum) -class _TLSMessageType: - """Message types (handshake protocol) - - See RFC 8446, section B.3 - """ - HELLO_REQUEST = 0 - CLIENT_HELLO = 1 - SERVER_HELLO = 2 - HELLO_VERIFY_REQUEST = 3 - NEWSESSION_TICKET = 4 - END_OF_EARLY_DATA = 5 - HELLO_RETRY_REQUEST = 6 - ENCRYPTED_EXTENSIONS = 8 - CERTIFICATE = 11 - SERVER_KEY_EXCHANGE = 12 - CERTIFICATE_REQUEST = 13 - SERVER_DONE = 14 - CERTIFICATE_VERIFY = 15 - CLIENT_KEY_EXCHANGE = 16 - FINISHED = 20 - CERTIFICATE_URL = 21 - CERTIFICATE_STATUS = 22 - SUPPLEMENTAL_DATA = 23 - KEY_UPDATE = 24 - NEXT_PROTO = 67 - MESSAGE_HASH = 254 - CHANGE_CIPHER_SPEC = 0x0101 - - -if sys.platform == "win32": - from _ssl import enum_certificates, enum_crls - -from socket import socket, SOCK_STREAM, create_connection -from socket import SOL_SOCKET, SO_TYPE, _GLOBAL_DEFAULT_TIMEOUT -import socket as _socket -import base64 # for DER-to-PEM translation -import errno -import warnings - - -socket_error = OSError # keep that public name in module namespace - -CHANNEL_BINDING_TYPES = ['tls-unique'] - -HAS_NEVER_CHECK_COMMON_NAME = hasattr(_ssl, 'HOSTFLAG_NEVER_CHECK_SUBJECT') - - -_RESTRICTED_SERVER_CIPHERS = _DEFAULT_CIPHERS - -CertificateError = SSLCertVerificationError - - -def _dnsname_match(dn, hostname): - """Matching according to RFC 6125, section 6.4.3 - - - Hostnames are compared lower-case. - - For IDNA, both dn and hostname must be encoded as IDN A-label (ACE). - - Partial wildcards like 'www*.example.org', multiple wildcards, sole - wildcard or wildcards in labels other then the left-most label are not - supported and a CertificateError is raised. - - A wildcard must match at least one character. - """ - if not dn: - return False - - wildcards = dn.count('*') - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - if wildcards > 1: - raise CertificateError( - "too many wildcards in certificate DNS name: {!r}.".format(dn)) - - dn_leftmost, sep, dn_remainder = dn.partition('.') - - if '*' in dn_remainder: - # Only match wildcard in leftmost segment. - raise CertificateError( - "wildcard can only be present in the leftmost label: " - "{!r}.".format(dn)) - - if not sep: - # no right side - raise CertificateError( - "sole wildcard without additional labels are not support: " - "{!r}.".format(dn)) - - if dn_leftmost != '*': - # no partial wildcard matching - raise CertificateError( - "partial wildcards in leftmost label are not supported: " - "{!r}.".format(dn)) - - hostname_leftmost, sep, hostname_remainder = hostname.partition('.') - if not hostname_leftmost or not sep: - # wildcard must match at least one char - return False - return dn_remainder.lower() == hostname_remainder.lower() - - -def _inet_paton(ipname): - """Try to convert an IP address to packed binary form - - Supports IPv4 addresses on all platforms and IPv6 on platforms with IPv6 - support. - """ - # inet_aton() also accepts strings like '1', '127.1', some also trailing - # data like '127.0.0.1 whatever'. - try: - addr = _socket.inet_aton(ipname) - except OSError: - # not an IPv4 address - pass - else: - if _socket.inet_ntoa(addr) == ipname: - # only accept injective ipnames - return addr - else: - # refuse for short IPv4 notation and additional trailing data - raise ValueError( - "{!r} is not a quad-dotted IPv4 address.".format(ipname) - ) - - try: - return _socket.inet_pton(_socket.AF_INET6, ipname) - except OSError: - raise ValueError("{!r} is neither an IPv4 nor an IP6 " - "address.".format(ipname)) - except AttributeError: - # AF_INET6 not available - pass - - raise ValueError("{!r} is not an IPv4 address.".format(ipname)) - - -def _ipaddress_match(cert_ipaddress, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address, - # commonly with IPv6 addresses. Strip off trailing \n. - ip = _inet_paton(cert_ipaddress.rstrip()) - return ip == host_ip - - -DefaultVerifyPaths = namedtuple("DefaultVerifyPaths", - "cafile capath openssl_cafile_env openssl_cafile openssl_capath_env " - "openssl_capath") - -def get_default_verify_paths(): - """Return paths to default cafile and capath. - """ - parts = _ssl.get_default_verify_paths() - - # environment vars shadow paths - cafile = os.environ.get(parts[0], parts[1]) - capath = os.environ.get(parts[2], parts[3]) - - return DefaultVerifyPaths(cafile if os.path.isfile(cafile) else None, - capath if os.path.isdir(capath) else None, - *parts) - - -class _ASN1Object(namedtuple("_ASN1Object", "nid shortname longname oid")): - """ASN.1 object identifier lookup - """ - __slots__ = () - - def __new__(cls, oid): - return super().__new__(cls, *_txt2obj(oid, name=False)) - - @classmethod - def fromnid(cls, nid): - """Create _ASN1Object from OpenSSL numeric ID - """ - return super().__new__(cls, *_nid2obj(nid)) - - @classmethod - def fromname(cls, name): - """Create _ASN1Object from short name, long name or OID - """ - return super().__new__(cls, *_txt2obj(name, name=True)) - - -class Purpose(_ASN1Object, _Enum): - """SSLContext purpose flags with X509v3 Extended Key Usage objects - """ - SERVER_AUTH = '1.3.6.1.5.5.7.3.1' - CLIENT_AUTH = '1.3.6.1.5.5.7.3.2' - - -class SSLContext(_SSLContext): - """An SSLContext holds various SSL-related configuration options and - data, such as certificates and possibly a private key.""" - _windows_cert_stores = ("CA", "ROOT") - - sslsocket_class = None # SSLSocket is assigned later. - sslobject_class = None # SSLObject is assigned later. - - def __new__(cls, protocol=None, *args, **kwargs): - if protocol is None: - warnings.warn( - "ssl.SSLContext() without protocol argument is deprecated.", - category=DeprecationWarning, - stacklevel=2 - ) - protocol = PROTOCOL_TLS - self = _SSLContext.__new__(cls, protocol) - return self - - def _encode_hostname(self, hostname): - if hostname is None: - return None - elif isinstance(hostname, str): - return hostname.encode('idna').decode('ascii') - else: - return hostname.decode('ascii') - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, - suppress_ragged_eofs=True, - server_hostname=None, session=None): - # SSLSocket class handles server_hostname encoding before it calls - # ctx._wrap_socket() - return self.sslsocket_class._create( - sock=sock, - server_side=server_side, - do_handshake_on_connect=do_handshake_on_connect, - suppress_ragged_eofs=suppress_ragged_eofs, - server_hostname=server_hostname, - context=self, - session=session - ) - - def wrap_bio(self, incoming, outgoing, server_side=False, - server_hostname=None, session=None): - # Need to encode server_hostname here because _wrap_bio() can only - # handle ASCII str. - return self.sslobject_class._create( - incoming, outgoing, server_side=server_side, - server_hostname=self._encode_hostname(server_hostname), - session=session, context=self, - ) - - def set_npn_protocols(self, npn_protocols): - warnings.warn( - "ssl NPN is deprecated, use ALPN instead", - DeprecationWarning, - stacklevel=2 - ) - protos = bytearray() - for protocol in npn_protocols: - b = bytes(protocol, 'ascii') - if len(b) == 0 or len(b) > 255: - raise SSLError('NPN protocols must be 1 to 255 in length') - protos.append(len(b)) - protos.extend(b) - - self._set_npn_protocols(protos) - - def set_servername_callback(self, server_name_callback): - if server_name_callback is None: - self.sni_callback = None - else: - if not callable(server_name_callback): - raise TypeError("not a callable object") - - def shim_cb(sslobj, servername, sslctx): - servername = self._encode_hostname(servername) - return server_name_callback(sslobj, servername, sslctx) - - self.sni_callback = shim_cb - - def set_alpn_protocols(self, alpn_protocols): - protos = bytearray() - for protocol in alpn_protocols: - b = bytes(protocol, 'ascii') - if len(b) == 0 or len(b) > 255: - raise SSLError('ALPN protocols must be 1 to 255 in length') - protos.append(len(b)) - protos.extend(b) - - self._set_alpn_protocols(protos) - - def _load_windows_store_certs(self, storename, purpose): - try: - for cert, encoding, trust in enum_certificates(storename): - # CA certs are never PKCS#7 encoded - if encoding == "x509_asn": - if trust is True or purpose.oid in trust: - try: - self.load_verify_locations(cadata=cert) - except SSLError as exc: - warnings.warn(f"Bad certificate in Windows certificate store: {exc!s}") - except PermissionError: - warnings.warn("unable to enumerate Windows certificate store") - - def load_default_certs(self, purpose=Purpose.SERVER_AUTH): - if not isinstance(purpose, _ASN1Object): - raise TypeError(purpose) - if sys.platform == "win32": - for storename in self._windows_cert_stores: - self._load_windows_store_certs(storename, purpose) - self.set_default_verify_paths() - - if hasattr(_SSLContext, 'minimum_version'): - @property - def minimum_version(self): - return TLSVersion(super().minimum_version) - - @minimum_version.setter - def minimum_version(self, value): - if value == TLSVersion.SSLv3: - self.options &= ~Options.OP_NO_SSLv3 - super(SSLContext, SSLContext).minimum_version.__set__(self, value) - - @property - def maximum_version(self): - return TLSVersion(super().maximum_version) - - @maximum_version.setter - def maximum_version(self, value): - super(SSLContext, SSLContext).maximum_version.__set__(self, value) - - @property - def options(self): - return Options(super().options) - - @options.setter - def options(self, value): - super(SSLContext, SSLContext).options.__set__(self, value) - - if hasattr(_ssl, 'HOSTFLAG_NEVER_CHECK_SUBJECT'): - @property - def hostname_checks_common_name(self): - ncs = self._host_flags & _ssl.HOSTFLAG_NEVER_CHECK_SUBJECT - return ncs != _ssl.HOSTFLAG_NEVER_CHECK_SUBJECT - - @hostname_checks_common_name.setter - def hostname_checks_common_name(self, value): - if value: - self._host_flags &= ~_ssl.HOSTFLAG_NEVER_CHECK_SUBJECT - else: - self._host_flags |= _ssl.HOSTFLAG_NEVER_CHECK_SUBJECT - else: - @property - def hostname_checks_common_name(self): - return True - - @property - def _msg_callback(self): - """TLS message callback - - The message callback provides a debugging hook to analyze TLS - connections. The callback is called for any TLS protocol message - (header, handshake, alert, and more), but not for application data. - Due to technical limitations, the callback can't be used to filter - traffic or to abort a connection. Any exception raised in the - callback is delayed until the handshake, read, or write operation - has been performed. - - def msg_cb(conn, direction, version, content_type, msg_type, data): - pass - - conn - :class:`SSLSocket` or :class:`SSLObject` instance - direction - ``read`` or ``write`` - version - :class:`TLSVersion` enum member or int for unknown version. For a - frame header, it's the header version. - content_type - :class:`_TLSContentType` enum member or int for unsupported - content type. - msg_type - Either a :class:`_TLSContentType` enum number for a header - message, a :class:`_TLSAlertType` enum member for an alert - message, a :class:`_TLSMessageType` enum member for other - messages, or int for unsupported message types. - data - Raw, decrypted message content as bytes - """ - inner = super()._msg_callback - if inner is not None: - return inner.user_function - else: - return None - - @_msg_callback.setter - def _msg_callback(self, callback): - if callback is None: - super(SSLContext, SSLContext)._msg_callback.__set__(self, None) - return - - if not hasattr(callback, '__call__'): - raise TypeError(f"{callback} is not callable.") - - def inner(conn, direction, version, content_type, msg_type, data): - try: - version = TLSVersion(version) - except ValueError: - pass - - try: - content_type = _TLSContentType(content_type) - except ValueError: - pass - - if content_type == _TLSContentType.HEADER: - msg_enum = _TLSContentType - elif content_type == _TLSContentType.ALERT: - msg_enum = _TLSAlertType - else: - msg_enum = _TLSMessageType - try: - msg_type = msg_enum(msg_type) - except ValueError: - pass - - return callback(conn, direction, version, - content_type, msg_type, data) - - inner.user_function = callback - - super(SSLContext, SSLContext)._msg_callback.__set__(self, inner) - - @property - def protocol(self): - return _SSLMethod(super().protocol) - - @property - def verify_flags(self): - return VerifyFlags(super().verify_flags) - - @verify_flags.setter - def verify_flags(self, value): - super(SSLContext, SSLContext).verify_flags.__set__(self, value) - - @property - def verify_mode(self): - value = super().verify_mode - try: - return VerifyMode(value) - except ValueError: - return value - - @verify_mode.setter - def verify_mode(self, value): - super(SSLContext, SSLContext).verify_mode.__set__(self, value) - - -def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None, - capath=None, cadata=None): - """Create a SSLContext object with default settings. - - NOTE: The protocol and settings may change anytime without prior - deprecation. The values represent a fair balance between maximum - compatibility and security. - """ - if not isinstance(purpose, _ASN1Object): - raise TypeError(purpose) - - # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, - # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE - # by default. - if purpose == Purpose.SERVER_AUTH: - # verify certs and host name in client mode - context = SSLContext(PROTOCOL_TLS_CLIENT) - context.verify_mode = CERT_REQUIRED - context.check_hostname = True - elif purpose == Purpose.CLIENT_AUTH: - context = SSLContext(PROTOCOL_TLS_SERVER) - else: - raise ValueError(purpose) - - # `VERIFY_X509_PARTIAL_CHAIN` makes OpenSSL's chain building behave more - # like RFC 3280 and 5280, which specify that chain building stops with the - # first trust anchor, even if that anchor is not self-signed. - # - # `VERIFY_X509_STRICT` makes OpenSSL more conservative about the - # certificates it accepts, including "disabling workarounds for - # some broken certificates." - context.verify_flags |= (_ssl.VERIFY_X509_PARTIAL_CHAIN | - _ssl.VERIFY_X509_STRICT) - - if cafile or capath or cadata: - context.load_verify_locations(cafile, capath, cadata) - elif context.verify_mode != CERT_NONE: - # no explicit cafile, capath or cadata but the verify mode is - # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system - # root CA certificates for the given purpose. This may fail silently. - context.load_default_certs(purpose) - # OpenSSL 1.1.1 keylog file - if hasattr(context, 'keylog_filename'): - keylogfile = os.environ.get('SSLKEYLOGFILE') - if keylogfile and not sys.flags.ignore_environment: - context.keylog_filename = keylogfile - return context - -def _create_unverified_context(protocol=None, *, cert_reqs=CERT_NONE, - check_hostname=False, purpose=Purpose.SERVER_AUTH, - certfile=None, keyfile=None, - cafile=None, capath=None, cadata=None): - """Create a SSLContext object for Python stdlib modules - - All Python stdlib modules shall use this function to create SSLContext - objects in order to keep common settings in one place. The configuration - is less restrict than create_default_context()'s to increase backward - compatibility. - """ - if not isinstance(purpose, _ASN1Object): - raise TypeError(purpose) - - # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION, - # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE - # by default. - if purpose == Purpose.SERVER_AUTH: - # verify certs and host name in client mode - if protocol is None: - protocol = PROTOCOL_TLS_CLIENT - elif purpose == Purpose.CLIENT_AUTH: - if protocol is None: - protocol = PROTOCOL_TLS_SERVER - else: - raise ValueError(purpose) - - context = SSLContext(protocol) - context.check_hostname = check_hostname - if cert_reqs is not None: - context.verify_mode = cert_reqs - if check_hostname: - context.check_hostname = True - - if keyfile and not certfile: - raise ValueError("certfile must be specified") - if certfile or keyfile: - context.load_cert_chain(certfile, keyfile) - - # load CA root certs - if cafile or capath or cadata: - context.load_verify_locations(cafile, capath, cadata) - elif context.verify_mode != CERT_NONE: - # no explicit cafile, capath or cadata but the verify mode is - # CERT_OPTIONAL or CERT_REQUIRED. Let's try to load default system - # root CA certificates for the given purpose. This may fail silently. - context.load_default_certs(purpose) - # OpenSSL 1.1.1 keylog file - if hasattr(context, 'keylog_filename'): - keylogfile = os.environ.get('SSLKEYLOGFILE') - if keylogfile and not sys.flags.ignore_environment: - context.keylog_filename = keylogfile - return context - -# Used by http.client if no context is explicitly passed. -_create_default_https_context = create_default_context - - -# Backwards compatibility alias, even though it's not a public name. -_create_stdlib_context = _create_unverified_context - - -class SSLObject: - """This class implements an interface on top of a low-level SSL object as - implemented by OpenSSL. This object captures the state of an SSL connection - but does not provide any network IO itself. IO needs to be performed - through separate "BIO" objects which are OpenSSL's IO abstraction layer. - - This class does not have a public constructor. Instances are returned by - ``SSLContext.wrap_bio``. This class is typically used by framework authors - that want to implement asynchronous IO for SSL through memory buffers. - - When compared to ``SSLSocket``, this object lacks the following features: - - * Any form of network IO, including methods such as ``recv`` and ``send``. - * The ``do_handshake_on_connect`` and ``suppress_ragged_eofs`` machinery. - """ - def __init__(self, *args, **kwargs): - raise TypeError( - f"{self.__class__.__name__} does not have a public " - f"constructor. Instances are returned by SSLContext.wrap_bio()." - ) - - @classmethod - def _create(cls, incoming, outgoing, server_side=False, - server_hostname=None, session=None, context=None): - self = cls.__new__(cls) - sslobj = context._wrap_bio( - incoming, outgoing, server_side=server_side, - server_hostname=server_hostname, - owner=self, session=session - ) - self._sslobj = sslobj - return self - - @property - def context(self): - """The SSLContext that is currently in use.""" - return self._sslobj.context - - @context.setter - def context(self, ctx): - self._sslobj.context = ctx - - @property - def session(self): - """The SSLSession for client socket.""" - return self._sslobj.session - - @session.setter - def session(self, session): - self._sslobj.session = session - - @property - def session_reused(self): - """Was the client session reused during handshake""" - return self._sslobj.session_reused - - @property - def server_side(self): - """Whether this is a server-side socket.""" - return self._sslobj.server_side - - @property - def server_hostname(self): - """The currently set server hostname (for SNI), or ``None`` if no - server hostname is set.""" - return self._sslobj.server_hostname - - def read(self, len=1024, buffer=None): - """Read up to 'len' bytes from the SSL object and return them. - - If 'buffer' is provided, read into this buffer and return the number of - bytes read. - """ - if buffer is not None: - v = self._sslobj.read(len, buffer) - else: - v = self._sslobj.read(len) - return v - - def write(self, data): - """Write 'data' to the SSL object and return the number of bytes - written. - - The 'data' argument must support the buffer interface. - """ - return self._sslobj.write(data) - - def getpeercert(self, binary_form=False): - """Returns a formatted version of the data in the certificate provided - by the other end of the SSL channel. - - Return None if no certificate was provided, {} if a certificate was - provided, but not validated. - """ - return self._sslobj.getpeercert(binary_form) - - def get_verified_chain(self): - """Returns verified certificate chain provided by the other - end of the SSL channel as a list of DER-encoded bytes. - - If certificate verification was disabled method acts the same as - ``SSLSocket.get_unverified_chain``. - """ - chain = self._sslobj.get_verified_chain() - - if chain is None: - return [] - - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] - - def get_unverified_chain(self): - """Returns raw certificate chain provided by the other - end of the SSL channel as a list of DER-encoded bytes. - """ - chain = self._sslobj.get_unverified_chain() - - if chain is None: - return [] - - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] - - def selected_npn_protocol(self): - """Return the currently selected NPN protocol as a string, or ``None`` - if a next protocol was not negotiated or if NPN is not supported by one - of the peers.""" - warnings.warn( - "ssl NPN is deprecated, use ALPN instead", - DeprecationWarning, - stacklevel=2 - ) - - def selected_alpn_protocol(self): - """Return the currently selected ALPN protocol as a string, or ``None`` - if a next protocol was not negotiated or if ALPN is not supported by one - of the peers.""" - return self._sslobj.selected_alpn_protocol() - - def cipher(self): - """Return the currently selected cipher as a 3-tuple ``(name, - ssl_version, secret_bits)``.""" - return self._sslobj.cipher() - - def shared_ciphers(self): - """Return a list of ciphers shared by the client during the handshake or - None if this is not a valid server connection. - """ - return self._sslobj.shared_ciphers() - - def compression(self): - """Return the current compression algorithm in use, or ``None`` if - compression was not negotiated or not supported by one of the peers.""" - return self._sslobj.compression() - - def pending(self): - """Return the number of bytes that can be read immediately.""" - return self._sslobj.pending() - - def do_handshake(self): - """Start the SSL/TLS handshake.""" - self._sslobj.do_handshake() - - def unwrap(self): - """Start the SSL shutdown handshake.""" - return self._sslobj.shutdown() - - def get_channel_binding(self, cb_type="tls-unique"): - """Get channel binding data for current connection. Raise ValueError - if the requested `cb_type` is not supported. Return bytes of the data - or None if the data is not available (e.g. before the handshake).""" - return self._sslobj.get_channel_binding(cb_type) - - def version(self): - """Return a string identifying the protocol version used by the - current SSL channel. """ - return self._sslobj.version() - - def verify_client_post_handshake(self): - return self._sslobj.verify_client_post_handshake() - - -def _sslcopydoc(func): - """Copy docstring from SSLObject to SSLSocket""" - func.__doc__ = getattr(SSLObject, func.__name__).__doc__ - return func - - -class SSLSocket(socket): - """This class implements a subtype of socket.socket that wraps - the underlying OS socket in an SSL context when necessary, and - provides read and write methods over that channel. """ - - def __init__(self, *args, **kwargs): - raise TypeError( - f"{self.__class__.__name__} does not have a public " - f"constructor. Instances are returned by " - f"SSLContext.wrap_socket()." - ) - - @classmethod - def _create(cls, sock, server_side=False, do_handshake_on_connect=True, - suppress_ragged_eofs=True, server_hostname=None, - context=None, session=None): - if sock.getsockopt(SOL_SOCKET, SO_TYPE) != SOCK_STREAM: - raise NotImplementedError("only stream sockets are supported") - if server_side: - if server_hostname: - raise ValueError("server_hostname can only be specified " - "in client mode") - if session is not None: - raise ValueError("session can only be specified in " - "client mode") - if context.check_hostname and not server_hostname: - raise ValueError("check_hostname requires server_hostname") - - sock_timeout = sock.gettimeout() - kwargs = dict( - family=sock.family, type=sock.type, proto=sock.proto, - fileno=sock.fileno() - ) - self = cls.__new__(cls, **kwargs) - super(SSLSocket, self).__init__(**kwargs) - sock.detach() - # Now SSLSocket is responsible for closing the file descriptor. - try: - self._context = context - self._session = session - self._closed = False - self._sslobj = None - self.server_side = server_side - self.server_hostname = context._encode_hostname(server_hostname) - self.do_handshake_on_connect = do_handshake_on_connect - self.suppress_ragged_eofs = suppress_ragged_eofs - - # See if we are connected - try: - self.getpeername() - except OSError as e: - if e.errno != errno.ENOTCONN: - raise - connected = False - blocking = self.getblocking() - self.setblocking(False) - try: - # We are not connected so this is not supposed to block, but - # testing revealed otherwise on macOS and Windows so we do - # the non-blocking dance regardless. Our raise when any data - # is found means consuming the data is harmless. - notconn_pre_handshake_data = self.recv(1) - except OSError as e: - # EINVAL occurs for recv(1) on non-connected on unix sockets. - if e.errno not in (errno.ENOTCONN, errno.EINVAL): - raise - notconn_pre_handshake_data = b'' - self.setblocking(blocking) - if notconn_pre_handshake_data: - # This prevents pending data sent to the socket before it was - # closed from escaping to the caller who could otherwise - # presume it came through a successful TLS connection. - reason = "Closed before TLS handshake with data in recv buffer." - notconn_pre_handshake_data_error = SSLError(e.errno, reason) - # Add the SSLError attributes that _ssl.c always adds. - notconn_pre_handshake_data_error.reason = reason - notconn_pre_handshake_data_error.library = None - try: - raise notconn_pre_handshake_data_error - finally: - # Explicitly break the reference cycle. - notconn_pre_handshake_data_error = None - else: - connected = True - - self.settimeout(sock_timeout) # Must come after setblocking() calls. - self._connected = connected - if connected: - # create the SSL object - self._sslobj = self._context._wrap_socket( - self, server_side, self.server_hostname, - owner=self, session=self._session, - ) - if do_handshake_on_connect: - timeout = self.gettimeout() - if timeout == 0.0: - # non-blocking - raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") - self.do_handshake() - except: - try: - self.close() - except OSError: - pass - raise - return self - - @property - @_sslcopydoc - def context(self): - return self._context - - @context.setter - def context(self, ctx): - self._context = ctx - self._sslobj.context = ctx - - @property - @_sslcopydoc - def session(self): - if self._sslobj is not None: - return self._sslobj.session - - @session.setter - def session(self, session): - self._session = session - if self._sslobj is not None: - self._sslobj.session = session - - @property - @_sslcopydoc - def session_reused(self): - if self._sslobj is not None: - return self._sslobj.session_reused - - def dup(self): - raise NotImplementedError("Can't dup() %s instances" % - self.__class__.__name__) - - def _checkClosed(self, msg=None): - # raise an exception here if you wish to check for spurious closes - pass - - def _check_connected(self): - if not self._connected: - # getpeername() will raise ENOTCONN if the socket is really - # not connected; note that we can be connected even without - # _connected being set, e.g. if connect() first returned - # EAGAIN. - self.getpeername() - - def read(self, len=1024, buffer=None): - """Read up to LEN bytes and return them. - Return zero-length string on EOF.""" - - self._checkClosed() - if self._sslobj is None: - raise ValueError("Read on closed or unwrapped SSL socket.") - try: - if buffer is not None: - return self._sslobj.read(len, buffer) - else: - return self._sslobj.read(len) - except SSLError as x: - if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs: - if buffer is not None: - return 0 - else: - return b'' - else: - raise - - def write(self, data): - """Write DATA to the underlying SSL channel. Returns - number of bytes of DATA actually transmitted.""" - - self._checkClosed() - if self._sslobj is None: - raise ValueError("Write on closed or unwrapped SSL socket.") - return self._sslobj.write(data) - - @_sslcopydoc - def getpeercert(self, binary_form=False): - self._checkClosed() - self._check_connected() - return self._sslobj.getpeercert(binary_form) - - @_sslcopydoc - def get_verified_chain(self): - chain = self._sslobj.get_verified_chain() - - if chain is None: - return [] - - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] - - @_sslcopydoc - def get_unverified_chain(self): - chain = self._sslobj.get_unverified_chain() - - if chain is None: - return [] - - return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] - - @_sslcopydoc - def selected_npn_protocol(self): - self._checkClosed() - warnings.warn( - "ssl NPN is deprecated, use ALPN instead", - DeprecationWarning, - stacklevel=2 - ) - return None - - @_sslcopydoc - def selected_alpn_protocol(self): - self._checkClosed() - if self._sslobj is None or not _ssl.HAS_ALPN: - return None - else: - return self._sslobj.selected_alpn_protocol() - - @_sslcopydoc - def cipher(self): - self._checkClosed() - if self._sslobj is None: - return None - else: - return self._sslobj.cipher() - - @_sslcopydoc - def shared_ciphers(self): - self._checkClosed() - if self._sslobj is None: - return None - else: - return self._sslobj.shared_ciphers() - - @_sslcopydoc - def compression(self): - self._checkClosed() - if self._sslobj is None: - return None - else: - return self._sslobj.compression() - - def send(self, data, flags=0): - self._checkClosed() - if self._sslobj is not None: - if flags != 0: - raise ValueError( - "non-zero flags not allowed in calls to send() on %s" % - self.__class__) - return self._sslobj.write(data) - else: - return super().send(data, flags) - - def sendto(self, data, flags_or_addr, addr=None): - self._checkClosed() - if self._sslobj is not None: - raise ValueError("sendto not allowed on instances of %s" % - self.__class__) - elif addr is None: - return super().sendto(data, flags_or_addr) - else: - return super().sendto(data, flags_or_addr, addr) - - def sendmsg(self, *args, **kwargs): - # Ensure programs don't send data unencrypted if they try to - # use this method. - raise NotImplementedError("sendmsg not allowed on instances of %s" % - self.__class__) - - def sendall(self, data, flags=0): - self._checkClosed() - if self._sslobj is not None: - if flags != 0: - raise ValueError( - "non-zero flags not allowed in calls to sendall() on %s" % - self.__class__) - count = 0 - with memoryview(data) as view, view.cast("B") as byte_view: - amount = len(byte_view) - while count < amount: - v = self.send(byte_view[count:]) - count += v - else: - return super().sendall(data, flags) - - def sendfile(self, file, offset=0, count=None): - """Send a file, possibly by using os.sendfile() if this is a - clear-text socket. Return the total number of bytes sent. - """ - if self._sslobj is not None: - return self._sendfile_use_send(file, offset, count) - else: - # os.sendfile() works with plain sockets only - return super().sendfile(file, offset, count) - - def recv(self, buflen=1024, flags=0): - self._checkClosed() - if self._sslobj is not None: - if flags != 0: - raise ValueError( - "non-zero flags not allowed in calls to recv() on %s" % - self.__class__) - return self.read(buflen) - else: - return super().recv(buflen, flags) - - def recv_into(self, buffer, nbytes=None, flags=0): - self._checkClosed() - if nbytes is None: - if buffer is not None: - with memoryview(buffer) as view: - nbytes = view.nbytes - if not nbytes: - nbytes = 1024 - else: - nbytes = 1024 - if self._sslobj is not None: - if flags != 0: - raise ValueError( - "non-zero flags not allowed in calls to recv_into() on %s" % - self.__class__) - return self.read(nbytes, buffer) - else: - return super().recv_into(buffer, nbytes, flags) - - def recvfrom(self, buflen=1024, flags=0): - self._checkClosed() - if self._sslobj is not None: - raise ValueError("recvfrom not allowed on instances of %s" % - self.__class__) - else: - return super().recvfrom(buflen, flags) - - def recvfrom_into(self, buffer, nbytes=None, flags=0): - self._checkClosed() - if self._sslobj is not None: - raise ValueError("recvfrom_into not allowed on instances of %s" % - self.__class__) - else: - return super().recvfrom_into(buffer, nbytes, flags) - - def recvmsg(self, *args, **kwargs): - raise NotImplementedError("recvmsg not allowed on instances of %s" % - self.__class__) - - def recvmsg_into(self, *args, **kwargs): - raise NotImplementedError("recvmsg_into not allowed on instances of " - "%s" % self.__class__) - - @_sslcopydoc - def pending(self): - self._checkClosed() - if self._sslobj is not None: - return self._sslobj.pending() - else: - return 0 - - def shutdown(self, how): - self._checkClosed() - self._sslobj = None - super().shutdown(how) - - @_sslcopydoc - def unwrap(self): - if self._sslobj: - s = self._sslobj.shutdown() - self._sslobj = None - return s - else: - raise ValueError("No SSL wrapper around " + str(self)) - - @_sslcopydoc - def verify_client_post_handshake(self): - if self._sslobj: - return self._sslobj.verify_client_post_handshake() - else: - raise ValueError("No SSL wrapper around " + str(self)) - - def _real_close(self): - self._sslobj = None - super()._real_close() - - @_sslcopydoc - def do_handshake(self, block=False): - self._check_connected() - timeout = self.gettimeout() - try: - if timeout == 0.0 and block: - self.settimeout(None) - self._sslobj.do_handshake() - finally: - self.settimeout(timeout) - - def _real_connect(self, addr, connect_ex): - if self.server_side: - raise ValueError("can't connect in server-side mode") - # Here we assume that the socket is client-side, and not - # connected at the time of the call. We connect it, then wrap it. - if self._connected or self._sslobj is not None: - raise ValueError("attempt to connect already-connected SSLSocket!") - self._sslobj = self.context._wrap_socket( - self, False, self.server_hostname, - owner=self, session=self._session - ) - try: - if connect_ex: - rc = super().connect_ex(addr) - else: - rc = None - super().connect(addr) - if not rc: - self._connected = True - if self.do_handshake_on_connect: - self.do_handshake() - return rc - except (OSError, ValueError): - self._sslobj = None - raise - - def connect(self, addr): - """Connects to remote ADDR, and then wraps the connection in - an SSL channel.""" - self._real_connect(addr, False) - - def connect_ex(self, addr): - """Connects to remote ADDR, and then wraps the connection in - an SSL channel.""" - return self._real_connect(addr, True) - - def accept(self): - """Accepts a new connection from a remote client, and returns - a tuple containing that new connection wrapped with a server-side - SSL channel, and the address of the remote client.""" - - newsock, addr = super().accept() - newsock = self.context.wrap_socket(newsock, - do_handshake_on_connect=self.do_handshake_on_connect, - suppress_ragged_eofs=self.suppress_ragged_eofs, - server_side=True) - return newsock, addr - - @_sslcopydoc - def get_channel_binding(self, cb_type="tls-unique"): - if self._sslobj is not None: - return self._sslobj.get_channel_binding(cb_type) - else: - if cb_type not in CHANNEL_BINDING_TYPES: - raise ValueError( - "{0} channel binding type not implemented".format(cb_type) - ) - return None - - @_sslcopydoc - def version(self): - if self._sslobj is not None: - return self._sslobj.version() - else: - return None - - -# Python does not support forward declaration of types. -SSLContext.sslsocket_class = SSLSocket -SSLContext.sslobject_class = SSLObject - - -# some utility functions - -def cert_time_to_seconds(cert_time): - """Return the time in seconds since the Epoch, given the timestring - representing the "notBefore" or "notAfter" date from a certificate - in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C locale). - - "notBefore" or "notAfter" dates must use UTC (RFC 5280). - - Month is one of: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec - UTC should be specified as GMT (see ASN1_TIME_print()) - """ - from time import strptime - from calendar import timegm - - months = ( - "Jan","Feb","Mar","Apr","May","Jun", - "Jul","Aug","Sep","Oct","Nov","Dec" - ) - time_format = ' %d %H:%M:%S %Y GMT' # NOTE: no month, fixed GMT - try: - month_number = months.index(cert_time[:3].title()) + 1 - except ValueError: - raise ValueError('time data %r does not match ' - 'format "%%b%s"' % (cert_time, time_format)) - else: - # found valid month - tt = strptime(cert_time[3:], time_format) - # return an integer, the previous mktime()-based implementation - # returned a float (fractional seconds are always zero here). - return timegm((tt[0], month_number) + tt[2:6]) - -PEM_HEADER = "-----BEGIN CERTIFICATE-----" -PEM_FOOTER = "-----END CERTIFICATE-----" - -def DER_cert_to_PEM_cert(der_cert_bytes): - """Takes a certificate in binary DER format and returns the - PEM version of it as a string.""" - - f = str(base64.standard_b64encode(der_cert_bytes), 'ASCII', 'strict') - ss = [PEM_HEADER] - ss += [f[i:i+64] for i in range(0, len(f), 64)] - ss.append(PEM_FOOTER + '\n') - return '\n'.join(ss) - -def PEM_cert_to_DER_cert(pem_cert_string): - """Takes a certificate in ASCII PEM format and returns the - DER-encoded version of it as a byte sequence""" - - if not pem_cert_string.startswith(PEM_HEADER): - raise ValueError("Invalid PEM encoding; must start with %s" - % PEM_HEADER) - if not pem_cert_string.strip().endswith(PEM_FOOTER): - raise ValueError("Invalid PEM encoding; must end with %s" - % PEM_FOOTER) - d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] - return base64.decodebytes(d.encode('ASCII', 'strict')) - -def get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, - ca_certs=None, timeout=_GLOBAL_DEFAULT_TIMEOUT): - """Retrieve the certificate from the server at the specified address, - and return it as a PEM-encoded string. - If 'ca_certs' is specified, validate the server cert against it. - If 'ssl_version' is specified, use it in the connection attempt. - If 'timeout' is specified, use it in the connection attempt. - """ - - host, port = addr - if ca_certs is not None: - cert_reqs = CERT_REQUIRED - else: - cert_reqs = CERT_NONE - context = _create_stdlib_context(ssl_version, - cert_reqs=cert_reqs, - cafile=ca_certs) - with create_connection(addr, timeout=timeout) as sock: - with context.wrap_socket(sock, server_hostname=host) as sslsock: - dercert = sslsock.getpeercert(True) - return DER_cert_to_PEM_cert(dercert) - -def get_protocol_name(protocol_code): - return _PROTOCOL_NAMES.get(protocol_code, '<unknown>') diff --git a/Python314_4_x86_Template/Lib/stat.py b/Python314_4_x86_Template/Lib/stat.py deleted file mode 100644 index 81f694329..000000000 --- a/Python314_4_x86_Template/Lib/stat.py +++ /dev/null @@ -1,212 +0,0 @@ -"""Constants/functions for interpreting results of os.stat() and os.lstat(). - -Suggested usage: from stat import * -""" - -# Indices for stat struct members in the tuple returned by os.stat() - -ST_MODE = 0 -ST_INO = 1 -ST_DEV = 2 -ST_NLINK = 3 -ST_UID = 4 -ST_GID = 5 -ST_SIZE = 6 -ST_ATIME = 7 -ST_MTIME = 8 -ST_CTIME = 9 - -# Extract bits from the mode - -def S_IMODE(mode): - """Return the portion of the file's mode that can be set by - os.chmod(). - """ - return mode & 0o7777 - -def S_IFMT(mode): - """Return the portion of the file's mode that describes the - file type. - """ - return mode & 0o170000 - -# Constants used as S_IFMT() for various file types -# (not all are implemented on all systems) - -S_IFDIR = 0o040000 # directory -S_IFCHR = 0o020000 # character device -S_IFBLK = 0o060000 # block device -S_IFREG = 0o100000 # regular file -S_IFIFO = 0o010000 # fifo (named pipe) -S_IFLNK = 0o120000 # symbolic link -S_IFSOCK = 0o140000 # socket file -# Fallbacks for uncommon platform-specific constants -S_IFDOOR = 0 -S_IFPORT = 0 -S_IFWHT = 0 - -# Functions to test for each file type - -def S_ISDIR(mode): - """Return True if mode is from a directory.""" - return S_IFMT(mode) == S_IFDIR - -def S_ISCHR(mode): - """Return True if mode is from a character special device file.""" - return S_IFMT(mode) == S_IFCHR - -def S_ISBLK(mode): - """Return True if mode is from a block special device file.""" - return S_IFMT(mode) == S_IFBLK - -def S_ISREG(mode): - """Return True if mode is from a regular file.""" - return S_IFMT(mode) == S_IFREG - -def S_ISFIFO(mode): - """Return True if mode is from a FIFO (named pipe).""" - return S_IFMT(mode) == S_IFIFO - -def S_ISLNK(mode): - """Return True if mode is from a symbolic link.""" - return S_IFMT(mode) == S_IFLNK - -def S_ISSOCK(mode): - """Return True if mode is from a socket.""" - return S_IFMT(mode) == S_IFSOCK - -def S_ISDOOR(mode): - """Return True if mode is from a door.""" - return False - -def S_ISPORT(mode): - """Return True if mode is from an event port.""" - return False - -def S_ISWHT(mode): - """Return True if mode is from a whiteout.""" - return False - -# Names for permission bits - -S_ISUID = 0o4000 # set UID bit -S_ISGID = 0o2000 # set GID bit -S_ENFMT = S_ISGID # file locking enforcement -S_ISVTX = 0o1000 # sticky bit -S_IREAD = 0o0400 # Unix V7 synonym for S_IRUSR -S_IWRITE = 0o0200 # Unix V7 synonym for S_IWUSR -S_IEXEC = 0o0100 # Unix V7 synonym for S_IXUSR -S_IRWXU = 0o0700 # mask for owner permissions -S_IRUSR = 0o0400 # read by owner -S_IWUSR = 0o0200 # write by owner -S_IXUSR = 0o0100 # execute by owner -S_IRWXG = 0o0070 # mask for group permissions -S_IRGRP = 0o0040 # read by group -S_IWGRP = 0o0020 # write by group -S_IXGRP = 0o0010 # execute by group -S_IRWXO = 0o0007 # mask for others (not in group) permissions -S_IROTH = 0o0004 # read by others -S_IWOTH = 0o0002 # write by others -S_IXOTH = 0o0001 # execute by others - -# Names for file flags -UF_SETTABLE = 0x0000ffff # owner settable flags -UF_NODUMP = 0x00000001 # do not dump file -UF_IMMUTABLE = 0x00000002 # file may not be changed -UF_APPEND = 0x00000004 # file may only be appended to -UF_OPAQUE = 0x00000008 # directory is opaque when viewed through a union stack -UF_NOUNLINK = 0x00000010 # file may not be renamed or deleted -UF_COMPRESSED = 0x00000020 # macOS: file is compressed -UF_TRACKED = 0x00000040 # macOS: used for handling document IDs -UF_DATAVAULT = 0x00000080 # macOS: entitlement needed for I/O -UF_HIDDEN = 0x00008000 # macOS: file should not be displayed -SF_SETTABLE = 0xffff0000 # superuser settable flags -SF_ARCHIVED = 0x00010000 # file may be archived -SF_IMMUTABLE = 0x00020000 # file may not be changed -SF_APPEND = 0x00040000 # file may only be appended to -SF_RESTRICTED = 0x00080000 # macOS: entitlement needed for writing -SF_NOUNLINK = 0x00100000 # file may not be renamed or deleted -SF_SNAPSHOT = 0x00200000 # file is a snapshot file -SF_FIRMLINK = 0x00800000 # macOS: file is a firmlink -SF_DATALESS = 0x40000000 # macOS: file is a dataless object - - -_filemode_table = ( - # File type chars according to: - # http://en.wikibooks.org/wiki/C_Programming/POSIX_Reference/sys/stat.h - ((S_IFLNK, "l"), - (S_IFSOCK, "s"), # Must appear before IFREG and IFDIR as IFSOCK == IFREG | IFDIR - (S_IFREG, "-"), - (S_IFBLK, "b"), - (S_IFDIR, "d"), - (S_IFCHR, "c"), - (S_IFIFO, "p")), - - ((S_IRUSR, "r"),), - ((S_IWUSR, "w"),), - ((S_IXUSR|S_ISUID, "s"), - (S_ISUID, "S"), - (S_IXUSR, "x")), - - ((S_IRGRP, "r"),), - ((S_IWGRP, "w"),), - ((S_IXGRP|S_ISGID, "s"), - (S_ISGID, "S"), - (S_IXGRP, "x")), - - ((S_IROTH, "r"),), - ((S_IWOTH, "w"),), - ((S_IXOTH|S_ISVTX, "t"), - (S_ISVTX, "T"), - (S_IXOTH, "x")) -) - -def filemode(mode): - """Convert a file's mode to a string of the form '-rwxrwxrwx'.""" - perm = [] - for index, table in enumerate(_filemode_table): - for bit, char in table: - if index == 0: - if S_IFMT(mode) == bit: - perm.append(char) - break - else: - if mode & bit == bit: - perm.append(char) - break - else: - if index == 0: - # Unknown filetype - perm.append("?") - else: - perm.append("-") - return "".join(perm) - - -# Windows FILE_ATTRIBUTE constants for interpreting os.stat()'s -# "st_file_attributes" member - -FILE_ATTRIBUTE_ARCHIVE = 32 -FILE_ATTRIBUTE_COMPRESSED = 2048 -FILE_ATTRIBUTE_DEVICE = 64 -FILE_ATTRIBUTE_DIRECTORY = 16 -FILE_ATTRIBUTE_ENCRYPTED = 16384 -FILE_ATTRIBUTE_HIDDEN = 2 -FILE_ATTRIBUTE_INTEGRITY_STREAM = 32768 -FILE_ATTRIBUTE_NORMAL = 128 -FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192 -FILE_ATTRIBUTE_NO_SCRUB_DATA = 131072 -FILE_ATTRIBUTE_OFFLINE = 4096 -FILE_ATTRIBUTE_READONLY = 1 -FILE_ATTRIBUTE_REPARSE_POINT = 1024 -FILE_ATTRIBUTE_SPARSE_FILE = 512 -FILE_ATTRIBUTE_SYSTEM = 4 -FILE_ATTRIBUTE_TEMPORARY = 256 -FILE_ATTRIBUTE_VIRTUAL = 65536 - - -# If available, use C implementation -try: - from _stat import * -except ImportError: - pass diff --git a/Python314_4_x86_Template/Lib/statistics.py b/Python314_4_x86_Template/Lib/statistics.py deleted file mode 100644 index 26cf92552..000000000 --- a/Python314_4_x86_Template/Lib/statistics.py +++ /dev/null @@ -1,1879 +0,0 @@ -""" -Basic statistics module. - -This module provides functions for calculating statistics of data, including -averages, variance, and standard deviation. - -Calculating averages --------------------- - -================== ================================================== -Function Description -================== ================================================== -mean Arithmetic mean (average) of data. -fmean Fast, floating-point arithmetic mean. -geometric_mean Geometric mean of data. -harmonic_mean Harmonic mean of data. -median Median (middle value) of data. -median_low Low median of data. -median_high High median of data. -median_grouped Median, or 50th percentile, of grouped data. -mode Mode (most common value) of data. -multimode List of modes (most common values of data). -quantiles Divide data into intervals with equal probability. -================== ================================================== - -Calculate the arithmetic mean ("the average") of data: - ->>> mean([-1.0, 2.5, 3.25, 5.75]) -2.625 - - -Calculate the standard median of discrete data: - ->>> median([2, 3, 4, 5]) -3.5 - - -Calculate the median, or 50th percentile, of data grouped into class intervals -centred on the data values provided. E.g. if your data points are rounded to -the nearest whole number: - ->>> median_grouped([2, 2, 3, 3, 3, 4]) #doctest: +ELLIPSIS -2.8333333333... - -This should be interpreted in this way: you have two data points in the class -interval 1.5-2.5, three data points in the class interval 2.5-3.5, and one in -the class interval 3.5-4.5. The median of these data points is 2.8333... - - -Calculating variability or spread ---------------------------------- - -================== ============================================= -Function Description -================== ============================================= -pvariance Population variance of data. -variance Sample variance of data. -pstdev Population standard deviation of data. -stdev Sample standard deviation of data. -================== ============================================= - -Calculate the standard deviation of sample data: - ->>> stdev([2.5, 3.25, 5.5, 11.25, 11.75]) #doctest: +ELLIPSIS -4.38961843444... - -If you have previously calculated the mean, you can pass it as the optional -second argument to the four "spread" functions to avoid recalculating it: - ->>> data = [1, 2, 2, 4, 4, 4, 5, 6] ->>> mu = mean(data) ->>> pvariance(data, mu) -2.5 - - -Statistics for relations between two inputs -------------------------------------------- - -================== ==================================================== -Function Description -================== ==================================================== -covariance Sample covariance for two variables. -correlation Pearson's correlation coefficient for two variables. -linear_regression Intercept and slope for simple linear regression. -================== ==================================================== - -Calculate covariance, Pearson's correlation, and simple linear regression -for two inputs: - ->>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] ->>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] ->>> covariance(x, y) -0.75 ->>> correlation(x, y) #doctest: +ELLIPSIS -0.31622776601... ->>> linear_regression(x, y) #doctest: -LinearRegression(slope=0.1, intercept=1.5) - - -Exceptions ----------- - -A single exception is defined: StatisticsError is a subclass of ValueError. - -""" - -__all__ = [ - 'NormalDist', - 'StatisticsError', - 'correlation', - 'covariance', - 'fmean', - 'geometric_mean', - 'harmonic_mean', - 'kde', - 'kde_random', - 'linear_regression', - 'mean', - 'median', - 'median_grouped', - 'median_high', - 'median_low', - 'mode', - 'multimode', - 'pstdev', - 'pvariance', - 'quantiles', - 'stdev', - 'variance', -] - -import math -import numbers -import random -import sys - -from fractions import Fraction -from decimal import Decimal -from itertools import count, groupby, repeat -from bisect import bisect_left, bisect_right -from math import hypot, sqrt, fabs, exp, erfc, tau, log, fsum, sumprod -from math import isfinite, isinf, pi, cos, sin, tan, cosh, asin, atan, acos -from functools import reduce -from operator import itemgetter -from collections import Counter, namedtuple, defaultdict - -_SQRT2 = sqrt(2.0) -_random = random - -## Exceptions ############################################################## - -class StatisticsError(ValueError): - pass - - -## Measures of central tendency (averages) ################################# - -def mean(data): - """Return the sample arithmetic mean of data. - - >>> mean([1, 2, 3, 4, 4]) - 2.8 - - >>> from fractions import Fraction as F - >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)]) - Fraction(13, 21) - - >>> from decimal import Decimal as D - >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")]) - Decimal('0.5625') - - If ``data`` is empty, StatisticsError will be raised. - - """ - T, total, n = _sum(data) - if n < 1: - raise StatisticsError('mean requires at least one data point') - return _convert(total / n, T) - - -def fmean(data, weights=None): - """Convert data to floats and compute the arithmetic mean. - - This runs faster than the mean() function and it always returns a float. - If the input dataset is empty, it raises a StatisticsError. - - >>> fmean([3.5, 4.0, 5.25]) - 4.25 - - """ - if weights is None: - - try: - n = len(data) - except TypeError: - # Handle iterators that do not define __len__(). - counter = count() - total = fsum(map(itemgetter(0), zip(data, counter))) - n = next(counter) - else: - total = fsum(data) - - if not n: - raise StatisticsError('fmean requires at least one data point') - - return total / n - - if not isinstance(weights, (list, tuple)): - weights = list(weights) - - try: - num = sumprod(data, weights) - except ValueError: - raise StatisticsError('data and weights must be the same length') - - den = fsum(weights) - - if not den: - raise StatisticsError('sum of weights must be non-zero') - - return num / den - - -def geometric_mean(data): - """Convert data to floats and compute the geometric mean. - - Raises a StatisticsError if the input dataset is empty - or if it contains a negative value. - - Returns zero if the product of inputs is zero. - - No special efforts are made to achieve exact results. - (However, this may change in the future.) - - >>> round(geometric_mean([54, 24, 36]), 9) - 36.0 - - """ - n = 0 - found_zero = False - - def count_positive(iterable): - nonlocal n, found_zero - for n, x in enumerate(iterable, start=1): - if x > 0.0 or math.isnan(x): - yield x - elif x == 0.0: - found_zero = True - else: - raise StatisticsError('No negative inputs allowed', x) - - total = fsum(map(log, count_positive(data))) - - if not n: - raise StatisticsError('Must have a non-empty dataset') - if math.isnan(total): - return math.nan - if found_zero: - return math.nan if total == math.inf else 0.0 - - return exp(total / n) - - -def harmonic_mean(data, weights=None): - """Return the harmonic mean of data. - - The harmonic mean is the reciprocal of the arithmetic mean of the - reciprocals of the data. It can be used for averaging ratios or - rates, for example speeds. - - Suppose a car travels 40 km/hr for 5 km and then speeds-up to - 60 km/hr for another 5 km. What is the average speed? - - >>> harmonic_mean([40, 60]) - 48.0 - - Suppose a car travels 40 km/hr for 5 km, and when traffic clears, - speeds-up to 60 km/hr for the remaining 30 km of the journey. What - is the average speed? - - >>> harmonic_mean([40, 60], weights=[5, 30]) - 56.0 - - If ``data`` is empty, or any element is less than zero, - ``harmonic_mean`` will raise ``StatisticsError``. - - """ - if iter(data) is data: - data = list(data) - - errmsg = 'harmonic mean does not support negative values' - - n = len(data) - if n < 1: - raise StatisticsError('harmonic_mean requires at least one data point') - elif n == 1 and weights is None: - x = data[0] - if isinstance(x, (numbers.Real, Decimal)): - if x < 0: - raise StatisticsError(errmsg) - return x - else: - raise TypeError('unsupported type') - - if weights is None: - weights = repeat(1, n) - sum_weights = n - else: - if iter(weights) is weights: - weights = list(weights) - if len(weights) != n: - raise StatisticsError('Number of weights does not match data size') - _, sum_weights, _ = _sum(w for w in _fail_neg(weights, errmsg)) - - try: - data = _fail_neg(data, errmsg) - T, total, count = _sum(w / x if w else 0 for w, x in zip(weights, data)) - except ZeroDivisionError: - return 0 - - if total <= 0: - raise StatisticsError('Weighted sum must be positive') - - return _convert(sum_weights / total, T) - - -def median(data): - """Return the median (middle value) of numeric data. - - When the number of data points is odd, return the middle data point. - When the number of data points is even, the median is interpolated by - taking the average of the two middle values: - - >>> median([1, 3, 5]) - 3 - >>> median([1, 3, 5, 7]) - 4.0 - - """ - data = sorted(data) - n = len(data) - if n == 0: - raise StatisticsError("no median for empty data") - if n % 2 == 1: - return data[n // 2] - else: - i = n // 2 - return (data[i - 1] + data[i]) / 2 - - -def median_low(data): - """Return the low median of numeric data. - - When the number of data points is odd, the middle value is returned. - When it is even, the smaller of the two middle values is returned. - - >>> median_low([1, 3, 5]) - 3 - >>> median_low([1, 3, 5, 7]) - 3 - - """ - # Potentially the sorting step could be replaced with a quickselect. - # However, it would require an excellent implementation to beat our - # highly optimized builtin sort. - data = sorted(data) - n = len(data) - if n == 0: - raise StatisticsError("no median for empty data") - if n % 2 == 1: - return data[n // 2] - else: - return data[n // 2 - 1] - - -def median_high(data): - """Return the high median of data. - - When the number of data points is odd, the middle value is returned. - When it is even, the larger of the two middle values is returned. - - >>> median_high([1, 3, 5]) - 3 - >>> median_high([1, 3, 5, 7]) - 5 - - """ - data = sorted(data) - n = len(data) - if n == 0: - raise StatisticsError("no median for empty data") - return data[n // 2] - - -def median_grouped(data, interval=1.0): - """Estimates the median for numeric data binned around the midpoints - of consecutive, fixed-width intervals. - - The *data* can be any iterable of numeric data with each value being - exactly the midpoint of a bin. At least one value must be present. - - The *interval* is width of each bin. - - For example, demographic information may have been summarized into - consecutive ten-year age groups with each group being represented - by the 5-year midpoints of the intervals: - - >>> demographics = Counter({ - ... 25: 172, # 20 to 30 years old - ... 35: 484, # 30 to 40 years old - ... 45: 387, # 40 to 50 years old - ... 55: 22, # 50 to 60 years old - ... 65: 6, # 60 to 70 years old - ... }) - - The 50th percentile (median) is the 536th person out of the 1071 - member cohort. That person is in the 30 to 40 year old age group. - - The regular median() function would assume that everyone in the - tricenarian age group was exactly 35 years old. A more tenable - assumption is that the 484 members of that age group are evenly - distributed between 30 and 40. For that, we use median_grouped(). - - >>> data = list(demographics.elements()) - >>> median(data) - 35 - >>> round(median_grouped(data, interval=10), 1) - 37.5 - - The caller is responsible for making sure the data points are separated - by exact multiples of *interval*. This is essential for getting a - correct result. The function does not check this precondition. - - Inputs may be any numeric type that can be coerced to a float during - the interpolation step. - - """ - data = sorted(data) - n = len(data) - if not n: - raise StatisticsError("no median for empty data") - - # Find the value at the midpoint. Remember this corresponds to the - # midpoint of the class interval. - x = data[n // 2] - - # Using O(log n) bisection, find where all the x values occur in the data. - # All x will lie within data[i:j]. - i = bisect_left(data, x) - j = bisect_right(data, x, lo=i) - - # Coerce to floats, raising a TypeError if not possible - try: - interval = float(interval) - x = float(x) - except ValueError: - raise TypeError(f'Value cannot be converted to a float') - - # Interpolate the median using the formula found at: - # https://www.cuemath.com/data/median-of-grouped-data/ - L = x - interval / 2.0 # Lower limit of the median interval - cf = i # Cumulative frequency of the preceding interval - f = j - i # Number of elements in the median internal - return L + interval * (n / 2 - cf) / f - - -def mode(data): - """Return the most common data point from discrete or nominal data. - - ``mode`` assumes discrete data, and returns a single value. This is the - standard treatment of the mode as commonly taught in schools: - - >>> mode([1, 1, 2, 3, 3, 3, 3, 4]) - 3 - - This also works with nominal (non-numeric) data: - - >>> mode(["red", "blue", "blue", "red", "green", "red", "red"]) - 'red' - - If there are multiple modes with same frequency, return the first one - encountered: - - >>> mode(['red', 'red', 'green', 'blue', 'blue']) - 'red' - - If *data* is empty, ``mode``, raises StatisticsError. - - """ - pairs = Counter(iter(data)).most_common(1) - try: - return pairs[0][0] - except IndexError: - raise StatisticsError('no mode for empty data') from None - - -def multimode(data): - """Return a list of the most frequently occurring values. - - Will return more than one result if there are multiple modes - or an empty list if *data* is empty. - - >>> multimode('aabbbbbbbbcc') - ['b'] - >>> multimode('aabbbbccddddeeffffgg') - ['b', 'd', 'f'] - >>> multimode('') - [] - - """ - counts = Counter(iter(data)) - if not counts: - return [] - maxcount = max(counts.values()) - return [value for value, count in counts.items() if count == maxcount] - - -## Measures of spread ###################################################### - -def variance(data, xbar=None): - """Return the sample variance of data. - - data should be an iterable of Real-valued numbers, with at least two - values. The optional argument xbar, if given, should be the mean of - the data. If it is missing or None, the mean is automatically calculated. - - Use this function when your data is a sample from a population. To - calculate the variance from the entire population, see ``pvariance``. - - Examples: - - >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5] - >>> variance(data) - 1.3720238095238095 - - If you have already calculated the mean of your data, you can pass it as - the optional second argument ``xbar`` to avoid recalculating it: - - >>> m = mean(data) - >>> variance(data, m) - 1.3720238095238095 - - This function does not check that ``xbar`` is actually the mean of - ``data``. Giving arbitrary values for ``xbar`` may lead to invalid or - impossible results. - - Decimals and Fractions are supported: - - >>> from decimal import Decimal as D - >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) - Decimal('31.01875') - - >>> from fractions import Fraction as F - >>> variance([F(1, 6), F(1, 2), F(5, 3)]) - Fraction(67, 108) - - """ - # http://mathworld.wolfram.com/SampleVariance.html - - T, ss, c, n = _ss(data, xbar) - if n < 2: - raise StatisticsError('variance requires at least two data points') - return _convert(ss / (n - 1), T) - - -def pvariance(data, mu=None): - """Return the population variance of ``data``. - - data should be a sequence or iterable of Real-valued numbers, with at least one - value. The optional argument mu, if given, should be the mean of - the data. If it is missing or None, the mean is automatically calculated. - - Use this function to calculate the variance from the entire population. - To estimate the variance from a sample, the ``variance`` function is - usually a better choice. - - Examples: - - >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25] - >>> pvariance(data) - 1.25 - - If you have already calculated the mean of the data, you can pass it as - the optional second argument to avoid recalculating it: - - >>> mu = mean(data) - >>> pvariance(data, mu) - 1.25 - - Decimals and Fractions are supported: - - >>> from decimal import Decimal as D - >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")]) - Decimal('24.815') - - >>> from fractions import Fraction as F - >>> pvariance([F(1, 4), F(5, 4), F(1, 2)]) - Fraction(13, 72) - - """ - # http://mathworld.wolfram.com/Variance.html - - T, ss, c, n = _ss(data, mu) - if n < 1: - raise StatisticsError('pvariance requires at least one data point') - return _convert(ss / n, T) - - -def stdev(data, xbar=None): - """Return the square root of the sample variance. - - See ``variance`` for arguments and other details. - - >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) - 1.0810874155219827 - - """ - T, ss, c, n = _ss(data, xbar) - if n < 2: - raise StatisticsError('stdev requires at least two data points') - mss = ss / (n - 1) - try: - mss_numerator = mss.numerator - mss_denominator = mss.denominator - except AttributeError: - raise ValueError('inf or nan encountered in data') - if issubclass(T, Decimal): - return _decimal_sqrt_of_frac(mss_numerator, mss_denominator) - return _float_sqrt_of_frac(mss_numerator, mss_denominator) - - -def pstdev(data, mu=None): - """Return the square root of the population variance. - - See ``pvariance`` for arguments and other details. - - >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75]) - 0.986893273527251 - - """ - T, ss, c, n = _ss(data, mu) - if n < 1: - raise StatisticsError('pstdev requires at least one data point') - mss = ss / n - try: - mss_numerator = mss.numerator - mss_denominator = mss.denominator - except AttributeError: - raise ValueError('inf or nan encountered in data') - if issubclass(T, Decimal): - return _decimal_sqrt_of_frac(mss_numerator, mss_denominator) - return _float_sqrt_of_frac(mss_numerator, mss_denominator) - - -## Statistics for relations between two inputs ############################# - -def covariance(x, y, /): - """Covariance - - Return the sample covariance of two inputs *x* and *y*. Covariance - is a measure of the joint variability of two inputs. - - >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] - >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3] - >>> covariance(x, y) - 0.75 - >>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1] - >>> covariance(x, z) - -7.5 - >>> covariance(z, x) - -7.5 - - """ - # https://en.wikipedia.org/wiki/Covariance - n = len(x) - if len(y) != n: - raise StatisticsError('covariance requires that both inputs have same number of data points') - if n < 2: - raise StatisticsError('covariance requires at least two data points') - xbar = fsum(x) / n - ybar = fsum(y) / n - sxy = sumprod((xi - xbar for xi in x), (yi - ybar for yi in y)) - return sxy / (n - 1) - - -def correlation(x, y, /, *, method='linear'): - """Pearson's correlation coefficient - - Return the Pearson's correlation coefficient for two inputs. Pearson's - correlation coefficient *r* takes values between -1 and +1. It measures - the strength and direction of a linear relationship. - - >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9] - >>> y = [9, 8, 7, 6, 5, 4, 3, 2, 1] - >>> correlation(x, x) - 1.0 - >>> correlation(x, y) - -1.0 - - If *method* is "ranked", computes Spearman's rank correlation coefficient - for two inputs. The data is replaced by ranks. Ties are averaged - so that equal values receive the same rank. The resulting coefficient - measures the strength of a monotonic relationship. - - Spearman's rank correlation coefficient is appropriate for ordinal - data or for continuous data that doesn't meet the linear proportion - requirement for Pearson's correlation coefficient. - - """ - # https://en.wikipedia.org/wiki/Pearson_correlation_coefficient - # https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient - n = len(x) - if len(y) != n: - raise StatisticsError('correlation requires that both inputs have same number of data points') - if n < 2: - raise StatisticsError('correlation requires at least two data points') - if method not in {'linear', 'ranked'}: - raise ValueError(f'Unknown method: {method!r}') - - if method == 'ranked': - start = (n - 1) / -2 # Center rankings around zero - x = _rank(x, start=start) - y = _rank(y, start=start) - - else: - xbar = fsum(x) / n - ybar = fsum(y) / n - x = [xi - xbar for xi in x] - y = [yi - ybar for yi in y] - - sxy = sumprod(x, y) - sxx = sumprod(x, x) - syy = sumprod(y, y) - - try: - return sxy / _sqrtprod(sxx, syy) - except ZeroDivisionError: - raise StatisticsError('at least one of the inputs is constant') - - -LinearRegression = namedtuple('LinearRegression', ('slope', 'intercept')) - - -def linear_regression(x, y, /, *, proportional=False): - """Slope and intercept for simple linear regression. - - Return the slope and intercept of simple linear regression - parameters estimated using ordinary least squares. Simple linear - regression describes relationship between an independent variable - *x* and a dependent variable *y* in terms of a linear function: - - y = slope * x + intercept + noise - - where *slope* and *intercept* are the regression parameters that are - estimated, and noise represents the variability of the data that was - not explained by the linear regression (it is equal to the - difference between predicted and actual values of the dependent - variable). - - The parameters are returned as a named tuple. - - >>> x = [1, 2, 3, 4, 5] - >>> noise = NormalDist().samples(5, seed=42) - >>> y = [3 * x[i] + 2 + noise[i] for i in range(5)] - >>> linear_regression(x, y) #doctest: +ELLIPSIS - LinearRegression(slope=3.17495..., intercept=1.00925...) - - If *proportional* is true, the independent variable *x* and the - dependent variable *y* are assumed to be directly proportional. - The data is fit to a line passing through the origin. - - Since the *intercept* will always be 0.0, the underlying linear - function simplifies to: - - y = slope * x + noise - - >>> y = [3 * x[i] + noise[i] for i in range(5)] - >>> linear_regression(x, y, proportional=True) #doctest: +ELLIPSIS - LinearRegression(slope=2.90475..., intercept=0.0) - - """ - # https://en.wikipedia.org/wiki/Simple_linear_regression - n = len(x) - if len(y) != n: - raise StatisticsError('linear regression requires that both inputs have same number of data points') - if n < 2: - raise StatisticsError('linear regression requires at least two data points') - - if not proportional: - xbar = fsum(x) / n - ybar = fsum(y) / n - x = [xi - xbar for xi in x] # List because used three times below - y = (yi - ybar for yi in y) # Generator because only used once below - - sxy = sumprod(x, y) + 0.0 # Add zero to coerce result to a float - sxx = sumprod(x, x) - - try: - slope = sxy / sxx # equivalent to: covariance(x, y) / variance(x) - except ZeroDivisionError: - raise StatisticsError('x is constant') - - intercept = 0.0 if proportional else ybar - slope * xbar - return LinearRegression(slope=slope, intercept=intercept) - - -## Kernel Density Estimation ############################################### - -_kernel_specs = {} - -def register(*kernels): - "Load the kernel's pdf, cdf, invcdf, and support into _kernel_specs." - def deco(builder): - spec = dict(zip(('pdf', 'cdf', 'invcdf', 'support'), builder())) - for kernel in kernels: - _kernel_specs[kernel] = spec - return builder - return deco - -@register('normal', 'gauss') -def normal_kernel(): - sqrt2pi = sqrt(2 * pi) - neg_sqrt2 = -sqrt(2) - pdf = lambda t: exp(-1/2 * t * t) / sqrt2pi - cdf = lambda t: 1/2 * erfc(t / neg_sqrt2) - invcdf = lambda t: _normal_dist_inv_cdf(t, 0.0, 1.0) - support = None - return pdf, cdf, invcdf, support - -@register('logistic') -def logistic_kernel(): - # 1.0 / (exp(t) + 2.0 + exp(-t)) - pdf = lambda t: 1/2 / (1.0 + cosh(t)) - cdf = lambda t: 1.0 - 1.0 / (exp(t) + 1.0) - invcdf = lambda p: log(p / (1.0 - p)) - support = None - return pdf, cdf, invcdf, support - -@register('sigmoid') -def sigmoid_kernel(): - # (2/pi) / (exp(t) + exp(-t)) - c1 = 1 / pi - c2 = 2 / pi - c3 = pi / 2 - pdf = lambda t: c1 / cosh(t) - cdf = lambda t: c2 * atan(exp(t)) - invcdf = lambda p: log(tan(p * c3)) - support = None - return pdf, cdf, invcdf, support - -@register('rectangular', 'uniform') -def rectangular_kernel(): - pdf = lambda t: 1/2 - cdf = lambda t: 1/2 * t + 1/2 - invcdf = lambda p: 2.0 * p - 1.0 - support = 1.0 - return pdf, cdf, invcdf, support - -@register('triangular') -def triangular_kernel(): - pdf = lambda t: 1.0 - abs(t) - cdf = lambda t: t*t * (1/2 if t < 0.0 else -1/2) + t + 1/2 - invcdf = lambda p: sqrt(2.0*p) - 1.0 if p < 1/2 else 1.0 - sqrt(2.0 - 2.0*p) - support = 1.0 - return pdf, cdf, invcdf, support - -@register('parabolic', 'epanechnikov') -def parabolic_kernel(): - pdf = lambda t: 3/4 * (1.0 - t * t) - cdf = lambda t: sumprod((-1/4, 3/4, 1/2), (t**3, t, 1.0)) - invcdf = lambda p: 2.0 * cos((acos(2.0*p - 1.0) + pi) / 3.0) - support = 1.0 - return pdf, cdf, invcdf, support - -def _newton_raphson(f_inv_estimate, f, f_prime, tolerance=1e-12): - def f_inv(y): - "Return x such that f(x) ≈ y within the specified tolerance." - x = f_inv_estimate(y) - while abs(diff := f(x) - y) > tolerance: - x -= diff / f_prime(x) - return x - return f_inv - -def _quartic_invcdf_estimate(p): - # A handrolled piecewise approximation. There is no magic here. - sign, p = (1.0, p) if p <= 1/2 else (-1.0, 1.0 - p) - if p < 0.0106: - return ((2.0 * p) ** 0.3838 - 1.0) * sign - x = (2.0 * p) ** 0.4258865685331 - 1.0 - if p < 0.499: - x += 0.026818732 * sin(7.101753784 * p + 2.73230839482953) - return x * sign - -@register('quartic', 'biweight') -def quartic_kernel(): - pdf = lambda t: 15/16 * (1.0 - t * t) ** 2 - cdf = lambda t: sumprod((3/16, -5/8, 15/16, 1/2), - (t**5, t**3, t, 1.0)) - invcdf = _newton_raphson(_quartic_invcdf_estimate, f=cdf, f_prime=pdf) - support = 1.0 - return pdf, cdf, invcdf, support - -def _triweight_invcdf_estimate(p): - # A handrolled piecewise approximation. There is no magic here. - sign, p = (1.0, p) if p <= 1/2 else (-1.0, 1.0 - p) - x = (2.0 * p) ** 0.3400218741872791 - 1.0 - if 0.00001 < p < 0.499: - x -= 0.033 * sin(1.07 * tau * (p - 0.035)) - return x * sign - -@register('triweight') -def triweight_kernel(): - pdf = lambda t: 35/32 * (1.0 - t * t) ** 3 - cdf = lambda t: sumprod((-5/32, 21/32, -35/32, 35/32, 1/2), - (t**7, t**5, t**3, t, 1.0)) - invcdf = _newton_raphson(_triweight_invcdf_estimate, f=cdf, f_prime=pdf) - support = 1.0 - return pdf, cdf, invcdf, support - -@register('cosine') -def cosine_kernel(): - c1 = pi / 4 - c2 = pi / 2 - pdf = lambda t: c1 * cos(c2 * t) - cdf = lambda t: 1/2 * sin(c2 * t) + 1/2 - invcdf = lambda p: 2.0 * asin(2.0 * p - 1.0) / pi - support = 1.0 - return pdf, cdf, invcdf, support - -del register, normal_kernel, logistic_kernel, sigmoid_kernel -del rectangular_kernel, triangular_kernel, parabolic_kernel -del quartic_kernel, triweight_kernel, cosine_kernel - - -def kde(data, h, kernel='normal', *, cumulative=False): - """Kernel Density Estimation: Create a continuous probability density - function or cumulative distribution function from discrete samples. - - The basic idea is to smooth the data using a kernel function - to help draw inferences about a population from a sample. - - The degree of smoothing is controlled by the scaling parameter h - which is called the bandwidth. Smaller values emphasize local - features while larger values give smoother results. - - The kernel determines the relative weights of the sample data - points. Generally, the choice of kernel shape does not matter - as much as the more influential bandwidth smoothing parameter. - - Kernels that give some weight to every sample point: - - normal (gauss) - logistic - sigmoid - - Kernels that only give weight to sample points within - the bandwidth: - - rectangular (uniform) - triangular - parabolic (epanechnikov) - quartic (biweight) - triweight - cosine - - If *cumulative* is true, will return a cumulative distribution function. - - A StatisticsError will be raised if the data sequence is empty. - - Example - ------- - - Given a sample of six data points, construct a continuous - function that estimates the underlying probability density: - - >>> sample = [-2.1, -1.3, -0.4, 1.9, 5.1, 6.2] - >>> f_hat = kde(sample, h=1.5) - - Compute the area under the curve: - - >>> area = sum(f_hat(x) for x in range(-20, 20)) - >>> round(area, 4) - 1.0 - - Plot the estimated probability density function at - evenly spaced points from -6 to 10: - - >>> for x in range(-6, 11): - ... density = f_hat(x) - ... plot = ' ' * int(density * 400) + 'x' - ... print(f'{x:2}: {density:.3f} {plot}') - ... - -6: 0.002 x - -5: 0.009 x - -4: 0.031 x - -3: 0.070 x - -2: 0.111 x - -1: 0.125 x - 0: 0.110 x - 1: 0.086 x - 2: 0.068 x - 3: 0.059 x - 4: 0.066 x - 5: 0.082 x - 6: 0.082 x - 7: 0.058 x - 8: 0.028 x - 9: 0.009 x - 10: 0.002 x - - Estimate P(4.5 < X <= 7.5), the probability that a new sample value - will be between 4.5 and 7.5: - - >>> cdf = kde(sample, h=1.5, cumulative=True) - >>> round(cdf(7.5) - cdf(4.5), 2) - 0.22 - - References - ---------- - - Kernel density estimation and its application: - https://www.itm-conferences.org/articles/itmconf/pdf/2018/08/itmconf_sam2018_00037.pdf - - Kernel functions in common use: - https://en.wikipedia.org/wiki/Kernel_(statistics)#kernel_functions_in_common_use - - Interactive graphical demonstration and exploration: - https://demonstrations.wolfram.com/KernelDensityEstimation/ - - Kernel estimation of cumulative distribution function of a random variable with bounded support - https://www.econstor.eu/bitstream/10419/207829/1/10.21307_stattrans-2016-037.pdf - - """ - - n = len(data) - if not n: - raise StatisticsError('Empty data sequence') - - if not isinstance(data[0], (int, float)): - raise TypeError('Data sequence must contain ints or floats') - - if h <= 0.0: - raise StatisticsError(f'Bandwidth h must be positive, not {h=!r}') - - kernel_spec = _kernel_specs.get(kernel) - if kernel_spec is None: - raise StatisticsError(f'Unknown kernel name: {kernel!r}') - K = kernel_spec['pdf'] - W = kernel_spec['cdf'] - support = kernel_spec['support'] - - if support is None: - - def pdf(x): - return sum(K((x - x_i) / h) for x_i in data) / (len(data) * h) - - def cdf(x): - return sum(W((x - x_i) / h) for x_i in data) / len(data) - - else: - - sample = sorted(data) - bandwidth = h * support - - def pdf(x): - nonlocal n, sample - if len(data) != n: - sample = sorted(data) - n = len(data) - i = bisect_left(sample, x - bandwidth) - j = bisect_right(sample, x + bandwidth) - supported = sample[i : j] - return sum(K((x - x_i) / h) for x_i in supported) / (n * h) - - def cdf(x): - nonlocal n, sample - if len(data) != n: - sample = sorted(data) - n = len(data) - i = bisect_left(sample, x - bandwidth) - j = bisect_right(sample, x + bandwidth) - supported = sample[i : j] - return sum((W((x - x_i) / h) for x_i in supported), i) / n - - if cumulative: - cdf.__doc__ = f'CDF estimate with {h=!r} and {kernel=!r}' - return cdf - - else: - pdf.__doc__ = f'PDF estimate with {h=!r} and {kernel=!r}' - return pdf - - -def kde_random(data, h, kernel='normal', *, seed=None): - """Return a function that makes a random selection from the estimated - probability density function created by kde(data, h, kernel). - - Providing a *seed* allows reproducible selections within a single - thread. The seed may be an integer, float, str, or bytes. - - A StatisticsError will be raised if the *data* sequence is empty. - - Example: - - >>> data = [-2.1, -1.3, -0.4, 1.9, 5.1, 6.2] - >>> rand = kde_random(data, h=1.5, seed=8675309) - >>> new_selections = [rand() for i in range(10)] - >>> [round(x, 1) for x in new_selections] - [0.7, 6.2, 1.2, 6.9, 7.0, 1.8, 2.5, -0.5, -1.8, 5.6] - - """ - n = len(data) - if not n: - raise StatisticsError('Empty data sequence') - - if not isinstance(data[0], (int, float)): - raise TypeError('Data sequence must contain ints or floats') - - if h <= 0.0: - raise StatisticsError(f'Bandwidth h must be positive, not {h=!r}') - - kernel_spec = _kernel_specs.get(kernel) - if kernel_spec is None: - raise StatisticsError(f'Unknown kernel name: {kernel!r}') - invcdf = kernel_spec['invcdf'] - - prng = _random.Random(seed) - random = prng.random - choice = prng.choice - - def rand(): - return choice(data) + h * invcdf(random()) - - rand.__doc__ = f'Random KDE selection with {h=!r} and {kernel=!r}' - - return rand - - -## Quantiles ############################################################### - -# There is no one perfect way to compute quantiles. Here we offer -# two methods that serve common needs. Most other packages -# surveyed offered at least one or both of these two, making them -# "standard" in the sense of "widely-adopted and reproducible". -# They are also easy to explain, easy to compute manually, and have -# straight-forward interpretations that aren't surprising. - -# The default method is known as "R6", "PERCENTILE.EXC", or "expected -# value of rank order statistics". The alternative method is known as -# "R7", "PERCENTILE.INC", or "mode of rank order statistics". - -# For sample data where there is a positive probability for values -# beyond the range of the data, the R6 exclusive method is a -# reasonable choice. Consider a random sample of nine values from a -# population with a uniform distribution from 0.0 to 1.0. The -# distribution of the third ranked sample point is described by -# betavariate(alpha=3, beta=7) which has mode=0.250, median=0.286, and -# mean=0.300. Only the latter (which corresponds with R6) gives the -# desired cut point with 30% of the population falling below that -# value, making it comparable to a result from an inv_cdf() function. -# The R6 exclusive method is also idempotent. - -# For describing population data where the end points are known to -# be included in the data, the R7 inclusive method is a reasonable -# choice. Instead of the mean, it uses the mode of the beta -# distribution for the interior points. Per Hyndman & Fan, "One nice -# property is that the vertices of Q7(p) divide the range into n - 1 -# intervals, and exactly 100p% of the intervals lie to the left of -# Q7(p) and 100(1 - p)% of the intervals lie to the right of Q7(p)." - -# If needed, other methods could be added. However, for now, the -# position is that fewer options make for easier choices and that -# external packages can be used for anything more advanced. - -def quantiles(data, *, n=4, method='exclusive'): - """Divide *data* into *n* continuous intervals with equal probability. - - Returns a list of (n - 1) cut points separating the intervals. - - Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. - Set *n* to 100 for percentiles which gives the 99 cuts points that - separate *data* in to 100 equal sized groups. - - The *data* can be any iterable containing sample. - The cut points are linearly interpolated between data points. - - If *method* is set to *inclusive*, *data* is treated as population - data. The minimum value is treated as the 0th percentile and the - maximum value is treated as the 100th percentile. - - """ - if n < 1: - raise StatisticsError('n must be at least 1') - - data = sorted(data) - - ld = len(data) - if ld < 2: - if ld == 1: - return data * (n - 1) - raise StatisticsError('must have at least one data point') - - if method == 'inclusive': - m = ld - 1 - result = [] - for i in range(1, n): - j, delta = divmod(i * m, n) - interpolated = (data[j] * (n - delta) + data[j + 1] * delta) / n - result.append(interpolated) - return result - - if method == 'exclusive': - m = ld + 1 - result = [] - for i in range(1, n): - j = i * m // n # rescale i to m/n - j = 1 if j < 1 else ld-1 if j > ld-1 else j # clamp to 1 .. ld-1 - delta = i*m - j*n # exact integer math - interpolated = (data[j - 1] * (n - delta) + data[j] * delta) / n - result.append(interpolated) - return result - - raise ValueError(f'Unknown method: {method!r}') - - -## Normal Distribution ##################################################### - -class NormalDist: - "Normal distribution of a random variable" - # https://en.wikipedia.org/wiki/Normal_distribution - # https://en.wikipedia.org/wiki/Variance#Properties - - __slots__ = { - '_mu': 'Arithmetic mean of a normal distribution', - '_sigma': 'Standard deviation of a normal distribution', - } - - def __init__(self, mu=0.0, sigma=1.0): - "NormalDist where mu is the mean and sigma is the standard deviation." - if sigma < 0.0: - raise StatisticsError('sigma must be non-negative') - self._mu = float(mu) - self._sigma = float(sigma) - - @classmethod - def from_samples(cls, data): - "Make a normal distribution instance from sample data." - return cls(*_mean_stdev(data)) - - def samples(self, n, *, seed=None): - "Generate *n* samples for a given mean and standard deviation." - rnd = random.random if seed is None else random.Random(seed).random - inv_cdf = _normal_dist_inv_cdf - mu = self._mu - sigma = self._sigma - return [inv_cdf(rnd(), mu, sigma) for _ in repeat(None, n)] - - def pdf(self, x): - "Probability density function. P(x <= X < x+dx) / dx" - variance = self._sigma * self._sigma - if not variance: - raise StatisticsError('pdf() not defined when sigma is zero') - diff = x - self._mu - return exp(diff * diff / (-2.0 * variance)) / sqrt(tau * variance) - - def cdf(self, x): - "Cumulative distribution function. P(X <= x)" - if not self._sigma: - raise StatisticsError('cdf() not defined when sigma is zero') - return 0.5 * erfc((self._mu - x) / (self._sigma * _SQRT2)) - - def inv_cdf(self, p): - """Inverse cumulative distribution function. x : P(X <= x) = p - - Finds the value of the random variable such that the probability of - the variable being less than or equal to that value equals the given - probability. - - This function is also called the percent point function or quantile - function. - """ - if p <= 0.0 or p >= 1.0: - raise StatisticsError('p must be in the range 0.0 < p < 1.0') - return _normal_dist_inv_cdf(p, self._mu, self._sigma) - - def quantiles(self, n=4): - """Divide into *n* continuous intervals with equal probability. - - Returns a list of (n - 1) cut points separating the intervals. - - Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. - Set *n* to 100 for percentiles which gives the 99 cuts points that - separate the normal distribution in to 100 equal sized groups. - """ - return [self.inv_cdf(i / n) for i in range(1, n)] - - def overlap(self, other): - """Compute the overlapping coefficient (OVL) between two normal distributions. - - Measures the agreement between two normal probability distributions. - Returns a value between 0.0 and 1.0 giving the overlapping area in - the two underlying probability density functions. - - >>> N1 = NormalDist(2.4, 1.6) - >>> N2 = NormalDist(3.2, 2.0) - >>> N1.overlap(N2) - 0.8035050657330205 - """ - # See: "The overlapping coefficient as a measure of agreement between - # probability distributions and point estimation of the overlap of two - # normal densities" -- Henry F. Inman and Edwin L. Bradley Jr - # http://dx.doi.org/10.1080/03610928908830127 - if not isinstance(other, NormalDist): - raise TypeError('Expected another NormalDist instance') - X, Y = self, other - if (Y._sigma, Y._mu) < (X._sigma, X._mu): # sort to assure commutativity - X, Y = Y, X - X_var, Y_var = X.variance, Y.variance - if not X_var or not Y_var: - raise StatisticsError('overlap() not defined when sigma is zero') - dv = Y_var - X_var - dm = fabs(Y._mu - X._mu) - if not dv: - return erfc(dm / (2.0 * X._sigma * _SQRT2)) - a = X._mu * Y_var - Y._mu * X_var - b = X._sigma * Y._sigma * sqrt(dm * dm + dv * log(Y_var / X_var)) - x1 = (a + b) / dv - x2 = (a - b) / dv - return 1.0 - (fabs(Y.cdf(x1) - X.cdf(x1)) + fabs(Y.cdf(x2) - X.cdf(x2))) - - def zscore(self, x): - """Compute the Standard Score. (x - mean) / stdev - - Describes *x* in terms of the number of standard deviations - above or below the mean of the normal distribution. - """ - # https://www.statisticshowto.com/probability-and-statistics/z-score/ - if not self._sigma: - raise StatisticsError('zscore() not defined when sigma is zero') - return (x - self._mu) / self._sigma - - @property - def mean(self): - "Arithmetic mean of the normal distribution." - return self._mu - - @property - def median(self): - "Return the median of the normal distribution" - return self._mu - - @property - def mode(self): - """Return the mode of the normal distribution - - The mode is the value x where which the probability density - function (pdf) takes its maximum value. - """ - return self._mu - - @property - def stdev(self): - "Standard deviation of the normal distribution." - return self._sigma - - @property - def variance(self): - "Square of the standard deviation." - return self._sigma * self._sigma - - def __add__(x1, x2): - """Add a constant or another NormalDist instance. - - If *other* is a constant, translate mu by the constant, - leaving sigma unchanged. - - If *other* is a NormalDist, add both the means and the variances. - Mathematically, this works only if the two distributions are - independent or if they are jointly normally distributed. - """ - if isinstance(x2, NormalDist): - return NormalDist(x1._mu + x2._mu, hypot(x1._sigma, x2._sigma)) - return NormalDist(x1._mu + x2, x1._sigma) - - def __sub__(x1, x2): - """Subtract a constant or another NormalDist instance. - - If *other* is a constant, translate by the constant mu, - leaving sigma unchanged. - - If *other* is a NormalDist, subtract the means and add the variances. - Mathematically, this works only if the two distributions are - independent or if they are jointly normally distributed. - """ - if isinstance(x2, NormalDist): - return NormalDist(x1._mu - x2._mu, hypot(x1._sigma, x2._sigma)) - return NormalDist(x1._mu - x2, x1._sigma) - - def __mul__(x1, x2): - """Multiply both mu and sigma by a constant. - - Used for rescaling, perhaps to change measurement units. - Sigma is scaled with the absolute value of the constant. - """ - return NormalDist(x1._mu * x2, x1._sigma * fabs(x2)) - - def __truediv__(x1, x2): - """Divide both mu and sigma by a constant. - - Used for rescaling, perhaps to change measurement units. - Sigma is scaled with the absolute value of the constant. - """ - return NormalDist(x1._mu / x2, x1._sigma / fabs(x2)) - - def __pos__(x1): - "Return a copy of the instance." - return NormalDist(x1._mu, x1._sigma) - - def __neg__(x1): - "Negates mu while keeping sigma the same." - return NormalDist(-x1._mu, x1._sigma) - - __radd__ = __add__ - - def __rsub__(x1, x2): - "Subtract a NormalDist from a constant or another NormalDist." - return -(x1 - x2) - - __rmul__ = __mul__ - - def __eq__(x1, x2): - "Two NormalDist objects are equal if their mu and sigma are both equal." - if not isinstance(x2, NormalDist): - return NotImplemented - return x1._mu == x2._mu and x1._sigma == x2._sigma - - def __hash__(self): - "NormalDist objects hash equal if their mu and sigma are both equal." - return hash((self._mu, self._sigma)) - - def __repr__(self): - return f'{type(self).__name__}(mu={self._mu!r}, sigma={self._sigma!r})' - - def __getstate__(self): - return self._mu, self._sigma - - def __setstate__(self, state): - self._mu, self._sigma = state - - -## Private utilities ####################################################### - -def _sum(data): - """_sum(data) -> (type, sum, count) - - Return a high-precision sum of the given numeric data as a fraction, - together with the type to be converted to and the count of items. - - Examples - -------- - - >>> _sum([3, 2.25, 4.5, -0.5, 0.25]) - (<class 'float'>, Fraction(19, 2), 5) - - Some sources of round-off error will be avoided: - - # Built-in sum returns zero. - >>> _sum([1e50, 1, -1e50] * 1000) - (<class 'float'>, Fraction(1000, 1), 3000) - - Fractions and Decimals are also supported: - - >>> from fractions import Fraction as F - >>> _sum([F(2, 3), F(7, 5), F(1, 4), F(5, 6)]) - (<class 'fractions.Fraction'>, Fraction(63, 20), 4) - - >>> from decimal import Decimal as D - >>> data = [D("0.1375"), D("0.2108"), D("0.3061"), D("0.0419")] - >>> _sum(data) - (<class 'decimal.Decimal'>, Fraction(6963, 10000), 4) - - Mixed types are currently treated as an error, except that int is - allowed. - - """ - count = 0 - types = set() - types_add = types.add - partials = {} - partials_get = partials.get - - for typ, values in groupby(data, type): - types_add(typ) - for n, d in map(_exact_ratio, values): - count += 1 - partials[d] = partials_get(d, 0) + n - - if None in partials: - # The sum will be a NAN or INF. We can ignore all the finite - # partials, and just look at this special one. - total = partials[None] - assert not _isfinite(total) - else: - # Sum all the partial sums using builtin sum. - total = sum(Fraction(n, d) for d, n in partials.items()) - - T = reduce(_coerce, types, int) # or raise TypeError - return (T, total, count) - - -def _ss(data, c=None): - """Return the exact mean and sum of square deviations of sequence data. - - Calculations are done in a single pass, allowing the input to be an iterator. - - If given *c* is used the mean; otherwise, it is calculated from the data. - Use the *c* argument with care, as it can lead to garbage results. - - """ - if c is not None: - T, ssd, count = _sum((d := x - c) * d for x in data) - return (T, ssd, c, count) - - count = 0 - types = set() - types_add = types.add - sx_partials = defaultdict(int) - sxx_partials = defaultdict(int) - - for typ, values in groupby(data, type): - types_add(typ) - for n, d in map(_exact_ratio, values): - count += 1 - sx_partials[d] += n - sxx_partials[d] += n * n - - if not count: - ssd = c = Fraction(0) - - elif None in sx_partials: - # The sum will be a NAN or INF. We can ignore all the finite - # partials, and just look at this special one. - ssd = c = sx_partials[None] - assert not _isfinite(ssd) - - else: - sx = sum(Fraction(n, d) for d, n in sx_partials.items()) - sxx = sum(Fraction(n, d*d) for d, n in sxx_partials.items()) - # This formula has poor numeric properties for floats, - # but with fractions it is exact. - ssd = (count * sxx - sx * sx) / count - c = sx / count - - T = reduce(_coerce, types, int) # or raise TypeError - return (T, ssd, c, count) - - -def _isfinite(x): - try: - return x.is_finite() # Likely a Decimal. - except AttributeError: - return math.isfinite(x) # Coerces to float first. - - -def _coerce(T, S): - """Coerce types T and S to a common type, or raise TypeError. - - Coercion rules are currently an implementation detail. See the CoerceTest - test class in test_statistics for details. - - """ - # See http://bugs.python.org/issue24068. - assert T is not bool, "initial type T is bool" - # If the types are the same, no need to coerce anything. Put this - # first, so that the usual case (no coercion needed) happens as soon - # as possible. - if T is S: return T - # Mixed int & other coerce to the other type. - if S is int or S is bool: return T - if T is int: return S - # If one is a (strict) subclass of the other, coerce to the subclass. - if issubclass(S, T): return S - if issubclass(T, S): return T - # Ints coerce to the other type. - if issubclass(T, int): return S - if issubclass(S, int): return T - # Mixed fraction & float coerces to float (or float subclass). - if issubclass(T, Fraction) and issubclass(S, float): - return S - if issubclass(T, float) and issubclass(S, Fraction): - return T - # Any other combination is disallowed. - msg = "don't know how to coerce %s and %s" - raise TypeError(msg % (T.__name__, S.__name__)) - - -def _exact_ratio(x): - """Return Real number x to exact (numerator, denominator) pair. - - >>> _exact_ratio(0.25) - (1, 4) - - x is expected to be an int, Fraction, Decimal or float. - - """ - try: - return x.as_integer_ratio() - except AttributeError: - pass - except (OverflowError, ValueError): - # float NAN or INF. - assert not _isfinite(x) - return (x, None) - - try: - # x may be an Integral ABC. - return (x.numerator, x.denominator) - except AttributeError: - msg = f"can't convert type '{type(x).__name__}' to numerator/denominator" - raise TypeError(msg) - - -def _convert(value, T): - """Convert value to given numeric type T.""" - if type(value) is T: - # This covers the cases where T is Fraction, or where value is - # a NAN or INF (Decimal or float). - return value - - if issubclass(T, int) and value.denominator != 1: - T = float - - try: - # FIXME: what do we do if this overflows? - return T(value) - except TypeError: - if issubclass(T, Decimal): - return T(value.numerator) / T(value.denominator) - else: - raise - - -def _fail_neg(values, errmsg='negative value'): - """Iterate over values, failing if any are less than zero.""" - for x in values: - if x < 0: - raise StatisticsError(errmsg) - yield x - - -def _rank(data, /, *, key=None, reverse=False, ties='average', start=1) -> list[float]: - """Rank order a dataset. The lowest value has rank 1. - - Ties are averaged so that equal values receive the same rank: - - >>> data = [31, 56, 31, 25, 75, 18] - >>> _rank(data) - [3.5, 5.0, 3.5, 2.0, 6.0, 1.0] - - The operation is idempotent: - - >>> _rank([3.5, 5.0, 3.5, 2.0, 6.0, 1.0]) - [3.5, 5.0, 3.5, 2.0, 6.0, 1.0] - - It is possible to rank the data in reverse order so that the - highest value has rank 1. Also, a key-function can extract - the field to be ranked: - - >>> goals = [('eagles', 45), ('bears', 48), ('lions', 44)] - >>> _rank(goals, key=itemgetter(1), reverse=True) - [2.0, 1.0, 3.0] - - Ranks are conventionally numbered starting from one; however, - setting *start* to zero allows the ranks to be used as array indices: - - >>> prize = ['Gold', 'Silver', 'Bronze', 'Certificate'] - >>> scores = [8.1, 7.3, 9.4, 8.3] - >>> [prize[int(i)] for i in _rank(scores, start=0, reverse=True)] - ['Bronze', 'Certificate', 'Gold', 'Silver'] - - """ - # If this function becomes public at some point, more thought - # needs to be given to the signature. A list of ints is - # plausible when ties is "min" or "max". When ties is "average", - # either list[float] or list[Fraction] is plausible. - - # Default handling of ties matches scipy.stats.mstats.spearmanr. - if ties != 'average': - raise ValueError(f'Unknown tie resolution method: {ties!r}') - if key is not None: - data = map(key, data) - val_pos = sorted(zip(data, count()), reverse=reverse) - i = start - 1 - result = [0] * len(val_pos) - for _, g in groupby(val_pos, key=itemgetter(0)): - group = list(g) - size = len(group) - rank = i + (size + 1) / 2 - for value, orig_pos in group: - result[orig_pos] = rank - i += size - return result - - -def _integer_sqrt_of_frac_rto(n: int, m: int) -> int: - """Square root of n/m, rounded to the nearest integer using round-to-odd.""" - # Reference: https://www.lri.fr/~melquion/doc/05-imacs17_1-expose.pdf - a = math.isqrt(n // m) - return a | (a*a*m != n) - - -# For 53 bit precision floats, the bit width used in -# _float_sqrt_of_frac() is 109. -_sqrt_bit_width: int = 2 * sys.float_info.mant_dig + 3 - - -def _float_sqrt_of_frac(n: int, m: int) -> float: - """Square root of n/m as a float, correctly rounded.""" - # See principle and proof sketch at: https://bugs.python.org/msg407078 - q = (n.bit_length() - m.bit_length() - _sqrt_bit_width) // 2 - if q >= 0: - numerator = _integer_sqrt_of_frac_rto(n, m << 2 * q) << q - denominator = 1 - else: - numerator = _integer_sqrt_of_frac_rto(n << -2 * q, m) - denominator = 1 << -q - return numerator / denominator # Convert to float - - -def _decimal_sqrt_of_frac(n: int, m: int) -> Decimal: - """Square root of n/m as a Decimal, correctly rounded.""" - # Premise: For decimal, computing (n/m).sqrt() can be off - # by 1 ulp from the correctly rounded result. - # Method: Check the result, moving up or down a step if needed. - if n <= 0: - if not n: - return Decimal('0.0') - n, m = -n, -m - - root = (Decimal(n) / Decimal(m)).sqrt() - nr, dr = root.as_integer_ratio() - - plus = root.next_plus() - np, dp = plus.as_integer_ratio() - # test: n / m > ((root + plus) / 2) ** 2 - if 4 * n * (dr*dp)**2 > m * (dr*np + dp*nr)**2: - return plus - - minus = root.next_minus() - nm, dm = minus.as_integer_ratio() - # test: n / m < ((root + minus) / 2) ** 2 - if 4 * n * (dr*dm)**2 < m * (dr*nm + dm*nr)**2: - return minus - - return root - - -def _mean_stdev(data): - """In one pass, compute the mean and sample standard deviation as floats.""" - T, ss, xbar, n = _ss(data) - if n < 2: - raise StatisticsError('stdev requires at least two data points') - mss = ss / (n - 1) - try: - return float(xbar), _float_sqrt_of_frac(mss.numerator, mss.denominator) - except AttributeError: - # Handle Nans and Infs gracefully - return float(xbar), float(xbar) / float(ss) - - -def _sqrtprod(x: float, y: float) -> float: - "Return sqrt(x * y) computed with improved accuracy and without overflow/underflow." - - h = sqrt(x * y) - - if not isfinite(h): - if isinf(h) and not isinf(x) and not isinf(y): - # Finite inputs overflowed, so scale down, and recompute. - scale = 2.0 ** -512 # sqrt(1 / sys.float_info.max) - return _sqrtprod(scale * x, scale * y) / scale - return h - - if not h: - if x and y: - # Non-zero inputs underflowed, so scale up, and recompute. - # Scale: 1 / sqrt(sys.float_info.min * sys.float_info.epsilon) - scale = 2.0 ** 537 - return _sqrtprod(scale * x, scale * y) / scale - return h - - # Improve accuracy with a differential correction. - # https://www.wolframalpha.com/input/?i=Maclaurin+series+sqrt%28h**2+%2B+x%29+at+x%3D0 - d = sumprod((x, h), (y, -h)) - return h + d / (2.0 * h) - - -def _normal_dist_inv_cdf(p, mu, sigma): - # There is no closed-form solution to the inverse CDF for the normal - # distribution, so we use a rational approximation instead: - # Wichura, M.J. (1988). "Algorithm AS241: The Percentage Points of the - # Normal Distribution". Applied Statistics. Blackwell Publishing. 37 - # (3): 477–484. doi:10.2307/2347330. JSTOR 2347330. - q = p - 0.5 - - if fabs(q) <= 0.425: - r = 0.180625 - q * q - # Hash sum: 55.88319_28806_14901_4439 - num = (((((((2.50908_09287_30122_6727e+3 * r + - 3.34305_75583_58812_8105e+4) * r + - 6.72657_70927_00870_0853e+4) * r + - 4.59219_53931_54987_1457e+4) * r + - 1.37316_93765_50946_1125e+4) * r + - 1.97159_09503_06551_4427e+3) * r + - 1.33141_66789_17843_7745e+2) * r + - 3.38713_28727_96366_6080e+0) * q - den = (((((((5.22649_52788_52854_5610e+3 * r + - 2.87290_85735_72194_2674e+4) * r + - 3.93078_95800_09271_0610e+4) * r + - 2.12137_94301_58659_5867e+4) * r + - 5.39419_60214_24751_1077e+3) * r + - 6.87187_00749_20579_0830e+2) * r + - 4.23133_30701_60091_1252e+1) * r + - 1.0) - x = num / den - return mu + (x * sigma) - - r = p if q <= 0.0 else 1.0 - p - r = sqrt(-log(r)) - if r <= 5.0: - r = r - 1.6 - # Hash sum: 49.33206_50330_16102_89036 - num = (((((((7.74545_01427_83414_07640e-4 * r + - 2.27238_44989_26918_45833e-2) * r + - 2.41780_72517_74506_11770e-1) * r + - 1.27045_82524_52368_38258e+0) * r + - 3.64784_83247_63204_60504e+0) * r + - 5.76949_72214_60691_40550e+0) * r + - 4.63033_78461_56545_29590e+0) * r + - 1.42343_71107_49683_57734e+0) - den = (((((((1.05075_00716_44416_84324e-9 * r + - 5.47593_80849_95344_94600e-4) * r + - 1.51986_66563_61645_71966e-2) * r + - 1.48103_97642_74800_74590e-1) * r + - 6.89767_33498_51000_04550e-1) * r + - 1.67638_48301_83803_84940e+0) * r + - 2.05319_16266_37758_82187e+0) * r + - 1.0) - else: - r = r - 5.0 - # Hash sum: 47.52583_31754_92896_71629 - num = (((((((2.01033_43992_92288_13265e-7 * r + - 2.71155_55687_43487_57815e-5) * r + - 1.24266_09473_88078_43860e-3) * r + - 2.65321_89526_57612_30930e-2) * r + - 2.96560_57182_85048_91230e-1) * r + - 1.78482_65399_17291_33580e+0) * r + - 5.46378_49111_64114_36990e+0) * r + - 6.65790_46435_01103_77720e+0) - den = (((((((2.04426_31033_89939_78564e-15 * r + - 1.42151_17583_16445_88870e-7) * r + - 1.84631_83175_10054_68180e-5) * r + - 7.86869_13114_56132_59100e-4) * r + - 1.48753_61290_85061_48525e-2) * r + - 1.36929_88092_27358_05310e-1) * r + - 5.99832_20655_58879_37690e-1) * r + - 1.0) - - x = num / den - if q < 0.0: - x = -x - - return mu + (x * sigma) - - -# If available, use C implementation -try: - from _statistics import _normal_dist_inv_cdf -except ImportError: - pass diff --git a/Python314_4_x86_Template/Lib/string/__init__.py b/Python314_4_x86_Template/Lib/string/__init__.py deleted file mode 100644 index eab5067c9..000000000 --- a/Python314_4_x86_Template/Lib/string/__init__.py +++ /dev/null @@ -1,325 +0,0 @@ -"""A collection of string constants. - -Public module variables: - -whitespace -- a string containing all ASCII whitespace -ascii_lowercase -- a string containing all ASCII lowercase letters -ascii_uppercase -- a string containing all ASCII uppercase letters -ascii_letters -- a string containing all ASCII letters -digits -- a string containing all ASCII decimal digits -hexdigits -- a string containing all ASCII hexadecimal digits -octdigits -- a string containing all ASCII octal digits -punctuation -- a string containing all ASCII punctuation characters -printable -- a string containing all ASCII characters considered printable - -""" - -__all__ = ["ascii_letters", "ascii_lowercase", "ascii_uppercase", "capwords", - "digits", "hexdigits", "octdigits", "printable", "punctuation", - "whitespace", "Formatter", "Template"] - -import _string - -# Some strings for ctype-style character classification -whitespace = ' \t\n\r\v\f' -ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' -ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -ascii_letters = ascii_lowercase + ascii_uppercase -digits = '0123456789' -hexdigits = digits + 'abcdef' + 'ABCDEF' -octdigits = '01234567' -punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" -printable = digits + ascii_letters + punctuation + whitespace - -# Functions which aren't available as string methods. - -# Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def". -def capwords(s, sep=None): - """capwords(s [,sep]) -> string - - Split the argument into words using split, capitalize each - word using capitalize, and join the capitalized words using - join. If the optional second argument sep is absent or None, - runs of whitespace characters are replaced by a single space - and leading and trailing whitespace are removed, otherwise - sep is used to split and join the words. - - """ - return (sep or ' ').join(map(str.capitalize, s.split(sep))) - - -#################################################################### -_sentinel_dict = {} - - -class _TemplatePattern: - # This descriptor is overwritten in ``Template._compile_pattern()``. - def __get__(self, instance, cls=None): - if cls is None: - return self - return cls._compile_pattern() -_TemplatePattern = _TemplatePattern() - - -class Template: - """A string class for supporting $-substitutions.""" - - delimiter = '$' - # r'[a-z]' matches to non-ASCII letters when used with IGNORECASE, but - # without the ASCII flag. We can't add re.ASCII to flags because of - # backward compatibility. So we use the ?a local flag and [a-z] pattern. - # See https://bugs.python.org/issue31672 - idpattern = r'(?a:[_a-z][_a-z0-9]*)' - braceidpattern = None - flags = None # default: re.IGNORECASE - - pattern = _TemplatePattern # use a descriptor to compile the pattern - - def __init_subclass__(cls): - super().__init_subclass__() - cls._compile_pattern() - - @classmethod - def _compile_pattern(cls): - import re # deferred import, for performance - - pattern = cls.__dict__.get('pattern', _TemplatePattern) - if pattern is _TemplatePattern: - delim = re.escape(cls.delimiter) - id = cls.idpattern - bid = cls.braceidpattern or cls.idpattern - pattern = fr""" - {delim}(?: - (?P<escaped>{delim}) | # Escape sequence of two delimiters - (?P<named>{id}) | # delimiter and a Python identifier - {{(?P<braced>{bid})}} | # delimiter and a braced identifier - (?P<invalid>) # Other ill-formed delimiter exprs - ) - """ - if cls.flags is None: - cls.flags = re.IGNORECASE - pat = cls.pattern = re.compile(pattern, cls.flags | re.VERBOSE) - return pat - - def __init__(self, template): - self.template = template - - # Search for $$, $identifier, ${identifier}, and any bare $'s - - def _invalid(self, mo): - i = mo.start('invalid') - lines = self.template[:i].splitlines(keepends=True) - if not lines: - colno = 1 - lineno = 1 - else: - colno = i - len(''.join(lines[:-1])) - lineno = len(lines) - raise ValueError('Invalid placeholder in string: line %d, col %d' % - (lineno, colno)) - - def substitute(self, mapping=_sentinel_dict, /, **kws): - if mapping is _sentinel_dict: - mapping = kws - elif kws: - from collections import ChainMap - mapping = ChainMap(kws, mapping) - # Helper function for .sub() - def convert(mo): - # Check the most common path first. - named = mo.group('named') or mo.group('braced') - if named is not None: - return str(mapping[named]) - if mo.group('escaped') is not None: - return self.delimiter - if mo.group('invalid') is not None: - self._invalid(mo) - raise ValueError('Unrecognized named group in pattern', - self.pattern) - return self.pattern.sub(convert, self.template) - - def safe_substitute(self, mapping=_sentinel_dict, /, **kws): - if mapping is _sentinel_dict: - mapping = kws - elif kws: - from collections import ChainMap - mapping = ChainMap(kws, mapping) - # Helper function for .sub() - def convert(mo): - named = mo.group('named') or mo.group('braced') - if named is not None: - try: - return str(mapping[named]) - except KeyError: - return mo.group() - if mo.group('escaped') is not None: - return self.delimiter - if mo.group('invalid') is not None: - return mo.group() - raise ValueError('Unrecognized named group in pattern', - self.pattern) - return self.pattern.sub(convert, self.template) - - def is_valid(self): - for mo in self.pattern.finditer(self.template): - if mo.group('invalid') is not None: - return False - if (mo.group('named') is None - and mo.group('braced') is None - and mo.group('escaped') is None): - # If all the groups are None, there must be - # another group we're not expecting - raise ValueError('Unrecognized named group in pattern', - self.pattern) - return True - - def get_identifiers(self): - ids = [] - for mo in self.pattern.finditer(self.template): - named = mo.group('named') or mo.group('braced') - if named is not None and named not in ids: - # add a named group only the first time it appears - ids.append(named) - elif (named is None - and mo.group('invalid') is None - and mo.group('escaped') is None): - # If all the groups are None, there must be - # another group we're not expecting - raise ValueError('Unrecognized named group in pattern', - self.pattern) - return ids - - -######################################################################## -# the Formatter class -# see PEP 3101 for details and purpose of this class - -# The hard parts are reused from the C implementation. They're exposed as "_" -# prefixed methods of str. - -# The overall parser is implemented in _string.formatter_parser. -# The field name parser is implemented in _string.formatter_field_name_split - -class Formatter: - def format(self, format_string, /, *args, **kwargs): - return self.vformat(format_string, args, kwargs) - - def vformat(self, format_string, args, kwargs): - used_args = set() - result, _ = self._vformat(format_string, args, kwargs, used_args, 2) - self.check_unused_args(used_args, args, kwargs) - return result - - def _vformat(self, format_string, args, kwargs, used_args, recursion_depth, - auto_arg_index=0): - if recursion_depth < 0: - raise ValueError('Max string recursion exceeded') - result = [] - for literal_text, field_name, format_spec, conversion in \ - self.parse(format_string): - - # output the literal text - if literal_text: - result.append(literal_text) - - # if there's a field, output it - if field_name is not None: - # this is some markup, find the object and do - # the formatting - - # handle arg indexing when empty field first parts are given. - field_first, _ = _string.formatter_field_name_split(field_name) - if field_first == '': - if auto_arg_index is False: - raise ValueError('cannot switch from manual field ' - 'specification to automatic field ' - 'numbering') - field_name = str(auto_arg_index) + field_name - auto_arg_index += 1 - elif isinstance(field_first, int): - if auto_arg_index: - raise ValueError('cannot switch from automatic field ' - 'numbering to manual field ' - 'specification') - # disable auto arg incrementing, if it gets - # used later on, then an exception will be raised - auto_arg_index = False - - # given the field_name, find the object it references - # and the argument it came from - obj, arg_used = self.get_field(field_name, args, kwargs) - used_args.add(arg_used) - - # do any conversion on the resulting object - obj = self.convert_field(obj, conversion) - - # expand the format spec, if needed - format_spec, auto_arg_index = self._vformat( - format_spec, args, kwargs, - used_args, recursion_depth-1, - auto_arg_index=auto_arg_index) - - # format the object and append to the result - result.append(self.format_field(obj, format_spec)) - - return ''.join(result), auto_arg_index - - - def get_value(self, key, args, kwargs): - if isinstance(key, int): - return args[key] - else: - return kwargs[key] - - - def check_unused_args(self, used_args, args, kwargs): - pass - - - def format_field(self, value, format_spec): - return format(value, format_spec) - - - def convert_field(self, value, conversion): - # do any conversion on the resulting object - if conversion is None: - return value - elif conversion == 's': - return str(value) - elif conversion == 'r': - return repr(value) - elif conversion == 'a': - return ascii(value) - raise ValueError("Unknown conversion specifier {0!s}".format(conversion)) - - - # returns an iterable that contains tuples of the form: - # (literal_text, field_name, format_spec, conversion) - # literal_text can be zero length - # field_name can be None, in which case there's no - # object to format and output - # if field_name is not None, it is looked up, formatted - # with format_spec and conversion and then used - def parse(self, format_string): - return _string.formatter_parser(format_string) - - - # given a field_name, find the object it references. - # field_name: the field being looked up, e.g. "0.name" - # or "lookup[3]" - # used_args: a set of which args have been used - # args, kwargs: as passed in to vformat - def get_field(self, field_name, args, kwargs): - first, rest = _string.formatter_field_name_split(field_name) - - obj = self.get_value(first, args, kwargs) - - # loop through the rest of the field_name, doing - # getattr or getitem as needed - for is_attr, i in rest: - if is_attr: - obj = getattr(obj, i) - else: - obj = obj[i] - - return obj, first diff --git a/Python314_4_x86_Template/Lib/string/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/string/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 83a7dc900faed3179fdf05f3400c5a0632154c11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12944 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 Aj{pDw diff --git a/Python314_4_x86_Template/Lib/string/templatelib.py b/Python314_4_x86_Template/Lib/string/templatelib.py deleted file mode 100644 index 816487243..000000000 --- a/Python314_4_x86_Template/Lib/string/templatelib.py +++ /dev/null @@ -1,33 +0,0 @@ -"""Support for template string literals (t-strings).""" - -t = t"{0}" -Template = type(t) -Interpolation = type(t.interpolations[0]) -del t - -def convert(obj, /, conversion): - """Convert *obj* using formatted string literal semantics.""" - if conversion is None: - return obj - if conversion == 'r': - return repr(obj) - if conversion == 's': - return str(obj) - if conversion == 'a': - return ascii(obj) - raise ValueError(f'invalid conversion specifier: {conversion}') - -def _template_unpickle(*args): - import itertools - - if len(args) != 2: - raise ValueError('Template expects tuple of length 2 to unpickle') - - strings, interpolations = args - parts = [] - for string, interpolation in itertools.zip_longest(strings, interpolations): - if string is not None: - parts.append(string) - if interpolation is not None: - parts.append(interpolation) - return Template(*parts) diff --git a/Python314_4_x86_Template/Lib/stringprep.py b/Python314_4_x86_Template/Lib/stringprep.py deleted file mode 100644 index 44ecdb266..000000000 --- a/Python314_4_x86_Template/Lib/stringprep.py +++ /dev/null @@ -1,272 +0,0 @@ -# This file is generated by mkstringprep.py. DO NOT EDIT. -"""Library that exposes various tables found in the StringPrep RFC 3454. - -There are two kinds of tables: sets, for which a member test is provided, -and mappings, for which a mapping function is provided. -""" - -from unicodedata import ucd_3_2_0 as unicodedata - -assert unicodedata.unidata_version == '3.2.0' - -def in_table_a1(code): - if unicodedata.category(code) != 'Cn': return False - c = ord(code) - if 0xFDD0 <= c < 0xFDF0: return False - return (c & 0xFFFF) not in (0xFFFE, 0xFFFF) - - -b1_set = set([173, 847, 6150, 6155, 6156, 6157, 8203, 8204, 8205, 8288, 65279] + list(range(65024,65040))) -def in_table_b1(code): - return ord(code) in b1_set - - -b3_exceptions = { -0xb5:'\u03bc', 0xdf:'ss', 0x130:'i\u0307', 0x149:'\u02bcn', -0x17f:'s', 0x1f0:'j\u030c', 0x345:'\u03b9', 0x37a:' \u03b9', -0x390:'\u03b9\u0308\u0301', 0x3b0:'\u03c5\u0308\u0301', 0x3c2:'\u03c3', 0x3d0:'\u03b2', -0x3d1:'\u03b8', 0x3d2:'\u03c5', 0x3d3:'\u03cd', 0x3d4:'\u03cb', -0x3d5:'\u03c6', 0x3d6:'\u03c0', 0x3f0:'\u03ba', 0x3f1:'\u03c1', -0x3f2:'\u03c3', 0x3f5:'\u03b5', 0x587:'\u0565\u0582', 0x1e96:'h\u0331', -0x1e97:'t\u0308', 0x1e98:'w\u030a', 0x1e99:'y\u030a', 0x1e9a:'a\u02be', -0x1e9b:'\u1e61', 0x1f50:'\u03c5\u0313', 0x1f52:'\u03c5\u0313\u0300', 0x1f54:'\u03c5\u0313\u0301', -0x1f56:'\u03c5\u0313\u0342', 0x1f80:'\u1f00\u03b9', 0x1f81:'\u1f01\u03b9', 0x1f82:'\u1f02\u03b9', -0x1f83:'\u1f03\u03b9', 0x1f84:'\u1f04\u03b9', 0x1f85:'\u1f05\u03b9', 0x1f86:'\u1f06\u03b9', -0x1f87:'\u1f07\u03b9', 0x1f88:'\u1f00\u03b9', 0x1f89:'\u1f01\u03b9', 0x1f8a:'\u1f02\u03b9', -0x1f8b:'\u1f03\u03b9', 0x1f8c:'\u1f04\u03b9', 0x1f8d:'\u1f05\u03b9', 0x1f8e:'\u1f06\u03b9', -0x1f8f:'\u1f07\u03b9', 0x1f90:'\u1f20\u03b9', 0x1f91:'\u1f21\u03b9', 0x1f92:'\u1f22\u03b9', -0x1f93:'\u1f23\u03b9', 0x1f94:'\u1f24\u03b9', 0x1f95:'\u1f25\u03b9', 0x1f96:'\u1f26\u03b9', -0x1f97:'\u1f27\u03b9', 0x1f98:'\u1f20\u03b9', 0x1f99:'\u1f21\u03b9', 0x1f9a:'\u1f22\u03b9', -0x1f9b:'\u1f23\u03b9', 0x1f9c:'\u1f24\u03b9', 0x1f9d:'\u1f25\u03b9', 0x1f9e:'\u1f26\u03b9', -0x1f9f:'\u1f27\u03b9', 0x1fa0:'\u1f60\u03b9', 0x1fa1:'\u1f61\u03b9', 0x1fa2:'\u1f62\u03b9', -0x1fa3:'\u1f63\u03b9', 0x1fa4:'\u1f64\u03b9', 0x1fa5:'\u1f65\u03b9', 0x1fa6:'\u1f66\u03b9', -0x1fa7:'\u1f67\u03b9', 0x1fa8:'\u1f60\u03b9', 0x1fa9:'\u1f61\u03b9', 0x1faa:'\u1f62\u03b9', -0x1fab:'\u1f63\u03b9', 0x1fac:'\u1f64\u03b9', 0x1fad:'\u1f65\u03b9', 0x1fae:'\u1f66\u03b9', -0x1faf:'\u1f67\u03b9', 0x1fb2:'\u1f70\u03b9', 0x1fb3:'\u03b1\u03b9', 0x1fb4:'\u03ac\u03b9', -0x1fb6:'\u03b1\u0342', 0x1fb7:'\u03b1\u0342\u03b9', 0x1fbc:'\u03b1\u03b9', 0x1fbe:'\u03b9', -0x1fc2:'\u1f74\u03b9', 0x1fc3:'\u03b7\u03b9', 0x1fc4:'\u03ae\u03b9', 0x1fc6:'\u03b7\u0342', -0x1fc7:'\u03b7\u0342\u03b9', 0x1fcc:'\u03b7\u03b9', 0x1fd2:'\u03b9\u0308\u0300', 0x1fd3:'\u03b9\u0308\u0301', -0x1fd6:'\u03b9\u0342', 0x1fd7:'\u03b9\u0308\u0342', 0x1fe2:'\u03c5\u0308\u0300', 0x1fe3:'\u03c5\u0308\u0301', -0x1fe4:'\u03c1\u0313', 0x1fe6:'\u03c5\u0342', 0x1fe7:'\u03c5\u0308\u0342', 0x1ff2:'\u1f7c\u03b9', -0x1ff3:'\u03c9\u03b9', 0x1ff4:'\u03ce\u03b9', 0x1ff6:'\u03c9\u0342', 0x1ff7:'\u03c9\u0342\u03b9', -0x1ffc:'\u03c9\u03b9', 0x20a8:'rs', 0x2102:'c', 0x2103:'\xb0c', -0x2107:'\u025b', 0x2109:'\xb0f', 0x210b:'h', 0x210c:'h', -0x210d:'h', 0x2110:'i', 0x2111:'i', 0x2112:'l', -0x2115:'n', 0x2116:'no', 0x2119:'p', 0x211a:'q', -0x211b:'r', 0x211c:'r', 0x211d:'r', 0x2120:'sm', -0x2121:'tel', 0x2122:'tm', 0x2124:'z', 0x2128:'z', -0x212c:'b', 0x212d:'c', 0x2130:'e', 0x2131:'f', -0x2133:'m', 0x213e:'\u03b3', 0x213f:'\u03c0', 0x2145:'d', -0x3371:'hpa', 0x3373:'au', 0x3375:'ov', 0x3380:'pa', -0x3381:'na', 0x3382:'\u03bca', 0x3383:'ma', 0x3384:'ka', -0x3385:'kb', 0x3386:'mb', 0x3387:'gb', 0x338a:'pf', -0x338b:'nf', 0x338c:'\u03bcf', 0x3390:'hz', 0x3391:'khz', -0x3392:'mhz', 0x3393:'ghz', 0x3394:'thz', 0x33a9:'pa', -0x33aa:'kpa', 0x33ab:'mpa', 0x33ac:'gpa', 0x33b4:'pv', -0x33b5:'nv', 0x33b6:'\u03bcv', 0x33b7:'mv', 0x33b8:'kv', -0x33b9:'mv', 0x33ba:'pw', 0x33bb:'nw', 0x33bc:'\u03bcw', -0x33bd:'mw', 0x33be:'kw', 0x33bf:'mw', 0x33c0:'k\u03c9', -0x33c1:'m\u03c9', 0x33c3:'bq', 0x33c6:'c\u2215kg', 0x33c7:'co.', -0x33c8:'db', 0x33c9:'gy', 0x33cb:'hp', 0x33cd:'kk', -0x33ce:'km', 0x33d7:'ph', 0x33d9:'ppm', 0x33da:'pr', -0x33dc:'sv', 0x33dd:'wb', 0xfb00:'ff', 0xfb01:'fi', -0xfb02:'fl', 0xfb03:'ffi', 0xfb04:'ffl', 0xfb05:'st', -0xfb06:'st', 0xfb13:'\u0574\u0576', 0xfb14:'\u0574\u0565', 0xfb15:'\u0574\u056b', -0xfb16:'\u057e\u0576', 0xfb17:'\u0574\u056d', 0x1d400:'a', 0x1d401:'b', -0x1d402:'c', 0x1d403:'d', 0x1d404:'e', 0x1d405:'f', -0x1d406:'g', 0x1d407:'h', 0x1d408:'i', 0x1d409:'j', -0x1d40a:'k', 0x1d40b:'l', 0x1d40c:'m', 0x1d40d:'n', -0x1d40e:'o', 0x1d40f:'p', 0x1d410:'q', 0x1d411:'r', -0x1d412:'s', 0x1d413:'t', 0x1d414:'u', 0x1d415:'v', -0x1d416:'w', 0x1d417:'x', 0x1d418:'y', 0x1d419:'z', -0x1d434:'a', 0x1d435:'b', 0x1d436:'c', 0x1d437:'d', -0x1d438:'e', 0x1d439:'f', 0x1d43a:'g', 0x1d43b:'h', -0x1d43c:'i', 0x1d43d:'j', 0x1d43e:'k', 0x1d43f:'l', -0x1d440:'m', 0x1d441:'n', 0x1d442:'o', 0x1d443:'p', -0x1d444:'q', 0x1d445:'r', 0x1d446:'s', 0x1d447:'t', -0x1d448:'u', 0x1d449:'v', 0x1d44a:'w', 0x1d44b:'x', -0x1d44c:'y', 0x1d44d:'z', 0x1d468:'a', 0x1d469:'b', -0x1d46a:'c', 0x1d46b:'d', 0x1d46c:'e', 0x1d46d:'f', -0x1d46e:'g', 0x1d46f:'h', 0x1d470:'i', 0x1d471:'j', -0x1d472:'k', 0x1d473:'l', 0x1d474:'m', 0x1d475:'n', -0x1d476:'o', 0x1d477:'p', 0x1d478:'q', 0x1d479:'r', -0x1d47a:'s', 0x1d47b:'t', 0x1d47c:'u', 0x1d47d:'v', -0x1d47e:'w', 0x1d47f:'x', 0x1d480:'y', 0x1d481:'z', -0x1d49c:'a', 0x1d49e:'c', 0x1d49f:'d', 0x1d4a2:'g', -0x1d4a5:'j', 0x1d4a6:'k', 0x1d4a9:'n', 0x1d4aa:'o', -0x1d4ab:'p', 0x1d4ac:'q', 0x1d4ae:'s', 0x1d4af:'t', -0x1d4b0:'u', 0x1d4b1:'v', 0x1d4b2:'w', 0x1d4b3:'x', -0x1d4b4:'y', 0x1d4b5:'z', 0x1d4d0:'a', 0x1d4d1:'b', -0x1d4d2:'c', 0x1d4d3:'d', 0x1d4d4:'e', 0x1d4d5:'f', -0x1d4d6:'g', 0x1d4d7:'h', 0x1d4d8:'i', 0x1d4d9:'j', -0x1d4da:'k', 0x1d4db:'l', 0x1d4dc:'m', 0x1d4dd:'n', -0x1d4de:'o', 0x1d4df:'p', 0x1d4e0:'q', 0x1d4e1:'r', -0x1d4e2:'s', 0x1d4e3:'t', 0x1d4e4:'u', 0x1d4e5:'v', -0x1d4e6:'w', 0x1d4e7:'x', 0x1d4e8:'y', 0x1d4e9:'z', -0x1d504:'a', 0x1d505:'b', 0x1d507:'d', 0x1d508:'e', -0x1d509:'f', 0x1d50a:'g', 0x1d50d:'j', 0x1d50e:'k', -0x1d50f:'l', 0x1d510:'m', 0x1d511:'n', 0x1d512:'o', -0x1d513:'p', 0x1d514:'q', 0x1d516:'s', 0x1d517:'t', -0x1d518:'u', 0x1d519:'v', 0x1d51a:'w', 0x1d51b:'x', -0x1d51c:'y', 0x1d538:'a', 0x1d539:'b', 0x1d53b:'d', -0x1d53c:'e', 0x1d53d:'f', 0x1d53e:'g', 0x1d540:'i', -0x1d541:'j', 0x1d542:'k', 0x1d543:'l', 0x1d544:'m', -0x1d546:'o', 0x1d54a:'s', 0x1d54b:'t', 0x1d54c:'u', -0x1d54d:'v', 0x1d54e:'w', 0x1d54f:'x', 0x1d550:'y', -0x1d56c:'a', 0x1d56d:'b', 0x1d56e:'c', 0x1d56f:'d', -0x1d570:'e', 0x1d571:'f', 0x1d572:'g', 0x1d573:'h', -0x1d574:'i', 0x1d575:'j', 0x1d576:'k', 0x1d577:'l', -0x1d578:'m', 0x1d579:'n', 0x1d57a:'o', 0x1d57b:'p', -0x1d57c:'q', 0x1d57d:'r', 0x1d57e:'s', 0x1d57f:'t', -0x1d580:'u', 0x1d581:'v', 0x1d582:'w', 0x1d583:'x', -0x1d584:'y', 0x1d585:'z', 0x1d5a0:'a', 0x1d5a1:'b', -0x1d5a2:'c', 0x1d5a3:'d', 0x1d5a4:'e', 0x1d5a5:'f', -0x1d5a6:'g', 0x1d5a7:'h', 0x1d5a8:'i', 0x1d5a9:'j', -0x1d5aa:'k', 0x1d5ab:'l', 0x1d5ac:'m', 0x1d5ad:'n', -0x1d5ae:'o', 0x1d5af:'p', 0x1d5b0:'q', 0x1d5b1:'r', -0x1d5b2:'s', 0x1d5b3:'t', 0x1d5b4:'u', 0x1d5b5:'v', -0x1d5b6:'w', 0x1d5b7:'x', 0x1d5b8:'y', 0x1d5b9:'z', -0x1d5d4:'a', 0x1d5d5:'b', 0x1d5d6:'c', 0x1d5d7:'d', -0x1d5d8:'e', 0x1d5d9:'f', 0x1d5da:'g', 0x1d5db:'h', -0x1d5dc:'i', 0x1d5dd:'j', 0x1d5de:'k', 0x1d5df:'l', -0x1d5e0:'m', 0x1d5e1:'n', 0x1d5e2:'o', 0x1d5e3:'p', -0x1d5e4:'q', 0x1d5e5:'r', 0x1d5e6:'s', 0x1d5e7:'t', -0x1d5e8:'u', 0x1d5e9:'v', 0x1d5ea:'w', 0x1d5eb:'x', -0x1d5ec:'y', 0x1d5ed:'z', 0x1d608:'a', 0x1d609:'b', -0x1d60a:'c', 0x1d60b:'d', 0x1d60c:'e', 0x1d60d:'f', -0x1d60e:'g', 0x1d60f:'h', 0x1d610:'i', 0x1d611:'j', -0x1d612:'k', 0x1d613:'l', 0x1d614:'m', 0x1d615:'n', -0x1d616:'o', 0x1d617:'p', 0x1d618:'q', 0x1d619:'r', -0x1d61a:'s', 0x1d61b:'t', 0x1d61c:'u', 0x1d61d:'v', -0x1d61e:'w', 0x1d61f:'x', 0x1d620:'y', 0x1d621:'z', -0x1d63c:'a', 0x1d63d:'b', 0x1d63e:'c', 0x1d63f:'d', -0x1d640:'e', 0x1d641:'f', 0x1d642:'g', 0x1d643:'h', -0x1d644:'i', 0x1d645:'j', 0x1d646:'k', 0x1d647:'l', -0x1d648:'m', 0x1d649:'n', 0x1d64a:'o', 0x1d64b:'p', -0x1d64c:'q', 0x1d64d:'r', 0x1d64e:'s', 0x1d64f:'t', -0x1d650:'u', 0x1d651:'v', 0x1d652:'w', 0x1d653:'x', -0x1d654:'y', 0x1d655:'z', 0x1d670:'a', 0x1d671:'b', -0x1d672:'c', 0x1d673:'d', 0x1d674:'e', 0x1d675:'f', -0x1d676:'g', 0x1d677:'h', 0x1d678:'i', 0x1d679:'j', -0x1d67a:'k', 0x1d67b:'l', 0x1d67c:'m', 0x1d67d:'n', -0x1d67e:'o', 0x1d67f:'p', 0x1d680:'q', 0x1d681:'r', -0x1d682:'s', 0x1d683:'t', 0x1d684:'u', 0x1d685:'v', -0x1d686:'w', 0x1d687:'x', 0x1d688:'y', 0x1d689:'z', -0x1d6a8:'\u03b1', 0x1d6a9:'\u03b2', 0x1d6aa:'\u03b3', 0x1d6ab:'\u03b4', -0x1d6ac:'\u03b5', 0x1d6ad:'\u03b6', 0x1d6ae:'\u03b7', 0x1d6af:'\u03b8', -0x1d6b0:'\u03b9', 0x1d6b1:'\u03ba', 0x1d6b2:'\u03bb', 0x1d6b3:'\u03bc', -0x1d6b4:'\u03bd', 0x1d6b5:'\u03be', 0x1d6b6:'\u03bf', 0x1d6b7:'\u03c0', -0x1d6b8:'\u03c1', 0x1d6b9:'\u03b8', 0x1d6ba:'\u03c3', 0x1d6bb:'\u03c4', -0x1d6bc:'\u03c5', 0x1d6bd:'\u03c6', 0x1d6be:'\u03c7', 0x1d6bf:'\u03c8', -0x1d6c0:'\u03c9', 0x1d6d3:'\u03c3', 0x1d6e2:'\u03b1', 0x1d6e3:'\u03b2', -0x1d6e4:'\u03b3', 0x1d6e5:'\u03b4', 0x1d6e6:'\u03b5', 0x1d6e7:'\u03b6', -0x1d6e8:'\u03b7', 0x1d6e9:'\u03b8', 0x1d6ea:'\u03b9', 0x1d6eb:'\u03ba', -0x1d6ec:'\u03bb', 0x1d6ed:'\u03bc', 0x1d6ee:'\u03bd', 0x1d6ef:'\u03be', -0x1d6f0:'\u03bf', 0x1d6f1:'\u03c0', 0x1d6f2:'\u03c1', 0x1d6f3:'\u03b8', -0x1d6f4:'\u03c3', 0x1d6f5:'\u03c4', 0x1d6f6:'\u03c5', 0x1d6f7:'\u03c6', -0x1d6f8:'\u03c7', 0x1d6f9:'\u03c8', 0x1d6fa:'\u03c9', 0x1d70d:'\u03c3', -0x1d71c:'\u03b1', 0x1d71d:'\u03b2', 0x1d71e:'\u03b3', 0x1d71f:'\u03b4', -0x1d720:'\u03b5', 0x1d721:'\u03b6', 0x1d722:'\u03b7', 0x1d723:'\u03b8', -0x1d724:'\u03b9', 0x1d725:'\u03ba', 0x1d726:'\u03bb', 0x1d727:'\u03bc', -0x1d728:'\u03bd', 0x1d729:'\u03be', 0x1d72a:'\u03bf', 0x1d72b:'\u03c0', -0x1d72c:'\u03c1', 0x1d72d:'\u03b8', 0x1d72e:'\u03c3', 0x1d72f:'\u03c4', -0x1d730:'\u03c5', 0x1d731:'\u03c6', 0x1d732:'\u03c7', 0x1d733:'\u03c8', -0x1d734:'\u03c9', 0x1d747:'\u03c3', 0x1d756:'\u03b1', 0x1d757:'\u03b2', -0x1d758:'\u03b3', 0x1d759:'\u03b4', 0x1d75a:'\u03b5', 0x1d75b:'\u03b6', -0x1d75c:'\u03b7', 0x1d75d:'\u03b8', 0x1d75e:'\u03b9', 0x1d75f:'\u03ba', -0x1d760:'\u03bb', 0x1d761:'\u03bc', 0x1d762:'\u03bd', 0x1d763:'\u03be', -0x1d764:'\u03bf', 0x1d765:'\u03c0', 0x1d766:'\u03c1', 0x1d767:'\u03b8', -0x1d768:'\u03c3', 0x1d769:'\u03c4', 0x1d76a:'\u03c5', 0x1d76b:'\u03c6', -0x1d76c:'\u03c7', 0x1d76d:'\u03c8', 0x1d76e:'\u03c9', 0x1d781:'\u03c3', -0x1d790:'\u03b1', 0x1d791:'\u03b2', 0x1d792:'\u03b3', 0x1d793:'\u03b4', -0x1d794:'\u03b5', 0x1d795:'\u03b6', 0x1d796:'\u03b7', 0x1d797:'\u03b8', -0x1d798:'\u03b9', 0x1d799:'\u03ba', 0x1d79a:'\u03bb', 0x1d79b:'\u03bc', -0x1d79c:'\u03bd', 0x1d79d:'\u03be', 0x1d79e:'\u03bf', 0x1d79f:'\u03c0', -0x1d7a0:'\u03c1', 0x1d7a1:'\u03b8', 0x1d7a2:'\u03c3', 0x1d7a3:'\u03c4', -0x1d7a4:'\u03c5', 0x1d7a5:'\u03c6', 0x1d7a6:'\u03c7', 0x1d7a7:'\u03c8', -0x1d7a8:'\u03c9', 0x1d7bb:'\u03c3', } - -def map_table_b3(code): - r = b3_exceptions.get(ord(code)) - if r is not None: return r - return code.lower() - - -def map_table_b2(a): - al = map_table_b3(a) - b = unicodedata.normalize("NFKC", al) - bl = "".join([map_table_b3(ch) for ch in b]) - c = unicodedata.normalize("NFKC", bl) - if b != c: - return c - else: - return al - - -def in_table_c11(code): - return code == " " - - -def in_table_c12(code): - return unicodedata.category(code) == "Zs" and code != " " - -def in_table_c11_c12(code): - return unicodedata.category(code) == "Zs" - - -def in_table_c21(code): - return ord(code) < 128 and unicodedata.category(code) == "Cc" - -c22_specials = set([1757, 1807, 6158, 8204, 8205, 8232, 8233, 65279] + list(range(8288,8292)) + list(range(8298,8304)) + list(range(65529,65533)) + list(range(119155,119163))) -def in_table_c22(code): - c = ord(code) - if c < 128: return False - if unicodedata.category(code) == "Cc": return True - return c in c22_specials - -def in_table_c21_c22(code): - return unicodedata.category(code) == "Cc" or \ - ord(code) in c22_specials - - -def in_table_c3(code): - return unicodedata.category(code) == "Co" - - -def in_table_c4(code): - c = ord(code) - if c < 0xFDD0: return False - if c < 0xFDF0: return True - return (ord(code) & 0xFFFF) in (0xFFFE, 0xFFFF) - - -def in_table_c5(code): - return unicodedata.category(code) == "Cs" - - -c6_set = set(range(65529,65534)) -def in_table_c6(code): - return ord(code) in c6_set - - -c7_set = set(range(12272,12284)) -def in_table_c7(code): - return ord(code) in c7_set - - -c8_set = set([832, 833, 8206, 8207] + list(range(8234,8239)) + list(range(8298,8304))) -def in_table_c8(code): - return ord(code) in c8_set - - -c9_set = set([917505] + list(range(917536,917632))) -def in_table_c9(code): - return ord(code) in c9_set - - -def in_table_d1(code): - return unicodedata.bidirectional(code) in ("R","AL") - - -def in_table_d2(code): - return unicodedata.bidirectional(code) == "L" diff --git a/Python314_4_x86_Template/Lib/struct.py b/Python314_4_x86_Template/Lib/struct.py deleted file mode 100644 index ff98e8c4c..000000000 --- a/Python314_4_x86_Template/Lib/struct.py +++ /dev/null @@ -1,15 +0,0 @@ -__all__ = [ - # Functions - 'calcsize', 'pack', 'pack_into', 'unpack', 'unpack_from', - 'iter_unpack', - - # Classes - 'Struct', - - # Exceptions - 'error' - ] - -from _struct import * -from _struct import _clearcache # noqa: F401 -from _struct import __doc__ # noqa: F401 diff --git a/Python314_4_x86_Template/Lib/subprocess.py b/Python314_4_x86_Template/Lib/subprocess.py deleted file mode 100644 index 52b7b7117..000000000 --- a/Python314_4_x86_Template/Lib/subprocess.py +++ /dev/null @@ -1,2257 +0,0 @@ -# subprocess - Subprocesses with accessible I/O streams -# -# For more information about this module, see PEP 324. -# -# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se> -# -# Licensed to PSF under a Contributor Agreement. - -r"""Subprocesses with accessible I/O streams - -This module allows you to spawn processes, connect to their -input/output/error pipes, and obtain their return codes. - -For a complete description of this module see the Python documentation. - -Main API -======== -run(...): Runs a command, waits for it to complete, then returns a - CompletedProcess instance. -Popen(...): A class for flexibly executing a command in a new process - -Constants ---------- -DEVNULL: Special value that indicates that os.devnull should be used -PIPE: Special value that indicates a pipe should be created -STDOUT: Special value that indicates that stderr should go to stdout - - -Older API -========= -call(...): Runs a command, waits for it to complete, then returns - the return code. -check_call(...): Same as call() but raises CalledProcessError() - if return code is not 0 -check_output(...): Same as check_call() but returns the contents of - stdout instead of a return code -getoutput(...): Runs a command in the shell, waits for it to complete, - then returns the output -getstatusoutput(...): Runs a command in the shell, waits for it to complete, - then returns a (exitcode, output) tuple -""" - -import builtins -import errno -import io -import locale -import os -import time -import signal -import sys -import threading -import warnings -import contextlib -from time import monotonic as _time -import types - -try: - import fcntl -except ImportError: - fcntl = None - - -__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", - "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", - "SubprocessError", "TimeoutExpired", "CompletedProcess"] - # NOTE: We intentionally exclude list2cmdline as it is - # considered an internal implementation detail. issue10838. - -# use presence of msvcrt to detect Windows-like platforms (see bpo-8110) -try: - import msvcrt -except ModuleNotFoundError: - _mswindows = False -else: - _mswindows = True - -# some platforms do not support subprocesses -_can_fork_exec = sys.platform not in {"emscripten", "wasi", "ios", "tvos", "watchos"} - -if _mswindows: - import _winapi - from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, # noqa: F401 - STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, - STD_ERROR_HANDLE, SW_HIDE, - STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW, - STARTF_FORCEONFEEDBACK, STARTF_FORCEOFFFEEDBACK, - ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, - HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS, - NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS, - CREATE_NO_WINDOW, DETACHED_PROCESS, - CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB) - - __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", - "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", - "STD_ERROR_HANDLE", "SW_HIDE", - "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW", - "STARTF_FORCEONFEEDBACK", "STARTF_FORCEOFFFEEDBACK", - "STARTUPINFO", - "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS", - "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS", - "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS", - "CREATE_NO_WINDOW", "DETACHED_PROCESS", - "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"]) -else: - if _can_fork_exec: - from _posixsubprocess import fork_exec as _fork_exec - # used in methods that are called by __del__ - class _del_safe: - waitpid = os.waitpid - waitstatus_to_exitcode = os.waitstatus_to_exitcode - WIFSTOPPED = os.WIFSTOPPED - WSTOPSIG = os.WSTOPSIG - WNOHANG = os.WNOHANG - ECHILD = errno.ECHILD - else: - class _del_safe: - waitpid = None - waitstatus_to_exitcode = None - WIFSTOPPED = None - WSTOPSIG = None - WNOHANG = None - ECHILD = errno.ECHILD - - import select - import selectors - - -# Exception classes used by this module. -class SubprocessError(Exception): pass - - -class CalledProcessError(SubprocessError): - """Raised when run() is called with check=True and the process - returns a non-zero exit status. - - Attributes: - cmd, returncode, stdout, stderr, output - """ - def __init__(self, returncode, cmd, output=None, stderr=None): - self.returncode = returncode - self.cmd = cmd - self.output = output - self.stderr = stderr - - def __str__(self): - if self.returncode and self.returncode < 0: - try: - return "Command '%s' died with %r." % ( - self.cmd, signal.Signals(-self.returncode)) - except ValueError: - return "Command '%s' died with unknown signal %d." % ( - self.cmd, -self.returncode) - else: - return "Command '%s' returned non-zero exit status %d." % ( - self.cmd, self.returncode) - - @property - def stdout(self): - """Alias for output attribute, to match stderr""" - return self.output - - @stdout.setter - def stdout(self, value): - # There's no obvious reason to set this, but allow it anyway so - # .stdout is a transparent alias for .output - self.output = value - - -class TimeoutExpired(SubprocessError): - """This exception is raised when the timeout expires while waiting for a - child process. - - Attributes: - cmd, output, stdout, stderr, timeout - """ - def __init__(self, cmd, timeout, output=None, stderr=None): - self.cmd = cmd - self.timeout = timeout - self.output = output - self.stderr = stderr - - def __str__(self): - return ("Command '%s' timed out after %s seconds" % - (self.cmd, self.timeout)) - - @property - def stdout(self): - return self.output - - @stdout.setter - def stdout(self, value): - # There's no obvious reason to set this, but allow it anyway so - # .stdout is a transparent alias for .output - self.output = value - - -if _mswindows: - class STARTUPINFO: - def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None, - hStdError=None, wShowWindow=0, lpAttributeList=None): - self.dwFlags = dwFlags - self.hStdInput = hStdInput - self.hStdOutput = hStdOutput - self.hStdError = hStdError - self.wShowWindow = wShowWindow - self.lpAttributeList = lpAttributeList or {"handle_list": []} - - def copy(self): - attr_list = self.lpAttributeList.copy() - if 'handle_list' in attr_list: - attr_list['handle_list'] = list(attr_list['handle_list']) - - return STARTUPINFO(dwFlags=self.dwFlags, - hStdInput=self.hStdInput, - hStdOutput=self.hStdOutput, - hStdError=self.hStdError, - wShowWindow=self.wShowWindow, - lpAttributeList=attr_list) - - - class Handle(int): - closed = False - - def Close(self, CloseHandle=_winapi.CloseHandle): - if not self.closed: - self.closed = True - CloseHandle(self) - - def Detach(self): - if not self.closed: - self.closed = True - return int(self) - raise ValueError("already closed") - - def __repr__(self): - return "%s(%d)" % (self.__class__.__name__, int(self)) - - __del__ = Close -else: - # When select or poll has indicated that the file is writable, - # we can write up to _PIPE_BUF bytes without risk of blocking. - # POSIX defines PIPE_BUF as >= 512. - _PIPE_BUF = getattr(select, 'PIPE_BUF', 512) - - # poll/select have the advantage of not requiring any extra file - # descriptor, contrarily to epoll/kqueue (also, they require a single - # syscall). - if hasattr(selectors, 'PollSelector'): - _PopenSelector = selectors.PollSelector - else: - _PopenSelector = selectors.SelectSelector - - -if _mswindows: - # On Windows we just need to close `Popen._handle` when we no longer need - # it, so that the kernel can free it. `Popen._handle` gets closed - # implicitly when the `Popen` instance is finalized (see `Handle.__del__`, - # which is calling `CloseHandle` as requested in [1]), so there is nothing - # for `_cleanup` to do. - # - # [1] https://docs.microsoft.com/en-us/windows/desktop/ProcThread/ - # creating-processes - _active = None - - def _cleanup(): - pass -else: - # This lists holds Popen instances for which the underlying process had not - # exited at the time its __del__ method got called: those processes are - # wait()ed for synchronously from _cleanup() when a new Popen object is - # created, to avoid zombie processes. - _active = [] - - def _cleanup(): - if _active is None: - return - for inst in _active[:]: - res = inst._internal_poll(_deadstate=sys.maxsize) - if res is not None: - try: - _active.remove(inst) - except ValueError: - # This can happen if two threads create a new Popen instance. - # It's harmless that it was already removed, so ignore. - pass - -PIPE = -1 -STDOUT = -2 -DEVNULL = -3 - - -# XXX This function is only used by multiprocessing and the test suite, -# but it's here so that it can be imported when Python is compiled without -# threads. - -def _optim_args_from_interpreter_flags(): - """Return a list of command-line arguments reproducing the current - optimization settings in sys.flags.""" - args = [] - value = sys.flags.optimize - if value > 0: - args.append('-' + 'O' * value) - return args - - -def _args_from_interpreter_flags(): - """Return a list of command-line arguments reproducing the current - settings in sys.flags, sys.warnoptions and sys._xoptions.""" - flag_opt_map = { - 'debug': 'd', - # 'inspect': 'i', - # 'interactive': 'i', - 'dont_write_bytecode': 'B', - 'no_site': 'S', - 'verbose': 'v', - 'bytes_warning': 'b', - 'quiet': 'q', - # -O is handled in _optim_args_from_interpreter_flags() - } - args = _optim_args_from_interpreter_flags() - for flag, opt in flag_opt_map.items(): - v = getattr(sys.flags, flag) - if v > 0: - args.append('-' + opt * v) - - if sys.flags.isolated: - args.append('-I') - else: - if sys.flags.ignore_environment: - args.append('-E') - if sys.flags.no_user_site: - args.append('-s') - if sys.flags.safe_path: - args.append('-P') - - # -W options - warnopts = sys.warnoptions[:] - xoptions = getattr(sys, '_xoptions', {}) - bytes_warning = sys.flags.bytes_warning - dev_mode = sys.flags.dev_mode - - if bytes_warning > 1: - warnopts.remove("error::BytesWarning") - elif bytes_warning: - warnopts.remove("default::BytesWarning") - if dev_mode: - warnopts.remove('default') - for opt in warnopts: - args.append('-W' + opt) - - # -X options - if dev_mode: - args.extend(('-X', 'dev')) - for opt in sorted(xoptions): - if opt == 'dev': - # handled above via sys.flags.dev_mode - continue - value = xoptions[opt] - if value is True: - arg = opt - else: - arg = '%s=%s' % (opt, value) - args.extend(('-X', arg)) - - return args - - -def _text_encoding(): - # Return default text encoding and emit EncodingWarning if - # sys.flags.warn_default_encoding is true. - if sys.flags.warn_default_encoding: - f = sys._getframe() - filename = f.f_code.co_filename - stacklevel = 2 - while f := f.f_back: - if f.f_code.co_filename != filename: - break - stacklevel += 1 - warnings.warn("'encoding' argument not specified.", - EncodingWarning, stacklevel) - - if sys.flags.utf8_mode: - return "utf-8" - else: - return locale.getencoding() - - -def call(*popenargs, timeout=None, **kwargs): - """Run command with arguments. Wait for command to complete or - for timeout seconds, then return the returncode attribute. - - The arguments are the same as for the Popen constructor. Example: - - retcode = call(["ls", "-l"]) - """ - with Popen(*popenargs, **kwargs) as p: - try: - return p.wait(timeout=timeout) - except: # Including KeyboardInterrupt, wait handled that. - p.kill() - # We don't call p.wait() again as p.__exit__ does that for us. - raise - - -def check_call(*popenargs, **kwargs): - """Run command with arguments. Wait for command to complete. If - the exit code was zero then return, otherwise raise - CalledProcessError. The CalledProcessError object will have the - return code in the returncode attribute. - - The arguments are the same as for the call function. Example: - - check_call(["ls", "-l"]) - """ - retcode = call(*popenargs, **kwargs) - if retcode: - cmd = kwargs.get("args") - if cmd is None: - cmd = popenargs[0] - raise CalledProcessError(retcode, cmd) - return 0 - - -def check_output(*popenargs, timeout=None, **kwargs): - r"""Run command with arguments and return its output. - - If the exit code was non-zero it raises a CalledProcessError. The - CalledProcessError object will have the return code in the returncode - attribute and output in the output attribute. - - The arguments are the same as for the Popen constructor. Example: - - >>> check_output(["ls", "-l", "/dev/null"]) - b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' - - The stdout argument is not allowed as it is used internally. - To capture standard error in the result, use stderr=STDOUT. - - >>> check_output(["/bin/sh", "-c", - ... "ls -l non_existent_file ; exit 0"], - ... stderr=STDOUT) - b'ls: non_existent_file: No such file or directory\n' - - There is an additional optional argument, "input", allowing you to - pass a string to the subprocess's stdin. If you use this argument - you may not also use the Popen constructor's "stdin" argument, as - it too will be used internally. Example: - - >>> check_output(["sed", "-e", "s/foo/bar/"], - ... input=b"when in the course of fooman events\n") - b'when in the course of barman events\n' - - By default, all communication is in bytes, and therefore any "input" - should be bytes, and the return value will be bytes. If in text mode, - any "input" should be a string, and the return value will be a string - decoded according to locale encoding, or by "encoding" if set. Text mode - is triggered by setting any of text, encoding, errors or universal_newlines. - """ - for kw in ('stdout', 'check'): - if kw in kwargs: - raise ValueError(f'{kw} argument not allowed, it will be overridden.') - - if 'input' in kwargs and kwargs['input'] is None: - # Explicitly passing input=None was previously equivalent to passing an - # empty string. That is maintained here for backwards compatibility. - if kwargs.get('universal_newlines') or kwargs.get('text') or kwargs.get('encoding') \ - or kwargs.get('errors'): - empty = '' - else: - empty = b'' - kwargs['input'] = empty - - return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, - **kwargs).stdout - - -class CompletedProcess(object): - """A process that has finished running. - - This is returned by run(). - - Attributes: - args: The list or str args passed to run(). - returncode: The exit code of the process, negative for signals. - stdout: The standard output (None if not captured). - stderr: The standard error (None if not captured). - """ - def __init__(self, args, returncode, stdout=None, stderr=None): - self.args = args - self.returncode = returncode - self.stdout = stdout - self.stderr = stderr - - def __repr__(self): - args = ['args={!r}'.format(self.args), - 'returncode={!r}'.format(self.returncode)] - if self.stdout is not None: - args.append('stdout={!r}'.format(self.stdout)) - if self.stderr is not None: - args.append('stderr={!r}'.format(self.stderr)) - return "{}({})".format(type(self).__name__, ', '.join(args)) - - __class_getitem__ = classmethod(types.GenericAlias) - - - def check_returncode(self): - """Raise CalledProcessError if the exit code is non-zero.""" - if self.returncode: - raise CalledProcessError(self.returncode, self.args, self.stdout, - self.stderr) - - -def run(*popenargs, - input=None, capture_output=False, timeout=None, check=False, **kwargs): - """Run command with arguments and return a CompletedProcess instance. - - The returned instance will have attributes args, returncode, stdout and - stderr. By default, stdout and stderr are not captured, and those attributes - will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, - or pass capture_output=True to capture both. - - If check is True and the exit code was non-zero, it raises a - CalledProcessError. The CalledProcessError object will have the return code - in the returncode attribute, and output & stderr attributes if those streams - were captured. - - If timeout (seconds) is given and the process takes too long, - a TimeoutExpired exception will be raised. - - There is an optional argument "input", allowing you to - pass bytes or a string to the subprocess's stdin. If you use this argument - you may not also use the Popen constructor's "stdin" argument, as - it will be used internally. - - By default, all communication is in bytes, and therefore any "input" should - be bytes, and the stdout and stderr will be bytes. If in text mode, any - "input" should be a string, and stdout and stderr will be strings decoded - according to locale encoding, or by "encoding" if set. Text mode is - triggered by setting any of text, encoding, errors or universal_newlines. - - The other arguments are the same as for the Popen constructor. - """ - if input is not None: - if kwargs.get('stdin') is not None: - raise ValueError('stdin and input arguments may not both be used.') - kwargs['stdin'] = PIPE - - if capture_output: - if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: - raise ValueError('stdout and stderr arguments may not be used ' - 'with capture_output.') - kwargs['stdout'] = PIPE - kwargs['stderr'] = PIPE - - with Popen(*popenargs, **kwargs) as process: - try: - stdout, stderr = process.communicate(input, timeout=timeout) - except TimeoutExpired as exc: - process.kill() - if _mswindows: - # Windows accumulates the output in a single blocking - # read() call run on child threads, with the timeout - # being done in a join() on those threads. communicate() - # _after_ kill() is required to collect that and add it - # to the exception. - exc.stdout, exc.stderr = process.communicate() - else: - # POSIX _communicate already populated the output so - # far into the TimeoutExpired exception. - process.wait() - raise - except: # Including KeyboardInterrupt, communicate handled that. - process.kill() - # We don't call process.wait() as .__exit__ does that for us. - raise - retcode = process.poll() - if check and retcode: - raise CalledProcessError(retcode, process.args, - output=stdout, stderr=stderr) - return CompletedProcess(process.args, retcode, stdout, stderr) - - -def list2cmdline(seq): - """ - Translate a sequence of arguments into a command line - string, using the same rules as the MS C runtime: - - 1) Arguments are delimited by white space, which is either a - space or a tab. - - 2) A string surrounded by double quotation marks is - interpreted as a single argument, regardless of white space - contained within. A quoted string can be embedded in an - argument. - - 3) A double quotation mark preceded by a backslash is - interpreted as a literal double quotation mark. - - 4) Backslashes are interpreted literally, unless they - immediately precede a double quotation mark. - - 5) If backslashes immediately precede a double quotation mark, - every pair of backslashes is interpreted as a literal - backslash. If the number of backslashes is odd, the last - backslash escapes the next double quotation mark as - described in rule 3. - """ - - # See - # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx - # or search http://msdn.microsoft.com for - # "Parsing C++ Command-Line Arguments" - result = [] - needquote = False - for arg in map(os.fsdecode, seq): - bs_buf = [] - - # Add a space to separate this argument from the others - if result: - result.append(' ') - - needquote = (" " in arg) or ("\t" in arg) or not arg - if needquote: - result.append('"') - - for c in arg: - if c == '\\': - # Don't know if we need to double yet. - bs_buf.append(c) - elif c == '"': - # Double backslashes. - result.append('\\' * len(bs_buf)*2) - bs_buf = [] - result.append('\\"') - else: - # Normal char - if bs_buf: - result.extend(bs_buf) - bs_buf = [] - result.append(c) - - # Add remaining backslashes, if any. - if bs_buf: - result.extend(bs_buf) - - if needquote: - result.extend(bs_buf) - result.append('"') - - return ''.join(result) - - -# Various tools for executing commands and looking at their output and status. -# - -def getstatusoutput(cmd, *, encoding=None, errors=None): - """Return (exitcode, output) of executing cmd in a shell. - - Execute the string 'cmd' in a shell with 'check_output' and - return a 2-tuple (status, output). The locale encoding is used - to decode the output and process newlines. - - A trailing newline is stripped from the output. - The exit status for the command can be interpreted - according to the rules for the function 'wait'. Example: - - >>> import subprocess - >>> subprocess.getstatusoutput('ls /bin/ls') - (0, '/bin/ls') - >>> subprocess.getstatusoutput('cat /bin/junk') - (1, 'cat: /bin/junk: No such file or directory') - >>> subprocess.getstatusoutput('/bin/junk') - (127, 'sh: /bin/junk: not found') - >>> subprocess.getstatusoutput('/bin/kill $$') - (-15, '') - """ - try: - data = check_output(cmd, shell=True, text=True, stderr=STDOUT, - encoding=encoding, errors=errors) - exitcode = 0 - except CalledProcessError as ex: - data = ex.output - exitcode = ex.returncode - if data[-1:] == '\n': - data = data[:-1] - return exitcode, data - -def getoutput(cmd, *, encoding=None, errors=None): - """Return output (stdout or stderr) of executing cmd in a shell. - - Like getstatusoutput(), except the exit status is ignored and the return - value is a string containing the command's output. Example: - - >>> import subprocess - >>> subprocess.getoutput('ls /bin/ls') - '/bin/ls' - """ - return getstatusoutput(cmd, encoding=encoding, errors=errors)[1] - - - -def _use_posix_spawn(): - """Check if posix_spawn() can be used for subprocess. - - subprocess requires a posix_spawn() implementation that properly reports - errors to the parent process, & sets errno on the following failures: - - * Process attribute actions failed. - * File actions failed. - * exec() failed. - - Prefer an implementation which can use vfork() in some cases for best - performance. - """ - if _mswindows or not hasattr(os, 'posix_spawn'): - # os.posix_spawn() is not available - return False - - if ((_env := os.environ.get('_PYTHON_SUBPROCESS_USE_POSIX_SPAWN')) in ('0', '1')): - return bool(int(_env)) - - if sys.platform in ('darwin', 'sunos5'): - # posix_spawn() is a syscall on both macOS and Solaris, - # and properly reports errors - return True - - # Check libc name and runtime libc version - try: - ver = os.confstr('CS_GNU_LIBC_VERSION') - # parse 'glibc 2.28' as ('glibc', (2, 28)) - parts = ver.split(maxsplit=1) - if len(parts) != 2: - # reject unknown format - raise ValueError - libc = parts[0] - version = tuple(map(int, parts[1].split('.'))) - - if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24): - # glibc 2.24 has a new Linux posix_spawn implementation using vfork - # which properly reports errors to the parent process. - return True - # Note: Don't use the implementation in earlier glibc because it doesn't - # use vfork (even if glibc 2.26 added a pipe to properly report errors - # to the parent process). - except (AttributeError, ValueError, OSError): - # os.confstr() or CS_GNU_LIBC_VERSION value not available - pass - - # By default, assume that posix_spawn() does not properly report errors. - return False - - -# These are primarily fail-safe knobs for negatives. A True value does not -# guarantee the given libc/syscall API will be used. -_USE_POSIX_SPAWN = _use_posix_spawn() -_HAVE_POSIX_SPAWN_CLOSEFROM = hasattr(os, 'POSIX_SPAWN_CLOSEFROM') - - -class Popen: - """ Execute a child program in a new process. - - For a complete description of the arguments see the Python documentation. - - Arguments: - args: A string, or a sequence of program arguments. - - bufsize: supplied as the buffering argument to the open() function when - creating the stdin/stdout/stderr pipe file objects - - executable: A replacement program to execute. - - stdin, stdout and stderr: These specify the executed programs' standard - input, standard output and standard error file handles, respectively. - - preexec_fn: (POSIX only) An object to be called in the child process - just before the child is executed. - - close_fds: Controls closing or inheriting of file descriptors. - - shell: If true, the command will be executed through the shell. - - cwd: Sets the current directory before the child is executed. - - env: Defines the environment variables for the new process. - - text: If true, decode stdin, stdout and stderr using the given encoding - (if set) or the system default otherwise. - - universal_newlines: Alias of text, provided for backwards compatibility. - - startupinfo and creationflags (Windows only) - - restore_signals (POSIX only) - - start_new_session (POSIX only) - - process_group (POSIX only) - - group (POSIX only) - - extra_groups (POSIX only) - - user (POSIX only) - - umask (POSIX only) - - pass_fds (POSIX only) - - encoding and errors: Text mode encoding and error handling to use for - file objects stdin, stdout and stderr. - - Attributes: - stdin, stdout, stderr, pid, returncode - """ - _child_created = False # Set here since __del__ checks it - - def __init__(self, args, bufsize=-1, executable=None, - stdin=None, stdout=None, stderr=None, - preexec_fn=None, close_fds=True, - shell=False, cwd=None, env=None, universal_newlines=None, - startupinfo=None, creationflags=0, - restore_signals=True, start_new_session=False, - pass_fds=(), *, user=None, group=None, extra_groups=None, - encoding=None, errors=None, text=None, umask=-1, pipesize=-1, - process_group=None): - """Create new Popen instance.""" - if not _can_fork_exec: - raise OSError( - errno.ENOTSUP, f"{sys.platform} does not support processes." - ) - - _cleanup() - # Held while anything is calling waitpid before returncode has been - # updated to prevent clobbering returncode if wait() or poll() are - # called from multiple threads at once. After acquiring the lock, - # code must re-check self.returncode to see if another thread just - # finished a waitpid() call. - self._waitpid_lock = threading.Lock() - - self._input = None - self._communication_started = False - if bufsize is None: - bufsize = -1 # Restore default - if not isinstance(bufsize, int): - raise TypeError("bufsize must be an integer") - - if stdout is STDOUT: - raise ValueError("STDOUT can only be used for stderr") - - if pipesize is None: - pipesize = -1 # Restore default - if not isinstance(pipesize, int): - raise TypeError("pipesize must be an integer") - - if _mswindows: - if preexec_fn is not None: - raise ValueError("preexec_fn is not supported on Windows " - "platforms") - else: - # POSIX - if pass_fds and not close_fds: - warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) - close_fds = True - if startupinfo is not None: - raise ValueError("startupinfo is only supported on Windows " - "platforms") - if creationflags != 0: - raise ValueError("creationflags is only supported on Windows " - "platforms") - - self.args = args - self.stdin = None - self.stdout = None - self.stderr = None - self.pid = None - self.returncode = None - self.encoding = encoding - self.errors = errors - self.pipesize = pipesize - - # Validate the combinations of text and universal_newlines - if (text is not None and universal_newlines is not None - and bool(universal_newlines) != bool(text)): - raise SubprocessError('Cannot disambiguate when both text ' - 'and universal_newlines are supplied but ' - 'different. Pass one or the other.') - - self.text_mode = encoding or errors or text or universal_newlines - if self.text_mode and encoding is None: - self.encoding = encoding = _text_encoding() - - # How long to resume waiting on a child after the first ^C. - # There is no right value for this. The purpose is to be polite - # yet remain good for interactive users trying to exit a tool. - self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber() - - self._closed_child_pipe_fds = False - - if self.text_mode: - if bufsize == 1: - line_buffering = True - # Use the default buffer size for the underlying binary streams - # since they don't support line buffering. - bufsize = -1 - else: - line_buffering = False - - if process_group is None: - process_group = -1 # The internal APIs are int-only - - gid = None - if group is not None: - if not hasattr(os, 'setregid'): - raise ValueError("The 'group' parameter is not supported on the " - "current platform") - - elif isinstance(group, str): - try: - import grp - except ImportError: - raise ValueError("The group parameter cannot be a string " - "on systems without the grp module") - - gid = grp.getgrnam(group).gr_gid - elif isinstance(group, int): - gid = group - else: - raise TypeError("Group must be a string or an integer, not {}" - .format(type(group))) - - if gid < 0: - raise ValueError(f"Group ID cannot be negative, got {gid}") - - gids = None - if extra_groups is not None: - if not hasattr(os, 'setgroups'): - raise ValueError("The 'extra_groups' parameter is not " - "supported on the current platform") - - elif isinstance(extra_groups, str): - raise ValueError("Groups must be a list, not a string") - - gids = [] - for extra_group in extra_groups: - if isinstance(extra_group, str): - try: - import grp - except ImportError: - raise ValueError("Items in extra_groups cannot be " - "strings on systems without the " - "grp module") - - gids.append(grp.getgrnam(extra_group).gr_gid) - elif isinstance(extra_group, int): - gids.append(extra_group) - else: - raise TypeError("Items in extra_groups must be a string " - "or integer, not {}" - .format(type(extra_group))) - - # make sure that the gids are all positive here so we can do less - # checking in the C code - for gid_check in gids: - if gid_check < 0: - raise ValueError(f"Group ID cannot be negative, got {gid_check}") - - uid = None - if user is not None: - if not hasattr(os, 'setreuid'): - raise ValueError("The 'user' parameter is not supported on " - "the current platform") - - elif isinstance(user, str): - try: - import pwd - except ImportError: - raise ValueError("The user parameter cannot be a string " - "on systems without the pwd module") - uid = pwd.getpwnam(user).pw_uid - elif isinstance(user, int): - uid = user - else: - raise TypeError("User must be a string or an integer") - - if uid < 0: - raise ValueError(f"User ID cannot be negative, got {uid}") - - # Input and output objects. The general principle is like - # this: - # - # Parent Child - # ------ ----- - # p2cwrite ---stdin---> p2cread - # c2pread <--stdout--- c2pwrite - # errread <--stderr--- errwrite - # - # On POSIX, the child objects are file descriptors. On - # Windows, these are Windows file handles. The parent objects - # are file descriptors on both platforms. The parent objects - # are -1 when not using PIPEs. The child objects are -1 - # when not redirecting. - - (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) = self._get_handles(stdin, stdout, stderr) - - # From here on, raising exceptions may cause file descriptor leakage - - # We wrap OS handles *before* launching the child, otherwise a - # quickly terminating child could make our fds unwrappable - # (see #8458). - - if _mswindows: - if p2cwrite != -1: - p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) - if c2pread != -1: - c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) - if errread != -1: - errread = msvcrt.open_osfhandle(errread.Detach(), 0) - - try: - if p2cwrite != -1: - self.stdin = io.open(p2cwrite, 'wb', bufsize) - if self.text_mode: - self.stdin = io.TextIOWrapper(self.stdin, write_through=True, - line_buffering=line_buffering, - encoding=encoding, errors=errors) - if c2pread != -1: - self.stdout = io.open(c2pread, 'rb', bufsize) - if self.text_mode: - self.stdout = io.TextIOWrapper(self.stdout, - encoding=encoding, errors=errors) - if errread != -1: - self.stderr = io.open(errread, 'rb', bufsize) - if self.text_mode: - self.stderr = io.TextIOWrapper(self.stderr, - encoding=encoding, errors=errors) - - self._execute_child(args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite, - restore_signals, - gid, gids, uid, umask, - start_new_session, process_group) - except: - # Cleanup if the child failed starting. - for f in filter(None, (self.stdin, self.stdout, self.stderr)): - try: - f.close() - except OSError: - pass # Ignore EBADF or other errors. - - if not self._closed_child_pipe_fds: - to_close = [] - if stdin == PIPE: - to_close.append(p2cread) - if stdout == PIPE: - to_close.append(c2pwrite) - if stderr == PIPE: - to_close.append(errwrite) - if hasattr(self, '_devnull'): - to_close.append(self._devnull) - for fd in to_close: - try: - if _mswindows and isinstance(fd, Handle): - fd.Close() - else: - os.close(fd) - except OSError: - pass - - raise - - def __repr__(self): - obj_repr = ( - f"<{self.__class__.__name__}: " - f"returncode: {self.returncode} args: {self.args!r}>" - ) - if len(obj_repr) > 80: - obj_repr = obj_repr[:76] + "...>" - return obj_repr - - __class_getitem__ = classmethod(types.GenericAlias) - - @property - def universal_newlines(self): - # universal_newlines as retained as an alias of text_mode for API - # compatibility. bpo-31756 - return self.text_mode - - @universal_newlines.setter - def universal_newlines(self, universal_newlines): - self.text_mode = bool(universal_newlines) - - def _translate_newlines(self, data, encoding, errors): - data = data.decode(encoding, errors) - return data.replace("\r\n", "\n").replace("\r", "\n") - - def __enter__(self): - return self - - def __exit__(self, exc_type, value, traceback): - if self.stdout: - self.stdout.close() - if self.stderr: - self.stderr.close() - try: # Flushing a BufferedWriter may raise an error - if self.stdin: - self.stdin.close() - finally: - if exc_type == KeyboardInterrupt: - # https://bugs.python.org/issue25942 - # In the case of a KeyboardInterrupt we assume the SIGINT - # was also already sent to our child processes. We can't - # block indefinitely as that is not user friendly. - # If we have not already waited a brief amount of time in - # an interrupted .wait() or .communicate() call, do so here - # for consistency. - if self._sigint_wait_secs > 0: - try: - self._wait(timeout=self._sigint_wait_secs) - except TimeoutExpired: - pass - self._sigint_wait_secs = 0 # Note that this has been done. - else: - # Wait for the process to terminate, to avoid zombies. - self.wait() - - def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn): - if not self._child_created: - # We didn't get to successfully create a child process. - return - if self.returncode is None: - # Not reading subprocess exit status creates a zombie process which - # is only destroyed at the parent python process exit - _warn("subprocess %s is still running" % self.pid, - ResourceWarning, source=self) - # In case the child hasn't been waited on, check if it's done. - self._internal_poll(_deadstate=_maxsize) - if self.returncode is None and _active is not None: - # Child is still running, keep us alive until we can wait on it. - _active.append(self) - - def _get_devnull(self): - if not hasattr(self, '_devnull'): - self._devnull = os.open(os.devnull, os.O_RDWR) - return self._devnull - - def _stdin_write(self, input): - if input: - try: - self.stdin.write(input) - except BrokenPipeError: - pass # communicate() must ignore broken pipe errors. - except OSError as exc: - if exc.errno == errno.EINVAL: - # bpo-19612, bpo-30418: On Windows, stdin.write() fails - # with EINVAL if the child process exited or if the child - # process is still running but closed the pipe. - pass - else: - raise - - try: - self.stdin.close() - except BrokenPipeError: - pass # communicate() must ignore broken pipe errors. - except OSError as exc: - if exc.errno == errno.EINVAL: - pass - else: - raise - - def communicate(self, input=None, timeout=None): - """Interact with process: Send data to stdin and close it. - Read data from stdout and stderr, until end-of-file is - reached. Wait for process to terminate. - - The optional "input" argument should be data to be sent to the - child process, or None, if no data should be sent to the child. - communicate() returns a tuple (stdout, stderr). - - By default, all communication is in bytes, and therefore any - "input" should be bytes, and the (stdout, stderr) will be bytes. - If in text mode (indicated by self.text_mode), any "input" should - be a string, and (stdout, stderr) will be strings decoded - according to locale encoding, or by "encoding" if set. Text mode - is triggered by setting any of text, encoding, errors or - universal_newlines. - """ - - if self._communication_started and input: - raise ValueError("Cannot send input after starting communication") - - # Optimization: If we are not worried about timeouts, we haven't - # started communicating, and we have one or zero pipes, using select() - # or threads is unnecessary. - if (timeout is None and not self._communication_started and - [self.stdin, self.stdout, self.stderr].count(None) >= 2): - stdout = None - stderr = None - if self.stdin: - self._stdin_write(input) - elif self.stdout: - stdout = self.stdout.read() - self.stdout.close() - elif self.stderr: - stderr = self.stderr.read() - self.stderr.close() - self.wait() - else: - if timeout is not None: - endtime = _time() + timeout - else: - endtime = None - - try: - stdout, stderr = self._communicate(input, endtime, timeout) - except KeyboardInterrupt: - # https://bugs.python.org/issue25942 - # See the detailed comment in .wait(). - if timeout is not None: - sigint_timeout = min(self._sigint_wait_secs, - self._remaining_time(endtime)) - else: - sigint_timeout = self._sigint_wait_secs - self._sigint_wait_secs = 0 # nothing else should wait. - try: - self._wait(timeout=sigint_timeout) - except TimeoutExpired: - pass - raise # resume the KeyboardInterrupt - - finally: - self._communication_started = True - try: - sts = self.wait(timeout=self._remaining_time(endtime)) - except TimeoutExpired as exc: - exc.timeout = timeout - raise - - return (stdout, stderr) - - - def poll(self): - """Check if child process has terminated. Set and return returncode - attribute.""" - return self._internal_poll() - - - def _remaining_time(self, endtime): - """Convenience for _communicate when computing timeouts.""" - if endtime is None: - return None - else: - return endtime - _time() - - - def _check_timeout(self, endtime, orig_timeout, stdout_seq, stderr_seq, - skip_check_and_raise=False): - """Convenience for checking if a timeout has expired.""" - if endtime is None: - return - if skip_check_and_raise or _time() > endtime: - raise TimeoutExpired( - self.args, orig_timeout, - output=b''.join(stdout_seq) if stdout_seq else None, - stderr=b''.join(stderr_seq) if stderr_seq else None) - - - def wait(self, timeout=None): - """Wait for child process to terminate; returns self.returncode.""" - if timeout is not None: - endtime = _time() + timeout - try: - return self._wait(timeout=timeout) - except KeyboardInterrupt: - # https://bugs.python.org/issue25942 - # The first keyboard interrupt waits briefly for the child to - # exit under the common assumption that it also received the ^C - # generated SIGINT and will exit rapidly. - if timeout is not None: - sigint_timeout = min(self._sigint_wait_secs, - self._remaining_time(endtime)) - else: - sigint_timeout = self._sigint_wait_secs - self._sigint_wait_secs = 0 # nothing else should wait. - try: - self._wait(timeout=sigint_timeout) - except TimeoutExpired: - pass - raise # resume the KeyboardInterrupt - - def _close_pipe_fds(self, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite): - # self._devnull is not always defined. - devnull_fd = getattr(self, '_devnull', None) - - with contextlib.ExitStack() as stack: - if _mswindows: - if p2cread != -1: - stack.callback(p2cread.Close) - if c2pwrite != -1: - stack.callback(c2pwrite.Close) - if errwrite != -1: - stack.callback(errwrite.Close) - else: - if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: - stack.callback(os.close, p2cread) - if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: - stack.callback(os.close, c2pwrite) - if errwrite != -1 and errread != -1 and errwrite != devnull_fd: - stack.callback(os.close, errwrite) - - if devnull_fd is not None: - stack.callback(os.close, devnull_fd) - - # Prevent a double close of these handles/fds from __init__ on error. - self._closed_child_pipe_fds = True - - @contextlib.contextmanager - def _on_error_fd_closer(self): - """Helper to ensure file descriptors opened in _get_handles are closed""" - to_close = [] - try: - yield to_close - except: - if hasattr(self, '_devnull'): - to_close.append(self._devnull) - del self._devnull - for fd in to_close: - try: - if _mswindows and isinstance(fd, Handle): - fd.Close() - else: - os.close(fd) - except OSError: - pass - raise - - if _mswindows: - # - # Windows methods - # - def _get_handles(self, stdin, stdout, stderr): - """Construct and return tuple with IO objects: - p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite - """ - if stdin is None and stdout is None and stderr is None: - return (-1, -1, -1, -1, -1, -1) - - p2cread, p2cwrite = -1, -1 - c2pread, c2pwrite = -1, -1 - errread, errwrite = -1, -1 - - with self._on_error_fd_closer() as err_close_fds: - if stdin is None: - p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) - if p2cread is None: - p2cread, _ = _winapi.CreatePipe(None, 0) - p2cread = Handle(p2cread) - err_close_fds.append(p2cread) - _winapi.CloseHandle(_) - elif stdin == PIPE: - p2cread, p2cwrite = _winapi.CreatePipe(None, 0) - p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) - err_close_fds.extend((p2cread, p2cwrite)) - elif stdin == DEVNULL: - p2cread = msvcrt.get_osfhandle(self._get_devnull()) - elif isinstance(stdin, int): - p2cread = msvcrt.get_osfhandle(stdin) - else: - # Assuming file-like object - p2cread = msvcrt.get_osfhandle(stdin.fileno()) - p2cread = self._make_inheritable(p2cread) - - if stdout is None: - c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) - if c2pwrite is None: - _, c2pwrite = _winapi.CreatePipe(None, 0) - c2pwrite = Handle(c2pwrite) - err_close_fds.append(c2pwrite) - _winapi.CloseHandle(_) - elif stdout == PIPE: - c2pread, c2pwrite = _winapi.CreatePipe(None, 0) - c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) - err_close_fds.extend((c2pread, c2pwrite)) - elif stdout == DEVNULL: - c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) - elif isinstance(stdout, int): - c2pwrite = msvcrt.get_osfhandle(stdout) - else: - # Assuming file-like object - c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) - c2pwrite = self._make_inheritable(c2pwrite) - - if stderr is None: - errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) - if errwrite is None: - _, errwrite = _winapi.CreatePipe(None, 0) - errwrite = Handle(errwrite) - err_close_fds.append(errwrite) - _winapi.CloseHandle(_) - elif stderr == PIPE: - errread, errwrite = _winapi.CreatePipe(None, 0) - errread, errwrite = Handle(errread), Handle(errwrite) - err_close_fds.extend((errread, errwrite)) - elif stderr == STDOUT: - errwrite = c2pwrite - elif stderr == DEVNULL: - errwrite = msvcrt.get_osfhandle(self._get_devnull()) - elif isinstance(stderr, int): - errwrite = msvcrt.get_osfhandle(stderr) - else: - # Assuming file-like object - errwrite = msvcrt.get_osfhandle(stderr.fileno()) - errwrite = self._make_inheritable(errwrite) - - return (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - - def _make_inheritable(self, handle): - """Return a duplicate of handle, which is inheritable""" - h = _winapi.DuplicateHandle( - _winapi.GetCurrentProcess(), handle, - _winapi.GetCurrentProcess(), 0, 1, - _winapi.DUPLICATE_SAME_ACCESS) - return Handle(h) - - - def _filter_handle_list(self, handle_list): - """Filter out console handles that can't be used - in lpAttributeList["handle_list"] and make sure the list - isn't empty. This also removes duplicate handles.""" - # An handle with it's lowest two bits set might be a special console - # handle that if passed in lpAttributeList["handle_list"], will - # cause it to fail. - return list({handle for handle in handle_list - if handle & 0x3 != 0x3 - or _winapi.GetFileType(handle) != - _winapi.FILE_TYPE_CHAR}) - - - def _execute_child(self, args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite, - unused_restore_signals, - unused_gid, unused_gids, unused_uid, - unused_umask, - unused_start_new_session, unused_process_group): - """Execute program (MS Windows version)""" - - assert not pass_fds, "pass_fds not supported on Windows." - - if isinstance(args, str): - pass - elif isinstance(args, bytes): - if shell: - raise TypeError('bytes args is not allowed on Windows') - args = list2cmdline([args]) - elif isinstance(args, os.PathLike): - if shell: - raise TypeError('path-like args is not allowed when ' - 'shell is true') - args = list2cmdline([args]) - else: - args = list2cmdline(args) - - if executable is not None: - executable = os.fsdecode(executable) - - # Process startup details - if startupinfo is None: - startupinfo = STARTUPINFO() - else: - # bpo-34044: Copy STARTUPINFO since it is modified above, - # so the caller can reuse it multiple times. - startupinfo = startupinfo.copy() - - use_std_handles = -1 not in (p2cread, c2pwrite, errwrite) - if use_std_handles: - startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES - startupinfo.hStdInput = p2cread - startupinfo.hStdOutput = c2pwrite - startupinfo.hStdError = errwrite - - attribute_list = startupinfo.lpAttributeList - have_handle_list = bool(attribute_list and - "handle_list" in attribute_list and - attribute_list["handle_list"]) - - # If we were given an handle_list or need to create one - if have_handle_list or (use_std_handles and close_fds): - if attribute_list is None: - attribute_list = startupinfo.lpAttributeList = {} - handle_list = attribute_list["handle_list"] = \ - list(attribute_list.get("handle_list", [])) - - if use_std_handles: - handle_list += [int(p2cread), int(c2pwrite), int(errwrite)] - - handle_list[:] = self._filter_handle_list(handle_list) - - if handle_list: - if not close_fds: - warnings.warn("startupinfo.lpAttributeList['handle_list'] " - "overriding close_fds", RuntimeWarning) - - # When using the handle_list we always request to inherit - # handles but the only handles that will be inherited are - # the ones in the handle_list - close_fds = False - - if shell: - startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW - startupinfo.wShowWindow = _winapi.SW_HIDE - if not executable: - # gh-101283: without a fully-qualified path, before Windows - # checks the system directories, it first looks in the - # application directory, and also the current directory if - # NeedCurrentDirectoryForExePathW(ExeName) is true, so try - # to avoid executing unqualified "cmd.exe". - comspec = os.environ.get('ComSpec') - if not comspec: - system_root = os.environ.get('SystemRoot', '') - comspec = os.path.join(system_root, 'System32', 'cmd.exe') - if not os.path.isabs(comspec): - raise FileNotFoundError('shell not found: neither %ComSpec% nor %SystemRoot% is set') - if os.path.isabs(comspec): - executable = comspec - else: - comspec = executable - - args = '{} /c "{}"'.format (comspec, args) - - if cwd is not None: - cwd = os.fsdecode(cwd) - - sys.audit("subprocess.Popen", executable, args, cwd, env) - - # Start the process - try: - hp, ht, pid, tid = _winapi.CreateProcess(executable, args, - # no special security - None, None, - int(not close_fds), - creationflags, - env, - cwd, - startupinfo) - finally: - # Child is launched. Close the parent's copy of those pipe - # handles that only the child should have open. You need - # to make sure that no handles to the write end of the - # output pipe are maintained in this process or else the - # pipe will not close when the child process exits and the - # ReadFile will hang. - self._close_pipe_fds(p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - # Retain the process handle, but close the thread handle - self._child_created = True - self._handle = Handle(hp) - self.pid = pid - _winapi.CloseHandle(ht) - - def _internal_poll(self, _deadstate=None, - _WaitForSingleObject=_winapi.WaitForSingleObject, - _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, - _GetExitCodeProcess=_winapi.GetExitCodeProcess): - """Check if child process has terminated. Returns returncode - attribute. - - This method is called by __del__, so it can only refer to objects - in its local scope. - - """ - if self.returncode is None: - if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: - self.returncode = _GetExitCodeProcess(self._handle) - return self.returncode - - - def _wait(self, timeout): - """Internal implementation of wait() on Windows.""" - if timeout is None: - timeout_millis = _winapi.INFINITE - elif timeout <= 0: - timeout_millis = 0 - else: - timeout_millis = int(timeout * 1000) - if self.returncode is None: - # API note: Returns immediately if timeout_millis == 0. - result = _winapi.WaitForSingleObject(self._handle, - timeout_millis) - if result == _winapi.WAIT_TIMEOUT: - raise TimeoutExpired(self.args, timeout) - self.returncode = _winapi.GetExitCodeProcess(self._handle) - return self.returncode - - - def _readerthread(self, fh, buffer): - buffer.append(fh.read()) - fh.close() - - - def _writerthread(self, input): - self._stdin_write(input) - - - def _communicate(self, input, endtime, orig_timeout): - # Start reader threads feeding into a list hanging off of this - # object, unless they've already been started. - if self.stdout and not hasattr(self, "_stdout_buff"): - self._stdout_buff = [] - self.stdout_thread = \ - threading.Thread(target=self._readerthread, - args=(self.stdout, self._stdout_buff)) - self.stdout_thread.daemon = True - self.stdout_thread.start() - if self.stderr and not hasattr(self, "_stderr_buff"): - self._stderr_buff = [] - self.stderr_thread = \ - threading.Thread(target=self._readerthread, - args=(self.stderr, self._stderr_buff)) - self.stderr_thread.daemon = True - self.stderr_thread.start() - - # Start writer thread to send input to stdin, unless already - # started. The thread writes input and closes stdin when done, - # or continues in the background on timeout. - if self.stdin and not hasattr(self, "_stdin_thread"): - self._stdin_thread = \ - threading.Thread(target=self._writerthread, - args=(input,)) - self._stdin_thread.daemon = True - self._stdin_thread.start() - - # Wait for the writer thread, or time out. If we time out, the - # thread remains writing and the fd left open in case the user - # calls communicate again. - if hasattr(self, "_stdin_thread"): - self._stdin_thread.join(self._remaining_time(endtime)) - if self._stdin_thread.is_alive(): - raise TimeoutExpired(self.args, orig_timeout) - - # Wait for the reader threads, or time out. If we time out, the - # threads remain reading and the fds left open in case the user - # calls communicate again. - if self.stdout is not None: - self.stdout_thread.join(self._remaining_time(endtime)) - if self.stdout_thread.is_alive(): - raise TimeoutExpired(self.args, orig_timeout) - if self.stderr is not None: - self.stderr_thread.join(self._remaining_time(endtime)) - if self.stderr_thread.is_alive(): - raise TimeoutExpired(self.args, orig_timeout) - - # Collect the output from and close both pipes, now that we know - # both have been read successfully. - stdout = None - stderr = None - if self.stdout: - stdout = self._stdout_buff - self.stdout.close() - if self.stderr: - stderr = self._stderr_buff - self.stderr.close() - - # All data exchanged. Translate lists into strings. - stdout = stdout[0] if stdout else None - stderr = stderr[0] if stderr else None - - return (stdout, stderr) - - def send_signal(self, sig): - """Send a signal to the process.""" - # Don't signal a process that we know has already died. - if self.returncode is not None: - return - if sig == signal.SIGTERM: - self.terminate() - elif sig == signal.CTRL_C_EVENT: - os.kill(self.pid, signal.CTRL_C_EVENT) - elif sig == signal.CTRL_BREAK_EVENT: - os.kill(self.pid, signal.CTRL_BREAK_EVENT) - else: - raise ValueError("Unsupported signal: {}".format(sig)) - - def terminate(self): - """Terminates the process.""" - # Don't terminate a process that we know has already died. - if self.returncode is not None: - return - try: - _winapi.TerminateProcess(self._handle, 1) - except PermissionError: - # ERROR_ACCESS_DENIED (winerror 5) is received when the - # process already died. - rc = _winapi.GetExitCodeProcess(self._handle) - if rc == _winapi.STILL_ACTIVE: - raise - self.returncode = rc - - kill = terminate - - else: - # - # POSIX methods - # - def _get_handles(self, stdin, stdout, stderr): - """Construct and return tuple with IO objects: - p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite - """ - p2cread, p2cwrite = -1, -1 - c2pread, c2pwrite = -1, -1 - errread, errwrite = -1, -1 - - with self._on_error_fd_closer() as err_close_fds: - if stdin is None: - pass - elif stdin == PIPE: - p2cread, p2cwrite = os.pipe() - err_close_fds.extend((p2cread, p2cwrite)) - if self.pipesize > 0 and hasattr(fcntl, "F_SETPIPE_SZ"): - fcntl.fcntl(p2cwrite, fcntl.F_SETPIPE_SZ, self.pipesize) - elif stdin == DEVNULL: - p2cread = self._get_devnull() - elif isinstance(stdin, int): - p2cread = stdin - else: - # Assuming file-like object - p2cread = stdin.fileno() - - if stdout is None: - pass - elif stdout == PIPE: - c2pread, c2pwrite = os.pipe() - err_close_fds.extend((c2pread, c2pwrite)) - if self.pipesize > 0 and hasattr(fcntl, "F_SETPIPE_SZ"): - fcntl.fcntl(c2pwrite, fcntl.F_SETPIPE_SZ, self.pipesize) - elif stdout == DEVNULL: - c2pwrite = self._get_devnull() - elif isinstance(stdout, int): - c2pwrite = stdout - else: - # Assuming file-like object - c2pwrite = stdout.fileno() - - if stderr is None: - pass - elif stderr == PIPE: - errread, errwrite = os.pipe() - err_close_fds.extend((errread, errwrite)) - if self.pipesize > 0 and hasattr(fcntl, "F_SETPIPE_SZ"): - fcntl.fcntl(errwrite, fcntl.F_SETPIPE_SZ, self.pipesize) - elif stderr == STDOUT: - if c2pwrite != -1: - errwrite = c2pwrite - else: # child's stdout is not set, use parent's stdout - errwrite = sys.__stdout__.fileno() - elif stderr == DEVNULL: - errwrite = self._get_devnull() - elif isinstance(stderr, int): - errwrite = stderr - else: - # Assuming file-like object - errwrite = stderr.fileno() - - return (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - - def _posix_spawn(self, args, executable, env, restore_signals, close_fds, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite): - """Execute program using os.posix_spawn().""" - kwargs = {} - if restore_signals: - # See _Py_RestoreSignals() in Python/pylifecycle.c - sigset = [] - for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'): - signum = getattr(signal, signame, None) - if signum is not None: - sigset.append(signum) - kwargs['setsigdef'] = sigset - - file_actions = [] - for fd in (p2cwrite, c2pread, errread): - if fd != -1: - file_actions.append((os.POSIX_SPAWN_CLOSE, fd)) - for fd, fd2 in ( - (p2cread, 0), - (c2pwrite, 1), - (errwrite, 2), - ): - if fd != -1: - file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2)) - - if close_fds: - file_actions.append((os.POSIX_SPAWN_CLOSEFROM, 3)) - - if file_actions: - kwargs['file_actions'] = file_actions - - self.pid = os.posix_spawn(executable, args, env, **kwargs) - self._child_created = True - - self._close_pipe_fds(p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - def _execute_child(self, args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, - startupinfo, creationflags, shell, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite, - restore_signals, - gid, gids, uid, umask, - start_new_session, process_group): - """Execute program (POSIX version)""" - - if isinstance(args, (str, bytes)): - args = [args] - elif isinstance(args, os.PathLike): - if shell: - raise TypeError('path-like args is not allowed when ' - 'shell is true') - args = [args] - else: - args = list(args) - - if shell: - # On Android the default shell is at '/system/bin/sh'. - unix_shell = ('/system/bin/sh' if - hasattr(sys, 'getandroidapilevel') else '/bin/sh') - args = [unix_shell, "-c"] + args - if executable: - args[0] = executable - - if executable is None: - executable = args[0] - - sys.audit("subprocess.Popen", executable, args, cwd, env) - - if (_USE_POSIX_SPAWN - and os.path.dirname(executable) - and preexec_fn is None - and (not close_fds or _HAVE_POSIX_SPAWN_CLOSEFROM) - and not pass_fds - and cwd is None - and (p2cread == -1 or p2cread > 2) - and (c2pwrite == -1 or c2pwrite > 2) - and (errwrite == -1 or errwrite > 2) - and not start_new_session - and process_group == -1 - and gid is None - and gids is None - and uid is None - and umask < 0): - self._posix_spawn(args, executable, env, restore_signals, close_fds, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - return - - orig_executable = executable - - # For transferring possible exec failure from child to parent. - # Data format: "exception name:hex errno:description" - # Pickle is not used; it is complex and involves memory allocation. - errpipe_read, errpipe_write = os.pipe() - # errpipe_write must not be in the standard io 0, 1, or 2 fd range. - low_fds_to_close = [] - while errpipe_write < 3: - low_fds_to_close.append(errpipe_write) - errpipe_write = os.dup(errpipe_write) - for low_fd in low_fds_to_close: - os.close(low_fd) - try: - try: - # We must avoid complex work that could involve - # malloc or free in the child process to avoid - # potential deadlocks, thus we do all this here. - # and pass it to fork_exec() - - if env is not None: - env_list = [] - for k, v in env.items(): - k = os.fsencode(k) - if b'=' in k: - raise ValueError("illegal environment variable name") - env_list.append(k + b'=' + os.fsencode(v)) - else: - env_list = None # Use execv instead of execve. - executable = os.fsencode(executable) - if os.path.dirname(executable): - executable_list = (executable,) - else: - # This matches the behavior of os._execvpe(). - executable_list = tuple( - os.path.join(os.fsencode(dir), executable) - for dir in os.get_exec_path(env)) - fds_to_keep = set(pass_fds) - fds_to_keep.add(errpipe_write) - self.pid = _fork_exec( - args, executable_list, - close_fds, tuple(sorted(map(int, fds_to_keep))), - cwd, env_list, - p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite, - errpipe_read, errpipe_write, - restore_signals, start_new_session, - process_group, gid, gids, uid, umask, - preexec_fn) - self._child_created = True - finally: - # be sure the FD is closed no matter what - os.close(errpipe_write) - - self._close_pipe_fds(p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - # Wait for exec to fail or succeed; possibly raising an - # exception (limited in size) - errpipe_data = bytearray() - while True: - part = os.read(errpipe_read, 50000) - errpipe_data += part - if not part or len(errpipe_data) > 50000: - break - finally: - # be sure the FD is closed no matter what - os.close(errpipe_read) - - if errpipe_data: - try: - pid, sts = os.waitpid(self.pid, 0) - if pid == self.pid: - self._handle_exitstatus(sts) - else: - self.returncode = sys.maxsize - except ChildProcessError: - pass - - try: - exception_name, hex_errno, err_msg = ( - errpipe_data.split(b':', 2)) - # The encoding here should match the encoding - # written in by the subprocess implementations - # like _posixsubprocess - err_msg = err_msg.decode() - except ValueError: - exception_name = b'SubprocessError' - hex_errno = b'0' - err_msg = 'Bad exception data from child: {!r}'.format( - bytes(errpipe_data)) - child_exception_type = getattr( - builtins, exception_name.decode('ascii'), - SubprocessError) - if issubclass(child_exception_type, OSError) and hex_errno: - errno_num = int(hex_errno, 16) - if err_msg == "noexec:chdir": - err_msg = "" - # The error must be from chdir(cwd). - err_filename = cwd - elif err_msg == "noexec": - err_msg = "" - err_filename = None - else: - err_filename = orig_executable - if errno_num != 0: - err_msg = os.strerror(errno_num) - if err_filename is not None: - raise child_exception_type(errno_num, err_msg, err_filename) - else: - raise child_exception_type(errno_num, err_msg) - raise child_exception_type(err_msg) - - - def _handle_exitstatus(self, sts, _del_safe=_del_safe): - """All callers to this function MUST hold self._waitpid_lock.""" - # This method is called (indirectly) by __del__, so it cannot - # refer to anything outside of its local scope. - if _del_safe.WIFSTOPPED(sts): - self.returncode = -_del_safe.WSTOPSIG(sts) - else: - self.returncode = _del_safe.waitstatus_to_exitcode(sts) - - def _internal_poll(self, _deadstate=None, _del_safe=_del_safe): - """Check if child process has terminated. Returns returncode - attribute. - - This method is called by __del__, so it cannot reference anything - outside of the local scope (nor can any methods it calls). - - """ - if self.returncode is None: - if not self._waitpid_lock.acquire(False): - # Something else is busy calling waitpid. Don't allow two - # at once. We know nothing yet. - return None - try: - if self.returncode is not None: - return self.returncode # Another thread waited. - pid, sts = _del_safe.waitpid(self.pid, _del_safe.WNOHANG) - if pid == self.pid: - self._handle_exitstatus(sts) - except OSError as e: - if _deadstate is not None: - self.returncode = _deadstate - elif e.errno == _del_safe.ECHILD: - # This happens if SIGCLD is set to be ignored or - # waiting for child processes has otherwise been - # disabled for our process. This child is dead, we - # can't get the status. - # http://bugs.python.org/issue15756 - self.returncode = 0 - finally: - self._waitpid_lock.release() - return self.returncode - - - def _try_wait(self, wait_flags): - """All callers to this function MUST hold self._waitpid_lock.""" - try: - (pid, sts) = os.waitpid(self.pid, wait_flags) - except ChildProcessError: - # This happens if SIGCLD is set to be ignored or waiting - # for child processes has otherwise been disabled for our - # process. This child is dead, we can't get the status. - pid = self.pid - sts = 0 - return (pid, sts) - - - def _wait(self, timeout): - """Internal implementation of wait() on POSIX.""" - if self.returncode is not None: - return self.returncode - - if timeout is not None: - endtime = _time() + timeout - # Enter a busy loop if we have a timeout. This busy loop was - # cribbed from Lib/threading.py in Thread.wait() at r71065. - delay = 0.0005 # 500 us -> initial delay of 1 ms - while True: - if self._waitpid_lock.acquire(False): - try: - if self.returncode is not None: - break # Another thread waited. - (pid, sts) = self._try_wait(os.WNOHANG) - assert pid == self.pid or pid == 0 - if pid == self.pid: - self._handle_exitstatus(sts) - break - finally: - self._waitpid_lock.release() - remaining = self._remaining_time(endtime) - if remaining <= 0: - raise TimeoutExpired(self.args, timeout) - delay = min(delay * 2, remaining, .05) - time.sleep(delay) - else: - while self.returncode is None: - with self._waitpid_lock: - if self.returncode is not None: - break # Another thread waited. - (pid, sts) = self._try_wait(0) - # Check the pid and loop as waitpid has been known to - # return 0 even without WNOHANG in odd situations. - # http://bugs.python.org/issue14396. - if pid == self.pid: - self._handle_exitstatus(sts) - return self.returncode - - - def _communicate(self, input, endtime, orig_timeout): - if self.stdin and not self._communication_started: - # Flush stdio buffer. This might block, if the user has - # been writing to .stdin in an uncontrolled fashion. - try: - self.stdin.flush() - except BrokenPipeError: - pass # communicate() must ignore BrokenPipeError. - except ValueError: - # ignore ValueError: I/O operation on closed file. - if not self.stdin.closed: - raise - if not input: - try: - self.stdin.close() - except BrokenPipeError: - pass # communicate() must ignore BrokenPipeError. - - stdout = None - stderr = None - - # Only create this mapping if we haven't already. - if not self._communication_started: - self._fileobj2output = {} - if self.stdout: - self._fileobj2output[self.stdout] = [] - if self.stderr: - self._fileobj2output[self.stderr] = [] - - if self.stdout: - stdout = self._fileobj2output[self.stdout] - if self.stderr: - stderr = self._fileobj2output[self.stderr] - - self._save_input(input) - - if self._input: - if not isinstance(self._input, memoryview): - input_view = memoryview(self._input) - else: - input_view = self._input.cast("b") # byte input required - - with _PopenSelector() as selector: - if self.stdin and not self.stdin.closed and self._input: - selector.register(self.stdin, selectors.EVENT_WRITE) - if self.stdout and not self.stdout.closed: - selector.register(self.stdout, selectors.EVENT_READ) - if self.stderr and not self.stderr.closed: - selector.register(self.stderr, selectors.EVENT_READ) - - while selector.get_map(): - timeout = self._remaining_time(endtime) - if timeout is not None and timeout <= 0: - self._check_timeout(endtime, orig_timeout, - stdout, stderr, - skip_check_and_raise=True) - raise RuntimeError( # Impossible :) - '_check_timeout(..., skip_check_and_raise=True) ' - 'failed to raise TimeoutExpired.') - - ready = selector.select(timeout) - self._check_timeout(endtime, orig_timeout, stdout, stderr) - - # XXX Rewrite these to use non-blocking I/O on the file - # objects; they are no longer using C stdio! - - for key, events in ready: - if key.fileobj is self.stdin: - chunk = input_view[self._input_offset : - self._input_offset + _PIPE_BUF] - try: - self._input_offset += os.write(key.fd, chunk) - except BrokenPipeError: - selector.unregister(key.fileobj) - key.fileobj.close() - else: - if self._input_offset >= len(input_view): - selector.unregister(key.fileobj) - key.fileobj.close() - elif key.fileobj in (self.stdout, self.stderr): - data = os.read(key.fd, 32768) - if not data: - selector.unregister(key.fileobj) - key.fileobj.close() - self._fileobj2output[key.fileobj].append(data) - try: - self.wait(timeout=self._remaining_time(endtime)) - except TimeoutExpired as exc: - exc.timeout = orig_timeout - raise - - # All data exchanged. Translate lists into strings. - if stdout is not None: - stdout = b''.join(stdout) - if stderr is not None: - stderr = b''.join(stderr) - - # Translate newlines, if requested. - # This also turns bytes into strings. - if self.text_mode: - if stdout is not None: - stdout = self._translate_newlines(stdout, - self.stdout.encoding, - self.stdout.errors) - if stderr is not None: - stderr = self._translate_newlines(stderr, - self.stderr.encoding, - self.stderr.errors) - - return (stdout, stderr) - - - def _save_input(self, input): - # This method is called from the _communicate_with_*() methods - # so that if we time out while communicating, we can continue - # sending input if we retry. - if self.stdin and self._input is None: - self._input_offset = 0 - self._input = input - if input is not None and self.text_mode: - self._input = self._input.encode(self.stdin.encoding, - self.stdin.errors) - - - def send_signal(self, sig): - """Send a signal to the process.""" - # bpo-38630: Polling reduces the risk of sending a signal to the - # wrong process if the process completed, the Popen.returncode - # attribute is still None, and the pid has been reassigned - # (recycled) to a new different process. This race condition can - # happens in two cases. - # - # Case 1. Thread A calls Popen.poll(), thread B calls - # Popen.send_signal(). In thread A, waitpid() succeed and returns - # the exit status. Thread B calls kill() because poll() in thread A - # did not set returncode yet. Calling poll() in thread B prevents - # the race condition thanks to Popen._waitpid_lock. - # - # Case 2. waitpid(pid, 0) has been called directly, without - # using Popen methods: returncode is still None is this case. - # Calling Popen.poll() will set returncode to a default value, - # since waitpid() fails with ProcessLookupError. - self.poll() - if self.returncode is not None: - # Skip signalling a process that we know has already died. - return - - # The race condition can still happen if the race condition - # described above happens between the returncode test - # and the kill() call. - try: - os.kill(self.pid, sig) - except ProcessLookupError: - # Suppress the race condition error; bpo-40550. - pass - - def terminate(self): - """Terminate the process with SIGTERM - """ - self.send_signal(signal.SIGTERM) - - def kill(self): - """Kill the process with SIGKILL - """ - self.send_signal(signal.SIGKILL) diff --git a/Python314_4_x86_Template/Lib/symtable.py b/Python314_4_x86_Template/Lib/symtable.py deleted file mode 100644 index 7a30e1ac4..000000000 --- a/Python314_4_x86_Template/Lib/symtable.py +++ /dev/null @@ -1,451 +0,0 @@ -"""Interface to the compiler's internal symbol tables""" - -import _symtable -from _symtable import ( - USE, - DEF_GLOBAL, # noqa: F401 - DEF_NONLOCAL, DEF_LOCAL, - DEF_PARAM, DEF_TYPE_PARAM, DEF_FREE_CLASS, - DEF_IMPORT, DEF_BOUND, DEF_ANNOT, - DEF_COMP_ITER, DEF_COMP_CELL, - SCOPE_OFF, SCOPE_MASK, - FREE, LOCAL, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL -) - -import weakref -from enum import StrEnum - -__all__ = ["symtable", "SymbolTableType", "SymbolTable", "Class", "Function", "Symbol"] - -def symtable(code, filename, compile_type): - """ Return the toplevel *SymbolTable* for the source code. - - *filename* is the name of the file with the code - and *compile_type* is the *compile()* mode argument. - """ - top = _symtable.symtable(code, filename, compile_type) - return _newSymbolTable(top, filename) - -class SymbolTableFactory: - def __init__(self): - self.__memo = weakref.WeakValueDictionary() - - def new(self, table, filename): - if table.type == _symtable.TYPE_FUNCTION: - return Function(table, filename) - if table.type == _symtable.TYPE_CLASS: - return Class(table, filename) - return SymbolTable(table, filename) - - def __call__(self, table, filename): - key = table, filename - obj = self.__memo.get(key, None) - if obj is None: - obj = self.__memo[key] = self.new(table, filename) - return obj - -_newSymbolTable = SymbolTableFactory() - - -class SymbolTableType(StrEnum): - MODULE = "module" - FUNCTION = "function" - CLASS = "class" - ANNOTATION = "annotation" - TYPE_ALIAS = "type alias" - TYPE_PARAMETERS = "type parameters" - TYPE_VARIABLE = "type variable" - - -class SymbolTable: - - def __init__(self, raw_table, filename): - self._table = raw_table - self._filename = filename - self._symbols = {} - - def __repr__(self): - if self.__class__ == SymbolTable: - kind = "" - else: - kind = "%s " % self.__class__.__name__ - - if self._table.name == "top": - return "<{0}SymbolTable for module {1}>".format(kind, self._filename) - else: - return "<{0}SymbolTable for {1} in {2}>".format(kind, - self._table.name, - self._filename) - - def get_type(self): - """Return the type of the symbol table. - - The value returned is one of the values in - the ``SymbolTableType`` enumeration. - """ - if self._table.type == _symtable.TYPE_MODULE: - return SymbolTableType.MODULE - if self._table.type == _symtable.TYPE_FUNCTION: - return SymbolTableType.FUNCTION - if self._table.type == _symtable.TYPE_CLASS: - return SymbolTableType.CLASS - if self._table.type == _symtable.TYPE_ANNOTATION: - return SymbolTableType.ANNOTATION - if self._table.type == _symtable.TYPE_TYPE_ALIAS: - return SymbolTableType.TYPE_ALIAS - if self._table.type == _symtable.TYPE_TYPE_PARAMETERS: - return SymbolTableType.TYPE_PARAMETERS - if self._table.type == _symtable.TYPE_TYPE_VARIABLE: - return SymbolTableType.TYPE_VARIABLE - assert False, f"unexpected type: {self._table.type}" - - def get_id(self): - """Return an identifier for the table. - """ - return self._table.id - - def get_name(self): - """Return the table's name. - - This corresponds to the name of the class, function - or 'top' if the table is for a class, function or - global respectively. - """ - return self._table.name - - def get_lineno(self): - """Return the number of the first line in the - block for the table. - """ - return self._table.lineno - - def is_optimized(self): - """Return *True* if the locals in the table - are optimizable. - """ - return bool(self._table.type == _symtable.TYPE_FUNCTION) - - def is_nested(self): - """Return *True* if the block is a nested class - or function.""" - return bool(self._table.nested) - - def has_children(self): - """Return *True* if the block has nested namespaces. - """ - return bool(self._table.children) - - def get_identifiers(self): - """Return a view object containing the names of symbols in the table. - """ - return self._table.symbols.keys() - - def lookup(self, name): - """Lookup a *name* in the table. - - Returns a *Symbol* instance. - """ - sym = self._symbols.get(name) - if sym is None: - flags = self._table.symbols[name] - namespaces = self.__check_children(name) - module_scope = (self._table.name == "top") - sym = self._symbols[name] = Symbol(name, flags, namespaces, - module_scope=module_scope) - return sym - - def get_symbols(self): - """Return a list of *Symbol* instances for - names in the table. - """ - return [self.lookup(ident) for ident in self.get_identifiers()] - - def __check_children(self, name): - return [_newSymbolTable(st, self._filename) - for st in self._table.children - if st.name == name] - - def get_children(self): - """Return a list of the nested symbol tables. - """ - return [_newSymbolTable(st, self._filename) - for st in self._table.children] - - -def _get_scope(flags): # like _PyST_GetScope() - return (flags >> SCOPE_OFF) & SCOPE_MASK - - -class Function(SymbolTable): - - # Default values for instance variables - __params = None - __locals = None - __frees = None - __globals = None - __nonlocals = None - - def __idents_matching(self, test_func): - return tuple(ident for ident in self.get_identifiers() - if test_func(self._table.symbols[ident])) - - def get_parameters(self): - """Return a tuple of parameters to the function. - """ - if self.__params is None: - self.__params = self.__idents_matching(lambda x:x & DEF_PARAM) - return self.__params - - def get_locals(self): - """Return a tuple of locals in the function. - """ - if self.__locals is None: - locs = (LOCAL, CELL) - test = lambda x: _get_scope(x) in locs - self.__locals = self.__idents_matching(test) - return self.__locals - - def get_globals(self): - """Return a tuple of globals in the function. - """ - if self.__globals is None: - glob = (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) - test = lambda x: _get_scope(x) in glob - self.__globals = self.__idents_matching(test) - return self.__globals - - def get_nonlocals(self): - """Return a tuple of nonlocals in the function. - """ - if self.__nonlocals is None: - self.__nonlocals = self.__idents_matching(lambda x:x & DEF_NONLOCAL) - return self.__nonlocals - - def get_frees(self): - """Return a tuple of free variables in the function. - """ - if self.__frees is None: - is_free = lambda x: _get_scope(x) == FREE - self.__frees = self.__idents_matching(is_free) - return self.__frees - - -class Class(SymbolTable): - - __methods = None - - def get_methods(self): - """Return a tuple of methods declared in the class. - """ - import warnings - typename = f'{self.__class__.__module__}.{self.__class__.__name__}' - warnings.warn(f'{typename}.get_methods() is deprecated ' - f'and will be removed in Python 3.16.', - DeprecationWarning, stacklevel=2) - - if self.__methods is None: - d = {} - - def is_local_symbol(ident): - flags = self._table.symbols.get(ident, 0) - return ((flags >> SCOPE_OFF) & SCOPE_MASK) == LOCAL - - for st in self._table.children: - # pick the function-like symbols that are local identifiers - if is_local_symbol(st.name): - match st.type: - case _symtable.TYPE_FUNCTION: - # generators are of type TYPE_FUNCTION with a ".0" - # parameter as a first parameter (which makes them - # distinguishable from a function named 'genexpr') - if st.name == 'genexpr' and '.0' in st.varnames: - continue - d[st.name] = 1 - case _symtable.TYPE_TYPE_PARAMETERS: - # Get the function-def block in the annotation - # scope 'st' with the same identifier, if any. - scope_name = st.name - for c in st.children: - if c.name == scope_name and c.type == _symtable.TYPE_FUNCTION: - # A generic generator of type TYPE_FUNCTION - # cannot be a direct child of 'st' (but it - # can be a descendant), e.g.: - # - # class A: - # type genexpr[genexpr] = (x for x in []) - assert scope_name != 'genexpr' or '.0' not in c.varnames - d[scope_name] = 1 - break - self.__methods = tuple(d) - return self.__methods - - -class Symbol: - - def __init__(self, name, flags, namespaces=None, *, module_scope=False): - self.__name = name - self.__flags = flags - self.__scope = _get_scope(flags) - self.__namespaces = namespaces or () - self.__module_scope = module_scope - - def __repr__(self): - flags_str = '|'.join(self._flags_str()) - return f'<symbol {self.__name!r}: {self._scope_str()}, {flags_str}>' - - def _scope_str(self): - return _scopes_value_to_name.get(self.__scope) or str(self.__scope) - - def _flags_str(self): - for flagname, flagvalue in _flags: - if self.__flags & flagvalue == flagvalue: - yield flagname - - def get_name(self): - """Return a name of a symbol. - """ - return self.__name - - def is_referenced(self): - """Return *True* if the symbol is used in - its block. - """ - return bool(self.__flags & USE) - - def is_parameter(self): - """Return *True* if the symbol is a parameter. - """ - return bool(self.__flags & DEF_PARAM) - - def is_type_parameter(self): - """Return *True* if the symbol is a type parameter. - """ - return bool(self.__flags & DEF_TYPE_PARAM) - - def is_global(self): - """Return *True* if the symbol is global. - """ - return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) - or (self.__module_scope and self.__flags & DEF_BOUND)) - - def is_nonlocal(self): - """Return *True* if the symbol is nonlocal.""" - return bool(self.__flags & DEF_NONLOCAL) - - def is_declared_global(self): - """Return *True* if the symbol is declared global - with a global statement.""" - return bool(self.__scope == GLOBAL_EXPLICIT) - - def is_local(self): - """Return *True* if the symbol is local. - """ - return bool(self.__scope in (LOCAL, CELL) - or (self.__module_scope and self.__flags & DEF_BOUND)) - - def is_annotated(self): - """Return *True* if the symbol is annotated. - """ - return bool(self.__flags & DEF_ANNOT) - - def is_free(self): - """Return *True* if a referenced symbol is - not assigned to. - """ - return bool(self.__scope == FREE) - - def is_free_class(self): - """Return *True* if a class-scoped symbol is free from - the perspective of a method.""" - return bool(self.__flags & DEF_FREE_CLASS) - - def is_imported(self): - """Return *True* if the symbol is created from - an import statement. - """ - return bool(self.__flags & DEF_IMPORT) - - def is_assigned(self): - """Return *True* if a symbol is assigned to.""" - return bool(self.__flags & DEF_LOCAL) - - def is_comp_iter(self): - """Return *True* if the symbol is a comprehension iteration variable. - """ - return bool(self.__flags & DEF_COMP_ITER) - - def is_comp_cell(self): - """Return *True* if the symbol is a cell in an inlined comprehension. - """ - return bool(self.__flags & DEF_COMP_CELL) - - def is_namespace(self): - """Returns *True* if name binding introduces new namespace. - - If the name is used as the target of a function or class - statement, this will be true. - - Note that a single name can be bound to multiple objects. If - is_namespace() is true, the name may also be bound to other - objects, like an int or list, that does not introduce a new - namespace. - """ - return bool(self.__namespaces) - - def get_namespaces(self): - """Return a list of namespaces bound to this name""" - return self.__namespaces - - def get_namespace(self): - """Return the single namespace bound to this name. - - Raises ValueError if the name is bound to multiple namespaces - or no namespace. - """ - if len(self.__namespaces) == 0: - raise ValueError("name is not bound to any namespaces") - elif len(self.__namespaces) > 1: - raise ValueError("name is bound to multiple namespaces") - else: - return self.__namespaces[0] - - -_flags = [('USE', USE)] -_flags.extend(kv for kv in globals().items() if kv[0].startswith('DEF_')) -_scopes_names = ('FREE', 'LOCAL', 'GLOBAL_IMPLICIT', 'GLOBAL_EXPLICIT', 'CELL') -_scopes_value_to_name = {globals()[n]: n for n in _scopes_names} - - -def main(args): - import sys - def print_symbols(table, level=0): - indent = ' ' * level - nested = "nested " if table.is_nested() else "" - if table.get_type() == 'module': - what = f'from file {table._filename!r}' - else: - what = f'{table.get_name()!r}' - print(f'{indent}symbol table for {nested}{table.get_type()} {what}:') - for ident in table.get_identifiers(): - symbol = table.lookup(ident) - flags = ', '.join(symbol._flags_str()).lower() - print(f' {indent}{symbol._scope_str().lower()} symbol {symbol.get_name()!r}: {flags}') - print() - - for table2 in table.get_children(): - print_symbols(table2, level + 1) - - for filename in args or ['-']: - if filename == '-': - src = sys.stdin.read() - filename = '<stdin>' - else: - with open(filename, 'rb') as f: - src = f.read() - mod = symtable(src, filename, 'exec') - print_symbols(mod) - - -if __name__ == "__main__": - import sys - main(sys.argv[1:]) diff --git a/Python314_4_x86_Template/Lib/sysconfig/__init__.py b/Python314_4_x86_Template/Lib/sysconfig/__init__.py deleted file mode 100644 index faf8273bd..000000000 --- a/Python314_4_x86_Template/Lib/sysconfig/__init__.py +++ /dev/null @@ -1,797 +0,0 @@ -"""Access to Python's configuration information.""" - -import os -import sys -import threading -from os.path import realpath - -__all__ = [ - 'get_config_h_filename', - 'get_config_var', - 'get_config_vars', - 'get_makefile_filename', - 'get_path', - 'get_path_names', - 'get_paths', - 'get_platform', - 'get_python_version', - 'get_scheme_names', - 'parse_config_h', -] - -# Keys for get_config_var() that are never converted to Python integers. -_ALWAYS_STR = { - 'IPHONEOS_DEPLOYMENT_TARGET', - 'MACOSX_DEPLOYMENT_TARGET', -} - -_INSTALL_SCHEMES = { - 'posix_prefix': { - 'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'purelib': '{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'include': - '{installed_base}/include/{implementation_lower}{py_version_short}{abiflags}', - 'platinclude': - '{installed_platbase}/include/{implementation_lower}{py_version_short}{abiflags}', - 'scripts': '{base}/bin', - 'data': '{base}', - }, - 'posix_home': { - 'stdlib': '{installed_base}/lib/{implementation_lower}', - 'platstdlib': '{base}/lib/{implementation_lower}', - 'purelib': '{base}/lib/{implementation_lower}', - 'platlib': '{base}/lib/{implementation_lower}', - 'include': '{installed_base}/include/{implementation_lower}', - 'platinclude': '{installed_base}/include/{implementation_lower}', - 'scripts': '{base}/bin', - 'data': '{base}', - }, - 'nt': { - 'stdlib': '{installed_base}/Lib', - 'platstdlib': '{base}/Lib', - 'purelib': '{base}/Lib/site-packages', - 'platlib': '{base}/Lib/site-packages', - 'include': '{installed_base}/Include', - 'platinclude': '{installed_base}/Include', - 'scripts': '{base}/Scripts', - 'data': '{base}', - }, - - # Downstream distributors can overwrite the default install scheme. - # This is done to support downstream modifications where distributors change - # the installation layout (eg. different site-packages directory). - # So, distributors will change the default scheme to one that correctly - # represents their layout. - # This presents an issue for projects/people that need to bootstrap virtual - # environments, like virtualenv. As distributors might now be customizing - # the default install scheme, there is no guarantee that the information - # returned by sysconfig.get_default_scheme/get_paths is correct for - # a virtual environment, the only guarantee we have is that it is correct - # for the *current* environment. When bootstrapping a virtual environment, - # we need to know its layout, so that we can place the files in the - # correct locations. - # The "*_venv" install scheme is a scheme to bootstrap virtual environments, - # essentially identical to the default posix_prefix/nt schemes. - # Downstream distributors who patch posix_prefix/nt scheme are encouraged to - # leave the following schemes unchanged - 'posix_venv': { - 'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'purelib': '{base}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'include': - '{installed_base}/include/{implementation_lower}{py_version_short}{abiflags}', - 'platinclude': - '{installed_platbase}/include/{implementation_lower}{py_version_short}{abiflags}', - 'scripts': '{base}/bin', - 'data': '{base}', - }, - 'nt_venv': { - 'stdlib': '{installed_base}/Lib', - 'platstdlib': '{base}/Lib', - 'purelib': '{base}/Lib/site-packages', - 'platlib': '{base}/Lib/site-packages', - 'include': '{installed_base}/Include', - 'platinclude': '{installed_base}/Include', - 'scripts': '{base}/Scripts', - 'data': '{base}', - }, - } - -# For the OS-native venv scheme, we essentially provide an alias: -if os.name == 'nt': - _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv'] -else: - _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] - -def _get_implementation(): - return 'Python' - -# NOTE: site.py has copy of this function. -# Sync it when modify this function. -def _getuserbase(): - env_base = os.environ.get("PYTHONUSERBASE", None) - if env_base: - return env_base - - # Emscripten, iOS, tvOS, VxWorks, WASI, and watchOS have no home directories. - # Use _PYTHON_HOST_PLATFORM to get the correct platform when cross-compiling. - system_name = os.environ.get('_PYTHON_HOST_PLATFORM', sys.platform).split('-')[0] - if system_name in {"emscripten", "ios", "tvos", "vxworks", "wasi", "watchos"}: - return None - - def joinuser(*args): - return os.path.expanduser(os.path.join(*args)) - - if os.name == "nt": - base = os.environ.get("APPDATA") or "~" - return joinuser(base, _get_implementation()) - - if sys.platform == "darwin" and sys._framework: - return joinuser("~", "Library", sys._framework, - f"{sys.version_info[0]}.{sys.version_info[1]}") - - return joinuser("~", ".local") - -_HAS_USER_BASE = (_getuserbase() is not None) - -if _HAS_USER_BASE: - _INSTALL_SCHEMES |= { - # NOTE: When modifying "purelib" scheme, update site._get_path() too. - 'nt_user': { - 'stdlib': '{userbase}/{implementation}{py_version_nodot_plat}', - 'platstdlib': '{userbase}/{implementation}{py_version_nodot_plat}', - 'purelib': '{userbase}/{implementation}{py_version_nodot_plat}/site-packages', - 'platlib': '{userbase}/{implementation}{py_version_nodot_plat}/site-packages', - 'include': '{userbase}/{implementation}{py_version_nodot_plat}/Include', - 'scripts': '{userbase}/{implementation}{py_version_nodot_plat}/Scripts', - 'data': '{userbase}', - }, - 'posix_user': { - 'stdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'platstdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}', - 'purelib': '{userbase}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'platlib': '{userbase}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages', - 'include': '{userbase}/include/{implementation_lower}{py_version_short}{abi_thread}', - 'scripts': '{userbase}/bin', - 'data': '{userbase}', - }, - 'osx_framework_user': { - 'stdlib': '{userbase}/lib/{implementation_lower}', - 'platstdlib': '{userbase}/lib/{implementation_lower}', - 'purelib': '{userbase}/lib/{implementation_lower}/site-packages', - 'platlib': '{userbase}/lib/{implementation_lower}/site-packages', - 'include': '{userbase}/include/{implementation_lower}{py_version_short}', - 'scripts': '{userbase}/bin', - 'data': '{userbase}', - }, - } - -_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', - 'scripts', 'data') - -_PY_VERSION = sys.version.split()[0] -_PY_VERSION_SHORT = f'{sys.version_info[0]}.{sys.version_info[1]}' -_PY_VERSION_SHORT_NO_DOT = f'{sys.version_info[0]}{sys.version_info[1]}' -_BASE_PREFIX = os.path.normpath(sys.base_prefix) -_BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) -# Mutex guarding initialization of _CONFIG_VARS. -_CONFIG_VARS_LOCK = threading.RLock() -_CONFIG_VARS = None -# True iff _CONFIG_VARS has been fully initialized. -_CONFIG_VARS_INITIALIZED = False -_USER_BASE = None - - -def _safe_realpath(path): - try: - return realpath(path) - except OSError: - return path - -if sys.executable: - _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) -else: - # sys.executable can be empty if argv[0] has been changed and Python is - # unable to retrieve the real program name - _PROJECT_BASE = _safe_realpath(os.getcwd()) - -# In a virtual environment, `sys._home` gives us the target directory -# `_PROJECT_BASE` for the executable that created it when the virtual -# python is an actual executable ('venv --copies' or Windows). -_sys_home = getattr(sys, '_home', None) -if _sys_home: - _PROJECT_BASE = _sys_home - -if os.name == 'nt': - # In a source build, the executable is in a subdirectory of the root - # that we want (<root>\PCbuild\<platname>). - # `_BASE_PREFIX` is used as the base installation is where the source - # will be. The realpath is needed to prevent mount point confusion - # that can occur with just string comparisons. - if _safe_realpath(_PROJECT_BASE).startswith( - _safe_realpath(f'{_BASE_PREFIX}\\PCbuild')): - _PROJECT_BASE = _BASE_PREFIX - -# set for cross builds -if "_PYTHON_PROJECT_BASE" in os.environ: - _PROJECT_BASE = _safe_realpath(os.environ["_PYTHON_PROJECT_BASE"]) - -def is_python_build(check_home=None): - if check_home is not None: - import warnings - warnings.warn( - ( - 'The check_home argument of sysconfig.is_python_build is ' - 'deprecated and its value is ignored. ' - 'It will be removed in Python 3.15.' - ), - DeprecationWarning, - stacklevel=2, - ) - for fn in ("Setup", "Setup.local"): - if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): - return True - return False - -_PYTHON_BUILD = is_python_build() - -if _PYTHON_BUILD: - for scheme in ('posix_prefix', 'posix_home'): - # On POSIX-y platforms, Python will: - # - Build from .h files in 'headers' (which is only added to the - # scheme when building CPython) - # - Install .h files to 'include' - scheme = _INSTALL_SCHEMES[scheme] - scheme['headers'] = scheme['include'] - scheme['include'] = '{srcdir}/Include' - scheme['platinclude'] = '{projectbase}/.' - del scheme - - -def _subst_vars(s, local_vars): - try: - return s.format(**local_vars) - except KeyError as var: - try: - return s.format(**os.environ) - except KeyError: - raise AttributeError(f'{var}') from None - -def _extend_dict(target_dict, other_dict): - target_keys = target_dict.keys() - for key, value in other_dict.items(): - if key in target_keys: - continue - target_dict[key] = value - - -def _expand_vars(scheme, vars): - res = {} - if vars is None: - vars = {} - _extend_dict(vars, get_config_vars()) - if os.name == 'nt': - # On Windows we want to substitute 'lib' for schemes rather - # than the native value (without modifying vars, in case it - # was passed in) - vars = vars | {'platlibdir': 'lib'} - - for key, value in _INSTALL_SCHEMES[scheme].items(): - if os.name in ('posix', 'nt'): - value = os.path.expanduser(value) - res[key] = os.path.normpath(_subst_vars(value, vars)) - return res - - -def _get_preferred_schemes(): - if os.name == 'nt': - return { - 'prefix': 'nt', - 'home': 'posix_home', - 'user': 'nt_user', - } - if sys.platform == 'darwin' and sys._framework: - return { - 'prefix': 'posix_prefix', - 'home': 'posix_home', - 'user': 'osx_framework_user', - } - - return { - 'prefix': 'posix_prefix', - 'home': 'posix_home', - 'user': 'posix_user', - } - - -def get_preferred_scheme(key): - if key == 'prefix' and sys.prefix != sys.base_prefix: - return 'venv' - scheme = _get_preferred_schemes()[key] - if scheme not in _INSTALL_SCHEMES: - raise ValueError( - f"{key!r} returned {scheme!r}, which is not a valid scheme " - f"on this platform" - ) - return scheme - - -def get_default_scheme(): - return get_preferred_scheme('prefix') - - -def get_makefile_filename(): - """Return the path of the Makefile.""" - - # GH-127429: When cross-compiling, use the Makefile from the target, instead of the host Python. - if cross_base := os.environ.get('_PYTHON_PROJECT_BASE'): - return os.path.join(cross_base, 'Makefile') - - if _PYTHON_BUILD: - return os.path.join(_PROJECT_BASE, "Makefile") - - if hasattr(sys, 'abiflags'): - config_dir_name = f'config-{_PY_VERSION_SHORT}{sys.abiflags}' - else: - config_dir_name = 'config' - - if hasattr(sys.implementation, '_multiarch'): - config_dir_name += f'-{sys.implementation._multiarch}' - - return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') - - -def _import_from_directory(path, name): - if name not in sys.modules: - import importlib.machinery - import importlib.util - - spec = importlib.machinery.PathFinder.find_spec(name, [path]) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - sys.modules[name] = module - return sys.modules[name] - - -def _get_sysconfigdata_name(): - multiarch = getattr(sys.implementation, '_multiarch', '') - return os.environ.get( - '_PYTHON_SYSCONFIGDATA_NAME', - f'_sysconfigdata_{sys.abiflags}_{sys.platform}_{multiarch}', - ) - - -def _get_sysconfigdata(): - import importlib - - name = _get_sysconfigdata_name() - path = os.environ.get('_PYTHON_SYSCONFIGDATA_PATH') - module = _import_from_directory(path, name) if path else importlib.import_module(name) - - return module.build_time_vars - - -def _installation_is_relocated(): - """Is the Python installation running from a different prefix than what was targetted when building?""" - if os.name != 'posix': - raise NotImplementedError('sysconfig._installation_is_relocated() is currently only supported on POSIX') - - data = _get_sysconfigdata() - return ( - data['prefix'] != getattr(sys, 'base_prefix', '') - or data['exec_prefix'] != getattr(sys, 'base_exec_prefix', '') - ) - - -def _init_posix(vars): - """Initialize the module as appropriate for POSIX systems.""" - # GH-126920: Make sure we don't overwrite any of the keys already set - vars.update(_get_sysconfigdata() | vars) - - -def _init_non_posix(vars): - """Initialize the module as appropriate for NT""" - # set basic install directories - import _winapi - import _sysconfig - vars['LIBDEST'] = get_path('stdlib') - vars['BINLIBDEST'] = get_path('platstdlib') - vars['INCLUDEPY'] = get_path('include') - - # Add EXT_SUFFIX, SOABI, Py_DEBUG, and Py_GIL_DISABLED - vars.update(_sysconfig.config_vars()) - - # NOTE: ABIFLAGS is only an emulated value. It is not present during build - # on Windows. sys.abiflags is absent on Windows and vars['abiflags'] - # is already widely used to calculate paths, so it should remain an - # empty string. - vars['ABIFLAGS'] = ''.join( - ( - 't' if vars['Py_GIL_DISABLED'] else '', - '_d' if vars['Py_DEBUG'] else '', - ), - ) - - vars['LIBDIR'] = _safe_realpath(os.path.join(get_config_var('installed_base'), 'libs')) - if hasattr(sys, 'dllhandle'): - dllhandle = _winapi.GetModuleFileName(sys.dllhandle) - vars['LIBRARY'] = os.path.basename(_safe_realpath(dllhandle)) - vars['LDLIBRARY'] = vars['LIBRARY'] - vars['EXE'] = '.exe' - vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) - vars['TZPATH'] = '' - -# -# public APIs -# - - -def parse_config_h(fp, vars=None): - """Parse a config.h-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - if vars is None: - vars = {} - import re - define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") - undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") - - while True: - line = fp.readline() - if not line: - break - m = define_rx.match(line) - if m: - n, v = m.group(1, 2) - try: - if n in _ALWAYS_STR: - raise ValueError - v = int(v) - except ValueError: - pass - vars[n] = v - else: - m = undef_rx.match(line) - if m: - vars[m.group(1)] = 0 - return vars - - -def get_config_h_filename(): - """Return the path of pyconfig.h.""" - if _PYTHON_BUILD: - if os.name == "nt": - inc_dir = os.path.join(_PROJECT_BASE, 'PC') - else: - inc_dir = _PROJECT_BASE - else: - inc_dir = get_path('platinclude') - return os.path.join(inc_dir, 'pyconfig.h') - - -def get_scheme_names(): - """Return a tuple containing the schemes names.""" - return tuple(sorted(_INSTALL_SCHEMES)) - - -def get_path_names(): - """Return a tuple containing the paths names.""" - return _SCHEME_KEYS - - -def get_paths(scheme=get_default_scheme(), vars=None, expand=True): - """Return a mapping containing an install scheme. - - ``scheme`` is the install scheme name. If not provided, it will - return the default scheme for the current platform. - """ - if expand: - return _expand_vars(scheme, vars) - else: - return _INSTALL_SCHEMES[scheme] - - -def get_path(name, scheme=get_default_scheme(), vars=None, expand=True): - """Return a path corresponding to the scheme. - - ``scheme`` is the install scheme name. - """ - return get_paths(scheme, vars, expand)[name] - - -def _init_config_vars(): - global _CONFIG_VARS - _CONFIG_VARS = {} - - prefix = os.path.normpath(sys.prefix) - exec_prefix = os.path.normpath(sys.exec_prefix) - base_prefix = _BASE_PREFIX - base_exec_prefix = _BASE_EXEC_PREFIX - - try: - abiflags = sys.abiflags - except AttributeError: - abiflags = '' - - if os.name == 'posix': - _init_posix(_CONFIG_VARS) - # If we are cross-compiling, load the prefixes from the Makefile instead. - if '_PYTHON_PROJECT_BASE' in os.environ: - prefix = _CONFIG_VARS['host_prefix'] - exec_prefix = _CONFIG_VARS['host_exec_prefix'] - base_prefix = _CONFIG_VARS['host_prefix'] - base_exec_prefix = _CONFIG_VARS['host_exec_prefix'] - abiflags = _CONFIG_VARS['ABIFLAGS'] - - # Normalized versions of prefix and exec_prefix are handy to have; - # in fact, these are the standard versions used most places in the - # Distutils. - _CONFIG_VARS['prefix'] = prefix - _CONFIG_VARS['exec_prefix'] = exec_prefix - _CONFIG_VARS['py_version'] = _PY_VERSION - _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT - _CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT - _CONFIG_VARS['installed_base'] = base_prefix - _CONFIG_VARS['base'] = prefix - _CONFIG_VARS['installed_platbase'] = base_exec_prefix - _CONFIG_VARS['platbase'] = exec_prefix - _CONFIG_VARS['projectbase'] = _PROJECT_BASE - _CONFIG_VARS['platlibdir'] = sys.platlibdir - _CONFIG_VARS['implementation'] = _get_implementation() - _CONFIG_VARS['implementation_lower'] = _get_implementation().lower() - _CONFIG_VARS['abiflags'] = abiflags - try: - _CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '') - except AttributeError: - _CONFIG_VARS['py_version_nodot_plat'] = '' - - if os.name == 'nt': - _init_non_posix(_CONFIG_VARS) - _CONFIG_VARS['VPATH'] = sys._vpath - if _HAS_USER_BASE: - # Setting 'userbase' is done below the call to the - # init function to enable using 'get_config_var' in - # the init-function. - _CONFIG_VARS['userbase'] = _getuserbase() - - # e.g., 't' for free-threaded or '' for default build - _CONFIG_VARS['abi_thread'] = 't' if _CONFIG_VARS.get('Py_GIL_DISABLED') else '' - - # Always convert srcdir to an absolute path - srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE) - if os.name == 'posix': - if _PYTHON_BUILD: - # If srcdir is a relative path (typically '.' or '..') - # then it should be interpreted relative to the directory - # containing Makefile. - base = os.path.dirname(get_makefile_filename()) - srcdir = os.path.join(base, srcdir) - else: - # srcdir is not meaningful since the installation is - # spread about the filesystem. We choose the - # directory containing the Makefile since we know it - # exists. - srcdir = os.path.dirname(get_makefile_filename()) - _CONFIG_VARS['srcdir'] = _safe_realpath(srcdir) - - # OS X platforms require special customization to handle - # multi-architecture, multi-os-version installers - if sys.platform == 'darwin': - import _osx_support - _osx_support.customize_config_vars(_CONFIG_VARS) - - global _CONFIG_VARS_INITIALIZED - _CONFIG_VARS_INITIALIZED = True - - -def get_config_vars(*args): - """With no arguments, return a dictionary of all configuration - variables relevant for the current platform. - - On Unix, this means every variable defined in Python's installed Makefile; - On Windows it's a much smaller set. - - With arguments, return a list of values that result from looking up - each argument in the configuration variable dictionary. - """ - global _CONFIG_VARS_INITIALIZED - - # Avoid claiming the lock once initialization is complete. - if _CONFIG_VARS_INITIALIZED: - # GH-126789: If sys.prefix or sys.exec_prefix were updated, invalidate the cache. - prefix = os.path.normpath(sys.prefix) - exec_prefix = os.path.normpath(sys.exec_prefix) - if _CONFIG_VARS['prefix'] != prefix or _CONFIG_VARS['exec_prefix'] != exec_prefix: - with _CONFIG_VARS_LOCK: - _CONFIG_VARS_INITIALIZED = False - _init_config_vars() - else: - # Initialize the config_vars cache. - with _CONFIG_VARS_LOCK: - # Test again with the lock held to avoid races. Note that - # we test _CONFIG_VARS here, not _CONFIG_VARS_INITIALIZED, - # to ensure that recursive calls to get_config_vars() - # don't re-enter init_config_vars(). - if _CONFIG_VARS is None: - _init_config_vars() - - if args: - vals = [] - for name in args: - vals.append(_CONFIG_VARS.get(name)) - return vals - else: - return _CONFIG_VARS - - -def get_config_var(name): - """Return the value of a single variable using the dictionary returned by - 'get_config_vars()'. - - Equivalent to get_config_vars().get(name) - """ - return get_config_vars().get(name) - - -def get_platform(): - """Return a string that identifies the current platform. - - This is used mainly to distinguish platform-specific build directories and - platform-specific built distributions. Typically includes the OS name and - version and the architecture (as supplied by 'os.uname()'), although the - exact information included depends on the OS; on Linux, the kernel version - isn't particularly important. - - Examples of returned values: - - - Windows: - - - win-amd64 (64-bit Windows on AMD64, aka x86_64, Intel64, and EM64T) - - win-arm64 (64-bit Windows on ARM64, aka AArch64) - - win32 (all others - specifically, sys.platform is returned) - - POSIX based OS: - - - linux-x86_64 - - macosx-15.5-arm64 - - macosx-26.0-universal2 (macOS on Apple Silicon or Intel) - - android-24-arm64_v8a - - For other non-POSIX platforms, currently just returns :data:`sys.platform`.""" - if os.name == 'nt': - if 'amd64' in sys.version.lower(): - return 'win-amd64' - if '(arm)' in sys.version.lower(): - return 'win-arm32' - if '(arm64)' in sys.version.lower(): - return 'win-arm64' - return sys.platform - - if os.name != "posix" or not hasattr(os, 'uname'): - # XXX what about the architecture? NT is Intel or Alpha - return sys.platform - - # Set for cross builds explicitly - if "_PYTHON_HOST_PLATFORM" in os.environ: - osname, _, machine = os.environ["_PYTHON_HOST_PLATFORM"].partition('-') - release = None - else: - # Try to distinguish various flavours of Unix - osname, host, release, version, machine = os.uname() - - # Convert the OS name to lowercase, remove '/' characters, and translate - # spaces (for "Power Macintosh") - osname = osname.lower().replace('/', '') - machine = machine.replace(' ', '_') - machine = machine.replace('/', '-') - - if osname == "android" or sys.platform == "android": - osname = "android" - release = get_config_var("ANDROID_API_LEVEL") - - # Wheel tags use the ABI names from Android's own tools. - # When Python is running on 32-bit ARM Android on a 64-bit ARM kernel, - # 'os.uname().machine' is 'armv8l'. Such devices run the same userspace - # code as 'armv7l' devices. - # During the build process of the Android testbed when targeting 32-bit ARM, - # '_PYTHON_HOST_PLATFORM' is 'arm-linux-androideabi', so 'machine' becomes - # 'arm'. - machine = { - "aarch64": "arm64_v8a", - "arm": "armeabi_v7a", - "armv7l": "armeabi_v7a", - "armv8l": "armeabi_v7a", - "i686": "x86", - "x86_64": "x86_64", - }[machine] - elif osname == "linux": - # At least on Linux/Intel, 'machine' is the processor -- - # i386, etc. - # XXX what about Alpha, SPARC, etc? - return f"{osname}-{machine}" - elif osname[:5] == "sunos": - if release[0] >= "5": # SunOS 5 == Solaris 2 - osname = "solaris" - release = f"{int(release[0]) - 3}.{release[2:]}" - # We can't use "platform.architecture()[0]" because a - # bootstrap problem. We use a dict to get an error - # if some suspicious happens. - bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} - machine += f".{bitness[sys.maxsize]}" - # fall through to standard osname-release-machine representation - elif osname[:3] == "aix": - from _aix_support import aix_platform - return aix_platform() - elif osname[:6] == "cygwin": - osname = "cygwin" - import re - rel_re = re.compile(r'[\d.]+') - m = rel_re.match(release) - if m: - release = m.group() - elif osname[:6] == "darwin": - if sys.platform == "ios": - release = get_config_vars().get("IPHONEOS_DEPLOYMENT_TARGET", "13.0") - osname = sys.platform - machine = sys.implementation._multiarch - else: - import _osx_support - osname, release, machine = _osx_support.get_platform_osx( - get_config_vars(), - osname, release, machine) - - return '-'.join(map(str, filter(None, (osname, release, machine)))) - - -def get_python_version(): - return _PY_VERSION_SHORT - - -def _get_python_version_abi(): - return _PY_VERSION_SHORT + get_config_var("abi_thread") - - -def expand_makefile_vars(s, vars): - """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in - 'string' according to 'vars' (a dictionary mapping variable names to - values). Variables not present in 'vars' are silently expanded to the - empty string. The variable values in 'vars' should not contain further - variable expansions; if 'vars' is the output of 'parse_makefile()', - you're fine. Returns a variable-expanded version of 's'. - """ - - import warnings - warnings.warn( - 'sysconfig.expand_makefile_vars is deprecated and will be removed in ' - 'Python 3.16. Use sysconfig.get_paths(vars=...) instead.', - DeprecationWarning, - stacklevel=2, - ) - - import re - - _findvar1_rx = r"\$\(([A-Za-z][A-Za-z0-9_]*)\)" - _findvar2_rx = r"\${([A-Za-z][A-Za-z0-9_]*)}" - - # This algorithm does multiple expansion, so if vars['foo'] contains - # "${bar}", it will expand ${foo} to ${bar}, and then expand - # ${bar}... and so forth. This is fine as long as 'vars' comes from - # 'parse_makefile()', which takes care of such expansions eagerly, - # according to make's variable expansion semantics. - - while True: - m = re.search(_findvar1_rx, s) or re.search(_findvar2_rx, s) - if m: - (beg, end) = m.span() - s = s[0:beg] + vars.get(m.group(1)) + s[end:] - else: - break - return s diff --git a/Python314_4_x86_Template/Lib/sysconfig/__main__.py b/Python314_4_x86_Template/Lib/sysconfig/__main__.py deleted file mode 100644 index bc2197cfe..000000000 --- a/Python314_4_x86_Template/Lib/sysconfig/__main__.py +++ /dev/null @@ -1,276 +0,0 @@ -import json -import os -import sys -import types -from sysconfig import ( - _ALWAYS_STR, - _PYTHON_BUILD, - _get_sysconfigdata_name, - get_config_h_filename, - get_config_var, - get_config_vars, - get_default_scheme, - get_makefile_filename, - get_paths, - get_platform, - get_python_version, - parse_config_h, -) - - -# Regexes needed for parsing Makefile (and similar syntaxes, -# like old-style Setup files). -_variable_rx = r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)" -_findvar1_rx = r"\$\(([A-Za-z][A-Za-z0-9_]*)\)" -_findvar2_rx = r"\${([A-Za-z][A-Za-z0-9_]*)}" - - -def _parse_makefile(filename, vars=None, keep_unresolved=True): - """Parse a Makefile-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - import re - - if vars is None: - vars = {} - done = {} - notdone = {} - - with open(filename, encoding=sys.getfilesystemencoding(), - errors="surrogateescape") as f: - lines = f.readlines() - - for line in lines: - if line.startswith('#') or line.strip() == '': - continue - m = re.match(_variable_rx, line) - if m: - n, v = m.group(1, 2) - v = v.strip() - # `$$' is a literal `$' in make - tmpv = v.replace('$$', '') - - if "$" in tmpv: - notdone[n] = v - else: - try: - if n in _ALWAYS_STR: - raise ValueError - - v = int(v) - except ValueError: - # insert literal `$' - done[n] = v.replace('$$', '$') - else: - done[n] = v - - # do variable interpolation here - variables = list(notdone.keys()) - - # Variables with a 'PY_' prefix in the makefile. These need to - # be made available without that prefix through sysconfig. - # Special care is needed to ensure that variable expansion works, even - # if the expansion uses the name without a prefix. - renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') - - while len(variables) > 0: - for name in tuple(variables): - value = notdone[name] - m1 = re.search(_findvar1_rx, value) - m2 = re.search(_findvar2_rx, value) - if m1 and m2: - m = m1 if m1.start() < m2.start() else m2 - else: - m = m1 if m1 else m2 - if m is not None: - n = m.group(1) - found = True - if n in done: - item = str(done[n]) - elif n in notdone: - # get it on a subsequent round - found = False - elif n in os.environ: - # do it like make: fall back to environment - item = os.environ[n] - - elif n in renamed_variables: - if (name.startswith('PY_') and - name[3:] in renamed_variables): - item = "" - - elif 'PY_' + n in notdone: - found = False - - else: - item = str(done['PY_' + n]) - - else: - done[n] = item = "" - - if found: - after = value[m.end():] - value = value[:m.start()] + item + after - if "$" in after: - notdone[name] = value - else: - try: - if name in _ALWAYS_STR: - raise ValueError - value = int(value) - except ValueError: - done[name] = value.strip() - else: - done[name] = value - variables.remove(name) - - if name.startswith('PY_') \ - and name[3:] in renamed_variables: - - name = name[3:] - if name not in done: - done[name] = value - - else: - # Adds unresolved variables to the done dict. - # This is disabled when called from distutils.sysconfig - if keep_unresolved: - done[name] = value - # bogus variable reference (e.g. "prefix=$/opt/python"); - # just drop it since we can't deal - variables.remove(name) - - # strip spurious spaces - for k, v in done.items(): - if isinstance(v, str): - done[k] = v.strip() - - # save the results in the global dictionary - vars.update(done) - return vars - - -def _print_config_dict(d, stream): - print ("{", file=stream) - for k, v in sorted(d.items()): - print(f" {k!r}: {v!r},", file=stream) - print ("}", file=stream) - - -def _get_pybuilddir(): - pybuilddir = f'build/lib.{get_platform()}-{get_python_version()}' - if get_config_var('Py_DEBUG') == '1': - pybuilddir += '-pydebug' - return pybuilddir - - -def _get_json_data_name(): - name = _get_sysconfigdata_name() - assert name.startswith('_sysconfigdata') - return name.replace('_sysconfigdata', '_sysconfig_vars') + '.json' - - -def _generate_posix_vars(): - """Generate the Python module containing build-time variables.""" - vars = {} - # load the installed Makefile: - makefile = get_makefile_filename() - try: - _parse_makefile(makefile, vars) - except OSError as e: - msg = f"invalid Python installation: unable to open {makefile}" - if hasattr(e, "strerror"): - msg = f"{msg} ({e.strerror})" - raise OSError(msg) - # load the installed pyconfig.h: - config_h = get_config_h_filename() - try: - with open(config_h, encoding="utf-8") as f: - parse_config_h(f, vars) - except OSError as e: - msg = f"invalid Python installation: unable to open {config_h}" - if hasattr(e, "strerror"): - msg = f"{msg} ({e.strerror})" - raise OSError(msg) - # On AIX, there are wrong paths to the linker scripts in the Makefile - # -- these paths are relative to the Python source, but when installed - # the scripts are in another directory. - if _PYTHON_BUILD: - vars['BLDSHARED'] = vars['LDSHARED'] - - name = _get_sysconfigdata_name() - - # There's a chicken-and-egg situation on OS X with regards to the - # _sysconfigdata module after the changes introduced by #15298: - # get_config_vars() is called by get_platform() as part of the - # `make pybuilddir.txt` target -- which is a precursor to the - # _sysconfigdata.py module being constructed. Unfortunately, - # get_config_vars() eventually calls _init_posix(), which attempts - # to import _sysconfigdata, which we won't have built yet. In order - # for _init_posix() to work, if we're on Darwin, just mock up the - # _sysconfigdata module manually and populate it with the build vars. - # This is more than sufficient for ensuring the subsequent call to - # get_platform() succeeds. - # GH-127178: Since we started generating a .json file, we also need this to - # be able to run sysconfig.get_config_vars(). - module = types.ModuleType(name) - module.build_time_vars = vars - sys.modules[name] = module - - pybuilddir = _get_pybuilddir() - os.makedirs(pybuilddir, exist_ok=True) - destfile = os.path.join(pybuilddir, name + '.py') - - with open(destfile, 'w', encoding='utf8') as f: - f.write('# system configuration generated and used by' - ' the sysconfig module\n') - f.write('build_time_vars = ') - _print_config_dict(vars, stream=f) - - print(f'Written {destfile}') - - install_vars = get_config_vars() - # Fix config vars to match the values after install (of the default environment) - install_vars['projectbase'] = install_vars['BINDIR'] - install_vars['srcdir'] = install_vars['LIBPL'] - # Write a JSON file with the output of sysconfig.get_config_vars - jsonfile = os.path.join(pybuilddir, _get_json_data_name()) - with open(jsonfile, 'w') as f: - json.dump(install_vars, f, indent=2) - - print(f'Written {jsonfile}') - - # Create file used for sys.path fixup -- see Modules/getpath.c - with open('pybuilddir.txt', 'w', encoding='utf8') as f: - f.write(pybuilddir) - - -def _print_dict(title, data): - for index, (key, value) in enumerate(sorted(data.items())): - if index == 0: - print(f'{title}: ') - print(f'\t{key} = "{value}"') - - -def _main(): - """Display all information sysconfig detains.""" - if '--generate-posix-vars' in sys.argv: - _generate_posix_vars() - return - print(f'Platform: "{get_platform()}"') - print(f'Python version: "{get_python_version()}"') - print(f'Current installation scheme: "{get_default_scheme()}"') - print() - _print_dict('Paths', get_paths()) - print() - _print_dict('Variables', get_config_vars()) - - -if __name__ == '__main__': - try: - _main() - except BrokenPipeError: - pass diff --git a/Python314_4_x86_Template/Lib/sysconfig/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/sysconfig/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index ce36e061ee77fc097839c26f7ade459d4a50337e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28668 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 diff --git a/Python314_4_x86_Template/Lib/tabnanny.py b/Python314_4_x86_Template/Lib/tabnanny.py deleted file mode 100644 index c0097351b..000000000 --- a/Python314_4_x86_Template/Lib/tabnanny.py +++ /dev/null @@ -1,338 +0,0 @@ -"""The Tab Nanny despises ambiguous indentation. She knows no mercy. - -tabnanny -- Detection of ambiguous indentation - -For the time being this module is intended to be called as a script. -However it is possible to import it into an IDE and use the function -check() described below. - -Warning: The API provided by this module is likely to change in future -releases; such changes may not be backward compatible. -""" - -# Released to the public domain, by Tim Peters, 15 April 1998. - -# XXX Note: this is now a standard library module. -# XXX The API needs to undergo changes however; the current code is too -# XXX script-like. This will be addressed later. - -__version__ = "6" - -import os -import sys -import tokenize - -__all__ = ["check", "NannyNag", "process_tokens"] - -verbose = 0 -filename_only = 0 - -def errprint(*args): - sep = "" - for arg in args: - sys.stderr.write(sep + str(arg)) - sep = " " - sys.stderr.write("\n") - sys.exit(1) - -def main(): - import getopt - - global verbose, filename_only - try: - opts, args = getopt.getopt(sys.argv[1:], "qv") - except getopt.error as msg: - errprint(msg) - for o, a in opts: - if o == '-q': - filename_only = filename_only + 1 - if o == '-v': - verbose = verbose + 1 - if not args: - errprint("Usage:", sys.argv[0], "[-v] file_or_directory ...") - for arg in args: - check(arg) - -class NannyNag(Exception): - """ - Raised by process_tokens() if detecting an ambiguous indent. - Captured and handled in check(). - """ - def __init__(self, lineno, msg, line): - self.lineno, self.msg, self.line = lineno, msg, line - def get_lineno(self): - return self.lineno - def get_msg(self): - return self.msg - def get_line(self): - return self.line - -def check(file): - """check(file_or_dir) - - If file_or_dir is a directory and not a symbolic link, then recursively - descend the directory tree named by file_or_dir, checking all .py files - along the way. If file_or_dir is an ordinary Python source file, it is - checked for whitespace related problems. The diagnostic messages are - written to standard output using the print statement. - """ - - if os.path.isdir(file) and not os.path.islink(file): - if verbose: - print("%r: listing directory" % (file,)) - names = os.listdir(file) - for name in names: - fullname = os.path.join(file, name) - if (os.path.isdir(fullname) and - not os.path.islink(fullname) or - os.path.normcase(name[-3:]) == ".py"): - check(fullname) - return - - try: - f = tokenize.open(file) - except OSError as msg: - errprint("%r: I/O Error: %s" % (file, msg)) - return - - if verbose > 1: - print("checking %r ..." % file) - - try: - process_tokens(tokenize.generate_tokens(f.readline)) - - except tokenize.TokenError as msg: - errprint("%r: Token Error: %s" % (file, msg)) - return - - except IndentationError as msg: - errprint("%r: Indentation Error: %s" % (file, msg)) - return - - except SyntaxError as msg: - errprint("%r: Syntax Error: %s" % (file, msg)) - return - - except NannyNag as nag: - badline = nag.get_lineno() - line = nag.get_line() - if verbose: - print("%r: *** Line %d: trouble in tab city! ***" % (file, badline)) - print("offending line: %r" % (line,)) - print(nag.get_msg()) - else: - if ' ' in file: file = '"' + file + '"' - if filename_only: print(file) - else: print(file, badline, repr(line)) - return - - finally: - f.close() - - if verbose: - print("%r: Clean bill of health." % (file,)) - -class Whitespace: - # the characters used for space and tab - S, T = ' \t' - - # members: - # raw - # the original string - # n - # the number of leading whitespace characters in raw - # nt - # the number of tabs in raw[:n] - # norm - # the normal form as a pair (count, trailing), where: - # count - # a tuple such that raw[:n] contains count[i] - # instances of S * i + T - # trailing - # the number of trailing spaces in raw[:n] - # It's A Theorem that m.indent_level(t) == - # n.indent_level(t) for all t >= 1 iff m.norm == n.norm. - # is_simple - # true iff raw[:n] is of the form (T*)(S*) - - def __init__(self, ws): - self.raw = ws - S, T = Whitespace.S, Whitespace.T - count = [] - b = n = nt = 0 - for ch in self.raw: - if ch == S: - n = n + 1 - b = b + 1 - elif ch == T: - n = n + 1 - nt = nt + 1 - if b >= len(count): - count = count + [0] * (b - len(count) + 1) - count[b] = count[b] + 1 - b = 0 - else: - break - self.n = n - self.nt = nt - self.norm = tuple(count), b - self.is_simple = len(count) <= 1 - - # return length of longest contiguous run of spaces (whether or not - # preceding a tab) - def longest_run_of_spaces(self): - count, trailing = self.norm - return max(len(count)-1, trailing) - - def indent_level(self, tabsize): - # count, il = self.norm - # for i in range(len(count)): - # if count[i]: - # il = il + (i//tabsize + 1)*tabsize * count[i] - # return il - - # quicker: - # il = trailing + sum (i//ts + 1)*ts*count[i] = - # trailing + ts * sum (i//ts + 1)*count[i] = - # trailing + ts * sum i//ts*count[i] + count[i] = - # trailing + ts * [(sum i//ts*count[i]) + (sum count[i])] = - # trailing + ts * [(sum i//ts*count[i]) + num_tabs] - # and note that i//ts*count[i] is 0 when i < ts - - count, trailing = self.norm - il = 0 - for i in range(tabsize, len(count)): - il = il + i//tabsize * count[i] - return trailing + tabsize * (il + self.nt) - - # return true iff self.indent_level(t) == other.indent_level(t) - # for all t >= 1 - def equal(self, other): - return self.norm == other.norm - - # return a list of tuples (ts, i1, i2) such that - # i1 == self.indent_level(ts) != other.indent_level(ts) == i2. - # Intended to be used after not self.equal(other) is known, in which - # case it will return at least one witnessing tab size. - def not_equal_witness(self, other): - n = max(self.longest_run_of_spaces(), - other.longest_run_of_spaces()) + 1 - a = [] - for ts in range(1, n+1): - if self.indent_level(ts) != other.indent_level(ts): - a.append( (ts, - self.indent_level(ts), - other.indent_level(ts)) ) - return a - - # Return True iff self.indent_level(t) < other.indent_level(t) - # for all t >= 1. - # The algorithm is due to Vincent Broman. - # Easy to prove it's correct. - # XXXpost that. - # Trivial to prove n is sharp (consider T vs ST). - # Unknown whether there's a faster general way. I suspected so at - # first, but no longer. - # For the special (but common!) case where M and N are both of the - # form (T*)(S*), M.less(N) iff M.len() < N.len() and - # M.num_tabs() <= N.num_tabs(). Proof is easy but kinda long-winded. - # XXXwrite that up. - # Note that M is of the form (T*)(S*) iff len(M.norm[0]) <= 1. - def less(self, other): - if self.n >= other.n: - return False - if self.is_simple and other.is_simple: - return self.nt <= other.nt - n = max(self.longest_run_of_spaces(), - other.longest_run_of_spaces()) + 1 - # the self.n >= other.n test already did it for ts=1 - for ts in range(2, n+1): - if self.indent_level(ts) >= other.indent_level(ts): - return False - return True - - # return a list of tuples (ts, i1, i2) such that - # i1 == self.indent_level(ts) >= other.indent_level(ts) == i2. - # Intended to be used after not self.less(other) is known, in which - # case it will return at least one witnessing tab size. - def not_less_witness(self, other): - n = max(self.longest_run_of_spaces(), - other.longest_run_of_spaces()) + 1 - a = [] - for ts in range(1, n+1): - if self.indent_level(ts) >= other.indent_level(ts): - a.append( (ts, - self.indent_level(ts), - other.indent_level(ts)) ) - return a - -def format_witnesses(w): - firsts = (str(tup[0]) for tup in w) - prefix = "at tab size" - if len(w) > 1: - prefix = prefix + "s" - return prefix + " " + ', '.join(firsts) - -def process_tokens(tokens): - try: - _process_tokens(tokens) - except TabError as e: - raise NannyNag(e.lineno, e.msg, e.text) - -def _process_tokens(tokens): - INDENT = tokenize.INDENT - DEDENT = tokenize.DEDENT - NEWLINE = tokenize.NEWLINE - JUNK = tokenize.COMMENT, tokenize.NL - indents = [Whitespace("")] - check_equal = 0 - - for (type, token, start, end, line) in tokens: - if type == NEWLINE: - # a program statement, or ENDMARKER, will eventually follow, - # after some (possibly empty) run of tokens of the form - # (NL | COMMENT)* (INDENT | DEDENT+)? - # If an INDENT appears, setting check_equal is wrong, and will - # be undone when we see the INDENT. - check_equal = 1 - - elif type == INDENT: - check_equal = 0 - thisguy = Whitespace(token) - if not indents[-1].less(thisguy): - witness = indents[-1].not_less_witness(thisguy) - msg = "indent not greater e.g. " + format_witnesses(witness) - raise NannyNag(start[0], msg, line) - indents.append(thisguy) - - elif type == DEDENT: - # there's nothing we need to check here! what's important is - # that when the run of DEDENTs ends, the indentation of the - # program statement (or ENDMARKER) that triggered the run is - # equal to what's left at the top of the indents stack - - # Ouch! This assert triggers if the last line of the source - # is indented *and* lacks a newline -- then DEDENTs pop out - # of thin air. - # assert check_equal # else no earlier NEWLINE, or an earlier INDENT - check_equal = 1 - - del indents[-1] - - elif check_equal and type not in JUNK: - # this is the first "real token" following a NEWLINE, so it - # must be the first token of the next program statement, or an - # ENDMARKER; the "line" argument exposes the leading whitespace - # for this statement; in the case of ENDMARKER, line is an empty - # string, so will properly match the empty string with which the - # "indents" stack was seeded - check_equal = 0 - thisguy = Whitespace(line) - if not indents[-1].equal(thisguy): - witness = indents[-1].not_equal_witness(thisguy) - msg = "indent not equal e.g. " + format_witnesses(witness) - raise NannyNag(start[0], msg, line) - - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/tarfile.py b/Python314_4_x86_Template/Lib/tarfile.py deleted file mode 100644 index 414aefe97..000000000 --- a/Python314_4_x86_Template/Lib/tarfile.py +++ /dev/null @@ -1,3157 +0,0 @@ -#------------------------------------------------------------------- -# tarfile.py -#------------------------------------------------------------------- -# Copyright (C) 2002 Lars Gustaebel <lars@gustaebel.de> -# All rights reserved. -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation -# files (the "Software"), to deal in the Software without -# restriction, including without limitation the rights to use, -# copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following -# conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -"""Read from and write to tar format archives. -""" - -version = "0.9.0" -__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" -__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." - -#--------- -# Imports -#--------- -from builtins import open as bltn_open -import sys -import os -import io -import shutil -import stat -import time -import struct -import copy -import re - -try: - import pwd -except ImportError: - pwd = None -try: - import grp -except ImportError: - grp = None - -# os.symlink on Windows prior to 6.0 raises NotImplementedError -# OSError (winerror=1314) will be raised if the caller does not hold the -# SeCreateSymbolicLinkPrivilege privilege -symlink_exception = (AttributeError, NotImplementedError, OSError) - -# from tarfile import * -__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError", "ReadError", - "CompressionError", "StreamError", "ExtractError", "HeaderError", - "ENCODING", "USTAR_FORMAT", "GNU_FORMAT", "PAX_FORMAT", - "DEFAULT_FORMAT", "open","fully_trusted_filter", "data_filter", - "tar_filter", "FilterError", "AbsoluteLinkError", - "OutsideDestinationError", "SpecialFileError", "AbsolutePathError", - "LinkOutsideDestinationError", "LinkFallbackError"] - - -#--------------------------------------------------------- -# tar constants -#--------------------------------------------------------- -NUL = b"\0" # the null character -BLOCKSIZE = 512 # length of processing blocks -RECORDSIZE = BLOCKSIZE * 20 # length of records -GNU_MAGIC = b"ustar \0" # magic gnu tar string -POSIX_MAGIC = b"ustar\x0000" # magic posix tar string - -LENGTH_NAME = 100 # maximum length of a filename -LENGTH_LINK = 100 # maximum length of a linkname -LENGTH_PREFIX = 155 # maximum length of the prefix field - -REGTYPE = b"0" # regular file -AREGTYPE = b"\0" # regular file -LNKTYPE = b"1" # link (inside tarfile) -SYMTYPE = b"2" # symbolic link -CHRTYPE = b"3" # character special device -BLKTYPE = b"4" # block special device -DIRTYPE = b"5" # directory -FIFOTYPE = b"6" # fifo special device -CONTTYPE = b"7" # contiguous file - -GNUTYPE_LONGNAME = b"L" # GNU tar longname -GNUTYPE_LONGLINK = b"K" # GNU tar longlink -GNUTYPE_SPARSE = b"S" # GNU tar sparse file - -XHDTYPE = b"x" # POSIX.1-2001 extended header -XGLTYPE = b"g" # POSIX.1-2001 global header -SOLARIS_XHDTYPE = b"X" # Solaris extended header - -USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format -GNU_FORMAT = 1 # GNU tar format -PAX_FORMAT = 2 # POSIX.1-2001 (pax) format -DEFAULT_FORMAT = PAX_FORMAT - -#--------------------------------------------------------- -# tarfile constants -#--------------------------------------------------------- -# File types that tarfile supports: -SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, - SYMTYPE, DIRTYPE, FIFOTYPE, - CONTTYPE, CHRTYPE, BLKTYPE, - GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# File types that will be treated as a regular file. -REGULAR_TYPES = (REGTYPE, AREGTYPE, - CONTTYPE, GNUTYPE_SPARSE) - -# File types that are part of the GNU tar format. -GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# Fields from a pax header that override a TarInfo attribute. -PAX_FIELDS = ("path", "linkpath", "size", "mtime", - "uid", "gid", "uname", "gname") - -# Fields from a pax header that are affected by hdrcharset. -PAX_NAME_FIELDS = {"path", "linkpath", "uname", "gname"} - -# Fields in a pax header that are numbers, all other fields -# are treated as strings. -PAX_NUMBER_FIELDS = { - "atime": float, - "ctime": float, - "mtime": float, - "uid": int, - "gid": int, - "size": int -} - -#--------------------------------------------------------- -# initialization -#--------------------------------------------------------- -if os.name == "nt": - ENCODING = "utf-8" -else: - ENCODING = sys.getfilesystemencoding() - -#--------------------------------------------------------- -# Some useful functions -#--------------------------------------------------------- - -def stn(s, length, encoding, errors): - """Convert a string to a null-terminated bytes object. - """ - if s is None: - raise ValueError("metadata cannot contain None") - s = s.encode(encoding, errors) - return s[:length] + (length - len(s)) * NUL - -def nts(s, encoding, errors): - """Convert a null-terminated bytes object to a string. - """ - p = s.find(b"\0") - if p != -1: - s = s[:p] - return s.decode(encoding, errors) - -def nti(s): - """Convert a number field to a python number. - """ - # There are two possible encodings for a number field, see - # itn() below. - if s[0] in (0o200, 0o377): - n = 0 - for i in range(len(s) - 1): - n <<= 8 - n += s[i + 1] - if s[0] == 0o377: - n = -(256 ** (len(s) - 1) - n) - else: - try: - s = nts(s, "ascii", "strict") - n = int(s.strip() or "0", 8) - except ValueError: - raise InvalidHeaderError("invalid header") - return n - -def itn(n, digits=8, format=DEFAULT_FORMAT): - """Convert a python number to a number field. - """ - # POSIX 1003.1-1988 requires numbers to be encoded as a string of - # octal digits followed by a null-byte, this allows values up to - # (8**(digits-1))-1. GNU tar allows storing numbers greater than - # that if necessary. A leading 0o200 or 0o377 byte indicate this - # particular encoding, the following digits-1 bytes are a big-endian - # base-256 representation. This allows values up to (256**(digits-1))-1. - # A 0o200 byte indicates a positive number, a 0o377 byte a negative - # number. - original_n = n - n = int(n) - if 0 <= n < 8 ** (digits - 1): - s = bytes("%0*o" % (digits - 1, n), "ascii") + NUL - elif format == GNU_FORMAT and -256 ** (digits - 1) <= n < 256 ** (digits - 1): - if n >= 0: - s = bytearray([0o200]) - else: - s = bytearray([0o377]) - n = 256 ** digits + n - - for i in range(digits - 1): - s.insert(1, n & 0o377) - n >>= 8 - else: - raise ValueError("overflow in number field") - - return s - -def calc_chksums(buf): - """Calculate the checksum for a member's header by summing up all - characters except for the chksum field which is treated as if - it was filled with spaces. According to the GNU tar sources, - some tars (Sun and NeXT) calculate chksum with signed char, - which will be different if there are chars in the buffer with - the high bit set. So we calculate two checksums, unsigned and - signed. - """ - unsigned_chksum = 256 + sum(struct.unpack_from("148B8x356B", buf)) - signed_chksum = 256 + sum(struct.unpack_from("148b8x356b", buf)) - return unsigned_chksum, signed_chksum - -def copyfileobj(src, dst, length=None, exception=OSError, bufsize=None): - """Copy length bytes from fileobj src to fileobj dst. - If length is None, copy the entire content. - """ - bufsize = bufsize or 16 * 1024 - if length == 0: - return - if length is None: - shutil.copyfileobj(src, dst, bufsize) - return - - blocks, remainder = divmod(length, bufsize) - for b in range(blocks): - buf = src.read(bufsize) - if len(buf) < bufsize: - raise exception("unexpected end of data") - dst.write(buf) - - if remainder != 0: - buf = src.read(remainder) - if len(buf) < remainder: - raise exception("unexpected end of data") - dst.write(buf) - return - -def _safe_print(s): - encoding = getattr(sys.stdout, 'encoding', None) - if encoding is not None: - s = s.encode(encoding, 'backslashreplace').decode(encoding) - print(s, end=' ') - - -class TarError(Exception): - """Base exception.""" - pass -class ExtractError(TarError): - """General exception for extract errors.""" - pass -class ReadError(TarError): - """Exception for unreadable tar archives.""" - pass -class CompressionError(TarError): - """Exception for unavailable compression methods.""" - pass -class StreamError(TarError): - """Exception for unsupported operations on stream-like TarFiles.""" - pass -class HeaderError(TarError): - """Base exception for header errors.""" - pass -class EmptyHeaderError(HeaderError): - """Exception for empty headers.""" - pass -class TruncatedHeaderError(HeaderError): - """Exception for truncated headers.""" - pass -class EOFHeaderError(HeaderError): - """Exception for end of file headers.""" - pass -class InvalidHeaderError(HeaderError): - """Exception for invalid headers.""" - pass -class SubsequentHeaderError(HeaderError): - """Exception for missing and invalid extended headers.""" - pass - -#--------------------------- -# internal stream interface -#--------------------------- -class _LowLevelFile: - """Low-level file object. Supports reading and writing. - It is used instead of a regular file object for streaming - access. - """ - - def __init__(self, name, mode): - mode = { - "r": os.O_RDONLY, - "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, - }[mode] - if hasattr(os, "O_BINARY"): - mode |= os.O_BINARY - self.fd = os.open(name, mode, 0o666) - - def close(self): - os.close(self.fd) - - def read(self, size): - return os.read(self.fd, size) - - def write(self, s): - os.write(self.fd, s) - -class _Stream: - """Class that serves as an adapter between TarFile and - a stream-like object. The stream-like object only - needs to have a read() or write() method that works with bytes, - and the method is accessed blockwise. - Use of gzip or bzip2 compression is possible. - A stream-like object could be for example: sys.stdin.buffer, - sys.stdout.buffer, a socket, a tape device etc. - - _Stream is intended to be used only internally. - """ - - def __init__(self, name, mode, comptype, fileobj, bufsize, - compresslevel, preset): - """Construct a _Stream object. - """ - self._extfileobj = True - if fileobj is None: - fileobj = _LowLevelFile(name, mode) - self._extfileobj = False - - if comptype == '*': - # Enable transparent compression detection for the - # stream interface - fileobj = _StreamProxy(fileobj) - comptype = fileobj.getcomptype() - - self.name = os.fspath(name) if name is not None else "" - self.mode = mode - self.comptype = comptype - self.fileobj = fileobj - self.bufsize = bufsize - self.buf = b"" - self.pos = 0 - self.closed = False - - try: - if comptype == "gz": - try: - import zlib - except ImportError: - raise CompressionError("zlib module is not available") from None - self.zlib = zlib - self.crc = zlib.crc32(b"") - if mode == "r": - self.exception = zlib.error - self._init_read_gz() - else: - self._init_write_gz(compresslevel) - - elif comptype == "bz2": - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") from None - if mode == "r": - self.dbuf = b"" - self.cmp = bz2.BZ2Decompressor() - self.exception = OSError - else: - self.cmp = bz2.BZ2Compressor(compresslevel) - - elif comptype == "xz": - try: - import lzma - except ImportError: - raise CompressionError("lzma module is not available") from None - if mode == "r": - self.dbuf = b"" - self.cmp = lzma.LZMADecompressor() - self.exception = lzma.LZMAError - else: - self.cmp = lzma.LZMACompressor(preset=preset) - elif comptype == "zst": - try: - from compression import zstd - except ImportError: - raise CompressionError("compression.zstd module is not available") from None - if mode == "r": - self.dbuf = b"" - self.cmp = zstd.ZstdDecompressor() - self.exception = zstd.ZstdError - else: - self.cmp = zstd.ZstdCompressor() - elif comptype != "tar": - raise CompressionError("unknown compression type %r" % comptype) - - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - def __del__(self): - if hasattr(self, "closed") and not self.closed: - self.close() - - def _init_write_gz(self, compresslevel): - """Initialize for writing with gzip compression. - """ - self.cmp = self.zlib.compressobj(compresslevel, - self.zlib.DEFLATED, - -self.zlib.MAX_WBITS, - self.zlib.DEF_MEM_LEVEL, - 0) - timestamp = struct.pack("<L", int(time.time())) - self.__write(b"\037\213\010\010" + timestamp + b"\002\377") - if self.name.endswith(".gz"): - self.name = self.name[:-3] - # Honor "directory components removed" from RFC1952 - self.name = os.path.basename(self.name) - # RFC1952 says we must use ISO-8859-1 for the FNAME field. - self.__write(self.name.encode("iso-8859-1", "replace") + NUL) - - def write(self, s): - """Write string s to the stream. - """ - if self.comptype == "gz": - self.crc = self.zlib.crc32(s, self.crc) - self.pos += len(s) - if self.comptype != "tar": - s = self.cmp.compress(s) - self.__write(s) - - def __write(self, s): - """Write string s to the stream if a whole new block - is ready to be written. - """ - self.buf += s - while len(self.buf) > self.bufsize: - self.fileobj.write(self.buf[:self.bufsize]) - self.buf = self.buf[self.bufsize:] - - def close(self): - """Close the _Stream object. No operation should be - done on it afterwards. - """ - if self.closed: - return - - self.closed = True - try: - if self.mode == "w" and self.comptype != "tar": - self.buf += self.cmp.flush() - - if self.mode == "w" and self.buf: - self.fileobj.write(self.buf) - self.buf = b"" - if self.comptype == "gz": - self.fileobj.write(struct.pack("<L", self.crc)) - self.fileobj.write(struct.pack("<L", self.pos & 0xffffFFFF)) - finally: - if not self._extfileobj: - self.fileobj.close() - - def _init_read_gz(self): - """Initialize for reading a gzip compressed fileobj. - """ - self.cmp = self.zlib.decompressobj(-self.zlib.MAX_WBITS) - self.dbuf = b"" - - # taken from gzip.GzipFile with some alterations - if self.__read(2) != b"\037\213": - raise ReadError("not a gzip file") - if self.__read(1) != b"\010": - raise CompressionError("unsupported compression method") - - flag = ord(self.__read(1)) - self.__read(6) - - if flag & 4: - xlen = ord(self.__read(1)) + 256 * ord(self.__read(1)) - self.read(xlen) - if flag & 8: - while True: - s = self.__read(1) - if not s or s == NUL: - break - if flag & 16: - while True: - s = self.__read(1) - if not s or s == NUL: - break - if flag & 2: - self.__read(2) - - def tell(self): - """Return the stream's file pointer position. - """ - return self.pos - - def seek(self, pos=0): - """Set the stream's file pointer to pos. Negative seeking - is forbidden. - """ - if pos - self.pos >= 0: - blocks, remainder = divmod(pos - self.pos, self.bufsize) - for i in range(blocks): - self.read(self.bufsize) - self.read(remainder) - else: - raise StreamError("seeking backwards is not allowed") - return self.pos - - def read(self, size): - """Return the next size number of bytes from the stream.""" - assert size is not None - buf = self._read(size) - self.pos += len(buf) - return buf - - def _read(self, size): - """Return size bytes from the stream. - """ - if self.comptype == "tar": - return self.__read(size) - - c = len(self.dbuf) - t = [self.dbuf] - while c < size: - # Skip underlying buffer to avoid unaligned double buffering. - if self.buf: - buf = self.buf - self.buf = b"" - else: - buf = self.fileobj.read(self.bufsize) - if not buf: - break - try: - buf = self.cmp.decompress(buf) - except self.exception as e: - raise ReadError("invalid compressed data") from e - t.append(buf) - c += len(buf) - t = b"".join(t) - self.dbuf = t[size:] - return t[:size] - - def __read(self, size): - """Return size bytes from stream. If internal buffer is empty, - read another block from the stream. - """ - c = len(self.buf) - t = [self.buf] - while c < size: - buf = self.fileobj.read(self.bufsize) - if not buf: - break - t.append(buf) - c += len(buf) - t = b"".join(t) - self.buf = t[size:] - return t[:size] -# class _Stream - -class _StreamProxy(object): - """Small proxy class that enables transparent compression - detection for the Stream interface (mode 'r|*'). - """ - - def __init__(self, fileobj): - self.fileobj = fileobj - self.buf = self.fileobj.read(BLOCKSIZE) - - def read(self, size): - self.read = self.fileobj.read - return self.buf - - def getcomptype(self): - if self.buf.startswith(b"\x1f\x8b\x08"): - return "gz" - elif self.buf[0:3] == b"BZh" and self.buf[4:10] == b"1AY&SY": - return "bz2" - elif self.buf.startswith((b"\x5d\x00\x00\x80", b"\xfd7zXZ")): - return "xz" - elif self.buf.startswith(b"\x28\xb5\x2f\xfd"): - return "zst" - else: - return "tar" - - def close(self): - self.fileobj.close() -# class StreamProxy - -#------------------------ -# Extraction file object -#------------------------ -class _FileInFile(object): - """A thin wrapper around an existing file object that - provides a part of its data as an individual file - object. - """ - - def __init__(self, fileobj, offset, size, name, blockinfo=None): - self.fileobj = fileobj - self.offset = offset - self.size = size - self.position = 0 - self.name = name - self.closed = False - - if blockinfo is None: - blockinfo = [(0, size)] - - # Construct a map with data and zero blocks. - self.map_index = 0 - self.map = [] - lastpos = 0 - realpos = self.offset - for offset, size in blockinfo: - if offset > lastpos: - self.map.append((False, lastpos, offset, None)) - self.map.append((True, offset, offset + size, realpos)) - realpos += size - lastpos = offset + size - if lastpos < self.size: - self.map.append((False, lastpos, self.size, None)) - - def flush(self): - pass - - @property - def mode(self): - return 'rb' - - def readable(self): - return True - - def writable(self): - return False - - def seekable(self): - return self.fileobj.seekable() - - def tell(self): - """Return the current file position. - """ - return self.position - - def seek(self, position, whence=io.SEEK_SET): - """Seek to a position in the file. - """ - if whence == io.SEEK_SET: - self.position = min(max(position, 0), self.size) - elif whence == io.SEEK_CUR: - if position < 0: - self.position = max(self.position + position, 0) - else: - self.position = min(self.position + position, self.size) - elif whence == io.SEEK_END: - self.position = max(min(self.size + position, self.size), 0) - else: - raise ValueError("Invalid argument") - return self.position - - def read(self, size=None): - """Read data from the file. - """ - if size is None: - size = self.size - self.position - else: - size = min(size, self.size - self.position) - - buf = b"" - while size > 0: - while True: - data, start, stop, offset = self.map[self.map_index] - if start <= self.position < stop: - break - else: - self.map_index += 1 - if self.map_index == len(self.map): - self.map_index = 0 - length = min(size, stop - self.position) - if data: - self.fileobj.seek(offset + (self.position - start)) - b = self.fileobj.read(length) - if len(b) != length: - raise ReadError("unexpected end of data") - buf += b - else: - buf += NUL * length - size -= length - self.position += length - return buf - - def readinto(self, b): - buf = self.read(len(b)) - b[:len(buf)] = buf - return len(buf) - - def close(self): - self.closed = True -#class _FileInFile - -class ExFileObject(io.BufferedReader): - - def __init__(self, tarfile, tarinfo): - fileobj = _FileInFile(tarfile.fileobj, tarinfo.offset_data, - tarinfo.size, tarinfo.name, tarinfo.sparse) - super().__init__(fileobj) -#class ExFileObject - - -#----------------------------- -# extraction filters (PEP 706) -#----------------------------- - -class FilterError(TarError): - pass - -class AbsolutePathError(FilterError): - def __init__(self, tarinfo): - self.tarinfo = tarinfo - super().__init__(f'member {tarinfo.name!r} has an absolute path') - -class OutsideDestinationError(FilterError): - def __init__(self, tarinfo, path): - self.tarinfo = tarinfo - self._path = path - super().__init__(f'{tarinfo.name!r} would be extracted to {path!r}, ' - + 'which is outside the destination') - -class SpecialFileError(FilterError): - def __init__(self, tarinfo): - self.tarinfo = tarinfo - super().__init__(f'{tarinfo.name!r} is a special file') - -class AbsoluteLinkError(FilterError): - def __init__(self, tarinfo): - self.tarinfo = tarinfo - super().__init__(f'{tarinfo.name!r} is a link to an absolute path') - -class LinkOutsideDestinationError(FilterError): - def __init__(self, tarinfo, path): - self.tarinfo = tarinfo - self._path = path - super().__init__(f'{tarinfo.name!r} would link to {path!r}, ' - + 'which is outside the destination') - -class LinkFallbackError(FilterError): - def __init__(self, tarinfo, path): - self.tarinfo = tarinfo - self._path = path - super().__init__(f'link {tarinfo.name!r} would be extracted as a ' - + f'copy of {path!r}, which was rejected') - -# Errors caused by filters -- both "fatal" and "non-fatal" -- that -# we consider to be issues with the argument, rather than a bug in the -# filter function -_FILTER_ERRORS = (FilterError, OSError, ExtractError) - -def _get_filtered_attrs(member, dest_path, for_data=True): - new_attrs = {} - name = member.name - dest_path = os.path.realpath(dest_path, strict=os.path.ALLOW_MISSING) - # Strip leading / (tar's directory separator) from filenames. - # Include os.sep (target OS directory separator) as well. - if name.startswith(('/', os.sep)): - name = new_attrs['name'] = member.path.lstrip('/' + os.sep) - if os.path.isabs(name): - # Path is absolute even after stripping. - # For example, 'C:/foo' on Windows. - raise AbsolutePathError(member) - # Ensure we stay in the destination - target_path = os.path.realpath(os.path.join(dest_path, name), - strict=os.path.ALLOW_MISSING) - if os.path.commonpath([target_path, dest_path]) != dest_path: - raise OutsideDestinationError(member, target_path) - # Limit permissions (no high bits, and go-w) - mode = member.mode - if mode is not None: - # Strip high bits & group/other write bits - mode = mode & 0o755 - if for_data: - # For data, handle permissions & file types - if member.isreg() or member.islnk(): - if not mode & 0o100: - # Clear executable bits if not executable by user - mode &= ~0o111 - # Ensure owner can read & write - mode |= 0o600 - elif member.isdir() or member.issym(): - # Ignore mode for directories & symlinks - mode = None - else: - # Reject special files - raise SpecialFileError(member) - if mode != member.mode: - new_attrs['mode'] = mode - if for_data: - # Ignore ownership for 'data' - if member.uid is not None: - new_attrs['uid'] = None - if member.gid is not None: - new_attrs['gid'] = None - if member.uname is not None: - new_attrs['uname'] = None - if member.gname is not None: - new_attrs['gname'] = None - # Check link destination for 'data' - if member.islnk() or member.issym(): - if os.path.isabs(member.linkname): - raise AbsoluteLinkError(member) - normalized = os.path.normpath(member.linkname) - if normalized != member.linkname: - new_attrs['linkname'] = normalized - if member.issym(): - target_path = os.path.join(dest_path, - os.path.dirname(name), - member.linkname) - else: - target_path = os.path.join(dest_path, - member.linkname) - target_path = os.path.realpath(target_path, - strict=os.path.ALLOW_MISSING) - if os.path.commonpath([target_path, dest_path]) != dest_path: - raise LinkOutsideDestinationError(member, target_path) - return new_attrs - -def fully_trusted_filter(member, dest_path): - return member - -def tar_filter(member, dest_path): - new_attrs = _get_filtered_attrs(member, dest_path, False) - if new_attrs: - return member.replace(**new_attrs, deep=False) - return member - -def data_filter(member, dest_path): - new_attrs = _get_filtered_attrs(member, dest_path, True) - if new_attrs: - return member.replace(**new_attrs, deep=False) - return member - -_NAMED_FILTERS = { - "fully_trusted": fully_trusted_filter, - "tar": tar_filter, - "data": data_filter, -} - -#------------------ -# Exported Classes -#------------------ - -# Sentinel for replace() defaults, meaning "don't change the attribute" -_KEEP = object() - -# Header length is digits followed by a space. -_header_length_prefix_re = re.compile(br"([0-9]{1,20}) ") - -class TarInfo(object): - """Informational class which holds the details about an - archive member given by a tar header block. - TarInfo objects are returned by TarFile.getmember(), - TarFile.getmembers() and TarFile.gettarinfo() and are - usually created internally. - """ - - __slots__ = dict( - name = 'Name of the archive member.', - mode = 'Permission bits.', - uid = 'User ID of the user who originally stored this member.', - gid = 'Group ID of the user who originally stored this member.', - size = 'Size in bytes.', - mtime = 'Time of last modification.', - chksum = 'Header checksum.', - type = ('File type. type is usually one of these constants: ' - 'REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, ' - 'CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.'), - linkname = ('Name of the target file name, which is only present ' - 'in TarInfo objects of type LNKTYPE and SYMTYPE.'), - uname = 'User name.', - gname = 'Group name.', - devmajor = 'Device major number.', - devminor = 'Device minor number.', - offset = 'The tar header starts here.', - offset_data = "The file's data starts here.", - pax_headers = ('A dictionary containing key-value pairs of an ' - 'associated pax extended header.'), - sparse = 'Sparse member information.', - _tarfile = None, - _sparse_structs = None, - _link_target = None, - ) - - def __init__(self, name=""): - """Construct a TarInfo object. name is the optional name - of the member. - """ - self.name = name # member name - self.mode = 0o644 # file permissions - self.uid = 0 # user id - self.gid = 0 # group id - self.size = 0 # file size - self.mtime = 0 # modification time - self.chksum = 0 # header checksum - self.type = REGTYPE # member type - self.linkname = "" # link name - self.uname = "" # user name - self.gname = "" # group name - self.devmajor = 0 # device major number - self.devminor = 0 # device minor number - - self.offset = 0 # the tar header starts here - self.offset_data = 0 # the file's data starts here - - self.sparse = None # sparse member information - self.pax_headers = {} # pax header information - - @property - def tarfile(self): - import warnings - warnings.warn( - 'The undocumented "tarfile" attribute of TarInfo objects ' - + 'is deprecated and will be removed in Python 3.16', - DeprecationWarning, stacklevel=2) - return self._tarfile - - @tarfile.setter - def tarfile(self, tarfile): - import warnings - warnings.warn( - 'The undocumented "tarfile" attribute of TarInfo objects ' - + 'is deprecated and will be removed in Python 3.16', - DeprecationWarning, stacklevel=2) - self._tarfile = tarfile - - @property - def path(self): - 'In pax headers, "name" is called "path".' - return self.name - - @path.setter - def path(self, name): - self.name = name - - @property - def linkpath(self): - 'In pax headers, "linkname" is called "linkpath".' - return self.linkname - - @linkpath.setter - def linkpath(self, linkname): - self.linkname = linkname - - def __repr__(self): - return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) - - def replace(self, *, - name=_KEEP, mtime=_KEEP, mode=_KEEP, linkname=_KEEP, - uid=_KEEP, gid=_KEEP, uname=_KEEP, gname=_KEEP, - deep=True, _KEEP=_KEEP): - """Return a deep copy of self with the given attributes replaced. - """ - if deep: - result = copy.deepcopy(self) - else: - result = copy.copy(self) - if name is not _KEEP: - result.name = name - if mtime is not _KEEP: - result.mtime = mtime - if mode is not _KEEP: - result.mode = mode - if linkname is not _KEEP: - result.linkname = linkname - if uid is not _KEEP: - result.uid = uid - if gid is not _KEEP: - result.gid = gid - if uname is not _KEEP: - result.uname = uname - if gname is not _KEEP: - result.gname = gname - return result - - def get_info(self): - """Return the TarInfo's attributes as a dictionary. - """ - if self.mode is None: - mode = None - else: - mode = self.mode & 0o7777 - info = { - "name": self.name, - "mode": mode, - "uid": self.uid, - "gid": self.gid, - "size": self.size, - "mtime": self.mtime, - "chksum": self.chksum, - "type": self.type, - "linkname": self.linkname, - "uname": self.uname, - "gname": self.gname, - "devmajor": self.devmajor, - "devminor": self.devminor - } - - if info["type"] == DIRTYPE and not info["name"].endswith("/"): - info["name"] += "/" - - return info - - def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): - """Return a tar header as a string of 512 byte blocks. - """ - info = self.get_info() - for name, value in info.items(): - if value is None: - raise ValueError("%s may not be None" % name) - - if format == USTAR_FORMAT: - return self.create_ustar_header(info, encoding, errors) - elif format == GNU_FORMAT: - return self.create_gnu_header(info, encoding, errors) - elif format == PAX_FORMAT: - return self.create_pax_header(info, encoding) - else: - raise ValueError("invalid format") - - def create_ustar_header(self, info, encoding, errors): - """Return the object as a ustar header block. - """ - info["magic"] = POSIX_MAGIC - - if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: - raise ValueError("linkname is too long") - - if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: - info["prefix"], info["name"] = self._posix_split_name(info["name"], encoding, errors) - - return self._create_header(info, USTAR_FORMAT, encoding, errors) - - def create_gnu_header(self, info, encoding, errors): - """Return the object as a GNU header block sequence. - """ - info["magic"] = GNU_MAGIC - - buf = b"" - if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: - buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) - - if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: - buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) - - return buf + self._create_header(info, GNU_FORMAT, encoding, errors) - - def create_pax_header(self, info, encoding): - """Return the object as a ustar header block. If it cannot be - represented this way, prepend a pax extended header sequence - with supplement information. - """ - info["magic"] = POSIX_MAGIC - pax_headers = self.pax_headers.copy() - - # Test string fields for values that exceed the field length or cannot - # be represented in ASCII encoding. - for name, hname, length in ( - ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), - ("uname", "uname", 32), ("gname", "gname", 32)): - - if hname in pax_headers: - # The pax header has priority. - continue - - # Try to encode the string as ASCII. - try: - info[name].encode("ascii", "strict") - except UnicodeEncodeError: - pax_headers[hname] = info[name] - continue - - if len(info[name]) > length: - pax_headers[hname] = info[name] - - # Test number fields for values that exceed the field limit or values - # that like to be stored as float. - for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): - needs_pax = False - - val = info[name] - val_is_float = isinstance(val, float) - val_int = round(val) if val_is_float else val - if not 0 <= val_int < 8 ** (digits - 1): - # Avoid overflow. - info[name] = 0 - needs_pax = True - elif val_is_float: - # Put rounded value in ustar header, and full - # precision value in pax header. - info[name] = val_int - needs_pax = True - - # The existing pax header has priority. - if needs_pax and name not in pax_headers: - pax_headers[name] = str(val) - - # Create a pax extended header if necessary. - if pax_headers: - buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) - else: - buf = b"" - - return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") - - @classmethod - def create_pax_global_header(cls, pax_headers): - """Return the object as a pax global header block sequence. - """ - return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf-8") - - def _posix_split_name(self, name, encoding, errors): - """Split a name longer than 100 chars into a prefix - and a name part. - """ - components = name.split("/") - for i in range(1, len(components)): - prefix = "/".join(components[:i]) - name = "/".join(components[i:]) - if len(prefix.encode(encoding, errors)) <= LENGTH_PREFIX and \ - len(name.encode(encoding, errors)) <= LENGTH_NAME: - break - else: - raise ValueError("name is too long") - - return prefix, name - - @staticmethod - def _create_header(info, format, encoding, errors): - """Return a header block. info is a dictionary with file - information, format must be one of the *_FORMAT constants. - """ - has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE) - if has_device_fields: - devmajor = itn(info.get("devmajor", 0), 8, format) - devminor = itn(info.get("devminor", 0), 8, format) - else: - devmajor = stn("", 8, encoding, errors) - devminor = stn("", 8, encoding, errors) - - # None values in metadata should cause ValueError. - # itn()/stn() do this for all fields except type. - filetype = info.get("type", REGTYPE) - if filetype is None: - raise ValueError("TarInfo.type must not be None") - - parts = [ - stn(info.get("name", ""), 100, encoding, errors), - itn(info.get("mode", 0) & 0o7777, 8, format), - itn(info.get("uid", 0), 8, format), - itn(info.get("gid", 0), 8, format), - itn(info.get("size", 0), 12, format), - itn(info.get("mtime", 0), 12, format), - b" ", # checksum field - filetype, - stn(info.get("linkname", ""), 100, encoding, errors), - info.get("magic", POSIX_MAGIC), - stn(info.get("uname", ""), 32, encoding, errors), - stn(info.get("gname", ""), 32, encoding, errors), - devmajor, - devminor, - stn(info.get("prefix", ""), 155, encoding, errors) - ] - - buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) - chksum = calc_chksums(buf[-BLOCKSIZE:])[0] - buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:] - return buf - - @staticmethod - def _create_payload(payload): - """Return the string payload filled with zero bytes - up to the next 512 byte border. - """ - blocks, remainder = divmod(len(payload), BLOCKSIZE) - if remainder > 0: - payload += (BLOCKSIZE - remainder) * NUL - return payload - - @classmethod - def _create_gnu_long_header(cls, name, type, encoding, errors): - """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence - for name. - """ - name = name.encode(encoding, errors) + NUL - - info = {} - info["name"] = "././@LongLink" - info["type"] = type - info["size"] = len(name) - info["magic"] = GNU_MAGIC - - # create extended header + name blocks. - return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ - cls._create_payload(name) - - @classmethod - def _create_pax_generic_header(cls, pax_headers, type, encoding): - """Return a POSIX.1-2008 extended or global header sequence - that contains a list of keyword, value pairs. The values - must be strings. - """ - # Check if one of the fields contains surrogate characters and thereby - # forces hdrcharset=BINARY, see _proc_pax() for more information. - binary = False - for keyword, value in pax_headers.items(): - try: - value.encode("utf-8", "strict") - except UnicodeEncodeError: - binary = True - break - - records = b"" - if binary: - # Put the hdrcharset field at the beginning of the header. - records += b"21 hdrcharset=BINARY\n" - - for keyword, value in pax_headers.items(): - keyword = keyword.encode("utf-8") - if binary: - # Try to restore the original byte representation of 'value'. - # Needless to say, that the encoding must match the string. - value = value.encode(encoding, "surrogateescape") - else: - value = value.encode("utf-8") - - l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' - n = p = 0 - while True: - n = l + len(str(p)) - if n == p: - break - p = n - records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" - - # We use a hardcoded "././@PaxHeader" name like star does - # instead of the one that POSIX recommends. - info = {} - info["name"] = "././@PaxHeader" - info["type"] = type - info["size"] = len(records) - info["magic"] = POSIX_MAGIC - - # Create pax header + record blocks. - return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ - cls._create_payload(records) - - @classmethod - def frombuf(cls, buf, encoding, errors): - """Construct a TarInfo object from a 512 byte bytes object. - - To support the old v7 tar format AREGTYPE headers are - transformed to DIRTYPE headers if their name ends in '/'. - """ - return cls._frombuf(buf, encoding, errors) - - @classmethod - def _frombuf(cls, buf, encoding, errors, *, dircheck=True): - """Construct a TarInfo object from a 512 byte bytes object. - - If ``dircheck`` is set to ``True`` then ``AREGTYPE`` headers will - be normalized to ``DIRTYPE`` if the name ends in a trailing slash. - ``dircheck`` must be set to ``False`` if this function is called - on a follow-up header such as ``GNUTYPE_LONGNAME``. - """ - if len(buf) == 0: - raise EmptyHeaderError("empty header") - if len(buf) != BLOCKSIZE: - raise TruncatedHeaderError("truncated header") - if buf.count(NUL) == BLOCKSIZE: - raise EOFHeaderError("end of file header") - - chksum = nti(buf[148:156]) - if chksum not in calc_chksums(buf): - raise InvalidHeaderError("bad checksum") - - obj = cls() - obj.name = nts(buf[0:100], encoding, errors) - obj.mode = nti(buf[100:108]) - obj.uid = nti(buf[108:116]) - obj.gid = nti(buf[116:124]) - obj.size = nti(buf[124:136]) - obj.mtime = nti(buf[136:148]) - obj.chksum = chksum - obj.type = buf[156:157] - obj.linkname = nts(buf[157:257], encoding, errors) - obj.uname = nts(buf[265:297], encoding, errors) - obj.gname = nts(buf[297:329], encoding, errors) - obj.devmajor = nti(buf[329:337]) - obj.devminor = nti(buf[337:345]) - prefix = nts(buf[345:500], encoding, errors) - - # Old V7 tar format represents a directory as a regular - # file with a trailing slash. - if dircheck and obj.type == AREGTYPE and obj.name.endswith("/"): - obj.type = DIRTYPE - - # The old GNU sparse format occupies some of the unused - # space in the buffer for up to 4 sparse structures. - # Save them for later processing in _proc_sparse(). - if obj.type == GNUTYPE_SPARSE: - pos = 386 - structs = [] - for i in range(4): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[482]) - origsize = nti(buf[483:495]) - obj._sparse_structs = (structs, isextended, origsize) - - # Remove redundant slashes from directories. - if obj.isdir(): - obj.name = obj.name.rstrip("/") - - # Reconstruct a ustar longname. - if prefix and obj.type not in GNU_TYPES: - obj.name = prefix + "/" + obj.name - return obj - - @classmethod - def fromtarfile(cls, tarfile): - """Return the next TarInfo object from TarFile object - tarfile. - """ - return cls._fromtarfile(tarfile) - - @classmethod - def _fromtarfile(cls, tarfile, *, dircheck=True): - """ - See dircheck documentation in _frombuf(). - """ - buf = tarfile.fileobj.read(BLOCKSIZE) - obj = cls._frombuf(buf, tarfile.encoding, tarfile.errors, dircheck=dircheck) - obj.offset = tarfile.fileobj.tell() - BLOCKSIZE - return obj._proc_member(tarfile) - - #-------------------------------------------------------------------------- - # The following are methods that are called depending on the type of a - # member. The entry point is _proc_member() which can be overridden in a - # subclass to add custom _proc_*() methods. A _proc_*() method MUST - # implement the following - # operations: - # 1. Set self.offset_data to the position where the data blocks begin, - # if there is data that follows. - # 2. Set tarfile.offset to the position where the next member's header will - # begin. - # 3. Return self or another valid TarInfo object. - def _proc_member(self, tarfile): - """Choose the right processing method depending on - the type and call it. - """ - if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): - return self._proc_gnulong(tarfile) - elif self.type == GNUTYPE_SPARSE: - return self._proc_sparse(tarfile) - elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): - return self._proc_pax(tarfile) - else: - return self._proc_builtin(tarfile) - - def _proc_builtin(self, tarfile): - """Process a builtin type or an unknown type which - will be treated as a regular file. - """ - self.offset_data = tarfile.fileobj.tell() - offset = self.offset_data - if self.isreg() or self.type not in SUPPORTED_TYPES: - # Skip the following data blocks. - offset += self._block(self.size) - tarfile.offset = offset - - # Patch the TarInfo object with saved global - # header information. - self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) - - # Remove redundant slashes from directories. This is to be consistent - # with frombuf(). - if self.isdir(): - self.name = self.name.rstrip("/") - - return self - - def _proc_gnulong(self, tarfile): - """Process the blocks that hold a GNU longname - or longlink member. - """ - buf = tarfile.fileobj.read(self._block(self.size)) - - # Fetch the next header and process it. - try: - next = self._fromtarfile(tarfile, dircheck=False) - except HeaderError as e: - raise SubsequentHeaderError(str(e)) from None - - # Patch the TarInfo object from the next header with - # the longname information. - next.offset = self.offset - if self.type == GNUTYPE_LONGNAME: - next.name = nts(buf, tarfile.encoding, tarfile.errors) - elif self.type == GNUTYPE_LONGLINK: - next.linkname = nts(buf, tarfile.encoding, tarfile.errors) - - # Remove redundant slashes from directories. This is to be consistent - # with frombuf(). - if next.isdir(): - next.name = next.name.removesuffix("/") - - return next - - def _proc_sparse(self, tarfile): - """Process a GNU sparse header plus extra headers. - """ - # We already collected some sparse structures in frombuf(). - structs, isextended, origsize = self._sparse_structs - del self._sparse_structs - - # Collect sparse structures from extended header blocks. - while isextended: - buf = tarfile.fileobj.read(BLOCKSIZE) - pos = 0 - for i in range(21): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - if offset and numbytes: - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[504]) - self.sparse = structs - - self.offset_data = tarfile.fileobj.tell() - tarfile.offset = self.offset_data + self._block(self.size) - self.size = origsize - return self - - def _proc_pax(self, tarfile): - """Process an extended or global header as described in - POSIX.1-2008. - """ - # Read the header information. - buf = tarfile.fileobj.read(self._block(self.size)) - - # A pax header stores supplemental information for either - # the following file (extended) or all following files - # (global). - if self.type == XGLTYPE: - pax_headers = tarfile.pax_headers - else: - pax_headers = tarfile.pax_headers.copy() - - # Parse pax header information. A record looks like that: - # "%d %s=%s\n" % (length, keyword, value). length is the size - # of the complete record including the length field itself and - # the newline. - pos = 0 - encoding = None - raw_headers = [] - while len(buf) > pos and buf[pos] != 0x00: - if not (match := _header_length_prefix_re.match(buf, pos)): - raise InvalidHeaderError("invalid header") - try: - length = int(match.group(1)) - except ValueError: - raise InvalidHeaderError("invalid header") - # Headers must be at least 5 bytes, shortest being '5 x=\n'. - # Value is allowed to be empty. - if length < 5: - raise InvalidHeaderError("invalid header") - if pos + length > len(buf): - raise InvalidHeaderError("invalid header") - - header_value_end_offset = match.start(1) + length - 1 # Last byte of the header - keyword_and_value = buf[match.end(1) + 1:header_value_end_offset] - raw_keyword, equals, raw_value = keyword_and_value.partition(b"=") - - # Check the framing of the header. The last character must be '\n' (0x0A) - if not raw_keyword or equals != b"=" or buf[header_value_end_offset] != 0x0A: - raise InvalidHeaderError("invalid header") - raw_headers.append((length, raw_keyword, raw_value)) - - # Check if the pax header contains a hdrcharset field. This tells us - # the encoding of the path, linkpath, uname and gname fields. Normally, - # these fields are UTF-8 encoded but since POSIX.1-2008 tar - # implementations are allowed to store them as raw binary strings if - # the translation to UTF-8 fails. For the time being, we don't care about - # anything other than "BINARY". The only other value that is currently - # allowed by the standard is "ISO-IR 10646 2000 UTF-8" in other words UTF-8. - # Note that we only follow the initial 'hdrcharset' setting to preserve - # the initial behavior of the 'tarfile' module. - if raw_keyword == b"hdrcharset" and encoding is None: - if raw_value == b"BINARY": - encoding = tarfile.encoding - else: # This branch ensures only the first 'hdrcharset' header is used. - encoding = "utf-8" - - pos += length - - # If no explicit hdrcharset is set, we use UTF-8 as a default. - if encoding is None: - encoding = "utf-8" - - # After parsing the raw headers we can decode them to text. - for length, raw_keyword, raw_value in raw_headers: - # Normally, we could just use "utf-8" as the encoding and "strict" - # as the error handler, but we better not take the risk. For - # example, GNU tar <= 1.23 is known to store filenames it cannot - # translate to UTF-8 as raw strings (unfortunately without a - # hdrcharset=BINARY header). - # We first try the strict standard encoding, and if that fails we - # fall back on the user's encoding and error handler. - keyword = self._decode_pax_field(raw_keyword, "utf-8", "utf-8", - tarfile.errors) - if keyword in PAX_NAME_FIELDS: - value = self._decode_pax_field(raw_value, encoding, tarfile.encoding, - tarfile.errors) - else: - value = self._decode_pax_field(raw_value, "utf-8", "utf-8", - tarfile.errors) - - pax_headers[keyword] = value - - # Fetch the next header. - try: - next = self._fromtarfile(tarfile, dircheck=False) - except HeaderError as e: - raise SubsequentHeaderError(str(e)) from None - - # Process GNU sparse information. - if "GNU.sparse.map" in pax_headers: - # GNU extended sparse format version 0.1. - self._proc_gnusparse_01(next, pax_headers) - - elif "GNU.sparse.size" in pax_headers: - # GNU extended sparse format version 0.0. - self._proc_gnusparse_00(next, raw_headers) - - elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": - # GNU extended sparse format version 1.0. - self._proc_gnusparse_10(next, pax_headers, tarfile) - - if self.type in (XHDTYPE, SOLARIS_XHDTYPE): - # Patch the TarInfo object with the extended header info. - next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) - next.offset = self.offset - - if "size" in pax_headers: - # If the extended header replaces the size field, - # we need to recalculate the offset where the next - # header starts. - offset = next.offset_data - if next.isreg() or next.type not in SUPPORTED_TYPES: - offset += next._block(next.size) - tarfile.offset = offset - - return next - - def _proc_gnusparse_00(self, next, raw_headers): - """Process a GNU tar extended sparse header, version 0.0. - """ - offsets = [] - numbytes = [] - for _, keyword, value in raw_headers: - if keyword == b"GNU.sparse.offset": - try: - offsets.append(int(value.decode())) - except ValueError: - raise InvalidHeaderError("invalid header") - - elif keyword == b"GNU.sparse.numbytes": - try: - numbytes.append(int(value.decode())) - except ValueError: - raise InvalidHeaderError("invalid header") - - next.sparse = list(zip(offsets, numbytes)) - - def _proc_gnusparse_01(self, next, pax_headers): - """Process a GNU tar extended sparse header, version 0.1. - """ - sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _proc_gnusparse_10(self, next, pax_headers, tarfile): - """Process a GNU tar extended sparse header, version 1.0. - """ - fields = None - sparse = [] - buf = tarfile.fileobj.read(BLOCKSIZE) - fields, buf = buf.split(b"\n", 1) - fields = int(fields) - while len(sparse) < fields * 2: - if b"\n" not in buf: - buf += tarfile.fileobj.read(BLOCKSIZE) - number, buf = buf.split(b"\n", 1) - sparse.append(int(number)) - next.offset_data = tarfile.fileobj.tell() - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _apply_pax_info(self, pax_headers, encoding, errors): - """Replace fields with supplemental information from a previous - pax extended or global header. - """ - for keyword, value in pax_headers.items(): - if keyword == "GNU.sparse.name": - setattr(self, "path", value) - elif keyword == "GNU.sparse.size": - setattr(self, "size", int(value)) - elif keyword == "GNU.sparse.realsize": - setattr(self, "size", int(value)) - elif keyword in PAX_FIELDS: - if keyword in PAX_NUMBER_FIELDS: - try: - value = PAX_NUMBER_FIELDS[keyword](value) - except ValueError: - value = 0 - if keyword == "path": - value = value.rstrip("/") - setattr(self, keyword, value) - - self.pax_headers = pax_headers.copy() - - def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): - """Decode a single field from a pax record. - """ - try: - return value.decode(encoding, "strict") - except UnicodeDecodeError: - return value.decode(fallback_encoding, fallback_errors) - - def _block(self, count): - """Round up a byte count by BLOCKSIZE and return it, - e.g. _block(834) => 1024. - """ - # Only non-negative offsets are allowed - if count < 0: - raise InvalidHeaderError("invalid offset") - blocks, remainder = divmod(count, BLOCKSIZE) - if remainder: - blocks += 1 - return blocks * BLOCKSIZE - - def isreg(self): - 'Return True if the Tarinfo object is a regular file.' - return self.type in REGULAR_TYPES - - def isfile(self): - 'Return True if the Tarinfo object is a regular file.' - return self.isreg() - - def isdir(self): - 'Return True if it is a directory.' - return self.type == DIRTYPE - - def issym(self): - 'Return True if it is a symbolic link.' - return self.type == SYMTYPE - - def islnk(self): - 'Return True if it is a hard link.' - return self.type == LNKTYPE - - def ischr(self): - 'Return True if it is a character device.' - return self.type == CHRTYPE - - def isblk(self): - 'Return True if it is a block device.' - return self.type == BLKTYPE - - def isfifo(self): - 'Return True if it is a FIFO.' - return self.type == FIFOTYPE - - def issparse(self): - return self.sparse is not None - - def isdev(self): - 'Return True if it is one of character device, block device or FIFO.' - return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) -# class TarInfo - -class TarFile(object): - """The TarFile Class provides an interface to tar archives. - """ - - debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) - - dereference = False # If true, add content of linked file to the - # tar file, else the link. - - ignore_zeros = False # If true, skips empty or invalid blocks and - # continues processing. - - errorlevel = 1 # If 0, fatal errors only appear in debug - # messages (if debug >= 0). If > 0, errors - # are passed to the caller as exceptions. - - format = DEFAULT_FORMAT # The format to use when creating an archive. - - encoding = ENCODING # Encoding for 8-bit character strings. - - errors = None # Error handler for unicode conversion. - - tarinfo = TarInfo # The default TarInfo class to use. - - fileobject = ExFileObject # The file-object for extractfile(). - - extraction_filter = None # The default filter for extraction. - - def __init__(self, name=None, mode="r", fileobj=None, format=None, - tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, - errors="surrogateescape", pax_headers=None, debug=None, - errorlevel=None, copybufsize=None, stream=False): - """Open an (uncompressed) tar archive 'name'. 'mode' is either 'r' to - read from an existing archive, 'a' to append data to an existing - file or 'w' to create a new file overwriting an existing one. 'mode' - defaults to 'r'. - If 'fileobj' is given, it is used for reading or writing data. If it - can be determined, 'mode' is overridden by 'fileobj's mode. - 'fileobj' is not closed, when TarFile is closed. - """ - modes = {"r": "rb", "a": "r+b", "w": "wb", "x": "xb"} - if mode not in modes: - raise ValueError("mode must be 'r', 'a', 'w' or 'x'") - self.mode = mode - self._mode = modes[mode] - - if not fileobj: - if self.mode == "a" and not os.path.exists(name): - # Create nonexistent files in append mode. - self.mode = "w" - self._mode = "wb" - fileobj = bltn_open(name, self._mode) - self._extfileobj = False - else: - if (name is None and hasattr(fileobj, "name") and - isinstance(fileobj.name, (str, bytes))): - name = fileobj.name - if hasattr(fileobj, "mode"): - self._mode = fileobj.mode - self._extfileobj = True - self.name = os.path.abspath(name) if name else None - self.fileobj = fileobj - - self.stream = stream - - # Init attributes. - if format is not None: - self.format = format - if tarinfo is not None: - self.tarinfo = tarinfo - if dereference is not None: - self.dereference = dereference - if ignore_zeros is not None: - self.ignore_zeros = ignore_zeros - if encoding is not None: - self.encoding = encoding - self.errors = errors - - if pax_headers is not None and self.format == PAX_FORMAT: - self.pax_headers = pax_headers - else: - self.pax_headers = {} - - if debug is not None: - self.debug = debug - if errorlevel is not None: - self.errorlevel = errorlevel - - # Init datastructures. - self.copybufsize = copybufsize - self.closed = False - self.members = [] # list of members as TarInfo objects - self._loaded = False # flag if all members have been read - self.offset = self.fileobj.tell() - # current position in the archive file - self.inodes = {} # dictionary caching the inodes of - # archive members already added - self._unames = {} # Cached mappings of uid -> uname - self._gnames = {} # Cached mappings of gid -> gname - - try: - if self.mode == "r": - self.firstmember = None - self.firstmember = self.next() - - if self.mode == "a": - # Move to the end of the archive, - # before the first empty block. - while True: - self.fileobj.seek(self.offset) - try: - tarinfo = self.tarinfo.fromtarfile(self) - self.members.append(tarinfo) - except EOFHeaderError: - self.fileobj.seek(self.offset) - break - except HeaderError as e: - raise ReadError(str(e)) from None - - if self.mode in ("a", "w", "x"): - self._loaded = True - - if self.pax_headers: - buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) - self.fileobj.write(buf) - self.offset += len(buf) - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - #-------------------------------------------------------------------------- - # Below are the classmethods which act as alternate constructors to the - # TarFile class. The open() method is the only one that is needed for - # public use; it is the "super"-constructor and is able to select an - # adequate "sub"-constructor for a particular compression using the mapping - # from OPEN_METH. - # - # This concept allows one to subclass TarFile without losing the comfort of - # the super-constructor. A sub-constructor is registered and made available - # by adding it to the mapping in OPEN_METH. - - @classmethod - def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): - """Open a tar archive for reading, writing or appending. Return - an appropriate TarFile class. - - mode: - 'r' or 'r:*' open for reading with transparent compression - 'r:' open for reading exclusively uncompressed - 'r:gz' open for reading with gzip compression - 'r:bz2' open for reading with bzip2 compression - 'r:xz' open for reading with lzma compression - 'r:zst' open for reading with zstd compression - 'a' or 'a:' open for appending, creating the file if necessary - 'w' or 'w:' open for writing without compression - 'w:gz' open for writing with gzip compression - 'w:bz2' open for writing with bzip2 compression - 'w:xz' open for writing with lzma compression - 'w:zst' open for writing with zstd compression - - 'x' or 'x:' create a tarfile exclusively without compression, raise - an exception if the file is already created - 'x:gz' create a gzip compressed tarfile, raise an exception - if the file is already created - 'x:bz2' create a bzip2 compressed tarfile, raise an exception - if the file is already created - 'x:xz' create an lzma compressed tarfile, raise an exception - if the file is already created - 'x:zst' create a zstd compressed tarfile, raise an exception - if the file is already created - - 'r|*' open a stream of tar blocks with transparent compression - 'r|' open an uncompressed stream of tar blocks for reading - 'r|gz' open a gzip compressed stream of tar blocks - 'r|bz2' open a bzip2 compressed stream of tar blocks - 'r|xz' open an lzma compressed stream of tar blocks - 'r|zst' open a zstd compressed stream of tar blocks - 'w|' open an uncompressed stream for writing - 'w|gz' open a gzip compressed stream for writing - 'w|bz2' open a bzip2 compressed stream for writing - 'w|xz' open an lzma compressed stream for writing - 'w|zst' open a zstd compressed stream for writing - """ - - if not name and not fileobj: - raise ValueError("nothing to open") - - if mode in ("r", "r:*"): - # Find out which *open() is appropriate for opening the file. - def not_compressed(comptype): - return cls.OPEN_METH[comptype] == 'taropen' - error_msgs = [] - for comptype in sorted(cls.OPEN_METH, key=not_compressed): - func = getattr(cls, cls.OPEN_METH[comptype]) - if fileobj is not None: - saved_pos = fileobj.tell() - try: - return func(name, "r", fileobj, **kwargs) - except (ReadError, CompressionError) as e: - error_msgs.append(f'- method {comptype}: {e!r}') - if fileobj is not None: - fileobj.seek(saved_pos) - continue - error_msgs_summary = '\n'.join(error_msgs) - raise ReadError(f"file could not be opened successfully:\n{error_msgs_summary}") - - elif ":" in mode: - filemode, comptype = mode.split(":", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - # Select the *open() function according to - # given compression. - if comptype in cls.OPEN_METH: - func = getattr(cls, cls.OPEN_METH[comptype]) - else: - raise CompressionError("unknown compression type %r" % comptype) - return func(name, filemode, fileobj, **kwargs) - - elif "|" in mode: - filemode, comptype = mode.split("|", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - if filemode not in ("r", "w"): - raise ValueError("mode must be 'r' or 'w'") - if "compresslevel" in kwargs and comptype not in ("gz", "bz2"): - raise ValueError( - "compresslevel is only valid for w|gz and w|bz2 modes" - ) - if "preset" in kwargs and comptype not in ("xz",): - raise ValueError("preset is only valid for w|xz mode") - - compresslevel = kwargs.pop("compresslevel", 9) - preset = kwargs.pop("preset", None) - stream = _Stream(name, filemode, comptype, fileobj, bufsize, - compresslevel, preset) - try: - t = cls(name, filemode, stream, **kwargs) - except: - stream.close() - raise - t._extfileobj = False - return t - - elif mode in ("a", "w", "x"): - return cls.taropen(name, mode, fileobj, **kwargs) - - raise ValueError("undiscernible mode") - - @classmethod - def taropen(cls, name, mode="r", fileobj=None, **kwargs): - """Open uncompressed tar archive name for reading or writing. - """ - if mode not in ("r", "a", "w", "x"): - raise ValueError("mode must be 'r', 'a', 'w' or 'x'") - return cls(name, mode, fileobj, **kwargs) - - @classmethod - def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open gzip compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if mode not in ("r", "w", "x"): - raise ValueError("mode must be 'r', 'w' or 'x'") - - try: - from gzip import GzipFile - except ImportError: - raise CompressionError("gzip module is not available") from None - - try: - fileobj = GzipFile(name, mode + "b", compresslevel, fileobj) - except OSError as e: - if fileobj is not None and mode == 'r': - raise ReadError("not a gzip file") from e - raise - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except OSError as e: - fileobj.close() - if mode == 'r': - raise ReadError("not a gzip file") from e - raise - except: - fileobj.close() - raise - t._extfileobj = False - return t - - @classmethod - def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open bzip2 compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if mode not in ("r", "w", "x"): - raise ValueError("mode must be 'r', 'w' or 'x'") - - try: - from bz2 import BZ2File - except ImportError: - raise CompressionError("bz2 module is not available") from None - - fileobj = BZ2File(fileobj or name, mode, compresslevel=compresslevel) - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except (OSError, EOFError) as e: - fileobj.close() - if mode == 'r': - raise ReadError("not a bzip2 file") from e - raise - except: - fileobj.close() - raise - t._extfileobj = False - return t - - @classmethod - def xzopen(cls, name, mode="r", fileobj=None, preset=None, **kwargs): - """Open lzma compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if mode not in ("r", "w", "x"): - raise ValueError("mode must be 'r', 'w' or 'x'") - - try: - from lzma import LZMAFile, LZMAError - except ImportError: - raise CompressionError("lzma module is not available") from None - - fileobj = LZMAFile(fileobj or name, mode, preset=preset) - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except (LZMAError, EOFError) as e: - fileobj.close() - if mode == 'r': - raise ReadError("not an lzma file") from e - raise - except: - fileobj.close() - raise - t._extfileobj = False - return t - - @classmethod - def zstopen(cls, name, mode="r", fileobj=None, level=None, options=None, - zstd_dict=None, **kwargs): - """Open zstd compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if mode not in ("r", "w", "x"): - raise ValueError("mode must be 'r', 'w' or 'x'") - - try: - from compression.zstd import ZstdFile, ZstdError - except ImportError: - raise CompressionError("compression.zstd module is not available") from None - - fileobj = ZstdFile( - fileobj or name, - mode, - level=level, - options=options, - zstd_dict=zstd_dict - ) - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except (ZstdError, EOFError) as e: - fileobj.close() - if mode == 'r': - raise ReadError("not a zstd file") from e - raise - except Exception: - fileobj.close() - raise - t._extfileobj = False - return t - - # All *open() methods are registered here. - OPEN_METH = { - "tar": "taropen", # uncompressed tar - "gz": "gzopen", # gzip compressed tar - "bz2": "bz2open", # bzip2 compressed tar - "xz": "xzopen", # lzma compressed tar - "zst": "zstopen", # zstd compressed tar - } - - #-------------------------------------------------------------------------- - # The public methods which TarFile provides: - - def close(self): - """Close the TarFile. In write-mode, two finishing zero blocks are - appended to the archive. - """ - if self.closed: - return - - self.closed = True - try: - if self.mode in ("a", "w", "x"): - self.fileobj.write(NUL * (BLOCKSIZE * 2)) - self.offset += (BLOCKSIZE * 2) - # fill up the end with zero-blocks - # (like option -b20 for tar does) - blocks, remainder = divmod(self.offset, RECORDSIZE) - if remainder > 0: - self.fileobj.write(NUL * (RECORDSIZE - remainder)) - finally: - if not self._extfileobj: - self.fileobj.close() - - def getmember(self, name): - """Return a TarInfo object for member 'name'. If 'name' can not be - found in the archive, KeyError is raised. If a member occurs more - than once in the archive, its last occurrence is assumed to be the - most up-to-date version. - """ - tarinfo = self._getmember(name.rstrip('/')) - if tarinfo is None: - raise KeyError("filename %r not found" % name) - return tarinfo - - def getmembers(self): - """Return the members of the archive as a list of TarInfo objects. The - list has the same order as the members in the archive. - """ - self._check() - if not self._loaded: # if we want to obtain a list of - self._load() # all members, we first have to - # scan the whole archive. - return self.members - - def getnames(self): - """Return the members of the archive as a list of their names. It has - the same order as the list returned by getmembers(). - """ - return [tarinfo.name for tarinfo in self.getmembers()] - - def gettarinfo(self, name=None, arcname=None, fileobj=None): - """Create a TarInfo object from the result of os.stat or equivalent - on an existing file. The file is either named by 'name', or - specified as a file object 'fileobj' with a file descriptor. If - given, 'arcname' specifies an alternative name for the file in the - archive, otherwise, the name is taken from the 'name' attribute of - 'fileobj', or the 'name' argument. The name should be a text - string. - """ - self._check("awx") - - # When fileobj is given, replace name by - # fileobj's real name. - if fileobj is not None: - name = fileobj.name - - # Building the name of the member in the archive. - # Backward slashes are converted to forward slashes, - # Absolute paths are turned to relative paths. - if arcname is None: - arcname = name - drv, arcname = os.path.splitdrive(arcname) - arcname = arcname.replace(os.sep, "/") - arcname = arcname.lstrip("/") - - # Now, fill the TarInfo object with - # information specific for the file. - tarinfo = self.tarinfo() - tarinfo._tarfile = self # To be removed in 3.16. - - # Use os.stat or os.lstat, depending on if symlinks shall be resolved. - if fileobj is None: - if not self.dereference: - statres = os.lstat(name) - else: - statres = os.stat(name) - else: - statres = os.fstat(fileobj.fileno()) - linkname = "" - - stmd = statres.st_mode - if stat.S_ISREG(stmd): - inode = (statres.st_ino, statres.st_dev) - if not self.dereference and statres.st_nlink > 1 and \ - inode in self.inodes and arcname != self.inodes[inode]: - # Is it a hardlink to an already - # archived file? - type = LNKTYPE - linkname = self.inodes[inode] - else: - # The inode is added only if its valid. - # For win32 it is always 0. - type = REGTYPE - if inode[0]: - self.inodes[inode] = arcname - elif stat.S_ISDIR(stmd): - type = DIRTYPE - elif stat.S_ISFIFO(stmd): - type = FIFOTYPE - elif stat.S_ISLNK(stmd): - type = SYMTYPE - linkname = os.readlink(name) - elif stat.S_ISCHR(stmd): - type = CHRTYPE - elif stat.S_ISBLK(stmd): - type = BLKTYPE - else: - return None - - # Fill the TarInfo object with all - # information we can get. - tarinfo.name = arcname - tarinfo.mode = stmd - tarinfo.uid = statres.st_uid - tarinfo.gid = statres.st_gid - if type == REGTYPE: - tarinfo.size = statres.st_size - else: - tarinfo.size = 0 - tarinfo.mtime = statres.st_mtime - tarinfo.type = type - tarinfo.linkname = linkname - - # Calls to pwd.getpwuid() and grp.getgrgid() tend to be expensive. To - # speed things up, cache the resolved usernames and group names. - if pwd: - if tarinfo.uid not in self._unames: - try: - self._unames[tarinfo.uid] = pwd.getpwuid(tarinfo.uid)[0] - except KeyError: - self._unames[tarinfo.uid] = '' - tarinfo.uname = self._unames[tarinfo.uid] - if grp: - if tarinfo.gid not in self._gnames: - try: - self._gnames[tarinfo.gid] = grp.getgrgid(tarinfo.gid)[0] - except KeyError: - self._gnames[tarinfo.gid] = '' - tarinfo.gname = self._gnames[tarinfo.gid] - - if type in (CHRTYPE, BLKTYPE): - if hasattr(os, "major") and hasattr(os, "minor"): - tarinfo.devmajor = os.major(statres.st_rdev) - tarinfo.devminor = os.minor(statres.st_rdev) - return tarinfo - - def list(self, verbose=True, *, members=None): - """Print a table of contents to sys.stdout. If 'verbose' is False, only - the names of the members are printed. If it is True, an 'ls -l'-like - output is produced. 'members' is optional and must be a subset of the - list returned by getmembers(). - """ - # Convert tarinfo type to stat type. - type2mode = {REGTYPE: stat.S_IFREG, SYMTYPE: stat.S_IFLNK, - FIFOTYPE: stat.S_IFIFO, CHRTYPE: stat.S_IFCHR, - DIRTYPE: stat.S_IFDIR, BLKTYPE: stat.S_IFBLK} - self._check() - - if members is None: - members = self - for tarinfo in members: - if verbose: - if tarinfo.mode is None: - _safe_print("??????????") - else: - modetype = type2mode.get(tarinfo.type, 0) - _safe_print(stat.filemode(modetype | tarinfo.mode)) - _safe_print("%s/%s" % (tarinfo.uname or tarinfo.uid, - tarinfo.gname or tarinfo.gid)) - if tarinfo.ischr() or tarinfo.isblk(): - _safe_print("%10s" % - ("%d,%d" % (tarinfo.devmajor, tarinfo.devminor))) - else: - _safe_print("%10d" % tarinfo.size) - if tarinfo.mtime is None: - _safe_print("????-??-?? ??:??:??") - else: - _safe_print("%d-%02d-%02d %02d:%02d:%02d" \ - % time.localtime(tarinfo.mtime)[:6]) - - _safe_print(tarinfo.name + ("/" if tarinfo.isdir() else "")) - - if verbose: - if tarinfo.issym(): - _safe_print("-> " + tarinfo.linkname) - if tarinfo.islnk(): - _safe_print("link to " + tarinfo.linkname) - print() - - def add(self, name, arcname=None, recursive=True, *, filter=None): - """Add the file 'name' to the archive. 'name' may be any type of file - (directory, fifo, symbolic link, etc.). If given, 'arcname' - specifies an alternative name for the file in the archive. - Directories are added recursively by default. This can be avoided by - setting 'recursive' to False. 'filter' is a function - that expects a TarInfo object argument and returns the changed - TarInfo object, if it returns None the TarInfo object will be - excluded from the archive. - """ - self._check("awx") - - if arcname is None: - arcname = name - - # Skip if somebody tries to archive the archive... - if self.name is not None and os.path.abspath(name) == self.name: - self._dbg(2, "tarfile: Skipped %r" % name) - return - - self._dbg(1, name) - - # Create a TarInfo object from the file. - tarinfo = self.gettarinfo(name, arcname) - - if tarinfo is None: - self._dbg(1, "tarfile: Unsupported type %r" % name) - return - - # Change or exclude the TarInfo object. - if filter is not None: - tarinfo = filter(tarinfo) - if tarinfo is None: - self._dbg(2, "tarfile: Excluded %r" % name) - return - - # Append the tar header and data to the archive. - if tarinfo.isreg(): - with bltn_open(name, "rb") as f: - self.addfile(tarinfo, f) - - elif tarinfo.isdir(): - self.addfile(tarinfo) - if recursive: - for f in sorted(os.listdir(name)): - self.add(os.path.join(name, f), os.path.join(arcname, f), - recursive, filter=filter) - - else: - self.addfile(tarinfo) - - def addfile(self, tarinfo, fileobj=None): - """Add the TarInfo object 'tarinfo' to the archive. If 'tarinfo' represents - a non zero-size regular file, the 'fileobj' argument should be a binary file, - and tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects directly, or by using gettarinfo(). - """ - self._check("awx") - - if fileobj is None and tarinfo.isreg() and tarinfo.size != 0: - raise ValueError("fileobj not provided for non zero-size regular file") - - tarinfo = copy.copy(tarinfo) - - buf = tarinfo.tobuf(self.format, self.encoding, self.errors) - self.fileobj.write(buf) - self.offset += len(buf) - bufsize=self.copybufsize - # If there's data to follow, append it. - if fileobj is not None: - copyfileobj(fileobj, self.fileobj, tarinfo.size, bufsize=bufsize) - blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) - if remainder > 0: - self.fileobj.write(NUL * (BLOCKSIZE - remainder)) - blocks += 1 - self.offset += blocks * BLOCKSIZE - - self.members.append(tarinfo) - - def _get_filter_function(self, filter): - if filter is None: - filter = self.extraction_filter - if filter is None: - return data_filter - if isinstance(filter, str): - raise TypeError( - 'String names are not supported for ' - + 'TarFile.extraction_filter. Use a function such as ' - + 'tarfile.data_filter directly.') - return filter - if callable(filter): - return filter - try: - return _NAMED_FILTERS[filter] - except KeyError: - raise ValueError(f"filter {filter!r} not found") from None - - def extractall(self, path=".", members=None, *, numeric_owner=False, - filter=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. 'path' specifies a different directory - to extract to. 'members' is optional and must be a subset of the - list returned by getmembers(). If 'numeric_owner' is True, only - the numbers for user/group names are used and not the names. - - The 'filter' function will be called on each member just - before extraction. - It can return a changed TarInfo or None to skip the member. - String names of common filters are accepted. - """ - directories = [] - - filter_function = self._get_filter_function(filter) - if members is None: - members = self - - for member in members: - tarinfo, unfiltered = self._get_extract_tarinfo( - member, filter_function, path) - if tarinfo is None: - continue - if tarinfo.isdir(): - # For directories, delay setting attributes until later, - # since permissions can interfere with extraction and - # extracting contents can reset mtime. - directories.append(unfiltered) - self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(), - numeric_owner=numeric_owner, - filter_function=filter_function) - - # Reverse sort directories. - directories.sort(key=lambda a: a.name, reverse=True) - - - # Set correct owner, mtime and filemode on directories. - for unfiltered in directories: - try: - # Need to re-apply any filter, to take the *current* filesystem - # state into account. - try: - tarinfo = filter_function(unfiltered, path) - except _FILTER_ERRORS as exc: - self._log_no_directory_fixup(unfiltered, repr(exc)) - continue - if tarinfo is None: - self._log_no_directory_fixup(unfiltered, - 'excluded by filter') - continue - dirpath = os.path.join(path, tarinfo.name) - try: - lstat = os.lstat(dirpath) - except FileNotFoundError: - self._log_no_directory_fixup(tarinfo, 'missing') - continue - if not stat.S_ISDIR(lstat.st_mode): - # This is no longer a directory; presumably a later - # member overwrote the entry. - self._log_no_directory_fixup(tarinfo, 'not a directory') - continue - self.chown(tarinfo, dirpath, numeric_owner=numeric_owner) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError as e: - self._handle_nonfatal_error(e) - - def _log_no_directory_fixup(self, member, reason): - self._dbg(2, "tarfile: Not fixing up directory %r (%s)" % - (member.name, reason)) - - def extract(self, member, path="", set_attrs=True, *, numeric_owner=False, - filter=None): - """Extract a member from the archive to the current working directory, - using its full name. Its file information is extracted as accurately - as possible. 'member' may be a filename or a TarInfo object. You can - specify a different directory using 'path'. File attributes (owner, - mtime, mode) are set unless 'set_attrs' is False. If 'numeric_owner' - is True, only the numbers for user/group names are used and not - the names. - - The 'filter' function will be called before extraction. - It can return a changed TarInfo or None to skip the member. - String names of common filters are accepted. - """ - filter_function = self._get_filter_function(filter) - tarinfo, unfiltered = self._get_extract_tarinfo( - member, filter_function, path) - if tarinfo is not None: - self._extract_one(tarinfo, path, set_attrs, numeric_owner) - - def _get_extract_tarinfo(self, member, filter_function, path): - """Get (filtered, unfiltered) TarInfos from *member* - - *member* might be a string. - - Return (None, None) if not found. - """ - - if isinstance(member, str): - unfiltered = self.getmember(member) - else: - unfiltered = member - - filtered = None - try: - filtered = filter_function(unfiltered, path) - except (OSError, UnicodeEncodeError, FilterError) as e: - self._handle_fatal_error(e) - except ExtractError as e: - self._handle_nonfatal_error(e) - if filtered is None: - self._dbg(2, "tarfile: Excluded %r" % unfiltered.name) - return None, None - - # Prepare the link target for makelink(). - if filtered.islnk(): - filtered = copy.copy(filtered) - filtered._link_target = os.path.join(path, filtered.linkname) - return filtered, unfiltered - - def _extract_one(self, tarinfo, path, set_attrs, numeric_owner, - filter_function=None): - """Extract from filtered tarinfo to disk. - - filter_function is only used when extracting a *different* - member (e.g. as fallback to creating a symlink) - """ - self._check("r") - - try: - self._extract_member(tarinfo, os.path.join(path, tarinfo.name), - set_attrs=set_attrs, - numeric_owner=numeric_owner, - filter_function=filter_function, - extraction_root=path) - except (OSError, UnicodeEncodeError) as e: - self._handle_fatal_error(e) - except ExtractError as e: - self._handle_nonfatal_error(e) - - def _handle_nonfatal_error(self, e): - """Handle non-fatal error (ExtractError) according to errorlevel""" - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - def _handle_fatal_error(self, e): - """Handle "fatal" error according to self.errorlevel""" - if self.errorlevel > 0: - raise - elif isinstance(e, OSError): - if e.filename is None: - self._dbg(1, "tarfile: %s" % e.strerror) - else: - self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) - else: - self._dbg(1, "tarfile: %s %s" % (type(e).__name__, e)) - - def extractfile(self, member): - """Extract a member from the archive as a file object. 'member' may be - a filename or a TarInfo object. If 'member' is a regular file or - a link, an io.BufferedReader object is returned. For all other - existing members, None is returned. If 'member' does not appear - in the archive, KeyError is raised. - """ - self._check("r") - - if isinstance(member, str): - tarinfo = self.getmember(member) - else: - tarinfo = member - - if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES: - # Members with unknown types are treated as regular files. - return self.fileobject(self, tarinfo) - - elif tarinfo.islnk() or tarinfo.issym(): - if isinstance(self.fileobj, _Stream): - # A small but ugly workaround for the case that someone tries - # to extract a (sym)link as a file-object from a non-seekable - # stream of tar blocks. - raise StreamError("cannot extract (sym)link as file object") - else: - # A (sym)link's file object is its target's file object. - return self.extractfile(self._find_link_target(tarinfo)) - else: - # If there's no data associated with the member (directory, chrdev, - # blkdev, etc.), return None instead of a file object. - return None - - def _extract_member(self, tarinfo, targetpath, set_attrs=True, - numeric_owner=False, *, filter_function=None, - extraction_root=None): - """Extract the filtered TarInfo object tarinfo to a physical - file called targetpath. - - filter_function is only used when extracting a *different* - member (e.g. as fallback to creating a symlink) - """ - # Fetch the TarInfo object for the given name - # and build the destination pathname, replacing - # forward slashes to platform specific separators. - targetpath = targetpath.rstrip("/") - targetpath = targetpath.replace("/", os.sep) - - # Create all upper directories. - upperdirs = os.path.dirname(targetpath) - if upperdirs and not os.path.exists(upperdirs): - # Create directories that are not part of the archive with - # default permissions. - os.makedirs(upperdirs, exist_ok=True) - - if tarinfo.islnk() or tarinfo.issym(): - self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) - else: - self._dbg(1, tarinfo.name) - - if tarinfo.isreg(): - self.makefile(tarinfo, targetpath) - elif tarinfo.isdir(): - self.makedir(tarinfo, targetpath) - elif tarinfo.isfifo(): - self.makefifo(tarinfo, targetpath) - elif tarinfo.ischr() or tarinfo.isblk(): - self.makedev(tarinfo, targetpath) - elif tarinfo.islnk() or tarinfo.issym(): - self.makelink_with_filter( - tarinfo, targetpath, - filter_function=filter_function, - extraction_root=extraction_root) - elif tarinfo.type not in SUPPORTED_TYPES: - self.makeunknown(tarinfo, targetpath) - else: - self.makefile(tarinfo, targetpath) - - if set_attrs: - self.chown(tarinfo, targetpath, numeric_owner) - if not tarinfo.issym(): - self.chmod(tarinfo, targetpath) - self.utime(tarinfo, targetpath) - - #-------------------------------------------------------------------------- - # Below are the different file methods. They are called via - # _extract_member() when extract() is called. They can be replaced in a - # subclass to implement other functionality. - - def makedir(self, tarinfo, targetpath): - """Make a directory called targetpath. - """ - try: - if tarinfo.mode is None: - # Use the system's default mode - os.mkdir(targetpath) - else: - # Use a safe mode for the directory, the real mode is set - # later in _extract_member(). - os.mkdir(targetpath, 0o700) - except FileExistsError: - if not os.path.isdir(targetpath): - raise - - def makefile(self, tarinfo, targetpath): - """Make a file called targetpath. - """ - source = self.fileobj - source.seek(tarinfo.offset_data) - bufsize = self.copybufsize - with bltn_open(targetpath, "wb") as target: - if tarinfo.sparse is not None: - for offset, size in tarinfo.sparse: - target.seek(offset) - copyfileobj(source, target, size, ReadError, bufsize) - target.seek(tarinfo.size) - target.truncate() - else: - copyfileobj(source, target, tarinfo.size, ReadError, bufsize) - - def makeunknown(self, tarinfo, targetpath): - """Make a file from a TarInfo object with an unknown type - at targetpath. - """ - self.makefile(tarinfo, targetpath) - self._dbg(1, "tarfile: Unknown file type %r, " \ - "extracted as regular file." % tarinfo.type) - - def makefifo(self, tarinfo, targetpath): - """Make a fifo called targetpath. - """ - if hasattr(os, "mkfifo"): - os.mkfifo(targetpath) - else: - raise ExtractError("fifo not supported by system") - - def makedev(self, tarinfo, targetpath): - """Make a character or block device called targetpath. - """ - if not hasattr(os, "mknod") or not hasattr(os, "makedev"): - raise ExtractError("special devices not supported by system") - - mode = tarinfo.mode - if mode is None: - # Use mknod's default - mode = 0o600 - if tarinfo.isblk(): - mode |= stat.S_IFBLK - else: - mode |= stat.S_IFCHR - - os.mknod(targetpath, mode, - os.makedev(tarinfo.devmajor, tarinfo.devminor)) - - def makelink(self, tarinfo, targetpath): - return self.makelink_with_filter(tarinfo, targetpath, None, None) - - def makelink_with_filter(self, tarinfo, targetpath, - filter_function, extraction_root): - """Make a (symbolic) link called targetpath. If it cannot be created - (platform limitation), we try to make a copy of the referenced file - instead of a link. - - filter_function is only used when extracting a *different* - member (e.g. as fallback to creating a link). - """ - keyerror_to_extracterror = False - try: - # For systems that support symbolic and hard links. - if tarinfo.issym(): - if os.path.lexists(targetpath): - # Avoid FileExistsError on following os.symlink. - os.unlink(targetpath) - os.symlink(tarinfo.linkname, targetpath) - return - else: - if os.path.exists(tarinfo._link_target): - if os.path.lexists(targetpath): - # Avoid FileExistsError on following os.link. - os.unlink(targetpath) - os.link(tarinfo._link_target, targetpath) - return - except symlink_exception: - keyerror_to_extracterror = True - - try: - unfiltered = self._find_link_target(tarinfo) - except KeyError: - if keyerror_to_extracterror: - raise ExtractError( - "unable to resolve link inside archive") from None - else: - raise - - if filter_function is None: - filtered = unfiltered - else: - if extraction_root is None: - raise ExtractError( - "makelink_with_filter: if filter_function is not None, " - + "extraction_root must also not be None") - try: - filtered = filter_function(unfiltered, extraction_root) - except _FILTER_ERRORS as cause: - raise LinkFallbackError(tarinfo, unfiltered.name) from cause - if filtered is not None: - self._extract_member(filtered, targetpath, - filter_function=filter_function, - extraction_root=extraction_root) - - def chown(self, tarinfo, targetpath, numeric_owner): - """Set owner of targetpath according to tarinfo. If numeric_owner - is True, use .gid/.uid instead of .gname/.uname. If numeric_owner - is False, fall back to .gid/.uid when the search based on name - fails. - """ - if hasattr(os, "geteuid") and os.geteuid() == 0: - # We have to be root to do so. - g = tarinfo.gid - u = tarinfo.uid - if not numeric_owner: - try: - if grp and tarinfo.gname: - g = grp.getgrnam(tarinfo.gname)[2] - except KeyError: - pass - try: - if pwd and tarinfo.uname: - u = pwd.getpwnam(tarinfo.uname)[2] - except KeyError: - pass - if g is None: - g = -1 - if u is None: - u = -1 - try: - if tarinfo.issym() and hasattr(os, "lchown"): - os.lchown(targetpath, u, g) - else: - os.chown(targetpath, u, g) - except (OSError, OverflowError) as e: - # OverflowError can be raised if an ID doesn't fit in 'id_t' - raise ExtractError("could not change owner") from e - - def chmod(self, tarinfo, targetpath): - """Set file permissions of targetpath according to tarinfo. - """ - if tarinfo.mode is None: - return - try: - os.chmod(targetpath, tarinfo.mode) - except OSError as e: - raise ExtractError("could not change mode") from e - - def utime(self, tarinfo, targetpath): - """Set modification time of targetpath according to tarinfo. - """ - mtime = tarinfo.mtime - if mtime is None: - return - if not hasattr(os, 'utime'): - return - try: - os.utime(targetpath, (mtime, mtime)) - except OSError as e: - raise ExtractError("could not change modification time") from e - - #-------------------------------------------------------------------------- - def next(self): - """Return the next member of the archive as a TarInfo object, when - TarFile is opened for reading. Return None if there is no more - available. - """ - self._check("ra") - if self.firstmember is not None: - m = self.firstmember - self.firstmember = None - return m - - # Advance the file pointer. - if self.offset != self.fileobj.tell(): - if self.offset == 0: - return None - self.fileobj.seek(self.offset - 1) - if not self.fileobj.read(1): - raise ReadError("unexpected end of data") - - # Read the next block. - tarinfo = None - while True: - try: - tarinfo = self.tarinfo.fromtarfile(self) - except EOFHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - except InvalidHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - elif self.offset == 0: - raise ReadError(str(e)) from None - except EmptyHeaderError: - if self.offset == 0: - raise ReadError("empty file") from None - except TruncatedHeaderError as e: - if self.offset == 0: - raise ReadError(str(e)) from None - except SubsequentHeaderError as e: - raise ReadError(str(e)) from None - except Exception as e: - try: - import zlib - if isinstance(e, zlib.error): - raise ReadError(f'zlib error: {e}') from None - else: - raise e - except ImportError: - raise e - break - - if tarinfo is not None: - # if streaming the file we do not want to cache the tarinfo - if not self.stream: - self.members.append(tarinfo) - else: - self._loaded = True - - return tarinfo - - #-------------------------------------------------------------------------- - # Little helper methods: - - def _getmember(self, name, tarinfo=None, normalize=False): - """Find an archive member by name from bottom to top. - If tarinfo is given, it is used as the starting point. - """ - # Ensure that all members have been loaded. - members = self.getmembers() - - # Limit the member search list up to tarinfo. - skipping = False - if tarinfo is not None: - try: - index = members.index(tarinfo) - except ValueError: - # The given starting point might be a (modified) copy. - # We'll later skip members until we find an equivalent. - skipping = True - else: - # Happy fast path - members = members[:index] - - if normalize: - name = os.path.normpath(name) - - for member in reversed(members): - if skipping: - if tarinfo.offset == member.offset: - skipping = False - continue - if normalize: - member_name = os.path.normpath(member.name) - else: - member_name = member.name - - if name == member_name: - return member - - if skipping: - # Starting point was not found - raise ValueError(tarinfo) - - def _load(self): - """Read through the entire archive file and look for readable - members. This should not run if the file is set to stream. - """ - if not self.stream: - while self.next() is not None: - pass - self._loaded = True - - def _check(self, mode=None): - """Check if TarFile is still open, and if the operation's mode - corresponds to TarFile's mode. - """ - if self.closed: - raise OSError("%s is closed" % self.__class__.__name__) - if mode is not None and self.mode not in mode: - raise OSError("bad operation for mode %r" % self.mode) - - def _find_link_target(self, tarinfo): - """Find the target member of a symlink or hardlink member in the - archive. - """ - if tarinfo.issym(): - # Always search the entire archive. - linkname = "/".join(filter(None, (os.path.dirname(tarinfo.name), tarinfo.linkname))) - limit = None - else: - # Search the archive before the link, because a hard link is - # just a reference to an already archived file. - linkname = tarinfo.linkname - limit = tarinfo - - member = self._getmember(linkname, tarinfo=limit, normalize=True) - if member is None: - raise KeyError("linkname %r not found" % linkname) - return member - - def __iter__(self): - """Provide an iterator object. - """ - if self._loaded: - yield from self.members - return - - # Yield items using TarFile's next() method. - # When all members have been read, set TarFile as _loaded. - index = 0 - # Fix for SF #1100429: Under rare circumstances it can - # happen that getmembers() is called during iteration, - # which will have already exhausted the next() method. - if self.firstmember is not None: - tarinfo = self.next() - index += 1 - yield tarinfo - - while True: - if index < len(self.members): - tarinfo = self.members[index] - elif not self._loaded: - tarinfo = self.next() - if not tarinfo: - self._loaded = True - return - else: - return - index += 1 - yield tarinfo - - def _dbg(self, level, msg): - """Write debugging output to sys.stderr. - """ - if level <= self.debug: - print(msg, file=sys.stderr) - - def __enter__(self): - self._check() - return self - - def __exit__(self, type, value, traceback): - if type is None: - self.close() - else: - # An exception occurred. We must not call close() because - # it would try to write end-of-archive blocks and padding. - if not self._extfileobj: - self.fileobj.close() - self.closed = True - -#-------------------- -# exported functions -#-------------------- - -def is_tarfile(name): - """Return True if name points to a tar archive that we - are able to handle, else return False. - - 'name' should be a string, file, or file-like object. - """ - try: - if hasattr(name, "read"): - pos = name.tell() - t = open(fileobj=name) - name.seek(pos) - else: - t = open(name) - t.close() - return True - except TarError: - return False - -open = TarFile.open - - -def main(): - import argparse - - description = 'A simple command-line interface for tarfile module.' - parser = argparse.ArgumentParser(description=description, color=True) - parser.add_argument('-v', '--verbose', action='store_true', default=False, - help='Verbose output') - parser.add_argument('--filter', metavar='<filtername>', - choices=_NAMED_FILTERS, - help='Filter for extraction') - - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument('-l', '--list', metavar='<tarfile>', - help='Show listing of a tarfile') - group.add_argument('-e', '--extract', nargs='+', - metavar=('<tarfile>', '<output_dir>'), - help='Extract tarfile into target dir') - group.add_argument('-c', '--create', nargs='+', - metavar=('<name>', '<file>'), - help='Create tarfile from sources') - group.add_argument('-t', '--test', metavar='<tarfile>', - help='Test if a tarfile is valid') - - args = parser.parse_args() - - if args.filter and args.extract is None: - parser.exit(1, '--filter is only valid for extraction\n') - - if args.test is not None: - src = args.test - if is_tarfile(src): - with open(src, 'r') as tar: - tar.getmembers() - print(tar.getmembers(), file=sys.stderr) - if args.verbose: - print('{!r} is a tar archive.'.format(src)) - else: - parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) - - elif args.list is not None: - src = args.list - if is_tarfile(src): - with TarFile.open(src, 'r:*') as tf: - tf.list(verbose=args.verbose) - else: - parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) - - elif args.extract is not None: - if len(args.extract) == 1: - src = args.extract[0] - curdir = os.curdir - elif len(args.extract) == 2: - src, curdir = args.extract - else: - parser.exit(1, parser.format_help()) - - if is_tarfile(src): - with TarFile.open(src, 'r:*') as tf: - tf.extractall(path=curdir, filter=args.filter) - if args.verbose: - if curdir == '.': - msg = '{!r} file is extracted.'.format(src) - else: - msg = ('{!r} file is extracted ' - 'into {!r} directory.').format(src, curdir) - print(msg) - else: - parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) - - elif args.create is not None: - tar_name = args.create.pop(0) - _, ext = os.path.splitext(tar_name) - compressions = { - # gz - '.gz': 'gz', - '.tgz': 'gz', - # xz - '.xz': 'xz', - '.txz': 'xz', - # bz2 - '.bz2': 'bz2', - '.tbz': 'bz2', - '.tbz2': 'bz2', - '.tb2': 'bz2', - # zstd - '.zst': 'zst', - '.tzst': 'zst', - } - tar_mode = 'w:' + compressions[ext] if ext in compressions else 'w' - tar_files = args.create - - with TarFile.open(tar_name, tar_mode) as tf: - for file_name in tar_files: - tf.add(file_name) - - if args.verbose: - print('{!r} file created.'.format(tar_name)) - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/tempfile.py b/Python314_4_x86_Template/Lib/tempfile.py deleted file mode 100644 index a34e062f8..000000000 --- a/Python314_4_x86_Template/Lib/tempfile.py +++ /dev/null @@ -1,977 +0,0 @@ -"""Temporary files. - -This module provides generic, low- and high-level interfaces for -creating temporary files and directories. All of the interfaces -provided by this module can be used without fear of race conditions -except for 'mktemp'. 'mktemp' is subject to race conditions and -should not be used; it is provided for backward compatibility only. - -The default path names are returned as str. If you supply bytes as -input, all return values will be in bytes. Ex: - - >>> tempfile.mkstemp() - (4, '/tmp/tmptpu9nin8') - >>> tempfile.mkdtemp(suffix=b'') - b'/tmp/tmppbi8f0hy' - -This module also provides some data items to the user: - - TMP_MAX - maximum number of names that will be tried before - giving up. - tempdir - If this is set to a string before the first use of - any routine from this module, it will be considered as - another candidate location to store temporary files. -""" - -__all__ = [ - "NamedTemporaryFile", "TemporaryFile", # high level safe interfaces - "SpooledTemporaryFile", "TemporaryDirectory", - "mkstemp", "mkdtemp", # low level safe interfaces - "mktemp", # deprecated unsafe interface - "TMP_MAX", "gettempprefix", # constants - "tempdir", "gettempdir", - "gettempprefixb", "gettempdirb", - ] - - -# Imports. - -import functools as _functools -import warnings as _warnings -import io as _io -import os as _os -import shutil as _shutil -import errno as _errno -from random import Random as _Random -import sys as _sys -import types as _types -import weakref as _weakref -import _thread -_allocate_lock = _thread.allocate_lock - -_text_openflags = _os.O_RDWR | _os.O_CREAT | _os.O_EXCL -if hasattr(_os, 'O_NOFOLLOW'): - _text_openflags |= _os.O_NOFOLLOW - -_bin_openflags = _text_openflags -if hasattr(_os, 'O_BINARY'): - _bin_openflags |= _os.O_BINARY - -# This is more than enough. -# Each name contains over 40 random bits. Even with a million temporary -# files, the chance of a conflict is less than 1 in a million, and with -# 20 attempts, it is less than 1e-120. -TMP_MAX = 20 - -# This variable _was_ unused for legacy reasons, see issue 10354. -# But as of 3.5 we actually use it at runtime so changing it would -# have a possibly desirable side effect... But we do not want to support -# that as an API. It is undocumented on purpose. Do not depend on this. -template = "tmp" - -# Internal routines. - -_once_lock = _allocate_lock() - - -def _exists(fn): - try: - _os.lstat(fn) - except OSError: - return False - else: - return True - - -def _infer_return_type(*args): - """Look at the type of all args and divine their implied return type.""" - return_type = None - for arg in args: - if arg is None: - continue - - if isinstance(arg, _os.PathLike): - arg = _os.fspath(arg) - - if isinstance(arg, bytes): - if return_type is str: - raise TypeError("Can't mix bytes and non-bytes in " - "path components.") - return_type = bytes - else: - if return_type is bytes: - raise TypeError("Can't mix bytes and non-bytes in " - "path components.") - return_type = str - if return_type is None: - if tempdir is None or isinstance(tempdir, str): - return str # tempfile APIs return a str by default. - else: - # we could check for bytes but it'll fail later on anyway - return bytes - return return_type - - -def _sanitize_params(prefix, suffix, dir): - """Common parameter processing for most APIs in this module.""" - output_type = _infer_return_type(prefix, suffix, dir) - if suffix is None: - suffix = output_type() - if prefix is None: - if output_type is str: - prefix = template - else: - prefix = _os.fsencode(template) - if dir is None: - if output_type is str: - dir = gettempdir() - else: - dir = gettempdirb() - return prefix, suffix, dir, output_type - - -class _RandomNameSequence: - """An instance of _RandomNameSequence generates an endless - sequence of unpredictable strings which can safely be incorporated - into file names. Each string is eight characters long. Multiple - threads can safely use the same instance at the same time. - - _RandomNameSequence is an iterator.""" - - characters = "abcdefghijklmnopqrstuvwxyz0123456789_" - - @property - def rng(self): - cur_pid = _os.getpid() - if cur_pid != getattr(self, '_rng_pid', None): - self._rng = _Random() - self._rng_pid = cur_pid - return self._rng - - def __iter__(self): - return self - - def __next__(self): - return ''.join(self.rng.choices(self.characters, k=8)) - -def _candidate_tempdir_list(): - """Generate a list of candidate temporary directories which - _get_default_tempdir will try.""" - - dirlist = [] - - # First, try the environment. - for envname in 'TMPDIR', 'TEMP', 'TMP': - dirname = _os.getenv(envname) - if dirname: dirlist.append(dirname) - - # Failing that, try OS-specific locations. - if _os.name == 'nt': - dirlist.extend([ _os.path.expanduser(r'~\AppData\Local\Temp'), - _os.path.expandvars(r'%SYSTEMROOT%\Temp'), - r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ]) - else: - dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ]) - - # As a last resort, the current directory. - try: - dirlist.append(_os.getcwd()) - except (AttributeError, OSError): - dirlist.append(_os.curdir) - - return dirlist - -def _get_default_tempdir(dirlist=None): - """Calculate the default directory to use for temporary files. - This routine should be called exactly once. - - We determine whether or not a candidate temp dir is usable by - trying to create and write to a file in that directory. If this - is successful, the test file is deleted. To prevent denial of - service, the name of the test file must be randomized.""" - - namer = _RandomNameSequence() - if dirlist is None: - dirlist = _candidate_tempdir_list() - - for dir in dirlist: - if dir != _os.curdir: - dir = _os.path.abspath(dir) - for seq in range(TMP_MAX): - name = next(namer) - filename = _os.path.join(dir, name) - try: - fd = _os.open(filename, _bin_openflags, 0o600) - try: - try: - _os.write(fd, b'blat') - finally: - _os.close(fd) - finally: - _os.unlink(filename) - return dir - except FileExistsError: - pass - except PermissionError: - # See the comment in mkdtemp(). - if _os.name == 'nt' and _os.path.isdir(dir): - continue - break # no point trying more names in this directory - except OSError: - break # no point trying more names in this directory - raise FileNotFoundError(_errno.ENOENT, - "No usable temporary directory found in %s" % - dirlist) - -_name_sequence = None - -def _get_candidate_names(): - """Common setup sequence for all user-callable interfaces.""" - - global _name_sequence - if _name_sequence is None: - _once_lock.acquire() - try: - if _name_sequence is None: - _name_sequence = _RandomNameSequence() - finally: - _once_lock.release() - return _name_sequence - - -def _mkstemp_inner(dir, pre, suf, flags, output_type): - """Code common to mkstemp, TemporaryFile, and NamedTemporaryFile.""" - - dir = _os.path.abspath(dir) - names = _get_candidate_names() - if output_type is bytes: - names = map(_os.fsencode, names) - - for seq in range(TMP_MAX): - name = next(names) - file = _os.path.join(dir, pre + name + suf) - _sys.audit("tempfile.mkstemp", file) - try: - fd = _os.open(file, flags, 0o600) - except FileExistsError: - continue # try again - except PermissionError: - # See the comment in mkdtemp(). - if _os.name == 'nt' and _os.path.isdir(dir) and seq < TMP_MAX - 1: - continue - else: - raise - return fd, file - - raise FileExistsError(_errno.EEXIST, - "No usable temporary file name found") - -def _dont_follow_symlinks(func, path, *args): - # Pass follow_symlinks=False, unless not supported on this platform. - if func in _os.supports_follow_symlinks: - func(path, *args, follow_symlinks=False) - elif not _os.path.islink(path): - func(path, *args) - -def _resetperms(path): - try: - chflags = _os.chflags - except AttributeError: - pass - else: - _dont_follow_symlinks(chflags, path, 0) - _dont_follow_symlinks(_os.chmod, path, 0o700) - - -# User visible interfaces. - -def gettempprefix(): - """The default prefix for temporary directories as string.""" - return _os.fsdecode(template) - -def gettempprefixb(): - """The default prefix for temporary directories as bytes.""" - return _os.fsencode(template) - -tempdir = None - -def _gettempdir(): - """Private accessor for tempfile.tempdir.""" - global tempdir - if tempdir is None: - _once_lock.acquire() - try: - if tempdir is None: - tempdir = _get_default_tempdir() - finally: - _once_lock.release() - return tempdir - -def gettempdir(): - """Returns tempfile.tempdir as str.""" - return _os.fsdecode(_gettempdir()) - -def gettempdirb(): - """Returns tempfile.tempdir as bytes.""" - return _os.fsencode(_gettempdir()) - -def mkstemp(suffix=None, prefix=None, dir=None, text=False): - """User-callable function to create and return a unique temporary - file. The return value is a pair (fd, name) where fd is the - file descriptor returned by os.open, and name is the filename. - - If 'suffix' is not None, the file name will end with that suffix, - otherwise there will be no suffix. - - If 'prefix' is not None, the file name will begin with that prefix, - otherwise a default prefix is used. - - If 'dir' is not None, the file will be created in that directory, - otherwise a default directory is used. - - If 'text' is specified and true, the file is opened in text - mode. Else (the default) the file is opened in binary mode. - - If any of 'suffix', 'prefix' and 'dir' are not None, they must be the - same type. If they are bytes, the returned name will be bytes; str - otherwise. - - The file is readable and writable only by the creating user ID. - If the operating system uses permission bits to indicate whether a - file is executable, the file is executable by no one. The file - descriptor is not inherited by children of this process. - - Caller is responsible for deleting the file when done with it. - """ - - prefix, suffix, dir, output_type = _sanitize_params(prefix, suffix, dir) - - if text: - flags = _text_openflags - else: - flags = _bin_openflags - - return _mkstemp_inner(dir, prefix, suffix, flags, output_type) - - -def mkdtemp(suffix=None, prefix=None, dir=None): - """User-callable function to create and return a unique temporary - directory. The return value is the pathname of the directory. - - Arguments are as for mkstemp, except that the 'text' argument is - not accepted. - - The directory is readable, writable, and searchable only by the - creating user. - - Caller is responsible for deleting the directory when done with it. - """ - - prefix, suffix, dir, output_type = _sanitize_params(prefix, suffix, dir) - - names = _get_candidate_names() - if output_type is bytes: - names = map(_os.fsencode, names) - - for seq in range(TMP_MAX): - name = next(names) - file = _os.path.join(dir, prefix + name + suffix) - _sys.audit("tempfile.mkdtemp", file) - try: - _os.mkdir(file, 0o700) - except FileExistsError: - continue # try again - except PermissionError: - # On Posix, this exception is raised when the user has no - # write access to the parent directory. - # On Windows, it is also raised when a directory with - # the chosen name already exists, or if the parent directory - # is not a directory. - # We cannot distinguish between "directory-exists-error" and - # "access-denied-error". - if _os.name == 'nt' and _os.path.isdir(dir) and seq < TMP_MAX - 1: - continue - else: - raise - return _os.path.abspath(file) - - raise FileExistsError(_errno.EEXIST, - "No usable temporary directory name found") - -def mktemp(suffix="", prefix=template, dir=None): - """User-callable function to return a unique temporary file name. The - file is not created. - - Arguments are similar to mkstemp, except that the 'text' argument is - not accepted, and suffix=None, prefix=None and bytes file names are not - supported. - - THIS FUNCTION IS UNSAFE AND SHOULD NOT BE USED. The file name may - refer to a file that did not exist at some point, but by the time - you get around to creating it, someone else may have beaten you to - the punch. - """ - -## from warnings import warn as _warn -## _warn("mktemp is a potential security risk to your program", -## RuntimeWarning, stacklevel=2) - - if dir is None: - dir = gettempdir() - - names = _get_candidate_names() - for seq in range(TMP_MAX): - name = next(names) - file = _os.path.join(dir, prefix + name + suffix) - if not _exists(file): - return file - - raise FileExistsError(_errno.EEXIST, - "No usable temporary filename found") - - -class _TemporaryFileCloser: - """A separate object allowing proper closing of a temporary file's - underlying file object, without adding a __del__ method to the - temporary file.""" - - cleanup_called = False - close_called = False - - def __init__( - self, - file, - name, - delete=True, - delete_on_close=True, - warn_message="Implicitly cleaning up unknown file", - ): - self.file = file - self.name = name - self.delete = delete - self.delete_on_close = delete_on_close - self.warn_message = warn_message - - def cleanup(self, windows=(_os.name == 'nt'), unlink=_os.unlink): - if not self.cleanup_called: - self.cleanup_called = True - try: - if not self.close_called: - self.close_called = True - self.file.close() - finally: - # Windows provides delete-on-close as a primitive, in which - # case the file was deleted by self.file.close(). - if self.delete and not (windows and self.delete_on_close): - try: - unlink(self.name) - except FileNotFoundError: - pass - - def close(self): - if not self.close_called: - self.close_called = True - try: - self.file.close() - finally: - if self.delete and self.delete_on_close: - self.cleanup() - - def __del__(self): - close_called = self.close_called - self.cleanup() - if not close_called: - _warnings.warn(self.warn_message, ResourceWarning) - - -class _TemporaryFileWrapper: - """Temporary file wrapper - - This class provides a wrapper around files opened for - temporary use. In particular, it seeks to automatically - remove the file when it is no longer needed. - """ - - def __init__(self, file, name, delete=True, delete_on_close=True): - self.file = file - self.name = name - self._closer = _TemporaryFileCloser( - file, - name, - delete, - delete_on_close, - warn_message=f"Implicitly cleaning up {self!r}", - ) - - def __repr__(self): - file = self.__dict__['file'] - return f"<{type(self).__name__} {file=}>" - - def __getattr__(self, name): - # Attribute lookups are delegated to the underlying file - # and cached for non-numeric results - # (i.e. methods are cached, closed and friends are not) - file = self.__dict__['file'] - a = getattr(file, name) - if hasattr(a, '__call__'): - func = a - @_functools.wraps(func) - def func_wrapper(*args, **kwargs): - return func(*args, **kwargs) - # Avoid closing the file as long as the wrapper is alive, - # see issue #18879. - func_wrapper._closer = self._closer - a = func_wrapper - if not isinstance(a, int): - setattr(self, name, a) - return a - - # The underlying __enter__ method returns the wrong object - # (self.file) so override it to return the wrapper - def __enter__(self): - self.file.__enter__() - return self - - # Need to trap __exit__ as well to ensure the file gets - # deleted when used in a with statement - def __exit__(self, exc, value, tb): - result = self.file.__exit__(exc, value, tb) - self._closer.cleanup() - return result - - def close(self): - """ - Close the temporary file, possibly deleting it. - """ - self._closer.close() - - # iter() doesn't use __getattr__ to find the __iter__ method - def __iter__(self): - # Don't return iter(self.file), but yield from it to avoid closing - # file as long as it's being used as iterator (see issue #23700). We - # can't use 'yield from' here because iter(file) returns the file - # object itself, which has a close method, and thus the file would get - # closed when the generator is finalized, due to PEP380 semantics. - for line in self.file: - yield line - -def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, - newline=None, suffix=None, prefix=None, - dir=None, delete=True, *, errors=None, - delete_on_close=True): - """Create and return a temporary file. - Arguments: - 'prefix', 'suffix', 'dir' -- as for mkstemp. - 'mode' -- the mode argument to io.open (default "w+b"). - 'buffering' -- the buffer size argument to io.open (default -1). - 'encoding' -- the encoding argument to io.open (default None) - 'newline' -- the newline argument to io.open (default None) - 'delete' -- whether the file is automatically deleted (default True). - 'delete_on_close' -- if 'delete', whether the file is deleted on close - (default True) or otherwise either on context manager exit - (if context manager was used) or on object finalization. . - 'errors' -- the errors argument to io.open (default None) - The file is created as mkstemp() would do it. - - Returns an object with a file-like interface; the name of the file - is accessible as its 'name' attribute. The file will be automatically - deleted when it is closed unless the 'delete' argument is set to False. - - On POSIX, NamedTemporaryFiles cannot be automatically deleted if - the creating process is terminated abruptly with a SIGKILL signal. - Windows can delete the file even in this case. - """ - - prefix, suffix, dir, output_type = _sanitize_params(prefix, suffix, dir) - - flags = _bin_openflags - - # Setting O_TEMPORARY in the flags causes the OS to delete - # the file when it is closed. This is only supported by Windows. - if _os.name == 'nt' and delete and delete_on_close: - flags |= _os.O_TEMPORARY - - if "b" not in mode: - encoding = _io.text_encoding(encoding) - - name = None - def opener(*args): - nonlocal name - fd, name = _mkstemp_inner(dir, prefix, suffix, flags, output_type) - return fd - try: - file = _io.open(dir, mode, buffering=buffering, - newline=newline, encoding=encoding, errors=errors, - opener=opener) - try: - raw = getattr(file, 'buffer', file) - raw = getattr(raw, 'raw', raw) - raw.name = name - return _TemporaryFileWrapper(file, name, delete, delete_on_close) - except: - file.close() - raise - except: - if name is not None and not ( - _os.name == 'nt' and delete and delete_on_close): - _os.unlink(name) - raise - -if _os.name != 'posix' or _sys.platform == 'cygwin': - # On non-POSIX and Cygwin systems, assume that we cannot unlink a file - # while it is open. - TemporaryFile = NamedTemporaryFile - -else: - # Is the O_TMPFILE flag available and does it work? - # The flag is set to False if os.open(dir, os.O_TMPFILE) raises an - # IsADirectoryError exception - _O_TMPFILE_WORKS = hasattr(_os, 'O_TMPFILE') - - def TemporaryFile(mode='w+b', buffering=-1, encoding=None, - newline=None, suffix=None, prefix=None, - dir=None, *, errors=None): - """Create and return a temporary file. - Arguments: - 'prefix', 'suffix', 'dir' -- as for mkstemp. - 'mode' -- the mode argument to io.open (default "w+b"). - 'buffering' -- the buffer size argument to io.open (default -1). - 'encoding' -- the encoding argument to io.open (default None) - 'newline' -- the newline argument to io.open (default None) - 'errors' -- the errors argument to io.open (default None) - The file is created as mkstemp() would do it. - - Returns an object with a file-like interface. The file has no - name, and will cease to exist when it is closed. - """ - global _O_TMPFILE_WORKS - - if "b" not in mode: - encoding = _io.text_encoding(encoding) - - prefix, suffix, dir, output_type = _sanitize_params(prefix, suffix, dir) - - flags = _bin_openflags - if _O_TMPFILE_WORKS: - fd = None - def opener(*args): - nonlocal fd - flags2 = (flags | _os.O_TMPFILE) & ~_os.O_CREAT - fd = _os.open(dir, flags2, 0o600) - return fd - try: - file = _io.open(dir, mode, buffering=buffering, - newline=newline, encoding=encoding, - errors=errors, opener=opener) - raw = getattr(file, 'buffer', file) - raw = getattr(raw, 'raw', raw) - raw.name = fd - return file - except IsADirectoryError: - # Linux kernel older than 3.11 ignores the O_TMPFILE flag: - # O_TMPFILE is read as O_DIRECTORY. Trying to open a directory - # with O_RDWR|O_DIRECTORY fails with IsADirectoryError, a - # directory cannot be open to write. Set flag to False to not - # try again. - _O_TMPFILE_WORKS = False - except OSError: - # The filesystem of the directory does not support O_TMPFILE. - # For example, OSError(95, 'Operation not supported'). - # - # On Linux kernel older than 3.11, trying to open a regular - # file (or a symbolic link to a regular file) with O_TMPFILE - # fails with NotADirectoryError, because O_TMPFILE is read as - # O_DIRECTORY. - pass - # Fallback to _mkstemp_inner(). - - fd = None - def opener(*args): - nonlocal fd - fd, name = _mkstemp_inner(dir, prefix, suffix, flags, output_type) - try: - _os.unlink(name) - except BaseException as e: - _os.close(fd) - raise - return fd - file = _io.open(dir, mode, buffering=buffering, - newline=newline, encoding=encoding, errors=errors, - opener=opener) - raw = getattr(file, 'buffer', file) - raw = getattr(raw, 'raw', raw) - raw.name = fd - return file - -class SpooledTemporaryFile(_io.IOBase): - """Temporary file wrapper, specialized to switch from BytesIO - or StringIO to a real file when it exceeds a certain size or - when a fileno is needed. - """ - _rolled = False - - def __init__(self, max_size=0, mode='w+b', buffering=-1, - encoding=None, newline=None, - suffix=None, prefix=None, dir=None, *, errors=None): - if 'b' in mode: - self._file = _io.BytesIO() - else: - encoding = _io.text_encoding(encoding) - self._file = _io.TextIOWrapper(_io.BytesIO(), - encoding=encoding, errors=errors, - newline=newline) - self._max_size = max_size - self._rolled = False - self._TemporaryFileArgs = {'mode': mode, 'buffering': buffering, - 'suffix': suffix, 'prefix': prefix, - 'encoding': encoding, 'newline': newline, - 'dir': dir, 'errors': errors} - - __class_getitem__ = classmethod(_types.GenericAlias) - - def _check(self, file): - if self._rolled: return - max_size = self._max_size - if max_size and file.tell() > max_size: - self.rollover() - - def rollover(self): - if self._rolled: return - file = self._file - newfile = self._file = TemporaryFile(**self._TemporaryFileArgs) - del self._TemporaryFileArgs - - pos = file.tell() - if hasattr(newfile, 'buffer'): - newfile.buffer.write(file.detach().getvalue()) - else: - newfile.write(file.getvalue()) - newfile.seek(pos, 0) - - self._rolled = True - - # The method caching trick from NamedTemporaryFile - # won't work here, because _file may change from a - # BytesIO/StringIO instance to a real file. So we list - # all the methods directly. - - # Context management protocol - def __enter__(self): - if self._file.closed: - raise ValueError("Cannot enter context with closed file") - return self - - def __exit__(self, exc, value, tb): - self._file.close() - - # file protocol - def __iter__(self): - return self._file.__iter__() - - def __del__(self): - if not self.closed: - _warnings.warn( - "Unclosed file {!r}".format(self), - ResourceWarning, - stacklevel=2, - source=self - ) - self.close() - - def close(self): - self._file.close() - - @property - def closed(self): - return self._file.closed - - @property - def encoding(self): - return self._file.encoding - - @property - def errors(self): - return self._file.errors - - def fileno(self): - self.rollover() - return self._file.fileno() - - def flush(self): - self._file.flush() - - def isatty(self): - return self._file.isatty() - - @property - def mode(self): - try: - return self._file.mode - except AttributeError: - return self._TemporaryFileArgs['mode'] - - @property - def name(self): - try: - return self._file.name - except AttributeError: - return None - - @property - def newlines(self): - return self._file.newlines - - def readable(self): - return self._file.readable() - - def read(self, *args): - return self._file.read(*args) - - def read1(self, *args): - return self._file.read1(*args) - - def readinto(self, b): - return self._file.readinto(b) - - def readinto1(self, b): - return self._file.readinto1(b) - - def readline(self, *args): - return self._file.readline(*args) - - def readlines(self, *args): - return self._file.readlines(*args) - - def seekable(self): - return self._file.seekable() - - def seek(self, *args): - return self._file.seek(*args) - - def tell(self): - return self._file.tell() - - def truncate(self, size=None): - if size is None: - return self._file.truncate() - else: - if size > self._max_size: - self.rollover() - return self._file.truncate(size) - - def writable(self): - return self._file.writable() - - def write(self, s): - file = self._file - rv = file.write(s) - self._check(file) - return rv - - def writelines(self, iterable): - if self._max_size == 0 or self._rolled: - return self._file.writelines(iterable) - - it = iter(iterable) - for line in it: - self.write(line) - if self._rolled: - return self._file.writelines(it) - - def detach(self): - return self._file.detach() - - -class TemporaryDirectory: - """Create and return a temporary directory. This has the same - behavior as mkdtemp but can be used as a context manager. For - example: - - with TemporaryDirectory() as tmpdir: - ... - - Upon exiting the context, the directory and everything contained - in it are removed (unless delete=False is passed or an exception - is raised during cleanup and ignore_cleanup_errors is not True). - - Optional Arguments: - suffix - A str suffix for the directory name. (see mkdtemp) - prefix - A str prefix for the directory name. (see mkdtemp) - dir - A directory to create this temp dir in. (see mkdtemp) - ignore_cleanup_errors - False; ignore exceptions during cleanup? - delete - True; whether the directory is automatically deleted. - """ - - def __init__(self, suffix=None, prefix=None, dir=None, - ignore_cleanup_errors=False, *, delete=True): - self.name = mkdtemp(suffix, prefix, dir) - self._ignore_cleanup_errors = ignore_cleanup_errors - self._delete = delete - self._finalizer = _weakref.finalize( - self, self._cleanup, self.name, - warn_message="Implicitly cleaning up {!r}".format(self), - ignore_errors=self._ignore_cleanup_errors, delete=self._delete) - - @classmethod - def _rmtree(cls, name, ignore_errors=False, repeated=False): - def onexc(func, path, exc): - if isinstance(exc, PermissionError): - if repeated and path == name: - if ignore_errors: - return - raise - - try: - if path != name: - _resetperms(_os.path.dirname(path)) - _resetperms(path) - - try: - _os.unlink(path) - except IsADirectoryError: - cls._rmtree(path, ignore_errors=ignore_errors) - except PermissionError: - # The PermissionError handler was originally added for - # FreeBSD in directories, but it seems that it is raised - # on Windows too. - # bpo-43153: Calling _rmtree again may - # raise NotADirectoryError and mask the PermissionError. - # So we must re-raise the current PermissionError if - # path is not a directory. - if not _os.path.isdir(path) or _os.path.isjunction(path): - if ignore_errors: - return - raise - cls._rmtree(path, ignore_errors=ignore_errors, - repeated=(path == name)) - except FileNotFoundError: - pass - elif isinstance(exc, FileNotFoundError): - pass - else: - if not ignore_errors: - raise - - _shutil.rmtree(name, onexc=onexc) - - @classmethod - def _cleanup(cls, name, warn_message, ignore_errors=False, delete=True): - if delete: - cls._rmtree(name, ignore_errors=ignore_errors) - _warnings.warn(warn_message, ResourceWarning) - - def __repr__(self): - return "<{} {!r}>".format(self.__class__.__name__, self.name) - - def __enter__(self): - return self.name - - def __exit__(self, exc, value, tb): - if self._delete: - self.cleanup() - - def cleanup(self): - if self._finalizer.detach() or _os.path.exists(self.name): - self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors) - - __class_getitem__ = classmethod(_types.GenericAlias) diff --git a/Python314_4_x86_Template/Lib/textwrap.py b/Python314_4_x86_Template/Lib/textwrap.py deleted file mode 100644 index 41366fbf4..000000000 --- a/Python314_4_x86_Template/Lib/textwrap.py +++ /dev/null @@ -1,475 +0,0 @@ -"""Text wrapping and filling. -""" - -# Copyright (C) 1999-2001 Gregory P. Ward. -# Copyright (C) 2002 Python Software Foundation. -# Written by Greg Ward <gward@python.net> - -import re - -__all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shorten'] - -# Hardcode the recognized whitespace characters to the US-ASCII -# whitespace characters. The main reason for doing this is that -# some Unicode spaces (like \u00a0) are non-breaking whitespaces. -_whitespace = '\t\n\x0b\x0c\r ' - -class TextWrapper: - """ - Object for wrapping/filling text. The public interface consists of - the wrap() and fill() methods; the other methods are just there for - subclasses to override in order to tweak the default behaviour. - If you want to completely replace the main wrapping algorithm, - you'll probably have to override _wrap_chunks(). - - Several instance attributes control various aspects of wrapping: - width (default: 70) - the maximum width of wrapped lines (unless break_long_words - is false) - initial_indent (default: "") - string that will be prepended to the first line of wrapped - output. Counts towards the line's width. - subsequent_indent (default: "") - string that will be prepended to all lines save the first - of wrapped output; also counts towards each line's width. - expand_tabs (default: true) - Expand tabs in input text to spaces before further processing. - Each tab will become 0 .. 'tabsize' spaces, depending on its position - in its line. If false, each tab is treated as a single character. - tabsize (default: 8) - Expand tabs in input text to 0 .. 'tabsize' spaces, unless - 'expand_tabs' is false. - replace_whitespace (default: true) - Replace all whitespace characters in the input text by spaces - after tab expansion. Note that if expand_tabs is false and - replace_whitespace is true, every tab will be converted to a - single space! - fix_sentence_endings (default: false) - Ensure that sentence-ending punctuation is always followed - by two spaces. Off by default because the algorithm is - (unavoidably) imperfect. - break_long_words (default: true) - Break words longer than 'width'. If false, those words will not - be broken, and some lines might be longer than 'width'. - break_on_hyphens (default: true) - Allow breaking hyphenated words. If true, wrapping will occur - preferably on whitespaces and right after hyphens part of - compound words. - drop_whitespace (default: true) - Drop leading and trailing whitespace from lines. - max_lines (default: None) - Truncate wrapped lines. - placeholder (default: ' [...]') - Append to the last line of truncated text. - """ - - unicode_whitespace_trans = dict.fromkeys(map(ord, _whitespace), ord(' ')) - - # This funky little regex is just the trick for splitting - # text up into word-wrappable chunks. E.g. - # "Hello there -- you goof-ball, use the -b option!" - # splits into - # Hello/ /there/ /--/ /you/ /goof-/ball,/ /use/ /the/ /-b/ /option! - # (after stripping out empty strings). - word_punct = r'[\w!"\'&.,?]' - letter = r'[^\d\W]' - whitespace = r'[%s]' % re.escape(_whitespace) - nowhitespace = '[^' + whitespace[1:] - wordsep_re = re.compile(r''' - ( # any whitespace - %(ws)s+ - | # em-dash between words - (?<=%(wp)s) -{2,} (?=\w) - | # word, possibly hyphenated - %(nws)s+? (?: - # hyphenated word - -(?: (?<=%(lt)s{2}-) | (?<=%(lt)s-%(lt)s-)) - (?= %(lt)s -? %(lt)s) - | # end of word - (?=%(ws)s|\z) - | # em-dash - (?<=%(wp)s) (?=-{2,}\w) - ) - )''' % {'wp': word_punct, 'lt': letter, - 'ws': whitespace, 'nws': nowhitespace}, - re.VERBOSE) - del word_punct, letter, nowhitespace - - # This less funky little regex just split on recognized spaces. E.g. - # "Hello there -- you goof-ball, use the -b option!" - # splits into - # Hello/ /there/ /--/ /you/ /goof-ball,/ /use/ /the/ /-b/ /option!/ - wordsep_simple_re = re.compile(r'(%s+)' % whitespace) - del whitespace - - # XXX this is not locale- or charset-aware -- string.lowercase - # is US-ASCII only (and therefore English-only) - sentence_end_re = re.compile(r'[a-z]' # lowercase letter - r'[\.\!\?]' # sentence-ending punct. - r'[\"\']?' # optional end-of-quote - r'\z') # end of chunk - - def __init__(self, - width=70, - initial_indent="", - subsequent_indent="", - expand_tabs=True, - replace_whitespace=True, - fix_sentence_endings=False, - break_long_words=True, - drop_whitespace=True, - break_on_hyphens=True, - tabsize=8, - *, - max_lines=None, - placeholder=' [...]'): - self.width = width - self.initial_indent = initial_indent - self.subsequent_indent = subsequent_indent - self.expand_tabs = expand_tabs - self.replace_whitespace = replace_whitespace - self.fix_sentence_endings = fix_sentence_endings - self.break_long_words = break_long_words - self.drop_whitespace = drop_whitespace - self.break_on_hyphens = break_on_hyphens - self.tabsize = tabsize - self.max_lines = max_lines - self.placeholder = placeholder - - - # -- Private methods ----------------------------------------------- - # (possibly useful for subclasses to override) - - def _munge_whitespace(self, text): - """_munge_whitespace(text : string) -> string - - Munge whitespace in text: expand tabs and convert all other - whitespace characters to spaces. Eg. " foo\\tbar\\n\\nbaz" - becomes " foo bar baz". - """ - if self.expand_tabs: - text = text.expandtabs(self.tabsize) - if self.replace_whitespace: - text = text.translate(self.unicode_whitespace_trans) - return text - - - def _split(self, text): - """_split(text : string) -> [string] - - Split the text to wrap into indivisible chunks. Chunks are - not quite the same as words; see _wrap_chunks() for full - details. As an example, the text - Look, goof-ball -- use the -b option! - breaks into the following chunks: - 'Look,', ' ', 'goof-', 'ball', ' ', '--', ' ', - 'use', ' ', 'the', ' ', '-b', ' ', 'option!' - if break_on_hyphens is True, or in: - 'Look,', ' ', 'goof-ball', ' ', '--', ' ', - 'use', ' ', 'the', ' ', '-b', ' ', option!' - otherwise. - """ - if self.break_on_hyphens is True: - chunks = self.wordsep_re.split(text) - else: - chunks = self.wordsep_simple_re.split(text) - chunks = [c for c in chunks if c] - return chunks - - def _fix_sentence_endings(self, chunks): - """_fix_sentence_endings(chunks : [string]) - - Correct for sentence endings buried in 'chunks'. Eg. when the - original text contains "... foo.\\nBar ...", munge_whitespace() - and split() will convert that to [..., "foo.", " ", "Bar", ...] - which has one too few spaces; this method simply changes the one - space to two. - """ - i = 0 - patsearch = self.sentence_end_re.search - while i < len(chunks)-1: - if chunks[i+1] == " " and patsearch(chunks[i]): - chunks[i+1] = " " - i += 2 - else: - i += 1 - - def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width): - """_handle_long_word(chunks : [string], - cur_line : [string], - cur_len : int, width : int) - - Handle a chunk of text (most likely a word, not whitespace) that - is too long to fit in any line. - """ - # Figure out when indent is larger than the specified width, and make - # sure at least one character is stripped off on every pass - if width < 1: - space_left = 1 - else: - space_left = width - cur_len - - # If we're allowed to break long words, then do so: put as much - # of the next chunk onto the current line as will fit. - if self.break_long_words and space_left > 0: - end = space_left - chunk = reversed_chunks[-1] - if self.break_on_hyphens and len(chunk) > space_left: - # break after last hyphen, but only if there are - # non-hyphens before it - hyphen = chunk.rfind('-', 0, space_left) - if hyphen > 0 and any(c != '-' for c in chunk[:hyphen]): - end = hyphen + 1 - cur_line.append(chunk[:end]) - reversed_chunks[-1] = chunk[end:] - - # Otherwise, we have to preserve the long word intact. Only add - # it to the current line if there's nothing already there -- - # that minimizes how much we violate the width constraint. - elif not cur_line: - cur_line.append(reversed_chunks.pop()) - - # If we're not allowed to break long words, and there's already - # text on the current line, do nothing. Next time through the - # main loop of _wrap_chunks(), we'll wind up here again, but - # cur_len will be zero, so the next line will be entirely - # devoted to the long word that we can't handle right now. - - def _wrap_chunks(self, chunks): - """_wrap_chunks(chunks : [string]) -> [string] - - Wrap a sequence of text chunks and return a list of lines of - length 'self.width' or less. (If 'break_long_words' is false, - some lines may be longer than this.) Chunks correspond roughly - to words and the whitespace between them: each chunk is - indivisible (modulo 'break_long_words'), but a line break can - come between any two chunks. Chunks should not have internal - whitespace; ie. a chunk is either all whitespace or a "word". - Whitespace chunks will be removed from the beginning and end of - lines, but apart from that whitespace is preserved. - """ - lines = [] - if self.width <= 0: - raise ValueError("invalid width %r (must be > 0)" % self.width) - if self.max_lines is not None: - if self.max_lines > 1: - indent = self.subsequent_indent - else: - indent = self.initial_indent - if len(indent) + len(self.placeholder.lstrip()) > self.width: - raise ValueError("placeholder too large for max width") - - # Arrange in reverse order so items can be efficiently popped - # from a stack of chucks. - chunks.reverse() - - while chunks: - - # Start the list of chunks that will make up the current line. - # cur_len is just the length of all the chunks in cur_line. - cur_line = [] - cur_len = 0 - - # Figure out which static string will prefix this line. - if lines: - indent = self.subsequent_indent - else: - indent = self.initial_indent - - # Maximum width for this line. - width = self.width - len(indent) - - # First chunk on line is whitespace -- drop it, unless this - # is the very beginning of the text (ie. no lines started yet). - if self.drop_whitespace and chunks[-1].strip() == '' and lines: - del chunks[-1] - - while chunks: - l = len(chunks[-1]) - - # Can at least squeeze this chunk onto the current line. - if cur_len + l <= width: - cur_line.append(chunks.pop()) - cur_len += l - - # Nope, this line is full. - else: - break - - # The current line is full, and the next chunk is too big to - # fit on *any* line (not just this one). - if chunks and len(chunks[-1]) > width: - self._handle_long_word(chunks, cur_line, cur_len, width) - cur_len = sum(map(len, cur_line)) - - # If the last chunk on this line is all whitespace, drop it. - if self.drop_whitespace and cur_line and cur_line[-1].strip() == '': - cur_len -= len(cur_line[-1]) - del cur_line[-1] - - if cur_line: - if (self.max_lines is None or - len(lines) + 1 < self.max_lines or - (not chunks or - self.drop_whitespace and - len(chunks) == 1 and - not chunks[0].strip()) and cur_len <= width): - # Convert current line back to a string and store it in - # list of all lines (return value). - lines.append(indent + ''.join(cur_line)) - else: - while cur_line: - if (cur_line[-1].strip() and - cur_len + len(self.placeholder) <= width): - cur_line.append(self.placeholder) - lines.append(indent + ''.join(cur_line)) - break - cur_len -= len(cur_line[-1]) - del cur_line[-1] - else: - if lines: - prev_line = lines[-1].rstrip() - if (len(prev_line) + len(self.placeholder) <= - self.width): - lines[-1] = prev_line + self.placeholder - break - lines.append(indent + self.placeholder.lstrip()) - break - - return lines - - def _split_chunks(self, text): - text = self._munge_whitespace(text) - return self._split(text) - - # -- Public interface ---------------------------------------------- - - def wrap(self, text): - """wrap(text : string) -> [string] - - Reformat the single paragraph in 'text' so it fits in lines of - no more than 'self.width' columns, and return a list of wrapped - lines. Tabs in 'text' are expanded with string.expandtabs(), - and all other whitespace characters (including newline) are - converted to space. - """ - chunks = self._split_chunks(text) - if self.fix_sentence_endings: - self._fix_sentence_endings(chunks) - return self._wrap_chunks(chunks) - - def fill(self, text): - """fill(text : string) -> string - - Reformat the single paragraph in 'text' to fit in lines of no - more than 'self.width' columns, and return a new string - containing the entire wrapped paragraph. - """ - return "\n".join(self.wrap(text)) - - -# -- Convenience interface --------------------------------------------- - -def wrap(text, width=70, **kwargs): - """Wrap a single paragraph of text, returning a list of wrapped lines. - - Reformat the single paragraph in 'text' so it fits in lines of no - more than 'width' columns, and return a list of wrapped lines. By - default, tabs in 'text' are expanded with string.expandtabs(), and - all other whitespace characters (including newline) are converted to - space. See TextWrapper class for available keyword args to customize - wrapping behaviour. - """ - w = TextWrapper(width=width, **kwargs) - return w.wrap(text) - -def fill(text, width=70, **kwargs): - """Fill a single paragraph of text, returning a new string. - - Reformat the single paragraph in 'text' to fit in lines of no more - than 'width' columns, and return a new string containing the entire - wrapped paragraph. As with wrap(), tabs are expanded and other - whitespace characters converted to space. See TextWrapper class for - available keyword args to customize wrapping behaviour. - """ - w = TextWrapper(width=width, **kwargs) - return w.fill(text) - -def shorten(text, width, **kwargs): - """Collapse and truncate the given text to fit in the given width. - - The text first has its whitespace collapsed. If it then fits in - the *width*, it is returned as is. Otherwise, as many words - as possible are joined and then the placeholder is appended:: - - >>> textwrap.shorten("Hello world!", width=12) - 'Hello world!' - >>> textwrap.shorten("Hello world!", width=11) - 'Hello [...]' - """ - w = TextWrapper(width=width, max_lines=1, **kwargs) - return w.fill(' '.join(text.strip().split())) - - -# -- Loosely related functionality ------------------------------------- - -def dedent(text): - """Remove any common leading whitespace from every line in `text`. - - This can be used to make triple-quoted strings line up with the left - edge of the display, while still presenting them in the source code - in indented form. - - Note that tabs and spaces are both treated as whitespace, but they - are not equal: the lines " hello" and "\\thello" are - considered to have no common leading whitespace. - - Entirely blank lines are normalized to a newline character. - """ - try: - lines = text.split('\n') - except (AttributeError, TypeError): - msg = f'expected str object, not {type(text).__qualname__!r}' - raise TypeError(msg) from None - - # Get length of leading whitespace, inspired by ``os.path.commonprefix()``. - non_blank_lines = [l for l in lines if l and not l.isspace()] - l1 = min(non_blank_lines, default='') - l2 = max(non_blank_lines, default='') - margin = 0 - for margin, c in enumerate(l1): - if c != l2[margin] or c not in ' \t': - break - - return '\n'.join([l[margin:] if not l.isspace() else '' for l in lines]) - - -def indent(text, prefix, predicate=None): - """Adds 'prefix' to the beginning of selected lines in 'text'. - - If 'predicate' is provided, 'prefix' will only be added to the lines - where 'predicate(line)' is True. If 'predicate' is not provided, - it will default to adding 'prefix' to all non-empty lines that do not - consist solely of whitespace characters. - """ - prefixed_lines = [] - if predicate is None: - # str.splitlines(keepends=True) doesn't produce the empty string, - # so we need to use `str.isspace()` rather than a truth test. - # Inlining the predicate leads to a ~30% performance improvement. - for line in text.splitlines(True): - if not line.isspace(): - prefixed_lines.append(prefix) - prefixed_lines.append(line) - else: - for line in text.splitlines(True): - if predicate(line): - prefixed_lines.append(prefix) - prefixed_lines.append(line) - return ''.join(prefixed_lines) - - -if __name__ == "__main__": - #print dedent("\tfoo\n\tbar") - #print dedent(" \thello there\n \t how are you?") - print(dedent("Hello there.\n This is indented.")) diff --git a/Python314_4_x86_Template/Lib/this.py b/Python314_4_x86_Template/Lib/this.py deleted file mode 100644 index e68dd3ff3..000000000 --- a/Python314_4_x86_Template/Lib/this.py +++ /dev/null @@ -1,28 +0,0 @@ -s = """Gur Mra bs Clguba, ol Gvz Crgref - -Ornhgvshy vf orggre guna htyl. -Rkcyvpvg vf orggre guna vzcyvpvg. -Fvzcyr vf orggre guna pbzcyrk. -Pbzcyrk vf orggre guna pbzcyvpngrq. -Syng vf orggre guna arfgrq. -Fcnefr vf orggre guna qrafr. -Ernqnovyvgl pbhagf. -Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. -Nygubhtu cenpgvpnyvgl orngf chevgl. -Reebef fubhyq arire cnff fvyragyl. -Hayrff rkcyvpvgyl fvyraprq. -Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. -Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. -Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu. -Abj vf orggre guna arire. -Nygubhtu arire vf bsgra orggre guna *evtug* abj. -Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn. -Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. -Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""" - -d = {} -for c in (65, 97): - for i in range(26): - d[chr(i+c)] = chr((i+13) % 26 + c) - -print("".join([d.get(c, c) for c in s])) diff --git a/Python314_4_x86_Template/Lib/threading.py b/Python314_4_x86_Template/Lib/threading.py deleted file mode 100644 index c03b0b537..000000000 --- a/Python314_4_x86_Template/Lib/threading.py +++ /dev/null @@ -1,1642 +0,0 @@ -"""Thread module emulating a subset of Java's threading model.""" - -import os as _os -import sys as _sys -import _thread -import _contextvars - -from time import monotonic as _time -from _weakrefset import WeakSet -from itertools import count as _count -try: - from _collections import deque as _deque -except ImportError: - from collections import deque as _deque - -# Note regarding PEP 8 compliant names -# This threading model was originally inspired by Java, and inherited -# the convention of camelCase function and method names from that -# language. Those original names are not in any imminent danger of -# being deprecated (even for Py3k),so this module provides them as an -# alias for the PEP 8 compliant names -# Note that using the new PEP 8 compliant names facilitates substitution -# with the multiprocessing module, which doesn't provide the old -# Java inspired names. - -__all__ = ['get_ident', 'active_count', 'Condition', 'current_thread', - 'enumerate', 'main_thread', 'TIMEOUT_MAX', - 'Event', 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Thread', - 'Barrier', 'BrokenBarrierError', 'Timer', 'ThreadError', - 'setprofile', 'settrace', 'local', 'stack_size', - 'excepthook', 'ExceptHookArgs', 'gettrace', 'getprofile', - 'setprofile_all_threads','settrace_all_threads'] - -# Rename some stuff so "from threading import *" is safe -_start_joinable_thread = _thread.start_joinable_thread -_daemon_threads_allowed = _thread.daemon_threads_allowed -_allocate_lock = _thread.allocate_lock -_LockType = _thread.LockType -_thread_shutdown = _thread._shutdown -_make_thread_handle = _thread._make_thread_handle -_ThreadHandle = _thread._ThreadHandle -get_ident = _thread.get_ident -_get_main_thread_ident = _thread._get_main_thread_ident -_is_main_interpreter = _thread._is_main_interpreter -try: - get_native_id = _thread.get_native_id - _HAVE_THREAD_NATIVE_ID = True - __all__.append('get_native_id') -except AttributeError: - _HAVE_THREAD_NATIVE_ID = False -try: - _set_name = _thread.set_name -except AttributeError: - _set_name = None -ThreadError = _thread.error -try: - _CRLock = _thread.RLock -except AttributeError: - _CRLock = None -TIMEOUT_MAX = _thread.TIMEOUT_MAX -del _thread - -# get thread-local implementation, either from the thread -# module, or from the python fallback - -try: - from _thread import _local as local -except ImportError: - from _threading_local import local - -# Support for profile and trace hooks - -_profile_hook = None -_trace_hook = None - -def setprofile(func): - """Set a profile function for all threads started from the threading module. - - The func will be passed to sys.setprofile() for each thread, before its - run() method is called. - """ - global _profile_hook - _profile_hook = func - -def setprofile_all_threads(func): - """Set a profile function for all threads started from the threading module - and all Python threads that are currently executing. - - The func will be passed to sys.setprofile() for each thread, before its - run() method is called. - """ - setprofile(func) - _sys._setprofileallthreads(func) - -def getprofile(): - """Get the profiler function as set by threading.setprofile().""" - return _profile_hook - -def settrace(func): - """Set a trace function for all threads started from the threading module. - - The func will be passed to sys.settrace() for each thread, before its run() - method is called. - """ - global _trace_hook - _trace_hook = func - -def settrace_all_threads(func): - """Set a trace function for all threads started from the threading module - and all Python threads that are currently executing. - - The func will be passed to sys.settrace() for each thread, before its run() - method is called. - """ - settrace(func) - _sys._settraceallthreads(func) - -def gettrace(): - """Get the trace function as set by threading.settrace().""" - return _trace_hook - -# Synchronization classes - -Lock = _LockType - -def RLock(*args, **kwargs): - """Factory function that returns a new reentrant lock. - - A reentrant lock must be released by the thread that acquired it. Once a - thread has acquired a reentrant lock, the same thread may acquire it again - without blocking; the thread must release it once for each time it has - acquired it. - - """ - if args or kwargs: - import warnings - warnings.warn( - 'Passing arguments to RLock is deprecated and will be removed in 3.15', - DeprecationWarning, - stacklevel=2, - ) - if _CRLock is None: - return _PyRLock(*args, **kwargs) - return _CRLock(*args, **kwargs) - -class _RLock: - """This class implements reentrant lock objects. - - A reentrant lock must be released by the thread that acquired it. Once a - thread has acquired a reentrant lock, the same thread may acquire it - again without blocking; the thread must release it once for each time it - has acquired it. - - """ - - def __init__(self): - self._block = _allocate_lock() - self._owner = None - self._count = 0 - - def __repr__(self): - owner = self._owner - try: - owner = _active[owner].name - except KeyError: - pass - return "<%s %s.%s object owner=%r count=%d at %s>" % ( - "locked" if self.locked() else "unlocked", - self.__class__.__module__, - self.__class__.__qualname__, - owner, - self._count, - hex(id(self)) - ) - - def _at_fork_reinit(self): - self._block._at_fork_reinit() - self._owner = None - self._count = 0 - - def acquire(self, blocking=True, timeout=-1): - """Acquire a lock, blocking or non-blocking. - - When invoked without arguments: if this thread already owns the lock, - increment the recursion level by one, and return immediately. Otherwise, - if another thread owns the lock, block until the lock is unlocked. Once - the lock is unlocked (not owned by any thread), then grab ownership, set - the recursion level to one, and return. If more than one thread is - blocked waiting until the lock is unlocked, only one at a time will be - able to grab ownership of the lock. There is no return value in this - case. - - When invoked with the blocking argument set to true, do the same thing - as when called without arguments, and return true. - - When invoked with the blocking argument set to false, do not block. If a - call without an argument would block, return false immediately; - otherwise, do the same thing as when called without arguments, and - return true. - - When invoked with the floating-point timeout argument set to a positive - value, block for at most the number of seconds specified by timeout - and as long as the lock cannot be acquired. Return true if the lock has - been acquired, false if the timeout has elapsed. - - """ - me = get_ident() - if self._owner == me: - self._count += 1 - return 1 - rc = self._block.acquire(blocking, timeout) - if rc: - self._owner = me - self._count = 1 - return rc - - __enter__ = acquire - - def release(self): - """Release a lock, decrementing the recursion level. - - If after the decrement it is zero, reset the lock to unlocked (not owned - by any thread), and if any other threads are blocked waiting for the - lock to become unlocked, allow exactly one of them to proceed. If after - the decrement the recursion level is still nonzero, the lock remains - locked and owned by the calling thread. - - Only call this method when the calling thread owns the lock. A - RuntimeError is raised if this method is called when the lock is - unlocked. - - There is no return value. - - """ - if self._owner != get_ident(): - raise RuntimeError("cannot release un-acquired lock") - self._count = count = self._count - 1 - if not count: - self._owner = None - self._block.release() - - def __exit__(self, t, v, tb): - self.release() - - def locked(self): - """Return whether this object is locked.""" - return self._block.locked() - - # Internal methods used by condition variables - - def _acquire_restore(self, state): - self._block.acquire() - self._count, self._owner = state - - def _release_save(self): - if self._count == 0: - raise RuntimeError("cannot release un-acquired lock") - count = self._count - self._count = 0 - owner = self._owner - self._owner = None - self._block.release() - return (count, owner) - - def _is_owned(self): - return self._owner == get_ident() - - # Internal method used for reentrancy checks - - def _recursion_count(self): - if self._owner != get_ident(): - return 0 - return self._count - -_PyRLock = _RLock - - -class Condition: - """Class that implements a condition variable. - - A condition variable allows one or more threads to wait until they are - notified by another thread. - - If the lock argument is given and not None, it must be a Lock or RLock - object, and it is used as the underlying lock. Otherwise, a new RLock object - is created and used as the underlying lock. - - """ - - def __init__(self, lock=None): - if lock is None: - lock = RLock() - self._lock = lock - # Export the lock's acquire(), release(), and locked() methods - self.acquire = lock.acquire - self.release = lock.release - self.locked = lock.locked - # If the lock defines _release_save() and/or _acquire_restore(), - # these override the default implementations (which just call - # release() and acquire() on the lock). Ditto for _is_owned(). - if hasattr(lock, '_release_save'): - self._release_save = lock._release_save - if hasattr(lock, '_acquire_restore'): - self._acquire_restore = lock._acquire_restore - if hasattr(lock, '_is_owned'): - self._is_owned = lock._is_owned - self._waiters = _deque() - - def _at_fork_reinit(self): - self._lock._at_fork_reinit() - self._waiters.clear() - - def __enter__(self): - return self._lock.__enter__() - - def __exit__(self, *args): - return self._lock.__exit__(*args) - - def __repr__(self): - return "<Condition(%s, %d)>" % (self._lock, len(self._waiters)) - - def _release_save(self): - self._lock.release() # No state to save - - def _acquire_restore(self, x): - self._lock.acquire() # Ignore saved state - - def _is_owned(self): - # Return True if lock is owned by current_thread. - # This method is called only if _lock doesn't have _is_owned(). - if self._lock.acquire(False): - self._lock.release() - return False - else: - return True - - def wait(self, timeout=None): - """Wait until notified or until a timeout occurs. - - If the calling thread has not acquired the lock when this method is - called, a RuntimeError is raised. - - This method releases the underlying lock, and then blocks until it is - awakened by a notify() or notify_all() call for the same condition - variable in another thread, or until the optional timeout occurs. Once - awakened or timed out, it re-acquires the lock and returns. - - When the timeout argument is present and not None, it should be a - floating-point number specifying a timeout for the operation in seconds - (or fractions thereof). - - When the underlying lock is an RLock, it is not released using its - release() method, since this may not actually unlock the lock when it - was acquired multiple times recursively. Instead, an internal interface - of the RLock class is used, which really unlocks it even when it has - been recursively acquired several times. Another internal interface is - then used to restore the recursion level when the lock is reacquired. - - """ - if not self._is_owned(): - raise RuntimeError("cannot wait on un-acquired lock") - waiter = _allocate_lock() - waiter.acquire() - self._waiters.append(waiter) - saved_state = self._release_save() - gotit = False - try: # restore state no matter what (e.g., KeyboardInterrupt) - if timeout is None: - waiter.acquire() - gotit = True - else: - if timeout > 0: - gotit = waiter.acquire(True, timeout) - else: - gotit = waiter.acquire(False) - return gotit - finally: - self._acquire_restore(saved_state) - if not gotit: - try: - self._waiters.remove(waiter) - except ValueError: - pass - - def wait_for(self, predicate, timeout=None): - """Wait until a condition evaluates to True. - - predicate should be a callable which result will be interpreted as a - boolean value. A timeout may be provided giving the maximum time to - wait. - - """ - endtime = None - waittime = timeout - result = predicate() - while not result: - if waittime is not None: - if endtime is None: - endtime = _time() + waittime - else: - waittime = endtime - _time() - if waittime <= 0: - break - self.wait(waittime) - result = predicate() - return result - - def notify(self, n=1): - """Wake up one or more threads waiting on this condition, if any. - - If the calling thread has not acquired the lock when this method is - called, a RuntimeError is raised. - - This method wakes up at most n of the threads waiting for the condition - variable; it is a no-op if no threads are waiting. - - """ - if not self._is_owned(): - raise RuntimeError("cannot notify on un-acquired lock") - waiters = self._waiters - while waiters and n > 0: - waiter = waiters[0] - try: - waiter.release() - except RuntimeError: - # gh-92530: The previous call of notify() released the lock, - # but was interrupted before removing it from the queue. - # It can happen if a signal handler raises an exception, - # like CTRL+C which raises KeyboardInterrupt. - pass - else: - n -= 1 - try: - waiters.remove(waiter) - except ValueError: - pass - - def notify_all(self): - """Wake up all threads waiting on this condition. - - If the calling thread has not acquired the lock when this method - is called, a RuntimeError is raised. - - """ - self.notify(len(self._waiters)) - - def notifyAll(self): - """Wake up all threads waiting on this condition. - - This method is deprecated, use notify_all() instead. - - """ - import warnings - warnings.warn('notifyAll() is deprecated, use notify_all() instead', - DeprecationWarning, stacklevel=2) - self.notify_all() - - -class Semaphore: - """This class implements semaphore objects. - - Semaphores manage a counter representing the number of release() calls minus - the number of acquire() calls, plus an initial value. The acquire() method - blocks if necessary until it can return without making the counter - negative. If not given, value defaults to 1. - - """ - - # After Tim Peters' semaphore class, but not quite the same (no maximum) - - def __init__(self, value=1): - if value < 0: - raise ValueError("semaphore initial value must be >= 0") - self._cond = Condition(Lock()) - self._value = value - - def __repr__(self): - cls = self.__class__ - return (f"<{cls.__module__}.{cls.__qualname__} at {id(self):#x}:" - f" value={self._value}>") - - def acquire(self, blocking=True, timeout=None): - """Acquire a semaphore, decrementing the internal counter by one. - - When invoked without arguments: if the internal counter is larger than - zero on entry, decrement it by one and return immediately. If it is zero - on entry, block, waiting until some other thread has called release() to - make it larger than zero. This is done with proper interlocking so that - if multiple acquire() calls are blocked, release() will wake exactly one - of them up. The implementation may pick one at random, so the order in - which blocked threads are awakened should not be relied on. There is no - return value in this case. - - When invoked with blocking set to true, do the same thing as when called - without arguments, and return true. - - When invoked with blocking set to false, do not block. If a call without - an argument would block, return false immediately; otherwise, do the - same thing as when called without arguments, and return true. - - When invoked with a timeout other than None, it will block for at - most timeout seconds. If acquire does not complete successfully in - that interval, return false. Return true otherwise. - - """ - if not blocking and timeout is not None: - raise ValueError("can't specify timeout for non-blocking acquire") - rc = False - endtime = None - with self._cond: - while self._value == 0: - if not blocking: - break - if timeout is not None: - if endtime is None: - endtime = _time() + timeout - else: - timeout = endtime - _time() - if timeout <= 0: - break - self._cond.wait(timeout) - else: - self._value -= 1 - rc = True - return rc - - __enter__ = acquire - - def release(self, n=1): - """Release a semaphore, incrementing the internal counter by one or more. - - When the counter is zero on entry and another thread is waiting for it - to become larger than zero again, wake up that thread. - - """ - if n < 1: - raise ValueError('n must be one or more') - with self._cond: - self._value += n - self._cond.notify(n) - - def __exit__(self, t, v, tb): - self.release() - - -class BoundedSemaphore(Semaphore): - """Implements a bounded semaphore. - - A bounded semaphore checks to make sure its current value doesn't exceed its - initial value. If it does, ValueError is raised. In most situations - semaphores are used to guard resources with limited capacity. - - If the semaphore is released too many times it's a sign of a bug. If not - given, value defaults to 1. - - Like regular semaphores, bounded semaphores manage a counter representing - the number of release() calls minus the number of acquire() calls, plus an - initial value. The acquire() method blocks if necessary until it can return - without making the counter negative. If not given, value defaults to 1. - - """ - - def __init__(self, value=1): - super().__init__(value) - self._initial_value = value - - def __repr__(self): - cls = self.__class__ - return (f"<{cls.__module__}.{cls.__qualname__} at {id(self):#x}:" - f" value={self._value}/{self._initial_value}>") - - def release(self, n=1): - """Release a semaphore, incrementing the internal counter by one or more. - - When the counter is zero on entry and another thread is waiting for it - to become larger than zero again, wake up that thread. - - If the number of releases exceeds the number of acquires, - raise a ValueError. - - """ - if n < 1: - raise ValueError('n must be one or more') - with self._cond: - if self._value + n > self._initial_value: - raise ValueError("Semaphore released too many times") - self._value += n - self._cond.notify(n) - - -class Event: - """Class implementing event objects. - - Events manage a flag that can be set to true with the set() method and reset - to false with the clear() method. The wait() method blocks until the flag is - true. The flag is initially false. - - """ - - # After Tim Peters' event class (without is_posted()) - - def __init__(self): - self._cond = Condition(Lock()) - self._flag = False - - def __repr__(self): - cls = self.__class__ - status = 'set' if self._flag else 'unset' - return f"<{cls.__module__}.{cls.__qualname__} at {id(self):#x}: {status}>" - - def _at_fork_reinit(self): - # Private method called by Thread._after_fork() - self._cond._at_fork_reinit() - - def is_set(self): - """Return true if and only if the internal flag is true.""" - return self._flag - - def isSet(self): - """Return true if and only if the internal flag is true. - - This method is deprecated, use is_set() instead. - - """ - import warnings - warnings.warn('isSet() is deprecated, use is_set() instead', - DeprecationWarning, stacklevel=2) - return self.is_set() - - def set(self): - """Set the internal flag to true. - - All threads waiting for it to become true are awakened. Threads - that call wait() once the flag is true will not block at all. - - """ - with self._cond: - self._flag = True - self._cond.notify_all() - - def clear(self): - """Reset the internal flag to false. - - Subsequently, threads calling wait() will block until set() is called to - set the internal flag to true again. - - """ - with self._cond: - self._flag = False - - def wait(self, timeout=None): - """Block until the internal flag is true. - - If the internal flag is true on entry, return immediately. Otherwise, - block until another thread calls set() to set the flag to true, or until - the optional timeout occurs. - - When the timeout argument is present and not None, it should be a - floating-point number specifying a timeout for the operation in seconds - (or fractions thereof). - - This method returns the internal flag on exit, so it will always return - ``True`` except if a timeout is given and the operation times out, when - it will return ``False``. - - """ - with self._cond: - signaled = self._flag - if not signaled: - signaled = self._cond.wait(timeout) - return signaled - - -# A barrier class. Inspired in part by the pthread_barrier_* api and -# the CyclicBarrier class from Java. See -# http://sourceware.org/pthreads-win32/manual/pthread_barrier_init.html and -# http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ -# CyclicBarrier.html -# for information. -# We maintain two main states, 'filling' and 'draining' enabling the barrier -# to be cyclic. Threads are not allowed into it until it has fully drained -# since the previous cycle. In addition, a 'resetting' state exists which is -# similar to 'draining' except that threads leave with a BrokenBarrierError, -# and a 'broken' state in which all threads get the exception. -class Barrier: - """Implements a Barrier. - - Useful for synchronizing a fixed number of threads at known synchronization - points. Threads block on 'wait()' and are simultaneously awoken once they - have all made that call. - - """ - - def __init__(self, parties, action=None, timeout=None): - """Create a barrier, initialised to 'parties' threads. - - 'action' is a callable which, when supplied, will be called by one of - the threads after they have all entered the barrier and just prior to - releasing them all. If a 'timeout' is provided, it is used as the - default for all subsequent 'wait()' calls. - - """ - if parties < 1: - raise ValueError("parties must be >= 1") - self._cond = Condition(Lock()) - self._action = action - self._timeout = timeout - self._parties = parties - self._state = 0 # 0 filling, 1 draining, -1 resetting, -2 broken - self._count = 0 - - def __repr__(self): - cls = self.__class__ - if self.broken: - return f"<{cls.__module__}.{cls.__qualname__} at {id(self):#x}: broken>" - return (f"<{cls.__module__}.{cls.__qualname__} at {id(self):#x}:" - f" waiters={self.n_waiting}/{self.parties}>") - - def wait(self, timeout=None): - """Wait for the barrier. - - When the specified number of threads have started waiting, they are all - simultaneously awoken. If an 'action' was provided for the barrier, one - of the threads will have executed that callback prior to returning. - Returns an individual index number from 0 to 'parties-1'. - - """ - if timeout is None: - timeout = self._timeout - with self._cond: - self._enter() # Block while the barrier drains. - index = self._count - self._count += 1 - try: - if index + 1 == self._parties: - # We release the barrier - self._release() - else: - # We wait until someone releases us - self._wait(timeout) - return index - finally: - self._count -= 1 - # Wake up any threads waiting for barrier to drain. - self._exit() - - # Block until the barrier is ready for us, or raise an exception - # if it is broken. - def _enter(self): - while self._state in (-1, 1): - # It is draining or resetting, wait until done - self._cond.wait() - #see if the barrier is in a broken state - if self._state < 0: - raise BrokenBarrierError - assert self._state == 0 - - # Optionally run the 'action' and release the threads waiting - # in the barrier. - def _release(self): - try: - if self._action: - self._action() - # enter draining state - self._state = 1 - self._cond.notify_all() - except: - #an exception during the _action handler. Break and reraise - self._break() - raise - - # Wait in the barrier until we are released. Raise an exception - # if the barrier is reset or broken. - def _wait(self, timeout): - if not self._cond.wait_for(lambda : self._state != 0, timeout): - #timed out. Break the barrier - self._break() - raise BrokenBarrierError - if self._state < 0: - raise BrokenBarrierError - assert self._state == 1 - - # If we are the last thread to exit the barrier, signal any threads - # waiting for the barrier to drain. - def _exit(self): - if self._count == 0: - if self._state in (-1, 1): - #resetting or draining - self._state = 0 - self._cond.notify_all() - - def reset(self): - """Reset the barrier to the initial state. - - Any threads currently waiting will get the BrokenBarrier exception - raised. - - """ - with self._cond: - if self._count > 0: - if self._state == 0: - #reset the barrier, waking up threads - self._state = -1 - elif self._state == -2: - #was broken, set it to reset state - #which clears when the last thread exits - self._state = -1 - else: - self._state = 0 - self._cond.notify_all() - - def abort(self): - """Place the barrier into a 'broken' state. - - Useful in case of error. Any currently waiting threads and threads - attempting to 'wait()' will have BrokenBarrierError raised. - - """ - with self._cond: - self._break() - - def _break(self): - # An internal error was detected. The barrier is set to - # a broken state all parties awakened. - self._state = -2 - self._cond.notify_all() - - @property - def parties(self): - """Return the number of threads required to trip the barrier.""" - return self._parties - - @property - def n_waiting(self): - """Return the number of threads currently waiting at the barrier.""" - # We don't need synchronization here since this is an ephemeral result - # anyway. It returns the correct value in the steady state. - if self._state == 0: - return self._count - return 0 - - @property - def broken(self): - """Return True if the barrier is in a broken state.""" - return self._state == -2 - -# exception raised by the Barrier class -class BrokenBarrierError(RuntimeError): - pass - - -# Helper to generate new thread names -_counter = _count(1).__next__ -def _newname(name_template): - return name_template % _counter() - -# Active thread administration. -# -# bpo-44422: Use a reentrant lock to allow reentrant calls to functions like -# threading.enumerate(). -_active_limbo_lock = RLock() -_active = {} # maps thread id to Thread object -_limbo = {} -_dangling = WeakSet() - - -# Main class for threads - -class Thread: - """A class that represents a thread of control. - - This class can be safely subclassed in a limited fashion. There are two ways - to specify the activity: by passing a callable object to the constructor, or - by overriding the run() method in a subclass. - - """ - - _initialized = False - - def __init__(self, group=None, target=None, name=None, - args=(), kwargs=None, *, daemon=None, context=None): - """This constructor should always be called with keyword arguments. Arguments are: - - *group* should be None; reserved for future extension when a ThreadGroup - class is implemented. - - *target* is the callable object to be invoked by the run() - method. Defaults to None, meaning nothing is called. - - *name* is the thread name. By default, a unique name is constructed of - the form "Thread-N" where N is a small decimal number. - - *args* is a list or tuple of arguments for the target invocation. Defaults to (). - - *kwargs* is a dictionary of keyword arguments for the target - invocation. Defaults to {}. - - *context* is the contextvars.Context value to use for the thread. - The default value is None, which means to check - sys.flags.thread_inherit_context. If that flag is true, use a copy - of the context of the caller. If false, use an empty context. To - explicitly start with an empty context, pass a new instance of - contextvars.Context(). To explicitly start with a copy of the current - context, pass the value from contextvars.copy_context(). - - If a subclass overrides the constructor, it must make sure to invoke - the base class constructor (Thread.__init__()) before doing anything - else to the thread. - - """ - assert group is None, "group argument must be None for now" - if kwargs is None: - kwargs = {} - if name: - name = str(name) - else: - name = _newname("Thread-%d") - if target is not None: - try: - target_name = target.__name__ - name += f" ({target_name})" - except AttributeError: - pass - - self._target = target - self._name = name - self._args = args - self._kwargs = kwargs - if daemon is not None: - if daemon and not _daemon_threads_allowed(): - raise RuntimeError('daemon threads are disabled in this (sub)interpreter') - self._daemonic = daemon - else: - self._daemonic = current_thread().daemon - self._context = context - self._ident = None - if _HAVE_THREAD_NATIVE_ID: - self._native_id = None - self._os_thread_handle = _ThreadHandle() - self._started = Event() - self._initialized = True - # Copy of sys.stderr used by self._invoke_excepthook() - self._stderr = _sys.stderr - self._invoke_excepthook = _make_invoke_excepthook() - # For debugging and _after_fork() - _dangling.add(self) - - def _after_fork(self, new_ident=None): - # Private! Called by threading._after_fork(). - self._started._at_fork_reinit() - if new_ident is not None: - # This thread is alive. - self._ident = new_ident - assert self._os_thread_handle.ident == new_ident - if _HAVE_THREAD_NATIVE_ID: - self._set_native_id() - else: - # Otherwise, the thread is dead, Jim. _PyThread_AfterFork() - # already marked our handle done. - pass - - def __repr__(self): - assert self._initialized, "Thread.__init__() was not called" - status = "initial" - if self._started.is_set(): - status = "started" - if self._os_thread_handle.is_done(): - status = "stopped" - if self._daemonic: - status += " daemon" - if self._ident is not None: - status += " %s" % self._ident - return "<%s(%s, %s)>" % (self.__class__.__name__, self._name, status) - - def start(self): - """Start the thread's activity. - - It must be called at most once per thread object. It arranges for the - object's run() method to be invoked in a separate thread of control. - - This method will raise a RuntimeError if called more than once on the - same thread object. - - """ - if not self._initialized: - raise RuntimeError("thread.__init__() not called") - - if self._started.is_set(): - raise RuntimeError("threads can only be started once") - - with _active_limbo_lock: - _limbo[self] = self - - if self._context is None: - # No context provided - if _sys.flags.thread_inherit_context: - # start with a copy of the context of the caller - self._context = _contextvars.copy_context() - else: - # start with an empty context - self._context = _contextvars.Context() - - try: - # Start joinable thread - _start_joinable_thread(self._bootstrap, handle=self._os_thread_handle, - daemon=self.daemon) - except Exception: - with _active_limbo_lock: - del _limbo[self] - raise - self._started.wait() # Will set ident and native_id - - def run(self): - """Method representing the thread's activity. - - You may override this method in a subclass. The standard run() method - invokes the callable object passed to the object's constructor as the - target argument, if any, with sequential and keyword arguments taken - from the args and kwargs arguments, respectively. - - """ - try: - if self._target is not None: - self._target(*self._args, **self._kwargs) - finally: - # Avoid a refcycle if the thread is running a function with - # an argument that has a member that points to the thread. - del self._target, self._args, self._kwargs - - def _bootstrap(self): - # Wrapper around the real bootstrap code that ignores - # exceptions during interpreter cleanup. Those typically - # happen when a daemon thread wakes up at an unfortunate - # moment, finds the world around it destroyed, and raises some - # random exception *** while trying to report the exception in - # _bootstrap_inner() below ***. Those random exceptions - # don't help anybody, and they confuse users, so we suppress - # them. We suppress them only when it appears that the world - # indeed has already been destroyed, so that exceptions in - # _bootstrap_inner() during normal business hours are properly - # reported. Also, we only suppress them for daemonic threads; - # if a non-daemonic encounters this, something else is wrong. - try: - self._bootstrap_inner() - except: - if self._daemonic and _sys is None: - return - raise - - def _set_ident(self): - self._ident = get_ident() - - if _HAVE_THREAD_NATIVE_ID: - def _set_native_id(self): - self._native_id = get_native_id() - - def _set_os_name(self): - if _set_name is None or not self._name: - return - try: - _set_name(self._name) - except OSError: - pass - - def _bootstrap_inner(self): - try: - self._set_ident() - if _HAVE_THREAD_NATIVE_ID: - self._set_native_id() - self._set_os_name() - self._started.set() - with _active_limbo_lock: - _active[self._ident] = self - del _limbo[self] - - if _trace_hook: - _sys.settrace(_trace_hook) - if _profile_hook: - _sys.setprofile(_profile_hook) - - try: - self._context.run(self.run) - except: - self._invoke_excepthook(self) - finally: - self._delete() - - def _delete(self): - "Remove current thread from the dict of currently running threads." - with _active_limbo_lock: - del _active[get_ident()] - # There must not be any python code between the previous line - # and after the lock is released. Otherwise a tracing function - # could try to acquire the lock again in the same thread, (in - # current_thread()), and would block. - - def join(self, timeout=None): - """Wait until the thread terminates. - - This blocks the calling thread until the thread whose join() method is - called terminates -- either normally or through an unhandled exception - or until the optional timeout occurs. - - When the timeout argument is present and not None, it should be a - floating-point number specifying a timeout for the operation in seconds - (or fractions thereof). As join() always returns None, you must call - is_alive() after join() to decide whether a timeout happened -- if the - thread is still alive, the join() call timed out. - - When the timeout argument is not present or None, the operation will - block until the thread terminates. - - A thread can be join()ed many times. - - join() raises a RuntimeError if an attempt is made to join the current - thread as that would cause a deadlock. It is also an error to join() a - thread before it has been started and attempts to do so raises the same - exception. - - """ - if not self._initialized: - raise RuntimeError("Thread.__init__() not called") - if not self._started.is_set(): - raise RuntimeError("cannot join thread before it is started") - if self is current_thread(): - raise RuntimeError("cannot join current thread") - - # the behavior of a negative timeout isn't documented, but - # historically .join(timeout=x) for x<0 has acted as if timeout=0 - if timeout is not None: - timeout = max(timeout, 0) - - self._os_thread_handle.join(timeout) - - @property - def name(self): - """A string used for identification purposes only. - - It has no semantics. Multiple threads may be given the same name. The - initial name is set by the constructor. - - """ - assert self._initialized, "Thread.__init__() not called" - return self._name - - @name.setter - def name(self, name): - assert self._initialized, "Thread.__init__() not called" - self._name = str(name) - if get_ident() == self._ident: - self._set_os_name() - - @property - def ident(self): - """Thread identifier of this thread or None if it has not been started. - - This is a nonzero integer. See the get_ident() function. Thread - identifiers may be recycled when a thread exits and another thread is - created. The identifier is available even after the thread has exited. - - """ - assert self._initialized, "Thread.__init__() not called" - return self._ident - - if _HAVE_THREAD_NATIVE_ID: - @property - def native_id(self): - """Native integral thread ID of this thread, or None if it has not been started. - - This is a non-negative integer. See the get_native_id() function. - This represents the Thread ID as reported by the kernel. - - """ - assert self._initialized, "Thread.__init__() not called" - return self._native_id - - def is_alive(self): - """Return whether the thread is alive. - - This method returns True just before the run() method starts until just - after the run() method terminates. See also the module function - enumerate(). - - """ - assert self._initialized, "Thread.__init__() not called" - return self._started.is_set() and not self._os_thread_handle.is_done() - - @property - def daemon(self): - """A boolean value indicating whether this thread is a daemon thread. - - This must be set before start() is called, otherwise RuntimeError is - raised. Its initial value is inherited from the creating thread; the - main thread is not a daemon thread and therefore all threads created in - the main thread default to daemon = False. - - The entire Python program exits when only daemon threads are left. - - """ - assert self._initialized, "Thread.__init__() not called" - return self._daemonic - - @daemon.setter - def daemon(self, daemonic): - if not self._initialized: - raise RuntimeError("Thread.__init__() not called") - if daemonic and not _daemon_threads_allowed(): - raise RuntimeError('daemon threads are disabled in this interpreter') - if self._started.is_set(): - raise RuntimeError("cannot set daemon status of active thread") - self._daemonic = daemonic - - def isDaemon(self): - """Return whether this thread is a daemon. - - This method is deprecated, use the daemon attribute instead. - - """ - import warnings - warnings.warn('isDaemon() is deprecated, get the daemon attribute instead', - DeprecationWarning, stacklevel=2) - return self.daemon - - def setDaemon(self, daemonic): - """Set whether this thread is a daemon. - - This method is deprecated, use the .daemon property instead. - - """ - import warnings - warnings.warn('setDaemon() is deprecated, set the daemon attribute instead', - DeprecationWarning, stacklevel=2) - self.daemon = daemonic - - def getName(self): - """Return a string used for identification purposes only. - - This method is deprecated, use the name attribute instead. - - """ - import warnings - warnings.warn('getName() is deprecated, get the name attribute instead', - DeprecationWarning, stacklevel=2) - return self.name - - def setName(self, name): - """Set the name string for this thread. - - This method is deprecated, use the name attribute instead. - - """ - import warnings - warnings.warn('setName() is deprecated, set the name attribute instead', - DeprecationWarning, stacklevel=2) - self.name = name - - -try: - from _thread import (_excepthook as excepthook, - _ExceptHookArgs as ExceptHookArgs) -except ImportError: - # Simple Python implementation if _thread._excepthook() is not available - from traceback import print_exception as _print_exception - from collections import namedtuple - - _ExceptHookArgs = namedtuple( - 'ExceptHookArgs', - 'exc_type exc_value exc_traceback thread') - - def ExceptHookArgs(args): - return _ExceptHookArgs(*args) - - def excepthook(args, /): - """ - Handle uncaught Thread.run() exception. - """ - if args.exc_type == SystemExit: - # silently ignore SystemExit - return - - if _sys is not None and _sys.stderr is not None: - stderr = _sys.stderr - elif args.thread is not None: - stderr = args.thread._stderr - if stderr is None: - # do nothing if sys.stderr is None and sys.stderr was None - # when the thread was created - return - else: - # do nothing if sys.stderr is None and args.thread is None - return - - if args.thread is not None: - name = args.thread.name - else: - name = get_ident() - print(f"Exception in thread {name}:", - file=stderr, flush=True) - _print_exception(args.exc_type, args.exc_value, args.exc_traceback, - file=stderr) - stderr.flush() - - -# Original value of threading.excepthook -__excepthook__ = excepthook - - -def _make_invoke_excepthook(): - # Create a local namespace to ensure that variables remain alive - # when _invoke_excepthook() is called, even if it is called late during - # Python shutdown. It is mostly needed for daemon threads. - - old_excepthook = excepthook - old_sys_excepthook = _sys.excepthook - if old_excepthook is None: - raise RuntimeError("threading.excepthook is None") - if old_sys_excepthook is None: - raise RuntimeError("sys.excepthook is None") - - sys_exc_info = _sys.exc_info - local_print = print - local_sys = _sys - - def invoke_excepthook(thread): - global excepthook - try: - hook = excepthook - if hook is None: - hook = old_excepthook - - args = ExceptHookArgs([*sys_exc_info(), thread]) - - hook(args) - except Exception as exc: - exc.__suppress_context__ = True - del exc - - if local_sys is not None and local_sys.stderr is not None: - stderr = local_sys.stderr - else: - stderr = thread._stderr - - local_print("Exception in threading.excepthook:", - file=stderr, flush=True) - - if local_sys is not None and local_sys.excepthook is not None: - sys_excepthook = local_sys.excepthook - else: - sys_excepthook = old_sys_excepthook - - sys_excepthook(*sys_exc_info()) - finally: - # Break reference cycle (exception stored in a variable) - args = None - - return invoke_excepthook - - -# The timer class was contributed by Itamar Shtull-Trauring - -class Timer(Thread): - """Call a function after a specified number of seconds: - - t = Timer(30.0, f, args=None, kwargs=None) - t.start() - t.cancel() # stop the timer's action if it's still waiting - - """ - - def __init__(self, interval, function, args=None, kwargs=None): - Thread.__init__(self) - self.interval = interval - self.function = function - self.args = args if args is not None else [] - self.kwargs = kwargs if kwargs is not None else {} - self.finished = Event() - - def cancel(self): - """Stop the timer if it hasn't finished yet.""" - self.finished.set() - - def run(self): - self.finished.wait(self.interval) - if not self.finished.is_set(): - self.function(*self.args, **self.kwargs) - self.finished.set() - - -# Special thread class to represent the main thread - -class _MainThread(Thread): - - def __init__(self): - Thread.__init__(self, name="MainThread", daemon=False) - self._started.set() - self._ident = _get_main_thread_ident() - self._os_thread_handle = _make_thread_handle(self._ident) - if _HAVE_THREAD_NATIVE_ID: - self._set_native_id() - with _active_limbo_lock: - _active[self._ident] = self - - -# Helper thread-local instance to detect when a _DummyThread -# is collected. Not a part of the public API. -_thread_local_info = local() - - -class _DeleteDummyThreadOnDel: - ''' - Helper class to remove a dummy thread from threading._active on __del__. - ''' - - def __init__(self, dummy_thread): - self._dummy_thread = dummy_thread - self._tident = dummy_thread.ident - # Put the thread on a thread local variable so that when - # the related thread finishes this instance is collected. - # - # Note: no other references to this instance may be created. - # If any client code creates a reference to this instance, - # the related _DummyThread will be kept forever! - _thread_local_info._track_dummy_thread_ref = self - - def __del__(self, _active_limbo_lock=_active_limbo_lock, _active=_active): - with _active_limbo_lock: - if _active.get(self._tident) is self._dummy_thread: - _active.pop(self._tident, None) - - -# Dummy thread class to represent threads not started here. -# These should be added to `_active` and removed automatically -# when they die, although they can't be waited for. -# Their purpose is to return *something* from current_thread(). -# They are marked as daemon threads so we won't wait for them -# when we exit (conform previous semantics). - -class _DummyThread(Thread): - - def __init__(self): - Thread.__init__(self, name=_newname("Dummy-%d"), - daemon=_daemon_threads_allowed()) - self._started.set() - self._set_ident() - self._os_thread_handle = _make_thread_handle(self._ident) - if _HAVE_THREAD_NATIVE_ID: - self._set_native_id() - with _active_limbo_lock: - _active[self._ident] = self - _DeleteDummyThreadOnDel(self) - - def is_alive(self): - if not self._os_thread_handle.is_done() and self._started.is_set(): - return True - raise RuntimeError("thread is not alive") - - def join(self, timeout=None): - raise RuntimeError("cannot join a dummy thread") - - def _after_fork(self, new_ident=None): - if new_ident is not None: - self.__class__ = _MainThread - self._name = 'MainThread' - self._daemonic = False - Thread._after_fork(self, new_ident=new_ident) - - -# Global API functions - -def current_thread(): - """Return the current Thread object, corresponding to the caller's thread of control. - - If the caller's thread of control was not created through the threading - module, a dummy thread object with limited functionality is returned. - - """ - try: - return _active[get_ident()] - except KeyError: - return _DummyThread() - -def currentThread(): - """Return the current Thread object, corresponding to the caller's thread of control. - - This function is deprecated, use current_thread() instead. - - """ - import warnings - warnings.warn('currentThread() is deprecated, use current_thread() instead', - DeprecationWarning, stacklevel=2) - return current_thread() - -def active_count(): - """Return the number of Thread objects currently alive. - - The returned count is equal to the length of the list returned by - enumerate(). - - """ - # NOTE: if the logic in here ever changes, update Modules/posixmodule.c - # warn_about_fork_with_threads() to match. - with _active_limbo_lock: - return len(_active) + len(_limbo) - -def activeCount(): - """Return the number of Thread objects currently alive. - - This function is deprecated, use active_count() instead. - - """ - import warnings - warnings.warn('activeCount() is deprecated, use active_count() instead', - DeprecationWarning, stacklevel=2) - return active_count() - -def _enumerate(): - # Same as enumerate(), but without the lock. Internal use only. - return list(_active.values()) + list(_limbo.values()) - -def enumerate(): - """Return a list of all Thread objects currently alive. - - The list includes daemonic threads, dummy thread objects created by - current_thread(), and the main thread. It excludes terminated threads and - threads that have not yet been started. - - """ - with _active_limbo_lock: - return list(_active.values()) + list(_limbo.values()) - - -_threading_atexits = [] -_SHUTTING_DOWN = False - -def _register_atexit(func, *arg, **kwargs): - """CPython internal: register *func* to be called before joining threads. - - The registered *func* is called with its arguments just before all - non-daemon threads are joined in `_shutdown()`. It provides a similar - purpose to `atexit.register()`, but its functions are called prior to - threading shutdown instead of interpreter shutdown. - - For similarity to atexit, the registered functions are called in reverse. - """ - if _SHUTTING_DOWN: - raise RuntimeError("can't register atexit after shutdown") - - _threading_atexits.append(lambda: func(*arg, **kwargs)) - - -from _thread import stack_size - -# Create the main thread object, -# and make it available for the interpreter -# (Py_Main) as threading._shutdown. - -_main_thread = _MainThread() - -def _shutdown(): - """ - Wait until the Python thread state of all non-daemon threads get deleted. - """ - # Obscure: other threads may be waiting to join _main_thread. That's - # dubious, but some code does it. We can't wait for it to be marked as done - # normally - that won't happen until the interpreter is nearly dead. So - # mark it done here. - if _main_thread._os_thread_handle.is_done() and _is_main_interpreter(): - # _shutdown() was already called - return - - global _SHUTTING_DOWN - _SHUTTING_DOWN = True - - # Call registered threading atexit functions before threads are joined. - # Order is reversed, similar to atexit. - for atexit_call in reversed(_threading_atexits): - atexit_call() - - if _is_main_interpreter(): - _main_thread._os_thread_handle._set_done() - - # Wait for all non-daemon threads to exit. - _thread_shutdown() - - -def main_thread(): - """Return the main thread object. - - In normal conditions, the main thread is the thread from which the - Python interpreter was started. - """ - # XXX Figure this out for subinterpreters. (See gh-75698.) - return _main_thread - - -def _after_fork(): - """ - Cleanup threading module state that should not exist after a fork. - """ - # Reset _active_limbo_lock, in case we forked while the lock was held - # by another (non-forked) thread. http://bugs.python.org/issue874900 - global _active_limbo_lock, _main_thread - _active_limbo_lock = RLock() - - # fork() only copied the current thread; clear references to others. - new_active = {} - - try: - current = _active[get_ident()] - except KeyError: - # fork() was called in a thread which was not spawned - # by threading.Thread. For example, a thread spawned - # by thread.start_new_thread(). - current = _MainThread() - - _main_thread = current - - with _active_limbo_lock: - # Dangling thread instances must still have their locks reset, - # because someone may join() them. - threads = set(_enumerate()) - threads.update(_dangling) - for thread in threads: - # Any lock/condition variable may be currently locked or in an - # invalid state, so we reinitialize them. - if thread is current: - # This is the one and only active thread. - ident = get_ident() - thread._after_fork(new_ident=ident) - new_active[ident] = thread - else: - # All the others are already stopped. - thread._after_fork() - - _limbo.clear() - _active.clear() - _active.update(new_active) - assert len(_active) == 1 - - -if hasattr(_os, "register_at_fork"): - _os.register_at_fork(after_in_child=_after_fork) diff --git a/Python314_4_x86_Template/Lib/timeit.py b/Python314_4_x86_Template/Lib/timeit.py deleted file mode 100644 index e767f0187..000000000 --- a/Python314_4_x86_Template/Lib/timeit.py +++ /dev/null @@ -1,378 +0,0 @@ -"""Tool for measuring execution time of small code snippets. - -This module avoids a number of common traps for measuring execution -times. See also Tim Peters' introduction to the Algorithms chapter in -the Python Cookbook, published by O'Reilly. - -Library usage: see the Timer class. - -Command line usage: - python timeit.py [-n N] [-r N] [-s S] [-p] [-h] [--] [statement] - -Options: - -n/--number N: how many times to execute 'statement' (default: see below) - -r/--repeat N: how many times to repeat the timer (default 5) - -s/--setup S: statement to be executed once initially (default 'pass'). - Execution time of this setup statement is NOT timed. - -p/--process: use time.process_time() (default is time.perf_counter()) - -v/--verbose: print raw timing results; repeat for more digits precision - -u/--unit: set the output time unit (nsec, usec, msec, or sec) - -h/--help: print this usage message and exit - --: separate options from statement, use when statement starts with - - statement: statement to be timed (default 'pass') - -A multi-line statement may be given by specifying each line as a -separate argument; indented lines are possible by enclosing an -argument in quotes and using leading spaces. Multiple -s options are -treated similarly. - -If -n is not given, a suitable number of loops is calculated by trying -increasing numbers from the sequence 1, 2, 5, 10, 20, 50, ... until the -total time is at least 0.2 seconds. - -Note: there is a certain baseline overhead associated with executing a -pass statement. It differs between versions. The code here doesn't try -to hide it, but you should be aware of it. The baseline overhead can be -measured by invoking the program without arguments. - -Classes: - - Timer - -Functions: - - timeit(string, string) -> float - repeat(string, string) -> list - default_timer() -> float -""" - -import gc -import itertools -import sys -import time - -__all__ = ["Timer", "timeit", "repeat", "default_timer"] - -dummy_src_name = "<timeit-src>" -default_number = 1000000 -default_repeat = 5 -default_timer = time.perf_counter - -_globals = globals - -# Don't change the indentation of the template; the reindent() calls -# in Timer.__init__() depend on setup being indented 4 spaces and stmt -# being indented 8 spaces. -template = """ -def inner(_it, _timer{init}): - {setup} - _t0 = _timer() - for _i in _it: - {stmt} - pass - _t1 = _timer() - return _t1 - _t0 -""" - - -def reindent(src, indent): - """Helper to reindent a multi-line statement.""" - return src.replace("\n", "\n" + " " * indent) - - -class Timer: - """Class for timing execution speed of small code snippets. - - The constructor takes a statement to be timed, an additional - statement used for setup, and a timer function. Both statements - default to 'pass'; the timer function is platform-dependent (see - module doc string). If 'globals' is specified, the code will be - executed within that namespace (as opposed to inside timeit's - namespace). - - To measure the execution time of the first statement, use the - timeit() method. The repeat() method is a convenience to call - timeit() multiple times and return a list of results. - - The statements may contain newlines, as long as they don't contain - multi-line string literals. - """ - - def __init__(self, stmt="pass", setup="pass", timer=default_timer, - globals=None): - """Constructor. See class doc string.""" - self.timer = timer - local_ns = {} - global_ns = _globals() if globals is None else globals - init = '' - if isinstance(setup, str): - # Check that the code can be compiled outside a function - compile(setup, dummy_src_name, "exec") - stmtprefix = setup + '\n' - setup = reindent(setup, 4) - elif callable(setup): - local_ns['_setup'] = setup - init += ', _setup=_setup' - stmtprefix = '' - setup = '_setup()' - else: - raise ValueError("setup is neither a string nor callable") - if isinstance(stmt, str): - # Check that the code can be compiled outside a function - compile(stmtprefix + stmt, dummy_src_name, "exec") - stmt = reindent(stmt, 8) - elif callable(stmt): - local_ns['_stmt'] = stmt - init += ', _stmt=_stmt' - stmt = '_stmt()' - else: - raise ValueError("stmt is neither a string nor callable") - src = template.format(stmt=stmt, setup=setup, init=init) - self.src = src # Save for traceback display - code = compile(src, dummy_src_name, "exec") - exec(code, global_ns, local_ns) - self.inner = local_ns["inner"] - - def print_exc(self, file=None): - """Helper to print a traceback from the timed code. - - Typical use: - - t = Timer(...) # outside the try/except - try: - t.timeit(...) # or t.repeat(...) - except: - t.print_exc() - - The advantage over the standard traceback is that source lines - in the compiled template will be displayed. - - The optional file argument directs where the traceback is - sent; it defaults to sys.stderr. - """ - import linecache, traceback - if self.src is not None: - linecache.cache[dummy_src_name] = (len(self.src), - None, - self.src.split("\n"), - dummy_src_name) - # else the source is already stored somewhere else - - traceback.print_exc(file=file) - - def timeit(self, number=default_number): - """Time 'number' executions of the main statement. - - To be precise, this executes the setup statement once, and - then returns the time it takes to execute the main statement - a number of times, as float seconds if using the default timer. The - argument is the number of times through the loop, defaulting - to one million. The main statement, the setup statement and - the timer function to be used are passed to the constructor. - """ - it = itertools.repeat(None, number) - gcold = gc.isenabled() - gc.disable() - try: - timing = self.inner(it, self.timer) - finally: - if gcold: - gc.enable() - return timing - - def repeat(self, repeat=default_repeat, number=default_number): - """Call timeit() a few times. - - This is a convenience function that calls the timeit() - repeatedly, returning a list of results. The first argument - specifies how many times to call timeit(), defaulting to 5; - the second argument specifies the timer argument, defaulting - to one million. - - Note: it's tempting to calculate mean and standard deviation - from the result vector and report these. However, this is not - very useful. In a typical case, the lowest value gives a - lower bound for how fast your machine can run the given code - snippet; higher values in the result vector are typically not - caused by variability in Python's speed, but by other - processes interfering with your timing accuracy. So the min() - of the result is probably the only number you should be - interested in. After that, you should look at the entire - vector and apply common sense rather than statistics. - """ - r = [] - for i in range(repeat): - t = self.timeit(number) - r.append(t) - return r - - def autorange(self, callback=None): - """Return the number of loops and time taken so that total time >= 0.2. - - Calls the timeit method with increasing numbers from the sequence - 1, 2, 5, 10, 20, 50, ... until the time taken is at least 0.2 - second. Returns (number, time_taken). - - If *callback* is given and is not None, it will be called after - each trial with two arguments: ``callback(number, time_taken)``. - """ - i = 1 - while True: - for j in 1, 2, 5: - number = i * j - time_taken = self.timeit(number) - if callback: - callback(number, time_taken) - if time_taken >= 0.2: - return (number, time_taken) - i *= 10 - - -def timeit(stmt="pass", setup="pass", timer=default_timer, - number=default_number, globals=None): - """Convenience function to create Timer object and call timeit method.""" - return Timer(stmt, setup, timer, globals).timeit(number) - - -def repeat(stmt="pass", setup="pass", timer=default_timer, - repeat=default_repeat, number=default_number, globals=None): - """Convenience function to create Timer object and call repeat method.""" - return Timer(stmt, setup, timer, globals).repeat(repeat, number) - - -def main(args=None, *, _wrap_timer=None): - """Main program, used when run as a script. - - The optional 'args' argument specifies the command line to be parsed, - defaulting to sys.argv[1:]. - - The return value is an exit code to be passed to sys.exit(); it - may be None to indicate success. - - When an exception happens during timing, a traceback is printed to - stderr and the return value is 1. Exceptions at other times - (including the template compilation) are not caught. - - '_wrap_timer' is an internal interface used for unit testing. If it - is not None, it must be a callable that accepts a timer function - and returns another timer function (used for unit testing). - """ - if args is None: - args = sys.argv[1:] - import getopt - try: - opts, args = getopt.getopt(args, "n:u:s:r:pvh", - ["number=", "setup=", "repeat=", - "process", "verbose", "unit=", "help"]) - except getopt.error as err: - print(err) - print("use -h/--help for command line help") - return 2 - - timer = default_timer - stmt = "\n".join(args) or "pass" - number = 0 # auto-determine - setup = [] - repeat = default_repeat - verbose = 0 - time_unit = None - units = {"nsec": 1e-9, "usec": 1e-6, "msec": 1e-3, "sec": 1.0} - precision = 3 - for o, a in opts: - if o in ("-n", "--number"): - number = int(a) - if o in ("-s", "--setup"): - setup.append(a) - if o in ("-u", "--unit"): - if a in units: - time_unit = a - else: - print("Unrecognized unit. Please select nsec, usec, msec, or sec.", - file=sys.stderr) - return 2 - if o in ("-r", "--repeat"): - repeat = int(a) - if repeat <= 0: - repeat = 1 - if o in ("-p", "--process"): - timer = time.process_time - if o in ("-v", "--verbose"): - if verbose: - precision += 1 - verbose += 1 - if o in ("-h", "--help"): - print(__doc__, end="") - return 0 - setup = "\n".join(setup) or "pass" - - # Include the current directory, so that local imports work (sys.path - # contains the directory of this script, rather than the current - # directory) - import os - sys.path.insert(0, os.curdir) - if _wrap_timer is not None: - timer = _wrap_timer(timer) - - t = Timer(stmt, setup, timer) - if number == 0: - # determine number so that 0.2 <= total time < 2.0 - callback = None - if verbose: - def callback(number, time_taken): - msg = "{num} loop{s} -> {secs:.{prec}g} secs" - plural = (number != 1) - print(msg.format(num=number, s='s' if plural else '', - secs=time_taken, prec=precision)) - try: - number, _ = t.autorange(callback) - except: - t.print_exc() - return 1 - - if verbose: - print() - - try: - raw_timings = t.repeat(repeat, number) - except: - t.print_exc() - return 1 - - def format_time(dt): - unit = time_unit - - if unit is not None: - scale = units[unit] - else: - scales = [(scale, unit) for unit, scale in units.items()] - scales.sort(reverse=True) - for scale, unit in scales: - if dt >= scale: - break - - return "%.*g %s" % (precision, dt / scale, unit) - - if verbose: - print("raw times: %s" % ", ".join(map(format_time, raw_timings))) - print() - timings = [dt / number for dt in raw_timings] - - best = min(timings) - print("%d loop%s, best of %d: %s per loop" - % (number, 's' if number != 1 else '', - repeat, format_time(best))) - - best = min(timings) - worst = max(timings) - if worst >= best * 4: - import warnings - warnings.warn_explicit("The test results are likely unreliable. " - "The worst time (%s) was more than four times " - "slower than the best time (%s)." - % (format_time(worst), format_time(best)), - UserWarning, '', 0) - return None - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/Python314_4_x86_Template/Lib/token.py b/Python314_4_x86_Template/Lib/token.py deleted file mode 100644 index f61723cc0..000000000 --- a/Python314_4_x86_Template/Lib/token.py +++ /dev/null @@ -1,144 +0,0 @@ -"""Token constants.""" -# Auto-generated by Tools/build/generate_token.py - -__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF', - 'EXACT_TOKEN_TYPES'] - -ENDMARKER = 0 -NAME = 1 -NUMBER = 2 -STRING = 3 -NEWLINE = 4 -INDENT = 5 -DEDENT = 6 -LPAR = 7 -RPAR = 8 -LSQB = 9 -RSQB = 10 -COLON = 11 -COMMA = 12 -SEMI = 13 -PLUS = 14 -MINUS = 15 -STAR = 16 -SLASH = 17 -VBAR = 18 -AMPER = 19 -LESS = 20 -GREATER = 21 -EQUAL = 22 -DOT = 23 -PERCENT = 24 -LBRACE = 25 -RBRACE = 26 -EQEQUAL = 27 -NOTEQUAL = 28 -LESSEQUAL = 29 -GREATEREQUAL = 30 -TILDE = 31 -CIRCUMFLEX = 32 -LEFTSHIFT = 33 -RIGHTSHIFT = 34 -DOUBLESTAR = 35 -PLUSEQUAL = 36 -MINEQUAL = 37 -STAREQUAL = 38 -SLASHEQUAL = 39 -PERCENTEQUAL = 40 -AMPEREQUAL = 41 -VBAREQUAL = 42 -CIRCUMFLEXEQUAL = 43 -LEFTSHIFTEQUAL = 44 -RIGHTSHIFTEQUAL = 45 -DOUBLESTAREQUAL = 46 -DOUBLESLASH = 47 -DOUBLESLASHEQUAL = 48 -AT = 49 -ATEQUAL = 50 -RARROW = 51 -ELLIPSIS = 52 -COLONEQUAL = 53 -EXCLAMATION = 54 -OP = 55 -TYPE_IGNORE = 56 -TYPE_COMMENT = 57 -SOFT_KEYWORD = 58 -FSTRING_START = 59 -FSTRING_MIDDLE = 60 -FSTRING_END = 61 -TSTRING_START = 62 -TSTRING_MIDDLE = 63 -TSTRING_END = 64 -COMMENT = 65 -NL = 66 -# These aren't used by the C tokenizer but are needed for tokenize.py -ERRORTOKEN = 67 -ENCODING = 68 -N_TOKENS = 69 -# Special definitions for cooperation with parser -NT_OFFSET = 256 - -tok_name = {value: name - for name, value in globals().items() - if isinstance(value, int) and not name.startswith('_')} -__all__.extend(tok_name.values()) - -EXACT_TOKEN_TYPES = { - '!': EXCLAMATION, - '!=': NOTEQUAL, - '%': PERCENT, - '%=': PERCENTEQUAL, - '&': AMPER, - '&=': AMPEREQUAL, - '(': LPAR, - ')': RPAR, - '*': STAR, - '**': DOUBLESTAR, - '**=': DOUBLESTAREQUAL, - '*=': STAREQUAL, - '+': PLUS, - '+=': PLUSEQUAL, - ',': COMMA, - '-': MINUS, - '-=': MINEQUAL, - '->': RARROW, - '.': DOT, - '...': ELLIPSIS, - '/': SLASH, - '//': DOUBLESLASH, - '//=': DOUBLESLASHEQUAL, - '/=': SLASHEQUAL, - ':': COLON, - ':=': COLONEQUAL, - ';': SEMI, - '<': LESS, - '<<': LEFTSHIFT, - '<<=': LEFTSHIFTEQUAL, - '<=': LESSEQUAL, - '=': EQUAL, - '==': EQEQUAL, - '>': GREATER, - '>=': GREATEREQUAL, - '>>': RIGHTSHIFT, - '>>=': RIGHTSHIFTEQUAL, - '@': AT, - '@=': ATEQUAL, - '[': LSQB, - ']': RSQB, - '^': CIRCUMFLEX, - '^=': CIRCUMFLEXEQUAL, - '{': LBRACE, - '|': VBAR, - '|=': VBAREQUAL, - '}': RBRACE, - '~': TILDE, -} - -def ISTERMINAL(x: int) -> bool: - return x < NT_OFFSET - -def ISNONTERMINAL(x: int) -> bool: - return x >= NT_OFFSET - -def ISEOF(x: int) -> bool: - return x == ENDMARKER diff --git a/Python314_4_x86_Template/Lib/tokenize.py b/Python314_4_x86_Template/Lib/tokenize.py deleted file mode 100644 index 1f31258ce..000000000 --- a/Python314_4_x86_Template/Lib/tokenize.py +++ /dev/null @@ -1,598 +0,0 @@ -"""Tokenization help for Python programs. - -tokenize(readline) is a generator that breaks a stream of bytes into -Python tokens. It decodes the bytes according to PEP-0263 for -determining source file encoding. - -It accepts a readline-like method which is called repeatedly to get the -next line of input (or b"" for EOF). It generates 5-tuples with these -members: - - the token type (see token.py) - the token (a string) - the starting (row, column) indices of the token (a 2-tuple of ints) - the ending (row, column) indices of the token (a 2-tuple of ints) - the original line (string) - -It is designed to match the working of the Python tokenizer exactly, except -that it produces COMMENT tokens for comments and gives type OP for all -operators. Additionally, all token lists start with an ENCODING token -which tells you which encoding was used to decode the bytes stream. -""" - -__author__ = 'Ka-Ping Yee <ping@lfw.org>' -__credits__ = ('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, ' - 'Skip Montanaro, Raymond Hettinger, Trent Nelson, ' - 'Michael Foord') -from builtins import open as _builtin_open -from codecs import lookup, BOM_UTF8 -import collections -import functools -from io import TextIOWrapper -import itertools as _itertools -import re -import sys -from token import * -from token import EXACT_TOKEN_TYPES -import _tokenize - -cookie_re = re.compile(br'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)', re.ASCII) -blank_re = re.compile(br'^[ \t\f]*(?:[#\r\n]|$)', re.ASCII) - -import token -__all__ = token.__all__ + ["tokenize", "generate_tokens", "detect_encoding", - "untokenize", "TokenInfo", "open", "TokenError"] -del token - -class TokenInfo(collections.namedtuple('TokenInfo', 'type string start end line')): - def __repr__(self): - annotated_type = '%d (%s)' % (self.type, tok_name[self.type]) - return ('TokenInfo(type=%s, string=%r, start=%r, end=%r, line=%r)' % - self._replace(type=annotated_type)) - - @property - def exact_type(self): - if self.type == OP and self.string in EXACT_TOKEN_TYPES: - return EXACT_TOKEN_TYPES[self.string] - else: - return self.type - -def group(*choices): return '(' + '|'.join(choices) + ')' -def any(*choices): return group(*choices) + '*' -def maybe(*choices): return group(*choices) + '?' - -# Note: we use unicode matching for names ("\w") but ascii matching for -# number literals. -Whitespace = r'[ \f\t]*' -Comment = r'#[^\r\n]*' -Ignore = Whitespace + any(r'\\\r?\n' + Whitespace) + maybe(Comment) -Name = r'\w+' - -Hexnumber = r'0[xX](?:_?[0-9a-fA-F])+' -Binnumber = r'0[bB](?:_?[01])+' -Octnumber = r'0[oO](?:_?[0-7])+' -Decnumber = r'(?:0(?:_?0)*|[1-9](?:_?[0-9])*)' -Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber) -Exponent = r'[eE][-+]?[0-9](?:_?[0-9])*' -Pointfloat = group(r'[0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?', - r'\.[0-9](?:_?[0-9])*') + maybe(Exponent) -Expfloat = r'[0-9](?:_?[0-9])*' + Exponent -Floatnumber = group(Pointfloat, Expfloat) -Imagnumber = group(r'[0-9](?:_?[0-9])*[jJ]', Floatnumber + r'[jJ]') -Number = group(Imagnumber, Floatnumber, Intnumber) - -# Return the empty string, plus all of the valid string prefixes. -def _all_string_prefixes(): - # The valid string prefixes. Only contain the lower case versions, - # and don't contain any permutations (include 'fr', but not - # 'rf'). The various permutations will be generated. - _valid_string_prefixes = ['b', 'r', 'u', 'f', 't', 'br', 'fr', 'tr'] - # if we add binary f-strings, add: ['fb', 'fbr'] - result = {''} - for prefix in _valid_string_prefixes: - for t in _itertools.permutations(prefix): - # create a list with upper and lower versions of each - # character - for u in _itertools.product(*[(c, c.upper()) for c in t]): - result.add(''.join(u)) - return result - -@functools.lru_cache -def _compile(expr): - return re.compile(expr, re.UNICODE) - -# Note that since _all_string_prefixes includes the empty string, -# StringPrefix can be the empty string (making it optional). -StringPrefix = group(*_all_string_prefixes()) - -# Tail end of ' string. -Single = r"[^'\\]*(?:\\.[^'\\]*)*'" -# Tail end of " string. -Double = r'[^"\\]*(?:\\.[^"\\]*)*"' -# Tail end of ''' string. -Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" -# Tail end of """ string. -Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' -Triple = group(StringPrefix + "'''", StringPrefix + '"""') -# Single-line ' or " string. -String = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'", - StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*"') - -# Sorting in reverse order puts the long operators before their prefixes. -# Otherwise if = came before ==, == would get recognized as two instances -# of =. -Special = group(*map(re.escape, sorted(EXACT_TOKEN_TYPES, reverse=True))) -Funny = group(r'\r?\n', Special) - -PlainToken = group(Number, Funny, String, Name) -Token = Ignore + PlainToken - -# First (or only) line of ' or " string. -ContStr = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" + - group("'", r'\\\r?\n'), - StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' + - group('"', r'\\\r?\n')) -PseudoExtras = group(r'\\\r?\n|\z', Comment, Triple) -PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name) - -# For a given string prefix plus quotes, endpats maps it to a regex -# to match the remainder of that string. _prefix can be empty, for -# a normal single or triple quoted string (with no prefix). -endpats = {} -for _prefix in _all_string_prefixes(): - endpats[_prefix + "'"] = Single - endpats[_prefix + '"'] = Double - endpats[_prefix + "'''"] = Single3 - endpats[_prefix + '"""'] = Double3 -del _prefix - -# A set of all of the single and triple quoted string prefixes, -# including the opening quotes. -single_quoted = set() -triple_quoted = set() -for t in _all_string_prefixes(): - for u in (t + '"', t + "'"): - single_quoted.add(u) - for u in (t + '"""', t + "'''"): - triple_quoted.add(u) -del t, u - -tabsize = 8 - -class TokenError(Exception): pass - - -class Untokenizer: - - def __init__(self): - self.tokens = [] - self.prev_row = 1 - self.prev_col = 0 - self.prev_type = None - self.prev_line = "" - self.encoding = None - - def add_whitespace(self, start): - row, col = start - if row < self.prev_row or row == self.prev_row and col < self.prev_col: - raise ValueError("start ({},{}) precedes previous end ({},{})" - .format(row, col, self.prev_row, self.prev_col)) - self.add_backslash_continuation(start) - col_offset = col - self.prev_col - if col_offset: - self.tokens.append(" " * col_offset) - - def add_backslash_continuation(self, start): - """Add backslash continuation characters if the row has increased - without encountering a newline token. - - This also inserts the correct amount of whitespace before the backslash. - """ - row = start[0] - row_offset = row - self.prev_row - if row_offset == 0: - return - - newline = '\r\n' if self.prev_line.endswith('\r\n') else '\n' - line = self.prev_line.rstrip('\\\r\n') - ws = ''.join(_itertools.takewhile(str.isspace, reversed(line))) - self.tokens.append(ws + f"\\{newline}" * row_offset) - self.prev_col = 0 - - def escape_brackets(self, token): - characters = [] - consume_until_next_bracket = False - for character in token: - if character == "}": - if consume_until_next_bracket: - consume_until_next_bracket = False - else: - characters.append(character) - if character == "{": - n_backslashes = sum( - 1 for char in _itertools.takewhile( - "\\".__eq__, - characters[-2::-1] - ) - ) - if n_backslashes % 2 == 0 or characters[-1] != "N": - characters.append(character) - else: - consume_until_next_bracket = True - characters.append(character) - return "".join(characters) - - def untokenize(self, iterable): - it = iter(iterable) - indents = [] - startline = False - for t in it: - if len(t) == 2: - self.compat(t, it) - break - tok_type, token, start, end, line = t - if tok_type == ENCODING: - self.encoding = token - continue - if tok_type == ENDMARKER: - break - if tok_type == INDENT: - indents.append(token) - continue - elif tok_type == DEDENT: - indents.pop() - self.prev_row, self.prev_col = end - continue - elif tok_type in (NEWLINE, NL): - startline = True - elif startline and indents: - indent = indents[-1] - if start[1] >= len(indent): - self.tokens.append(indent) - self.prev_col = len(indent) - startline = False - elif tok_type in {FSTRING_MIDDLE, TSTRING_MIDDLE}: - if '{' in token or '}' in token: - token = self.escape_brackets(token) - last_line = token.splitlines()[-1] - end_line, end_col = end - extra_chars = last_line.count("{{") + last_line.count("}}") - end = (end_line, end_col + extra_chars) - - self.add_whitespace(start) - self.tokens.append(token) - self.prev_row, self.prev_col = end - if tok_type in (NEWLINE, NL): - self.prev_row += 1 - self.prev_col = 0 - self.prev_type = tok_type - self.prev_line = line - return "".join(self.tokens) - - def compat(self, token, iterable): - indents = [] - toks_append = self.tokens.append - startline = token[0] in (NEWLINE, NL) - prevstring = False - in_fstring_or_tstring = 0 - - for tok in _itertools.chain([token], iterable): - toknum, tokval = tok[:2] - if toknum == ENCODING: - self.encoding = tokval - continue - - if toknum in (NAME, NUMBER): - tokval += ' ' - - # Insert a space between two consecutive strings - if toknum == STRING: - if prevstring: - tokval = ' ' + tokval - prevstring = True - else: - prevstring = False - - if toknum in {FSTRING_START, TSTRING_START}: - in_fstring_or_tstring += 1 - elif toknum in {FSTRING_END, TSTRING_END}: - in_fstring_or_tstring -= 1 - if toknum == INDENT: - indents.append(tokval) - continue - elif toknum == DEDENT: - indents.pop() - continue - elif toknum in (NEWLINE, NL): - startline = True - elif startline and indents: - toks_append(indents[-1]) - startline = False - elif toknum in {FSTRING_MIDDLE, TSTRING_MIDDLE}: - tokval = self.escape_brackets(tokval) - - # Insert a space between two consecutive brackets if we are in an f-string or t-string - if tokval in {"{", "}"} and self.tokens and self.tokens[-1] == tokval and in_fstring_or_tstring: - tokval = ' ' + tokval - - # Insert a space between two consecutive f-strings - if toknum in (STRING, FSTRING_START) and self.prev_type in (STRING, FSTRING_END): - self.tokens.append(" ") - - toks_append(tokval) - self.prev_type = toknum - - -def untokenize(iterable): - """Transform tokens back into Python source code. - It returns a bytes object, encoded using the ENCODING - token, which is the first token sequence output by tokenize. - - Each element returned by the iterable must be a token sequence - with at least two elements, a token number and token value. If - only two tokens are passed, the resulting output is poor. - - The result is guaranteed to tokenize back to match the input so - that the conversion is lossless and round-trips are assured. - The guarantee applies only to the token type and token string as - the spacing between tokens (column positions) may change. - """ - ut = Untokenizer() - out = ut.untokenize(iterable) - if ut.encoding is not None: - out = out.encode(ut.encoding) - return out - - -def _get_normal_name(orig_enc): - """Imitates get_normal_name in Parser/tokenizer/helpers.c.""" - # Only care about the first 12 characters. - enc = orig_enc[:12].lower().replace("_", "-") - if enc == "utf-8" or enc.startswith("utf-8-"): - return "utf-8" - if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ - enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): - return "iso-8859-1" - return orig_enc - -def detect_encoding(readline): - """ - The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argument, readline, - in the same way as the tokenize() generator. - - It will call readline a maximum of twice, and return the encoding used - (as a string) and a list of any lines (left as bytes) it has read in. - - It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, - 'utf-8-sig' is returned. - - If no encoding is specified, then the default of 'utf-8' will be returned. - """ - try: - filename = readline.__self__.name - except AttributeError: - filename = None - bom_found = False - encoding = None - default = 'utf-8' - def read_or_stop(): - try: - return readline() - except StopIteration: - return b'' - - def check(line, encoding): - # Check if the line matches the encoding. - if 0 in line: - raise SyntaxError("source code cannot contain null bytes") - try: - line.decode(encoding) - except UnicodeDecodeError: - msg = "invalid or missing encoding declaration" - if filename is not None: - msg = '{} for {!r}'.format(msg, filename) - raise SyntaxError(msg) - - def find_cookie(line): - match = cookie_re.match(line) - if not match: - return None - encoding = _get_normal_name(match.group(1).decode()) - try: - codec = lookup(encoding) - except LookupError: - # This behaviour mimics the Python interpreter - if filename is None: - msg = "unknown encoding: " + encoding - else: - msg = "unknown encoding for {!r}: {}".format(filename, - encoding) - raise SyntaxError(msg) - - if bom_found: - if encoding != 'utf-8': - # This behaviour mimics the Python interpreter - if filename is None: - msg = 'encoding problem: utf-8' - else: - msg = 'encoding problem for {!r}: utf-8'.format(filename) - raise SyntaxError(msg) - encoding += '-sig' - return encoding - - first = read_or_stop() - if first.startswith(BOM_UTF8): - bom_found = True - first = first[3:] - default = 'utf-8-sig' - if not first: - return default, [] - - encoding = find_cookie(first) - if encoding: - check(first, encoding) - return encoding, [first] - if not blank_re.match(first): - check(first, default) - return default, [first] - - second = read_or_stop() - if not second: - check(first, default) - return default, [first] - - encoding = find_cookie(second) - if encoding: - check(first + second, encoding) - return encoding, [first, second] - - check(first + second, default) - return default, [first, second] - - -def open(filename): - """Open a file in read only mode using the encoding detected by - detect_encoding(). - """ - buffer = _builtin_open(filename, 'rb') - try: - encoding, lines = detect_encoding(buffer.readline) - buffer.seek(0) - text = TextIOWrapper(buffer, encoding, line_buffering=True) - text.mode = 'r' - return text - except: - buffer.close() - raise - -def tokenize(readline): - """ - The tokenize() generator requires one argument, readline, which - must be a callable object which provides the same interface as the - readline() method of built-in file objects. Each call to the function - should return one line of input as bytes. Alternatively, readline - can be a callable function terminating with StopIteration: - readline = open(myfile, 'rb').__next__ # Example of alternate readline - - The generator produces 5-tuples with these members: the token type; the - token string; a 2-tuple (srow, scol) of ints specifying the row and - column where the token begins in the source; a 2-tuple (erow, ecol) of - ints specifying the row and column where the token ends in the source; - and the line on which the token was found. The line passed is the - physical line. - - The first token sequence will always be an ENCODING token - which tells you which encoding was used to decode the bytes stream. - """ - encoding, consumed = detect_encoding(readline) - rl_gen = _itertools.chain(consumed, iter(readline, b"")) - if encoding is not None: - if encoding == "utf-8-sig": - # BOM will already have been stripped. - encoding = "utf-8" - yield TokenInfo(ENCODING, encoding, (0, 0), (0, 0), '') - yield from _generate_tokens_from_c_tokenizer(rl_gen.__next__, encoding, extra_tokens=True) - -def generate_tokens(readline): - """Tokenize a source reading Python code as unicode strings. - - This has the same API as tokenize(), except that it expects the *readline* - callable to return str objects instead of bytes. - """ - return _generate_tokens_from_c_tokenizer(readline, extra_tokens=True) - -def _main(args=None): - import argparse - - # Helper error handling routines - def perror(message): - sys.stderr.write(message) - sys.stderr.write('\n') - - def error(message, filename=None, location=None): - if location: - args = (filename,) + location + (message,) - perror("%s:%d:%d: error: %s" % args) - elif filename: - perror("%s: error: %s" % (filename, message)) - else: - perror("error: %s" % message) - sys.exit(1) - - # Parse the arguments and options - parser = argparse.ArgumentParser(color=True) - parser.add_argument(dest='filename', nargs='?', - metavar='filename.py', - help='the file to tokenize; defaults to stdin') - parser.add_argument('-e', '--exact', dest='exact', action='store_true', - help='display token names using the exact type') - args = parser.parse_args(args) - - try: - # Tokenize the input - if args.filename: - filename = args.filename - with _builtin_open(filename, 'rb') as f: - tokens = list(tokenize(f.readline)) - else: - filename = "<stdin>" - tokens = _generate_tokens_from_c_tokenizer( - sys.stdin.readline, extra_tokens=True) - - - # Output the tokenization - for token in tokens: - token_type = token.type - if args.exact: - token_type = token.exact_type - token_range = "%d,%d-%d,%d:" % (token.start + token.end) - print("%-20s%-15s%-15r" % - (token_range, tok_name[token_type], token.string)) - except IndentationError as err: - line, column = err.args[1][1:3] - error(err.args[0], filename, (line, column)) - except TokenError as err: - line, column = err.args[1] - error(err.args[0], filename, (line, column)) - except SyntaxError as err: - error(err, filename) - except OSError as err: - error(err) - except KeyboardInterrupt: - print("interrupted\n") - except Exception as err: - perror("unexpected error: %s" % err) - raise - -def _transform_msg(msg): - """Transform error messages from the C tokenizer into the Python tokenize - - The C tokenizer is more picky than the Python one, so we need to massage - the error messages a bit for backwards compatibility. - """ - if "unterminated triple-quoted string literal" in msg: - return "EOF in multi-line string" - return msg - -def _generate_tokens_from_c_tokenizer(source, encoding=None, extra_tokens=False): - """Tokenize a source reading Python code as unicode strings using the internal C tokenizer""" - if encoding is None: - it = _tokenize.TokenizerIter(source, extra_tokens=extra_tokens) - else: - it = _tokenize.TokenizerIter(source, encoding=encoding, extra_tokens=extra_tokens) - try: - for info in it: - yield TokenInfo._make(info) - except SyntaxError as e: - if type(e) != SyntaxError: - raise e from None - msg = _transform_msg(e.msg) - raise TokenError(msg, (e.lineno, e.offset)) from None - - -if __name__ == "__main__": - _main() diff --git a/Python314_4_x86_Template/Lib/tomllib/__init__.py b/Python314_4_x86_Template/Lib/tomllib/__init__.py deleted file mode 100644 index ef91cb9d2..000000000 --- a/Python314_4_x86_Template/Lib/tomllib/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -__all__ = ("loads", "load", "TOMLDecodeError") - -from ._parser import TOMLDecodeError, load, loads - -# Pretend this exception was created here. -TOMLDecodeError.__module__ = __name__ diff --git a/Python314_4_x86_Template/Lib/tomllib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/tomllib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 0ef51cef33aff8e7d265b9022c6d2455743b6d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmXv~yGjF55S@MGL42ea(LxXwjk*}bh@?>=LVOTncjIuAz2NHIz02JjG~Jf|il1Yl z#kLl<f&758iJ9We8P1%UVfNP7YC!Q``U=|?z)w*u!~Q3;eIgn390QM5&$_lcwy`^o zaXPMXw_#8k*l~Gj>e)Nsxp_${9;BX=*ZX%j-Agf2fw<CI>D(<8UCh4qoO#wR71|;2 zDtQHwONmG%;W`z1E-YFKQ(i@kc_gT#h8U?}EQx=>j5NsA#Tk1bQ_6TCwBKqSu~(&E zSfbUl7@3rfq#6f9o{B~ohlU_Ev`*-T&+aGYNyW#06Px&UdV+lsC6XI~CQ4X095SOK zDJdfsUc`fBl2^|cC$#k{?WYeyx=Ao~EX$hKVC68Y{DS`p{<I8RyIK7kHgxgvKZ?g> A%K!iX diff --git a/Python314_4_x86_Template/Lib/tomllib/__pycache__/_parser.cpython-314.pyc b/Python314_4_x86_Template/Lib/tomllib/__pycache__/_parser.cpython-314.pyc deleted file mode 100644 index 1d5d11d50bd509ca102c9b8c0776e3bfb8892156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34939 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 NxS$7i&|fyy{~rk1ByIoz diff --git a/Python314_4_x86_Template/Lib/tomllib/__pycache__/_re.cpython-314.pyc b/Python314_4_x86_Template/Lib/tomllib/__pycache__/_re.cpython-314.pyc deleted file mode 100644 index 532b1d12d14dbd5ad0f0a80db682653fef508ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4589 zcmahMOKcm*b@s#Gk`yUXwrts{S5Yi`9ZQjHIhH?(YRgn8|DvuP+O0@YYjP#grMQdP zVPexV!T<qkIRzvjIk0tr8b}T<dU25eHP9Y%=%GLnz=>m6-71KIwkUikN<#?@^wPeW z<x)&)#{+Wa&6_uG-f!NUeZD0uA!t`Tck>TI2>p#t+~#orZuK08Pz6mQl^a6|j&NHj z%#ZO2fd~nn@ClKK2@mlkyu_RE5g%I@#{7u@2{2e3lZd2xNH87TR_C4zBea?F@s5QO zVG;&9PW6qoBqAiT1*v`#O-tj?x}vO&T}TbU%5!TN7gD9YyaSWillG>ggP;p-r2R=W zYA_uQAvLs1c<MRp)Nlt<TRKo7O4g?XAe*R0_SR2Oqp;RW*9M&<5$RCd02gEQ8`O4y z*D-jbDt04f{R2v;aCT5D77e12yiv3iuPx>@qT7Djll+`+i>wdOKBpImX8S2vHj29K zCFOi^+5jGb0xo5;T6R`HISNzZQ1K!R(zu2#eY9X`q#WNq(La!$=<nT^p5Fz-?zFNW zP`!H`+_xv&hxe!Y=<2@orGcF<URD^mLmAelKwYU{0s={fc7ZM&>K)a3r_+GT3^&b{ z9YD}6&*~Q#={)PtQ7P(_18GJ=`K+~W`CPu(w7~$5d)*xX{oj^u*~k(}k>;g|=X=w` zz`K8bVgMv>$OC(n#sS@OPS5U?^F^Z1=vX#2OhB9QgVWSXboMek95$!=nAYE7Gu*_- zFsaM5f;^42Y#n6mC=KkI(Bo+)(qq|x*zSJ)f(hO%5=R(C0?&D-3)+lTo|5WL7`&|X zZtrJm%?|*-UFo&?#K5k)Uw2dEf~ue+M9)rH@0;n92lfpO^$x(6y$!EToF;ObsaaNC zZMRSSq?}gfw^NCgr^Jc^W@wV1#-nUZPg^?pVOYx28&SU%NCa4b>8cDs1trlWKlC<2 zIlyg3KjLONl~Z|DP{kK`xD%cS^iJEJIgMmz{}aY~-w6s$SOlkSFV;y37t0a%YRL0U z&tKC^<efG!?6T;&&)Vll_NQL6bZn)xoQ?<f?dwmyVc?&pOl+Ljv&2ee3q~n-PP6ph zd@)a;vxrtG=(u+vHGYxI8pYiMgPFn1g`pQSr}a6r0Orh)IWu)Ue=bFgxk3TP42Wl5 zv_qLp{Q~Qm3|<fC?}fkh1L!K~5t6y%+(Xt^(=|5Uc+;7$0tI5mq5y3{_=90Qt2aOm zYOHbBjBMHI-1PDWP@9~|n}R8t9@A_3Ourd0B{P@;9!^VgZUSt=@sGg?E)M_83?;>B zmabFvl7P^ePm?W!b*|m0iI?c^Yr=URgY&vLv(=26k)*Ft7&g;DXxi-?_qo!qjgwxL zAFQW)m(vMu5}9quK!Z~Y;}mdro%u~N;L2>qPHam08<cH~l9fVAJr1StyA5{mDrd%0 z5qIUxr)U11j3!%?ZOND_?Dac%2wJiH%Mqjax{isg$x~`PbL7zJ`023|@hO?bu}lnk z%8l7R7nqU_{2laEpCqYT-qI~OsTE3k9Alu#Ps?Ohud~V-un5&c&Kel&7UYc_Wv|Jv zYlVD{T?YyFxQFyfCvC1@;V`v|;<vps*eIEnEkOFiBH(OK;e5#=c7WB6T!xe}Rm>Jj zB#Wv0m3ADZ2>(T0!x^}Tc3{pZl351&a@s`(_-BohvntKyizT=$l+tJESq1<yiw%px zfpV!(%CMRiadJk+%Fh(pnu};~Ypqi>F%_vGkRhlLwg3XyA|<!I4vj6qp>#qIw0Tmt z+CluDM%rEj@H(njD|1nX7#Y`Qco*Q=75*~-6;yi;1zHwE3!!&f9&QYIyvzRRvcGlN zA7MZn1E2>?2m5XOdq-z==-ta7W^X7T6hF@1+V)XlDONeM?2CNv>sX1zmX2JH-HB|y z?cchxVN*46E&QQ%WB&(l{z16)%I`x<-B)@lN51MC`uVA)&U>w0pS5;f@49~KPOI`o zc*iZRGWwNo{mSO8%b`s-BdY@cjI_W%@**j=5?;5MT1YMM_rtAM_>~|#<;LjEkz4Ek z#D5Vyc3V7#J3t>umA*Ocf|W1p-^$a}>u|xj)$L5_C+2A$-aNeOQN1tFH;fO{>w)RR z4Gd2(?xv96bts05hFC!17(ft*)EQ2WX69$<l68}G!8!X8@^RjWw5tj=I^2k{;g&P| z#Lw24Hdzq4(P)e_72XB_vL~;ip|ftOndDADp)rM2BcnFu9APcfC6Sw7b~dsfLdj-| zMow*}P&xNG>h1^g2sZb;!rLAipcdGjT@CBOf1xRYV;7q2@FwUKk(rTM5WffrTcl>R z=q>H(>5(0KJwwT9mxjM}5V{JwAKg$Lc`vdsa9yn&0ne{MEViwGKUO_^?U}o6J<IJI z-rrp<UmL#LzT<0;5Rg^{Psm$C9*@_tA+?BW6?z)8q0Cr6F%0VE+HpTk5V)0g%->!L zJ<Z><K-8#_0yhdZlJ?cP8XIql&U{Tmpl6L5j7j)M0G?VSK_A?P2a{qW_kXwEh~rIu zc8)*@>J9hUdgDpa^I2<(pGHJ9;l8)ZCOw1H($FAE_y^2l8({`P&<O(z2n>=UOqUcd z%fU_Y@f=;+O1pmOEK200I47yKHIiDv$Z7?eZ1E3)h8g`R02Q>{zvp+M--bSF`AqDs zB&yrKC*!OHBku`IiFd>ATi5qrd-G%A<|`kCZcX0_#&3)9H3zvNM1^4vqC!#!J?X{A zvWT#jMH*pb2jLlQ=^6GU$Fw**fkmH3PYtXh5LsR9=tmGrT{MomsxQ&7>bhBG!zWpW zbVRSeDqsUbBK(=?O8`76w$w(3Xv7pG*3Br%bv@<9ww4*1;^ceZc$3JDLNF72<uyK1 zXjWmh+{qoh6Cj5{Y>O(?)8hm}q!9?k(%d;6<55^-7TUu!T=s>2cImB4O9$@xwtVi} z@|Q?wb<eL3{Nlj1m+nNA+kRyw*m9+`cxmC%JD024ouGVMl$q6(PFu=krc3Z1r;lE+ z8Dg&m_NHJli|IXaQXI|8AbP2oC5BP3FnxE~Jl5^-=^u~BGb4%k$g#1LufW&rMKfQV z!PL#RHv==>V%~=*HhoTI;AwU0v}*gZ#+;ci=(aBzR}a5>DsBg0<>YH84#!nH1mN*k zM-CmQJM19L+}9YZ>nwM&yTDArqKRqb*vo%#&d8Mt`pftf2tgy-x(QuP;5hCZ331*3 zM5Fi6=$B~AUs2$GbX_I<l@R?>?EHuLY)wMZvs@)~Kh&~#^y<+XAMuDa83n_OI~I0) z-Q5=ED}h=MincA5ua>Jj??kp$Ldz}D#q(Fs*LYF#)cnZXRyhd)8slmKA8d}gn`2Uh quLQs8WS<hpIm8E-2EX7oe9c2`Ton+%u|}b9+GzrP6oNQs8vPFuHpr#` diff --git a/Python314_4_x86_Template/Lib/tomllib/_parser.py b/Python314_4_x86_Template/Lib/tomllib/_parser.py deleted file mode 100644 index 3ee47aa9e..000000000 --- a/Python314_4_x86_Template/Lib/tomllib/_parser.py +++ /dev/null @@ -1,753 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -from types import MappingProxyType - -from ._re import ( - RE_DATETIME, - RE_LOCALTIME, - RE_NUMBER, - match_to_datetime, - match_to_localtime, - match_to_number, -) - -TYPE_CHECKING = False -if TYPE_CHECKING: - from collections.abc import Iterable - from typing import IO, Any - - from ._types import Key, ParseFloat, Pos - -ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127)) - -# Neither of these sets include quotation mark or backslash. They are -# currently handled as separate cases in the parser functions. -ILLEGAL_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t") -ILLEGAL_MULTILINE_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t\n") - -ILLEGAL_LITERAL_STR_CHARS = ILLEGAL_BASIC_STR_CHARS -ILLEGAL_MULTILINE_LITERAL_STR_CHARS = ILLEGAL_MULTILINE_BASIC_STR_CHARS - -ILLEGAL_COMMENT_CHARS = ILLEGAL_BASIC_STR_CHARS - -TOML_WS = frozenset(" \t") -TOML_WS_AND_NEWLINE = TOML_WS | frozenset("\n") -BARE_KEY_CHARS = frozenset( - "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789" "-_" -) -KEY_INITIAL_CHARS = BARE_KEY_CHARS | frozenset("\"'") -HEXDIGIT_CHARS = frozenset("abcdef" "ABCDEF" "0123456789") - -BASIC_STR_ESCAPE_REPLACEMENTS = MappingProxyType( - { - "\\b": "\u0008", # backspace - "\\t": "\u0009", # tab - "\\n": "\u000A", # linefeed - "\\f": "\u000C", # form feed - "\\r": "\u000D", # carriage return - '\\"': "\u0022", # quote - "\\\\": "\u005C", # backslash - } -) - - -class DEPRECATED_DEFAULT: - """Sentinel to be used as default arg during deprecation - period of TOMLDecodeError's free-form arguments.""" - - -class TOMLDecodeError(ValueError): - """An error raised if a document is not valid TOML. - - Adds the following attributes to ValueError: - msg: The unformatted error message - doc: The TOML document being parsed - pos: The index of doc where parsing failed - lineno: The line corresponding to pos - colno: The column corresponding to pos - """ - - def __init__( - self, - msg: str = DEPRECATED_DEFAULT, # type: ignore[assignment] - doc: str = DEPRECATED_DEFAULT, # type: ignore[assignment] - pos: Pos = DEPRECATED_DEFAULT, # type: ignore[assignment] - *args: Any, - ): - if ( - args - or not isinstance(msg, str) - or not isinstance(doc, str) - or not isinstance(pos, int) - ): - import warnings - - warnings.warn( - "Free-form arguments for TOMLDecodeError are deprecated. " - "Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.", - DeprecationWarning, - stacklevel=2, - ) - if pos is not DEPRECATED_DEFAULT: # type: ignore[comparison-overlap] - args = pos, *args - if doc is not DEPRECATED_DEFAULT: # type: ignore[comparison-overlap] - args = doc, *args - if msg is not DEPRECATED_DEFAULT: # type: ignore[comparison-overlap] - args = msg, *args - ValueError.__init__(self, *args) - return - - lineno = doc.count("\n", 0, pos) + 1 - if lineno == 1: - colno = pos + 1 - else: - colno = pos - doc.rindex("\n", 0, pos) - - if pos >= len(doc): - coord_repr = "end of document" - else: - coord_repr = f"line {lineno}, column {colno}" - errmsg = f"{msg} (at {coord_repr})" - ValueError.__init__(self, errmsg) - - self.msg = msg - self.doc = doc - self.pos = pos - self.lineno = lineno - self.colno = colno - - -def load(fp: IO[bytes], /, *, parse_float: ParseFloat = float) -> dict[str, Any]: - """Parse TOML from a binary file object.""" - b = fp.read() - try: - s = b.decode() - except AttributeError: - raise TypeError( - "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`" - ) from None - return loads(s, parse_float=parse_float) - - -def loads(s: str, /, *, parse_float: ParseFloat = float) -> dict[str, Any]: # noqa: C901 - """Parse TOML from a string.""" - - # The spec allows converting "\r\n" to "\n", even in string - # literals. Let's do so to simplify parsing. - try: - src = s.replace("\r\n", "\n") - except (AttributeError, TypeError): - raise TypeError( - f"Expected str object, not '{type(s).__qualname__}'" - ) from None - pos = 0 - out = Output() - header: Key = () - parse_float = make_safe_parse_float(parse_float) - - # Parse one statement at a time - # (typically means one line in TOML source) - while True: - # 1. Skip line leading whitespace - pos = skip_chars(src, pos, TOML_WS) - - # 2. Parse rules. Expect one of the following: - # - end of file - # - end of line - # - comment - # - key/value pair - # - append dict to list (and move to its namespace) - # - create dict (and move to its namespace) - # Skip trailing whitespace when applicable. - try: - char = src[pos] - except IndexError: - break - if char == "\n": - pos += 1 - continue - if char in KEY_INITIAL_CHARS: - pos = key_value_rule(src, pos, out, header, parse_float) - pos = skip_chars(src, pos, TOML_WS) - elif char == "[": - try: - second_char: str | None = src[pos + 1] - except IndexError: - second_char = None - out.flags.finalize_pending() - if second_char == "[": - pos, header = create_list_rule(src, pos, out) - else: - pos, header = create_dict_rule(src, pos, out) - pos = skip_chars(src, pos, TOML_WS) - elif char != "#": - raise TOMLDecodeError("Invalid statement", src, pos) - - # 3. Skip comment - pos = skip_comment(src, pos) - - # 4. Expect end of line or end of file - try: - char = src[pos] - except IndexError: - break - if char != "\n": - raise TOMLDecodeError( - "Expected newline or end of document after a statement", src, pos - ) - pos += 1 - - return out.data.dict - - -class Flags: - """Flags that map to parsed keys/namespaces.""" - - # Marks an immutable namespace (inline array or inline table). - FROZEN = 0 - # Marks a nest that has been explicitly created and can no longer - # be opened using the "[table]" syntax. - EXPLICIT_NEST = 1 - - def __init__(self) -> None: - self._flags: dict[str, dict[Any, Any]] = {} - self._pending_flags: set[tuple[Key, int]] = set() - - def add_pending(self, key: Key, flag: int) -> None: - self._pending_flags.add((key, flag)) - - def finalize_pending(self) -> None: - for key, flag in self._pending_flags: - self.set(key, flag, recursive=False) - self._pending_flags.clear() - - def unset_all(self, key: Key) -> None: - cont = self._flags - for k in key[:-1]: - if k not in cont: - return - cont = cont[k]["nested"] - cont.pop(key[-1], None) - - def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003 - cont = self._flags - key_parent, key_stem = key[:-1], key[-1] - for k in key_parent: - if k not in cont: - cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont = cont[k]["nested"] - if key_stem not in cont: - cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}} - cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag) - - def is_(self, key: Key, flag: int) -> bool: - if not key: - return False # document root has no flags - cont = self._flags - for k in key[:-1]: - if k not in cont: - return False - inner_cont = cont[k] - if flag in inner_cont["recursive_flags"]: - return True - cont = inner_cont["nested"] - key_stem = key[-1] - if key_stem in cont: - cont = cont[key_stem] - return flag in cont["flags"] or flag in cont["recursive_flags"] - return False - - -class NestedDict: - def __init__(self) -> None: - # The parsed content of the TOML document - self.dict: dict[str, Any] = {} - - def get_or_create_nest( - self, - key: Key, - *, - access_lists: bool = True, - ) -> dict[str, Any]: - cont: Any = self.dict - for k in key: - if k not in cont: - cont[k] = {} - cont = cont[k] - if access_lists and isinstance(cont, list): - cont = cont[-1] - if not isinstance(cont, dict): - raise KeyError("There is no nest behind this key") - return cont # type: ignore[no-any-return] - - def append_nest_to_list(self, key: Key) -> None: - cont = self.get_or_create_nest(key[:-1]) - last_key = key[-1] - if last_key in cont: - list_ = cont[last_key] - if not isinstance(list_, list): - raise KeyError("An object other than list found behind this key") - list_.append({}) - else: - cont[last_key] = [{}] - - -class Output: - def __init__(self) -> None: - self.data = NestedDict() - self.flags = Flags() - - -def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos: - try: - while src[pos] in chars: - pos += 1 - except IndexError: - pass - return pos - - -def skip_until( - src: str, - pos: Pos, - expect: str, - *, - error_on: frozenset[str], - error_on_eof: bool, -) -> Pos: - try: - new_pos = src.index(expect, pos) - except ValueError: - new_pos = len(src) - if error_on_eof: - raise TOMLDecodeError(f"Expected {expect!r}", src, new_pos) from None - - if not error_on.isdisjoint(src[pos:new_pos]): - while src[pos] not in error_on: - pos += 1 - raise TOMLDecodeError(f"Found invalid character {src[pos]!r}", src, pos) - return new_pos - - -def skip_comment(src: str, pos: Pos) -> Pos: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char == "#": - return skip_until( - src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False - ) - return pos - - -def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos: - while True: - pos_before_skip = pos - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - pos = skip_comment(src, pos) - if pos == pos_before_skip: - return pos - - -def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 1 # Skip "[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot declare {key} twice", src, pos) - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.get_or_create_nest(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]", pos): - raise TOMLDecodeError( - "Expected ']' at the end of a table declaration", src, pos - ) - return pos + 1, key - - -def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]: - pos += 2 # Skip "[[" - pos = skip_chars(src, pos, TOML_WS) - pos, key = parse_key(src, pos) - - if out.flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - # Free the namespace now that it points to another empty list item... - out.flags.unset_all(key) - # ...but this key precisely is still prohibited from table declaration - out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False) - try: - out.data.append_nest_to_list(key) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - - if not src.startswith("]]", pos): - raise TOMLDecodeError( - "Expected ']]' at the end of an array declaration", src, pos - ) - return pos + 2, key - - -def key_value_rule( - src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat -) -> Pos: - pos, key, value = parse_key_value_pair(src, pos, parse_float) - key_parent, key_stem = key[:-1], key[-1] - abs_key_parent = header + key_parent - - relative_path_cont_keys = (header + key[:i] for i in range(1, len(key))) - for cont_key in relative_path_cont_keys: - # Check that dotted key syntax does not redefine an existing table - if out.flags.is_(cont_key, Flags.EXPLICIT_NEST): - raise TOMLDecodeError(f"Cannot redefine namespace {cont_key}", src, pos) - # Containers in the relative path can't be opened with the table syntax or - # dotted key/value syntax in following table sections. - out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST) - - if out.flags.is_(abs_key_parent, Flags.FROZEN): - raise TOMLDecodeError( - f"Cannot mutate immutable namespace {abs_key_parent}", src, pos - ) - - try: - nest = out.data.get_or_create_nest(abs_key_parent) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) - # Mark inline table and array namespaces recursively immutable - if isinstance(value, (dict, list)): - out.flags.set(header + key, Flags.FROZEN, recursive=True) - nest[key_stem] = value - return pos - - -def parse_key_value_pair( - src: str, pos: Pos, parse_float: ParseFloat -) -> tuple[Pos, Key, Any]: - pos, key = parse_key(src, pos) - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != "=": - raise TOMLDecodeError("Expected '=' after a key in a key/value pair", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, value = parse_value(src, pos, parse_float) - return pos, key, value - - -def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]: - pos, key_part = parse_key_part(src, pos) - key: Key = (key_part,) - pos = skip_chars(src, pos, TOML_WS) - while True: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char != ".": - return pos, key - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - pos, key_part = parse_key_part(src, pos) - key += (key_part,) - pos = skip_chars(src, pos, TOML_WS) - - -def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]: - try: - char: str | None = src[pos] - except IndexError: - char = None - if char in BARE_KEY_CHARS: - start_pos = pos - pos = skip_chars(src, pos, BARE_KEY_CHARS) - return pos, src[start_pos:pos] - if char == "'": - return parse_literal_str(src, pos) - if char == '"': - return parse_one_line_basic_str(src, pos) - raise TOMLDecodeError("Invalid initial character for a key part", src, pos) - - -def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 - return parse_basic_str(src, pos, multiline=False) - - -def parse_array(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, list[Any]]: - pos += 1 - array: list[Any] = [] - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - while True: - pos, val = parse_value(src, pos, parse_float) - array.append(val) - pos = skip_comments_and_array_ws(src, pos) - - c = src[pos : pos + 1] - if c == "]": - return pos + 1, array - if c != ",": - raise TOMLDecodeError("Unclosed array", src, pos) - pos += 1 - - pos = skip_comments_and_array_ws(src, pos) - if src.startswith("]", pos): - return pos + 1, array - - -def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, dict[str, Any]]: - pos += 1 - nested_dict = NestedDict() - flags = Flags() - - pos = skip_chars(src, pos, TOML_WS) - if src.startswith("}", pos): - return pos + 1, nested_dict.dict - while True: - pos, key, value = parse_key_value_pair(src, pos, parse_float) - key_parent, key_stem = key[:-1], key[-1] - if flags.is_(key, Flags.FROZEN): - raise TOMLDecodeError(f"Cannot mutate immutable namespace {key}", src, pos) - try: - nest = nested_dict.get_or_create_nest(key_parent, access_lists=False) - except KeyError: - raise TOMLDecodeError("Cannot overwrite a value", src, pos) from None - if key_stem in nest: - raise TOMLDecodeError(f"Duplicate inline table key {key_stem!r}", src, pos) - nest[key_stem] = value - pos = skip_chars(src, pos, TOML_WS) - c = src[pos : pos + 1] - if c == "}": - return pos + 1, nested_dict.dict - if c != ",": - raise TOMLDecodeError("Unclosed inline table", src, pos) - if isinstance(value, (dict, list)): - flags.set(key, Flags.FROZEN, recursive=True) - pos += 1 - pos = skip_chars(src, pos, TOML_WS) - - -def parse_basic_str_escape( - src: str, pos: Pos, *, multiline: bool = False -) -> tuple[Pos, str]: - escape_id = src[pos : pos + 2] - pos += 2 - if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}: - # Skip whitespace until next non-whitespace character or end of - # the doc. Error if non-whitespace is found before newline. - if escape_id != "\\\n": - pos = skip_chars(src, pos, TOML_WS) - try: - char = src[pos] - except IndexError: - return pos, "" - if char != "\n": - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) - pos += 1 - pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE) - return pos, "" - if escape_id == "\\u": - return parse_hex_char(src, pos, 4) - if escape_id == "\\U": - return parse_hex_char(src, pos, 8) - try: - return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id] - except KeyError: - raise TOMLDecodeError("Unescaped '\\' in a string", src, pos) from None - - -def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]: - return parse_basic_str_escape(src, pos, multiline=True) - - -def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]: - hex_str = src[pos : pos + hex_len] - if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str): - raise TOMLDecodeError("Invalid hex value", src, pos) - pos += hex_len - hex_int = int(hex_str, 16) - if not is_unicode_scalar_value(hex_int): - raise TOMLDecodeError( - "Escaped character is not a Unicode scalar value", src, pos - ) - return pos, chr(hex_int) - - -def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]: - pos += 1 # Skip starting apostrophe - start_pos = pos - pos = skip_until( - src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True - ) - return pos + 1, src[start_pos:pos] # Skip ending apostrophe - - -def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]: - pos += 3 - if src.startswith("\n", pos): - pos += 1 - - if literal: - delim = "'" - end_pos = skip_until( - src, - pos, - "'''", - error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS, - error_on_eof=True, - ) - result = src[pos:end_pos] - pos = end_pos + 3 - else: - delim = '"' - pos, result = parse_basic_str(src, pos, multiline=True) - - # Add at maximum two extra apostrophes/quotes if the end sequence - # is 4 or 5 chars long instead of just 3. - if not src.startswith(delim, pos): - return pos, result - pos += 1 - if not src.startswith(delim, pos): - return pos, result + delim - pos += 1 - return pos, result + (delim * 2) - - -def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]: - if multiline: - error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape_multiline - else: - error_on = ILLEGAL_BASIC_STR_CHARS - parse_escapes = parse_basic_str_escape - result = "" - start_pos = pos - while True: - try: - char = src[pos] - except IndexError: - raise TOMLDecodeError("Unterminated string", src, pos) from None - if char == '"': - if not multiline: - return pos + 1, result + src[start_pos:pos] - if src.startswith('"""', pos): - return pos + 3, result + src[start_pos:pos] - pos += 1 - continue - if char == "\\": - result += src[start_pos:pos] - pos, parsed_escape = parse_escapes(src, pos) - result += parsed_escape - start_pos = pos - continue - if char in error_on: - raise TOMLDecodeError(f"Illegal character {char!r}", src, pos) - pos += 1 - - -def parse_value( # noqa: C901 - src: str, pos: Pos, parse_float: ParseFloat -) -> tuple[Pos, Any]: - try: - char: str | None = src[pos] - except IndexError: - char = None - - # IMPORTANT: order conditions based on speed of checking and likelihood - - # Basic strings - if char == '"': - if src.startswith('"""', pos): - return parse_multiline_str(src, pos, literal=False) - return parse_one_line_basic_str(src, pos) - - # Literal strings - if char == "'": - if src.startswith("'''", pos): - return parse_multiline_str(src, pos, literal=True) - return parse_literal_str(src, pos) - - # Booleans - if char == "t": - if src.startswith("true", pos): - return pos + 4, True - if char == "f": - if src.startswith("false", pos): - return pos + 5, False - - # Arrays - if char == "[": - return parse_array(src, pos, parse_float) - - # Inline tables - if char == "{": - return parse_inline_table(src, pos, parse_float) - - # Dates and times - datetime_match = RE_DATETIME.match(src, pos) - if datetime_match: - try: - datetime_obj = match_to_datetime(datetime_match) - except ValueError as e: - raise TOMLDecodeError("Invalid date or datetime", src, pos) from e - return datetime_match.end(), datetime_obj - localtime_match = RE_LOCALTIME.match(src, pos) - if localtime_match: - return localtime_match.end(), match_to_localtime(localtime_match) - - # Integers and "normal" floats. - # The regex will greedily match any type starting with a decimal - # char, so needs to be located after handling of dates and times. - number_match = RE_NUMBER.match(src, pos) - if number_match: - return number_match.end(), match_to_number(number_match, parse_float) - - # Special floats - first_three = src[pos : pos + 3] - if first_three in {"inf", "nan"}: - return pos + 3, parse_float(first_three) - first_four = src[pos : pos + 4] - if first_four in {"-inf", "+inf", "-nan", "+nan"}: - return pos + 4, parse_float(first_four) - - raise TOMLDecodeError("Invalid value", src, pos) - - -def is_unicode_scalar_value(codepoint: int) -> bool: - return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111) - - -def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat: - """A decorator to make `parse_float` safe. - - `parse_float` must not return dicts or lists, because these types - would be mixed with parsed TOML tables and arrays, thus confusing - the parser. The returned decorated callable raises `ValueError` - instead of returning illegal types. - """ - # The default `float` callable never returns illegal types. Optimize it. - if parse_float is float: - return float - - def safe_parse_float(float_str: str) -> Any: - float_value = parse_float(float_str) - if isinstance(float_value, (dict, list)): - raise ValueError("parse_float must not return dicts or lists") - return float_value - - return safe_parse_float diff --git a/Python314_4_x86_Template/Lib/tomllib/_re.py b/Python314_4_x86_Template/Lib/tomllib/_re.py deleted file mode 100644 index eb8beb197..000000000 --- a/Python314_4_x86_Template/Lib/tomllib/_re.py +++ /dev/null @@ -1,113 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from __future__ import annotations - -from datetime import date, datetime, time, timedelta, timezone, tzinfo -from functools import lru_cache -import re - -TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Any - - from ._types import ParseFloat - -# E.g. -# - 00:32:00.999999 -# - 00:32:00 -_TIME_RE_STR = r"([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:\.([0-9]{1,6})[0-9]*)?" - -RE_NUMBER = re.compile( - r""" -0 -(?: - x[0-9A-Fa-f](?:_?[0-9A-Fa-f])* # hex - | - b[01](?:_?[01])* # bin - | - o[0-7](?:_?[0-7])* # oct -) -| -[+-]?(?:0|[1-9](?:_?[0-9])*) # dec, integer part -(?P<floatpart> - (?:\.[0-9](?:_?[0-9])*)? # optional fractional part - (?:[eE][+-]?[0-9](?:_?[0-9])*)? # optional exponent part -) -""", - flags=re.VERBOSE, -) -RE_LOCALTIME = re.compile(_TIME_RE_STR) -RE_DATETIME = re.compile( - rf""" -([0-9]{{4}})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) # date, e.g. 1988-10-27 -(?: - [Tt ] - {_TIME_RE_STR} - (?:([Zz])|([+-])([01][0-9]|2[0-3]):([0-5][0-9]))? # optional time offset -)? -""", - flags=re.VERBOSE, -) - - -def match_to_datetime(match: re.Match[str]) -> datetime | date: - """Convert a `RE_DATETIME` match to `datetime.datetime` or `datetime.date`. - - Raises ValueError if the match does not correspond to a valid date - or datetime. - """ - ( - year_str, - month_str, - day_str, - hour_str, - minute_str, - sec_str, - micros_str, - zulu_time, - offset_sign_str, - offset_hour_str, - offset_minute_str, - ) = match.groups() - year, month, day = int(year_str), int(month_str), int(day_str) - if hour_str is None: - return date(year, month, day) - hour, minute, sec = int(hour_str), int(minute_str), int(sec_str) - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - if offset_sign_str: - tz: tzinfo | None = cached_tz( - offset_hour_str, offset_minute_str, offset_sign_str - ) - elif zulu_time: - tz = timezone.utc - else: # local date-time - tz = None - return datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz) - - -# No need to limit cache size. This is only ever called on input -# that matched RE_DATETIME, so there is an implicit bound of -# 24 (hours) * 60 (minutes) * 2 (offset direction) = 2880. -@lru_cache(maxsize=None) -def cached_tz(hour_str: str, minute_str: str, sign_str: str) -> timezone: - sign = 1 if sign_str == "+" else -1 - return timezone( - timedelta( - hours=sign * int(hour_str), - minutes=sign * int(minute_str), - ) - ) - - -def match_to_localtime(match: re.Match[str]) -> time: - hour_str, minute_str, sec_str, micros_str = match.groups() - micros = int(micros_str.ljust(6, "0")) if micros_str else 0 - return time(int(hour_str), int(minute_str), int(sec_str), micros) - - -def match_to_number(match: re.Match[str], parse_float: ParseFloat) -> Any: - if match.group("floatpart"): - return parse_float(match.group()) - return int(match.group(), 0) diff --git a/Python314_4_x86_Template/Lib/tomllib/_types.py b/Python314_4_x86_Template/Lib/tomllib/_types.py deleted file mode 100644 index d949412e0..000000000 --- a/Python314_4_x86_Template/Lib/tomllib/_types.py +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: MIT -# SPDX-FileCopyrightText: 2021 Taneli Hukkinen -# Licensed to PSF under a Contributor Agreement. - -from typing import Any, Callable, Tuple - -# Type annotations -ParseFloat = Callable[[str], Any] -Key = Tuple[str, ...] -Pos = int diff --git a/Python314_4_x86_Template/Lib/tomllib/mypy.ini b/Python314_4_x86_Template/Lib/tomllib/mypy.ini deleted file mode 100644 index 1761dce45..000000000 --- a/Python314_4_x86_Template/Lib/tomllib/mypy.ini +++ /dev/null @@ -1,17 +0,0 @@ -# Config file for running mypy on tomllib. -# Run mypy by invoking `mypy --config-file Lib/tomllib/mypy.ini` -# on the command-line from the repo root - -[mypy] -files = Lib/tomllib -mypy_path = $MYPY_CONFIG_FILE_DIR/../../Misc/mypy -explicit_package_bases = True -python_version = 3.12 -pretty = True - -# Enable most stricter settings -enable_error_code = ignore-without-code -strict = True -strict_bytes = True -local_partial_types = True -warn_unreachable = True diff --git a/Python314_4_x86_Template/Lib/trace.py b/Python314_4_x86_Template/Lib/trace.py deleted file mode 100644 index cf8817f43..000000000 --- a/Python314_4_x86_Template/Lib/trace.py +++ /dev/null @@ -1,751 +0,0 @@ -# portions copyright 2001, Autonomous Zones Industries, Inc., all rights... -# err... reserved and offered to the public under the terms of the -# Python 2.2 license. -# Author: Zooko O'Whielacronx -# http://zooko.com/ -# mailto:zooko@zooko.com -# -# Copyright 2000, Mojam Media, Inc., all rights reserved. -# Author: Skip Montanaro -# -# Copyright 1999, Bioreason, Inc., all rights reserved. -# Author: Andrew Dalke -# -# Copyright 1995-1997, Automatrix, Inc., all rights reserved. -# Author: Skip Montanaro -# -# Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. -# -# -# Permission to use, copy, modify, and distribute this Python software and -# its associated documentation for any purpose without fee is hereby -# granted, provided that the above copyright notice appears in all copies, -# and that both that copyright notice and this permission notice appear in -# supporting documentation, and that the name of neither Automatrix, -# Bioreason or Mojam Media be used in advertising or publicity pertaining to -# distribution of the software without specific, written prior permission. -# -"""program/module to trace Python program or function execution - -Sample use, command line: - trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs - trace.py -t --ignore-dir '$prefix' spam.py eggs - trace.py --trackcalls spam.py eggs - -Sample use, programmatically - import sys - - # create a Trace object, telling it what to ignore, and whether to - # do tracing or line-counting or both. - tracer = trace.Trace(ignoredirs=[sys.base_prefix, sys.base_exec_prefix,], - trace=0, count=1) - # run the new command using the given tracer - tracer.run('main()') - # make a report, placing output in /tmp - r = tracer.results() - r.write_results(show_missing=True, coverdir="/tmp") -""" -__all__ = ['Trace', 'CoverageResults'] - -import io -import linecache -import os -import sys -import sysconfig -import token -import tokenize -import inspect -import gc -import dis -import pickle -from time import monotonic as _time - -import threading - -PRAGMA_NOCOVER = "#pragma NO COVER" - -class _Ignore: - def __init__(self, modules=None, dirs=None): - self._mods = set() if not modules else set(modules) - self._dirs = [] if not dirs else [os.path.normpath(d) - for d in dirs] - self._ignore = { '<string>': 1 } - - def names(self, filename, modulename): - if modulename in self._ignore: - return self._ignore[modulename] - - # haven't seen this one before, so see if the module name is - # on the ignore list. - if modulename in self._mods: # Identical names, so ignore - self._ignore[modulename] = 1 - return 1 - - # check if the module is a proper submodule of something on - # the ignore list - for mod in self._mods: - # Need to take some care since ignoring - # "cmp" mustn't mean ignoring "cmpcache" but ignoring - # "Spam" must also mean ignoring "Spam.Eggs". - if modulename.startswith(mod + '.'): - self._ignore[modulename] = 1 - return 1 - - # Now check that filename isn't in one of the directories - if filename is None: - # must be a built-in, so we must ignore - self._ignore[modulename] = 1 - return 1 - - # Ignore a file when it contains one of the ignorable paths - for d in self._dirs: - # The '+ os.sep' is to ensure that d is a parent directory, - # as compared to cases like: - # d = "/usr/local" - # filename = "/usr/local.py" - # or - # d = "/usr/local.py" - # filename = "/usr/local.py" - if filename.startswith(d + os.sep): - self._ignore[modulename] = 1 - return 1 - - # Tried the different ways, so we don't ignore this module - self._ignore[modulename] = 0 - return 0 - -def _modname(path): - """Return a plausible module name for the path.""" - - base = os.path.basename(path) - filename, ext = os.path.splitext(base) - return filename - -def _fullmodname(path): - """Return a plausible module name for the path.""" - - # If the file 'path' is part of a package, then the filename isn't - # enough to uniquely identify it. Try to do the right thing by - # looking in sys.path for the longest matching prefix. We'll - # assume that the rest is the package name. - - comparepath = os.path.normcase(path) - longest = "" - for dir in sys.path: - dir = os.path.normcase(dir) - if comparepath.startswith(dir) and comparepath[len(dir)] == os.sep: - if len(dir) > len(longest): - longest = dir - - if longest: - base = path[len(longest) + 1:] - else: - base = path - # the drive letter is never part of the module name - drive, base = os.path.splitdrive(base) - base = base.replace(os.sep, ".") - if os.altsep: - base = base.replace(os.altsep, ".") - filename, ext = os.path.splitext(base) - return filename.lstrip(".") - -class CoverageResults: - def __init__(self, counts=None, calledfuncs=None, infile=None, - callers=None, outfile=None): - self.counts = counts - if self.counts is None: - self.counts = {} - self.counter = self.counts.copy() # map (filename, lineno) to count - self.calledfuncs = calledfuncs - if self.calledfuncs is None: - self.calledfuncs = {} - self.calledfuncs = self.calledfuncs.copy() - self.callers = callers - if self.callers is None: - self.callers = {} - self.callers = self.callers.copy() - self.infile = infile - self.outfile = outfile - if self.infile: - # Try to merge existing counts file. - try: - with open(self.infile, 'rb') as f: - counts, calledfuncs, callers = pickle.load(f) - self.update(self.__class__(counts, calledfuncs, callers=callers)) - except (OSError, EOFError, ValueError) as err: - print(("Skipping counts file %r: %s" - % (self.infile, err)), file=sys.stderr) - - def is_ignored_filename(self, filename): - """Return True if the filename does not refer to a file - we want to have reported. - """ - return filename.startswith('<') and filename.endswith('>') - - def update(self, other): - """Merge in the data from another CoverageResults""" - counts = self.counts - calledfuncs = self.calledfuncs - callers = self.callers - other_counts = other.counts - other_calledfuncs = other.calledfuncs - other_callers = other.callers - - for key in other_counts: - counts[key] = counts.get(key, 0) + other_counts[key] - - for key in other_calledfuncs: - calledfuncs[key] = 1 - - for key in other_callers: - callers[key] = 1 - - def write_results(self, show_missing=True, summary=False, coverdir=None, *, - ignore_missing_files=False): - """ - Write the coverage results. - - :param show_missing: Show lines that had no hits. - :param summary: Include coverage summary per module. - :param coverdir: If None, the results of each module are placed in its - directory, otherwise it is included in the directory - specified. - :param ignore_missing_files: If True, counts for files that no longer - exist are silently ignored. Otherwise, a missing file - will raise a FileNotFoundError. - """ - if self.calledfuncs: - print() - print("functions called:") - calls = self.calledfuncs - for filename, modulename, funcname in sorted(calls): - print(("filename: %s, modulename: %s, funcname: %s" - % (filename, modulename, funcname))) - - if self.callers: - print() - print("calling relationships:") - lastfile = lastcfile = "" - for ((pfile, pmod, pfunc), (cfile, cmod, cfunc)) \ - in sorted(self.callers): - if pfile != lastfile: - print() - print("***", pfile, "***") - lastfile = pfile - lastcfile = "" - if cfile != pfile and lastcfile != cfile: - print(" -->", cfile) - lastcfile = cfile - print(" %s.%s -> %s.%s" % (pmod, pfunc, cmod, cfunc)) - - # turn the counts data ("(filename, lineno) = count") into something - # accessible on a per-file basis - per_file = {} - for filename, lineno in self.counts: - lines_hit = per_file[filename] = per_file.get(filename, {}) - lines_hit[lineno] = self.counts[(filename, lineno)] - - # accumulate summary info, if needed - sums = {} - - for filename, count in per_file.items(): - if self.is_ignored_filename(filename): - continue - - if filename.endswith(".pyc"): - filename = filename[:-1] - - if ignore_missing_files and not os.path.isfile(filename): - continue - - if coverdir is None: - dir = os.path.dirname(os.path.abspath(filename)) - modulename = _modname(filename) - else: - dir = coverdir - os.makedirs(dir, exist_ok=True) - modulename = _fullmodname(filename) - - # If desired, get a list of the line numbers which represent - # executable content (returned as a dict for better lookup speed) - if show_missing: - lnotab = _find_executable_linenos(filename) - else: - lnotab = {} - source = linecache.getlines(filename) - coverpath = os.path.join(dir, modulename + ".cover") - with open(filename, 'rb') as fp: - encoding, _ = tokenize.detect_encoding(fp.readline) - n_hits, n_lines = self.write_results_file(coverpath, source, - lnotab, count, encoding) - if summary and n_lines: - sums[modulename] = n_lines, n_hits, modulename, filename - - if summary and sums: - print("lines cov% module (path)") - for m in sorted(sums): - n_lines, n_hits, modulename, filename = sums[m] - print(f"{n_lines:5d} {n_hits/n_lines:.1%} {modulename} ({filename})") - - if self.outfile: - # try and store counts and module info into self.outfile - try: - with open(self.outfile, 'wb') as f: - pickle.dump((self.counts, self.calledfuncs, self.callers), - f, 1) - except OSError as err: - print("Can't save counts files because %s" % err, file=sys.stderr) - - def write_results_file(self, path, lines, lnotab, lines_hit, encoding=None): - """Return a coverage results file in path.""" - # ``lnotab`` is a dict of executable lines, or a line number "table" - - try: - outfile = open(path, "w", encoding=encoding) - except OSError as err: - print(("trace: Could not open %r for writing: %s " - "- skipping" % (path, err)), file=sys.stderr) - return 0, 0 - - n_lines = 0 - n_hits = 0 - with outfile: - for lineno, line in enumerate(lines, 1): - # do the blank/comment match to try to mark more lines - # (help the reader find stuff that hasn't been covered) - if lineno in lines_hit: - outfile.write("%5d: " % lines_hit[lineno]) - n_hits += 1 - n_lines += 1 - elif lineno in lnotab and not PRAGMA_NOCOVER in line: - # Highlight never-executed lines, unless the line contains - # #pragma: NO COVER - outfile.write(">>>>>> ") - n_lines += 1 - else: - outfile.write(" ") - outfile.write(line.expandtabs(8)) - - return n_hits, n_lines - -def _find_lines_from_code(code, strs): - """Return dict where keys are lines in the line number table.""" - linenos = {} - - for _, lineno in dis.findlinestarts(code): - if lineno not in strs: - linenos[lineno] = 1 - - return linenos - -def _find_lines(code, strs): - """Return lineno dict for all code objects reachable from code.""" - # get all of the lineno information from the code of this scope level - linenos = _find_lines_from_code(code, strs) - - # and check the constants for references to other code objects - for c in code.co_consts: - if inspect.iscode(c): - # find another code object, so recurse into it - linenos.update(_find_lines(c, strs)) - return linenos - -def _find_strings(filename, encoding=None): - """Return a dict of possible docstring positions. - - The dict maps line numbers to strings. There is an entry for - line that contains only a string or a part of a triple-quoted - string. - """ - d = {} - # If the first token is a string, then it's the module docstring. - # Add this special case so that the test in the loop passes. - prev_ttype = token.INDENT - with open(filename, encoding=encoding) as f: - tok = tokenize.generate_tokens(f.readline) - for ttype, tstr, start, end, line in tok: - if ttype == token.STRING: - if prev_ttype == token.INDENT: - sline, scol = start - eline, ecol = end - for i in range(sline, eline + 1): - d[i] = 1 - prev_ttype = ttype - return d - -def _find_executable_linenos(filename): - """Return dict where keys are line numbers in the line number table.""" - try: - with tokenize.open(filename) as f: - prog = f.read() - encoding = f.encoding - except OSError as err: - print(("Not printing coverage data for %r: %s" - % (filename, err)), file=sys.stderr) - return {} - code = compile(prog, filename, "exec") - strs = _find_strings(filename, encoding) - return _find_lines(code, strs) - -class Trace: - def __init__(self, count=1, trace=1, countfuncs=0, countcallers=0, - ignoremods=(), ignoredirs=(), infile=None, outfile=None, - timing=False): - """ - @param count true iff it should count number of times each - line is executed - @param trace true iff it should print out each line that is - being counted - @param countfuncs true iff it should just output a list of - (filename, modulename, funcname,) for functions - that were called at least once; This overrides - 'count' and 'trace' - @param ignoremods a list of the names of modules to ignore - @param ignoredirs a list of the names of directories to ignore - all of the (recursive) contents of - @param infile file from which to read stored counts to be - added into the results - @param outfile file in which to write the results - @param timing true iff timing information be displayed - """ - self.infile = infile - self.outfile = outfile - self.ignore = _Ignore(ignoremods, ignoredirs) - self.counts = {} # keys are (filename, linenumber) - self.pathtobasename = {} # for memoizing os.path.basename - self.donothing = 0 - self.trace = trace - self._calledfuncs = {} - self._callers = {} - self._caller_cache = {} - self.start_time = None - if timing: - self.start_time = _time() - if countcallers: - self.globaltrace = self.globaltrace_trackcallers - elif countfuncs: - self.globaltrace = self.globaltrace_countfuncs - elif trace and count: - self.globaltrace = self.globaltrace_lt - self.localtrace = self.localtrace_trace_and_count - elif trace: - self.globaltrace = self.globaltrace_lt - self.localtrace = self.localtrace_trace - elif count: - self.globaltrace = self.globaltrace_lt - self.localtrace = self.localtrace_count - else: - # Ahem -- do nothing? Okay. - self.donothing = 1 - - def run(self, cmd): - import __main__ - dict = __main__.__dict__ - self.runctx(cmd, dict, dict) - - def runctx(self, cmd, globals=None, locals=None): - if globals is None: globals = {} - if locals is None: locals = {} - if not self.donothing: - threading.settrace(self.globaltrace) - sys.settrace(self.globaltrace) - try: - exec(cmd, globals, locals) - finally: - if not self.donothing: - sys.settrace(None) - threading.settrace(None) - - def runfunc(self, func, /, *args, **kw): - result = None - if not self.donothing: - sys.settrace(self.globaltrace) - try: - result = func(*args, **kw) - finally: - if not self.donothing: - sys.settrace(None) - return result - - def file_module_function_of(self, frame): - code = frame.f_code - filename = code.co_filename - if filename: - modulename = _modname(filename) - else: - modulename = None - - funcname = code.co_name - clsname = None - if code in self._caller_cache: - if self._caller_cache[code] is not None: - clsname = self._caller_cache[code] - else: - self._caller_cache[code] = None - ## use of gc.get_referrers() was suggested by Michael Hudson - # all functions which refer to this code object - funcs = [f for f in gc.get_referrers(code) - if inspect.isfunction(f)] - # require len(func) == 1 to avoid ambiguity caused by calls to - # new.function(): "In the face of ambiguity, refuse the - # temptation to guess." - if len(funcs) == 1: - dicts = [d for d in gc.get_referrers(funcs[0]) - if isinstance(d, dict)] - if len(dicts) == 1: - classes = [c for c in gc.get_referrers(dicts[0]) - if hasattr(c, "__bases__")] - if len(classes) == 1: - # ditto for new.classobj() - clsname = classes[0].__name__ - # cache the result - assumption is that new.* is - # not called later to disturb this relationship - # _caller_cache could be flushed if functions in - # the new module get called. - self._caller_cache[code] = clsname - if clsname is not None: - funcname = "%s.%s" % (clsname, funcname) - - return filename, modulename, funcname - - def globaltrace_trackcallers(self, frame, why, arg): - """Handler for call events. - - Adds information about who called who to the self._callers dict. - """ - if why == 'call': - # XXX Should do a better job of identifying methods - this_func = self.file_module_function_of(frame) - parent_func = self.file_module_function_of(frame.f_back) - self._callers[(parent_func, this_func)] = 1 - - def globaltrace_countfuncs(self, frame, why, arg): - """Handler for call events. - - Adds (filename, modulename, funcname) to the self._calledfuncs dict. - """ - if why == 'call': - this_func = self.file_module_function_of(frame) - self._calledfuncs[this_func] = 1 - - def globaltrace_lt(self, frame, why, arg): - """Handler for call events. - - If the code block being entered is to be ignored, returns 'None', - else returns self.localtrace. - """ - if why == 'call': - code = frame.f_code - filename = frame.f_globals.get('__file__', None) - if filename: - # XXX _modname() doesn't work right for packages, so - # the ignore support won't work right for packages - modulename = _modname(filename) - if modulename is not None: - ignore_it = self.ignore.names(filename, modulename) - if not ignore_it: - if self.trace: - print((" --- modulename: %s, funcname: %s" - % (modulename, code.co_name))) - return self.localtrace - else: - return None - - def localtrace_trace_and_count(self, frame, why, arg): - if why == "line": - # record the file name and line number of every trace - filename = frame.f_code.co_filename - lineno = frame.f_lineno - key = filename, lineno - self.counts[key] = self.counts.get(key, 0) + 1 - - if self.start_time: - print('%.2f' % (_time() - self.start_time), end=' ') - bname = os.path.basename(filename) - line = linecache.getline(filename, lineno) - print("%s(%d)" % (bname, lineno), end='') - if line: - print(": ", line, end='') - else: - print() - return self.localtrace - - def localtrace_trace(self, frame, why, arg): - if why == "line": - # record the file name and line number of every trace - filename = frame.f_code.co_filename - lineno = frame.f_lineno - - if self.start_time: - print('%.2f' % (_time() - self.start_time), end=' ') - bname = os.path.basename(filename) - line = linecache.getline(filename, lineno) - print("%s(%d)" % (bname, lineno), end='') - if line: - print(": ", line, end='') - else: - print() - return self.localtrace - - def localtrace_count(self, frame, why, arg): - if why == "line": - filename = frame.f_code.co_filename - lineno = frame.f_lineno - key = filename, lineno - self.counts[key] = self.counts.get(key, 0) + 1 - return self.localtrace - - def results(self): - return CoverageResults(self.counts, infile=self.infile, - outfile=self.outfile, - calledfuncs=self._calledfuncs, - callers=self._callers) - -def main(): - import argparse - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('--version', action='version', version='trace 2.0') - - grp = parser.add_argument_group('Main options', - 'One of these (or --report) must be given') - - grp.add_argument('-c', '--count', action='store_true', - help='Count the number of times each line is executed and write ' - 'the counts to <module>.cover for each module executed, in ' - 'the module\'s directory. See also --coverdir, --file, ' - '--no-report below.') - grp.add_argument('-t', '--trace', action='store_true', - help='Print each line to sys.stdout before it is executed') - grp.add_argument('-l', '--listfuncs', action='store_true', - help='Keep track of which functions are executed at least once ' - 'and write the results to sys.stdout after the program exits. ' - 'Cannot be specified alongside --trace or --count.') - grp.add_argument('-T', '--trackcalls', action='store_true', - help='Keep track of caller/called pairs and write the results to ' - 'sys.stdout after the program exits.') - - grp = parser.add_argument_group('Modifiers') - - _grp = grp.add_mutually_exclusive_group() - _grp.add_argument('-r', '--report', action='store_true', - help='Generate a report from a counts file; does not execute any ' - 'code. --file must specify the results file to read, which ' - 'must have been created in a previous run with --count ' - '--file=FILE') - _grp.add_argument('-R', '--no-report', action='store_true', - help='Do not generate the coverage report files. ' - 'Useful if you want to accumulate over several runs.') - - grp.add_argument('-f', '--file', - help='File to accumulate counts over several runs') - grp.add_argument('-C', '--coverdir', - help='Directory where the report files go. The coverage report ' - 'for <package>.<module> will be written to file ' - '<dir>/<package>/<module>.cover') - grp.add_argument('-m', '--missing', action='store_true', - help='Annotate executable lines that were not executed with ' - '">>>>>> "') - grp.add_argument('-s', '--summary', action='store_true', - help='Write a brief summary for each file to sys.stdout. ' - 'Can only be used with --count or --report') - grp.add_argument('-g', '--timing', action='store_true', - help='Prefix each line with the time since the program started. ' - 'Only used while tracing') - - grp = parser.add_argument_group('Filters', - 'Can be specified multiple times') - grp.add_argument('--ignore-module', action='append', default=[], - help='Ignore the given module(s) and its submodules ' - '(if it is a package). Accepts comma separated list of ' - 'module names.') - grp.add_argument('--ignore-dir', action='append', default=[], - help='Ignore files in the given directory ' - '(multiple directories can be joined by os.pathsep).') - - parser.add_argument('--module', action='store_true', default=False, - help='Trace a module. ') - parser.add_argument('progname', nargs='?', - help='file to run as main program') - parser.add_argument('arguments', nargs=argparse.REMAINDER, - help='arguments to the program') - - opts = parser.parse_args() - - if opts.ignore_dir: - _prefix = sysconfig.get_path("stdlib") - _exec_prefix = sysconfig.get_path("platstdlib") - - def parse_ignore_dir(s): - s = os.path.expanduser(os.path.expandvars(s)) - s = s.replace('$prefix', _prefix).replace('$exec_prefix', _exec_prefix) - return os.path.normpath(s) - - opts.ignore_module = [mod.strip() - for i in opts.ignore_module for mod in i.split(',')] - opts.ignore_dir = [parse_ignore_dir(s) - for i in opts.ignore_dir for s in i.split(os.pathsep)] - - if opts.report: - if not opts.file: - parser.error('-r/--report requires -f/--file') - results = CoverageResults(infile=opts.file, outfile=opts.file) - return results.write_results(opts.missing, opts.summary, opts.coverdir) - - if not any([opts.trace, opts.count, opts.listfuncs, opts.trackcalls]): - parser.error('must specify one of --trace, --count, --report, ' - '--listfuncs, or --trackcalls') - - if opts.listfuncs and (opts.count or opts.trace): - parser.error('cannot specify both --listfuncs and (--trace or --count)') - - if opts.summary and not opts.count: - parser.error('--summary can only be used with --count or --report') - - if opts.progname is None: - parser.error('progname is missing: required with the main options') - - t = Trace(opts.count, opts.trace, countfuncs=opts.listfuncs, - countcallers=opts.trackcalls, ignoremods=opts.ignore_module, - ignoredirs=opts.ignore_dir, infile=opts.file, - outfile=opts.file, timing=opts.timing) - try: - if opts.module: - import runpy - module_name = opts.progname - mod_name, mod_spec, code = runpy._get_module_details(module_name) - sys.argv = [code.co_filename, *opts.arguments] - globs = { - '__name__': '__main__', - '__file__': code.co_filename, - '__package__': mod_spec.parent, - '__loader__': mod_spec.loader, - '__spec__': mod_spec, - '__cached__': None, - } - else: - sys.argv = [opts.progname, *opts.arguments] - sys.path[0] = os.path.dirname(opts.progname) - - with io.open_code(opts.progname) as fp: - code = compile(fp.read(), opts.progname, 'exec') - # try to emulate __main__ namespace as much as possible - globs = { - '__file__': opts.progname, - '__name__': '__main__', - '__package__': None, - '__cached__': None, - } - t.runctx(code, globs, globs) - except OSError as err: - sys.exit("Cannot run file %r because: %s" % (sys.argv[0], err)) - except SystemExit: - pass - - results = t.results() - - if not opts.no_report: - results.write_results(opts.missing, opts.summary, opts.coverdir) - -if __name__=='__main__': - main() diff --git a/Python314_4_x86_Template/Lib/traceback.py b/Python314_4_x86_Template/Lib/traceback.py deleted file mode 100644 index 79f67b987..000000000 --- a/Python314_4_x86_Template/Lib/traceback.py +++ /dev/null @@ -1,1745 +0,0 @@ -"""Extract, format and print information about Python stack traces.""" - -import collections.abc -import itertools -import linecache -import sys -import textwrap -import warnings -import codeop -import keyword -import tokenize -import io -import _colorize - -from contextlib import suppress - -__all__ = ['extract_stack', 'extract_tb', 'format_exception', - 'format_exception_only', 'format_list', 'format_stack', - 'format_tb', 'print_exc', 'format_exc', 'print_exception', - 'print_last', 'print_stack', 'print_tb', 'clear_frames', - 'FrameSummary', 'StackSummary', 'TracebackException', - 'walk_stack', 'walk_tb', 'print_list'] - -# -# Formatting and printing lists of traceback lines. -# - - -def print_list(extracted_list, file=None): - """Print the list of tuples as returned by extract_tb() or - extract_stack() as a formatted stack trace to the given file.""" - if file is None: - file = sys.stderr - for item in StackSummary.from_list(extracted_list).format(): - print(item, file=file, end="") - -def format_list(extracted_list): - """Format a list of tuples or FrameSummary objects for printing. - - Given a list of tuples or FrameSummary objects as returned by - extract_tb() or extract_stack(), return a list of strings ready - for printing. - - Each string in the resulting list corresponds to the item with the - same index in the argument list. Each string ends in a newline; - the strings may contain internal newlines as well, for those items - whose source text line is not None. - """ - return StackSummary.from_list(extracted_list).format() - -# -# Printing and Extracting Tracebacks. -# - -def print_tb(tb, limit=None, file=None): - """Print up to 'limit' stack trace entries from the traceback 'tb'. - - If 'limit' is omitted or None, all entries are printed. If 'file' - is omitted or None, the output goes to sys.stderr; otherwise - 'file' should be an open file or file-like object with a write() - method. - """ - print_list(extract_tb(tb, limit=limit), file=file) - -def format_tb(tb, limit=None): - """A shorthand for 'format_list(extract_tb(tb, limit))'.""" - return extract_tb(tb, limit=limit).format() - -def extract_tb(tb, limit=None): - """ - Return a StackSummary object representing a list of - pre-processed entries from traceback. - - This is useful for alternate formatting of stack traces. If - 'limit' is omitted or None, all entries are extracted. A - pre-processed stack trace entry is a FrameSummary object - containing attributes filename, lineno, name, and line - representing the information that is usually printed for a stack - trace. The line is a string with leading and trailing - whitespace stripped; if the source is not available it is None. - """ - return StackSummary._extract_from_extended_frame_gen( - _walk_tb_with_full_positions(tb), limit=limit) - -# -# Exception formatting and output. -# - -_cause_message = ( - "\nThe above exception was the direct cause " - "of the following exception:\n\n") - -_context_message = ( - "\nDuring handling of the above exception, " - "another exception occurred:\n\n") - - -class _Sentinel: - def __repr__(self): - return "<implicit>" - -_sentinel = _Sentinel() - -def _parse_value_tb(exc, value, tb): - if (value is _sentinel) != (tb is _sentinel): - raise ValueError("Both or neither of value and tb must be given") - if value is tb is _sentinel: - if exc is not None: - if isinstance(exc, BaseException): - return exc, exc.__traceback__ - - raise TypeError(f'Exception expected for value, ' - f'{type(exc).__name__} found') - else: - return None, None - return value, tb - - -def print_exception(exc, /, value=_sentinel, tb=_sentinel, limit=None, \ - file=None, chain=True, **kwargs): - """Print exception up to 'limit' stack trace entries from 'tb' to 'file'. - - This differs from print_tb() in the following ways: (1) if - traceback is not None, it prints a header "Traceback (most recent - call last):"; (2) it prints the exception type and value after the - stack trace; (3) if type is SyntaxError and value has the - appropriate format, it prints the line where the syntax error - occurred with a caret on the next line indicating the approximate - position of the error. - """ - colorize = kwargs.get("colorize", False) - value, tb = _parse_value_tb(exc, value, tb) - te = TracebackException(type(value), value, tb, limit=limit, compact=True) - te.print(file=file, chain=chain, colorize=colorize) - - -BUILTIN_EXCEPTION_LIMIT = object() - - -def _print_exception_bltin(exc, /): - file = sys.stderr if sys.stderr is not None else sys.__stderr__ - colorize = _colorize.can_colorize(file=file) - return print_exception(exc, limit=BUILTIN_EXCEPTION_LIMIT, file=file, colorize=colorize) - - -def format_exception(exc, /, value=_sentinel, tb=_sentinel, limit=None, \ - chain=True, **kwargs): - """Format a stack trace and the exception information. - - The arguments have the same meaning as the corresponding arguments - to print_exception(). The return value is a list of strings, each - ending in a newline and some containing internal newlines. When - these lines are concatenated and printed, exactly the same text is - printed as does print_exception(). - """ - colorize = kwargs.get("colorize", False) - value, tb = _parse_value_tb(exc, value, tb) - te = TracebackException(type(value), value, tb, limit=limit, compact=True) - return list(te.format(chain=chain, colorize=colorize)) - - -def format_exception_only(exc, /, value=_sentinel, *, show_group=False, **kwargs): - """Format the exception part of a traceback. - - The return value is a list of strings, each ending in a newline. - - The list contains the exception's message, which is - normally a single string; however, for :exc:`SyntaxError` exceptions, it - contains several lines that (when printed) display detailed information - about where the syntax error occurred. Following the message, the list - contains the exception's ``__notes__``. - - When *show_group* is ``True``, and the exception is an instance of - :exc:`BaseExceptionGroup`, the nested exceptions are included as - well, recursively, with indentation relative to their nesting depth. - """ - colorize = kwargs.get("colorize", False) - if value is _sentinel: - value = exc - te = TracebackException(type(value), value, None, compact=True) - return list(te.format_exception_only(show_group=show_group, colorize=colorize)) - - -# -- not official API but folk probably use these two functions. - -def _format_final_exc_line(etype, value, *, insert_final_newline=True, colorize=False): - valuestr = _safe_string(value, 'exception') - end_char = "\n" if insert_final_newline else "" - if colorize: - theme = _colorize.get_theme(force_color=True).traceback - else: - theme = _colorize.get_theme(force_no_color=True).traceback - if value is None or not valuestr: - line = f"{theme.type}{etype}{theme.reset}{end_char}" - else: - line = f"{theme.type}{etype}{theme.reset}: {theme.message}{valuestr}{theme.reset}{end_char}" - return line - - -def _safe_string(value, what, func=str): - try: - return func(value) - except: - return f'<{what} {func.__name__}() failed>' - -# -- - -def print_exc(limit=None, file=None, chain=True): - """Shorthand for 'print_exception(sys.exception(), limit=limit, file=file, chain=chain)'.""" - print_exception(sys.exception(), limit=limit, file=file, chain=chain) - -def format_exc(limit=None, chain=True): - """Like print_exc() but return a string.""" - return "".join(format_exception(sys.exception(), limit=limit, chain=chain)) - -def print_last(limit=None, file=None, chain=True): - """This is a shorthand for 'print_exception(sys.last_exc, limit=limit, file=file, chain=chain)'.""" - if not hasattr(sys, "last_exc") and not hasattr(sys, "last_type"): - raise ValueError("no last exception") - - if hasattr(sys, "last_exc"): - print_exception(sys.last_exc, limit=limit, file=file, chain=chain) - else: - print_exception(sys.last_type, sys.last_value, sys.last_traceback, - limit=limit, file=file, chain=chain) - - -# -# Printing and Extracting Stacks. -# - -def print_stack(f=None, limit=None, file=None): - """Print a stack trace from its invocation point. - - The optional 'f' argument can be used to specify an alternate - stack frame at which to start. The optional 'limit' and 'file' - arguments have the same meaning as for print_exception(). - """ - if f is None: - f = sys._getframe().f_back - print_list(extract_stack(f, limit=limit), file=file) - - -def format_stack(f=None, limit=None): - """Shorthand for 'format_list(extract_stack(f, limit))'.""" - if f is None: - f = sys._getframe().f_back - return format_list(extract_stack(f, limit=limit)) - - -def extract_stack(f=None, limit=None): - """Extract the raw traceback from the current stack frame. - - The return value has the same format as for extract_tb(). The - optional 'f' and 'limit' arguments have the same meaning as for - print_stack(). Each item in the list is a quadruple (filename, - line number, function name, text), and the entries are in order - from oldest to newest stack frame. - """ - if f is None: - f = sys._getframe().f_back - stack = StackSummary.extract(walk_stack(f), limit=limit) - stack.reverse() - return stack - - -def clear_frames(tb): - "Clear all references to local variables in the frames of a traceback." - while tb is not None: - try: - tb.tb_frame.clear() - except RuntimeError: - # Ignore the exception raised if the frame is still executing. - pass - tb = tb.tb_next - - -class FrameSummary: - """Information about a single frame from a traceback. - - - :attr:`filename` The filename for the frame. - - :attr:`lineno` The line within filename for the frame that was - active when the frame was captured. - - :attr:`name` The name of the function or method that was executing - when the frame was captured. - - :attr:`line` The text from the linecache module for the - of code that was running when the frame was captured. - - :attr:`locals` Either None if locals were not supplied, or a dict - mapping the name to the repr() of the variable. - """ - - __slots__ = ('filename', 'lineno', 'end_lineno', 'colno', 'end_colno', - 'name', '_lines', '_lines_dedented', 'locals', '_code') - - def __init__(self, filename, lineno, name, *, lookup_line=True, - locals=None, line=None, - end_lineno=None, colno=None, end_colno=None, **kwargs): - """Construct a FrameSummary. - - :param lookup_line: If True, `linecache` is consulted for the source - code line. Otherwise, the line will be looked up when first needed. - :param locals: If supplied the frame locals, which will be captured as - object representations. - :param line: If provided, use this instead of looking up the line in - the linecache. - """ - self.filename = filename - self.lineno = lineno - self.end_lineno = lineno if end_lineno is None else end_lineno - self.colno = colno - self.end_colno = end_colno - self.name = name - self._code = kwargs.get("_code") - self._lines = line - self._lines_dedented = None - if lookup_line: - self.line - self.locals = {k: _safe_string(v, 'local', func=repr) - for k, v in locals.items()} if locals else None - - def __eq__(self, other): - if isinstance(other, FrameSummary): - return (self.filename == other.filename and - self.lineno == other.lineno and - self.name == other.name and - self.locals == other.locals) - if isinstance(other, tuple): - return (self.filename, self.lineno, self.name, self.line) == other - return NotImplemented - - def __getitem__(self, pos): - return (self.filename, self.lineno, self.name, self.line)[pos] - - def __iter__(self): - return iter([self.filename, self.lineno, self.name, self.line]) - - def __repr__(self): - return "<FrameSummary file {filename}, line {lineno} in {name}>".format( - filename=self.filename, lineno=self.lineno, name=self.name) - - def __len__(self): - return 4 - - def _set_lines(self): - if ( - self._lines is None - and self.lineno is not None - and self.end_lineno is not None - ): - lines = [] - for lineno in range(self.lineno, self.end_lineno + 1): - # treat errors (empty string) and empty lines (newline) as the same - line = linecache.getline(self.filename, lineno).rstrip() - if not line and self._code is not None and self.filename.startswith("<"): - line = linecache._getline_from_code(self._code, lineno).rstrip() - lines.append(line) - self._lines = "\n".join(lines) + "\n" - - @property - def _original_lines(self): - # Returns the line as-is from the source, without modifying whitespace. - self._set_lines() - return self._lines - - @property - def _dedented_lines(self): - # Returns _original_lines, but dedented - self._set_lines() - if self._lines_dedented is None and self._lines is not None: - self._lines_dedented = textwrap.dedent(self._lines) - return self._lines_dedented - - @property - def line(self): - self._set_lines() - if self._lines is None: - return None - # return only the first line, stripped - return self._lines.partition("\n")[0].strip() - - -def walk_stack(f): - """Walk a stack yielding the frame and line number for each frame. - - This will follow f.f_back from the given frame. If no frame is given, the - current stack is used. Usually used with StackSummary.extract. - """ - if f is None: - f = sys._getframe().f_back - - def walk_stack_generator(frame): - while frame is not None: - yield frame, frame.f_lineno - frame = frame.f_back - - return walk_stack_generator(f) - - -def walk_tb(tb): - """Walk a traceback yielding the frame and line number for each frame. - - This will follow tb.tb_next (and thus is in the opposite order to - walk_stack). Usually used with StackSummary.extract. - """ - while tb is not None: - yield tb.tb_frame, tb.tb_lineno - tb = tb.tb_next - - -def _walk_tb_with_full_positions(tb): - # Internal version of walk_tb that yields full code positions including - # end line and column information. - while tb is not None: - positions = _get_code_position(tb.tb_frame.f_code, tb.tb_lasti) - # Yield tb_lineno when co_positions does not have a line number to - # maintain behavior with walk_tb. - if positions[0] is None: - yield tb.tb_frame, (tb.tb_lineno, ) + positions[1:] - else: - yield tb.tb_frame, positions - tb = tb.tb_next - - -def _get_code_position(code, instruction_index): - if instruction_index < 0: - return (None, None, None, None) - positions_gen = code.co_positions() - return next(itertools.islice(positions_gen, instruction_index // 2, None)) - - -_RECURSIVE_CUTOFF = 3 # Also hardcoded in traceback.c. - - -class StackSummary(list): - """A list of FrameSummary objects, representing a stack of frames.""" - - @classmethod - def extract(klass, frame_gen, *, limit=None, lookup_lines=True, - capture_locals=False): - """Create a StackSummary from a traceback or stack object. - - :param frame_gen: A generator that yields (frame, lineno) tuples - whose summaries are to be included in the stack. - :param limit: None to include all frames or the number of frames to - include. - :param lookup_lines: If True, lookup lines for each frame immediately, - otherwise lookup is deferred until the frame is rendered. - :param capture_locals: If True, the local variables from each frame will - be captured as object representations into the FrameSummary. - """ - def extended_frame_gen(): - for f, lineno in frame_gen: - yield f, (lineno, None, None, None) - - return klass._extract_from_extended_frame_gen( - extended_frame_gen(), limit=limit, lookup_lines=lookup_lines, - capture_locals=capture_locals) - - @classmethod - def _extract_from_extended_frame_gen(klass, frame_gen, *, limit=None, - lookup_lines=True, capture_locals=False): - # Same as extract but operates on a frame generator that yields - # (frame, (lineno, end_lineno, colno, end_colno)) in the stack. - # Only lineno is required, the remaining fields can be None if the - # information is not available. - builtin_limit = limit is BUILTIN_EXCEPTION_LIMIT - if limit is None or builtin_limit: - limit = getattr(sys, 'tracebacklimit', None) - if limit is not None and limit < 0: - limit = 0 - if limit is not None: - if builtin_limit: - frame_gen = tuple(frame_gen) - frame_gen = frame_gen[len(frame_gen) - limit:] - elif limit >= 0: - frame_gen = itertools.islice(frame_gen, limit) - else: - frame_gen = collections.deque(frame_gen, maxlen=-limit) - - result = klass() - fnames = set() - for f, (lineno, end_lineno, colno, end_colno) in frame_gen: - co = f.f_code - filename = co.co_filename - name = co.co_name - fnames.add(filename) - linecache.lazycache(filename, f.f_globals) - # Must defer line lookups until we have called checkcache. - if capture_locals: - f_locals = f.f_locals - else: - f_locals = None - result.append( - FrameSummary(filename, lineno, name, - lookup_line=False, locals=f_locals, - end_lineno=end_lineno, colno=colno, end_colno=end_colno, - _code=f.f_code, - ) - ) - for filename in fnames: - linecache.checkcache(filename) - - # If immediate lookup was desired, trigger lookups now. - if lookup_lines: - for f in result: - f.line - return result - - @classmethod - def from_list(klass, a_list): - """ - Create a StackSummary object from a supplied list of - FrameSummary objects or old-style list of tuples. - """ - # While doing a fast-path check for isinstance(a_list, StackSummary) is - # appealing, idlelib.run.cleanup_traceback and other similar code may - # break this by making arbitrary frames plain tuples, so we need to - # check on a frame by frame basis. - result = StackSummary() - for frame in a_list: - if isinstance(frame, FrameSummary): - result.append(frame) - else: - filename, lineno, name, line = frame - result.append(FrameSummary(filename, lineno, name, line=line)) - return result - - def format_frame_summary(self, frame_summary, **kwargs): - """Format the lines for a single FrameSummary. - - Returns a string representing one frame involved in the stack. This - gets called for every frame to be printed in the stack summary. - """ - colorize = kwargs.get("colorize", False) - row = [] - filename = frame_summary.filename - if frame_summary.filename.startswith("<stdin-") and frame_summary.filename.endswith('>'): - filename = "<stdin>" - if colorize: - theme = _colorize.get_theme(force_color=True).traceback - else: - theme = _colorize.get_theme(force_no_color=True).traceback - row.append( - ' File {}"{}"{}, line {}{}{}, in {}{}{}\n'.format( - theme.filename, - filename, - theme.reset, - theme.line_no, - frame_summary.lineno, - theme.reset, - theme.frame, - frame_summary.name, - theme.reset, - ) - ) - if frame_summary._dedented_lines and frame_summary._dedented_lines.strip(): - if ( - frame_summary.colno is None or - frame_summary.end_colno is None - ): - # only output first line if column information is missing - row.append(textwrap.indent(frame_summary.line, ' ') + "\n") - else: - # get first and last line - all_lines_original = frame_summary._original_lines.splitlines() - first_line = all_lines_original[0] - # assume all_lines_original has enough lines (since we constructed it) - last_line = all_lines_original[frame_summary.end_lineno - frame_summary.lineno] - - # character index of the start/end of the instruction - start_offset = _byte_offset_to_character_offset(first_line, frame_summary.colno) - end_offset = _byte_offset_to_character_offset(last_line, frame_summary.end_colno) - - all_lines = frame_summary._dedented_lines.splitlines()[ - :frame_summary.end_lineno - frame_summary.lineno + 1 - ] - - # adjust start/end offset based on dedent - dedent_characters = len(first_line) - len(all_lines[0]) - start_offset = max(0, start_offset - dedent_characters) - end_offset = max(0, end_offset - dedent_characters) - - # When showing this on a terminal, some of the non-ASCII characters - # might be rendered as double-width characters, so we need to take - # that into account when calculating the length of the line. - dp_start_offset = _display_width(all_lines[0], offset=start_offset) - dp_end_offset = _display_width(all_lines[-1], offset=end_offset) - - # get exact code segment corresponding to the instruction - segment = "\n".join(all_lines) - segment = segment[start_offset:len(segment) - (len(all_lines[-1]) - end_offset)] - - # attempt to parse for anchors - anchors = None - show_carets = False - with suppress(Exception): - anchors = _extract_caret_anchors_from_line_segment(segment) - show_carets = self._should_show_carets(start_offset, end_offset, all_lines, anchors) - - result = [] - - # only display first line, last line, and lines around anchor start/end - significant_lines = {0, len(all_lines) - 1} - - anchors_left_end_offset = 0 - anchors_right_start_offset = 0 - primary_char = "^" - secondary_char = "^" - if anchors: - anchors_left_end_offset = anchors.left_end_offset - anchors_right_start_offset = anchors.right_start_offset - # computed anchor positions do not take start_offset into account, - # so account for it here - if anchors.left_end_lineno == 0: - anchors_left_end_offset += start_offset - if anchors.right_start_lineno == 0: - anchors_right_start_offset += start_offset - - # account for display width - anchors_left_end_offset = _display_width( - all_lines[anchors.left_end_lineno], offset=anchors_left_end_offset - ) - anchors_right_start_offset = _display_width( - all_lines[anchors.right_start_lineno], offset=anchors_right_start_offset - ) - - primary_char = anchors.primary_char - secondary_char = anchors.secondary_char - significant_lines.update( - range(anchors.left_end_lineno - 1, anchors.left_end_lineno + 2) - ) - significant_lines.update( - range(anchors.right_start_lineno - 1, anchors.right_start_lineno + 2) - ) - - # remove bad line numbers - significant_lines.discard(-1) - significant_lines.discard(len(all_lines)) - - def output_line(lineno): - """output all_lines[lineno] along with carets""" - result.append(all_lines[lineno] + "\n") - if not show_carets: - return - num_spaces = len(all_lines[lineno]) - len(all_lines[lineno].lstrip()) - carets = [] - num_carets = dp_end_offset if lineno == len(all_lines) - 1 else _display_width(all_lines[lineno]) - # compute caret character for each position - for col in range(num_carets): - if col < num_spaces or (lineno == 0 and col < dp_start_offset): - # before first non-ws char of the line, or before start of instruction - carets.append(' ') - elif anchors and ( - lineno > anchors.left_end_lineno or - (lineno == anchors.left_end_lineno and col >= anchors_left_end_offset) - ) and ( - lineno < anchors.right_start_lineno or - (lineno == anchors.right_start_lineno and col < anchors_right_start_offset) - ): - # within anchors - carets.append(secondary_char) - else: - carets.append(primary_char) - if colorize: - # Replace the previous line with a red version of it only in the parts covered - # by the carets. - line = result[-1] - colorized_line_parts = [] - colorized_carets_parts = [] - - for color, group in itertools.groupby(itertools.zip_longest(line, carets, fillvalue=""), key=lambda x: x[1]): - caret_group = list(group) - if color == "^": - colorized_line_parts.append(theme.error_highlight + "".join(char for char, _ in caret_group) + theme.reset) - colorized_carets_parts.append(theme.error_highlight + "".join(caret for _, caret in caret_group) + theme.reset) - elif color == "~": - colorized_line_parts.append(theme.error_range + "".join(char for char, _ in caret_group) + theme.reset) - colorized_carets_parts.append(theme.error_range + "".join(caret for _, caret in caret_group) + theme.reset) - else: - colorized_line_parts.append("".join(char for char, _ in caret_group)) - colorized_carets_parts.append("".join(caret for _, caret in caret_group)) - - colorized_line = "".join(colorized_line_parts) - colorized_carets = "".join(colorized_carets_parts) - result[-1] = colorized_line - result.append(colorized_carets + "\n") - else: - result.append("".join(carets) + "\n") - - # display significant lines - sig_lines_list = sorted(significant_lines) - for i, lineno in enumerate(sig_lines_list): - if i: - linediff = lineno - sig_lines_list[i - 1] - if linediff == 2: - # 1 line in between - just output it - output_line(lineno - 1) - elif linediff > 2: - # > 1 line in between - abbreviate - result.append(f"...<{linediff - 1} lines>...\n") - output_line(lineno) - - row.append( - textwrap.indent(textwrap.dedent("".join(result)), ' ', lambda line: True) - ) - if frame_summary.locals: - for name, value in sorted(frame_summary.locals.items()): - row.append(' {name} = {value}\n'.format(name=name, value=value)) - - return ''.join(row) - - def _should_show_carets(self, start_offset, end_offset, all_lines, anchors): - with suppress(SyntaxError, ImportError): - import ast - tree = ast.parse('\n'.join(all_lines)) - if not tree.body: - return False - statement = tree.body[0] - value = None - def _spawns_full_line(value): - return ( - value.lineno == 1 - and value.end_lineno == len(all_lines) - and value.col_offset == start_offset - and value.end_col_offset == end_offset - ) - match statement: - case ast.Return(value=ast.Call()): - if isinstance(statement.value.func, ast.Name): - value = statement.value - case ast.Assign(value=ast.Call()): - if ( - len(statement.targets) == 1 and - isinstance(statement.targets[0], ast.Name) - ): - value = statement.value - if value is not None and _spawns_full_line(value): - return False - if anchors: - return True - if all_lines[0][:start_offset].lstrip() or all_lines[-1][end_offset:].rstrip(): - return True - return False - - def format(self, **kwargs): - """Format the stack ready for printing. - - Returns a list of strings ready for printing. Each string in the - resulting list corresponds to a single frame from the stack. - Each string ends in a newline; the strings may contain internal - newlines as well, for those items with source text lines. - - For long sequences of the same frame and line, the first few - repetitions are shown, followed by a summary line stating the exact - number of further repetitions. - """ - colorize = kwargs.get("colorize", False) - result = [] - last_file = None - last_line = None - last_name = None - count = 0 - for frame_summary in self: - formatted_frame = self.format_frame_summary(frame_summary, colorize=colorize) - if formatted_frame is None: - continue - if (last_file is None or last_file != frame_summary.filename or - last_line is None or last_line != frame_summary.lineno or - last_name is None or last_name != frame_summary.name): - if count > _RECURSIVE_CUTOFF: - count -= _RECURSIVE_CUTOFF - result.append( - f' [Previous line repeated {count} more ' - f'time{"s" if count > 1 else ""}]\n' - ) - last_file = frame_summary.filename - last_line = frame_summary.lineno - last_name = frame_summary.name - count = 0 - count += 1 - if count > _RECURSIVE_CUTOFF: - continue - result.append(formatted_frame) - - if count > _RECURSIVE_CUTOFF: - count -= _RECURSIVE_CUTOFF - result.append( - f' [Previous line repeated {count} more ' - f'time{"s" if count > 1 else ""}]\n' - ) - return result - - -def _byte_offset_to_character_offset(str, offset): - as_utf8 = str.encode('utf-8') - return len(as_utf8[:offset].decode("utf-8", errors="replace")) - - -_Anchors = collections.namedtuple( - "_Anchors", - [ - "left_end_lineno", - "left_end_offset", - "right_start_lineno", - "right_start_offset", - "primary_char", - "secondary_char", - ], - defaults=["~", "^"] -) - -def _extract_caret_anchors_from_line_segment(segment): - """ - Given source code `segment` corresponding to a FrameSummary, determine: - - for binary ops, the location of the binary op - - for indexing and function calls, the location of the brackets. - `segment` is expected to be a valid Python expression. - """ - import ast - - try: - # Without parentheses, `segment` is parsed as a statement. - # Binary ops, subscripts, and calls are expressions, so - # we can wrap them with parentheses to parse them as - # (possibly multi-line) expressions. - # e.g. if we try to highlight the addition in - # x = ( - # a + - # b - # ) - # then we would ast.parse - # a + - # b - # which is not a valid statement because of the newline. - # Adding brackets makes it a valid expression. - # ( - # a + - # b - # ) - # Line locations will be different than the original, - # which is taken into account later on. - tree = ast.parse(f"(\n{segment}\n)") - except SyntaxError: - return None - - if len(tree.body) != 1: - return None - - lines = segment.splitlines() - - def normalize(lineno, offset): - """Get character index given byte offset""" - return _byte_offset_to_character_offset(lines[lineno], offset) - - def next_valid_char(lineno, col): - """Gets the next valid character index in `lines`, if - the current location is not valid. Handles empty lines. - """ - while lineno < len(lines) and col >= len(lines[lineno]): - col = 0 - lineno += 1 - assert lineno < len(lines) and col < len(lines[lineno]) - return lineno, col - - def increment(lineno, col): - """Get the next valid character index in `lines`.""" - col += 1 - lineno, col = next_valid_char(lineno, col) - return lineno, col - - def nextline(lineno, col): - """Get the next valid character at least on the next line""" - col = 0 - lineno += 1 - lineno, col = next_valid_char(lineno, col) - return lineno, col - - def increment_until(lineno, col, stop): - """Get the next valid non-"\\#" character that satisfies the `stop` predicate""" - while True: - ch = lines[lineno][col] - if ch in "\\#": - lineno, col = nextline(lineno, col) - elif not stop(ch): - lineno, col = increment(lineno, col) - else: - break - return lineno, col - - def setup_positions(expr, force_valid=True): - """Get the lineno/col position of the end of `expr`. If `force_valid` is True, - forces the position to be a valid character (e.g. if the position is beyond the - end of the line, move to the next line) - """ - # -2 since end_lineno is 1-indexed and because we added an extra - # bracket + newline to `segment` when calling ast.parse - lineno = expr.end_lineno - 2 - col = normalize(lineno, expr.end_col_offset) - return next_valid_char(lineno, col) if force_valid else (lineno, col) - - statement = tree.body[0] - match statement: - case ast.Expr(expr): - match expr: - case ast.BinOp(): - # ast gives these locations for BinOp subexpressions - # ( left_expr ) + ( right_expr ) - # left^^^^^ right^^^^^ - lineno, col = setup_positions(expr.left) - - # First operator character is the first non-space/')' character - lineno, col = increment_until(lineno, col, lambda x: not x.isspace() and x != ')') - - # binary op is 1 or 2 characters long, on the same line, - # before the right subexpression - right_col = col + 1 - if ( - right_col < len(lines[lineno]) - and ( - # operator char should not be in the right subexpression - expr.right.lineno - 2 > lineno or - right_col < normalize(expr.right.lineno - 2, expr.right.col_offset) - ) - and not (ch := lines[lineno][right_col]).isspace() - and ch not in "\\#" - ): - right_col += 1 - - # right_col can be invalid since it is exclusive - return _Anchors(lineno, col, lineno, right_col) - case ast.Subscript(): - # ast gives these locations for value and slice subexpressions - # ( value_expr ) [ slice_expr ] - # value^^^^^ slice^^^^^ - # subscript^^^^^^^^^^^^^^^^^^^^ - - # find left bracket - left_lineno, left_col = setup_positions(expr.value) - left_lineno, left_col = increment_until(left_lineno, left_col, lambda x: x == '[') - # find right bracket (final character of expression) - right_lineno, right_col = setup_positions(expr, force_valid=False) - return _Anchors(left_lineno, left_col, right_lineno, right_col) - case ast.Call(): - # ast gives these locations for function call expressions - # ( func_expr ) (args, kwargs) - # func^^^^^ - # call^^^^^^^^^^^^^^^^^^^^^^^^ - - # find left bracket - left_lineno, left_col = setup_positions(expr.func) - left_lineno, left_col = increment_until(left_lineno, left_col, lambda x: x == '(') - # find right bracket (final character of expression) - right_lineno, right_col = setup_positions(expr, force_valid=False) - return _Anchors(left_lineno, left_col, right_lineno, right_col) - - return None - -_WIDE_CHAR_SPECIFIERS = "WF" - -def _display_width(line, offset=None): - """Calculate the extra amount of width space the given source - code segment might take if it were to be displayed on a fixed - width output device. Supports wide unicode characters and emojis.""" - - if offset is None: - offset = len(line) - - # Fast track for ASCII-only strings - if line.isascii(): - return offset - - import unicodedata - - return sum( - 2 if unicodedata.east_asian_width(char) in _WIDE_CHAR_SPECIFIERS else 1 - for char in line[:offset] - ) - - - -class _ExceptionPrintContext: - def __init__(self): - self.seen = set() - self.exception_group_depth = 0 - self.need_close = False - - def indent(self): - return ' ' * (2 * self.exception_group_depth) - - def emit(self, text_gen, margin_char=None): - if margin_char is None: - margin_char = '|' - indent_str = self.indent() - if self.exception_group_depth: - indent_str += margin_char + ' ' - - if isinstance(text_gen, str): - yield textwrap.indent(text_gen, indent_str, lambda line: True) - else: - for text in text_gen: - yield textwrap.indent(text, indent_str, lambda line: True) - - -class TracebackException: - """An exception ready for rendering. - - The traceback module captures enough attributes from the original exception - to this intermediary form to ensure that no references are held, while - still being able to fully print or format it. - - max_group_width and max_group_depth control the formatting of exception - groups. The depth refers to the nesting level of the group, and the width - refers to the size of a single exception group's exceptions array. The - formatted output is truncated when either limit is exceeded. - - Use `from_exception` to create TracebackException instances from exception - objects, or the constructor to create TracebackException instances from - individual components. - - - :attr:`__cause__` A TracebackException of the original *__cause__*. - - :attr:`__context__` A TracebackException of the original *__context__*. - - :attr:`exceptions` For exception groups - a list of TracebackException - instances for the nested *exceptions*. ``None`` for other exceptions. - - :attr:`__suppress_context__` The *__suppress_context__* value from the - original exception. - - :attr:`stack` A `StackSummary` representing the traceback. - - :attr:`exc_type` (deprecated) The class of the original traceback. - - :attr:`exc_type_str` String display of exc_type - - :attr:`filename` For syntax errors - the filename where the error - occurred. - - :attr:`lineno` For syntax errors - the linenumber where the error - occurred. - - :attr:`end_lineno` For syntax errors - the end linenumber where the error - occurred. Can be `None` if not present. - - :attr:`text` For syntax errors - the text where the error - occurred. - - :attr:`offset` For syntax errors - the offset into the text where the - error occurred. - - :attr:`end_offset` For syntax errors - the end offset into the text where - the error occurred. Can be `None` if not present. - - :attr:`msg` For syntax errors - the compiler error message. - """ - - def __init__(self, exc_type, exc_value, exc_traceback, *, limit=None, - lookup_lines=True, capture_locals=False, compact=False, - max_group_width=15, max_group_depth=10, save_exc_type=True, _seen=None): - # NB: we need to accept exc_traceback, exc_value, exc_traceback to - # permit backwards compat with the existing API, otherwise we - # need stub thunk objects just to glue it together. - # Handle loops in __cause__ or __context__. - is_recursive_call = _seen is not None - if _seen is None: - _seen = set() - _seen.add(id(exc_value)) - - self.max_group_width = max_group_width - self.max_group_depth = max_group_depth - - self.stack = StackSummary._extract_from_extended_frame_gen( - _walk_tb_with_full_positions(exc_traceback), - limit=limit, lookup_lines=lookup_lines, - capture_locals=capture_locals) - - self._exc_type = exc_type if save_exc_type else None - - # Capture now to permit freeing resources: only complication is in the - # unofficial API _format_final_exc_line - self._str = _safe_string(exc_value, 'exception') - try: - self.__notes__ = getattr(exc_value, '__notes__', None) - except Exception as e: - self.__notes__ = [ - f'Ignored error getting __notes__: {_safe_string(e, '__notes__', repr)}'] - - self._is_syntax_error = False - self._have_exc_type = exc_type is not None - if exc_type is not None: - self.exc_type_qualname = exc_type.__qualname__ - self.exc_type_module = exc_type.__module__ - else: - self.exc_type_qualname = None - self.exc_type_module = None - - if exc_type and issubclass(exc_type, SyntaxError): - # Handle SyntaxError's specially - self.filename = exc_value.filename - lno = exc_value.lineno - self.lineno = str(lno) if lno is not None else None - end_lno = exc_value.end_lineno - self.end_lineno = str(end_lno) if end_lno is not None else None - self.text = exc_value.text - self.offset = exc_value.offset - self.end_offset = exc_value.end_offset - self.msg = exc_value.msg - self._is_syntax_error = True - self._exc_metadata = getattr(exc_value, "_metadata", None) - elif exc_type and issubclass(exc_type, ImportError) and \ - getattr(exc_value, "name_from", None) is not None: - wrong_name = getattr(exc_value, "name_from", None) - suggestion = _compute_suggestion_error(exc_value, exc_traceback, wrong_name) - if suggestion: - self._str += f". Did you mean: '{suggestion}'?" - elif exc_type and issubclass(exc_type, (NameError, AttributeError)) and \ - getattr(exc_value, "name", None) is not None: - wrong_name = getattr(exc_value, "name", None) - suggestion = _compute_suggestion_error(exc_value, exc_traceback, wrong_name) - if suggestion: - self._str += f". Did you mean: '{suggestion}'?" - if issubclass(exc_type, NameError): - wrong_name = getattr(exc_value, "name", None) - if wrong_name is not None and wrong_name in sys.stdlib_module_names: - if suggestion: - self._str += f" Or did you forget to import '{wrong_name}'?" - else: - self._str += f". Did you forget to import '{wrong_name}'?" - if lookup_lines: - self._load_lines() - self.__suppress_context__ = \ - exc_value.__suppress_context__ if exc_value is not None else False - - # Convert __cause__ and __context__ to `TracebackExceptions`s, use a - # queue to avoid recursion (only the top-level call gets _seen == None) - if not is_recursive_call: - queue = [(self, exc_value)] - while queue: - te, e = queue.pop() - if (e is not None and e.__cause__ is not None - and id(e.__cause__) not in _seen): - cause = TracebackException( - type(e.__cause__), - e.__cause__, - e.__cause__.__traceback__, - limit=limit, - lookup_lines=lookup_lines, - capture_locals=capture_locals, - max_group_width=max_group_width, - max_group_depth=max_group_depth, - _seen=_seen) - else: - cause = None - - if compact: - need_context = (cause is None and - e is not None and - not e.__suppress_context__) - else: - need_context = True - if (e is not None and e.__context__ is not None - and need_context and id(e.__context__) not in _seen): - context = TracebackException( - type(e.__context__), - e.__context__, - e.__context__.__traceback__, - limit=limit, - lookup_lines=lookup_lines, - capture_locals=capture_locals, - max_group_width=max_group_width, - max_group_depth=max_group_depth, - _seen=_seen) - else: - context = None - - if e is not None and isinstance(e, BaseExceptionGroup): - exceptions = [] - for exc in e.exceptions: - texc = TracebackException( - type(exc), - exc, - exc.__traceback__, - limit=limit, - lookup_lines=lookup_lines, - capture_locals=capture_locals, - max_group_width=max_group_width, - max_group_depth=max_group_depth, - _seen=_seen) - exceptions.append(texc) - else: - exceptions = None - - te.__cause__ = cause - te.__context__ = context - te.exceptions = exceptions - if cause: - queue.append((te.__cause__, e.__cause__)) - if context: - queue.append((te.__context__, e.__context__)) - if exceptions: - queue.extend(zip(te.exceptions, e.exceptions)) - - @classmethod - def from_exception(cls, exc, *args, **kwargs): - """Create a TracebackException from an exception.""" - return cls(type(exc), exc, exc.__traceback__, *args, **kwargs) - - @property - def exc_type(self): - warnings.warn('Deprecated in 3.13. Use exc_type_str instead.', - DeprecationWarning, stacklevel=2) - return self._exc_type - - @property - def exc_type_str(self): - if not self._have_exc_type: - return None - stype = self.exc_type_qualname - smod = self.exc_type_module - if smod not in ("__main__", "builtins"): - if not isinstance(smod, str): - smod = "<unknown>" - stype = smod + '.' + stype - return stype - - def _load_lines(self): - """Private API. force all lines in the stack to be loaded.""" - for frame in self.stack: - frame.line - - def __eq__(self, other): - if isinstance(other, TracebackException): - return self.__dict__ == other.__dict__ - return NotImplemented - - def __str__(self): - return self._str - - def format_exception_only(self, *, show_group=False, _depth=0, **kwargs): - """Format the exception part of the traceback. - - The return value is a generator of strings, each ending in a newline. - - Generator yields the exception message. - For :exc:`SyntaxError` exceptions, it - also yields (before the exception message) - several lines that (when printed) - display detailed information about where the syntax error occurred. - Following the message, generator also yields - all the exception's ``__notes__``. - - When *show_group* is ``True``, and the exception is an instance of - :exc:`BaseExceptionGroup`, the nested exceptions are included as - well, recursively, with indentation relative to their nesting depth. - """ - colorize = kwargs.get("colorize", False) - - indent = 3 * _depth * ' ' - if not self._have_exc_type: - yield indent + _format_final_exc_line(None, self._str, colorize=colorize) - return - - stype = self.exc_type_str - if not self._is_syntax_error: - if _depth > 0: - # Nested exceptions needs correct handling of multiline messages. - formatted = _format_final_exc_line( - stype, self._str, insert_final_newline=False, colorize=colorize - ).split('\n') - yield from [ - indent + l + '\n' - for l in formatted - ] - else: - yield _format_final_exc_line(stype, self._str, colorize=colorize) - else: - yield from [indent + l for l in self._format_syntax_error(stype, colorize=colorize)] - - if ( - isinstance(self.__notes__, collections.abc.Sequence) - and not isinstance(self.__notes__, (str, bytes)) - ): - for note in self.__notes__: - note = _safe_string(note, 'note') - yield from [indent + l + '\n' for l in note.split('\n')] - elif self.__notes__ is not None: - yield indent + "{}\n".format(_safe_string(self.__notes__, '__notes__', func=repr)) - - if self.exceptions and show_group: - for ex in self.exceptions: - yield from ex.format_exception_only(show_group=show_group, _depth=_depth+1, colorize=colorize) - - def _find_keyword_typos(self): - assert self._is_syntax_error - try: - import _suggestions - except ImportError: - _suggestions = None - - # Only try to find keyword typos if there is no custom message - if self.msg != "invalid syntax" and "Perhaps you forgot a comma" not in self.msg: - return - - if not self._exc_metadata: - return - - line, offset, source = self._exc_metadata - end_line = int(self.lineno) if self.lineno is not None else 0 - lines = None - from_filename = False - - if source is None: - if self.filename: - try: - with open(self.filename) as f: - lines = f.read().splitlines() - except Exception: - line, end_line, offset = 0,1,0 - else: - from_filename = True - lines = lines if lines is not None else self.text.splitlines() - else: - lines = source.splitlines() - - error_code = lines[line -1 if line > 0 else 0:end_line] - error_code = textwrap.dedent('\n'.join(error_code)) - - # Do not continue if the source is too large - if len(error_code) > 1024: - return - - error_lines = error_code.splitlines() - tokens = tokenize.generate_tokens(io.StringIO(error_code).readline) - tokens_left_to_process = 10 - import difflib - for token in tokens: - start, end = token.start, token.end - if token.type != tokenize.NAME: - continue - # Only consider NAME tokens on the same line as the error - the_end = end_line if line == 0 else end_line + 1 - if from_filename and token.start[0]+line != the_end: - continue - wrong_name = token.string - if wrong_name in keyword.kwlist: - continue - - # Limit the number of valid tokens to consider to not spend - # to much time in this function - tokens_left_to_process -= 1 - if tokens_left_to_process < 0: - break - # Limit the number of possible matches to try - max_matches = 3 - matches = [] - if _suggestions is not None: - suggestion = _suggestions._generate_suggestions(keyword.kwlist, wrong_name) - if suggestion: - matches.append(suggestion) - matches.extend(difflib.get_close_matches(wrong_name, keyword.kwlist, n=max_matches, cutoff=0.5)) - matches = matches[:max_matches] - for suggestion in matches: - if not suggestion or suggestion == wrong_name: - continue - # Try to replace the token with the keyword - the_lines = error_lines.copy() - the_line = the_lines[start[0] - 1][:] - chars = list(the_line) - chars[token.start[1]:token.end[1]] = suggestion - the_lines[start[0] - 1] = ''.join(chars) - code = '\n'.join(the_lines) - - # Check if it works - try: - codeop.compile_command(code, symbol="exec", flags=codeop.PyCF_ONLY_AST) - except SyntaxError: - continue - - # Keep token.line but handle offsets correctly - self.text = token.line - self.offset = token.start[1] + 1 - self.end_offset = token.end[1] + 1 - self.lineno = start[0] - self.end_lineno = end[0] - self.msg = f"invalid syntax. Did you mean '{suggestion}'?" - return - - - def _format_syntax_error(self, stype, **kwargs): - """Format SyntaxError exceptions (internal helper).""" - # Show exactly where the problem was found. - colorize = kwargs.get("colorize", False) - if colorize: - theme = _colorize.get_theme(force_color=True).traceback - else: - theme = _colorize.get_theme(force_no_color=True).traceback - filename_suffix = '' - if self.lineno is not None: - yield ' File {}"{}"{}, line {}{}{}\n'.format( - theme.filename, - self.filename or "<string>", - theme.reset, - theme.line_no, - self.lineno, - theme.reset, - ) - elif self.filename is not None: - filename_suffix = ' ({})'.format(self.filename) - - text = self.text - if isinstance(text, str): - # text = " foo\n" - # rtext = " foo" - # ltext = "foo" - with suppress(Exception): - self._find_keyword_typos() - text = self.text - rtext = text.rstrip('\n') - ltext = rtext.lstrip(' \n\f') - spaces = len(rtext) - len(ltext) - if self.offset is None: - yield ' {}\n'.format(ltext) - elif isinstance(self.offset, int): - offset = self.offset - if self.lineno == self.end_lineno: - end_offset = ( - self.end_offset - if ( - isinstance(self.end_offset, int) - and self.end_offset != 0 - ) - else offset - ) - else: - end_offset = len(rtext) + 1 - - if self.text and offset > len(self.text): - offset = len(rtext) + 1 - if self.text and end_offset > len(self.text): - end_offset = len(rtext) + 1 - if offset >= end_offset or end_offset < 0: - end_offset = offset + 1 - - # Convert 1-based column offset to 0-based index into stripped text - colno = offset - 1 - spaces - end_colno = end_offset - 1 - spaces - caretspace = ' ' - if colno >= 0: - # non-space whitespace (likes tabs) must be kept for alignment - caretspace = ((c if c.isspace() else ' ') for c in ltext[:colno]) - start_color = end_color = "" - if colorize: - # colorize from colno to end_colno - ltext = ( - ltext[:colno] + - theme.error_highlight + ltext[colno:end_colno] + theme.reset + - ltext[end_colno:] - ) - start_color = theme.error_highlight - end_color = theme.reset - yield ' {}\n'.format(ltext) - yield ' {}{}{}{}\n'.format( - "".join(caretspace), - start_color, - ('^' * (end_colno - colno)), - end_color, - ) - else: - yield ' {}\n'.format(ltext) - msg = self.msg or "<no detail available>" - yield "{}{}{}: {}{}{}{}\n".format( - theme.type, - stype, - theme.reset, - theme.message, - msg, - theme.reset, - filename_suffix, - ) - - def format(self, *, chain=True, _ctx=None, **kwargs): - """Format the exception. - - If chain is not *True*, *__cause__* and *__context__* will not be formatted. - - The return value is a generator of strings, each ending in a newline and - some containing internal newlines. `print_exception` is a wrapper around - this method which just prints the lines to a file. - - The message indicating which exception occurred is always the last - string in the output. - """ - colorize = kwargs.get("colorize", False) - if _ctx is None: - _ctx = _ExceptionPrintContext() - - output = [] - exc = self - if chain: - while exc: - if exc.__cause__ is not None: - chained_msg = _cause_message - chained_exc = exc.__cause__ - elif (exc.__context__ is not None and - not exc.__suppress_context__): - chained_msg = _context_message - chained_exc = exc.__context__ - else: - chained_msg = None - chained_exc = None - - output.append((chained_msg, exc)) - exc = chained_exc - else: - output.append((None, exc)) - - for msg, exc in reversed(output): - if msg is not None: - yield from _ctx.emit(msg) - if exc.exceptions is None: - if exc.stack: - yield from _ctx.emit('Traceback (most recent call last):\n') - yield from _ctx.emit(exc.stack.format(colorize=colorize)) - yield from _ctx.emit(exc.format_exception_only(colorize=colorize)) - elif _ctx.exception_group_depth > self.max_group_depth: - # exception group, but depth exceeds limit - yield from _ctx.emit( - f"... (max_group_depth is {self.max_group_depth})\n") - else: - # format exception group - is_toplevel = (_ctx.exception_group_depth == 0) - if is_toplevel: - _ctx.exception_group_depth += 1 - - if exc.stack: - yield from _ctx.emit( - 'Exception Group Traceback (most recent call last):\n', - margin_char = '+' if is_toplevel else None) - yield from _ctx.emit(exc.stack.format(colorize=colorize)) - - yield from _ctx.emit(exc.format_exception_only(colorize=colorize)) - num_excs = len(exc.exceptions) - if num_excs <= self.max_group_width: - n = num_excs - else: - n = self.max_group_width + 1 - _ctx.need_close = False - for i in range(n): - last_exc = (i == n-1) - if last_exc: - # The closing frame may be added by a recursive call - _ctx.need_close = True - - if self.max_group_width is not None: - truncated = (i >= self.max_group_width) - else: - truncated = False - title = f'{i+1}' if not truncated else '...' - yield (_ctx.indent() + - ('+-' if i==0 else ' ') + - f'+---------------- {title} ----------------\n') - _ctx.exception_group_depth += 1 - if not truncated: - yield from exc.exceptions[i].format(chain=chain, _ctx=_ctx, colorize=colorize) - else: - remaining = num_excs - self.max_group_width - plural = 's' if remaining > 1 else '' - yield from _ctx.emit( - f"and {remaining} more exception{plural}\n") - - if last_exc and _ctx.need_close: - yield (_ctx.indent() + - "+------------------------------------\n") - _ctx.need_close = False - _ctx.exception_group_depth -= 1 - - if is_toplevel: - assert _ctx.exception_group_depth == 1 - _ctx.exception_group_depth = 0 - - - def print(self, *, file=None, chain=True, **kwargs): - """Print the result of self.format(chain=chain) to 'file'.""" - colorize = kwargs.get("colorize", False) - if file is None: - file = sys.stderr - for line in self.format(chain=chain, colorize=colorize): - print(line, file=file, end="") - - -_MAX_CANDIDATE_ITEMS = 750 -_MAX_STRING_SIZE = 40 -_MOVE_COST = 2 -_CASE_COST = 1 - - -def _substitution_cost(ch_a, ch_b): - if ch_a == ch_b: - return 0 - if ch_a.lower() == ch_b.lower(): - return _CASE_COST - return _MOVE_COST - - -def _get_safe___dir__(obj): - # Use obj.__dir__() to avoid a TypeError when calling dir(obj). - # See gh-131001 and gh-139933. - try: - d = obj.__dir__() - except TypeError: # when obj is a class - d = type(obj).__dir__(obj) - return sorted(x for x in d if isinstance(x, str)) - - -def _compute_suggestion_error(exc_value, tb, wrong_name): - if wrong_name is None or not isinstance(wrong_name, str): - return None - if isinstance(exc_value, AttributeError): - obj = exc_value.obj - try: - d = _get_safe___dir__(obj) - hide_underscored = (wrong_name[:1] != '_') - if hide_underscored and tb is not None: - while tb.tb_next is not None: - tb = tb.tb_next - frame = tb.tb_frame - if 'self' in frame.f_locals and frame.f_locals['self'] is obj: - hide_underscored = False - if hide_underscored: - d = [x for x in d if x[:1] != '_'] - except Exception: - return None - elif isinstance(exc_value, ImportError): - try: - mod = __import__(exc_value.name) - d = _get_safe___dir__(mod) - if wrong_name[:1] != '_': - d = [x for x in d if x[:1] != '_'] - except Exception: - return None - else: - assert isinstance(exc_value, NameError) - # find most recent frame - if tb is None: - return None - while tb.tb_next is not None: - tb = tb.tb_next - frame = tb.tb_frame - d = ( - list(frame.f_locals) - + list(frame.f_globals) - + list(frame.f_builtins) - ) - d = [x for x in d if isinstance(x, str)] - - # Check first if we are in a method and the instance - # has the wrong name as attribute - if 'self' in frame.f_locals: - self = frame.f_locals['self'] - try: - has_wrong_name = hasattr(self, wrong_name) - except Exception: - has_wrong_name = False - if has_wrong_name: - return f"self.{wrong_name}" - - try: - import _suggestions - except ImportError: - pass - else: - return _suggestions._generate_suggestions(d, wrong_name) - - # Compute closest match - - if len(d) > _MAX_CANDIDATE_ITEMS: - return None - wrong_name_len = len(wrong_name) - if wrong_name_len > _MAX_STRING_SIZE: - return None - best_distance = wrong_name_len - suggestion = None - for possible_name in d: - if possible_name == wrong_name: - # A missing attribute is "found". Don't suggest it (see GH-88821). - continue - # No more than 1/3 of the involved characters should need changed. - max_distance = (len(possible_name) + wrong_name_len + 3) * _MOVE_COST // 6 - # Don't take matches we've already beaten. - max_distance = min(max_distance, best_distance - 1) - current_distance = _levenshtein_distance(wrong_name, possible_name, max_distance) - if current_distance > max_distance: - continue - if not suggestion or current_distance < best_distance: - suggestion = possible_name - best_distance = current_distance - return suggestion - - -def _levenshtein_distance(a, b, max_cost): - # A Python implementation of Python/suggestions.c:levenshtein_distance. - - # Both strings are the same - if a == b: - return 0 - - # Trim away common affixes - pre = 0 - while a[pre:] and b[pre:] and a[pre] == b[pre]: - pre += 1 - a = a[pre:] - b = b[pre:] - post = 0 - while a[:post or None] and b[:post or None] and a[post-1] == b[post-1]: - post -= 1 - a = a[:post or None] - b = b[:post or None] - if not a or not b: - return _MOVE_COST * (len(a) + len(b)) - if len(a) > _MAX_STRING_SIZE or len(b) > _MAX_STRING_SIZE: - return max_cost + 1 - - # Prefer shorter buffer - if len(b) < len(a): - a, b = b, a - - # Quick fail when a match is impossible - if (len(b) - len(a)) * _MOVE_COST > max_cost: - return max_cost + 1 - - # Instead of producing the whole traditional len(a)-by-len(b) - # matrix, we can update just one row in place. - # Initialize the buffer row - row = list(range(_MOVE_COST, _MOVE_COST * (len(a) + 1), _MOVE_COST)) - - result = 0 - for bindex in range(len(b)): - bchar = b[bindex] - distance = result = bindex * _MOVE_COST - minimum = sys.maxsize - for index in range(len(a)): - # 1) Previous distance in this row is cost(b[:b_index], a[:index]) - substitute = distance + _substitution_cost(bchar, a[index]) - # 2) cost(b[:b_index], a[:index+1]) from previous row - distance = row[index] - # 3) existing result is cost(b[:b_index+1], a[index]) - - insert_delete = min(result, distance) + _MOVE_COST - result = min(insert_delete, substitute) - - # cost(b[:b_index+1], a[:index+1]) - row[index] = result - if result < minimum: - minimum = result - if minimum > max_cost: - # Everything in this row is too big, so bail early. - return max_cost + 1 - return result diff --git a/Python314_4_x86_Template/Lib/tracemalloc.py b/Python314_4_x86_Template/Lib/tracemalloc.py deleted file mode 100644 index cec99c597..000000000 --- a/Python314_4_x86_Template/Lib/tracemalloc.py +++ /dev/null @@ -1,560 +0,0 @@ -from collections.abc import Sequence, Iterable -from functools import total_ordering -import fnmatch -import linecache -import os.path -import pickle - -# Import types and functions implemented in C -from _tracemalloc import * -from _tracemalloc import _get_object_traceback, _get_traces - - -def _format_size(size, sign): - for unit in ('B', 'KiB', 'MiB', 'GiB', 'TiB'): - if abs(size) < 100 and unit != 'B': - # 3 digits (xx.x UNIT) - if sign: - return "%+.1f %s" % (size, unit) - else: - return "%.1f %s" % (size, unit) - if abs(size) < 10 * 1024 or unit == 'TiB': - # 4 or 5 digits (xxxx UNIT) - if sign: - return "%+.0f %s" % (size, unit) - else: - return "%.0f %s" % (size, unit) - size /= 1024 - - -class Statistic: - """ - Statistic difference on memory allocations between two Snapshot instance. - """ - - __slots__ = ('traceback', 'size', 'count') - - def __init__(self, traceback, size, count): - self.traceback = traceback - self.size = size - self.count = count - - def __hash__(self): - return hash((self.traceback, self.size, self.count)) - - def __eq__(self, other): - if not isinstance(other, Statistic): - return NotImplemented - return (self.traceback == other.traceback - and self.size == other.size - and self.count == other.count) - - def __str__(self): - text = ("%s: size=%s, count=%i" - % (self.traceback, - _format_size(self.size, False), - self.count)) - if self.count: - average = self.size / self.count - text += ", average=%s" % _format_size(average, False) - return text - - def __repr__(self): - return ('<Statistic traceback=%r size=%i count=%i>' - % (self.traceback, self.size, self.count)) - - def _sort_key(self): - return (self.size, self.count, self.traceback) - - -class StatisticDiff: - """ - Statistic difference on memory allocations between an old and a new - Snapshot instance. - """ - __slots__ = ('traceback', 'size', 'size_diff', 'count', 'count_diff') - - def __init__(self, traceback, size, size_diff, count, count_diff): - self.traceback = traceback - self.size = size - self.size_diff = size_diff - self.count = count - self.count_diff = count_diff - - def __hash__(self): - return hash((self.traceback, self.size, self.size_diff, - self.count, self.count_diff)) - - def __eq__(self, other): - if not isinstance(other, StatisticDiff): - return NotImplemented - return (self.traceback == other.traceback - and self.size == other.size - and self.size_diff == other.size_diff - and self.count == other.count - and self.count_diff == other.count_diff) - - def __str__(self): - text = ("%s: size=%s (%s), count=%i (%+i)" - % (self.traceback, - _format_size(self.size, False), - _format_size(self.size_diff, True), - self.count, - self.count_diff)) - if self.count: - average = self.size / self.count - text += ", average=%s" % _format_size(average, False) - return text - - def __repr__(self): - return ('<StatisticDiff traceback=%r size=%i (%+i) count=%i (%+i)>' - % (self.traceback, self.size, self.size_diff, - self.count, self.count_diff)) - - def _sort_key(self): - return (abs(self.size_diff), self.size, - abs(self.count_diff), self.count, - self.traceback) - - -def _compare_grouped_stats(old_group, new_group): - statistics = [] - for traceback, stat in new_group.items(): - previous = old_group.pop(traceback, None) - if previous is not None: - stat = StatisticDiff(traceback, - stat.size, stat.size - previous.size, - stat.count, stat.count - previous.count) - else: - stat = StatisticDiff(traceback, - stat.size, stat.size, - stat.count, stat.count) - statistics.append(stat) - - for traceback, stat in old_group.items(): - stat = StatisticDiff(traceback, 0, -stat.size, 0, -stat.count) - statistics.append(stat) - return statistics - - -@total_ordering -class Frame: - """ - Frame of a traceback. - """ - __slots__ = ("_frame",) - - def __init__(self, frame): - # frame is a tuple: (filename: str, lineno: int) - self._frame = frame - - @property - def filename(self): - return self._frame[0] - - @property - def lineno(self): - return self._frame[1] - - def __eq__(self, other): - if not isinstance(other, Frame): - return NotImplemented - return (self._frame == other._frame) - - def __lt__(self, other): - if not isinstance(other, Frame): - return NotImplemented - return (self._frame < other._frame) - - def __hash__(self): - return hash(self._frame) - - def __str__(self): - return "%s:%s" % (self.filename, self.lineno) - - def __repr__(self): - return "<Frame filename=%r lineno=%r>" % (self.filename, self.lineno) - - -@total_ordering -class Traceback(Sequence): - """ - Sequence of Frame instances sorted from the oldest frame - to the most recent frame. - """ - __slots__ = ("_frames", '_total_nframe') - - def __init__(self, frames, total_nframe=None): - Sequence.__init__(self) - # frames is a tuple of frame tuples: see Frame constructor for the - # format of a frame tuple; it is reversed, because _tracemalloc - # returns frames sorted from most recent to oldest, but the - # Python API expects oldest to most recent - self._frames = tuple(reversed(frames)) - self._total_nframe = total_nframe - - @property - def total_nframe(self): - return self._total_nframe - - def __len__(self): - return len(self._frames) - - def __getitem__(self, index): - if isinstance(index, slice): - return tuple(Frame(trace) for trace in self._frames[index]) - else: - return Frame(self._frames[index]) - - def __contains__(self, frame): - return frame._frame in self._frames - - def __hash__(self): - return hash(self._frames) - - def __eq__(self, other): - if not isinstance(other, Traceback): - return NotImplemented - return (self._frames == other._frames) - - def __lt__(self, other): - if not isinstance(other, Traceback): - return NotImplemented - return (self._frames < other._frames) - - def __str__(self): - return str(self[0]) - - def __repr__(self): - s = f"<Traceback {tuple(self)}" - if self._total_nframe is None: - s += ">" - else: - s += f" total_nframe={self.total_nframe}>" - return s - - def format(self, limit=None, most_recent_first=False): - lines = [] - if limit is not None: - if limit > 0: - frame_slice = self[-limit:] - else: - frame_slice = self[:limit] - else: - frame_slice = self - - if most_recent_first: - frame_slice = reversed(frame_slice) - for frame in frame_slice: - lines.append(' File "%s", line %s' - % (frame.filename, frame.lineno)) - line = linecache.getline(frame.filename, frame.lineno).strip() - if line: - lines.append(' %s' % line) - return lines - - -def get_object_traceback(obj): - """ - Get the traceback where the Python object *obj* was allocated. - Return a Traceback instance. - - Return None if the tracemalloc module is not tracing memory allocations or - did not trace the allocation of the object. - """ - frames = _get_object_traceback(obj) - if frames is not None: - return Traceback(frames) - else: - return None - - -class Trace: - """ - Trace of a memory block. - """ - __slots__ = ("_trace",) - - def __init__(self, trace): - # trace is a tuple: (domain: int, size: int, traceback: tuple). - # See Traceback constructor for the format of the traceback tuple. - self._trace = trace - - @property - def domain(self): - return self._trace[0] - - @property - def size(self): - return self._trace[1] - - @property - def traceback(self): - return Traceback(*self._trace[2:]) - - def __eq__(self, other): - if not isinstance(other, Trace): - return NotImplemented - return (self._trace == other._trace) - - def __hash__(self): - return hash(self._trace) - - def __str__(self): - return "%s: %s" % (self.traceback, _format_size(self.size, False)) - - def __repr__(self): - return ("<Trace domain=%s size=%s, traceback=%r>" - % (self.domain, _format_size(self.size, False), self.traceback)) - - -class _Traces(Sequence): - def __init__(self, traces): - Sequence.__init__(self) - # traces is a tuple of trace tuples: see Trace constructor - self._traces = traces - - def __len__(self): - return len(self._traces) - - def __getitem__(self, index): - if isinstance(index, slice): - return tuple(Trace(trace) for trace in self._traces[index]) - else: - return Trace(self._traces[index]) - - def __contains__(self, trace): - return trace._trace in self._traces - - def __eq__(self, other): - if not isinstance(other, _Traces): - return NotImplemented - return (self._traces == other._traces) - - def __repr__(self): - return "<Traces len=%s>" % len(self) - - -def _normalize_filename(filename): - filename = os.path.normcase(filename) - if filename.endswith('.pyc'): - filename = filename[:-1] - return filename - - -class BaseFilter: - def __init__(self, inclusive): - self.inclusive = inclusive - - def _match(self, trace): - raise NotImplementedError - - -class Filter(BaseFilter): - def __init__(self, inclusive, filename_pattern, - lineno=None, all_frames=False, domain=None): - super().__init__(inclusive) - self.inclusive = inclusive - self._filename_pattern = _normalize_filename(filename_pattern) - self.lineno = lineno - self.all_frames = all_frames - self.domain = domain - - @property - def filename_pattern(self): - return self._filename_pattern - - def _match_frame_impl(self, filename, lineno): - filename = _normalize_filename(filename) - if not fnmatch.fnmatch(filename, self._filename_pattern): - return False - if self.lineno is None: - return True - else: - return (lineno == self.lineno) - - def _match_frame(self, filename, lineno): - return self._match_frame_impl(filename, lineno) ^ (not self.inclusive) - - def _match_traceback(self, traceback): - if self.all_frames: - if any(self._match_frame_impl(filename, lineno) - for filename, lineno in traceback): - return self.inclusive - else: - return (not self.inclusive) - else: - filename, lineno = traceback[0] - return self._match_frame(filename, lineno) - - def _match(self, trace): - domain, size, traceback, total_nframe = trace - res = self._match_traceback(traceback) - if self.domain is not None: - if self.inclusive: - return res and (domain == self.domain) - else: - return res or (domain != self.domain) - return res - - -class DomainFilter(BaseFilter): - def __init__(self, inclusive, domain): - super().__init__(inclusive) - self._domain = domain - - @property - def domain(self): - return self._domain - - def _match(self, trace): - domain, size, traceback, total_nframe = trace - return (domain == self.domain) ^ (not self.inclusive) - - -class Snapshot: - """ - Snapshot of traces of memory blocks allocated by Python. - """ - - def __init__(self, traces, traceback_limit): - # traces is a tuple of trace tuples: see _Traces constructor for - # the exact format - self.traces = _Traces(traces) - self.traceback_limit = traceback_limit - - def dump(self, filename): - """ - Write the snapshot into a file. - """ - with open(filename, "wb") as fp: - pickle.dump(self, fp, pickle.HIGHEST_PROTOCOL) - - @staticmethod - def load(filename): - """ - Load a snapshot from a file. - """ - with open(filename, "rb") as fp: - return pickle.load(fp) - - def _filter_trace(self, include_filters, exclude_filters, trace): - if include_filters: - if not any(trace_filter._match(trace) - for trace_filter in include_filters): - return False - if exclude_filters: - if any(not trace_filter._match(trace) - for trace_filter in exclude_filters): - return False - return True - - def filter_traces(self, filters): - """ - Create a new Snapshot instance with a filtered traces sequence, filters - is a list of Filter or DomainFilter instances. If filters is an empty - list, return a new Snapshot instance with a copy of the traces. - """ - if not isinstance(filters, Iterable): - raise TypeError("filters must be a list of filters, not %s" - % type(filters).__name__) - if filters: - include_filters = [] - exclude_filters = [] - for trace_filter in filters: - if trace_filter.inclusive: - include_filters.append(trace_filter) - else: - exclude_filters.append(trace_filter) - new_traces = [trace for trace in self.traces._traces - if self._filter_trace(include_filters, - exclude_filters, - trace)] - else: - new_traces = self.traces._traces.copy() - return Snapshot(new_traces, self.traceback_limit) - - def _group_by(self, key_type, cumulative): - if key_type not in ('traceback', 'filename', 'lineno'): - raise ValueError("unknown key_type: %r" % (key_type,)) - if cumulative and key_type not in ('lineno', 'filename'): - raise ValueError("cumulative mode cannot by used " - "with key type %r" % key_type) - - stats = {} - tracebacks = {} - if not cumulative: - for trace in self.traces._traces: - domain, size, trace_traceback, total_nframe = trace - try: - traceback = tracebacks[trace_traceback] - except KeyError: - if key_type == 'traceback': - frames = trace_traceback - elif key_type == 'lineno': - frames = trace_traceback[:1] - else: # key_type == 'filename': - frames = ((trace_traceback[0][0], 0),) - traceback = Traceback(frames) - tracebacks[trace_traceback] = traceback - try: - stat = stats[traceback] - stat.size += size - stat.count += 1 - except KeyError: - stats[traceback] = Statistic(traceback, size, 1) - else: - # cumulative statistics - for trace in self.traces._traces: - domain, size, trace_traceback, total_nframe = trace - for frame in trace_traceback: - try: - traceback = tracebacks[frame] - except KeyError: - if key_type == 'lineno': - frames = (frame,) - else: # key_type == 'filename': - frames = ((frame[0], 0),) - traceback = Traceback(frames) - tracebacks[frame] = traceback - try: - stat = stats[traceback] - stat.size += size - stat.count += 1 - except KeyError: - stats[traceback] = Statistic(traceback, size, 1) - return stats - - def statistics(self, key_type, cumulative=False): - """ - Group statistics by key_type. Return a sorted list of Statistic - instances. - """ - grouped = self._group_by(key_type, cumulative) - statistics = list(grouped.values()) - statistics.sort(reverse=True, key=Statistic._sort_key) - return statistics - - def compare_to(self, old_snapshot, key_type, cumulative=False): - """ - Compute the differences with an old snapshot old_snapshot. Get - statistics as a sorted list of StatisticDiff instances, grouped by - group_by. - """ - new_group = self._group_by(key_type, cumulative) - old_group = old_snapshot._group_by(key_type, cumulative) - statistics = _compare_grouped_stats(old_group, new_group) - statistics.sort(reverse=True, key=StatisticDiff._sort_key) - return statistics - - -def take_snapshot(): - """ - Take a snapshot of traces of memory blocks allocated by Python. - """ - if not is_tracing(): - raise RuntimeError("the tracemalloc module must be tracing memory " - "allocations to take a snapshot") - traces = _get_traces() - traceback_limit = get_traceback_limit() - return Snapshot(traces, traceback_limit) diff --git a/Python314_4_x86_Template/Lib/tty.py b/Python314_4_x86_Template/Lib/tty.py deleted file mode 100644 index 5a49e0400..000000000 --- a/Python314_4_x86_Template/Lib/tty.py +++ /dev/null @@ -1,73 +0,0 @@ -"""Terminal utilities.""" - -# Author: Steen Lumholt. - -from termios import * - -__all__ = ["cfmakeraw", "cfmakecbreak", "setraw", "setcbreak"] - -# Indices for termios list. -IFLAG = 0 -OFLAG = 1 -CFLAG = 2 -LFLAG = 3 -ISPEED = 4 -OSPEED = 5 -CC = 6 - -def cfmakeraw(mode): - """Make termios mode raw.""" - # Clear all POSIX.1-2017 input mode flags. - # See chapter 11 "General Terminal Interface" - # of POSIX.1-2017 Base Definitions. - mode[IFLAG] &= ~(IGNBRK | BRKINT | IGNPAR | PARMRK | INPCK | ISTRIP | - INLCR | IGNCR | ICRNL | IXON | IXANY | IXOFF) - - # Do not post-process output. - mode[OFLAG] &= ~OPOST - - # Disable parity generation and detection; clear character size mask; - # let character size be 8 bits. - mode[CFLAG] &= ~(PARENB | CSIZE) - mode[CFLAG] |= CS8 - - # Clear all POSIX.1-2017 local mode flags. - mode[LFLAG] &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | - IEXTEN | ISIG | NOFLSH | TOSTOP) - - # POSIX.1-2017, 11.1.7 Non-Canonical Mode Input Processing, - # Case B: MIN>0, TIME=0 - # A pending read shall block until MIN (here 1) bytes are received, - # or a signal is received. - mode[CC] = list(mode[CC]) - mode[CC][VMIN] = 1 - mode[CC][VTIME] = 0 - -def cfmakecbreak(mode): - """Make termios mode cbreak.""" - # Do not echo characters; disable canonical input. - mode[LFLAG] &= ~(ECHO | ICANON) - - # POSIX.1-2017, 11.1.7 Non-Canonical Mode Input Processing, - # Case B: MIN>0, TIME=0 - # A pending read shall block until MIN (here 1) bytes are received, - # or a signal is received. - mode[CC] = list(mode[CC]) - mode[CC][VMIN] = 1 - mode[CC][VTIME] = 0 - -def setraw(fd, when=TCSAFLUSH): - """Put terminal into raw mode.""" - mode = tcgetattr(fd) - new = list(mode) - cfmakeraw(new) - tcsetattr(fd, when, new) - return mode - -def setcbreak(fd, when=TCSAFLUSH): - """Put terminal into cbreak mode.""" - mode = tcgetattr(fd) - new = list(mode) - cfmakecbreak(new) - tcsetattr(fd, when, new) - return mode diff --git a/Python314_4_x86_Template/Lib/types.py b/Python314_4_x86_Template/Lib/types.py deleted file mode 100644 index fa6324fb4..000000000 --- a/Python314_4_x86_Template/Lib/types.py +++ /dev/null @@ -1,344 +0,0 @@ -""" -Define names for built-in types that aren't directly accessible as a builtin. -""" - -# Iterators in Python aren't a matter of type but of protocol. A large -# and changing number of builtin types implement *some* flavor of -# iterator. Don't check the type! Use hasattr to check for both -# "__iter__" and "__next__" attributes instead. - -try: - from _types import * -except ImportError: - import sys - - def _f(): pass - FunctionType = type(_f) - LambdaType = type(lambda: None) # Same as FunctionType - CodeType = type(_f.__code__) - MappingProxyType = type(type.__dict__) - SimpleNamespace = type(sys.implementation) - - def _cell_factory(): - a = 1 - def f(): - nonlocal a - return f.__closure__[0] - CellType = type(_cell_factory()) - - def _g(): - yield 1 - GeneratorType = type(_g()) - - async def _c(): pass - _c = _c() - CoroutineType = type(_c) - _c.close() # Prevent ResourceWarning - - async def _ag(): - yield - _ag = _ag() - AsyncGeneratorType = type(_ag) - - class _C: - def _m(self): pass - MethodType = type(_C()._m) - - BuiltinFunctionType = type(len) - BuiltinMethodType = type([].append) # Same as BuiltinFunctionType - - WrapperDescriptorType = type(object.__init__) - MethodWrapperType = type(object().__str__) - MethodDescriptorType = type(str.join) - ClassMethodDescriptorType = type(dict.__dict__['fromkeys']) - - ModuleType = type(sys) - - try: - raise TypeError - except TypeError as exc: - TracebackType = type(exc.__traceback__) - FrameType = type(exc.__traceback__.tb_frame) - - GetSetDescriptorType = type(FunctionType.__code__) - MemberDescriptorType = type(FunctionType.__globals__) - - GenericAlias = type(list[int]) - UnionType = type(int | str) - - EllipsisType = type(Ellipsis) - NoneType = type(None) - NotImplementedType = type(NotImplemented) - - # CapsuleType cannot be accessed from pure Python, - # so there is no fallback definition. - - del sys, _f, _g, _C, _c, _ag, _cell_factory # Not for export - - -# Provide a PEP 3115 compliant mechanism for class creation -def new_class(name, bases=(), kwds=None, exec_body=None): - """Create a class object dynamically using the appropriate metaclass.""" - resolved_bases = resolve_bases(bases) - meta, ns, kwds = prepare_class(name, resolved_bases, kwds) - if exec_body is not None: - exec_body(ns) - if resolved_bases is not bases: - ns['__orig_bases__'] = bases - return meta(name, resolved_bases, ns, **kwds) - -def resolve_bases(bases): - """Resolve MRO entries dynamically as specified by PEP 560.""" - new_bases = list(bases) - updated = False - shift = 0 - for i, base in enumerate(bases): - if isinstance(base, type): - continue - if not hasattr(base, "__mro_entries__"): - continue - new_base = base.__mro_entries__(bases) - updated = True - if not isinstance(new_base, tuple): - raise TypeError("__mro_entries__ must return a tuple") - else: - new_bases[i+shift:i+shift+1] = new_base - shift += len(new_base) - 1 - if not updated: - return bases - return tuple(new_bases) - -def prepare_class(name, bases=(), kwds=None): - """Call the __prepare__ method of the appropriate metaclass. - - Returns (metaclass, namespace, kwds) as a 3-tuple - - *metaclass* is the appropriate metaclass - *namespace* is the prepared class namespace - *kwds* is an updated copy of the passed in kwds argument with any - 'metaclass' entry removed. If no kwds argument is passed in, this will - be an empty dict. - """ - if kwds is None: - kwds = {} - else: - kwds = dict(kwds) # Don't alter the provided mapping - if 'metaclass' in kwds: - meta = kwds.pop('metaclass') - else: - if bases: - meta = type(bases[0]) - else: - meta = type - if isinstance(meta, type): - # when meta is a type, we first determine the most-derived metaclass - # instead of invoking the initial candidate directly - meta = _calculate_meta(meta, bases) - if hasattr(meta, '__prepare__'): - ns = meta.__prepare__(name, bases, **kwds) - else: - ns = {} - return meta, ns, kwds - -def _calculate_meta(meta, bases): - """Calculate the most derived metaclass.""" - winner = meta - for base in bases: - base_meta = type(base) - if issubclass(winner, base_meta): - continue - if issubclass(base_meta, winner): - winner = base_meta - continue - # else: - raise TypeError("metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases") - return winner - - -def get_original_bases(cls, /): - """Return the class's "original" bases prior to modification by `__mro_entries__`. - - Examples:: - - from typing import TypeVar, Generic, NamedTuple, TypedDict - - T = TypeVar("T") - class Foo(Generic[T]): ... - class Bar(Foo[int], float): ... - class Baz(list[str]): ... - Eggs = NamedTuple("Eggs", [("a", int), ("b", str)]) - Spam = TypedDict("Spam", {"a": int, "b": str}) - - assert get_original_bases(Bar) == (Foo[int], float) - assert get_original_bases(Baz) == (list[str],) - assert get_original_bases(Eggs) == (NamedTuple,) - assert get_original_bases(Spam) == (TypedDict,) - assert get_original_bases(int) == (object,) - """ - try: - return cls.__dict__.get("__orig_bases__", cls.__bases__) - except AttributeError: - raise TypeError( - f"Expected an instance of type, not {type(cls).__name__!r}" - ) from None - - -class DynamicClassAttribute: - """Route attribute access on a class to __getattr__. - - This is a descriptor, used to define attributes that act differently when - accessed through an instance and through a class. Instance access remains - normal, but access to an attribute through a class will be routed to the - class's __getattr__ method; this is done by raising AttributeError. - - This allows one to have properties active on an instance, and have virtual - attributes on the class with the same name. (Enum used this between Python - versions 3.4 - 3.9 .) - - Subclass from this to use a different method of accessing virtual attributes - and still be treated properly by the inspect module. (Enum uses this since - Python 3.10 .) - - """ - def __init__(self, fget=None, fset=None, fdel=None, doc=None): - self.fget = fget - self.fset = fset - self.fdel = fdel - # next two lines make DynamicClassAttribute act the same as property - self.__doc__ = doc or fget.__doc__ - self.overwrite_doc = doc is None - # support for abstract methods - self.__isabstractmethod__ = bool(getattr(fget, '__isabstractmethod__', False)) - - def __get__(self, instance, ownerclass=None): - if instance is None: - if self.__isabstractmethod__: - return self - raise AttributeError() - elif self.fget is None: - raise AttributeError("unreadable attribute") - return self.fget(instance) - - def __set__(self, instance, value): - if self.fset is None: - raise AttributeError("can't set attribute") - self.fset(instance, value) - - def __delete__(self, instance): - if self.fdel is None: - raise AttributeError("can't delete attribute") - self.fdel(instance) - - def getter(self, fget): - fdoc = fget.__doc__ if self.overwrite_doc else None - result = type(self)(fget, self.fset, self.fdel, fdoc or self.__doc__) - result.overwrite_doc = self.overwrite_doc - return result - - def setter(self, fset): - result = type(self)(self.fget, fset, self.fdel, self.__doc__) - result.overwrite_doc = self.overwrite_doc - return result - - def deleter(self, fdel): - result = type(self)(self.fget, self.fset, fdel, self.__doc__) - result.overwrite_doc = self.overwrite_doc - return result - - -class _GeneratorWrapper: - # TODO: Implement this in C. - def __init__(self, gen): - self.__wrapped = gen - self.__isgen = gen.__class__ is GeneratorType - self.__name__ = getattr(gen, '__name__', None) - self.__qualname__ = getattr(gen, '__qualname__', None) - def send(self, val): - return self.__wrapped.send(val) - def throw(self, tp, *rest): - return self.__wrapped.throw(tp, *rest) - def close(self): - return self.__wrapped.close() - @property - def gi_code(self): - return self.__wrapped.gi_code - @property - def gi_frame(self): - return self.__wrapped.gi_frame - @property - def gi_running(self): - return self.__wrapped.gi_running - @property - def gi_yieldfrom(self): - return self.__wrapped.gi_yieldfrom - @property - def gi_suspended(self): - return self.__wrapped.gi_suspended - cr_code = gi_code - cr_frame = gi_frame - cr_running = gi_running - cr_await = gi_yieldfrom - cr_suspended = gi_suspended - def __next__(self): - return next(self.__wrapped) - def __iter__(self): - if self.__isgen: - return self.__wrapped - return self - __await__ = __iter__ - -def coroutine(func): - """Convert regular generator function to a coroutine.""" - - if not callable(func): - raise TypeError('types.coroutine() expects a callable') - - if (func.__class__ is FunctionType and - getattr(func, '__code__', None).__class__ is CodeType): - - co_flags = func.__code__.co_flags - - # Check if 'func' is a coroutine function. - # (0x180 == CO_COROUTINE | CO_ITERABLE_COROUTINE) - if co_flags & 0x180: - return func - - # Check if 'func' is a generator function. - # (0x20 == CO_GENERATOR) - if co_flags & 0x20: - # TODO: Implement this in C. - co = func.__code__ - # 0x100 == CO_ITERABLE_COROUTINE - func.__code__ = co.replace(co_flags=co.co_flags | 0x100) - return func - - # The following code is primarily to support functions that - # return generator-like objects (for instance generators - # compiled with Cython). - - # Delay functools and _collections_abc import for speeding up types import. - import functools - import _collections_abc - @functools.wraps(func) - def wrapped(*args, **kwargs): - coro = func(*args, **kwargs) - if (coro.__class__ is CoroutineType or - coro.__class__ is GeneratorType and coro.gi_code.co_flags & 0x100): - # 'coro' is a native coroutine object or an iterable coroutine - return coro - if (isinstance(coro, _collections_abc.Generator) and - not isinstance(coro, _collections_abc.Coroutine)): - # 'coro' is either a pure Python generator iterator, or it - # implements collections.abc.Generator (and does not implement - # collections.abc.Coroutine). - return _GeneratorWrapper(coro) - # 'coro' is either an instance of collections.abc.Coroutine or - # some other object -- pass it through. - return coro - - return wrapped - -__all__ = [n for n in globals() if not n.startswith('_')] # for pydoc diff --git a/Python314_4_x86_Template/Lib/typing.py b/Python314_4_x86_Template/Lib/typing.py deleted file mode 100644 index 380211183..000000000 --- a/Python314_4_x86_Template/Lib/typing.py +++ /dev/null @@ -1,3854 +0,0 @@ -""" -The typing module: Support for gradual typing as defined by PEP 484 and subsequent PEPs. - -Among other things, the module includes the following: -* Generic, Protocol, and internal machinery to support generic aliases. - All subscripted types like X[int], Union[int, str] are generic aliases. -* Various "special forms" that have unique meanings in type annotations: - NoReturn, Never, ClassVar, Self, Concatenate, Unpack, and others. -* Classes whose instances can be type arguments to generic classes and functions: - TypeVar, ParamSpec, TypeVarTuple. -* Public helper functions: get_type_hints, overload, cast, final, and others. -* Several protocols to support duck-typing: - SupportsFloat, SupportsIndex, SupportsAbs, and others. -* Special types: NewType, NamedTuple, TypedDict. -* Deprecated aliases for builtin types and collections.abc ABCs. - -Any name not present in __all__ is an implementation detail -that may be changed without notice. Use at your own risk! -""" - -from abc import abstractmethod, ABCMeta -import collections -from collections import defaultdict -import collections.abc -import copyreg -import functools -import operator -import sys -import types -from types import GenericAlias - -from _typing import ( - _idfunc, - TypeVar, - ParamSpec, - TypeVarTuple, - ParamSpecArgs, - ParamSpecKwargs, - TypeAliasType, - Generic, - Union, - NoDefault, -) - -# Please keep __all__ alphabetized within each category. -__all__ = [ - # Super-special typing primitives. - 'Annotated', - 'Any', - 'Callable', - 'ClassVar', - 'Concatenate', - 'Final', - 'ForwardRef', - 'Generic', - 'Literal', - 'Optional', - 'ParamSpec', - 'Protocol', - 'Tuple', - 'Type', - 'TypeVar', - 'TypeVarTuple', - 'Union', - - # ABCs (from collections.abc). - 'AbstractSet', # collections.abc.Set. - 'ByteString', - 'Container', - 'ContextManager', - 'Hashable', - 'ItemsView', - 'Iterable', - 'Iterator', - 'KeysView', - 'Mapping', - 'MappingView', - 'MutableMapping', - 'MutableSequence', - 'MutableSet', - 'Sequence', - 'Sized', - 'ValuesView', - 'Awaitable', - 'AsyncIterator', - 'AsyncIterable', - 'Coroutine', - 'Collection', - 'AsyncGenerator', - 'AsyncContextManager', - - # Structural checks, a.k.a. protocols. - 'Reversible', - 'SupportsAbs', - 'SupportsBytes', - 'SupportsComplex', - 'SupportsFloat', - 'SupportsIndex', - 'SupportsInt', - 'SupportsRound', - - # Concrete collection types. - 'ChainMap', - 'Counter', - 'Deque', - 'Dict', - 'DefaultDict', - 'List', - 'OrderedDict', - 'Set', - 'FrozenSet', - 'NamedTuple', # Not really a type. - 'TypedDict', # Not really a type. - 'Generator', - - # Other concrete types. - 'BinaryIO', - 'IO', - 'Match', - 'Pattern', - 'TextIO', - - # One-off things. - 'AnyStr', - 'assert_type', - 'assert_never', - 'cast', - 'clear_overloads', - 'dataclass_transform', - 'evaluate_forward_ref', - 'final', - 'get_args', - 'get_origin', - 'get_overloads', - 'get_protocol_members', - 'get_type_hints', - 'is_protocol', - 'is_typeddict', - 'LiteralString', - 'Never', - 'NewType', - 'no_type_check', - 'no_type_check_decorator', - 'NoDefault', - 'NoReturn', - 'NotRequired', - 'overload', - 'override', - 'ParamSpecArgs', - 'ParamSpecKwargs', - 'ReadOnly', - 'Required', - 'reveal_type', - 'runtime_checkable', - 'Self', - 'Text', - 'TYPE_CHECKING', - 'TypeAlias', - 'TypeGuard', - 'TypeIs', - 'TypeAliasType', - 'Unpack', -] - -class _LazyAnnotationLib: - def __getattr__(self, attr): - global _lazy_annotationlib - import annotationlib - _lazy_annotationlib = annotationlib - return getattr(annotationlib, attr) - -_lazy_annotationlib = _LazyAnnotationLib() - - -def _type_convert(arg, module=None, *, allow_special_forms=False, owner=None): - """For converting None to type(None), and strings to ForwardRef.""" - if arg is None: - return type(None) - if isinstance(arg, str): - return _make_forward_ref(arg, module=module, is_class=allow_special_forms, owner=owner) - return arg - - -def _type_check(arg, msg, is_argument=True, module=None, *, allow_special_forms=False, owner=None): - """Check that the argument is a type, and return it (internal helper). - - As a special case, accept None and return type(None) instead. Also wrap strings - into ForwardRef instances. Consider several corner cases, for example plain - special forms like Union are not valid, while Union[int, str] is OK, etc. - The msg argument is a human-readable error message, e.g.:: - - "Union[arg, ...]: arg should be a type." - - We append the repr() of the actual value (truncated to 100 chars). - """ - invalid_generic_forms = (Generic, Protocol) - if not allow_special_forms: - invalid_generic_forms += (ClassVar,) - if is_argument: - invalid_generic_forms += (Final,) - - arg = _type_convert(arg, module=module, allow_special_forms=allow_special_forms, owner=owner) - if (isinstance(arg, _GenericAlias) and - arg.__origin__ in invalid_generic_forms): - raise TypeError(f"{arg} is not valid as type argument") - if arg in (Any, LiteralString, NoReturn, Never, Self, TypeAlias): - return arg - if allow_special_forms and arg in (ClassVar, Final): - return arg - if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol): - raise TypeError(f"Plain {arg} is not valid as type argument") - if type(arg) is tuple: - raise TypeError(f"{msg} Got {arg!r:.100}.") - return arg - - -def _is_param_expr(arg): - return arg is ... or isinstance(arg, - (tuple, list, ParamSpec, _ConcatenateGenericAlias)) - - -def _should_unflatten_callable_args(typ, args): - """Internal helper for munging collections.abc.Callable's __args__. - - The canonical representation for a Callable's __args__ flattens the - argument types, see https://github.com/python/cpython/issues/86361. - - For example:: - - >>> import collections.abc - >>> P = ParamSpec('P') - >>> collections.abc.Callable[[int, int], str].__args__ == (int, int, str) - True - >>> collections.abc.Callable[P, str].__args__ == (P, str) - True - - As a result, if we need to reconstruct the Callable from its __args__, - we need to unflatten it. - """ - return ( - typ.__origin__ is collections.abc.Callable - and not (len(args) == 2 and _is_param_expr(args[0])) - ) - - -def _type_repr(obj): - """Return the repr() of an object, special-casing types (internal helper). - - If obj is a type, we return a shorter version than the default - type.__repr__, based on the module and qualified name, which is - typically enough to uniquely identify a type. For everything - else, we fall back on repr(obj). - """ - if isinstance(obj, tuple): - # Special case for `repr` of types with `ParamSpec`: - return '[' + ', '.join(_type_repr(t) for t in obj) + ']' - return _lazy_annotationlib.type_repr(obj) - - -def _collect_type_parameters(args, *, enforce_default_ordering: bool = True): - """Collect all type parameters in args - in order of first appearance (lexicographic order). - - For example:: - - >>> P = ParamSpec('P') - >>> T = TypeVar('T') - >>> _collect_type_parameters((T, Callable[P, T])) - (~T, ~P) - """ - # required type parameter cannot appear after parameter with default - default_encountered = False - # or after TypeVarTuple - type_var_tuple_encountered = False - parameters = [] - for t in args: - if isinstance(t, type): - # We don't want __parameters__ descriptor of a bare Python class. - pass - elif isinstance(t, tuple): - # `t` might be a tuple, when `ParamSpec` is substituted with - # `[T, int]`, or `[int, *Ts]`, etc. - for x in t: - for collected in _collect_type_parameters([x]): - if collected not in parameters: - parameters.append(collected) - elif hasattr(t, '__typing_subst__'): - if t not in parameters: - if enforce_default_ordering: - if type_var_tuple_encountered and t.has_default(): - raise TypeError('Type parameter with a default' - ' follows TypeVarTuple') - - if t.has_default(): - default_encountered = True - elif default_encountered: - raise TypeError(f'Type parameter {t!r} without a default' - ' follows type parameter with a default') - - parameters.append(t) - else: - if _is_unpacked_typevartuple(t): - type_var_tuple_encountered = True - for x in getattr(t, '__parameters__', ()): - if x not in parameters: - parameters.append(x) - return tuple(parameters) - - -def _check_generic_specialization(cls, arguments): - """Check correct count for parameters of a generic cls (internal helper). - - This gives a nice error message in case of count mismatch. - """ - expected_len = len(cls.__parameters__) - if not expected_len: - raise TypeError(f"{cls} is not a generic class") - actual_len = len(arguments) - if actual_len != expected_len: - # deal with defaults - if actual_len < expected_len: - # If the parameter at index `actual_len` in the parameters list - # has a default, then all parameters after it must also have - # one, because we validated as much in _collect_type_parameters(). - # That means that no error needs to be raised here, despite - # the number of arguments being passed not matching the number - # of parameters: all parameters that aren't explicitly - # specialized in this call are parameters with default values. - if cls.__parameters__[actual_len].has_default(): - return - - expected_len -= sum(p.has_default() for p in cls.__parameters__) - expect_val = f"at least {expected_len}" - else: - expect_val = expected_len - - raise TypeError(f"Too {'many' if actual_len > expected_len else 'few'} arguments" - f" for {cls}; actual {actual_len}, expected {expect_val}") - - -def _unpack_args(*args): - newargs = [] - for arg in args: - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs is not None and not (subargs and subargs[-1] is ...): - newargs.extend(subargs) - else: - newargs.append(arg) - return newargs - -def _deduplicate(params, *, unhashable_fallback=False): - # Weed out strict duplicates, preserving the first of each occurrence. - try: - return dict.fromkeys(params) - except TypeError: - if not unhashable_fallback: - raise - # Happens for cases like `Annotated[dict, {'x': IntValidator()}]` - new_unhashable = [] - for t in params: - if t not in new_unhashable: - new_unhashable.append(t) - return new_unhashable - -def _flatten_literal_params(parameters): - """Internal helper for Literal creation: flatten Literals among parameters.""" - params = [] - for p in parameters: - if isinstance(p, _LiteralGenericAlias): - params.extend(p.__args__) - else: - params.append(p) - return tuple(params) - - -_cleanups = [] -_caches = {} - - -def _tp_cache(func=None, /, *, typed=False): - """Internal wrapper caching __getitem__ of generic types. - - For non-hashable arguments, the original function is used as a fallback. - """ - def decorator(func): - # The callback 'inner' references the newly created lru_cache - # indirectly by performing a lookup in the global '_caches' dictionary. - # This breaks a reference that can be problematic when combined with - # C API extensions that leak references to types. See GH-98253. - - cache = functools.lru_cache(typed=typed)(func) - _caches[func] = cache - _cleanups.append(cache.cache_clear) - del cache - - @functools.wraps(func) - def inner(*args, **kwds): - try: - return _caches[func](*args, **kwds) - except TypeError: - pass # All real errors (not unhashable args) are raised below. - return func(*args, **kwds) - return inner - - if func is not None: - return decorator(func) - - return decorator - - -def _deprecation_warning_for_no_type_params_passed(funcname: str) -> None: - import warnings - - depr_message = ( - f"Failing to pass a value to the 'type_params' parameter " - f"of {funcname!r} is deprecated, as it leads to incorrect behaviour " - f"when calling {funcname} on a stringified annotation " - f"that references a PEP 695 type parameter. " - f"It will be disallowed in Python 3.15." - ) - warnings.warn(depr_message, category=DeprecationWarning, stacklevel=3) - - -class _Sentinel: - __slots__ = () - def __repr__(self): - return '<sentinel>' - - -_sentinel = _Sentinel() - - -def _eval_type(t, globalns, localns, type_params=_sentinel, *, recursive_guard=frozenset(), - format=None, owner=None, parent_fwdref=None, prefer_fwd_module=False): - """Evaluate all forward references in the given type t. - - For use of globalns and localns see the docstring for get_type_hints(). - recursive_guard is used to prevent infinite recursion with a recursive - ForwardRef. - """ - if type_params is _sentinel: - _deprecation_warning_for_no_type_params_passed("typing._eval_type") - type_params = () - if isinstance(t, _lazy_annotationlib.ForwardRef): - # If the forward_ref has __forward_module__ set, evaluate() infers the globals - # from the module, and it will probably pick better than the globals we have here. - # We do this only for calls from get_type_hints() (which opts in through the - # prefer_fwd_module flag), so that the default behavior remains more straightforward. - if prefer_fwd_module and t.__forward_module__ is not None: - globalns = None - # If there are type params on the owner, we need to add them back, because - # annotationlib won't. - if owner_type_params := getattr(owner, "__type_params__", None): - globalns = getattr( - sys.modules.get(t.__forward_module__, None), "__dict__", None - ) - if globalns is not None: - globalns = dict(globalns) - for type_param in owner_type_params: - globalns[type_param.__name__] = type_param - return evaluate_forward_ref(t, globals=globalns, locals=localns, - type_params=type_params, owner=owner, - _recursive_guard=recursive_guard, format=format) - if isinstance(t, (_GenericAlias, GenericAlias, Union)): - if isinstance(t, GenericAlias): - args = tuple( - _make_forward_ref(arg, parent_fwdref=parent_fwdref) if isinstance(arg, str) else arg - for arg in t.__args__ - ) - is_unpacked = t.__unpacked__ - if _should_unflatten_callable_args(t, args): - t = t.__origin__[(args[:-1], args[-1])] - else: - t = t.__origin__[args] - if is_unpacked: - t = Unpack[t] - - ev_args = tuple( - _eval_type( - a, globalns, localns, type_params, recursive_guard=recursive_guard, - format=format, owner=owner, prefer_fwd_module=prefer_fwd_module, - ) - for a in t.__args__ - ) - if ev_args == t.__args__: - return t - if isinstance(t, GenericAlias): - return GenericAlias(t.__origin__, ev_args) - if isinstance(t, Union): - return functools.reduce(operator.or_, ev_args) - else: - return t.copy_with(ev_args) - return t - - -class _Final: - """Mixin to prohibit subclassing.""" - - __slots__ = ('__weakref__',) - - def __init_subclass__(cls, /, *args, **kwds): - if '_root' not in kwds: - raise TypeError("Cannot subclass special typing classes") - - -class _NotIterable: - """Mixin to prevent iteration, without being compatible with Iterable. - - That is, we could do:: - - def __iter__(self): raise TypeError() - - But this would make users of this mixin duck type-compatible with - collections.abc.Iterable - isinstance(foo, Iterable) would be True. - - Luckily, we can instead prevent iteration by setting __iter__ to None, which - is treated specially. - """ - - __slots__ = () - __iter__ = None - - -# Internal indicator of special typing constructs. -# See __doc__ instance attribute for specific docs. -class _SpecialForm(_Final, _NotIterable, _root=True): - __slots__ = ('_name', '__doc__', '_getitem') - - def __init__(self, getitem): - self._getitem = getitem - self._name = getitem.__name__ - self.__doc__ = getitem.__doc__ - - def __getattr__(self, item): - if item in {'__name__', '__qualname__'}: - return self._name - - raise AttributeError(item) - - def __mro_entries__(self, bases): - raise TypeError(f"Cannot subclass {self!r}") - - def __repr__(self): - return 'typing.' + self._name - - def __reduce__(self): - return self._name - - def __call__(self, *args, **kwds): - raise TypeError(f"Cannot instantiate {self!r}") - - def __or__(self, other): - return Union[self, other] - - def __ror__(self, other): - return Union[other, self] - - def __instancecheck__(self, obj): - raise TypeError(f"{self} cannot be used with isinstance()") - - def __subclasscheck__(self, cls): - raise TypeError(f"{self} cannot be used with issubclass()") - - @_tp_cache - def __getitem__(self, parameters): - return self._getitem(self, parameters) - - -class _TypedCacheSpecialForm(_SpecialForm, _root=True): - def __getitem__(self, parameters): - if not isinstance(parameters, tuple): - parameters = (parameters,) - return self._getitem(self, *parameters) - - -class _AnyMeta(type): - def __instancecheck__(self, obj): - if self is Any: - raise TypeError("typing.Any cannot be used with isinstance()") - return super().__instancecheck__(obj) - - def __repr__(self): - if self is Any: - return "typing.Any" - return super().__repr__() # respect to subclasses - - -class Any(metaclass=_AnyMeta): - """Special type indicating an unconstrained type. - - - Any is compatible with every type. - - Any assumed to have all methods. - - All values assumed to be instances of Any. - - Note that all the above statements are true from the point of view of - static type checkers. At runtime, Any should not be used with instance - checks. - """ - - def __new__(cls, *args, **kwargs): - if cls is Any: - raise TypeError("Any cannot be instantiated") - return super().__new__(cls) - - -@_SpecialForm -def NoReturn(self, parameters): - """Special type indicating functions that never return. - - Example:: - - from typing import NoReturn - - def stop() -> NoReturn: - raise Exception('no way') - - NoReturn can also be used as a bottom type, a type that - has no values. Starting in Python 3.11, the Never type should - be used for this concept instead. Type checkers should treat the two - equivalently. - """ - raise TypeError(f"{self} is not subscriptable") - -# This is semantically identical to NoReturn, but it is implemented -# separately so that type checkers can distinguish between the two -# if they want. -@_SpecialForm -def Never(self, parameters): - """The bottom type, a type that has no members. - - This can be used to define a function that should never be - called, or a function that never returns:: - - from typing import Never - - def never_call_me(arg: Never) -> None: - pass - - def int_or_str(arg: int | str) -> None: - never_call_me(arg) # type checker error - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - never_call_me(arg) # OK, arg is of type Never - """ - raise TypeError(f"{self} is not subscriptable") - - -@_SpecialForm -def Self(self, parameters): - """Used to spell the type of "self" in classes. - - Example:: - - from typing import Self - - class Foo: - def return_self(self) -> Self: - ... - return self - - This is especially useful for: - - classmethods that are used as alternative constructors - - annotating an `__enter__` method which returns self - """ - raise TypeError(f"{self} is not subscriptable") - - -@_SpecialForm -def LiteralString(self, parameters): - """Represents an arbitrary literal string. - - Example:: - - from typing import LiteralString - - def run_query(sql: LiteralString) -> None: - ... - - def caller(arbitrary_string: str, literal_string: LiteralString) -> None: - run_query("SELECT * FROM students") # OK - run_query(literal_string) # OK - run_query("SELECT * FROM " + literal_string) # OK - run_query(arbitrary_string) # type checker error - run_query( # type checker error - f"SELECT * FROM students WHERE name = {arbitrary_string}" - ) - - Only string literals and other LiteralStrings are compatible - with LiteralString. This provides a tool to help prevent - security issues such as SQL injection. - """ - raise TypeError(f"{self} is not subscriptable") - - -@_SpecialForm -def ClassVar(self, parameters): - """Special type construct to mark class variables. - - An annotation wrapped in ClassVar indicates that a given - attribute is intended to be used as a class variable and - should not be set on instances of that class. - - Usage:: - - class Starship: - stats: ClassVar[dict[str, int]] = {} # class variable - damage: int = 10 # instance variable - - ClassVar accepts only types and cannot be further subscribed. - - Note that ClassVar is not a class itself, and should not - be used with isinstance() or issubclass(). - """ - item = _type_check(parameters, f'{self} accepts only single type.', allow_special_forms=True) - return _GenericAlias(self, (item,)) - -@_SpecialForm -def Final(self, parameters): - """Special typing construct to indicate final names to type checkers. - - A final name cannot be re-assigned or overridden in a subclass. - - For example:: - - MAX_SIZE: Final = 9000 - MAX_SIZE += 1 # Error reported by type checker - - class Connection: - TIMEOUT: Final[int] = 10 - - class FastConnector(Connection): - TIMEOUT = 1 # Error reported by type checker - - There is no runtime checking of these properties. - """ - item = _type_check(parameters, f'{self} accepts only single type.', allow_special_forms=True) - return _GenericAlias(self, (item,)) - -@_SpecialForm -def Optional(self, parameters): - """Optional[X] is equivalent to Union[X, None].""" - arg = _type_check(parameters, f"{self} requires a single type.") - return Union[arg, type(None)] - -@_TypedCacheSpecialForm -@_tp_cache(typed=True) -def Literal(self, *parameters): - """Special typing form to define literal types (a.k.a. value types). - - This form can be used to indicate to type checkers that the corresponding - variable or function parameter has a value equivalent to the provided - literal (or one of several literals):: - - def validate_simple(data: Any) -> Literal[True]: # always returns True - ... - - MODE = Literal['r', 'rb', 'w', 'wb'] - def open_helper(file: str, mode: MODE) -> str: - ... - - open_helper('/some/path', 'r') # Passes type check - open_helper('/other/path', 'typo') # Error in type checker - - Literal[...] cannot be subclassed. At runtime, an arbitrary value - is allowed as type argument to Literal[...], but type checkers may - impose restrictions. - """ - # There is no '_type_check' call because arguments to Literal[...] are - # values, not types. - parameters = _flatten_literal_params(parameters) - - try: - parameters = tuple(p for p, _ in _deduplicate(list(_value_and_type_iter(parameters)))) - except TypeError: # unhashable parameters - pass - - return _LiteralGenericAlias(self, parameters) - - -@_SpecialForm -def TypeAlias(self, parameters): - """Special form for marking type aliases. - - Use TypeAlias to indicate that an assignment should - be recognized as a proper type alias definition by type - checkers. - - For example:: - - Predicate: TypeAlias = Callable[..., bool] - - It's invalid when used anywhere except as in the example above. - """ - raise TypeError(f"{self} is not subscriptable") - - -@_SpecialForm -def Concatenate(self, parameters): - """Special form for annotating higher-order functions. - - ``Concatenate`` can be used in conjunction with ``ParamSpec`` and - ``Callable`` to represent a higher-order function which adds, removes or - transforms the parameters of a callable. - - For example:: - - Callable[Concatenate[int, P], int] - - See PEP 612 for detailed information. - """ - if parameters == (): - raise TypeError("Cannot take a Concatenate of no types.") - if not isinstance(parameters, tuple): - parameters = (parameters,) - if not (parameters[-1] is ... or isinstance(parameters[-1], ParamSpec)): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable or ellipsis.") - msg = "Concatenate[arg, ...]: each arg must be a type." - parameters = (*(_type_check(p, msg) for p in parameters[:-1]), parameters[-1]) - return _ConcatenateGenericAlias(self, parameters) - - -@_SpecialForm -def TypeGuard(self, parameters): - """Special typing construct for marking user-defined type predicate functions. - - ``TypeGuard`` can be used to annotate the return type of a user-defined - type predicate function. ``TypeGuard`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean. - - ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type predicate". - - Sometimes it would be convenient to use a user-defined boolean function - as a type predicate. Such a function should use ``TypeGuard[...]`` or - ``TypeIs[...]`` as its return type to alert static type checkers to - this intention. ``TypeGuard`` should be used over ``TypeIs`` when narrowing - from an incompatible type (e.g., ``list[object]`` to ``list[int]``) or when - the function does not return ``True`` for all instances of the narrowed type. - - Using ``-> TypeGuard[NarrowedType]`` tells the static type checker that - for a given function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is ``NarrowedType``. - - For example:: - - def is_str_list(val: list[object]) -> TypeGuard[list[str]]: - '''Determines whether all objects in the list are strings''' - return all(isinstance(x, str) for x in val) - - def func1(val: list[object]): - if is_str_list(val): - # Type of ``val`` is narrowed to ``list[str]``. - print(" ".join(val)) - else: - # Type of ``val`` remains as ``list[object]``. - print("Not a list of strings!") - - Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower - form of ``TypeA`` (it can even be a wider form) and this may lead to - type-unsafe results. The main reason is to allow for things like - narrowing ``list[object]`` to ``list[str]`` even though the latter is not - a subtype of the former, since ``list`` is invariant. The responsibility of - writing type-safe type predicates is left to the user. - - ``TypeGuard`` also works with type variables. For more information, see - PEP 647 (User-Defined Type Guards). - """ - item = _type_check(parameters, f'{self} accepts only single type.') - return _GenericAlias(self, (item,)) - - -@_SpecialForm -def TypeIs(self, parameters): - """Special typing construct for marking user-defined type predicate functions. - - ``TypeIs`` can be used to annotate the return type of a user-defined - type predicate function. ``TypeIs`` only accepts a single type argument. - At runtime, functions marked this way should return a boolean and accept - at least one argument. - - ``TypeIs`` aims to benefit *type narrowing* -- a technique used by static - type checkers to determine a more precise type of an expression within a - program's code flow. Usually type narrowing is done by analyzing - conditional code flow and applying the narrowing to a block of code. The - conditional expression here is sometimes referred to as a "type predicate". - - Sometimes it would be convenient to use a user-defined boolean function - as a type predicate. Such a function should use ``TypeIs[...]`` or - ``TypeGuard[...]`` as its return type to alert static type checkers to - this intention. ``TypeIs`` usually has more intuitive behavior than - ``TypeGuard``, but it cannot be used when the input and output types - are incompatible (e.g., ``list[object]`` to ``list[int]``) or when the - function does not return ``True`` for all instances of the narrowed type. - - Using ``-> TypeIs[NarrowedType]`` tells the static type checker that for - a given function: - - 1. The return value is a boolean. - 2. If the return value is ``True``, the type of its argument - is the intersection of the argument's original type and - ``NarrowedType``. - 3. If the return value is ``False``, the type of its argument - is narrowed to exclude ``NarrowedType``. - - For example:: - - from typing import assert_type, final, TypeIs - - class Parent: pass - class Child(Parent): pass - @final - class Unrelated: pass - - def is_parent(val: object) -> TypeIs[Parent]: - return isinstance(val, Parent) - - def run(arg: Child | Unrelated): - if is_parent(arg): - # Type of ``arg`` is narrowed to the intersection - # of ``Parent`` and ``Child``, which is equivalent to - # ``Child``. - assert_type(arg, Child) - else: - # Type of ``arg`` is narrowed to exclude ``Parent``, - # so only ``Unrelated`` is left. - assert_type(arg, Unrelated) - - The type inside ``TypeIs`` must be consistent with the type of the - function's argument; if it is not, static type checkers will raise - an error. An incorrectly written ``TypeIs`` function can lead to - unsound behavior in the type system; it is the user's responsibility - to write such functions in a type-safe manner. - - ``TypeIs`` also works with type variables. For more information, see - PEP 742 (Narrowing types with ``TypeIs``). - """ - item = _type_check(parameters, f'{self} accepts only single type.') - return _GenericAlias(self, (item,)) - - -def _make_forward_ref(code, *, parent_fwdref=None, **kwargs): - if parent_fwdref is not None: - if parent_fwdref.__forward_module__ is not None: - kwargs['module'] = parent_fwdref.__forward_module__ - if parent_fwdref.__owner__ is not None: - kwargs['owner'] = parent_fwdref.__owner__ - forward_ref = _lazy_annotationlib.ForwardRef(code, **kwargs) - # For compatibility, eagerly compile the forwardref's code. - forward_ref.__forward_code__ - return forward_ref - - -def evaluate_forward_ref( - forward_ref, - *, - owner=None, - globals=None, - locals=None, - type_params=None, - format=None, - _recursive_guard=frozenset(), -): - """Evaluate a forward reference as a type hint. - - This is similar to calling the ForwardRef.evaluate() method, - but unlike that method, evaluate_forward_ref() also - recursively evaluates forward references nested within the type hint. - - *forward_ref* must be an instance of ForwardRef. *owner*, if given, - should be the object that holds the annotations that the forward reference - derived from, such as a module, class object, or function. It is used to - infer the namespaces to use for looking up names. *globals* and *locals* - can also be explicitly given to provide the global and local namespaces. - *type_params* is a tuple of type parameters that are in scope when - evaluating the forward reference. This parameter should be provided (though - it may be an empty tuple) if *owner* is not given and the forward reference - does not already have an owner set. *format* specifies the format of the - annotation and is a member of the annotationlib.Format enum, defaulting to - VALUE. - - """ - if format == _lazy_annotationlib.Format.STRING: - return forward_ref.__forward_arg__ - if forward_ref.__forward_arg__ in _recursive_guard: - return forward_ref - - if format is None: - format = _lazy_annotationlib.Format.VALUE - value = forward_ref.evaluate(globals=globals, locals=locals, - type_params=type_params, owner=owner, format=format) - - if (isinstance(value, _lazy_annotationlib.ForwardRef) - and format == _lazy_annotationlib.Format.FORWARDREF): - return value - - if isinstance(value, str): - value = _make_forward_ref(value, module=forward_ref.__forward_module__, - owner=owner or forward_ref.__owner__, - is_argument=forward_ref.__forward_is_argument__, - is_class=forward_ref.__forward_is_class__) - if owner is None: - owner = forward_ref.__owner__ - return _eval_type( - value, - globals, - locals, - type_params, - recursive_guard=_recursive_guard | {forward_ref.__forward_arg__}, - format=format, - owner=owner, - parent_fwdref=forward_ref, - ) - - -def _is_unpacked_typevartuple(x: Any) -> bool: - # Need to check 'is True' here - # See: https://github.com/python/cpython/issues/137706 - return ((not isinstance(x, type)) and - getattr(x, '__typing_is_unpacked_typevartuple__', False) is True) - - -def _is_typevar_like(x: Any) -> bool: - return isinstance(x, (TypeVar, ParamSpec)) or _is_unpacked_typevartuple(x) - - -def _typevar_subst(self, arg): - msg = "Parameters to generic types must be types." - arg = _type_check(arg, msg, is_argument=True) - if ((isinstance(arg, _GenericAlias) and arg.__origin__ is Unpack) or - (isinstance(arg, GenericAlias) and getattr(arg, '__unpacked__', False))): - raise TypeError(f"{arg} is not valid as type argument") - return arg - - -def _typevartuple_prepare_subst(self, alias, args): - params = alias.__parameters__ - typevartuple_index = params.index(self) - for param in params[typevartuple_index + 1:]: - if isinstance(param, TypeVarTuple): - raise TypeError(f"More than one TypeVarTuple parameter in {alias}") - - alen = len(args) - plen = len(params) - left = typevartuple_index - right = plen - typevartuple_index - 1 - var_tuple_index = None - fillarg = None - for k, arg in enumerate(args): - if not isinstance(arg, type): - subargs = getattr(arg, '__typing_unpacked_tuple_args__', None) - if subargs and len(subargs) == 2 and subargs[-1] is ...: - if var_tuple_index is not None: - raise TypeError("More than one unpacked arbitrary-length tuple argument") - var_tuple_index = k - fillarg = subargs[0] - if var_tuple_index is not None: - left = min(left, var_tuple_index) - right = min(right, alen - var_tuple_index - 1) - elif left + right > alen: - raise TypeError(f"Too few arguments for {alias};" - f" actual {alen}, expected at least {plen-1}") - if left == alen - right and self.has_default(): - replacement = _unpack_args(self.__default__) - else: - replacement = args[left: alen - right] - - return ( - *args[:left], - *([fillarg]*(typevartuple_index - left)), - replacement, - *([fillarg]*(plen - right - left - typevartuple_index - 1)), - *args[alen - right:], - ) - - -def _paramspec_subst(self, arg): - if isinstance(arg, (list, tuple)): - arg = tuple(_type_check(a, "Expected a type.") for a in arg) - elif not _is_param_expr(arg): - raise TypeError(f"Expected a list of types, an ellipsis, " - f"ParamSpec, or Concatenate. Got {arg}") - return arg - - -def _paramspec_prepare_subst(self, alias, args): - params = alias.__parameters__ - i = params.index(self) - if i == len(args) and self.has_default(): - args = (*args, self.__default__) - if i >= len(args): - raise TypeError(f"Too few arguments for {alias}") - # Special case where Z[[int, str, bool]] == Z[int, str, bool] in PEP 612. - if len(params) == 1 and not _is_param_expr(args[0]): - assert i == 0 - args = (args,) - # Convert lists to tuples to help other libraries cache the results. - elif isinstance(args[i], list): - args = (*args[:i], tuple(args[i]), *args[i+1:]) - return args - - -@_tp_cache -def _generic_class_getitem(cls, args): - """Parameterizes a generic class. - - At least, parameterizing a generic class is the *main* thing this method - does. For example, for some generic class `Foo`, this is called when we - do `Foo[int]` - there, with `cls=Foo` and `args=int`. - - However, note that this method is also called when defining generic - classes in the first place with `class Foo(Generic[T]): ...`. - """ - if not isinstance(args, tuple): - args = (args,) - - args = tuple(_type_convert(p) for p in args) - is_generic_or_protocol = cls in (Generic, Protocol) - - if is_generic_or_protocol: - # Generic and Protocol can only be subscripted with unique type variables. - if not args: - raise TypeError( - f"Parameter list to {cls.__qualname__}[...] cannot be empty" - ) - if not all(_is_typevar_like(p) for p in args): - raise TypeError( - f"Parameters to {cls.__name__}[...] must all be type variables " - f"or parameter specification variables.") - if len(set(args)) != len(args): - raise TypeError( - f"Parameters to {cls.__name__}[...] must all be unique") - else: - # Subscripting a regular Generic subclass. - try: - parameters = cls.__parameters__ - except AttributeError as e: - init_subclass = getattr(cls, '__init_subclass__', None) - if init_subclass not in {None, Generic.__init_subclass__}: - e.add_note( - f"Note: this exception may have been caused by " - f"{init_subclass.__qualname__!r} (or the " - f"'__init_subclass__' method on a superclass) not " - f"calling 'super().__init_subclass__()'" - ) - raise - for param in parameters: - prepare = getattr(param, '__typing_prepare_subst__', None) - if prepare is not None: - args = prepare(cls, args) - _check_generic_specialization(cls, args) - - new_args = [] - for param, new_arg in zip(parameters, args): - if isinstance(param, TypeVarTuple): - new_args.extend(new_arg) - else: - new_args.append(new_arg) - args = tuple(new_args) - - return _GenericAlias(cls, args) - - -def _generic_init_subclass(cls, *args, **kwargs): - super(Generic, cls).__init_subclass__(*args, **kwargs) - tvars = [] - if '__orig_bases__' in cls.__dict__: - error = Generic in cls.__orig_bases__ - else: - error = (Generic in cls.__bases__ and - cls.__name__ != 'Protocol' and - type(cls) != _TypedDictMeta) - if error: - raise TypeError("Cannot inherit from plain Generic") - if '__orig_bases__' in cls.__dict__: - tvars = _collect_type_parameters(cls.__orig_bases__) - # Look for Generic[T1, ..., Tn]. - # If found, tvars must be a subset of it. - # If not found, tvars is it. - # Also check for and reject plain Generic, - # and reject multiple Generic[...]. - gvars = None - for base in cls.__orig_bases__: - if (isinstance(base, _GenericAlias) and - base.__origin__ is Generic): - if gvars is not None: - raise TypeError( - "Cannot inherit from Generic[...] multiple times.") - gvars = base.__parameters__ - if gvars is not None: - tvarset = set(tvars) - gvarset = set(gvars) - if not tvarset <= gvarset: - s_vars = ', '.join(str(t) for t in tvars if t not in gvarset) - s_args = ', '.join(str(g) for g in gvars) - raise TypeError(f"Some type variables ({s_vars}) are" - f" not listed in Generic[{s_args}]") - tvars = gvars - cls.__parameters__ = tuple(tvars) - - -def _is_dunder(attr): - return attr.startswith('__') and attr.endswith('__') - -class _BaseGenericAlias(_Final, _root=True): - """The central part of the internal API. - - This represents a generic version of type 'origin' with type arguments 'params'. - There are two kind of these aliases: user defined and special. The special ones - are wrappers around builtin collections and ABCs in collections.abc. These must - have 'name' always set. If 'inst' is False, then the alias can't be instantiated; - this is used by e.g. typing.List and typing.Dict. - """ - - def __init__(self, origin, *, inst=True, name=None): - self._inst = inst - self._name = name - self.__origin__ = origin - self.__slots__ = None # This is not documented. - - def __call__(self, *args, **kwargs): - if not self._inst: - raise TypeError(f"Type {self._name} cannot be instantiated; " - f"use {self.__origin__.__name__}() instead") - result = self.__origin__(*args, **kwargs) - try: - result.__orig_class__ = self - # Some objects raise TypeError (or something even more exotic) - # if you try to set attributes on them; we guard against that here - except Exception: - pass - return result - - def __mro_entries__(self, bases): - res = [] - if self.__origin__ not in bases: - res.append(self.__origin__) - - # Check if any base that occurs after us in `bases` is either itself a - # subclass of Generic, or something which will add a subclass of Generic - # to `__bases__` via its `__mro_entries__`. If not, add Generic - # ourselves. The goal is to ensure that Generic (or a subclass) will - # appear exactly once in the final bases tuple. If we let it appear - # multiple times, we risk "can't form a consistent MRO" errors. - i = bases.index(self) - for b in bases[i+1:]: - if isinstance(b, _BaseGenericAlias): - break - if not isinstance(b, type): - meth = getattr(b, "__mro_entries__", None) - new_bases = meth(bases) if meth else None - if ( - isinstance(new_bases, tuple) and - any( - isinstance(b2, type) and issubclass(b2, Generic) - for b2 in new_bases - ) - ): - break - elif issubclass(b, Generic): - break - else: - res.append(Generic) - return tuple(res) - - def __getattr__(self, attr): - if attr in {'__name__', '__qualname__'}: - return self._name or self.__origin__.__name__ - - # We are careful for copy and pickle. - # Also for simplicity we don't relay any dunder names - if '__origin__' in self.__dict__ and not _is_dunder(attr): - return getattr(self.__origin__, attr) - raise AttributeError(attr) - - def __setattr__(self, attr, val): - if _is_dunder(attr) or attr in {'_name', '_inst', '_nparams', '_defaults'}: - super().__setattr__(attr, val) - else: - setattr(self.__origin__, attr, val) - - def __instancecheck__(self, obj): - return self.__subclasscheck__(type(obj)) - - def __subclasscheck__(self, cls): - raise TypeError("Subscripted generics cannot be used with" - " class and instance checks") - - def __dir__(self): - return list(set(super().__dir__() - + [attr for attr in dir(self.__origin__) if not _is_dunder(attr)])) - - -# Special typing constructs Union, Optional, Generic, Callable and Tuple -# use three special attributes for internal bookkeeping of generic types: -# * __parameters__ is a tuple of unique free type parameters of a generic -# type, for example, Dict[T, T].__parameters__ == (T,); -# * __origin__ keeps a reference to a type that was subscripted, -# e.g., Union[T, int].__origin__ == Union, or the non-generic version of -# the type. -# * __args__ is a tuple of all arguments used in subscripting, -# e.g., Dict[T, int].__args__ == (T, int). - - -class _GenericAlias(_BaseGenericAlias, _root=True): - # The type of parameterized generics. - # - # That is, for example, `type(List[int])` is `_GenericAlias`. - # - # Objects which are instances of this class include: - # * Parameterized container types, e.g. `Tuple[int]`, `List[int]`. - # * Note that native container types, e.g. `tuple`, `list`, use - # `types.GenericAlias` instead. - # * Parameterized classes: - # class C[T]: pass - # # C[int] is a _GenericAlias - # * `Callable` aliases, generic `Callable` aliases, and - # parameterized `Callable` aliases: - # T = TypeVar('T') - # # _CallableGenericAlias inherits from _GenericAlias. - # A = Callable[[], None] # _CallableGenericAlias - # B = Callable[[T], None] # _CallableGenericAlias - # C = B[int] # _CallableGenericAlias - # * Parameterized `Final`, `ClassVar`, `TypeGuard`, and `TypeIs`: - # # All _GenericAlias - # Final[int] - # ClassVar[float] - # TypeGuard[bool] - # TypeIs[range] - - def __init__(self, origin, args, *, inst=True, name=None): - super().__init__(origin, inst=inst, name=name) - if not isinstance(args, tuple): - args = (args,) - self.__args__ = tuple(... if a is _TypingEllipsis else - a for a in args) - enforce_default_ordering = origin in (Generic, Protocol) - self.__parameters__ = _collect_type_parameters( - args, - enforce_default_ordering=enforce_default_ordering, - ) - if not name: - self.__module__ = origin.__module__ - - def __eq__(self, other): - if not isinstance(other, _GenericAlias): - return NotImplemented - return (self.__origin__ == other.__origin__ - and self.__args__ == other.__args__) - - def __hash__(self): - return hash((self.__origin__, self.__args__)) - - def __or__(self, right): - return Union[self, right] - - def __ror__(self, left): - return Union[left, self] - - @_tp_cache - def __getitem__(self, args): - # Parameterizes an already-parameterized object. - # - # For example, we arrive here doing something like: - # T1 = TypeVar('T1') - # T2 = TypeVar('T2') - # T3 = TypeVar('T3') - # class A(Generic[T1]): pass - # B = A[T2] # B is a _GenericAlias - # C = B[T3] # Invokes _GenericAlias.__getitem__ - # - # We also arrive here when parameterizing a generic `Callable` alias: - # T = TypeVar('T') - # C = Callable[[T], None] - # C[int] # Invokes _GenericAlias.__getitem__ - - if self.__origin__ in (Generic, Protocol): - # Can't subscript Generic[...] or Protocol[...]. - raise TypeError(f"Cannot subscript already-subscripted {self}") - if not self.__parameters__: - raise TypeError(f"{self} is not a generic class") - - # Preprocess `args`. - if not isinstance(args, tuple): - args = (args,) - args = _unpack_args(*(_type_convert(p) for p in args)) - new_args = self._determine_new_args(args) - r = self.copy_with(new_args) - return r - - def _determine_new_args(self, args): - # Determines new __args__ for __getitem__. - # - # For example, suppose we had: - # T1 = TypeVar('T1') - # T2 = TypeVar('T2') - # class A(Generic[T1, T2]): pass - # T3 = TypeVar('T3') - # B = A[int, T3] - # C = B[str] - # `B.__args__` is `(int, T3)`, so `C.__args__` should be `(int, str)`. - # Unfortunately, this is harder than it looks, because if `T3` is - # anything more exotic than a plain `TypeVar`, we need to consider - # edge cases. - - params = self.__parameters__ - # In the example above, this would be {T3: str} - for param in params: - prepare = getattr(param, '__typing_prepare_subst__', None) - if prepare is not None: - args = prepare(self, args) - alen = len(args) - plen = len(params) - if alen != plen: - raise TypeError(f"Too {'many' if alen > plen else 'few'} arguments for {self};" - f" actual {alen}, expected {plen}") - new_arg_by_param = dict(zip(params, args)) - return tuple(self._make_substitution(self.__args__, new_arg_by_param)) - - def _make_substitution(self, args, new_arg_by_param): - """Create a list of new type arguments.""" - new_args = [] - for old_arg in args: - if isinstance(old_arg, type): - new_args.append(old_arg) - continue - - substfunc = getattr(old_arg, '__typing_subst__', None) - if substfunc: - new_arg = substfunc(new_arg_by_param[old_arg]) - else: - subparams = getattr(old_arg, '__parameters__', ()) - if not subparams: - new_arg = old_arg - else: - subargs = [] - for x in subparams: - if isinstance(x, TypeVarTuple): - subargs.extend(new_arg_by_param[x]) - else: - subargs.append(new_arg_by_param[x]) - new_arg = old_arg[tuple(subargs)] - - if self.__origin__ == collections.abc.Callable and isinstance(new_arg, tuple): - # Consider the following `Callable`. - # C = Callable[[int], str] - # Here, `C.__args__` should be (int, str) - NOT ([int], str). - # That means that if we had something like... - # P = ParamSpec('P') - # T = TypeVar('T') - # C = Callable[P, T] - # D = C[[int, str], float] - # ...we need to be careful; `new_args` should end up as - # `(int, str, float)` rather than `([int, str], float)`. - new_args.extend(new_arg) - elif _is_unpacked_typevartuple(old_arg): - # Consider the following `_GenericAlias`, `B`: - # class A(Generic[*Ts]): ... - # B = A[T, *Ts] - # If we then do: - # B[float, int, str] - # The `new_arg` corresponding to `T` will be `float`, and the - # `new_arg` corresponding to `*Ts` will be `(int, str)`. We - # should join all these types together in a flat list - # `(float, int, str)` - so again, we should `extend`. - new_args.extend(new_arg) - elif isinstance(old_arg, tuple): - # Corner case: - # P = ParamSpec('P') - # T = TypeVar('T') - # class Base(Generic[P]): ... - # Can be substituted like this: - # X = Base[[int, T]] - # In this case, `old_arg` will be a tuple: - new_args.append( - tuple(self._make_substitution(old_arg, new_arg_by_param)), - ) - else: - new_args.append(new_arg) - return new_args - - def copy_with(self, args): - return self.__class__(self.__origin__, args, name=self._name, inst=self._inst) - - def __repr__(self): - if self._name: - name = 'typing.' + self._name - else: - name = _type_repr(self.__origin__) - if self.__args__: - args = ", ".join([_type_repr(a) for a in self.__args__]) - else: - # To ensure the repr is eval-able. - args = "()" - return f'{name}[{args}]' - - def __reduce__(self): - if self._name: - origin = globals()[self._name] - else: - origin = self.__origin__ - args = tuple(self.__args__) - if len(args) == 1 and not isinstance(args[0], tuple): - args, = args - return operator.getitem, (origin, args) - - def __mro_entries__(self, bases): - if isinstance(self.__origin__, _SpecialForm): - raise TypeError(f"Cannot subclass {self!r}") - - if self._name: # generic version of an ABC or built-in class - return super().__mro_entries__(bases) - if self.__origin__ is Generic: - if Protocol in bases: - return () - i = bases.index(self) - for b in bases[i+1:]: - if isinstance(b, _BaseGenericAlias) and b is not self: - return () - return (self.__origin__,) - - def __iter__(self): - yield Unpack[self] - - -# _nparams is the number of accepted parameters, e.g. 0 for Hashable, -# 1 for List and 2 for Dict. It may be -1 if variable number of -# parameters are accepted (needs custom __getitem__). - -class _SpecialGenericAlias(_NotIterable, _BaseGenericAlias, _root=True): - def __init__(self, origin, nparams, *, inst=True, name=None, defaults=()): - if name is None: - name = origin.__name__ - super().__init__(origin, inst=inst, name=name) - self._nparams = nparams - self._defaults = defaults - if origin.__module__ == 'builtins': - self.__doc__ = f'Deprecated alias to {origin.__qualname__}.' - else: - self.__doc__ = f'Deprecated alias to {origin.__module__}.{origin.__qualname__}.' - - @_tp_cache - def __getitem__(self, params): - if not isinstance(params, tuple): - params = (params,) - msg = "Parameters to generic types must be types." - params = tuple(_type_check(p, msg) for p in params) - if (self._defaults - and len(params) < self._nparams - and len(params) + len(self._defaults) >= self._nparams - ): - params = (*params, *self._defaults[len(params) - self._nparams:]) - actual_len = len(params) - - if actual_len != self._nparams: - if self._defaults: - expected = f"at least {self._nparams - len(self._defaults)}" - else: - expected = str(self._nparams) - if not self._nparams: - raise TypeError(f"{self} is not a generic class") - raise TypeError(f"Too {'many' if actual_len > self._nparams else 'few'} arguments for {self};" - f" actual {actual_len}, expected {expected}") - return self.copy_with(params) - - def copy_with(self, params): - return _GenericAlias(self.__origin__, params, - name=self._name, inst=self._inst) - - def __repr__(self): - return 'typing.' + self._name - - def __subclasscheck__(self, cls): - if isinstance(cls, _SpecialGenericAlias): - return issubclass(cls.__origin__, self.__origin__) - if not isinstance(cls, _GenericAlias): - return issubclass(cls, self.__origin__) - return super().__subclasscheck__(cls) - - def __reduce__(self): - return self._name - - def __or__(self, right): - return Union[self, right] - - def __ror__(self, left): - return Union[left, self] - - -class _DeprecatedGenericAlias(_SpecialGenericAlias, _root=True): - def __init__( - self, origin, nparams, *, removal_version, inst=True, name=None - ): - super().__init__(origin, nparams, inst=inst, name=name) - self._removal_version = removal_version - - def __instancecheck__(self, inst): - import warnings - warnings._deprecated( - f"{self.__module__}.{self._name}", remove=self._removal_version - ) - return super().__instancecheck__(inst) - - -class _CallableGenericAlias(_NotIterable, _GenericAlias, _root=True): - def __repr__(self): - assert self._name == 'Callable' - args = self.__args__ - if len(args) == 2 and _is_param_expr(args[0]): - return super().__repr__() - return (f'typing.Callable' - f'[[{", ".join([_type_repr(a) for a in args[:-1]])}], ' - f'{_type_repr(args[-1])}]') - - def __reduce__(self): - args = self.__args__ - if not (len(args) == 2 and _is_param_expr(args[0])): - args = list(args[:-1]), args[-1] - return operator.getitem, (Callable, args) - - -class _CallableType(_SpecialGenericAlias, _root=True): - def copy_with(self, params): - return _CallableGenericAlias(self.__origin__, params, - name=self._name, inst=self._inst) - - def __getitem__(self, params): - if not isinstance(params, tuple) or len(params) != 2: - raise TypeError("Callable must be used as " - "Callable[[arg, ...], result].") - args, result = params - # This relaxes what args can be on purpose to allow things like - # PEP 612 ParamSpec. Responsibility for whether a user is using - # Callable[...] properly is deferred to static type checkers. - if isinstance(args, list): - params = (tuple(args), result) - else: - params = (args, result) - return self.__getitem_inner__(params) - - @_tp_cache - def __getitem_inner__(self, params): - args, result = params - msg = "Callable[args, result]: result must be a type." - result = _type_check(result, msg) - if args is Ellipsis: - return self.copy_with((_TypingEllipsis, result)) - if not isinstance(args, tuple): - args = (args,) - args = tuple(_type_convert(arg) for arg in args) - params = args + (result,) - return self.copy_with(params) - - -class _TupleType(_SpecialGenericAlias, _root=True): - @_tp_cache - def __getitem__(self, params): - if not isinstance(params, tuple): - params = (params,) - if len(params) >= 2 and params[-1] is ...: - msg = "Tuple[t, ...]: t must be a type." - params = tuple(_type_check(p, msg) for p in params[:-1]) - return self.copy_with((*params, _TypingEllipsis)) - msg = "Tuple[t0, t1, ...]: each t must be a type." - params = tuple(_type_check(p, msg) for p in params) - return self.copy_with(params) - - -class _UnionGenericAliasMeta(type): - def __instancecheck__(self, inst: object) -> bool: - import warnings - warnings._deprecated("_UnionGenericAlias", remove=(3, 17)) - return isinstance(inst, Union) - - def __subclasscheck__(self, inst: type) -> bool: - import warnings - warnings._deprecated("_UnionGenericAlias", remove=(3, 17)) - return issubclass(inst, Union) - - def __eq__(self, other): - import warnings - warnings._deprecated("_UnionGenericAlias", remove=(3, 17)) - if other is _UnionGenericAlias or other is Union: - return True - return NotImplemented - - def __hash__(self): - return hash(Union) - - -class _UnionGenericAlias(metaclass=_UnionGenericAliasMeta): - """Compatibility hack. - - A class named _UnionGenericAlias used to be used to implement - typing.Union. This class exists to serve as a shim to preserve - the meaning of some code that used to use _UnionGenericAlias - directly. - - """ - def __new__(cls, self_cls, parameters, /, *, name=None): - import warnings - warnings._deprecated("_UnionGenericAlias", remove=(3, 17)) - return Union[parameters] - - -def _value_and_type_iter(parameters): - return ((p, type(p)) for p in parameters) - - -class _LiteralGenericAlias(_GenericAlias, _root=True): - def __eq__(self, other): - if not isinstance(other, _LiteralGenericAlias): - return NotImplemented - - return set(_value_and_type_iter(self.__args__)) == set(_value_and_type_iter(other.__args__)) - - def __hash__(self): - return hash(frozenset(_value_and_type_iter(self.__args__))) - - -class _ConcatenateGenericAlias(_GenericAlias, _root=True): - def copy_with(self, params): - if isinstance(params[-1], (list, tuple)): - return (*params[:-1], *params[-1]) - if isinstance(params[-1], _ConcatenateGenericAlias): - params = (*params[:-1], *params[-1].__args__) - return super().copy_with(params) - - -@_SpecialForm -def Unpack(self, parameters): - """Type unpack operator. - - The type unpack operator takes the child types from some container type, - such as `tuple[int, str]` or a `TypeVarTuple`, and 'pulls them out'. - - For example:: - - # For some generic class `Foo`: - Foo[Unpack[tuple[int, str]]] # Equivalent to Foo[int, str] - - Ts = TypeVarTuple('Ts') - # Specifies that `Bar` is generic in an arbitrary number of types. - # (Think of `Ts` as a tuple of an arbitrary number of individual - # `TypeVar`s, which the `Unpack` is 'pulling out' directly into the - # `Generic[]`.) - class Bar(Generic[Unpack[Ts]]): ... - Bar[int] # Valid - Bar[int, str] # Also valid - - From Python 3.11, this can also be done using the `*` operator:: - - Foo[*tuple[int, str]] - class Bar(Generic[*Ts]): ... - - And from Python 3.12, it can be done using built-in syntax for generics:: - - Foo[*tuple[int, str]] - class Bar[*Ts]: ... - - The operator can also be used along with a `TypedDict` to annotate - `**kwargs` in a function signature:: - - class Movie(TypedDict): - name: str - year: int - - # This function expects two keyword arguments - *name* of type `str` and - # *year* of type `int`. - def foo(**kwargs: Unpack[Movie]): ... - - Note that there is only some runtime checking of this operator. Not - everything the runtime allows may be accepted by static type checkers. - - For more information, see PEPs 646 and 692. - """ - item = _type_check(parameters, f'{self} accepts only single type.') - return _UnpackGenericAlias(origin=self, args=(item,)) - - -class _UnpackGenericAlias(_GenericAlias, _root=True): - def __repr__(self): - # `Unpack` only takes one argument, so __args__ should contain only - # a single item. - return f'typing.Unpack[{_type_repr(self.__args__[0])}]' - - def __getitem__(self, args): - if self.__typing_is_unpacked_typevartuple__: - return args - return super().__getitem__(args) - - @property - def __typing_unpacked_tuple_args__(self): - assert self.__origin__ is Unpack - assert len(self.__args__) == 1 - arg, = self.__args__ - if isinstance(arg, (_GenericAlias, types.GenericAlias)): - if arg.__origin__ is not tuple: - raise TypeError("Unpack[...] must be used with a tuple type") - return arg.__args__ - return None - - @property - def __typing_is_unpacked_typevartuple__(self): - assert self.__origin__ is Unpack - assert len(self.__args__) == 1 - return isinstance(self.__args__[0], TypeVarTuple) - - -class _TypingEllipsis: - """Internal placeholder for ... (ellipsis).""" - - -_TYPING_INTERNALS = frozenset({ - '__parameters__', '__orig_bases__', '__orig_class__', - '_is_protocol', '_is_runtime_protocol', '__protocol_attrs__', - '__non_callable_proto_members__', '__type_params__', -}) - -_SPECIAL_NAMES = frozenset({ - '__abstractmethods__', '__annotations__', '__dict__', '__doc__', - '__init__', '__module__', '__new__', '__slots__', - '__subclasshook__', '__weakref__', '__class_getitem__', - '__match_args__', '__static_attributes__', '__firstlineno__', - '__annotate__', '__annotate_func__', '__annotations_cache__', -}) - -# These special attributes will be not collected as protocol members. -EXCLUDED_ATTRIBUTES = _TYPING_INTERNALS | _SPECIAL_NAMES | {'_MutableMapping__marker'} - - -def _get_protocol_attrs(cls): - """Collect protocol members from a protocol class objects. - - This includes names actually defined in the class dictionary, as well - as names that appear in annotations. Special names (above) are skipped. - """ - attrs = set() - for base in cls.__mro__[:-1]: # without object - if base.__name__ in {'Protocol', 'Generic'}: - continue - try: - annotations = base.__annotations__ - except Exception: - # Only go through annotationlib to handle deferred annotations if we need to - annotations = _lazy_annotationlib.get_annotations( - base, format=_lazy_annotationlib.Format.FORWARDREF - ) - for attr in (*base.__dict__, *annotations): - if not attr.startswith('_abc_') and attr not in EXCLUDED_ATTRIBUTES: - attrs.add(attr) - return attrs - - -def _no_init_or_replace_init(self, *args, **kwargs): - cls = type(self) - - if cls._is_protocol: - raise TypeError('Protocols cannot be instantiated') - - # Already using a custom `__init__`. No need to calculate correct - # `__init__` to call. This can lead to RecursionError. See bpo-45121. - if cls.__init__ is not _no_init_or_replace_init: - return - - # Initially, `__init__` of a protocol subclass is set to `_no_init_or_replace_init`. - # The first instantiation of the subclass will call `_no_init_or_replace_init` which - # searches for a proper new `__init__` in the MRO. The new `__init__` - # replaces the subclass' old `__init__` (ie `_no_init_or_replace_init`). Subsequent - # instantiation of the protocol subclass will thus use the new - # `__init__` and no longer call `_no_init_or_replace_init`. - for base in cls.__mro__: - init = base.__dict__.get('__init__', _no_init_or_replace_init) - if init is not _no_init_or_replace_init: - cls.__init__ = init - break - else: - # should not happen - cls.__init__ = object.__init__ - - cls.__init__(self, *args, **kwargs) - - -def _caller(depth=1, default='__main__'): - try: - return sys._getframemodulename(depth + 1) or default - except AttributeError: # For platforms without _getframemodulename() - pass - try: - return sys._getframe(depth + 1).f_globals.get('__name__', default) - except (AttributeError, ValueError): # For platforms without _getframe() - pass - return None - -def _allow_reckless_class_checks(depth=2): - """Allow instance and class checks for special stdlib modules. - - The abc and functools modules indiscriminately call isinstance() and - issubclass() on the whole MRO of a user class, which may contain protocols. - """ - return _caller(depth) in {'abc', 'functools', None} - - -_PROTO_ALLOWLIST = { - 'collections.abc': [ - 'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable', - 'AsyncIterator', 'Hashable', 'Sized', 'Container', 'Collection', - 'Reversible', 'Buffer', - ], - 'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'], - 'io': ['Reader', 'Writer'], - 'os': ['PathLike'], -} - - -@functools.cache -def _lazy_load_getattr_static(): - # Import getattr_static lazily so as not to slow down the import of typing.py - # Cache the result so we don't slow down _ProtocolMeta.__instancecheck__ unnecessarily - from inspect import getattr_static - return getattr_static - - -_cleanups.append(_lazy_load_getattr_static.cache_clear) - -def _pickle_psargs(psargs): - return ParamSpecArgs, (psargs.__origin__,) - -copyreg.pickle(ParamSpecArgs, _pickle_psargs) - -def _pickle_pskwargs(pskwargs): - return ParamSpecKwargs, (pskwargs.__origin__,) - -copyreg.pickle(ParamSpecKwargs, _pickle_pskwargs) - -del _pickle_psargs, _pickle_pskwargs - - -# Preload these once, as globals, as a micro-optimisation. -# This makes a significant difference to the time it takes -# to do `isinstance()`/`issubclass()` checks -# against runtime-checkable protocols with only one callable member. -_abc_instancecheck = ABCMeta.__instancecheck__ -_abc_subclasscheck = ABCMeta.__subclasscheck__ - - -def _type_check_issubclass_arg_1(arg): - """Raise TypeError if `arg` is not an instance of `type` - in `issubclass(arg, <protocol>)`. - - In most cases, this is verified by type.__subclasscheck__. - Checking it again unnecessarily would slow down issubclass() checks, - so, we don't perform this check unless we absolutely have to. - - For various error paths, however, - we want to ensure that *this* error message is shown to the user - where relevant, rather than a typing.py-specific error message. - """ - if not isinstance(arg, type): - # Same error message as for issubclass(1, int). - raise TypeError('issubclass() arg 1 must be a class') - - -class _ProtocolMeta(ABCMeta): - # This metaclass is somewhat unfortunate, - # but is necessary for several reasons... - def __new__(mcls, name, bases, namespace, /, **kwargs): - if name == "Protocol" and bases == (Generic,): - pass - elif Protocol in bases: - for base in bases: - if not ( - base in {object, Generic} - or base.__name__ in _PROTO_ALLOWLIST.get(base.__module__, []) - or ( - issubclass(base, Generic) - and getattr(base, "_is_protocol", False) - ) - ): - raise TypeError( - f"Protocols can only inherit from other protocols, " - f"got {base!r}" - ) - return super().__new__(mcls, name, bases, namespace, **kwargs) - - def __init__(cls, *args, **kwargs): - super().__init__(*args, **kwargs) - if getattr(cls, "_is_protocol", False): - cls.__protocol_attrs__ = _get_protocol_attrs(cls) - - def __subclasscheck__(cls, other): - if cls is Protocol: - return type.__subclasscheck__(cls, other) - if ( - getattr(cls, '_is_protocol', False) - and not _allow_reckless_class_checks() - ): - if not getattr(cls, '_is_runtime_protocol', False): - _type_check_issubclass_arg_1(other) - raise TypeError( - "Instance and class checks can only be used with " - "@runtime_checkable protocols" - ) - if ( - # this attribute is set by @runtime_checkable: - cls.__non_callable_proto_members__ - and cls.__dict__.get("__subclasshook__") is _proto_hook - ): - _type_check_issubclass_arg_1(other) - non_method_attrs = sorted(cls.__non_callable_proto_members__) - raise TypeError( - "Protocols with non-method members don't support issubclass()." - f" Non-method members: {str(non_method_attrs)[1:-1]}." - ) - return _abc_subclasscheck(cls, other) - - def __instancecheck__(cls, instance): - # We need this method for situations where attributes are - # assigned in __init__. - if cls is Protocol: - return type.__instancecheck__(cls, instance) - if not getattr(cls, "_is_protocol", False): - # i.e., it's a concrete subclass of a protocol - return _abc_instancecheck(cls, instance) - - if ( - not getattr(cls, '_is_runtime_protocol', False) and - not _allow_reckless_class_checks() - ): - raise TypeError("Instance and class checks can only be used with" - " @runtime_checkable protocols") - - if _abc_instancecheck(cls, instance): - return True - - getattr_static = _lazy_load_getattr_static() - for attr in cls.__protocol_attrs__: - try: - val = getattr_static(instance, attr) - except AttributeError: - break - # this attribute is set by @runtime_checkable: - if val is None and attr not in cls.__non_callable_proto_members__: - break - else: - return True - - return False - - -@classmethod -def _proto_hook(cls, other): - if not cls.__dict__.get('_is_protocol', False): - return NotImplemented - - for attr in cls.__protocol_attrs__: - for base in other.__mro__: - # Check if the members appears in the class dictionary... - if attr in base.__dict__: - if base.__dict__[attr] is None: - return NotImplemented - break - - # ...or in annotations, if it is a sub-protocol. - if issubclass(other, Generic) and getattr(other, "_is_protocol", False): - # We avoid the slower path through annotationlib here because in most - # cases it should be unnecessary. - try: - annos = base.__annotations__ - except Exception: - annos = _lazy_annotationlib.get_annotations( - base, format=_lazy_annotationlib.Format.FORWARDREF - ) - if attr in annos: - break - else: - return NotImplemented - return True - - -class Protocol(Generic, metaclass=_ProtocolMeta): - """Base class for protocol classes. - - Protocol classes are defined as:: - - class Proto(Protocol): - def meth(self) -> int: - ... - - Such classes are primarily used with static type checkers that recognize - structural subtyping (static duck-typing). - - For example:: - - class C: - def meth(self) -> int: - return 0 - - def func(x: Proto) -> int: - return x.meth() - - func(C()) # Passes static type check - - See PEP 544 for details. Protocol classes decorated with - @typing.runtime_checkable act as simple-minded runtime protocols that check - only the presence of given attributes, ignoring their type signatures. - Protocol classes can be generic, they are defined as:: - - class GenProto[T](Protocol): - def meth(self) -> T: - ... - """ - - __slots__ = () - _is_protocol = True - _is_runtime_protocol = False - - def __init_subclass__(cls, *args, **kwargs): - super().__init_subclass__(*args, **kwargs) - - # Determine if this is a protocol or a concrete subclass. - if not cls.__dict__.get('_is_protocol', False): - cls._is_protocol = any(b is Protocol for b in cls.__bases__) - - # Set (or override) the protocol subclass hook. - if '__subclasshook__' not in cls.__dict__: - cls.__subclasshook__ = _proto_hook - - # Prohibit instantiation for protocol classes - if cls._is_protocol and cls.__init__ is Protocol.__init__: - cls.__init__ = _no_init_or_replace_init - - -class _AnnotatedAlias(_NotIterable, _GenericAlias, _root=True): - """Runtime representation of an annotated type. - - At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't' - with extra metadata. The alias behaves like a normal typing alias. - Instantiating is the same as instantiating the underlying type; binding - it to types is also the same. - - The metadata itself is stored in a '__metadata__' attribute as a tuple. - """ - - def __init__(self, origin, metadata): - if isinstance(origin, _AnnotatedAlias): - metadata = origin.__metadata__ + metadata - origin = origin.__origin__ - super().__init__(origin, origin, name='Annotated') - self.__metadata__ = metadata - - def copy_with(self, params): - assert len(params) == 1 - new_type = params[0] - return _AnnotatedAlias(new_type, self.__metadata__) - - def __repr__(self): - return "typing.Annotated[{}, {}]".format( - _type_repr(self.__origin__), - ", ".join(repr(a) for a in self.__metadata__) - ) - - def __reduce__(self): - return operator.getitem, ( - Annotated, (self.__origin__,) + self.__metadata__ - ) - - def __eq__(self, other): - if not isinstance(other, _AnnotatedAlias): - return NotImplemented - return (self.__origin__ == other.__origin__ - and self.__metadata__ == other.__metadata__) - - def __hash__(self): - return hash((self.__origin__, self.__metadata__)) - - def __getattr__(self, attr): - if attr in {'__name__', '__qualname__'}: - return 'Annotated' - return super().__getattr__(attr) - - def __mro_entries__(self, bases): - return (self.__origin__,) - - -@_TypedCacheSpecialForm -@_tp_cache(typed=True) -def Annotated(self, *params): - """Add context-specific metadata to a type. - - Example: Annotated[int, runtime_check.Unsigned] indicates to the - hypothetical runtime_check module that this type is an unsigned int. - Every other consumer of this type can ignore this metadata and treat - this type as int. - - The first argument to Annotated must be a valid type. - - Details: - - - It's an error to call `Annotated` with less than two arguments. - - Access the metadata via the ``__metadata__`` attribute:: - - assert Annotated[int, '$'].__metadata__ == ('$',) - - - Nested Annotated types are flattened:: - - assert Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3] - - - Instantiating an annotated type is equivalent to instantiating the - underlying type:: - - assert Annotated[C, Ann1](5) == C(5) - - - Annotated can be used as a generic type alias:: - - type Optimized[T] = Annotated[T, runtime.Optimize()] - # type checker will treat Optimized[int] - # as equivalent to Annotated[int, runtime.Optimize()] - - type OptimizedList[T] = Annotated[list[T], runtime.Optimize()] - # type checker will treat OptimizedList[int] - # as equivalent to Annotated[list[int], runtime.Optimize()] - - - Annotated cannot be used with an unpacked TypeVarTuple:: - - type Variadic[*Ts] = Annotated[*Ts, Ann1] # NOT valid - - This would be equivalent to:: - - Annotated[T1, T2, T3, ..., Ann1] - - where T1, T2 etc. are TypeVars, which would be invalid, because - only one type should be passed to Annotated. - """ - if len(params) < 2: - raise TypeError("Annotated[...] should be used " - "with at least two arguments (a type and an " - "annotation).") - if _is_unpacked_typevartuple(params[0]): - raise TypeError("Annotated[...] should not be used with an " - "unpacked TypeVarTuple") - msg = "Annotated[t, ...]: t must be a type." - origin = _type_check(params[0], msg, allow_special_forms=True) - metadata = tuple(params[1:]) - return _AnnotatedAlias(origin, metadata) - - -def runtime_checkable(cls): - """Mark a protocol class as a runtime protocol. - - Such protocol can be used with isinstance() and issubclass(). - Raise TypeError if applied to a non-protocol class. - This allows a simple-minded structural check very similar to - one trick ponies in collections.abc such as Iterable. - - For example:: - - @runtime_checkable - class Closable(Protocol): - def close(self): ... - - assert isinstance(open('/some/file'), Closable) - - Warning: this will check only the presence of the required methods, - not their type signatures! - """ - if not issubclass(cls, Generic) or not getattr(cls, '_is_protocol', False): - raise TypeError('@runtime_checkable can be only applied to protocol classes,' - ' got %r' % cls) - cls._is_runtime_protocol = True - # PEP 544 prohibits using issubclass() - # with protocols that have non-method members. - # See gh-113320 for why we compute this attribute here, - # rather than in `_ProtocolMeta.__init__` - cls.__non_callable_proto_members__ = set() - for attr in cls.__protocol_attrs__: - try: - is_callable = callable(getattr(cls, attr, None)) - except Exception as e: - raise TypeError( - f"Failed to determine whether protocol member {attr!r} " - "is a method member" - ) from e - else: - if not is_callable: - cls.__non_callable_proto_members__.add(attr) - return cls - - -def cast(typ, val): - """Cast a value to a type. - - This returns the value unchanged. To the type checker this - signals that the return value has the designated type, but at - runtime we intentionally don't check anything (we want this - to be as fast as possible). - """ - return val - - -def assert_type(val, typ, /): - """Ask a static type checker to confirm that the value is of the given type. - - At runtime this does nothing: it returns the first argument unchanged with no - checks or side effects, no matter the actual type of the argument. - - When a static type checker encounters a call to assert_type(), it - emits an error if the value is not of the specified type:: - - def greet(name: str) -> None: - assert_type(name, str) # OK - assert_type(name, int) # type checker error - """ - return val - - -def get_type_hints(obj, globalns=None, localns=None, include_extras=False, - *, format=None): - """Return type hints for an object. - - This is often the same as obj.__annotations__, but it handles - forward references encoded as string literals and recursively replaces all - 'Annotated[T, ...]' with 'T' (unless 'include_extras=True'). - - The argument may be a module, class, method, or function. The annotations - are returned as a dictionary. For classes, annotations include also - inherited members. - - TypeError is raised if the argument is not of a type that can contain - annotations, and an empty dictionary is returned if no annotations are - present. - - BEWARE -- the behavior of globalns and localns is counterintuitive - (unless you are familiar with how eval() and exec() work). The - search order is locals first, then globals. - - - If no dict arguments are passed, an attempt is made to use the - globals from obj (or the respective module's globals for classes), - and these are also used as the locals. If the object does not appear - to have globals, an empty dictionary is used. For classes, the search - order is globals first then locals. - - - If one dict argument is passed, it is used for both globals and - locals. - - - If two dict arguments are passed, they specify globals and - locals, respectively. - """ - if getattr(obj, '__no_type_check__', None): - return {} - Format = _lazy_annotationlib.Format - if format is None: - format = Format.VALUE - # Classes require a special treatment. - if isinstance(obj, type): - hints = {} - for base in reversed(obj.__mro__): - ann = _lazy_annotationlib.get_annotations(base, format=format) - if format == Format.STRING: - hints.update(ann) - continue - if globalns is None: - base_globals = getattr(sys.modules.get(base.__module__, None), '__dict__', {}) - else: - base_globals = globalns - base_locals = dict(vars(base)) if localns is None else localns - if localns is None and globalns is None: - # This is surprising, but required. Before Python 3.10, - # get_type_hints only evaluated the globalns of - # a class. To maintain backwards compatibility, we reverse - # the globalns and localns order so that eval() looks into - # *base_globals* first rather than *base_locals*. - # This only affects ForwardRefs. - base_globals, base_locals = base_locals, base_globals - type_params = base.__type_params__ - base_globals, base_locals = _add_type_params_to_scope( - type_params, base_globals, base_locals, True) - for name, value in ann.items(): - if isinstance(value, str): - value = _make_forward_ref(value, is_argument=False, is_class=True) - value = _eval_type(value, base_globals, base_locals, (), - format=format, owner=obj, prefer_fwd_module=True) - if value is None: - value = type(None) - hints[name] = value - if include_extras or format == Format.STRING: - return hints - else: - return {k: _strip_annotations(t) for k, t in hints.items()} - - hints = _lazy_annotationlib.get_annotations(obj, format=format) - if ( - not hints - and not isinstance(obj, types.ModuleType) - and not callable(obj) - and not hasattr(obj, '__annotations__') - and not hasattr(obj, '__annotate__') - ): - raise TypeError(f"{obj!r} is not a module, class, or callable.") - if format == Format.STRING: - return hints - - if globalns is None: - if isinstance(obj, types.ModuleType): - globalns = obj.__dict__ - else: - nsobj = obj - # Find globalns for the unwrapped object. - while hasattr(nsobj, '__wrapped__'): - nsobj = nsobj.__wrapped__ - globalns = getattr(nsobj, '__globals__', {}) - if localns is None: - localns = globalns - elif localns is None: - localns = globalns - type_params = getattr(obj, "__type_params__", ()) - globalns, localns = _add_type_params_to_scope(type_params, globalns, localns, False) - for name, value in hints.items(): - if isinstance(value, str): - # class-level forward refs were handled above, this must be either - # a module-level annotation or a function argument annotation - value = _make_forward_ref( - value, - is_argument=not isinstance(obj, types.ModuleType), - is_class=False, - ) - value = _eval_type(value, globalns, localns, (), format=format, owner=obj, prefer_fwd_module=True) - if value is None: - value = type(None) - hints[name] = value - return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()} - - -# Add type parameters to the globals and locals scope. This is needed for -# compatibility. -def _add_type_params_to_scope(type_params, globalns, localns, is_class): - if not type_params: - return globalns, localns - globalns = dict(globalns) - localns = dict(localns) - for param in type_params: - if not is_class or param.__name__ not in globalns: - globalns[param.__name__] = param - localns.pop(param.__name__, None) - return globalns, localns - - -def _strip_annotations(t): - """Strip the annotations from a given type.""" - if isinstance(t, _AnnotatedAlias): - return _strip_annotations(t.__origin__) - if hasattr(t, "__origin__") and t.__origin__ in (Required, NotRequired, ReadOnly): - return _strip_annotations(t.__args__[0]) - if isinstance(t, _GenericAlias): - stripped_args = tuple(_strip_annotations(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return t.copy_with(stripped_args) - if isinstance(t, GenericAlias): - stripped_args = tuple(_strip_annotations(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return GenericAlias(t.__origin__, stripped_args) - if isinstance(t, Union): - stripped_args = tuple(_strip_annotations(a) for a in t.__args__) - if stripped_args == t.__args__: - return t - return functools.reduce(operator.or_, stripped_args) - - return t - - -def get_origin(tp): - """Get the unsubscripted version of a type. - - This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar, - Annotated, and others. Return None for unsupported types. - - Examples:: - - >>> P = ParamSpec('P') - >>> assert get_origin(Literal[42]) is Literal - >>> assert get_origin(int) is None - >>> assert get_origin(ClassVar[int]) is ClassVar - >>> assert get_origin(Generic) is Generic - >>> assert get_origin(Generic[T]) is Generic - >>> assert get_origin(Union[T, int]) is Union - >>> assert get_origin(List[Tuple[T, T]][int]) is list - >>> assert get_origin(P.args) is P - """ - if isinstance(tp, _AnnotatedAlias): - return Annotated - if isinstance(tp, (_BaseGenericAlias, GenericAlias, - ParamSpecArgs, ParamSpecKwargs)): - return tp.__origin__ - if tp is Generic: - return Generic - if isinstance(tp, Union): - return Union - return None - - -def get_args(tp): - """Get type arguments with all substitutions performed. - - For unions, basic simplifications used by Union constructor are performed. - - Examples:: - - >>> T = TypeVar('T') - >>> assert get_args(Dict[str, int]) == (str, int) - >>> assert get_args(int) == () - >>> assert get_args(Union[int, Union[T, int], str][int]) == (int, str) - >>> assert get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int]) - >>> assert get_args(Callable[[], T][int]) == ([], int) - """ - if isinstance(tp, _AnnotatedAlias): - return (tp.__origin__,) + tp.__metadata__ - if isinstance(tp, (_GenericAlias, GenericAlias)): - res = tp.__args__ - if _should_unflatten_callable_args(tp, res): - res = (list(res[:-1]), res[-1]) - return res - if isinstance(tp, Union): - return tp.__args__ - return () - - -def is_typeddict(tp): - """Check if an annotation is a TypedDict class. - - For example:: - - >>> from typing import TypedDict - >>> class Film(TypedDict): - ... title: str - ... year: int - ... - >>> is_typeddict(Film) - True - >>> is_typeddict(dict) - False - """ - return isinstance(tp, _TypedDictMeta) - - -_ASSERT_NEVER_REPR_MAX_LENGTH = 100 - - -def assert_never(arg: Never, /) -> Never: - """Statically assert that a line of code is unreachable. - - Example:: - - def int_or_str(arg: int | str) -> None: - match arg: - case int(): - print("It's an int") - case str(): - print("It's a str") - case _: - assert_never(arg) - - If a type checker finds that a call to assert_never() is - reachable, it will emit an error. - - At runtime, this throws an exception when called. - """ - value = repr(arg) - if len(value) > _ASSERT_NEVER_REPR_MAX_LENGTH: - value = value[:_ASSERT_NEVER_REPR_MAX_LENGTH] + '...' - raise AssertionError(f"Expected code to be unreachable, but got: {value}") - - -def no_type_check(arg): - """Decorator to indicate that annotations are not type hints. - - The argument must be a class or function; if it is a class, it - applies recursively to all methods and classes defined in that class - (but not to methods defined in its superclasses or subclasses). - - This mutates the function(s) or class(es) in place. - """ - if isinstance(arg, type): - for key in dir(arg): - obj = getattr(arg, key) - if ( - not hasattr(obj, '__qualname__') - or obj.__qualname__ != f'{arg.__qualname__}.{obj.__name__}' - or getattr(obj, '__module__', None) != arg.__module__ - ): - # We only modify objects that are defined in this type directly. - # If classes / methods are nested in multiple layers, - # we will modify them when processing their direct holders. - continue - # Instance, class, and static methods: - if isinstance(obj, types.FunctionType): - obj.__no_type_check__ = True - if isinstance(obj, types.MethodType): - obj.__func__.__no_type_check__ = True - # Nested types: - if isinstance(obj, type): - no_type_check(obj) - try: - arg.__no_type_check__ = True - except TypeError: # built-in classes - pass - return arg - - -def no_type_check_decorator(decorator): - """Decorator to give another decorator the @no_type_check effect. - - This wraps the decorator with something that wraps the decorated - function in @no_type_check. - """ - import warnings - warnings._deprecated("typing.no_type_check_decorator", remove=(3, 15)) - @functools.wraps(decorator) - def wrapped_decorator(*args, **kwds): - func = decorator(*args, **kwds) - func = no_type_check(func) - return func - - return wrapped_decorator - - -def _overload_dummy(*args, **kwds): - """Helper for @overload to raise when called.""" - raise NotImplementedError( - "You should not call an overloaded function. " - "A series of @overload-decorated functions " - "outside a stub module should always be followed " - "by an implementation that is not @overload-ed.") - - -# {module: {qualname: {firstlineno: func}}} -_overload_registry = defaultdict(functools.partial(defaultdict, dict)) - - -def overload(func): - """Decorator for overloaded functions/methods. - - In a stub file, place two or more stub definitions for the same - function in a row, each decorated with @overload. - - For example:: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - - In a non-stub file (i.e. a regular .py file), do the same but - follow it with an implementation. The implementation should *not* - be decorated with @overload:: - - @overload - def utf8(value: None) -> None: ... - @overload - def utf8(value: bytes) -> bytes: ... - @overload - def utf8(value: str) -> bytes: ... - def utf8(value): - ... # implementation goes here - - The overloads for a function can be retrieved at runtime using the - get_overloads() function. - """ - # classmethod and staticmethod - f = getattr(func, "__func__", func) - try: - _overload_registry[f.__module__][f.__qualname__][f.__code__.co_firstlineno] = func - except AttributeError: - # Not a normal function; ignore. - pass - return _overload_dummy - - -def get_overloads(func): - """Return all defined overloads for *func* as a sequence.""" - # classmethod and staticmethod - f = getattr(func, "__func__", func) - if f.__module__ not in _overload_registry: - return [] - mod_dict = _overload_registry[f.__module__] - if f.__qualname__ not in mod_dict: - return [] - return list(mod_dict[f.__qualname__].values()) - - -def clear_overloads(): - """Clear all overloads in the registry.""" - _overload_registry.clear() - - -def final(f): - """Decorator to indicate final methods and final classes. - - Use this decorator to indicate to type checkers that the decorated - method cannot be overridden, and decorated class cannot be subclassed. - - For example:: - - class Base: - @final - def done(self) -> None: - ... - class Sub(Base): - def done(self) -> None: # Error reported by type checker - ... - - @final - class Leaf: - ... - class Other(Leaf): # Error reported by type checker - ... - - There is no runtime checking of these properties. The decorator - attempts to set the ``__final__`` attribute to ``True`` on the decorated - object to allow runtime introspection. - """ - try: - f.__final__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return f - - -# Some unconstrained type variables. These were initially used by the container types. -# They were never meant for export and are now unused, but we keep them around to -# avoid breaking compatibility with users who import them. -T = TypeVar('T') # Any type. -KT = TypeVar('KT') # Key type. -VT = TypeVar('VT') # Value type. -T_co = TypeVar('T_co', covariant=True) # Any type covariant containers. -V_co = TypeVar('V_co', covariant=True) # Any type covariant containers. -VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers. -T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant. -# Internal type variable used for Type[]. -CT_co = TypeVar('CT_co', covariant=True, bound=type) - - -# A useful type variable with constraints. This represents string types. -# (This one *is* for export!) -AnyStr = TypeVar('AnyStr', bytes, str) - - -# Various ABCs mimicking those in collections.abc. -_alias = _SpecialGenericAlias - -Hashable = _alias(collections.abc.Hashable, 0) # Not generic. -Awaitable = _alias(collections.abc.Awaitable, 1) -Coroutine = _alias(collections.abc.Coroutine, 3) -AsyncIterable = _alias(collections.abc.AsyncIterable, 1) -AsyncIterator = _alias(collections.abc.AsyncIterator, 1) -Iterable = _alias(collections.abc.Iterable, 1) -Iterator = _alias(collections.abc.Iterator, 1) -Reversible = _alias(collections.abc.Reversible, 1) -Sized = _alias(collections.abc.Sized, 0) # Not generic. -Container = _alias(collections.abc.Container, 1) -Collection = _alias(collections.abc.Collection, 1) -Callable = _CallableType(collections.abc.Callable, 2) -Callable.__doc__ = \ - """Deprecated alias to collections.abc.Callable. - - Callable[[int], str] signifies a function that takes a single - parameter of type int and returns a str. - - The subscription syntax must always be used with exactly two - values: the argument list and the return type. - The argument list must be a list of types, a ParamSpec, - Concatenate or ellipsis. The return type must be a single type. - - There is no syntax to indicate optional or keyword arguments; - such function types are rarely used as callback types. - """ -AbstractSet = _alias(collections.abc.Set, 1, name='AbstractSet') -MutableSet = _alias(collections.abc.MutableSet, 1) -# NOTE: Mapping is only covariant in the value type. -Mapping = _alias(collections.abc.Mapping, 2) -MutableMapping = _alias(collections.abc.MutableMapping, 2) -Sequence = _alias(collections.abc.Sequence, 1) -MutableSequence = _alias(collections.abc.MutableSequence, 1) -ByteString = _DeprecatedGenericAlias( - collections.abc.ByteString, 0, removal_version=(3, 17) # Not generic. -) -# Tuple accepts variable number of parameters. -Tuple = _TupleType(tuple, -1, inst=False, name='Tuple') -Tuple.__doc__ = \ - """Deprecated alias to builtins.tuple. - - Tuple[X, Y] is the cross-product type of X and Y. - - Example: Tuple[T1, T2] is a tuple of two elements corresponding - to type variables T1 and T2. Tuple[int, float, str] is a tuple - of an int, a float and a string. - - To specify a variable-length tuple of homogeneous type, use Tuple[T, ...]. - """ -List = _alias(list, 1, inst=False, name='List') -Deque = _alias(collections.deque, 1, name='Deque') -Set = _alias(set, 1, inst=False, name='Set') -FrozenSet = _alias(frozenset, 1, inst=False, name='FrozenSet') -MappingView = _alias(collections.abc.MappingView, 1) -KeysView = _alias(collections.abc.KeysView, 1) -ItemsView = _alias(collections.abc.ItemsView, 2) -ValuesView = _alias(collections.abc.ValuesView, 1) -Dict = _alias(dict, 2, inst=False, name='Dict') -DefaultDict = _alias(collections.defaultdict, 2, name='DefaultDict') -OrderedDict = _alias(collections.OrderedDict, 2) -Counter = _alias(collections.Counter, 1) -ChainMap = _alias(collections.ChainMap, 2) -Generator = _alias(collections.abc.Generator, 3, defaults=(types.NoneType, types.NoneType)) -AsyncGenerator = _alias(collections.abc.AsyncGenerator, 2, defaults=(types.NoneType,)) -Type = _alias(type, 1, inst=False, name='Type') -Type.__doc__ = \ - """Deprecated alias to builtins.type. - - builtins.type or typing.Type can be used to annotate class objects. - For example, suppose we have the following classes:: - - class User: ... # Abstract base for User classes - class BasicUser(User): ... - class ProUser(User): ... - class TeamUser(User): ... - - And a function that takes a class argument that's a subclass of - User and returns an instance of the corresponding class:: - - def new_user[U](user_class: Type[U]) -> U: - user = user_class() - # (Here we could write the user object to a database) - return user - - joe = new_user(BasicUser) - - At this point the type checker knows that joe has type BasicUser. - """ - - -@runtime_checkable -class SupportsInt(Protocol): - """An ABC with one abstract method __int__.""" - - __slots__ = () - - @abstractmethod - def __int__(self) -> int: - pass - - -@runtime_checkable -class SupportsFloat(Protocol): - """An ABC with one abstract method __float__.""" - - __slots__ = () - - @abstractmethod - def __float__(self) -> float: - pass - - -@runtime_checkable -class SupportsComplex(Protocol): - """An ABC with one abstract method __complex__.""" - - __slots__ = () - - @abstractmethod - def __complex__(self) -> complex: - pass - - -@runtime_checkable -class SupportsBytes(Protocol): - """An ABC with one abstract method __bytes__.""" - - __slots__ = () - - @abstractmethod - def __bytes__(self) -> bytes: - pass - - -@runtime_checkable -class SupportsIndex(Protocol): - """An ABC with one abstract method __index__.""" - - __slots__ = () - - @abstractmethod - def __index__(self) -> int: - pass - - -@runtime_checkable -class SupportsAbs[T](Protocol): - """An ABC with one abstract method __abs__ that is covariant in its return type.""" - - __slots__ = () - - @abstractmethod - def __abs__(self) -> T: - pass - - -@runtime_checkable -class SupportsRound[T](Protocol): - """An ABC with one abstract method __round__ that is covariant in its return type.""" - - __slots__ = () - - @abstractmethod - def __round__(self, ndigits: int = 0) -> T: - pass - - -def _make_nmtuple(name, fields, annotate_func, module, defaults = ()): - nm_tpl = collections.namedtuple(name, fields, - defaults=defaults, module=module) - nm_tpl.__annotate__ = nm_tpl.__new__.__annotate__ = annotate_func - return nm_tpl - - -def _make_eager_annotate(types): - checked_types = {key: _type_check(val, f"field {key} annotation must be a type") - for key, val in types.items()} - def annotate(format): - match format: - case _lazy_annotationlib.Format.VALUE | _lazy_annotationlib.Format.FORWARDREF: - return checked_types - case _lazy_annotationlib.Format.STRING: - return _lazy_annotationlib.annotations_to_string(types) - case _: - raise NotImplementedError(format) - return annotate - - -# attributes prohibited to set in NamedTuple class syntax -_prohibited = frozenset({'__new__', '__init__', '__slots__', '__getnewargs__', - '_fields', '_field_defaults', - '_make', '_replace', '_asdict', '_source'}) - -_special = frozenset({'__module__', '__name__', '__annotations__', '__annotate__', - '__annotate_func__', '__annotations_cache__'}) - - -class NamedTupleMeta(type): - def __new__(cls, typename, bases, ns): - assert _NamedTuple in bases - if "__classcell__" in ns: - raise TypeError( - "uses of super() and __class__ are unsupported in methods of NamedTuple subclasses") - for base in bases: - if base is not _NamedTuple and base is not Generic: - raise TypeError( - 'can only inherit from a NamedTuple type and Generic') - bases = tuple(tuple if base is _NamedTuple else base for base in bases) - if "__annotations__" in ns: - types = ns["__annotations__"] - field_names = list(types) - annotate = _make_eager_annotate(types) - elif (original_annotate := _lazy_annotationlib.get_annotate_from_class_namespace(ns)) is not None: - types = _lazy_annotationlib.call_annotate_function( - original_annotate, _lazy_annotationlib.Format.FORWARDREF) - field_names = list(types) - - # For backward compatibility, type-check all the types at creation time - for typ in types.values(): - _type_check(typ, "field annotation must be a type") - - def annotate(format): - annos = _lazy_annotationlib.call_annotate_function( - original_annotate, format) - if format != _lazy_annotationlib.Format.STRING: - return {key: _type_check(val, f"field {key} annotation must be a type") - for key, val in annos.items()} - return annos - else: - # Empty NamedTuple - field_names = [] - annotate = lambda format: {} - default_names = [] - for field_name in field_names: - if field_name in ns: - default_names.append(field_name) - elif default_names: - raise TypeError(f"Non-default namedtuple field {field_name} " - f"cannot follow default field" - f"{'s' if len(default_names) > 1 else ''} " - f"{', '.join(default_names)}") - nm_tpl = _make_nmtuple(typename, field_names, annotate, - defaults=[ns[n] for n in default_names], - module=ns['__module__']) - nm_tpl.__bases__ = bases - if Generic in bases: - class_getitem = _generic_class_getitem - nm_tpl.__class_getitem__ = classmethod(class_getitem) - # update from user namespace without overriding special namedtuple attributes - for key, val in ns.items(): - if key in _prohibited: - raise AttributeError("Cannot overwrite NamedTuple attribute " + key) - elif key not in _special: - if key not in nm_tpl._fields: - setattr(nm_tpl, key, val) - try: - set_name = type(val).__set_name__ - except AttributeError: - pass - else: - try: - set_name(val, nm_tpl, key) - except BaseException as e: - e.add_note( - f"Error calling __set_name__ on {type(val).__name__!r} " - f"instance {key!r} in {typename!r}" - ) - raise - - if Generic in bases: - nm_tpl.__init_subclass__() - return nm_tpl - - -def NamedTuple(typename, fields=_sentinel, /, **kwargs): - """Typed version of namedtuple. - - Usage:: - - class Employee(NamedTuple): - name: str - id: int - - This is equivalent to:: - - Employee = collections.namedtuple('Employee', ['name', 'id']) - - The resulting class has an extra __annotations__ attribute, giving a - dict that maps field names to types. (The field names are also in - the _fields attribute, which is part of the namedtuple API.) - An alternative equivalent functional syntax is also accepted:: - - Employee = NamedTuple('Employee', [('name', str), ('id', int)]) - """ - if fields is _sentinel: - if kwargs: - deprecated_thing = "Creating NamedTuple classes using keyword arguments" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "Use the class-based or functional syntax instead." - ) - else: - deprecated_thing = "Failing to pass a value for the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif fields is None: - if kwargs: - raise TypeError( - "Cannot pass `None` as the 'fields' parameter " - "and also specify fields using keyword arguments" - ) - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - example = f"`{typename} = NamedTuple({typename!r}, [])`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a NamedTuple class with 0 fields " - "using the functional syntax, " - "pass an empty list, e.g. " - ) + example + "." - elif kwargs: - raise TypeError("Either list of fields or keywords" - " can be provided to NamedTuple, not both") - if fields is _sentinel or fields is None: - import warnings - warnings._deprecated(deprecated_thing, message=deprecation_msg, remove=(3, 15)) - fields = kwargs.items() - types = {n: _type_check(t, f"field {n} annotation must be a type") - for n, t in fields} - field_names = [n for n, _ in fields] - - nt = _make_nmtuple(typename, field_names, _make_eager_annotate(types), module=_caller()) - nt.__orig_bases__ = (NamedTuple,) - return nt - -_NamedTuple = type.__new__(NamedTupleMeta, 'NamedTuple', (), {}) - -def _namedtuple_mro_entries(bases): - assert NamedTuple in bases - return (_NamedTuple,) - -NamedTuple.__mro_entries__ = _namedtuple_mro_entries - - -def _get_typeddict_qualifiers(annotation_type): - while True: - annotation_origin = get_origin(annotation_type) - if annotation_origin is Annotated: - annotation_args = get_args(annotation_type) - if annotation_args: - annotation_type = annotation_args[0] - else: - break - elif annotation_origin is Required: - yield Required - (annotation_type,) = get_args(annotation_type) - elif annotation_origin is NotRequired: - yield NotRequired - (annotation_type,) = get_args(annotation_type) - elif annotation_origin is ReadOnly: - yield ReadOnly - (annotation_type,) = get_args(annotation_type) - else: - break - - -class _TypedDictMeta(type): - def __new__(cls, name, bases, ns, total=True): - """Create a new typed dict class object. - - This method is called when TypedDict is subclassed, - or when TypedDict is instantiated. This way - TypedDict supports all three syntax forms described in its docstring. - Subclasses and instances of TypedDict return actual dictionaries. - """ - for base in bases: - if type(base) is not _TypedDictMeta and base is not Generic: - raise TypeError('cannot inherit from both a TypedDict type ' - 'and a non-TypedDict base class') - - if any(issubclass(b, Generic) for b in bases): - generic_base = (Generic,) - else: - generic_base = () - - ns_annotations = ns.pop('__annotations__', None) - - tp_dict = type.__new__(_TypedDictMeta, name, (*generic_base, dict), ns) - - if not hasattr(tp_dict, '__orig_bases__'): - tp_dict.__orig_bases__ = bases - - if ns_annotations is not None: - own_annotate = None - own_annotations = ns_annotations - elif (own_annotate := _lazy_annotationlib.get_annotate_from_class_namespace(ns)) is not None: - own_annotations = _lazy_annotationlib.call_annotate_function( - own_annotate, _lazy_annotationlib.Format.FORWARDREF, owner=tp_dict - ) - else: - own_annotate = None - own_annotations = {} - msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type" - own_checked_annotations = { - n: _type_check(tp, msg, owner=tp_dict, module=tp_dict.__module__) - for n, tp in own_annotations.items() - } - required_keys = set() - optional_keys = set() - readonly_keys = set() - mutable_keys = set() - - for base in bases: - base_required = base.__dict__.get('__required_keys__', set()) - required_keys |= base_required - optional_keys -= base_required - - base_optional = base.__dict__.get('__optional_keys__', set()) - required_keys -= base_optional - optional_keys |= base_optional - - readonly_keys.update(base.__dict__.get('__readonly_keys__', ())) - mutable_keys.update(base.__dict__.get('__mutable_keys__', ())) - - for annotation_key, annotation_type in own_checked_annotations.items(): - qualifiers = set(_get_typeddict_qualifiers(annotation_type)) - if Required in qualifiers: - is_required = True - elif NotRequired in qualifiers: - is_required = False - else: - is_required = total - - if is_required: - required_keys.add(annotation_key) - optional_keys.discard(annotation_key) - else: - optional_keys.add(annotation_key) - required_keys.discard(annotation_key) - - if ReadOnly in qualifiers: - if annotation_key in mutable_keys: - raise TypeError( - f"Cannot override mutable key {annotation_key!r}" - " with read-only key" - ) - readonly_keys.add(annotation_key) - else: - mutable_keys.add(annotation_key) - readonly_keys.discard(annotation_key) - - assert required_keys.isdisjoint(optional_keys), ( - f"Required keys overlap with optional keys in {name}:" - f" {required_keys=}, {optional_keys=}" - ) - - def __annotate__(format): - annos = {} - for base in bases: - if base is Generic: - continue - base_annotate = base.__annotate__ - if base_annotate is None: - continue - base_annos = _lazy_annotationlib.call_annotate_function( - base_annotate, format, owner=base) - annos.update(base_annos) - if own_annotate is not None: - own = _lazy_annotationlib.call_annotate_function( - own_annotate, format, owner=tp_dict) - if format != _lazy_annotationlib.Format.STRING: - own = { - n: _type_check(tp, msg, module=tp_dict.__module__) - for n, tp in own.items() - } - elif format == _lazy_annotationlib.Format.STRING: - own = _lazy_annotationlib.annotations_to_string(own_annotations) - elif format in (_lazy_annotationlib.Format.FORWARDREF, _lazy_annotationlib.Format.VALUE): - own = own_checked_annotations - else: - raise NotImplementedError(format) - annos.update(own) - return annos - - tp_dict.__annotate__ = __annotate__ - tp_dict.__required_keys__ = frozenset(required_keys) - tp_dict.__optional_keys__ = frozenset(optional_keys) - tp_dict.__readonly_keys__ = frozenset(readonly_keys) - tp_dict.__mutable_keys__ = frozenset(mutable_keys) - tp_dict.__total__ = total - return tp_dict - - __call__ = dict # static method - - def __subclasscheck__(cls, other): - # Typed dicts are only for static structural subtyping. - raise TypeError('TypedDict does not support instance and class checks') - - __instancecheck__ = __subclasscheck__ - - -def TypedDict(typename, fields=_sentinel, /, *, total=True): - """A simple typed namespace. At runtime it is equivalent to a plain dict. - - TypedDict creates a dictionary type such that a type checker will expect all - instances to have a certain set of keys, where each key is - associated with a value of a consistent type. This expectation - is not checked at runtime. - - Usage:: - - >>> class Point2D(TypedDict): - ... x: int - ... y: int - ... label: str - ... - >>> a: Point2D = {'x': 1, 'y': 2, 'label': 'good'} # OK - >>> b: Point2D = {'z': 3, 'label': 'bad'} # Fails type check - >>> Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') - True - - The type info can be accessed via the Point2D.__annotations__ dict, and - the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. - TypedDict supports an additional equivalent form:: - - Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) - - By default, all keys must be present in a TypedDict. It is possible - to override this by specifying totality:: - - class Point2D(TypedDict, total=False): - x: int - y: int - - This means that a Point2D TypedDict can have any of the keys omitted. A type - checker is only expected to support a literal False or True as the value of - the total argument. True is the default, and makes all items defined in the - class body be required. - - The Required and NotRequired special forms can also be used to mark - individual keys as being required or not required:: - - class Point2D(TypedDict): - x: int # the "x" key must always be present (Required is the default) - y: NotRequired[int] # the "y" key can be omitted - - See PEP 655 for more details on Required and NotRequired. - - The ReadOnly special form can be used - to mark individual keys as immutable for type checkers:: - - class DatabaseUser(TypedDict): - id: ReadOnly[int] # the "id" key must not be modified - username: str # the "username" key can be changed - - """ - if fields is _sentinel or fields is None: - import warnings - - if fields is _sentinel: - deprecated_thing = "Failing to pass a value for the 'fields' parameter" - else: - deprecated_thing = "Passing `None` as the 'fields' parameter" - - example = f"`{typename} = TypedDict({typename!r}, {{{{}}}})`" - deprecation_msg = ( - "{name} is deprecated and will be disallowed in Python {remove}. " - "To create a TypedDict class with 0 fields " - "using the functional syntax, " - "pass an empty dictionary, e.g. " - ) + example + "." - warnings._deprecated(deprecated_thing, message=deprecation_msg, remove=(3, 15)) - fields = {} - - ns = {'__annotations__': dict(fields)} - module = _caller() - if module is not None: - # Setting correct module is necessary to make typed dict classes pickleable. - ns['__module__'] = module - - td = _TypedDictMeta(typename, (), ns, total=total) - td.__orig_bases__ = (TypedDict,) - return td - -_TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {}) -TypedDict.__mro_entries__ = lambda bases: (_TypedDict,) - - -@_SpecialForm -def Required(self, parameters): - """Special typing construct to mark a TypedDict key as required. - - This is mainly useful for total=False TypedDicts. - - For example:: - - class Movie(TypedDict, total=False): - title: Required[str] - year: int - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - - There is no runtime checking that a required key is actually provided - when instantiating a related TypedDict. - """ - item = _type_check(parameters, f'{self._name} accepts only a single type.') - return _GenericAlias(self, (item,)) - - -@_SpecialForm -def NotRequired(self, parameters): - """Special typing construct to mark a TypedDict key as potentially missing. - - For example:: - - class Movie(TypedDict): - title: str - year: NotRequired[int] - - m = Movie( - title='The Matrix', # typechecker error if key is omitted - year=1999, - ) - """ - item = _type_check(parameters, f'{self._name} accepts only a single type.') - return _GenericAlias(self, (item,)) - - -@_SpecialForm -def ReadOnly(self, parameters): - """A special typing construct to mark an item of a TypedDict as read-only. - - For example:: - - class Movie(TypedDict): - title: ReadOnly[str] - year: int - - def mutate_movie(m: Movie) -> None: - m["year"] = 1992 # allowed - m["title"] = "The Matrix" # typechecker error - - There is no runtime checking for this property. - """ - item = _type_check(parameters, f'{self._name} accepts only a single type.') - return _GenericAlias(self, (item,)) - - -class NewType: - """NewType creates simple unique types with almost zero runtime overhead. - - NewType(name, tp) is considered a subtype of tp - by static type checkers. At runtime, NewType(name, tp) returns - a dummy callable that simply returns its argument. - - Usage:: - - UserId = NewType('UserId', int) - - def name_by_id(user_id: UserId) -> str: - ... - - UserId('user') # Fails type check - - name_by_id(42) # Fails type check - name_by_id(UserId(42)) # OK - - num = UserId(5) + 1 # type: int - """ - - __call__ = _idfunc - - def __init__(self, name, tp): - self.__qualname__ = name - if '.' in name: - name = name.rpartition('.')[-1] - self.__name__ = name - self.__supertype__ = tp - def_mod = _caller() - if def_mod != 'typing': - self.__module__ = def_mod - - def __mro_entries__(self, bases): - # We defined __mro_entries__ to get a better error message - # if a user attempts to subclass a NewType instance. bpo-46170 - superclass_name = self.__name__ - - class Dummy: - def __init_subclass__(cls): - subclass_name = cls.__name__ - raise TypeError( - f"Cannot subclass an instance of NewType. Perhaps you were looking for: " - f"`{subclass_name} = NewType({subclass_name!r}, {superclass_name})`" - ) - - return (Dummy,) - - def __repr__(self): - return f'{self.__module__}.{self.__qualname__}' - - def __reduce__(self): - return self.__qualname__ - - def __or__(self, other): - return Union[self, other] - - def __ror__(self, other): - return Union[other, self] - - -# Python-version-specific alias (Python 2: unicode; Python 3: str) -Text = str - - -# Constant that's True when type checking, but False here. -TYPE_CHECKING = False - - -class IO(Generic[AnyStr]): - """Generic base class for TextIO and BinaryIO. - - This is an abstract, generic version of the return of open(). - - NOTE: This does not distinguish between the different possible - classes (text vs. binary, read vs. write vs. read/write, - append-only, unbuffered). The TextIO and BinaryIO subclasses - below capture the distinctions between text vs. binary, which is - pervasive in the interface; however we currently do not offer a - way to track the other distinctions in the type system. - """ - - __slots__ = () - - @property - @abstractmethod - def mode(self) -> str: - pass - - @property - @abstractmethod - def name(self) -> str: - pass - - @abstractmethod - def close(self) -> None: - pass - - @property - @abstractmethod - def closed(self) -> bool: - pass - - @abstractmethod - def fileno(self) -> int: - pass - - @abstractmethod - def flush(self) -> None: - pass - - @abstractmethod - def isatty(self) -> bool: - pass - - @abstractmethod - def read(self, n: int = -1) -> AnyStr: - pass - - @abstractmethod - def readable(self) -> bool: - pass - - @abstractmethod - def readline(self, limit: int = -1) -> AnyStr: - pass - - @abstractmethod - def readlines(self, hint: int = -1) -> list[AnyStr]: - pass - - @abstractmethod - def seek(self, offset: int, whence: int = 0) -> int: - pass - - @abstractmethod - def seekable(self) -> bool: - pass - - @abstractmethod - def tell(self) -> int: - pass - - @abstractmethod - def truncate(self, size: int | None = None) -> int: - pass - - @abstractmethod - def writable(self) -> bool: - pass - - @abstractmethod - def write(self, s: AnyStr) -> int: - pass - - @abstractmethod - def writelines(self, lines: list[AnyStr]) -> None: - pass - - @abstractmethod - def __enter__(self) -> IO[AnyStr]: - pass - - @abstractmethod - def __exit__(self, type, value, traceback) -> None: - pass - - -class BinaryIO(IO[bytes]): - """Typed version of the return of open() in binary mode.""" - - __slots__ = () - - @abstractmethod - def write(self, s: bytes | bytearray) -> int: - pass - - @abstractmethod - def __enter__(self) -> BinaryIO: - pass - - -class TextIO(IO[str]): - """Typed version of the return of open() in text mode.""" - - __slots__ = () - - @property - @abstractmethod - def buffer(self) -> BinaryIO: - pass - - @property - @abstractmethod - def encoding(self) -> str: - pass - - @property - @abstractmethod - def errors(self) -> str | None: - pass - - @property - @abstractmethod - def line_buffering(self) -> bool: - pass - - @property - @abstractmethod - def newlines(self) -> Any: - pass - - @abstractmethod - def __enter__(self) -> TextIO: - pass - - -def reveal_type[T](obj: T, /) -> T: - """Ask a static type checker to reveal the inferred type of an expression. - - When a static type checker encounters a call to ``reveal_type()``, - it will emit the inferred type of the argument:: - - x: int = 1 - reveal_type(x) - - Running a static type checker (e.g., mypy) on this example - will produce output similar to 'Revealed type is "builtins.int"'. - - At runtime, the function prints the runtime type of the - argument and returns the argument unchanged. - """ - print(f"Runtime type is {type(obj).__name__!r}", file=sys.stderr) - return obj - - -class _IdentityCallable(Protocol): - def __call__[T](self, arg: T, /) -> T: - ... - - -def dataclass_transform( - *, - eq_default: bool = True, - order_default: bool = False, - kw_only_default: bool = False, - frozen_default: bool = False, - field_specifiers: tuple[type[Any] | Callable[..., Any], ...] = (), - **kwargs: Any, -) -> _IdentityCallable: - """Decorator to mark an object as providing dataclass-like behaviour. - - The decorator can be applied to a function, class, or metaclass. - - Example usage with a decorator function:: - - @dataclass_transform() - def create_model[T](cls: type[T]) -> type[T]: - ... - return cls - - @create_model - class CustomerModel: - id: int - name: str - - On a base class:: - - @dataclass_transform() - class ModelBase: ... - - class CustomerModel(ModelBase): - id: int - name: str - - On a metaclass:: - - @dataclass_transform() - class ModelMeta(type): ... - - class ModelBase(metaclass=ModelMeta): ... - - class CustomerModel(ModelBase): - id: int - name: str - - The ``CustomerModel`` classes defined above will - be treated by type checkers similarly to classes created with - ``@dataclasses.dataclass``. - For example, type checkers will assume these classes have - ``__init__`` methods that accept ``id`` and ``name``. - - The arguments to this decorator can be used to customize this behavior: - - ``eq_default`` indicates whether the ``eq`` parameter is assumed to be - ``True`` or ``False`` if it is omitted by the caller. - - ``order_default`` indicates whether the ``order`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``kw_only_default`` indicates whether the ``kw_only`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``frozen_default`` indicates whether the ``frozen`` parameter is - assumed to be True or False if it is omitted by the caller. - - ``field_specifiers`` specifies a static list of supported classes - or functions that describe fields, similar to ``dataclasses.field()``. - - Arbitrary other keyword arguments are accepted in order to allow for - possible future extensions. - - At runtime, this decorator records its arguments in the - ``__dataclass_transform__`` attribute on the decorated object. - It has no other runtime effect. - - See PEP 681 for more details. - """ - def decorator(cls_or_fn): - cls_or_fn.__dataclass_transform__ = { - "eq_default": eq_default, - "order_default": order_default, - "kw_only_default": kw_only_default, - "frozen_default": frozen_default, - "field_specifiers": field_specifiers, - "kwargs": kwargs, - } - return cls_or_fn - return decorator - - -type _Func = Callable[..., Any] - - -def override[F: _Func](method: F, /) -> F: - """Indicate that a method is intended to override a method in a base class. - - Usage:: - - class Base: - def method(self) -> None: - pass - - class Child(Base): - @override - def method(self) -> None: - super().method() - - When this decorator is applied to a method, the type checker will - validate that it overrides a method or attribute with the same name on a - base class. This helps prevent bugs that may occur when a base class is - changed without an equivalent change to a child class. - - There is no runtime checking of this property. The decorator attempts to - set the ``__override__`` attribute to ``True`` on the decorated object to - allow runtime introspection. - - See PEP 698 for details. - """ - try: - method.__override__ = True - except (AttributeError, TypeError): - # Skip the attribute silently if it is not writable. - # AttributeError happens if the object has __slots__ or a - # read-only property, TypeError if it's a builtin class. - pass - return method - - -def is_protocol(tp: type, /) -> bool: - """Return True if the given type is a Protocol. - - Example:: - - >>> from typing import Protocol, is_protocol - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> is_protocol(P) - True - >>> is_protocol(int) - False - """ - return ( - isinstance(tp, type) - and getattr(tp, '_is_protocol', False) - and tp != Protocol - ) - - -def get_protocol_members(tp: type, /) -> frozenset[str]: - """Return the set of members defined in a Protocol. - - Example:: - - >>> from typing import Protocol, get_protocol_members - >>> class P(Protocol): - ... def a(self) -> str: ... - ... b: int - >>> get_protocol_members(P) == frozenset({'a', 'b'}) - True - - Raise a TypeError for arguments that are not Protocols. - """ - if not is_protocol(tp): - raise TypeError(f'{tp!r} is not a Protocol') - return frozenset(tp.__protocol_attrs__) - - -def __getattr__(attr): - """Improve the import time of the typing module. - - Soft-deprecated objects which are costly to create - are only created on-demand here. - """ - if attr == "ForwardRef": - obj = _lazy_annotationlib.ForwardRef - elif attr in {"Pattern", "Match"}: - import re - obj = _alias(getattr(re, attr), 1) - elif attr in {"ContextManager", "AsyncContextManager"}: - import contextlib - obj = _alias(getattr(contextlib, f"Abstract{attr}"), 2, name=attr, defaults=(bool | None,)) - elif attr == "_collect_parameters": - import warnings - - depr_message = ( - "The private _collect_parameters function is deprecated and will be" - " removed in a future version of Python. Any use of private functions" - " is discouraged and may break in the future." - ) - warnings.warn(depr_message, category=DeprecationWarning, stacklevel=2) - obj = _collect_type_parameters - else: - raise AttributeError(f"module {__name__!r} has no attribute {attr!r}") - globals()[attr] = obj - return obj diff --git a/Python314_4_x86_Template/Lib/unittest/__init__.py b/Python314_4_x86_Template/Lib/unittest/__init__.py deleted file mode 100644 index 78ff6bb4f..000000000 --- a/Python314_4_x86_Template/Lib/unittest/__init__.py +++ /dev/null @@ -1,80 +0,0 @@ -""" -Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's -Smalltalk testing framework (used with permission). - -This module contains the core framework classes that form the basis of -specific test cases and suites (TestCase, TestSuite etc.), and also a -text-based utility class for running the tests and reporting the results - (TextTestRunner). - -Simple usage: - - import unittest - - class IntegerArithmeticTestCase(unittest.TestCase): - def testAdd(self): # test method names begin with 'test' - self.assertEqual((1 + 2), 3) - self.assertEqual(0 + 1, 1) - def testMultiply(self): - self.assertEqual((0 * 10), 0) - self.assertEqual((5 * 8), 40) - - if __name__ == '__main__': - unittest.main() - -Further information is available in the bundled documentation, and from - - http://docs.python.org/library/unittest.html - -Copyright (c) 1999-2003 Steve Purcell -Copyright (c) 2003 Python Software Foundation -This module is free software, and you may redistribute it and/or modify -it under the same terms as Python itself, so long as this copyright message -and disclaimer are retained in their original form. - -IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, -SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF -THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, -AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, -SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -""" - -__all__ = ['TestResult', 'TestCase', 'IsolatedAsyncioTestCase', 'TestSuite', - 'TextTestRunner', 'TestLoader', 'FunctionTestCase', 'main', - 'defaultTestLoader', 'SkipTest', 'skip', 'skipIf', 'skipUnless', - 'expectedFailure', 'TextTestResult', 'installHandler', - 'registerResult', 'removeResult', 'removeHandler', - 'addModuleCleanup', 'doModuleCleanups', 'enterModuleContext'] - -__unittest = True - -from .result import TestResult -from .case import (addModuleCleanup, TestCase, FunctionTestCase, SkipTest, skip, - skipIf, skipUnless, expectedFailure, doModuleCleanups, - enterModuleContext) -from .suite import BaseTestSuite, TestSuite # noqa: F401 -from .loader import TestLoader, defaultTestLoader -from .main import TestProgram, main # noqa: F401 -from .runner import TextTestRunner, TextTestResult -from .signals import installHandler, registerResult, removeResult, removeHandler -# IsolatedAsyncioTestCase will be imported lazily. - - -# Lazy import of IsolatedAsyncioTestCase from .async_case -# It imports asyncio, which is relatively heavy, but most tests -# do not need it. - -def __dir__(): - return globals().keys() | {'IsolatedAsyncioTestCase'} - -def __getattr__(name): - if name == 'IsolatedAsyncioTestCase': - global IsolatedAsyncioTestCase - from .async_case import IsolatedAsyncioTestCase - return IsolatedAsyncioTestCase - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/Python314_4_x86_Template/Lib/unittest/__main__.py b/Python314_4_x86_Template/Lib/unittest/__main__.py deleted file mode 100644 index e5876f569..000000000 --- a/Python314_4_x86_Template/Lib/unittest/__main__.py +++ /dev/null @@ -1,18 +0,0 @@ -"""Main entry point""" - -import sys -if sys.argv[0].endswith("__main__.py"): - import os.path - # We change sys.argv[0] to make help message more useful - # use executable without path, unquoted - # (it's just a hint anyway) - # (if you have spaces in your executable you get what you deserve!) - executable = os.path.basename(sys.executable) - sys.argv[0] = executable + " -m unittest" - del os - -__unittest = True - -from .main import main - -main(module=None) diff --git a/Python314_4_x86_Template/Lib/unittest/_log.py b/Python314_4_x86_Template/Lib/unittest/_log.py deleted file mode 100644 index 94868e5bb..000000000 --- a/Python314_4_x86_Template/Lib/unittest/_log.py +++ /dev/null @@ -1,86 +0,0 @@ -import logging -import collections - -from .case import _BaseTestCaseContext - - -_LoggingWatcher = collections.namedtuple("_LoggingWatcher", - ["records", "output"]) - -class _CapturingHandler(logging.Handler): - """ - A logging handler capturing all (raw and formatted) logging output. - """ - - def __init__(self): - logging.Handler.__init__(self) - self.watcher = _LoggingWatcher([], []) - - def flush(self): - pass - - def emit(self, record): - self.watcher.records.append(record) - msg = self.format(record) - self.watcher.output.append(msg) - - -class _AssertLogsContext(_BaseTestCaseContext): - """A context manager for assertLogs() and assertNoLogs() """ - - LOGGING_FORMAT = "%(levelname)s:%(name)s:%(message)s" - - def __init__(self, test_case, logger_name, level, no_logs): - _BaseTestCaseContext.__init__(self, test_case) - self.logger_name = logger_name - if level: - self.level = logging._nameToLevel.get(level, level) - else: - self.level = logging.INFO - self.msg = None - self.no_logs = no_logs - - def __enter__(self): - if isinstance(self.logger_name, logging.Logger): - logger = self.logger = self.logger_name - else: - logger = self.logger = logging.getLogger(self.logger_name) - formatter = logging.Formatter(self.LOGGING_FORMAT) - handler = _CapturingHandler() - handler.setLevel(self.level) - handler.setFormatter(formatter) - self.watcher = handler.watcher - self.old_handlers = logger.handlers[:] - self.old_level = logger.level - self.old_propagate = logger.propagate - logger.handlers = [handler] - logger.setLevel(self.level) - logger.propagate = False - if self.no_logs: - return - return handler.watcher - - def __exit__(self, exc_type, exc_value, tb): - self.logger.handlers = self.old_handlers - self.logger.propagate = self.old_propagate - self.logger.setLevel(self.old_level) - - if exc_type is not None: - # let unexpected exceptions pass through - return False - - if self.no_logs: - # assertNoLogs - if len(self.watcher.records) > 0: - self._raiseFailure( - "Unexpected logs found: {!r}".format( - self.watcher.output - ) - ) - - else: - # assertLogs - if len(self.watcher.records) == 0: - self._raiseFailure( - "no logs of level {} or higher triggered on {}" - .format(logging.getLevelName(self.level), self.logger.name)) diff --git a/Python314_4_x86_Template/Lib/unittest/async_case.py b/Python314_4_x86_Template/Lib/unittest/async_case.py deleted file mode 100644 index a1c0d6c36..000000000 --- a/Python314_4_x86_Template/Lib/unittest/async_case.py +++ /dev/null @@ -1,158 +0,0 @@ -import asyncio -import contextvars -import inspect -import warnings - -from .case import TestCase - -__unittest = True - -class IsolatedAsyncioTestCase(TestCase): - # Names intentionally have a long prefix - # to reduce a chance of clashing with user-defined attributes - # from inherited test case - # - # The class doesn't call loop.run_until_complete(self.setUp()) and family - # but uses a different approach: - # 1. create a long-running task that reads self.setUp() - # awaitable from queue along with a future - # 2. await the awaitable object passing in and set the result - # into the future object - # 3. Outer code puts the awaitable and the future object into a queue - # with waiting for the future - # The trick is necessary because every run_until_complete() call - # creates a new task with embedded ContextVar context. - # To share contextvars between setUp(), test and tearDown() we need to execute - # them inside the same task. - - # Note: the test case modifies event loop policy if the policy was not instantiated - # yet, unless loop_factory=asyncio.EventLoop is set. - # asyncio.get_event_loop_policy() creates a default policy on demand but never - # returns None - # I believe this is not an issue in user level tests but python itself for testing - # should reset a policy in every test module - # by calling asyncio.set_event_loop_policy(None) in tearDownModule() - # or set loop_factory=asyncio.EventLoop - - loop_factory = None - - def __init__(self, methodName='runTest'): - super().__init__(methodName) - self._asyncioRunner = None - self._asyncioTestContext = contextvars.copy_context() - - async def asyncSetUp(self): - pass - - async def asyncTearDown(self): - pass - - def addAsyncCleanup(self, func, /, *args, **kwargs): - # A trivial trampoline to addCleanup() - # the function exists because it has a different semantics - # and signature: - # addCleanup() accepts regular functions - # but addAsyncCleanup() accepts coroutines - # - # We intentionally don't add inspect.iscoroutinefunction() check - # for func argument because there is no way - # to check for async function reliably: - # 1. It can be "async def func()" itself - # 2. Class can implement "async def __call__()" method - # 3. Regular "def func()" that returns awaitable object - self.addCleanup(*(func, *args), **kwargs) - - async def enterAsyncContext(self, cm): - """Enters the supplied asynchronous context manager. - - If successful, also adds its __aexit__ method as a cleanup - function and returns the result of the __aenter__ method. - """ - # We look up the special methods on the type to match the with - # statement. - cls = type(cm) - try: - enter = cls.__aenter__ - exit = cls.__aexit__ - except AttributeError: - msg = (f"'{cls.__module__}.{cls.__qualname__}' object does " - "not support the asynchronous context manager protocol") - try: - cls.__enter__ - cls.__exit__ - except AttributeError: - pass - else: - msg += (" but it supports the context manager protocol. " - "Did you mean to use enterContext()?") - raise TypeError(msg) from None - result = await enter(cm) - self.addAsyncCleanup(exit, cm, None, None, None) - return result - - def _callSetUp(self): - # Force loop to be initialized and set as the current loop - # so that setUp functions can use get_event_loop() and get the - # correct loop instance. - self._asyncioRunner.get_loop() - self._asyncioTestContext.run(self.setUp) - self._callAsync(self.asyncSetUp) - - def _callTestMethod(self, method): - result = self._callMaybeAsync(method) - if result is not None: - msg = ( - f'It is deprecated to return a value that is not None ' - f'from a test case ({method} returned {type(result).__name__!r})', - ) - warnings.warn(msg, DeprecationWarning, stacklevel=4) - - def _callTearDown(self): - self._callAsync(self.asyncTearDown) - self._asyncioTestContext.run(self.tearDown) - - def _callCleanup(self, function, *args, **kwargs): - self._callMaybeAsync(function, *args, **kwargs) - - def _callAsync(self, func, /, *args, **kwargs): - assert self._asyncioRunner is not None, 'asyncio runner is not initialized' - assert inspect.iscoroutinefunction(func), f'{func!r} is not an async function' - return self._asyncioRunner.run( - func(*args, **kwargs), - context=self._asyncioTestContext - ) - - def _callMaybeAsync(self, func, /, *args, **kwargs): - assert self._asyncioRunner is not None, 'asyncio runner is not initialized' - if inspect.iscoroutinefunction(func): - return self._asyncioRunner.run( - func(*args, **kwargs), - context=self._asyncioTestContext, - ) - else: - return self._asyncioTestContext.run(func, *args, **kwargs) - - def _setupAsyncioRunner(self): - assert self._asyncioRunner is None, 'asyncio runner is already initialized' - runner = asyncio.Runner(debug=True, loop_factory=self.loop_factory) - self._asyncioRunner = runner - - def _tearDownAsyncioRunner(self): - runner = self._asyncioRunner - runner.close() - - def run(self, result=None): - self._setupAsyncioRunner() - try: - return super().run(result) - finally: - self._tearDownAsyncioRunner() - - def debug(self): - self._setupAsyncioRunner() - super().debug() - self._tearDownAsyncioRunner() - - def __del__(self): - if self._asyncioRunner is not None: - self._tearDownAsyncioRunner() diff --git a/Python314_4_x86_Template/Lib/unittest/case.py b/Python314_4_x86_Template/Lib/unittest/case.py deleted file mode 100644 index 884fc1b21..000000000 --- a/Python314_4_x86_Template/Lib/unittest/case.py +++ /dev/null @@ -1,1628 +0,0 @@ -"""Test case implementation""" - -import sys -import functools -import difflib -import pprint -import re -import warnings -import collections -import contextlib -import traceback -import time -import types - -from . import result -from .util import (strclass, safe_repr, _count_diff_all_purpose, - _count_diff_hashable, _common_shorten_repr) - -__unittest = True - -_subtest_msg_sentinel = object() - -DIFF_OMITTED = ('\nDiff is %s characters long. ' - 'Set self.maxDiff to None to see it.') - -class SkipTest(Exception): - """ - Raise this exception in a test to skip it. - - Usually you can use TestCase.skipTest() or one of the skipping decorators - instead of raising this directly. - """ - -class _ShouldStop(Exception): - """ - The test should stop. - """ - -class _UnexpectedSuccess(Exception): - """ - The test was supposed to fail, but it didn't! - """ - - -class _Outcome(object): - def __init__(self, result=None): - self.expecting_failure = False - self.result = result - self.result_supports_subtests = hasattr(result, "addSubTest") - self.success = True - self.expectedFailure = None - - @contextlib.contextmanager - def testPartExecutor(self, test_case, subTest=False): - old_success = self.success - self.success = True - try: - yield - except KeyboardInterrupt: - raise - except SkipTest as e: - self.success = False - _addSkip(self.result, test_case, str(e)) - except _ShouldStop: - pass - except: - exc_info = sys.exc_info() - if self.expecting_failure: - self.expectedFailure = exc_info - else: - self.success = False - if subTest: - self.result.addSubTest(test_case.test_case, test_case, exc_info) - else: - _addError(self.result, test_case, exc_info) - # explicitly break a reference cycle: - # exc_info -> frame -> exc_info - exc_info = None - else: - if subTest and self.success: - self.result.addSubTest(test_case.test_case, test_case, None) - finally: - self.success = self.success and old_success - - -def _addSkip(result, test_case, reason): - addSkip = getattr(result, 'addSkip', None) - if addSkip is not None: - addSkip(test_case, reason) - else: - warnings.warn("TestResult has no addSkip method, skips not reported", - RuntimeWarning, 2) - result.addSuccess(test_case) - -def _addError(result, test, exc_info): - if result is not None and exc_info is not None: - if issubclass(exc_info[0], test.failureException): - result.addFailure(test, exc_info) - else: - result.addError(test, exc_info) - -def _id(obj): - return obj - - -def _enter_context(cm, addcleanup): - # We look up the special methods on the type to match the with - # statement. - cls = type(cm) - try: - enter = cls.__enter__ - exit = cls.__exit__ - except AttributeError: - msg = (f"'{cls.__module__}.{cls.__qualname__}' object does " - "not support the context manager protocol") - try: - cls.__aenter__ - cls.__aexit__ - except AttributeError: - pass - else: - msg += (" but it supports the asynchronous context manager " - "protocol. Did you mean to use enterAsyncContext()?") - raise TypeError(msg) from None - result = enter(cm) - addcleanup(exit, cm, None, None, None) - return result - - -_module_cleanups = [] -def addModuleCleanup(function, /, *args, **kwargs): - """Same as addCleanup, except the cleanup items are called even if - setUpModule fails (unlike tearDownModule).""" - _module_cleanups.append((function, args, kwargs)) - -def enterModuleContext(cm): - """Same as enterContext, but module-wide.""" - return _enter_context(cm, addModuleCleanup) - - -def doModuleCleanups(): - """Execute all module cleanup functions. Normally called for you after - tearDownModule.""" - exceptions = [] - while _module_cleanups: - function, args, kwargs = _module_cleanups.pop() - try: - function(*args, **kwargs) - except Exception as exc: - exceptions.append(exc) - if exceptions: - # Swallows all but first exception. If a multi-exception handler - # gets written we should use that here instead. - raise exceptions[0] - - -def skip(reason): - """ - Unconditionally skip a test. - """ - def decorator(test_item): - if not isinstance(test_item, type): - @functools.wraps(test_item) - def skip_wrapper(*args, **kwargs): - raise SkipTest(reason) - test_item = skip_wrapper - - test_item.__unittest_skip__ = True - test_item.__unittest_skip_why__ = reason - return test_item - if isinstance(reason, types.FunctionType): - test_item = reason - reason = '' - return decorator(test_item) - return decorator - -def skipIf(condition, reason): - """ - Skip a test if the condition is true. - """ - if condition: - return skip(reason) - return _id - -def skipUnless(condition, reason): - """ - Skip a test unless the condition is true. - """ - if not condition: - return skip(reason) - return _id - -def expectedFailure(test_item): - test_item.__unittest_expecting_failure__ = True - return test_item - -def _is_subtype(expected, basetype): - if isinstance(expected, tuple): - return all(_is_subtype(e, basetype) for e in expected) - return isinstance(expected, type) and issubclass(expected, basetype) - -class _BaseTestCaseContext: - - def __init__(self, test_case): - self.test_case = test_case - - def _raiseFailure(self, standardMsg): - msg = self.test_case._formatMessage(self.msg, standardMsg) - raise self.test_case.failureException(msg) - -class _AssertRaisesBaseContext(_BaseTestCaseContext): - - def __init__(self, expected, test_case, expected_regex=None): - _BaseTestCaseContext.__init__(self, test_case) - self.expected = expected - self.test_case = test_case - if expected_regex is not None: - expected_regex = re.compile(expected_regex) - self.expected_regex = expected_regex - self.obj_name = None - self.msg = None - - def handle(self, name, args, kwargs): - """ - If args is empty, assertRaises/Warns is being used as a - context manager, so check for a 'msg' kwarg and return self. - If args is not empty, call a callable passing positional and keyword - arguments. - """ - try: - if not _is_subtype(self.expected, self._base_type): - raise TypeError('%s() arg 1 must be %s' % - (name, self._base_type_str)) - if not args: - self.msg = kwargs.pop('msg', None) - if kwargs: - raise TypeError('%r is an invalid keyword argument for ' - 'this function' % (next(iter(kwargs)),)) - return self - - callable_obj, *args = args - try: - self.obj_name = callable_obj.__name__ - except AttributeError: - self.obj_name = str(callable_obj) - with self: - callable_obj(*args, **kwargs) - finally: - # bpo-23890: manually break a reference cycle - self = None - - -class _AssertRaisesContext(_AssertRaisesBaseContext): - """A context manager used to implement TestCase.assertRaises* methods.""" - - _base_type = BaseException - _base_type_str = 'an exception type or tuple of exception types' - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, tb): - if exc_type is None: - try: - exc_name = self.expected.__name__ - except AttributeError: - exc_name = str(self.expected) - if self.obj_name: - self._raiseFailure("{} not raised by {}".format(exc_name, - self.obj_name)) - else: - self._raiseFailure("{} not raised".format(exc_name)) - else: - traceback.clear_frames(tb) - if not issubclass(exc_type, self.expected): - # let unexpected exceptions pass through - return False - # store exception, without traceback, for later retrieval - self.exception = exc_value.with_traceback(None) - if self.expected_regex is None: - return True - - expected_regex = self.expected_regex - if not expected_regex.search(str(exc_value)): - self._raiseFailure('"{}" does not match "{}"'.format( - expected_regex.pattern, str(exc_value))) - return True - - __class_getitem__ = classmethod(types.GenericAlias) - - -class _AssertWarnsContext(_AssertRaisesBaseContext): - """A context manager used to implement TestCase.assertWarns* methods.""" - - _base_type = Warning - _base_type_str = 'a warning type or tuple of warning types' - - def __enter__(self): - # The __warningregistry__'s need to be in a pristine state for tests - # to work properly. - for v in list(sys.modules.values()): - if getattr(v, '__warningregistry__', None): - v.__warningregistry__ = {} - self.warnings_manager = warnings.catch_warnings(record=True) - self.warnings = self.warnings_manager.__enter__() - warnings.simplefilter("always", self.expected) - return self - - def __exit__(self, exc_type, exc_value, tb): - self.warnings_manager.__exit__(exc_type, exc_value, tb) - if exc_type is not None: - # let unexpected exceptions pass through - return - try: - exc_name = self.expected.__name__ - except AttributeError: - exc_name = str(self.expected) - first_matching = None - for m in self.warnings: - w = m.message - if not isinstance(w, self.expected): - continue - if first_matching is None: - first_matching = w - if (self.expected_regex is not None and - not self.expected_regex.search(str(w))): - continue - # store warning for later retrieval - self.warning = w - self.filename = m.filename - self.lineno = m.lineno - return - # Now we simply try to choose a helpful failure message - if first_matching is not None: - self._raiseFailure('"{}" does not match "{}"'.format( - self.expected_regex.pattern, str(first_matching))) - if self.obj_name: - self._raiseFailure("{} not triggered by {}".format(exc_name, - self.obj_name)) - else: - self._raiseFailure("{} not triggered".format(exc_name)) - - -class _AssertNotWarnsContext(_AssertWarnsContext): - - def __exit__(self, exc_type, exc_value, tb): - self.warnings_manager.__exit__(exc_type, exc_value, tb) - if exc_type is not None: - # let unexpected exceptions pass through - return - try: - exc_name = self.expected.__name__ - except AttributeError: - exc_name = str(self.expected) - for m in self.warnings: - w = m.message - if isinstance(w, self.expected): - self._raiseFailure(f"{exc_name} triggered") - - -class _OrderedChainMap(collections.ChainMap): - def __iter__(self): - seen = set() - for mapping in self.maps: - for k in mapping: - if k not in seen: - seen.add(k) - yield k - - -class TestCase(object): - """A class whose instances are single test cases. - - By default, the test code itself should be placed in a method named - 'runTest'. - - If the fixture may be used for many test cases, create as - many test methods as are needed. When instantiating such a TestCase - subclass, specify in the constructor arguments the name of the test method - that the instance is to execute. - - Test authors should subclass TestCase for their own tests. Construction - and deconstruction of the test's environment ('fixture') can be - implemented by overriding the 'setUp' and 'tearDown' methods respectively. - - If it is necessary to override the __init__ method, the base class - __init__ method must always be called. It is important that subclasses - should not change the signature of their __init__ method, since instances - of the classes are instantiated automatically by parts of the framework - in order to be run. - - When subclassing TestCase, you can set these attributes: - * failureException: determines which exception will be raised when - the instance's assertion methods fail; test methods raising this - exception will be deemed to have 'failed' rather than 'errored'. - * longMessage: determines whether long messages (including repr of - objects used in assert methods) will be printed on failure in *addition* - to any explicit message passed. - * maxDiff: sets the maximum length of a diff in failure messages - by assert methods using difflib. It is looked up as an instance - attribute so can be configured by individual tests if required. - """ - - failureException = AssertionError - - longMessage = True - - maxDiff = 80*8 - - # If a string is longer than _diffThreshold, use normal comparison instead - # of difflib. See #11763. - _diffThreshold = 2**16 - - def __init_subclass__(cls, *args, **kwargs): - # Attribute used by TestSuite for classSetUp - cls._classSetupFailed = False - cls._class_cleanups = [] - super().__init_subclass__(*args, **kwargs) - - def __init__(self, methodName='runTest'): - """Create an instance of the class that will use the named test - method when executed. Raises a ValueError if the instance does - not have a method with the specified name. - """ - self._testMethodName = methodName - self._outcome = None - self._testMethodDoc = 'No test' - try: - testMethod = getattr(self, methodName) - except AttributeError: - if methodName != 'runTest': - # we allow instantiation with no explicit method name - # but not an *incorrect* or missing method name - raise ValueError("no such test method in %s: %s" % - (self.__class__, methodName)) - else: - self._testMethodDoc = testMethod.__doc__ - self._cleanups = [] - self._subtest = None - - # Map types to custom assertEqual functions that will compare - # instances of said type in more detail to generate a more useful - # error message. - self._type_equality_funcs = {} - self.addTypeEqualityFunc(dict, 'assertDictEqual') - self.addTypeEqualityFunc(list, 'assertListEqual') - self.addTypeEqualityFunc(tuple, 'assertTupleEqual') - self.addTypeEqualityFunc(set, 'assertSetEqual') - self.addTypeEqualityFunc(frozenset, 'assertSetEqual') - self.addTypeEqualityFunc(str, 'assertMultiLineEqual') - - def addTypeEqualityFunc(self, typeobj, function): - """Add a type specific assertEqual style function to compare a type. - - This method is for use by TestCase subclasses that need to register - their own type equality functions to provide nicer error messages. - - Args: - typeobj: The data type to call this function on when both values - are of the same type in assertEqual(). - function: The callable taking two arguments and an optional - msg= argument that raises self.failureException with a - useful error message when the two arguments are not equal. - """ - self._type_equality_funcs[typeobj] = function - - def addCleanup(self, function, /, *args, **kwargs): - """Add a function, with arguments, to be called when the test is - completed. Functions added are called on a LIFO basis and are - called after tearDown on test failure or success. - - Cleanup items are called even if setUp fails (unlike tearDown).""" - self._cleanups.append((function, args, kwargs)) - - def enterContext(self, cm): - """Enters the supplied context manager. - - If successful, also adds its __exit__ method as a cleanup - function and returns the result of the __enter__ method. - """ - return _enter_context(cm, self.addCleanup) - - @classmethod - def addClassCleanup(cls, function, /, *args, **kwargs): - """Same as addCleanup, except the cleanup items are called even if - setUpClass fails (unlike tearDownClass).""" - cls._class_cleanups.append((function, args, kwargs)) - - @classmethod - def enterClassContext(cls, cm): - """Same as enterContext, but class-wide.""" - return _enter_context(cm, cls.addClassCleanup) - - def setUp(self): - "Hook method for setting up the test fixture before exercising it." - pass - - def tearDown(self): - "Hook method for deconstructing the test fixture after testing it." - pass - - @classmethod - def setUpClass(cls): - "Hook method for setting up class fixture before running tests in the class." - - @classmethod - def tearDownClass(cls): - "Hook method for deconstructing the class fixture after running all tests in the class." - - def countTestCases(self): - return 1 - - def defaultTestResult(self): - return result.TestResult() - - def shortDescription(self): - """Returns a one-line description of the test, or None if no - description has been provided. - - The default implementation of this method returns the first line of - the specified test method's docstring. - """ - doc = self._testMethodDoc - return doc.strip().split("\n")[0].strip() if doc else None - - - def id(self): - return "%s.%s" % (strclass(self.__class__), self._testMethodName) - - def __eq__(self, other): - if type(self) is not type(other): - return NotImplemented - - return self._testMethodName == other._testMethodName - - def __hash__(self): - return hash((type(self), self._testMethodName)) - - def __str__(self): - return "%s (%s.%s)" % (self._testMethodName, strclass(self.__class__), self._testMethodName) - - def __repr__(self): - return "<%s testMethod=%s>" % \ - (strclass(self.__class__), self._testMethodName) - - @contextlib.contextmanager - def subTest(self, msg=_subtest_msg_sentinel, **params): - """Return a context manager that will return the enclosed block - of code in a subtest identified by the optional message and - keyword parameters. A failure in the subtest marks the test - case as failed but resumes execution at the end of the enclosed - block, allowing further test code to be executed. - """ - if self._outcome is None or not self._outcome.result_supports_subtests: - yield - return - parent = self._subtest - if parent is None: - params_map = _OrderedChainMap(params) - else: - params_map = parent.params.new_child(params) - self._subtest = _SubTest(self, msg, params_map) - try: - with self._outcome.testPartExecutor(self._subtest, subTest=True): - yield - if not self._outcome.success: - result = self._outcome.result - if result is not None and result.failfast: - raise _ShouldStop - elif self._outcome.expectedFailure: - # If the test is expecting a failure, we really want to - # stop now and register the expected failure. - raise _ShouldStop - finally: - self._subtest = parent - - def _addExpectedFailure(self, result, exc_info): - try: - addExpectedFailure = result.addExpectedFailure - except AttributeError: - warnings.warn("TestResult has no addExpectedFailure method, reporting as passes", - RuntimeWarning) - result.addSuccess(self) - else: - addExpectedFailure(self, exc_info) - - def _addUnexpectedSuccess(self, result): - try: - addUnexpectedSuccess = result.addUnexpectedSuccess - except AttributeError: - warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failure", - RuntimeWarning) - # We need to pass an actual exception and traceback to addFailure, - # otherwise the legacy result can choke. - try: - raise _UnexpectedSuccess from None - except _UnexpectedSuccess: - result.addFailure(self, sys.exc_info()) - else: - addUnexpectedSuccess(self) - - def _addDuration(self, result, elapsed): - try: - addDuration = result.addDuration - except AttributeError: - warnings.warn("TestResult has no addDuration method", - RuntimeWarning) - else: - addDuration(self, elapsed) - - def _callSetUp(self): - self.setUp() - - def _callTestMethod(self, method): - result = method() - if result is not None: - import inspect - msg = ( - f'It is deprecated to return a value that is not None ' - f'from a test case ({method} returned {type(result).__name__!r})' - ) - if inspect.iscoroutine(result): - msg += ( - '. Maybe you forgot to use IsolatedAsyncioTestCase as the base class?' - ) - warnings.warn(msg, DeprecationWarning, stacklevel=3) - - def _callTearDown(self): - self.tearDown() - - def _callCleanup(self, function, /, *args, **kwargs): - function(*args, **kwargs) - - def run(self, result=None): - if result is None: - result = self.defaultTestResult() - startTestRun = getattr(result, 'startTestRun', None) - stopTestRun = getattr(result, 'stopTestRun', None) - if startTestRun is not None: - startTestRun() - else: - stopTestRun = None - - result.startTest(self) - try: - testMethod = getattr(self, self._testMethodName) - if (getattr(self.__class__, "__unittest_skip__", False) or - getattr(testMethod, "__unittest_skip__", False)): - # If the class or method was skipped. - skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') - or getattr(testMethod, '__unittest_skip_why__', '')) - _addSkip(result, self, skip_why) - return result - - expecting_failure = ( - getattr(self, "__unittest_expecting_failure__", False) or - getattr(testMethod, "__unittest_expecting_failure__", False) - ) - outcome = _Outcome(result) - start_time = time.perf_counter() - try: - self._outcome = outcome - - with outcome.testPartExecutor(self): - self._callSetUp() - if outcome.success: - outcome.expecting_failure = expecting_failure - with outcome.testPartExecutor(self): - self._callTestMethod(testMethod) - outcome.expecting_failure = False - with outcome.testPartExecutor(self): - self._callTearDown() - self.doCleanups() - self._addDuration(result, (time.perf_counter() - start_time)) - - if outcome.success: - if expecting_failure: - if outcome.expectedFailure: - self._addExpectedFailure(result, outcome.expectedFailure) - else: - self._addUnexpectedSuccess(result) - else: - result.addSuccess(self) - return result - finally: - # explicitly break reference cycle: - # outcome.expectedFailure -> frame -> outcome -> outcome.expectedFailure - outcome.expectedFailure = None - outcome = None - - # clear the outcome, no more needed - self._outcome = None - - finally: - result.stopTest(self) - if stopTestRun is not None: - stopTestRun() - - def doCleanups(self): - """Execute all cleanup functions. Normally called for you after - tearDown.""" - outcome = self._outcome or _Outcome() - while self._cleanups: - function, args, kwargs = self._cleanups.pop() - with outcome.testPartExecutor(self): - self._callCleanup(function, *args, **kwargs) - - # return this for backwards compatibility - # even though we no longer use it internally - return outcome.success - - @classmethod - def doClassCleanups(cls): - """Execute all class cleanup functions. Normally called for you after - tearDownClass.""" - cls.tearDown_exceptions = [] - while cls._class_cleanups: - function, args, kwargs = cls._class_cleanups.pop() - try: - function(*args, **kwargs) - except Exception: - cls.tearDown_exceptions.append(sys.exc_info()) - - def __call__(self, *args, **kwds): - return self.run(*args, **kwds) - - def debug(self): - """Run the test without collecting errors in a TestResult""" - testMethod = getattr(self, self._testMethodName) - if (getattr(self.__class__, "__unittest_skip__", False) or - getattr(testMethod, "__unittest_skip__", False)): - # If the class or method was skipped. - skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') - or getattr(testMethod, '__unittest_skip_why__', '')) - raise SkipTest(skip_why) - - self._callSetUp() - self._callTestMethod(testMethod) - self._callTearDown() - while self._cleanups: - function, args, kwargs = self._cleanups.pop() - self._callCleanup(function, *args, **kwargs) - - def skipTest(self, reason): - """Skip this test.""" - raise SkipTest(reason) - - def fail(self, msg=None): - """Fail immediately, with the given message.""" - raise self.failureException(msg) - - def assertFalse(self, expr, msg=None): - """Check that the expression is false.""" - if expr: - msg = self._formatMessage(msg, "%s is not false" % safe_repr(expr)) - raise self.failureException(msg) - - def assertTrue(self, expr, msg=None): - """Check that the expression is true.""" - if not expr: - msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr)) - raise self.failureException(msg) - - def _formatMessage(self, msg, standardMsg): - """Honour the longMessage attribute when generating failure messages. - If longMessage is False this means: - * Use only an explicit message if it is provided - * Otherwise use the standard message for the assert - - If longMessage is True: - * Use the standard message - * If an explicit message is provided, plus ' : ' and the explicit message - """ - if not self.longMessage: - return msg or standardMsg - if msg is None: - return standardMsg - try: - # don't switch to '{}' formatting in Python 2.X - # it changes the way unicode input is handled - return '%s : %s' % (standardMsg, msg) - except UnicodeDecodeError: - return '%s : %s' % (safe_repr(standardMsg), safe_repr(msg)) - - def assertRaises(self, expected_exception, *args, **kwargs): - """Fail unless an exception of class expected_exception is raised - by the callable when invoked with specified positional and - keyword arguments. If a different type of exception is - raised, it will not be caught, and the test case will be - deemed to have suffered an error, exactly as for an - unexpected exception. - - If called with the callable and arguments omitted, will return a - context object used like this:: - - with self.assertRaises(SomeException): - do_something() - - An optional keyword argument 'msg' can be provided when assertRaises - is used as a context object. - - The context manager keeps a reference to the exception as - the 'exception' attribute. This allows you to inspect the - exception after the assertion:: - - with self.assertRaises(SomeException) as cm: - do_something() - the_exception = cm.exception - self.assertEqual(the_exception.error_code, 3) - """ - context = _AssertRaisesContext(expected_exception, self) - try: - return context.handle('assertRaises', args, kwargs) - finally: - # bpo-23890: manually break a reference cycle - context = None - - def assertWarns(self, expected_warning, *args, **kwargs): - """Fail unless a warning of class warnClass is triggered - by the callable when invoked with specified positional and - keyword arguments. If a different type of warning is - triggered, it will not be handled: depending on the other - warning filtering rules in effect, it might be silenced, printed - out, or raised as an exception. - - If called with the callable and arguments omitted, will return a - context object used like this:: - - with self.assertWarns(SomeWarning): - do_something() - - An optional keyword argument 'msg' can be provided when assertWarns - is used as a context object. - - The context manager keeps a reference to the first matching - warning as the 'warning' attribute; similarly, the 'filename' - and 'lineno' attributes give you information about the line - of Python code from which the warning was triggered. - This allows you to inspect the warning after the assertion:: - - with self.assertWarns(SomeWarning) as cm: - do_something() - the_warning = cm.warning - self.assertEqual(the_warning.some_attribute, 147) - """ - context = _AssertWarnsContext(expected_warning, self) - return context.handle('assertWarns', args, kwargs) - - def _assertNotWarns(self, expected_warning, *args, **kwargs): - """The opposite of assertWarns. Private due to low demand.""" - context = _AssertNotWarnsContext(expected_warning, self) - return context.handle('_assertNotWarns', args, kwargs) - - def assertLogs(self, logger=None, level=None): - """Fail unless a log message of level *level* or higher is emitted - on *logger_name* or its children. If omitted, *level* defaults to - INFO and *logger* defaults to the root logger. - - This method must be used as a context manager, and will yield - a recording object with two attributes: `output` and `records`. - At the end of the context manager, the `output` attribute will - be a list of the matching formatted log messages and the - `records` attribute will be a list of the corresponding LogRecord - objects. - - Example:: - - with self.assertLogs('foo', level='INFO') as cm: - logging.getLogger('foo').info('first message') - logging.getLogger('foo.bar').error('second message') - self.assertEqual(cm.output, ['INFO:foo:first message', - 'ERROR:foo.bar:second message']) - """ - # Lazy import to avoid importing logging if it is not needed. - from ._log import _AssertLogsContext - return _AssertLogsContext(self, logger, level, no_logs=False) - - def assertNoLogs(self, logger=None, level=None): - """ Fail unless no log messages of level *level* or higher are emitted - on *logger_name* or its children. - - This method must be used as a context manager. - """ - from ._log import _AssertLogsContext - return _AssertLogsContext(self, logger, level, no_logs=True) - - def _getAssertEqualityFunc(self, first, second): - """Get a detailed comparison function for the types of the two args. - - Returns: A callable accepting (first, second, msg=None) that will - raise a failure exception if first != second with a useful human - readable error message for those types. - """ - # - # NOTE(gregory.p.smith): I considered isinstance(first, type(second)) - # and vice versa. I opted for the conservative approach in case - # subclasses are not intended to be compared in detail to their super - # class instances using a type equality func. This means testing - # subtypes won't automagically use the detailed comparison. Callers - # should use their type specific assertSpamEqual method to compare - # subclasses if the detailed comparison is desired and appropriate. - # See the discussion in http://bugs.python.org/issue2578. - # - if type(first) is type(second): - asserter = self._type_equality_funcs.get(type(first)) - if asserter is not None: - if isinstance(asserter, str): - asserter = getattr(self, asserter) - return asserter - - return self._baseAssertEqual - - def _baseAssertEqual(self, first, second, msg=None): - """The default assertEqual implementation, not type specific.""" - if not first == second: - standardMsg = '%s != %s' % _common_shorten_repr(first, second) - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertEqual(self, first, second, msg=None): - """Fail if the two objects are unequal as determined by the '==' - operator. - """ - assertion_func = self._getAssertEqualityFunc(first, second) - assertion_func(first, second, msg=msg) - - def assertNotEqual(self, first, second, msg=None): - """Fail if the two objects are equal as determined by the '!=' - operator. - """ - if not first != second: - msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first), - safe_repr(second))) - raise self.failureException(msg) - - def assertAlmostEqual(self, first, second, places=None, msg=None, - delta=None): - """Fail if the two objects are unequal as determined by their - difference rounded to the given number of decimal places - (default 7) and comparing to zero, or by comparing that the - difference between the two objects is more than the given - delta. - - Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most significant digit). - - If the two objects compare equal then they will automatically - compare almost equal. - """ - if first == second: - # shortcut - return - if delta is not None and places is not None: - raise TypeError("specify delta or places not both") - - diff = abs(first - second) - if delta is not None: - if diff <= delta: - return - - standardMsg = '%s != %s within %s delta (%s difference)' % ( - safe_repr(first), - safe_repr(second), - safe_repr(delta), - safe_repr(diff)) - else: - if places is None: - places = 7 - - if round(diff, places) == 0: - return - - standardMsg = '%s != %s within %r places (%s difference)' % ( - safe_repr(first), - safe_repr(second), - places, - safe_repr(diff)) - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertNotAlmostEqual(self, first, second, places=None, msg=None, - delta=None): - """Fail if the two objects are equal as determined by their - difference rounded to the given number of decimal places - (default 7) and comparing to zero, or by comparing that the - difference between the two objects is less than the given delta. - - Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most significant digit). - - Objects that are equal automatically fail. - """ - if delta is not None and places is not None: - raise TypeError("specify delta or places not both") - diff = abs(first - second) - if delta is not None: - if not (first == second) and diff > delta: - return - standardMsg = '%s == %s within %s delta (%s difference)' % ( - safe_repr(first), - safe_repr(second), - safe_repr(delta), - safe_repr(diff)) - else: - if places is None: - places = 7 - if not (first == second) and round(diff, places) != 0: - return - standardMsg = '%s == %s within %r places' % (safe_repr(first), - safe_repr(second), - places) - - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): - """An equality assertion for ordered sequences (like lists and tuples). - - For the purposes of this function, a valid ordered sequence type is one - which can be indexed, has a length, and has an equality operator. - - Args: - seq1: The first sequence to compare. - seq2: The second sequence to compare. - seq_type: The expected datatype of the sequences, or None if no - datatype should be enforced. - msg: Optional message to use on failure instead of a list of - differences. - """ - if seq_type is not None: - seq_type_name = seq_type.__name__ - if not isinstance(seq1, seq_type): - raise self.failureException('First sequence is not a %s: %s' - % (seq_type_name, safe_repr(seq1))) - if not isinstance(seq2, seq_type): - raise self.failureException('Second sequence is not a %s: %s' - % (seq_type_name, safe_repr(seq2))) - else: - seq_type_name = "sequence" - - differing = None - try: - len1 = len(seq1) - except (TypeError, NotImplementedError): - differing = 'First %s has no length. Non-sequence?' % ( - seq_type_name) - - if differing is None: - try: - len2 = len(seq2) - except (TypeError, NotImplementedError): - differing = 'Second %s has no length. Non-sequence?' % ( - seq_type_name) - - if differing is None: - if seq1 == seq2: - return - - differing = '%ss differ: %s != %s\n' % ( - (seq_type_name.capitalize(),) + - _common_shorten_repr(seq1, seq2)) - - for i in range(min(len1, len2)): - try: - item1 = seq1[i] - except (TypeError, IndexError, NotImplementedError): - differing += ('\nUnable to index element %d of first %s\n' % - (i, seq_type_name)) - break - - try: - item2 = seq2[i] - except (TypeError, IndexError, NotImplementedError): - differing += ('\nUnable to index element %d of second %s\n' % - (i, seq_type_name)) - break - - if item1 != item2: - differing += ('\nFirst differing element %d:\n%s\n%s\n' % - ((i,) + _common_shorten_repr(item1, item2))) - break - else: - if (len1 == len2 and seq_type is None and - type(seq1) != type(seq2)): - # The sequences are the same, but have differing types. - return - - if len1 > len2: - differing += ('\nFirst %s contains %d additional ' - 'elements.\n' % (seq_type_name, len1 - len2)) - try: - differing += ('First extra element %d:\n%s\n' % - (len2, safe_repr(seq1[len2]))) - except (TypeError, IndexError, NotImplementedError): - differing += ('Unable to index element %d ' - 'of first %s\n' % (len2, seq_type_name)) - elif len1 < len2: - differing += ('\nSecond %s contains %d additional ' - 'elements.\n' % (seq_type_name, len2 - len1)) - try: - differing += ('First extra element %d:\n%s\n' % - (len1, safe_repr(seq2[len1]))) - except (TypeError, IndexError, NotImplementedError): - differing += ('Unable to index element %d ' - 'of second %s\n' % (len1, seq_type_name)) - standardMsg = differing - diffMsg = '\n' + '\n'.join( - difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) - - standardMsg = self._truncateMessage(standardMsg, diffMsg) - msg = self._formatMessage(msg, standardMsg) - self.fail(msg) - - def _truncateMessage(self, message, diff): - max_diff = self.maxDiff - if max_diff is None or len(diff) <= max_diff: - return message + diff - return message + (DIFF_OMITTED % len(diff)) - - def assertListEqual(self, list1, list2, msg=None): - """A list-specific equality assertion. - - Args: - list1: The first list to compare. - list2: The second list to compare. - msg: Optional message to use on failure instead of a list of - differences. - - """ - self.assertSequenceEqual(list1, list2, msg, seq_type=list) - - def assertTupleEqual(self, tuple1, tuple2, msg=None): - """A tuple-specific equality assertion. - - Args: - tuple1: The first tuple to compare. - tuple2: The second tuple to compare. - msg: Optional message to use on failure instead of a list of - differences. - """ - self.assertSequenceEqual(tuple1, tuple2, msg, seq_type=tuple) - - def assertSetEqual(self, set1, set2, msg=None): - """A set-specific equality assertion. - - Args: - set1: The first set to compare. - set2: The second set to compare. - msg: Optional message to use on failure instead of a list of - differences. - - assertSetEqual uses ducktyping to support different types of sets, and - is optimized for sets specifically (parameters must support a - difference method). - """ - try: - difference1 = set1.difference(set2) - except TypeError as e: - self.fail('invalid type when attempting set difference: %s' % e) - except AttributeError as e: - self.fail('first argument does not support set difference: %s' % e) - - try: - difference2 = set2.difference(set1) - except TypeError as e: - self.fail('invalid type when attempting set difference: %s' % e) - except AttributeError as e: - self.fail('second argument does not support set difference: %s' % e) - - if not (difference1 or difference2): - return - - lines = [] - if difference1: - lines.append('Items in the first set but not the second:') - for item in difference1: - lines.append(repr(item)) - if difference2: - lines.append('Items in the second set but not the first:') - for item in difference2: - lines.append(repr(item)) - - standardMsg = '\n'.join(lines) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIn(self, member, container, msg=None): - """Just like self.assertTrue(a in b), but with a nicer default message.""" - if member not in container: - standardMsg = '%s not found in %s' % (safe_repr(member), - safe_repr(container)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotIn(self, member, container, msg=None): - """Just like self.assertTrue(a not in b), but with a nicer default message.""" - if member in container: - standardMsg = '%s unexpectedly found in %s' % (safe_repr(member), - safe_repr(container)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIs(self, expr1, expr2, msg=None): - """Just like self.assertTrue(a is b), but with a nicer default message.""" - if expr1 is not expr2: - standardMsg = '%s is not %s' % (safe_repr(expr1), - safe_repr(expr2)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNot(self, expr1, expr2, msg=None): - """Just like self.assertTrue(a is not b), but with a nicer default message.""" - if expr1 is expr2: - standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertDictEqual(self, d1, d2, msg=None): - self.assertIsInstance(d1, dict, 'First argument is not a dictionary') - self.assertIsInstance(d2, dict, 'Second argument is not a dictionary') - - if d1 != d2: - standardMsg = '%s != %s' % _common_shorten_repr(d1, d2) - diff = ('\n' + '\n'.join(difflib.ndiff( - pprint.pformat(d1).splitlines(), - pprint.pformat(d2).splitlines()))) - standardMsg = self._truncateMessage(standardMsg, diff) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertCountEqual(self, first, second, msg=None): - """Asserts that two iterables have the same elements, the same number of - times, without regard to order. - - self.assertEqual(Counter(list(first)), - Counter(list(second))) - - Example: - - [0, 1, 1] and [1, 0, 1] compare equal. - - [0, 0, 1] and [0, 1] compare unequal. - - """ - first_seq, second_seq = list(first), list(second) - try: - first = collections.Counter(first_seq) - second = collections.Counter(second_seq) - except TypeError: - # Handle case with unhashable elements - differences = _count_diff_all_purpose(first_seq, second_seq) - else: - if first == second: - return - differences = _count_diff_hashable(first_seq, second_seq) - - if differences: - standardMsg = 'Element counts were not equal:\n' - lines = ['First has %d, Second has %d: %r' % diff for diff in differences] - diffMsg = '\n'.join(lines) - standardMsg = self._truncateMessage(standardMsg, diffMsg) - msg = self._formatMessage(msg, standardMsg) - self.fail(msg) - - def assertMultiLineEqual(self, first, second, msg=None): - """Assert that two multi-line strings are equal.""" - self.assertIsInstance(first, str, "First argument is not a string") - self.assertIsInstance(second, str, "Second argument is not a string") - - if first != second: - # Don't use difflib if the strings are too long - if (len(first) > self._diffThreshold or - len(second) > self._diffThreshold): - self._baseAssertEqual(first, second, msg) - - # Append \n to both strings if either is missing the \n. - # This allows the final ndiff to show the \n difference. The - # exception here is if the string is empty, in which case no - # \n should be added - first_presplit = first - second_presplit = second - if first and second: - if first[-1] != '\n' or second[-1] != '\n': - first_presplit += '\n' - second_presplit += '\n' - elif second and second[-1] != '\n': - second_presplit += '\n' - elif first and first[-1] != '\n': - first_presplit += '\n' - - firstlines = first_presplit.splitlines(keepends=True) - secondlines = second_presplit.splitlines(keepends=True) - - # Generate the message and diff, then raise the exception - standardMsg = '%s != %s' % _common_shorten_repr(first, second) - diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines)) - standardMsg = self._truncateMessage(standardMsg, diff) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertLess(self, a, b, msg=None): - """Just like self.assertTrue(a < b), but with a nicer default message.""" - if not a < b: - standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertLessEqual(self, a, b, msg=None): - """Just like self.assertTrue(a <= b), but with a nicer default message.""" - if not a <= b: - standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertGreater(self, a, b, msg=None): - """Just like self.assertTrue(a > b), but with a nicer default message.""" - if not a > b: - standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertGreaterEqual(self, a, b, msg=None): - """Just like self.assertTrue(a >= b), but with a nicer default message.""" - if not a >= b: - standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b)) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNone(self, obj, msg=None): - """Same as self.assertTrue(obj is None), with a nicer default message.""" - if obj is not None: - standardMsg = '%s is not None' % (safe_repr(obj),) - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsNotNone(self, obj, msg=None): - """Included for symmetry with assertIsNone.""" - if obj is None: - standardMsg = 'unexpectedly None' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsInstance(self, obj, cls, msg=None): - """Same as self.assertTrue(isinstance(obj, cls)), with a nicer - default message.""" - if not isinstance(obj, cls): - if isinstance(cls, tuple): - standardMsg = f'{safe_repr(obj)} is not an instance of any of {cls!r}' - else: - standardMsg = f'{safe_repr(obj)} is not an instance of {cls!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotIsInstance(self, obj, cls, msg=None): - """Included for symmetry with assertIsInstance.""" - if isinstance(obj, cls): - if isinstance(cls, tuple): - for x in cls: - if isinstance(obj, x): - cls = x - break - standardMsg = f'{safe_repr(obj)} is an instance of {cls!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertIsSubclass(self, cls, superclass, msg=None): - try: - if issubclass(cls, superclass): - return - except TypeError: - if not isinstance(cls, type): - self.fail(self._formatMessage(msg, f'{cls!r} is not a class')) - raise - if isinstance(superclass, tuple): - standardMsg = f'{cls!r} is not a subclass of any of {superclass!r}' - else: - standardMsg = f'{cls!r} is not a subclass of {superclass!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotIsSubclass(self, cls, superclass, msg=None): - try: - if not issubclass(cls, superclass): - return - except TypeError: - if not isinstance(cls, type): - self.fail(self._formatMessage(msg, f'{cls!r} is not a class')) - raise - if isinstance(superclass, tuple): - for x in superclass: - if issubclass(cls, x): - superclass = x - break - standardMsg = f'{cls!r} is a subclass of {superclass!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertHasAttr(self, obj, name, msg=None): - if not hasattr(obj, name): - if isinstance(obj, types.ModuleType): - standardMsg = f'module {obj.__name__!r} has no attribute {name!r}' - elif isinstance(obj, type): - standardMsg = f'type object {obj.__name__!r} has no attribute {name!r}' - else: - standardMsg = f'{type(obj).__name__!r} object has no attribute {name!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotHasAttr(self, obj, name, msg=None): - if hasattr(obj, name): - if isinstance(obj, types.ModuleType): - standardMsg = f'module {obj.__name__!r} has unexpected attribute {name!r}' - elif isinstance(obj, type): - standardMsg = f'type object {obj.__name__!r} has unexpected attribute {name!r}' - else: - standardMsg = f'{type(obj).__name__!r} object has unexpected attribute {name!r}' - self.fail(self._formatMessage(msg, standardMsg)) - - def assertRaisesRegex(self, expected_exception, expected_regex, - *args, **kwargs): - """Asserts that the message in a raised exception matches a regex. - - Args: - expected_exception: Exception class expected to be raised. - expected_regex: Regex (re.Pattern object or string) expected - to be found in error message. - args: Function to be called and extra positional args. - kwargs: Extra kwargs. - msg: Optional message used in case of failure. Can only be used - when assertRaisesRegex is used as a context manager. - """ - context = _AssertRaisesContext(expected_exception, self, expected_regex) - return context.handle('assertRaisesRegex', args, kwargs) - - def assertWarnsRegex(self, expected_warning, expected_regex, - *args, **kwargs): - """Asserts that the message in a triggered warning matches a regexp. - Basic functioning is similar to assertWarns() with the addition - that only warnings whose messages also match the regular expression - are considered successful matches. - - Args: - expected_warning: Warning class expected to be triggered. - expected_regex: Regex (re.Pattern object or string) expected - to be found in error message. - args: Function to be called and extra positional args. - kwargs: Extra kwargs. - msg: Optional message used in case of failure. Can only be used - when assertWarnsRegex is used as a context manager. - """ - context = _AssertWarnsContext(expected_warning, self, expected_regex) - return context.handle('assertWarnsRegex', args, kwargs) - - def assertRegex(self, text, expected_regex, msg=None): - """Fail the test unless the text matches the regular expression.""" - if isinstance(expected_regex, (str, bytes)): - assert expected_regex, "expected_regex must not be empty." - expected_regex = re.compile(expected_regex) - if not expected_regex.search(text): - standardMsg = "Regex didn't match: %r not found in %r" % ( - expected_regex.pattern, text) - # _formatMessage ensures the longMessage option is respected - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def assertNotRegex(self, text, unexpected_regex, msg=None): - """Fail the test if the text matches the regular expression.""" - if isinstance(unexpected_regex, (str, bytes)): - unexpected_regex = re.compile(unexpected_regex) - match = unexpected_regex.search(text) - if match: - standardMsg = 'Regex matched: %r matches %r in %r' % ( - text[match.start() : match.end()], - unexpected_regex.pattern, - text) - # _formatMessage ensures the longMessage option is respected - msg = self._formatMessage(msg, standardMsg) - raise self.failureException(msg) - - def _tail_type_check(self, s, tails, msg): - if not isinstance(tails, tuple): - tails = (tails,) - for tail in tails: - if isinstance(tail, str): - if not isinstance(s, str): - self.fail(self._formatMessage(msg, - f'Expected str, not {type(s).__name__}')) - elif isinstance(tail, (bytes, bytearray)): - if not isinstance(s, (bytes, bytearray)): - self.fail(self._formatMessage(msg, - f'Expected bytes, not {type(s).__name__}')) - - def assertStartsWith(self, s, prefix, msg=None): - try: - if s.startswith(prefix): - return - except (AttributeError, TypeError): - self._tail_type_check(s, prefix, msg) - raise - a = safe_repr(s, short=True) - b = safe_repr(prefix) - if isinstance(prefix, tuple): - standardMsg = f"{a} doesn't start with any of {b}" - else: - standardMsg = f"{a} doesn't start with {b}" - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotStartsWith(self, s, prefix, msg=None): - try: - if not s.startswith(prefix): - return - except (AttributeError, TypeError): - self._tail_type_check(s, prefix, msg) - raise - if isinstance(prefix, tuple): - for x in prefix: - if s.startswith(x): - prefix = x - break - a = safe_repr(s, short=True) - b = safe_repr(prefix) - self.fail(self._formatMessage(msg, f"{a} starts with {b}")) - - def assertEndsWith(self, s, suffix, msg=None): - try: - if s.endswith(suffix): - return - except (AttributeError, TypeError): - self._tail_type_check(s, suffix, msg) - raise - a = safe_repr(s, short=True) - b = safe_repr(suffix) - if isinstance(suffix, tuple): - standardMsg = f"{a} doesn't end with any of {b}" - else: - standardMsg = f"{a} doesn't end with {b}" - self.fail(self._formatMessage(msg, standardMsg)) - - def assertNotEndsWith(self, s, suffix, msg=None): - try: - if not s.endswith(suffix): - return - except (AttributeError, TypeError): - self._tail_type_check(s, suffix, msg) - raise - if isinstance(suffix, tuple): - for x in suffix: - if s.endswith(x): - suffix = x - break - a = safe_repr(s, short=True) - b = safe_repr(suffix) - self.fail(self._formatMessage(msg, f"{a} ends with {b}")) - - -class FunctionTestCase(TestCase): - """A test case that wraps a test function. - - This is useful for slipping pre-existing test functions into the - unittest framework. Optionally, set-up and tidy-up functions can be - supplied. As with TestCase, the tidy-up ('tearDown') function will - always be called if the set-up ('setUp') function ran successfully. - """ - - def __init__(self, testFunc, setUp=None, tearDown=None, description=None): - super(FunctionTestCase, self).__init__() - self._setUpFunc = setUp - self._tearDownFunc = tearDown - self._testFunc = testFunc - self._description = description - - def setUp(self): - if self._setUpFunc is not None: - self._setUpFunc() - - def tearDown(self): - if self._tearDownFunc is not None: - self._tearDownFunc() - - def runTest(self): - self._testFunc() - - def id(self): - return self._testFunc.__name__ - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - - return self._setUpFunc == other._setUpFunc and \ - self._tearDownFunc == other._tearDownFunc and \ - self._testFunc == other._testFunc and \ - self._description == other._description - - def __hash__(self): - return hash((type(self), self._setUpFunc, self._tearDownFunc, - self._testFunc, self._description)) - - def __str__(self): - return "%s (%s)" % (strclass(self.__class__), - self._testFunc.__name__) - - def __repr__(self): - return "<%s tec=%s>" % (strclass(self.__class__), - self._testFunc) - - def shortDescription(self): - if self._description is not None: - return self._description - doc = self._testFunc.__doc__ - return doc and doc.split("\n")[0].strip() or None - - -class _SubTest(TestCase): - - def __init__(self, test_case, message, params): - super().__init__() - self._message = message - self.test_case = test_case - self.params = params - self.failureException = test_case.failureException - - def runTest(self): - raise NotImplementedError("subtests cannot be run directly") - - def _subDescription(self): - parts = [] - if self._message is not _subtest_msg_sentinel: - parts.append("[{}]".format(self._message)) - if self.params: - params_desc = ', '.join( - "{}={!r}".format(k, v) - for (k, v) in self.params.items()) - parts.append("({})".format(params_desc)) - return " ".join(parts) or '(<subtest>)' - - def id(self): - return "{} {}".format(self.test_case.id(), self._subDescription()) - - def shortDescription(self): - """Returns a one-line description of the subtest, or None if no - description has been provided. - """ - return self.test_case.shortDescription() - - def __str__(self): - return "{} {}".format(self.test_case, self._subDescription()) diff --git a/Python314_4_x86_Template/Lib/unittest/loader.py b/Python314_4_x86_Template/Lib/unittest/loader.py deleted file mode 100644 index a52950dad..000000000 --- a/Python314_4_x86_Template/Lib/unittest/loader.py +++ /dev/null @@ -1,484 +0,0 @@ -"""Loading unittests.""" - -import os -import re -import sys -import traceback -import types -import functools - -from fnmatch import fnmatch, fnmatchcase - -from . import case, suite, util - -__unittest = True - -# what about .pyc (etc) -# we would need to avoid loading the same tests multiple times -# from '.py', *and* '.pyc' -VALID_MODULE_NAME = re.compile(r'[_a-z]\w*\.py$', re.IGNORECASE) - - -class _FailedTest(case.TestCase): - _testMethodName = None - - def __init__(self, method_name, exception): - self._exception = exception - super(_FailedTest, self).__init__(method_name) - - def __getattr__(self, name): - if name != self._testMethodName: - return super(_FailedTest, self).__getattr__(name) - def testFailure(): - raise self._exception - return testFailure - - -def _make_failed_import_test(name, suiteClass): - message = 'Failed to import test module: %s\n%s' % ( - name, traceback.format_exc()) - return _make_failed_test(name, ImportError(message), suiteClass, message) - -def _make_failed_load_tests(name, exception, suiteClass): - message = 'Failed to call load_tests:\n%s' % (traceback.format_exc(),) - return _make_failed_test( - name, exception, suiteClass, message) - -def _make_failed_test(methodname, exception, suiteClass, message): - test = _FailedTest(methodname, exception) - return suiteClass((test,)), message - -def _make_skipped_test(methodname, exception, suiteClass): - @case.skip(str(exception)) - def testSkipped(self): - pass - attrs = {methodname: testSkipped} - TestClass = type("ModuleSkipped", (case.TestCase,), attrs) - return suiteClass((TestClass(methodname),)) - -def _splitext(path): - return os.path.splitext(path)[0] - - -class TestLoader(object): - """ - This class is responsible for loading tests according to various criteria - and returning them wrapped in a TestSuite - """ - testMethodPrefix = 'test' - sortTestMethodsUsing = staticmethod(util.three_way_cmp) - testNamePatterns = None - suiteClass = suite.TestSuite - _top_level_dir = None - - def __init__(self): - super(TestLoader, self).__init__() - self.errors = [] - # Tracks packages which we have called into via load_tests, to - # avoid infinite re-entrancy. - self._loading_packages = set() - - def loadTestsFromTestCase(self, testCaseClass): - """Return a suite of all test cases contained in testCaseClass""" - if issubclass(testCaseClass, suite.TestSuite): - raise TypeError("Test cases should not be derived from " - "TestSuite. Maybe you meant to derive from " - "TestCase?") - if testCaseClass in (case.TestCase, case.FunctionTestCase): - # We don't load any tests from base types that should not be loaded. - testCaseNames = [] - else: - testCaseNames = self.getTestCaseNames(testCaseClass) - if not testCaseNames and hasattr(testCaseClass, 'runTest'): - testCaseNames = ['runTest'] - loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames)) - return loaded_suite - - def loadTestsFromModule(self, module, *, pattern=None): - """Return a suite of all test cases contained in the given module""" - tests = [] - for name in dir(module): - obj = getattr(module, name) - if ( - isinstance(obj, type) - and issubclass(obj, case.TestCase) - and obj not in (case.TestCase, case.FunctionTestCase) - ): - tests.append(self.loadTestsFromTestCase(obj)) - - load_tests = getattr(module, 'load_tests', None) - tests = self.suiteClass(tests) - if load_tests is not None: - try: - return load_tests(self, tests, pattern) - except Exception as e: - error_case, error_message = _make_failed_load_tests( - module.__name__, e, self.suiteClass) - self.errors.append(error_message) - return error_case - return tests - - def loadTestsFromName(self, name, module=None): - """Return a suite of all test cases given a string specifier. - - The name may resolve either to a module, a test case class, a - test method within a test case class, or a callable object which - returns a TestCase or TestSuite instance. - - The method optionally resolves the names relative to a given module. - """ - parts = name.split('.') - error_case, error_message = None, None - if module is None: - parts_copy = parts[:] - while parts_copy: - try: - module_name = '.'.join(parts_copy) - module = __import__(module_name) - break - except ImportError: - next_attribute = parts_copy.pop() - # Last error so we can give it to the user if needed. - error_case, error_message = _make_failed_import_test( - next_attribute, self.suiteClass) - if not parts_copy: - # Even the top level import failed: report that error. - self.errors.append(error_message) - return error_case - parts = parts[1:] - obj = module - for part in parts: - try: - parent, obj = obj, getattr(obj, part) - except AttributeError as e: - # We can't traverse some part of the name. - if (getattr(obj, '__path__', None) is not None - and error_case is not None): - # This is a package (no __path__ per importlib docs), and we - # encountered an error importing something. We cannot tell - # the difference between package.WrongNameTestClass and - # package.wrong_module_name so we just report the - # ImportError - it is more informative. - self.errors.append(error_message) - return error_case - else: - # Otherwise, we signal that an AttributeError has occurred. - error_case, error_message = _make_failed_test( - part, e, self.suiteClass, - 'Failed to access attribute:\n%s' % ( - traceback.format_exc(),)) - self.errors.append(error_message) - return error_case - - if isinstance(obj, types.ModuleType): - return self.loadTestsFromModule(obj) - elif ( - isinstance(obj, type) - and issubclass(obj, case.TestCase) - and obj not in (case.TestCase, case.FunctionTestCase) - ): - return self.loadTestsFromTestCase(obj) - elif (isinstance(obj, types.FunctionType) and - isinstance(parent, type) and - issubclass(parent, case.TestCase)): - name = parts[-1] - inst = parent(name) - # static methods follow a different path - if not isinstance(getattr(inst, name), types.FunctionType): - return self.suiteClass([inst]) - elif isinstance(obj, suite.TestSuite): - return obj - if callable(obj): - test = obj() - if isinstance(test, suite.TestSuite): - return test - elif isinstance(test, case.TestCase): - return self.suiteClass([test]) - else: - raise TypeError("calling %s returned %s, not a test" % - (obj, test)) - else: - raise TypeError("don't know how to make test from: %s" % obj) - - def loadTestsFromNames(self, names, module=None): - """Return a suite of all test cases found using the given sequence - of string specifiers. See 'loadTestsFromName()'. - """ - suites = [self.loadTestsFromName(name, module) for name in names] - return self.suiteClass(suites) - - def getTestCaseNames(self, testCaseClass): - """Return a sorted sequence of method names found within testCaseClass - """ - def shouldIncludeMethod(attrname): - if not attrname.startswith(self.testMethodPrefix): - return False - testFunc = getattr(testCaseClass, attrname) - if not callable(testFunc): - return False - fullName = f'%s.%s.%s' % ( - testCaseClass.__module__, testCaseClass.__qualname__, attrname - ) - return self.testNamePatterns is None or \ - any(fnmatchcase(fullName, pattern) for pattern in self.testNamePatterns) - testFnNames = list(filter(shouldIncludeMethod, dir(testCaseClass))) - if self.sortTestMethodsUsing: - testFnNames.sort(key=functools.cmp_to_key(self.sortTestMethodsUsing)) - return testFnNames - - def discover(self, start_dir, pattern='test*.py', top_level_dir=None): - """Find and return all test modules from the specified start - directory, recursing into subdirectories to find them and return all - tests found within them. Only test files that match the pattern will - be loaded. (Using shell style pattern matching.) - - All test modules must be importable from the top level of the project. - If the start directory is not the top level directory then the top - level directory must be specified separately. - - If a test package name (directory with '__init__.py') matches the - pattern then the package will be checked for a 'load_tests' function. If - this exists then it will be called with (loader, tests, pattern) unless - the package has already had load_tests called from the same discovery - invocation, in which case the package module object is not scanned for - tests - this ensures that when a package uses discover to further - discover child tests that infinite recursion does not happen. - - If load_tests exists then discovery does *not* recurse into the package, - load_tests is responsible for loading all tests in the package. - - The pattern is deliberately not stored as a loader attribute so that - packages can continue discovery themselves. top_level_dir is stored so - load_tests does not need to pass this argument in to loader.discover(). - - Paths are sorted before being imported to ensure reproducible execution - order even on filesystems with non-alphabetical ordering like ext3/4. - """ - original_top_level_dir = self._top_level_dir - set_implicit_top = False - if top_level_dir is None and self._top_level_dir is not None: - # make top_level_dir optional if called from load_tests in a package - top_level_dir = self._top_level_dir - elif top_level_dir is None: - set_implicit_top = True - top_level_dir = start_dir - - top_level_dir = os.path.abspath(top_level_dir) - - if not top_level_dir in sys.path: - # all test modules must be importable from the top level directory - # should we *unconditionally* put the start directory in first - # in sys.path to minimise likelihood of conflicts between installed - # modules and development versions? - sys.path.insert(0, top_level_dir) - self._top_level_dir = top_level_dir - - is_not_importable = False - is_namespace = False - tests = [] - if os.path.isdir(os.path.abspath(start_dir)): - start_dir = os.path.abspath(start_dir) - if start_dir != top_level_dir: - is_not_importable = not os.path.isfile(os.path.join(start_dir, '__init__.py')) - else: - # support for discovery from dotted module names - try: - __import__(start_dir) - except ImportError: - is_not_importable = True - else: - the_module = sys.modules[start_dir] - if not hasattr(the_module, "__file__") or the_module.__file__ is None: - # look for namespace packages - try: - spec = the_module.__spec__ - except AttributeError: - spec = None - - if spec and spec.submodule_search_locations is not None: - is_namespace = True - - for path in the_module.__path__: - if (not set_implicit_top and - not path.startswith(top_level_dir)): - continue - self._top_level_dir = \ - (path.split(the_module.__name__ - .replace(".", os.path.sep))[0]) - tests.extend(self._find_tests(path, pattern, namespace=True)) - elif the_module.__name__ in sys.builtin_module_names: - # builtin module - raise TypeError('Can not use builtin modules ' - 'as dotted module names') from None - else: - raise TypeError( - f"don't know how to discover from {the_module!r}" - ) from None - - else: - top_part = start_dir.split('.')[0] - start_dir = os.path.abspath(os.path.dirname((the_module.__file__))) - - if set_implicit_top: - if not is_namespace: - if sys.modules[top_part].__file__ is None: - self._top_level_dir = os.path.dirname(the_module.__file__) - if self._top_level_dir not in sys.path: - sys.path.insert(0, self._top_level_dir) - else: - self._top_level_dir = \ - self._get_directory_containing_module(top_part) - sys.path.remove(top_level_dir) - - if is_not_importable: - raise ImportError('Start directory is not importable: %r' % start_dir) - - if not is_namespace: - tests = list(self._find_tests(start_dir, pattern)) - - self._top_level_dir = original_top_level_dir - return self.suiteClass(tests) - - def _get_directory_containing_module(self, module_name): - module = sys.modules[module_name] - full_path = os.path.abspath(module.__file__) - - if os.path.basename(full_path).lower().startswith('__init__.py'): - return os.path.dirname(os.path.dirname(full_path)) - else: - # here we have been given a module rather than a package - so - # all we can do is search the *same* directory the module is in - # should an exception be raised instead - return os.path.dirname(full_path) - - def _get_name_from_path(self, path): - if path == self._top_level_dir: - return '.' - path = _splitext(os.path.normpath(path)) - - _relpath = os.path.relpath(path, self._top_level_dir) - assert not os.path.isabs(_relpath), "Path must be within the project" - assert not _relpath.startswith('..'), "Path must be within the project" - - name = _relpath.replace(os.path.sep, '.') - return name - - def _get_module_from_name(self, name): - __import__(name) - return sys.modules[name] - - def _match_path(self, path, full_path, pattern): - # override this method to use alternative matching strategy - return fnmatch(path, pattern) - - def _find_tests(self, start_dir, pattern, namespace=False): - """Used by discovery. Yields test suites it loads.""" - # Handle the __init__ in this package - name = self._get_name_from_path(start_dir) - # name is '.' when start_dir == top_level_dir (and top_level_dir is by - # definition not a package). - if name != '.' and name not in self._loading_packages: - # name is in self._loading_packages while we have called into - # loadTestsFromModule with name. - tests, should_recurse = self._find_test_path( - start_dir, pattern, namespace) - if tests is not None: - yield tests - if not should_recurse: - # Either an error occurred, or load_tests was used by the - # package. - return - # Handle the contents. - paths = sorted(os.listdir(start_dir)) - for path in paths: - full_path = os.path.join(start_dir, path) - tests, should_recurse = self._find_test_path( - full_path, pattern, False) - if tests is not None: - yield tests - if should_recurse: - # we found a package that didn't use load_tests. - name = self._get_name_from_path(full_path) - self._loading_packages.add(name) - try: - yield from self._find_tests(full_path, pattern, False) - finally: - self._loading_packages.discard(name) - - def _find_test_path(self, full_path, pattern, namespace=False): - """Used by discovery. - - Loads tests from a single file, or a directories' __init__.py when - passed the directory. - - Returns a tuple (None_or_tests_from_file, should_recurse). - """ - basename = os.path.basename(full_path) - if os.path.isfile(full_path): - if not VALID_MODULE_NAME.match(basename): - # valid Python identifiers only - return None, False - if not self._match_path(basename, full_path, pattern): - return None, False - # if the test file matches, load it - name = self._get_name_from_path(full_path) - try: - module = self._get_module_from_name(name) - except case.SkipTest as e: - return _make_skipped_test(name, e, self.suiteClass), False - except: - error_case, error_message = \ - _make_failed_import_test(name, self.suiteClass) - self.errors.append(error_message) - return error_case, False - else: - mod_file = os.path.abspath( - getattr(module, '__file__', full_path)) - realpath = _splitext( - os.path.realpath(mod_file)) - fullpath_noext = _splitext( - os.path.realpath(full_path)) - if realpath.lower() != fullpath_noext.lower(): - module_dir = os.path.dirname(realpath) - mod_name = _splitext( - os.path.basename(full_path)) - expected_dir = os.path.dirname(full_path) - msg = ("%r module incorrectly imported from %r. Expected " - "%r. Is this module globally installed?") - raise ImportError( - msg % (mod_name, module_dir, expected_dir)) - return self.loadTestsFromModule(module, pattern=pattern), False - elif os.path.isdir(full_path): - if (not namespace and - not os.path.isfile(os.path.join(full_path, '__init__.py'))): - return None, False - - load_tests = None - tests = None - name = self._get_name_from_path(full_path) - try: - package = self._get_module_from_name(name) - except case.SkipTest as e: - return _make_skipped_test(name, e, self.suiteClass), False - except: - error_case, error_message = \ - _make_failed_import_test(name, self.suiteClass) - self.errors.append(error_message) - return error_case, False - else: - load_tests = getattr(package, 'load_tests', None) - # Mark this package as being in load_tests (possibly ;)) - self._loading_packages.add(name) - try: - tests = self.loadTestsFromModule(package, pattern=pattern) - if load_tests is not None: - # loadTestsFromModule(package) has loaded tests for us. - return tests, False - return tests, True - finally: - self._loading_packages.discard(name) - else: - return None, False - - -defaultTestLoader = TestLoader() diff --git a/Python314_4_x86_Template/Lib/unittest/main.py b/Python314_4_x86_Template/Lib/unittest/main.py deleted file mode 100644 index be99d93c7..000000000 --- a/Python314_4_x86_Template/Lib/unittest/main.py +++ /dev/null @@ -1,280 +0,0 @@ -"""Unittest main program""" - -import sys -import argparse -import os - -from . import loader, runner -from .signals import installHandler - -__unittest = True -_NO_TESTS_EXITCODE = 5 - -MAIN_EXAMPLES = """\ -Examples: - %(prog)s test_module - run tests from test_module - %(prog)s module.TestClass - run tests from module.TestClass - %(prog)s module.Class.test_method - run specified test method - %(prog)s path/to/test_file.py - run tests from test_file.py -""" - -MODULE_EXAMPLES = """\ -Examples: - %(prog)s - run default set of tests - %(prog)s MyTestSuite - run suite 'MyTestSuite' - %(prog)s MyTestCase.testSomething - run MyTestCase.testSomething - %(prog)s MyTestCase - run all 'test*' test methods - in MyTestCase -""" - -def _convert_name(name): - # on Linux / Mac OS X 'foo.PY' is not importable, but on - # Windows it is. Simpler to do a case insensitive match - # a better check would be to check that the name is a - # valid Python module name. - if os.path.isfile(name) and name.lower().endswith('.py'): - if os.path.isabs(name): - rel_path = os.path.relpath(name, os.getcwd()) - if os.path.isabs(rel_path) or rel_path.startswith(os.pardir): - return name - name = rel_path - # on Windows both '\' and '/' are used as path - # separators. Better to replace both than rely on os.path.sep - return os.path.normpath(name)[:-3].replace('\\', '.').replace('/', '.') - return name - -def _convert_names(names): - return [_convert_name(name) for name in names] - - -def _convert_select_pattern(pattern): - if not '*' in pattern: - pattern = '*%s*' % pattern - return pattern - - -class TestProgram(object): - """A command-line program that runs a set of tests; this is primarily - for making test modules conveniently executable. - """ - # defaults for testing - module=None - verbosity = 1 - failfast = catchbreak = buffer = progName = warnings = testNamePatterns = None - _discovery_parser = None - - def __init__(self, module='__main__', defaultTest=None, argv=None, - testRunner=None, testLoader=loader.defaultTestLoader, - exit=True, verbosity=1, failfast=None, catchbreak=None, - buffer=None, warnings=None, *, tb_locals=False, - durations=None): - if isinstance(module, str): - self.module = __import__(module) - for part in module.split('.')[1:]: - self.module = getattr(self.module, part) - else: - self.module = module - if argv is None: - argv = sys.argv - - self.exit = exit - self.failfast = failfast - self.catchbreak = catchbreak - self.verbosity = verbosity - self.buffer = buffer - self.tb_locals = tb_locals - self.durations = durations - if warnings is None and not sys.warnoptions: - # even if DeprecationWarnings are ignored by default - # print them anyway unless other warnings settings are - # specified by the warnings arg or the -W python flag - self.warnings = 'default' - else: - # here self.warnings is set either to the value passed - # to the warnings args or to None. - # If the user didn't pass a value self.warnings will - # be None. This means that the behavior is unchanged - # and depends on the values passed to -W. - self.warnings = warnings - self.defaultTest = defaultTest - self.testRunner = testRunner - self.testLoader = testLoader - self.progName = os.path.basename(argv[0]) - self.parseArgs(argv) - self.runTests() - - def _print_help(self, *args, **kwargs): - if self.module is None: - print(self._main_parser.format_help()) - print(MAIN_EXAMPLES % {'prog': self.progName}) - self._discovery_parser.print_help() - else: - print(self._main_parser.format_help()) - print(MODULE_EXAMPLES % {'prog': self.progName}) - - def parseArgs(self, argv): - self._initArgParsers() - if self.module is None: - if len(argv) > 1 and argv[1].lower() == 'discover': - self._do_discovery(argv[2:]) - return - self._main_parser.parse_args(argv[1:], self) - if not self.tests: - # this allows "python -m unittest -v" to still work for - # test discovery. - self._do_discovery([]) - return - else: - self._main_parser.parse_args(argv[1:], self) - - if self.tests: - self.testNames = _convert_names(self.tests) - if __name__ == '__main__': - # to support python -m unittest ... - self.module = None - elif self.defaultTest is None: - # createTests will load tests from self.module - self.testNames = None - elif isinstance(self.defaultTest, str): - self.testNames = (self.defaultTest,) - else: - self.testNames = list(self.defaultTest) - self.createTests() - - def createTests(self, from_discovery=False, Loader=None): - if self.testNamePatterns: - self.testLoader.testNamePatterns = self.testNamePatterns - if from_discovery: - loader = self.testLoader if Loader is None else Loader() - self.test = loader.discover(self.start, self.pattern, self.top) - elif self.testNames is None: - self.test = self.testLoader.loadTestsFromModule(self.module) - else: - self.test = self.testLoader.loadTestsFromNames(self.testNames, - self.module) - - def _initArgParsers(self): - parent_parser = self._getParentArgParser() - self._main_parser = self._getMainArgParser(parent_parser) - self._discovery_parser = self._getDiscoveryArgParser(parent_parser) - - def _getParentArgParser(self): - parser = argparse.ArgumentParser(add_help=False) - - parser.add_argument('-v', '--verbose', dest='verbosity', - action='store_const', const=2, - help='Verbose output') - parser.add_argument('-q', '--quiet', dest='verbosity', - action='store_const', const=0, - help='Quiet output') - parser.add_argument('--locals', dest='tb_locals', - action='store_true', - help='Show local variables in tracebacks') - parser.add_argument('--durations', dest='durations', type=int, - default=None, metavar="N", - help='Show the N slowest test cases (N=0 for all)') - if self.failfast is None: - parser.add_argument('-f', '--failfast', dest='failfast', - action='store_true', - help='Stop on first fail or error') - self.failfast = False - if self.catchbreak is None: - parser.add_argument('-c', '--catch', dest='catchbreak', - action='store_true', - help='Catch Ctrl-C and display results so far') - self.catchbreak = False - if self.buffer is None: - parser.add_argument('-b', '--buffer', dest='buffer', - action='store_true', - help='Buffer stdout and stderr during tests') - self.buffer = False - if self.testNamePatterns is None: - parser.add_argument('-k', dest='testNamePatterns', - action='append', type=_convert_select_pattern, - help='Only run tests which match the given substring') - self.testNamePatterns = [] - - return parser - - def _getMainArgParser(self, parent): - parser = argparse.ArgumentParser(parents=[parent], color=True) - parser.prog = self.progName - parser.print_help = self._print_help - - parser.add_argument('tests', nargs='*', - help='a list of any number of test modules, ' - 'classes and test methods.') - - return parser - - def _getDiscoveryArgParser(self, parent): - parser = argparse.ArgumentParser(parents=[parent], color=True) - parser.prog = '%s discover' % self.progName - parser.epilog = ('For test discovery all test modules must be ' - 'importable from the top level directory of the ' - 'project.') - - parser.add_argument('-s', '--start-directory', dest='start', - help="Directory to start discovery ('.' default)") - parser.add_argument('-p', '--pattern', dest='pattern', - help="Pattern to match tests ('test*.py' default)") - parser.add_argument('-t', '--top-level-directory', dest='top', - help='Top level directory of project (defaults to ' - 'start directory)') - for arg in ('start', 'pattern', 'top'): - parser.add_argument(arg, nargs='?', - default=argparse.SUPPRESS, - help=argparse.SUPPRESS) - - return parser - - def _do_discovery(self, argv, Loader=None): - self.start = '.' - self.pattern = 'test*.py' - self.top = None - if argv is not None: - # handle command line args for test discovery - if self._discovery_parser is None: - # for testing - self._initArgParsers() - self._discovery_parser.parse_args(argv, self) - - self.createTests(from_discovery=True, Loader=Loader) - - def runTests(self): - if self.catchbreak: - installHandler() - if self.testRunner is None: - self.testRunner = runner.TextTestRunner - if isinstance(self.testRunner, type): - try: - try: - testRunner = self.testRunner(verbosity=self.verbosity, - failfast=self.failfast, - buffer=self.buffer, - warnings=self.warnings, - tb_locals=self.tb_locals, - durations=self.durations) - except TypeError: - # didn't accept the tb_locals or durations argument - testRunner = self.testRunner(verbosity=self.verbosity, - failfast=self.failfast, - buffer=self.buffer, - warnings=self.warnings) - except TypeError: - # didn't accept the verbosity, buffer or failfast arguments - testRunner = self.testRunner() - else: - # it is assumed to be a TestRunner instance - testRunner = self.testRunner - self.result = testRunner.run(self.test) - if self.exit: - if not self.result.wasSuccessful(): - sys.exit(1) - elif self.result.testsRun == 0 and len(self.result.skipped) == 0: - sys.exit(_NO_TESTS_EXITCODE) - else: - sys.exit(0) - - -main = TestProgram diff --git a/Python314_4_x86_Template/Lib/unittest/mock.py b/Python314_4_x86_Template/Lib/unittest/mock.py deleted file mode 100644 index 92b81d158..000000000 --- a/Python314_4_x86_Template/Lib/unittest/mock.py +++ /dev/null @@ -1,3204 +0,0 @@ -# mock.py -# Test tools for mocking and patching. -# Maintained by Michael Foord -# Backport for other versions of Python available from -# https://pypi.org/project/mock - -__all__ = ( - 'Mock', - 'MagicMock', - 'patch', - 'sentinel', - 'DEFAULT', - 'ANY', - 'call', - 'create_autospec', - 'AsyncMock', - 'ThreadingMock', - 'FILTER_DIR', - 'NonCallableMock', - 'NonCallableMagicMock', - 'mock_open', - 'PropertyMock', - 'seal', -) - - -import asyncio -import contextlib -import io -import inspect -import pprint -import sys -import builtins -import pkgutil -from inspect import iscoroutinefunction -import threading -from annotationlib import Format -from dataclasses import fields, is_dataclass -from types import CodeType, ModuleType, MethodType -from unittest.util import safe_repr -from functools import wraps, partial -from threading import RLock - - -class InvalidSpecError(Exception): - """Indicates that an invalid value was used as a mock spec.""" - - -_builtins = {name for name in dir(builtins) if not name.startswith('_')} - -FILTER_DIR = True - -# Workaround for issue #12370 -# Without this, the __class__ properties wouldn't be set correctly -_safe_super = super - -def _is_async_obj(obj): - if _is_instance_mock(obj) and not isinstance(obj, AsyncMock): - return False - if hasattr(obj, '__func__'): - obj = getattr(obj, '__func__') - return iscoroutinefunction(obj) or inspect.isawaitable(obj) - - -def _is_async_func(func): - if getattr(func, '__code__', None): - return iscoroutinefunction(func) - else: - return False - - -def _is_instance_mock(obj): - # can't use isinstance on Mock objects because they override __class__ - # The base class for all mocks is NonCallableMock - return issubclass(type(obj), NonCallableMock) - - -def _is_exception(obj): - return ( - isinstance(obj, BaseException) or - isinstance(obj, type) and issubclass(obj, BaseException) - ) - - -def _extract_mock(obj): - # Autospecced functions will return a FunctionType with "mock" attribute - # which is the actual mock object that needs to be used. - if isinstance(obj, FunctionTypes) and hasattr(obj, 'mock'): - return obj.mock - else: - return obj - - -def _get_signature_object(func, as_instance, eat_self): - """ - Given an arbitrary, possibly callable object, try to create a suitable - signature object. - Return a (reduced func, signature) tuple, or None. - """ - if isinstance(func, type) and not as_instance: - # If it's a type and should be modelled as a type, use __init__. - func = func.__init__ - # Skip the `self` argument in __init__ - eat_self = True - elif isinstance(func, (classmethod, staticmethod)): - if isinstance(func, classmethod): - # Skip the `cls` argument of a class method - eat_self = True - # Use the original decorated method to extract the correct function signature - func = func.__func__ - elif not isinstance(func, FunctionTypes): - # If we really want to model an instance of the passed type, - # __call__ should be looked up, not __init__. - try: - func = func.__call__ - except AttributeError: - return None - if eat_self: - sig_func = partial(func, None) - else: - sig_func = func - try: - return func, inspect.signature(sig_func, annotation_format=Format.FORWARDREF) - except ValueError: - # Certain callable types are not supported by inspect.signature() - return None - - -def _check_signature(func, mock, skipfirst, instance=False): - sig = _get_signature_object(func, instance, skipfirst) - if sig is None: - return - func, sig = sig - def checksig(self, /, *args, **kwargs): - sig.bind(*args, **kwargs) - _copy_func_details(func, checksig) - type(mock)._mock_check_sig = checksig - type(mock).__signature__ = sig - - -def _copy_func_details(func, funcopy): - # we explicitly don't copy func.__dict__ into this copy as it would - # expose original attributes that should be mocked - for attribute in ( - '__name__', '__doc__', '__text_signature__', - '__module__', '__defaults__', '__kwdefaults__', - ): - try: - setattr(funcopy, attribute, getattr(func, attribute)) - except AttributeError: - pass - - -def _callable(obj): - if isinstance(obj, type): - return True - if isinstance(obj, (staticmethod, classmethod, MethodType)): - return _callable(obj.__func__) - if getattr(obj, '__call__', None) is not None: - return True - return False - - -def _is_list(obj): - # checks for list or tuples - # XXXX badly named! - return type(obj) in (list, tuple) - - -def _instance_callable(obj): - """Given an object, return True if the object is callable. - For classes, return True if instances would be callable.""" - if not isinstance(obj, type): - # already an instance - return getattr(obj, '__call__', None) is not None - - # *could* be broken by a class overriding __mro__ or __dict__ via - # a metaclass - for base in (obj,) + obj.__mro__: - if base.__dict__.get('__call__') is not None: - return True - return False - - -def _set_signature(mock, original, instance=False): - # creates a function with signature (*args, **kwargs) that delegates to a - # mock. It still does signature checking by calling a lambda with the same - # signature as the original. - - skipfirst = isinstance(original, type) - result = _get_signature_object(original, instance, skipfirst) - if result is None: - return mock - func, sig = result - def checksig(*args, **kwargs): - sig.bind(*args, **kwargs) - _copy_func_details(func, checksig) - - name = original.__name__ - if not name.isidentifier(): - name = 'funcopy' - context = {'_checksig_': checksig, 'mock': mock} - src = """def %s(*args, **kwargs): - _checksig_(*args, **kwargs) - return mock(*args, **kwargs)""" % name - exec (src, context) - funcopy = context[name] - _setup_func(funcopy, mock, sig) - return funcopy - -def _set_async_signature(mock, original, instance=False, is_async_mock=False): - # creates an async function with signature (*args, **kwargs) that delegates to a - # mock. It still does signature checking by calling a lambda with the same - # signature as the original. - - skipfirst = isinstance(original, type) - func, sig = _get_signature_object(original, instance, skipfirst) - def checksig(*args, **kwargs): - sig.bind(*args, **kwargs) - _copy_func_details(func, checksig) - - name = original.__name__ - context = {'_checksig_': checksig, 'mock': mock} - src = """async def %s(*args, **kwargs): - _checksig_(*args, **kwargs) - return await mock(*args, **kwargs)""" % name - exec (src, context) - funcopy = context[name] - _setup_func(funcopy, mock, sig) - _setup_async_mock(funcopy) - return funcopy - - -def _setup_func(funcopy, mock, sig): - funcopy.mock = mock - - def assert_called_with(*args, **kwargs): - return mock.assert_called_with(*args, **kwargs) - def assert_called(*args, **kwargs): - return mock.assert_called(*args, **kwargs) - def assert_not_called(*args, **kwargs): - return mock.assert_not_called(*args, **kwargs) - def assert_called_once(*args, **kwargs): - return mock.assert_called_once(*args, **kwargs) - def assert_called_once_with(*args, **kwargs): - return mock.assert_called_once_with(*args, **kwargs) - def assert_has_calls(*args, **kwargs): - return mock.assert_has_calls(*args, **kwargs) - def assert_any_call(*args, **kwargs): - return mock.assert_any_call(*args, **kwargs) - def reset_mock(): - funcopy.method_calls = _CallList() - funcopy.mock_calls = _CallList() - mock.reset_mock() - ret = funcopy.return_value - if _is_instance_mock(ret) and not ret is mock: - ret.reset_mock() - - funcopy.called = False - funcopy.call_count = 0 - funcopy.call_args = None - funcopy.call_args_list = _CallList() - funcopy.method_calls = _CallList() - funcopy.mock_calls = _CallList() - - funcopy.return_value = mock.return_value - funcopy.side_effect = mock.side_effect - funcopy._mock_children = mock._mock_children - - funcopy.assert_called_with = assert_called_with - funcopy.assert_called_once_with = assert_called_once_with - funcopy.assert_has_calls = assert_has_calls - funcopy.assert_any_call = assert_any_call - funcopy.reset_mock = reset_mock - funcopy.assert_called = assert_called - funcopy.assert_not_called = assert_not_called - funcopy.assert_called_once = assert_called_once - funcopy.__signature__ = sig - - mock._mock_delegate = funcopy - - -def _setup_async_mock(mock): - mock._is_coroutine = asyncio.coroutines._is_coroutine - mock.await_count = 0 - mock.await_args = None - mock.await_args_list = _CallList() - - # Mock is not configured yet so the attributes are set - # to a function and then the corresponding mock helper function - # is called when the helper is accessed similar to _setup_func. - def wrapper(attr, /, *args, **kwargs): - return getattr(mock.mock, attr)(*args, **kwargs) - - for attribute in ('assert_awaited', - 'assert_awaited_once', - 'assert_awaited_with', - 'assert_awaited_once_with', - 'assert_any_await', - 'assert_has_awaits', - 'assert_not_awaited'): - - # setattr(mock, attribute, wrapper) causes late binding - # hence attribute will always be the last value in the loop - # Use partial(wrapper, attribute) to ensure the attribute is bound - # correctly. - setattr(mock, attribute, partial(wrapper, attribute)) - - -def _is_magic(name): - return '__%s__' % name[2:-2] == name - - -class _SentinelObject(object): - "A unique, named, sentinel object." - def __init__(self, name): - self.name = name - - def __repr__(self): - return 'sentinel.%s' % self.name - - def __reduce__(self): - return 'sentinel.%s' % self.name - - -class _Sentinel(object): - """Access attributes to return a named object, usable as a sentinel.""" - def __init__(self): - self._sentinels = {} - - def __getattr__(self, name): - if name == '__bases__': - # Without this help(unittest.mock) raises an exception - raise AttributeError - return self._sentinels.setdefault(name, _SentinelObject(name)) - - def __reduce__(self): - return 'sentinel' - - -sentinel = _Sentinel() - -DEFAULT = sentinel.DEFAULT -_missing = sentinel.MISSING -_deleted = sentinel.DELETED - - -_allowed_names = { - 'return_value', '_mock_return_value', 'side_effect', - '_mock_side_effect', '_mock_parent', '_mock_new_parent', - '_mock_name', '_mock_new_name' -} - - -def _delegating_property(name): - _allowed_names.add(name) - _the_name = '_mock_' + name - def _get(self, name=name, _the_name=_the_name): - sig = self._mock_delegate - if sig is None: - return getattr(self, _the_name) - return getattr(sig, name) - def _set(self, value, name=name, _the_name=_the_name): - sig = self._mock_delegate - if sig is None: - self.__dict__[_the_name] = value - else: - setattr(sig, name, value) - - return property(_get, _set) - - - -class _CallList(list): - - def __contains__(self, value): - if not isinstance(value, list): - return list.__contains__(self, value) - len_value = len(value) - len_self = len(self) - if len_value > len_self: - return False - - for i in range(0, len_self - len_value + 1): - sub_list = self[i:i+len_value] - if sub_list == value: - return True - return False - - def __repr__(self): - return pprint.pformat(list(self)) - - -def _check_and_set_parent(parent, value, name, new_name): - value = _extract_mock(value) - - if not _is_instance_mock(value): - return False - if ((value._mock_name or value._mock_new_name) or - (value._mock_parent is not None) or - (value._mock_new_parent is not None)): - return False - - _parent = parent - while _parent is not None: - # setting a mock (value) as a child or return value of itself - # should not modify the mock - if _parent is value: - return False - _parent = _parent._mock_new_parent - - if new_name: - value._mock_new_parent = parent - value._mock_new_name = new_name - if name: - value._mock_parent = parent - value._mock_name = name - return True - -# Internal class to identify if we wrapped an iterator object or not. -class _MockIter(object): - def __init__(self, obj): - self.obj = iter(obj) - def __next__(self): - return next(self.obj) - -class Base(object): - _mock_return_value = DEFAULT - _mock_side_effect = None - def __init__(self, /, *args, **kwargs): - pass - - - -class NonCallableMock(Base): - """A non-callable version of `Mock`""" - - # Store a mutex as a class attribute in order to protect concurrent access - # to mock attributes. Using a class attribute allows all NonCallableMock - # instances to share the mutex for simplicity. - # - # See https://github.com/python/cpython/issues/98624 for why this is - # necessary. - _lock = RLock() - - def __new__( - cls, spec=None, wraps=None, name=None, spec_set=None, - parent=None, _spec_state=None, _new_name='', _new_parent=None, - _spec_as_instance=False, _eat_self=None, unsafe=False, **kwargs - ): - # every instance has its own class - # so we can create magic methods on the - # class without stomping on other mocks - bases = (cls,) - if not issubclass(cls, AsyncMockMixin): - # Check if spec is an async object or function - spec_arg = spec_set or spec - if spec_arg is not None and _is_async_obj(spec_arg): - bases = (AsyncMockMixin, cls) - new = type(cls.__name__, bases, {'__doc__': cls.__doc__}) - instance = _safe_super(NonCallableMock, cls).__new__(new) - return instance - - - def __init__( - self, spec=None, wraps=None, name=None, spec_set=None, - parent=None, _spec_state=None, _new_name='', _new_parent=None, - _spec_as_instance=False, _eat_self=None, unsafe=False, **kwargs - ): - if _new_parent is None: - _new_parent = parent - - __dict__ = self.__dict__ - __dict__['_mock_parent'] = parent - __dict__['_mock_name'] = name - __dict__['_mock_new_name'] = _new_name - __dict__['_mock_new_parent'] = _new_parent - __dict__['_mock_sealed'] = False - - if spec_set is not None: - spec = spec_set - spec_set = True - if _eat_self is None: - _eat_self = parent is not None - - self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self) - - __dict__['_mock_children'] = {} - __dict__['_mock_wraps'] = wraps - __dict__['_mock_delegate'] = None - - __dict__['_mock_called'] = False - __dict__['_mock_call_args'] = None - __dict__['_mock_call_count'] = 0 - __dict__['_mock_call_args_list'] = _CallList() - __dict__['_mock_mock_calls'] = _CallList() - - __dict__['method_calls'] = _CallList() - __dict__['_mock_unsafe'] = unsafe - - if kwargs: - self.configure_mock(**kwargs) - - _safe_super(NonCallableMock, self).__init__( - spec, wraps, name, spec_set, parent, - _spec_state - ) - - - def attach_mock(self, mock, attribute): - """ - Attach a mock as an attribute of this one, replacing its name and - parent. Calls to the attached mock will be recorded in the - `method_calls` and `mock_calls` attributes of this one.""" - inner_mock = _extract_mock(mock) - - inner_mock._mock_parent = None - inner_mock._mock_new_parent = None - inner_mock._mock_name = '' - inner_mock._mock_new_name = None - - setattr(self, attribute, mock) - - - def mock_add_spec(self, spec, spec_set=False): - """Add a spec to a mock. `spec` can either be an object or a - list of strings. Only attributes on the `spec` can be fetched as - attributes from the mock. - - If `spec_set` is True then only attributes on the spec can be set.""" - self._mock_add_spec(spec, spec_set) - - - def _mock_add_spec(self, spec, spec_set, _spec_as_instance=False, - _eat_self=False): - if _is_instance_mock(spec): - raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]') - - _spec_class = None - _spec_signature = None - _spec_asyncs = [] - - if spec is not None and not _is_list(spec): - if isinstance(spec, type): - _spec_class = spec - else: - _spec_class = type(spec) - res = _get_signature_object(spec, - _spec_as_instance, _eat_self) - _spec_signature = res and res[1] - - spec_list = dir(spec) - - for attr in spec_list: - static_attr = inspect.getattr_static(spec, attr, None) - unwrapped_attr = static_attr - try: - unwrapped_attr = inspect.unwrap(unwrapped_attr) - except ValueError: - pass - if iscoroutinefunction(unwrapped_attr): - _spec_asyncs.append(attr) - - spec = spec_list - - __dict__ = self.__dict__ - __dict__['_spec_class'] = _spec_class - __dict__['_spec_set'] = spec_set - __dict__['_spec_signature'] = _spec_signature - __dict__['_mock_methods'] = spec - __dict__['_spec_asyncs'] = _spec_asyncs - - def _mock_extend_spec_methods(self, spec_methods): - methods = self.__dict__.get('_mock_methods') or [] - methods.extend(spec_methods) - self.__dict__['_mock_methods'] = methods - - def __get_return_value(self): - ret = self._mock_return_value - if self._mock_delegate is not None: - ret = self._mock_delegate.return_value - - if ret is DEFAULT and self._mock_wraps is None: - ret = self._get_child_mock( - _new_parent=self, _new_name='()' - ) - self.return_value = ret - return ret - - - def __set_return_value(self, value): - if self._mock_delegate is not None: - self._mock_delegate.return_value = value - else: - self._mock_return_value = value - _check_and_set_parent(self, value, None, '()') - - __return_value_doc = "The value to be returned when the mock is called." - return_value = property(__get_return_value, __set_return_value, - __return_value_doc) - - - @property - def __class__(self): - if self._spec_class is None: - return type(self) - return self._spec_class - - called = _delegating_property('called') - call_count = _delegating_property('call_count') - call_args = _delegating_property('call_args') - call_args_list = _delegating_property('call_args_list') - mock_calls = _delegating_property('mock_calls') - - - def __get_side_effect(self): - delegated = self._mock_delegate - if delegated is None: - return self._mock_side_effect - sf = delegated.side_effect - if (sf is not None and not callable(sf) - and not isinstance(sf, _MockIter) and not _is_exception(sf)): - sf = _MockIter(sf) - delegated.side_effect = sf - return sf - - def __set_side_effect(self, value): - value = _try_iter(value) - delegated = self._mock_delegate - if delegated is None: - self._mock_side_effect = value - else: - delegated.side_effect = value - - side_effect = property(__get_side_effect, __set_side_effect) - - - def reset_mock(self, visited=None, *, - return_value: bool = False, - side_effect: bool = False): - "Restore the mock object to its initial state." - if visited is None: - visited = [] - if id(self) in visited: - return - visited.append(id(self)) - - self.called = False - self.call_args = None - self.call_count = 0 - self.mock_calls = _CallList() - self.call_args_list = _CallList() - self.method_calls = _CallList() - - if return_value: - self._mock_return_value = DEFAULT - if side_effect: - self._mock_side_effect = None - - for child in self._mock_children.values(): - if isinstance(child, _SpecState) or child is _deleted: - continue - child.reset_mock(visited, return_value=return_value, side_effect=side_effect) - - ret = self._mock_return_value - if _is_instance_mock(ret) and ret is not self: - ret.reset_mock(visited) - - - def configure_mock(self, /, **kwargs): - """Set attributes on the mock through keyword arguments. - - Attributes plus return values and side effects can be set on child - mocks using standard dot notation and unpacking a dictionary in the - method call: - - >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError} - >>> mock.configure_mock(**attrs)""" - for arg, val in sorted(kwargs.items(), - # we sort on the number of dots so that - # attributes are set before we set attributes on - # attributes - key=lambda entry: entry[0].count('.')): - args = arg.split('.') - final = args.pop() - obj = self - for entry in args: - obj = getattr(obj, entry) - setattr(obj, final, val) - - - def __getattr__(self, name): - if name in {'_mock_methods', '_mock_unsafe'}: - raise AttributeError(name) - elif self._mock_methods is not None: - if name not in self._mock_methods or name in _all_magics: - raise AttributeError("Mock object has no attribute %r" % name) - elif _is_magic(name): - raise AttributeError(name) - if not self._mock_unsafe and (not self._mock_methods or name not in self._mock_methods): - if name.startswith(('assert', 'assret', 'asert', 'aseert', 'assrt')) or name in _ATTRIB_DENY_LIST: - raise AttributeError( - f"{name!r} is not a valid assertion. Use a spec " - f"for the mock if {name!r} is meant to be an attribute.") - - with NonCallableMock._lock: - result = self._mock_children.get(name) - if result is _deleted: - raise AttributeError(name) - elif result is None: - wraps = None - if self._mock_wraps is not None: - # XXXX should we get the attribute without triggering code - # execution? - wraps = getattr(self._mock_wraps, name) - - result = self._get_child_mock( - parent=self, name=name, wraps=wraps, _new_name=name, - _new_parent=self - ) - self._mock_children[name] = result - - elif isinstance(result, _SpecState): - try: - result = create_autospec( - result.spec, result.spec_set, result.instance, - result.parent, result.name - ) - except InvalidSpecError: - target_name = self.__dict__['_mock_name'] or self - raise InvalidSpecError( - f'Cannot autospec attr {name!r} from target ' - f'{target_name!r} as it has already been mocked out. ' - f'[target={self!r}, attr={result.spec!r}]') - self._mock_children[name] = result - - return result - - - def _extract_mock_name(self): - _name_list = [self._mock_new_name] - _parent = self._mock_new_parent - last = self - - dot = '.' - if _name_list == ['()']: - dot = '' - - while _parent is not None: - last = _parent - - _name_list.append(_parent._mock_new_name + dot) - dot = '.' - if _parent._mock_new_name == '()': - dot = '' - - _parent = _parent._mock_new_parent - - _name_list = list(reversed(_name_list)) - _first = last._mock_name or 'mock' - if len(_name_list) > 1: - if _name_list[1] not in ('()', '().'): - _first += '.' - _name_list[0] = _first - return ''.join(_name_list) - - def __repr__(self): - name = self._extract_mock_name() - - name_string = '' - if name not in ('mock', 'mock.'): - name_string = ' name=%r' % name - - spec_string = '' - if self._spec_class is not None: - spec_string = ' spec=%r' - if self._spec_set: - spec_string = ' spec_set=%r' - spec_string = spec_string % self._spec_class.__name__ - return "<%s%s%s id='%s'>" % ( - type(self).__name__, - name_string, - spec_string, - id(self) - ) - - - def __dir__(self): - """Filter the output of `dir(mock)` to only useful members.""" - if not FILTER_DIR: - return object.__dir__(self) - - extras = self._mock_methods or [] - from_type = dir(type(self)) - from_dict = list(self.__dict__) - from_child_mocks = [ - m_name for m_name, m_value in self._mock_children.items() - if m_value is not _deleted] - - from_type = [e for e in from_type if not e.startswith('_')] - from_dict = [e for e in from_dict if not e.startswith('_') or - _is_magic(e)] - return sorted(set(extras + from_type + from_dict + from_child_mocks)) - - - def __setattr__(self, name, value): - if name in _allowed_names: - # property setters go through here - return object.__setattr__(self, name, value) - elif (self._spec_set and self._mock_methods is not None and - name not in self._mock_methods and - name not in self.__dict__): - raise AttributeError("Mock object has no attribute '%s'" % name) - elif name in _unsupported_magics: - msg = 'Attempting to set unsupported magic method %r.' % name - raise AttributeError(msg) - elif name in _all_magics: - if self._mock_methods is not None and name not in self._mock_methods: - raise AttributeError("Mock object has no attribute '%s'" % name) - - if not _is_instance_mock(value): - setattr(type(self), name, _get_method(name, value)) - original = value - value = lambda *args, **kw: original(self, *args, **kw) - else: - # only set _new_name and not name so that mock_calls is tracked - # but not method calls - _check_and_set_parent(self, value, None, name) - setattr(type(self), name, value) - self._mock_children[name] = value - elif name == '__class__': - self._spec_class = value - return - else: - if _check_and_set_parent(self, value, name, name): - self._mock_children[name] = value - - if self._mock_sealed and not hasattr(self, name): - mock_name = f'{self._extract_mock_name()}.{name}' - raise AttributeError(f'Cannot set {mock_name}') - - if isinstance(value, PropertyMock): - self.__dict__[name] = value - return - return object.__setattr__(self, name, value) - - - def __delattr__(self, name): - if name in _all_magics and name in type(self).__dict__: - delattr(type(self), name) - if name not in self.__dict__: - # for magic methods that are still MagicProxy objects and - # not set on the instance itself - return - - obj = self._mock_children.get(name, _missing) - if name in self.__dict__: - _safe_super(NonCallableMock, self).__delattr__(name) - elif obj is _deleted: - raise AttributeError(name) - if obj is not _missing: - del self._mock_children[name] - self._mock_children[name] = _deleted - - - def _format_mock_call_signature(self, args, kwargs): - name = self._mock_name or 'mock' - return _format_call_signature(name, args, kwargs) - - - def _format_mock_failure_message(self, args, kwargs, action='call'): - message = 'expected %s not found.\nExpected: %s\n Actual: %s' - expected_string = self._format_mock_call_signature(args, kwargs) - call_args = self.call_args - actual_string = self._format_mock_call_signature(*call_args) - return message % (action, expected_string, actual_string) - - - def _get_call_signature_from_name(self, name): - """ - * If call objects are asserted against a method/function like obj.meth1 - then there could be no name for the call object to lookup. Hence just - return the spec_signature of the method/function being asserted against. - * If the name is not empty then remove () and split by '.' to get - list of names to iterate through the children until a potential - match is found. A child mock is created only during attribute access - so if we get a _SpecState then no attributes of the spec were accessed - and can be safely exited. - """ - if not name: - return self._spec_signature - - sig = None - names = name.replace('()', '').split('.') - children = self._mock_children - - for name in names: - child = children.get(name) - if child is None or isinstance(child, _SpecState): - break - else: - # If an autospecced object is attached using attach_mock the - # child would be a function with mock object as attribute from - # which signature has to be derived. - child = _extract_mock(child) - children = child._mock_children - sig = child._spec_signature - - return sig - - - def _call_matcher(self, _call): - """ - Given a call (or simply an (args, kwargs) tuple), return a - comparison key suitable for matching with other calls. - This is a best effort method which relies on the spec's signature, - if available, or falls back on the arguments themselves. - """ - - if isinstance(_call, tuple) and len(_call) > 2: - sig = self._get_call_signature_from_name(_call[0]) - else: - sig = self._spec_signature - - if sig is not None: - if len(_call) == 2: - name = '' - args, kwargs = _call - else: - name, args, kwargs = _call - try: - bound_call = sig.bind(*args, **kwargs) - return call(name, bound_call.args, bound_call.kwargs) - except TypeError as e: - return e.with_traceback(None) - else: - return _call - - def assert_not_called(self): - """assert that the mock was never called. - """ - if self.call_count != 0: - msg = ("Expected '%s' to not have been called. Called %s times.%s" - % (self._mock_name or 'mock', - self.call_count, - self._calls_repr())) - raise AssertionError(msg) - - def assert_called(self): - """assert that the mock was called at least once - """ - if self.call_count == 0: - msg = ("Expected '%s' to have been called." % - (self._mock_name or 'mock')) - raise AssertionError(msg) - - def assert_called_once(self): - """assert that the mock was called only once. - """ - if not self.call_count == 1: - msg = ("Expected '%s' to have been called once. Called %s times.%s" - % (self._mock_name or 'mock', - self.call_count, - self._calls_repr())) - raise AssertionError(msg) - - def assert_called_with(self, /, *args, **kwargs): - """assert that the last call was made with the specified arguments. - - Raises an AssertionError if the args and keyword args passed in are - different to the last call to the mock.""" - if self.call_args is None: - expected = self._format_mock_call_signature(args, kwargs) - actual = 'not called.' - error_message = ('expected call not found.\nExpected: %s\n Actual: %s' - % (expected, actual)) - raise AssertionError(error_message) - - def _error_message(): - msg = self._format_mock_failure_message(args, kwargs) - return msg - expected = self._call_matcher(_Call((args, kwargs), two=True)) - actual = self._call_matcher(self.call_args) - if actual != expected: - cause = expected if isinstance(expected, Exception) else None - raise AssertionError(_error_message()) from cause - - - def assert_called_once_with(self, /, *args, **kwargs): - """assert that the mock was called exactly once and that that call was - with the specified arguments.""" - if not self.call_count == 1: - msg = ("Expected '%s' to be called once. Called %s times.%s" - % (self._mock_name or 'mock', - self.call_count, - self._calls_repr())) - raise AssertionError(msg) - return self.assert_called_with(*args, **kwargs) - - - def assert_has_calls(self, calls, any_order=False): - """assert the mock has been called with the specified calls. - The `mock_calls` list is checked for the calls. - - If `any_order` is False (the default) then the calls must be - sequential. There can be extra calls before or after the - specified calls. - - If `any_order` is True then the calls can be in any order, but - they must all appear in `mock_calls`.""" - expected = [self._call_matcher(c) for c in calls] - cause = next((e for e in expected if isinstance(e, Exception)), None) - all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls) - if not any_order: - if expected not in all_calls: - if cause is None: - problem = 'Calls not found.' - else: - problem = ('Error processing expected calls.\n' - 'Errors: {}').format( - [e if isinstance(e, Exception) else None - for e in expected]) - raise AssertionError( - f'{problem}\n' - f'Expected: {_CallList(calls)}\n' - f' Actual: {safe_repr(self.mock_calls)}' - ) from cause - return - - all_calls = list(all_calls) - - not_found = [] - for kall in expected: - try: - all_calls.remove(kall) - except ValueError: - not_found.append(kall) - if not_found: - raise AssertionError( - '%r does not contain all of %r in its call list, ' - 'found %r instead' % (self._mock_name or 'mock', - tuple(not_found), all_calls) - ) from cause - - - def assert_any_call(self, /, *args, **kwargs): - """assert the mock has been called with the specified arguments. - - The assert passes if the mock has *ever* been called, unlike - `assert_called_with` and `assert_called_once_with` that only pass if - the call is the most recent one.""" - expected = self._call_matcher(_Call((args, kwargs), two=True)) - cause = expected if isinstance(expected, Exception) else None - actual = [self._call_matcher(c) for c in self.call_args_list] - if cause or expected not in _AnyComparer(actual): - expected_string = self._format_mock_call_signature(args, kwargs) - raise AssertionError( - '%s call not found' % expected_string - ) from cause - - - def _get_child_mock(self, /, **kw): - """Create the child mocks for attributes and return value. - By default child mocks will be the same type as the parent. - Subclasses of Mock may want to override this to customize the way - child mocks are made. - - For non-callable mocks the callable variant will be used (rather than - any custom subclass).""" - if self._mock_sealed: - attribute = f".{kw['name']}" if "name" in kw else "()" - mock_name = self._extract_mock_name() + attribute - raise AttributeError(mock_name) - - _new_name = kw.get("_new_name") - if _new_name in self.__dict__['_spec_asyncs']: - return AsyncMock(**kw) - - _type = type(self) - if issubclass(_type, MagicMock) and _new_name in _async_method_magics: - # Any asynchronous magic becomes an AsyncMock - klass = AsyncMock - elif issubclass(_type, AsyncMockMixin): - if (_new_name in _all_sync_magics or - self._mock_methods and _new_name in self._mock_methods): - # Any synchronous method on AsyncMock becomes a MagicMock - klass = MagicMock - else: - klass = AsyncMock - elif not issubclass(_type, CallableMixin): - if issubclass(_type, NonCallableMagicMock): - klass = MagicMock - elif issubclass(_type, NonCallableMock): - klass = Mock - else: - klass = _type.__mro__[1] - return klass(**kw) - - - def _calls_repr(self): - """Renders self.mock_calls as a string. - - Example: "\nCalls: [call(1), call(2)]." - - If self.mock_calls is empty, an empty string is returned. The - output will be truncated if very long. - """ - if not self.mock_calls: - return "" - return f"\nCalls: {safe_repr(self.mock_calls)}." - - -# Denylist for forbidden attribute names in safe mode -_ATTRIB_DENY_LIST = frozenset({ - name.removeprefix("assert_") - for name in dir(NonCallableMock) - if name.startswith("assert_") -}) - - -class _AnyComparer(list): - """A list which checks if it contains a call which may have an - argument of ANY, flipping the components of item and self from - their traditional locations so that ANY is guaranteed to be on - the left.""" - def __contains__(self, item): - for _call in self: - assert len(item) == len(_call) - if all([ - expected == actual - for expected, actual in zip(item, _call) - ]): - return True - return False - - -def _try_iter(obj): - if obj is None: - return obj - if _is_exception(obj): - return obj - if _callable(obj): - return obj - try: - return iter(obj) - except TypeError: - # XXXX backwards compatibility - # but this will blow up on first call - so maybe we should fail early? - return obj - - -class CallableMixin(Base): - - def __init__(self, spec=None, side_effect=None, return_value=DEFAULT, - wraps=None, name=None, spec_set=None, parent=None, - _spec_state=None, _new_name='', _new_parent=None, **kwargs): - self.__dict__['_mock_return_value'] = return_value - _safe_super(CallableMixin, self).__init__( - spec, wraps, name, spec_set, parent, - _spec_state, _new_name, _new_parent, **kwargs - ) - - self.side_effect = side_effect - - - def _mock_check_sig(self, /, *args, **kwargs): - # stub method that can be replaced with one with a specific signature - pass - - - def __call__(self, /, *args, **kwargs): - # can't use self in-case a function / method we are mocking uses self - # in the signature - self._mock_check_sig(*args, **kwargs) - self._increment_mock_call(*args, **kwargs) - return self._mock_call(*args, **kwargs) - - - def _mock_call(self, /, *args, **kwargs): - return self._execute_mock_call(*args, **kwargs) - - def _increment_mock_call(self, /, *args, **kwargs): - self.called = True - - # handle call_args - # needs to be set here so assertions on call arguments pass before - # execution in the case of awaited calls - with NonCallableMock._lock: - # Lock is used here so that call_args_list and call_count are - # set atomically otherwise it is possible that by the time call_count - # is set another thread may have appended to call_args_list. - # The rest of this function relies on list.append being atomic and - # skips locking. - _call = _Call((args, kwargs), two=True) - self.call_args = _call - self.call_args_list.append(_call) - self.call_count = len(self.call_args_list) - - # initial stuff for method_calls: - do_method_calls = self._mock_parent is not None - method_call_name = self._mock_name - - # initial stuff for mock_calls: - mock_call_name = self._mock_new_name - is_a_call = mock_call_name == '()' - self.mock_calls.append(_Call(('', args, kwargs))) - - # follow up the chain of mocks: - _new_parent = self._mock_new_parent - while _new_parent is not None: - - # handle method_calls: - if do_method_calls: - _new_parent.method_calls.append(_Call((method_call_name, args, kwargs))) - do_method_calls = _new_parent._mock_parent is not None - if do_method_calls: - method_call_name = _new_parent._mock_name + '.' + method_call_name - - # handle mock_calls: - this_mock_call = _Call((mock_call_name, args, kwargs)) - _new_parent.mock_calls.append(this_mock_call) - - if _new_parent._mock_new_name: - if is_a_call: - dot = '' - else: - dot = '.' - is_a_call = _new_parent._mock_new_name == '()' - mock_call_name = _new_parent._mock_new_name + dot + mock_call_name - - # follow the parental chain: - _new_parent = _new_parent._mock_new_parent - - def _execute_mock_call(self, /, *args, **kwargs): - # separate from _increment_mock_call so that awaited functions are - # executed separately from their call, also AsyncMock overrides this method - - effect = self.side_effect - if effect is not None: - if _is_exception(effect): - raise effect - elif not _callable(effect): - result = next(effect) - if _is_exception(result): - raise result - else: - result = effect(*args, **kwargs) - - if result is not DEFAULT: - return result - - if self._mock_return_value is not DEFAULT: - return self.return_value - - if self._mock_delegate and self._mock_delegate.return_value is not DEFAULT: - return self.return_value - - if self._mock_wraps is not None: - return self._mock_wraps(*args, **kwargs) - - return self.return_value - - - -class Mock(CallableMixin, NonCallableMock): - """ - Create a new `Mock` object. `Mock` takes several optional arguments - that specify the behaviour of the Mock object: - - * `spec`: This can be either a list of strings or an existing object (a - class or instance) that acts as the specification for the mock object. If - you pass in an object then a list of strings is formed by calling dir on - the object (excluding unsupported magic attributes and methods). Accessing - any attribute not in this list will raise an `AttributeError`. - - If `spec` is an object (rather than a list of strings) then - `mock.__class__` returns the class of the spec object. This allows mocks - to pass `isinstance` tests. - - * `spec_set`: A stricter variant of `spec`. If used, attempting to *set* - or get an attribute on the mock that isn't on the object passed as - `spec_set` will raise an `AttributeError`. - - * `side_effect`: A function to be called whenever the Mock is called. See - the `side_effect` attribute. Useful for raising exceptions or - dynamically changing return values. The function is called with the same - arguments as the mock, and unless it returns `DEFAULT`, the return - value of this function is used as the return value. - - If `side_effect` is an iterable then each call to the mock will return - the next value from the iterable. If any of the members of the iterable - are exceptions they will be raised instead of returned. - - * `return_value`: The value returned when the mock is called. By default - this is a new Mock (created on first access). See the - `return_value` attribute. - - * `unsafe`: By default, accessing any attribute whose name starts with - *assert*, *assret*, *asert*, *aseert*, or *assrt* raises an AttributeError. - Additionally, an AttributeError is raised when accessing - attributes that match the name of an assertion method without the prefix - `assert_`, e.g. accessing `called_once` instead of `assert_called_once`. - Passing `unsafe=True` will allow access to these attributes. - - * `wraps`: Item for the mock object to wrap. If `wraps` is not None then - calling the Mock will pass the call through to the wrapped object - (returning the real result). Attribute access on the mock will return a - Mock object that wraps the corresponding attribute of the wrapped object - (so attempting to access an attribute that doesn't exist will raise an - `AttributeError`). - - If the mock has an explicit `return_value` set then calls are not passed - to the wrapped object and the `return_value` is returned instead. - - * `name`: If the mock has a name then it will be used in the repr of the - mock. This can be useful for debugging. The name is propagated to child - mocks. - - Mocks can also be called with arbitrary keyword arguments. These will be - used to set attributes on the mock after it is created. - """ - - -# _check_spec_arg_typos takes kwargs from commands like patch and checks that -# they don't contain common misspellings of arguments related to autospeccing. -def _check_spec_arg_typos(kwargs_to_check): - typos = ("autospect", "auto_spec", "set_spec") - for typo in typos: - if typo in kwargs_to_check: - raise RuntimeError( - f"{typo!r} might be a typo; use unsafe=True if this is intended" - ) - - -class _patch(object): - - attribute_name = None - _active_patches = [] - - def __init__( - self, getter, attribute, new, spec, create, - spec_set, autospec, new_callable, kwargs, *, unsafe=False - ): - if new_callable is not None: - if new is not DEFAULT: - raise ValueError( - "Cannot use 'new' and 'new_callable' together" - ) - if autospec is not None: - raise ValueError( - "Cannot use 'autospec' and 'new_callable' together" - ) - if not unsafe: - _check_spec_arg_typos(kwargs) - if _is_instance_mock(spec): - raise InvalidSpecError( - f'Cannot spec attr {attribute!r} as the spec ' - f'has already been mocked out. [spec={spec!r}]') - if _is_instance_mock(spec_set): - raise InvalidSpecError( - f'Cannot spec attr {attribute!r} as the spec_set ' - f'target has already been mocked out. [spec_set={spec_set!r}]') - - self.getter = getter - self.attribute = attribute - self.new = new - self.new_callable = new_callable - self.spec = spec - self.create = create - self.has_local = False - self.spec_set = spec_set - self.autospec = autospec - self.kwargs = kwargs - self.additional_patchers = [] - self.is_started = False - - - def copy(self): - patcher = _patch( - self.getter, self.attribute, self.new, self.spec, - self.create, self.spec_set, - self.autospec, self.new_callable, self.kwargs - ) - patcher.attribute_name = self.attribute_name - patcher.additional_patchers = [ - p.copy() for p in self.additional_patchers - ] - return patcher - - - def __call__(self, func): - if isinstance(func, type): - return self.decorate_class(func) - if inspect.iscoroutinefunction(func): - return self.decorate_async_callable(func) - return self.decorate_callable(func) - - - def decorate_class(self, klass): - for attr in dir(klass): - if not attr.startswith(patch.TEST_PREFIX): - continue - - attr_value = getattr(klass, attr) - if not hasattr(attr_value, "__call__"): - continue - - patcher = self.copy() - setattr(klass, attr, patcher(attr_value)) - return klass - - - @contextlib.contextmanager - def decoration_helper(self, patched, args, keywargs): - extra_args = [] - with contextlib.ExitStack() as exit_stack: - for patching in patched.patchings: - arg = exit_stack.enter_context(patching) - if patching.attribute_name is not None: - keywargs.update(arg) - elif patching.new is DEFAULT: - extra_args.append(arg) - - args += tuple(extra_args) - yield (args, keywargs) - - - def decorate_callable(self, func): - # NB. Keep the method in sync with decorate_async_callable() - if hasattr(func, 'patchings'): - func.patchings.append(self) - return func - - @wraps(func) - def patched(*args, **keywargs): - with self.decoration_helper(patched, - args, - keywargs) as (newargs, newkeywargs): - return func(*newargs, **newkeywargs) - - patched.patchings = [self] - return patched - - - def decorate_async_callable(self, func): - # NB. Keep the method in sync with decorate_callable() - if hasattr(func, 'patchings'): - func.patchings.append(self) - return func - - @wraps(func) - async def patched(*args, **keywargs): - with self.decoration_helper(patched, - args, - keywargs) as (newargs, newkeywargs): - return await func(*newargs, **newkeywargs) - - patched.patchings = [self] - return patched - - - def get_original(self): - target = self.getter() - name = self.attribute - - original = DEFAULT - local = False - - try: - original = target.__dict__[name] - except (AttributeError, KeyError): - original = getattr(target, name, DEFAULT) - else: - local = True - - if name in _builtins and isinstance(target, ModuleType): - self.create = True - - if not self.create and original is DEFAULT: - raise AttributeError( - "%s does not have the attribute %r" % (target, name) - ) - return original, local - - - def __enter__(self): - """Perform the patch.""" - if self.is_started: - raise RuntimeError("Patch is already started") - - new, spec, spec_set = self.new, self.spec, self.spec_set - autospec, kwargs = self.autospec, self.kwargs - new_callable = self.new_callable - self.target = self.getter() - - # normalise False to None - if spec is False: - spec = None - if spec_set is False: - spec_set = None - if autospec is False: - autospec = None - - if spec is not None and autospec is not None: - raise TypeError("Can't specify spec and autospec") - if ((spec is not None or autospec is not None) and - spec_set not in (True, None)): - raise TypeError("Can't provide explicit spec_set *and* spec or autospec") - - original, local = self.get_original() - - if new is DEFAULT and autospec is None: - inherit = False - if spec is True: - # set spec to the object we are replacing - spec = original - if spec_set is True: - spec_set = original - spec = None - elif spec is not None: - if spec_set is True: - spec_set = spec - spec = None - elif spec_set is True: - spec_set = original - - if spec is not None or spec_set is not None: - if original is DEFAULT: - raise TypeError("Can't use 'spec' with create=True") - if isinstance(original, type): - # If we're patching out a class and there is a spec - inherit = True - - # Determine the Klass to use - if new_callable is not None: - Klass = new_callable - elif spec is None and _is_async_obj(original): - Klass = AsyncMock - elif spec is not None or spec_set is not None: - this_spec = spec - if spec_set is not None: - this_spec = spec_set - if _is_list(this_spec): - not_callable = '__call__' not in this_spec - else: - not_callable = not callable(this_spec) - if _is_async_obj(this_spec): - Klass = AsyncMock - elif not_callable: - Klass = NonCallableMagicMock - else: - Klass = MagicMock - else: - Klass = MagicMock - - _kwargs = {} - if spec is not None: - _kwargs['spec'] = spec - if spec_set is not None: - _kwargs['spec_set'] = spec_set - - # add a name to mocks - if (isinstance(Klass, type) and - issubclass(Klass, NonCallableMock) and self.attribute): - _kwargs['name'] = self.attribute - - _kwargs.update(kwargs) - new = Klass(**_kwargs) - - if inherit and _is_instance_mock(new): - # we can only tell if the instance should be callable if the - # spec is not a list - this_spec = spec - if spec_set is not None: - this_spec = spec_set - if (not _is_list(this_spec) and not - _instance_callable(this_spec)): - Klass = NonCallableMagicMock - - _kwargs.pop('name') - new.return_value = Klass(_new_parent=new, _new_name='()', - **_kwargs) - elif autospec is not None: - # spec is ignored, new *must* be default, spec_set is treated - # as a boolean. Should we check spec is not None and that spec_set - # is a bool? - if new is not DEFAULT: - raise TypeError( - "autospec creates the mock for you. Can't specify " - "autospec and new." - ) - if original is DEFAULT: - raise TypeError("Can't use 'autospec' with create=True") - spec_set = bool(spec_set) - if autospec is True: - autospec = original - - if _is_instance_mock(self.target): - raise InvalidSpecError( - f'Cannot autospec attr {self.attribute!r} as the patch ' - f'target has already been mocked out. ' - f'[target={self.target!r}, attr={autospec!r}]') - if _is_instance_mock(autospec): - target_name = getattr(self.target, '__name__', self.target) - raise InvalidSpecError( - f'Cannot autospec attr {self.attribute!r} from target ' - f'{target_name!r} as it has already been mocked out. ' - f'[target={self.target!r}, attr={autospec!r}]') - - new = create_autospec(autospec, spec_set=spec_set, - _name=self.attribute, **kwargs) - elif kwargs: - # can't set keyword args when we aren't creating the mock - # XXXX If new is a Mock we could call new.configure_mock(**kwargs) - raise TypeError("Can't pass kwargs to a mock we aren't creating") - - new_attr = new - - self.temp_original = original - self.is_local = local - self._exit_stack = contextlib.ExitStack() - self.is_started = True - try: - setattr(self.target, self.attribute, new_attr) - if self.attribute_name is not None: - extra_args = {} - if self.new is DEFAULT: - extra_args[self.attribute_name] = new - for patching in self.additional_patchers: - arg = self._exit_stack.enter_context(patching) - if patching.new is DEFAULT: - extra_args.update(arg) - return extra_args - - return new - except: - if not self.__exit__(*sys.exc_info()): - raise - - def __exit__(self, *exc_info): - """Undo the patch.""" - if not self.is_started: - return - - if self.is_local and self.temp_original is not DEFAULT: - setattr(self.target, self.attribute, self.temp_original) - else: - delattr(self.target, self.attribute) - if not self.create and (not hasattr(self.target, self.attribute) or - self.attribute in ('__doc__', '__module__', - '__defaults__', '__annotations__', - '__kwdefaults__')): - # needed for proxy objects like django settings - setattr(self.target, self.attribute, self.temp_original) - - del self.temp_original - del self.is_local - del self.target - exit_stack = self._exit_stack - del self._exit_stack - self.is_started = False - return exit_stack.__exit__(*exc_info) - - - def start(self): - """Activate a patch, returning any created mock.""" - result = self.__enter__() - self._active_patches.append(self) - return result - - - def stop(self): - """Stop an active patch.""" - try: - self._active_patches.remove(self) - except ValueError: - # If the patch hasn't been started this will fail - return None - - return self.__exit__(None, None, None) - - - -def _get_target(target): - try: - target, attribute = target.rsplit('.', 1) - except (TypeError, ValueError, AttributeError): - raise TypeError( - f"Need a valid target to patch. You supplied: {target!r}") - return partial(pkgutil.resolve_name, target), attribute - - -def _patch_object( - target, attribute, new=DEFAULT, spec=None, - create=False, spec_set=None, autospec=None, - new_callable=None, *, unsafe=False, **kwargs - ): - """ - patch the named member (`attribute`) on an object (`target`) with a mock - object. - - `patch.object` can be used as a decorator, class decorator or a context - manager. Arguments `new`, `spec`, `create`, `spec_set`, - `autospec` and `new_callable` have the same meaning as for `patch`. Like - `patch`, `patch.object` takes arbitrary keyword arguments for configuring - the mock object it creates. - - When used as a class decorator `patch.object` honours `patch.TEST_PREFIX` - for choosing which methods to wrap. - """ - if type(target) is str: - raise TypeError( - f"{target!r} must be the actual object to be patched, not a str" - ) - getter = lambda: target - return _patch( - getter, attribute, new, spec, create, - spec_set, autospec, new_callable, kwargs, unsafe=unsafe - ) - - -def _patch_multiple(target, spec=None, create=False, spec_set=None, - autospec=None, new_callable=None, **kwargs): - """Perform multiple patches in a single call. It takes the object to be - patched (either as an object or a string to fetch the object by importing) - and keyword arguments for the patches:: - - with patch.multiple(settings, FIRST_PATCH='one', SECOND_PATCH='two'): - ... - - Use `DEFAULT` as the value if you want `patch.multiple` to create - mocks for you. In this case the created mocks are passed into a decorated - function by keyword, and a dictionary is returned when `patch.multiple` is - used as a context manager. - - `patch.multiple` can be used as a decorator, class decorator or a context - manager. The arguments `spec`, `spec_set`, `create`, - `autospec` and `new_callable` have the same meaning as for `patch`. These - arguments will be applied to *all* patches done by `patch.multiple`. - - When used as a class decorator `patch.multiple` honours `patch.TEST_PREFIX` - for choosing which methods to wrap. - """ - if type(target) is str: - getter = partial(pkgutil.resolve_name, target) - else: - getter = lambda: target - - if not kwargs: - raise ValueError( - 'Must supply at least one keyword argument with patch.multiple' - ) - # need to wrap in a list for python 3, where items is a view - items = list(kwargs.items()) - attribute, new = items[0] - patcher = _patch( - getter, attribute, new, spec, create, spec_set, - autospec, new_callable, {} - ) - patcher.attribute_name = attribute - for attribute, new in items[1:]: - this_patcher = _patch( - getter, attribute, new, spec, create, spec_set, - autospec, new_callable, {} - ) - this_patcher.attribute_name = attribute - patcher.additional_patchers.append(this_patcher) - return patcher - - -def patch( - target, new=DEFAULT, spec=None, create=False, - spec_set=None, autospec=None, new_callable=None, *, unsafe=False, **kwargs - ): - """ - `patch` acts as a function decorator, class decorator or a context - manager. Inside the body of the function or with statement, the `target` - is patched with a `new` object. When the function/with statement exits - the patch is undone. - - If `new` is omitted, then the target is replaced with an - `AsyncMock` if the patched object is an async function or a - `MagicMock` otherwise. If `patch` is used as a decorator and `new` is - omitted, the created mock is passed in as an extra argument to the - decorated function. If `patch` is used as a context manager the created - mock is returned by the context manager. - - `target` should be a string in the form `'package.module.ClassName'`. The - `target` is imported and the specified object replaced with the `new` - object, so the `target` must be importable from the environment you are - calling `patch` from. The target is imported when the decorated function - is executed, not at decoration time. - - The `spec` and `spec_set` keyword arguments are passed to the `MagicMock` - if patch is creating one for you. - - In addition you can pass `spec=True` or `spec_set=True`, which causes - patch to pass in the object being mocked as the spec/spec_set object. - - `new_callable` allows you to specify a different class, or callable object, - that will be called to create the `new` object. By default `AsyncMock` is - used for async functions and `MagicMock` for the rest. - - A more powerful form of `spec` is `autospec`. If you set `autospec=True` - then the mock will be created with a spec from the object being replaced. - All attributes of the mock will also have the spec of the corresponding - attribute of the object being replaced. Methods and functions being - mocked will have their arguments checked and will raise a `TypeError` if - they are called with the wrong signature. For mocks replacing a class, - their return value (the 'instance') will have the same spec as the class. - - Instead of `autospec=True` you can pass `autospec=some_object` to use an - arbitrary object as the spec instead of the one being replaced. - - By default `patch` will fail to replace attributes that don't exist. If - you pass in `create=True`, and the attribute doesn't exist, patch will - create the attribute for you when the patched function is called, and - delete it again afterwards. This is useful for writing tests against - attributes that your production code creates at runtime. It is off by - default because it can be dangerous. With it switched on you can write - passing tests against APIs that don't actually exist! - - Patch can be used as a `TestCase` class decorator. It works by - decorating each test method in the class. This reduces the boilerplate - code when your test methods share a common patchings set. `patch` finds - tests by looking for method names that start with `patch.TEST_PREFIX`. - By default this is `test`, which matches the way `unittest` finds tests. - You can specify an alternative prefix by setting `patch.TEST_PREFIX`. - - Patch can be used as a context manager, with the with statement. Here the - patching applies to the indented block after the with statement. If you - use "as" then the patched object will be bound to the name after the - "as"; very useful if `patch` is creating a mock object for you. - - Patch will raise a `RuntimeError` if passed some common misspellings of - the arguments autospec and spec_set. Pass the argument `unsafe` with the - value True to disable that check. - - `patch` takes arbitrary keyword arguments. These will be passed to - `AsyncMock` if the patched object is asynchronous, to `MagicMock` - otherwise or to `new_callable` if specified. - - `patch.dict(...)`, `patch.multiple(...)` and `patch.object(...)` are - available for alternate use-cases. - """ - getter, attribute = _get_target(target) - return _patch( - getter, attribute, new, spec, create, - spec_set, autospec, new_callable, kwargs, unsafe=unsafe - ) - - -class _patch_dict(object): - """ - Patch a dictionary, or dictionary like object, and restore the dictionary - to its original state after the test, where the restored dictionary is - a copy of the dictionary as it was before the test. - - `in_dict` can be a dictionary or a mapping like container. If it is a - mapping then it must at least support getting, setting and deleting items - plus iterating over keys. - - `in_dict` can also be a string specifying the name of the dictionary, which - will then be fetched by importing it. - - `values` can be a dictionary of values to set in the dictionary. `values` - can also be an iterable of `(key, value)` pairs. - - If `clear` is True then the dictionary will be cleared before the new - values are set. - - `patch.dict` can also be called with arbitrary keyword arguments to set - values in the dictionary:: - - with patch.dict('sys.modules', mymodule=Mock(), other_module=Mock()): - ... - - `patch.dict` can be used as a context manager, decorator or class - decorator. When used as a class decorator `patch.dict` honours - `patch.TEST_PREFIX` for choosing which methods to wrap. - """ - - def __init__(self, in_dict, values=(), clear=False, **kwargs): - self.in_dict = in_dict - # support any argument supported by dict(...) constructor - self.values = dict(values) - self.values.update(kwargs) - self.clear = clear - self._original = None - - - def __call__(self, f): - if isinstance(f, type): - return self.decorate_class(f) - if inspect.iscoroutinefunction(f): - return self.decorate_async_callable(f) - return self.decorate_callable(f) - - - def decorate_callable(self, f): - @wraps(f) - def _inner(*args, **kw): - self._patch_dict() - try: - return f(*args, **kw) - finally: - self._unpatch_dict() - - return _inner - - - def decorate_async_callable(self, f): - @wraps(f) - async def _inner(*args, **kw): - self._patch_dict() - try: - return await f(*args, **kw) - finally: - self._unpatch_dict() - - return _inner - - - def decorate_class(self, klass): - for attr in dir(klass): - attr_value = getattr(klass, attr) - if (attr.startswith(patch.TEST_PREFIX) and - hasattr(attr_value, "__call__")): - decorator = _patch_dict(self.in_dict, self.values, self.clear) - decorated = decorator(attr_value) - setattr(klass, attr, decorated) - return klass - - - def __enter__(self): - """Patch the dict.""" - self._patch_dict() - return self.in_dict - - - def _patch_dict(self): - values = self.values - if isinstance(self.in_dict, str): - self.in_dict = pkgutil.resolve_name(self.in_dict) - in_dict = self.in_dict - clear = self.clear - - try: - original = in_dict.copy() - except AttributeError: - # dict like object with no copy method - # must support iteration over keys - original = {} - for key in in_dict: - original[key] = in_dict[key] - self._original = original - - if clear: - _clear_dict(in_dict) - - try: - in_dict.update(values) - except AttributeError: - # dict like object with no update method - for key in values: - in_dict[key] = values[key] - - - def _unpatch_dict(self): - in_dict = self.in_dict - original = self._original - - _clear_dict(in_dict) - - try: - in_dict.update(original) - except AttributeError: - for key in original: - in_dict[key] = original[key] - - - def __exit__(self, *args): - """Unpatch the dict.""" - if self._original is not None: - self._unpatch_dict() - return False - - - def start(self): - """Activate a patch, returning any created mock.""" - result = self.__enter__() - _patch._active_patches.append(self) - return result - - - def stop(self): - """Stop an active patch.""" - try: - _patch._active_patches.remove(self) - except ValueError: - # If the patch hasn't been started this will fail - return None - - return self.__exit__(None, None, None) - - -def _clear_dict(in_dict): - try: - in_dict.clear() - except AttributeError: - keys = list(in_dict) - for key in keys: - del in_dict[key] - - -def _patch_stopall(): - """Stop all active patches. LIFO to unroll nested patches.""" - for patch in reversed(_patch._active_patches): - patch.stop() - - -patch.object = _patch_object -patch.dict = _patch_dict -patch.multiple = _patch_multiple -patch.stopall = _patch_stopall -patch.TEST_PREFIX = 'test' - -magic_methods = ( - "lt le gt ge eq ne " - "getitem setitem delitem " - "len contains iter " - "hash str sizeof " - "enter exit " - # we added divmod and rdivmod here instead of numerics - # because there is no idivmod - "divmod rdivmod neg pos abs invert " - "complex int float index " - "round trunc floor ceil " - "bool next " - "fspath " - "aiter " -) - -numerics = ( - "add sub mul matmul truediv floordiv mod lshift rshift and xor or pow" -) -inplace = ' '.join('i%s' % n for n in numerics.split()) -right = ' '.join('r%s' % n for n in numerics.split()) - -# not including __prepare__, __instancecheck__, __subclasscheck__ -# (as they are metaclass methods) -# __del__ is not supported at all as it causes problems if it exists - -_non_defaults = { - '__get__', '__set__', '__delete__', '__reversed__', '__missing__', - '__reduce__', '__reduce_ex__', '__getinitargs__', '__getnewargs__', - '__getstate__', '__setstate__', '__getformat__', - '__repr__', '__dir__', '__subclasses__', '__format__', - '__getnewargs_ex__', -} - - -def _get_method(name, func): - "Turns a callable object (like a mock) into a real function" - def method(self, /, *args, **kw): - return func(self, *args, **kw) - method.__name__ = name - return method - - -_magics = { - '__%s__' % method for method in - ' '.join([magic_methods, numerics, inplace, right]).split() -} - -# Magic methods used for async `with` statements -_async_method_magics = {"__aenter__", "__aexit__", "__anext__"} -# Magic methods that are only used with async calls but are synchronous functions themselves -_sync_async_magics = {"__aiter__"} -_async_magics = _async_method_magics | _sync_async_magics - -_all_sync_magics = _magics | _non_defaults -_all_magics = _all_sync_magics | _async_magics - -_unsupported_magics = { - '__getattr__', '__setattr__', - '__init__', '__new__', '__prepare__', - '__instancecheck__', '__subclasscheck__', - '__del__' -} - -_calculate_return_value = { - '__hash__': lambda self: object.__hash__(self), - '__str__': lambda self: object.__str__(self), - '__sizeof__': lambda self: object.__sizeof__(self), - '__fspath__': lambda self: f"{type(self).__name__}/{self._extract_mock_name()}/{id(self)}", -} - -_return_values = { - '__lt__': NotImplemented, - '__gt__': NotImplemented, - '__le__': NotImplemented, - '__ge__': NotImplemented, - '__int__': 1, - '__contains__': False, - '__len__': 0, - '__exit__': False, - '__complex__': 1j, - '__float__': 1.0, - '__bool__': True, - '__index__': 1, - '__aexit__': False, -} - - -def _get_eq(self): - def __eq__(other): - ret_val = self.__eq__._mock_return_value - if ret_val is not DEFAULT: - return ret_val - if self is other: - return True - return NotImplemented - return __eq__ - -def _get_ne(self): - def __ne__(other): - if self.__ne__._mock_return_value is not DEFAULT: - return DEFAULT - if self is other: - return False - return NotImplemented - return __ne__ - -def _get_iter(self): - def __iter__(): - ret_val = self.__iter__._mock_return_value - if ret_val is DEFAULT: - return iter([]) - # if ret_val was already an iterator, then calling iter on it should - # return the iterator unchanged - return iter(ret_val) - return __iter__ - -def _get_async_iter(self): - def __aiter__(): - ret_val = self.__aiter__._mock_return_value - if ret_val is DEFAULT: - return _AsyncIterator(iter([])) - return _AsyncIterator(iter(ret_val)) - return __aiter__ - -_side_effect_methods = { - '__eq__': _get_eq, - '__ne__': _get_ne, - '__iter__': _get_iter, - '__aiter__': _get_async_iter -} - - - -def _set_return_value(mock, method, name): - fixed = _return_values.get(name, DEFAULT) - if fixed is not DEFAULT: - method.return_value = fixed - return - - return_calculator = _calculate_return_value.get(name) - if return_calculator is not None: - return_value = return_calculator(mock) - method.return_value = return_value - return - - side_effector = _side_effect_methods.get(name) - if side_effector is not None: - method.side_effect = side_effector(mock) - - - -class MagicMixin(Base): - def __init__(self, /, *args, **kw): - self._mock_set_magics() # make magic work for kwargs in init - _safe_super(MagicMixin, self).__init__(*args, **kw) - self._mock_set_magics() # fix magic broken by upper level init - - - def _mock_set_magics(self): - orig_magics = _magics | _async_method_magics - these_magics = orig_magics - - if getattr(self, "_mock_methods", None) is not None: - these_magics = orig_magics.intersection(self._mock_methods) - remove_magics = orig_magics - these_magics - - for entry in remove_magics: - if entry in type(self).__dict__: - # remove unneeded magic methods - delattr(self, entry) - - # don't overwrite existing attributes if called a second time - these_magics = these_magics - set(type(self).__dict__) - - _type = type(self) - for entry in these_magics: - setattr(_type, entry, MagicProxy(entry, self)) - - - -class NonCallableMagicMock(MagicMixin, NonCallableMock): - """A version of `MagicMock` that isn't callable.""" - def mock_add_spec(self, spec, spec_set=False): - """Add a spec to a mock. `spec` can either be an object or a - list of strings. Only attributes on the `spec` can be fetched as - attributes from the mock. - - If `spec_set` is True then only attributes on the spec can be set.""" - self._mock_add_spec(spec, spec_set) - self._mock_set_magics() - - -class AsyncMagicMixin(MagicMixin): - pass - - -class MagicMock(MagicMixin, Mock): - """ - MagicMock is a subclass of Mock with default implementations - of most of the magic methods. You can use MagicMock without having to - configure the magic methods yourself. - - If you use the `spec` or `spec_set` arguments then *only* magic - methods that exist in the spec will be created. - - Attributes and the return value of a `MagicMock` will also be `MagicMocks`. - """ - def mock_add_spec(self, spec, spec_set=False): - """Add a spec to a mock. `spec` can either be an object or a - list of strings. Only attributes on the `spec` can be fetched as - attributes from the mock. - - If `spec_set` is True then only attributes on the spec can be set.""" - self._mock_add_spec(spec, spec_set) - self._mock_set_magics() - - def reset_mock(self, /, *args, return_value: bool = False, **kwargs): - if ( - return_value - and self._mock_name - and _is_magic(self._mock_name) - ): - # Don't reset return values for magic methods, - # otherwise `m.__str__` will start - # to return `MagicMock` instances, instead of `str` instances. - return_value = False - super().reset_mock(*args, return_value=return_value, **kwargs) - - -class MagicProxy(Base): - def __init__(self, name, parent): - self.name = name - self.parent = parent - - def create_mock(self): - entry = self.name - parent = self.parent - m = parent._get_child_mock(name=entry, _new_name=entry, - _new_parent=parent) - setattr(parent, entry, m) - _set_return_value(parent, m, entry) - return m - - def __get__(self, obj, _type=None): - return self.create_mock() - - -try: - _CODE_SIG = inspect.signature(partial(CodeType.__init__, None)) - _CODE_ATTRS = dir(CodeType) -except ValueError: - _CODE_SIG = None - - -class AsyncMockMixin(Base): - await_count = _delegating_property('await_count') - await_args = _delegating_property('await_args') - await_args_list = _delegating_property('await_args_list') - - def __init__(self, /, *args, **kwargs): - super().__init__(*args, **kwargs) - # iscoroutinefunction() checks _is_coroutine property to say if an - # object is a coroutine. Without this check it looks to see if it is a - # function/method, which in this case it is not (since it is an - # AsyncMock). - # It is set through __dict__ because when spec_set is True, this - # attribute is likely undefined. - self.__dict__['_is_coroutine'] = asyncio.coroutines._is_coroutine - self.__dict__['_mock_await_count'] = 0 - self.__dict__['_mock_await_args'] = None - self.__dict__['_mock_await_args_list'] = _CallList() - if _CODE_SIG: - code_mock = NonCallableMock(spec_set=_CODE_ATTRS) - code_mock.__dict__["_spec_class"] = CodeType - code_mock.__dict__["_spec_signature"] = _CODE_SIG - else: - code_mock = NonCallableMock(spec_set=CodeType) - code_mock.co_flags = ( - inspect.CO_COROUTINE - + inspect.CO_VARARGS - + inspect.CO_VARKEYWORDS - ) - code_mock.co_argcount = 0 - code_mock.co_varnames = ('args', 'kwargs') - code_mock.co_posonlyargcount = 0 - code_mock.co_kwonlyargcount = 0 - self.__dict__['__code__'] = code_mock - self.__dict__['__name__'] = 'AsyncMock' - self.__dict__['__defaults__'] = tuple() - self.__dict__['__kwdefaults__'] = {} - self.__dict__['__annotations__'] = None - - async def _execute_mock_call(self, /, *args, **kwargs): - # This is nearly just like super(), except for special handling - # of coroutines - - _call = _Call((args, kwargs), two=True) - self.await_count += 1 - self.await_args = _call - self.await_args_list.append(_call) - - effect = self.side_effect - if effect is not None: - if _is_exception(effect): - raise effect - elif not _callable(effect): - try: - result = next(effect) - except StopIteration: - # It is impossible to propagate a StopIteration - # through coroutines because of PEP 479 - raise StopAsyncIteration - if _is_exception(result): - raise result - elif iscoroutinefunction(effect): - result = await effect(*args, **kwargs) - else: - result = effect(*args, **kwargs) - - if result is not DEFAULT: - return result - - if self._mock_return_value is not DEFAULT: - return self.return_value - - if self._mock_wraps is not None: - if iscoroutinefunction(self._mock_wraps): - return await self._mock_wraps(*args, **kwargs) - return self._mock_wraps(*args, **kwargs) - - return self.return_value - - def assert_awaited(self): - """ - Assert that the mock was awaited at least once. - """ - if self.await_count == 0: - msg = f"Expected {self._mock_name or 'mock'} to have been awaited." - raise AssertionError(msg) - - def assert_awaited_once(self): - """ - Assert that the mock was awaited exactly once. - """ - if not self.await_count == 1: - msg = (f"Expected {self._mock_name or 'mock'} to have been awaited once." - f" Awaited {self.await_count} times.") - raise AssertionError(msg) - - def assert_awaited_with(self, /, *args, **kwargs): - """ - Assert that the last await was with the specified arguments. - """ - if self.await_args is None: - expected = self._format_mock_call_signature(args, kwargs) - raise AssertionError(f'Expected await: {expected}\nNot awaited') - - def _error_message(): - msg = self._format_mock_failure_message(args, kwargs, action='await') - return msg - - expected = self._call_matcher(_Call((args, kwargs), two=True)) - actual = self._call_matcher(self.await_args) - if actual != expected: - cause = expected if isinstance(expected, Exception) else None - raise AssertionError(_error_message()) from cause - - def assert_awaited_once_with(self, /, *args, **kwargs): - """ - Assert that the mock was awaited exactly once and with the specified - arguments. - """ - if not self.await_count == 1: - msg = (f"Expected {self._mock_name or 'mock'} to have been awaited once." - f" Awaited {self.await_count} times.") - raise AssertionError(msg) - return self.assert_awaited_with(*args, **kwargs) - - def assert_any_await(self, /, *args, **kwargs): - """ - Assert the mock has ever been awaited with the specified arguments. - """ - expected = self._call_matcher(_Call((args, kwargs), two=True)) - cause = expected if isinstance(expected, Exception) else None - actual = [self._call_matcher(c) for c in self.await_args_list] - if cause or expected not in _AnyComparer(actual): - expected_string = self._format_mock_call_signature(args, kwargs) - raise AssertionError( - '%s await not found' % expected_string - ) from cause - - def assert_has_awaits(self, calls, any_order=False): - """ - Assert the mock has been awaited with the specified calls. - The :attr:`await_args_list` list is checked for the awaits. - - If `any_order` is False (the default) then the awaits must be - sequential. There can be extra calls before or after the - specified awaits. - - If `any_order` is True then the awaits can be in any order, but - they must all appear in :attr:`await_args_list`. - """ - expected = [self._call_matcher(c) for c in calls] - cause = next((e for e in expected if isinstance(e, Exception)), None) - all_awaits = _CallList(self._call_matcher(c) for c in self.await_args_list) - if not any_order: - if expected not in all_awaits: - if cause is None: - problem = 'Awaits not found.' - else: - problem = ('Error processing expected awaits.\n' - 'Errors: {}').format( - [e if isinstance(e, Exception) else None - for e in expected]) - raise AssertionError( - f'{problem}\n' - f'Expected: {_CallList(calls)}\n' - f'Actual: {self.await_args_list}' - ) from cause - return - - all_awaits = list(all_awaits) - - not_found = [] - for kall in expected: - try: - all_awaits.remove(kall) - except ValueError: - not_found.append(kall) - if not_found: - raise AssertionError( - '%r not all found in await list' % (tuple(not_found),) - ) from cause - - def assert_not_awaited(self): - """ - Assert that the mock was never awaited. - """ - if self.await_count != 0: - msg = (f"Expected {self._mock_name or 'mock'} to not have been awaited." - f" Awaited {self.await_count} times.") - raise AssertionError(msg) - - def reset_mock(self, /, *args, **kwargs): - """ - See :func:`.Mock.reset_mock()` - """ - super().reset_mock(*args, **kwargs) - self.await_count = 0 - self.await_args = None - self.await_args_list = _CallList() - - -class AsyncMock(AsyncMockMixin, AsyncMagicMixin, Mock): - """ - Enhance :class:`Mock` with features allowing to mock - an async function. - - The :class:`AsyncMock` object will behave so the object is - recognized as an async function, and the result of a call is an awaitable: - - >>> mock = AsyncMock() - >>> inspect.iscoroutinefunction(mock) - True - >>> inspect.isawaitable(mock()) - True - - - The result of ``mock()`` is an async function which will have the outcome - of ``side_effect`` or ``return_value``: - - - if ``side_effect`` is a function, the async function will return the - result of that function, - - if ``side_effect`` is an exception, the async function will raise the - exception, - - if ``side_effect`` is an iterable, the async function will return the - next value of the iterable, however, if the sequence of result is - exhausted, ``StopIteration`` is raised immediately, - - if ``side_effect`` is not defined, the async function will return the - value defined by ``return_value``, hence, by default, the async function - returns a new :class:`AsyncMock` object. - - If the outcome of ``side_effect`` or ``return_value`` is an async function, - the mock async function obtained when the mock object is called will be this - async function itself (and not an async function returning an async - function). - - The test author can also specify a wrapped object with ``wraps``. In this - case, the :class:`Mock` object behavior is the same as with an - :class:`.Mock` object: the wrapped object may have methods - defined as async function functions. - - Based on Martin Richard's asynctest project. - """ - - -class _ANY(object): - "A helper object that compares equal to everything." - - def __eq__(self, other): - return True - - def __ne__(self, other): - return False - - def __repr__(self): - return '<ANY>' - -ANY = _ANY() - - - -def _format_call_signature(name, args, kwargs): - message = '%s(%%s)' % name - formatted_args = '' - args_string = ', '.join([repr(arg) for arg in args]) - kwargs_string = ', '.join([ - '%s=%r' % (key, value) for key, value in kwargs.items() - ]) - if args_string: - formatted_args = args_string - if kwargs_string: - if formatted_args: - formatted_args += ', ' - formatted_args += kwargs_string - - return message % formatted_args - - - -class _Call(tuple): - """ - A tuple for holding the results of a call to a mock, either in the form - `(args, kwargs)` or `(name, args, kwargs)`. - - If args or kwargs are empty then a call tuple will compare equal to - a tuple without those values. This makes comparisons less verbose:: - - _Call(('name', (), {})) == ('name',) - _Call(('name', (1,), {})) == ('name', (1,)) - _Call(((), {'a': 'b'})) == ({'a': 'b'},) - - The `_Call` object provides a useful shortcut for comparing with call:: - - _Call(((1, 2), {'a': 3})) == call(1, 2, a=3) - _Call(('foo', (1, 2), {'a': 3})) == call.foo(1, 2, a=3) - - If the _Call has no name then it will match any name. - """ - def __new__(cls, value=(), name='', parent=None, two=False, - from_kall=True): - args = () - kwargs = {} - _len = len(value) - if _len == 3: - name, args, kwargs = value - elif _len == 2: - first, second = value - if isinstance(first, str): - name = first - if isinstance(second, tuple): - args = second - else: - kwargs = second - else: - args, kwargs = first, second - elif _len == 1: - value, = value - if isinstance(value, str): - name = value - elif isinstance(value, tuple): - args = value - else: - kwargs = value - - if two: - return tuple.__new__(cls, (args, kwargs)) - - return tuple.__new__(cls, (name, args, kwargs)) - - - def __init__(self, value=(), name=None, parent=None, two=False, - from_kall=True): - self._mock_name = name - self._mock_parent = parent - self._mock_from_kall = from_kall - - - def __eq__(self, other): - try: - len_other = len(other) - except TypeError: - return NotImplemented - - self_name = '' - if len(self) == 2: - self_args, self_kwargs = self - else: - self_name, self_args, self_kwargs = self - - if (getattr(self, '_mock_parent', None) and getattr(other, '_mock_parent', None) - and self._mock_parent != other._mock_parent): - return False - - other_name = '' - if len_other == 0: - other_args, other_kwargs = (), {} - elif len_other == 3: - other_name, other_args, other_kwargs = other - elif len_other == 1: - value, = other - if isinstance(value, tuple): - other_args = value - other_kwargs = {} - elif isinstance(value, str): - other_name = value - other_args, other_kwargs = (), {} - else: - other_args = () - other_kwargs = value - elif len_other == 2: - # could be (name, args) or (name, kwargs) or (args, kwargs) - first, second = other - if isinstance(first, str): - other_name = first - if isinstance(second, tuple): - other_args, other_kwargs = second, {} - else: - other_args, other_kwargs = (), second - else: - other_args, other_kwargs = first, second - else: - return False - - if self_name and other_name != self_name: - return False - - # this order is important for ANY to work! - return (other_args, other_kwargs) == (self_args, self_kwargs) - - - __ne__ = object.__ne__ - - - def __call__(self, /, *args, **kwargs): - if self._mock_name is None: - return _Call(('', args, kwargs), name='()') - - name = self._mock_name + '()' - return _Call((self._mock_name, args, kwargs), name=name, parent=self) - - - def __getattr__(self, attr): - if self._mock_name is None: - return _Call(name=attr, from_kall=False) - name = '%s.%s' % (self._mock_name, attr) - return _Call(name=name, parent=self, from_kall=False) - - - def __getattribute__(self, attr): - if attr in tuple.__dict__: - raise AttributeError - return tuple.__getattribute__(self, attr) - - - def _get_call_arguments(self): - if len(self) == 2: - args, kwargs = self - else: - name, args, kwargs = self - - return args, kwargs - - @property - def args(self): - return self._get_call_arguments()[0] - - @property - def kwargs(self): - return self._get_call_arguments()[1] - - def __repr__(self): - if not self._mock_from_kall: - name = self._mock_name or 'call' - if name.startswith('()'): - name = 'call%s' % name - return name - - if len(self) == 2: - name = 'call' - args, kwargs = self - else: - name, args, kwargs = self - if not name: - name = 'call' - elif not name.startswith('()'): - name = 'call.%s' % name - else: - name = 'call%s' % name - return _format_call_signature(name, args, kwargs) - - - def call_list(self): - """For a call object that represents multiple calls, `call_list` - returns a list of all the intermediate calls as well as the - final call.""" - vals = [] - thing = self - while thing is not None: - if thing._mock_from_kall: - vals.append(thing) - thing = thing._mock_parent - return _CallList(reversed(vals)) - - -call = _Call(from_kall=False) - - -def create_autospec(spec, spec_set=False, instance=False, _parent=None, - _name=None, *, unsafe=False, **kwargs): - """Create a mock object using another object as a spec. Attributes on the - mock will use the corresponding attribute on the `spec` object as their - spec. - - Functions or methods being mocked will have their arguments checked - to check that they are called with the correct signature. - - If `spec_set` is True then attempting to set attributes that don't exist - on the spec object will raise an `AttributeError`. - - If a class is used as a spec then the return value of the mock (the - instance of the class) will have the same spec. You can use a class as the - spec for an instance object by passing `instance=True`. The returned mock - will only be callable if instances of the mock are callable. - - `create_autospec` will raise a `RuntimeError` if passed some common - misspellings of the arguments autospec and spec_set. Pass the argument - `unsafe` with the value True to disable that check. - - `create_autospec` also takes arbitrary keyword arguments that are passed to - the constructor of the created mock.""" - if _is_list(spec): - # can't pass a list instance to the mock constructor as it will be - # interpreted as a list of strings - spec = type(spec) - - is_type = isinstance(spec, type) - if _is_instance_mock(spec): - raise InvalidSpecError(f'Cannot autospec a Mock object. ' - f'[object={spec!r}]') - is_async_func = _is_async_func(spec) - _kwargs = {'spec': spec} - - entries = [(entry, _missing) for entry in dir(spec)] - if is_type and instance and is_dataclass(spec): - is_dataclass_spec = True - dataclass_fields = fields(spec) - entries.extend((f.name, f.type) for f in dataclass_fields) - dataclass_spec_list = [f.name for f in dataclass_fields] - else: - is_dataclass_spec = False - - if spec_set: - _kwargs = {'spec_set': spec} - elif spec is None: - # None we mock with a normal mock without a spec - _kwargs = {} - if _kwargs and instance: - _kwargs['_spec_as_instance'] = True - if not unsafe: - _check_spec_arg_typos(kwargs) - - _name = kwargs.pop('name', _name) - _new_name = _name - if _parent is None: - # for a top level object no _new_name should be set - _new_name = '' - - _kwargs.update(kwargs) - - Klass = MagicMock - if inspect.isdatadescriptor(spec): - # descriptors don't have a spec - # because we don't know what type they return - _kwargs = {} - elif is_async_func: - if instance: - raise RuntimeError("Instance can not be True when create_autospec " - "is mocking an async function") - Klass = AsyncMock - elif not _callable(spec): - Klass = NonCallableMagicMock - elif is_type and instance and not _instance_callable(spec): - Klass = NonCallableMagicMock - - mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name, - name=_name, **_kwargs) - if is_dataclass_spec: - mock._mock_extend_spec_methods(dataclass_spec_list) - - if isinstance(spec, FunctionTypes): - # should only happen at the top level because we don't - # recurse for functions - if is_async_func: - mock = _set_async_signature(mock, spec) - else: - mock = _set_signature(mock, spec) - else: - _check_signature(spec, mock, is_type, instance) - - if _parent is not None and not instance: - _parent._mock_children[_name] = mock - - # Pop wraps from kwargs because it must not be passed to configure_mock. - wrapped = kwargs.pop('wraps', None) - if is_type and not instance and 'return_value' not in kwargs: - mock.return_value = create_autospec(spec, spec_set, instance=True, - _name='()', _parent=mock, - wraps=wrapped) - - for entry, original in entries: - if _is_magic(entry): - # MagicMock already does the useful magic methods for us - continue - - # XXXX do we need a better way of getting attributes without - # triggering code execution (?) Probably not - we need the actual - # object to mock it so we would rather trigger a property than mock - # the property descriptor. Likewise we want to mock out dynamically - # provided attributes. - # XXXX what about attributes that raise exceptions other than - # AttributeError on being fetched? - # we could be resilient against it, or catch and propagate the - # exception when the attribute is fetched from the mock - if original is _missing: - try: - original = getattr(spec, entry) - except AttributeError: - continue - - child_kwargs = {'spec': original} - # Wrap child attributes also. - if wrapped and hasattr(wrapped, entry): - child_kwargs.update(wraps=original) - if spec_set: - child_kwargs = {'spec_set': original} - - if not isinstance(original, FunctionTypes): - new = _SpecState(original, spec_set, mock, entry, instance) - mock._mock_children[entry] = new - else: - parent = mock - if isinstance(spec, FunctionTypes): - parent = mock.mock - - skipfirst = _must_skip(spec, entry, is_type) - child_kwargs['_eat_self'] = skipfirst - if iscoroutinefunction(original): - child_klass = AsyncMock - else: - child_klass = MagicMock - new = child_klass(parent=parent, name=entry, _new_name=entry, - _new_parent=parent, **child_kwargs) - mock._mock_children[entry] = new - new.return_value = child_klass() - _check_signature(original, new, skipfirst=skipfirst) - - # so functions created with _set_signature become instance attributes, - # *plus* their underlying mock exists in _mock_children of the parent - # mock. Adding to _mock_children may be unnecessary where we are also - # setting as an instance attribute? - if isinstance(new, FunctionTypes): - setattr(mock, entry, new) - # kwargs are passed with respect to the parent mock so, they are not used - # for creating return_value of the parent mock. So, this condition - # should be true only for the parent mock if kwargs are given. - if _is_instance_mock(mock) and kwargs: - mock.configure_mock(**kwargs) - - return mock - - -def _must_skip(spec, entry, is_type): - """ - Return whether we should skip the first argument on spec's `entry` - attribute. - """ - if not isinstance(spec, type): - if entry in getattr(spec, '__dict__', {}): - # instance attribute - shouldn't skip - return False - spec = spec.__class__ - - for klass in spec.__mro__: - result = klass.__dict__.get(entry, DEFAULT) - if result is DEFAULT: - continue - if isinstance(result, (staticmethod, classmethod)): - return False - elif isinstance(result, FunctionTypes): - # Normal method => skip if looked up on type - # (if looked up on instance, self is already skipped) - return is_type - else: - return False - - # function is a dynamically provided attribute - return is_type - - -class _SpecState(object): - - def __init__(self, spec, spec_set=False, parent=None, - name=None, ids=None, instance=False): - self.spec = spec - self.ids = ids - self.spec_set = spec_set - self.parent = parent - self.instance = instance - self.name = name - - -FunctionTypes = ( - # python function - type(create_autospec), - # instance method - type(ANY.__eq__), -) - - -file_spec = None -open_spec = None - - -def _to_stream(read_data): - if isinstance(read_data, bytes): - return io.BytesIO(read_data) - else: - return io.StringIO(read_data) - - -def mock_open(mock=None, read_data=''): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read`, `readline` and `readlines` of the - file handle to return. This is an empty string by default. - """ - _read_data = _to_stream(read_data) - _state = [_read_data, None] - - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return _state[0].readlines(*args, **kwargs) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return _state[0].read(*args, **kwargs) - - def _readline_side_effect(*args, **kwargs): - yield from _iter_side_effect() - while True: - yield _state[0].readline(*args, **kwargs) - - def _iter_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _state[0]: - yield line - - def _next_side_effect(): - if handle.readline.return_value is not None: - return handle.readline.return_value - return next(_state[0]) - - def _exit_side_effect(exctype, excinst, exctb): - handle.close() - - global file_spec - if file_spec is None: - import _io - file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))) - - global open_spec - if open_spec is None: - import _io - open_spec = list(set(dir(_io.open))) - if mock is None: - mock = MagicMock(name='open', spec=open_spec) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - _state[1] = _readline_side_effect() - handle.readline.side_effect = _state[1] - handle.readlines.side_effect = _readlines_side_effect - handle.__iter__.side_effect = _iter_side_effect - handle.__next__.side_effect = _next_side_effect - handle.__exit__.side_effect = _exit_side_effect - - def reset_data(*args, **kwargs): - _state[0] = _to_stream(read_data) - if handle.readline.side_effect == _state[1]: - # Only reset the side effect if the user hasn't overridden it. - _state[1] = _readline_side_effect() - handle.readline.side_effect = _state[1] - return DEFAULT - - mock.side_effect = reset_data - mock.return_value = handle - return mock - - -class PropertyMock(Mock): - """ - A mock intended to be used as a property, or other descriptor, on a class. - `PropertyMock` provides `__get__` and `__set__` methods so you can specify - a return value when it is fetched. - - Fetching a `PropertyMock` instance from an object calls the mock, with - no args. Setting it calls the mock with the value being set. - """ - def _get_child_mock(self, /, **kwargs): - return MagicMock(**kwargs) - - def __get__(self, obj, obj_type=None): - return self() - def __set__(self, obj, val): - self(val) - - -_timeout_unset = sentinel.TIMEOUT_UNSET - -class ThreadingMixin(Base): - - DEFAULT_TIMEOUT = None - - def _get_child_mock(self, /, **kw): - if isinstance(kw.get("parent"), ThreadingMixin): - kw["timeout"] = kw["parent"]._mock_wait_timeout - elif isinstance(kw.get("_new_parent"), ThreadingMixin): - kw["timeout"] = kw["_new_parent"]._mock_wait_timeout - return super()._get_child_mock(**kw) - - def __init__(self, *args, timeout=_timeout_unset, **kwargs): - super().__init__(*args, **kwargs) - if timeout is _timeout_unset: - timeout = self.DEFAULT_TIMEOUT - self.__dict__["_mock_event"] = threading.Event() # Event for any call - self.__dict__["_mock_calls_events"] = [] # Events for each of the calls - self.__dict__["_mock_calls_events_lock"] = threading.Lock() - self.__dict__["_mock_wait_timeout"] = timeout - - def reset_mock(self, /, *args, **kwargs): - """ - See :func:`.Mock.reset_mock()` - """ - super().reset_mock(*args, **kwargs) - self.__dict__["_mock_event"] = threading.Event() - self.__dict__["_mock_calls_events"] = [] - - def __get_event(self, expected_args, expected_kwargs): - with self._mock_calls_events_lock: - for args, kwargs, event in self._mock_calls_events: - if (args, kwargs) == (expected_args, expected_kwargs): - return event - new_event = threading.Event() - self._mock_calls_events.append((expected_args, expected_kwargs, new_event)) - return new_event - - def _mock_call(self, *args, **kwargs): - ret_value = super()._mock_call(*args, **kwargs) - - call_event = self.__get_event(args, kwargs) - call_event.set() - - self._mock_event.set() - - return ret_value - - def wait_until_called(self, *, timeout=_timeout_unset): - """Wait until the mock object is called. - - `timeout` - time to wait for in seconds, waits forever otherwise. - Defaults to the constructor provided timeout. - Use None to block undefinetively. - """ - if timeout is _timeout_unset: - timeout = self._mock_wait_timeout - if not self._mock_event.wait(timeout=timeout): - msg = (f"{self._mock_name or 'mock'} was not called before" - f" timeout({timeout}).") - raise AssertionError(msg) - - def wait_until_any_call_with(self, *args, **kwargs): - """Wait until the mock object is called with given args. - - Waits for the timeout in seconds provided in the constructor. - """ - event = self.__get_event(args, kwargs) - if not event.wait(timeout=self._mock_wait_timeout): - expected_string = self._format_mock_call_signature(args, kwargs) - raise AssertionError(f'{expected_string} call not found') - - -class ThreadingMock(ThreadingMixin, MagicMixin, Mock): - """ - A mock that can be used to wait until on calls happening - in a different thread. - - The constructor can take a `timeout` argument which - controls the timeout in seconds for all `wait` calls of the mock. - - You can change the default timeout of all instances via the - `ThreadingMock.DEFAULT_TIMEOUT` attribute. - - If no timeout is set, it will block undefinetively. - """ - pass - - -def seal(mock): - """Disable the automatic generation of child mocks. - - Given an input Mock, seals it to ensure no further mocks will be generated - when accessing an attribute that was not already defined. - - The operation recursively seals the mock passed in, meaning that - the mock itself, any mocks generated by accessing one of its attributes, - and all assigned mocks without a name or spec will be sealed. - """ - mock._mock_sealed = True - for attr in dir(mock): - try: - m = getattr(mock, attr) - except AttributeError: - continue - if not isinstance(m, NonCallableMock): - continue - if isinstance(m._mock_children.get(attr), _SpecState): - continue - if m._mock_new_parent is mock: - seal(m) - - -class _AsyncIterator: - """ - Wraps an iterator in an asynchronous iterator. - """ - def __init__(self, iterator): - self.iterator = iterator - code_mock = NonCallableMock(spec_set=CodeType) - code_mock.co_flags = inspect.CO_ITERABLE_COROUTINE - self.__dict__['__code__'] = code_mock - - async def __anext__(self): - try: - return next(self.iterator) - except StopIteration: - pass - raise StopAsyncIteration diff --git a/Python314_4_x86_Template/Lib/unittest/result.py b/Python314_4_x86_Template/Lib/unittest/result.py deleted file mode 100644 index b8ea396db..000000000 --- a/Python314_4_x86_Template/Lib/unittest/result.py +++ /dev/null @@ -1,259 +0,0 @@ -"""Test result object""" - -import io -import sys -import traceback - -from . import util -from functools import wraps - -__unittest = True - -def failfast(method): - @wraps(method) - def inner(self, *args, **kw): - if getattr(self, 'failfast', False): - self.stop() - return method(self, *args, **kw) - return inner - -STDOUT_LINE = '\nStdout:\n%s' -STDERR_LINE = '\nStderr:\n%s' - - -class TestResult(object): - """Holder for test result information. - - Test results are automatically managed by the TestCase and TestSuite - classes, and do not need to be explicitly manipulated by writers of tests. - - Each instance holds the total number of tests run, and collections of - failures and errors that occurred among those test runs. The collections - contain tuples of (testcase, exceptioninfo), where exceptioninfo is the - formatted traceback of the error that occurred. - """ - _previousTestClass = None - _testRunEntered = False - _moduleSetUpFailed = False - def __init__(self, stream=None, descriptions=None, verbosity=None): - self.failfast = False - self.failures = [] - self.errors = [] - self.testsRun = 0 - self.skipped = [] - self.expectedFailures = [] - self.unexpectedSuccesses = [] - self.collectedDurations = [] - self.shouldStop = False - self.buffer = False - self.tb_locals = False - self._stdout_buffer = None - self._stderr_buffer = None - self._original_stdout = sys.stdout - self._original_stderr = sys.stderr - self._mirrorOutput = False - - def printErrors(self): - "Called by TestRunner after test run" - - def startTest(self, test): - "Called when the given test is about to be run" - self.testsRun += 1 - self._mirrorOutput = False - self._setupStdout() - - def _setupStdout(self): - if self.buffer: - if self._stderr_buffer is None: - self._stderr_buffer = io.StringIO() - self._stdout_buffer = io.StringIO() - sys.stdout = self._stdout_buffer - sys.stderr = self._stderr_buffer - - def startTestRun(self): - """Called once before any tests are executed. - - See startTest for a method called before each test. - """ - - def stopTest(self, test): - """Called when the given test has been run""" - self._restoreStdout() - self._mirrorOutput = False - - def _restoreStdout(self): - if self.buffer: - if self._mirrorOutput: - output = sys.stdout.getvalue() - error = sys.stderr.getvalue() - if output: - if not output.endswith('\n'): - output += '\n' - self._original_stdout.write(STDOUT_LINE % output) - if error: - if not error.endswith('\n'): - error += '\n' - self._original_stderr.write(STDERR_LINE % error) - - sys.stdout = self._original_stdout - sys.stderr = self._original_stderr - self._stdout_buffer.seek(0) - self._stdout_buffer.truncate() - self._stderr_buffer.seek(0) - self._stderr_buffer.truncate() - - def stopTestRun(self): - """Called once after all tests are executed. - - See stopTest for a method called after each test. - """ - - @failfast - def addError(self, test, err): - """Called when an error has occurred. 'err' is a tuple of values as - returned by sys.exc_info(). - """ - self.errors.append((test, self._exc_info_to_string(err, test))) - self._mirrorOutput = True - - @failfast - def addFailure(self, test, err): - """Called when an error has occurred. 'err' is a tuple of values as - returned by sys.exc_info().""" - self.failures.append((test, self._exc_info_to_string(err, test))) - self._mirrorOutput = True - - def addSubTest(self, test, subtest, err): - """Called at the end of a subtest. - 'err' is None if the subtest ended successfully, otherwise it's a - tuple of values as returned by sys.exc_info(). - """ - # By default, we don't do anything with successful subtests, but - # more sophisticated test results might want to record them. - if err is not None: - if getattr(self, 'failfast', False): - self.stop() - if issubclass(err[0], test.failureException): - errors = self.failures - else: - errors = self.errors - errors.append((subtest, self._exc_info_to_string(err, test))) - self._mirrorOutput = True - - def addSuccess(self, test): - "Called when a test has completed successfully" - pass - - def addSkip(self, test, reason): - """Called when a test is skipped.""" - self.skipped.append((test, reason)) - - def addExpectedFailure(self, test, err): - """Called when an expected failure/error occurred.""" - self.expectedFailures.append( - (test, self._exc_info_to_string(err, test))) - - @failfast - def addUnexpectedSuccess(self, test): - """Called when a test was expected to fail, but succeed.""" - self.unexpectedSuccesses.append(test) - - def addDuration(self, test, elapsed): - """Called when a test finished to run, regardless of its outcome. - *test* is the test case corresponding to the test method. - *elapsed* is the time represented in seconds, and it includes the - execution of cleanup functions. - """ - # support for a TextTestRunner using an old TestResult class - if hasattr(self, "collectedDurations"): - # Pass test repr and not the test object itself to avoid resources leak - self.collectedDurations.append((str(test), elapsed)) - - def wasSuccessful(self): - """Tells whether or not this result was a success.""" - # The hasattr check is for test_result's OldResult test. That - # way this method works on objects that lack the attribute. - # (where would such result instances come from? old stored pickles?) - return ((len(self.failures) == len(self.errors) == 0) and - (not hasattr(self, 'unexpectedSuccesses') or - len(self.unexpectedSuccesses) == 0)) - - def stop(self): - """Indicates that the tests should be aborted.""" - self.shouldStop = True - - def _exc_info_to_string(self, err, test): - """Converts a sys.exc_info()-style tuple of values into a string.""" - exctype, value, tb = err - tb = self._clean_tracebacks(exctype, value, tb, test) - tb_e = traceback.TracebackException( - exctype, value, tb, - capture_locals=self.tb_locals, compact=True) - from _colorize import can_colorize - - colorize = hasattr(self, "stream") and can_colorize(file=self.stream) - msgLines = list(tb_e.format(colorize=colorize)) - - if self.buffer: - output = sys.stdout.getvalue() - error = sys.stderr.getvalue() - if output: - if not output.endswith('\n'): - output += '\n' - msgLines.append(STDOUT_LINE % output) - if error: - if not error.endswith('\n'): - error += '\n' - msgLines.append(STDERR_LINE % error) - return ''.join(msgLines) - - def _clean_tracebacks(self, exctype, value, tb, test): - ret = None - first = True - excs = [(exctype, value, tb)] - seen = {id(value)} # Detect loops in chained exceptions. - while excs: - (exctype, value, tb) = excs.pop() - # Skip test runner traceback levels - while tb and self._is_relevant_tb_level(tb): - tb = tb.tb_next - - # Skip assert*() traceback levels - if exctype is test.failureException: - self._remove_unittest_tb_frames(tb) - - if first: - ret = tb - first = False - else: - value.__traceback__ = tb - - if value is not None: - for c in (value.__cause__, value.__context__): - if c is not None and id(c) not in seen: - excs.append((type(c), c, c.__traceback__)) - seen.add(id(c)) - return ret - - def _is_relevant_tb_level(self, tb): - return '__unittest' in tb.tb_frame.f_globals - - def _remove_unittest_tb_frames(self, tb): - '''Truncates usercode tb at the first unittest frame. - - If the first frame of the traceback is in user code, - the prefix up to the first unittest frame is returned. - If the first frame is already in the unittest module, - the traceback is not modified. - ''' - prev = None - while tb and not self._is_relevant_tb_level(tb): - prev = tb - tb = tb.tb_next - if prev is not None: - prev.tb_next = None - - def __repr__(self): - return ("<%s run=%i errors=%i failures=%i>" % - (util.strclass(self.__class__), self.testsRun, len(self.errors), - len(self.failures))) diff --git a/Python314_4_x86_Template/Lib/unittest/runner.py b/Python314_4_x86_Template/Lib/unittest/runner.py deleted file mode 100644 index 5f22d91ae..000000000 --- a/Python314_4_x86_Template/Lib/unittest/runner.py +++ /dev/null @@ -1,313 +0,0 @@ -"""Running tests""" - -import sys -import time -import warnings - -from _colorize import get_theme - -from . import result -from .case import _SubTest -from .signals import registerResult - -__unittest = True - - -class _WritelnDecorator(object): - """Used to decorate file-like objects with a handy 'writeln' method""" - def __init__(self, stream): - self.stream = stream - - def __getattr__(self, attr): - if attr in ('stream', '__getstate__'): - raise AttributeError(attr) - return getattr(self.stream, attr) - - def writeln(self, arg=None): - if arg: - self.write(arg) - self.write('\n') # text-mode streams translate to \r\n if needed - - -class TextTestResult(result.TestResult): - """A test result class that can print formatted text results to a stream. - - Used by TextTestRunner. - """ - separator1 = '=' * 70 - separator2 = '-' * 70 - - def __init__(self, stream, descriptions, verbosity, *, durations=None): - """Construct a TextTestResult. Subclasses should accept **kwargs - to ensure compatibility as the interface changes.""" - super(TextTestResult, self).__init__(stream, descriptions, verbosity) - self.stream = stream - self.showAll = verbosity > 1 - self.dots = verbosity == 1 - self.descriptions = descriptions - self._theme = get_theme(tty_file=stream).unittest - self._newline = True - self.durations = durations - - def getDescription(self, test): - doc_first_line = test.shortDescription() - if self.descriptions and doc_first_line: - return '\n'.join((str(test), doc_first_line)) - else: - return str(test) - - def startTest(self, test): - super(TextTestResult, self).startTest(test) - if self.showAll: - self.stream.write(self.getDescription(test)) - self.stream.write(" ... ") - self.stream.flush() - self._newline = False - - def _write_status(self, test, status): - is_subtest = isinstance(test, _SubTest) - if is_subtest or self._newline: - if not self._newline: - self.stream.writeln() - if is_subtest: - self.stream.write(" ") - self.stream.write(self.getDescription(test)) - self.stream.write(" ... ") - self.stream.writeln(status) - self.stream.flush() - self._newline = True - - def addSubTest(self, test, subtest, err): - if err is not None: - t = self._theme - if self.showAll: - if issubclass(err[0], subtest.failureException): - self._write_status(subtest, f"{t.fail}FAIL{t.reset}") - else: - self._write_status(subtest, f"{t.fail}ERROR{t.reset}") - elif self.dots: - if issubclass(err[0], subtest.failureException): - self.stream.write(f"{t.fail}F{t.reset}") - else: - self.stream.write(f"{t.fail}E{t.reset}") - self.stream.flush() - super(TextTestResult, self).addSubTest(test, subtest, err) - - def addSuccess(self, test): - super(TextTestResult, self).addSuccess(test) - t = self._theme - if self.showAll: - self._write_status(test, f"{t.passed}ok{t.reset}") - elif self.dots: - self.stream.write(f"{t.passed}.{t.reset}") - self.stream.flush() - - def addError(self, test, err): - super(TextTestResult, self).addError(test, err) - t = self._theme - if self.showAll: - self._write_status(test, f"{t.fail}ERROR{t.reset}") - elif self.dots: - self.stream.write(f"{t.fail}E{t.reset}") - self.stream.flush() - - def addFailure(self, test, err): - super(TextTestResult, self).addFailure(test, err) - t = self._theme - if self.showAll: - self._write_status(test, f"{t.fail}FAIL{t.reset}") - elif self.dots: - self.stream.write(f"{t.fail}F{t.reset}") - self.stream.flush() - - def addSkip(self, test, reason): - super(TextTestResult, self).addSkip(test, reason) - t = self._theme - if self.showAll: - self._write_status(test, f"{t.warn}skipped{t.reset} {reason!r}") - elif self.dots: - self.stream.write(f"{t.warn}s{t.reset}") - self.stream.flush() - - def addExpectedFailure(self, test, err): - super(TextTestResult, self).addExpectedFailure(test, err) - t = self._theme - if self.showAll: - self.stream.writeln(f"{t.warn}expected failure{t.reset}") - self.stream.flush() - elif self.dots: - self.stream.write(f"{t.warn}x{t.reset}") - self.stream.flush() - - def addUnexpectedSuccess(self, test): - super(TextTestResult, self).addUnexpectedSuccess(test) - t = self._theme - if self.showAll: - self.stream.writeln(f"{t.fail}unexpected success{t.reset}") - self.stream.flush() - elif self.dots: - self.stream.write(f"{t.fail}u{t.reset}") - self.stream.flush() - - def printErrors(self): - t = self._theme - if self.dots or self.showAll: - self.stream.writeln() - self.stream.flush() - self.printErrorList(f"{t.fail}ERROR{t.reset}", self.errors) - self.printErrorList(f"{t.fail}FAIL{t.reset}", self.failures) - unexpectedSuccesses = getattr(self, "unexpectedSuccesses", ()) - if unexpectedSuccesses: - self.stream.writeln(self.separator1) - for test in unexpectedSuccesses: - self.stream.writeln( - f"{t.fail}UNEXPECTED SUCCESS{t.fail_info}: " - f"{self.getDescription(test)}{t.reset}" - ) - self.stream.flush() - - def printErrorList(self, flavour, errors): - t = self._theme - for test, err in errors: - self.stream.writeln(self.separator1) - self.stream.writeln( - f"{flavour}{t.fail_info}: {self.getDescription(test)}{t.reset}" - ) - self.stream.writeln(self.separator2) - self.stream.writeln("%s" % err) - self.stream.flush() - - -class TextTestRunner(object): - """A test runner class that displays results in textual form. - - It prints out the names of tests as they are run, errors as they - occur, and a summary of the results at the end of the test run. - """ - resultclass = TextTestResult - - def __init__(self, stream=None, descriptions=True, verbosity=1, - failfast=False, buffer=False, resultclass=None, warnings=None, - *, tb_locals=False, durations=None): - """Construct a TextTestRunner. - - Subclasses should accept **kwargs to ensure compatibility as the - interface changes. - """ - if stream is None: - stream = sys.stderr - self.stream = _WritelnDecorator(stream) - self.descriptions = descriptions - self.verbosity = verbosity - self.failfast = failfast - self.buffer = buffer - self.tb_locals = tb_locals - self.durations = durations - self.warnings = warnings - if resultclass is not None: - self.resultclass = resultclass - - def _makeResult(self): - try: - return self.resultclass(self.stream, self.descriptions, - self.verbosity, durations=self.durations) - except TypeError: - # didn't accept the durations argument - return self.resultclass(self.stream, self.descriptions, - self.verbosity) - - def _printDurations(self, result): - if not result.collectedDurations: - return - ls = sorted(result.collectedDurations, key=lambda x: x[1], - reverse=True) - if self.durations > 0: - ls = ls[:self.durations] - self.stream.writeln("Slowest test durations") - if hasattr(result, 'separator2'): - self.stream.writeln(result.separator2) - hidden = False - for test, elapsed in ls: - if self.verbosity < 2 and elapsed < 0.001: - hidden = True - continue - self.stream.writeln("%-10s %s" % ("%.3fs" % elapsed, test)) - if hidden: - self.stream.writeln("\n(durations < 0.001s were hidden; " - "use -v to show these durations)") - else: - self.stream.writeln("") - - def run(self, test): - "Run the given test case or test suite." - result = self._makeResult() - registerResult(result) - result.failfast = self.failfast - result.buffer = self.buffer - result.tb_locals = self.tb_locals - with warnings.catch_warnings(): - if self.warnings: - # if self.warnings is set, use it to filter all the warnings - warnings.simplefilter(self.warnings) - start_time = time.perf_counter() - startTestRun = getattr(result, 'startTestRun', None) - if startTestRun is not None: - startTestRun() - try: - test(result) - finally: - stopTestRun = getattr(result, 'stopTestRun', None) - if stopTestRun is not None: - stopTestRun() - stop_time = time.perf_counter() - time_taken = stop_time - start_time - result.printErrors() - if self.durations is not None: - self._printDurations(result) - - if hasattr(result, 'separator2'): - self.stream.writeln(result.separator2) - - run = result.testsRun - self.stream.writeln("Ran %d test%s in %.3fs" % - (run, run != 1 and "s" or "", time_taken)) - self.stream.writeln() - - expected_fails = unexpected_successes = skipped = 0 - try: - results = map(len, (result.expectedFailures, - result.unexpectedSuccesses, - result.skipped)) - except AttributeError: - pass - else: - expected_fails, unexpected_successes, skipped = results - - infos = [] - t = get_theme(tty_file=self.stream).unittest - - if not result.wasSuccessful(): - self.stream.write(f"{t.fail_info}FAILED{t.reset}") - failed, errored = len(result.failures), len(result.errors) - if failed: - infos.append(f"{t.fail_info}failures={failed}{t.reset}") - if errored: - infos.append(f"{t.fail_info}errors={errored}{t.reset}") - elif run == 0 and not skipped: - self.stream.write(f"{t.warn}NO TESTS RAN{t.reset}") - else: - self.stream.write(f"{t.passed}OK{t.reset}") - if skipped: - infos.append(f"{t.warn}skipped={skipped}{t.reset}") - if expected_fails: - infos.append(f"{t.warn}expected failures={expected_fails}{t.reset}") - if unexpected_successes: - infos.append( - f"{t.fail}unexpected successes={unexpected_successes}{t.reset}" - ) - if infos: - self.stream.writeln(" (%s)" % (", ".join(infos),)) - else: - self.stream.write("\n") - self.stream.flush() - return result diff --git a/Python314_4_x86_Template/Lib/unittest/signals.py b/Python314_4_x86_Template/Lib/unittest/signals.py deleted file mode 100644 index e6a5fc524..000000000 --- a/Python314_4_x86_Template/Lib/unittest/signals.py +++ /dev/null @@ -1,71 +0,0 @@ -import signal -import weakref - -from functools import wraps - -__unittest = True - - -class _InterruptHandler(object): - def __init__(self, default_handler): - self.called = False - self.original_handler = default_handler - if isinstance(default_handler, int): - if default_handler == signal.SIG_DFL: - # Pretend it's signal.default_int_handler instead. - default_handler = signal.default_int_handler - elif default_handler == signal.SIG_IGN: - # Not quite the same thing as SIG_IGN, but the closest we - # can make it: do nothing. - def default_handler(unused_signum, unused_frame): - pass - else: - raise TypeError("expected SIGINT signal handler to be " - "signal.SIG_IGN, signal.SIG_DFL, or a " - "callable object") - self.default_handler = default_handler - - def __call__(self, signum, frame): - installed_handler = signal.getsignal(signal.SIGINT) - if installed_handler is not self: - # if we aren't the installed handler, then delegate immediately - # to the default handler - self.default_handler(signum, frame) - - if self.called: - self.default_handler(signum, frame) - self.called = True - for result in _results.keys(): - result.stop() - -_results = weakref.WeakKeyDictionary() -def registerResult(result): - _results[result] = 1 - -def removeResult(result): - return bool(_results.pop(result, None)) - -_interrupt_handler = None -def installHandler(): - global _interrupt_handler - if _interrupt_handler is None: - default_handler = signal.getsignal(signal.SIGINT) - _interrupt_handler = _InterruptHandler(default_handler) - signal.signal(signal.SIGINT, _interrupt_handler) - - -def removeHandler(method=None): - if method is not None: - @wraps(method) - def inner(*args, **kwargs): - initial = signal.getsignal(signal.SIGINT) - removeHandler() - try: - return method(*args, **kwargs) - finally: - signal.signal(signal.SIGINT, initial) - return inner - - global _interrupt_handler - if _interrupt_handler is not None: - signal.signal(signal.SIGINT, _interrupt_handler.original_handler) diff --git a/Python314_4_x86_Template/Lib/unittest/suite.py b/Python314_4_x86_Template/Lib/unittest/suite.py deleted file mode 100644 index 6f45b6fe5..000000000 --- a/Python314_4_x86_Template/Lib/unittest/suite.py +++ /dev/null @@ -1,379 +0,0 @@ -"""TestSuite""" - -import sys - -from . import case -from . import util - -__unittest = True - - -def _call_if_exists(parent, attr): - func = getattr(parent, attr, lambda: None) - func() - - -class BaseTestSuite(object): - """A simple test suite that doesn't provide class or module shared fixtures. - """ - _cleanup = True - - def __init__(self, tests=()): - self._tests = [] - self._removed_tests = 0 - self.addTests(tests) - - def __repr__(self): - return "<%s tests=%s>" % (util.strclass(self.__class__), list(self)) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return NotImplemented - return list(self) == list(other) - - def __iter__(self): - return iter(self._tests) - - def countTestCases(self): - cases = self._removed_tests - for test in self: - if test: - cases += test.countTestCases() - return cases - - def addTest(self, test): - # sanity checks - if not callable(test): - raise TypeError("{} is not callable".format(repr(test))) - if isinstance(test, type) and issubclass(test, - (case.TestCase, TestSuite)): - raise TypeError("TestCases and TestSuites must be instantiated " - "before passing them to addTest()") - self._tests.append(test) - - def addTests(self, tests): - if isinstance(tests, str): - raise TypeError("tests must be an iterable of tests, not a string") - for test in tests: - self.addTest(test) - - def run(self, result): - for index, test in enumerate(self): - if result.shouldStop: - break - test(result) - if self._cleanup: - self._removeTestAtIndex(index) - return result - - def _removeTestAtIndex(self, index): - """Stop holding a reference to the TestCase at index.""" - try: - test = self._tests[index] - except TypeError: - # support for suite implementations that have overridden self._tests - pass - else: - # Some unittest tests add non TestCase/TestSuite objects to - # the suite. - if hasattr(test, 'countTestCases'): - self._removed_tests += test.countTestCases() - self._tests[index] = None - - def __call__(self, *args, **kwds): - return self.run(*args, **kwds) - - def debug(self): - """Run the tests without collecting errors in a TestResult""" - for test in self: - test.debug() - - -class TestSuite(BaseTestSuite): - """A test suite is a composite test consisting of a number of TestCases. - - For use, create an instance of TestSuite, then add test case instances. - When all tests have been added, the suite can be passed to a test - runner, such as TextTestRunner. It will run the individual test cases - in the order in which they were added, aggregating the results. When - subclassing, do not forget to call the base class constructor. - """ - - def run(self, result, debug=False): - topLevel = False - if getattr(result, '_testRunEntered', False) is False: - result._testRunEntered = topLevel = True - - for index, test in enumerate(self): - if result.shouldStop: - break - - if _isnotsuite(test): - self._tearDownPreviousClass(test, result) - self._handleModuleFixture(test, result) - self._handleClassSetUp(test, result) - result._previousTestClass = test.__class__ - - if (getattr(test.__class__, '_classSetupFailed', False) or - getattr(result, '_moduleSetUpFailed', False)): - continue - - if not debug: - test(result) - else: - test.debug() - - if self._cleanup: - self._removeTestAtIndex(index) - - if topLevel: - self._tearDownPreviousClass(None, result) - self._handleModuleTearDown(result) - result._testRunEntered = False - return result - - def debug(self): - """Run the tests without collecting errors in a TestResult""" - debug = _DebugResult() - self.run(debug, True) - - ################################ - - def _handleClassSetUp(self, test, result): - previousClass = getattr(result, '_previousTestClass', None) - currentClass = test.__class__ - if currentClass == previousClass: - return - if result._moduleSetUpFailed: - return - if getattr(currentClass, "__unittest_skip__", False): - return - - failed = False - try: - currentClass._classSetupFailed = False - except TypeError: - # test may actually be a function - # so its class will be a builtin-type - pass - - setUpClass = getattr(currentClass, 'setUpClass', None) - doClassCleanups = getattr(currentClass, 'doClassCleanups', None) - if setUpClass is not None: - _call_if_exists(result, '_setupStdout') - try: - try: - setUpClass() - except Exception as e: - if isinstance(result, _DebugResult): - raise - failed = True - try: - currentClass._classSetupFailed = True - except TypeError: - pass - className = util.strclass(currentClass) - self._createClassOrModuleLevelException(result, e, - 'setUpClass', - className) - if failed and doClassCleanups is not None: - doClassCleanups() - for exc_info in currentClass.tearDown_exceptions: - self._createClassOrModuleLevelException( - result, exc_info[1], 'setUpClass', className, - info=exc_info) - finally: - _call_if_exists(result, '_restoreStdout') - - def _get_previous_module(self, result): - previousModule = None - previousClass = getattr(result, '_previousTestClass', None) - if previousClass is not None: - previousModule = previousClass.__module__ - return previousModule - - - def _handleModuleFixture(self, test, result): - previousModule = self._get_previous_module(result) - currentModule = test.__class__.__module__ - if currentModule == previousModule: - return - - self._handleModuleTearDown(result) - - - result._moduleSetUpFailed = False - try: - module = sys.modules[currentModule] - except KeyError: - return - setUpModule = getattr(module, 'setUpModule', None) - if setUpModule is not None: - _call_if_exists(result, '_setupStdout') - try: - try: - setUpModule() - except Exception as e: - if isinstance(result, _DebugResult): - raise - result._moduleSetUpFailed = True - self._createClassOrModuleLevelException(result, e, - 'setUpModule', - currentModule) - if result._moduleSetUpFailed: - try: - case.doModuleCleanups() - except Exception as e: - self._createClassOrModuleLevelException(result, e, - 'setUpModule', - currentModule) - finally: - _call_if_exists(result, '_restoreStdout') - - def _createClassOrModuleLevelException(self, result, exc, method_name, - parent, info=None): - errorName = f'{method_name} ({parent})' - self._addClassOrModuleLevelException(result, exc, errorName, info) - - def _addClassOrModuleLevelException(self, result, exception, errorName, - info=None): - error = _ErrorHolder(errorName) - addSkip = getattr(result, 'addSkip', None) - if addSkip is not None and isinstance(exception, case.SkipTest): - addSkip(error, str(exception)) - else: - if not info: - result.addError(error, sys.exc_info()) - else: - result.addError(error, info) - - def _handleModuleTearDown(self, result): - previousModule = self._get_previous_module(result) - if previousModule is None: - return - if result._moduleSetUpFailed: - return - - try: - module = sys.modules[previousModule] - except KeyError: - return - - _call_if_exists(result, '_setupStdout') - try: - tearDownModule = getattr(module, 'tearDownModule', None) - if tearDownModule is not None: - try: - tearDownModule() - except Exception as e: - if isinstance(result, _DebugResult): - raise - self._createClassOrModuleLevelException(result, e, - 'tearDownModule', - previousModule) - try: - case.doModuleCleanups() - except Exception as e: - if isinstance(result, _DebugResult): - raise - self._createClassOrModuleLevelException(result, e, - 'tearDownModule', - previousModule) - finally: - _call_if_exists(result, '_restoreStdout') - - def _tearDownPreviousClass(self, test, result): - previousClass = getattr(result, '_previousTestClass', None) - currentClass = test.__class__ - if currentClass == previousClass or previousClass is None: - return - if getattr(previousClass, '_classSetupFailed', False): - return - if getattr(result, '_moduleSetUpFailed', False): - return - if getattr(previousClass, "__unittest_skip__", False): - return - - tearDownClass = getattr(previousClass, 'tearDownClass', None) - doClassCleanups = getattr(previousClass, 'doClassCleanups', None) - if tearDownClass is None and doClassCleanups is None: - return - - _call_if_exists(result, '_setupStdout') - try: - if tearDownClass is not None: - try: - tearDownClass() - except Exception as e: - if isinstance(result, _DebugResult): - raise - className = util.strclass(previousClass) - self._createClassOrModuleLevelException(result, e, - 'tearDownClass', - className) - if doClassCleanups is not None: - doClassCleanups() - for exc_info in previousClass.tearDown_exceptions: - if isinstance(result, _DebugResult): - raise exc_info[1] - className = util.strclass(previousClass) - self._createClassOrModuleLevelException(result, exc_info[1], - 'tearDownClass', - className, - info=exc_info) - finally: - _call_if_exists(result, '_restoreStdout') - - -class _ErrorHolder(object): - """ - Placeholder for a TestCase inside a result. As far as a TestResult - is concerned, this looks exactly like a unit test. Used to insert - arbitrary errors into a test suite run. - """ - # Inspired by the ErrorHolder from Twisted: - # http://twistedmatrix.com/trac/browser/trunk/twisted/trial/runner.py - - # attribute used by TestResult._exc_info_to_string - failureException = None - - def __init__(self, description): - self.description = description - - def id(self): - return self.description - - def shortDescription(self): - return None - - def __repr__(self): - return "<ErrorHolder description=%r>" % (self.description,) - - def __str__(self): - return self.id() - - def run(self, result): - # could call result.addError(...) - but this test-like object - # shouldn't be run anyway - pass - - def __call__(self, result): - return self.run(result) - - def countTestCases(self): - return 0 - -def _isnotsuite(test): - "A crude way to tell apart testcases and suites with duck-typing" - try: - iter(test) - except TypeError: - return True - return False - - -class _DebugResult(object): - "Used by the TestSuite to hold previous class when running in debug." - _previousTestClass = None - _moduleSetUpFailed = False - shouldStop = False diff --git a/Python314_4_x86_Template/Lib/unittest/util.py b/Python314_4_x86_Template/Lib/unittest/util.py deleted file mode 100644 index 050eaed0b..000000000 --- a/Python314_4_x86_Template/Lib/unittest/util.py +++ /dev/null @@ -1,170 +0,0 @@ -"""Various utility functions.""" - -from collections import namedtuple, Counter -from os.path import commonprefix - -__unittest = True - -_MAX_LENGTH = 80 -_PLACEHOLDER_LEN = 12 -_MIN_BEGIN_LEN = 5 -_MIN_END_LEN = 5 -_MIN_COMMON_LEN = 5 -_MIN_DIFF_LEN = _MAX_LENGTH - \ - (_MIN_BEGIN_LEN + _PLACEHOLDER_LEN + _MIN_COMMON_LEN + - _PLACEHOLDER_LEN + _MIN_END_LEN) -assert _MIN_DIFF_LEN >= 0 - -def _shorten(s, prefixlen, suffixlen): - skip = len(s) - prefixlen - suffixlen - if skip > _PLACEHOLDER_LEN: - s = '%s[%d chars]%s' % (s[:prefixlen], skip, s[len(s) - suffixlen:]) - return s - -def _common_shorten_repr(*args): - args = tuple(map(safe_repr, args)) - maxlen = max(map(len, args)) - if maxlen <= _MAX_LENGTH: - return args - - prefix = commonprefix(args) - prefixlen = len(prefix) - - common_len = _MAX_LENGTH - \ - (maxlen - prefixlen + _MIN_BEGIN_LEN + _PLACEHOLDER_LEN) - if common_len > _MIN_COMMON_LEN: - assert _MIN_BEGIN_LEN + _PLACEHOLDER_LEN + _MIN_COMMON_LEN + \ - (maxlen - prefixlen) < _MAX_LENGTH - prefix = _shorten(prefix, _MIN_BEGIN_LEN, common_len) - return tuple(prefix + s[prefixlen:] for s in args) - - prefix = _shorten(prefix, _MIN_BEGIN_LEN, _MIN_COMMON_LEN) - return tuple(prefix + _shorten(s[prefixlen:], _MIN_DIFF_LEN, _MIN_END_LEN) - for s in args) - -def safe_repr(obj, short=False): - try: - result = repr(obj) - except Exception: - result = object.__repr__(obj) - if not short or len(result) < _MAX_LENGTH: - return result - return result[:_MAX_LENGTH] + ' [truncated]...' - -def strclass(cls): - return "%s.%s" % (cls.__module__, cls.__qualname__) - -def sorted_list_difference(expected, actual): - """Finds elements in only one or the other of two, sorted input lists. - - Returns a two-element tuple of lists. The first list contains those - elements in the "expected" list but not in the "actual" list, and the - second contains those elements in the "actual" list but not in the - "expected" list. Duplicate elements in either input list are ignored. - """ - i = j = 0 - missing = [] - unexpected = [] - while True: - try: - e = expected[i] - a = actual[j] - if e < a: - missing.append(e) - i += 1 - while expected[i] == e: - i += 1 - elif e > a: - unexpected.append(a) - j += 1 - while actual[j] == a: - j += 1 - else: - i += 1 - try: - while expected[i] == e: - i += 1 - finally: - j += 1 - while actual[j] == a: - j += 1 - except IndexError: - missing.extend(expected[i:]) - unexpected.extend(actual[j:]) - break - return missing, unexpected - - -def unorderable_list_difference(expected, actual): - """Same behavior as sorted_list_difference but - for lists of unorderable items (like dicts). - - As it does a linear search per item (remove) it - has O(n*n) performance.""" - missing = [] - while expected: - item = expected.pop() - try: - actual.remove(item) - except ValueError: - missing.append(item) - - # anything left in actual is unexpected - return missing, actual - -def three_way_cmp(x, y): - """Return -1 if x < y, 0 if x == y and 1 if x > y""" - return (x > y) - (x < y) - -_Mismatch = namedtuple('Mismatch', 'actual expected value') - -def _count_diff_all_purpose(actual, expected): - 'Returns list of (cnt_act, cnt_exp, elem) triples where the counts differ' - # elements need not be hashable - s, t = list(actual), list(expected) - m, n = len(s), len(t) - NULL = object() - result = [] - for i, elem in enumerate(s): - if elem is NULL: - continue - cnt_s = cnt_t = 0 - for j in range(i, m): - if s[j] == elem: - cnt_s += 1 - s[j] = NULL - for j, other_elem in enumerate(t): - if other_elem == elem: - cnt_t += 1 - t[j] = NULL - if cnt_s != cnt_t: - diff = _Mismatch(cnt_s, cnt_t, elem) - result.append(diff) - - for i, elem in enumerate(t): - if elem is NULL: - continue - cnt_t = 0 - for j in range(i, n): - if t[j] == elem: - cnt_t += 1 - t[j] = NULL - diff = _Mismatch(0, cnt_t, elem) - result.append(diff) - return result - -def _count_diff_hashable(actual, expected): - 'Returns list of (cnt_act, cnt_exp, elem) triples where the counts differ' - # elements must be hashable - s, t = Counter(actual), Counter(expected) - result = [] - for elem, cnt_s in s.items(): - cnt_t = t.get(elem, 0) - if cnt_s != cnt_t: - diff = _Mismatch(cnt_s, cnt_t, elem) - result.append(diff) - for elem, cnt_t in t.items(): - if elem not in s: - diff = _Mismatch(0, cnt_t, elem) - result.append(diff) - return result diff --git a/Python314_4_x86_Template/Lib/urllib/__init__.py b/Python314_4_x86_Template/Lib/urllib/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/Python314_4_x86_Template/Lib/urllib/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/urllib/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 37df6d2f3fecf251d22b63ed0d79e8e0fba639ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmdPq<K<!if)3WJnIQTxh=2h`DC095kkP;p#GuTe$>_I|p@<2{{|u76mFH{~6Iz^F zR2-9-l3HYFX=xBso?nz5Q&5zjm6}{q9Fv@rUz(DXSe&YxnU`4tB#KKCb8=FPbPZzy zDoZl*^NbBm;!WZ!EX?9VQgaJ(5=&C!OL7Zhd@_?_N{e!GfK+@uNNaq&UP0w84x8Nk bl+v73yCPPg^&kfpgBYKf85tRin1L(++nqRd diff --git a/Python314_4_x86_Template/Lib/urllib/__pycache__/error.cpython-314.pyc b/Python314_4_x86_Template/Lib/urllib/__pycache__/error.cpython-314.pyc deleted file mode 100644 index 3062f17b7fe84794e7b3d50e3d7a2b9118f0daf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3924 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 diff --git a/Python314_4_x86_Template/Lib/urllib/__pycache__/parse.cpython-314.pyc b/Python314_4_x86_Template/Lib/urllib/__pycache__/parse.cpython-314.pyc deleted file mode 100644 index 99b174ecb9c841ad66d5bf38e32b2a9b50068478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53665 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 diff --git a/Python314_4_x86_Template/Lib/urllib/__pycache__/request.cpython-314.pyc b/Python314_4_x86_Template/Lib/urllib/__pycache__/request.cpython-314.pyc deleted file mode 100644 index 99cc394cd0561038b86a5a3c6e8e8c349bdb02fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91331 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 D?^{9T diff --git a/Python314_4_x86_Template/Lib/urllib/__pycache__/response.cpython-314.pyc b/Python314_4_x86_Template/Lib/urllib/__pycache__/response.cpython-314.pyc deleted file mode 100644 index 32e55b3e7b697561bbf28cd84e68528f1bbaba98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4770 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 diff --git a/Python314_4_x86_Template/Lib/urllib/error.py b/Python314_4_x86_Template/Lib/urllib/error.py deleted file mode 100644 index a9cd1ecad..000000000 --- a/Python314_4_x86_Template/Lib/urllib/error.py +++ /dev/null @@ -1,74 +0,0 @@ -"""Exception classes raised by urllib. - -The base exception class is URLError, which inherits from OSError. It -doesn't define any behavior of its own, but is the base class for all -exceptions defined in this package. - -HTTPError is an exception class that is also a valid HTTP response -instance. It behaves this way because HTTP protocol errors are valid -responses, with a status code, headers, and a body. In some contexts, -an application may want to handle an exception like a regular -response. -""" -import io -import urllib.response - -__all__ = ['URLError', 'HTTPError', 'ContentTooShortError'] - - -class URLError(OSError): - # URLError is a sub-type of OSError, but it doesn't share any of - # the implementation. need to override __init__ and __str__. - # It sets self.args for compatibility with other OSError - # subclasses, but args doesn't have the typical format with errno in - # slot 0 and strerror in slot 1. This may be better than nothing. - def __init__(self, reason, filename=None): - self.args = reason, - self.reason = reason - if filename is not None: - self.filename = filename - - def __str__(self): - return '<urlopen error %s>' % self.reason - - -class HTTPError(URLError, urllib.response.addinfourl): - """Raised when HTTP error occurs, but also acts like non-error return""" - __super_init = urllib.response.addinfourl.__init__ - - def __init__(self, url, code, msg, hdrs, fp): - self.code = code - self.msg = msg - self.hdrs = hdrs - self.fp = fp - self.filename = url - if fp is None: - fp = io.BytesIO() - self.__super_init(fp, hdrs, url, code) - - def __str__(self): - return 'HTTP Error %s: %s' % (self.code, self.msg) - - def __repr__(self): - return '<HTTPError %s: %r>' % (self.code, self.msg) - - # since URLError specifies a .reason attribute, HTTPError should also - # provide this attribute. See issue13211 for discussion. - @property - def reason(self): - return self.msg - - @property - def headers(self): - return self.hdrs - - @headers.setter - def headers(self, headers): - self.hdrs = headers - - -class ContentTooShortError(URLError): - """Exception raised when downloaded size does not match content-length.""" - def __init__(self, message, content): - URLError.__init__(self, message) - self.content = content diff --git a/Python314_4_x86_Template/Lib/urllib/parse.py b/Python314_4_x86_Template/Lib/urllib/parse.py deleted file mode 100644 index a651e815d..000000000 --- a/Python314_4_x86_Template/Lib/urllib/parse.py +++ /dev/null @@ -1,1289 +0,0 @@ -"""Parse (absolute and relative) URLs. - -urllib.parse module is based upon the following RFC specifications. - -RFC 3986 (STD66): "Uniform Resource Identifiers" by T. Berners-Lee, R. Fielding -and L. Masinter, January 2005. - -RFC 2732 : "Format for Literal IPv6 Addresses in URL's by R.Hinden, B.Carpenter -and L.Masinter, December 1999. - -RFC 2396: "Uniform Resource Identifiers (URI)": Generic Syntax by T. -Berners-Lee, R. Fielding, and L. Masinter, August 1998. - -RFC 2368: "The mailto URL scheme", by P.Hoffman , L Masinter, J. Zawinski, July 1998. - -RFC 1808: "Relative Uniform Resource Locators", by R. Fielding, UC Irvine, June -1995. - -RFC 1738: "Uniform Resource Locators (URL)" by T. Berners-Lee, L. Masinter, M. -McCahill, December 1994 - -RFC 3986 is considered the current standard and any future changes to -urllib.parse module should conform with it. The urllib.parse module is -currently not entirely compliant with this RFC due to defacto -scenarios for parsing, and for backward compatibility purposes, some -parsing quirks from older RFCs are retained. The testcases in -test_urlparse.py provides a good indicator of parsing behavior. - -The WHATWG URL Parser spec should also be considered. We are not compliant with -it either due to existing user code API behavior expectations (Hyrum's Law). -It serves as a useful guide when making changes. -""" - -from collections import namedtuple -import functools -import math -import re -import types -import warnings -import ipaddress - -__all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", - "urlsplit", "urlunsplit", "urlencode", "parse_qs", - "parse_qsl", "quote", "quote_plus", "quote_from_bytes", - "unquote", "unquote_plus", "unquote_to_bytes", - "DefragResult", "ParseResult", "SplitResult", - "DefragResultBytes", "ParseResultBytes", "SplitResultBytes"] - -# A classification of schemes. -# The empty string classifies URLs with no scheme specified, -# being the default value returned by “urlsplit” and “urlparse”. - -uses_relative = ['', 'ftp', 'http', 'gopher', 'nntp', 'imap', - 'wais', 'file', 'https', 'shttp', 'mms', - 'prospero', 'rtsp', 'rtsps', 'rtspu', 'sftp', - 'svn', 'svn+ssh', 'ws', 'wss'] - -uses_netloc = ['', 'ftp', 'http', 'gopher', 'nntp', 'telnet', - 'imap', 'wais', 'file', 'mms', 'https', 'shttp', - 'snews', 'prospero', 'rtsp', 'rtsps', 'rtspu', 'rsync', - 'svn', 'svn+ssh', 'sftp', 'nfs', 'git', 'git+ssh', - 'ws', 'wss', 'itms-services'] - -uses_params = ['', 'ftp', 'hdl', 'prospero', 'http', 'imap', - 'https', 'shttp', 'rtsp', 'rtsps', 'rtspu', 'sip', - 'sips', 'mms', 'sftp', 'tel'] - -# These are not actually used anymore, but should stay for backwards -# compatibility. (They are undocumented, but have a public-looking name.) - -non_hierarchical = ['gopher', 'hdl', 'mailto', 'news', - 'telnet', 'wais', 'imap', 'snews', 'sip', 'sips'] - -uses_query = ['', 'http', 'wais', 'imap', 'https', 'shttp', 'mms', - 'gopher', 'rtsp', 'rtsps', 'rtspu', 'sip', 'sips'] - -uses_fragment = ['', 'ftp', 'hdl', 'http', 'gopher', 'news', - 'nntp', 'wais', 'https', 'shttp', 'snews', - 'file', 'prospero'] - -# Characters valid in scheme names -scheme_chars = ('abcdefghijklmnopqrstuvwxyz' - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - '0123456789' - '+-.') - -# Leading and trailing C0 control and space to be stripped per WHATWG spec. -# == "".join([chr(i) for i in range(0, 0x20 + 1)]) -_WHATWG_C0_CONTROL_OR_SPACE = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ' - -# Unsafe bytes to be removed per WHATWG spec -_UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] - -def clear_cache(): - """Clear internal performance caches. Undocumented; some tests want it.""" - urlsplit.cache_clear() - _byte_quoter_factory.cache_clear() - -# Helpers for bytes handling -# For 3.2, we deliberately require applications that -# handle improperly quoted URLs to do their own -# decoding and encoding. If valid use cases are -# presented, we may relax this by using latin-1 -# decoding internally for 3.3 -_implicit_encoding = 'ascii' -_implicit_errors = 'strict' - -def _noop(obj): - return obj - -def _encode_result(obj, encoding=_implicit_encoding, - errors=_implicit_errors): - return obj.encode(encoding, errors) - -def _decode_args(args, encoding=_implicit_encoding, - errors=_implicit_errors): - return tuple(x.decode(encoding, errors) if x else '' for x in args) - -def _coerce_args(*args): - # Invokes decode if necessary to create str args - # and returns the coerced inputs along with - # an appropriate result coercion function - # - noop for str inputs - # - encoding function otherwise - str_input = isinstance(args[0], str) - for arg in args[1:]: - # We special-case the empty string to support the - # "scheme=''" default argument to some functions - if arg and isinstance(arg, str) != str_input: - raise TypeError("Cannot mix str and non-str arguments") - if str_input: - return args + (_noop,) - return _decode_args(args) + (_encode_result,) - -# Result objects are more helpful than simple tuples -class _ResultMixinStr(object): - """Standard approach to encoding parsed results from str to bytes""" - __slots__ = () - - def encode(self, encoding='ascii', errors='strict'): - return self._encoded_counterpart(*(x.encode(encoding, errors) for x in self)) - - -class _ResultMixinBytes(object): - """Standard approach to decoding parsed results from bytes to str""" - __slots__ = () - - def decode(self, encoding='ascii', errors='strict'): - return self._decoded_counterpart(*(x.decode(encoding, errors) for x in self)) - - -class _NetlocResultMixinBase(object): - """Shared methods for the parsed result objects containing a netloc element""" - __slots__ = () - - @property - def username(self): - return self._userinfo[0] - - @property - def password(self): - return self._userinfo[1] - - @property - def hostname(self): - hostname = self._hostinfo[0] - if not hostname: - return None - # Scoped IPv6 address may have zone info, which must not be lowercased - # like http://[fe80::822a:a8ff:fe49:470c%tESt]:1234/keys - separator = '%' if isinstance(hostname, str) else b'%' - hostname, percent, zone = hostname.partition(separator) - return hostname.lower() + percent + zone - - @property - def port(self): - port = self._hostinfo[1] - if port is not None: - if port.isdigit() and port.isascii(): - port = int(port) - else: - raise ValueError(f"Port could not be cast to integer value as {port!r}") - if not (0 <= port <= 65535): - raise ValueError("Port out of range 0-65535") - return port - - __class_getitem__ = classmethod(types.GenericAlias) - - -class _NetlocResultMixinStr(_NetlocResultMixinBase, _ResultMixinStr): - __slots__ = () - - @property - def _userinfo(self): - netloc = self.netloc - userinfo, have_info, hostinfo = netloc.rpartition('@') - if have_info: - username, have_password, password = userinfo.partition(':') - if not have_password: - password = None - else: - username = password = None - return username, password - - @property - def _hostinfo(self): - netloc = self.netloc - _, _, hostinfo = netloc.rpartition('@') - _, have_open_br, bracketed = hostinfo.partition('[') - if have_open_br: - hostname, _, port = bracketed.partition(']') - _, _, port = port.partition(':') - else: - hostname, _, port = hostinfo.partition(':') - if not port: - port = None - return hostname, port - - -class _NetlocResultMixinBytes(_NetlocResultMixinBase, _ResultMixinBytes): - __slots__ = () - - @property - def _userinfo(self): - netloc = self.netloc - userinfo, have_info, hostinfo = netloc.rpartition(b'@') - if have_info: - username, have_password, password = userinfo.partition(b':') - if not have_password: - password = None - else: - username = password = None - return username, password - - @property - def _hostinfo(self): - netloc = self.netloc - _, _, hostinfo = netloc.rpartition(b'@') - _, have_open_br, bracketed = hostinfo.partition(b'[') - if have_open_br: - hostname, _, port = bracketed.partition(b']') - _, _, port = port.partition(b':') - else: - hostname, _, port = hostinfo.partition(b':') - if not port: - port = None - return hostname, port - - -_DefragResultBase = namedtuple('_DefragResultBase', 'url fragment') -_SplitResultBase = namedtuple( - '_SplitResultBase', 'scheme netloc path query fragment') -_ParseResultBase = namedtuple( - '_ParseResultBase', 'scheme netloc path params query fragment') - -_DefragResultBase.__doc__ = """ -DefragResult(url, fragment) - -A 2-tuple that contains the url without fragment identifier and the fragment -identifier as a separate argument. -""" - -_DefragResultBase.url.__doc__ = """The URL with no fragment identifier.""" - -_DefragResultBase.fragment.__doc__ = """ -Fragment identifier separated from URL, that allows indirect identification of a -secondary resource by reference to a primary resource and additional identifying -information. -""" - -_SplitResultBase.__doc__ = """ -SplitResult(scheme, netloc, path, query, fragment) - -A 5-tuple that contains the different components of a URL. Similar to -ParseResult, but does not split params. -""" - -_SplitResultBase.scheme.__doc__ = """Specifies URL scheme for the request.""" - -_SplitResultBase.netloc.__doc__ = """ -Network location where the request is made to. -""" - -_SplitResultBase.path.__doc__ = """ -The hierarchical path, such as the path to a file to download. -""" - -_SplitResultBase.query.__doc__ = """ -The query component, that contains non-hierarchical data, that along with data -in path component, identifies a resource in the scope of URI's scheme and -network location. -""" - -_SplitResultBase.fragment.__doc__ = """ -Fragment identifier, that allows indirect identification of a secondary resource -by reference to a primary resource and additional identifying information. -""" - -_ParseResultBase.__doc__ = """ -ParseResult(scheme, netloc, path, params, query, fragment) - -A 6-tuple that contains components of a parsed URL. -""" - -_ParseResultBase.scheme.__doc__ = _SplitResultBase.scheme.__doc__ -_ParseResultBase.netloc.__doc__ = _SplitResultBase.netloc.__doc__ -_ParseResultBase.path.__doc__ = _SplitResultBase.path.__doc__ -_ParseResultBase.params.__doc__ = """ -Parameters for last path element used to dereference the URI in order to provide -access to perform some operation on the resource. -""" - -_ParseResultBase.query.__doc__ = _SplitResultBase.query.__doc__ -_ParseResultBase.fragment.__doc__ = _SplitResultBase.fragment.__doc__ - - -# For backwards compatibility, alias _NetlocResultMixinStr -# ResultBase is no longer part of the documented API, but it is -# retained since deprecating it isn't worth the hassle -ResultBase = _NetlocResultMixinStr - -# Structured result objects for string data -class DefragResult(_DefragResultBase, _ResultMixinStr): - __slots__ = () - def geturl(self): - if self.fragment: - return self.url + '#' + self.fragment - else: - return self.url - -class SplitResult(_SplitResultBase, _NetlocResultMixinStr): - __slots__ = () - def geturl(self): - return urlunsplit(self) - -class ParseResult(_ParseResultBase, _NetlocResultMixinStr): - __slots__ = () - def geturl(self): - return urlunparse(self) - -# Structured result objects for bytes data -class DefragResultBytes(_DefragResultBase, _ResultMixinBytes): - __slots__ = () - def geturl(self): - if self.fragment: - return self.url + b'#' + self.fragment - else: - return self.url - -class SplitResultBytes(_SplitResultBase, _NetlocResultMixinBytes): - __slots__ = () - def geturl(self): - return urlunsplit(self) - -class ParseResultBytes(_ParseResultBase, _NetlocResultMixinBytes): - __slots__ = () - def geturl(self): - return urlunparse(self) - -# Set up the encode/decode result pairs -def _fix_result_transcoding(): - _result_pairs = ( - (DefragResult, DefragResultBytes), - (SplitResult, SplitResultBytes), - (ParseResult, ParseResultBytes), - ) - for _decoded, _encoded in _result_pairs: - _decoded._encoded_counterpart = _encoded - _encoded._decoded_counterpart = _decoded - -_fix_result_transcoding() -del _fix_result_transcoding - -def urlparse(url, scheme='', allow_fragments=True): - """Parse a URL into 6 components: - <scheme>://<netloc>/<path>;<params>?<query>#<fragment> - - The result is a named 6-tuple with fields corresponding to the - above. It is either a ParseResult or ParseResultBytes object, - depending on the type of the url parameter. - - The username, password, hostname, and port sub-components of netloc - can also be accessed as attributes of the returned object. - - The scheme argument provides the default value of the scheme - component when no scheme is found in url. - - If allow_fragments is False, no attempt is made to separate the - fragment component from the previous component, which can be either - path or query. - - Note that % escapes are not expanded. - - urlsplit() should generally be used instead of urlparse(). - """ - url, scheme, _coerce_result = _coerce_args(url, scheme) - scheme, netloc, url, params, query, fragment = _urlparse(url, scheme, allow_fragments) - result = ParseResult(scheme or '', netloc or '', url, params or '', query or '', fragment or '') - return _coerce_result(result) - -def _urlparse(url, scheme=None, allow_fragments=True): - scheme, netloc, url, query, fragment = _urlsplit(url, scheme, allow_fragments) - if (scheme or '') in uses_params and ';' in url: - url, params = _splitparams(url, allow_none=True) - else: - params = None - return (scheme, netloc, url, params, query, fragment) - -def _splitparams(url, allow_none=False): - if '/' in url: - i = url.find(';', url.rfind('/')) - if i < 0: - return url, None if allow_none else '' - else: - i = url.find(';') - return url[:i], url[i+1:] - -def _splitnetloc(url, start=0): - delim = len(url) # position of end of domain part of url, default is end - for c in '/?#': # look for delimiters; the order is NOT important - wdelim = url.find(c, start) # find first of this delim - if wdelim >= 0: # if found - delim = min(delim, wdelim) # use earliest delim position - return url[start:delim], url[delim:] # return (domain, rest) - -def _checknetloc(netloc): - if not netloc or netloc.isascii(): - return - # looking for characters like \u2100 that expand to 'a/c' - # IDNA uses NFKC equivalence, so normalize for this check - import unicodedata - n = netloc.replace('@', '') # ignore characters already included - n = n.replace(':', '') # but not the surrounding text - n = n.replace('#', '') - n = n.replace('?', '') - netloc2 = unicodedata.normalize('NFKC', n) - if n == netloc2: - return - for c in '/?#@:': - if c in netloc2: - raise ValueError("netloc '" + netloc + "' contains invalid " + - "characters under NFKC normalization") - -def _check_bracketed_netloc(netloc): - # Note that this function must mirror the splitting - # done in NetlocResultMixins._hostinfo(). - hostname_and_port = netloc.rpartition('@')[2] - before_bracket, have_open_br, bracketed = hostname_and_port.partition('[') - if have_open_br: - # No data is allowed before a bracket. - if before_bracket: - raise ValueError("Invalid IPv6 URL") - hostname, _, port = bracketed.partition(']') - # No data is allowed after the bracket but before the port delimiter. - if port and not port.startswith(":"): - raise ValueError("Invalid IPv6 URL") - else: - hostname, _, port = hostname_and_port.partition(':') - _check_bracketed_host(hostname) - -# Valid bracketed hosts are defined in -# https://www.rfc-editor.org/rfc/rfc3986#page-49 and https://url.spec.whatwg.org/ -def _check_bracketed_host(hostname): - if hostname.startswith('v'): - if not re.match(r"\Av[a-fA-F0-9]+\..+\z", hostname): - raise ValueError(f"IPvFuture address is invalid") - else: - ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4 - if isinstance(ip, ipaddress.IPv4Address): - raise ValueError(f"An IPv4 address cannot be in brackets") - -# typed=True avoids BytesWarnings being emitted during cache key -# comparison since this API supports both bytes and str input. -@functools.lru_cache(typed=True) -def urlsplit(url, scheme='', allow_fragments=True): - """Parse a URL into 5 components: - <scheme>://<netloc>/<path>?<query>#<fragment> - - The result is a named 5-tuple with fields corresponding to the - above. It is either a SplitResult or SplitResultBytes object, - depending on the type of the url parameter. - - The username, password, hostname, and port sub-components of netloc - can also be accessed as attributes of the returned object. - - The scheme argument provides the default value of the scheme - component when no scheme is found in url. - - If allow_fragments is False, no attempt is made to separate the - fragment component from the previous component, which can be either - path or query. - - Note that % escapes are not expanded. - """ - - url, scheme, _coerce_result = _coerce_args(url, scheme) - scheme, netloc, url, query, fragment = _urlsplit(url, scheme, allow_fragments) - v = SplitResult(scheme or '', netloc or '', url, query or '', fragment or '') - return _coerce_result(v) - -def _urlsplit(url, scheme=None, allow_fragments=True): - # Only lstrip url as some applications rely on preserving trailing space. - # (https://url.spec.whatwg.org/#concept-basic-url-parser would strip both) - url = url.lstrip(_WHATWG_C0_CONTROL_OR_SPACE) - for b in _UNSAFE_URL_BYTES_TO_REMOVE: - url = url.replace(b, "") - if scheme is not None: - scheme = scheme.strip(_WHATWG_C0_CONTROL_OR_SPACE) - for b in _UNSAFE_URL_BYTES_TO_REMOVE: - scheme = scheme.replace(b, "") - - allow_fragments = bool(allow_fragments) - netloc = query = fragment = None - i = url.find(':') - if i > 0 and url[0].isascii() and url[0].isalpha(): - for c in url[:i]: - if c not in scheme_chars: - break - else: - scheme, url = url[:i].lower(), url[i+1:] - if url[:2] == '//': - netloc, url = _splitnetloc(url, 2) - if (('[' in netloc and ']' not in netloc) or - (']' in netloc and '[' not in netloc)): - raise ValueError("Invalid IPv6 URL") - if '[' in netloc and ']' in netloc: - _check_bracketed_netloc(netloc) - if allow_fragments and '#' in url: - url, fragment = url.split('#', 1) - if '?' in url: - url, query = url.split('?', 1) - _checknetloc(netloc) - return (scheme, netloc, url, query, fragment) - -def urlunparse(components): - """Put a parsed URL back together again. This may result in a - slightly different, but equivalent URL, if the URL that was parsed - originally had redundant delimiters, e.g. a ? with an empty query - (the draft states that these are equivalent).""" - scheme, netloc, url, params, query, fragment, _coerce_result = ( - _coerce_args(*components)) - if not netloc: - if scheme and scheme in uses_netloc and (not url or url[:1] == '/'): - netloc = '' - else: - netloc = None - if params: - url = "%s;%s" % (url, params) - return _coerce_result(_urlunsplit(scheme or None, netloc, url, - query or None, fragment or None)) - -def urlunsplit(components): - """Combine the elements of a tuple as returned by urlsplit() into a - complete URL as a string. The data argument can be any five-item iterable. - This may result in a slightly different, but equivalent URL, if the URL that - was parsed originally had unnecessary delimiters (for example, a ? with an - empty query; the RFC states that these are equivalent).""" - scheme, netloc, url, query, fragment, _coerce_result = ( - _coerce_args(*components)) - if not netloc: - if scheme and scheme in uses_netloc and (not url or url[:1] == '/'): - netloc = '' - else: - netloc = None - return _coerce_result(_urlunsplit(scheme or None, netloc, url, - query or None, fragment or None)) - -def _urlunsplit(scheme, netloc, url, query, fragment): - if netloc is not None: - if url and url[:1] != '/': url = '/' + url - url = '//' + netloc + url - elif url[:2] == '//': - url = '//' + url - if scheme: - url = scheme + ':' + url - if query is not None: - url = url + '?' + query - if fragment is not None: - url = url + '#' + fragment - return url - -def urljoin(base, url, allow_fragments=True): - """Join a base URL and a possibly relative URL to form an absolute - interpretation of the latter.""" - if not base: - return url - if not url: - return base - - base, url, _coerce_result = _coerce_args(base, url) - bscheme, bnetloc, bpath, bquery, bfragment = \ - _urlsplit(base, None, allow_fragments) - scheme, netloc, path, query, fragment = \ - _urlsplit(url, None, allow_fragments) - - if scheme is None: - scheme = bscheme - if scheme != bscheme or (scheme and scheme not in uses_relative): - return _coerce_result(url) - if not scheme or scheme in uses_netloc: - if netloc: - return _coerce_result(_urlunsplit(scheme, netloc, path, - query, fragment)) - netloc = bnetloc - - if not path: - path = bpath - if query is None: - query = bquery - if fragment is None: - fragment = bfragment - return _coerce_result(_urlunsplit(scheme, netloc, path, - query, fragment)) - - base_parts = bpath.split('/') - if base_parts[-1] != '': - # the last item is not a directory, so will not be taken into account - # in resolving the relative path - del base_parts[-1] - - # for rfc3986, ignore all base path should the first character be root. - if path[:1] == '/': - segments = path.split('/') - else: - segments = base_parts + path.split('/') - # filter out elements that would cause redundant slashes on re-joining - # the resolved_path - segments[1:-1] = filter(None, segments[1:-1]) - - resolved_path = [] - - for seg in segments: - if seg == '..': - try: - resolved_path.pop() - except IndexError: - # ignore any .. segments that would otherwise cause an IndexError - # when popped from resolved_path if resolving for rfc3986 - pass - elif seg == '.': - continue - else: - resolved_path.append(seg) - - if segments[-1] in ('.', '..'): - # do some post-processing here. if the last segment was a relative dir, - # then we need to append the trailing '/' - resolved_path.append('') - - return _coerce_result(_urlunsplit(scheme, netloc, '/'.join( - resolved_path) or '/', query, fragment)) - - -def urldefrag(url): - """Removes any existing fragment from URL. - - Returns a tuple of the defragmented URL and the fragment. If - the URL contained no fragments, the second element is the - empty string. - """ - url, _coerce_result = _coerce_args(url) - if '#' in url: - s, n, p, q, frag = _urlsplit(url) - defrag = _urlunsplit(s, n, p, q, None) - else: - frag = '' - defrag = url - return _coerce_result(DefragResult(defrag, frag or '')) - -_hexdig = '0123456789ABCDEFabcdef' -_hextobyte = None - -def unquote_to_bytes(string): - """unquote_to_bytes('abc%20def') -> b'abc def'.""" - return bytes(_unquote_impl(string)) - -def _unquote_impl(string: bytes | bytearray | str) -> bytes | bytearray: - # Note: strings are encoded as UTF-8. This is only an issue if it contains - # unescaped non-ASCII characters, which URIs should not. - if not string: - # Is it a string-like object? - string.split - return b'' - if isinstance(string, str): - string = string.encode('utf-8') - bits = string.split(b'%') - if len(bits) == 1: - return string - res = bytearray(bits[0]) - append = res.extend - # Delay the initialization of the table to not waste memory - # if the function is never called - global _hextobyte - if _hextobyte is None: - _hextobyte = {(a + b).encode(): bytes.fromhex(a + b) - for a in _hexdig for b in _hexdig} - for item in bits[1:]: - try: - append(_hextobyte[item[:2]]) - append(item[2:]) - except KeyError: - append(b'%') - append(item) - return res - -_asciire = re.compile('([\x00-\x7f]+)') - -def _generate_unquoted_parts(string, encoding, errors): - previous_match_end = 0 - for ascii_match in _asciire.finditer(string): - start, end = ascii_match.span() - yield string[previous_match_end:start] # Non-ASCII - # The ascii_match[1] group == string[start:end]. - yield _unquote_impl(ascii_match[1]).decode(encoding, errors) - previous_match_end = end - yield string[previous_match_end:] # Non-ASCII tail - -def unquote(string, encoding='utf-8', errors='replace'): - """Replace %xx escapes by their single-character equivalent. The optional - encoding and errors parameters specify how to decode percent-encoded - sequences into Unicode characters, as accepted by the bytes.decode() - method. - By default, percent-encoded sequences are decoded with UTF-8, and invalid - sequences are replaced by a placeholder character. - - unquote('abc%20def') -> 'abc def'. - """ - if isinstance(string, bytes): - return _unquote_impl(string).decode(encoding, errors) - if '%' not in string: - # Is it a string-like object? - string.split - return string - if encoding is None: - encoding = 'utf-8' - if errors is None: - errors = 'replace' - return ''.join(_generate_unquoted_parts(string, encoding, errors)) - - -def parse_qs(qs, keep_blank_values=False, strict_parsing=False, - encoding='utf-8', errors='replace', max_num_fields=None, separator='&'): - """Parse a query given as a string argument. - - Arguments: - - qs: percent-encoded query string to be parsed - - keep_blank_values: flag indicating whether blank values in - percent-encoded queries should be treated as blank strings. - A true value indicates that blanks should be retained as - blank strings. The default false value indicates that - blank values are to be ignored and treated as if they were - not included. - - strict_parsing: flag indicating what to do with parsing errors. - If false (the default), errors are silently ignored. - If true, errors raise a ValueError exception. - - encoding and errors: specify how to decode percent-encoded sequences - into Unicode characters, as accepted by the bytes.decode() method. - - max_num_fields: int. If set, then throws a ValueError if there - are more than n fields read by parse_qsl(). - - separator: str. The symbol to use for separating the query arguments. - Defaults to &. - - Returns a dictionary. - """ - parsed_result = {} - pairs = parse_qsl(qs, keep_blank_values, strict_parsing, - encoding=encoding, errors=errors, - max_num_fields=max_num_fields, separator=separator, - _stacklevel=2) - for name, value in pairs: - if name in parsed_result: - parsed_result[name].append(value) - else: - parsed_result[name] = [value] - return parsed_result - - -def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, - encoding='utf-8', errors='replace', max_num_fields=None, separator='&', *, _stacklevel=1): - """Parse a query given as a string argument. - - Arguments: - - qs: percent-encoded query string to be parsed - - keep_blank_values: flag indicating whether blank values in - percent-encoded queries should be treated as blank strings. - A true value indicates that blanks should be retained as blank - strings. The default false value indicates that blank values - are to be ignored and treated as if they were not included. - - strict_parsing: flag indicating what to do with parsing errors. If - false (the default), errors are silently ignored. If true, - errors raise a ValueError exception. - - encoding and errors: specify how to decode percent-encoded sequences - into Unicode characters, as accepted by the bytes.decode() method. - - max_num_fields: int. If set, then throws a ValueError - if there are more than n fields read by parse_qsl(). - - separator: str. The symbol to use for separating the query arguments. - Defaults to &. - - Returns a list, as G-d intended. - """ - if not separator or not isinstance(separator, (str, bytes)): - raise ValueError("Separator must be of type string or bytes.") - if isinstance(qs, str): - if not isinstance(separator, str): - separator = str(separator, 'ascii') - eq = '=' - def _unquote(s): - return unquote_plus(s, encoding=encoding, errors=errors) - elif qs is None: - return [] - else: - try: - # Use memoryview() to reject integers and iterables, - # acceptable by the bytes constructor. - qs = bytes(memoryview(qs)) - except TypeError: - if not qs: - warnings.warn(f"Accepting {type(qs).__name__} objects with " - f"false value in urllib.parse.parse_qsl() is " - f"deprecated as of 3.14", - DeprecationWarning, stacklevel=_stacklevel + 1) - return [] - raise - if isinstance(separator, str): - separator = bytes(separator, 'ascii') - eq = b'=' - def _unquote(s): - return unquote_to_bytes(s.replace(b'+', b' ')) - - if not qs: - return [] - - # If max_num_fields is defined then check that the number of fields - # is less than max_num_fields. This prevents a memory exhaustion DOS - # attack via post bodies with many fields. - if max_num_fields is not None: - num_fields = 1 + qs.count(separator) - if max_num_fields < num_fields: - raise ValueError('Max number of fields exceeded') - - r = [] - for name_value in qs.split(separator): - if name_value or strict_parsing: - name, has_eq, value = name_value.partition(eq) - if not has_eq and strict_parsing: - raise ValueError("bad query field: %r" % (name_value,)) - if value or keep_blank_values: - name = _unquote(name) - value = _unquote(value) - r.append((name, value)) - return r - -def unquote_plus(string, encoding='utf-8', errors='replace'): - """Like unquote(), but also replace plus signs by spaces, as required for - unquoting HTML form values. - - unquote_plus('%7e/abc+def') -> '~/abc def' - """ - string = string.replace('+', ' ') - return unquote(string, encoding, errors) - -_ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - b'abcdefghijklmnopqrstuvwxyz' - b'0123456789' - b'_.-~') -_ALWAYS_SAFE_BYTES = bytes(_ALWAYS_SAFE) - - -class _Quoter(dict): - """A mapping from bytes numbers (in range(0,256)) to strings. - - String values are percent-encoded byte values, unless the key < 128, and - in either of the specified safe set, or the always safe set. - """ - # Keeps a cache internally, via __missing__, for efficiency (lookups - # of cached keys don't call Python code at all). - def __init__(self, safe): - """safe: bytes object.""" - self.safe = _ALWAYS_SAFE.union(safe) - - def __repr__(self): - return f"<Quoter {dict(self)!r}>" - - def __missing__(self, b): - # Handle a cache miss. Store quoted string in cache and return. - res = chr(b) if b in self.safe else '%{:02X}'.format(b) - self[b] = res - return res - -def quote(string, safe='/', encoding=None, errors=None): - """quote('abc def') -> 'abc%20def' - - Each part of a URL, e.g. the path info, the query, etc., has a - different set of reserved characters that must be quoted. The - quote function offers a cautious (not minimal) way to quote a - string for most of these parts. - - RFC 3986 Uniform Resource Identifier (URI): Generic Syntax lists - the following (un)reserved characters. - - unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - reserved = gen-delims / sub-delims - gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" - sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - / "*" / "+" / "," / ";" / "=" - - Each of the reserved characters is reserved in some component of a URL, - but not necessarily in all of them. - - The quote function %-escapes all characters that are neither in the - unreserved chars ("always safe") nor the additional chars set via the - safe arg. - - The default for the safe arg is '/'. The character is reserved, but in - typical usage the quote function is being called on a path where the - existing slash characters are to be preserved. - - Python 3.7 updates from using RFC 2396 to RFC 3986 to quote URL strings. - Now, "~" is included in the set of unreserved characters. - - string and safe may be either str or bytes objects. encoding and errors - must not be specified if string is a bytes object. - - The optional encoding and errors parameters specify how to deal with - non-ASCII characters, as accepted by the str.encode method. - By default, encoding='utf-8' (characters are encoded with UTF-8), and - errors='strict' (unsupported characters raise a UnicodeEncodeError). - """ - if isinstance(string, str): - if not string: - return string - if encoding is None: - encoding = 'utf-8' - if errors is None: - errors = 'strict' - string = string.encode(encoding, errors) - else: - if encoding is not None: - raise TypeError("quote() doesn't support 'encoding' for bytes") - if errors is not None: - raise TypeError("quote() doesn't support 'errors' for bytes") - return quote_from_bytes(string, safe) - -def quote_plus(string, safe='', encoding=None, errors=None): - """Like quote(), but also replace ' ' with '+', as required for quoting - HTML form values. Plus signs in the original string are escaped unless - they are included in safe. It also does not have safe default to '/'. - """ - # Check if ' ' in string, where string may either be a str or bytes. If - # there are no spaces, the regular quote will produce the right answer. - if ((isinstance(string, str) and ' ' not in string) or - (isinstance(string, bytes) and b' ' not in string)): - return quote(string, safe, encoding, errors) - if isinstance(safe, str): - space = ' ' - else: - space = b' ' - string = quote(string, safe + space, encoding, errors) - return string.replace(' ', '+') - -# Expectation: A typical program is unlikely to create more than 5 of these. -@functools.lru_cache -def _byte_quoter_factory(safe): - return _Quoter(safe).__getitem__ - -def quote_from_bytes(bs, safe='/'): - """Like quote(), but accepts a bytes object rather than a str, and does - not perform string-to-bytes encoding. It always returns an ASCII string. - quote_from_bytes(b'abc def\x3f') -> 'abc%20def%3f' - """ - if not isinstance(bs, (bytes, bytearray)): - raise TypeError("quote_from_bytes() expected bytes") - if not bs: - return '' - if isinstance(safe, str): - # Normalize 'safe' by converting to bytes and removing non-ASCII chars - safe = safe.encode('ascii', 'ignore') - else: - # List comprehensions are faster than generator expressions. - safe = bytes([c for c in safe if c < 128]) - if not bs.rstrip(_ALWAYS_SAFE_BYTES + safe): - return bs.decode() - quoter = _byte_quoter_factory(safe) - if (bs_len := len(bs)) < 200_000: - return ''.join(map(quoter, bs)) - else: - # This saves memory - https://github.com/python/cpython/issues/95865 - chunk_size = math.isqrt(bs_len) - chunks = [''.join(map(quoter, bs[i:i+chunk_size])) - for i in range(0, bs_len, chunk_size)] - return ''.join(chunks) - -def urlencode(query, doseq=False, safe='', encoding=None, errors=None, - quote_via=quote_plus): - """Encode a dict or sequence of two-element tuples into a URL query string. - - If any values in the query arg are sequences and doseq is true, each - sequence element is converted to a separate parameter. - - If the query arg is a sequence of two-element tuples, the order of the - parameters in the output will match the order of parameters in the - input. - - The components of a query arg may each be either a string or a bytes type. - - The safe, encoding, and errors parameters are passed down to the function - specified by quote_via (encoding and errors only if a component is a str). - """ - - if hasattr(query, "items"): - query = query.items() - else: - # It's a bother at times that strings and string-like objects are - # sequences. - try: - # non-sequence items should not work with len() - # non-empty strings will fail this - if len(query) and not isinstance(query[0], tuple): - raise TypeError - # Zero-length sequences of all types will get here and succeed, - # but that's a minor nit. Since the original implementation - # allowed empty dicts that type of behavior probably should be - # preserved for consistency - except TypeError as err: - raise TypeError("not a valid non-string sequence " - "or mapping object") from err - - l = [] - if not doseq: - for k, v in query: - if isinstance(k, bytes): - k = quote_via(k, safe) - else: - k = quote_via(str(k), safe, encoding, errors) - - if isinstance(v, bytes): - v = quote_via(v, safe) - else: - v = quote_via(str(v), safe, encoding, errors) - l.append(k + '=' + v) - else: - for k, v in query: - if isinstance(k, bytes): - k = quote_via(k, safe) - else: - k = quote_via(str(k), safe, encoding, errors) - - if isinstance(v, bytes): - v = quote_via(v, safe) - l.append(k + '=' + v) - elif isinstance(v, str): - v = quote_via(v, safe, encoding, errors) - l.append(k + '=' + v) - else: - try: - # Is this a sufficient test for sequence-ness? - x = len(v) - except TypeError: - # not a sequence - v = quote_via(str(v), safe, encoding, errors) - l.append(k + '=' + v) - else: - # loop over the sequence - for elt in v: - if isinstance(elt, bytes): - elt = quote_via(elt, safe) - else: - elt = quote_via(str(elt), safe, encoding, errors) - l.append(k + '=' + elt) - return '&'.join(l) - - -def to_bytes(url): - warnings.warn("urllib.parse.to_bytes() is deprecated as of 3.8", - DeprecationWarning, stacklevel=2) - return _to_bytes(url) - - -def _to_bytes(url): - """to_bytes(u"URL") --> 'URL'.""" - # Most URL schemes require ASCII. If that changes, the conversion - # can be relaxed. - # XXX get rid of to_bytes() - if isinstance(url, str): - try: - url = url.encode("ASCII").decode() - except UnicodeError: - raise UnicodeError("URL " + repr(url) + - " contains non-ASCII characters") - return url - - -def unwrap(url): - """Transform a string like '<URL:scheme://host/path>' into 'scheme://host/path'. - - The string is returned unchanged if it's not a wrapped URL. - """ - url = str(url).strip() - if url[:1] == '<' and url[-1:] == '>': - url = url[1:-1].strip() - if url[:4] == 'URL:': - url = url[4:].strip() - return url - - -def splittype(url): - warnings.warn("urllib.parse.splittype() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splittype(url) - - -_typeprog = None -def _splittype(url): - """splittype('type:opaquestring') --> 'type', 'opaquestring'.""" - global _typeprog - if _typeprog is None: - _typeprog = re.compile('([^/:]+):(.*)', re.DOTALL) - - match = _typeprog.match(url) - if match: - scheme, data = match.groups() - return scheme.lower(), data - return None, url - - -def splithost(url): - warnings.warn("urllib.parse.splithost() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splithost(url) - - -_hostprog = None -def _splithost(url): - """splithost('//host[:port]/path') --> 'host[:port]', '/path'.""" - global _hostprog - if _hostprog is None: - _hostprog = re.compile('//([^/#?]*)(.*)', re.DOTALL) - - match = _hostprog.match(url) - if match: - host_port, path = match.groups() - if path and path[0] != '/': - path = '/' + path - return host_port, path - return None, url - - -def splituser(host): - warnings.warn("urllib.parse.splituser() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splituser(host) - - -def _splituser(host): - """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - user, delim, host = host.rpartition('@') - return (user if delim else None), host - - -def splitpasswd(user): - warnings.warn("urllib.parse.splitpasswd() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splitpasswd(user) - - -def _splitpasswd(user): - """splitpasswd('user:passwd') -> 'user', 'passwd'.""" - user, delim, passwd = user.partition(':') - return user, (passwd if delim else None) - - -def splitport(host): - warnings.warn("urllib.parse.splitport() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splitport(host) - - -# splittag('/path#tag') --> '/path', 'tag' -_portprog = None -def _splitport(host): - """splitport('host:port') --> 'host', 'port'.""" - global _portprog - if _portprog is None: - _portprog = re.compile('(.*):([0-9]*)', re.DOTALL) - - match = _portprog.fullmatch(host) - if match: - host, port = match.groups() - if port: - return host, port - return host, None - - -def splitnport(host, defport=-1): - warnings.warn("urllib.parse.splitnport() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splitnport(host, defport) - - -def _splitnport(host, defport=-1): - """Split host and port, returning numeric port. - Return given default port if no ':' found; defaults to -1. - Return numerical port if a valid number is found after ':'. - Return None if ':' but not a valid number.""" - host, delim, port = host.rpartition(':') - if not delim: - host = port - elif port: - if port.isdigit() and port.isascii(): - nport = int(port) - else: - nport = None - return host, nport - return host, defport - - -def splitquery(url): - warnings.warn("urllib.parse.splitquery() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splitquery(url) - - -def _splitquery(url): - """splitquery('/path?query') --> '/path', 'query'.""" - path, delim, query = url.rpartition('?') - if delim: - return path, query - return url, None - - -def splittag(url): - warnings.warn("urllib.parse.splittag() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splittag(url) - - -def _splittag(url): - """splittag('/path#tag') --> '/path', 'tag'.""" - path, delim, tag = url.rpartition('#') - if delim: - return path, tag - return url, None - - -def splitattr(url): - warnings.warn("urllib.parse.splitattr() is deprecated as of 3.8, " - "use urllib.parse.urlparse() instead", - DeprecationWarning, stacklevel=2) - return _splitattr(url) - - -def _splitattr(url): - """splitattr('/path;attr1=value1;attr2=value2;...') -> - '/path', ['attr1=value1', 'attr2=value2', ...].""" - words = url.split(';') - return words[0], words[1:] - - -def splitvalue(attr): - warnings.warn("urllib.parse.splitvalue() is deprecated as of 3.8, " - "use urllib.parse.parse_qsl() instead", - DeprecationWarning, stacklevel=2) - return _splitvalue(attr) - - -def _splitvalue(attr): - """splitvalue('attr=value') --> 'attr', 'value'.""" - attr, delim, value = attr.partition('=') - return attr, (value if delim else None) diff --git a/Python314_4_x86_Template/Lib/urllib/request.py b/Python314_4_x86_Template/Lib/urllib/request.py deleted file mode 100644 index 8d7470a22..000000000 --- a/Python314_4_x86_Template/Lib/urllib/request.py +++ /dev/null @@ -1,2163 +0,0 @@ -"""An extensible library for opening URLs using a variety of protocols - -The simplest way to use this module is to call the urlopen function, -which accepts a string containing a URL or a Request object (described -below). It opens the URL and returns the results as file-like -object; the returned object has some extra methods described below. - -The OpenerDirector manages a collection of Handler objects that do -all the actual work. Each Handler implements a particular protocol or -option. The OpenerDirector is a composite object that invokes the -Handlers needed to open the requested URL. For example, the -HTTPHandler performs HTTP GET and POST requests and deals with -non-error returns. The HTTPRedirectHandler automatically deals with -HTTP 301, 302, 303, 307, and 308 redirect errors, and the -HTTPDigestAuthHandler deals with digest authentication. - -urlopen(url, data=None) -- Basic usage is the same as original -urllib. pass the url and optionally data to post to an HTTP URL, and -get a file-like object back. One difference is that you can also pass -a Request instance instead of URL. Raises a URLError (subclass of -OSError); for HTTP errors, raises an HTTPError, which can also be -treated as a valid response. - -build_opener -- Function that creates a new OpenerDirector instance. -Will install the default handlers. Accepts one or more Handlers as -arguments, either instances or Handler classes that it will -instantiate. If one of the argument is a subclass of the default -handler, the argument will be installed instead of the default. - -install_opener -- Installs a new opener as the default opener. - -objects of interest: - -OpenerDirector -- Sets up the User Agent as the Python-urllib client and manages -the Handler classes, while dealing with requests and responses. - -Request -- An object that encapsulates the state of a request. The -state can be as simple as the URL. It can also include extra HTTP -headers, e.g. a User-Agent. - -BaseHandler -- - -internals: -BaseHandler and parent -_call_chain conventions - -Example usage: - -import urllib.request - -# set up authentication info -authinfo = urllib.request.HTTPBasicAuthHandler() -authinfo.add_password(realm='PDQ Application', - uri='https://mahler:8092/site-updates.py', - user='klem', - passwd='geheim$parole') - -proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) - -# build a new opener that adds authentication and caching FTP handlers -opener = urllib.request.build_opener(proxy_support, authinfo, - urllib.request.CacheFTPHandler) - -# install it -urllib.request.install_opener(opener) - -f = urllib.request.urlopen('https://www.python.org/') -""" - -# XXX issues: -# If an authentication error handler that tries to perform -# authentication for some reason but fails, how should the error be -# signalled? The client needs to know the HTTP error code. But if -# the handler knows that the problem was, e.g., that it didn't know -# that hash algo that requested in the challenge, it would be good to -# pass that information along to the client, too. -# ftp errors aren't handled cleanly -# check digest against correct (i.e. non-apache) implementation - -# Possible extensions: -# complex proxies XXX not sure what exactly was meant by this -# abstract factory for opener - -import base64 -import bisect -import contextlib -import email -import hashlib -import http.client -import io -import os -import re -import socket -import string -import sys -import time -import tempfile - - -from urllib.error import URLError, HTTPError, ContentTooShortError -from urllib.parse import ( - urlparse, urlsplit, urljoin, unwrap, quote, unquote, - _splittype, _splithost, _splitport, _splituser, _splitpasswd, - _splitattr, _splitvalue, _splittag, - unquote_to_bytes, urlunparse) -from urllib.response import addinfourl, addclosehook - -# check for SSL -try: - import ssl # noqa: F401 -except ImportError: - _have_ssl = False -else: - _have_ssl = True - -__all__ = [ - # Classes - 'Request', 'OpenerDirector', 'BaseHandler', 'HTTPDefaultErrorHandler', - 'HTTPRedirectHandler', 'HTTPCookieProcessor', 'ProxyHandler', - 'HTTPPasswordMgr', 'HTTPPasswordMgrWithDefaultRealm', - 'HTTPPasswordMgrWithPriorAuth', 'AbstractBasicAuthHandler', - 'HTTPBasicAuthHandler', 'ProxyBasicAuthHandler', 'AbstractDigestAuthHandler', - 'HTTPDigestAuthHandler', 'ProxyDigestAuthHandler', 'HTTPHandler', - 'FileHandler', 'FTPHandler', 'CacheFTPHandler', 'DataHandler', - 'UnknownHandler', 'HTTPErrorProcessor', - # Functions - 'urlopen', 'install_opener', 'build_opener', - 'pathname2url', 'url2pathname', 'getproxies', - # Legacy interface - 'urlretrieve', 'urlcleanup', -] - -# used in User-Agent header sent -__version__ = '%d.%d' % sys.version_info[:2] - -_opener = None -def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - *, context=None): - '''Open the URL url, which can be either a string or a Request object. - - *data* must be an object specifying additional data to be sent to - the server, or None if no such data is needed. See Request for - details. - - urllib.request module uses HTTP/1.1 and includes a "Connection:close" - header in its HTTP requests. - - The optional *timeout* parameter specifies a timeout in seconds for - blocking operations like the connection attempt (if not specified, the - global default timeout setting will be used). This only works for HTTP, - HTTPS and FTP connections. - - If *context* is specified, it must be a ssl.SSLContext instance describing - the various SSL options. See HTTPSConnection for more details. - - - This function always returns an object which can work as a - context manager and has the properties url, headers, and status. - See urllib.response.addinfourl for more detail on these properties. - - For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse - object slightly modified. In addition to the three new methods above, the - msg attribute contains the same information as the reason attribute --- - the reason phrase returned by the server --- instead of the response - headers as it is specified in the documentation for HTTPResponse. - - For FTP, file, and data URLs, this function returns a - urllib.response.addinfourl object. - - Note that None may be returned if no handler handles the request (though - the default installed global OpenerDirector uses UnknownHandler to ensure - this never happens). - - In addition, if proxy settings are detected (for example, when a *_proxy - environment variable like http_proxy is set), ProxyHandler is default - installed and makes sure the requests are handled through the proxy. - - ''' - global _opener - if context: - https_handler = HTTPSHandler(context=context) - opener = build_opener(https_handler) - elif _opener is None: - _opener = opener = build_opener() - else: - opener = _opener - return opener.open(url, data, timeout) - -def install_opener(opener): - global _opener - _opener = opener - -_url_tempfiles = [] -def urlretrieve(url, filename=None, reporthook=None, data=None): - """ - Retrieve a URL into a temporary location on disk. - - Requires a URL argument. If a filename is passed, it is used as - the temporary file location. The reporthook argument should be - a callable that accepts a block number, a read size, and the - total file size of the URL target. The data argument should be - valid URL encoded data. - - If a filename is passed and the URL points to a local resource, - the result is a copy from local file to new file. - - Returns a tuple containing the path to the newly created - data file as well as the resulting HTTPMessage object. - """ - url_type, path = _splittype(url) - - with contextlib.closing(urlopen(url, data)) as fp: - headers = fp.info() - - # Just return the local path and the "headers" for file:// - # URLs. No sense in performing a copy unless requested. - if url_type == "file" and not filename: - return os.path.normpath(path), headers - - # Handle temporary file setup. - if filename: - tfp = open(filename, 'wb') - else: - tfp = tempfile.NamedTemporaryFile(delete=False) - filename = tfp.name - _url_tempfiles.append(filename) - - with tfp: - result = filename, headers - bs = 1024*8 - size = -1 - read = 0 - blocknum = 0 - if "content-length" in headers: - size = int(headers["Content-Length"]) - - if reporthook: - reporthook(blocknum, bs, size) - - while block := fp.read(bs): - read += len(block) - tfp.write(block) - blocknum += 1 - if reporthook: - reporthook(blocknum, bs, size) - - if size >= 0 and read < size: - raise ContentTooShortError( - "retrieval incomplete: got only %i out of %i bytes" - % (read, size), result) - - return result - -def urlcleanup(): - """Clean up temporary files from urlretrieve calls.""" - for temp_file in _url_tempfiles: - try: - os.unlink(temp_file) - except OSError: - pass - - del _url_tempfiles[:] - global _opener - if _opener: - _opener = None - -# copied from cookielib.py -_cut_port_re = re.compile(r":\d+$", re.ASCII) -def request_host(request): - """Return request-host, as defined by RFC 2965. - - Variation from RFC: returned value is lowercased, for convenient - comparison. - - """ - url = request.full_url - host = urlparse(url)[1] - if host == "": - host = request.get_header("Host", "") - - # remove port, if present - host = _cut_port_re.sub("", host, 1) - return host.lower() - -class Request: - - def __init__(self, url, data=None, headers={}, - origin_req_host=None, unverifiable=False, - method=None): - self.full_url = url - self.headers = {} - self.unredirected_hdrs = {} - self._data = None - self.data = data - self._tunnel_host = None - for key, value in headers.items(): - self.add_header(key, value) - if origin_req_host is None: - origin_req_host = request_host(self) - self.origin_req_host = origin_req_host - self.unverifiable = unverifiable - if method: - self.method = method - - @property - def full_url(self): - if self.fragment: - return '{}#{}'.format(self._full_url, self.fragment) - return self._full_url - - @full_url.setter - def full_url(self, url): - # unwrap('<URL:type://host/path>') --> 'type://host/path' - self._full_url = unwrap(url) - self._full_url, self.fragment = _splittag(self._full_url) - self._parse() - - @full_url.deleter - def full_url(self): - self._full_url = None - self.fragment = None - self.selector = '' - - @property - def data(self): - return self._data - - @data.setter - def data(self, data): - if data != self._data: - self._data = data - # issue 16464 - # if we change data we need to remove content-length header - # (cause it's most probably calculated for previous value) - if self.has_header("Content-length"): - self.remove_header("Content-length") - - @data.deleter - def data(self): - self.data = None - - def _parse(self): - self.type, rest = _splittype(self._full_url) - if self.type is None: - raise ValueError("unknown url type: %r" % self.full_url) - self.host, self.selector = _splithost(rest) - if self.host: - self.host = unquote(self.host) - - def get_method(self): - """Return a string indicating the HTTP request method.""" - default_method = "POST" if self.data is not None else "GET" - return getattr(self, 'method', default_method) - - def get_full_url(self): - return self.full_url - - def set_proxy(self, host, type): - if self.type == 'https' and not self._tunnel_host: - self._tunnel_host = self.host - else: - self.type= type - self.selector = self.full_url - self.host = host - - def has_proxy(self): - return self.selector == self.full_url - - def add_header(self, key, val): - # useful for something like authentication - self.headers[key.capitalize()] = val - - def add_unredirected_header(self, key, val): - # will not be added to a redirected request - self.unredirected_hdrs[key.capitalize()] = val - - def has_header(self, header_name): - return (header_name in self.headers or - header_name in self.unredirected_hdrs) - - def get_header(self, header_name, default=None): - return self.headers.get( - header_name, - self.unredirected_hdrs.get(header_name, default)) - - def remove_header(self, header_name): - self.headers.pop(header_name, None) - self.unredirected_hdrs.pop(header_name, None) - - def header_items(self): - hdrs = {**self.unredirected_hdrs, **self.headers} - return list(hdrs.items()) - -class OpenerDirector: - def __init__(self): - client_version = "Python-urllib/%s" % __version__ - self.addheaders = [('User-agent', client_version)] - # self.handlers is retained only for backward compatibility - self.handlers = [] - # manage the individual handlers - self.handle_open = {} - self.handle_error = {} - self.process_response = {} - self.process_request = {} - - def add_handler(self, handler): - if not hasattr(handler, "add_parent"): - raise TypeError("expected BaseHandler instance, got %r" % - type(handler)) - - added = False - for meth in dir(handler): - if meth in ["redirect_request", "do_open", "proxy_open"]: - # oops, coincidental match - continue - - i = meth.find("_") - protocol = meth[:i] - condition = meth[i+1:] - - if condition.startswith("error"): - j = condition.find("_") + i + 1 - kind = meth[j+1:] - try: - kind = int(kind) - except ValueError: - pass - lookup = self.handle_error.get(protocol, {}) - self.handle_error[protocol] = lookup - elif condition == "open": - kind = protocol - lookup = self.handle_open - elif condition == "response": - kind = protocol - lookup = self.process_response - elif condition == "request": - kind = protocol - lookup = self.process_request - else: - continue - - handlers = lookup.setdefault(kind, []) - if handlers: - bisect.insort(handlers, handler) - else: - handlers.append(handler) - added = True - - if added: - bisect.insort(self.handlers, handler) - handler.add_parent(self) - - def close(self): - # Only exists for backwards compatibility. - pass - - def _call_chain(self, chain, kind, meth_name, *args): - # Handlers raise an exception if no one else should try to handle - # the request, or return None if they can't but another handler - # could. Otherwise, they return the response. - handlers = chain.get(kind, ()) - for handler in handlers: - func = getattr(handler, meth_name) - result = func(*args) - if result is not None: - return result - - def open(self, fullurl, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): - # accept a URL or a Request object - if isinstance(fullurl, str): - req = Request(fullurl, data) - else: - req = fullurl - if data is not None: - req.data = data - - req.timeout = timeout - protocol = req.type - - # pre-process request - meth_name = protocol+"_request" - for processor in self.process_request.get(protocol, []): - meth = getattr(processor, meth_name) - req = meth(req) - - sys.audit('urllib.Request', req.full_url, req.data, req.headers, req.get_method()) - response = self._open(req, data) - - # post-process response - meth_name = protocol+"_response" - for processor in self.process_response.get(protocol, []): - meth = getattr(processor, meth_name) - response = meth(req, response) - - return response - - def _open(self, req, data=None): - result = self._call_chain(self.handle_open, 'default', - 'default_open', req) - if result: - return result - - protocol = req.type - result = self._call_chain(self.handle_open, protocol, protocol + - '_open', req) - if result: - return result - - return self._call_chain(self.handle_open, 'unknown', - 'unknown_open', req) - - def error(self, proto, *args): - if proto in ('http', 'https'): - # XXX http[s] protocols are special-cased - dict = self.handle_error['http'] # https is not different than http - proto = args[2] # YUCK! - meth_name = 'http_error_%s' % proto - http_err = 1 - orig_args = args - else: - dict = self.handle_error - meth_name = proto + '_error' - http_err = 0 - args = (dict, proto, meth_name) + args - result = self._call_chain(*args) - if result: - return result - - if http_err: - args = (dict, 'default', 'http_error_default') + orig_args - return self._call_chain(*args) - -# XXX probably also want an abstract factory that knows when it makes -# sense to skip a superclass in favor of a subclass and when it might -# make sense to include both - -def build_opener(*handlers): - """Create an opener object from a list of handlers. - - The opener will use several default handlers, including support - for HTTP, FTP and when applicable HTTPS. - - If any of the handlers passed as arguments are subclasses of the - default handlers, the default handlers will not be used. - """ - opener = OpenerDirector() - default_classes = [ProxyHandler, UnknownHandler, HTTPHandler, - HTTPDefaultErrorHandler, HTTPRedirectHandler, - FTPHandler, FileHandler, HTTPErrorProcessor, - DataHandler] - if hasattr(http.client, "HTTPSConnection"): - default_classes.append(HTTPSHandler) - skip = set() - for klass in default_classes: - for check in handlers: - if isinstance(check, type): - if issubclass(check, klass): - skip.add(klass) - elif isinstance(check, klass): - skip.add(klass) - for klass in skip: - default_classes.remove(klass) - - for klass in default_classes: - opener.add_handler(klass()) - - for h in handlers: - if isinstance(h, type): - h = h() - opener.add_handler(h) - return opener - -class BaseHandler: - handler_order = 500 - - def add_parent(self, parent): - self.parent = parent - - def close(self): - # Only exists for backwards compatibility - pass - - def __lt__(self, other): - if not hasattr(other, "handler_order"): - # Try to preserve the old behavior of having custom classes - # inserted after default ones (works only for custom user - # classes which are not aware of handler_order). - return True - return self.handler_order < other.handler_order - - -class HTTPErrorProcessor(BaseHandler): - """Process HTTP error responses.""" - handler_order = 1000 # after all other processing - - def http_response(self, request, response): - code, msg, hdrs = response.code, response.msg, response.info() - - # According to RFC 2616, "2xx" code indicates that the client's - # request was successfully received, understood, and accepted. - if not (200 <= code < 300): - response = self.parent.error( - 'http', request, response, code, msg, hdrs) - - return response - - https_response = http_response - -class HTTPDefaultErrorHandler(BaseHandler): - def http_error_default(self, req, fp, code, msg, hdrs): - raise HTTPError(req.full_url, code, msg, hdrs, fp) - -class HTTPRedirectHandler(BaseHandler): - # maximum number of redirections to any single URL - # this is needed because of the state that cookies introduce - max_repeats = 4 - # maximum total number of redirections (regardless of URL) before - # assuming we're in a loop - max_redirections = 10 - - def redirect_request(self, req, fp, code, msg, headers, newurl): - """Return a Request or None in response to a redirect. - - This is called by the http_error_30x methods when a - redirection response is received. If a redirection should - take place, return a new Request to allow http_error_30x to - perform the redirect. Otherwise, raise HTTPError if no-one - else should try to handle this url. Return None if you can't - but another Handler might. - """ - m = req.get_method() - if (not (code in (301, 302, 303, 307, 308) and m in ("GET", "HEAD") - or code in (301, 302, 303) and m == "POST")): - raise HTTPError(req.full_url, code, msg, headers, fp) - - # Strictly (according to RFC 2616), 301 or 302 in response to - # a POST MUST NOT cause a redirection without confirmation - # from the user (of urllib.request, in this case). In practice, - # essentially all clients do redirect in this case, so we do - # the same. - - # Be conciliant with URIs containing a space. This is mainly - # redundant with the more complete encoding done in http_error_302(), - # but it is kept for compatibility with other callers. - newurl = newurl.replace(' ', '%20') - - CONTENT_HEADERS = ("content-length", "content-type") - newheaders = {k: v for k, v in req.headers.items() - if k.lower() not in CONTENT_HEADERS} - return Request(newurl, - method="HEAD" if m == "HEAD" else "GET", - headers=newheaders, - origin_req_host=req.origin_req_host, - unverifiable=True) - - # Implementation note: To avoid the server sending us into an - # infinite loop, the request object needs to track what URLs we - # have already seen. Do this by adding a handler-specific - # attribute to the Request object. - def http_error_302(self, req, fp, code, msg, headers): - # Some servers (incorrectly) return multiple Location headers - # (so probably same goes for URI). Use first header. - if "location" in headers: - newurl = headers["location"] - elif "uri" in headers: - newurl = headers["uri"] - else: - return - - # fix a possible malformed URL - urlparts = urlparse(newurl) - - # For security reasons we don't allow redirection to anything other - # than http, https or ftp. - - if urlparts.scheme not in ('http', 'https', 'ftp', ''): - raise HTTPError( - newurl, code, - "%s - Redirection to url '%s' is not allowed" % (msg, newurl), - headers, fp) - - if not urlparts.path and urlparts.netloc: - urlparts = list(urlparts) - urlparts[2] = "/" - newurl = urlunparse(urlparts) - - # http.client.parse_headers() decodes as ISO-8859-1. Recover the - # original bytes and percent-encode non-ASCII bytes, and any special - # characters such as the space. - newurl = quote( - newurl, encoding="iso-8859-1", safe=string.punctuation) - newurl = urljoin(req.full_url, newurl) - - # XXX Probably want to forget about the state of the current - # request, although that might interact poorly with other - # handlers that also use handler-specific request attributes - new = self.redirect_request(req, fp, code, msg, headers, newurl) - if new is None: - return - - # loop detection - # .redirect_dict has a key url if url was previously visited. - if hasattr(req, 'redirect_dict'): - visited = new.redirect_dict = req.redirect_dict - if (visited.get(newurl, 0) >= self.max_repeats or - len(visited) >= self.max_redirections): - raise HTTPError(req.full_url, code, - self.inf_msg + msg, headers, fp) - else: - visited = new.redirect_dict = req.redirect_dict = {} - visited[newurl] = visited.get(newurl, 0) + 1 - - # Don't close the fp until we are sure that we won't use it - # with HTTPError. - fp.read() - fp.close() - - return self.parent.open(new, timeout=req.timeout) - - http_error_301 = http_error_303 = http_error_307 = http_error_308 = http_error_302 - - inf_msg = "The HTTP server returned a redirect error that would " \ - "lead to an infinite loop.\n" \ - "The last 30x error message was:\n" - - -def _parse_proxy(proxy): - """Return (scheme, user, password, host/port) given a URL or an authority. - - If a URL is supplied, it must have an authority (host:port) component. - According to RFC 3986, having an authority component means the URL must - have two slashes after the scheme. - """ - scheme, r_scheme = _splittype(proxy) - if not r_scheme.startswith("/"): - # authority - scheme = None - authority = proxy - else: - # URL - if not r_scheme.startswith("//"): - raise ValueError("proxy URL with no authority: %r" % proxy) - # We have an authority, so for RFC 3986-compliant URLs (by ss 3. - # and 3.3.), path is empty or starts with '/' - if '@' in r_scheme: - host_separator = r_scheme.find('@') - end = r_scheme.find("/", host_separator) - else: - end = r_scheme.find("/", 2) - if end == -1: - end = None - authority = r_scheme[2:end] - userinfo, hostport = _splituser(authority) - if userinfo is not None: - user, password = _splitpasswd(userinfo) - else: - user = password = None - return scheme, user, password, hostport - -class ProxyHandler(BaseHandler): - # Proxies must be in front - handler_order = 100 - - def __init__(self, proxies=None): - if proxies is None: - proxies = getproxies() - assert hasattr(proxies, 'keys'), "proxies must be a mapping" - self.proxies = proxies - for type, url in proxies.items(): - type = type.lower() - setattr(self, '%s_open' % type, - lambda r, proxy=url, type=type, meth=self.proxy_open: - meth(r, proxy, type)) - - def proxy_open(self, req, proxy, type): - orig_type = req.type - proxy_type, user, password, hostport = _parse_proxy(proxy) - if proxy_type is None: - proxy_type = orig_type - - if req.host and proxy_bypass(req.host): - return None - - if user and password: - user_pass = '%s:%s' % (unquote(user), - unquote(password)) - creds = base64.b64encode(user_pass.encode()).decode("ascii") - req.add_header('Proxy-authorization', 'Basic ' + creds) - hostport = unquote(hostport) - req.set_proxy(hostport, proxy_type) - if orig_type == proxy_type or orig_type == 'https': - # let other handlers take care of it - return None - else: - # need to start over, because the other handlers don't - # grok the proxy's URL type - # e.g. if we have a constructor arg proxies like so: - # {'http': 'ftp://proxy.example.com'}, we may end up turning - # a request for http://acme.example.com/a into one for - # ftp://proxy.example.com/a - return self.parent.open(req, timeout=req.timeout) - -class HTTPPasswordMgr: - - def __init__(self): - self.passwd = {} - - def add_password(self, realm, uri, user, passwd): - # uri could be a single URI or a sequence - if isinstance(uri, str): - uri = [uri] - if realm not in self.passwd: - self.passwd[realm] = {} - for default_port in True, False: - reduced_uri = tuple( - self.reduce_uri(u, default_port) for u in uri) - self.passwd[realm][reduced_uri] = (user, passwd) - - def find_user_password(self, realm, authuri): - domains = self.passwd.get(realm, {}) - for default_port in True, False: - reduced_authuri = self.reduce_uri(authuri, default_port) - for uris, authinfo in domains.items(): - for uri in uris: - if self.is_suburi(uri, reduced_authuri): - return authinfo - return None, None - - def reduce_uri(self, uri, default_port=True): - """Accept authority or URI and extract only the authority and path.""" - # note HTTP URLs do not have a userinfo component - parts = urlsplit(uri) - if parts[1]: - # URI - scheme = parts[0] - authority = parts[1] - path = parts[2] or '/' - else: - # host or host:port - scheme = None - authority = uri - path = '/' - host, port = _splitport(authority) - if default_port and port is None and scheme is not None: - dport = {"http": 80, - "https": 443, - }.get(scheme) - if dport is not None: - authority = "%s:%d" % (host, dport) - return authority, path - - def is_suburi(self, base, test): - """Check if test is below base in a URI tree - - Both args must be URIs in reduced form. - """ - if base == test: - return True - if base[0] != test[0]: - return False - prefix = base[1] - if prefix[-1:] != '/': - prefix += '/' - return test[1].startswith(prefix) - - -class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): - - def find_user_password(self, realm, authuri): - user, password = HTTPPasswordMgr.find_user_password(self, realm, - authuri) - if user is not None: - return user, password - return HTTPPasswordMgr.find_user_password(self, None, authuri) - - -class HTTPPasswordMgrWithPriorAuth(HTTPPasswordMgrWithDefaultRealm): - - def __init__(self): - self.authenticated = {} - super().__init__() - - def add_password(self, realm, uri, user, passwd, is_authenticated=False): - self.update_authenticated(uri, is_authenticated) - # Add a default for prior auth requests - if realm is not None: - super().add_password(None, uri, user, passwd) - super().add_password(realm, uri, user, passwd) - - def update_authenticated(self, uri, is_authenticated=False): - # uri could be a single URI or a sequence - if isinstance(uri, str): - uri = [uri] - - for default_port in True, False: - for u in uri: - reduced_uri = self.reduce_uri(u, default_port) - self.authenticated[reduced_uri] = is_authenticated - - def is_authenticated(self, authuri): - for default_port in True, False: - reduced_authuri = self.reduce_uri(authuri, default_port) - for uri in self.authenticated: - if self.is_suburi(uri, reduced_authuri): - return self.authenticated[uri] - - -class AbstractBasicAuthHandler: - - # XXX this allows for multiple auth-schemes, but will stupidly pick - # the last one with a realm specified. - - # allow for double- and single-quoted realm values - # (single quotes are a violation of the RFC, but appear in the wild) - rx = re.compile('(?:^|,)' # start of the string or ',' - '[ \t]*' # optional whitespaces - '([^ \t,]+)' # scheme like "Basic" - '[ \t]+' # mandatory whitespaces - # realm=xxx - # realm='xxx' - # realm="xxx" - 'realm=(["\']?)([^"\']*)\\2', - re.I) - - # XXX could pre-emptively send auth info already accepted (RFC 2617, - # end of section 2, and section 1.2 immediately after "credentials" - # production). - - def __init__(self, password_mgr=None): - if password_mgr is None: - password_mgr = HTTPPasswordMgr() - self.passwd = password_mgr - self.add_password = self.passwd.add_password - - def _parse_realm(self, header): - # parse WWW-Authenticate header: accept multiple challenges per header - found_challenge = False - for mo in AbstractBasicAuthHandler.rx.finditer(header): - scheme, quote, realm = mo.groups() - if quote not in ['"', "'"]: - import warnings - warnings.warn("Basic Auth Realm was unquoted", - UserWarning, 3) - - yield (scheme, realm) - - found_challenge = True - - if not found_challenge: - if header: - scheme = header.split()[0] - else: - scheme = '' - yield (scheme, None) - - def http_error_auth_reqed(self, authreq, host, req, headers): - # host may be an authority (without userinfo) or a URL with an - # authority - headers = headers.get_all(authreq) - if not headers: - # no header found - return - - unsupported = None - for header in headers: - for scheme, realm in self._parse_realm(header): - if scheme.lower() != 'basic': - unsupported = scheme - continue - - if realm is not None: - # Use the first matching Basic challenge. - # Ignore following challenges even if they use the Basic - # scheme. - return self.retry_http_basic_auth(host, req, realm) - - if unsupported is not None: - raise ValueError("AbstractBasicAuthHandler does not " - "support the following scheme: %r" - % (scheme,)) - - def retry_http_basic_auth(self, host, req, realm): - user, pw = self.passwd.find_user_password(realm, host) - if pw is not None: - raw = "%s:%s" % (user, pw) - auth = "Basic " + base64.b64encode(raw.encode()).decode("ascii") - if req.get_header(self.auth_header, None) == auth: - return None - req.add_unredirected_header(self.auth_header, auth) - return self.parent.open(req, timeout=req.timeout) - else: - return None - - def http_request(self, req): - if (not hasattr(self.passwd, 'is_authenticated') or - not self.passwd.is_authenticated(req.full_url)): - return req - - if not req.has_header('Authorization'): - user, passwd = self.passwd.find_user_password(None, req.full_url) - credentials = '{0}:{1}'.format(user, passwd).encode() - auth_str = base64.standard_b64encode(credentials).decode() - req.add_unredirected_header('Authorization', - 'Basic {}'.format(auth_str.strip())) - return req - - def http_response(self, req, response): - if hasattr(self.passwd, 'is_authenticated'): - if 200 <= response.code < 300: - self.passwd.update_authenticated(req.full_url, True) - else: - self.passwd.update_authenticated(req.full_url, False) - return response - - https_request = http_request - https_response = http_response - - - -class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): - - auth_header = 'Authorization' - - def http_error_401(self, req, fp, code, msg, headers): - url = req.full_url - response = self.http_error_auth_reqed('www-authenticate', - url, req, headers) - return response - - -class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): - - auth_header = 'Proxy-authorization' - - def http_error_407(self, req, fp, code, msg, headers): - # http_error_auth_reqed requires that there is no userinfo component in - # authority. Assume there isn't one, since urllib.request does not (and - # should not, RFC 3986 s. 3.2.1) support requests for URLs containing - # userinfo. - authority = req.host - response = self.http_error_auth_reqed('proxy-authenticate', - authority, req, headers) - return response - - -# Return n random bytes. -_randombytes = os.urandom - - -class AbstractDigestAuthHandler: - # Digest authentication is specified in RFC 2617/7616. - - # XXX The client does not inspect the Authentication-Info header - # in a successful response. - - # XXX It should be possible to test this implementation against - # a mock server that just generates a static set of challenges. - - # XXX qop="auth-int" supports is shaky - - def __init__(self, passwd=None): - if passwd is None: - passwd = HTTPPasswordMgr() - self.passwd = passwd - self.add_password = self.passwd.add_password - self.retried = 0 - self.nonce_count = 0 - self.last_nonce = None - - def reset_retry_count(self): - self.retried = 0 - - def http_error_auth_reqed(self, auth_header, host, req, headers): - authreq = headers.get(auth_header, None) - if self.retried > 5: - # Don't fail endlessly - if we failed once, we'll probably - # fail a second time. Hm. Unless the Password Manager is - # prompting for the information. Crap. This isn't great - # but it's better than the current 'repeat until recursion - # depth exceeded' approach <wink> - raise HTTPError(req.full_url, 401, "digest auth failed", - headers, None) - else: - self.retried += 1 - if authreq: - scheme = authreq.split()[0] - if scheme.lower() == 'digest': - return self.retry_http_digest_auth(req, authreq) - elif scheme.lower() != 'basic': - raise ValueError("AbstractDigestAuthHandler does not support" - " the following scheme: '%s'" % scheme) - - def retry_http_digest_auth(self, req, auth): - token, challenge = auth.split(' ', 1) - chal = parse_keqv_list(filter(None, parse_http_list(challenge))) - auth = self.get_authorization(req, chal) - if auth: - auth_val = 'Digest %s' % auth - if req.headers.get(self.auth_header, None) == auth_val: - return None - req.add_unredirected_header(self.auth_header, auth_val) - resp = self.parent.open(req, timeout=req.timeout) - return resp - - def get_cnonce(self, nonce): - # The cnonce-value is an opaque - # quoted string value provided by the client and used by both client - # and server to avoid chosen plaintext attacks, to provide mutual - # authentication, and to provide some message integrity protection. - # This isn't a fabulous effort, but it's probably Good Enough. - s = "%s:%s:%s:" % (self.nonce_count, nonce, time.ctime()) - b = s.encode("ascii") + _randombytes(8) - dig = hashlib.sha1(b).hexdigest() - return dig[:16] - - def get_authorization(self, req, chal): - try: - realm = chal['realm'] - nonce = chal['nonce'] - qop = chal.get('qop') - algorithm = chal.get('algorithm', 'MD5') - # mod_digest doesn't send an opaque, even though it isn't - # supposed to be optional - opaque = chal.get('opaque', None) - except KeyError: - return None - - H, KD = self.get_algorithm_impls(algorithm) - if H is None: - return None - - user, pw = self.passwd.find_user_password(realm, req.full_url) - if user is None: - return None - - # XXX not implemented yet - if req.data is not None: - entdig = self.get_entity_digest(req.data, chal) - else: - entdig = None - - A1 = "%s:%s:%s" % (user, realm, pw) - A2 = "%s:%s" % (req.get_method(), - # XXX selector: what about proxies and full urls - req.selector) - # NOTE: As per RFC 2617, when server sends "auth,auth-int", the client could use either `auth` - # or `auth-int` to the response back. we use `auth` to send the response back. - if qop is None: - respdig = KD(H(A1), "%s:%s" % (nonce, H(A2))) - elif 'auth' in qop.split(','): - if nonce == self.last_nonce: - self.nonce_count += 1 - else: - self.nonce_count = 1 - self.last_nonce = nonce - ncvalue = '%08x' % self.nonce_count - cnonce = self.get_cnonce(nonce) - noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, 'auth', H(A2)) - respdig = KD(H(A1), noncebit) - else: - # XXX handle auth-int. - raise URLError("qop '%s' is not supported." % qop) - - # XXX should the partial digests be encoded too? - - base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ - 'response="%s"' % (user, realm, nonce, req.selector, - respdig) - if opaque: - base += ', opaque="%s"' % opaque - if entdig: - base += ', digest="%s"' % entdig - base += ', algorithm="%s"' % algorithm - if qop: - base += ', qop=auth, nc=%s, cnonce="%s"' % (ncvalue, cnonce) - return base - - def get_algorithm_impls(self, algorithm): - # algorithm names taken from RFC 7616 Section 6.1 - # lambdas assume digest modules are imported at the top level - if algorithm == 'MD5': - H = lambda x: hashlib.md5(x.encode("ascii")).hexdigest() - elif algorithm == 'SHA': # non-standard, retained for compatibility. - H = lambda x: hashlib.sha1(x.encode("ascii")).hexdigest() - elif algorithm == 'SHA-256': - H = lambda x: hashlib.sha256(x.encode("ascii")).hexdigest() - # XXX MD5-sess - else: - raise ValueError("Unsupported digest authentication " - "algorithm %r" % algorithm) - KD = lambda s, d: H("%s:%s" % (s, d)) - return H, KD - - def get_entity_digest(self, data, chal): - # XXX not implemented yet - return None - - -class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): - """An authentication protocol defined by RFC 2069 - - Digest authentication improves on basic authentication because it - does not transmit passwords in the clear. - """ - - auth_header = 'Authorization' - handler_order = 490 # before Basic auth - - def http_error_401(self, req, fp, code, msg, headers): - host = urlparse(req.full_url)[1] - retry = self.http_error_auth_reqed('www-authenticate', - host, req, headers) - self.reset_retry_count() - return retry - - -class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): - - auth_header = 'Proxy-Authorization' - handler_order = 490 # before Basic auth - - def http_error_407(self, req, fp, code, msg, headers): - host = req.host - retry = self.http_error_auth_reqed('proxy-authenticate', - host, req, headers) - self.reset_retry_count() - return retry - -class AbstractHTTPHandler(BaseHandler): - - def __init__(self, debuglevel=None): - self._debuglevel = debuglevel if debuglevel is not None else http.client.HTTPConnection.debuglevel - - def set_http_debuglevel(self, level): - self._debuglevel = level - - def _get_content_length(self, request): - return http.client.HTTPConnection._get_content_length( - request.data, - request.get_method()) - - def do_request_(self, request): - host = request.host - if not host: - raise URLError('no host given') - - if request.data is not None: # POST - data = request.data - if isinstance(data, str): - msg = "POST data should be bytes, an iterable of bytes, " \ - "or a file object. It cannot be of type str." - raise TypeError(msg) - if not request.has_header('Content-type'): - request.add_unredirected_header( - 'Content-type', - 'application/x-www-form-urlencoded') - if (not request.has_header('Content-length') - and not request.has_header('Transfer-encoding')): - content_length = self._get_content_length(request) - if content_length is not None: - request.add_unredirected_header( - 'Content-length', str(content_length)) - else: - request.add_unredirected_header( - 'Transfer-encoding', 'chunked') - - sel_host = host - if request.has_proxy(): - scheme, sel = _splittype(request.selector) - sel_host, sel_path = _splithost(sel) - if not request.has_header('Host'): - request.add_unredirected_header('Host', sel_host) - for name, value in self.parent.addheaders: - name = name.capitalize() - if not request.has_header(name): - request.add_unredirected_header(name, value) - - return request - - def do_open(self, http_class, req, **http_conn_args): - """Return an HTTPResponse object for the request, using http_class. - - http_class must implement the HTTPConnection API from http.client. - """ - host = req.host - if not host: - raise URLError('no host given') - - # will parse host:port - h = http_class(host, timeout=req.timeout, **http_conn_args) - h.set_debuglevel(self._debuglevel) - - headers = dict(req.unredirected_hdrs) - headers.update({k: v for k, v in req.headers.items() - if k not in headers}) - - # TODO(jhylton): Should this be redesigned to handle - # persistent connections? - - # We want to make an HTTP/1.1 request, but the addinfourl - # class isn't prepared to deal with a persistent connection. - # It will try to read all remaining data from the socket, - # which will block while the server waits for the next request. - # So make sure the connection gets closed after the (only) - # request. - headers["Connection"] = "close" - headers = {name.title(): val for name, val in headers.items()} - - if req._tunnel_host: - tunnel_headers = {} - proxy_auth_hdr = "Proxy-Authorization" - if proxy_auth_hdr in headers: - tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] - # Proxy-Authorization should not be sent to origin - # server. - del headers[proxy_auth_hdr] - h.set_tunnel(req._tunnel_host, headers=tunnel_headers) - - try: - try: - h.request(req.get_method(), req.selector, req.data, headers, - encode_chunked=req.has_header('Transfer-encoding')) - except OSError as err: # timeout error - raise URLError(err) - r = h.getresponse() - except: - h.close() - raise - - # If the server does not send us a 'Connection: close' header, - # HTTPConnection assumes the socket should be left open. Manually - # mark the socket to be closed when this response object goes away. - if h.sock: - h.sock.close() - h.sock = None - - r.url = req.get_full_url() - # This line replaces the .msg attribute of the HTTPResponse - # with .headers, because urllib clients expect the response to - # have the reason in .msg. It would be good to mark this - # attribute is deprecated and get then to use info() or - # .headers. - r.msg = r.reason - return r - - -class HTTPHandler(AbstractHTTPHandler): - - def http_open(self, req): - return self.do_open(http.client.HTTPConnection, req) - - http_request = AbstractHTTPHandler.do_request_ - -if hasattr(http.client, 'HTTPSConnection'): - - class HTTPSHandler(AbstractHTTPHandler): - - def __init__(self, debuglevel=None, context=None, check_hostname=None): - debuglevel = debuglevel if debuglevel is not None else http.client.HTTPSConnection.debuglevel - AbstractHTTPHandler.__init__(self, debuglevel) - if context is None: - http_version = http.client.HTTPSConnection._http_vsn - context = http.client._create_https_context(http_version) - if check_hostname is not None: - context.check_hostname = check_hostname - self._context = context - - def https_open(self, req): - return self.do_open(http.client.HTTPSConnection, req, - context=self._context) - - https_request = AbstractHTTPHandler.do_request_ - - __all__.append('HTTPSHandler') - -class HTTPCookieProcessor(BaseHandler): - def __init__(self, cookiejar=None): - import http.cookiejar - if cookiejar is None: - cookiejar = http.cookiejar.CookieJar() - self.cookiejar = cookiejar - - def http_request(self, request): - self.cookiejar.add_cookie_header(request) - return request - - def http_response(self, request, response): - self.cookiejar.extract_cookies(response, request) - return response - - https_request = http_request - https_response = http_response - -class UnknownHandler(BaseHandler): - def unknown_open(self, req): - type = req.type - raise URLError('unknown url type: %s' % type) - -def parse_keqv_list(l): - """Parse list of key=value strings where keys are not duplicated.""" - parsed = {} - for elt in l: - k, v = elt.split('=', 1) - if v[0] == '"' and v[-1] == '"': - v = v[1:-1] - parsed[k] = v - return parsed - -def parse_http_list(s): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Neither commas nor quotes count if they are escaped. - Only double-quotes count, not single-quotes. - """ - res = [] - part = '' - - escape = quote = False - for cur in s: - if escape: - part += cur - escape = False - continue - if quote: - if cur == '\\': - escape = True - continue - elif cur == '"': - quote = False - part += cur - continue - - if cur == ',': - res.append(part) - part = '' - continue - - if cur == '"': - quote = True - - part += cur - - # append last part - if part: - res.append(part) - - return [part.strip() for part in res] - -class FileHandler(BaseHandler): - # names for the localhost - names = None - def get_names(self): - if FileHandler.names is None: - try: - FileHandler.names = tuple( - socket.gethostbyname_ex('localhost')[2] + - socket.gethostbyname_ex(socket.gethostname())[2]) - except socket.gaierror: - FileHandler.names = (socket.gethostbyname('localhost'),) - return FileHandler.names - - # not entirely sure what the rules are here - def open_local_file(self, req): - import email.utils - import mimetypes - localfile = url2pathname(req.full_url, require_scheme=True, resolve_host=True) - try: - stats = os.stat(localfile) - size = stats.st_size - modified = email.utils.formatdate(stats.st_mtime, usegmt=True) - mtype = mimetypes.guess_file_type(localfile)[0] - headers = email.message_from_string( - 'Content-type: %s\nContent-length: %d\nLast-modified: %s\n' % - (mtype or 'text/plain', size, modified)) - origurl = pathname2url(localfile, add_scheme=True) - return addinfourl(open(localfile, 'rb'), headers, origurl) - except OSError as exp: - raise URLError(exp, exp.filename) - - file_open = open_local_file - -def _is_local_authority(authority, resolve): - # Compare hostnames - if not authority or authority == 'localhost': - return True - try: - hostname = socket.gethostname() - except (socket.gaierror, AttributeError): - pass - else: - if authority == hostname: - return True - # Compare IP addresses - if not resolve: - return False - try: - address = socket.gethostbyname(authority) - except (socket.gaierror, AttributeError, UnicodeEncodeError): - return False - return address in FileHandler().get_names() - -class FTPHandler(BaseHandler): - def ftp_open(self, req): - import ftplib - import mimetypes - host = req.host - if not host: - raise URLError('ftp error: no host given') - host, port = _splitport(host) - if port is None: - port = ftplib.FTP_PORT - else: - port = int(port) - - # username/password handling - user, host = _splituser(host) - if user: - user, passwd = _splitpasswd(user) - else: - passwd = None - host = unquote(host) - user = user or '' - passwd = passwd or '' - - try: - host = socket.gethostbyname(host) - except OSError as msg: - raise URLError(msg) - path, attrs = _splitattr(req.selector) - dirs = path.split('/') - dirs = list(map(unquote, dirs)) - dirs, file = dirs[:-1], dirs[-1] - if dirs and not dirs[0]: - dirs = dirs[1:] - fw = None - try: - fw = self.connect_ftp(user, passwd, host, port, dirs, req.timeout) - type = file and 'I' or 'D' - for attr in attrs: - attr, value = _splitvalue(attr) - if attr.lower() == 'type' and \ - value in ('a', 'A', 'i', 'I', 'd', 'D'): - type = value.upper() - fp, retrlen = fw.retrfile(file, type) - headers = "" - mtype = mimetypes.guess_type(req.full_url)[0] - if mtype: - headers += "Content-type: %s\n" % mtype - if retrlen is not None and retrlen >= 0: - headers += "Content-length: %d\n" % retrlen - headers = email.message_from_string(headers) - return addinfourl(fp, headers, req.full_url) - except Exception as exp: - if fw is not None and not fw.keepalive: - fw.close() - if isinstance(exp, ftplib.all_errors): - raise URLError(f"ftp error: {exp}") from exp - raise - - def connect_ftp(self, user, passwd, host, port, dirs, timeout): - return ftpwrapper(user, passwd, host, port, dirs, timeout, - persistent=False) - -class CacheFTPHandler(FTPHandler): - # XXX would be nice to have pluggable cache strategies - # XXX this stuff is definitely not thread safe - def __init__(self): - self.cache = {} - self.timeout = {} - self.soonest = 0 - self.delay = 60 - self.max_conns = 16 - - def setTimeout(self, t): - self.delay = t - - def setMaxConns(self, m): - self.max_conns = m - - def connect_ftp(self, user, passwd, host, port, dirs, timeout): - key = user, host, port, '/'.join(dirs), timeout - conn = self.cache.get(key) - if conn is None or not conn.keepalive: - if conn is not None: - conn.close() - conn = self.cache[key] = ftpwrapper(user, passwd, host, port, - dirs, timeout) - self.timeout[key] = time.time() + self.delay - self.check_cache() - return conn - - def check_cache(self): - # first check for old ones - t = time.time() - if self.soonest <= t: - for k, v in list(self.timeout.items()): - if v < t: - self.cache[k].close() - del self.cache[k] - del self.timeout[k] - self.soonest = min(list(self.timeout.values())) - - # then check the size - if len(self.cache) == self.max_conns: - for k, v in list(self.timeout.items()): - if v == self.soonest: - del self.cache[k] - del self.timeout[k] - break - self.soonest = min(list(self.timeout.values())) - - def clear_cache(self): - for conn in self.cache.values(): - conn.close() - self.cache.clear() - self.timeout.clear() - -class DataHandler(BaseHandler): - def data_open(self, req): - # data URLs as specified in RFC 2397. - # - # ignores POSTed data - # - # syntax: - # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data - # mediatype := [ type "/" subtype ] *( ";" parameter ) - # data := *urlchar - # parameter := attribute "=" value - url = req.full_url - - scheme, data = url.split(":",1) - mediatype, data = data.split(",",1) - - # Disallow control characters within mediatype. - if re.search(r"[\x00-\x1F\x7F]", mediatype): - raise ValueError( - "Control characters not allowed in data: mediatype") - - # even base64 encoded data URLs might be quoted so unquote in any case: - data = unquote_to_bytes(data) - if mediatype.endswith(";base64"): - data = base64.decodebytes(data) - mediatype = mediatype[:-7] - - if not mediatype: - mediatype = "text/plain;charset=US-ASCII" - - headers = email.message_from_string("Content-type: %s\nContent-length: %d\n" % - (mediatype, len(data))) - - return addinfourl(io.BytesIO(data), headers, url) - - -# Code moved from the old urllib module - -def url2pathname(url, *, require_scheme=False, resolve_host=False): - """Convert the given file URL to a local file system path. - - The 'file:' scheme prefix must be omitted unless *require_scheme* - is set to true. - - The URL authority may be resolved with gethostbyname() if - *resolve_host* is set to true. - """ - if not require_scheme: - url = 'file:' + url - scheme, authority, url = urlsplit(url)[:3] # Discard query and fragment. - if scheme != 'file': - raise URLError("URL is missing a 'file:' scheme") - if os.name == 'nt': - if authority[1:2] == ':': - # e.g. file://c:/file.txt - url = authority + url - elif not _is_local_authority(authority, resolve_host): - # e.g. file://server/share/file.txt - url = '//' + authority + url - elif url[:3] == '///': - # e.g. file://///server/share/file.txt - url = url[1:] - else: - if url[:1] == '/' and url[2:3] in (':', '|'): - # Skip past extra slash before DOS drive in URL path. - url = url[1:] - if url[1:2] == '|': - # Older URLs use a pipe after a drive letter - url = url[:1] + ':' + url[2:] - url = url.replace('/', '\\') - elif not _is_local_authority(authority, resolve_host): - raise URLError("file:// scheme is supported only on localhost") - encoding = sys.getfilesystemencoding() - errors = sys.getfilesystemencodeerrors() - return unquote(url, encoding=encoding, errors=errors) - - -def pathname2url(pathname, *, add_scheme=False): - """Convert the given local file system path to a file URL. - - The 'file:' scheme prefix is omitted unless *add_scheme* - is set to true. - """ - if os.name == 'nt': - pathname = pathname.replace('\\', '/') - encoding = sys.getfilesystemencoding() - errors = sys.getfilesystemencodeerrors() - scheme = 'file:' if add_scheme else '' - drive, root, tail = os.path.splitroot(pathname) - if drive: - # First, clean up some special forms. We are going to sacrifice the - # additional information anyway - if drive[:4] == '//?/': - drive = drive[4:] - if drive[:4].upper() == 'UNC/': - drive = '//' + drive[4:] - if drive[1:] == ':': - # DOS drive specified. Add three slashes to the start, producing - # an authority section with a zero-length authority, and a path - # section starting with a single slash. - drive = '///' + drive - drive = quote(drive, encoding=encoding, errors=errors, safe='/:') - elif root: - # Add explicitly empty authority to absolute path. If the path - # starts with exactly one slash then this change is mostly - # cosmetic, but if it begins with two or more slashes then this - # avoids interpreting the path as a URL authority. - root = '//' + root - tail = quote(tail, encoding=encoding, errors=errors) - return scheme + drive + root + tail - - -# Utility functions - -_localhost = None -def localhost(): - """Return the IP address of the magic hostname 'localhost'.""" - global _localhost - if _localhost is None: - _localhost = socket.gethostbyname('localhost') - return _localhost - -_thishost = None -def thishost(): - """Return the IP addresses of the current host.""" - global _thishost - if _thishost is None: - try: - _thishost = tuple(socket.gethostbyname_ex(socket.gethostname())[2]) - except socket.gaierror: - _thishost = tuple(socket.gethostbyname_ex('localhost')[2]) - return _thishost - -_ftperrors = None -def ftperrors(): - """Return the set of errors raised by the FTP class.""" - global _ftperrors - if _ftperrors is None: - import ftplib - _ftperrors = ftplib.all_errors - return _ftperrors - -_noheaders = None -def noheaders(): - """Return an empty email Message object.""" - global _noheaders - if _noheaders is None: - _noheaders = email.message_from_string("") - return _noheaders - - -# Utility classes - -class ftpwrapper: - """Class used by open_ftp() for cache of open FTP connections.""" - - def __init__(self, user, passwd, host, port, dirs, timeout=None, - persistent=True): - self.user = user - self.passwd = passwd - self.host = host - self.port = port - self.dirs = dirs - self.timeout = timeout - self.refcount = 0 - self.keepalive = persistent - try: - self.init() - except: - self.close() - raise - - def init(self): - import ftplib - self.busy = 0 - self.ftp = ftplib.FTP() - self.ftp.connect(self.host, self.port, self.timeout) - self.ftp.login(self.user, self.passwd) - _target = '/'.join(self.dirs) - self.ftp.cwd(_target) - - def retrfile(self, file, type): - import ftplib - self.endtransfer() - if type in ('d', 'D'): cmd = 'TYPE A'; isdir = 1 - else: cmd = 'TYPE ' + type; isdir = 0 - try: - self.ftp.voidcmd(cmd) - except ftplib.all_errors: - self.init() - self.ftp.voidcmd(cmd) - conn = None - if file and not isdir: - # Try to retrieve as a file - try: - cmd = 'RETR ' + file - conn, retrlen = self.ftp.ntransfercmd(cmd) - except ftplib.error_perm as reason: - if str(reason)[:3] != '550': - raise URLError(f'ftp error: {reason}') from reason - if not conn: - # Set transfer mode to ASCII! - self.ftp.voidcmd('TYPE A') - # Try a directory listing. Verify that directory exists. - if file: - pwd = self.ftp.pwd() - try: - try: - self.ftp.cwd(file) - except ftplib.error_perm as reason: - raise URLError('ftp error: %r' % reason) from reason - finally: - self.ftp.cwd(pwd) - cmd = 'LIST ' + file - else: - cmd = 'LIST' - conn, retrlen = self.ftp.ntransfercmd(cmd) - self.busy = 1 - - ftpobj = addclosehook(conn.makefile('rb'), self.file_close) - self.refcount += 1 - conn.close() - # Pass back both a suitably decorated object and a retrieval length - return (ftpobj, retrlen) - - def endtransfer(self): - if not self.busy: - return - self.busy = 0 - try: - self.ftp.voidresp() - except ftperrors(): - pass - - def close(self): - self.keepalive = False - if self.refcount <= 0: - self.real_close() - - def file_close(self): - self.endtransfer() - self.refcount -= 1 - if self.refcount <= 0 and not self.keepalive: - self.real_close() - - def real_close(self): - self.endtransfer() - try: - self.ftp.close() - except ftperrors(): - pass - -# Proxy handling -def getproxies_environment(): - """Return a dictionary of scheme -> proxy server URL mappings. - - Scan the environment for variables named <scheme>_proxy; - this seems to be the standard convention. - """ - # in order to prefer lowercase variables, process environment in - # two passes: first matches any, second pass matches lowercase only - - # select only environment variables which end in (after making lowercase) _proxy - proxies = {} - environment = [] - for name in os.environ: - # fast screen underscore position before more expensive case-folding - if len(name) > 5 and name[-6] == "_" and name[-5:].lower() == "proxy": - value = os.environ[name] - proxy_name = name[:-6].lower() - environment.append((name, value, proxy_name)) - if value: - proxies[proxy_name] = value - # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY - # (non-all-lowercase) as it may be set from the web server by a "Proxy:" - # header from the client - # If "proxy" is lowercase, it will still be used thanks to the next block - if 'REQUEST_METHOD' in os.environ: - proxies.pop('http', None) - for name, value, proxy_name in environment: - # not case-folded, checking here for lower-case env vars only - if name[-6:] == '_proxy': - if value: - proxies[proxy_name] = value - else: - proxies.pop(proxy_name, None) - return proxies - -def proxy_bypass_environment(host, proxies=None): - """Test if proxies should not be used for a particular host. - - Checks the proxy dict for the value of no_proxy, which should - be a list of comma separated DNS suffixes, or '*' for all hosts. - - """ - if proxies is None: - proxies = getproxies_environment() - # don't bypass, if no_proxy isn't specified - try: - no_proxy = proxies['no'] - except KeyError: - return False - # '*' is special case for always bypass - if no_proxy == '*': - return True - host = host.lower() - # strip port off host - hostonly, port = _splitport(host) - # check if the host ends with any of the DNS suffixes - for name in no_proxy.split(','): - name = name.strip() - if name: - name = name.lstrip('.') # ignore leading dots - name = name.lower() - if hostonly == name or host == name: - return True - name = '.' + name - if hostonly.endswith(name) or host.endswith(name): - return True - # otherwise, don't bypass - return False - - -# This code tests an OSX specific data structure but is testable on all -# platforms -def _proxy_bypass_macosx_sysconf(host, proxy_settings): - """ - Return True iff this host shouldn't be accessed using a proxy - - This function uses the MacOSX framework SystemConfiguration - to fetch the proxy information. - - proxy_settings come from _scproxy._get_proxy_settings or get mocked ie: - { 'exclude_simple': bool, - 'exceptions': ['foo.bar', '*.bar.com', '127.0.0.1', '10.1', '10.0/16'] - } - """ - from fnmatch import fnmatch - from ipaddress import AddressValueError, IPv4Address - - hostonly, port = _splitport(host) - - def ip2num(ipAddr): - parts = ipAddr.split('.') - parts = list(map(int, parts)) - if len(parts) != 4: - parts = (parts + [0, 0, 0, 0])[:4] - return (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3] - - # Check for simple host names: - if '.' not in host: - if proxy_settings['exclude_simple']: - return True - - hostIP = None - try: - hostIP = int(IPv4Address(hostonly)) - except AddressValueError: - pass - - for value in proxy_settings.get('exceptions', ()): - # Items in the list are strings like these: *.local, 169.254/16 - if not value: continue - - m = re.match(r"(\d+(?:\.\d+)*)(/\d+)?", value) - if m is not None and hostIP is not None: - base = ip2num(m.group(1)) - mask = m.group(2) - if mask is None: - mask = 8 * (m.group(1).count('.') + 1) - else: - mask = int(mask[1:]) - - if mask < 0 or mask > 32: - # System libraries ignore invalid prefix lengths - continue - - mask = 32 - mask - - if (hostIP >> mask) == (base >> mask): - return True - - elif fnmatch(host, value): - return True - - return False - - -# Same as _proxy_bypass_macosx_sysconf, testable on all platforms -def _proxy_bypass_winreg_override(host, override): - """Return True if the host should bypass the proxy server. - - The proxy override list is obtained from the Windows - Internet settings proxy override registry value. - - An example of a proxy override value is: - "www.example.com;*.example.net; 192.168.0.1" - """ - from fnmatch import fnmatch - - host, _ = _splitport(host) - proxy_override = override.split(';') - for test in proxy_override: - test = test.strip() - # "<local>" should bypass the proxy server for all intranet addresses - if test == '<local>': - if '.' not in host: - return True - elif fnmatch(host, test): - return True - return False - - -if sys.platform == 'darwin': - from _scproxy import _get_proxy_settings, _get_proxies - - def proxy_bypass_macosx_sysconf(host): - proxy_settings = _get_proxy_settings() - return _proxy_bypass_macosx_sysconf(host, proxy_settings) - - def getproxies_macosx_sysconf(): - """Return a dictionary of scheme -> proxy server URL mappings. - - This function uses the MacOSX framework SystemConfiguration - to fetch the proxy information. - """ - return _get_proxies() - - - - def proxy_bypass(host): - """Return True, if host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or from the MacOSX framework SystemConfiguration. - - """ - proxies = getproxies_environment() - if proxies: - return proxy_bypass_environment(host, proxies) - else: - return proxy_bypass_macosx_sysconf(host) - - def getproxies(): - return getproxies_environment() or getproxies_macosx_sysconf() - - -elif os.name == 'nt': - def getproxies_registry(): - """Return a dictionary of scheme -> proxy server URL mappings. - - Win32 uses the registry to store proxies. - - """ - proxies = {} - try: - import winreg - except ImportError: - # Std module, so should be around - but you never know! - return proxies - try: - internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER, - r'Software\Microsoft\Windows\CurrentVersion\Internet Settings') - proxyEnable = winreg.QueryValueEx(internetSettings, - 'ProxyEnable')[0] - if proxyEnable: - # Returned as Unicode but problems if not converted to ASCII - proxyServer = str(winreg.QueryValueEx(internetSettings, - 'ProxyServer')[0]) - if '=' not in proxyServer and ';' not in proxyServer: - # Use one setting for all protocols. - proxyServer = 'http={0};https={0};ftp={0}'.format(proxyServer) - for p in proxyServer.split(';'): - protocol, address = p.split('=', 1) - # See if address has a type:// prefix - if not re.match('(?:[^/:]+)://', address): - # Add type:// prefix to address without specifying type - if protocol in ('http', 'https', 'ftp'): - # The default proxy type of Windows is HTTP - address = 'http://' + address - elif protocol == 'socks': - address = 'socks://' + address - proxies[protocol] = address - # Use SOCKS proxy for HTTP(S) protocols - if proxies.get('socks'): - # The default SOCKS proxy type of Windows is SOCKS4 - address = re.sub(r'^socks://', 'socks4://', proxies['socks']) - proxies['http'] = proxies.get('http') or address - proxies['https'] = proxies.get('https') or address - internetSettings.Close() - except (OSError, ValueError, TypeError): - # Either registry key not found etc, or the value in an - # unexpected format. - # proxies already set up to be empty so nothing to do - pass - return proxies - - def getproxies(): - """Return a dictionary of scheme -> proxy server URL mappings. - - Returns settings gathered from the environment, if specified, - or the registry. - - """ - return getproxies_environment() or getproxies_registry() - - def proxy_bypass_registry(host): - try: - import winreg - except ImportError: - # Std modules, so should be around - but you never know! - return False - try: - internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER, - r'Software\Microsoft\Windows\CurrentVersion\Internet Settings') - proxyEnable = winreg.QueryValueEx(internetSettings, - 'ProxyEnable')[0] - proxyOverride = str(winreg.QueryValueEx(internetSettings, - 'ProxyOverride')[0]) - # ^^^^ Returned as Unicode but problems if not converted to ASCII - except OSError: - return False - if not proxyEnable or not proxyOverride: - return False - return _proxy_bypass_winreg_override(host, proxyOverride) - - def proxy_bypass(host): - """Return True, if host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or the registry. - - """ - proxies = getproxies_environment() - if proxies: - return proxy_bypass_environment(host, proxies) - else: - return proxy_bypass_registry(host) - -else: - # By default use environment variables - getproxies = getproxies_environment - proxy_bypass = proxy_bypass_environment diff --git a/Python314_4_x86_Template/Lib/urllib/response.py b/Python314_4_x86_Template/Lib/urllib/response.py deleted file mode 100644 index 5a2c3cc78..000000000 --- a/Python314_4_x86_Template/Lib/urllib/response.py +++ /dev/null @@ -1,84 +0,0 @@ -"""Response classes used by urllib. - -The base class, addbase, defines a minimal file-like interface, -including read() and readline(). The typical response object is an -addinfourl instance, which defines an info() method that returns -headers and a geturl() method that returns the url. -""" - -import tempfile - -__all__ = ['addbase', 'addclosehook', 'addinfo', 'addinfourl'] - - -class addbase(tempfile._TemporaryFileWrapper): - """Base class for addinfo and addclosehook. Is a good idea for garbage collection.""" - - # XXX Add a method to expose the timeout on the underlying socket? - - def __init__(self, fp): - super(addbase, self).__init__(fp, '<urllib response>', delete=False) - # Keep reference around as this was part of the original API. - self.fp = fp - - def __repr__(self): - return '<%s at %r whose fp = %r>' % (self.__class__.__name__, - id(self), self.file) - - def __enter__(self): - if self.fp.closed: - raise ValueError("I/O operation on closed file") - return self - - def __exit__(self, type, value, traceback): - self.close() - - -class addclosehook(addbase): - """Class to add a close hook to an open file.""" - - def __init__(self, fp, closehook, *hookargs): - super(addclosehook, self).__init__(fp) - self.closehook = closehook - self.hookargs = hookargs - - def close(self): - try: - closehook = self.closehook - hookargs = self.hookargs - if closehook: - self.closehook = None - self.hookargs = None - closehook(*hookargs) - finally: - super(addclosehook, self).close() - - -class addinfo(addbase): - """class to add an info() method to an open file.""" - - def __init__(self, fp, headers): - super(addinfo, self).__init__(fp) - self.headers = headers - - def info(self): - return self.headers - - -class addinfourl(addinfo): - """class to add info() and geturl() methods to an open file.""" - - def __init__(self, fp, headers, url, code=None): - super(addinfourl, self).__init__(fp, headers) - self.url = url - self.code = code - - @property - def status(self): - return self.code - - def getcode(self): - return self.code - - def geturl(self): - return self.url diff --git a/Python314_4_x86_Template/Lib/urllib/robotparser.py b/Python314_4_x86_Template/Lib/urllib/robotparser.py deleted file mode 100644 index 4009fd6b5..000000000 --- a/Python314_4_x86_Template/Lib/urllib/robotparser.py +++ /dev/null @@ -1,288 +0,0 @@ -""" robotparser.py - - Copyright (C) 2000 Bastian Kleineidam - - You can choose between two licenses when using this package: - 1) GNU GPLv2 - 2) PSF license for Python 2.2 - - The robots.txt Exclusion Protocol is implemented as specified in - http://www.robotstxt.org/norobots-rfc.txt -""" - -import collections -import re -import urllib.error -import urllib.parse -import urllib.request - -__all__ = ["RobotFileParser"] - -RequestRate = collections.namedtuple("RequestRate", "requests seconds") - - -def normalize(path): - unquoted = urllib.parse.unquote(path, errors='surrogateescape') - return urllib.parse.quote(unquoted, errors='surrogateescape') - -def normalize_path(path): - path, sep, query = path.partition('?') - path = normalize(path) - if sep: - query = re.sub(r'[^=&]+', lambda m: normalize(m[0]), query) - path += '?' + query - return path - - -class RobotFileParser: - """ This class provides a set of methods to read, parse and answer - questions about a single robots.txt file. - - """ - - def __init__(self, url=''): - self.entries = [] - self.sitemaps = [] - self.default_entry = None - self.disallow_all = False - self.allow_all = False - self.set_url(url) - self.last_checked = 0 - - def mtime(self): - """Returns the time the robots.txt file was last fetched. - - This is useful for long-running web spiders that need to - check for new robots.txt files periodically. - - """ - return self.last_checked - - def modified(self): - """Sets the time the robots.txt file was last fetched to the - current time. - - """ - import time - self.last_checked = time.time() - - def set_url(self, url): - """Sets the URL referring to a robots.txt file.""" - self.url = url - self.host, self.path = urllib.parse.urlsplit(url)[1:3] - - def read(self): - """Reads the robots.txt URL and feeds it to the parser.""" - try: - f = urllib.request.urlopen(self.url) - except urllib.error.HTTPError as err: - if err.code in (401, 403): - self.disallow_all = True - elif err.code >= 400 and err.code < 500: - self.allow_all = True - err.close() - else: - raw = f.read() - self.parse(raw.decode("utf-8", "surrogateescape").splitlines()) - - def _add_entry(self, entry): - if "*" in entry.useragents: - # the default entry is considered last - if self.default_entry is None: - # the first default entry wins - self.default_entry = entry - else: - self.entries.append(entry) - - def parse(self, lines): - """Parse the input lines from a robots.txt file. - - We allow that a user-agent: line is not preceded by - one or more blank lines. - """ - # states: - # 0: start state - # 1: saw user-agent line - # 2: saw an allow or disallow line - state = 0 - entry = Entry() - - self.modified() - for line in lines: - if not line: - if state == 1: - entry = Entry() - state = 0 - elif state == 2: - self._add_entry(entry) - entry = Entry() - state = 0 - # remove optional comment and strip line - i = line.find('#') - if i >= 0: - line = line[:i] - line = line.strip() - if not line: - continue - line = line.split(':', 1) - if len(line) == 2: - line[0] = line[0].strip().lower() - line[1] = line[1].strip() - if line[0] == "user-agent": - if state == 2: - self._add_entry(entry) - entry = Entry() - entry.useragents.append(line[1]) - state = 1 - elif line[0] == "disallow": - if state != 0: - entry.rulelines.append(RuleLine(line[1], False)) - state = 2 - elif line[0] == "allow": - if state != 0: - entry.rulelines.append(RuleLine(line[1], True)) - state = 2 - elif line[0] == "crawl-delay": - if state != 0: - # before trying to convert to int we need to make - # sure that robots.txt has valid syntax otherwise - # it will crash - if line[1].strip().isdigit(): - entry.delay = int(line[1]) - state = 2 - elif line[0] == "request-rate": - if state != 0: - numbers = line[1].split('/') - # check if all values are sane - if (len(numbers) == 2 and numbers[0].strip().isdigit() - and numbers[1].strip().isdigit()): - entry.req_rate = RequestRate(int(numbers[0]), int(numbers[1])) - state = 2 - elif line[0] == "sitemap": - # According to http://www.sitemaps.org/protocol.html - # "This directive is independent of the user-agent line, - # so it doesn't matter where you place it in your file." - # Therefore we do not change the state of the parser. - self.sitemaps.append(line[1]) - if state == 2: - self._add_entry(entry) - - def can_fetch(self, useragent, url): - """using the parsed robots.txt decide if useragent can fetch url""" - if self.disallow_all: - return False - if self.allow_all: - return True - # Until the robots.txt file has been read or found not - # to exist, we must assume that no url is allowable. - # This prevents false positives when a user erroneously - # calls can_fetch() before calling read(). - if not self.last_checked: - return False - # search for given user agent matches - # the first match counts - # TODO: The private API is used in order to preserve an empty query. - # This is temporary until the public API starts supporting this feature. - parsed_url = urllib.parse._urlsplit(url, '') - url = urllib.parse._urlunsplit(None, None, *parsed_url[2:]) - url = normalize_path(url) - if not url: - url = "/" - for entry in self.entries: - if entry.applies_to(useragent): - return entry.allowance(url) - # try the default entry last - if self.default_entry: - return self.default_entry.allowance(url) - # agent not found ==> access granted - return True - - def crawl_delay(self, useragent): - if not self.mtime(): - return None - for entry in self.entries: - if entry.applies_to(useragent): - return entry.delay - if self.default_entry: - return self.default_entry.delay - return None - - def request_rate(self, useragent): - if not self.mtime(): - return None - for entry in self.entries: - if entry.applies_to(useragent): - return entry.req_rate - if self.default_entry: - return self.default_entry.req_rate - return None - - def site_maps(self): - if not self.sitemaps: - return None - return self.sitemaps - - def __str__(self): - entries = self.entries - if self.default_entry is not None: - entries = entries + [self.default_entry] - return '\n\n'.join(map(str, entries)) - -class RuleLine: - """A rule line is a single "Allow:" (allowance==True) or "Disallow:" - (allowance==False) followed by a path.""" - def __init__(self, path, allowance): - if path == '' and not allowance: - # an empty value means allow all - allowance = True - self.path = normalize_path(path) - self.allowance = allowance - - def applies_to(self, filename): - return self.path == "*" or filename.startswith(self.path) - - def __str__(self): - return ("Allow" if self.allowance else "Disallow") + ": " + self.path - - -class Entry: - """An entry has one or more user-agents and zero or more rulelines""" - def __init__(self): - self.useragents = [] - self.rulelines = [] - self.delay = None - self.req_rate = None - - def __str__(self): - ret = [] - for agent in self.useragents: - ret.append(f"User-agent: {agent}") - if self.delay is not None: - ret.append(f"Crawl-delay: {self.delay}") - if self.req_rate is not None: - rate = self.req_rate - ret.append(f"Request-rate: {rate.requests}/{rate.seconds}") - ret.extend(map(str, self.rulelines)) - return '\n'.join(ret) - - def applies_to(self, useragent): - """check if this entry applies to the specified agent""" - # split the name token and make it lower case - useragent = useragent.split("/")[0].lower() - for agent in self.useragents: - if agent == '*': - # we have the catch-all agent - return True - agent = agent.lower() - if agent in useragent: - return True - return False - - def allowance(self, filename): - """Preconditions: - - our agent applies to this entry - - filename is URL encoded""" - for line in self.rulelines: - if line.applies_to(filename): - return line.allowance - return True diff --git a/Python314_4_x86_Template/Lib/uuid.py b/Python314_4_x86_Template/Lib/uuid.py deleted file mode 100644 index 313f2fc46..000000000 --- a/Python314_4_x86_Template/Lib/uuid.py +++ /dev/null @@ -1,1007 +0,0 @@ -r"""UUID objects (universally unique identifiers) according to RFC 4122/9562. - -This module provides immutable UUID objects (class UUID) and functions for -generating UUIDs corresponding to a specific UUID version as specified in -RFC 4122/9562, e.g., uuid1() for UUID version 1, uuid3() for UUID version 3, -and so on. - -Note that UUID version 2 is deliberately omitted as it is outside the scope -of the RFC. - -If all you want is a unique ID, you should probably call uuid1() or uuid4(). -Note that uuid1() may compromise privacy since it creates a UUID containing -the computer's network address. uuid4() creates a random UUID. - -Typical usage: - - >>> import uuid - - # make a UUID based on the host ID and current time - >>> uuid.uuid1() # doctest: +SKIP - UUID('a8098c1a-f86e-11da-bd1a-00112444be1e') - - # make a UUID using an MD5 hash of a namespace UUID and a name - >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') - UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e') - - # make a random UUID - >>> uuid.uuid4() # doctest: +SKIP - UUID('16fd2706-8baf-433b-82eb-8c7fada847da') - - # make a UUID using a SHA-1 hash of a namespace UUID and a name - >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') - UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d') - - # make a UUID from a string of hex digits (braces and hyphens ignored) - >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}') - - # convert a UUID to a string of hex digits in standard form - >>> str(x) - '00010203-0405-0607-0809-0a0b0c0d0e0f' - - # get the raw 16 bytes of the UUID - >>> x.bytes - b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' - - # make a UUID from a 16-byte string - >>> uuid.UUID(bytes=x.bytes) - UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') - - # get the Nil UUID - >>> uuid.NIL - UUID('00000000-0000-0000-0000-000000000000') - - # get the Max UUID - >>> uuid.MAX - UUID('ffffffff-ffff-ffff-ffff-ffffffffffff') -""" - -import os -import sys -import time - -from enum import Enum, _simple_enum - - -__author__ = 'Ka-Ping Yee <ping@zesty.ca>' - -# The recognized platforms - known behaviors -if sys.platform in {'win32', 'darwin', 'emscripten', 'wasi'}: - _AIX = _LINUX = False -elif sys.platform == 'linux': - _LINUX = True - _AIX = False -else: - import platform - _platform_system = platform.system() - _AIX = _platform_system == 'AIX' - _LINUX = _platform_system in ('Linux', 'Android') - -_MAC_DELIM = b':' -_MAC_OMITS_LEADING_ZEROES = False -if _AIX: - _MAC_DELIM = b'.' - _MAC_OMITS_LEADING_ZEROES = True - -RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [ - 'reserved for NCS compatibility', 'specified in RFC 4122', - 'reserved for Microsoft compatibility', 'reserved for future definition'] - -int_ = int # The built-in int type -bytes_ = bytes # The built-in bytes type - - -@_simple_enum(Enum) -class SafeUUID: - safe = 0 - unsafe = -1 - unknown = None - - -_UINT_128_MAX = (1 << 128) - 1 -# 128-bit mask to clear the variant and version bits of a UUID integral value -_RFC_4122_CLEARFLAGS_MASK = ~((0xf000 << 64) | (0xc000 << 48)) -# RFC 4122 variant bits and version bits to activate on a UUID integral value. -_RFC_4122_VERSION_1_FLAGS = ((1 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_3_FLAGS = ((3 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_4_FLAGS = ((4 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_5_FLAGS = ((5 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_6_FLAGS = ((6 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_7_FLAGS = ((7 << 76) | (0x8000 << 48)) -_RFC_4122_VERSION_8_FLAGS = ((8 << 76) | (0x8000 << 48)) - - -class UUID: - """Instances of the UUID class represent UUIDs as specified in RFC 4122. - UUID objects are immutable, hashable, and usable as dictionary keys. - Converting a UUID to a string with str() yields something in the form - '12345678-1234-1234-1234-123456789abc'. The UUID constructor accepts - five possible forms: a similar string of hexadecimal digits, or a tuple - of six integer fields (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and - 48-bit values respectively) as an argument named 'fields', or a string - of 16 bytes (with all the integer fields in big-endian order) as an - argument named 'bytes', or a string of 16 bytes (with the first three - fields in little-endian order) as an argument named 'bytes_le', or a - single 128-bit integer as an argument named 'int'. - - UUIDs have these read-only attributes: - - bytes the UUID as a 16-byte string (containing the six - integer fields in big-endian byte order) - - bytes_le the UUID as a 16-byte string (with time_low, time_mid, - and time_hi_version in little-endian byte order) - - fields a tuple of the six integer fields of the UUID, - which are also available as six individual attributes - and two derived attributes. Those attributes are not - always relevant to all UUID versions: - - The 'time_*' attributes are only relevant to version 1. - - The 'clock_seq*' and 'node' attributes are only relevant - to versions 1 and 6. - - The 'time' attribute is only relevant to versions 1, 6 - and 7. - - time_low the first 32 bits of the UUID - time_mid the next 16 bits of the UUID - time_hi_version the next 16 bits of the UUID - clock_seq_hi_variant the next 8 bits of the UUID - clock_seq_low the next 8 bits of the UUID - node the last 48 bits of the UUID - - time the 60-bit timestamp for UUIDv1/v6, - or the 48-bit timestamp for UUIDv7 - clock_seq the 14-bit sequence number - - hex the UUID as a 32-character hexadecimal string - - int the UUID as a 128-bit integer - - urn the UUID as a URN as specified in RFC 4122/9562 - - variant the UUID variant (one of the constants RESERVED_NCS, - RFC_4122, RESERVED_MICROSOFT, or RESERVED_FUTURE) - - version the UUID version number (1 through 8, meaningful only - when the variant is RFC_4122) - - is_safe An enum indicating whether the UUID has been generated in - a way that is safe for multiprocessing applications, via - uuid_generate_time_safe(3). - """ - - __slots__ = ('int', 'is_safe', '__weakref__') - - def __init__(self, hex=None, bytes=None, bytes_le=None, fields=None, - int=None, version=None, - *, is_safe=SafeUUID.unknown): - r"""Create a UUID from either a string of 32 hexadecimal digits, - a string of 16 bytes as the 'bytes' argument, a string of 16 bytes - in little-endian order as the 'bytes_le' argument, a tuple of six - integers (32-bit time_low, 16-bit time_mid, 16-bit time_hi_version, - 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) as - the 'fields' argument, or a single 128-bit integer as the 'int' - argument. When a string of hex digits is given, curly braces, - hyphens, and a URN prefix are all optional. For example, these - expressions all yield the same UUID: - - UUID('{12345678-1234-5678-1234-567812345678}') - UUID('12345678123456781234567812345678') - UUID('urn:uuid:12345678-1234-5678-1234-567812345678') - UUID(bytes='\x12\x34\x56\x78'*4) - UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' + - '\x12\x34\x56\x78\x12\x34\x56\x78') - UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) - UUID(int=0x12345678123456781234567812345678) - - Exactly one of 'hex', 'bytes', 'bytes_le', 'fields', or 'int' must - be given. The 'version' argument is optional; if given, the resulting - UUID will have its variant and version set according to RFC 4122, - overriding the given 'hex', 'bytes', 'bytes_le', 'fields', or 'int'. - - is_safe is an enum exposed as an attribute on the instance. It - indicates whether the UUID has been generated in a way that is safe - for multiprocessing applications, via uuid_generate_time_safe(3). - """ - - if [hex, bytes, bytes_le, fields, int].count(None) != 4: - raise TypeError('one of the hex, bytes, bytes_le, fields, ' - 'or int arguments must be given') - if int is not None: - pass - elif hex is not None: - hex = hex.replace('urn:', '').replace('uuid:', '') - hex = hex.strip('{}').replace('-', '') - if len(hex) != 32: - raise ValueError('badly formed hexadecimal UUID string') - int = int_(hex, 16) - elif bytes_le is not None: - if len(bytes_le) != 16: - raise ValueError('bytes_le is not a 16-char string') - assert isinstance(bytes_le, bytes_), repr(bytes_le) - bytes = (bytes_le[4-1::-1] + bytes_le[6-1:4-1:-1] + - bytes_le[8-1:6-1:-1] + bytes_le[8:]) - int = int_.from_bytes(bytes) # big endian - elif bytes is not None: - if len(bytes) != 16: - raise ValueError('bytes is not a 16-char string') - assert isinstance(bytes, bytes_), repr(bytes) - int = int_.from_bytes(bytes) # big endian - elif fields is not None: - if len(fields) != 6: - raise ValueError('fields is not a 6-tuple') - (time_low, time_mid, time_hi_version, - clock_seq_hi_variant, clock_seq_low, node) = fields - if not 0 <= time_low < (1 << 32): - raise ValueError('field 1 out of range (need a 32-bit value)') - if not 0 <= time_mid < (1 << 16): - raise ValueError('field 2 out of range (need a 16-bit value)') - if not 0 <= time_hi_version < (1 << 16): - raise ValueError('field 3 out of range (need a 16-bit value)') - if not 0 <= clock_seq_hi_variant < (1 << 8): - raise ValueError('field 4 out of range (need an 8-bit value)') - if not 0 <= clock_seq_low < (1 << 8): - raise ValueError('field 5 out of range (need an 8-bit value)') - if not 0 <= node < (1 << 48): - raise ValueError('field 6 out of range (need a 48-bit value)') - clock_seq = (clock_seq_hi_variant << 8) | clock_seq_low - int = ((time_low << 96) | (time_mid << 80) | - (time_hi_version << 64) | (clock_seq << 48) | node) - if not 0 <= int <= _UINT_128_MAX: - raise ValueError('int is out of range (need a 128-bit value)') - if version is not None: - if not 1 <= version <= 8: - raise ValueError('illegal version number') - # clear the variant and the version number bits - int &= _RFC_4122_CLEARFLAGS_MASK - # Set the variant to RFC 4122/9562. - int |= 0x8000_0000_0000_0000 # (0x8000 << 48) - # Set the version number. - int |= version << 76 - object.__setattr__(self, 'int', int) - object.__setattr__(self, 'is_safe', is_safe) - - @classmethod - def _from_int(cls, value): - """Create a UUID from an integer *value*. Internal use only.""" - assert 0 <= value <= _UINT_128_MAX, repr(value) - self = object.__new__(cls) - object.__setattr__(self, 'int', value) - object.__setattr__(self, 'is_safe', SafeUUID.unknown) - return self - - def __getstate__(self): - d = {'int': self.int} - if self.is_safe != SafeUUID.unknown: - # is_safe is a SafeUUID instance. Return just its value, so that - # it can be un-pickled in older Python versions without SafeUUID. - d['is_safe'] = self.is_safe.value - return d - - def __setstate__(self, state): - object.__setattr__(self, 'int', state['int']) - # is_safe was added in 3.7; it is also omitted when it is "unknown" - object.__setattr__(self, 'is_safe', - SafeUUID(state['is_safe']) - if 'is_safe' in state else SafeUUID.unknown) - - def __eq__(self, other): - if isinstance(other, UUID): - return self.int == other.int - return NotImplemented - - # Q. What's the value of being able to sort UUIDs? - # A. Use them as keys in a B-Tree or similar mapping. - - def __lt__(self, other): - if isinstance(other, UUID): - return self.int < other.int - return NotImplemented - - def __gt__(self, other): - if isinstance(other, UUID): - return self.int > other.int - return NotImplemented - - def __le__(self, other): - if isinstance(other, UUID): - return self.int <= other.int - return NotImplemented - - def __ge__(self, other): - if isinstance(other, UUID): - return self.int >= other.int - return NotImplemented - - def __hash__(self): - return hash(self.int) - - def __int__(self): - return self.int - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, str(self)) - - def __setattr__(self, name, value): - raise TypeError('UUID objects are immutable') - - def __str__(self): - x = self.hex - return f'{x[:8]}-{x[8:12]}-{x[12:16]}-{x[16:20]}-{x[20:]}' - - @property - def bytes(self): - return self.int.to_bytes(16) # big endian - - @property - def bytes_le(self): - bytes = self.bytes - return (bytes[4-1::-1] + bytes[6-1:4-1:-1] + bytes[8-1:6-1:-1] + - bytes[8:]) - - @property - def fields(self): - return (self.time_low, self.time_mid, self.time_hi_version, - self.clock_seq_hi_variant, self.clock_seq_low, self.node) - - @property - def time_low(self): - return self.int >> 96 - - @property - def time_mid(self): - return (self.int >> 80) & 0xffff - - @property - def time_hi_version(self): - return (self.int >> 64) & 0xffff - - @property - def clock_seq_hi_variant(self): - return (self.int >> 56) & 0xff - - @property - def clock_seq_low(self): - return (self.int >> 48) & 0xff - - @property - def time(self): - if self.version == 6: - # time_hi (32) | time_mid (16) | ver (4) | time_lo (12) | ... (64) - time_hi = self.int >> 96 - time_lo = (self.int >> 64) & 0x0fff - return time_hi << 28 | (self.time_mid << 12) | time_lo - elif self.version == 7: - # unix_ts_ms (48) | ... (80) - return self.int >> 80 - else: - # time_lo (32) | time_mid (16) | ver (4) | time_hi (12) | ... (64) - # - # For compatibility purposes, we do not warn or raise when the - # version is not 1 (timestamp is irrelevant to other versions). - time_hi = (self.int >> 64) & 0x0fff - time_lo = self.int >> 96 - return time_hi << 48 | (self.time_mid << 32) | time_lo - - @property - def clock_seq(self): - return (((self.clock_seq_hi_variant & 0x3f) << 8) | - self.clock_seq_low) - - @property - def node(self): - return self.int & 0xffffffffffff - - @property - def hex(self): - return self.bytes.hex() - - @property - def urn(self): - return 'urn:uuid:' + str(self) - - @property - def variant(self): - if not self.int & (0x8000 << 48): - return RESERVED_NCS - elif not self.int & (0x4000 << 48): - return RFC_4122 - elif not self.int & (0x2000 << 48): - return RESERVED_MICROSOFT - else: - return RESERVED_FUTURE - - @property - def version(self): - # The version bits are only meaningful for RFC 4122/9562 UUIDs. - if self.variant == RFC_4122: - return int((self.int >> 76) & 0xf) - - -def _get_command_stdout(command, *args): - import io, os, shutil, subprocess - - try: - path_dirs = os.environ.get('PATH', os.defpath).split(os.pathsep) - path_dirs.extend(['/sbin', '/usr/sbin']) - executable = shutil.which(command, path=os.pathsep.join(path_dirs)) - if executable is None: - return None - # LC_ALL=C to ensure English output, stderr=DEVNULL to prevent output - # on stderr (Note: we don't have an example where the words we search - # for are actually localized, but in theory some system could do so.) - env = dict(os.environ) - env['LC_ALL'] = 'C' - # Empty strings will be quoted by popen so we should just omit it - if args != ('',): - command = (executable, *args) - else: - command = (executable,) - proc = subprocess.Popen(command, - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, - env=env) - if not proc: - return None - stdout, stderr = proc.communicate() - return io.BytesIO(stdout) - except (OSError, subprocess.SubprocessError): - return None - - -# For MAC (a.k.a. IEEE 802, or EUI-48) addresses, the second least significant -# bit of the first octet signifies whether the MAC address is universally (0) -# or locally (1) administered. Network cards from hardware manufacturers will -# always be universally administered to guarantee global uniqueness of the MAC -# address, but any particular machine may have other interfaces which are -# locally administered. An example of the latter is the bridge interface to -# the Touch Bar on MacBook Pros. -# -# This bit works out to be the 42nd bit counting from 1 being the least -# significant, or 1<<41. We'll prefer universally administered MAC addresses -# over locally administered ones since the former are globally unique, but -# we'll return the first of the latter found if that's all the machine has. -# -# See https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit) - -def _is_universal(mac): - return not (mac & (1 << 41)) - - -def _find_mac_near_keyword(command, args, keywords, get_word_index): - """Searches a command's output for a MAC address near a keyword. - - Each line of words in the output is case-insensitively searched for - any of the given keywords. Upon a match, get_word_index is invoked - to pick a word from the line, given the index of the match. For - example, lambda i: 0 would get the first word on the line, while - lambda i: i - 1 would get the word preceding the keyword. - """ - stdout = _get_command_stdout(command, args) - if stdout is None: - return None - - first_local_mac = None - for line in stdout: - words = line.lower().rstrip().split() - for i in range(len(words)): - if words[i] in keywords: - try: - word = words[get_word_index(i)] - mac = int(word.replace(_MAC_DELIM, b''), 16) - except (ValueError, IndexError): - # Virtual interfaces, such as those provided by - # VPNs, do not have a colon-delimited MAC address - # as expected, but a 16-byte HWAddr separated by - # dashes. These should be ignored in favor of a - # real MAC address - pass - else: - if _is_universal(mac): - return mac - first_local_mac = first_local_mac or mac - return first_local_mac or None - - -def _parse_mac(word): - # Accept 'HH:HH:HH:HH:HH:HH' MAC address (ex: '52:54:00:9d:0e:67'), - # but reject IPv6 address (ex: 'fe80::5054:ff:fe9' or '123:2:3:4:5:6:7:8'). - # - # Virtual interfaces, such as those provided by VPNs, do not have a - # colon-delimited MAC address as expected, but a 16-byte HWAddr separated - # by dashes. These should be ignored in favor of a real MAC address - parts = word.split(_MAC_DELIM) - if len(parts) != 6: - return - if _MAC_OMITS_LEADING_ZEROES: - # (Only) on AIX the macaddr value given is not prefixed by 0, e.g. - # en0 1500 link#2 fa.bc.de.f7.62.4 110854824 0 160133733 0 0 - # not - # en0 1500 link#2 fa.bc.de.f7.62.04 110854824 0 160133733 0 0 - if not all(1 <= len(part) <= 2 for part in parts): - return - hexstr = b''.join(part.rjust(2, b'0') for part in parts) - else: - if not all(len(part) == 2 for part in parts): - return - hexstr = b''.join(parts) - try: - return int(hexstr, 16) - except ValueError: - return - - -def _find_mac_under_heading(command, args, heading): - """Looks for a MAC address under a heading in a command's output. - - The first line of words in the output is searched for the given - heading. Words at the same word index as the heading in subsequent - lines are then examined to see if they look like MAC addresses. - """ - stdout = _get_command_stdout(command, args) - if stdout is None: - return None - - keywords = stdout.readline().rstrip().split() - try: - column_index = keywords.index(heading) - except ValueError: - return None - - first_local_mac = None - for line in stdout: - words = line.rstrip().split() - try: - word = words[column_index] - except IndexError: - continue - - mac = _parse_mac(word) - if mac is None: - continue - if _is_universal(mac): - return mac - if first_local_mac is None: - first_local_mac = mac - - return first_local_mac - - -# The following functions call external programs to 'get' a macaddr value to -# be used as basis for an uuid -def _ifconfig_getnode(): - """Get the hardware address on Unix by running ifconfig.""" - # This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes. - keywords = (b'hwaddr', b'ether', b'address:', b'lladdr') - for args in ('', '-a', '-av'): - mac = _find_mac_near_keyword('ifconfig', args, keywords, lambda i: i+1) - if mac: - return mac - return None - -def _ip_getnode(): - """Get the hardware address on Unix by running ip.""" - # This works on Linux with iproute2. - mac = _find_mac_near_keyword('ip', 'link', [b'link/ether'], lambda i: i+1) - if mac: - return mac - return None - -def _arp_getnode(): - """Get the hardware address on Unix by running arp.""" - import os, socket - if not hasattr(socket, "gethostbyname"): - return None - try: - ip_addr = socket.gethostbyname(socket.gethostname()) - except OSError: - return None - - # Try getting the MAC addr from arp based on our IP address (Solaris). - mac = _find_mac_near_keyword('arp', '-an', [os.fsencode(ip_addr)], lambda i: -1) - if mac: - return mac - - # This works on OpenBSD - mac = _find_mac_near_keyword('arp', '-an', [os.fsencode(ip_addr)], lambda i: i+1) - if mac: - return mac - - # This works on Linux, FreeBSD and NetBSD - mac = _find_mac_near_keyword('arp', '-an', [os.fsencode('(%s)' % ip_addr)], - lambda i: i+2) - # Return None instead of 0. - if mac: - return mac - return None - -def _lanscan_getnode(): - """Get the hardware address on Unix by running lanscan.""" - # This might work on HP-UX. - return _find_mac_near_keyword('lanscan', '-ai', [b'lan0'], lambda i: 0) - -def _netstat_getnode(): - """Get the hardware address on Unix by running netstat.""" - # This works on AIX and might work on Tru64 UNIX. - return _find_mac_under_heading('netstat', '-ian', b'Address') - - -# Import optional C extension at toplevel, to help disabling it when testing -try: - import _uuid - _generate_time_safe = getattr(_uuid, "generate_time_safe", None) - _has_stable_extractable_node = _uuid.has_stable_extractable_node - _UuidCreate = getattr(_uuid, "UuidCreate", None) -except ImportError: - _uuid = None - _generate_time_safe = None - _has_stable_extractable_node = False - _UuidCreate = None - - -def _unix_getnode(): - """Get the hardware address on Unix using the _uuid extension module.""" - if _generate_time_safe and _has_stable_extractable_node: - uuid_time, _ = _generate_time_safe() - return UUID(bytes=uuid_time).node - -def _windll_getnode(): - """Get the hardware address on Windows using the _uuid extension module.""" - if _UuidCreate and _has_stable_extractable_node: - uuid_bytes = _UuidCreate() - return UUID(bytes_le=uuid_bytes).node - -def _random_getnode(): - """Get a random node ID.""" - # RFC 9562, §6.10-3 says that - # - # Implementations MAY elect to obtain a 48-bit cryptographic-quality - # random number as per Section 6.9 to use as the Node ID. [...] [and] - # implementations MUST set the least significant bit of the first octet - # of the Node ID to 1. This bit is the unicast or multicast bit, which - # will never be set in IEEE 802 addresses obtained from network cards. - # - # The "multicast bit" of a MAC address is defined to be "the least - # significant bit of the first octet". This works out to be the 41st bit - # counting from 1 being the least significant bit, or 1<<40. - # - # See https://en.wikipedia.org/w/index.php?title=MAC_address&oldid=1128764812#Universal_vs._local_(U/L_bit) - return int.from_bytes(os.urandom(6)) | (1 << 40) - - -# _OS_GETTERS, when known, are targeted for a specific OS or platform. -# The order is by 'common practice' on the specified platform. -# Note: 'posix' and 'windows' _OS_GETTERS are prefixed by a dll/dlload() method -# which, when successful, means none of these "external" methods are called. -# _GETTERS is (also) used by test_uuid.py to SkipUnless(), e.g., -# @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS, ...) -if _LINUX: - _OS_GETTERS = [_ip_getnode, _ifconfig_getnode] -elif sys.platform == 'darwin': - _OS_GETTERS = [_ifconfig_getnode, _arp_getnode, _netstat_getnode] -elif sys.platform == 'win32': - # bpo-40201: _windll_getnode will always succeed, so these are not needed - _OS_GETTERS = [] -elif _AIX: - _OS_GETTERS = [_netstat_getnode] -else: - _OS_GETTERS = [_ifconfig_getnode, _ip_getnode, _arp_getnode, - _netstat_getnode, _lanscan_getnode] -if os.name == 'posix': - _GETTERS = [_unix_getnode] + _OS_GETTERS -elif os.name == 'nt': - _GETTERS = [_windll_getnode] + _OS_GETTERS -else: - _GETTERS = _OS_GETTERS - -_node = None - -def getnode(): - """Get the hardware address as a 48-bit positive integer. - - The first time this runs, it may launch a separate program, which could - be quite slow. If all attempts to obtain the hardware address fail, we - choose a random 48-bit number with its eighth bit set to 1 as recommended - in RFC 4122. - """ - global _node - if _node is not None: - return _node - - for getter in _GETTERS + [_random_getnode]: - try: - _node = getter() - except: - continue - if (_node is not None) and (0 <= _node < (1 << 48)): - return _node - assert False, '_random_getnode() returned invalid value: {}'.format(_node) - - -_last_timestamp = None - -def uuid1(node=None, clock_seq=None): - """Generate a UUID from a host ID, sequence number, and the current time. - If 'node' is not given, getnode() is used to obtain the hardware - address. If 'clock_seq' is given, it is used as the sequence number; - otherwise a random 14-bit sequence number is chosen.""" - - # When the system provides a version-1 UUID generator, use it (but don't - # use UuidCreate here because its UUIDs don't conform to RFC 4122). - if _generate_time_safe is not None and node is clock_seq is None: - uuid_time, safely_generated = _generate_time_safe() - try: - is_safe = SafeUUID(safely_generated) - except ValueError: - is_safe = SafeUUID.unknown - return UUID(bytes=uuid_time, is_safe=is_safe) - - global _last_timestamp - nanoseconds = time.time_ns() - # 0x01b21dd213814000 is the number of 100-ns intervals between the - # UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. - timestamp = nanoseconds // 100 + 0x01b21dd213814000 - if _last_timestamp is not None and timestamp <= _last_timestamp: - timestamp = _last_timestamp + 1 - _last_timestamp = timestamp - if clock_seq is None: - import random - clock_seq = random.getrandbits(14) # instead of stable storage - time_low = timestamp & 0xffffffff - time_mid = (timestamp >> 32) & 0xffff - time_hi_version = (timestamp >> 48) & 0x0fff - clock_seq_low = clock_seq & 0xff - clock_seq_hi_variant = (clock_seq >> 8) & 0x3f - if node is None: - node = getnode() - return UUID(fields=(time_low, time_mid, time_hi_version, - clock_seq_hi_variant, clock_seq_low, node), version=1) - -def uuid3(namespace, name): - """Generate a UUID from the MD5 hash of a namespace UUID and a name.""" - if isinstance(name, str): - name = bytes(name, "utf-8") - import hashlib - h = hashlib.md5(namespace.bytes + name, usedforsecurity=False) - int_uuid_3 = int.from_bytes(h.digest()) - int_uuid_3 &= _RFC_4122_CLEARFLAGS_MASK - int_uuid_3 |= _RFC_4122_VERSION_3_FLAGS - return UUID._from_int(int_uuid_3) - -def uuid4(): - """Generate a random UUID.""" - int_uuid_4 = int.from_bytes(os.urandom(16)) - int_uuid_4 &= _RFC_4122_CLEARFLAGS_MASK - int_uuid_4 |= _RFC_4122_VERSION_4_FLAGS - return UUID._from_int(int_uuid_4) - -def uuid5(namespace, name): - """Generate a UUID from the SHA-1 hash of a namespace UUID and a name.""" - if isinstance(name, str): - name = bytes(name, "utf-8") - import hashlib - h = hashlib.sha1(namespace.bytes + name, usedforsecurity=False) - int_uuid_5 = int.from_bytes(h.digest()[:16]) - int_uuid_5 &= _RFC_4122_CLEARFLAGS_MASK - int_uuid_5 |= _RFC_4122_VERSION_5_FLAGS - return UUID._from_int(int_uuid_5) - - -_last_timestamp_v6 = None - -def uuid6(node=None, clock_seq=None): - """Similar to :func:`uuid1` but where fields are ordered differently - for improved DB locality. - - More precisely, given a 60-bit timestamp value as specified for UUIDv1, - for UUIDv6 the first 48 most significant bits are stored first, followed - by the 4-bit version (same position), followed by the remaining 12 bits - of the original 60-bit timestamp. - """ - global _last_timestamp_v6 - import time - nanoseconds = time.time_ns() - # 0x01b21dd213814000 is the number of 100-ns intervals between the - # UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. - timestamp = nanoseconds // 100 + 0x01b21dd213814000 - if _last_timestamp_v6 is not None and timestamp <= _last_timestamp_v6: - timestamp = _last_timestamp_v6 + 1 - _last_timestamp_v6 = timestamp - if clock_seq is None: - import random - clock_seq = random.getrandbits(14) # instead of stable storage - time_hi_and_mid = (timestamp >> 12) & 0xffff_ffff_ffff - time_lo = timestamp & 0x0fff # keep 12 bits and clear version bits - clock_s = clock_seq & 0x3fff # keep 14 bits and clear variant bits - if node is None: - node = getnode() - # --- 32 + 16 --- -- 4 -- -- 12 -- -- 2 -- -- 14 --- 48 - # time_hi_and_mid | version | time_lo | variant | clock_seq | node - int_uuid_6 = time_hi_and_mid << 80 - int_uuid_6 |= time_lo << 64 - int_uuid_6 |= clock_s << 48 - int_uuid_6 |= node & 0xffff_ffff_ffff - # by construction, the variant and version bits are already cleared - int_uuid_6 |= _RFC_4122_VERSION_6_FLAGS - return UUID._from_int(int_uuid_6) - - -_last_timestamp_v7 = None -_last_counter_v7 = 0 # 42-bit counter - -def _uuid7_get_counter_and_tail(): - rand = int.from_bytes(os.urandom(10)) - # 42-bit counter with MSB set to 0 - counter = (rand >> 32) & 0x1ff_ffff_ffff - # 32-bit random data - tail = rand & 0xffff_ffff - return counter, tail - - -def uuid7(): - """Generate a UUID from a Unix timestamp in milliseconds and random bits. - - UUIDv7 objects feature monotonicity within a millisecond. - """ - # --- 48 --- -- 4 -- --- 12 --- -- 2 -- --- 30 --- - 32 - - # unix_ts_ms | version | counter_hi | variant | counter_lo | random - # - # 'counter = counter_hi | counter_lo' is a 42-bit counter constructed - # with Method 1 of RFC 9562, §6.2, and its MSB is set to 0. - # - # 'random' is a 32-bit random value regenerated for every new UUID. - # - # If multiple UUIDs are generated within the same millisecond, the LSB - # of 'counter' is incremented by 1. When overflowing, the timestamp is - # advanced and the counter is reset to a random 42-bit integer with MSB - # set to 0. - - global _last_timestamp_v7 - global _last_counter_v7 - - nanoseconds = time.time_ns() - timestamp_ms = nanoseconds // 1_000_000 - - if _last_timestamp_v7 is None or timestamp_ms > _last_timestamp_v7: - counter, tail = _uuid7_get_counter_and_tail() - else: - if timestamp_ms < _last_timestamp_v7: - timestamp_ms = _last_timestamp_v7 + 1 - # advance the 42-bit counter - counter = _last_counter_v7 + 1 - if counter > 0x3ff_ffff_ffff: - # advance the 48-bit timestamp - timestamp_ms += 1 - counter, tail = _uuid7_get_counter_and_tail() - else: - # 32-bit random data - tail = int.from_bytes(os.urandom(4)) - - unix_ts_ms = timestamp_ms & 0xffff_ffff_ffff - counter_msbs = counter >> 30 - # keep 12 counter's MSBs and clear variant bits - counter_hi = counter_msbs & 0x0fff - # keep 30 counter's LSBs and clear version bits - counter_lo = counter & 0x3fff_ffff - # ensure that the tail is always a 32-bit integer (by construction, - # it is already the case, but future interfaces may allow the user - # to specify the random tail) - tail &= 0xffff_ffff - - int_uuid_7 = unix_ts_ms << 80 - int_uuid_7 |= counter_hi << 64 - int_uuid_7 |= counter_lo << 32 - int_uuid_7 |= tail - # by construction, the variant and version bits are already cleared - int_uuid_7 |= _RFC_4122_VERSION_7_FLAGS - res = UUID._from_int(int_uuid_7) - - # defer global update until all computations are done - _last_timestamp_v7 = timestamp_ms - _last_counter_v7 = counter - return res - - -def uuid8(a=None, b=None, c=None): - """Generate a UUID from three custom blocks. - - * 'a' is the first 48-bit chunk of the UUID (octets 0-5); - * 'b' is the mid 12-bit chunk (octets 6-7); - * 'c' is the last 62-bit chunk (octets 8-15). - - When a value is not specified, a pseudo-random value is generated. - """ - if a is None: - import random - a = random.getrandbits(48) - if b is None: - import random - b = random.getrandbits(12) - if c is None: - import random - c = random.getrandbits(62) - int_uuid_8 = (a & 0xffff_ffff_ffff) << 80 - int_uuid_8 |= (b & 0xfff) << 64 - int_uuid_8 |= c & 0x3fff_ffff_ffff_ffff - # by construction, the variant and version bits are already cleared - int_uuid_8 |= _RFC_4122_VERSION_8_FLAGS - return UUID._from_int(int_uuid_8) - - -def main(): - """Run the uuid command line interface.""" - uuid_funcs = { - "uuid1": uuid1, - "uuid3": uuid3, - "uuid4": uuid4, - "uuid5": uuid5, - "uuid6": uuid6, - "uuid7": uuid7, - "uuid8": uuid8, - } - uuid_namespace_funcs = ("uuid3", "uuid5") - namespaces = { - "@dns": NAMESPACE_DNS, - "@url": NAMESPACE_URL, - "@oid": NAMESPACE_OID, - "@x500": NAMESPACE_X500 - } - - import argparse - parser = argparse.ArgumentParser( - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - description="Generate a UUID using the selected UUID function.", - color=True, - ) - parser.add_argument("-u", "--uuid", - choices=uuid_funcs.keys(), - default="uuid4", - help="function to generate the UUID") - parser.add_argument("-n", "--namespace", - choices=["any UUID", *namespaces.keys()], - help="uuid3/uuid5 only: " - "a UUID, or a well-known predefined UUID addressed " - "by namespace name") - parser.add_argument("-N", "--name", - help="uuid3/uuid5 only: " - "name used as part of generating the UUID") - parser.add_argument("-C", "--count", metavar="NUM", type=int, default=1, - help="generate NUM fresh UUIDs") - - args = parser.parse_args() - uuid_func = uuid_funcs[args.uuid] - namespace = args.namespace - name = args.name - - if args.uuid in uuid_namespace_funcs: - if not namespace or not name: - parser.error( - "Incorrect number of arguments. " - f"{args.uuid} requires a namespace and a name. " - "Run 'python -m uuid -h' for more information." - ) - namespace = namespaces[namespace] if namespace in namespaces else UUID(namespace) - for _ in range(args.count): - print(uuid_func(namespace, name)) - else: - for _ in range(args.count): - print(uuid_func()) - - -# The following standard UUIDs are for use with uuid3() or uuid5(). - -NAMESPACE_DNS = UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8') -NAMESPACE_URL = UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8') -NAMESPACE_OID = UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8') -NAMESPACE_X500 = UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8') - -# RFC 9562 Sections 5.9 and 5.10 define the special Nil and Max UUID formats. - -NIL = UUID('00000000-0000-0000-0000-000000000000') -MAX = UUID('ffffffff-ffff-ffff-ffff-ffffffffffff') - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/venv/__init__.py b/Python314_4_x86_Template/Lib/venv/__init__.py deleted file mode 100644 index 88f3340af..000000000 --- a/Python314_4_x86_Template/Lib/venv/__init__.py +++ /dev/null @@ -1,700 +0,0 @@ -""" -Virtual environment (venv) package for Python. Based on PEP 405. - -Copyright (C) 2011-2014 Vinay Sajip. -Licensed to the PSF under a contributor agreement. -""" -import logging -import os -import shutil -import subprocess -import sys -import sysconfig -import types -import shlex - - -CORE_VENV_DEPS = ('pip',) -logger = logging.getLogger(__name__) - - -class EnvBuilder: - """ - This class exists to allow virtual environment creation to be - customized. The constructor parameters determine the builder's - behaviour when called upon to create a virtual environment. - - By default, the builder makes the system (global) site-packages dir - *un*available to the created environment. - - If invoked using the Python -m option, the default is to use copying - on Windows platforms but symlinks elsewhere. If instantiated some - other way, the default is to *not* use symlinks. - - :param system_site_packages: If True, the system (global) site-packages - dir is available to created environments. - :param clear: If True, delete the contents of the environment directory if - it already exists, before environment creation. - :param symlinks: If True, attempt to symlink rather than copy files into - virtual environment. - :param upgrade: If True, upgrade an existing virtual environment. - :param with_pip: If True, ensure pip is installed in the virtual - environment - :param prompt: Alternative terminal prefix for the environment. - :param upgrade_deps: Update the base venv modules to the latest on PyPI - :param scm_ignore_files: Create ignore files for the SCMs specified by the - iterable. - """ - - def __init__(self, system_site_packages=False, clear=False, - symlinks=False, upgrade=False, with_pip=False, prompt=None, - upgrade_deps=False, *, scm_ignore_files=frozenset()): - self.system_site_packages = system_site_packages - self.clear = clear - self.symlinks = symlinks - self.upgrade = upgrade - self.with_pip = with_pip - self.orig_prompt = prompt - if prompt == '.': # see bpo-38901 - prompt = os.path.basename(os.getcwd()) - self.prompt = prompt - self.upgrade_deps = upgrade_deps - self.scm_ignore_files = frozenset(map(str.lower, scm_ignore_files)) - - def create(self, env_dir): - """ - Create a virtual environment in a directory. - - :param env_dir: The target directory to create an environment in. - - """ - env_dir = os.path.abspath(env_dir) - context = self.ensure_directories(env_dir) - for scm in self.scm_ignore_files: - getattr(self, f"create_{scm}_ignore_file")(context) - # See issue 24875. We need system_site_packages to be False - # until after pip is installed. - true_system_site_packages = self.system_site_packages - self.system_site_packages = False - self.create_configuration(context) - self.setup_python(context) - if self.with_pip: - self._setup_pip(context) - if not self.upgrade: - self.setup_scripts(context) - self.post_setup(context) - if true_system_site_packages: - # We had set it to False before, now - # restore it and rewrite the configuration - self.system_site_packages = True - self.create_configuration(context) - if self.upgrade_deps: - self.upgrade_dependencies(context) - - def clear_directory(self, path): - for fn in os.listdir(path): - fn = os.path.join(path, fn) - if os.path.islink(fn) or os.path.isfile(fn): - os.remove(fn) - elif os.path.isdir(fn): - shutil.rmtree(fn) - - def _venv_path(self, env_dir, name): - vars = { - 'base': env_dir, - 'platbase': env_dir, - } - return sysconfig.get_path(name, scheme='venv', vars=vars) - - @classmethod - def _same_path(cls, path1, path2): - """Check whether two paths appear the same. - - Whether they refer to the same file is irrelevant; we're testing for - whether a human reader would look at the path string and easily tell - that they're the same file. - """ - if sys.platform == 'win32': - if os.path.normcase(path1) == os.path.normcase(path2): - return True - # gh-90329: Don't display a warning for short/long names - import _winapi - try: - path1 = _winapi.GetLongPathName(os.fsdecode(path1)) - except OSError: - pass - try: - path2 = _winapi.GetLongPathName(os.fsdecode(path2)) - except OSError: - pass - if os.path.normcase(path1) == os.path.normcase(path2): - return True - return False - else: - return path1 == path2 - - def ensure_directories(self, env_dir): - """ - Create the directories for the environment. - - Returns a context object which holds paths in the environment, - for use by subsequent logic. - """ - - def create_if_needed(d): - if not os.path.exists(d): - os.makedirs(d) - elif os.path.islink(d) or os.path.isfile(d): - raise ValueError('Unable to create directory %r' % d) - - if os.pathsep in os.fspath(env_dir): - raise ValueError(f'Refusing to create a venv in {env_dir} because ' - f'it contains the PATH separator {os.pathsep}.') - if os.path.exists(env_dir) and self.clear: - self.clear_directory(env_dir) - context = types.SimpleNamespace() - context.env_dir = env_dir - context.env_name = os.path.split(env_dir)[1] - context.prompt = self.prompt if self.prompt is not None else context.env_name - create_if_needed(env_dir) - executable = sys._base_executable - if not executable: # see gh-96861 - raise ValueError('Unable to determine path to the running ' - 'Python interpreter. Provide an explicit path or ' - 'check that your PATH environment variable is ' - 'correctly set.') - dirname, exename = os.path.split(os.path.abspath(executable)) - if sys.platform == 'win32': - # Always create the simplest name in the venv. It will either be a - # link back to executable, or a copy of the appropriate launcher - _d = '_d' if os.path.splitext(exename)[0].endswith('_d') else '' - exename = f'python{_d}.exe' - context.executable = executable - context.python_dir = dirname - context.python_exe = exename - binpath = self._venv_path(env_dir, 'scripts') - libpath = self._venv_path(env_dir, 'purelib') - - # PEP 405 says venvs should create a local include directory. - # See https://peps.python.org/pep-0405/#include-files - # XXX: This directory is not exposed in sysconfig or anywhere else, and - # doesn't seem to be utilized by modern packaging tools. We keep it - # for backwards-compatibility, and to follow the PEP, but I would - # recommend against using it, as most tooling does not pass it to - # compilers. Instead, until we standardize a site-specific include - # directory, I would recommend installing headers as package data, - # and providing some sort of API to get the include directories. - # Example: https://numpy.org/doc/2.1/reference/generated/numpy.get_include.html - incpath = os.path.join(env_dir, 'Include' if os.name == 'nt' else 'include') - - context.inc_path = incpath - create_if_needed(incpath) - context.lib_path = libpath - create_if_needed(libpath) - # Issue 21197: create lib64 as a symlink to lib on 64-bit non-OS X POSIX - if ((sys.maxsize > 2**32) and (os.name == 'posix') and - (sys.platform != 'darwin')): - link_path = os.path.join(env_dir, 'lib64') - if not os.path.exists(link_path): # Issue #21643 - os.symlink('lib', link_path) - context.bin_path = binpath - context.bin_name = os.path.relpath(binpath, env_dir) - context.env_exe = os.path.join(binpath, exename) - create_if_needed(binpath) - # Assign and update the command to use when launching the newly created - # environment, in case it isn't simply the executable script (e.g. bpo-45337) - context.env_exec_cmd = context.env_exe - if sys.platform == 'win32': - # bpo-45337: Fix up env_exec_cmd to account for file system redirections. - # Some redirects only apply to CreateFile and not CreateProcess - real_env_exe = os.path.realpath(context.env_exe) - if not self._same_path(real_env_exe, context.env_exe): - logger.warning('Actual environment location may have moved due to ' - 'redirects, links or junctions.\n' - ' Requested location: "%s"\n' - ' Actual location: "%s"', - context.env_exe, real_env_exe) - context.env_exec_cmd = real_env_exe - return context - - def create_configuration(self, context): - """ - Create a configuration file indicating where the environment's Python - was copied from, and whether the system site-packages should be made - available in the environment. - - :param context: The information for the environment creation request - being processed. - """ - context.cfg_path = path = os.path.join(context.env_dir, 'pyvenv.cfg') - with open(path, 'w', encoding='utf-8') as f: - f.write('home = %s\n' % context.python_dir) - if self.system_site_packages: - incl = 'true' - else: - incl = 'false' - f.write('include-system-site-packages = %s\n' % incl) - f.write('version = %d.%d.%d\n' % sys.version_info[:3]) - if self.prompt is not None: - f.write(f'prompt = {self.prompt!r}\n') - f.write('executable = %s\n' % os.path.realpath(sys.executable)) - args = [] - nt = os.name == 'nt' - if nt and self.symlinks: - args.append('--symlinks') - if not nt and not self.symlinks: - args.append('--copies') - if not self.with_pip: - args.append('--without-pip') - if self.system_site_packages: - args.append('--system-site-packages') - if self.clear: - args.append('--clear') - if self.upgrade: - args.append('--upgrade') - if self.upgrade_deps: - args.append('--upgrade-deps') - if self.orig_prompt is not None: - args.append(f'--prompt="{self.orig_prompt}"') - if not self.scm_ignore_files: - args.append('--without-scm-ignore-files') - - args.append(context.env_dir) - args = ' '.join(args) - f.write(f'command = {sys.executable} -m venv {args}\n') - - def symlink_or_copy(self, src, dst, relative_symlinks_ok=False): - """ - Try symlinking a file, and if that fails, fall back to copying. - (Unused on Windows, because we can't just copy a failed symlink file: we - switch to a different set of files instead.) - """ - assert os.name != 'nt' - force_copy = not self.symlinks - if not force_copy: - try: - if not os.path.islink(dst): # can't link to itself! - if relative_symlinks_ok: - assert os.path.dirname(src) == os.path.dirname(dst) - os.symlink(os.path.basename(src), dst) - else: - os.symlink(src, dst) - except Exception: # may need to use a more specific exception - logger.warning('Unable to symlink %r to %r', src, dst) - force_copy = True - if force_copy: - shutil.copyfile(src, dst) - - def create_git_ignore_file(self, context): - """ - Create a .gitignore file in the environment directory. - - The contents of the file cause the entire environment directory to be - ignored by git. - """ - gitignore_path = os.path.join(context.env_dir, '.gitignore') - with open(gitignore_path, 'w', encoding='utf-8') as file: - file.write('# Created by venv; ' - 'see https://docs.python.org/3/library/venv.html\n') - file.write('*\n') - - if os.name != 'nt': - def setup_python(self, context): - """ - Set up a Python executable in the environment. - - :param context: The information for the environment creation request - being processed. - """ - binpath = context.bin_path - path = context.env_exe - copier = self.symlink_or_copy - dirname = context.python_dir - copier(context.executable, path) - if not os.path.islink(path): - os.chmod(path, 0o755) - - suffixes = ['python', 'python3', f'python3.{sys.version_info[1]}'] - if sys.version_info[:2] == (3, 14) and sys.getfilesystemencoding() == 'utf-8': - suffixes.append('𝜋thon') - for suffix in suffixes: - path = os.path.join(binpath, suffix) - if not os.path.exists(path): - # Issue 18807: make copies if - # symlinks are not wanted - copier(context.env_exe, path, relative_symlinks_ok=True) - if not os.path.islink(path): - os.chmod(path, 0o755) - - else: - def setup_python(self, context): - """ - Set up a Python executable in the environment. - - :param context: The information for the environment creation request - being processed. - """ - binpath = context.bin_path - dirname = context.python_dir - exename = os.path.basename(context.env_exe) - exe_stem = os.path.splitext(exename)[0] - exe_d = '_d' if os.path.normcase(exe_stem).endswith('_d') else '' - if sysconfig.is_python_build(): - scripts = dirname - else: - scripts = os.path.join(os.path.dirname(__file__), - 'scripts', 'nt') - if not sysconfig.get_config_var("Py_GIL_DISABLED"): - python_exe = os.path.join(dirname, f'python{exe_d}.exe') - pythonw_exe = os.path.join(dirname, f'pythonw{exe_d}.exe') - link_sources = { - 'python.exe': python_exe, - f'python{exe_d}.exe': python_exe, - 'pythonw.exe': pythonw_exe, - f'pythonw{exe_d}.exe': pythonw_exe, - } - python_exe = os.path.join(scripts, f'venvlauncher{exe_d}.exe') - pythonw_exe = os.path.join(scripts, f'venvwlauncher{exe_d}.exe') - copy_sources = { - 'python.exe': python_exe, - f'python{exe_d}.exe': python_exe, - 'pythonw.exe': pythonw_exe, - f'pythonw{exe_d}.exe': pythonw_exe, - } - else: - exe_t = f'3.{sys.version_info[1]}t' - python_exe = os.path.join(dirname, f'python{exe_t}{exe_d}.exe') - pythonw_exe = os.path.join(dirname, f'pythonw{exe_t}{exe_d}.exe') - link_sources = { - 'python.exe': python_exe, - f'python{exe_d}.exe': python_exe, - f'python{exe_t}.exe': python_exe, - f'python{exe_t}{exe_d}.exe': python_exe, - 'pythonw.exe': pythonw_exe, - f'pythonw{exe_d}.exe': pythonw_exe, - f'pythonw{exe_t}.exe': pythonw_exe, - f'pythonw{exe_t}{exe_d}.exe': pythonw_exe, - } - python_exe = os.path.join(scripts, f'venvlaunchert{exe_d}.exe') - pythonw_exe = os.path.join(scripts, f'venvwlaunchert{exe_d}.exe') - copy_sources = { - 'python.exe': python_exe, - f'python{exe_d}.exe': python_exe, - f'python{exe_t}.exe': python_exe, - f'python{exe_t}{exe_d}.exe': python_exe, - 'pythonw.exe': pythonw_exe, - f'pythonw{exe_d}.exe': pythonw_exe, - f'pythonw{exe_t}.exe': pythonw_exe, - f'pythonw{exe_t}{exe_d}.exe': pythonw_exe, - } - - do_copies = True - if self.symlinks: - do_copies = False - # For symlinking, we need all the DLLs to be available alongside - # the executables. - link_sources.update({ - f: os.path.join(dirname, f) for f in os.listdir(dirname) - if os.path.normcase(f).startswith(('python', 'vcruntime')) - and os.path.normcase(os.path.splitext(f)[1]) == '.dll' - }) - - to_unlink = [] - for dest, src in link_sources.items(): - dest = os.path.join(binpath, dest) - try: - os.symlink(src, dest) - to_unlink.append(dest) - except OSError: - logger.warning('Unable to symlink %r to %r', src, dest) - do_copies = True - for f in to_unlink: - try: - os.unlink(f) - except OSError: - logger.warning('Failed to clean up symlink %r', - f) - logger.warning('Retrying with copies') - break - - if do_copies: - for dest, src in copy_sources.items(): - dest = os.path.join(binpath, dest) - try: - shutil.copy2(src, dest) - except OSError: - logger.warning('Unable to copy %r to %r', src, dest) - - if sysconfig.is_python_build(): - # copy init.tcl - for root, dirs, files in os.walk(context.python_dir): - if 'init.tcl' in files: - tcldir = os.path.basename(root) - tcldir = os.path.join(context.env_dir, 'Lib', tcldir) - if not os.path.exists(tcldir): - os.makedirs(tcldir) - src = os.path.join(root, 'init.tcl') - dst = os.path.join(tcldir, 'init.tcl') - shutil.copyfile(src, dst) - break - - def _call_new_python(self, context, *py_args, **kwargs): - """Executes the newly created Python using safe-ish options""" - # gh-98251: We do not want to just use '-I' because that masks - # legitimate user preferences (such as not writing bytecode). All we - # really need is to ensure that the path variables do not overrule - # normal venv handling. - args = [context.env_exec_cmd, *py_args] - kwargs['env'] = env = os.environ.copy() - env['VIRTUAL_ENV'] = context.env_dir - env.pop('PYTHONHOME', None) - env.pop('PYTHONPATH', None) - kwargs['cwd'] = context.env_dir - kwargs['executable'] = context.env_exec_cmd - subprocess.check_output(args, **kwargs) - - def _setup_pip(self, context): - """Installs or upgrades pip in a virtual environment""" - self._call_new_python(context, '-m', 'ensurepip', '--upgrade', - '--default-pip', stderr=subprocess.STDOUT) - - def setup_scripts(self, context): - """ - Set up scripts into the created environment from a directory. - - This method installs the default scripts into the environment - being created. You can prevent the default installation by overriding - this method if you really need to, or if you need to specify - a different location for the scripts to install. By default, the - 'scripts' directory in the venv package is used as the source of - scripts to install. - """ - path = os.path.abspath(os.path.dirname(__file__)) - path = os.path.join(path, 'scripts') - self.install_scripts(context, path) - - def post_setup(self, context): - """ - Hook for post-setup modification of the venv. Subclasses may install - additional packages or scripts here, add activation shell scripts, etc. - - :param context: The information for the environment creation request - being processed. - """ - pass - - def replace_variables(self, text, context): - """ - Replace variable placeholders in script text with context-specific - variables. - - Return the text passed in , but with variables replaced. - - :param text: The text in which to replace placeholder variables. - :param context: The information for the environment creation request - being processed. - """ - replacements = { - '__VENV_DIR__': context.env_dir, - '__VENV_NAME__': context.env_name, - '__VENV_PROMPT__': context.prompt, - '__VENV_BIN_NAME__': context.bin_name, - '__VENV_PYTHON__': context.env_exe, - } - - def quote_ps1(s): - """ - This should satisfy PowerShell quoting rules [1], unless the quoted - string is passed directly to Windows native commands [2]. - [1]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules - [2]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parsing#passing-arguments-that-contain-quote-characters - """ - s = s.replace("'", "''") - return f"'{s}'" - - def quote_bat(s): - return s - - # gh-124651: need to quote the template strings properly - quote = shlex.quote - script_path = context.script_path - if script_path.endswith('.ps1'): - quote = quote_ps1 - elif script_path.endswith('.bat'): - quote = quote_bat - else: - # fallbacks to POSIX shell compliant quote - quote = shlex.quote - - replacements = {key: quote(s) for key, s in replacements.items()} - for key, quoted in replacements.items(): - text = text.replace(key, quoted) - return text - - def install_scripts(self, context, path): - """ - Install scripts into the created environment from a directory. - - :param context: The information for the environment creation request - being processed. - :param path: Absolute pathname of a directory containing script. - Scripts in the 'common' subdirectory of this directory, - and those in the directory named for the platform - being run on, are installed in the created environment. - Placeholder variables are replaced with environment- - specific values. - """ - binpath = context.bin_path - plen = len(path) - if os.name == 'nt': - def skip_file(f): - f = os.path.normcase(f) - return (f.startswith(('python', 'venv')) - and f.endswith(('.exe', '.pdb'))) - else: - def skip_file(f): - return False - for root, dirs, files in os.walk(path): - if root == path: # at top-level, remove irrelevant dirs - for d in dirs[:]: - if d not in ('common', os.name): - dirs.remove(d) - continue # ignore files in top level - for f in files: - if skip_file(f): - continue - srcfile = os.path.join(root, f) - suffix = root[plen:].split(os.sep)[2:] - if not suffix: - dstdir = binpath - else: - dstdir = os.path.join(binpath, *suffix) - if not os.path.exists(dstdir): - os.makedirs(dstdir) - dstfile = os.path.join(dstdir, f) - if os.name == 'nt' and srcfile.endswith(('.exe', '.pdb')): - shutil.copy2(srcfile, dstfile) - continue - with open(srcfile, 'rb') as f: - data = f.read() - try: - context.script_path = srcfile - new_data = ( - self.replace_variables(data.decode('utf-8'), context) - .encode('utf-8') - ) - except UnicodeError as e: - logger.warning('unable to copy script %r, ' - 'may be binary: %s', srcfile, e) - continue - if new_data == data: - shutil.copy(srcfile, dstfile) - else: - with open(dstfile, 'wb') as f: - f.write(new_data) - shutil.copymode(srcfile, dstfile) - - def upgrade_dependencies(self, context): - logger.debug( - f'Upgrading {CORE_VENV_DEPS} packages in {context.bin_path}' - ) - self._call_new_python(context, '-m', 'pip', 'install', '--upgrade', - *CORE_VENV_DEPS) - - -def create(env_dir, system_site_packages=False, clear=False, - symlinks=False, with_pip=False, prompt=None, upgrade_deps=False, - *, scm_ignore_files=frozenset()): - """Create a virtual environment in a directory.""" - builder = EnvBuilder(system_site_packages=system_site_packages, - clear=clear, symlinks=symlinks, with_pip=with_pip, - prompt=prompt, upgrade_deps=upgrade_deps, - scm_ignore_files=scm_ignore_files) - builder.create(env_dir) - - -def main(args=None): - import argparse - - parser = argparse.ArgumentParser(description='Creates virtual Python ' - 'environments in one or ' - 'more target ' - 'directories.', - epilog='Once an environment has been ' - 'created, you may wish to ' - 'activate it, e.g. by ' - 'sourcing an activate script ' - 'in its bin directory.', - color=True, - ) - parser.add_argument('dirs', metavar='ENV_DIR', nargs='+', - help='A directory to create the environment in.') - parser.add_argument('--system-site-packages', default=False, - action='store_true', dest='system_site', - help='Give the virtual environment access to the ' - 'system site-packages dir.') - if os.name == 'nt': - use_symlinks = False - else: - use_symlinks = True - group = parser.add_mutually_exclusive_group() - group.add_argument('--symlinks', default=use_symlinks, - action='store_true', dest='symlinks', - help='Try to use symlinks rather than copies, ' - 'when symlinks are not the default for ' - 'the platform.') - group.add_argument('--copies', default=not use_symlinks, - action='store_false', dest='symlinks', - help='Try to use copies rather than symlinks, ' - 'even when symlinks are the default for ' - 'the platform.') - parser.add_argument('--clear', default=False, action='store_true', - dest='clear', help='Delete the contents of the ' - 'environment directory if it ' - 'already exists, before ' - 'environment creation.') - parser.add_argument('--upgrade', default=False, action='store_true', - dest='upgrade', help='Upgrade the environment ' - 'directory to use this version ' - 'of Python, assuming Python ' - 'has been upgraded in-place.') - parser.add_argument('--without-pip', dest='with_pip', - default=True, action='store_false', - help='Skips installing or upgrading pip in the ' - 'virtual environment (pip is bootstrapped ' - 'by default)') - parser.add_argument('--prompt', - help='Provides an alternative prompt prefix for ' - 'this environment.') - parser.add_argument('--upgrade-deps', default=False, action='store_true', - dest='upgrade_deps', - help=f'Upgrade core dependencies ({", ".join(CORE_VENV_DEPS)}) ' - 'to the latest version in PyPI') - parser.add_argument('--without-scm-ignore-files', dest='scm_ignore_files', - action='store_const', const=frozenset(), - default=frozenset(['git']), - help='Skips adding SCM ignore files to the environment ' - 'directory (Git is supported by default).') - options = parser.parse_args(args) - if options.upgrade and options.clear: - raise ValueError('you cannot supply --upgrade and --clear together.') - builder = EnvBuilder(system_site_packages=options.system_site, - clear=options.clear, - symlinks=options.symlinks, - upgrade=options.upgrade, - with_pip=options.with_pip, - prompt=options.prompt, - upgrade_deps=options.upgrade_deps, - scm_ignore_files=options.scm_ignore_files) - for d in options.dirs: - builder.create(d) - - -if __name__ == '__main__': - rc = 1 - try: - main() - rc = 0 - except Exception as e: - print('Error: %s' % e, file=sys.stderr) - sys.exit(rc) diff --git a/Python314_4_x86_Template/Lib/venv/__main__.py b/Python314_4_x86_Template/Lib/venv/__main__.py deleted file mode 100644 index 88f55439d..000000000 --- a/Python314_4_x86_Template/Lib/venv/__main__.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys -from . import main - -rc = 1 -try: - main() - rc = 0 -except Exception as e: - print('Error:', e, file=sys.stderr) -sys.exit(rc) diff --git a/Python314_4_x86_Template/Lib/venv/scripts/common/Activate.ps1 b/Python314_4_x86_Template/Lib/venv/scripts/common/Activate.ps1 deleted file mode 100644 index 2cc909193..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/common/Activate.ps1 +++ /dev/null @@ -1,547 +0,0 @@ -<# -.Synopsis -Activate a Python virtual environment for the current PowerShell session. - -.Description -Pushes the python executable for a virtual environment to the front of the -$Env:PATH environment variable and sets the prompt to signify that you are -in a Python virtual environment. Makes use of the command line switches as -well as the `pyvenv.cfg` file values present in the virtual environment. - -.Parameter VenvDir -Path to the directory that contains the virtual environment to activate. The -default value for this is the parent of the directory that the Activate.ps1 -script is located within. - -.Parameter Prompt -The prompt prefix to display when this virtual environment is activated. By -default, this prompt is the name of the virtual environment folder (VenvDir) -surrounded by parentheses and followed by a single space (ie. '(.venv) '). - -.Example -Activate.ps1 -Activates the Python virtual environment that contains the Activate.ps1 script. - -.Example -Activate.ps1 -Verbose -Activates the Python virtual environment that contains the Activate.ps1 script, -and shows extra information about the activation as it executes. - -.Example -Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv -Activates the Python virtual environment located in the specified location. - -.Example -Activate.ps1 -Prompt "MyPython" -Activates the Python virtual environment that contains the Activate.ps1 script, -and prefixes the current prompt with the specified string (surrounded in -parentheses) while the virtual environment is active. - -.Notes -On Windows, it may be required to enable this Activate.ps1 script by setting the -execution policy for the user. You can do this by issuing the following PowerShell -command: - -PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - -For more information on Execution Policies: -https://go.microsoft.com/fwlink/?LinkID=135170 - -#> -Param( - [Parameter(Mandatory = $false)] - [String] - $VenvDir, - [Parameter(Mandatory = $false)] - [String] - $Prompt -) - -<# Function declarations --------------------------------------------------- #> - -<# -.Synopsis -Remove all shell session elements added by the Activate script, including the -addition of the virtual environment's Python executable from the beginning of -the PATH variable. - -.Parameter NonDestructive -If present, do not remove this function from the global namespace for the -session. - -#> -function global:deactivate ([switch]$NonDestructive) { - # Revert to original values - - # The prior prompt: - if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { - Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt - Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT - } - - # The prior PYTHONHOME: - if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { - Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME - Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME - } - - # The prior PATH: - if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { - Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH - Remove-Item -Path Env:_OLD_VIRTUAL_PATH - } - - # Just remove the VIRTUAL_ENV altogether: - if (Test-Path -Path Env:VIRTUAL_ENV) { - Remove-Item -Path env:VIRTUAL_ENV - } - - # Just remove VIRTUAL_ENV_PROMPT altogether. - if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { - Remove-Item -Path env:VIRTUAL_ENV_PROMPT - } - - # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: - if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { - Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force - } - - # Leave deactivate function in the global namespace if requested: - if (-not $NonDestructive) { - Remove-Item -Path function:deactivate - } -} - -<# -.Description -Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the -given folder, and returns them in a map. - -For each line in the pyvenv.cfg file, if that line can be parsed into exactly -two strings separated by `=` (with any amount of whitespace surrounding the =) -then it is considered a `key = value` line. The left hand string is the key, -the right hand is the value. - -If the value starts with a `'` or a `"` then the first and last character is -stripped from the value before being captured. - -.Parameter ConfigDir -Path to the directory that contains the `pyvenv.cfg` file. -#> -function Get-PyVenvConfig( - [String] - $ConfigDir -) { - Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" - - # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). - $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue - - # An empty map will be returned if no config file is found. - $pyvenvConfig = @{ } - - if ($pyvenvConfigPath) { - - Write-Verbose "File exists, parse `key = value` lines" - $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath - - $pyvenvConfigContent | ForEach-Object { - $keyval = $PSItem -split "\s*=\s*", 2 - if ($keyval[0] -and $keyval[1]) { - $val = $keyval[1] - - # Remove extraneous quotations around a string value. - if ("'""".Contains($val.Substring(0, 1))) { - $val = $val.Substring(1, $val.Length - 2) - } - - $pyvenvConfig[$keyval[0]] = $val - Write-Verbose "Adding Key: '$($keyval[0])'='$val'" - } - } - } - return $pyvenvConfig -} - - -<# Begin Activate script --------------------------------------------------- #> - -# Determine the containing directory of this script -$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition -$VenvExecDir = Get-Item -Path $VenvExecPath - -Write-Verbose "Activation script is located in path: '$VenvExecPath'" -Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" -Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" - -# Set values required in priority: CmdLine, ConfigFile, Default -# First, get the location of the virtual environment, it might not be -# VenvExecDir if specified on the command line. -if ($VenvDir) { - Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" -} -else { - Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." - $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") - Write-Verbose "VenvDir=$VenvDir" -} - -# Next, read the `pyvenv.cfg` file to determine any required value such -# as `prompt`. -$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir - -# Next, set the prompt from the command line, or the config file, or -# just use the name of the virtual environment folder. -if ($Prompt) { - Write-Verbose "Prompt specified as argument, using '$Prompt'" -} -else { - Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" - if ($pyvenvCfg -and $pyvenvCfg['prompt']) { - Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" - $Prompt = $pyvenvCfg['prompt']; - } - else { - Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" - Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" - $Prompt = Split-Path -Path $venvDir -Leaf - } -} - -Write-Verbose "Prompt = '$Prompt'" -Write-Verbose "VenvDir='$VenvDir'" - -# Deactivate any currently active virtual environment, but leave the -# deactivate function in place. -deactivate -nondestructive - -# Now set the environment variable VIRTUAL_ENV, used by many tools to determine -# that there is an activated venv. -$env:VIRTUAL_ENV = $VenvDir - -$env:VIRTUAL_ENV_PROMPT = $Prompt - -if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { - - Write-Verbose "Setting prompt to '$Prompt'" - - # Set the prompt to include the env name - # Make sure _OLD_VIRTUAL_PROMPT is global - function global:_OLD_VIRTUAL_PROMPT { "" } - Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT - New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt - - function global:prompt { - Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " - _OLD_VIRTUAL_PROMPT - } -} - -# Clear PYTHONHOME -if (Test-Path -Path Env:PYTHONHOME) { - Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME - Remove-Item -Path Env:PYTHONHOME -} - -# Add the venv to the PATH -Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH -$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" - -# SIG # Begin signature block -# MII3YgYJKoZIhvcNAQcCoII3UzCCN08CAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBALKwKRFIhr2RY -# IW/WJLd9pc8a9sj/IoThKU92fTfKsKCCG9IwggXMMIIDtKADAgECAhBUmNLR1FsZ -# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK -# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu -# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy -# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT -# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv -# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo -# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD -# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH -# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD -# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV -# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70 -# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1 -# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3 -# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK -# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg -# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj -# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7 -# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE -# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ -# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn -# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c -# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF -# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx -# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8 -# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY -# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2 -# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY -# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al -# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk -# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T -# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggb+MIIE5qADAgECAhMzAAfqVHr/ -# 4Q/aDzAcAAAAB+pUMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD -# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ -# RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDIwHhcNMjYwNDA3MDcyODM1WhcNMjYwNDEw -# MDcyODM1WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH -# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u -# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAaIwDQYJKoZI -# hvcNAQEBBQADggGPADCCAYoCggGBAND/lHfn3OCIvUzMUIL6OdsKJrpnvuRtahV1 -# 6NCf0YSqOQemwQw2bTIyTkgSFwY4WaCvfHzcliURiPidXiqy56OmeC19A95BarKA -# UmKRv3bVpM0XEK7OLvMyRFNg9aPUi1nmdF3Vx02RI9p88wBHQR5nNIpOTXlwfONQ -# klggyEZSxkBf+dCL6jtz4jiqoreiEmRwesOrtQxKNsRuezbumpmVMZGxrMQVLBIX -# OWG9a3GS6Sqfi+cJgxQhSKa9JENPRojyxOyVG8vdwJQiMqSjm2ZMFAkIkSWBQSfx -# WjrRmw8/20WaBENattpqb7/cjX7zwimJ86uV48D8AQIGzAxfYAySG6NG9iMfU5S5 -# wzDFpiCuXyfrlgAbZu4fnBIyOmGcq01XxruzJ3FcdLMif5YXZU+n30XOaJfgY9/x -# Gq2HiEIQF5MeuxknfD+vYi/GXGtC/nlKS0Tx91+YXt6RctxgJEwpZCGzFZmmaiUa -# Y0GBp4jzXXwLqX8T15lgxAGoqoPvvwIDAQABo4ICGTCCAhUwDAYDVR0TAQH/BAIw -# ADAOBgNVHQ8BAf8EBAMCB4AwPAYDVR0lBDUwMwYKKwYBBAGCN2EBAAYIKwYBBQUH -# AwMGGysGAQQBgjdhgqKNuwqmkohkgZH0oEWCk/3hbzAdBgNVHQ4EFgQUy3N6DzeS -# y91jju8Ihmm3r+5AO58wHwYDVR0jBBgwFoAUZZ9RzoVofy+KRYiq3acxux4NAF4w -# ZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w -# cy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0El -# MjAwMi5jcmwwgaUGCCsGAQUFBwEBBIGYMIGVMGQGCCsGAQUFBzAChlhodHRwOi8v -# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIw -# VmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDIuY3J0MC0GCCsGAQUFBzABhiFo -# dHRwOi8vb25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwZgYDVR0gBF8wXTBRBgwr -# BgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQu -# Y29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeBDAEEATANBgkqhkiG -# 9w0BAQwFAAOCAgEAPPwJPfkrkQMH39/iTBbir6tGnQpLCpOuP1A6mmKp22GxCG0/ -# 1IPx4QK1qXpy8hYd/G9ySDSYu3DSg22/icSmGSxdcI3zoRsj9vdJeesQrxtK8v9y -# 4zMxN5TaLV5CmatSUZPyX1t7Tee9wiLBUeZIj+3Lg2gNUsdvavywRYxSYkWGuGaM -# jGtJrs4PoJW3f4KkOc5mShCpUgl4Mo9ZO+ChcQpKEP99UJ9CXB9wrNzXnEOTyGnR -# f1sYklPqBifC7hrnKIPZiJte1efmGeExmspWewmUSNXCIGenDAN8XDut2yi1iSSQ -# n1VtL6deCRhS1cTn+FAzy2q7a/8Jhhq+HUlcJwRGtrxgKZHrwEvGRvIWNK5l1rKl -# Q+WQ7RqRrH6PpSfR/xoptfpJX9LNUoHS0m114HcE2xk2hbv+U/5ZgxUtSd4MbF7/ -# C8eShz4Os8CznYXJ/d+kfvoyEqKE9VCbc4BUC+w1iufQOPo4tRvK4TFJu1N4IqJk -# NsChWXUef7lIT5CoaJw4np0dVS2NosmRCxi1dMyADzqFNDXGKQxq5k6MpnXbevL5 -# JdcznhhxgwRUcwNK/3f9WSaU2mnI+6tHrnATteL7Ct6FzZWjqWDbURkU66bRqrBh -# +u5KyLZAAQXTfdsaDUfxtElQJf5wROgYvwnW1dGvujgc+XKVvf1VT3GSFRIwggda -# MIIFQqADAgECAhMzAAAABft6XDITYd9dAAAAAAAFMA0GCSqGSIb3DQEBDAUAMGMx -# CzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xNDAy -# BgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25pbmcgUENBIDIw -# MjEwHhcNMjEwNDEzMTczMTUzWhcNMjYwNDEzMTczMTUzWjBaMQswCQYDVQQGEwJV -# UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQDEyJNaWNy -# b3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDAyMIICIjANBgkqhkiG9w0BAQEF -# AAOCAg8AMIICCgKCAgEA0hqZfD8ykKTA6CDbWvshmBpDoBf7Lv132RVuSqVwQO3a -# ALLkuRnnTIoRmMGo0fIMQrtwR6UHB06xdqOkAfqB6exubXTHu44+duHUCdE4ngjE -# LBQyluMuSOnHaEdveIbt31OhMEX/4nQkph4+Ah0eR4H2sTRrVKmKrlOoQlhia73Q -# g2dHoitcX1uT1vW3Knpt9Mt76H7ZHbLNspMZLkWBabKMl6BdaWZXYpPGdS+qY80g -# DaNCvFq0d10UMu7xHesIqXpTDT3Q3AeOxSylSTc/74P3og9j3OuemEFauFzL55t1 -# MvpadEhQmD8uFMxFv/iZOjwvcdY1zhanVLLyplz13/NzSoU3QjhPdqAGhRIwh/YD -# zo3jCdVJgWQRrW83P3qWFFkxNiME2iO4IuYgj7RwseGwv7I9cxOyaHihKMdT9Neo -# SjpSNzVnKKGcYMtOdMtKFqoV7Cim2m84GmIYZTBorR/Po9iwlasTYKFpGZqdWKyY -# nJO2FV8oMmWkIK1iagLLgEt6ZaR0rk/1jUYssyTiRqWr84Qs3XL/V5KUBEtUEQfQ -# /4RtnI09uFFUIGJZV9mD/xOUksWodGrCQSem6Hy261xMJAHqTqMuDKgwi8xk/mfl -# r7yhXPL73SOULmu1Aqu4I7Gpe6QwNW2TtQBxM3vtSTmdPW6rK5y0gED51RjsyK0C -# AwEAAaOCAg4wggIKMA4GA1UdDwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAd -# BgNVHQ4EFgQUZZ9RzoVofy+KRYiq3acxux4NAF4wVAYDVR0gBE0wSzBJBgRVHSAA -# MEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv -# RG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAS -# BgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFNlBKbAPD2Ns72nX9c0pnqRI -# ajDmMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w -# a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2ln -# bmluZyUyMFBDQSUyMDIwMjEuY3JsMIGuBggrBgEFBQcBAQSBoTCBnjBtBggrBgEF -# BQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNy -# b3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAy -# MDIxLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9zb2Z0LmNv -# bS9vY3NwMA0GCSqGSIb3DQEBDAUAA4ICAQBFSWDUd08X4g5HzvVfrB1SiV8pk6XP -# HT9jPkCmvU/uvBzmZRAjYk2gKYR3pXoStRJaJ/lhjC5Dq/2R7P1YRZHCDYyK0zvS -# RMdE6YQtgGjmsdhzD0nCS6hVVcgfmNQscPJ1WHxbvG5EQgYQ0ZED1FN0MOPQzWe1 -# zbH5Va0dSxtnodBVRjnyDYEm7sNEcvJHTG3eXzAyd00E5KDCsEl4z5O0mvXqwaH2 -# PS0200E6P4WqLwgs/NmUu5+Aa8Lw/2En2VkIW7Pkir4Un1jG6+tj/ehuqgFyUPPC -# h6kbnvk48bisi/zPjAVkj7qErr7fSYICCzJ4s4YUNVVHgdoFn2xbW7ZfBT3QA9zf -# hq9u4ExXbrVD5rxXSTFEUg2gzQq9JHxsdHyMfcCKLFQOXODSzcYeLpCd+r6GcoDB -# ToyPdKccjC6mAq6+/hiMDnpvKUIHpyYEzWUeattyKXtMf+QrJeQ+ny5jBL+xqdOO -# PEz3dg7qn8/oprUrUbGLBv9fWm18fWXdAv1PCtLL/acMLtHoyeSVMKQYqDHb3Qm0 -# uQ+NQ0YE4kUxSQa+W/cCzYAI32uN0nb9M4Mr1pj4bJZidNkM4JyYqezohILxYkgH -# bboJQISrQWrm5RYdyhKBpptJ9JJn0Z63LjdnzlOUxjlsAbQir2Wmz/OJE703BbHm -# QZRwzPx1vu7S5zCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJ -# KoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBD -# b3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNh -# dGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIw -# MDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p -# Y3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlm -# aWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -# ADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3 -# qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrw -# eLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9 -# rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8s -# ZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfW -# o5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC6 -# 9oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjk -# Vd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHg -# YYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu -# 0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeL -# zdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGj -# ggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0O -# BBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8G -# CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3Mv -# UmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0T -# AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYD -# VR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j -# cmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIw -# Q2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEE -# gbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp -# b3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIw -# Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYB -# BQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG -# 9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdP -# Q4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVI -# E1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T -# 8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4 -# e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaB -# jhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/t -# uLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQw -# K8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX -# 3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQL -# Uz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i -# 3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghrm -# MIIa4gIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -# cG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0Mg -# Q0EgMDICEzMAB+pUev/hD9oPMBwAAAAH6lQwDQYJYIZIAWUDBAIBBQCggbIwGQYJ -# KoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB -# gjcCARUwLwYJKoZIhvcNAQkEMSIEICpXe3RS3b2coD0CJveEHlglqtPUYZ2FqSrO -# UfP6C6Y4MEYGCisGAQQBgjcCAQwxODA2oDCALgBQAHkAdABoAG8AbgAgADMALgAx -# ADQALgA0ACAAKAAyADMAMQAxADYAZgA5ACmhAoAAMA0GCSqGSIb3DQEBAQUABIIB -# gHaAK9dRSQxQvAiBXu8BOjm/3WL7Hdh4vVPDdI7TVKrNk9GE/8isBY5v3SDISaGV -# VzilkWjgUJX1tp5Wq3Ix9zJVToVG3kaHlNrEjb+cK8oqkMJqIS0GTrS70Xs1UPKk -# PNSzUfi1ddmCW9Up3bmvR7e5SotcgAKysucyRPHmhDZKdC0tM3FdzqbFMs0QV1QL -# gUzdgWEMqRQp7PN9Y3uHeO7/FUUGkEGBHuKq9kGXbnYGwZEazzy6Uxx2Nd47iCsu -# cEiOdpecA13fGE6lnM+uTZGOvshUVQeTIkr5pb2NS+lXF+CEq6uqMntdAfblYzCs -# gTCp8OflGXHVnbo4p8SsrGaBV7KnbzCk7uuEqW3SJiQfMrkQjvjc1cRwQvOVVaPj -# F1Qknn7KmxukU7FEIwyGXPKQ5OG8oUugOTS/5aqSbpmY6HuTbbWH/7MULJlfikOq -# zuteCVjvd18Y6LMk+mK1x9PAtoHmZuMIedP6rHNE8admogur39k1IhRJIcG9S8Kk -# 3aGCGBEwghgNBgorBgEEAYI3AwMBMYIX/TCCF/kGCSqGSIb3DQEHAqCCF+owghfm -# AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFiBgsqhkiG9w0BCRABBKCCAVEEggFNMIIB -# SQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCASSpbbgjgopvaqW5Og -# e0ZpH9C7TBmrsY+qwoqXJMywiwIGacJyyM2cGBMyMDI2MDQwNzE2MTkwNy44NjJa -# MASAAgH0oIHhpIHeMIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv -# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -# aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYD -# VQQLEx5uU2hpZWxkIFRTUyBFU046N0QwMC0wNUUwLUQ5NDcxNTAzBgNVBAMTLE1p -# Y3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oIIPITCC -# B4IwggVqoAMCAQICEzMAAAAF5c8P/2YuyYcAAAAAAAUwDQYJKoZIhvcNAQEMBQAw -# dzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFI -# MEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENl -# cnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIwMTExOTIwMzIzMVoXDTM1MTEx -# OTIwNDIzMVowYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw -# b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1w -# aW5nIENBIDIwMjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCefOdS -# Y/3gxZ8FfWO1BiKjHB7X55cz0RMFvWVGR3eRwV1wb3+yq0OXDEqhUhxqoNv6iYWK -# jkMcLhEFxvJAeNcLAyT+XdM5i2CgGPGcb95WJLiw7HzLiBKrxmDj1EQB/mG5eEiR -# BEp7dDGzxKCnTYocDOcRr9KxqHydajmEkzXHOeRGwU+7qt8Md5l4bVZrXAhK+WSk -# 5CihNQsWbzT1nRliVDwunuLkX1hyIWXIArCfrKM3+RHh+Sq5RZ8aYyik2r8HxT+l -# 2hmRllBvE2Wok6IEaAJanHr24qoqFM9WLeBUSudz+qL51HwDYyIDPSQ3SeHtKog0 -# ZubDk4hELQSxnfVYXdTGncaBnB60QrEuazvcob9n4yR65pUNBCF5qeA4QwYnilBk -# fnmeAjRN3LVuLr0g0FXkqfYdUmj1fFFhH8k8YBozrEaXnsSL3kdTD01X+4LfIWOu -# FzTzuoslBrBILfHNj8RfOxPgjuwNvE6YzauXi4orp4Sm6tF245DaFOSYbWFK5ZgG -# 6cUY2/bUq3g3bQAqZt65KcaewEJ3ZyNEobv35Nf6xN6FrA6jF9447+NHvCjeWLCQ -# Z3M8lgeCcnnhTFtyQX3XgCoc6IRXvFOcPVrr3D9RPHCMS6Ckg8wggTrtIVnY8yjb -# vGOUsAdZbeXUIQAWMs0d3cRDv09SvwVRd61evQIDAQABo4ICGzCCAhcwDgYDVR0P -# AQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRraSg6NS9IY0DP -# e9ivSek+2T3bITBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0 -# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt -# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB -# MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9o -# qKIwgYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w -# a2lvcHMvY3JsL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIw -# Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgZQGCCsG -# AQUFBwEBBIGHMIGEMIGBBggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQu -# Y29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNh -# dGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0 -# MA0GCSqGSIb3DQEBDAUAA4ICAQBfiHbHfm21WhV150x4aPpO4dhEmSUVpbixNDmv -# 6TvuIHv1xIs174bNGO/ilWMm+Jx5boAXrJxagRhHQtiFprSjMktTliL4sKZyt2i+ -# SXncM23gRezzsoOiBhv14YSd1Klnlkzvgs29XNjT+c8hIfPRe9rvVCMPiH7zPZcw -# 5nNjthDQ+zD563I1nUJ6y59TbXWsuyUsqw7wXZoGzZwijWT5oc6GvD3HDokJY401 -# uhnj3ubBhbkR83RbfMvmzdp3he2bvIUztSOuFzRqrLfEvsPkVHYnvH1wtYyrt5vS -# hiKheGpXa2AWpsod4OJyT4/y0dggWi8g/tgbhmQlZqDUf3UqUQsZaLdIu/XSjgoZ -# qDjamzCPJtOLi2hBwL+KsCh0Nbwc21f5xvPSwym0Ukr4o5sCcMUcSy6TEP7uMV8R -# X0eH/4JLEpGyae6Ki8JYg5v4fsNGif1OXHJ2IWG+7zyjTDfkmQ1snFOTgyEX8qBp -# efQbF0fx6URrYiarjmBprwP6ZObwtZXJ23jK3Fg/9uqM3j0P01nzVygTppBabzxP -# Ah/hHhhls6kwo3QLJ6No803jUsZcd4JQxiYHHc+Q/wAMcPUnYKv/q2O444LO1+n6 -# j01z5mggCSlRwD9faBIySAcA9S8h22hIAcRQqIGEjolCK9F6nK9ZyX4lhthsGHum -# aABdWzCCB5cwggV/oAMCAQICEzMAAABV2d1pJij5+OIAAAAAAFUwDQYJKoZIhvcN -# AQEMBQAwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh -# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n -# IENBIDIwMjAwHhcNMjUxMDIzMjA0NjQ5WhcNMjYxMDIyMjA0NjQ5WjCB2zELMAkG -# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9z -# b2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO -# OjdEMDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBU -# aW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -# AgoCggIBAL25H5IeWUiz9DAlFmn2sPymaFWbvYkMfK+ScIWb3a1IvOlIwghUDjY0 -# Gp6yMRhfYURiGS0GedIB6ywvuH6VBCX3+bdOFcAclgtv21jrpOjZmk4fSaT2Q3Bs -# zUfeUJa8o3xI7ZfoMY9dszTxHQAz6ZVX87fHGEVhQcfxW33IdPJOj/ae419qtYxT -# 21MVmCfsTshgtWioQxmOW/vMC9/b+qgtBxSMf798vm3qfmhF6KCvFaHlivrM32hY -# 16PGE3L0PFC+LM7vRxU7mTb+r76CeybvqOWk4+dbKYftPhV1t/E5S/6wwXeYmu/Y -# 7JC7Tnh2w45G5Y4pcM3oHMb/YuPRdOWa0v+RC2QgmNVWqjuxDiylWscXQDuaMtb2 -# 9AcdGUVV9ZsRY2M2sthAtOdZOshiR5ufMtaHtiCkWv0jNfgUxrHurxzYuUNneWZ6 -# EfQDgFAw8CSCKkSOK2c9jEop4ddVq10xvbqxdrqMneVXvvIcXrPQAXj9j2ECpV2E -# wMb3Wnmpw00P78JpzPsk3Fs61ZvOGd/F1RcOBu6f2TWdp7HL7+rq7tgHr13Mldbf -# IWu4lpoYYE1gTQa1Yrg5XN4j7zs9klT2z3qocmPzV8DWQgIHNh+aTs7bujMEMQyI -# 7Xt1zPxZCgcR6H0tmmzU/9BxvsWbRalCQ2sYGyWupTdc4e7KY7kPAgMBAAGjggHL -# MIIBxzAdBgNVHQ4EFgQUVgRfEG3cCAPwyL+pyRbKwdesZbYwHwYDVR0jBBgwFoAU -# a2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZbaHR0cDovL3d3 -# dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwUHVibGljJTIw -# UlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5BggrBgEFBQcBAQRt -# MGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv -# Y2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIw -# Q0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUF -# BwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30BATBB -# MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0Rv -# Y3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDAUAA4ICAQBS -# HuGSVHvalCnFnlsqXIQefH1xP2SFr9g+Vz+f5P7QeywjfQb5jUlSmd1XnJUDPe/M -# HxL7r3TEElL+mNtG6CDPAytStSFPXD9tTBtBMYh8Wqo64pH9qm361yIqeBH979mz -# WCkMQsTd0nM6dUl9B+7qiti+ToXwxIl39eYqLuYYfhD2mqqePXMzUKSQzkf73yYI -# VHP6nLJQz4aAmaWcfG9jg78sBkDV8KpW7JgktuLhphJEN1B+SVHjenPdcmrFXIUu -# /K4jK5ukfWaQIjuaXzSjBlNjC5tQN6adPfA3GxUwHPeR4ekL5If/9vBf13tmzBW+ -# gy+0sNGTveb9IL9GU8iX8UvywsX62nhCCPRUhTigDBKdczRUrNrntBhowbfchBDF -# ML8avRMRc9Gmc2JvIryX336SFQ51//q1UU2HMSJEMhWLJSIWJVhfUowsOa+PampI -# zETYfFvTu2mqKJUlWZXkGYxrdCvCczJcqeoadpW1ul6kcdnDh228SQ8ZhDc6IRlM -# 4iNd5SNoNgX+aom3wuGyjUaSaPZWxPB1G2NKiYhPLt0lPHg0Gskj1zhISY8UQkMM -# Dr3o2JgRuT+wnJEDQUp55ddvhSkSoD6I9DL/s+TjIY/c9jLaW5xywJHqdKHUApRM -# sghv7kebSua1upmR+TquelFktDSOjVdSRkuya4uoxTGCB0Mwggc/AgEBMHgwYTEL -# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG -# A1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAC -# EzMAAABV2d1pJij5+OIAAAAAAFUwDQYJYIZIAWUDBAIBBQCgggScMBEGCyqGSIb3 -# DQEJEAIPMQIFADAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcN -# AQkFMQ8XDTI2MDQwNzE2MTkwN1owLwYJKoZIhvcNAQkEMSIEIO1tbnR5rJvq+GXf -# 4bgeV3HDcP+8Ud48R8sLBQBLI+rBMIG5BgsqhkiG9w0BCRACLzGBqTCBpjCBozCB -# oAQg2Lk8l2SGYru/ff7+D2qrJnkswcYdK6pGKu7GGGr4/s0wfDBlpGMwYTELMAkG -# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE -# AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMA -# AABV2d1pJij5+OIAAAAAAFUwggNeBgsqhkiG9w0BCRACEjGCA00wggNJoYIDRTCC -# A0EwggIpAgEBMIIBCaGB4aSB3jCB2zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD -# b3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9u -# czEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdEMDAtMDVFMC1EOTQ3MTUwMwYD -# VQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0 -# eaIjCgEBMAcGBSsOAwIaAxUAHTtUAYJlv7bgWVeRBo4X7FeHDeqgZzBlpGMwYTEL -# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG -# A1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAw -# DQYJKoZIhvcNAQELBQACBQDtf2YdMCIYDzIwMjYwNDA3MTExNjQ1WhgPMjAyNjA0 -# MDgxMTE2NDVaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAO1/Zh0CAQAwBwIBAAIC -# Ew4wBwIBAAICHEcwCgIFAO2At50CAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYB -# BAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsFAAOC -# AQEAj/DYTzrEaV8hMcUsbVdSBihFoM0FgJoy99LL0e/ztow4UwgL27kPtwlbyVfW -# Onw+tLBT2sbsS4yIj+QnTUoHeqNA/Ue9FPkPH801qthzRDZ4UTwz09KgVfKchw0Y -# jGTSpL8GQL6cAYgFuf/Zh0qEVwYW4OxiyKEMKpzYdqoNwRx9LrCgE0km4WZ3bDBw -# VFCKcd176gCpV5Yle8MbDWFizSUrylp7v7q/Knx0BrWs8Q17RUHnYAyehZCD0d0H -# zXEClh+sKxScyk8TjI2o7MKau8YRHzeLDN9wj24hJ9URkNThjDhY3ruNMvves5xS -# fKmhpIqWsb5ZvZW4hmbqdxwWbDANBgkqhkiG9w0BAQEFAASCAgA6C6+LOeV/wer0 -# SB0XI0QO89oeTrCbxFNxmKegd8rz7ERBKLcxLh9WFOfDf4t5oi0RlPP8cFwByVIb -# TIgtggkIq5uN6/qJ9+iF+w7a4123dTuQSAi35d7VMC/q8rtHL6ev5zeKeYVnov5C -# JqmlUyVL5NPRxrUaWeXNXOmOMZwmNTqZspf/eadKTiBwDVJZ4DLXkrZNoR3Gd7Wq -# w6N/gt5MDhL26NU2xnysk2pXRdTna4Fh545XD2YGqZAJdJ6nzv/uSQBDnAL7uOV1 -# U5I+hEBgbCMLAkNzTJUprQFaz1X9taVTbYQOE8IGkseOg1nw8kDc5nYga3kNZQ/k -# u4gbx3opZuxUL43teYm17AJwHphWgQojwdvi+OozR0bS27xVK5O5Y+5yReg4U6DG -# XjuaFzxxA8efdy7DDETfFWhO6fSfREWcf+Nb9uA7i+qPOJvK4ls5p3yTwJgG1KUr -# UNFhIw5LZZxn+yAArVY712VcCDsdBQiJ3ZbS90/AXjtsgFP/Cr99YhoKi7WNOtJ9 -# CHXI8Y5RMy3AAGBXmSJ2f1bEVX7Ya1Wdi7UlwgYbchhfL25XRKonczGNxAzymO6t -# MCAweDvuELomErT+70YfQXd1kye4j5KiCQXYtpedFgb9sDqGv5j7c5ACHVyAsvPA -# Wx3T3b6yi2pK9C6xC8g5cmjf8c7Rnw== -# SIG # End signature block diff --git a/Python314_4_x86_Template/Lib/venv/scripts/common/activate b/Python314_4_x86_Template/Lib/venv/scripts/common/activate deleted file mode 100644 index 70673a265..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/common/activate +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# You cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # Call hash to forget past locations. Without forgetting - # past locations the $PATH changes we made may not be respected. - # See "man bash" for more details. hash is usually a builtin of your shell - hash -r 2> /dev/null - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - unset VIRTUAL_ENV_PROMPT - if [ ! "${1:-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -# on Windows, a path can contain colons and backslashes and has to be converted: -case "$(uname)" in - CYGWIN*|MSYS*|MINGW*) - # transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW - # and to /cygdrive/d/path/to/venv on Cygwin - VIRTUAL_ENV=$(cygpath __VENV_DIR__) - export VIRTUAL_ENV - ;; - *) - # use the path as-is - export VIRTUAL_ENV=__VENV_DIR__ - ;; -esac - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/"__VENV_BIN_NAME__":$PATH" -export PATH - -VIRTUAL_ENV_PROMPT=__VENV_PROMPT__ -export VIRTUAL_ENV_PROMPT - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - PS1="("__VENV_PROMPT__") ${PS1:-}" - export PS1 -fi - -# Call hash to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -hash -r 2> /dev/null diff --git a/Python314_4_x86_Template/Lib/venv/scripts/common/activate.fish b/Python314_4_x86_Template/Lib/venv/scripts/common/activate.fish deleted file mode 100644 index 284a7469c..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/common/activate.fish +++ /dev/null @@ -1,69 +0,0 @@ -# This file must be used with "source <venv>/bin/activate.fish" *from fish* -# (https://fishshell.com/). You cannot run it directly. - -function deactivate -d "Exit virtual environment and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - set -e _OLD_FISH_PROMPT_OVERRIDE - # prevents error when using nested fish instances (Issue #93858) - if functions -q _old_fish_prompt - functions -e fish_prompt - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - end - - set -e VIRTUAL_ENV - set -e VIRTUAL_ENV_PROMPT - if test "$argv[1]" != "nondestructive" - # Self-destruct! - functions -e deactivate - end -end - -# Unset irrelevant variables. -deactivate nondestructive - -set -gx VIRTUAL_ENV __VENV_DIR__ - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/"__VENV_BIN_NAME__ $PATH -set -gx VIRTUAL_ENV_PROMPT __VENV_PROMPT__ - -# Unset PYTHONHOME if set. -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # Save the current fish_prompt function as the function _old_fish_prompt. - functions -c fish_prompt _old_fish_prompt - - # With the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command. - set -l old_status $status - - # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s(%s)%s " (set_color 4B8BBE) __VENV_PROMPT__ (set_color normal) - - # Restore the return status of the previous command. - echo "exit $old_status" | . - # Output the original/"old" prompt. - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" -end diff --git a/Python314_4_x86_Template/Lib/venv/scripts/nt/activate.bat b/Python314_4_x86_Template/Lib/venv/scripts/nt/activate.bat deleted file mode 100644 index 35533e4b5..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/nt/activate.bat +++ /dev/null @@ -1,34 +0,0 @@ -@echo off - -rem This file is UTF-8 encoded, so we need to update the current code page while executing it -for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( - set _OLD_CODEPAGE=%%a -) -if defined _OLD_CODEPAGE ( - "%SystemRoot%\System32\chcp.com" 65001 > nul -) - -set "VIRTUAL_ENV=__VENV_DIR__" - -if not defined PROMPT set PROMPT=$P$G - -if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% -if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% - -set "_OLD_VIRTUAL_PROMPT=%PROMPT%" -set "PROMPT=(__VENV_PROMPT__) %PROMPT%" - -if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% -set PYTHONHOME= - -if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% -if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% - -set "PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%" -set "VIRTUAL_ENV_PROMPT=__VENV_PROMPT__" - -:END -if defined _OLD_CODEPAGE ( - "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul - set _OLD_CODEPAGE= -) diff --git a/Python314_4_x86_Template/Lib/venv/scripts/nt/deactivate.bat b/Python314_4_x86_Template/Lib/venv/scripts/nt/deactivate.bat deleted file mode 100644 index 62a39a758..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/nt/deactivate.bat +++ /dev/null @@ -1,22 +0,0 @@ -@echo off - -if defined _OLD_VIRTUAL_PROMPT ( - set "PROMPT=%_OLD_VIRTUAL_PROMPT%" -) -set _OLD_VIRTUAL_PROMPT= - -if defined _OLD_VIRTUAL_PYTHONHOME ( - set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" - set _OLD_VIRTUAL_PYTHONHOME= -) - -if defined _OLD_VIRTUAL_PATH ( - set "PATH=%_OLD_VIRTUAL_PATH%" -) - -set _OLD_VIRTUAL_PATH= - -set VIRTUAL_ENV= -set VIRTUAL_ENV_PROMPT= - -:END diff --git a/Python314_4_x86_Template/Lib/venv/scripts/nt/venvlauncher.exe b/Python314_4_x86_Template/Lib/venv/scripts/nt/venvlauncher.exe deleted file mode 100644 index c5761f9807356b2b111ad181af54718e342e1eca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230232 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 SBO7Lus^Gv~^?4Ty0{t5^&N$ov diff --git a/Python314_4_x86_Template/Lib/venv/scripts/nt/venvwlauncher.exe b/Python314_4_x86_Template/Lib/venv/scripts/nt/venvwlauncher.exe deleted file mode 100644 index 1b62a5b7a63a306de1f2b2c6778087fc42ac9cf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226648 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 diff --git a/Python314_4_x86_Template/Lib/venv/scripts/posix/activate.csh b/Python314_4_x86_Template/Lib/venv/scripts/posix/activate.csh deleted file mode 100644 index 2a3fa8354..000000000 --- a/Python314_4_x86_Template/Lib/venv/scripts/posix/activate.csh +++ /dev/null @@ -1,27 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. - -# Created by Davide Di Blasi <davidedb@gmail.com>. -# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com> - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV __VENV_DIR__ - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/"__VENV_BIN_NAME__":$PATH" -setenv VIRTUAL_ENV_PROMPT __VENV_PROMPT__ - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = "("__VENV_PROMPT__") $prompt:q" -endif - -alias pydoc python -m pydoc - -rehash diff --git a/Python314_4_x86_Template/Lib/warnings.py b/Python314_4_x86_Template/Lib/warnings.py deleted file mode 100644 index 6759857d9..000000000 --- a/Python314_4_x86_Template/Lib/warnings.py +++ /dev/null @@ -1,99 +0,0 @@ -import sys - -__all__ = [ - "warn", - "warn_explicit", - "showwarning", - "formatwarning", - "filterwarnings", - "simplefilter", - "resetwarnings", - "catch_warnings", - "deprecated", -] - -from _py_warnings import ( - WarningMessage, - _DEPRECATED_MSG, - _OptionError, - _add_filter, - _deprecated, - _filters_mutated, - _filters_mutated_lock_held, - _filters_version, - _formatwarning_orig, - _formatwarnmsg, - _formatwarnmsg_impl, - _get_context, - _get_filters, - _getaction, - _getcategory, - _is_filename_to_skip, - _is_internal_filename, - _is_internal_frame, - _lock, - _new_context, - _next_external_frame, - _processoptions, - _set_context, - _set_module, - _setoption, - _setup_defaults, - _showwarning_orig, - _showwarnmsg, - _showwarnmsg_impl, - _use_context, - _warn_unawaited_coroutine, - _warnings_context, - catch_warnings, - defaultaction, - deprecated, - filters, - filterwarnings, - formatwarning, - onceregistry, - resetwarnings, - showwarning, - simplefilter, - warn, - warn_explicit, -) - -try: - # Try to use the C extension, this will replace some parts of the - # _py_warnings implementation imported above. - from _warnings import ( - _acquire_lock, - _defaultaction as defaultaction, - _filters_mutated_lock_held, - _onceregistry as onceregistry, - _release_lock, - _warnings_context, - filters, - warn, - warn_explicit, - ) - - _warnings_defaults = True - - class _Lock: - def __enter__(self): - _acquire_lock() - return self - - def __exit__(self, *args): - _release_lock() - - _lock = _Lock() -except ImportError: - _warnings_defaults = False - - -# Module initialization -_set_module(sys.modules[__name__]) -_processoptions(sys.warnoptions) -if not _warnings_defaults: - _setup_defaults() - -del _warnings_defaults -del _setup_defaults diff --git a/Python314_4_x86_Template/Lib/wave.py b/Python314_4_x86_Template/Lib/wave.py deleted file mode 100644 index b8476e264..000000000 --- a/Python314_4_x86_Template/Lib/wave.py +++ /dev/null @@ -1,665 +0,0 @@ -"""Stuff to parse WAVE files. - -Usage. - -Reading WAVE files: - f = wave.open(file, 'r') -where file is either the name of a file or an open file pointer. -The open file pointer must have methods read(), seek(), and close(). -When the setpos() and rewind() methods are not used, the seek() -method is not necessary. - -This returns an instance of a class with the following public methods: - getnchannels() -- returns number of audio channels (1 for - mono, 2 for stereo) - getsampwidth() -- returns sample width in bytes - getframerate() -- returns sampling frequency - getnframes() -- returns number of audio frames - getcomptype() -- returns compression type ('NONE' for linear samples) - getcompname() -- returns human-readable version of - compression type ('not compressed' linear samples) - getparams() -- returns a namedtuple consisting of all of the - above in the above order - getmarkers() -- returns None (for compatibility with the - old aifc module) - getmark(id) -- raises an error since the mark does not - exist (for compatibility with the old aifc module) - readframes(n) -- returns at most n frames of audio - rewind() -- rewind to the beginning of the audio stream - setpos(pos) -- seek to the specified position - tell() -- return the current position - close() -- close the instance (make it unusable) -The position returned by tell() and the position given to setpos() -are compatible and have nothing to do with the actual position in the -file. -The close() method is called automatically when the class instance -is destroyed. - -Writing WAVE files: - f = wave.open(file, 'w') -where file is either the name of a file or an open file pointer. -The open file pointer must have methods write(), tell(), seek(), and -close(). - -This returns an instance of a class with the following public methods: - setnchannels(n) -- set the number of channels - setsampwidth(n) -- set the sample width - setframerate(n) -- set the frame rate - setnframes(n) -- set the number of frames - setcomptype(type, name) - -- set the compression type and the - human-readable compression type - setparams(tuple) - -- set all parameters at once - tell() -- return current position in output file - writeframesraw(data) - -- write audio frames without patching up the - file header - writeframes(data) - -- write audio frames and patch up the file header - close() -- patch up the file header and close the - output file -You should set the parameters before the first writeframesraw or -writeframes. The total number of frames does not need to be set, -but when it is set to the correct value, the header does not have to -be patched up. -It is best to first set all parameters, perhaps possibly the -compression type, and then write audio frames using writeframesraw. -When all frames have been written, either call writeframes(b'') or -close() to patch up the sizes in the header. -The close() method is called automatically when the class instance -is destroyed. -""" - -from collections import namedtuple -import builtins -import struct -import sys - - -__all__ = ["open", "Error", "Wave_read", "Wave_write"] - -class Error(Exception): - pass - -WAVE_FORMAT_PCM = 0x0001 -WAVE_FORMAT_EXTENSIBLE = 0xFFFE -# Derived from uuid.UUID("00000001-0000-0010-8000-00aa00389b71").bytes_le -KSDATAFORMAT_SUBTYPE_PCM = b'\x01\x00\x00\x00\x00\x00\x10\x00\x80\x00\x00\xaa\x008\x9bq' - -_array_fmts = None, 'b', 'h', None, 'i' - -_wave_params = namedtuple('_wave_params', - 'nchannels sampwidth framerate nframes comptype compname') - - -def _byteswap(data, width): - swapped_data = bytearray(len(data)) - - for i in range(0, len(data), width): - for j in range(width): - swapped_data[i + width - 1 - j] = data[i + j] - - return bytes(swapped_data) - - -class _Chunk: - def __init__(self, file, align=True, bigendian=True, inclheader=False): - self.closed = False - self.align = align # whether to align to word (2-byte) boundaries - if bigendian: - strflag = '>' - else: - strflag = '<' - self.file = file - self.chunkname = file.read(4) - if len(self.chunkname) < 4: - raise EOFError - try: - self.chunksize = struct.unpack_from(strflag+'L', file.read(4))[0] - except struct.error: - raise EOFError from None - if inclheader: - self.chunksize = self.chunksize - 8 # subtract header - self.size_read = 0 - try: - self.offset = self.file.tell() - except (AttributeError, OSError): - self.seekable = False - else: - self.seekable = True - - def getname(self): - """Return the name (ID) of the current chunk.""" - return self.chunkname - - def close(self): - if not self.closed: - try: - self.skip() - finally: - self.closed = True - - def seek(self, pos, whence=0): - """Seek to specified position into the chunk. - Default position is 0 (start of chunk). - If the file is not seekable, this will result in an error. - """ - - if self.closed: - raise ValueError("I/O operation on closed file") - if not self.seekable: - raise OSError("cannot seek") - if whence == 1: - pos = pos + self.size_read - elif whence == 2: - pos = pos + self.chunksize - if pos < 0 or pos > self.chunksize: - raise RuntimeError - self.file.seek(self.offset + pos, 0) - self.size_read = pos - - def tell(self): - if self.closed: - raise ValueError("I/O operation on closed file") - return self.size_read - - def read(self, size=-1): - """Read at most size bytes from the chunk. - If size is omitted or negative, read until the end - of the chunk. - """ - - if self.closed: - raise ValueError("I/O operation on closed file") - if self.size_read >= self.chunksize: - return b'' - if size < 0: - size = self.chunksize - self.size_read - if size > self.chunksize - self.size_read: - size = self.chunksize - self.size_read - data = self.file.read(size) - self.size_read = self.size_read + len(data) - if self.size_read == self.chunksize and \ - self.align and \ - (self.chunksize & 1): - dummy = self.file.read(1) - self.size_read = self.size_read + len(dummy) - return data - - def skip(self): - """Skip the rest of the chunk. - If you are not interested in the contents of the chunk, - this method should be called so that the file points to - the start of the next chunk. - """ - - if self.closed: - raise ValueError("I/O operation on closed file") - if self.seekable: - try: - n = self.chunksize - self.size_read - # maybe fix alignment - if self.align and (self.chunksize & 1): - n = n + 1 - self.file.seek(n, 1) - self.size_read = self.size_read + n - return - except OSError: - pass - while self.size_read < self.chunksize: - n = min(8192, self.chunksize - self.size_read) - dummy = self.read(n) - if not dummy: - raise EOFError - - -class Wave_read: - """Variables used in this class: - - These variables are available to the user though appropriate - methods of this class: - _file -- the open file with methods read(), close(), and seek() - set through the __init__() method - _nchannels -- the number of audio channels - available through the getnchannels() method - _nframes -- the number of audio frames - available through the getnframes() method - _sampwidth -- the number of bytes per audio sample - available through the getsampwidth() method - _framerate -- the sampling frequency - available through the getframerate() method - _comptype -- the AIFF-C compression type ('NONE' if AIFF) - available through the getcomptype() method - _compname -- the human-readable AIFF-C compression type - available through the getcomptype() method - _soundpos -- the position in the audio stream - available through the tell() method, set through the - setpos() method - - These variables are used internally only: - _fmt_chunk_read -- 1 iff the FMT chunk has been read - _data_seek_needed -- 1 iff positioned correctly in audio - file for readframes() - _data_chunk -- instantiation of a chunk class for the DATA chunk - _framesize -- size of one frame in the file - """ - - def initfp(self, file): - self._convert = None - self._soundpos = 0 - self._file = _Chunk(file, bigendian = 0) - if self._file.getname() != b'RIFF': - raise Error('file does not start with RIFF id') - if self._file.read(4) != b'WAVE': - raise Error('not a WAVE file') - self._fmt_chunk_read = 0 - self._data_chunk = None - while 1: - self._data_seek_needed = 1 - try: - chunk = _Chunk(self._file, bigendian = 0) - except EOFError: - break - chunkname = chunk.getname() - if chunkname == b'fmt ': - self._read_fmt_chunk(chunk) - self._fmt_chunk_read = 1 - elif chunkname == b'data': - if not self._fmt_chunk_read: - raise Error('data chunk before fmt chunk') - self._data_chunk = chunk - self._nframes = chunk.chunksize // self._framesize - self._data_seek_needed = 0 - break - chunk.skip() - if not self._fmt_chunk_read or not self._data_chunk: - raise Error('fmt chunk and/or data chunk missing') - - def __init__(self, f): - self._i_opened_the_file = None - if isinstance(f, str): - f = builtins.open(f, 'rb') - self._i_opened_the_file = f - # else, assume it is an open file object already - try: - self.initfp(f) - except: - if self._i_opened_the_file: - f.close() - raise - - def __del__(self): - self.close() - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - # - # User visible methods. - # - def getfp(self): - return self._file - - def rewind(self): - self._data_seek_needed = 1 - self._soundpos = 0 - - def close(self): - self._file = None - file = self._i_opened_the_file - if file: - self._i_opened_the_file = None - file.close() - - def tell(self): - return self._soundpos - - def getnchannels(self): - return self._nchannels - - def getnframes(self): - return self._nframes - - def getsampwidth(self): - return self._sampwidth - - def getframerate(self): - return self._framerate - - def getcomptype(self): - return self._comptype - - def getcompname(self): - return self._compname - - def getparams(self): - return _wave_params(self.getnchannels(), self.getsampwidth(), - self.getframerate(), self.getnframes(), - self.getcomptype(), self.getcompname()) - - def getmarkers(self): - import warnings - warnings._deprecated("Wave_read.getmarkers", remove=(3, 15)) - return None - - def getmark(self, id): - import warnings - warnings._deprecated("Wave_read.getmark", remove=(3, 15)) - raise Error('no marks') - - def setpos(self, pos): - if pos < 0 or pos > self._nframes: - raise Error('position not in range') - self._soundpos = pos - self._data_seek_needed = 1 - - def readframes(self, nframes): - if self._data_seek_needed: - self._data_chunk.seek(0, 0) - pos = self._soundpos * self._framesize - if pos: - self._data_chunk.seek(pos, 0) - self._data_seek_needed = 0 - if nframes == 0: - return b'' - data = self._data_chunk.read(nframes * self._framesize) - if self._sampwidth != 1 and sys.byteorder == 'big': - data = _byteswap(data, self._sampwidth) - if self._convert and data: - data = self._convert(data) - self._soundpos = self._soundpos + len(data) // (self._nchannels * self._sampwidth) - return data - - # - # Internal methods. - # - - def _read_fmt_chunk(self, chunk): - try: - wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack_from('<HHLLH', chunk.read(14)) - except struct.error: - raise EOFError from None - if wFormatTag != WAVE_FORMAT_PCM and wFormatTag != WAVE_FORMAT_EXTENSIBLE: - raise Error('unknown format: %r' % (wFormatTag,)) - try: - sampwidth = struct.unpack_from('<H', chunk.read(2))[0] - except struct.error: - raise EOFError from None - if wFormatTag == WAVE_FORMAT_EXTENSIBLE: - try: - cbSize, wValidBitsPerSample, dwChannelMask = struct.unpack_from('<HHL', chunk.read(8)) - # Read the entire UUID from the chunk - SubFormat = chunk.read(16) - if len(SubFormat) < 16: - raise EOFError - except struct.error: - raise EOFError from None - if SubFormat != KSDATAFORMAT_SUBTYPE_PCM: - try: - import uuid - subformat_msg = f'unknown extended format: {uuid.UUID(bytes_le=SubFormat)}' - except Exception: - subformat_msg = 'unknown extended format' - raise Error(subformat_msg) - self._sampwidth = (sampwidth + 7) // 8 - if not self._sampwidth: - raise Error('bad sample width') - if not self._nchannels: - raise Error('bad # of channels') - self._framesize = self._nchannels * self._sampwidth - self._comptype = 'NONE' - self._compname = 'not compressed' - - -class Wave_write: - """Variables used in this class: - - These variables are user settable through appropriate methods - of this class: - _file -- the open file with methods write(), close(), tell(), seek() - set through the __init__() method - _comptype -- the AIFF-C compression type ('NONE' in AIFF) - set through the setcomptype() or setparams() method - _compname -- the human-readable AIFF-C compression type - set through the setcomptype() or setparams() method - _nchannels -- the number of audio channels - set through the setnchannels() or setparams() method - _sampwidth -- the number of bytes per audio sample - set through the setsampwidth() or setparams() method - _framerate -- the sampling frequency - set through the setframerate() or setparams() method - _nframes -- the number of audio frames written to the header - set through the setnframes() or setparams() method - - These variables are used internally only: - _datalength -- the size of the audio samples written to the header - _nframeswritten -- the number of frames actually written - _datawritten -- the size of the audio samples actually written - """ - - _file = None - - def __init__(self, f): - self._i_opened_the_file = None - if isinstance(f, str): - f = builtins.open(f, 'wb') - self._i_opened_the_file = f - try: - self.initfp(f) - except: - if self._i_opened_the_file: - f.close() - raise - - def initfp(self, file): - self._file = file - self._convert = None - self._nchannels = 0 - self._sampwidth = 0 - self._framerate = 0 - self._nframes = 0 - self._nframeswritten = 0 - self._datawritten = 0 - self._datalength = 0 - self._headerwritten = False - - def __del__(self): - self.close() - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - # - # User visible methods. - # - def setnchannels(self, nchannels): - if self._datawritten: - raise Error('cannot change parameters after starting to write') - if nchannels < 1: - raise Error('bad # of channels') - self._nchannels = nchannels - - def getnchannels(self): - if not self._nchannels: - raise Error('number of channels not set') - return self._nchannels - - def setsampwidth(self, sampwidth): - if self._datawritten: - raise Error('cannot change parameters after starting to write') - if sampwidth < 1 or sampwidth > 4: - raise Error('bad sample width') - self._sampwidth = sampwidth - - def getsampwidth(self): - if not self._sampwidth: - raise Error('sample width not set') - return self._sampwidth - - def setframerate(self, framerate): - if self._datawritten: - raise Error('cannot change parameters after starting to write') - if framerate <= 0: - raise Error('bad frame rate') - self._framerate = int(round(framerate)) - - def getframerate(self): - if not self._framerate: - raise Error('frame rate not set') - return self._framerate - - def setnframes(self, nframes): - if self._datawritten: - raise Error('cannot change parameters after starting to write') - self._nframes = nframes - - def getnframes(self): - return self._nframeswritten - - def setcomptype(self, comptype, compname): - if self._datawritten: - raise Error('cannot change parameters after starting to write') - if comptype not in ('NONE',): - raise Error('unsupported compression type') - self._comptype = comptype - self._compname = compname - - def getcomptype(self): - return self._comptype - - def getcompname(self): - return self._compname - - def setparams(self, params): - nchannels, sampwidth, framerate, nframes, comptype, compname = params - if self._datawritten: - raise Error('cannot change parameters after starting to write') - self.setnchannels(nchannels) - self.setsampwidth(sampwidth) - self.setframerate(framerate) - self.setnframes(nframes) - self.setcomptype(comptype, compname) - - def getparams(self): - if not self._nchannels or not self._sampwidth or not self._framerate: - raise Error('not all parameters set') - return _wave_params(self._nchannels, self._sampwidth, self._framerate, - self._nframes, self._comptype, self._compname) - - def setmark(self, id, pos, name): - import warnings - warnings._deprecated("Wave_write.setmark", remove=(3, 15)) - raise Error('setmark() not supported') - - def getmark(self, id): - import warnings - warnings._deprecated("Wave_write.getmark", remove=(3, 15)) - raise Error('no marks') - - def getmarkers(self): - import warnings - warnings._deprecated("Wave_write.getmarkers", remove=(3, 15)) - return None - - def tell(self): - return self._nframeswritten - - def writeframesraw(self, data): - if not isinstance(data, (bytes, bytearray)): - data = memoryview(data).cast('B') - self._ensure_header_written(len(data)) - nframes = len(data) // (self._sampwidth * self._nchannels) - if self._convert: - data = self._convert(data) - if self._sampwidth != 1 and sys.byteorder == 'big': - data = _byteswap(data, self._sampwidth) - self._file.write(data) - self._datawritten += len(data) - self._nframeswritten = self._nframeswritten + nframes - - def writeframes(self, data): - self.writeframesraw(data) - if self._datalength != self._datawritten: - self._patchheader() - - def close(self): - try: - if self._file: - self._ensure_header_written(0) - if self._datalength != self._datawritten: - self._patchheader() - self._file.flush() - finally: - self._file = None - file = self._i_opened_the_file - if file: - self._i_opened_the_file = None - file.close() - - # - # Internal methods. - # - - def _ensure_header_written(self, datasize): - if not self._headerwritten: - if not self._nchannels: - raise Error('# channels not specified') - if not self._sampwidth: - raise Error('sample width not specified') - if not self._framerate: - raise Error('sampling rate not specified') - self._write_header(datasize) - - def _write_header(self, initlength): - assert not self._headerwritten - self._file.write(b'RIFF') - if not self._nframes: - self._nframes = initlength // (self._nchannels * self._sampwidth) - self._datalength = self._nframes * self._nchannels * self._sampwidth - try: - self._form_length_pos = self._file.tell() - except (AttributeError, OSError): - self._form_length_pos = None - self._file.write(struct.pack('<L4s4sLHHLLHH4s', - 36 + self._datalength, b'WAVE', b'fmt ', 16, - WAVE_FORMAT_PCM, self._nchannels, self._framerate, - self._nchannels * self._framerate * self._sampwidth, - self._nchannels * self._sampwidth, - self._sampwidth * 8, b'data')) - if self._form_length_pos is not None: - self._data_length_pos = self._file.tell() - self._file.write(struct.pack('<L', self._datalength)) - self._headerwritten = True - - def _patchheader(self): - assert self._headerwritten - if self._datawritten == self._datalength: - return - curpos = self._file.tell() - self._file.seek(self._form_length_pos, 0) - self._file.write(struct.pack('<L', 36 + self._datawritten)) - self._file.seek(self._data_length_pos, 0) - self._file.write(struct.pack('<L', self._datawritten)) - self._file.seek(curpos, 0) - self._datalength = self._datawritten - - -def open(f, mode=None): - if mode is None: - if hasattr(f, 'mode'): - mode = f.mode - else: - mode = 'rb' - if mode in ('r', 'rb'): - return Wave_read(f) - elif mode in ('w', 'wb'): - return Wave_write(f) - else: - raise Error("mode must be 'r', 'rb', 'w', or 'wb'") diff --git a/Python314_4_x86_Template/Lib/weakref.py b/Python314_4_x86_Template/Lib/weakref.py deleted file mode 100644 index 94e427814..000000000 --- a/Python314_4_x86_Template/Lib/weakref.py +++ /dev/null @@ -1,574 +0,0 @@ -"""Weak reference support for Python. - -This module is an implementation of PEP 205: - -https://peps.python.org/pep-0205/ -""" - -# Naming convention: Variables named "wr" are weak reference objects; -# they are called this instead of "ref" to avoid name collisions with -# the module-global ref() function imported from _weakref. - -from _weakref import ( - getweakrefcount, - getweakrefs, - ref, - proxy, - CallableProxyType, - ProxyType, - ReferenceType, - _remove_dead_weakref) - -from _weakrefset import WeakSet - -import _collections_abc # Import after _weakref to avoid circular import. -import sys -import itertools - -ProxyTypes = (ProxyType, CallableProxyType) - -__all__ = ["ref", "proxy", "getweakrefcount", "getweakrefs", - "WeakKeyDictionary", "ReferenceType", "ProxyType", - "CallableProxyType", "ProxyTypes", "WeakValueDictionary", - "WeakSet", "WeakMethod", "finalize"] - - -_collections_abc.MutableSet.register(WeakSet) - -class WeakMethod(ref): - """ - A custom `weakref.ref` subclass which simulates a weak reference to - a bound method, working around the lifetime problem of bound methods. - """ - - __slots__ = "_func_ref", "_meth_type", "_alive", "__weakref__" - - def __new__(cls, meth, callback=None): - try: - obj = meth.__self__ - func = meth.__func__ - except AttributeError: - raise TypeError("argument should be a bound method, not {}" - .format(type(meth))) from None - def _cb(arg): - # The self-weakref trick is needed to avoid creating a reference - # cycle. - self = self_wr() - if self._alive: - self._alive = False - if callback is not None: - callback(self) - self = ref.__new__(cls, obj, _cb) - self._func_ref = ref(func, _cb) - self._meth_type = type(meth) - self._alive = True - self_wr = ref(self) - return self - - def __call__(self): - obj = super().__call__() - func = self._func_ref() - if obj is None or func is None: - return None - return self._meth_type(func, obj) - - def __eq__(self, other): - if isinstance(other, WeakMethod): - if not self._alive or not other._alive: - return self is other - return ref.__eq__(self, other) and self._func_ref == other._func_ref - return NotImplemented - - def __ne__(self, other): - if isinstance(other, WeakMethod): - if not self._alive or not other._alive: - return self is not other - return ref.__ne__(self, other) or self._func_ref != other._func_ref - return NotImplemented - - __hash__ = ref.__hash__ - - -class WeakValueDictionary(_collections_abc.MutableMapping): - """Mapping class that references values weakly. - - Entries in the dictionary will be discarded when no strong - reference to the value exists anymore - """ - # We inherit the constructor without worrying about the input - # dictionary; since it uses our .update() method, we get the right - # checks (if the other dictionary is a WeakValueDictionary, - # objects are unwrapped on the way out, and we always wrap on the - # way in). - - def __init__(self, other=(), /, **kw): - def remove(wr, selfref=ref(self), _atomic_removal=_remove_dead_weakref): - self = selfref() - if self is not None: - # Atomic removal is necessary since this function - # can be called asynchronously by the GC - _atomic_removal(self.data, wr.key) - self._remove = remove - self.data = {} - self.update(other, **kw) - - def __getitem__(self, key): - o = self.data[key]() - if o is None: - raise KeyError(key) - else: - return o - - def __delitem__(self, key): - del self.data[key] - - def __len__(self): - return len(self.data) - - def __contains__(self, key): - try: - o = self.data[key]() - except KeyError: - return False - return o is not None - - def __repr__(self): - return "<%s at %#x>" % (self.__class__.__name__, id(self)) - - def __setitem__(self, key, value): - self.data[key] = KeyedRef(value, self._remove, key) - - def copy(self): - new = WeakValueDictionary() - for key, wr in self.data.copy().items(): - o = wr() - if o is not None: - new[key] = o - return new - - __copy__ = copy - - def __deepcopy__(self, memo): - from copy import deepcopy - new = self.__class__() - for key, wr in self.data.copy().items(): - o = wr() - if o is not None: - new[deepcopy(key, memo)] = o - return new - - def get(self, key, default=None): - try: - wr = self.data[key] - except KeyError: - return default - else: - o = wr() - if o is None: - # This should only happen - return default - else: - return o - - def items(self): - for k, wr in self.data.copy().items(): - v = wr() - if v is not None: - yield k, v - - def keys(self): - for k, wr in self.data.copy().items(): - if wr() is not None: - yield k - - __iter__ = keys - - def itervaluerefs(self): - """Return an iterator that yields the weak references to the values. - - The references are not guaranteed to be 'live' at the time - they are used, so the result of calling the references needs - to be checked before being used. This can be used to avoid - creating references that will cause the garbage collector to - keep the values around longer than needed. - - """ - yield from self.data.copy().values() - - def values(self): - for wr in self.data.copy().values(): - obj = wr() - if obj is not None: - yield obj - - def popitem(self): - while True: - key, wr = self.data.popitem() - o = wr() - if o is not None: - return key, o - - def pop(self, key, *args): - try: - o = self.data.pop(key)() - except KeyError: - o = None - if o is None: - if args: - return args[0] - else: - raise KeyError(key) - else: - return o - - def setdefault(self, key, default=None): - try: - o = self.data[key]() - except KeyError: - o = None - if o is None: - self.data[key] = KeyedRef(default, self._remove, key) - return default - else: - return o - - def update(self, other=None, /, **kwargs): - d = self.data - if other is not None: - if not hasattr(other, "items"): - other = dict(other) - for key, o in other.items(): - d[key] = KeyedRef(o, self._remove, key) - for key, o in kwargs.items(): - d[key] = KeyedRef(o, self._remove, key) - - def valuerefs(self): - """Return a list of weak references to the values. - - The references are not guaranteed to be 'live' at the time - they are used, so the result of calling the references needs - to be checked before being used. This can be used to avoid - creating references that will cause the garbage collector to - keep the values around longer than needed. - - """ - return list(self.data.copy().values()) - - def __ior__(self, other): - self.update(other) - return self - - def __or__(self, other): - if isinstance(other, _collections_abc.Mapping): - c = self.copy() - c.update(other) - return c - return NotImplemented - - def __ror__(self, other): - if isinstance(other, _collections_abc.Mapping): - c = self.__class__() - c.update(other) - c.update(self) - return c - return NotImplemented - - -class KeyedRef(ref): - """Specialized reference that includes a key corresponding to the value. - - This is used in the WeakValueDictionary to avoid having to create - a function object for each key stored in the mapping. A shared - callback object can use the 'key' attribute of a KeyedRef instead - of getting a reference to the key from an enclosing scope. - - """ - - __slots__ = "key", - - def __new__(type, ob, callback, key): - self = ref.__new__(type, ob, callback) - self.key = key - return self - - def __init__(self, ob, callback, key): - super().__init__(ob, callback) - - -class WeakKeyDictionary(_collections_abc.MutableMapping): - """ Mapping class that references keys weakly. - - Entries in the dictionary will be discarded when there is no - longer a strong reference to the key. This can be used to - associate additional data with an object owned by other parts of - an application without adding attributes to those objects. This - can be especially useful with objects that override attribute - accesses. - """ - - def __init__(self, dict=None): - self.data = {} - def remove(k, selfref=ref(self)): - self = selfref() - if self is not None: - try: - del self.data[k] - except KeyError: - pass - self._remove = remove - if dict is not None: - self.update(dict) - - def __delitem__(self, key): - del self.data[ref(key)] - - def __getitem__(self, key): - return self.data[ref(key)] - - def __len__(self): - return len(self.data) - - def __repr__(self): - return "<%s at %#x>" % (self.__class__.__name__, id(self)) - - def __setitem__(self, key, value): - self.data[ref(key, self._remove)] = value - - def copy(self): - new = WeakKeyDictionary() - for key, value in self.data.copy().items(): - o = key() - if o is not None: - new[o] = value - return new - - __copy__ = copy - - def __deepcopy__(self, memo): - from copy import deepcopy - new = self.__class__() - for key, value in self.data.copy().items(): - o = key() - if o is not None: - new[o] = deepcopy(value, memo) - return new - - def get(self, key, default=None): - return self.data.get(ref(key),default) - - def __contains__(self, key): - try: - wr = ref(key) - except TypeError: - return False - return wr in self.data - - def items(self): - for wr, value in self.data.copy().items(): - key = wr() - if key is not None: - yield key, value - - def keys(self): - for wr in self.data.copy(): - obj = wr() - if obj is not None: - yield obj - - __iter__ = keys - - def values(self): - for wr, value in self.data.copy().items(): - if wr() is not None: - yield value - - def keyrefs(self): - """Return a list of weak references to the keys. - - The references are not guaranteed to be 'live' at the time - they are used, so the result of calling the references needs - to be checked before being used. This can be used to avoid - creating references that will cause the garbage collector to - keep the keys around longer than needed. - - """ - return list(self.data) - - def popitem(self): - while True: - key, value = self.data.popitem() - o = key() - if o is not None: - return o, value - - def pop(self, key, *args): - return self.data.pop(ref(key), *args) - - def setdefault(self, key, default=None): - return self.data.setdefault(ref(key, self._remove),default) - - def update(self, dict=None, /, **kwargs): - d = self.data - if dict is not None: - if not hasattr(dict, "items"): - dict = type({})(dict) - for key, value in dict.items(): - d[ref(key, self._remove)] = value - if len(kwargs): - self.update(kwargs) - - def __ior__(self, other): - self.update(other) - return self - - def __or__(self, other): - if isinstance(other, _collections_abc.Mapping): - c = self.copy() - c.update(other) - return c - return NotImplemented - - def __ror__(self, other): - if isinstance(other, _collections_abc.Mapping): - c = self.__class__() - c.update(other) - c.update(self) - return c - return NotImplemented - - -class finalize: - """Class for finalization of weakrefable objects - - finalize(obj, func, *args, **kwargs) returns a callable finalizer - object which will be called when obj is garbage collected. The - first time the finalizer is called it evaluates func(*arg, **kwargs) - and returns the result. After this the finalizer is dead, and - calling it just returns None. - - When the program exits any remaining finalizers for which the - atexit attribute is true will be run in reverse order of creation. - By default atexit is true. - """ - - # Finalizer objects don't have any state of their own. They are - # just used as keys to lookup _Info objects in the registry. This - # ensures that they cannot be part of a ref-cycle. - - __slots__ = () - _registry = {} - _shutdown = False - _index_iter = itertools.count() - _dirty = False - _registered_with_atexit = False - - class _Info: - __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index") - - def __init__(self, obj, func, /, *args, **kwargs): - if not self._registered_with_atexit: - # We may register the exit function more than once because - # of a thread race, but that is harmless - import atexit - atexit.register(self._exitfunc) - finalize._registered_with_atexit = True - info = self._Info() - info.weakref = ref(obj, self) - info.func = func - info.args = args - info.kwargs = kwargs or None - info.atexit = True - info.index = next(self._index_iter) - self._registry[self] = info - finalize._dirty = True - - def __call__(self, _=None): - """If alive then mark as dead and return func(*args, **kwargs); - otherwise return None""" - info = self._registry.pop(self, None) - if info and not self._shutdown: - return info.func(*info.args, **(info.kwargs or {})) - - def detach(self): - """If alive then mark as dead and return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None and self._registry.pop(self, None): - return (obj, info.func, info.args, info.kwargs or {}) - - def peek(self): - """If alive then return (obj, func, args, kwargs); - otherwise return None""" - info = self._registry.get(self) - obj = info and info.weakref() - if obj is not None: - return (obj, info.func, info.args, info.kwargs or {}) - - @property - def alive(self): - """Whether finalizer is alive""" - return self in self._registry - - @property - def atexit(self): - """Whether finalizer should be called at exit""" - info = self._registry.get(self) - return bool(info) and info.atexit - - @atexit.setter - def atexit(self, value): - info = self._registry.get(self) - if info: - info.atexit = bool(value) - - def __repr__(self): - info = self._registry.get(self) - obj = info and info.weakref() - if obj is None: - return '<%s object at %#x; dead>' % (type(self).__name__, id(self)) - else: - return '<%s object at %#x; for %r at %#x>' % \ - (type(self).__name__, id(self), type(obj).__name__, id(obj)) - - @classmethod - def _select_for_exit(cls): - # Return live finalizers marked for exit, oldest first - L = [(f,i) for (f,i) in cls._registry.items() if i.atexit] - L.sort(key=lambda item:item[1].index) - return [f for (f,i) in L] - - @classmethod - def _exitfunc(cls): - # At shutdown invoke finalizers for which atexit is true. - # This is called once all other non-daemonic threads have been - # joined. - reenable_gc = False - try: - if cls._registry: - import gc - if gc.isenabled(): - reenable_gc = True - gc.disable() - pending = None - while True: - if pending is None or finalize._dirty: - pending = cls._select_for_exit() - finalize._dirty = False - if not pending: - break - f = pending.pop() - try: - # gc is disabled, so (assuming no daemonic - # threads) the following is the only line in - # this function which might trigger creation - # of a new finalizer - f() - except Exception: - sys.excepthook(*sys.exc_info()) - assert f not in cls._registry - finally: - # prevent any more finalizers from executing during shutdown - finalize._shutdown = True - if reenable_gc: - gc.enable() diff --git a/Python314_4_x86_Template/Lib/webbrowser.py b/Python314_4_x86_Template/Lib/webbrowser.py deleted file mode 100644 index 0e0b5034e..000000000 --- a/Python314_4_x86_Template/Lib/webbrowser.py +++ /dev/null @@ -1,762 +0,0 @@ -"""Interfaces for launching and remotely controlling web browsers.""" -# Maintained by Georg Brandl. - -import os -import shlex -import shutil -import sys -import subprocess -import threading - -__all__ = ["Error", "open", "open_new", "open_new_tab", "get", "register"] - - -class Error(Exception): - pass - - -_lock = threading.RLock() -_browsers = {} # Dictionary of available browser controllers -_tryorder = None # Preference order of available browsers -_os_preferred_browser = None # The preferred browser - - -def register(name, klass, instance=None, *, preferred=False): - """Register a browser connector.""" - with _lock: - if _tryorder is None: - register_standard_browsers() - _browsers[name.lower()] = [klass, instance] - - # Preferred browsers go to the front of the list. - # Need to match to the default browser returned by xdg-settings, which - # may be of the form e.g. "firefox.desktop". - if preferred or (_os_preferred_browser and f'{name}.desktop' == _os_preferred_browser): - _tryorder.insert(0, name) - else: - _tryorder.append(name) - - -def get(using=None): - """Return a browser launcher instance appropriate for the environment.""" - if _tryorder is None: - with _lock: - if _tryorder is None: - register_standard_browsers() - if using is not None: - alternatives = [using] - else: - alternatives = _tryorder - for browser in alternatives: - if '%s' in browser: - # User gave us a command line, split it into name and args - browser = shlex.split(browser) - if browser[-1] == '&': - return BackgroundBrowser(browser[:-1]) - else: - return GenericBrowser(browser) - else: - # User gave us a browser name or path. - try: - command = _browsers[browser.lower()] - except KeyError: - command = _synthesize(browser) - if command[1] is not None: - return command[1] - elif command[0] is not None: - return command[0]() - raise Error("could not locate runnable browser") - - -# Please note: the following definition hides a builtin function. -# It is recommended one does "import webbrowser" and uses webbrowser.open(url) -# instead of "from webbrowser import *". - -def open(url, new=0, autoraise=True): - """Display url using the default browser. - - If possible, open url in a location determined by new. - - 0: the same browser window (the default). - - 1: a new browser window. - - 2: a new browser page ("tab"). - If possible, autoraise raises the window (the default) or not. - - If opening the browser succeeds, return True. - If there is a problem, return False. - """ - if _tryorder is None: - with _lock: - if _tryorder is None: - register_standard_browsers() - for name in _tryorder: - browser = get(name) - if browser.open(url, new, autoraise): - return True - return False - - -def open_new(url): - """Open url in a new window of the default browser. - - If not possible, then open url in the only browser window. - """ - return open(url, 1) - - -def open_new_tab(url): - """Open url in a new page ("tab") of the default browser. - - If not possible, then the behavior becomes equivalent to open_new(). - """ - return open(url, 2) - - -def _synthesize(browser, *, preferred=False): - """Attempt to synthesize a controller based on existing controllers. - - This is useful to create a controller when a user specifies a path to - an entry in the BROWSER environment variable -- we can copy a general - controller to operate using a specific installation of the desired - browser in this way. - - If we can't create a controller in this way, or if there is no - executable for the requested browser, return [None, None]. - - """ - cmd = browser.split()[0] - if not shutil.which(cmd): - return [None, None] - name = os.path.basename(cmd) - try: - command = _browsers[name.lower()] - except KeyError: - return [None, None] - # now attempt to clone to fit the new name: - controller = command[1] - if controller and name.lower() == controller.basename: - import copy - controller = copy.copy(controller) - controller.name = browser - controller.basename = os.path.basename(browser) - register(browser, None, instance=controller, preferred=preferred) - return [None, controller] - return [None, None] - - -# General parent classes - -class BaseBrowser: - """Parent class for all browsers. Do not use directly.""" - - args = ['%s'] - - def __init__(self, name=""): - self.name = name - self.basename = name - - def open(self, url, new=0, autoraise=True): - raise NotImplementedError - - def open_new(self, url): - return self.open(url, 1) - - def open_new_tab(self, url): - return self.open(url, 2) - - @staticmethod - def _check_url(url): - """Ensures that the URL is safe to pass to subprocesses as a parameter""" - if url and url.lstrip().startswith("-"): - raise ValueError(f"Invalid URL (leading dash disallowed): {url!r}") - - -class GenericBrowser(BaseBrowser): - """Class for all browsers started with a command - and without remote functionality.""" - - def __init__(self, name): - if isinstance(name, str): - self.name = name - self.args = ["%s"] - else: - # name should be a list with arguments - self.name = name[0] - self.args = name[1:] - self.basename = os.path.basename(self.name) - - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - cmdline = [self.name] + [arg.replace("%s", url) - for arg in self.args] - try: - if sys.platform[:3] == 'win': - p = subprocess.Popen(cmdline) - else: - p = subprocess.Popen(cmdline, close_fds=True) - return not p.wait() - except OSError: - return False - - -class BackgroundBrowser(GenericBrowser): - """Class for all browsers which are to be started in the - background.""" - - def open(self, url, new=0, autoraise=True): - cmdline = [self.name] + [arg.replace("%s", url) - for arg in self.args] - sys.audit("webbrowser.open", url) - self._check_url(url) - try: - if sys.platform[:3] == 'win': - p = subprocess.Popen(cmdline) - else: - p = subprocess.Popen(cmdline, close_fds=True, - start_new_session=True) - return p.poll() is None - except OSError: - return False - - -class UnixBrowser(BaseBrowser): - """Parent class for all Unix browsers with remote functionality.""" - - raise_opts = None - background = False - redirect_stdout = True - # In remote_args, %s will be replaced with the requested URL. %action will - # be replaced depending on the value of 'new' passed to open. - # remote_action is used for new=0 (open). If newwin is not None, it is - # used for new=1 (open_new). If newtab is not None, it is used for - # new=3 (open_new_tab). After both substitutions are made, any empty - # strings in the transformed remote_args list will be removed. - remote_args = ['%action', '%s'] - remote_action = None - remote_action_newwin = None - remote_action_newtab = None - - def _invoke(self, args, remote, autoraise, url=None): - raise_opt = [] - if remote and self.raise_opts: - # use autoraise argument only for remote invocation - autoraise = int(autoraise) - opt = self.raise_opts[autoraise] - if opt: - raise_opt = [opt] - - cmdline = [self.name] + raise_opt + args - - if remote or self.background: - inout = subprocess.DEVNULL - else: - # for TTY browsers, we need stdin/out - inout = None - p = subprocess.Popen(cmdline, close_fds=True, stdin=inout, - stdout=(self.redirect_stdout and inout or None), - stderr=inout, start_new_session=True) - if remote: - # wait at most five seconds. If the subprocess is not finished, the - # remote invocation has (hopefully) started a new instance. - try: - rc = p.wait(5) - # if remote call failed, open() will try direct invocation - return not rc - except subprocess.TimeoutExpired: - return True - elif self.background: - if p.poll() is None: - return True - else: - return False - else: - return not p.wait() - - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - if new == 0: - action = self.remote_action - elif new == 1: - action = self.remote_action_newwin - elif new == 2: - if self.remote_action_newtab is None: - action = self.remote_action_newwin - else: - action = self.remote_action_newtab - else: - raise Error("Bad 'new' parameter to open(); " - f"expected 0, 1, or 2, got {new}") - - args = [arg.replace("%s", url).replace("%action", action) - for arg in self.remote_args] - args = [arg for arg in args if arg] - success = self._invoke(args, True, autoraise, url) - if not success: - # remote invocation failed, try straight way - args = [arg.replace("%s", url) for arg in self.args] - return self._invoke(args, False, False) - else: - return True - - -class Mozilla(UnixBrowser): - """Launcher class for Mozilla browsers.""" - - remote_args = ['%action', '%s'] - remote_action = "" - remote_action_newwin = "-new-window" - remote_action_newtab = "-new-tab" - background = True - - -class Epiphany(UnixBrowser): - """Launcher class for Epiphany browser.""" - - raise_opts = ["-noraise", ""] - remote_args = ['%action', '%s'] - remote_action = "-n" - remote_action_newwin = "-w" - background = True - - -class Chrome(UnixBrowser): - """Launcher class for Google Chrome browser.""" - - remote_args = ['%action', '%s'] - remote_action = "" - remote_action_newwin = "--new-window" - remote_action_newtab = "" - background = True - - -Chromium = Chrome - - -class Opera(UnixBrowser): - """Launcher class for Opera browser.""" - - remote_args = ['%action', '%s'] - remote_action = "" - remote_action_newwin = "--new-window" - remote_action_newtab = "" - background = True - - -class Elinks(UnixBrowser): - """Launcher class for Elinks browsers.""" - - remote_args = ['-remote', 'openURL(%s%action)'] - remote_action = "" - remote_action_newwin = ",new-window" - remote_action_newtab = ",new-tab" - background = False - - # elinks doesn't like its stdout to be redirected - - # it uses redirected stdout as a signal to do -dump - redirect_stdout = False - - -class Konqueror(BaseBrowser): - """Controller for the KDE File Manager (kfm, or Konqueror). - - See the output of ``kfmclient --commands`` - for more information on the Konqueror remote-control interface. - """ - - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - # XXX Currently I know no way to prevent KFM from opening a new win. - if new == 2: - action = "newTab" - else: - action = "openURL" - - devnull = subprocess.DEVNULL - - try: - p = subprocess.Popen(["kfmclient", action, url], - close_fds=True, stdin=devnull, - stdout=devnull, stderr=devnull) - except OSError: - # fall through to next variant - pass - else: - p.wait() - # kfmclient's return code unfortunately has no meaning as it seems - return True - - try: - p = subprocess.Popen(["konqueror", "--silent", url], - close_fds=True, stdin=devnull, - stdout=devnull, stderr=devnull, - start_new_session=True) - except OSError: - # fall through to next variant - pass - else: - if p.poll() is None: - # Should be running now. - return True - - try: - p = subprocess.Popen(["kfm", "-d", url], - close_fds=True, stdin=devnull, - stdout=devnull, stderr=devnull, - start_new_session=True) - except OSError: - return False - else: - return p.poll() is None - - -class Edge(UnixBrowser): - """Launcher class for Microsoft Edge browser.""" - - remote_args = ['%action', '%s'] - remote_action = "" - remote_action_newwin = "--new-window" - remote_action_newtab = "" - background = True - - -# -# Platform support for Unix -# - -# These are the right tests because all these Unix browsers require either -# a console terminal or an X display to run. - -def register_X_browsers(): - - # use xdg-open if around - if shutil.which("xdg-open"): - register("xdg-open", None, BackgroundBrowser("xdg-open")) - - # Opens an appropriate browser for the URL scheme according to - # freedesktop.org settings (GNOME, KDE, XFCE, etc.) - if shutil.which("gio"): - register("gio", None, BackgroundBrowser(["gio", "open", "--", "%s"])) - - xdg_desktop = os.getenv("XDG_CURRENT_DESKTOP", "").split(":") - - # The default GNOME3 browser - if (("GNOME" in xdg_desktop or - "GNOME_DESKTOP_SESSION_ID" in os.environ) and - shutil.which("gvfs-open")): - register("gvfs-open", None, BackgroundBrowser("gvfs-open")) - - # The default KDE browser - if (("KDE" in xdg_desktop or - "KDE_FULL_SESSION" in os.environ) and - shutil.which("kfmclient")): - register("kfmclient", Konqueror, Konqueror("kfmclient")) - - # Common symbolic link for the default X11 browser - if shutil.which("x-www-browser"): - register("x-www-browser", None, BackgroundBrowser("x-www-browser")) - - # The Mozilla browsers - for browser in ("firefox", "iceweasel", "seamonkey", "mozilla-firefox", - "mozilla"): - if shutil.which(browser): - register(browser, None, Mozilla(browser)) - - # Konqueror/kfm, the KDE browser. - if shutil.which("kfm"): - register("kfm", Konqueror, Konqueror("kfm")) - elif shutil.which("konqueror"): - register("konqueror", Konqueror, Konqueror("konqueror")) - - # Gnome's Epiphany - if shutil.which("epiphany"): - register("epiphany", None, Epiphany("epiphany")) - - # Google Chrome/Chromium browsers - for browser in ("google-chrome", "chrome", "chromium", "chromium-browser"): - if shutil.which(browser): - register(browser, None, Chrome(browser)) - - # Opera, quite popular - if shutil.which("opera"): - register("opera", None, Opera("opera")) - - if shutil.which("microsoft-edge"): - register("microsoft-edge", None, Edge("microsoft-edge")) - - -def register_standard_browsers(): - global _tryorder - _tryorder = [] - - if sys.platform == 'darwin': - register("MacOSX", None, MacOSXOSAScript('default')) - register("chrome", None, MacOSXOSAScript('google chrome')) - register("firefox", None, MacOSXOSAScript('firefox')) - register("safari", None, MacOSXOSAScript('safari')) - # macOS can use below Unix support (but we prefer using the macOS - # specific stuff) - - if sys.platform == "ios": - register("iosbrowser", None, IOSBrowser(), preferred=True) - - if sys.platform == "serenityos": - # SerenityOS webbrowser, simply called "Browser". - register("Browser", None, BackgroundBrowser("Browser")) - - if sys.platform[:3] == "win": - # First try to use the default Windows browser - register("windows-default", WindowsDefault) - - # Detect some common Windows browsers, fallback to Microsoft Edge - # location in 64-bit Windows - edge64 = os.path.join(os.environ.get("PROGRAMFILES(x86)", "C:\\Program Files (x86)"), - "Microsoft\\Edge\\Application\\msedge.exe") - # location in 32-bit Windows - edge32 = os.path.join(os.environ.get("PROGRAMFILES", "C:\\Program Files"), - "Microsoft\\Edge\\Application\\msedge.exe") - for browser in ("firefox", "seamonkey", "mozilla", "chrome", - "opera", edge64, edge32): - if shutil.which(browser): - register(browser, None, BackgroundBrowser(browser)) - if shutil.which("MicrosoftEdge.exe"): - register("microsoft-edge", None, Edge("MicrosoftEdge.exe")) - else: - # Prefer X browsers if present - # - # NOTE: Do not check for X11 browser on macOS, - # XQuartz installation sets a DISPLAY environment variable and will - # autostart when someone tries to access the display. Mac users in - # general don't need an X11 browser. - if sys.platform != "darwin" and (os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY")): - try: - cmd = "xdg-settings get default-web-browser".split() - raw_result = subprocess.check_output(cmd, stderr=subprocess.DEVNULL) - result = raw_result.decode().strip() - except (FileNotFoundError, subprocess.CalledProcessError, - PermissionError, NotADirectoryError): - pass - else: - global _os_preferred_browser - _os_preferred_browser = result - - register_X_browsers() - - # Also try console browsers - if os.environ.get("TERM"): - # Common symbolic link for the default text-based browser - if shutil.which("www-browser"): - register("www-browser", None, GenericBrowser("www-browser")) - # The Links/elinks browsers <http://links.twibright.com/> - if shutil.which("links"): - register("links", None, GenericBrowser("links")) - if shutil.which("elinks"): - register("elinks", None, Elinks("elinks")) - # The Lynx browser <https://lynx.invisible-island.net/>, <http://lynx.browser.org/> - if shutil.which("lynx"): - register("lynx", None, GenericBrowser("lynx")) - # The w3m browser <http://w3m.sourceforge.net/> - if shutil.which("w3m"): - register("w3m", None, GenericBrowser("w3m")) - - # OK, now that we know what the default preference orders for each - # platform are, allow user to override them with the BROWSER variable. - if "BROWSER" in os.environ: - userchoices = os.environ["BROWSER"].split(os.pathsep) - userchoices.reverse() - - # Treat choices in same way as if passed into get() but do register - # and prepend to _tryorder - for cmdline in userchoices: - if all(x not in cmdline for x in " \t"): - # Assume this is the name of a registered command, use - # that unless it is a GenericBrowser. - try: - command = _browsers[cmdline.lower()] - except KeyError: - pass - - else: - if not isinstance(command[1], GenericBrowser): - _tryorder.insert(0, cmdline.lower()) - continue - - if cmdline != '': - cmd = _synthesize(cmdline, preferred=True) - if cmd[1] is None: - register(cmdline, None, GenericBrowser(cmdline), preferred=True) - - # what to do if _tryorder is now empty? - - -# -# Platform support for Windows -# - -if sys.platform[:3] == "win": - class WindowsDefault(BaseBrowser): - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - try: - os.startfile(url) - except OSError: - # [Error 22] No application is associated with the specified - # file for this operation: '<URL>' - return False - else: - return True - -# -# Platform support for macOS -# - -if sys.platform == 'darwin': - class MacOSXOSAScript(BaseBrowser): - def __init__(self, name='default'): - super().__init__(name) - - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - url = url.replace('"', '%22') - if self.name == 'default': - proto, _sep, _rest = url.partition(":") - if _sep and proto.lower() in {"http", "https"}: - # default web URL, don't need to lookup browser - script = f'open location "{url}"' - else: - # if not a web URL, need to lookup default browser to ensure a browser is launched - # this should always work, but is overkill to lookup http handler - # before launching http - script = f""" - use framework "AppKit" - use AppleScript version "2.4" - use scripting additions - - property NSWorkspace : a reference to current application's NSWorkspace - property NSURL : a reference to current application's NSURL - - set http_url to NSURL's URLWithString:"https://python.org" - set browser_url to (NSWorkspace's sharedWorkspace)'s ¬ - URLForApplicationToOpenURL:http_url - set app_path to browser_url's relativePath as text -- NSURL to absolute path '/Applications/Safari.app' - - tell application app_path - activate - open location "{url}" - end tell - """ - else: - script = f''' - tell application "{self.name}" - activate - open location "{url}" - end - ''' - - osapipe = os.popen("/usr/bin/osascript", "w") - if osapipe is None: - return False - - osapipe.write(script) - rc = osapipe.close() - return not rc - -# -# Platform support for iOS -# -if sys.platform == "ios": - from _ios_support import objc - if objc: - # If objc exists, we know ctypes is also importable. - from ctypes import c_void_p, c_char_p, c_ulong - - class IOSBrowser(BaseBrowser): - def open(self, url, new=0, autoraise=True): - sys.audit("webbrowser.open", url) - self._check_url(url) - # If ctypes isn't available, we can't open a browser - if objc is None: - return False - - # All the messages in this call return object references. - objc.objc_msgSend.restype = c_void_p - - # This is the equivalent of: - # NSString url_string = - # [NSString stringWithCString:url.encode("utf-8") - # encoding:NSUTF8StringEncoding]; - NSString = objc.objc_getClass(b"NSString") - constructor = objc.sel_registerName(b"stringWithCString:encoding:") - objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_char_p, c_ulong] - url_string = objc.objc_msgSend( - NSString, - constructor, - url.encode("utf-8"), - 4, # NSUTF8StringEncoding = 4 - ) - - # Create an NSURL object representing the URL - # This is the equivalent of: - # NSURL *nsurl = [NSURL URLWithString:url]; - NSURL = objc.objc_getClass(b"NSURL") - urlWithString_ = objc.sel_registerName(b"URLWithString:") - objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] - ns_url = objc.objc_msgSend(NSURL, urlWithString_, url_string) - - # Get the shared UIApplication instance - # This code is the equivalent of: - # UIApplication shared_app = [UIApplication sharedApplication] - UIApplication = objc.objc_getClass(b"UIApplication") - sharedApplication = objc.sel_registerName(b"sharedApplication") - objc.objc_msgSend.argtypes = [c_void_p, c_void_p] - shared_app = objc.objc_msgSend(UIApplication, sharedApplication) - - # Open the URL on the shared application - # This code is the equivalent of: - # [shared_app openURL:ns_url - # options:NIL - # completionHandler:NIL]; - openURL_ = objc.sel_registerName(b"openURL:options:completionHandler:") - objc.objc_msgSend.argtypes = [ - c_void_p, c_void_p, c_void_p, c_void_p, c_void_p - ] - # Method returns void - objc.objc_msgSend.restype = None - objc.objc_msgSend(shared_app, openURL_, ns_url, None, None) - - return True - - -def parse_args(arg_list: list[str] | None): - import argparse - parser = argparse.ArgumentParser( - description="Open URL in a web browser.", color=True, - ) - parser.add_argument("url", help="URL to open") - - group = parser.add_mutually_exclusive_group() - group.add_argument("-n", "--new-window", action="store_const", - const=1, default=0, dest="new_win", - help="open new window") - group.add_argument("-t", "--new-tab", action="store_const", - const=2, default=0, dest="new_win", - help="open new tab") - - args = parser.parse_args(arg_list) - - return args - - -def main(arg_list: list[str] | None = None): - args = parse_args(arg_list) - - open(args.url, args.new_win) - - print("\a") - - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/wsgiref/__init__.py b/Python314_4_x86_Template/Lib/wsgiref/__init__.py deleted file mode 100644 index 59ee48fdd..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -"""wsgiref -- a WSGI (PEP 3333) Reference Library - -Current Contents: - -* util -- Miscellaneous useful functions and wrappers - -* headers -- Manage response headers - -* handlers -- base classes for server/gateway implementations - -* simple_server -- a simple BaseHTTPServer that supports WSGI - -* validate -- validation wrapper that sits between an app and a server - to detect errors in either - -* types -- collection of WSGI-related types for static type checking - -To-Do: - -* cgi_gateway -- Run WSGI apps under CGI (pending a deployment standard) - -* cgi_wrapper -- Run CGI apps under WSGI - -* router -- a simple middleware component that handles URL traversal -""" diff --git a/Python314_4_x86_Template/Lib/wsgiref/handlers.py b/Python314_4_x86_Template/Lib/wsgiref/handlers.py deleted file mode 100644 index f8fe89f6e..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/handlers.py +++ /dev/null @@ -1,575 +0,0 @@ -"""Base classes for server/gateway implementations""" - -from .util import FileWrapper, guess_scheme, is_hop_by_hop -from .headers import Headers, _name_disallowed_re - -import sys, os, time - -__all__ = [ - 'BaseHandler', 'SimpleHandler', 'BaseCGIHandler', 'CGIHandler', - 'IISCGIHandler', 'read_environ' -] - -# Weekday and month names for HTTP date/time formatting; always English! -_weekdayname = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] -_monthname = [None, # Dummy so we can use 1-based month numbers - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - -def format_date_time(timestamp): - year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp) - return "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( - _weekdayname[wd], day, _monthname[month], year, hh, mm, ss - ) - -_is_request = { - 'SCRIPT_NAME', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_METHOD', 'AUTH_TYPE', - 'CONTENT_TYPE', 'CONTENT_LENGTH', 'HTTPS', 'REMOTE_USER', 'REMOTE_IDENT', -}.__contains__ - -def _needs_transcode(k): - return _is_request(k) or k.startswith('HTTP_') or k.startswith('SSL_') \ - or (k.startswith('REDIRECT_') and _needs_transcode(k[9:])) - -def read_environ(): - """Read environment, fixing HTTP variables""" - enc = sys.getfilesystemencoding() - esc = 'surrogateescape' - try: - ''.encode('utf-8', esc) - except LookupError: - esc = 'replace' - environ = {} - - # Take the basic environment from native-unicode os.environ. Attempt to - # fix up the variables that come from the HTTP request to compensate for - # the bytes->unicode decoding step that will already have taken place. - for k, v in os.environ.items(): - if _needs_transcode(k): - - # On win32, the os.environ is natively Unicode. Different servers - # decode the request bytes using different encodings. - if sys.platform == 'win32': - software = os.environ.get('SERVER_SOFTWARE', '').lower() - - # On IIS, the HTTP request will be decoded as UTF-8 as long - # as the input is a valid UTF-8 sequence. Otherwise it is - # decoded using the system code page (mbcs), with no way to - # detect this has happened. Because UTF-8 is the more likely - # encoding, and mbcs is inherently unreliable (an mbcs string - # that happens to be valid UTF-8 will not be decoded as mbcs) - # always recreate the original bytes as UTF-8. - if software.startswith('microsoft-iis/'): - v = v.encode('utf-8').decode('iso-8859-1') - - # Apache mod_cgi writes bytes-as-unicode (as if ISO-8859-1) direct - # to the Unicode environ. No modification needed. - elif software.startswith('apache/'): - pass - - # Python 3's http.server.CGIHTTPRequestHandler decodes - # using the urllib.unquote default of UTF-8, amongst other - # issues. - elif ( - software.startswith('simplehttp/') - and 'python/3' in software - ): - v = v.encode('utf-8').decode('iso-8859-1') - - # For other servers, guess that they have written bytes to - # the environ using stdio byte-oriented interfaces, ending up - # with the system code page. - else: - v = v.encode(enc, 'replace').decode('iso-8859-1') - - # Recover bytes from unicode environ, using surrogate escapes - # where available (Python 3.1+). - else: - v = v.encode(enc, esc).decode('iso-8859-1') - - environ[k] = v - return environ - - -class BaseHandler: - """Manage the invocation of a WSGI application""" - - # Configuration parameters; can override per-subclass or per-instance - wsgi_version = (1,0) - wsgi_multithread = True - wsgi_multiprocess = True - wsgi_run_once = False - - origin_server = True # We are transmitting direct to client - http_version = "1.0" # Version that should be used for response - server_software = None # String name of server software, if any - - # os_environ is used to supply configuration from the OS environment: - # by default it's a copy of 'os.environ' as of import time, but you can - # override this in e.g. your __init__ method. - os_environ= read_environ() - - # Collaborator classes - wsgi_file_wrapper = FileWrapper # set to None to disable - headers_class = Headers # must be a Headers-like class - - # Error handling (also per-subclass or per-instance) - traceback_limit = None # Print entire traceback to self.get_stderr() - error_status = "500 Internal Server Error" - error_headers = [('Content-Type','text/plain')] - error_body = b"A server error occurred. Please contact the administrator." - - # State variables (don't mess with these) - status = result = None - headers_sent = False - headers = None - bytes_sent = 0 - - def run(self, application): - """Invoke the application""" - # Note to self: don't move the close()! Asynchronous servers shouldn't - # call close() from finish_response(), so if you close() anywhere but - # the double-error branch here, you'll break asynchronous servers by - # prematurely closing. Async servers must return from 'run()' without - # closing if there might still be output to iterate over. - try: - self.setup_environ() - self.result = application(self.environ, self.start_response) - self.finish_response() - except (ConnectionAbortedError, BrokenPipeError, ConnectionResetError): - # We expect the client to close the connection abruptly from time - # to time. - return - except: - try: - self.handle_error() - except: - # If we get an error handling an error, just give up already! - self.close() - raise # ...and let the actual server figure it out. - - - def setup_environ(self): - """Set up the environment for one request""" - - env = self.environ = self.os_environ.copy() - self.add_cgi_vars() - - env['wsgi.input'] = self.get_stdin() - env['wsgi.errors'] = self.get_stderr() - env['wsgi.version'] = self.wsgi_version - env['wsgi.run_once'] = self.wsgi_run_once - env['wsgi.url_scheme'] = self.get_scheme() - env['wsgi.multithread'] = self.wsgi_multithread - env['wsgi.multiprocess'] = self.wsgi_multiprocess - - if self.wsgi_file_wrapper is not None: - env['wsgi.file_wrapper'] = self.wsgi_file_wrapper - - if self.origin_server and self.server_software: - env.setdefault('SERVER_SOFTWARE',self.server_software) - - - def finish_response(self): - """Send any iterable data, then close self and the iterable - - Subclasses intended for use in asynchronous servers will - want to redefine this method, such that it sets up callbacks - in the event loop to iterate over the data, and to call - 'self.close()' once the response is finished. - """ - try: - if not self.result_is_file() or not self.sendfile(): - for data in self.result: - self.write(data) - self.finish_content() - except: - # Call close() on the iterable returned by the WSGI application - # in case of an exception. - if hasattr(self.result, 'close'): - self.result.close() - raise - else: - # We only call close() when no exception is raised, because it - # will set status, result, headers, and environ fields to None. - # See bpo-29183 for more details. - self.close() - - - def get_scheme(self): - """Return the URL scheme being used""" - return guess_scheme(self.environ) - - - def set_content_length(self): - """Compute Content-Length or switch to chunked encoding if possible""" - try: - blocks = len(self.result) - except (TypeError,AttributeError,NotImplementedError): - pass - else: - if blocks==1: - self.headers['Content-Length'] = str(self.bytes_sent) - return - # XXX Try for chunked encoding if origin server and client is 1.1 - - - def cleanup_headers(self): - """Make any necessary header changes or defaults - - Subclasses can extend this to add other defaults. - """ - if 'Content-Length' not in self.headers: - self.set_content_length() - - def start_response(self, status, headers,exc_info=None): - """'start_response()' callable as specified by PEP 3333""" - - if exc_info: - try: - if self.headers_sent: - raise - finally: - exc_info = None # avoid dangling circular ref - elif self.headers is not None: - raise AssertionError("Headers already set!") - - self.status = status - self.headers = self.headers_class(headers) - status = self._convert_string_type(status, "Status") - self._validate_status(status) - - if __debug__: - for name, val in headers: - name = self._convert_string_type(name, "Header name") - val = self._convert_string_type(val, "Header value") - assert not is_hop_by_hop(name),\ - f"Hop-by-hop header, '{name}: {val}', not allowed" - - return self.write - - def _validate_status(self, status): - if _name_disallowed_re.search(status): - raise ValueError("Control characters are not allowed in status") - if len(status) < 4: - raise AssertionError("Status must be at least 4 characters") - if not status[:3].isdigit(): - raise AssertionError("Status message must begin w/3-digit code") - if status[3] != " ": - raise AssertionError("Status message must have a space after code") - - def _convert_string_type(self, value, title): - """Convert/check value type.""" - if type(value) is str: - return value - raise AssertionError( - "{0} must be of type str (got {1})".format(title, repr(value)) - ) - - def send_preamble(self): - """Transmit version/status/date/server, via self._write()""" - if self.origin_server: - if self.client_is_modern(): - self._write(('HTTP/%s %s\r\n' % (self.http_version,self.status)).encode('iso-8859-1')) - if 'Date' not in self.headers: - self._write( - ('Date: %s\r\n' % format_date_time(time.time())).encode('iso-8859-1') - ) - if self.server_software and 'Server' not in self.headers: - self._write(('Server: %s\r\n' % self.server_software).encode('iso-8859-1')) - else: - self._write(('Status: %s\r\n' % self.status).encode('iso-8859-1')) - - def write(self, data): - """'write()' callable as specified by PEP 3333""" - - assert type(data) is bytes, \ - "write() argument must be a bytes instance" - - if not self.status: - raise AssertionError("write() before start_response()") - - elif not self.headers_sent: - # Before the first output, send the stored headers - self.bytes_sent = len(data) # make sure we know content-length - self.send_headers() - else: - self.bytes_sent += len(data) - - # XXX check Content-Length and truncate if too many bytes written? - self._write(data) - self._flush() - - - def sendfile(self): - """Platform-specific file transmission - - Override this method in subclasses to support platform-specific - file transmission. It is only called if the application's - return iterable ('self.result') is an instance of - 'self.wsgi_file_wrapper'. - - This method should return a true value if it was able to actually - transmit the wrapped file-like object using a platform-specific - approach. It should return a false value if normal iteration - should be used instead. An exception can be raised to indicate - that transmission was attempted, but failed. - - NOTE: this method should call 'self.send_headers()' if - 'self.headers_sent' is false and it is going to attempt direct - transmission of the file. - """ - return False # No platform-specific transmission by default - - - def finish_content(self): - """Ensure headers and content have both been sent""" - if not self.headers_sent: - # Only zero Content-Length if not set by the application (so - # that HEAD requests can be satisfied properly, see #3839) - self.headers.setdefault('Content-Length', "0") - self.send_headers() - else: - pass # XXX check if content-length was too short? - - def close(self): - """Close the iterable (if needed) and reset all instance vars - - Subclasses may want to also drop the client connection. - """ - try: - if hasattr(self.result,'close'): - self.result.close() - finally: - self.result = self.headers = self.status = self.environ = None - self.bytes_sent = 0; self.headers_sent = False - - - def send_headers(self): - """Transmit headers to the client, via self._write()""" - self.cleanup_headers() - self.headers_sent = True - if not self.origin_server or self.client_is_modern(): - self.send_preamble() - self._write(bytes(self.headers)) - - - def result_is_file(self): - """True if 'self.result' is an instance of 'self.wsgi_file_wrapper'""" - wrapper = self.wsgi_file_wrapper - return wrapper is not None and isinstance(self.result,wrapper) - - - def client_is_modern(self): - """True if client can accept status and headers""" - return self.environ['SERVER_PROTOCOL'].upper() != 'HTTP/0.9' - - - def log_exception(self,exc_info): - """Log the 'exc_info' tuple in the server log - - Subclasses may override to retarget the output or change its format. - """ - try: - from traceback import print_exception - stderr = self.get_stderr() - print_exception( - exc_info[0], exc_info[1], exc_info[2], - self.traceback_limit, stderr - ) - stderr.flush() - finally: - exc_info = None - - def handle_error(self): - """Log current error, and send error output to client if possible""" - self.log_exception(sys.exc_info()) - if not self.headers_sent: - self.result = self.error_output(self.environ, self.start_response) - self.finish_response() - # XXX else: attempt advanced recovery techniques for HTML or text? - - def error_output(self, environ, start_response): - """WSGI mini-app to create error output - - By default, this just uses the 'error_status', 'error_headers', - and 'error_body' attributes to generate an output page. It can - be overridden in a subclass to dynamically generate diagnostics, - choose an appropriate message for the user's preferred language, etc. - - Note, however, that it's not recommended from a security perspective to - spit out diagnostics to any old user; ideally, you should have to do - something special to enable diagnostic output, which is why we don't - include any here! - """ - start_response(self.error_status,self.error_headers[:],sys.exc_info()) - return [self.error_body] - - - # Pure abstract methods; *must* be overridden in subclasses - - def _write(self,data): - """Override in subclass to buffer data for send to client - - It's okay if this method actually transmits the data; BaseHandler - just separates write and flush operations for greater efficiency - when the underlying system actually has such a distinction. - """ - raise NotImplementedError - - def _flush(self): - """Override in subclass to force sending of recent '_write()' calls - - It's okay if this method is a no-op (i.e., if '_write()' actually - sends the data. - """ - raise NotImplementedError - - def get_stdin(self): - """Override in subclass to return suitable 'wsgi.input'""" - raise NotImplementedError - - def get_stderr(self): - """Override in subclass to return suitable 'wsgi.errors'""" - raise NotImplementedError - - def add_cgi_vars(self): - """Override in subclass to insert CGI variables in 'self.environ'""" - raise NotImplementedError - - -class SimpleHandler(BaseHandler): - """Handler that's just initialized with streams, environment, etc. - - This handler subclass is intended for synchronous HTTP/1.0 origin servers, - and handles sending the entire response output, given the correct inputs. - - Usage:: - - handler = SimpleHandler( - inp,out,err,env, multithread=False, multiprocess=True - ) - handler.run(app)""" - - def __init__(self,stdin,stdout,stderr,environ, - multithread=True, multiprocess=False - ): - self.stdin = stdin - self.stdout = stdout - self.stderr = stderr - self.base_env = environ - self.wsgi_multithread = multithread - self.wsgi_multiprocess = multiprocess - - def get_stdin(self): - return self.stdin - - def get_stderr(self): - return self.stderr - - def add_cgi_vars(self): - self.environ.update(self.base_env) - - def _write(self,data): - result = self.stdout.write(data) - if result is None or result == len(data): - return - from warnings import warn - warn("SimpleHandler.stdout.write() should not do partial writes", - DeprecationWarning) - while data := data[result:]: - result = self.stdout.write(data) - - def _flush(self): - self.stdout.flush() - self._flush = self.stdout.flush - - -class BaseCGIHandler(SimpleHandler): - - """CGI-like systems using input/output/error streams and environ mapping - - Usage:: - - handler = BaseCGIHandler(inp,out,err,env) - handler.run(app) - - This handler class is useful for gateway protocols like ReadyExec and - FastCGI, that have usable input/output/error streams and an environment - mapping. It's also the base class for CGIHandler, which just uses - sys.stdin, os.environ, and so on. - - The constructor also takes keyword arguments 'multithread' and - 'multiprocess' (defaulting to 'True' and 'False' respectively) to control - the configuration sent to the application. It sets 'origin_server' to - False (to enable CGI-like output), and assumes that 'wsgi.run_once' is - False. - """ - - origin_server = False - - -class CGIHandler(BaseCGIHandler): - - """CGI-based invocation via sys.stdin/stdout/stderr and os.environ - - Usage:: - - CGIHandler().run(app) - - The difference between this class and BaseCGIHandler is that it always - uses 'wsgi.run_once' of 'True', 'wsgi.multithread' of 'False', and - 'wsgi.multiprocess' of 'True'. It does not take any initialization - parameters, but always uses 'sys.stdin', 'os.environ', and friends. - - If you need to override any of these parameters, use BaseCGIHandler - instead. - """ - - wsgi_run_once = True - # Do not allow os.environ to leak between requests in Google App Engine - # and other multi-run CGI use cases. This is not easily testable. - # See http://bugs.python.org/issue7250 - os_environ = {} - - def __init__(self): - BaseCGIHandler.__init__( - self, sys.stdin.buffer, sys.stdout.buffer, sys.stderr, - read_environ(), multithread=False, multiprocess=True - ) - - -class IISCGIHandler(BaseCGIHandler): - """CGI-based invocation with workaround for IIS path bug - - This handler should be used in preference to CGIHandler when deploying on - Microsoft IIS without having set the config allowPathInfo option (IIS>=7) - or metabase allowPathInfoForScriptMappings (IIS<7). - """ - wsgi_run_once = True - os_environ = {} - - # By default, IIS gives a PATH_INFO that duplicates the SCRIPT_NAME at - # the front, causing problems for WSGI applications that wish to implement - # routing. This handler strips any such duplicated path. - - # IIS can be configured to pass the correct PATH_INFO, but this causes - # another bug where PATH_TRANSLATED is wrong. Luckily this variable is - # rarely used and is not guaranteed by WSGI. On IIS<7, though, the - # setting can only be made on a vhost level, affecting all other script - # mappings, many of which break when exposed to the PATH_TRANSLATED bug. - # For this reason IIS<7 is almost never deployed with the fix. (Even IIS7 - # rarely uses it because there is still no UI for it.) - - # There is no way for CGI code to tell whether the option was set, so a - # separate handler class is provided. - def __init__(self): - environ= read_environ() - path = environ.get('PATH_INFO', '') - script = environ.get('SCRIPT_NAME', '') - if (path+'/').startswith(script+'/'): - environ['PATH_INFO'] = path[len(script):] - BaseCGIHandler.__init__( - self, sys.stdin.buffer, sys.stdout.buffer, sys.stderr, - environ, multithread=False, multiprocess=True - ) diff --git a/Python314_4_x86_Template/Lib/wsgiref/headers.py b/Python314_4_x86_Template/Lib/wsgiref/headers.py deleted file mode 100644 index eb6ea6a41..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/headers.py +++ /dev/null @@ -1,192 +0,0 @@ -"""Manage HTTP Response Headers - -Much of this module is red-handedly pilfered from email.message in the stdlib, -so portions are Copyright (C) 2001 Python Software Foundation, and were -written by Barry Warsaw. -""" - -# Regular expression that matches 'special' characters in parameters, the -# existence of which force quoting of the parameter value. -import re -tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]') -# Disallowed characters for headers and values. -# HTAB (\x09) is allowed in header values, but -# not in header names. (RFC 9110 Section 5.5) -_name_disallowed_re = re.compile(r'[\x00-\x1F\x7F]') -_value_disallowed_re = re.compile(r'[\x00-\x08\x0A-\x1F\x7F]') - -def _formatparam(param, value=None, quote=1): - """Convenience function to format and return a key=value pair. - - This will quote the value if needed or if quote is true. - """ - if value is not None and len(value) > 0: - if quote or tspecials.search(value): - value = value.replace('\\', '\\\\').replace('"', r'\"') - return '%s="%s"' % (param, value) - else: - return '%s=%s' % (param, value) - else: - return param - - -class Headers: - """Manage a collection of HTTP response headers""" - - def __init__(self, headers=None): - headers = headers if headers is not None else [] - if type(headers) is not list: - raise TypeError("Headers must be a list of name/value tuples") - self._headers = headers - if __debug__: - for k, v in headers: - self._convert_string_type(k, name=True) - self._convert_string_type(v, name=False) - - def _convert_string_type(self, value, *, name): - """Convert/check value type.""" - if type(value) is str: - regex = (_name_disallowed_re if name else _value_disallowed_re) - if regex.search(value): - raise ValueError("Control characters not allowed in headers") - return value - raise AssertionError("Header names/values must be" - " of type str (got {0})".format(repr(value))) - - def __len__(self): - """Return the total number of headers, including duplicates.""" - return len(self._headers) - - def __setitem__(self, name, val): - """Set the value of a header.""" - del self[name] - self._headers.append( - (self._convert_string_type(name, name=True), self._convert_string_type(val, name=False))) - - def __delitem__(self,name): - """Delete all occurrences of a header, if present. - - Does *not* raise an exception if the header is missing. - """ - name = self._convert_string_type(name.lower(), name=True) - self._headers[:] = [kv for kv in self._headers if kv[0].lower() != name] - - def __getitem__(self,name): - """Get the first header value for 'name' - - Return None if the header is missing instead of raising an exception. - - Note that if the header appeared multiple times, the first exactly which - occurrence gets returned is undefined. Use getall() to get all - the values matching a header field name. - """ - return self.get(name) - - def __contains__(self, name): - """Return true if the message contains the header.""" - return self.get(name) is not None - - - def get_all(self, name): - """Return a list of all the values for the named field. - - These will be sorted in the order they appeared in the original header - list or were added to this instance, and may contain duplicates. Any - fields deleted and re-inserted are always appended to the header list. - If no fields exist with the given name, returns an empty list. - """ - name = self._convert_string_type(name.lower(), name=True) - return [kv[1] for kv in self._headers if kv[0].lower()==name] - - - def get(self,name,default=None): - """Get the first header value for 'name', or return 'default'""" - name = self._convert_string_type(name.lower(), name=True) - for k,v in self._headers: - if k.lower()==name: - return v - return default - - - def keys(self): - """Return a list of all the header field names. - - These will be sorted in the order they appeared in the original header - list, or were added to this instance, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return [k for k, v in self._headers] - - def values(self): - """Return a list of all header values. - - These will be sorted in the order they appeared in the original header - list, or were added to this instance, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return [v for k, v in self._headers] - - def items(self): - """Get all the header fields and values. - - These will be sorted in the order they were in the original header - list, or were added to this instance, and may contain duplicates. - Any fields deleted and re-inserted are always appended to the header - list. - """ - return self._headers[:] - - def __repr__(self): - return "%s(%r)" % (self.__class__.__name__, self._headers) - - def __str__(self): - """str() returns the formatted headers, complete with end line, - suitable for direct HTTP transmission.""" - return '\r\n'.join(["%s: %s" % kv for kv in self._headers]+['','']) - - def __bytes__(self): - return str(self).encode('iso-8859-1') - - def setdefault(self,name,value): - """Return first matching header value for 'name', or 'value' - - If there is no header named 'name', add a new header with name 'name' - and value 'value'.""" - result = self.get(name) - if result is None: - self._headers.append((self._convert_string_type(name, name=True), - self._convert_string_type(value, name=False))) - return value - else: - return result - - def add_header(self, _name, _value, **_params): - """Extended header setting. - - _name is the header field to add. keyword arguments can be used to set - additional parameters for the header field, with underscores converted - to dashes. Normally the parameter will be added as key="value" unless - value is None, in which case only the key will be added. - - Example: - - h.add_header('content-disposition', 'attachment', filename='bud.gif') - - Note that unlike the corresponding 'email.message' method, this does - *not* handle '(charset, language, value)' tuples: all values must be - strings or None. - """ - parts = [] - if _value is not None: - _value = self._convert_string_type(_value, name=False) - parts.append(_value) - for k, v in _params.items(): - k = self._convert_string_type(k, name=True) - if v is None: - parts.append(k.replace('_', '-')) - else: - v = self._convert_string_type(v, name=False) - parts.append(_formatparam(k.replace('_', '-'), v)) - self._headers.append((self._convert_string_type(_name, name=True), "; ".join(parts))) diff --git a/Python314_4_x86_Template/Lib/wsgiref/simple_server.py b/Python314_4_x86_Template/Lib/wsgiref/simple_server.py deleted file mode 100644 index a0f2397fc..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/simple_server.py +++ /dev/null @@ -1,161 +0,0 @@ -"""BaseHTTPServer that implements the Python WSGI protocol (PEP 3333) - -This is both an example of how WSGI can be implemented, and a basis for running -simple web applications on a local machine, such as might be done when testing -or debugging an application. It has not been reviewed for security issues, -however, and we strongly recommend that you use a "real" web server for -production use. - -For example usage, see the 'if __name__=="__main__"' block at the end of the -module. See also the BaseHTTPServer module docs for other API information. -""" - -from http.server import BaseHTTPRequestHandler, HTTPServer -import sys -import urllib.parse -from wsgiref.handlers import SimpleHandler -from platform import python_implementation - -__version__ = "0.2" -__all__ = ['WSGIServer', 'WSGIRequestHandler', 'demo_app', 'make_server'] - - -server_version = "WSGIServer/" + __version__ -sys_version = python_implementation() + "/" + sys.version.split()[0] -software_version = server_version + ' ' + sys_version - - -class ServerHandler(SimpleHandler): - - server_software = software_version - - def close(self): - try: - self.request_handler.log_request( - self.status.split(' ',1)[0], self.bytes_sent - ) - finally: - SimpleHandler.close(self) - - - -class WSGIServer(HTTPServer): - - """BaseHTTPServer that implements the Python WSGI protocol""" - - application = None - - def server_bind(self): - """Override server_bind to store the server name.""" - HTTPServer.server_bind(self) - self.setup_environ() - - def setup_environ(self): - # Set up base environment - env = self.base_environ = {} - env['SERVER_NAME'] = self.server_name - env['GATEWAY_INTERFACE'] = 'CGI/1.1' - env['SERVER_PORT'] = str(self.server_port) - env['REMOTE_HOST']='' - env['CONTENT_LENGTH']='' - env['SCRIPT_NAME'] = '' - - def get_app(self): - return self.application - - def set_app(self,application): - self.application = application - - - -class WSGIRequestHandler(BaseHTTPRequestHandler): - - server_version = "WSGIServer/" + __version__ - - def get_environ(self): - env = self.server.base_environ.copy() - env['SERVER_PROTOCOL'] = self.request_version - env['SERVER_SOFTWARE'] = self.server_version - env['REQUEST_METHOD'] = self.command - if '?' in self.path: - path,query = self.path.split('?',1) - else: - path,query = self.path,'' - - env['PATH_INFO'] = urllib.parse.unquote(path, 'iso-8859-1') - env['QUERY_STRING'] = query - env['REMOTE_ADDR'] = self.client_address[0] - - if self.headers.get('content-type') is None: - env['CONTENT_TYPE'] = self.headers.get_content_type() - else: - env['CONTENT_TYPE'] = self.headers['content-type'] - - length = self.headers.get('content-length') - if length: - env['CONTENT_LENGTH'] = length - - for k, v in self.headers.items(): - k=k.replace('-','_').upper(); v=v.strip() - if k in env: - continue # skip content length, type,etc. - if 'HTTP_'+k in env: - env['HTTP_'+k] += ','+v # comma-separate multiple headers - else: - env['HTTP_'+k] = v - return env - - def get_stderr(self): - return sys.stderr - - def handle(self): - """Handle a single HTTP request""" - - self.raw_requestline = self.rfile.readline(65537) - if len(self.raw_requestline) > 65536: - self.requestline = '' - self.request_version = '' - self.command = '' - self.send_error(414) - return - - if not self.parse_request(): # An error code has been sent, just exit - return - - handler = ServerHandler( - self.rfile, self.wfile, self.get_stderr(), self.get_environ(), - multithread=False, - ) - handler.request_handler = self # backpointer for logging - handler.run(self.server.get_app()) - - - -def demo_app(environ,start_response): - from io import StringIO - stdout = StringIO() - print("Hello world!", file=stdout) - print(file=stdout) - h = sorted(environ.items()) - for k,v in h: - print(k,'=',repr(v), file=stdout) - start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')]) - return [stdout.getvalue().encode("utf-8")] - - -def make_server( - host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler -): - """Create a new WSGI server listening on `host` and `port` for `app`""" - server = server_class((host, port), handler_class) - server.set_app(app) - return server - - -if __name__ == '__main__': - with make_server('', 8000, demo_app) as httpd: - sa = httpd.socket.getsockname() - print("Serving HTTP on", sa[0], "port", sa[1], "...") - import webbrowser - webbrowser.open('http://localhost:8000/xyz?abc') - httpd.handle_request() # serve one request, then exit diff --git a/Python314_4_x86_Template/Lib/wsgiref/types.py b/Python314_4_x86_Template/Lib/wsgiref/types.py deleted file mode 100644 index ef0aead5b..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/types.py +++ /dev/null @@ -1,54 +0,0 @@ -"""WSGI-related types for static type checking""" - -from collections.abc import Callable, Iterable, Iterator -from types import TracebackType -from typing import Any, Protocol, TypeAlias - -__all__ = [ - "StartResponse", - "WSGIEnvironment", - "WSGIApplication", - "InputStream", - "ErrorStream", - "FileWrapper", -] - -_ExcInfo: TypeAlias = tuple[type[BaseException], BaseException, TracebackType] -_OptExcInfo: TypeAlias = _ExcInfo | tuple[None, None, None] - -class StartResponse(Protocol): - """start_response() callable as defined in PEP 3333""" - def __call__( - self, - status: str, - headers: list[tuple[str, str]], - exc_info: _OptExcInfo | None = ..., - /, - ) -> Callable[[bytes], object]: ... - -WSGIEnvironment: TypeAlias = dict[str, Any] -WSGIApplication: TypeAlias = Callable[[WSGIEnvironment, StartResponse], - Iterable[bytes]] - -class InputStream(Protocol): - """WSGI input stream as defined in PEP 3333""" - def read(self, size: int = ..., /) -> bytes: ... - def readline(self, size: int = ..., /) -> bytes: ... - def readlines(self, hint: int = ..., /) -> list[bytes]: ... - def __iter__(self) -> Iterator[bytes]: ... - -class ErrorStream(Protocol): - """WSGI error stream as defined in PEP 3333""" - def flush(self) -> object: ... - def write(self, s: str, /) -> object: ... - def writelines(self, seq: list[str], /) -> object: ... - -class _Readable(Protocol): - def read(self, size: int = ..., /) -> bytes: ... - # Optional: def close(self) -> object: ... - -class FileWrapper(Protocol): - """WSGI file wrapper as defined in PEP 3333""" - def __call__( - self, file: _Readable, block_size: int = ..., /, - ) -> Iterable[bytes]: ... diff --git a/Python314_4_x86_Template/Lib/wsgiref/util.py b/Python314_4_x86_Template/Lib/wsgiref/util.py deleted file mode 100644 index 63b923317..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/util.py +++ /dev/null @@ -1,159 +0,0 @@ -"""Miscellaneous WSGI-related Utilities""" - -import posixpath - -__all__ = [ - 'FileWrapper', 'guess_scheme', 'application_uri', 'request_uri', - 'shift_path_info', 'setup_testing_defaults', 'is_hop_by_hop', -] - - -class FileWrapper: - """Wrapper to convert file-like objects to iterables""" - - def __init__(self, filelike, blksize=8192): - self.filelike = filelike - self.blksize = blksize - if hasattr(filelike,'close'): - self.close = filelike.close - - def __iter__(self): - return self - - def __next__(self): - data = self.filelike.read(self.blksize) - if data: - return data - raise StopIteration - -def guess_scheme(environ): - """Return a guess for whether 'wsgi.url_scheme' should be 'http' or 'https' - """ - if environ.get("HTTPS") in ('yes','on','1'): - return 'https' - else: - return 'http' - -def application_uri(environ): - """Return the application's base URI (no PATH_INFO or QUERY_STRING)""" - url = environ['wsgi.url_scheme']+'://' - from urllib.parse import quote - - if environ.get('HTTP_HOST'): - url += environ['HTTP_HOST'] - else: - url += environ['SERVER_NAME'] - - if environ['wsgi.url_scheme'] == 'https': - if environ['SERVER_PORT'] != '443': - url += ':' + environ['SERVER_PORT'] - else: - if environ['SERVER_PORT'] != '80': - url += ':' + environ['SERVER_PORT'] - - url += quote(environ.get('SCRIPT_NAME') or '/', encoding='latin1') - return url - -def request_uri(environ, include_query=True): - """Return the full request URI, optionally including the query string""" - url = application_uri(environ) - from urllib.parse import quote - path_info = quote(environ.get('PATH_INFO',''), safe='/;=,', encoding='latin1') - if not environ.get('SCRIPT_NAME'): - url += path_info[1:] - else: - url += path_info - if include_query and environ.get('QUERY_STRING'): - url += '?' + environ['QUERY_STRING'] - return url - -def shift_path_info(environ): - """Shift a name from PATH_INFO to SCRIPT_NAME, returning it - - If there are no remaining path segments in PATH_INFO, return None. - Note: 'environ' is modified in-place; use a copy if you need to keep - the original PATH_INFO or SCRIPT_NAME. - - Note: when PATH_INFO is just a '/', this returns '' and appends a trailing - '/' to SCRIPT_NAME, even though empty path segments are normally ignored, - and SCRIPT_NAME doesn't normally end in a '/'. This is intentional - behavior, to ensure that an application can tell the difference between - '/x' and '/x/' when traversing to objects. - """ - path_info = environ.get('PATH_INFO','') - if not path_info: - return None - - path_parts = path_info.split('/') - path_parts[1:-1] = [p for p in path_parts[1:-1] if p and p != '.'] - name = path_parts[1] - del path_parts[1] - - script_name = environ.get('SCRIPT_NAME','') - script_name = posixpath.normpath(script_name+'/'+name) - if script_name.endswith('/'): - script_name = script_name[:-1] - if not name and not script_name.endswith('/'): - script_name += '/' - - environ['SCRIPT_NAME'] = script_name - environ['PATH_INFO'] = '/'.join(path_parts) - - # Special case: '/.' on PATH_INFO doesn't get stripped, - # because we don't strip the last element of PATH_INFO - # if there's only one path part left. Instead of fixing this - # above, we fix it here so that PATH_INFO gets normalized to - # an empty string in the environ. - if name=='.': - name = None - return name - -def setup_testing_defaults(environ): - """Update 'environ' with trivial defaults for testing purposes - - This adds various parameters required for WSGI, including HTTP_HOST, - SERVER_NAME, SERVER_PORT, REQUEST_METHOD, SCRIPT_NAME, PATH_INFO, - and all of the wsgi.* variables. It only supplies default values, - and does not replace any existing settings for these variables. - - This routine is intended to make it easier for unit tests of WSGI - servers and applications to set up dummy environments. It should *not* - be used by actual WSGI servers or applications, since the data is fake! - """ - - environ.setdefault('SERVER_NAME','127.0.0.1') - environ.setdefault('SERVER_PROTOCOL','HTTP/1.0') - - environ.setdefault('HTTP_HOST',environ['SERVER_NAME']) - environ.setdefault('REQUEST_METHOD','GET') - - if 'SCRIPT_NAME' not in environ and 'PATH_INFO' not in environ: - environ.setdefault('SCRIPT_NAME','') - environ.setdefault('PATH_INFO','/') - - environ.setdefault('wsgi.version', (1,0)) - environ.setdefault('wsgi.run_once', 0) - environ.setdefault('wsgi.multithread', 0) - environ.setdefault('wsgi.multiprocess', 0) - - from io import StringIO, BytesIO - environ.setdefault('wsgi.input', BytesIO()) - environ.setdefault('wsgi.errors', StringIO()) - environ.setdefault('wsgi.url_scheme',guess_scheme(environ)) - - if environ['wsgi.url_scheme']=='http': - environ.setdefault('SERVER_PORT', '80') - elif environ['wsgi.url_scheme']=='https': - environ.setdefault('SERVER_PORT', '443') - - - -_hoppish = { - 'connection', 'keep-alive', 'proxy-authenticate', - 'proxy-authorization', 'te', 'trailers', 'transfer-encoding', - 'upgrade' -}.__contains__ - -def is_hop_by_hop(header_name): - """Return true if 'header_name' is an HTTP/1.1 "Hop-by-Hop" header""" - return _hoppish(header_name.lower()) diff --git a/Python314_4_x86_Template/Lib/wsgiref/validate.py b/Python314_4_x86_Template/Lib/wsgiref/validate.py deleted file mode 100644 index 1a1853cd6..000000000 --- a/Python314_4_x86_Template/Lib/wsgiref/validate.py +++ /dev/null @@ -1,438 +0,0 @@ -# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) -# Licensed under the MIT license: https://opensource.org/licenses/mit-license.php -# Also licenced under the Apache License, 2.0: https://opensource.org/licenses/apache2.0.php -# Licensed to PSF under a Contributor Agreement -""" -Middleware to check for obedience to the WSGI specification. - -Some of the things this checks: - -* Signature of the application and start_response (including that - keyword arguments are not used). - -* Environment checks: - - - Environment is a dictionary (and not a subclass). - - - That all the required keys are in the environment: REQUEST_METHOD, - SERVER_NAME, SERVER_PORT, wsgi.version, wsgi.input, wsgi.errors, - wsgi.multithread, wsgi.multiprocess, wsgi.run_once - - - That HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH are not in the - environment (these headers should appear as CONTENT_LENGTH and - CONTENT_TYPE). - - - Warns if QUERY_STRING is missing, as the cgi module acts - unpredictably in that case. - - - That CGI-style variables (that don't contain a .) have - (non-unicode) string values - - - That wsgi.version is a tuple - - - That wsgi.url_scheme is 'http' or 'https' (@@: is this too - restrictive?) - - - Warns if the REQUEST_METHOD is not known (@@: probably too - restrictive). - - - That SCRIPT_NAME and PATH_INFO are empty or start with / - - - That at least one of SCRIPT_NAME or PATH_INFO are set. - - - That CONTENT_LENGTH is a positive integer. - - - That SCRIPT_NAME is not '/' (it should be '', and PATH_INFO should - be '/'). - - - That wsgi.input has the methods read, readline, readlines, and - __iter__ - - - That wsgi.errors has the methods flush, write, writelines - -* The status is a string, contains a space, starts with an integer, - and that integer is in range (> 100). - -* That the headers is a list (not a subclass, not another kind of - sequence). - -* That the items of the headers are tuples of strings. - -* That there is no 'status' header (that is used in CGI, but not in - WSGI). - -* That the headers don't contain newlines or colons, end in _ or -, or - contain characters codes below 037. - -* That Content-Type is given if there is content (CGI often has a - default content type, but WSGI does not). - -* That no Content-Type is given when there is no content (@@: is this - too restrictive?) - -* That the exc_info argument to start_response is a tuple or None. - -* That all calls to the writer are with strings, and no other methods - on the writer are accessed. - -* That wsgi.input is used properly: - - - .read() is called with exactly one argument - - - That it returns a string - - - That readline, readlines, and __iter__ return strings - - - That .close() is not called - - - No other methods are provided - -* That wsgi.errors is used properly: - - - .write() and .writelines() is called with a string - - - That .close() is not called, and no other methods are provided. - -* The response iterator: - - - That it is not a string (it should be a list of a single string; a - string will work, but perform horribly). - - - That .__next__() returns a string - - - That the iterator is not iterated over until start_response has - been called (that can signal either a server or application - error). - - - That .close() is called (doesn't raise exception, only prints to - sys.stderr, because we only know it isn't called when the object - is garbage collected). -""" -__all__ = ['validator'] - - -import re -import sys -import warnings - -header_re = re.compile(r'^[a-zA-Z][a-zA-Z0-9\-_]*$') -bad_header_value_re = re.compile(r'[\000-\037]') - -class WSGIWarning(Warning): - """ - Raised in response to WSGI-spec-related warnings - """ - -def assert_(cond, *args): - if not cond: - raise AssertionError(*args) - -def check_string_type(value, title): - if type (value) is str: - return value - raise AssertionError( - "{0} must be of type str (got {1})".format(title, repr(value))) - -def validator(application): - - """ - When applied between a WSGI server and a WSGI application, this - middleware will check for WSGI compliance on a number of levels. - This middleware does not modify the request or response in any - way, but will raise an AssertionError if anything seems off - (except for a failure to close the application iterator, which - will be printed to stderr -- there's no way to raise an exception - at that point). - """ - - def lint_app(*args, **kw): - assert_(len(args) == 2, "Two arguments required") - assert_(not kw, "No keyword arguments allowed") - environ, start_response = args - - check_environ(environ) - - # We use this to check if the application returns without - # calling start_response: - start_response_started = [] - - def start_response_wrapper(*args, **kw): - assert_(len(args) == 2 or len(args) == 3, ( - "Invalid number of arguments: %s" % (args,))) - assert_(not kw, "No keyword arguments allowed") - status = args[0] - headers = args[1] - if len(args) == 3: - exc_info = args[2] - else: - exc_info = None - - check_status(status) - check_headers(headers) - check_content_type(status, headers) - check_exc_info(exc_info) - - start_response_started.append(None) - return WriteWrapper(start_response(*args)) - - environ['wsgi.input'] = InputWrapper(environ['wsgi.input']) - environ['wsgi.errors'] = ErrorWrapper(environ['wsgi.errors']) - - iterator = application(environ, start_response_wrapper) - assert_(iterator is not None and iterator != False, - "The application must return an iterator, if only an empty list") - - check_iterator(iterator) - - return IteratorWrapper(iterator, start_response_started) - - return lint_app - -class InputWrapper: - - def __init__(self, wsgi_input): - self.input = wsgi_input - - def read(self, *args): - assert_(len(args) == 1) - v = self.input.read(*args) - assert_(type(v) is bytes) - return v - - def readline(self, *args): - assert_(len(args) <= 1) - v = self.input.readline(*args) - assert_(type(v) is bytes) - return v - - def readlines(self, *args): - assert_(len(args) <= 1) - lines = self.input.readlines(*args) - assert_(type(lines) is list) - for line in lines: - assert_(type(line) is bytes) - return lines - - def __iter__(self): - while line := self.readline(): - yield line - - def close(self): - assert_(0, "input.close() must not be called") - -class ErrorWrapper: - - def __init__(self, wsgi_errors): - self.errors = wsgi_errors - - def write(self, s): - assert_(type(s) is str) - self.errors.write(s) - - def flush(self): - self.errors.flush() - - def writelines(self, seq): - for line in seq: - self.write(line) - - def close(self): - assert_(0, "errors.close() must not be called") - -class WriteWrapper: - - def __init__(self, wsgi_writer): - self.writer = wsgi_writer - - def __call__(self, s): - assert_(type(s) is bytes) - self.writer(s) - -class PartialIteratorWrapper: - - def __init__(self, wsgi_iterator): - self.iterator = wsgi_iterator - - def __iter__(self): - # We want to make sure __iter__ is called - return IteratorWrapper(self.iterator, None) - -class IteratorWrapper: - - def __init__(self, wsgi_iterator, check_start_response): - self.original_iterator = wsgi_iterator - self.iterator = iter(wsgi_iterator) - self.closed = False - self.check_start_response = check_start_response - - def __iter__(self): - return self - - def __next__(self): - assert_(not self.closed, - "Iterator read after closed") - v = next(self.iterator) - if type(v) is not bytes: - assert_(False, "Iterator yielded non-bytestring (%r)" % (v,)) - if self.check_start_response is not None: - assert_(self.check_start_response, - "The application returns and we started iterating over its body, but start_response has not yet been called") - self.check_start_response = None - return v - - def close(self): - self.closed = True - if hasattr(self.original_iterator, 'close'): - self.original_iterator.close() - - def __del__(self): - if not self.closed: - sys.stderr.write( - "Iterator garbage collected without being closed") - assert_(self.closed, - "Iterator garbage collected without being closed") - -def check_environ(environ): - assert_(type(environ) is dict, - "Environment is not of the right type: %r (environment: %r)" - % (type(environ), environ)) - - for key in ['REQUEST_METHOD', 'SERVER_NAME', 'SERVER_PORT', - 'wsgi.version', 'wsgi.input', 'wsgi.errors', - 'wsgi.multithread', 'wsgi.multiprocess', - 'wsgi.run_once']: - assert_(key in environ, - "Environment missing required key: %r" % (key,)) - - for key in ['HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH']: - assert_(key not in environ, - "Environment should not have the key: %s " - "(use %s instead)" % (key, key[5:])) - - if 'QUERY_STRING' not in environ: - warnings.warn( - 'QUERY_STRING is not in the WSGI environment; the cgi ' - 'module will use sys.argv when this variable is missing, ' - 'so application errors are more likely', - WSGIWarning) - - for key in environ.keys(): - if '.' in key: - # Extension, we don't care about its type - continue - assert_(type(environ[key]) is str, - "Environmental variable %s is not a string: %r (value: %r)" - % (key, type(environ[key]), environ[key])) - - assert_(type(environ['wsgi.version']) is tuple, - "wsgi.version should be a tuple (%r)" % (environ['wsgi.version'],)) - assert_(environ['wsgi.url_scheme'] in ('http', 'https'), - "wsgi.url_scheme unknown: %r" % environ['wsgi.url_scheme']) - - check_input(environ['wsgi.input']) - check_errors(environ['wsgi.errors']) - - # @@: these need filling out: - if environ['REQUEST_METHOD'] not in ( - 'GET', 'HEAD', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE', 'TRACE'): - warnings.warn( - "Unknown REQUEST_METHOD: %r" % environ['REQUEST_METHOD'], - WSGIWarning) - - assert_(not environ.get('SCRIPT_NAME') - or environ['SCRIPT_NAME'].startswith('/'), - "SCRIPT_NAME doesn't start with /: %r" % environ['SCRIPT_NAME']) - assert_(not environ.get('PATH_INFO') - or environ['PATH_INFO'].startswith('/'), - "PATH_INFO doesn't start with /: %r" % environ['PATH_INFO']) - if environ.get('CONTENT_LENGTH'): - assert_(int(environ['CONTENT_LENGTH']) >= 0, - "Invalid CONTENT_LENGTH: %r" % environ['CONTENT_LENGTH']) - - if not environ.get('SCRIPT_NAME'): - assert_('PATH_INFO' in environ, - "One of SCRIPT_NAME or PATH_INFO are required (PATH_INFO " - "should at least be '/' if SCRIPT_NAME is empty)") - assert_(environ.get('SCRIPT_NAME') != '/', - "SCRIPT_NAME cannot be '/'; it should instead be '', and " - "PATH_INFO should be '/'") - -def check_input(wsgi_input): - for attr in ['read', 'readline', 'readlines', '__iter__']: - assert_(hasattr(wsgi_input, attr), - "wsgi.input (%r) doesn't have the attribute %s" - % (wsgi_input, attr)) - -def check_errors(wsgi_errors): - for attr in ['flush', 'write', 'writelines']: - assert_(hasattr(wsgi_errors, attr), - "wsgi.errors (%r) doesn't have the attribute %s" - % (wsgi_errors, attr)) - -def check_status(status): - status = check_string_type(status, "Status") - # Implicitly check that we can turn it into an integer: - status_code = status.split(None, 1)[0] - assert_(len(status_code) == 3, - "Status codes must be three characters: %r" % status_code) - status_int = int(status_code) - assert_(status_int >= 100, "Status code is invalid: %r" % status_int) - if len(status) < 4 or status[3] != ' ': - warnings.warn( - "The status string (%r) should be a three-digit integer " - "followed by a single space and a status explanation" - % status, WSGIWarning) - -def check_headers(headers): - assert_(type(headers) is list, - "Headers (%r) must be of type list: %r" - % (headers, type(headers))) - for item in headers: - assert_(type(item) is tuple, - "Individual headers (%r) must be of type tuple: %r" - % (item, type(item))) - assert_(len(item) == 2) - name, value = item - name = check_string_type(name, "Header name") - value = check_string_type(value, "Header value") - assert_(name.lower() != 'status', - "The Status header cannot be used; it conflicts with CGI " - "script, and HTTP status is not given through headers " - "(value: %r)." % value) - assert_('\n' not in name and ':' not in name, - "Header names may not contain ':' or '\\n': %r" % name) - assert_(header_re.search(name), "Bad header name: %r" % name) - assert_(not name.endswith('-') and not name.endswith('_'), - "Names may not end in '-' or '_': %r" % name) - if bad_header_value_re.search(value): - assert_(0, "Bad header value: %r (bad char: %r)" - % (value, bad_header_value_re.search(value).group(0))) - -def check_content_type(status, headers): - status = check_string_type(status, "Status") - code = int(status.split(None, 1)[0]) - # @@: need one more person to verify this interpretation of RFC 2616 - # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html - NO_MESSAGE_BODY = (204, 304) - for name, value in headers: - name = check_string_type(name, "Header name") - if name.lower() == 'content-type': - if code not in NO_MESSAGE_BODY: - return - assert_(0, ("Content-Type header found in a %s response, " - "which must not return content.") % code) - if code not in NO_MESSAGE_BODY: - assert_(0, "No Content-Type header found in headers (%s)" % headers) - -def check_exc_info(exc_info): - assert_(exc_info is None or type(exc_info) is tuple, - "exc_info (%r) is not a tuple: %r" % (exc_info, type(exc_info))) - # More exc_info checks? - -def check_iterator(iterator): - # Technically a bytestring is legal, which is why it's a really bad - # idea, because it may cause the response to be returned - # character-by-character - assert_(not isinstance(iterator, (str, bytes)), - "You should not return a string as your application iterator, " - "instead return a single-item list containing a bytestring.") diff --git a/Python314_4_x86_Template/Lib/xml/__init__.py b/Python314_4_x86_Template/Lib/xml/__init__.py deleted file mode 100644 index bf6d8ddfd..000000000 --- a/Python314_4_x86_Template/Lib/xml/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Core XML support for Python. - -This package contains four sub-packages: - -dom -- The W3C Document Object Model. This supports DOM Level 1 + - Namespaces. - -parsers -- Python wrappers for XML parsers (currently only supports Expat). - -sax -- The Simple API for XML, developed by XML-Dev, led by David - Megginson and ported to Python by Lars Marius Garshol. This - supports the SAX 2 API. - -etree -- The ElementTree XML library. This is a subset of the full - ElementTree XML release. - -""" - - -__all__ = ["dom", "parsers", "sax", "etree"] diff --git a/Python314_4_x86_Template/Lib/xml/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/xml/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 5076e30be01cde8ab415c4671f43bbbaf317c925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmZ8fO>fgc5M3v&3a&uFFBl045w(s8tq`pcQj}B(DQT)Sh#oAh*7hWEv-VoM>omC` zPW%;q5Eozh13(X4nQh`8n8WPX?0awD?7`zlKBM@y`y=f(82jlKb<p}QZlBTcg^ihI zZ8mO<JnN0U=d9Hfe?7)}N+Vni2VlygP};&&X}DP1xyswVKbfZn3K1{F3?Wvz6=`m$ zq|{U&1=|yI>idbxAP8VGNBDfygT9K(408*k=o(`SLzSRx1DzA#mdZeXG=u>zQ9=g} zeAvXf$j}fn8WK<lZBQEry%7aBS`>xbazdT(y5wbCYE6`K4JxN}&vLdZgl!R+5vy9` zWttTdp?mSM#yNz<DNzL`5Um|@(8uK=$j!PhmT6K;9O7(7MyMP_o`AEBima+7()9u9 zhM~}DY2X9R=c;~vjd3r}l4Y0OD|qeHkV>=~vDSGe(b+h0Tkf$kjkM6~+DS4~xK0?f zpr+uUrlpiM$N#rAN)!f(<h-?0HK}LS-qyaVN$ym;cjT=`wa0m)V$R(}NXhwkcI$pq zwdkFOpIl2qk)ZCJoV*HelwO2|R<6+|jHN1*h**L&Pc0>52>^A_2{#=)>KyZ9zIywH zPmr1*EOMI_;UJB|RVG8u-966R#kzX%E>lS<@x9(BZu+gvJf-xj>3QDo#uIPn&kMF6 KeBILzY4;!b=ks3x diff --git a/Python314_4_x86_Template/Lib/xml/dom/NodeFilter.py b/Python314_4_x86_Template/Lib/xml/dom/NodeFilter.py deleted file mode 100644 index 640e0bfd2..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/NodeFilter.py +++ /dev/null @@ -1,27 +0,0 @@ -# This is the Python mapping for interface NodeFilter from -# DOM2-Traversal-Range. It contains only constants. - -class NodeFilter: - """ - This is the DOM2 NodeFilter interface. It contains only constants. - """ - FILTER_ACCEPT = 1 - FILTER_REJECT = 2 - FILTER_SKIP = 3 - - SHOW_ALL = 0xFFFFFFFF - SHOW_ELEMENT = 0x00000001 - SHOW_ATTRIBUTE = 0x00000002 - SHOW_TEXT = 0x00000004 - SHOW_CDATA_SECTION = 0x00000008 - SHOW_ENTITY_REFERENCE = 0x00000010 - SHOW_ENTITY = 0x00000020 - SHOW_PROCESSING_INSTRUCTION = 0x00000040 - SHOW_COMMENT = 0x00000080 - SHOW_DOCUMENT = 0x00000100 - SHOW_DOCUMENT_TYPE = 0x00000200 - SHOW_DOCUMENT_FRAGMENT = 0x00000400 - SHOW_NOTATION = 0x00000800 - - def acceptNode(self, node): - raise NotImplementedError diff --git a/Python314_4_x86_Template/Lib/xml/dom/__init__.py b/Python314_4_x86_Template/Lib/xml/dom/__init__.py deleted file mode 100644 index dd7fb996a..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/__init__.py +++ /dev/null @@ -1,140 +0,0 @@ -"""W3C Document Object Model implementation for Python. - -The Python mapping of the Document Object Model is documented in the -Python Library Reference in the section on the xml.dom package. - -This package contains the following modules: - -minidom -- A simple implementation of the Level 1 DOM with namespace - support added (based on the Level 2 specification) and other - minor Level 2 functionality. - -pulldom -- DOM builder supporting on-demand tree-building for selected - subtrees of the document. - -""" - - -class Node: - """Class giving the NodeType constants.""" - __slots__ = () - - # DOM implementations may use this as a base class for their own - # Node implementations. If they don't, the constants defined here - # should still be used as the canonical definitions as they match - # the values given in the W3C recommendation. Client code can - # safely refer to these values in all tests of Node.nodeType - # values. - - ELEMENT_NODE = 1 - ATTRIBUTE_NODE = 2 - TEXT_NODE = 3 - CDATA_SECTION_NODE = 4 - ENTITY_REFERENCE_NODE = 5 - ENTITY_NODE = 6 - PROCESSING_INSTRUCTION_NODE = 7 - COMMENT_NODE = 8 - DOCUMENT_NODE = 9 - DOCUMENT_TYPE_NODE = 10 - DOCUMENT_FRAGMENT_NODE = 11 - NOTATION_NODE = 12 - - -#ExceptionCode -INDEX_SIZE_ERR = 1 -DOMSTRING_SIZE_ERR = 2 -HIERARCHY_REQUEST_ERR = 3 -WRONG_DOCUMENT_ERR = 4 -INVALID_CHARACTER_ERR = 5 -NO_DATA_ALLOWED_ERR = 6 -NO_MODIFICATION_ALLOWED_ERR = 7 -NOT_FOUND_ERR = 8 -NOT_SUPPORTED_ERR = 9 -INUSE_ATTRIBUTE_ERR = 10 -INVALID_STATE_ERR = 11 -SYNTAX_ERR = 12 -INVALID_MODIFICATION_ERR = 13 -NAMESPACE_ERR = 14 -INVALID_ACCESS_ERR = 15 -VALIDATION_ERR = 16 - - -class DOMException(Exception): - """Abstract base class for DOM exceptions. - Exceptions with specific codes are specializations of this class.""" - - def __init__(self, *args, **kw): - if self.__class__ is DOMException: - raise RuntimeError( - "DOMException should not be instantiated directly") - Exception.__init__(self, *args, **kw) - - def _get_code(self): - return self.code - - -class IndexSizeErr(DOMException): - code = INDEX_SIZE_ERR - -class DomstringSizeErr(DOMException): - code = DOMSTRING_SIZE_ERR - -class HierarchyRequestErr(DOMException): - code = HIERARCHY_REQUEST_ERR - -class WrongDocumentErr(DOMException): - code = WRONG_DOCUMENT_ERR - -class InvalidCharacterErr(DOMException): - code = INVALID_CHARACTER_ERR - -class NoDataAllowedErr(DOMException): - code = NO_DATA_ALLOWED_ERR - -class NoModificationAllowedErr(DOMException): - code = NO_MODIFICATION_ALLOWED_ERR - -class NotFoundErr(DOMException): - code = NOT_FOUND_ERR - -class NotSupportedErr(DOMException): - code = NOT_SUPPORTED_ERR - -class InuseAttributeErr(DOMException): - code = INUSE_ATTRIBUTE_ERR - -class InvalidStateErr(DOMException): - code = INVALID_STATE_ERR - -class SyntaxErr(DOMException): - code = SYNTAX_ERR - -class InvalidModificationErr(DOMException): - code = INVALID_MODIFICATION_ERR - -class NamespaceErr(DOMException): - code = NAMESPACE_ERR - -class InvalidAccessErr(DOMException): - code = INVALID_ACCESS_ERR - -class ValidationErr(DOMException): - code = VALIDATION_ERR - -class UserDataHandler: - """Class giving the operation constants for UserDataHandler.handle().""" - - # Based on DOM Level 3 (WD 9 April 2002) - - NODE_CLONED = 1 - NODE_IMPORTED = 2 - NODE_DELETED = 3 - NODE_RENAMED = 4 - -XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" -XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" -XHTML_NAMESPACE = "http://www.w3.org/1999/xhtml" -EMPTY_NAMESPACE = None -EMPTY_PREFIX = None - -from .domreg import getDOMImplementation, registerDOMImplementation # noqa: F401 diff --git a/Python314_4_x86_Template/Lib/xml/dom/domreg.py b/Python314_4_x86_Template/Lib/xml/dom/domreg.py deleted file mode 100644 index 69c17eebb..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/domreg.py +++ /dev/null @@ -1,99 +0,0 @@ -"""Registration facilities for DOM. This module should not be used -directly. Instead, the functions getDOMImplementation and -registerDOMImplementation should be imported from xml.dom.""" - -# This is a list of well-known implementations. Well-known names -# should be published by posting to xml-sig@python.org, and are -# subsequently recorded in this file. - -import sys - -well_known_implementations = { - 'minidom':'xml.dom.minidom', - '4DOM': 'xml.dom.DOMImplementation', - } - -# DOM implementations not officially registered should register -# themselves with their - -registered = {} - -def registerDOMImplementation(name, factory): - """registerDOMImplementation(name, factory) - - Register the factory function with the name. The factory function - should return an object which implements the DOMImplementation - interface. The factory function can either return the same object, - or a new one (e.g. if that implementation supports some - customization).""" - - registered[name] = factory - -def _good_enough(dom, features): - "_good_enough(dom, features) -> Return 1 if the dom offers the features" - for f,v in features: - if not dom.hasFeature(f,v): - return 0 - return 1 - -def getDOMImplementation(name=None, features=()): - """getDOMImplementation(name = None, features = ()) -> DOM implementation. - - Return a suitable DOM implementation. The name is either - well-known, the module name of a DOM implementation, or None. If - it is not None, imports the corresponding module and returns - DOMImplementation object if the import succeeds. - - If name is not given, consider the available implementations to - find one with the required feature set. If no implementation can - be found, raise an ImportError. The features list must be a sequence - of (feature, version) pairs which are passed to hasFeature.""" - - import os - creator = None - mod = well_known_implementations.get(name) - if mod: - mod = __import__(mod, {}, {}, ['getDOMImplementation']) - return mod.getDOMImplementation() - elif name: - return registered[name]() - elif not sys.flags.ignore_environment and "PYTHON_DOM" in os.environ: - return getDOMImplementation(name = os.environ["PYTHON_DOM"]) - - # User did not specify a name, try implementations in arbitrary - # order, returning the one that has the required features - if isinstance(features, str): - features = _parse_feature_string(features) - for creator in registered.values(): - dom = creator() - if _good_enough(dom, features): - return dom - - for creator in well_known_implementations.keys(): - try: - dom = getDOMImplementation(name = creator) - except Exception: # typically ImportError, or AttributeError - continue - if _good_enough(dom, features): - return dom - - raise ImportError("no suitable DOM implementation found") - -def _parse_feature_string(s): - features = [] - parts = s.split() - i = 0 - length = len(parts) - while i < length: - feature = parts[i] - if feature[0] in "0123456789": - raise ValueError("bad feature name: %r" % (feature,)) - i = i + 1 - version = None - if i < length: - v = parts[i] - if v[0] in "0123456789": - i = i + 1 - version = v - features.append((feature, version)) - return tuple(features) diff --git a/Python314_4_x86_Template/Lib/xml/dom/expatbuilder.py b/Python314_4_x86_Template/Lib/xml/dom/expatbuilder.py deleted file mode 100644 index 7dd667bf3..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/expatbuilder.py +++ /dev/null @@ -1,962 +0,0 @@ -"""Facility to use the Expat parser to load a minidom instance -from a string or file. - -This avoids all the overhead of SAX and pulldom to gain performance. -""" - -# Warning! -# -# This module is tightly bound to the implementation details of the -# minidom DOM and can't be used with other DOM implementations. This -# is due, in part, to a lack of appropriate methods in the DOM (there is -# no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The latter is the cause of some fairly -# cryptic code. -# -# Performance hacks: -# -# - .character_data_handler() has an extra case in which continuing -# data is appended to an existing Text node; this can be a -# speedup since pyexpat can break up character data into multiple -# callbacks even though we set the buffer_text attribute on the -# parser. This also gives us the advantage that we don't need a -# separate normalization pass. -# -# - Determining that a node exists is done using an identity comparison -# with None rather than a truth test; this avoids searching for and -# calling any methods on the node object if it exists. (A rather -# nice speedup is achieved this way as well!) - -from xml.dom import xmlbuilder, minidom, Node -from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE -from xml.parsers import expat -from xml.dom.minidom import _append_child, _set_attribute_node -from xml.dom.NodeFilter import NodeFilter - -TEXT_NODE = Node.TEXT_NODE -CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE -DOCUMENT_NODE = Node.DOCUMENT_NODE - -FILTER_ACCEPT = xmlbuilder.DOMBuilderFilter.FILTER_ACCEPT -FILTER_REJECT = xmlbuilder.DOMBuilderFilter.FILTER_REJECT -FILTER_SKIP = xmlbuilder.DOMBuilderFilter.FILTER_SKIP -FILTER_INTERRUPT = xmlbuilder.DOMBuilderFilter.FILTER_INTERRUPT - -theDOMImplementation = minidom.getDOMImplementation() - -# Expat typename -> TypeInfo -_typeinfo_map = { - "CDATA": minidom.TypeInfo(None, "cdata"), - "ENUM": minidom.TypeInfo(None, "enumeration"), - "ENTITY": minidom.TypeInfo(None, "entity"), - "ENTITIES": minidom.TypeInfo(None, "entities"), - "ID": minidom.TypeInfo(None, "id"), - "IDREF": minidom.TypeInfo(None, "idref"), - "IDREFS": minidom.TypeInfo(None, "idrefs"), - "NMTOKEN": minidom.TypeInfo(None, "nmtoken"), - "NMTOKENS": minidom.TypeInfo(None, "nmtokens"), - } - -class ElementInfo(object): - __slots__ = '_attr_info', '_model', 'tagName' - - def __init__(self, tagName, model=None): - self.tagName = tagName - self._attr_info = [] - self._model = model - - def __getstate__(self): - return self._attr_info, self._model, self.tagName - - def __setstate__(self, state): - self._attr_info, self._model, self.tagName = state - - def getAttributeType(self, aname): - for info in self._attr_info: - if info[1] == aname: - t = info[-2] - if t[0] == "(": - return _typeinfo_map["ENUM"] - else: - return _typeinfo_map[info[-2]] - return minidom._no_type - - def getAttributeTypeNS(self, namespaceURI, localName): - return minidom._no_type - - def isElementContent(self): - if self._model: - type = self._model[0] - return type not in (expat.model.XML_CTYPE_ANY, - expat.model.XML_CTYPE_MIXED) - else: - return False - - def isEmpty(self): - if self._model: - return self._model[0] == expat.model.XML_CTYPE_EMPTY - else: - return False - - def isId(self, aname): - for info in self._attr_info: - if info[1] == aname: - return info[-2] == "ID" - return False - - def isIdNS(self, euri, ename, auri, aname): - # not sure this is meaningful - return self.isId((auri, aname)) - -def _intern(builder, s): - return builder._intern_setdefault(s, s) - -def _parse_ns_name(builder, name): - assert ' ' in name - parts = name.split(' ') - intern = builder._intern_setdefault - if len(parts) == 3: - uri, localname, prefix = parts - prefix = intern(prefix, prefix) - qname = "%s:%s" % (prefix, localname) - qname = intern(qname, qname) - localname = intern(localname, localname) - elif len(parts) == 2: - uri, localname = parts - prefix = EMPTY_PREFIX - qname = localname = intern(localname, localname) - else: - raise ValueError("Unsupported syntax: spaces in URIs not supported: %r" % name) - return intern(uri, uri), localname, prefix, qname - - -class ExpatBuilder: - """Document builder that uses Expat to build a ParsedXML.DOM document - instance.""" - - def __init__(self, options=None): - if options is None: - options = xmlbuilder.Options() - self._options = options - if self._options.filter is not None: - self._filter = FilterVisibilityController(self._options.filter) - else: - self._filter = None - # This *really* doesn't do anything in this case, so - # override it with something fast & minimal. - self._finish_start_element = id - self._parser = None - self.reset() - - def createParser(self): - """Create a new parser object.""" - return expat.ParserCreate() - - def getParser(self): - """Return the parser object, creating a new one if needed.""" - if not self._parser: - self._parser = self.createParser() - self._intern_setdefault = self._parser.intern.setdefault - self._parser.buffer_text = True - self._parser.ordered_attributes = True - self._parser.specified_attributes = True - self.install(self._parser) - return self._parser - - def reset(self): - """Free all data structures used during DOM construction.""" - self.document = theDOMImplementation.createDocument( - EMPTY_NAMESPACE, None, None) - self.curNode = self.document - self._elem_info = self.document._elem_info - self._cdata = False - - def install(self, parser): - """Install the callbacks needed to build the DOM into the parser.""" - # This creates circular references! - parser.StartDoctypeDeclHandler = self.start_doctype_decl_handler - parser.StartElementHandler = self.first_element_handler - parser.EndElementHandler = self.end_element_handler - parser.ProcessingInstructionHandler = self.pi_handler - if self._options.entities: - parser.EntityDeclHandler = self.entity_decl_handler - parser.NotationDeclHandler = self.notation_decl_handler - if self._options.comments: - parser.CommentHandler = self.comment_handler - if self._options.cdata_sections: - parser.StartCdataSectionHandler = self.start_cdata_section_handler - parser.EndCdataSectionHandler = self.end_cdata_section_handler - parser.CharacterDataHandler = self.character_data_handler_cdata - else: - parser.CharacterDataHandler = self.character_data_handler - parser.ExternalEntityRefHandler = self.external_entity_ref_handler - parser.XmlDeclHandler = self.xml_decl_handler - parser.ElementDeclHandler = self.element_decl_handler - parser.AttlistDeclHandler = self.attlist_decl_handler - - def parseFile(self, file): - """Parse a document from a file object, returning the document - node.""" - parser = self.getParser() - first_buffer = True - try: - while buffer := file.read(16*1024): - parser.Parse(buffer, False) - if first_buffer and self.document.documentElement: - self._setup_subset(buffer) - first_buffer = False - parser.Parse(b"", True) - except ParseEscape: - pass - doc = self.document - self.reset() - self._parser = None - return doc - - def parseString(self, string): - """Parse a document from a string, returning the document node.""" - parser = self.getParser() - try: - parser.Parse(string, True) - self._setup_subset(string) - except ParseEscape: - pass - doc = self.document - self.reset() - self._parser = None - return doc - - def _setup_subset(self, buffer): - """Load the internal subset if there might be one.""" - if self.document.doctype: - extractor = InternalSubsetExtractor() - extractor.parseString(buffer) - subset = extractor.getSubset() - self.document.doctype.internalSubset = subset - - def start_doctype_decl_handler(self, doctypeName, systemId, publicId, - has_internal_subset): - doctype = self.document.implementation.createDocumentType( - doctypeName, publicId, systemId) - doctype.ownerDocument = self.document - _append_child(self.document, doctype) - self.document.doctype = doctype - if self._filter and self._filter.acceptNode(doctype) == FILTER_REJECT: - self.document.doctype = None - del self.document.childNodes[-1] - doctype = None - self._parser.EntityDeclHandler = None - self._parser.NotationDeclHandler = None - if has_internal_subset: - if doctype is not None: - doctype.entities._seq = [] - doctype.notations._seq = [] - self._parser.CommentHandler = None - self._parser.ProcessingInstructionHandler = None - self._parser.EndDoctypeDeclHandler = self.end_doctype_decl_handler - - def end_doctype_decl_handler(self): - if self._options.comments: - self._parser.CommentHandler = self.comment_handler - self._parser.ProcessingInstructionHandler = self.pi_handler - if not (self._elem_info or self._filter): - self._finish_end_element = id - - def pi_handler(self, target, data): - node = self.document.createProcessingInstruction(target, data) - _append_child(self.curNode, node) - if self._filter and self._filter.acceptNode(node) == FILTER_REJECT: - self.curNode.removeChild(node) - - def character_data_handler_cdata(self, data): - childNodes = self.curNode.childNodes - if self._cdata: - if ( self._cdata_continue - and childNodes[-1].nodeType == CDATA_SECTION_NODE): - childNodes[-1].appendData(data) - return - node = self.document.createCDATASection(data) - self._cdata_continue = True - elif childNodes and childNodes[-1].nodeType == TEXT_NODE: - node = childNodes[-1] - value = node.data + data - node.data = value - return - else: - node = minidom.Text() - node.data = data - node.ownerDocument = self.document - _append_child(self.curNode, node) - - def character_data_handler(self, data): - childNodes = self.curNode.childNodes - if childNodes and childNodes[-1].nodeType == TEXT_NODE: - node = childNodes[-1] - node.data = node.data + data - return - node = minidom.Text() - node.data = node.data + data - node.ownerDocument = self.document - _append_child(self.curNode, node) - - def entity_decl_handler(self, entityName, is_parameter_entity, value, - base, systemId, publicId, notationName): - if is_parameter_entity: - # we don't care about parameter entities for the DOM - return - if not self._options.entities: - return - node = self.document._create_entity(entityName, publicId, - systemId, notationName) - if value is not None: - # internal entity - # node *should* be readonly, but we'll cheat - child = self.document.createTextNode(value) - node.childNodes.append(child) - self.document.doctype.entities._seq.append(node) - if self._filter and self._filter.acceptNode(node) == FILTER_REJECT: - del self.document.doctype.entities._seq[-1] - - def notation_decl_handler(self, notationName, base, systemId, publicId): - node = self.document._create_notation(notationName, publicId, systemId) - self.document.doctype.notations._seq.append(node) - if self._filter and self._filter.acceptNode(node) == FILTER_ACCEPT: - del self.document.doctype.notations._seq[-1] - - def comment_handler(self, data): - node = self.document.createComment(data) - _append_child(self.curNode, node) - if self._filter and self._filter.acceptNode(node) == FILTER_REJECT: - self.curNode.removeChild(node) - - def start_cdata_section_handler(self): - self._cdata = True - self._cdata_continue = False - - def end_cdata_section_handler(self): - self._cdata = False - self._cdata_continue = False - - def external_entity_ref_handler(self, context, base, systemId, publicId): - return 1 - - def first_element_handler(self, name, attributes): - if self._filter is None and not self._elem_info: - self._finish_end_element = id - self.getParser().StartElementHandler = self.start_element_handler - self.start_element_handler(name, attributes) - - def start_element_handler(self, name, attributes): - node = self.document.createElement(name) - _append_child(self.curNode, node) - self.curNode = node - - if attributes: - for i in range(0, len(attributes), 2): - a = minidom.Attr(attributes[i], EMPTY_NAMESPACE, - None, EMPTY_PREFIX) - value = attributes[i+1] - a.value = value - a.ownerDocument = self.document - _set_attribute_node(node, a) - - if node is not self.document.documentElement: - self._finish_start_element(node) - - def _finish_start_element(self, node): - if self._filter: - # To be general, we'd have to call isSameNode(), but this - # is sufficient for minidom: - if node is self.document.documentElement: - return - filt = self._filter.startContainer(node) - if filt == FILTER_REJECT: - # ignore this node & all descendents - Rejecter(self) - elif filt == FILTER_SKIP: - # ignore this node, but make it's children become - # children of the parent node - Skipper(self) - else: - return - self.curNode = node.parentNode - node.parentNode.removeChild(node) - node.unlink() - - # If this ever changes, Namespaces.end_element_handler() needs to - # be changed to match. - # - def end_element_handler(self, name): - curNode = self.curNode - self.curNode = curNode.parentNode - self._finish_end_element(curNode) - - def _finish_end_element(self, curNode): - info = self._elem_info.get(curNode.tagName) - if info: - self._handle_white_text_nodes(curNode, info) - if self._filter: - if curNode is self.document.documentElement: - return - if self._filter.acceptNode(curNode) == FILTER_REJECT: - self.curNode.removeChild(curNode) - curNode.unlink() - - def _handle_white_text_nodes(self, node, info): - if (self._options.whitespace_in_element_content - or not info.isElementContent()): - return - - # We have element type information and should remove ignorable - # whitespace; identify for text nodes which contain only - # whitespace. - L = [] - for child in node.childNodes: - if child.nodeType == TEXT_NODE and not child.data.strip(): - L.append(child) - - # Remove ignorable whitespace from the tree. - for child in L: - node.removeChild(child) - - def element_decl_handler(self, name, model): - info = self._elem_info.get(name) - if info is None: - self._elem_info[name] = ElementInfo(name, model) - else: - assert info._model is None - info._model = model - - def attlist_decl_handler(self, elem, name, type, default, required): - info = self._elem_info.get(elem) - if info is None: - info = ElementInfo(elem) - self._elem_info[elem] = info - info._attr_info.append( - [None, name, None, None, default, 0, type, required]) - - def xml_decl_handler(self, version, encoding, standalone): - self.document.version = version - self.document.encoding = encoding - # This is still a little ugly, thanks to the pyexpat API. ;-( - if standalone >= 0: - if standalone: - self.document.standalone = True - else: - self.document.standalone = False - - -# Don't include FILTER_INTERRUPT, since that's checked separately -# where allowed. -_ALLOWED_FILTER_RETURNS = (FILTER_ACCEPT, FILTER_REJECT, FILTER_SKIP) - -class FilterVisibilityController(object): - """Wrapper around a DOMBuilderFilter which implements the checks - to make the whatToShow filter attribute work.""" - - __slots__ = 'filter', - - def __init__(self, filter): - self.filter = filter - - def startContainer(self, node): - mask = self._nodetype_mask[node.nodeType] - if self.filter.whatToShow & mask: - val = self.filter.startContainer(node) - if val == FILTER_INTERRUPT: - raise ParseEscape - if val not in _ALLOWED_FILTER_RETURNS: - raise ValueError( - "startContainer() returned illegal value: " + repr(val)) - return val - else: - return FILTER_ACCEPT - - def acceptNode(self, node): - mask = self._nodetype_mask[node.nodeType] - if self.filter.whatToShow & mask: - val = self.filter.acceptNode(node) - if val == FILTER_INTERRUPT: - raise ParseEscape - if val == FILTER_SKIP: - # move all child nodes to the parent, and remove this node - parent = node.parentNode - for child in node.childNodes[:]: - parent.appendChild(child) - # node is handled by the caller - return FILTER_REJECT - if val not in _ALLOWED_FILTER_RETURNS: - raise ValueError( - "acceptNode() returned illegal value: " + repr(val)) - return val - else: - return FILTER_ACCEPT - - _nodetype_mask = { - Node.ELEMENT_NODE: NodeFilter.SHOW_ELEMENT, - Node.ATTRIBUTE_NODE: NodeFilter.SHOW_ATTRIBUTE, - Node.TEXT_NODE: NodeFilter.SHOW_TEXT, - Node.CDATA_SECTION_NODE: NodeFilter.SHOW_CDATA_SECTION, - Node.ENTITY_REFERENCE_NODE: NodeFilter.SHOW_ENTITY_REFERENCE, - Node.ENTITY_NODE: NodeFilter.SHOW_ENTITY, - Node.PROCESSING_INSTRUCTION_NODE: NodeFilter.SHOW_PROCESSING_INSTRUCTION, - Node.COMMENT_NODE: NodeFilter.SHOW_COMMENT, - Node.DOCUMENT_NODE: NodeFilter.SHOW_DOCUMENT, - Node.DOCUMENT_TYPE_NODE: NodeFilter.SHOW_DOCUMENT_TYPE, - Node.DOCUMENT_FRAGMENT_NODE: NodeFilter.SHOW_DOCUMENT_FRAGMENT, - Node.NOTATION_NODE: NodeFilter.SHOW_NOTATION, - } - - -class FilterCrutch(object): - __slots__ = '_builder', '_level', '_old_start', '_old_end' - - def __init__(self, builder): - self._level = 0 - self._builder = builder - parser = builder._parser - self._old_start = parser.StartElementHandler - self._old_end = parser.EndElementHandler - parser.StartElementHandler = self.start_element_handler - parser.EndElementHandler = self.end_element_handler - -class Rejecter(FilterCrutch): - __slots__ = () - - def __init__(self, builder): - FilterCrutch.__init__(self, builder) - parser = builder._parser - for name in ("ProcessingInstructionHandler", - "CommentHandler", - "CharacterDataHandler", - "StartCdataSectionHandler", - "EndCdataSectionHandler", - "ExternalEntityRefHandler", - ): - setattr(parser, name, None) - - def start_element_handler(self, *args): - self._level = self._level + 1 - - def end_element_handler(self, *args): - if self._level == 0: - # restore the old handlers - parser = self._builder._parser - self._builder.install(parser) - parser.StartElementHandler = self._old_start - parser.EndElementHandler = self._old_end - else: - self._level = self._level - 1 - -class Skipper(FilterCrutch): - __slots__ = () - - def start_element_handler(self, *args): - node = self._builder.curNode - self._old_start(*args) - if self._builder.curNode is not node: - self._level = self._level + 1 - - def end_element_handler(self, *args): - if self._level == 0: - # We're popping back out of the node we're skipping, so we - # shouldn't need to do anything but reset the handlers. - self._builder._parser.StartElementHandler = self._old_start - self._builder._parser.EndElementHandler = self._old_end - self._builder = None - else: - self._level = self._level - 1 - self._old_end(*args) - - -# framework document used by the fragment builder. -# Takes a string for the doctype, subset string, and namespace attrs string. - -_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID = \ - "http://xml.python.org/entities/fragment-builder/internal" - -_FRAGMENT_BUILDER_TEMPLATE = ( - '''\ -<!DOCTYPE wrapper - %%s [ - <!ENTITY fragment-builder-internal - SYSTEM "%s"> -%%s -]> -<wrapper %%s ->&fragment-builder-internal;</wrapper>''' - % _FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID) - - -class FragmentBuilder(ExpatBuilder): - """Builder which constructs document fragments given XML source - text and a context node. - - The context node is expected to provide information about the - namespace declarations which are in scope at the start of the - fragment. - """ - - def __init__(self, context, options=None): - if context.nodeType == DOCUMENT_NODE: - self.originalDocument = context - self.context = context - else: - self.originalDocument = context.ownerDocument - self.context = context - ExpatBuilder.__init__(self, options) - - def reset(self): - ExpatBuilder.reset(self) - self.fragment = None - - def parseFile(self, file): - """Parse a document fragment from a file object, returning the - fragment node.""" - return self.parseString(file.read()) - - def parseString(self, string): - """Parse a document fragment from a string, returning the - fragment node.""" - self._source = string - parser = self.getParser() - doctype = self.originalDocument.doctype - ident = "" - if doctype: - subset = doctype.internalSubset or self._getDeclarations() - if doctype.publicId: - ident = ('PUBLIC "%s" "%s"' - % (doctype.publicId, doctype.systemId)) - elif doctype.systemId: - ident = 'SYSTEM "%s"' % doctype.systemId - else: - subset = "" - nsattrs = self._getNSattrs() # get ns decls from node's ancestors - document = _FRAGMENT_BUILDER_TEMPLATE % (ident, subset, nsattrs) - try: - parser.Parse(document, True) - except: - self.reset() - raise - fragment = self.fragment - self.reset() -## self._parser = None - return fragment - - def _getDeclarations(self): - """Re-create the internal subset from the DocumentType node. - - This is only needed if we don't already have the - internalSubset as a string. - """ - doctype = self.context.ownerDocument.doctype - s = "" - if doctype: - for i in range(doctype.notations.length): - notation = doctype.notations.item(i) - if s: - s = s + "\n " - s = "%s<!NOTATION %s" % (s, notation.nodeName) - if notation.publicId: - s = '%s PUBLIC "%s"\n "%s">' \ - % (s, notation.publicId, notation.systemId) - else: - s = '%s SYSTEM "%s">' % (s, notation.systemId) - for i in range(doctype.entities.length): - entity = doctype.entities.item(i) - if s: - s = s + "\n " - s = "%s<!ENTITY %s" % (s, entity.nodeName) - if entity.publicId: - s = '%s PUBLIC "%s"\n "%s"' \ - % (s, entity.publicId, entity.systemId) - elif entity.systemId: - s = '%s SYSTEM "%s"' % (s, entity.systemId) - else: - s = '%s "%s"' % (s, entity.firstChild.data) - if entity.notationName: - s = "%s NOTATION %s" % (s, entity.notationName) - s = s + ">" - return s - - def _getNSattrs(self): - return "" - - def external_entity_ref_handler(self, context, base, systemId, publicId): - if systemId == _FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID: - # this entref is the one that we made to put the subtree - # in; all of our given input is parsed in here. - old_document = self.document - old_cur_node = self.curNode - parser = self._parser.ExternalEntityParserCreate(context) - # put the real document back, parse into the fragment to return - self.document = self.originalDocument - self.fragment = self.document.createDocumentFragment() - self.curNode = self.fragment - try: - parser.Parse(self._source, True) - finally: - self.curNode = old_cur_node - self.document = old_document - self._source = None - return -1 - else: - return ExpatBuilder.external_entity_ref_handler( - self, context, base, systemId, publicId) - - -class Namespaces: - """Mix-in class for builders; adds support for namespaces.""" - - def _initNamespaces(self): - # list of (prefix, uri) ns declarations. Namespace attrs are - # constructed from this and added to the element's attrs. - self._ns_ordered_prefixes = [] - - def createParser(self): - """Create a new namespace-handling parser.""" - parser = expat.ParserCreate(namespace_separator=" ") - parser.namespace_prefixes = True - return parser - - def install(self, parser): - """Insert the namespace-handlers onto the parser.""" - ExpatBuilder.install(self, parser) - if self._options.namespace_declarations: - parser.StartNamespaceDeclHandler = ( - self.start_namespace_decl_handler) - - def start_namespace_decl_handler(self, prefix, uri): - """Push this namespace declaration on our storage.""" - self._ns_ordered_prefixes.append((prefix, uri)) - - def start_element_handler(self, name, attributes): - if ' ' in name: - uri, localname, prefix, qname = _parse_ns_name(self, name) - else: - uri = EMPTY_NAMESPACE - qname = name - localname = None - prefix = EMPTY_PREFIX - node = minidom.Element(qname, uri, prefix, localname) - node.ownerDocument = self.document - _append_child(self.curNode, node) - self.curNode = node - - if self._ns_ordered_prefixes: - for prefix, uri in self._ns_ordered_prefixes: - if prefix: - a = minidom.Attr(_intern(self, 'xmlns:' + prefix), - XMLNS_NAMESPACE, prefix, "xmlns") - else: - a = minidom.Attr("xmlns", XMLNS_NAMESPACE, - "xmlns", EMPTY_PREFIX) - a.value = uri - a.ownerDocument = self.document - _set_attribute_node(node, a) - del self._ns_ordered_prefixes[:] - - if attributes: - node._ensure_attributes() - _attrs = node._attrs - _attrsNS = node._attrsNS - for i in range(0, len(attributes), 2): - aname = attributes[i] - value = attributes[i+1] - if ' ' in aname: - uri, localname, prefix, qname = _parse_ns_name(self, aname) - a = minidom.Attr(qname, uri, localname, prefix) - _attrs[qname] = a - _attrsNS[(uri, localname)] = a - else: - a = minidom.Attr(aname, EMPTY_NAMESPACE, - aname, EMPTY_PREFIX) - _attrs[aname] = a - _attrsNS[(EMPTY_NAMESPACE, aname)] = a - a.ownerDocument = self.document - a.value = value - a.ownerElement = node - - if __debug__: - # This only adds some asserts to the original - # end_element_handler(), so we only define this when -O is not - # used. If changing one, be sure to check the other to see if - # it needs to be changed as well. - # - def end_element_handler(self, name): - curNode = self.curNode - if ' ' in name: - uri, localname, prefix, qname = _parse_ns_name(self, name) - assert (curNode.namespaceURI == uri - and curNode.localName == localname - and curNode.prefix == prefix), \ - "element stack messed up! (namespace)" - else: - assert curNode.nodeName == name, \ - "element stack messed up - bad nodeName" - assert curNode.namespaceURI == EMPTY_NAMESPACE, \ - "element stack messed up - bad namespaceURI" - self.curNode = curNode.parentNode - self._finish_end_element(curNode) - - -class ExpatBuilderNS(Namespaces, ExpatBuilder): - """Document builder that supports namespaces.""" - - def reset(self): - ExpatBuilder.reset(self) - self._initNamespaces() - - -class FragmentBuilderNS(Namespaces, FragmentBuilder): - """Fragment builder that supports namespaces.""" - - def reset(self): - FragmentBuilder.reset(self) - self._initNamespaces() - - def _getNSattrs(self): - """Return string of namespace attributes from this element and - ancestors.""" - # XXX This needs to be re-written to walk the ancestors of the - # context to build up the namespace information from - # declarations, elements, and attributes found in context. - # Otherwise we have to store a bunch more data on the DOM - # (though that *might* be more reliable -- not clear). - attrs = "" - context = self.context - L = [] - while context: - if hasattr(context, '_ns_prefix_uri'): - for prefix, uri in context._ns_prefix_uri.items(): - # add every new NS decl from context to L and attrs string - if prefix in L: - continue - L.append(prefix) - if prefix: - declname = "xmlns:" + prefix - else: - declname = "xmlns" - if attrs: - attrs = "%s\n %s='%s'" % (attrs, declname, uri) - else: - attrs = " %s='%s'" % (declname, uri) - context = context.parentNode - return attrs - - -class ParseEscape(Exception): - """Exception raised to short-circuit parsing in InternalSubsetExtractor.""" - pass - -class InternalSubsetExtractor(ExpatBuilder): - """XML processor which can rip out the internal document type subset.""" - - subset = None - - def getSubset(self): - """Return the internal subset as a string.""" - return self.subset - - def parseFile(self, file): - try: - ExpatBuilder.parseFile(self, file) - except ParseEscape: - pass - - def parseString(self, string): - try: - ExpatBuilder.parseString(self, string) - except ParseEscape: - pass - - def install(self, parser): - parser.StartDoctypeDeclHandler = self.start_doctype_decl_handler - parser.StartElementHandler = self.start_element_handler - - def start_doctype_decl_handler(self, name, publicId, systemId, - has_internal_subset): - if has_internal_subset: - parser = self.getParser() - self.subset = [] - parser.DefaultHandler = self.subset.append - parser.EndDoctypeDeclHandler = self.end_doctype_decl_handler - else: - raise ParseEscape() - - def end_doctype_decl_handler(self): - s = ''.join(self.subset).replace('\r\n', '\n').replace('\r', '\n') - self.subset = s - raise ParseEscape() - - def start_element_handler(self, name, attrs): - raise ParseEscape() - - -def parse(file, namespaces=True): - """Parse a document, returning the resulting Document node. - - 'file' may be either a file name or an open file object. - """ - if namespaces: - builder = ExpatBuilderNS() - else: - builder = ExpatBuilder() - - if isinstance(file, str): - with open(file, 'rb') as fp: - result = builder.parseFile(fp) - else: - result = builder.parseFile(file) - return result - - -def parseString(string, namespaces=True): - """Parse a document from a string, returning the resulting - Document node. - """ - if namespaces: - builder = ExpatBuilderNS() - else: - builder = ExpatBuilder() - return builder.parseString(string) - - -def parseFragment(file, context, namespaces=True): - """Parse a fragment of a document, given the context from which it - was originally extracted. context should be the parent of the - node(s) which are in the fragment. - - 'file' may be either a file name or an open file object. - """ - if namespaces: - builder = FragmentBuilderNS(context) - else: - builder = FragmentBuilder(context) - - if isinstance(file, str): - with open(file, 'rb') as fp: - result = builder.parseFile(fp) - else: - result = builder.parseFile(file) - return result - - -def parseFragmentString(string, context, namespaces=True): - """Parse a fragment of a document from a string, given the context - from which it was originally extracted. context should be the - parent of the node(s) which are in the fragment. - """ - if namespaces: - builder = FragmentBuilderNS(context) - else: - builder = FragmentBuilder(context) - return builder.parseString(string) - - -def makeBuilder(options): - """Create a builder based on an Options object.""" - if options.namespaces: - return ExpatBuilderNS(options) - else: - return ExpatBuilder(options) diff --git a/Python314_4_x86_Template/Lib/xml/dom/minicompat.py b/Python314_4_x86_Template/Lib/xml/dom/minicompat.py deleted file mode 100644 index 5d6fae9a2..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/minicompat.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Python version compatibility support for minidom. - -This module contains internal implementation details and -should not be imported; use xml.dom.minidom instead. -""" - -# This module should only be imported using "import *". -# -# The following names are defined: -# -# NodeList -- lightest possible NodeList implementation -# -# EmptyNodeList -- lightest possible NodeList that is guaranteed to -# remain empty (immutable) -# -# StringTypes -- tuple of defined string types -# -# defproperty -- function used in conjunction with GetattrMagic; -# using these together is needed to make them work -# as efficiently as possible in both Python 2.2+ -# and older versions. For example: -# -# class MyClass(GetattrMagic): -# def _get_myattr(self): -# return something -# -# defproperty(MyClass, "myattr", -# "return some value") -# -# For Python 2.2 and newer, this will construct a -# property object on the class, which avoids -# needing to override __getattr__(). It will only -# work for read-only attributes. -# -# For older versions of Python, inheriting from -# GetattrMagic will use the traditional -# __getattr__() hackery to achieve the same effect, -# but less efficiently. -# -# defproperty() should be used for each version of -# the relevant _get_<property>() function. - -__all__ = ["NodeList", "EmptyNodeList", "StringTypes", "defproperty"] - -import xml.dom - -StringTypes = (str,) - - -class NodeList(list): - __slots__ = () - - def item(self, index): - if 0 <= index < len(self): - return self[index] - - def _get_length(self): - return len(self) - - def _set_length(self, value): - raise xml.dom.NoModificationAllowedErr( - "attempt to modify read-only attribute 'length'") - - length = property(_get_length, _set_length, - doc="The number of nodes in the NodeList.") - - # For backward compatibility - def __setstate__(self, state): - if state is None: - state = [] - self[:] = state - - -class EmptyNodeList(tuple): - __slots__ = () - - def __add__(self, other): - NL = NodeList() - NL.extend(other) - return NL - - def __radd__(self, other): - NL = NodeList() - NL.extend(other) - return NL - - def item(self, index): - return None - - def _get_length(self): - return 0 - - def _set_length(self, value): - raise xml.dom.NoModificationAllowedErr( - "attempt to modify read-only attribute 'length'") - - length = property(_get_length, _set_length, - doc="The number of nodes in the NodeList.") - - -def defproperty(klass, name, doc): - get = getattr(klass, ("_get_" + name)) - def set(self, value, name=name): - raise xml.dom.NoModificationAllowedErr( - "attempt to modify read-only attribute " + repr(name)) - assert not hasattr(klass, "_set_" + name), \ - "expected not to find _set_" + name - prop = property(get, set, doc=doc) - setattr(klass, name, prop) diff --git a/Python314_4_x86_Template/Lib/xml/dom/minidom.py b/Python314_4_x86_Template/Lib/xml/dom/minidom.py deleted file mode 100644 index 16b33b901..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/minidom.py +++ /dev/null @@ -1,2024 +0,0 @@ -"""Simple implementation of the Level 1 DOM. - -Namespaces and other minor Level 2 features are also supported. - -parse("foo.xml") - -parseString("<foo><bar/></foo>") - -Todo: -===== - * convenience methods for getting elements and text. - * more testing - * bring some of the writer and linearizer code into conformance with this - interface - * SAX 2 namespaces -""" - -import io -import xml.dom - -from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE, domreg -from xml.dom.minicompat import * -from xml.dom.xmlbuilder import DOMImplementationLS, DocumentLS - -# This is used by the ID-cache invalidation checks; the list isn't -# actually complete, since the nodes being checked will never be the -# DOCUMENT_NODE or DOCUMENT_FRAGMENT_NODE. (The node being checked is -# the node being added or removed, not the node being modified.) -# -_nodeTypes_with_children = (xml.dom.Node.ELEMENT_NODE, - xml.dom.Node.ENTITY_REFERENCE_NODE) - - -class Node(xml.dom.Node): - namespaceURI = None # this is non-null only for elements and attributes - parentNode = None - ownerDocument = None - nextSibling = None - previousSibling = None - - prefix = EMPTY_PREFIX # non-null only for NS elements and attributes - - def __bool__(self): - return True - - def toxml(self, encoding=None, standalone=None): - return self.toprettyxml("", "", encoding, standalone) - - def toprettyxml(self, indent="\t", newl="\n", encoding=None, - standalone=None): - if encoding is None: - writer = io.StringIO() - else: - writer = io.TextIOWrapper(io.BytesIO(), - encoding=encoding, - errors="xmlcharrefreplace", - newline='\n') - if self.nodeType == Node.DOCUMENT_NODE: - # Can pass encoding only to document, to put it into XML header - self.writexml(writer, "", indent, newl, encoding, standalone) - else: - self.writexml(writer, "", indent, newl) - if encoding is None: - return writer.getvalue() - else: - return writer.detach().getvalue() - - def hasChildNodes(self): - return bool(self.childNodes) - - def _get_childNodes(self): - return self.childNodes - - def _get_firstChild(self): - if self.childNodes: - return self.childNodes[0] - - def _get_lastChild(self): - if self.childNodes: - return self.childNodes[-1] - - def insertBefore(self, newChild, refChild): - if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE: - for c in tuple(newChild.childNodes): - self.insertBefore(c, refChild) - ### The DOM does not clearly specify what to return in this case - return newChild - if newChild.nodeType not in self._child_node_types: - raise xml.dom.HierarchyRequestErr( - "%s cannot be child of %s" % (repr(newChild), repr(self))) - if newChild.parentNode is not None: - newChild.parentNode.removeChild(newChild) - if refChild is None: - self.appendChild(newChild) - else: - try: - index = self.childNodes.index(refChild) - except ValueError: - raise xml.dom.NotFoundErr() - if newChild.nodeType in _nodeTypes_with_children: - _clear_id_cache(self) - self.childNodes.insert(index, newChild) - newChild.nextSibling = refChild - refChild.previousSibling = newChild - if index: - node = self.childNodes[index-1] - node.nextSibling = newChild - newChild.previousSibling = node - else: - newChild.previousSibling = None - newChild.parentNode = self - return newChild - - def appendChild(self, node): - if node.nodeType == self.DOCUMENT_FRAGMENT_NODE: - for c in tuple(node.childNodes): - self.appendChild(c) - ### The DOM does not clearly specify what to return in this case - return node - if node.nodeType not in self._child_node_types: - raise xml.dom.HierarchyRequestErr( - "%s cannot be child of %s" % (repr(node), repr(self))) - elif node.nodeType in _nodeTypes_with_children: - _clear_id_cache(self) - if node.parentNode is not None: - node.parentNode.removeChild(node) - _append_child(self, node) - node.nextSibling = None - return node - - def replaceChild(self, newChild, oldChild): - if newChild.nodeType == self.DOCUMENT_FRAGMENT_NODE: - refChild = oldChild.nextSibling - self.removeChild(oldChild) - return self.insertBefore(newChild, refChild) - if newChild.nodeType not in self._child_node_types: - raise xml.dom.HierarchyRequestErr( - "%s cannot be child of %s" % (repr(newChild), repr(self))) - if newChild is oldChild: - return - if newChild.parentNode is not None: - newChild.parentNode.removeChild(newChild) - try: - index = self.childNodes.index(oldChild) - except ValueError: - raise xml.dom.NotFoundErr() - self.childNodes[index] = newChild - newChild.parentNode = self - oldChild.parentNode = None - if (newChild.nodeType in _nodeTypes_with_children - or oldChild.nodeType in _nodeTypes_with_children): - _clear_id_cache(self) - newChild.nextSibling = oldChild.nextSibling - newChild.previousSibling = oldChild.previousSibling - oldChild.nextSibling = None - oldChild.previousSibling = None - if newChild.previousSibling: - newChild.previousSibling.nextSibling = newChild - if newChild.nextSibling: - newChild.nextSibling.previousSibling = newChild - return oldChild - - def removeChild(self, oldChild): - try: - self.childNodes.remove(oldChild) - except ValueError: - raise xml.dom.NotFoundErr() - if oldChild.nextSibling is not None: - oldChild.nextSibling.previousSibling = oldChild.previousSibling - if oldChild.previousSibling is not None: - oldChild.previousSibling.nextSibling = oldChild.nextSibling - oldChild.nextSibling = oldChild.previousSibling = None - if oldChild.nodeType in _nodeTypes_with_children: - _clear_id_cache(self) - - oldChild.parentNode = None - return oldChild - - def normalize(self): - L = [] - for child in self.childNodes: - if child.nodeType == Node.TEXT_NODE: - if not child.data: - # empty text node; discard - if L: - L[-1].nextSibling = child.nextSibling - if child.nextSibling: - child.nextSibling.previousSibling = child.previousSibling - child.unlink() - elif L and L[-1].nodeType == child.nodeType: - # collapse text node - node = L[-1] - node.data = node.data + child.data - node.nextSibling = child.nextSibling - if child.nextSibling: - child.nextSibling.previousSibling = node - child.unlink() - else: - L.append(child) - else: - L.append(child) - if child.nodeType == Node.ELEMENT_NODE: - child.normalize() - self.childNodes[:] = L - - def cloneNode(self, deep): - return _clone_node(self, deep, self.ownerDocument or self) - - def isSupported(self, feature, version): - return self.ownerDocument.implementation.hasFeature(feature, version) - - def _get_localName(self): - # Overridden in Element and Attr where localName can be Non-Null - return None - - # Node interfaces from Level 3 (WD 9 April 2002) - - def isSameNode(self, other): - return self is other - - def getInterface(self, feature): - if self.isSupported(feature, None): - return self - else: - return None - - # The "user data" functions use a dictionary that is only present - # if some user data has been set, so be careful not to assume it - # exists. - - def getUserData(self, key): - try: - return self._user_data[key][0] - except (AttributeError, KeyError): - return None - - def setUserData(self, key, data, handler): - old = None - try: - d = self._user_data - except AttributeError: - d = {} - self._user_data = d - if key in d: - old = d[key][0] - if data is None: - # ignore handlers passed for None - handler = None - if old is not None: - del d[key] - else: - d[key] = (data, handler) - return old - - def _call_user_data_handler(self, operation, src, dst): - if hasattr(self, "_user_data"): - for key, (data, handler) in list(self._user_data.items()): - if handler is not None: - handler.handle(operation, key, data, src, dst) - - # minidom-specific API: - - def unlink(self): - self.parentNode = self.ownerDocument = None - if self.childNodes: - for child in self.childNodes: - child.unlink() - self.childNodes = NodeList() - self.previousSibling = None - self.nextSibling = None - - # A Node is its own context manager, to ensure that an unlink() call occurs. - # This is similar to how a file object works. - def __enter__(self): - return self - - def __exit__(self, et, ev, tb): - self.unlink() - -defproperty(Node, "firstChild", doc="First child node, or None.") -defproperty(Node, "lastChild", doc="Last child node, or None.") -defproperty(Node, "localName", doc="Namespace-local name of this node.") - - -def _append_child(self, node): - # fast path with less checks; usable by DOM builders if careful - childNodes = self.childNodes - if childNodes: - last = childNodes[-1] - node.previousSibling = last - last.nextSibling = node - childNodes.append(node) - node.parentNode = self - - -def _write_data(writer, text, attr): - "Writes datachars to writer." - if not text: - return - # See the comments in ElementTree.py for behavior and - # implementation details. - if "&" in text: - text = text.replace("&", "&amp;") - if "<" in text: - text = text.replace("<", "&lt;") - if ">" in text: - text = text.replace(">", "&gt;") - if attr: - if '"' in text: - text = text.replace('"', "&quot;") - if "\r" in text: - text = text.replace("\r", "&#13;") - if "\n" in text: - text = text.replace("\n", "&#10;") - if "\t" in text: - text = text.replace("\t", "&#9;") - writer.write(text) - -def _get_elements_by_tagName_helper(parent, name, rc): - for node in parent.childNodes: - if node.nodeType == Node.ELEMENT_NODE and \ - (name == "*" or node.tagName == name): - rc.append(node) - _get_elements_by_tagName_helper(node, name, rc) - return rc - -def _get_elements_by_tagName_ns_helper(parent, nsURI, localName, rc): - for node in parent.childNodes: - if node.nodeType == Node.ELEMENT_NODE: - if ((localName == "*" or node.localName == localName) and - (nsURI == "*" or node.namespaceURI == nsURI)): - rc.append(node) - _get_elements_by_tagName_ns_helper(node, nsURI, localName, rc) - return rc - -class DocumentFragment(Node): - nodeType = Node.DOCUMENT_FRAGMENT_NODE - nodeName = "#document-fragment" - nodeValue = None - attributes = None - parentNode = None - _child_node_types = (Node.ELEMENT_NODE, - Node.TEXT_NODE, - Node.CDATA_SECTION_NODE, - Node.ENTITY_REFERENCE_NODE, - Node.PROCESSING_INSTRUCTION_NODE, - Node.COMMENT_NODE, - Node.NOTATION_NODE) - - def __init__(self): - self.childNodes = NodeList() - - -class Attr(Node): - __slots__=('_name', '_value', 'namespaceURI', - '_prefix', 'childNodes', '_localName', 'ownerDocument', 'ownerElement') - nodeType = Node.ATTRIBUTE_NODE - attributes = None - specified = False - _is_id = False - - _child_node_types = (Node.TEXT_NODE, Node.ENTITY_REFERENCE_NODE) - - def __init__(self, qName, namespaceURI=EMPTY_NAMESPACE, localName=None, - prefix=None): - self.ownerElement = None - self.ownerDocument = None - self._name = qName - self.namespaceURI = namespaceURI - self._prefix = prefix - if localName is not None: - self._localName = localName - self.childNodes = NodeList() - - # Add the single child node that represents the value of the attr - self.childNodes.append(Text()) - - # nodeValue and value are set elsewhere - - def _get_localName(self): - try: - return self._localName - except AttributeError: - return self.nodeName.split(":", 1)[-1] - - def _get_specified(self): - return self.specified - - def _get_name(self): - return self._name - - def _set_name(self, value): - self._name = value - if self.ownerElement is not None: - _clear_id_cache(self.ownerElement) - - nodeName = name = property(_get_name, _set_name) - - def _get_value(self): - return self._value - - def _set_value(self, value): - self._value = value - self.childNodes[0].data = value - if self.ownerElement is not None: - _clear_id_cache(self.ownerElement) - self.childNodes[0].data = value - - nodeValue = value = property(_get_value, _set_value) - - def _get_prefix(self): - return self._prefix - - def _set_prefix(self, prefix): - nsuri = self.namespaceURI - if prefix == "xmlns": - if nsuri and nsuri != XMLNS_NAMESPACE: - raise xml.dom.NamespaceErr( - "illegal use of 'xmlns' prefix for the wrong namespace") - self._prefix = prefix - if prefix is None: - newName = self.localName - else: - newName = "%s:%s" % (prefix, self.localName) - if self.ownerElement: - _clear_id_cache(self.ownerElement) - self.name = newName - - prefix = property(_get_prefix, _set_prefix) - - def unlink(self): - # This implementation does not call the base implementation - # since most of that is not needed, and the expense of the - # method call is not warranted. We duplicate the removal of - # children, but that's all we needed from the base class. - elem = self.ownerElement - if elem is not None: - del elem._attrs[self.nodeName] - del elem._attrsNS[(self.namespaceURI, self.localName)] - if self._is_id: - self._is_id = False - elem._magic_id_nodes -= 1 - self.ownerDocument._magic_id_count -= 1 - for child in self.childNodes: - child.unlink() - del self.childNodes[:] - - def _get_isId(self): - if self._is_id: - return True - doc = self.ownerDocument - elem = self.ownerElement - if doc is None or elem is None: - return False - - info = doc._get_elem_info(elem) - if info is None: - return False - if self.namespaceURI: - return info.isIdNS(self.namespaceURI, self.localName) - else: - return info.isId(self.nodeName) - - def _get_schemaType(self): - doc = self.ownerDocument - elem = self.ownerElement - if doc is None or elem is None: - return _no_type - - info = doc._get_elem_info(elem) - if info is None: - return _no_type - if self.namespaceURI: - return info.getAttributeTypeNS(self.namespaceURI, self.localName) - else: - return info.getAttributeType(self.nodeName) - -defproperty(Attr, "isId", doc="True if this attribute is an ID.") -defproperty(Attr, "localName", doc="Namespace-local name of this attribute.") -defproperty(Attr, "schemaType", doc="Schema type for this attribute.") - - -class NamedNodeMap(object): - """The attribute list is a transient interface to the underlying - dictionaries. Mutations here will change the underlying element's - dictionary. - - Ordering is imposed artificially and does not reflect the order of - attributes as found in an input document. - """ - - __slots__ = ('_attrs', '_attrsNS', '_ownerElement') - - def __init__(self, attrs, attrsNS, ownerElement): - self._attrs = attrs - self._attrsNS = attrsNS - self._ownerElement = ownerElement - - def _get_length(self): - return len(self._attrs) - - def item(self, index): - try: - return self[list(self._attrs.keys())[index]] - except IndexError: - return None - - def items(self): - L = [] - for node in self._attrs.values(): - L.append((node.nodeName, node.value)) - return L - - def itemsNS(self): - L = [] - for node in self._attrs.values(): - L.append(((node.namespaceURI, node.localName), node.value)) - return L - - def __contains__(self, key): - if isinstance(key, str): - return key in self._attrs - else: - return key in self._attrsNS - - def keys(self): - return self._attrs.keys() - - def keysNS(self): - return self._attrsNS.keys() - - def values(self): - return self._attrs.values() - - def get(self, name, value=None): - return self._attrs.get(name, value) - - __len__ = _get_length - - def _cmp(self, other): - if self._attrs is getattr(other, "_attrs", None): - return 0 - else: - return (id(self) > id(other)) - (id(self) < id(other)) - - def __eq__(self, other): - return self._cmp(other) == 0 - - def __ge__(self, other): - return self._cmp(other) >= 0 - - def __gt__(self, other): - return self._cmp(other) > 0 - - def __le__(self, other): - return self._cmp(other) <= 0 - - def __lt__(self, other): - return self._cmp(other) < 0 - - def __getitem__(self, attname_or_tuple): - if isinstance(attname_or_tuple, tuple): - return self._attrsNS[attname_or_tuple] - else: - return self._attrs[attname_or_tuple] - - # same as set - def __setitem__(self, attname, value): - if isinstance(value, str): - try: - node = self._attrs[attname] - except KeyError: - node = Attr(attname) - node.ownerDocument = self._ownerElement.ownerDocument - self.setNamedItem(node) - node.value = value - else: - if not isinstance(value, Attr): - raise TypeError("value must be a string or Attr object") - node = value - self.setNamedItem(node) - - def getNamedItem(self, name): - try: - return self._attrs[name] - except KeyError: - return None - - def getNamedItemNS(self, namespaceURI, localName): - try: - return self._attrsNS[(namespaceURI, localName)] - except KeyError: - return None - - def removeNamedItem(self, name): - n = self.getNamedItem(name) - if n is not None: - _clear_id_cache(self._ownerElement) - del self._attrs[n.nodeName] - del self._attrsNS[(n.namespaceURI, n.localName)] - if hasattr(n, 'ownerElement'): - n.ownerElement = None - return n - else: - raise xml.dom.NotFoundErr() - - def removeNamedItemNS(self, namespaceURI, localName): - n = self.getNamedItemNS(namespaceURI, localName) - if n is not None: - _clear_id_cache(self._ownerElement) - del self._attrsNS[(n.namespaceURI, n.localName)] - del self._attrs[n.nodeName] - if hasattr(n, 'ownerElement'): - n.ownerElement = None - return n - else: - raise xml.dom.NotFoundErr() - - def setNamedItem(self, node): - if not isinstance(node, Attr): - raise xml.dom.HierarchyRequestErr( - "%s cannot be child of %s" % (repr(node), repr(self))) - old = self._attrs.get(node.name) - if old: - old.unlink() - self._attrs[node.name] = node - self._attrsNS[(node.namespaceURI, node.localName)] = node - node.ownerElement = self._ownerElement - _clear_id_cache(node.ownerElement) - return old - - def setNamedItemNS(self, node): - return self.setNamedItem(node) - - def __delitem__(self, attname_or_tuple): - node = self[attname_or_tuple] - _clear_id_cache(node.ownerElement) - node.unlink() - - def __getstate__(self): - return self._attrs, self._attrsNS, self._ownerElement - - def __setstate__(self, state): - self._attrs, self._attrsNS, self._ownerElement = state - -defproperty(NamedNodeMap, "length", - doc="Number of nodes in the NamedNodeMap.") - -AttributeList = NamedNodeMap - - -class TypeInfo(object): - __slots__ = 'namespace', 'name' - - def __init__(self, namespace, name): - self.namespace = namespace - self.name = name - - def __repr__(self): - if self.namespace: - return "<%s %r (from %r)>" % (self.__class__.__name__, self.name, - self.namespace) - else: - return "<%s %r>" % (self.__class__.__name__, self.name) - - def _get_name(self): - return self.name - - def _get_namespace(self): - return self.namespace - -_no_type = TypeInfo(None, None) - -class Element(Node): - __slots__=('ownerDocument', 'parentNode', 'tagName', 'nodeName', 'prefix', - 'namespaceURI', '_localName', 'childNodes', '_attrs', '_attrsNS', - 'nextSibling', 'previousSibling') - nodeType = Node.ELEMENT_NODE - nodeValue = None - schemaType = _no_type - - _magic_id_nodes = 0 - - _child_node_types = (Node.ELEMENT_NODE, - Node.PROCESSING_INSTRUCTION_NODE, - Node.COMMENT_NODE, - Node.TEXT_NODE, - Node.CDATA_SECTION_NODE, - Node.ENTITY_REFERENCE_NODE) - - def __init__(self, tagName, namespaceURI=EMPTY_NAMESPACE, prefix=None, - localName=None): - self.ownerDocument = None - self.parentNode = None - self.tagName = self.nodeName = tagName - self.prefix = prefix - self.namespaceURI = namespaceURI - self.childNodes = NodeList() - self.nextSibling = self.previousSibling = None - - # Attribute dictionaries are lazily created - # attributes are double-indexed: - # tagName -> Attribute - # URI,localName -> Attribute - # in the future: consider lazy generation - # of attribute objects this is too tricky - # for now because of headaches with - # namespaces. - self._attrs = None - self._attrsNS = None - - def _ensure_attributes(self): - if self._attrs is None: - self._attrs = {} - self._attrsNS = {} - - def _get_localName(self): - try: - return self._localName - except AttributeError: - return self.tagName.split(":", 1)[-1] - - def _get_tagName(self): - return self.tagName - - def unlink(self): - if self._attrs is not None: - for attr in list(self._attrs.values()): - attr.unlink() - self._attrs = None - self._attrsNS = None - Node.unlink(self) - - def getAttribute(self, attname): - """Returns the value of the specified attribute. - - Returns the value of the element's attribute named attname as - a string. An empty string is returned if the element does not - have such an attribute. Note that an empty string may also be - returned as an explicitly given attribute value, use the - hasAttribute method to distinguish these two cases. - """ - if self._attrs is None: - return "" - try: - return self._attrs[attname].value - except KeyError: - return "" - - def getAttributeNS(self, namespaceURI, localName): - if self._attrsNS is None: - return "" - try: - return self._attrsNS[(namespaceURI, localName)].value - except KeyError: - return "" - - def setAttribute(self, attname, value): - attr = self.getAttributeNode(attname) - if attr is None: - attr = Attr(attname) - attr.value = value # also sets nodeValue - attr.ownerDocument = self.ownerDocument - self.setAttributeNode(attr) - elif value != attr.value: - attr.value = value - if attr.isId: - _clear_id_cache(self) - - def setAttributeNS(self, namespaceURI, qualifiedName, value): - prefix, localname = _nssplit(qualifiedName) - attr = self.getAttributeNodeNS(namespaceURI, localname) - if attr is None: - attr = Attr(qualifiedName, namespaceURI, localname, prefix) - attr.value = value - attr.ownerDocument = self.ownerDocument - self.setAttributeNode(attr) - else: - if value != attr.value: - attr.value = value - if attr.isId: - _clear_id_cache(self) - if attr.prefix != prefix: - attr.prefix = prefix - attr.nodeName = qualifiedName - - def getAttributeNode(self, attrname): - if self._attrs is None: - return None - return self._attrs.get(attrname) - - def getAttributeNodeNS(self, namespaceURI, localName): - if self._attrsNS is None: - return None - return self._attrsNS.get((namespaceURI, localName)) - - def setAttributeNode(self, attr): - if attr.ownerElement not in (None, self): - raise xml.dom.InuseAttributeErr("attribute node already owned") - self._ensure_attributes() - old1 = self._attrs.get(attr.name, None) - if old1 is not None: - self.removeAttributeNode(old1) - old2 = self._attrsNS.get((attr.namespaceURI, attr.localName), None) - if old2 is not None and old2 is not old1: - self.removeAttributeNode(old2) - _set_attribute_node(self, attr) - - if old1 is not attr: - # It might have already been part of this node, in which case - # it doesn't represent a change, and should not be returned. - return old1 - if old2 is not attr: - return old2 - - setAttributeNodeNS = setAttributeNode - - def removeAttribute(self, name): - if self._attrsNS is None: - raise xml.dom.NotFoundErr() - try: - attr = self._attrs[name] - except KeyError: - raise xml.dom.NotFoundErr() - self.removeAttributeNode(attr) - - def removeAttributeNS(self, namespaceURI, localName): - if self._attrsNS is None: - raise xml.dom.NotFoundErr() - try: - attr = self._attrsNS[(namespaceURI, localName)] - except KeyError: - raise xml.dom.NotFoundErr() - self.removeAttributeNode(attr) - - def removeAttributeNode(self, node): - if node is None: - raise xml.dom.NotFoundErr() - try: - self._attrs[node.name] - except KeyError: - raise xml.dom.NotFoundErr() - _clear_id_cache(self) - node.unlink() - # Restore this since the node is still useful and otherwise - # unlinked - node.ownerDocument = self.ownerDocument - return node - - removeAttributeNodeNS = removeAttributeNode - - def hasAttribute(self, name): - """Checks whether the element has an attribute with the specified name. - - Returns True if the element has an attribute with the specified name. - Otherwise, returns False. - """ - if self._attrs is None: - return False - return name in self._attrs - - def hasAttributeNS(self, namespaceURI, localName): - if self._attrsNS is None: - return False - return (namespaceURI, localName) in self._attrsNS - - def getElementsByTagName(self, name): - """Returns all descendant elements with the given tag name. - - Returns the list of all descendant elements (not direct children - only) with the specified tag name. - """ - return _get_elements_by_tagName_helper(self, name, NodeList()) - - def getElementsByTagNameNS(self, namespaceURI, localName): - return _get_elements_by_tagName_ns_helper( - self, namespaceURI, localName, NodeList()) - - def __repr__(self): - return "<DOM Element: %s at %#x>" % (self.tagName, id(self)) - - def writexml(self, writer, indent="", addindent="", newl=""): - """Write an XML element to a file-like object - - Write the element to the writer object that must provide - a write method (e.g. a file or StringIO object). - """ - # indent = current indentation - # addindent = indentation to add to higher levels - # newl = newline string - writer.write(indent+"<" + self.tagName) - - attrs = self._get_attributes() - - for a_name in attrs.keys(): - writer.write(" %s=\"" % a_name) - _write_data(writer, attrs[a_name].value, True) - writer.write("\"") - if self.childNodes: - writer.write(">") - if (len(self.childNodes) == 1 and - self.childNodes[0].nodeType in ( - Node.TEXT_NODE, Node.CDATA_SECTION_NODE)): - self.childNodes[0].writexml(writer, '', '', '') - else: - writer.write(newl) - for node in self.childNodes: - node.writexml(writer, indent+addindent, addindent, newl) - writer.write(indent) - writer.write("</%s>%s" % (self.tagName, newl)) - else: - writer.write("/>%s"%(newl)) - - def _get_attributes(self): - self._ensure_attributes() - return NamedNodeMap(self._attrs, self._attrsNS, self) - - def hasAttributes(self): - if self._attrs: - return True - else: - return False - - # DOM Level 3 attributes, based on the 22 Oct 2002 draft - - def setIdAttribute(self, name): - idAttr = self.getAttributeNode(name) - self.setIdAttributeNode(idAttr) - - def setIdAttributeNS(self, namespaceURI, localName): - idAttr = self.getAttributeNodeNS(namespaceURI, localName) - self.setIdAttributeNode(idAttr) - - def setIdAttributeNode(self, idAttr): - if idAttr is None or not self.isSameNode(idAttr.ownerElement): - raise xml.dom.NotFoundErr() - if _get_containing_entref(self) is not None: - raise xml.dom.NoModificationAllowedErr() - if not idAttr._is_id: - idAttr._is_id = True - self._magic_id_nodes += 1 - self.ownerDocument._magic_id_count += 1 - _clear_id_cache(self) - -defproperty(Element, "attributes", - doc="NamedNodeMap of attributes on the element.") -defproperty(Element, "localName", - doc="Namespace-local name of this element.") - - -def _set_attribute_node(element, attr): - _clear_id_cache(element) - element._ensure_attributes() - element._attrs[attr.name] = attr - element._attrsNS[(attr.namespaceURI, attr.localName)] = attr - - # This creates a circular reference, but Element.unlink() - # breaks the cycle since the references to the attribute - # dictionaries are tossed. - attr.ownerElement = element - -class Childless: - """Mixin that makes childless-ness easy to implement and avoids - the complexity of the Node methods that deal with children. - """ - __slots__ = () - - attributes = None - childNodes = EmptyNodeList() - firstChild = None - lastChild = None - - def _get_firstChild(self): - return None - - def _get_lastChild(self): - return None - - def appendChild(self, node): - raise xml.dom.HierarchyRequestErr( - self.nodeName + " nodes cannot have children") - - def hasChildNodes(self): - return False - - def insertBefore(self, newChild, refChild): - raise xml.dom.HierarchyRequestErr( - self.nodeName + " nodes do not have children") - - def removeChild(self, oldChild): - raise xml.dom.NotFoundErr( - self.nodeName + " nodes do not have children") - - def normalize(self): - # For childless nodes, normalize() has nothing to do. - pass - - def replaceChild(self, newChild, oldChild): - raise xml.dom.HierarchyRequestErr( - self.nodeName + " nodes do not have children") - - -class ProcessingInstruction(Childless, Node): - nodeType = Node.PROCESSING_INSTRUCTION_NODE - __slots__ = ('target', 'data') - - def __init__(self, target, data): - self.target = target - self.data = data - - # nodeValue is an alias for data - def _get_nodeValue(self): - return self.data - def _set_nodeValue(self, value): - self.data = value - nodeValue = property(_get_nodeValue, _set_nodeValue) - - # nodeName is an alias for target - def _get_nodeName(self): - return self.target - def _set_nodeName(self, value): - self.target = value - nodeName = property(_get_nodeName, _set_nodeName) - - def writexml(self, writer, indent="", addindent="", newl=""): - writer.write("%s<?%s %s?>%s" % (indent,self.target, self.data, newl)) - - -class CharacterData(Childless, Node): - __slots__=('_data', 'ownerDocument','parentNode', 'previousSibling', 'nextSibling') - - def __init__(self): - self.ownerDocument = self.parentNode = None - self.previousSibling = self.nextSibling = None - self._data = '' - Node.__init__(self) - - def _get_length(self): - return len(self.data) - __len__ = _get_length - - def _get_data(self): - return self._data - def _set_data(self, data): - self._data = data - - data = nodeValue = property(_get_data, _set_data) - - def __repr__(self): - data = self.data - if len(data) > 10: - dotdotdot = "..." - else: - dotdotdot = "" - return '<DOM %s node "%r%s">' % ( - self.__class__.__name__, data[0:10], dotdotdot) - - def substringData(self, offset, count): - if offset < 0: - raise xml.dom.IndexSizeErr("offset cannot be negative") - if offset >= len(self.data): - raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") - if count < 0: - raise xml.dom.IndexSizeErr("count cannot be negative") - return self.data[offset:offset+count] - - def appendData(self, arg): - self.data = self.data + arg - - def insertData(self, offset, arg): - if offset < 0: - raise xml.dom.IndexSizeErr("offset cannot be negative") - if offset >= len(self.data): - raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") - if arg: - self.data = "%s%s%s" % ( - self.data[:offset], arg, self.data[offset:]) - - def deleteData(self, offset, count): - if offset < 0: - raise xml.dom.IndexSizeErr("offset cannot be negative") - if offset >= len(self.data): - raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") - if count < 0: - raise xml.dom.IndexSizeErr("count cannot be negative") - if count: - self.data = self.data[:offset] + self.data[offset+count:] - - def replaceData(self, offset, count, arg): - if offset < 0: - raise xml.dom.IndexSizeErr("offset cannot be negative") - if offset >= len(self.data): - raise xml.dom.IndexSizeErr("offset cannot be beyond end of data") - if count < 0: - raise xml.dom.IndexSizeErr("count cannot be negative") - if count: - self.data = "%s%s%s" % ( - self.data[:offset], arg, self.data[offset+count:]) - -defproperty(CharacterData, "length", doc="Length of the string data.") - - -class Text(CharacterData): - __slots__ = () - - nodeType = Node.TEXT_NODE - nodeName = "#text" - attributes = None - - def splitText(self, offset): - if offset < 0 or offset > len(self.data): - raise xml.dom.IndexSizeErr("illegal offset value") - newText = self.__class__() - newText.data = self.data[offset:] - newText.ownerDocument = self.ownerDocument - next = self.nextSibling - if self.parentNode and self in self.parentNode.childNodes: - if next is None: - self.parentNode.appendChild(newText) - else: - self.parentNode.insertBefore(newText, next) - self.data = self.data[:offset] - return newText - - def writexml(self, writer, indent="", addindent="", newl=""): - _write_data(writer, "%s%s%s" % (indent, self.data, newl), False) - - # DOM Level 3 (WD 9 April 2002) - - def _get_wholeText(self): - L = [self.data] - n = self.previousSibling - while n is not None: - if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): - L.insert(0, n.data) - n = n.previousSibling - else: - break - n = self.nextSibling - while n is not None: - if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): - L.append(n.data) - n = n.nextSibling - else: - break - return ''.join(L) - - def replaceWholeText(self, content): - # XXX This needs to be seriously changed if minidom ever - # supports EntityReference nodes. - parent = self.parentNode - n = self.previousSibling - while n is not None: - if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): - next = n.previousSibling - parent.removeChild(n) - n = next - else: - break - n = self.nextSibling - if not content: - parent.removeChild(self) - while n is not None: - if n.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): - next = n.nextSibling - parent.removeChild(n) - n = next - else: - break - if content: - self.data = content - return self - else: - return None - - def _get_isWhitespaceInElementContent(self): - if self.data.strip(): - return False - elem = _get_containing_element(self) - if elem is None: - return False - info = self.ownerDocument._get_elem_info(elem) - if info is None: - return False - else: - return info.isElementContent() - -defproperty(Text, "isWhitespaceInElementContent", - doc="True iff this text node contains only whitespace" - " and is in element content.") -defproperty(Text, "wholeText", - doc="The text of all logically-adjacent text nodes.") - - -def _get_containing_element(node): - c = node.parentNode - while c is not None: - if c.nodeType == Node.ELEMENT_NODE: - return c - c = c.parentNode - return None - -def _get_containing_entref(node): - c = node.parentNode - while c is not None: - if c.nodeType == Node.ENTITY_REFERENCE_NODE: - return c - c = c.parentNode - return None - - -class Comment(CharacterData): - nodeType = Node.COMMENT_NODE - nodeName = "#comment" - - def __init__(self, data): - CharacterData.__init__(self) - self._data = data - - def writexml(self, writer, indent="", addindent="", newl=""): - if "--" in self.data: - raise ValueError("'--' is not allowed in a comment node") - writer.write("%s<!--%s-->%s" % (indent, self.data, newl)) - - -class CDATASection(Text): - __slots__ = () - - nodeType = Node.CDATA_SECTION_NODE - nodeName = "#cdata-section" - - def writexml(self, writer, indent="", addindent="", newl=""): - if self.data.find("]]>") >= 0: - raise ValueError("']]>' not allowed in a CDATA section") - writer.write("<![CDATA[%s]]>" % self.data) - - -class ReadOnlySequentialNamedNodeMap(object): - __slots__ = '_seq', - - def __init__(self, seq=()): - # seq should be a list or tuple - self._seq = seq - - def __len__(self): - return len(self._seq) - - def _get_length(self): - return len(self._seq) - - def getNamedItem(self, name): - for n in self._seq: - if n.nodeName == name: - return n - - def getNamedItemNS(self, namespaceURI, localName): - for n in self._seq: - if n.namespaceURI == namespaceURI and n.localName == localName: - return n - - def __getitem__(self, name_or_tuple): - if isinstance(name_or_tuple, tuple): - node = self.getNamedItemNS(*name_or_tuple) - else: - node = self.getNamedItem(name_or_tuple) - if node is None: - raise KeyError(name_or_tuple) - return node - - def item(self, index): - if index < 0: - return None - try: - return self._seq[index] - except IndexError: - return None - - def removeNamedItem(self, name): - raise xml.dom.NoModificationAllowedErr( - "NamedNodeMap instance is read-only") - - def removeNamedItemNS(self, namespaceURI, localName): - raise xml.dom.NoModificationAllowedErr( - "NamedNodeMap instance is read-only") - - def setNamedItem(self, node): - raise xml.dom.NoModificationAllowedErr( - "NamedNodeMap instance is read-only") - - def setNamedItemNS(self, node): - raise xml.dom.NoModificationAllowedErr( - "NamedNodeMap instance is read-only") - - def __getstate__(self): - return [self._seq] - - def __setstate__(self, state): - self._seq = state[0] - -defproperty(ReadOnlySequentialNamedNodeMap, "length", - doc="Number of entries in the NamedNodeMap.") - - -class Identified: - """Mix-in class that supports the publicId and systemId attributes.""" - - __slots__ = 'publicId', 'systemId' - - def _identified_mixin_init(self, publicId, systemId): - self.publicId = publicId - self.systemId = systemId - - def _get_publicId(self): - return self.publicId - - def _get_systemId(self): - return self.systemId - -class DocumentType(Identified, Childless, Node): - nodeType = Node.DOCUMENT_TYPE_NODE - nodeValue = None - name = None - publicId = None - systemId = None - internalSubset = None - - def __init__(self, qualifiedName): - self.entities = ReadOnlySequentialNamedNodeMap() - self.notations = ReadOnlySequentialNamedNodeMap() - if qualifiedName: - prefix, localname = _nssplit(qualifiedName) - self.name = localname - self.nodeName = self.name - - def _get_internalSubset(self): - return self.internalSubset - - def cloneNode(self, deep): - if self.ownerDocument is None: - # it's ok - clone = DocumentType(None) - clone.name = self.name - clone.nodeName = self.name - operation = xml.dom.UserDataHandler.NODE_CLONED - if deep: - clone.entities._seq = [] - clone.notations._seq = [] - for n in self.notations._seq: - notation = Notation(n.nodeName, n.publicId, n.systemId) - clone.notations._seq.append(notation) - n._call_user_data_handler(operation, n, notation) - for e in self.entities._seq: - entity = Entity(e.nodeName, e.publicId, e.systemId, - e.notationName) - entity.actualEncoding = e.actualEncoding - entity.encoding = e.encoding - entity.version = e.version - clone.entities._seq.append(entity) - e._call_user_data_handler(operation, e, entity) - self._call_user_data_handler(operation, self, clone) - return clone - else: - return None - - def writexml(self, writer, indent="", addindent="", newl=""): - writer.write("<!DOCTYPE ") - writer.write(self.name) - if self.publicId: - writer.write("%s PUBLIC '%s'%s '%s'" - % (newl, self.publicId, newl, self.systemId)) - elif self.systemId: - writer.write("%s SYSTEM '%s'" % (newl, self.systemId)) - if self.internalSubset is not None: - writer.write(" [") - writer.write(self.internalSubset) - writer.write("]") - writer.write(">"+newl) - -class Entity(Identified, Node): - attributes = None - nodeType = Node.ENTITY_NODE - nodeValue = None - - actualEncoding = None - encoding = None - version = None - - def __init__(self, name, publicId, systemId, notation): - self.nodeName = name - self.notationName = notation - self.childNodes = NodeList() - self._identified_mixin_init(publicId, systemId) - - def _get_actualEncoding(self): - return self.actualEncoding - - def _get_encoding(self): - return self.encoding - - def _get_version(self): - return self.version - - def appendChild(self, newChild): - raise xml.dom.HierarchyRequestErr( - "cannot append children to an entity node") - - def insertBefore(self, newChild, refChild): - raise xml.dom.HierarchyRequestErr( - "cannot insert children below an entity node") - - def removeChild(self, oldChild): - raise xml.dom.HierarchyRequestErr( - "cannot remove children from an entity node") - - def replaceChild(self, newChild, oldChild): - raise xml.dom.HierarchyRequestErr( - "cannot replace children of an entity node") - -class Notation(Identified, Childless, Node): - nodeType = Node.NOTATION_NODE - nodeValue = None - - def __init__(self, name, publicId, systemId): - self.nodeName = name - self._identified_mixin_init(publicId, systemId) - - -class DOMImplementation(DOMImplementationLS): - _features = [("core", "1.0"), - ("core", "2.0"), - ("core", None), - ("xml", "1.0"), - ("xml", "2.0"), - ("xml", None), - ("ls-load", "3.0"), - ("ls-load", None), - ] - - def hasFeature(self, feature, version): - if version == "": - version = None - return (feature.lower(), version) in self._features - - def createDocument(self, namespaceURI, qualifiedName, doctype): - if doctype and doctype.parentNode is not None: - raise xml.dom.WrongDocumentErr( - "doctype object owned by another DOM tree") - doc = self._create_document() - - add_root_element = not (namespaceURI is None - and qualifiedName is None - and doctype is None) - - if not qualifiedName and add_root_element: - # The spec is unclear what to raise here; SyntaxErr - # would be the other obvious candidate. Since Xerces raises - # InvalidCharacterErr, and since SyntaxErr is not listed - # for createDocument, that seems to be the better choice. - # XXX: need to check for illegal characters here and in - # createElement. - - # DOM Level III clears this up when talking about the return value - # of this function. If namespaceURI, qName and DocType are - # Null the document is returned without a document element - # Otherwise if doctype or namespaceURI are not None - # Then we go back to the above problem - raise xml.dom.InvalidCharacterErr("Element with no name") - - if add_root_element: - prefix, localname = _nssplit(qualifiedName) - if prefix == "xml" \ - and namespaceURI != "http://www.w3.org/XML/1998/namespace": - raise xml.dom.NamespaceErr("illegal use of 'xml' prefix") - if prefix and not namespaceURI: - raise xml.dom.NamespaceErr( - "illegal use of prefix without namespaces") - element = doc.createElementNS(namespaceURI, qualifiedName) - if doctype: - doc.appendChild(doctype) - doc.appendChild(element) - - if doctype: - doctype.parentNode = doctype.ownerDocument = doc - - doc.doctype = doctype - doc.implementation = self - return doc - - def createDocumentType(self, qualifiedName, publicId, systemId): - doctype = DocumentType(qualifiedName) - doctype.publicId = publicId - doctype.systemId = systemId - return doctype - - # DOM Level 3 (WD 9 April 2002) - - def getInterface(self, feature): - if self.hasFeature(feature, None): - return self - else: - return None - - # internal - def _create_document(self): - return Document() - -class ElementInfo(object): - """Object that represents content-model information for an element. - - This implementation is not expected to be used in practice; DOM - builders should provide implementations which do the right thing - using information available to it. - - """ - - __slots__ = 'tagName', - - def __init__(self, name): - self.tagName = name - - def getAttributeType(self, aname): - return _no_type - - def getAttributeTypeNS(self, namespaceURI, localName): - return _no_type - - def isElementContent(self): - return False - - def isEmpty(self): - """Returns true iff this element is declared to have an EMPTY - content model.""" - return False - - def isId(self, aname): - """Returns true iff the named attribute is a DTD-style ID.""" - return False - - def isIdNS(self, namespaceURI, localName): - """Returns true iff the identified attribute is a DTD-style ID.""" - return False - - def __getstate__(self): - return self.tagName - - def __setstate__(self, state): - self.tagName = state - -def _clear_id_cache(node): - if node.nodeType == Node.DOCUMENT_NODE: - node._id_cache.clear() - node._id_search_stack = None - elif node.ownerDocument: - node.ownerDocument._id_cache.clear() - node.ownerDocument._id_search_stack= None - -class Document(Node, DocumentLS): - __slots__ = ('_elem_info', 'doctype', - '_id_search_stack', 'childNodes', '_id_cache') - _child_node_types = (Node.ELEMENT_NODE, Node.PROCESSING_INSTRUCTION_NODE, - Node.COMMENT_NODE, Node.DOCUMENT_TYPE_NODE) - - implementation = DOMImplementation() - nodeType = Node.DOCUMENT_NODE - nodeName = "#document" - nodeValue = None - attributes = None - parentNode = None - previousSibling = nextSibling = None - - - # Document attributes from Level 3 (WD 9 April 2002) - - actualEncoding = None - encoding = None - standalone = None - version = None - strictErrorChecking = False - errorHandler = None - documentURI = None - - _magic_id_count = 0 - - def __init__(self): - self.doctype = None - self.childNodes = NodeList() - # mapping of (namespaceURI, localName) -> ElementInfo - # and tagName -> ElementInfo - self._elem_info = {} - self._id_cache = {} - self._id_search_stack = None - - def _get_elem_info(self, element): - if element.namespaceURI: - key = element.namespaceURI, element.localName - else: - key = element.tagName - return self._elem_info.get(key) - - def _get_actualEncoding(self): - return self.actualEncoding - - def _get_doctype(self): - return self.doctype - - def _get_documentURI(self): - return self.documentURI - - def _get_encoding(self): - return self.encoding - - def _get_errorHandler(self): - return self.errorHandler - - def _get_standalone(self): - return self.standalone - - def _get_strictErrorChecking(self): - return self.strictErrorChecking - - def _get_version(self): - return self.version - - def appendChild(self, node): - if node.nodeType not in self._child_node_types: - raise xml.dom.HierarchyRequestErr( - "%s cannot be child of %s" % (repr(node), repr(self))) - if node.parentNode is not None: - # This needs to be done before the next test since this - # may *be* the document element, in which case it should - # end up re-ordered to the end. - node.parentNode.removeChild(node) - - if node.nodeType == Node.ELEMENT_NODE \ - and self._get_documentElement(): - raise xml.dom.HierarchyRequestErr( - "two document elements disallowed") - return Node.appendChild(self, node) - - def removeChild(self, oldChild): - try: - self.childNodes.remove(oldChild) - except ValueError: - raise xml.dom.NotFoundErr() - oldChild.nextSibling = oldChild.previousSibling = None - oldChild.parentNode = None - if self.documentElement is oldChild: - self.documentElement = None - - return oldChild - - def _get_documentElement(self): - for node in self.childNodes: - if node.nodeType == Node.ELEMENT_NODE: - return node - - def unlink(self): - if self.doctype is not None: - self.doctype.unlink() - self.doctype = None - Node.unlink(self) - - def cloneNode(self, deep): - if not deep: - return None - clone = self.implementation.createDocument(None, None, None) - clone.encoding = self.encoding - clone.standalone = self.standalone - clone.version = self.version - for n in self.childNodes: - childclone = _clone_node(n, deep, clone) - assert childclone.ownerDocument.isSameNode(clone) - clone.childNodes.append(childclone) - if childclone.nodeType == Node.DOCUMENT_NODE: - assert clone.documentElement is None - elif childclone.nodeType == Node.DOCUMENT_TYPE_NODE: - assert clone.doctype is None - clone.doctype = childclone - childclone.parentNode = clone - self._call_user_data_handler(xml.dom.UserDataHandler.NODE_CLONED, - self, clone) - return clone - - def createDocumentFragment(self): - d = DocumentFragment() - d.ownerDocument = self - return d - - def createElement(self, tagName): - e = Element(tagName) - e.ownerDocument = self - return e - - def createTextNode(self, data): - if not isinstance(data, str): - raise TypeError("node contents must be a string") - t = Text() - t.data = data - t.ownerDocument = self - return t - - def createCDATASection(self, data): - if not isinstance(data, str): - raise TypeError("node contents must be a string") - c = CDATASection() - c.data = data - c.ownerDocument = self - return c - - def createComment(self, data): - c = Comment(data) - c.ownerDocument = self - return c - - def createProcessingInstruction(self, target, data): - p = ProcessingInstruction(target, data) - p.ownerDocument = self - return p - - def createAttribute(self, qName): - a = Attr(qName) - a.ownerDocument = self - a.value = "" - return a - - def createElementNS(self, namespaceURI, qualifiedName): - prefix, localName = _nssplit(qualifiedName) - e = Element(qualifiedName, namespaceURI, prefix) - e.ownerDocument = self - return e - - def createAttributeNS(self, namespaceURI, qualifiedName): - prefix, localName = _nssplit(qualifiedName) - a = Attr(qualifiedName, namespaceURI, localName, prefix) - a.ownerDocument = self - a.value = "" - return a - - # A couple of implementation-specific helpers to create node types - # not supported by the W3C DOM specs: - - def _create_entity(self, name, publicId, systemId, notationName): - e = Entity(name, publicId, systemId, notationName) - e.ownerDocument = self - return e - - def _create_notation(self, name, publicId, systemId): - n = Notation(name, publicId, systemId) - n.ownerDocument = self - return n - - def getElementById(self, id): - if id in self._id_cache: - return self._id_cache[id] - if not (self._elem_info or self._magic_id_count): - return None - - stack = self._id_search_stack - if stack is None: - # we never searched before, or the cache has been cleared - stack = [self.documentElement] - self._id_search_stack = stack - elif not stack: - # Previous search was completed and cache is still valid; - # no matching node. - return None - - result = None - while stack: - node = stack.pop() - # add child elements to stack for continued searching - stack.extend([child for child in node.childNodes - if child.nodeType in _nodeTypes_with_children]) - # check this node - info = self._get_elem_info(node) - if info: - # We have to process all ID attributes before - # returning in order to get all the attributes set to - # be IDs using Element.setIdAttribute*(). - for attr in node.attributes.values(): - if attr.namespaceURI: - if info.isIdNS(attr.namespaceURI, attr.localName): - self._id_cache[attr.value] = node - if attr.value == id: - result = node - elif not node._magic_id_nodes: - break - elif info.isId(attr.name): - self._id_cache[attr.value] = node - if attr.value == id: - result = node - elif not node._magic_id_nodes: - break - elif attr._is_id: - self._id_cache[attr.value] = node - if attr.value == id: - result = node - elif node._magic_id_nodes == 1: - break - elif node._magic_id_nodes: - for attr in node.attributes.values(): - if attr._is_id: - self._id_cache[attr.value] = node - if attr.value == id: - result = node - if result is not None: - break - return result - - def getElementsByTagName(self, name): - return _get_elements_by_tagName_helper(self, name, NodeList()) - - def getElementsByTagNameNS(self, namespaceURI, localName): - return _get_elements_by_tagName_ns_helper( - self, namespaceURI, localName, NodeList()) - - def isSupported(self, feature, version): - return self.implementation.hasFeature(feature, version) - - def importNode(self, node, deep): - if node.nodeType == Node.DOCUMENT_NODE: - raise xml.dom.NotSupportedErr("cannot import document nodes") - elif node.nodeType == Node.DOCUMENT_TYPE_NODE: - raise xml.dom.NotSupportedErr("cannot import document type nodes") - return _clone_node(node, deep, self) - - def writexml(self, writer, indent="", addindent="", newl="", encoding=None, - standalone=None): - declarations = [] - - if encoding: - declarations.append(f'encoding="{encoding}"') - if standalone is not None: - declarations.append(f'standalone="{"yes" if standalone else "no"}"') - - writer.write(f'<?xml version="1.0" {" ".join(declarations)}?>{newl}') - - for node in self.childNodes: - node.writexml(writer, indent, addindent, newl) - - # DOM Level 3 (WD 9 April 2002) - - def renameNode(self, n, namespaceURI, name): - if n.ownerDocument is not self: - raise xml.dom.WrongDocumentErr( - "cannot rename nodes from other documents;\n" - "expected %s,\nfound %s" % (self, n.ownerDocument)) - if n.nodeType not in (Node.ELEMENT_NODE, Node.ATTRIBUTE_NODE): - raise xml.dom.NotSupportedErr( - "renameNode() only applies to element and attribute nodes") - if namespaceURI != EMPTY_NAMESPACE: - if ':' in name: - prefix, localName = name.split(':', 1) - if ( prefix == "xmlns" - and namespaceURI != xml.dom.XMLNS_NAMESPACE): - raise xml.dom.NamespaceErr( - "illegal use of 'xmlns' prefix") - else: - if ( name == "xmlns" - and namespaceURI != xml.dom.XMLNS_NAMESPACE - and n.nodeType == Node.ATTRIBUTE_NODE): - raise xml.dom.NamespaceErr( - "illegal use of the 'xmlns' attribute") - prefix = None - localName = name - else: - prefix = None - localName = None - if n.nodeType == Node.ATTRIBUTE_NODE: - element = n.ownerElement - if element is not None: - is_id = n._is_id - element.removeAttributeNode(n) - else: - element = None - n.prefix = prefix - n._localName = localName - n.namespaceURI = namespaceURI - n.nodeName = name - if n.nodeType == Node.ELEMENT_NODE: - n.tagName = name - else: - # attribute node - n.name = name - if element is not None: - element.setAttributeNode(n) - if is_id: - element.setIdAttributeNode(n) - # It's not clear from a semantic perspective whether we should - # call the user data handlers for the NODE_RENAMED event since - # we're re-using the existing node. The draft spec has been - # interpreted as meaning "no, don't call the handler unless a - # new node is created." - return n - -defproperty(Document, "documentElement", - doc="Top-level element of this document.") - - -def _clone_node(node, deep, newOwnerDocument): - """ - Clone a node and give it the new owner document. - Called by Node.cloneNode and Document.importNode - """ - if node.ownerDocument.isSameNode(newOwnerDocument): - operation = xml.dom.UserDataHandler.NODE_CLONED - else: - operation = xml.dom.UserDataHandler.NODE_IMPORTED - if node.nodeType == Node.ELEMENT_NODE: - clone = newOwnerDocument.createElementNS(node.namespaceURI, - node.nodeName) - for attr in node.attributes.values(): - clone.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.value) - a = clone.getAttributeNodeNS(attr.namespaceURI, attr.localName) - a.specified = attr.specified - - if deep: - for child in node.childNodes: - c = _clone_node(child, deep, newOwnerDocument) - clone.appendChild(c) - - elif node.nodeType == Node.DOCUMENT_FRAGMENT_NODE: - clone = newOwnerDocument.createDocumentFragment() - if deep: - for child in node.childNodes: - c = _clone_node(child, deep, newOwnerDocument) - clone.appendChild(c) - - elif node.nodeType == Node.TEXT_NODE: - clone = newOwnerDocument.createTextNode(node.data) - elif node.nodeType == Node.CDATA_SECTION_NODE: - clone = newOwnerDocument.createCDATASection(node.data) - elif node.nodeType == Node.PROCESSING_INSTRUCTION_NODE: - clone = newOwnerDocument.createProcessingInstruction(node.target, - node.data) - elif node.nodeType == Node.COMMENT_NODE: - clone = newOwnerDocument.createComment(node.data) - elif node.nodeType == Node.ATTRIBUTE_NODE: - clone = newOwnerDocument.createAttributeNS(node.namespaceURI, - node.nodeName) - clone.specified = True - clone.value = node.value - elif node.nodeType == Node.DOCUMENT_TYPE_NODE: - assert node.ownerDocument is not newOwnerDocument - operation = xml.dom.UserDataHandler.NODE_IMPORTED - clone = newOwnerDocument.implementation.createDocumentType( - node.name, node.publicId, node.systemId) - clone.ownerDocument = newOwnerDocument - if deep: - clone.entities._seq = [] - clone.notations._seq = [] - for n in node.notations._seq: - notation = Notation(n.nodeName, n.publicId, n.systemId) - notation.ownerDocument = newOwnerDocument - clone.notations._seq.append(notation) - if hasattr(n, '_call_user_data_handler'): - n._call_user_data_handler(operation, n, notation) - for e in node.entities._seq: - entity = Entity(e.nodeName, e.publicId, e.systemId, - e.notationName) - entity.actualEncoding = e.actualEncoding - entity.encoding = e.encoding - entity.version = e.version - entity.ownerDocument = newOwnerDocument - clone.entities._seq.append(entity) - if hasattr(e, '_call_user_data_handler'): - e._call_user_data_handler(operation, e, entity) - else: - # Note the cloning of Document and DocumentType nodes is - # implementation specific. minidom handles those cases - # directly in the cloneNode() methods. - raise xml.dom.NotSupportedErr("Cannot clone node %s" % repr(node)) - - # Check for _call_user_data_handler() since this could conceivably - # used with other DOM implementations (one of the FourThought - # DOMs, perhaps?). - if hasattr(node, '_call_user_data_handler'): - node._call_user_data_handler(operation, node, clone) - return clone - - -def _nssplit(qualifiedName): - fields = qualifiedName.split(':', 1) - if len(fields) == 2: - return fields - else: - return (None, fields[0]) - - -def _do_pulldom_parse(func, args, kwargs): - events = func(*args, **kwargs) - toktype, rootNode = events.getEvent() - events.expandNode(rootNode) - events.clear() - return rootNode - -def parse(file, parser=None, bufsize=None): - """Parse a file into a DOM by filename or file object.""" - if parser is None and not bufsize: - from xml.dom import expatbuilder - return expatbuilder.parse(file) - else: - from xml.dom import pulldom - return _do_pulldom_parse(pulldom.parse, (file,), - {'parser': parser, 'bufsize': bufsize}) - -def parseString(string, parser=None): - """Parse a file into a DOM from a string.""" - if parser is None: - from xml.dom import expatbuilder - return expatbuilder.parseString(string) - else: - from xml.dom import pulldom - return _do_pulldom_parse(pulldom.parseString, (string,), - {'parser': parser}) - -def getDOMImplementation(features=None): - if features: - if isinstance(features, str): - features = domreg._parse_feature_string(features) - for f, v in features: - if not Document.implementation.hasFeature(f, v): - return None - return Document.implementation diff --git a/Python314_4_x86_Template/Lib/xml/dom/pulldom.py b/Python314_4_x86_Template/Lib/xml/dom/pulldom.py deleted file mode 100644 index 913141cd7..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/pulldom.py +++ /dev/null @@ -1,336 +0,0 @@ -import xml.sax -import xml.sax.handler - -START_ELEMENT = "START_ELEMENT" -END_ELEMENT = "END_ELEMENT" -COMMENT = "COMMENT" -START_DOCUMENT = "START_DOCUMENT" -END_DOCUMENT = "END_DOCUMENT" -PROCESSING_INSTRUCTION = "PROCESSING_INSTRUCTION" -IGNORABLE_WHITESPACE = "IGNORABLE_WHITESPACE" -CHARACTERS = "CHARACTERS" - -class PullDOM(xml.sax.ContentHandler): - _locator = None - document = None - - def __init__(self, documentFactory=None): - from xml.dom import XML_NAMESPACE - self.documentFactory = documentFactory - self.firstEvent = [None, None] - self.lastEvent = self.firstEvent - self.elementStack = [] - self.push = self.elementStack.append - try: - self.pop = self.elementStack.pop - except AttributeError: - # use class' pop instead - pass - self._ns_contexts = [{XML_NAMESPACE:'xml'}] # contains uri -> prefix dicts - self._current_context = self._ns_contexts[-1] - self.pending_events = [] - - def pop(self): - result = self.elementStack[-1] - del self.elementStack[-1] - return result - - def setDocumentLocator(self, locator): - self._locator = locator - - def startPrefixMapping(self, prefix, uri): - if not hasattr(self, '_xmlns_attrs'): - self._xmlns_attrs = [] - self._xmlns_attrs.append((prefix or 'xmlns', uri)) - self._ns_contexts.append(self._current_context.copy()) - self._current_context[uri] = prefix or None - - def endPrefixMapping(self, prefix): - self._current_context = self._ns_contexts.pop() - - def startElementNS(self, name, tagName , attrs): - # Retrieve xml namespace declaration attributes. - xmlns_uri = 'http://www.w3.org/2000/xmlns/' - xmlns_attrs = getattr(self, '_xmlns_attrs', None) - if xmlns_attrs is not None: - for aname, value in xmlns_attrs: - attrs._attrs[(xmlns_uri, aname)] = value - self._xmlns_attrs = [] - uri, localname = name - if uri: - # When using namespaces, the reader may or may not - # provide us with the original name. If not, create - # *a* valid tagName from the current context. - if tagName is None: - prefix = self._current_context[uri] - if prefix: - tagName = prefix + ":" + localname - else: - tagName = localname - if self.document: - node = self.document.createElementNS(uri, tagName) - else: - node = self.buildDocument(uri, tagName) - else: - # When the tagname is not prefixed, it just appears as - # localname - if self.document: - node = self.document.createElement(localname) - else: - node = self.buildDocument(None, localname) - - for aname,value in attrs.items(): - a_uri, a_localname = aname - if a_uri == xmlns_uri: - if a_localname == 'xmlns': - qname = a_localname - else: - qname = 'xmlns:' + a_localname - attr = self.document.createAttributeNS(a_uri, qname) - node.setAttributeNodeNS(attr) - elif a_uri: - prefix = self._current_context[a_uri] - if prefix: - qname = prefix + ":" + a_localname - else: - qname = a_localname - attr = self.document.createAttributeNS(a_uri, qname) - node.setAttributeNodeNS(attr) - else: - attr = self.document.createAttribute(a_localname) - node.setAttributeNode(attr) - attr.value = value - - self.lastEvent[1] = [(START_ELEMENT, node), None] - self.lastEvent = self.lastEvent[1] - self.push(node) - - def endElementNS(self, name, tagName): - self.lastEvent[1] = [(END_ELEMENT, self.pop()), None] - self.lastEvent = self.lastEvent[1] - - def startElement(self, name, attrs): - if self.document: - node = self.document.createElement(name) - else: - node = self.buildDocument(None, name) - - for aname,value in attrs.items(): - attr = self.document.createAttribute(aname) - attr.value = value - node.setAttributeNode(attr) - - self.lastEvent[1] = [(START_ELEMENT, node), None] - self.lastEvent = self.lastEvent[1] - self.push(node) - - def endElement(self, name): - self.lastEvent[1] = [(END_ELEMENT, self.pop()), None] - self.lastEvent = self.lastEvent[1] - - def comment(self, s): - if self.document: - node = self.document.createComment(s) - self.lastEvent[1] = [(COMMENT, node), None] - self.lastEvent = self.lastEvent[1] - else: - event = [(COMMENT, s), None] - self.pending_events.append(event) - - def processingInstruction(self, target, data): - if self.document: - node = self.document.createProcessingInstruction(target, data) - self.lastEvent[1] = [(PROCESSING_INSTRUCTION, node), None] - self.lastEvent = self.lastEvent[1] - else: - event = [(PROCESSING_INSTRUCTION, target, data), None] - self.pending_events.append(event) - - def ignorableWhitespace(self, chars): - node = self.document.createTextNode(chars) - self.lastEvent[1] = [(IGNORABLE_WHITESPACE, node), None] - self.lastEvent = self.lastEvent[1] - - def characters(self, chars): - node = self.document.createTextNode(chars) - self.lastEvent[1] = [(CHARACTERS, node), None] - self.lastEvent = self.lastEvent[1] - - def startDocument(self): - if self.documentFactory is None: - import xml.dom.minidom - self.documentFactory = xml.dom.minidom.Document.implementation - - def buildDocument(self, uri, tagname): - # Can't do that in startDocument, since we need the tagname - # XXX: obtain DocumentType - node = self.documentFactory.createDocument(uri, tagname, None) - self.document = node - self.lastEvent[1] = [(START_DOCUMENT, node), None] - self.lastEvent = self.lastEvent[1] - self.push(node) - # Put everything we have seen so far into the document - for e in self.pending_events: - if e[0][0] == PROCESSING_INSTRUCTION: - _,target,data = e[0] - n = self.document.createProcessingInstruction(target, data) - e[0] = (PROCESSING_INSTRUCTION, n) - elif e[0][0] == COMMENT: - n = self.document.createComment(e[0][1]) - e[0] = (COMMENT, n) - else: - raise AssertionError("Unknown pending event ",e[0][0]) - self.lastEvent[1] = e - self.lastEvent = e - self.pending_events = None - return node.firstChild - - def endDocument(self): - self.lastEvent[1] = [(END_DOCUMENT, self.document), None] - self.pop() - - def clear(self): - "clear(): Explicitly release parsing structures" - self.document = None - -class ErrorHandler: - def warning(self, exception): - print(exception) - def error(self, exception): - raise exception - def fatalError(self, exception): - raise exception - -class DOMEventStream: - def __init__(self, stream, parser, bufsize): - self.stream = stream - self.parser = parser - self.bufsize = bufsize - if not hasattr(self.parser, 'feed'): - self.getEvent = self._slurp - self.reset() - - def reset(self): - self.pulldom = PullDOM() - # This content handler relies on namespace support - self.parser.setFeature(xml.sax.handler.feature_namespaces, 1) - self.parser.setContentHandler(self.pulldom) - - def __next__(self): - rc = self.getEvent() - if rc: - return rc - raise StopIteration - - def __iter__(self): - return self - - def expandNode(self, node): - event = self.getEvent() - parents = [node] - while event: - token, cur_node = event - if cur_node is node: - return - if token != END_ELEMENT: - parents[-1].appendChild(cur_node) - if token == START_ELEMENT: - parents.append(cur_node) - elif token == END_ELEMENT: - del parents[-1] - event = self.getEvent() - - def getEvent(self): - # use IncrementalParser interface, so we get the desired - # pull effect - if not self.pulldom.firstEvent[1]: - self.pulldom.lastEvent = self.pulldom.firstEvent - while not self.pulldom.firstEvent[1]: - buf = self.stream.read(self.bufsize) - if not buf: - self.parser.close() - return None - self.parser.feed(buf) - rc = self.pulldom.firstEvent[1][0] - self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1] - return rc - - def _slurp(self): - """ Fallback replacement for getEvent() using the - standard SAX2 interface, which means we slurp the - SAX events into memory (no performance gain, but - we are compatible to all SAX parsers). - """ - self.parser.parse(self.stream) - self.getEvent = self._emit - return self._emit() - - def _emit(self): - """ Fallback replacement for getEvent() that emits - the events that _slurp() read previously. - """ - rc = self.pulldom.firstEvent[1][0] - self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1] - return rc - - def clear(self): - """clear(): Explicitly release parsing objects""" - self.pulldom.clear() - del self.pulldom - self.parser = None - self.stream = None - -class SAX2DOM(PullDOM): - - def startElementNS(self, name, tagName , attrs): - PullDOM.startElementNS(self, name, tagName, attrs) - curNode = self.elementStack[-1] - parentNode = self.elementStack[-2] - parentNode.appendChild(curNode) - - def startElement(self, name, attrs): - PullDOM.startElement(self, name, attrs) - curNode = self.elementStack[-1] - parentNode = self.elementStack[-2] - parentNode.appendChild(curNode) - - def processingInstruction(self, target, data): - PullDOM.processingInstruction(self, target, data) - node = self.lastEvent[0][1] - parentNode = self.elementStack[-1] - parentNode.appendChild(node) - - def ignorableWhitespace(self, chars): - PullDOM.ignorableWhitespace(self, chars) - node = self.lastEvent[0][1] - parentNode = self.elementStack[-1] - parentNode.appendChild(node) - - def characters(self, chars): - PullDOM.characters(self, chars) - node = self.lastEvent[0][1] - parentNode = self.elementStack[-1] - parentNode.appendChild(node) - - -default_bufsize = (2 ** 14) - 20 - -def parse(stream_or_string, parser=None, bufsize=None): - if bufsize is None: - bufsize = default_bufsize - if isinstance(stream_or_string, str): - stream = open(stream_or_string, 'rb') - else: - stream = stream_or_string - if not parser: - parser = xml.sax.make_parser() - return DOMEventStream(stream, parser, bufsize) - -def parseString(string, parser=None): - from io import StringIO - - bufsize = len(string) - buf = StringIO(string) - if not parser: - parser = xml.sax.make_parser() - return DOMEventStream(buf, parser, bufsize) diff --git a/Python314_4_x86_Template/Lib/xml/dom/xmlbuilder.py b/Python314_4_x86_Template/Lib/xml/dom/xmlbuilder.py deleted file mode 100644 index a8852625a..000000000 --- a/Python314_4_x86_Template/Lib/xml/dom/xmlbuilder.py +++ /dev/null @@ -1,389 +0,0 @@ -"""Implementation of the DOM Level 3 'LS-Load' feature.""" - -import copy -import xml.dom - -from xml.dom.NodeFilter import NodeFilter - - -__all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"] - - -class Options: - """Features object that has variables set for each DOMBuilder feature. - - The DOMBuilder class uses an instance of this class to pass settings to - the ExpatBuilder class. - """ - - # Note that the DOMBuilder class in LoadSave constrains which of these - # values can be set using the DOM Level 3 LoadSave feature. - - namespaces = 1 - namespace_declarations = True - validation = False - external_parameter_entities = True - external_general_entities = True - external_dtd_subset = True - validate_if_schema = False - validate = False - datatype_normalization = False - create_entity_ref_nodes = True - entities = True - whitespace_in_element_content = True - cdata_sections = True - comments = True - charset_overrides_xml_encoding = True - infoset = False - supported_mediatypes_only = False - - errorHandler = None - filter = None - - -class DOMBuilder: - entityResolver = None - errorHandler = None - filter = None - - ACTION_REPLACE = 1 - ACTION_APPEND_AS_CHILDREN = 2 - ACTION_INSERT_AFTER = 3 - ACTION_INSERT_BEFORE = 4 - - _legal_actions = (ACTION_REPLACE, ACTION_APPEND_AS_CHILDREN, - ACTION_INSERT_AFTER, ACTION_INSERT_BEFORE) - - def __init__(self): - self._options = Options() - - def _get_entityResolver(self): - return self.entityResolver - def _set_entityResolver(self, entityResolver): - self.entityResolver = entityResolver - - def _get_errorHandler(self): - return self.errorHandler - def _set_errorHandler(self, errorHandler): - self.errorHandler = errorHandler - - def _get_filter(self): - return self.filter - def _set_filter(self, filter): - self.filter = filter - - def setFeature(self, name, state): - if self.supportsFeature(name): - state = state and 1 or 0 - try: - settings = self._settings[(_name_xform(name), state)] - except KeyError: - raise xml.dom.NotSupportedErr( - "unsupported feature: %r" % (name,)) from None - else: - for name, value in settings: - setattr(self._options, name, value) - else: - raise xml.dom.NotFoundErr("unknown feature: " + repr(name)) - - def supportsFeature(self, name): - return hasattr(self._options, _name_xform(name)) - - def canSetFeature(self, name, state): - key = (_name_xform(name), state and 1 or 0) - return key in self._settings - - # This dictionary maps from (feature,value) to a list of - # (option,value) pairs that should be set on the Options object. - # If a (feature,value) setting is not in this dictionary, it is - # not supported by the DOMBuilder. - # - _settings = { - ("namespace_declarations", 0): [ - ("namespace_declarations", 0)], - ("namespace_declarations", 1): [ - ("namespace_declarations", 1)], - ("validation", 0): [ - ("validation", 0)], - ("external_general_entities", 0): [ - ("external_general_entities", 0)], - ("external_general_entities", 1): [ - ("external_general_entities", 1)], - ("external_parameter_entities", 0): [ - ("external_parameter_entities", 0)], - ("external_parameter_entities", 1): [ - ("external_parameter_entities", 1)], - ("validate_if_schema", 0): [ - ("validate_if_schema", 0)], - ("create_entity_ref_nodes", 0): [ - ("create_entity_ref_nodes", 0)], - ("create_entity_ref_nodes", 1): [ - ("create_entity_ref_nodes", 1)], - ("entities", 0): [ - ("create_entity_ref_nodes", 0), - ("entities", 0)], - ("entities", 1): [ - ("entities", 1)], - ("whitespace_in_element_content", 0): [ - ("whitespace_in_element_content", 0)], - ("whitespace_in_element_content", 1): [ - ("whitespace_in_element_content", 1)], - ("cdata_sections", 0): [ - ("cdata_sections", 0)], - ("cdata_sections", 1): [ - ("cdata_sections", 1)], - ("comments", 0): [ - ("comments", 0)], - ("comments", 1): [ - ("comments", 1)], - ("charset_overrides_xml_encoding", 0): [ - ("charset_overrides_xml_encoding", 0)], - ("charset_overrides_xml_encoding", 1): [ - ("charset_overrides_xml_encoding", 1)], - ("infoset", 0): [], - ("infoset", 1): [ - ("namespace_declarations", 0), - ("validate_if_schema", 0), - ("create_entity_ref_nodes", 0), - ("entities", 0), - ("cdata_sections", 0), - ("datatype_normalization", 1), - ("whitespace_in_element_content", 1), - ("comments", 1), - ("charset_overrides_xml_encoding", 1)], - ("supported_mediatypes_only", 0): [ - ("supported_mediatypes_only", 0)], - ("namespaces", 0): [ - ("namespaces", 0)], - ("namespaces", 1): [ - ("namespaces", 1)], - } - - def getFeature(self, name): - xname = _name_xform(name) - try: - return getattr(self._options, xname) - except AttributeError: - if name == "infoset": - options = self._options - return (options.datatype_normalization - and options.whitespace_in_element_content - and options.comments - and options.charset_overrides_xml_encoding - and not (options.namespace_declarations - or options.validate_if_schema - or options.create_entity_ref_nodes - or options.entities - or options.cdata_sections)) - raise xml.dom.NotFoundErr("feature %s not known" % repr(name)) - - def parseURI(self, uri): - if self.entityResolver: - input = self.entityResolver.resolveEntity(None, uri) - else: - input = DOMEntityResolver().resolveEntity(None, uri) - return self.parse(input) - - def parse(self, input): - options = copy.copy(self._options) - options.filter = self.filter - options.errorHandler = self.errorHandler - fp = input.byteStream - if fp is None and input.systemId: - import urllib.request - fp = urllib.request.urlopen(input.systemId) - return self._parse_bytestream(fp, options) - - def parseWithContext(self, input, cnode, action): - if action not in self._legal_actions: - raise ValueError("not a legal action") - raise NotImplementedError("Haven't written this yet...") - - def _parse_bytestream(self, stream, options): - import xml.dom.expatbuilder - builder = xml.dom.expatbuilder.makeBuilder(options) - return builder.parseFile(stream) - - -def _name_xform(name): - return name.lower().replace('-', '_') - - -class DOMEntityResolver(object): - __slots__ = '_opener', - - def resolveEntity(self, publicId, systemId): - assert systemId is not None - source = DOMInputSource() - source.publicId = publicId - source.systemId = systemId - source.byteStream = self._get_opener().open(systemId) - - # determine the encoding if the transport provided it - source.encoding = self._guess_media_encoding(source) - - # determine the base URI is we can - import posixpath, urllib.parse - parts = urllib.parse.urlparse(systemId) - scheme, netloc, path, params, query, fragment = parts - # XXX should we check the scheme here as well? - if path and not path.endswith("/"): - path = posixpath.dirname(path) + "/" - parts = scheme, netloc, path, params, query, fragment - source.baseURI = urllib.parse.urlunparse(parts) - - return source - - def _get_opener(self): - try: - return self._opener - except AttributeError: - self._opener = self._create_opener() - return self._opener - - def _create_opener(self): - import urllib.request - return urllib.request.build_opener() - - def _guess_media_encoding(self, source): - info = source.byteStream.info() - # import email.message - # assert isinstance(info, email.message.Message) - charset = info.get_param('charset') - if charset is not None: - return charset.lower() - return None - - -class DOMInputSource(object): - __slots__ = ('byteStream', 'characterStream', 'stringData', - 'encoding', 'publicId', 'systemId', 'baseURI') - - def __init__(self): - self.byteStream = None - self.characterStream = None - self.stringData = None - self.encoding = None - self.publicId = None - self.systemId = None - self.baseURI = None - - def _get_byteStream(self): - return self.byteStream - def _set_byteStream(self, byteStream): - self.byteStream = byteStream - - def _get_characterStream(self): - return self.characterStream - def _set_characterStream(self, characterStream): - self.characterStream = characterStream - - def _get_stringData(self): - return self.stringData - def _set_stringData(self, data): - self.stringData = data - - def _get_encoding(self): - return self.encoding - def _set_encoding(self, encoding): - self.encoding = encoding - - def _get_publicId(self): - return self.publicId - def _set_publicId(self, publicId): - self.publicId = publicId - - def _get_systemId(self): - return self.systemId - def _set_systemId(self, systemId): - self.systemId = systemId - - def _get_baseURI(self): - return self.baseURI - def _set_baseURI(self, uri): - self.baseURI = uri - - -class DOMBuilderFilter: - """Element filter which can be used to tailor construction of - a DOM instance. - """ - - # There's really no need for this class; concrete implementations - # should just implement the endElement() and startElement() - # methods as appropriate. Using this makes it easy to only - # implement one of them. - - FILTER_ACCEPT = 1 - FILTER_REJECT = 2 - FILTER_SKIP = 3 - FILTER_INTERRUPT = 4 - - whatToShow = NodeFilter.SHOW_ALL - - def _get_whatToShow(self): - return self.whatToShow - - def acceptNode(self, element): - return self.FILTER_ACCEPT - - def startContainer(self, element): - return self.FILTER_ACCEPT - -del NodeFilter - - -class DocumentLS: - """Mixin to create documents that conform to the load/save spec.""" - - async_ = False - - def _get_async(self): - return False - - def _set_async(self, flag): - if flag: - raise xml.dom.NotSupportedErr( - "asynchronous document loading is not supported") - - def abort(self): - # What does it mean to "clear" a document? Does the - # documentElement disappear? - raise NotImplementedError( - "haven't figured out what this means yet") - - def load(self, uri): - raise NotImplementedError("haven't written this yet") - - def loadXML(self, source): - raise NotImplementedError("haven't written this yet") - - def saveXML(self, snode): - if snode is None: - snode = self - elif snode.ownerDocument is not self: - raise xml.dom.WrongDocumentErr() - return snode.toxml() - - -class DOMImplementationLS: - MODE_SYNCHRONOUS = 1 - MODE_ASYNCHRONOUS = 2 - - def createDOMBuilder(self, mode, schemaType): - if schemaType is not None: - raise xml.dom.NotSupportedErr( - "schemaType not yet supported") - if mode == self.MODE_SYNCHRONOUS: - return DOMBuilder() - if mode == self.MODE_ASYNCHRONOUS: - raise xml.dom.NotSupportedErr( - "asynchronous builders are not supported") - raise ValueError("unknown value for mode") - - def createDOMWriter(self): - raise NotImplementedError( - "the writer interface hasn't been written yet!") - - def createDOMInputSource(self): - return DOMInputSource() diff --git a/Python314_4_x86_Template/Lib/xml/etree/ElementInclude.py b/Python314_4_x86_Template/Lib/xml/etree/ElementInclude.py deleted file mode 100644 index 986e6c3bb..000000000 --- a/Python314_4_x86_Template/Lib/xml/etree/ElementInclude.py +++ /dev/null @@ -1,186 +0,0 @@ -# -# ElementTree -# $Id: ElementInclude.py 3375 2008-02-13 08:05:08Z fredrik $ -# -# limited xinclude support for element trees -# -# history: -# 2003-08-15 fl created -# 2003-11-14 fl fixed default loader -# -# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved. -# -# fredrik@pythonware.com -# http://www.pythonware.com -# -# -------------------------------------------------------------------- -# The ElementTree toolkit is -# -# Copyright (c) 1999-2008 by Fredrik Lundh -# -# By obtaining, using, and/or copying this software and/or its -# associated documentation, you agree that you have read, understood, -# and will comply with the following terms and conditions: -# -# Permission to use, copy, modify, and distribute this software and -# its associated documentation for any purpose and without fee is -# hereby granted, provided that the above copyright notice appears in -# all copies, and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Secret Labs AB or the author not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -------------------------------------------------------------------- - -# Licensed to PSF under a Contributor Agreement. -# See https://www.python.org/psf/license for licensing details. - -## -# Limited XInclude support for the ElementTree package. -## - -import copy -from . import ElementTree -from urllib.parse import urljoin - -XINCLUDE = "{http://www.w3.org/2001/XInclude}" - -XINCLUDE_INCLUDE = XINCLUDE + "include" -XINCLUDE_FALLBACK = XINCLUDE + "fallback" - -# For security reasons, the inclusion depth is limited to this read-only value by default. -DEFAULT_MAX_INCLUSION_DEPTH = 6 - - -## -# Fatal include error. - -class FatalIncludeError(SyntaxError): - pass - - -class LimitedRecursiveIncludeError(FatalIncludeError): - pass - - -## -# Default loader. This loader reads an included resource from disk. -# -# @param href Resource reference. -# @param parse Parse mode. Either "xml" or "text". -# @param encoding Optional text encoding (UTF-8 by default for "text"). -# @return The expanded resource. If the parse mode is "xml", this -# is an Element instance. If the parse mode is "text", this -# is a string. If the loader fails, it can return None -# or raise an OSError exception. -# @throws OSError If the loader fails to load the resource. - -def default_loader(href, parse, encoding=None): - if parse == "xml": - with open(href, 'rb') as file: - data = ElementTree.parse(file).getroot() - else: - if not encoding: - encoding = 'UTF-8' - with open(href, 'r', encoding=encoding) as file: - data = file.read() - return data - -## -# Expand XInclude directives. -# -# @param elem Root Element or any ElementTree of a tree to be expanded -# @param loader Optional resource loader. If omitted, it defaults -# to {@link default_loader}. If given, it should be a callable -# that implements the same interface as <b>default_loader</b>. -# @param base_url The base URL of the original file, to resolve -# relative include file references. -# @param max_depth The maximum number of recursive inclusions. -# Limited to reduce the risk of malicious content explosion. -# Pass None to disable the limitation. -# @throws LimitedRecursiveIncludeError If the {@link max_depth} was exceeded. -# @throws FatalIncludeError If the function fails to include a given -# resource, or if the tree contains malformed XInclude elements. -# @throws OSError If the function fails to load a given resource. -# @throws ValueError If negative {@link max_depth} is passed. -# @returns None. Modifies tree pointed by {@link elem} - -def include(elem, loader=None, base_url=None, - max_depth=DEFAULT_MAX_INCLUSION_DEPTH): - if max_depth is None: - max_depth = -1 - elif max_depth < 0: - raise ValueError("expected non-negative depth or None for 'max_depth', got %r" % max_depth) - - if hasattr(elem, 'getroot'): - elem = elem.getroot() - if loader is None: - loader = default_loader - - _include(elem, loader, base_url, max_depth, set()) - - -def _include(elem, loader, base_url, max_depth, _parent_hrefs): - # look for xinclude elements - i = 0 - while i < len(elem): - e = elem[i] - if e.tag == XINCLUDE_INCLUDE: - # process xinclude directive - href = e.get("href") - if base_url: - href = urljoin(base_url, href) - parse = e.get("parse", "xml") - if parse == "xml": - if href in _parent_hrefs: - raise FatalIncludeError("recursive include of %s" % href) - if max_depth == 0: - raise LimitedRecursiveIncludeError( - "maximum xinclude depth reached when including file %s" % href) - _parent_hrefs.add(href) - node = loader(href, parse) - if node is None: - raise FatalIncludeError( - "cannot load %r as %r" % (href, parse) - ) - node = copy.copy(node) # FIXME: this makes little sense with recursive includes - _include(node, loader, href, max_depth - 1, _parent_hrefs) - _parent_hrefs.remove(href) - if e.tail: - node.tail = (node.tail or "") + e.tail - elem[i] = node - elif parse == "text": - text = loader(href, parse, e.get("encoding")) - if text is None: - raise FatalIncludeError( - "cannot load %r as %r" % (href, parse) - ) - if e.tail: - text += e.tail - if i: - node = elem[i-1] - node.tail = (node.tail or "") + text - else: - elem.text = (elem.text or "") + text - del elem[i] - continue - else: - raise FatalIncludeError( - "unknown parse type in xi:include tag (%r)" % parse - ) - elif e.tag == XINCLUDE_FALLBACK: - raise FatalIncludeError( - "xi:fallback tag must be child of xi:include (%r)" % e.tag - ) - else: - _include(e, loader, base_url, max_depth, _parent_hrefs) - i += 1 diff --git a/Python314_4_x86_Template/Lib/xml/etree/ElementPath.py b/Python314_4_x86_Template/Lib/xml/etree/ElementPath.py deleted file mode 100644 index dc6bd28c0..000000000 --- a/Python314_4_x86_Template/Lib/xml/etree/ElementPath.py +++ /dev/null @@ -1,423 +0,0 @@ -# -# ElementTree -# $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $ -# -# limited xpath support for element trees -# -# history: -# 2003-05-23 fl created -# 2003-05-28 fl added support for // etc -# 2003-08-27 fl fixed parsing of periods in element names -# 2007-09-10 fl new selection engine -# 2007-09-12 fl fixed parent selector -# 2007-09-13 fl added iterfind; changed findall to return a list -# 2007-11-30 fl added namespaces support -# 2009-10-30 fl added child element value filter -# -# Copyright (c) 2003-2009 by Fredrik Lundh. All rights reserved. -# -# fredrik@pythonware.com -# http://www.pythonware.com -# -# -------------------------------------------------------------------- -# The ElementTree toolkit is -# -# Copyright (c) 1999-2009 by Fredrik Lundh -# -# By obtaining, using, and/or copying this software and/or its -# associated documentation, you agree that you have read, understood, -# and will comply with the following terms and conditions: -# -# Permission to use, copy, modify, and distribute this software and -# its associated documentation for any purpose and without fee is -# hereby granted, provided that the above copyright notice appears in -# all copies, and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Secret Labs AB or the author not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -------------------------------------------------------------------- - -# Licensed to PSF under a Contributor Agreement. -# See https://www.python.org/psf/license for licensing details. - -## -# Implementation module for XPath support. There's usually no reason -# to import this module directly; the <b>ElementTree</b> does this for -# you, if needed. -## - -import re - -xpath_tokenizer_re = re.compile( - r"(" - r"'[^']*'|\"[^\"]*\"|" - r"::|" - r"//?|" - r"\.\.|" - r"\(\)|" - r"!=|" - r"[/.*:\[\]\(\)@=])|" - r"((?:\{[^}]+\})?[^/\[\]\(\)@!=\s]+)|" - r"\s+" - ) - -def xpath_tokenizer(pattern, namespaces=None): - default_namespace = namespaces.get('') if namespaces else None - parsing_attribute = False - for token in xpath_tokenizer_re.findall(pattern): - ttype, tag = token - if tag and tag[0] != "{": - if ":" in tag: - prefix, uri = tag.split(":", 1) - try: - if not namespaces: - raise KeyError - yield ttype, "{%s}%s" % (namespaces[prefix], uri) - except KeyError: - raise SyntaxError("prefix %r not found in prefix map" % prefix) from None - elif default_namespace and not parsing_attribute: - yield ttype, "{%s}%s" % (default_namespace, tag) - else: - yield token - parsing_attribute = False - else: - yield token - parsing_attribute = ttype == '@' - - -def get_parent_map(context): - parent_map = context.parent_map - if parent_map is None: - context.parent_map = parent_map = {} - for p in context.root.iter(): - for e in p: - parent_map[e] = p - return parent_map - - -def _is_wildcard_tag(tag): - return tag[:3] == '{*}' or tag[-2:] == '}*' - - -def _prepare_tag(tag): - _isinstance, _str = isinstance, str - if tag == '{*}*': - # Same as '*', but no comments or processing instructions. - # It can be a surprise that '*' includes those, but there is no - # justification for '{*}*' doing the same. - def select(context, result): - for elem in result: - if _isinstance(elem.tag, _str): - yield elem - elif tag == '{}*': - # Any tag that is not in a namespace. - def select(context, result): - for elem in result: - el_tag = elem.tag - if _isinstance(el_tag, _str) and el_tag[0] != '{': - yield elem - elif tag[:3] == '{*}': - # The tag in any (or no) namespace. - suffix = tag[2:] # '}name' - no_ns = slice(-len(suffix), None) - tag = tag[3:] - def select(context, result): - for elem in result: - el_tag = elem.tag - if el_tag == tag or _isinstance(el_tag, _str) and el_tag[no_ns] == suffix: - yield elem - elif tag[-2:] == '}*': - # Any tag in the given namespace. - ns = tag[:-1] - ns_only = slice(None, len(ns)) - def select(context, result): - for elem in result: - el_tag = elem.tag - if _isinstance(el_tag, _str) and el_tag[ns_only] == ns: - yield elem - else: - raise RuntimeError(f"internal parser error, got {tag}") - return select - - -def prepare_child(next, token): - tag = token[1] - if _is_wildcard_tag(tag): - select_tag = _prepare_tag(tag) - def select(context, result): - def select_child(result): - for elem in result: - yield from elem - return select_tag(context, select_child(result)) - else: - if tag[:2] == '{}': - tag = tag[2:] # '{}tag' == 'tag' - def select(context, result): - for elem in result: - for e in elem: - if e.tag == tag: - yield e - return select - -def prepare_star(next, token): - def select(context, result): - for elem in result: - yield from elem - return select - -def prepare_self(next, token): - def select(context, result): - yield from result - return select - -def prepare_descendant(next, token): - try: - token = next() - except StopIteration: - return - if token[0] == "*": - tag = "*" - elif not token[0]: - tag = token[1] - else: - raise SyntaxError("invalid descendant") - - if _is_wildcard_tag(tag): - select_tag = _prepare_tag(tag) - def select(context, result): - def select_child(result): - for elem in result: - for e in elem.iter(): - if e is not elem: - yield e - return select_tag(context, select_child(result)) - else: - if tag[:2] == '{}': - tag = tag[2:] # '{}tag' == 'tag' - def select(context, result): - for elem in result: - for e in elem.iter(tag): - if e is not elem: - yield e - return select - -def prepare_parent(next, token): - def select(context, result): - # FIXME: raise error if .. is applied at toplevel? - parent_map = get_parent_map(context) - result_map = {} - for elem in result: - if elem in parent_map: - parent = parent_map[elem] - if parent not in result_map: - result_map[parent] = None - yield parent - return select - -def prepare_predicate(next, token): - # FIXME: replace with real parser!!! refs: - # http://javascript.crockford.com/tdop/tdop.html - signature = [] - predicate = [] - while 1: - try: - token = next() - except StopIteration: - return - if token[0] == "]": - break - if token == ('', ''): - # ignore whitespace - continue - if token[0] and token[0][:1] in "'\"": - token = "'", token[0][1:-1] - signature.append(token[0] or "-") - predicate.append(token[1]) - signature = "".join(signature) - # use signature to determine predicate type - if signature == "@-": - # [@attribute] predicate - key = predicate[1] - def select(context, result): - for elem in result: - if elem.get(key) is not None: - yield elem - return select - if signature == "@-='" or signature == "@-!='": - # [@attribute='value'] or [@attribute!='value'] - key = predicate[1] - value = predicate[-1] - def select(context, result): - for elem in result: - if elem.get(key) == value: - yield elem - def select_negated(context, result): - for elem in result: - if (attr_value := elem.get(key)) is not None and attr_value != value: - yield elem - return select_negated if '!=' in signature else select - if signature == "-" and not re.match(r"\-?\d+$", predicate[0]): - # [tag] - tag = predicate[0] - def select(context, result): - for elem in result: - if elem.find(tag) is not None: - yield elem - return select - if signature == ".='" or signature == ".!='" or ( - (signature == "-='" or signature == "-!='") - and not re.match(r"\-?\d+$", predicate[0])): - # [.='value'] or [tag='value'] or [.!='value'] or [tag!='value'] - tag = predicate[0] - value = predicate[-1] - if tag: - def select(context, result): - for elem in result: - for e in elem.findall(tag): - if "".join(e.itertext()) == value: - yield elem - break - def select_negated(context, result): - for elem in result: - for e in elem.iterfind(tag): - if "".join(e.itertext()) != value: - yield elem - break - else: - def select(context, result): - for elem in result: - if "".join(elem.itertext()) == value: - yield elem - def select_negated(context, result): - for elem in result: - if "".join(elem.itertext()) != value: - yield elem - return select_negated if '!=' in signature else select - if signature == "-" or signature == "-()" or signature == "-()-": - # [index] or [last()] or [last()-index] - if signature == "-": - # [index] - index = int(predicate[0]) - 1 - if index < 0: - raise SyntaxError("XPath position >= 1 expected") - else: - if predicate[0] != "last": - raise SyntaxError("unsupported function") - if signature == "-()-": - try: - index = int(predicate[2]) - 1 - except ValueError: - raise SyntaxError("unsupported expression") - if index > -2: - raise SyntaxError("XPath offset from last() must be negative") - else: - index = -1 - def select(context, result): - parent_map = get_parent_map(context) - for elem in result: - try: - parent = parent_map[elem] - # FIXME: what if the selector is "*" ? - elems = list(parent.findall(elem.tag)) - if elems[index] is elem: - yield elem - except (IndexError, KeyError): - pass - return select - raise SyntaxError("invalid predicate") - -ops = { - "": prepare_child, - "*": prepare_star, - ".": prepare_self, - "..": prepare_parent, - "//": prepare_descendant, - "[": prepare_predicate, - } - -_cache = {} - -class _SelectorContext: - parent_map = None - def __init__(self, root): - self.root = root - -# -------------------------------------------------------------------- - -## -# Generate all matching objects. - -def iterfind(elem, path, namespaces=None): - # compile selector pattern - if path[-1:] == "/": - path = path + "*" # implicit all (FIXME: keep this?) - - cache_key = (path,) - if namespaces: - cache_key += tuple(sorted(namespaces.items())) - - try: - selector = _cache[cache_key] - except KeyError: - if len(_cache) > 100: - _cache.clear() - if path[:1] == "/": - raise SyntaxError("cannot use absolute path on element") - next = iter(xpath_tokenizer(path, namespaces)).__next__ - try: - token = next() - except StopIteration: - return - selector = [] - while 1: - try: - selector.append(ops[token[0]](next, token)) - except StopIteration: - raise SyntaxError("invalid path") from None - try: - token = next() - if token[0] == "/": - token = next() - except StopIteration: - break - _cache[cache_key] = selector - # execute selector pattern - result = [elem] - context = _SelectorContext(elem) - for select in selector: - result = select(context, result) - return result - -## -# Find first matching object. - -def find(elem, path, namespaces=None): - return next(iterfind(elem, path, namespaces), None) - -## -# Find all matching objects. - -def findall(elem, path, namespaces=None): - return list(iterfind(elem, path, namespaces)) - -## -# Find text for first matching object. - -def findtext(elem, path, default=None, namespaces=None): - try: - elem = next(iterfind(elem, path, namespaces)) - if elem.text is None: - return "" - return elem.text - except StopIteration: - return default diff --git a/Python314_4_x86_Template/Lib/xml/etree/ElementTree.py b/Python314_4_x86_Template/Lib/xml/etree/ElementTree.py deleted file mode 100644 index dafe5b1b8..000000000 --- a/Python314_4_x86_Template/Lib/xml/etree/ElementTree.py +++ /dev/null @@ -1,2102 +0,0 @@ -"""Lightweight XML support for Python. - - XML is an inherently hierarchical data format, and the most natural way to - represent it is with a tree. This module has two classes for this purpose: - - 1. ElementTree represents the whole XML document as a tree and - - 2. Element represents a single node in this tree. - - Interactions with the whole document (reading and writing to/from files) are - usually done on the ElementTree level. Interactions with a single XML element - and its sub-elements are done on the Element level. - - Element is a flexible container object designed to store hierarchical data - structures in memory. It can be described as a cross between a list and a - dictionary. Each Element has a number of properties associated with it: - - 'tag' - a string containing the element's name. - - 'attributes' - a Python dictionary storing the element's attributes. - - 'text' - a string containing the element's text content. - - 'tail' - an optional string containing text after the element's end tag. - - And a number of child elements stored in a Python sequence. - - To create an element instance, use the Element constructor, - or the SubElement factory function. - - You can also use the ElementTree class to wrap an element structure - and convert it to and from XML. - -""" - -#--------------------------------------------------------------------- -# Licensed to PSF under a Contributor Agreement. -# See https://www.python.org/psf/license for licensing details. -# -# ElementTree -# Copyright (c) 1999-2008 by Fredrik Lundh. All rights reserved. -# -# fredrik@pythonware.com -# http://www.pythonware.com -# -------------------------------------------------------------------- -# The ElementTree toolkit is -# -# Copyright (c) 1999-2008 by Fredrik Lundh -# -# By obtaining, using, and/or copying this software and/or its -# associated documentation, you agree that you have read, understood, -# and will comply with the following terms and conditions: -# -# Permission to use, copy, modify, and distribute this software and -# its associated documentation for any purpose and without fee is -# hereby granted, provided that the above copyright notice appears in -# all copies, and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Secret Labs AB or the author not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -------------------------------------------------------------------- - -__all__ = [ - # public symbols - "Comment", - "dump", - "Element", "ElementTree", - "fromstring", "fromstringlist", - "indent", "iselement", "iterparse", - "parse", "ParseError", - "PI", "ProcessingInstruction", - "QName", - "SubElement", - "tostring", "tostringlist", - "TreeBuilder", - "VERSION", - "XML", "XMLID", - "XMLParser", "XMLPullParser", - "register_namespace", - "canonicalize", "C14NWriterTarget", - ] - -VERSION = "1.3.0" - -import sys -import re -import warnings -import io -import collections -import collections.abc -import contextlib -import weakref - -from . import ElementPath - - -class ParseError(SyntaxError): - """An error when parsing an XML document. - - In addition to its exception value, a ParseError contains - two extra attributes: - 'code' - the specific exception code - 'position' - the line and column of the error - - """ - pass - -# -------------------------------------------------------------------- - - -def iselement(element): - """Return True if *element* appears to be an Element.""" - return hasattr(element, 'tag') - - -class Element: - """An XML element. - - This class is the reference implementation of the Element interface. - - An element's length is its number of subelements. That means if you - want to check if an element is truly empty, you should check BOTH - its length AND its text attribute. - - The element tag, attribute names, and attribute values can be either - bytes or strings. - - *tag* is the element name. *attrib* is an optional dictionary containing - element attributes. *extra* are additional element attributes given as - keyword arguments. - - Example form: - <tag attrib>text<child/>...</tag>tail - - """ - - tag = None - """The element's name.""" - - attrib = None - """Dictionary of the element's attributes.""" - - text = None - """ - Text before first subelement. This is either a string or the value None. - Note that if there is no text, this attribute may be either - None or the empty string, depending on the parser. - - """ - - tail = None - """ - Text after this element's end tag, but before the next sibling element's - start tag. This is either a string or the value None. Note that if there - was no text, this attribute may be either None or an empty string, - depending on the parser. - - """ - - def __init__(self, tag, attrib={}, **extra): - if not isinstance(attrib, dict): - raise TypeError("attrib must be dict, not %s" % ( - attrib.__class__.__name__,)) - self.tag = tag - self.attrib = {**attrib, **extra} - self._children = [] - - def __repr__(self): - return "<%s %r at %#x>" % (self.__class__.__name__, self.tag, id(self)) - - def makeelement(self, tag, attrib): - """Create a new element with the same type. - - *tag* is a string containing the element name. - *attrib* is a dictionary containing the element attributes. - - Do not call this method, use the SubElement factory function instead. - - """ - return self.__class__(tag, attrib) - - def __copy__(self): - elem = self.makeelement(self.tag, self.attrib) - elem.text = self.text - elem.tail = self.tail - elem[:] = self - return elem - - def __len__(self): - return len(self._children) - - def __bool__(self): - warnings.warn( - "Testing an element's truth value will always return True in " - "future versions. " - "Use specific 'len(elem)' or 'elem is not None' test instead.", - DeprecationWarning, stacklevel=2 - ) - return len(self._children) != 0 # emulate old behaviour, for now - - def __getitem__(self, index): - return self._children[index] - - def __setitem__(self, index, element): - if isinstance(index, slice): - for elt in element: - self._assert_is_element(elt) - else: - self._assert_is_element(element) - self._children[index] = element - - def __delitem__(self, index): - del self._children[index] - - def append(self, subelement): - """Add *subelement* to the end of this element. - - The new element will appear in document order after the last existing - subelement (or directly after the text, if it's the first subelement), - but before the end tag for this element. - - """ - self._assert_is_element(subelement) - self._children.append(subelement) - - def extend(self, elements): - """Append subelements from a sequence. - - *elements* is a sequence with zero or more elements. - - """ - for element in elements: - self._assert_is_element(element) - self._children.append(element) - - def insert(self, index, subelement): - """Insert *subelement* at position *index*.""" - self._assert_is_element(subelement) - self._children.insert(index, subelement) - - def _assert_is_element(self, e): - # Need to refer to the actual Python implementation, not the - # shadowing C implementation. - if not isinstance(e, _Element_Py): - raise TypeError('expected an Element, not %s' % type(e).__name__) - - def remove(self, subelement): - """Remove matching subelement. - - Unlike the find methods, this method compares elements based on - identity, NOT ON tag value or contents. To remove subelements by - other means, the easiest way is to use a list comprehension to - select what elements to keep, and then use slice assignment to update - the parent element. - - ValueError is raised if a matching element could not be found. - - """ - # assert iselement(element) - try: - self._children.remove(subelement) - except ValueError: - # to align the error message with the C implementation - raise ValueError("Element.remove(x): element not found") from None - - def find(self, path, namespaces=None): - """Find first matching element by tag name or path. - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return the first matching element, or None if no element was found. - - """ - return ElementPath.find(self, path, namespaces) - - def findtext(self, path, default=None, namespaces=None): - """Find text for first matching element by tag name or path. - - *path* is a string having either an element tag or an XPath, - *default* is the value to return if the element was not found, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return text content of first matching element, or default value if - none was found. Note that if an element is found having no text - content, the empty string is returned. - - """ - return ElementPath.findtext(self, path, default, namespaces) - - def findall(self, path, namespaces=None): - """Find all matching subelements by tag name or path. - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Returns list containing all matching elements in document order. - - """ - return ElementPath.findall(self, path, namespaces) - - def iterfind(self, path, namespaces=None): - """Find all matching subelements by tag name or path. - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return an iterable yielding all matching elements in document order. - - """ - return ElementPath.iterfind(self, path, namespaces) - - def clear(self): - """Reset element. - - This function removes all subelements, clears all attributes, and sets - the text and tail attributes to None. - - """ - self.attrib.clear() - self._children = [] - self.text = self.tail = None - - def get(self, key, default=None): - """Get element attribute. - - Equivalent to attrib.get, but some implementations may handle this a - bit more efficiently. *key* is what attribute to look for, and - *default* is what to return if the attribute was not found. - - Returns a string containing the attribute value, or the default if - attribute was not found. - - """ - return self.attrib.get(key, default) - - def set(self, key, value): - """Set element attribute. - - Equivalent to attrib[key] = value, but some implementations may handle - this a bit more efficiently. *key* is what attribute to set, and - *value* is the attribute value to set it to. - - """ - self.attrib[key] = value - - def keys(self): - """Get list of attribute names. - - Names are returned in an arbitrary order, just like an ordinary - Python dict. Equivalent to attrib.keys() - - """ - return self.attrib.keys() - - def items(self): - """Get element attributes as a sequence. - - The attributes are returned in arbitrary order. Equivalent to - attrib.items(). - - Return a list of (name, value) tuples. - - """ - return self.attrib.items() - - def iter(self, tag=None): - """Create tree iterator. - - The iterator loops over the element and all subelements in document - order, returning all elements with a matching tag. - - If the tree structure is modified during iteration, new or removed - elements may or may not be included. To get a stable set, use the - list() function on the iterator, and loop over the resulting list. - - *tag* is what tags to look for (default is to return all elements) - - Return an iterator containing all the matching elements. - - """ - if tag == "*": - tag = None - if tag is None or self.tag == tag: - yield self - for e in self._children: - yield from e.iter(tag) - - def itertext(self): - """Create text iterator. - - The iterator loops over the element and all subelements in document - order, returning all inner text. - - """ - tag = self.tag - if not isinstance(tag, str) and tag is not None: - return - t = self.text - if t: - yield t - for e in self: - yield from e.itertext() - t = e.tail - if t: - yield t - - -def SubElement(parent, tag, attrib={}, **extra): - """Subelement factory which creates an element instance, and appends it - to an existing parent. - - The element tag, attribute names, and attribute values can be either - bytes or Unicode strings. - - *parent* is the parent element, *tag* is the subelements name, *attrib* is - an optional directory containing element attributes, *extra* are - additional attributes given as keyword arguments. - - """ - attrib = {**attrib, **extra} - element = parent.makeelement(tag, attrib) - parent.append(element) - return element - - -def Comment(text=None): - """Comment element factory. - - This function creates a special element which the standard serializer - serializes as an XML comment. - - *text* is a string containing the comment string. - - """ - element = Element(Comment) - element.text = text - return element - - -def ProcessingInstruction(target, text=None): - """Processing Instruction element factory. - - This function creates a special element which the standard serializer - serializes as an XML comment. - - *target* is a string containing the processing instruction, *text* is a - string containing the processing instruction contents, if any. - - """ - element = Element(ProcessingInstruction) - element.text = target - if text: - element.text = element.text + " " + text - return element - -PI = ProcessingInstruction - - -class QName: - """Qualified name wrapper. - - This class can be used to wrap a QName attribute value in order to get - proper namespace handing on output. - - *text_or_uri* is a string containing the QName value either in the form - {uri}local, or if the tag argument is given, the URI part of a QName. - - *tag* is an optional argument which if given, will make the first - argument (text_or_uri) be interpreted as a URI, and this argument (tag) - be interpreted as a local name. - - """ - def __init__(self, text_or_uri, tag=None): - if tag: - text_or_uri = "{%s}%s" % (text_or_uri, tag) - self.text = text_or_uri - def __str__(self): - return self.text - def __repr__(self): - return '<%s %r>' % (self.__class__.__name__, self.text) - def __hash__(self): - return hash(self.text) - def __le__(self, other): - if isinstance(other, QName): - return self.text <= other.text - return self.text <= other - def __lt__(self, other): - if isinstance(other, QName): - return self.text < other.text - return self.text < other - def __ge__(self, other): - if isinstance(other, QName): - return self.text >= other.text - return self.text >= other - def __gt__(self, other): - if isinstance(other, QName): - return self.text > other.text - return self.text > other - def __eq__(self, other): - if isinstance(other, QName): - return self.text == other.text - return self.text == other - -# -------------------------------------------------------------------- - - -class ElementTree: - """An XML element hierarchy. - - This class also provides support for serialization to and from - standard XML. - - *element* is an optional root element node, - *file* is an optional file handle or file name of an XML file whose - contents will be used to initialize the tree with. - - """ - def __init__(self, element=None, file=None): - if element is not None and not iselement(element): - raise TypeError('expected an Element, not %s' % - type(element).__name__) - self._root = element # first node - if file: - self.parse(file) - - def getroot(self): - """Return root element of this tree.""" - return self._root - - def _setroot(self, element): - """Replace root element of this tree. - - This will discard the current contents of the tree and replace it - with the given element. Use with care! - - """ - if not iselement(element): - raise TypeError('expected an Element, not %s' - % type(element).__name__) - self._root = element - - def parse(self, source, parser=None): - """Load external XML document into element tree. - - *source* is a file name or file object, *parser* is an optional parser - instance that defaults to XMLParser. - - ParseError is raised if the parser fails to parse the document. - - Returns the root element of the given source document. - - """ - close_source = False - if not hasattr(source, "read"): - source = open(source, "rb") - close_source = True - try: - if parser is None: - # If no parser was specified, create a default XMLParser - parser = XMLParser() - if hasattr(parser, '_parse_whole'): - # The default XMLParser, when it comes from an accelerator, - # can define an internal _parse_whole API for efficiency. - # It can be used to parse the whole source without feeding - # it with chunks. - self._root = parser._parse_whole(source) - return self._root - while data := source.read(65536): - parser.feed(data) - self._root = parser.close() - return self._root - finally: - if close_source: - source.close() - - def iter(self, tag=None): - """Create and return tree iterator for the root element. - - The iterator loops over all elements in this tree, in document order. - - *tag* is a string with the tag name to iterate over - (default is to return all elements). - - """ - # assert self._root is not None - return self._root.iter(tag) - - def find(self, path, namespaces=None): - """Find first matching element by tag name or path. - - Same as getroot().find(path), which is Element.find() - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return the first matching element, or None if no element was found. - - """ - # assert self._root is not None - if path[:1] == "/": - path = "." + path - warnings.warn( - "This search is broken in 1.3 and earlier, and will be " - "fixed in a future version. If you rely on the current " - "behaviour, change it to %r" % path, - FutureWarning, stacklevel=2 - ) - return self._root.find(path, namespaces) - - def findtext(self, path, default=None, namespaces=None): - """Find first matching element by tag name or path. - - Same as getroot().findtext(path), which is Element.findtext() - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return the first matching element, or None if no element was found. - - """ - # assert self._root is not None - if path[:1] == "/": - path = "." + path - warnings.warn( - "This search is broken in 1.3 and earlier, and will be " - "fixed in a future version. If you rely on the current " - "behaviour, change it to %r" % path, - FutureWarning, stacklevel=2 - ) - return self._root.findtext(path, default, namespaces) - - def findall(self, path, namespaces=None): - """Find all matching subelements by tag name or path. - - Same as getroot().findall(path), which is Element.findall(). - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return list containing all matching elements in document order. - - """ - # assert self._root is not None - if path[:1] == "/": - path = "." + path - warnings.warn( - "This search is broken in 1.3 and earlier, and will be " - "fixed in a future version. If you rely on the current " - "behaviour, change it to %r" % path, - FutureWarning, stacklevel=2 - ) - return self._root.findall(path, namespaces) - - def iterfind(self, path, namespaces=None): - """Find all matching subelements by tag name or path. - - Same as getroot().iterfind(path), which is element.iterfind() - - *path* is a string having either an element tag or an XPath, - *namespaces* is an optional mapping from namespace prefix to full name. - - Return an iterable yielding all matching elements in document order. - - """ - # assert self._root is not None - if path[:1] == "/": - path = "." + path - warnings.warn( - "This search is broken in 1.3 and earlier, and will be " - "fixed in a future version. If you rely on the current " - "behaviour, change it to %r" % path, - FutureWarning, stacklevel=2 - ) - return self._root.iterfind(path, namespaces) - - def write(self, file_or_filename, - encoding=None, - xml_declaration=None, - default_namespace=None, - method=None, *, - short_empty_elements=True): - """Write element tree to a file as XML. - - Arguments: - *file_or_filename* -- file name or a file object opened for writing - - *encoding* -- the output encoding (default: US-ASCII) - - *xml_declaration* -- bool indicating if an XML declaration should be - added to the output. If None, an XML declaration - is added if encoding IS NOT either of: - US-ASCII, UTF-8, or Unicode - - *default_namespace* -- sets the default XML namespace (for "xmlns") - - *method* -- either "xml" (default), "html, "text", or "c14n" - - *short_empty_elements* -- controls the formatting of elements - that contain no content. If True (default) - they are emitted as a single self-closed - tag, otherwise they are emitted as a pair - of start/end tags - - """ - if self._root is None: - raise TypeError('ElementTree not initialized') - if not method: - method = "xml" - elif method not in _serialize: - raise ValueError("unknown method %r" % method) - if not encoding: - if method == "c14n": - encoding = "utf-8" - else: - encoding = "us-ascii" - with _get_writer(file_or_filename, encoding) as (write, declared_encoding): - if method == "xml" and (xml_declaration or - (xml_declaration is None and - encoding.lower() != "unicode" and - declared_encoding.lower() not in ("utf-8", "us-ascii"))): - write("<?xml version='1.0' encoding='%s'?>\n" % ( - declared_encoding,)) - if method == "text": - _serialize_text(write, self._root) - else: - qnames, namespaces = _namespaces(self._root, default_namespace) - serialize = _serialize[method] - serialize(write, self._root, qnames, namespaces, - short_empty_elements=short_empty_elements) - - def write_c14n(self, file): - # lxml.etree compatibility. use output method instead - return self.write(file, method="c14n") - -# -------------------------------------------------------------------- -# serialization support - -@contextlib.contextmanager -def _get_writer(file_or_filename, encoding): - # returns text write method and release all resources after using - try: - write = file_or_filename.write - except AttributeError: - # file_or_filename is a file name - if encoding.lower() == "unicode": - encoding="utf-8" - with open(file_or_filename, "w", encoding=encoding, - errors="xmlcharrefreplace") as file: - yield file.write, encoding - else: - # file_or_filename is a file-like object - # encoding determines if it is a text or binary writer - if encoding.lower() == "unicode": - # use a text writer as is - yield write, getattr(file_or_filename, "encoding", None) or "utf-8" - else: - # wrap a binary writer with TextIOWrapper - with contextlib.ExitStack() as stack: - if isinstance(file_or_filename, io.BufferedIOBase): - file = file_or_filename - elif isinstance(file_or_filename, io.RawIOBase): - file = io.BufferedWriter(file_or_filename) - # Keep the original file open when the BufferedWriter is - # destroyed - stack.callback(file.detach) - else: - # This is to handle passed objects that aren't in the - # IOBase hierarchy, but just have a write method - file = io.BufferedIOBase() - file.writable = lambda: True - file.write = write - try: - # TextIOWrapper uses this methods to determine - # if BOM (for UTF-16, etc) should be added - file.seekable = file_or_filename.seekable - file.tell = file_or_filename.tell - except AttributeError: - pass - file = io.TextIOWrapper(file, - encoding=encoding, - errors="xmlcharrefreplace", - newline="\n") - # Keep the original file open when the TextIOWrapper is - # destroyed - stack.callback(file.detach) - yield file.write, encoding - -def _namespaces(elem, default_namespace=None): - # identify namespaces used in this tree - - # maps qnames to *encoded* prefix:local names - qnames = {None: None} - - # maps uri:s to prefixes - namespaces = {} - if default_namespace: - namespaces[default_namespace] = "" - - def add_qname(qname): - # calculate serialized qname representation - try: - if qname[:1] == "{": - uri, tag = qname[1:].rsplit("}", 1) - prefix = namespaces.get(uri) - if prefix is None: - prefix = _namespace_map.get(uri) - if prefix is None: - prefix = "ns%d" % len(namespaces) - if prefix != "xml": - namespaces[uri] = prefix - if prefix: - qnames[qname] = "%s:%s" % (prefix, tag) - else: - qnames[qname] = tag # default element - else: - if default_namespace: - # FIXME: can this be handled in XML 1.0? - raise ValueError( - "cannot use non-qualified names with " - "default_namespace option" - ) - qnames[qname] = qname - except TypeError: - _raise_serialization_error(qname) - - # populate qname and namespaces table - for elem in elem.iter(): - tag = elem.tag - if isinstance(tag, QName): - if tag.text not in qnames: - add_qname(tag.text) - elif isinstance(tag, str): - if tag not in qnames: - add_qname(tag) - elif tag is not None and tag is not Comment and tag is not PI: - _raise_serialization_error(tag) - for key, value in elem.items(): - if isinstance(key, QName): - key = key.text - if key not in qnames: - add_qname(key) - if isinstance(value, QName) and value.text not in qnames: - add_qname(value.text) - text = elem.text - if isinstance(text, QName) and text.text not in qnames: - add_qname(text.text) - return qnames, namespaces - -def _serialize_xml(write, elem, qnames, namespaces, - short_empty_elements, **kwargs): - tag = elem.tag - text = elem.text - if tag is Comment: - write("<!--%s-->" % text) - elif tag is ProcessingInstruction: - write("<?%s?>" % text) - else: - tag = qnames[tag] - if tag is None: - if text: - write(_escape_cdata(text)) - for e in elem: - _serialize_xml(write, e, qnames, None, - short_empty_elements=short_empty_elements) - else: - write("<" + tag) - items = list(elem.items()) - if items or namespaces: - if namespaces: - for v, k in sorted(namespaces.items(), - key=lambda x: x[1]): # sort on prefix - if k: - k = ":" + k - write(" xmlns%s=\"%s\"" % ( - k, - _escape_attrib(v) - )) - for k, v in items: - if isinstance(k, QName): - k = k.text - if isinstance(v, QName): - v = qnames[v.text] - else: - v = _escape_attrib(v) - write(" %s=\"%s\"" % (qnames[k], v)) - if text or len(elem) or not short_empty_elements: - write(">") - if text: - write(_escape_cdata(text)) - for e in elem: - _serialize_xml(write, e, qnames, None, - short_empty_elements=short_empty_elements) - write("</" + tag + ">") - else: - write(" />") - if elem.tail: - write(_escape_cdata(elem.tail)) - -HTML_EMPTY = {"area", "base", "basefont", "br", "col", "embed", "frame", "hr", - "img", "input", "isindex", "link", "meta", "param", "source", - "track", "wbr"} - -def _serialize_html(write, elem, qnames, namespaces, **kwargs): - tag = elem.tag - text = elem.text - if tag is Comment: - write("<!--%s-->" % _escape_cdata(text)) - elif tag is ProcessingInstruction: - write("<?%s?>" % _escape_cdata(text)) - else: - tag = qnames[tag] - if tag is None: - if text: - write(_escape_cdata(text)) - for e in elem: - _serialize_html(write, e, qnames, None) - else: - write("<" + tag) - items = list(elem.items()) - if items or namespaces: - if namespaces: - for v, k in sorted(namespaces.items(), - key=lambda x: x[1]): # sort on prefix - if k: - k = ":" + k - write(" xmlns%s=\"%s\"" % ( - k, - _escape_attrib(v) - )) - for k, v in items: - if isinstance(k, QName): - k = k.text - if isinstance(v, QName): - v = qnames[v.text] - else: - v = _escape_attrib_html(v) - # FIXME: handle boolean attributes - write(" %s=\"%s\"" % (qnames[k], v)) - write(">") - ltag = tag.lower() - if text: - if ltag == "script" or ltag == "style": - write(text) - else: - write(_escape_cdata(text)) - for e in elem: - _serialize_html(write, e, qnames, None) - if ltag not in HTML_EMPTY: - write("</" + tag + ">") - if elem.tail: - write(_escape_cdata(elem.tail)) - -def _serialize_text(write, elem): - for part in elem.itertext(): - write(part) - if elem.tail: - write(elem.tail) - -_serialize = { - "xml": _serialize_xml, - "html": _serialize_html, - "text": _serialize_text, -# this optional method is imported at the end of the module -# "c14n": _serialize_c14n, -} - - -def register_namespace(prefix, uri): - """Register a namespace prefix. - - The registry is global, and any existing mapping for either the - given prefix or the namespace URI will be removed. - - *prefix* is the namespace prefix, *uri* is a namespace uri. Tags and - attributes in this namespace will be serialized with prefix if possible. - - ValueError is raised if prefix is reserved or is invalid. - - """ - if re.match(r"ns\d+$", prefix): - raise ValueError("Prefix format reserved for internal use") - for k, v in list(_namespace_map.items()): - if k == uri or v == prefix: - del _namespace_map[k] - _namespace_map[uri] = prefix - -_namespace_map = { - # "well-known" namespace prefixes - "http://www.w3.org/XML/1998/namespace": "xml", - "http://www.w3.org/1999/xhtml": "html", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", - "http://schemas.xmlsoap.org/wsdl/": "wsdl", - # xml schema - "http://www.w3.org/2001/XMLSchema": "xs", - "http://www.w3.org/2001/XMLSchema-instance": "xsi", - # dublin core - "http://purl.org/dc/elements/1.1/": "dc", -} -# For tests and troubleshooting -register_namespace._namespace_map = _namespace_map - -def _raise_serialization_error(text): - raise TypeError( - "cannot serialize %r (type %s)" % (text, type(text).__name__) - ) - -def _escape_cdata(text): - # escape character data - try: - # it's worth avoiding do-nothing calls for strings that are - # shorter than 500 characters, or so. assume that's, by far, - # the most common case in most applications. - if "&" in text: - text = text.replace("&", "&amp;") - if "<" in text: - text = text.replace("<", "&lt;") - if ">" in text: - text = text.replace(">", "&gt;") - return text - except (TypeError, AttributeError): - _raise_serialization_error(text) - -def _escape_attrib(text): - # escape attribute value - try: - if "&" in text: - text = text.replace("&", "&amp;") - if "<" in text: - text = text.replace("<", "&lt;") - if ">" in text: - text = text.replace(">", "&gt;") - if "\"" in text: - text = text.replace("\"", "&quot;") - # Although section 2.11 of the XML specification states that CR or - # CR LN should be replaced with just LN, it applies only to EOLNs - # which take part of organizing file into lines. Within attributes, - # we are replacing these with entity numbers, so they do not count. - # http://www.w3.org/TR/REC-xml/#sec-line-ends - # The current solution, contained in following six lines, was - # discussed in issue 17582 and 39011. - if "\r" in text: - text = text.replace("\r", "&#13;") - if "\n" in text: - text = text.replace("\n", "&#10;") - if "\t" in text: - text = text.replace("\t", "&#09;") - return text - except (TypeError, AttributeError): - _raise_serialization_error(text) - -def _escape_attrib_html(text): - # escape attribute value - try: - if "&" in text: - text = text.replace("&", "&amp;") - if ">" in text: - text = text.replace(">", "&gt;") - if "\"" in text: - text = text.replace("\"", "&quot;") - return text - except (TypeError, AttributeError): - _raise_serialization_error(text) - -# -------------------------------------------------------------------- - -def tostring(element, encoding=None, method=None, *, - xml_declaration=None, default_namespace=None, - short_empty_elements=True): - """Generate string representation of XML element. - - All subelements are included. If encoding is "unicode", a string - is returned. Otherwise a bytestring is returned. - - *element* is an Element instance, *encoding* is an optional output - encoding defaulting to US-ASCII, *method* is an optional output which can - be one of "xml" (default), "html", "text" or "c14n", *default_namespace* - sets the default XML namespace (for "xmlns"). - - Returns an (optionally) encoded string containing the XML data. - - """ - stream = io.StringIO() if encoding == 'unicode' else io.BytesIO() - ElementTree(element).write(stream, encoding, - xml_declaration=xml_declaration, - default_namespace=default_namespace, - method=method, - short_empty_elements=short_empty_elements) - return stream.getvalue() - -class _ListDataStream(io.BufferedIOBase): - """An auxiliary stream accumulating into a list reference.""" - def __init__(self, lst): - self.lst = lst - - def writable(self): - return True - - def seekable(self): - return True - - def write(self, b): - self.lst.append(b) - - def tell(self): - return len(self.lst) - -def tostringlist(element, encoding=None, method=None, *, - xml_declaration=None, default_namespace=None, - short_empty_elements=True): - lst = [] - stream = _ListDataStream(lst) - ElementTree(element).write(stream, encoding, - xml_declaration=xml_declaration, - default_namespace=default_namespace, - method=method, - short_empty_elements=short_empty_elements) - return lst - - -def dump(elem): - """Write element tree or element structure to sys.stdout. - - This function should be used for debugging only. - - *elem* is either an ElementTree, or a single Element. The exact output - format is implementation dependent. In this version, it's written as an - ordinary XML file. - - """ - # debugging - if not isinstance(elem, ElementTree): - elem = ElementTree(elem) - elem.write(sys.stdout, encoding="unicode") - tail = elem.getroot().tail - if not tail or tail[-1] != "\n": - sys.stdout.write("\n") - - -def indent(tree, space=" ", level=0): - """Indent an XML document by inserting newlines and indentation space - after elements. - - *tree* is the ElementTree or Element to modify. The (root) element - itself will not be changed, but the tail text of all elements in its - subtree will be adapted. - - *space* is the whitespace to insert for each indentation level, two - space characters by default. - - *level* is the initial indentation level. Setting this to a higher - value than 0 can be used for indenting subtrees that are more deeply - nested inside of a document. - """ - if isinstance(tree, ElementTree): - tree = tree.getroot() - if level < 0: - raise ValueError(f"Initial indentation level must be >= 0, got {level}") - if not len(tree): - return - - # Reduce the memory consumption by reusing indentation strings. - indentations = ["\n" + level * space] - - def _indent_children(elem, level): - # Start a new indentation level for the first child. - child_level = level + 1 - try: - child_indentation = indentations[child_level] - except IndexError: - child_indentation = indentations[level] + space - indentations.append(child_indentation) - - if not elem.text or not elem.text.strip(): - elem.text = child_indentation - - for child in elem: - if len(child): - _indent_children(child, child_level) - if not child.tail or not child.tail.strip(): - child.tail = child_indentation - - # Dedent after the last child by overwriting the previous indentation. - if not child.tail.strip(): - child.tail = indentations[level] - - _indent_children(tree, 0) - - -# -------------------------------------------------------------------- -# parsing - - -def parse(source, parser=None): - """Parse XML document into element tree. - - *source* is a filename or file object containing XML data, - *parser* is an optional parser instance defaulting to XMLParser. - - Return an ElementTree instance. - - """ - tree = ElementTree() - tree.parse(source, parser) - return tree - - -def iterparse(source, events=None, parser=None): - """Incrementally parse XML document into ElementTree. - - This class also reports what's going on to the user based on the - *events* it is initialized with. The supported events are the strings - "start", "end", "start-ns" and "end-ns" (the "ns" events are used to get - detailed namespace information). If *events* is omitted, only - "end" events are reported. - - *source* is a filename or file object containing XML data, *events* is - a list of events to report back, *parser* is an optional parser instance. - - Returns an iterator providing (event, elem) pairs. - - """ - # Use the internal, undocumented _parser argument for now; When the - # parser argument of iterparse is removed, this can be killed. - pullparser = XMLPullParser(events=events, _parser=parser) - - if not hasattr(source, "read"): - source = open(source, "rb") - close_source = True - else: - close_source = False - - def iterator(source): - try: - while True: - yield from pullparser.read_events() - # load event buffer - data = source.read(16 * 1024) - if not data: - break - pullparser.feed(data) - root = pullparser._close_and_return_root() - yield from pullparser.read_events() - it = wr() - if it is not None: - it.root = root - finally: - if close_source: - source.close() - - gen = iterator(source) - class IterParseIterator(collections.abc.Iterator): - __next__ = gen.__next__ - def close(self): - if close_source: - source.close() - gen.close() - - def __del__(self): - # TODO: Emit a ResourceWarning if it was not explicitly closed. - # (When the close() method will be supported in all maintained Python versions.) - if close_source: - source.close() - - it = IterParseIterator() - it.root = None - wr = weakref.ref(it) - return it - - -class XMLPullParser: - - def __init__(self, events=None, *, _parser=None): - # The _parser argument is for internal use only and must not be relied - # upon in user code. It will be removed in a future release. - # See https://bugs.python.org/issue17741 for more details. - - self._events_queue = collections.deque() - self._parser = _parser or XMLParser(target=TreeBuilder()) - # wire up the parser for event reporting - if events is None: - events = ("end",) - self._parser._setevents(self._events_queue, events) - - def feed(self, data): - """Feed encoded data to parser.""" - if self._parser is None: - raise ValueError("feed() called after end of stream") - if data: - try: - self._parser.feed(data) - except SyntaxError as exc: - self._events_queue.append(exc) - - def _close_and_return_root(self): - # iterparse needs this to set its root attribute properly :( - root = self._parser.close() - self._parser = None - return root - - def close(self): - """Finish feeding data to parser. - - Unlike XMLParser, does not return the root element. Use - read_events() to consume elements from XMLPullParser. - """ - self._close_and_return_root() - - def read_events(self): - """Return an iterator over currently available (event, elem) pairs. - - Events are consumed from the internal event queue as they are - retrieved from the iterator. - """ - events = self._events_queue - while events: - event = events.popleft() - if isinstance(event, Exception): - raise event - else: - yield event - - def flush(self): - if self._parser is None: - raise ValueError("flush() called after end of stream") - self._parser.flush() - - -def XML(text, parser=None): - """Parse XML document from string constant. - - This function can be used to embed "XML Literals" in Python code. - - *text* is a string containing XML data, *parser* is an - optional parser instance, defaulting to the standard XMLParser. - - Returns an Element instance. - - """ - if not parser: - parser = XMLParser(target=TreeBuilder()) - parser.feed(text) - return parser.close() - - -def XMLID(text, parser=None): - """Parse XML document from string constant for its IDs. - - *text* is a string containing XML data, *parser* is an - optional parser instance, defaulting to the standard XMLParser. - - Returns an (Element, dict) tuple, in which the - dict maps element id:s to elements. - - """ - if not parser: - parser = XMLParser(target=TreeBuilder()) - parser.feed(text) - tree = parser.close() - ids = {} - for elem in tree.iter(): - id = elem.get("id") - if id: - ids[id] = elem - return tree, ids - -# Parse XML document from string constant. Alias for XML(). -fromstring = XML - -def fromstringlist(sequence, parser=None): - """Parse XML document from sequence of string fragments. - - *sequence* is a list of other sequence, *parser* is an optional parser - instance, defaulting to the standard XMLParser. - - Returns an Element instance. - - """ - if not parser: - parser = XMLParser(target=TreeBuilder()) - for text in sequence: - parser.feed(text) - return parser.close() - -# -------------------------------------------------------------------- - - -class TreeBuilder: - """Generic element structure builder. - - This builder converts a sequence of start, data, and end method - calls to a well-formed element structure. - - You can use this class to build an element structure using a custom XML - parser, or a parser for some other XML-like format. - - *element_factory* is an optional element factory which is called - to create new Element instances, as necessary. - - *comment_factory* is a factory to create comments to be used instead of - the standard factory. If *insert_comments* is false (the default), - comments will not be inserted into the tree. - - *pi_factory* is a factory to create processing instructions to be used - instead of the standard factory. If *insert_pis* is false (the default), - processing instructions will not be inserted into the tree. - """ - def __init__(self, element_factory=None, *, - comment_factory=None, pi_factory=None, - insert_comments=False, insert_pis=False): - self._data = [] # data collector - self._elem = [] # element stack - self._last = None # last element - self._root = None # root element - self._tail = None # true if we're after an end tag - if comment_factory is None: - comment_factory = Comment - self._comment_factory = comment_factory - self.insert_comments = insert_comments - if pi_factory is None: - pi_factory = ProcessingInstruction - self._pi_factory = pi_factory - self.insert_pis = insert_pis - if element_factory is None: - element_factory = Element - self._factory = element_factory - - def close(self): - """Flush builder buffers and return toplevel document Element.""" - assert len(self._elem) == 0, "missing end tags" - assert self._root is not None, "missing toplevel element" - return self._root - - def _flush(self): - if self._data: - if self._last is not None: - text = "".join(self._data) - if self._tail: - assert self._last.tail is None, "internal error (tail)" - self._last.tail = text - else: - assert self._last.text is None, "internal error (text)" - self._last.text = text - self._data = [] - - def data(self, data): - """Add text to current element.""" - self._data.append(data) - - def start(self, tag, attrs): - """Open new element and return it. - - *tag* is the element name, *attrs* is a dict containing element - attributes. - - """ - self._flush() - self._last = elem = self._factory(tag, attrs) - if self._elem: - self._elem[-1].append(elem) - elif self._root is None: - self._root = elem - self._elem.append(elem) - self._tail = 0 - return elem - - def end(self, tag): - """Close and return current Element. - - *tag* is the element name. - - """ - self._flush() - self._last = self._elem.pop() - assert self._last.tag == tag,\ - "end tag mismatch (expected %s, got %s)" % ( - self._last.tag, tag) - self._tail = 1 - return self._last - - def comment(self, text): - """Create a comment using the comment_factory. - - *text* is the text of the comment. - """ - return self._handle_single( - self._comment_factory, self.insert_comments, text) - - def pi(self, target, text=None): - """Create a processing instruction using the pi_factory. - - *target* is the target name of the processing instruction. - *text* is the data of the processing instruction, or ''. - """ - return self._handle_single( - self._pi_factory, self.insert_pis, target, text) - - def _handle_single(self, factory, insert, *args): - elem = factory(*args) - if insert: - self._flush() - self._last = elem - if self._elem: - self._elem[-1].append(elem) - self._tail = 1 - return elem - - -# also see ElementTree and TreeBuilder -class XMLParser: - """Element structure builder for XML source data based on the expat parser. - - *target* is an optional target object which defaults to an instance of the - standard TreeBuilder class, *encoding* is an optional encoding string - which if given, overrides the encoding specified in the XML file: - http://www.iana.org/assignments/character-sets - - """ - - def __init__(self, *, target=None, encoding=None): - try: - from xml.parsers import expat - except ImportError: - try: - import pyexpat as expat - except ImportError: - raise ImportError( - "No module named expat; use SimpleXMLTreeBuilder instead" - ) - parser = expat.ParserCreate(encoding, "}") - if target is None: - target = TreeBuilder() - # underscored names are provided for compatibility only - self.parser = self._parser = parser - self.target = self._target = target - self._error = expat.error - self._names = {} # name memo cache - # main callbacks - parser.DefaultHandlerExpand = self._default - if hasattr(target, 'start'): - parser.StartElementHandler = self._start - if hasattr(target, 'end'): - parser.EndElementHandler = self._end - if hasattr(target, 'start_ns'): - parser.StartNamespaceDeclHandler = self._start_ns - if hasattr(target, 'end_ns'): - parser.EndNamespaceDeclHandler = self._end_ns - if hasattr(target, 'data'): - parser.CharacterDataHandler = target.data - # miscellaneous callbacks - if hasattr(target, 'comment'): - parser.CommentHandler = target.comment - if hasattr(target, 'pi'): - parser.ProcessingInstructionHandler = target.pi - # Configure pyexpat: buffering, new-style attribute handling. - parser.buffer_text = 1 - parser.ordered_attributes = 1 - self._doctype = None - self.entity = {} - try: - self.version = "Expat %d.%d.%d" % expat.version_info - except AttributeError: - pass # unknown - - def _setevents(self, events_queue, events_to_report): - # Internal API for XMLPullParser - # events_to_report: a list of events to report during parsing (same as - # the *events* of XMLPullParser's constructor. - # events_queue: a list of actual parsing events that will be populated - # by the underlying parser. - # - parser = self._parser - append = events_queue.append - for event_name in events_to_report: - if event_name == "start": - parser.ordered_attributes = 1 - def handler(tag, attrib_in, event=event_name, append=append, - start=self._start): - append((event, start(tag, attrib_in))) - parser.StartElementHandler = handler - elif event_name == "end": - def handler(tag, event=event_name, append=append, - end=self._end): - append((event, end(tag))) - parser.EndElementHandler = handler - elif event_name == "start-ns": - # TreeBuilder does not implement .start_ns() - if hasattr(self.target, "start_ns"): - def handler(prefix, uri, event=event_name, append=append, - start_ns=self._start_ns): - append((event, start_ns(prefix, uri))) - else: - def handler(prefix, uri, event=event_name, append=append): - append((event, (prefix or '', uri or ''))) - parser.StartNamespaceDeclHandler = handler - elif event_name == "end-ns": - # TreeBuilder does not implement .end_ns() - if hasattr(self.target, "end_ns"): - def handler(prefix, event=event_name, append=append, - end_ns=self._end_ns): - append((event, end_ns(prefix))) - else: - def handler(prefix, event=event_name, append=append): - append((event, None)) - parser.EndNamespaceDeclHandler = handler - elif event_name == 'comment': - def handler(text, event=event_name, append=append, self=self): - append((event, self.target.comment(text))) - parser.CommentHandler = handler - elif event_name == 'pi': - def handler(pi_target, data, event=event_name, append=append, - self=self): - append((event, self.target.pi(pi_target, data))) - parser.ProcessingInstructionHandler = handler - else: - raise ValueError("unknown event %r" % event_name) - - def _raiseerror(self, value): - err = ParseError(value) - err.code = value.code - err.position = value.lineno, value.offset - raise err - - def _fixname(self, key): - # expand qname, and convert name string to ascii, if possible - try: - name = self._names[key] - except KeyError: - name = key - if "}" in name: - name = "{" + name - self._names[key] = name - return name - - def _start_ns(self, prefix, uri): - return self.target.start_ns(prefix or '', uri or '') - - def _end_ns(self, prefix): - return self.target.end_ns(prefix or '') - - def _start(self, tag, attr_list): - # Handler for expat's StartElementHandler. Since ordered_attributes - # is set, the attributes are reported as a list of alternating - # attribute name,value. - fixname = self._fixname - tag = fixname(tag) - attrib = {} - if attr_list: - for i in range(0, len(attr_list), 2): - attrib[fixname(attr_list[i])] = attr_list[i+1] - return self.target.start(tag, attrib) - - def _end(self, tag): - return self.target.end(self._fixname(tag)) - - def _default(self, text): - prefix = text[:1] - if prefix == "&": - # deal with undefined entities - try: - data_handler = self.target.data - except AttributeError: - return - try: - data_handler(self.entity[text[1:-1]]) - except KeyError: - from xml.parsers import expat - err = expat.error( - "undefined entity %s: line %d, column %d" % - (text, self.parser.ErrorLineNumber, - self.parser.ErrorColumnNumber) - ) - err.code = 11 # XML_ERROR_UNDEFINED_ENTITY - err.lineno = self.parser.ErrorLineNumber - err.offset = self.parser.ErrorColumnNumber - raise err - elif prefix == "<" and text[:9] == "<!DOCTYPE": - self._doctype = [] # inside a doctype declaration - elif self._doctype is not None: - # parse doctype contents - if prefix == ">": - self._doctype = None - return - text = text.strip() - if not text: - return - self._doctype.append(text) - n = len(self._doctype) - if n > 2: - type = self._doctype[1] - if type == "PUBLIC" and n == 4: - name, type, pubid, system = self._doctype - if pubid: - pubid = pubid[1:-1] - elif type == "SYSTEM" and n == 3: - name, type, system = self._doctype - pubid = None - else: - return - if hasattr(self.target, "doctype"): - self.target.doctype(name, pubid, system[1:-1]) - elif hasattr(self, "doctype"): - warnings.warn( - "The doctype() method of XMLParser is ignored. " - "Define doctype() method on the TreeBuilder target.", - RuntimeWarning) - - self._doctype = None - - def feed(self, data): - """Feed encoded data to parser.""" - try: - self.parser.Parse(data, False) - except self._error as v: - self._raiseerror(v) - - def close(self): - """Finish feeding data to parser and return element structure.""" - try: - self.parser.Parse(b"", True) # end of data - except self._error as v: - self._raiseerror(v) - try: - close_handler = self.target.close - except AttributeError: - pass - else: - return close_handler() - finally: - # get rid of circular references - del self.parser, self._parser - del self.target, self._target - - def flush(self): - was_enabled = self.parser.GetReparseDeferralEnabled() - try: - self.parser.SetReparseDeferralEnabled(False) - self.parser.Parse(b"", False) - except self._error as v: - self._raiseerror(v) - finally: - self.parser.SetReparseDeferralEnabled(was_enabled) - -# -------------------------------------------------------------------- -# C14N 2.0 - -def canonicalize(xml_data=None, *, out=None, from_file=None, **options): - """Convert XML to its C14N 2.0 serialised form. - - If *out* is provided, it must be a file or file-like object that receives - the serialised canonical XML output (text, not bytes) through its ``.write()`` - method. To write to a file, open it in text mode with encoding "utf-8". - If *out* is not provided, this function returns the output as text string. - - Either *xml_data* (an XML string) or *from_file* (a file path or - file-like object) must be provided as input. - - The configuration options are the same as for the ``C14NWriterTarget``. - """ - if xml_data is None and from_file is None: - raise ValueError("Either 'xml_data' or 'from_file' must be provided as input") - sio = None - if out is None: - sio = out = io.StringIO() - - parser = XMLParser(target=C14NWriterTarget(out.write, **options)) - - if xml_data is not None: - parser.feed(xml_data) - parser.close() - elif from_file is not None: - parse(from_file, parser=parser) - - return sio.getvalue() if sio is not None else None - - -_looks_like_prefix_name = re.compile(r'^\w+:\w+$', re.UNICODE).match - - -class C14NWriterTarget: - """ - Canonicalization writer target for the XMLParser. - - Serialises parse events to XML C14N 2.0. - - The *write* function is used for writing out the resulting data stream - as text (not bytes). To write to a file, open it in text mode with encoding - "utf-8" and pass its ``.write`` method. - - Configuration options: - - - *with_comments*: set to true to include comments - - *strip_text*: set to true to strip whitespace before and after text content - - *rewrite_prefixes*: set to true to replace namespace prefixes by "n{number}" - - *qname_aware_tags*: a set of qname aware tag names in which prefixes - should be replaced in text content - - *qname_aware_attrs*: a set of qname aware attribute names in which prefixes - should be replaced in text content - - *exclude_attrs*: a set of attribute names that should not be serialised - - *exclude_tags*: a set of tag names that should not be serialised - """ - def __init__(self, write, *, - with_comments=False, strip_text=False, rewrite_prefixes=False, - qname_aware_tags=None, qname_aware_attrs=None, - exclude_attrs=None, exclude_tags=None): - self._write = write - self._data = [] - self._with_comments = with_comments - self._strip_text = strip_text - self._exclude_attrs = set(exclude_attrs) if exclude_attrs else None - self._exclude_tags = set(exclude_tags) if exclude_tags else None - - self._rewrite_prefixes = rewrite_prefixes - if qname_aware_tags: - self._qname_aware_tags = set(qname_aware_tags) - else: - self._qname_aware_tags = None - if qname_aware_attrs: - self._find_qname_aware_attrs = set(qname_aware_attrs).intersection - else: - self._find_qname_aware_attrs = None - - # Stack with globally and newly declared namespaces as (uri, prefix) pairs. - self._declared_ns_stack = [[ - ("http://www.w3.org/XML/1998/namespace", "xml"), - ]] - # Stack with user declared namespace prefixes as (uri, prefix) pairs. - self._ns_stack = [] - if not rewrite_prefixes: - self._ns_stack.append(list(_namespace_map.items())) - self._ns_stack.append([]) - self._prefix_map = {} - self._preserve_space = [False] - self._pending_start = None - self._root_seen = False - self._root_done = False - self._ignored_depth = 0 - - def _iter_namespaces(self, ns_stack, _reversed=reversed): - for namespaces in _reversed(ns_stack): - if namespaces: # almost no element declares new namespaces - yield from namespaces - - def _resolve_prefix_name(self, prefixed_name): - prefix, name = prefixed_name.split(':', 1) - for uri, p in self._iter_namespaces(self._ns_stack): - if p == prefix: - return f'{{{uri}}}{name}' - raise ValueError(f'Prefix {prefix} of QName "{prefixed_name}" is not declared in scope') - - def _qname(self, qname, uri=None): - if uri is None: - uri, tag = qname[1:].rsplit('}', 1) if qname[:1] == '{' else ('', qname) - else: - tag = qname - - prefixes_seen = set() - for u, prefix in self._iter_namespaces(self._declared_ns_stack): - if u == uri and prefix not in prefixes_seen: - return f'{prefix}:{tag}' if prefix else tag, tag, uri - prefixes_seen.add(prefix) - - # Not declared yet => add new declaration. - if self._rewrite_prefixes: - if uri in self._prefix_map: - prefix = self._prefix_map[uri] - else: - prefix = self._prefix_map[uri] = f'n{len(self._prefix_map)}' - self._declared_ns_stack[-1].append((uri, prefix)) - return f'{prefix}:{tag}', tag, uri - - if not uri and '' not in prefixes_seen: - # No default namespace declared => no prefix needed. - return tag, tag, uri - - for u, prefix in self._iter_namespaces(self._ns_stack): - if u == uri: - self._declared_ns_stack[-1].append((uri, prefix)) - return f'{prefix}:{tag}' if prefix else tag, tag, uri - - if not uri: - # As soon as a default namespace is defined, - # anything that has no namespace (and thus, no prefix) goes there. - return tag, tag, uri - - raise ValueError(f'Namespace "{uri}" is not declared in scope') - - def data(self, data): - if not self._ignored_depth: - self._data.append(data) - - def _flush(self, _join_text=''.join): - data = _join_text(self._data) - del self._data[:] - if self._strip_text and not self._preserve_space[-1]: - data = data.strip() - if self._pending_start is not None: - args, self._pending_start = self._pending_start, None - qname_text = data if data and _looks_like_prefix_name(data) else None - self._start(*args, qname_text) - if qname_text is not None: - return - if data and self._root_seen: - self._write(_escape_cdata_c14n(data)) - - def start_ns(self, prefix, uri): - if self._ignored_depth: - return - # we may have to resolve qnames in text content - if self._data: - self._flush() - self._ns_stack[-1].append((uri, prefix)) - - def start(self, tag, attrs): - if self._exclude_tags is not None and ( - self._ignored_depth or tag in self._exclude_tags): - self._ignored_depth += 1 - return - if self._data: - self._flush() - - new_namespaces = [] - self._declared_ns_stack.append(new_namespaces) - - if self._qname_aware_tags is not None and tag in self._qname_aware_tags: - # Need to parse text first to see if it requires a prefix declaration. - self._pending_start = (tag, attrs, new_namespaces) - return - self._start(tag, attrs, new_namespaces) - - def _start(self, tag, attrs, new_namespaces, qname_text=None): - if self._exclude_attrs is not None and attrs: - attrs = {k: v for k, v in attrs.items() if k not in self._exclude_attrs} - - qnames = {tag, *attrs} - resolved_names = {} - - # Resolve prefixes in attribute and tag text. - if qname_text is not None: - qname = resolved_names[qname_text] = self._resolve_prefix_name(qname_text) - qnames.add(qname) - if self._find_qname_aware_attrs is not None and attrs: - qattrs = self._find_qname_aware_attrs(attrs) - if qattrs: - for attr_name in qattrs: - value = attrs[attr_name] - if _looks_like_prefix_name(value): - qname = resolved_names[value] = self._resolve_prefix_name(value) - qnames.add(qname) - else: - qattrs = None - else: - qattrs = None - - # Assign prefixes in lexicographical order of used URIs. - parse_qname = self._qname - parsed_qnames = {n: parse_qname(n) for n in sorted( - qnames, key=lambda n: n.split('}', 1))} - - # Write namespace declarations in prefix order ... - if new_namespaces: - attr_list = [ - ('xmlns:' + prefix if prefix else 'xmlns', uri) - for uri, prefix in new_namespaces - ] - attr_list.sort() - else: - # almost always empty - attr_list = [] - - # ... followed by attributes in URI+name order - if attrs: - for k, v in sorted(attrs.items()): - if qattrs is not None and k in qattrs and v in resolved_names: - v = parsed_qnames[resolved_names[v]][0] - attr_qname, attr_name, uri = parsed_qnames[k] - # No prefix for attributes in default ('') namespace. - attr_list.append((attr_qname if uri else attr_name, v)) - - # Honour xml:space attributes. - space_behaviour = attrs.get('{http://www.w3.org/XML/1998/namespace}space') - self._preserve_space.append( - space_behaviour == 'preserve' if space_behaviour - else self._preserve_space[-1]) - - # Write the tag. - write = self._write - write('<' + parsed_qnames[tag][0]) - if attr_list: - write(''.join([f' {k}="{_escape_attrib_c14n(v)}"' for k, v in attr_list])) - write('>') - - # Write the resolved qname text content. - if qname_text is not None: - write(_escape_cdata_c14n(parsed_qnames[resolved_names[qname_text]][0])) - - self._root_seen = True - self._ns_stack.append([]) - - def end(self, tag): - if self._ignored_depth: - self._ignored_depth -= 1 - return - if self._data: - self._flush() - self._write(f'</{self._qname(tag)[0]}>') - self._preserve_space.pop() - self._root_done = len(self._preserve_space) == 1 - self._declared_ns_stack.pop() - self._ns_stack.pop() - - def comment(self, text): - if not self._with_comments: - return - if self._ignored_depth: - return - if self._root_done: - self._write('\n') - elif self._root_seen and self._data: - self._flush() - self._write(f'<!--{_escape_cdata_c14n(text)}-->') - if not self._root_seen: - self._write('\n') - - def pi(self, target, data): - if self._ignored_depth: - return - if self._root_done: - self._write('\n') - elif self._root_seen and self._data: - self._flush() - self._write( - f'<?{target} {_escape_cdata_c14n(data)}?>' if data else f'<?{target}?>') - if not self._root_seen: - self._write('\n') - - -def _escape_cdata_c14n(text): - # escape character data - try: - # it's worth avoiding do-nothing calls for strings that are - # shorter than 500 character, or so. assume that's, by far, - # the most common case in most applications. - if '&' in text: - text = text.replace('&', '&amp;') - if '<' in text: - text = text.replace('<', '&lt;') - if '>' in text: - text = text.replace('>', '&gt;') - if '\r' in text: - text = text.replace('\r', '&#xD;') - return text - except (TypeError, AttributeError): - _raise_serialization_error(text) - - -def _escape_attrib_c14n(text): - # escape attribute value - try: - if '&' in text: - text = text.replace('&', '&amp;') - if '<' in text: - text = text.replace('<', '&lt;') - if '"' in text: - text = text.replace('"', '&quot;') - if '\t' in text: - text = text.replace('\t', '&#x9;') - if '\n' in text: - text = text.replace('\n', '&#xA;') - if '\r' in text: - text = text.replace('\r', '&#xD;') - return text - except (TypeError, AttributeError): - _raise_serialization_error(text) - - -# -------------------------------------------------------------------- - -# Import the C accelerators -try: - # Element is going to be shadowed by the C implementation. We need to keep - # the Python version of it accessible for some "creative" by external code - # (see tests) - _Element_Py = Element - - # Element, SubElement, ParseError, TreeBuilder, XMLParser, _set_factories - from _elementtree import * - from _elementtree import _set_factories -except ImportError: - pass -else: - _set_factories(Comment, ProcessingInstruction) diff --git a/Python314_4_x86_Template/Lib/xml/etree/__init__.py b/Python314_4_x86_Template/Lib/xml/etree/__init__.py deleted file mode 100644 index e2ec53421..000000000 --- a/Python314_4_x86_Template/Lib/xml/etree/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: __init__.py 3375 2008-02-13 08:05:08Z fredrik $ -# elementtree package - -# -------------------------------------------------------------------- -# The ElementTree toolkit is -# -# Copyright (c) 1999-2008 by Fredrik Lundh -# -# By obtaining, using, and/or copying this software and/or its -# associated documentation, you agree that you have read, understood, -# and will comply with the following terms and conditions: -# -# Permission to use, copy, modify, and distribute this software and -# its associated documentation for any purpose and without fee is -# hereby granted, provided that the above copyright notice appears in -# all copies, and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Secret Labs AB or the author not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -------------------------------------------------------------------- - -# Licensed to PSF under a Contributor Agreement. -# See https://www.python.org/psf/license for licensing details. diff --git a/Python314_4_x86_Template/Lib/xml/etree/cElementTree.py b/Python314_4_x86_Template/Lib/xml/etree/cElementTree.py deleted file mode 100644 index 368e67918..000000000 --- a/Python314_4_x86_Template/Lib/xml/etree/cElementTree.py +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated alias for xml.etree.ElementTree - -from xml.etree.ElementTree import * diff --git a/Python314_4_x86_Template/Lib/xml/parsers/__init__.py b/Python314_4_x86_Template/Lib/xml/parsers/__init__.py deleted file mode 100644 index eb314a3b4..000000000 --- a/Python314_4_x86_Template/Lib/xml/parsers/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Python interfaces to XML parsers. - -This package contains one module: - -expat -- Python wrapper for James Clark's Expat parser, with namespace - support. - -""" diff --git a/Python314_4_x86_Template/Lib/xml/parsers/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/xml/parsers/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 9b0e120da63049f8d6e3dcf364b4234566a4e7cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmXv~!Ab)$6x`HmWkJ8;fd?tN#bOa##7praRisq#5D4k+tBuVjAxUZL$)lg))stW2 zrB{DI=nt6Kb`D7fCi7<A$>Bko1ibHli?4A1M6w0hJXTTimh=;!^vO|Due^RdEc{q2 z5Xz$+@f;m^4NrGHFx)z{u92pLv2cOr6aI{lYvs964zxljbupFLNmHB~?jg%yV>h$h z7_>0b7H)YNT)UFn$+3f*f92Zz6lTJYK}A9E#}u}3Q)9ICVfcNWENhGvI%n)NS;Znt z*X_{97>@D+ZL{4zqcd$M)L8w3xpy>|dRh#*!%QgQ!{I!a5^dI`>wxFY7HhHj<pmpH zX(ac^d}(M;4C%a-bkm(O7XLHWFpK5>)w=Dq-3uAwMqS+I?+zhkRjHAxtp@rBKg)N( diff --git a/Python314_4_x86_Template/Lib/xml/parsers/__pycache__/expat.cpython-314.pyc b/Python314_4_x86_Template/Lib/xml/parsers/__pycache__/expat.cpython-314.pyc deleted file mode 100644 index 3e1aae26b0d131213e90d900b6de8cbfd135c99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmZ`$O-n*S6usli5474v?RpRy8orc1jc5}s1PhS@7h{jnH`S}>o5##p>dIF2SNb<a z1T`(|2MGRw=B3gix{G`6nag3$;jYfkBth3h^wk9f@EMXx8RKDC(?cJsAmI$EsDvca z7%4?IBa2Ws>Zp>KNPe+uq&2BW|JhE3+bUXuOte=h`I7Q;(xj$jro5!)VJ9Hc^qHT# zA)f0H>G~ID?Wk-9gbT{8;|x+L+nevSJZtnMEE;O87IUcATll-6oHH&mF%`FMhc#_m z8KNsxJm~%iRrE)x;u_i>6)H9oJi;){q=JK8e5$_|m^hRdip4y>W&9ckoL$kT6u9ZJ zw$mVj=3L*Ex(P`<kMdjrSGw|&`Rj!Zd&BPRY}qHY6?jBaTebpRb{kl`#p4)w6eH-W z#NNotKA+YG^ld;`x(y73&^v5@K=KRb1~JI4^^N<~UFvCi`5Dr0+5Cj2UtooY*Zl_2 C7>JGl diff --git a/Python314_4_x86_Template/Lib/xml/parsers/expat.py b/Python314_4_x86_Template/Lib/xml/parsers/expat.py deleted file mode 100644 index bcbe9fb1f..000000000 --- a/Python314_4_x86_Template/Lib/xml/parsers/expat.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Interface to the Expat non-validating XML parser.""" -import sys - -from pyexpat import * - -# provide pyexpat submodules as xml.parsers.expat submodules -sys.modules['xml.parsers.expat.model'] = model -sys.modules['xml.parsers.expat.errors'] = errors diff --git a/Python314_4_x86_Template/Lib/xml/sax/__init__.py b/Python314_4_x86_Template/Lib/xml/sax/__init__.py deleted file mode 100644 index fe4582c6f..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/__init__.py +++ /dev/null @@ -1,100 +0,0 @@ -"""Simple API for XML (SAX) implementation for Python. - -This module provides an implementation of the SAX 2 interface; -information about the Java version of the interface can be found at -http://www.megginson.com/SAX/. The Python version of the interface is -documented at <...>. - -This package contains the following modules: - -handler -- Base classes and constants which define the SAX 2 API for - the 'client-side' of SAX for Python. - -saxutils -- Implementation of the convenience classes commonly used to - work with SAX. - -xmlreader -- Base classes and constants which define the SAX 2 API for - the parsers used with SAX for Python. - -expatreader -- Driver that allows use of the Expat parser with SAX. -""" - -from .xmlreader import InputSource -from .handler import ContentHandler, ErrorHandler -from ._exceptions import (SAXException, SAXNotRecognizedException, - SAXParseException, SAXNotSupportedException, - SAXReaderNotAvailable) - - -def parse(source, handler, errorHandler=ErrorHandler()): - parser = make_parser() - parser.setContentHandler(handler) - parser.setErrorHandler(errorHandler) - parser.parse(source) - -def parseString(string, handler, errorHandler=ErrorHandler()): - import io - if errorHandler is None: - errorHandler = ErrorHandler() - parser = make_parser() - parser.setContentHandler(handler) - parser.setErrorHandler(errorHandler) - - inpsrc = InputSource() - if isinstance(string, str): - inpsrc.setCharacterStream(io.StringIO(string)) - else: - inpsrc.setByteStream(io.BytesIO(string)) - parser.parse(inpsrc) - -# this is the parser list used by the make_parser function if no -# alternatives are given as parameters to the function - -default_parser_list = ["xml.sax.expatreader"] - -# tell modulefinder that importing sax potentially imports expatreader -_false = 0 -if _false: - import xml.sax.expatreader # noqa: F401 - -import os, sys -if not sys.flags.ignore_environment and "PY_SAX_PARSER" in os.environ: - default_parser_list = os.environ["PY_SAX_PARSER"].split(",") -del os, sys - - -def make_parser(parser_list=()): - """Creates and returns a SAX parser. - - Creates the first parser it is able to instantiate of the ones - given in the iterable created by chaining parser_list and - default_parser_list. The iterables must contain the names of Python - modules containing both a SAX parser and a create_parser function.""" - - for parser_name in list(parser_list) + default_parser_list: - try: - return _create_parser(parser_name) - except ImportError: - import sys - if parser_name in sys.modules: - # The parser module was found, but importing it - # failed unexpectedly, pass this exception through - raise - except SAXReaderNotAvailable: - # The parser module detected that it won't work properly, - # so try the next one - pass - - raise SAXReaderNotAvailable("No parsers found", None) - -# --- Internal utility methods used by make_parser - -def _create_parser(parser_name): - drv_module = __import__(parser_name,{},{},['create_parser']) - return drv_module.create_parser() - - -__all__ = ['ContentHandler', 'ErrorHandler', 'InputSource', 'SAXException', - 'SAXNotRecognizedException', 'SAXNotSupportedException', - 'SAXParseException', 'SAXReaderNotAvailable', - 'default_parser_list', 'make_parser', 'parse', 'parseString'] diff --git a/Python314_4_x86_Template/Lib/xml/sax/_exceptions.py b/Python314_4_x86_Template/Lib/xml/sax/_exceptions.py deleted file mode 100644 index f292dc3a8..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/_exceptions.py +++ /dev/null @@ -1,127 +0,0 @@ -"""Different kinds of SAX Exceptions""" - -# ===== SAXEXCEPTION ===== - -class SAXException(Exception): - """Encapsulate an XML error or warning. This class can contain - basic error or warning information from either the XML parser or - the application: you can subclass it to provide additional - functionality, or to add localization. Note that although you will - receive a SAXException as the argument to the handlers in the - ErrorHandler interface, you are not actually required to raise - the exception; instead, you can simply read the information in - it.""" - - def __init__(self, msg, exception=None): - """Creates an exception. The message is required, but the exception - is optional.""" - self._msg = msg - self._exception = exception - Exception.__init__(self, msg) - - def getMessage(self): - "Return a message for this exception." - return self._msg - - def getException(self): - "Return the embedded exception, or None if there was none." - return self._exception - - def __str__(self): - "Create a string representation of the exception." - return self._msg - - def __getitem__(self, ix): - """Avoids weird error messages if someone does exception[ix] by - mistake, since Exception has __getitem__ defined.""" - raise AttributeError("__getitem__") - - -# ===== SAXPARSEEXCEPTION ===== - -class SAXParseException(SAXException): - """Encapsulate an XML parse error or warning. - - This exception will include information for locating the error in - the original XML document. Note that although the application will - receive a SAXParseException as the argument to the handlers in the - ErrorHandler interface, the application is not actually required - to raise the exception; instead, it can simply read the - information in it and take a different action. - - Since this exception is a subclass of SAXException, it inherits - the ability to wrap another exception.""" - - def __init__(self, msg, exception, locator): - "Creates the exception. The exception parameter is allowed to be None." - SAXException.__init__(self, msg, exception) - self._locator = locator - - # We need to cache this stuff at construction time. - # If this exception is raised, the objects through which we must - # traverse to get this information may be deleted by the time - # it gets caught. - self._systemId = self._locator.getSystemId() - self._colnum = self._locator.getColumnNumber() - self._linenum = self._locator.getLineNumber() - - def getColumnNumber(self): - """The column number of the end of the text where the exception - occurred.""" - return self._colnum - - def getLineNumber(self): - "The line number of the end of the text where the exception occurred." - return self._linenum - - def getPublicId(self): - "Get the public identifier of the entity where the exception occurred." - return self._locator.getPublicId() - - def getSystemId(self): - "Get the system identifier of the entity where the exception occurred." - return self._systemId - - def __str__(self): - "Create a string representation of the exception." - sysid = self.getSystemId() - if sysid is None: - sysid = "<unknown>" - linenum = self.getLineNumber() - if linenum is None: - linenum = "?" - colnum = self.getColumnNumber() - if colnum is None: - colnum = "?" - return "%s:%s:%s: %s" % (sysid, linenum, colnum, self._msg) - - -# ===== SAXNOTRECOGNIZEDEXCEPTION ===== - -class SAXNotRecognizedException(SAXException): - """Exception class for an unrecognized identifier. - - An XMLReader will raise this exception when it is confronted with an - unrecognized feature or property. SAX applications and extensions may - use this class for similar purposes.""" - - -# ===== SAXNOTSUPPORTEDEXCEPTION ===== - -class SAXNotSupportedException(SAXException): - """Exception class for an unsupported operation. - - An XMLReader will raise this exception when a service it cannot - perform is requested (specifically setting a state or value). SAX - applications and extensions may use this class for similar - purposes.""" - -# ===== SAXNOTSUPPORTEDEXCEPTION ===== - -class SAXReaderNotAvailable(SAXNotSupportedException): - """Exception class for a missing driver. - - An XMLReader module (driver) should raise this exception when it - is first imported, e.g. when a support module cannot be imported. - It also may be raised during parsing, e.g. if executing an external - program is not permitted.""" diff --git a/Python314_4_x86_Template/Lib/xml/sax/expatreader.py b/Python314_4_x86_Template/Lib/xml/sax/expatreader.py deleted file mode 100644 index ba3c1e985..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/expatreader.py +++ /dev/null @@ -1,454 +0,0 @@ -""" -SAX driver for the pyexpat C module. This driver works with -pyexpat.__version__ == '2.22'. -""" - -version = "0.20" - -from xml.sax._exceptions import * -from xml.sax.handler import feature_validation, feature_namespaces -from xml.sax.handler import feature_namespace_prefixes -from xml.sax.handler import feature_external_ges, feature_external_pes -from xml.sax.handler import feature_string_interning -from xml.sax.handler import property_xml_string, property_interning_dict - -try: - from xml.parsers import expat -except ImportError: - raise SAXReaderNotAvailable("expat not supported", None) -else: - if not hasattr(expat, "ParserCreate"): - raise SAXReaderNotAvailable("expat not supported", None) -from xml.sax import xmlreader, saxutils, handler - -AttributesImpl = xmlreader.AttributesImpl -AttributesNSImpl = xmlreader.AttributesNSImpl - -# If we're using a sufficiently recent version of Python, we can use -# weak references to avoid cycles between the parser and content -# handler, otherwise we'll just have to pretend. -try: - import _weakref -except ImportError: - def _mkproxy(o): - return o -else: - import weakref - _mkproxy = weakref.proxy - del weakref, _weakref - -class _ClosedParser: - pass - -# --- ExpatLocator - -class ExpatLocator(xmlreader.Locator): - """Locator for use with the ExpatParser class. - - This uses a weak reference to the parser object to avoid creating - a circular reference between the parser and the content handler. - """ - def __init__(self, parser): - self._ref = _mkproxy(parser) - - def getColumnNumber(self): - parser = self._ref - if parser._parser is None: - return None - return parser._parser.ErrorColumnNumber - - def getLineNumber(self): - parser = self._ref - if parser._parser is None: - return 1 - return parser._parser.ErrorLineNumber - - def getPublicId(self): - parser = self._ref - if parser is None: - return None - return parser._source.getPublicId() - - def getSystemId(self): - parser = self._ref - if parser is None: - return None - return parser._source.getSystemId() - - -# --- ExpatParser - -class ExpatParser(xmlreader.IncrementalParser, xmlreader.Locator): - """SAX driver for the pyexpat C module.""" - - def __init__(self, namespaceHandling=0, bufsize=2**16-20): - xmlreader.IncrementalParser.__init__(self, bufsize) - self._source = xmlreader.InputSource() - self._parser = None - self._namespaces = namespaceHandling - self._lex_handler_prop = None - self._parsing = False - self._entity_stack = [] - self._external_ges = 0 - self._interning = None - - # XMLReader methods - - def parse(self, source): - "Parse an XML document from a URL or an InputSource." - source = saxutils.prepare_input_source(source) - - self._source = source - try: - self.reset() - self._cont_handler.setDocumentLocator(ExpatLocator(self)) - xmlreader.IncrementalParser.parse(self, source) - except: - # bpo-30264: Close the source on error to not leak resources: - # xml.sax.parse() doesn't give access to the underlying parser - # to the caller - self._close_source() - raise - - def prepareParser(self, source): - if source.getSystemId() is not None: - self._parser.SetBase(source.getSystemId()) - - # Redefined setContentHandler to allow changing handlers during parsing - - def setContentHandler(self, handler): - xmlreader.IncrementalParser.setContentHandler(self, handler) - if self._parsing: - self._reset_cont_handler() - - def getFeature(self, name): - if name == feature_namespaces: - return self._namespaces - elif name == feature_string_interning: - return self._interning is not None - elif name in (feature_validation, feature_external_pes, - feature_namespace_prefixes): - return 0 - elif name == feature_external_ges: - return self._external_ges - raise SAXNotRecognizedException("Feature '%s' not recognized" % name) - - def setFeature(self, name, state): - if self._parsing: - raise SAXNotSupportedException("Cannot set features while parsing") - - if name == feature_namespaces: - self._namespaces = state - elif name == feature_external_ges: - self._external_ges = state - elif name == feature_string_interning: - if state: - if self._interning is None: - self._interning = {} - else: - self._interning = None - elif name == feature_validation: - if state: - raise SAXNotSupportedException( - "expat does not support validation") - elif name == feature_external_pes: - if state: - raise SAXNotSupportedException( - "expat does not read external parameter entities") - elif name == feature_namespace_prefixes: - if state: - raise SAXNotSupportedException( - "expat does not report namespace prefixes") - else: - raise SAXNotRecognizedException( - "Feature '%s' not recognized" % name) - - def getProperty(self, name): - if name == handler.property_lexical_handler: - return self._lex_handler_prop - elif name == property_interning_dict: - return self._interning - elif name == property_xml_string: - if self._parser: - if hasattr(self._parser, "GetInputContext"): - return self._parser.GetInputContext() - else: - raise SAXNotRecognizedException( - "This version of expat does not support getting" - " the XML string") - else: - raise SAXNotSupportedException( - "XML string cannot be returned when not parsing") - raise SAXNotRecognizedException("Property '%s' not recognized" % name) - - def setProperty(self, name, value): - if name == handler.property_lexical_handler: - self._lex_handler_prop = value - if self._parsing: - self._reset_lex_handler_prop() - elif name == property_interning_dict: - self._interning = value - elif name == property_xml_string: - raise SAXNotSupportedException("Property '%s' cannot be set" % - name) - else: - raise SAXNotRecognizedException("Property '%s' not recognized" % - name) - - # IncrementalParser methods - - def feed(self, data, isFinal=False): - if not self._parsing: - self.reset() - self._parsing = True - self._cont_handler.startDocument() - - try: - # The isFinal parameter is internal to the expat reader. - # If it is set to true, expat will check validity of the entire - # document. When feeding chunks, they are not normally final - - # except when invoked from close. - self._parser.Parse(data, isFinal) - except expat.error as e: - exc = SAXParseException(expat.ErrorString(e.code), e, self) - # FIXME: when to invoke error()? - self._err_handler.fatalError(exc) - - def flush(self): - if self._parser is None: - return - - was_enabled = self._parser.GetReparseDeferralEnabled() - try: - self._parser.SetReparseDeferralEnabled(False) - self._parser.Parse(b"", False) - except expat.error as e: - exc = SAXParseException(expat.ErrorString(e.code), e, self) - self._err_handler.fatalError(exc) - finally: - self._parser.SetReparseDeferralEnabled(was_enabled) - - def _close_source(self): - source = self._source - try: - file = source.getCharacterStream() - if file is not None: - file.close() - finally: - file = source.getByteStream() - if file is not None: - file.close() - - def close(self): - if (self._entity_stack or self._parser is None or - isinstance(self._parser, _ClosedParser)): - # If we are completing an external entity, do nothing here - return - try: - self.feed(b"", isFinal=True) - self._cont_handler.endDocument() - self._parsing = False - # break cycle created by expat handlers pointing to our methods - self._parser = None - finally: - self._parsing = False - if self._parser is not None: - # Keep ErrorColumnNumber and ErrorLineNumber after closing. - parser = _ClosedParser() - parser.ErrorColumnNumber = self._parser.ErrorColumnNumber - parser.ErrorLineNumber = self._parser.ErrorLineNumber - self._parser = parser - self._close_source() - - def _reset_cont_handler(self): - self._parser.ProcessingInstructionHandler = \ - self._cont_handler.processingInstruction - self._parser.CharacterDataHandler = self._cont_handler.characters - - def _reset_lex_handler_prop(self): - lex = self._lex_handler_prop - parser = self._parser - if lex is None: - parser.CommentHandler = None - parser.StartCdataSectionHandler = None - parser.EndCdataSectionHandler = None - parser.StartDoctypeDeclHandler = None - parser.EndDoctypeDeclHandler = None - else: - parser.CommentHandler = lex.comment - parser.StartCdataSectionHandler = lex.startCDATA - parser.EndCdataSectionHandler = lex.endCDATA - parser.StartDoctypeDeclHandler = self.start_doctype_decl - parser.EndDoctypeDeclHandler = lex.endDTD - - def reset(self): - if self._namespaces: - self._parser = expat.ParserCreate(self._source.getEncoding(), " ", - intern=self._interning) - self._parser.namespace_prefixes = 1 - self._parser.StartElementHandler = self.start_element_ns - self._parser.EndElementHandler = self.end_element_ns - else: - self._parser = expat.ParserCreate(self._source.getEncoding(), - intern = self._interning) - self._parser.StartElementHandler = self.start_element - self._parser.EndElementHandler = self.end_element - - self._reset_cont_handler() - self._parser.UnparsedEntityDeclHandler = self.unparsed_entity_decl - self._parser.NotationDeclHandler = self.notation_decl - self._parser.StartNamespaceDeclHandler = self.start_namespace_decl - self._parser.EndNamespaceDeclHandler = self.end_namespace_decl - - self._decl_handler_prop = None - if self._lex_handler_prop: - self._reset_lex_handler_prop() -# self._parser.DefaultHandler = -# self._parser.DefaultHandlerExpand = -# self._parser.NotStandaloneHandler = - self._parser.ExternalEntityRefHandler = self.external_entity_ref - try: - self._parser.SkippedEntityHandler = self.skipped_entity_handler - except AttributeError: - # This pyexpat does not support SkippedEntity - pass - self._parser.SetParamEntityParsing( - expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) - - self._parsing = False - self._entity_stack = [] - - # Locator methods - - def getColumnNumber(self): - if self._parser is None: - return None - return self._parser.ErrorColumnNumber - - def getLineNumber(self): - if self._parser is None: - return 1 - return self._parser.ErrorLineNumber - - def getPublicId(self): - return self._source.getPublicId() - - def getSystemId(self): - return self._source.getSystemId() - - # event handlers - def start_element(self, name, attrs): - self._cont_handler.startElement(name, AttributesImpl(attrs)) - - def end_element(self, name): - self._cont_handler.endElement(name) - - def start_element_ns(self, name, attrs): - pair = name.split() - if len(pair) == 1: - # no namespace - pair = (None, name) - elif len(pair) == 3: - pair = pair[0], pair[1] - else: - # default namespace - pair = tuple(pair) - - newattrs = {} - qnames = {} - for (aname, value) in attrs.items(): - parts = aname.split() - length = len(parts) - if length == 1: - # no namespace - qname = aname - apair = (None, aname) - elif length == 3: - qname = "%s:%s" % (parts[2], parts[1]) - apair = parts[0], parts[1] - else: - # default namespace - qname = parts[1] - apair = tuple(parts) - - newattrs[apair] = value - qnames[apair] = qname - - self._cont_handler.startElementNS(pair, None, - AttributesNSImpl(newattrs, qnames)) - - def end_element_ns(self, name): - pair = name.split() - if len(pair) == 1: - pair = (None, name) - elif len(pair) == 3: - pair = pair[0], pair[1] - else: - pair = tuple(pair) - - self._cont_handler.endElementNS(pair, None) - - # this is not used (call directly to ContentHandler) - def processing_instruction(self, target, data): - self._cont_handler.processingInstruction(target, data) - - # this is not used (call directly to ContentHandler) - def character_data(self, data): - self._cont_handler.characters(data) - - def start_namespace_decl(self, prefix, uri): - self._cont_handler.startPrefixMapping(prefix, uri) - - def end_namespace_decl(self, prefix): - self._cont_handler.endPrefixMapping(prefix) - - def start_doctype_decl(self, name, sysid, pubid, has_internal_subset): - self._lex_handler_prop.startDTD(name, pubid, sysid) - - def unparsed_entity_decl(self, name, base, sysid, pubid, notation_name): - self._dtd_handler.unparsedEntityDecl(name, pubid, sysid, notation_name) - - def notation_decl(self, name, base, sysid, pubid): - self._dtd_handler.notationDecl(name, pubid, sysid) - - def external_entity_ref(self, context, base, sysid, pubid): - if not self._external_ges: - return 1 - - source = self._ent_handler.resolveEntity(pubid, sysid) - source = saxutils.prepare_input_source(source, - self._source.getSystemId() or - "") - - self._entity_stack.append((self._parser, self._source)) - self._parser = self._parser.ExternalEntityParserCreate(context) - self._source = source - - try: - xmlreader.IncrementalParser.parse(self, source) - except: - return 0 # FIXME: save error info here? - - (self._parser, self._source) = self._entity_stack[-1] - del self._entity_stack[-1] - return 1 - - def skipped_entity_handler(self, name, is_pe): - if is_pe: - # The SAX spec requires to report skipped PEs with a '%' - name = '%'+name - self._cont_handler.skippedEntity(name) - -# --- - -def create_parser(*args, **kwargs): - return ExpatParser(*args, **kwargs) - -# --- - -if __name__ == "__main__": - import xml.sax.saxutils - p = create_parser() - p.setContentHandler(xml.sax.saxutils.XMLGenerator()) - p.setErrorHandler(xml.sax.ErrorHandler()) - p.parse("http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml") diff --git a/Python314_4_x86_Template/Lib/xml/sax/handler.py b/Python314_4_x86_Template/Lib/xml/sax/handler.py deleted file mode 100644 index 3183c3fe9..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/handler.py +++ /dev/null @@ -1,387 +0,0 @@ -""" -This module contains the core classes of version 2.0 of SAX for Python. -This file provides only default classes with absolutely minimum -functionality, from which drivers and applications can be subclassed. - -Many of these classes are empty and are included only as documentation -of the interfaces. - -$Id$ -""" - -version = '2.0beta' - -#============================================================================ -# -# HANDLER INTERFACES -# -#============================================================================ - -# ===== ERRORHANDLER ===== - -class ErrorHandler: - """Basic interface for SAX error handlers. - - If you create an object that implements this interface, then - register the object with your XMLReader, the parser will call the - methods in your object to report all warnings and errors. There - are three levels of errors available: warnings, (possibly) - recoverable errors, and unrecoverable errors. All methods take a - SAXParseException as the only parameter.""" - - def error(self, exception): - "Handle a recoverable error." - raise exception - - def fatalError(self, exception): - "Handle a non-recoverable error." - raise exception - - def warning(self, exception): - "Handle a warning." - print(exception) - - -# ===== CONTENTHANDLER ===== - -class ContentHandler: - """Interface for receiving logical document content events. - - This is the main callback interface in SAX, and the one most - important to applications. The order of events in this interface - mirrors the order of the information in the document.""" - - def __init__(self): - self._locator = None - - def setDocumentLocator(self, locator): - """Called by the parser to give the application a locator for - locating the origin of document events. - - SAX parsers are strongly encouraged (though not absolutely - required) to supply a locator: if it does so, it must supply - the locator to the application by invoking this method before - invoking any of the other methods in the DocumentHandler - interface. - - The locator allows the application to determine the end - position of any document-related event, even if the parser is - not reporting an error. Typically, the application will use - this information for reporting its own errors (such as - character content that does not match an application's - business rules). The information returned by the locator is - probably not sufficient for use with a search engine. - - Note that the locator will return correct information only - during the invocation of the events in this interface. The - application should not attempt to use it at any other time.""" - self._locator = locator - - def startDocument(self): - """Receive notification of the beginning of a document. - - The SAX parser will invoke this method only once, before any - other methods in this interface or in DTDHandler (except for - setDocumentLocator).""" - - def endDocument(self): - """Receive notification of the end of a document. - - The SAX parser will invoke this method only once, and it will - be the last method invoked during the parse. The parser shall - not invoke this method until it has either abandoned parsing - (because of an unrecoverable error) or reached the end of - input.""" - - def startPrefixMapping(self, prefix, uri): - """Begin the scope of a prefix-URI Namespace mapping. - - The information from this event is not necessary for normal - Namespace processing: the SAX XML reader will automatically - replace prefixes for element and attribute names when the - http://xml.org/sax/features/namespaces feature is true (the - default). - - There are cases, however, when applications need to use - prefixes in character data or in attribute values, where they - cannot safely be expanded automatically; the - start/endPrefixMapping event supplies the information to the - application to expand prefixes in those contexts itself, if - necessary. - - Note that start/endPrefixMapping events are not guaranteed to - be properly nested relative to each-other: all - startPrefixMapping events will occur before the corresponding - startElement event, and all endPrefixMapping events will occur - after the corresponding endElement event, but their order is - not guaranteed.""" - - def endPrefixMapping(self, prefix): - """End the scope of a prefix-URI mapping. - - See startPrefixMapping for details. This event will always - occur after the corresponding endElement event, but the order - of endPrefixMapping events is not otherwise guaranteed.""" - - def startElement(self, name, attrs): - """Signals the start of an element in non-namespace mode. - - The name parameter contains the raw XML 1.0 name of the - element type as a string and the attrs parameter holds an - instance of the Attributes class containing the attributes of - the element.""" - - def endElement(self, name): - """Signals the end of an element in non-namespace mode. - - The name parameter contains the name of the element type, just - as with the startElement event.""" - - def startElementNS(self, name, qname, attrs): - """Signals the start of an element in namespace mode. - - The name parameter contains the name of the element type as a - (uri, localname) tuple, the qname parameter the raw XML 1.0 - name used in the source document, and the attrs parameter - holds an instance of the Attributes class containing the - attributes of the element. - - The uri part of the name tuple is None for elements which have - no namespace.""" - - def endElementNS(self, name, qname): - """Signals the end of an element in namespace mode. - - The name parameter contains the name of the element type, just - as with the startElementNS event.""" - - def characters(self, content): - """Receive notification of character data. - - The Parser will call this method to report each chunk of - character data. SAX parsers may return all contiguous - character data in a single chunk, or they may split it into - several chunks; however, all of the characters in any single - event must come from the same external entity so that the - Locator provides useful information.""" - - def ignorableWhitespace(self, whitespace): - """Receive notification of ignorable whitespace in element content. - - Validating Parsers must use this method to report each chunk - of ignorable whitespace (see the W3C XML 1.0 recommendation, - section 2.10): non-validating parsers may also use this method - if they are capable of parsing and using content models. - - SAX parsers may return all contiguous whitespace in a single - chunk, or they may split it into several chunks; however, all - of the characters in any single event must come from the same - external entity, so that the Locator provides useful - information.""" - - def processingInstruction(self, target, data): - """Receive notification of a processing instruction. - - The Parser will invoke this method once for each processing - instruction found: note that processing instructions may occur - before or after the main document element. - - A SAX parser should never report an XML declaration (XML 1.0, - section 2.8) or a text declaration (XML 1.0, section 4.3.1) - using this method.""" - - def skippedEntity(self, name): - """Receive notification of a skipped entity. - - The Parser will invoke this method once for each entity - skipped. Non-validating processors may skip entities if they - have not seen the declarations (because, for example, the - entity was declared in an external DTD subset). All processors - may skip external entities, depending on the values of the - http://xml.org/sax/features/external-general-entities and the - http://xml.org/sax/features/external-parameter-entities - properties.""" - - -# ===== DTDHandler ===== - -class DTDHandler: - """Handle DTD events. - - This interface specifies only those DTD events required for basic - parsing (unparsed entities and attributes).""" - - def notationDecl(self, name, publicId, systemId): - "Handle a notation declaration event." - - def unparsedEntityDecl(self, name, publicId, systemId, ndata): - "Handle an unparsed entity declaration event." - - -# ===== ENTITYRESOLVER ===== - -class EntityResolver: - """Basic interface for resolving entities. If you create an object - implementing this interface, then register the object with your - Parser, the parser will call the method in your object to - resolve all external entities. Note that DefaultHandler implements - this interface with the default behaviour.""" - - def resolveEntity(self, publicId, systemId): - """Resolve the system identifier of an entity and return either - the system identifier to read from as a string, or an InputSource - to read from.""" - return systemId - - -#============================================================================ -# -# CORE FEATURES -# -#============================================================================ - -feature_namespaces = "http://xml.org/sax/features/namespaces" -# true: Perform Namespace processing (default). -# false: Optionally do not perform Namespace processing -# (implies namespace-prefixes). -# access: (parsing) read-only; (not parsing) read/write - -feature_namespace_prefixes = "http://xml.org/sax/features/namespace-prefixes" -# true: Report the original prefixed names and attributes used for Namespace -# declarations. -# false: Do not report attributes used for Namespace declarations, and -# optionally do not report original prefixed names (default). -# access: (parsing) read-only; (not parsing) read/write - -feature_string_interning = "http://xml.org/sax/features/string-interning" -# true: All element names, prefixes, attribute names, Namespace URIs, and -# local names are interned using the built-in intern function. -# false: Names are not necessarily interned, although they may be (default). -# access: (parsing) read-only; (not parsing) read/write - -feature_validation = "http://xml.org/sax/features/validation" -# true: Report all validation errors (implies external-general-entities and -# external-parameter-entities). -# false: Do not report validation errors. -# access: (parsing) read-only; (not parsing) read/write - -feature_external_ges = "http://xml.org/sax/features/external-general-entities" -# true: Include all external general (text) entities. -# false: Do not include external general entities. -# access: (parsing) read-only; (not parsing) read/write - -feature_external_pes = "http://xml.org/sax/features/external-parameter-entities" -# true: Include all external parameter entities, including the external -# DTD subset. -# false: Do not include any external parameter entities, even the external -# DTD subset. -# access: (parsing) read-only; (not parsing) read/write - -all_features = [feature_namespaces, - feature_namespace_prefixes, - feature_string_interning, - feature_validation, - feature_external_ges, - feature_external_pes] - - -#============================================================================ -# -# CORE PROPERTIES -# -#============================================================================ - -property_lexical_handler = "http://xml.org/sax/properties/lexical-handler" -# data type: xml.sax.sax2lib.LexicalHandler -# description: An optional extension handler for lexical events like comments. -# access: read/write - -property_declaration_handler = "http://xml.org/sax/properties/declaration-handler" -# data type: xml.sax.sax2lib.DeclHandler -# description: An optional extension handler for DTD-related events other -# than notations and unparsed entities. -# access: read/write - -property_dom_node = "http://xml.org/sax/properties/dom-node" -# data type: org.w3c.dom.Node -# description: When parsing, the current DOM node being visited if this is -# a DOM iterator; when not parsing, the root DOM node for -# iteration. -# access: (parsing) read-only; (not parsing) read/write - -property_xml_string = "http://xml.org/sax/properties/xml-string" -# data type: String -# description: The literal string of characters that was the source for -# the current event. -# access: read-only - -property_encoding = "http://www.python.org/sax/properties/encoding" -# data type: String -# description: The name of the encoding to assume for input data. -# access: write: set the encoding, e.g. established by a higher-level -# protocol. May change during parsing (e.g. after -# processing a META tag) -# read: return the current encoding (possibly established through -# auto-detection. -# initial value: UTF-8 -# - -property_interning_dict = "http://www.python.org/sax/properties/interning-dict" -# data type: Dictionary -# description: The dictionary used to intern common strings in the document -# access: write: Request that the parser uses a specific dictionary, to -# allow interning across different documents -# read: return the current interning dictionary, or None -# - -all_properties = [property_lexical_handler, - property_dom_node, - property_declaration_handler, - property_xml_string, - property_encoding, - property_interning_dict] - - -class LexicalHandler: - """Optional SAX2 handler for lexical events. - - This handler is used to obtain lexical information about an XML - document, that is, information about how the document was encoded - (as opposed to what it contains, which is reported to the - ContentHandler), such as comments and CDATA marked section - boundaries. - - To set the LexicalHandler of an XMLReader, use the setProperty - method with the property identifier - 'http://xml.org/sax/properties/lexical-handler'.""" - - def comment(self, content): - """Reports a comment anywhere in the document (including the - DTD and outside the document element). - - content is a string that holds the contents of the comment.""" - - def startDTD(self, name, public_id, system_id): - """Report the start of the DTD declarations, if the document - has an associated DTD. - - A startEntity event will be reported before declaration events - from the external DTD subset are reported, and this can be - used to infer from which subset DTD declarations derive. - - name is the name of the document element type, public_id the - public identifier of the DTD (or None if none were supplied) - and system_id the system identifier of the external subset (or - None if none were supplied).""" - - def endDTD(self): - """Signals the end of DTD declarations.""" - - def startCDATA(self): - """Reports the beginning of a CDATA marked section. - - The contents of the CDATA marked section will be reported - through the characters event.""" - - def endCDATA(self): - """Reports the end of a CDATA marked section.""" diff --git a/Python314_4_x86_Template/Lib/xml/sax/saxutils.py b/Python314_4_x86_Template/Lib/xml/sax/saxutils.py deleted file mode 100644 index c1612ea1c..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/saxutils.py +++ /dev/null @@ -1,369 +0,0 @@ -"""\ -A library of useful helper classes to the SAX classes, for the -convenience of application and driver writers. -""" - -import os, urllib.parse, urllib.request -import io -import codecs -from . import handler -from . import xmlreader - -def __dict_replace(s, d): - """Replace substrings of a string using a dictionary.""" - for key, value in d.items(): - s = s.replace(key, value) - return s - -def escape(data, entities={}): - """Escape &, <, and > in a string of data. - - You can escape other strings of data by passing a dictionary as - the optional entities parameter. The keys and values must all be - strings; each key will be replaced with its corresponding value. - """ - - # must do ampersand first - data = data.replace("&", "&amp;") - data = data.replace(">", "&gt;") - data = data.replace("<", "&lt;") - if entities: - data = __dict_replace(data, entities) - return data - -def unescape(data, entities={}): - """Unescape &amp;, &lt;, and &gt; in a string of data. - - You can unescape other strings of data by passing a dictionary as - the optional entities parameter. The keys and values must all be - strings; each key will be replaced with its corresponding value. - """ - data = data.replace("&lt;", "<") - data = data.replace("&gt;", ">") - if entities: - data = __dict_replace(data, entities) - # must do ampersand last - return data.replace("&amp;", "&") - -def quoteattr(data, entities={}): - """Escape and quote an attribute value. - - Escape &, <, and > in a string of data, then quote it for use as - an attribute value. The \" character will be escaped as well, if - necessary. - - You can escape other strings of data by passing a dictionary as - the optional entities parameter. The keys and values must all be - strings; each key will be replaced with its corresponding value. - """ - entities = {**entities, '\n': '&#10;', '\r': '&#13;', '\t':'&#9;'} - data = escape(data, entities) - if '"' in data: - if "'" in data: - data = '"%s"' % data.replace('"', "&quot;") - else: - data = "'%s'" % data - else: - data = '"%s"' % data - return data - - -def _gettextwriter(out, encoding): - if out is None: - import sys - return sys.stdout - - if isinstance(out, io.TextIOBase): - # use a text writer as is - return out - - if isinstance(out, (codecs.StreamWriter, codecs.StreamReaderWriter)): - # use a codecs stream writer as is - return out - - # wrap a binary writer with TextIOWrapper - if isinstance(out, io.RawIOBase): - # Keep the original file open when the TextIOWrapper is - # destroyed - class _wrapper: - __class__ = out.__class__ - def __getattr__(self, name): - return getattr(out, name) - buffer = _wrapper() - buffer.close = lambda: None - else: - # This is to handle passed objects that aren't in the - # IOBase hierarchy, but just have a write method - buffer = io.BufferedIOBase() - buffer.writable = lambda: True - buffer.write = out.write - try: - # TextIOWrapper uses this methods to determine - # if BOM (for UTF-16, etc) should be added - buffer.seekable = out.seekable - buffer.tell = out.tell - except AttributeError: - pass - return io.TextIOWrapper(buffer, encoding=encoding, - errors='xmlcharrefreplace', - newline='\n', - write_through=True) - -class XMLGenerator(handler.ContentHandler): - - def __init__(self, out=None, encoding="iso-8859-1", short_empty_elements=False): - handler.ContentHandler.__init__(self) - out = _gettextwriter(out, encoding) - self._write = out.write - self._flush = out.flush - self._ns_contexts = [{}] # contains uri -> prefix dicts - self._current_context = self._ns_contexts[-1] - self._undeclared_ns_maps = [] - self._encoding = encoding - self._short_empty_elements = short_empty_elements - self._pending_start_element = False - - def _qname(self, name): - """Builds a qualified name from a (ns_url, localname) pair""" - if name[0]: - # Per http://www.w3.org/XML/1998/namespace, The 'xml' prefix is - # bound by definition to http://www.w3.org/XML/1998/namespace. It - # does not need to be declared and will not usually be found in - # self._current_context. - if 'http://www.w3.org/XML/1998/namespace' == name[0]: - return 'xml:' + name[1] - # The name is in a non-empty namespace - prefix = self._current_context[name[0]] - if prefix: - # If it is not the default namespace, prepend the prefix - return prefix + ":" + name[1] - # Return the unqualified name - return name[1] - - def _finish_pending_start_element(self,endElement=False): - if self._pending_start_element: - self._write('>') - self._pending_start_element = False - - # ContentHandler methods - - def startDocument(self): - self._write('<?xml version="1.0" encoding="%s"?>\n' % - self._encoding) - - def endDocument(self): - self._flush() - - def startPrefixMapping(self, prefix, uri): - self._ns_contexts.append(self._current_context.copy()) - self._current_context[uri] = prefix - self._undeclared_ns_maps.append((prefix, uri)) - - def endPrefixMapping(self, prefix): - self._current_context = self._ns_contexts[-1] - del self._ns_contexts[-1] - - def startElement(self, name, attrs): - self._finish_pending_start_element() - self._write('<' + name) - for (name, value) in attrs.items(): - self._write(' %s=%s' % (name, quoteattr(value))) - if self._short_empty_elements: - self._pending_start_element = True - else: - self._write(">") - - def endElement(self, name): - if self._pending_start_element: - self._write('/>') - self._pending_start_element = False - else: - self._write('</%s>' % name) - - def startElementNS(self, name, qname, attrs): - self._finish_pending_start_element() - self._write('<' + self._qname(name)) - - for prefix, uri in self._undeclared_ns_maps: - if prefix: - self._write(' xmlns:%s="%s"' % (prefix, uri)) - else: - self._write(' xmlns="%s"' % uri) - self._undeclared_ns_maps = [] - - for (name, value) in attrs.items(): - self._write(' %s=%s' % (self._qname(name), quoteattr(value))) - if self._short_empty_elements: - self._pending_start_element = True - else: - self._write(">") - - def endElementNS(self, name, qname): - if self._pending_start_element: - self._write('/>') - self._pending_start_element = False - else: - self._write('</%s>' % self._qname(name)) - - def characters(self, content): - if content: - self._finish_pending_start_element() - if not isinstance(content, str): - content = str(content, self._encoding) - self._write(escape(content)) - - def ignorableWhitespace(self, content): - if content: - self._finish_pending_start_element() - if not isinstance(content, str): - content = str(content, self._encoding) - self._write(content) - - def processingInstruction(self, target, data): - self._finish_pending_start_element() - self._write('<?%s %s?>' % (target, data)) - - -class XMLFilterBase(xmlreader.XMLReader): - """This class is designed to sit between an XMLReader and the - client application's event handlers. By default, it does nothing - but pass requests up to the reader and events on to the handlers - unmodified, but subclasses can override specific methods to modify - the event stream or the configuration requests as they pass - through.""" - - def __init__(self, parent = None): - xmlreader.XMLReader.__init__(self) - self._parent = parent - - # ErrorHandler methods - - def error(self, exception): - self._err_handler.error(exception) - - def fatalError(self, exception): - self._err_handler.fatalError(exception) - - def warning(self, exception): - self._err_handler.warning(exception) - - # ContentHandler methods - - def setDocumentLocator(self, locator): - self._cont_handler.setDocumentLocator(locator) - - def startDocument(self): - self._cont_handler.startDocument() - - def endDocument(self): - self._cont_handler.endDocument() - - def startPrefixMapping(self, prefix, uri): - self._cont_handler.startPrefixMapping(prefix, uri) - - def endPrefixMapping(self, prefix): - self._cont_handler.endPrefixMapping(prefix) - - def startElement(self, name, attrs): - self._cont_handler.startElement(name, attrs) - - def endElement(self, name): - self._cont_handler.endElement(name) - - def startElementNS(self, name, qname, attrs): - self._cont_handler.startElementNS(name, qname, attrs) - - def endElementNS(self, name, qname): - self._cont_handler.endElementNS(name, qname) - - def characters(self, content): - self._cont_handler.characters(content) - - def ignorableWhitespace(self, chars): - self._cont_handler.ignorableWhitespace(chars) - - def processingInstruction(self, target, data): - self._cont_handler.processingInstruction(target, data) - - def skippedEntity(self, name): - self._cont_handler.skippedEntity(name) - - # DTDHandler methods - - def notationDecl(self, name, publicId, systemId): - self._dtd_handler.notationDecl(name, publicId, systemId) - - def unparsedEntityDecl(self, name, publicId, systemId, ndata): - self._dtd_handler.unparsedEntityDecl(name, publicId, systemId, ndata) - - # EntityResolver methods - - def resolveEntity(self, publicId, systemId): - return self._ent_handler.resolveEntity(publicId, systemId) - - # XMLReader methods - - def parse(self, source): - self._parent.setContentHandler(self) - self._parent.setErrorHandler(self) - self._parent.setEntityResolver(self) - self._parent.setDTDHandler(self) - self._parent.parse(source) - - def setLocale(self, locale): - self._parent.setLocale(locale) - - def getFeature(self, name): - return self._parent.getFeature(name) - - def setFeature(self, name, state): - self._parent.setFeature(name, state) - - def getProperty(self, name): - return self._parent.getProperty(name) - - def setProperty(self, name, value): - self._parent.setProperty(name, value) - - # XMLFilter methods - - def getParent(self): - return self._parent - - def setParent(self, parent): - self._parent = parent - -# --- Utility functions - -def prepare_input_source(source, base=""): - """This function takes an InputSource and an optional base URL and - returns a fully resolved InputSource object ready for reading.""" - - if isinstance(source, os.PathLike): - source = os.fspath(source) - if isinstance(source, str): - source = xmlreader.InputSource(source) - elif hasattr(source, "read"): - f = source - source = xmlreader.InputSource() - if isinstance(f.read(0), str): - source.setCharacterStream(f) - else: - source.setByteStream(f) - if hasattr(f, "name") and isinstance(f.name, str): - source.setSystemId(f.name) - - if source.getCharacterStream() is None and source.getByteStream() is None: - sysid = source.getSystemId() - basehead = os.path.dirname(os.path.normpath(base)) - sysidfilename = os.path.join(basehead, sysid) - if os.path.isfile(sysidfilename): - source.setSystemId(sysidfilename) - f = open(sysidfilename, "rb") - else: - source.setSystemId(urllib.parse.urljoin(base, sysid)) - f = urllib.request.urlopen(source.getSystemId()) - - source.setByteStream(f) - - return source diff --git a/Python314_4_x86_Template/Lib/xml/sax/xmlreader.py b/Python314_4_x86_Template/Lib/xml/sax/xmlreader.py deleted file mode 100644 index e906121d2..000000000 --- a/Python314_4_x86_Template/Lib/xml/sax/xmlreader.py +++ /dev/null @@ -1,378 +0,0 @@ -"""An XML Reader is the SAX 2 name for an XML parser. XML Parsers -should be based on this code. """ - -from . import handler - -from ._exceptions import SAXNotSupportedException, SAXNotRecognizedException - - -# ===== XMLREADER ===== - -class XMLReader: - """Interface for reading an XML document using callbacks. - - XMLReader is the interface that an XML parser's SAX2 driver must - implement. This interface allows an application to set and query - features and properties in the parser, to register event handlers - for document processing, and to initiate a document parse. - - All SAX interfaces are assumed to be synchronous: the parse - methods must not return until parsing is complete, and readers - must wait for an event-handler callback to return before reporting - the next event.""" - - def __init__(self): - self._cont_handler = handler.ContentHandler() - self._dtd_handler = handler.DTDHandler() - self._ent_handler = handler.EntityResolver() - self._err_handler = handler.ErrorHandler() - - def parse(self, source): - "Parse an XML document from a system identifier or an InputSource." - raise NotImplementedError("This method must be implemented!") - - def getContentHandler(self): - "Returns the current ContentHandler." - return self._cont_handler - - def setContentHandler(self, handler): - "Registers a new object to receive document content events." - self._cont_handler = handler - - def getDTDHandler(self): - "Returns the current DTD handler." - return self._dtd_handler - - def setDTDHandler(self, handler): - "Register an object to receive basic DTD-related events." - self._dtd_handler = handler - - def getEntityResolver(self): - "Returns the current EntityResolver." - return self._ent_handler - - def setEntityResolver(self, resolver): - "Register an object to resolve external entities." - self._ent_handler = resolver - - def getErrorHandler(self): - "Returns the current ErrorHandler." - return self._err_handler - - def setErrorHandler(self, handler): - "Register an object to receive error-message events." - self._err_handler = handler - - def setLocale(self, locale): - """Allow an application to set the locale for errors and warnings. - - SAX parsers are not required to provide localization for errors - and warnings; if they cannot support the requested locale, - however, they must raise a SAX exception. Applications may - request a locale change in the middle of a parse.""" - raise SAXNotSupportedException("Locale support not implemented") - - def getFeature(self, name): - "Looks up and returns the state of a SAX2 feature." - raise SAXNotRecognizedException("Feature '%s' not recognized" % name) - - def setFeature(self, name, state): - "Sets the state of a SAX2 feature." - raise SAXNotRecognizedException("Feature '%s' not recognized" % name) - - def getProperty(self, name): - "Looks up and returns the value of a SAX2 property." - raise SAXNotRecognizedException("Property '%s' not recognized" % name) - - def setProperty(self, name, value): - "Sets the value of a SAX2 property." - raise SAXNotRecognizedException("Property '%s' not recognized" % name) - -class IncrementalParser(XMLReader): - """This interface adds three extra methods to the XMLReader - interface that allow XML parsers to support incremental - parsing. Support for this interface is optional, since not all - underlying XML parsers support this functionality. - - When the parser is instantiated it is ready to begin accepting - data from the feed method immediately. After parsing has been - finished with a call to close the reset method must be called to - make the parser ready to accept new data, either from feed or - using the parse method. - - Note that these methods must _not_ be called during parsing, that - is, after parse has been called and before it returns. - - By default, the class also implements the parse method of the XMLReader - interface using the feed, close and reset methods of the - IncrementalParser interface as a convenience to SAX 2.0 driver - writers.""" - - def __init__(self, bufsize=2**16): - self._bufsize = bufsize - XMLReader.__init__(self) - - def parse(self, source): - from . import saxutils - source = saxutils.prepare_input_source(source) - - self.prepareParser(source) - file = source.getCharacterStream() - if file is None: - file = source.getByteStream() - while buffer := file.read(self._bufsize): - self.feed(buffer) - self.close() - - def feed(self, data): - """This method gives the raw XML data in the data parameter to - the parser and makes it parse the data, emitting the - corresponding events. It is allowed for XML constructs to be - split across several calls to feed. - - feed may raise SAXException.""" - raise NotImplementedError("This method must be implemented!") - - def prepareParser(self, source): - """This method is called by the parse implementation to allow - the SAX 2.0 driver to prepare itself for parsing.""" - raise NotImplementedError("prepareParser must be overridden!") - - def close(self): - """This method is called when the entire XML document has been - passed to the parser through the feed method, to notify the - parser that there are no more data. This allows the parser to - do the final checks on the document and empty the internal - data buffer. - - The parser will not be ready to parse another document until - the reset method has been called. - - close may raise SAXException.""" - raise NotImplementedError("This method must be implemented!") - - def reset(self): - """This method is called after close has been called to reset - the parser so that it is ready to parse new documents. The - results of calling parse or feed after close without calling - reset are undefined.""" - raise NotImplementedError("This method must be implemented!") - -# ===== LOCATOR ===== - -class Locator: - """Interface for associating a SAX event with a document - location. A locator object will return valid results only during - calls to DocumentHandler methods; at any other time, the - results are unpredictable.""" - - def getColumnNumber(self): - "Return the column number where the current event ends." - return -1 - - def getLineNumber(self): - "Return the line number where the current event ends." - return -1 - - def getPublicId(self): - "Return the public identifier for the current event." - return None - - def getSystemId(self): - "Return the system identifier for the current event." - return None - -# ===== INPUTSOURCE ===== - -class InputSource: - """Encapsulation of the information needed by the XMLReader to - read entities. - - This class may include information about the public identifier, - system identifier, byte stream (possibly with character encoding - information) and/or the character stream of an entity. - - Applications will create objects of this class for use in the - XMLReader.parse method and for returning from - EntityResolver.resolveEntity. - - An InputSource belongs to the application, the XMLReader is not - allowed to modify InputSource objects passed to it from the - application, although it may make copies and modify those.""" - - def __init__(self, system_id = None): - self.__system_id = system_id - self.__public_id = None - self.__encoding = None - self.__bytefile = None - self.__charfile = None - - def setPublicId(self, public_id): - "Sets the public identifier of this InputSource." - self.__public_id = public_id - - def getPublicId(self): - "Returns the public identifier of this InputSource." - return self.__public_id - - def setSystemId(self, system_id): - "Sets the system identifier of this InputSource." - self.__system_id = system_id - - def getSystemId(self): - "Returns the system identifier of this InputSource." - return self.__system_id - - def setEncoding(self, encoding): - """Sets the character encoding of this InputSource. - - The encoding must be a string acceptable for an XML encoding - declaration (see section 4.3.3 of the XML recommendation). - - The encoding attribute of the InputSource is ignored if the - InputSource also contains a character stream.""" - self.__encoding = encoding - - def getEncoding(self): - "Get the character encoding of this InputSource." - return self.__encoding - - def setByteStream(self, bytefile): - """Set the byte stream (a Python file-like object which does - not perform byte-to-character conversion) for this input - source. - - The SAX parser will ignore this if there is also a character - stream specified, but it will use a byte stream in preference - to opening a URI connection itself. - - If the application knows the character encoding of the byte - stream, it should set it with the setEncoding method.""" - self.__bytefile = bytefile - - def getByteStream(self): - """Get the byte stream for this input source. - - The getEncoding method will return the character encoding for - this byte stream, or None if unknown.""" - return self.__bytefile - - def setCharacterStream(self, charfile): - """Set the character stream for this input source. (The stream - must be a Python 2.0 Unicode-wrapped file-like that performs - conversion to Unicode strings.) - - If there is a character stream specified, the SAX parser will - ignore any byte stream and will not attempt to open a URI - connection to the system identifier.""" - self.__charfile = charfile - - def getCharacterStream(self): - "Get the character stream for this input source." - return self.__charfile - -# ===== ATTRIBUTESIMPL ===== - -class AttributesImpl: - - def __init__(self, attrs): - """Non-NS-aware implementation. - - attrs should be of the form {name : value}.""" - self._attrs = attrs - - def getLength(self): - return len(self._attrs) - - def getType(self, name): - return "CDATA" - - def getValue(self, name): - return self._attrs[name] - - def getValueByQName(self, name): - return self._attrs[name] - - def getNameByQName(self, name): - if name not in self._attrs: - raise KeyError(name) - return name - - def getQNameByName(self, name): - if name not in self._attrs: - raise KeyError(name) - return name - - def getNames(self): - return list(self._attrs.keys()) - - def getQNames(self): - return list(self._attrs.keys()) - - def __len__(self): - return len(self._attrs) - - def __getitem__(self, name): - return self._attrs[name] - - def keys(self): - return list(self._attrs.keys()) - - def __contains__(self, name): - return name in self._attrs - - def get(self, name, alternative=None): - return self._attrs.get(name, alternative) - - def copy(self): - return self.__class__(self._attrs) - - def items(self): - return list(self._attrs.items()) - - def values(self): - return list(self._attrs.values()) - -# ===== ATTRIBUTESNSIMPL ===== - -class AttributesNSImpl(AttributesImpl): - - def __init__(self, attrs, qnames): - """NS-aware implementation. - - attrs should be of the form {(ns_uri, lname): value, ...}. - qnames of the form {(ns_uri, lname): qname, ...}.""" - self._attrs = attrs - self._qnames = qnames - - def getValueByQName(self, name): - for (nsname, qname) in self._qnames.items(): - if qname == name: - return self._attrs[nsname] - - raise KeyError(name) - - def getNameByQName(self, name): - for (nsname, qname) in self._qnames.items(): - if qname == name: - return nsname - - raise KeyError(name) - - def getQNameByName(self, name): - return self._qnames[name] - - def getQNames(self): - return list(self._qnames.values()) - - def copy(self): - return self.__class__(self._attrs, self._qnames) - - -def _test(): - XMLReader() - IncrementalParser() - Locator() - -if __name__ == "__main__": - _test() diff --git a/Python314_4_x86_Template/Lib/xmlrpc/__init__.py b/Python314_4_x86_Template/Lib/xmlrpc/__init__.py deleted file mode 100644 index 196d37885..000000000 --- a/Python314_4_x86_Template/Lib/xmlrpc/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This directory is a Python package. diff --git a/Python314_4_x86_Template/Lib/xmlrpc/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/xmlrpc/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index a626bac36543edcc40e166c7262767e1c705baa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmdPq<K<!if)3WJnd(6LF^B^Lj8MjBHXx&cA&5blL6gyMB|{MtkpCGZc`MJ^Dkiiz zwWv5IF(tLg(9+T%raZqWJEov0KPxr4q&OxyC%-f$DX}<JH#0A@1V|K@B<AF#7U>$s z1XPw}<mVY1n#7yLS6G<Ehot5f<Rq4)#+T$4#Q0<;#Z=_x6cr@L#K(iQ#>eXwRNmsS e$<0qG%}KQ@Vg*_ca$qrt@rjv{k+Fyw$N~WS;y9=P diff --git a/Python314_4_x86_Template/Lib/xmlrpc/__pycache__/client.cpython-314.pyc b/Python314_4_x86_Template/Lib/xmlrpc/__pycache__/client.cpython-314.pyc deleted file mode 100644 index 0c878edc9714735ff283faf9cb348e2e19751270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53178 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 DH$<8# diff --git a/Python314_4_x86_Template/Lib/xmlrpc/client.py b/Python314_4_x86_Template/Lib/xmlrpc/client.py deleted file mode 100644 index f441376d0..000000000 --- a/Python314_4_x86_Template/Lib/xmlrpc/client.py +++ /dev/null @@ -1,1503 +0,0 @@ -# -# XML-RPC CLIENT LIBRARY -# $Id$ -# -# an XML-RPC client interface for Python. -# -# the marshalling and response parser code can also be used to -# implement XML-RPC servers. -# -# Notes: -# this version is designed to work with Python 2.1 or newer. -# -# History: -# 1999-01-14 fl Created -# 1999-01-15 fl Changed dateTime to use localtime -# 1999-01-16 fl Added Binary/base64 element, default to RPC2 service -# 1999-01-19 fl Fixed array data element (from Skip Montanaro) -# 1999-01-21 fl Fixed dateTime constructor, etc. -# 1999-02-02 fl Added fault handling, handle empty sequences, etc. -# 1999-02-10 fl Fixed problem with empty responses (from Skip Montanaro) -# 1999-06-20 fl Speed improvements, pluggable parsers/transports (0.9.8) -# 2000-11-28 fl Changed boolean to check the truth value of its argument -# 2001-02-24 fl Added encoding/Unicode/SafeTransport patches -# 2001-02-26 fl Added compare support to wrappers (0.9.9/1.0b1) -# 2001-03-28 fl Make sure response tuple is a singleton -# 2001-03-29 fl Don't require empty params element (from Nicholas Riley) -# 2001-06-10 fl Folded in _xmlrpclib accelerator support (1.0b2) -# 2001-08-20 fl Base xmlrpclib.Error on built-in Exception (from Paul Prescod) -# 2001-09-03 fl Allow Transport subclass to override getparser -# 2001-09-10 fl Lazy import of urllib, cgi, xmllib (20x import speedup) -# 2001-10-01 fl Remove containers from memo cache when done with them -# 2001-10-01 fl Use faster escape method (80% dumps speedup) -# 2001-10-02 fl More dumps microtuning -# 2001-10-04 fl Make sure import expat gets a parser (from Guido van Rossum) -# 2001-10-10 sm Allow long ints to be passed as ints if they don't overflow -# 2001-10-17 sm Test for int and long overflow (allows use on 64-bit systems) -# 2001-11-12 fl Use repr() to marshal doubles (from Paul Felix) -# 2002-03-17 fl Avoid buffered read when possible (from James Rucker) -# 2002-04-07 fl Added pythondoc comments -# 2002-04-16 fl Added __str__ methods to datetime/binary wrappers -# 2002-05-15 fl Added error constants (from Andrew Kuchling) -# 2002-06-27 fl Merged with Python CVS version -# 2002-10-22 fl Added basic authentication (based on code from Phillip Eby) -# 2003-01-22 sm Add support for the bool type -# 2003-02-27 gvr Remove apply calls -# 2003-04-24 sm Use cStringIO if available -# 2003-04-25 ak Add support for nil -# 2003-06-15 gn Add support for time.struct_time -# 2003-07-12 gp Correct marshalling of Faults -# 2003-10-31 mvl Add multicall support -# 2004-08-20 mvl Bump minimum supported Python version to 2.1 -# 2014-12-02 ch/doko Add workaround for gzip bomb vulnerability -# -# Copyright (c) 1999-2002 by Secret Labs AB. -# Copyright (c) 1999-2002 by Fredrik Lundh. -# -# info@pythonware.com -# http://www.pythonware.com -# -# -------------------------------------------------------------------- -# The XML-RPC client interface is -# -# Copyright (c) 1999-2002 by Secret Labs AB -# Copyright (c) 1999-2002 by Fredrik Lundh -# -# By obtaining, using, and/or copying this software and/or its -# associated documentation, you agree that you have read, understood, -# and will comply with the following terms and conditions: -# -# Permission to use, copy, modify, and distribute this software and -# its associated documentation for any purpose and without fee is -# hereby granted, provided that the above copyright notice appears in -# all copies, and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Secret Labs AB or the author not be used in advertising or publicity -# pertaining to distribution of the software without specific, written -# prior permission. -# -# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -------------------------------------------------------------------- - -""" -An XML-RPC client interface for Python. - -The marshalling and response parser code can also be used to -implement XML-RPC servers. - -Exported exceptions: - - Error Base class for client errors - ProtocolError Indicates an HTTP protocol error - ResponseError Indicates a broken response package - Fault Indicates an XML-RPC fault package - -Exported classes: - - ServerProxy Represents a logical connection to an XML-RPC server - - MultiCall Executor of boxcared xmlrpc requests - DateTime dateTime wrapper for an ISO 8601 string or time tuple or - localtime integer value to generate a "dateTime.iso8601" - XML-RPC value - Binary binary data wrapper - - Marshaller Generate an XML-RPC params chunk from a Python data structure - Unmarshaller Unmarshal an XML-RPC response from incoming XML event message - Transport Handles an HTTP transaction to an XML-RPC server - SafeTransport Handles an HTTPS transaction to an XML-RPC server - -Exported constants: - - (none) - -Exported functions: - - getparser Create instance of the fastest available parser & attach - to an unmarshalling object - dumps Convert an argument tuple or a Fault instance to an XML-RPC - request (or response, if the methodresponse option is used). - loads Convert an XML-RPC packet to unmarshalled data plus a method - name (None if not present). -""" - -import base64 -import sys -import time -from datetime import datetime -from decimal import Decimal -import http.client -import urllib.parse -from xml.parsers import expat -import errno -from io import BytesIO -try: - import gzip -except ImportError: - gzip = None #python can be built without zlib/gzip support - -# -------------------------------------------------------------------- -# Internal stuff - -def escape(s): - s = s.replace("&", "&amp;") - s = s.replace("<", "&lt;") - return s.replace(">", "&gt;",) - -# used in User-Agent header sent -__version__ = '%d.%d' % sys.version_info[:2] - -# xmlrpc integer limits -MAXINT = 2**31-1 -MININT = -2**31 - -# -------------------------------------------------------------------- -# Error constants (from Dan Libby's specification at -# http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php) - -# Ranges of errors -PARSE_ERROR = -32700 -SERVER_ERROR = -32600 -APPLICATION_ERROR = -32500 -SYSTEM_ERROR = -32400 -TRANSPORT_ERROR = -32300 - -# Specific errors -NOT_WELLFORMED_ERROR = -32700 -UNSUPPORTED_ENCODING = -32701 -INVALID_ENCODING_CHAR = -32702 -INVALID_XMLRPC = -32600 -METHOD_NOT_FOUND = -32601 -INVALID_METHOD_PARAMS = -32602 -INTERNAL_ERROR = -32603 - -# -------------------------------------------------------------------- -# Exceptions - -## -# Base class for all kinds of client-side errors. - -class Error(Exception): - """Base class for client errors.""" - __str__ = object.__str__ - -## -# Indicates an HTTP-level protocol error. This is raised by the HTTP -# transport layer, if the server returns an error code other than 200 -# (OK). -# -# @param url The target URL. -# @param errcode The HTTP error code. -# @param errmsg The HTTP error message. -# @param headers The HTTP header dictionary. - -class ProtocolError(Error): - """Indicates an HTTP protocol error.""" - def __init__(self, url, errcode, errmsg, headers): - Error.__init__(self) - self.url = url - self.errcode = errcode - self.errmsg = errmsg - self.headers = headers - def __repr__(self): - return ( - "<%s for %s: %s %s>" % - (self.__class__.__name__, self.url, self.errcode, self.errmsg) - ) - -## -# Indicates a broken XML-RPC response package. This exception is -# raised by the unmarshalling layer, if the XML-RPC response is -# malformed. - -class ResponseError(Error): - """Indicates a broken response package.""" - pass - -## -# Indicates an XML-RPC fault response package. This exception is -# raised by the unmarshalling layer, if the XML-RPC response contains -# a fault string. This exception can also be used as a class, to -# generate a fault XML-RPC message. -# -# @param faultCode The XML-RPC fault code. -# @param faultString The XML-RPC fault string. - -class Fault(Error): - """Indicates an XML-RPC fault package.""" - def __init__(self, faultCode, faultString, **extra): - Error.__init__(self) - self.faultCode = faultCode - self.faultString = faultString - def __repr__(self): - return "<%s %s: %r>" % (self.__class__.__name__, - self.faultCode, self.faultString) - -# -------------------------------------------------------------------- -# Special values - -## -# Backwards compatibility -boolean = Boolean = bool - - -def _iso8601_format(value): - if value.tzinfo is not None: - # XML-RPC only uses the naive portion of the datetime - value = value.replace(tzinfo=None) - # XML-RPC doesn't use '-' separator in the date part - return value.isoformat(timespec='seconds').replace('-', '') - - -def _strftime(value): - if isinstance(value, datetime): - return _iso8601_format(value) - - if not isinstance(value, (tuple, time.struct_time)): - if value == 0: - value = time.time() - value = time.localtime(value) - - return "%04d%02d%02dT%02d:%02d:%02d" % value[:6] - -class DateTime: - """DateTime wrapper for an ISO 8601 string or time tuple or - localtime integer value to generate 'dateTime.iso8601' XML-RPC - value. - """ - - def __init__(self, value=0): - if isinstance(value, str): - self.value = value - else: - self.value = _strftime(value) - - def make_comparable(self, other): - if isinstance(other, DateTime): - s = self.value - o = other.value - elif isinstance(other, datetime): - s = self.value - o = _iso8601_format(other) - elif isinstance(other, str): - s = self.value - o = other - elif hasattr(other, "timetuple"): - s = self.timetuple() - o = other.timetuple() - else: - s = self - o = NotImplemented - return s, o - - def __lt__(self, other): - s, o = self.make_comparable(other) - if o is NotImplemented: - return NotImplemented - return s < o - - def __le__(self, other): - s, o = self.make_comparable(other) - if o is NotImplemented: - return NotImplemented - return s <= o - - def __gt__(self, other): - s, o = self.make_comparable(other) - if o is NotImplemented: - return NotImplemented - return s > o - - def __ge__(self, other): - s, o = self.make_comparable(other) - if o is NotImplemented: - return NotImplemented - return s >= o - - def __eq__(self, other): - s, o = self.make_comparable(other) - if o is NotImplemented: - return NotImplemented - return s == o - - def timetuple(self): - return time.strptime(self.value, "%Y%m%dT%H:%M:%S") - - ## - # Get date/time value. - # - # @return Date/time value, as an ISO 8601 string. - - def __str__(self): - return self.value - - def __repr__(self): - return "<%s %r at %#x>" % (self.__class__.__name__, self.value, id(self)) - - def decode(self, data): - self.value = str(data).strip() - - def encode(self, out): - out.write("<value><dateTime.iso8601>") - out.write(self.value) - out.write("</dateTime.iso8601></value>\n") - -def _datetime(data): - # decode xml element contents into a DateTime structure. - value = DateTime() - value.decode(data) - return value - -def _datetime_type(data): - return datetime.strptime(data, "%Y%m%dT%H:%M:%S") - -## -# Wrapper for binary data. This can be used to transport any kind -# of binary data over XML-RPC, using BASE64 encoding. -# -# @param data An 8-bit string containing arbitrary data. - -class Binary: - """Wrapper for binary data.""" - - def __init__(self, data=None): - if data is None: - data = b"" - else: - if not isinstance(data, (bytes, bytearray)): - raise TypeError("expected bytes or bytearray, not %s" % - data.__class__.__name__) - data = bytes(data) # Make a copy of the bytes! - self.data = data - - ## - # Get buffer contents. - # - # @return Buffer contents, as an 8-bit string. - - def __str__(self): - return str(self.data, "latin-1") # XXX encoding?! - - def __eq__(self, other): - if isinstance(other, Binary): - other = other.data - return self.data == other - - def decode(self, data): - self.data = base64.decodebytes(data) - - def encode(self, out): - out.write("<value><base64>\n") - encoded = base64.encodebytes(self.data) - out.write(encoded.decode('ascii')) - out.write("</base64></value>\n") - -def _binary(data): - # decode xml element contents into a Binary structure - value = Binary() - value.decode(data) - return value - -WRAPPERS = (DateTime, Binary) - -# -------------------------------------------------------------------- -# XML parsers - -class ExpatParser: - # fast expat parser for Python 2.0 and later. - def __init__(self, target): - self._parser = parser = expat.ParserCreate(None, None) - self._target = target - parser.StartElementHandler = target.start - parser.EndElementHandler = target.end - parser.CharacterDataHandler = target.data - encoding = None - target.xml(encoding, None) - - def feed(self, data): - self._parser.Parse(data, False) - - def close(self): - try: - parser = self._parser - except AttributeError: - pass - else: - del self._target, self._parser # get rid of circular references - parser.Parse(b"", True) # end of data - -# -------------------------------------------------------------------- -# XML-RPC marshalling and unmarshalling code - -## -# XML-RPC marshaller. -# -# @param encoding Default encoding for 8-bit strings. The default -# value is None (interpreted as UTF-8). -# @see dumps - -class Marshaller: - """Generate an XML-RPC params chunk from a Python data structure. - - Create a Marshaller instance for each set of parameters, and use - the "dumps" method to convert your data (represented as a tuple) - to an XML-RPC params chunk. To write a fault response, pass a - Fault instance instead. You may prefer to use the "dumps" module - function for this purpose. - """ - - # by the way, if you don't understand what's going on in here, - # that's perfectly ok. - - def __init__(self, encoding=None, allow_none=False): - self.memo = {} - self.data = None - self.encoding = encoding - self.allow_none = allow_none - - dispatch = {} - - def dumps(self, values): - out = [] - write = out.append - dump = self.__dump - if isinstance(values, Fault): - # fault instance - write("<fault>\n") - dump({'faultCode': values.faultCode, - 'faultString': values.faultString}, - write) - write("</fault>\n") - else: - # parameter block - # FIXME: the xml-rpc specification allows us to leave out - # the entire <params> block if there are no parameters. - # however, changing this may break older code (including - # old versions of xmlrpclib.py), so this is better left as - # is for now. See @XMLRPC3 for more information. /F - write("<params>\n") - for v in values: - write("<param>\n") - dump(v, write) - write("</param>\n") - write("</params>\n") - result = "".join(out) - return result - - def __dump(self, value, write): - try: - f = self.dispatch[type(value)] - except KeyError: - # check if this object can be marshalled as a structure - if not hasattr(value, '__dict__'): - raise TypeError("cannot marshal %s objects" % type(value)) - # check if this class is a sub-class of a basic type, - # because we don't know how to marshal these types - # (e.g. a string sub-class) - for type_ in type(value).__mro__: - if type_ in self.dispatch.keys(): - raise TypeError("cannot marshal %s objects" % type(value)) - # XXX(twouters): using "_arbitrary_instance" as key as a quick-fix - # for the p3yk merge, this should probably be fixed more neatly. - f = self.dispatch["_arbitrary_instance"] - f(self, value, write) - - def dump_nil (self, value, write): - if not self.allow_none: - raise TypeError("cannot marshal None unless allow_none is enabled") - write("<value><nil/></value>") - dispatch[type(None)] = dump_nil - - def dump_bool(self, value, write): - write("<value><boolean>") - write(value and "1" or "0") - write("</boolean></value>\n") - dispatch[bool] = dump_bool - - def dump_long(self, value, write): - if value > MAXINT or value < MININT: - raise OverflowError("int exceeds XML-RPC limits") - write("<value><int>") - write(str(int(value))) - write("</int></value>\n") - dispatch[int] = dump_long - - # backward compatible - dump_int = dump_long - - def dump_double(self, value, write): - write("<value><double>") - write(repr(value)) - write("</double></value>\n") - dispatch[float] = dump_double - - def dump_unicode(self, value, write, escape=escape): - write("<value><string>") - write(escape(value)) - write("</string></value>\n") - dispatch[str] = dump_unicode - - def dump_bytes(self, value, write): - write("<value><base64>\n") - encoded = base64.encodebytes(value) - write(encoded.decode('ascii')) - write("</base64></value>\n") - dispatch[bytes] = dump_bytes - dispatch[bytearray] = dump_bytes - - def dump_array(self, value, write): - i = id(value) - if i in self.memo: - raise TypeError("cannot marshal recursive sequences") - self.memo[i] = None - dump = self.__dump - write("<value><array><data>\n") - for v in value: - dump(v, write) - write("</data></array></value>\n") - del self.memo[i] - dispatch[tuple] = dump_array - dispatch[list] = dump_array - - def dump_struct(self, value, write, escape=escape): - i = id(value) - if i in self.memo: - raise TypeError("cannot marshal recursive dictionaries") - self.memo[i] = None - dump = self.__dump - write("<value><struct>\n") - for k, v in value.items(): - write("<member>\n") - if not isinstance(k, str): - raise TypeError("dictionary key must be string") - write("<name>%s</name>\n" % escape(k)) - dump(v, write) - write("</member>\n") - write("</struct></value>\n") - del self.memo[i] - dispatch[dict] = dump_struct - - def dump_datetime(self, value, write): - write("<value><dateTime.iso8601>") - write(_strftime(value)) - write("</dateTime.iso8601></value>\n") - dispatch[datetime] = dump_datetime - - def dump_instance(self, value, write): - # check for special wrappers - if value.__class__ in WRAPPERS: - self.write = write - value.encode(self) - del self.write - else: - # store instance attributes as a struct (really?) - self.dump_struct(value.__dict__, write) - dispatch[DateTime] = dump_instance - dispatch[Binary] = dump_instance - # XXX(twouters): using "_arbitrary_instance" as key as a quick-fix - # for the p3yk merge, this should probably be fixed more neatly. - dispatch["_arbitrary_instance"] = dump_instance - -## -# XML-RPC unmarshaller. -# -# @see loads - -class Unmarshaller: - """Unmarshal an XML-RPC response, based on incoming XML event - messages (start, data, end). Call close() to get the resulting - data structure. - - Note that this reader is fairly tolerant, and gladly accepts bogus - XML-RPC data without complaining (but not bogus XML). - """ - - # and again, if you don't understand what's going on in here, - # that's perfectly ok. - - def __init__(self, use_datetime=False, use_builtin_types=False): - self._type = None - self._stack = [] - self._marks = [] - self._data = [] - self._value = False - self._methodname = None - self._encoding = "utf-8" - self.append = self._stack.append - self._use_datetime = use_builtin_types or use_datetime - self._use_bytes = use_builtin_types - - def close(self): - # return response tuple and target method - if self._type is None or self._marks: - raise ResponseError() - if self._type == "fault": - raise Fault(**self._stack[0]) - return tuple(self._stack) - - def getmethodname(self): - return self._methodname - - # - # event handlers - - def xml(self, encoding, standalone): - self._encoding = encoding - # FIXME: assert standalone == 1 ??? - - def start(self, tag, attrs): - # prepare to handle this element - if ':' in tag: - tag = tag.split(':')[-1] - if tag == "array" or tag == "struct": - self._marks.append(len(self._stack)) - self._data = [] - if self._value and tag not in self.dispatch: - raise ResponseError("unknown tag %r" % tag) - self._value = (tag == "value") - - def data(self, text): - self._data.append(text) - - def end(self, tag): - # call the appropriate end tag handler - try: - f = self.dispatch[tag] - except KeyError: - if ':' not in tag: - return # unknown tag ? - try: - f = self.dispatch[tag.split(':')[-1]] - except KeyError: - return # unknown tag ? - return f(self, "".join(self._data)) - - # - # accelerator support - - def end_dispatch(self, tag, data): - # dispatch data - try: - f = self.dispatch[tag] - except KeyError: - if ':' not in tag: - return # unknown tag ? - try: - f = self.dispatch[tag.split(':')[-1]] - except KeyError: - return # unknown tag ? - return f(self, data) - - # - # element decoders - - dispatch = {} - - def end_nil (self, data): - self.append(None) - self._value = 0 - dispatch["nil"] = end_nil - - def end_boolean(self, data): - if data == "0": - self.append(False) - elif data == "1": - self.append(True) - else: - raise TypeError("bad boolean value") - self._value = 0 - dispatch["boolean"] = end_boolean - - def end_int(self, data): - self.append(int(data)) - self._value = 0 - dispatch["i1"] = end_int - dispatch["i2"] = end_int - dispatch["i4"] = end_int - dispatch["i8"] = end_int - dispatch["int"] = end_int - dispatch["biginteger"] = end_int - - def end_double(self, data): - self.append(float(data)) - self._value = 0 - dispatch["double"] = end_double - dispatch["float"] = end_double - - def end_bigdecimal(self, data): - self.append(Decimal(data)) - self._value = 0 - dispatch["bigdecimal"] = end_bigdecimal - - def end_string(self, data): - if self._encoding: - data = data.decode(self._encoding) - self.append(data) - self._value = 0 - dispatch["string"] = end_string - dispatch["name"] = end_string # struct keys are always strings - - def end_array(self, data): - mark = self._marks.pop() - # map arrays to Python lists - self._stack[mark:] = [self._stack[mark:]] - self._value = 0 - dispatch["array"] = end_array - - def end_struct(self, data): - mark = self._marks.pop() - # map structs to Python dictionaries - dict = {} - items = self._stack[mark:] - for i in range(0, len(items), 2): - dict[items[i]] = items[i+1] - self._stack[mark:] = [dict] - self._value = 0 - dispatch["struct"] = end_struct - - def end_base64(self, data): - value = Binary() - value.decode(data.encode("ascii")) - if self._use_bytes: - value = value.data - self.append(value) - self._value = 0 - dispatch["base64"] = end_base64 - - def end_dateTime(self, data): - value = DateTime() - value.decode(data) - if self._use_datetime: - value = _datetime_type(data) - self.append(value) - dispatch["dateTime.iso8601"] = end_dateTime - - def end_value(self, data): - # if we stumble upon a value element with no internal - # elements, treat it as a string element - if self._value: - self.end_string(data) - dispatch["value"] = end_value - - def end_params(self, data): - self._type = "params" - dispatch["params"] = end_params - - def end_fault(self, data): - self._type = "fault" - dispatch["fault"] = end_fault - - def end_methodName(self, data): - if self._encoding: - data = data.decode(self._encoding) - self._methodname = data - self._type = "methodName" # no params - dispatch["methodName"] = end_methodName - -## Multicall support -# - -class _MultiCallMethod: - # some lesser magic to store calls made to a MultiCall object - # for batch execution - def __init__(self, call_list, name): - self.__call_list = call_list - self.__name = name - def __getattr__(self, name): - return _MultiCallMethod(self.__call_list, "%s.%s" % (self.__name, name)) - def __call__(self, *args): - self.__call_list.append((self.__name, args)) - -class MultiCallIterator: - """Iterates over the results of a multicall. Exceptions are - raised in response to xmlrpc faults.""" - - def __init__(self, results): - self.results = results - - def __getitem__(self, i): - item = self.results[i] - if isinstance(item, dict): - raise Fault(item['faultCode'], item['faultString']) - elif isinstance(item, list): - return item[0] - else: - raise ValueError("unexpected type in multicall result") - -class MultiCall: - """server -> an object used to boxcar method calls - - server should be a ServerProxy object. - - Methods can be added to the MultiCall using normal - method call syntax e.g.: - - multicall = MultiCall(server_proxy) - multicall.add(2,3) - multicall.get_address("Guido") - - To execute the multicall, call the MultiCall object e.g.: - - add_result, address = multicall() - """ - - def __init__(self, server): - self.__server = server - self.__call_list = [] - - def __repr__(self): - return "<%s at %#x>" % (self.__class__.__name__, id(self)) - - def __getattr__(self, name): - return _MultiCallMethod(self.__call_list, name) - - def __call__(self): - marshalled_list = [] - for name, args in self.__call_list: - marshalled_list.append({'methodName' : name, 'params' : args}) - - return MultiCallIterator(self.__server.system.multicall(marshalled_list)) - -# -------------------------------------------------------------------- -# convenience functions - -FastMarshaller = FastParser = FastUnmarshaller = None - -## -# Create a parser object, and connect it to an unmarshalling instance. -# This function picks the fastest available XML parser. -# -# return A (parser, unmarshaller) tuple. - -def getparser(use_datetime=False, use_builtin_types=False): - """getparser() -> parser, unmarshaller - - Create an instance of the fastest available parser, and attach it - to an unmarshalling object. Return both objects. - """ - if FastParser and FastUnmarshaller: - if use_builtin_types: - mkdatetime = _datetime_type - mkbytes = base64.decodebytes - elif use_datetime: - mkdatetime = _datetime_type - mkbytes = _binary - else: - mkdatetime = _datetime - mkbytes = _binary - target = FastUnmarshaller(True, False, mkbytes, mkdatetime, Fault) - parser = FastParser(target) - else: - target = Unmarshaller(use_datetime=use_datetime, use_builtin_types=use_builtin_types) - if FastParser: - parser = FastParser(target) - else: - parser = ExpatParser(target) - return parser, target - -## -# Convert a Python tuple or a Fault instance to an XML-RPC packet. -# -# @def dumps(params, **options) -# @param params A tuple or Fault instance. -# @keyparam methodname If given, create a methodCall request for -# this method name. -# @keyparam methodresponse If given, create a methodResponse packet. -# If used with a tuple, the tuple must be a singleton (that is, -# it must contain exactly one element). -# @keyparam encoding The packet encoding. -# @return A string containing marshalled data. - -def dumps(params, methodname=None, methodresponse=None, encoding=None, - allow_none=False): - """data [,options] -> marshalled data - - Convert an argument tuple or a Fault instance to an XML-RPC - request (or response, if the methodresponse option is used). - - In addition to the data object, the following options can be given - as keyword arguments: - - methodname: the method name for a methodCall packet - - methodresponse: true to create a methodResponse packet. - If this option is used with a tuple, the tuple must be - a singleton (i.e. it can contain only one element). - - encoding: the packet encoding (default is UTF-8) - - All byte strings in the data structure are assumed to use the - packet encoding. Unicode strings are automatically converted, - where necessary. - """ - - assert isinstance(params, (tuple, Fault)), "argument must be tuple or Fault instance" - if isinstance(params, Fault): - methodresponse = 1 - elif methodresponse and isinstance(params, tuple): - assert len(params) == 1, "response tuple must be a singleton" - - if not encoding: - encoding = "utf-8" - - if FastMarshaller: - m = FastMarshaller(encoding) - else: - m = Marshaller(encoding, allow_none) - - data = m.dumps(params) - - if encoding != "utf-8": - xmlheader = "<?xml version='1.0' encoding='%s'?>\n" % str(encoding) - else: - xmlheader = "<?xml version='1.0'?>\n" # utf-8 is default - - # standard XML-RPC wrappings - if methodname: - # a method call - data = ( - xmlheader, - "<methodCall>\n" - "<methodName>", methodname, "</methodName>\n", - data, - "</methodCall>\n" - ) - elif methodresponse: - # a method response, or a fault structure - data = ( - xmlheader, - "<methodResponse>\n", - data, - "</methodResponse>\n" - ) - else: - return data # return as is - return "".join(data) - -## -# Convert an XML-RPC packet to a Python object. If the XML-RPC packet -# represents a fault condition, this function raises a Fault exception. -# -# @param data An XML-RPC packet, given as an 8-bit string. -# @return A tuple containing the unpacked data, and the method name -# (None if not present). -# @see Fault - -def loads(data, use_datetime=False, use_builtin_types=False): - """data -> unmarshalled data, method name - - Convert an XML-RPC packet to unmarshalled data plus a method - name (None if not present). - - If the XML-RPC packet represents a fault condition, this function - raises a Fault exception. - """ - p, u = getparser(use_datetime=use_datetime, use_builtin_types=use_builtin_types) - p.feed(data) - p.close() - return u.close(), u.getmethodname() - -## -# Encode a string using the gzip content encoding such as specified by the -# Content-Encoding: gzip -# in the HTTP header, as described in RFC 1952 -# -# @param data the unencoded data -# @return the encoded data - -def gzip_encode(data): - """data -> gzip encoded data - - Encode data using the gzip content encoding as described in RFC 1952 - """ - if not gzip: - raise NotImplementedError - f = BytesIO() - with gzip.GzipFile(mode="wb", fileobj=f, compresslevel=1) as gzf: - gzf.write(data) - return f.getvalue() - -## -# Decode a string using the gzip content encoding such as specified by the -# Content-Encoding: gzip -# in the HTTP header, as described in RFC 1952 -# -# @param data The encoded data -# @keyparam max_decode Maximum bytes to decode (20 MiB default), use negative -# values for unlimited decoding -# @return the unencoded data -# @raises ValueError if data is not correctly coded. -# @raises ValueError if max gzipped payload length exceeded - -def gzip_decode(data, max_decode=20971520): - """gzip encoded data -> unencoded data - - Decode data using the gzip content encoding as described in RFC 1952 - """ - if not gzip: - raise NotImplementedError - with gzip.GzipFile(mode="rb", fileobj=BytesIO(data)) as gzf: - try: - if max_decode < 0: # no limit - decoded = gzf.read() - else: - decoded = gzf.read(max_decode + 1) - except OSError: - raise ValueError("invalid data") - if max_decode >= 0 and len(decoded) > max_decode: - raise ValueError("max gzipped payload length exceeded") - return decoded - -## -# Return a decoded file-like object for the gzip encoding -# as described in RFC 1952. -# -# @param response A stream supporting a read() method -# @return a file-like object that the decoded data can be read() from - -class GzipDecodedResponse(gzip.GzipFile if gzip else object): - """a file-like object to decode a response encoded with the gzip - method, as described in RFC 1952. - """ - def __init__(self, response): - #response doesn't support tell() and read(), required by - #GzipFile - if not gzip: - raise NotImplementedError - self.io = BytesIO(response.read()) - gzip.GzipFile.__init__(self, mode="rb", fileobj=self.io) - - def close(self): - try: - gzip.GzipFile.close(self) - finally: - self.io.close() - - -# -------------------------------------------------------------------- -# request dispatcher - -class _Method: - # some magic to bind an XML-RPC method to an RPC server. - # supports "nested" methods (e.g. examples.getStateName) - def __init__(self, send, name): - self.__send = send - self.__name = name - def __getattr__(self, name): - return _Method(self.__send, "%s.%s" % (self.__name, name)) - def __call__(self, *args): - return self.__send(self.__name, args) - -## -# Standard transport class for XML-RPC over HTTP. -# <p> -# You can create custom transports by subclassing this method, and -# overriding selected methods. - -class Transport: - """Handles an HTTP transaction to an XML-RPC server.""" - - # client identifier (may be overridden) - user_agent = "Python-xmlrpc/%s" % __version__ - - #if true, we'll request gzip encoding - accept_gzip_encoding = True - - # if positive, encode request using gzip if it exceeds this threshold - # note that many servers will get confused, so only use it if you know - # that they can decode such a request - encode_threshold = None #None = don't encode - - def __init__(self, use_datetime=False, use_builtin_types=False, - *, headers=()): - self._use_datetime = use_datetime - self._use_builtin_types = use_builtin_types - self._connection = (None, None) - self._headers = list(headers) - self._extra_headers = [] - - ## - # Send a complete request, and parse the response. - # Retry request if a cached connection has disconnected. - # - # @param host Target host. - # @param handler Target PRC handler. - # @param request_body XML-RPC request body. - # @param verbose Debugging flag. - # @return Parsed response. - - def request(self, host, handler, request_body, verbose=False): - #retry request once if cached connection has gone cold - for i in (0, 1): - try: - return self.single_request(host, handler, request_body, verbose) - except http.client.RemoteDisconnected: - if i: - raise - except OSError as e: - if i or e.errno not in (errno.ECONNRESET, errno.ECONNABORTED, - errno.EPIPE): - raise - - def single_request(self, host, handler, request_body, verbose=False): - # issue XML-RPC request - try: - http_conn = self.send_request(host, handler, request_body, verbose) - resp = http_conn.getresponse() - if resp.status == 200: - self.verbose = verbose - return self.parse_response(resp) - - except Fault: - raise - except Exception: - #All unexpected errors leave connection in - # a strange state, so we clear it. - self.close() - raise - - #We got an error response. - #Discard any response data and raise exception - if resp.getheader("content-length", ""): - resp.read() - raise ProtocolError( - host + handler, - resp.status, resp.reason, - dict(resp.getheaders()) - ) - - - ## - # Create parser. - # - # @return A 2-tuple containing a parser and an unmarshaller. - - def getparser(self): - # get parser and unmarshaller - return getparser(use_datetime=self._use_datetime, - use_builtin_types=self._use_builtin_types) - - ## - # Get authorization info from host parameter - # Host may be a string, or a (host, x509-dict) tuple; if a string, - # it is checked for a "user:pw@host" format, and a "Basic - # Authentication" header is added if appropriate. - # - # @param host Host descriptor (URL or (URL, x509 info) tuple). - # @return A 3-tuple containing (actual host, extra headers, - # x509 info). The header and x509 fields may be None. - - def get_host_info(self, host): - - x509 = {} - if isinstance(host, tuple): - host, x509 = host - - auth, host = urllib.parse._splituser(host) - - if auth: - auth = urllib.parse.unquote_to_bytes(auth) - auth = base64.encodebytes(auth).decode("utf-8") - auth = "".join(auth.split()) # get rid of whitespace - extra_headers = [ - ("Authorization", "Basic " + auth) - ] - else: - extra_headers = [] - - return host, extra_headers, x509 - - ## - # Connect to server. - # - # @param host Target host. - # @return An HTTPConnection object - - def make_connection(self, host): - #return an existing connection if possible. This allows - #HTTP/1.1 keep-alive. - if self._connection and host == self._connection[0]: - return self._connection[1] - # create a HTTP connection object from a host descriptor - chost, self._extra_headers, x509 = self.get_host_info(host) - self._connection = host, http.client.HTTPConnection(chost) - return self._connection[1] - - ## - # Clear any cached connection object. - # Used in the event of socket errors. - # - def close(self): - host, connection = self._connection - if connection: - self._connection = (None, None) - connection.close() - - ## - # Send HTTP request. - # - # @param host Host descriptor (URL or (URL, x509 info) tuple). - # @param handler Target RPC handler (a path relative to host) - # @param request_body The XML-RPC request body - # @param debug Enable debugging if debug is true. - # @return An HTTPConnection. - - def send_request(self, host, handler, request_body, debug): - connection = self.make_connection(host) - headers = self._headers + self._extra_headers - if debug: - connection.set_debuglevel(1) - if self.accept_gzip_encoding and gzip: - connection.putrequest("POST", handler, skip_accept_encoding=True) - headers.append(("Accept-Encoding", "gzip")) - else: - connection.putrequest("POST", handler) - headers.append(("Content-Type", "text/xml")) - headers.append(("User-Agent", self.user_agent)) - self.send_headers(connection, headers) - self.send_content(connection, request_body) - return connection - - ## - # Send request headers. - # This function provides a useful hook for subclassing - # - # @param connection httpConnection. - # @param headers list of key,value pairs for HTTP headers - - def send_headers(self, connection, headers): - for key, val in headers: - connection.putheader(key, val) - - ## - # Send request body. - # This function provides a useful hook for subclassing - # - # @param connection httpConnection. - # @param request_body XML-RPC request body. - - def send_content(self, connection, request_body): - #optionally encode the request - if (self.encode_threshold is not None and - self.encode_threshold < len(request_body) and - gzip): - connection.putheader("Content-Encoding", "gzip") - request_body = gzip_encode(request_body) - - connection.putheader("Content-Length", str(len(request_body))) - connection.endheaders(request_body) - - ## - # Parse response. - # - # @param file Stream. - # @return Response tuple and target method. - - def parse_response(self, response): - # read response data from httpresponse, and parse it - # Check for new http response object, otherwise it is a file object. - if hasattr(response, 'getheader'): - if response.getheader("Content-Encoding", "") == "gzip": - stream = GzipDecodedResponse(response) - else: - stream = response - else: - stream = response - - p, u = self.getparser() - - while data := stream.read(1024): - if self.verbose: - print("body:", repr(data)) - p.feed(data) - - if stream is not response: - stream.close() - p.close() - - return u.close() - -## -# Standard transport class for XML-RPC over HTTPS. - -class SafeTransport(Transport): - """Handles an HTTPS transaction to an XML-RPC server.""" - - def __init__(self, use_datetime=False, use_builtin_types=False, - *, headers=(), context=None): - super().__init__(use_datetime=use_datetime, - use_builtin_types=use_builtin_types, - headers=headers) - self.context = context - - # FIXME: mostly untested - - def make_connection(self, host): - if self._connection and host == self._connection[0]: - return self._connection[1] - - if not hasattr(http.client, "HTTPSConnection"): - raise NotImplementedError( - "your version of http.client doesn't support HTTPS") - # create a HTTPS connection object from a host descriptor - # host may be a string, or a (host, x509-dict) tuple - chost, self._extra_headers, x509 = self.get_host_info(host) - self._connection = host, http.client.HTTPSConnection(chost, - None, context=self.context, **(x509 or {})) - return self._connection[1] - -## -# Standard server proxy. This class establishes a virtual connection -# to an XML-RPC server. -# <p> -# This class is available as ServerProxy and Server. New code should -# use ServerProxy, to avoid confusion. -# -# @def ServerProxy(uri, **options) -# @param uri The connection point on the server. -# @keyparam transport A transport factory, compatible with the -# standard transport class. -# @keyparam encoding The default encoding used for 8-bit strings -# (default is UTF-8). -# @keyparam verbose Use a true value to enable debugging output. -# (printed to standard output). -# @see Transport - -class ServerProxy: - """uri [,options] -> a logical connection to an XML-RPC server - - uri is the connection point on the server, given as - scheme://host/target. - - The standard implementation always supports the "http" scheme. If - SSL socket support is available (Python 2.0), it also supports - "https". - - If the target part and the slash preceding it are both omitted, - "/RPC2" is assumed. - - The following options can be given as keyword arguments: - - transport: a transport factory - encoding: the request encoding (default is UTF-8) - - All 8-bit strings passed to the server proxy are assumed to use - the given encoding. - """ - - def __init__(self, uri, transport=None, encoding=None, verbose=False, - allow_none=False, use_datetime=False, use_builtin_types=False, - *, headers=(), context=None): - # establish a "logical" server connection - - # get the url - p = urllib.parse.urlsplit(uri) - if p.scheme not in ("http", "https"): - raise OSError("unsupported XML-RPC protocol") - self.__host = p.netloc - self.__handler = urllib.parse.urlunsplit(["", "", *p[2:]]) - if not self.__handler: - self.__handler = "/RPC2" - - if transport is None: - if p.scheme == "https": - handler = SafeTransport - extra_kwargs = {"context": context} - else: - handler = Transport - extra_kwargs = {} - transport = handler(use_datetime=use_datetime, - use_builtin_types=use_builtin_types, - headers=headers, - **extra_kwargs) - self.__transport = transport - - self.__encoding = encoding or 'utf-8' - self.__verbose = verbose - self.__allow_none = allow_none - - def __close(self): - self.__transport.close() - - def __request(self, methodname, params): - # call a method on the remote server - - request = dumps(params, methodname, encoding=self.__encoding, - allow_none=self.__allow_none).encode(self.__encoding, 'xmlcharrefreplace') - - response = self.__transport.request( - self.__host, - self.__handler, - request, - verbose=self.__verbose - ) - - if len(response) == 1: - response = response[0] - - return response - - def __repr__(self): - return ( - "<%s for %s%s>" % - (self.__class__.__name__, self.__host, self.__handler) - ) - - def __getattr__(self, name): - # magic method dispatcher - return _Method(self.__request, name) - - # note: to call a remote object with a non-standard name, use - # result getattr(server, "strange-python-name")(args) - - def __call__(self, attr): - """A workaround to get special attributes on the ServerProxy - without interfering with the magic __getattr__ - """ - if attr == "close": - return self.__close - elif attr == "transport": - return self.__transport - raise AttributeError("Attribute %r not found" % (attr,)) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.__close() - -# compatibility - -Server = ServerProxy - -# -------------------------------------------------------------------- -# test code - -if __name__ == "__main__": - - # simple test program (from the XML-RPC specification) - - # local server, available from Lib/xmlrpc/server.py - server = ServerProxy("http://localhost:8000") - - try: - print(server.currentTime.getCurrentTime()) - except Error as v: - print("ERROR", v) - - multi = MultiCall(server) - multi.getData() - multi.pow(2,9) - multi.add(1,2) - try: - for response in multi(): - print(response) - except Error as v: - print("ERROR", v) diff --git a/Python314_4_x86_Template/Lib/xmlrpc/server.py b/Python314_4_x86_Template/Lib/xmlrpc/server.py deleted file mode 100644 index 3e6871157..000000000 --- a/Python314_4_x86_Template/Lib/xmlrpc/server.py +++ /dev/null @@ -1,1003 +0,0 @@ -r"""XML-RPC Servers. - -This module can be used to create simple XML-RPC servers -by creating a server and either installing functions, a -class instance, or by extending the SimpleXMLRPCServer -class. - -It can also be used to handle XML-RPC requests in a CGI -environment using CGIXMLRPCRequestHandler. - -The Doc* classes can be used to create XML-RPC servers that -serve pydoc-style documentation in response to HTTP -GET requests. This documentation is dynamically generated -based on the functions and methods registered with the -server. - -A list of possible usage patterns follows: - -1. Install functions: - -server = SimpleXMLRPCServer(("localhost", 8000)) -server.register_function(pow) -server.register_function(lambda x,y: x+y, 'add') -server.serve_forever() - -2. Install an instance: - -class MyFuncs: - def __init__(self): - # make all of the sys functions available through sys.func_name - import sys - self.sys = sys - def _listMethods(self): - # implement this method so that system.listMethods - # knows to advertise the sys methods - return list_public_methods(self) + \ - ['sys.' + method for method in list_public_methods(self.sys)] - def pow(self, x, y): return pow(x, y) - def add(self, x, y) : return x + y - -server = SimpleXMLRPCServer(("localhost", 8000)) -server.register_introspection_functions() -server.register_instance(MyFuncs()) -server.serve_forever() - -3. Install an instance with custom dispatch method: - -class Math: - def _listMethods(self): - # this method must be present for system.listMethods - # to work - return ['add', 'pow'] - def _methodHelp(self, method): - # this method must be present for system.methodHelp - # to work - if method == 'add': - return "add(2,3) => 5" - elif method == 'pow': - return "pow(x, y[, z]) => number" - else: - # By convention, return empty - # string if no help is available - return "" - def _dispatch(self, method, params): - if method == 'pow': - return pow(*params) - elif method == 'add': - return params[0] + params[1] - else: - raise ValueError('bad method') - -server = SimpleXMLRPCServer(("localhost", 8000)) -server.register_introspection_functions() -server.register_instance(Math()) -server.serve_forever() - -4. Subclass SimpleXMLRPCServer: - -class MathServer(SimpleXMLRPCServer): - def _dispatch(self, method, params): - try: - # We are forcing the 'export_' prefix on methods that are - # callable through XML-RPC to prevent potential security - # problems - func = getattr(self, 'export_' + method) - except AttributeError: - raise Exception('method "%s" is not supported' % method) - else: - return func(*params) - - def export_add(self, x, y): - return x + y - -server = MathServer(("localhost", 8000)) -server.serve_forever() - -5. CGI script: - -server = CGIXMLRPCRequestHandler() -server.register_function(pow) -server.handle_request() -""" - -# Written by Brian Quinlan (brian@sweetapp.com). -# Based on code written by Fredrik Lundh. - -from xmlrpc.client import Fault, dumps, loads, gzip_encode, gzip_decode -from http.server import BaseHTTPRequestHandler -from functools import partial -from inspect import signature -import html -import http.server -import socketserver -import sys -import os -import re -import pydoc -import traceback -try: - import fcntl -except ImportError: - fcntl = None - -def resolve_dotted_attribute(obj, attr, allow_dotted_names=True): - """resolve_dotted_attribute(a, 'b.c.d') => a.b.c.d - - Resolves a dotted attribute name to an object. Raises - an AttributeError if any attribute in the chain starts with a '_'. - - If the optional allow_dotted_names argument is false, dots are not - supported and this function operates similar to getattr(obj, attr). - """ - - if allow_dotted_names: - attrs = attr.split('.') - else: - attrs = [attr] - - for i in attrs: - if i.startswith('_'): - raise AttributeError( - 'attempt to access private attribute "%s"' % i - ) - else: - obj = getattr(obj,i) - return obj - -def list_public_methods(obj): - """Returns a list of attribute strings, found in the specified - object, which represent callable attributes""" - - return [member for member in dir(obj) - if not member.startswith('_') and - callable(getattr(obj, member))] - -class SimpleXMLRPCDispatcher: - """Mix-in class that dispatches XML-RPC requests. - - This class is used to register XML-RPC method handlers - and then to dispatch them. This class doesn't need to be - instanced directly when used by SimpleXMLRPCServer but it - can be instanced when used by the MultiPathXMLRPCServer - """ - - def __init__(self, allow_none=False, encoding=None, - use_builtin_types=False): - self.funcs = {} - self.instance = None - self.allow_none = allow_none - self.encoding = encoding or 'utf-8' - self.use_builtin_types = use_builtin_types - - def register_instance(self, instance, allow_dotted_names=False): - """Registers an instance to respond to XML-RPC requests. - - Only one instance can be installed at a time. - - If the registered instance has a _dispatch method then that - method will be called with the name of the XML-RPC method and - its parameters as a tuple - e.g. instance._dispatch('add',(2,3)) - - If the registered instance does not have a _dispatch method - then the instance will be searched to find a matching method - and, if found, will be called. Methods beginning with an '_' - are considered private and will not be called by - SimpleXMLRPCServer. - - If a registered function matches an XML-RPC request, then it - will be called instead of the registered instance. - - If the optional allow_dotted_names argument is true and the - instance does not have a _dispatch method, method names - containing dots are supported and resolved, as long as none of - the name segments start with an '_'. - - *** SECURITY WARNING: *** - - Enabling the allow_dotted_names options allows intruders - to access your module's global variables and may allow - intruders to execute arbitrary code on your machine. Only - use this option on a secure, closed network. - - """ - - self.instance = instance - self.allow_dotted_names = allow_dotted_names - - def register_function(self, function=None, name=None): - """Registers a function to respond to XML-RPC requests. - - The optional name argument can be used to set a Unicode name - for the function. - """ - # decorator factory - if function is None: - return partial(self.register_function, name=name) - - if name is None: - name = function.__name__ - self.funcs[name] = function - - return function - - def register_introspection_functions(self): - """Registers the XML-RPC introspection methods in the system - namespace. - - see http://xmlrpc.usefulinc.com/doc/reserved.html - """ - - self.funcs.update({'system.listMethods' : self.system_listMethods, - 'system.methodSignature' : self.system_methodSignature, - 'system.methodHelp' : self.system_methodHelp}) - - def register_multicall_functions(self): - """Registers the XML-RPC multicall method in the system - namespace. - - see http://www.xmlrpc.com/discuss/msgReader$1208""" - - self.funcs['system.multicall'] = self.system_multicall - - def _marshaled_dispatch(self, data, dispatch_method = None, path = None): - """Dispatches an XML-RPC method from marshalled (XML) data. - - XML-RPC methods are dispatched from the marshalled (XML) data - using the _dispatch method and the result is returned as - marshalled data. For backwards compatibility, a dispatch - function can be provided as an argument (see comment in - SimpleXMLRPCRequestHandler.do_POST) but overriding the - existing method through subclassing is the preferred means - of changing method dispatch behavior. - """ - - try: - params, method = loads(data, use_builtin_types=self.use_builtin_types) - - # generate response - if dispatch_method is not None: - response = dispatch_method(method, params) - else: - response = self._dispatch(method, params) - # wrap response in a singleton tuple - response = (response,) - response = dumps(response, methodresponse=1, - allow_none=self.allow_none, encoding=self.encoding) - except Fault as fault: - response = dumps(fault, allow_none=self.allow_none, - encoding=self.encoding) - except BaseException as exc: - response = dumps( - Fault(1, "%s:%s" % (type(exc), exc)), - encoding=self.encoding, allow_none=self.allow_none, - ) - - return response.encode(self.encoding, 'xmlcharrefreplace') - - def system_listMethods(self): - """system.listMethods() => ['add', 'subtract', 'multiple'] - - Returns a list of the methods supported by the server.""" - - methods = set(self.funcs.keys()) - if self.instance is not None: - # Instance can implement _listMethod to return a list of - # methods - if hasattr(self.instance, '_listMethods'): - methods |= set(self.instance._listMethods()) - # if the instance has a _dispatch method then we - # don't have enough information to provide a list - # of methods - elif not hasattr(self.instance, '_dispatch'): - methods |= set(list_public_methods(self.instance)) - return sorted(methods) - - def system_methodSignature(self, method_name): - """system.methodSignature('add') => [double, int, int] - - Returns a list describing the signature of the method. In the - above example, the add method takes two integers as arguments - and returns a double result. - - This server does NOT support system.methodSignature.""" - - # See http://xmlrpc.usefulinc.com/doc/sysmethodsig.html - - return 'signatures not supported' - - def system_methodHelp(self, method_name): - """system.methodHelp('add') => "Adds two integers together" - - Returns a string containing documentation for the specified method.""" - - method = None - if method_name in self.funcs: - method = self.funcs[method_name] - elif self.instance is not None: - # Instance can implement _methodHelp to return help for a method - if hasattr(self.instance, '_methodHelp'): - return self.instance._methodHelp(method_name) - # if the instance has a _dispatch method then we - # don't have enough information to provide help - elif not hasattr(self.instance, '_dispatch'): - try: - method = resolve_dotted_attribute( - self.instance, - method_name, - self.allow_dotted_names - ) - except AttributeError: - pass - - # Note that we aren't checking that the method actually - # be a callable object of some kind - if method is None: - return "" - else: - return pydoc.getdoc(method) - - def system_multicall(self, call_list): - """system.multicall([{'methodName': 'add', 'params': [2, 2]}, ...]) => \ -[[4], ...] - - Allows the caller to package multiple XML-RPC calls into a single - request. - - See http://www.xmlrpc.com/discuss/msgReader$1208 - """ - - results = [] - for call in call_list: - method_name = call['methodName'] - params = call['params'] - - try: - # XXX A marshalling error in any response will fail the entire - # multicall. If someone cares they should fix this. - results.append([self._dispatch(method_name, params)]) - except Fault as fault: - results.append( - {'faultCode' : fault.faultCode, - 'faultString' : fault.faultString} - ) - except BaseException as exc: - results.append( - {'faultCode' : 1, - 'faultString' : "%s:%s" % (type(exc), exc)} - ) - return results - - def _dispatch(self, method, params): - """Dispatches the XML-RPC method. - - XML-RPC calls are forwarded to a registered function that - matches the called XML-RPC method name. If no such function - exists then the call is forwarded to the registered instance, - if available. - - If the registered instance has a _dispatch method then that - method will be called with the name of the XML-RPC method and - its parameters as a tuple - e.g. instance._dispatch('add',(2,3)) - - If the registered instance does not have a _dispatch method - then the instance will be searched to find a matching method - and, if found, will be called. - - Methods beginning with an '_' are considered private and will - not be called. - """ - - try: - # call the matching registered function - func = self.funcs[method] - except KeyError: - pass - else: - if func is not None: - return func(*params) - raise Exception('method "%s" is not supported' % method) - - if self.instance is not None: - if hasattr(self.instance, '_dispatch'): - # call the `_dispatch` method on the instance - return self.instance._dispatch(method, params) - - # call the instance's method directly - try: - func = resolve_dotted_attribute( - self.instance, - method, - self.allow_dotted_names - ) - except AttributeError: - pass - else: - if func is not None: - return func(*params) - - raise Exception('method "%s" is not supported' % method) - -class SimpleXMLRPCRequestHandler(BaseHTTPRequestHandler): - """Simple XML-RPC request handler class. - - Handles all HTTP POST requests and attempts to decode them as - XML-RPC requests. - """ - - # Class attribute listing the accessible path components; - # paths not on this list will result in a 404 error. - rpc_paths = ('/', '/RPC2', '/pydoc.css') - - #if not None, encode responses larger than this, if possible - encode_threshold = 1400 #a common MTU - - #Override form StreamRequestHandler: full buffering of output - #and no Nagle. - wbufsize = -1 - disable_nagle_algorithm = True - - # a re to match a gzip Accept-Encoding - aepattern = re.compile(r""" - \s* ([^\s;]+) \s* #content-coding - (;\s* q \s*=\s* ([0-9\.]+))? #q - """, re.VERBOSE | re.IGNORECASE) - - def accept_encodings(self): - r = {} - ae = self.headers.get("Accept-Encoding", "") - for e in ae.split(","): - match = self.aepattern.match(e) - if match: - v = match.group(3) - v = float(v) if v else 1.0 - r[match.group(1)] = v - return r - - def is_rpc_path_valid(self): - if self.rpc_paths: - return self.path in self.rpc_paths - else: - # If .rpc_paths is empty, just assume all paths are legal - return True - - def do_POST(self): - """Handles the HTTP POST request. - - Attempts to interpret all HTTP POST requests as XML-RPC calls, - which are forwarded to the server's _dispatch method for handling. - """ - - # Check that the path is legal - if not self.is_rpc_path_valid(): - self.report_404() - return - - try: - # Get arguments by reading body of request. - # We read this in chunks to avoid straining - # socket.read(); around the 10 or 15Mb mark, some platforms - # begin to have problems (bug #792570). - max_chunk_size = 10*1024*1024 - size_remaining = int(self.headers["content-length"]) - L = [] - while size_remaining: - chunk_size = min(size_remaining, max_chunk_size) - chunk = self.rfile.read(chunk_size) - if not chunk: - break - L.append(chunk) - size_remaining -= len(L[-1]) - data = b''.join(L) - - data = self.decode_request_content(data) - if data is None: - return #response has been sent - - # In previous versions of SimpleXMLRPCServer, _dispatch - # could be overridden in this class, instead of in - # SimpleXMLRPCDispatcher. To maintain backwards compatibility, - # check to see if a subclass implements _dispatch and dispatch - # using that method if present. - response = self.server._marshaled_dispatch( - data, getattr(self, '_dispatch', None), self.path - ) - except Exception as e: # This should only happen if the module is buggy - # internal error, report as HTTP server error - self.send_response(500) - - # Send information about the exception if requested - if hasattr(self.server, '_send_traceback_header') and \ - self.server._send_traceback_header: - self.send_header("X-exception", str(e)) - trace = traceback.format_exc() - trace = str(trace.encode('ASCII', 'backslashreplace'), 'ASCII') - self.send_header("X-traceback", trace) - - self.send_header("Content-length", "0") - self.end_headers() - else: - self.send_response(200) - self.send_header("Content-type", "text/xml") - if self.encode_threshold is not None: - if len(response) > self.encode_threshold: - q = self.accept_encodings().get("gzip", 0) - if q: - try: - response = gzip_encode(response) - self.send_header("Content-Encoding", "gzip") - except NotImplementedError: - pass - self.send_header("Content-length", str(len(response))) - self.end_headers() - self.wfile.write(response) - - def decode_request_content(self, data): - #support gzip encoding of request - encoding = self.headers.get("content-encoding", "identity").lower() - if encoding == "identity": - return data - if encoding == "gzip": - try: - return gzip_decode(data) - except NotImplementedError: - self.send_response(501, "encoding %r not supported" % encoding) - except ValueError: - self.send_response(400, "error decoding gzip content") - else: - self.send_response(501, "encoding %r not supported" % encoding) - self.send_header("Content-length", "0") - self.end_headers() - - def report_404 (self): - # Report a 404 error - self.send_response(404) - response = b'No such page' - self.send_header("Content-type", "text/plain") - self.send_header("Content-length", str(len(response))) - self.end_headers() - self.wfile.write(response) - - def log_request(self, code='-', size='-'): - """Selectively log an accepted request.""" - - if self.server.logRequests: - BaseHTTPRequestHandler.log_request(self, code, size) - -class SimpleXMLRPCServer(socketserver.TCPServer, - SimpleXMLRPCDispatcher): - """Simple XML-RPC server. - - Simple XML-RPC server that allows functions and a single instance - to be installed to handle requests. The default implementation - attempts to dispatch XML-RPC calls to the functions or instance - installed in the server. Override the _dispatch method inherited - from SimpleXMLRPCDispatcher to change this behavior. - """ - - allow_reuse_address = True - allow_reuse_port = False - - # Warning: this is for debugging purposes only! Never set this to True in - # production code, as will be sending out sensitive information (exception - # and stack trace details) when exceptions are raised inside - # SimpleXMLRPCRequestHandler.do_POST - _send_traceback_header = False - - def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler, - logRequests=True, allow_none=False, encoding=None, - bind_and_activate=True, use_builtin_types=False): - self.logRequests = logRequests - - SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding, use_builtin_types) - socketserver.TCPServer.__init__(self, addr, requestHandler, bind_and_activate) - - -class MultiPathXMLRPCServer(SimpleXMLRPCServer): - """Multipath XML-RPC Server - This specialization of SimpleXMLRPCServer allows the user to create - multiple Dispatcher instances and assign them to different - HTTP request paths. This makes it possible to run two or more - 'virtual XML-RPC servers' at the same port. - Make sure that the requestHandler accepts the paths in question. - """ - def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler, - logRequests=True, allow_none=False, encoding=None, - bind_and_activate=True, use_builtin_types=False): - - SimpleXMLRPCServer.__init__(self, addr, requestHandler, logRequests, allow_none, - encoding, bind_and_activate, use_builtin_types) - self.dispatchers = {} - self.allow_none = allow_none - self.encoding = encoding or 'utf-8' - - def add_dispatcher(self, path, dispatcher): - self.dispatchers[path] = dispatcher - return dispatcher - - def get_dispatcher(self, path): - return self.dispatchers[path] - - def _marshaled_dispatch(self, data, dispatch_method = None, path = None): - try: - response = self.dispatchers[path]._marshaled_dispatch( - data, dispatch_method, path) - except BaseException as exc: - # report low level exception back to server - # (each dispatcher should have handled their own - # exceptions) - response = dumps( - Fault(1, "%s:%s" % (type(exc), exc)), - encoding=self.encoding, allow_none=self.allow_none) - response = response.encode(self.encoding, 'xmlcharrefreplace') - return response - -class CGIXMLRPCRequestHandler(SimpleXMLRPCDispatcher): - """Simple handler for XML-RPC data passed through CGI.""" - - def __init__(self, allow_none=False, encoding=None, use_builtin_types=False): - SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding, use_builtin_types) - - def handle_xmlrpc(self, request_text): - """Handle a single XML-RPC request""" - - response = self._marshaled_dispatch(request_text) - - print('Content-Type: text/xml') - print('Content-Length: %d' % len(response)) - print() - sys.stdout.flush() - sys.stdout.buffer.write(response) - sys.stdout.buffer.flush() - - def handle_get(self): - """Handle a single HTTP GET request. - - Default implementation indicates an error because - XML-RPC uses the POST method. - """ - - code = 400 - message, explain = BaseHTTPRequestHandler.responses[code] - - response = http.server.DEFAULT_ERROR_MESSAGE % \ - { - 'code' : code, - 'message' : message, - 'explain' : explain - } - response = response.encode('utf-8') - print('Status: %d %s' % (code, message)) - print('Content-Type: %s' % http.server.DEFAULT_ERROR_CONTENT_TYPE) - print('Content-Length: %d' % len(response)) - print() - sys.stdout.flush() - sys.stdout.buffer.write(response) - sys.stdout.buffer.flush() - - def handle_request(self, request_text=None): - """Handle a single XML-RPC request passed through a CGI post method. - - If no XML data is given then it is read from stdin. The resulting - XML-RPC response is printed to stdout along with the correct HTTP - headers. - """ - - if request_text is None and \ - os.environ.get('REQUEST_METHOD', None) == 'GET': - self.handle_get() - else: - # POST data is normally available through stdin - try: - length = int(os.environ.get('CONTENT_LENGTH', None)) - except (ValueError, TypeError): - length = -1 - if request_text is None: - request_text = sys.stdin.read(length) - - self.handle_xmlrpc(request_text) - - -# ----------------------------------------------------------------------------- -# Self documenting XML-RPC Server. - -class ServerHTMLDoc(pydoc.HTMLDoc): - """Class used to generate pydoc HTML document for a server""" - - def markup(self, text, escape=None, funcs={}, classes={}, methods={}): - """Mark up some plain text, given a context of symbols to look for. - Each context dictionary maps object names to anchor names.""" - escape = escape or self.escape - results = [] - here = 0 - - # XXX Note that this regular expression does not allow for the - # hyperlinking of arbitrary strings being used as method - # names. Only methods with names consisting of word characters - # and '.'s are hyperlinked. - pattern = re.compile(r'\b((http|https|ftp)://\S+[\w/]|' - r'RFC[- ]?(\d+)|' - r'PEP[- ]?(\d+)|' - r'(self\.)?((?:\w|\.)+))\b') - while match := pattern.search(text, here): - start, end = match.span() - results.append(escape(text[here:start])) - - all, scheme, rfc, pep, selfdot, name = match.groups() - if scheme: - url = escape(all).replace('"', '&quot;') - results.append('<a href="%s">%s</a>' % (url, url)) - elif rfc: - url = 'https://www.rfc-editor.org/rfc/rfc%d.txt' % int(rfc) - results.append('<a href="%s">%s</a>' % (url, escape(all))) - elif pep: - url = 'https://peps.python.org/pep-%04d/' % int(pep) - results.append('<a href="%s">%s</a>' % (url, escape(all))) - elif text[end:end+1] == '(': - results.append(self.namelink(name, methods, funcs, classes)) - elif selfdot: - results.append('self.<strong>%s</strong>' % name) - else: - results.append(self.namelink(name, classes)) - here = end - results.append(escape(text[here:])) - return ''.join(results) - - def docroutine(self, object, name, mod=None, - funcs={}, classes={}, methods={}, cl=None): - """Produce HTML documentation for a function or method object.""" - - anchor = (cl and cl.__name__ or '') + '-' + name - note = '' - - title = '<a name="%s"><strong>%s</strong></a>' % ( - self.escape(anchor), self.escape(name)) - - if callable(object): - argspec = str(signature(object)) - else: - argspec = '(...)' - - if isinstance(object, tuple): - argspec = object[0] or argspec - docstring = object[1] or "" - else: - docstring = pydoc.getdoc(object) - - decl = title + argspec + (note and self.grey( - '<font face="helvetica, arial">%s</font>' % note)) - - doc = self.markup( - docstring, self.preformat, funcs, classes, methods) - doc = doc and '<dd><tt>%s</tt></dd>' % doc - return '<dl><dt>%s</dt>%s</dl>\n' % (decl, doc) - - def docserver(self, server_name, package_documentation, methods): - """Produce HTML documentation for an XML-RPC server.""" - - fdict = {} - for key, value in methods.items(): - fdict[key] = '#-' + key - fdict[value] = fdict[key] - - server_name = self.escape(server_name) - head = '<big><big><strong>%s</strong></big></big>' % server_name - result = self.heading(head) - - doc = self.markup(package_documentation, self.preformat, fdict) - doc = doc and '<tt>%s</tt>' % doc - result = result + '<p>%s</p>\n' % doc - - contents = [] - method_items = sorted(methods.items()) - for key, value in method_items: - contents.append(self.docroutine(value, key, funcs=fdict)) - result = result + self.bigsection( - 'Methods', 'functions', ''.join(contents)) - - return result - - - def page(self, title, contents): - """Format an HTML page.""" - css_path = "/pydoc.css" - css_link = ( - '<link rel="stylesheet" type="text/css" href="%s">' % - css_path) - return '''\ -<!DOCTYPE> -<html lang="en"> -<head> -<meta charset="utf-8"> -<title>Python: %s</title> -%s</head><body>%s</body></html>''' % (title, css_link, contents) - -class XMLRPCDocGenerator: - """Generates documentation for an XML-RPC server. - - This class is designed as mix-in and should not - be constructed directly. - """ - - def __init__(self): - # setup variables used for HTML documentation - self.server_name = 'XML-RPC Server Documentation' - self.server_documentation = \ - "This server exports the following methods through the XML-RPC "\ - "protocol." - self.server_title = 'XML-RPC Server Documentation' - - def set_server_title(self, server_title): - """Set the HTML title of the generated server documentation""" - - self.server_title = server_title - - def set_server_name(self, server_name): - """Set the name of the generated HTML server documentation""" - - self.server_name = server_name - - def set_server_documentation(self, server_documentation): - """Set the documentation string for the entire server.""" - - self.server_documentation = server_documentation - - def generate_html_documentation(self): - """generate_html_documentation() => html documentation for the server - - Generates HTML documentation for the server using introspection for - installed functions and instances that do not implement the - _dispatch method. Alternatively, instances can choose to implement - the _get_method_argstring(method_name) method to provide the - argument string used in the documentation and the - _methodHelp(method_name) method to provide the help text used - in the documentation.""" - - methods = {} - - for method_name in self.system_listMethods(): - if method_name in self.funcs: - method = self.funcs[method_name] - elif self.instance is not None: - method_info = [None, None] # argspec, documentation - if hasattr(self.instance, '_get_method_argstring'): - method_info[0] = self.instance._get_method_argstring(method_name) - if hasattr(self.instance, '_methodHelp'): - method_info[1] = self.instance._methodHelp(method_name) - - method_info = tuple(method_info) - if method_info != (None, None): - method = method_info - elif not hasattr(self.instance, '_dispatch'): - try: - method = resolve_dotted_attribute( - self.instance, - method_name - ) - except AttributeError: - method = method_info - else: - method = method_info - else: - assert 0, "Could not find method in self.functions and no "\ - "instance installed" - - methods[method_name] = method - - documenter = ServerHTMLDoc() - documentation = documenter.docserver( - self.server_name, - self.server_documentation, - methods - ) - - return documenter.page(html.escape(self.server_title), documentation) - -class DocXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): - """XML-RPC and documentation request handler class. - - Handles all HTTP POST requests and attempts to decode them as - XML-RPC requests. - - Handles all HTTP GET requests and interprets them as requests - for documentation. - """ - - def _get_css(self, url): - path_here = os.path.dirname(os.path.realpath(__file__)) - css_path = os.path.join(path_here, "..", "pydoc_data", "_pydoc.css") - with open(css_path, mode="rb") as fp: - return fp.read() - - def do_GET(self): - """Handles the HTTP GET request. - - Interpret all HTTP GET requests as requests for server - documentation. - """ - # Check that the path is legal - if not self.is_rpc_path_valid(): - self.report_404() - return - - if self.path.endswith('.css'): - content_type = 'text/css' - response = self._get_css(self.path) - else: - content_type = 'text/html' - response = self.server.generate_html_documentation().encode('utf-8') - - self.send_response(200) - self.send_header('Content-Type', '%s; charset=UTF-8' % content_type) - self.send_header("Content-length", str(len(response))) - self.end_headers() - self.wfile.write(response) - -class DocXMLRPCServer( SimpleXMLRPCServer, - XMLRPCDocGenerator): - """XML-RPC and HTML documentation server. - - Adds the ability to serve server documentation to the capabilities - of SimpleXMLRPCServer. - """ - - def __init__(self, addr, requestHandler=DocXMLRPCRequestHandler, - logRequests=True, allow_none=False, encoding=None, - bind_and_activate=True, use_builtin_types=False): - SimpleXMLRPCServer.__init__(self, addr, requestHandler, logRequests, - allow_none, encoding, bind_and_activate, - use_builtin_types) - XMLRPCDocGenerator.__init__(self) - -class DocCGIXMLRPCRequestHandler( CGIXMLRPCRequestHandler, - XMLRPCDocGenerator): - """Handler for XML-RPC data and documentation requests passed through - CGI""" - - def handle_get(self): - """Handles the HTTP GET request. - - Interpret all HTTP GET requests as requests for server - documentation. - """ - - response = self.generate_html_documentation().encode('utf-8') - - print('Content-Type: text/html') - print('Content-Length: %d' % len(response)) - print() - sys.stdout.flush() - sys.stdout.buffer.write(response) - sys.stdout.buffer.flush() - - def __init__(self): - CGIXMLRPCRequestHandler.__init__(self) - XMLRPCDocGenerator.__init__(self) - - -if __name__ == '__main__': - import datetime - - class ExampleService: - def getData(self): - return '42' - - class currentTime: - @staticmethod - def getCurrentTime(): - return datetime.datetime.now() - - with SimpleXMLRPCServer(("localhost", 8000)) as server: - server.register_function(pow) - server.register_function(lambda x,y: x+y, 'add') - server.register_instance(ExampleService(), allow_dotted_names=True) - server.register_multicall_functions() - print('Serving XML-RPC on localhost port 8000') - print('It is advisable to run this example server within a secure, closed network.') - try: - server.serve_forever() - except KeyboardInterrupt: - print("\nKeyboard interrupt received, exiting.") - sys.exit(0) diff --git a/Python314_4_x86_Template/Lib/zipapp.py b/Python314_4_x86_Template/Lib/zipapp.py deleted file mode 100644 index 7a4ef96ea..000000000 --- a/Python314_4_x86_Template/Lib/zipapp.py +++ /dev/null @@ -1,231 +0,0 @@ -import contextlib -import os -import pathlib -import shutil -import stat -import sys -import zipfile - -__all__ = ['ZipAppError', 'create_archive', 'get_interpreter'] - - -# The __main__.py used if the users specifies "-m module:fn". -# Note that this will always be written as UTF-8 (module and -# function names can be non-ASCII in Python 3). -# We add a coding cookie even though UTF-8 is the default in Python 3 -# because the resulting archive may be intended to be run under Python 2. -MAIN_TEMPLATE = """\ -# -*- coding: utf-8 -*- -import {module} -{module}.{fn}() -""" - - -# The Windows launcher defaults to UTF-8 when parsing shebang lines if the -# file has no BOM. So use UTF-8 on Windows. -# On Unix, use the filesystem encoding. -if sys.platform.startswith('win'): - shebang_encoding = 'utf-8' -else: - shebang_encoding = sys.getfilesystemencoding() - - -class ZipAppError(ValueError): - pass - - -@contextlib.contextmanager -def _maybe_open(archive, mode): - if isinstance(archive, (str, os.PathLike)): - with open(archive, mode) as f: - yield f - else: - yield archive - - -def _write_file_prefix(f, interpreter): - """Write a shebang line.""" - if interpreter: - shebang = b'#!' + interpreter.encode(shebang_encoding) + b'\n' - f.write(shebang) - - -def _copy_archive(archive, new_archive, interpreter=None): - """Copy an application archive, modifying the shebang line.""" - with _maybe_open(archive, 'rb') as src: - # Skip the shebang line from the source. - # Read 2 bytes of the source and check if they are #!. - first_2 = src.read(2) - if first_2 == b'#!': - # Discard the initial 2 bytes and the rest of the shebang line. - first_2 = b'' - src.readline() - - with _maybe_open(new_archive, 'wb') as dst: - _write_file_prefix(dst, interpreter) - # If there was no shebang, "first_2" contains the first 2 bytes - # of the source file, so write them before copying the rest - # of the file. - dst.write(first_2) - shutil.copyfileobj(src, dst) - - if interpreter and isinstance(new_archive, str): - os.chmod(new_archive, os.stat(new_archive).st_mode | stat.S_IEXEC) - - -def create_archive(source, target=None, interpreter=None, main=None, - filter=None, compressed=False): - """Create an application archive from SOURCE. - - The SOURCE can be the name of a directory, or a filename or a file-like - object referring to an existing archive. - - The content of SOURCE is packed into an application archive in TARGET, - which can be a filename or a file-like object. If SOURCE is a directory, - TARGET can be omitted and will default to the name of SOURCE with .pyz - appended. - - The created application archive will have a shebang line specifying - that it should run with INTERPRETER (there will be no shebang line if - INTERPRETER is None), and a __main__.py which runs MAIN (if MAIN is - not specified, an existing __main__.py will be used). It is an error - to specify MAIN for anything other than a directory source with no - __main__.py, and it is an error to omit MAIN if the directory has no - __main__.py. - """ - # Are we copying an existing archive? - source_is_file = False - if hasattr(source, 'read') and hasattr(source, 'readline'): - source_is_file = True - else: - source = pathlib.Path(source) - if source.is_file(): - source_is_file = True - - if source_is_file: - _copy_archive(source, target, interpreter) - return - - # We are creating a new archive from a directory. - if not source.exists(): - raise ZipAppError("Source does not exist") - has_main = (source / '__main__.py').is_file() - if main and has_main: - raise ZipAppError( - "Cannot specify entry point if the source has __main__.py") - if not (main or has_main): - raise ZipAppError("Archive has no entry point") - - main_py = None - if main: - # Check that main has the right format. - mod, sep, fn = main.partition(':') - mod_ok = all(part.isidentifier() for part in mod.split('.')) - fn_ok = all(part.isidentifier() for part in fn.split('.')) - if not (sep == ':' and mod_ok and fn_ok): - raise ZipAppError("Invalid entry point: " + main) - main_py = MAIN_TEMPLATE.format(module=mod, fn=fn) - - if target is None: - target = source.with_suffix('.pyz') - elif not hasattr(target, 'write'): - target = pathlib.Path(target) - - # Create the list of files to add to the archive now, in case - # the target is being created in the source directory - we - # don't want the target being added to itself - files_to_add = {} - for path in sorted(source.rglob('*')): - relative_path = path.relative_to(source) - if filter is None or filter(relative_path): - files_to_add[path] = relative_path - - # The target cannot be in the list of files to add. If it were, we'd - # end up overwriting the source file and writing the archive into - # itself, which is an error. We therefore check for that case and - # provide a helpful message for the user. - - # Note that we only do a simple path equality check. This won't - # catch every case, but it will catch the common case where the - # source is the CWD and the target is a file in the CWD. More - # thorough checks don't provide enough value to justify the extra - # cost. - - # If target is a file-like object, it will simply fail to compare - # equal to any of the entries in files_to_add, so there's no need - # to add a special check for that. - if target in files_to_add: - raise ZipAppError( - f"The target archive {target} overwrites one of the source files.") - - with _maybe_open(target, 'wb') as fd: - _write_file_prefix(fd, interpreter) - compression = (zipfile.ZIP_DEFLATED if compressed else - zipfile.ZIP_STORED) - with zipfile.ZipFile(fd, 'w', compression=compression) as z: - for path, relative_path in files_to_add.items(): - z.write(path, relative_path.as_posix()) - if main_py: - z.writestr('__main__.py', main_py.encode('utf-8')) - - if interpreter and not hasattr(target, 'write'): - target.chmod(target.stat().st_mode | stat.S_IEXEC) - - -def get_interpreter(archive): - with _maybe_open(archive, 'rb') as f: - if f.read(2) == b'#!': - return f.readline().strip().decode(shebang_encoding) - - -def main(args=None): - """Run the zipapp command line interface. - - The ARGS parameter lets you specify the argument list directly. - Omitting ARGS (or setting it to None) works as for argparse, using - sys.argv[1:] as the argument list. - """ - import argparse - - parser = argparse.ArgumentParser(color=True) - parser.add_argument('--output', '-o', default=None, - help="The name of the output archive. " - "Required if SOURCE is an archive.") - parser.add_argument('--python', '-p', default=None, - help="The name of the Python interpreter to use " - "(default: no shebang line).") - parser.add_argument('--main', '-m', default=None, - help="The main function of the application " - "(default: use an existing __main__.py).") - parser.add_argument('--compress', '-c', action='store_true', - help="Compress files with the deflate method. " - "Files are stored uncompressed by default.") - parser.add_argument('--info', default=False, action='store_true', - help="Display the interpreter from the archive.") - parser.add_argument('source', - help="Source directory (or existing archive).") - - args = parser.parse_args(args) - - # Handle `python -m zipapp archive.pyz --info`. - if args.info: - if not os.path.isfile(args.source): - raise SystemExit("Can only get info for an archive file") - interpreter = get_interpreter(args.source) - print("Interpreter: {}".format(interpreter or "<none>")) - sys.exit(0) - - if os.path.isfile(args.source): - if args.output is None or (os.path.exists(args.output) and - os.path.samefile(args.source, args.output)): - raise SystemExit("In-place editing of archives is not supported") - if args.main: - raise SystemExit("Cannot change the main function when copying") - - create_archive(args.source, args.output, - interpreter=args.python, main=args.main, - compressed=args.compress) - - -if __name__ == '__main__': - main() diff --git a/Python314_4_x86_Template/Lib/zipfile/__init__.py b/Python314_4_x86_Template/Lib/zipfile/__init__.py deleted file mode 100644 index 19aea290b..000000000 --- a/Python314_4_x86_Template/Lib/zipfile/__init__.py +++ /dev/null @@ -1,2435 +0,0 @@ -""" -Read and write ZIP files. - -XXX references to utf-8 need further investigation. -""" -import binascii -import importlib.util -import io -import os -import shutil -import stat -import struct -import sys -import threading -import time - -try: - import zlib # We may need its compression method - crc32 = zlib.crc32 -except ImportError: - zlib = None - crc32 = binascii.crc32 - -try: - import bz2 # We may need its compression method -except ImportError: - bz2 = None - -try: - import lzma # We may need its compression method -except ImportError: - lzma = None - -try: - from compression import zstd # We may need its compression method -except ImportError: - zstd = None - -__all__ = ["BadZipFile", "BadZipfile", "error", - "ZIP_STORED", "ZIP_DEFLATED", "ZIP_BZIP2", "ZIP_LZMA", - "ZIP_ZSTANDARD", "is_zipfile", "ZipInfo", "ZipFile", "PyZipFile", - "LargeZipFile", "Path"] - -class BadZipFile(Exception): - pass - - -class LargeZipFile(Exception): - """ - Raised when writing a zipfile, the zipfile requires ZIP64 extensions - and those extensions are disabled. - """ - -error = BadZipfile = BadZipFile # Pre-3.2 compatibility names - - -ZIP64_LIMIT = (1 << 31) - 1 -ZIP_FILECOUNT_LIMIT = (1 << 16) - 1 -ZIP_MAX_COMMENT = (1 << 16) - 1 - -# constants for Zip file compression methods -ZIP_STORED = 0 -ZIP_DEFLATED = 8 -ZIP_BZIP2 = 12 -ZIP_LZMA = 14 -ZIP_ZSTANDARD = 93 -# Other ZIP compression methods not supported - -DEFAULT_VERSION = 20 -ZIP64_VERSION = 45 -BZIP2_VERSION = 46 -LZMA_VERSION = 63 -ZSTANDARD_VERSION = 63 -# we recognize (but not necessarily support) all features up to that version -MAX_EXTRACT_VERSION = 63 - -# Below are some formats and associated data for reading/writing headers using -# the struct module. The names and structures of headers/records are those used -# in the PKWARE description of the ZIP file format: -# http://www.pkware.com/documents/casestudies/APPNOTE.TXT -# (URL valid as of January 2008) - -# The "end of central directory" structure, magic number, size, and indices -# (section V.I in the format document) -structEndArchive = b"<4s4H2LH" -stringEndArchive = b"PK\005\006" -sizeEndCentDir = struct.calcsize(structEndArchive) - -_ECD_SIGNATURE = 0 -_ECD_DISK_NUMBER = 1 -_ECD_DISK_START = 2 -_ECD_ENTRIES_THIS_DISK = 3 -_ECD_ENTRIES_TOTAL = 4 -_ECD_SIZE = 5 -_ECD_OFFSET = 6 -_ECD_COMMENT_SIZE = 7 -# These last two indices are not part of the structure as defined in the -# spec, but they are used internally by this module as a convenience -_ECD_COMMENT = 8 -_ECD_LOCATION = 9 - -# The "central directory" structure, magic number, size, and indices -# of entries in the structure (section V.F in the format document) -structCentralDir = "<4s4B4HL2L5H2L" -stringCentralDir = b"PK\001\002" -sizeCentralDir = struct.calcsize(structCentralDir) - -# indexes of entries in the central directory structure -_CD_SIGNATURE = 0 -_CD_CREATE_VERSION = 1 -_CD_CREATE_SYSTEM = 2 -_CD_EXTRACT_VERSION = 3 -_CD_EXTRACT_SYSTEM = 4 -_CD_FLAG_BITS = 5 -_CD_COMPRESS_TYPE = 6 -_CD_TIME = 7 -_CD_DATE = 8 -_CD_CRC = 9 -_CD_COMPRESSED_SIZE = 10 -_CD_UNCOMPRESSED_SIZE = 11 -_CD_FILENAME_LENGTH = 12 -_CD_EXTRA_FIELD_LENGTH = 13 -_CD_COMMENT_LENGTH = 14 -_CD_DISK_NUMBER_START = 15 -_CD_INTERNAL_FILE_ATTRIBUTES = 16 -_CD_EXTERNAL_FILE_ATTRIBUTES = 17 -_CD_LOCAL_HEADER_OFFSET = 18 - -# General purpose bit flags -# Zip Appnote: 4.4.4 general purpose bit flag: (2 bytes) -_MASK_ENCRYPTED = 1 << 0 -# Bits 1 and 2 have different meanings depending on the compression used. -_MASK_COMPRESS_OPTION_1 = 1 << 1 -# _MASK_COMPRESS_OPTION_2 = 1 << 2 -# _MASK_USE_DATA_DESCRIPTOR: If set, crc-32, compressed size and uncompressed -# size are zero in the local header and the real values are written in the data -# descriptor immediately following the compressed data. -_MASK_USE_DATA_DESCRIPTOR = 1 << 3 -# Bit 4: Reserved for use with compression method 8, for enhanced deflating. -# _MASK_RESERVED_BIT_4 = 1 << 4 -_MASK_COMPRESSED_PATCH = 1 << 5 -_MASK_STRONG_ENCRYPTION = 1 << 6 -# _MASK_UNUSED_BIT_7 = 1 << 7 -# _MASK_UNUSED_BIT_8 = 1 << 8 -# _MASK_UNUSED_BIT_9 = 1 << 9 -# _MASK_UNUSED_BIT_10 = 1 << 10 -_MASK_UTF_FILENAME = 1 << 11 -# Bit 12: Reserved by PKWARE for enhanced compression. -# _MASK_RESERVED_BIT_12 = 1 << 12 -# _MASK_ENCRYPTED_CENTRAL_DIR = 1 << 13 -# Bit 14, 15: Reserved by PKWARE -# _MASK_RESERVED_BIT_14 = 1 << 14 -# _MASK_RESERVED_BIT_15 = 1 << 15 - -# The "local file header" structure, magic number, size, and indices -# (section V.A in the format document) -structFileHeader = "<4s2B4HL2L2H" -stringFileHeader = b"PK\003\004" -sizeFileHeader = struct.calcsize(structFileHeader) - -_FH_SIGNATURE = 0 -_FH_EXTRACT_VERSION = 1 -_FH_EXTRACT_SYSTEM = 2 -_FH_GENERAL_PURPOSE_FLAG_BITS = 3 -_FH_COMPRESSION_METHOD = 4 -_FH_LAST_MOD_TIME = 5 -_FH_LAST_MOD_DATE = 6 -_FH_CRC = 7 -_FH_COMPRESSED_SIZE = 8 -_FH_UNCOMPRESSED_SIZE = 9 -_FH_FILENAME_LENGTH = 10 -_FH_EXTRA_FIELD_LENGTH = 11 - -# The "Zip64 end of central directory locator" structure, magic number, and size -structEndArchive64Locator = "<4sLQL" -stringEndArchive64Locator = b"PK\x06\x07" -sizeEndCentDir64Locator = struct.calcsize(structEndArchive64Locator) - -# The "Zip64 end of central directory" record, magic number, size, and indices -# (section V.G in the format document) -structEndArchive64 = "<4sQ2H2L4Q" -stringEndArchive64 = b"PK\x06\x06" -sizeEndCentDir64 = struct.calcsize(structEndArchive64) - -_CD64_SIGNATURE = 0 -_CD64_DIRECTORY_RECSIZE = 1 -_CD64_CREATE_VERSION = 2 -_CD64_EXTRACT_VERSION = 3 -_CD64_DISK_NUMBER = 4 -_CD64_DISK_NUMBER_START = 5 -_CD64_NUMBER_ENTRIES_THIS_DISK = 6 -_CD64_NUMBER_ENTRIES_TOTAL = 7 -_CD64_DIRECTORY_SIZE = 8 -_CD64_OFFSET_START_CENTDIR = 9 - -_DD_SIGNATURE = 0x08074b50 - - -class _Extra(bytes): - FIELD_STRUCT = struct.Struct('<HH') - - def __new__(cls, val, id=None): - return super().__new__(cls, val) - - def __init__(self, val, id=None): - self.id = id - - @classmethod - def read_one(cls, raw): - try: - xid, xlen = cls.FIELD_STRUCT.unpack(raw[:4]) - except struct.error: - xid = None - xlen = 0 - return cls(raw[:4+xlen], xid), raw[4+xlen:] - - @classmethod - def split(cls, data): - # use memoryview for zero-copy slices - rest = memoryview(data) - while rest: - extra, rest = _Extra.read_one(rest) - yield extra - - @classmethod - def strip(cls, data, xids): - """Remove Extra fields with specified IDs.""" - return b''.join( - ex - for ex in cls.split(data) - if ex.id not in xids - ) - - -def _check_zipfile(fp): - try: - endrec = _EndRecData(fp) - if endrec: - if endrec[_ECD_ENTRIES_TOTAL] == 0 and endrec[_ECD_SIZE] == 0 and endrec[_ECD_OFFSET] == 0: - return True # Empty zipfiles are still zipfiles - elif endrec[_ECD_DISK_NUMBER] == endrec[_ECD_DISK_START]: - # Central directory is on the same disk - fp.seek(sum(_handle_prepended_data(endrec))) - if endrec[_ECD_SIZE] >= sizeCentralDir: - data = fp.read(sizeCentralDir) # CD is where we expect it to be - if len(data) == sizeCentralDir: - centdir = struct.unpack(structCentralDir, data) # CD is the right size - if centdir[_CD_SIGNATURE] == stringCentralDir: - return True # First central directory entry has correct magic number - except OSError: - pass - return False - -def is_zipfile(filename): - """Quickly see if a file is a ZIP file by checking the magic number. - - The filename argument may be a file or file-like object too. - """ - result = False - try: - if hasattr(filename, "read"): - pos = filename.tell() - result = _check_zipfile(fp=filename) - filename.seek(pos) - else: - with open(filename, "rb") as fp: - result = _check_zipfile(fp) - except (OSError, BadZipFile): - pass - return result - -def _handle_prepended_data(endrec, debug=0): - size_cd = endrec[_ECD_SIZE] # bytes in central directory - offset_cd = endrec[_ECD_OFFSET] # offset of central directory - - # "concat" is zero, unless zip was concatenated to another file - concat = endrec[_ECD_LOCATION] - size_cd - offset_cd - - if debug > 2: - inferred = concat + offset_cd - print("given, inferred, offset", offset_cd, inferred, concat) - - return offset_cd, concat - -def _EndRecData64(fpin, offset, endrec): - """ - Read the ZIP64 end-of-archive records and use that to update endrec - """ - offset -= sizeEndCentDir64Locator - if offset < 0: - # The file is not large enough to contain a ZIP64 - # end-of-archive record, so just return the end record we were given. - return endrec - fpin.seek(offset) - data = fpin.read(sizeEndCentDir64Locator) - if len(data) != sizeEndCentDir64Locator: - raise OSError("Unknown I/O error") - sig, diskno, reloff, disks = struct.unpack(structEndArchive64Locator, data) - if sig != stringEndArchive64Locator: - return endrec - - if diskno != 0 or disks > 1: - raise BadZipFile("zipfiles that span multiple disks are not supported") - - offset -= sizeEndCentDir64 - if reloff > offset: - raise BadZipFile("Corrupt zip64 end of central directory locator") - # First, check the assumption that there is no prepended data. - fpin.seek(reloff) - extrasz = offset - reloff - data = fpin.read(sizeEndCentDir64) - if len(data) != sizeEndCentDir64: - raise OSError("Unknown I/O error") - if not data.startswith(stringEndArchive64) and reloff != offset: - # Since we already have seen the Zip64 EOCD Locator, it's - # possible we got here because there is prepended data. - # Assume no 'zip64 extensible data' - fpin.seek(offset) - extrasz = 0 - data = fpin.read(sizeEndCentDir64) - if len(data) != sizeEndCentDir64: - raise OSError("Unknown I/O error") - if not data.startswith(stringEndArchive64): - raise BadZipFile("Zip64 end of central directory record not found") - - sig, sz, create_version, read_version, disk_num, disk_dir, \ - dircount, dircount2, dirsize, diroffset = \ - struct.unpack(structEndArchive64, data) - if (diroffset + dirsize != reloff or - sz + 12 != sizeEndCentDir64 + extrasz): - raise BadZipFile("Corrupt zip64 end of central directory record") - - # Update the original endrec using data from the ZIP64 record - endrec[_ECD_SIGNATURE] = sig - endrec[_ECD_DISK_NUMBER] = disk_num - endrec[_ECD_DISK_START] = disk_dir - endrec[_ECD_ENTRIES_THIS_DISK] = dircount - endrec[_ECD_ENTRIES_TOTAL] = dircount2 - endrec[_ECD_SIZE] = dirsize - endrec[_ECD_OFFSET] = diroffset - endrec[_ECD_LOCATION] = offset - extrasz - return endrec - - -def _EndRecData(fpin): - """Return data from the "End of Central Directory" record, or None. - - The data is a list of the nine items in the ZIP "End of central dir" - record followed by a tenth item, the file seek offset of this record.""" - - # Determine file size - fpin.seek(0, 2) - filesize = fpin.tell() - - # Check to see if this is ZIP file with no archive comment (the - # "end of central directory" structure should be the last item in the - # file if this is the case). - try: - fpin.seek(-sizeEndCentDir, 2) - except OSError: - return None - data = fpin.read(sizeEndCentDir) - if (len(data) == sizeEndCentDir and - data[0:4] == stringEndArchive and - data[-2:] == b"\000\000"): - # the signature is correct and there's no comment, unpack structure - endrec = struct.unpack(structEndArchive, data) - endrec=list(endrec) - - # Append a blank comment and record start offset - endrec.append(b"") - endrec.append(filesize - sizeEndCentDir) - - # Try to read the "Zip64 end of central directory" structure - return _EndRecData64(fpin, filesize - sizeEndCentDir, endrec) - - # Either this is not a ZIP file, or it is a ZIP file with an archive - # comment. Search the end of the file for the "end of central directory" - # record signature. The comment is the last item in the ZIP file and may be - # up to 64K long. It is assumed that the "end of central directory" magic - # number does not appear in the comment. - maxCommentStart = max(filesize - ZIP_MAX_COMMENT - sizeEndCentDir, 0) - fpin.seek(maxCommentStart, 0) - data = fpin.read(ZIP_MAX_COMMENT + sizeEndCentDir) - start = data.rfind(stringEndArchive) - if start >= 0: - # found the magic number; attempt to unpack and interpret - recData = data[start:start+sizeEndCentDir] - if len(recData) != sizeEndCentDir: - # Zip file is corrupted. - return None - endrec = list(struct.unpack(structEndArchive, recData)) - commentSize = endrec[_ECD_COMMENT_SIZE] #as claimed by the zip file - comment = data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize] - endrec.append(comment) - endrec.append(maxCommentStart + start) - - # Try to read the "Zip64 end of central directory" structure - return _EndRecData64(fpin, maxCommentStart + start, endrec) - - # Unable to find a valid end of central directory structure - return None - -def _sanitize_filename(filename): - """Terminate the file name at the first null byte and - ensure paths always use forward slashes as the directory separator.""" - - # Terminate the file name at the first null byte. Null bytes in file - # names are used as tricks by viruses in archives. - null_byte = filename.find(chr(0)) - if null_byte >= 0: - filename = filename[0:null_byte] - # This is used to ensure paths in generated ZIP files always use - # forward slashes as the directory separator, as required by the - # ZIP format specification. - if os.sep != "/" and os.sep in filename: - filename = filename.replace(os.sep, "/") - if os.altsep and os.altsep != "/" and os.altsep in filename: - filename = filename.replace(os.altsep, "/") - return filename - - -class ZipInfo: - """Class with attributes describing each file in the ZIP archive.""" - - __slots__ = ( - 'orig_filename', - 'filename', - 'date_time', - 'compress_type', - 'compress_level', - 'comment', - 'extra', - 'create_system', - 'create_version', - 'extract_version', - 'reserved', - 'flag_bits', - 'volume', - 'internal_attr', - 'external_attr', - 'header_offset', - 'CRC', - 'compress_size', - 'file_size', - '_raw_time', - '_end_offset', - ) - - def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)): - self.orig_filename = filename # Original file name in archive - - # Terminate the file name at the first null byte and - # ensure paths always use forward slashes as the directory separator. - filename = _sanitize_filename(filename) - - self.filename = filename # Normalized file name - self.date_time = date_time # year, month, day, hour, min, sec - - if date_time[0] < 1980: - raise ValueError('ZIP does not support timestamps before 1980') - - # Standard values: - self.compress_type = ZIP_STORED # Type of compression for the file - self.compress_level = None # Level for the compressor - self.comment = b"" # Comment for each file - self.extra = b"" # ZIP extra data - if sys.platform == 'win32': - self.create_system = 0 # System which created ZIP archive - else: - # Assume everything else is unix-y - self.create_system = 3 # System which created ZIP archive - self.create_version = DEFAULT_VERSION # Version which created ZIP archive - self.extract_version = DEFAULT_VERSION # Version needed to extract archive - self.reserved = 0 # Must be zero - self.flag_bits = 0 # ZIP flag bits - self.volume = 0 # Volume number of file header - self.internal_attr = 0 # Internal attributes - self.external_attr = 0 # External file attributes - self.compress_size = 0 # Size of the compressed file - self.file_size = 0 # Size of the uncompressed file - self._end_offset = None # Start of the next local header or central directory - # Other attributes are set by class ZipFile: - # header_offset Byte offset to the file header - # CRC CRC-32 of the uncompressed file - - # Maintain backward compatibility with the old protected attribute name. - @property - def _compresslevel(self): - return self.compress_level - - @_compresslevel.setter - def _compresslevel(self, value): - self.compress_level = value - - def __repr__(self): - result = ['<%s filename=%r' % (self.__class__.__name__, self.filename)] - if self.compress_type != ZIP_STORED: - result.append(' compress_type=%s' % - compressor_names.get(self.compress_type, - self.compress_type)) - hi = self.external_attr >> 16 - lo = self.external_attr & 0xFFFF - if hi: - result.append(' filemode=%r' % stat.filemode(hi)) - if lo: - result.append(' external_attr=%#x' % lo) - isdir = self.is_dir() - if not isdir or self.file_size: - result.append(' file_size=%r' % self.file_size) - if ((not isdir or self.compress_size) and - (self.compress_type != ZIP_STORED or - self.file_size != self.compress_size)): - result.append(' compress_size=%r' % self.compress_size) - result.append('>') - return ''.join(result) - - def FileHeader(self, zip64=None): - """Return the per-file header as a bytes object. - - When the optional zip64 arg is None rather than a bool, we will - decide based upon the file_size and compress_size, if known, - False otherwise. - """ - dt = self.date_time - dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] - dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) - if self.flag_bits & _MASK_USE_DATA_DESCRIPTOR: - # Set these to zero because we write them after the file data - CRC = compress_size = file_size = 0 - else: - CRC = self.CRC - compress_size = self.compress_size - file_size = self.file_size - - extra = self.extra - - min_version = 0 - if zip64 is None: - # We always explicitly pass zip64 within this module.... This - # remains for anyone using ZipInfo.FileHeader as a public API. - zip64 = file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT - if zip64: - fmt = '<HHQQ' - extra = extra + struct.pack(fmt, - 1, struct.calcsize(fmt)-4, file_size, compress_size) - file_size = 0xffffffff - compress_size = 0xffffffff - min_version = ZIP64_VERSION - - if self.compress_type == ZIP_BZIP2: - min_version = max(BZIP2_VERSION, min_version) - elif self.compress_type == ZIP_LZMA: - min_version = max(LZMA_VERSION, min_version) - elif self.compress_type == ZIP_ZSTANDARD: - min_version = max(ZSTANDARD_VERSION, min_version) - - self.extract_version = max(min_version, self.extract_version) - self.create_version = max(min_version, self.create_version) - filename, flag_bits = self._encodeFilenameFlags() - header = struct.pack(structFileHeader, stringFileHeader, - self.extract_version, self.reserved, flag_bits, - self.compress_type, dostime, dosdate, CRC, - compress_size, file_size, - len(filename), len(extra)) - return header + filename + extra - - def _encodeFilenameFlags(self): - try: - return self.filename.encode('ascii'), self.flag_bits - except UnicodeEncodeError: - return self.filename.encode('utf-8'), self.flag_bits | _MASK_UTF_FILENAME - - def _decodeExtra(self, filename_crc): - # Try to decode the extra field. - extra = self.extra - unpack = struct.unpack - while len(extra) >= 4: - tp, ln = unpack('<HH', extra[:4]) - if ln+4 > len(extra): - raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln)) - if tp == 0x0001: - data = extra[4:ln+4] - # ZIP64 extension (large files and/or large archives) - try: - if self.file_size in (0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF): - field = "File size" - self.file_size, = unpack('<Q', data[:8]) - data = data[8:] - if self.compress_size == 0xFFFF_FFFF: - field = "Compress size" - self.compress_size, = unpack('<Q', data[:8]) - data = data[8:] - if self.header_offset == 0xFFFF_FFFF: - field = "Header offset" - self.header_offset, = unpack('<Q', data[:8]) - except struct.error: - raise BadZipFile(f"Corrupt zip64 extra field. " - f"{field} not found.") from None - elif tp == 0x7075: - data = extra[4:ln+4] - # Unicode Path Extra Field - try: - up_version, up_name_crc = unpack('<BL', data[:5]) - if up_version == 1 and up_name_crc == filename_crc: - up_unicode_name = data[5:].decode('utf-8') - if up_unicode_name: - self.filename = _sanitize_filename(up_unicode_name) - else: - import warnings - warnings.warn("Empty unicode path extra field (0x7075)", stacklevel=2) - except struct.error as e: - raise BadZipFile("Corrupt unicode path extra field (0x7075)") from e - except UnicodeDecodeError as e: - raise BadZipFile('Corrupt unicode path extra field (0x7075): invalid utf-8 bytes') from e - - extra = extra[ln+4:] - - @classmethod - def from_file(cls, filename, arcname=None, *, strict_timestamps=True): - """Construct an appropriate ZipInfo for a file on the filesystem. - - filename should be the path to a file or directory on the filesystem. - - arcname is the name which it will have within the archive (by default, - this will be the same as filename, but without a drive letter and with - leading path separators removed). - """ - if isinstance(filename, os.PathLike): - filename = os.fspath(filename) - st = os.stat(filename) - isdir = stat.S_ISDIR(st.st_mode) - mtime = time.localtime(st.st_mtime) - date_time = mtime[0:6] - if not strict_timestamps and date_time[0] < 1980: - date_time = (1980, 1, 1, 0, 0, 0) - elif not strict_timestamps and date_time[0] > 2107: - date_time = (2107, 12, 31, 23, 59, 59) - # Create ZipInfo instance to store file information - if arcname is None: - arcname = filename - arcname = os.path.normpath(os.path.splitdrive(arcname)[1]) - while arcname[0] in (os.sep, os.altsep): - arcname = arcname[1:] - if isdir: - arcname += '/' - zinfo = cls(arcname, date_time) - zinfo.external_attr = (st.st_mode & 0xFFFF) << 16 # Unix attributes - if isdir: - zinfo.file_size = 0 - zinfo.external_attr |= 0x10 # MS-DOS directory flag - else: - zinfo.file_size = st.st_size - - return zinfo - - def _for_archive(self, archive): - """Resolve suitable defaults from the archive. - - Resolve the date_time, compression attributes, and external attributes - to suitable defaults as used by :method:`ZipFile.writestr`. - - Return self. - """ - # gh-91279: Set the SOURCE_DATE_EPOCH to a specific timestamp - epoch = os.environ.get('SOURCE_DATE_EPOCH') - get_time = int(epoch) if epoch else time.time() - self.date_time = time.localtime(get_time)[:6] - - self.compress_type = archive.compression - self.compress_level = archive.compresslevel - if self.filename.endswith('/'): # pragma: no cover - self.external_attr = 0o40775 << 16 # drwxrwxr-x - self.external_attr |= 0x10 # MS-DOS directory flag - else: - self.external_attr = 0o600 << 16 # ?rw------- - return self - - def is_dir(self): - """Return True if this archive member is a directory.""" - if self.filename.endswith('/'): - return True - # The ZIP format specification requires to use forward slashes - # as the directory separator, but in practice some ZIP files - # created on Windows can use backward slashes. For compatibility - # with the extraction code which already handles this: - if os.path.altsep: - return self.filename.endswith((os.path.sep, os.path.altsep)) - return False - - -# ZIP encryption uses the CRC32 one-byte primitive for scrambling some -# internal keys. We noticed that a direct implementation is faster than -# relying on binascii.crc32(). - -_crctable = None -def _gen_crc(crc): - for j in range(8): - if crc & 1: - crc = (crc >> 1) ^ 0xEDB88320 - else: - crc >>= 1 - return crc - -# ZIP supports a password-based form of encryption. Even though known -# plaintext attacks have been found against it, it is still useful -# to be able to get data out of such a file. -# -# Usage: -# zd = _ZipDecrypter(mypwd) -# plain_bytes = zd(cypher_bytes) - -def _ZipDecrypter(pwd): - key0 = 305419896 - key1 = 591751049 - key2 = 878082192 - - global _crctable - if _crctable is None: - _crctable = list(map(_gen_crc, range(256))) - crctable = _crctable - - def crc32(ch, crc): - """Compute the CRC32 primitive on one byte.""" - return (crc >> 8) ^ crctable[(crc ^ ch) & 0xFF] - - def update_keys(c): - nonlocal key0, key1, key2 - key0 = crc32(c, key0) - key1 = (key1 + (key0 & 0xFF)) & 0xFFFFFFFF - key1 = (key1 * 134775813 + 1) & 0xFFFFFFFF - key2 = crc32(key1 >> 24, key2) - - for p in pwd: - update_keys(p) - - def decrypter(data): - """Decrypt a bytes object.""" - result = bytearray() - append = result.append - for c in data: - k = key2 | 2 - c ^= ((k * (k^1)) >> 8) & 0xFF - update_keys(c) - append(c) - return bytes(result) - - return decrypter - - -class LZMACompressor: - - def __init__(self): - self._comp = None - - def _init(self): - props = lzma._encode_filter_properties({'id': lzma.FILTER_LZMA1}) - self._comp = lzma.LZMACompressor(lzma.FORMAT_RAW, filters=[ - lzma._decode_filter_properties(lzma.FILTER_LZMA1, props) - ]) - return struct.pack('<BBH', 9, 4, len(props)) + props - - def compress(self, data): - if self._comp is None: - return self._init() + self._comp.compress(data) - return self._comp.compress(data) - - def flush(self): - if self._comp is None: - return self._init() + self._comp.flush() - return self._comp.flush() - - -class LZMADecompressor: - - def __init__(self): - self._decomp = None - self._unconsumed = b'' - self.eof = False - - def decompress(self, data): - if self._decomp is None: - self._unconsumed += data - if len(self._unconsumed) <= 4: - return b'' - psize, = struct.unpack('<H', self._unconsumed[2:4]) - if len(self._unconsumed) <= 4 + psize: - return b'' - - self._decomp = lzma.LZMADecompressor(lzma.FORMAT_RAW, filters=[ - lzma._decode_filter_properties(lzma.FILTER_LZMA1, - self._unconsumed[4:4 + psize]) - ]) - data = self._unconsumed[4 + psize:] - del self._unconsumed - - result = self._decomp.decompress(data) - self.eof = self._decomp.eof - return result - - -compressor_names = { - 0: 'store', - 1: 'shrink', - 2: 'reduce', - 3: 'reduce', - 4: 'reduce', - 5: 'reduce', - 6: 'implode', - 7: 'tokenize', - 8: 'deflate', - 9: 'deflate64', - 10: 'implode', - 12: 'bzip2', - 14: 'lzma', - 18: 'terse', - 19: 'lz77', - 93: 'zstd', - 97: 'wavpack', - 98: 'ppmd', -} - -def _check_compression(compression): - if compression == ZIP_STORED: - pass - elif compression == ZIP_DEFLATED: - if not zlib: - raise RuntimeError( - "Compression requires the (missing) zlib module") - elif compression == ZIP_BZIP2: - if not bz2: - raise RuntimeError( - "Compression requires the (missing) bz2 module") - elif compression == ZIP_LZMA: - if not lzma: - raise RuntimeError( - "Compression requires the (missing) lzma module") - elif compression == ZIP_ZSTANDARD: - if not zstd: - raise RuntimeError( - "Compression requires the (missing) compression.zstd module") - else: - raise NotImplementedError("That compression method is not supported") - - -def _get_compressor(compress_type, compresslevel=None): - if compress_type == ZIP_DEFLATED: - if compresslevel is not None: - return zlib.compressobj(compresslevel, zlib.DEFLATED, -15) - return zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15) - elif compress_type == ZIP_BZIP2: - if compresslevel is not None: - return bz2.BZ2Compressor(compresslevel) - return bz2.BZ2Compressor() - # compresslevel is ignored for ZIP_LZMA - elif compress_type == ZIP_LZMA: - return LZMACompressor() - elif compress_type == ZIP_ZSTANDARD: - return zstd.ZstdCompressor(level=compresslevel) - else: - return None - - -def _get_decompressor(compress_type): - _check_compression(compress_type) - if compress_type == ZIP_STORED: - return None - elif compress_type == ZIP_DEFLATED: - return zlib.decompressobj(-15) - elif compress_type == ZIP_BZIP2: - return bz2.BZ2Decompressor() - elif compress_type == ZIP_LZMA: - return LZMADecompressor() - elif compress_type == ZIP_ZSTANDARD: - return zstd.ZstdDecompressor() - else: - descr = compressor_names.get(compress_type) - if descr: - raise NotImplementedError("compression type %d (%s)" % (compress_type, descr)) - else: - raise NotImplementedError("compression type %d" % (compress_type,)) - - -class _SharedFile: - def __init__(self, file, pos, close, lock, writing): - self._file = file - self._pos = pos - self._close = close - self._lock = lock - self._writing = writing - self.seekable = file.seekable - - def tell(self): - return self._pos - - def seek(self, offset, whence=0): - with self._lock: - if self._writing(): - raise ValueError("Can't reposition in the ZIP file while " - "there is an open writing handle on it. " - "Close the writing handle before trying to read.") - if whence == os.SEEK_CUR: - self._file.seek(self._pos + offset) - else: - self._file.seek(offset, whence) - self._pos = self._file.tell() - return self._pos - - def read(self, n=-1): - with self._lock: - if self._writing(): - raise ValueError("Can't read from the ZIP file while there " - "is an open writing handle on it. " - "Close the writing handle before trying to read.") - self._file.seek(self._pos) - data = self._file.read(n) - self._pos = self._file.tell() - return data - - def close(self): - if self._file is not None: - fileobj = self._file - self._file = None - self._close(fileobj) - -# Provide the tell method for unseekable stream -class _Tellable: - def __init__(self, fp): - self.fp = fp - self.offset = 0 - - def write(self, data): - n = self.fp.write(data) - self.offset += n - return n - - def tell(self): - return self.offset - - def flush(self): - self.fp.flush() - - def close(self): - self.fp.close() - - -class ZipExtFile(io.BufferedIOBase): - """File-like object for reading an archive member. - Is returned by ZipFile.open(). - """ - - # Max size supported by decompressor. - MAX_N = (1 << 31) - 1 - - # Read from compressed files in 4k blocks. - MIN_READ_SIZE = 4096 - - # Chunk size to read during seek - MAX_SEEK_READ = 1 << 24 - - def __init__(self, fileobj, mode, zipinfo, pwd=None, - close_fileobj=False): - self._fileobj = fileobj - self._pwd = pwd - self._close_fileobj = close_fileobj - - self._compress_type = zipinfo.compress_type - self._compress_left = zipinfo.compress_size - self._left = zipinfo.file_size - - self._decompressor = _get_decompressor(self._compress_type) - - self._eof = False - self._readbuffer = b'' - self._offset = 0 - - self.newlines = None - - self.mode = mode - self.name = zipinfo.filename - - if hasattr(zipinfo, 'CRC'): - self._expected_crc = zipinfo.CRC - self._running_crc = crc32(b'') - else: - self._expected_crc = None - - self._seekable = False - try: - if fileobj.seekable(): - self._orig_compress_start = fileobj.tell() - self._orig_compress_size = zipinfo.compress_size - self._orig_file_size = zipinfo.file_size - self._orig_start_crc = self._running_crc - self._orig_crc = self._expected_crc - self._seekable = True - except AttributeError: - pass - - self._decrypter = None - if pwd: - if zipinfo.flag_bits & _MASK_USE_DATA_DESCRIPTOR: - # compare against the file type from extended local headers - check_byte = (zipinfo._raw_time >> 8) & 0xff - else: - # compare against the CRC otherwise - check_byte = (zipinfo.CRC >> 24) & 0xff - h = self._init_decrypter() - if h != check_byte: - raise RuntimeError("Bad password for file %r" % zipinfo.orig_filename) - - - def _init_decrypter(self): - self._decrypter = _ZipDecrypter(self._pwd) - # The first 12 bytes in the cypher stream is an encryption header - # used to strengthen the algorithm. The first 11 bytes are - # completely random, while the 12th contains the MSB of the CRC, - # or the MSB of the file time depending on the header type - # and is used to check the correctness of the password. - header = self._fileobj.read(12) - self._compress_left -= 12 - return self._decrypter(header)[11] - - def __repr__(self): - result = ['<%s.%s' % (self.__class__.__module__, - self.__class__.__qualname__)] - if not self.closed: - result.append(' name=%r' % (self.name,)) - if self._compress_type != ZIP_STORED: - result.append(' compress_type=%s' % - compressor_names.get(self._compress_type, - self._compress_type)) - else: - result.append(' [closed]') - result.append('>') - return ''.join(result) - - def readline(self, limit=-1): - """Read and return a line from the stream. - - If limit is specified, at most limit bytes will be read. - """ - - if limit < 0: - # Shortcut common case - newline found in buffer. - i = self._readbuffer.find(b'\n', self._offset) + 1 - if i > 0: - line = self._readbuffer[self._offset: i] - self._offset = i - return line - - return io.BufferedIOBase.readline(self, limit) - - def peek(self, n=1): - """Returns buffered bytes without advancing the position.""" - if n > len(self._readbuffer) - self._offset: - chunk = self.read(n) - if len(chunk) > self._offset: - self._readbuffer = chunk + self._readbuffer[self._offset:] - self._offset = 0 - else: - self._offset -= len(chunk) - - # Return up to 512 bytes to reduce allocation overhead for tight loops. - return self._readbuffer[self._offset: self._offset + 512] - - def readable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return True - - def read(self, n=-1): - """Read and return up to n bytes. - If the argument is omitted, None, or negative, data is read and returned until EOF is reached. - """ - if self.closed: - raise ValueError("read from closed file.") - if n is None or n < 0: - buf = self._readbuffer[self._offset:] - self._readbuffer = b'' - self._offset = 0 - while not self._eof: - buf += self._read1(self.MAX_N) - return buf - - end = n + self._offset - if end < len(self._readbuffer): - buf = self._readbuffer[self._offset:end] - self._offset = end - return buf - - n = end - len(self._readbuffer) - buf = self._readbuffer[self._offset:] - self._readbuffer = b'' - self._offset = 0 - while n > 0 and not self._eof: - data = self._read1(n) - if n < len(data): - self._readbuffer = data - self._offset = n - buf += data[:n] - break - buf += data - n -= len(data) - return buf - - def _update_crc(self, newdata): - # Update the CRC using the given data. - if self._expected_crc is None: - # No need to compute the CRC if we don't have a reference value - return - self._running_crc = crc32(newdata, self._running_crc) - # Check the CRC if we're at the end of the file - if self._eof and self._running_crc != self._expected_crc: - raise BadZipFile("Bad CRC-32 for file %r" % self.name) - - def read1(self, n): - """Read up to n bytes with at most one read() system call.""" - - if n is None or n < 0: - buf = self._readbuffer[self._offset:] - self._readbuffer = b'' - self._offset = 0 - while not self._eof: - data = self._read1(self.MAX_N) - if data: - buf += data - break - return buf - - end = n + self._offset - if end < len(self._readbuffer): - buf = self._readbuffer[self._offset:end] - self._offset = end - return buf - - n = end - len(self._readbuffer) - buf = self._readbuffer[self._offset:] - self._readbuffer = b'' - self._offset = 0 - if n > 0: - while not self._eof: - data = self._read1(n) - if n < len(data): - self._readbuffer = data - self._offset = n - buf += data[:n] - break - if data: - buf += data - break - return buf - - def _read1(self, n): - # Read up to n compressed bytes with at most one read() system call, - # decrypt and decompress them. - if self._eof or n <= 0: - return b'' - - # Read from file. - if self._compress_type == ZIP_DEFLATED: - ## Handle unconsumed data. - data = self._decompressor.unconsumed_tail - if n > len(data): - data += self._read2(n - len(data)) - else: - data = self._read2(n) - - if self._compress_type == ZIP_STORED: - self._eof = self._compress_left <= 0 - elif self._compress_type == ZIP_DEFLATED: - n = max(n, self.MIN_READ_SIZE) - data = self._decompressor.decompress(data, n) - self._eof = (self._decompressor.eof or - self._compress_left <= 0 and - not self._decompressor.unconsumed_tail) - if self._eof: - data += self._decompressor.flush() - else: - data = self._decompressor.decompress(data) - self._eof = self._decompressor.eof or self._compress_left <= 0 - - data = data[:self._left] - self._left -= len(data) - if self._left <= 0: - self._eof = True - self._update_crc(data) - return data - - def _read2(self, n): - if self._compress_left <= 0: - return b'' - - n = max(n, self.MIN_READ_SIZE) - n = min(n, self._compress_left) - - data = self._fileobj.read(n) - self._compress_left -= len(data) - if not data: - raise EOFError - - if self._decrypter is not None: - data = self._decrypter(data) - return data - - def close(self): - try: - if self._close_fileobj: - self._fileobj.close() - finally: - super().close() - - def seekable(self): - if self.closed: - raise ValueError("I/O operation on closed file.") - return self._seekable - - def seek(self, offset, whence=os.SEEK_SET): - if self.closed: - raise ValueError("seek on closed file.") - if not self._seekable: - raise io.UnsupportedOperation("underlying stream is not seekable") - curr_pos = self.tell() - if whence == os.SEEK_SET: - new_pos = offset - elif whence == os.SEEK_CUR: - new_pos = curr_pos + offset - elif whence == os.SEEK_END: - new_pos = self._orig_file_size + offset - else: - raise ValueError("whence must be os.SEEK_SET (0), " - "os.SEEK_CUR (1), or os.SEEK_END (2)") - - if new_pos > self._orig_file_size: - new_pos = self._orig_file_size - - if new_pos < 0: - new_pos = 0 - - read_offset = new_pos - curr_pos - buff_offset = read_offset + self._offset - - if buff_offset >= 0 and buff_offset < len(self._readbuffer): - # Just move the _offset index if the new position is in the _readbuffer - self._offset = buff_offset - read_offset = 0 - # Fast seek uncompressed unencrypted file - elif self._compress_type == ZIP_STORED and self._decrypter is None and read_offset != 0: - # disable CRC checking after first seeking - it would be invalid - self._expected_crc = None - # seek actual file taking already buffered data into account - read_offset -= len(self._readbuffer) - self._offset - self._fileobj.seek(read_offset, os.SEEK_CUR) - self._left -= read_offset - self._compress_left -= read_offset - self._eof = self._left <= 0 - read_offset = 0 - # flush read buffer - self._readbuffer = b'' - self._offset = 0 - elif read_offset < 0: - # Position is before the current position. Reset the ZipExtFile - self._fileobj.seek(self._orig_compress_start) - self._running_crc = self._orig_start_crc - self._expected_crc = self._orig_crc - self._compress_left = self._orig_compress_size - self._left = self._orig_file_size - self._readbuffer = b'' - self._offset = 0 - self._decompressor = _get_decompressor(self._compress_type) - self._eof = False - read_offset = new_pos - if self._decrypter is not None: - self._init_decrypter() - - while read_offset > 0: - read_len = min(self.MAX_SEEK_READ, read_offset) - self.read(read_len) - read_offset -= read_len - - return self.tell() - - def tell(self): - if self.closed: - raise ValueError("tell on closed file.") - if not self._seekable: - raise io.UnsupportedOperation("underlying stream is not seekable") - filepos = self._orig_file_size - self._left - len(self._readbuffer) + self._offset - return filepos - - -class _ZipWriteFile(io.BufferedIOBase): - def __init__(self, zf, zinfo, zip64): - self._zinfo = zinfo - self._zip64 = zip64 - self._zipfile = zf - self._compressor = _get_compressor(zinfo.compress_type, - zinfo.compress_level) - self._file_size = 0 - self._compress_size = 0 - self._crc = 0 - - @property - def _fileobj(self): - return self._zipfile.fp - - @property - def name(self): - return self._zinfo.filename - - @property - def mode(self): - return 'wb' - - def writable(self): - return True - - def write(self, data): - if self.closed: - raise ValueError('I/O operation on closed file.') - - # Accept any data that supports the buffer protocol - if isinstance(data, (bytes, bytearray)): - nbytes = len(data) - else: - data = memoryview(data) - nbytes = data.nbytes - self._file_size += nbytes - - self._crc = crc32(data, self._crc) - if self._compressor: - data = self._compressor.compress(data) - self._compress_size += len(data) - self._fileobj.write(data) - return nbytes - - def close(self): - if self.closed: - return - try: - super().close() - # Flush any data from the compressor, and update header info - if self._compressor: - buf = self._compressor.flush() - self._compress_size += len(buf) - self._fileobj.write(buf) - self._zinfo.compress_size = self._compress_size - else: - self._zinfo.compress_size = self._file_size - self._zinfo.CRC = self._crc - self._zinfo.file_size = self._file_size - - if not self._zip64: - if self._file_size > ZIP64_LIMIT: - raise RuntimeError("File size too large, try using force_zip64") - if self._compress_size > ZIP64_LIMIT: - raise RuntimeError("Compressed size too large, try using force_zip64") - - # Write updated header info - if self._zinfo.flag_bits & _MASK_USE_DATA_DESCRIPTOR: - # Write CRC and file sizes after the file data - fmt = '<LLQQ' if self._zip64 else '<LLLL' - self._fileobj.write(struct.pack(fmt, _DD_SIGNATURE, self._zinfo.CRC, - self._zinfo.compress_size, self._zinfo.file_size)) - self._zipfile.start_dir = self._fileobj.tell() - else: - # Seek backwards and write file header (which will now include - # correct CRC and file sizes) - - # Preserve current position in file - self._zipfile.start_dir = self._fileobj.tell() - self._fileobj.seek(self._zinfo.header_offset) - self._fileobj.write(self._zinfo.FileHeader(self._zip64)) - self._fileobj.seek(self._zipfile.start_dir) - - # Successfully written: Add file to our caches - self._zipfile.filelist.append(self._zinfo) - self._zipfile.NameToInfo[self._zinfo.filename] = self._zinfo - finally: - self._zipfile._writing = False - - - -class ZipFile: - """ Class with methods to open, read, write, close, list zip files. - - z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=True, - compresslevel=None) - - file: Either the path to the file, or a file-like object. - If it is a path, the file will be opened and closed by ZipFile. - mode: The mode can be either read 'r', write 'w', exclusive create 'x', - or append 'a'. - compression: ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib), - ZIP_BZIP2 (requires bz2), ZIP_LZMA (requires lzma), or - ZIP_ZSTANDARD (requires compression.zstd). - allowZip64: if True ZipFile will create files with ZIP64 extensions when - needed, otherwise it will raise an exception when this would - be necessary. - compresslevel: None (default for the given compression type) or an integer - specifying the level to pass to the compressor. - When using ZIP_STORED or ZIP_LZMA this keyword has no effect. - When using ZIP_DEFLATED integers 0 through 9 are accepted. - When using ZIP_BZIP2 integers 1 through 9 are accepted. - When using ZIP_ZSTANDARD integers -7 though 22 are common, - see the CompressionParameter enum in compression.zstd for - details. - - """ - - fp = None # Set here since __del__ checks it - _windows_illegal_name_trans_table = None - - def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True, - compresslevel=None, *, strict_timestamps=True, metadata_encoding=None): - """Open the ZIP file with mode read 'r', write 'w', exclusive create 'x', - or append 'a'.""" - if mode not in ('r', 'w', 'x', 'a'): - raise ValueError("ZipFile requires mode 'r', 'w', 'x', or 'a'") - - _check_compression(compression) - - self._allowZip64 = allowZip64 - self._didModify = False - self.debug = 0 # Level of printing: 0 through 3 - self.NameToInfo = {} # Find file info given name - self.filelist = [] # List of ZipInfo instances for archive - self.compression = compression # Method of compression - self.compresslevel = compresslevel - self.mode = mode - self.pwd = None - self._comment = b'' - self._strict_timestamps = strict_timestamps - self.metadata_encoding = metadata_encoding - - # Check that we don't try to write with nonconforming codecs - if self.metadata_encoding and mode != 'r': - raise ValueError( - "metadata_encoding is only supported for reading files") - - # Check if we were passed a file-like object - if isinstance(file, os.PathLike): - file = os.fspath(file) - if isinstance(file, str): - # No, it's a filename - self._filePassed = 0 - self.filename = file - modeDict = {'r' : 'rb', 'w': 'w+b', 'x': 'x+b', 'a' : 'r+b', - 'r+b': 'w+b', 'w+b': 'wb', 'x+b': 'xb'} - filemode = modeDict[mode] - while True: - try: - self.fp = io.open(file, filemode) - except OSError: - if filemode in modeDict: - filemode = modeDict[filemode] - continue - raise - break - else: - self._filePassed = 1 - self.fp = file - self.filename = getattr(file, 'name', None) - self._fileRefCnt = 1 - self._lock = threading.RLock() - self._seekable = True - self._writing = False - - try: - if mode == 'r': - self._RealGetContents() - elif mode in ('w', 'x'): - # set the modified flag so central directory gets written - # even if no files are added to the archive - self._didModify = True - try: - self.start_dir = self.fp.tell() - except (AttributeError, OSError): - self.fp = _Tellable(self.fp) - self.start_dir = 0 - self._seekable = False - else: - # Some file-like objects can provide tell() but not seek() - try: - self.fp.seek(self.start_dir) - except (AttributeError, OSError): - self._seekable = False - elif mode == 'a': - try: - # See if file is a zip file - self._RealGetContents() - # seek to start of directory and overwrite - self.fp.seek(self.start_dir) - except BadZipFile: - # file is not a zip file, just append - self.fp.seek(0, 2) - - # set the modified flag so central directory gets written - # even if no files are added to the archive - self._didModify = True - self.start_dir = self.fp.tell() - else: - raise ValueError("Mode must be 'r', 'w', 'x', or 'a'") - except: - fp = self.fp - self.fp = None - self._fpclose(fp) - raise - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - self.close() - - def __repr__(self): - result = ['<%s.%s' % (self.__class__.__module__, - self.__class__.__qualname__)] - if self.fp is not None: - if self._filePassed: - result.append(' file=%r' % self.fp) - elif self.filename is not None: - result.append(' filename=%r' % self.filename) - result.append(' mode=%r' % self.mode) - else: - result.append(' [closed]') - result.append('>') - return ''.join(result) - - def _RealGetContents(self): - """Read in the table of contents for the ZIP file.""" - fp = self.fp - try: - endrec = _EndRecData(fp) - except OSError: - raise BadZipFile("File is not a zip file") - if not endrec: - raise BadZipFile("File is not a zip file") - if self.debug > 1: - print(endrec) - self._comment = endrec[_ECD_COMMENT] # archive comment - - offset_cd, concat = _handle_prepended_data(endrec, self.debug) - - # self.start_dir: Position of start of central directory - self.start_dir = offset_cd + concat - - if self.start_dir < 0: - raise BadZipFile("Bad offset for central directory") - fp.seek(self.start_dir, 0) - size_cd = endrec[_ECD_SIZE] - data = fp.read(size_cd) - fp = io.BytesIO(data) - total = 0 - while total < size_cd: - centdir = fp.read(sizeCentralDir) - if len(centdir) != sizeCentralDir: - raise BadZipFile("Truncated central directory") - centdir = struct.unpack(structCentralDir, centdir) - if centdir[_CD_SIGNATURE] != stringCentralDir: - raise BadZipFile("Bad magic number for central directory") - if self.debug > 2: - print(centdir) - filename = fp.read(centdir[_CD_FILENAME_LENGTH]) - orig_filename_crc = crc32(filename) - flags = centdir[_CD_FLAG_BITS] - if flags & _MASK_UTF_FILENAME: - # UTF-8 file names extension - filename = filename.decode('utf-8') - else: - # Historical ZIP filename encoding - filename = filename.decode(self.metadata_encoding or 'cp437') - # Create ZipInfo instance to store file information - x = ZipInfo(filename) - x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH]) - x.comment = fp.read(centdir[_CD_COMMENT_LENGTH]) - x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET] - (x.create_version, x.create_system, x.extract_version, x.reserved, - x.flag_bits, x.compress_type, t, d, - x.CRC, x.compress_size, x.file_size) = centdir[1:12] - if x.extract_version > MAX_EXTRACT_VERSION: - raise NotImplementedError("zip file version %.1f" % - (x.extract_version / 10)) - x.volume, x.internal_attr, x.external_attr = centdir[15:18] - # Convert date/time code to (year, month, day, hour, min, sec) - x._raw_time = t - x.date_time = ( (d>>9)+1980, (d>>5)&0xF, d&0x1F, - t>>11, (t>>5)&0x3F, (t&0x1F) * 2 ) - x._decodeExtra(orig_filename_crc) - x.header_offset = x.header_offset + concat - self.filelist.append(x) - self.NameToInfo[x.filename] = x - - # update total bytes read from central directory - total = (total + sizeCentralDir + centdir[_CD_FILENAME_LENGTH] - + centdir[_CD_EXTRA_FIELD_LENGTH] - + centdir[_CD_COMMENT_LENGTH]) - - if self.debug > 2: - print("total", total) - - end_offset = self.start_dir - for zinfo in reversed(sorted(self.filelist, - key=lambda zinfo: zinfo.header_offset)): - zinfo._end_offset = end_offset - end_offset = zinfo.header_offset - - def namelist(self): - """Return a list of file names in the archive.""" - return [data.filename for data in self.filelist] - - def infolist(self): - """Return a list of class ZipInfo instances for files in the - archive.""" - return self.filelist - - def printdir(self, file=None): - """Print a table of contents for the zip file.""" - print("%-46s %19s %12s" % ("File Name", "Modified ", "Size"), - file=file) - for zinfo in self.filelist: - date = "%d-%02d-%02d %02d:%02d:%02d" % zinfo.date_time[:6] - print("%-46s %s %12d" % (zinfo.filename, date, zinfo.file_size), - file=file) - - def testzip(self): - """Read all the files and check the CRC. - - Return None if all files could be read successfully, or the name - of the offending file otherwise.""" - chunk_size = 2 ** 20 - for zinfo in self.filelist: - try: - # Read by chunks, to avoid an OverflowError or a - # MemoryError with very large embedded files. - with self.open(zinfo.filename, "r") as f: - while f.read(chunk_size): # Check CRC-32 - pass - except BadZipFile: - return zinfo.filename - - def getinfo(self, name): - """Return the instance of ZipInfo given 'name'.""" - info = self.NameToInfo.get(name) - if info is None: - raise KeyError( - 'There is no item named %r in the archive' % name) - - return info - - def setpassword(self, pwd): - """Set default password for encrypted files.""" - if pwd and not isinstance(pwd, bytes): - raise TypeError("pwd: expected bytes, got %s" % type(pwd).__name__) - if pwd: - self.pwd = pwd - else: - self.pwd = None - - @property - def comment(self): - """The comment text associated with the ZIP file.""" - return self._comment - - @comment.setter - def comment(self, comment): - if not isinstance(comment, bytes): - raise TypeError("comment: expected bytes, got %s" % type(comment).__name__) - # check for valid comment length - if len(comment) > ZIP_MAX_COMMENT: - import warnings - warnings.warn('Archive comment is too long; truncating to %d bytes' - % ZIP_MAX_COMMENT, stacklevel=2) - comment = comment[:ZIP_MAX_COMMENT] - self._comment = comment - self._didModify = True - - def read(self, name, pwd=None): - """Return file bytes for name. 'pwd' is the password to decrypt - encrypted files.""" - with self.open(name, "r", pwd) as fp: - return fp.read() - - def open(self, name, mode="r", pwd=None, *, force_zip64=False): - """Return file-like object for 'name'. - - name is a string for the file name within the ZIP file, or a ZipInfo - object. - - mode should be 'r' to read a file already in the ZIP file, or 'w' to - write to a file newly added to the archive. - - pwd is the password to decrypt files (only used for reading). - - When writing, if the file size is not known in advance but may exceed - 2 GiB, pass force_zip64 to use the ZIP64 format, which can handle large - files. If the size is known in advance, it is best to pass a ZipInfo - instance for name, with zinfo.file_size set. - """ - if mode not in {"r", "w"}: - raise ValueError('open() requires mode "r" or "w"') - if pwd and (mode == "w"): - raise ValueError("pwd is only supported for reading files") - if not self.fp: - raise ValueError( - "Attempt to use ZIP archive that was already closed") - - # Make sure we have an info object - if isinstance(name, ZipInfo): - # 'name' is already an info object - zinfo = name - elif mode == 'w': - zinfo = ZipInfo(name) - zinfo.compress_type = self.compression - zinfo.compress_level = self.compresslevel - else: - # Get info object for name - zinfo = self.getinfo(name) - - if mode == 'w': - return self._open_to_write(zinfo, force_zip64=force_zip64) - - if self._writing: - raise ValueError("Can't read from the ZIP file while there " - "is an open writing handle on it. " - "Close the writing handle before trying to read.") - - # Open for reading: - self._fileRefCnt += 1 - zef_file = _SharedFile(self.fp, zinfo.header_offset, - self._fpclose, self._lock, lambda: self._writing) - try: - # Skip the file header: - fheader = zef_file.read(sizeFileHeader) - if len(fheader) != sizeFileHeader: - raise BadZipFile("Truncated file header") - fheader = struct.unpack(structFileHeader, fheader) - if fheader[_FH_SIGNATURE] != stringFileHeader: - raise BadZipFile("Bad magic number for file header") - - fname = zef_file.read(fheader[_FH_FILENAME_LENGTH]) - if fheader[_FH_EXTRA_FIELD_LENGTH]: - zef_file.seek(fheader[_FH_EXTRA_FIELD_LENGTH], whence=1) - - if zinfo.flag_bits & _MASK_COMPRESSED_PATCH: - # Zip 2.7: compressed patched data - raise NotImplementedError("compressed patched data (flag bit 5)") - - if zinfo.flag_bits & _MASK_STRONG_ENCRYPTION: - # strong encryption - raise NotImplementedError("strong encryption (flag bit 6)") - - if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & _MASK_UTF_FILENAME: - # UTF-8 filename - fname_str = fname.decode("utf-8") - else: - fname_str = fname.decode(self.metadata_encoding or "cp437") - - if fname_str != zinfo.orig_filename: - raise BadZipFile( - 'File name in directory %r and header %r differ.' - % (zinfo.orig_filename, fname)) - - if (zinfo._end_offset is not None and - zef_file.tell() + zinfo.compress_size > zinfo._end_offset): - if zinfo._end_offset == zinfo.header_offset: - import warnings - warnings.warn( - f"Overlapped entries: {zinfo.orig_filename!r} " - f"(possible zip bomb)", - skip_file_prefixes=(os.path.dirname(__file__),)) - else: - raise BadZipFile( - f"Overlapped entries: {zinfo.orig_filename!r} " - f"(possible zip bomb)") - - # check for encrypted flag & handle password - is_encrypted = zinfo.flag_bits & _MASK_ENCRYPTED - if is_encrypted: - if not pwd: - pwd = self.pwd - if pwd and not isinstance(pwd, bytes): - raise TypeError("pwd: expected bytes, got %s" % type(pwd).__name__) - if not pwd: - raise RuntimeError("File %r is encrypted, password " - "required for extraction" % name) - else: - pwd = None - - return ZipExtFile(zef_file, mode + 'b', zinfo, pwd, True) - except: - zef_file.close() - raise - - def _open_to_write(self, zinfo, force_zip64=False): - if force_zip64 and not self._allowZip64: - raise ValueError( - "force_zip64 is True, but allowZip64 was False when opening " - "the ZIP file." - ) - if self._writing: - raise ValueError("Can't write to the ZIP file while there is " - "another write handle open on it. " - "Close the first handle before opening another.") - - # Size and CRC are overwritten with correct data after processing the file - zinfo.compress_size = 0 - zinfo.CRC = 0 - - zinfo.flag_bits = 0x00 - if zinfo.compress_type == ZIP_LZMA: - # Compressed data includes an end-of-stream (EOS) marker - zinfo.flag_bits |= _MASK_COMPRESS_OPTION_1 - if not self._seekable: - zinfo.flag_bits |= _MASK_USE_DATA_DESCRIPTOR - - if not zinfo.external_attr: - zinfo.external_attr = 0o600 << 16 # permissions: ?rw------- - - # Compressed size can be larger than uncompressed size - zip64 = force_zip64 or (zinfo.file_size * 1.05 > ZIP64_LIMIT) - if not self._allowZip64 and zip64: - raise LargeZipFile("Filesize would require ZIP64 extensions") - - if self._seekable: - self.fp.seek(self.start_dir) - zinfo.header_offset = self.fp.tell() - - self._writecheck(zinfo) - self._didModify = True - - self.fp.write(zinfo.FileHeader(zip64)) - - self._writing = True - return _ZipWriteFile(self, zinfo, zip64) - - def extract(self, member, path=None, pwd=None): - """Extract a member from the archive to the current working directory, - using its full name. Its file information is extracted as accurately - as possible. 'member' may be a filename or a ZipInfo object. You can - specify a different directory using 'path'. You can specify the - password to decrypt the file using 'pwd'. - """ - if path is None: - path = os.getcwd() - else: - path = os.fspath(path) - - return self._extract_member(member, path, pwd) - - def extractall(self, path=None, members=None, pwd=None): - """Extract all members from the archive to the current working - directory. 'path' specifies a different directory to extract to. - 'members' is optional and must be a subset of the list returned - by namelist(). You can specify the password to decrypt all files - using 'pwd'. - """ - if members is None: - members = self.namelist() - - if path is None: - path = os.getcwd() - else: - path = os.fspath(path) - - for zipinfo in members: - self._extract_member(zipinfo, path, pwd) - - @classmethod - def _sanitize_windows_name(cls, arcname, pathsep): - """Replace bad characters and remove trailing dots from parts.""" - table = cls._windows_illegal_name_trans_table - if not table: - illegal = ':<>|"?*' - table = str.maketrans(illegal, '_' * len(illegal)) - cls._windows_illegal_name_trans_table = table - arcname = arcname.translate(table) - # remove trailing dots and spaces - arcname = (x.rstrip(' .') for x in arcname.split(pathsep)) - # rejoin, removing empty parts. - arcname = pathsep.join(x for x in arcname if x) - return arcname - - def _extract_member(self, member, targetpath, pwd): - """Extract the ZipInfo object 'member' to a physical - file on the path targetpath. - """ - if not isinstance(member, ZipInfo): - member = self.getinfo(member) - - # build the destination pathname, replacing - # forward slashes to platform specific separators. - arcname = member.filename.replace('/', os.path.sep) - - if os.path.altsep: - arcname = arcname.replace(os.path.altsep, os.path.sep) - # interpret absolute pathname as relative, remove drive letter or - # UNC path, redundant separators, "." and ".." components. - arcname = os.path.splitdrive(arcname)[1] - invalid_path_parts = ('', os.path.curdir, os.path.pardir) - arcname = os.path.sep.join(x for x in arcname.split(os.path.sep) - if x not in invalid_path_parts) - if os.path.sep == '\\': - # filter illegal characters on Windows - arcname = self._sanitize_windows_name(arcname, os.path.sep) - - if not arcname and not member.is_dir(): - raise ValueError("Empty filename.") - - targetpath = os.path.join(targetpath, arcname) - targetpath = os.path.normpath(targetpath) - - # Create all upper directories if necessary. - upperdirs = os.path.dirname(targetpath) - if upperdirs and not os.path.exists(upperdirs): - os.makedirs(upperdirs, exist_ok=True) - - if member.is_dir(): - if not os.path.isdir(targetpath): - try: - os.mkdir(targetpath) - except FileExistsError: - if not os.path.isdir(targetpath): - raise - return targetpath - - with self.open(member, pwd=pwd) as source, \ - open(targetpath, "wb") as target: - shutil.copyfileobj(source, target) - - return targetpath - - def _writecheck(self, zinfo): - """Check for errors before writing a file to the archive.""" - if zinfo.filename in self.NameToInfo: - import warnings - warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3) - if self.mode not in ('w', 'x', 'a'): - raise ValueError("write() requires mode 'w', 'x', or 'a'") - if not self.fp: - raise ValueError( - "Attempt to write ZIP archive that was already closed") - _check_compression(zinfo.compress_type) - if not self._allowZip64: - requires_zip64 = None - if len(self.filelist) >= ZIP_FILECOUNT_LIMIT: - requires_zip64 = "Files count" - elif zinfo.file_size > ZIP64_LIMIT: - requires_zip64 = "Filesize" - elif zinfo.header_offset > ZIP64_LIMIT: - requires_zip64 = "Zipfile size" - if requires_zip64: - raise LargeZipFile(requires_zip64 + - " would require ZIP64 extensions") - - def write(self, filename, arcname=None, - compress_type=None, compresslevel=None): - """Put the bytes from filename into the archive under the name - arcname.""" - if not self.fp: - raise ValueError( - "Attempt to write to ZIP archive that was already closed") - if self._writing: - raise ValueError( - "Can't write to ZIP archive while an open writing handle exists" - ) - - zinfo = ZipInfo.from_file(filename, arcname, - strict_timestamps=self._strict_timestamps) - - if zinfo.is_dir(): - zinfo.compress_size = 0 - zinfo.CRC = 0 - self.mkdir(zinfo) - else: - if compress_type is not None: - zinfo.compress_type = compress_type - else: - zinfo.compress_type = self.compression - - if compresslevel is not None: - zinfo.compress_level = compresslevel - else: - zinfo.compress_level = self.compresslevel - - with open(filename, "rb") as src, self.open(zinfo, 'w') as dest: - shutil.copyfileobj(src, dest, 1024*8) - - def writestr(self, zinfo_or_arcname, data, - compress_type=None, compresslevel=None): - """Write a file into the archive. The contents is 'data', which - may be either a 'str' or a 'bytes' instance; if it is a 'str', - it is encoded as UTF-8 first. - 'zinfo_or_arcname' is either a ZipInfo instance or - the name of the file in the archive.""" - if isinstance(data, str): - data = data.encode("utf-8") - if isinstance(zinfo_or_arcname, ZipInfo): - zinfo = zinfo_or_arcname - else: - zinfo = ZipInfo(zinfo_or_arcname)._for_archive(self) - - if not self.fp: - raise ValueError( - "Attempt to write to ZIP archive that was already closed") - if self._writing: - raise ValueError( - "Can't write to ZIP archive while an open writing handle exists." - ) - - if compress_type is not None: - zinfo.compress_type = compress_type - - if compresslevel is not None: - zinfo.compress_level = compresslevel - - zinfo.file_size = len(data) # Uncompressed size - with self._lock: - with self.open(zinfo, mode='w') as dest: - dest.write(data) - - def mkdir(self, zinfo_or_directory_name, mode=511): - """Creates a directory inside the zip archive.""" - if isinstance(zinfo_or_directory_name, ZipInfo): - zinfo = zinfo_or_directory_name - if not zinfo.is_dir(): - raise ValueError("The given ZipInfo does not describe a directory") - elif isinstance(zinfo_or_directory_name, str): - directory_name = zinfo_or_directory_name - if not directory_name.endswith("/"): - directory_name += "/" - zinfo = ZipInfo(directory_name) - zinfo.compress_size = 0 - zinfo.CRC = 0 - zinfo.external_attr = ((0o40000 | mode) & 0xFFFF) << 16 - zinfo.file_size = 0 - zinfo.external_attr |= 0x10 - else: - raise TypeError("Expected type str or ZipInfo") - - with self._lock: - if self._seekable: - self.fp.seek(self.start_dir) - zinfo.header_offset = self.fp.tell() # Start of header bytes - if zinfo.compress_type == ZIP_LZMA: - # Compressed data includes an end-of-stream (EOS) marker - zinfo.flag_bits |= _MASK_COMPRESS_OPTION_1 - - self._writecheck(zinfo) - self._didModify = True - - self.filelist.append(zinfo) - self.NameToInfo[zinfo.filename] = zinfo - self.fp.write(zinfo.FileHeader(False)) - self.start_dir = self.fp.tell() - - def __del__(self): - """Call the "close()" method in case the user forgot.""" - self.close() - - def close(self): - """Close the file, and for mode 'w', 'x' and 'a' write the ending - records.""" - if self.fp is None: - return - - if self._writing: - raise ValueError("Can't close the ZIP file while there is " - "an open writing handle on it. " - "Close the writing handle before closing the zip.") - - try: - if self.mode in ('w', 'x', 'a') and self._didModify: # write ending records - with self._lock: - if self._seekable: - self.fp.seek(self.start_dir) - self._write_end_record() - finally: - fp = self.fp - self.fp = None - self._fpclose(fp) - - def _write_end_record(self): - for zinfo in self.filelist: # write central directory - dt = zinfo.date_time - dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] - dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) - extra = [] - if zinfo.file_size > ZIP64_LIMIT \ - or zinfo.compress_size > ZIP64_LIMIT: - extra.append(zinfo.file_size) - extra.append(zinfo.compress_size) - file_size = 0xffffffff - compress_size = 0xffffffff - else: - file_size = zinfo.file_size - compress_size = zinfo.compress_size - - if zinfo.header_offset > ZIP64_LIMIT: - extra.append(zinfo.header_offset) - header_offset = 0xffffffff - else: - header_offset = zinfo.header_offset - - extra_data = zinfo.extra - min_version = 0 - if extra: - # Append a ZIP64 field to the extra's - extra_data = _Extra.strip(extra_data, (1,)) - extra_data = struct.pack( - '<HH' + 'Q'*len(extra), - 1, 8*len(extra), *extra) + extra_data - - min_version = ZIP64_VERSION - - if zinfo.compress_type == ZIP_BZIP2: - min_version = max(BZIP2_VERSION, min_version) - elif zinfo.compress_type == ZIP_LZMA: - min_version = max(LZMA_VERSION, min_version) - elif zinfo.compress_type == ZIP_ZSTANDARD: - min_version = max(ZSTANDARD_VERSION, min_version) - - extract_version = max(min_version, zinfo.extract_version) - create_version = max(min_version, zinfo.create_version) - filename, flag_bits = zinfo._encodeFilenameFlags() - centdir = struct.pack(structCentralDir, - stringCentralDir, create_version, - zinfo.create_system, extract_version, zinfo.reserved, - flag_bits, zinfo.compress_type, dostime, dosdate, - zinfo.CRC, compress_size, file_size, - len(filename), len(extra_data), len(zinfo.comment), - 0, zinfo.internal_attr, zinfo.external_attr, - header_offset) - self.fp.write(centdir) - self.fp.write(filename) - self.fp.write(extra_data) - self.fp.write(zinfo.comment) - - pos2 = self.fp.tell() - # Write end-of-zip-archive record - centDirCount = len(self.filelist) - centDirSize = pos2 - self.start_dir - centDirOffset = self.start_dir - requires_zip64 = None - if centDirCount > ZIP_FILECOUNT_LIMIT: - requires_zip64 = "Files count" - elif centDirOffset > ZIP64_LIMIT: - requires_zip64 = "Central directory offset" - elif centDirSize > ZIP64_LIMIT: - requires_zip64 = "Central directory size" - if requires_zip64: - # Need to write the ZIP64 end-of-archive records - if not self._allowZip64: - raise LargeZipFile(requires_zip64 + - " would require ZIP64 extensions") - zip64endrec = struct.pack( - structEndArchive64, stringEndArchive64, - sizeEndCentDir64 - 12, 45, 45, 0, 0, centDirCount, centDirCount, - centDirSize, centDirOffset) - self.fp.write(zip64endrec) - - zip64locrec = struct.pack( - structEndArchive64Locator, - stringEndArchive64Locator, 0, pos2, 1) - self.fp.write(zip64locrec) - centDirCount = min(centDirCount, 0xFFFF) - centDirSize = min(centDirSize, 0xFFFFFFFF) - centDirOffset = min(centDirOffset, 0xFFFFFFFF) - - endrec = struct.pack(structEndArchive, stringEndArchive, - 0, 0, centDirCount, centDirCount, - centDirSize, centDirOffset, len(self._comment)) - self.fp.write(endrec) - self.fp.write(self._comment) - if self.mode == "a": - self.fp.truncate() - self.fp.flush() - - def _fpclose(self, fp): - assert self._fileRefCnt > 0 - self._fileRefCnt -= 1 - if not self._fileRefCnt and not self._filePassed: - fp.close() - - -class PyZipFile(ZipFile): - """Class to create ZIP archives with Python library files and packages.""" - - def __init__(self, file, mode="r", compression=ZIP_STORED, - allowZip64=True, optimize=-1): - ZipFile.__init__(self, file, mode=mode, compression=compression, - allowZip64=allowZip64) - self._optimize = optimize - - def writepy(self, pathname, basename="", filterfunc=None): - """Add all files from "pathname" to the ZIP archive. - - If pathname is a package directory, search the directory and - all package subdirectories recursively for all *.py and enter - the modules into the archive. If pathname is a plain - directory, listdir *.py and enter all modules. Else, pathname - must be a Python *.py file and the module will be put into the - archive. Added modules are always module.pyc. - This method will compile the module.py into module.pyc if - necessary. - If filterfunc(pathname) is given, it is called with every argument. - When it is False, the file or directory is skipped. - """ - pathname = os.fspath(pathname) - if filterfunc and not filterfunc(pathname): - if self.debug: - label = 'path' if os.path.isdir(pathname) else 'file' - print('%s %r skipped by filterfunc' % (label, pathname)) - return - dir, name = os.path.split(pathname) - if os.path.isdir(pathname): - initname = os.path.join(pathname, "__init__.py") - if os.path.isfile(initname): - # This is a package directory, add it - if basename: - basename = "%s/%s" % (basename, name) - else: - basename = name - if self.debug: - print("Adding package in", pathname, "as", basename) - fname, arcname = self._get_codename(initname[0:-3], basename) - if self.debug: - print("Adding", arcname) - self.write(fname, arcname) - dirlist = sorted(os.listdir(pathname)) - dirlist.remove("__init__.py") - # Add all *.py files and package subdirectories - for filename in dirlist: - path = os.path.join(pathname, filename) - root, ext = os.path.splitext(filename) - if os.path.isdir(path): - if os.path.isfile(os.path.join(path, "__init__.py")): - # This is a package directory, add it - self.writepy(path, basename, - filterfunc=filterfunc) # Recursive call - elif ext == ".py": - if filterfunc and not filterfunc(path): - if self.debug: - print('file %r skipped by filterfunc' % path) - continue - fname, arcname = self._get_codename(path[0:-3], - basename) - if self.debug: - print("Adding", arcname) - self.write(fname, arcname) - else: - # This is NOT a package directory, add its files at top level - if self.debug: - print("Adding files from directory", pathname) - for filename in sorted(os.listdir(pathname)): - path = os.path.join(pathname, filename) - root, ext = os.path.splitext(filename) - if ext == ".py": - if filterfunc and not filterfunc(path): - if self.debug: - print('file %r skipped by filterfunc' % path) - continue - fname, arcname = self._get_codename(path[0:-3], - basename) - if self.debug: - print("Adding", arcname) - self.write(fname, arcname) - else: - if pathname[-3:] != ".py": - raise RuntimeError( - 'Files added with writepy() must end with ".py"') - fname, arcname = self._get_codename(pathname[0:-3], basename) - if self.debug: - print("Adding file", arcname) - self.write(fname, arcname) - - def _get_codename(self, pathname, basename): - """Return (filename, archivename) for the path. - - Given a module name path, return the correct file path and - archive name, compiling if necessary. For example, given - /python/lib/string, return (/python/lib/string.pyc, string). - """ - def _compile(file, optimize=-1): - import py_compile - if self.debug: - print("Compiling", file) - try: - py_compile.compile(file, doraise=True, optimize=optimize) - except py_compile.PyCompileError as err: - print(err.msg) - return False - return True - - file_py = pathname + ".py" - file_pyc = pathname + ".pyc" - pycache_opt0 = importlib.util.cache_from_source(file_py, optimization='') - pycache_opt1 = importlib.util.cache_from_source(file_py, optimization=1) - pycache_opt2 = importlib.util.cache_from_source(file_py, optimization=2) - if self._optimize == -1: - # legacy mode: use whatever file is present - if (os.path.isfile(file_pyc) and - os.stat(file_pyc).st_mtime >= os.stat(file_py).st_mtime): - # Use .pyc file. - arcname = fname = file_pyc - elif (os.path.isfile(pycache_opt0) and - os.stat(pycache_opt0).st_mtime >= os.stat(file_py).st_mtime): - # Use the __pycache__/*.pyc file, but write it to the legacy pyc - # file name in the archive. - fname = pycache_opt0 - arcname = file_pyc - elif (os.path.isfile(pycache_opt1) and - os.stat(pycache_opt1).st_mtime >= os.stat(file_py).st_mtime): - # Use the __pycache__/*.pyc file, but write it to the legacy pyc - # file name in the archive. - fname = pycache_opt1 - arcname = file_pyc - elif (os.path.isfile(pycache_opt2) and - os.stat(pycache_opt2).st_mtime >= os.stat(file_py).st_mtime): - # Use the __pycache__/*.pyc file, but write it to the legacy pyc - # file name in the archive. - fname = pycache_opt2 - arcname = file_pyc - else: - # Compile py into PEP 3147 pyc file. - if _compile(file_py): - if sys.flags.optimize == 0: - fname = pycache_opt0 - elif sys.flags.optimize == 1: - fname = pycache_opt1 - else: - fname = pycache_opt2 - arcname = file_pyc - else: - fname = arcname = file_py - else: - # new mode: use given optimization level - if self._optimize == 0: - fname = pycache_opt0 - arcname = file_pyc - else: - arcname = file_pyc - if self._optimize == 1: - fname = pycache_opt1 - elif self._optimize == 2: - fname = pycache_opt2 - else: - msg = "invalid value for 'optimize': {!r}".format(self._optimize) - raise ValueError(msg) - if not (os.path.isfile(fname) and - os.stat(fname).st_mtime >= os.stat(file_py).st_mtime): - if not _compile(file_py, optimize=self._optimize): - fname = arcname = file_py - archivename = os.path.split(arcname)[1] - if basename: - archivename = "%s/%s" % (basename, archivename) - return (fname, archivename) - - -def main(args=None): - import argparse - - description = 'A simple command-line interface for zipfile module.' - parser = argparse.ArgumentParser(description=description, color=True) - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument('-l', '--list', metavar='<zipfile>', - help='Show listing of a zipfile') - group.add_argument('-e', '--extract', nargs=2, - metavar=('<zipfile>', '<output_dir>'), - help='Extract zipfile into target dir') - group.add_argument('-c', '--create', nargs='+', - metavar=('<name>', '<file>'), - help='Create zipfile from sources') - group.add_argument('-t', '--test', metavar='<zipfile>', - help='Test if a zipfile is valid') - parser.add_argument('--metadata-encoding', metavar='<encoding>', - help='Specify encoding of member names for -l, -e and -t') - args = parser.parse_args(args) - - encoding = args.metadata_encoding - - if args.test is not None: - src = args.test - with ZipFile(src, 'r', metadata_encoding=encoding) as zf: - badfile = zf.testzip() - if badfile: - print("The following enclosed file is corrupted: {!r}".format(badfile)) - print("Done testing") - - elif args.list is not None: - src = args.list - with ZipFile(src, 'r', metadata_encoding=encoding) as zf: - zf.printdir() - - elif args.extract is not None: - src, curdir = args.extract - with ZipFile(src, 'r', metadata_encoding=encoding) as zf: - zf.extractall(curdir) - - elif args.create is not None: - if encoding: - print("Non-conforming encodings not supported with -c.", - file=sys.stderr) - sys.exit(1) - - zip_name = args.create.pop(0) - files = args.create - - def addToZip(zf, path, zippath): - if os.path.isfile(path): - zf.write(path, zippath, ZIP_DEFLATED) - elif os.path.isdir(path): - if zippath: - zf.write(path, zippath) - for nm in sorted(os.listdir(path)): - addToZip(zf, - os.path.join(path, nm), os.path.join(zippath, nm)) - # else: ignore - - with ZipFile(zip_name, 'w') as zf: - for path in files: - zippath = os.path.basename(path) - if not zippath: - zippath = os.path.basename(os.path.dirname(path)) - if zippath in ('', os.curdir, os.pardir): - zippath = '' - addToZip(zf, path, zippath) - - -from ._path import ( # noqa: E402 - Path, - - # used privately for tests - CompleteDirs, # noqa: F401 -) diff --git a/Python314_4_x86_Template/Lib/zipfile/__main__.py b/Python314_4_x86_Template/Lib/zipfile/__main__.py deleted file mode 100644 index 868d99efc..000000000 --- a/Python314_4_x86_Template/Lib/zipfile/__main__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import main - -if __name__ == "__main__": - main() diff --git a/Python314_4_x86_Template/Lib/zipfile/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/zipfile/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index cb01849b811c0dc232ebcb89a9136cb48231a34a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110775 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 LRaJDok_Y|=&~2Ms diff --git a/Python314_4_x86_Template/Lib/zipfile/_path/__init__.py b/Python314_4_x86_Template/Lib/zipfile/_path/__init__.py deleted file mode 100644 index 80f5d6077..000000000 --- a/Python314_4_x86_Template/Lib/zipfile/_path/__init__.py +++ /dev/null @@ -1,452 +0,0 @@ -""" -A Path-like interface for zipfiles. - -This codebase is shared between zipfile.Path in the stdlib -and zipp in PyPI. See -https://github.com/python/importlib_metadata/wiki/Development-Methodology -for more detail. -""" - -import contextlib -import io -import itertools -import pathlib -import posixpath -import re -import stat -import sys -import zipfile - -from .glob import Translator - -__all__ = ['Path'] - - -def _parents(path): - """ - Given a path with elements separated by - posixpath.sep, generate all parents of that path. - - >>> list(_parents('b/d')) - ['b'] - >>> list(_parents('/b/d/')) - ['/b'] - >>> list(_parents('b/d/f/')) - ['b/d', 'b'] - >>> list(_parents('b')) - [] - >>> list(_parents('')) - [] - """ - return itertools.islice(_ancestry(path), 1, None) - - -def _ancestry(path): - """ - Given a path with elements separated by - posixpath.sep, generate all elements of that path. - - >>> list(_ancestry('b/d')) - ['b/d', 'b'] - >>> list(_ancestry('/b/d/')) - ['/b/d', '/b'] - >>> list(_ancestry('b/d/f/')) - ['b/d/f', 'b/d', 'b'] - >>> list(_ancestry('b')) - ['b'] - >>> list(_ancestry('')) - [] - - Multiple separators are treated like a single. - - >>> list(_ancestry('//b//d///f//')) - ['//b//d///f', '//b//d', '//b'] - """ - path = path.rstrip(posixpath.sep) - while path.rstrip(posixpath.sep): - yield path - path, tail = posixpath.split(path) - - -_dedupe = dict.fromkeys -"""Deduplicate an iterable in original order""" - - -def _difference(minuend, subtrahend): - """ - Return items in minuend not in subtrahend, retaining order - with O(1) lookup. - """ - return itertools.filterfalse(set(subtrahend).__contains__, minuend) - - -class InitializedState: - """ - Mix-in to save the initialization state for pickling. - """ - - def __init__(self, *args, **kwargs): - self.__args = args - self.__kwargs = kwargs - super().__init__(*args, **kwargs) - - def __getstate__(self): - return self.__args, self.__kwargs - - def __setstate__(self, state): - args, kwargs = state - super().__init__(*args, **kwargs) - - -class CompleteDirs(InitializedState, zipfile.ZipFile): - """ - A ZipFile subclass that ensures that implied directories - are always included in the namelist. - - >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt'])) - ['foo/', 'foo/bar/'] - >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt', 'foo/bar/'])) - ['foo/'] - """ - - @staticmethod - def _implied_dirs(names): - parents = itertools.chain.from_iterable(map(_parents, names)) - as_dirs = (p + posixpath.sep for p in parents) - return _dedupe(_difference(as_dirs, names)) - - def namelist(self): - names = super().namelist() - return names + list(self._implied_dirs(names)) - - def _name_set(self): - return set(self.namelist()) - - def resolve_dir(self, name): - """ - If the name represents a directory, return that name - as a directory (with the trailing slash). - """ - names = self._name_set() - dirname = name + '/' - dir_match = name not in names and dirname in names - return dirname if dir_match else name - - def getinfo(self, name): - """ - Supplement getinfo for implied dirs. - """ - try: - return super().getinfo(name) - except KeyError: - if not name.endswith('/') or name not in self._name_set(): - raise - return zipfile.ZipInfo(filename=name) - - @classmethod - def make(cls, source): - """ - Given a source (filename or zipfile), return an - appropriate CompleteDirs subclass. - """ - if isinstance(source, CompleteDirs): - return source - - if not isinstance(source, zipfile.ZipFile): - return cls(source) - - # Only allow for FastLookup when supplied zipfile is read-only - if 'r' not in source.mode: - cls = CompleteDirs - - source.__class__ = cls - return source - - @classmethod - def inject(cls, zf: zipfile.ZipFile) -> zipfile.ZipFile: - """ - Given a writable zip file zf, inject directory entries for - any directories implied by the presence of children. - """ - for name in cls._implied_dirs(zf.namelist()): - zf.writestr(name, b"") - return zf - - -class FastLookup(CompleteDirs): - """ - ZipFile subclass to ensure implicit - dirs exist and are resolved rapidly. - """ - - def namelist(self): - with contextlib.suppress(AttributeError): - return self.__names - self.__names = super().namelist() - return self.__names - - def _name_set(self): - with contextlib.suppress(AttributeError): - return self.__lookup - self.__lookup = super()._name_set() - return self.__lookup - -def _extract_text_encoding(encoding=None, *args, **kwargs): - # compute stack level so that the caller of the caller sees any warning. - is_pypy = sys.implementation.name == 'pypy' - # PyPy no longer special cased after 7.3.19 (or maybe 7.3.18) - # See jaraco/zipp#143 - is_old_pypi = is_pypy and sys.pypy_version_info < (7, 3, 19) - stack_level = 3 + is_old_pypi - return io.text_encoding(encoding, stack_level), args, kwargs - - -class Path: - """ - A :class:`importlib.resources.abc.Traversable` interface for zip files. - - Implements many of the features users enjoy from - :class:`pathlib.Path`. - - Consider a zip file with this structure:: - - . - ├── a.txt - └── b - ├── c.txt - └── d - └── e.txt - - >>> data = io.BytesIO() - >>> zf = ZipFile(data, 'w') - >>> zf.writestr('a.txt', 'content of a') - >>> zf.writestr('b/c.txt', 'content of c') - >>> zf.writestr('b/d/e.txt', 'content of e') - >>> zf.filename = 'mem/abcde.zip' - - Path accepts the zipfile object itself or a filename - - >>> path = Path(zf) - - From there, several path operations are available. - - Directory iteration (including the zip file itself): - - >>> a, b = path.iterdir() - >>> a - Path('mem/abcde.zip', 'a.txt') - >>> b - Path('mem/abcde.zip', 'b/') - - name property: - - >>> b.name - 'b' - - join with divide operator: - - >>> c = b / 'c.txt' - >>> c - Path('mem/abcde.zip', 'b/c.txt') - >>> c.name - 'c.txt' - - Read text: - - >>> c.read_text(encoding='utf-8') - 'content of c' - - existence: - - >>> c.exists() - True - >>> (b / 'missing.txt').exists() - False - - Coercion to string: - - >>> import os - >>> str(c).replace(os.sep, posixpath.sep) - 'mem/abcde.zip/b/c.txt' - - At the root, ``name``, ``filename``, and ``parent`` - resolve to the zipfile. - - >>> str(path) - 'mem/abcde.zip/' - >>> path.name - 'abcde.zip' - >>> path.filename == pathlib.Path('mem/abcde.zip') - True - >>> str(path.parent) - 'mem' - - If the zipfile has no filename, such attributes are not - valid and accessing them will raise an Exception. - - >>> zf.filename = None - >>> path.name - Traceback (most recent call last): - ... - TypeError: ... - - >>> path.filename - Traceback (most recent call last): - ... - TypeError: ... - - >>> path.parent - Traceback (most recent call last): - ... - TypeError: ... - - # workaround python/cpython#106763 - >>> pass - """ - - __repr = "{self.__class__.__name__}({self.root.filename!r}, {self.at!r})" - - def __init__(self, root, at=""): - """ - Construct a Path from a ZipFile or filename. - - Note: When the source is an existing ZipFile object, - its type (__class__) will be mutated to a - specialized type. If the caller wishes to retain the - original type, the caller should either create a - separate ZipFile object or pass a filename. - """ - self.root = FastLookup.make(root) - self.at = at - - def __eq__(self, other): - """ - >>> Path(zipfile.ZipFile(io.BytesIO(), 'w')) == 'foo' - False - """ - if self.__class__ is not other.__class__: - return NotImplemented - return (self.root, self.at) == (other.root, other.at) - - def __hash__(self): - return hash((self.root, self.at)) - - def open(self, mode='r', *args, pwd=None, **kwargs): - """ - Open this entry as text or binary following the semantics - of ``pathlib.Path.open()`` by passing arguments through - to io.TextIOWrapper(). - """ - if self.is_dir(): - raise IsADirectoryError(self) - zip_mode = mode[0] - if zip_mode == 'r' and not self.exists(): - raise FileNotFoundError(self) - stream = self.root.open(self.at, zip_mode, pwd=pwd) - if 'b' in mode: - if args or kwargs: - raise ValueError("encoding args invalid for binary operation") - return stream - # Text mode: - encoding, args, kwargs = _extract_text_encoding(*args, **kwargs) - return io.TextIOWrapper(stream, encoding, *args, **kwargs) - - def _base(self): - return pathlib.PurePosixPath(self.at) if self.at else self.filename - - @property - def name(self): - return self._base().name - - @property - def suffix(self): - return self._base().suffix - - @property - def suffixes(self): - return self._base().suffixes - - @property - def stem(self): - return self._base().stem - - @property - def filename(self): - return pathlib.Path(self.root.filename).joinpath(self.at) - - def read_text(self, *args, **kwargs): - encoding, args, kwargs = _extract_text_encoding(*args, **kwargs) - with self.open('r', encoding, *args, **kwargs) as strm: - return strm.read() - - def read_bytes(self): - with self.open('rb') as strm: - return strm.read() - - def _is_child(self, path): - return posixpath.dirname(path.at.rstrip("/")) == self.at.rstrip("/") - - def _next(self, at): - return self.__class__(self.root, at) - - def is_dir(self): - return not self.at or self.at.endswith("/") - - def is_file(self): - return self.exists() and not self.is_dir() - - def exists(self): - return self.at in self.root._name_set() - - def iterdir(self): - if not self.is_dir(): - raise ValueError("Can't listdir a file") - subs = map(self._next, self.root.namelist()) - return filter(self._is_child, subs) - - def match(self, path_pattern): - return pathlib.PurePosixPath(self.at).match(path_pattern) - - def is_symlink(self): - """ - Return whether this path is a symlink. - """ - info = self.root.getinfo(self.at) - mode = info.external_attr >> 16 - return stat.S_ISLNK(mode) - - def glob(self, pattern): - if not pattern: - raise ValueError(f"Unacceptable pattern: {pattern!r}") - - prefix = re.escape(self.at) - tr = Translator(seps='/') - matches = re.compile(prefix + tr.translate(pattern)).fullmatch - return map(self._next, filter(matches, self.root.namelist())) - - def rglob(self, pattern): - return self.glob(f'**/{pattern}') - - def relative_to(self, other, *extra): - return posixpath.relpath(str(self), str(other.joinpath(*extra))) - - def __str__(self): - return posixpath.join(self.root.filename, self.at) - - def __repr__(self): - return self.__repr.format(self=self) - - def joinpath(self, *other): - next = posixpath.join(self.at, *other) - return self._next(self.root.resolve_dir(next)) - - __truediv__ = joinpath - - @property - def parent(self): - if not self.at: - return self.filename.parent - parent_at = posixpath.dirname(self.at.rstrip('/')) - if parent_at: - parent_at += '/' - return self._next(parent_at) diff --git a/Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/__init__.cpython-314.pyc b/Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index e56826af4ba785914d7e8a8746494d072fe6035a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20693 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 diff --git a/Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/glob.cpython-314.pyc b/Python314_4_x86_Template/Lib/zipfile/_path/__pycache__/glob.cpython-314.pyc deleted file mode 100644 index 1f45b685b1c507f52bee93d19ac177f5a809825f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5918 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 diff --git a/Python314_4_x86_Template/Lib/zipfile/_path/glob.py b/Python314_4_x86_Template/Lib/zipfile/_path/glob.py deleted file mode 100644 index bd2839304..000000000 --- a/Python314_4_x86_Template/Lib/zipfile/_path/glob.py +++ /dev/null @@ -1,113 +0,0 @@ -import os -import re - -_default_seps = os.sep + str(os.altsep) * bool(os.altsep) - - -class Translator: - """ - >>> Translator('xyz') - Traceback (most recent call last): - ... - AssertionError: Invalid separators - - >>> Translator('') - Traceback (most recent call last): - ... - AssertionError: Invalid separators - """ - - seps: str - - def __init__(self, seps: str = _default_seps): - assert seps and set(seps) <= set(_default_seps), "Invalid separators" - self.seps = seps - - def translate(self, pattern): - """ - Given a glob pattern, produce a regex that matches it. - """ - return self.extend(self.match_dirs(self.translate_core(pattern))) - - def extend(self, pattern): - r""" - Extend regex for pattern-wide concerns. - - Apply '(?s:)' to create a non-matching group that - matches newlines (valid on Unix). - - Append '\z' to imply fullmatch even when match is used. - """ - return rf'(?s:{pattern})\z' - - def match_dirs(self, pattern): - """ - Ensure that zipfile.Path directory names are matched. - - zipfile.Path directory names always end in a slash. - """ - return rf'{pattern}[/]?' - - def translate_core(self, pattern): - r""" - Given a glob pattern, produce a regex that matches it. - - >>> t = Translator() - >>> t.translate_core('*.txt').replace('\\\\', '') - '[^/]*\\.txt' - >>> t.translate_core('a?txt') - 'a[^/]txt' - >>> t.translate_core('**/*').replace('\\\\', '') - '.*/[^/][^/]*' - """ - self.restrict_rglob(pattern) - return ''.join(map(self.replace, separate(self.star_not_empty(pattern)))) - - def replace(self, match): - """ - Perform the replacements for a match from :func:`separate`. - """ - return match.group('set') or ( - re.escape(match.group(0)) - .replace('\\*\\*', r'.*') - .replace('\\*', rf'[^{re.escape(self.seps)}]*') - .replace('\\?', r'[^/]') - ) - - def restrict_rglob(self, pattern): - """ - Raise ValueError if ** appears in anything but a full path segment. - - >>> Translator().translate('**foo') - Traceback (most recent call last): - ... - ValueError: ** must appear alone in a path segment - """ - seps_pattern = rf'[{re.escape(self.seps)}]+' - segments = re.split(seps_pattern, pattern) - if any('**' in segment and segment != '**' for segment in segments): - raise ValueError("** must appear alone in a path segment") - - def star_not_empty(self, pattern): - """ - Ensure that * will not match an empty segment. - """ - - def handle_segment(match): - segment = match.group(0) - return '?*' if segment == '*' else segment - - not_seps_pattern = rf'[^{re.escape(self.seps)}]+' - return re.sub(not_seps_pattern, handle_segment, pattern) - - -def separate(pattern): - """ - Separate out character sets to avoid translating their contents. - - >>> [m.group(0) for m in separate('*.txt')] - ['*.txt'] - >>> [m.group(0) for m in separate('a[?]txt')] - ['a', '[?]', 'txt'] - """ - return re.finditer(r'([^\[]+)|(?P<set>[\[].*?[\]])|([\[][^\]]*$)', pattern) diff --git a/Python314_4_x86_Template/Lib/zipimport.py b/Python314_4_x86_Template/Lib/zipimport.py deleted file mode 100644 index 444c9dd11..000000000 --- a/Python314_4_x86_Template/Lib/zipimport.py +++ /dev/null @@ -1,822 +0,0 @@ -"""zipimport provides support for importing Python modules from Zip archives. - -This module exports two objects: -- zipimporter: a class; its constructor takes a path to a Zip archive. -- ZipImportError: exception raised by zipimporter objects. It's a - subclass of ImportError, so it can be caught as ImportError, too. - -It is usually not needed to use the zipimport module explicitly; it is -used by the builtin import mechanism for sys.path items that are paths -to Zip archives. -""" - -#from importlib import _bootstrap_external -#from importlib import _bootstrap # for _verbose_message -import _frozen_importlib_external as _bootstrap_external -from _frozen_importlib_external import _unpack_uint16, _unpack_uint32, _unpack_uint64 -import _frozen_importlib as _bootstrap # for _verbose_message -import _imp # for check_hash_based_pycs -import _io # for open -import marshal # for loads -import sys # for modules -import time # for mktime - -__all__ = ['ZipImportError', 'zipimporter'] - - -path_sep = _bootstrap_external.path_sep -alt_path_sep = _bootstrap_external.path_separators[1:] - - -class ZipImportError(ImportError): - pass - -# _read_directory() cache -_zip_directory_cache = {} - -_module_type = type(sys) - -END_CENTRAL_DIR_SIZE = 22 -END_CENTRAL_DIR_SIZE_64 = 56 -END_CENTRAL_DIR_LOCATOR_SIZE_64 = 20 -STRING_END_ARCHIVE = b'PK\x05\x06' # standard EOCD signature -STRING_END_LOCATOR_64 = b'PK\x06\x07' # Zip64 EOCD Locator signature -STRING_END_ZIP_64 = b'PK\x06\x06' # Zip64 EOCD signature -MAX_COMMENT_LEN = (1 << 16) - 1 -MAX_UINT32 = 0xffffffff -ZIP64_EXTRA_TAG = 0x1 - -class zipimporter(_bootstrap_external._LoaderBasics): - """zipimporter(archivepath) -> zipimporter object - - Create a new zipimporter instance. 'archivepath' must be a path to - a zipfile, or to a specific path inside a zipfile. For example, it can be - '/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a - valid directory inside the archive. - - 'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip - archive. - - The 'archive' attribute of zipimporter objects contains the name of the - zipfile targeted. - """ - - # Split the "subdirectory" from the Zip archive path, lookup a matching - # entry in sys.path_importer_cache, fetch the file directory from there - # if found, or else read it from the archive. - def __init__(self, path): - if not isinstance(path, str): - raise TypeError(f"expected str, not {type(path)!r}") - if not path: - raise ZipImportError('archive path is empty', path=path) - if alt_path_sep: - path = path.replace(alt_path_sep, path_sep) - - prefix = [] - while True: - try: - st = _bootstrap_external._path_stat(path) - except (OSError, ValueError): - # On Windows a ValueError is raised for too long paths. - # Back up one path element. - dirname, basename = _bootstrap_external._path_split(path) - if dirname == path: - raise ZipImportError('not a Zip file', path=path) - path = dirname - prefix.append(basename) - else: - # it exists - if (st.st_mode & 0o170000) != 0o100000: # stat.S_ISREG - # it's a not file - raise ZipImportError('not a Zip file', path=path) - break - - if path not in _zip_directory_cache: - _zip_directory_cache[path] = _read_directory(path) - self.archive = path - # a prefix directory following the ZIP file path. - self.prefix = _bootstrap_external._path_join(*prefix[::-1]) - if self.prefix: - self.prefix += path_sep - - - def find_spec(self, fullname, target=None): - """Create a ModuleSpec for the specified module. - - Returns None if the module cannot be found. - """ - module_info = _get_module_info(self, fullname) - if module_info is not None: - return _bootstrap.spec_from_loader(fullname, self, is_package=module_info) - else: - # Not a module or regular package. See if this is a directory, and - # therefore possibly a portion of a namespace package. - - # We're only interested in the last path component of fullname - # earlier components are recorded in self.prefix. - modpath = _get_module_path(self, fullname) - if _is_dir(self, modpath): - # This is possibly a portion of a namespace - # package. Return the string representing its path, - # without a trailing separator. - path = f'{self.archive}{path_sep}{modpath}' - spec = _bootstrap.ModuleSpec(name=fullname, loader=None, - is_package=True) - spec.submodule_search_locations.append(path) - return spec - else: - return None - - def get_code(self, fullname): - """get_code(fullname) -> code object. - - Return the code object for the specified module. Raise ZipImportError - if the module couldn't be imported. - """ - code, ispackage, modpath = _get_module_code(self, fullname) - return code - - - def get_data(self, pathname): - """get_data(pathname) -> string with file data. - - Return the data associated with 'pathname'. Raise OSError if - the file wasn't found. - """ - if alt_path_sep: - pathname = pathname.replace(alt_path_sep, path_sep) - - key = pathname - if pathname.startswith(self.archive + path_sep): - key = pathname[len(self.archive + path_sep):] - - try: - toc_entry = self._get_files()[key] - except KeyError: - raise OSError(0, '', key) - if toc_entry is None: - return b'' - return _get_data(self.archive, toc_entry) - - - # Return a string matching __file__ for the named module - def get_filename(self, fullname): - """get_filename(fullname) -> filename string. - - Return the filename for the specified module or raise ZipImportError - if it couldn't be imported. - """ - # Deciding the filename requires working out where the code - # would come from if the module was actually loaded - code, ispackage, modpath = _get_module_code(self, fullname) - return modpath - - - def get_source(self, fullname): - """get_source(fullname) -> source string. - - Return the source code for the specified module. Raise ZipImportError - if the module couldn't be found, return None if the archive does - contain the module, but has no source for it. - """ - mi = _get_module_info(self, fullname) - if mi is None: - raise ZipImportError(f"can't find module {fullname!r}", name=fullname) - - path = _get_module_path(self, fullname) - if mi: - fullpath = _bootstrap_external._path_join(path, '__init__.py') - else: - fullpath = f'{path}.py' - - try: - toc_entry = self._get_files()[fullpath] - except KeyError: - # we have the module, but no source - return None - return _get_data(self.archive, toc_entry).decode() - - - # Return a bool signifying whether the module is a package or not. - def is_package(self, fullname): - """is_package(fullname) -> bool. - - Return True if the module specified by fullname is a package. - Raise ZipImportError if the module couldn't be found. - """ - mi = _get_module_info(self, fullname) - if mi is None: - raise ZipImportError(f"can't find module {fullname!r}", name=fullname) - return mi - - - # Load and return the module named by 'fullname'. - def load_module(self, fullname): - """load_module(fullname) -> module. - - Load the module specified by 'fullname'. 'fullname' must be the - fully qualified (dotted) module name. It returns the imported - module, or raises ZipImportError if it could not be imported. - - Deprecated since Python 3.10. Use exec_module() instead. - """ - import warnings - warnings._deprecated("zipimport.zipimporter.load_module", - f"{warnings._DEPRECATED_MSG}; " - "use zipimport.zipimporter.exec_module() instead", - remove=(3, 15)) - code, ispackage, modpath = _get_module_code(self, fullname) - mod = sys.modules.get(fullname) - if mod is None or not isinstance(mod, _module_type): - mod = _module_type(fullname) - sys.modules[fullname] = mod - mod.__loader__ = self - - try: - if ispackage: - # add __path__ to the module *before* the code gets - # executed - path = _get_module_path(self, fullname) - fullpath = _bootstrap_external._path_join(self.archive, path) - mod.__path__ = [fullpath] - - if not hasattr(mod, '__builtins__'): - mod.__builtins__ = __builtins__ - _bootstrap_external._fix_up_module(mod.__dict__, fullname, modpath) - exec(code, mod.__dict__) - except: - del sys.modules[fullname] - raise - - try: - mod = sys.modules[fullname] - except KeyError: - raise ImportError(f'Loaded module {fullname!r} not found in sys.modules') - _bootstrap._verbose_message('import {} # loaded from Zip {}', fullname, modpath) - return mod - - - def get_resource_reader(self, fullname): - """Return the ResourceReader for a module in a zip file.""" - from importlib.readers import ZipReader - - return ZipReader(self, fullname) - - - def _get_files(self): - """Return the files within the archive path.""" - try: - files = _zip_directory_cache[self.archive] - except KeyError: - try: - files = _zip_directory_cache[self.archive] = _read_directory(self.archive) - except ZipImportError: - files = {} - - return files - - - def invalidate_caches(self): - """Invalidates the cache of file data of the archive path.""" - _zip_directory_cache.pop(self.archive, None) - - - def __repr__(self): - return f'<zipimporter object "{self.archive}{path_sep}{self.prefix}">' - - -# _zip_searchorder defines how we search for a module in the Zip -# archive: we first search for a package __init__, then for -# non-package .pyc, and .py entries. The .pyc entries -# are swapped by initzipimport() if we run in optimized mode. Also, -# '/' is replaced by path_sep there. -_zip_searchorder = ( - (path_sep + '__init__.pyc', True, True), - (path_sep + '__init__.py', False, True), - ('.pyc', True, False), - ('.py', False, False), -) - -# Given a module name, return the potential file path in the -# archive (without extension). -def _get_module_path(self, fullname): - return self.prefix + fullname.rpartition('.')[2] - -# Does this path represent a directory? -def _is_dir(self, path): - # See if this is a "directory". If so, it's eligible to be part - # of a namespace package. We test by seeing if the name, with an - # appended path separator, exists. - dirpath = path + path_sep - # If dirpath is present in self._get_files(), we have a directory. - return dirpath in self._get_files() - -# Return some information about a module. -def _get_module_info(self, fullname): - path = _get_module_path(self, fullname) - for suffix, isbytecode, ispackage in _zip_searchorder: - fullpath = path + suffix - if fullpath in self._get_files(): - return ispackage - return None - - -# implementation - -# _read_directory(archive) -> files dict (new reference) -# -# Given a path to a Zip archive, build a dict, mapping file names -# (local to the archive, using SEP as a separator) to toc entries. -# -# A toc_entry is a tuple: -# -# (__file__, # value to use for __file__, available for all files, -# # encoded to the filesystem encoding -# compress, # compression kind; 0 for uncompressed -# data_size, # size of compressed data on disk -# file_size, # size of decompressed data -# file_offset, # offset of file header from start of archive -# time, # mod time of file (in dos format) -# date, # mod data of file (in dos format) -# crc, # crc checksum of the data -# ) -# -# Directories can be recognized by the trailing path_sep in the name, -# data_size and file_offset are 0. -def _read_directory(archive): - try: - fp = _io.open_code(archive) - except OSError: - raise ZipImportError(f"can't open Zip file: {archive!r}", path=archive) - - with fp: - # GH-87235: On macOS all file descriptors for /dev/fd/N share the same - # file offset, reset the file offset after scanning the zipfile directory - # to not cause problems when some runs 'python3 /dev/fd/9 9<some_script' - start_offset = fp.tell() - try: - # Check if there's a comment. - try: - fp.seek(0, 2) - file_size = fp.tell() - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", - path=archive) - max_comment_plus_dirs_size = ( - MAX_COMMENT_LEN + END_CENTRAL_DIR_SIZE + - END_CENTRAL_DIR_SIZE_64 + END_CENTRAL_DIR_LOCATOR_SIZE_64) - max_comment_start = max(file_size - max_comment_plus_dirs_size, 0) - try: - fp.seek(max_comment_start) - data = fp.read(max_comment_plus_dirs_size) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", - path=archive) - pos = data.rfind(STRING_END_ARCHIVE) - pos64 = data.rfind(STRING_END_ZIP_64) - - if (pos64 >= 0 and pos64+END_CENTRAL_DIR_SIZE_64+END_CENTRAL_DIR_LOCATOR_SIZE_64==pos): - # Zip64 at "correct" offset from standard EOCD - buffer = data[pos64:pos64 + END_CENTRAL_DIR_SIZE_64] - if len(buffer) != END_CENTRAL_DIR_SIZE_64: - raise ZipImportError( - f"corrupt Zip64 file: Expected {END_CENTRAL_DIR_SIZE_64} byte " - f"zip64 central directory, but read {len(buffer)} bytes.", - path=archive) - header_position = file_size - len(data) + pos64 - - central_directory_size = _unpack_uint64(buffer[40:48]) - central_directory_position = _unpack_uint64(buffer[48:56]) - num_entries = _unpack_uint64(buffer[24:32]) - elif pos >= 0: - buffer = data[pos:pos+END_CENTRAL_DIR_SIZE] - if len(buffer) != END_CENTRAL_DIR_SIZE: - raise ZipImportError(f"corrupt Zip file: {archive!r}", - path=archive) - - header_position = file_size - len(data) + pos - - # Buffer now contains a valid EOCD, and header_position gives the - # starting position of it. - central_directory_size = _unpack_uint32(buffer[12:16]) - central_directory_position = _unpack_uint32(buffer[16:20]) - num_entries = _unpack_uint16(buffer[8:10]) - - # N.b. if someday you want to prefer the standard (non-zip64) EOCD, - # you need to adjust position by 76 for arc to be 0. - else: - raise ZipImportError(f'not a Zip file: {archive!r}', - path=archive) - - # Buffer now contains a valid EOCD, and header_position gives the - # starting position of it. - # XXX: These are cursory checks but are not as exact or strict as they - # could be. Checking the arc-adjusted value is probably good too. - if header_position < central_directory_size: - raise ZipImportError(f'bad central directory size: {archive!r}', path=archive) - if header_position < central_directory_position: - raise ZipImportError(f'bad central directory offset: {archive!r}', path=archive) - header_position -= central_directory_size - # On just-a-zipfile these values are the same and arc_offset is zero; if - # the file has some bytes prepended, `arc_offset` is the number of such - # bytes. This is used for pex as well as self-extracting .exe. - arc_offset = header_position - central_directory_position - if arc_offset < 0: - raise ZipImportError(f'bad central directory size or offset: {archive!r}', path=archive) - - files = {} - # Start of Central Directory - count = 0 - try: - fp.seek(header_position) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - while True: - buffer = fp.read(46) - if len(buffer) < 4: - raise EOFError('EOF read where not expected') - # Start of file header - if buffer[:4] != b'PK\x01\x02': - if count != num_entries: - raise ZipImportError( - f"mismatched num_entries: {count} should be {num_entries} in {archive!r}", - path=archive, - ) - break # Bad: Central Dir File Header - if len(buffer) != 46: - raise EOFError('EOF read where not expected') - flags = _unpack_uint16(buffer[8:10]) - compress = _unpack_uint16(buffer[10:12]) - time = _unpack_uint16(buffer[12:14]) - date = _unpack_uint16(buffer[14:16]) - crc = _unpack_uint32(buffer[16:20]) - data_size = _unpack_uint32(buffer[20:24]) - file_size = _unpack_uint32(buffer[24:28]) - name_size = _unpack_uint16(buffer[28:30]) - extra_size = _unpack_uint16(buffer[30:32]) - comment_size = _unpack_uint16(buffer[32:34]) - file_offset = _unpack_uint32(buffer[42:46]) - header_size = name_size + extra_size + comment_size - - try: - name = fp.read(name_size) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - if len(name) != name_size: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - # On Windows, calling fseek to skip over the fields we don't use is - # slower than reading the data because fseek flushes stdio's - # internal buffers. See issue #8745. - try: - extra_data_len = header_size - name_size - extra_data = memoryview(fp.read(extra_data_len)) - - if len(extra_data) != extra_data_len: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - - if flags & 0x800: - # UTF-8 file names extension - name = name.decode() - else: - # Historical ZIP filename encoding - try: - name = name.decode('ascii') - except UnicodeDecodeError: - name = name.decode('latin1').translate(cp437_table) - - name = name.replace('/', path_sep) - path = _bootstrap_external._path_join(archive, name) - - # Ordering matches unpacking below. - if ( - file_size == MAX_UINT32 or - data_size == MAX_UINT32 or - file_offset == MAX_UINT32 - ): - # need to decode extra_data looking for a zip64 extra (which might not - # be present) - while extra_data: - if len(extra_data) < 4: - raise ZipImportError(f"can't read header extra: {archive!r}", path=archive) - tag = _unpack_uint16(extra_data[:2]) - size = _unpack_uint16(extra_data[2:4]) - if len(extra_data) < 4 + size: - raise ZipImportError(f"can't read header extra: {archive!r}", path=archive) - if tag == ZIP64_EXTRA_TAG: - if (len(extra_data) - 4) % 8 != 0: - raise ZipImportError(f"can't read header extra: {archive!r}", path=archive) - num_extra_values = (len(extra_data) - 4) // 8 - if num_extra_values > 3: - raise ZipImportError(f"can't read header extra: {archive!r}", path=archive) - import struct - values = list(struct.unpack_from(f"<{min(num_extra_values, 3)}Q", - extra_data, offset=4)) - - # N.b. Here be dragons: the ordering of these is different than - # the header fields, and it's really easy to get it wrong since - # naturally-occurring zips that use all 3 are >4GB - if file_size == MAX_UINT32: - file_size = values.pop(0) - if data_size == MAX_UINT32: - data_size = values.pop(0) - if file_offset == MAX_UINT32: - file_offset = values.pop(0) - - break - - # For a typical zip, this bytes-slicing only happens 2-3 times, on - # small data like timestamps and filesizes. - extra_data = extra_data[4+size:] - else: - _bootstrap._verbose_message( - "zipimport: suspected zip64 but no zip64 extra for {!r}", - path, - ) - # XXX These two statements seem swapped because `central_directory_position` - # is a position within the actual file, but `file_offset` (when compared) is - # as encoded in the entry, not adjusted for this file. - # N.b. this must be after we've potentially read the zip64 extra which can - # change `file_offset`. - if file_offset > central_directory_position: - raise ZipImportError(f'bad local header offset: {archive!r}', path=archive) - file_offset += arc_offset - - t = (path, compress, data_size, file_size, file_offset, time, date, crc) - files[name] = t - count += 1 - finally: - fp.seek(start_offset) - _bootstrap._verbose_message('zipimport: found {} names in {!r}', count, archive) - - # Add implicit directories. - count = 0 - for name in list(files): - while True: - i = name.rstrip(path_sep).rfind(path_sep) - if i < 0: - break - name = name[:i + 1] - if name in files: - break - files[name] = None - count += 1 - if count: - _bootstrap._verbose_message('zipimport: added {} implicit directories in {!r}', - count, archive) - return files - -# During bootstrap, we may need to load the encodings -# package from a ZIP file. But the cp437 encoding is implemented -# in Python in the encodings package. -# -# Break out of this dependency by using the translation table for -# the cp437 encoding. -cp437_table = ( - # ASCII part, 8 rows x 16 chars - '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' - '\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' - ' !"#$%&\'()*+,-./' - '0123456789:;<=>?' - '@ABCDEFGHIJKLMNO' - 'PQRSTUVWXYZ[\\]^_' - '`abcdefghijklmno' - 'pqrstuvwxyz{|}~\x7f' - # non-ASCII part, 16 rows x 8 chars - '\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7' - '\xea\xeb\xe8\xef\xee\xec\xc4\xc5' - '\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9' - '\xff\xd6\xdc\xa2\xa3\xa5\u20a7\u0192' - '\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba' - '\xbf\u2310\xac\xbd\xbc\xa1\xab\xbb' - '\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556' - '\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510' - '\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f' - '\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567' - '\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b' - '\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580' - '\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4' - '\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229' - '\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248' - '\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0' -) - -_importing_zlib = False - -# Return the zlib.decompress function object, or NULL if zlib couldn't -# be imported. The function is cached when found, so subsequent calls -# don't import zlib again. -def _get_decompress_func(): - global _importing_zlib - if _importing_zlib: - # Someone has a zlib.py[co] in their Zip file - # let's avoid a stack overflow. - _bootstrap._verbose_message('zipimport: zlib UNAVAILABLE') - raise ZipImportError("can't decompress data; zlib not available") - - _importing_zlib = True - try: - from zlib import decompress - except Exception: - _bootstrap._verbose_message('zipimport: zlib UNAVAILABLE') - raise ZipImportError("can't decompress data; zlib not available") - finally: - _importing_zlib = False - - _bootstrap._verbose_message('zipimport: zlib available') - return decompress - -# Given a path to a Zip file and a toc_entry, return the (uncompressed) data. -def _get_data(archive, toc_entry): - datapath, compress, data_size, file_size, file_offset, time, date, crc = toc_entry - if data_size < 0: - raise ZipImportError('negative data size') - - with _io.open_code(archive) as fp: - # Check to make sure the local file header is correct - try: - fp.seek(file_offset) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - buffer = fp.read(30) - if len(buffer) != 30: - raise EOFError('EOF read where not expected') - - if buffer[:4] != b'PK\x03\x04': - # Bad: Local File Header - raise ZipImportError(f'bad local file header: {archive!r}', path=archive) - - name_size = _unpack_uint16(buffer[26:28]) - extra_size = _unpack_uint16(buffer[28:30]) - header_size = 30 + name_size + extra_size - file_offset += header_size # Start of file data - try: - fp.seek(file_offset) - except OSError: - raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) - raw_data = fp.read(data_size) - if len(raw_data) != data_size: - raise OSError("zipimport: can't read data") - - if compress == 0: - # data is not compressed - return raw_data - - # Decompress with zlib - try: - decompress = _get_decompress_func() - except Exception: - raise ZipImportError("can't decompress data; zlib not available") - return decompress(raw_data, -15) - - -# Lenient date/time comparison function. The precision of the mtime -# in the archive is lower than the mtime stored in a .pyc: we -# must allow a difference of at most one second. -def _eq_mtime(t1, t2): - # dostime only stores even seconds, so be lenient - return abs(t1 - t2) <= 1 - - -# Given the contents of a .py[co] file, unmarshal the data -# and return the code object. Raises ImportError it the magic word doesn't -# match, or if the recorded .py[co] metadata does not match the source. -def _unmarshal_code(self, pathname, fullpath, fullname, data): - exc_details = { - 'name': fullname, - 'path': fullpath, - } - - flags = _bootstrap_external._classify_pyc(data, fullname, exc_details) - - hash_based = flags & 0b1 != 0 - if hash_based: - check_source = flags & 0b10 != 0 - if (_imp.check_hash_based_pycs != 'never' and - (check_source or _imp.check_hash_based_pycs == 'always')): - source_bytes = _get_pyc_source(self, fullpath) - if source_bytes is not None: - source_hash = _imp.source_hash( - _imp.pyc_magic_number_token, - source_bytes, - ) - - _bootstrap_external._validate_hash_pyc( - data, source_hash, fullname, exc_details) - else: - source_mtime, source_size = \ - _get_mtime_and_size_of_source(self, fullpath) - - if source_mtime: - # We don't use _bootstrap_external._validate_timestamp_pyc - # to allow for a more lenient timestamp check. - if (not _eq_mtime(_unpack_uint32(data[8:12]), source_mtime) or - _unpack_uint32(data[12:16]) != source_size): - _bootstrap._verbose_message( - f'bytecode is stale for {fullname!r}') - return None - - code = marshal.loads(data[16:]) - if not isinstance(code, _code_type): - raise TypeError(f'compiled module {pathname!r} is not a code object') - return code - -_code_type = type(_unmarshal_code.__code__) - - -# Replace any occurrences of '\r\n?' in the input string with '\n'. -# This converts DOS and Mac line endings to Unix line endings. -def _normalize_line_endings(source): - source = source.replace(b'\r\n', b'\n') - source = source.replace(b'\r', b'\n') - return source - -# Given a string buffer containing Python source code, compile it -# and return a code object. -def _compile_source(pathname, source): - source = _normalize_line_endings(source) - return compile(source, pathname, 'exec', dont_inherit=True) - -# Convert the date/time values found in the Zip archive to a value -# that's compatible with the time stamp stored in .pyc files. -def _parse_dostime(d, t): - return time.mktime(( - (d >> 9) + 1980, # bits 9..15: year - (d >> 5) & 0xF, # bits 5..8: month - d & 0x1F, # bits 0..4: day - t >> 11, # bits 11..15: hours - (t >> 5) & 0x3F, # bits 8..10: minutes - (t & 0x1F) * 2, # bits 0..7: seconds / 2 - -1, -1, -1)) - -# Given a path to a .pyc file in the archive, return the -# modification time of the matching .py file and its size, -# or (0, 0) if no source is available. -def _get_mtime_and_size_of_source(self, path): - try: - # strip 'c' or 'o' from *.py[co] - assert path[-1:] in ('c', 'o') - path = path[:-1] - toc_entry = self._get_files()[path] - # fetch the time stamp of the .py file for comparison - # with an embedded pyc time stamp - time = toc_entry[5] - date = toc_entry[6] - uncompressed_size = toc_entry[3] - return _parse_dostime(date, time), uncompressed_size - except (KeyError, IndexError, TypeError): - return 0, 0 - - -# Given a path to a .pyc file in the archive, return the -# contents of the matching .py file, or None if no source -# is available. -def _get_pyc_source(self, path): - # strip 'c' or 'o' from *.py[co] - assert path[-1:] in ('c', 'o') - path = path[:-1] - - try: - toc_entry = self._get_files()[path] - except KeyError: - return None - else: - return _get_data(self.archive, toc_entry) - - -# Get the code object associated with the module specified by -# 'fullname'. -def _get_module_code(self, fullname): - path = _get_module_path(self, fullname) - import_error = None - for suffix, isbytecode, ispackage in _zip_searchorder: - fullpath = path + suffix - _bootstrap._verbose_message('trying {}{}{}', self.archive, path_sep, fullpath, verbosity=2) - try: - toc_entry = self._get_files()[fullpath] - except KeyError: - pass - else: - modpath = toc_entry[0] - data = _get_data(self.archive, toc_entry) - code = None - if isbytecode: - try: - code = _unmarshal_code(self, modpath, fullpath, fullname, data) - except ImportError as exc: - import_error = exc - else: - code = _compile_source(modpath, data) - if code is None: - # bad magic number or non-matching mtime - # in byte code, try next - continue - modpath = toc_entry[0] - return code, ispackage, modpath - else: - if import_error: - msg = f"module load failed: {import_error}" - raise ZipImportError(msg, name=fullname) from import_error - else: - raise ZipImportError(f"can't find module {fullname!r}", name=fullname) diff --git a/Python314_4_x86_Template/Lib/zoneinfo/__init__.py b/Python314_4_x86_Template/Lib/zoneinfo/__init__.py deleted file mode 100644 index df2ae909f..000000000 --- a/Python314_4_x86_Template/Lib/zoneinfo/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -__all__ = [ - "ZoneInfo", - "reset_tzpath", - "available_timezones", - "TZPATH", - "ZoneInfoNotFoundError", - "InvalidTZPathWarning", -] - -from . import _tzpath -from ._common import ZoneInfoNotFoundError - -try: - from _zoneinfo import ZoneInfo -except (ImportError, AttributeError): # pragma: nocover - # AttributeError: module 'datetime' has no attribute 'datetime_CAPI'. - # This happens when the '_datetime' module is not available and the - # pure Python implementation is used instead. - from ._zoneinfo import ZoneInfo - -reset_tzpath = _tzpath.reset_tzpath -available_timezones = _tzpath.available_timezones -InvalidTZPathWarning = _tzpath.InvalidTZPathWarning - - -def __getattr__(name): - if name == "TZPATH": - return _tzpath.TZPATH - else: - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - -def __dir__(): - return sorted(list(globals()) + ["TZPATH"]) diff --git a/Python314_4_x86_Template/Lib/zoneinfo/_common.py b/Python314_4_x86_Template/Lib/zoneinfo/_common.py deleted file mode 100644 index 98668c15d..000000000 --- a/Python314_4_x86_Template/Lib/zoneinfo/_common.py +++ /dev/null @@ -1,172 +0,0 @@ -import struct - - -def load_tzdata(key): - from importlib import resources - - components = key.split("/") - package_name = ".".join(["tzdata.zoneinfo"] + components[:-1]) - resource_name = components[-1] - - try: - path = resources.files(package_name).joinpath(resource_name) - # gh-85702: Prevent PermissionError on Windows - if path.is_dir(): - raise IsADirectoryError - return path.open("rb") - except (ImportError, FileNotFoundError, UnicodeEncodeError, IsADirectoryError): - # There are four types of exception that can be raised that all amount - # to "we cannot find this key": - # - # ImportError: If package_name doesn't exist (e.g. if tzdata is not - # installed, or if there's an error in the folder name like - # Amrica/New_York) - # FileNotFoundError: If resource_name doesn't exist in the package - # (e.g. Europe/Krasnoy) - # UnicodeEncodeError: If package_name or resource_name are not UTF-8, - # such as keys containing a surrogate character. - # IsADirectoryError: If package_name without a resource_name specified. - raise ZoneInfoNotFoundError(f"No time zone found with key {key}") - - -def load_data(fobj): - header = _TZifHeader.from_file(fobj) - - if header.version == 1: - time_size = 4 - time_type = "l" - else: - # Version 2+ has 64-bit integer transition times - time_size = 8 - time_type = "q" - - # Version 2+ also starts with a Version 1 header and data, which - # we need to skip now - skip_bytes = ( - header.timecnt * 5 # Transition times and types - + header.typecnt * 6 # Local time type records - + header.charcnt # Time zone designations - + header.leapcnt * 8 # Leap second records - + header.isstdcnt # Standard/wall indicators - + header.isutcnt # UT/local indicators - ) - - fobj.seek(skip_bytes, 1) - - # Now we need to read the second header, which is not the same - # as the first - header = _TZifHeader.from_file(fobj) - - typecnt = header.typecnt - timecnt = header.timecnt - charcnt = header.charcnt - - # The data portion starts with timecnt transitions and indices - if timecnt: - trans_list_utc = struct.unpack( - f">{timecnt}{time_type}", fobj.read(timecnt * time_size) - ) - trans_idx = struct.unpack(f">{timecnt}B", fobj.read(timecnt)) - - if max(trans_idx) >= typecnt: - raise ValueError("Invalid transition index found while reading TZif: " - f"{max(trans_idx)}") - else: - trans_list_utc = () - trans_idx = () - - # Read the ttinfo struct, (utoff, isdst, abbrind) - if typecnt: - utcoff, isdst, abbrind = zip( - *(struct.unpack(">lbb", fobj.read(6)) for i in range(typecnt)) - ) - else: - utcoff = () - isdst = () - abbrind = () - - # Now read the abbreviations. They are null-terminated strings, indexed - # not by position in the array but by position in the unsplit - # abbreviation string. I suppose this makes more sense in C, which uses - # null to terminate the strings, but it's inconvenient here... - abbr_vals = {} - abbr_chars = fobj.read(charcnt) - - def get_abbr(idx): - # Gets a string starting at idx and running until the next \x00 - # - # We cannot pre-populate abbr_vals by splitting on \x00 because there - # are some zones that use subsets of longer abbreviations, like so: - # - # LMT\x00AHST\x00HDT\x00 - # - # Where the idx to abbr mapping should be: - # - # {0: "LMT", 4: "AHST", 5: "HST", 9: "HDT"} - if idx not in abbr_vals: - span_end = abbr_chars.find(b"\x00", idx) - abbr_vals[idx] = abbr_chars[idx:span_end].decode() - - return abbr_vals[idx] - - abbr = tuple(get_abbr(idx) for idx in abbrind) - - # The remainder of the file consists of leap seconds (currently unused) and - # the standard/wall and ut/local indicators, which are metadata we don't need. - # In version 2 files, we need to skip the unnecessary data to get at the TZ string: - if header.version >= 2: - # Each leap second record has size (time_size + 4) - skip_bytes = header.isutcnt + header.isstdcnt + header.leapcnt * 12 - fobj.seek(skip_bytes, 1) - - c = fobj.read(1) # Should be \n - assert c == b"\n", c - - line = fobj.readline() - if not line.endswith(b"\n"): - raise ValueError("Invalid TZif file: unexpected end of file") - tz_str = line.rstrip(b"\n") - else: - tz_str = None - - return trans_idx, trans_list_utc, utcoff, isdst, abbr, tz_str - - -class _TZifHeader: - __slots__ = [ - "version", - "isutcnt", - "isstdcnt", - "leapcnt", - "timecnt", - "typecnt", - "charcnt", - ] - - def __init__(self, *args): - for attr, val in zip(self.__slots__, args, strict=True): - setattr(self, attr, val) - - @classmethod - def from_file(cls, stream): - # The header starts with a 4-byte "magic" value - if stream.read(4) != b"TZif": - raise ValueError("Invalid TZif file: magic not found") - - _version = stream.read(1) - if _version == b"\x00": - version = 1 - else: - version = int(_version) - stream.read(15) - - args = (version,) - - # Slots are defined in the order that the bytes are arranged - args = args + struct.unpack(">6l", stream.read(24)) - - return cls(*args) - - -class ZoneInfoNotFoundError(KeyError): - """Exception raised when a ZoneInfo key is not found.""" diff --git a/Python314_4_x86_Template/Lib/zoneinfo/_tzpath.py b/Python314_4_x86_Template/Lib/zoneinfo/_tzpath.py deleted file mode 100644 index 177d32c35..000000000 --- a/Python314_4_x86_Template/Lib/zoneinfo/_tzpath.py +++ /dev/null @@ -1,189 +0,0 @@ -import os -import sysconfig - - -def _reset_tzpath(to=None, stacklevel=4): - global TZPATH - - tzpaths = to - if tzpaths is not None: - if isinstance(tzpaths, (str, bytes)): - raise TypeError( - f"tzpaths must be a list or tuple, " - + f"not {type(tzpaths)}: {tzpaths!r}" - ) - - tzpaths = [os.fspath(p) for p in tzpaths] - if not all(isinstance(p, str) for p in tzpaths): - raise TypeError( - "All elements of a tzpath sequence must be strings or " - "os.PathLike objects which convert to strings." - ) - - if not all(map(os.path.isabs, tzpaths)): - raise ValueError(_get_invalid_paths_message(tzpaths)) - base_tzpath = tzpaths - else: - env_var = os.environ.get("PYTHONTZPATH", None) - if env_var is None: - env_var = sysconfig.get_config_var("TZPATH") - base_tzpath = _parse_python_tzpath(env_var, stacklevel) - - TZPATH = tuple(base_tzpath) - - -def reset_tzpath(to=None): - """Reset global TZPATH.""" - # We need `_reset_tzpath` helper function because it produces a warning, - # it is used as both a module-level call and a public API. - # This is how we equalize the stacklevel for both calls. - _reset_tzpath(to) - - -def _parse_python_tzpath(env_var, stacklevel): - if not env_var: - return () - - raw_tzpath = env_var.split(os.pathsep) - new_tzpath = tuple(filter(os.path.isabs, raw_tzpath)) - - # If anything has been filtered out, we will warn about it - if len(new_tzpath) != len(raw_tzpath): - import warnings - - msg = _get_invalid_paths_message(raw_tzpath) - - warnings.warn( - "Invalid paths specified in PYTHONTZPATH environment variable. " - + msg, - InvalidTZPathWarning, - stacklevel=stacklevel, - ) - - return new_tzpath - - -def _get_invalid_paths_message(tzpaths): - invalid_paths = (path for path in tzpaths if not os.path.isabs(path)) - - prefix = "\n " - indented_str = prefix + prefix.join(invalid_paths) - - return ( - "Paths should be absolute but found the following relative paths:" - + indented_str - ) - - -def find_tzfile(key): - """Retrieve the path to a TZif file from a key.""" - _validate_tzfile_path(key) - for search_path in TZPATH: - filepath = os.path.join(search_path, key) - if os.path.isfile(filepath): - return filepath - - return None - - -_TEST_PATH = os.path.normpath(os.path.join("_", "_"))[:-1] - - -def _validate_tzfile_path(path, _base=_TEST_PATH): - if os.path.isabs(path): - raise ValueError( - f"ZoneInfo keys may not be absolute paths, got: {path}" - ) - - # We only care about the kinds of path normalizations that would change the - # length of the key - e.g. a/../b -> a/b, or a/b/ -> a/b. On Windows, - # normpath will also change from a/b to a\b, but that would still preserve - # the length. - new_path = os.path.normpath(path) - if len(new_path) != len(path): - raise ValueError( - f"ZoneInfo keys must be normalized relative paths, got: {path}" - ) - - resolved = os.path.normpath(os.path.join(_base, new_path)) - if not resolved.startswith(_base): - raise ValueError( - f"ZoneInfo keys must refer to subdirectories of TZPATH, got: {path}" - ) - - -del _TEST_PATH - - -def available_timezones(): - """Returns a set containing all available time zones. - - .. caution:: - - This may attempt to open a large number of files, since the best way to - determine if a given file on the time zone search path is to open it - and check for the "magic string" at the beginning. - """ - from importlib import resources - - valid_zones = set() - - # Start with loading from the tzdata package if it exists: this has a - # pre-assembled list of zones that only requires opening one file. - try: - zones_file = resources.files("tzdata").joinpath("zones") - with zones_file.open("r", encoding="utf-8") as f: - for zone in f: - zone = zone.strip() - if zone: - valid_zones.add(zone) - except (ImportError, FileNotFoundError): - pass - - def valid_key(fpath): - try: - with open(fpath, "rb") as f: - return f.read(4) == b"TZif" - except Exception: # pragma: nocover - return False - - for tz_root in TZPATH: - if not os.path.exists(tz_root): - continue - - for root, dirnames, files in os.walk(tz_root): - if root == tz_root: - # right/ and posix/ are special directories and shouldn't be - # included in the output of available zones - if "right" in dirnames: - dirnames.remove("right") - if "posix" in dirnames: - dirnames.remove("posix") - - for file in files: - fpath = os.path.join(root, file) - - key = os.path.relpath(fpath, start=tz_root) - if os.sep != "/": # pragma: nocover - key = key.replace(os.sep, "/") - - if not key or key in valid_zones: - continue - - if valid_key(fpath): - valid_zones.add(key) - - if "posixrules" in valid_zones: - # posixrules is a special symlink-only time zone where it exists, it - # should not be included in the output - valid_zones.remove("posixrules") - - return valid_zones - - -class InvalidTZPathWarning(RuntimeWarning): - """Warning raised if an invalid path is specified in PYTHONTZPATH.""" - - -TZPATH = () -_reset_tzpath(stacklevel=5) diff --git a/Python314_4_x86_Template/Lib/zoneinfo/_zoneinfo.py b/Python314_4_x86_Template/Lib/zoneinfo/_zoneinfo.py deleted file mode 100644 index 7063eb6a9..000000000 --- a/Python314_4_x86_Template/Lib/zoneinfo/_zoneinfo.py +++ /dev/null @@ -1,776 +0,0 @@ -import bisect -import calendar -import collections -import functools -import re -import weakref -from datetime import datetime, timedelta, tzinfo - -from . import _common, _tzpath - -EPOCH = datetime(1970, 1, 1) -EPOCHORDINAL = datetime(1970, 1, 1).toordinal() - -# It is relatively expensive to construct new timedelta objects, and in most -# cases we're looking at the same deltas, like integer numbers of hours, etc. -# To improve speed and memory use, we'll keep a dictionary with references -# to the ones we've already used so far. -# -# Loading every time zone in the 2020a version of the time zone database -# requires 447 timedeltas, which requires approximately the amount of space -# that ZoneInfo("America/New_York") with 236 transitions takes up, so we will -# set the cache size to 512 so that in the common case we always get cache -# hits, but specifically crafted ZoneInfo objects don't leak arbitrary amounts -# of memory. -@functools.lru_cache(maxsize=512) -def _load_timedelta(seconds): - return timedelta(seconds=seconds) - - -class ZoneInfo(tzinfo): - _strong_cache_size = 8 - _strong_cache = collections.OrderedDict() - _weak_cache = weakref.WeakValueDictionary() - __module__ = "zoneinfo" - - def __init_subclass__(cls): - cls._strong_cache = collections.OrderedDict() - cls._weak_cache = weakref.WeakValueDictionary() - - def __new__(cls, key): - instance = cls._weak_cache.get(key, None) - if instance is None: - instance = cls._weak_cache.setdefault(key, cls._new_instance(key)) - instance._from_cache = True - - # Update the "strong" cache - cls._strong_cache[key] = cls._strong_cache.pop(key, instance) - - if len(cls._strong_cache) > cls._strong_cache_size: - try: - cls._strong_cache.popitem(last=False) - except KeyError: - # another thread may have already emptied the cache - pass - - return instance - - @classmethod - def no_cache(cls, key): - obj = cls._new_instance(key) - obj._from_cache = False - - return obj - - @classmethod - def _new_instance(cls, key): - obj = super().__new__(cls) - obj._key = key - obj._file_path = obj._find_tzfile(key) - - if obj._file_path is not None: - file_obj = open(obj._file_path, "rb") - else: - file_obj = _common.load_tzdata(key) - - with file_obj as f: - obj._load_file(f) - - return obj - - @classmethod - def from_file(cls, file_obj, /, key=None): - obj = super().__new__(cls) - obj._key = key - obj._file_path = None - obj._load_file(file_obj) - obj._file_repr = repr(file_obj) - - # Disable pickling for objects created from files - obj.__reduce__ = obj._file_reduce - - return obj - - @classmethod - def clear_cache(cls, *, only_keys=None): - if only_keys is not None: - for key in only_keys: - cls._weak_cache.pop(key, None) - cls._strong_cache.pop(key, None) - - else: - cls._weak_cache.clear() - cls._strong_cache.clear() - - @property - def key(self): - return self._key - - def utcoffset(self, dt): - return self._find_trans(dt).utcoff - - def dst(self, dt): - return self._find_trans(dt).dstoff - - def tzname(self, dt): - return self._find_trans(dt).tzname - - def fromutc(self, dt): - """Convert from datetime in UTC to datetime in local time""" - - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - timestamp = self._get_local_timestamp(dt) - num_trans = len(self._trans_utc) - - if num_trans >= 1 and timestamp < self._trans_utc[0]: - tti = self._tti_before - fold = 0 - elif ( - num_trans == 0 or timestamp > self._trans_utc[-1] - ) and not isinstance(self._tz_after, _ttinfo): - tti, fold = self._tz_after.get_trans_info_fromutc( - timestamp, dt.year - ) - elif num_trans == 0: - tti = self._tz_after - fold = 0 - else: - idx = bisect.bisect_right(self._trans_utc, timestamp) - - if num_trans > 1 and timestamp >= self._trans_utc[1]: - tti_prev, tti = self._ttinfos[idx - 2 : idx] - elif timestamp > self._trans_utc[-1]: - tti_prev = self._ttinfos[-1] - tti = self._tz_after - else: - tti_prev = self._tti_before - tti = self._ttinfos[0] - - # Detect fold - shift = tti_prev.utcoff - tti.utcoff - fold = shift.total_seconds() > timestamp - self._trans_utc[idx - 1] - dt += tti.utcoff - if fold: - return dt.replace(fold=1) - else: - return dt - - def _find_trans(self, dt): - if dt is None: - if self._fixed_offset: - return self._tz_after - else: - return _NO_TTINFO - - ts = self._get_local_timestamp(dt) - - lt = self._trans_local[dt.fold] - - num_trans = len(lt) - - if num_trans and ts < lt[0]: - return self._tti_before - elif not num_trans or ts > lt[-1]: - if isinstance(self._tz_after, _TZStr): - return self._tz_after.get_trans_info(ts, dt.year, dt.fold) - else: - return self._tz_after - else: - # idx is the transition that occurs after this timestamp, so we - # subtract off 1 to get the current ttinfo - idx = bisect.bisect_right(lt, ts) - 1 - assert idx >= 0 - return self._ttinfos[idx] - - def _get_local_timestamp(self, dt): - return ( - (dt.toordinal() - EPOCHORDINAL) * 86400 - + dt.hour * 3600 - + dt.minute * 60 - + dt.second - ) - - def __str__(self): - if self._key is not None: - return f"{self._key}" - else: - return repr(self) - - def __repr__(self): - if self._key is not None: - return f"{self.__class__.__name__}(key={self._key!r})" - else: - return f"{self.__class__.__name__}.from_file({self._file_repr})" - - def __reduce__(self): - return (self.__class__._unpickle, (self._key, self._from_cache)) - - def _file_reduce(self): - import pickle - - raise pickle.PicklingError( - "Cannot pickle a ZoneInfo file created from a file stream." - ) - - @classmethod - def _unpickle(cls, key, from_cache, /): - if from_cache: - return cls(key) - else: - return cls.no_cache(key) - - def _find_tzfile(self, key): - return _tzpath.find_tzfile(key) - - def _load_file(self, fobj): - # Retrieve all the data as it exists in the zoneinfo file - trans_idx, trans_utc, utcoff, isdst, abbr, tz_str = _common.load_data( - fobj - ) - - # Infer the DST offsets (needed for .dst()) from the data - dstoff = self._utcoff_to_dstoff(trans_idx, utcoff, isdst) - - # Convert all the transition times (UTC) into "seconds since 1970-01-01 local time" - trans_local = self._ts_to_local(trans_idx, trans_utc, utcoff) - - # Construct `_ttinfo` objects for each transition in the file - _ttinfo_list = [ - _ttinfo( - _load_timedelta(utcoffset), _load_timedelta(dstoffset), tzname - ) - for utcoffset, dstoffset, tzname in zip(utcoff, dstoff, abbr) - ] - - self._trans_utc = trans_utc - self._trans_local = trans_local - self._ttinfos = [_ttinfo_list[idx] for idx in trans_idx] - - # Find the first non-DST transition - for i in range(len(isdst)): - if not isdst[i]: - self._tti_before = _ttinfo_list[i] - break - else: - if self._ttinfos: - self._tti_before = self._ttinfos[0] - else: - self._tti_before = None - - # Set the "fallback" time zone - if tz_str is not None and tz_str != b"": - self._tz_after = _parse_tz_str(tz_str.decode()) - else: - if not self._ttinfos and not _ttinfo_list: - raise ValueError("No time zone information found.") - - if self._ttinfos: - self._tz_after = self._ttinfos[-1] - else: - self._tz_after = _ttinfo_list[-1] - - # Determine if this is a "fixed offset" zone, meaning that the output - # of the utcoffset, dst and tzname functions does not depend on the - # specific datetime passed. - # - # We make three simplifying assumptions here: - # - # 1. If _tz_after is not a _ttinfo, it has transitions that might - # actually occur (it is possible to construct TZ strings that - # specify STD and DST but no transitions ever occur, such as - # AAA0BBB,0/0,J365/25). - # 2. If _ttinfo_list contains more than one _ttinfo object, the objects - # represent different offsets. - # 3. _ttinfo_list contains no unused _ttinfos (in which case an - # otherwise fixed-offset zone with extra _ttinfos defined may - # appear to *not* be a fixed offset zone). - # - # Violations to these assumptions would be fairly exotic, and exotic - # zones should almost certainly not be used with datetime.time (the - # only thing that would be affected by this). - if len(_ttinfo_list) > 1 or not isinstance(self._tz_after, _ttinfo): - self._fixed_offset = False - elif not _ttinfo_list: - self._fixed_offset = True - else: - self._fixed_offset = _ttinfo_list[0] == self._tz_after - - @staticmethod - def _utcoff_to_dstoff(trans_idx, utcoffsets, isdsts): - # Now we must transform our ttis and abbrs into `_ttinfo` objects, - # but there is an issue: .dst() must return a timedelta with the - # difference between utcoffset() and the "standard" offset, but - # the "base offset" and "DST offset" are not encoded in the file; - # we can infer what they are from the isdst flag, but it is not - # sufficient to just look at the last standard offset, because - # occasionally countries will shift both DST offset and base offset. - - typecnt = len(isdsts) - dstoffs = [0] * typecnt # Provisionally assign all to 0. - dst_cnt = sum(isdsts) - dst_found = 0 - - for i in range(1, len(trans_idx)): - if dst_cnt == dst_found: - break - - idx = trans_idx[i] - - dst = isdsts[idx] - - # We're only going to look at daylight saving time - if not dst: - continue - - # Skip any offsets that have already been assigned - if dstoffs[idx] != 0: - continue - - dstoff = 0 - utcoff = utcoffsets[idx] - - comp_idx = trans_idx[i - 1] - - if not isdsts[comp_idx]: - dstoff = utcoff - utcoffsets[comp_idx] - - if not dstoff and idx < (typecnt - 1) and i + 1 < len(trans_idx): - comp_idx = trans_idx[i + 1] - - # If the following transition is also DST and we couldn't - # find the DST offset by this point, we're going to have to - # skip it and hope this transition gets assigned later - if isdsts[comp_idx]: - continue - - dstoff = utcoff - utcoffsets[comp_idx] - - if dstoff: - dst_found += 1 - dstoffs[idx] = dstoff - else: - # If we didn't find a valid value for a given index, we'll end up - # with dstoff = 0 for something where `isdst=1`. This is obviously - # wrong - one hour will be a much better guess than 0 - for idx in range(typecnt): - if not dstoffs[idx] and isdsts[idx]: - dstoffs[idx] = 3600 - - return dstoffs - - @staticmethod - def _ts_to_local(trans_idx, trans_list_utc, utcoffsets): - """Generate number of seconds since 1970 *in the local time*. - - This is necessary to easily find the transition times in local time""" - if not trans_list_utc: - return [[], []] - - # Start with the timestamps and modify in-place - trans_list_wall = [list(trans_list_utc), list(trans_list_utc)] - - if len(utcoffsets) > 1: - offset_0 = utcoffsets[0] - offset_1 = utcoffsets[trans_idx[0]] - if offset_1 > offset_0: - offset_1, offset_0 = offset_0, offset_1 - else: - offset_0 = offset_1 = utcoffsets[0] - - trans_list_wall[0][0] += offset_0 - trans_list_wall[1][0] += offset_1 - - for i in range(1, len(trans_idx)): - offset_0 = utcoffsets[trans_idx[i - 1]] - offset_1 = utcoffsets[trans_idx[i]] - - if offset_1 > offset_0: - offset_1, offset_0 = offset_0, offset_1 - - trans_list_wall[0][i] += offset_0 - trans_list_wall[1][i] += offset_1 - - return trans_list_wall - - -class _ttinfo: - __slots__ = ["utcoff", "dstoff", "tzname"] - - def __init__(self, utcoff, dstoff, tzname): - self.utcoff = utcoff - self.dstoff = dstoff - self.tzname = tzname - - def __eq__(self, other): - return ( - self.utcoff == other.utcoff - and self.dstoff == other.dstoff - and self.tzname == other.tzname - ) - - def __repr__(self): # pragma: nocover - return ( - f"{self.__class__.__name__}" - + f"({self.utcoff}, {self.dstoff}, {self.tzname})" - ) - - -_NO_TTINFO = _ttinfo(None, None, None) - - -class _TZStr: - __slots__ = ( - "std", - "dst", - "start", - "end", - "get_trans_info", - "get_trans_info_fromutc", - "dst_diff", - ) - - def __init__( - self, std_abbr, std_offset, dst_abbr, dst_offset, start=None, end=None - ): - self.dst_diff = dst_offset - std_offset - std_offset = _load_timedelta(std_offset) - self.std = _ttinfo( - utcoff=std_offset, dstoff=_load_timedelta(0), tzname=std_abbr - ) - - self.start = start - self.end = end - - dst_offset = _load_timedelta(dst_offset) - delta = _load_timedelta(self.dst_diff) - self.dst = _ttinfo(utcoff=dst_offset, dstoff=delta, tzname=dst_abbr) - - # These are assertions because the constructor should only be called - # by functions that would fail before passing start or end - assert start is not None, "No transition start specified" - assert end is not None, "No transition end specified" - - self.get_trans_info = self._get_trans_info - self.get_trans_info_fromutc = self._get_trans_info_fromutc - - def transitions(self, year): - start = self.start.year_to_epoch(year) - end = self.end.year_to_epoch(year) - return start, end - - def _get_trans_info(self, ts, year, fold): - """Get the information about the current transition - tti""" - start, end = self.transitions(year) - - # With fold = 0, the period (denominated in local time) with the - # smaller offset starts at the end of the gap and ends at the end of - # the fold; with fold = 1, it runs from the start of the gap to the - # beginning of the fold. - # - # So in order to determine the DST boundaries we need to know both - # the fold and whether DST is positive or negative (rare), and it - # turns out that this boils down to fold XOR is_positive. - if fold == (self.dst_diff >= 0): - end -= self.dst_diff - else: - start += self.dst_diff - - if start < end: - isdst = start <= ts < end - else: - isdst = not (end <= ts < start) - - return self.dst if isdst else self.std - - def _get_trans_info_fromutc(self, ts, year): - start, end = self.transitions(year) - start -= self.std.utcoff.total_seconds() - end -= self.dst.utcoff.total_seconds() - - if start < end: - isdst = start <= ts < end - else: - isdst = not (end <= ts < start) - - # For positive DST, the ambiguous period is one dst_diff after the end - # of DST; for negative DST, the ambiguous period is one dst_diff before - # the start of DST. - if self.dst_diff > 0: - ambig_start = end - ambig_end = end + self.dst_diff - else: - ambig_start = start - ambig_end = start - self.dst_diff - - fold = ambig_start <= ts < ambig_end - - return (self.dst if isdst else self.std, fold) - - -def _post_epoch_days_before_year(year): - """Get the number of days between 1970-01-01 and YEAR-01-01""" - y = year - 1 - return y * 365 + y // 4 - y // 100 + y // 400 - EPOCHORDINAL - - -class _DayOffset: - __slots__ = ["d", "julian", "hour", "minute", "second"] - - def __init__(self, d, julian, hour=2, minute=0, second=0): - min_day = 0 + julian # convert bool to int - if not min_day <= d <= 365: - raise ValueError(f"d must be in [{min_day}, 365], not: {d}") - - self.d = d - self.julian = julian - self.hour = hour - self.minute = minute - self.second = second - - def year_to_epoch(self, year): - days_before_year = _post_epoch_days_before_year(year) - - d = self.d - if self.julian and d >= 59 and calendar.isleap(year): - d += 1 - - epoch = (days_before_year + d) * 86400 - epoch += self.hour * 3600 + self.minute * 60 + self.second - - return epoch - - -class _CalendarOffset: - __slots__ = ["m", "w", "d", "hour", "minute", "second"] - - _DAYS_BEFORE_MONTH = ( - -1, - 0, - 31, - 59, - 90, - 120, - 151, - 181, - 212, - 243, - 273, - 304, - 334, - ) - - def __init__(self, m, w, d, hour=2, minute=0, second=0): - if not 1 <= m <= 12: - raise ValueError("m must be in [1, 12]") - - if not 1 <= w <= 5: - raise ValueError("w must be in [1, 5]") - - if not 0 <= d <= 6: - raise ValueError("d must be in [0, 6]") - - self.m = m - self.w = w - self.d = d - self.hour = hour - self.minute = minute - self.second = second - - @classmethod - def _ymd2ord(cls, year, month, day): - return ( - _post_epoch_days_before_year(year) - + cls._DAYS_BEFORE_MONTH[month] - + (month > 2 and calendar.isleap(year)) - + day - ) - - # TODO: These are not actually epoch dates as they are expressed in local time - def year_to_epoch(self, year): - """Calculates the datetime of the occurrence from the year""" - # We know year and month, we need to convert w, d into day of month - # - # Week 1 is the first week in which day `d` (where 0 = Sunday) appears. - # Week 5 represents the last occurrence of day `d`, so we need to know - # the range of the month. - first_day, days_in_month = calendar.monthrange(year, self.m) - - # This equation seems magical, so I'll break it down: - # 1. calendar says 0 = Monday, POSIX says 0 = Sunday - # so we need first_day + 1 to get 1 = Monday -> 7 = Sunday, - # which is still equivalent because this math is mod 7 - # 2. Get first day - desired day mod 7: -1 % 7 = 6, so we don't need - # to do anything to adjust negative numbers. - # 3. Add 1 because month days are a 1-based index. - month_day = (self.d - (first_day + 1)) % 7 + 1 - - # Now use a 0-based index version of `w` to calculate the w-th - # occurrence of `d` - month_day += (self.w - 1) * 7 - - # month_day will only be > days_in_month if w was 5, and `w` means - # "last occurrence of `d`", so now we just check if we over-shot the - # end of the month and if so knock off 1 week. - if month_day > days_in_month: - month_day -= 7 - - ordinal = self._ymd2ord(year, self.m, month_day) - epoch = ordinal * 86400 - epoch += self.hour * 3600 + self.minute * 60 + self.second - return epoch - - -def _parse_tz_str(tz_str): - # The tz string has the format: - # - # std[offset[dst[offset],start[/time],end[/time]]] - # - # std and dst must be 3 or more characters long and must not contain - # a leading colon, embedded digits, commas, nor a plus or minus signs; - # The spaces between "std" and "offset" are only for display and are - # not actually present in the string. - # - # The format of the offset is ``[+|-]hh[:mm[:ss]]`` - - offset_str, *start_end_str = tz_str.split(",", 1) - - parser_re = re.compile( - r""" - (?P<std>[^<0-9:.+-]+|<[a-zA-Z0-9+-]+>) - (?: - (?P<stdoff>[+-]?\d{1,3}(?::\d{2}(?::\d{2})?)?) - (?: - (?P<dst>[^0-9:.+-]+|<[a-zA-Z0-9+-]+>) - (?P<dstoff>[+-]?\d{1,3}(?::\d{2}(?::\d{2})?)?)? - )? # dst - )? # stdoff - """, - re.ASCII|re.VERBOSE - ) - - m = parser_re.fullmatch(offset_str) - - if m is None: - raise ValueError(f"{tz_str} is not a valid TZ string") - - std_abbr = m.group("std") - dst_abbr = m.group("dst") - dst_offset = None - - std_abbr = std_abbr.strip("<>") - - if dst_abbr: - dst_abbr = dst_abbr.strip("<>") - - if std_offset := m.group("stdoff"): - try: - std_offset = _parse_tz_delta(std_offset) - except ValueError as e: - raise ValueError(f"Invalid STD offset in {tz_str}") from e - else: - std_offset = 0 - - if dst_abbr is not None: - if dst_offset := m.group("dstoff"): - try: - dst_offset = _parse_tz_delta(dst_offset) - except ValueError as e: - raise ValueError(f"Invalid DST offset in {tz_str}") from e - else: - dst_offset = std_offset + 3600 - - if not start_end_str: - raise ValueError(f"Missing transition rules: {tz_str}") - - start_end_strs = start_end_str[0].split(",", 1) - try: - start, end = (_parse_dst_start_end(x) for x in start_end_strs) - except ValueError as e: - raise ValueError(f"Invalid TZ string: {tz_str}") from e - - return _TZStr(std_abbr, std_offset, dst_abbr, dst_offset, start, end) - elif start_end_str: - raise ValueError(f"Transition rule present without DST: {tz_str}") - else: - # This is a static ttinfo, don't return _TZStr - return _ttinfo( - _load_timedelta(std_offset), _load_timedelta(0), std_abbr - ) - - -def _parse_dst_start_end(dststr): - date, *time = dststr.split("/", 1) - type = date[:1] - if type == "M": - n_is_julian = False - m = re.fullmatch(r"M(\d{1,2})\.(\d).(\d)", date, re.ASCII) - if m is None: - raise ValueError(f"Invalid dst start/end date: {dststr}") - date_offset = tuple(map(int, m.groups())) - offset = _CalendarOffset(*date_offset) - else: - if type == "J": - n_is_julian = True - date = date[1:] - else: - n_is_julian = False - - doy = int(date) - offset = _DayOffset(doy, n_is_julian) - - if time: - offset.hour, offset.minute, offset.second = _parse_transition_time(time[0]) - - return offset - - -def _parse_transition_time(time_str): - match = re.fullmatch( - r"(?P<sign>[+-])?(?P<h>\d{1,3})(:(?P<m>\d{2})(:(?P<s>\d{2}))?)?", - time_str, - re.ASCII - ) - if match is None: - raise ValueError(f"Invalid time: {time_str}") - - h, m, s = (int(v or 0) for v in match.group("h", "m", "s")) - - if h > 167: - raise ValueError( - f"Hour must be in [0, 167]: {time_str}" - ) - - if match.group("sign") == "-": - h, m, s = -h, -m, -s - - return h, m, s - - -def _parse_tz_delta(tz_delta): - match = re.fullmatch( - r"(?P<sign>[+-])?(?P<h>\d{1,3})(:(?P<m>\d{2})(:(?P<s>\d{2}))?)?", - tz_delta, - re.ASCII - ) - # Anything passed to this function should already have hit an equivalent - # regular expression to find the section to parse. - assert match is not None, tz_delta - - h, m, s = (int(v or 0) for v in match.group("h", "m", "s")) - - total = h * 3600 + m * 60 + s - - if h > 24: - raise ValueError( - f"Offset hours must be in [0, 24]: {tz_delta}" - ) - - # Yes, +5 maps to an offset of -5h - if match.group("sign") != "-": - total = -total - - return total diff --git a/Python314_4_x86_Template/NEWS.txt b/Python314_4_x86_Template/NEWS.txt deleted file mode 100644 index 6b05d9f3c..000000000 --- a/Python314_4_x86_Template/NEWS.txt +++ /dev/null @@ -1,55267 +0,0 @@ -+++++++++++ -Python News -+++++++++++ - -What's New in Python 3.14.4 final? -================================== - -*Release date: 2026-04-07* - -Security --------- - -- gh-145986: :mod:`xml.parsers.expat`: Fixed a crash caused by unbounded C - recursion when converting deeply nested XML content models with - :meth:`~xml.parsers.expat.xmlparser.ElementDeclHandler`. This addresses - :cve:`2026-4224`. - -- gh-145599: Reject control characters in :class:`http.cookies.Morsel` - :meth:`~http.cookies.Morsel.update` and - :meth:`~http.cookies.BaseCookie.js_output`. This addresses - :cve:`2026-3644`. - -- gh-145506: Fixes :cve:`2026-2297` by ensuring that - ``SourcelessFileLoader`` uses :func:`io.open_code` when opening ``.pyc`` - files. - -- gh-144370: Disallow usage of control characters in status in - :mod:`wsgiref.handlers` to prevent HTTP header injections. Patch by - Benedikt Johannes. - -- gh-143930: Reject leading dashes in URLs passed to - :func:`webbrowser.open`. - -Core and Builtins ------------------ - -- gh-148157: Fix an unlikely crash when parsing an invalid type comments for - function parameters. Found by OSS Fuzz in :oss-fuzz:`492782951`. - -- gh-148144: Initialize ``_PyInterpreterFrame.visited`` when copying - interpreter frames so incremental GC does not read an uninitialized byte - from generator and frame-object copies. - -- gh-146615: Fix a crash in :meth:`~object.__get__` for - :c:expr:`METH_METHOD` descriptors when an invalid (non-type) object is - passed as the second argument. Patch by Steven Sun. - -- gh-146308: Fixed several error handling issues in the - :mod:`!_remote_debugging` module, including safer validation of remote - ``int`` objects, clearer asyncio task chain failures, and cache cleanup - fixes that avoid leaking or double-freeing metadata on allocation failure. - Patch by Pablo Galindo. - -- gh-146128: Fix a bug which could cause constant values to be partially - corrupted in AArch64 JIT code. This issue is theoretical, and hasn't - actually been observed in unmodified Python interpreters. - -- gh-146250: Fixed a memory leak in :exc:`SyntaxError` when re-initializing - it. - -- gh-146245: Fixed reference leaks in :mod:`socket` when audit hooks raise - exceptions in :func:`socket.getaddrinfo` and :meth:`!socket.sendto`. - -- gh-146196: Fix potential Undefined Behavior in - :c:func:`PyUnicodeWriter_WriteASCII` by adding a zero-length check. Patch - by Shamil Abdulaev. - -- gh-146227: Fix wrong type in ``_Py_atomic_load_uint16`` in the C11 atomics - backend (``pyatomic_std.h``), which used a 32-bit atomic load instead of - 16-bit. Found by Mohammed Zuhaib. - -- gh-146056: Fix :func:`repr` for lists and tuples containing ``NULL``\ s. - -- gh-146092: Handle properly memory allocation failures on str and float - opcodes. Patch by Victor Stinner. - -- gh-146041: Fix free-threading scaling bottleneck in :func:`sys.intern` and - :c:func:`PyObject_SetAttr` by avoiding the interpreter-wide lock when the - string is already interned and immortalized. - -- gh-145990: ``python --help-env`` sections are now sorted by environment - variable name. - -- gh-145990: ``python --help-xoptions`` is now sorted by ``-X`` option name. - -- gh-145376: Fix GC tracking in ``structseq.__replace__()``. - -- gh-145792: Fix out-of-bounds access when invoking faulthandler on a - CPython build compiled without support for VLAs. - -- gh-142183: Avoid a pathological case where repeated calls at a specific - stack depth could be significantly slower. - -- gh-145779: Improve scaling of :func:`classmethod` and :func:`staticmethod` - calls in the free-threaded build by avoiding the descriptor ``__get__`` - call. - -- gh-145783: Fix an unlikely crash in the parser when certain errors were - erroneously not propagated. Found by OSS Fuzz in :oss-fuzz:`491369109`. - -- gh-145685: Improve scaling of type attribute lookups in the - :term:`free-threaded build` by avoiding contention on the internal type - lock. - -- gh-145701: Fix :exc:`SystemError` when ``__classdict__`` or - ``__conditional_annotations__`` is in a class-scope inlined comprehension. - Found by OSS Fuzz in :oss-fuzz:`491105000`. - -- gh-145713: Make :meth:`bytearray.resize` thread-safe in the free-threaded - build by using a critical section and calling the lock-held variant of the - resize function. - -- gh-145615: Fixed a memory leak in the :term:`free-threaded build` where - mimalloc pages could become permanently unreclaimable until the owning - thread exited. - -- gh-145566: In the free threading build, skip the stop-the-world pause when - reassigning ``__class__`` on a newly created object. - -- gh-145335: Fix a crash in :func:`os.pathconf` when called with ``-1`` as - the path argument. - -- gh-145036: In free-threaded build, fix race condition when calling - :meth:`!__sizeof__` on a :class:`list` - -- gh-145376: Fix reference leaks in various unusual error scenarios. - -- gh-145234: Fixed a ``SystemError`` in the parser when an encoding cookie - (for example, UTF-7) decodes to carriage returns (``\r``). Newlines are - now normalized after decoding in the string tokenizer. - - Patch by Pablo Galindo. - -- gh-130555: Fix use-after-free in :meth:`dict.clear` when the dictionary - values are embedded in an object and a destructor causes re-entrant - mutation of the dictionary. - -- gh-145187: Fix compiler assertion fail when a type parameter bound - contains an invalid expression in a conditional block. - -- gh-145142: Fix a crash in the free-threaded build when the dictionary - argument to :meth:`str.maketrans` is concurrently modified. - -- gh-144872: Fix heap buffer overflow in the parser found by OSS-Fuzz. - -- gh-144766: Fix a crash in fork child process when perf support is enabled. - -- gh-144759: Fix undefined behavior in the lexer when ``start`` and - ``multi_line_start`` pointers are ``NULL`` in - ``_PyLexer_remember_fstring_buffers()`` and - ``_PyLexer_restore_fstring_buffers()``. The ``NULL`` pointer arithmetic - (``NULL - valid_pointer``) is now guarded with explicit ``NULL`` checks. - -- gh-144563: Fix interaction of the Tachyon profiler and :mod:`ctypes` and - other modules that load the Python shared library (if present) in an - independent map as this was causing the mechanism that loads the binary - information to be confused. Patch by Pablo Galindo - -- gh-144601: Fix crash when importing a module whose ``PyInit`` function - raises an exception from a subinterpreter. - -- gh-144438: Align the QSBR thread state array to a 64-byte cache line - boundary to avoid false sharing in the :term:`free-threaded build`. - -- gh-144513: Fix potential deadlock when using critical sections during - stop-the-world pauses in the free-threaded build. - -- gh-144446: Fix data races in the free-threaded build when reading frame - object attributes while another thread is executing the frame. - -- gh-143636: Fix a crash when calling :class:`SimpleNamespace.__replace__() - <types.SimpleNamespace>` on non-namespace instances. Patch by Bénédikt - Tran. - -- gh-143650: Fix race condition in :mod:`importlib` where a thread could - receive a stale module reference when another thread's import fails. - -- gh-141732: Ensure the :meth:`~object.__repr__` for :exc:`ExceptionGroup` - and :exc:`BaseExceptionGroup` does not change when the exception sequence - that was original passed in to its constructor is subsequently mutated. - -- gh-140594: Fix an out of bounds read when a single NUL character is read - from the standard input. Patch by Shamil Abdulaev. - -- gh-91636: While performing garbage collection, clear weakrefs to - unreachable objects that are created during running of finalizers. If - those weakrefs were are not cleared, they could reveal unreachable - objects. - -- gh-130327: Fix erroneous clearing of an object's :attr:`~object.__dict__` - if overwritten at runtime. - -- gh-80667: Literals using the ``\N{name}`` escape syntax can now construct - CJK ideographs and Hangul syllables using case-insensitive names. - -Library -------- - -- gh-144503: Fix a regression introduced in 3.14.3 and 3.13.12 where the - :mod:`multiprocessing` ``forkserver`` start method would fail with - :exc:`BrokenPipeError` when the parent process had a very large - :data:`sys.argv`. The argv is now passed to the forkserver as separate - command-line arguments rather than being embedded in the ``-c`` command - string, avoiding the operating system's per-argument length limit. - -- gh-146613: :mod:`itertools`: Fix a crash in :func:`itertools.groupby` when - the grouper iterator is concurrently mutated. - -- gh-146080: :mod:`ssl`: fix a crash when an SNI callback tries to use an - SSL object that has already been garbage-collected. Patch by Bénédikt - Tran. - -- gh-146556: Fix :func:`annotationlib.get_annotations` hanging indefinitely - when called with ``eval_str=True`` on a callable that has a circular - ``__wrapped__`` chain (e.g. ``f.__wrapped__ = f``). Cycle detection using - an id-based visited set now stops the traversal and falls back to the - globals found so far, mirroring the approach of :func:`inspect.unwrap`. - -- gh-146090: :mod:`sqlite3`: fix a crash when - :meth:`sqlite3.Connection.create_collation` fails with `SQLITE_BUSY - <https://sqlite.org/rescode.html#busy>`__. Patch by Bénédikt Tran. - -- gh-146090: :mod:`sqlite3`: properly raise :exc:`MemoryError` instead of - :exc:`SystemError` when a context callback fails to be allocated. Patch by - Bénédikt Tran. - -- gh-145633: Fix ``struct.pack('f', float)``: use :c:func:`PyFloat_Pack4` to - raise :exc:`OverflowError`. Patch by Sergey B Kirpichev and Victor - Stinner. - -- gh-146310: The :mod:`ensurepip` module no longer looks for ``pip-*.whl`` - wheel packages in the current directory. - -- gh-146083: Update bundled `libexpat <https://libexpat.github.io/>`_ to - version 2.7.5. - -- gh-146076: :mod:`zoneinfo`: fix crashes when deleting ``_weak_cache`` from - a :class:`zoneinfo.ZoneInfo` subclass. - -- gh-146054: Limit the size of :func:`encodings.search_function` cache. - Found by OSS Fuzz in :oss-fuzz:`493449985`. - -- gh-146004: All :option:`-X` options from the Python command line are now - propagated to child processes spawned by :mod:`multiprocessing`, not just - a hard-coded subset. This makes the behavior consistent between default - "spawn" and "forkserver" start methods and the old "fork" start method. - The options that were previously not propagated are: - ``context_aware_warnings``, ``cpu_count``, ``disable-remote-debug``, - ``int_max_str_digits``, ``lazy_imports``, ``no_debug_ranges``, - ``pathconfig_warnings``, ``perf``, ``perf_jit``, ``presite``, - ``pycache_prefix``, ``thread_inherit_context``, and - ``warn_default_encoding``. - -- gh-145883: :mod:`zoneinfo`: Fix heap buffer overflow reads from malformed - TZif data. Found by OSS Fuzz, issues :oss-fuzz:`492245058` and - :oss-fuzz:`492230068`. - -- gh-145754: Request signature during mock autospec with ``FORWARDREF`` - annotation format. This prevents runtime errors when an annotation uses a - name that is not defined at runtime. - -- gh-145750: Avoid undefined behaviour from signed integer overflow when - parsing format strings in the :mod:`struct` module. Found by OSS Fuzz in - :oss-fuzz:`488466741`. - -- gh-145492: Fix infinite recursion in :class:`collections.defaultdict` - ``__repr__`` when a ``defaultdict`` contains itself. Based on analysis by - KowalskiThomas in :gh:`145492`. - -- gh-145623: Fix crash in :mod:`struct` when calling :func:`repr` or - ``__sizeof__()`` on an uninitialized :class:`struct.Struct` object created - via ``Struct.__new__()`` without calling ``__init__()``. - -- gh-145616: Detect Android sysconfig ABI correctly on 32-bit ARM Android on - 64-bit ARM kernel - -- gh-145551: Fix InvalidStateError when cancelling process created by - :func:`asyncio.create_subprocess_exec` or - :func:`asyncio.create_subprocess_shell`. Patch by Daan De Meyer. - -- gh-145446: Now :mod:`functools` is safer in free-threaded build when using - keywords in :func:`functools.partial` - -- gh-145417: :mod:`venv`: Prevent incorrect preservation of SELinux context - when copying the ``Activate.ps1`` script. The script inherited the SELinux - security context of the system template directory, rather than the - destination project directory. - -- gh-145376: Fix double free and null pointer dereference in unusual error - scenarios in :mod:`hashlib` and :mod:`hmac` modules. - -- gh-145301: :mod:`hmac`: fix a crash when the initialization of the - underlying C extension module fails. - -- gh-145301: :mod:`hashlib`: fix a crash when the initialization of the - underlying C extension module fails. - -- gh-145264: Base64 decoder (see :func:`binascii.a2b_base64`, - :func:`base64.b64decode`, etc) no longer ignores excess data after the - first padded quad in non-strict (default) mode. Instead, in conformance - with :rfc:`4648`, section 3.3, it now ignores the pad character, "=", if - it is present before the end of the encoded data. - -- gh-145158: Avoid undefined behaviour from signed integer overflow when - parsing format strings in the :mod:`struct` module. - -- gh-144984: Fix crash in - :meth:`xml.parsers.expat.xmlparser.ExternalEntityParserCreate` when an - allocation fails. The error paths could dereference NULL ``handlers`` and - double-decrement the parent parser's reference count. - -- gh-88091: Fix :func:`unicodedata.decomposition` for Hangul characters. - -- gh-144986: Fix a memory leak in :func:`atexit.register`. Patch by Shamil - Abdulaev. - -- gh-144777: Fix data races in :class:`io.IncrementalNewlineDecoder` in the - :term:`free-threaded build`. - -- gh-144809: Make :class:`collections.deque` copy atomic in the - :term:`free-threaded build`. - -- gh-144835: Added missing explanations for some parameters in - :func:`glob.glob` and :func:`glob.iglob`. - -- gh-144833: Fixed a use-after-free in :mod:`ssl` when ``SSL_new()`` returns - NULL in ``newPySSLSocket()``. The error was reported via a dangling - pointer after the object had already been freed. - -- gh-144782: Fix :class:`argparse.ArgumentParser` to be :mod:`pickleable - <pickle>`. - -- gh-144259: Fix inconsistent display of long multiline pasted content in - the REPL. - -- gh-144156: Fix the folding of headers by the :mod:`email` library when - :rfc:`2047` encoded words are used. Now whitespace is correctly preserved - and also correctly added between adjacent encoded words. The latter - property was broken by the fix for gh-92081, which mostly fixed previous - failures to preserve whitespace. - -- gh-66305: Fixed a hang on Windows in the :mod:`tempfile` module when - trying to create a temporary file or subdirectory in a non-writable - directory. - -- gh-140814: :func:`multiprocessing.freeze_support` no longer sets the - default start method as a side effect, which previously caused a - subsequent :func:`multiprocessing.set_start_method` call to raise - :exc:`RuntimeError`. - -- gh-144475: Calling :func:`repr` on :func:`functools.partial` is now safer - when the partial object's internal attributes are replaced while the - string representation is being generated. - -- gh-144538: Bump the version of pip bundled in ensurepip to version 26.0.1 - -- gh-144494: Fix performance regression in :func:`asyncio.all_tasks` on - :term:`free-threaded builds <free-threaded build>`. Patch by Kumar Aditya. - -- gh-144316: Fix crash in ``_remote_debugging`` that caused - ``test_external_inspection`` to intermittently fail. Patch by Taegyun Kim. - -- gh-144363: Update bundled `libexpat <https://libexpat.github.io/>`_ to - 2.7.4 - -- gh-143637: Fixed a crash in socket.sendmsg() that could occur if ancillary - data is mutated re-entrantly during argument parsing. - -- gh-143543: Fix a crash in itertools.groupby that could occur when a - user-defined :meth:`~object.__eq__` method re-enters the iterator during - key comparison. - -- gh-140652: Fix a crash in :func:`!_interpchannels.list_all` after closing - a channel. - -- gh-143698: Allow *scheduler* and *setpgroup* arguments to be explicitly - :const:`None` when calling :func:`os.posix_spawn` or - :func:`os.posix_spawnp`. Patch by Bénédikt Tran. - -- gh-143698: Raise :exc:`TypeError` instead of :exc:`SystemError` when the - *scheduler* in :func:`os.posix_spawn` or :func:`os.posix_spawnp` is not a - tuple. Patch by Bénédikt Tran. - -- gh-142516: :mod:`ssl`: fix reference leaks in :class:`ssl.SSLContext` - objects. Patch by Bénédikt Tran. - -- gh-143304: Fix :class:`ctypes.CDLL` to honor the ``handle`` parameter on - POSIX systems. - -- gh-142781: :mod:`zoneinfo`: fix a crash when instantiating - :class:`~zoneinfo.ZoneInfo` objects for which the internal class-level - cache is inconsistent. - -- gh-142763: Fix a race condition between :class:`zoneinfo.ZoneInfo` - creation and :func:`zoneinfo.ZoneInfo.clear_cache` that could raise - :exc:`KeyError`. - -- gh-142787: Fix assertion failure in :mod:`sqlite3` blob subscript when - slicing with indices that result in an empty slice. - -- gh-142352: Fix :meth:`asyncio.StreamWriter.start_tls` to transfer buffered - data from :class:`~asyncio.StreamReader` to the SSL layer, preventing data - loss when upgrading a connection to TLS mid-stream (e.g., when - implementing PROXY protocol support). - -- gh-141707: Don't change :class:`tarfile.TarInfo` type from ``AREGTYPE`` to - ``DIRTYPE`` when parsing GNU long name or link headers. - -- gh-139933: Improve :exc:`AttributeError` suggestions for classes with a - custom :meth:`~object.__dir__` method returning a list of unsortable - values. Patch by Bénédikt Tran. - -- gh-137335: Get rid of any possibility of a name conflict for named pipes - in :mod:`multiprocessing` and :mod:`asyncio` on Windows, no matter how - small. - -- gh-80667: Support lookup for Tangut Ideographs in :mod:`unicodedata`. - -- bpo-40243: Fix :meth:`!unicodedata.ucd_3_2_0.numeric` for non-decimal - values. - -Documentation -------------- - -- gh-126676: Expand :mod:`argparse` documentation for ``type=bool`` with a - demonstration of the surprising behavior and pointers to common - alternatives. - -- gh-145649: Fix text wrapping and formatting of ``-X`` option descriptions - in the :manpage:`python(1)` man page by using proper roff markup. - -- gh-145450: Document missing public :class:`wave.Wave_write` getter - methods. - -- gh-136246: A new "Improve this page" link is available in the left-hand - sidebar of the docs, offering links to create GitHub issues, discussion - forum posts, or pull requests. - -Tests ------ - -- gh-144418: The Android testbed's emulator RAM has been increased from 2 GB - to 4 GB. - -- gh-146202: Fix a race condition in regrtest: make sure that the temporary - directory is created in the worker process. Previously, temp_cwd() could - fail on Windows if the "build" directory was not created. Patch by Victor - Stinner. - -- gh-144739: When Python was compiled with system expat older then 2.7.2 but - tests run with newer expat, still skip - :class:`!test.test_pyexpat.MemoryProtectionTest`. - -Build ------ - -- gh-146541: The Android testbed can now be built for 32-bit ARM and x86 - targets. - -- gh-146498: The iOS XCframework build script now ensures libpython isn't - included in installed app content, and is more robust in identifying - standard library binary content that requires processing. - -- gh-146450: The Android build script was modified to improve parity with - other platform build scripts. - -- gh-146446: The clean target for the Apple/iOS XCframework build script is - now more selective when targeting a single architecture. - -- gh-145801: When Python build is optimized with GCC using PGO, use - ``-fprofile-update=atomic`` option to use atomic operations when updating - profile information. This option reduces the risk of gcov Data Files - (.gcda) corruption which can cause random GCC crashes. Patch by Victor - Stinner. - -Windows -------- - -- gh-145307: Defers loading of the ``psapi.dll`` module until it is used by - :func:`ctypes.util.dllist`. - -- gh-144551: Updated bundled version of OpenSSL to 3.0.19. - -- gh-140131: Fix REPL cursor position on Windows when module completion - suggestion line hits console width. - -macOS ------ - -- gh-144551: Update macOS installer to use OpenSSL 3.0.19. - -- gh-137586: Invoke :program:`osascript` with absolute path in - :mod:`webbrowser` and :mod:`!turtledemo`. - -C API ------ - -- gh-146056: :c:func:`PyUnicodeWriter_WriteRepr` now supports ``NULL`` - argument. - -- gh-145010: Use GCC dialect alternatives for inline assembly in - ``object.h`` so that the Python headers compile correctly with - ``-masm=intel``. - -- gh-144981: Made :c:func:`PyUnstable_Code_SetExtra`, - :c:func:`PyUnstable_Code_GetExtra`, and - :c:func:`PyUnstable_Eval_RequestCodeExtraIndex` thread-safe on the - :term:`free threaded <free threading>` build. - - -What's New in Python 3.14.3 final? -================================== - -*Release date: 2026-02-03* - -Windows -------- - -- gh-128067: Fix a bug in PyREPL on Windows where output without a trailing - newline was overwritten by the next prompt. - -Tools/Demos ------------ - -- gh-142095: Make gdb 'py-bt' command use frame from thread local state when - available. Patch by Sam Gross and Victor Stinner. - -Tests ------ - -- gh-144415: The Android testbed now distinguishes between stdout/stderr - messages which were triggered by a newline, and those triggered by a - manual call to ``flush``. This fixes logging of progress indicators and - similar content. - -- gh-143460: Skip tests relying on infinite recusion if stack size is - unlimited. - -- gh-65784: Add support for parametrized resource ``wantobjects`` in - regrtests, which allows to run Tkinter tests with the specified value of - :data:`!tkinter.wantobjects`, for example ``-u wantobjects=0``. - -- gh-143553: Add support for parametrized resources, such as ``-u - xpickle=2.7``. - -- gh-142836: Accommodated Solaris in - ``test_pdb.test_script_target_anonymous_pipe``. - -- bpo-31391: Forward-port test_xpickle from Python 2 to Python 3 and add the - resource back to test's command line. - -Security --------- - -- gh-144125: :mod:`~email.generator.BytesGenerator` will now refuse to - serialize (write) headers that are unsafely folded or delimited; see - :attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas - Bloemsaat and Petr Viktorin in :gh:`121650`). - -- gh-143935: Fixed a bug in the folding of comments when flattening an email - message using a modern email policy. Comments consisting of a very long - sequence of non-foldable characters could trigger a forced line wrap that - omitted the required leading space on the continuation line, causing the - remainder of the comment to be interpreted as a new header field. This - enabled header injection with carefully crafted inputs. - -- gh-143925: Reject control characters in ``data:`` URL media types. - -- gh-143919: Reject control characters in :class:`http.cookies.Morsel` - fields and values. - -- gh-143916: Reject C0 control characters within wsgiref.headers.Headers - fields, values, and parameters. - -Library -------- - -- gh-144380: Improve performance of :class:`io.BufferedReader` line - iteration by ~49%. - -- gh-144169: Fix three crashes when non-string keyword arguments are - supplied to objects in the :mod:`ast` module. - -- gh-144100: Fixed a crash in ctypes when using a deprecated - ``POINTER(str)`` type in ``argtypes``. Instead of aborting, ctypes now - raises a proper Python exception when the pointer target type is - unresolved. - -- gh-144050: Fix :func:`stat.filemode` in the pure-Python implementation to - avoid misclassifying invalid mode values as block devices. - -- gh-144023: Fixed validation of file descriptor 0 in posix functions when - used with follow_symlinks parameter. - -- gh-143999: Fix an issue where :func:`inspect.getgeneratorstate` and - :func:`inspect.getcoroutinestate` could fail for generators wrapped by - :func:`types.coroutine` in the suspended state. - -- gh-143831: :class:`annotationlib.ForwardRef` objects are now hashable when - created from annotation scopes with closures. Previously, hashing such - objects would throw an exception. Patch by Bartosz Sławecki. - -- gh-143874: Fixed a bug in :mod:`pdb` where expression results were not - sent back to remote client. - -- gh-143880: Fix data race in :func:`functools.partial` in the :term:`free - threading` build. - -- gh-143706: Fix :mod:`multiprocessing` forkserver so that :data:`sys.argv` - is correctly set before ``__main__`` is preloaded. Previously, - :data:`sys.argv` was empty during main module import in forkserver child - processes. This fixes a regression introduced in 3.13.8 and 3.14.1. Root - caused by Aaron Wieczorek, test provided by Thomas Watson, thanks! - -- gh-143638: Forbid reentrant calls of the :class:`pickle.Pickler` and - :class:`pickle.Unpickler` methods for the C implementation. Previously, - this could cause crash or data corruption, now concurrent calls of methods - of the same object raise :exc:`RuntimeError`. - -- gh-78724: Raise :exc:`RuntimeError`'s when user attempts to call methods - on half-initialized :class:`~struct.Struct` objects, For example, created - by ``Struct.__new__(Struct)``. Patch by Sergey B Kirpichev. - -- gh-143196: Fix crash when the internal encoder object returned by - undocumented function :func:`!json.encoder.c_make_encoder` was called with - non-zero second (*_current_indent_level*) argument. - -- gh-143191: :func:`_thread.stack_size` now raises :exc:`ValueError` if the - stack size is too small. Patch by Victor Stinner. - -- gh-143602: Fix a inconsistency issue in :meth:`~io.RawIOBase.write` that - leads to unexpected buffer overwrite by deduplicating the buffer exports. - -- gh-143547: Fix :func:`sys.unraisablehook` when the hook raises an - exception and changes :func:`sys.unraisablehook`: hold a strong reference - to the old hook. Patch by Victor Stinner. - -- gh-143517: :func:`annotationlib.get_annotations` no longer raises a - :exc:`SyntaxError` when evaluating a stringified starred annotation that - starts with one or more whitespace characters followed by a ``*``. Patch - by Bartosz Sławecki. - -- gh-143378: Fix use-after-free crashes when a :class:`~io.BytesIO` object - is concurrently mutated during :meth:`~io.RawIOBase.write` or - :meth:`~io.IOBase.writelines`. - -- gh-143346: Fix incorrect wrapping of the Base64 data in - :class:`!plistlib._PlistWriter` when the indent contains a mix of tabs and - spaces. - -- gh-143310: :mod:`tkinter`: fix a crash when a Python :class:`list` is - mutated during the conversion to a Tcl object (e.g., when setting a Tcl - variable). Patch by Bénédikt Tran. - -- gh-143309: Fix a crash in :func:`os.execve` on non-Windows platforms when - given a custom environment mapping which is then mutated during parsing. - Patch by Bénédikt Tran. - -- gh-143308: :mod:`pickle`: fix use-after-free crashes when a - :class:`~pickle.PickleBuffer` is concurrently mutated by a custom buffer - callback during pickling. Patch by Bénédikt Tran and Aaron Wieczorek. - -- gh-143237: Fix support of named pipes in the rotating :mod:`logging` - handlers. - -- gh-143249: Fix possible buffer leaks in Windows overlapped I/O on error - handling. - -- gh-143241: :mod:`zoneinfo`: fix infinite loop in :meth:`ZoneInfo.from_file - <zoneinfo.ZoneInfo.from_file>` when parsing a malformed TZif file. Patch - by Fatih Celik. - -- gh-142830: :mod:`sqlite3`: fix use-after-free crashes when the - connection's callbacks are mutated during a callback execution. Patch by - Bénédikt Tran. - -- gh-143200: :mod:`xml.etree.ElementTree`: fix use-after-free crashes in - :meth:`~object.__getitem__` and :meth:`~object.__setitem__` methods of - :class:`~xml.etree.ElementTree.Element` when the element is concurrently - mutated. Patch by Bénédikt Tran. - -- gh-142195: Updated timeout evaluation logic in :mod:`subprocess` to be - compatible with deterministic environments like Shadow where time moves - exactly as requested. - -- gh-142164: Fix the ctypes bitfield overflow error message to report the - correct offset and size calculation. - -- gh-143145: Fixed a possible reference leak in ctypes when constructing - results with multiple output parameters on error. - -- gh-122431: Corrected the error message in - :func:`readline.append_history_file` to state that ``nelements`` must be - non-negative instead of positive. - -- gh-143004: Fix a potential use-after-free in - :meth:`collections.Counter.update` when user code mutates the Counter - during an update. - -- gh-143046: The :mod:`asyncio` REPL no longer prints copyright and version - messages in the quiet mode (:option:`-q`). Patch by Bartosz Sławecki. - -- gh-140648: The :mod:`asyncio` REPL now respects the :option:`-I` flag - (isolated mode). Previously, it would load and execute - :envvar:`PYTHONSTARTUP` even if the flag was set. Contributed by Bartosz - Sławecki. - -- gh-142991: Fixed socket operations such as recvfrom() and sendto() for - FreeBSD divert(4) socket. - -- gh-143010: Fixed a bug in :mod:`mailbox` where the precise timing of an - external event could result in the library opening an existing file - instead of a file it expected to create. - -- gh-142881: Fix concurrent and reentrant call of :func:`atexit.unregister`. - -- gh-112127: Fix possible use-after-free in :func:`atexit.unregister` when - the callback is unregistered during comparison. - -- gh-142783: Fix zoneinfo use-after-free with descriptor _weak_cache. a - descriptor as _weak_cache could cause crashes during object creation. The - fix ensures proper reference counting for descriptor-provided objects. - -- gh-142754: Add the *ownerDocument* attribute to :mod:`xml.dom.minidom` - elements and attributes created by directly instantiating the ``Element`` - or ``Attr`` class. Note that this way of creating nodes is not supported; - creator functions like :py:meth:`xml.dom.Document.documentElement` should - be used instead. - -- gh-142784: The :mod:`asyncio` REPL now properly closes the loop upon the - end of interactive session. Previously, it could cause surprising - warnings. Contributed by Bartosz Sławecki. - -- gh-142555: :mod:`array`: fix a crash in ``a[i] = v`` when converting *i* - to an index via :meth:`i.__index__ <object.__index__>` or - :meth:`i.__float__ <object.__float__>` mutates the array. - -- gh-142594: Fix crash in ``TextIOWrapper.close()`` when the underlying - buffer's ``closed`` property calls :meth:`~io.TextIOBase.detach`. - -- gh-142451: :mod:`hmac`: Ensure that the :attr:`HMAC.block_size - <hmac.HMAC.block_size>` attribute is correctly copied by :meth:`HMAC.copy - <hmac.HMAC.copy>`. Patch by Bénédikt Tran. - -- gh-142495: :class:`collections.defaultdict` now prioritizes - :meth:`~object.__setitem__` when inserting default values from - ``default_factory``. This prevents race conditions where a default value - would overwrite a value set before ``default_factory`` returns. - -- gh-142651: :mod:`unittest.mock`: fix a thread safety issue where - :attr:`Mock.call_count <unittest.mock.Mock.call_count>` may return - inaccurate values when the mock is called concurrently from multiple - threads. - -- gh-142595: Added type check during initialization of the :mod:`decimal` - module to prevent a crash in case of broken stdlib. Patch by Sergey B - Kirpichev. - -- gh-142556: Fix crash when a task gets re-registered during finalization in - :mod:`asyncio`. Patch by Kumar Aditya. - -- gh-123241: Avoid reference count operations in garbage collection of - :mod:`ctypes` objects. - -- gh-142517: The non-``compat32`` :mod:`email` policies now correctly handle - refolding encoded words that contain bytes that can not be decoded in - their specified character set. Previously this resulted in an encoding - exception during folding. - -- gh-112527: The help text for required options in :mod:`argparse` no longer - extended with " (default: None)". - -- gh-142346: Fix usage formatting for mutually exclusive groups in - :mod:`argparse` when they are preceded by positional arguments or followed - or intermixed with other optional arguments. - -- gh-142315: Pdb can now run scripts from anonymous pipes used in process - substitution. Patch by Bartosz Sławecki. - -- gh-142332: Fix usage formatting for positional arguments in mutually - exclusive groups in :mod:`argparse`. in :mod:`argparse`. - -- gh-142282: Fix :func:`winreg.QueryValueEx` to not accidentally read - garbage buffer under race condition. - -- gh-75949: Fix :mod:`argparse` to preserve ``|`` separators in mutually - exclusive groups when the usage line wraps due to length. - -- gh-142267: Improve :mod:`argparse` performance by caching the formatter - used for argument validation. - -- gh-68552: ``MisplacedEnvelopeHeaderDefect`` and ``Missing header name`` - defects are now correctly passed to the ``handle_defect`` method of - ``policy`` in :class:`~email.parser.FeedParser`. - -- gh-142006: Fix a bug in the :mod:`email.policy.default` folding algorithm - which incorrectly resulted in a doubled newline when a line ending at - exactly max_line_length was followed by an unfoldable token. - -- gh-105836: Fix :meth:`asyncio.run_coroutine_threadsafe` leaving underlying - cancelled asyncio task running. - -- gh-139971: :mod:`pydoc`: Ensure that the link to the online documentation - of a :term:`stdlib` module is correct. - -- gh-139262: Some keystrokes can be swallowed in the new ``PyREPL`` on - Windows, especially when used together with the ALT key. Fix by Chris - Eibl. - -- gh-138897: Improved :data:`license`/:data:`copyright`/:data:`credits` - display in the :term:`REPL`: now uses a pager. - -- gh-79986: Add parsing for ``References`` and ``In-Reply-To`` headers to - the :mod:`email` library that parses the header content as lists of - message id tokens. This prevents them from being folded incorrectly. - -- gh-136282: Add support for :const:`~configparser.UNNAMED_SECTION` when - creating a section via the mapping protocol access - -- gh-109263: Starting a process from spawn context in :mod:`multiprocessing` - no longer sets the start method globally. - -- gh-133253: Fix thread-safety issues in :mod:`linecache`. - -- gh-132715: Skip writing objects during marshalling once a failure has - occurred. - -IDLE ----- - -- gh-143774: Better explain the operation of Format / Format Paragraph. - -Documentation -------------- - -- gh-140806: Add documentation for :func:`enum.bin`. - -Core and Builtins ------------------ - -- gh-144307: Prevent a reference leak in module teardown at interpreter - finalization. - -- gh-144194: Fix error handling in perf jitdump initialization on memory - allocation failure. - -- gh-144012: Check if the result is ``NULL`` in ``BINARY_OP_EXTENT`` opcode. - -- gh-141805: Fix crash in :class:`set` when objects with the same hash are - concurrently added to the set after removing an element with the same hash - while the set still contains elements with the same hash. - -- gh-143670: Fixes a crash in ``ga_repr_items_list`` function. - -- gh-143377: Fix a crash in :func:`!_interpreters.capture_exception` when - the exception is incorrectly formatted. Patch by Bénédikt Tran. - -- gh-136924: The interactive help mode in the :term:`REPL` no longer - incorrectly syntax highlights text input as Python code. Contributed by - Olga Matoula. - -- gh-143189: Fix crash when inserting a non-:class:`str` key into a split - table dictionary when the key matches an existing key in the split table - but has no corresponding value in the dict. - -- gh-143228: Fix use-after-free in perf trampoline when toggling profiling - while threads are running or during interpreter finalization with daemon - threads active. The fix uses reference counting to ensure trampolines are - not freed while any code object could still reference them. Pach by Pablo - Galindo - -- gh-142664: Fix a use-after-free crash in :meth:`memoryview.__hash__ - <object.__hash__>` when the ``__hash__`` method of the referenced object - mutates that object or the view. Patch by Bénédikt Tran. - -- gh-142557: Fix a use-after-free crash in :ref:`bytearray.__mod__ - <bytes-formatting>` when the :class:`!bytearray` is mutated while - formatting the ``%``-style arguments. Patch by Bénédikt Tran. - -- gh-143195: Fix use-after-free crashes in :meth:`bytearray.hex` and - :meth:`memoryview.hex` when the separator's :meth:`~object.__len__` - mutates the original object. Patch by Bénédikt Tran. - -- gh-142975: Fix crash after unfreezing all objects tracked by the garbage - collector on the :term:`free threaded <free threading>` build. - -- gh-143135: Set :data:`sys.flags.inspect` to ``1`` when - :envvar:`PYTHONINSPECT` is ``0``. Previously, it was set to ``0`` in this - case. - -- gh-143003: Fix an overflow of the shared empty buffer in - :meth:`bytearray.extend` when ``__length_hint__()`` returns 0 for - non-empty iterator. - -- gh-143006: Fix a possible assertion error when comparing negative - non-integer ``float`` and ``int`` with the same number of bits in the - integer part. - -- gh-143057: Avoid locking in :c:func:`PyTraceMalloc_Track` and - :c:func:`PyTraceMalloc_Untrack` when :mod:`tracemalloc` is not enabled. - -- gh-142776: Fix a file descriptor leak in import.c - -- gh-142829: Fix a use-after-free crash in :class:`contextvars.Context` - comparison when a custom ``__eq__`` method modifies the context via - :meth:`~contextvars.ContextVar.set`. - -- gh-142766: Clear the frame of a generator when :meth:`generator.close` is - called. - -- gh-142737: Tracebacks will be displayed in fallback mode even if - :func:`io.open` is lost. Previously, this would crash the interpreter. - Patch by Bartosz Sławecki. - -- gh-142554: Fix a crash in :func:`divmod` when :func:`!_pylong.int_divmod` - does not return a tuple of length two exactly. Patch by Bénédikt Tran. - -- gh-142560: Fix use-after-free in :class:`bytearray` search-like methods - (:meth:`~bytearray.find`, :meth:`~bytearray.count`, - :meth:`~bytearray.index`, :meth:`~bytearray.rindex`, and - :meth:`~bytearray.rfind`) by marking the storage as exported which causes - reallocation attempts to raise :exc:`BufferError`. For - :func:`~operator.contains`, :meth:`~bytearray.split`, and - :meth:`~bytearray.rsplit` the :ref:`buffer protocol <bufferobjects>` is - used for this. - -- gh-142531: Fix a free-threaded GC performance regression. If there are - many untracked tuples, the GC will run too often, resulting in poor - performance. The fix is to include untracked tuples in the "long lived" - object count. The number of frozen objects is also now included since the - free-threaded GC must scan those too. - -- gh-142402: Fix reference counting when adjacent literal parts are merged - while constructing :class:`string.templatelib.Template`, preventing the - displaced string object from leaking. - -- gh-133932: Fix crash in the free threading build when clearing frames that - hold tagged integers. - -- gh-142343: Fix SIGILL crash on m68k due to incorrect assembly constraint. - -- gh-100964: Fix reference cycle in exhausted generator frames. Patch by - Savannah Ostrowski. - -- gh-69605: Fix edge-cases around already imported modules in the - :term:`REPL` auto-completion of imports. - -- gh-138568: Adjusted the built-in :func:`help` function so that empty - inputs are ignored in interactive mode. - -- gh-137007: Fix a bug during JIT compilation failure which caused garbage - collection debug assertions to fail. - -C API ------ - -- gh-142589: Fix :c:func:`PyUnstable_Object_IsUniqueReferencedTemporary()` - handling of tagged ints on the interpreter stack. - -- gh-142571: :c:func:`!PyUnstable_CopyPerfMapFile` now checks that opening - the file succeeded before flushing. - -Build ------ - -- gh-142454: When calculating the digest of the JIT stencils input, sort the - hashed files by filenames before adding their content to the hasher. This - ensures deterministic hash input and hence deterministic hash, independent - on filesystem order. - -- gh-141808: When running ``make clean-retain-profile``, keep the generated - JIT stencils. That way, the stencils are not generated twice when - Profile-guided optimization (PGO) is used. It also allows distributors to - supply their own pre-built JIT stencils. - -- gh-138061: Ensure reproducible builds by making JIT stencil header - generation deterministic. - - -What's New in Python 3.14.2 final? -================================== - -*Release date: 2025-12-05* - -Security --------- - -- gh-142145: Remove quadratic behavior in ``xml.minidom`` node ID cache - clearing. - -- gh-119452: Fix a potential memory denial of service in the - :mod:`http.server` module. When a malicious user is connected to the CGI - server on Windows, it could cause an arbitrary amount of memory to be - allocated. This could have led to symptoms including a :exc:`MemoryError`, - swapping, out of memory (OOM) killed processes or containers, or even - system crashes. - -Library -------- - -- gh-140797: Revert changes to the undocumented :class:`!re.Scanner` class. - Capturing groups are still allowed for backward compatibility, although - using them can lead to incorrect result. They will be forbidden in future - Python versions. - -- gh-142206: The resource tracker in the :mod:`multiprocessing` module now - uses the original communication protocol, as in Python 3.14.0 and below, - by default. This avoids issues with upgrading Python while it is running. - (Note that such 'in-place' upgrades are not tested.) The tracker remains - compatible with subprocesses that use new protocol (that is, subprocesses - using Python 3.13.10, 3.14.1 and 3.15). - -- gh-142214: Fix two regressions in :mod:`dataclasses` in Python 3.14.1 - related to annotations. - - * An exception is no longer raised if ``slots=True`` is used and the - ``__init__`` method does not have an ``__annotate__`` attribute - (likely because ``init=False`` was used). - - * An exception is no longer raised if annotations are requested on the - ``__init__`` method and one of the fields is not present in the class - annotations. This can occur in certain dynamic scenarios. - - Patch by Jelle Zijlstra. - -Core and Builtins ------------------ - -- gh-142218: Fix crash when inserting into a split table dictionary with a - non :class:`str` key that matches an existing key. - -Library -------- - -- gh-116738: Fix :mod:`cmath` data race when initializing trigonometric - tables with subinterpreters. - - -What's New in Python 3.14.1 final? -================================== - -*Release date: 2025-12-02* - -Windows -------- - -- gh-139810: Installing with ``py install 3[.x]-dev`` will now select final - versions as well as prereleases. - -Tools/Demos ------------ - -- gh-141692: Each slice of an iOS XCframework now contains a ``lib`` folder - that contains a symlink to the libpython dylib. This allows binary modules - to be compiled for iOS using dynamic libreary linking, rather than - Framework linking. - -- gh-141442: The iOS testbed now correctly handles test arguments that - contain spaces. - -- gh-140702: The iOS testbed app will now expose the ``GITHUB_ACTIONS`` - environment variable to iOS apps being tested. - -- gh-137484: Have ``Tools/wasm/wasi`` put the build Python into a directory - named after the build triple instead of "build". - -- gh-137248: Add a ``--logdir`` option to ``Tools/wasm/wasi`` for specifying - where to write log files. - -- gh-137243: Have Tools/wasm/wasi detect a WASI SDK install in /opt when it - was directly extracted from a release tarball. - -Tests ------ - -- gh-140482: Preserve and restore the state of ``stty echo`` as part of the - test environment. - -- gh-140082: Update ``python -m test`` to set ``FORCE_COLOR=1`` when being - run with color enabled so that :mod:`unittest` which is run by it with - redirected output will output in color. - -- gh-139208: Fix regrtest ``--fast-ci --verbose``: don't ignore the - ``--verbose`` option anymore. Patch by Victor Stinner. - -- gh-136442: Use exitcode ``1`` instead of ``5`` if - :func:`unittest.TestCase.setUpClass` raises an exception - -Security --------- - -- gh-139700: Check consistency of the zip64 end of central directory record. - Support records with "zip64 extensible data" if there are no bytes - prepended to the ZIP file. - -- gh-139283: :mod:`sqlite3`: correctly handle maximum number of rows to - fetch in :meth:`Cursor.fetchmany <sqlite3.Cursor.fetchmany>` and reject - negative values for :attr:`Cursor.arraysize <sqlite3.Cursor.arraysize>`. - Patch by Bénédikt Tran. - -- gh-137836: Add support of the "plaintext" element, RAWTEXT elements "xmp", - "iframe", "noembed" and "noframes", and optionally RAWTEXT element - "noscript" in :class:`html.parser.HTMLParser`. - -- gh-136063: :mod:`email.message`: ensure linear complexity for legacy HTTP - parameters parsing. Patch by Bénédikt Tran. - -- gh-136065: Fix quadratic complexity in :func:`os.path.expandvars`. - -- gh-119451: Fix a potential memory denial of service in the - :mod:`http.client` module. When connecting to a malicious server, it could - cause an arbitrary amount of memory to be allocated. This could have led - to symptoms including a :exc:`MemoryError`, swapping, out of memory (OOM) - killed processes or containers, or even system crashes. - -- gh-119342: Fix a potential memory denial of service in the :mod:`plistlib` - module. When reading a Plist file received from untrusted source, it could - cause an arbitrary amount of memory to be allocated. This could have led - to symptoms including a :exc:`MemoryError`, swapping, out of memory (OOM) - killed processes or containers, or even system crashes. - -Library -------- - -- gh-74389: When the stdin being used by a :class:`subprocess.Popen` - instance is closed, this is now ignored in - :meth:`subprocess.Popen.communicate` instead of leaving the class in an - inconsistent state. - -- gh-87512: Fix :func:`subprocess.Popen.communicate` timeout handling on - Windows when writing large input. Previously, the timeout was ignored - during stdin writing, causing the method to block indefinitely if the - child process did not consume input quickly. The stdin write is now - performed in a background thread, allowing the timeout to be properly - enforced. - -- gh-141473: When :meth:`subprocess.Popen.communicate` was called with - *input* and a *timeout* and is called for a second time after a - :exc:`~subprocess.TimeoutExpired` exception before the process has died, - it should no longer hang. - -- gh-59000: Fix :mod:`pdb` breakpoint resolution for class methods when the - module defining the class is not imported. - -- gh-141570: Support :term:`file-like object` raising :exc:`OSError` from - :meth:`~io.IOBase.fileno` in color detection - (``_colorize.can_colorize()``). This can occur when ``sys.stdout`` is - redirected. - -- gh-141659: Fix bad file descriptor errors from ``_posixsubprocess`` on - AIX. - -- gh-141600: Fix musl version detection on Void Linux. - -- gh-141497: :mod:`ipaddress`: ensure that the methods - :meth:`IPv4Network.hosts() <ipaddress.IPv4Network.hosts>` and - :meth:`IPv6Network.hosts() <ipaddress.IPv6Network.hosts>` always return an - iterator. - -- gh-140938: The :func:`statistics.stdev` and :func:`statistics.pstdev` - functions now raise a :exc:`ValueError` when the input contains an - infinity or a NaN. - -- gh-124111: Updated Tcl threading configuration in :mod:`_tkinter` to - assume that threads are always available in Tcl 9 and later. - -- gh-137109: The :mod:`os.fork` and related forking APIs will no longer warn - in the common case where Linux or macOS platform APIs return the number of - threads in a process and find the answer to be 1 even when a - :func:`os.register_at_fork` ``after_in_parent=`` callback (re)starts a - thread. - -- gh-141314: Fix assertion failure in :meth:`io.TextIOWrapper.tell` when - reading files with standalone carriage return (``\r``) line endings. - -- gh-141311: Fix assertion failure in :func:`!io.BytesIO.readinto` and - undefined behavior arising when read position is above capcity in - :class:`io.BytesIO`. - -- gh-141141: Fix a thread safety issue with :func:`base64.b85decode`. - Contributed by Benel Tayar. - -- gh-137969: Fix :meth:`annotationlib.ForwardRef.evaluate` returning - :class:`~annotationlib.ForwardRef` objects which don't update with new - globals. - -- gh-140911: :mod:`collections`: Ensure that the methods - ``UserString.rindex()`` and ``UserString.index()`` accept - :class:`collections.UserString` instances as the sub argument. - -- gh-140797: The undocumented :class:`!re.Scanner` class now forbids regular - expressions containing capturing groups in its lexicon patterns. Patterns - using capturing groups could previously lead to crashes with segmentation - fault. Use non-capturing groups (?:...) instead. - -- gh-125115: Refactor the :mod:`pdb` parsing issue so positional arguments - can pass through intuitively. - -- gh-140815: :mod:`faulthandler` now detects if a frame or a code object is - invalid or freed. Patch by Victor Stinner. - -- gh-100218: Correctly set :attr:`~OSError.errno` when - :func:`socket.if_nametoindex` or :func:`socket.if_indextoname` raise an - :exc:`OSError`. Patch by Bénédikt Tran. - -- gh-140875: Fix handling of unclosed character references (named and - numerical) followed by the end of file in :class:`html.parser.HTMLParser` - with ``convert_charrefs=False``. - -- gh-140734: :mod:`multiprocessing`: fix off-by-one error when checking the - length of a temporary socket file path. Patch by Bénédikt Tran. - -- gh-140874: Bump the version of pip bundled in ensurepip to version 25.3 - -- gh-140691: In :mod:`urllib.request`, when opening a FTP URL fails because - a data connection cannot be made, the control connection's socket is now - closed to avoid a :exc:`ResourceWarning`. - -- gh-103847: Fix hang when cancelling process created by - :func:`asyncio.create_subprocess_exec` or - :func:`asyncio.create_subprocess_shell`. Patch by Kumar Aditya. - -- gh-120057: Add :func:`os.reload_environ` to ``os.__all__``. - -- gh-140228: Avoid making unnecessary filesystem calls for frozen modules in - :mod:`linecache` when the global module cache is not present. - -- gh-140590: Fix arguments checking for the - :meth:`!functools.partial.__setstate__` that may lead to internal state - corruption and crash. Patch by Sergey Miryanov. - -- gh-125434: Display thread name in :mod:`faulthandler` on Windows. Patch by - Victor Stinner. - -- gh-140634: Fix a reference counting bug in - :meth:`!os.sched_param.__reduce__`. - -- gh-140633: Ignore :exc:`AttributeError` when setting a module's - ``__file__`` attribute when loading an extension module packaged as Apple - Framework. - -- gh-140593: :mod:`xml.parsers.expat`: Fix a memory leak that could affect - users with :meth:`~xml.parsers.expat.xmlparser.ElementDeclHandler` set to - a custom element declaration handler. Patch by Sebastian Pipping. - -- gh-140607: Inside :meth:`io.RawIOBase.read`, validate that the count of - bytes returned by :meth:`io.RawIOBase.readinto` is valid (inside the - provided buffer). - -- gh-138162: Fix :class:`logging.LoggerAdapter` with ``merge_extra=True`` - and without the *extra* argument. - -- gh-138774: :func:`ast.unparse` now generates full source code when - handling :class:`ast.Interpolation` nodes that do not have a specified - source. - -- gh-140474: Fix memory leak in :class:`array.array` when creating arrays - from an empty :class:`str` and the ``u`` type code. - -- gh-137530: :mod:`dataclasses` Fix annotations for generated ``__init__`` - methods by replacing the annotations that were in-line in the generated - source code with ``__annotate__`` functions attached to the methods. - -- gh-140348: Fix regression in Python 3.14.0 where using the ``|`` operator - on a :class:`typing.Union` object combined with an object that is not a - type would raise an error. - -- gh-140272: Fix memory leak in the :meth:`!clear` method of the - :mod:`dbm.gnu` database. - -- gh-140041: Fix import of :mod:`ctypes` on Android and Cygwin when ABI - flags are present. - -- gh-140120: Fixed a memory leak in :mod:`hmac` when it was using the - hacl-star backend. Discovered by ``@ashm-dev`` using AddressSanitizer. - -- gh-139905: Add suggestion to error message for :class:`typing.Generic` - subclasses when ``cls.__parameters__`` is missing due to a parent class - failing to call :meth:`super().__init_subclass__() - <object.__init_subclass__>` in its ``__init_subclass__``. - -- gh-139894: Fix incorrect sharing of current task with the child process - while forking in :mod:`asyncio`. Patch by Kumar Aditya. - -- gh-139845: Fix to not print KeyboardInterrupt twice in default asyncio - REPL. - -- gh-139783: Fix :func:`inspect.getsourcelines` for the case when a - decorator is followed by a comment or an empty line. - -- gh-139809: Prevent premature colorization of subparser ``prog`` in - :meth:`argparse.ArgumentParser.add_subparsers` to respect color - environment variable changes after parser creation. - -- gh-139736: Fix excessive indentation in the default :mod:`argparse` - :class:`!HelpFormatter`. Patch by Alexander Edland. - -- gh-70765: :mod:`http.server`: fix default handling of HTTP/0.9 requests in - :class:`~http.server.BaseHTTPRequestHandler`. Previously, - :meth:`!BaseHTTPRequestHandler.parse_request` incorrectly waited for - headers in the request although those are not supported in HTTP/0.9. Patch - by Bénédikt Tran. - -- gh-63161: Fix :func:`tokenize.detect_encoding`. Support non-UTF-8 shebang - and comments if non-UTF-8 encoding is specified. Detect decoding error for - non-UTF-8 encoding. Detect null bytes in source code. - -- gh-139391: Fix an issue when, on non-Windows platforms, it was not - possible to gracefully exit a ``python -m asyncio`` process suspended by - Ctrl+Z and later resumed by :manpage:`fg` other than with :manpage:`kill`. - -- gh-101828: Fix ``'shift_jisx0213'``, ``'shift_jis_2004'``, - ``'euc_jisx0213'`` and ``'euc_jis_2004'`` codecs truncating null chars as - they were treated as part of multi-character sequences. - -- gh-139289: Do a real lazy-import on :mod:`rlcompleter` in :mod:`pdb` and - restore the existing completer after importing :mod:`rlcompleter`. - -- gh-139246: fix: paste zero-width in default repl width is wrong. - -- gh-90949: Add - :meth:`~xml.parsers.expat.xmlparser.SetAllocTrackerActivationThreshold` - and - :meth:`~xml.parsers.expat.xmlparser.SetAllocTrackerMaximumAmplification` - to :ref:`xmlparser <xmlparser-objects>` objects to prevent use of - disproportional amounts of dynamic memory from within an Expat parser. - Patch by Bénédikt Tran. - -- gh-139210: Fix use-after-free when reporting unknown event in - :func:`xml.etree.ElementTree.iterparse`. Patch by Ken Jin. - -- gh-138860: Lazy import :mod:`rlcompleter` in :mod:`pdb` to avoid deadlock - in subprocess. - -- gh-112729: Fix crash when calling :func:`concurrent.interpreters.create` - when the process is out of memory. - -- gh-135729: Fix unraisable exception during finalization when using - :mod:`concurrent.interpreters` in the REPL. - -- gh-139076: Fix a bug in the :mod:`pydoc` module that was hiding functions - in a Python module if they were implemented in an extension module and the - module did not have ``__all__``. - -- gh-139065: Fix trailing space before a wrapped long word if the line - length is exactly *width* in :mod:`textwrap`. - -- gh-139001: Fix race condition in :class:`pathlib.Path` on the internal - ``_raw_paths`` field. - -- gh-138813: :class:`!multiprocessing.BaseProcess` defaults ``kwargs`` to - ``None`` instead of a shared dictionary. - -- gh-138993: Dedent :data:`credits` text. - -- gh-138891: Fix ``SyntaxError`` when ``inspect.get_annotations(f, - eval_str=True)`` is called on a function annotated with a :pep:`646` - ``star_expression`` - -- gh-130567: Fix possible crash in :func:`locale.strxfrm` due to a platform - bug on macOS. - -- gh-138859: Fix generic type parameterization raising a :exc:`TypeError` - when omitting a :class:`ParamSpec` that has a default which is not a list - of types. - -- gh-138764: Prevent :func:`annotationlib.call_annotate_function` from - calling ``__annotate__`` functions that don't support - ``VALUE_WITH_FAKE_GLOBALS`` in a fake globals namespace with empty - globals. - - Make ``FORWARDREF`` and ``STRING`` annotations fall back to using - ``VALUE`` annotations in the case that neither their own format, nor - ``VALUE_WITH_FAKE_GLOBALS`` are supported. - -- gh-138775: Use of ``python -m`` with :mod:`base64` has been fixed to - detect input from a terminal so that it properly notices EOF. - -- gh-138779: Support device numbers larger than ``2**63-1`` for the - :attr:`~os.stat_result.st_rdev` field of the :class:`os.stat_result` - structure. - -- gh-137706: Fix the partial evaluation of annotations that use - ``typing.Annotated[T, x]`` where ``T`` is a forward reference. - -- gh-88375: Fix normalization of the ``robots.txt`` rules and URLs in the - :mod:`urllib.robotparser` module. No longer ignore trailing ``?``. - Distinguish raw special characters ``?``, ``=`` and ``&`` from the - percent-encoded ones. - -- gh-111788: Fix parsing errors in the :mod:`urllib.robotparser` module. - Don't fail trying to parse weird paths. Don't fail trying to decode - non-UTF-8 ``robots.txt`` files. - -- gh-98896: Fix a failure in multiprocessing resource_tracker when - SharedMemory names contain colons. Patch by Rani Pinchuk. - -- gh-138425: Fix partial evaluation of :class:`annotationlib.ForwardRef` - objects which rely on names defined as globals. - -- gh-138432: :meth:`zoneinfo.reset_tzpath` will now convert any - :class:`os.PathLike` objects it receives into strings before adding them - to ``TZPATH``. It will raise ``TypeError`` if anything other than a string - is found after this conversion. If given an :class:`os.PathLike` object - that represents a relative path, it will now raise ``ValueError`` instead - of ``TypeError``, and present a more informative error message. - -- gh-138008: Fix segmentation faults in the :mod:`ctypes` module due to - invalid :attr:`~ctypes._CFuncPtr.argtypes`. Patch by Dung Nguyen. - -- gh-60462: Fix :func:`locale.strxfrm` on Solaris (and possibly other - platforms). - -- gh-138239: The REPL now highlights :keyword:`type` as a soft keyword in - :ref:`type statements <type>`. - -- gh-138204: Forbid expansion of shared anonymous :mod:`memory maps <mmap>` - on Linux, which caused a bus error. - -- gh-138010: Fix an issue where defining a class with an - :func:`@warnings.deprecated <warnings.deprecated>`-decorated base class - may not invoke the correct :meth:`~object.__init_subclass__` method in - cases involving multiple inheritance. Patch by Brian Schubert. - -- gh-138151: In :mod:`annotationlib`, improve evaluation of forward - references to nonlocal variables that are not yet defined when the - annotations are initially evaluated. - -- gh-137317: :func:`inspect.signature` now correctly handles classes that - use a descriptor on a wrapped :meth:`!__init__` or :meth:`!__new__` - method. Contributed by Yongyu Yan. - -- gh-137754: Fix import of the :mod:`zoneinfo` module if the C - implementation of the :mod:`datetime` module is not available. - -- gh-137490: Handle :data:`~errno.ECANCELED` in the same way as - :data:`~errno.EINTR` in :func:`signal.sigwaitinfo` on NetBSD. - -- gh-137477: Fix :func:`!inspect.getblock`, :func:`inspect.getsourcelines` - and :func:`inspect.getsource` for generator expressions. - -- gh-137044: Return large limit values as positive integers instead of - negative integers in :func:`resource.getrlimit`. Accept large values and - reject negative values (except :data:`~resource.RLIM_INFINITY`) for limits - in :func:`resource.setrlimit`. - -- gh-75989: :func:`tarfile.TarFile.extractall` and - :func:`tarfile.TarFile.extract` now overwrite symlinks when extracting - hardlinks. (Contributed by Alexander Enrique Urieles Nieto in - :gh:`75989`.) - -- gh-137017: Fix :obj:`threading.Thread.is_alive` to remain ``True`` until - the underlying OS thread is fully cleaned up. This avoids false negatives - in edge cases involving thread monitoring or premature - :obj:`threading.Thread.is_alive` calls. - -- gh-137273: Fix debug assertion failure in :func:`locale.setlocale` on - Windows. - -- gh-137239: :mod:`heapq`: Update :data:`!heapq.__all__` with ``*_max`` - functions. - -- gh-81325: :class:`tarfile.TarFile` now accepts a :term:`path-like - <path-like object>` when working on a tar archive. (Contributed by - Alexander Enrique Urieles Nieto in :gh:`81325`.) - -- gh-137185: Fix a potential async-signal-safety issue in - :mod:`faulthandler` when printing C stack traces. - -- gh-136914: Fix retrieval of :attr:`doctest.DocTest.lineno` for objects - decorated with :func:`functools.cache` or - :class:`functools.cached_property`. - -- gh-136912: :func:`hmac.digest` now properly handles large keys and - messages by falling back to the pure Python implementation when necessary. - Patch by Bénédikt Tran. - -- gh-83424: Allows creating a :class:`ctypes.CDLL` without name when passing - a handle as an argument. - -- gh-136234: Fix :meth:`asyncio.WriteTransport.writelines` to be robust to - connection failure, by using the same behavior as - :meth:`~asyncio.WriteTransport.write`. - -- gh-136507: Fix mimetypes CLI to handle multiple file parameters. - -- gh-136057: Fixed the bug in :mod:`pdb` and :mod:`bdb` where ``next`` and - ``step`` can't go over the line if a loop exists in the line. - -- gh-135386: Fix opening a :mod:`dbm.sqlite3` database for reading from - read-only file or directory. - -- gh-135444: Fix :meth:`asyncio.DatagramTransport.sendto` to account for - datagram header size when data cannot be sent. - -- gh-126631: Fix :mod:`multiprocessing` ``forkserver`` bug which prevented - ``__main__`` from being preloaded. - -- gh-135307: :mod:`email`: Fix exception in ``set_content()`` when encoding - text and max_line_length is set to ``0`` or ``None`` (unlimited). - -- gh-134453: Fixed :func:`subprocess.Popen.communicate` ``input=`` handling - of :class:`memoryview` instances that were non-byte shaped on POSIX - platforms. Those are now properly cast to a byte shaped view instead of - truncating the input. Windows platforms did not have this bug. - -- gh-134698: Fix a crash when calling methods of :class:`ssl.SSLContext` or - :class:`ssl.SSLSocket` across multiple threads. - -- gh-125996: Fix thread safety of :class:`collections.OrderedDict`. Patch by - Kumar Aditya. - -- gh-133789: Fix unpickling of :mod:`pathlib` objects that were pickled in - Python 3.13. - -- gh-127081: Fix libc thread safety issues with :mod:`dbm` by performing - stateful operations in critical sections. - -- gh-132551: Make :class:`io.BytesIO` safe in :term:`free-threaded <free - threading>` build. - -- gh-131788: Make ``ResourceTracker.send`` from :mod:`multiprocessing` - re-entrant safe - -- gh-118981: Fix potential hang in ``multiprocessing.popen_spawn_posix`` - that can happen when the child proc dies early by closing the child fds - right away. - -- gh-102431: Clarify constraints for "logical" arguments in methods of - :class:`decimal.Context`. - -- gh-78319: UTF8 support for the IMAP APPEND command has been made RFC - compliant. - -- bpo-38735: Fix failure when importing a module from the root directory on - unix-like platforms with sys.pycache_prefix set. - -- bpo-41839: Allow negative priority values from - :func:`os.sched_get_priority_min` and :func:`os.sched_get_priority_max` - functions. - -IDLE ----- - -- gh-96491: Deduplicate version number in IDLE shell title bar after saving - to a file. - -- gh-139742: Colorize t-string prefixes for template strings in IDLE, as - done for f-string prefixes. - -Documentation -------------- - -- gh-141994: :mod:`xml.sax.handler`: Make Documentation of - :data:`xml.sax.handler.feature_external_ges` warn of opening up to - `external entity attacks - <https://en.wikipedia.org/wiki/XML_external_entity_attack>`_. Patch by - Sebastian Pipping. - -- gh-140578: Remove outdated sencence in the documentation for - :mod:`multiprocessing`, that implied that - :class:`concurrent.futures.ThreadPoolExecutor` did not exist. - -Core and Builtins ------------------ - -- gh-142048: Fix quadratically increasing garbage collection delays in - free-threaded build. - -Library -------- - -- gh-116738: Fix thread safety issue with :mod:`re` scanner objects in - free-threaded builds. - -Core and Builtins ------------------ - -- gh-141930: When importing a module, use Python's regular file object to - ensure that writes to ``.pyc`` files are complete or an appropriate error - is raised. - -- gh-120158: Fix inconsistent state when enabling or disabling monitoring - events too many times. - -- gh-139653: Only raise a ``RecursionError`` or trigger a fatal error if the - stack pointer is both below the limit pointer *and* above the stack base. - If outside of these bounds assume that it is OK. This prevents false - positives when user-space threads swap stacks. - -- gh-139103: Improve multithreaded scaling of dataclasses on the - free-threaded build. - -- gh-141579: Fix :func:`sys.activate_stack_trampoline` to properly support - the ``perf_jit`` backend. Patch by Pablo Galindo. - -- gh-114203: Skip locking if object is already locked by two-mutex critical - section. - -- gh-141528: Suggest using :meth:`concurrent.interpreters.Interpreter.close` - instead of the private ``_interpreters.destroy`` function when warning - about remaining subinterpreters. Patch by Sergey Miryanov. - -- gh-141312: Fix the assertion failure in the ``__setstate__`` method of the - range iterator when a non-integer argument is passed. Patch by Sergey - Miryanov. - -Library -------- - -- gh-116738: Make csv module thread-safe on the :term:`free threaded <free - threading>` build. - -Core and Builtins ------------------ - -- gh-140939: Fix memory leak when :class:`bytearray` or :class:`bytes` is - formated with the ``%*b`` format with a large width that results in a - :exc:`MemoryError`. - -Library -------- - -- gh-140260: Fix :mod:`struct` data race in endian table initialization with - subinterpreters. Patch by Shamil Abdulaev. - -Core and Builtins ------------------ - -- gh-140530: Fix a reference leak when ``raise exc from cause`` fails. Patch - by Bénédikt Tran. - -- gh-140373: Correctly emit ``PY_UNWIND`` event when generator object is - closed. Patch by Mikhail Efimov. - -- gh-140576: Fixed crash in :func:`tokenize.generate_tokens` in case of - specific incorrect input. Patch by Mikhail Efimov. - -- gh-140551: Fixed crash in :class:`dict` if :meth:`dict.clear` is called at - the lookup stage. Patch by Mikhail Efimov and Inada Naoki. - -- gh-140517: Fixed a reference leak when iterating over the result of - :func:`map` with ``strict=True`` when the input iterables have different - lengths. Patch by Mikhail Efimov. - -- gh-140471: Fix potential buffer overflow in :class:`ast.AST` node - initialization when encountering malformed :attr:`~ast.AST._fields` - containing non-:class:`str`. - -- gh-140431: Fix a crash in Python's :term:`garbage collector <garbage - collection>` due to partially initialized :term:`coroutine` objects when - coroutine origin tracking depth is enabled - (:func:`sys.set_coroutine_origin_tracking_depth`). - -Library -------- - -- gh-140398: Fix memory leaks in :mod:`readline` functions - :func:`~readline.read_init_file`, :func:`~readline.read_history_file`, - :func:`~readline.write_history_file`, and - :func:`~readline.append_history_file` when :c:func:`PySys_Audit` fails. - -Core and Builtins ------------------ - -- gh-140406: Fix memory leak when an object's :meth:`~object.__hash__` - method returns an object that isn't an :class:`int`. - -- gh-140358: Restore elapsed time and unreachable object count in GC debug - output. These were inadvertently removed during a refactor of ``gc.c``. - The debug log now again reports elapsed collection time and the number of - unreachable objects. Contributed by Pål Grønås Drange. - -- gh-140306: Fix memory leaks in cross-interpreter channel operations and - shared namespace handling. - -- gh-140301: Fix memory leak of ``PyConfig`` in subinterpreters. - -- gh-140257: Fix data race between interpreter_clear() and take_gil() on - eval_breaker during finalization with daemon threads. - -- gh-139951: Fixes a regression in GC performance for a growing heap - composed mostly of small tuples. - - * Counts number of actually tracked objects, instead of trackable objects. - This ensures that untracking tuples has the desired effect of reducing GC overhead. - * Does not track most untrackable tuples during creation. - This prevents large numbers of small tuples causing excessive GCs. - -- gh-140104: Fix a bug with exception handling in the JIT. Patch by Ken Jin. - Bug reported by Daniel Diniz. - -- gh-140061: Fixing the checking of whether an object is uniquely referenced - to ensure free-threaded compatibility. Patch by Sergey Miryanov. - -- gh-140067: Fix memory leak in sub-interpreter creation. - -- gh-140000: Fix potential memory leak when a reference cycle exists between - an instance of :class:`typing.TypeAliasType`, :class:`typing.TypeVar`, - :class:`typing.ParamSpec`, or :class:`typing.TypeVarTuple` and its - ``__name__`` attribute. Patch by Mikhail Efimov. - -- gh-139914: Restore support for HP PA-RISC, which has an upwards-growing - stack. - -- gh-139988: Fix a memory leak when failing to create a - :class:`~typing.Union` type. Patch by Bénédikt Tran. - -- gh-139748: Fix reference leaks in error branches of functions accepting - path strings or bytes such as :func:`compile` and :func:`os.system`. Patch - by Bénédikt Tran. - -- gh-139516: Fix lambda colon erroneously start format spec in f-string in - tokenizer. - -- gh-139640: :func:`ast.parse` no longer emits syntax warnings for - ``return``/``break``/``continue`` in ``finally`` (see :pep:`765`) -- they - are only emitted during compilation. - -- gh-139640: Fix swallowing some syntax warnings in different modules if - they accidentally have the same message and are emitted from the same - line. Fix duplicated warnings in the ``finally`` block. - -- gh-63161: Support non-UTF-8 shebang and comments in Python source files if - non-UTF-8 encoding is specified. Detect decoding error in comments for - default (UTF-8) encoding. Show the line and position of decoding error for - default encoding in a traceback. Show the line containing the coding - cookie when it conflicts with the BOM in a traceback. - -Library -------- - -- gh-116738: Make :mod:`mmap` thread-safe on the :term:`free threaded <free - threading>` build. - -Core and Builtins ------------------ - -- gh-138558: Fix handling of unusual t-string annotations in annotationlib. - Patch by Dave Peck. - -- gh-134466: Don't run PyREPL in a degraded environment where setting - termios attributes is not allowed. - -- gh-138944: Fix :exc:`SyntaxError` message when invalid syntax appears on - the same line as a valid ``import ... as ...`` or ``from ... import ... as - ...`` statement. Patch by Brian Schubert. - -- gh-105487: Remove non-existent :meth:`~object.__copy__`, - :meth:`~object.__deepcopy__`, and :attr:`~type.__bases__` from the - :meth:`~object.__dir__` entries of :class:`types.GenericAlias`. - -- gh-69605: Fix some standard library submodules missing from the - :term:`REPL` auto-completion of imports. - -Library -------- - -- gh-116738: Make :mod:`cProfile` thread-safe on the :term:`free threaded - <free threading>` build. - -- gh-138004: On Solaris/Illumos platforms, thread names are now encoded as - ASCII to avoid errors on systems (e.g. OpenIndiana) that don't support - non-ASCII names. - -Core and Builtins ------------------ - -- gh-137433: Fix a potential deadlock in the :term:`free threading` build - when daemon threads enable or disable profiling or tracing while the main - thread is shutting down the interpreter. - -- gh-137400: Fix a crash in the :term:`free threading` build when disabling - profiling or tracing across all threads with - :c:func:`PyEval_SetProfileAllThreads` or - :c:func:`PyEval_SetTraceAllThreads` or their Python equivalents - :func:`threading.settrace_all_threads` and - :func:`threading.setprofile_all_threads`. - -- gh-58124: Fix name of the Python encoding in Unicode errors of the code - page codec: use "cp65000" and "cp65001" instead of "CP_UTF7" and "CP_UTF8" - which are not valid Python code names. Patch by Victor Stinner. - -- gh-132657: Improve performance of :class:`frozenset` by removing locks in - the free-threading build. - -- gh-133400: Fixed Ctrl+D (^D) behavior in _pyrepl module to match old - pre-3.13 REPL behavior. - -- gh-128640: Fix a crash when using threads inside of a subinterpreter. - -C API ------ - -- gh-137422: Fix :term:`free threading` race condition in - :c:func:`PyImport_AddModuleRef`. It was previously possible for two calls - to the function return two different objects, only one of which was stored - in :data:`sys.modules`. - -- gh-140042: Removed the sqlite3_shutdown call that could cause closing - connections for sqlite when used with multiple sub interpreters. - -- gh-141042: Make qNaN in :c:func:`PyFloat_Pack2` and - :c:func:`PyFloat_Pack4`, if while conversion to a narrower precision - floating-point format --- the remaining after truncation payload will be - zero. Patch by Sergey B Kirpichev. - -- gh-140487: Fix :c:macro:`Py_RETURN_NOTIMPLEMENTED` in limited C API 3.11 - and older: don't treat ``Py_NotImplemented`` as immortal. Patch by Victor - Stinner. - -- gh-140153: Fix :c:func:`Py_REFCNT` definition on limited C API 3.11-3.13. - Patch by Victor Stinner. - -- gh-139653: Add :c:func:`PyUnstable_ThreadState_SetStackProtection` and - :c:func:`PyUnstable_ThreadState_ResetStackProtection` functions to set the - stack protection base address and stack protection size of a Python thread - state. Patch by Victor Stinner. - -Build ------ - -- gh-141808: Do not generate the jit stencils twice in case of PGO builds on - Windows. - -- gh-141784: Fix ``_remote_debugging_module.c`` compilation on 32-bit Linux. - Include Python.h before system headers to make sure that - ``_remote_debugging_module.c`` uses the same types (ABI) than Python. - Patch by Victor Stinner. - -- gh-140768: Warn when the WASI SDK version doesn't match what's supported. - -- gh-140513: Generate a clear compilation error when - ``_Py_TAIL_CALL_INTERP`` is enabled but either ``preserve_none`` or - ``musttail`` is not supported. - -- gh-140189: iOS builds were added to CI. - -- gh-138489: When cross-compiling for WASI by ``build_wasm`` or - ``build_emscripten``, the ``build-details.json`` step is now included in - the build process, just like with native builds. - - This fixes the ``libinstall`` task which requires the - ``build-details.json`` file during the process. - -- gh-137618: ``PYTHON_FOR_REGEN`` now requires Python 3.10 to Python 3.15. - Patch by Adam Turner. - -- gh-123681: Check the ``strftime()`` behavior at runtime instead of at the - compile time to support cross-compiling. Remove the internal macro - ``_Py_NORMALIZE_CENTURY``. - - -What's New in Python 3.14.0 final? -================================== - -*Release date: 2025-10-07* - -macOS ------ - -- gh-124111: Update macOS installer to use Tcl/Tk 8.6.17. - -- gh-139573: Updated bundled version of OpenSSL to 3.0.18. - -Windows -------- - -- gh-139573: Updated bundled version of OpenSSL to 3.0.18. - -Tools/Demos ------------ - -- gh-139330: SBOM generation tool didn't cross-check the version and - checksum values against the ``Modules/expat/refresh.sh`` script, leading - to the values becoming out-of-date during routine updates. - -- gh-132006: XCframeworks now include privacy manifests to satisfy Apple App - Store submission requirements. - -- gh-138171: A script for building an iOS XCframework was added. As part of - this change, the top level ``iOS`` folder has been moved to be a - subdirectory of the ``Apple`` folder. - -Security --------- - -- gh-139400: :mod:`xml.parsers.expat`: Make sure that parent Expat parsers - are only garbage-collected once they are no longer referenced by - subparsers created by - :meth:`~xml.parsers.expat.xmlparser.ExternalEntityParserCreate`. Patch by - Sebastian Pipping. - -Library -------- - -- gh-139312: Upgrade bundled libexpat to 2.7.3 - - -What's New in Python 3.14.0 release candidate 3? -================================================ - -*Release date: 2025-09-18* - -Windows -------- - -- gh-138896: Fix error installing C runtime on non-updated Windows machines - -Tools/Demos ------------ - -- gh-137873: The iOS test runner has been simplified, resolving some issues - that have been observed using the runner in GitHub Actions and Azure - Pipelines test environments. - -Security --------- - -- gh-135661: Fix CDATA section parsing in :class:`html.parser.HTMLParser` - according to the HTML5 standard: ``] ]>`` and ``]] >`` no longer end the - CDATA section. Add private method ``_set_support_cdata()`` which can be - used to specify how to parse ``<[CDATA[`` --- as a CDATA section in - foreign content (SVG or MathML) or as a bogus comment in the HTML - namespace. - -Library -------- - -- gh-138998: Update bundled libexpat to 2.7.2 - -- gh-118803: Add back :class:`collections.abc.ByteString` and - :class:`typing.ByteString`. Both had been removed in prior alpha, beta and - release candidates for Python 3.14, but their removal has now been - postponed to Python 3.17. - -- gh-137226: Fix :func:`typing.get_type_hints` calls on generic - :class:`typing.TypedDict` classes defined with string annotations. - -- gh-138804: Raise :exc:`TypeError` instead of :exc:`AttributeError` when an - argument of incorrect type is passed to :func:`shlex.quote`. This restores - the behavior of the function prior to 3.14. - -- gh-128636: Fix crash in PyREPL when os.environ is overwritten with an - invalid value for mac - -- gh-138514: Raise :exc:`ValueError` when a multi-character string is passed - to the *echo_char* parameter of :func:`getpass.getpass`. Patch by Benjamin - Johnson. - -- gh-138515: :mod:`email` is added to Emscripten build. - -- gh-99948: :func:`ctypes.util.find_library` now works in Emscripten build. - -- gh-138253: Add the *block* parameter in the :meth:`!put` and :meth:`!get` - methods of the :mod:`concurrent.interpreters` queues for compatibility - with the :class:`queue.Queue` interface. - -- gh-138133: Prevent infinite traceback loop when sending CTRL^C to Python - through ``strace``. - -- gh-134869: Fix an issue where pressing Ctrl+C during tab completion in the - REPL would leave the autocompletion menu in a corrupted state. - -- gh-90548: Fix ``musl`` detection for :func:`platform.libc_ver` on Alpine - Linux if compiled with --strip-all. - -- gh-136134: :meth:`!SMTP.auth_cram_md5` now raises an - :exc:`~smtplib.SMTPException` instead of a :exc:`ValueError` if Python has - been built without MD5 support. In particular, :class:`~smtplib.SMTP` - clients will not attempt to use this method even if the remote server is - assumed to support it. Patch by Bénédikt Tran. - -- gh-136134: :meth:`IMAP4.login_cram_md5 <imaplib.IMAP4.login_cram_md5>` now - raises an :exc:`IMAP4.error <imaplib.IMAP4.error>` if CRAM-MD5 - authentication is not supported. Patch by Bénédikt Tran. - -- gh-134953: Expand ``_colorize`` theme with ``keyword_constant`` and - implement in :term:`repl`. - -Core and Builtins ------------------ - -- gh-71810: Raise :exc:`OverflowError` for ``(-1).to_bytes()`` for signed - conversions when bytes count is zero. Patch by Sergey B Kirpichev. - -- gh-138192: Fix :mod:`contextvars` initialization so that all - subinterpreters are assigned the :attr:`~contextvars.Token.MISSING` value. - -- gh-138479: Fix a crash when a generic object's ``__typing_subst__`` - returns an object that isn't a :class:`tuple`. - -- gh-138372: Fix :exc:`SyntaxWarning` emitted for erroneous subscript - expressions involving :ref:`template string literals <t-strings>`. Patch - by Brian Schubert. - -- gh-138318: The default REPL now avoids highlighting built-in names (for - instance :class:`set` or :func:`format`) when they are used as attribute - names (for instance in ``value.set`` or ``text.format``). - -- gh-138349: Fix crash in certain cases where a module contains both a - module-level annotation and a comprehension. - -- gh-137384: Fix a crash when using the :mod:`warnings` module in a - finalizer at shutdown. Patch by Kumar Aditya. - -- gh-137883: Fix runaway recursion when calling a function with keyword - arguments. - -- gh-137079: Fix keyword typo recognition when parsing files. Patch by Pablo - Galindo. - -- gh-137728: Fix the JIT's handling of many local variables. This previously - caused a segfault. - -- gh-137576: Fix for incorrect source code being shown in tracebacks from - the Basic REPL when :envvar:`PYTHONSTARTUP` is given. Patch by Adam Hartz. - - -What's New in Python 3.14.0 release candidate 2? -================================================ - -*Release date: 2025-08-14* - -macOS ------ - -- gh-137450: macOS installer shell path management improvements: separate - the installer ``Shell profile updater`` postinstall script from the - ``Update Shell Profile.command`` to enable more robust error handling. - -- gh-137134: Update macOS installer to ship with SQLite version 3.50.4. - -Windows -------- - -- gh-137134: Update Windows installer to ship with SQLite 3.50.4. - -Library -------- - -- gh-137426: Remove the code deprecation of - ``importlib.abc.ResourceLoader``. It is documented as deprecated, but left - for backwards compatibility with other classes in ``importlib.abc``. - -- gh-137282: Fix tab completion and :func:`dir` on - :mod:`concurrent.futures`. - -- gh-137257: Bump the version of pip bundled in ensurepip to version 25.2 - -- gh-137226: Fix behavior of :meth:`annotationlib.ForwardRef.evaluate` when - the *type_params* parameter is passed and the name of a type param is also - present in an enclosing scope. - -- gh-130522: Fix unraisable :exc:`TypeError` raised during - :term:`interpreter shutdown` in the :mod:`threading` module. - -- gh-137059: Fix handling of file URLs with a Windows drive letter in the - URL authority by :func:`urllib.request.url2pathname`. This fixes a - regression in earlier pre-releases of Python 3.14. - -- gh-130577: :mod:`tarfile` now validates archives to ensure member offsets - are non-negative. (Contributed by Alexander Enrique Urieles Nieto in - :gh:`130577`.) - -- gh-135228: When :mod:`dataclasses` replaces a class with a slotted - dataclass, the original class can now be garbage collected again. Earlier - changes in Python 3.14 caused this class to always remain in existence - together with the replacement class synthesized by :mod:`dataclasses`. - -Documentation -------------- - -- gh-136155: We are now checking for fatal errors in EPUB builds in CI. - -Core and Builtins ------------------ - -- gh-137400: Fix a crash in the :term:`free threading` build when disabling - profiling or tracing across all threads with - :c:func:`PyEval_SetProfileAllThreads` or - :c:func:`PyEval_SetTraceAllThreads` or their Python equivalents - :func:`threading.settrace_all_threads` and - :func:`threading.setprofile_all_threads`. - -- gh-137314: Fixed a regression where raw f-strings incorrectly interpreted - escape sequences in format specifications. Raw f-strings now properly - preserve literal backslashes in format specs, matching the behavior from - Python 3.11. For example, ``rf"{obj:\xFF}"`` now correctly produces - ``'\\xFF'`` instead of ``'ÿ'``. Patch by Pablo Galindo. - -- gh-137308: A standalone docstring in a node body is optimized as a - :keyword:`pass` statement to ensure that the node's body is never empty. - There was a :exc:`ValueError` in :func:`compile` otherwise. - -- gh-137288: Fix bug where some bytecode instructions of a boolean - expression are not associated with the correct exception handler. - -- gh-134291: Remove some newer macOS API usage from the JIT compiler in - order to restore compatibility with older OSX 10.15 deployment targets. - -- gh-131338: Disable computed stack limit checks on non-glibc linux - platforms to fix crashes on deep recursion. - -- gh-136870: Fix data races while de-instrumenting bytecode of code objects - running concurrently in threads. - -C API ------ - -- gh-137573: Mark ``_PyOptimizer_Optimize`` as :c:macro:`Py_NO_INLINE` to - prevent stack overflow crashes on macOS. - -Build ------ - -- gh-132339: Add support for OpenSSL 3.5. - - -What's New in Python 3.14.0 release candidate 1? -================================================ - -*Release date: 2025-07-22* - -Tools/Demos ------------ - -- gh-136251: Fixes and usability improvements for - ``Tools/wasm/emscripten/web_example`` - -Security --------- - -- gh-135661: Fix parsing attributes with whitespaces around the ``=`` - separator in :class:`html.parser.HTMLParser` according to the HTML5 - standard. - -- gh-118350: Fix support of escapable raw text mode (elements "textarea" and - "title") in :class:`html.parser.HTMLParser`. - -Library -------- - -- gh-136170: Removed the unreleased ``zipfile.ZipFile.data_offset`` property - added in 3.14.0a7 as it wasn't fully clear which behavior it should have - in some situations so the result was not always what a user might expect. - -- gh-124621: pyrepl now works in Emscripten. - -- gh-136874: Discard URL query and fragment in - :func:`urllib.request.url2pathname`. - -- gh-130645: Enable color help by default in :mod:`argparse`. - -- gh-136549: Fix signature of :func:`threading.excepthook`. - -- gh-136523: Fix :class:`wave.Wave_write` emitting an unraisable when open - raises. - -- gh-52876: Add missing ``keepends`` (default ``True``) parameter to - :meth:`!codecs.StreamReaderWriter.readline` and - :meth:`!codecs.StreamReaderWriter.readlines`. - -- gh-136470: Correct :class:`concurrent.futures.InterpreterPoolExecutor`'s - default thread name. - -- gh-136476: Fix a bug that was causing the ``get_async_stack_trace`` - function to miss some frames in the stack trace. - -- gh-136434: Fix docs generation of ``UnboundItem`` in - :mod:`concurrent.interpreters` when running with :option:`-OO`. - -- gh-136380: Raises :exc:`AttributeError` when accessing - :class:`concurrent.futures.InterpreterPoolExecutor` and subinterpreters - are not available. - -- gh-134759: Fix :exc:`UnboundLocalError` in - :func:`email.message.Message.get_payload` when the payload to decode is a - :class:`bytes` object. Patch by Kliment Lamonov. - -- gh-134657: :mod:`asyncio`: Remove some private names from - ``asyncio.__all__``. - -Core and Builtins ------------------ - -- gh-136801: Fix PyREPL syntax highlighting on match cases after multi-line - case. Contributed by Olga Matoula. - -Library -------- - -- gh-136421: Fix crash when initializing :mod:`datetime` concurrently. - -Core and Builtins ------------------ - -- gh-136541: Fix some issues with the perf trampolines on x86-64 and - aarch64. The trampolines were not being generated correctly for some - cases, which could lead to the perf integration not working correctly. - Patch by Pablo Galindo. - -- gh-136517: Fixed a typo that prevented printing of uncollectable objects - when the :const:`gc.DEBUG_UNCOLLECTABLE` mode was set. - -- gh-136525: Fix issue where per-thread bytecode was not instrumented for - newly created threads. - -- gh-132661: ``Interpolation.expression`` now has a default, the empty - string. - -- gh-132661: Reflect recent :pep:`750` change. - - Disallow concatenation of ``string.templatelib.Template`` and - :class:`str`. Also, disallow implicit concatenation of t-string literals - with string or f-string literals. - -Library -------- - -- gh-116738: Make functions in :mod:`grp` thread-safe on the :term:`free - threaded <free threading>` build. - -Core and Builtins ------------------ - -- gh-135148: Fixed a bug where f-string debug expressions (using =) would - incorrectly strip out parts of strings containing escaped quotes and # - characters. Patch by Pablo Galindo. - -- gh-133136: Limit excess memory usage in the :term:`free threading` build - when a large dictionary or list is resized and accessed by multiple - threads. - -- gh-91153: Fix a crash when a :class:`bytearray` is concurrently mutated - during item assignment. - -- gh-127971: Fix off-by-one read beyond the end of a string in string - search. - -C API ------ - -- gh-112068: Revert support of nullable arguments in :c:func:`PyArg_Parse`. - -- gh-133296: New variants for the critical section API that accept one or - two :c:type:`PyMutex` pointers rather than :c:type:`PyObject` instances - are now public in the non-limited C API. - -- gh-134009: Expose :c:func:`PyMutex_IsLocked` as part of the public C API. - -Build ------ - -- gh-135621: PyREPL no longer depends on the :mod:`curses` standard library. - Contributed by Łukasz Langa. - - -What's New in Python 3.14.0 beta 4? -=================================== - -*Release date: 2025-07-08* - -Tools/Demos ------------ - -- gh-135968: Stubs for ``strip`` are now provided as part of an iOS install. - -- gh-133600: Backport file reorganization for Tools/wasm/wasi. - - This should make backporting future code changes easier. It also - simplifies instructions around how to do WASI builds in the devguide. - -Tests ------ - -- gh-135966: The iOS testbed now handles the ``app_packages`` folder as a - site directory. - -- gh-135494: Fix regrtest to support excluding tests from ``--pgo`` tests. - Patch by Victor Stinner. - -Security --------- - -- gh-136053: :mod:`marshal`: fix a possible crash when deserializing - :class:`slice` objects. - -- gh-135661: Fix parsing start and end tags in - :class:`html.parser.HTMLParser` according to the HTML5 standard. - - * Whitespaces no longer accepted between ``</`` and the tag name. - E.g. ``</ script>`` does not end the script section. - - * Vertical tabulation (``\v``) and non-ASCII whitespaces no longer recognized - as whitespaces. The only whitespaces are ``\t\n\r\f`` and space. - - * Null character (U+0000) no longer ends the tag name. - - * Attributes and slashes after the tag name in end tags are now ignored, - instead of terminating after the first ``>`` in quoted attribute value. - E.g. ``</script/foo=">"/>``. - - * Multiple slashes and whitespaces between the last attribute and closing ``>`` - are now ignored in both start and end tags. E.g. ``<a foo=bar/ //>``. - - * Multiple ``=`` between attribute name and value are no longer collapsed. - E.g. ``<a foo==bar>`` produces attribute "foo" with value "=bar". - - * [Reverted in :gh:`136927`] Whitespaces between the ``=`` separator and attribute name or value are no - longer ignored. E.g. ``<a foo =bar>`` produces two attributes "foo" and - "=bar", both with value None; ``<a foo= bar>`` produces two attributes: - "foo" with value "" and "bar" with value None. - -- gh-102555: Fix comment parsing in :class:`html.parser.HTMLParser` - according to the HTML5 standard. ``--!>`` now ends the comment. ``-- >`` - no longer ends the comment. Support abnormally ended empty comments - ``<-->`` and ``<--->``. - -Library -------- - -- gh-136286: Fix pickling failures for protocols 0 and 1 for many objects - realted to subinterpreters. - -- gh-136316: Improve support for evaluating nested forward references in - :func:`typing.evaluate_forward_ref`. - -- gh-85702: If ``zoneinfo._common.load_tzdata`` is given a package without a - resource a :exc:`zoneinfo.ZoneInfoNotFoundError` is raised rather than a - :exc:`PermissionError`. Patch by Victor Stinner. - -- gh-136028: Fix parsing month names containing "İ" (U+0130, LATIN CAPITAL - LETTER I WITH DOT ABOVE) in :func:`time.strptime`. This affects locales - az_AZ, ber_DZ, ber_MA and crh_UA. - -- gh-135995: In the palmos encoding, make byte ``0x9b`` decode to ``›`` - (U+203A - SINGLE RIGHT-POINTING ANGLE QUOTATION MARK). - -- gh-53203: Fix :func:`time.strptime` for ``%c`` and ``%x`` formats on - locales byn_ER, wal_ET and lzh_TW, and for ``%X`` format on locales ar_SA, - bg_BG and lzh_TW. - -- gh-91555: An earlier change, which was introduced in 3.14.0b2, has been - reverted. It disabled logging for a logger during handling of log messages - for that logger. Since the reversion, the behaviour should be as it was - before 3.14.0b2. - -- gh-135878: Fixes a crash of :class:`types.SimpleNamespace` on :term:`free - threading` builds, when several threads were calling its - :meth:`~object.__repr__` method at the same time. - -- gh-135836: Fix :exc:`IndexError` in :meth:`asyncio.loop.create_connection` - that could occur when non-\ :exc:`OSError` exception is raised during - connection and socket's ``close()`` raises :exc:`!OSError`. - -- gh-135836: Fix :exc:`IndexError` in :meth:`asyncio.loop.create_connection` - that could occur when the Happy Eyeballs algorithm resulted in an empty - exceptions list during connection attempts. - -- gh-135855: Raise :exc:`TypeError` instead of :exc:`SystemError` when - :func:`!_interpreters.set___main___attrs` is passed a non-dict object. - Patch by Brian Schubert. - -- gh-135815: :mod:`netrc`: skip security checks if :func:`os.getuid` is - missing. Patch by Bénédikt Tran. - -- gh-135640: Address bug where it was possible to call - :func:`xml.etree.ElementTree.ElementTree.write` on an ElementTree object - with an invalid root element. This behavior blanked the file passed to - ``write`` if it already existed. - -- gh-135645: Added ``supports_isolated_interpreters`` field to - :data:`sys.implementation`. - -- gh-135646: Raise consistent :exc:`NameError` exceptions in - :func:`annotationlib.ForwardRef.evaluate` - -- gh-135557: Fix races on :mod:`heapq` updates and :class:`list` reads on - the :term:`free threaded <free threading>` build. - -- gh-119180: Only fetch globals and locals if necessary in - :func:`annotationlib.get_annotations` - -- gh-135561: Fix a crash on DEBUG builds when an HACL* HMAC routine fails. - Patch by Bénédikt Tran. - -- gh-135487: Fix :meth:`!reprlib.Repr.repr_int` when given integers with - more than :func:`sys.get_int_max_str_digits` digits. Patch by Bénédikt - Tran. - -- gh-135335: :mod:`multiprocessing`: Flush ``stdout`` and ``stderr`` after - preloading modules in the ``forkserver``. - -- gh-135069: Fix the "Invalid error handling" exception in - :class:`!encodings.idna.IncrementalDecoder` to correctly replace the - 'errors' parameter. - -- gh-130662: +Accept leading zeros in precision and width fields for - +:class:`~decimal.Decimal` formatting, for example ``format(Decimal(1.25), - '.016f')``. - -- gh-130662: Accept leading zeros in precision and width fields for - :class:`~fractions.Fraction` formatting, for example ``format(Fraction(1, - 3), '.016f')``. - -- gh-87790: Support underscore and comma as thousands separators in the - fractional part for :class:`~fractions.Fraction`'s formatting. Patch by - Sergey B Kirpichev. - -- gh-87790: Support underscore and comma as thousands separators in the - fractional part for :class:`~decimal.Decimal`'s formatting. Patch by - Sergey B Kirpichev. - -- gh-130664: Handle corner-case for :class:`~fractions.Fraction`'s - formatting: treat zero-padding (preceding the width field by a zero - (``'0'``) character) as an equivalent to a fill character of ``'0'`` with - an alignment type of ``'='``, just as in case of :class:`float`'s. - -Documentation -------------- - -- gh-136155: EPUB builds are fixed by excluding non-XHTML-compatible tags. - -Core and Builtins ------------------ - -- gh-109700: Fix memory error handling in :c:func:`PyDict_SetDefault`. - -- gh-78465: Fix error message for ``cls.__new__(cls, ...)`` where ``cls`` is - not instantiable builtin or extension type (with ``tp_new`` set to - ``NULL``). - -- gh-129958: Differentiate between t-strings and f-strings in syntax error - for newlines in format specifiers of single-quoted interpolated strings. - -- gh-135871: Non-blocking mutex lock attempts now return immediately when - the lock is busy instead of briefly spinning in the :term:`free threading` - build. - -- gh-135106: Restrict the trashcan mechanism to GC'ed objects and untrack - them while in the trashcan to prevent the GC and trashcan mechanisms - conflicting. - -- gh-135607: Fix potential :mod:`weakref` races in an object's destructor on - the :term:`free threaded <free threading>` build. - -- gh-135608: Fix a crash in the JIT involving attributes of modules. - -- gh-135543: Emit ``sys.remote_exec`` audit event when - :func:`sys.remote_exec` is called and migrate ``remote_debugger_script`` - to ``cpython.remote_debugger_script``. - -- gh-134280: Disable constant folding for ``~`` with a boolean argument. - This moves the deprecation warning from compile time to runtime. - -C API ------ - -- gh-135906: Fix compilation errors when compiling the internal headers with - a C++ compiler. - -Build ------ - -- gh-134273: Add support for configuring compiler flags for the JIT with - ``CFLAGS_JIT`` - - -What's New in Python 3.14.0 beta 3? -=================================== - -*Release date: 2025-06-17* - -Windows -------- - -- gh-135099: Fix a crash that could occur on Windows when a background - thread waits on a :c:type:`PyMutex` while the main thread is shutting down - the interpreter. - -Tests ------ - -- gh-132815: Fix test__opcode: add ``JUMP_BACKWARD`` to specialization - stats. - -- gh-135489: Show verbose output for failing tests during PGO profiling step - with --enable-optimizations. - -- gh-135120: Add :func:`!test.support.subTests`. - -Security --------- - -- gh-135462: Fix quadratic complexity in processing specially crafted input - in :class:`html.parser.HTMLParser`. End-of-file errors are now handled - according to the HTML5 specs -- comments and declarations are - automatically closed, tags are ignored. - -- gh-135034: Fixes multiple issues that allowed ``tarfile`` extraction - filters (``filter="data"`` and ``filter="tar"``) to be bypassed using - crafted symlinks and hard links. - - Addresses :cve:`2024-12718`, :cve:`2025-4138`, :cve:`2025-4330`, and - :cve:`2025-4517`. - -Library -------- - -- gh-65697: :class:`configparser`'s error message when attempting to write - an invalid key is now more helpful. - -- gh-135497: Fix :func:`os.getlogin` failing for longer usernames on - BSD-based platforms. - -- gh-135429: Fix the argument mismatch in ``_lsprof`` for ``PY_THROW`` - event. - -- gh-135368: Fix :class:`unittest.mock.Mock` generation on - :func:`dataclasses.dataclass` objects. Now all special attributes are set - as it was before :gh:`124429`. - -- gh-133967: Do not normalize :mod:`locale` name 'C.UTF-8' to 'en_US.UTF-8'. - -- gh-135321: Raise a correct exception for values greater than 0x7fffffff - for the ``BINSTRING`` opcode in the C implementation of :mod:`pickle`. - -- gh-135276: Backported bugfixes in zipfile.Path from zipp 3.23. Fixed - ``.name``, ``.stem`` and other basename-based properties on Windows when - working with a zipfile on disk. - -- gh-135244: :mod:`uuid`: when the MAC address cannot be determined, the - 48-bit node ID is now generated with a cryptographically-secure - pseudo-random number generator (CSPRNG) as per :rfc:`RFC 9562, §6.10.3 - <9562#section-6.10-3>`. This affects :func:`~uuid.uuid1` and - :func:`~uuid.uuid6`. - -- gh-134970: Fix the "unknown action" exception in - :meth:`argparse.ArgumentParser.add_argument_group` to correctly replace - the action class. - -- gh-134718: :func:`ast.dump` now only omits ``None`` and ``[]`` values if - they are default values. - -- gh-134939: Add the :mod:`concurrent.interpreters` module. See :pep:`734`. - -- gh-134885: Fix possible crash in the :mod:`compression.zstd` module - related to setting parameter types. Patch by Jelle Zijlstra. - -- gh-134857: Improve error report for :mod:`doctest`\ s run with - :mod:`unittest`. Remove :mod:`!doctest` module frames from tracebacks and - redundant newline character from a failure message. - -- gh-128840: Fix parsing long IPv6 addresses with embedded IPv4 address. - -- gh-134637: Fix performance regression in calling a :mod:`ctypes` function - pointer in :term:`free threading`. - -- gh-134696: Built-in HACL* and OpenSSL implementations of hash function - constructors now correctly accept the same *documented* named arguments. - For instance, :func:`~hashlib.md5` could be previously invoked as - ``md5(data=data)`` or ``md5(string=string)`` depending on the underlying - implementation but these calls were not compatible. Patch by Bénédikt - Tran. - -- gh-134151: :mod:`email`: Fix :exc:`TypeError` in - :func:`email.utils.decode_params` when sorting :rfc:`2231` continuations - that contain an unnumbered section. - -- gh-134210: :func:`curses.window.getch` now correctly handles signals. - Patch by Bénédikt Tran. - -- gh-134152: :mod:`email`: Fix parsing of email message ID with invalid - domain. - -- gh-133489: :func:`random.getrandbits` can now generate more that 2\ - :sup:`31` bits. :func:`random.randbytes` can now generate more that 256 - MiB. - -- gh-132813: Improve error messages for incorrect types and values of - :class:`csv.Dialect` attributes. - -- gh-132969: Prevent the :class:`~concurrent.futures.ProcessPoolExecutor` - executor thread, which remains running when :meth:`shutdown(wait=False) - <concurrent.futures.Executor.shutdown>`, from attempting to adjust the - pool's worker processes after the object state has already been reset - during shutdown. A combination of conditions, including a worker process - having terminated abormally, resulted in an exception and a potential hang - when the still-running executor thread attempted to replace dead workers - within the pool. - -- gh-127081: Fix libc thread safety issues with :mod:`os` by replacing - ``getlogin`` with ``getlogin_r`` re-entrant version. - -- gh-131884: Fix formatting issues in :func:`json.dump` when both *indent* - and *skipkeys* are used. - -- gh-130999: Avoid exiting the new REPL and offer suggestions even if there - are non-string candidates when errors occur. - -Documentation -------------- - -- gh-135171: Document that the :term:`iterator` for the leftmost - :keyword:`!for` clause in the generator expression is created immediately. - -- bpo-45210: Document that error indicator may be set in tp_dealloc, and how - to avoid clobbering it. - -Core and Builtins ------------------ - -- gh-135496: Fix typo in the f-string conversion type error ("exclamanation" - -> "exclamation"). - -- gh-135371: Fixed :mod:`asyncio` debugging tools to properly display - internal coroutine call stacks alongside external task dependencies. The - ``python -m asyncio ps`` and ``python -m asyncio pstree`` commands now - show complete execution context. Patch by Pablo Galindo. - -Library -------- - -- gh-127319: Set the ``allow_reuse_port`` class variable to ``False`` on the - XMLRPC, logging, and HTTP servers. This matches the behavior in prior - Python releases, which is to not allow port reuse. - -Core and Builtins ------------------ - -- gh-135171: Reverts the behavior of async generator expressions when - created with object w/o __aiter__ method to the pre-3.13 behavior of - raising a TypeError. - -- gh-130077: Properly raise custom syntax errors when incorrect syntax - containing names that are prefixes of soft keywords is encountered. Patch - by Pablo Galindo. - -- gh-135171: Reverts the behavior of generator expressions when created with - a non-iterable to the pre-3.13 behavior of raising a TypeError. It is no - longer possible to cause a crash in the debugger by altering the generator - expression's local variables. This is achieved by moving the ``GET_ITER`` - instruction back to the creation of the generator expression and adding an - additional check to ``FOR_ITER``. - -Library -------- - -- gh-116738: Make methods in :mod:`heapq` thread-safe on the :term:`free - threaded <free threading>` build. - -Core and Builtins ------------------ - -- gh-134876: Add support to :pep:`768` remote debugging for Linux kernels - which don't have CONFIG_CROSS_MEMORY_ATTACH configured. - -- gh-134889: Fix handling of a few opcodes that leave operands on the stack - when optimizing ``LOAD_FAST``. - -Library -------- - -- gh-134908: Fix crash when iterating over lines in a text file on the - :term:`free threaded <free threading>` build. - -Core and Builtins ------------------ - -- gh-132617: Fix :meth:`dict.update` modification check that could - incorrectly raise a "dict mutated during update" error when a different - dictionary was modified that happens to share the same underlying keys - object. - -- gh-134679: Fix crash in the :term:`free threading` build's QSBR code that - could occur when changing an object's ``__dict__`` attribute. - -- gh-127682: No longer call ``__iter__`` twice in list comprehensions. This - brings the behavior of list comprehensions in line with other forms of - iteration - -- gh-133912: Fix the C API function ``PyObject_GenericSetDict`` to handle - extension classes with inline values. - -C API ------ - -- gh-134989: Fix ``Py_RETURN_NONE``, ``Py_RETURN_TRUE`` and - ``Py_RETURN_FALSE`` macros in the limited C API 3.11 and older: don't - treat ``Py_None``, ``Py_True`` and ``Py_False`` as immortal. Patch by - Victor Stinner. - -- gh-134989: Implement :c:func:`PyObject_DelAttr` and - :c:func:`PyObject_DelAttrString` as macros in the limited C API 3.12 and - older. Patch by Victor Stinner. - -- gh-133968: Add :c:func:`PyUnicodeWriter_WriteASCII` function to write an - ASCII string into a :c:type:`PyUnicodeWriter`. The function is faster than - :c:func:`PyUnicodeWriter_WriteUTF8`, but has an undefined behavior if the - input string contains non-ASCII characters. Patch by Victor Stinner. - -Build ------ - -- gh-119132: Remove "experimental" tag from the CPython free-threading - build. - -- gh-135497: Fix the detection of ``MAXLOGNAME`` in the ``configure.ac`` - script. - -- gh-134923: Windows builds with profile-guided optimization enabled now use - ``/GENPROFILE`` and ``/USEPROFILE`` instead of deprecated ``/LTCG:`` - options. - -- gh-134774: Fix :c:macro:`Py_DEBUG` macro redefinition warnings on Windows - debug builds. Patch by Chris Eibl. - -- gh-134632: Fixed ``build-details.json`` generation to use ``INCLUDEPY``, - in order to reference the ``pythonX.Y`` subdirectory of the include - directory, as required in :pep:`739`, instead of the top-level include - directory. - - -What's New in Python 3.14.0 beta 2? -=================================== - -*Release date: 2025-05-26* - -Windows -------- - -- gh-130727: Fix a race in internal calls into WMI that can result in an - "invalid handle" exception under high load. Patch by Chris Eibl. - -- gh-76023: Make :func:`os.path.realpath` ignore Windows error 1005 when in - non-strict mode. - -- gh-133779: Reverts the change to generate different :file:`pyconfig.h` - files based on compiler settings, as it was frequently causing extension - builds to break. In particular, the ``Py_GIL_DISABLED`` preprocessor - variable must now always be defined explicitly when compiling for the - experimental free-threaded runtime. The :func:`sysconfig.get_config_var` - function can be used to determine whether the current runtime was compiled - with that flag or not. - -- gh-133626: Ensures packages are not accidentally bundled into the - traditional installer. - -Tools/Demos ------------ - -- gh-134215: :term:`REPL` import autocomplete only suggests private modules - when explicitly specified. - -Tests ------ - -- gh-133744: Fix multiprocessing interrupt test. Add an event to synchronize - the parent process with the child process: wait until the child process - starts sleeping. Patch by Victor Stinner. - -- gh-133682: Fixed test case - ``test.test_annotationlib.TestStringFormat.test_displays`` which ensures - proper handling of complex data structures (lists, sets, dictionaries, and - tuples) in string annotations. - -- gh-133639: Fix ``TestPyReplAutoindent.test_auto_indent_default()`` doesn't - run ``input_code``. - -Security --------- - -- gh-133767: Fix use-after-free in the "unicode-escape" decoder with a - non-"strict" error handler. - -- gh-128840: Short-circuit the processing of long IPv6 addresses early in - :mod:`ipaddress` to prevent excessive memory consumption and a minor - denial-of-service. - -Library -------- - -- gh-132710: If possible, ensure that :func:`uuid.getnode` returns the same - result even across different processes. Previously, the result was - constant only within the same process. Patch by Bénédikt Tran. - -- gh-80334: :func:`multiprocessing.freeze_support` now checks for work on - any "spawn" start method platform rather than only on Windows. - -- gh-134582: Fix tokenize.untokenize() round-trip errors related to - t-strings braces escaping - -- gh-134546: Ensure :mod:`pdb` remote debugging script is readable by remote - Python process. - -- gh-134451: Converted ``asyncio.tools.CycleFoundException`` from dataclass - to a regular exception type. - -- gh-114177: Fix :mod:`asyncio` to not close subprocess pipes which would - otherwise error out when the event loop is already closed. - -- gh-90871: Fixed an off by one error concerning the backlog parameter in - :meth:`~asyncio.loop.create_unix_server`. Contributed by Christian - Harries. - -- gh-134323: Fix the :meth:`threading.RLock.locked` method. - -- gh-86802: Fixed asyncio memory leak in cancelled shield tasks. For - shielded tasks where the shield was cancelled, log potential exceptions - through the exception handler. Contributed by Christian Harries. - -- gh-134209: :mod:`curses`: The :meth:`curses.window.instr` and - :meth:`curses.window.getstr` methods now allocate their internal buffer on - the heap instead of the stack; in addition, the max buffer size is - increased from 1023 to 2047. - -- gh-134235: Updated tab completion on REPL to include builtin modules. - Contributed by Tom Wang, Hunter Young - -- gh-134152: Fixed :exc:`UnboundLocalError` that could occur during - :mod:`email` header parsing if an expected trailing delimiter is missing - in some contexts. - -- gh-134168: :mod:`http.server`: Fix IPv6 address binding and - :option:`--directory <http.server --directory>` handling when using HTTPS. - -- gh-62184: Remove import of C implementation of :class:`io.FileIO` from - Python implementation which has its own implementation - -- gh-133982: Emit :exc:`RuntimeWarning` in the Python implementation of - :mod:`io` when the :term:`file-like object <file object>` is not closed - explicitly in the presence of multiple I/O layers. - -- gh-133890: The :mod:`tarfile` module now handles :exc:`UnicodeEncodeError` - in the same way as :exc:`OSError` when cannot extract a member. - -- gh-134097: Fix interaction of the new :term:`REPL` and :option:`-X - showrefcount <-X>` command line option. - -- gh-133889: The generated directory listing page in - :class:`http.server.SimpleHTTPRequestHandler` now only shows the decoded - path component of the requested URL, and not the query and fragment. - -- gh-134098: Fix handling paths that end with a percent-encoded slash - (``%2f`` or ``%2F``) in :class:`http.server.SimpleHTTPRequestHandler`. - -- gh-132124: On POSIX-compliant systems, - :func:`!multiprocessing.util.get_temp_dir` now ignores :envvar:`TMPDIR` - (and similar environment variables) if the path length of ``AF_UNIX`` - socket files exceeds the platform-specific maximum length when using the - :ref:`forkserver <multiprocessing-start-method-forkserver>` start method. - Patch by Bénédikt Tran. - -- gh-134062: :mod:`ipaddress`: fix collisions in :meth:`~object.__hash__` - for :class:`~ipaddress.IPv4Network` and :class:`~ipaddress.IPv6Network` - objects. - -- gh-133970: Make :class:`!string.templatelib.Template` and - :class:`!string.templatelib.Interpolation` generic. - -- gh-71253: Raise :exc:`ValueError` in :func:`open` if *opener* returns a - negative file-descriptor in the Python implementation of :mod:`io` to - match the C implementation. - -- gh-133960: Simplify and improve :func:`typing.evaluate_forward_ref`. It - now no longer raises errors on certain invalid types. In several - situations, it is now able to evaluate forward references that were - previously unsupported. - -- gh-133925: Make the private class ``typing._UnionGenericAlias`` hashable. - -- gh-133653: Fix :class:`argparse.ArgumentParser` with the *formatter_class* - argument. Fix TypeError when *formatter_class* is a custom subclass of - :class:`!HelpFormatter`. Fix TypeError when *formatter_class* is not a - subclass of :class:`!HelpFormatter` and non-standard *prefix_char* is - used. Fix support of colorizing when *formatter_class* is not a subclass - of :class:`!HelpFormatter`. - -- gh-132641: Fixed a race in :func:`functools.lru_cache` under - free-threading. - -- gh-133783: Fix bug with applying :func:`copy.replace` to :mod:`ast` - objects. Attributes that default to ``None`` were incorrectly treated as - required for manually created AST nodes. - -- gh-133684: Fix bug where :func:`annotationlib.get_annotations` would - return the wrong result for certain classes that are part of a class - hierarchy where ``from __future__ import annotations`` is used. - -- gh-77057: Fix handling of invalid markup declarations in - :class:`html.parser.HTMLParser`. - -- gh-130328: Speedup pasting in ``PyREPL`` on Windows in a legacy console. - Patch by Chris Eibl. - -- gh-133701: Fix bug where :class:`typing.TypedDict` classes defined under - ``from __future__ import annotations`` and inheriting from another - ``TypedDict`` had an incorrect ``__annotations__`` attribute. - -- gh-133581: Improve unparsing of t-strings in :func:`ast.unparse` and - ``from __future__ import annotations``. Empty t-strings now round-trip - correctly and formatting in interpolations is preserved. Patch by Jelle - Zijlstra. - -- gh-133551: Support t-strings (:pep:`750`) in :mod:`annotationlib`. Patch - by Jelle Zijlstra. - -- gh-133439: Fix dot commands with trailing spaces are mistaken for - multi-line SQL statements in the sqlite3 command-line interface. - -- gh-132493: Avoid accessing ``__annotations__`` unnecessarily in - :func:`inspect.signature`. - -- gh-132876: ``ldexp()`` on Windows doesn't round subnormal results before - Windows 11, but should. Python's :func:`math.ldexp` wrapper now does - round them, so results may change slightly, in rare cases of very small - results, on Windows versions before 11. - -- gh-133009: :mod:`xml.etree.ElementTree`: Fix a crash in - :meth:`Element.__deepcopy__ <object.__deepcopy__>` when the element is - concurrently mutated. Patch by Bénédikt Tran. - -- gh-91555: Ignore log messages generated during handling of log messages, - to avoid deadlock or infinite recursion. [NOTE: This change has since been - reverted.] - -- gh-125028: :data:`functools.Placeholder` cannot be passed to - :func:`functools.partial` as a keyword argument. - -- gh-62824: Fix aliases for ``iso8859_8`` encoding. Patch by Dave Goncalves. - -- gh-86155: :meth:`html.parser.HTMLParser.close` no longer loses data when - the ``<script>`` tag is not closed. Patch by Waylan Limberg. - -- gh-69426: Fix :class:`html.parser.HTMLParser` to not unescape character - entities in attribute values if they are followed by an ASCII alphanumeric - or an equals sign. - -- bpo-28494: Improve Zip file validation false positive rate in - :func:`zipfile.is_zipfile`. - -- gh-134381: Fix :exc:`RuntimeError` when using a not-started - :class:`threading.Thread` after calling :func:`os.fork` - -Core and Builtins ------------------ - -- gh-127960: PyREPL interactive shell no longer starts with ``__package__`` - and ``__file__`` global names set to ``_pyrepl`` package internals. - Contributed by Yuichiro Tachibana. - -- gh-130397: Remove special-casing for C stack depth limits for WASI. Due to - WebAssembly's built-in stack protection this does not pose a security - concern. - -- gh-128066: Fixes an edge case where PyREPL improperly threw an error when - Python is invoked on a read only filesystem while trying to write history - file entries. - -- gh-69605: When auto-completing an import in the :term:`REPL`, finding no - candidates now issues no suggestion, rather than suggestions from the - current namespace. - -- gh-134158: Fix coloring of double braces in f-strings and t-strings in the - :term:`REPL`. - -- gh-134119: Fix crash when calling :func:`next` on an exhausted template - string iterator. Patch by Jelle Zijlstra. - -- gh-134100: Fix a use-after-free bug that occurs when an imported module - isn't in :data:`sys.modules` after its initial import. Patch by - Nico-Posada. - -- gh-133999: Fix :exc:`SyntaxError` regression in :keyword:`except` parsing - after :gh:`123440`. - -- gh-133886: Fix :func:`sys.remote_exec` for non-ASCII paths in non-UTF-8 - locales and non-UTF-8 paths in UTF-8 locales. - -- gh-133703: Fix hashtable in dict can be bigger than intended in some - situations. - -- gh-133778: Fix bug where assigning to the :attr:`~type.__annotations__` - attributes of classes defined under ``from __future__ import annotations`` - had no effect. - -- gh-132762: :meth:`~dict.fromkeys` no longer loops forever when adding a - small set of keys to a large base dict. Patch by Angela Liss. - -- gh-133541: Inconsistent indentation in user input crashed the new REPL - when syntax highlighting was active. This is now fixed. - -- gh-133516: Raise :exc:`ValueError` when constants ``True``, ``False`` or - ``None`` are used as an identifier after NFKC normalization. - -- gh-132542: Update :attr:`Thread.native_id <threading.Thread.native_id>` - after :manpage:`fork(2)` to ensure accuracy. Patch by Noam Cohen. - -C API ------ - -- gh-134144: Fix crash when calling :c:func:`Py_EndInterpreter` with a - :term:`thread state` that isn't the initial thread for the interpreter. - -Build ------ - -- gh-134455: Fixed ``build-details.json`` generation to use the correct - ``c_api.headers`` as defined in :pep:`739`, instead of ``c_api.include``. - -- gh-131769: Fix detecting when the build Python in a cross-build is a - pydebug build. - -- gh-117088: AIX linker don't support -h option, so avoid it through - platform check - - -What's New in Python 3.14.0 beta 1? -=================================== - -*Release date: 2025-05-06* - -Windows -------- - -- gh-132930: Marks the installer for Windows as deprecated and updates - documentation to cover the new Python install manager. - -- gh-127405: Add ``ABIFLAGS`` to :func:`sysconfig.get_config_vars` on - Windows. Patch by Xuehai Pan. - -Tools/Demos ------------ - -- gh-130453: Allow passing multiple keyword arguments with the same function - name in :program:`pygettext`. - -- gh-130195: Add warning messages when :program:`pygettext` unimplemented - ``-a/--extract-all`` option is called. - -Tests ------ - -- gh-133131: The iOS testbed will now select the most recently released - "SE-class" device for testing if a device isn't explicitly specified. - -- gh-91048: Add ability to externally inspect all pending asyncio tasks, - even if no task is currently entered on the event loop. - -- gh-109981: The test helper that counts the list of open file descriptors - now uses the optimised ``/dev/fd`` approach on all Apple platforms, not - just macOS. This avoids crashes caused by guarded file descriptors. - -- gh-132678: Add ``--prioritize`` to ``-m test``. This option allows the - user to specify which selected tests should execute first, even if the - order is otherwise randomized. This is particularly useful for tests that - run the longest. - -- gh-131290: Tests in :file:`Lib/test` can now be correctly executed as - standalone scripts. - -Security --------- - -- gh-115322: The underlying extension modules behind :mod:`readline`:, - :mod:`subprocess`, and :mod:`ctypes` now raise audit events on previously - uncovered code paths that could lead to file system access related to C - function calling and external binary execution. The - ``ctypes.call_function`` audit hook has also been fixed to use an unsigned - value for its ``function pointer``. - -Library -------- - -- gh-133490: Add color support to PDB in remote mode. - -- gh-132493: Avoid eagerly evaluating annotations in functions decorated - with :func:`reprlib.recursive_repr`. - -- gh-130645: Add color to stdlib argparse CLIs. Patch by Hugo van Kemenade. - -- gh-119180: Make :func:`annotationlib.get_annotations` succeed with the - ``FORWARDREF`` format if evaluating the annotations throws an exception - other than :exc:`NameError` or :exc:`AttributeError`. - -- gh-133351: Fix remote PDB to correctly request tab completions for Python - expressions from the server when completing a continuation line of a - multi-line Python block. - -- gh-133367: Add the ``--feature-version``, ``--optimize``, and - ``--show-empty`` options to the :mod:`ast` command-line interface. Patch - by Semyon Moroz. - -- gh-133363: The :class:`cmd.Cmd` class has been fixed to reliably call the - ``completedefault`` method whenever the ``do_shell`` method is not defined - and tab completion is requested for a line beginning with ``!``. - -- gh-113081: Highlight syntax on source code in :mod:`pdb`. - -- gh-133349: Introduced auto-indent in :mod:`pdb` multi-line input. - -- gh-133306: Use ``\z`` instead of ``\Z`` in :func:`fnmatch.translate` and - :func:`glob.translate`. - -- gh-133306: Support ``\z`` as a synonym for ``\Z`` in :mod:`regular - expressions <re>`. - -- gh-133300: Make :class:`argparse.ArgumentParser`'s ``suggest_on_error`` a - keyword-only parameter. Patch by Hugo van Kemenade. - -- gh-133290: Fix attribute caching issue when setting - :attr:`ctypes._Pointer._type_` in the undocumented and deprecated - :func:`!ctypes.SetPointerType` function and the undocumented - :meth:`!set_type` method. - -- gh-133223: When PDB is attached to a remote process, do a better job of - intercepting Ctrl+C and forwarding it to the remote process. - -- gh-133153: Do not complete :mod:`pdb` commands in ``interact`` mode of - :mod:`pdb`. - -- gh-133139: Add the :func:`curses.assume_default_colors` function, a - refinement of the :func:`curses.use_default_colors` function which allows - to change the color pair ``0``. - -- gh-133089: Use original timeout value for :exc:`subprocess.TimeoutExpired` - when the func :meth:`subprocess.run` is called with a timeout instead of - sometimes a confusing partial remaining time out value used internally on - the final ``wait()``. - -- gh-133036: :func:`codecs.open` is now deprecated. Use :func:`open` - instead. Contributed by Inada Naoki. - -- gh-132987: Many builtin and extension functions which accept an unsigned - integer argument, now use :meth:`~object.__index__` if available. - -- gh-124703: Set return code to ``1`` when aborting process from :mod:`pdb`. - -- gh-133005: Support passing ``preset`` option to :func:`tarfile.open` when - using ``'w|xz'`` mode. - -- gh-115032: Support for custom logging handlers with the *strm* argument is - deprecated and scheduled for removal in Python 3.16. Define handlers with - the *stream* argument instead. Patch by Mariusz Felisiak. - -- gh-132991: Add :data:`!socket.IP_FREEBIND` constant on Linux 2.4 and - later. - -- gh-132995: Bump the version of pip bundled in ensurepip to version 25.1.1 - -- gh-132933: The zipapp module now applies the filter when creating the list - of files to add, rather than waiting until the file is being added to the - archive. - -- gh-121249: Always support the :c:expr:`float complex` and :c:expr:`double - complex` C types in the :mod:`struct` module. Patch by Sergey B - Kirpichev. - -- gh-132915: :func:`fcntl.fcntl` and :func:`fcntl.ioctl` can now detect a - buffer overflow and raise :exc:`SystemError`. The stack and memory can be - corrupted in such case, so treat this error as fatal. - -- gh-132017: Fix error when ``pyrepl`` is suspended, then resumed and - terminated. - -- gh-132893: Improved :meth:`statistics.NormalDist.cdf` accuracy for inputs - smaller than the mean. - -- gh-130328: Speedup pasting in ``PyREPL`` on Windows. Fix by Chris Eibl. - -- gh-132882: Fix copying of :class:`typing.Union` objects containing objects - that do not support the ``|`` operator. - -- gh-93696: Fixed the breakpoint display error for frozen modules in - :mod:`pdb`. - -- gh-129965: Add MIME types for ``.7z``, ``.apk``, ``.deb``, ``.glb``, - ``.gltf``, ``.gz``, ``.m4v``, ``.php``, ``.rar``, ``.rpm``, ``.stl`` and - ``.wmv``. Patch by Hugo van Kemenade. - -- gh-132742: :func:`fcntl.fcntl` now supports arbitrary :term:`bytes-like - objects <bytes-like object>`, not only :class:`bytes`. :func:`fcntl.ioctl` - now automatically retries system calls failing with EINTR and releases the - GIL during a system call even for large bytes-like object. - -- gh-132451: The CLI for the PDB debugger now accepts a ``-p PID`` argument - to allow attaching to a running process. The process must be running the - same version of Python as the one running PDB. - -- gh-125618: Add a *format* parameter to - :meth:`annotationlib.ForwardRef.evaluate`. Evaluating annotations in the - ``FORWARDREF`` format now succeeds in more cases that would previously - have raised an exception. - -- gh-132805: Fix incorrect handling of nested non-constant values in the - FORWARDREF format in :mod:`annotationlib`. - -- gh-132734: Add new constants for Bluetooth :mod:`sockets <socket>`. - -- gh-132673: Fix :exc:`AssertionError` raised on :class:`ctypes.Structure` - with ``_align_ = 0`` and ``_fields_ = []``. - -- gh-132578: Rename the ``threading.Thread._handle`` field to avoid - shadowing methods defined on subclasses of ``threading.Thread``. - -- gh-132561: Fix the public ``locked`` method of ``multiprocessing.SemLock`` - class. Also adding 2 tests for the derivated :class:`multiprocessing.Lock` - and :class:`multiprocessing.RLock` classes. - -- gh-121468: Add :func:`pdb.set_trace_async` function to support - :keyword:`await` statements in :mod:`pdb`. - -- gh-132493: :class:`typing.Protocol` now uses - :func:`annotationlib.get_annotations` when checking whether or not an - instance implements the protocol with :func:`isinstance`. This enables - support for ``isinstance`` checks against classes with deferred - annotations. - -- gh-132536: Do not disable :monitoring-event:`PY_THROW` event in :mod:`bdb` - because it can't be disabled. - -- gh-132527: Include the valid typecode 'w' in the error message when an - invalid typecode is passed to :class:`array.array`. - -- gh-132099: The Bluetooth socket with the :data:`~socket.BTPROTO_HCI` - protocol on Linux now accepts an address in the format of an integer - ``device_id``, not only a tuple ``(device_id,)``. - -- gh-81793: Fix :func:`os.link` on platforms (like Linux) where the system - :c:func:`!link` function does not follow symlinks. On Linux, it now - follows symlinks by default or if ``follow_symlinks=True`` is specified. - On Windows, it now raises an error if ``follow_symlinks=True`` is passed. - On macOS, it now raises an error if ``follow_symlinks=False`` is passed - and the system :c:func:`!linkat` function is not available at runtime. - -- gh-132493: Support creation of :class:`typing.Protocol` classes with - annotations that cannot be resolved at class creation time. - -- gh-132491: Rename ``annotationlib.value_to_string`` to - :func:`annotationlib.type_repr` and provide better handling for function - objects. - -- gh-132426: Add :func:`annotationlib.get_annotate_from_class_namespace` as - a helper for accessing annotations in metaclasses, and remove - ``annotationlib.get_annotate_function``. - -- gh-70145: Add support for channels in Bluetooth HCI protocol - (:const:`~socket.BTPROTO_HCI`). - -- gh-131913: Add a shortcut function - :func:`multiprocessing.Process.interrupt` alongside the existing - :func:`multiprocessing.Process.terminate` and - :func:`multiprocessing.Process.kill` for an improved control over child - process termination. - -- gh-132439: Fix ``PyREPL`` on Windows: characters entered via AltGr are - swallowed. Patch by Chris Eibl. - -- gh-132429: Fix support of Bluetooth sockets on NetBSD and DragonFly BSD. - Add support for *cid* and *bdaddr_type* in the BTPROTO_L2CAP address on - FreeBSD. Return *cid* in ``getsockname()`` for BTPROTO_L2CAP if it is not - zero. - -- gh-132106: :meth:`QueueListener.start - <logging.handlers.QueueListener.start>` now raises a :exc:`RuntimeError` - if the listener is already started. - -- gh-132417: Fix a ``NULL`` pointer dereference when a C function called - using :mod:`ctypes` with ``restype`` :class:`~ctypes.py_object` returns - ``NULL``. - -- gh-132385: Fix instance error suggestions trigger potential exceptions in - :meth:`object.__getattr__` in :mod:`traceback`. - -- gh-125866: Add optional *add_scheme* argument to - :func:`urllib.request.pathname2url`; when set to true, a complete URL is - returned. Likewise add optional *require_scheme* argument to - :func:`~urllib.request.url2pathname`; when set to true, a complete URL is - accepted. - -- gh-132308: A :class:`traceback.TracebackException` now correctly renders - the ``__context__`` and ``__cause__`` attributes from :ref:`falsey - <truth>` :class:`Exception`, and the ``exceptions`` attribute from falsey - :class:`ExceptionGroup`. - -- gh-130645: Add colour to :mod:`argparse` help output. Patch by Hugo van - Kemenade. - -- gh-127495: In PyREPL, append a new entry to the ``PYTHON_HISTORY`` file - *after* every statement. This should preserve command-line history after - interpreter is terminated. Patch by Sergey B Kirpichev. - -- gh-129463: Comparison of :class:`annotationlib.ForwardRef` objects no - longer uses the internal ``__code__`` and ``__ast_node__`` attributes, - which are used as caches. - -- gh-132250: Fixed the :exc:`SystemError` in :mod:`cProfile` when locating - the actual C function of a method raises an exception. - -- gh-132064: :func:`annotationlib.get_annotations` now uses the - ``__annotate__`` attribute if it is present, even if ``__annotations__`` - is not present. Additionally, the function now raises a - :py:exc:`TypeError` if it is passed an object that does not have any - annotatins. - -- gh-130664: Support the ``'_'`` digit separator in formatting of the - integral part of :class:`~decimal.Decimal`'s. Patch by Sergey B - Kirpichev. - -- gh-131952: Add color output to the :program:`json` CLI. Patch by Tomas - Roun. - -- gh-132063: Prevent exceptions that evaluate as falsey (namely, when their - ``__bool__`` method returns ``False`` or their ``__len__`` method returns - 0) from being ignored by :class:`concurrent.futures.ProcessPoolExecutor` - and :class:`concurrent.futures.ThreadPoolExecutor`. - -- gh-132106: :class:`logging.handlers.QueueListener` now implements the - context manager protocol, allowing it to be used in a :keyword:`with` - statement. - -- gh-132054: The ``application/yaml`` mime type (:rfc:`9512`) is now - supported by :mod:`mimetypes`. Patch by Sasha "Nelie" Chernykh and Hugo - van Kemenade. - -- gh-119605: Respect ``follow_wrapped`` for :meth:`!__init__` and - :meth:`!__new__` methods when getting the class signature for a class with - :func:`inspect.signature`. Preserve class signature after wrapping with - :func:`warnings.deprecated`. Patch by Xuehai Pan. - -- gh-118761: Improve import times by up to 33x for the :mod:`shlex` module, - and improve the performance of :func:`shlex.quote` by up to 12x. Patch by - Adam Turner. - -- gh-85302: Add support for :data:`~socket.BTPROTO_SCO` in sockets on - FreeBSD. - -- gh-131757: Make :func:`functools.lru_cache` call the cached function - unlocked to allow concurrency. - -- gh-131423: :mod:`ssl` can show descriptions for errors added in OpenSSL - 3.4.1. Patch by Bénédikt Tran. - -- gh-131434: Improve error reporting for incorrect format in - :func:`time.strptime`. - -- gh-131524: Add help message to :mod:`platform` command-line interface. - Contributed by Harry Lees. - -- gh-100926: Move :func:`ctypes.POINTER` types cache from a global internal - cache (``_pointer_type_cache``) to the - :attr:`ctypes._CData.__pointer_type__` attribute of the corresponding - :mod:`ctypes` types. This will stop the cache from growing without limits - in some situations. - -- gh-85702: If ``zoneinfo._common.load_tzdata`` is given a package without a - resource a ``ZoneInfoNotFoundError`` is raised rather than a - :exc:`IsADirectoryError`. - -- gh-123471: Make concurrent iterations over :class:`itertools.repeat` safe - under free-threading. - -- gh-131127: Systems using LibreSSL now successfully build. - -- gh-89157: Make the pure Python implementation of - :func:`datetime.date.fromisoformat`, only accept ASCII strings for - consistency with the C implementation. - -- gh-130941: Fix :class:`configparser.ConfigParser` parsing empty - interpolation with ``allow_no_value`` set to ``True``. - -- gh-110067: Make :mod:`heapq` max-heap functions :func:`heapq.heapify_max`, - :func:`heapq.heappush_max`, :func:`heapq.heappop_max`, and - :func:`heapq.heapreplace_max` public. Previous underscored naming is kept - for backwards compatibility. Additionally, the missing function - :func:`heapq.heappushpop_max` has been added to both the C and Python - implementations. - -- gh-129098: Fix REPL traceback reporting when using :func:`compile` with an - inexisting file. Patch by Bénédikt Tran. - -- gh-130631: :func:`!http.cookiejar.join_header_words` is now more similar - to the original Perl version. It now quotes the same set of characters and - always quote values that end with ``"\n"``. - -- gh-130482: Add ability to specify name for :class:`!tkinter.OptionMenu` - and :class:`!tkinter.ttk.OptionMenu`. - -- gh-77065: Add keyword-only optional argument *echo_char* for - :meth:`getpass.getpass` for optional visual keyboard feedback support. - Patch by Semyon Moroz. - -- gh-130317: Fix :c:func:`PyFloat_Pack2` and :c:func:`PyFloat_Unpack2` for - NaN's with payload. This corrects round-trip for :func:`struct.unpack` - and :func:`struct.pack` in case of the IEEE 754 binary16 "half precision" - type. Patch by Sergey B Kirpichev. - -- gh-130402: Joining running daemon threads during interpreter shutdown now - raises :exc:`PythonFinalizationError`. - -- gh-130167: Improve speed of :func:`difflib.IS_LINE_JUNK`. Patch by Semyon - Moroz. - -- gh-101410: Added more detailed messages for domain errors in the - :mod:`math` module. - -- gh-128384: Make :class:`warnings.catch_warnings` use a context variable - for holding the warning filtering state if the - :data:`sys.flags.context_aware_warnings` flag is set to true. This makes - using the context manager thread-safe in multi-threaded programs. The - flag is true by default in free-threaded builds and is otherwise false. - The value of the flag can be overridden by the the :option:`-X - context_aware_warnings <-X>` command-line option or by the - :envvar:`PYTHON_CONTEXT_AWARE_WARNINGS` environment variable. - -- gh-129719: Fix missing :data:`!socket.CAN_RAW_ERR_FILTER` constant in the - socket module on Linux systems. It was missing since Python 3.11. - -- gh-129027: Raise :exc:`DeprecationWarning` for - :func:`sys._clear_type_cache`. This function was deprecated in Python 3.13 - but it didn't raise a runtime warning. - -- gh-128307: Add ``eager_start`` keyword argument to - :meth:`asyncio.loop.create_task` - -- gh-127604: Add support for printing the C stack trace on systems that - support it via :func:`faulthandler.dump_c_stack` or via the *c_stack* - argument in :func:`faulthandler.enable`. - -- gh-127385: Add the ``F_DUPFD_QUERY`` constant to the :mod:`fcntl` module. - -- gh-126838: Add *resolve_host* keyword-only parameter to - :func:`urllib.request.url2pathname`, and fix handling of file URLs with - authorities. - -- gh-82129: Fix :exc:`NameError` when calling :func:`typing.get_type_hints` - on a :func:`dataclasses.dataclass` created by - :func:`dataclasses.make_dataclass` with un-annotated fields. - -- gh-122559: Remove :meth:`!__reduce__` and :meth:`!__reduce_ex__` methods - that always raise :exc:`TypeError` in the C implementation of - :class:`io.FileIO`, :class:`io.BufferedReader`, :class:`io.BufferedWriter` - and :class:`io.BufferedRandom` and replace them with default - :meth:`!__getstate__` methods that raise :exc:`!TypeError`. This restores - fine details of behavior of Python 3.11 and older versions. - -- gh-122179: :func:`hashlib.file_digest` now raises :exc:`BlockingIOError` - when no data is available during non-blocking I/O. Before, it added - spurious null bytes to the digest. - -- gh-53032: Expose :func:`decimal.IEEEContext` to support creation of - contexts corresponding to the IEEE 754 (2008) decimal interchange formats. - Patch by Sergey B Kirpichev. - -- gh-120220: Deprecate the :class:`!tkinter.Variable` methods - :meth:`!trace_variable`, :meth:`!trace_vdelete` and :meth:`!trace_vinfo`. - Methods :meth:`!trace_add`, :meth:`!trace_remove` and :meth:`!trace_info` - can be used instead. - -- gh-113539: :mod:`webbrowser`: Names in the :envvar:`BROWSER` environment - variable can now refer to already registered web browsers, instead of - always generating a new browser command. - - This makes it possible to set :envvar:`BROWSER` to the value of one of the - supported browsers on macOS. - -- bpo-44172: Keep a reference to original :mod:`curses` windows in - subwindows so that the original window does not get deleted before - subwindows. - -- gh-75223: Deprecate undotted extensions in - :meth:`mimetypes.MimeTypes.add_type`. Patch by Hugo van Kemenade. - -IDLE ----- - -- gh-112936: fix IDLE: no Shell menu item in single-process mode. - -Documentation -------------- - -- gh-107006: Move documentation and example code for - :class:`threading.local` from its docstring to the official docs. - -- gh-125142: As part of the builtin help intro text, show the keyboard - shortcuts for the new, non-basic REPL (F1, F2, and F3). - -Core and Builtins ------------------ - -- gh-133336: :option:`!-J` is no longer reserved for use by Jython. Patch by - Adam Turner. - -- gh-133261: Fix bug where the cycle GC could untrack objects in the - trashcan because they looked like they were immortal. When objects are - added to the trashcan, we take care to ensure they keep a mortal reference - count. - -- gh-133346: Added experimental color theming support to the ``_colorize`` - module. - -- gh-132917: For the free-threaded build, check the process memory usage - increase before triggering a full automatic garbage collection. If the - memory used has not increased 10% since the last collection then defer it. - -- gh-91048: Add a new ``python -m asyncio ps PID`` command-line interface to - inspect asyncio tasks in a running Python process. Displays a flat table - of await relationships. A variant showing a tree view is also available as - ``python -m asyncio pstree PID``. Both are useful for debugging async - code. Patch by Pablo Galindo, Łukasz Langa, Yury Selivanov, and Marta - Gomez Macias. - -- gh-133304: Workaround NaN's "canonicalization" in :c:func:`PyFloat_Pack4` - and :c:func:`PyFloat_Unpack4` on RISC-V. - -- gh-133197: Improve :exc:`SyntaxError` error messages for incompatible - string / bytes prefixes. - -- gh-133231: Add new utilities of observing JIT compilation: - :func:`sys._jit.is_available`, :func:`sys._jit.is_enabled`, and - :func:`sys._jit.is_active`. - -Library -------- - -- gh-133194: :func:`ast.parse` will no longer parse new :pep:`758` syntax - with older *feature_version* passed. - -Core and Builtins ------------------ - -- gh-131798: Split ``CALL_LEN`` into several uops allowing the JIT to remove - them when optimizing. Patch by Diego Russo. - -- gh-131798: Use ``sym_new_type`` instead of ``sym_new_not_null`` for - _BUILD_STRING, _BUILD_SET - -- gh-132942: Fix two races in the type lookup cache. This affected the - free-threaded build and could cause crashes (apparently quite difficult to - trigger). - -- gh-131798: Propagate the return type of ``_BINARY_OP_SUBSCR_TUPLE_INT`` in - JIT. Patch by Tomas Roun - -- gh-132952: Speed up startup with the ``-S`` argument by importing the - private ``_io`` module instead of :mod:`io`. This fixes a performance - regression introduced earlier in Python 3.14 development and restores - performance to the level of Python 3.13. - -- gh-131798: Allow the JIT to remove int guards after ``_CALL_LEN`` by - setting the return type to int. Patch by Diego Russo - -- gh-131798: Split ``CALL_TUPLE_1`` into several uops allowing the JIT to - remove some of them. Patch by Tomas Roun - -- gh-131798: Split ``CALL_STR_1`` into several uops allowing the JIT to - remove some of them. Patch by Tomas Roun - -- gh-132825: Enhance unhashable key/element error messages for :class:`dict` - and :class:`set`. Patch by Victor Stinner. - -- gh-131591: Reset any :pep:`768` remote debugging pending call in children - after :func:`os.fork` calls. - -- gh-132713: Fix ``repr(list)`` race condition: hold a strong reference to - the item while calling ``repr(item)``. Patch by Victor Stinner. - -- gh-132661: Implement :pep:`750` (Template Strings). Add new syntax for - t-strings and implement new internal :class:`!string.templatelib.Template` - and :class:`!string.templatelib.Interpolation` types. - -- gh-132479: Fix compiler crash in certain circumstances where multiple - module-level annotations include comprehensions and other nested scopes. - -- gh-132747: Fix a crash when calling :meth:`~object.__get__` of a - :term:`method` with a :const:`None` second argument. - -- gh-132744: Certain calls now check for runaway recursion and respect the - system recursion limit. - -- gh-132449: Syntax errors that look like misspellings of Python keywords - now provide a helpful fix suggestion for the typo. Contributed by Pablo - Galindo Salgado. - -Library -------- - -- gh-132737: Support profiling code that requires ``__main__``, such as - :mod:`pickle`. - -Core and Builtins ------------------ - -- gh-132639: Added :c:func:`PyLong_AsNativeBytes`, - :c:func:`PyLong_FromNativeBytes` and - :c:func:`PyLong_FromUnsignedNativeBytes` to the limited C API. - -- gh-100239: Add specialisation for ``BINARY_OP/SUBSCR`` on list and slice. - -- gh-132508: Uses tagged integers on the evaluation stack to represent the - instruction offsets when reraising an exception. This avoids the need to - box the integer which could fail in low memory conditions. - -- gh-124476: Fix decoding from the locale encoding in the C.UTF-8 locale. - -- gh-131927: Compiler warnings originating from the same module and line - number are now only emitted once, matching the behaviour of warnings - emitted from user code. This can also be configured with :mod:`warnings` - filters. - -- gh-132457: Make :func:`staticmethod` and :func:`classmethod` generic. - -- gh-131798: Use ``sym_new_type`` instead of ``sym_new_not_null`` for - _BUILD_LIST, _BUILD_SET, _BUILD_MAP - -- gh-131798: Split ``CALL_TYPE_1`` into several uops allowing the JIT to - remove some of them. - -- gh-132386: Fix crash when passing a dict subclass as the ``globals`` - parameter to :func:`exec`. - -- gh-127682: No longer call ``__iter__`` twice when creating and executing a - generator expression. Creating a generator expression from a non-interable - will raise only when the generator expression is executed. This brings the - behavior of generator expressions in line with other generators. - -- gh-132261: The internal storage for annotations and annotate functions on - classes now uses different keys in the class dictionary. This eliminates - various edge cases where access to the ``__annotate__`` and - ``__annotations__`` attributes would behave unpredictably. - -- gh-132284: Don't wrap base ``PyCFunction`` slots on class creation if not - overridden. - -- gh-130415: Improve the JIT's ability to remove unused constant and local - variable loads, and fix an issue where deallocating unused values could - cause JIT code to crash or behave incorrectly. - -- gh-126703: Fix possible use after free in cases where a method's - definition has the same lifetime as its ``self``. - -- gh-132286: Fix that :attr:`type.__annotate__` was not deleted, when - :attr:`type.__annotations__` was deleted. - -- gh-131798: Allow the JIT to remove an extra ``_TO_BOOL_BOOL`` instruction - after ``_CONTAINS_OP_DICT`` by setting the return type to bool. - -- gh-124715: Prevents against stack overflows when calling - :c:func:`Py_DECREF`. Third-party extension objects no longer need to use - the "trashcan" mechanism, as protection is now built into the - :c:func:`Py_DECREF` macro. - -- gh-131798: Allow the JIT compiler to remove some type checks for - operations on lists, tuples, dictionaries, and sets. - -- gh-128398: Improve error message when an object supporting the synchronous - (resp. asynchronous) context manager protocol is entered using - :keyword:`async with` (resp. :keyword:`with`) instead of :keyword:`with` - (resp. :keyword:`async with`). Patch by Bénédikt Tran. - -- gh-131798: Allow the JIT to remove unicode guards after - ``_BINARY_OP_SUBSCR_STR_INT`` by setting the return type to string. - -- gh-131878: Handle uncaught exceptions in the main input loop for the new - REPL. - -- gh-131878: Fix support of unicode characters with two or more codepoints - on Windows in the new REPL. - -- gh-126835: Move constant folding to the peephole optimizer. Rename AST - optimization related files (Python/ast_opt.c -> Python/ast_preprocess.c), - structs (_PyASTOptimizeState -> _PyASTPreprocessState) and functions - (_PyAST_Optimize -> _PyAST_Preprocess, _PyCompile_AstOptimize -> - _PyCompile_AstPreprocess). - -- gh-114809: Add support for macOS multi-arch builds with the JIT enabled - -- gh-131507: PyREPL now supports syntax highlighting. Contributed by Łukasz - Langa. - -- gh-130907: If the ``__annotations__`` of a module object are accessed - while the module is executing, return the annotations that have been - defined so far, without caching them. - -- gh-130104: Three-argument :func:`pow` now try calling - :meth:`~object.__rpow__` if necessary. Previously it was only called in - two-argument :func:`!pow` and the binary power operator. - -- gh-130070: Fixed an assertion error for :func:`exec` passed a string - ``source`` and a non-``None`` ``closure``. Patch by Bartosz Sławecki. - -- gh-129958: Fix a bug that was allowing newlines inconsistently in format - specifiers for single-quoted f-strings. Patch by Pablo Galindo. - -- gh-129858: ``elif`` statements that follow an ``else`` block now have a - specific error message. - -- gh-69605: Add module autocomplete to PyREPL. - -- gh-128555: Add the :data:`sys.flags.thread_inherit_context` flag. - - * This flag is set to true by default on the free-threaded build - and false otherwise. If the flag is true, starting a new thread using - :class:`threading.Thread` will, by default, use a copy of the - :class:`contextvars.Context` from the caller of - :meth:`threading.Thread.start` rather than using an empty context. - - * Add the :option:`-X thread_inherit_context <-X>` command-line option and - :envvar:`PYTHON_THREAD_INHERIT_CONTEXT` environment variable, which set the - :data:`~sys.flags.thread_inherit_context` flag. - - * Add the ``context`` keyword parameter to :class:`~threading.Thread`. It can - be used to explicitly pass a context value to be used by a new thread. - - * Make the ``_contextvars`` module built-in. - -- gh-123539: Improve :exc:`SyntaxError` message for using ``import ... as`` - and ``from ... import ... as`` with not a name. - -- gh-102567: :option:`-X importtime <-X>` now accepts value ``2``, which - indicates that an ``importtime`` entry should also be printed if an - imported module has already been loaded. Patch by Noah Kim and Adam - Turner. - -- gh-116436: Improve error message when :exc:`TypeError` occurs during - :meth:`dict.update` - -- gh-103997: String arguments passed to "-c" are now automatically dedented - as if by :func:`textwrap.dedent`. This allows "python -c" invocations to - be indented in shell scripts without causing indentation errors. (Patch by - Jon Crall and Steven Sun) - -Library -------- - -- gh-89562: Remove ``hostflags`` member from ``PySSLContext`` struct. - -C API ------ - -- gh-133166: Fix regression where :c:func:`PyType_GetModuleByDef` returns - NULL without setting :exc:`TypeError` when a static type is passed. - -- gh-133164: Add :c:func:`PyUnstable_Object_IsUniqueReferencedTemporary` - function for determining if an object exists as a unique temporary - variable on the interpreter's stack. This is a replacement for some cases - where checking that :c:func:`Py_REFCNT` is one is no longer sufficient to - determine if it's safe to modify a Python object in-place with no visible - side effects. - -- gh-133140: Add :c:func:`PyUnstable_Object_IsUniquelyReferenced` as a - replacement for ``Py_REFNCT(op) == 1`` on :term:`free threaded <free - threading>` builds of Python. - -- gh-131747: On non-Windows platforms, deprecate using - :attr:`ctypes.Structure._pack_` to use a Windows-compatible layout on - non-Windows platforms. The layout should be specified explicitly by - setting :attr:`ctypes.Structure._layout_` to ``'ms'``. - -- gh-128972: For non-free-threaded builds, the memory layout of - :c:struct:`PyASCIIObject` is reverted to match Python 3.13. (Note that the - structure is not part of stable ABI and so its memory layout is - *guaranteed* to remain stable.) - -- gh-133079: The undocumented APIs :c:macro:`!Py_C_RECURSION_LIMIT` and - :c:member:`!PyThreadState.c_recursion_remaining`, added in 3.13, are - removed without a deprecation period. - -- gh-132987: The ``k`` and ``K`` formats in :c:func:`PyArg_Parse` now - support the :meth:`~object.__index__` special method, like all other - integer formats. - -- gh-132909: Fix an overflow when handling the :ref:`K - <capi-py-buildvalue-format-K>` format in :c:func:`Py_BuildValue`. Patch by - Bénédikt Tran. - -- gh-132798: Deprecated and undocumented functions - :c:func:`!PyUnicode_AsEncodedObject`, - :c:func:`!PyUnicode_AsDecodedObject`, - :c:func:`!PyUnicode_AsEncodedUnicode` and - :c:func:`!PyUnicode_AsDecodedUnicode` are scheduled for removal in 3.15. - -- gh-132470: Creating a :class:`ctypes.CField` with a *byte_size* that does - not match the actual type size now raises a :exc:`ValueError` instead of - crashing the interpreter. - -- gh-112068: [Reverted in :gh:`136991`] Add support of nullable arguments in - :c:func:`PyArg_Parse` and similar functions. Adding ``?`` after any format - unit makes ``None`` be accepted as a value. - -- gh-50333: Non-tuple sequences are deprecated as argument for the - ``(items)`` format unit in :c:func:`PyArg_ParseTuple` and other - :ref:`argument parsing <arg-parsing>` functions if *items* contains format - units which store a :ref:`borrowed buffer <c-arg-borrowed-buffer>` or a - :term:`borrowed reference`. - -Build ------ - -- gh-113464: Use the cpython-bin-deps "externals" repository for Windows - LLVM dependency management. Installing LLVM manually is no longer - necessary for Windows JIT builds. - -- gh-133183: iOS compiler shims now include ``IPHONEOS_DEPLOYMENT_TARGET`` - in target triples, ensuring that SDK version minimums are honored. - -- gh-133167: Fix compilation process with ``--enable-optimizations`` and - ``--without-docstrings``. - -- gh-133171: Since free-threaded builds do not support the experimental JIT - compiler, prevent these configurations from being combined. - -- gh-132758: Fix building with tail call interpreter and pystats. - -- gh-132649: The :file:`PC\layout` script now allows passing - ``--include-tcltk`` on Windows ARM64. - -- gh-132257: Change the default LTO flags on GCC to not pass - ``-flto-partition=none``, and allow parallelization of LTO. For newer GNU - makes and GCC, this has a multiple factor speedup for LTO build times, - with no noticeable loss in performance. - -- gh-132026: Fix use of undefined identifiers in platform triplet detection - on MIPS Linux platforms. - - -What's New in Python 3.14.0 alpha 7? -==================================== - -*Release date: 2025-04-08* - -macOS ------ - -- gh-124111: Update macOS installer to use Tcl/Tk 8.6.16. - -- gh-131423: Update macOS installer to use OpenSSL 3.0.16. Patch by Bénédikt - Tran. - -- gh-131025: Update macOS installer to ship with SQLite 3.49.1. - -Windows -------- - -- gh-131423: Update bundled version of OpenSSL to 3.0.16. The new build also - disables uplink support, which may be relevant to embedders but has no - impact on normal use. - -- gh-131453: Some :data:`!SND_*` and :data:`!MB_*` constants are added to - :mod:`winsound`. - -- gh-91349: Replaces our copy of ``zlib`` with ``zlib-ng``, for performance - improvements in :mod:`zlib`. - -- gh-131025: Update Windows installer to ship with SQLite 3.49.1. - -Tools/Demos ------------ - -- gh-132121: Always escape non-printable Unicode characters in - :program:`pygettext`. - -- gh-131852: :program:`msgfmt` no longer adds the ``POT-Creation-Date`` to - generated ``.mo`` files for consistency with GNU ``msgfmt``. - -Tests ------ - -- gh-131277: Allow to unset one or more environment variables at once via - :meth:`EnvironmentVarGuard.unset() - <test.support.os_helper.EnvironmentVarGuard.unset>`. Patch by Bénédikt - Tran. - -- gh-131050: ``test_ssl.test_dh_params`` is skipped if the underlying TLS - library does not support finite-field ephemeral Diffie-Hellman. - -Security --------- - -- gh-131809: Update bundled libexpat to 2.7.1 - -- gh-131261: Upgrade to libexpat 2.7.0 - -- gh-121284: Fix bug in the folding of rfc2047 encoded-words when flattening - an email message using a modern email policy. Previously when an - encoded-word was too long for a line, it would be decoded, split across - lines, and re-encoded. But commas and other special characters in the - original text could be left unencoded and unquoted. This could - theoretically be used to spoof header lines using a carefully constructed - encoded-word if the resulting rendered email was transmitted or re-parsed. - -Library -------- - -- gh-132174: Fix function name in error message of - ``_interpreters.run_string``. - -- gh-132171: Fix crash of ``_interpreters.run_string`` on string subclasses. - -- gh-129204: Introduce new ``_PYTHON_SUBPROCESS_USE_POSIX_SPAWN`` - environment variable knob in :mod:`subprocess` to control the use of - :func:`os.posix_spawn`. - -- gh-132159: Do not shadow user arguments in generated :meth:`!__new__` by - decorator :class:`warnings.deprecated`. Patch by Xuehai Pan. - -- gh-132168: The :class:`ctypes.py_object` type now supports subscription, - making it a :term:`generic type`. - -- gh-84481: Add the :attr:`!zipfile.ZipFile.data_offset` attribute, which - stores the offset to the beginning of ZIP data in a file when available. - When the :class:`zipfile.ZipFile` is opened in either mode ``'w'`` or - ``'x'`` and the underlying file does not support ``tell()``, the value - will be ``None`` instead. - -- gh-132075: Fix possible use of :mod:`socket` address structures with - uninitialized members. Now all structure members are initialized with - zeroes by default. - -- gh-118761: Improve import times by up to 27x for the :mod:`string` module. - Patch by Adam Turner. - -- gh-125434: Display thread name in :mod:`faulthandler`. Patch by Victor - Stinner. - -- gh-132002: Fix crash when deallocating :class:`contextvars.ContextVar` - with weird unahashable string names. - -- gh-131938: :mod:`xml.etree.ElementTree`: update the error message when an - element to remove via :meth:`Element.remove - <xml.etree.ElementTree.Element.remove>` is not found. Patch by Bénédikt - Tran. - -- gh-115942: Add :meth:`threading.RLock.locked`, - :meth:`multiprocessing.Lock.locked`, :meth:`multiprocessing.RLock.locked`, - and allow :meth:`multiprocessing.managers.SyncManager.Lock` and - :meth:`multiprocessing.managers.SyncManager.RLock` to proxy ``locked()`` - call. - -- gh-131974: Fix several thread-safety issues in :mod:`ctypes` on the - :term:`free threaded <free threading>` build. - -- gh-118761: Improve the import time of the :mod:`ast` module by extracting - the :func:`~ast.unparse` function to a helper module. - -- gh-107369: Improved performance of :func:`textwrap.indent` by an average - of ~1.3x. Patch by Adam Turner. - -- gh-131792: Improved performance of :func:`textwrap.dedent` by an average - of ~2.4x, (with improvements of up to 4x for large inputs), and fixed a - bug where blank lines with whitespace characters other than space or - horizontal tab were not normalised to the newline. Patch by Adam Turner, - Marius Juston, and Pieter Eendebak. - -- gh-131668: :mod:`socket`: Fix code parsing AF_BLUETOOTH socket addresses. - -- gh-60115: Support frozen modules for :func:`linecache.getline`. - -- gh-131492: Fix a resource leak when constructing a :class:`gzip.GzipFile` - with a filename fails, for example when passing an invalid - ``compresslevel``. - -- gh-131435: 10-20% performance improvement of :func:`random.randint`. - -- gh-131461: Fix :exc:`ResourceWarning` when constructing a - :class:`gzip.GzipFile` in write mode with a broken file object. - -- gh-125866: Deprecate the :mod:`!nturl2path` module. Call - :func:`urllib.request.url2pathname` and - :func:`~urllib.request.pathname2url` instead. - -- gh-126367: Fix issue where :func:`urllib.request.url2pathname` raised - :exc:`OSError` when given a Windows URI containing a colon character not - following a drive letter, such as before an NTFS alternate data stream. - -- gh-120144: Disable ``CALL`` event in :mod:`bdb` in ``monitoring`` backend - when we don't need any new events on the code object to get a better - performance. - -- gh-131358: Register ``cseuckr`` as an encoding alias for ``euc_kr``. - -- gh-131325: Fix sendfile fallback implementation to drain data after - writing to transport in :mod:`asyncio`. - -- gh-90548: :func:`platform.libc_ver` can now detect and report the version - of ``musl`` on Alpine Linux. - -- gh-129843: Fix incorrect argument passing in - :func:`warnings.warn_explicit`. - -- gh-70647: When creating a :mod:`datetime` object with an out of range date - a more informative error is raised. - -- gh-130914: Allow :meth:`graphlib.TopologicalSorter.prepare` to be called - more than once as long as sorting has not started. Patch by Daniel Pope. - -- gh-131236: Allow to generate multiple UUIDs at once via :option:`python -m - uuid --count <uuid --count>`. - -- gh-126895: Fix :mod:`readline` in :term:`free-threaded <free threading>` - build. - -- gh-121468: ``$_asynctask`` is added as a :mod:`pdb` convenience variable - to access the current asyncio task if applicable. - -- gh-118761: Improve import time of :mod:`locale` using lazy import ``re``. - Patch by Semyon Moroz. - -- gh-129598: Fix :func:`ast.unparse` when :class:`ast.Interactive` contains - multiple statements. - -- gh-85162: The :mod:`http.server` module now includes built-in support for - HTTPS servers exposed by :class:`http.server.HTTPSServer`. This - functionality is exposed by the command-line interface (``python -m - http.server``) through the ``--tls-cert``, ``--tls-key`` and - ``--tls-password-file`` options. Patch by Semyon Moroz. - -- gh-129463: The implementations of equality and hashing for - :class:`annotationlib.ForwardRef` now use all attributes on the object. - Two :class:`!ForwardRef` objects are equal only if all attributes are - equal. - -- gh-128593: :class:`annotationlib.ForwardRef` objects no longer cache their - value when they are successfully evaluated. Successive calls to - :meth:`annotationlib.ForwardRef.evaluate` may return different values. - -- gh-117779: Fix reading duplicated entries in :mod:`zipfile` by name. - Reading duplicated entries (except the last one) by ``ZipInfo`` now emits - a warning instead of raising an exception. - -- gh-128715: The class of :class:`~ctypes.Structure`/:class:`~ctypes.Union` - field descriptors is now available as :class:`~ctypes.CField`, and has new - attributes to aid debugging and introspection. - -- gh-128055: Fix ``test.test_sysconfig.test_sysconfigdata_json`` when - running outside the build directory (eg. after installing). - -- gh-126037: :mod:`xml.etree.ElementTree`: Fix a crash in - :meth:`Element.find <xml.etree.ElementTree.Element.find>`, - :meth:`Element.findtext <xml.etree.ElementTree.Element.findtext>` and - :meth:`Element.findall <xml.etree.ElementTree.Element.findall>` when the - tag to find implements an :meth:`~object.__eq__` method mutating the - element being queried. Patch by Bénédikt Tran. - -- gh-127794: When headers are added to :class:`email.message.Message` - objects, either through :meth:`email.message.Message.__setitem__` or - :meth:`email.message.Message.add_header`, the field name is now validated - according to :rfc:`RFC 5322, Section 2.2 <5322#section-2.2>` and a - :exc:`ValueError` is raised if the field name contains any invalid - characters. - -- gh-123599: Deprecate :meth:`!pathlib.PurePath.as_uri`; use - :meth:`pathlib.Path.as_uri` instead. - -- gh-126033: :mod:`xml.etree.ElementTree`: Fix a crash in - :meth:`Element.remove <xml.etree.ElementTree.Element.remove>` when the - element is concurrently mutated. Patch by Bénédikt Tran. - -- gh-120144: Add the optional backend of ``sys.monitoring`` to :mod:`bdb` - and use it for :mod:`pdb`. - -- gh-74598: Add :func:`fnmatch.filterfalse` for excluding names matching a - pattern. Patch by Bénédikt Tran. - -- gh-114917: Add support for AI_NUMERICSERV in getaddrinfo emulation - -- bpo-17254: Added aliases for Thai Language using Microsoft Code Pages. - -Documentation -------------- - -- gh-131417: Mention :class:`asyncio.Future` and :class:`asyncio.Task` in - generic classes list. - -Core and Builtins ------------------ - -- gh-131798: Allow the JIT to remove an extra ``_TO_BOOL_BOOL`` instruction - after ``_CONTAINS_OP_SET`` by setting the return type to bool. - -- gh-132011: Fix crash when calling :meth:`list.append` as an unbound - method. - -- gh-131998: Fix a crash when using an unbound method :term:`descriptor` - object in a function where a bound method descriptor was used. - -- gh-131591: Implement :pep:`768` (Safe external debugger interface for - CPython). Add a new :func:`sys.remote_exec` function to the :mod:`sys` - module. This function schedules the execution of a Python file in a - separate process. Patch by Pablo Galindo, Matt Wozniski and Ivona - Stojanovic. - -- gh-131798: Allow JIT to omit str guard in truthiness test when str type is - known. - -- gh-131833: Add support for optionally dropping grouping parentheses when - using multiple exception types as per :pep:`758`. Patch by Pablo Galindo - -- gh-130924: Usage of a name in a function-scope annotation no longer - triggers creation of a cell for that variable. This fixes a regression in - earlier alphas of Python 3.14. - -- gh-131800: Improve the experimental JIT's ability to remove type checks - for certain subscripting operations. - -- gh-131738: Compiler emits optimized code for builtin any/all/tuple calls - over a generator expression. - -- gh-131719: Fix missing NULL check in ``_PyMem_FreeDelayed`` in - :term:`free-threaded <free threading>` build. - -- gh-131670: Fix :func:`anext` failing on sync :meth:`~object.__anext__` - raising an exception. - -- gh-131666: Fix signature of ``anext_awaitable.close`` objects. Patch by - Bénédikt Tran. - -- gh-130415: Optimize comparison of two constants in JIT builds - -- gh-129149: Add fast path for small and medium-size integers in - :c:func:`PyLong_FromInt32`, :c:func:`PyLong_FromUInt32`, - :c:func:`PyLong_FromInt64` and :c:func:`PyLong_FromUInt64`. Patch by Chris - Eibl. - -- gh-130887: Optimize the AArch64 code generation for the JIT. Patch by - Diego Russo - -- gh-130956: Optimize the AArch64 code generation for the JIT. Patch by - Diego Russo - -- gh-130928: Fix error message when formatting bytes using the ``'i'`` flag. - Patch by Maxim Ageev. - -- gh-130935: Annotations at the class and module level that are - conditionally defined are now only reflected in ``__annotations__`` if the - block they are in is executed. Patch by Jelle Zijlstra. - -- gh-130775: Do not crash on negative ``column`` and ``end_column`` in - :mod:`ast` locations. - -- gh-130704: Optimize ``LOAD_FAST`` and its superinstruction form to reduce - reference counting overhead. These instructions are replaced with faster - variants that load borrowed references onto the operand stack when we can - prove that the reference in the frame outlives the reference loaded onto - the stack. - -- gh-88887: Fixing multiprocessing Resource Tracker process leaking, usually - observed when running Python as PID 1. - -- gh-130115: Fix an issue with thread identifiers being sign-extended on - some platforms. - -Library -------- - -- gh-99108: Add support for built-in implementation of HMAC (:rfc:`2104`) - based on HACL*. Patch by Bénédikt Tran. - -Core and Builtins ------------------ - -- gh-130080: Implement PEP 765: Disallow return/break/continue that exit a - finally block. - -- gh-129900: Fix return codes inside :exc:`SystemExit` not getting returned - by the REPL. - -- gh-128632: Disallow ``__classdict__`` as the name of a type parameter. - Using this name would previously crash the interpreter in some - circumstances. - -- gh-126703: Improve performance of builtin methods by using a freelist. - -- gh-126703: Improve performance of :class:`range` by using a freelist. - -C API ------ - -- gh-131740: Update PyUnstable_GC_VisitObjects to traverse perm gen. - -- gh-131525: The PyTupleObject now caches the computed hash value in the new - field ob_hash. - -Build ------ - -- gh-131865: The DTrace build now properly passes the ``CC`` and ``CFLAGS`` - variables to the ``dtrace`` command when utilizing SystemTap on Linux. - -- gh-131675: Fix mimalloc library builds for 32-bit ARM targets. - -- gh-131691: clang-cl on Windows needs option ``/EHa`` to support SEH - (structured exception handling) correctly. Fix by Chris Eibl. - -- gh-131278: Add optimizing flag ``WITH_COMPUTED_GOTOS`` to Windows builds - for when using a compiler that supports it (currently clang-cl). Patch by - Chris Eibl. - -- gh-130213: Update the vendored HACL* library to fix build issues with - older clang compilers. - -- gh-130673: Fix potential ``KeyError`` when handling object sections during - JIT building process. - - -What's New in Python 3.14.0 alpha 6? -==================================== - -*Release date: 2025-03-14* - -macOS ------ - -- gh-128540: Ensure web browser is launched by :func:`webbrowser.open` on - macOS, even for ``file://`` URLs. - -Windows -------- - -- gh-131020: :source:`pylauncher <PC/launcher2.c>` correctly detects a BOM - when searching for the shebang. Fix by Chris Eibl. - -Tools/Demos ------------ - -- gh-130453: Make it possible to override default keywords in - :program:`pygettext`. - -- gh-85012: Correctly reset ``msgctxt`` when compiling messages in - :program:`msgfmt`. - -- gh-130453: Extend support for specifying custom keywords in - :program:`pygettext`. - -- gh-130195: Add warning messages when ``pygettext`` unimplemented - ``-a/--extract-all`` option is called. - -- gh-130057: Add support for translator comments in :program:`pygettext.py`. - -- gh-130025: The iOS testbed now correctly handles symlinks used as Python - framework references. - -- gh-129911: Fix the keyword entry in the help output of - :program:`pygettext`. - -Tests ------ - -- gh-129200: Multiple iOS testbed runners can now be started at the same - time without introducing an ambiguity over simulator ownership. - -- gh-130292: The iOS testbed will now run successfully on a machine that has - not previously run Xcode tests (such as CI configurations). - -- gh-130293: The tests of terminal colorization are no longer sensitive to - the value of the ``TERM`` variable in the testing environment. - -- gh-129401: Fix a flaky test in ``test_repr_rlock`` that checks the - representation of :class:`multiprocessing.RLock`. - -- gh-126332: Add unit tests for pyrepl. - -Security --------- - -- gh-127371: Avoid unbounded buffering for - :meth:`!tempfile.SpooledTemporaryFile.writelines`. Previously, disk - spillover was only checked after the lines iterator had been exhausted. - This is now done after each line is written. - -Library -------- - -- gh-131204: Use monospace font from System Font Stack for cross-platform - support in :class:`difflib.HtmlDiff`. - -- gh-131196: Improve performance of :attr:`uuid.UUID.hex` and - :meth:`uuid.UUID.__str__ <object.__str__>`. - -- gh-130940: The behavior of ``PyConfig.use_system_logger`` was modified to - be enabled by default on iOS. It remains disabled by default on macOS. - -- gh-131123: Supported completions for attributes of convenience variables - in :mod:`pdb`. - -- gh-93096: Removed undocumented CLI ``python -m difflib``. Use ``python -m - doctest Lib/difflib.py -v`` instead. Patch by Semyon Moroz. - -- gh-93096: Removed undocumented ``-t`` and ``-v`` arguments of ``python -m - pickle``. Use ``python -m doctest Lib/pickle.py -v`` instead. Patch by - Semyon Moroz. - -- gh-81267: Correct :func:`time.sleep` error message when an object that - cannot be interpreted as an integer or float is provided. - -- gh-93096: Removed undocumented ``-t`` and ``-v`` arguments of ``python -m - pickletools``. Use ``python -m doctest Lib/pickletools.py -v`` instead. - Patch by Semyon Moroz. - -- gh-131045: Fix issue with ``__contains__``, values, and pseudo-members for - :class:`enum.Flag`. - -- gh-130959: Fix pure-Python implementation of - :func:`datetime.time.fromisoformat` to reject times with spaces in - fractional part (for example, ``12:34:56.400 +02:00``), matching the C - implementation. Patch by Michał Gorny. - -- gh-130806: Deleting :class:`gzip.GzipFile` before it is closed now emits a - :exc:`ResourceWarning`. - -- gh-130637: Add validation for numeric response data in poplib.POP3.stat() - method - -- gh-130665: Only apply locale to :ref:`calendar CLI <calendar-cli>` when - set via ``--locale`` and not via ``LANG`` environment variable. - -- gh-130660: ``sys.ps1`` and ``sys.ps2`` are now restored after - :func:`code.interact` call. - -- gh-130608: Remove *dirs_exist_ok* argument from :meth:`pathlib.Path.copy` - and :meth:`~pathlib.Path.copy_into`. These methods are new in Python 3.14. - -- gh-130461: Remove ``.. index::`` directives from the :mod:`uuid` module - documentation. These directives previously created entries in the general - index for :func:`~uuid.getnode` as well as the :func:`~uuid.uuid1`, - :func:`~uuid.uuid3`, :func:`~uuid.uuid4`, :func:`~uuid.uuid5`, and - :func:`~uuid.uuid8` constructor functions. - -- gh-130379: The zipapp module now calculates the list of files to be added - to the archive before creating the archive. This avoids accidentally - including the target when it is being created in the source directory. - -- gh-82987: Inline breakpoints like :func:`breakpoint` or - :func:`pdb.set_trace` will always stop the program at calling frame, - ignoring the ``skip`` pattern (if any). - -- gh-125377: ``<tab>`` at the beginning of the line in :mod:`pdb` multi-line - input will fill in a 4-space indentation now, instead of inserting a - ``\t`` character. - -- gh-125413: Ensure the path returned from :meth:`pathlib.Path.copy` or - :meth:`~pathlib.Path.move` has fresh :attr:`~pathlib.Path.info`. - -- gh-65697: stdlib configparser will now attempt to validate that keys it - writes will not result in file corruption (creating a file unable to be - accurately parsed by a future read() call from the same parser). - Attempting a corrupting write() will raise an InvalidWriteError. - -- gh-125413: Speed up :meth:`Path.copy <pathlib.Path.copy>` by making better - use of :attr:`~pathlib.Path.info` internally. - -- gh-130285: Fix corner case for :func:`random.sample` allowing the *counts* - parameter to specify an empty population. So now, ``sample([], 0, - counts=[])`` and ``sample('abc', k=0, counts=[0, 0, 0])`` both give the - same result as ``sample([], 0)``. - -- gh-124703: Executing ``quit`` command in :mod:`pdb` will raise - :exc:`bdb.BdbQuit` when :mod:`pdb` is started from an interactive console - using :func:`breakpoint` or :func:`pdb.set_trace`. - -- gh-107773: Make :mod:`datetime` subclass :meth:`~object.__repr__` - consistent both implementations. Patch by Semyon Moroz. - -- gh-130250: Fix regression in ``traceback.print_last()``. - -- gh-123471: Make concurrent iterations over :class:`itertools.batched` safe - under free-threading. - -- gh-57537: Support breakpoints for :mod:`zipimport` modules on :mod:`pdb` - -- gh-130230: Fix crash in :func:`pow` with only :class:`~decimal.Decimal` - third argument. - -- gh-126944: Show explicit errors when required arguments of :mod:`pdb` - commands are missing - -- gh-127750: Improve repr of :class:`functools.singledispatchmethod` methods - and descriptors. - -- gh-128520: Apply type conversion consistently in :class:`pathlib.PurePath` - and :class:`~pathlib.Path` methods can accept a path object as an - argument, such as :meth:`~pathlib.PurePath.match` and - :meth:`~pathlib.Path.rename`. The argument is now converted to path object - if it lacks a :meth:`~pathlib.PurePath.with_segments` attribute, and not - otherwise. - -- gh-118761: Reverts a change in the previous release attempting to make - some stdlib imports used within the :mod:`subprocess` module lazy as this - was causing errors during ``__del__`` finalizers calling methods such as - ``terminate``, or ``kill``, or ``send_signal``. - -- gh-130164: Fixed failure to raise :exc:`TypeError` in - :meth:`inspect.Signature.bind` for positional-only arguments provided by - keyword when a variadic keyword argument (e.g. ``**kwargs``) is present. - -- gh-130151: Fix reference leaks in :func:`!_hashlib.hmac_new` and - :func:`!_hashlib.hmac_digest`. Patch by Bénédikt Tran. - -- gh-130145: Fix :meth:`!asyncio.AbstractEventloop.run_forever` when another - loop is already running. - -- gh-130139: Fix bug where :func:`ast.parse` did not error on AST input - which is not of the correct type, when called with optimize=False. - -- gh-127260: Forbid the use of colon (":") as a fractional component - separator and other improvements to the consistency of error raising - between the C and Python implementations of - :meth:`datetime.time.fromisoformat` and - :meth:`datetime.datetime.fromisoformat`. Patch by Semyon Moroz. - -- gh-85795: Using :func:`super` and ``__class__`` :term:`closure variable` - in user-defined methods of :class:`typing.NamedTuple` subclasses is now - explicitly prohibited at runtime. Contributed by Bartosz Sławecki in - :gh:`130082`. - -- gh-118761: Improve import time of :mod:`cmd` by lazy importing - :mod:`inspect` and removing :mod:`string`. Patch by Semyon Moroz. - -- gh-129726: Fix :class:`gzip.GzipFile` raising an unraisable exception - during garbage collection when referring to a temporary object by breaking - the reference loop with :mod:`weakref`. - -- gh-127750: Remove broken :func:`functools.singledispatchmethod` caching - introduced in :gh:`85160`. Achieve the same performance using different - optimization. - -- gh-129948: Add support for shared :class:`set` to - :class:`multiprocessing.managers.SyncManager` via :meth:`SyncManager.set() - <multiprocessing.managers.SyncManager.set>`. - -- gh-129965: Update MIME types for ``.avi`` and ``.wav``. Add MIME types for - ``.docx``, ``.pptx``, ``.xlsx``, ``.epub``, ``.flac``, ``.m4a``, ``.odg``, - ``.odp``, ``.ods``, ``.odt``, ``.oga``, ``.ogg``, ``.ogx`` and ``.weba``. - Patch by Hugo van Kemenade. - -- gh-129889: Support context manager protocol by :class:`contextvars.Token`. - Patch by Andrew Svetlov. - -- gh-97850: Update the deprecation warning of - :meth:`importlib.abc.Loader.load_module`. - -- gh-129678: :class:`configparser.ConfigParser`: do not write an empty - unnamed section - -- gh-128641: Restore :meth:`configparser.ConfigParser.read` performance. - -- gh-129569: Fix :func:`unicodedata.normalize` to always return a built-in - :class:`str` object when given an input of a :class:`str` subclass, - regardless of whether the string is already normalized. - -- gh-128231: Execution of multiple statements in the new REPL now stops - immediately upon the first exception encountered. Patch by Bartosz - Sławecki. - -- gh-96092: Fix bug in :func:`traceback.walk_stack` called with None where - it was skipping more frames than in prior versions. This bug fix also - changes walk_stack to walk the stack in the frame where it was called - rather than where it first gets used. - -- gh-129288: Add optional ``l2_cid`` and ``l2_bdaddr_type`` fields to - :mod:`socket` ``BTPROTO_L2CAP`` sockaddr tuple. - -- gh-128703: Fix :func:`mimetypes.guess_type` to use default mapping for - empty ``Content-Type`` in registry. - -- gh-128647: Eagerly write to buffers passed to :class:`gzip.GzipFile`'s - :meth:`~io.BufferedIOBase.readinto` and - :meth:`~io.BufferedIOBase.readinto1` implementations, avoiding unnecessary - allocations. Patch by Chris Markiewicz. - -- gh-128184: Improve display of :class:`annotationlib.ForwardRef` object - within :class:`inspect.Signature` representations. This also fixes a - :exc:`NameError` that was raised when using :func:`dataclasses.dataclass` - on classes with unresolvable forward references. - -- gh-128041: Add - :meth:`concurrent.futures.ProcessPoolExecutor.terminate_workers` and - :meth:`concurrent.futures.ProcessPoolExecutor.kill_workers` as ways to - terminate or kill all living worker processes in the given pool. - (Contributed by Charles Machalow in :gh:`130849`.) - -- gh-127647: Add protocols :class:`io.Reader` and :class:`io.Writer` as - alternatives to :class:`typing.IO`, :class:`typing.TextIO`, and - :class:`typing.BinaryIO`. - -- gh-109798: Added additional information into error messages in - :mod:`datetime`, and made the messages more consistent between the C and - Python implementations. Patch by Semyon Moroz. - -- gh-125746: Delay deprecated :meth:`zipimport.zipimporter.load_module` - removal time to 3.15. Use :meth:`zipimport.zipimporter.exec_module` - instead. - -- gh-74028: Add the optional ``buffersize`` parameter to - :meth:`concurrent.futures.Executor.map` to limit the number of submitted - tasks whose results have not yet been yielded. If the buffer is full, - iteration over the *iterables* pauses until a result is yielded from the - buffer. - -- gh-124927: Non-printing characters are now properly handled in the new - REPL. - -- gh-124096: Turn on virtual terminal mode and enable bracketed paste in - REPL on Windows console. (If the terminal does not support bracketed - paste, enabling it does nothing.) - -- gh-89083: Add :func:`uuid.uuid7` for generating UUIDv7 objects as - specified in :rfc:`9562`. Patch by Bénédikt Tran. - -- gh-89083: Add :func:`uuid.uuid6` for generating UUIDv6 objects as - specified in :rfc:`9562`. Patch by Bénédikt Tran. - -- gh-117151: Increase ``io.DEFAULT_BUFFER_SIZE`` from 8k to 128k and adjust - :func:`open` on platforms where :meth:`os.fstat` provides a ``st_blksize`` - field (such as Linux) to use ``max(min(blocksize, 8 MiB), - io.DEFAULT_BUFFER_SIZE)`` rather than always using the device block size. - This should improve I/O performance. Patch by Romain Morotti. - -- gh-105499: Make :class:`types.UnionType` an alias for - :class:`typing.Union`. Both ``int | str`` and ``Union[int, str]`` now - create instances of the same type. Patch by Jelle Zijlstra. - -- gh-93096: Document the command-line for :mod:`mimetypes`. It now exits - with ``1`` on failure instead of ``0`` and ``2`` on incorrect command-line - parameters instead of ``1``. Also, errors are printed to stderr instead of - stdout and their text is made tighter. Patch by Oleg Iarygin and Hugo van - Kemenade. - -Documentation -------------- - -- gh-125722: Require Sphinx 8.2.0 or later to build the Python - documentation. Patch by Adam Turner. - -- gh-129712: The wheel tags supported by each macOS universal SDK option are - now documented. - -- gh-46236: C API: Document :c:func:`PyUnicode_RSplit`, - :c:func:`PyUnicode_Partition` and :c:func:`PyUnicode_RPartition`. - -Core and Builtins ------------------ - -- gh-131141: Fix data race in :data:`sys.monitoring` instrumentation while - registering callback. - -- gh-130804: Fix support of unicode characters on Windows in the new REPL. - -- gh-130932: Fix incorrect exception handling in - ``_PyModule_IsPossiblyShadowing`` - -- gh-122029: :func:`sys.setprofile` and :func:`sys.settrace` will not - generate a ``c_call`` event for ``INSTRUMENTED_CALL_FUNCTION_EX`` if the - callable is a method with a C function wrapped, because we do not generate - ``c_return`` event in such case. - -- gh-129964: Fix JIT crash on Windows on Arm. Patch by Diego Russo and - Brandt Bucher. - -- gh-130851: Fix a crash in the :term:`free threading` build when - constructing a :class:`code` object with :attr:`~codeobject.co_consts` - that contains instances of types that are not otherwise generated by the - bytecode compiler. - -- gh-128534: Ensure that both left and right branches have the same source - for ``async for`` loops. Add these branches to the ``co_branches()`` - iterator. - -- gh-130794: Fix memory leak in the :term:`free threaded <free threading>` - build when resizing a shared list or dictionary from multiple short-lived - threads. - -- gh-130415: Improve JIT understanding of integers in boolean context. - -- gh-130382: Fix ``PyRefTracer_DESTROY`` not being sent from - :file:`Python/ceval.c` ``Py_DECREF()``. - -- gh-130574: Renumber :opcode:`RESUME` from 149 to 128. - -- gh-124878: Fix race conditions during runtime finalization that could lead - to accessing freed memory. - -- gh-130415: Improve the experimental JIT's ability to narrow boolean values - based on the results of truthiness tests. - -- gh-130618: Fix a bug that was causing ``UnicodeDecodeError`` or - ``SystemError`` to be raised when using f-strings with ``lambda`` - expressions with non-ASCII characters. Patch by Pablo Galindo - -- gh-123044: Make sure that the location of branch targets in ``match`` - cases is in the body, not the pattern. - -- gh-128534: Add branch monitoring (``BRANCH_LEFT`` and ``BRANCH_RIGHT`` - events) for ``async for`` loops. - -- gh-130163: Fix possible crashes related to concurrent change and use of - the :mod:`sys` module attributes. - -- gh-122029: ``INSTRUMENTED_CALL_KW`` will expand the method before - monitoring to reflect the actual behavior more accurately. - -- gh-130415: Improve JIT's ability to optimize strings in boolean contexts. - -- gh-130396: Use actual stack limits (from - :manpage:`pthread_getattr_np(3)`) for linux, and other systems with - ``_GNU_SOURCE`` defined, when determining limits for C stack protection. - -- gh-128396: Fix a crash that occurs when calling :func:`locals` inside an - inline comprehension that uses the same local variable as the outer frame - scope where the variable is a free or cell var. - -- gh-129107: Fix two more :class:`bytearray` functions for :term:`free - threading`. - -- gh-127705: Use tagged references (``_PyStackRef``) for the default build - as well as for the free-threading build. This has a small negative - performance impact short-term but will enable larger speedups in the - future and significantly reduce maintenance costs by allowing a single - implementation of tagged references in the future. - -- gh-130094: Fix two race conditions involving concurrent imports that could - lead to spurious failures with :exc:`ModuleNotFoundError`. - -- gh-129107: Make :class:`bytearray` iterator safe under :term:`free - threading`. - -- gh-115802: Use the more efficient "medium" code model for JIT-compiled - code on supported platforms. - -- gh-107956: A ``build-details.json`` file is now install in the - platform-independent standard library directory (:pep:`739` - implementation). - -- gh-116042: Fix location for SyntaxErrors of invalid escapes in the - tokenizer. Patch by Pablo Galindo - -- gh-91079: Change C stack overflow protection to consider the amount of - stack consumed, rather than a counter. This allows deeper recursion in - many cases, but remains safe. - -- gh-129715: Improve the experimental JIT's handling of returns to unknown - callers. - -Library -------- - -- gh-129983: Fix data race in compile_template in :file:`sre.c`. - -Core and Builtins ------------------ - -- gh-129967: Fix a race condition in the :term:`free threading` build when - ``repr(set)`` is called concurrently with ``set.clear()``. - -- gh-129953: The internal (evaluation) stack is now spilled to memory - whenever execution escapes from the interpreter or JIT compiled code. This - should have no observable effect in either Python or builtin extensions, - but will allow various important optimizations in the future. - -- gh-129515: Clarify syntax error messages for conditional expressions when - a statement is specified before an :keyword:`if` or after an - :keyword:`else` keyword. - -- gh-129349: :meth:`bytes.fromhex` and :meth:`bytearray.fromhex` now accepts - ASCII :class:`bytes` and :term:`bytes-like objects <bytes-like object>`. - -- gh-129149: Add fast path for medium-size integers in - :c:func:`PyLong_FromSsize_t`. Patch by Chris Eibl. - -- gh-129107: Make the :type:`bytearray` safe under :term:`free threading`. - -- gh-128974: Fix a crash in :meth:`UnicodeError.__str__ <object.__str__>` - when custom attributes implement :meth:`~object.__str__` with - side-effects. Patch by Bénédikt Tran. - -- gh-126085: :class:`typing.TypeAliasType` now supports star unpacking. - -- gh-125331: ``from __future__ import barry_as_FLUFL`` now works in more - contexts, including when it is used in files, with the ``-c`` flag, and in - the REPL when there are multiple statements on the same line. Previously, - it worked only on subsequent lines in the REPL, and when the appropriate - flags were passed directly to :func:`compile`. Patch by Pablo Galindo. - -- gh-121464: Make concurrent iterations over the same :func:`enumerate` - iterator safe under free-threading. See `Strategy for Iterators in Free - Threading <https://github.com/python/cpython/issues/124397>`_. - -- gh-87790: Support underscore and comma as thousands separators in the - fractional part for floating-point presentation types of the new-style - string formatting (with :func:`format` or :ref:`f-strings`). Patch by - Sergey B Kirpichev. - -- gh-124445: Fix specialization of generic aliases that are generic over a - :class:`typing.ParamSpec` and have been specialized with a nested type - variable. - -- gh-120608: Adapt :func:`reversed` for use in the free-threading build. The - :func:`reversed` is still not thread-safe in the sense that concurrent - iterations may see the same object, but they will not corrupt the - interpreter state. - -Library -------- - -- gh-100388: Fix the ``platform._sys_version()`` method when ``__DATE__`` is - undefined at buildtime by changing default buildtime datetime string to - the UNIX epoch. - -Core and Builtins ------------------ - -- bpo-44369: Improve syntax errors for incorrectly closed strings. Patch by - Pablo Galindo - -C API ------ - -- gh-111178: Fix :c:type:`PyCMethod` API: replace ``size_t nargs`` with - ``Py_ssize_t nargs`` in :c:type:`PyCMethod`. Patch by Victor Stinner. - -- gh-130947: Add again :c:func:`PySequence_Fast` to the limited C API. Patch - by Victor Stinner. - -- gh-128863: The following private functions are deprecated and planned for - removal in Python 3.18: - - * :c:func:`!_PyUnicodeWriter_Init`: - replace ``_PyUnicodeWriter_Init(&writer)`` with - :c:func:`writer = PyUnicodeWriter_Create(0) <PyUnicodeWriter_Create>`. - * :c:func:`!_PyUnicodeWriter_Finish`: - replace ``_PyUnicodeWriter_Finish(&writer)`` with - :c:func:`PyUnicodeWriter_Finish(writer) <PyUnicodeWriter_Finish>`. - * :c:func:`!_PyUnicodeWriter_Dealloc`: - replace ``_PyUnicodeWriter_Dealloc(&writer)`` with - :c:func:`PyUnicodeWriter_Discard(writer) <PyUnicodeWriter_Discard>`. - * :c:func:`!_PyUnicodeWriter_WriteChar`: - replace ``_PyUnicodeWriter_WriteChar(&writer, ch)`` with - :c:func:`PyUnicodeWriter_WriteChar(writer, ch) <PyUnicodeWriter_WriteChar>`. - * :c:func:`!_PyUnicodeWriter_WriteStr`: - replace ``_PyUnicodeWriter_WriteStr(&writer, str)`` with - :c:func:`PyUnicodeWriter_WriteStr(writer, str) <PyUnicodeWriter_WriteStr>`. - * :c:func:`!_PyUnicodeWriter_WriteSubstring`: - replace ``_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)`` with - :c:func:`PyUnicodeWriter_WriteSubstring(writer, str, start, end) <PyUnicodeWriter_WriteSubstring>`. - * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: - replace ``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` with - :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) <PyUnicodeWriter_WriteUTF8>`. - * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: - replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with - :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) <PyUnicodeWriter_WriteUTF8>`. - * :c:func:`!_PyUnicodeWriter_Prepare`: (no replacement). - * :c:func:`!_PyUnicodeWriter_PrepareKind`: (no replacement). - - The `pythoncapi-compat project - <https://github.com/python/pythoncapi-compat/>`__ can be used to get these - new public functions on Python 3.13 and older. - - Patch by Victor Stinner. - -- gh-45325: Add a new ``p`` format parameter to :c:func:`Py_BuildValue` that - allows to take a C integer and produce a Python :class:`bool` object. - Patch by Pablo Galindo. - -Build ------ - -- gh-131035: Use ``-flto=thin`` for faster build times using clang-cl on - Windows. Patch by Chris Eibl. - -- gh-130740: Ensure that ``Python.h`` is included before ``stdbool.h`` - unless ``pyconfig.h`` is included before or in some platform-specific - contexts. - -- gh-130090: Building with ``PlatformToolset=ClangCL`` on Windows now - supports PGO (profile guided optimization). Patch by Chris Eibl with - invaluable support from Steve Dover. - -- gh-129819: Allow building the JIT with the tailcall interpreter. - -- gh-129989: Fix a bug where the tailcall interpreter was enabled when - ``--without-tail-call-interp`` was provided to the configure script. - -- gh-129838: Don't redefine ``_Py_NO_SANITIZE_UNDEFINED`` when compiling - with a recent GCC version and undefined sanitizer enabled. - -- gh-82909: ``#pragma``-based linking with ``python3*.lib`` can now be - switched off with :c:expr:`Py_NO_LINK_LIB`. Patch by Jean-Christophe - Fillion-Robin. - - -What's New in Python 3.14.0 alpha 5? -==================================== - -*Release date: 2025-02-11* - -macOS ------ - -- gh-91132: Update macOS installer to use ncurses 6.5. - -Tools/Demos ------------ - -- gh-129248: The iOS test runner now strips the log prefix from each line - output by the test suite. - -- gh-104400: Fix several bugs in extraction by switching to an AST parser in - :program:`pygettext`. - -Tests ------ - -- gh-129386: Add ``test.support.reset_code``, which can be used to reset - various bytecode-level optimizations and local instrumentation for a - function. - -- gh-128474: Disable ``test_embed`` test cases that segfault on BOLT - instrument binaries. The tests are only disabled when BOLT is enabled. - -- gh-128003: Add an option ``--parallel-threads=N`` to the regression test - runner that runs individual tests in multiple threads in parallel in order - to find concurrency bugs. Note that most of the test suite is not yet - reviewed for thread-safety or annotated with ``@thread_unsafe`` when - necessary. - -Security --------- - -- gh-105704: When using :func:`urllib.parse.urlsplit` and - :func:`urllib.parse.urlparse` host parsing would not reject domain names - containing square brackets (``[`` and ``]``). Square brackets are only - valid for IPv6 and IPvFuture hosts according to `RFC 3986 Section 3.2.2 - <https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2>`__. - -- gh-126108: Fix a possible ``NULL`` pointer dereference in - :c:func:`!PySys_AddWarnOptionUnicode`. - -- gh-80222: Fix bug in the folding of quoted strings when flattening an - email message using a modern email policy. Previously when a quoted string - was folded so that it spanned more than one line, the surrounding quotes - and internal escapes would be omitted. This could theoretically be used to - spoof header lines using a carefully constructed quoted string if the - resulting rendered email was transmitted or re-parsed. - -- gh-119511: Fix a potential denial of service in the :mod:`imaplib` module. - When connecting to a malicious server, it could cause an arbitrary amount - of memory to be allocated. On many systems this is harmless as unused - virtual memory is only a mapping, but if this hit a virtual address size - limit it could lead to a :exc:`MemoryError` or other process crash. On - unusual systems or builds where all allocated memory is touched and backed - by actual ram or storage it could've consumed resources doing so until - similarly crashing. - -Library -------- - -- gh-129939: Comparison pages with highlighted changes generated by the - :class:`difflib.HtmlDiff` class now support dark mode. - -- gh-129928: Raise :exc:`sqlite3.ProgrammingError` if a user-defined SQL - function with invalid number of parameters is created. Patch by Erlend - Aasland. - -- gh-129583: Update bundled pip to 25.0.1 - -- gh-129766: Fix crash in :mod:`warnings`, when calling ``_release_lock()`` - with no existing lock. - -- gh-129005: ``_pyio.FileIO.readall()`` now allocates, resizes, and fills a - data buffer using the same algorithm ``_io.FileIO.readall()`` uses. - -- gh-129646: Update the locale alias mapping in the :mod:`locale` module to - match the latest X Org locale alias mapping and support new locales in - Glibc 2.41. - -- gh-128317: Put CLI calendar highlighting in private class, removing - ``highlight_day`` from public :class:`calendar.TextCalendar` API. Patch by - Hugo van Kemenade. - -- gh-129603: Fix bugs where :class:`sqlite3.Row` objects could segfault if - their inherited :attr:`~sqlite3.Cursor.description` was set to ``None``. - Patch by Erlend Aasland. - -- gh-129559: Add :meth:`bytearray.resize` method so :class:`bytearray` can - be efficiently resized in place. - -- gh-129502: Unlikely errors in preparing arguments for :mod:`ctypes` - callback are now handled in the same way as errors raised in the callback - of in converting the result of the callback -- using - :func:`sys.unraisablehook` instead of :func:`sys.excepthook` and not - setting :data:`sys.last_exc` and other variables. - -- gh-129403: Corrected :exc:`ValueError` message for - :class:`asyncio.Barrier` and :class:`threading.Barrier`. - -- gh-129409: Fix an integer overflow in the :mod:`csv` module when writing a - data field larger than 2GB. - -- gh-126400: Add a socket *timeout* keyword argument to - :class:`logging.handlers.SysLogHandler`. - -- gh-118761: Always lazy import ``warnings`` in :mod:`threading`. Patch by - Taneli Hukkinen. - -- gh-118761: Improve import time of :mod:`subprocess` by lazy importing - ``locale`` and ``signal``. Patch by Taneli Hukkinen. - -- gh-129346: In :mod:`sqlite3`, handle out-of-memory when creating - user-defined SQL functions. - -- gh-129005: Optimize ``_pyio.FileIO.readinto`` by avoiding unnecessary - objects and copies using :func:`os.readinto`. - -- gh-129195: Support reporting call graph information from - :func:`!asyncio.staggered.staggered_race`. - -- gh-129205: Add :func:`os.readinto` to read into a :ref:`buffer object - <bufferobjects>` from a file descriptor. - -- gh-128772: Fix :mod:`pydoc` for methods with the ``__module__`` attribute - equal to ``None``. - -- gh-129061: Fix FORCE_COLOR and NO_COLOR when empty strings. Patch by Hugo - van Kemenade. - -- gh-92897: Scheduled the deprecation of the ``check_home`` argument of - :func:`sysconfig.is_python_build` to Python 3.15. - -- gh-129064: Deprecate :func:`!sysconfig.expand_makefile_vars`, in favor of - using :func:`sysconfig.get_paths` with the ``vars`` argument. - -- gh-128550: Removed an incorrect optimization relating to eager tasks in - :class:`asyncio.TaskGroup` that resulted in cancellations being missed. - -- gh-128991: Release the enter frame reference within :mod:`bdb` callback - -- gh-118761: Reduce import time of :mod:`pstats` and :mod:`zipfile` by up to - 20%, by removing unnecessary imports to :mod:`typing`. Patch by Bénédikt - Tran. - -- gh-128978: Fix a :exc:`NameError` in - :func:`!sysconfig.expand_makefile_vars`. Patch by Bénédikt Tran. - -- gh-128961: Fix a crash when setting state on an exhausted - :class:`array.array` iterator. - -- gh-128894: Fix ``traceback.TracebackException._format_syntax_error`` not - to fail on exceptions with custom metadata. - -- gh-128916: Do not attempt to set ``SO_REUSEPORT`` on sockets of address - families other than ``AF_INET`` and ``AF_INET6``, as it is meaningless - with these address families, and the call with fail with Linux kernel - 6.12.9 and newer. - -- gh-118761: Improve import time of :mod:`tomllib` by removing ``typing``, - ``string``, and ``tomllib._types`` imports. Patch by Taneli Hukkinen. - -- gh-128679: :mod:`tracemalloc`: Fix race conditions when - :func:`tracemalloc.stop` is called by a thread, while other threads are - tracing memory allocations. Patch by Victor Stinner. - -- gh-128891: Add specialized opcodes to ``opcode.opname``. - -- gh-118761: Reduce import time of :mod:`gettext` by up to ten times, by - importing :mod:`re` on demand. In particular, ``re`` is no longer - implicitly exposed as ``gettext.re``. Patch by Eli Schwartz. - -- gh-118761: Reduce the import time of :mod:`optparse` when no help text is - printed. Patch by Eli Schwartz. - -- gh-128657: Fix possible extra reference when using objects returned by - :func:`hashlib.sha256` under :term:`free threading`. - -- gh-118761: Reduce the import time of :mod:`csv` by up to five times, by - importing :mod:`re` on demand. In particular, ``re`` is no more implicitly - exposed as ``csv.re``. Patch by Bénédikt Tran. - -- gh-128308: Support the *name* keyword argument for eager tasks in - :func:`asyncio.loop.create_task`, :func:`asyncio.create_task` and - :func:`asyncio.TaskGroup.create_task`, by passing on all *kwargs* to the - task factory set by :func:`asyncio.loop.set_task_factory`. - -- gh-118761: Improve the performance of :func:`base64.b16decode` by up to - ten times by more efficiently checking the byte-string for hexadecimal - digits. Reduce the import time of :mod:`base64` by up to six times, by no - longer importing :mod:`re`. Patch by Bénédikt Tran, Chris Markiewicz, and - Adam Turner. - -- gh-128156: When using macOS system ``libffi``, support for complex types - in :mod:`ctypes` is now checked at runtime (macOS 10.15 or newer). The - types must also be available at build time. - -- gh-128636: Fix PyREPL failure when :data:`os.environ` is overwritten with - an invalid value. - -- gh-128498: Default to stdout isatty for color detection instead of stderr. - Patch by Hugo van Kemenade. - -- gh-128384: Add locking to :mod:`warnings` to avoid some data races when - free-threading is used. Change ``_warnings_runtime_state.mutex`` to be a - recursive mutex and expose it to :mod:`warnings`, via the - :func:`!_acquire_lock` and :func:`!_release_lock` functions. The lock is - held when ``filters`` and ``_filters_version`` are updated. - -- gh-128509: Add :func:`sys._is_immortal` for identifying :term:`immortal` - objects at runtime. - -- gh-128479: Fix :func:`!asyncio.staggered.staggered_race` leaking tasks and - issuing an unhandled exception. - -- gh-128427: :const:`uuid.NIL` and :const:`uuid.MAX` are now available to - represent the Nil and Max UUID formats as defined by :rfc:`9562`. - -- gh-91279: :meth:`zipfile.ZipFile.writestr` now respect - ``SOURCE_DATE_EPOCH`` that distributions can set centrally and have build - tools consume this in order to produce reproducible output. - -- gh-112064: Fix incorrect handling of negative read sizes in - :meth:`HTTPResponse.read <http.client.HTTPResponse.read>`. Patch by Yury - Manushkin. - -- gh-58956: Fixed a frame reference leak in :mod:`bdb`. - -- gh-128131: Completely support random access of uncompressed unencrypted - read-only zip files obtained by :meth:`ZipFile.open - <zipfile.ZipFile.open>`. - -- gh-127975: Avoid reusing quote types in :func:`ast.unparse` if not needed. - -- gh-115514: Fix exceptions and incomplete writes after - :class:`!asyncio._SelectorTransport` is closed before writes are - completed. - -- gh-121604: Add missing Deprecation warnings for - :const:`importlib.machinery.DEBUG_BYTECODE_SUFFIXES`, - :const:`importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES`, - :class:`importlib.machinery.WindowsRegistryFinder`, - :class:`importlib.abc.ResourceLoader`, - :meth:`importlib.abc.SourceLoader.path_mtime`. - -- gh-127873: When ``-E`` is set, only ignore ``PYTHON_COLORS`` and not - ``FORCE_COLOR``/``NO_COLOR``/``TERM`` when colourising output. Patch by - Hugo van Kemenade. - -- gh-125413: Add :attr:`pathlib.Path.info` attribute, which stores an object - implementing the :class:`pathlib.types.PathInfo` protocol (also new). The - object supports querying the file type and internally caching - :func:`~os.stat` results. Path objects generated by - :meth:`~pathlib.Path.iterdir` are initialized with file type information - gleaned from scanning the parent directory. - -- gh-127712: Fix handling of the ``secure`` argument of - :class:`logging.handlers.SMTPHandler`. - -- gh-127096: Do not recreate unnamed section on every read in - :class:`configparser.ConfigParser`. Patch by Andrey Efremov. - -- gh-124369: Deprecate ``pdb.Pdb.curframe_locals`` - -- gh-126332: Fix _pyrepl crash when entering a double CTRL-Z on an - overflowing line. - -- gh-125553: Fix round-trip invariance for backslash continuations in - :func:`tokenize.untokenize`. - -- gh-91048: Add :func:`asyncio.capture_call_graph` and - :func:`asyncio.print_call_graph` functions. - -- gh-124703: Quitting :mod:`pdb` in ``inline`` mode will emit a confirmation - prompt and exit gracefully now, instead of printing an exception - traceback. - -- gh-123987: Fixed issue in NamespaceReader where a non-path item in a - namespace path, such as a sentinel added by an editable installer, would - break resource loading. - -- gh-119349: Add the :func:`ctypes.util.dllist` function to list the loaded - shared libraries for the current process. - -- gh-55454: Add IMAP4 ``IDLE`` support to the :mod:`imaplib` module. Patch - by Forest. - -- gh-119257: Show tab completions menu below the current line, which results - in less janky behaviour, and fixes a cursor movement bug. Patch by Daniel - Hollas - -- gh-101410: Support custom messages for domain errors in the :mod:`math` - module (:func:`math.sqrt`, :func:`math.log` and :func:`math.atanh` were - modified as examples). Patch by Charlie Zhao and Sergey B Kirpichev. - -- gh-81340: Use :func:`os.copy_file_range` in :func:`shutil.copy`, - :func:`shutil.copy2`, and :func:`shutil.copyfile` functions by default. An - underlying Linux system call gives filesystems an opportunity to implement - the use of copy-on-write (in case of btrfs and XFS) or server-side copy - (in the case of NFS.) Patch by Illia Volochii. - -- bpo-27307: Add attribute and item access support to - :class:`string.Formatter` in auto-numbering mode, which allows format - strings like '{.name}' and '{[1]}'. - -IDLE ----- - -- gh-129873: Simplify displaying the IDLE doc by only copying the text - section of idle.html to idlelib/help.html. Patch by Stan Ulbrych. - -Documentation -------------- - -- gh-125722: Require Sphinx 8.1.3 or later to build the Python - documentation. Patch by Adam Turner. - -- gh-67206: Document that :const:`string.printable` is not printable in the - POSIX sense. In particular, :meth:`string.printable.isprintable() - <str.isprintable>` returns :const:`False`. Patch by Bénédikt Tran. - -Core and Builtins ------------------ - -- gh-100239: Replace the opcode BINARY_SUBSCR and its family by BINARY_OP - with oparg NB_SUBSCR. - -- gh-129732: Fixed a race in ``_Py_qsbr_reserve`` in the free threading - build. - -- gh-129763: Remove the internal ``LLTRACE`` macro (use :c:macro:`Py_DEBUG` - instead). - -- gh-129715: Improve JIT performance for generators. - -- gh-129643: Fix thread safety of :c:func:`PyList_Insert` in free-threading - builds. - -- gh-129668: Fix race condition when raising :exc:`MemoryError` in the free - threaded build. - -- gh-129643: Fix thread safety of :c:func:`PyList_SetItem` in free-threading - builds. Patch by Kumar Aditya. - -- gh-128563: Fix an issue where the "lltrace" debug feature could have been - incorrectly enabled for some frames. - -- gh-129393: On FreeBSD, :data:`sys.platform` doesn't contain the major - version anymore. It is always ``'freebsd'``, instead of ``'freebsd13'`` or - ``'freebsd14'``. - -Library -------- - -- gh-129345: Fix null pointer dereference in :func:`syslog.openlog` when an - audit hook raises an exception. - -Core and Builtins ------------------ - -- gh-129231: Improve memory layout of JIT traces. Patch by Diego Russo - -- gh-129149: Add fast path for medium-size integers in - :c:func:`PyLong_FromUnsignedLong`, :c:func:`PyLong_FromUnsignedLongLong` - and :c:func:`PyLong_FromSize_t`. - -- gh-129201: The free-threaded version of the cyclic garbage collector has - been optimized to conditionally use CPU prefetch instructions during the - collection. This can reduce collection times by making it more likely - that data is in the CPU cache when it is needed. The prefetch - instructions are enabled if the number of long-lived objects (objects - surviving a full collection) exceeds a threshold. - -- gh-129093: Fix f-strings such as ``f'{expr=}'`` sometimes not displaying - the full expression when the expression contains ``!=``. - -- gh-124363: Treat debug expressions in f-string as raw strings. Patch by - Pablo Galindo - -- gh-128714: Fix the potential races in get/set dunder methods - ``__annotations__``, ``__annotate__`` and ``__type_params__`` for function - object, and add related tests. - -- gh-128799: Add frame of ``except*`` to traceback when it wraps a naked - exception. - -- gh-128842: Collect JIT memory stats using pystats. Patch by Diego Russo. - -- gh-100239: Specialize ``BINARY_OP`` for bitwise logical operations on - compact ints. - -- gh-128910: Undocumented and unused private C-API functions - ``_PyTrash_begin`` and ``_PyTrash_end`` are removed. - -- gh-128807: Add a marking phase to the free-threaded GC. This is similar - to what was done in GH-126491. Since the free-threaded GC does not have - generations and is not incremental, the marking phase looks for all - objects reachable from known roots. The roots are objects known to not be - garbage, like the module dictionary for :mod:`sys`. For most programs, - this marking phase should make the GC a bit faster since typically less - work is done per object. - -- gh-100239: Add opcode ``BINARY_OP_EXTEND`` which executes a pair of - functions (guard and specialization functions) accessed from the inline - cache. - -- gh-128563: A new type of interpreter has been added to CPython. This - interpreter uses tail calls for its instruction handlers. Preliminary - benchmark results suggest 7-11% geometric mean faster on pyperformance - (depending on platform), and up to 30% faster on Python-intensive - workloads. This interpreter currently only works on newer compilers, such - as ``clang-19``. Other compilers will continue using the old interpreter. - Patch by Ken Jin, with ideas on how to implement this in CPython by Mark - Shannon, Garret Gu, Haoran Xu, and Josh Haberman. - -- gh-126703: Improve performance of iterating over lists and tuples by using - a freelist for the iterator objects. - -- gh-127953: The time to handle a ``LINE`` event in sys.monitoring (and - sys.settrace) is now independent of the number of lines in the code - object. - -- gh-128330: Restore terminal control characters on REPL exit. - -- gh-128016: Improved the ``SyntaxWarning`` message for invalid escape - sequences to clarify that such sequences will raise a ``SyntaxError`` in - future Python releases. The new message also suggests a potential fix, - i.e., ``Did you mean "\\e"?``. - -- gh-126004: Fix handling of :attr:`UnicodeError.start` and - :attr:`UnicodeError.end` values in the :func:`codecs.replace_errors` error - handler. Patch by Bénédikt Tran. - -- gh-126004: Fix handling of :attr:`UnicodeError.start` and - :attr:`UnicodeError.end` values in the - :func:`codecs.backslashreplace_errors` error handler. Patch by Bénédikt - Tran. - -- gh-126004: Fix handling of :attr:`UnicodeError.start` and - :attr:`UnicodeError.end` values in the - :func:`codecs.xmlcharrefreplace_errors` error handler. Patch by Bénédikt - Tran. - -- gh-127119: Slightly optimize the :class:`int` deallocator. - -- gh-127349: Fixed the error when resizing terminal in Python REPL. Patch by - Semyon Moroz. - -- gh-125723: Fix crash with ``gi_frame.f_locals`` when generator frames - outlive their generator. Patch by Mikhail Efimov. - -Library -------- - -- gh-126349: Add :func:`turtle.fill`, :func:`turtle.poly` and - :func:`turtle.no_animation` context managers. Patch by Marie Roald and - Yngve Mardal Moe. - -Core and Builtins ------------------ - -- gh-115911: If the current working directory cannot be determined due to - permissions, then import will no longer raise :exc:`PermissionError`. - Patch by Alex Willmer. - -Library -------- - -- gh-112713: Added support for the ``Partitioned`` cookie flag in - :mod:`http.cookies`. - -C API ------ - -- gh-129533: Update :c:func:`PyGC_Enable()`, :c:func:`PyGC_Disable()`, - :c:func:`PyGC_IsEnabled()` to use atomic operation for thread-safety at - free-threading build. Patch by Donghee Na. - -- gh-89188: Implement :c:func:`PyUnicode_KIND` and :c:func:`PyUnicode_DATA` - as function, in addition to the macros with the same names. The macros - rely on C bit fields which have compiler-specific layout. Patch by Victor - Stinner. - -- gh-91417: Remove :c:func:`PySequence_Fast` from the limited C API, since - this function has to be used with :c:macro:`PySequence_Fast_GET_ITEM` - which never worked in the limited C API. Patch by Victor Stinner. - -- gh-128509: Add :c:func:`PyUnstable_IsImmortal` for determining whether an - object is :term:`immortal`. - -- gh-129033: Remove ``_PyInterpreterState_GetConfigCopy()`` and - ``_PyInterpreterState_SetConfig()`` private functions. Use instead - :c:func:`PyConfig_Get` and :c:func:`PyConfig_Set`, public C API added by - :pep:`741` "Python Configuration C API". Patch by Victor Stinner. - -- gh-129033: Remove the private ``_Py_InitializeMain()`` function. It was a - :term:`provisional API` added to Python 3.8 by :pep:`587`. Patch by Victor - Stinner. - -- gh-128844: Add :c:func:`PyUnstable_TryIncRef` and - :c:func:`PyUnstable_EnableTryIncRef` unstable APIs. These are helpers for - dealing with unowned references in a thread-safe way, particularly in the - free threading build. - -- gh-128911: Add :c:func:`PyImport_ImportModuleAttr` and - :c:func:`PyImport_ImportModuleAttrString` helper functions to import a - module and get an attribute of the module. Patch by Victor Stinner. - -- gh-128863: The following private functions are deprecated and planned for - removal in Python 3.18: - - * :c:func:`!_PyBytes_Join`: use :c:func:`PyBytes_Join`. - * :c:func:`!_PyDict_GetItemStringWithError`: use :c:func:`PyDict_GetItemStringRef`. - * :c:func:`!_PyDict_Pop()`: use :c:func:`PyDict_Pop`. - * :c:func:`!_PyLong_Sign()`: use :c:func:`PyLong_GetSign`. - * :c:func:`!_PyLong_FromDigits` and :c:func:`!_PyLong_New`: - use :c:func:`PyLongWriter_Create`. - * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. - * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. - * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. - * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. - - The `pythoncapi-compat project - <https://github.com/python/pythoncapi-compat/>`__ can be used to get these - new public functions on Python 3.13 and older. - - Patch by Victor Stinner. - -- gh-126599: Remove some internal test APIs for the experimental JIT - compiler. - -- gh-127925: Convert the :mod:`decimal` module to use :pep:`757` C API - (export-import integers), offering some speed-up if the integer part of - the :class:`~decimal.Decimal` instance is small. Patch by Sergey B - Kirpichev. - -Build ------ - -- gh-129660: Drop ``test_embed`` from PGO training, whose contribution in - recent versions is considered to be ignorable. - -- gh-128902: Fix compile errors with Clang 9 and older due to lack of - ``__attribute__((fallthrough))`` support. - - -What's New in Python 3.14.0 alpha 4? -==================================== - -*Release date: 2025-01-14* - -macOS ------ - -- gh-127592: Usage of the unified Apple System Log APIs was disabled when - the minimum macOS version is earlier than 10.12. - -Tools/Demos ------------ - -- gh-128152: Fix a bug where Argument Clinic's C pre-processor parser tried - to parse pre-processor directives inside C comments. Patch by Erlend - Aasland. - -Tests ------ - -- gh-128690: Temporarily do not use test_embed in PGO profile builds until - the problem with test_init_pyvenv_cfg failing in some configurations is - resolved. - -Library -------- - -- gh-128731: Fix :exc:`ResourceWarning` in - :meth:`urllib.robotparser.RobotFileParser.read`. - -- gh-71339: Add new assertion methods for :mod:`unittest`: - :meth:`~unittest.TestCase.assertHasAttr`, - :meth:`~unittest.TestCase.assertNotHasAttr`, - :meth:`~unittest.TestCase.assertIsSubclass`, - :meth:`~unittest.TestCase.assertNotIsSubclass` - :meth:`~unittest.TestCase.assertStartsWith`, - :meth:`~unittest.TestCase.assertNotStartsWith`, - :meth:`~unittest.TestCase.assertEndsWith` and - :meth:`~unittest.TestCase.assertNotEndsWith`. - -- gh-118761: Improve import time of :mod:`pickle` by 25% by removing an - unnecessary regular expression. As such, :mod:`re` is no more implicitly - available as ``pickle.re``. Patch by Bénédikt Tran. - -- gh-128661: Fixes :func:`typing.evaluate_forward_ref` not showing - deprecation when ``type_params`` arg is not passed. - -- gh-128562: Fix possible conflicts in generated :mod:`tkinter` widget names - if the widget class name ends with a digit. - -- gh-128559: Improved import time of :mod:`asyncio`. - -- gh-128552: Fix cyclic garbage introduced by - :meth:`asyncio.loop.create_task` and :meth:`asyncio.TaskGroup.create_task` - holding a reference to the created task if it is eager. - -- gh-128340: Add internal thread safe handle to be used in - :meth:`asyncio.loop.call_soon_threadsafe` for thread safe cancellation. - -- gh-128182: Fix crash when using :mod:`ctypes` pointers concurrently on the - :term:`free threaded <free threading>` build. - -- gh-128400: Only show the current thread in :mod:`faulthandler` on the - :term:`free threaded <free threading>` build to prevent races. - -- gh-128400: Fix crash when using :func:`faulthandler.dump_traceback` while - other threads are active on the :term:`free threaded <free threading>` - build. - -- gh-128388: Fix ``PyREPL`` on Windows to support more keybindings, like the - :kbd:`Control-←` and :kbd:`Control-→` word-skipping keybindings and those - with meta (i.e. :kbd:`Alt`), e.g. :kbd:`Alt-d` to ``kill-word`` or - :kbd:`Alt-Backspace` ``backward-kill-word``. - -- gh-88834: Unify the instance check for :class:`typing.Union` and - :class:`types.UnionType`: :class:`!Union` now uses the instance checks - against its parameters instead of the subclass checks. - -- gh-128302: Fix - :meth:`!xml.dom.xmlbuilder.DOMEntityResolver.resolveEntity`, which was - broken by the Python 3.0 transition. - -- gh-128317: Highlight today in colour in :mod:`calendar`'s CLI output. - Patch by Hugo van Kemenade. - -- gh-128302: Allow :meth:`!xml.dom.xmlbuilder.DOMParser.parse` to correctly - handle :class:`!xml.dom.xmlbuilder.DOMInputSource` instances that only - have a :attr:`!systemId` attribute set. - -- gh-128151: Improve generation of :class:`~uuid.UUID` objects version 3, 4, - 5, and 8 via their dedicated functions by 30%. Patch by Bénédikt Tran. - -- gh-128118: Improve performance of :func:`copy.copy` by 30% via a fast path - for atomic types and container types. - -- gh-127946: Fix crash when modifying :class:`ctypes._CFuncPtr` objects - concurrently on the :term:`free threaded <free threading>` build. - -- gh-128062: Revert the font of :mod:`turtledemo`'s menu bar to its default - value and display the shortcut keys in the correct position. - -- gh-128014: Fix resetting the default window icon by passing ``default=''`` - to the :mod:`tkinter` method :meth:`!wm_iconbitmap`. - -- gh-41872: Fix quick extraction of module docstrings from a file in - :mod:`pydoc`. It now supports docstrings with single quotes, escape - sequences, raw string literals, and other Python syntax. - -- gh-127060: Set TERM environment variable to "dumb" to disable traceback - colors in IDLE, since IDLE doesn't understand ANSI escape sequences. Patch - by Victor Stinner. - -- gh-126742: Fix support of localized error messages reported by - :manpage:`dlerror(3)` and :manpage:`gdbm_strerror <gdbm(3)>` in - :mod:`ctypes` and :mod:`dbm.gnu` functions respectively. Patch by Bénédikt - Tran. - -- gh-122548: Adds two new local events to sys.monitoring, ``BRANCH_LEFT`` - and ``BRANCH_RIGHT``. This allows the two arms of the branch to be - disabled independently, which should hugely improve performance of - branch-level coverage tools. The old branch event, ``BRANCH`` is now - deprecated. - -- gh-127847: Fix the position when doing interleaved seeks and reads in - uncompressed, unencrypted zip files returned by - :meth:`zipfile.ZipFile.open`. - -- gh-127688: Add the :data:`~os.SCHED_DEADLINE` and :data:`~os.SCHED_NORMAL` - constants to the :mod:`os` module. - -- gh-83662: Add missing ``__class_getitem__`` method to the Python - implementation of :func:`functools.partial`, to make it compatible with - the C version. This is mainly relevant for alternative Python - implementations like PyPy and GraalPy, because CPython will usually use - the C-implementation of that function. - -- gh-127586: :class:`multiprocessing.pool.Pool` now properly restores - blocked signal handlers of the parent thread when creating processes via - either *spawn* or *forkserver*. - -- gh-98188: Fix an issue in :meth:`email.message.Message.get_payload` where - data cannot be decoded if the Content Transfer Encoding mechanism contains - trailing whitespaces or additional junk text. Patch by Hui Liu. - -- gh-127529: Correct behavior of - :func:`!asyncio.selector_events.BaseSelectorEventLoop._accept_connection` - in handling :exc:`ConnectionAbortedError` in a loop. This improves - performance on OpenBSD. - -- gh-127360: When a descriptive error message cannot be provided for an - :exc:`ssl.SSLError`, the "unknown error" message now shows the internal - error code (as retrieved by ``ERR_get_error`` and similar OpenSSL - functions). - -- gh-127196: Fix crash when dict with keys in invalid encoding were passed - to several functions in ``_interpreters`` module. - -- gh-124130: Fix a bug in matching regular expression ``\B`` in empty input - string. Now it is always the opposite of ``\b``. To get an old behavior, - use ``(?!\A\Z)\B``. To get a new behavior in old Python versions, use - ``(?!\b)``. - -- gh-126639: :class:`tempfile.NamedTemporaryFile` will now issue a - :exc:`ResourceWarning` when it is finalized by the garbage collector - without being explicitly closed. - -- gh-126624: Expose error code - :data:`~xml.parsers.expat.errors.XML_ERROR_NOT_STARTED` of Expat >=2.6.4 - in :mod:`xml.parsers.expat.errors`. - -- gh-126225: :mod:`getopt` and :mod:`optparse` are no longer marked as - deprecated. There are legitimate reasons to use one of these modules in - preference to :mod:`argparse`, and none of these modules are at risk of - being removed from the standard library. Of the three, ``argparse`` - remains the recommended default choice, *unless* one of the concerns noted - at the top of the ``optparse`` module documentation applies. - -- gh-124761: Add :data:`~socket.SO_REUSEPORT_LB` constant to :mod:`socket` - for FreeBSD. - -- gh-121720: :class:`enum.EnumDict` can now be used without resorting to - private API. - -- gh-123424: Add :meth:`zipfile.ZipInfo._for_archive` setting default - properties on :class:`~zipfile.ZipInfo` objects. Patch by Bénédikt Tran - and Jason R. Coombs. - -- gh-121676: Deprecate calling the Python implementation of - :meth:`functools.reduce` with a ``function`` or ``sequence`` as a - :term:`keyword argument`. This will be forbidden in Python 3.16 in order - to match the C implementation. - -- gh-112015: :func:`ctypes.memoryview_at` now exists to create a - :class:`memoryview` object that refers to the supplied pointer and length. - This works like :func:`ctypes.string_at` except it avoids a buffer copy, - and is typically useful when implementing pure Python callback functions - that are passed dynamically-sized buffers. - -- gh-95371: Added support for other image formats (PNG, PGM, and PPM) to the - turtle module. Patch by Shin-myoung-serp. - -Core and Builtins ------------------ - -- gh-128078: Fix a :exc:`SystemError` when using :func:`anext` with a - default tuple value. Patch by Bénédikt Tran. - -- gh-128717: Fix a crash when setting the recursion limit while other - threads are active on the :term:`free threaded <free threading>` build. - -- gh-124483: Treat ``Py_DECREF`` and variants as escaping when generating - opcode and uop metadata. This prevents the possibility of a ``__del__`` - method causing the JIT to behave incorrectly. - -- gh-126703: Improve performance of class methods by using a freelist. - -- gh-128137: Update :c:type:`PyASCIIObject` layout to handle interned field - with the atomic operation. Patch by Donghee Na. - -Library -------- - -- gh-128192: Upgrade HTTP digest authentication algorithm for - :mod:`urllib.request` by supporting SHA-256 digest authentication as - specified in :rfc:`7616`. - -Core and Builtins ------------------ - -- gh-126868: Increase usage of freelist for :class:`int` allocation. - -- gh-114203: Optimize ``Py_BEGIN_CRITICAL_SECTION`` for simple recursive - calls. - -- gh-127705: Adds stackref debugging when ``Py_STACKREF_DEBUG`` is set. - Finds all double-closes and leaks, logging the origin and last borrow. - - Inspired by HPy's debug mode. - https://docs.hpyproject.org/en/latest/debug-mode.html - -- gh-128079: Fix a bug where :keyword:`except* <except_star>` does not - properly check the return value of an :exc:`ExceptionGroup`'s - :meth:`~BaseExceptionGroup.split` function, leading to a crash in some - cases. Now when :meth:`~BaseExceptionGroup.split` returns an invalid - object, :keyword:`except* <except_star>` raises a :exc:`TypeError` with - the original raised :exc:`ExceptionGroup` object chained to it. - -- gh-128030: Avoid error from calling ``PyModule_GetFilenameObject`` on a - non-module object when importing a non-existent symbol from a non-module - object. - -Library -------- - -- gh-128035: Indicate through :data:`ssl.HAS_PHA` whether the :mod:`ssl` - module supports TLSv1.3 post-handshake client authentication (PHA). Patch - by Will Childs-Klein. - -Core and Builtins ------------------ - -- gh-127274: Add a new flag, ``CO_METHOD``, to :attr:`~codeobject.co_flags` - that indicates whether the code object belongs to a function defined in - class scope. - -- gh-66409: During the :ref:`path initialization <sys-path-init>`, we now - check if ``base_exec_prefix`` is the same as ``base_prefix`` before - falling back to searching the Python interpreter directory. - -- gh-127970: We now use the location of the ``libpython`` runtime library - used in the current process to determine :data:`sys.base_prefix` on all - platforms implementing the `dladdr - <https://pubs.opengroup.org/onlinepubs/9799919799/functions/dladdr.html>`_ - function defined by the UNIX standard — this includes Linux, Android, - macOS, iOS, FreeBSD, etc. This was already the case on Windows and macOS - Framework builds. - -- gh-127773: Do not use the type attribute cache for types with incompatible - :term:`MRO`. - -- gh-127903: ``Objects/unicodeobject.c``: fix a crash on DEBUG builds in - ``_copy_characters`` when there is nothing to copy. - -- gh-127809: Fix an issue where the experimental JIT may infer an incorrect - result type for exponentiation (``**`` and ``**=``), leading to bugs or - crashes. - -- gh-126862: Fix a possible overflow when a class inherits from an absurd - number of super-classes. Reported by Valery Fedorenko. Patch by Bénédikt - Tran. - -C API ------ - -- gh-128400: :c:func:`Py_FatalError` no longer shows all threads on the - :term:`free threaded <free threading>` build to prevent crashes. - -- gh-128629: Add macros :c:func:`Py_PACK_VERSION` and - :c:func:`Py_PACK_FULL_VERSION` for bit-packing Python version numbers. - -- gh-128008: Add :c:func:`PyWeakref_IsDead` function, which tests if a weak - reference is dead. - -- gh-127350: Add :c:func:`Py_fopen` function to open a file. Similar to the - :c:func:`!fopen` function, but the *path* parameter is a Python object and - an exception is set on error. Add also :c:func:`Py_fclose` function to - close a file, function needed for Windows support. Patch by Victor - Stinner. - -Build ------ - -- gh-128627: For Emscripten builds the function pointer cast call trampoline - now uses the wasm-gc ref.test instruction if it's available instead of - Wasm JS type reflection. - -- gh-128472: Skip BOLT optimization of functions using computed gotos, - fixing errors on build with LLVM 19. - -- gh-115765: GNU Autoconf 2.72 is now required to generate - :file:`configure`. Patch by Erlend Aasland. - -- gh-123925: Fix building the :mod:`curses` module on platforms with - libncurses but without libncursesw. - -- gh-90905: Add support for cross-compiling to x86_64 on aarch64/arm64 - macOS. - -- gh-128321: Set ``LIBS`` instead of ``LDFLAGS`` when checking if - :mod:`sqlite3` library functions are available. This fixes the ordering of - linked libraries during checks, which was incorrect when using a - statically linked ``libsqlite3``. - -- gh-100384: Error on ``unguarded-availability`` in macOS builds, preventing - invalid use of symbols that are not available in older versions of the OS. - -- gh-128104: Remove ``Py_STRFTIME_C99_SUPPORT`` conditions in favor of - requiring C99 :manpage:`strftime(3)` specifier support at build time. When - cross-compiling, there is no build time check and support is assumed. - -- gh-127951: Add option ``--pystats`` to the Windows build to enable - performance statistics collection. - - -What's New in Python 3.14.0 alpha 3? -==================================== - -*Release date: 2024-12-17* - -Windows -------- - -- gh-127353: Allow to force color output on Windows using environment - variables. Patch by Andrey Efremov. - -- gh-125729: Makes the presence of the :mod:`turtle` module dependent on the - Tcl/Tk installer option. Previously, the module was always installed but - would be unusable without Tcl/Tk. - -Tools/Demos ------------ - -- gh-126700: Add support for multi-argument :mod:`gettext` functions in - :program:`pygettext.py`. - -Tests ------ - -- gh-127906: Test the limited C API in test_cppext. Patch by Victor Stinner. - -- gh-127637: Add tests for the :mod:`dis` command-line interface. Patch by - Bénédikt Tran. - -- gh-126925: iOS test results are now streamed during test execution, and - the deprecated xcresulttool is no longer used. - -- gh-127076: Disable strace based system call tests when LD_PRELOAD is set. - -- gh-127076: Filter out memory-related ``mmap``, ``munmap``, and - ``mprotect`` calls from file-related ones when testing :mod:`io` behavior - using strace. - -Security --------- - -- gh-127655: Fixed the - :class:`!asyncio.selector_events._SelectorSocketTransport` transport not - pausing writes for the protocol when the buffer reaches the high water - mark when using :meth:`asyncio.WriteTransport.writelines`. - -Library -------- - -- gh-126907: Fix crash when using :mod:`atexit` concurrently on the - :term:`free-threaded <free threading>` build. - -- gh-127870: Detect recursive calls in ctypes ``_as_parameter_`` handling. - Patch by Victor Stinner. - -- gh-127732: The :mod:`platform` module now correctly detects Windows Server - 2025. - -- gh-126789: Fixed :func:`sysconfig.get_config_vars`, - :func:`sysconfig.get_paths`, and siblings, returning outdated cached data - if the value of :data:`sys.prefix` or :data:`sys.exec_prefix` changes. - Overwriting :data:`sys.prefix` or :data:`sys.exec_prefix` still is - discouraged, as that might break other parts of the code. - -- gh-127718: Add colour to :mod:`test.regrtest` output. Patch by Hugo van - Kemenade. - -- gh-127610: Added validation for more than one var-positional or - var-keyword parameters in :class:`inspect.Signature`. Patch by Maxim - Ageev. - -- gh-127627: Added ``posix._emscripten_debugger()`` to help with debugging - the test suite on the Emscripten target. - -- gh-126821: macOS and iOS apps can now choose to redirect stdout and stderr - to the system log during interpreter configuration. - -- gh-93312: Include ``<sys/pidfd.h>`` to get ``os.PIDFD_NONBLOCK`` constant. - Patch by Victor Stinner. - -- gh-127481: Add the ``EPOLLWAKEUP`` constant to the :mod:`select` module. - -- gh-127065: Make :func:`operator.methodcaller` thread-safe and re-entrant - safe. - -- gh-127321: :func:`pdb.set_trace` will not stop at an opcode that does not - have an associated line number anymore. - -- gh-127429: Fixed bug where, on cross-builds, the :mod:`sysconfig` POSIX - data was being generated with the host Python's ``Makefile``. The data is - now generated from current build's ``Makefile``. - -- gh-127413: Add the :option:`dis --specialized` command-line option to show - specialized bytecode. Patch by Bénédikt Tran. - -- gh-125413: Revert addition of :meth:`!pathlib.Path.scandir`. This method - was added in 3.14.0a2. The optimizations remain for file system paths, but - other subclasses should only have to implement - :meth:`pathlib.Path.iterdir`. - -- gh-127257: In :mod:`ssl`, system call failures that OpenSSL reports using - ``ERR_LIB_SYS`` are now raised as :exc:`OSError`. - -- gh-59705: On Linux, :class:`threading.Thread` now sets the thread name to - the operating system. Patch by Victor Stinner. - -- gh-127303: Publicly expose :data:`~token.EXACT_TOKEN_TYPES` in - :attr:`!token.__all__`. - -- gh-127331: :mod:`ssl` can show descriptions for errors added in OpenSSL - 3.4. - -- gh-123967: Fix faulthandler for trampoline frames. If the top-most frame - is a trampoline frame, skip it. Patch by Victor Stinner. - -- gh-127178: A ``_sysconfig_vars_(...).json`` file is now shipped in the - standard library directory. It contains the output of - :func:`sysconfig.get_config_vars` on the default environment encoded as - JSON data. This is an implementation detail, and may change at any time. - -- gh-127072: Remove outdated ``socket.NETLINK_*`` constants not present in - Linux kernels beyond 2.6.17. - -- gh-127255: The :func:`~ctypes.CopyComPointer` function is now public. - Previously, this was private and only available in ``_ctypes``. - -- gh-127182: Fix :meth:`!io.StringIO.__setstate__` crash, when :const:`None` - was passed as the first value. - -- gh-127217: Fix :func:`urllib.request.pathname2url` for paths starting with - multiple slashes on Posix. - -- gh-125866: :func:`urllib.request.pathname2url` now adds an empty authority - when generating a URL for a path that begins with exactly one slash. For - example, the path ``/etc/hosts`` is converted to the scheme-less URL - ``///etc/hosts``. As a result of this change, URLs without authorities are - only generated for relative paths. - -- gh-127221: Add colour to :mod:`unittest` output. Patch by Hugo van - Kemenade. - -- gh-127035: Fix :mod:`shutil.which` on Windows. Now it looks at direct - match if and only if the command ends with a PATHEXT extension or X_OK is - not in mode. Support extensionless files if "." is in PATHEXT. Support - PATHEXT extensions that end with a dot. - -- gh-122273: Support PyREPL history on Windows. Patch by devdanzin and - Victor Stinner. - -- gh-125866: :func:`urllib.request.pathname2url` and - :func:`~urllib.request.url2pathname` no longer convert Windows drive - letters to uppercase. - -- gh-127078: Fix issue where :func:`urllib.request.url2pathname` failed to - discard an extra slash before a UNC drive in the URL path on Windows. - -- gh-126766: Fix issue where :func:`urllib.request.url2pathname` failed to - discard any 'localhost' authority present in the URL. - -- gh-127065: Fix crash when calling a :func:`operator.methodcaller` instance - from multiple threads in the free threading build. - -- gh-127090: Fix value of :attr:`urllib.response.addinfourl.url` for - ``file:`` URLs that express relative paths and absolute Windows paths. The - canonical URL generated by :func:`urllib.request.pathname2url` is now - used. - -- gh-126992: Fix LONG and INT opcodes to only use base 10 for string to - integer conversion in :mod:`pickle`. - -- gh-126997: Fix support of STRING and GLOBAL opcodes with non-ASCII - arguments in :mod:`pickletools`. :func:`pickletools.dis` now outputs - non-ASCII bytes in STRING, BINSTRING and SHORT_BINSTRING arguments as - escaped (``\xXX``). - -- gh-126316: :mod:`grp`: Make :func:`grp.getgrall` thread-safe by adding a - mutex. Patch by Victor Stinner. - -- gh-126618: Fix the representation of :class:`itertools.count` objects when - the count value is :data:`sys.maxsize`. - -- gh-126615: The :exc:`~ctypes.COMError` exception is now public. - Previously, this was private and only available in ``_ctypes``. - -- gh-126985: When running under a virtual environment with the :mod:`site` - disabled (see :option:`-S`), :data:`sys.prefix` and - :data:`sys.base_prefix` will now point to the virtual environment, instead - of the base installation. - -- gh-112192: In the :mod:`trace` module, increase the coverage precision - (``cov%``) to one decimal. - -- gh-118761: Improve import time of :mod:`mimetypes` by around 11-16 times. - Patch by Hugo van Kemenade. - -- gh-126947: Raise :exc:`TypeError` in - :meth:`!_pydatetime.timedelta.__new__` if the passed arguments are not - :class:`int` or :class:`float`, so that the Python implementation is in - line with the C implementation. - -- gh-126946: Improve the :exc:`~getopt.GetoptError` error message when a - long option prefix matches multiple accepted options in - :func:`getopt.getopt` and :func:`getopt.gnu_getopt`. - -- gh-126899: Make tkinter widget methods :meth:`!after` and - :meth:`!after_idle` accept arguments passed by keyword. - -- gh-85168: Fix issue where :func:`urllib.request.url2pathname` and - :func:`~urllib.request.pathname2url` always used UTF-8 when quoting and - unquoting file URIs. They now use the :term:`filesystem encoding and error - handler`. - -- gh-126780: Fix :func:`os.path.normpath` for drive-relative paths on - Windows. - -- gh-126775: Make :func:`linecache.checkcache` thread safe and GC - re-entrancy safe. - -- gh-126601: Fix issue where :func:`urllib.request.pathname2url` raised - :exc:`OSError` when given a Windows path containing a colon character not - following a drive letter, such as before an NTFS alternate data stream. - -- gh-126727: ``locale.nl_langinfo(locale.ERA)`` now returns multiple era - description segments separated by semicolons. Previously it only returned - the first segment on platforms with Glibc. - -- gh-85046: Add :data:`~errno.EHWPOISON` error code to :mod:`errno`. - -- gh-118201: Fixed intermittent failures of :any:`os.confstr`, - :any:`os.pathconf` and :any:`os.sysconf` on iOS and Android. - -- gh-86463: The ``usage`` parameter of :class:`argparse.ArgumentParser` no - longer affects the default value of the ``prog`` parameter in subparsers. - -- gh-124008: Fix possible crash (in debug build), incorrect output or - returning incorrect value from raw binary ``write()`` when writing to - console on Windows. - -- gh-123401: The :mod:`http.cookies` module now supports parsing obsolete - :rfc:`850` date formats, in accordance with :rfc:`9110` requirements. - Patch by Nano Zheng. - -- gh-122431: :func:`readline.append_history_file` now raises a - :exc:`ValueError` when given a negative value. - -- gh-122356: Guarantee that the position of a file-like object passed to - :func:`zipfile.is_zipfile` is left untouched after the call. Patch by - Bénédikt Tran. - -- gh-122288: Improve the performances of :func:`fnmatch.translate` by a - factor 1.7. Patch by Bénédikt Tran. - -- gh-88110: Fixed :class:`multiprocessing.Process` reporting a ``.exitcode`` - of 1 even on success when using the ``"fork"`` start method while using a - :class:`concurrent.futures.ThreadPoolExecutor`. - -- gh-97514: Authentication was added to the :mod:`multiprocessing` - forkserver start method control socket so that only processes with the - authentication key generated by the process that spawned the forkserver - can control it. This is an enhancement over the other :gh:`97514` fixes - so that access is no longer limited only by filesystem permissions. - - The file descriptor exchange of control pipes with the forked worker - process now requires an explicit acknowledgement byte to be sent over the - socket after the exchange on all forkserver supporting platforms. That - makes testing the above much easier. - -Documentation -------------- - -- gh-127347: Publicly expose :func:`traceback.print_list` in - :attr:`!traceback.__all__`. - -Core and Builtins ------------------ - -- gh-127740: Fix error message in :func:`bytes.fromhex` when given an odd - number of digits to properly indicate that an even number of hexadecimal - digits is required. - -- gh-127058: ``PySequence_Tuple`` now creates the resulting tuple - atomically, preventing partially created tuples being visible to the - garbage collector or through ``gc.get_referrers()`` - -- gh-127599: Fix statistics for increments of object reference counts (in - particular, when a reference count was increased by more than 1 in a - single operation). - -- gh-127651: When raising :exc:`ImportError` for missing symbols in ``from`` - imports, use ``__file__`` in the error message if ``__spec__.origin`` is - not a location - -- gh-127582: Fix non-thread-safe object resurrection when calling finalizers - and watcher callbacks in the free threading build. - -- gh-127434: The iOS compiler shims can now accept arguments with spaces. - -- gh-127536: Add missing locks around some list assignment operations in the - free threading build. - -- gh-127085: Fix race when exporting a buffer from a :class:`memoryview` - object on the :term:`free-threaded <free threading>` build. - -- gh-127238: Correct error message for :func:`sys.set_int_max_str_digits`. - -- gh-113841: Fix possible undefined behavior division by zero in - :class:`complex`'s :c:func:`_Py_c_pow`. - -Library -------- - -- gh-127133: Calling :meth:`argparse.ArgumentParser.add_argument_group` on - an argument group, and calling - :meth:`argparse.ArgumentParser.add_argument_group` or - :meth:`argparse.ArgumentParser.add_mutually_exclusive_group` on a mutually - exclusive group now raise exceptions. This nesting was never supported, - often failed to work correctly, and was unintentionally exposed through - inheritance. This functionality has been deprecated since Python 3.11. - -Core and Builtins ------------------ - -- gh-126491: Add a marking phase to the GC. All objects that can be - transitively reached from builtin modules or the stacks are marked as - reachable before cycle detection. This reduces the amount of work done by - the GC by approximately half. - -- gh-127020: Fix a crash in the free threading build when - :c:func:`PyCode_GetCode`, :c:func:`PyCode_GetVarnames`, - :c:func:`PyCode_GetCellvars`, or :c:func:`PyCode_GetFreevars` were called - from multiple threads at the same time. - -- gh-127010: Simplify GC tracking of dictionaries. All dictionaries are - tracked when created, rather than being lazily tracked when a trackable - object was added to them. This simplifies the code considerably and - results in a slight speedup. - -- gh-126980: Fix :meth:`~object.__buffer__` of :class:`bytearray` crashing - when :attr:`~inspect.BufferFlags.READ` or - :attr:`~inspect.BufferFlags.WRITE` are passed as flags. - -- gh-126937: Fix :exc:`TypeError` when a :class:`ctypes.Structure` has a - field size that doesn't fit into an unsigned 16-bit integer. Instead, the - maximum number of *bits* is :data:`sys.maxsize`. - -- gh-126868: Increase performance of :class:`int` by adding a freelist for - compact ints. - -- gh-126881: Fix crash in finalization of dtoa state. Patch by Kumar Aditya. - -- gh-126892: Require cold or invalidated code to "warm up" before being JIT - compiled again. - -- gh-126091: Ensure stack traces are complete when throwing into a generator - chain that ends in a custom generator. - -- gh-126024: Optimize decoding of short UTF-8 sequences containing non-ASCII - characters by approximately 15%. - -- gh-125420: Add :meth:`memoryview.index` to :class:`memoryview` objects. - Patch by Bénédikt Tran. - -- gh-125420: Add :meth:`memoryview.count` to :class:`memoryview` objects. - Patch by Bénédikt Tran. - -- gh-124470: Fix crash in free-threaded builds when replacing object - dictionary while reading attribute on another thread - -- gh-69639: Implement mixed-mode arithmetic rules combining real and complex - numbers as specified by C standards since C99. Patch by Sergey B - Kirpichev. - -- gh-120010: Correct invalid corner cases which resulted in ``(nan+nanj)`` - output in complex multiplication, e.g., ``(1e300+1j)*(nan+infj)``. Patch - by Sergey B Kirpichev. - -- gh-109746: If :func:`!_thread.start_new_thread` fails to start a new - thread, it deletes its state from interpreter and thus avoids its repeated - cleanup on finalization. - -C API ------ - -- gh-127896: The previously undocumented function :c:func:`PySequence_In` is - :term:`soft deprecated`. Use :c:func:`PySequence_Contains` instead. - -- gh-127791: Fix loss of callbacks after more than one call to - :c:func:`PyUnstable_AtExit`. - -- gh-127691: The :ref:`Unicode Exception Objects <unicodeexceptions>` C API - now raises a :exc:`TypeError` if its exception argument is not a - :exc:`UnicodeError` object. Patch by Bénédikt Tran. - -- gh-123378: Ensure that the value of :attr:`UnicodeEncodeError.end - <UnicodeError.end>` retrieved by :c:func:`PyUnicodeEncodeError_GetEnd` - lies in ``[min(1, objlen), max(min(1, objlen), objlen)]`` where *objlen* - is the length of :attr:`UnicodeEncodeError.object <UnicodeError.object>`. - Similar arguments apply to :exc:`UnicodeDecodeError` and - :exc:`UnicodeTranslateError` and their corresponding C interface. Patch by - Bénédikt Tran. - -- gh-127314: Improve error message when calling the C API without an active - thread state on the :term:`free-threaded <free threading>` build. - -- gh-123378: Ensure that the value of :attr:`UnicodeEncodeError.start - <UnicodeError.start>` retrieved by :c:func:`PyUnicodeEncodeError_GetStart` - lies in ``[0, max(0, objlen - 1)]`` where *objlen* is the length of - :attr:`UnicodeEncodeError.object <UnicodeError.object>`. Similar arguments - apply to :exc:`UnicodeDecodeError` and :exc:`UnicodeTranslateError` and - their corresponding C interface. Patch by Bénédikt Tran. - -- gh-109523: Reading text from a non-blocking stream with ``read`` may now - raise a :exc:`BlockingIOError` if the operation cannot immediately return - bytes. - -- gh-102471: Add a new import and export API for Python :class:`int` objects - (:pep:`757`): - - * :c:func:`PyLong_GetNativeLayout`; - * :c:func:`PyLong_Export`; - * :c:func:`PyLong_FreeExport`; - * :c:func:`PyLongWriter_Create`; - * :c:func:`PyLongWriter_Finish`; - * :c:func:`PyLongWriter_Discard`. - - Patch by Victor Stinner. - -- gh-121058: ``PyThreadState_Clear()`` now warns (and calls - ``sys.excepthook``) if the thread state still has an active exception. - -Build ------ - -- gh-127865: Fix build failure on systems without thread-locals support. - -- gh-127629: Emscripten builds now include ctypes support. - -- gh-127111: Updated the Emscripten web example to use ES6 modules and be - built into a distinct ``web_example`` subfolder. - -- gh-115869: Make ``jit_stencils.h`` (which is produced during JIT builds) - reproducible. - -- gh-126898: The Emscripten build of Python is now based on ES6 modules. - - -What's New in Python 3.14.0 alpha 2? -==================================== - -*Release date: 2024-11-19* - -Windows -------- - -- gh-126911: Update credits command output. - -- gh-118973: Ensures the experimental free-threaded install includes the - ``_tkinter`` module. The optional Tcl/Tk component must also be installed - in order for the module to work. - -- gh-126497: Fixes venv failure due to missing redirector executables in - experimental free-threaded installs. - -- gh-126074: Removed unnecessary DLLs from Windows embeddable package - -- gh-125315: Avoid crashing in :mod:`platform` due to slow WMI calls on some - Windows machines. - -- gh-126084: Fix venvwlauncher to launch pythonw instead of python so no - extra console window is created. - -- gh-125842: Fix a :exc:`SystemError` when :func:`sys.exit` is called with - ``0xffffffff`` on Windows. - -- gh-125550: Enable the :ref:`launcher` to detect Python 3.14 installs from - the Windows Store. - -- gh-123803: All Windows code pages are now supported as "cpXXX" codecs on - Windows. - -Tools/Demos ------------ - -- gh-126807: Fix extraction warnings in :program:`pygettext.py` caused by - mistaking function definitions for function calls. - -- gh-126167: The iOS testbed was modified so that it can be used by - third-party projects for testing purposes. - -Tests ------ - -- gh-126909: Fix test_os extended attribute tests to work on filesystems - with 1 KiB xattr size limit. - -- gh-125730: Change ``make test`` to not run GUI tests by default. Use - ``make ci`` to run tests with GUI tests instead. - -- gh-124295: Add translation tests to the :mod:`argparse` module. - -Security --------- - -- gh-126623: Upgrade libexpat to 2.6.4 - -Library -------- - -- gh-85957: Add missing MIME types for images with RFCs: emf, fits, g3fax, - jp2, jpm, jpx, t38, tiff-fx and wmf. Patch by Hugo van Kemenade. - -- gh-126920: Fix the ``prefix`` and ``exec_prefix`` keys from - :py:func:`sysconfig.get_config_vars` incorrectly having the same value as - :py:const:`sys.base_prefix` and :py:const:`sys.base_exec_prefix`, - respectively, inside virtual environments. They now accurately reflect - :py:const:`sys.prefix` and :py:const:`sys.exec_prefix`. - -- gh-67877: Fix memory leaks when :mod:`regular expression <re>` matching - terminates abruptly, either because of a signal or because memory - allocation fails. - -- gh-125063: :mod:`marshal` now supports :class:`slice` objects. The marshal - format version was increased to 5. - -- gh-126789: Fixed the values of :py:func:`sysconfig.get_config_vars`, - :py:func:`sysconfig.get_paths`, and their siblings when the :py:mod:`site` - initialization happens after :py:mod:`sysconfig` has built a cache for - :py:func:`sysconfig.get_config_vars`. - -- gh-126188: Update bundled pip to 24.3.1 - -- gh-126766: Fix issue where :func:`urllib.request.url2pathname` failed to - discard two leading slashes introducing an empty authority section. - -- gh-126705: Allow :class:`os.PathLike` to be a base for Protocols. - -- gh-126699: Allow :class:`collections.abc.AsyncIterator` to be a base for - Protocols. - -- gh-126654: Fix crash when non-dict was passed to several functions in - ``_interpreters`` module. - -- gh-104745: Limit starting a patcher (from :func:`unittest.mock.patch` or - :func:`unittest.mock.patch.object`) more than once without stopping it - -- gh-126595: Fix a crash when instantiating :class:`itertools.count` with an - initial count of :data:`sys.maxsize` on debug builds. Patch by Bénédikt - Tran. - -- gh-120423: Fix issue where :func:`urllib.request.pathname2url` mishandled - Windows paths with embedded forward slashes. - -- gh-126565: Improve performances of :meth:`zipfile.Path.open` for - non-reading modes. - -- gh-126505: Fix bugs in compiling case-insensitive :mod:`regular - expressions <re>` with character classes containing non-BMP characters: - upper-case non-BMP character did was ignored and the ASCII flag was - ignored when matching a character range whose upper bound is beyond the - BMP region. - -- gh-117378: Fixed the :mod:`multiprocessing` ``"forkserver"`` start method - forkserver process to correctly inherit the parent's :data:`sys.path` - during the importing of :func:`multiprocessing.set_forkserver_preload` - modules in the same manner as :data:`sys.path` is configured in workers - before executing work items. - - This bug caused some forkserver module preloading to silently fail to - preload. This manifested as a performance degradation in child processes - when the ``sys.path`` was required due to additional repeated work in - every worker. - - It could also have a side effect of ``""`` remaining in :data:`sys.path` - during forkserver preload imports instead of the absolute path from - :func:`os.getcwd` at multiprocessing import time used in the worker - ``sys.path``. - - The ``sys.path`` differences between phases in the child process could - potentially have caused preload to import incorrect things from the wrong - location. We are unaware of that actually having happened in practice. - -- gh-125679: The :class:`multiprocessing.Lock` and - :class:`multiprocessing.RLock` ``repr`` values no longer say "unknown" on - macOS. - -- gh-126476: Raise :class:`calendar.IllegalMonthError` (now a subclass of - :class:`IndexError`) for :func:`calendar.month` when the input month is - not correct. - -- gh-126489: The Python implementation of :mod:`pickle` no longer calls - :meth:`pickle.Pickler.persistent_id` for the result of - :meth:`!persistent_id`. - -- gh-126451: Register the :class:`contextvars.Context` type to - :class:`collections.abc.Mapping`. - -- gh-126175: Add ``msg``, ``doc``, ``pos``, ``lineno`` and ``colno`` - attributes to :exc:`tomllib.TOMLDecodeError`. Deprecate instantiating with - free-form arguments. - -- gh-89416: Add :rfc:`9559` MIME types for Matroska audiovisual container - formats. Patch by Hugo van Kemenade. - -- gh-126417: Register the :class:`!multiprocessing.managers.DictProxy` and - :class:`!multiprocessing.managers.ListProxy` types in - :mod:`multiprocessing.managers` to :class:`collections.abc.MutableMapping` - and :class:`collections.abc.MutableSequence`, respectively. - -- gh-126390: Add support for returning intermixed options and non-option - arguments in order in :func:`getopt.gnu_getopt`. - -- gh-126374: Add support for options with optional arguments in the - :mod:`getopt` module. - -- gh-126363: Speed up pattern parsing in :meth:`pathlib.Path.glob` by - skipping creation of a :class:`pathlib.Path` object for the pattern. - -- gh-126353: :func:`asyncio.get_event_loop` now does not implicitly creates - an event loop. It now raises a :exc:`RuntimeError` if there is no set - event loop. Patch by Kumar Aditya. - -- gh-126313: Fix an issue in :func:`curses.napms` when - :func:`curses.initscr` has not yet been called. Patch by Bénédikt Tran. - -- gh-126303: Fix pickling and copying of :class:`os.sched_param` objects. - -- gh-126138: Fix a use-after-free crash on :class:`asyncio.Task` objects - whose underlying coroutine yields an object that implements an evil - :meth:`~object.__getattribute__`. Patch by Nico Posada. - -- gh-120057: Replace the ``os.environ.refresh()`` method with a new - :func:`os.reload_environ` function. Patch by Victor Stinner. - -- gh-126220: Fix crash in :class:`!cProfile.Profile` and - :class:`!_lsprof.Profiler` when their callbacks were directly called with - 0 arguments. - -- gh-126212: Fix issue where :func:`urllib.request.pathname2url` and - :func:`~urllib.request.url2pathname` removed slashes from Windows DOS - drive paths and URLs. - -- gh-126223: Raise a :exc:`UnicodeEncodeError` instead of a - :exc:`SystemError` upon calling :func:`!_interpreters.create` with an - invalid Unicode character. - -- gh-126205: Fix issue where :func:`urllib.request.pathname2url` generated - URLs beginning with four slashes (rather than two) when given a Windows - UNC path. - -- gh-126156: Improved performances of creating - :py:class:`~http.cookies.Morsel` objects by a factor of 3.8x. - -- gh-126105: Fix a crash in :mod:`ast` when the :attr:`ast.AST._fields` - attribute is deleted. - -- gh-126106: Fixes a possible ``NULL`` pointer dereference in :mod:`ssl`. - -- gh-126080: Fix a use-after-free crash on :class:`asyncio.Task` objects for - which the underlying event loop implements an evil - :meth:`~object.__getattribute__`. Reported by Nico-Posada. Patch by - Bénédikt Tran. - -- gh-125322: Correct detection of complex numbers support in libffi. - -- gh-126083: Fixed a reference leak in :class:`asyncio.Task` objects when - reinitializing the same object with a non-``None`` context. Patch by Nico - Posada. - -- gh-126068: Fix exceptions in the :mod:`argparse` module so that only error - messages for ArgumentError and ArgumentTypeError are now translated. - ArgumentError is now only used for command line errors, not for logical - errors in the program. TypeError is now raised instead of ValueError for - some logical errors. - -- gh-125413: Add :meth:`!pathlib.Path.scandir` method to efficiently fetch - directory children and their file attributes. This is a trivial wrapper of - :func:`os.scandir`. - -- gh-125984: Fix use-after-free crashes on :class:`asyncio.Future` objects - for which the underlying event loop implements an evil - :meth:`~object.__getattribute__`. Reported by Nico-Posada. Patch by - Bénédikt Tran. - -- gh-125926: Fix :func:`urllib.parse.urljoin` for base URI with undefined - authority. Although :rfc:`3986` only specify reference resolution for - absolute base URI, :func:`!urljoin` should continue to return sensible - result for relative base URI. - -- gh-125969: Fix an out-of-bounds crash when an evil - :meth:`asyncio.loop.call_soon` mutates the length of the internal - callbacks list. Patch by Bénédikt Tran. - -- gh-125966: Fix a use-after-free crash in - :meth:`asyncio.Future.remove_done_callback`. Patch by Bénédikt Tran. - -- gh-125789: Fix possible crash when mutating list of callbacks returned by - :attr:`!asyncio.Future._callbacks`. It now always returns a new copy in C - implementation :mod:`!_asyncio`. Patch by Kumar Aditya. - -- gh-126916: Allow the *initial* parameter of :func:`functools.reduce` to be - passed as a keyword argument. Patch by Sayandip Dutta. - -- gh-124452: Fix an issue in - :meth:`email.policy.EmailPolicy.header_source_parse` and - :meth:`email.policy.Compat32.header_source_parse` that introduced spurious - leading whitespaces into header values when the header includes a newline - character after the header name delimiter (``:``) and before the value. - -- gh-117941: :class:`!argparse.BooleanOptionalAction` now rejects option - names starting with ``--no-``. - -- gh-125884: Fixed the bug for :mod:`pdb` where it can't set breakpoints on - functions with certain annotations. - -- gh-125355: Fix several bugs in - :meth:`argparse.ArgumentParser.parse_intermixed_args`. - - * The parser no longer changes temporarily during parsing. - * Default values are not processed twice. - * Required mutually exclusive groups containing positional arguments are now supported. - * The missing arguments report now includes the names of all required optional and positional arguments. - * Unknown options can be intermixed with positional arguments in parse_known_intermixed_args(). - -- gh-125767: :class:`super` objects are now :mod:`pickleable <pickle>` and - :mod:`copyable <copy>`. - -- gh-124969: ``locale.nl_langinfo(locale.ALT_DIGITS)`` now returns a string - again. The returned value consists of up to 100 semicolon-separated - symbols. - -- gh-84850: Remove :class:`!URLopener` and :class:`!FancyURLopener` classes - from :mod:`urllib.request`. They had previously raised - :exc:`DeprecationWarning` since Python 3.3. - -- gh-125666: Avoid the exiting the interpreter if a null byte is given as - input in the new REPL. - -- gh-125710: [Enum] fix hashable<->nonhashable comparisons for member values - -- gh-125631: Restore ability to set :attr:`~pickle.Pickler.persistent_id` - and :attr:`~pickle.Unpickler.persistent_load` attributes of instances of - the :class:`!Pickler` and :class:`!Unpickler` classes in the :mod:`pickle` - module. - -- gh-125378: Fixed the bug in :mod:`pdb` where after a multi-line command, - an empty line repeats the first line of the multi-line command, instead of - the full command. - -- gh-125682: Reject non-ASCII digits in the Python implementation of - :func:`json.loads` conforming to the JSON specification. - -- gh-125660: Reject invalid unicode escapes for Python implementation of - :func:`json.loads`. - -- gh-52551: Use :c:func:`!wcsftime` to implement :func:`time.strftime` on - Windows. - -- gh-125259: Fix the notes removal logic for errors thrown in enum - initialization. - -- gh-125633: Add function :func:`inspect.ispackage` to determine whether an - object is a :term:`package` or not. - -- gh-125614: In the :data:`~annotationlib.Format.FORWARDREF` format of - :mod:`annotationlib`, fix bug where nested expressions were not returned - as :class:`annotationlib.ForwardRef` format. - -- gh-125590: Allow ``FrameLocalsProxy`` to delete and pop if the key is not - a fast variable. - -- gh-125600: Only show stale code warning in :mod:`pdb` when we display - source code. - -- gh-125542: Deprecate passing keyword-only *prefix_chars* argument to - :meth:`argparse.ArgumentParser.add_argument_group`. - -- gh-125541: Pressing :kbd:`Ctrl-C` while blocked in - :meth:`threading.Lock.acquire`, :meth:`threading.RLock.acquire`, and - :meth:`threading.Thread.join` now interrupts the function call and raises - a :exc:`KeyboardInterrupt` exception on Windows, similar to how those - functions behave on macOS and Linux. - -- gh-125519: Improve traceback if :func:`importlib.reload` is called with an - object that is not a module. Patch by Alex Waygood. - -- gh-125451: Fix deadlock when - :class:`concurrent.futures.ProcessPoolExecutor` shuts down concurrently - with an error when feeding a job to a worker process. - -- gh-125115: Fixed a bug in :mod:`pdb` where arguments starting with ``-`` - can't be passed to the debugged script. - -- gh-125398: Fix the conversion of the :envvar:`!VIRTUAL_ENV` path in the - activate script in :mod:`venv` when running in Git Bash for Windows. - -- gh-125245: Fix race condition when importing :mod:`collections.abc`, which - could incorrectly return an empty module. - -- gh-52551: Fix encoding issues in :func:`time.strftime`, the - :meth:`~datetime.datetime.strftime` method of the :mod:`datetime` classes - :class:`~datetime.datetime`, :class:`~datetime.date` and - :class:`~datetime.time` and formatting of these classes. Characters not - encodable in the current locale are now acceptable in the format string. - Surrogate pairs and sequence of surrogatescape-encoded bytes are no longer - recombinated. Embedded null character no longer terminates the format - string. - -- gh-124984: Fixed thread safety in :mod:`ssl` in the free-threaded build. - OpenSSL operations are now protected by a per-object lock. - -- gh-124651: Properly quote template strings in :mod:`venv` activation - scripts. - -- gh-124694: We've added - :class:`concurrent.futures.InterpreterPoolExecutor`, which allows you to - run code in multiple isolated interpreters. This allows you to circumvent - the limitations of CPU-bound threads (due to the GIL). Patch by Eric Snow. - - This addition is unrelated to :pep:`734`. - -- gh-58032: Deprecate the :class:`argparse.FileType` type converter. - -- gh-99749: Adds a feature to optionally enable suggestions for argument - choices and subparser names if mistyped by the user. - -- gh-58956: Fixed a bug in :mod:`pdb` where sometimes the breakpoint won't - trigger if it was set on a function which is already in the call stack. - -- gh-124111: The tkinter module can now be built to use either the new - version 9.0.0 of Tcl/Tk or the latest release 8.6.15 of Tcl/Tk 8. Tcl/Tk - 9 includes many improvements, both to the Tcl language and to the - appearance and utility of the graphical user interface provided by Tk. - -- gh-80958: unittest discovery supports PEP 420 namespace packages as start - directory again. - -- gh-123370: Fix the canvas not clearing after running turtledemo clock. - -- gh-89083: Add :func:`uuid.uuid8` for generating UUIDv8 objects as - specified in :rfc:`9562`. Patch by Bénédikt Tran - -- gh-122549: Add :func:`platform.invalidate_caches` to invalidate cached - results. - -- gh-120754: Update unbounded ``read`` calls in :mod:`zipfile` to specify an - explicit ``size`` putting a limit on how much data they may read. This - also updates handling around ZIP max comment size to match the standard - instead of reading comments that are one byte too long. - -- gh-121267: Improve the performance of :mod:`tarfile` when writing files, - by caching user names and group names. - -- gh-70764: Fixed an issue where :func:`inspect.getclosurevars` would - incorrectly classify an attribute name as a global variable when the name - exists both as an attribute name and a global variable. - -- gh-118289: :func:`!posixpath.realpath` now raises - :exc:`NotADirectoryError` when *strict* mode is enabled and a - non-directory path with a trailing slash is supplied. - -- gh-119826: Always return an absolute path for :func:`os.path.abspath` on - Windows. - -- gh-97850: Remove deprecated :func:`!pkgutil.get_loader` and - :func:`!pkgutil.find_loader`. - -- gh-118986: Add :data:`!socket.IPV6_RECVERR` constant (available since - Linux 2.2). - -- gh-116897: Accepting objects with false values (like ``0`` and ``[]``) - except empty strings, byte-like objects and ``None`` in - :mod:`urllib.parse` functions :func:`~urllib.parse.parse_qsl` and - :func:`~urllib.parse.parse_qs` is now deprecated. - -- gh-101955: Fix SystemError when match regular expression pattern - containing some combination of possessive quantifier, alternative and - capture group. - -- gh-71936: Fix a race condition in :class:`multiprocessing.pool.Pool`. - -- bpo-46128: Strip :class:`unittest.IsolatedAsyncioTestCase` stack frames - from reported stacktraces. - -- gh-84852: Add MIME types for MS Embedded OpenType, OpenType Layout, - TrueType, WOFF 1.0 and 2.0 fonts. Patch by Sahil Prajapati and Hugo van - Kemenade. - -Documentation -------------- - -- gh-126622: Added stub pages for removed modules explaining their removal, - where to find replacements, and linking to the last Python version that - supported them. Contributed by Ned Batchelder. - -- gh-125277: Require Sphinx 7.2.6 or later to build the Python - documentation. Patch by Adam Turner. - -- gh-60712: Include the :class:`object` type in the lists of documented - types. Change by Furkan Onder and Martin Panter. - -Core and Builtins ------------------ - -- gh-126795: Increase the threshold for JIT code warmup. Depending on - platform and workload, this can result in performance gains of 1-9% and - memory savings of 3-5%. - -- gh-126341: Now :exc:`ValueError` is raised instead of :exc:`SystemError` - when trying to iterate over a released :class:`memoryview` object. - -- gh-126688: Fix a crash when calling :func:`os.fork` on some operating - systems, including SerenityOS. - -Library -------- - -- gh-126066: Fix :mod:`importlib` to not write an incomplete .pyc files when - a ulimit or some other operating system mechanism is preventing the write - to go through fully. - -Core and Builtins ------------------ - -- gh-126222: Do not include count of "peek" items in ``_PyUop_num_popped``. - This ensures that the correct number of items are popped from the stack - when a micro-op exits with an error. - -- gh-126366: Fix crash when using ``yield from`` on an object that raises an - exception in its ``__iter__``. - -Library -------- - -- gh-126209: Fix an issue with ``skip_file_prefixes`` parameter which - resulted in an inconsistent behaviour between the C and Python - implementations of :func:`warnings.warn`. Patch by Daehee Kim. - -Core and Builtins ------------------ - -- gh-126312: Fix crash during garbage collection on an object frozen by - :func:`gc.freeze` on the free-threaded build. - -- gh-103951: Relax optimization requirements to allow fast attribute access - to module subclasses. - -- gh-126072: Following :gh:`126101`, for :ref:`codeobjects` like lambda, - annotation and type alias, we no longer add ``None`` to its - :attr:`~codeobject.co_consts`. - -- gh-126195: Improve JIT performance by 1.4% on macOS Apple Silicon by using - platform-specific memory protection APIs. Patch by Diego Russo. - -- gh-126139: Provide better error location when attempting to use a - :term:`future statement <__future__>` with an unknown future feature. - -- gh-126072: Add a new attribute in :attr:`~codeobject.co_flags` to indicate - whether the first item in :attr:`~codeobject.co_consts` is the docstring. - If a code object has no docstring, ``None`` will **NOT** be inserted. - -- gh-126076: Relocated objects such as ``tuple``, ``bytes`` and ``str`` - objects are properly tracked by :mod:`tracemalloc` and its associated - hooks. Patch by Pablo Galindo. - -- gh-90370: Avoid temporary tuple creation for vararg in argument passing - with Argument Clinic generated code (if arguments either vararg or - positional-only). - -- gh-126018: Fix a crash in :func:`sys.audit` when passing a non-string as - first argument and Python was compiled in debug mode. - -- gh-126012: The :class:`memoryview` type now supports subscription, making - it a :term:`generic type`. - -- gh-125837: Adds :opcode:`LOAD_SMALL_INT` and :opcode:`LOAD_CONST_IMMORTAL` - instructions. ``LOAD_SMALL_INT`` pushes a small integer equal to the - ``oparg`` to the stack. ``LOAD_CONST_IMMORTAL`` does the same as - ``LOAD_CONST`` but is more efficient for immortal objects. Removes - ``RETURN_CONST`` instruction. - -- gh-125942: On Android, the ``errors`` setting of :any:`sys.stdout` was - changed from ``surrogateescape`` to ``backslashreplace``. - -- gh-125859: Fix a crash in the free threading build when - :func:`gc.get_objects` or :func:`gc.get_referrers` is called during an - in-progress garbage collection. - -- gh-125868: It was possible in 3.14.0a1 only for attribute lookup to give - the wrong value. This was due to an incorrect specialization in very - specific circumstances. This is fixed in 3.14.0a2. - -- gh-125498: The JIT has been updated to leverage Clang 19’s new - ``preserve_none`` attribute, which supports more platforms and is more - useful than LLVM's existing ``ghccc`` calling convention. This also - removes the need to manually patch the calling convention in LLVM IR, - simplifying the JIT compilation process. - -- gh-125703: Correctly honour :mod:`tracemalloc` hooks in specialized - ``Py_DECREF`` paths. Patch by Pablo Galindo - -- gh-125593: Use color to highlight error locations in traceback from - exception group - -- gh-125017: Fix crash on certain accesses to the ``__annotations__`` of - :class:`staticmethod` and :class:`classmethod` objects. - -- gh-125588: The Python PEG generator can now use f-strings in the grammar - actions. Patch by Pablo Galindo - -- gh-125444: Fix illegal instruction for older Arm architectures. Patch by - Diego Russo, testing by Ross Burton. - -- gh-118423: Add a new ``INSTRUCTION_SIZE`` macro to the cases generator - which returns the current instruction size. - -- gh-125038: Fix crash when iterating over a generator expression after - direct changes on ``gi_frame.f_locals``. Patch by Mikhail Efimov. - -- gh-124855: Don't allow the JIT and perf support to be active at the same - time. Patch by Pablo Galindo - -- gh-123714: Update JIT compilation to use LLVM 19 - -- gh-123930: Improve the error message when a script shadowing a module from - the standard library causes :exc:`ImportError` to be raised during a - "from" import. Similarly, improve the error message when a script - shadowing a third party module attempts to "from" import an attribute from - that third party module while still initialising. - -- gh-119793: The :func:`map` built-in now has an optional keyword-only - *strict* flag like :func:`zip` to check that all the iterables are of - equal length. Patch by Wannes Boeykens. - -Library -------- - -- gh-118950: Fix bug where SSLProtocol.connection_lost wasn't getting called - when OSError was thrown on writing to socket. - -- gh-113570: Fixed a bug in ``reprlib.repr`` where it incorrectly called the - repr method on shadowed Python built-in types. - -C API ------ - -- gh-126554: Fix error handling in :class:`ctypes.CDLL` objects which could - result in a crash in rare situations. - -- gh-126061: Add :c:func:`PyLong_IsPositive`, :c:func:`PyLong_IsNegative` - and :c:func:`PyLong_IsZero` for checking if a :c:type:`PyLongObject` is - positive, negative, or zero, respectively. - -- gh-125608: Fix a bug where dictionary watchers (e.g., - :c:func:`PyDict_Watch`) on an object's attribute dictionary - (:attr:`~object.__dict__`) were not triggered when the object's attributes - were modified. - -- gh-123619: Added the :c:func:`PyUnstable_Object_EnableDeferredRefcount` - function for enabling :pep:`703` deferred reference counting. - -- gh-121654: Add :c:func:`PyType_Freeze` function to make a type immutable. - Patch by Victor Stinner. - -- gh-120026: The :c:macro:`!Py_HUGE_VAL` macro is :term:`soft deprecated`. - -Build ------ - -- gh-126691: Removed the ``--with-emscripten-target`` configure flag. We - unified the ``node`` and ``browser`` options and the same build can now be - used, independent of target runtime. - -- gh-123877: Use ``wasm32-wasip1`` as the target triple for WASI instead of - ``wasm32-wasi``. The latter will eventually be reclaimed for WASI 1.0 - while CPython currently only supports WASI preview1. - -- gh-126458: Disable SIMD support for HACL under WASI. - -- gh-89640: Hard-code float word ordering as little endian on WASM. - -- gh-126206: ``make clinic`` now runs Argument Clinic using the ``--force`` - option, thus forcefully regenerating generated code. - -- gh-126187: Introduced ``Tools/wasm/emscripten.py`` to simplify doing - Emscripten builds. - -- gh-124932: For cross builds, there is now support for having a different - install ``prefix`` than the ``host_prefix`` used by ``getpath.py``. This - is set to ``/`` by default for Emscripten, on other platforms the default - behavior is the same as before. - -- gh-125946: The minimum supported Android version is now 7.0 (API level - 24). - -- gh-125940: The Android build now supports `16 KB page sizes - <https://developer.android.com/guide/practices/page-sizes>`__. - -- gh-89640: Improve detection of float word ordering on Linux when link-time - optimizations are enabled. - -- gh-124928: Emscripten builds now require node >= 18. - -- gh-115382: Fix cross compile failures when the host and target SOABIs - match. - - -What's New in Python 3.14.0 alpha 1? -==================================== - -*Release date: 2024-10-15* - -macOS ------ - -- gh-124448: Update bundled Tcl/Tk in macOS installer to 8.6.15. - -- gh-123797: Check for runtime availability of ``ptsname_r`` function on - macos. - -- gh-123418: Updated macOS installer build to use OpenSSL 3.0.15. - -Windows -------- - -- gh-124487: Increases Windows required OS and API level to Windows 10. - -- gh-124609: Fix ``_Py_ThreadId`` for Windows builds using MinGW. Patch by - Tony Roberts. - -- gh-124448: Updated bundled Tcl/Tk to 8.6.15. - -- gh-124254: Ensures experimental free-threaded binaries remain installed - when updating. - -- gh-123915: Ensure that ``Tools\msi\buildrelease.bat`` uses different - directories for AMD64 and ARM64 builds. - -- gh-123418: Updated Windows build to use OpenSSL 3.0.15. - -- gh-123476: Add support for ``socket.TCP_QUICKACK`` on Windows platforms. - -- gh-122573: The Windows build of CPython now requires 3.10 or newer. - -- gh-100256: :mod:`mimetypes` no longer fails when it encounters an - inaccessible registry key. - -- gh-119679: Ensures correct import libraries are included in Windows - installs. - -- gh-119690: Adds Unicode support and fixes audit events for - ``_winapi.CreateNamedPipe``. - -- gh-111201: Add support for new pyrepl on Windows - -- gh-119070: Fixes ``py.exe`` handling of shebangs like ``/usr/bin/env - python3.12``, which were previously interpreted as ``python3.exe`` instead - of ``python3.12.exe``. - -- gh-117505: Fixes an issue with the Windows installer not running ensurepip - in a fully isolated environment. This could cause unexpected interactions - with the user site-packages. - -- gh-118209: Avoid crashing in :mod:`mmap` on Windows when the mapped memory - is inaccessible due to file system errors or access violations. - -- gh-79846: Makes :code:`ssl.create_default_context()` ignore invalid - certificates in the Windows certificate store - -Tools/Demos ------------ - -- gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15 and - multissltests to use 3.0.15, 3.1.7, and 3.2.3. - -Tests ------ - -- gh-125041: Re-enable skipped tests for :mod:`zlib` on the s390x - architecture: only skip checks of the compressed bytes, which can be - different between zlib's software implementation and the - hardware-accelerated implementation. - -- gh-124378: Updated ``test_ttk`` to pass with Tcl/Tk 8.6.15. - -- gh-124213: Detect whether the test suite is running inside a - systemd-nspawn container with ``--suppress-sync=true`` option, and skip - the ``test_os`` and ``test_mmap`` tests that are failing in this scenario. - -- gh-124190: Add capability to ignore entire files or directories in check - warning CI tool - -- gh-121921: Update ``Lib/test/crashers/bogus_code_obj.py`` so that it - crashes properly again. - -- gh-112301: Add tooling to check for changes in compiler warnings. Patch by - Nate Ohlson. - -- gh-59022: Add tests for :func:`pkgutil.extend_path`. Patch by Andreas - Stocker. - -- gh-99242: :func:`os.getloadavg` may throw :exc:`OSError` when running - regression tests under certain conditions (e.g. chroot). This error is now - caught and ignored, since reporting load average is optional. - -- gh-121084: Fix test_typing random leaks. Clear typing ABC caches when - running tests for refleaks (``-R`` option): call ``_abc_caches_clear()`` - on typing abstract classes and their subclasses. Patch by Victor Stinner. - -- gh-121160: Add a test for :func:`readline.set_history_length`. Note that - this test may fail on readline libraries. - -- gh-121200: Fix ``test_expanduser_pwd2()`` of ``test_posixpath``. Call - ``getpwnam()`` to get ``pw_dir``, since it can be different than - ``getpwall()`` ``pw_dir``. Patch by Victor Stinner. - -- gh-121188: When creating the JUnit XML file, regrtest now escapes - characters which are invalid in XML, such as the chr(27) control character - used in ANSI escape sequences. Patch by Victor Stinner. - -- gh-120801: Cleaned up fixtures for importlib.metadata tests and - consolidated behavior with 'test.support.os_helper'. - -- gh-119727: Add ``--single-process`` command line option to Python test - runner (regrtest). Patch by Victor Stinner. - -- gh-119273: Python test runner no longer runs tests using TTY (ex: - test_ioctl) in a process group (using ``setsid()``). Previously, tests - using TTY were skipped. Patch by Victor Stinner. - -- gh-119050: regrtest test runner: Add XML support to the refleak checker - (-R option). Patch by Victor Stinner. - -- gh-101525: Skip ``test_gdb`` if the binary is relocated by BOLT. Patch by - Donghee Na. - -- gh-107562: Test certificates have been updated to expire far in the - future. This allows testing Y2038 with system time set to after that, so - that actual Y2038 issues can be exposed, and not masked by expired - certificate errors. - -Security --------- - -- gh-125140: Remove the current directory from ``sys.path`` when using - PyREPL. - -- gh-123678: Upgrade libexpat to 2.6.3 - -- gh-112301: Enable compiler options that warn of potential security - vulnerabilities. - -- gh-122792: Changed IPv4-mapped ``ipaddress.IPv6Address`` to consistently - use the mapped IPv4 address value for deciding properties. Properties - which have their behavior fixed are ``is_multicast``, ``is_reserved``, - ``is_link_local``, ``is_global``, and ``is_unspecified``. - -- gh-112301: Add ability to ignore warnings per file with warning count in - warning checking tooling. Patch by Nate Ohlson. - -- gh-112301: Add macOS warning tracking to warning check tooling. Patch by - Nate Ohlson. - -- gh-122133: Authenticate the socket connection for the - ``socket.socketpair()`` fallback on platforms where ``AF_UNIX`` is not - available like Windows. - - Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson - <seth@python.org>. Reported by Ellie <el@horse64.org> - -- gh-121957: Fixed missing audit events around interactive use of Python, - now also properly firing for ``python -i``, as well as for ``python -m - asyncio``. The events in question are ``cpython.run_stdin`` and - ``cpython.run_startup``. - -- gh-112301: Enable runtime protections for glibc to abort execution when - unsafe behavior is encountered, for all platforms except Windows. - -- gh-121285: Remove backtracking from tarfile header parsing for - ``hdrcharset``, PAX, and GNU sparse headers. - -- gh-112301: Add default compiler options to improve security. Enable - -Wimplicit-fallthrough, -fstack-protector-strong, -Wtrampolines. - -- gh-118773: Fixes creation of ACLs in :func:`os.mkdir` on Windows to work - correctly on non-English machines. - -- gh-118486: :func:`os.mkdir` on Windows now accepts *mode* of ``0o700`` to - restrict the new directory to the current user. This fixes - :cve:`2024-4030` affecting :func:`tempfile.mkdtemp` in scenarios where the - base temporary directory is more permissive than the default. - -Library -------- - -- gh-125422: Fixed the bug where :mod:`pdb` and :mod:`bdb` can step into the - bottom caller frame. - -- gh-100141: Fixed the bug where :mod:`pdb` will be stuck in an infinite - loop when debugging an empty file. - -- gh-53203: Fix :func:`time.strptime` for ``%c``, ``%x`` and ``%X`` formats - in many locales that use non-ASCII digits, like Persian, Burmese, Odia and - Shan. - -- gh-125206: Workaround for old libffi versions is added. Module ctypes - supports :c:expr:`double complex` only with libffi >= 3.3.0. Patch by - Mikhail Efimov. - -- gh-89967: Make :class:`~weakref.WeakKeyDictionary` and - :class:`~weakref.WeakValueDictionary` safe against concurrent mutations - from other threads. Patch by Kumar Aditya. - -- gh-125260: The :func:`gzip.compress` *mtime* parameter now defaults to 0 - for reproducible output. Patch by Bernhard M. Wiedemann and Adam Turner. - -- gh-125243: Fix data race when creating :class:`zoneinfo.ZoneInfo` objects - in the free threading build. - -- gh-125254: Fix a bug where ArgumentError includes the incorrect ambiguous - option in :mod:`argparse`. - -- gh-125235: Keep :mod:`tkinter` TCL paths in venv pointing to base - installation on Windows. - -- gh-61011: Fix inheritance of nested mutually exclusive groups from parent - parser in :class:`argparse.ArgumentParser`. Previously, all nested - mutually exclusive groups lost their connection to the group containing - them and were displayed as belonging directly to the parser. - -- gh-125118: Don't copy arbitrary values to :c:expr:`_Bool` in the - :mod:`struct` module. - -- gh-125069: Fix an issue where providing a :class:`pathlib.PurePath` object - as an initializer argument to a second :class:`~pathlib.PurePath` object - with a different :attr:`~pathlib.PurePath.parser` resulted in arguments to - the former object's initializer being joined by the latter object's - parser. - -- gh-125096: If the :envvar:`PYTHON_BASIC_REPL` environment variable is set, - the :mod:`site` module no longer imports the :mod:`!_pyrepl` module. - Moreover, the :mod:`site` module now respects :option:`-E` and - :option:`-I` command line options: ignore :envvar:`PYTHON_BASIC_REPL` in - this case. Patch by Victor Stinner. - -- gh-124969: Fix ``locale.nl_langinfo(locale.ALT_DIGITS)``. Now it returns a - tuple of up to 100 strings (an empty tuple on most locales). Previously it - returned the first item of that tuple or an empty string. - -- gh-124960: Fix support for the ``barry_as_FLUFL`` future flag in the new - REPL. - -- gh-69998: Fix :func:`locale.nl_langinfo` in case when different categories - have different locales. The function now sets temporarily the ``LC_CTYPE`` - locale in some cases. This temporary change affects other threads. - -- gh-124958: Fix refcycles in exceptions raised from - :class:`asyncio.TaskGroup` and the python implementation of - :class:`asyncio.Future` - -- gh-53203: Fix :func:`time.strptime` for ``%c`` and ``%x`` formats in many - locales: Arabic, Bislama, Breton, Bodo, Kashubian, Chuvash, Estonian, - French, Irish, Ge'ez, Gurajati, Manx Gaelic, Hebrew, Hindi, Chhattisgarhi, - Haitian Kreyol, Japanese, Kannada, Korean, Marathi, Malay, Norwegian, - Nynorsk, Punjabi, Rajasthani, Tok Pisin, Yoruba, Yue Chinese, Yau/Nungon - and Chinese. - -- gh-123961: Convert :mod:`curses` to multi-phase initialization - (:pep:`489`), thereby fixing reference leaks at interpreter shutdown. - Patch by Bénédikt Tran. - -- gh-124944: Add ``SO_ORIGINAL_DST`` to the :mod:`socket` module. - -- gh-117151: The default buffer size used by :func:`shutil.copyfileobj` has - been increased from 64k to 256k on non-Windows platforms. It was already - larger on Windows. - -- gh-90102: Skip the ``isatty`` system call during open() when the file is - known to not be a character device. This provides a slight performance - improvement when reading whole files. - -- gh-124917: Allow calling :func:`os.path.exists` and - :func:`os.path.lexists` with keyword arguments on Windows. Fixes a - regression in 3.13.0. - -- gh-65865: :mod:`argparse` now raises early error for invalid ``help`` - arguments to :meth:`~argparse.ArgumentParser.add_argument`, - :meth:`~argparse.ArgumentParser.add_subparsers` and :meth:`!add_parser`. - -- gh-124653: Fix detection of the minimal Queue API needed by the - :mod:`logging` module. Patch by Bénédikt Tran. - -- gh-91818: The CLI of many modules (:mod:`ast`, :mod:`ensurepip`, - :mod:`json`, :mod:`pdb`, :mod:`sqlite3`, :mod:`tokenize`, :mod:`venv`) now - uses the actual executable name instead of simply "python" to display in - the usage message. - -- gh-124858: Fix reference cycles left in tracebacks in - :func:`asyncio.open_connection` when used with ``happy_eyeballs_delay`` - -- gh-124390: Fixed :exc:`AssertionError` when using - :func:`!asyncio.staggered.staggered_race` with - :data:`asyncio.eager_task_factory`. - -- gh-85935: :meth:`argparse.ArgumentParser.add_argument` now raises an - exception if an :ref:`action` that does not consume arguments (like - 'store_const' or 'store_true') or explicit ``nargs=0`` are specified for - positional arguments. - -- gh-124835: Make :func:`tomllib.loads` raise :exc:`TypeError` not - :exc:`AttributeError` on bad input types that do not have the ``replace`` - attribute. Improve error message when :class:`bytes` is received. - -- gh-124693: Fix a bug where :mod:`argparse` doesn't recognize negative - complex numbers or negative numbers using scientific notation. - -- gh-124787: Fix :class:`typing.TypeAliasType` with incorrect - ``type_params`` argument. Now it raises a :exc:`TypeError` when a type - parameter without a default follows one with a default, and when an entry - in the ``type_params`` tuple is not a type parameter object. - -- gh-66436: Improved :ref:`prog` default value for - :class:`argparse.ArgumentParser`. It will now include the name of the - Python executable along with the module or package name, or the path to a - directory, ZIP file, or directory within a ZIP file if the code was run - that way. - -- gh-116850: Fix :mod:`argparse` for namespaces with not directly writable - dict (e.g. classes). - -- gh-101552: Add an *annoation_format* parameter to - :func:`inspect.signature`. Add an *quote_annotation_strings* parameter to - :meth:`inspect.Signature.format`. Use the new functionality to improve the - display of annotations in signatures in :mod:`pydoc`. Patch by Jelle - Zijlstra. - -- gh-58573: Fix conflicts between abbreviated long options in the parent - parser and subparsers in :mod:`argparse`. - -- gh-124594: All :mod:`asyncio` REPL prompts run in the same :class:`context - <contextvars.Context>`. Contributed by Bartosz Sławecki. - -- gh-61181: Fix support of :ref:`choices` with string value in - :mod:`argparse`. Substrings of the specified string no longer considered - valid values. - -- gh-116750: Provide :func:`sys.monitoring.clear_tool_id` to unregister all - events and callbacks set by the tool. - -- gh-124552: Improve the accuracy of :mod:`bdb`'s check for the possibility - of breakpoint in a frame. This makes it possible to disable unnecessary - events in functions. - -- gh-124538: Fixed crash when using :func:`gc.get_referents` on a capsule - object. - -- gh-80259: Fix :mod:`argparse` support of positional arguments with - ``nargs='?'``, ``default=argparse.SUPPRESS`` and specified ``type``. - -- gh-120378: Fix a crash related to an integer overflow in - :func:`curses.resizeterm` and :func:`curses.resize_term`. - -- gh-124498: Fix :class:`typing.TypeAliasType` not to be generic, when - ``type_params`` is an empty tuple. - -- gh-53834: Fix support of arguments with :ref:`choices` in :mod:`argparse`. - Positional arguments with :ref:`nargs` equal to ``'?'`` or ``'*'`` no - longer check :ref:`default` against ``choices``. Optional arguments with - ``nargs`` equal to ``'?'`` no longer check :ref:`const` against - ``choices``. - -- gh-123884: Fixed bug in itertools.tee() handling of other tee inputs (a - tee in a tee). The output now has the promised *n* independent new - iterators. Formerly, the first iterator was identical (not independent) - to the input iterator. This would sometimes give surprising results. - -- gh-123017: Due to unreliable results on some devices, - :func:`time.strftime` no longer accepts negative years on Android. - -- gh-123014: :func:`os.pidfd_open` and :func:`signal.pidfd_send_signal` are - now unavailable when building against Android API levels older than 31, - since the underlying system calls may cause a crash. - -- gh-124176: Add support for :func:`dataclasses.dataclass` in - :func:`unittest.mock.create_autospec`. Now ``create_autospec`` will check - for potential dataclasses and use :func:`dataclasses.fields` function to - retrieve the spec information. - -- gh-124345: :mod:`argparse` supports abbreviated single-dash long options - separated by ``=`` from its value. - -- gh-124400: Fixed a :mod:`pdb` bug where ``until`` has no effect when it - appears in a ``commands`` sequence. Also avoid printing the frame - information at a breakpoint that has a command list containing a command - that resumes execution. - -- gh-90562: Modify dataclasses to support zero-argument super() when - ``slots=True`` is specified. This works by modifying all references to - ``__class__`` to point to the newly created class. - -- gh-104860: Fix disallowing abbreviation of single-dash long options in - :mod:`argparse` with ``allow_abbrev=False``. - -- gh-63143: Fix parsing mutually exclusive arguments in :mod:`argparse`. - Arguments with the value identical to the default value (e.g. booleans, - small integers, empty or 1-character strings) are no longer considered - "not present". - -- gh-72795: Positional arguments with :ref:`nargs` equal to ``'*'`` or - :data:`!argparse.REMAINDER` are no longer required. This allows to use - positional argument with ``nargs='*'`` and without ``default`` in mutually - exclusive group and improves error message about required arguments. - -- gh-59317: Fix parsing positional argument with :ref:`nargs` equal to - ``'?'`` or ``'*'`` if it is preceded by an option and another positional - argument. - -- gh-100980: The :attr:`~ctypes.Structure._fields_` attribute of - :class:`ctypes.Structure` and :class:`~ctypes.Union` is no longer set if - the setattr operation raises an error. - -- gh-53780: :mod:`argparse` now ignores the first ``"--"`` (double dash) - between an option and command. - -- gh-124217: Add RFC 9637 reserved IPv6 block ``3fff::/20`` in - :mod:`ipaddress` module. - -- gh-111513: Improve the error message that may be raised by - :meth:`datetime.date.fromtimestamp`. - -- gh-124248: Fixed potential crash when using :mod:`struct` to process - zero-width 'Pascal string' fields (``0p``). - -- gh-81691: Fix handling of multiple ``"--"`` (double dashes) in - :mod:`argparse`. Only the first one has now been removed, all subsequent - ones are now taken literally. - -- gh-87041: Fix a bug in :mod:`argparse` where lengthy subparser argument - help is incorrectly indented. - -- gh-84559: The default :mod:`multiprocessing` start method on Linux and - other POSIX systems has been changed away from often unsafe ``"fork"`` to - ``"forkserver"`` (when the platform supports sending file handles over - pipes as most do) or ``"spawn"``. Mac and Windows are unchanged as they - already default to ``"spawn"``. - -- gh-124212: Fix invalid variable in :mod:`venv` handling of failed symlink - on Windows - -- gh-124171: Add workaround for broken :c:func:`!fmod()` implementations on - Windows, that loose zero sign (e.g. ``fmod(-10, 1)`` returns ``0.0``). - Patch by Sergey B Kirpichev. - -- gh-123978: Remove broken :func:`time.thread_time` and - :func:`time.thread_time_ns` on NetBSD. - -- gh-123934: Fix :class:`unittest.mock.MagicMock` resetting magic methods - return values after ``.reset_mock(return_value=True)`` was called. - -- gh-124016: Update :mod:`unicodedata` database to Unicode 16.0.0. - -- gh-123968: Fix the command-line interface for the :mod:`random` module to - select floats between 0 and N, not 1 and N. - -- gh-123945: Fix a bug where :mod:`argparse` doesn't recognize negative - numbers with underscores - -- gh-123935: Fix parent slots detection for dataclasses that inherit from - classes with ``__dictoffset__``. - -- gh-123892: Add ``"_wmi"`` to :data:`sys.stdlib_module_names`. Patch by - Victor Stinner. - -- gh-84808: Fix error handling in :py:class:`~socket.socket` method - :py:func:`~socket.socket.connect_ex` on platforms where :c:data:`errno` - can be negative. - -- gh-123756: Added a new argument ``mode`` to :class:`pdb.Pdb`. Only allow - :mod:`pdb` from command line to use ``restart`` command. - -- gh-122765: Fix unbalanced quote errors occurring when activate.csh in - :mod:`venv` was sourced with a custom prompt containing unpaired quotes or - newlines. - -- gh-123657: Fix crash and memory leak in :func:`decimal.getcontext`. It - crashed when using a thread-local context by - ``--with-decimal-contextvar=no``. - -- gh-123339: Fix :func:`inspect.getsource` for classes in - :mod:`collections.abc` and :mod:`decimal` (for pure Python implementation) - modules. :func:`inspect.getcomments` now raises OSError instead of - IndexError if the ``__firstlineno__`` value for a class is out of bound. - -- gh-123374: Remove check for redefined memo entry in - :func:`pickletools.dis`. - -- gh-123504: Fixed reference leak in the finalization of :mod:`tkinter`. - -- gh-123430: Pages generated by the :mod:`http.server` module allow the - browser to apply its default dark mode. - -- gh-123446: Fix empty function name in :exc:`TypeError` when - :func:`csv.reader`, :func:`csv.writer`, or :func:`csv.register_dialect` - are used without the required args. - -- gh-123448: Fixed memory leak of :class:`typing.NoDefault` by moving it to - the static types array. - -- gh-123409: Fix :attr:`ipaddress.IPv6Address.reverse_pointer` output - according to :rfc:`RFC 3596, §2.5 <3596#section-2.5>`. Patch by Bénédikt - Tran. - -- gh-123089: Make :class:`weakref.WeakSet` safe against concurrent mutations - while it is being iterated. Patch by Kumar Aditya. - -- gh-123363: Show string value of :opcode:`CONTAINS_OP` oparg in :mod:`dis` - output. Patch by Alexandr153. - -- gh-123341: Add :meth:`~object.__class_getitem__` to - :class:`!tkinter.Event` for type subscript support at runtime. Patch by - Adonis Rakateli. - -- gh-123340: Show string value of :opcode:`IS_OP` oparg in :mod:`dis` - output. - -- gh-119518: Speed up normalization of :class:`pathlib.PurePath` and - :class:`~pathlib.Path` objects by not interning string parts. - -- gh-123270: Applied a more surgical fix for malformed payloads in - :class:`zipfile.Path` causing infinite loops (gh-122905) without breaking - contents using legitimate characters. - -- gh-73991: Add :meth:`pathlib.Path.copy_into` and - :meth:`~pathlib.Path.move_into`, which copy and move files and directories - into *existing* directories. - -- gh-123228: Fix return type for - :func:`!_pyrepl.readline._ReadlineWrapper.get_line_buffer` to be - :func:`str`. Patch by Sergey B Kirpichev. - -- gh-123240: Raise audit events for the :func:`input` in the new REPL. - -- gh-76960: Fix :func:`urllib.parse.urljoin` and - :func:`urllib.parse.urldefrag` for URIs containing empty components. For - example, :func:`!urljoin` with relative reference "?" now sets empty query - and removes fragment. Preserve empty components (authority, params, query, - fragment) in :func:`!urljoin`. Preserve empty components (authority, - params, query) in :func:`!urldefrag`. - -- gh-116810: Resolve a memory leak introduced in CPython 3.10's :mod:`ssl` - when the :attr:`ssl.SSLSocket.session` property was accessed. Speeds up - read and write access to said property by no longer unnecessarily cloning - session objects via serialization. - -- gh-123243: Fix memory leak in :mod:`!_decimal`. - -- gh-122546: Consistently use same file name for different exceptions in the - new repl. Patch by Sergey B Kirpichev. - -- gh-123213: :meth:`xml.etree.ElementTree.Element.extend` and - :class:`~xml.etree.ElementTree.Element` assignment no longer hide the - internal exception if an erroneous generator is passed. Patch by Bar - Harel. - -- gh-85110: Preserve relative path in URL without netloc in - :func:`urllib.parse.urlunsplit` and :func:`urllib.parse.urlunparse`. - -- gh-123165: Add support for rendering :class:`~dis.Positions` in - :mod:`dis`. - -- gh-122909: In urllib.request when URLError is raised opening an ftp URL, - the exception argument is now consistently a string. Earlier versions - passed either a string or an ftplib exception instance as the argument to - URLError. - -- gh-123084: Deprecate :class:`!shutil.ExecError`, which hasn't been raised - by any :mod:`shutil` function since Python 3.4. It's now an alias for - :exc:`RuntimeError`. - -- gh-123085: In a bare call to :func:`importlib.resources.files`, ensure the - caller's frame is properly detected when ``importlib.resources`` is itself - available as a compiled module only (no source). - -- gh-123067: Fix quadratic complexity in parsing ``"``-quoted cookie values - with backslashes by :mod:`http.cookies`. - -- gh-123049: Add support for :const:`~configparser.UNNAMED_SECTION` in - :meth:`configparser.ConfigParser.add_section`. - -- gh-121735: When working with zip archives, importlib.resources now - properly honors module-adjacent references (e.g. ``files(pkg.mod)`` and - not just ``files(pkg)``). - -- gh-122981: Fix :func:`inspect.getsource` for generated classes with Python - base classes (e.g. enums). - -- gh-122903: ``zipfile.Path.glob`` now correctly matches directories instead - of silently omitting them. - -- gh-122905: :class:`zipfile.Path` objects now sanitize names from the - zipfile. - -- gh-122873: Enable :mod:`json` module to work as a script using the - :option:`-m` switch: ``python -m json``. See the :ref:`JSON command-line - interface <json-commandline>` documentation. Patch by Trey Hunner. - -- gh-122858: Deprecate :func:`!asyncio.iscoroutinefunction` in favor of - :func:`inspect.iscoroutinefunction`. - -- gh-116263: :class:`logging.handlers.RotatingFileHandler` no longer rolls - over empty log files. - -- gh-105376: Restore the deprecated :mod:`logging` ``warn()`` method. It was - removed in Python 3.13 alpha 1. Keep the deprecated ``warn()`` method in - Python 3.13. Patch by Victor Stinner. - -- gh-122311: Improve errors in the :mod:`pickle` module. - :exc:`~pickle.PicklingError` is now raised more often instead of - :exc:`UnicodeEncodeError`, :exc:`ValueError` and :exc:`AttributeError`, - and the original exception is chained to it. Improve and unify error - messages in Python and C implementations. - -- gh-122744: Bump the version of pip bundled in ensurepip to version 24.2. - -- gh-118761: Improve import time of :mod:`pprint` by around seven times. - Patch by Hugo van Kemenade. - -- gh-118974: Add ``decorator`` parameter to - :func:`dataclasses.make_dataclass` to customize the functional creation of - dataclasses. - -- gh-118814: Fix the :class:`typing.TypeVar` constructor when name is passed - by keyword. - -- gh-122637: Adjust ``cmath.tanh(nanj)`` and ``cmath.tanh(infj)`` for recent - C standards. - -- gh-122478: Remove internal frames from tracebacks shown in - :class:`code.InteractiveInterpreter` with non-default - :func:`sys.excepthook`. Save correct tracebacks in - :data:`sys.last_traceback` and update ``__traceback__`` attribute of - :data:`sys.last_value` and :data:`sys.last_exc`. - -- gh-116622: On Android, the ``FICLONE`` and ``FICLONERANGE`` constants are - no longer exposed by :mod:`fcntl`, as these ioctls are blocked by SELinux. - -- gh-82378: Make sure that the new :term:`REPL` interprets - :data:`sys.tracebacklimit` in the same way that the classic REPL did. - -- gh-122334: Fix crash when importing :mod:`ssl` after the main interpreter - restarts. - -- gh-122459: Optimize :mod:`pickling <pickle>` by name objects without the - ``__module__`` attribute. - -- gh-87320: In :class:`code.InteractiveInterpreter`, handle exceptions - caused by calling a non-default :func:`sys.excepthook`. Before, the - exception bubbled up to the caller, ending the :term:`REPL`. - -- gh-122272: On some platforms such as Linux, year with century was not - 0-padded when formatted by :meth:`~.datetime.strftime` with C99-specific - specifiers ``'%C'`` or ``'%F'``. The 0-padding behavior is now guaranteed - when the format specifiers ``'%C'`` and ``'%F'`` are supported by the C - library. Patch by Ben Hsing - -- gh-122400: Handle :exc:`ValueError`\s raised by :func:`os.stat` in - :class:`filecmp.dircmp` and :func:`filecmp.cmpfiles`. Patch by Bénédikt - Tran. - -- gh-122311: Fix some error messages in :mod:`pickle`. - -- gh-121650: :mod:`email` headers with embedded newlines are now quoted on - output. The :mod:`~email.generator` will now refuse to serialize (write) - headers that are unsafely folded or delimited; see - :attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas - Bloemsaat and Petr Viktorin in :gh:`121650`.) - -- gh-122332: Fixed segfault with :meth:`asyncio.Task.get_coro` when using an - eager task factory. - -- gh-105733: :func:`ctypes.ARRAY` is now :term:`soft deprecated`: it no - longer emits deprecation warnings and is not scheduled for removal. - -- gh-122213: Add notes for pickle serialization errors that allow to - identify the source of the error. - -- gh-119180: As part of :pep:`749`, add the following attributes for - customizing evaluation of annotation scopes: - - * ``evaluate_value`` on :class:`typing.TypeAliasType` - * ``evaluate_bound``, ``evaluate_constraints``, and ``evaluate_default`` on :class:`typing.TypeVar` - * ``evaluate_default`` on :class:`typing.ParamSpec` - * ``evaluate_default`` on :class:`typing.TypeVarTuple` - -- gh-119180: Fix handling of classes with custom metaclasses in - ``annotationlib.get_annotations``. - -- gh-122170: Handle :exc:`ValueError`\s raised by :func:`os.stat` in - :mod:`linecache`. Patch by Bénédikt Tran. - -- gh-122163: Add notes for JSON serialization errors that allow to identify - the source of the error. - -- gh-122129: Improve support of method descriptors and wrappers in the help - title. - -- gh-122145: Fix an issue when reporting tracebacks corresponding to Python - code emitting an empty AST body. Patch by Nikita Sobolev and Bénédikt - Tran. - -- gh-121723: Make :func:`logging.config.dictConfig` accept any object - implementing the Queue public API. See the :ref:`queue configuration - <configure-queue>` section for details. Patch by Bénédikt Tran. - -- gh-82951: Serializing objects with complex ``__qualname__`` (such as - unbound methods and nested classes) by name no longer involves serializing - parent objects by value in pickle protocols < 4. - -- gh-120754: ``Pathlib.read_bytes`` no longer opens the file in Python's - buffered I/O mode. This reduces overheads as the code reads a file in - whole leading to a modest speedup. - -- gh-113785: :mod:`csv` now correctly parses numeric fields (when used with - :const:`csv.QUOTE_NONNUMERIC` or :const:`csv.QUOTE_STRINGS`) which start - with an escape character. - -- gh-122088: :deco:`warnings.deprecated` now copies the coroutine status of - functions and methods so that :func:`inspect.iscoroutinefunction` returns - the correct result. - -- gh-122081: Fix a crash in the :func:`!decimal.IEEEContext` optional - function available via the ``EXTRA_FUNCTIONALITY`` configuration flag. - -- gh-73991: Add :meth:`pathlib.Path.move`, which moves a file or directory - tree. - -- gh-121268: Remove workarounds for non-IEEE 754 systems in :mod:`cmath`. - -- gh-119698: Due to the lack of interest for - :meth:`symtable.Class.get_methods`, the method is marked as deprecated and - will be removed in Python 3.16. Patch by Bénédikt Tran. - -- gh-121889: Adjusts ``cmath.acosh(complex('0+nanj'))`` for recent C - standards. - -- gh-121804: Correctly show error locations, when :exc:`SyntaxError` raised - in new repl. Patch by Sergey B Kirpichev. - -- gh-121797: Add alternative :class:`~fractions.Fraction` constructor - :meth:`Fraction.from_number() <fractions.Fraction.from_number>`. - -- gh-121798: Add alternative :class:`~decimal.Decimal` constructor - :meth:`Decimal.from_number() <decimal.Decimal.from_number>`. - -- gh-120930: Fixed a bug introduced by gh-92081 that added an incorrect - extra blank to encoded words occurring in wrapped headers. - -- gh-57141: The *shallow* argument to :class:`filecmp.dircmp` (new in Python - 3.13) is now keyword-only. - -- gh-121245: Simplify handling of the history file in - ``site.register_readline()`` helper. The ``CAN_USE_PYREPL`` variable now - will be initialized, when imported. Patch by Sergey B Kirpichev. - -- gh-121249: Support the :c:expr:`float complex` and :c:expr:`double - complex` C types in the :mod:`struct` module if the compiler has C11 - complex arithmetic. Patch by Sergey B Kirpichev. - -- gh-121486: :mod:`math` functions :func:`~math.isqrt`, :func:`~math.log`, - :func:`~math.log2` and :func:`~math.log10` now support integers larger - than ``2**2**32`` on 32-bit platforms. - -- gh-121474: Fix missing sanity check for ``parties`` arg in - :class:`threading.Barrier` constructor. Patch by Clinton Christian - (pygeek). - -- gh-121450: Hard-coded breakpoints (:func:`breakpoint` and - :func:`pdb.set_trace`) now reuse the most recent ``Pdb`` instance that - calls ``Pdb.set_trace()``, instead of creating a new one each time. As a - result, all the instance specific data like ``display`` and ``commands`` - are preserved across Hard-coded breakpoints. - -- gh-119169: Slightly speed up :func:`os.walk` by simplifying exception - handling. - -- gh-121423: Improve import time of :mod:`socket` by lazy importing modules - and writing :data:`!socket.errorTab` as a constant. - -- gh-59110: :mod:`zipimport` supports now namespace packages when no - directory entry exists. - -- gh-119004: Fix a crash in :ref:`OrderedDict.__eq__ - <collections_OrderedDict__eq__>` when operands are mutated during the - check. Patch by Bénédikt Tran. - -- gh-121313: Limit the reading size in the - :class:`multiprocessing.connection.Connection` class to 64 KiB to prevent - memory overallocation and unnecessary memory management system calls. - -- gh-121332: Fix constructor of :mod:`ast` nodes with custom - ``_attributes``. Previously, passing custom attributes would raise a - :py:exc:`DeprecationWarning`. Passing arguments to the constructor that - are not in ``_fields`` or ``_attributes`` remains deprecated. Patch by - Jelle Zijlstra. - -- gh-121245: Fix a bug in the handling of the command history of the new - :term:`REPL` that caused the history file to be wiped at REPL exit. - -- gh-121210: Handle AST nodes with missing runtime fields or attributes in - :func:`ast.compare`. Patch by Bénédikt Tran. - -- gh-121163: Add support for ``all`` as an valid ``action`` for - :func:`warnings.simplefilter` and :func:`warnings.filterwarnings`. - -- gh-121151: Fix wrapping of long usage text of arguments inside a mutually - exclusive group in :mod:`argparse`. - -- gh-121141: Add support for :func:`copy.replace` to AST nodes. Patch by - Bénédikt Tran. - -- gh-87744: Fix waitpid race while calling - :meth:`~asyncio.subprocess.Process.send_signal` in asyncio. Patch by Kumar - Aditya. - -- gh-121027: Add a future warning in :meth:`!functools.partial.__get__`. In - future Python versions :class:`functools.partial` will be a method - descriptor. - -- gh-121027: Make the :class:`functools.partial` object a method descriptor. - -- gh-117784: CPython now detects whether its linked TLS library supports - TLSv1.3 post-handshake authentication and disables that feature if support - is lacking. - -- gh-121025: Improve the :meth:`~object.__repr__` of - :class:`functools.partialmethod`. Patch by Bénédikt Tran. - -- gh-121018: Fixed issues where :meth:`!argparse.ArgumentParser.parse_args` - did not honor ``exit_on_error=False``. Based on patch by Ben Hsing. - -- gh-119614: Fix truncation of strings with embedded null characters in some - internal operations in :mod:`tkinter`. - -- gh-120910: When reading installed files from an egg, use - ``relative_to(walk_up=True)`` to honor files installed outside of the - installation root. - -- gh-61103: Support :c:expr:`float complex`, :c:expr:`double complex` and - :c:expr:`long double complex` C types in :mod:`ctypes` as - :class:`~ctypes.c_float_complex`, :class:`~ctypes.c_double_complex` and - :class:`~ctypes.c_longdouble_complex` if the compiler has C11 complex - arithmetic. Patch by Sergey B Kirpichev. - -- gh-120888: Upgrade pip wheel bundled with ensurepip (pip 24.1.1) - -- gh-101830: Accessing the :mod:`tkinter` object's string representation no - longer converts the underlying Tcl object to a string on Windows. - -- gh-120678: Fix regression in the new REPL that meant that globals from - files passed using the ``-i`` argument would not be included in the REPL's - global namespace. Patch by Alex Waygood. - -- gh-120811: Fix possible memory leak in :meth:`contextvars.Context.run`. - -- gh-120782: Fix wrong references of the :mod:`datetime` types after - reloading the module. - -- gh-120713: :meth:`datetime.datetime.strftime` now 0-pads years with less - than four digits for the format specifiers ``%Y`` and ``%G`` on Linux. - Patch by Ben Hsing - -- gh-120769: Make empty line in :mod:`pdb` repeats the last command even - when the command is from ``cmdqueue``. - -- gh-120780: Show string value of LOAD_SPECIAL oparg in :mod:`dis` output. - -- gh-41431: Add :meth:`datetime.time.strptime` and - :meth:`datetime.date.strptime`. Contributed by Wannes Boeykens. - -- gh-120743: :term:`Soft deprecate <soft deprecated>` :func:`os.popen` and - :func:`os.spawn* <os.spawnl>` functions. They should no longer be used to - write new code. The :mod:`subprocess` module is recommended instead. Patch - by Victor Stinner. - -- gh-120732: Fix ``name`` passing to :class:`unittest.mock.Mock` object when - using :func:`unittest.mock.create_autospec`. - -- gh-111259: :mod:`re` now handles patterns like ``"[\s\S]"`` or ``"\s|\S"`` - which match any character as effectively as a dot with the ``DOTALL`` - modifier (``"(?s:.)"``). - -- gh-120683: Fix an error in :class:`logging.LogRecord`, when the integer - part of the timestamp is rounded up, while the millisecond calculation - truncates, causing the log timestamp to be wrong by up to 999 ms (affected - roughly 1 in 8 million timestamps). - -- gh-118710: :class:`ipaddress.IPv4Address` and - :class:`ipaddress.IPv6Address` attributes ``version`` and - ``max_prefixlen`` are now available on the class. - -- gh-120633: Move scrollbar and remove tear-off menus in turtledemo. - -- gh-120606: Allow users to use EOF to exit ``commands`` definition in - :mod:`pdb` - -- gh-120284: Allow :meth:`asyncio.Runner.run` to accept :term:`awaitable` - objects instead of simply :term:`coroutine`\s. - -- gh-120541: Improve the prompt in the "less" pager when :func:`help` is - called with non-string argument. - -- gh-120495: Fix incorrect exception handling in Tab Nanny. Patch by - Wulian233. - -- gh-120388: Improve a warning message when a test method in :mod:`unittest` - returns something other than ``None``. Now we show the returned object - type and optional asyncio-related tip. - -- gh-120381: Correct :func:`inspect.ismethoddescriptor` to check also for - the lack of :meth:`~object.__delete__`. Patch by Jan Kaliszewski. - -- gh-90425: The OS byte in gzip headers is now always set to 255 when using - :func:`gzip.compress`. - -- gh-120343: Fix column offset reporting for tokens that come after - multiline f-strings in the :mod:`tokenize` module. - -- gh-119180: As part of implementing :pep:`649` and :pep:`749`, add a new - module ``annotationlib``. Add support for unresolved forward references in - annotations to :mod:`dataclasses`, :class:`typing.TypedDict`, and - :class:`typing.NamedTuple`. - -- gh-119600: Fix :func:`unittest.mock.patch` to not read attributes of the - target when ``new_callable`` is set. Patch by Robert Collins. - -- gh-120289: Fixed the use-after-free issue in :mod:`cProfile` by - disallowing ``disable()`` and ``clear()`` in external timers. - -- gh-82017: Added support for converting any objects that have the - :meth:`!as_integer_ratio` method to a :class:`~fractions.Fraction`. - -- gh-114053: Fix edge-case bug where :func:`typing.get_type_hints` would - produce incorrect results if type parameters in a class scope were - overridden by assignments in a class scope and ``from __future__ import - annotations`` semantics were enabled. Patch by Alex Waygood. - -- gh-114053: Fix erroneous :exc:`NameError` when calling - :func:`inspect.get_annotations` with ``eval_str=True``` on a class that - made use of :pep:`695` type parameters in a module that had ``from - __future__ import annotations`` at the top of the file. Patch by Alex - Waygood. - -- gh-120268: Prohibit passing ``None`` to pure-Python - :meth:`datetime.date.fromtimestamp` to achieve consistency with - C-extension implementation. - -- gh-120244: Fix memory leak in :func:`re.sub` when the replacement string - contains backreferences. - -- gh-120254: Added ``commands`` argument to :func:`pdb.set_trace` which - allows users to send debugger commands from the source file. - -- gh-120211: Fix :mod:`tkinter.ttk` with Tcl/Tk 9.0. - -- gh-71587: Fix crash in C version of :meth:`datetime.datetime.strptime` - when called again on the restarted interpreter. - -- gh-117983: Defer the ``threading`` import in ``importlib.util`` until lazy - loading is used. - -- gh-120157: Remove unused constant - ``concurrent.futures._base._FUTURE_STATES`` in :mod:`concurrent.futures`. - Patch by Clinton Christian (pygeek). - -- gh-120161: :mod:`datetime` no longer crashes in certain complex reference - cycle situations. - -- gh-119698: Fix :meth:`symtable.Class.get_methods` and document its - behaviour. Patch by Bénédikt Tran. - -- gh-120121: Add :exc:`concurrent.futures.InvalidStateError` to module's - ``__all__``. - -- gh-119933: Add the :class:`symtable.SymbolTableType` enumeration to - represent the possible outputs of the - :class:`symtable.SymbolTable.get_type` method. Patch by Bénédikt Tran. - -- gh-120029: Expose :class:`symtable.Symbol` methods - :meth:`~symtable.Symbol.is_free_class`, - :meth:`~symtable.Symbol.is_comp_iter` and - :meth:`~symtable.Symbol.is_comp_cell`. Patch by Bénédikt Tran. - -- gh-120108: Fix calling :func:`copy.deepcopy` on :mod:`ast` trees that have - been modified to have references to parent nodes. Patch by Jelle Zijlstra. - -- gh-120056: Add :data:`!socket.IP_RECVERR` and :data:`!socket.IP_RECVTTL` - constants (both available since Linux 2.2). And - :data:`!socket.IP_RECVORIGDSTADDR` constant (available since Linux - 2.6.29). - -- gh-112672: Support building :mod:`tkinter` with Tcl 9.0. - -- gh-120057: Added the :data:`os.environ.refresh() <os.environ>` method to - update :data:`os.environ` with changes to the environment made by - :func:`os.putenv`, by :func:`os.unsetenv`, or made outside Python in the - same process. Patch by Victor Stinner. - -- gh-120029: Expose :meth:`symtable.Symbol.is_type_parameter` in the - :mod:`symtable` module. Patch by Bénédikt Tran. - -- gh-119819: Fix regression to allow logging configuration with - multiprocessing queue types. - -- gh-65454: :func:`unittest.mock.Mock.attach_mock` no longer triggers a call - to a ``PropertyMock`` being attached. - -- gh-117142: The :mod:`ctypes` module may now be imported in all - subinterpreters, including those that have their own GIL. - -- gh-118835: Fix _pyrepl crash when using custom prompt with ANSI escape - codes. - -- gh-81936: :meth:`!help` and :meth:`!showtopic` methods now respect a - configured *output* argument to :class:`!pydoc.Helper` and not use the - pager in such cases. Patch by Enrico Tröger. - -- gh-117398: The ``_datetime`` module (C implementation for :mod:`datetime`) - now supports being imported in multiple interpreters. - -- gh-119824: Print stack entry in :mod:`pdb` when and only when user input - is needed. - -- gh-119838: In mixed arithmetic operations with - :class:`~fractions.Fraction` and complex, the fraction is now converted to - :class:`float` instead of :class:`complex`. - -- gh-119770: Make :mod:`termios` ``ioctl()`` constants positive. Patch by - Victor Stinner. - -- gh-89727: Fix issue with :func:`shutil.rmtree` where a - :exc:`RecursionError` is raised on deep directory trees. - -- gh-119577: The :exc:`DeprecationWarning` emitted when testing the truth - value of an :class:`xml.etree.ElementTree.Element` now describes - unconditionally returning ``True`` in a future version rather than raising - an exception in Python 3.14. - -- gh-89727: Partially fix issue with :func:`shutil.rmtree` where a - :exc:`RecursionError` is raised on deep directory trees. A recursion error - is no longer raised when :data:`!rmtree.avoids_symlink_attacks` is false. - -- gh-93963: Remove deprecated names from ``importlib.abc`` as found in - ``importlib.resources.abc``. - -- gh-119118: Fix performance regression in the :mod:`tokenize` module by - caching the ``line`` token attribute and calculating the column offset - more efficiently. - -- gh-89727: Fix issue with :func:`os.fwalk` where a :exc:`RecursionError` - was raised on deep directory trees by adjusting the implementation to be - iterative instead of recursive. - -- gh-119594: If one calls pow(fractions.Fraction, x, module) with modulo not - None, the error message now says that the types are incompatible rather - than saying pow only takes 2 arguments. Patch by Wim Jeantine-Glenn and - Mark Dickinson. - -- gh-119588: ``zipfile.Path.is_symlink`` now assesses if the given path is a - symlink. - -- gh-119562: Remove :class:`!ast.Num`, :class:`!ast.Str`, - :class:`!ast.Bytes`, :class:`!ast.NameConstant` and - :class:`!ast.Ellipsis`. They had all emitted deprecation warnings since - Python 3.12. Patch by Alex Waygood. - -- gh-119555: Catch :exc:`SyntaxError` from :func:`compile` in the - runsource() method of the InteractiveColoredConsole. Patch by Sergey B - Kirpichev. - -- gh-118908: Limit exposed globals from internal imports and definitions on - new REPL startup. Patch by Eugene Triguba and Pablo Galindo. - -- gh-117865: Improve the import time of the :mod:`ast` module by deferring - the import of :mod:`re`. Patch by Jelle Zijlstra. - -- gh-119127: Positional arguments of :func:`functools.partial` objects now - support placeholders via :data:`functools.Placeholder`. - -- gh-113892: Now, the method ``sock_connect`` of - :class:`asyncio.ProactorEventLoop` raises a :exc:`ValueError` if given - socket is not in non-blocking mode, as well as in other loop - implementations. - -- gh-119506: Fix :meth:`!io.TextIOWrapper.write` method breaks internal - buffer when the method is called again during flushing internal buffer. - -- gh-69214: Fix ``fcntl.ioctl()`` *request* parameter: use an ``unsigned - long`` instead of an ``unsigned int`` for the *request* parameter of - :func:`fcntl.ioctl` to support requests larger than ``UINT_MAX``. Patch by - Victor Stinner. - -- gh-119105: ``difflib``'s ``DIffer.compare()`` (and so also ``ndiff``) can - no longer be provoked into cubic-time behavior, or into unbounded - recursion, and should generally be faster in ordinary cases too. Results - may change in some cases, although that should be rare. Correctness of - diffs is not affected. Some similar lines far apart may be reported as - deleting one and adding the other, where before they were displayed on - adjacent output lines with markup showing the intraline differences. - -- gh-119443: The interactive REPL no longer runs with ``from __future__ - import annotations`` enabled. Patch by Jelle Zijlstra. - -- gh-119461: Add ``socket.VMADDR_CID_LOCAL`` constant. Patch by Victor - Stinner. - -- gh-117398: Objects in the datetime C-API are now all statically allocated, - which means better memory safety, especially when the module is reloaded. - This should be transparent to users. - -- gh-118894: :mod:`asyncio` REPL now has the same capabilities as PyREPL. - -- gh-118830: Bump :mod:`pickle` default protocol to ``5``. - -- gh-118911: In PyREPL, updated ``maybe-accept``'s logic so that if the user - hits :kbd:`Enter` twice, they are able to terminate the block even if - there's trailing whitespace. Also, now when the user hits arrow up, the - cursor is on the last functional line. This matches IPython's behavior. - Patch by Aya Elsayed. - -- gh-115225: Raise error on certain technically valid but pathological ISO - 8601 strings passed to :meth:`datetime.time.fromisoformat` that were - previously parsed incorrectly. - -- gh-111201: Remove dependency to :mod:`readline` from the new Python REPL. - -- gh-119189: When using the ``**`` operator or :func:`pow` with - :class:`~fractions.Fraction` as the base and an exponent that is not - rational, a float, or a complex, the fraction is no longer converted to a - float. - -- gh-119174: Fix high DPI causes turtledemo(turtle-graphics examples) - windows blurry Patch by Wulian233 and Terry Jan Reedy - -- gh-119121: Fix a NameError happening in - ``asyncio.staggered.staggered_race``. This function is now tested. - -- gh-119105: ``difflib.Differ`` is much faster for some cases of diffs where - many pairs of lines are equally similar. - -- gh-119113: Fix issue where :meth:`pathlib.PurePath.with_suffix` didn't - raise :exc:`TypeError` when given ``None`` as a suffix. - -- gh-118643: Fix an AttributeError in the :mod:`email` module when re-fold a - long address list. Also fix more cases of incorrect encoding of the - address separator in the address list. - -- gh-73991: Add :meth:`pathlib.Path.copy`, which copies a file or directory - to another. - -- gh-58933: Make :mod:`pdb` return to caller frame correctly when - ``f_trace`` of the caller frame is not set - -- gh-82805: Support single-dot file extensions in - :attr:`pathlib.PurePath.suffix` and related attributes and methods. For - example, the :attr:`~pathlib.PurePath.suffixes` of - ``PurePath('foo.bar.')`` are now ``['.bar', '.']`` rather than ``[]``. - This brings file extension splitting in line with - :func:`os.path.splitext`. - -- gh-118924: Remove :data:`!version` and :data:`!version_info` from - :mod:`sqlite3`. Patch by Hugo van Kemenade. - -- gh-118928: Disallow using a sequence of parameters with named placeholders - in :mod:`sqlite3` queries. Patch by Erlend E. Aasland. - -- gh-118895: Setting attributes on :data:`typing.NoDefault` now raises - :exc:`AttributeError` instead of :exc:`TypeError`. - -- gh-118868: Fixed issue where kwargs were no longer passed to the logging - handler QueueHandler - -- gh-118827: Remove deprecated :class:`!Quoter` class from - :mod:`urllib.parse`. It had previously raised a :exc:`DeprecationWarning` - since Python 3.11. Patch by Nikita Sobolev. - -- gh-118824: Remove deprecated :func:`!pty.master_open` and - :func:`!pty.slave_open`. Use :func:`pty.openpty` instead. Patch by Nikita - Sobolev. - -- gh-118851: ``ctx`` arguments to the constructors of :mod:`ast` node - classes now default to :class:`ast.Load() <ast.Load>`. Patch by Jelle - Zijlstra. - -- gh-101588: Remove copy, deepcopy, and pickle from itertools. These had - previously raised a DeprecationWarning since Python 3.12. - -- gh-118805: Remove *type*, *choices*, and *metavar* parameters of - :class:`!argparse.BooleanOptionalAction`. They were deprecated since - Python 3.12. - -- gh-118803: :class:`!typing.ByteString` and - :class:`!collections.abc.ByteString` are removed. They had previously - raised a :exc:`DeprecationWarning` since Python 3.12. - -- gh-118798: The *isdst* parameter has been removed from - :func:`email.utils.localtime`. Patch by Hugo van Kemenade. - -- gh-118760: Restore the default value of ``tkiter.wantobjects`` to ``1``. - -- gh-118760: Fix errors in calling Tkinter bindings on Windows. - -- gh-74033: Drop support for passing keyword arguments to - :class:`pathlib.Path`. - -- gh-101357: Suppress all :exc:`OSError` exceptions from - :meth:`pathlib.Path.exists` and ``is_*()`` methods, rather than a - selection of more common errors. The new behaviour is consistent with - :func:`os.path.exists`, :func:`os.path.isdir`, etc. Use - :meth:`pathlib.Path.stat` to retrieve the file status without suppressing - exceptions. - -- gh-78707: Drop support for passing additional positional arguments to - :meth:`pathlib.PurePath.relative_to` and - :meth:`~pathlib.PurePath.is_relative_to`. - -- gh-118507: Fix :func:`os.path.isfile` on Windows for pipes. Speedup - :func:`os.path.isjunction` and :func:`os.path.lexists` on Windows with a - native implementation. - -- gh-118772: Allow :class:`typing.TypeVar` instances without a default to - follow instances without a default in some cases. Patch by Jelle Zijlstra. - -- gh-118714: Allow ``restart`` in post-mortem debugging of :mod:`pdb`. - Removed restart message when the user quits pdb from post-mortem mode. - -- gh-118673: Removed executable bits and shebang from stdlib modules. - -- gh-110863: :func:`os.path.realpath` now suppresses any :exc:`OSError` from - :func:`os.readlink` when *strict* mode is disabled (the default). - -- gh-118263: Speed up :func:`os.path.splitroot` & :func:`os.path.normpath` - with a direct C call. - -- gh-110190: Fix ctypes structs with array on SPARC by setting - ``MAX_STRUCT_SIZE`` to 32 in stgdict. Patch by Jakub Kulik - -- gh-118033: Fix :func:`dataclasses.dataclass` not creating a - ``__weakref__`` slot when subclassing :class:`typing.Generic`. - -- gh-117766: Always use :func:`str` to print ``choices`` in :mod:`argparse`. - -- gh-106531: In :mod:`importlib.resources`, sync with `importlib_resources - 6.3.2 - <https://importlib-resources.readthedocs.io/en/latest/history.html#v6-3-2>`_, - including: ``MultiplexedPath`` now expects ``Traversable`` paths, - deprecating string arguments to ``MultiplexedPath``; Enabled support for - resources in namespace packages in zip files; Fixed ``NotADirectoryError`` - when calling files on a subdirectory of a namespace package. - -- gh-115937: Removed extra preprocessing for the ``__signature__`` - attribute: the code just check if it's a :class:`inspect.Signature` - instance. Patch by Sergey B Kirpichev. - -- gh-115808: Add :func:`operator.is_none` and :func:`operator.is_not_none` - functions. - -- gh-114264: Improve performance of :func:`copy.deepcopy` by adding a fast - path for atomic types. - -- gh-113878: Add *doc* parameter to :func:`dataclasses.field`, so it can be - stored and shown as a documentation / metadata. If - ``@dataclass(slots=True)`` is used, then the supplied string is available - in the :attr:`~object.__slots__` dict. Otherwise, the supplied string is - only available in the corresponding :class:`dataclasses.Field` object. - - In order to support this feature we are changing the ``__slots__`` format - in dataclasses from :class:`tuple` to :class:`dict` when documentation / - metadata is present. - -- gh-113978: Ignore warnings on text completion inside REPL. - -- gh-113008: Correct argparse usage output for required, mutually exclusive - groups containing a positional argument - -- gh-108172: ``webbrowser`` honors OS preferred browser on Linux when its - desktop entry name contains the text of a known browser name. - -- gh-109109: You can now get the raw TLS certificate chains from TLS - connections via :meth:`ssl.SSLSocket.get_verified_chain` and - :meth:`ssl.SSLSocket.get_unverified_chain` methods. - - Contributed by Mateusz Nowak. - -- gh-105623: Fix performance degradation in - :class:`logging.handlers.RotatingFileHandler`. Patch by Craig Robson. - -- gh-102450: Add missing ISO-8601 24:00 alternative to midnight of next day - to :meth:`datetime.datetime.fromisoformat` and - :meth:`datetime.time.fromisoformat`. Patch by Izan "TizzySaurus" Robinson - (tizzysaurus@gmail.com) - -- gh-103956: Fix lack of newline characters in :mod:`trace` module output - when line tracing is enabled but source code line for current frame is not - available. - -- gh-92081: Fix missing spaces in email headers when the spaces are mixed - with encoded 8-bit characters. - -- gh-103194: Prepare Tkinter for C API changes in Tcl 8.7/9.0 to avoid - :class:`!_tkinter.Tcl_Obj` being unexpectedly returned instead of - :class:`bool`, :class:`str`, :class:`bytearray`, or :class:`int`. - -- gh-87106: Fixed handling in :meth:`inspect.Signature.bind` of keyword - arguments having the same name as positional-only arguments when a - variadic keyword argument (e.g. ``**kwargs``) is present. - -- gh-103134: Add additional methods to :ref:`proxy objects - <multiprocessing-proxy_objects>` in the :mod:`!multiprocessing` module: - - * :meth:`!clear` and :meth:`!copy` for proxies of :class:`list` - * :meth:`~dict.fromkeys`, ``reversed(d)``, ``d | {}``, ``{} | d``, - ``d |= {'b': 2}`` for proxies of :class:`dict` - -- bpo-45767: Fix integer conversion in :func:`os.major`, :func:`os.minor`, - and :func:`os.makedev`. Support device numbers larger than ``2**63-1``. - Support non-existent device number (``NODEV``). - -- bpo-44864: Do not translate user-provided strings in - :class:`argparse.ArgumentParser`. - -- bpo-41843: Solaris now uses :func:`os.sendfile` fast-copy syscall for more - efficient :mod:`shutil` file copy related functions. - -- bpo-15987: Implemented :func:`ast.compare` for comparing two ASTs. Patch - by Batuhan Taskaya with some help from Jeremy Hylton. - -- gh-67693: Fix :func:`urllib.parse.urlunparse` and - :func:`urllib.parse.urlunsplit` for URIs with path starting with multiple - slashes and no authority. Based on patch by Ashwin Ramaswami. - -- bpo-14074: Fix :mod:`argparse` metavar processing to allow positional - arguments to have a tuple metavar. - -IDLE ----- - -- gh-122392: Increase currently inadequate vertical spacing for the IDLE - browsers (path, module, and stack) on high-resolution monitors. - -- gh-112938: Fix uninteruptable hang when Shell gets rapid continuous - output. - -- gh-122482: Change About IDLE to direct users to discuss.python.org instead - of the now unused idle-dev email and mailing list. - -- gh-78889: Stop Shell freezes by blocking user access to non-method - sys.stdout.shell attributes, which are all private. - -- gh-120083: Add explicit black IDLE Hovertip foreground color needed for - recent macOS. Fixes Sonoma showing unreadable white on pale yellow. Patch - by John Riggles. - -- gh-120104: Fix padding in config and search dialog windows in IDLE. - -Documentation -------------- - -- gh-124872: Added definitions for :term:`context`, :term:`current context`, - and :term:`context management protocol`, updated related definitions to be - consistent, and expanded the documentation for - :class:`contextvars.Context`. - -- gh-125018: The :mod:`importlib.metadata` documentation now includes - semantic cross-reference targets for the significant documented APIs. This - means intersphinx references like :func:`importlib.metadata.version` will - now work as expected. - -- gh-124720: Update "Using Python on a Mac" section of the "Python Setup and - Usage" document and include information on installing free-threading - support. - -- gh-124457: Remove coverity scan from the CPython repo. It has not been - used since 2020 and is currently unmaintained. - -- gh-116622: Add an Android platform guide, and flag modules not available - on Android. - -- gh-123976: Refresh docs around custom providers. - -- gh-70870: Clarified the dual usage of the term "free variable" (both the - formal meaning of any reference to names defined outside the local scope, - and the narrower pragmatic meaning of nonlocal variables named in - ``co_freevars``). - -- gh-121277: Writers of CPython's documentation can now use ``next`` as the - version for the ``versionchanged``, ``versionadded``, ``deprecated`` - directives. - -- gh-117765: Improved documentation for :func:`unittest.mock.patch.dict` - -- gh-121749: Fix documentation for :c:func:`PyModule_AddObjectRef`. - -- gh-120012: Clarify the behaviours of :meth:`multiprocessing.Queue.empty` - and :meth:`multiprocessing.SimpleQueue.empty` on closed queues. Patch by - Bénédikt Tran. - -- gh-119574: Added some missing environment variables to the output of - :option:`--help-env`. - -- bpo-34008: The :c:func:`Py_Main` documentation moved from the "Very High - Level API" section to the "Initialization and Finalization" section. - - Also make it explicit that we expect ``Py_Main`` to typically be called - instead of ``Py_Initialize`` rather than after it (since ``Py_Main`` makes - its own call to ``Py_Initialize``). Document that calling both is - supported but is version dependent on which settings will be applied - correctly. - -Core and Builtins ------------------ - -- gh-124375: Fix a crash in the free threading build when the GC runs - concurrently with a new thread starting. - -- gh-125221: Fix possible race condition when calling - :meth:`~object.__reduce_ex__` for the first time in the free threading - build. - -- gh-125174: Make the handling of reference counts of immortal objects more - robust. Immortal objects with reference counts that deviate from their - original reference count by up to a billion (half a billion on 32 bit - builds) are still counted as immortal. - -- gh-125039: Make ``this_instr`` and ``prev_instr`` const in cases - generator. - -Library -------- - -- gh-125008: Fix :func:`tokenize.untokenize` producing invalid syntax for - double braces preceded by certain escape characters. - -Core and Builtins ------------------ - -- gh-124871: Fix compiler bug (in some versions of 3.13) where an assertion - fails during reachability analysis. - -- gh-123378: Fix a crash in the :meth:`~object.__str__` method of - :exc:`UnicodeError` objects when the :attr:`UnicodeError.start` and - :attr:`UnicodeError.end` values are invalid or out-of-range. Patch by - Bénédikt Tran. - -- gh-118093: Improve the experimental JIT compiler's ability to stay "on - trace" when encountering highly-biased branches. - -- gh-124642: Fixed scalability issue in free-threaded builds for lock-free - reads from dictionaries in multi-threaded scenarios - -- gh-116510: Fix a crash caused by immortal interned strings being shared - between sub-interpreters that use basic single-phase init. In that case, - the string can be used by an interpreter that outlives the interpreter - that created and interned it. For interpreters that share obmalloc state, - also share the interned dict with the main interpreter. - -- gh-116510: Fix a bug that can cause a crash when sub-interpreters use - "basic" single-phase extension modules. Shared objects could refer to - PyGC_Head nodes that had been freed as part of interpreter cleanup. - -- gh-119180: The ``__main__`` module no longer always contains an - ``__annotations__`` dictionary in its global namespace. - -- gh-124547: When deallocating an object with inline values whose - ``__dict__`` is still live: if memory allocation for the inline values - fails, clear the dictionary. Prevents an interpreter crash. - -- gh-124513: Fix a crash in FrameLocalsProxy constructor: check the number - of arguments. Patch by Victor Stinner. - -- gh-124442: Fix nondeterminism in compilation by sorting the value of - :attr:`~type.__static_attributes__`. Patch by kp2pml30. - -- gh-124285: Fix bug where ``bool(a)`` can be invoked more than once during - the evaluation of a compound boolean expression. - -- gh-123856: Fix PyREPL failure when a keyboard interrupt is triggered after - using a history search - -- gh-65961: Deprecate the setting and using ``__package__`` and - ``__cached__``. - -- gh-119726: The JIT now generates more efficient code for calls to C - functions resulting in up to 0.8% memory savings and 1.5% speed - improvement on AArch64. Patch by Diego Russo. - -- gh-122878: Use the ``pager`` binary, if available (e.g. on Debian and - derivatives), to display REPL ``help()``. - -- gh-124188: Fix reading and decoding a line from the source file with - non-UTF-8 encoding for syntax errors raised in the compiler. - -- gh-124027: Support ``<page up>``, ``<page down>``, and ``<delete>`` keys - in the Python REPL when ``$TERM`` is set to ``vt100``. - -- gh-124022: Fix bug where docstring is removed from classes in interactive - mode. - -- gh-123958: docstrings are now removed from the optimized AST in - optimization level 2. - -- gh-123923: The ``f_executable`` field in the internal - :c:struct:`_PyInterpreterFrame` struct now uses a tagged pointer. - Profilers and debuggers that uses this field should clear the least - significant bit to recover the :c:expr:`PyObject*` pointer. - -- gh-77894: Fix possible crash in the garbage collector when it tries to - break a reference loop containing a :class:`memoryview` object. Now a - :class:`!memoryview` object can only be cleared if there are no buffers - that refer it. - -- gh-120221: asyncio REPL is now again properly recognizing - KeyboardInterrupts. Display of exceptions raised in secondary threads is - fixed. - -- gh-119310: Allow the new interactive shell to read history files written - with the editline library that use unicode-escaped entries. Patch by - aorcajo and Łukasz Langa. - -- gh-123572: Fix key mappings for various F-keys in Windows for the new - REPL. Patch by devdanzin - -Library -------- - -- gh-123614: Add :func:`turtle.save` to easily save Turtle drawings as - PostScript files. Patch by Marie Roald and Yngve Mardal Moe. - -Core and Builtins ------------------ - -- gh-123339: Setting the :attr:`!__module__` attribute for a class now - removes the ``__firstlineno__`` item from the type's dict, so they will no - longer be inconsistent. - -- gh-119034: Change ``<page up>`` and ``<page down>`` keys of the Python - REPL to history search forward/backward. Patch by Victor Stinner. - -- gh-123562: Improve :exc:`SyntaxError` message for using ``case ... as - ...`` with not a name. - -- gh-123545: Fix a double decref in rare cases on experimental JIT builds. - -- gh-123484: Fix ``_Py_DebugOffsets`` for long objects to be relative to the - start of the object rather than the start of a subobject. - -- gh-123446: Fix empty function name in :exc:`TypeError` when builtin magic - methods are used without the required args. - -- gh-123440: Improve :exc:`SyntaxError` message for using ``except as`` with - not a name. - -- gh-116017: Improved JIT memory consumption by periodically freeing memory - used by infrequently-executed code. This change is especially likely to - improve the memory footprint of long-running programs. - -- gh-123344: Add AST optimizations for type parameter defaults. - -- gh-123321: Prevent Parser/myreadline race condition from segfaulting on - multi-threaded use. Patch by Bar Harel and Amit Wienner. - -- gh-123177: Fix a bug causing stray prompts to appear in the middle of - wrapped lines in the new REPL. - -- gh-122982: Extend the deprecation period for bool inversion (``~``) by two - years. - -- gh-123271: Make concurrent iterations over the same :func:`zip` iterator - safe under free-threading. - -- gh-123275: Support :option:`-X gil=1 <-X>` and :envvar:`PYTHON_GIL=1 - <PYTHON_GIL>` on non-free-threaded builds. - -- gh-123177: Deactivate line wrap in the Apple Terminal via a ANSI escape - code. Patch by Pablo Galindo - -- gh-123229: Fix valgrind warning by initializing the f-string buffers to 0 - in the tokenizer. Patch by Pablo Galindo - -- gh-122298: Restore printout of GC stats when - ``gc.set_debug(gc.DEBUG_STATS)`` is called. This feature was accidentally - removed when implementing incremental GC. - -- gh-121804: Correctly show error locations when a :exc:`SyntaxError` is - raised in the basic REPL. Patch by Sergey B Kirpichev. - -- gh-115776: Enables inline values (Python's equivalent of hidden classes) - on any class who's instances are of a fixed size. - -- gh-123142: Fix too-wide source location in exception tracebacks coming - from broken iterables in comprehensions. - -- gh-123048: Fix a bug where pattern matching code could emit a - :opcode:`JUMP_FORWARD` with no source location. - -- gh-118093: Break up ``CALL_ALLOC_AND_ENTER_INIT`` into micro-ops and relax - requirement for exact args, in order to increase the amount of code - supported by tier 2. - -- gh-123123: Fix displaying :exc:`SyntaxError` exceptions covering multiple - lines. Patch by Pablo Galindo - -- gh-123083: Fix a potential use-after-free in ``STORE_ATTR_WITH_HINT``. - -- gh-123022: Fix crash in free-threaded build when calling - :c:func:`Py_Initialize` from a non-main thread. - -- gh-118093: Add three specializations for :opcode:`CALL_KW`: - - * :opcode:`!CALL_KW_PY` for calls to Python functions - * :opcode:`!CALL_KW_BOUND_METHOD` for calls to bound methods - * :opcode:`!CALL_KW_NON_PY` for all other calls - -- gh-122821: Make sure that branches in :keyword:`while` statements have - consistent offsets for :mod:`sys.monitoring`. :keyword:`!while` statements - are now compiled with a simple jump at the end of the body, instead of - duplicating the test. - -- gh-122907: Building with ``HAVE_DYNAMIC_LOADING`` now works as well as it - did in 3.12. Existing deficiences will be addressed separately. (See - https://github.com/python/cpython/issues/122950.) - -- gh-122888: Fix crash on certain calls to ``str()`` with positional - arguments of the wrong type. Patch by Jelle Zijlstra. - -- gh-118093: Improve the experimental JIT's handling of polymorphic code. - -- gh-122697: Fixed memory leaks at interpreter shutdown in the free-threaded - build, and also reporting of leaked memory blocks via :option:`-X - showrefcount <-X>`. - -- gh-116622: Fix Android stdout and stderr messages being truncated or lost. - -- gh-122527: Fix a crash that occurred when a ``PyStructSequence`` was - deallocated after its type's dictionary was cleared by the GC. The type's - :c:member:`~PyTypeObject.tp_basicsize` now accounts for non-sequence - fields that aren't included in the :c:macro:`Py_SIZE` of the sequence. - -- gh-122445: Add only fields which are modified via self.* to - :attr:`~type.__static_attributes__`. - -- gh-122417: In the free-threaded build, the reference counts for heap type - objects are now partially stored in a distributed manner in per-thread - arrays. This reduces contention on the heap type's reference count fields - when creating or destroying instances of the same type from multiple - threads concurrently. - -- gh-116090: Fix an issue in JIT builds that prevented some :keyword:`for` - loops from correctly firing :monitoring-event:`RAISE` monitoring events. - -- gh-122300: Preserve AST nodes for f-string with single-element format - specifiers. Patch by Pablo Galindo - -- gh-120906: :attr:`frame.f_locals` now supports arbitrary hashable objects - as keys. - -- gh-122239: When a :class:`list`, :class:`tuple` or :class:`dict` with too - many elements is unpacked, show the actual length in the error message. - -- gh-122245: Detection of writes to ``__debug__`` is moved from the - compiler's codegen stage to the symtable. This means that these errors are - now detected even in code that is optimized away before codegen (such as - assertions with the :option:`-O` command line option). - -- gh-122234: Specializations for sums with float and complex inputs in - :func:`sum` now always use compensated summation. Also, for integer items - in above specializations: :c:func:`PyLong_AsDouble` is used, instead of - :c:func:`PyLong_AsLongAndOverflow`. Patch by Sergey B Kirpichev. - -- gh-122208: Dictionary watchers now only deliver the PyDict_EVENT_ADDED - event when the insertion is in a known good state to succeed. - -- gh-122160: Remove the ``BUILD_CONST_KEY_MAP`` opcode. Use - :opcode:`BUILD_MAP` instead. - -- gh-122029: Emit ``c_call`` events in :func:`sys.setprofile` when a - ``PyMethodObject`` pointing to a ``PyCFunction`` is called. - -- gh-122026: Fix a bug that caused the tokenizer to not correctly identify - mismatched parentheses inside f-strings in some situations. Patch by Pablo - Galindo - -- gh-99108: Python's hashlib now unconditionally uses the vendored HACL* - library for Blake2. Python no longer accepts libb2 as an optional - dependency for Blake2. - - We refreshed HACL* to the latest version, and now vendor HACL*'s 128-bit - and 256-bit wide vector implementations for Blake2, which are used on - x86/x64 toolchains when the required CPU features are available at - runtime. - - HACL*'s 128-bit wide vector implementation of Blake2 can also run on ARM - NEON and Power8, but lacking evidence of a performance gain, these are not - enabled (yet). - -Library -------- - -- gh-121999: The default extraction filter for the :mod:`tarfile` module is - now set to :func:`'data' <tarfile.data_filter>`. - -Core and Builtins ------------------ - -- gh-121860: Fix crash when rematerializing a managed dictionary after it - was deleted. - -- gh-121795: Improve performance of set membership testing, ``set.remove()`` - and ``set.discard()`` when the argument is a set. - -- gh-121814: Fixed the SegFault when :c:func:`PyEval_SetTrace` is used with - no Python frame on stack. - -- gh-121295: Fix PyREPL console getting into a blocked state after - interrupting a long paste - -- gh-121794: Fix bug in free-threaded Python where a resurrected object - could lead to a negative ref count assertion failure. - -- gh-121657: Improve the :exc:`SyntaxError` message if the user tries to use - :keyword:`yield from <yield>` outside a function. - -- gh-121609: Fix pasting of characters containing unicode character joiners - in the new REPL. Patch by Marta Gomez Macias - -- gh-121297: Previously, incorrect usage of :keyword:`await` or asynchronous - comprehensions in code removed by the :option:`-O` option was not flagged - by the Python compiler. Now, such code raises :exc:`SyntaxError`. Patch by - Jelle Zijlstra. - -- gh-117482: Unexpected slot wrappers are no longer created for builtin - static types in subinterpreters. - -- gh-121562: Optimized performance of hex_from_char by replacing switch-case - with a lookup table - -- gh-121499: Fix a bug affecting how multi-line history was being rendered - in the new REPL after interacting with the new screen cache. Patch by - Pablo Galindo - -- gh-121497: Fix a bug that was preventing the REPL to correctly respect the - history when an input hook was set. Patch by Pablo Galindo - -- gh-121012: Tier 2 execution now ensures that list iterators remain - exhausted, once they become exhausted. - -- gh-121439: Allow tuples of length 20 in the freelist to be reused. - -- gh-121288: :exc:`ValueError` messages for :meth:`list.index`, - :meth:`range.index`, :meth:`!deque.index`, :meth:`!deque.remove` and - :meth:`!ShareableList.index` no longer contain the repr of the searched - value (which can be arbitrary large) and are consistent with error - messages for other :meth:`~sequence.index` and :meth:`~sequence.remove` - methods. - -- gh-121368: Fix race condition in ``_PyType_Lookup`` in the free-threaded - build due to a missing memory fence. This could lead to - ``_PyType_Lookup`` returning incorrect results on arm64. - -- gh-121149: Added specialization for summation of complexes, this also - improves accuracy of builtin :func:`sum` for such inputs. Patch by Sergey - B Kirpichev. - -- gh-121130: Fix f-strings with debug expressions in format specifiers. - Patch by Pablo Galindo - -Library -------- - -- gh-121381: Remove ``subprocess._USE_VFORK`` escape hatch code and - documentation. It was added just in case, and doesn't have any known cases - that require it. - -Core and Builtins ------------------ - -- gh-119726: Optimize code layout for calls to C functions from the JIT on - AArch64. Patch by Diego Russo. - -- gh-121115: :c:func:`PyLong_AsNativeBytes` no longer uses - :meth:`~object.__index__` methods by default. The - ``Py_ASNATIVEBYTES_ALLOW_INDEX`` flag has been added to allow it. - -- gh-120838: :c:func:`Py_Finalize()` and :c:func:`Py_FinalizeEx()` now - always run with the main interpreter active. - -- gh-113433: Subinterpreters now get cleaned up automatically during runtime - finalization. - -- gh-119726: Improve the speed and memory use of C function calls from JIT - code on AArch64. Patch by Diego Russo - -- gh-116017: Simplify the warmup mechanism used for "side exits" in JIT - code, resulting in slightly better performance and slightly lower memory - usage for most platforms. - -- gh-98442: Fix too wide source locations of the cleanup instructions of a - with statement. - -- gh-120754: Reduce the number of system calls invoked when reading a whole - file (ex. ``open('a.txt').read()``). For a sample program that reads the - contents of the 400+ ``.rst`` files in the cpython repository ``Doc`` - folder, there is an over 10% reduction in system call count. - -- gh-119462: Make sure that invariants of type versioning are maintained: * - Superclasses always have their version number assigned before subclasses * - The version tag is always zero if the tag is not valid. * The version tag - is always non-if the tag is valid. - -- gh-120437: Fix ``_CHECK_STACK_SPACE`` optimization problems introduced in - :gh:`118322`. - -- gh-120722: Correctly set the bytecode position on return instructions - within lambdas. Patch by Jelle Zijlstra. - -- gh-120367: Fix bug where compiler creates a redundant jump during - pseudo-op replacement. Can only happen with a synthetic AST that has a try - on the same line as the instruction following the exception handler. - -- gh-120507: Remove the ``BEFORE_WITH`` and ``BEFORE_ASYNC_WITH`` - instructions. Add the new :opcode:`LOAD_SPECIAL` instruction. Generate - code for ``with`` and ``async with`` statements using the new instruction. - -- gh-113993: Strings interned with :func:`sys.intern` are again - garbage-collected when no longer used, as per the documentation. Strings - interned with the C function :c:func:`PyUnicode_InternInPlace` are still - immortal. Internals of the string interning mechanism have been changed. - This may affect performance and identities of :class:`str` objects. - -Library -------- - -- gh-120485: Add an override of ``allow_reuse_port`` on classes subclassing - ``socketserver.TCPServer`` where ``allow_reuse_address`` is also - overridden. - -Core and Builtins ------------------ - -- gh-120384: Fix an array out of bounds crash in ``list_ass_subscript``, - which could be invoked via some specifically tailored input: including - concurrent modification of a list object, where one thread assigns a slice - and another clears it. - -- gh-120367: Fix crash in compiler on code with redundant NOPs and JUMPs - which show up after exception handlers are moved to the end of the code. - -Library -------- - -- gh-120380: Fix Python implementation of :class:`pickle.Pickler` for - :class:`bytes` and :class:`bytearray` objects when using protocol version - 5. Patch by Bénédikt Tran. - -Core and Builtins ------------------ - -- gh-120397: Improve the throughput by up to two times for the - :meth:`str.count`, :meth:`bytes.count` and :meth:`bytearray.count` methods - for counting single characters. - -- gh-120221: Deliver real signals on Ctrl-C and Ctrl-Z in the new REPL. - Patch by Pablo Galindo - -- gh-120346: Respect :envvar:`PYTHON_BASIC_REPL` when running in interactive - inspect mode (``python -i``). Patch by Pablo Galindo - -- gh-93691: Fix source locations of instructions generated for the iterator - of a for statement. - -- gh-120198: Fix a crash when multiple threads read and write to the same - ``__class__`` of an object concurrently. - -- gh-120298: Fix use-after free in ``list_richcompare_impl`` which can be - invoked via some specifically tailored evil input. - -- gh-119666: Fix a compiler crash in the case where two comprehensions in - class scope both reference ``__class__``. - -- gh-119726: JIT: Re-use trampolines on AArch64 when creating stencils. - Patch by Diego Russo - -- gh-120225: Fix crash in compiler on empty block at end of exception - handler. - -- gh-93691: Fix source locations of instructions generated for with - statements. - -- gh-120097: ``FrameLocalsProxy`` now subclasses ``collections.abc.Mapping`` - and can be matched as a mapping in ``match`` statements - -- gh-120080: Direct call to the :meth:`!int.__round__` now accepts ``None`` - as a valid argument. - -- gh-119933: Improve :exc:`SyntaxError` messages for invalid expressions in - a type parameters bound, a type parameter constraint tuple or a default - type parameter. Patch by Bénédikt Tran. - -- gh-119724: Reverted improvements to error messages for ``elif``/``else`` - statements not matching any valid statements, which made in hard to locate - the syntax errors inside those ``elif``/``else`` blocks. - -- gh-119879: String search is now slightly faster for certain cases. It now - utilizes last character gap (good suffix rule) for two-way periodic - needles. - -- gh-119842: Honor :c:func:`PyOS_InputHook` in the new REPL. Patch by Pablo - Galindo - -- gh-119180: :func:`classmethod` and :func:`staticmethod` now wrap the - :attr:`~object.__annotations__` and :attr:`~object.__annotate__` - attributes of their underlying callable lazily. See :pep:`649`. Patch by - Jelle Zijlstra. - -- gh-119821: Fix execution of :ref:`annotation scopes <annotation-scopes>` - within classes when ``globals`` is set to a non-dict. Patch by Jelle - Zijlstra. - -- gh-118934: Make ``PyEval_GetLocals`` return borrowed reference - -- gh-119740: Remove the previously-deprecated delegation of :func:`int` to - :meth:`~object.__trunc__`. - -- gh-119689: Generate stack effect metadata for pseudo instructions from - bytecodes.c. - -- gh-109218: :func:`complex` accepts now a string only as a positional - argument. Passing a complex number as the "real" or "imag" argument is - deprecated; it should only be passed as a single positional argument. - -- gh-119548: Add a ``clear`` command to the REPL. Patch by Pablo Galindo - -- gh-111999: Fix the signature of :meth:`str.format_map`. - -- gh-119560: An invalid assert in beta 1 has been removed. The assert would - fail if ``PyState_FindModule()`` was used in an extension module's init - function before the module def had been initialized. - -- gh-119369: Fix deadlock during thread deletion in free-threaded build, - which could occur when the GIL was enabled at runtime. - -- gh-119525: Fix deadlock involving ``_PyType_Lookup()`` cache in the - free-threaded build when the GIL is dynamically enabled at runtime. - -- gh-119258: Eliminate type version guards in the tier two interpreter. - - Note that setting the ``tp_version_tag`` manually (which has never been - supported) may result in crashes. - -- gh-119311: Fix bug where names are unexpectedly mangled in the bases of - generic classes. - -- gh-119395: Fix bug where names appearing after a generic class are mangled - as if they are in the generic class. - -- gh-119372: Correct invalid corner cases in complex division (resulted in - ``(nan+nanj)`` output), e.g. ``1/complex('(inf+infj)')``. Patch by - Sergey B Kirpichev. - -- gh-119180: Evaluation of annotations is now deferred. See :pep:`649` for - details. - -- gh-119180: Replace :opcode:`!LOAD_ASSERTION_ERROR` opcode with - :opcode:`LOAD_COMMON_CONSTANT` and add support for - :exc:`NotImplementedError`. - -- gh-119213: Non-builtin modules built with argument clinic were crashing if - used in a subinterpreter before the main interpreter. The objects that - were causing the problem by leaking between interpreters carelessly have - been fixed. - -- gh-119011: Fixes ``type.__type_params__`` to return an empty tuple instead - of a descriptor. - -- gh-118692: Avoid creating unnecessary :exc:`StopIteration` instances for - monitoring. - -- gh-119180: Add an ``__annotate__`` attribute to functions, classes, and - modules as part of :pep:`649`. Patch by Jelle Zijlstra. - -- gh-119049: Fix displaying the source line for warnings created by the C - API if the :mod:`warnings` module had not yet been imported. - -- gh-119057: Improve :exc:`ZeroDivisionError` error message. Now, all error - messages are harmonized: all ``/``, ``//``, and ``%`` operations just use - "division by zero" message. And ``0 ** -1`` operation uses "zero to a - negative power". - -- gh-118844: Fix build failures when configuring with both ``--disable-gil`` - and ``--enable-experimental-jit``. - -- gh-118921: Add ``copy()`` method for ``FrameLocalsProxy`` which returns a - snapshot ``dict`` for local variables. - -- gh-117657: Fix data races on the field that stores a pointer to the - interpreter's main thread that occur in free-threaded builds. - -- gh-118750: If the C version of the ``decimal`` module is available, - ``int(str)`` now uses it to supply an asymptotically much faster - conversion. However, this only applies if the string contains over about 2 - million digits. - -- gh-118767: Using :data:`NotImplemented` in a boolean context now raises - :exc:`TypeError`. Contributed by Jelle Zijlstra. - -- gh-118561: Fix race condition in free-threaded build where - :meth:`list.extend` could expose uninitialised memory to concurrent - readers. - -- gh-117139: Convert the Python evaluation stack to use internal stack - references. The purpose is to support tagged pointers. In :pep:`703`, this - will allow for its form of deferred reference counting. For both the - default and free-threaded builds, this sets up the infrastructure for - unboxed integers in the future. - -Library -------- - -- gh-115801: Raise ``TypeError`` when passing a string to - :func:`difflib.unified_diff` and :func:`difflib.context_diff`. - -Core and Builtins ------------------ - -- gh-117558: Improve error messages when a string, bytes or bytearray object - of length 1 is expected. - -- gh-117195: Avoid assertion failure for debug builds when calling - ``object.__sizeof__(1)`` - -- gh-116022: Improve the :meth:`~object.__repr__` output of - :class:`~ast.AST` nodes. - -- gh-114091: Changed the error message for awaiting something that can't be - awaited from "object <type> can't be used in an await expression" to - "'<type>' object can't be awaited". - -- gh-113190: :c:func:`Py_Finalize` now deletes all interned strings. - -- gh-84978: Add class methods :meth:`float.from_number` and - :meth:`complex.from_number`. - -- gh-95144: Improve the error message from ``a in b`` when ``b`` is not a - container to mention the term "container". - -- bpo-24766: Fix handling of ``doc`` argument to subclasses of ``property``. - -C API ------ - -- gh-123961: Convert the :ref:`curses.window <curses-window-objects>` static - type exposed by the :c:macro:`!PyCursesWindow_Type` macro in - ``Include/py_curses.h`` to a :ref:`heap type <heap-types>`. Patch by - Bénédikt Tran. - -- gh-124502: Add :c:func:`PyUnicode_Equal` function to the limited C API: - test if two strings are equal. Patch by Victor Stinner. - -- gh-124296: :c:type:`PyDictObject` no longer maintains a private version - tag field ``ma_version_tag`` per :pep:`699`. This field was originally - added in Python 3.6 (:pep:`509`) and deprecated in Python 3.12. - -- gh-124160: Fix crash when importing modules containing state and - single-phase initialization in a subinterpreter. - -- gh-124153: Add :c:func:`PyType_GetBaseByToken` and :c:data:`Py_tp_token` - slot for easier type checking, related to :pep:`489` and :pep:`630`. - -- gh-124127: In the limited C API 3.14 and newer, :c:func:`Py_REFCNT` is now - implemented as an opaque function call to hide implementation details. - Patch by Victor Stinner. - -- gh-123880: Fixed a bug that prevented circular imports of extension - modules that use single-phase initialization. - -- gh-123909: :c:func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases` - and :c:func:`PyType_FromModuleAndSpec` will now fail if the metaclass of - the new type has custom :c:member:`~PyTypeObject.tp_new`. - -- gh-107954: Add functions to configure the Python initialization - (:pep:`741`): - - * :c:func:`PyInitConfig_Create` - * :c:func:`PyInitConfig_Free` - * :c:func:`PyInitConfig_GetError` - * :c:func:`PyInitConfig_GetExitCode` - * :c:func:`PyInitConfig_HasOption` - * :c:func:`PyInitConfig_GetInt` - * :c:func:`PyInitConfig_GetStr` - * :c:func:`PyInitConfig_GetStrList` - * :c:func:`PyInitConfig_FreeStrList` - * :c:func:`PyInitConfig_SetInt` - * :c:func:`PyInitConfig_SetStr` - * :c:func:`PyInitConfig_SetStrList` - * :c:func:`PyInitConfig_AddModule` - * :c:func:`Py_InitializeFromInitConfig` - - Patch by Victor Stinner. - -- gh-107954: Add functions to get and set the current runtime Python - configuration: - - * :c:func:`PyConfig_Get` - * :c:func:`PyConfig_GetInt` - * :c:func:`PyConfig_Set` - * :c:func:`PyConfig_Names` - - Patch by Victor Stinner. - -- gh-123465: :c:macro:`Py_RELATIVE_OFFSET` is now allowed in - :c:type:`PyMemberDef` for the special offset member - ``"__vectorcalloffset__"``, as well as the discouraged special offset - members ``"__dictoffset__"`` and ``"__weaklistoffset__"`` - -- gh-100554: Added a slot ``Py_tp_vectorcall`` to set - :c:member:`~PyTypeObject.tp_vectorcall` via the :c:func:`PyType_FromSpec` - function family. Limited API extensions can use this feature to provide - more efficient vector call-based implementation of ``__new__`` and - ``__init__``. - -- gh-122854: Add :c:func:`Py_HashBuffer` to compute and return the hash - value of a buffer. Patch by Antoine Pitrou and Victor Stinner. - -- gh-122728: Fix :c:func:`PyEval_GetLocals` to avoid :exc:`SystemError` - ("bad argument to internal function"). Patch by Victor Stinner. - -- gh-116622: Make :any:`PyObject_Print` work around a bug in Android and - OpenBSD which prevented it from throwing an exception when trying to write - to a read-only stream. - -- gh-105201: Add :c:func:`PyIter_NextItem` to replace :c:func:`PyIter_Next`, - which has an ambiguous return value. Patch by Irit Katriel and Erlend - Aasland. - -- gh-121489: Export private :c:func:`!_PyBytes_Join` again. - -- gh-121645: Add :c:func:`PyBytes_Join(sep, iterable) <PyBytes_Join>` - function, similar to ``sep.join(iterable)`` in Python. Patch by Victor - Stinner. - -- gh-89364: Export the :c:func:`PySignal_SetWakeupFd` function. Previously, - the function was documented but it couldn't be used in 3rd party code. - Patch by Victor Stinner. - -- gh-113993: :c:func:`PyUnicode_InternInPlace` no longer prevents its - argument from being garbage collected. - - Several functions that take ``char *`` are now documented as possibly - preventing string objects from being garbage collected; refer to their - documentation for details: :c:func:`PyUnicode_InternFromString`, - :c:func:`PyDict_SetItemString`, :c:func:`PyObject_SetAttrString`, - :c:func:`PyObject_DelAttrString`, :c:func:`PyUnicode_InternFromString`, - and ``PyModule_Add*`` convenience functions. - -- gh-113601: Removed debug build assertions related to interning strings, - which were falsely triggered by stable ABI extensions. - -- gh-112136: Restore the private ``_PyArg_Parser`` structure and the private - ``_PyArg_ParseTupleAndKeywordsFast()`` function, previously removed in - Python 3.13 alpha 1. Patch by Victor Stinner. - -- gh-120642: Remove the private ``_Py_CODEUNIT`` type from the public C API. - The internal ``pycore_code.h`` header should now be used to get this - internal type. Patch by Victor Stinner. - -- gh-120858: :c:func:`PyDict_Next` no longer locks the dictionary in the - free-threaded build. The locking needs to be done by the caller around - the entire iteration loop. - -- gh-120642: Remove the following unstable functions: - - * ``PyUnstable_Replace_Executor()`` - * ``PyUnstable_SetOptimizer()`` - * ``PyUnstable_GetOptimizer()`` - * ``PyUnstable_GetExecutor()`` - * ``PyUnstable_Optimizer_NewCounter()`` - * ``PyUnstable_Optimizer_NewUOpOptimizer()`` - - Patch by Victor Stinner. - -- gh-120389: Add new functions to convert C ``<stdint.h>`` numbers from/to - Python :class:`int`: - - * :c:func:`PyLong_FromInt32` - * :c:func:`PyLong_FromUInt32` - * :c:func:`PyLong_FromInt64` - * :c:func:`PyLong_FromUInt64` - * :c:func:`PyLong_AsInt32` - * :c:func:`PyLong_AsUInt32` - * :c:func:`PyLong_AsInt64` - * :c:func:`PyLong_AsUInt64` - - Patch by Victor Stinner. - -- gh-120600: In the limited C API 3.14 and newer, :c:func:`Py_TYPE` is now - implemented as an opaque function call to hide implementation details. - Patch by Victor Stinner. - -- gh-70278: :c:func:`PyUnicode_FromFormat` no longer produces the ending - ``\ufffd`` character for truncated C string when use precision with ``%s`` - and ``%V``. It now truncates the string before the start of truncated - multibyte sequences. - -- gh-119771: Set :data:`errno` in :c:func:`_Py_c_pow` on overflows. Patch - by Sergey B Kirpichev. - -- gh-119182: Add a new :c:type:`PyUnicodeWriter` API to create a Python - :class:`str` object: - - * :c:func:`PyUnicodeWriter_Create`. - * :c:func:`PyUnicodeWriter_Discard`. - * :c:func:`PyUnicodeWriter_Finish`. - * :c:func:`PyUnicodeWriter_WriteChar`. - * :c:func:`PyUnicodeWriter_WriteUTF8`. - * :c:func:`PyUnicodeWriter_WriteUCS4`. - * :c:func:`PyUnicodeWriter_WriteWideChar`. - * :c:func:`PyUnicodeWriter_WriteStr`. - * :c:func:`PyUnicodeWriter_WriteRepr`. - * :c:func:`PyUnicodeWriter_WriteSubstring`. - * :c:func:`PyUnicodeWriter_Format`. - * :c:func:`PyUnicodeWriter_DecodeUTF8Stateful`. - - Patch by Victor Stinner. - -- gh-119613: Soft deprecate the :c:macro:`Py_MEMCPY` macro: use directly - ``memcpy()`` instead. Patch by Victor Stinner. - -- gh-119775: Creating :c:data:`immutable types <Py_TPFLAGS_IMMUTABLETYPE>` - with mutable bases was deprecated since 3.12 and now raises a - :exc:`TypeError`. - -- gh-119585: Fix crash when a thread state that was created by - :c:func:`PyGILState_Ensure` calls a destructor that during - :c:func:`PyThreadState_Clear` that calls back into - :c:func:`PyGILState_Ensure` and :c:func:`PyGILState_Release`. This might - occur when in the free-threaded build or when using thread-local variables - whose destructors call :c:func:`PyGILState_Ensure`. - -- gh-119613: Macros ``Py_IS_NAN``, ``Py_IS_INFINITY`` and ``Py_IS_FINITE`` - are :term:`soft deprecated`. - -- gh-119336: Restore the removed ``_PyLong_NumBits()`` function. It is used - by the pywin32 project. Patch by Ethan Smith - -- gh-119344: The critical section API is now public as part of the - non-limited C API. - -- gh-119333: Add :c:func:`PyContext_AddWatcher` and - :c:func:`PyContext_ClearWatcher` APIs to register callbacks to receive - notification on enter and exit of context objects. - -- gh-119247: Added ``Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST`` and - ``Py_END_CRITICAL_SECTION_SEQUENCE_FAST`` macros to make it possible to - use PySequence_Fast APIs safely when free-threaded, and update str.join to - work without the GIL using them. - -- gh-111389: Add :c:macro:`PyHASH_MULTIPLIER` constant: prime multiplier - used in string and various other hashes. Patch by Victor Stinner. - -- gh-118771: Several C declarations with names that didn't start with the - ``Py`` or ``_Py`` prefixes, which were added by mistake in 3.13 alpha and - beta releases, were moved to internal headers. - -- gh-116984: Make mimalloc includes relative to the current file to avoid - embedders or extensions needing to include ``Internal/mimalloc`` if they - are already including internal CPython headers. - -- gh-118789: Add :c:func:`PyUnstable_Object_ClearWeakRefsNoCallbacks`, which - clears weakrefs without calling their callbacks. - -- gh-118789: Restore ``_PyWeakref_ClearRef`` that was previously removed in - Python 3.13 alpha 1. - -- gh-117511: Make the :c:type:`PyMutex` public in the non-limited C API. - -- gh-116560: Add :c:func:`PyLong_GetSign` function. Patch by Sergey B - Kirpichev. - -- gh-97588: Fix creating bitfields in :mod:`ctypes` structures and unions. - Fields no longer overlap. - -- gh-87135: Attempting to acquire the GIL after runtime finalization has - begun in a different thread now causes the thread to hang rather than - terminate, which avoids potential crashes or memory corruption caused by - attempting to terminate a thread that is running code not specifically - designed to support termination. In most cases this hanging is harmless - since the process will soon exit anyway. - - The ``PyThread_exit_thread`` function is now deprecated. Its behavior is - inconsistent across platforms, and it can only be used safely in the - unlikely case that every function in the entire call stack has been - designed to support the platform-dependent termination mechanism. It is - recommended that users of this function change their design to not require - thread termination. In the unlikely case that thread termination is - needed and can be done safely, users may migrate to calling - platform-specific APIs such as ``pthread_exit`` (POSIX) or - ``_endthreadex`` (Windows) directly. - -- bpo-34008: Added ``Py_IsInitialized`` to the list of APIs that are safe to - call before the interpreter is initialized, and updated the embedding - tests to cover it. - -Build ------ - -- gh-125269: Fix detection of whether ``-latomic`` is needed when - cross-compiling CPython using the configure script. - -- gh-123990: Remove ``WITH_FREELISTS`` macro and ``--without-freelists`` - build configuration - -- gh-124102: Update internal documentation under PCbuild, so it now - correctly states that Windows requires VS2017 or later and Python 3.10 or - later - -- gh-124043: Building using :option:`--with-trace-refs` is (temporarily) - disallowed when the GIL is disabled. - -- gh-123418: Updated Android build to use OpenSSL 3.0.15. - -- gh-123297: Propagate the value of ``LDFLAGS`` to ``LDCXXSHARED`` in - :mod:`sysconfig`. Patch by Pablo Galindo - -- gh-121634: Allow for specifying the target compile triple for WASI. - -- gh-122578: Use WASI SDK 24 for testing. - -- gh-116622: Rename build variable ``MODULE_LDFLAGS`` back to ``LIBPYTHON``, - as it's used by package build systems (e.g. Meson). - -- gh-118943: Fix an issue where the experimental JIT could be built several - times by the ``make regen-all`` target, leading to possible race - conditions on heavily parallelized builds. - -- gh-121996: Introduce ./configure --disable-safety and - --enable-slower-safety options. Patch by Donghee Na. - -- gh-120522: Added a :option:`--with-app-store-compliance` option to patch - out known issues with macOS/iOS App Store review processes. - -- gh-120371: Support WASI SDK 22 by explicitly skipping functions that are - just stubs in wasi-libc. - -- gh-121731: Fix mimalloc compile error on GNU/Hurd - -- gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in mimalloc. - -- gh-121467: Fix a Makefile bug that prevented mimalloc header files from - being installed. - -- gh-121103: On POSIX systems, excluding macOS framework installs, the lib - directory for the free-threaded build now includes a "t" suffix to avoid - conflicts with a co-located default build installation. - -- gh-120831: The default minimum iOS version was increased to 13.0. - -- gh-121082: Fix build failure when the developer use ``--enable-pystats`` - arguments in configuration command after #118450. - -- gh-120671: Fix failing configure tests due to a missing space when - appending to CFLAGS. - -- gh-120602: Correctly handle LLVM installs with ``LLVM_VERSION_SUFFIX`` - when building with ``--enable-experimental-jit``. - -- gh-120688: On WASI in debug mode, Python is now built with compiler flag - ``-O3`` instead of ``-Og``, to support more recursive calls. Patch by - Victor Stinner. - -- gh-118943: Fix a possible race condition affecting parallel builds - configured with ``--enable-experimental-jit``, in which - :exc:`FileNotFoundError` could be caused by another process already moving - ``jit_stencils.h.new`` to ``jit_stencils.h``. - -- gh-120326: On Windows, fix build error when ``--disable-gil`` and - ``--experimental-jit`` options are combined. - -- gh-120291: Make the ``python-config`` shell script compatible with - non-bash shells. - -- gh-113565: Improve :mod:`curses` and :mod:`curses.panel` dependency checks - in :program:`configure`. - -- gh-119729: On POSIX systems, the pkg-config (``.pc``) filenames now - include the ABI flags, which may include debug ("d") and free-threaded - ("t"). For example: * ``python-3.14.pc`` (default, non-debug build) * - ``python-3.14d.pc`` (default, debug build) * ``python-3.14t.pc`` - (free-threaded build) - -- gh-119400: ``make_ssl_certs``, the script that prepares certificate data - for the test suite, now allows specifying expiration dates. - -- gh-115119: Fall back to the bundled libmpdec if a system version cannot be - found. - -- gh-119132: Update :data:`sys.version` to identify whether the build is - default build or free-threading build. Patch By Donghee Na. - -- gh-118836: Fix an ``AssertionError`` when building with - ``--enable-experimental-jit`` and the compiler emits a ``SHT_NOTE`` - section. - -- gh-118943: Fix a possible race condition affecting parallel builds - configured with ``--enable-experimental-jit``, in which compilation errors - could be caused by an incompletely-generated header file. - - -What's New in Python 3.13.0 beta 1? -=================================== - -*Release date: 2024-05-08* - -Security --------- - -- gh-116741: Update bundled libexpat to 2.6.2 - -- gh-117233: Detect BLAKE2, SHA3, Shake, & truncated SHA512 support in the - OpenSSL-ish libcrypto library at build time. This allows :mod:`hashlib` - to be used with libraries that do not to support every algorithm that - upstream OpenSSL does. - -Core and Builtins ------------------ - -- gh-118414: Add instrumented opcodes to YIELD_VALUE assertion for tracing - cases. - -- gh-117953: When a builtin or extension module is imported for the first - time, while a subinterpreter is active, the module's init function is now - run by the main interpreter first before import continues in the - subinterpreter. Consequently, single-phase init modules now fail in an - isolated subinterpreter without the init function running under that - interpreter, whereas before it would run under the subinterpreter *before* - failing, potentially leaving behind global state and callbacks and - otherwise leaving the module in an inconsistent state. - -- gh-117549: Don't use designated initializer syntax in inline functions in - internal headers. They cause problems for C++ or MSVC users who aren't yet - using the latest C++ standard (C++20). While internal, pycore_backoff.h, - is included (indirectly, via pycore_code.h) by some key 3rd party software - that does so for speed. - -Library -------- - -- gh-95382: Improve performance of :func:`json.dumps` and :func:`json.dump` - when using the argument *indent*. Depending on the data the encoding using - :func:`json.dumps` with *indent* can be up to 2 to 3 times faster. - -Core and Builtins ------------------ - -- gh-116322: In ``--disable-gil`` builds, the GIL will be enabled while - loading C extension modules. If the module indicates that it supports - running without the GIL, the GIL will be disabled once loading is - complete. Otherwise, the GIL will remain enabled for the remainder of the - interpreter's lifetime. This behavior does not apply if the GIL has been - explicitly enabled or disabled with ``PYTHON_GIL`` or ``-Xgil``. - -- gh-118513: Fix incorrect :exc:`UnboundLocalError` when two comprehensions - in the same function both reference the same name, and in one - comprehension the name is bound while in the other it's an implicit - global. - -- gh-118518: Allow the Linux perf support to work without frame pointers - using perf's advanced JIT support. The feature is activated when using the - ``PYTHON_PERF_JIT_SUPPORT`` environment variable or when running Python - with ``-Xperf_jit``. Patch by Pablo Galindo. - -- gh-117514: Add ``sys._is_gil_enabled()`` function that returns whether the - GIL is currently enabled. In the default build it always returns ``True`` - because the GIL is always enabled. In the free-threaded build, it may - return ``True`` or ``False``. - -- gh-118164: Break a loop between the Python implementation of the - :mod:`decimal` module and the Python code for integer to string - conversion. Also optimize integer to string conversion for values in the - range from 9_000 to 135_000 decimal digits. - -- gh-118473: Fix :func:`sys.set_asyncgen_hooks` not to be partially set when - raising :exc:`TypeError`. - -- gh-118465: Compiler populates the new ``__firstlineno__`` field on a class - with the line number of the first line of the class definition. - -- gh-118492: Fix an issue where the type cache can expose a previously - accessed attribute when a finalizer is run. - -- gh-117714: update ``async_generator.athrow().close()`` and - ``async_generator.asend().close()`` to close their section of the - underlying async generator - -- gh-111201: The :term:`interactive` interpreter is now implemented in - Python, which allows for a number of new features like colors, multiline - input, history viewing, and paste mode. Contributed by Pablo Galindo, - Łukasz Langa and Lysandros Nikolaou based on code from the PyPy project. - -- gh-74929: Implement PEP 667: converted :attr:`FrameType.f_locals - <frame.f_locals>` and :c:func:`PyFrame_GetLocals` to return a - write-through proxy object when the frame refers to a function or - comprehension. - -- gh-116767: Fix crash in compiler on 'async with' that has many context - managers. - -- gh-118335: Change how to use the tier 2 interpreter. Instead of running - Python with ``-X uops`` or setting the environment variable - ``PYTHON_UOPS=1``, this choice is now made at build time by configuring - with ``--enable-experimental-jit=interpreter``. - - **Beware!** This changes the environment variable to enable or disable - micro-ops to ``PYTHON_JIT``. The old ``PYTHON_UOPS`` is no longer used. - -- gh-118306: Update JIT compilation to use LLVM 18 - -- gh-118160: :ref:`Annotation scopes <annotation-scopes>` within classes can - now contain comprehensions. However, such comprehensions are not inlined - into their parent scope at runtime. Patch by Jelle Zijlstra. - -- gh-118272: Fix bug where ``generator.close`` does not free the generator - frame's locals. - -- gh-118216: Don't consider :mod:`__future__` imports with dots before the - module name. - -- gh-118074: Make sure that the Executor objects in the COLD_EXITS array - aren't assumed to be GC-able (which would access bytes outside the - object). - -- gh-107674: Lazy load frame line number to improve performance of tracing - -- gh-118082: Improve :exc:`SyntaxError` message for imports without names, - like in ``from x import`` and ``import`` cases. It now points out to users - that :keyword:`import` expects at least one name after it. - -- gh-118090: Improve :exc:`SyntaxError` message for empty type param - brackets. - -- gh-117958: Added a ``get_jit_code()`` method to access JIT compiled - machine code from the UOp Executor when the experimental JIT is enabled. - Patch by Anthony Shaw. - -- gh-117901: Add option for compiler's codegen to save nested instruction - sequences for introspection. - -- gh-116622: Redirect stdout and stderr to system log when embedded in an - Android app. - -- gh-109118: :ref:`annotation scope <annotation-scopes>` within class scopes - can now contain lambdas. - -- gh-117894: Prevent ``agen.aclose()`` objects being re-used after - ``.throw()``. - -- gh-117881: prevent concurrent access to an async generator via - athrow().throw() or asend().throw() - -- gh-117536: Fix a :exc:`RuntimeWarning` when calling - ``agen.aclose().throw(Exception)``. - -- gh-117755: Fix mimalloc allocator for huge memory allocation (around - 8,589,934,592 GiB) on s390x. Patch by Victor Stinner. - -- gh-117750: Fix issue where an object's dict would get out of sync with the - object's internal values when being cleared. ``obj.__dict__.clear()`` now - clears the internal values, but leaves the dict attached to the object. - -- gh-117431: Improve the performance of the following :class:`bytes` and - :class:`bytearray` methods by adapting them to the - :c:macro:`METH_FASTCALL` calling convention: - - * :meth:`!count` - * :meth:`!find` - * :meth:`!index` - * :meth:`!rfind` - * :meth:`!rindex` - -- gh-117709: Speed up calls to :func:`str` with positional-only argument, by - using the :pep:`590` ``vectorcall`` calling convention. Patch by Erlend - Aasland. - -- gh-117680: Give ``_PyInstructionSequence`` a Python interface and use it - in tests. - -- gh-115776: Statically allocated objects are, by definition, immortal so - must be marked as such regardless of whether they are in extension modules - or not. - -- gh-117385: Remove unhandled ``PY_MONITORING_EVENT_BRANCH`` and - ``PY_MONITORING_EVENT_EXCEPTION_HANDLED`` events from - :func:`sys.settrace`. - -- gh-116322: Extension modules may indicate to the runtime that they can run - without the GIL. Multi-phase init modules do so by calling providing - ``Py_MOD_GIL_NOT_USED`` for the ``Py_mod_gil`` slot, while single-phase - init modules call ``PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED)`` - from their init function. - -- gh-116129: Implement :pep:`696`, adding support for defaults on type - parameters. Patch by Jelle Zijlstra. - -- gh-93502: Add two new functions to the C-API, - :c:func:`PyRefTracer_SetTracer` and :c:func:`PyRefTracer_GetTracer`, that - allows to track object creation and destruction the same way the - :mod:`tracemalloc` module does. Patch by Pablo Galindo - -- gh-107674: Improved the performance of :func:`sys.settrace` significantly - -- gh-95754: Improve the error message when a script shadowing a module from - the standard library causes :exc:`AttributeError` to be raised. Similarly, - improve the error message when a script shadowing a third party module - attempts to access an attribute from that third party module while still - initialising. - -- gh-99180: Elide uninformative traceback indicators in ``return`` and - simple ``assignment`` statements. Patch by Pablo Galindo. - -- gh-105879: Allow the *globals* and *locals* arguments to :func:`exec` and - :func:`eval` to be passed as keywords. - -Library -------- - -- gh-118418: A :exc:`DeprecationWarning` is now emitted if you fail to pass - a value to the new *type_params* parameter of ``typing._eval_type()`` or - ``typing.ForwardRef._evaluate()``. (Using either of these private and - undocumented functions is discouraged to begin with, but failing to pass a - value to the ``type_params`` parameter may lead to incorrect behaviour on - Python 3.12 or newer.) - -- gh-118660: Add an optional second type parameter to - :class:`typing.ContextManager` and :class:`typing.AsyncContextManager`, - representing the return types of :meth:`~object.__exit__` and - :meth:`~object.__aexit__` respectively. This parameter defaults to ``bool - | None``. - -- gh-118650: The ``enum`` module allows method named ``_repr_*`` to be - defined on ``Enum`` types. - -- gh-118648: Add type parameter defaults to :class:`typing.Generator` and - :class:`typing.AsyncGenerator`. - -- gh-101137: Mime type ``text/x-rst`` is now supported by :mod:`mimetypes`. - -- gh-118164: The Python implementation of the ``decimal`` module could - appear to hang in relatively small power cases (like ``2**117``) if - context precision was set to a very high value. A different method to - check for exactly representable results is used now that doesn't rely on - computing ``10**precision`` (which could be effectively too large to - compute). - -- gh-111744: ``breakpoint()`` and ``pdb.set_trace()`` now enter the debugger - immediately after the call rather than before the next line is executed. - -- gh-118500: Add :mod:`pdb` support for zipapps - -- gh-118406: Add signature for :class:`sqlite3.Connection` objects. - -- gh-101732: Use a Y2038 compatible openssl time function when available. - -- gh-118404: Fix :func:`inspect.signature` for non-comparable callables. - -- gh-118402: Fix :func:`inspect.signature` for the result of the - :func:`functools.cmp_to_key` call. - -- gh-116622: On Android, :any:`sysconfig.get_platform` now returns the - format specified by :pep:`738`. - -- gh-118285: Allow to specify the signature of custom callable instances of - extension type by the ``__text_signature__`` attribute. Specify signatures - of :class:`operator.attrgetter`, :class:`operator.itemgetter`, and - :class:`operator.methodcaller` instances. - -- gh-118314: Fix an edge case in :func:`binascii.a2b_base64` strict mode, - where excessive padding is not detected when no padding is necessary. - -- gh-118271: Add the :class:`!PhotoImage` methods :meth:`!read` to read an - image from a file and :meth:`!data` to get the image data. Add - *background* and *grayscale* parameters to :class:`!PhotoImage` method - :meth:`!write`. - -- gh-118225: Add the :class:`!PhotoImage` method :meth:`!copy_replace` to - copy a region from one image to other image, possibly with pixel zooming - and/or subsampling. Add *from_coords* parameter to :class:`!PhotoImage` - methods :meth:`!copy`, :meth:`!zoom` and :meth:`!subsample`. Add *zoom* - and *subsample* parameters to :class:`!PhotoImage` method :meth:`!copy`. - -- gh-118221: Fix a bug where :meth:`sqlite3.Connection.iterdump` could fail - if a custom :attr:`row factory <sqlite3.Connection.row_factory>` was used. - Patch by Erlend Aasland. - -- gh-118013: Fix regression introduced in gh-103193 that meant that calling - :func:`inspect.getattr_static` on an instance would cause a strong - reference to that instance's class to persist in an internal cache in the - :mod:`inspect` module. This caused unexpected memory consumption if the - class was dynamically created, the class held strong references to other - objects which took up a significant amount of memory, and the cache - contained the sole strong reference to the class. The fix for the - regression leads to a slowdown in :func:`!getattr_static`, but the - function should still be significantly faster than it was in Python 3.11. - Patch by Alex Waygood. - -- gh-118218: Speed up :func:`itertools.pairwise` in the common case by up to - 1.8x. - -- gh-117486: Improve the behavior of user-defined subclasses of - :class:`ast.AST`. Such classes will now require no changes in the usual - case to conform with the behavior changes of the :mod:`ast` module in - Python 3.13. Patch by Jelle Zijlstra. - -- gh-90848: Fixed :func:`unittest.mock.create_autospec` to configure parent - mock with keyword arguments. - -- gh-118168: Fix incorrect argument substitution when :data:`typing.Unpack` - is used with the builtin :class:`tuple`. :data:`!typing.Unpack` now raises - :exc:`TypeError` when used with certain invalid types. Patch by Jelle - Zijlstra. - -- gh-118131: Add command-line interface for the :mod:`random` module. Patch - by Hugo van Kemenade. - -- gh-118107: Fix :mod:`zipimport` reading of ZIP64 files with file entries - that are too big or offset too far. - -- gh-102511: Fix :func:`os.path.normpath` for UNC paths on Windows. Speed up - :func:`os.path.splitroot` with a native implementation. - -- gh-117535: Change the unknown filename of :mod:`warnings` from ``sys`` to - ``<sys>`` to clarify that it's not a real filename. - -- gh-114053: Fix erroneous :exc:`NameError` when calling - :func:`typing.get_type_hints` on a class that made use of :pep:`695` type - parameters in a module that had ``from __future__ import annotations`` at - the top of the file. Patch by Alex Waygood. - -- gh-116931: Add parameter *fileobj* check for - :func:`tarfile.TarFile.addfile` - -- gh-117995: Don't raise :exc:`DeprecationWarning` when a :term:`sequence` - of parameters is used to bind indexed, nameless placeholders. See also - :gh:`100668`. - -- gh-80361: Fix TypeError in :func:`email.message.Message.get_payload` when - the charset is :rfc:`2231` encoded. - -- gh-86650: Fix IndexError when parse some emails with invalid Message-ID - (including one-off addresses generated by Microsoft Outlook). - -- gh-117691: Improve the error messages emitted by :mod:`tarfile` - deprecation warnings relating to PEP 706. If a ``filter`` argument is not - provided to ``extract()`` or ``extractall``, the deprecation warning now - points to the line in the user's code where the relevant function was - called. Patch by Alex Waygood. - -- gh-115874: Fixed a possible segfault during garbage collection of - ``_asyncio.FutureIter`` objects. Patch by Savannah Ostrowski. - -- gh-115060: Speed up :meth:`pathlib.Path.glob` by omitting an initial - :meth:`~pathlib.Path.is_dir` call. As a result of this change, - :meth:`~pathlib.Path.glob` can no longer raise :exc:`OSError`. - -- gh-77102: :mod:`site` module now parses ``.pth`` file with UTF-8 first, - and :term:`locale encoding` if ``UnicodeDecodeError`` happened. It - supported only locale encoding before. - -- gh-76785: We've exposed the low-level :mod:`!_interpreters` module for the - sake of the PyPI implementation of :pep:`734`. It was sometimes available - as the :mod:`!_xxsubinterpreters` module and was formerly used only for - testing. For the most part, it should be considered an internal module, - like :mod:`!_thread` and :mod:`!_imp`. See - https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26. - -- gh-115060: Speed up :meth:`pathlib.Path.glob` by not scanning directories - for non-wildcard pattern segments. - -- gh-117727: Speed up :meth:`pathlib.Path.iterdir` by using - :func:`os.scandir` internally. - -- gh-117586: Speed up :meth:`pathlib.Path.walk` by working with strings - internally. - -- gh-117722: Change the new multi-separator support in - :meth:`asyncio.StreamReader.readuntil` to only accept tuples of separators - rather than arbitrary iterables. - -- gh-117692: Fixes a bug when :class:`doctest.DocTestFinder` was failing on - wrapped ``builtin_function_or_method``. - -- gh-117348: Largely restored import time performance of configparser by - avoiding dataclasses. - -- gh-117641: Speedup :func:`os.path.commonpath` on Unix. - -- gh-117663: Fix ``_simple_enum`` to detect aliases when multiple arguments - are present but only one is the member value. - -- gh-117636: Speedup :func:`os.path.join`. - -- gh-117618: Support ``package.module`` as ``filename`` for ``break`` - command of :mod:`pdb` - -- gh-102247: the status codes enum with constants in http.HTTPStatus are - updated to include the names from RFC9110. This RFC includes some HTTP - statuses previously only used for WEBDAV and assigns more generic names to - them. - - The old constants are preserved for backwards compatibility. - -- gh-117607: Speedup :func:`os.path.relpath`. - -- gh-117586: Speed up :meth:`pathlib.Path.glob` by working with strings - internally. - -- gh-117225: Add colour to doctest output. Patch by Hugo van Kemenade. - -- gh-117566: :meth:`ipaddress.IPv6Address.is_loopback` will now return - ``True`` for IPv4-mapped loopback addresses, i.e. addresses in the - ``::ffff:127.0.0.0/104`` address space. - -- gh-117546: Fix issue where :func:`os.path.realpath` stopped resolving - symlinks after encountering a symlink loop on POSIX. - -- gh-116720: Improved behavior of :class:`asyncio.TaskGroup` when an - external cancellation collides with an internal cancellation. For example, - when two task groups are nested and both experience an exception in a - child task simultaneously, it was possible that the outer task group would - misbehave, because its internal cancellation was swallowed by the inner - task group. - - In the case where a task group is cancelled externally and also must raise - an :exc:`ExceptionGroup`, it will now call the parent task's - :meth:`~asyncio.Task.cancel` method. This ensures that a - :exc:`asyncio.CancelledError` will be raised at the next :keyword:`await`, - so the cancellation is not lost. - - An added benefit of these changes is that task groups now preserve the - cancellation count (:meth:`asyncio.Task.cancelling`). - - In order to handle some corner cases, :meth:`asyncio.Task.uncancel` may - now reset the undocumented ``_must_cancel`` flag when the cancellation - count reaches zero. - -- gh-117516: Add :data:`typing.TypeIs`, implementing :pep:`742`. Patch by - Jelle Zijlstra. - -- gh-117503: Fix support of non-ASCII user names in bytes paths in - :func:`os.path.expanduser` on Posix. - -- gh-117394: :func:`os.path.ismount` is now 2-3 times faster if the user has - permissions. - -- gh-117313: Only treat ``'\n'``, ``'\r'`` and ``'\r\n'`` as line separators - in re-folding the :mod:`email` messages. Preserve control characters - ``'\v'``, ``'\f'``, ``'\x1c'``, ``'\x1d'`` and ``'\x1e'`` and Unicode line - separators ``'\x85'``, ``'\u2028'`` and ``'\u2029'`` as is. - -- gh-117142: Convert :mod:`!_ctypes` to multi-phase initialisation - (:pep:`489`). - -- gh-66543: Add the :func:`mimetypes.guess_file_type` function which works - with file path. Passing file path instead of URL in - :func:`~mimetypes.guess_type` is :term:`soft deprecated`. - -- gh-68583: webbrowser CLI: replace getopt with argparse, add long options. - Patch by Hugo van Kemenade. - -- gh-116871: Name suggestions for :exc:`AttributeError` and - :exc:`ImportError` now only include underscored names if the original name - was underscored. - -- gh-116023: Don't show empty fields (value ``None`` or ``[]``) in - :func:`ast.dump` by default. Add ``show_empty=False`` parameter to - optionally show them. - -- gh-115961: Added :attr:`!name` and :attr:`!mode` attributes for compressed - and archived file-like objects in modules :mod:`bz2`, :mod:`lzma`, - :mod:`tarfile` and :mod:`zipfile`. The value of the :attr:`!mode` - attribute of :class:`gzip.GzipFile` was changed from integer (``1`` or - ``2``) to string (``'rb'`` or ``'wb'``). The value of the :attr:`!mode` - attribute of the readable file-like object returned by - :meth:`zipfile.ZipFile.open` was changed from ``'r'`` to ``'rb'``. - -- gh-82062: Fix :func:`inspect.signature` to correctly handle parameter - defaults on methods in extension modules that use names defined in the - module namespace. - -- gh-83856: Honor :mod:`atexit` for all :mod:`multiprocessing` start methods - -- gh-113081: Print colorized exception just like built-in traceback in - :mod:`pdb` - -- gh-112855: Speed up pickling of :class:`pathlib.PurePath` objects. Patch - by Barney Gale. - -- gh-111744: Support opcode events in :mod:`bdb` - -- gh-109617: :mod:`!ncurses`: fixed a crash that could occur on macOS 13 or - earlier when Python was built with Apple Xcode 15's SDK. - -- gh-83151: Enabled arbitrary statements and evaluations in :mod:`pdb` shell - to access the local variables of the current frame, which made it possible - for multi-scope code like generators or nested function to work. - -- gh-110209: Add :meth:`~object.__class_getitem__` to - :class:`types.GeneratorType` and :class:`types.CoroutineType` for type - hinting purposes. Patch by James Hilton-Balfe. - -- gh-108191: The :class:`types.SimpleNamespace` now accepts an optional - positional argument which specifies initial values of attributes as a dict - or an iterable of key-value pairs. - -- gh-62090: Fix assertion errors caused by whitespace in metavars or - ``SUPPRESS``-ed groups in :mod:`argparse` by simplifying usage formatting. - Patch by Ali Hamdan. - -- gh-102402: Adjust ``logging.LogRecord`` to use ``time.time_ns()`` and fix - minor bug related to floating-point math. - -- gh-100242: Bring pure Python implementation ``functools.partial.__new__`` - more in line with the C-implementation by not just always checking for the - presence of the attribute ``'func'`` on the first argument of ``partial``. - Instead, both the Python version and the C version perform an - ``isinstance(func, partial)`` check on the first argument of ``partial``. - -- gh-99730: HEAD requests are no longer upgraded to GET request during - redirects in urllib. - -- gh-66410: Setting the :mod:`!tkinter` module global :data:`!wantobjects` - to ``2`` before creating the :class:`~tkinter.Tk` object or call the - :meth:`!wantobjects` method of the :class:`!Tk` object with argument ``2`` - makes now arguments to callbacks registered in the :mod:`tkinter` module - to be passed as various Python objects (``int``, ``float``, ``bytes``, - ``tuple``), depending on their internal representation in Tcl, instead of - always ``str``. :data:`!tkinter.wantobjects` is now set to ``2`` by - default. - -- bpo-40943: Fix several IndexError when parse emails with truncated - Message-ID, address, routes, etc, e.g. ``example@``. - -- bpo-39324: Add mime type mapping for .md <-> text/markdown - -- bpo-18108: :func:`shutil.chown` now supports *dir_fd* and - *follow_symlinks* keyword arguments. - -- bpo-30988: Fix parsing of emails with invalid address headers having a - leading or trailing dot. Patch by tsufeki. - -- bpo-32839: Add the :meth:`!after_info` method for Tkinter widgets. - -Documentation -------------- - -- gh-117928: The minimum Sphinx version required for the documentation is - now 6.2.1. - -Build ------ - -- gh-118734: Fixes Windows build when invoked directly (not through the - :file:`build.bat` script) without specifying a value for ``UseTIER2``. - -- gh-115119: The :file:`configure` option :option:`--with-system-libmpdec` - now defaults to ``yes``. The bundled copy of ``libmpdecimal`` will be - removed in Python 3.15. - -- gh-117845: Fix building against recent libedit versions by detecting - readline hook signatures in :program:`configure`. - -- gh-116622: A testbed project was added to run the test suite on Android. - -- gh-117645: Increase WASI stack size from 512 KiB to 8 MiB and the initial - memory from 10 MiB to 20 MiB. Patch by Victor Stinner. - -- gh-115119: :program:`configure` now uses :program:`pkg-config` to detect - :mod:`decimal` dependencies if the :option:`--with-system-libmpdec` option - is given. - -Windows -------- - -- gh-115119: Update Windows installer to use libmpdecimal 4.0.0. - -- gh-118486: :func:`os.mkdir` now accepts *mode* of ``0o700`` to restrict - the new directory to the current user. - -- gh-118347: Fixes launcher updates not being installed. - -- gh-118293: The ``multiprocessing`` module now passes the - ``STARTF_FORCEOFFFEEDBACK`` flag when spawning processes to tell Windows - not to change the mouse cursor. - -- gh-115009: Update Windows installer to use SQLite 3.45.3. - -- gh-90329: Suppress the warning displayed on virtual environment creation - when the requested and created paths differ only by a short (8.3 style) - name. Warnings will continue to be shown if a junction or symlink in the - path caused the venv to be created in a different location than originally - requested. - -- gh-117786: Fixes virtual environments not correctly launching when created - from a Store install. - -macOS ------ - -- gh-115119: Update macOS installer to use libmpdecimal 4.0.0. - -- gh-114099: iOS preprocessor symbol usage was made compatible with older - macOS SDKs. - -- gh-115009: Update macOS installer to use SQLite 3.45.3. - -- gh-91629: Use :file:`~/.config/fish/conf.d` configs and - :program:`fish_add_path` to set :envvar:`PATH` when installing for the - Fish shell. - -IDLE ----- - -- bpo-34774: Use user-selected color theme for Help => IDLE Doc. - -C API ------ - -- gh-118124: Fix :c:macro:`Py_BUILD_ASSERT` and - :c:macro:`Py_BUILD_ASSERT_EXPR` for non-constant expressions: use - ``static_assert()`` on C11 and newer. Patch by Victor Stinner. - -- gh-110850: Add "Raw" variant of PyTime functions - - * :c:func:`PyTime_MonotonicRaw` - * :c:func:`PyTime_PerfCounterRaw` - * :c:func:`PyTime_TimeRaw` - - Patch by Victor Stinner. - -- gh-117987: Restore functions removed in Python 3.13 alpha 1: - - * :c:func:`Py_SetPythonHome` - * :c:func:`Py_SetProgramName` - * :c:func:`PySys_SetArgvEx` - * :c:func:`PySys_SetArgv` - - Patch by Victor Stinner. - -- gh-117929: Restore removed :c:func:`PyEval_InitThreads` function. Patch by - Victor Stinner. - -- gh-117534: Improve validation logic in the C implementation of - :meth:`datetime.datetime.fromisoformat` to better handle invalid years. - Patch by Vlad Efanov. - -- gh-68114: Fixed skipitem()'s handling of the old 'w' and 'w#' formatters. - These are no longer supported and now raise an exception if used. - -- gh-111997: Add a C-API for firing monitoring events. - - -What's New in Python 3.13.0 alpha 6? -==================================== - -*Release date: 2024-04-09* - -Core and Builtins ------------------ - -- gh-117494: Refactored the instruction sequence data structure out of - compile.c into instruction_sequence.c. - -- gh-116968: Introduce a unified 16-bit backoff counter type - (``_Py_BackoffCounter``), shared between the Tier 1 adaptive specializer - and the Tier 2 optimizer. The API used for adaptive specialization - counters is changed but the behavior is (supposed to be) identical. - - The behavior of the Tier 2 counters is changed: - - * There are no longer dynamic thresholds (we never varied these). - * All counters now use the same exponential backoff. - * The counter for ``JUMP_BACKWARD`` starts counting down from 16. - * The ``temperature`` in side exits starts counting down from 64. - -- gh-117431: Improve the performance of the following :class:`bytes` and - :class:`bytearray` methods by adapting them to the - :c:macro:`METH_FASTCALL` calling convention: - - * :meth:`!endswith` - * :meth:`!startswith` - -- gh-117431: Improve the performance of the following :class:`str` methods - by adapting them to the :c:macro:`METH_FASTCALL` calling convention: - - * :meth:`~str.count` - * :meth:`~str.endswith` - * :meth:`~str.find` - * :meth:`~str.index` - * :meth:`~str.rfind` - * :meth:`~str.rindex` - * :meth:`~str.startswith` - -- gh-117411: Move ``PyFutureFeatures`` to an internal header and make it - private. - -- gh-109120: Added handle of incorrect star expressions, e.g ``f(3, *)``. - Patch by Grigoryev Semyon - -- gh-117266: Fix crashes for certain user-created subclasses of - :class:`ast.AST`. Such classes are now expected to set the - ``_field_types`` attribute. - -- gh-99108: Updated the :mod:`hashlib` built-in `HACL\* project`_ C code - from upstream that we use for many implementations when they are not - present via OpenSSL in a given build. This also avoids the rare potential - for a C symbol name one definition rule linking issue. - - .. _HACL\* project: https://github.com/hacl-star/hacl-star - -- gh-117108: Change the old space bit of objects in the young generation - from 0 to gcstate->visited, so that any objects created during GC will - have the old bit set correctly if they get moved into the old generation. - -- gh-117108: The cycle GC now chooses the size of increments based on the - total heap size, instead of the rate of object creation. This ensures that - it can keep up with growing heaps. - -- gh-116735: For ``INSTRUMENTED_CALL_FUNCTION_EX``, set ``arg0`` to - ``sys.monitoring.MISSING`` instead of ``None`` for - :monitoring-event:`CALL` event. - -- gh-113964: Starting new threads and process creation through - :func:`os.fork` are now only prevented once all non-daemon threads exit. - -- gh-116626: Ensure ``INSTRUMENTED_CALL_FUNCTION_EX`` always emits - :monitoring-event:`CALL` - -- gh-116554: ``list.sort()`` now exploits more cases of partial ordering, - particularly those with long descending runs with sub-runs of equal - values. Those are recognized as single runs now (previously, each block of - repeated values caused a new run to be created). - -- gh-114099: Added a Loader that can discover extension modules in an - iOS-style Frameworks folder. - -- gh-115775: Compiler populates the new ``__static_attributes__`` field on a - class with the names of attributes of this class which are accessed - through self.X from any function in its body. - -- gh-115776: The array of values, the ``PyDictValues`` struct is now - embedded in the object during allocation. This provides better performance - in the common case, and does not degrade as much when the object's - ``__dict__`` is materialized. - -- gh-108362: Implement an incremental cyclic garbage collector. By - collecting the old generation in increments, there is no need for a full - heap scan. This can hugely reduce maximum pause time for programs with - large heaps. - - Reduce the number of generations from three to two. The old generation is - split into two spaces, "visited" and "pending". - - Collection happens in two steps:: * An increment is formed from the young - generation and a small part of the pending space. * This increment is - scanned and the survivors moved to the end of the visited space. - - When the collecting space becomes empty, the two spaces are swapped. - -Library -------- - -- gh-109870: Dataclasses now calls :func:`exec` once per dataclass, instead - of once per method being added. This can speed up dataclass creation by - up to 20%. - -- gh-97901: Mime type ``text/rtf`` is now supported by :mod:`mimetypes`. - -Core and Builtins ------------------ - -- bpo-24612: Improve the :exc:`SyntaxError` that happens when 'not' appears - after an operator. Patch by Pablo Galindo - -Library -------- - -- gh-117648: Improve performance of :func:`os.path.join` and - :func:`os.path.expanduser`. - -- gh-117584: Raise :exc:`TypeError` for non-paths in - :func:`posixpath.relpath <os.path.relpath>`. - -- gh-117467: Preserve mailbox ownership when rewriting in - :func:`mailbox.mbox.flush <mailbox.Mailbox.flush>`. Patch by Tony - Mountifield. - -- gh-114848: Raise :exc:`FileNotFoundError` when ``getcwd()`` returns - '(unreachable)', which can happen on Linux >= 2.6.36 with glibc < 2.27. - -- gh-117459: :meth:`asyncio.asyncio.run_coroutine_threadsafe` now keeps the - traceback of :class:`CancelledError`, :class:`TimeoutError` and - :class:`InvalidStateError` which are raised in the coroutine. - -- gh-117381: Fix error message for :func:`ntpath.commonpath`. - -- gh-117337: Deprecate undocumented :func:`!glob.glob0` and - :func:`!glob.glob1` functions. Use :func:`glob.glob` and pass a directory - to its *root_dir* argument instead. - -- gh-117349: Optimise several functions in :mod:`os.path`. - -- gh-117348: Refactored :meth:`configparser.RawConfigParser._read` to reduce - cyclometric complexity and improve comprehensibility. - -- gh-117335: Raise TypeError for non-sequences for - :func:`ntpath.commonpath`. - -- gh-66449: :class:`configparser.ConfigParser` now accepts unnamed sections - before named ones, if configured to do so. - -- gh-88014: In documentation of :class:`gzip.GzipFile` in module gzip, - explain data type of optional constructor argument *mtime*, and recommend - ``mtime = 0`` for generating deterministic streams. - -- gh-117310: Fixed an unlikely early & extra ``Py_DECREF`` triggered crash - in :mod:`ssl` when creating a new ``_ssl._SSLContext`` if CPython was - built implausibly such that the default cipher list is empty **or** the - SSL library it was linked against reports a failure from its C - ``SSL_CTX_set_cipher_list()`` API. - -- gh-117294: A ``DocTestCase`` now reports as skipped if all examples in the - doctest are skipped. - -- gh-98966: In :mod:`subprocess`, raise a more informative message when - ``stdout=STDOUT``. - -- gh-117225: doctest: only print "and X failed" when non-zero, don't - pluralise "1 items". Patch by Hugo van Kemenade. - -- gh-117205: Speed up :func:`compileall.compile_dir` by 20% when using - multiprocessing by increasing ``chunksize``. - -- gh-117178: Fix regression in lazy loading of self-referential modules, - introduced in gh-114781. - -- gh-112383: Fix :mod:`dis` module's handling of ``ENTER_EXECUTOR`` - instructions. - -- gh-117182: Lazy-loading of modules that modify their own ``__class__`` no - longer reverts the ``__class__`` to :class:`types.ModuleType`. - -- gh-117084: Fix :mod:`zipfile` extraction for directory entries with the - name containing backslashes on Windows. - -- gh-117114: Make :func:`os.path.isdevdrive` available on all platforms. For - those that do not offer Dev Drives, it will always return ``False``. - -- gh-117110: Fix a bug that prevents subclasses of :class:`typing.Any` to be - instantiated with arguments. Patch by Chris Fu. - -- gh-109653: Deferred select imports in importlib.metadata and - importlib.resources for a 14% speedup. - -- gh-70647: Start the deprecation period for the current behavior of - :func:`datetime.datetime.strptime` and :func:`time.strptime` which always - fails to parse a date string with a :exc:`ValueError` involving a day of - month such as ``strptime("02-29", "%m-%d")`` when a year is **not** - specified and the date happen to be February 29th. This should help avoid - users finding new bugs every four years due to a natural mistaken - assumption about the API when parsing partial date values. - -- gh-116987: Fixed :func:`inspect.findsource` for class code objects. - -- gh-114099: Modify standard library to allow for iOS platform differences. - -- gh-90872: On Windows, :meth:`subprocess.Popen.wait` no longer calls - ``WaitForSingleObject()`` with a negative timeout: pass ``0`` ms if the - timeout is negative. Patch by Victor Stinner. - -- gh-116957: configparser: Don't leave ConfigParser values in an invalid - state (stored as a list instead of a str) after an earlier read raised - DuplicateSectionError or DuplicateOptionError. - -- gh-115538: :class:`!_io.WindowsConsoleIO` now emit a warning if a boolean - value is passed as a filedescriptor argument. - -- gh-90095: Ignore empty lines and comments in ``.pdbrc`` - -- gh-106531: Refreshed zipfile._path from `zipp 3.18 - <https://zipp.readthedocs.io/en/latest/history.html#v3-18-0>`_, providing - better compatibility for PyPy, better glob performance for deeply nested - zipfiles, and providing internal access to ``CompleteDirs.inject`` for use - in other tests (like importlib.resources). - -- gh-63207: On Windows, :func:`time.time` now uses the - ``GetSystemTimePreciseAsFileTime()`` clock to have a resolution better - than 1 us, instead of the ``GetSystemTimeAsFileTime()`` clock which has a - resolution of 15.6 ms. Patch by Victor Stinner. - -- gh-116764: Restore support of ``None`` and other false values in - :mod:`urllib.parse` functions :func:`~urllib.parse.parse_qs` and - :func:`~urllib.parse.parse_qsl`. Also, they now raise a TypeError for - non-zero integers and non-empty sequences. - -- gh-116811: In ``PathFinder.invalidate_caches``, delegate to - ``MetadataPathFinder.invalidate_caches``. - -- gh-116647: Fix recursive child in dataclasses - -- gh-113171: Fixed various false positives and false negatives in - - * :attr:`ipaddress.IPv4Address.is_private` (see these docs for details) - * :attr:`ipaddress.IPv4Address.is_global` - * :attr:`ipaddress.IPv6Address.is_private` - * :attr:`ipaddress.IPv6Address.is_global` - - Also in the corresponding :class:`ipaddress.IPv4Network` and - :class:`ipaddress.IPv6Network` attributes. - -- gh-63283: In :mod:`encodings.idna`, any capitalization of the ACE prefix - (``xn--``) is now acceptable. Patch by Pepijn de Vos and Zackery Spytz. - -- gh-71042: Add :func:`platform.android_ver`, which provides device and OS - information on Android. - -- gh-73468: Added new :func:`math.fma` function, wrapping C99's ``fma()`` - operation: fused multiply-add function. Patch by Mark Dickinson and Victor - Stinner. - -- gh-116608: The :mod:`importlib.resources` functions - :func:`~importlib.resources.is_resource`, - :func:`~importlib.resources.open_binary`, - :func:`~importlib.resources.open_text`, :func:`~importlib.resources.path`, - :func:`~importlib.resources.read_binary`, and - :func:`~importlib.resources.read_text` are un-deprecated, and support - subdirectories via multiple positional arguments. The - :func:`~importlib.resources.contents` function also allows subdirectories, - but remains deprecated. - -- gh-116484: Change automatically generated :class:`tkinter.Checkbutton` - widget names to avoid collisions with automatically generated - :class:`tkinter.ttk.Checkbutton` widget names within the same parent - widget. - -- gh-114314: In :mod:`ctypes`, ctype data is now stored in type objects - directly rather than in a dict subclass. This is an internal change that - should not affect usage. - -- gh-116401: Fix blocking :func:`os.fwalk` and :func:`shutil.rmtree` on - opening named pipe. - -- gh-71052: Implement :func:`ctypes.util.find_library` on Android. - -- gh-90535: Fix support of *interval* values > 1 in - :class:`logging.TimedRotatingFileHandler` for ``when='MIDNIGHT'`` and - ``when='Wx'``. - -- gh-113308: Remove some internal protected parts from :mod:`uuid`: - ``_has_uuid_generate_time_safe``, ``_netbios_getnode``, - ``_ipconfig_getnode``, and ``_load_system_functions``. They were unused. - -- gh-115627: Fix the :mod:`ssl` module error handling of connection - terminate by peer. It now throws an OSError with the appropriate error - code instead of an EOFError. - -- gh-114847: Speed up :func:`os.path.realpath` on non-Windows platforms. - -- gh-114271: Fix a race in ``threading.Thread.join()``. - - ``threading._MainThread`` now always represents the main thread of the - main interpreter. - - ``PyThreadState.on_delete`` and ``PyThreadState.on_delete_data`` have been - removed. - -- gh-113538: Add :meth:`asyncio.Server.close_clients` and - :meth:`asyncio.Server.abort_clients` methods which allow to more - forcefully close an asyncio server. - -- gh-85287: Changes Unicode codecs to return UnicodeEncodeError or - UnicodeDecodeError, rather than just UnicodeError. - -- gh-113548: :mod:`pdb` now allows CLI arguments to ``pdb -m``. - -- gh-112948: Make completion of :mod:`pdb` similar to Python REPL - -- gh-105866: Fixed ``_get_slots`` bug which caused error when defining - dataclasses with slots and a weakref_slot. - -- gh-96471: Add :py:class:`asyncio.Queue` termination with - :py:meth:`~asyncio.Queue.shutdown` method. - -- gh-89739: The :mod:`zipimport` module can now read ZIP64 files. - -- bpo-33533: :func:`asyncio.as_completed` now returns an object that is both - an asynchronous iterator and plain iterator. The new asynchronous - iteration pattern allows for easier correlation between prior tasks and - their completed results. This is a closer match to - :func:`concurrent.futures.as_completed`'s iteration pattern. Patch by - Justin Arthur. - -- bpo-27578: :func:`inspect.getsource` (and related functions) work with - empty module files, returning ``'\n'`` (or reasonable equivalent) instead - of raising ``OSError``. Patch by Kernc. - -- bpo-37141: Accept an iterable of separators in - :meth:`asyncio.StreamReader.readuntil`, stopping when one of them is - encountered. - -- gh-66543: Make :func:`mimetypes.guess_type` properly parsing of URLs with - only a host name, URLs containing fragment or query, and filenames with - only a UNC sharepoint on Windows. Based on patch by Dong-hee Na. - -- bpo-15010: :meth:`unittest.TestLoader.discover` now saves the original - value of ``unittest.TestLoader._top_level_dir`` and restores it at the end - of the call. - -Documentation -------------- - -- gh-115977: Remove compatibility references to Emscripten. - -- gh-114099: Add an iOS platform guide, and flag modules not available on - iOS. - -- gh-91565: Changes to documentation files and config outputs to reflect the - new location for reporting bugs - i.e. GitHub rather than bugs.python.org. - -Tests ------ - -- gh-83434: Disable JUnit XML output (``--junit-xml=FILE`` command line - option) in regrtest when hunting for reference leaks (``-R`` option). - Patch by Victor Stinner. - -- gh-117187: Fix XML tests for vanilla Expat <2.6.0. - -- gh-116333: Tests of TLS related things (error codes, etc) were updated to - be more lenient about specific error message strings and behaviors as seen - in the BoringSSL and AWS-LC forks of OpenSSL. - -- gh-117089: Consolidated tests for importlib.metadata in their own - ``metadata`` package. - -- gh-115979: Update test_importlib so that it passes under WASI SDK 21. - -- gh-112536: Add --tsan to test.regrtest for running TSAN tests in - reasonable execution times. Patch by Donghee Na. - -- gh-116307: Added import helper ``isolated_modules`` as ``CleanImport`` - does not remove modules imported during the context. Use it in - importlib.resources tests to avoid leaving ``mod`` around to impede - importlib.metadata tests. - -Build ------ - -- gh-114736: Have WASI builds use WASI SDK 21. - -- gh-115983: Skip building test modules that must be built as shared under - WASI. - -- gh-71052: Add Android build script and instructions. - -Windows -------- - -- gh-117267: Ensure ``DirEntry.stat().st_ctime`` behaves consistently with - :func:`os.stat` during the deprecation period of ``st_ctime`` by - containing the same value as ``st_birthtime``. After the deprecation - period, ``st_ctime`` will be the metadata change time (or unavailable - through ``DirEntry``), and only ``st_birthtime`` will contain the creation - time. - -- gh-116195: Improves performance of :func:`os.getppid` by using an - alternate system API when available. Contributed by vxiiduu. - -- gh-88494: On Windows, :func:`time.monotonic` now uses the - ``QueryPerformanceCounter()`` clock to have a resolution better than 1 us, - instead of the ``GetTickCount64()`` clock which has a resolution of 15.6 - ms. Patch by Victor Stinner. - -- gh-116773: Fix instances of ``<_overlapped.Overlapped object at 0xXXX> - still has pending operation at deallocation, the process may crash``. - -- gh-91227: Fix the asyncio ProactorEventLoop implementation so that sending - a datagram to an address that is not listening does not prevent receiving - any more datagrams. - -- gh-115119: Switched from vendored ``libmpdecimal`` code to a - separately-hosted external package in the ``cpython-source-deps`` - repository when building the ``_decimal`` module. - -C API ------ - -- gh-117642: Fix :pep:`737` implementation for ``%#T`` and ``%#N``. - -- gh-87193: :c:func:`_PyBytes_Resize` can now be called for bytes objects - with reference count > 1, including 1-byte bytes objects. It creates a new - bytes object and destroys the old one if it has reference count > 1. - -- gh-117021: Fix integer overflow in :c:func:`PyLong_AsPid` on non-Windows - 64-bit platforms. - -- gh-115756: :c:func:`!PyCode_GetFirstFree` is an ustable API now and has - been renamed to :c:func:`PyUnstable_Code_GetFirstFree`. (Contributed by - Bogdan Romanyuk in :gh:`115781`) - -- gh-116869: Add ``test_cext`` test: build a C extension to check if the - Python C API emits C compiler warnings. Patch by Victor Stinner. - -- gh-116869: Make the C API compatible with - ``-Werror=declaration-after-statement`` compiler flag again. Patch by - Victor Stinner. - -- gh-116936: Add :c:func:`PyType_GetModuleByDef` to the limited C API. Patch - by Victor Stinner. - -- gh-116809: Restore removed private ``_PyErr_ChainExceptions1()`` function. - Patch by Victor Stinner. - -- gh-115754: In the limited C API version 3.13, getting ``Py_None``, - ``Py_False``, ``Py_True``, ``Py_Ellipsis`` and ``Py_NotImplemented`` - singletons is now implemented as function calls at the stable ABI level to - hide implementation details. Getting these constants still return borrowed - references. Patch by Victor Stinner. - -- gh-115754: Add :c:func:`Py_GetConstant` and - :c:func:`Py_GetConstantBorrowed` functions to get constants. For example, - ``Py_GetConstant(Py_CONSTANT_ZERO)`` returns a :term:`strong reference` to - the constant zero. Patch by Victor Stinner. - -- gh-111696: Add support for ``%T``, ``%T#``, ``%N`` and ``%N#`` formats to - :c:func:`PyUnicode_FromFormat`: format the fully qualified name of an - object type and of a type: call :c:func:`PyType_GetModuleName`. See - :pep:`737` for more information. Patch by Victor Stinner. - -- gh-111696: Add :c:func:`PyType_GetModuleName` function to get the type's - module name. Equivalent to getting the ``type.__module__`` attribute. - Patch by Eric Snow and Victor Stinner. - -- gh-111696: Add :c:func:`PyType_GetFullyQualifiedName` function to get the - type's fully qualified name. Equivalent to - ``f"{type.__module__}.{type.__qualname__}"``, or ``type.__qualname__`` if - ``type.__module__`` is not a string or is equal to ``"builtins"``. Patch - by Victor Stinner. - -- gh-85283: The ``fcntl``, ``grp``, ``pwd``, ``termios``, ``_statistics`` - and ``_testconsole`` C extensions are now built with the :ref:`limited C - API <limited-c-api>`. Patch by Victor Stinner. - -- gh-111140: Add additional flags to :c:func:`PyLong_AsNativeBytes` and - :c:func:`PyLong_FromNativeBytes` to allow the caller to determine how to - handle edge cases around values that fill the entire buffer. - -- gh-113024: Add :c:func:`PyObject_GenericHash` function. - - -What's New in Python 3.13.0 alpha 5? -==================================== - -*Release date: 2024-03-12* - -Security --------- - -- gh-115398: Allow controlling Expat >=2.6.0 reparse deferral - (:cve:`2023-52425`) by adding five new methods: - - * :meth:`xml.etree.ElementTree.XMLParser.flush` - * :meth:`xml.etree.ElementTree.XMLPullParser.flush` - * :meth:`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled` - * :meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled` - * :meth:`xml.sax.expatreader.ExpatParser.flush` - -- gh-114572: :meth:`ssl.SSLContext.cert_store_stats` and - :meth:`ssl.SSLContext.get_ca_certs` now correctly lock access to the - certificate store, when the :class:`ssl.SSLContext` is shared across - multiple threads. - -Core and Builtins ------------------ - -- gh-116604: Respect the status of the garbage collector when indirect calls - are made via :c:func:`PyErr_CheckSignals` and the evaluation breaker. - Patch by Pablo Galindo - -- gh-112087: :class:`list` is now compatible with the implementation of - :pep:`703`. - -- gh-116381: Add specialization for ``CONTAINS_OP``. - -- gh-116296: Fix possible refleak in :meth:`!object.__reduce__` internal - error handling. - -- gh-115823: Properly calculate error ranges in the parser when raising - :exc:`SyntaxError` exceptions caused by invalid byte sequences. Patch by - Pablo Galindo - -- gh-115778: Add ``tierN`` annotation for instruction definition in - interpreter DSL. - -- gh-115733: Fix crash when calling ``next()`` on exhausted list iterators. - -- gh-115700: The regen-cases build stage now works on Windows. - -- gh-115347: Fix bug where docstring was replaced by a redundant NOP when - Python is run with ``-OO``. - -- gh-115323: Make error message more meaningful for when - :meth:`bytearray.extend` is called with a :class:`str` object. - -- gh-112175: Every ``PyThreadState`` now has its own ``eval_breaker``, - allowing specific threads to be interrupted. - -Library -------- - -- gh-115154: Fix a bug that was causing the :func:`tokenize.untokenize` - function to handle unicode named literals incorrectly. Patch by Pablo - Galindo - -Core and Builtins ------------------ - -- gh-112433: Add ability to force alignment of :mod:`ctypes.Structure` by - way of the new ``_align_`` attribute on the class. - -Library -------- - -- gh-104090: The multiprocessing resource tracker now exits with non-zero - status code if a resource leak was detected. It still exits with status - code 0 otherwise. - -Core and Builtins ------------------ - -- gh-105858: Improve the constructors for :mod:`ast` nodes. Arguments of - list types now default to an empty list if omitted, and optional fields - default to ``None``. AST nodes now have an ``__annotations__`` attribute - with the expected types of their attributes. Passing unrecognized extra - arguments to AST nodes is deprecated and will become an error in Python - 3.15. Omitting a required argument to an AST node is deprecated and will - become an error in Python 3.15. Patch by Jelle Zijlstra. - -- gh-101860: Expose ``__name__`` attribute on property. - -- gh-96497: Fix incorrect resolution of mangled class variables used in - assignment expressions in comprehensions. - -Library -------- - -- gh-116600: Fix :func:`repr` for global :class:`~enum.Flag` members. - -- gh-116349: :func:`platform.java_ver` is deprecated and will be removed in - 3.15. It was largely untested, had a confusing API, and was only useful - for Jython support. - -- gh-116143: Fix a race in pydoc ``_start_server``, eliminating a window in - which ``_start_server`` can return a thread that is "serving" but without - a ``docserver`` set. - -- gh-116127: :mod:`typing`: implement :pep:`705` which adds - :data:`typing.ReadOnly` support to :class:`typing.TypedDict`. - -- gh-116325: :mod:`typing`: raise :exc:`SyntaxError` instead of - :exc:`AttributeError` on forward references as empty strings. - -- gh-115957: When ``asyncio.TaskGroup.create_task`` is called on an inactive - ``asyncio.TaskGroup``, the given coroutine will be closed (which prevents - a ``RuntimeWarning``). - -- gh-115978: Disable preadv(), readv(), pwritev(), and writev() on WASI. - - Under wasmtime for WASI 0.2, these functions don't pass test_posix - (https://github.com/bytecodealliance/wasmtime/issues/7830). - -- gh-88352: Fix the computation of the next rollover time in the - :class:`logging.TimedRotatingFileHandler` handler. - :meth:`!computeRollover` now always returns a timestamp larger than the - specified time and works correctly during the DST change. - :meth:`!doRollover` no longer overwrite the already rolled over file, - saving from data loss when run at midnight or during repeated time at the - DST change. - -- gh-87115: Set ``__main__.__spec__`` to ``None`` when running a script with - :mod:`pdb` - -- gh-76511: Fix UnicodeEncodeError in :meth:`email.Message.as_string` that - results when a message that claims to be in the ascii character set - actually has non-ascii characters. Non-ascii characters are now replaced - with the U+FFFD replacement character, like in the ``replace`` error - handler. - -- gh-89547: Add support for nested typing special forms like - Final[ClassVar[int]]. - -- gh-65824: Improve the ``less`` prompt in :mod:`pydoc`. - -- gh-116040: [Enum] fix by-value calls when second value is falsey; e.g. - Cardinal(1, 0) - -- gh-115821: [Enum] Improve error message when calling super().__new__() in - custom __new__. - -- gh-85644: Use the ``XDG_CURRENT_DESKTOP`` environment variable in - :mod:`webbrowser` to check desktop. Prefer it to the deprecated - ``GNOME_DESKTOP_SESSION_ID`` for GNOME detection. - -- gh-75988: Fixed :func:`unittest.mock.create_autospec` to pass the call - through to the wrapped object to return the real result. - -- gh-115881: Fix issue where :func:`ast.parse` would incorrectly flag - conditional context managers (such as ``with (x() if y else z()): ...``) - as invalid syntax if ``feature_version=(3, 8)`` was passed. This reverts - changes to the grammar made as part of gh-94949. - -- gh-115886: Fix silent truncation of the name with an embedded null - character in :class:`multiprocessing.shared_memory.SharedMemory`. - -- gh-115532: Add kernel density estimation to the statistics module. - -- gh-115714: On WASI, the :mod:`time` module no longer get process time - using ``times()`` or ``CLOCK_PROCESS_CPUTIME_ID``, system API is that is - unreliable and is likely to be removed from WASI. The affected clock - functions fall back to calling ``clock()``. - -- gh-115809: Improve algorithm for computing which rolled-over log files to - delete in :class:`logging.TimedRotatingFileHandler`. It is now reliable - for handlers without ``namer`` and with arbitrary deterministic ``namer`` - that leaves the datetime part in the file name unmodified. - -- gh-74668: :mod:`urllib.parse` functions :func:`~urllib.parse.parse_qs` and - :func:`~urllib.parse.parse_qsl` now support bytes arguments containing raw - and percent-encoded non-ASCII data. - -- gh-67044: :func:`csv.writer` now always quotes or escapes ``'\r'`` and - ``'\n'``, regardless of *lineterminator* value. - -- gh-115712: Restore support of space delimiter with - ``skipinitialspace=True`` in :mod:`csv`. :func:`csv.writer` now quotes - empty fields if delimiter is a space and skipinitialspace is true and - raises exception if quoting is not possible. - -- gh-112364: Fixed :func:`ast.unparse` to handle format_spec with ``"``, - ``'`` or ``\\``. Patched by Frank Hoffmann. - -- gh-112997: Stop logging potentially sensitive callback arguments in - :mod:`asyncio` unless debug mode is active. - -- gh-114914: Fix an issue where an abandoned :class:`StreamWriter` would not - be garbage collected. - -- gh-111358: Fix a bug in - :meth:`asyncio.BaseEventLoop.shutdown_default_executor` to ensure the - timeout passed to the coroutine behaves as expected. - -- gh-115618: Fix improper decreasing the reference count for ``None`` - argument in :class:`property` methods :meth:`~property.getter`, - :meth:`~property.setter` and :meth:`~property.deleter`. - -- gh-112720: Refactor :class:`dis.ArgResolver` to make it possible to - subclass and change the way jump args are interpreted. - -- gh-112006: Fix :func:`inspect.unwrap` for types with the ``__wrapper__`` - data descriptor. Fix :meth:`inspect.Signature.from_callable` for builtins - :func:`classmethod` and :func:`staticmethod`. - -- gh-101293: Support callables with the ``__call__()`` method and types with - ``__new__()`` and ``__init__()`` methods set to class methods, static - methods, bound methods, partial functions, and other types of methods and - descriptors in :meth:`inspect.Signature.from_callable`. - -- gh-103092: Isolate :mod:`!_lsprof` (apply :pep:`687`). - -- gh-113942: :mod:`pydoc` no longer skips global functions implemented as - builtin methods, such as :class:`~type.MethodDescriptorType` and - :class:`~type.WrapperDescriptorType`. - -- gh-115256: Added DeprecationWarning when accessing the tarfile attribute - of TarInfo objects. The attribute is never used internally and is only - attached to TarInfos when the tarfile is opened in write-mode, not - read-mode. The attribute creates an unnecessary reference cycle which may - cause corruption when not closing the handle after writing a tarfile. - -- gh-115197: ``urllib.request`` no longer resolves the hostname before - checking it against the system's proxy bypass list on macOS and Windows. - -- gh-113812: :meth:`DatagramTransport.sendto` will now send zero-length - datagrams if called with an empty bytes object. The transport flow control - also now accounts for the datagram header when calculating the buffer - size. - -- gh-114763: Protect modules loaded with :class:`importlib.util.LazyLoader` - from race conditions when multiple threads try to access attributes before - the loading is complete. - -- gh-114709: :func:`posixpath.commonpath` now raises a :exc:`ValueError` - exception when passed an empty iterable. Previously, :exc:`IndexError` was - raised. - - :func:`posixpath.commonpath` now raises a :exc:`TypeError` exception when - passed ``None``. Previously, :exc:`ValueError` was raised. - -- gh-114610: Fix bug where :meth:`pathlib.PurePath.with_stem` converted a - non-empty path suffix to a stem when given an empty *stem* argument. It - now raises :exc:`ValueError`, just like - :meth:`pathlib.PurePath.with_suffix` does when called on a path with an - empty stem, given a non-empty *suffix* argument. - -- gh-107361: Add :data:`ssl.VERIFY_X509_PARTIAL_CHAIN` and - :data:`VERIFY_X509_STRICT` to the default SSL context created with - :func:`ssl.create_default_context`. - -- gh-112281: Allow creating :ref:`union of types<types-union>` for - :class:`typing.Annotated` with unhashable metadata. - -- gh-111775: Fix :meth:`importlib.resources.simple.ResourceHandle.open` for - text mode, added missed ``stream`` argument. - -- gh-90095: Make .pdbrc and -c work with any valid pdb commands. - -- gh-107625: Raise :exc:`configparser.ParsingError` from - :meth:`~configparser.ConfigParser.read` and - :meth:`~configparser.ConfigParser.read_file` methods of - :class:`configparser.ConfigParser` if a key without a corresponding value - is continued (that is, followed by an indented line). - -- gh-107155: Fix incorrect output of ``help(x)`` where ``x`` is a - :keyword:`lambda` function, which has an ``__annotations__`` dictionary - attribute with a ``"return"`` key. - -- gh-57141: Add option for *non-shallow* comparisons to - :class:`filecmp.dircmp` like :func:`filecmp.cmp`. Original patch by Steven - Ward. Enhanced by Tobias Rautenkranz - -- gh-69990: :meth:`Profile.print_stats` has been improved to accept multiple - sort arguments. Patched by Chiu-Hsiang Hsu and Furkan Onder. - -- gh-104061: Add :data:`socket.SO_BINDTOIFINDEX` constant. - -- gh-60346: Fix ArgumentParser inconsistent with parse_known_args. - -- gh-102389: Add ``windows_31j`` to aliases for ``cp932`` codec - -- gh-72249: Always include the :term:`module` name in the :func:`repr` of - :func:`functools.partial` objects. Patch by Furkan Onder and Anilyka - Barry. - -- gh-100985: Update HTTPSConnection to consistently wrap IPv6 Addresses when - using a proxy. - -- gh-100884: email: fix misfolding of comma in address-lists over multiple - lines in combination with unicode encoding. - -- gh-95782: Fix :func:`io.BufferedReader.tell`, - :func:`io.BufferedReader.seek`, :func:`!_pyio.BufferedReader.tell`, - :func:`io.BufferedRandom.tell`, :func:`io.BufferedRandom.seek` and - :func:`!_pyio.BufferedRandom.tell` being able to return negative offsets. - -- gh-96310: Fix a traceback in :mod:`argparse` when all options in a - mutually exclusive group are suppressed. - -- gh-93205: Fixed a bug in - :class:`logging.handlers.TimedRotatingFileHandler` where multiple rotating - handler instances pointing to files with the same name but different - extensions would conflict and not delete the correct files. - -- bpo-31116: Add Z85 encoding to ``base64``. - -- bpo-44865: Add missing call to localization function in :mod:`argparse`. - -- bpo-43952: Fix :meth:`multiprocessing.connection.Listener.accept` to - accept empty bytes as authkey. Not accepting empty bytes as key causes it - to hang indefinitely. - -- bpo-42125: linecache: get module name from ``__spec__`` if available. This - allows getting source code for the ``__main__`` module when a custom - loader is used. - -- bpo-41122: Failing to pass arguments properly to - :func:`functools.singledispatchmethod` now throws a TypeError instead of - hitting an index out of bounds internally. - -- bpo-40818: The asyncio REPL now runs :data:`sys.__interactivehook__` on - startup. The default implementation of :data:`sys.__interactivehook__` - provides auto-completion to the asyncio REPL. Patch contributed by Rémi - Lapeyre. - -- bpo-33775: Add 'default' and 'version' help text for localization in - argparse. - -Documentation -------------- - -- gh-115399: Document :cve:`2023-52425` of Expat <2.6.0 under "XML - vulnerabilities". - -- gh-109653: Improve import time of :mod:`uuid` on Linux. - -Tests ------ - -- gh-71052: Add test exclusions to support running the test suite on - Android. - -- gh-71052: Enable ``test_concurrent_futures`` on platforms that support - threading but not multiprocessing. - -- gh-115796: Make '_testinternalcapi.assemble_code_object' construct the - exception table for the code object. - -- gh-115720: Leak tests (``-R``, ``--huntrleaks``) now show a summary of the - number of leaks found in each iteration. - -- gh-115122: Add ``--bisect`` option to regrtest test runner: run failed - tests with ``test.bisect_cmd`` to identify failing tests. Patch by Victor - Stinner. - -- gh-115596: Fix ``ProgramPriorityTests`` in ``test_os`` permanently - changing the process priority. - -- gh-115556: On Windows, commas passed in arguments to - ``Tools\buildbot\test.bat`` and ``PCbuild\\rt.bat`` are now properly - handled. - -- gh-115420: Fix translation of exception handler targets by - ``_testinternalcapi.optimize_cfg``. - -- gh-115376: Fix segfault in ``_testinternalcapi.compiler_codegen`` on bad - input. - -Build ------ - -- gh-116313: Get WASI builds to work under wasmtime 18 w/ WASI 0.2/preview2 - primitives. - -- gh-71052: Change Android's :data:`sys.platform` from ``"linux"`` to - ``"android"``. - -- gh-116117: Backport ``libb2``'s PR #42 to fix compiling CPython on 32-bit - Windows with ``clang-cl``. - -- gh-71052: Fix several Android build issues - -- gh-114099: A testbed project was added to run the test suite on iOS. - -- gh-115350: Fix building ctypes module with -DWIN32_LEAN_AND_MEAN defined - -- gh-111225: Link extension modules against libpython on Android. - -- gh-115737: The install name for libPython is now correctly set for - non-framework macOS builds. - -- gh-114099: Makefile targets were added to support compiling an - iOS-compatible framework build. - -Windows -------- - -- gh-116012: Ensure the value of ``GetLastError()`` is preserved across GIL - operations. - -- gh-115582: Building extensions intended for free-threaded builds of - CPython now require compiling with ``/DPy_GIL_DISABLED`` manually when - using a regular install. This is expected to change in future releases. - -- gh-115554: The installer now has more strict rules about updating the - :ref:`launcher`. In general, most users only have a single launcher - installed and will see no difference. When multiple launchers have been - installed, the option to install the launcher is disabled until all but - one have been removed. Downgrading the launcher (which was never allowed) - is now more obviously blocked. - -- gh-115543: :ref:`launcher` can now detect Python 3.13 when installed from - the Microsoft Store, and will install Python 3.12 by default when - :envvar:`PYLAUNCHER_ALLOW_INSTALL` is set. - -macOS ------ - -- gh-116145: Update macOS installer to Tcl/Tk 8.6.14. - -IDLE ----- - -- gh-88516: On macOS show a proxy icon in the title bar of editor windows to - match platform behaviour. - -Tools/Demos ------------ - -- gh-100176: Remove outdated Tools/{io,cc,string}bench - -- bpo-45101: Add consistency in usage message IO between 2 versions of - python-config. - -C API ------ - -- gh-114626: Add again ``_PyCFunctionFastWithKeywords`` name, removed in - Python 3.13 alpha 4 by mistake. Keep the old private - ``_PyCFunctionFastWithKeywords`` name (Python 3.7) as an alias to the new - public name ``PyCFunctionFastWithKeywords`` (Python 3.13a4). Patch by - Victor Stinner. - -- gh-111418: Add :c:macro:`PyHASH_MODULUS`, :c:macro:`PyHASH_BITS`, - :c:macro:`PyHASH_INF` and :c:macro:`PyHASH_IMAG` C macros. Patch by - Sergey B Kirpichev. - - -What's New in Python 3.13.0 alpha 4? -==================================== - -*Release date: 2024-02-15* - -Security --------- - -- gh-115399: Update bundled libexpat to 2.6.0 - -- gh-115243: Fix possible crashes in :meth:`collections.deque.index` when - the deque is concurrently modified. - -Core and Builtins ------------------ - -- gh-112087: For an empty reverse iterator for list will be reduced to - :func:`reversed`. Patch by Donghee Na - -- gh-114570: Add :exc:`PythonFinalizationError` exception. This exception - derived from :exc:`RuntimeError` is raised when an operation is blocked - during the :term:`Python finalization <interpreter shutdown>`. Patch by - Victor Stinner. - -- gh-114695: Add :func:`sys._clear_internal_caches`, which clears all - internal performance-related caches (and deprecate the less-general - :func:`sys._clear_type_cache` function). - -- gh-114828: Fix compilation crashes in uncommon code examples using - :func:`super` inside a comprehension in a class body. - -- gh-112069: Adapt :class:`set` and :class:`frozenset` methods to Argument - Clinic. - -- gh-115011: Setters for members with an unsigned integer type now support - the same range of valid values for objects that has a - :meth:`~object.__index__` method as for :class:`int`. - -- gh-114887: Changed socket type validation in - :meth:`~asyncio.loop.create_datagram_endpoint` to accept all non-stream - sockets. This fixes a regression in compatibility with raw sockets. - -- gh-114944: Fixes a race between ``PyParkingLot_Park`` and - ``_PyParkingLot_UnparkAll``. - -- gh-113462: Limit the number of versions that a single class can use. - Prevents a few wayward classes using up all the version numbers. - -- gh-76763: The :func:`chr` builtin function now always raises - :exc:`ValueError` for values outside the valid range. Previously it raised - :exc:`OverflowError` for very large or small values. - -- gh-114806: No longer specialize calls to classes, if those classes have - metaclasses. Fixes bug where the ``__call__`` method of the metaclass was - not being called. - -- gh-107944: Improve error message for function calls with bad keyword - arguments via getargs - -- gh-112529: The free-threaded build no longer allocates space for the - ``PyGC_Head`` structure in objects that support cyclic garbage collection. - A number of other fields and data structures are used as replacements, - including ``ob_gc_bits``, ``ob_tid``, and mimalloc internal data - structures. - -- gh-114456: Lower the recursion limit under a debug build of WASI. - -- gh-114083: Compiler applies folding of LOAD_CONST with following - instruction in a separate pass before other optimisations. This enables - jump threading in certain circumstances. - -- gh-114388: Fix a :exc:`RuntimeWarning` emitted when assign an integer-like - value that is not an instance of :class:`int` to an attribute that - corresponds to a C struct member of :ref:`type <PyMemberDef-types>` T_UINT - and T_ULONG. Fix a double :exc:`RuntimeWarning` emitted when assign a - negative integer value to an attribute that corresponds to a C struct - member of type T_UINT. - -- gh-114265: Compiler propagates line numbers before optimization, leading - to more optimization opportunities and removing the need for the - ``guarantee_lineno_for_exits`` hack. - -- gh-112529: The free-threaded build now has its own thread-safe GC - implementation that uses mimalloc to find GC tracked objects. It is - non-generational, unlike the existing GC implementation. - -- gh-114050: Fix segmentation fault caused by an incorrect format string in - ``TypeError`` exception when more than two arguments are passed to - ``int``. - -- gh-112354: The ``END_FOR`` instruction now pops only one value. This is to - better support side exits in loops. - -- gh-113884: Make :class:`queue.SimpleQueue` thread safe when the GIL is - disabled. - -- gh-114058: Implement the foundations of the Tier 2 redundancy eliminator. - -- gh-113939: frame.clear(): Clear frame.f_locals as well, and not only the - fast locals. This is relevant once frame.f_locals was accessed, which - would contain also references to all the locals. - -- gh-112050: Convert :class:`collections.deque` to use Argument Clinic. - -- gh-112050: Make methods on :class:`collections.deque` thread-safe when the - GIL is disabled. - -- gh-113464: Add an option (``--enable-experimental-jit`` for - ``configure``-based builds or ``--experimental-jit`` for ``PCbuild``-based - ones) to build an *experimental* just-in-time compiler, based on - `copy-and-patch <https://fredrikbk.com/publications/copy-and-patch.pdf>`_ - -- gh-113055: Make interp->obmalloc a pointer. For interpreters that share - state with the main interpreter, this points to the same static memory - structure. For interpreters with their own obmalloc state, it is heap - allocated. Add free_obmalloc_arenas() which will free the obmalloc arenas - and radix tree structures for interpreters with their own obmalloc state. - -- gh-55664: Add warning when creating :class:`type` using a namespace - dictionary with non-string keys. Patched by Daniel Urban and Furkan Onder. - -- gh-104530: Use native Win32 condition variables. - -Library -------- - -- gh-115392: Fix a bug in :mod:`doctest` where incorrect line numbers would - be reported for decorated functions. - -- gh-114563: Fix several :func:`format` bugs when using the C implementation - of :class:`~decimal.Decimal`: * memory leak in some rare cases when using - the ``z`` format option (coerce negative 0) * incorrect output when - applying the ``z`` format option to type ``F`` (fixed-point with capital - ``NAN`` / ``INF``) * incorrect output when applying the ``#`` format - option (alternate form) - -- gh-102840: Fix confused traceback when floordiv, mod, or divmod operations - happens between instances of :class:`fractions.Fraction` and - :class:`complex`. - -- gh-115165: Most exceptions are now ignored when attempting to set the - ``__orig_class__`` attribute on objects returned when calling - :mod:`typing` generic aliases (including generic aliases created using - :data:`typing.Annotated`). Previously only :exc:`AttributeError` was - ignored. Patch by Dave Shawley. - -- gh-112903: Fix "issubclass() arg 1 must be a class" errors in certain - cases of multiple inheritance with generic aliases (regression in early - 3.13 alpha releases). - -- gh-115133: Fix tests for :class:`~xml.etree.ElementTree.XMLPullParser` - with Expat 2.6.0. - -- gh-115059: :meth:`io.BufferedRandom.read1` now flushes the underlying - write buffer. - -- gh-79382: Trailing ``**`` no longer allows to match files and non-existing - paths in recursive :func:`~glob.glob`. - -- gh-67837: Avoid race conditions in the creation of directories during - concurrent extraction in :mod:`tarfile` and :mod:`zipfile`. - -- gh-115060: Speed up :meth:`pathlib.Path.glob` by removing redundant regex - matching. - -- gh-97928: Partially revert the behavior of :meth:`tkinter.Text.count`. By - default it preserves the behavior of older Python versions, except that - setting ``wantobjects`` to 0 no longer has effect. Add a new parameter - *return_ints*: specifying ``return_ints=True`` makes ``Text.count()`` - always returning the single count as an integer instead of a 1-tuple or - ``None``. - -- gh-114628: When csv.Error is raised when handling TypeError, do not print - the TypeError traceback. - -- gh-85984: Added ``_POSIX_VDISABLE`` from C's ``<unistd.h>`` to - :mod:`termios`. - -- gh-114965: Update bundled pip to 24.0 - -- gh-114959: :mod:`tarfile` no longer ignores errors when trying to extract - a directory on top of a file. - -- gh-114894: Add :meth:`array.array.clear`. - -- gh-114071: Support tuple subclasses using auto() for enum member value. - -- gh-109475: Fix support of explicit option value "--" in :mod:`argparse` - (e.g. ``--option=--``). - -- gh-49766: Fix :class:`~datetime.date`-:class:`~datetime.datetime` - comparison. Now the special comparison methods like ``__eq__`` and - ``__lt__`` return :data:`NotImplemented` if one of comparands is - :class:`!date` and other is :class:`!datetime` instead of ignoring the - time part and the time zone or forcefully return "not equal" or raise - :exc:`TypeError`. It makes comparison of :class:`!date` and - :class:`!datetime` subclasses more symmetric and allows to change the - default behavior by overriding the special comparison methods in - subclasses. - -- gh-110190: Fix ctypes structs with array on Windows ARM64 platform by - setting ``MAX_STRUCT_SIZE`` to 32 in stgdict. Patch by Diego Russo - -- gh-114678: Ensure that deprecation warning for 'N' specifier in - :class:`~decimal.Decimal` format is not raised for cases where 'N' appears - in other places in the format specifier. Based on patch by Stefan Krah. - -- gh-70303: Return both files and directories from :meth:`pathlib.Path.glob` - if a pattern ends with "``**``". Previously only directories were - returned. - -- gh-109653: Improve import time of :mod:`importlib.metadata` and - :mod:`email.utils`. - -- gh-113280: Fix a leak of open socket in rare cases when error occurred in - :class:`ssl.SSLSocket` creation. - -- gh-77749: :meth:`email.policy.EmailPolicy.fold` now always encodes - non-ASCII characters in headers if :attr:`~email.policy.EmailPolicy.utf8` - is false. - -- gh-83383: Synchronization of the :mod:`dbm.dumb` database is now no-op if - there was no modification since opening or last synchronization. The - directory file for a newly created empty :mod:`dbm.dumb` database is now - created immediately after opening instead of deferring this until - synchronizing or closing. - -- gh-91602: Add *filter* keyword-only parameter to - :meth:`sqlite3.Connection.iterdump` for filtering database objects to - dump. Patch by Mariusz Felisiak. - -- gh-112451: Prohibit subclassing pure-Python :class:`datetime.timezone`. - This is consistent with C-extension implementation. Patch by Mariusz - Felisiak. - -- gh-69893: Add the :meth:`!close` method for the iterator returned by - :func:`xml.etree.ElementTree.iterparse`. - -- gh-109653: Reduce the import time of :mod:`threading` module by ~50%. - Patch by Daniel Hollas. - -- gh-114492: Make the result of :func:`termios.tcgetattr` reproducible on - Alpine Linux. Previously it could leave a random garbage in some fields. - -- gh-114315: Make :class:`threading.Lock` a real class, not a factory - function. Add ``__new__`` to ``_thread.lock`` type. - -- gh-100414: Add :mod:`dbm.sqlite3` as a backend to :mod:`dbm`, and make it - the new default :mod:`!dbm` backend. Patch by Raymond Hettinger and Erlend - E. Aasland. - -- gh-113267: Revert changes in :gh:`106584` which made calls of - ``TestResult`` methods ``startTest()`` and ``stopTest()`` unbalanced. - -- gh-75128: Ignore an :exc:`OSError` in - :meth:`asyncio.BaseEventLoop.create_server` when IPv6 is available but the - interface cannot actually support it. - -- gh-114423: ``_DummyThread`` entries in ``threading._active`` are now - automatically removed when the related thread dies. - -- gh-114257: Dismiss the :exc:`FileNotFound` error in - :func:`ctypes.util.find_library` and just return ``None`` on Linux. - -- gh-114321: Expose more platform specific constants in the :mod:`fcntl` - module on Linux, macOS, FreeBSD and NetBSD. - -- gh-114328: The :func:`tty.setcbreak` and new :func:`tty.cfmakecbreak` no - longer clears the terminal input ICRLF flag. This fixes a regression - introduced in 3.12 that no longer matched how OSes define cbreak mode in - their ``stty(1)`` manual pages. - -- gh-114281: Remove type hints from ``Lib/asyncio/staggered.py``. The - annotations in the `typeshed <https://github.com/python/typeshed>`__ - project should be used instead. - -- gh-101438: Avoid reference cycle in ElementTree.iterparse. The iterator - returned by ``ElementTree.iterparse`` may hold on to a file descriptor. - The reference cycle prevented prompt clean-up of the file descriptor if - the returned iterator was not exhausted. - -- gh-114198: The signature for the ``__replace__`` method on - :mod:`dataclasses` now has the first argument named ``self``, rather than - ``obj``. - -- gh-104522: :exc:`OSError` raised when run a subprocess now only has - *filename* attribute set to *cwd* if the error was caused by a failed - attempt to change the current directory. - -- gh-114149: Enum: correctly handle tuple subclasses in custom ``__new__``. - -- gh-83648: Support deprecation of options, positional arguments and - subcommands in :mod:`argparse`. - -- gh-114087: Speed up ``dataclasses.asdict`` up to 1.35x. - -- gh-109534: Fix a reference leak in - :class:`asyncio.selector_events.BaseSelectorEventLoop` when SSL handshakes - fail. Patch contributed by Jamie Phan. - -- gh-79634: Accept :term:`path-like objects <path-like object>` as patterns - in :meth:`pathlib.Path.glob` and :meth:`~pathlib.Path.rglob`. - -- gh-112202: Ensure that a :func:`asyncio.Condition.notify` call does not - get lost if the awakened ``Task`` is simultaneously cancelled or - encounters any other error. - -- gh-113951: Fix the behavior of ``tag_unbind()`` methods of - :class:`tkinter.Text` and :class:`tkinter.Canvas` classes with three - arguments. Previously, ``widget.tag_unbind(tag, sequence, funcid)`` - destroyed the current binding for *sequence*, leaving *sequence* unbound, - and deleted the *funcid* command. Now it removes only *funcid* from the - binding for *sequence*, keeping other commands, and deletes the *funcid* - command. It leaves *sequence* unbound only if *funcid* was the last bound - command. - -- gh-97959: Fix rendering class methods, bound methods, method and function - aliases in :mod:`pydoc`. Class methods no longer have "method of - builtins.type instance" note. Corresponding notes are now added for class - and unbound methods. Method and function aliases now have references to - the module or the class where the origin was defined if it differs from - the current. Bound methods are now listed in the static methods section. - Methods of builtin classes are now supported as well as methods of Python - classes. - -- gh-113796: Add more validation checks in the :class:`csv.Dialect` - constructor. :exc:`ValueError` is now raised if the same character is used - in different roles. - -- gh-113732: Fix support of :data:`~csv.QUOTE_NOTNULL` and - :data:`~csv.QUOTE_STRINGS` in :func:`csv.reader`. - -- gh-113225: Speed up :meth:`pathlib.Path.walk` by using - :attr:`os.DirEntry.path` where possible. - -- gh-89039: When replace() method is called on a subclass of datetime, date - or time, properly call derived constructor. Previously, only the base - class's constructor was called. - - Also, make sure to pass non-zero fold values when creating subclasses in - various methods. Previously, fold was silently ignored. - -- gh-112919: Speed-up :func:`datetime.datetime.replace`, - :func:`datetime.date.replace` and :func:`datetime.time.replace`. - -- gh-59013: Set breakpoint on the first executable line of the function, - instead of the line of function definition when the user do ``break func`` - using :mod:`pdb` - -- gh-112343: Improve handling of pdb convenience variables to avoid - replacing string contents. - -- gh-112240: Add option to calendar module CLI to specify the weekday to - start each week. Patch by Steven Ward. - -- gh-111741: Recognise ``image/webp`` as a standard format in the - :mod:`mimetypes` module. - -- gh-43457: Fix the :mod:`tkinter` widget method :meth:`!wm_attributes`. It - now accepts the attribute name without the minus prefix to get window - attributes and allows to specify attributes and values to set as keyword - arguments. Add new optional keyword argument *return_python_dict*: calling - ``w.wm_attributes(return_python_dict=True)`` returns the attributes as a - dict instead of a tuple. Calling ``w.wm_attributes()`` now returns a tuple - instead of string if *wantobjects* was set to 0. - -- gh-82626: Many functions now emit a warning if a boolean value is passed - as a file descriptor argument. - -- gh-111051: Added check for file modification during debugging with - :mod:`pdb` - -- gh-110345: Show the Tcl/Tk patchlevel (rather than version) in - :meth:`tkinter._test`. - -- gh-38807: Fix race condition in :mod:`trace`. Instead of checking if a - directory exists and creating it, directly call :func:`os.makedirs` with - the kwarg ``exist_ok=True``. - -- gh-75705: Set unixfrom envelope in :class:`mailbox.mbox` and - :class:`mailbox.MMDF`. - -- gh-106233: Fix stacklevel in ``InvalidTZPathWarning`` during - :mod:`zoneinfo` module import. - -- gh-105102: Allow :class:`ctypes.Union` to be nested in - :class:`ctypes.Structure` when the system endianness is the opposite of - the classes. - -- gh-104282: Fix null pointer dereference in - :func:`lzma._decode_filter_properties` due to improper handling of BCJ - filters with properties of zero length. Patch by Radislav Chugunov. - -- gh-96471: Add :py:class:`queue.Queue` termination with - :py:meth:`~queue.Queue.shutdown`. - -- gh-101599: Changed argparse flag options formatting to remove redundancy. - -- gh-85984: Add POSIX pseudo-terminal functions :func:`os.posix_openpt`, - :func:`os.grantpt`, :func:`os.unlockpt`, and :func:`os.ptsname`. - -- gh-102512: When :func:`os.fork` is called from a foreign thread (aka - ``_DummyThread``), the type of the thread in a child process is changed to - ``_MainThread``. Also changed its name and daemonic status, it can be now - joined. - -- gh-88569: Add :func:`os.path.isreserved`, which identifies reserved - pathnames such as "NUL", "AUX" and "CON". This function is only available - on Windows. - - Deprecate :meth:`pathlib.PurePath.is_reserved`. - -- bpo-38364: The ``inspect`` functions ``isgeneratorfunction``, - ``iscoroutinefunction``, ``isasyncgenfunction`` now support - ``functools.partialmethod`` wrapped functions the same way they support - ``functools.partial``. - -Documentation -------------- - -- gh-115233: Fix an example for :class:`~logging.LoggerAdapter` in the - Logging Cookbook. - -- gh-114123: Move the :mod:`csv` module docstring to the :mod:`!csv` module - instead of reexporting it from the internal :mod:`!_csv` module, and - remove ``__doc__`` from ``csv.__all__``. - - Move :attr:`!csv.__version__` to the :mod:`!csv` module instead of - reexporting it from the internal :mod:`!_csv` module, and remove - ``__version__`` from ``csv.__all__``. - -Tests ------ - -- gh-114099: Added test exclusions required to run the test suite on iOS. - -- gh-105089: Fix - ``test.test_zipfile.test_core.TestWithDirectory.test_create_directory_with_write`` - test in AIX by doing a bitwise AND of 0xFFFF on mode , so that it will be - in sync with ``zinfo.external_attr`` - -Build ------ - -- gh-115167: Avoid vendoring ``vcruntime140_threads.dll`` when building with - Visual Studio 2022 version 17.8. - -- gh-113632: Promote WASI to a tier 2 platform and drop Emscripten from tier - 3 in configure.ac. - -- gh-114099: configure and Makefile were refactored to accommodate framework - builds on Apple platforms other than macOS. - -- gh-114875: Add :c:func:`!getgrent` as a prerequisite for building the - :mod:`grp` module. - -Windows -------- - -- gh-115049: Fixes ``py.exe`` launcher failing when run as users without - user profiles. - -- gh-115009: Update Windows installer to use SQLite 3.45.1. - -- gh-109991: Update Windows build to use OpenSSL 3.0.13. - -- gh-111239: Update Windows builds to use zlib v1.3.1. - -- gh-100107: The ``py.exe`` launcher will no longer attempt to run the - Microsoft Store redirector when launching a script containing a - ``/usr/bin/env`` shebang - -- gh-112984: Adds free-threaded binaries to Windows installer as an optional - component. - -- gh-89240: Allows :mod:`multiprocessing` to create pools of greater than 62 - processes. - -macOS ------ - -- gh-115009: Update macOS installer to use SQLite 3.45.1. - -- gh-109991: Update macOS installer to use OpenSSL 3.0.13. - -- gh-114490: Add Mach-O linkage support for :func:`platform.architecture`. - -- gh-87804: On macOS the result of ``os.statvfs`` and ``os.fstatvfs`` now - correctly report the size of very large disks, in previous versions the - reported number of blocks was wrong for disks with at least 2**32 blocks. - -IDLE ----- - -- gh-96905: In idlelib code, stop redefining built-ins 'dict' and 'object'. - -- gh-103820: Revise IDLE bindings so that events from mouse button 4/5 on - non-X11 windowing systems (i.e. Win32 and Aqua) are not mistaken for - scrolling. - -Tools/Demos ------------ - -- gh-113516: Don't set ``LDSHARED`` when building for WASI. - -- gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.13 and - multissltests to use 1.1.1w, 3.0.13, 3.1.5, and 3.2.1. - -- gh-115015: Fix a bug in Argument Clinic that generated incorrect code for - methods with no parameters that use the :ref:`METH_METHOD | METH_FASTCALL - | METH_KEYWORDS <METH_METHOD-METH_FASTCALL-METH_KEYWORDS>` calling - convention. Only the positional parameter count was checked; any keyword - argument passed would be silently accepted. - -C API ------ - -- gh-111140: Adds :c:func:`PyLong_AsNativeBytes`, - :c:func:`PyLong_FromNativeBytes` and - :c:func:`PyLong_FromUnsignedNativeBytes` functions. - -- gh-114685: :c:func:`PyBuffer_FillInfo` now raises a :exc:`SystemError` if - called with :c:macro:`PyBUF_READ` or :c:macro:`PyBUF_WRITE` as flags. - These flags should only be used with the ``PyMemoryView_*`` C API. - -- gh-114685: :c:func:`PyObject_GetBuffer` now raises a :exc:`SystemError` if - called with :c:macro:`PyBUF_READ` or :c:macro:`PyBUF_WRITE` as flags. - These flags should only be used with the ``PyMemoryView_*`` C API. - -- gh-114626: Add ``PyCFunctionFast`` and ``PyCFunctionFastWithKeywords`` - typedefs (identical to the existing ``_PyCFunctionFast`` and - ``_PyCFunctionFastWithKeywords`` typedefs, just without a leading ``_`` - prefix). - -- gh-114329: Add :c:func:`PyList_GetItemRef`, which is similar to - :c:func:`PyList_GetItem` but returns a :term:`strong reference` instead of - a :term:`borrowed reference`. - -- gh-110850: Add PyTime C API: - - * :c:type:`PyTime_t` type. - * :c:var:`PyTime_MIN` and :c:var:`PyTime_MAX` constants. - * :c:func:`PyTime_AsSecondsDouble`, - :c:func:`PyTime_Monotonic`, :c:func:`PyTime_PerfCounter`, and - :c:func:`PyTime_Time` functions. - - Patch by Victor Stinner. - -- gh-112066: Add :c:func:`PyDict_SetDefaultRef`: insert a key and value into - a dictionary if the key is not already present. This is similar to - :meth:`dict.setdefault`, but returns an integer value indicating if the - key was already present. It is also similar to - :c:func:`PyDict_SetDefault`, but returns a strong reference instead of a - borrowed reference. - - -What's New in Python 3.13.0 alpha 3? -==================================== - -*Release date: 2024-01-17* - -Security --------- - -- gh-113659: Skip ``.pth`` files with names starting with a dot or hidden - file attribute. - -- gh-112302: Created a Software Bill-of-Materials document and tooling for - tracking dependencies. - -Core and Builtins ------------------ - -- gh-107901: Compiler duplicates basic blocks that have an eval breaker - check, no line number, and multiple predecessors. - -- gh-107901: A jump leaving an exception handler back to normal code no - longer checks the eval breaker. - -- gh-113655: Set the C recursion limit to 4000 on Windows, and 10000 on - Linux/OSX. This seems to be near the sweet spot to maintain safety, but - not compromise backwards compatibility. - -- gh-113710: Add typed stack effects to the interpreter DSL, along with - various instruction annotations. - -- gh-77046: On Windows, file descriptors wrapping Windows handles are now - created non inheritable by default (:pep:`446`). Patch by Zackery Spytz - and Victor Stinner. - -- gh-113853: Guarantee that all executors make progress. This then - guarantees that tier 2 execution always makes progress. - -- gh-113753: Fix an issue where the finalizer of ``PyAsyncGenASend`` objects - might not be called if they were allocated from a free list. - -- gh-107901: Compiler changed so that synthetic jumps which are not at loop - end no longer check the eval breaker. - -- gh-113703: Fix a regression in the :mod:`codeop` module that was causing - it to incorrectly identify incomplete f-strings. Patch by Pablo Galindo - -- gh-89811: Check for a valid ``tp_version_tag`` before performing bytecode - specializations that rely on this value being usable. - -- gh-111488: Changed error message in case of no 'in' keyword after 'for' in - list comprehensions - -- gh-113657: Fix an issue that caused important instruction pointer updates - to be optimized out of tier two traces. - -- gh-113603: Fixed bug where a redundant NOP is not removed, causing an - assertion to fail in the compiler in debug mode. - -- gh-113602: Fix an error that was causing the parser to try to overwrite - existing errors and crashing in the process. Patch by Pablo Galindo - -- gh-113486: No longer issue spurious ``PY_UNWIND`` events for optimized - calls to classes. - -- gh-113297: Fix segfault in the compiler on with statement with 19 context - managers. - -- gh-113212: Improve :py:class:`super` error messages. - -- gh-111375: Only use ``NULL`` in the exception stack to indicate an - exception was handled. Patch by Carey Metcalfe. - -- gh-112215: Increase the C recursion limit by a factor of 3 for non-debug - builds, except for webassembly and s390 platforms which are unchanged. - This mitigates some regressions in 3.12 with deep recursion mixing builtin - (C) and Python code. - -- gh-113054: Fixed bug where a redundant NOP is not removed, causing an - assertion to fail in the compiler in debug mode. - -- gh-106905: Use per AST-parser state rather than global state to track - recursion depth within the AST parser to prevent potential race condition - due to simultaneous parsing. - - The issue primarily showed up in 3.11 by multithreaded users of - :func:`ast.parse`. In 3.12 a change to when garbage collection can be - triggered prevented the race condition from occurring. - -- gh-108866: Change the API and contract of ``_PyExecutorObject`` to return - the next_instr pointer, instead of the frame, and to always execute at - least one instruction. - -- gh-90350: Optimize builtin functions :func:`min` and :func:`max`. - -- gh-112943: Correctly compute end column offsets for multiline tokens in - the :mod:`tokenize` module. Patch by Pablo Galindo - -- gh-112125: Fix ``None.__ne__(None)`` returning ``NotImplemented`` instead - of ``False``. - -- gh-74616: :func:`input` now raises a ValueError when output on the - terminal if the prompt contains embedded null characters instead of - silently truncating it. - -- gh-112716: Fix SystemError in the ``import`` statement and in - ``__reduce__()`` methods of builtin types when ``__builtins__`` is not a - dict. - -- gh-112730: Use color to highlight error locations in tracebacks. Patch by - Pablo Galindo - -- gh-112625: Fixes a bug where a bytearray object could be cleared while - iterating over an argument in the ``bytearray.join()`` method that could - result in reading memory after it was freed. - -- gh-112660: Do not clear unexpected errors during formatting error messages - for ImportError and AttributeError for modules. - -- gh-105967: Workaround a bug in Apple's macOS platform zlib library where - :func:`zlib.crc32` and :func:`binascii.crc32` could produce incorrect - results on multi-gigabyte inputs. Including when using :mod:`zipfile` on - zips containing large data. - -- gh-95754: Provide a better error message when accessing invalid attributes - on partially initialized modules. The origin of the module being accessed - is now included in the message to help with the common issue of shadowing - other modules. - -- gh-112217: Add check for the type of ``__cause__`` returned from calling - the type ``T`` in ``raise from T``. - -- gh-111058: Change coro.cr_frame/gen.gi_frame to return ``None`` after the - coroutine/generator has been closed. This fixes a bug where - :func:`~inspect.getcoroutinestate` and :func:`~inspect.getgeneratorstate` - return the wrong state for a closed coroutine/generator. - -- gh-112388: Fix an error that was causing the parser to try to overwrite - tokenizer errors. Patch by pablo Galindo - -- gh-112387: Fix error positions for decoded strings with backwards tokenize - errors. Patch by Pablo Galindo - -- gh-99606: Make code generated for an empty f-string identical to the code - of an empty normal string. - -- gh-112367: Avoid undefined behaviour when using the perf trampolines by - not freeing the code arenas until shutdown. Patch by Pablo Galindo - -- gh-112320: The Tier 2 translator now tracks the confidence level for - staying "on trace" (i.e. not exiting back to the Tier 1 interpreter) for - branch instructions based on the number of bits set in the branch - "counter". Trace translation ends when the confidence drops below 1/3rd. - -- gh-109598: - :c:func:`PyComplex_RealAsDouble`/:c:func:`PyComplex_ImagAsDouble` now - tries to convert an object to a :class:`complex` instance using its - ``__complex__()`` method before falling back to the ``__float__()`` - method. Patch by Sergey B Kirpichev. - -- gh-94606: Fix UnicodeEncodeError when :func:`email.message.get_payload` - reads a message with a Unicode surrogate character and the message content - is not well-formed for surrogateescape encoding. Patch by Sidney - Markowitz. - -- bpo-21861: Use the object's actual class name in - :meth:`!_io.FileIO.__repr__`, :meth:`!_io._WindowsConsoleIO` and - :meth:`!_io.TextIOWrapper.__repr__`, to make these methods subclass - friendly. - -- bpo-45369: Remove LibreSSL workarounds as per :pep:`644`. - -- bpo-34392: Added :func:`sys._is_interned`. - -Library -------- - -- gh-114077: Fix possible :exc:`OverflowError` in - :meth:`socket.socket.sendfile` when pass *count* larger than 2 GiB on - 32-bit platform. - -- gh-111803: :mod:`plistlib` now supports loading more deeply nested lists - in binary format. - -- gh-114014: Fixed a bug in :class:`fractions.Fraction` where an invalid - string using ``d`` in the decimals part creates a different error compared - to other invalid letters/characters. Patch by Jeremiah Gabriel Pascual. - -- gh-108364: :meth:`sqlite3.Connection.iterdump` now ensures that foreign - key support is disabled before dumping the database schema, if there is - any foreign key violation. Patch by Erlend E. Aasland and Mariusz - Felisiak. - -- gh-113971: The :class:`zipfile.ZipInfo` previously protected - ``._compresslevel`` attribute has been made public as ``.compress_level`` - with the old ``_compresslevel`` name remaining available as a property to - retain compatibility. - -- gh-113877: Fix :mod:`tkinter` method ``winfo_pathname()`` on 64-bit - Windows. - -- gh-113868: Added :data:`mmap.MAP_NORESERVE`, :data:`mmap.MAP_NOEXTEND`, - :data:`mmap.MAP_HASSEMAPHORE`, :data:`mmap.MAP_NOCACHE`, - :data:`mmap.MAP_JIT`, :data:`mmap.MAP_RESILIENT_CODESIGN`, - :data:`mmap.MAP_RESILIENT_MEDIA`, :data:`mmap.MAP_32BIT`, - :data:`mmap.MAP_TRANSLATED_ALLOW_EXECUTE`, :data:`mmap.MAP_UNIX03` and - :data:`mmap.MAP_TPRO`. All of them are ``mmap(2)`` flags on macOS. - -- gh-113848: :func:`asyncio.TaskGroup` and :func:`asyncio.timeout` context - managers now handle :exc:`~asyncio.CancelledError` subclasses as well as - exact :exc:`!CancelledError`. - -- gh-113661: unittest runner: Don't exit 5 if tests were skipped. The - intention of exiting 5 was to detect issues where the test suite wasn't - discovered at all. If we skipped tests, it was correctly discovered. - -- gh-96037: Insert :exc:`TimeoutError` in the context of the exception that - was raised during exiting an expired :func:`asyncio.timeout` block. - -- gh-113781: Silence unraisable AttributeError when warnings are emitted - during Python finalization. - -- gh-113238: Add ``Anchor`` to ``importlib.resources`` (in order for the - code to comply with the documentation) - -- gh-111693: :func:`asyncio.Condition.wait` now re-raises the same - :exc:`CancelledError` instance that may have caused it to be interrupted. - Fixed race condition in :func:`asyncio.Semaphore.acquire` when interrupted - with a :exc:`CancelledError`. - -- gh-113791: Add ``CLOCK_MONOTONIC_RAW_APPROX`` and - ``CLOCK_UPTIME_RAW_APPROX`` to :mod:`time` on macOS. These are clocks - available on macOS 10.12 or later. - -- gh-112932: Restore the ability for :mod:`zipfile` to ``extractall`` from - zip files with a "/" directory entry in them as is commonly added to zips - by some wiki or bug tracker data exporters. - -- gh-113568: Raise deprecation warnings from :class:`pathlib.PurePath` and - not its private base class ``PurePathBase``. - -- gh-113594: Fix :exc:`UnicodeEncodeError` in :mod:`email` when re-fold - lines that contain unknown-8bit encoded part followed by non-unknown-8bit - encoded part. - -- gh-113538: In :meth:`asyncio.StreamReaderProtocol.connection_made`, there - is callback that logs an error if the task wrapping the "connected - callback" fails. This callback would itself fail if the task was - cancelled. Prevent this by checking whether the task was cancelled first. - If so, close the transport but don't log an error. - -- gh-113626: Add support for the *allow_code* argument in the :mod:`marshal` - module. Passing ``allow_code=False`` prevents serialization and - de-serialization of code objects which is incompatible between Python - versions. - -- gh-85567: Fix resource warnings for unclosed files in :mod:`pickle` and - :mod:`pickletools` command line interfaces. - -- gh-113537: Support loads ``str`` in :func:`plistlib.loads`. - -- gh-89850: Add default implementations of - :meth:`pickle.Pickler.persistent_id` and - :meth:`pickle.Unpickler.persistent_load` methods in the C implementation. - Calling ``super().persistent_id()`` and ``super().persistent_load()`` in - subclasses of the C implementation of :class:`pickle.Pickler` and - :class:`pickle.Unpickler` classes no longer causes infinite recursion. - -- gh-113569: Indicate if there were no actual calls in unittest - :meth:`~unittest.mock.Mock.assert_has_calls` failure. - -- gh-101225: Increase the backlog for - :class:`multiprocessing.connection.Listener` objects created by - :mod:`multiprocessing.manager` and :mod:`multiprocessing.resource_sharer` - to significantly reduce the risk of getting a connection refused error - when creating a :class:`multiprocessing.connection.Connection` to them. - -- gh-113568: Raise audit events from :class:`pathlib.Path` and not its - private base class ``PathBase``. - -- gh-113543: Make sure that ``webbrowser.MacOSXOSAScript`` sends - ``webbrowser.open`` audit event. - -- gh-113028: When a second reference to a string appears in the input to - :mod:`pickle`, and the Python implementation is in use, we are guaranteed - that a single copy gets pickled and a single object is shared when - reloaded. Previously, in protocol 0, when a string contained certain - characters (e.g. newline) it resulted in duplicate objects. - -- gh-113421: Fix multiprocessing logger for ``%(filename)s``. - -- gh-111784: Fix segfaults in the ``_elementtree`` module. Fix first - segfault during deallocation of ``_elementtree.XMLParser`` instances by - keeping strong reference to ``pyexpat`` module in module state for capsule - lifetime. Fix second segfault which happens in the same deallocation - process by keeping strong reference to ``_elementtree`` module in - ``XMLParser`` structure for ``_elementtree`` module lifetime. - -- gh-113407: Fix import of :mod:`unittest.mock` when CPython is built - without docstrings. - -- gh-113320: Fix regression in Python 3.12 where :class:`~typing.Protocol` - classes that were not marked as :func:`runtime-checkable - <typing.runtime_checkable>` would be unnecessarily introspected, - potentially causing exceptions to be raised if the protocol had - problematic members. Patch by Alex Waygood. - -- gh-53502: Add a new option ``aware_datetime`` in :mod:`plistlib` to loads - or dumps aware datetime. - -- gh-113358: Fix rendering tracebacks with exceptions with a broken - __getattr__ - -- gh-113214: Fix an ``AttributeError`` during asyncio SSL protocol aborts in - SSL-over-SSL scenarios. - -- gh-113246: Update bundled pip to 23.3.2. - -- gh-87264: Fixed tarfile list() method to show file type. - -- gh-112182: :meth:`asyncio.futures.Future.set_exception` now transforms - :exc:`StopIteration` into :exc:`RuntimeError` instead of hanging or other - misbehavior. Patch contributed by Jamie Phan. - -- gh-113225: Speed up :meth:`pathlib.Path.glob` by using - :attr:`os.DirEntry.path` where possible. - -- gh-113149: Improve error message when a JSON array or object contains a - trailing comma. Patch by Carson Radtke. - -- gh-113117: The :mod:`subprocess` module can now use the - :func:`os.posix_spawn` function with ``close_fds=True`` on platforms where - ``posix_spawn_file_actions_addclosefrom_np`` is available. Patch by Jakub - Kulik. - -- gh-113199: Make ``http.client.HTTPResponse.read1`` and - ``http.client.HTTPResponse.readline`` close IO after reading all data when - content length is known. Patch by Illia Volochii. - -- gh-113191: Add support of :func:`os.fchmod` and a file descriptor in - :func:`os.chmod` on Windows. - -- gh-113188: Fix :func:`shutil.copymode` and :func:`shutil.copystat` on - Windows. Previously they worked differently if *dst* is a symbolic link: - they modified the permission bits of *dst* itself rather than the file it - points to if *follow_symlinks* is true or *src* is not a symbolic link, - and did not modify the permission bits if *follow_symlinks* is false and - *src* is a symbolic link. - -- gh-113119: :func:`os.posix_spawn` now accepts ``env=None``, which makes - the newly spawned process use the current process environment. Patch by - Jakub Kulik. - -- gh-113202: Add a ``strict`` option to ``batched()`` in the ``itertools`` - module. - -- gh-61648: Detect line numbers of properties in doctests. - -- gh-113175: Sync with importlib_metadata 7.0, including improved type - annotations, fixed issue with symlinked packages in - ``package_distributions``, added ``EntryPoints.__repr__``, introduced the - ``diagnose`` script, added ``Distribution.origin`` property, and removed - deprecated ``EntryPoint`` access by numeric index (tuple behavior). - -- gh-59616: Add support of :func:`os.lchmod` and the *follow_symlinks* - argument in :func:`os.chmod` on Windows. Note that the default value of - *follow_symlinks* in :func:`!os.lchmod` is ``False`` on Windows. - -- gh-112559: :func:`signal.signal` and :func:`signal.getsignal` no longer - call ``repr`` on callable handlers. :func:`asyncio.run` and - :meth:`asyncio.Runner.run` no longer call ``repr`` on the task results. - Patch by Yilei Yang. - -- gh-112962: :mod:`dis` module functions add cache information to the - :class:`~dis.Instruction` instance rather than creating fake - :class:`~dis.Instruction` instances to represent the cache entries. - -- gh-112989: Reduce overhead to connect sockets with :mod:`asyncio` - SelectorEventLoop. - -- gh-112970: Use :c:func:`!closefrom` on Linux where available (e.g. - glibc-2.34), rather than only FreeBSD. - -- gh-110190: Fix ctypes structs with array on PPC64LE platform by setting - ``MAX_STRUCT_SIZE`` to 64 in stgdict. Patch by Diego Russo. - -- gh-112540: The statistics.geometric_mean() function now returns zero for - datasets containing a zero. Formerly, it would raise an exception. - -- gh-87286: Added :const:`LOG_FTP`, :const:`LOG_NETINFO`, - :const:`LOG_REMOTEAUTH`, :const:`LOG_INSTALL`, :const:`LOG_RAS`, and - :const:`LOG_LAUNCHD` tot the :mod:`syslog` module, all of them constants - on used on macOS. - -- gh-112800: Fix :mod:`asyncio` ``SubprocessTransport.close()`` not to throw - ``PermissionError`` when used with setuid executables. - -- gh-51944: Add the following constants to the :mod:`termios` module. These - values are present in macOS system headers: ``ALTWERASE``, ``B14400``, - ``B28800``, ``B7200``, ``B76800``, ``CCAR_OFLOW``, ``CCTS_OFLOW``, - ``CDSR_OFLOW``, ``CDTR_IFLOW``, ``CIGNORE``, ``CRTS_IFLOW``, ``EXTPROC``, - ``IUTF8``, ``MDMBUF``, ``NL2``, ``NL3``, ``NOKERNINFO``, ``ONOEOT``, - ``OXTABS``, ``VDSUSP``, ``VSTATUS``. - -- gh-79325: Fix an infinite recursion error in - :func:`tempfile.TemporaryDirectory` cleanup on Windows. - -- gh-94692: :func:`shutil.rmtree` now only catches OSError exceptions. - Previously a symlink attack resistant version of ``shutil.rmtree()`` could - ignore or pass to the error handler arbitrary exception when invalid - arguments were provided. - -- gh-112736: The use of del-safe symbols in ``subprocess`` was refactored to - allow for use in cross-platform build environments. - -- gh-112727: Speed up :meth:`pathlib.Path.absolute`. Patch by Barney Gale. - -- gh-74690: Speedup :func:`issubclass` checks against simple - :func:`runtime-checkable protocols <typing.runtime_checkable>` by around - 6%. Patch by Alex Waygood. - -- gh-74690: Speedup :func:`isinstance` checks by roughly 20% for - :func:`runtime-checkable protocols <typing.runtime_checkable>` that only - have one callable member. Speedup :func:`issubclass` checks for these - protocols by roughly 10%. Patch by Alex Waygood. - -- gh-112645: Remove deprecation error on passing ``onerror`` to - :func:`shutil.rmtree`. - -- gh-112640: Add ``kwdefaults`` parameter to :data:`types.FunctionType` to - set default keyword argument values. - -- gh-112622: Ensure ``name`` parameter is passed to event loop in - :func:`asyncio.create_task`. - -- gh-112618: Fix a caching bug relating to :data:`typing.Annotated`. - ``Annotated[str, True]`` is no longer identical to ``Annotated[str, 1]``. - -- gh-112334: Fixed a performance regression in 3.12's :mod:`subprocess` on - Linux where it would no longer use the fast-path ``vfork()`` system call - when it could have due to a logic bug, instead falling back to the safe - but slower ``fork()``. - - Also fixed a second 3.12.0 potential security bug. If a value of - ``extra_groups=[]`` was passed to :mod:`subprocess.Popen` or related APIs, - the underlying ``setgroups(0, NULL)`` system call to clear the groups list - would not be made in the child process prior to ``exec()``. - - This was identified via code inspection in the process of fixing the first - bug. - -- gh-110190: Fix ctypes structs with array on Arm platform by setting - ``MAX_STRUCT_SIZE`` to 32 in stgdict. Patch by Diego Russo. - -- gh-81194: Fix a crash in :func:`socket.if_indextoname` with specific value - (UINT_MAX). Fix an integer overflow in :func:`socket.if_indextoname` on - 64-bit non-Windows platforms. - -- gh-112578: Fix a spurious :exc:`RuntimeWarning` when executing the - :mod:`zipfile` module. - -- gh-112516: Update the bundled copy of pip to version 23.3.1. - -- gh-112510: Add :data:`readline.backend` for the backend readline uses - (``editline`` or ``readline``) - -- gh-112328: [Enum] Make ``EnumDict``, ``EnumDict.member_names``, - ``EnumType._add_alias_`` and ``EnumType._add_value_alias_`` public. - -- gh-112509: Fix edge cases that could cause a key to be present in both the - ``__required_keys__`` and ``__optional_keys__`` attributes of a - :class:`typing.TypedDict`. Patch by Jelle Zijlstra. - -- gh-101336: Add ``keep_alive`` keyword parameter for - :meth:`AbstractEventLoop.create_server` and - :meth:`BaseEventLoop.create_server`. - -- gh-63284: Added support for TLS-PSK (pre-shared key) mode to the - :mod:`ssl` module. - -- gh-112414: Fix regression in Python 3.12 where calling :func:`repr` on a - module that had been imported using a custom :term:`loader` could fail - with :exc:`AttributeError`. Patch by Alex Waygood. - -- gh-112358: Revert change to :class:`struct.Struct` initialization that - broke some cases of subclassing. - -- gh-112405: Optimize :meth:`pathlib.PurePath.relative_to`. Patch by Alex - Waygood. - -- gh-94722: Fix bug where comparison between instances of - :class:`~doctest.DocTest` fails if one of them has ``None`` as its lineno. - -- gh-112361: Speed up a small handful of :mod:`pathlib` methods by removing - some temporary objects. - -- gh-112345: Improve error message when trying to call :func:`issubclass` - against a :class:`typing.Protocol` that has non-method members. Patch by - Randolf Scholz. - -- gh-112137: Change :mod:`dis` output to display no-lineno as "--" instead - of "None". - -- gh-112332: Deprecate the ``exc_type`` field of - :class:`traceback.TracebackException`. Add ``exc_type_str`` to replace it. - -- gh-81620: Add extra tests for :func:`random.binomialvariate` - -- gh-112292: Fix a crash in :mod:`readline` when imported from a sub - interpreter. Patch by Anthony Shaw - -- gh-77621: Slightly improve the import time of the :mod:`pathlib` module by - deferring some imports. Patch by Barney Gale. - -- gh-112137: Change :mod:`dis` output to display logical labels for jump - targets instead of offsets. - -- gh-112139: Add :meth:`Signature.format` to format signatures to string - with extra options. And use it in :mod:`pydoc` to render more readable - signatures that have new lines between parameters. - -- gh-112105: Make :func:`readline.set_completer_delims` work with libedit - -- gh-106922: Display multiple lines with ``traceback`` when errors span - multiple lines. - -- gh-111874: When creating a :class:`typing.NamedTuple` class, ensure - :func:`~object.__set_name__` is called on all objects that define - ``__set_name__`` and exist in the values of the ``NamedTuple`` class's - class dictionary. Patch by Alex Waygood. - -- gh-68166: Add support of the "vsapi" element type in - :meth:`tkinter.ttk.Style.element_create`. - -- gh-110275: Named tuple's methods ``_replace()`` and ``__replace__()`` now - raise TypeError instead of ValueError for invalid keyword arguments. - -- gh-99367: Do not mangle ``sys.path[0]`` in :mod:`pdb` if safe_path is set - -- gh-111615: Fix a regression caused by a fix to gh-93162 whereby you - couldn't configure a :class:`QueueHandler` without specifying handlers. - -- gh-75666: Fix the behavior of :mod:`tkinter` widget's ``unbind()`` method - with two arguments. Previously, ``widget.unbind(sequence, funcid)`` - destroyed the current binding for *sequence*, leaving *sequence* unbound, - and deleted the *funcid* command. Now it removes only *funcid* from the - binding for *sequence*, keeping other commands, and deletes the *funcid* - command. It leaves *sequence* unbound only if *funcid* was the last bound - command. - -- gh-67790: Implement basic formatting support (minimum width, alignment, - fill) for :class:`fractions.Fraction`. - -- gh-111049: Fix crash during garbage collection of the :class:`io.BytesIO` - buffer object. - -- gh-102980: Redirect the output of ``interact`` command of :mod:`pdb` to - the same channel as the debugger. Add tests and improve docs. - -- gh-102988: :func:`email.utils.getaddresses` and - :func:`email.utils.parseaddr` now return ``('', '')`` 2-tuples in more - situations where invalid email addresses are encountered instead of - potentially inaccurate values. Add optional *strict* parameter to these - two functions: use ``strict=False`` to get the old behavior, accept - malformed inputs. ``getattr(email.utils, 'supports_strict_parsing', - False)`` can be use to check if the *strict* parameter is available. Patch - by Thomas Dwyer and Victor Stinner to improve the :cve:`2023-27043` fix. - -- gh-52161: :meth:`cmd.Cmd.do_help` now cleans docstrings with - :func:`inspect.cleandoc` before writing them. Patch by Filip Łapkiewicz. - -- gh-82300: Add ``track`` parameter to - :class:`multiprocessing.shared_memory.SharedMemory` that allows using - shared memory blocks without having to register with the POSIX resource - tracker that automatically releases them upon process exit. - -- gh-110109: Add private ``pathlib._PurePathBase`` class: a base class for - :class:`pathlib.PurePath` that omits certain magic methods. It may be made - public (along with ``_PathBase``) in future. - -- gh-109858: Protect :mod:`zipfile` from "quoted-overlap" zipbomb. It now - raises BadZipFile when try to read an entry that overlaps with other entry - or central directory. - -- gh-109786: Fix possible reference leaks and crash when re-enter the - ``__next__()`` method of :class:`itertools.pairwise`. - -- gh-91539: Small (10 - 20%) and trivial performance improvement of - :func:`urllib.request.getproxies_environment`, typically useful when there - are many environment variables to go over. - -- gh-103363: Add *follow_symlinks* keyword-only argument to - :meth:`pathlib.Path.owner` and :meth:`~pathlib.Path.group`, defaulting to - ``True``. - -- gh-102130: Support tab completion in :mod:`cmd` for ``editline``. - -- gh-99437: :func:`runpy.run_path` now decodes path-like objects, making - sure __file__ and sys.argv[0] of the module being run are always strings. - -- gh-104003: Add :func:`warnings.deprecated`, a decorator to mark deprecated - functions to static type checkers and to warn on usage of deprecated - classes and functions. See :pep:`702`. Patch by Jelle Zijlstra. - -- gh-103708: Make hardcoded python name, a configurable parameter so that - different implementations of python can override it instead of making huge - diffs in sysconfig.py - -- gh-66515: :class:`mailbox.MH` now supports folders that do not contain a - ``.mh_sequences`` file (e.g. Claws Mail IMAP-cache folders). Patch by - Serhiy Storchaka. - -- gh-83162: Renamed :exc:`!re.error` to :exc:`PatternError` for clarity, and - kept :exc:`!re.error` for backward compatibility. Patch by Matthias - Bussonnier and Adam Chhina. - -- gh-91133: Fix a bug in :class:`tempfile.TemporaryDirectory` cleanup, which - now no longer dereferences symlinks when working around file system - permission errors. - -- bpo-43153: On Windows, ``tempfile.TemporaryDirectory`` previously masked a - ``PermissionError`` with ``NotADirectoryError`` during directory cleanup. - It now correctly raises ``PermissionError`` if errors are not ignored. - Patch by Andrei Kulakov and Ken Jin. - -- bpo-32731: :func:`getpass.getuser` now raises :exc:`OSError` for all - failures rather than :exc:`ImportError` on systems lacking the :mod:`pwd` - module or :exc:`KeyError` if the password database is empty. - -- bpo-34321: :class:`mmap.mmap` now has a *trackfd* parameter on Unix; if it - is ``False``, the file descriptor specified by *fileno* will not be - duplicated. - -- bpo-35332: The :func:`shutil.rmtree` function now ignores errors when - calling :func:`os.close` when *ignore_errors* is ``True``, and - :func:`os.close` no longer retried after error. - -- bpo-35928: :class:`io.TextIOWrapper` now correctly handles the decoding - buffer after ``read()`` and ``write()``. - -- bpo-26791: :func:`shutil.move` now moves a symlink into a directory when - that directory is the target of the symlink. This provides the same - behavior as the mv shell command. The previous behavior raised an - exception. Patch by Jeffrey Kintscher. - -- bpo-41422: Fixed memory leaks of :class:`pickle.Pickler` and - :class:`pickle.Unpickler` involving cyclic references via the internal - memo mapping. - -- bpo-19821: The :func:`!pydoc.ispackage` function has been deprecated. - -- bpo-40262: The :meth:`ssl.SSLSocket.recv_into` method no longer requires - the *buffer* argument to implement ``__len__`` and supports buffers with - arbitrary item size. - -- bpo-39912: :func:`warnings.filterwarnings` and - :func:`warnings.simplefilter` now raise appropriate exceptions instead of - ``AssertionError``. Patch contributed by Rémi Lapeyre. - -- bpo-37260: Fixed a race condition in :func:`shutil.rmtree` in which - directory entries removed by another process or thread while - ``shutil.rmtree()`` is running can cause it to raise FileNotFoundError. - Patch by Jeffrey Kintscher. - -- bpo-36959: Fix some error messages for invalid ISO format string - combinations in ``strptime()`` that referred to directives not contained - in the format string. Patch by Gordon P. Hemsley. - -- bpo-18060: Fixed a class inheritance issue that can cause segfaults when - deriving two or more levels of subclasses from a base class of Structure - or Union. - -- bpo-29779: Add a new :envvar:`PYTHON_HISTORY` environment variable to set - the location of a ``.python_history`` file. - -- bpo-21360: :class:`mailbox.Maildir` now ignores files with a leading dot. - -Documentation -------------- - -- gh-111699: Relocate ``smtpd`` deprecation notice to its own section rather - than under ``locale`` in What's New in Python 3.12 document - -- gh-110746: Improved markup for valid options/values for methods - ttk.treeview.column and ttk.treeview.heading, and for Layouts. - -- gh-95649: Document that the :mod:`asyncio` module contains code taken from - `v0.16.0 of the uvloop project - <https://github.com/MagicStack/uvloop/tree/v0.16.0>`_, as well as the - required MIT licensing information. - -Tests ------ - -- gh-111798: Disable ``test_super_deep()`` from ``test_call`` under pydebug - builds on WASI; the stack depth is too small to make the test useful. - -- gh-111801: Lower the recursion limit in ``test_isinstance`` for - ``test_infinitely_many_bases()``. This prevents a stack overflow on a - pydebug build of WASI. - -- gh-111802: Specify a low recursion depth for ``test_bad_getattr()`` in - ``test.pickletester`` to avoid exhausting the stack under a pydebug build - for WASI. - -- gh-44626: Fix :func:`os.path.isabs` incorrectly returning ``True`` when - given a path that starts with exactly one (back)slash on Windows. - - Fix :meth:`pathlib.PureWindowsPath.is_absolute` incorrectly returning - ``False`` for some paths beginning with two (back)slashes. - -- gh-113633: Use module state for the _testcapi extension module. - -- gh-109980: Fix ``test_tarfile_vs_tar`` in ``test_shutil`` for macOS, where - system tar can include more information in the archive than - :mod:`shutil.make_archive`. - -- gh-112769: The tests now correctly compare zlib version when - :const:`zlib.ZLIB_RUNTIME_VERSION` contains non-integer suffixes. For - example zlib-ng defines the version as ``1.3.0.zlib-ng``. - -- gh-112334: Adds a regression test to verify that ``vfork()`` is used when - expected by :mod:`subprocess` on vfork enabled POSIX systems (Linux). - -- gh-108927: Fixed order dependence in running tests in the same process - when a test that has submodules (e.g. test_importlib) follows a test that - imports its submodule (e.g. test_importlib.util) and precedes a test (e.g. - test_unittest or test_compileall) that uses that submodule. - -- bpo-40648: Test modes that file can get with chmod() on Windows. - -Build ------ - -- gh-114013: Fix ``Tools/wasm/wasi.py`` to not include the path to - ``python.wasm`` as part of ``HOSTRUNNER``. The environment variable is - meant to specify how to run the WASI host only, having ``python.wasm`` and - relevant flags appended to the ``HOSTRUNNER``. This fixes ``make test`` - work. - -- gh-113258: Changed the Windows build to write out generated frozen modules - into the build tree instead of the source tree. - -- gh-112305: Fixed the ``check-clean-src`` step performed on out of tree - builds to detect errant ``$(srcdir)/Python/frozen_modules/*.h`` files and - recommend appropriate source tree cleanup steps to get a working build - again. - -- gh-112536: Add support for thread sanitizer (TSAN) - -- gh-112867: Fix the build for the case that WITH_PYMALLOC_RADIX_TREE=0 set. - -- gh-103065: Introduce ``Tools/wasm/wasi.py`` to simplify doing a WASI - build. - -- bpo-11102: The :func:`os.major`, :func:`os.makedev`, and :func:`os.minor` - functions are now available on HP-UX v3. - -- bpo-36351: Do not set ipv6type when cross-compiling. - -Windows -------- - -- gh-114096: Process privileges that are activated for creating directory - junctions are now restored afterwards, avoiding behaviour changes in other - parts of the program. - -- gh-111877: :func:`os.stat` calls were returning incorrect time values for - files that could not be accessed directly. - -- gh-111973: Update Windows installer to use SQLite 3.44.2. - -- gh-113009: :mod:`multiprocessing`: On Windows, fix a race condition in - ``Process.terminate()``: no longer set the ``returncode`` attribute to - always call ``WaitForSingleObject()`` in ``Process.wait()``. Previously, - sometimes the process was still running after ``TerminateProcess()`` even - if ``GetExitCodeProcess()`` is not ``STILL_ACTIVE``. Patch by Victor - Stinner. - -- gh-86179: Fixes path calculations when launching Python on Windows through - a symlink. - -- gh-71383: Update Tcl/Tk in Windows installer to 8.6.13 with a patch to - suppress incorrect ThemeChanged warnings. - -- gh-111650: Ensures the ``Py_GIL_DISABLED`` preprocessor variable is - defined in :file:`pyconfig.h` so that extension modules written in C are - able to use it. - -- gh-112278: Reduce the time cost for some functions in :mod:`platform` on - Windows if current user has no permission to the WMI. - -- gh-73427: Deprecate :func:`sys._enablelegacywindowsfsencoding`. Use - :envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead. Patch by Inada Naoki. - -- gh-87868: Correctly sort and remove duplicate environment variables in - :py:func:`!_winapi.CreateProcess`. - -- bpo-37308: Fix mojibake in :class:`mmap.mmap` when using a non-ASCII - *tagname* argument on Windows. - -macOS ------ - -- gh-113666: Add the following constants to module :mod:`stat`: - ``UF_SETTABLE``, ``UF_TRACKED``, ``UF_DATAVAULT``, ``SF_SUPPORTED``, - ``SF_SETTABLE``, ``SF_SYNTHETIC``, ``SF_RESTRICTED``, ``SF_FIRMLINK`` and - ``SF_DATALESS``. The values ``UF_SETTABLE``, ``SF_SUPPORTED``, - ``SF_SETTABLE`` and ``SF_SYNTHETIC`` are only available on macOS. - -- gh-113536: :func:`os.waitid` is now available on macOS - -- gh-110459: Running ``configure ... --with-openssl-rpath=X/Y/Z`` no longer - fails to detect OpenSSL on macOS. - -- gh-74573: Document that :mod:`dbm.ndbm` can silently corrupt DBM files on - updates when exceeding undocumented platform limits, and can crash - (segmentation fault) when reading such a corrupted file. (FB8919203) - -- gh-65701: The :program:`freeze` tool doesn't work with framework builds of - Python. Document this and bail out early when running the tool with such a - build. - -- gh-87277: webbrowser: Don't look for X11 browsers on macOS. Those are - generally not used and probing for them can result in starting XQuartz - even if it isn't used otherwise. - -- gh-111973: Update macOS installer to use SQLite 3.44.2. - -- gh-108269: Set ``CFBundleAllowMixedLocalizations`` to true in the - Info.plist for the framework, embedded Python.app and IDLE.app with - framework installs on macOS. This allows applications to pick up the - user's preferred locale when that's different from english. - -- gh-102362: Make sure the result of :func:`sysconfig.get_plaform` includes - at least a major and minor versions, even if ``MACOSX_DEPLOYMENT_TARGET`` - is set to only a major version during build to match the format expected - by pip. - -- gh-110017: Disable a signal handling stress test on macOS due to a bug in - macOS (FB13453490). - -- gh-110820: Make sure the preprocessor definitions for - ``ALIGNOF_MAX_ALIGN_T``, ``SIZEOF_LONG_DOUBLE`` and - ``HAVE_GCC_ASM_FOR_X64`` are correct for Universal 2 builds on macOS. - -- gh-109981: Use ``/dev/fd`` on macOS to determine the number of open files - in ``test.support.os_helper.fd_count`` to avoid a crash with "guarded" - file descriptors when probing for open files. - -IDLE ----- - -- gh-72284: Improve the lists of features, editor key bindings, and shell - key bingings in the IDLE doc. - -- gh-113903: Fix rare failure of test.test_idle, in test_configdialog. - -- gh-113729: Fix the "Help -> IDLE Doc" menu bug in 3.11.7 and 3.12.1. - -- gh-113269: Fix test_editor hang on macOS Catalina. - -- gh-112898: Fix processing unsaved files when quitting IDLE on macOS. - -- bpo-13586: Enter the selected text when opening the "Replace" dialog. - -C API ------ - -- gh-106560: Fix redundant declarations in the public C API. Declare - PyBool_Type, PyLong_Type and PySys_Audit() only once. Patch by Victor - Stinner. - -- gh-112438: Fix support of format units "es", "et", "es#", and "et#" in - nested tuples in :c:func:`PyArg_ParseTuple`-like functions. - -- gh-111545: Add :c:func:`Py_HashPointer` function to hash a pointer. Patch - by Victor Stinner. - -- gh-65210: Change the declaration of the *keywords* parameter of - :c:func:`PyArg_ParseTupleAndKeywords` and - :c:func:`PyArg_VaParseTupleAndKeywords` for better compatibility with C++. - - -What's New in Python 3.13.0 alpha 2? -==================================== - -*Release date: 2023-11-22* - -Core and Builtins ------------------ - -- gh-112243: Don't include comments in f-string debug expressions. Patch by - Pablo Galindo - -- gh-112287: Slightly optimize the Tier 2 (uop) interpreter by only loading - ``oparg`` and ``operand`` when needed. Also double the trace size limit - again, to 512 this time. - -- gh-112266: Change docstrings of :attr:`~object.__dict__` and - :attr:`~object.__weakref__`. - -- gh-111807: Lower the max parser stack depth to 1000 under WASI debug - builds. - -- gh-111798: When Python is built in debug mode, set the C recursion limit - to 500 instead of 1500. A debug build is likely built with low - optimization level which implies higher stack memory usage than a release - build. Patch by Victor Stinner. - -- gh-106529: Enable translating unspecialized ``FOR_ITER`` to Tier 2. - -- gh-111916: Make hashlib related modules thread-safe without the GIL - -- gh-81137: Deprecate assignment to a function's ``__code__`` field when the - new code object is of a mismatched type (e.g., from a generator to a plain - function). - -- gh-79932: Raise exception if :meth:`frame.clear` is called on a suspended - frame. - -- gh-81925: Implement native thread ids for GNU KFreeBSD. - -- gh-111843: Use exponential backoff to reduce the number of failed tier 2 - optimization attempts by over 99%. - -- gh-110829: Joining a thread now ensures the underlying OS thread has - exited. This is required for safer fork() in multi-threaded processes. - -- gh-109369: Make sure that tier 2 traces are de-optimized if the code is - instrumented - -- gh-111772: Specialize slot loads and stores for _Py_T_OBJECT as well as - Py_T_OBJECT_EX - -- gh-111666: Speed up :meth:`BaseExceptionGroup.derive`, - :meth:`BaseExceptionGroup.subgroup`, and :meth:`BaseExceptionGroup.split` - by changing how they parse passed arguments. - -- gh-111654: Fix runtime crash when some error happens in opcode - ``LOAD_FROM_DICT_OR_DEREF``. - -- gh-111623: Add support for sharing tuples between interpreters using the - cross-interpreter API. Patch by Anthony Shaw. - -- gh-111354: The oparg of :opcode:`YIELD_VALUE` is now ``1`` if the - instruction is part of a yield-from or await, and ``0`` otherwise. - - The SUSPENDED frame state is now split into ``SUSPENDED`` and - ``SUSPENDED_YIELD_FROM``. This simplifies the code in ``_PyGen_yf``. - -- gh-111520: Merge the Tier 1 (bytecode) and Tier 2 (micro-ops) interpreters - together, moving the Tier 2 interpreter loop and switch into - ``_PyEval_EvalFrameDefault()`` in ``Python/ceval.c``. The - ``Python/executor.c`` file is gone. Also the ``TIER_ONE`` and ``TIER_TWO`` - macros are now handled by the code generator. - - **Beware!** This changes the environment variables to enable micro-ops and - their debugging to ``PYTHON_UOPS`` and ``PYTHON_LLTRACE``. - -- gh-109181: Speed up :class:`Traceback` object creation by lazily compute - the line number. Patch by Pablo Galindo - -- gh-111420: Allow type comments in parenthesized ``with`` statements - -- gh-111438: Add support for sharing floats between interpreters using the - cross-interpreter API. Patch by Anthony Shaw. - -- gh-111435: Add support for sharing of ``True`` and ``False`` between - interpreters using the cross-interpreter API. Patch by Anthony Shaw. - -- gh-102388: Fix a bug where ``iso2022_jp_3`` and ``iso2022_jp_2004`` codecs - read out of bounds - -- gh-111366: Fix an issue in the :mod:`codeop` that was causing - :exc:`SyntaxError` exceptions raised in the presence of invalid syntax to - not contain precise error messages. Patch by Pablo Galindo - -- gh-111380: Fix a bug that was causing :exc:`SyntaxWarning` to appear twice - when parsing if invalid syntax is encountered later. Patch by Pablo - galindo - -- gh-111374: Added a new environment variable - :envvar:`PYTHON_FROZEN_MODULES`. It determines whether or not frozen - modules are ignored by the import machinery, equivalent of the :option:`-X - frozen_modules <-X>` command-line option. - -- gh-111354: Remove ``oparg`` from :opcode:`YIELD_VALUE`. Change ``oparg`` - of :opcode:`RESUME` to include information about the except-depth. These - changes make it possible to simplify the code in generator close. - -- gh-94438: Fix a regression that prevented jumping across ``is None`` and - ``is not None`` when debugging. Patch by Savannah Ostrowski. - -- gh-67224: Show source lines in tracebacks when using the ``-c`` option - when running Python. Patch by Pablo Galindo - -- gh-111123: Fix a bug where a :keyword:`global` declaration in an - :keyword:`except` block is rejected when the global is used in the - :keyword:`else` block. - -- gh-110938: Fix error messages for indented blocks with functions and - classes with generic type parameters. Patch by Pablo Galindo - -- gh-109214: Remove unnecessary instruction pointer updates before returning - from frames. - -- gh-110912: Correctly display the traceback for :exc:`MemoryError` - exceptions using the :mod:`traceback` module. Patch by Pablo Galindo - -- gh-109894: Fixed crash due to improperly initialized static - :exc:`MemoryError` in subinterpreter. - -- gh-110892: Return ``NULL`` for ``PyTrace_RETURN`` events caused by an - exception - -- gh-110864: Fix argument parsing by ``_PyArg_UnpackKeywordsWithVararg`` for - functions defining pos-or-keyword, vararg, and kw-only parameters. - -- gh-109094: Replace ``prev_instr`` on the interpreter frame by - ``instr_ptr`` which points to the beginning of the instruction that is - currently executing (or will execute once the frame resumes). - -- gh-110805: Allow the repl to show source code and complete tracebacks. - Patch by Pablo Galindo - -- gh-110722: Add :envvar:`PYTHON_PRESITE=package.module` to import a module - early in the interpreter lifecycle before ``site.py`` is executed. Python - needs to be :ref:`built in debug mode <debug-build>` for this option to - exist. - -- gh-110481: Implement biased reference counting in ``--disable-gil`` - builds. - -- gh-110543: Fix regression in Python 3.12 where - :meth:`types.CodeType.replace` would produce a broken code object if - called on a module or class code object that contains a comprehension. - Patch by Jelle Zijlstra. - -- gh-89519: Removed chained :class:`classmethod` descriptors (introduced in - :issue:`19072`). This can no longer be used to wrap other descriptors - such as :class:`property`. The core design of this feature was flawed and - caused a number of downstream problems. To "pass-through" a - :class:`classmethod`, consider using the :attr:`!__wrapped__` attribute - that was added in Python 3.10. - -- gh-103615: Use local events for opcode tracing - -- bpo-46657: Add mimalloc memory allocator support. - -- gh-106718: When PyConfig.stdlib_dir is explicitly set, it's now respected - and won't be overridden by PyConfig.home. - -- gh-106905: Fix incorrect SystemError about AST constructor recursion depth - mismatch. - -- gh-100445: Improve error message for unterminated strings with escapes. - -- bpo-45759: Improved error messages for ``elif``/``else`` statements not - matching any valid statements. Patch by Jeremiah Vivian. - -Library -------- - -- gh-111942: Fix SystemError in the TextIOWrapper constructor with - non-encodable "errors" argument in non-debug mode. - -- gh-111995: Added the ``NI_IDN`` constant to the :mod:`socket` module when - present in C at build time for use with :func:`socket.getnameinfo`. - -- gh-109538: Issue warning message instead of having :class:`RuntimeError` - be displayed when event loop has already been closed at - :meth:`StreamWriter.__del__`. - -- gh-111942: Fix crashes in :meth:`io.TextIOWrapper.reconfigure` when pass - invalid arguments, e.g. non-string encoding. - -- gh-111460: :mod:`curses`: restore wide character support (including - :func:`curses.unget_wch` and :meth:`~curses.window.get_wch`) on macOS, - which was unavailable due to a regression in Python 3.12. - -- gh-103791: :class:`contextlib.suppress` now supports suppressing - exceptions raised as part of a :exc:`BaseExceptionGroup`, in addition to - the recent support for :exc:`ExceptionGroup`. - -- gh-111835: The :class:`mmap.mmap` class now has an - :meth:`~mmap.mmap.seekable` method that can be used when a seekable - file-like object is required. The :meth:`~mmap.mmap.seek` method now - returns the new absolute position. Patch by Donghee Na. - -- gh-111804: Remove posix.fallocate() under WASI as the underlying - posix_fallocate() is not available in WASI preview2. - -- gh-111841: Fix truncating arguments on an embedded null character in - :meth:`os.putenv` and :meth:`os.unsetenv` on Windows. - -- gh-111768: :func:`wsgiref.util.is_hop_by_hop` is now exposed correctly in - ``__all__``. - -- gh-80731: Avoid executing the default function in :class:`cmd.Cmd` in an - except block - -- gh-111541: Fix :mod:`doctest` for :exc:`SyntaxError` not-builtin - subclasses. - -- gh-111719: Add extra argument validation for ``alias`` command in - :mod:`pdb` - -- gh-111482: :mod:`time`: Make :func:`time.clock_gettime` and - :func:`time.clock_gettime_ns` functions up to 2x faster by faster calling - convention. Patch by Victor Stinner. - -- gh-110894: Call loop exception handler for exceptions in - ``client_connected_cb`` of :func:`asyncio.start_server` so that - applications can handle it. Patch by Kumar Aditya. - -- gh-111531: Fix reference leaks in ``bind_class()`` and ``bind_all()`` - methods of :mod:`tkinter` widgets. - -- gh-111246: :meth:`asyncio.loop.create_unix_server` will now automatically - remove the Unix socket when the server is closed. - -- gh-111356: Added :func:`io.text_encoding`, :data:`io.DEFAULT_BUFFER_SIZE`, - and :class:`io.IncrementalNewlineDecoder` to ``io.__all__``. - -- gh-66425: Remove the code to set the REMOTE_HOST header from wsgiref - module, as it is unreachable. This header is used for performance reasons, - which is not necessary in the wsgiref module. - -- gh-111429: Speed up :meth:`pathlib.PurePath.relative_to` and - :meth:`~pathlib.PurePath.is_relative_to`. - -- gh-111342: Fixed typo in :func:`math.sumprod`. - -- gh-68166: Remove mention of not supported "vsapi" element type in - :meth:`tkinter.ttk.Style.element_create`. Add tests for - ``element_create()`` and other ``ttk.Style`` methods. Add examples for - ``element_create()`` in the documentation. - -- gh-111388: Add ``show_group`` parameter to - :func:`traceback.format_exception_only`, which allows to format - :exc:`ExceptionGroup` instances. - -- gh-79033: Another attempt at fixing :func:`asyncio.Server.wait_closed`. It - now blocks until both conditions are true: the server is closed, *and* - there are no more active connections. (This means that in some cases where - in 3.12.0 this function would *incorrectly* have returned immediately, it - will now block; in particular, when there are no active connections but - the server hasn't been closed yet.) - -- gh-111259: Optimize recursive wildcards in :mod:`pathlib`. - -- gh-111295: Fix :mod:`time` not checking for errors when initializing. - -- gh-111253: Add error checking during :mod:`!_socket` module init. - -- gh-111251: Fix :mod:`!_blake2` not checking for errors when initializing. - -- gh-111233: Fix :mod:`select` not checking for errors when initializing. - -- gh-111230: Fix :mod:`ssl` not checking for errors when initializing. - -- gh-111174: Fix crash in :meth:`io.BytesIO.getbuffer` called repeatedly for - empty BytesIO. - -- gh-111187: Postpone removal version for locale.getdefaultlocale() to - Python 3.15. - -- gh-111159: Fix :mod:`doctest` output comparison for exceptions with notes. - -- gh-110910: Fix invalid state handling in :class:`asyncio.TaskGroup` and - :class:`asyncio.Timeout`. They now raise proper RuntimeError if they are - improperly used and are left in consistent state after this. - -- gh-111092: Make turtledemo run without default root enabled. - -- gh-110944: Support alias and convenience vars for :mod:`pdb` completion - -- gh-110745: Added *newline* parameter to :meth:`pathlib.Path.read_text`. - Patch by Junya Okabe. - -- gh-84583: Make :mod:`pdb` enter post-mortem mode even for - :exc:`SyntaxError` - -- gh-80675: Set ``f_trace_lines = True`` on all frames upon - :func:`pdb.set_trace` - -- gh-110771: Expose the setup and cleanup portions of - ``asyncio.run_forever()`` as the standalone methods - ``asyncio.run_forever_setup()`` and ``asyncio.run_forever_cleanup()``. - This allows for tighter integration with GUI event loops. - -- gh-110774: Support setting the :class:`asyncio.Runner` loop_factory kwarg - in :class:`unittest.IsolatedAsyncioTestCase` - -- gh-110392: Fix :func:`tty.setraw` and :func:`tty.setcbreak`: previously - they returned partially modified list of the original tty attributes. - :func:`tty.cfmakeraw` and :func:`tty.cfmakecbreak` now make a copy of the - list of special characters before modifying it. - -- gh-59013: Make line number of function breakpoint more precise in - :mod:`pdb` - -- gh-88434: Emit deprecation warning for non-integer numbers in - :mod:`gettext` functions and methods that consider plural forms even if - the translation was not found. - -- gh-110395: Ensure that :func:`select.kqueue` objects correctly appear as - closed in forked children, to prevent operations on an invalid file - descriptor. - -- gh-110196: Add ``__reduce__`` method to :class:`IPv6Address` in order to - keep ``scope_id`` - -- gh-109747: Improve errors for unsupported look-behind patterns. Now - re.error is raised instead of OverflowError or RuntimeError for too large - width of look-behind pattern. - -- gh-109466: Add the :attr:`ipaddress.IPv4Address.ipv6_mapped` property, - which returns the IPv4-mapped IPv6 address. - -- gh-85098: Implement the CLI of the :mod:`symtable` module and improve the - repr of :class:`~symtable.Symbol`. - -- gh-108791: Improved error handling in :mod:`pdb` command line interface, - making it produce more concise error messages. - -- gh-105931: Change :mod:`compileall` to only strip the stripdir prefix from - the full path recorded in the compiled ``.pyc`` file, when the prefix - matches the start of the full path in its entirety. When the prefix does - not match, no stripping is performed and a warning to this effect is - displayed. - - Previously all path components of the stripdir prefix that matched the - full path were removed, while those that did not match were left alone - (including ones interspersed between matching components). - -- gh-107431: Make the ``DictProxy`` and ``ListProxy`` types in - :mod:`multiprocessing.managers` :ref:`Generic Alias - Types<types-genericalias>` for ``[]`` use in typing contexts. - -- gh-72904: Add :func:`glob.translate`. This function converts a pathname - with shell-style wildcards to a regular expression. - -- gh-90026: Define ``USE_XATTRS`` on Cygwin so that XATTR-related functions - in the :mod:`os` module become available. - -- gh-90890: New methods :meth:`mailbox.Maildir.get_info`, - :meth:`mailbox.Maildir.set_info`, :meth:`mailbox.Maildir.get_flags`, - :meth:`mailbox.Maildir.set_flags`, :meth:`mailbox.Maildir.add_flag`, - :meth:`mailbox.Maildir.remove_flag`. These methods speed up accessing a - message's info and/or flags and are useful when it is not necessary to - access the message's contents, as when iterating over a Maildir to find - messages with specific flags. - -- gh-102956: Fix returning of empty byte strings after seek in zipfile - module - -- gh-102895: Added a parameter ``local_exit`` for :func:`code.interact` to - prevent ``exit()`` and ``quit`` from closing ``sys.stdin`` and raise - ``SystemExit``. - -- gh-97928: Change the behavior of :meth:`tkinter.Text.count`. It now always - returns an integer if one or less counting options are specified. - Previously it could return a single count as a 1-tuple, an integer (only - if option ``"update"`` was specified) or ``None`` if no items found. The - result is now the same if ``wantobjects`` is set to ``0``. - -- gh-96954: Switch the storage of the unicode codepoint names to use a - different data-structure, a `directed acyclic word graph - <https://en.wikipedia.org/wiki/Deterministic_acyclic_finite_state_automaton>`_. - This makes the unicodedata shared library about 440 KiB smaller. - Contributed by Carl Friedrich Bolz-Tereick using code from the PyPy - project. - -- gh-73561: Omit the interface scope from an IPv6 address when used as Host - header by :mod:`http.client`. - -- gh-86826: :mod:`zipinfo` now supports the full range of values in the TZ - string determined by RFC 8536 and detects all invalid formats. Both Python - and C implementations now raise exceptions of the same type on invalid - data. - -Tests ------ - -- gh-111808: Make the default value of ``test.support.infinite_recursion()`` - to be conditional based on whether optimizations were used when compiling - the interpreter. This helps with platforms like WASI whose stack size is - greatly restricted in debug builds. - -- gh-110722: Gathering line coverage of standard libraries within the - regression test suite is now precise, as well as much faster. Patch by - Łukasz Langa. - -- gh-110367: Make regrtest ``--verbose3`` option compatible with - ``--huntrleaks -jN`` options. The ``./python -m test -j1 -R 3:3 - --verbose3`` command now works as expected. Patch by Victor Stinner. - -- gh-111165: Remove no longer used functions ``run_unittest()`` and - ``run_doctest()`` from the :mod:`test.support` module. - -- gh-110932: Fix regrtest if the ``SOURCE_DATE_EPOCH`` environment variable - is defined: use the variable value as the random seed. Patch by Victor - Stinner. - -- gh-110995: test_gdb: Fix detection of gdb built without Python scripting - support. Patch by Victor Stinner. - -- gh-110918: Test case matching patterns specified by options ``--match``, - ``--ignore``, ``--matchfile`` and ``--ignorefile`` are now tested in the - order of specification, and the last match determines whether the test - case be run or ignored. - -- gh-108747: Add unit test for ``usercustomize`` and ``sitecustomize`` hooks - from :class:`site`. - -Build ------ - -- gh-96954: Make ``make regen-unicodedata`` work for out-of-tree builds of - CPython. - -- gh-112088: Add ``Tools/build/regen-configure.sh`` script to regenerate the - ``configure`` with an Ubuntu container image. The - ``quay.io/tiran/cpython_autoconf:271`` container image - (`tiran/cpython_autoconf <https://github.com/tiran/cpython_autoconf>`_) is - no longer used. Patch by Victor Stinner. - -- gh-111046: For wasi-threads, memory is now exported to fix compatibility - issues with some wasm runtimes. - -- gh-110828: AIX 32bit needs ``-latomic`` to build the :mod:`!_testcapi` - extension module. - -- gh-85283: The ``errno``, ``md5``, ``resource``, ``winsound``, - ``_ctypes_test``, ``_multiprocessing.posixshmem``, ``_scproxy``, - ``_stat``, ``_testimportmultiple`` and ``_uuid`` C extensions are now - built with the :ref:`limited C API <limited-c-api>`. Patch by Victor - Stinner. - -Windows -------- - -- gh-111856: Fixes :func:`~os.fstat` on file systems that do not support - file ID requests. This includes FAT32 and exFAT. - -- gh-111293: Fix :data:`os.DirEntry.inode` dropping higher 64 bits of a file - id on some filesystems on Windows. - -- gh-110913: WindowsConsoleIO now correctly chunks large buffers without - splitting up UTF-8 sequences. - -macOS ------ - -- gh-59703: For macOS framework builds, in ``getpath.c`` use the system - ``dladdr`` function to find the path to the shared library rather than - depending on deprecated macOS APIs. - -- gh-110950: Update macOS installer to include an upstream Tcl/Tk fix for - the ``Secure coding is not enabled for restorable state!`` warning - encountered in Tkinter on macOS 14 Sonoma. - -- gh-111015: Ensure that IDLE.app and Python Launcher.app are installed with - appropriate permissions on macOS builds. - -- gh-71383: Update macOS installer to include an upstream Tcl/Tk fix for the - ``ttk::ThemeChanged`` error encountered in Tkinter. - -- gh-92603: Update macOS installer to include a fix accepted by upstream - Tcl/Tk for a crash encountered after the first :meth:`tkinter.Tk` instance - is destroyed. - -IDLE ----- - -- bpo-35668: Add docstrings to the IDLE debugger module. Fix two bugs: - initialize ``Idb.botframe`` (should be in Bdb); in ``Idb.in_rpc_code``, - check whether ``prev_frame`` is ``None`` before trying to use it. Greatly - expand test_debugger. - -Tools/Demos ------------ - -- gh-111903: Argument Clinic now supports the ``@critical_section`` - directive that instructs Argument Clinic to generate a critical section - around the function call, which locks the ``self`` object in - ``--disable-gil`` builds. Patch by Sam Gross. - -C API ------ - -- gh-112026: Add again the private ``_PyThreadState_UncheckedGet()`` - function as an alias to the new public - :c:func:`PyThreadState_GetUnchecked` function. Patch by Victor Stinner. - -- gh-112026: Restore the removed ``_PyDict_GetItemStringWithError()`` - function. It is used by numpy. Patch by Victor Stinner. - -- gh-112026: Restore removed private C API functions, macros and structures - which have no simple replacement for now: - - * _PyDict_GetItem_KnownHash() - * _PyDict_NewPresized() - * _PyHASH_BITS - * _PyHASH_IMAG - * _PyHASH_INF - * _PyHASH_MODULUS - * _PyHASH_MULTIPLIER - * _PyLong_Copy() - * _PyLong_FromDigits() - * _PyLong_New() - * _PyLong_Sign() - * _PyObject_CallMethodId() - * _PyObject_CallMethodNoArgs() - * _PyObject_CallMethodOneArg() - * _PyObject_CallOneArg() - * _PyObject_EXTRA_INIT - * _PyObject_FastCallDict() - * _PyObject_GetAttrId() - * _PyObject_Vectorcall() - * _PyObject_VectorcallMethod() - * _PyStack_AsDict() - * _PyThread_CurrentFrames() - * _PyUnicodeWriter structure - * _PyUnicodeWriter_Dealloc() - * _PyUnicodeWriter_Finish() - * _PyUnicodeWriter_Init() - * _PyUnicodeWriter_Prepare() - * _PyUnicodeWriter_PrepareKind() - * _PyUnicodeWriter_WriteASCIIString() - * _PyUnicodeWriter_WriteChar() - * _PyUnicodeWriter_WriteLatin1String() - * _PyUnicodeWriter_WriteStr() - * _PyUnicodeWriter_WriteSubstring() - * _PyUnicode_AsString() - * _PyUnicode_FromId() - * _PyVectorcall_Function() - * _Py_IDENTIFIER() - * _Py_c_abs() - * _Py_c_diff() - * _Py_c_neg() - * _Py_c_pow() - * _Py_c_prod() - * _Py_c_quot() - * _Py_c_sum() - * _Py_static_string() - * _Py_static_string_init() - - Patch by Victor Stinner. - -- gh-112026: Add again ``<ctype.h>`` and ``<unistd.h>`` includes in - ``Python.h``, but don't include them in the limited C API version 3.13 and - newer. Patch by Victor Stinner. - -- gh-111956: Add internal-only one-time initialization API: ``_PyOnceFlag`` - and ``_PyOnceFlag_CallOnce``. - -- gh-111262: Add :c:func:`PyDict_Pop` and :c:func:`PyDict_PopString` - functions: remove a key from a dictionary and optionally return the - removed value. This is similar to :meth:`dict.pop`, but without the - default value and not raising :exc:`KeyError` if the key missing. Patch by - Stefan Behnel and Victor Stinner. - -- gh-111863: Rename ``Py_NOGIL`` to ``Py_GIL_DISABLED``. Patch by Hugo van - Kemenade. - -- gh-111138: Add :c:func:`PyList_Extend` and :c:func:`PyList_Clear` - functions: similar to Python ``list.extend()`` and ``list.clear()`` - methods. Patch by Victor Stinner. - -- gh-108765: On Windows, ``Python.h`` no longer includes the ``<stddef.h>`` - standard header file. If needed, it should now be included explicitly. - Patch by Victor Stinner. - -- gh-111569: Implement "Python Critical Sections" from :pep:`703`. These are - macros to help replace the GIL with per-object locks in the - ``--disable-gil`` build of CPython. The macros are no-ops in the default - build. - -- gh-111506: In the limited C API version 3.13, :c:func:`Py_SET_REFCNT` - function is now implemented as an opaque function call. Patch by Victor - Stinner. - -- gh-108082: Add :c:func:`PyErr_FormatUnraisable` function. - -- gh-110964: Move the undocumented private _PyArg functions and - _PyArg_Parser structure to internal C API (``pycore_modsupport.h``). Patch - by Victor Stinner. - -- gh-110815: Support non-ASCII keyword names in - :c:func:`PyArg_ParseTupleAndKeywords`. - -- gh-109587: Introduced :c:func:`PyUnstable_PerfTrampoline_CompileCode`, - :c:func:`PyUnstable_PerfTrampoline_SetPersistAfterFork` and - :c:func:`PyUnstable_CopyPerfMapFile`. These functions allow extension - modules to initialize trampolines eagerly, after the application is - "warmed up". This makes it possible to have perf-trampolines running in an - always-enabled fashion. - -- gh-85283: Add the :c:func:`PySys_Audit` function to the limited C API. - Patch by Victor Stinner. - -- gh-85283: Add :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawCalloc`, - :c:func:`PyMem_RawRealloc` and :c:func:`PyMem_RawFree` to the limited C - API. Patch by Victor Stinner. - -- gh-106672: Functions :c:func:`PyDict_GetItem`, - :c:func:`PyDict_GetItemString`, :c:func:`PyMapping_HasKey`, - :c:func:`PyMapping_HasKeyString`, :c:func:`PyObject_HasAttr`, - :c:func:`PyObject_HasAttrString`, and :c:func:`PySys_GetObject`, which - clear all errors occurred during calling the function, report now them - using :func:`sys.unraisablehook`. - -- gh-67565: Remove redundant C-contiguity check in :file:`getargs.c`, - :mod:`binascii`, :mod:`ssl` and Argument Clinic. Patched by Stefan Krah - and Furkan Onder - - -What's New in Python 3.13.0 alpha 1? -==================================== - -*Release date: 2023-10-13* - -Security --------- - -- gh-108310: Fixed an issue where instances of :class:`ssl.SSLSocket` were - vulnerable to a bypass of the TLS handshake and included protections (like - certificate verification) and treating sent unencrypted data as if it were - post-handshake TLS encrypted data. Security issue reported as - :cve:`2023-40217` by Aapo Oksman. Patch by Gregory P. Smith. - -- gh-107774: PEP 669 specifies that ``sys.monitoring.register_callback`` - will generate an audit event. Pre-releases of Python 3.12 did not generate - the audit event. This is now fixed. - -- gh-102988: Reverted the :mod:`email.utils` security improvement change - released in 3.12beta4 that unintentionally caused - :mod:`email.utils.getaddresses` to fail to parse email addresses with a - comma in the quoted name field. See :gh:`106669`. - -- gh-99108: Refresh our new HACL* built-in :mod:`hashlib` code from - upstream. Built-in SHA2 should be faster and an issue with SHA3 on 32-bit - platforms is fixed. - -- gh-102509: Start initializing ``ob_digit`` during creation of - :c:type:`PyLongObject` objects. Patch by Illia Volochii. - -Core and Builtins ------------------ - -- gh-110782: Fix crash when :class:`typing.TypeVar` is constructed with a - keyword argument. Patch by Jelle Zijlstra. - -- gh-110752: Reset ``ceval.eval_breaker`` in :func:`interpreter_clear` - -- gh-110721: Use the :mod:`traceback` implementation for the default - :c:func:`PyErr_Display` functionality. Patch by Pablo Galindo - -- gh-110696: Fix incorrect error message for invalid argument unpacking. - Patch by Pablo Galindo - -- gh-104169: Split the tokenizer into two separate directories: - One part - includes the actual lexeme producing logic and lives in ``Parser/lexer``. - - The second part wraps the lexer according to the different tokenization - modes we have (string, utf-8, file, interactive, readline) and lives in - ``Parser/tokenizer``. - -- gh-110688: Remove undocumented ``test_c_api`` method from :class:`set`, - which was only defined for testing purposes under ``Py_DEBUG``. Now we - have proper CAPI tests. - -- gh-104584: Fix a reference leak when running with :envvar:`PYTHONUOPS` or - :option:`-X uops <-X>` enabled. - -- gh-110514: Add ``PY_THROW`` to :func:`sys.setprofile` events - -- gh-110489: Optimise :func:`math.ceil` when the input is exactly a float, - resulting in about a 10% improvement. - -- gh-110455: Guard ``assert(tstate->thread_id > 0)`` with ``#ifndef - HAVE_PTHREAD_STUBS``. This allows for for pydebug builds to work under - WASI which (currently) lacks thread support. - -- gh-110309: Remove unnecessary empty constant nodes in the ast of f-string - specs. - -- gh-110259: Correctly identify the format spec in f-strings (with single or - triple quotes) that have multiple lines in the expression part and include - a formatting spec. Patch by Pablo Galindo - -- gh-110237: Fix missing error checks for calls to ``PyList_Append`` in - ``_PyEval_MatchClass``. - -- gh-110164: regrtest: If the ``SOURCE_DATE_EPOCH`` environment variable is - defined, regrtest now disables tests randomization. Patch by Victor - Stinner. - -- gh-109889: Fix the compiler's redundant NOP detection algorithm to skip - over NOPs with no line number when looking for the next instruction's - lineno. - -- gh-109853: ``sys.path[0]`` is now set correctly for subinterpreters. - -- gh-109923: Set line number on the ``POP_TOP`` that follows a - ``RETURN_GENERATOR``. - -- gh-105716: Subinterpreters now correctly handle the case where they have - threads running in the background. Before, such threads would interfere - with cleaning up and destroying them, as well as prevent running another - script. - -- gh-109369: The internal eval_breaker and supporting flags, plus the - monitoring version have been merged into a single atomic integer to speed - up checks. - -- gh-109823: Fix bug where compiler does not adjust labels when removing an - empty basic block which is a jump target. - -- gh-109793: The main thread no longer exits prematurely when a - subinterpreter is cleaned up during runtime finalization. The bug was a - problem particularly because, when triggered, the Python process would - always return with a 0 exitcode, even if it failed. - -- gh-109719: Fix missing jump target labels when compiler reorders cold/warm - blocks. - -- gh-109595: Add :option:`-X cpu_count <-X>` command line option to - override return results of :func:`os.cpu_count` and - :func:`os.process_cpu_count`. This option is useful for users who need to - limit CPU resources of a container system without having to modify the - container (application code). Patch by Donghee Na. - -- gh-109627: Fix bug where the compiler does not assign a new jump target - label to a duplicated small exit block. - -- gh-109596: Fix some tokens in the grammar that were incorrectly marked as - soft keywords. Also fix some repeated rule names and ensure that repeated - rules are not allowed. Patch by Pablo Galindo - -- gh-109496: On a Python built in debug mode, :c:func:`Py_DECREF()` now - calls ``_Py_NegativeRefcount()`` if the object is a dangling pointer to - deallocated memory: memory filled with ``0xDD`` "dead byte" by the debug - hook on memory allocators. The fix is to check the reference count - *before* checking for ``_Py_IsImmortal()``. Patch by Victor Stinner. - -- gh-107265: Deopt opcodes hidden by the executor when base opcode is needed - -- gh-109371: Deopted instructions correctly for tool initialization and - modified the incorrect assertion in instrumentation, when a previous tool - already sets INSTRUCTION events - -- gh-105658: Fix bug where the line trace of an except block ending with a - conditional includes an excess event with the line of the conditional - expression. - -- gh-109219: Fix compiling type param scopes that use a name which is also - free in an inner scope. - -- gh-109351: Fix crash when compiling an invalid AST involving a named - (walrus) expression. - -- gh-109341: Fix crash when compiling an invalid AST involving a - :class:`ast.TypeAlias`. - -- gh-109195: Fix source location for the ``LOAD_*`` instruction preceding a - ``LOAD_SUPER_ATTR`` to load the ``super`` global (or shadowing variable) - so that it encompasses only the name ``super`` and not the following - parentheses. - -- gh-109256: Opcode IDs for specialized opcodes are allocated in their own - range to improve stability of the IDs for the 'real' opcodes. - -- gh-109216: Fix possible memory leak in :opcode:`BUILD_MAP`. - -- gh-109207: Fix a SystemError in ``__repr__`` of symtable entry object. - -- gh-109179: Fix bug where the C traceback display drops notes from - :exc:`SyntaxError`. - -- gh-109118: Disallow nested scopes (lambdas, generator expressions, and - comprehensions) within PEP 695 annotation scopes that are nested within - classes. - -- gh-109156: Add tests for de-instrumenting instructions while keeping the - instrumentation for lines - -- gh-109114: Relax the detection of the error message for invalid lambdas - inside f-strings to not search for arbitrary replacement fields to avoid - false positives. Patch by Pablo Galindo - -- gh-105848: Add a new :opcode:`CALL_KW` opcode, used for calls containing - keyword arguments. Also, fix a possible crash when jumping over method - calls in a debugger. - -- gh-109052: Use the base opcode when comparing code objects to avoid - interference from instrumentation - -- gh-109118: Fix interpreter crash when a NameError is raised inside the - type parameters of a generic class. - -- gh-88943: Improve syntax error for non-ASCII character that follows a - numerical literal. It now points on the invalid non-ASCII character, not - on the valid numerical literal. - -- gh-108976: Fix crash that occurs after de-instrumenting a code object in a - monitoring callback. - -- gh-108732: Make iteration variables of module- and class-scoped - comprehensions visible to pdb and other tools that use ``frame.f_locals`` - again. - -- gh-108959: Fix caret placement for error locations for subscript and - binary operations that involve non-semantic parentheses and spaces. Patch - by Pablo Galindo - -- gh-104584: Fix a crash when running with :envvar:`PYTHONUOPS` or - :option:`-X uops <-X>` enabled and an error occurs during optimization. - -- gh-108727: Define ``tp_dealloc`` for ``CounterOptimizer_Type``. This fixes - a segfault on deallocation. - -- gh-108520: Fix :meth:`multiprocessing.synchronize.SemLock.__setstate__` to - properly initialize - :attr:`multiprocessing.synchronize.SemLock._is_fork_ctx`. This fixes a - regression when passing a SemLock across nested processes. - - Rename :attr:`multiprocessing.synchronize.SemLock.is_fork_ctx` to - :attr:`multiprocessing.synchronize.SemLock._is_fork_ctx` to avoid exposing - it as public API. - -- gh-108654: Restore locals shadowed by an inlined comprehension if the - comprehension raises an exception. - -- gh-108488: Change the initialization of inline cache entries so that the - cache entry for ``JUMP_BACKWARD`` is initialized to zero, instead of the - ``adaptive_counter_warmup()`` value used for all other instructions. This - counter, unique among instructions, counts up from zero. - -- gh-108716: Turn off deep-freezing of code objects. Modules are still - frozen, so that a file system search is not needed for common modules. - -- gh-108614: Add RESUME_CHECK instruction, to avoid having to handle - instrumentation, signals, and contexts switches in the tier 2 execution - engine. - -- gh-108487: Move an assert that would cause a spurious crash in a devious - case that should only trigger deoptimization. - -- gh-106176: Use a ``WeakValueDictionary`` to track the lists containing the - modules each thread is currently importing. This helps avoid a reference - leak from keeping the list around longer than necessary. Weakrefs are used - as GC can't interrupt the cleanup. - -- gh-105481: The regen-opcode build stage was removed and its work is now - done in regen-cases. - -- gh-107901: Fix missing line number on :opcode:`JUMP_BACKWARD` at the end - of a for loop. - -- gh-108113: The :func:`compile` built-in can now accept a new flag, - ``ast.PyCF_OPTIMIZED_AST``, which is similar to ``ast.PyCF_ONLY_AST`` - except that the returned ``AST`` is optimized according to the value of - the ``optimize`` argument. - - :func:`ast.parse` now accepts an optional argument ``optimize`` which is - passed on to the :func:`compile` built-in. This makes it possible to - obtain an optimized ``AST``. - -- gh-107971: Opcode IDs are generated from bytecodes.c instead of being hard - coded in opcode.py. - -- gh-107944: Improve error message for function calls with bad keyword - arguments. Patch by Pablo Galindo - -- gh-108390: Raise an exception when setting a non-local event (``RAISE``, - ``EXCEPTION_HANDLED``, etc.) in ``sys.monitoring.set_local_events``. - - Fixes crash when tracing in recursive calls to Python classes. - -- gh-108035: Remove the ``_PyCFrame`` struct, moving the pointer to the - current interpreter frame back to the threadstate, as it was for 3.10 and - earlier. The ``_PyCFrame`` existed as a performance optimization for - tracing. Since PEP 669 has been implemented, this optimization no longer - applies. - -- gh-91051: Fix abort / segfault when using all eight type watcher slots, on - platforms where ``char`` is signed by default. - -- gh-106581: Fix possible assertion failures and missing instrumentation - events when :envvar:`PYTHONUOPS` or :option:`-X uops <-X>` is enabled. - -- gh-107526: Revert converting ``vars``, ``dir``, ``next``, ``getattr``, and - ``iter`` to argument clinic. - -- gh-84805: Autogenerate signature for :c:macro:`METH_NOARGS` and - :c:macro:`METH_O` extension functions. - -- gh-107758: Make the ``dump_stack()`` routine used by the ``lltrace`` - feature (low-level interpreter debugging) robust against recursion by - ensuring that it never calls a ``__repr__`` method implemented in Python. - Also make the similar output for Tier-2 uops appear on ``stdout`` (instead - of ``stderr``), to match the ``lltrace`` code in ceval.c. - -- gh-107659: Add docstrings for :func:`ctypes.pointer` and - :func:`ctypes.POINTER`. - -- gh-105848: Modify the bytecode so that the actual callable for a - :opcode:`CALL` is at a consistent position on the stack (regardless of - whether or not bound-method-calling optimizations are active). - -- gh-107674: Fixed performance regression in ``sys.settrace``. - -- gh-107724: In pre-release versions of 3.12, up to rc1, the sys.monitoring - callback function for the ``PY_THROW`` event was missing the third, - exception argument. That is now fixed. - -- gh-84436: Skip reference count modifications for many known immortal - objects. - -- gh-107596: Specialize subscripting :class:`str` objects by :class:`int` - indexes. - -- gh-107080: Trace refs builds (``--with-trace-refs``) were crashing when - used with isolated subinterpreters. The problematic global state has been - isolated to each interpreter. Other fixing the crashes, this change does - not affect users. - -- gh-107557: Generate the cases needed for the barebones tier 2 abstract - interpreter for optimization passes in CPython. - -- gh-106608: Make ``_PyUOpExecutorObject`` variable length. - -- gh-100964: Clear generators' exception state after ``return`` to break - reference cycles. - -- gh-107455: Improve error messages when converting an incompatible type to - :class:`ctypes.c_char_p`, :class:`ctypes.c_wchar_p` and - :class:`ctypes.c_void_p`. - -- gh-107263: Increase C recursion limit for functions other than the main - interpreter from 800 to 1500. This should allow functions like - ``list.__repr__`` and ``json.dumps`` to handle all the inputs that they - could prior to 3.12 - -- gh-104584: Fix an issue which caused incorrect inline caches to be read - when running with :envvar:`PYTHONUOPS` or :option:`-X uops <-X>` enabled. - -- gh-104432: Fix potential unaligned memory access on C APIs involving - returned sequences of ``char *`` pointers within the :mod:`grp` and - :mod:`socket` modules. These were revealed using a - ``-fsaniziter=alignment`` build on ARM macOS. Patch by Christopher Chavez. - -- gh-106078: Isolate :mod:`!_decimal` (apply :pep:`687`). Patch by Charlie - Zhao. - -- gh-106898: Add the exception as the third argument to ``PY_UNIND`` - callbacks in ``sys.monitoring``. This makes the ``PY_UNWIND`` callback - consistent with the other exception handling callbacks. - -- gh-106895: Raise a ``ValueError`` when a monitoring callback function - returns ``DISABLE`` for events that cannot be disabled locally. - -- gh-106897: Add a ``RERAISE`` event to ``sys.monitoring``, which occurs - when an exception is reraise, either explicitly by a plain ``raise`` - statement, or implicitly in an ``except`` or ``finally`` block. - -- gh-77377: Ensure that multiprocessing synchronization objects created in a - fork context are not sent to a different process created in a spawn - context. This changes a segfault into an actionable RuntimeError in the - parent process. - -- gh-106931: Statically allocated string objects are now interned globally - instead of per-interpreter. This fixes a situation where such a string - would only be interned in a single interpreter. Normal string objects are - unaffected. - -- gh-104621: Unsupported modules now always fail to be imported. - -- gh-107122: Add :meth:`dbm.ndbm.ndbm.clear` to :mod:`dbm.ndbm`. Patch By - Donghee Na. - -- gh-107122: Add :meth:`dbm.gnu.gdbm.clear` to :mod:`dbm.gnu`. Patch By - Donghee Na. - -- gh-107015: The ASYNC and AWAIT tokens are removed from the Grammar, which - removes the possibility of making ``async`` and ``await`` soft keywords - when using ``feature_version<7`` in :func:`ast.parse`. - -- gh-106917: Fix classmethod-style :func:`super` method calls (i.e., where - the second argument to :func:`super`, or the implied second argument drawn - from ``self/cls`` in the case of zero-arg super, is a type) when the - target of the call is not a classmethod. - -- gh-105699: Python no longer crashes due an infrequent race when - initializing per-interpreter interned strings. The crash would manifest - when the interpreter was finalized. - -- gh-105699: Python no longer crashes due to an infrequent race in setting - ``Py_FileSystemDefaultEncoding`` and ``Py_FileSystemDefaultEncodeErrors`` - (both deprecated), when simultaneously initializing two isolated - subinterpreters. Now they are only set during runtime initialization. - -- gh-106908: Fix various hangs, reference leaks, test failures, and - tracing/introspection bugs when running with :envvar:`PYTHONUOPS` or - :option:`-X uops <-X>` enabled. - -- gh-106092: Fix a segmentation fault caused by a use-after-free bug in - ``frame_dealloc`` when the trashcan delays the deallocation of a - ``PyFrameObject``. - -- gh-106485: Reduce the number of materialized instances dictionaries by - dematerializing them when possible. - -- gh-106719: No longer suppress arbitrary errors in the ``__annotations__`` - getter and setter in the type and module types. - -- gh-106723: Propagate ``frozen_modules`` to multiprocessing spawned process - interpreters. - -- gh-104909: Split :opcode:`LOAD_ATTR_INSTANCE_VALUE` into micro-ops. - -- gh-104909: Split :opcode:`LOAD_GLOBAL` specializations into micro-ops. - -- gh-106597: A new debug structure of offsets has been added to the - ``_PyRuntimeState`` that will help out-of-process debuggers and profilers - to obtain the offsets to relevant interpreter structures in a way that is - agnostic of how Python was compiled and that doesn't require copying the - headers. Patch by Pablo Galindo - -- gh-106487: Allow the *count* argument of :meth:`str.replace` to be a - keyword. Patch by Hugo van Kemenade. - -- gh-96844: Improve error message of :meth:`list.remove`. Patch by Donghee - Na. - -- gh-81283: Compiler now strips indents from docstrings. It reduces ``pyc`` - file size 5% when the module is heavily documented. This change affects to - ``__doc__`` so tools like doctest will be affected. - -- gh-106396: When the format specification of an f-string expression is - empty, the parser now generates an empty :class:`ast.JoinedStr` node for - it instead of an one-element :class:`ast.JoinedStr` with an empty string - :class:`ast.Constant`. - -- gh-100288: Specialize :opcode:`LOAD_ATTR` for non-descriptors on the - class. Adds :opcode:`LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES` and - :opcode:`LOAD_ATTR_NONDESCRIPTOR_NO_DICT`. - -- gh-106008: Fix possible reference leaks when failing to optimize - comparisons with :const:`None` in the bytecode compiler. - -- gh-106145: Make ``end_lineno`` and ``end_col_offset`` required on - ``type_param`` ast nodes. - -- gh-106213: Changed the way that Emscripten call trampolines work for - compatibility with Wasm/JS Promise integration. - -- gh-106182: :func:`sys.getfilesystemencoding` and - :mod:`sys.getfilesystemencodeerrors` now return interned Unicode object. - -- gh-106210: Removed Emscripten import trampoline as it was no longer - necessary for Pyodide. - -- gh-104584: Added a new, experimental, tracing optimizer and interpreter - (a.k.a. "tier 2"). This currently pessimizes, so don't use yet -- this is - infrastructure so we can experiment with optimizing passes. To enable it, - pass ``-Xuops`` or set ``PYTHONUOPS=1``. To get debug output, set - ``PYTHONUOPSDEBUG=N`` where ``N`` is a debug level (0-4, where 0 is no - debug output and 4 is excessively verbose). - -- gh-105775: :opcode:`LOAD_CLOSURE` is now a pseudo-op. - -- gh-105730: Allow any callable other than type objects as the condition - predicate in :meth:`BaseExceptionGroup.split` and - :meth:`BaseExceptionGroup.subgroup`. - -- gh-105979: Fix crash in :func:`!_imp.get_frozen_object` due to improper - exception handling. - -- gh-106003: Add a new :opcode:`TO_BOOL` instruction, which performs boolean - conversions for :opcode:`POP_JUMP_IF_TRUE`, :opcode:`POP_JUMP_IF_FALSE`, - and :opcode:`UNARY_NOT` (which all expect exact :class:`bool` values now). - Also, modify the oparg of :opcode:`COMPARE_OP` to include an optional - "boolean conversion" flag. - -- gh-98931: Ensure custom :exc:`SyntaxError` error messages are raised for - invalid imports with multiple targets. Patch by Pablo Galindo - -- gh-105724: Improve ``assert`` error messages by providing exact error - range. - -- gh-105908: Fixed bug where :gh:`99111` breaks future import - ``barry_as_FLUFL`` in the Python REPL. - -- gh-105840: Fix possible crashes when specializing function calls with too - many ``__defaults__``. - -- gh-105831: Fix an f-string bug, where using a debug expression (the ``=`` - sign) that appears in the last line of a file results to the debug buffer - that holds the expression text being one character too small. - -- gh-105800: Correctly issue :exc:`SyntaxWarning` in f-strings if invalid - sequences are used. Patch by Pablo Galindo - -- gh-105340: Include the comprehension iteration variable in ``locals()`` - inside a module- or class-scope comprehension. - -- gh-105331: Raise :exc:`ValueError` if the ``delay`` argument to - :func:`asyncio.sleep` is a NaN (matching :func:`time.sleep`). - -- gh-105587: The runtime can't guarantee that immortal objects will not be - mutated by Extensions. Thus, this modifies _PyStaticObject_CheckRefcnt to - warn instead of asserting. - -- gh-105564: Don't include artificil newlines in the ``line`` attribute of - tokens in the APIs of the :mod:`tokenize` module. Patch by Pablo Galindo - -- gh-105549: Tokenize separately ``NUMBER`` and ``NAME`` tokens that are not - ambiguous. Patch by Pablo Galindo. - -- gh-105588: Fix an issue that could result in crashes when compiling - malformed :mod:`ast` nodes. - -- gh-100987: Allow objects other than code objects as the "executable" in - internal frames. In the long term, this can help tools like Cython and - PySpy interact more efficiently. In the shorter term, it allows us to - perform some optimizations more simply. - -- gh-105375: Fix bugs in the :mod:`builtins` module where exceptions could - end up being overwritten. - -- gh-105375: Fix bug in the compiler where an exception could end up being - overwritten. - -- gh-105375: Improve error handling in :c:func:`PyUnicode_BuildEncodingMap` - where an exception could end up being overwritten. - -- gh-105486: Change the repr of ``ParamSpec`` list of args in - ``types.GenericAlias``. - -- gh-105678: Break the ``MAKE_FUNCTION`` instruction into two parts, - ``MAKE_FUNCTION`` which makes the function and ``SET_FUNCTION_ATTRIBUTE`` - which sets the attributes on the function. This makes the stack effect of - ``MAKE_FUNCTION`` regular to ease optimization and code generation. - -- gh-105435: Fix spurious newline character if file ends on a comment - without a newline. Patch by Pablo Galindo - -- gh-105390: Correctly raise :exc:`tokenize.TokenError` exceptions instead - of :exc:`SyntaxError` for tokenize errors such as incomplete input. Patch - by Pablo Galindo - -- gh-105259: Don't include newline character for trailing ``NEWLINE`` tokens - emitted in the :mod:`tokenize` module. Patch by Pablo Galindo - -- gh-104635: Eliminate redundant :opcode:`STORE_FAST` instructions in the - compiler. Patch by Donghee Na and Carl Meyer. - -- gh-105324: Fix the main function of the :mod:`tokenize` module when - reading from ``sys.stdin``. Patch by Pablo Galindo - -- gh-33092: Simplify and speed up interpreter for f-strings. Removes - ``FORMAT_VALUE`` opcode. Add ``CONVERT_VALUE``, ``FORMAT_SIMPLE`` and - ``FORMAT_WITH_SPEC`` opcode. Compiler emits more efficient sequence for - each format expression. - -- gh-105229: Remove remaining two-codeunit superinstructions. All remaining - superinstructions only take a single codeunit, simplifying instrumentation - and quickening. - -- gh-105235: Prevent out-of-bounds memory access during ``mmap.find()`` - calls. - -- gh-98963: Restore the ability for a subclass of :class:`property` to - define ``__slots__`` or otherwise be dict-less by ignoring failures to set - a docstring on such a class. This behavior had regressed in 3.12beta1. - An :exc:`AttributeError` where there had not previously been one was - disruptive to existing code. - -- gh-104812: The "pending call" machinery now works for all interpreters, - not just the main interpreter, and runs in all threads, not just the main - thread. Some calls are still only done in the main thread, ergo in the - main interpreter. This change does not affect signal handling nor the - existing public C-API (``Py_AddPendingCall()``), which both still only - target the main thread. The new functionality is meant strictly for - internal use for now, since consequences of its use are not well - understood yet outside some very restricted cases. This change brings the - capability in line with the intention when the state was made - per-interpreter several years ago. - -- gh-105194: Do not escape with backslashes f-string format specifiers. - Patch by Pablo Galindo - -- gh-105229: Replace some dynamic superinstructions with single instruction - equivalents. - -- gh-105162: Fixed bug in generator.close()/throw() where an inner iterator - would be ignored when the outer iterator was instrumented. - -- gh-105164: Ensure annotations are set up correctly if the only annotation - in a block is within a :keyword:`match` block. Patch by Jelle Zijlstra. - -- gh-105148: Make ``_PyASTOptimizeState`` internal to ast_opt.c. Make - ``_PyAST_Optimize`` take two integers instead of a pointer to this struct. - This avoids the need to include pycore_compile.h in ast_opt.c. - -- gh-104799: Attributes of :mod:`ast` nodes that are lists now default to - the empty list if omitted. This means that some code that previously - raised :exc:`TypeError` when the AST node was used will now proceed with - the empty list instead. Patch by Jelle Zijlstra. - -- gh-105111: Remove the old trashcan macros ``Py_TRASHCAN_SAFE_BEGIN`` and - ``Py_TRASHCAN_SAFE_END``. They should be replaced by the new macros - ``Py_TRASHCAN_BEGIN`` and ``Py_TRASHCAN_END``. - -- gh-105035: Fix :func:`super` calls on types with custom - :c:member:`~PyTypeObject.tp_getattro` implementation (e.g. meta-types.) - -- gh-105017: Show CRLF lines in the tokenize string attribute in both NL and - NEWLINE tokens. Patch by Marta Gómez. - -- gh-105013: Fix handling of multiline parenthesized lambdas in - :func:`inspect.getsource`. Patch by Pablo Galindo - -- gh-105017: Do not include an additional final ``NL`` token when parsing - files having CRLF lines. Patch by Marta Gómez. - -- gh-104976: Ensure that trailing ``DEDENT`` :class:`tokenize.TokenInfo` - objects emitted by the :mod:`tokenize` module are reported as in Python - 3.11. Patch by Pablo Galindo - -- gh-104972: Ensure that the ``line`` attribute in - :class:`tokenize.TokenInfo` objects in the :mod:`tokenize` module are - always correct. Patch by Pablo Galindo - -- gh-104955: Fix signature for the new :meth:`~object.__release_buffer__` - slot. Patch by Jelle Zijlstra. - -- gh-104690: Starting new threads and process creation through - :func:`os.fork` during interpreter shutdown (such as from :mod:`atexit` - handlers) is no longer supported. It can lead to race condition between - the main Python runtime thread freeing thread states while internal - :mod:`threading` routines are trying to allocate and use the state of just - created threads. Or forked children trying to use the mid-shutdown runtime - and thread state in the child process. - -- gh-104879: Fix crash when accessing the ``__module__`` attribute of type - aliases defined outside a module. Patch by Jelle Zijlstra. - -- gh-104825: Tokens emitted by the :mod:`tokenize` module do not include an - implicit ``\n`` character in the ``line`` attribute anymore. Patch by - Pablo Galindo - -- gh-104770: If a generator returns a value upon being closed, the value is - now returned by :meth:`generator.close`. - -- gh-89091: Raise :exc:`RuntimeWarning` for unawaited async generator - methods like :meth:`~agen.asend`, :meth:`~agen.athrow` and - :meth:`~agen.aclose`. Patch by Kumar Aditya. - -- gh-96663: Add a better, more introspect-able error message when setting - attributes on classes without a ``__dict__`` and no slot member for the - attribute. - -- gh-93627: Update the Python pickle module implementation to match the C - implementation of the pickle module. For objects setting reduction methods - like :meth:`~object.__reduce_ex__` or :meth:`~object.__reduce__` to - ``None``, pickling will result in a :exc:`TypeError`. - -- gh-101006: Improve error handling when read :mod:`marshal` data. - -- gh-91095: Specializes calls to most Python classes. Specifically, any - class that inherits from ``object``, or another Python class, and does not - override ``__new__``. - - The specialized instruction does the following: - - 1. Creates the object (by calling ``object.__new__``) - 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``) - 3. Pushes the frame for ``__init__`` to the frame stack - - Speeds up the instantiation of most Python classes. - -Library -------- - -- gh-110786: :mod:`sysconfig`'s CLI now ignores :exc:`BrokenPipeError`, - making it exit normally if its output is being piped and the pipe closes. - -- gh-103480: The :mod:`sysconfig` module is now a package, instead of a - single-file module. - -- gh-110733: Micro-optimization: Avoid calling ``min()``, ``max()`` in - :meth:`BaseEventLoop._run_once`. - -- gh-94597: Added :class:`asyncio.EventLoop` for use with the - :func:`asyncio.run` *loop_factory* kwarg to avoid calling the asyncio - policy system. - -- gh-110682: :func:`runtime-checkable protocols <typing.runtime_checkable>` - used to consider ``__match_args__`` a protocol member in - ``__instancecheck__`` if it was present on the protocol. Now, this - attribute is ignored if it is present. - -- gh-110488: Fix a couple of issues in :meth:`pathlib.PurePath.with_name`: a - single dot was incorrectly considered a valid name, and in - :class:`PureWindowsPath`, a name with an NTFS alternate data stream, like - ``a:b``, was incorrectly considered invalid. - -- gh-110590: Fix a bug in :meth:`!_sre.compile` where :exc:`TypeError` would - be overwritten by :exc:`OverflowError` when the *code* argument was a list - of non-ints. - -- gh-65052: Prevent :mod:`pdb` from crashing when trying to display - undisplayable objects - -- gh-110519: Deprecation warning about non-integer number in :mod:`gettext` - now always refers to the line in the user code where gettext function or - method is used. Previously it could refer to a line in ``gettext`` code. - -- gh-89902: Deprecate non-standard format specifier "N" for - :class:`decimal.Decimal`. It was not documented and only supported in the - C implementation. - -- gh-110378: :func:`~contextlib.contextmanager` and - :func:`~contextlib.asynccontextmanager` context managers now close an - invalid underlying generator object that yields more then one value. - -- gh-106670: In :mod:`pdb`, set convenience variable ``$_exception`` for - post mortem debugging. - -- gh-110365: Fix :func:`termios.tcsetattr` bug that was overwriting existing - errors during parsing integers from ``term`` list. - -- gh-109653: Slightly improve the import time of several standard-library - modules by deferring imports of :mod:`warnings` within those modules. - Patch by Alex Waygood. - -- gh-110273: :func:`dataclasses.replace` now raises TypeError instead of - ValueError if specify keyword argument for a field declared with - init=False or miss keyword argument for required InitVar field. - -- gh-110249: Add ``--inline-caches`` flag to ``dis`` command line. - -- gh-109653: Fix a Python 3.12 regression in the import time of - :mod:`random`. Patch by Alex Waygood. - -- gh-110222: Add support of struct sequence objects in :func:`copy.replace`. - Patched by Xuehai Pan. - -- gh-109649: :mod:`multiprocessing`, :mod:`concurrent.futures`, - :mod:`compileall`: Replace :func:`os.cpu_count` with - :func:`os.process_cpu_count` to select the default number of worker - threads and processes. Get the CPU affinity if supported. Patch by Victor - Stinner. - -- gh-110150: Fix base case handling in statistics.quantiles. Now allows a - single data point. - -- gh-110036: On Windows, multiprocessing ``Popen.terminate()`` now catches - :exc:`PermissionError` and get the process exit code. If the process is - still running, raise again the :exc:`PermissionError`. Otherwise, the - process terminated as expected: store its exit code. Patch by Victor - Stinner. - -- gh-110038: Fixed an issue that caused :meth:`KqueueSelector.select` to not - return all the ready events in some cases when a file descriptor is - registered for both read and write. - -- gh-110045: Update the :mod:`symtable` module to support the new scopes - introduced by :pep:`695`. - -- gh-88402: Add new variables to :py:meth:`sysconfig.get_config_vars` on - Windows: ``LIBRARY``, ``LDLIBRARY``, ``LIBDIR``, ``SOABI``, and - ``Py_NOGIL``. - -- gh-109631: :mod:`re` functions such as :func:`re.findall`, - :func:`re.split`, :func:`re.search` and :func:`re.sub` which perform short - repeated matches can now be interrupted by user. - -- gh-109653: Reduce the import time of :mod:`email.utils` by around 43%. - This results in the import time of :mod:`email.message` falling by around - 18%, which in turn reduces the import time of :mod:`importlib.metadata` by - around 6%. Patch by Alex Waygood. - -- gh-109818: Fix :func:`reprlib.recursive_repr` not copying - ``__type_params__`` from decorated function. - -- gh-109047: :mod:`concurrent.futures`: The *executor manager thread* now - catches exceptions when adding an item to the *call queue*. During Python - finalization, creating a new thread can now raise :exc:`RuntimeError`. - Catch the exception and call ``terminate_broken()`` in this case. Patch by - Victor Stinner. - -- gh-109782: Ensure the signature of :func:`os.path.isdir` is identical on - all platforms. Patch by Amin Alaee. - -- gh-109653: Improve import time of :mod:`functools` by around 13%. Patch by - Alex Waygood. - -- gh-109590: :func:`shutil.which` will prefer files with an extension in - ``PATHEXT`` if the given mode includes ``os.X_OK`` on win32. If no - ``PATHEXT`` match is found, a file without an extension in ``PATHEXT`` can - be returned. This change will have :func:`shutil.which` act more similarly - to previous behavior in Python 3.11. - -- gh-109653: Reduce the import time of :mod:`enum` by over 50%. Patch by - Alex Waygood. - -- gh-109593: Avoid deadlocking on a reentrant call to the multiprocessing - resource tracker. Such a reentrant call, though unlikely, can happen if a - GC pass invokes the finalizer for a multiprocessing object such as - SemLock. - -- gh-109653: Reduce the import time of :mod:`typing` by around a third. - Patch by Alex Waygood. - -- gh-109649: Add :func:`os.process_cpu_count` function to get the number of - logical CPUs usable by the calling thread of the current process. Patch by - Victor Stinner. - -- gh-74481: Add ``set_error_mode`` related constants in ``msvcrt`` module in - Python debug build. - -- gh-109613: Fix :func:`os.stat` and :meth:`os.DirEntry.stat`: check for - exceptions. Previously, on Python built in debug mode, these functions - could trigger a fatal Python error (and abort the process) when a function - succeeded with an exception set. Patch by Victor Stinner. - -- gh-109599: Expose the type of PyCapsule objects as ``types.CapsuleType``. - -- gh-109109: You can now get the raw TLS certificate chains from TLS - connections via :meth:`ssl.SSLSocket.get_verified_chain` and - :meth:`ssl.SSLSocket.get_unverified_chain` methods. - - Contributed by Mateusz Nowak. - -- gh-109559: Update :mod:`unicodedata` database to Unicode 15.1.0. - -- gh-109543: Remove unnecessary :func:`hasattr` check during - :data:`typing.TypedDict` creation. - -- gh-109495: Remove unnecessary extra ``__slots__`` in - :class:`~datetime.datetime`\'s pure python implementation to reduce memory - size, as they are defined in the superclass. Patch by James Hilton-Balfe - -- gh-109461: :mod:`logging`: Use a context manager for lock acquisition. - -- gh-109096: :class:`http.server.CGIHTTPRequestHandler` has been deprecated - for removal in 3.15. Its design is old and the web world has long since - moved beyond CGI. - -- gh-109409: Fix error when it was possible to inherit a frozen dataclass - from multiple parents some of which were possibly not frozen. - -- gh-109375: The :mod:`pdb` ``alias`` command now prevents registering - aliases without arguments. - -- gh-109319: Deprecate the ``dis.HAVE_ARGUMENT`` field in favour of - ``dis.hasarg``. - -- gh-107219: Fix a race condition in ``concurrent.futures``. When a process - in the process pool was terminated abruptly (while the future was running - or pending), close the connection write end. If the call queue is blocked - on sending bytes to a worker process, closing the connection write end - interrupts the send, so the queue can be closed. Patch by Victor Stinner. - -- gh-66143: The :class:`codecs.CodecInfo` object has been made copyable and - pickleable. Patched by Robert Lehmann and Furkan Onder. - -- gh-109187: :meth:`pathlib.Path.resolve` now treats symlink loops like - other errors: in strict mode, :exc:`OSError` is raised, and in non-strict - mode, no exception is raised. - -- gh-50644: Attempts to pickle or create a shallow or deep copy of - :mod:`codecs` streams now raise a TypeError. Previously, copying failed - with a RecursionError, while pickling produced wrong results that - eventually caused unpickling to fail with a RecursionError. - -- gh-109174: Add support of :class:`types.SimpleNamespace` in - :func:`copy.replace`. - -- gh-109164: :mod:`pdb`: Replace :mod:`getopt` with :mod:`argparse` for - parsing command line arguments. - -- gh-109151: Enable ``readline`` editing features in the :ref:`sqlite3 - command-line interface <sqlite3-cli>` (``python -m sqlite3``). - -- gh-108987: Fix :func:`_thread.start_new_thread` race condition. If a - thread is created during Python finalization, the newly spawned thread now - exits immediately instead of trying to access freed memory and lead to a - crash. Patch by Victor Stinner. - -- gh-108682: Enum: require ``names=()`` or ``type=...`` to create an empty - enum using the functional syntax. - -- gh-109033: Exceptions raised by os.utime builtin function now include the - related filename - -- gh-108843: Fix an issue in :func:`ast.unparse` when unparsing f-strings - containing many quote types. - -- gh-108469: :func:`ast.unparse` now supports new :term:`f-string` syntax - introduced in Python 3.12. Note that the :term:`f-string` quotes are - reselected for simplicity under the new syntax. (Patch by Steven Sun) - -- gh-108751: Add :func:`copy.replace` function which allows to create a - modified copy of an object. It supports named tuples, dataclasses, and - many other objects. - -- gh-108682: Enum: raise :exc:`TypeError` if ``super().__new__()`` is called - from a custom ``__new__``. - -- gh-108278: Deprecate passing the callback callable by keyword for the - following :class:`sqlite3.Connection` APIs: - - * :meth:`~sqlite3.Connection.set_authorizer` - * :meth:`~sqlite3.Connection.set_progress_handler` - * :meth:`~sqlite3.Connection.set_trace_callback` - - The affected parameters will become positional-only in Python 3.15. - - Patch by Erlend E. Aasland. - -- gh-105829: Fix concurrent.futures.ProcessPoolExecutor deadlock - -- gh-108295: Fix crashes related to use of weakrefs on - :data:`typing.TypeVar`. - -- gh-108463: Make expressions/statements work as expected in pdb - -- gh-108277: Add :func:`os.timerfd_create`, :func:`os.timerfd_settime`, - :func:`os.timerfd_gettime`, :func:`os.timerfd_settime_ns`, and - :func:`os.timerfd_gettime_ns` to provide a low level interface for Linux's - timer notification file descriptor. - -- gh-107811: :mod:`tarfile`: extraction of members with overly large UID or - GID (e.g. on an OS with 32-bit :c:type:`!id_t`) now fails in the same way - as failing to set the ID. - -- gh-64662: Fix support for virtual tables in - :meth:`sqlite3.Connection.iterdump`. Patch by Aviv Palivoda. - -- gh-108111: Fix a regression introduced in GH-101251 for 3.12, resulting in - an incorrect offset calculation in :meth:`gzip.GzipFile.seek`. - -- gh-108294: :func:`time.sleep` now raises an auditing event. - -- gh-108278: Deprecate passing name, number of arguments, and the callable - as keyword arguments, for the following :class:`sqlite3.Connection` APIs: - - * :meth:`~sqlite3.Connection.create_function` - * :meth:`~sqlite3.Connection.create_aggregate` - - The affected parameters will become positional-only in Python 3.15. - - Patch by Erlend E. Aasland. - -- gh-108322: Speed-up NormalDist.samples() by using the inverse CDF method - instead of calling random.gauss(). - -- gh-83417: Add the ability for venv to create a ``.gitignore`` file which - causes the created environment to be ignored by Git. It is on by default - when venv is called via its CLI. - -- gh-105736: Harmonized the pure Python version of - :class:`~collections.OrderedDict` with the C version. Now, both versions - set up their internal state in ``__new__``. Formerly, the pure Python - version did the set up in ``__init__``. - -- gh-108083: Fix bugs in the constructor of :mod:`sqlite3.Connection` and - :meth:`sqlite3.Connection.close` where exceptions could be leaked. Patch - by Erlend E. Aasland. - -- gh-107932: Fix ``dis`` module to properly report and display bytecode that - do not have source lines. - -- gh-105539: :mod:`sqlite3` now emits an :exc:`ResourceWarning` if a - :class:`sqlite3.Connection` object is not :meth:`closed - <sqlite3.connection.close>` explicitly. Patch by Erlend E. Aasland. - -- gh-107995: The ``__module__`` attribute on instances of - :class:`functools.cached_property` is now set to the name of the module in - which the cached_property is defined, rather than "functools". This means - that doctests in ``cached_property`` docstrings are now properly collected - by the :mod:`doctest` module. Patch by Tyler Smart. - -- gh-107963: Fix :func:`multiprocessing.set_forkserver_preload` to check the - given list of modules names. Patch by Donghee Na. - -- gh-106242: Fixes :func:`os.path.normpath` to handle embedded null - characters without truncating the path. - -- gh-81555: :mod:`xml.dom.minidom` now only quotes ``"`` in attributes. - -- gh-50002: :mod:`xml.dom.minidom` now preserves whitespaces in attributes. - -- gh-93057: Passing more than one positional argument to - :func:`sqlite3.connect` and the :class:`sqlite3.Connection` constructor is - deprecated. The remaining parameters will become keyword-only in Python - 3.15. Patch by Erlend E. Aasland. - -- gh-76913: Add *merge_extra* parameter/feature to - :class:`logging.LoggerAdapter` - -- gh-107913: Fix possible losses of ``errno`` and ``winerror`` values in - :exc:`OSError` exceptions if they were cleared or modified by the cleanup - code before creating the exception object. - -- gh-107845: :func:`tarfile.data_filter` now takes the location of symlinks - into account when determining their target, so it will no longer reject - some valid tarballs with ``LinkOutsideDestinationError``. - -- gh-107812: Extend socket's netlink support to the FreeBSD platform. - -- gh-107805: Fix signatures of module-level generated functions in - :mod:`turtle`. - -- gh-107782: :mod:`pydoc` is now able to show signatures which are not - representable in Python, e.g. for ``getattr`` and ``dict.pop``. - -- gh-56166: Deprecate passing optional arguments *maxsplit*, *count* and - *flags* in module-level functions :func:`re.split`, :func:`re.sub` and - :func:`re.subn` as positional. They should only be passed by keyword. - -- gh-107710: Speed up :func:`logging.getHandlerNames`. - -- gh-107715: Fix :meth:`doctest.DocTestFinder.find` in presence of class - names with special characters. Patch by Gertjan van Zwieten. - -- gh-100814: Passing a callable object as an option value to a Tkinter image - now raises the expected TclError instead of an AttributeError. - -- gh-72684: Add :mod:`tkinter` widget methods: :meth:`!tk_busy_hold`, - :meth:`!tk_busy_configure`, :meth:`!tk_busy_cget`, - :meth:`!tk_busy_forget`, :meth:`!tk_busy_current`, and - :meth:`!tk_busy_status`. - -- gh-106684: Raise :exc:`ResourceWarning` when :class:`asyncio.StreamWriter` - is not closed leading to memory leaks. Patch by Kumar Aditya. - -- gh-107465: Add :meth:`pathlib.Path.from_uri` classmethod. - -- gh-107077: Seems that in some conditions, OpenSSL will return - ``SSL_ERROR_SYSCALL`` instead of ``SSL_ERROR_SSL`` when a certification - verification has failed, but the error parameters will still contain - ``ERR_LIB_SSL`` and ``SSL_R_CERTIFICATE_VERIFY_FAILED``. We are now - detecting this situation and raising the appropriate - ``ssl.SSLCertVerificationError``. Patch by Pablo Galindo - -- gh-107576: Fix :func:`types.get_original_bases` to only return - :attr:`!__orig_bases__` if it is present on ``cls`` directly. Patch by - James Hilton-Balfe. - -- gh-105481: Remove ``opcode.is_pseudo``, ``opcode.MIN_PSEUDO_OPCODE`` and - ``opcode.MAX_PSEUDO_OPCODE``, which were added in 3.12, were never - documented and were not intended to be used externally. - -- gh-105481: :data:`!opcode.ENABLE_SPECIALIZATION` (which was added in 3.12 - but never documented or intended for external usage) is moved to - :data:`!_opcode.ENABLE_SPECIALIZATION` where tests can access it. - -- gh-107396: tarfiles; Fixed use before assignment of self.exception for - gzip decompression - -- gh-107409: Set :attr:`!__wrapped__` attribute in - :func:`reprlib.recursive_repr`. - -- gh-107406: Implement new :meth:`__repr__` method for - :class:`struct.Struct`. Now it returns ``Struct(<format repr>)``. - -- gh-107369: Optimize :func:`textwrap.indent`. It is ~30% faster for large - input. Patch by Inada Naoki. - -- gh-78722: Fix issue where :meth:`pathlib.Path.iterdir` did not raise - :exc:`OSError` until iterated. - -- gh-105578: Deprecate :class:`typing.AnyStr` in favor of the new Type - Parameter syntax. See PEP 695. - -- gh-62519: Make :func:`gettext.pgettext` search plural definitions when - translation is not found. - -- gh-107089: Shelves opened with :func:`shelve.open` have a much faster - :meth:`clear` method. Patch by James Cave. - -- gh-82500: Fix overflow on 32-bit systems with :mod:`asyncio` - :func:`os.sendfile` implementation. - -- gh-83006: Document behavior of :func:`shutil.disk_usage` for non-mounted - filesystems on Unix. - -- gh-65495: Use lowercase ``mail from`` and ``rcpt to`` in - :class:`smptlib.SMTP`. - -- gh-106186: Do not report ``MultipartInvariantViolationDefect`` defect when - the :class:`email.parser.Parser` class is used to parse emails with - ``headersonly=True``. - -- gh-105002: Fix invalid result from :meth:`PurePath.relative_to` method - when attempting to walk a "``..``" segment in *other* with *walk_up* - enabled. A :exc:`ValueError` exception is now raised in this case. - -- gh-106739: Add the ``rtype_cache`` to the warning message (as an addition - to the type of leaked objects and the number of leaked objects already - included in the message) to make debugging leaked objects easier when the - multiprocessing resource tracker process finds leaked objects at shutdown. - This helps more quickly identify what was leaked and/or why the leaked - object was not properly cleaned up. - -- gh-106751: Optimize :meth:`SelectSelector.select` for many iteration case. - Patch By Donghee Na. - -- gh-106751: Optimize :meth:`!_PollLikeSelector.select` for many iteration - case. - -- gh-106751: Optimize :meth:`KqueueSelector.select` for many iteration case. - Patch By Donghee Na. - -- gh-106831: Fix potential missing ``NULL`` check of ``d2i_SSL_SESSION`` - result in ``_ssl.c``. - -- gh-105481: The various opcode lists in the :mod:`dis` module are now - generated from bytecodes.c instead of explicitly constructed in opcode.py. - -- gh-106727: Make :func:`inspect.getsource` smarter for class for same name - definitions - -- gh-106789: Remove import of :mod:`pprint` from :mod:`sysconfig`. - -- gh-105726: Added ``__slots__`` to - :class:`contextlib.AbstractContextManager` and - :class:`contextlib.AbstractAsyncContextManager` so that child classes can - use ``__slots__``. - -- gh-106774: Update the bundled copy of pip to version 23.2.1. - -- gh-106751: :mod:`selectors`: Optimize ``EpollSelector.select()`` code by - moving some code outside of the loop. - -- gh-106752: Fixed several bugs in zipfile.Path, including: in - :meth:`zipfile.Path.match`, Windows separators are no longer honored (and - never were meant to be); Fixed ``name``/``suffix``/``suffixes``/``stem`` - operations when no filename is present and the Path is not at the root of - the zipfile; Reworked glob for performance and more correct matching - behavior. - -- gh-105293: Remove call to ``SSL_CTX_set_session_id_context`` during client - side context creation in the :mod:`ssl` module. - -- gh-106734: Disable tab completion in multiline mode of :mod:`pdb` - -- gh-105481: Expose opcode metadata through :mod:`!_opcode`. - -- gh-106670: Add the new ``exceptions`` command to the Pdb debugger. It - makes it possible to move between chained exceptions when using post - mortem debugging. - -- gh-106602: Add __copy__ and __deepcopy__ in :mod:`enum` - -- gh-106664: :mod:`selectors`: Add ``_SelectorMapping.get()`` method and - optimize ``_SelectorMapping.__getitem__()``. - -- gh-106628: Speed up parsing of emails by about 20% by not compiling a new - regular expression for every single email. - -- gh-89427: Set the environment variable ``VIRTUAL_ENV_PROMPT`` at - :mod:`venv` activation, even when ``VIRTUAL_ENV_DISABLE_PROMPT`` is set. - -- gh-106530: Revert a change to :func:`colorsys.rgb_to_hls` that caused - division by zero for certain almost-white inputs. Patch by Terry Jan - Reedy. - -- gh-106584: Fix exit code for ``unittest`` if all tests are skipped. Patch - by Egor Eliseev. - -- gh-106566: Optimize ``(?!)`` (pattern which always fails) in regular - expressions. - -- gh-106554: :mod:`selectors`: Reduce Selector overhead by using a - ``dict.get()`` to lookup file descriptors. - -- gh-106558: Remove ref cycle in callers of - :func:`~multiprocessing.managers.convert_to_error` by deleting ``result`` - from scope in a ``finally`` block. - -- gh-100502: Add :attr:`pathlib.PurePath.pathmod` class attribute that - stores the implementation of :mod:`os.path` used for low-level path - operations: either ``posixpath`` or ``ntpath``. - -- gh-106527: Reduce overhead to add and remove :mod:`asyncio` readers and - writers. - -- gh-106524: Fix crash in :func:`!_sre.template` with templates containing - invalid group indices. - -- gh-106531: Removed ``_legacy`` and the names it provided from - ``importlib.resources``: ``Resource``, ``contents``, ``is_resource``, - ``open_binary``, ``open_text``, ``path``, ``read_binary``, and - ``read_text``. - -- gh-106052: :mod:`re` module: fix the matching of possessive quantifiers in - the case of a subpattern containing backtracking. - -- gh-106510: Improve debug output for atomic groups in regular expressions. - -- gh-106503: Fix ref cycle in :class:`!asyncio._SelectorSocketTransport` by - removing ``_write_ready`` in ``close``. - -- gh-105497: Fix flag mask inversion when unnamed flags exist. - -- gh-90876: Prevent :mod:`multiprocessing.spawn` from failing to *import* in - environments where ``sys.executable`` is ``None``. This regressed in 3.11 - with the addition of support for path-like objects in multiprocessing. - -- gh-106403: Instances of :class:`typing.TypeVar`, - :class:`typing.ParamSpec`, :class:`typing.ParamSpecArgs`, - :class:`typing.ParamSpecKwargs`, and :class:`typing.TypeVarTuple` once - again support weak references, fixing a regression introduced in Python - 3.12.0 beta 1. Patch by Jelle Zijlstra. - -- gh-89812: Add private ``pathlib._PathBase`` class, which provides - experimental support for virtual filesystems, and may be made public in a - future version of Python. - -- gh-106292: Check for an instance-dict cached value in the :meth:`__get__` - method of :func:`functools.cached_property`. This better matches the - pre-3.12 behavior and improves compatibility for users subclassing - :func:`functools.cached_property` and adding a :meth:`__set__` method. - -- gh-106350: Detect possible memory allocation failure in the libtommath - function :c:func:`mp_init` used by the ``_tkinter`` module. - -- gh-106330: Fix incorrect matching of empty paths in - :meth:`pathlib.PurePath.match`. This bug was introduced in Python 3.12.0 - beta 1. - -- gh-106309: Deprecate :func:`typing.no_type_check_decorator`. No major type - checker ever added support for this decorator. Patch by Alex Waygood. - -- gh-102541: Make :func:`pydoc.doc` catch bad module :exc:`ImportError` when - output stream is not ``None``. - -- gh-106263: Fix crash when calling ``repr`` with a manually constructed - SignalDict object. Patch by Charlie Zhao. - -- gh-106236: Replace ``assert`` statements with ``raise RuntimeError`` in - :mod:`threading`, so that ``_DummyThread`` cannot be joined even with - ``-OO``. - -- gh-106238: Fix rare concurrency bug in lock acquisition by the logging - package. - -- gh-106152: Added PY_THROW event hook for :mod:`cProfile` for generators - -- gh-106075: Added ``asyncio.taskgroups.__all__`` to ``asyncio.__all__`` for - export in star imports. - -- gh-104527: Zipapp will now skip over appending an archive to itself. - -- gh-106046: Improve the error message from :func:`os.fspath` if called on - an object where ``__fspath__`` is set to ``None``. Patch by Alex Waygood. - -- gh-105987: Fix crash due to improper reference counting in :mod:`asyncio` - eager task factory internal routines. - -- gh-105974: Fix bug where a :class:`typing.Protocol` class that had one or - more non-callable members would raise :exc:`TypeError` when - :func:`issubclass` was called against it, even if it defined a custom - ``__subclasshook__`` method. The behaviour in Python 3.11 and lower -- - which has now been restored -- was not to raise :exc:`TypeError` in these - situations if a custom ``__subclasshook__`` method was defined. Patch by - Alex Waygood. - -- gh-96145: Reverted addition of ``json.AttrDict``. - -- gh-89812: Add :exc:`pathlib.UnsupportedOperation`, which is raised instead - of :exc:`NotImplementedError` when a path operation isn't supported. - -- gh-105808: Fix a regression introduced in GH-101251 for 3.12, causing - :meth:`gzip.GzipFile.flush` to not flush the compressor (nor pass along - the ``zip_mode`` argument). - -- gh-105481: :func:`~dis.stack_effect` no longer raises an exception if an - ``oparg`` is provided for an ``opcode`` that doesn't use its arg, or when - it is not provided for an ``opcode`` that does use it. In the latter case, - the stack effect is returned for ``oparg=0``. - -- gh-104799: Enable :func:`ast.unparse` to unparse function and class - definitions created without the new ``type_params`` field from :pep:`695`. - Patch by Jelle Zijlstra. - -- gh-105793: Add *follow_symlinks* keyword-only argument to - :meth:`pathlib.Path.is_dir` and :meth:`~pathlib.Path.is_file`, defaulting - to ``True``. - -- gh-105570: Deprecate two methods of creating :class:`typing.TypedDict` - classes with 0 fields using the functional syntax: ``TD = - TypedDict("TD")`` and ``TD = TypedDict("TD", None)``. Both will be - disallowed in Python 3.15. To create a ``TypedDict`` class with 0 fields, - either use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``. - -- gh-105745: Fix ``webbrowser.Konqueror.open`` method. - -- gh-105733: :mod:`ctypes`: Deprecate undocumented - :func:`!ctypes.SetPointerType` and :func:`!ctypes.ARRAY` functions. Patch - by Victor Stinner. - -- gh-105687: Remove deprecated ``re.template``, ``re.T``, ``re.TEMPLATE``, - ``sre_constans.SRE_FLAG_TEMPLATE``. - -- gh-105684: Supporting :meth:`asyncio.Task.set_name` is now mandatory for - third party task implementations. The undocumented :func:`!_set_task_name` - function (deprecated since 3.8) has been removed. Patch by Kumar Aditya. - -- gh-105375: Fix a bug in :c:func:`!_Unpickler_SetInputStream` where an - exception could end up being overwritten in case of failure. - -- gh-105626: Change the default return value of - :meth:`http.client.HTTPConnection.get_proxy_response_headers` to be - ``None`` and not ``{}``. - -- gh-105375: Fix bugs in :mod:`sys` where exceptions could end up being - overwritten because of deferred error handling. - -- gh-105605: Harden :mod:`pyexpat` error handling during module - initialisation to prevent exceptions from possibly being overwritten, and - objects from being dereferenced twice. - -- gh-105375: Fix bug in :mod:`decimal` where an exception could end up being - overwritten. - -- gh-105375: Fix bugs in :mod:`!_datetime` where exceptions could be - overwritten in case of module initialisation failure. - -- gh-105375: Fix bugs in :mod:`!_ssl` initialisation which could lead to - leaked references and overwritten exceptions. - -- gh-105375: Fix a bug in :class:`array.array` where an exception could end - up being overwritten. - -- gh-105375: Fix bugs in :mod:`!_ctypes` where exceptions could end up being - overwritten. - -- gh-105375: Fix a bug in the :mod:`posix` module where an exception could - be overwritten. - -- gh-105375: Fix bugs in :mod:`!_elementtree` where exceptions could be - overwritten. - -- gh-105375: Fix bugs in :mod:`zoneinfo` where exceptions could be - overwritten. - -- gh-105375: Fix bugs in :mod:`errno` where exceptions could be overwritten. - -- gh-105566: Deprecate creating a :class:`typing.NamedTuple` class using - keyword arguments to denote the fields (``NT = NamedTuple("NT", x=int, - y=str)``). This will be disallowed in Python 3.15. Use the class-based - syntax or the functional syntax instead. - - Two methods of creating ``NamedTuple`` classes with 0 fields using the - functional syntax are also deprecated, and will be disallowed in Python - 3.15: ``NT = NamedTuple("NT")`` and ``NT = NamedTuple("NT", None)``. To - create a ``NamedTuple`` class with 0 fields, either use ``class - NT(NamedTuple): pass`` or ``NT = NamedTuple("NT", [])``. - -- gh-105545: Remove deprecated in 3.11 ``webbrowser.MacOSXOSAScript._name`` - attribute. - -- gh-105497: Fix flag inversion when alias/mask members exist. - -- gh-105509: :data:`typing.Annotated` is now implemented as an instance of - ``typing._SpecialForm`` rather than a class. This should have no - user-facing impact for users of the :mod:`typing` module public API. - -- gh-105375: Fix bugs in :mod:`pickle` where exceptions could be - overwritten. - -- gh-70303: Emit :exc:`FutureWarning` from :meth:`pathlib.Path.glob` and - :meth:`~pathlib.Path.rglob` if the given pattern ends with "``**``". In a - future Python release, patterns with this ending will match both files and - directories. Add a trailing slash to only match directories. - -- gh-105375: Fix a bug in :mod:`sqlite3` where an exception could be - overwritten in the :meth:`collation <sqlite3.Connection.create_collation>` - callback. - -- gh-105382: Remove *cafile*, *capath* and *cadefault* parameters of the - :func:`urllib.request.urlopen` function, deprecated in Python 3.6. Patch - by Victor Stinner. - -- gh-105376: :mod:`logging`: Remove undocumented and untested - ``Logger.warn()`` and ``LoggerAdapter.warn()`` methods and - ``logging.warn()`` function. Deprecated since Python 3.3, they were - aliases to the :meth:`logging.Logger.warning` method, - :meth:`!logging.LoggerAdapter.warning` method and :func:`logging.warning` - function. Patch by Victor Stinner. - -- gh-105332: Revert pickling method from by-name back to by-value. - -- gh-104554: Add RTSPS scheme support in urllib.parse - -- gh-105292: Add option to :func:`traceback.format_exception_only` to - recurse into the nested exception of a :exc:`BaseExceptionGroup`. - -- gh-105280: Fix bug where ``isinstance([], collections.abc.Mapping)`` could - evaluate to ``True`` if garbage collection happened at the wrong time. The - bug was caused by changes to the implementation of - :class:`typing.Protocol` in Python 3.12. - -- gh-80480: :mod:`array`: Add ``'w'`` typecode that represents ``Py_UCS4``. - -- gh-105239: Fix longstanding bug where ``issubclass(object, - typing.Protocol)`` would evaluate to ``True`` in some edge cases. Patch by - Alex Waygood. - -- gh-104310: In the beta 1 release we added a utility function for extension - module authors, to use when testing their module for support in multiple - interpreters or under a per-interpreter GIL. The name of that function - has changed from ``allowing_all_extensions`` to - ``_incompatible_extension_module_restrictions``. The default for the - "disable_check" argument has change from ``True`` to ``False``, to better - match the new function name. - -- gh-105080: Fixed inconsistent signature on derived classes for - :func:`inspect.signature` - -- gh-105144: Fix a recent regression in the :mod:`typing` module. The - regression meant that doing ``class Foo(X, typing.Protocol)``, where ``X`` - was a class that had :class:`abc.ABCMeta` as its metaclass, would then - cause subsequent ``isinstance(1, X)`` calls to erroneously raise - :exc:`TypeError`. Patch by Alex Waygood. - -- gh-62948: The :class:`io.IOBase` finalizer now logs the ``close()`` method - errors with :data:`sys.unraisablehook`. Previously, errors were ignored - silently by default, and only logged in :ref:`Python Development Mode - <devmode>` or on :ref:`Python built on debug mode <debug-build>`. Patch - by Victor Stinner. - -- gh-105096: :mod:`wave`: Deprecate the ``getmark()``, ``setmark()`` and - ``getmarkers()`` methods of the :class:`wave.Wave_read` and - :class:`wave.Wave_write` classes. They will be removed in Python 3.15. - Patch by Victor Stinner. - -- gh-104992: Remove the untested and undocumented - :meth:`!unittest.TestProgram.usageExit` method, deprecated in Python 3.11. - Patch by Hugo van Kemenade. - -- gh-104996: Improve performance of :class:`pathlib.PurePath` initialisation - by deferring joining of paths when multiple arguments are given. - -- gh-101588: Deprecate undocumented copy/deepcopy/pickle support for - itertools. - -- gh-103631: Fix ``pathlib.PurePosixPath(pathlib.PureWindowsPath(...))`` not - converting path separators to restore 3.11 compatible behavior. - -- gh-104947: Make comparisons between :class:`pathlib.PureWindowsPath` - objects consistent across Windows and Posix to match 3.11 behavior. - -- gh-104773: :pep:`594`: Remove the :mod:`!audioop` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!aifc` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!uu` module, deprecated in Python - 3.11. Patch by Victor Stinner. - -- gh-104935: Fix bugs with the interaction between - :func:`typing.runtime_checkable` and :class:`typing.Generic` that were - introduced by the :pep:`695` implementation. Patch by Jelle Zijlstra. - -- gh-104773: :pep:`594`: Remove the :mod:`!crypt` module and its private - :mod:`!_crypt` extension, deprecated in Python 3.11. Patch by Victor - Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!nis` module, deprecated in Python - 3.11. Patch by Victor Stinner. - -- gh-104898: Add missing :attr:`~object.__slots__` to :class:`os.PathLike`. - -- gh-104773: :pep:`594`: Remove the :mod:`!xdrlib` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!nntplib` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104886: Remove the undocumented - :class:`!configparser.LegacyInterpolation` class, deprecated in the - docstring since Python 3.2, and with a deprecation warning since Python - 3.11. Patch by Hugo van Kemenade. - -- gh-104786: Remove kwargs-based :class:`typing.TypedDict` creation - -- gh-104876: Remove the :meth:`!turtle.RawTurtle.settiltangle` method, - deprecated in docs since Python 3.1 and with a deprecation warning since - Python 3.11. Patch by Hugo van Kemenade. - -- gh-104773: :pep:`594`: Removed the :mod:`!msilib` package, deprecated in - Python 3.11. - -- gh-104773: :pep:`594`: Remove the :mod:`!spwd` module, deprecated in - Python 3.11: the :pypi:`python-pam` project can be used instead. Patch by - Victor Stinner. - -- gh-75552: Removed the ``tkinter.tix`` module, deprecated since Python 3.6. - -- gh-104773: :pep:`594`: Remove the :mod:`!chunk` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!mailcap` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!sunau` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104780: :pep:`594`: Remove the :mod:`!ossaudiodev` module, deprecated - in Python 3.11. Patch Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!pipes` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104873: Add :func:`typing.get_protocol_members` to return the set of - members defining a :class:`typing.Protocol`. Add - :func:`typing.is_protocol` to check whether a class is a - :class:`typing.Protocol`. Patch by Jelle Zijlstra. - -- gh-104874: Document the ``__name__`` and ``__supertype__`` attributes of - :class:`typing.NewType`. Patch by Jelle Zijlstra. - -- gh-104835: Removed the following :mod:`unittest` functions, deprecated in - Python 3.11: - - * :func:`!unittest.findTestCases` - * :func:`!unittest.makeSuite` - * :func:`!unittest.getTestCaseNames` - - Use :class:`~unittest.TestLoader` methods instead: - - * :meth:`unittest.TestLoader.loadTestsFromModule` - * :meth:`unittest.TestLoader.loadTestsFromTestCase` - * :meth:`unittest.TestLoader.getTestCaseNames` - - Patch by Hugo van Kemenade. - -- gh-104804: Remove the untested and undocumented :mod:`webbrowser` - :class:`!MacOSX` class, deprecated in Python 3.11. Patch by Hugo van - Kemenade. - -- gh-83863: Support for using :class:`pathlib.Path` objects as context - managers has been removed. Before Python 3.9, exiting the context manager - marked a path as "closed", which caused some (but not all!) methods to - raise when called. Since Python 3.9, using a path as a context manager - does nothing. - -- gh-104799: Adjust the location of the (see :pep:`695`) ``type_params`` - field on :class:`ast.ClassDef`, :class:`ast.AsyncFunctionDef`, and - :class:`ast.FunctionDef` to better preserve backward compatibility. Patch - by Jelle Zijlstra - -- gh-104797: Allow :class:`typing.Protocol` classes to inherit from - :class:`collections.abc.Buffer`. Patch by Jelle Zijlstra. - -- gh-104783: Remove ``locale.resetlocale()`` function deprecated in Python - 3.11. Patch by Victor Stinner. - -- gh-104780: Remove the ``2to3`` program and the :mod:`!lib2to3` module, - deprecated in Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!telnetlib` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!imghdr` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!cgi` and :mod:`!cgitb` modules, - deprecated in Python 3.11. Patch by Victor Stinner. - -- gh-104773: :pep:`594`: Remove the :mod:`!sndhdr` module, deprecated in - Python 3.11. Patch by Victor Stinner. - -- gh-104372: On Linux where :mod:`subprocess` can use the ``vfork()`` - syscall for faster spawning, prevent the parent process from blocking - other threads by dropping the GIL while it waits for the vfork'ed child - process ``exec()`` outcome. This prevents spawning a binary from a slow - filesystem from blocking the rest of the application. - -- gh-99108: We now release the GIL around built-in :mod:`hashlib` - computations of reasonable size for the SHA families and MD5 hash - functions, matching what our OpenSSL backed hash computations already - does. - -- gh-102613: Improve performance of :meth:`pathlib.Path.glob` when expanding - a pattern with a non-terminal "``**``" component by filtering walked paths - through a regular expression, rather than calling :func:`os.scandir` more - than once on each directory. - -- gh-104399: Prepare the ``_tkinter`` module for building with Tcl 9.0 and - future libtommath by replacing usage of deprecated functions - :c:func:`mp_to_unsigned_bin_n` and :c:func:`mp_unsigned_bin_size` when - necessary. - -- gh-102676: Add fields ``start_offset``, ``cache_offset``, ``end_offset``, - ``baseopname``, ``baseopcode``, ``jump_target`` and ``oparg`` to - :class:`dis.Instruction`. - -- gh-103558: Fixed ``parent`` argument validation mechanism of - :mod:`argparse`. Improved test coverage. - -- gh-103464: Provide helpful usage messages when parsing incorrect - :mod:`pdb` commands. - -- gh-103384: Generalize the regex pattern ``BaseConfigurator.INDEX_PATTERN`` - to allow spaces and non-alphanumeric characters in keys. - -- gh-103124: Added multiline statement support for :mod:`pdb` - -- gh-101162: Forbid using :func:`builtins.issubclass` with - :class:`types.GenericAlias` as the first argument. - -- gh-103200: Fix cache repopulation semantics of - zipimport.invalidate_caches(). The cache is now repopulated upon - retrieving files with an invalid cache, not when the cache is invalidated. - -- gh-100061: Fix a bug that causes wrong matches for regular expressions - with possessive qualifier. - -- gh-77609: Add *follow_symlinks* argument to :meth:`pathlib.Path.glob` and - :meth:`~pathlib.Path.rglob`, defaulting to false. - -- gh-102541: Hide traceback in :func:`help` prompt, when import failed. - -- gh-102120: Added a stream mode to ``tarfile`` that allows for reading - archives without caching info about the inner files. - -- gh-102029: Deprecate passing any arguments to :func:`threading.RLock`. - -- gh-88233: Refactored ``zipfile._strip_extra`` to use higher level - abstractions for extras instead of a heavy-state loop. - -- gh-102024: Reduce calls of ``_idle_semaphore.release()`` in - :func:`concurrent.futures.thread._worker`. - -- gh-73435: Add support for recursive wildcards in - :meth:`pathlib.PurePath.match`. - -- gh-84867: :class:`unittest.TestLoader` no longer loads test cases from - exact :class:`unittest.TestCase` and :class:`unittest.FunctionTestCase` - classes. - -- gh-99203: Restore following CPython <= 3.10.5 behavior of - :func:`shutil.make_archive`: do not create an empty archive if - ``root_dir`` is not a directory, and, in that case, raise - :class:`FileNotFoundError` or :class:`NotADirectoryError` regardless of - ``format`` choice. Beyond the brought-back behavior, the function may now - also raise these exceptions in ``dry_run`` mode. - -- gh-80480: Emit :exc:`DeprecationWarning` for :mod:`array`'s ``'u'`` type - code, deprecated in docs since Python 3.3. - -- gh-94924: :func:`unittest.mock.create_autospec` now properly returns - coroutine functions compatible with :func:`inspect.iscoroutinefunction` - -- gh-94777: Fix hanging :mod:`multiprocessing` ``ProcessPoolExecutor`` when - a child process crashes while data is being written in the call queue. - -- gh-92871: Remove the ``typing.io`` and ``typing.re`` namespaces, - deprecated since Python 3.8. All items are still available from the main - :mod:`typing` module. - -- bpo-43633: Improve the textual representation of IPv4-mapped IPv6 - addresses (:rfc:`4291` Sections 2.2, 2.5.5.2) in :mod:`ipaddress`. Patch - by Oleksandr Pavliuk. - -- bpo-44850: Improve performance of :func:`operator.methodcaller` using the - :pep:`590` ``vectorcall`` convention. Patch by Anthony Lee and Pieter - Eendebak. - -- bpo-44185: :func:`unittest.mock.mock_open` will call the :func:`close` - method of the file handle mock when it is exiting from the context - manager. Patch by Samet Yaslan. - -- bpo-40988: Improve performance of :class:`functools.singledispatchmethod` - by caching the generated dispatch wrapper. Optimization suggested by - frederico. Patch by @mental32, Alex Waygood and Pieter Eendebak. - -- bpo-41768: :mod:`unittest.mock` speccing no longer calls class properties. - Patch by Melanie Witt. - -- bpo-18319: Ensure ``gettext(msg)`` retrieve translations even if a plural - form exists. In other words: ``gettext(msg) == ngettext(msg, '', 1)``. - -- bpo-17013: Add ``ThreadingMock`` to :mod:`unittest.mock` that can be used - to create Mock objects that can wait until they are called. Patch by - Karthikeyan Singaravelan and Mario Corchero. - -Documentation -------------- - -- gh-109209: The minimum Sphinx version required for the documentation is - now 4.2. - -- gh-108826: :mod:`dis` module command-line interface is now mentioned in - documentation. - -- gh-107305: Add documentation for :c:type:`PyInterpreterConfig` and - :c:func:`Py_NewInterpreterFromConfig`. Also clarify some of the nearby - docs relative to per-interpreter GIL. - -- gh-107008: Document the :mod:`curses` module variables - :const:`~curses.LINES` and :const:`~curses.COLS`. - -- gh-106948: Add a number of standard external names to ``nitpick_ignore``. - -- gh-106232: Make timeit doc command lines compatible with Windows by using - double quotes for arguments. This works on linux and macOS also. - -- gh-105172: Fixed :func:`functools.lru_cache` docstring accounting for - ``typed`` argument's different handling of str and int. Patch by Bar - Harel. - -- gh-105052: Update ``timeit`` doc to specify that time in seconds is just - the default. - -- gh-89455: Add missing documentation for the ``max_group_depth`` and - ``max_group_width`` parameters and the ``exceptions`` attribute of the - :class:`traceback.TracebackException` class. - -- gh-89412: Add missing documentation for the ``end_lineno`` and - ``end_offset`` attributes of the :class:`traceback.TracebackException` - class. - -- gh-104943: Remove mentions of old Python versions in - :class:`typing.NamedTuple`. - -- gh-54738: Add documentation on how to localize the :mod:`argparse` module. - -- gh-102823: Document the return type of ``x // y`` when ``x`` and ``y`` - have type :class:`float`. - -- gh-102759: Align function signature for ``functools.reduce`` in - documentation and docstring with the C implementation. - -Tests ------ - -- gh-110647: Fix test_stress_modifying_handlers() of test_signal. Patch by - Victor Stinner. - -- gh-103053: Fix test_tools.test_freeze on FreeBSD: run "make distclean" - instead of "make clean" in the copied source directory to remove also the - "python" program. Patch by Victor Stinner. - -- gh-110167: Fix a deadlock in test_socket when server fails with a timeout - but the client is still running in its thread. Don't hold a lock to call - cleanup functions in doCleanups(). One of the cleanup function waits until - the client completes, whereas the client could deadlock if it called - addCleanup() in such situation. Patch by Victor Stinner. - -- gh-110388: Add tests for :mod:`tty`. - -- gh-81002: Add tests for :mod:`termios`. - -- gh-110367: regrtest: When using worker processes (-jN) with --verbose3 - option, regrtest can now display the worker output even if a worker - process does crash. Previously, sys.stdout and sys.stderr were replaced - and so the worker output was lost on a crash. Patch by Victor Stinner. - -- gh-110267: Add tests for pickling and copying PyStructSequence objects. - Patched by Xuehai Pan. - -- gh-110171: ``libregrtest`` now always sets and shows ``random.seed``, so - tests are more reproducible. Use ``--randseed`` flag to pass the explicit - random seed for tests. - -- gh-110152: Remove ``Tools/scripts/run_tests.py`` and ``make - hostrunnertest``. Just run ``./python -m test --slow-ci``, ``make - buildbottest`` or ``make test`` instead. Python test runner (regrtest) now - handles cross-compilation and HOSTRUNNER. It also adds options to Python - such fast ``-u -E -W default -bb`` when ``--fast-ci`` or ``--slow-ci`` - option is used. Patch by Victor Stinner. - -- gh-110031: Skip test_threading tests using thread+fork if Python is built - with Address Sanitizer (ASAN). Patch by Victor Stinner. - -- gh-110088: Fix test_asyncio timeouts: don't measure the maximum duration, - a test should not measure a CI performance. Only measure the minimum - duration when a task has a timeout or delay. Add ``CLOCK_RES`` to - ``test_asyncio.utils``. Patch by Victor Stinner. - -- gh-109974: Fix race conditions in test_threading lock tests. Wait until a - condition is met rather than using :func:`time.sleep` with a hardcoded - number of seconds. Patch by Victor Stinner. - -- gh-110033: Fix ``test_interprocess_signal()`` of ``test_signal``. Make - sure that the ``subprocess.Popen`` object is deleted before the test - raising an exception in a signal handler. Otherwise, ``Popen.__del__()`` - can get the exception which is logged as ``Exception ignored in: ...`` and - the test fails. Patch by Victor Stinner. - -- gh-109594: Fix test_timeout() of test_concurrent_futures.test_wait. Remove - the future which may or may not complete depending if it takes longer than - the timeout or not. Keep the second future which does not complete before - wait() timeout. Patch by Victor Stinner. - -- gh-109972: Split test_gdb.py file into a test_gdb package made of multiple - tests, so tests can now be run in parallel. Patch by Victor Stinner. - -- gh-109566: regrtest: When ``--fast-ci`` or ``--slow-ci`` option is used, - regrtest now replaces the current process with a new process to add ``-u - -W default -bb -E`` options to Python. Patch by Victor Stinner. - -- gh-109748: Fix ``test_zippath_from_non_installed_posix()`` of test_venv: - don't copy ``__pycache__/`` sub-directories, because they can be modified - by other Python tests running in parallel. Patch by Victor Stinner. - -- gh-109739: regrtest: Fix reference leak check on Windows. Disable the load - tracker on Windows in the reference leak check mode (-R option). Patch by - Victor Stinner. - -- gh-109276: regrtest: When a test fails with "env changed" and the --rerun - option is used, the test is now re-run in verbose mode in a fresh process. - Patch by Victor Stinner. - -- gh-103053: Skip test_freeze_simple_script() of test_tools.test_freeze if - Python is built with ``./configure --enable-optimizations``, which means - with Profile Guided Optimization (PGO): it just makes the test too slow. - The freeze tool is tested by many other CIs with other (faster) compiler - flags. Patch by Victor Stinner. - -- gh-109580: Skip ``test_perf_profiler`` if Python is built with ASAN, MSAN - or UBSAN sanitizer. Python does crash randomly in this test on such build. - Patch by Victor Stinner. - -- gh-109566: regrtest: Add ``--fast-ci`` and ``--slow-ci`` options. - ``--fast-ci`` uses a default timeout of 10 minutes and ``-u all,-cpu`` - (skip slowest tests). ``--slow-ci`` uses a default timeout of 20 minutes - and ``-u all`` (run all tests). Patch by Victor Stinner. - -- gh-109425: libregrtest now decodes stdout of test worker processes with - the "backslashreplace" error handler to log corrupted stdout, instead of - failing with an error and not logging the stdout. Patch by Victor Stinner. - -- gh-109396: Fix ``test_socket.test_hmac_sha1()`` in FIPS mode. Use a longer - key: FIPS mode requires at least of at least 112 bits. The previous key - was only 32 bits. Patch by Victor Stinner. - -- gh-104736: Fix test_gdb on Python built with LLVM clang 16 on Linux - ppc64le (ex: Fedora 38). Search patterns in gdb "bt" command output to - detect when gdb fails to retrieve the traceback. For example, skip a test - if ``Backtrace stopped: frame did not save the PC`` is found. Patch by - Victor Stinner. - -- gh-109276: libregrtest now calls :func:`random.seed` before running each - test file when ``-r/--randomize`` command line option is used. Moreover, - it's also called in worker processes. It should help to make tests more - deterministic. Previously, it was only called once in the main process - before running all test files and it was not called in worker processes. - Patch by Victor Stinner. - -- gh-109276: libregrtest now uses a separated file descriptor to write test - result as JSON. Previously, if a test wrote debug messages late around the - JSON, the main test process failed to parse JSON. Patch by Victor Stinner. - -- gh-108996: Fix and enable ``test_msvcrt``. - -- gh-109237: Fix ``test_site.test_underpth_basic()`` when the working - directory contains at least one non-ASCII character: encode the ``._pth`` - file to UTF-8 and enable the UTF-8 Mode to use UTF-8 for the child process - stdout. Patch by Victor Stinner. - -- gh-109230: Fix ``test_pyexpat.test_exception()``: it can now be run from a - directory different than Python source code directory. Before, the test - failed in this case. Skip the test if Modules/pyexpat.c source is not - available. Skip also the test on Python implementations other than - CPython. Patch by Victor Stinner. - -- gh-108996: Add tests for ``msvcrt``. - -- gh-109015: Fix test_asyncio, test_imaplib and test_socket tests on FreeBSD - if the TCP blackhole is enabled (``sysctl net.inet.tcp.blackhole``). Skip - the few tests which failed with ``ETIMEDOUT`` which such non standard - configuration. Currently, the `FreeBSD GCP image enables TCP and UDP - blackhole <https://reviews.freebsd.org/D41751>`_ (``sysctl - net.inet.tcp.blackhole=2`` and ``sysctl net.inet.udp.blackhole=1``). - Patch by Victor Stinner. - -- gh-91960: Skip ``test_gdb`` if gdb is unable to retrieve Python frame - objects: if a frame is ``<optimized out>``. When Python is built with - "clang -Og", gdb can fail to retrieve the *frame* parameter of - ``_PyEval_EvalFrameDefault()``. In this case, tests like ``py_bt()`` are - likely to fail. Without getting access to Python frames, ``python-gdb.py`` - is mostly clueless on retrieving the Python traceback. Moreover, - ``test_gdb`` is no longer skipped on macOS if Python is built with Clang. - Patch by Victor Stinner. - -- gh-108962: Skip ``test_tempfile.test_flags()`` if ``chflags()`` fails with - "OSError: [Errno 45] Operation not supported" (ex: on FreeBSD 13). Patch - by Victor Stinner. - -- gh-91960: FreeBSD 13.2 CI coverage for pull requests is now provided by - Cirrus-CI (a hosted CI service that supports Linux, macOS, Windows, and - FreeBSD). - -- gh-89392: Removed support of ``test_main()`` function in tests. They now - always use normal unittest test runner. - -- gh-108851: Fix ``test_tomllib`` recursion tests for WASI buildbots: reduce - the recursion limit and compute the maximum nested array/dict depending on - the current available recursion limit. Patch by Victor Stinner. - -- gh-108851: Add ``get_recursion_available()`` and ``get_recursion_depth()`` - functions to the :mod:`test.support` module. Patch by Victor Stinner. - -- gh-108834: Add ``--fail-rerun option`` option to regrtest: if a test - failed when then passed when rerun in verbose mode, exit the process with - exit code 2 (error), instead of exit code 0 (success). Patch by Victor - Stinner. - -- gh-108834: Rename regrtest ``--verbose2`` option (``-w``) to ``--rerun``. - Keep ``--verbose2`` as a deprecated alias. Patch by Victor Stinner. - -- gh-108834: When regrtest reruns failed tests in verbose mode (``./python - -m test --rerun``), tests are now rerun in fresh worker processes rather - than being executed in the main process. If a test does crash or is killed - by a timeout, the main process can detect and handle the killed worker - process. Tests are rerun in parallel if the ``-jN`` option is used to run - tests in parallel. Patch by Victor Stinner. - -- gh-108822: ``regrtest`` now computes statistics on all tests: successes, - failures and skipped. ``test_netrc``, ``test_pep646_syntax`` and - ``test_xml_etree`` now return results in their ``test_main()`` function. - Patch by Victor Stinner and Alex Waygood. - -- gh-108794: The :meth:`doctest.DocTestRunner.run` method now counts the - number of skipped tests. Add :attr:`doctest.DocTestRunner.skips` and - :attr:`doctest.TestResults.skipped` attributes. Patch by Victor Stinner. - -- gh-108388: Convert test_concurrent_futures to a package of 7 sub-tests. - Patch by Victor Stinner. - -- gh-108388: Split test_multiprocessing_fork, - test_multiprocessing_forkserver and test_multiprocessing_spawn into test - packages. Each package is made of 4 sub-tests: processes, threads, manager - and misc. It allows running more tests in parallel and so reduce the total - test duration. Patch by Victor Stinner. - -- gh-105776: Fix test_cppext when the C compiler command ``-std=c11`` - option: remove ``-std=`` options from the compiler command. Patch by - Victor Stinner. - -- gh-107652: Set up CIFuzz to run fuzz targets in GitHub Actions. Patch by - Illia Volochii. - -- gh-107237: ``test_logging``: Fix ``test_udp_reconnection()`` by increasing - the timeout from 100 ms to 5 minutes (LONG_TIMEOUT). Patch by Victor - Stinner. - -- gh-107178: Add the C API test for functions in the Mapping Protocol, the - Sequence Protocol and some functions in the Object Protocol. - -- gh-106714: test_capi: Fix test_no_FatalError_infinite_loop() to no longer - write a coredump, by using test.support.SuppressCrashReport. Patch by - Victor Stinner. - -- gh-104090: Avoid creating a reference to the test object in - :meth:`~unittest.TestResult.collectedDurations`. - -- gh-106752: Moved tests for ``zipfile.Path`` into - ``Lib/test/test_zipfile/_path``. Made ``zipfile._path`` a package. - -- gh-106690: Add .coveragerc to cpython repository for use with coverage - package. - -- gh-101634: When running the Python test suite with ``-jN`` option, if a - worker stdout cannot be decoded from the locale encoding report a failed - testn so the exitcode is non-zero. Patch by Victor Stinner. - -- gh-105084: When the Python build is configured ``--with-wheel-pkg-dir``, - tests requiring the ``setuptools`` and ``wheel`` wheels will search for - the wheels in ``WHEEL_PKG_DIR``. - -- gh-81005: String tests are modified to reflect that ``str`` and - ``unicode`` are merged in Python 3. Patch by Daniel Fortunov. - -- gh-103186: Suppress and assert expected RuntimeWarnings in - test_sys_settrace.py - -- gh-69714: Add additional tests to :mod:`calendar` to achieve full test - coverage. - -Build ------ - -- gh-103053: "make check-clean-src" now also checks if the "python" program - is found in the source directory: fail with an error if it does exist. - Patch by Victor Stinner. - -- gh-109191: Fix compile error when building with recent versions of - libedit. - -- gh-110276: No longer ignore :envvar:`PROFILE_TASK` failure silently: - command used by Profile Guided Optimization (PGO). Patch by Victor - Stinner. - -- gh-109566: Remove ``make testall`` target: use ``make buildbottest`` - instead. Patch by Victor Stinner. - -- gh-109740: The experimental ``--disable-gil`` configure flag now includes - "t" (for "threaded") in extension ABI tags. - -- gh-109054: Fix building the ``_testcapi`` extension on Linux AArch64 which - requires linking to libatomic when ``<cpython/pyatomic.h>`` is used: the - ``_Py_atomic_or_uint64()`` function requires libatomic - ``__atomic_fetch_or_8()`` on this platform. The configure script now - checks if linking to libatomic is needed and generates a new LIBATOMIC - variable used to build the _testcapi extension. Patch by Victor Stinner. - -- gh-63760: Fix Solaris build: no longer redefine the ``gethostname()`` - function. Solaris defines the function since 2005. Patch by Victor - Stinner, original patch by Jakub Kulík. - -- gh-108740: Fix a race condition in ``make regen-all``. The - ``deepfreeze.c`` source and files generated by Argument Clinic are now - generated or updated before generating "global objects". Previously, some - identifiers may miss depending on the order in which these files were - generated. Patch by Victor Stinner. - -- gh-108634: Python built with :file:`configure` :option:`--with-trace-refs` - (tracing references) is now ABI compatible with Python release build and - :ref:`debug build <debug-build>`. Patch by Victor Stinner. - -- gh-85283: The ``_stat`` C extension is now built with the :ref:`limited C - API <limited-c-api>`. Patch by Victor Stinner. - -- gh-108447: Fix x86_64 GNU/Hurd build - -- gh-107814: When calling ``find_python.bat`` with ``-q`` it did not - properly silence the output of nuget. That is now fixed. - -- gh-105481: Remove the make target ``regen-opcode-targets``, merge its work - into ``regen-opcode`` which repeats most of the calculation. This - simplifies the code for the build and reduces code duplication. - -- gh-106881: Check for ``linux/limits.h`` before including it in - ``Modules/posixmodule.c``. - -- gh-95855: Refactor platform triplet detection code and add detection for - MIPS soft float and musl libc. - -- gh-106962: Detect MPI compilers in :file:`configure`. - -- gh-106118: Fix compilation for platforms without :data:`!O_CLOEXEC`. The - issue was introduced with Python 3.12b1 in :gh:`103295`. Patch by Erlend - Aasland. - -- gh-105875: SQLite 3.15.2 or newer is required to build the :mod:`sqlite3` - extension module. Patch by Erlend Aasland. - -- gh-90005: Fix a regression in :file:`configure` where we could end up - unintentionally linking with ``libbsd``. - -- gh-102404: Document how to perform a WASI build on Linux. Also add - Tools/wasm/build_wasi.sh as a reference implementation of the docs. - -- gh-89886: Autoconf 2.71 and aclocal 1.16.4 is now required to regenerate - :file:`configure`. - -- gh-104692: Include ``commoninstall`` as a prerequisite for ``bininstall`` - - This ensures that ``commoninstall`` is completed before ``bininstall`` is - started when parallel builds are used (``make -j install``), and so the - ``python3`` symlink is only installed after all standard library modules - are installed. - -- gh-101538: Add experimental wasi-threads support. Patch by Takashi - Yamamoto. - -Windows -------- - -- gh-110437: Allows overriding the source of VC redistributables so that - releases can be guaranteed to never downgrade between updates. - -- gh-109286: Update Windows installer to use SQLite 3.43.1. - -- gh-82367: :func:`os.path.realpath` now resolves MS-DOS style file names - even if the file is not accessible. Patch by Moonsik Park. - -- gh-109991: Update Windows build to use OpenSSL 3.0.11. - -- gh-106242: Fixes :func:`~os.path.realpath` to behave consistently when - passed a path containing an embedded null character on Windows. In strict - mode, it now raises :exc:`OSError` instead of the unexpected - :exc:`ValueError`, and in non-strict mode will make the path absolute. - -- gh-83180: Changes the :ref:`launcher` to prefer an active virtual - environment when the launched script has a shebang line using a Unix-like - virtual command, even if the command requests a specific version of - Python. - -- gh-106844: Fix integer overflow and truncating by the null character in - :func:`!_winapi.LCMapStringEx` which affects :func:`ntpath.normcase`. - -- gh-105436: Ensure that an empty environment block is terminated by two - null characters, as is required by Windows. - -- gh-105146: Updated the links at the end of the installer to point to - Discourse rather than the mailing lists. - -- gh-103646: When installed from the Microsoft Store, ``pip`` no longer - defaults to per-user installs. However, as the install directory is - unwritable, it should automatically decide to do a per-user install - anyway. This should resolve issues when ``pip`` is passed an option that - conflicts with ``--user``. - -- gh-88745: Improve performance of :func:`shutil.copy2` by using the - operating system's ``CopyFile2`` function. This may result in subtle - changes to metadata copied along with some files, bringing them in line - with normal OS behavior. - -- gh-104820: Fixes :func:`~os.stat` and related functions on file systems - that do not support file ID requests. This includes FAT32 and exFAT. - -- gh-104803: Add :func:`os.path.isdevdrive` to detect whether a path is on a - Windows Dev Drive. Returns ``False`` on platforms that do not support Dev - Drive, and is absent on non-Windows platforms. - -macOS ------ - -- gh-109286: Update macOS installer to use SQLite 3.43.1. - -- gh-109991: Update macOS installer to use OpenSSL 3.0.11. - -- gh-99079: Update macOS installer to use OpenSSL 3.0.9. - -IDLE ----- - -- gh-104719: Remove IDLE's modification of tokenize.tabsize and test other - uses of tokenize data and methods. - -Tools/Demos ------------ - -- gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.11 and - multissltests to use 1.1.1w, 3.0.11, and 3.1.3. - -- gh-108494: `Argument Clinic - <https://devguide.python.org/development-tools/clinic/>`__ now has a - partial support of the :ref:`Limited API <limited-c-api>`: see - `documentation in the Python Developer's Guide - <https://devguide.python.org/development-tools/clinic/#clinic-howto-limited-capi>`__ - Patch by Victor Stinner. - -- gh-107704: It is now possible to deprecate passing keyword arguments for - keyword-or-positional parameters with Argument Clinic, using the new ``/ - [from X.Y]`` syntax. (To be read as *"positional-only from Python version - X.Y"*.) See `documentation in the Python Developer's Guide - <https://devguide.python.org/development-tools/clinic/#clinic-howto-deprecate-keyword>`__ - for more information. - -- gh-107880: Argument Clinic can now clone :meth:`!__init__` and - :meth:`!__new__` methods. - -- gh-104683: Add ``--exclude`` option to Argument Clinic CLI. - -- gh-95065: Argument Clinic now supports overriding automatically generated - signature by using directive ``@text_signature``. See `documentation in - the Python Developer's Guide - <https://devguide.python.org/development-tools/clinic/#clinic-howto-override-signature>`__ - -- gh-107609: Fix duplicate module check in Argument Clinic. Previously, a - duplicate definition would incorrectly be silently accepted. Patch by - Erlend E. Aasland. - -- gh-107467: The Argument Clinic command-line tool now prints to stderr - instead of stdout on failure. - -- gh-106970: Fix bugs in the Argument Clinic ``destination <name> clear`` - command; the destination buffers would never be cleared, and the - ``destination`` directive parser would simply continue to the fault - handler after processing the command. Patch by Erlend E. Aasland. - -- gh-106706: Change bytecode syntax for families to remove redundant name - matching pseudo syntax. - -- gh-106359: Argument Clinic now explicitly forbids "kwarg splats" in - function calls used as annotations. - -- gh-103186: ``freeze`` now fetches ``CONFIG_ARGS`` from the original - CPython instance the Makefile uses to call utility scripts. Patch by - Ijtaba Hussain. - -- gh-95065: It is now possible to deprecate passing parameters positionally - with Argument Clinic, using the new ``* [from X.Y]`` syntax. (To be read - as *"keyword-only from Python version X.Y"*.) See `documentation in the - Python Developer's Guide - <https://devguide.python.org/development-tools/clinic/#clinic-howto-deprecate-positional>`__ - for more information. Patch by Erlend E. Aasland with help from Alex - Waygood, Nikita Sobolev, and Serhiy Storchaka. - -C API ------ - -- gh-85283: If the :c:macro:`Py_LIMITED_API` macro is defined, - :c:macro:`!Py_BUILD_CORE`, :c:macro:`!Py_BUILD_CORE_BUILTIN` and - :c:macro:`!Py_BUILD_CORE_MODULE` macros are now undefined by - ``<Python.h>``. Patch by Victor Stinner. - -- gh-110289: Add :c:func:`PyUnicode_EqualToUTF8AndSize` and - :c:func:`PyUnicode_EqualToUTF8` functions. - -- gh-110235: Raise :exc:`TypeError` for duplicate/unknown fields in - ``PyStructSequence`` constructor. Patched by Xuehai Pan. - -- gh-110014: Remove undocumented ``PY_TIMEOUT_MAX`` constant from the - limited C API. Patch by Victor Stinner. - -- gh-109521: :c:func:`PyImport_GetImporter` now sets RuntimeError if it - fails to get :data:`sys.path_hooks` or :data:`sys.path_importer_cache` or - they are not list and dict correspondingly. Previously it could return - NULL without setting error in obscure cases, crash or raise SystemError if - these attributes have wrong type. - -- gh-108724: Add :c:type:`PyMutex` internal-only lightweight locking API. - -- gh-85283: Add :c:func:`PySys_AuditTuple` function: similar to - :c:func:`PySys_Audit`, but pass event arguments as a Python :class:`tuple` - object. Patch by Victor Stinner. - -- gh-108867: Add :c:func:`PyThreadState_GetUnchecked()` function: similar to - :c:func:`PyThreadState_Get()`, but don't kill the process with a fatal - error if it is NULL. The caller is responsible to check if the result is - NULL. Previously, the function was private and known as - ``_PyThreadState_UncheckedGet()``. Patch by Victor Stinner. - -- gh-108765: ``Python.h`` no longer includes the ``<ctype.h>`` standard - header file. If needed, it should now be included explicitly. For example, - it provides ``isalpha()`` and ``tolower()`` functions which are locale - dependent. Python provides locale independent functions, like - :c:func:`!Py_ISALPHA` and :c:func:`!Py_TOLOWER`. Patch by Victor Stinner. - -- gh-108765: ``Python.h`` no longer includes the ``<unistd.h>`` standard - header file. If needed, it should now be included explicitly. For example, - it provides the functions: ``close()``, ``getpagesize()``, ``getpid()`` - and ``sysconf()``. Patch by Victor Stinner. - -- gh-108765: ``Python.h`` no longer includes the ``<ieeefp.h>`` standard - header. It was included for the ``finite()`` function which is now - provided by the ``<math.h>`` header. It should now be included explicitly - if needed. Remove also the ``HAVE_IEEEFP_H`` macro. Patch by Victor - Stinner. - -- gh-108765: ``Python.h`` no longer includes these standard header files: - ``<time.h>``, ``<sys/select.h>`` and ``<sys/time.h>``. If needed, they - should now be included explicitly. For example, ``<time.h>`` provides the - ``clock()`` and ``gmtime()`` functions, ``<sys/select.h>`` provides the - ``select()`` function, and ``<sys/time.h>`` provides the ``futimes()``, - ``gettimeofday()`` and ``setitimer()`` functions. Patch by Victor Stinner. - -- gh-108511: Add functions :c:func:`PyObject_HasAttrWithError`, - :c:func:`PyObject_HasAttrStringWithError`, - :c:func:`PyMapping_HasKeyWithError` and - :c:func:`PyMapping_HasKeyStringWithError`. - -- gh-107073: Add :c:func:`PyObject_VisitManagedDict` and - :c:func:`PyObject_ClearManagedDict` functions which must be called by the - traverse and clear functions of a type using - :c:macro:`Py_TPFLAGS_MANAGED_DICT` flag. Patch by Victor Stinner. - -- gh-108634: Python built with :file:`configure` :option:`--with-trace-refs` - (tracing references) now supports the :ref:`Limited API <limited-c-api>`. - Patch by Victor Stinner. - -- gh-108014: Add :c:func:`PyLong_AsInt` function: similar to - :c:func:`PyLong_AsLong`, but store the result in a C :c:expr:`int` instead - of a C :c:expr:`long`. Previously, it was known as the private function - :c:func:`!_PyLong_AsInt` (with an underscore prefix). Patch by Victor - Stinner. - -- gh-108314: Add :c:func:`PyDict_ContainsString` function: same as - :c:func:`PyDict_Contains`, but *key* is specified as a :c:expr:`const - char*` UTF-8 encoded bytes string, rather than a :c:expr:`PyObject*`. - Patch by Victor Stinner. - -- gh-108337: Add atomic operations on additional data types in pyatomic.h. - -- gh-108014: Add :c:func:`Py_IsFinalizing` function: check if the main - Python interpreter is :term:`shutting down <interpreter shutdown>`. Patch - by Victor Stinner. - -- gh-107916: C API functions :c:func:`PyErr_SetFromErrnoWithFilename`, - :c:func:`PyErr_SetExcFromWindowsErrWithFilename` and - :c:func:`PyErr_SetFromWindowsErrWithFilename` save now the error code - before calling :c:func:`PyUnicode_DecodeFSDefault`. - -- gh-107915: Such C API functions as ``PyErr_SetString()``, - ``PyErr_Format()``, ``PyErr_SetFromErrnoWithFilename()`` and many others - no longer crash or ignore errors if it failed to format the error message - or decode the filename. Instead, they keep a corresponding error. - -- gh-107810: Improve :exc:`DeprecationWarning` for uses of - :c:type:`PyType_Spec` with metaclasses that have custom ``tp_new``. - -- gh-107249: Implement the :c:macro:`Py_UNUSED` macro for Windows MSVC - compiler. Patch by Victor Stinner. - -- gh-107226: :c:func:`PyModule_AddObjectRef` is now only available in the - limited API version 3.10 or later. - -- gh-106320: Remove private ``_PyUnicode_AsString()`` alias to - :c:func:`PyUnicode_AsUTF8`. It was kept for backward compatibility with - Python 3.0 - 3.2. The :c:func:`PyUnicode_AsUTF8` is available since Python - 3.3. The :c:func:`PyUnicode_AsUTF8String` function can be used to keep - compatibility with Python 3.2 and older. Patch by Victor Stinner. - -- gh-106572: Convert :c:func:`PyObject_DelAttr` and - :c:func:`PyObject_DelAttrString` macros to functions. Patch by Victor - Stinner. - -- gh-106307: Add :c:func:`PyMapping_GetOptionalItem` function. - -- gh-106521: Add :c:func:`PyObject_GetOptionalAttr` and - :c:func:`PyObject_GetOptionalAttrString` functions. - -- gh-106320: Remove ``_PyInterpreterState_Get()`` alias to - :c:func:`PyInterpreterState_Get()` which was kept for backward - compatibility with Python 3.8. Patch by Victor Stinner. - -- gh-106316: Remove ``cpython/pytime.h`` header file: it only contained - private functions. Patch by Victor Stinner. - -- gh-106023: Remove private ``_PyObject_FastCall()`` function: use - ``PyObject_Vectorcall()`` which is available since Python 3.8 - (:pep:`590`). Patch by Victor Stinner. - -- gh-106168: If Python is built in :ref:`debug mode <debug-build>` or - :option:`with assertions <--with-assertions>`, :c:func:`PyTuple_SET_ITEM` - and :c:func:`PyList_SET_ITEM` now check the index argument with an - assertion. If the assertion fails, make sure that the size is set before. - Patch by Victor Stinner. - -- gh-106084: Remove the old aliases to functions calling functions which - were kept for backward compatibility with Python 3.8 provisional API: - - * ``_PyObject_CallMethodNoArgs()``: use ``PyObject_CallMethodNoArgs()`` - * ``_PyObject_CallMethodOneArg()``: use ``PyObject_CallMethodOneArg()`` - * ``_PyObject_CallOneArg()``: use ``PyObject_CallOneArg()`` - * ``_PyObject_FastCallDict()``: use ``PyObject_VectorcallDict()`` - * ``_PyObject_Vectorcall()``: use ``PyObject_Vectorcall()`` - * ``_PyObject_VectorcallMethod()``: use ``PyObject_VectorcallMethod()`` - * ``_PyVectorcall_Function()``: use ``PyVectorcall_Function()`` - - Just remove the underscore prefix to update your code. Patch by Victor - Stinner. - -- gh-106004: Adds :c:func:`PyDict_GetItemRef` and - :c:func:`PyDict_GetItemStringRef` functions: similar to - :c:func:`PyDict_GetItemWithError` but returning a :term:`strong reference` - instead of a :term:`borrowed reference`. Patch by Victor Stinner. - -- gh-105927: Deprecate the :c:func:`PyWeakref_GetObject` and - :c:func:`PyWeakref_GET_OBJECT` functions: use the new - :c:func:`PyWeakref_GetRef` function instead. Patch by Victor Stinner. - -- gh-105927: Add :c:func:`PyWeakref_GetRef` function: similar to - :c:func:`PyWeakref_GetObject` but returns a :term:`strong reference`, or - ``NULL`` if the referent is no longer live. Patch by Victor Stinner. - -- gh-105922: Add :c:func:`PyImport_AddModuleRef`: similar to - :c:func:`PyImport_AddModule`, but return a :term:`strong reference` - instead of a :term:`borrowed reference`. Patch by Victor Stinner. - -- gh-105227: The new :c:func:`PyType_GetDict` provides the dictionary for - the given type object that is normally exposed by ``cls.__dict__``. - Normally it's sufficient to use :c:member:`~PyTypeObject.tp_dict`, but for - the static builtin types :c:member:`!tp_dict` is now always ``NULL``. - :c:func:`!PyType_GetDict()` provides the correct dict object instead. - -- gh-105375: Fix a bug in :c:func:`PyErr_WarnExplicit` where an exception - could end up being overwritten if the API failed internally. - -- gh-105603: We've renamed the new (in 3.12) ``PyInterpreterConfig.own_gil`` - to ``PyInterpreterConfig.gil`` and changed the meaning of the value from - "bool" to an integer with supported values of - ``PyInterpreterConfig_DEFAULT_GIL``, ``PyInterpreterConfig_SHARED_GIL``, - and ``PyInterpreterConfig_OWN_GIL``. The default is "shared". - -- gh-105387: In the limited C API version 3.12, :c:func:`Py_INCREF` and - :c:func:`Py_DECREF` functions are now implemented as opaque function calls - to hide implementation details. Patch by Victor Stinner. - -- gh-105396: Deprecate the :c:func:`PyImport_ImportModuleNoBlock` function - which is just an alias to :c:func:`PyImport_ImportModule` since Python - 3.3. Patch by Victor Stinner. - -- gh-103968: :c:func:`PyType_FromMetaclass` now allows metaclasses with - ``tp_new`` set to ``NULL``. - -- gh-105268: Remove the old private, undocumented and untested - ``_PyGC_FINALIZED()`` macro which was kept for backward compatibility with - Python 3.8 and older. Patch by Victor Stinner. - -- gh-105182: Remove ``PyEval_AcquireLock()`` and ``PyEval_ReleaseLock()`` - functions, deprecated in Python 3.2. Patch by Victor Stinner. - -- gh-105182: Remove ``PyEval_InitThreads()`` and - ``PyEval_ThreadsInitialized()`` functions, deprecated in Python 3.9. Patch - by Victor Stinner. - -- gh-105145: Deprecate old Python initialization functions: - - * :c:func:`PySys_ResetWarnOptions` - * :c:func:`Py_GetExecPrefix` - * :c:func:`Py_GetPath` - * :c:func:`Py_GetPrefix` - * :c:func:`Py_GetProgramFullPath` - * :c:func:`Py_GetProgramName` - * :c:func:`Py_GetPythonHome` - - Patch by Victor Stinner. - -- gh-85275: ``PyObject_AsCharBuffer()``, ``PyObject_AsReadBuffer()``, - ``PyObject_CheckReadBuffer()``, and ``PyObject_AsWriteBuffer()`` are - removed. Please migrate to new buffer protocol; - :c:func:`PyObject_GetBuffer` and :c:func:`PyBuffer_Release`. - -- gh-105156: Deprecate the old ``Py_UNICODE`` and ``PY_UNICODE_TYPE`` types: - use directly the :c:type:`wchar_t` type instead. Since Python 3.3, - ``Py_UNICODE`` and ``PY_UNICODE_TYPE`` are just aliases to - :c:type:`wchar_t`. Patch by Victor Stinner. - -- gh-105145: Remove the following old functions to configure the Python - initialization, deprecated in Python 3.11: - - * ``PySys_AddWarnOptionUnicode()`` - * ``PySys_AddWarnOption()`` - * ``PySys_AddXOption()`` - * ``PySys_HasWarnOptions()`` - * ``PySys_SetArgvEx()`` - * ``PySys_SetArgv()`` - * ``PySys_SetPath()`` - * ``Py_SetPath()`` - * ``Py_SetProgramName()`` - * ``Py_SetPythonHome()`` - * ``Py_SetStandardStreamEncoding()`` - * ``_Py_SetProgramFullPath()`` - - Patch by Victor Stinner. - -- gh-105107: Remove functions deprecated in Python 3.9. - - * ``PyEval_CallObject()``, ``PyEval_CallObjectWithKeywords()``: use - :c:func:`PyObject_CallNoArgs` and :c:func:`PyObject_Call` (positional - arguments must not be *NULL*) instead. - * ``PyEval_CallFunction()``: use :c:func:`PyObject_CallFunction` instead. - * ``PyEval_CallMethod()``: use :c:func:`PyObject_CallMethod` instead. - * ``PyCFunction_Call()``: use :c:func:`PyObject_Call` instead. - - Patch by Victor Stinner. - -- gh-105115: ``PyTypeObject.tp_bases`` (and ``tp_mro``) for builtin static - types are now shared by all interpreters, whereas in 3.12-beta1 they were - stored on ``PyInterpreterState``. Also note that now the tuples are - immortal objects. - -- gh-105071: Add ``PyUnstable_Exc_PrepReraiseStar`` to the unstable C api to - expose the implementation of :keyword:`except* <except_star>`. - -- gh-104922: ``PY_SSIZE_T_CLEAN`` is no longer required to use ``'#'`` - formats in APIs like :c:func:`PyArg_ParseTuple` and - :c:func:`Py_BuildValue`. They uses ``Py_ssize_t`` for ``'#'`` regardless - ``PY_SSIZE_T_CLEAN``. - -- gh-104584: Add an unstable C API for hooking in an optimizer. This is - mainly internal, but marked "unstable" to allow third-party - experimentation. - -- gh-104668: Don't call :c:var:`PyOS_InputHook` or - :c:var:`PyOS_ReadlineFunctionPointer` in subinterpreters, since it's - generally difficult to avoid using global state in their registered - callbacks. This also avoids situations where extensions may find - themselves running in a subinterpreter they don't support (or haven't yet - been loaded in). - -- bpo-42327: Add :c:func:`PyModule_Add` function: similar to - :c:func:`PyModule_AddObjectRef` and :c:func:`PyModule_AddObject`, but - always steals a reference to the value. - -- bpo-40309: Properly handle trailing spaces before closing parenthesis in - :c:func:`Py_BuildValue` format strings. - - -What's New in Python 3.12.0 beta 1? -=================================== - -*Release date: 2023-05-22* - -Security --------- - -- gh-99889: Fixed a security in flaw in :func:`!uu.decode` that could allow - for directory traversal based on the input if no ``out_file`` was - specified. - -- gh-104049: Do not expose the local on-disk location in directory indexes - produced by :class:`http.client.SimpleHTTPRequestHandler`. - -- gh-99108: Upgrade built-in :mod:`hashlib` SHA3 implementation to a - verified implementation from the ``HACL*`` project. Used when OpenSSL is - not present or lacks SHA3. - -- gh-102153: :func:`urllib.parse.urlsplit` now strips leading C0 control and - space characters following the specification for URLs defined by WHATWG in - response to :cve:`2023-24329`. Patch by Illia Volochii. - -Library -------- - -- gh-102856: Implement PEP 701 changes in the :mod:`tokenize` module. Patch - by Marta Gómez Macías and Pablo Galindo Salgado - -Core and Builtins ------------------ - -- gh-104615: Fix wrong ordering of assignments in code like ``a, a = x, y``. - Contributed by Carl Meyer. - -- gh-104572: Improve syntax error message for invalid constructs in - :pep:`695` contexts and in annotations when ``from __future__ import - annotations`` is active. - -- gh-104482: Fix three error handling bugs in ast.c's validation of pattern - matching statements. - -- gh-102818: Do not add a frame to the traceback in the ``sys.setprofile`` - and ``sys.settrace`` trampoline functions. This ensures that frames are - not duplicated if an exception is raised in the callback function, and - ensures that frames are not omitted if a C callback is used and that does - not add the frame. - -- gh-104405: Fix an issue where some :term:`bytecode` instructions could - ignore :pep:`523` when "inlining" calls. - -- gh-103082: Change behavior of ``sys.monitoring.events.LINE`` events in - ``sys.monitoring``: Line events now occur when a new line is reached - dynamically, instead of using a static approximation, as before. This - makes the behavior very similar to that of "line" events in - ``sys.settrace``. This should ease porting of tools from 3.11 to 3.12. - -- gh-104263: Fix ``float("nan")`` to produce a quiet NaN on platforms (like - MIPS) where the meaning of the signalling / quiet bit is inverted from its - usual meaning. Also introduce a new macro ``Py_INFINITY`` matching C99's - ``INFINITY``, and refactor internals to rely on C99's ``NAN`` and - ``INFINITY`` macros instead of hard-coding bit patterns for infinities and - NaNs. Thanks Sebastian Berg. - -- gh-99113: Multi-phase init extension modules may now indicate that they - support running in subinterpreters that have their own GIL. This is done - by using ``Py_MOD_PER_INTERPRETER_GIL_SUPPORTED`` as the value for the - ``Py_mod_multiple_interpreters`` module def slot. Otherwise the module, - by default, cannot be imported in such subinterpreters. (This does not - affect the main interpreter or subinterpreters that do not have their own - GIL.) In addition to the isolation that multi-phase init already normally - requires, support for per-interpreter GIL involves one additional - constraint: thread-safety. If the module has external (linked) - dependencies and those libraries have any state that isn't thread-safe - then the module must do the additional work to add thread-safety. This - should be an uncommon case. - -- gh-99113: The GIL is now (optionally) per-interpreter. This is the - fundamental change for PEP 684. This is all made possible by virtue of - the isolated state of each interpreter in the process. The behavior of - the main interpreter remains unchanged. Likewise, interpreters created - using ``Py_NewInterpreter()`` are not affected. To get an interpreter - with its own GIL, call ``Py_NewInterpreterFromConfig()``. - -- gh-104108: Multi-phase init extension modules may now indicate whether or - not they actually support multiple interpreters. By default such modules - are expected to support use in multiple interpreters. In the uncommon - case that one does not, it may use the new - ``Py_mod_multiple_interpreters`` module def slot. A value of ``0`` means - the module does not support them. ``1`` means it does. The default is - ``1``. - -- gh-104142: Fix an issue where :class:`list` or :class:`tuple` repetition - could fail to respect :pep:`683`. - -- gh-104078: Improve the performance of :c:func:`PyObject_HasAttrString` - -- gh-104066: Improve the performance of :func:`hasattr` for module objects - with a missing attribute. - -- gh-104028: Reduce object creation while calling callback function from gc. - Patch by Donghee Na. - -- gh-104018: Disallow the "z" format specifier in %-format of bytes objects. - -- gh-102213: Fix performance loss when accessing an object's attributes with - ``__getattr__`` defined. - -- gh-103895: Improve handling of edge cases in showing - ``Exception.__notes__``. Ensures that the messages always end with a - newline and that string/bytes are not exploded over multiple lines. Patch - by Carey Metcalfe. - -- gh-103907: Don't modify the refcounts of known immortal objects - (:const:`True`, :const:`False`, and :const:`None`) in the main interpreter - loop. - -- gh-103899: Provide a helpful hint in the :exc:`TypeError` message when - accidentally calling a :term:`module` object that has a callable attribute - of the same name (such as :func:`dis.dis` or :class:`datetime.datetime`). - -- gh-103845: Remove both line and instruction instrumentation before adding - new ones for monitoring, to avoid newly added instrumentation being - removed immediately. - -- gh-103763: Implement :pep:`695`, adding syntactic support for generic - classes, generic functions, and type aliases. - - A new ``type X = ...`` syntax is added for type aliases, which resolves at - runtime to an instance of the new class ``typing.TypeAliasType``. The - value is lazily evaluated and is accessible through the ``.__value__`` - attribute. This is implemented as a new AST node ``ast.TypeAlias``. - - New syntax (``class X[T]: ...``, ``def func[T](): ...``) is added for - defining generic functions and classes. This is implemented as a new - ``type_params`` attribute on the AST nodes for classes and functions. This - node holds instances of the new AST classes ``ast.TypeVar``, - ``ast.ParamSpec``, and ``ast.TypeVarTuple``. - - ``typing.TypeVar``, ``typing.ParamSpec``, ``typing.ParamSpecArgs``, - ``typing.ParamSpecKwargs``, ``typing.TypeVarTuple``, and - ``typing.Generic`` are now implemented in C rather than Python. - - There are new bytecode instructions ``LOAD_LOCALS``, - ``LOAD_CLASSDICT_OR_GLOBAL``, and ``LOAD_CLASSDICT_OR_DEREF`` to support - correct resolution of names in class namespaces. - - Patch by Eric Traut, Larry Hastings, and Jelle Zijlstra. - -Library -------- - -- gh-103801: Adds three minor linting fixes to the wasm module caught that - were caught by ruff. - -- gh-103793: Optimized asyncio Task creation by deferring expensive string - formatting (task name generation) from Task creation to the first time - ``get_name`` is called. This makes asyncio benchmarks up to 5% faster. - -Core and Builtins ------------------ - -- gh-102310: Change the error range for invalid bytes literals. - -- gh-103590: Do not wrap a single exception raised from a ``try-except*`` - construct in an :exc:`ExceptionGroup`. - -- gh-103650: Change the perf map format to remove the '0x' prefix from the - addresses - -- gh-102856: Implement the required C tokenizer changes for PEP 701. Patch - by Pablo Galindo Salgado, Lysandros Nikolaou, Batuhan Taskaya, Marta Gómez - Macías and sunmy2019. - -- gh-100530: Clarify the error message raised when the called part of a - class pattern isn't actually a class. - -- gh-101517: Fix bug in line numbers of instructions emitted for - :keyword:`except* <except_star>`. - -- gh-103492: Clarify :exc:`SyntaxWarning` with literal ``is`` comparison by - specifying which literal is problematic, since comparisons using ``is`` - with e.g. ``None`` and bool literals are idiomatic. - -- gh-87729: Add :opcode:`LOAD_SUPER_ATTR` (and a specialization for - ``super().method()``) to speed up ``super().method()`` and - ``super().attr``. This makes ``super().method()`` roughly 2.3x faster and - brings it within 20% of the performance of a simple method call. Patch by - Vladimir Matveev and Carl Meyer. - -- gh-103488: Change the internal offset distinguishing yield and return - target addresses, so that the instruction pointer is correct for exception - handling and other stack unwinding. - -- gh-82012: The bitwise inversion operator (``~``) on bool is deprecated. It - returns the bitwise inversion of the underlying ``int`` representation - such that ``bool(~True) == True``, which can be confusing. Use ``not`` for - logical negation of bools. In the rare case that you really need the - bitwise inversion of the underlying ``int``, convert to int explicitly - ``~int(x)``. - -- gh-77757: Exceptions raised in a typeobject's ``__set_name__`` method are - no longer wrapped by a :exc:`RuntimeError`. Context information is added - to the exception as a :pep:`678` note. - -- gh-103333: :exc:`AttributeError` now retains the ``name`` attribute when - pickled and unpickled. - -- gh-103242: Migrate :meth:`~ssl.SSLContext.set_ecdh_curve` method not to - use deprecated OpenSSL APIs. Patch by Donghee Na. - -- gh-103323: We've replaced our use of ``_PyRuntime.tstate_current`` with a - thread-local variable. This is a fairly low-level implementation detail, - and there should be no change in behavior. - -- gh-84436: The implementation of PEP-683 which adds Immortal Objects by - using a fixed reference count that skips reference counting to make - objects truly immutable. - -- gh-102700: Allow built-in modules to be submodules. This allows submodules - to be statically linked into a CPython binary. - -- gh-103082: Implement :pep:`669` Low Impact Monitoring for CPython. - -- gh-88691: Reduce the number of inline :opcode:`CACHE` entries for - :opcode:`CALL`. - -- gh-102500: Make the buffer protocol accessible in Python code using the - new ``__buffer__`` and ``__release_buffer__`` magic methods. See - :pep:`688` for details. Patch by Jelle Zijlstra. - -- gh-97933: :pep:`709`: inline list, dict and set comprehensions to improve - performance and reduce bytecode size. - -- gh-99184: Bypass instance attribute access of ``__name__`` in ``repr`` of - :class:`weakref.ref`. - -- gh-98003: Complex function calls are now faster and consume no C stack - space. - -- bpo-39610: ``len()`` for 0-dimensional :class:`memoryview` objects (such - as ``memoryview(ctypes.c_uint8(42))``) now raises a :exc:`TypeError`. - Previously this returned ``1``, which was not consistent with - ``mem_0d[0]`` raising an :exc:`IndexError`. - -Library -------- - -- bpo-31821: Fix :func:`!pause_reading` to work when called from - :func:`!connection_made` in :mod:`asyncio`. - -- gh-104600: :func:`functools.update_wrapper` now sets the - ``__type_params__`` attribute (added by :pep:`695`). - -- gh-104340: When an ``asyncio`` pipe protocol loses its connection due to - an error, and the caller doesn't await ``wait_closed()`` on the - corresponding ``StreamWriter``, don't log a warning about an exception - that was never retrieved. After all, according to the - ``StreamWriter.close()`` docs, the ``wait_closed()`` call is optional - ("not mandatory"). - -- gh-104555: Fix issue where an :func:`issubclass` check comparing a class - ``X`` against a :func:`runtime-checkable protocol - <typing.runtime_checkable>` ``Y`` with non-callable members would not - cause :exc:`TypeError` to be raised if an :func:`isinstance` call had - previously been made comparing an instance of ``X`` to ``Y``. This issue - was present in edge cases on Python 3.11, but became more prominent in - 3.12 due to some unrelated changes that were made to runtime-checkable - protocols. Patch by Alex Waygood. - -- gh-104372: Refactored the ``_posixsubprocess`` internals to avoid Python C - API usage between fork and exec when marking ``pass_fds=`` file - descriptors inheritable. - -- gh-104484: Added *case_sensitive* argument to - :meth:`pathlib.PurePath.match` - -- gh-75367: Fix data descriptor detection in - :func:`inspect.getattr_static`. - -- gh-104536: Fix a race condition in the internal - :mod:`multiprocessing.process` cleanup logic that could manifest as an - unintended ``AttributeError`` when calling ``process.close()``. - -- gh-103857: Update datetime deprecations' stracktrace to point to the - calling line - -- gh-101520: Move the core functionality of the ``tracemalloc`` module in - the ``Python/`` folder, leaving just the module wrapper in ``Modules/``. - -- gh-104392: Remove undocumented and unused ``_paramspec_tvars`` attribute - from some classes in :mod:`typing`. - -- gh-102613: Fix issue where :meth:`pathlib.Path.glob` raised - :exc:`RecursionError` when walking deep directory trees. - -- gh-103000: Improve performance of :func:`dataclasses.asdict` for the - common case where *dict_factory* is ``dict``. Patch by David C Ellis. - -- gh-104301: Allow leading whitespace in disambiguated statements in - :mod:`pdb`. - -- gh-104139: Teach :func:`urllib.parse.unsplit` to retain the ``"//"`` when - assembling ``itms-services://?action=generate-bugs`` style `Apple Platform - Deployment - <https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web>`_ - URLs. - -- gh-104307: :func:`socket.getnameinfo` now releases the GIL while - contacting the DNS server - -- gh-104310: Users may now use ``importlib.util.allowing_all_extensions()`` - (a context manager) to temporarily disable the strict compatibility checks - for importing extension modules in subinterpreters. - -- gh-87695: Fix issue where :meth:`pathlib.Path.glob` raised :exc:`OSError` - when it encountered a symlink to an overly long path. - -- gh-104265: Prevent possible crash by disallowing instantiation of the - :class:`!_csv.Reader` and :class:`!_csv.Writer` types. The regression was - introduced in 3.10.0a4 with PR 23224 (:issue:`14935`). Patch by Radislav - Chugunov. - -- gh-102613: Improve performance of :meth:`pathlib.Path.glob` when expanding - recursive wildcards ("``**``") by merging adjacent wildcards and - de-duplicating results only when necessary. - -- gh-65772: Remove unneeded comments and code in turtle.py. - -- gh-90208: Fixed issue where :meth:`pathlib.Path.glob` returned incomplete - results when it encountered a :exc:`PermissionError`. This method now - suppresses all :exc:`OSError` exceptions, except those raised from calling - :meth:`~pathlib.Path.is_dir` on the top-level path. - -- gh-104144: Optimize :class:`asyncio.TaskGroup` when using - :func:`asyncio.eager_task_factory`. Skip scheduling a done callback if a - TaskGroup task completes eagerly. - -- gh-104144: Optimize :func:`asyncio.gather` when using - :func:`asyncio.eager_task_factory` to complete eagerly if all fututres - completed eagerly. Avoid scheduling done callbacks for futures that - complete eagerly. - -- gh-104114: Fix issue where :meth:`pathlib.Path.glob` returns paths using - the case of non-wildcard segments for corresponding path segments, rather - than the real filesystem case. - -- gh-104104: Improve performance of :meth:`pathlib.Path.glob` by using - :const:`re.IGNORECASE` to implement case-insensitive matching. - -- gh-104102: Improve performance of :meth:`pathlib.Path.glob` when - evaluating patterns that contain ``'../'`` segments. - -- gh-103822: Update the return type of ``weekday`` to the newly added Day - attribute - -- gh-103629: Update the ``repr`` of :class:`typing.Unpack` according to - :pep:`692`. - -- gh-103963: Make :mod:`dis` display the names of the args for - :opcode:`!CALL_INTRINSIC_*`. - -- gh-104035: Do not ignore user-defined ``__getstate__`` and - ``__setstate__`` methods for slotted frozen dataclasses. - -- gh-103987: In :mod:`mmap`, fix several bugs that could lead to access to - memory-mapped files after they have been invalidated. - -- gh-103977: Improve import time of :mod:`platform` module. - -- gh-88773: Added :func:`turtle.teleport` to the :mod:`turtle` module to - move a turtle to a new point without tracing a line, visible or invisible. - Patch by Liam Gersten. - -- gh-103935: Use :func:`io.open_code` for files to be executed instead of - raw :func:`open` - -- gh-68968: Fixed garbled output of :meth:`~unittest.TestCase.assertEqual` - when an input lacks final newline. - -- gh-100370: Fix potential :exc:`OverflowError` in - :meth:`sqlite3.Connection.blobopen` for 32-bit builds. Patch by Erlend E. - Aasland. - -- gh-102628: Substitute CTRL-D with CTRL-Z in :mod:`sqlite3` CLI banner when - running on Windows. - -- gh-103636: Module-level attributes ``January`` and ``February`` are - deprecated from :mod:`calendar`. - -- gh-103583: Isolate :mod:`!_multibytecodec` and codecs extension modules. - Patches by Erlend E. Aasland. - -- gh-103848: Add checks to ensure that ``[`` bracketed ``]`` hosts found by - :func:`urllib.parse.urlsplit` are of IPv6 or IPvFuture format. - -- gh-103872: Update the bundled copy of pip to version 23.1.2. - -- gh-99944: Make :mod:`dis` display the value of oparg of - :opcode:`!KW_NAMES`. - -- gh-74940: The C.UTF-8 locale is no longer converted to en_US.UTF-8, - enabling the use of UTF-8 encoding on systems which have no locales - installed. - -- gh-103861: Fix ``zipfile.Zipfile`` creating invalid zip files when - ``force_zip64`` was used to add files to them. Patch by Carey Metcalfe. - -- gh-103857: Deprecated :meth:`datetime.datetime.utcnow` and - :meth:`datetime.datetime.utcfromtimestamp`. (Patch by Paul Ganssle) - -- gh-103839: Avoid compilation error due to tommath.h not being found when - building Tkinter against Tcl 8.7 built with bundled libtommath. - -- gh-103791: :class:`contextlib.suppress` now supports suppressing - exceptions raised as part of an :exc:`ExceptionGroup`. If other exceptions - exist on the group, they are re-raised in a group that does not contain - the suppressed exceptions. - -- gh-90750: Use :meth:`datetime.datetime.fromisocalendar` in the - implementation of :meth:`datetime.datetime.strptime`, which should now - accept only valid ISO dates. (Patch by Paul Ganssle) - -- gh-103685: Prepare :meth:`tkinter.Menu.index` for Tk 8.7 so that it does - not raise ``TclError: expected integer but got ""`` when it should return - ``None``. - -- gh-81403: :class:`urllib.request.CacheFTPHandler` no longer raises - :class:`URLError` if a cached FTP instance is reused. ftplib's endtransfer - method calls voidresp to drain the connection to handle FTP instance reuse - properly. - -- gh-103699: Add ``__orig_bases__`` to non-generic TypedDicts, call-based - TypedDicts, and call-based NamedTuples. Other TypedDicts and NamedTuples - already had the attribute. - -- gh-103693: Add convenience variable feature to :mod:`pdb` - -- gh-92248: Deprecate ``type``, ``choices``, and ``metavar`` parameters of - ``argparse.BooleanOptionalAction``. - -- gh-89415: Add :mod:`socket` constants for source-specific multicast. Patch - by Reese Hyde. - -- gh-103673: :mod:`socketserver` gains ``ForkingUnixStreamServer`` and - ``ForkingUnixDatagramServer`` classes. Patch by Jay Berry. - -- gh-103636: Added Enum for months and days in the calendar module. - -- gh-84976: Create a new ``Lib/_pydatetime.py`` file that defines the Python - version of the ``datetime`` module, and make ``datetime`` import the - contents of the new library only if the C implementation is missing. - Currently, the full Python implementation is defined and then deleted if - the C implementation is not available, slowing down ``import datetime`` - unnecessarily. - -- gh-103596: Attributes/methods are no longer shadowed by same-named enum - members, although they may be shadowed by enum.property's. - -- gh-103584: Updated ``importlib.metadata`` with changes from - ``importlib_metadata`` 5.2 through 6.5.0, including: Support - ``installed-files.txt`` for ``Distribution.files`` when present. - ``PackageMetadata`` now stipulates an additional ``get`` method allowing - for easy querying of metadata keys that may not be present. - ``packages_distributions`` now honors packages and modules with Python - modules that not ``.py`` sources (e.g. ``.pyc``, ``.so``). Expand protocol - for ``PackageMetadata.get_all`` to match the upstream implementation of - ``email.message.Message.get_all`` in python/typeshed#9620. Deprecated use - of ``Distribution`` without defining abstract methods. Deprecated - expectation that ``PackageMetadata.__getitem__`` will return ``None`` for - missing keys. In the future, it will raise a ``KeyError``. - -- gh-103578: Fixed a bug where :mod:`pdb` crashes when reading source file - with different encoding by replacing :func:`io.open` with - :func:`io.open_code`. The new method would also call into the hook set by - :c:func:`PyFile_SetOpenCodeHook`. - -- gh-103556: Now creating :class:`inspect.Signature` objects with - positional-only parameter with a default followed by a - positional-or-keyword parameter without one is impossible. - -- gh-103559: Update the bundled copy of pip to version 23.1.1. - -- gh-103548: Improve performance of :meth:`pathlib.Path.absolute` and - :meth:`~pathlib.Path.cwd` by joining paths only when necessary. Also - improve performance of :meth:`pathlib.PurePath.is_absolute` on Posix by - skipping path parsing and normalization. - -- gh-103538: Remove ``_tkinter`` module code guarded by definition of the - ``TK_AQUA`` macro which was only needed for Tk 8.4.7 or earlier and was - never actually defined by any build system or documented for manual use. - -- gh-103533: Update :mod:`cProfile` to use PEP 669 API - -- gh-103525: Fix misleading exception message when mixed ``str`` and - ``bytes`` arguments are supplied to :class:`pathlib.PurePath` and - :class:`~pathlib.Path`. - -- gh-103489: Add :meth:`~sqlite3.Connection.getconfig` and - :meth:`~sqlite3.Connection.setconfig` to :class:`~sqlite3.Connection` to - make configuration changes to a database connection. Patch by Erlend E. - Aasland. - -- gh-103365: Set default Flag boundary to ``STRICT`` and fix bitwise - operations. - -- gh-103472: Avoid a potential :exc:`ResourceWarning` in - :class:`http.client.HTTPConnection` by closing the proxy / tunnel's - CONNECT response explicitly. - -- gh-103462: Fixed an issue with using - :meth:`~asyncio.WriteTransport.writelines` in :mod:`asyncio` to send very - large payloads that exceed the amount of data that can be written in one - call to :meth:`socket.socket.send` or :meth:`socket.socket.sendmsg`, - resulting in the remaining buffer being left unwritten. - -- gh-103449: Fix a bug in doc string generation in - :func:`dataclasses.dataclass`. - -- gh-103092: Isolate :mod:`!_collections` (apply :pep:`687`). Patch by - Erlend E. Aasland. - -- gh-103357: Added support for :class:`logging.Formatter` ``defaults`` - parameter to :func:`logging.config.dictConfig` and - :func:`logging.config.fileConfig`. Patch by Bar Harel. - -- gh-103092: Adapt the :mod:`winreg` extension module to :pep:`687`. - -- gh-74690: The performance of :func:`isinstance` checks against - :func:`runtime-checkable protocols <typing.runtime_checkable>` has been - considerably improved for protocols that only have a few members. To - achieve this improvement, several internal implementation details of the - :mod:`typing` module have been refactored, including - ``typing._ProtocolMeta.__instancecheck__``, - ``typing._is_callable_members_only``, and ``typing._get_protocol_attrs``. - Patches by Alex Waygood. - -- gh-74690: The members of a runtime-checkable protocol are now considered - "frozen" at runtime as soon as the class has been created. See - :ref:`"What's new in Python 3.12" <whatsnew-typing-py312>` for more - details. - -- gh-103256: Fixed a bug that caused :mod:`hmac` to raise an exception when - the requested hash algorithm was not available in OpenSSL despite being - available separately as part of ``hashlib`` itself. It now falls back - properly to the built-in. This could happen when, for example, your - OpenSSL does not include SHA3 support and you want to compute - ``hmac.digest(b'K', b'M', 'sha3_256')``. - -- gh-102778: Support ``sys.last_exc`` in :mod:`idlelib`. - -- gh-103285: Improve performance of :func:`ast.get_source_segment`. - -- gh-103225: Fix a bug in :mod:`pdb` when displaying line numbers of - module-level source code. - -- gh-103092: Adapt the :mod:`msvcrt` extension module to :pep:`687`. - -- gh-103092: Adapt the :mod:`winsound` extension module to :pep:`687`. - -- gh-93910: Remove deprecation of enum ``member.member`` access. - -- gh-102978: Fixes :func:`unittest.mock.patch` not enforcing function - signatures for methods decorated with ``@classmethod`` or - ``@staticmethod`` when patch is called with ``autospec=True``. - -- gh-103092: Isolate :mod:`!_socket` (apply :pep:`687`). Patch by Erlend E. - Aasland. - -- gh-100479: Add :meth:`pathlib.PurePath.with_segments`, which creates a - path object from arguments. This method is called whenever a derivative - path is created, such as from :attr:`pathlib.PurePath.parent`. Subclasses - may override this method to share information between path objects. - -- gh-103220: Fix issue where :func:`os.path.join` added a slash when joining - onto an incomplete UNC drive with a trailing slash on Windows. - -- gh-103204: Fixes :mod:`http.server` accepting HTTP requests with HTTP - version numbers preceded by '+', or '-', or with digit-separating '_' - characters. The length of the version numbers is also constrained. - -- gh-75586: Fix various Windows-specific issues with ``shutil.which``. - -- gh-103193: Improve performance of :func:`inspect.getattr_static`. Patch by - Alex Waygood. - -- gh-103176: :func:`sys._current_exceptions` now returns a mapping from - thread-id to an exception instance, rather than to a ``(typ, exc, tb)`` - tuple. - -- gh-103143: Polish the help messages and docstrings of :mod:`pdb`. - -- gh-103015: Add *entrypoint* keyword-only parameter to - :meth:`sqlite3.Connection.load_extension`, for overriding the SQLite - extension entry point. Patch by Erlend E. Aasland. - -- gh-103000: Improve performance of :func:`dataclasses.astuple` and - :func:`dataclasses.asdict` in cases where the contents are common Python - types. - -- gh-102953: The extraction methods in :mod:`tarfile`, and - :func:`shutil.unpack_archive`, have a new a *filter* argument that allows - limiting tar features than may be surprising or dangerous, such as - creating files outside the destination directory. See - :ref:`tarfile-extraction-filter` for details. - -- gh-97696: Implemented an eager task factory in asyncio. When used as a - task factory on an event loop, it performs eager execution of coroutines. - Coroutines that are able to complete synchronously (e.g. return or raise - without blocking) are returned immediately as a finished task, and the - task is never scheduled to the event loop. If the coroutine blocks, the - (pending) task is scheduled and returned. - -- gh-81079: Add *case_sensitive* keyword-only argument to - :meth:`pathlib.Path.glob` and :meth:`~pathlib.Path.rglob`. - -- gh-101819: Isolate the :mod:`io` extension module by applying :pep:`687`. - Patch by Kumar Aditya, Victor Stinner, and Erlend E. Aasland. - -- gh-91896: Deprecate :class:`collections.abc.ByteString` - -- gh-101362: Speed up :class:`pathlib.Path` construction by omitting the - path anchor from the internal list of path parts. - -- gh-102114: Functions in the :mod:`dis` module that accept a source code - string as argument now print a more concise traceback when the string - contains a syntax or indentation error. - -- gh-62432: The :mod:`unittest` runner will now exit with status code 5 if - no tests were run. It is common for test runner misconfiguration to fail - to find any tests, this should be an error. - -- gh-78079: Fix incorrect normalization of UNC device path roots, and - partial UNC share path roots, in :class:`pathlib.PurePath`. Pathlib no - longer appends a trailing slash to such paths. - -- gh-85984: Add :func:`tty.cfmakeraw` and :func:`tty.cfmakecbreak` to - :mod:`tty` and modernize, the behavior of :func:`tty.setraw` and - :func:`tty.setcbreak` to use POSIX.1-2017 Chapter 11 "General Terminal - Interface" flag masks by default. - -- gh-101688: Implement :func:`types.get_original_bases` to provide further - introspection for types. - -- gh-101640: :class:`argparse.ArgumentParser` now catches errors when - writing messages, such as when :data:`sys.stderr` is ``None``. Patch by - Oleg Iarygin. - -- gh-83861: Fix datetime.astimezone method return value when invoked on a - naive datetime instance that represents local time falling in a timezone - transition gap. PEP 495 requires that instances with fold=1 produce - earlier times than those with fold=0 in this case. - -- gh-89550: Decrease execution time of some :mod:`gzip` file writes by 15% - by adding more appropriate buffering. - -- gh-95299: Remove the bundled setuptools wheel from ``ensurepip``, and stop - installing setuptools in environments created by ``venv``. - -- gh-99353: Respect the :class:`http.client.HTTPConnection` ``.debuglevel`` - flag in :class:`urllib.request.AbstractHTTPHandler` when its constructor - parameter ``debuglevel`` is not set. And do the same for ``*HTTPS*``. - -- gh-98040: Remove the long-deprecated ``imp`` module. - -- gh-97850: Deprecate :func:`!pkgutil.find_loader` and - :func:`!pkgutil.get_loader` in favor of :func:`importlib.util.find_spec`. - -- gh-94473: Flatten arguments in :meth:`tkinter.Canvas.coords`. It now - accepts not only ``x1, y1, x2, y2, ...`` and ``[x1, y1, x2, y2, ...]``, - but also ``(x1, y1), (x2, y2), ...`` and ``[(x1, y1), (x2, y2), ...]``. - -- gh-98040: Remove more deprecated importlib APIs: ``find_loader()``, - ``find_module()``, ``importlib.abc.Finder``, ``pkgutil.ImpImporter``, - ``pkgutil.ImpLoader``. - -- gh-96522: Fix potential deadlock in pty.spawn() - -- gh-96534: Support divert(4) added in FreeBSD 14. - -- gh-87474: Fix potential file descriptor leaks in - :class:`subprocess.Popen`. - -- gh-94906: Support multiple steps in :func:`math.nextafter`. Patch by - Shantanu Jain and Matthias Gorgens. - -- gh-51574: Make :func:`tempfile.mkdtemp` return absolute paths when its - *dir* parameter is relative. - -- gh-94518: Convert private :meth:`!_posixsubprocess.fork_exec` to use - Argument Clinic. - -- gh-92184: When creating zip files using :mod:`zipfile`, ``os.altsep``, if - not ``None``, will always be treated as a path separator even when it is - not ``/``. Patch by Carey Metcalfe. - -- bpo-46797: Deprecation warnings are now emitted for :class:`!ast.Num`, - :class:`!ast.Bytes`, :class:`!ast.Str`, :class:`!ast.NameConstant` and - :class:`!ast.Ellipsis`. These have been documented as deprecated since - Python 3.8, and will be removed in Python 3.14. - -- bpo-44844: Enables :mod:`webbrowser` to detect and launch Microsoft Edge - browser. - -- bpo-45606: Fixed the bug in :meth:`pathlib.Path.glob` -- previously a - dangling symlink would not be found by this method when the pattern is an - exact match, but would be found when the pattern contains a wildcard or - the recursive wildcard (``**``). With this change, a dangling symlink will - be found in both cases. - -- bpo-23041: Add :const:`~csv.QUOTE_STRINGS` and :const:`~csv.QUOTE_NOTNULL` - to the suite of :mod:`csv` module quoting styles. - -- bpo-24964: Added - :meth:`http.client.HTTPConnection.get_proxy_response_headers` that - provides access to the HTTP headers on a proxy server response to the - ``CONNECT`` request. - -- bpo-17258: :mod:`multiprocessing` now supports stronger HMAC algorithms - for inter-process connection authentication rather than only HMAC-MD5. - -- bpo-39744: Make :func:`asyncio.subprocess.Process.communicate` close the - subprocess's stdin even when called with ``input=None``. - -- bpo-22708: http.client CONNECT method tunnel improvements: Use HTTP 1.1 - protocol; send a matching Host: header with CONNECT, if one is not - provided; convert IDN domain names to Punycode. Patch by Michael Handler. - -Documentation -------------- - -- gh-67056: Document that the effect of registering or unregistering an - :mod:`atexit` cleanup function from within a registered cleanup function - is undefined. - -- gh-103629: Mention the new way of typing ``**kwargs`` with ``Unpack`` and - ``TypedDict`` introduced in :pep:`692`. - -- gh-48241: Clarifying documentation about the url parameter to - urllib.request.urlopen and urllib.request.Request needing to be encoded - properly. - -- gh-86094: Add support for Unicode Path Extra Field in ZipFile. Patch by - Yeojin Kim and Andrea Giudiceandrea - -- gh-99202: Fix extension type from documentation for compiling in C++20 - mode - -Tests ------ - -- gh-104494: Update ``test_pack_configure_in`` and - ``test_place_configure_in`` for changes to error message formatting in Tk - 8.7. - -- gh-104461: Run test_configure_screen on X11 only, since the ``DISPLAY`` - environment variable and ``-screen`` option for toplevels are not useful - on Tk for Win32 or Aqua. - -- gh-86275: Added property-based tests to the :mod:`zoneinfo` tests, along - with stubs for the ``hypothesis`` interface. (Patch by Paul Ganssle) - -- gh-103329: Regression tests for the behaviour of - ``unittest.mock.PropertyMock`` were added. - -- gh-102795: fix use of poll in test_epoll's test_control_and_wait - -- gh-75729: Fix the :func:`os.spawn* <os.spawnl>` tests failing on Windows - when the working directory or interpreter path contains spaces. - -Build ------ - -- gh-101282: BOLT optimization is now applied to the libpython shared - library if building a shared library. BOLT instrumentation and application - settings can now be influenced via the ``BOLT_INSTRUMENT_FLAGS`` and - ``BOLT_APPLY_FLAGS`` configure variables. - -- gh-99017: ``PYTHON_FOR_REGEN`` now require Python 3.10 or newer. - -- gh-104490: Define ``.PHONY`` / virtual make targets consistently and - properly. - -- gh-104106: Add gcc fallback of mkfifoat/mknodat for macOS. Patch by - Donghee Na. - -- gh-103532: The ``TKINTER_PROTECT_LOADTK`` macro is no longer defined or - used in the ``_tkinter`` module. It was previously only defined when - building against Tk 8.4.13 and older, but Tk older than 8.5.12 has been - unsupported since gh-issue-91152. - -- gh-99069: Extended workaround defining ``static_assert`` when missing from - the libc headers to all clang and gcc builds. In particular, this fixes - building on macOS <= 10.10. - -- gh-100220: Changed the default value of the ``SHELL`` Makefile variable - from ``/bin/sh`` to ``/bin/sh -e`` to ensure that complex recipes - correctly fail after an error. Previously, ``make install`` could fail to - install some files and yet return a successful result. - -- gh-90656: Add platform triplets for 64-bit LoongArch: - - * loongarch64-linux-gnusf - * loongarch64-linux-gnuf32 - * loongarch64-linux-gnu - - Patch by Zhang Na. - -Windows -------- - -- gh-104623: Update Windows installer to use SQLite 3.42.0. - -- gh-82814: Fix a potential ``[Errno 13] Permission denied`` when using - :func:`shutil.copystat` within Windows Subsystem for Linux (WSL) on a - mounted filesystem by adding ``errno.EACCES`` to the list of ignored - errors within the internal implementation. - -- gh-103088: Fix virtual environment :file:`activate` script having - incorrect line endings for Cygwin. - -- gh-103088: Fixes venvs not working in bash on Windows across different - disks - -- gh-102997: Update Windows installer to use SQLite 3.41.2. - -- gh-88013: Fixed a bug where :exc:`TypeError` was raised when calling - :func:`ntpath.realpath` with a bytes parameter in some cases. - -macOS ------ - -- gh-99834: Update macOS installer to Tcl/Tk 8.6.13. - -- gh-104623: Update macOS installer to SQLite 3.42.0. - -- gh-103545: Add ``os.PRIO_DARWIN_THREAD``, ``os.PRIO_DARWIN_PROCESS``, - ``os.PRIO_DARWIN_BG`` and ``os.PRIO_DARWIN_NONUI``. These can be used with - ``os.setpriority`` to run the process at a lower priority and make use of - the efficiency cores on Apple Silicon systems. - -- gh-104180: Support reading SOCKS proxy configuration from macOS System - Configuration. Patch by Sam Schott. - -- gh-60436: update curses textbox to additionally handle backspace using the - ``curses.ascii.DEL`` key press. - -- gh-102997: Update macOS installer to SQLite 3.41.2. - -IDLE ----- - -- gh-104499: Fix completions for Tk Aqua 8.7 (currently blank). - -- gh-104496: About prints both tcl and tk versions if different (expected - someday). - -- gh-88496: Fix IDLE test hang on macOS. - -Tools/Demos ------------ - -- gh-104389: Argument Clinic C converters now accept the ``unused`` keyword, - for wrapping a parameter with :c:macro:`Py_UNUSED`. Patch by Erlend E. - Aasland. - -C API ------ - -- gh-101291: Added unstable C API for extracting the value of "compact" - integers: :c:func:`PyUnstable_Long_IsCompact` and - :c:func:`PyUnstable_Long_CompactValue`. - -- gh-104109: We've added ``Py_NewInterpreterFromConfig()`` and - ``PyInterpreterConfig`` to the public C-API (but not the stable ABI; not - yet at least). The new function may be used to create a new interpreter - with various features configured. The function was added to support PEP - 684 (per-interpreter GIL). - -- gh-103968: :c:func:`PyType_FromSpec` and its variants now allow creating - classes whose metaclass overrides :c:member:`~PyTypeObject.tp_new`. The - ``tp_new`` is ignored. This behavior is deprecated and will be disallowed - in 3.14+. The new :c:func:`PyType_FromMetaclass` already disallows it. - -- gh-103743: Add :c:func:`PyUnstable_Object_GC_NewWithExtraData` function - that can be used to allocate additional memory after an object for data - not managed by Python. - -- gh-103295: Introduced :c:func:`PyUnstable_WritePerfMapEntry`, - :c:func:`PyUnstable_PerfMapState_Init` and - :c:func:`PyUnstable_PerfMapState_Fini`. These allow extension modules (JIT - compilers in particular) to write to perf-map files in a thread safe - manner. The :doc:`../howto/perf_profiling` also uses these APIs to write - entries in the perf-map file. - -- gh-103509: Added C API for extending types whose instance memory layout is - opaque: :c:member:`PyType_Spec.basicsize` can now be zero or negative, - :c:func:`PyObject_GetTypeData` can be used to get subclass-specific data, - and :c:macro:`Py_TPFLAGS_ITEMS_AT_END` can be used to safely extend - variable-size objects. See :pep:`697` for details. - -- gh-103091: Add a new C-API function to eagerly assign a version tag to a - PyTypeObject: ``PyUnstable_Type_AssignVersionTag()``. - -- gh-101408: :c:macro:`PyObject_GC_Resize` should calculate preheader size - if needed. Patch by Donghee Na. - -- gh-98836: Add support of more formatting options (left aligning, octals, - uppercase hexadecimals, :c:type:`intmax_t`, :c:type:`ptrdiff_t`, - :c:type:`wchar_t` C strings, variable width and precision) in - :c:func:`PyUnicode_FromFormat` and :c:func:`PyUnicode_FromFormatV`. - -- gh-96803: Add unstable C-API functions to get the code object, lasti and - line number from the internal ``_PyInterpreterFrame`` in the limited API. - The functions are: - - * ``PyCodeObject * PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame)`` - * ``int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame)`` - * ``int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame)`` - - -What's New in Python 3.12.0 alpha 7? -==================================== - -*Release date: 2023-04-04* - -Core and Builtins ------------------ - -- gh-102192: Deprecated ``_PyErr_ChainExceptions`` in favour of - ``_PyErr_ChainExceptions1``. - -- gh-89987: Reduce the number of inline :opcode:`CACHE` entries for - :opcode:`BINARY_SUBSCR`. - -- gh-102859: Removed :opcode:`!JUMP_IF_FALSE_OR_POP` and - :opcode:`!JUMP_IF_TRUE_OR_POP` instructions. - -- gh-101975: Fixed ``stacktop`` value on tracing entries to avoid corruption - on garbage collection. - -- gh-102778: Add :data:`sys.last_exc` and deprecate :data:`sys.last_type`, - :data:`sys.last_value` and :data:`sys.last_traceback`, which hold the same - information in its legacy form. - -- gh-100982: Replace all occurrences of ``COMPARE_AND_BRANCH`` with - :opcode:`COMPARE_OP`. - -- gh-102701: Fix overflow when creating very large dict. - -- gh-102755: Add :c:func:`PyErr_DisplayException` which takes just an - exception instance, to replace the legacy :c:func:`PyErr_Display` which - takes the ``(typ, exc, tb)`` triplet. - -- gh-102594: Add note to exception raised in ``PyErr_SetObject`` when - normalization fails. - -- gh-90997: Shrink the number of inline :opcode:`CACHE` entries used by - :opcode:`LOAD_GLOBAL`. - -Library -------- - -- gh-102491: Improve import time of ``platform`` by removing IronPython - version parsing. The IronPython version parsing was not functional (see - https://github.com/IronLanguages/ironpython3/issues/1667). - -Core and Builtins ------------------ - -- gh-101291: Rearrage bits in first field (after header) of PyLongObject. * - Bits 0 and 1: 1 - sign. I.e. 0 for positive numbers, 1 for zero and 2 for - negative numbers. * Bit 2 reserved (probably for the immortal bit) * Bits - 3+ the unsigned size. - - This makes a few operations slightly more efficient, and will enable a - more compact and faster 2s-complement representation of most ints in - future. - -- gh-102397: Fix segfault from race condition in signal handling during - garbage collection. Patch by Kumar Aditya. - -- gh-102406: :mod:`codecs` encoding/decoding errors now get the context - information (which operation and which codecs) attached as :pep:`678` - notes instead of through chaining a new instance of the exception. - -- gh-102281: Fix potential nullptr dereference and use of uninitialized - memory in fileutils. Patch by Max Bachmann. - -- gh-102300: Reuse operands with refcount of 1 in float specializations of - BINARY_OP. - -- gh-102213: Fix performance loss when accessing an object's attributes with - ``__getattr__`` defined. - -- gh-102255: Improve build support for the Xbox. Patch by Max Bachmann. - -Build ------ - -- gh-102027: Fix SSE2 and SSE3 detection in ``_blake2`` internal module. - Patch by Max Bachmann. - -Core and Builtins ------------------ - -- gh-101865: Deprecate ``co_lnotab`` in code objects, schedule it for - removal in Python 3.14 - -Library -------- - -- bpo-1635741: Adapt :mod:`!_pickle` to :pep:`687`. Patch by Mohamed Koubaa - and Erlend Aasland. - -- gh-103085: Pure python :func:`locale.getencoding` will not warn - deprecation. - -- gh-103068: It's no longer possible to register conditional breakpoints in - :class:`~pdb.Pdb` that raise :exc:`SyntaxError`. Patch by Tian Gao. - -- gh-102549: Don't ignore exceptions in member type creation. - -- gh-103056: Ensure final ``_generate_next_value_`` is a ``staticmethod``. - -- gh-103046: Display current line label correctly in :mod:`dis` when - ``show_caches`` is False and ``lasti`` points to a CACHE entry. - -- gh-102433: :func:`isinstance` checks against :func:`runtime-checkable - protocols <typing.runtime_checkable>` now use - :func:`inspect.getattr_static` rather than :func:`hasattr` to lookup - whether attributes exist. This means that descriptors and - :meth:`~object.__getattr__` methods are no longer unexpectedly evaluated - during ``isinstance()`` checks against runtime-checkable protocols. - However, it may also mean that some objects which used to be considered - instances of a runtime-checkable protocol may no longer be considered - instances of that protocol on Python 3.12+, and vice versa. Most users are - unlikely to be affected by this change. Patch by Alex Waygood. - -- gh-103023: It's no longer possible to register expressions to display in - :class:`~pdb.Pdb` that raise :exc:`SyntaxError`. Patch by Tian Gao. - -- gh-102947: Improve traceback when :func:`dataclasses.fields` is called on - a non-dataclass. Patch by Alex Waygood - -- gh-102780: The :class:`asyncio.Timeout` context manager now works reliably - even when performing cleanup due to task cancellation. Previously it - could raise a :exc:`~asyncio.CancelledError` instead of an - :exc:`~asyncio.TimeoutError` in such cases. - -- gh-102871: Remove support for obsolete browsers from :mod:`webbrowser`. - Removed browsers include Grail, Mosaic, Netscape, Galeon, Skipstone, - Iceape, Firebird, and Firefox versions 35 and below. - -- gh-102839: Improve performance of :func:`math.log` arguments handling by - removing the argument clinic. - -- gh-102828: Add the ``onexc`` arg to :func:`shutil.rmtree`, which is like - ``onerror`` but expects an exception instance rather than an exc_info - tuple. Deprecate ``onerror``. - -- gh-88965: typing: Fix a bug relating to substitution in custom classes - generic over a :class:`~typing.ParamSpec`. Previously, if the - ``ParamSpec`` was substituted with a parameters list that itself contained - a :class:`~typing.TypeVar`, the ``TypeVar`` in the parameters list could - not be subsequently substituted. This is now fixed. - - Patch by Nikita Sobolev. - -- gh-76846: Fix issue where ``__new__()`` and ``__init__()`` methods of - :class:`pathlib.PurePath` and :class:`~pathlib.Path` subclasses were not - called in some circumstances. - -- gh-78530: :func:`asyncio.wait` now accepts generators yielding tasks. - Patch by Kumar Aditya. - -- gh-102748: :func:`asyncio.iscoroutine` now returns ``False`` for - generators as :mod:`asyncio` does not support legacy generator-based - coroutines. Patch by Kumar Aditya. - -- gh-102670: Optimized fmean(), correlation(), covariance(), and - linear_regression() using the new math.sumprod() function. - -- gh-102615: Typing: Improve the ``repr`` of generic aliases for classes - generic over a :class:`~typing.ParamSpec`. (Use square brackets to - represent a parameter list.) - -- gh-100112: :meth:`asyncio.Task.get_coro` now always returns a coroutine - when wrapping an awaitable object. Patch by Kumar Aditya. - -- gh-102578: Speed up setting or deleting mutable attributes on - non-dataclass subclasses of frozen dataclasses. Due to the implementation - of ``__setattr__`` and ``__delattr__`` for frozen dataclasses, this - previously had a time complexity of *O*\ (*n*). It now has a time - complexity of *O*\ (1). - -- gh-102519: Add :func:`os.listdrives`, :func:`os.listvolumes` and - :func:`os.listmounts` functions on Windows for enumerating drives, volumes - and mount points - -- gh-74468: Attribute name of the extracted :mod:`tarfile` file object now - holds filename of itself rather than of the archive it is contained in. - Patch by Oleg Iarygin. - -- gh-102378: Private helper method - ``inspect._signature_strip_non_python_syntax`` will no longer strip ``/`` - from the input string. - -- gh-79940: Add :func:`inspect.getasyncgenstate` and - :func:`inspect.getasyncgenlocals`. Patch by Thomas Krennwallner. - -- gh-102103: Add ``module`` argument to :func:`dataclasses.make_dataclass` - and make classes produced by it pickleable. - -- gh-102069: Fix ``__weakref__`` descriptor generation for custom - dataclasses. - -- gh-102038: Skip a ``stat`` in :mod:`site` if we have already found a - ``pyvenv.cfg`` - -- gh-98886: Fix issues when defining dataclasses that have fields with - specific underscore names that aren't clearly reserved by - :mod:`dataclasses`. - -- gh-101673: Fix a :mod:`pdb` bug where ``ll`` clears the changes to local - variables. - -- gh-101313: Added -h and --help arguments to the webbrowser CLI - -- gh-100372: :meth:`ssl.SSLContext.load_verify_locations` no longer - incorrectly accepts some cases of trailing data when parsing DER. - -- gh-89727: Fix pathlib.Path.walk RecursionError on deep directory trees by - rewriting it using iteration instead of recursion. - -- gh-100131: Added an optional ``delete`` keyword argument to - :class:`tempfile.TemporaryDirectory`. - -- gh-48330: Added ``--durations`` command line option, showing the N slowest - test cases. :class:`unittest.TextTestRunner` and - :class:`unittest.TextTestResult` constructors accept a new *durations* - keyword argument. Subclasses should take this into account or accept - ``**kwargs``. Added :meth:`unittest.TestResult.addDuration` method and - :attr:`unittest.TestResult.collectedDurations` attribute. - - (Contributed by Giampaolo Rodola) - -- gh-98169: Fix :func:`dataclasses.astuple` crash when - :class:`collections.defaultdict` is present in the attributes. - -- gh-96931: Fix incorrect results from :meth:`ssl.SSLSocket.shared_ciphers` - -- gh-95495: When built against OpenSSL 3.0, the :mod:`ssl` module had a bug - where it reported unauthenticated EOFs (i.e. without close_notify) as a - clean TLS-level EOF. It now raises :exc:`~ssl.SSLEOFError`, matching the - behavior in previous versions of OpenSSL. The - :attr:`~ssl.SSLContext.options` attribute on :class:`~ssl.SSLContext` also - no longer includes :const:`~ssl.OP_IGNORE_UNEXPECTED_EOF` by default. This - option may be set to specify the previous OpenSSL 3.0 behavior. - -- gh-94684: Now :func:`uuid.uuid3` and :func:`uuid.uuid5` functions support - :class:`bytes` objects as their *name* argument. - -- gh-94440: Fix a :mod:`concurrent.futures.process` bug where - ``ProcessPoolExecutor`` shutdown could hang after a future has been - quickly submitted and canceled. - -- gh-72346: Added deprecation warning to *isdst* parameter of - :func:`email.utils.localtime`. - -- bpo-36305: Fix handling of Windows filenames that resemble drives, such as - ``./a:b``, in :mod:`pathlib`. - -Documentation -------------- - -- gh-103112: Add docstring to :meth:`http.client.HTTPResponse.read` to fix - ``pydoc`` output. - -Tests ------ - -- gh-102980: Improve test coverage on :mod:`pdb`. - -- gh-102537: Adjust the error handling strategy in - ``test_zoneinfo.TzPathTest.python_tzpath_context``. Patch by Paul Ganssle. - -- gh-101377: Improved test_locale_calendar_formatweekday of calendar. - -Build ------ - -- gh-102973: Add a dev container (along with accompanying Dockerfile) for - development purposes. - -- gh-102711: Fix ``-Wstrict-prototypes`` compiler warnings. - -Windows -------- - -- gh-102690: Update :mod:`webbrowser` to fall back to Microsoft Edge instead - of Internet Explorer. - -- gh-99726: Improves correctness of stat results for Windows, and uses - faster API when available - -Tools/Demos ------------ - -- gh-102809: ``Misc/gdbinit`` was removed. - -C API ------ - -- gh-102013: Add a new (unstable) C-API function for iterating over GC'able - objects using a callback: ``PyUnstable_VisitObjects``. - - -What's New in Python 3.12.0 alpha 6? -==================================== - -*Release date: 2023-03-07* - -Security --------- - -- gh-99108: Replace builtin hashlib implementations of MD5 and SHA1 with - verified ones from the HACL* project. - -- gh-101727: Updated the OpenSSL version used in Windows and macOS binary - release builds to 1.1.1t to address :cve:`2023-0286`, :cve:`2022-4303`, - and :cve:`2022-4303` per `the OpenSSL 2023-02-07 security advisory - <https://openssl-library.org/news/secadv/20230207.txt>`_. - -- gh-99108: Replace the builtin :mod:`hashlib` implementations of SHA2-384 - and SHA2-512 originally from LibTomCrypt with formally verified, - side-channel resistant code from the `HACL* - <https://github.com/hacl-star/hacl-star/>`_ project. The builtins remain a - fallback only used when OpenSSL does not provide them. - -- gh-101283: :class:`subprocess.Popen` now uses a safer approach to find - ``cmd.exe`` when launching with ``shell=True``. Patch by Eryk Sun, based - on a patch by Oleg Iarygin. - -Core and Builtins ------------------ - -- gh-102493: Fix regression in semantics of normalisation in - ``PyErr_SetObject``. - -- gh-102416: Do not memoize incorrectly automatically generated loop rules - in the parser. Patch by Pablo Galindo. - -- gh-102356: Fix a bug that caused a crash when deallocating deeply nested - filter objects. Patch by Marta Gómez Macías. - -- gh-102336: Cleanup Windows 7 specific special handling. Patch by Max - Bachmann. - -- gh-102250: Fixed a segfault occurring when the interpreter calls a - ``__bool__`` method that raises. - -- gh-102126: Fix deadlock at shutdown when clearing thread states if any - finalizer tries to acquire the runtime head lock. Patch by Kumar Aditya. - -- gh-102027: Use ``GetCurrentProcessId`` on Windows when ``getpid`` is - unavailable. Patch by Max Bachmann. - -- gh-102056: Fix error handling bugs in interpreter's exception printing - code, which could cause a crash on infinite recursion. - -- gh-100982: Restrict the scope of the :opcode:`FOR_ITER_RANGE` instruction - to the scope of the original :opcode:`FOR_ITER` instruction, to allow - instrumentation. - -- gh-101967: Fix possible segfault in ``positional_only_passed_as_keyword`` - function, when new list created. - -- gh-101952: Fix possible segfault in ``BUILD_SET`` opcode, when new set - created. - -- gh-74895: :mod:`socket.getaddrinfo` no longer raises - :class:`OverflowError` for :class:`int` **port** values outside of the C - long range. Out of range values are left up to the underlying string based - C library API to report. A :class:`socket.gaierror` ``SAI_SERVICE`` may - occur instead, or no error at all as not all platform C libraries generate - an error. - -- gh-101799: Add :opcode:`CALL_INTRINSIC_2` and use it instead of - :opcode:`!PREP_RERAISE_STAR`. - -- gh-101857: Fix xattr support detection on Linux systems by widening the - check to linux, not just glibc. This fixes support for musl. - -- gh-84783: Make the slice object hashable. Patch by Will Bradshaw and - Furkan Onder. - -- gh-87849: Change the ``SEND`` instruction to leave the receiver on the - stack. This allows the specialized form of ``SEND`` to skip the chain of C - calls and jump directly to the ``RESUME`` in the generator or coroutine. - -- gh-101765: Fix SystemError / segmentation fault in iter ``__reduce__`` - when internal access of ``builtins.__dict__`` keys mutates the iter - object. - -- gh-101430: Update :mod:`tracemalloc` to handle presize of object properly. - Patch by Donghee Na. - -- gh-101696: Invalidate type version tag in ``_PyStaticType_Dealloc`` for - static types, avoiding bug where a false cache hit could crash the - interpreter. Patch by Kumar Aditya. - -- gh-101632: Adds a new :opcode:`RETURN_CONST` instruction. - -- gh-100719: Remove gi_code field from generator (and coroutine and async - generator) objects as it is redundant. The frame already includes a - reference to the code object. - -- gh-98627: When an interpreter is configured to check (and only then), - importing an extension module will now fail when the extension does not - support multiple interpreters (i.e. doesn't implement PEP 489 multi-phase - init). This does not apply to the main interpreter, nor to subinterpreters - created with ``Py_NewInterpreter()``. - -Library -------- - -- gh-102302: Micro-optimise hashing of :class:`inspect.Parameter`, reducing - the time it takes to hash an instance by around 40%. - -- gh-101979: Fix a bug where parentheses in the ``metavar`` argument to - :meth:`argparse.ArgumentParser.add_argument` were dropped. Patch by Yeojin - Kim. - -- gh-91038: :meth:`platform.platform` now has boolean default arguments. - -- gh-81652: Add :const:`mmap.MAP_ALIGNED_SUPER` FreeBSD and - :const:`mmap.MAP_CONCEAL` OpenBSD constants to :mod:`mmap`. Patch by - Yeojin Kim. - -- gh-102179: Fix :func:`os.dup2` error message for negative fds. - -- gh-101961: For the binary mode, :func:`fileinput.hookcompressed` doesn't - set the ``encoding`` value even if the value is ``None``. Patch by Gihwan - Kim. - -- gh-101936: The default value of ``fp`` becomes :class:`io.BytesIO` if - :exc:`~urllib.error.HTTPError` is initialized without a designated ``fp`` - parameter. Patch by Long Vo. - -- gh-101566: In zipfile, sync Path with `zipp 3.14 - <https://zipp.readthedocs.io/en/latest/history.html#v3-14-0>`_, including - fix for extractall on the underlying zipfile after being wrapped in - ``Path``. - -- gh-97930: Apply changes from `importlib_resources 5.12 - <https://importlib-resources.readthedocs.io/en/latest/history.html#v5-12-0>`_, - including fix for ``MultiplexedPath`` to support directories in multiple - namespaces (python/importlib_resources#265). - -- gh-101997: Upgrade pip wheel bundled with ensurepip (pip 23.0.1) - -- gh-99108: The built-in extension modules for :mod:`hashlib` SHA2 - algorithms, used when OpenSSL does not provide them, now live in a single - internal ``_sha2`` module instead of separate ``_sha256`` and ``_sha512`` - modules. - -- gh-101892: Callable iterators no longer raise :class:`SystemError` when - the callable object exhausts the iterator but forgets to either return a - sentinel value or raise :class:`StopIteration`. - -- gh-87634: Remove locking behavior from :func:`functools.cached_property`. - -- gh-97786: Fix potential undefined behaviour in corner cases of - floating-point-to-time conversions. - -- gh-101517: Fixed bug where :mod:`bdb` looks up the source line with - :mod:`linecache` with a ``lineno=None``, which causes it to fail with an - unhandled exception. - -- gh-101773: Optimize :class:`fractions.Fraction` for small components. The - private argument ``_normalize`` of the :class:`fractions.Fraction` - constructor has been removed. - -- gh-101693: In :meth:`sqlite3.Cursor.execute`, :exc:`DeprecationWarning` is - now emitted when :ref:`named placeholders <sqlite3-placeholders>` are used - together with parameters supplied as a :term:`sequence` instead of as a - :class:`dict`. Starting from Python 3.14, using named placeholders with - parameters supplied as a sequence will raise a - :exc:`~sqlite3.ProgrammingError`. Patch by Erlend E. Aasland. - -- gh-101446: Change repr of :class:`collections.OrderedDict` to use regular - dictionary formatting instead of pairs of keys and values. - -- gh-101362: Speed up :class:`pathlib.PurePath` construction by handling - arguments more uniformly. When a :class:`pathlib.Path` argument is - supplied, we use its string representation rather than joining its parts - with :func:`os.path.join`. - -- gh-101362: Speed up :class:`pathlib.PurePath` construction by calling - :func:`os.path.join` only when two or more arguments are given. - -- gh-101362: Speed up :class:`pathlib.Path` construction by running the path - flavour compatibility check only when pathlib is imported. - -- gh-85984: Refactored the implementation of :func:`pty.fork` to use - :func:`os.login_tty`. - - A :exc:`DeprecationWarning` is now raised by ``pty.master_open()`` and - ``pty.slave_open()``. They were undocumented and deprecated long long ago - in the docstring in favor of :func:`pty.openpty`. - -- gh-101561: Add a new decorator :func:`typing.override`. See :pep:`698` for - details. Patch by Steven Troxler. - -- gh-63301: Set exit code when :mod:`tabnanny` CLI exits on error. - -- gh-101360: Fix anchor matching in :meth:`pathlib.PureWindowsPath.match`. - Path and pattern anchors are now matched with :mod:`fnmatch`, just like - other path parts. This allows patterns such as ``"*:/Users/*"`` to be - matched. - -- gh-101277: Remove global state from :mod:`itertools` module (:pep:`687`). - Patches by Erlend E. Aasland. - -- gh-100809: Fix handling of drive-relative paths (like 'C:' and 'C:foo') in - :meth:`pathlib.Path.absolute`. This method now uses the OS API to retrieve - the correct current working directory for the drive. - -- gh-99138: Apply :pep:`687` to :mod:`zoneinfo`. Patch by Erlend E. Aasland. - -- gh-96764: :func:`asyncio.wait_for` now uses :func:`asyncio.timeout` as its - underlying implementation. Patch by Kumar Aditya. - -- gh-88233: Correctly preserve "extra" fields in ``zipfile`` regardless of - their ordering relative to a zip64 "extra." - -- bpo-23224: Fix segfaults when creating :class:`lzma.LZMADecompressor` and - :class:`bz2.BZ2Decompressor` objects without calling ``__init__()``, and - fix leakage of locks and internal buffers when calling the ``__init__()`` - methods of :class:`lzma.LZMADecompressor`, :class:`lzma.LZMACompressor`, - :class:`bz2.BZ2Compressor`, and :class:`bz2.BZ2Decompressor` objects - multiple times. - -Documentation -------------- - -- gh-85417: Update :mod:`cmath` documentation to clarify behaviour on branch - cuts. - -- gh-97725: Fix :meth:`asyncio.Task.print_stack` description for - ``file=None``. Patch by Oleg Iarygin. - -Tests ------ - -- gh-102019: Fix deadlock on shutdown if ``test_current_{exception,frames}`` - fails. Patch by Jacob Bower. - -- gh-85984: Utilize new "winsize" functions from termios in pty tests. - -- gh-89792: ``test_tools`` now copies up to 10x less source data to a - temporary directory during the ``freeze`` test by ignoring git metadata - and other artifacts. It also limits its python build parallelism based on - os.cpu_count instead of hard coding it as 8 cores. - -Build ------ - -- gh-99942: On Android, in a static build, python-config in embed mode no - longer incorrectly reports a library to link to. - -- gh-99942: On Android, python.pc now correctly reports the library to link - to, the same as python-config.sh. - -- gh-100221: Fix creating install directories in ``make sharedinstall`` if - they exist outside ``DESTDIR`` already. - -- gh-96821: Explicitly mark C extension modules that need defined signed - integer overflow, and add a configure option - :option:`--with-strict-overflow`. Patch by Matthias Görgens and Shantanu - Jain. - -Windows -------- - -- gh-102344: Implement ``winreg.QueryValue`` using ``QueryValueEx`` and - ``winreg.SetValue`` using ``SetValueEx``. Patch by Max Bachmann. - -- gh-101881: Handle read and write operations on non-blocking pipes properly - on Windows. - -- gh-101881: Add support for the os.get_blocking() and os.set_blocking() - functions on Windows. - -- gh-101849: Ensures installer will correctly upgrade existing ``py.exe`` - launcher installs. - -- gh-101763: Updates copy of libffi bundled with Windows installs to 3.4.4. - -- gh-101759: Update Windows installer to SQLite 3.40.1. - -- gh-101614: Correctly handle extensions built against debug binaries that - reference ``python3_d.dll``. - -- gh-101196: The functions ``os.path.isdir``, ``os.path.isfile``, - ``os.path.islink`` and ``os.path.exists`` are now 13% to 28% faster on - Windows, by making fewer Win32 API calls. - -macOS ------ - -- gh-101759: Update macOS installer to SQLite 3.40.1. - -C API ------ - -- gh-101907: Removes use of non-standard C++ extension in public header - files. - -- gh-99293: Document that the Py_TPFLAGS_VALID_VERSION_TAG is an internal - feature, should not be used, and will be removed. - -- gh-101578: Add :c:func:`PyErr_GetRaisedException` and - :c:func:`PyErr_SetRaisedException` for saving and restoring the current - exception. These functions return and accept a single exception object, - rather than the triple arguments of the now-deprecated - :c:func:`PyErr_Fetch` and :c:func:`PyErr_Restore`. This is less error - prone and a bit more efficient. - - Add :c:func:`PyException_GetArgs` and :c:func:`PyException_SetArgs` as - convenience functions for retrieving and modifying the - :attr:`~BaseException.args` passed to the exception's constructor. - -- gh-91744: Introduced the *Unstable C API tier*, marking APi that is - allowed to change in minor releases without a deprecation period. See - :pep:`689` for details. - - -What's New in Python 3.12.0 alpha 5? -==================================== - -*Release date: 2023-02-07* - -Security --------- - -- gh-99108: Replace the builtin :mod:`hashlib` implementations of SHA2-224 - and SHA2-256 originally from LibTomCrypt with formally verified, - side-channel resistant code from the `HACL* - <https://github.com/hacl-star/hacl-star/>`_ project. The builtins remain a - fallback only used when OpenSSL does not provide them. - -Core and Builtins ------------------ - -- gh-92173: Fix the ``defs`` and ``kwdefs`` arguments to - :c:func:`PyEval_EvalCodeEx` and a reference leak in that function. - -- gh-59956: The GILState API is now partially compatible with - subinterpreters. Previously, ``PyThreadState_GET()`` and - ``PyGILState_GetThisThreadState()`` would get out of sync, causing - inconsistent behavior and crashes. - -- gh-101400: Fix wrong lineno in exception message on :keyword:`continue` or - :keyword:`break` which are not in a loop. Patch by Donghee Na. - -- gh-101372: Fix :func:`~unicodedata.is_normalized` to properly handle the - UCD 3.2.0 cases. Patch by Donghee Na. - -- gh-101266: Fix :func:`sys.getsizeof` reporting for :class:`int` - subclasses. - -- gh-101291: Refactor the ``PyLongObject`` struct into a normal Python - object header and a ``PyLongValue`` struct. - -- gh-101046: Fix a possible memory leak in the parser when raising - :exc:`MemoryError`. Patch by Pablo Galindo - -- gh-101037: Fix potential memory underallocation issue for instances of - :class:`int` subclasses with value zero. - -- gh-100762: Record the (virtual) exception block depth in the oparg of - :opcode:`YIELD_VALUE`. Use this to avoid the expensive ``throw()`` when - closing generators (and coroutines) that can be closed trivially. - -- gh-100982: Adds a new :opcode:`COMPARE_AND_BRANCH` instruction. This is a - bit more efficient when performing a comparison immediately followed by a - branch, and restores the design intent of PEP 659 that specializations are - local to a single instruction. - -- gh-100942: Fixed segfault in property.getter/setter/deleter that occurred - when a property subclass overrode the ``__new__`` method to return a - non-property instance. - -- gh-100923: Remove the ``mask`` cache entry for the :opcode:`COMPARE_OP` - instruction and embed the mask into the oparg. - -- gh-100892: Fix race while iterating over thread states in clearing - :class:`threading.local`. Patch by Kumar Aditya. - -- gh-91351: Fix a case where re-entrant imports could corrupt the import - deadlock detection code and cause a :exc:`KeyError` to be raised out of - :mod:`importlib/_bootstrap`. In addition to the straightforward cases, - this could also happen when garbage collection leads to a warning being - emitted -- as happens when it collects an open socket or file) - -- gh-100726: Optimize construction of ``range`` object for medium size - integers. - -- gh-100712: Added option to build cpython with specialization disabled, by - setting ``ENABLE_SPECIALIZATION=False`` in :mod:`opcode`, followed by - ``make regen-all``. - -Library -------- - -- bpo-32780: Inter-field padding is now inserted into the PEP3118 format - strings obtained from :class:`ctypes.Structure` objects, reflecting their - true representation in memory. - -- gh-101541: [Enum] - fix psuedo-flag creation - -- gh-101570: Upgrade pip wheel bundled with ensurepip (pip 23.0) - -- gh-101323: Fix a bug where errors where not thrown by - zlib._ZlibDecompressor if encountered during decompressing. - -- gh-101317: Add *ssl_shutdown_timeout* parameter for - :meth:`asyncio.StreamWriter.start_tls`. - -- gh-101326: Fix regression when passing ``None`` as second or third - argument to ``FutureIter.throw``. - -- gh-92123: Adapt the ``_elementtree`` extension module to multi-phase init - (:pep:`489`). Patches by Erlend E. Aasland. - -- gh-100795: Avoid potential unexpected ``freeaddrinfo`` call (double free) - in :mod:`socket` when when a libc ``getaddrinfo()`` implementation leaves - garbage in an output pointer when returning an error. Original patch by - Sergey G. Brester. - -- gh-101143: Remove unused references to :class:`~asyncio.TimerHandle` in - ``asyncio.base_events.BaseEventLoop._add_callback``. - -- gh-101144: Make :func:`zipfile.Path.open` and - :func:`zipfile.Path.read_text` also accept ``encoding`` as a positional - argument. This was the behavior in Python 3.9 and earlier. 3.10 - introduced a regression where supplying it as a positional argument would - lead to a :exc:`TypeError`. - -- gh-94518: Group-related variables of ``_posixsubprocess`` module are - renamed to stress that supplementary group affinity is added to a fork, - not replace the inherited ones. Patch by Oleg Iarygin. - -- gh-101015: Fix :func:`typing.get_type_hints` on ``'*tuple[...]'`` and - ``*tuple[...]``. It must not drop the ``Unpack`` part. - -- gh-101000: Add :func:`os.path.splitroot`, which splits a path into a - 3-item tuple ``(drive, root, tail)``. This new function is used by - :mod:`pathlib` to improve the performance of path construction by up to a - third. - -- gh-100573: Fix a Windows :mod:`asyncio` bug with named pipes where a - client doing ``os.stat()`` on the pipe would cause an error in the server - that disabled serving future requests. - -- gh-39615: :func:`warnings.warn` now has the ability to skip stack frames - based on code filename prefix rather than only a numeric ``stacklevel`` - via the new ``skip_file_prefixes`` keyword argument. - -- gh-100750: pass encoding kwarg to subprocess in platform - -- gh-100160: Emit a deprecation warning in - :meth:`asyncio.DefaultEventLoopPolicy.get_event_loop` if there is no - current event loop set and it decides to create one. - -- gh-96290: Fix handling of partial and invalid UNC drives in - ``ntpath.splitdrive()``, and in ``ntpath.normpath()`` on non-Windows - systems. Paths such as '\\server' and '\\' are now considered by - ``splitdrive()`` to contain only a drive, and consequently are not - modified by ``normpath()`` on non-Windows systems. The behaviour of - ``normpath()`` on Windows systems is unaffected, as native OS APIs are - used. Patch by Eryk Sun, with contributions by Barney Gale. - -- gh-99952: Fix a reference undercounting issue in :class:`ctypes.Structure` - with ``from_param()`` results larger than a C pointer. - -- gh-67790: Add float-style formatting support for - :class:`fractions.Fraction` instances. - -- gh-99266: Preserve more detailed error messages in :mod:`ctypes`. - -- gh-86682: Ensure runtime-created collections have the correct module name - using the newly added (internal) :func:`sys._getframemodulename`. - -- gh-88597: :mod:`uuid` now has a command line interface. Try ``python -m - uuid -h``. - -- gh-60580: :data:`ctypes.wintypes.BYTE` definition changed from - :data:`~ctypes.c_byte` to :data:`~ctypes.c_ubyte` to match Windows SDK. - Patch by Anatoly Techtonik and Oleg Iarygin. - -- gh-94518: ``_posixsubprocess`` now initializes all UID and GID variables - using a reserved ``-1`` value instead of a separate flag. Patch by Oleg - Iarygin. - -- bpo-38941: The :mod:`xml.etree.ElementTree` module now emits - :exc:`DeprecationWarning` when testing the truth value of an - :class:`xml.etree.ElementTree.Element`. Before, the Python implementation - emitted :exc:`FutureWarning`, and the C implementation emitted nothing. - -- bpo-40077: Convert :mod:`elementtree` types to heap types. Patch by Erlend - E. Aasland. - -- bpo-29847: Fix a bug where :class:`pathlib.Path` accepted and ignored - keyword arguments. Patch provided by Yurii Karabas. - -- gh-77772: :class:`ctypes.CDLL`, :class:`ctypes.OleDLL`, - :class:`ctypes.WinDLL`, and :class:`ctypes.PyDLL` now accept - :term:`path-like objects <path-like object>` as their ``name`` argument. - Patch by Robert Hoelzl. - -Documentation -------------- - -- gh-88324: Reword :mod:`subprocess` to emphasize default behavior of - *stdin*, *stdout*, and *stderr* arguments. Remove inaccurate statement - about child file handle inheritance. - -Tests ------ - -- gh-101334: ``test_tarfile`` has been updated to pass when run as a high - UID. - -Build ------ - -- gh-101282: Update BOLT configuration not to use deprecated usage of - ``--split functions``. Patch by Donghee Na. - -- gh-101522: Allow overriding Windows dependencies versions and paths using - MSBuild properties. - -- gh-77532: Minor fixes to allow building with ``PlatformToolset=ClangCL`` - on Windows. - -- gh-101152: In accordance with :PEP:`699`, the ``ma_version_tag`` field in - :c:type:`PyDictObject` is deprecated for extension modules. Accessing this - field will generate a compiler warning at compile time. This field will be - removed in Python 3.14. - -- gh-100340: Allows -Wno-int-conversion for wasm-sdk 17 and onwards, thus - enables building WASI builds once against the latest sdk. - -- gh-101060: Conditionally add ``-fno-reorder-blocks-and-partition`` in - configure. Effectively fixes ``--enable-bolt`` when using Clang, as this - appears to be a GCC-only flag. - -- gh-98705: ``__bool__`` is defined in AIX system header files which breaks - the build in AIX, so undefine it. - -- gh-98636: Fix a regression in detecting ``gdbm_compat`` library for the - ``_gdbm`` module build. - -- gh-96305: ``_aix_support`` now uses a simple code to get platform details - rather than the now non-existent ``_bootsubprocess`` during bootstrap. - -Windows -------- - -- gh-101543: Ensure the install path in the registry is only used when the - standard library hasn't been located in any other way. - -- gh-101467: The ``py.exe`` launcher now correctly filters when only a - single runtime is installed. It also correctly handles prefix matches on - tags so that ``-3.1`` does not match ``3.11``, but would still match - ``3.1-32``. - -- gh-99834: Updates bundled copy of Tcl/Tk to 8.6.13.0 - -- gh-101135: Restore ability to launch older 32-bit versions from the - :file:`py.exe` launcher when both 32-bit and 64-bit installs of the same - version are available. - -- gh-82052: Fixed an issue where writing more than 32K of Unicode output to - the console screen in one go can result in mojibake. - -- gh-100320: Ensures the ``PythonPath`` registry key from an install is used - when launching from a different copy of Python that relies on an existing - install to provide a copy of its modules and standard library. - -- gh-100247: Restores support for the :file:`py.exe` launcher finding - shebang commands in its configuration file using the full command name. - - -What's New in Python 3.12.0 alpha 4? -==================================== - -*Release date: 2023-01-10* - -Core and Builtins ------------------ - -- gh-100776: Fix misleading default value in :func:`input`'s - ``__text_signature__``. - -- gh-99005: Remove :opcode:`!UNARY_POSITIVE`, :opcode:`!ASYNC_GEN_WRAP` and - :opcode:`!LIST_TO_TUPLE`, replacing them with intrinsics. - -- gh-99005: Add new :opcode:`CALL_INTRINSIC_1` instruction. Remove - :opcode:`IMPORT_STAR`, :opcode:`PRINT_EXPR` and - :opcode:`STOPITERATION_ERROR`, replacing them with the - :opcode:`CALL_INTRINSIC_1` instruction. - -- gh-100288: Remove the LOAD_ATTR_METHOD_WITH_DICT specialized instruction. - Stats show it is not useful. - -- gh-100720: Added ``_PyFrame_NumSlotsForCodeObject``, which returns the - number of slots needed in a frame for a given code object. - -- gh-100719: Removed the co_nplaincellvars field from the code object, as it - is redundant. - -- gh-100637: Fix :func:`int.__sizeof__` calculation to include the 1-element - ``ob_digit`` array for ``0`` and ``False``. - -- gh-100649: Update the native_thread_id field of PyThreadState after fork. - -- gh-100126: Fix an issue where "incomplete" frames could be briefly visible - to C code while other frames are being torn down, possibly resulting in - corruption or hard crashes of the interpreter while running finalizers. - -- gh-87447: Fix :exc:`SyntaxError` on comprehension rebind checking with - names that are not actually redefined. - - Now reassigning ``b`` in ``[(b := 1) for a, b.prop in some_iter]`` is - allowed. Reassigning ``a`` is still disallowed as per :pep:`572`. - -- gh-100268: Add :meth:`int.is_integer` to improve duck type compatibility - between :class:`int` and :class:`float`. - -- gh-100425: Improve the accuracy of ``sum()`` with compensated summation. - -Library -------- - -- gh-100374: Fix incorrect result and delay in :func:`socket.getfqdn`. Patch - by Dominic Socular. - -Core and Builtins ------------------ - -- gh-100357: Convert ``vars``, ``dir``, ``next``, ``getattr``, and ``iter`` - to argument clinic. - -- gh-100117: Improve the output of :meth:`codeobject.co_lines` by emitting - only one entry for each line range. - -- gh-90043: Handle NaNs when specializing :opcode:`COMPARE_OP` for - :class:`float` values. - -- gh-100222: Redefine the ``_Py_CODEUNIT`` typedef as a union to describe - its layout to the C compiler, avoiding type punning and improving clarity. - -- gh-99955: Internal compiler functions (in compile.c) now consistently - return -1 on error and 0 on success. - -- gh-100188: The ``BINARY_SUBSCR_LIST_INT`` and ``BINARY_SUBSCR_TUPLE_INT`` - instructions are no longer used for negative integers because those - instructions always miss when encountering negative integers. - -- gh-99110: Initialize frame->previous in frameobject.c to fix a - segmentation fault when accessing frames created by :c:func:`PyFrame_New`. - -- gh-94155: Improved the hashing algorithm for code objects, mitigating some - hash collisions. - -- gh-99540: ``None`` now hashes to a constant value. This is not a - requirements change. - -- gh-100143: When built with ``--enable-pystats``, stats collection is now - off by default. To enable it early at startup, pass the ``-Xpystats`` - flag. Stats are now always dumped, even if switched off. - -- gh-100146: Improve ``BUILD_LIST`` opcode so that it works similarly to the - ``BUILD_TUPLE`` opcode, by stealing references from the stack rather than - repeatedly using stack operations to set list elements. Implementation - details are in a new private API :c:func:`!_PyList_FromArraySteal`. - -- gh-100110: Specialize ``FOR_ITER`` for tuples. - -- gh-100050: Honor existing errors obtained when searching for mismatching - parentheses in the tokenizer. Patch by Pablo Galindo - -- gh-92216: Improve the performance of :func:`hasattr` for type objects with - a missing attribute. - -- gh-99582: Freeze :mod:`zipimport` module into ``_bootstrap_python``. - -- gh-99554: Pack debugging location tables more efficiently during bytecode - compilation. - -- gh-98522: Add an internal version number to code objects, to give better - versioning of inner functions and comprehensions, and thus better - specialization of those functions. This change is invisible to both Python - and C extensions. - -- gh-94603: Improve performance of ``list.pop`` for small lists. - -Library -------- - -- gh-89051: Add :const:`ssl.OP_LEGACY_SERVER_CONNECT` - -Core and Builtins ------------------ - -- bpo-32782: ``ctypes`` arrays of length 0 now report a correct itemsize - when a ``memoryview`` is constructed from them, rather than always giving - a value of 0. - -Library -------- - -- gh-100833: Speed up :func:`math.fsum` by removing defensive ``volatile`` - qualifiers. - -- gh-100805: Modify :func:`random.choice` implementation to once again work - with NumPy arrays. - -- gh-100813: Add :const:`socket.IP_PKTINFO` constant. - -- gh-100792: Make :meth:`email.message.Message.__contains__` twice as fast. - -- gh-91851: Microoptimizations for :meth:`fractions.Fraction.__round__`, - :meth:`fractions.Fraction.__ceil__` and - :meth:`fractions.Fraction.__floor__`. - -- gh-90104: Avoid RecursionError on ``repr`` if a dataclass field definition - has a cyclic reference. - -- gh-100689: Fix crash in :mod:`pyexpat` by statically allocating - ``PyExpat_CAPI`` capsule. - -- gh-100740: Fix ``unittest.mock.Mock`` not respecting the spec for - attribute names prefixed with ``assert``. - -- gh-91219: Change ``SimpleHTTPRequestHandler`` to support subclassing to - provide a different set of index file names instead of using ``__init__`` - parameters. - -- gh-100690: ``Mock`` objects which are not unsafe will now raise an - ``AttributeError`` when accessing an attribute that matches the name of an - assertion but without the prefix ``assert_``, e.g. accessing - ``called_once`` instead of ``assert_called_once``. This is in addition to - this already happening for accessing attributes with prefixes ``assert``, - ``assret``, ``asert``, ``aseert``, and ``assrt``. - -- gh-89727: Simplify and optimize :func:`os.walk` by using - :func:`isinstance` checks to check the top of the stack. - -- gh-100485: Add math.sumprod() to compute the sum of products. - -- gh-86508: Fix :func:`asyncio.open_connection` to skip binding to local - addresses of different family. Patch by Kumar Aditya. - -- gh-97930: ``importlib.resources.files`` now accepts a module as an anchor - instead of only accepting packages. If a module is passed, resources are - resolved adjacent to that module (in the same package or at the package - root). The parameter was renamed from ``package`` to ``anchor`` with a - compatibility shim for those passing by keyword. Additionally, the new - ``anchor`` parameter is now optional and will default to the caller's - module. - -- gh-100585: Fixed a bug where importlib.resources.as_file was leaving file - pointers open - -- gh-100562: Improve performance of :meth:`pathlib.Path.absolute` by nearly - 2x. This comes at the cost of a performance regression in - :meth:`pathlib.Path.cwd`, which is generally used less frequently in user - code. - -- gh-100519: Small simplification of :func:`http.cookiejar.eff_request_host` - that improves readability and better matches the RFC wording. - -- gh-100287: Fix the interaction of :func:`unittest.mock.seal` with - :class:`unittest.mock.AsyncMock`. - -- gh-100488: Add :meth:`Fraction.is_integer` to check whether a - :class:`fractions.Fraction` is an integer. This improves duck type - compatibility with :class:`float` and :class:`int`. - -- gh-100474: :mod:`http.server` now checks that an index page is actually a - regular file before trying to serve it. This avoids issues with - directories named ``index.html``. - -- gh-100363: Speed up :func:`asyncio.get_running_loop` by removing redundant - ``getpid`` checks. Patch by Kumar Aditya. - -- gh-78878: Fix crash when creating an instance of :class:`!_ctypes.CField`. - -- gh-100348: Fix ref cycle in :class:`!asyncio._SelectorSocketTransport` by - removing ``_read_ready_cb`` in ``close``. - -- gh-100344: Provide C implementation for :func:`asyncio.current_task` for a - 4x-6x speedup. - -- gh-100272: Fix JSON serialization of OrderedDict. It now preserves the - order of keys. - -- gh-83076: Instantiation of ``Mock()`` and ``AsyncMock()`` is now 3.8x - faster. - -- gh-100234: Set a default value of 1.0 for the ``lambd`` parameter in - random.expovariate(). - -- gh-100228: A :exc:`DeprecationWarning` may be raised when :func:`os.fork` - or :func:`os.forkpty` is called from multi-threaded processes. Forking - with threads is unsafe and can cause deadlocks, crashes and subtle - problems. Lack of a warning does not indicate that the fork call was - actually safe, as Python may not be aware of all threads. - -- gh-100039: Improve signatures for enums and flags. - -- gh-100133: Fix regression in :mod:`asyncio` where a subprocess would - sometimes lose data received from pipe. - -- bpo-44592: Fixes inconsistent handling of case sensitivity of - *extrasaction* arg in :class:`csv.DictWriter`. - -- gh-100098: Fix ``tuple`` subclasses being cast to ``tuple`` when used as - enum values. - -- gh-85432: Rename the *fmt* parameter of the pure-Python implementation of - :meth:`datetime.time.strftime` to *format*. Rename the *t* parameter of - :meth:`datetime.datetime.fromtimestamp` to *timestamp*. These changes mean - the parameter names in the pure-Python implementation now match the - parameter names in the C implementation. Patch by Alex Waygood. - -- gh-98778: Update :exc:`~urllib.error.HTTPError` to be initialized - properly, even if the ``fp`` is ``None``. Patch by Donghee Na. - -- gh-99925: Unify error messages in JSON serialization between - ``json.dumps(float('nan'), allow_nan=False)`` and - ``json.dumps(float('nan'), allow_nan=False, indent=<SOMETHING>)``. Now - both include the representation of the value that could not be serialized. - -- gh-89727: Fix issue with :func:`os.walk` where a :exc:`RecursionError` - would occur on deep directory structures by adjusting the implementation - of :func:`os.walk` to be iterative instead of recursive. - -- gh-94943: Add :ref:`enum-dataclass-support` to the :class:`~enum.Enum` - :meth:`~enum.Enum.__repr__`. When inheriting from a - :class:`~dataclasses.dataclass`, only show the field names in the value - section of the member :func:`repr`, and not the dataclass' class name. - -- gh-83035: Fix :func:`inspect.getsource` handling of decorator calls with - nested parentheses. - -- gh-99576: Fix ``.save()`` method for ``LWPCookieJar`` and - ``MozillaCookieJar``: saved file was not truncated on repeated save. - -- gh-94912: Add :func:`inspect.markcoroutinefunction` decorator which - manually marks a function as a coroutine for the benefit of - :func:`iscoroutinefunction`. - -- gh-99509: Add :pep:`585` support for - :class:`multiprocessing.queues.Queue`. - -- gh-99482: Remove ``Jython`` partial compatibility code from several stdlib - modules. - -- gh-99433: Fix :mod:`doctest` failure on :class:`types.MethodWrapperType` - in modules. - -- gh-85267: Several improvements to :func:`inspect.signature`'s handling of - ``__text_signature``. - Fixes a case where :func:`inspect.signature` - dropped parameters - Fixes a case where :func:`inspect.signature` raised - :exc:`tokenize.TokenError` - Allows :func:`inspect.signature` to - understand defaults involving binary operations of constants - - :func:`inspect.signature` is documented as only raising :exc:`TypeError` - or :exc:`ValueError`, but sometimes raised :exc:`RuntimeError`. These - cases now raise :exc:`ValueError` - Removed a dead code path - -- gh-91166: :mod:`asyncio` is optimized to avoid excessive copying when - writing to socket and use :meth:`~socket.socket.sendmsg` if the platform - supports it. Patch by Kumar Aditya. - -- gh-98030: Add missing TCP socket options from Linux: ``TCP_MD5SIG``, - ``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``, ``TCP_REPAIR``, - ``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``, ``TCP_REPAIR_OPTIONS``, - ``TCP_TIMESTAMP``, ``TCP_CC_INFO``, ``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``, - ``TCP_REPAIR_WINDOW``, ``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``, - ``TCP_MD5SIG_EXT``, ``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``, - ``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``. - -- gh-88500: Reduced the memory usage of :func:`urllib.parse.unquote` and - :func:`urllib.parse.unquote_to_bytes` on large values. - -- gh-96127: ``inspect.signature`` was raising ``TypeError`` on call with - mock objects. Now it correctly returns ``(*args, **kwargs)`` as inferred - signature. - -- gh-95882: Fix a 3.11 regression in - :func:`~contextlib.asynccontextmanager`, which caused it to propagate - exceptions with incorrect tracebacks and fix a 3.11 regression in - :func:`~contextlib.contextmanager`, which caused it to propagate - exceptions with incorrect tracebacks for :exc:`StopIteration`. - -- gh-78707: Deprecate passing more than one positional argument to - :meth:`pathlib.PurePath.relative_to` and - :meth:`~pathlib.PurePath.is_relative_to`. - -- gh-92122: Fix reStructuredText syntax errors in docstrings in the - :mod:`enum` module. - -- gh-91851: Optimize the :class:`~fractions.Fraction` arithmetics for small - components. - -- bpo-24132: Make :class:`pathlib.PurePath` and :class:`~pathlib.Path` - subclassable (private to start). Previously, attempting to instantiate a - subclass resulted in an :exc:`AttributeError` being raised. Patch by - Barney Gale. - -- bpo-40447: Accept :class:`os.PathLike` (such as :class:`pathlib.Path`) in - the ``stripdir`` arguments of :meth:`compileall.compile_file` and - :meth:`compileall.compile_dir`. - -- bpo-36880: Fix a reference counting issue when a :mod:`ctypes` callback - with return type :class:`~ctypes.py_object` returns ``None``, which could - cause crashes. - -Documentation -------------- - -- gh-100616: Document existing ``attr`` parameter to - :func:`curses.window.vline` function in :mod:`curses`. - -- gh-100472: Remove claim in documentation that the ``stripdir``, - ``prependdir`` and ``limit_sl_dest`` parameters of - :func:`compileall.compile_dir` and :func:`compileall.compile_file` could - be :class:`bytes`. - -- bpo-25377: Clarify use of octal format of mode argument in help(os.chmod) - as well as help(os.fchmod) - -Tests ------ - -- gh-100454: Start running SSL tests with OpenSSL 3.1.0-beta1. - -- gh-100086: The Python test runner (libregrtest) now logs Python build - information like "debug" vs "release" build, or LTO and PGO optimizations. - Patch by Victor Stinner. - -- gh-93018: Make two tests forgiving towards host system libexpat with - backported security fixes applied. - -Build ------ - -- gh-100540: Removed the ``--with-system-ffi`` ``configure`` option; - ``libffi`` must now always be supplied by the system on all non-Windows - platforms. The option has had no effect on non-Darwin platforms for - several releases, and in 3.11 only had the non-obvious effect of invoking - ``pkg-config`` to find ``libffi`` and never setting - ``-DUSING_APPLE_OS_LIBFFI``. Now on Darwin platforms ``configure`` will - first check for the OS ``libffi`` and then fall back to the same - processing as other platforms if it is not found. - -- gh-88267: Avoid exporting Python symbols in linked Windows applications - when the core is built as static. - -- bpo-41916: Allow override of ac_cv_cxx_thread so that cross compiled - python can set -pthread for CXX. - -Windows -------- - -- gh-100180: Update Windows installer to OpenSSL 1.1.1s - -- gh-99191: Use ``_MSVC_LANG >= 202002L`` instead of less-precise ``_MSC_VER - >=1929`` to more accurately test for C++20 support in - :file:`PC/_wmimodule.cpp`. - -- gh-79218: Define ``MS_WIN64`` for Mingw-w64 64bit, fix cython compilation - failure. - -- gh-99941: Ensure that :func:`asyncio.Protocol.data_received` receives an - immutable :class:`bytes` object (as documented), instead of - :class:`bytearray`. - -- bpo-43984: :meth:`winreg.SetValueEx` now leaves the target value untouched - in the case of conversion errors. Previously, ``-1`` would be written in - case of such errors. - -- bpo-34816: ``hasattr(ctypes.windll, 'nonexistant')`` now returns ``False`` - instead of raising :exc:`OSError`. - -macOS ------ - -- gh-100180: Update macOS installer to OpenSSL 1.1.1s - -- gh-100540: Removed obsolete ``dlfcn.h`` shim from the ``_ctypes`` - extension module, which has not been necessary since Mac OS X 10.2. - -Tools/Demos ------------ - -- bpo-45256: Fix a bug that caused an :exc:`AttributeError` to be raised in - ``python-gdb.py`` when ``py-locals`` is used without a frame. - -- gh-100342: Add missing ``NULL`` check for possible allocation failure in - ``*args`` parsing in Argument Clinic. - -C API ------ - -- gh-99947: Raising SystemError on import will now have its cause be set to - the original unexpected exception. - -- gh-99240: In argument parsing, after deallocating newly allocated memory, - reset its pointer to NULL. - -- gh-98724: The :c:macro:`Py_CLEAR`, :c:macro:`Py_SETREF` and - :c:macro:`Py_XSETREF` macros now only evaluate their arguments once. If an - argument has side effects, these side effects are no longer duplicated. - Patch by Victor Stinner. - - -What's New in Python 3.12.0 alpha 3? -==================================== - -*Release date: 2022-12-06* - -Security --------- - -- gh-100001: ``python -m http.server`` no longer allows terminal control - characters sent within a garbage request to be printed to the stderr - server log. - - This is done by changing the :mod:`http.server` - :class:`BaseHTTPRequestHandler` ``.log_message`` method to replace control - characters with a :samp:`\\x{HH}` hex escape before printing. - -- gh-87604: Avoid publishing list of active per-interpreter audit hooks via - the :mod:`gc` module - -Core and Builtins ------------------ - -- gh-99891: Fix a bug in the tokenizer that could cause infinite recursion - when showing syntax warnings that happen in the first line of the source. - Patch by Pablo Galindo - -- gh-91054: Add :c:func:`PyCode_AddWatcher` and - :c:func:`PyCode_ClearWatcher` APIs to register callbacks to receive - notification on creation and destruction of code objects. - -- gh-99729: Fix an issue that could cause frames to be visible to Python - code as they are being torn down, possibly leading to memory corruption or - hard crashes of the interpreter. - -- gh-99708: Fix bug where compiler crashes on an if expression with an empty - body block. - -- gh-99578: Fix a reference bug in :func:`!_imp.create_builtin` after the - creation of the first sub-interpreter for modules ``builtins`` and - ``sys``. Patch by Victor Stinner. - -- gh-99581: Fixed a bug that was causing a buffer overflow if the tokenizer - copies a line missing the newline character from a file that is as long as - the available tokenizer buffer. Patch by Pablo galindo - -- gh-99553: Fix bug where an :exc:`ExceptionGroup` subclass can wrap a - :exc:`BaseException`. - -Library -------- - -- gh-99547: Add a function to os.path to check if a path is a junction: - isjunction. Add similar functionality to pathlib.Path as is_junction. - -- gh-99370: Fix zip path for venv created from a non-installed python on - POSIX platforms. - -Core and Builtins ------------------ - -- gh-99377: Add audit events for thread creation and clear operations. - -- gh-98686: Remove the ``BINARY_OP_GENERIC`` and ``COMPARE_OP_GENERIC`` - "specializations". - -- gh-99298: Remove the remaining error paths for attribute specializations, - and refuse to specialize attribute accesses on types that haven't had - :c:func:`PyType_Ready` called on them yet. - -- gh-99127: Allow some features of :mod:`syslog` to the main interpreter - only. Patch by Donghee Na. - -- gh-91053: Optimizing interpreters and JIT compilers may need to invalidate - internal metadata when functions are modified. This change adds the - ability to provide a callback that will be invoked each time a function is - created, modified, or destroyed. - -- gh-90994: Improve error messages when there's a syntax error with call - arguments. The following three cases are covered: - No value is assigned - to a named argument, eg ``foo(a=)``. - A value is assigned to a star - argument, eg ``foo(*args=[0])``. - A value is assigned to a double-star - keyword argument, eg ``foo(**kwarg={'a': 0})``. - -- bpo-45026: Optimize the :class:`range` object iterator. It is now smaller, - faster iteration of ranges containing large numbers. Smaller pickles, - faster unpickling. - -- bpo-31718: Raise :exc:`ValueError` instead of :exc:`SystemError` when - methods of uninitialized :class:`io.IncrementalNewlineDecoder` objects are - called. Patch by Oren Milman. - -- bpo-38031: Fix a possible assertion failure in :class:`io.FileIO` when the - opener returns an invalid file descriptor. - -Library -------- - -- gh-100001: Also \ escape \s in the http.server - BaseHTTPRequestHandler.log_message so that it is technically possible to - parse the line and reconstruct what the original data was. Without this a - \xHH is ambiguous as to if it is a hex replacement we put in or the - characters r"\x" came through in the original request line. - -- gh-99957: Add ``frozen_default`` parameter to - :func:`typing.dataclass_transform`. - -- gh-79033: Fix :func:`asyncio.Server.wait_closed` to actually do what the - docs promise -- wait for all existing connections to complete, after - closing the server. - -- gh-51524: Fix bug when calling trace.CoverageResults with valid infile. - -- gh-99645: Fix a bug in handling class cleanups in - :class:`unittest.TestCase`. Now ``addClassCleanup()`` uses separate lists - for different ``TestCase`` subclasses, and ``doClassCleanups()`` only - cleans up the particular class. - -- gh-99508: Fix ``TypeError`` in ``Lib/importlib/_bootstrap_external.py`` - while calling ``_imp.source_hash()``. - -- gh-66285: Fix :mod:`asyncio` to not share event loop and signal wakeupfd - in forked processes. Patch by Kumar Aditya. - -- gh-97001: Release the GIL when calling termios APIs to avoid blocking - threads. - -- gh-92647: Use final status of an enum to determine lookup or creation - branch of functional API. - -- gh-99388: Add *loop_factory* parameter to :func:`asyncio.run` to allow - specifying a custom event loop factory. Patch by Kumar Aditya. - -- gh-99341: Fix :func:`ast.increment_lineno` to also cover - :class:`ast.TypeIgnore` when changing line numbers. - -- gh-99382: Check the number of arguments in substitution in user generics - containing a :class:`~typing.TypeVarTuple` and one or more - :class:`~typing.TypeVar`. - -- gh-99379: Fix substitution of :class:`~typing.ParamSpec` followed by - :class:`~typing.TypeVarTuple` in generic aliases. - -- gh-99344: Fix substitution of :class:`~typing.TypeVarTuple` and - :class:`~typing.ParamSpec` together in user generics. - -- gh-99284: Remove ``_use_broken_old_ctypes_structure_semantics_`` old - untested and undocumented hack from :mod:`ctypes`. - -- gh-99201: Fix :exc:`IndexError` when initializing the config variables on - Windows if ``HAVE_DYNAMIC_LOADING`` is not set. - -- gh-99240: Fix double-free bug in Argument Clinic ``str_converter`` by - extracting memory clean up to a new ``post_parsing`` section. - -- gh-64490: Fix refcount error when arguments are packed to tuple in - Argument Clinic. - -- gh-99029: :meth:`pathlib.PurePath.relative_to` now treats naked Windows - drive paths as relative. This brings its behaviour in line with other - parts of pathlib. - -- gh-98253: The implementation of the typing module is now more resilient to - reference leaks in binary extension modules. - - Previously, a reference leak in a typed C API-based extension module could - leak internals of the typing module, which could in turn introduce leaks - in essentially any other package with typed function signatures. Although - the typing package is not the original source of the problem, such - non-local dependences exacerbate debugging of large-scale projects, and - the implementation was therefore changed to reduce harm by providing - better isolation. - -- gh-98458: Fix infinite loop in unittest when a self-referencing chained - exception is raised - -- gh-93453: :func:`asyncio.get_event_loop` and many other :mod:`asyncio` - functions like :func:`asyncio.ensure_future`, :func:`asyncio.shield` or - :func:`asyncio.gather`, and also the - :meth:`~asyncio.BaseDefaultEventLoopPolicy.get_event_loop` method of - :class:`asyncio.BaseDefaultEventLoopPolicy` now raise a - :exc:`RuntimeError` if called when there is no running event loop and the - current event loop was not set. Previously they implicitly created and set - a new current event loop. :exc:`DeprecationWarning` is no longer emitted - if there is no running event loop but the current event loop was set. - -- gh-97966: On ``uname_result``, restored expectation that ``_fields`` and - ``_asdict`` would include all six properties including ``processor``. - -- gh-98248: Provide informative error messages in :func:`struct.pack` when - its integral arguments are not in range. - -- gh-98108: ``zipfile.Path`` is now pickleable if its initialization - parameters were pickleable (e.g. for file system paths). - -- gh-98098: Created packages from zipfile and test_zipfile modules, - separating ``zipfile.Path`` functionality. - -- gh-82836: Fix :attr:`~ipaddress.IPv4Address.is_private` properties in the - :mod:`ipaddress` module. Previously non-private networks (0.0.0.0/0) would - return ``True`` from this method; now they correctly return ``False``. - -- gh-96828: Add an :const:`~ssl.OP_ENABLE_KTLS` option for enabling the use - of the kernel TLS (kTLS). Patch by Illia Volochii. - -- gh-88863: To avoid apparent memory leaks when - :func:`asyncio.open_connection` raises, break reference cycles generated - by local exception and future instances (which has exception instance as - its member var). Patch by Dong Uk, Kang. - -- gh-91078: :meth:`TarFile.next` now returns ``None`` when called on an - empty tarfile. - -- bpo-47220: Document the optional *callback* parameter of - :class:`WeakMethod`. Patch by Géry Ogam. - -- bpo-44817: Ignore WinError 53 (ERROR_BAD_NETPATH), 65 - (ERROR_NETWORK_ACCESS_DENIED) and 161 (ERROR_BAD_PATHNAME) when using - ntpath.realpath(). - -- bpo-41260: Rename the *fmt* parameter of the pure Python implementation of - :meth:`datetime.date.strftime` to *format*. - -- bpo-15999: All built-in functions now accept arguments of any type instead - of just ``bool`` and ``int`` for boolean parameters. - -Documentation -------------- - -- gh-99931: Use `sphinxext-opengraph - <https://sphinxext-opengraph.readthedocs.io/>`__ to generate `OpenGraph - metadata <https://ogp.me/>`__. - -- gh-89682: Reworded docstring of the default ``__contains__`` to clarify - that it returns a :class:`bool`. - -- gh-88330: Improved the description of what a resource is in - importlib.resources docs. - -- gh-92892: Document that calling variadic functions with ctypes requires - special care on macOS/arm64 (and possibly other platforms). - -- bpo-41825: Restructured the documentation for the :func:`os.wait* - <os.wait>` family of functions, and improved the docs for - :func:`os.waitid` with more explanation of the possible argument - constants. - -Tests ------ - -- gh-99892: Skip test_normalization() of test_unicodedata if it fails to - download NormalizationTest.txt file from pythontest.net. Patch by Victor - Stinner. - -- gh-99934: Correct test_marsh on (32 bit) x86: test_deterministic sets was - failing. - -- gh-99741: We've implemented multi-phase init (PEP 489/630/687) for the - internal (for testing) _xxsubinterpreters module. - -- gh-99659: Optional big memory tests in ``test_sqlite3`` now catch the - correct :exc:`sqlite.DataError` exception type in case of too large - strings and/or blobs passed. - -- gh-99593: Cover the Unicode C API with tests. - -- gh-96002: Add functional test for Argument Clinic. - -Build ------ - -- gh-99086: Fix ``-Wimplicit-int``, ``-Wstrict-prototypes``, and - ``-Wimplicit-function-declaration`` compiler warnings in - :program:`configure` checks. - -- gh-99337: Fix a compilation issue with GCC 12 on macOS. - -- gh-99289: Add a ``COMPILEALL_OPTS`` variable in Makefile to override - :mod:`compileall` options (default: ``-j0``) in ``make install``. Also - merged the ``compileall`` commands into a single command building .pyc - files for the all optimization levels (0, 1, 2) at once. Patch by Victor - Stinner. - -- gh-98872: Fix a possible fd leak in ``Programs/_freeze_module.c`` - introduced in Python 3.11. - -- gh-88226: Always define ``TARGET_*`` labels in ``Python/ceval.c``, even if - ``USE_COMPUTED_GOTOS`` is disabled. This allows breakpoints to be set at - those labels in (for instance) ``gdb``. - -Windows -------- - -- gh-99345: Use faster initialization functions to detect install location - for Windows Store package - -- gh-98629: Fix initialization of :data:`sys.version` and ``sys._git`` on - Windows - -- gh-99442: Fix handling in :ref:`launcher` when ``argv[0]`` does not - include a file extension. - -- bpo-40882: Fix a memory leak in - :class:`multiprocessing.shared_memory.SharedMemory` on Windows. - -macOS ------ - -- gh-87235: On macOS ``python3 /dev/fd/9 9</path/to/script.py`` failed for - any script longer than a couple of bytes. - -- gh-98940: Fix ``Mac/Extras.install.py`` file filter bug. - -Tools/Demos ------------ - -- gh-64490: Argument Clinic varargs bugfixes - - * Fix out-of-bounds error in :c:func:`!_PyArg_UnpackKeywordsWithVararg`. - * Fix incorrect check which allowed more than one varargs in clinic.py. - * Fix miscalculation of ``noptargs`` in generated code. - * Do not generate ``noptargs`` when there is a vararg argument and no optional argument. - -C API ------ - -- gh-98680: ``PyBUF_*`` constants were marked as part of Limited API of - Python 3.11+. These were available in 3.11.0 with - :c:macro:`Py_LIMITED_API` defined for 3.11, and are necessary to use the - buffer API. - -- gh-99612: Fix :c:func:`PyUnicode_DecodeUTF8Stateful` for ASCII-only data: - ``*consumed`` was not set. - -- gh-47146: The ``structmember.h`` header is deprecated. Its non-deprecated - contents are now available just by including ``Python.h``, with a ``Py_`` - prefix added if it was missing. (Deprecated contents are - :c:macro:`T_OBJECT`, :c:macro:`T_NONE`, and no-op flags.) Patch by Petr - Viktorin, based on earlier work by Alexander Belopolsky and Matthias - Braun. - - -What's New in Python 3.12.0 alpha 2? -==================================== - -*Release date: 2022-11-14* - -Security --------- - -- gh-98433: The IDNA codec decoder used on DNS hostnames by :mod:`socket` or - :mod:`asyncio` related name resolution functions no longer involves a - quadratic algorithm. This prevents a potential CPU denial of service if an - out-of-spec excessive length hostname involving bidirectional characters - were decoded. Some protocols such as :mod:`urllib` http :samp:`3{xx}` - redirects potentially allow for an attacker to supply such a name. - - Individual labels within an IDNA encoded DNS name will now raise an error - early during IDNA decoding if they are longer than 1024 unicode characters - given that each decoded DNS label must be 63 or fewer characters and the - entire decoded DNS name is limited to 255. Only an application presenting - a hostname or label consisting primarily of :rfc:`3454` section 3.1 - "Nothing" characters to be removed would run into of this new limit. See - also :rfc:`5894` section 6 and :rfc:`3491`. - -- gh-98739: Update bundled libexpat to 2.5.0 - -Core and Builtins ------------------ - -- gh-81057: The docs clearly say that :c:data:`PyImport_Inittab`, - :c:func:`PyImport_AppendInittab`, and :c:func:`PyImport_ExtendInittab` - should not be used after :c:func:`Py_Initialize` has been called. We now - enforce this for the two functions. Additionally, the runtime now uses an - internal copy of :c:data:`PyImport_Inittab`, to guard against - modification. - -- gh-99298: Fix an issue that could potentially cause incorrect error - handling for some bytecode instructions. - -- gh-99254: The compiler now removes all unused constants from code objects - (except the first one, which may be a docstring). - -- gh-99205: Fix an issue that prevented :c:type:`PyThreadState` and - :c:type:`PyInterpreterState` memory from being freed properly. - -- gh-81057: The 18 global C variables holding the state of the allocators - have been moved to ``_PyRuntimeState``. This is a strictly internal - change with no change in behavior. - -- gh-99181: Fix failure in :keyword:`except* <except_star>` with unhashable - exceptions. - -- gh-99204: Fix calculation of :data:`sys._base_executable` when inside a - POSIX virtual environment using copies of the python binary when the base - installation does not provide the executable name used by the venv. - Calculation will fall back to alternative names ("python<MAJOR>", - "python<MAJOR>.<MINOR>"). - -- gh-96055: Update :mod:`faulthandler` to emit an error message with the - proper unexpected signal number. Patch by Donghee Na. - -- gh-99153: Fix location of :exc:`SyntaxError` for a :keyword:`try` block - with both :keyword:`except` and :keyword:`except* <except_star>`. - -- gh-98686: Merge the adaptive opcode logic into each instruction's - unquickened variant, and merge the logic in ``EXTENDED_ARG_QUICK`` into - :opcode:`EXTENDED_ARG`. With these changes, the quickening that happens at - code object creation is now only responsible for initializing warmup - counters and inserting superinstructions. - -- gh-99103: Fix the error reporting positions of specialized traceback - anchors when the source line contains Unicode characters. - -- gh-99139: Improve the error suggestion for :exc:`NameError` exceptions for - instances. Now if a :exc:`NameError` is raised in a method and the - instance has an attribute that's exactly equal to the name in the - exception, the suggestion will include ``self.<NAME>`` instead of the - closest match in the method scope. Patch by Pablo Galindo - -- gh-98401: Octal escapes with value larger than ``0o377`` (ex: ``"\477"``), - deprecated in Python 3.11, now produce a :exc:`SyntaxWarning`, instead of - :exc:`DeprecationWarning`. In a future Python version they will be - eventually a :exc:`SyntaxError`. Patch by Victor Stinner. - -- gh-98401: A backslash-character pair that is not a valid escape sequence - now generates a :exc:`SyntaxWarning`, instead of - :exc:`DeprecationWarning`. For example, ``re.compile("\d+\.\d+")`` now - emits a :exc:`SyntaxWarning` (``"\d"`` is an invalid escape sequence), use - raw strings for regular expression: ``re.compile(r"\d+\.\d+")``. In a - future Python version, :exc:`SyntaxError` will eventually be raised, - instead of :exc:`SyntaxWarning`. Patch by Victor Stinner. - -- gh-96793: Handle StopIteration and StopAsyncIteration raised in generator - or coroutines in the bytecode, rather than in wrapping C code. - -- gh-98931: Improve the :exc:`SyntaxError` error message when the user types - ``import x from y`` instead of ``from y import x``. Patch by Pablo Galindo - -- gh-98852: Fix subscription of type aliases containing bare generic types - or types like :class:`~typing.TypeVar`: for example ``tuple[A, T][int]`` - and ``tuple[TypeVar, T][int]``, where ``A`` is a generic type, and ``T`` - is a type variable. - -- gh-98925: Lower the recursion depth for marshal on WASI to support - (in-development) wasmtime 2.0. - -- gh-98783: Fix multiple crashes in debug mode when ``str`` subclasses are - used instead of ``str`` itself. - -- gh-98811: Use complete source locations to simplify detection of - ``__future__`` imports which are not at the beginning of the file. Also - corrects the offset in the exception raised in one case, which was off by - one and impeded highlighting. - -- gh-96793: Add specialization of :opcode:`FOR_ITER` for generators. Saves - multiple layers of dispatch and checking to get from the - :opcode:`FOR_ITER` instruction in the caller to the :opcode:`RESUME` in - the generator. - -- gh-98762: Fix source locations of :keyword:`match` sub-patterns. - -- gh-98586: Added the methods :c:func:`PyObject_Vectorcall` and - :c:func:`PyObject_VectorcallMethod` to the :ref:`Limited API <stable>` - along with the auxiliary macro constant - :c:macro:`PY_VECTORCALL_ARGUMENTS_OFFSET`. - - The availability of these functions enables more efficient :PEP:`590` - vector calls from binary extension modules that avoid argument - boxing/unboxing overheads. - -- gh-99257: Fix an issue where member descriptors (such as those for - :attr:`~object.__slots__`) could behave incorrectly or crash instead of - raising a :exc:`TypeError` when accessed via an instance of an invalid - type. - -- gh-93143: Rather than changing :attr:`~types.CodeType.co_code`, the - interpreter will now display a :exc:`RuntimeWarning` and assign - :const:`None` to any fast locals that are left unbound after jumps or - :keyword:`del` statements executed while tracing. - -- gh-96421: When calling into Python code from C code, through - :c:func:`PyEval_EvalFrameEx` or a related C-API function, a shim frame in - inserted into the call stack. This occurs in the - ``_PyEval_EvalFrameDefault()`` function. The extra frame should be - invisible to all Python and most C extensions, but out-of-process - profilers and debuggers need to be aware of it. These shim frames can be - detected by checking ``frame->owner == FRAME_OWNED_BY_CSTACK``. - - Extensions implementing their own interpreters using PEP 523 need to be - aware of this shim frame and the changes to the semantics of - :opcode:`RETURN_VALUE`, :opcode:`YIELD_VALUE`, and - :opcode:`RETURN_GENERATOR`, which now clear the frame. - -Build ------ - -- gh-98415: Fix detection of MAC addresses for :mod:`uuid` on certain OSs. - Patch by Chaim Sanders - -Core and Builtins ------------------ - -- gh-98686: Quicken all code objects, and specialize adaptive bytecode - instructions more aggressively. - -- gh-92119: Print exception class name instead of its string representation - when raising errors from :mod:`ctypes` calls. - -- gh-91058: :exc:`ImportError` raised from failed ``from <module> import - <name>`` now include suggestions for the value of ``<name>`` based on the - available names in ``<module>``. Patch by Pablo Galindo - -- gh-96793: The :opcode:`FOR_ITER` now leaves the iterator on the stack on - termination of the loop. This is to assist specialization of loops for - generators. - -- gh-90716: Add _pylong.py module. It includes asymptotically faster - algorithms that can be used for operations on integers with many digits. - It is used by longobject.c to speed up some operations. - -- gh-95389: Expose :const:`~socket.ETH_P_ALL` and some of the - :ref:`ETHERTYPE_* constants <socket-ethernet-types>` in :mod:`socket`. - Patch by Noam Cohen. - -Library -------- - -- gh-93696: Allow :mod:`pdb` to locate source for frozen modules in the - standard library. - -- gh-99418: Fix bug in :func:`urllib.parse.urlparse` that causes URL schemes - that begin with a digit, a plus sign, or a minus sign to be parsed - incorrectly. - -- gh-94597: Deprecate :class:`asyncio.AbstractChildWatcher` to be removed in - Python 3.14. Patch by Kumar Aditya. - -- gh-99305: Improve performance of :func:`secrets.token_hex`. - -- gh-74044: Fixed bug where :func:`inspect.signature` reported incorrect - arguments for decorated methods. - -- gh-99275: Fix ``SystemError`` in :mod:`ctypes` when exception was not set - during ``__initsubclass__``. - -- gh-99277: Remove older version of - ``_SSLProtocolTransport.get_write_buffer_limits`` in - :mod:`!asyncio.sslproto` - -- gh-99248: fix negative numbers failing in verify() - -- gh-99155: Fix :class:`statistics.NormalDist` pickle with ``0`` and ``1`` - protocols. - -- gh-93464: ``enum.auto()`` is now correctly activated when combined with - other assignment values. E.g. ``ONE = auto(), 'some text'`` will now - evaluate as ``(1, 'some text')``. - -- gh-99134: Update the bundled copy of pip to version 22.3.1. - -- gh-92584: Remove the ``distutils`` package. It was deprecated in Python - 3.10 by :pep:`632` "Deprecate distutils module". For projects still using - ``distutils`` and cannot be updated to something else, the ``setuptools`` - project can be installed: it still provides ``distutils``. Patch by Victor - Stinner. - -- gh-98999: Now :mod:`!_pyio` is consistent with :mod:`!_io` in raising - ``ValueError`` when executing methods over closed buffers. - -- gh-83004: Clean up refleak on failed module initialisation in - :mod:`!_zoneinfo` - -- gh-83004: Clean up refleaks on failed module initialisation in - :mod:`!_pickle` - -- gh-83004: Clean up refleak on failed module initialisation in :mod:`!_io`. - -- gh-98897: Fix memory leak in :func:`math.dist` when both points don't have - the same dimension. Patch by Kumar Aditya. - -- gh-98878: Use the frame bound builtins when offering a name suggestion in - :mod:`traceback` to prevent crashing when ``__builtins__`` is not a dict. - -- gh-98139: In :mod:`importlib._bootstrap`, enhance namespace package repr - to ``<module 'x' (namespace) from ['path']>``. - -- gh-90352: Fix ``_SelectorDatagramTransport`` to inherit from - :class:`~asyncio.DatagramTransport` in :mod:`asyncio`. Patch by Kumar - Aditya. - -- gh-98793: Fix argument typechecks in :func:`!_overlapped.WSAConnect` and - :func:`!_overlapped.Overlapped.WSASendTo` functions. - -- gh-98744: Prevent crashing in :mod:`traceback` when retrieving the - byte-offset for some source files that contain certain unicode characters. - -- gh-98740: Fix internal error in the :mod:`re` module which in very rare - circumstances prevented compilation of a regular expression containing a - :ref:`conditional expression <re-conditional-expression>` without the - "else" branch. - -- gh-98703: Fix :meth:`asyncio.StreamWriter.drain` to call - ``protocol.connection_lost`` callback only once on Windows. - -- gh-98624: Add a mutex to unittest.mock.NonCallableMock to protect - concurrent access to mock attributes. - -- gh-98658: The :class:`array.array` class now supports subscripting, making - it a :term:`generic type`. - -- gh-98284: Improved :class:`TypeError` message for undefined abstract - methods of a :class:`abc.ABC` instance. The names of the missing methods - are surrounded by single-quotes to highlight them. - -- gh-96151: Allow ``BUILTINS`` to be a valid field name for frozen - dataclasses. - -- gh-98086: Make sure ``patch.dict()`` can be applied on async functions. - -- gh-72719: Remove modules :mod:`!asyncore` and :mod:`!asynchat`, which were - deprecated by :pep:`594`. - -- gh-96192: Fix handling of ``bytes`` :term:`path-like objects <path-like - object>` in :func:`os.ismount`. - -- gh-94172: :mod:`ftplib`: Remove the ``FTP_TLS.ssl_version`` class - attribute: use the *context* parameter instead. Patch by Victor Stinner - -- gh-94172: Remove the *keyfile* and *certfile* parameters from the - :mod:`ftplib`, :mod:`imaplib`, :mod:`poplib` and :mod:`smtplib` modules, - and the *key_file*, *cert_file* and *check_hostname* parameters from the - :mod:`http.client` module, all deprecated since Python 3.6. Use the - *context* parameter (*ssl_context* in :mod:`imaplib`) instead. Patch by - Victor Stinner. - -- gh-83638: Add the :attr:`~sqlite3.Connection.autocommit` attribute to - :class:`sqlite3.Connection` and the *autocommit* parameter to - :func:`sqlite3.connect` to control :pep:`249`-compliant :ref:`transaction - handling <sqlite3-transaction-control-autocommit>`. Patch by Erlend E. - Aasland. - -- gh-92452: Fixed a race condition that could cause - :func:`sysconfig.get_config_var` to incorrectly return :const:`None` in - multi-threaded programs. - -- gh-91803: Fix an error when using a method of objects mocked with - :func:`unittest.mock.create_autospec` after it was sealed with - :func:`unittest.mock.seal` function. - -- bpo-38523: :func:`shutil.copytree` now applies the - *ignore_dangling_symlinks* argument recursively. - -- bpo-40358: Add walk_up argument in :meth:`pathlib.PurePath.relative_to`. - -- bpo-36267: Fix IndexError in :class:`argparse.ArgumentParser` when a - ``store_true`` action is given an explicit argument. - -Documentation -------------- - -- gh-98832: Changes wording of docstring for :func:`pathlib.Path.iterdir`. - -- gh-97966: Update uname docs to clarify the special nature of the platform - attribute and to indicate when it became late-bound. - -Tests ------ - -- gh-98903: The Python test suite now fails with exit code 4 if no tests - ran. It should help detecting typos in test names and test methods. - -- gh-98713: Fix a bug in the :mod:`typing` tests where a test relying on - CPython-specific implementation details was not decorated with - ``@cpython_only`` and was not skipped on other implementations. - -- gh-87390: Add tests for star-unpacking with PEP 646, and some other - miscellaneous PEP 646 tests. - -- gh-96853: Added explicit coverage of ``Py_Initialize`` (and hence - ``Py_InitializeEx``) back to the embedding tests (all other embedding - tests migrated to ``Py_InitializeFromConfig`` in Python 3.11) - -- bpo-34272: Some C API tests were moved into the new Lib/test/test_capi/ - directory. - -Build ------ - -- gh-99086: Fix ``-Wimplicit-int`` compiler warning in :program:`configure` - check for ``PTHREAD_SCOPE_SYSTEM``. - -- gh-99016: Fix build with ``PYTHON_FOR_REGEN=python3.8``. - -- gh-97731: Specify the full path to the source location for ``make - docclean`` (needed for cross-builds). - -- gh-98949: Drop unused build dependency on ``readelf``. - -- gh-98989: Use ``python3.11``, if available, for regeneration and freezing. - -- gh-98831: Add new tooling, in ``Tools/cases_generator``, to generate the - interpreter switch statement from a list of opcode definitions. This only - affects adding, modifying or removing instruction definitions. The - instruction definitions now live in ``Python/bytecodes.c``, in the form of - a `custom DSL (under development) - <https://github.com/faster-cpython/ideas/blob/main/3.12/interpreter_definition.md>`__. - The tooling reads this file and writes ``Python/generated_cases.c.h``, - which is then included by ``Python/ceval.c`` to provide most of the cases - of the main interpreter switch. - -- gh-98817: Remove PCbuild/lib.pyproj: it's not used for anything, is only a - minor convenience for Visual Studio users (who probably mostly don't even - know about it), and it takes a lot of maintenance effort to keep updated. - -- gh-98776: Fix ``make regen-test-levenshtein`` for out-of-tree builds. - -- gh-98707: Don't use vendored ``libmpdec`` headers if - :option:`--with-system-libmpdec` is passed to :program:`configure`. Don't - use vendored ``libexpat`` headers if :option:`--with-system-expat` is - passed to :program:`configure`. - -Windows -------- - -- gh-98689: Update Windows builds to zlib v1.2.13. v1.2.12 has - :cve:`2022-37434`, but the vulnerable ``inflateGetHeader`` API is not used - by Python. - -- gh-98790: Assumes that a missing ``DLLs`` directory means that standard - extension modules are in the executable's directory. - -- gh-98745: Update :file:`py.exe` launcher to install 3.11 by default and - 3.12 on request. - -- gh-98692: Fix the :ref:`launcher` ignoring unrecognized shebang lines - instead of treating them as local paths - -- gh-94328: Update Windows installer to use SQLite 3.39.4. - -macOS ------ - -- gh-94328: Update macOS installer to SQLite 3.39.4. - -C API ------ - -- gh-98724: The :c:macro:`Py_CLEAR`, :c:macro:`Py_SETREF` and - :c:macro:`Py_XSETREF` macros now only evaluate their argument once. If the - argument has side effects, these side effects are no longer duplicated. - Patch by Victor Stinner. - -- gh-98978: Fix use-after-free in ``Py_SetPythonHome(NULL)``, - ``Py_SetProgramName(NULL)`` and ``_Py_SetProgramFullPath(NULL)`` function - calls. Issue reported by Benedikt Reinartz. Patch by Victor Stinner. - -- gh-98410: Add ``getbufferproc`` and ``releasebufferproc`` to the stable - API. - -- gh-98610: Some configurable capabilities of sub-interpreters have changed. - They always allow subprocesses (:mod:`subprocess`) now, whereas before - subprocesses could be optionally disallowed for a sub-interpreter. Instead - :func:`os.exec` can now be disallowed. Disallowing daemon threads is now - supported. Disallowing all threads is still allowed, but is never done by - default. Note that the optional restrictions are only available through - ``_Py_NewInterpreterFromConfig()``, which isn't a public API. They do not - affect the main interpreter, nor :c:func:`Py_NewInterpreter`. - -- gh-98608: A ``_PyInterpreterConfig`` has been added and - ``_Py_NewInterpreter()`` has been renamed to - ``_Py_NewInterpreterFromConfig()``. The "isolated_subinterpreters" - argument is now a granular config that captures the previous behavior. - Note that this is all "private" API. - -- gh-96853: ``Py_InitializeEx`` now correctly calls ``PyConfig_Clear`` after - initializing the interpreter (the omission didn't cause a memory leak only - because none of the dynamically allocated config fields are populated by - the wrapper function) - -- gh-91248: Add :c:func:`PyFrame_GetVar` and :c:func:`PyFrame_GetVarString` - functions to get a frame variable by its name. Patch by Victor Stinner. - - -What's New in Python 3.12.0 alpha 1? -==================================== - -*Release date: 2022-10-25* - -Security --------- - -- gh-97616: Fix multiplying a list by an integer (``list *= int``): detect - the integer overflow when the new allocated length is close to the maximum - size. Issue reported by Jordan Limor. Patch by Victor Stinner. - -- gh-97514: On Linux the :mod:`multiprocessing` module returns to using - filesystem backed unix domain sockets for communication with the - *forkserver* process instead of the Linux abstract socket namespace. Only - code that chooses to use the :ref:`"forkserver" start method - <multiprocessing-start-methods>` is affected. - - Abstract sockets have no permissions and could allow any user on the - system in the same `network namespace - <https://man7.org/linux/man-pages/man7/network_namespaces.7.html>`_ (often - the whole system) to inject code into the multiprocessing *forkserver* - process. This was a potential privilege escalation. Filesystem based - socket permissions restrict this to the *forkserver* process user as was - the default in Python 3.8 and earlier. - - This prevents Linux :cve:`2022-42919`. - -- gh-87389: :mod:`http.server`: Fix an open redirection vulnerability in the - HTTP server when an URI path starts with ``//``. Vulnerability - discovered, and initial fix proposed, by Hamza Avvan. - -- gh-79096: LWPCookieJar and MozillaCookieJar create files with file mode - 600 instead of 644 (Microsoft Windows is not affected) - -- gh-92888: Fix ``memoryview`` use after free when accessing the backing - buffer in certain cases. - -- gh-68966: The deprecated mailcap module now refuses to inject unsafe text - (filenames, MIME types, parameters) into shell commands. Instead of using - such text, it will warn and act as if a match was not found (or for test - commands, as if the test failed). - -Core and Builtins ------------------ - -- gh-98374: Suppress ImportError for invalid query for help() command. Patch - by Donghee Na. - -- gh-98461: Fix source location in bytecode for list, set and dict - comprehensions as well as generator expressions. - -- gh-98354: Added unicode check for ``name`` attribute of ``spec`` argument - passed in :func:`!_imp.create_builtin` function. - -- gh-98398: Fix source location of 'assert' bytecodes. - -- gh-98390: Fix location of sub-expressions of boolean expressions, by - reducing their scope to that of the sub-expression. - -- gh-98254: Modules from the standard library are now potentially suggested - as part of the error messages displayed by the interpreter when an - :exc:`NameError` is raised to the top level. Patch by Pablo Galindo - -- gh-97997: Add running column offset to the tokenizer state to avoid - calculating AST column information with pointer arithmetic. - -- gh-97973: Modify the tokenizer to return all necessary information the - parser needs to set location information in the AST nodes, so that the - parser does not have to calculate those doing pointer arithmetic. - -Library -------- - -- gh-96078: :func:`os.sched_yield` now release the GIL while calling - sched_yield(2). Patch by Donghee Na. - -- gh-97955: Migrate :mod:`zoneinfo` to Argument Clinic. - -Core and Builtins ------------------ - -- gh-97912: The compiler now avoids quadratic behavior when finding which - instructions should use the :opcode:`LOAD_FAST_CHECK` opcode. - -- gh-97002: Fix an issue where several frame objects could be backed by the - same interpreter frame, possibly leading to corrupted memory and hard - crashes of the interpreter. - -- gh-97943: Bugfix: :c:func:`PyFunction_GetAnnotations` should return a - borrowed reference. It was returning a new reference. - -- gh-97922: The Garbage Collector now runs only on the eval breaker - mechanism of the Python bytecode evaluation loop instead on object - allocations. The GC can also run when :c:func:`PyErr_CheckSignals` is - called so C extensions that need to run for a long time without executing - any Python code also have a chance to execute the GC periodically. - -- gh-65961: When ``__package__`` is different than ``__spec__.parent``, - raise a ``DeprecationWarning`` instead of ``ImportWarning``. - - Also remove ``importlib.util.set_package()`` which was scheduled for - removal. - -- gh-97850: Long deprecated, ``module_repr()`` should now be completely - eradicated. - -- gh-86298: In cases where ``warnings.warn_explicit()`` consults the - module's loader, an ``DeprecationWarning`` is issued when ``m.__loader__`` - differs from ``m.__spec__.loader``. - -- gh-97779: Ensure that all Python frame objects are backed by "complete" - frames. - -- gh-91052: Add API for subscribing to modification events on selected - dictionaries. - -- gh-97752: Fix possible data corruption or crashes when accessing the - ``f_back`` member of newly-created generator or coroutine frames. - -- gh-97591: Fixed a missing incref/decref pair in - ``Exception.__setstate__()``. Patch by Ofey Chan. - -- gh-97670: Remove the :func:`sys.getdxp` function and the - ``Tools/scripts/analyze_dxp.py`` script. DXP stands for "dynamic execution - pairs". They were related to ``DYNAMIC_EXECUTION_PROFILE`` and ``DXPAIRS`` - macros which have been removed in Python 3.11. Python can now be built - with :option:`./configure --enable-pystats <--enable-pystats>` to gather - statistics on Python opcodes. Patch by Victor Stinner. - -- gh-94526: Fix the Python path configuration used to initialized - :data:`sys.path` at Python startup. Paths are no longer encoded to - UTF-8/strict to avoid encoding errors if it contains surrogate characters - (bytes paths are decoded with the surrogateescape error handler). Patch by - Victor Stinner. - -- gh-96670: The parser now raises :exc:`SyntaxError` when parsing source - code containing null bytes. Patch by Pablo Galindo - -- gh-96975: Fix a crash occurring when :c:func:`PyEval_GetFrame` is called - while the topmost Python frame is in a partially-initialized state. - -- gh-96848: Fix command line parsing: reject :option:`-X int_max_str_digits - <-X>` option with no value (invalid) when the - :envvar:`PYTHONINTMAXSTRDIGITS` environment variable is set to a valid - limit. Patch by Victor Stinner. - -- gh-95921: Fix overly-broad source position information for chained - comparisons used as branching conditions. - -Library -------- - -- gh-96821: Fix undefined behaviour in ``audioop.c``. - -Core and Builtins ------------------ - -- gh-96821: Fix undefined behaviour in ``_testcapimodule.c``. - -- gh-95778: When :exc:`ValueError` is raised if an integer is larger than - the limit, mention the :func:`sys.set_int_max_str_digits` function in the - error message. Patch by Victor Stinner. - -- gh-96387: At Python exit, sometimes a thread holding the GIL can wait - forever for a thread (usually a daemon thread) which requested to drop the - GIL, whereas the thread already exited. To fix the race condition, the - thread which requested the GIL drop now resets its request before exiting. - Issue discovered and analyzed by Mingliang ZHAO. Patch by Victor Stinner. - -- gh-96864: Fix a possible assertion failure, fatal error, or - :exc:`SystemError` if a line tracing event raises an exception while - opcode tracing is enabled. - -- gh-95778: The ``PyLong_FromString`` function was refactored to make it - more maintainable and extensible. - -- gh-96678: Fix undefined behaviour in C code of null pointer arithmetic. - -- gh-96754: Make sure that all frame objects created are created from valid - interpreter frames. Prevents the possibility of invalid frames in - backtraces and signal handlers. - -- gh-90997: Improve the performance of reading and writing inline bytecode - caches on some platforms. - -- gh-96751: Remove dead code from ``CALL_FUNCTION_EX`` opcode. - -- gh-90751: :class:`memoryview` now supports half-floats. Patch by Donghee - Na and Antoine Pitrou. - -- gh-96678: Fix case of undefined behavior in ceval.c - -Library -------- - -- gh-64373: Convert :mod:`!_functools` to argument clinic. - -- gh-96641: Do not expose ``KeyWrapper`` in :mod:`!_functools`. - -Core and Builtins ------------------ - -- gh-96636: Ensure that tracing, ``sys.setrace()``, is turned on - immediately. In pre-release versions of 3.11, some tracing events might - have been lost when turning on tracing in a ``__del__`` method or - interrupt. - -- gh-96572: Fix use after free in trace refs build mode. Patch by Kumar - Aditya. - -- gh-96611: When loading a file with invalid UTF-8 inside a multi-line - string, a correct SyntaxError is emitted. - -- gh-96612: Make sure that incomplete frames do not show up in tracemalloc - traces. - -- gh-90230: Fix compiler warnings and test failures when building with - ``--enable-pystats``. - -- gh-96587: Correctly raise ``SyntaxError`` on exception groups (:pep:`654`) - on python versions prior to 3.11 - -- gh-96569: Remove two cases of undefined behavior, by adding NULL checks. - -- gh-96582: Fix possible ``NULL`` pointer dereference in - ``_PyThread_CurrentFrames``. Patch by Kumar Aditya. - -- gh-91079: Separate Python recursion checking from C recursion checking - which reduces the chance of C stack overflow and allows the recursion - limit to be increased safely. - -- gh-93911: Fix an issue that could prevent :opcode:`LOAD_ATTR` from - specializing properly when accessing properties. - -- gh-96348: Emit a DeprecationWarning when :meth:`~generator.throw`, - :meth:`~coroutine.throw` or :meth:`~agen.athrow` are called with more than - one argument. - -- gh-95196: Disable incorrect pickling of the C implemented classmethod - descriptors. - -- gh-96364: Fix text signatures of ``list.__getitem__`` and - ``dict.__getitem__``. - -- gh-96352: Fix :exc:`AttributeError` missing ``name`` and ``obj`` - attributes in :meth:`object.__getattribute__`. Patch by Philip Georgi. - -- gh-93554: Change the jump opcodes so that all conditional jumps are - forward jumps. Backward jumps are converted by the assembler into a - conditional forward jump whose target is the fallthrough block (and with a - reversed condition), followed by an unconditional backward jump. For - example: - - ``POP_JUMP_IF_TRUE BACKWARD_TARGET`` becomes ``POP_JUMP_IF_FALSE - NEXT_BLOCK; JUMP BACKWARD_TARGET``. - - All the directed conditional jump opcodes were removed: - ``POP_JUMP_FORWARD_IF_TRUE``, ``POP_JUMP_BACKWARD_IF_TRUE``, - ``POP_JUMP_FORWARD_IF_FALSE``, ``POP_JUMP_BACKWARD_IF_FALSE``, - ``POP_JUMP_FORWARD_IF_NONE``, ``POP_JUMP_BACKWARD_IF_NONE``, - ``POP_JUMP_FORWARD_IF_NOT_NONE``, ``POP_JUMP_BACKWARD_IF_NOT_NONE``. - - The corresponding opcodes without direction are no longer - pseudo-instructions, and they implement the forward conditional jumps. - -- gh-96268: Loading a file with invalid UTF-8 will now report the broken - character at the correct location. - -- gh-96237: The internal field ``_PyInterpreterFrame.f_func`` is renamed to - ``_PyInterpreterFrame.f_funcobj`` and may be any object. The ``f_globals`` - and ``f_builtin`` fields may hold junk values. - - It is safest to treat the ``_PyInterpreterFrame`` struct as opaque. - -- gh-96187: Fixed a bug that caused ``_PyCode_GetExtra`` to return garbage - for negative indexes. Patch by Pablo Galindo - -- gh-96143: Add a new ``-X perf`` Python command line option as well as - :func:`sys.activate_stack_trampoline` and - :func:`sys.deactivate_stack_trampoline` function in the :mod:`sys` module - that allows to set/unset the interpreter in a way that the Linux ``perf`` - profiler can detect Python calls. The new - :func:`sys.is_stack_trampoline_active` function allows to query the state - of the perf trampoline. Design by Pablo Galindo. Patch by Pablo Galindo - and Christian Heimes with contributions from Gregory P. Smith [Google] and - Mark Shannon. - -- gh-96071: Fix a deadlock in :c:func:`PyGILState_Ensure` when allocating - new thread state. Patch by Kumar Aditya. - -- gh-96046: :c:func:`PyType_Ready` now initializes ``ht_cached_keys`` and - performs additional checks to ensure that type objects are properly - configured. This avoids crashes in 3rd party packages that don't use - regular API to create new types. - -- gh-96005: On WASI :const:`~errno.ENOTCAPABLE` is now mapped to - :exc:`PermissionError`. The :mod:`errno` modules exposes the new error - number. ``getpath.py`` now ignores :exc:`PermissionError` when it cannot - open landmark files ``pybuilddir.txt`` and ``pyenv.cfg``. - -- gh-93678: Added test a harness for direct unit tests of the compiler's - optimization stage. The ``_testinternalcapi.optimize_cfg()`` function runs - the optimiser on a sequence of instructions. The - ``CfgOptimizationTestCase`` class in ``test.support`` has utilities for - invoking the optimizer and checking the output. - -- gh-95245: Reduces the size of a "simple" Python object from 8 to 6 words - by moving the weakreflist pointer into the pre-header directly before the - object's dict/values pointer. - -- gh-90997: Compile virtual :keyword:`try`/:keyword:`except` blocks to - handle exceptions raised during :meth:`~generator.close` or - :meth:`~generator.throw` calls through a suspended frame. - -- gh-95977: Optimized calling :meth:`~object.__get__` with vectorcall. Patch - by Kumar Aditya. - -- gh-91210: Improve error message when a parameter without a default value - follows one with a default value, and show the same message, even when the - non-default/default sequence is preceded by positional-only parameters. - -- gh-95922: Fixed bug where the compiler's ``eliminate_empty_basic_blocks`` - function ignores the last block of the code unit. - -- gh-95818: Skip over incomplete frames in :c:func:`PyThreadState_GetFrame`. - -- gh-95876: Fix format string in ``_PyPegen_raise_error_known_location`` - that can lead to memory corruption on some 64bit systems. The function was - building a tuple with ``i`` (int) instead of ``n`` (Py_ssize_t) for - Py_ssize_t arguments. - -- gh-95605: Fix misleading contents of error message when converting an - all-whitespace string to :class:`float`. - -- gh-95150: Update code object hashing and equality to consider all - debugging and exception handling tables. This fixes an issue where certain - non-identical code objects could be "deduplicated" during compilation. - -- gh-91146: Reduce allocation size of :class:`list` from :meth:`str.split` - and :meth:`str.rsplit`. Patch by Donghee Na and Inada Naoki. - -- gh-87092: Create a 'jump target label' abstraction in the compiler so that - the compiler's codegen stage does not work directly with basic blocks. - This prepares the code for changes to the underlying CFG generation - mechanism. - -- gh-95355: ``_PyPegen_Parser_New`` now properly detects token memory - allocation errors. Patch by Honglin Zhu. - -- gh-90081: Run Python code in tracer/profiler function at full speed. Fixes - slowdown in earlier versions of 3.11. - -- gh-95324: Emit a warning in debug mode if an object does not call - :c:func:`PyObject_GC_UnTrack` before deallocation. Patch by Pablo Galindo. - -- gh-95245: Merge managed dict and values pointer into a single tagged - pointer to save one word in the pre-header. - -- gh-93678: Add cfg_builder struct and refactor the relevant code so that a - cfg can be constructed without an instance of the compiler struct. - -- gh-95185: Prevented crashes in the AST constructor when compiling some - absurdly long expressions like ``"+0"*1000000``. :exc:`RecursionError` is - now raised instead. Patch by Pablo Galindo - -- gh-93351: :class:`ast.AST` node positions are now validated when provided - to :func:`compile` and other related functions. If invalid positions are - detected, a :exc:`ValueError` will be raised. - -- gh-94438: Fix an issue that caused extended opcode arguments and some - conditional pops to be ignored when calculating valid jump targets for - assignments to the ``f_lineno`` attribute of frame objects. In some cases, - this could cause inconsistent internal state, resulting in a hard crash of - the interpreter. - -- gh-95060: Undocumented ``PyCode_Addr2Location`` function now properly - returns when ``addrq`` argument is less than zero. - -- gh-95113: Replace all ``EXTENDED_ARG_QUICK`` instructions with basic - :opcode:`EXTENDED_ARG` instructions in unquickened code. Consumers of - non-adaptive bytecode should be able to handle extended arguments the same - way they were handled in CPython 3.10 and older. - -- gh-91409: Fix incorrect source location info caused by certain - optimizations in the bytecode compiler. - -Library -------- - -- gh-95023: Implement :func:`os.setns` and :func:`os.unshare` for Linux. - Patch by Noam Cohen. - -Core and Builtins ------------------ - -- gh-94036: Fix incorrect source location info for some multi-line attribute - accesses and method calls. - -- gh-94938: Fix error detection in some builtin functions when keyword - argument name is an instance of a str subclass with overloaded ``__eq__`` - and ``__hash__``. Previously it could cause SystemError or other undesired - behavior. - -Library -------- - -- gh-94996: :func:`ast.parse` will no longer parse function definitions with - positional-only params when passed ``feature_version`` less than ``(3, - 8)``. Patch by Shantanu Jain. - -Core and Builtins ------------------ - -- gh-94739: Allow jumping within, out of, and across exception handlers in - the debugger. - -Library -------- - -- gh-94949: :func:`ast.parse` will no longer parse parenthesized context - managers when passed ``feature_version`` less than ``(3, 9)``. Patch by - Shantanu Jain. - -- gh-94947: :func:`ast.parse` will no longer parse assignment expressions - when passed ``feature_version`` less than ``(3, 8)``. Patch by Shantanu - Jain. - -Core and Builtins ------------------ - -- gh-91256: Ensures the program name is known for help text during - interpreter startup. - -- gh-94869: Fix the column offsets for some expressions in multi-line - f-strings :mod:`ast` nodes. Patch by Pablo Galindo. - -- gh-94893: Fix an issue where frame object manipulations could corrupt - inline bytecode caches. - -- gh-94822: Fix an issue where lookups of metaclass descriptors may be - ignored when an identically-named attribute also exists on the class - itself. - -- gh-91153: Fix an issue where a :class:`bytearray` item assignment could - crash if it's resized by the new value's :meth:`__index__` method. - -- gh-90699: Fix reference counting bug in :meth:`bool.__repr__`. Patch by - Kumar Aditya. - -- gh-94694: Fix an issue that could cause code with multi-line method - lookups to have misleading or incorrect column offset information. In some - cases (when compiling a hand-built AST) this could have resulted in a hard - crash of the interpreter. - -- gh-93252: Fix an issue that caused internal frames to outlive failed - Python function calls, possibly resulting in memory leaks or hard - interpreter crashes. - -- gh-94215: Fix an issue where exceptions raised by line-tracing events - would cause frames to be left in an invalid state, possibly resulting in a - hard crash of the interpreter. - -- gh-92228: Disable the compiler's inline-small-exit-blocks optimization for - exit blocks that are associated with source code lines. This fixes a bug - where the debugger cannot tell where an exception handler ends and the - following code block begins. - -- gh-94485: Line number of a module's ``RESUME`` instruction is set to 0 as - specified in :pep:`626`. - -- gh-94438: Account for instructions that can push NULL to the stack when - setting line number in a frame. Prevents some (unlikely) crashes. - -- gh-91719: Reload ``opcode`` when raising ``unknown opcode error`` in the - interpreter main loop, for C compilers to generate dispatching code - independently. - -- gh-94329: Compile and run code with unpacking of extremely large sequences - (1000s of elements). Such code failed to compile. It now compiles and runs - correctly. - -- gh-94360: Fixed a tokenizer crash when reading encoded files with syntax - errors from ``stdin`` with non utf-8 encoded text. Patch by Pablo Galindo - -- gh-88116: Fix an issue when reading line numbers from code objects if the - encoded line numbers are close to ``INT_MIN``. Patch by Pablo Galindo - -- gh-94262: Don't create frame objects for incomplete frames. Prevents the - creation of generators and closures from being observable to Python and C - extensions, restoring the behavior of 3.10 and earlier. - -- gh-94192: Fix error for dictionary literals with invalid expression as - value. - -- gh-87995: :class:`types.MappingProxyType` instances are now hashable if - the underlying mapping is hashable. - -- gh-93883: Revise the display strategy of traceback enhanced error - locations. The indicators are only shown when the location doesn't span - the whole line. - -- gh-94163: Add :opcode:`BINARY_SLICE` and :opcode:`STORE_SLICE` - instructions for more efficient handling and better specialization of - slicing operations, where the slice is explicit in the source code. - -- gh-94021: Fix unreachable code warning in ``Python/specialize.c``. - -- gh-93911: Specialize ``LOAD_ATTR`` for objects with custom - ``__getattribute__``. - -- gh-93955: Improve performance of attribute lookups on objects with custom - ``__getattribute__`` and ``__getattr__``. Patch by Ken Jin. - -- gh-93911: Specialize ``LOAD_ATTR`` for ``property()`` attributes. - -- gh-93678: Refactor compiler optimisation code so that it no longer needs - the ``struct assembler`` and ``struct compiler`` passed around. Instead, - each function takes the CFG and other data that it actually needs. This - will make it possible to test this code directly. - -- gh-93841: When built with ``-enable-pystats``, ``sys._stats_on()``, - ``sys._stats_off()``, ``sys._stats_clear()`` and ``sys._stats_dump()`` - functions have been added to enable gathering stats for parts of programs. - -- gh-93516: Store offset of first traceable instruction in code object to - avoid having to recompute it for each instruction when tracing. - -- gh-93516: Lazily create a table mapping bytecode offsets to line numbers - to speed up calculation of line numbers when tracing. - -- gh-89828: :class:`types.GenericAlias` no longer relays the ``__class__`` - attribute. For example, ``isinstance(list[int], type)`` no longer returns - ``True``. - -- gh-93678: Refactor the compiler to reduce boilerplate and repetition. - -- gh-93671: Fix some exponential backtrace case happening with deeply nested - sequence patterns in match statements. Patch by Pablo Galindo - -- gh-93662: Make sure that the end column offsets are correct in multi-line - method calls. Previously, the end column could precede the column offset. - -Library -------- - -- gh-93461: :func:`importlib.invalidate_caches` now drops entries from - :data:`sys.path_importer_cache` with a relative path as name. This solves - a caching issue when a process changes its current working directory. - - ``FileFinder`` no longer inserts a dot in the path, e.g. ``/egg/./spam`` - is now ``/egg/spam``. - -Core and Builtins ------------------ - -- gh-93621: Change order of bytecode instructions emitted for - :keyword:`with` and :keyword:`async with` to reduce the number of entries - in the exception table. - -- gh-93533: Reduce the size of the inline cache for ``LOAD_METHOD`` by 2 - bytes. - -- gh-93444: Removed redundant fields from the compiler's basicblock struct: - ``b_nofallthrough``, ``b_exit``, ``b_return``. They can be easily - calculated from the opcode of the last instruction of the block. - -- gh-93429: ``LOAD_METHOD`` instruction has been removed. It was merged back - into ``LOAD_ATTR``. - -- gh-93418: Fixed an assert where an f-string has an equal sign '=' - following an expression, but there's no trailing brace. For example, - f"{i=". - -- gh-93382: Cache the result of :c:func:`PyCode_GetCode` function to restore - the *O*\ (1) lookup of the :attr:`~types.CodeType.co_code` attribute. - -- gh-93359: Ensure that custom :mod:`ast` nodes without explicit end - positions can be compiled. Patch by Pablo Galindo. - -- gh-93356: Code for exception handlers is emitted at the end of the code - unit's bytecode. This avoids one jump when no exception is raised. - -- gh-93354: Use exponential backoff for specialization counters in the - interpreter. Can reduce the number of failed specializations significantly - and avoid slowdown for those parts of a program that are not suitable for - specialization. - -- gh-93283: Improve error message for invalid syntax of conversion character - in f-string expressions. - -- gh-93345: Fix a crash in substitution of a ``TypeVar`` in nested generic - alias after ``TypeVarTuple``. - -- gh-93223: When a bytecode instruction jumps to an unconditional jump - instruction, the first instruction can often be optimized to target the - unconditional jump's target directly. For tracing reasons, this would - previously only occur if both instructions have the same line number. This - also now occurs if the unconditional jump is artificial, i.e., if it has - no associated line number. - -- gh-84694: The ``--experimental-isolated-subinterpreters`` configure option - and ``EXPERIMENTAL_ISOLATED_SUBINTERPRETERS`` macro have been removed. - -- gh-91924: Fix ``__lltrace__`` debug feature if the stdout encoding is not - UTF-8. Patch by Victor Stinner. - -- gh-93040: Wraps unused parameters in ``Objects/obmalloc.c`` with - ``Py_UNUSED``. - -- gh-93143: Avoid ``NULL`` checks for uninitialized local variables by - determining at compile time which variables must be initialized. - -- gh-93061: Backward jumps after ``async for`` loops are no longer given - dubious line numbers. - -- gh-93065: Fix contextvars HAMT implementation to handle iteration over - deep trees. - - The bug was discovered and fixed by Eli Libman. See - `MagicStack/immutables#84 - <https://github.com/MagicStack/immutables/issues/84>`_ for more details. - -- gh-93012: Added the new function :c:func:`PyType_FromMetaclass`, which - generalizes the existing :c:func:`PyType_FromModuleAndSpec` using an - additional metaclass argument. This is useful for language binding tools, - where it can be used to intercept type-related operations like subclassing - or static attribute access by specifying a metaclass with custom slots. - - Importantly, :c:func:`PyType_FromMetaclass` is available in the Limited - API, which provides a path towards migrating more binding tools onto the - Stable ABI. - -- gh-93021: Fix the :attr:`__text_signature__` for :meth:`__get__` methods - implemented in C. Patch by Jelle Zijlstra. - -- gh-89914: The operand of the ``YIELD_VALUE`` instruction is set to the - stack depth. This is done to help frame handling on ``yield`` and may - assist debuggers. - -- gh-92955: Fix memory leak in code object's lines and positions iterators - as they were not finalized at exit. Patch by Kumar Aditya. - -- gh-92930: Fixed a crash in ``_pickle.c`` from mutating collections during - ``__reduce__`` or ``persistent_id``. - -- gh-90690: The PRECALL instruction has been removed. It offered only a - small advantage for specialization and is not needed in the vast majority - of cases. - -- gh-92914: Always round the allocated size for lists up to the nearest even - number. - -- gh-92858: Improve error message for some suites with syntax error before - ':' - -- gh-90473: Decrease default recursion limit on WASI to address limited call - stack size. - -- gh-92804: Fix memory leak in ``memoryview`` iterator as it was not - finalized at exit. Patch by Kumar Aditya. - -- gh-92777: Specialize ``LOAD_METHOD`` for objects with lazy dictionaries. - Patch by Ken Jin. - -- gh-92658: Add support for connecting and binding to Hyper-V sockets on - Windows Hyper-V hosts and guests. - -- gh-92236: Remove spurious "LINE" event when starting a generator or - coroutine, visible tracing functions implemented in C. - -Library -------- - -- gh-91102: :meth:`!_warnings.warn_explicit` is ported to Argument Clinic. - -Core and Builtins ------------------ - -- gh-92619: Make the compiler duplicate an exit block only if none of its - instructions have a lineno (previously only the first instruction in the - block was checked, leading to unnecessarily duplicated blocks). - -- gh-88750: The deprecated debug build only ``PYTHONTHREADDEBUG`` - environment variable no longer does anything. - -Library -------- - -- gh-92261: Fix hang when trying to iterate over a ``typing.Union``. - -Core and Builtins ------------------ - -- gh-91432: Specialized the :opcode:`FOR_ITER` opcode using the PEP 659 - machinery - -- gh-91399: Removed duplicate '{0, 0, 0, 0, 0, 0}' entry in - 'Objects/unicodetype_db.h'. - -- gh-91578: Updates the error message for abstract class. - -- bpo-47091: Improve performance of repetition of :class:`list` and - :class:`tuple` by using ``memcpy`` to copy data and performing the - reference increments in one step. - -- bpo-46142: Make ``--help`` output shorter by moving some info to the new - ``--help-env`` and ``--help-xoptions`` command-line options. Also add - ``--help-all`` option to print complete usage. - -- bpo-42316: Document some places where an assignment expression needs - parentheses. - -Library -------- - -- gh-89237: Fix hang on Windows in ``subprocess.wait_closed()`` in - :mod:`asyncio` with :class:`~asyncio.ProactorEventLoop`. Patch by Kumar - Aditya. - -- gh-97928: :meth:`tkinter.Text.count` raises now an exception for options - starting with "-" instead of silently ignoring them. - -- gh-98393: The :mod:`os` module no longer accepts bytes-like paths, like - :class:`bytearray` and :class:`memoryview` types: only the exact - :class:`bytes` type is accepted for bytes strings. Patch by Victor - Stinner. - -- gh-98363: Added itertools.batched() to batch data into lists of a given - length with the last list possibly being shorter than the others. - -- gh-98331: Update the bundled copies of pip and setuptools to versions 22.3 - and 65.5.0 respectively. - -- gh-98307: A :meth:`~logging.handlers.SysLogHandler.createSocket` method - was added to :class:`~logging.handlers.SysLogHandler`. - -- gh-96035: Fix bug in :func:`urllib.parse.urlparse` that causes certain - port numbers containing whitespace, underscores, plus and minus signs, or - non-ASCII digits to be incorrectly accepted. - -- gh-98257: Make :func:`sys.setprofile` and :func:`sys.settrace` functions - reentrant. They can no long fail with: ``RuntimeError("Cannot install a - trace function while another trace function is being installed")``. Patch - by Victor Stinner. - -- gh-98251: Allow :mod:`venv` to pass along :envvar:`!PYTHON*` variables to - ``ensurepip`` and ``pip`` when they do not impact path resolution - -- gh-94597: Deprecated - :meth:`asyncio.AbstractEventLoopPolicy.get_child_watcher` and - :meth:`asyncio.AbstractEventLoopPolicy.set_child_watcher` methods to be - removed in Python 3.14. Patch by Kumar Aditya. - -- gh-98178: On macOS, fix a crash in :func:`syslog.syslog` in multi-threaded - applications. On macOS, the libc ``syslog()`` function is not thread-safe, - so :func:`syslog.syslog` no longer releases the GIL to call it. Patch by - Victor Stinner. - -- gh-44098: Release the GIL when creating :class:`mmap.mmap` objects on - Unix. - -- gh-87730: Wrap network errors consistently in urllib FTP support, so the - test suite doesn't fail when a network is available but the public - internet is not reachable. - -- gh-94597: The child watcher classes - :class:`~asyncio.MultiLoopChildWatcher`, - :class:`~asyncio.FastChildWatcher` and :class:`~asyncio.SafeChildWatcher` - are deprecated and will be removed in Python 3.14. Patch by Kumar Aditya. - -- gh-98023: Change default child watcher to - :class:`~asyncio.PidfdChildWatcher` on Linux systems which supports it. - Patch by Kumar Aditya. - -- gh-90985: Earlier in 3.11 we deprecated - ``asyncio.Task.cancel("message")``. We realized we were too harsh, and - have undeprecated it. - -- gh-65961: Do not rely solely on ``__cached__`` on modules; code will also - support ``__spec__.cached``. - -- gh-97646: Replace deprecated ``application/javascript`` with - ``text/javascript`` in :mod:`mimetypes`. See :rfc:`9239`. Patch by Noam - Cohen. - -- gh-97930: Apply changes from importlib_resources 5.8 and 5.9: - ``Traversable.joinpath`` provides a concrete implementation. ``as_file`` - now supports directories of resources. - -- gh-97850: Remove deprecated :func:`!importlib.util.set_loader` and - :func:`!importlib.util.module_for_loader` from :mod:`importlib.util`. - -- gh-97837: Change deprecate warning message in :mod:`unittest` from - - ``It is deprecated to return a value!=None`` - - to - - ``It is deprecated to return a value that is not None from a test case`` - -- gh-97825: Fixes :exc:`AttributeError` when :meth:`subprocess.check_output` - is used with argument ``input=None`` and either of the arguments - *encoding* or *errors* are used. - -- gh-97008: :exc:`NameError` and :exc:`AttributeError` spelling suggestions - provided since :gh:`82711` are now also emitted by the pure Python - :mod:`traceback` module. Tests for those suggestions now exercise both - implementations to ensure they are equivalent. Patch by Carl Friedrich - Bolz-Tereick and Łukasz Langa. - -- gh-97799: :mod:`dataclass` now uses :func:`inspect.get_annotations` to - examine the annotations on class objects. - -- gh-97781: Removed deprecated interfaces in ``importlib.metadata`` (entry - points accessed as dictionary, implicit dictionary construction of - sequence of ``EntryPoint`` objects, mutablility of ``EntryPoints`` result, - access of entry point by index). ``entry_points`` now has a simpler, more - straightforward API (returning ``EntryPoints``). - -- gh-96827: Avoid spurious tracebacks from :mod:`asyncio` when default - executor cleanup is delayed until after the event loop is closed (e.g. as - the result of a keyboard interrupt). - -- gh-95534: :meth:`gzip.GzipFile.read` reads 10% faster. - -- gh-97592: Avoid a crash in the C version of - :meth:`asyncio.Future.remove_done_callback` when an evil argument is - passed. - -- gh-97639: Remove ``tokenize.NL`` check from :mod:`tabnanny`. - -- gh-97545: Make Semaphore run faster. - -- gh-73588: Fix generation of the default name of - :class:`tkinter.Checkbutton`. Previously, checkbuttons in different parent - widgets could have the same short name and share the same state if - arguments "name" and "variable" are not specified. Now they are globally - unique. - -- gh-96865: fix Flag to use boundary CONFORM - - This restores previous Flag behavior of allowing flags with non-sequential - values to be combined; e.g. - - class Skip(Flag): TWO = 2 EIGHT = 8 - - Skip.TWO | Skip.EIGHT -> <Skip.TWO|EIGHT: 10> - -- gh-97005: Update bundled libexpat to 2.4.9 - -- gh-85760: Fix race condition in :mod:`asyncio` where - :meth:`~asyncio.SubprocessProtocol.process_exited` called before the - :meth:`~asyncio.SubprocessProtocol.pipe_data_received` leading to - inconsistent output. Patch by Kumar Aditya. - -- gh-96704: Pass the correct ``contextvars.Context`` when a ``asyncio`` - exception handler is called on behalf of a task or callback handle. This - adds a new ``Task`` method, ``get_context``, and also a new ``Handle`` - method with the same name. If this method is not found on a task object - (perhaps because it is a third-party library that does not yet provide - this method), the context prevailing at the time the exception handler is - called is used. - -- gh-96819: Fixed check in :mod:`multiprocessing.resource_tracker` that - guarantees that the length of a write to a pipe is not greater than - ``PIPE_BUF``. - -- gh-95865: Reduce :func:`urllib.parse.quote_from_bytes` memory use on large - values. - - Contributed by Dennis Sweeney. - -- gh-96741: Corrected type annotation for dataclass attribute - ``pstats.FunctionProfile.ncalls`` to be ``str``. - -- gh-96734: Update :mod:`unicodedata` database to Unicode 15.0.0. - -- gh-96735: Fix undefined behaviour in :func:`struct.unpack`. - -- gh-46412: Improve performance of ``bool(db)`` for large ndb/gdb databases. - Previously this would call ``len(db)`` which would iterate over all keys - -- the answer (empty or not) is known after the first key. - -- gh-96652: Fix the faulthandler implementation of - ``faulthandler.register(signal, chain=True)`` if the ``sigaction()`` - function is not available: don't call the previous signal handler if it's - NULL. Patch by Victor Stinner. - -- gh-68163: Correct conversion of :class:`numbers.Rational`'s to - :class:`float`. - -- gh-96538: Speed up ``bisect.bisect()`` functions by taking advantage of - type-stability. - -- gh-96465: Fraction hashes are now cached. - -- gh-96079: In :mod:`typing`, fix missing field ``name`` and incorrect - ``__module__`` in _AnnotatedAlias. - -- gh-96415: Remove ``types._cell_factory`` from module namespace. - -- gh-95987: Fix ``repr`` of ``Any`` subclasses. - -- gh-96388: Work around missing socket functions in - :class:`~socket.socket`'s ``__repr__``. - -- gh-96385: Fix ``TypeVarTuple.__typing_prepare_subst__``. ``TypeError`` was - not raised when using more than one ``TypeVarTuple``, like ``[*T, *V]`` in - type alias substitutions. - -- gh-96142: Add ``match_args``, ``kw_only``, ``slots``, and ``weakref_slot`` - to ``_DataclassParams``. - -- gh-96073: In :mod:`inspect`, fix overeager replacement of "``typing.``" in - formatting annotations. - -- gh-89258: Added a :meth:`~logging.Logger.getChildren` method to - :class:`logging.Logger`, to get the immediate child loggers of a logger. - -- gh-96346: Use double caching for compiled RE patterns. - -- gh-96349: Fixed a minor performance regression in - :func:`threading.Event.__init__` - -- gh-90467: Fix :class:`asyncio.streams.StreamReaderProtocol` to keep a - strong reference to the created task, so that it's not garbage collected - -- gh-96172: Fix a bug in ``unicodedata``: ``east_asian_width`` used to - return the wrong value for unassigned characters; and for yet unassigned, - but reserved characters. - -- gh-96159: Fix a performance regression in logging - TimedRotatingFileHandler. Only check for special files when the rollover - time has passed. - -- gh-96175: Fix unused ``localName`` parameter in the ``Attr`` class in - :mod:`xml.dom.minidom`. - -- gh-96145: Add AttrDict to JSON module for use with object_hook. - -- gh-96052: Fix handling compiler warnings (SyntaxWarning and - DeprecationWarning) in :func:`codeop.compile_command` when checking for - incomplete input. Previously it emitted warnings and raised a SyntaxError. - Now it always returns ``None`` for incomplete input without emitting any - warnings. - -- gh-96125: Fix incorrect condition that causes ``sys.thread_info.name`` to - be wrong on pthread platforms. - -- gh-96019: Fix a bug in the ``makeunicodedata.py`` script leading to about - 13 KiB of space saving in the ``unicodedata`` module, specifically the - character decomposition data. - -- gh-95463: Remove an incompatible change from :issue:`28080` that caused a - regression that ignored the utf8 in ``ZipInfo.flag_bits``. Patch by Pablo - Galindo. - -- gh-69142: Add ``%:z`` strftime format code (generates tzoffset with colons - as separator), see :ref:`strftime-strptime-behavior`. - -- gh-95899: Fix :class:`asyncio.Runner` to call - :func:`asyncio.set_event_loop` only once to avoid calling - :meth:`~asyncio.AbstractChildWatcher.attach_loop` multiple times on child - watchers. Patch by Kumar Aditya. - -- gh-95736: Fix :class:`unittest.IsolatedAsyncioTestCase` to set event loop - before calling setup functions. Patch by Kumar Aditya. - -- gh-95865: Speed up :func:`urllib.parse.quote_from_bytes` by replacing a - list comprehension with ``map()``. - -- gh-95861: Add support for computing Spearman's correlation coefficient to - the existing statistics.correlation() function. - -- gh-95804: Fix ``logging`` shutdown handler so it respects - ``MemoryHandler.flushOnClose``. - -- gh-95704: When a task catches :exc:`asyncio.CancelledError` and raises - some other error, the other error should generally not silently be - suppressed. - -- gh-95149: The :class:`HTTPStatus <http.HTTPStatus>` enum offers a couple - of properties to indicate the HTTP status category e.g. - ``HTTPStatus.OK.is_success``. - -- gh-95609: Update bundled pip to 22.2.2. - -- gh-95289: Fix :class:`asyncio.TaskGroup` to propagate exception when - :exc:`asyncio.CancelledError` was replaced with another exception by a - context manager. Patch by Kumar Aditya and Guido van Rossum. - -- gh-94909: Fix incorrect joining of relative Windows paths with drives in - :class:`pathlib.PurePath` initializer. - -- gh-95385: Faster ``json.dumps()`` when sorting of keys is not requested - (default). - -- gh-83901: Improve :meth:`Signature.bind <inspect.Signature.bind>` error - message for missing keyword-only arguments. - -- gh-95339: Update bundled pip to 22.2.1. - -- gh-95045: Fix GC crash when deallocating ``_lsprof.Profiler`` by - untracking it before calling any callbacks. Patch by Kumar Aditya. - -- gh-95231: Fail gracefully if :const:`~errno.EPERM` or - :const:`~errno.ENOSYS` is raised when loading :mod:`!crypt` methods. This - may happen when trying to load ``MD5`` on a Linux kernel with :abbr:`FIPS - (Federal Information Processing Standard)` enabled. - -- gh-95097: Fix :func:`asyncio.run` for :class:`asyncio.Task` - implementations without :meth:`~asyncio.Task.uncancel` method. Patch by - Kumar Aditya. - -- gh-95087: Fix IndexError in parsing invalid date in the :mod:`email` - module. - -- gh-95199: Upgrade bundled setuptools to 63.2.0. - -- gh-95194: Upgrade bundled pip to 22.2. - -- gh-93899: Fix check for existence of :const:`os.EFD_CLOEXEC`, - :const:`os.EFD_NONBLOCK` and :const:`os.EFD_SEMAPHORE` flags on older - kernel versions where these flags are not present. Patch by Kumar Aditya. - -- gh-95166: Fix :meth:`concurrent.futures.Executor.map` to cancel the - currently waiting on future on an error - e.g. TimeoutError or - KeyboardInterrupt. - -- gh-95132: Fix a :mod:`sqlite3` regression where ``*args`` and ``**kwds`` - were incorrectly relayed from :py:func:`~sqlite3.connect` to the - :class:`~sqlite3.Connection` factory. The regression was introduced in - 3.11a1 with PR 24421 (:gh:`85128`). Patch by Erlend E. Aasland. - -- gh-93157: Fix :mod:`fileinput` module didn't support ``errors`` option - when ``inplace`` is true. - -- gh-91212: Fixed flickering of the turtle window when the tracer is turned - off. Patch by Shin-myoung-serp. - -- gh-95077: Add deprecation warning for enum ``member.member`` access (e.g. - ``Color.RED.BLUE``). Remove ``EnumMeta.__getattr__``. - -- gh-95109: Ensure that timeouts scheduled with :class:`asyncio.Timeout` - that have already expired are delivered promptly. - -- gh-95105: :meth:`wsgiref.types.InputStream.__iter__` should return - ``Iterator[bytes]``, not ``Iterable[bytes]``. Patch by Shantanu Jain. - -- gh-95066: Replaced assert with exception in :func:`ast.parse`, when - ``feature_version`` has an invalid major version. Patch by Shantanu Jain. - -- gh-77617: Add :mod:`sqlite3` :ref:`command-line interface <sqlite3-cli>`. - Patch by Erlend Aasland. - -- gh-95005: Replace :c:expr:`_PyAccu` with :c:expr:`_PyUnicodeWriter` in - JSON encoder and StringIO and remove the :c:expr:`_PyAccu` implementation. - -- gh-90085: Remove ``-c/--clock`` and ``-t/--time`` CLI options of - :mod:`timeit`. The options had been deprecated since Python 3.3 and the - functionality was removed in Python 3.7. Patch by Shantanu Jain. - -- gh-94857: Fix refleak in ``_io.TextIOWrapper.reconfigure``. Patch by Kumar - Aditya. - -- gh-94821: Fix binding of unix socket to empty address on Linux to use an - available address from the abstract namespace, instead of "\0". - -- gh-94736: Fix crash when deallocating an instance of a subclass of - ``_multiprocessing.SemLock``. Patch by Kumar Aditya. - -- gh-81620: Add random.binomialvariate(). - -- gh-74116: Allow :meth:`asyncio.StreamWriter.drain` to be awaited - concurrently by multiple tasks. Patch by Kumar Aditya. - -- gh-87822: When called with ``capture_locals=True``, the :mod:`traceback` - module functions swallow exceptions raised from calls to ``repr()`` on - local variables of frames. This is in order to prioritize the original - exception over rendering errors. An indication of the failure is printed - in place of the missing value. (Patch by Simon-Martin Schroeder). - -- gh-88050: Fix :mod:`asyncio` subprocess transport to kill process cleanly - when process is blocked and avoid ``RuntimeError`` when loop is closed. - Patch by Kumar Aditya. - -- gh-94637: :meth:`SSLContext.set_default_verify_paths` now releases the GIL - around ``SSL_CTX_set_default_verify_paths`` call. The function call - performs I/O and CPU intensive work. - -- gh-94309: Deprecate aliases :class:`typing.Hashable` and - :class:`typing.Sized` - -- gh-92546: An undocumented ``python -m pprint`` benchmark is moved into - ``pprint`` suite of pyperformance. Patch by Oleg Iarygin. - -- gh-94607: Fix subclassing complex generics with type variables in - :mod:`typing`. Previously an error message saying ``Some type variables - ... are not listed in Generic[...]`` was shown. :mod:`typing` no longer - populates ``__parameters__`` with the ``__parameters__`` of a Python - class. - -- gh-94619: Remove the long-deprecated ``module_repr()`` from - :mod:`importlib`. - -- gh-93910: The ability to access the other values of an enum on an enum - (e.g. ``Color.RED.BLUE``) has been restored in order to fix a performance - regression. - -- gh-93896: Fix :func:`asyncio.run` and - :class:`unittest.IsolatedAsyncioTestCase` to always the set event loop as - it was done in Python 3.10 and earlier. Patch by Kumar Aditya. - -- gh-94343: Allow setting the attributes of ``reprlib.Repr`` during object - initialization - -- gh-94382: Port static types of ``_multiprocessing`` module to heap types. - Patch by Kumar Aditya. - -- gh-78724: Fix crash in :class:`struct.Struct` when it was not completely - initialized by initializing it in :meth:`~object.__new__`. Patch by Kumar - Aditya. - -- gh-94510: Re-entrant calls to :func:`sys.setprofile` and - :func:`sys.settrace` now raise :exc:`RuntimeError`. Patch by Pablo - Galindo. - -- gh-92336: Fix bug where :meth:`linecache.getline` fails on bad files with - :exc:`UnicodeDecodeError` or :exc:`SyntaxError`. It now returns an empty - string as per the documentation. - -- gh-94398: Once a :class:`asyncio.TaskGroup` has started shutting down - (i.e., at least one task has failed and the task group has started - cancelling the remaining tasks), it should not be possible to add new - tasks to the task group. - -- gh-94383: :mod:`xml.etree`: Remove the ``ElementTree.Element.copy()`` - method of the pure Python implementation, deprecated in Python 3.10, use - the :func:`copy.copy` function instead. The C implementation of - :mod:`xml.etree` has no ``copy()`` method, only a ``__copy__()`` method. - Patch by Victor Stinner. - -- gh-94379: :mod:`zipimport`: Remove ``find_loader()`` and ``find_module()`` - methods, deprecated in Python 3.10: use the ``find_spec()`` method - instead. See :pep:`451` for the rationale. Patch by Victor Stinner. - -- gh-94352: :func:`shlex.split`: Passing ``None`` for *s* argument now - raises an exception, rather than reading :data:`sys.stdin`. The feature - was deprecated in Python 3.9. Patch by Victor Stinner. - -- gh-94318: Strip trailing spaces in :mod:`pydoc` text output. - -- gh-89988: Fix memory leak in :class:`pickle.Pickler` when looking up - :attr:`dispatch_table`. Patch by Kumar Aditya. - -- gh-90016: Deprecate :mod:`sqlite3` :ref:`default adapters and converters - <sqlite3-default-converters>`. Patch by Erlend E. Aasland. - -- gh-94254: Fixed types of :mod:`struct` module to be immutable. Patch by - Kumar Aditya. - -- gh-93259: Now raise ``ValueError`` when ``None`` or an empty string are - passed to ``Distribution.from_name`` (and other callers). - -- gh-74696: :func:`shutil.make_archive` now passes the *root_dir* argument - to custom archivers which support it. - -- gh-94216: The :mod:`dis` module now has the opcodes for pseudo - instructions (those which are used by the compiler during code generation - but then removed or replaced by real opcodes before the final bytecode is - emitted). - -- gh-93096: Removed undocumented ``python -m codecs``. Use ``python -m - unittest test.test_codecs.EncodedFileTest`` instead. - -- gh-94207: Made :class:`!_struct.Struct` GC-tracked in order to fix a - reference leak in the :mod:`!_struct` module. - -- gh-93096: Removed undocumented ``-t`` argument of ``python -m base64``. - Use ``python -m unittest - test.test_base64.LegacyBase64TestCase.test_encodebytes`` instead. - -- gh-94226: Remove the :func:`locale.format` function, deprecated in Python - 3.7: use :func:`locale.format_string` instead. Patch by Victor Stinner. - -- gh-94199: Remove the :func:`ssl.match_hostname` function. The - :func:`ssl.match_hostname` was deprecated in Python 3.7. OpenSSL performs - hostname matching since Python 3.7, Python no longer uses the - :func:`ssl.match_hostname` function. Patch by Victor Stinner. - -- gh-94214: Document the ``context`` object used in the ``venv.EnvBuilder`` - class, and add the new environment's library path to it. - -- gh-94199: Remove the :func:`ssl.wrap_socket` function, deprecated in - Python 3.7: instead, create a :class:`ssl.SSLContext` object and call its - :class:`ssl.SSLContext.wrap_socket` method. Any package that still uses - :func:`ssl.wrap_socket` is broken and insecure. The function neither sends - a SNI TLS extension nor validates server hostname. Code is subject to - :cwe:`295` Improper Certificate Validation. Patch by Victor Stinner. - -- gh-94199: Remove the :func:`ssl.RAND_pseudo_bytes` function, deprecated in - Python 3.6: use :func:`os.urandom` or :func:`ssl.RAND_bytes` instead. - Patch by Victor Stinner. - -- gh-94199: :mod:`hashlib`: Remove the pure Python implementation of - :func:`hashlib.pbkdf2_hmac`, deprecated in Python 3.10. Python 3.10 and - newer requires OpenSSL 1.1.1 (:pep:`644`): this OpenSSL version provides a - C implementation of :func:`~hashlib.pbkdf2_hmac` which is faster. Patch by - Victor Stinner. - -- gh-94196: :mod:`gzip`: Remove the ``filename`` attribute of - :class:`gzip.GzipFile`, deprecated since Python 2.6, use the - :attr:`~gzip.GzipFile.name` attribute instead. In write mode, the - ``filename`` attribute added ``'.gz'`` file extension if it was not - present. Patch by Victor Stinner. - -- gh-94182: run the :class:`asyncio.PidfdChildWatcher` on the running loop, - this allows event loops to run subprocesses when there is no default event - loop running on the main thread - -- gh-94169: Remove ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated - in Python 3.10: just use :func:`open` instead. The :func:`open` - (:func:`io.open`) function is a built-in function. Since Python 3.10, - :func:`!_pyio.open` is also a static method. Patch by Victor Stinner. - -- gh-91742: Fix :mod:`pdb` crash after jump caused by a null pointer - dereference. Patch by Kumar Aditya. - -- gh-94101: Manual instantiation of :class:`ssl.SSLSession` objects is no - longer allowed as it lead to misconfigured instances that crashed the - interpreter when attributes where accessed on them. - -- gh-84753: :func:`inspect.iscoroutinefunction`, - :func:`inspect.isgeneratorfunction`, and - :func:`inspect.isasyncgenfunction` now properly return ``True`` for - duck-typed function-like objects like instances of - :class:`unittest.mock.AsyncMock`. - - This makes :func:`inspect.iscoroutinefunction` consistent with the - behavior of :func:`asyncio.iscoroutinefunction`. Patch by Mehdi ABAAKOUK. - -- gh-94028: Fix a regression in the :mod:`sqlite3` where statement objects - were not properly cleared and reset after use in cursor iters. The - regression was introduced by PR 27884 in Python 3.11a1. Patch by Erlend E. - Aasland. - -- gh-93973: Add keyword argument ``all_errors`` to - ``asyncio.create_connection`` so that multiple connection errors can be - raised as an ``ExceptionGroup``. - -- gh-93963: Officially deprecate from ``importlib.abc`` classes moved to - ``importlib.resources.abc``. - -- gh-93858: Prevent error when activating venv in nested fish instances. - -- gh-93820: Pickle :class:`enum.Flag` by name. - -- gh-93847: Fix repr of enum of generic aliases. - -- gh-91404: Revert the :mod:`re` memory leak when a match is terminated by a - signal or memory allocation failure as the implemented fix caused a major - performance regression. - -- gh-83499: Fix double closing of file description in :mod:`tempfile`. - -- gh-93820: Fixed a regression when :func:`copy.copy`-ing :class:`enum.Flag` - with multiple flag members. - -- gh-79512: Fixed names and ``__module__`` value of :mod:`weakref` classes - :class:`~weakref.ReferenceType`, :class:`~weakref.ProxyType`, - :class:`~weakref.CallableProxyType`. It makes them pickleable. - -- gh-91389: Fix an issue where :mod:`dis` utilities could report missing or - incorrect position information in the presence of ``CACHE`` entries. - -- gh-93626: Set ``__future__.annotations`` to have a ``None`` - mandatoryRelease to indicate that it is currently 'TBD'. - -- gh-90473: Emscripten and WASI have no home directory and cannot provide - :pep:`370` user site directory. - -- gh-90494: :func:`copy.copy` and :func:`copy.deepcopy` now always raise a - TypeError if ``__reduce__()`` returns a tuple with length 6 instead of - silently ignore the 6th item or produce incorrect result. - -- gh-90549: Fix a multiprocessing bug where a global named resource (such as - a semaphore) could leak when a child process is spawned (as opposed to - forked). - -- gh-93521: Fixed a case where dataclasses would try to add ``__weakref__`` - into the ``__slots__`` for a dataclass that specified - ``weakref_slot=True`` when it was already defined in one of its bases. - This resulted in a ``TypeError`` upon the new class being created. - -- gh-79579: :mod:`sqlite3` now correctly detects DML queries with leading - comments. Patch by Erlend E. Aasland. - -- gh-93421: Update :data:`sqlite3.Cursor.rowcount` when a DML statement has - run to completion. This fixes the row count for SQL queries like ``UPDATE - ... RETURNING``. Patch by Erlend E. Aasland. - -- gh-93475: Expose ``FICLONE`` and ``FICLONERANGE`` constants in - :mod:`fcntl`. Patch by Illia Volochii. - -- gh-93370: Deprecate :data:`!version` and :data:`!version_info`. - -- gh-91810: Suppress writing an XML declaration in open files in - ``ElementTree.write()`` with ``encoding='unicode'`` and - ``xml_declaration=None``. - -- gh-91162: Support splitting of unpacked arbitrary-length tuple over - ``TypeVar`` and ``TypeVarTuple`` parameters. For example: - - * ``A[T, *Ts][*tuple[int, ...]]`` -> ``A[int, *tuple[int, ...]]`` - * ``A[*Ts, T][*tuple[int, ...]]`` -> ``A[*tuple[int, ...], int]`` - -- gh-93353: Fix the :func:`importlib.resources.as_file` context manager to - remove the temporary file if destroyed late during Python finalization: - keep a local reference to the :func:`os.remove` function. Patch by Victor - Stinner. - -- gh-83658: Make :class:`multiprocessing.Pool` raise an exception if - ``maxtasksperchild`` is not ``None`` or a positive int. - -- gh-93312: Add :const:`os.PIDFD_NONBLOCK` flag to open a file descriptor - for a process with :func:`os.pidfd_open` in non-blocking mode. Patch by - Kumar Aditya. - -- gh-88123: Implement ``Enum.__contains__`` that returns ``True`` or - ``False`` to replace the deprecated behaviour that would sometimes raise a - :exc:`TypeError`. - -- gh-93297: Make asyncio task groups prevent child tasks from being GCed - -- gh-85308: Changed :class:`argparse.ArgumentParser` to use - :term:`filesystem encoding and error handler` instead of default text - encoding to read arguments from file (e.g. ``fromfile_prefix_chars`` - option). This change affects Windows; argument file should be encoded with - UTF-8 instead of ANSI Codepage. - -- gh-93156: Accessing the :attr:`pathlib.PurePath.parents` sequence of an - absolute path using negative index values produced incorrect results. - -- gh-93162: Add the ability for :func:`logging.config.dictConfig` to - usefully configure :class:`~logging.handlers.QueueHandler` and - :class:`~logging.handlers.QueueListener` as a pair, and add - :func:`logging.getHandlerByName` and :func:`logging.getHandlerNames` APIs - to allow access to handlers by name. - -- gh-93243: The :mod:`!smtpd` module was removed per the schedule in - :pep:`594`. - -- gh-92886: Replace ``assert`` statements with ``raise AssertionError()`` in - :class:`~wsgiref.BaseHandler` so that the tested behaviour is maintained - running with optimizations ``(-O)``. - -- gh-90155: Fix broken :class:`asyncio.Semaphore` when acquire is cancelled. - -- gh-90817: The :func:`locale.resetlocale` function is deprecated and will - be removed in Python 3.13. Use ``locale.setlocale(locale.LC_ALL, "")`` - instead. Patch by Victor Stinner. - -- gh-91513: Added ``taskName`` attribute to :mod:`logging` module for use - with :mod:`asyncio` tasks. - -- gh-74696: :func:`shutil.make_archive` no longer temporarily changes the - current working directory during creation of standard ``.zip`` or tar - archives. - -- gh-92728: The :func:`re.template` function and the corresponding - :const:`re.TEMPLATE` and :const:`re.T` flags are restored after they were - removed in 3.11.0b1, but they are now deprecated, so they might be removed - from Python 3.13. - -- gh-93033: Search in some strings (platform dependent i.e [U+0xFFFF, - U+0x0100] on Windows or [U+0xFFFFFFFF, U+0x00010000] on Linux 64-bit) are - now up to 10 times faster. - -- gh-89973: Fix :exc:`re.error` raised in :mod:`fnmatch` if the pattern - contains a character range with upper bound lower than lower bound (e.g. - ``[c-a]``). Now such ranges are interpreted as empty ranges. - -- gh-93044: No longer convert the database argument of - :func:`sqlite3.connect` to bytes before passing it to the factory. - -- gh-93010: In a very special case, the email package tried to append the - nonexistent ``InvalidHeaderError`` to the defect list. It should have been - ``InvalidHeaderDefect``. - -- gh-92986: Fix :func:`ast.unparse` when ``ImportFrom.level`` is ``None`` - -- gh-92932: Now :func:`~dis.dis` and :func:`~dis.get_instructions` handle - operand values for instructions prefixed by ``EXTENDED_ARG_QUICK``. Patch - by Sam Gross and Donghee Na. - -- gh-92675: Fix :func:`venv.ensure_directories` to accept - :class:`pathlib.Path` arguments in addition to :class:`str` paths. Patch - by David Foster. - -- gh-87901: Removed the ``encoding`` argument from :func:`os.popen` that was - added in 3.11b1. - -- gh-91922: Fix function :func:`sqlite.connect` and the - :class:`sqlite.Connection` constructor on non-UTF-8 locales. Also, they - now support bytes paths non-decodable with the current FS encoding. - -- gh-92869: Added :class:`~ctypes.c_time_t` to :mod:`ctypes`, which has the - same size as the :c:type:`time_t` type in C. - -- gh-92839: Fixed crash resulting from calling bisect.insort() or - bisect.insort_left() with the key argument not equal to ``None``. - -- gh-90473: :mod:`subprocess` now fails early on Emscripten and WASI - platforms to work around missing :func:`os.pipe` on WASI. - -- gh-89325: Removed many old deprecated :mod:`unittest` features: - :class:`~unittest.TestCase` method aliases, undocumented and broken - :class:`~unittest.TestCase` method ``assertDictContainsSubset``, - undocumented :meth:`TestLoader.loadTestsFromModule - <unittest.TestLoader.loadTestsFromModule>` parameter *use_load_tests*, and - an underscored alias of the :class:`~unittest.TextTestResult` class. - -- gh-92734: Allow multi-element reprs emitted by :mod:`reprlib` to be - pretty-printed using configurable indentation. - -- gh-92671: Fixed :func:`ast.unparse` for empty tuples in the assignment - target context. - -- gh-91581: :meth:`~datetime.datetime.utcfromtimestamp` no longer attempts - to resolve ``fold`` in the pure Python implementation, since the fold is - never 1 in UTC. In addition to being slightly faster in the common case, - this also prevents some errors when the timestamp is close to - :attr:`datetime.min <datetime.datetime.min>`. Patch by Paul Ganssle. - -- gh-86388: Removed randrange() functionality deprecated since Python 3.10. - Formerly, randrange(10.0) losslessly converted to randrange(10). Now, it - raises a TypeError. Also, the exception raised for non-integral values - such as randrange(10.5) or randrange('10') has been changed from - ValueError to TypeError. - -- gh-90385: Add :meth:`pathlib.Path.walk` as an alternative to - :func:`os.walk`. - -- gh-92550: Fix :meth:`pathlib.Path.rglob` for empty pattern. - -- gh-92591: Allow :mod:`logging` filters to return a - :class:`logging.LogRecord` instance so that filters attached to - :class:`logging.Handler`\ s can enrich records without side effects on - other handlers. - -- gh-92445: Fix a bug in :mod:`argparse` where ``nargs="*"`` would raise an - error instead of returning an empty list when 0 arguments were supplied if - choice was also defined in ``parser.add_argument``. - -- gh-92547: Remove undocumented :mod:`sqlite3` features deprecated in Python - 3.10: - - * ``sqlite3.enable_shared_cache()`` - * ``sqlite3.OptimizedUnicode`` - - Patch by Erlend E. Aasland. - -- gh-92530: Fix an issue that occurred after interrupting - :func:`threading.Condition.notify`. - -- gh-92531: The statistics.median_grouped() function now always return a - float. Formerly, it did not convert the input type when for sequences of - length one. - -- gh-84131: The :class:`pathlib.Path` deprecated method ``link_to`` has been - removed. Use 3.10's :meth:`~pathlib.Path.hardlink_to` method instead as - its semantics are consistent with that of - :meth:`~pathlib.Path.symlink_to`. - -- gh-89336: Removed :mod:`configparser` module APIs: the - ``SafeConfigParser`` class alias, the ``ParsingError.filename`` property - and parameter, and the ``ConfigParser.readfp`` method, all of which were - deprecated since Python 3.2. - -- gh-92391: Add :meth:`~object.__class_getitem__` to - :class:`csv.DictReader` and :class:`csv.DictWriter`, allowing them to be - parameterized at runtime. Patch by Marc Mueller. - -- gh-91968: Add ``SO_RTABLE`` and ``SO_USER_COOKIE`` constants to - :mod:`socket`. - -- gh-91810: :class:`~xml.etree.ElementTree.ElementTree` method - :meth:`~xml.etree.ElementTree.ElementTree.write` and function - :func:`~xml.etree.ElementTree.tostring` now use the text file's encoding - ("UTF-8" if not available) instead of locale encoding in XML declaration - when ``encoding="unicode"`` is specified. - -- gh-81790: :func:`os.path.splitdrive` now understands DOS device paths with - UNC links (beginning ``\\?\UNC\``). Contributed by Barney Gale. - -- gh-91760: Apply more strict rules for numerical group references and group - names in regular expressions. Only sequence of ASCII digits is now - accepted as a numerical reference. The group name in bytes patterns and - replacement strings can now only contain ASCII letters and digits and - underscore. - -- gh-90622: Worker processes for - :class:`concurrent.futures.ProcessPoolExecutor` are no longer spawned on - demand (a feature added in 3.9) when the multiprocessing context start - method is ``"fork"`` as that can lead to deadlocks in the child processes - due to a fork happening while threads are running. - -- gh-91577: Move imports in :class:`~multiprocessing.SharedMemory` methods - to module level so that they can be executed late in python finalization. - -- gh-91581: Remove an unhandled error case in the C implementation of calls - to :meth:`datetime.fromtimestamp <datetime.datetime.fromtimestamp>` with - no time zone (i.e. getting a local time from an epoch timestamp). This - should have no user-facing effect other than giving a possibly more - accurate error message when called with timestamps that fall on - 10000-01-01 in the local time. Patch by Paul Ganssle. - -- gh-91539: Improve performance of ``urllib.request.getproxies_environment`` - when there are many environment variables - -- gh-91524: Speed up the regular expression substitution (functions - :func:`re.sub` and :func:`re.subn` and corresponding :class:`re.Pattern` - methods) for replacement strings containing group references by 2--3 - times. - -- gh-91447: Fix findtext in the xml module to only give an empty string when - the text attribute is set to ``None``. - -- gh-91456: Deprecate current default auto() behavior: In 3.13 the default - will be for for auto() to always return the largest member value - incremented by 1, and to raise if incompatible value types are used. - -- bpo-47231: Fixed an issue with inconsistent trailing slashes in tarfile - longname directories. - -- bpo-39064: :class:`zipfile.ZipFile` now raises :exc:`zipfile.BadZipFile` - instead of ``ValueError`` when reading a corrupt zip file in which the - central directory offset is negative. - -- bpo-41287: Fix handling of the ``doc`` argument in subclasses of - :func:`property`. - -- gh-90005: :mod:`ctypes` dependency ``libffi`` is now detected with - ``pkg-config``. - -- bpo-32547: The constructors for :class:`~csv.DictWriter` and - :class:`~csv.DictReader` now coerce the ``fieldnames`` argument to a - :class:`list` if it is an iterator. - -- bpo-35540: Fix :func:`dataclasses.asdict` crash when - :class:`collections.defaultdict` is present in the attributes. - -- bpo-47063: Add an index_pages parameter to support using non-default index - page names. - -- bpo-47025: Drop support for :class:`bytes` on :data:`sys.path`. - -- bpo-46951: Order the contents of zipapp archives, to make builds more - reproducible. - -- bpo-42777: Implement :meth:`pathlib.Path.is_mount` for Windows paths. - -- bpo-46755: In :class:`QueueHandler`, clear ``stack_info`` from - :class:`LogRecord` to prevent stack trace from being written twice. - -- bpo-45393: Fix the formatting for ``await x`` and ``not x`` in the - operator precedence table when using the :func:`help` system. - -- bpo-46642: Improve error message when trying to subclass an instance of - :data:`typing.TypeVar`, :data:`typing.ParamSpec`, - :data:`typing.TypeVarTuple`, etc. Based on patch by Gregory Beauregard. - -- bpo-46364: Restrict use of sockets instead of pipes for stdin of - subprocesses created by :mod:`asyncio` to AIX platform only. - -- bpo-28249: Set :attr:`doctest.DocTest.lineno` to ``None`` when an object - does not have :attr:`~definition.__doc__`. - -- bpo-46197: Fix :mod:`ensurepip` environment isolation for subprocess - running ``pip``. - -- bpo-45924: Fix :mod:`asyncio` incorrect traceback when future's exception - is raised multiple times. Patch by Kumar Aditya. - -- bpo-45046: Add support of context managers in :mod:`unittest`: methods - :meth:`~unittest.TestCase.enterContext` and - :meth:`~unittest.TestCase.enterClassContext` of class - :class:`~unittest.TestCase`, method - :meth:`~unittest.IsolatedAsyncioTestCase.enterAsyncContext` of class - :class:`~unittest.IsolatedAsyncioTestCase` and function - :func:`unittest.enterModuleContext`. - -- bpo-44173: Enable fast seeking of uncompressed unencrypted - :class:`zipfile.ZipExtFile` - -- bpo-42627: Fix incorrect parsing of Windows registry proxy settings - -- bpo-42047: Add :func:`threading.get_native_id` support for DragonFly BSD. - Patch by David Carlier. - -- bpo-14243: The :class:`tempfile.NamedTemporaryFile` function has a new - optional parameter *delete_on_close* - -- bpo-41246: Give the same callback function for when the overlapped - operation is done to the functions ``recv``, ``recv_into``, ``recvfrom``, - ``sendto``, ``send`` and ``sendfile`` inside ``IocpProactor``. - -- bpo-39264: Fixed :meth:`collections.UserDict.get` to not call - :meth:`~object.__missing__` when a value is not found. This matches the - behavior of :class:`dict`. Patch by Bar Harel. - -- bpo-38693: :mod:`importlib` now uses f-strings internally instead of - ``str.format``. - -- bpo-38267: Add *timeout* parameter to - :meth:`asyncio.loop.shutdown_default_executor`. The default value is - ``None``, which means the executor will be given an unlimited amount of - time. When called from :class:`asyncio.Runner` or :func:`asyncio.run`, the - default timeout is 5 minutes. - -- bpo-34828: :meth:`sqlite3.Connection.iterdump` now handles databases that - use ``AUTOINCREMENT`` in one or more tables. - -- bpo-32990: Support reading wave files with the ``WAVE_FORMAT_EXTENSIBLE`` - format in the :mod:`wave` module. - -- bpo-26253: Allow adjustable compression level for tarfile streams in - :func:`tarfile.open`. - -Documentation -------------- - -- gh-85525: Remove extra row - -- gh-86404: Deprecated tools ``make suspicious`` and ``rstlint.py`` are now - removed. They have been replaced by :pypi:`sphinx-lint`. - -- gh-97741: Fix ``!`` in c domain ref target syntax via a ``conf.py`` patch, - so it works as intended to disable ref target resolution. - -- gh-96432: Fraction literals now support whitespace around the forward - slash, ``Fraction('2 / 3')``. - -- gh-96098: Improve discoverability of the higher level concurrent.futures - module by providing clearer links from the lower level threading and - multiprocessing modules. - -- gh-95957: What's New 3.11 now has instructions for how to provide compiler - and linker flags for Tcl/Tk and OpenSSL on RHEL 7 and CentOS 7. - -- gh-95588: Clarified the conflicting advice given in the :mod:`ast` - documentation about :func:`ast.literal_eval` being "safe" for use on - untrusted input while at the same time warning that it can crash the - process. The latter statement is true and is deemed unfixable without a - large amount of work unsuitable for a bugfix. So we keep the warning and - no longer claim that ``literal_eval`` is safe. - -- gh-91207: Fix stylesheet not working in Windows CHM htmlhelp docs and add - warning that they are deprecated. Contributed by C.A.M. Gerlach. - -- gh-95454: Replaced incorrectly written true/false values in documentation. - Patch by Robert O'Shea - -- gh-95451: Update library documentation with :ref:`availability information - <wasm-availability>` on WebAssembly platforms ``wasm32-emscripten`` and - ``wasm32-wasi``. - -- gh-95415: Use consistent syntax for platform availability. The directive - now supports a content body and emits a warning when it encounters an - unknown platform. - -- gh-94321: Document the :pep:`246` style protocol type - :class:`sqlite3.PrepareProtocol`. - -- gh-86128: Document a limitation in ThreadPoolExecutor where its exit - handler is executed before any handlers in atexit. - -- gh-61162: Clarify :mod:`sqlite3` behavior when - :ref:`sqlite3-connection-context-manager`. - -- gh-87260: Align :mod:`sqlite3` argument specs with the actual - implementation. - -- gh-86986: The minimum Sphinx version required to build the documentation - is now 3.2. - -- gh-88831: Augmented documentation of asyncio.create_task(). Clarified the - need to keep strong references to tasks and added a code snippet detailing - how to do this. - -- gh-86438: Clarify that :option:`-W` and :envvar:`PYTHONWARNINGS` are - matched literally and case-insensitively, rather than as regular - expressions, in :mod:`warnings`. - -- gh-93031: Update tutorial introduction output to use 3.10+ SyntaxError - invalid range. - -- gh-92240: Added release dates for "What's New in Python 3.X" for 3.0, 3.1, - 3.2, 3.8 and 3.10 - -- bpo-47161: Document that :class:`pathlib.PurePath` does not collapse - initial double slashes because they denote UNC paths. - -- bpo-40838: Document that :func:`inspect.getdoc`, - :func:`inspect.getmodule`, and :func:`inspect.getsourcefile` might return - ``None``. - -- bpo-43689: The ``Differ`` documentation now also mentions other whitespace - characters, which make it harder to understand the diff output. - -- bpo-38056: Overhaul the :ref:`error-handlers` documentation in - :mod:`codecs`. - -- bpo-13553: Document tkinter.Tk args. - -Tests ------ - -- gh-95027: On Windows, when the Python test suite is run with the ``-jN`` - option, the ANSI code page is now used as the encoding for the stdout - temporary file, rather than using UTF-8 which can lead to decoding errors. - Patch by Victor Stinner. - -- gh-96624: Fixed the failure of repeated runs of ``test.test_unittest`` - caused by side effects in ``test_dotted_but_module_not_loaded``. - -- gh-95243: Mitigate the inherent race condition from using - find_unused_port() in testSockName() by trying to find an unused port a - few times before failing. Patch by Ross Burton. - -- gh-95573: :source:`Lib/test/test_asyncio/test_ssl.py` exposed a bug in the - macOS kernel where intense concurrent load on non-blocking sockets - occasionally causes :const:`errno.ENOBUFS` ("No buffer space available") - to be emitted. FB11063974 filed with Apple, in the mean time as a - workaround buffer size used in tests on macOS is decreased to avoid - intermittent failures. Patch by Fantix King. - -- gh-95280: Fix problem with ``test_ssl`` ``test_get_ciphers`` on systems - that require perfect forward secrecy (PFS) ciphers. - -- gh-95212: Make multiprocessing test case ``test_shared_memory_recreate`` - parallel-safe. - -- gh-95218: Move tests for importlib.resources into - test_importlib.resources. - -- gh-93963: Updated tests to use preferred location for - ``importlib.resources`` ABCs. - -- gh-94675: Add a regression test for :mod:`re` exponentional slowdown when - using rjsmin. - -- gh-91330: Added more tests for :mod:`dataclasses` to cover behavior with - data descriptor-based fields. - -- gh-94208: ``test_ssl`` is now checking for supported TLS version and - protocols in more tests. - -- gh-94315: Tests now check for DAC override capability instead of relying - on :func:`os.geteuid`. - -- gh-54781: Rename test_tk to test_tkinter, and rename test_ttk_guionly to - test_ttk. Patch by Victor Stinner. - -- gh-93839: Move ``Lib/ctypes/test/`` to ``Lib/test/test_ctypes/``. Patch by - Victor Stinner. - -- gh-93951: In test_bdb.StateTestCase.test_skip, avoid including auxiliary - importers. - -- gh-93957: Provide nicer error reporting from subprocesses in - test_venv.EnsurePipTest.test_with_pip. - -- gh-93884: Add test cases for :c:func:`PyNumber_ToBase` that take a large - number or a non-int object as parameter. - -- gh-93852: test_asyncio, test_logging, test_socket and test_socketserver - now create AF_UNIX domains in the current directory to no longer fail with - ``OSError("AF_UNIX path too long")`` if the temporary directory (the - :envvar:`TMPDIR` environment variable) is too long. Patch by Victor - Stinner. - -- gh-93353: regrtest now checks if a test leaks temporary files or - directories if run with -jN option. Patch by Victor Stinner. - -- gh-84461: ``run_tests.py`` now handles cross compiling env vars correctly - and pass ``HOSTRUNNER`` to regression tests. - -- gh-93616: ``test_modulefinder`` now creates a temporary directory in - ``ModuleFinderTest.setUp()`` instead of module scope. - -- gh-93575: Fix issue with test_unicode test_raiseMemError. The test case - now use ``test.support.calcobjsize`` to calculate size of PyUnicode - structs. :func:`sys.getsizeof` may return different size when string has - UTF-8 memory. - -- gh-90473: WASI does not have a ``chmod(2)`` syscall. :func:`os.chmod` is - now a dummy function on WASI. Skip all tests that depend on working - :func:`os.chmod`. - -- gh-90473: Skip tests on WASI that require symlinks with absolute paths. - -- gh-57539: Increase calendar test coverage for - :meth:`calendar.LocaleTextCalendar.formatweekday`. - -- gh-90473: Skip symlink tests on WASI. wasmtime uses ``openat2(2)`` with - ``RESOLVE_BENEATH`` flag, which prevents symlinks with absolute paths. - -- gh-89858: Fix ``test_embed`` for out-of-tree builds. Patch by Kumar - Aditya. - -- gh-92886: Fixing tests that fail when running with optimizations (``-O``) - in ``test_imaplib.py``. - -- gh-92886: Fixing tests that fail when running with optimizations (``-O``) - in ``test_zipimport.py`` - -- gh-92886: Fixing tests that fail when running with optimizations (``-O``) - in ``test_py_compile.py`` - -- gh-92886: Fixing tests that fail when running with optimizations (``-O``) - in ``test_sys_settrace.py``. - -- gh-92886: Fixing tests that fail when running with optimizations (``-O``) - in ``_test_multiprocessing.py`` - -- gh-92670: Skip ``test_shutil.TestCopy.test_copyfile_nonexistent_dir`` test - on AIX as the test uses a trailing slash to force the OS consider the path - as a directory, but on AIX the trailing slash has no effect and is - considered as a file. - -- gh-92514: Remove unused ``test.support.BasicTestRunner``. Patch by Jelle - Zijlstra. - -- bpo-47016: Create a GitHub Actions workflow for verifying bundled pip and - setuptools. Patch by Illia Volochii and Adam Turner. - -Build ------ - -- gh-96761: Fix the build process of clang compiler for - :program:`_bootstrap_python` if LTO optimization is applied. Patch by - Matthias Görgens and Donghee Na. - -- gh-96883: ``wasm32-emscripten`` builds for browsers now include - :mod:`concurrent.futures` for :mod:`asyncio` and :mod:`unittest.mock`. - -- gh-85936: CPython now uses the ThinLTO option as the default policy if the - Clang compiler accepts the flag. Patch by Donghee Na. - -- gh-96729: Ensure that Windows releases built with - ``Tools\msi\buildrelease.bat`` are upgradable to and from official Python - releases. - -- gh-96269: Shared module targets now depend on new ``MODULE_DEPS`` - variable, which includes ``EXPORTSYMS``. This fixes a build order issue on - unsupported AIX platform. - -- gh-84461: ``wasm32-emscripten`` platform no longer builds :mod:`resource` - module, :func:`~os.getresuid`, :func:`~os.getresgid`, and their setters. - The APIs are stubs and not functional. - -- gh-95973: Add a new ``--with-dsymutil`` configure option to link debug - information in macOS. Patch by Pablo Galindo. - -- gh-90536: Use the BOLT post-link optimizer to improve performance, - particularly on medium-to-large applications. - -- gh-93744: Remove the ``configure --with-cxx-main`` build option: it didn't - work for many years. Remove the ``MAINCC`` variable from ``configure`` and - ``Makefile``. Patch by Victor Stinner. - -- gh-94801: Fix a regression in ``configure`` script that caused some header - checks to ignore custom ``CPPFLAGS``. The regression was introduced in - :gh:`94802`. - -- gh-95145: wasm32-wasi builds no longer depend on WASIX's pthread stubs. - Python now has its own stubbed pthread API. - -- gh-95174: Python now detects missing ``dup`` function in WASI and works - around some missing :mod:`errno`, :mod:`select`, and :mod:`socket` - constants. - -- gh-95174: Python now skips missing :mod:`socket` functions and methods on - WASI. WASI can only create sockets from existing fd / accept and has no - netdb. - -- gh-95085: Platforms ``wasm32-unknown-emscripten`` and - ``wasm32-unknown-wasi`` have been promoted to :pep:`11` tier 3 platform - support. - -- gh-94847: Fixed ``_decimal`` module build issue on GCC when compiling with - LTO and pydebug. Debug builds no longer force inlining of functions. - -- gh-94841: Fix the possible performance regression of - :c:func:`PyObject_Free` compiled with MSVC version 1932. - -- gh-94801: ``configure`` now uses custom flags like ``ZLIB_CFLAGS`` and - ``ZLIB_LIBS`` when searching for headers and libraries. - -- gh-94773: ``deepfreeze.py`` now supports code object with frozensets that - contain incompatible, unsortable types. - -- gh-94682: Build and test with OpenSSL 1.1.1q - -- gh-90005: Dependencies of :mod:`readline` and :mod:`curses` module are now - detected in ``configure`` script with ``pkg-config``. Only ``ncurses`` / - ``ncursesw`` are detected automatically. The old ``curses`` library is not - configured automatically. Workaround for missing ``termcap`` or ``tinfo`` - library has been removed. - -- gh-90005: Fix building ``_ctypes`` extension without ``pkg-config``. - -- gh-90005: ``_dbm`` module dependencies are now detected by configure. - -- gh-94404: ``makesetup`` now works around an issue with sed on macOS and - uses correct CFLAGS for object files that end up in a shared extension. - Module CFLAGS are used before PY_STDMODULE_CFLAGS to avoid clashes with - system headers. - -- gh-93939: C extension modules are now built by ``configure`` and ``make`` - instead of ``distutils`` and ``setup.py``. - -- gh-93939: The ``2to3``, ``idle``, and ``pydoc`` scripts are now generated - and installed by ``Makefile`` instead of ``setup.py``. - -- gh-94280: Updated pegen regeneration script on Windows to find and use - Python 3.9 or higher. Prior to this, pegen regeneration already required - 3.9 or higher, but the script may have used lower versions of Python. - -- gh-93584: Address race condition in ``Makefile`` when installing a PGO - build. All ``test`` and ``install`` targets now depend on ``all`` target. - -- gh-93491: ``configure`` now detects and reports :pep:`11` support tiers. - -- gh-69093: Fix ``Modules/Setup.stdlib.in`` rule for ``_sqlite3`` extension. - -- gh-93207: ``va_start()`` with two parameters, like ``va_start(args, - format),`` is now required to build Python. ``va_start()`` is no longer - called with a single parameter. Patch by Kumar Aditya. - -- gh-93202: Python now always use the ``%zu`` and ``%zd`` printf formats to - format a :c:type:`size_t` or ``Py_ssize_t`` number. Building Python 3.12 - requires a C11 compiler, so these printf formats are now always supported. - Patch by Victor Stinner. - -- gh-90473: Disable pymalloc and increase stack size on ``wasm32-wasi``. - -- bpo-34449: Drop invalid compiler switch ``-fPIC`` for HP aCC on HP-UX. - Patch by Michael Osipov. - -Windows -------- - -- gh-98360: Fixes :mod:`multiprocessing` spawning child processes on Windows - from a virtual environment to ensure that child processes that also use - :mod:`multiprocessing` to spawn more children will recognize that they are - in a virtual environment. - -- gh-98414: Fix :file:`py.exe` launcher handling of :samp:`-V:{<company>}/` - option when default preferences have been set in environment variables or - configuration files. - -- gh-97728: Fix possible crashes caused by the use of uninitialized - variables when pass invalid arguments in :func:`os.system` on Windows and - in Windows-specific modules (like ``winreg``). - -- gh-90989: Made :ref:`launcher` install per-user by default (unless an all - users install already exists), and clarify some text in the installer. - -- gh-97649: The ``Tools`` directory is no longer installed on Windows - -- gh-96965: Update libffi to 3.4.3 - -- gh-96577: Fixes a potential buffer overrun in :mod:`!msilib`. - -- gh-96559: Fixes the Windows launcher not using the compatible - interpretation of default tags found in configuration files when no tag - was passed to the command. - -- gh-94781: Fix :file:`pcbuild.proj` to clean previous instances of output - files in ``Python\deepfreeze`` and ``Python\frozen_modules`` directories - on Windows. Patch by Charlie Zhao. - -- gh-89545: Updates :mod:`platform` code getting the Windows version to use - native Windows Management Instrumentation (WMI) queries to determine OS - version, type, and architecture. - -- gh-95733: Make certain requirements of the Windows Store package optional - to allow installing on earlier updates of Windows. - -- gh-95656: Enable the :meth:`~sqlite3.Connection.enable_load_extension` - :mod:`sqlite3` API. - -- gh-95587: Fixes some issues where the Windows installer would incorrectly - detect certain features of an existing install when upgrading. - -- gh-94399: Restores the behaviour of :ref:`launcher` for ``/usr/bin/env`` - shebang lines, which will now search :envvar:`PATH` for an executable - matching the given command. If none is found, the usual search process is - used. - -- gh-95445: Fixes the unsuccessful removal of the HTML document directory - when uninstalling with Windows msi. - -- gh-95359: Fix :ref:`launcher` handling of :file:`py.ini` commands (it was - incorrectly expecting a ``py_`` prefix on keys) and crashes when reading - per-user configuration file. - -- gh-95285: Fix :ref:`launcher` handling of command lines where it is only - passed a short executable name. - -- gh-90844: Allow virtual environments to correctly launch when they have - spaces in the path. - -- gh-94772: Fix incorrect handling of shebang lines in py.exe launcher - -- gh-94018: :mod:`zipfile` will now remove trailing spaces from path - components when extracting files on Windows. - -- gh-93824: Drag and drop of files onto Python files in Windows Explorer has - been enabled for Windows ARM64. - -- gh-43414: :func:`os.get_terminal_size` now attempts to read the size from - any provided handle, rather than only supporting file descriptors 0, 1 and - 2. - -- gh-92817: Ensures that :file:`py.exe` will prefer an active virtual - environment over default tags specified with environment variables or - through a :file:`py.ini` file. - -- gh-92984: Explicitly disable incremental linking for non-Debug builds - -- gh-92841: :mod:`asyncio` no longer throws ``RuntimeError: Event loop is - closed`` on interpreter exit after asynchronous socket activity. Patch by - Oleg Iarygin. - -- bpo-46907: Update Windows installer to use SQLite 3.38.4. - -- gh-91061: Accept os.PathLike for the argument to winsound.PlaySound - -- bpo-42658: Support native Windows case-insensitive path comparisons by - using ``LCMapStringEx`` instead of :func:`str.lower` in - :func:`ntpath.normcase`. Add ``LCMapStringEx`` to the :mod:`!_winapi` - module. - -- bpo-38704: Prevent installation on unsupported Windows versions. - -macOS ------ - -- gh-97897: The macOS 13 SDK includes support for the ``mkfifoat`` and - ``mknodat`` system calls. Using the ``dir_fd`` option with either - :func:`os.mkfifo` or :func:`os.mknod` could result in a segfault if - cpython is built with the macOS 13 SDK but run on an earlier version of - macOS. Prevent this by adding runtime support for detection of these - system calls ("weaklinking") as is done for other newer syscalls on macOS. - -IDLE ----- - -- gh-97527: Fix a bug in the previous bugfix that caused IDLE to not start - when run with 3.10.8, 3.12.0a1, and at least Microsoft Python 3.10.2288.0 - installed without the Lib/test package. 3.11.0 was never affected. - -- gh-65802: Document handling of extensions in Save As dialogs. - -- gh-95191: Include prompts when saving Shell (interactive input and - output). - -- gh-95511: Fix the Shell context menu copy-with-prompts bug of copying an - extra line when one selects whole lines. - -- gh-95471: In the Edit menu, move ``Select All`` and add a new separator. - -- gh-95411: Enable using IDLE's module browser with .pyw files. - -- gh-89610: Add .pyi as a recognized extension for IDLE on macOS. This - allows opening stub files by double clicking on them in the Finder. - -Tools/Demos ------------ - -- gh-68686: Remove ptags and eptags scripts. - -- gh-97681: Remove the ``Tools/demo/`` directory which contained old demo - scripts. A copy can be found in the `old-demos project - <https://github.com/gvanrossum/old-demos>`_. Patch by Victor Stinner. - -- gh-97669: Remove outdated example scripts of the ``Tools/scripts/`` - directory. A copy can be found in the `old-demos project - <https://github.com/gvanrossum/old-demos>`_. Patch by Victor Stinner. - -- gh-95853: The ``wasm_build.py`` script now pre-builds Emscripten ports, - checks for broken EMSDK versions, and warns about pkg-config env vars. - -- gh-95853: The new tool ``Tools/wasm/wasm_builder.py`` automates configure, - compile, and test steps for building CPython on WebAssembly platforms. - -- gh-95731: Fix handling of module docstrings in - :file:`Tools/i18n/pygettext.py`. - -- gh-93939: Add script ``Tools/scripts/check_modules.py`` to check and - validate builtin and shared extension modules. The script also handles - ``Modules/Setup`` and will eventually replace ``setup.py``. - -- gh-94538: Fix Argument Clinic output to custom file destinations. Patch by - Erlend E. Aasland. - -- gh-94430: Allow parameters named ``module`` and ``self`` with custom C - names in Argument Clinic. Patch by Erlend E. Aasland - -- gh-86087: The ``Tools/scripts/parseentities.py`` script used to parse - HTML4 entities has been removed. - -C API ------ - -- gh-98393: The :c:func:`PyUnicode_FSDecoder` function no longer accepts - bytes-like paths, like :class:`bytearray` and :class:`memoryview` types: - only the exact :class:`bytes` type is accepted for bytes strings. Patch by - Victor Stinner. - -- gh-91051: Add :c:func:`PyType_Watch` and related APIs to allow callbacks - on :c:func:`PyType_Modified`. - -- gh-95756: Lazily create and cache ``co_`` attributes for better - performance for code getters. - -- gh-96512: Configuration for the :ref:`integer string conversion length - limitation <int_max_str_digits>` now lives in the PyConfig C API struct. - -- gh-95589: Extensions classes that set ``tp_dictoffset`` and - ``tp_weaklistoffset`` lose the support for multiple inheritance, but are - now safe. Extension classes should use :c:macro:`Py_TPFLAGS_MANAGED_DICT` - and :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` instead. - -- gh-95781: An unrecognized format character in - :c:func:`PyUnicode_FromFormat` and :c:func:`PyUnicode_FromFormatV` now - sets a :exc:`SystemError`. In previous versions it caused all the rest of - the format string to be copied as-is to the result string, and any extra - arguments discarded. - -- gh-92678: Restore the 3.10 behavior for multiple inheritance of C - extension classes that store their dictionary at the end of the struct. - -- gh-92678: Support C extensions using managed dictionaries by setting the - ``Py_TPFLAGS_MANAGED_DICT`` flag. - -- gh-93274: API for implementing vectorcall - (:c:macro:`Py_TPFLAGS_HAVE_VECTORCALL`, :c:func:`PyVectorcall_NARGS` and - :c:func:`PyVectorcall_Call`) was added to the limited API and stable ABI. - -- gh-95504: Fix sign placement when specifying width or precision in - :c:func:`PyUnicode_FromFormat` and :c:func:`PyUnicode_FromFormatV`. Patch - by Philip Georgi. - -- gh-93012: The :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` flag is now removed - from a class when the class's :py:meth:`~object.__call__` method is - reassigned. This makes vectorcall safe to use with mutable types (i.e. - heap types without the :const:`immutable <Py_TPFLAGS_IMMUTABLETYPE>` - flag). Mutable types that do not override - :c:member:`~PyTypeObject.tp_call` now inherit the - :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` flag. - -- gh-95388: Creating :c:macro:`immutable types <Py_TPFLAGS_IMMUTABLETYPE>` - with mutable bases is deprecated and is planned to be disabled in Python - 3.14. - -- gh-92678: Adds unstable C-API functions ``_PyObject_VisitManagedDict`` and - ``_PyObject_ClearManagedDict`` to allow C extensions to allow the VM to - manage their object's dictionaries. - -- gh-94936: Added :c:func:`PyCode_GetVarnames`, :c:func:`PyCode_GetCellvars` - and :c:func:`PyCode_GetFreevars` for accessing ``co_varnames``, - ``co_cellvars`` and ``co_freevars`` respectively via the C API. - -- gh-94930: Fix ``SystemError`` raised when - :c:func:`PyArg_ParseTupleAndKeywords` is used with ``#`` in ``(...)`` but - without ``PY_SSIZE_T_CLEAN`` defined. - -- gh-94731: Python again uses C-style casts for most casting operations when - compiled with C++. This may trigger compiler warnings, if they are enabled - with e.g. ``-Wold-style-cast`` or ``-Wzero-as-null-pointer-constant`` - options for ``g++``. - -- gh-93937: The following frame functions and type are now directly - available with ``#include <Python.h>``, it's no longer needed to add - ``#include <frameobject.h>``: - - * :c:func:`PyFrame_Check` - * :c:func:`PyFrame_GetBack` - * :c:func:`PyFrame_GetBuiltins` - * :c:func:`PyFrame_GetGenerator` - * :c:func:`PyFrame_GetGlobals` - * :c:func:`PyFrame_GetLasti` - * :c:func:`PyFrame_GetLocals` - * :c:type:`PyFrame_Type` - - Patch by Victor Stinner. - -- gh-91321: Fix the compatibility of the Python C API with C++ older than - C++11. Patch by Victor Stinner. - -- gh-91731: Avoid defining the ``static_assert`` when compiling with C++ 11, - where this is a keyword and redefining it can lead to undefined behavior. - Patch by Pablo Galindo - -- gh-89546: :c:func:`PyType_FromMetaclass` (and other ``PyType_From*`` - functions) now check that offsets and the base class's - :c:member:`~PyTypeObject.tp_basicsize` fit in the new class's - ``tp_basicsize``. - -- gh-93503: Add two new public functions to the public C-API, - :c:func:`PyEval_SetProfileAllThreads` and - :c:func:`PyEval_SetTraceAllThreads`, that allow to set tracing and - profiling functions in all running threads in addition to the calling one. - Also, two analogous functions to the :mod:`threading` module - (:func:`threading.setprofile_all_threads` and - :func:`threading.settrace_all_threads`) that allow to do the same from - Python. Patch by Pablo Galindo - -- gh-93442: Add C++ overloads for _Py_CAST_impl() to handle 0/NULL. This - will allow C++ extensions that pass 0 or NULL to macros using _Py_CAST() - to continue to compile. - -- gh-93466: Slot IDs in PyType_Spec may not be repeated. The documentation - was updated to mention this. For some cases of repeated slots, - PyType_FromSpec and related functions will now raise an exception. - -- gh-92898: Fix C++ compiler warnings when casting function arguments to - ``PyObject*``. Patch by Serge Guelton. - -- gh-93103: Deprecate global configuration variables, like - :c:var:`Py_IgnoreEnvironmentFlag`, in the documentation: the - :c:func:`Py_InitializeFromConfig` API should be instead. Patch by Victor - Stinner. - -- gh-77782: Deprecate global configuration variable like - :c:var:`Py_IgnoreEnvironmentFlag`: the :c:func:`Py_InitializeFromConfig` - API should be instead. Patch by Victor Stinner. - -- gh-92913: Ensures changes to :c:member:`PyConfig.module_search_paths` are - ignored unless :c:member:`PyConfig.module_search_paths_set` is set - -- gh-92781: Avoid mixing declarations and code in the C API to fix the - compiler warning: "ISO C90 forbids mixed declarations and code" - [-Werror=declaration-after-statement]. Patch by Victor Stinner. - -- gh-92651: Remove the ``token.h`` header file. There was never any public - tokenizer C API. The ``token.h`` header file was only designed to be used - by Python internals. Patch by Victor Stinner. - -- gh-92536: Remove legacy Unicode APIs based on ``Py_UNICODE*``. - -- gh-85858: Remove the ``PyUnicode_InternImmortal()`` function and the - ``SSTATE_INTERNED_IMMORTAL`` macro. Patch by Victor Stinner. - -- gh-92193: Add new function :c:func:`PyFunction_SetVectorcall` to the C API - which sets the vectorcall field of a given :c:type:`PyFunctionObject`. - - Warning: extensions using this API must preserve the behavior of the - unaltered function! - -- gh-59121: Fixed an assert that prevented ``PyRun_InteractiveOne`` from - providing tracebacks when parsing from the provided FD. - -- bpo-45383: The :c:func:`PyType_FromSpec` API will now find and use a - metaclass based on the provided bases. An error will be raised if there is - a metaclass conflict. - - -What's New in Python 3.11.0 beta 1? -=================================== - -*Release date: 2022-05-06* - -Security --------- - -- gh-57684: Add the :option:`-P` command line option and the - :envvar:`PYTHONSAFEPATH` environment variable to not prepend a potentially - unsafe path to :data:`sys.path`. Patch by Victor Stinner. - -Core and Builtins ------------------ - -- gh-89519: Chaining classmethod descriptors (introduced in bpo-19072) is - deprecated. It can no longer be used to wrap other descriptors such as - property(). The core design of this feature was flawed, and it caused a - number of downstream problems. - -- gh-92345: ``pymain_run_python()`` now imports ``readline`` and - ``rlcompleter`` before sys.path is extended to include the current working - directory of an interactive interpreter. Non-interactive interpreters are - not affected. - -- bpo-43857: Improve the :exc:`AttributeError` message when deleting a - missing attribute. Patch by Géry Ogam. - -- gh-92245: Make sure that PEP 523 is respected in all cases. In 3.11a7, - specialization may have prevented Python-to-Python calls respecting PEP - 523. - -- gh-92203: Add a closure keyword-only parameter to :func:`exec`. It can - only be specified when exec-ing a code object that uses free variables. - When specified, it must be a tuple, with exactly the number of cell - variables referenced by the code object. closure has a default value of - ``None``, and it must be ``None`` if the code object doesn't refer to any - free variables. - -- gh-91173: Disable frozen modules in debug builds. Patch by Kumar Aditya. - -- gh-92114: Improve error message when subscript a type with - ``__class_getitem__`` set to ``None``. - -- gh-92112: Fix crash triggered by an evil custom ``mro()`` on a metaclass. - -- gh-92063: The ``PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS`` instruction - now ensures methods are called only on objects of the correct type. - -- gh-92031: Deoptimize statically allocated code objects during - ``Py_FINALIZE()`` so that future ``_PyCode_Quicken`` calls always start - with unquickened code. - -- gh-92036: Fix a crash in subinterpreters related to the garbage collector. - When a subinterpreter is deleted, untrack all objects tracked by its GC. - To prevent a crash in deallocator functions expecting objects to be - tracked by the GC, leak a strong reference to these objects on purpose, so - they are never deleted and their deallocator functions are not called. - Patch by Victor Stinner. - -- gh-92032: The interpreter can now autocomplete soft keywords, as of now - ``match``, ``case``, and ``_`` (wildcard pattern) from :pep:`634`. - -- gh-87999: The warning emitted by the Python parser for a numeric literal - immediately followed by keyword has been changed from deprecation warning - to syntax warning. - -- gh-91869: Fix an issue where specialized opcodes with extended arguments - could produce incorrect tracing output or lead to assertion failures. - -- gh-91603: Speed up :class:`types.UnionType` instantiation. Based on patch - provided by Yurii Karabas. - -- gh-89373: If Python is built in debug mode, Python now ensures that - deallocator functions leave the current exception unchanged. Patch by - Victor Stinner. - -- gh-91632: Fix a minor memory leak at exit: release the memory of the - :class:`generic_alias_iterator` type. Patch by Donghee Na. - -- gh-81548: Octal escapes with value larger than ``0o377`` now produce a - :exc:`DeprecationWarning`. In a future Python version they will be a - :exc:`SyntaxWarning` and eventually a :exc:`SyntaxError`. - -- bpo-43950: Use a single compact table for line starts, ends and column - offsets. Reduces memory consumption for location info by half - -- gh-91102: Use Argument Clinic for :class:`EncodingMap`. Patch by Oleg - Iarygin. - -- gh-91636: Fixed a crash in a garbage-collection edge-case, in which a - ``PyFunction_Type.tp_clear`` function could leave a python function object - in an inconsistent state. - -- gh-91603: Speed up :func:`isinstance` and :func:`issubclass` checks for - :class:`types.UnionType`. Patch by Yurii Karabas. - -- gh-91625: Fixed a bug in which adaptive opcodes ignored any preceding - ``EXTENDED_ARG``\ s on specialization failure. - -- gh-78607: The LLTRACE special build now looks for the name ``__lltrace__`` - defined in module globals, rather than the name ``__ltrace__``, which had - been introduced as a typo. - -- gh-91576: Speed up iteration of ascii strings by 50%. Patch by Kumar - Aditya. - -- gh-89279: Improve interpreter performance on Windows by inlining a few - specific macros. - -- gh-91502: Add a new :c:func:`!_PyFrame_IsEntryFrame` API function, to - check if a :c:type:`PyFrameObject` is an entry frame. Patch by Pablo - Galindo. - -- gh-91266: Refactor the ``bytearray`` strip methods ``strip``, ``lstrip`` - and ``rstrip`` to use a common implementation. - -- gh-91479: Replaced the ``__note__`` field of :exc:`BaseException` (added - in an earlier version of 3.11) with the final design of :pep:`678`. - Namely, :exc:`BaseException` gets an :meth:`add_note` method, and its - ``__notes__`` field is created when necessary. - -- gh-46055: Speed up right shift of negative integers, by removing - unnecessary creation of temporaries. Original patch by Xinhang Xu, - reworked by Mark Dickinson. - -- gh-91462: Make the interpreter's low-level tracing (lltrace) feature - output more readable by displaying opcode names (rather than just - numbers), and by displaying stack contents before each opcode. - -- gh-89455: Fixed an uninitialized bool value in the traceback printing code - path that was introduced by the initial bpo-45292 exception groups work. - -- gh-91421: Fix a potential integer overflow in _Py_DecodeUTF8Ex. - -- gh-91428: Add ``static const char *const _PyOpcode_OpName[256] = {...};`` - to ``opcode.h`` for debug builds to assist in debugging the Python - interpreter. It is now more convenient to make various forms of debugging - output more human-readable by including opcode names rather than just the - corresponding decimal digits. - -- bpo-47120: Make :opcode:`POP_JUMP_IF_TRUE`, :opcode:`POP_JUMP_IF_FALSE`, - :opcode:`POP_JUMP_IF_NONE` and :opcode:`POP_JUMP_IF_NOT_NONE` virtual, - mapping to new relative jump opcodes. - -- bpo-45317: Add internal documentation explaining design of new (for 3.11) - frame stack. - -Library -------- - -- bpo-47197: ctypes used to mishandle ``void`` return types, so that for - instance a function declared like ``ctypes.CFUNCTYPE(None, ctypes.c_int)`` - would be called with signature ``int f(int)`` instead of ``void f(int)``. - Wasm targets require function pointers to be called with the correct - signatures so this led to crashes. The problem is now fixed. - -Core and Builtins ------------------ - -- bpo-47120: Make opcodes :opcode:`!JUMP_IF_TRUE_OR_POP` and - :opcode:`!JUMP_IF_FALSE_OR_POP` relative rather than absolute. - -- bpo-47177: Replace the ``f_lasti`` member of the internal - ``_PyInterpreterFrame`` structure with a ``prev_instr`` pointer, which - reduces overhead in the main interpreter loop. The ``f_lasti`` attribute - of Python-layer frame objects is preserved for backward-compatibility. - -- bpo-46961: Integer mod/remainder operations, including the three-argument - form of :func:`pow`, now consistently return ints from the global small - integer cache when applicable. - -- bpo-46962: Classes and functions that unconditionally declared their - docstrings ignoring the ``--without-doc-strings`` compilation flag no - longer do so. - - The classes affected are :class:`ctypes.UnionType`, - :class:`pickle.PickleBuffer`, :class:`testcapi.RecursingInfinitelyError`, - and :class:`types.GenericAlias`. - - The functions affected are 24 methods in :mod:`ctypes`. - - Patch by Oleg Iarygin. - -- bpo-46942: Use Argument Clinic for the :class:`types.MethodType` - constructor. Patch by Oleg Iarygin. - -- bpo-46764: Fix wrapping bound methods with @classmethod - -- bpo-43464: Optimize :meth:`set.intersection` for non-set arguments. - -- bpo-46721: Optimize :meth:`set.issuperset` for non-set argument. - -- bpo-46509: Add type-specialized versions of the ``Py_DECREF()``, and use - them for ``float``, ``int``, ``str``, ``bool``, and ``None`` to avoid - pointer-chasing at runtime where types are known at C compile time. - -Build ------ - -- bpo-46045: Do not use POSIX semaphores on NetBSD - -Core and Builtins ------------------ - -- bpo-36819: Fix crashes in built-in encoders with error handlers that - return position less or equal than the starting position of non-encodable - characters. - -- bpo-34093: ``marshal.dumps()`` uses ``FLAG_REF`` for all interned strings. - This makes output more deterministic and helps reproducible build. - -- bpo-26579: Added ``object.__getstate__`` which provides the default - implementation of the ``__getstate__()`` method. - - Copying and pickling instances of subclasses of builtin types bytearray, - set, frozenset, collections.OrderedDict, collections.deque, - weakref.WeakSet, and datetime.tzinfo now copies and pickles instance - attributes implemented as slots. - -Library -------- - -- gh-87901: Add the *encoding* parameter to :func:`os.popen`. - -- gh-90997: Fix an issue where :mod:`dis` utilities may interpret populated - inline cache entries as valid instructions. - -- gh-92332: Deprecate :class:`typing.Text` (removal of the class is - currently not planned). Patch by Alex Waygood. - -- gh-78157: Deprecate nested classes in enum definitions becoming members -- - in 3.13 they will be normal classes; add ``member`` and ``nonmember`` - functions to allow control over results now. - -- gh-92356: Fixed a performance regression in ctypes function calls. - -- gh-90997: Show the actual named values stored in inline caches when - ``show_caches=True`` is passed to :mod:`dis` utilities. - -- gh-92301: Prefer ``close_range()`` to iterating over procfs for file - descriptor closing in :mod:`subprocess` for better performance. - -- gh-67248: Sort the miscellaneous topics in Cmd.do_help() - -- gh-92210: Port ``socket.__init__`` to Argument Clinic. Patch by Cinder. - -- gh-80010: Add support for generalized ISO 8601 parsing to - :meth:`datetime.datetime.fromisoformat`, - :meth:`datetime.date.fromisoformat` and - :meth:`datetime.time.fromisoformat`. Patch by Paul Ganssle. - -- gh-92118: Fix a 3.11 regression in :func:`~contextlib.contextmanager`, - which caused it to propagate exceptions with incorrect tracebacks. - -- gh-90887: Adding ``COPYFILE_STAT``, ``COPYFILE_ACL`` and - ``COPYFILE_XATTR`` constants for :func:`os.fcopyfile` available in macOs. - -- gh-91215: For :deco:`~dataclasses.dataclass`, add *weakref_slot*. The new - parameter defaults to ``False``. If true, and if ``slots=True``, add a - slot named ``"__weakref__"``, which will allow instances to be weakref'd. - Contributed by Eric V. Smith - -- gh-85984: New function os.login_tty() for Unix. - -- gh-92128: Add :meth:`~object.__class_getitem__` to - :class:`logging.LoggerAdapter` and :class:`logging.StreamHandler`, - allowing them to be parameterized at runtime. Patch by Alex Waygood. - -- gh-92049: Forbid pickling constants ``re._constants.SUCCESS`` etc. - Previously, pickling did not fail, but the result could not be unpickled. - -- gh-92062: :class:`inspect.Parameter` now raises :exc:`ValueError` if - ``name`` is a keyword, in addition to the existing check that it is an - identifier. - -- gh-87390: Add an ``__unpacked__`` attribute to - :class:`types.GenericAlias`. Patch by Jelle Zijlstra. - -- gh-88089: Add support for generic :class:`typing.NamedTuple`. - -- gh-91996: New http.HTTPMethod enum to represent all the available HTTP - request methods in a convenient way - -- gh-91984: Modified test strings in test_argparse.py to not contain - trailing spaces before end of line. - -- gh-91952: Add ``encoding="locale"`` support to - :meth:`TextIOWrapper.reconfigure`. - -- gh-91954: Add *encoding* and *errors* arguments to - :func:`subprocess.getoutput` and :func:`subprocess.getstatusoutput`. - -- bpo-47029: Always close the read end of the pipe used by - :class:`multiprocessing.Queue` *after* the last write of buffered data to - the write end of the pipe to avoid :exc:`BrokenPipeError` at garbage - collection and at :meth:`multiprocessing.Queue.close` calls. Patch by Géry - Ogam. - -- gh-91928: Add ``datetime.UTC`` alias for ``datetime.timezone.utc``. - - Patch by Kabir Kwatra. - -- gh-68966: The :mod:`!mailcap` module is now deprecated and will be removed - in Python 3.13. See :pep:`594` for the rationale and the :mod:`mimetypes` - module for an alternative. Patch by Victor Stinner. - -- gh-91401: Provide a way to disable :mod:`subprocess` use of ``vfork()`` - just in case it is ever needed and document the existing mechanism for - ``posix_spawn()``. - -- gh-64783: Fix :const:`signal.NSIG` value on FreeBSD to accept signal - numbers greater than 32, like :const:`signal.SIGRTMIN` and - :const:`signal.SIGRTMAX`. Patch by Victor Stinner. - -- gh-91910: Add missing f prefix to f-strings in error messages from the - :mod:`multiprocessing` and :mod:`asyncio` modules. - -- gh-91860: Add :func:`typing.dataclass_transform`, implementing :pep:`681`. - Patch by Jelle Zijlstra. - -- gh-91832: Add ``required`` attribute to :class:`argparse.Action` repr - output. - -- gh-91827: In the :mod:`tkinter` module add method ``info_patchlevel()`` - which returns the exact version of the Tcl library as a named tuple - similar to :data:`sys.version_info`. - -- gh-84461: Add :option:`--enable-wasm-pthreads` to enable pthreads support - for WASM builds. ``Emscripten/node`` no longer has threading enabled by - default. Include additional file systems. - -- gh-91821: Fix unstable ``test_from_tuple`` test in ``test_decimal.py``. - -- gh-91217: Deprecate the xdrlib module. - -- gh-91217: Deprecate the uu module. - -- gh-91760: More strict rules will be applied for numerical group references - and group names in regular expressions. For now, a deprecation warning is - emitted for group references and group names which will be errors in - future Python versions. - -- gh-84461: Add provisional :data:`sys._emscripten_info` named tuple with - build-time and run-time information about Emscripten platform. - -- gh-90623: :func:`signal.raise_signal` and :func:`os.kill` now check - immediately for pending signals. Patch by Victor Stinner. - -- gh-91734: Fix OSS audio support on Solaris. - -- gh-90633: Include the passed value in the exception thrown by - :func:`typing.assert_never`. Patch by Jelle Zijlstra. - -- gh-91700: Compilation of regular expression containing a conditional - expression ``(?(group)...)`` now raises an appropriate :exc:`re.error` if - the group number refers to not defined group. Previously an internal - RuntimeError was raised. - -- gh-91231: Add an optional keyword *shutdown_timeout* parameter to the - :class:`multiprocessing.BaseManager` constructor. Kill the process if - terminate() takes longer than the timeout. Patch by Victor Stinner. - -- gh-91621: Fix :func:`typing.get_type_hints` for - :class:`collections.abc.Callable`. Patch by Shantanu Jain. - -- gh-90568: Parsing ``\N`` escapes of Unicode Named Character Sequences in a - :mod:`regular expression <re>` raises now :exc:`re.error` instead of - ``TypeError``. - -- gh-91670: Remove deprecated ``SO`` config variable in :mod:`sysconfig`. - -- gh-91217: Deprecate the telnetlib module. - -- gh-91217: Deprecate the sunau module. - -- gh-91217: Deprecate the spwd module. - -- gh-91217: Deprecate the sndhdr module, as well as inline needed - functionality for ``email.mime.MIMEAudio``. - -- gh-91616: :mod:`re` module, fix :meth:`~re.Pattern.fullmatch` mismatch - when using Atomic Grouping or Possessive Quantifiers. - -- gh-91217: Deprecate the 'pipes' module. - -- gh-91217: Deprecate the ossaudiodev module. - -- bpo-47256: :mod:`re` module, limit the maximum capturing group to - 1,073,741,823 in 64-bit build, this increases the depth of backtracking. - -- gh-91217: Deprecate the nis module. - -- gh-91595: Fix the comparison of character and integer inside - :func:`Tools.gdb.libpython.write_repr`. Patch by Yu Liu. - -- gh-74166: Add option to raise all errors from - :meth:`~socket.create_connection` in an :exc:`ExceptionGroup` when it - fails to create a connection. The default remains to raise only the last - error that had occurred when multiple addresses were tried. - -- gh-91487: Optimize asyncio UDP speed, over 100 times faster when - transferring a large file. - -- gh-91575: Update case-insensitive matching in the :mod:`re` module to the - latest Unicode version. - -- gh-90622: In ``concurrent.futures.process.ProcessPoolExecutor`` disallow - the "fork" multiprocessing start method when the new - ``max_tasks_per_child`` feature is used as the mix of threads+fork can - hang the child processes. Default to using the safe "spawn" start method - in that circumstance if no ``mp_context`` was supplied. - -- gh-89022: In :mod:`sqlite3`, ``SQLITE_MISUSE`` result codes are now mapped - to :exc:`~sqlite3.InterfaceError` instead of - :exc:`~sqlite3.ProgrammingError`. Also, more accurate exceptions are - raised when binding parameters fail. Patch by Erlend E. Aasland. - -- gh-91526: Stop calling ``os.device_encoding(file.fileno())`` in - :class:`TextIOWrapper`. It was complex, never documented, and didn't work - for most cases. (Patch by Inada Naoki.) - -- gh-88116: Change the frame-related functions in the :mod:`inspect` module - to return a regular object (that is backwards compatible with the old - tuple-like interface) that include the extended :pep:`657` position - information (end line number, column and end column). The affected - functions are: :func:`inspect.getframeinfo`, - :func:`inspect.getouterframes`, :func:`inspect.getinnerframes`, - :func:`inspect.stack` and :func:`inspect.trace`. Patch by Pablo Galindo. - -- gh-69093: Add indexing and slicing support to :class:`sqlite3.Blob`. Patch - by Aviv Palivoda and Erlend E. Aasland. - -- gh-69093: Add :term:`context manager` support to :class:`sqlite3.Blob`. - Patch by Aviv Palivoda and Erlend E. Aasland. - -- gh-91217: Deprecate nntplib. - -- gh-91217: Deprecate msilib. - -- gh-91404: Improve the performance of :mod:`re` matching by using computed - gotos (or "threaded code") on supported platforms and removing expensive - pointer indirections. - -- gh-91217: Deprecate the imghdr module. - -- gh-91217: Deprecate the crypt module. - -- gh-91276: Make space for longer opcodes in :mod:`dis` output. - -- bpo-47000: Make :class:`TextIOWrapper` uses locale encoding when - ``encoding="locale"`` is specified even in UTF-8 mode. - -- gh-91230: :func:`warnings.catch_warnings` now accepts arguments for - :func:`warnings.simplefilter`, providing a more concise way to locally - ignore warnings or convert them to errors. - -- gh-91217: Deprecate the chunk module. - -- gh-91498: Add the ``TCP_CONNECTION_INFO`` option (available on macOS) to - :mod:`socket`. - -- bpo-47260: Fix ``os.closerange()`` potentially being a no-op in a Linux - seccomp sandbox. - -- bpo-47087: Implement ``typing.Required`` and ``typing.NotRequired`` - (:pep:`655`). Patch by David Foster and Jelle Zijlstra. - -- bpo-47061: Deprecate cgi and cgitb. - -- bpo-47061: Deprecate audioop. - -- bpo-47000: Add :func:`locale.getencoding` to get the current locale - encoding. It is similar to ``locale.getpreferredencoding(False)`` but - ignores the :ref:`Python UTF-8 Mode <utf8-mode>`. - -- bpo-42012: Add :mod:`wsgiref.types`, containing WSGI-specific types for - static type checking. - -- bpo-47227: Suppress expression chaining for more :mod:`re` parsing errors. - -- bpo-47211: Remove undocumented and never working function - ``re.template()`` and flag ``re.TEMPLATE``. This was later reverted in - 3.11.0b2 and deprecated instead. - -- bpo-47135: :meth:`decimal.localcontext` now accepts context attributes via - keyword arguments - -- bpo-43323: Fix errors in the :mod:`email` module if the charset itself - contains undecodable/unencodable characters. - -- bpo-46841: Disassembly of quickened code. - -- bpo-46681: Forward gzip.compress() compresslevel to zlib. - -- bpo-45100: Add :func:`typing.get_overloads` and - :func:`typing.clear_overloads`. Patch by Jelle Zijlstra. - -- bpo-44807: :class:`typing.Protocol` no longer silently replaces - :meth:`__init__` methods defined on subclasses. Patch by Adrian Garcia - Badaracco. - -- bpo-46787: Fix :class:`concurrent.futures.ProcessPoolExecutor` exception - memory leak - -- bpo-46720: Add support for path-like objects to - :func:`multiprocessing.set_executable` for Windows to be on a par with - Unix-like systems. Patch by Géry Ogam. - -- bpo-46696: Add ``SO_INCOMING_CPU`` constant to :mod:`socket`. - -- bpo-46053: Fix OSS audio support on NetBSD. - -- bpo-45639: ``image/avif`` and ``image/webp`` were added to - :mod:`mimetypes`. - -- bpo-46285: Add command-line option ``-p``/``--protocol`` to module - :mod:`http.server` which specifies the HTTP version to which the server is - conformant (HTTP/1.1 conformant servers can now be run from the - command-line interface of module :mod:`http.server`). Patch by Géry Ogam. - -- bpo-44791: Accept ellipsis as the last argument of - :data:`typing.Concatenate`. - -- bpo-46547: Remove variables leaking into ``pydoc.Helper`` class namespace. - -- bpo-46415: Fix ipaddress.ip_{address,interface,network} raising TypeError - instead of ValueError if given invalid tuple as address parameter. - -- bpo-46075: ``CookieJar`` with ``DefaultCookiePolicy`` now can process - cookies from localhost with domain=localhost explicitly specified in - Set-Cookie header. - -- bpo-45995: Add a "z" option to the string formatting specification that - coerces negative zero floating-point values to positive zero after - rounding to the format precision. Contributed by John Belmonte. - -- bpo-26175: Fully implement the :class:`io.BufferedIOBase` or - :class:`io.TextIOBase` interface for - :class:`tempfile.SpooledTemporaryFile` objects. This lets them work - correctly with higher-level layers (like compression modules). Patch by - Carey Metcalfe. - -- bpo-45138: Fix a regression in the :mod:`sqlite3` trace callback where - bound parameters were not expanded in the passed statement string. The - regression was introduced in Python 3.10 by :issue:`40318`. Patch by - Erlend E. Aasland. - -- bpo-44863: Allow :class:`~typing.TypedDict` subclasses to also include - :class:`~typing.Generic` as a base class in class based syntax. Thereby - allowing the user to define a generic ``TypedDict``, just like a - user-defined generic but with ``TypedDict`` semantics. - -- bpo-44587: Fix BooleanOptionalAction to not automatically add a default - string. If a default string is desired, use a formatter to add it. - -- bpo-43827: All positional-or-keyword parameters to ``ABCMeta.__new__`` are - now positional-only to avoid conflicts with keyword arguments to be passed - to :meth:`__init_subclass__`. - -- bpo-43218: Prevent creation of a venv whose path contains the PATH - separator. This could affect the usage of the activate script. Patch by - Dustin Rodrigues. - -- bpo-38435: Add a ``process_group`` parameter to :class:`subprocess.Popen` - to help move more things off of the unsafe ``preexec_fn`` parameter. - -- bpo-42066: Fix cookies getting sorted in :func:`CookieJar.__iter__` which - is an extra behavior and not mentioned in RFC 2965 or Netscape cookie - protocol. Now the cookies in ``CookieJar`` follows the order of the - ``Set-Cookie`` header. Patch by Iman Kermani. - -- bpo-40617: Add :meth:`~sqlite3.Connection.create_window_function` to - :class:`sqlite3.Connection` for creating aggregate window functions. Patch - by Erlend E. Aasland. - -- bpo-40676: Convert :mod:`csv` to use Argument Clinic for - :func:`csv.field_size_limit`, :func:`csv.get_dialect`, - :func:`csv.unregister_dialect` and :func:`csv.list_dialects`. - -- bpo-39716: Raise an ``ArgumentError`` when the same subparser name is - added twice to an ``argparse.ArgumentParser``. This is consistent with - the (default) behavior when the same option string is added twice to an - ``ArgumentParser``. - -- bpo-36073: Raise :exc:`~sqlite3.ProgrammingError` instead of segfaulting - on recursive usage of cursors in :mod:`sqlite3` converters. Patch by - Sergey Fedoseev. - -- bpo-34975: Adds a ``start_tls()`` method to - :class:`~asyncio.streams.StreamWriter`, which upgrades the connection with - TLS using the given :class:`~ssl.SSLContext`. - -- bpo-22276: :class:`~pathlib.Path` methods :meth:`~pathlib.Path.glob` and - :meth:`~pathlib.Path.rglob` return only directories if *pattern* ends with - a pathname components separator (``/`` or :data:`~os.sep`). Patch by - Eisuke Kawashima. - -- bpo-24905: Add :meth:`~sqlite3.Connection.blobopen` to - :class:`sqlite3.Connection`. :class:`sqlite3.Blob` allows incremental I/O - operations on blobs. Patch by Aviv Palivoda and Erlend E. Aasland. - -Documentation -------------- - -- gh-91888: Add a new ``gh`` role to the documentation to link to GitHub - issues. - -- gh-91783: Document security issues concerning the use of the function - :meth:`shutil.unpack_archive` - -- gh-91547: Remove "Undocumented modules" page. - -- gh-91298: In ``importlib.resources.abc``, refined the documentation of the - Traversable Protocol, applying changes from importlib_resources 5.7.1. - -- bpo-44347: Clarify the meaning of *dirs_exist_ok*, a kwarg of - :func:`shutil.copytree`. - -- bpo-36329: Remove 'make -C Doc serve' in favour of 'make -C Doc htmlview' - -- bpo-47189: Add a What's New in Python 3.11 entry for the Faster CPython - project. Documentation by Ken Jin and Kumar Aditya. - -- bpo-38668: Update the introduction to documentation for :mod:`os.path` to - remove warnings that became irrelevant after the implementations of - :pep:`383` and :pep:`529`. - -- bpo-47115: The documentation now lists which members of C structs are part - of the :ref:`Limited API/Stable ABI <stable>`. - -- bpo-46962: All docstrings in code snippets are now wrapped into - :c:macro:`PyDoc_STR` to follow the guideline of :pep:`PEP 7's - Documentation Strings paragraph <0007#documentation-strings>`. Patch by - Oleg Iarygin. - -- bpo-26792: Improve the docstrings of :func:`runpy.run_module` and - :func:`runpy.run_path`. Original patch by Andrew Brezovsky. - -Tests ------ - -- gh-92169: Use ``warnings_helper.import_deprecated()`` to import deprecated - modules uniformly in tests. Patch by Hugo van Kemenade. - -- gh-84461: When multiprocessing is enabled, libregrtest can now use a - Python executable other than :code:`sys.executable` via the ``--python`` - flag. - -- gh-91904: Fix initialization of :envvar:`PYTHONREGRTEST_UNICODE_GUARD` - which prevented running regression tests on non-UTF-8 locale. - -- gh-91752: Added @requires_zlib to test.test_tools.test_freeze.TestFreeze. - -- gh-91607: Fix ``test_concurrent_futures`` to test the correct - multiprocessing start method context in several cases where the test logic - mixed this up. - -- bpo-40280: Threading tests are now skipped on WASM targets without pthread - support. - -- bpo-47109: Test for :mod:`ctypes.macholib.dyld`, - :mod:`ctypes.macholib.dylib`, and :mod:`ctypes.macholib.framework` are - brought from manual pre-:mod:`unittest` times to :mod:`ctypes.test` - location and structure. Patch by Oleg Iarygin. - -- bpo-29890: Add tests for :class:`ipaddress.IPv4Interface` and - :class:`ipaddress.IPv6Interface` construction with tuple arguments. - Original patch and tests by louisom. - -Build ------ - -- gh-89452: gdbm-compat is now preferred over ndbm if both are available on - the system. This allows avoiding the problematic ndbm.h on macOS. - -- gh-91731: Python is now built with ``-std=c11`` compiler option, rather - than ``-std=c99``. Patch by Victor Stinner. - -- bpo-47152: Add script and make target for generating ``sre_constants.h``. - -- bpo-47103: Windows ``PGInstrument`` builds now copy a required DLL into - the output directory, making it easier to run the profile stage of a PGO - build. - -Windows -------- - -- bpo-46907: Update Windows installer to use SQLite 3.38.3. - -- bpo-47239: Fixed --list and --list-paths output for :ref:`launcher` when - used in an active virtual environment. - -- bpo-46907: Update Windows installer to use SQLite 3.38.2. - -- bpo-46785: Fix race condition between :func:`os.stat` and unlinking a file - on Windows, by using errors codes returned by ``FindFirstFileW()`` when - appropriate in ``win32_xstat_impl``. - -- bpo-40859: Update Windows build to use xz-5.2.5 - -macOS ------ - -- bpo-46907: Update macOS installer to SQLite 3.38.4. - -Tools/Demos ------------ - -- gh-91583: Fix regression in the code generated by Argument Clinic for - functions with the ``defining_class`` parameter. - -- gh-91575: Add script ``Tools/scripts/generate_re_casefix.py`` and the make - target ``regen-re`` for generating additional data for case-insensitive - matching according to the current Unicode version. - -- gh-91551: Remove the ancient Pynche color editor. It has moved to - https://gitlab.com/warsaw/pynche - -C API ------ - -- gh-88279: Deprecate the C functions: :c:func:`!PySys_SetArgv`, - :c:func:`!PySys_SetArgvEx`, :c:func:`!PySys_SetPath`. Patch by Victor - Stinner. - -- gh-92154: Added the :c:func:`PyCode_GetCode` function. This function does - the equivalent of the Python code ``getattr(code_object, 'co_code')``. - -- gh-92173: Fix the ``closure`` argument to :c:func:`PyEval_EvalCodeEx`. - -- gh-91320: Fix C++ compiler warnings about "old-style cast" (``g++ - -Wold-style-cast``) in the Python C API. Use C++ ``reinterpret_cast<>`` - and ``static_cast<>`` casts when the Python C API is used in C++. Patch by - Victor Stinner. - -- gh-80527: Mark functions as deprecated by :pep:`623`: - :c:func:`!PyUnicode_AS_DATA`, :c:func:`!PyUnicode_AS_UNICODE`, - :c:func:`!PyUnicode_GET_DATA_SIZE`, :c:func:`!PyUnicode_GET_SIZE`. Patch - by Victor Stinner. - -- gh-91768: :c:func:`Py_REFCNT`, :c:func:`Py_TYPE`, :c:func:`Py_SIZE` and - :c:func:`Py_IS_TYPE` functions argument type is now ``PyObject*``, rather - than ``const PyObject*``. Patch by Victor Stinner. - -- gh-91020: Add ``PyBytes_Type.tp_alloc`` to initialize - ``PyBytesObject.ob_shash`` for bytes subclasses. - -- bpo-40421: Add ``PyFrame_GetLasti`` C-API function to access frame - object's ``f_lasti`` attribute safely from C code. - -- bpo-35134: Remove the ``Include/code.h`` header file. C extensions should - only include the main ``<Python.h>`` header file. Patch by Victor Stinner. - -- bpo-47169: :c:func:`PyOS_CheckStack` is now exported in the Stable ABI on - Windows. - -- bpo-47169: :c:func:`PyThread_get_thread_native_id` is excluded from the - stable ABI on platforms where it doesn't exist (like Solaris). - -- bpo-46343: Added :c:func:`PyErr_GetHandledException` and - :c:func:`PyErr_SetHandledException` as simpler alternatives to - :c:func:`PyErr_GetExcInfo` and :c:func:`PyErr_SetExcInfo`. - - They are included in the stable ABI. - - -What's New in Python 3.11.0 alpha 7? -==================================== - -*Release date: 2022-04-05* - -Core and Builtins ------------------ - -- bpo-47212: Raise :exc:`IndentationError` instead of :exc:`SyntaxError` for - a bare ``except`` with no following indent. Improve :exc:`SyntaxError` - locations for an un-parenthesized generator used as arguments. Patch by - Matthieu Dartiailh. - -- bpo-47186: Replace :opcode:`JUMP_IF_NOT_EG_MATCH` by - :opcode:`CHECK_EG_MATCH` + jump. - -- bpo-47176: Emscripten builds cannot handle signals in the usual way due to - platform limitations. Python can now handle signals. To use, set - Module.Py_EmscriptenSignalBuffer to be a single byte SharedArrayBuffer and - set Py_EMSCRIPTEN_SIGNAL_HANDLING to 1. Writing a number into the - SharedArrayBuffer will cause the corresponding signal to be raised into - the Python thread. - -- bpo-47186: Replace :opcode:`JUMP_IF_NOT_EXC_MATCH` by - :opcode:`CHECK_EXC_MATCH` + jump. - -- bpo-47120: Replace the absolute jump opcode :opcode:`JUMP_NO_INTERRUPT` by - the relative :opcode:`JUMP_BACKWARD_NO_INTERRUPT`. - -- bpo-46841: Avoid unnecessary allocations when comparing code objects. - -- bpo-47182: Fix a crash when using a named unicode character like - ``"\N{digit nine}"`` after the main interpreter has been initialized a - second time. - -- bpo-47162: WebAssembly cannot deal with bad function pointer casts - (different count or types of arguments). Python can now use call - trampolines to mitigate the problem. Define :c:macro:`PY_CALL_TRAMPOLINE` - to enable call trampolines. - -- bpo-46775: Some Windows system error codes(>= 10000) are now mapped into - the correct errno and may now raise a subclass of :exc:`OSError`. Patch by - Donghee Na. - -- bpo-47129: Improve error messages in f-string syntax errors concerning - empty expressions. - -- bpo-47117: Fix a crash if we fail to decode characters in interactive mode - if the tokenizer buffers are uninitialized. Patch by Pablo Galindo. - -- bpo-47127: Speed up calls to c functions with keyword arguments by 25% - with specialization. Patch by Kumar Aditya. - -- bpo-47120: Replaced :opcode:`JUMP_ABSOLUTE` by the relative jump - :opcode:`JUMP_BACKWARD`. - -- bpo-42197: :c:func:`!PyFrame_FastToLocalsWithError` and - :c:func:`!PyFrame_LocalsToFast` are no longer called during profiling nor - tracing. C code can access the ``f_locals`` attribute of - :c:type:`PyFrameObject` by calling :c:func:`PyFrame_GetLocals`. - -- bpo-47070: Improve performance of ``array_inplace_repeat`` by reducing the - number of invocations of ``memcpy``. Refactor the ``repeat`` and inplace - ``repeat`` methods of ``array``, ``bytes``, ``bytearray`` and - ``unicodeobject`` to use the common ``_PyBytes_Repeat``. - -- bpo-47053: Reduce de-optimization in the specialized - ``BINARY_OP_INPLACE_ADD_UNICODE`` opcode. - -- bpo-47045: Remove the ``f_state`` field from the _PyInterpreterFrame - struct. Add the ``owner`` field to the _PyInterpreterFrame struct to make - ownership explicit to simplify clearing and deallocing frames and - generators. - -Library -------- - -- bpo-46968: Check for the existence of the "sys/auxv.h" header in - :mod:`faulthandler` to avoid compilation problems in systems where this - header doesn't exist. Patch by Pablo Galindo - -Core and Builtins ------------------ - -- bpo-46329: Use low bit of ``LOAD_GLOBAL`` to indicate whether to push a - ``NULL`` before the global. Helps streamline the call sequence a bit. - -- bpo-46841: Quicken bytecode in-place by storing it as part of the - corresponding ``PyCodeObject``. - -- bpo-47012: Speed up iteration of :class:`bytes` and :class:`bytearray` by - 30%. Patch by Kumar Aditya. - -- bpo-47009: Improved the performance of :meth:`list.append` and list - comprehensions by optimizing for the common case, where no resize is - needed. Patch by Dennis Sweeney. - -- bpo-47005: Improve performance of ``bytearray_repeat`` and - ``bytearray_irepeat`` by reducing the number of invocations of ``memcpy``. - -Library -------- - -- bpo-46829: Deprecate passing a message into :meth:`asyncio.Future.cancel` - and :meth:`asyncio.Task.cancel` - -Core and Builtins ------------------ - -- bpo-46993: Speed up :class:`bytearray` creation from :class:`list` and - :class:`tuple` by 40%. Patch by Kumar Aditya. - -- bpo-39829: Removed the ``__len__()`` call when initializing a list and - moved initializing to ``list_extend``. Patch by Jeremiah Pascual. - -- bpo-46944: Speed up throwing exception in generator with - :c:macro:`METH_FASTCALL` calling convention. Patch by Kumar Aditya. - -- bpo-46841: Modify :opcode:`STORE_SUBSCR` to use an inline cache entry - (rather than its oparg) as an adaptive counter. - -- bpo-46841: Use inline caching for :opcode:`!PRECALL` and :opcode:`CALL`, - and remove the internal machinery for managing the (now unused) non-inline - caches. - -- bpo-46881: Statically allocate and initialize the latin1 characters. - -- bpo-46838: Improve syntax errors for incorrect function definitions. Patch - by Pablo Galindo - -- bpo-43721: Fix docstrings of :attr:`~property.getter`, - :attr:`~property.setter`, and :attr:`~property.deleter` to clarify that - they create a new copy of the property. - -- bpo-43224: Make grammar changes required for PEP 646. - -Library -------- - -- bpo-47208: Allow vendors to override :const:`CTYPES_MAX_ARGCOUNT`. - -- bpo-23689: :mod:`re` module: fix memory leak when a match is terminated by - a signal or memory allocation failure. Patch by Ma Lin. - -- bpo-47167: Allow overriding a future compliance check in - :class:`asyncio.Task`. - -- bpo-47151: When subprocess tries to use vfork, it now falls back to fork - if vfork returns an error. This allows use in situations where vfork isn't - allowed by the OS kernel. - -- bpo-47152: Convert the :mod:`re` module into a package. Deprecate modules - ``sre_compile``, ``sre_constants`` and ``sre_parse``. - -- bpo-4833: Add :meth:`ZipFile.mkdir` - -- bpo-27929: Fix :meth:`asyncio.loop.sock_connect` to only resolve names for - :const:`socket.AF_INET` or :const:`socket.AF_INET6` families. Resolution - may not make sense for other families, like :const:`socket.AF_BLUETOOTH` - and :const:`socket.AF_UNIX`. - -- bpo-14265: Adds the fully qualified test name to unittest output - -- bpo-47061: Deprecate the aifc module. - -- bpo-39622: Handle Ctrl+C in asyncio programs to interrupt the main task. - -- bpo-47101: :const:`hashlib.algorithms_available` now lists only algorithms - that are provided by activated crypto providers on OpenSSL 3.0. Legacy - algorithms are not listed unless the legacy provider has been loaded into - the default OSSL context. - -- bpo-47099: All :exc:`URLError` exception messages raised in - :class:`urllib.request.URLopener` now contain a colon between ``ftp - error`` and the rest of the message. Previously, - :func:`~urllib.request.URLopener.open_ftp` missed the colon. Patch by Oleg - Iarygin. - -- bpo-47099: Exception chaining is changed from - :func:`Exception.with_traceback`/:func:`sys.exc_info` to :pep:`3134`. - Patch by Oleg Iarygin. - -- bpo-47095: :mod:`hashlib`'s internal ``_blake2`` module now prefers - ``libb2`` from https://www.blake2.net/ over Python's vendored copy of - blake2. - -- bpo-47098: The Keccak Code Package for :mod:`hashlib`'s internal ``_sha3`` - module has been replaced with tiny_sha3. The module is used as fallback - when Python is built without OpenSSL. - -- bpo-47088: Implement :data:`typing.LiteralString`, part of :pep:`675`. - Patch by Jelle Zijlstra. - -- bpo-42885: Optimize :func:`re.search`, :func:`re.split`, - :func:`re.findall`, :func:`re.finditer` and :func:`re.sub` for regular - expressions starting with ``\A`` or ``^``. - -- bpo-23691: Protect the :func:`re.finditer` iterator from re-entering. - -- bpo-47067: Optimize calling ``GenericAlias`` objects by using :pep:`590` - ``vectorcall`` and by replacing ``PyObject_SetAttrString`` with - ``PyObject_SetAttr``. - -- bpo-28080: Add the *metadata_encoding* parameter in the - :class:`zipfile.ZipFile` constructor and the ``--metadata-encoding`` - option in the :mod:`zipfile` CLI to allow reading zipfiles using - non-standard codecs to encode the filenames within the archive. - -- bpo-47000: Make :func:`io.text_encoding` returns "utf-8" when UTF-8 mode - is enabled. - -- bpo-42369: Fix thread safety of :meth:`zipfile._SharedFile.tell` to avoid - a "zipfile.BadZipFile: Bad CRC-32 for file" exception when reading a - :class:`ZipFile` from multiple threads. - -- bpo-38256: Fix :func:`binascii.crc32` when it is compiled to use zlib'c - crc32 to work properly on inputs 4+GiB in length instead of returning the - wrong result. The workaround prior to this was to always feed the function - data in increments smaller than 4GiB or to just call the zlib module - function. - - We also have :func:`binascii.crc32` release the GIL when computing on - larger inputs as :func:`zlib.crc32` and :mod:`hashlib` do. - - This also boosts performance on Windows as it now uses the zlib crc32 - implementation for :func:`binascii.crc32` for a 2-3x speedup. - - That the stdlib has a crc32 API in two modules is a known historical - oddity. This moves us closer to a single implementation behind them. - -- bpo-47066: Global inline flags (e.g. ``(?i)``) can now only be used at the - start of the regular expressions. Using them not at the start of - expression was deprecated since Python 3.6. - -- bpo-39394: A warning about inline flags not at the start of the regular - expression now contains the position of the flag. - -- bpo-433030: Add support of atomic grouping (``(?>...)``) and possessive - quantifiers (``*+``, ``++``, ``?+``, ``{m,n}+``) in :mod:`regular - expressions <re>`. - -- bpo-47062: Implement :class:`asyncio.Runner` context manager. - -- bpo-46382: :func:`~dataclasses.dataclass` ``slots=True`` now correctly - omits slots already defined in base classes. Patch by Arie Bovenberg. - -- bpo-47057: Use FASTCALL convention for ``FutureIter.throw()`` - -- bpo-47061: Deprecate the various modules listed by :pep:`594`: - - aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, - msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, - telnetlib, uu, xdrlib - -- bpo-34790: Remove passing coroutine objects to :func:`asyncio.wait`. - -- bpo-47039: Normalize ``repr()`` of asyncio future and task objects. - -- bpo-2604: Fix bug where doctests using globals would fail when run - multiple times. - -- bpo-45150: Add :func:`hashlib.file_digest` helper for efficient hashing of - file object. - -- bpo-34861: Made cumtime the default sorting key for cProfile - -- bpo-45997: Fix :class:`asyncio.Semaphore` re-aquiring FIFO order. - -- bpo-47022: The :mod:`!asynchat`, :mod:`!asyncore` and :mod:`!smtpd` - modules have been deprecated since at least Python 3.6. Their - documentation and deprecation warnings and have now been updated to note - they will removed in Python 3.12 (:pep:`594`). - -- bpo-43253: Fix a crash when closing transports where the underlying socket - handle is already invalid on the Proactor event loop. - -- bpo-40280: :func:`select.select` now passes ``NULL`` to ``select`` for - each empty fdset. - -- bpo-47004: Apply bugfixes from importlib_metadata 4.11.3, including bugfix - for EntryPoint.extras, which was returning match objects and not the - extras strings. - -- bpo-46998: Allow subclassing of :class:`typing.Any`. Patch by Shantanu - Jain. - -- bpo-46995: Deprecate missing :meth:`asyncio.Task.set_name` for third-party - task implementations, schedule making it mandatory in Python 3.13. - -- bpo-46994: Accept explicit contextvars.Context in - :func:`asyncio.create_task` and :meth:`asyncio.loop.create_task`. - -- bpo-46981: ``typing.get_args(typing.Tuple[()])`` now returns ``()`` - instead of ``((),)``. - -- bpo-46968: Add ``os.sysconf_names['SC_MINSIGSTKSZ']``. - -- bpo-46985: Upgrade pip wheel bundled with ensurepip (pip 22.0.4) - -- bpo-46968: :mod:`faulthandler`: On Linux 5.14 and newer, dynamically - determine size of signal handler stack size CPython allocates using - ``getauxval(AT_MINSIGSTKSZ)``. This changes allows for Python extension's - request to Linux kernel to use AMX_TILE instruction set on Sapphire Rapids - Xeon processor to succeed, unblocking use of the ISA in frameworks. - -- bpo-46917: The :data:`math.nan` value is now always available. Patch by - Victor Stinner. - -- bpo-46955: Expose :class:`asyncio.base_events.Server` as - :class:`asyncio.Server`. Patch by Stefan Zabka. - -- bpo-23325: The :mod:`signal` module no longer assumes that - :const:`~signal.SIG_IGN` and :const:`~signal.SIG_DFL` are small int - singletons. - -- bpo-46932: Update bundled libexpat to 2.4.7 - -- bpo-46933: The :mod:`pwd` module is now optional. - :func:`os.path.expanduser` returns the path when the :mod:`pwd` module is - not available. - -- bpo-40059: :pep:`680`, the :mod:`tomllib` module. Adds support for parsing - TOML. - -- bpo-464471: :func:`asyncio.timeout` and :func:`asyncio.timeout_at` context - managers added. Patch by Tin Tvrtković and Andrew Svetlov. - -- bpo-46805: Added raw datagram socket functions for asyncio: - :meth:`~asyncio.AbstractEventLoop.sock_sendto`, - :meth:`~asyncio.AbstractEventLoop.sock_recvfrom` and - :meth:`~asyncio.AbstractEventLoop.sock_recvfrom_into`. - -- bpo-46644: No longer require valid typeforms to be callable. This allows - :data:`typing.Annotated` to wrap :data:`typing.ParamSpecArgs` and - :data:`dataclasses.InitVar`. Patch by Gregory Beauregard. - -- bpo-46581: Brings :class:`ParamSpec` propagation for :class:`GenericAlias` - in line with :class:`Concatenate` (and others). - -- bpo-45413: Define *posix_venv* and *nt_venv* :ref:`sysconfig installation - schemes <installation_paths>` to be used for bootstrapping new virtual - environments. Add *venv* sysconfig installation scheme to get the - appropriate one of the above. The schemes are identical to the - pre-existing *posix_prefix* and *nt* install schemes. The :mod:`venv` - module now uses the *venv* scheme to create new virtual environments - instead of hardcoding the paths depending only on the platform. Downstream - Python distributors customizing the *posix_prefix* or *nt* install scheme - in a way that is not compatible with the install scheme used in virtual - environments are encouraged not to customize the *venv* schemes. When - Python itself runs in a virtual environment, - :func:`sysconfig.get_default_scheme` and - :func:`sysconfig.get_preferred_scheme` with ``key="prefix"`` returns - *venv*. - -- bpo-43224: Implement support for PEP 646 in typing.py. - -- bpo-43224: Allow unpacking types.GenericAlias objects, e.g. ``*tuple[int, - str]``. - -- bpo-46557: Warnings captured by the logging module are now logged without - a format string to prevent systems that group logs by the msg argument - from grouping captured warnings together. - -- bpo-41370: :func:`typing.get_type_hints` now supports evaluating strings - as forward references in :ref:`PEP 585 generic aliases - <types-genericalias>`. - -- bpo-46607: Add :exc:`DeprecationWarning` to :class:`!LegacyInterpolation`, - deprecated in the docstring since Python 3.2. Will be removed in Python - 3.13. Use :class:`BasicInterpolation` or :class:`ExtendedInterpolation` - instead. - -- bpo-26120: :mod:`pydoc` now excludes __future__ imports from the module's - data items. - -- bpo-46480: Add :func:`typing.assert_type`. Patch by Jelle Zijlstra. - -- bpo-46421: Fix a unittest issue where if the command was invoked as - ``python -m unittest`` and the filename(s) began with a dot (.), a - ``ValueError`` is returned. - -- bpo-46245: Add optional parameter *dir_fd* in :func:`shutil.rmtree`. - -- bpo-22859: :meth:`!unittest.TestProgram.usageExit` is marked as - deprecated, to be removed in Python 3.13. - -- bpo-46170: Improve the error message when you try to subclass an instance - of :class:`typing.NewType`. - -- bpo-40296: Fix supporting generic aliases in :mod:`pydoc`. - -- bpo-20392: Fix inconsistency with uppercase file extensions in - :meth:`MimeTypes.guess_type`. Patch by Kumar Aditya. - -- bpo-46030: Add ``LOCAL_CREDS``, ``LOCAL_CREDS_PERSISTENT`` and - ``SCM_CREDS2`` FreeBSD constants to the socket module. - -- bpo-44439: Fix ``.write()`` method of a member file in ``ZipFile``, when - the input data is an object that supports the buffer protocol, the file - length may be wrong. - -- bpo-45171: Fix handling of the ``stacklevel`` argument to logging - functions in the :mod:`logging` module so that it is consistent across all - logging functions and, as advertised, similar to the ``stacklevel`` - argument used in :meth:`~warnings.warn`. - -- bpo-24959: Fix bug where :mod:`unittest` sometimes drops frames from - tracebacks of exceptions raised in tests. - -- bpo-44859: Raise more accurate and :pep:`249` compatible exceptions in - :mod:`sqlite3`. - - * Raise :exc:`~sqlite3.InterfaceError` instead of - :exc:`~sqlite3.ProgrammingError` for ``SQLITE_MISUSE`` errors. - * Don't overwrite :exc:`BufferError` with :exc:`ValueError` when conversion to - BLOB fails. - * Raise :exc:`~sqlite3.ProgrammingError` instead of :exc:`~sqlite3.Warning` if - user tries to :meth:`~sqlite3.Cursor.execute` more than one SQL statement. - * Raise :exc:`~sqlite3.ProgrammingError` instead of :exc:`ValueError` if an SQL - query contains null characters. - -- bpo-44493: Add missing terminated NUL in sockaddr_un's length - - This was potentially observable when using non-abstract AF_UNIX datagram - sockets to processes written in another programming language. - -- bpo-41930: Add :meth:`~sqlite3.Connection.serialize` and - :meth:`~sqlite3.Connection.deserialize` support to :mod:`sqlite3`. Patch - by Erlend E. Aasland. - -- bpo-33178: Added :class:`ctypes.BigEndianUnion` and - :class:`ctypes.LittleEndianUnion` classes, as originally documented in the - library docs but not yet implemented. - -- bpo-43352: Add an Barrier object in synchronization primitives of - *asyncio* Lib in order to be consistent with Barrier from *threading* and - *multiprocessing* libs* - -- bpo-35859: :mod:`re` module, fix a few bugs about capturing group. In rare - cases, capturing group gets an incorrect string. Patch by Ma Lin. - -Documentation -------------- - -- bpo-45099: Document internal :mod:`asyncio` API. - -- bpo-47126: Update PEP URLs to :pep:`676`'s new canonical form. - -- bpo-47040: Clarified the old Python versions compatibility note of - :func:`binascii.crc32` / :func:`zlib.adler32` / :func:`zlib.crc32` - functions. - -- bpo-46033: Clarify ``for`` statement execution in its doc. - -- bpo-45790: Adjust inaccurate phrasing in - :doc:`../extending/newtypes_tutorial` about the ``ob_base`` field and the - macros used to access its contents. - -- bpo-42340: Document that in some circumstances :exc:`KeyboardInterrupt` - may cause the code to enter an inconsistent state. Provided a sample - workaround to avoid it if needed. - -- bpo-41233: Link the errnos referenced in ``Doc/library/exceptions.rst`` to - their respective section in ``Doc/library/errno.rst``, and vice versa. - Previously this was only done for EINTR and InterruptedError. Patch by Yan - "yyyyyyyan" Orestes. - -Tests ------ - -- bpo-47205: Skip test for :func:`~os.sched_getaffinity` and - :func:`~os.sched_setaffinity` error case on FreeBSD. - -- bpo-46126: Restore 'descriptions' when running tests internally. - -- bpo-47104: Rewrite :func:`asyncio.to_thread` tests to use - :class:`unittest.IsolatedAsyncioTestCase`. - -- bpo-40280: The test suite is now passing on the Emscripten platform. All - fork, socket, and subprocess-based tests are skipped. - -- bpo-47037: Skip ``strftime("%4Y")`` feature test on Windows. It can cause - an assertion error in debug builds. - -- bpo-46587: Skip tests if platform's ``strftime`` does not support - non-portable glibc extensions. - -- bpo-47015: A test case for :func:`os.sendfile` is converted from - deprecated :mod:`!asyncore` (see :pep:`594`) to :mod:`asyncio`. Patch by - Oleg Iarygin. - -Build ------ - -- bpo-40280: Add configure option :option:`--enable-wasm-dynamic-linking` to - enable ``dlopen`` and MAIN_MODULE / SIDE_MODULE on ``wasm32-emscripten``. - -- bpo-46023: ``makesetup`` now detects and skips all duplicated module - definitions. The first entry wins. - -- bpo-40280: Add SOABI ``wasm32-emscripten`` for Emscripten and - ``wasm32-wasi`` for WASI on 32bit WASM as well as ``wasm64`` counter - parts. - -- bpo-47032: Ensure Windows install builds fail correctly with a non-zero - exit code when part of the build fails. - -- bpo-47024: Update OpenSSL to 1.1.1n for macOS installers and all Windows - builds. - -- bpo-46996: The :mod:`tkinter` package now requires Tcl/Tk version 8.5.12 - or newer. - -- bpo-46973: Add ``regen-configure`` make target to regenerate configure - script with Christian's container image - ``quay.io/tiran/cpython_autoconf:269``. - -- bpo-46917: Building Python now requires support of IEEE 754 floating-point - numbers. Patch by Victor Stinner. - -- bpo-45774: ``configure`` now verifies that all SQLite C APIs needed for - the :mod:`sqlite3` extension module are found. - -Windows -------- - -- bpo-47194: Update ``zlib`` to v1.2.12 to resolve :cve:`2018-25032`. - -- bpo-47171: Enables installing the :file:`py.exe` launcher on Windows - ARM64. - -- bpo-46566: Upgraded :ref:`launcher` to support a new ``-V:company/tag`` - argument for full :pep:`514` support and to detect ARM64 installs. The - ``-64`` suffix on arguments is deprecated, but still selects any - non-32-bit install. Setting :envvar:`PYLAUNCHER_ALLOW_INSTALL` and - specifying a version that is not installed will attempt to install the - requested version from the Microsoft Store. - -- bpo-47086: The installer for Windows now includes documentation as loose - HTML files rather than a single compiled :file:`.chm` file. - -- bpo-46907: Update Windows installer to use SQLite 3.38.1. - -- bpo-44549: Update bzip2 to 1.0.8 in Windows builds to mitigate - :cve:`2016-3189` and :cve:`2019-12900`. - -- bpo-46948: Prevent :cve:`2022-26488` by ensuring the Add to PATH option in - the Windows installer uses the correct path when being repaired. - -macOS ------ - -- bpo-46890: Fix a regression in the setting of ``sys._base_executable`` in - framework builds, and thereby fix a regression in :mod:`venv` virtual - environments with such builds. - -- bpo-46907: Update macOS installer to SQLite 3.38.1. - -Tools/Demos ------------ - -- bpo-40280: Replace Emscripten's limited shell with Katie Bell's browser-ui - REPL from python-wasm project. - -C API ------ - -- bpo-40421: Add ``PyFrame_GetBuiltins``, ``PyFrame_GetGenerator`` and - ``PyFrame_GetGlobals`` C-API functions to access frame object attributes - safely from C code. - -- bpo-46850: Move the private ``_PyFrameEvalFunction`` type, and private - ``_PyInterpreterState_GetEvalFrameFunc()`` and - ``_PyInterpreterState_SetEvalFrameFunc()`` functions to the internal C - API. The ``_PyFrameEvalFunction`` callback function type now uses the - ``_PyInterpreterFrame`` type which is part of the internal C API. Patch by - Victor Stinner. - -- bpo-46850: Move the private undocumented ``_PyEval_EvalFrameDefault()`` - function to the internal C API. The function now uses the - ``_PyInterpreterFrame`` type which is part of the internal C API. Patch by - Victor Stinner. - -- bpo-46850: Remove the private undocumented function - ``_PyEval_CallTracing()`` from the C API. Call the public - :func:`sys.call_tracing` function instead. Patch by Victor Stinner. - -- bpo-46850: Remove the private undocumented function - ``_PyEval_GetCoroutineOriginTrackingDepth()`` from the C API. Call the - public :func:`sys.get_coroutine_origin_tracking_depth` function instead. - Patch by Victor Stinner. - -- bpo-46850: Remove the following private undocumented functions from the C - API: - - * ``_PyEval_GetAsyncGenFirstiter()`` - * ``_PyEval_GetAsyncGenFinalizer()`` - * ``_PyEval_SetAsyncGenFirstiter()`` - * ``_PyEval_SetAsyncGenFinalizer()`` - - Call the public :func:`sys.get_asyncgen_hooks` and - :func:`sys.set_asyncgen_hooks` functions instead. Patch by Victor Stinner. - -- bpo-46987: Remove private functions ``_PySys_GetObjectId()`` and - ``_PySys_SetObjectId()``. Patch by Donghee Na. - -- bpo-46906: Add new functions to pack and unpack C double (serialize and - deserialize): :c:func:`PyFloat_Pack2`, :c:func:`PyFloat_Pack4`, - :c:func:`PyFloat_Pack8`, :c:func:`PyFloat_Unpack2`, - :c:func:`PyFloat_Unpack4` and :c:func:`PyFloat_Unpack8`. Patch by Victor - Stinner. - - -What's New in Python 3.11.0 alpha 6? -==================================== - -*Release date: 2022-03-07* - -Core and Builtins ------------------ - -- bpo-46940: Avoid overriding :exc:`AttributeError` metadata information for - nested attribute access calls. Patch by Pablo Galindo. - -- bpo-46927: Include the type's name in the error message for subscripting - non-generic types. - -- bpo-46921: Support vectorcall for ``super()``. Patch by Ken Jin. - -- bpo-46841: Fix incorrect handling of inline cache entries when - specializing :opcode:`BINARY_OP`. - -- bpo-46841: Use an oparg to simplify the construction of helpful error - messages in :opcode:`GET_AWAITABLE`. - -- bpo-46903: Make sure that str subclasses can be used as attribute names - for instances with virtual dictionaries. Fixes regression in 3.11alpha - -- bpo-46841: Add more detailed specialization failure stats for - :opcode:`COMPARE_OP` followed by :opcode:`EXTENDED_ARG`. - -- bpo-46891: Fix bug introduced during 3.11alpha where subclasses of - ``types.ModuleType`` with ``__slots__`` were not initialized correctly, - resulting in an interpreter crash. - -- bpo-46841: Use inline caching for :opcode:`LOAD_ATTR`, - :opcode:`LOAD_METHOD`, and :opcode:`STORE_ATTR`. - -- bpo-46841: Use inline cache for :opcode:`BINARY_SUBSCR`. - -- bpo-46841: Use inline caching for :opcode:`COMPARE_OP`. - -- bpo-46864: Deprecate ``PyBytesObject.ob_shash``. It will be removed in - Python 3.13. - -- bpo-46841: Use inline caching for :opcode:`UNPACK_SEQUENCE`. - -- bpo-46845: Reduces dict size by removing hash value from hash table when - all inserted keys are Unicode. For example, - ``sys.getsizeof(dict.fromkeys("abcdefg"))`` becomes 272 bytes from 352 - bytes on 64bit platform. - -- bpo-46841: Use inline cache for :opcode:`LOAD_GLOBAL`. - -- bpo-46852: Rename the private undocumented ``float.__set_format__()`` - method to ``float.__setformat__()`` to fix a typo introduced in Python - 3.7. The method is only used by test_float. Patch by Victor Stinner. - -- bpo-46852: Remove the undocumented private ``float.__set_format__()`` - method, previously known as ``float.__setformat__()`` in Python 3.7. Its - docstring said: "You probably don't want to use this function. It exists - mainly to be used in Python's test suite." Patch by Victor Stinner. - -- bpo-40116: Fix regression that dict.update(other) may don't respect - iterate order of other when other is key sharing dict. - -- bpo-46712: Share global string identifiers in deep-frozen modules. - -- bpo-46430: Fix memory leak in interned strings of deep-frozen modules. - -- bpo-46841: Store :opcode:`BINARY_OP` caches inline using a new - :opcode:`CACHE` instruction. - -- bpo-45107: Specialize ``LOAD_METHOD`` for instances with a dict. - -- bpo-44337: Reduce the memory usage of specialized :opcode:`LOAD_ATTR` and - :opcode:`STORE_ATTR` instructions. - -- bpo-46729: Add number of sub-exceptions to :meth:`BaseException.__str__`. - -- bpo-45885: Don't un-adapt :opcode:`COMPARE_OP` when collecting - specialization stats. - -- bpo-46329: Fix specialization stats gathering for :opcode:`!PRECALL` - instructions. - -Library -------- - -- bpo-46794: Bump up the libexpat version into 2.4.6 - -Core and Builtins ------------------ - -- bpo-46823: Implement a specialized combined opcode - ``LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE``. Patch by Dennis Sweeney. - -- bpo-46820: Fix parsing a numeric literal immediately (without spaces) - followed by "not in" keywords, like in ``1not in x``. Now the parser only - emits a warning, not a syntax error. - -- bpo-46329: Move ``KW_NAMES`` before ``PRECALL`` instruction in call - sequence. Change ``operand`` of ``CALL`` to match ``PRECALL`` for easier - specialization. - -- bpo-46808: Remove the ``NEXT_BLOCK`` macro from compile.c, and make the - compiler automatically generate implicit blocks when they are needed. - -- bpo-46329: Add ``PUSH_NULL`` instruction. This is used as a prefix when - evaluating a callable, so that the stack has the same shape for methods - and other calls. ``PRECALL_FUNCTION`` and ``PRECALL_METHOD`` are merged - into a single ``PRECALL`` instruction. - - There is no change in semantics. - -- bpo-46762: Fix an assert failure in debug builds when a '<', '>', or '=' - is the last character in an f-string that's missing a closing right brace. - -- bpo-46730: Message of AttributeError caused by getting, setting or - deleting a property without the corresponding function now mentions that - the attribute is in fact a property and also specifies type of the class - that it belongs to. - -- bpo-46724: Make sure that all backwards jumps use the ``JUMP_ABSOLUTE`` - instruction, rather than ``JUMP_FORWARD`` with an argument of - ``(2**32)+offset``. - -- bpo-46732: Correct the docstring for the :meth:`~object.__bool__` method. - Patch by Jelle Zijlstra. - -- bpo-46072: Add more detailed specialization failure statistics for - :opcode:`BINARY_OP`. - -- bpo-46707: Avoid potential exponential backtracking when producing some - syntax errors involving lots of brackets. Patch by Pablo Galindo. - -Library -------- - -- bpo-46323: :mod:`ctypes` now allocates memory on the stack instead of on - the heap to pass arguments while calling a Python callback function. Patch - by Donghee Na. - -Core and Builtins ------------------ - -- bpo-45923: Add a quickened form of :opcode:`RESUME` that skips quickening - checks. - -- bpo-46702: Specialize :opcode:`UNPACK_SEQUENCE` for :class:`tuple` and - :class:`list` unpackings. - -- bpo-46072: Opcode pair stats are now gathered with ``--enable-pystats``. - Defining ``DYNAMIC_EXECUTION_PROFILE`` or ``DXPAIRS`` no longer has any - effect. - -- bpo-46675: Allow more than 16 items in a split dict before it is combined. - The limit is now 254. - -Library -------- - -- bpo-40479: Add a missing call to ``va_end()`` in - ``Modules/_hashopenssl.c``. - -- bpo-46323: Use :c:func:`PyObject_Vectorcall` while calling ctypes callback - function. Patch by Donghee Na. - -Core and Builtins ------------------ - -- bpo-46615: When iterating over sets internally in ``setobject.c``, acquire - strong references to the resulting items from the set. This prevents - crashes in corner-cases of various set operations where the set gets - mutated. - -- bpo-45828: The bytecode compiler now attempts to apply runtime stack - manipulations at compile-time (whenever it is feasible to do so). - -- bpo-30496: Fixed a minor portability issue in the implementation of - :c:func:`PyLong_FromLong`, and added a fast path for single-digit integers - to :c:func:`PyLong_FromLongLong`. - -Library -------- - -- bpo-25707: Fixed a file leak in :func:`xml.etree.ElementTree.iterparse` - when the iterator is not exhausted. Patch by Jacob Walls. - -- bpo-46877: Export :func:`unittest.doModuleCleanups` in :mod:`unittest`. - Patch by Kumar Aditya. - -- bpo-46848: For performance, use the optimized string-searching - implementations from :meth:`~bytes.find` and :meth:`~bytes.rfind` for - :meth:`~mmap.find` and :meth:`~mmap.rfind`. - -- bpo-46736: :class:`~http.server.SimpleHTTPRequestHandler` now uses HTML5 - grammar. Patch by Donghee Na. - -- bpo-44886: Inherit asyncio proactor datagram transport from - :class:`asyncio.DatagramTransport`. - -- bpo-46827: Support UDP sockets in :meth:`asyncio.loop.sock_connect` for - selector-based event loops. Patch by Thomas Grainger. - -- bpo-46811: Make test suite support Expat >=2.4.5 - -- bpo-46252: Raise :exc:`TypeError` if :class:`ssl.SSLSocket` is passed to - transport-based APIs. - -- bpo-46784: Fix libexpat symbols collisions with user dynamically loaded or - statically linked libexpat in embedded Python. - -- bpo-46786: The HTML serialisation in xml.etree.ElementTree now writes - ``embed``, ``source``, ``track`` and ``wbr`` as empty tags, as defined in - HTML 5. - -- bpo-39327: :func:`shutil.rmtree` can now work with VirtualBox shared - folders when running from the guest operating-system. - -- bpo-45390: Propagate :exc:`asyncio.CancelledError` message from inner task - to outer awaiter. - -- bpo-46756: Fix a bug in - :meth:`urllib.request.HTTPPasswordMgr.find_user_password` and - :meth:`urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated` which - allowed to bypass authorization. For example, access to URI - ``example.org/foobar`` was allowed if the user was authorized for URI - ``example.org/foo``. - -- bpo-46737: :func:`random.gauss` and :func:`random.normalvariate` now have - default arguments. - -- bpo-46752: Add task groups to asyncio (structured concurrency, inspired by - Trio's nurseries). This also introduces a change to task cancellation, - where a cancelled task can't be cancelled again until it calls - .uncancel(). - -- bpo-46724: Fix :mod:`dis` behavior on negative jump offsets. - -- bpo-46333: The :meth:`__repr__` method of :class:`typing.ForwardRef` now - includes the ``module`` parameter of :class:`typing.ForwardRef` when it is - set. - -- bpo-46643: In :func:`typing.get_type_hints`, support evaluating - stringified ``ParamSpecArgs`` and ``ParamSpecKwargs`` annotations. Patch - by Gregory Beauregard. - -- bpo-45863: When the :mod:`tarfile` module creates a pax format archive, it - will put an integer representation of timestamps in the ustar header (if - possible) for the benefit of older unarchivers, in addition to the - existing full-precision timestamps in the pax extended header. - -- bpo-46066: Deprecate kwargs-based syntax for :class:`typing.TypedDict` - definitions. It had confusing semantics when specifying totality, and was - largely unused. Patch by Jingchen Ye. - -- bpo-46676: Make :data:`typing.ParamSpec` args and kwargs equal to - themselves. Patch by Gregory Beauregard. - -- bpo-46323: ``ctypes.CFUNCTYPE()`` and ``ctypes.WINFUNCTYPE()`` now fail to - create the type if its ``_argtypes_`` member contains too many arguments. - Previously, the error was only raised when calling a function. Patch by - Victor Stinner. - -- bpo-46672: Fix ``NameError`` in :func:`asyncio.gather` when initial type - check fails. - -- bpo-46659: The :class:`calendar.LocaleTextCalendar` and - :class:`calendar.LocaleHTMLCalendar` classes now use - :func:`locale.getlocale`, instead of using - :func:`locale.getdefaultlocale`, if no locale is specified. Patch by - Victor Stinner. - -- bpo-46659: The :func:`locale.getdefaultlocale` function is deprecated and - will be removed in Python 3.13. Use :func:`locale.setlocale`, - :func:`locale.getpreferredencoding(False) <locale.getpreferredencoding>` - and :func:`locale.getlocale` functions instead. Patch by Victor Stinner. - -- bpo-46655: In :func:`typing.get_type_hints`, support evaluating bare - stringified ``TypeAlias`` annotations. Patch by Gregory Beauregard. - -- bpo-45948: Fixed a discrepancy in the C implementation of the - :mod:`xml.etree.ElementTree` module. Now, instantiating an - :class:`xml.etree.ElementTree.XMLParser` with a ``target=None`` keyword - provides a default :class:`xml.etree.ElementTree.TreeBuilder` target as - the Python implementation does. - -- bpo-46626: Expose Linux's ``IP_BIND_ADDRESS_NO_PORT`` option in - :mod:`socket`. - -- bpo-46521: Fix a bug in the :mod:`codeop` module that was incorrectly - identifying invalid code involving string quotes as valid code. - -- bpo-46571: Improve :func:`typing.no_type_check`. - - Now it does not modify external classes and functions. We also now - correctly mark classmethods as not to be type checked. - -- bpo-46400: expat: Update libexpat from 2.4.1 to 2.4.4 - -- bpo-46556: Deprecate undocumented support for using a - :class:`pathlib.Path` object as a context manager. - -- bpo-46534: Implement :pep:`673` :class:`typing.Self`. Patch by James - Hilton-Balfe. - -- bpo-46522: Make various module ``__getattr__`` AttributeErrors more - closely match a typical AttributeError - -- bpo-46475: Add :data:`typing.Never` and :func:`typing.assert_never`. Patch - by Jelle Zijlstra. - -- bpo-46333: The :meth:`__eq__` and :meth:`__hash__` methods of - :class:`typing.ForwardRef` now honor the ``module`` parameter of - :class:`typing.ForwardRef`. Forward references from different modules are - now differentiated. - -- bpo-46246: Add missing ``__slots__`` to - ``importlib.metadata.DeprecatedList``. Patch by Arie Bovenberg. - -- bpo-46232: The :mod:`ssl` module now handles certificates with bit strings - in DN correctly. - -- bpo-46195: :func:`typing.get_type_hints` no longer adds ``Optional`` to - parameters with ``None`` as a default. This aligns to changes to PEP 484 - in https://github.com/python/peps/pull/689 - -- bpo-31369: Add :class:`~re.RegexFlag` to ``re.__all__`` and documented it. - Add :data:`~re.RegexFlag.NOFLAG` to indicate no flags being set. - -- bpo-45898: :mod:`ctypes` no longer defines ``ffi_type_*`` symbols in - ``cfield.c``. The symbols have been provided by libffi for over a decade. - -- bpo-44953: Calling ``operator.itemgetter`` objects and - ``operator.attrgetter`` objects is now faster due to use of the vectorcall - calling convention. - -- bpo-44289: Fix an issue with :meth:`~tarfile.is_tarfile` method when using - *fileobj* argument: position in the *fileobj* was advanced forward which - made it unreadable with :meth:`tarfile.TarFile.open`. - -- bpo-44011: Reimplement SSL/TLS support in asyncio, borrow the - implementation from uvloop library. - -- bpo-41086: Make the :class:`configparser.ConfigParser` constructor raise - :exc:`TypeError` if the ``interpolation`` parameter is not of type - :class:`!configparser.Interpolation` - -- bpo-29418: Implement :func:`inspect.ismethodwrapper` and fix - :func:`inspect.isroutine` for cases where methodwrapper is given. Patch by - Hakan Çelik. - -- bpo-14156: argparse.FileType now supports an argument of '-' in binary - mode, returning the .buffer attribute of sys.stdin/sys.stdout as - appropriate. Modes including 'x' and 'a' are treated equivalently to 'w' - when argument is '-'. Patch contributed by Josh Rosenberg - -Documentation -------------- - -- bpo-42238: ``Doc/tools/rstlint.py`` has moved to its own repository and is - now packaged on PyPI as ``sphinx-lint``. - -Tests ------ - -- bpo-46913: Fix test_faulthandler.test_sigfpe() if Python is built with - undefined behavior sanitizer (UBSAN): disable UBSAN on the - faulthandler_sigfpe() function. Patch by Victor Stinner. - -- bpo-46760: Remove bytecode offsets from expected values in test.test_dis - module. Reduces the obstacles to modifying the VM or compiler. - -- bpo-46708: Prevent default asyncio event loop policy modification warning - after ``test_asyncio`` execution. - -- bpo-46678: The function ``make_legacy_pyc`` in - ``Lib/test/support/import_helper.py`` no longer fails when - ``PYTHONPYCACHEPREFIX`` is set to a directory on a different device from - where tempfiles are stored. - -- bpo-46623: Skip test_pair() and test_speech128() of test_zlib on s390x - since they fail if zlib uses the s390x hardware accelerator. Patch by - Victor Stinner. - -Build ------ - -- bpo-46860: Respect ``--with-suffix`` when building on case-insensitive - file systems. - -- bpo-46656: Building Python now requires a C11 compiler. Optional C11 - features are not required. Patch by Victor Stinner. - -- bpo-46656: Building Python now requires support for floating-point - Not-a-Number (NaN): remove the ``Py_NO_NAN`` macro. Patch by Victor - Stinner. - -- bpo-46640: Building Python now requires a C99 ``<math.h>`` header file - providing a ``NAN`` constant, or the ``__builtin_nan()`` built-in - function. Patch by Victor Stinner. - -- bpo-46608: Exclude marshalled-frozen data if deep-freezing to save 300 KB - disk space. This includes adding a new ``is_package`` field to - :c:struct:`_frozen`. Patch by Kumar Aditya. - -- bpo-40280: Fix wasm32-emscripten test failures and platform issues. - - Disable syscalls that are not supported or don't work, e.g. wait, - getrusage, prlimit, mkfifo, mknod, setres[gu]id, setgroups. - Use fd_count - to count open fds. - Add more checks for subprocess and fork. - Add - workarounds for missing _multiprocessing and failing socket.accept(). - - Enable bzip2. - Disable large file support. - Disable signal.alarm. - -- bpo-46430: Intern strings in deep-frozen modules. Patch by Kumar Aditya. - -Windows -------- - -- bpo-46744: The default all users install directory for ARM64 is now under - the native ``Program Files`` folder, rather than ``Program Files (Arm)`` - which is intended for ARM (32-bit) files. - -- bpo-46567: Adds Tcl and Tk support for Windows ARM64. This also adds IDLE - to the installation. - -- bpo-46638: Ensures registry virtualization is consistently disabled. For - 3.10 and earlier, it remains enabled (some registry writes are protected), - while for 3.11 and later it is disabled (registry modifications affect all - applications). - -IDLE ----- - -- bpo-46630: Make query dialogs on Windows start with a cursor in the entry - box. - -- bpo-45447: Apply IDLE syntax highlighting to ``.pyi`` files. Patch by Alex - Waygood and Terry Jan Reedy. - -C API ------ - -- bpo-46748: Python's public headers no longer import ``<stdbool.h>``, - leaving code that embeds/extends Python free to define ``bool``, ``true`` - and ``false``. - -- bpo-46836: Move the :c:type:`PyFrameObject` type definition (``struct - _frame``) to the internal C API ``pycore_frame.h`` header file. Patch by - Victor Stinner. - -- bpo-45459: Rename ``Include/buffer.h`` header file to - ``Include/pybuffer.h`` to avoid conflicts with projects having an existing - ``buffer.h`` header file. Patch by Victor Stinner. - -- bpo-45412: Remove the ``HAVE_PY_SET_53BIT_PRECISION`` macro (moved to the - internal C API). Patch by Victor Stinner. - -- bpo-46613: Added function :c:func:`PyType_GetModuleByDef`, which allows - access to module state when a method's defining class is not available. - - -What's New in Python 3.11.0 alpha 5? -==================================== - -*Release date: 2022-02-03* - -Core and Builtins ------------------ - -- bpo-45773: Remove two invalid "peephole" optimizations from the bytecode - compiler. - -- bpo-46564: Do not create frame objects when creating :class:`super` - object. Patch by Kumar Aditya. - -- bpo-45885: Added more fined-grained specialization failure stats regarding - the ``COMPARE_OP`` bytecode. - -- bpo-44977: The delegation of :func:`int` to :meth:`__trunc__` is now - deprecated. Calling ``int(a)`` when ``type(a)`` implements - :meth:`__trunc__` but not :meth:`__int__` or :meth:`__index__` now raises - a :exc:`DeprecationWarning`. - -- bpo-46458: Reorder code emitted by the compiler for a - :keyword:`try`-:keyword:`except` block so that the :keyword:`else` block's - code immediately follows the :keyword:`try` body (without a jump). This is - more optimal for the happy path. - -- bpo-46527: Allow passing ``iterable`` as a keyword argument to - :func:`enumerate` again. Patch by Jelle Zijlstra. - -- bpo-46528: Replace several stack manipulation instructions (``DUP_TOP``, - ``DUP_TOP_TWO``, ``ROT_TWO``, ``ROT_THREE``, ``ROT_FOUR``, and ``ROT_N``) - with new :opcode:`COPY` and :opcode:`SWAP` instructions. - -- bpo-46329: Use two or three bytecodes to implement most calls. - - Calls without named arguments are implemented as a sequence of two - instructions: ``PRECALL; CALL``. Calls with named arguments are - implemented as a sequence of three instructions: ``PRECALL; KW_NAMES; - CALL``. There are two different ``PRECALL`` instructions: - ``PRECALL_FUNTION`` and ``PRECALL_METHOD``. The latter pairs with - ``LOAD_METHOD``. - - This partition into pre-call and call allows better specialization, and - thus better performance ultimately. - - There is no change in semantics. - -- bpo-46503: Fix an assert when parsing some invalid \N escape sequences in - f-strings. - -- bpo-46431: Improve error message on invalid calls to - :meth:`BaseExceptionGroup.__new__`. - -- bpo-46476: Fix memory leak in code objects generated by deepfreeze. Patch - by Kumar Aditya. - -- bpo-46481: Speed up calls to :meth:`weakref.ref.__call__` by using the - :pep:`590` ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-46417: Fix a race condition on setting a type ``__bases__`` attribute: - the internal function ``add_subclass()`` now gets the - ``PyTypeObject.tp_subclasses`` member after calling - :c:func:`PyWeakref_NewRef` which can trigger a garbage collection which - can indirectly modify ``PyTypeObject.tp_subclasses``. Patch by Victor - Stinner. - -- bpo-46417: ``python -X showrefcount`` now shows the total reference count - after clearing and destroyed the main Python interpreter. Previously, it - was shown before. Patch by Victor Stinner. - -- bpo-43683: Add ASYNC_GEN_WRAP opcode to wrap the value to be yielded in - async generators. Removes the need to special case async generators in the - ``YIELD_VALUE`` instruction. - -- bpo-46407: Optimize some modulo operations in ``Objects/longobject.c``. - Patch by Jeremiah Vivian. - -- bpo-46409: Add new ``RETURN_GENERATOR`` bytecode to make generators. - Simplifies calling Python functions in the VM, as they no longer any need - to special case generator functions. - - Also add ``JUMP_NO_INTERRUPT`` bytecode that acts like ``JUMP_ABSOLUTE``, - but does not check for interrupts. - -- bpo-46406: The integer division ``//`` implementation has been optimized - to better let the compiler understand its constraints. It can be 20% - faster on the amd64 platform when dividing an int by a value smaller than - ``2**30``. - -Library -------- - -- bpo-46383: Fix invalid signature of ``_zoneinfo``'s ``module_free`` - function to resolve a crash on wasm32-emscripten platform. - -Core and Builtins ------------------ - -- bpo-46361: Ensure that "small" integers created by :meth:`int.from_bytes` - and :class:`decimal.Decimal` are properly cached. - -- bpo-46161: Fix the class building error when the arguments are constants - and CALL_FUNCTION_EX is used. - -- bpo-46028: Fixes calculation of :data:`sys._base_executable` when inside a - virtual environment that uses symlinks with different binary names than - the base environment provides. - -- bpo-46091: Correctly calculate indentation levels for lines with - whitespace character that are ended by line continuation characters. Patch - by Pablo Galindo - -Library -------- - -- bpo-30512: Add CAN Socket support for NetBSD. - -Build ------ - -- bpo-46045: Do not use POSIX semaphores on NetBSD - -Core and Builtins ------------------ - -- bpo-44024: Improve the :exc:`TypeError` message for non-string second - arguments passed to the built-in functions :func:`getattr` and - :func:`hasattr`. Patch by Géry Ogam. - -Library -------- - -- bpo-46624: Restore support for non-integer arguments of - :func:`random.randrange` and :func:`random.randint`. - -- bpo-46591: Make the IDLE doc URL on the About IDLE dialog clickable. - -- bpo-46565: Remove loop variables that are leaking into modules' - namespaces. - -- bpo-46553: In :func:`typing.get_type_hints`, support evaluating bare - stringified ``ClassVar`` annotations. Patch by Gregory Beauregard. - -- bpo-46544: Don't leak ``x`` & ``uspace`` intermediate vars in - :class:`textwrap.TextWrapper`. - -- bpo-46487: Add the ``get_write_buffer_limits`` method to - :class:`asyncio.transports.WriteTransport` and to the SSL transport. - -- bpo-45173: Note the configparser deprecations will be removed in Python - 3.12. - -- bpo-45162: The deprecated :mod:`unittest` APIs removed in 3.11a1 have been - temporarily restored to be removed in 3.12 while cleanups in external - projects go in. - -- bpo-46539: In :func:`typing.get_type_hints`, support evaluating - stringified ``ClassVar`` and ``Final`` annotations inside ``Annotated``. - Patch by Gregory Beauregard. - -- bpo-46510: Add missing test for :class:`types.TracebackType` and - :class:`types.FrameType`. Calculate them directly from the caught - exception without calling :func:`sys.exc_info`. - -- bpo-46491: Allow :data:`typing.Annotated` to wrap :data:`typing.Final` and - :data:`typing.ClassVar`. Patch by Gregory Beauregard. - -- bpo-46483: Remove :meth:`~object.__class_getitem__` from - :class:`pathlib.PurePath` as this class was not supposed to be generic. - -- bpo-46436: Fix command-line option ``-d``/``--directory`` in module - :mod:`http.server` which is ignored when combined with command-line option - ``--cgi``. Patch by Géry Ogam. - -- bpo-41403: Make :meth:`mock.patch` raise a :exc:`TypeError` with a - relevant error message on invalid arg. Previously it allowed a cryptic - :exc:`AttributeError` to escape. - -- bpo-46474: In ``importlib.metadata.EntryPoint.pattern``, avoid potential - REDoS by limiting ambiguity in consecutive whitespace. - -- bpo-46474: Removed private method from ``importlib.metadata.Path``. Sync - with importlib_metadata 4.10.0. - -- bpo-46470: Remove unused branch from ``typing._remove_dups_flatten`` - -- bpo-46469: :mod:`asyncio` generic classes now return - :class:`types.GenericAlias` in ``__class_getitem__`` instead of the same - class. - -- bpo-41906: Support passing filter instances in the ``filters`` values of - ``handlers`` and ``loggers`` in the dictionary passed to - :func:`logging.config.dictConfig`. - -- bpo-46422: Use ``dis.Positions`` in ``dis.Instruction`` instead of a - regular ``tuple``. - -- bpo-46434: :mod:`pdb` now gracefully handles ``help`` when - :attr:`~module.__doc__` is missing, for example when run with pregenerated - optimized ``.pyc`` files. - -- bpo-43869: Python uses the same time Epoch on all platforms. Add an - explicit unit test to ensure that it's the case. Patch by Victor Stinner. - -- bpo-46414: Add :func:`typing.reveal_type`. Patch by Jelle Zijlstra. - -- bpo-40280: :mod:`subprocess` now imports Windows-specific imports when - ``msvcrt`` module is available, and POSIX-specific imports on all other - platforms. This gives a clean exception when ``_posixsubprocess`` is not - available (e.g. Emscripten browser target). - -- bpo-40066: ``IntEnum``, ``IntFlag``, and ``StrEnum`` use the mixed-in type - for their ``str()`` and ``format()`` output. - -- bpo-46316: Optimize :meth:`pathlib.Path.iterdir` by removing an - unnecessary check for special entries. - -- bpo-29688: Document :meth:`pathlib.Path.absolute` (which has always - existed). - -- bpo-43012: The pathlib module's obsolete and internal ``_Accessor`` class - has been removed to prepare the terrain for upcoming enhancements to the - module. - -- bpo-46258: Speed up :func:`math.isqrt` for small positive integers by - replacing two division steps with a lookup table. - -- bpo-46242: Improve error message when creating a new :class:`enum.Enum` - type subclassing an existing ``Enum`` with ``_member_names_`` using - :meth:`enum.Enum.__call__`. - -- bpo-43118: Fix a bug in :func:`inspect.signature` that was causing it to - fail on some subclasses of classes with a ``__text_signature__`` - referencing module globals. Patch by Weipeng Hong. - -- bpo-26552: Fixed case where failing :func:`asyncio.ensure_future` did not - close the coroutine. Patch by Kumar Aditya. - -- bpo-21987: Fix an issue with :meth:`tarfile.TarFile.getmember` getting a - directory name with a trailing slash. - -- bpo-46124: Update :mod:`zoneinfo` to rely on importlib.resources - traversable API. - -- bpo-46103: Now :func:`inspect.getmembers` only gets :attr:`__bases__` - attribute from class type. Patch by Weipeng Hong. - -- bpo-46080: Fix exception in argparse help text generation if a - :class:`argparse.BooleanOptionalAction` argument's default is - ``argparse.SUPPRESS`` and it has ``help`` specified. Patch by Felix - Fontein. - -- bpo-44791: Fix substitution of :class:`~typing.ParamSpec` in - :data:`~typing.Concatenate` with different parameter expressions. - Substitution with a list of types returns now a tuple of types. - Substitution with ``Concatenate`` returns now a ``Concatenate`` with - concatenated lists of arguments. - -Documentation -------------- - -- bpo-46463: Fixes :file:`escape4chm.py` script used when building the CHM - documentation file - -Tests ------ - -- bpo-43478: Mocks can no longer be provided as the specs for other Mocks. - As a result, an already-mocked object cannot be passed to ``mock.Mock()``. - This can uncover bugs in tests since these Mock-derived Mocks will always - pass certain tests (e.g. isinstance) and builtin assert functions (e.g. - assert_called_once_with) will unconditionally pass. - -- bpo-46616: Ensures ``test_importlib.test_windows`` cleans up registry keys - after completion. - -- bpo-44359: test_ftplib now silently ignores socket errors to prevent - logging unhandled threading exceptions. Patch by Victor Stinner. - -- bpo-46600: Fix test_gdb.test_pycfunction() for Python built with ``clang - -Og``. Tolerate inlined functions in the gdb traceback. Patch by Victor - Stinner. - -- bpo-46542: Fix a Python crash in test_lib2to3 when using Python built in - debug mode: limit the recursion limit. Patch by Victor Stinner. - -- bpo-46576: test_peg_generator now disables compiler optimization when - testing compilation of its own C extensions to significantly speed up the - testing on non-debug builds of CPython. - -- bpo-46542: Fix ``test_json`` tests checking for :exc:`RecursionError`: - modify these tests to use ``support.infinite_recursion()``. Patch by - Victor Stinner. - -- bpo-13886: Skip test_builtin PTY tests on non-ASCII characters if the - readline module is loaded. The readline module changes input() behavior, - but test_builtin is not intended to test the readline module. Patch by - Victor Stinner. - -- bpo-40280: Add :func:`test.support.requires_fork` decorators to mark tests - that require a working :func:`os.fork`. - -- bpo-40280: Add :func:`test.support.requires_subprocess` decorator to mark - tests which require working :mod:`subprocess` module or ``os.spawn*``. The - wasm32-emscripten platform has no support for processes. - -- bpo-46126: Disable 'descriptions' when running tests internally. - -Build ------ - -- bpo-46602: Tidied up configure.ac so that conftest.c is truncated rather - than appended. This assists in the case where the 'rm' of conftest.c fails - to happen between tests. Downstream issues such as a clobbered SOABI can - result. - -- bpo-46600: Fix the test checking if the C compiler supports ``-Og`` option - in the ``./configure`` script to also use ``-Og`` on clang which supports - it. Patch by Victor Stinner. - -- bpo-38472: Fix GCC detection in setup.py when cross-compiling. The C - compiler is now run with LC_ALL=C. Previously, the detection failed with a - German locale. - -- bpo-46513: :program:`configure` no longer uses ``AC_C_CHAR_UNSIGNED`` - macro and ``pyconfig.h`` no longer defines reserved symbol - ``__CHAR_UNSIGNED__``. - -- bpo-46471: Use global singletons for single byte bytes objects in - deepfreeze. - -- bpo-46443: Deepfreeze now uses cached small integers as it saves some - space for common small integers. - -- bpo-46429: Merge all deep-frozen files into one for space savings. Patch - by Kumar Aditya. - -- bpo-45569: The build now defaults to using 30-bit digits for Python - integers. Previously either 15-bit or 30-bit digits would be selected, - depending on the platform. 15-bit digits may still be selected using the - ``--enable-big-digits=15`` option to the ``configure`` script, or by - defining ``PYLONG_BITS_IN_DIGIT`` in ``pyconfig.h``. - -- bpo-45925: Update Windows installer to use SQLite 3.37.2. - -- bpo-43112: Detect musl libc as a separate SOABI (tagged as - ``linux-musl``). - -Windows -------- - -- bpo-33125: The traditional EXE/MSI based installer for Windows is now - available for ARM64 - -- bpo-46362: os.path.abspath("C:\CON") is now fixed to return "\\.\CON", not - the same path. The regression was true of all legacy DOS devices such as - COM1, LPT1, or NUL. - -- bpo-44934: The installer now offers a command-line only option to add the - installation directory to the end of :envvar:`PATH` instead of at the - start. - -macOS ------ - -- bpo-45925: Update macOS installer to SQLite 3.37.2. - -IDLE ----- - -- bpo-45296: Clarify close, quit, and exit in IDLE. In the File menu, - 'Close' and 'Exit' are now 'Close Window' (the current one) and 'Exit' is - now 'Exit IDLE' (by closing all windows). In Shell, 'quit()' and 'exit()' - mean 'close Shell'. If there are no other windows, this also exits IDLE. - -C API ------ - -- bpo-40170: Remove the ``PyHeapType_GET_MEMBERS()`` macro. It was exposed - in the public C API by mistake, it must only be used by Python internally. - Use the ``PyTypeObject.tp_members`` member instead. Patch by Victor - Stinner. - -- bpo-40170: Move _Py_GetAllocatedBlocks() and _PyObject_DebugMallocStats() - private functions to the internal C API. Patch by Victor Stinner. - -- bpo-46433: The internal function _PyType_GetModuleByDef now correctly - handles inheritance patterns involving static types. - -- bpo-45459: :c:type:`Py_buffer` and various ``Py_buffer`` related functions - are now part of the limited API and stable ABI. - -- bpo-14916: Fixed bug in the tokenizer that prevented - ``PyRun_InteractiveOne`` from parsing from the provided FD. - - -What's New in Python 3.11.0 alpha 4? -==================================== - -*Release date: 2022-01-13* - -Core and Builtins ------------------ - -- bpo-46070: :c:func:`Py_EndInterpreter` now explicitly untracks all objects - currently tracked by the GC. Previously, if an object was used later by - another interpreter, calling :c:func:`PyObject_GC_UnTrack` on the object - crashed if the previous or the next object of the :c:type:`!PyGC_Head` - structure became a dangling pointer. Patch by Victor Stinner. - -- bpo-46347: Fix memory leak in PyEval_EvalCodeEx. - -- bpo-46339: Fix a crash in the parser when retrieving the error text for - multi-line f-strings expressions that do not start in the first line of - the string. Patch by Pablo Galindo - -- bpo-46331: Do not set line number of instruction storing doc-string. Fixes - regression introduced in 3.11 alpha. - -- bpo-46314: Remove spurious "call" event when creating a lambda function - that was accidentally introduced in 3.11a4. - -- bpo-46289: ASDL declaration of ``FormattedValue`` has changed to reflect - ``conversion`` field is not optional. - -- bpo-46297: Fixed an interpreter crash on bootup with multiple PythonPaths - set in the Windows registry. Patch by Derzsi Dániel. - -- bpo-46237: Fix the line number of tokenizer errors inside f-strings. Patch - by Pablo Galindo. - -- bpo-46263: We always expect the "use_frozen_modules" config to be set, now - that getpath.c was rewritten in pure Python and the logic improved. - -- bpo-46006: Fix a regression when a type method like ``__init__()`` is - modified in a subinterpreter. Fix a regression in - ``_PyUnicode_EqualToASCIIId()`` and type ``update_slot()``. Revert the - change which made the Unicode dictionary of interned strings compatible - with subinterpreters: the internal interned dictionary is shared again by - all interpreters. Patch by Victor Stinner. - -- bpo-45923: Add RESUME opcode. This is a logical no-op. It is emitted by - the compiler anywhere a Python function can be entered. It is used by the - interpreter to perform tracing and optimizer checks. - -Library -------- - -- bpo-46208: Fix the regression of os.path.normpath("A/../../B") not - returning expected "../B" but "B". - -Core and Builtins ------------------ - -- bpo-46240: Correct the error message for unclosed parentheses when the - tokenizer doesn't reach the end of the source when the error is reported. - Patch by Pablo Galindo - -- bpo-46009: Remove the ``GEN_START`` opcode. - -- bpo-46235: Certain sequence multiplication operations like ``[0] * 1_000`` - are now faster due to reference-counting optimizations. Patch by Dennis - Sweeney. - -- bpo-46221: :opcode:`!PREP_RERAISE_STAR` no longer pushes ``lasti`` to the - stack. - -- bpo-46202: Remove :opcode:`!POP_EXCEPT_AND_RERAISE` and replace it by an - equivalent sequence of other opcodes. - -Library -------- - -- bpo-46085: Fix iterator cache mechanism of :class:`OrderedDict`. - -Core and Builtins ------------------ - -- bpo-46055: Speed up shifting operation involving integers less than - :c:macro:`PyLong_BASE`. Patch by Xinhang Xu. - -- bpo-46110: Add a maximum recursion check to the PEG parser to avoid stack - overflow. Patch by Pablo Galindo - -- bpo-46107: Fix bug where :meth:`ExceptionGroup.split` and - :meth:`ExceptionGroup.subgroup` did not copy the exception group's - ``__note__`` field to the parts. - -- bpo-45711: The interpreter state's representation of handled exceptions - (a.k.a exc_info, or _PyErr_StackItem) now has only the ``exc_value`` - field, ``exc_type`` and ``exc_traceback`` have been removed as their - values can be derived from ``exc_value``. - -- bpo-44525: Replace the four call bytecode instructions which one pre-call - instruction and two call instructions. - - Removes ``CALL_FUNCTION``, ``CALL_FUNCTION_KW``, ``CALL_METHOD`` and - ``CALL_METHOD_KW``. - - Adds ``CALL_NO_KW`` and ``CALL_KW`` call instructions, and - ``PRECALL_METHOD`` prefix for pairing with ``LOAD_METHOD``. - -- bpo-46039: Remove the ``YIELD_FROM`` instruction and replace it with the - ``SEND`` instruction which performs the same operation, but without the - loop. - -- bpo-45635: The code called from :c:func:`!_PyErr_Display` was refactored - to improve error handling. It now exits immediately upon an unrecoverable - error. - -- bpo-46054: Fix parser error when parsing non-utf8 characters in source - files. Patch by Pablo Galindo. - -- bpo-46042: Improve the location of the caret in :exc:`SyntaxError` - exceptions emitted by the symbol table. Patch by Pablo Galindo. - -- bpo-46049: Ensure :file:`._pth` files work as intended on platforms other - than Windows. - -- bpo-46048: Fixes parsing of :file:`._pth` files on startup so that - single-character paths are correctly read. - -- bpo-37971: Fix a bug where the line numbers given in a traceback when a - decorator application raised an exception were wrong. - -- bpo-46031: Add :opcode:`POP_JUMP_IF_NOT_NONE` and - :opcode:`POP_JUMP_IF_NONE` opcodes to speed up conditional jumps. - -- bpo-45654: Deepfreeze :mod:`runpy`, patch by Kumar Aditya. - -- bpo-46025: Fix a crash in the :mod:`atexit` module involving functions - that unregister themselves before raising exceptions. Patch by Pablo - Galindo. - -Library -------- - -- bpo-46000: Improve compatibility of the :mod:`curses` module with NetBSD - curses. - -Core and Builtins ------------------ - -- bpo-44525: Specialize the CALL_FUNCTION instruction for calls to builtin - types with a single argument. Speeds up ``range(x)``, ``list(x)``, and - specifically ``type(obj)``. - -- bpo-42918: Fix bug where the built-in :func:`compile` function did not - always raise a :exc:`SyntaxError` when passed multiple statements in - 'single' mode. Patch by Weipeng Hong. - -- bpo-45953: The main interpreter in _PyRuntimeState.interpreters is now - statically allocated (as part of _PyRuntime). Likewise for the initial - thread state of each interpreter. This means less allocation during - runtime init, as well as better memory locality for these key state - objects. - -- bpo-45292: Complete the :pep:`654` implementation: add ``except*``. - -- bpo-43413: Revert changes in ``set.__init__``. Subclass of :class:`set` - needs to define a ``__init__()`` method if it defines a ``__new__()`` - method with additional keyword parameters. - -- bpo-43931: Added the :c:data:`Py_Version` constant which bears the same - value as :c:macro:`PY_VERSION_HEX`. Patch by Gabriele N. Tornetta. - -Library -------- - -- bpo-46342: The ``@typing.final`` decorator now sets the ``__final__`` - attribute on the decorated object to allow runtime introspection. Patch by - Jelle Zijlstra. - -- bpo-46328: Added the :meth:`sys.exception` method which returns the active - exception instance. - -- bpo-46307: Add :meth:`string.Template.is_valid` and - :meth:`string.Template.get_identifiers` methods. - -- bpo-46306: Assume that :class:`types.CodeType` always has - :attr:`types.CodeType.co_firstlineno` in :mod:`doctest`. - -- bpo-40479: Fix :mod:`hashlib` *usedforsecurity* option to work correctly - with OpenSSL 3.0.0 in FIPS mode. - -- bpo-46070: Fix possible segfault when importing the :mod:`asyncio` module - from different sub-interpreters in parallel. Patch by Erlend E. Aasland. - -- bpo-46244: Removed ``__slots__`` from :class:`typing.ParamSpec` and - :class:`typing.TypeVar`. They served no purpose. Patch by Arie Bovenberg. - -- bpo-46278: Reflect ``context`` argument in ``AbstractEventLoop.call_*()`` - methods. Loop implementations already support it. - -- bpo-46269: Remove special-casing of ``__new__`` in - :meth:`enum.Enum.__dir__`. - -- bpo-46266: Improve day constants in :mod:`calendar`. - - Now all constants (``MONDAY`` ... ``SUNDAY``) are documented, tested, and - added to ``__all__``. - -- bpo-46257: Optimized the mean, variance, and stdev functions in the - statistics module. If the input is an iterator, it is consumed in a single - pass rather than eating memory by conversion to a list. The single pass - algorithm is about twice as fast as the previous two pass code. - -- bpo-41011: Added two new variables to *pyvenv.cfg* which is generated by - :mod:`venv` module: *executable* for the executable and *command* for the - command line used to create the environment. - -- bpo-46239: Improve error message when importing - :mod:`asyncio.windows_events` on non-Windows. - -- bpo-46238: Reuse ``_winapi`` constants in ``asyncio.windows_events``. - -- bpo-46222: Adding ``SF_NOCACHE`` sendfile constant for FreeBSD for the - posixmodule. - -- bpo-37295: Add fast path for ``0 <= k <= n <= 67`` for :func:`math.comb`. - -- bpo-46176: Adding the ``MAP_STACK`` constant for the mmap module. - -- bpo-43424: Deprecate :attr:`webbrowser.MacOSXOSAScript._name` and use - ``name`` instead. - -- bpo-45321: Added missing error codes to module - ``xml.parsers.expat.errors``. - -- bpo-46125: Refactor tests to test traversable API directly. Includes - changes from importlib 5.4.0. - -- bpo-46118: Moved importlib.resources and its related functionality to a - package. - -- bpo-37578: Add *include_hidden* parameter to :func:`~glob.glob` and - :func:`~glob.iglob` to match hidden files and directories when using - special characters like ``*``, ``**``, ``?`` and ``[]``. - -- bpo-20369: :func:`concurrent.futures.wait` no longer blocks forever when - given duplicate Futures. Patch by Kumar Aditya. - -- bpo-46105: Honor spec when generating requirement specs with urls and - extras (importlib_metadata 4.8.3). - -- bpo-44893: EntryPoint objects are no longer tuples. Recommended means to - access is by attribute ('.name', '.group') or accessor ('.load()'). Access - by index is deprecated and will raise deprecation warning. - -- bpo-22815: Print unexpected successes together with failures and errors in - summary in :class:`unittest.TextTestResult`. - -- bpo-22047: Calling :meth:`add_argument_group` on an argument group is - deprecated. Calling :meth:`add_argument_group` or - :meth:`add_mutually_exclusive_group` on a mutually exclusive group is - deprecated. - - These features were never supported and do not always work correctly. The - functions exist on the API by accident through inheritance and will be - removed in the future. - -- bpo-26952: :mod:`argparse` raises :exc:`ValueError` with clear message - when trying to render usage for an empty mutually exclusive group. - Previously it raised a cryptic :exc:`IndexError`. - -- bpo-45615: Functions in the :mod:`traceback` module raise :exc:`TypeError` - rather than :exc:`AttributeError` when an exception argument is not of - type :exc:`BaseException`. - -- bpo-16594: Add allow allow_reuse_port flag in socketserver. - -- bpo-27718: Fix help for the :mod:`signal` module. Some functions (e.g. - ``signal()`` and ``getsignal()``) were omitted. - -- bpo-46032: The ``registry()`` method of :func:`functools.singledispatch` - functions checks now the first argument or the first parameter annotation - and raises a TypeError if it is not supported. Previously unsupported - "types" were ignored (e.g. ``typing.List[int]``) or caused an error at - calling time (e.g. ``list[int]``). - -- bpo-46014: Add ability to use ``typing.Union`` and ``types.UnionType`` as - dispatch argument to ``functools.singledispatch``. Patch provided by Yurii - Karabas. - -- bpo-27062: Add :attr:`__all__` to :mod:`inspect`, patch by Kumar Aditya. - -- bpo-46018: Ensure that :func:`math.expm1` does not raise on underflow. - -- bpo-46016: Adding :const:`!F_DUP2FD` and :const:`!F_DUP2FD_CLOEXEC` - constants from FreeBSD into the :mod:`fcntl` module. - -- bpo-45755: :mod:`typing` generic aliases now reveal the class attributes - of the original generic class when passed to ``dir()``. This was the - behavior up to Python 3.6, but was changed in 3.7-3.9. - -- bpo-45874: The empty query string, consisting of no query arguments, is - now handled correctly in ``urllib.parse.parse_qsl``. This caused problems - before when strict parsing was enabled. - -- bpo-44674: Change how dataclasses disallows mutable default values. It - used to use a list of known types (list, dict, set). Now it disallows - unhashable objects to be defaults. It's using unhashability as a proxy - for mutability. Patch by Eric V. Smith, idea by Raymond Hettinger. - -- bpo-23882: Remove namespace package (PEP 420) support from unittest - discovery. It was introduced in Python 3.4 but has been broken since - Python 3.7. - -- bpo-25066: Added a :meth:`__repr__` method to - :class:`multiprocessing.Event` objects, patch by Kumar Aditya. - -- bpo-45643: Added :const:`signal.SIGSTKFLT` on platforms where this signal - is defined. - -- bpo-44092: Fetch across rollback no longer raises - :exc:`~sqlite3.InterfaceError`. Instead we leave it to the SQLite library - to handle these cases. Patch by Erlend E. Aasland. - -- bpo-42413: Replace ``concurrent.futures.TimeoutError`` and - ``asyncio.TimeoutError`` with builtin :exc:`TimeoutError`, keep these - names as deprecated aliases. - -Documentation -------------- - -- bpo-46196: Document method :meth:`cmd.Cmd.columnize`. - -- bpo-46120: State that ``|`` is preferred for readability over ``Union`` in - the :mod:`typing` docs. - -- bpo-46109: Extracted ``importlib.resources`` and - ``importlib.resources.abc`` documentation into separate files. - -- bpo-19737: Update the documentation for the :func:`globals` function. - -Tests ------ - -- bpo-46296: Add a test case for :mod:`enum` with ``_use_args_ == True`` and - ``_member_type_ == object``. - -- bpo-46205: Fix hang in runtest_mp due to race condition - -- bpo-46263: Fix test_capi on FreeBSD 14-dev: instruct jemalloc to not fill - freed memory with junk byte. - -- bpo-46262: Cover ``ValueError`` path in tests for - :meth:`enum.Flag._missing_`. - -- bpo-46150: Now ``fakename`` in - ``test_pathlib.PosixPathTest.test_expanduser`` is checked to be - non-existent. - -- bpo-46129: Rewrite ``asyncio.locks`` tests with - :class:`unittest.IsolatedAsyncioTestCase` usage. - -- bpo-23819: Fixed :mod:`asyncio` tests in python optimized mode. Patch by - Kumar Aditya. - -- bpo-46114: Fix test case for OpenSSL 3.0.1 version. OpenSSL 3.0 uses - ``0xMNN00PP0L``. - -Build ------ - -- bpo-44133: When Python is configured with - :option:`--without-static-libpython`, the Python static library - (libpython.a) is no longer built. Patch by Victor Stinner. - -- bpo-44133: When Python is built without :option:`--enable-shared`, the - ``python`` program is now linked to object files, rather than being linked - to the Python static library (libpython.a), to make sure that all symbols - are exported. Previously, the linker omitted some symbols like the - :c:func:`Py_FrozenMain` function. Patch by Victor Stinner. - -- bpo-40280: The ``configure`` script has a new option - ``--with-emscripten-target`` to select browser or node as Emscripten build - target. - -- bpo-46315: Added and fixed ``#ifdef HAVE_FEATURE`` checks for - functionality that is not available on WASI platform. - -- bpo-45723: Fixed a regression in ``configure`` check for - :func:`select.epoll`. - -- bpo-46263: ``configure`` no longer sets ``MULTIARCH`` on FreeBSD - platforms. - -- bpo-46106: Updated OpenSSL to 1.1.1m in Windows builds, macOS installer - builds, and CI. Patch by Kumar Aditya. - -- bpo-46088: Automatically detect or install bootstrap Python runtime when - building from Visual Studio. - -- bpo-46072: Add a --with-pystats configure option to turn on internal - statistics gathering. - -- bpo-40280: A new directory ``Tools/wasm`` contains WebAssembly-related - helpers like ``config.site`` override for wasm32-emscripten, wasm assets - generator to bundle the stdlib, and a README. - -- bpo-46023: :program:`makesetup` no longer builds extensions that have been - marked as *disabled*. This allows users to disable modules in - ``Modules/Setup.local``. - -- bpo-45949: Use pure Python ``freeze_module`` for all but importlib - bootstrap files. ``--with-freeze-module`` :program:`configure` option is - no longer needed for cross builds. - -Windows -------- - -- bpo-46217: Removed parameter that is unsupported on Windows 8.1 and early - Windows 10 and may have caused build or runtime failures. - -macOS ------ - -- bpo-40477: The Python Launcher app for macOS now properly launches scripts - and, if necessary, the Terminal app when running on recent macOS releases. - -C API ------ - -- bpo-46236: Fix a bug in :c:func:`PyFunction_GetAnnotations` that caused it - to return a ``tuple`` instead of a ``dict``. - -- bpo-46140: :c:func:`PyBuffer_GetPointer`, - :c:func:`PyBuffer_FromContiguous`, :c:func:`PyBuffer_ToContiguous` and - :c:func:`PyMemoryView_FromBuffer` now take buffer info by ``const - Py_buffer *`` instead of ``Py_buffer *``, as they do not need mutability. - :c:func:`PyBuffer_FromContiguous` also now takes the source buffer as - ``const void *``, and similarly :c:func:`PyBuffer_GetPointer` takes the - strides as ``const Py_ssize_t *``. - -- bpo-45855: Document that the *no_block* argument to - :c:func:`PyCapsule_Import` is a no-op now. - -- bpo-45855: Replaced deprecated usage of - :c:func:`PyImport_ImportModuleNoBlock` with - :c:func:`PyImport_ImportModule` in stdlib modules. Patch by Kumar Aditya. - -- bpo-46007: The :c:func:`!PyUnicode_CHECK_INTERNED` macro has been excluded - from the limited C API. It was never usable there, because it used - internal structures which are not available in the limited C API. Patch by - Victor Stinner. - - -What's New in Python 3.11.0 alpha 3? -==================================== - -*Release date: 2021-12-08* - -Core and Builtins ------------------ - -- bpo-46009: Restore behavior from 3.9 and earlier when sending non-None to - newly started generator. In 3.9 this did not affect the state of the - generator. In 3.10.0 and 3.10.1 ``gen_func().send(0)`` is equivalent to - ``gen_func().throw(TypeError(...)`` which exhausts the generator. In - 3.10.2 onward, the behavior has been reverted to that of 3.9. - -- bpo-46004: Fix the :exc:`SyntaxError` location for errors involving for - loops with invalid targets. Patch by Pablo Galindo - -- bpo-45711: :c:func:`!_PyErr_ChainStackItem` no longer normalizes - ``exc_info`` (including setting the traceback on the exception instance) - because ``exc_info`` is always normalized. - -- bpo-45607: The ``__note__`` field was added to :exc:`BaseException`. It is - ``None`` by default but can be set to a string which is added to the - exception's traceback. - -- bpo-45947: Place pointers to dict and values immediately before GC header. - This reduces number of dependent memory loads to access either dict or - values from 3 to 1. - -- bpo-45915: ``is_valid_fd`` now uses faster ``fcntl(fd, F_GETFD)`` on - Linux, macOS, and Windows. - -- bpo-44530: Reverts a change to the ``code.__new__`` :ref:`audit event - <audit-events>` from an earlier prerelease. - -- bpo-42268: Fail the configure step if the selected compiler doesn't - support memory sanitizer. Patch by Pablo Galindo - -- bpo-45711: The three values of ``exc_info`` are now always consistent with - each other. In particular, the ``type`` and ``traceback`` fields are now - derived from the exception instance. This impacts the return values of - :func:`sys.exc_info` and :c:func:`PyErr_GetExcInfo()` if the exception - instance is modified while the exception is handled, as well as - :c:func:`PyErr_SetExcInfo()`, which now ignores the ``type`` and - ``traceback`` arguments provided to it. - -- bpo-45727: Refine the custom syntax error that suggests that a comma may - be missing to trigger only when the expressions are detected between - parentheses or brackets. Patch by Pablo Galindo - -- bpo-45885: Specialized the ``COMPARE_OP`` opcode using the PEP 659 - machinery. - -- bpo-45786: Allocate space for the interpreter frame in the frame object, - to avoid an additional allocation when the frame object outlives the frame - activation. - -Library -------- - -- bpo-45614: Fix :mod:`traceback` display for exceptions with invalid module - name. - -Core and Builtins ------------------ - -- bpo-45813: Fix crash when calling coro.cr_frame.clear() after coroutine - has been freed. - -- bpo-45811: Improve the tokenizer errors when encountering invisible - control characters in the parser. Patch by Pablo Galindo - -- bpo-45848: Allow the parser to obtain error lines directly from encoded - files. Patch by Pablo Galindo - -- bpo-45709: Restore behavior from 3.10 when tracing an exception raised - within a with statement. - -- bpo-44525: Adds new :opcode:`COPY_FREE_VARS` opcode, to make copying of - free variables from function to frame explicit. Helps optimization of - calls to Python function. - -- bpo-45829: Specialize :opcode:`BINARY_SUBSCR` for classes with a - ``__getitem__`` method implemented in Python - -- bpo-45826: Fixed a crash when calling ``.with_traceback(None)`` on - ``NameError``. This occurs internally in - ``unittest.TestCase.assertRaises()``. - -- bpo-45822: Fixed a bug in the parser that was causing it to not respect - :pep:`263` coding cookies when no flags are provided. Patch by Pablo - Galindo - -- bpo-45820: Fix a segfault when the parser fails without reading any input. - Patch by Pablo Galindo - -- bpo-45636: Simplify the implementation of :opcode:`BINARY_OP` by indexing - into an array of function pointers (rather than switching on the oparg). - -- bpo-42540: Fix crash when :func:`os.fork` is called with an active - non-default memory allocator. - -- bpo-45738: Fix computation of error location for invalid continuation - characters in the parser. Patch by Pablo Galindo. - -- bpo-45636: Remove an existing "fast path" for old-style string formatting, - since it no longer appears to have any measurable impact. - -- bpo-45753: Make recursion checks a bit more efficient by tracking amount - of calls left before overflow. - -- bpo-45773: Fix a compiler hang when attempting to optimize certain jump - patterns. - -- bpo-45764: The parser now gives a better error message when leaving out - the opening parenthesis ``(`` after a ``def``-statement:: - - >>> def f: - File "<stdin>", line 1 - def f: - ^ - SyntaxError: expected '(' - -- bpo-45609: Specialized the ``STORE_SUBSCR`` opcode using the PEP 659 - machinery. - -- bpo-45636: Replace all numeric ``BINARY_*`` and ``INPLACE_*`` instructions - with a single :opcode:`BINARY_OP` implementation. - -- bpo-45582: Path calculation (known as ``getpath``) has been reimplemented - as a frozen Python module. This should have no visible impact, but may - affect calculation of all paths referenced in :mod:`sys` and - :mod:`sysconfig`. - -- bpo-45450: Improve the syntax error message for parenthesized arguments. - Patch by Pablo Galindo. - -Library -------- - -- bpo-27946: Fix possible crash when getting an attribute of - :class:`xml.etree.ElementTree.Element` simultaneously with replacing the - ``attrib`` dict. - -- bpo-45711: Make :mod:`asyncio` normalize exceptions as soon as they are - captured with :c:func:`PyErr_Fetch`, and before they are stored as an - exc_info triplet. This brings :mod:`asyncio` in line with the rest of the - codebase, where an exc_info triplet is always normalized. - -- bpo-23819: Replaced asserts with exceptions in asyncio, patch by Kumar - Aditya. - -- bpo-13236: :class:`unittest.TextTestResult` and - :class:`unittest.TextTestRunner` flush now the output stream more often. - -- bpo-45917: Added :func:`math.exp2`:, which returns 2 raised to the power - of x. - -- bpo-37658: Fix issue when on certain conditions ``asyncio.wait_for()`` may - allow a coroutine to complete successfully, but fail to return the result, - potentially causing memory leaks or other issues. - -- bpo-45876: Improve the accuracy of stdev() and pstdev() in the statistics - module. When the inputs are floats or fractions, the output is a - correctly rounded float - -- bpo-44649: Handle dataclass(slots=True) with a field that has default a - default value, but for which init=False. - -- bpo-45803: Added missing kw_only parameter to - dataclasses.make_dataclass(). - -- bpo-45837: The :meth:`!turtle.RawTurtle.settiltangle` is deprecated since - Python 3.1, it now emits a deprecation warning and will be removed in - Python 3.13. - - Use :meth:`turtle.RawTurtle.tiltangle` instead. - - :meth:`turtle.RawTurtle.tiltangle` was earlier incorrectly marked as - deprecated, its docstring has been corrected. - - Patch by Hugo van Kemenade. - -- bpo-45831: :mod:`faulthandler` can now write ASCII-only strings (like - filenames and function names) with a single write() syscall when dumping a - traceback. It reduces the risk of getting an unreadable dump when two - threads or two processes dump a traceback to the same file (like stderr) - at the same time. Patch by Victor Stinner. - -- bpo-45828: :mod:`sqlite` C callbacks now use unraisable exceptions if - callback tracebacks are enabled. Patch by Erlend E. Aasland. - -- bpo-41735: Fix thread lock in ``zlib.Decompress.flush()`` method before - ``PyObject_GetBuffer``. - -- bpo-45235: Reverted an argparse bugfix that caused regression in the - handling of default arguments for subparsers. This prevented leaf level - arguments from taking precedence over root level arguments. - -- bpo-45754: Fix a regression in Python 3.11a1 and 3.11a2 where - :mod:`sqlite3` incorrectly would use ``SQLITE_LIMIT_LENGTH`` when checking - SQL statement lengths. Now, ``SQLITE_LIMIT_SQL_LENGTH`` is used. Patch by - Erlend E. Aasland. - -- bpo-45766: Added *proportional* option to - :meth:`statistics.linear_regression`. - -- bpo-45765: In importlib.metadata, fix distribution discovery for an empty - path. - -- bpo-45757: Fix bug where :mod:`dis` produced an incorrect oparg when - :opcode:`EXTENDED_ARG` is followed by an opcode that does not use its - argument. - -- bpo-45644: In-place JSON file formatting using ``python3 -m json.tool - infile infile`` now works correctly, previously it left the file empty. - Patch by Chris Wesseling. - -- bpo-45703: When a namespace package is imported before another module from - the same namespace is created/installed in a different :data:`sys.path` - location while the program is running, calling the - :func:`importlib.invalidate_caches` function will now also guarantee the - new module is noticed. - -- bpo-45535: Improve output of ``dir()`` with Enums. - -- bpo-45664: Fix :func:`types.resolve_bases` and :func:`types.new_class` for - :class:`types.GenericAlias` instance as a base. - -- bpo-45663: Fix :func:`dataclasses.is_dataclass` for dataclasses which are - subclasses of :class:`types.GenericAlias`. - -- bpo-45662: Fix the repr of :data:`dataclasses.InitVar` with a type alias - to the built-in class, e.g. ``InitVar[list[int]]``. - -- bpo-43137: Launch GNOME web browsers via gio tool instead of obsolete - gvfs-open - -- bpo-45429: On Windows, :func:`time.sleep` now uses a waitable timer which - supports high-resolution timers. Patch by Donghee Na and Eryk Sun. - -- bpo-37295: Optimize :func:`math.comb` and :func:`math.perm`. - -- bpo-45514: Deprecated legacy functions in :mod:`importlib.resources`. - -- bpo-45507: Add tests for truncated/missing trailers in gzip.decompress - implementation. - -- bpo-45359: Implement :pep:`585` for :class:`graphlib.TopologicalSorter`. - -- bpo-44733: Add ``max_tasks_per_child`` to - :class:`concurrent.futures.ProcessPoolExecutor`. This allows users to - specify the maximum number of tasks a single process should execute before - the process needs to be restarted. - -- bpo-28806: Improve netrc library. netrc file no longer needs to contain - all tokens. And if the login name is anonymous, security check is no - longer need. - -- bpo-43498: Avoid a possible *"RuntimeError: dictionary changed size during - iteration"* when adjusting the process count of - :class:`ProcessPoolExecutor`. - -- bpo-42158: Add MIME types for N-quads, N-triples, Notation3 and TriG to - ``mimetypes``. - -- bpo-30533: Add :func:`inspect.getmembers_static` , it return all members - without triggering dynamic lookup via the descriptor protocol. Patch by - Weipeng Hong. - -Documentation -------------- - -- bpo-42238: ``make -C Doc suspicious`` will be removed soon in favor of - ``make -C Doc check``, mark it as deprecated. - -- bpo-45840: Improve cross-references in the documentation for the data - model. - -- bpo-45640: Properly marked-up grammar tokens in the documentation are now - clickable and take you to the definition of a given piece of grammar. - Patch by Arthur Milchior. - -- bpo-45788: Link doc for sys.prefix to sysconfig doc on installation paths. - -- bpo-45772: ``socket.socket`` documentation is corrected to a class from a - function. - -- bpo-45392: Update the docstring of the :class:`type` built-in to remove a - redundant line and to mention keyword arguments for the constructor. - -- bpo-45250: Update the documentation to note that CPython does not - consistently require iterators to define ``__iter__``. - -- bpo-25381: In the extending chapter of the extending doc, update a - paragraph about the global variables containing exception information. - -- bpo-43905: Expanded :func:`~dataclasses.astuple` and - :func:`~dataclasses.asdict` docs, warning about deepcopy being applied and - providing a workaround. - -Tests ------ - -- bpo-45695: Out-of-tree builds with a read-only source directory are now - tested by CI. - -- bpo-19460: Add new Test for - ``Lib/email/mime/nonmultipart.py::MIMENonMultipart``. - -- bpo-45835: Fix race condition in test_queue tests with multiple "feeder" - threads. - -- bpo-45783: The test for the freeze tool now handles file moves and - deletions. - -- bpo-45745: Remove the ``--findleaks`` command line option of regrtest: use - the ``--fail-env-changed`` option instead. Since Python 3.7, it was a - deprecated alias to the ``--fail-env-changed`` option. - -- bpo-45701: Add tests with ``tuple`` type with :func:`functools.lru_cache` - to ``test_functools``. - -Build ------ - -- bpo-44035: CI now verifies that autoconf files have been regenerated with - a current and unpatched autoconf package. - -- bpo-45950: The build system now uses a :program:`_bootstrap_python` - interpreter for freezing and deepfreezing again. To speed up build process - the build tools :program:`_bootstrap_python` and :program:`_freeze_module` - are no longer build with LTO. - -- bpo-45881: The :program:`configure` script now accepts - ``--with-build-python`` and ``--with-freeze-module`` options to make cross - compiling easier. - -- bpo-40280: Emscripten platform now uses ``.wasm`` suffix by default. - -- bpo-40280: Disable unusable core extension modules on WASM/Emscripten - targets. - -- bpo-40280: ``configure`` now checks for socket ``shutdown`` function. The - check makes it possible to disable ``SYS_shutdown`` with - ``ac_cv_func_shutdown=no`` in CONFIG_SITE. - -- bpo-40280: ``configure`` now checks for functions ``fork1, getegid, - geteuid, getgid, getppid, getuid, opendir, pipe, system, wait, ttyname``. - -- bpo-33393: Update ``config.guess`` to 2021-06-03 and ``config.sub`` to - 2021-08-14. ``Makefile`` now has an ``update-config`` target to make - updating more convenient. - -- bpo-45866: ``make regen-all`` now produces the same output when run from a - directory other than the source tree: when building Python out of the - source tree. pegen now strips directory of the "generated by pygen from - <FILENAME>" header Patch by Victor Stinner. - -- bpo-40280: ``configure`` now accepts machine ``wasm32`` or ``wasm64`` and - OS ``wasi`` or ``emscripten`` for cross building, e.g. - ``wasm32-unknown-emscripten``, ``wasm32-wasi``, or - ``wasm32-unknown-wasi``. - -- bpo-41498: Python now compiles on platforms without ``sigset_t``. Several - functions in :mod:`signal` are not available when ``sigset_t`` is missing. - - Based on patch by Roman Yurchak for pyodide. - -- bpo-45881: ``setup.py`` now uses ``CC`` from environment first to discover - multiarch and cross compile paths. - -- bpo-45886: The ``_freeze_module`` program path can now be overridden on - the command line, e.g. ``make - FREEZE_MODULE=../x86_64/Program/_freeze_module``. - -- bpo-45873: Get rid of the ``_bootstrap_python`` build step. The - deepfreeze.py script is now run using ``$(PYTHON_FOR_REGEN)`` which can be - Python 3.7 or newer (on Windows, 3.8 or newer). - -- bpo-45847: Port builtin hashlib extensions to ``PY_STDLIB_MOD`` macro and - ``addext()``. - -- bpo-45723: Add ``autoconf`` helpers for saving and restoring environment - variables: - - * ``SAVE_ENV``: Save ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and - ``$CPPFLAGS``. - * ``RESTORE_ENV``: Restore ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and - ``$CPPFLAGS``. - * ``WITH_SAVE_ENV([SCRIPT])``: Run ``SCRIPT`` wrapped with ``SAVE_ENV`` and - ``RESTORE_ENV``. - - Patch by Erlend E. Aasland. - -- bpo-45573: Mandatory core modules, that are required to bootstrap Python, - are now in ``Modules/Setup.bootstrap``. - -- bpo-45573: ``configure`` now creates ``Modules/Setup.stdlib`` with - conditionally enabled/disabled extension module lines. The file is not - used, yet. - -- bpo-45573: ``configure`` now uses a unified format to set state, compiler - flags, and linker flags in Makefile. The new macro ``PY_STDLIB_MOD`` sets - three variables that are consumed by ``Modules/Setup`` and ``setup.py``. - -- bpo-45816: Python now supports building with Visual Studio 2022 (MSVC - v143, VS Version 17.0). Patch by Jeremiah Vivian. - -- bpo-45800: Settings for :mod:`pyexpat` C extension are now detected by - ``configure``. The bundled ``expat`` library is built in ``Makefile``. - -- bpo-45798: Settings for :mod:`decimal` internal C extension are now - detected by ``configure``. The bundled ``libmpdec`` library is built in - ``Makefile``. - -- bpo-45723: :program:`configure` has a new option ``--with-pkg-config`` to - disable or require pkg-config. - -- bpo-45774: The build dependencies for :mod:`sqlite3` are now detected by - ``configure`` and ``pkg-config``. Patch by Erlend E. Aasland. - -- bpo-45763: The build dependencies for :mod:`zlib`, :mod:`bz2`, and - :mod:`lzma` are now detected by ``configure``. - -- bpo-45747: gdbm and dbm build dependencies are now detected by - ``configure``. - -- bpo-45743: On macOS, the build system no longer passes - ``search_paths_first`` to the linker. The flag has been the default since - Xcode 4 / macOS 10.6. - -- bpo-45723: ``configure.ac`` is now compatible with autoconf 2.71. - Deprecated checks ``STDC_HEADERS`` and ``AC_HEADER_TIME`` have been - removed. - -- bpo-45723: ``configure`` now prints a warning when pkg-config is missing. - -- bpo-45731: ``configure --enable-loadable-sqlite-extensions`` is now - handled by new ``PY_SQLITE_ENABLE_LOAD_EXTENSION`` macro instead of logic - in setup.py. - -- bpo-45723: configure.ac now uses custom helper macros and - ``AC_CACHE_CHECK`` to simplify and speed up configure runs. - -- bpo-45696: Skip the marshal step for frozen modules by generating C code - that produces a set of ready-to-use code objects. This speeds up startup - time by another 10% or more. - -- bpo-45561: Run smelly.py tool from $(srcdir). - -Windows -------- - -- bpo-46105: Fixed calculation of :data:`sys.path` in a venv on Windows. - -- bpo-45901: When installed through the Microsoft Store and set as the - default app for :file:`*.py` files, command line arguments will now be - passed to Python when invoking a script without explicitly launching - Python (that is, ``script.py args`` rather than ``python script.py - args``). - -- bpo-45616: Fix Python Launcher's ability to distinguish between versions - 3.1 and 3.10 when either one is explicitly requested. Previously, 3.1 - would be used if 3.10 was requested but not installed, and 3.10 would be - used if 3.1 was requested but 3.10 was installed. - -- bpo-45850: Implement changes to build with deep-frozen modules on Windows. - Note that we now require Python 3.10 as the "bootstrap" or "host" Python. - -- bpo-45732: Updates bundled Tcl/Tk to 8.6.12. - -- bpo-45720: Internal reference to :file:`shlwapi.dll` was dropped to help - improve startup time. This DLL will no longer be loaded at the start of - every Python process. - -macOS ------ - -- bpo-45732: Update python.org macOS installer to use Tcl/Tk 8.6.12. - -C API ------ - -- bpo-39026: Fix Python.h to build C extensions with Xcode: remove a - relative include from ``Include/cpython/pystate.h``. - - -What's New in Python 3.11.0 alpha 2? -==================================== - -*Release date: 2021-11-05* - -Core and Builtins ------------------ - -- bpo-45716: Improve the :exc:`SyntaxError` message when using ``True``, - ``None`` or ``False`` as keywords in a function call. Patch by Pablo - Galindo. - -- bpo-45688: :data:`sys.stdlib_module_names` now contains the macOS-specific - module :mod:`!_scproxy`. - -- bpo-45379: Clarify :exc:`ImportError` message when we try to explicitly - import a frozen module but frozen modules are disabled. - -- bpo-44525: Specialize simple calls to Python functions (no starargs, - keyword dict, or closure) - -- bpo-45530: Cases of sorting using tuples as keys may now be significantly - faster in some cases. Patch by Tim Peters. - - The order of the result may differ from earlier releases if the tuple - elements don't define a total ordering (see - :ref:`expressions-value-comparisons` for information on total ordering). - It's generally true that the result of sorting simply isn't well-defined - in the absence of a total ordering on list elements. - -- bpo-45526: In obmalloc, set ADDRESS_BITS to not ignore any bits (ignored - 16 before). That is safer in the case that the kernel gives user-space - virtual addresses that span a range greater than 48 bits. - -- bpo-30570: Fixed a crash in ``issubclass()`` from infinite recursion when - searching pathological ``__bases__`` tuples. - -- bpo-45521: Fix a bug in the obmalloc radix tree code. On 64-bit machines, - the bug causes the tree to hold 46-bits of virtual addresses, rather than - the intended 48-bits. - -- bpo-45494: Fix parser crash when reporting errors involving invalid - continuation characters. Patch by Pablo Galindo. - -- bpo-45445: Python now fails to initialize if it finds an invalid - :option:`-X` option in the command line. Patch by Pablo Galindo. - -- bpo-45340: Object attributes are held in an array instead of a dictionary. - An object's dictionary are created lazily, only when needed. Reduces the - memory consumption of a typical Python object by about 30%. Patch by Mark - Shannon. - -- bpo-45408: Fix a crash in the parser when reporting tokenizer errors that - occur at the same time unclosed parentheses are detected. Patch by Pablo - Galindo. - -- bpo-29410: Add SipHash13 for string hash algorithm and use it by default. - -- bpo-45385: Fix reference leak from descr_check. Patch by Donghee Na. - -- bpo-45367: Specialized the ``BINARY_MULTIPLY`` opcode to - ``BINARY_MULTIPLY_INT`` and ``BINARY_MULTIPLY_FLOAT`` using the PEP 659 - machinery. - -- bpo-21736: Frozen stdlib modules now have ``__file__`` to the .py file - they would otherwise be loaded from, if possible. For packages, - ``__path__`` now has the correct entry instead of being an empty list, - which allows unfrozen submodules to be imported. These are set only if - the stdlib directory is known when the runtime is initialized. Note that - the file at ``__file__`` is not guaranteed to exist. None of this affects - non-stdlib frozen modules nor, for now, frozen modules imported using - ``PyImport_ImportFrozenModule()``. Also, at the moment ``co_filename`` is - not updated for the module. - -- bpo-45020: For frozen stdlib modules, record the original module name as - ``module.__spec__.loader_state.origname``. If the value is different than - ``module.__spec__.name`` then the module was defined as an alias in - Tools/scripts/freeze_modules.py. If it is ``None`` then the module comes - from a source file outside the stdlib. - -- bpo-45324: In FrozenImporter.find_spec(), we now preserve the information - needed in exec_module() to load the module. This change mostly impacts - internal details, rather than changing the importer's behavior. - -- bpo-45292: Implement :pep:`654`. Add :class:`ExceptionGroup` and - :class:`BaseExceptionGroup`. Update traceback display code. - -- bpo-40116: Change to the implementation of split dictionaries. Classes - where the instances differ either in the exact set of attributes, or in - the order in which those attributes are set, can still share keys. This - should have no observable effect on users of Python or the C-API. Patch by - Mark Shannon. - -- bpo-44050: Extensions that indicate they use global state (by setting - ``m_size`` to -1) can again be used in multiple interpreters. This reverts - to behavior of Python 3.8. - -- bpo-44525: Setup initial specialization infrastructure for the - ``CALL_FUNCTION`` opcode. Implemented initial specializations for C - function calls: - - * ``CALL_FUNCTION_BUILTIN_O`` for ``METH_O`` flag. - - * ``CALL_FUNCTION_BUILTIN_FAST`` for ``METH_FASTCALL`` flag without keywords. - - * ``CALL_FUNCTION_LEN`` for ``len(o)``. - - * ``CALL_FUNCTION_ISINSTANCE`` for ``isinstance(o, t)``. - -- bpo-44511: Improve the generated bytecode for class and mapping patterns. - -- bpo-43706: Speed up calls to ``enumerate()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -Library -------- - -- bpo-45679: Fix caching of multi-value :data:`typing.Literal`. - ``Literal[True, 2]`` is no longer equal to ``Literal[1, 2]``. - -- bpo-42064: Convert :mod:`sqlite3` to multi-phase initialisation (PEP 489). - Patches by Erlend E. Aasland. - -- bpo-45438: Fix typing.Signature string representation for generic builtin - types. - -- bpo-45613: :mod:`sqlite3` now sets :attr:`sqlite3.threadsafety` based on - the default threading mode the underlying SQLite library has been compiled - with. Patch by Erlend E. Aasland. - -- bpo-45574: Fix warning about ``print_escape`` being unused. - -- bpo-45581: :meth:`sqlite3.connect` now correctly raises :exc:`MemoryError` - if the underlying SQLite API signals memory error. Patch by Erlend E. - Aasland. - -- bpo-45557: :func:`pprint.pprint` now handles *underscore_numbers* - correctly. Previously it was always setting it to ``False``. - -- bpo-44019: Add :func:`operator.call` to ``operator.__all__``. Patch by - Kreusada. - -- bpo-42174: :meth:`shutil.get_terminal_size` now falls back to sane values - if the column or line count are 0. - -- bpo-35673: Improve the introspectability of the ``__loader__`` attribute - for namespace packages. :class:`importlib.machinery.NamespaceLoader` is - now public, and implements the :class:`importlib.abc.InspectLoader` - interface. ``_NamespaceLoader`` is kept for backward compatibility. - -- bpo-45515: Add references to :mod:`zoneinfo` in the :mod:`datetime` - documentation, mostly replacing outdated references to ``dateutil.tz``. - Change by Paul Ganssle. - -- bpo-45475: Reverted optimization of iterating :class:`gzip.GzipFile`, - :class:`bz2.BZ2File`, and :class:`lzma.LZMAFile` (see bpo-43787) because - it caused regression when user iterate them without having reference of - them. Patch by Inada Naoki. - -- bpo-45489: Update :class:`~typing.ForwardRef` to support ``|`` operator. - Patch by Donghee Na. - -- bpo-42222: Removed deprecated support for float arguments in - *randrange()*. - -- bpo-45428: Fix a regression in py_compile when reading filenames from - standard input. - -- bpo-45467: Fix incremental decoder and stream reader in the - "raw-unicode-escape" codec. Previously they failed if the escape sequence - was split. - -- bpo-45461: Fix incremental decoder and stream reader in the - "unicode-escape" codec. Previously they failed if the escape sequence was - split. - -- bpo-45239: Fixed :func:`email.utils.parsedate_tz` crashing with - :exc:`UnboundLocalError` on certain invalid input instead of returning - ``None``. Patch by Ben Hoyt. - -- bpo-45417: Fix quadratic behaviour in the enum module: Creation of enum - classes with a lot of entries was quadratic. - -- bpo-45249: Fix the behaviour of :func:`traceback.print_exc` when - displaying the caret when the ``end_offset`` in the exception is set to 0. - Patch by Pablo Galindo - -- bpo-45416: Fix use of :class:`asyncio.Condition` with explicit - :class:`asyncio.Lock` objects, which was a regression due to removal of - explicit loop arguments. Patch by Joongi Kim. - -- bpo-20028: Empty escapechar/quotechar is not allowed when initializing - :class:`csv.Dialect`. Patch by Vajrasky Kok and Donghee Na. - -- bpo-44904: Fix bug in the :mod:`doctest` module that caused it to fail if - a docstring included an example with a ``classmethod`` ``property``. Patch - by Alex Waygood. - -- bpo-45406: Make :func:`inspect.getmodule` catch ``FileNotFoundError`` - raised by :func:`inspect.getabsfile`, and return ``None`` to indicate that - the module could not be determined. - -- bpo-45411: Add extensions for files containing subtitles - .srt & .vtt - - to the mimetypes.py module. - -- bpo-10716: Migrated pydoc to HTML5 (without changing the look of it). Side - effect is to update xmlrpc's ``ServerHTMLDoc`` which now uses the CSS too. - cgitb now relies less on pydoc (as it can't use the CSS file). - -- bpo-27580: Add support of null characters in :mod:`csv`. - -- bpo-45262: Prevent use-after-free in asyncio. Make sure the cached running - loop holder gets cleared on dealloc to prevent use-after-free in - get_running_loop - -- bpo-45386: Make :mod:`xmlrpc.client` more robust to C runtimes where the - underlying C ``strftime`` function results in a ``ValueError`` when - testing for year formatting options. - -- bpo-20028: Improve error message of :class:`csv.Dialect` when - initializing. Patch by Vajrasky Kok and Donghee Na. - -- bpo-45343: Update bundled pip to 21.2.4 and setuptools to 58.1.0 - -- bpo-45328: Fixed :class:`http.client.HTTPConnection` to work properly in - OSs that don't support the ``TCP_NODELAY`` socket option. - -- bpo-45243: Add :meth:`~sqlite3.Connection.setlimit` and - :meth:`~sqlite3.Connection.getlimit` to :class:`sqlite3.Connection` for - setting and getting SQLite limits by connection basis. Patch by Erlend E. - Aasland. - -- bpo-45320: Removed from the :mod:`inspect` module: - - * the ``getargspec`` function, deprecated since Python 3.0; - use :func:`inspect.signature` or :func:`inspect.getfullargspec` instead. - - * the ``formatargspec`` function, deprecated since Python 3.5; - use the :func:`inspect.signature` function and :class:`Signature` object - directly. - - * the undocumented ``Signature.from_builtin`` and ``Signature.from_function`` - functions, deprecated since Python 3.5; use the - :meth:`Signature.from_callable() <inspect.Signature.from_callable>` method - instead. - - Patch by Hugo van Kemenade. - -- bpo-45192: Fix the ``tempfile._infer_return_type`` function so that the - ``dir`` argument of the :mod:`tempfile` functions accepts an object - implementing the ``os.PathLike`` protocol. - - Patch by Kyungmin Lee. - -- bpo-45160: When tracing a tkinter variable used by a ttk OptionMenu, - callbacks are no longer made twice. - -- bpo-25625: Added non parallel-safe :func:`~contextlib.chdir` context - manager to change the current working directory and then restore it on - exit. Simple wrapper around :func:`~os.chdir`. - -- bpo-24139: Add support for SQLite extended result codes in - :exc:`sqlite3.Error`. Patch by Erlend E. Aasland. - -- bpo-24444: Fixed an error raised in :mod:`argparse` help display when help - for an option is set to 1+ blank spaces or when *choices* arg is an empty - container. - -- bpo-44547: Implement ``Fraction.__int__``, so that a - :class:`fractions.Fraction` instance ``f`` passes an ``isinstance(f, - typing.SupportsInt)`` check. - -- bpo-40321: Adds support for HTTP 308 redirects to :mod:`urllib`. See - :rfc:`7538` for details. Patch by Jochem Schulenklopper. - -- bpo-41374: Ensure that ``socket.TCP_*`` constants are exposed on Cygwin - 3.1.6 and greater. - -- bpo-35970: Add help flag to the base64 module's command line interface. - Patch contributed by Robert Kuska. - -Documentation -------------- - -- bpo-45726: Improve documentation for :func:`functools.singledispatch` and - :class:`functools.singledispatchmethod`. - -- bpo-45680: Amend the docs on ``GenericAlias`` objects to clarify that - non-container classes can also implement ``__class_getitem__``. Patch - contributed by Alex Waygood. - -- bpo-45618: Update Sphinx version used to build the documentation to 4.2.0. - Patch by Maciej Olko. - -- bpo-45655: Add a new "relevant PEPs" section to the top of the - documentation for the ``typing`` module. Patch by Alex Waygood. - -- bpo-45604: Add ``level`` argument to ``multiprocessing.log_to_stderr`` - function docs. - -- bpo-45516: Add protocol description to the - :class:`importlib.abc.TraversableResources` documentation. - -- bpo-45464: Mention in the documentation of :ref:`Built-in Exceptions - <bltin-exceptions>` that inheriting from multiple exception types in a - single subclass is not recommended due to possible memory layout - incompatibility. - -- bpo-45449: Add note about :pep:`585` in :mod:`collections.abc`. - -- bpo-45516: Add protocol description to the - :class:`importlib.abc.Traversable` documentation. - -- bpo-20692: Add Programming FAQ entry explaining that int literal attribute - access requires either a space after or parentheses around the literal. - -Tests ------ - -- bpo-45678: Add tests for scenarios in which - :class:`functools.singledispatchmethod` is stacked on top of a method that - has already been wrapped by two other decorators. Patch by Alex Waygood. - -- bpo-45578: Add tests for :func:`dis.distb` - -- bpo-45678: Add tests to ensure that ``functools.singledispatchmethod`` - correctly wraps the attributes of the target function. - -- bpo-45668: PGO tests now pass when Python is built without test extension - modules. - -- bpo-45577: Add subtests for all ``pickle`` protocols in ``test_zoneinfo``. - -- bpo-45566: Fix ``test_frozen_pickle`` in ``test_dataclasses`` to check all - ``pickle`` versions. - -- bpo-43592: :mod:`test.libregrtest` now raises the soft resource limit for - the maximum number of file descriptors when the default is too low for our - test suite as was often the case on macOS. - -- bpo-39679: Add more test cases for ``@functools.singledispatchmethod`` - when combined with ``@classmethod`` or ``@staticmethod``. - -- bpo-45410: When libregrtest spawns a worker process, stderr is now written - into stdout to keep messages order. Use a single pipe for stdout and - stderr, rather than two pipes. Previously, messages were out of order - which made analysis of buildbot logs harder Patch by Victor Stinner. - -- bpo-45402: Fix test_tools.test_sundry() when Python is built out of tree: - fix how the freeze_modules.py tool locates the _freeze_module program. - Patch by Victor Stinner. - -- bpo-45403: Fix test_sys.test_stdlib_dir() when Python is built outside the - source tree: compare normalized paths. Patch by Victor Stinner. - -- bpo-45400: Fix - test_name_error_suggestions_do_not_trigger_for_too_many_locals() of - test_exceptions if a directory name contains "a1" (like - "Python-3.11.0a1"): use a stricter regular expression. Patch by Victor - Stinner. - -- bpo-10572: Rename :mod:`sqlite3` tests from ``test_sqlite`` to - ``test_sqlite3``, and relocate them to ``Lib/test/test_sqlite3``. Patch by - Erlend E. Aasland. - -Build ------ - -- bpo-43158: ``setup.py`` now uses values from configure script to build the - ``_uuid`` extension module. Configure now detects util-linux's - ``libuuid``, too. - -- bpo-45666: Fix warning of ``swprintf`` and ``%s`` usage in - ``_testembed.c`` - -- bpo-45548: ``Modules/Setup`` and ``Modules/makesetup`` have been improved. - The ``Setup`` file now contains working rules for all extensions. Outdated - comments have been removed. Rules defined by ``makesetup`` track - dependencies correctly. - -- bpo-45548: The :mod:`math` and :mod:`cmath` implementation now require a - C99 compatible ``libm`` and no longer ship with workarounds for missing - acosh, asinh, atanh, expm1, and log1p functions. - -- bpo-45595: ``setup.py`` and ``makesetup`` now track build dependencies on - all Python header files and module specific header files. - -- bpo-45571: ``Modules/Setup`` now use ``PY_CFLAGS_NODIST`` instead of - ``PY_CFLAGS`` to compile shared modules. - -- bpo-45570: :mod:`pyexpat` and :mod:`!_elementtree` no longer define - obsolete macros ``HAVE_EXPAT_CONFIG_H`` and ``USE_PYEXPAT_CAPI``. - ``XML_POOR_ENTROPY`` is now defined in ``expat_config.h``. - -- bpo-43974: ``setup.py`` no longer defines ``Py_BUILD_CORE_MODULE``. - Instead every module, that uses the internal API, defines the macro. - -- bpo-45548: Fill in missing entries in Modules/Setup. - -- bpo-45532: Update :data:`sys.version` to use ``main`` as fallback - information. Patch by Jeong YunWon. - -- bpo-45536: The ``configure`` script now checks whether OpenSSL headers and - libraries provide required APIs. Most common APIs are verified. The check - detects outdated or missing OpenSSL. Failures do not stop configure. - -- bpo-45221: Fixed regression in handling of ``LDFLAGS`` and ``CPPFLAGS`` - options where :meth:`argparse.parse_known_args` could interpret an option - as one of the built-in command line argument, for example ``-h`` for help. - -- bpo-45440: Building Python now requires a C99 ``<math.h>`` header file - providing the following functions: ``copysign()``, ``hypot()``, - ``isfinite()``, ``isinf()``, ``isnan()``, ``round()``. Patch by Victor - Stinner. - -- bpo-45405: Prevent ``internal configure error`` when running ``configure`` - with recent versions of non-Apple clang. Patch by David Bohman. - -- bpo-45433: Avoid linking libpython with libcrypt. - -Windows -------- - -- bpo-43652: Update Tcl/Tk to 8.6.11, actually this time. The previous - update incorrectly included 8.6.10. - -- bpo-45337: venv now warns when the created environment may need to be - accessed at a different path, due to redirections, links or junctions. It - also now correctly installs or upgrades components when the alternate path - is required. - -- bpo-43851: Build SQLite ``SQLITE_OMIT_AUTOINIT`` on Windows. Patch by - Erlend E. Aasland. - -macOS ------ - -- bpo-44828: Avoid tkinter file dialog failure on macOS 12 Monterey when - using the Tk 8.6.11 provided by python.org macOS installers. Patch by Marc - Culler of the Tk project. - -IDLE ----- - -- bpo-45495: Add context keywords 'case' and 'match' to completions list. - -C API ------ - -- bpo-29103: :c:func:`PyType_FromSpec* <PyType_FromModuleAndSpec>` now - copies the class name from the spec to a buffer owned by the class, so the - original can be safely deallocated. Patch by Petr Viktorin. - -- bpo-45522: The internal freelists for frame, float, list, dict, async - generators, and context objects can now be disabled. - -- bpo-35134: Exclude :c:func:`PyWeakref_GET_OBJECT` from the limited C API. - It never worked since the :c:type:`!PyWeakReference` structure is opaque - in the limited C API. - -- bpo-35081: Move the ``interpreteridobject.h`` header file from - ``Include/`` to ``Include/internal/``. It only provides private functions. - Patch by Victor Stinner. - -- bpo-35134: The non-limited API files ``cellobject.h``, ``classobject.h``, - ``context.h``, ``funcobject.h``, ``genobject.h`` and ``longintrepr.h`` - have been moved to the ``Include/cpython`` directory. Moreover, the - ``eval.h`` header file was removed. These files must not be included - directly, as they are already included in ``Python.h``: :ref:`Include - Files <api-includes>`. If they have been included directly, consider - including ``Python.h`` instead. Patch by Victor Stinner. - -- bpo-45474: The following items are no longer available when - ``Py_LIMITED_API`` is defined: - - * :c:func:`PyMarshal_WriteLongToFile` - * :c:func:`PyMarshal_WriteObjectToFile` - * :c:func:`PyMarshal_ReadObjectFromString` - * :c:func:`PyMarshal_WriteObjectToString` - * the ``Py_MARSHAL_VERSION`` macro - - These are not part of the :ref:`limited API <limited-api-list>`. - - Patch by Victor Stinner. - -- bpo-45434: Remove the ``pystrhex.h`` header file. It only contains private - functions. C extensions should only include the main ``<Python.h>`` header - file. Patch by Victor Stinner. - -- bpo-45440: Remove the ``Py_FORCE_DOUBLE()`` macro. It was used by the - ``Py_IS_INFINITY()`` macro. Patch by Victor Stinner. - -- bpo-45434: ``<Python.h>`` no longer includes the header files - ``<stdlib.h>``, ``<stdio.h>``, ``<errno.h>`` and ``<string.h>`` when the - ``Py_LIMITED_API`` macro is set to ``0x030b0000`` (Python 3.11) or higher. - C extensions should explicitly include the header files after ``#include - <Python.h>``. Patch by Victor Stinner. - -- bpo-41123: Remove ``Py_UNICODE_COPY()`` and ``Py_UNICODE_FILL()`` macros, - deprecated since Python 3.3. Use ``PyUnicode_CopyCharacters()`` or - ``memcpy()`` (``wchar_t*`` string), and ``PyUnicode_Fill()`` functions - instead. Patch by Victor Stinner. - -- bpo-45412: Remove the following math macros using the ``errno`` variable: - - * ``Py_ADJUST_ERANGE1()`` - * ``Py_ADJUST_ERANGE2()`` - * ``Py_OVERFLOWED()`` - * ``Py_SET_ERANGE_IF_OVERFLOW()`` - * ``Py_SET_ERRNO_ON_MATH_ERROR()`` - - Patch by Victor Stinner. - -- bpo-45395: Custom frozen modules (the array set to - ``PyImport_FrozenModules``) are now treated as additions, rather than - replacing all the default frozen modules. Frozen stdlib modules can still - be disabled by setting the "code" field of the custom array entry to NULL. - -- bpo-43760: Add new :c:func:`PyThreadState_EnterTracing`, and - :c:func:`PyThreadState_LeaveTracing` functions to the limited C API to - suspend and resume tracing and profiling. Patch by Victor Stinner. - -- bpo-44220: :c:var:`PyStructSequence_UnnamedField` is added to the Stable - ABI. - - -What's New in Python 3.11.0 alpha 1? -==================================== - -*Release date: 2021-10-05* - -Security --------- - -- bpo-42278: Replaced usage of :func:`tempfile.mktemp` with - :class:`~tempfile.TemporaryDirectory` to avoid a potential race condition. - -- bpo-44600: Fix incorrect line numbers while tracing some failed patterns - in :ref:`match <match>` statements. Patch by Charles Burkland. - -- bpo-41180: Add auditing events to the :mod:`marshal` module, and stop - raising ``code.__init__`` events for every unmarshalled code object. - Directly instantiated code objects will continue to raise an event, and - audit event handlers should inspect or collect the raw marshal data. This - reduces a significant performance overhead when loading from ``.pyc`` - files. - -- bpo-44394: Update the vendored copy of libexpat to 2.4.1 (from 2.2.8) to - get the fix for the :cve:`2013-0340` "Billion Laughs" vulnerability. This - copy is most used on Windows and macOS. - -- bpo-43124: Made the internal ``putcmd`` function in :mod:`smtplib` - sanitize input for presence of ``\r`` and ``\n`` characters to avoid - (unlikely) command injection. - -- bpo-44022: :mod:`http.client` now avoids infinitely reading potential HTTP - headers after a ``100 Continue`` status response from the server. - -Core and Builtins ------------------ - -- bpo-43760: The number of hardware branches per instruction dispatch is - reduced from two to one by adding a special instruction for tracing. Patch - by Mark Shannon. - -- bpo-45061: Add a deallocator to the bool type to detect refcount bugs in C - extensions which call Py_DECREF(Py_True) or Py_DECREF(Py_False) by - mistake. Detect also refcount bugs when the empty tuple singleton or the - Unicode empty string singleton is destroyed by mistake. Patch by Victor - Stinner. - -- bpo-24076: sum() was further optimised for summing up single digit - integers. - -- bpo-45190: Update Unicode databases to Unicode 14.0.0. - -- bpo-45167: Fix deepcopying of :class:`types.GenericAlias` objects. - -- bpo-45155: :meth:`int.to_bytes` and :meth:`int.from_bytes` now take a - default value of ``"big"`` for the ``byteorder`` argument. - :meth:`int.to_bytes` also takes a default value of ``1`` for the - ``length`` argument. - -Library -------- - -- bpo-44219: Release the GIL while performing ``isatty`` system calls on - arbitrary file descriptors. In particular, this affects :func:`os.isatty`, - :func:`os.device_encoding` and :class:`io.TextIOWrapper`. By extension, - :func:`io.open` in text mode is also affected. This change solves a - deadlock in :func:`os.isatty`. Patch by Vincent Michel in :issue:`44219`. - -Core and Builtins ------------------ - -- bpo-44959: Added fallback to extension modules with '.sl' suffix on HP-UX - -Library -------- - -- bpo-45121: Fix issue where ``Protocol.__init__`` raises ``RecursionError`` - when it's called directly or via ``super()``. Patch provided by Yurii - Karabas. - -Core and Builtins ------------------ - -- bpo-44348: The deallocator function of the :exc:`BaseException` type now - uses the trashcan mechanism to prevent stack overflow. For example, when a - :exc:`RecursionError` instance is raised, it can be linked to another - RecursionError through the ``__context__`` attribute or the - ``__traceback__`` attribute, and then a chain of exceptions is created. - When the chain is destroyed, nested deallocator function calls can crash - with a stack overflow if the chain is too long compared to the available - stack memory. Patch by Victor Stinner. - -- bpo-45123: Fix PyAiter_Check to only check for the __anext__ presence (not - for __aiter__). Rename PyAiter_Check to PyAIter_Check, PyObject_GetAiter - -> PyObject_GetAIter. - -- bpo-1514420: Interpreter no longer attempts to open files with names in - angle brackets (like "<string>" or "<stdin>") when formatting an - exception. - -- bpo-41031: Match C and Python code formatting of unprintable exceptions - and exceptions in the :mod:`__main__` module. - -- bpo-37330: :func:`open`, :func:`io.open`, :func:`codecs.open` and - :class:`fileinput.FileInput` no longer accept ``'U'`` ("universal - newline") in the file mode. This flag was deprecated since Python 3.3. - Patch by Victor Stinner. - -- bpo-45083: When the interpreter renders an exception, its name now has a - complete qualname. Previously only the class name was concatenated to the - module name, which sometimes resulted in an incorrect full name being - displayed. - - (This issue impacted only the C code exception rendering, the - :mod:`traceback` module was using qualname already). - -- bpo-34561: List sorting now uses the merge-ordering strategy from Munro - and Wild's ``powersort()``. Unlike the former strategy, this is provably - near-optimal in the entropy of the distribution of run lengths. Most uses - of ``list.sort()`` probably won't see a significant time difference, but - may see significant improvements in cases where the former strategy was - exceptionally poor. However, as these are all fast linear-time - approximations to a problem that's inherently at best quadratic-time to - solve truly optimally, it's also possible to contrive cases where the - former strategy did better. - -- bpo-45056: Compiler now removes trailing unused constants from co_consts. - -- bpo-45020: Add a new command line option, "-X frozen_modules=[on|off]" to - opt out of (or into) using optional frozen modules. This defaults to "on" - (or "off" if it's running out of the source tree). - -Library -------- - -- bpo-45012: In :mod:`posix`, release GIL during ``stat()``, ``lstat()``, - and ``fstatat()`` syscalls made by :func:`os.DirEntry.stat`. Patch by - Stanisław Skonieczny. - -Core and Builtins ------------------ - -- bpo-45018: Fixed pickling of range iterators that iterated for over - ``2**32`` times. - -- bpo-45000: A :exc:`SyntaxError` is now raised when trying to delete - :const:`__debug__`. Patch by Donghee Na. - -- bpo-44963: Implement ``send()`` and ``throw()`` methods for - ``anext_awaitable`` objects. Patch by Pablo Galindo. - -Library -------- - -- bpo-44962: Fix a race in WeakKeyDictionary, WeakValueDictionary and - WeakSet when two threads attempt to commit the last pending removal. This - fixes asyncio.create_task and fixes a data loss in asyncio.run where - shutdown_asyncgens is not run - -Core and Builtins ------------------ - -- bpo-24234: Implement the :meth:`__bytes__` special method on the - :class:`bytes` type, so a bytes object ``b`` passes an ``isinstance(b, - typing.SupportsBytes)`` check. - -- bpo-24234: Implement the :meth:`__complex__` special method on the - :class:`complex` type, so a complex number ``z`` passes an ``isinstance(z, - typing.SupportsComplex)`` check. - -- bpo-44954: Fixed a corner case bug where the result of - ``float.fromhex('0x.8p-1074')`` was rounded the wrong way. - -- bpo-44947: Refine the syntax error for trailing commas in import - statements. Patch by Pablo Galindo. - -- bpo-44945: Specialize the BINARY_ADD instruction using the PEP 659 - machinery. Adds five new instructions: - - * BINARY_ADD_ADAPTIVE - * BINARY_ADD_FLOAT - * BINARY_ADD_INT - * BINARY_ADD_UNICODE - * BINARY_ADD_UNICODE_INPLACE_FAST - -Library -------- - -- bpo-44929: Fix some edge cases of ``enum.Flag`` string representation in - the REPL. Patch by Pablo Galindo. - -Core and Builtins ------------------ - -- bpo-44914: Class version tags are no longer recycled. - - This means that a version tag serves as a unique identifier for the state - of a class. We rely on this for effective specialization of the LOAD_ATTR - and other instructions. - -- bpo-44698: Restore behaviour of complex exponentiation with integer-valued - exponent of type :class:`float` or :class:`complex`. - -- bpo-44895: A debug variable :envvar:`PYTHONDUMPREFSFILE` is added for - creating a dump file which is generated by :option:`--with-trace-refs`. - Patch by Donghee Na. - -- bpo-44900: Add five superinstructions for PEP 659 quickening: - - * LOAD_FAST LOAD_FAST - * STORE_FAST LOAD_FAST - * LOAD_FAST LOAD_CONST - * LOAD_CONST LOAD_FAST - * STORE_FAST STORE_FAST - -- bpo-44889: Initial implementation of adaptive specialization of - ``LOAD_METHOD``. The following specialized forms were added: - - * ``LOAD_METHOD_CACHED`` - - * ``LOAD_METHOD_MODULE`` - - * ``LOAD_METHOD_CLASS`` - -- bpo-44890: Specialization stats are always collected in debug builds. - -- bpo-44885: Correct the ast locations of f-strings with format specs and - repeated expressions. Patch by Pablo Galindo - -- bpo-44878: Remove the loop from the bytecode interpreter. All instructions - end with a DISPATCH macro, so the loop is now redundant. - -- bpo-44878: Remove switch statement for interpreter loop when using - computed gotos. This makes sure that we only have one dispatch table in - the interpreter. - -- bpo-44874: Deprecate the old trashcan macros - (``Py_TRASHCAN_SAFE_BEGIN``/``Py_TRASHCAN_SAFE_END``). They should be - replaced by the new macros ``Py_TRASHCAN_BEGIN`` and ``Py_TRASHCAN_END``. - -- bpo-44872: Use new trashcan macros (Py_TRASHCAN_BEGIN/END) in - frameobject.c instead of the old ones (Py_TRASHCAN_SAFE_BEGIN/END). - -- bpo-33930: Fix segmentation fault with deep recursion when cleaning method - objects. Patch by Augusto Goulart and Pablo Galindo. - -- bpo-25782: Fix bug where ``PyErr_SetObject`` hangs when the current - exception has a cycle in its context chain. - -- bpo-44856: Fix reference leaks in the error paths of ``update_bases()`` - and ``__build_class__``. Patch by Pablo Galindo. - -- bpo-44826: Initial implementation of adaptive specialization of STORE_ATTR - - Three specialized forms of STORE_ATTR are added: - - * STORE_ATTR_SLOT - - * STORE_ATTR_SPLIT_KEYS - - * STORE_ATTR_WITH_HINT - -- bpo-44838: Fixed a bug that was causing the parser to raise an incorrect - custom :exc:`SyntaxError` for invalid 'if' expressions. Patch by Pablo - Galindo. - -- bpo-44821: Create instance dictionaries (__dict__) eagerly, to improve - regularity of object layout and assist specialization. - -- bpo-44792: Improve syntax errors for if expressions. Patch by Miguel Brito - -- bpo-34013: Generalize the invalid legacy statement custom error message - (like the one generated when "print" is called without parentheses) to - include more generic expressions. Patch by Pablo Galindo - -- bpo-44732: Rename ``types.Union`` to ``types.UnionType``. - -- bpo-44725: Expose specialization stats in python via - :func:`!_opcode.get_specialization_stats`. - -- bpo-44717: Improve AttributeError on circular imports of submodules. - -- bpo-44698: Fix undefined behaviour in complex object exponentiation. - -- bpo-44653: Support :mod:`typing` types in parameter substitution in the - union type. - -- bpo-44676: Add ability to serialise ``types.Union`` objects. Patch - provided by Yurii Karabas. - -- bpo-44633: Parameter substitution of the union type with wrong types now - raises ``TypeError`` instead of returning :data:`NotImplemented`. - -- bpo-44661: Update ``property_descr_set`` to use vectorcall if possible. - Patch by Donghee Na. - -- bpo-44662: Add ``__module__`` to ``types.Union``. This also fixes - ``types.Union`` issues with ``typing.Annotated``. Patch provided by Yurii - Karabas. - -- bpo-44655: Include the name of the type in unset __slots__ attribute - errors. Patch by Pablo Galindo - -- bpo-44655: Don't include a missing attribute with the same name as the - failing one when offering suggestions for missing attributes. Patch by - Pablo Galindo - -- bpo-44646: Fix the hash of the union type: it no longer depends on the - order of arguments. - -- bpo-44636: Collapse union of equal types. E.g. the result of ``int | int`` - is now ``int``. Fix comparison of the union type with non-hashable - objects. E.g. ``int | str == {}`` no longer raises a TypeError. - -Library -------- - -- bpo-44611: On Windows, :func:`os.urandom`: uses BCryptGenRandom API - instead of CryptGenRandom API which is deprecated from Microsoft Windows - API. Patch by Donghee Na. - -Core and Builtins ------------------ - -- bpo-44635: Convert ``None`` to ``type(None)`` in the union type - constructor. - -- bpo-26280: Implement adaptive specialization for BINARY_SUBSCR - - Three specialized forms of BINARY_SUBSCR are added: - - * BINARY_SUBSCR_LIST_INT - - * BINARY_SUBSCR_TUPLE_INT - - * BINARY_SUBSCR_DICT - -- bpo-44589: Mapping patterns in ``match`` statements with two or more equal - literal keys will now raise a :exc:`SyntaxError` at compile-time. - -- bpo-44606: Fix ``__instancecheck__`` and ``__subclasscheck__`` for the - union type. - -- bpo-42073: The ``@classmethod`` decorator can now wrap other - classmethod-like descriptors. - -- bpo-41972: Tuned the string-searching algorithm of fastsearch.h to have a - shorter inner loop for most cases. - -- bpo-44590: All necessary data for executing a Python function (local - variables, stack, etc) is now kept in a per-thread stack. Frame objects - are lazily allocated on demand. This increases performance by about 7% on - the standard benchmark suite. Introspection and debugging are unaffected - as frame objects are always available when needed. Patch by Mark Shannon. - -- bpo-44584: The threading debug (:envvar:`!PYTHONTHREADDEBUG` environment - variable) is deprecated in Python 3.10 and will be removed in Python 3.12. - This feature requires a debug build of Python. Patch by Victor Stinner. - -- bpo-43895: An obsolete internal cache of shared object file handles added - in 1995 that attempted, but did not guarantee, that a .so would not be - dlopen'ed twice to work around flaws in mid-1990s posix-ish operating - systems has been removed from dynload_shlib.c. - -Library -------- - -- bpo-44490: :mod:`typing` now searches for type parameters in - ``types.Union`` objects. ``get_type_hints`` will also properly resolve - annotations with nested ``types.Union`` objects. Patch provided by Yurii - Karabas. - -Core and Builtins ------------------ - -- bpo-43950: Code objects can now provide the column information for - instructions when available. This is levaraged during traceback printing - to show the expressions responsible for errors. - - Contributed by Pablo Galindo, Batuhan Taskaya and Ammar Askar as part of - :pep:`657`. - -- bpo-44562: Remove uses of :c:func:`PyObject_GC_Del` in error path when - initializing :class:`types.GenericAlias`. - -Library -------- - -- bpo-41486: Fix a memory consumption and copying performance regression in - earlier 3.10 beta releases if someone used an output buffer larger than - 4GiB with zlib.decompress on input data that expands that large. - -Core and Builtins ------------------ - -- bpo-43908: Heap types with the :c:macro:`Py_TPFLAGS_IMMUTABLETYPE` flag - can now inherit the :pep:`590` vectorcall protocol. Previously, this was - only possible for :ref:`static types <static-types>`. Patch by Erlend E. - Aasland. - -- bpo-44553: Implement GC methods for ``types.Union`` to break reference - cycles and prevent memory leaks. - -- bpo-44490: Add ``__parameters__`` attribute and ``__getitem__`` operator - to ``types.Union``. Patch provided by Yurii Karabas. - -- bpo-44523: Remove the pass-through for :func:`hash` of - :class:`weakref.proxy` objects to prevent unintended consequences when the - original referred object dies while the proxy is part of a hashable - object. Patch by Pablo Galindo. - -- bpo-44483: Fix a crash in ``types.Union`` objects when creating a union of - an object with bad ``__module__`` field. - -- bpo-44486: Modules will always have a dictionary, even when created by - ``types.ModuleType.__new__()`` - -- bpo-44472: Fix ltrace functionality when exceptions are raised. Patch by - Pablo Galindo - -- bpo-12022: A :exc:`TypeError` is now raised instead of an - :exc:`AttributeError` in :keyword:`with` and :keyword:`async with` - statements for objects which do not support the :term:`context manager` or - :term:`asynchronous context manager` protocols correspondingly. - -- bpo-44297: Make sure that the line number is set when entering a - comprehension scope. This ensures that backtraces including generator - expressions show the correct line number. - -- bpo-44456: Improve the syntax error when mixing positional and keyword - patterns. Patch by Pablo Galindo. - -- bpo-44409: Fix error location information for tokenizer errors raised on - initialization of the tokenizer. Patch by Pablo Galindo. - -- bpo-44396: Fix a possible crash in the tokenizer when raising syntax - errors for unclosed strings. Patch by Pablo Galindo. - -- bpo-44376: Exact integer exponentiation (like ``i**2`` or ``pow(i, 2)``) - with a small exponent is much faster, due to reducing overhead in such - cases. - -- bpo-44313: Directly imported objects and modules (through import and from - import statements) don't generate ``LOAD_METHOD``/``CALL_METHOD`` for - directly accessed objects on their namespace. They now use the regular - ``LOAD_ATTR``/``CALL_FUNCTION``. - -- bpo-44338: Implement adaptive specialization for LOAD_GLOBAL - - Two specialized forms of LOAD_GLOBAL are added: - - * LOAD_GLOBAL_MODULE - - * LOAD_GLOBAL_BUILTIN - -- bpo-44368: Improve syntax errors for invalid "as" targets. Patch by Pablo - Galindo - -- bpo-44349: Fix an edge case when displaying text from files with encoding - in syntax errors. Patch by Pablo Galindo. - -- bpo-44337: Initial implementation of adaptive specialization of LOAD_ATTR - - Four specialized forms of LOAD_ATTR are added: - - * LOAD_ATTR_SLOT - - * LOAD_ATTR_SPLIT_KEYS - - * LOAD_ATTR_WITH_HINT - - * LOAD_ATTR_MODULE - -- bpo-44335: Fix a regression when identifying incorrect characters in - syntax errors. Patch by Pablo Galindo - -- bpo-43693: Computation of the offsets of cell variables is done in the - compiler instead of at runtime. This reduces the overhead of handling cell - and free variables, especially in the case where a variable is both an - argument and cell variable. - -- bpo-44317: Improve tokenizer error with improved locations. Patch by Pablo - Galindo. - -Library -------- - -- bpo-44304: Fix a crash in the :mod:`sqlite3` module that happened when the - garbage collector clears :class:`sqlite.Statement` objects. Patch by Pablo - Galindo - -Core and Builtins ------------------ - -- bpo-44305: Improve error message for ``try`` blocks without ``except`` or - ``finally`` blocks. Patch by Pablo Galindo. - -- bpo-43413: Constructors of subclasses of some builtin classes (e.g. - :class:`tuple`, :class:`list`, :class:`frozenset`) no longer accept - arbitrary keyword arguments. [reverted in 3.11a4] Subclass of :class:`set` - can now define a ``__new__()`` method with additional keyword parameters - without overriding also ``__init__()``. - -- bpo-43667: Improve Unicode support in non-UTF locales on Oracle Solaris. - This issue does not affect other Solaris systems. - -- bpo-43693: A new opcode MAKE_CELL has been added that effectively moves - some of the work done on function entry into the compiler and into the - eval loop. In addition to creating the required cell objects, the new - opcode converts relevant arguments (and other locals) to cell variables on - function entry. - -- bpo-44232: Fix a regression in :func:`type` when a metaclass raises an - exception. The C function :c:func:`type_new` must properly report the - exception when a metaclass constructor raises an exception and the winner - class is not the metaclass. Patch by Victor Stinner. - -- bpo-44201: Avoid side effects of checking for specialized syntax errors in - the REPL that was causing it to ask for extra tokens after a syntax error - had been detected. Patch by Pablo Galindo - -- bpo-43693: ``PyCodeObject`` gained ``co_fastlocalnames`` and - ``co_fastlocalkinds`` as the authoritative source of fast locals info. - Marshaled code objects have changed accordingly. - -- bpo-44184: Fix a crash at Python exit when a deallocator function removes - the last strong reference to a heap type. Patch by Victor Stinner. - -- bpo-44187: Implement quickening in the interpreter. This offers no - advantages as yet, but is an enabler of future optimizations. See PEP 659 - for full explanation. - -- bpo-44180: The parser doesn't report generic syntax errors that happen in - a position further away that the one it reached in the first pass. Patch - by Pablo Galindo - -- bpo-44168: Fix error message in the parser involving keyword arguments - with invalid expressions. Patch by Pablo Galindo - -- bpo-44156: String caches in ``compile.c`` are now subinterpreter - compatible. - -- bpo-44143: Fixed a crash in the parser that manifest when raising - tokenizer errors when an existing exception was present. Patch by Pablo - Galindo. - -- bpo-44032: Move 'fast' locals and other variables from the frame object to - a per-thread datastack. - -- bpo-44114: Fix incorrect dictkeys_reversed and dictitems_reversed function - signatures in C code, which broke webassembly builds. - -- bpo-44110: Improve :func:`str.__getitem__` error message - -- bpo-26110: Add ``CALL_METHOD_KW`` opcode to speed up method calls with - keyword arguments. Idea originated from PyPy. A side effect is executing - ``CALL_METHOD`` is now branchless in the evaluation loop. - -- bpo-28307: Compiler now optimizes simple C-style formatting with literal - format containing only format codes %s, %r and %a by converting them to - f-string expressions. - -- bpo-43149: Correct the syntax error message regarding multiple exception - types to not refer to "exception groups". Patch by Pablo Galindo - -- bpo-43822: The parser will prioritize tokenizer errors over custom syntax - errors when raising exceptions. Patch by Pablo Galindo. - -- bpo-40222: "Zero cost" exception handling. - - * Uses a lookup table to determine how to handle exceptions. - * Removes SETUP_FINALLY and POP_TOP block instructions, eliminating the runtime overhead of try statements. - * Reduces the size of the frame object by about 60%. - - Patch by Mark Shannon - -- bpo-43918: Document the signature and ``default`` argument in the - docstring of the new ``anext`` builtin. - -- bpo-43833: Emit a deprecation warning if the numeric literal is - immediately followed by one of keywords: and, else, for, if, in, is, or. - Raise a syntax error with more informative message if it is immediately - followed by other keyword or identifier. - -- bpo-43879: Add native_thread_id to PyThreadState. Patch by Gabriele N. - Tornetta. - -- bpo-43693: Compute cell offsets relative to locals in compiler. Allows the - interpreter to treats locals and cells a single array, which is slightly - more efficient. Also make the LOAD_CLOSURE opcode an alias for LOAD_FAST. - Preserving LOAD_CLOSURE helps keep bytecode a bit more readable. - -- bpo-17792: More accurate error messages for access of unbound locals or - free vars. - -- bpo-28146: Fix a confusing error message in :func:`str.format`. - -- bpo-11105: When compiling :class:`ast.AST` objects with recursive - references through :func:`compile`, the interpreter doesn't crash anymore - instead it raises a :exc:`RecursionError`. - -- bpo-39091: Fix crash when using passing a non-exception to a generator's - ``throw()`` method. Patch by Noah Oxer - -- bpo-33346: Asynchronous comprehensions are now allowed inside - comprehensions in asynchronous functions. Outer comprehensions implicitly - become asynchronous. - -Library -------- - -- bpo-45371: Fix clang rpath issue in ``distutils``. The UnixCCompiler now - uses correct clang option to add a runtime library directory (rpath) to a - shared library. - -- bpo-45329: Fix freed memory access in :class:`pyexpat.xmlparser` when - building it with an installed expat library <= 2.2.0. - -- bpo-41710: On Unix, if the ``sem_clockwait()`` function is available in - the C library (glibc 2.30 and newer), the :meth:`threading.Lock.acquire` - method now uses the monotonic clock (:const:`time.CLOCK_MONOTONIC`) for - the timeout, rather than using the system clock - (:const:`time.CLOCK_REALTIME`), to not be affected by system clock - changes. Patch by Victor Stinner. - -- bpo-1596321: Fix the :func:`threading._shutdown` function when the - :mod:`threading` module was imported first from a thread different than - the main thread: no longer log an error at Python exit. - -- bpo-45274: Fix a race condition in the :meth:`Thread.join() - <threading.Thread.join>` method of the :mod:`threading` module. If the - function is interrupted by a signal and the signal handler raises an - exception, make sure that the thread remains in a consistent state to - prevent a deadlock. Patch by Victor Stinner. - -- bpo-21302: In Unix operating systems, :func:`time.sleep` now uses the - ``nanosleep()`` function, if ``clock_nanosleep()`` is not available but - ``nanosleep()`` is available. ``nanosleep()`` allows to sleep with - nanosecond precision. - -- bpo-21302: On Windows, :func:`time.sleep` now uses a waitable timer which - has a resolution of 100 nanoseconds (10\ :sup:`-7` seconds). Previously, - it had a resolution of 1 millisecond (10\ :sup:`-3` seconds). Patch by - Benjamin Szőke and Victor Stinner. - -- bpo-45238: Fix :meth:`unittest.IsolatedAsyncioTestCase.debug`: it runs now - asynchronous methods and callbacks. - -- bpo-36674: :meth:`unittest.TestCase.debug` raises now a - :class:`unittest.SkipTest` if the class or the test method are decorated - with the skipping decorator. - -- bpo-45235: Fix an issue where argparse would not preserve values in a - provided namespace when using a subparser with defaults. - -- bpo-45183: Have zipimport.zipimporter.find_spec() not raise an exception - when the underlying zip file has been deleted and the internal cache has - been reset via invalidate_cache(). - -- bpo-45234: Fixed a regression in :func:`~shutil.copyfile`, - :func:`~shutil.copy`, :func:`~shutil.copy2` raising - :exc:`FileNotFoundError` when source is a directory, which should raise - :exc:`IsADirectoryError` - -- bpo-45228: Fix stack buffer overflow in parsing J1939 network address. - -- bpo-45225: use map function instead of genexpr in capwords. - -- bpo-42135: Fix typo: ``importlib.find_loader`` is really slated for - removal in Python 3.12 not 3.10, like the others in PR 25169. - - Patch by Hugo van Kemenade. - -- bpo-20524: Improves error messages on ``.format()`` operation for ``str``, - ``float``, ``int``, and ``complex``. New format now shows the problematic - pattern and the object type. - -- bpo-45168: Change :func:`dis.dis` output to omit op arg values that cannot - be resolved due to ``co_consts``, ``co_names`` etc not being provided. - Previously the oparg itself was repeated in the value field, which is not - useful and can be confusing. - -- bpo-21302: In Unix operating systems, :func:`time.sleep` now uses the - ``clock_nanosleep()`` function, if available, which allows to sleep for an - interval specified with nanosecond precision. - -- bpo-45173: Remove from the :mod:`configparser` module: the - :class:`!SafeConfigParser` class, the :attr:`!filename` property of the - :class:`~configparser.ParsingError` class, the :meth:`!readfp` method of - the :class:`~configparser.ConfigParser` class, deprecated since Python - 3.2. - - Patch by Hugo van Kemenade. - -- bpo-44987: Pure ASCII strings are now normalized in constant time by - :func:`unicodedata.normalize`. Patch by Donghee Na. - -- bpo-35474: Calling :func:`mimetypes.guess_all_extensions` with - ``strict=False`` no longer affects the result of the following call with - ``strict=True``. Also, mutating the returned list no longer affects the - global state. - -- bpo-45166: :func:`typing.get_type_hints` now works with - :data:`~typing.Final` wrapped in :class:`~typing.ForwardRef`. - -- bpo-45162: Remove many old deprecated :mod:`unittest` features: - - * "``fail*``" and "``assert*``" aliases of :class:`~unittest.TestCase` methods. - * Broken from start :class:`~unittest.TestCase` method ``assertDictContainsSubset()``. - * Ignored :meth:`<unittest.TestLoader.loadTestsFromModule> TestLoader.loadTestsFromModule` parameter *use_load_tests*. - * Old alias ``_TextTestResult`` of :class:`~unittest.TextTestResult`. - -- bpo-38371: Remove the deprecated ``split()`` method of - :class:`!_tkinter.TkappType`. Patch by Erlend E. Aasland. - -- bpo-20499: Improve the speed and accuracy of statistics.pvariance(). - -- bpo-45132: Remove :meth:`~object.__getitem__` methods of - :class:`xml.dom.pulldom.DOMEventStream`, :class:`wsgiref.util.FileWrapper` - and :class:`fileinput.FileInput`, deprecated since Python 3.9. - - Patch by Hugo van Kemenade. - -- bpo-45129: Due to significant security concerns, the *reuse_address* - parameter of :meth:`asyncio.loop.create_datagram_endpoint`, disabled in - Python 3.9, is now entirely removed. This is because of the behavior of - the socket option ``SO_REUSEADDR`` in UDP. - - Patch by Hugo van Kemenade. - -- bpo-45124: The ``bdist_msi`` command, deprecated in Python 3.9, is now - removed. - - Use ``bdist_wheel`` (wheel packages) instead. - - Patch by Hugo van Kemenade. - -- bpo-30856: :class:`unittest.TestResult` methods - :meth:`~unittest.TestResult.addFailure`, - :meth:`~unittest.TestResult.addError`, - :meth:`~unittest.TestResult.addSkip` and - :meth:`~unittest.TestResult.addSubTest` are now called immediately after - raising an exception in test or finishing a subtest. Previously they were - called only after finishing the test clean up. - -- bpo-45034: Changes how error is formatted for ``struct.pack`` with ``'H'`` - and ``'h'`` modes and too large / small numbers. Now it shows the actual - numeric limits, while previously it was showing arithmetic expressions. - -- bpo-25894: :mod:`unittest` now always reports skipped and failed subtests - separately: separate characters in default mode and separate lines in - verbose mode. Also the test description is now output for errors in test - method, class and module cleanups. - -- bpo-45081: Fix issue when dataclasses that inherit from - ``typing.Protocol`` subclasses have wrong ``__init__``. Patch provided by - Yurii Karabas. - -- bpo-45085: The ``binhex`` module, deprecated in Python 3.9, is now - removed. The following :mod:`binascii` functions, deprecated in Python - 3.9, are now also removed: - - * ``a2b_hqx()``, ``b2a_hqx()``; - * ``rlecode_hqx()``, ``rledecode_hqx()``. - - The :func:`binascii.crc_hqx` function remains available. - - Patch by Victor Stinner. - -- bpo-40360: The :mod:`!lib2to3` package is now deprecated and may not be - able to parse Python 3.10 or newer. See the :pep:`617` (New PEG parser for - CPython). Patch by Victor Stinner. - -- bpo-45075: Rename :meth:`traceback.StackSummary.format_frame` to - :meth:`traceback.StackSummary.format_frame_summary`. This method was added - for 3.11 so it was not released yet. - - Updated code and docs to better distinguish frame and FrameSummary. - -- bpo-31299: Add option to completely drop frames from a traceback by - returning ``None`` from a :meth:`~traceback.StackSummary.format_frame` - override. - -- bpo-41620: :meth:`~unittest.TestCase.run` now always return a - :class:`~unittest.TestResult` instance. Previously it returned ``None`` if - the test class or method was decorated with a skipping decorator. - -- bpo-45021: Fix a potential deadlock at shutdown of forked children when - using :mod:`concurrent.futures` module - -- bpo-43913: Fix bugs in cleaning up classes and modules in :mod:`unittest`: - - * Functions registered with :func:`~unittest.addModuleCleanup` were not called unless the user defines ``tearDownModule()`` in their test module. - * Functions registered with :meth:`~unittest.TestCase.addClassCleanup` were not called if ``tearDownClass`` is set to ``None``. - * Buffering in :class:`~unittest.TestResult` did not work with functions registered with ``addClassCleanup()`` and ``addModuleCleanup()``. - * Errors in functions registered with ``addClassCleanup()`` and ``addModuleCleanup()`` were not handled correctly in buffered and debug modes. - * Errors in ``setUpModule()`` and functions registered with ``addModuleCleanup()`` were reported in wrong order. - * And several lesser bugs. - -- bpo-45030: Fix integer overflow in pickling and copying the range - iterator. - -- bpo-45001: Made email date parsing more robust against malformed input, - namely a whitespace-only ``Date:`` header. Patch by Wouter Bolsterlee. - -- bpo-45010: Remove support of special method ``__div__`` in - :mod:`unittest.mock`. It is not used in Python 3. - -- bpo-39218: Improve accuracy of variance calculations by using ``x*x`` - instead of ``x**2``. - -- bpo-43613: Improve the speed of :func:`gzip.compress` and - :func:`gzip.decompress` by compressing and decompressing at once in memory - instead of in a streamed fashion. - -- bpo-37596: Ensure that :class:`set` and :class:`frozenset` objects are - always :mod:`marshalled <marshal>` reproducibly. - -- bpo-44019: A new function ``operator.call`` has been added, such that - ``operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)``. - -- bpo-42255: :class:`!webbrowser.MacOSX` is deprecated and will be removed - in Python 3.13. It is untested and undocumented and also not used by - :mod:`webbrowser` itself. Patch by Donghee Na. - -- bpo-44955: Method :meth:`~unittest.TestResult.stopTestRun` is now always - called in pair with method :meth:`~unittest.TestResult.startTestRun` for - :class:`~unittest.TestResult` objects implicitly created in - :meth:`~unittest.TestCase.run`. Previously it was not called for test - methods and classes decorated with a skipping decorator. - -- bpo-39039: tarfile.open raises :exc:`~tarfile.ReadError` when a zlib error - occurs during file extraction. - -- bpo-44935: :mod:`subprocess` on Solaris now also uses - :func:`os.posix_spawn` for better performance. - -- bpo-44911: :class:`~unittest.IsolatedAsyncioTestCase` will no longer throw - an exception while cancelling leaked tasks. Patch by Bar Harel. - -- bpo-41322: Added ``DeprecationWarning`` for tests and async tests that - return a value!=None (as this may indicate an improperly written test, for - example a test written as a generator function). - -- bpo-44524: Make exception message more useful when subclass from typing - special form alias. Patch provided by Yurii Karabas. - -- bpo-38956: :class:`argparse.BooleanOptionalAction`'s default value is no - longer printed twice when used with - :class:`argparse.ArgumentDefaultsHelpFormatter`. - -- bpo-44860: Fix the ``posix_user`` scheme in :mod:`sysconfig` to not depend - on :data:`sys.platlibdir`. - -- bpo-44859: Improve error handling in :mod:`sqlite3` and raise more - accurate exceptions. - - * :exc:`MemoryError` is now raised instead of :exc:`sqlite3.Warning` when memory is not enough for encoding a statement to UTF-8 in ``Connection.__call__()`` and ``Cursor.execute()``. - * :exc:`UnicodEncodeError` is now raised instead of :exc:`sqlite3.Warning` when the statement contains surrogate characters in ``Connection.__call__()`` and ``Cursor.execute()``. - * :exc:`TypeError` is now raised instead of :exc:`ValueError` for non-string script argument in ``Cursor.executescript()``. - * :exc:`ValueError` is now raised for script containing the null character instead of truncating it in ``Cursor.executescript()``. - * Correctly handle exceptions raised when getting boolean value of the result of the progress handler. - * Add many tests covering different corner cases. - -- bpo-44581: Upgrade bundled pip to 21.2.3 and setuptools to 57.4.0 - -- bpo-44849: Fix the :func:`os.set_inheritable` function on FreeBSD 14 for - file descriptor opened with the :const:`~os.O_PATH` flag: ignore the - :const:`~errno.EBADF` error on ``ioctl()``, fallback on the ``fcntl()`` - implementation. Patch by Victor Stinner. - -- bpo-44605: The @functools.total_ordering() decorator now works with - metaclasses. - -- bpo-44524: Fixed an issue wherein the ``__name__`` and ``__qualname__`` - attributes of subscribed specialforms could be ``None``. - -- bpo-44839: :class:`MemoryError` raised in user-defined functions will now - produce a ``MemoryError`` in :mod:`sqlite3`. :class:`OverflowError` will - now be converted to :class:`~sqlite3.DataError`. Previously - :class:`~sqlite3.OperationalError` was produced in these cases. - -- bpo-44822: :mod:`sqlite3` user-defined functions and aggregators returning - :class:`strings <str>` with embedded NUL characters are no longer - truncated. Patch by Erlend E. Aasland. - -- bpo-44801: Ensure that the :class:`~typing.ParamSpec` variable in Callable - can only be substituted with a parameters expression (a list of types, an - ellipsis, ParamSpec or Concatenate). - -- bpo-44806: Non-protocol subclasses of :class:`typing.Protocol` ignore now - the ``__init__`` method inherited from protocol base classes. - -- bpo-27275: :meth:`collections.OrderedDict.popitem` and - :meth:`collections.OrderedDict.pop` no longer call ``__getitem__`` and - ``__delitem__`` methods of the OrderedDict subclasses. - -- bpo-44793: Fix checking the number of arguments when subscribe a generic - type with ``ParamSpec`` parameter. - -- bpo-44784: In importlib.metadata tests, override warnings behavior under - expected DeprecationWarnings (importlib_metadata 4.6.3). - -- bpo-44667: The :func:`tokenize.tokenize` doesn't incorrectly generate a - ``NEWLINE`` token if the source doesn't end with a new line character but - the last line is a comment, as the function is already generating a ``NL`` - token. Patch by Pablo Galindo - -- bpo-44771: Added ``importlib.simple`` module implementing adapters from a - low-level resources reader interface to a ``TraversableResources`` - interface. Legacy API (``path``, ``contents``, ...) is now supported - entirely by the ``.files()`` API with a compatibility shim supplied for - resource loaders without that functionality. Feature parity with - ``importlib_resources`` 5.2. - -- bpo-44752: :mod:`rcompleter` does not call :func:`getattr` on - :class:`property` objects to avoid the side-effect of evaluating the - corresponding method. - -- bpo-44747: Refactor usage of ``sys._getframe`` in ``typing`` module. Patch - provided by Yurii Karabas. - -- bpo-42378: Fixes the issue with log file being overwritten when - :class:`logging.FileHandler` is used in :mod:`atexit` with *filemode* set - to ``'w'``. Note this will cause the message in *atexit* not being logged - if the log stream is already closed due to shutdown of logging. - -- bpo-44720: ``weakref.proxy`` objects referencing non-iterators now raise - ``TypeError`` rather than dereferencing the null ``tp_iternext`` slot and - crashing. - -- bpo-44704: The implementation of ``collections.abc.Set._hash()`` now - matches that of ``frozenset.__hash__()``. - -- bpo-44666: Fixed issue in :func:`compileall.compile_file` when - ``sys.stdout`` is redirected. Patch by Stefan Hölzl. - -- bpo-44688: :meth:`sqlite3.Connection.create_collation` now accepts - non-ASCII collation names. Patch by Erlend E. Aasland. - -- bpo-44690: Adopt *binacii.a2b_base64*'s strict mode in *base64.b64decode*. - -- bpo-42854: Fixed a bug in the :mod:`!_ssl` module that was throwing - :exc:`OverflowError` when using :meth:`!_ssl._SSLSocket.write` and - :meth:`!_ssl._SSLSocket.read` for a big value of the ``len`` parameter. - Patch by Pablo Galindo. - -- bpo-44686: Replace ``unittest.mock._importer`` with - ``pkgutil.resolve_name``. - -- bpo-44353: Make ``NewType.__call__`` faster by implementing it in C. Patch - provided by Yurii Karabas. - -- bpo-44682: Change the :mod:`pdb` *commands* directive to disallow setting - commands for an invalid breakpoint and to display an appropriate error. - -- bpo-44353: Refactor ``typing.NewType`` from function into callable class. - Patch provided by Yurii Karabas. - -- bpo-44678: Added a separate error message for discontinuous padding in - *binascii.a2b_base64* strict mode. - -- bpo-44524: Add missing ``__name__`` and ``__qualname__`` attributes to - ``typing`` module classes. Patch provided by Yurii Karabas. - -- bpo-40897: Give priority to using the current class constructor in - :func:`inspect.signature`. Patch by Weipeng Hong. - -- bpo-44638: Add a reference to the zipp project and hint as to how to use - it. - -- bpo-44648: Fixed wrong error being thrown by :func:`inspect.getsource` - when examining a class in the interactive session. Instead of - :exc:`TypeError`, it should be :exc:`OSError` with appropriate error - message. - -- bpo-44608: Fix memory leak in :func:`!_tkinter._flatten` if it is called - with a sequence or set, but not list or tuple. - -- bpo-44594: Fix an edge case of :class:`ExitStack` and - :class:`AsyncExitStack` exception chaining. They will now match ``with`` - block behavior when ``__context__`` is explicitly set to ``None`` when the - exception is in flight. - -- bpo-42799: In :mod:`fnmatch`, the cache size for compiled regex patterns - (:func:`functools.lru_cache`) was bumped up from 256 to 32768, affecting - functions: :func:`fnmatch.fnmatch`, :func:`fnmatch.fnmatchcase`, - :func:`fnmatch.filter`. - -- bpo-41928: Update :func:`shutil.copyfile` to raise - :exc:`FileNotFoundError` instead of confusing :exc:`IsADirectoryError` - when a path ending with a :const:`os.path.sep` does not exist; - :func:`shutil.copy` and :func:`shutil.copy2` are also affected. - -- bpo-44569: Added the :func:`StackSummary.format_frame` function in - :mod:`traceback`. This allows users to customize the way individual lines - are formatted in tracebacks without re-implementing logic to handle - recursive tracebacks. - -- bpo-44566: handle StopIteration subclass raised from - @contextlib.contextmanager generator - -- bpo-44558: Make the implementation consistency of - :func:`~operator.indexOf` between C and Python versions. Patch by Donghee - Na. - -- bpo-41249: Fixes ``TypedDict`` to work with ``typing.get_type_hints()`` - and postponed evaluation of annotations across modules. - -- bpo-44554: Refactor argument processing in :func:`pdb.main` to simplify - detection of errors in input loading and clarify behavior around module or - script invocation. - -- bpo-34798: Break up paragraph about :class:`pprint.PrettyPrinter` - construction parameters to make it easier to read. - -- bpo-44539: Added support for recognizing JPEG files without JFIF or Exif - markers. - -- bpo-44461: Fix bug with :mod:`pdb`'s handling of import error due to a - package which does not have a ``__main__`` module - -- bpo-43625: Fix a bug in the detection of CSV file headers by - :meth:`csv.Sniffer.has_header` and improve documentation of same. - -- bpo-44516: Update vendored pip to 21.1.3 - -- bpo-42892: Fixed an exception thrown while parsing a malformed multipart - email by :class:`email.message.EmailMessage`. - -- bpo-44468: :func:`typing.get_type_hints` now finds annotations in classes - and base classes with unexpected ``__module__``. Previously, it skipped - those MRO elements. - -- bpo-44491: Allow clearing the :mod:`sqlite3` authorizer callback by - passing :const:`None` to :meth:`~sqlite3.Connection.set_authorizer`. Patch - by Erlend E. Aasland. - -- bpo-43977: Set the proper :c:macro:`Py_TPFLAGS_MAPPING` and - :c:macro:`Py_TPFLAGS_SEQUENCE` flags for subclasses created before a - parent has been registered as a :class:`collections.abc.Mapping` or - :class:`collections.abc.Sequence`. - -- bpo-44482: Fix very unlikely resource leak in :mod:`glob` in alternate - Python implementations. - -- bpo-44466: The :mod:`faulthandler` module now detects if a fatal error - occurs during a garbage collector collection. Patch by Victor Stinner. - -- bpo-44471: A :exc:`TypeError` is now raised instead of an - :exc:`AttributeError` in :meth:`contextlib.ExitStack.enter_context` and - :meth:`contextlib.AsyncExitStack.enter_async_context` for objects which do - not support the :term:`context manager` or :term:`asynchronous context - manager` protocols correspondingly. - -- bpo-44404: :mod:`tkinter`'s ``after()`` method now supports callables - without the ``__name__`` attribute. - -- bpo-41546: Make :mod:`pprint` (like the builtin ``print``) not attempt to - write to ``stdout`` when it is ``None``. - -- bpo-44458: ``BUFFER_BLOCK_SIZE`` is now declared static, to avoid linking - collisions when bz2, lmza or zlib are statically linked. - -- bpo-44464: Remove exception for flake8 in deprecated importlib.metadata - interfaces. Sync with importlib_metadata 4.6. - -- bpo-44446: Take into account that ``lineno`` might be ``None`` in - :class:`traceback.FrameSummary`. - -- bpo-44439: Fix in :meth:`bz2.BZ2File.write` / :meth:`lzma.LZMAFile.write` - methods, when the input data is an object that supports the buffer - protocol, the file length may be wrong. - -- bpo-44434: _thread.start_new_thread() no longer calls - PyThread_exit_thread() explicitly at the thread exit, the call was - redundant. On Linux with the glibc, pthread_exit() aborts the whole - process if dlopen() fails to open libgcc_s.so file (ex: EMFILE error). - Patch by Victor Stinner. - -- bpo-42972: The _thread.RLock type now fully implement the GC protocol: add - a traverse function and the :c:macro:`Py_TPFLAGS_HAVE_GC` flag. Patch by - Victor Stinner. - -- bpo-44422: The :func:`threading.enumerate` function now uses a reentrant - lock to prevent a hang on reentrant call. Patch by Victor Stinner. - -- bpo-38291: Importing typing.io or typing.re now prints a - ``DeprecationWarning``. - -- bpo-37880: argparse actions store_const and append_const each receive a - default value of ``None`` when the ``const`` kwarg is not provided. - Previously, this raised a :exc:`TypeError`. - -- bpo-44389: Fix deprecation of :data:`ssl.OP_NO_TLSv1_3` - -- bpo-27827: :meth:`pathlib.PureWindowsPath.is_reserved` now identifies a - greater range of reserved filenames, including those with trailing spaces - or colons. - -- bpo-44395: Fix :meth:`~email.message.MIMEPart.as_string` to pass unixfrom - properly. Patch by Donghee Na. - -- bpo-34266: Handle exceptions from parsing the arg of :mod:`pdb`'s - run/restart command. - -- bpo-44362: Improve :mod:`ssl` module's deprecation messages, error - reporting, and documentation for deprecations. - -- bpo-44342: [Enum] Change pickling from by-value to by-name. - -- bpo-44356: [Enum] Allow multiple data-type mixins if they are all the - same. - -- bpo-44351: Restore back :func:`parse_makefile` in ``distutils.sysconfig`` - because it behaves differently than the similar implementation in - :mod:`sysconfig`. - -- bpo-35800: :class:`!smtpd.MailmanProxy` is now removed as it is unusable - without an external module, ``mailman``. Patch by Donghee Na. - -- bpo-44357: Added a function that returns cube root of the given number - :func:`math.cbrt` - -- bpo-44339: Change ``math.pow(±0.0, -math.inf)`` to return ``inf`` instead - of raising ``ValueError``. This brings the special-case handling of - ``math.pow`` into compliance with the IEEE 754 standard. - -- bpo-44242: Remove missing flag check from Enum creation and move into a - ``verify`` decorator. - -- bpo-44246: In ``importlib.metadata``, restore compatibility in the result - from ``Distribution.entry_points`` (``EntryPoints``) to honor expectations - in older implementations and issuing deprecation warnings for these cases: - A. ``EntryPoints`` objects are once again mutable, allowing for - ``sort()`` and other list-based mutation operations. Avoid deprecation - warnings by casting to a mutable sequence (e.g. - ``list(dist.entry_points).sort()``). B. ``EntryPoints`` results once again - allow for access by index. To avoid deprecation warnings, cast the - result to a Sequence first (e.g. ``tuple(dist.entry_points)[0]``). - -- bpo-44246: In importlib.metadata.entry_points, de-duplication of - distributions no longer requires loading the full metadata for - PathDistribution objects, improving entry point loading performance by - ~10x. - -- bpo-43858: Added a function that returns a copy of a dict of logging - levels: :func:`logging.getLevelNamesMapping` - -- bpo-44260: The :class:`random.Random` constructor no longer reads system - entropy without need. - -- bpo-44254: On Mac, give turtledemo button text a color that works on both - light or dark background. Programmers cannot control the latter. - -- bpo-44258: Support PEP 515 for Fraction's initialization from string. - -- bpo-44235: Remove deprecated functions in the :mod:`gettext`. Patch by - Donghee Na. - -- bpo-38693: Prefer f-strings to ``.format`` in importlib.resources. - -- bpo-33693: Importlib.metadata now prefers f-strings to .format. - -- bpo-44241: Incorporate minor tweaks from importlib_metadata 4.1: - SimplePath protocol, support for Metadata 2.2. - -- bpo-43216: Remove the :deco:`asyncio.coroutine` :term:`decorator` enabling - legacy generator-based coroutines to be compatible with async/await code; - remove :class:`asyncio.coroutines.CoroWrapper` used for wrapping legacy - coroutine objects in the debug mode. The decorator has been deprecated - since Python 3.8 and the removal was initially scheduled for Python 3.10. - Patch by Illia Volochii. - -- bpo-44210: Make importlib.metadata._meta.PackageMetadata public. - -- bpo-43643: Declare readers.MultiplexedPath.name as a property per the - spec. - -- bpo-27334: The :mod:`sqlite3` context manager now performs a rollback - (thus releasing the database lock) if commit failed. Patch by Luca Citi - and Erlend E. Aasland. - -- bpo-4928: Documented existing behavior on POSIX: NamedTemporaryFiles are - not deleted when creating process is killed with SIGKILL - -- bpo-44154: Optimize :class:`fractions.Fraction` pickling for large - components. - -- bpo-33433: For IPv4 mapped IPv6 addresses (:rfc:`4291` Section 2.5.5.2), - the :mod:`ipaddress.IPv6Address.is_private` check is deferred to the - mapped IPv4 address. This solves a bug where public mapped IPv4 addresses - were considered private by the IPv6 check. - -- bpo-44150: Add optional *weights* argument to statistics.fmean(). - -- bpo-44142: :func:`ast.unparse` will now drop the redundant parentheses - when tuples used as assignment targets (e.g in for loops). - -- bpo-44145: :mod:`hmac` computations were not releasing the GIL while - calling the OpenSSL ``HMAC_Update`` C API (a new feature in 3.9). This - unintentionally prevented parallel computation as other :mod:`hashlib` - algorithms support. - -- bpo-44095: :class:`zipfile.Path` now supports :attr:`zipfile.Path.stem`, - :attr:`zipfile.Path.suffixes`, and :attr:`zipfile.Path.suffix` attributes. - -- bpo-44077: It's now possible to receive the type of service (ToS), a.k.a. - differentiated services (DS), a.k.a. differentiated services code point - (DSCP) and explicit congestion notification (ECN) IP header fields with - ``socket.IP_RECVTOS``. - -- bpo-37788: Fix a reference leak when a Thread object is never joined. - -- bpo-38908: Subclasses of ``typing.Protocol`` which only have data - variables declared will now raise a ``TypeError`` when checked with - ``isinstance`` unless they are decorated with :func:`runtime_checkable`. - Previously, these checks passed silently. Patch provided by Yurii Karabas. - -- bpo-44098: ``typing.ParamSpec`` will no longer be found in the - ``__parameters__`` of most :mod:`typing` generics except in valid use - locations specified by :pep:`612`. This prevents incorrect usage like - ``typing.List[P][int]``. This change means incorrect usage which may have - passed silently in 3.10 beta 1 and earlier will now error. - -- bpo-44089: Allow subclassing ``csv.Error`` in 3.10 (it was allowed in 3.9 - and earlier but was disallowed in early versions of 3.10). - -- bpo-44081: :func:`ast.unparse` now doesn't use redundant spaces to - separate ``lambda`` and the ``:`` if there are no parameters. - -- bpo-44061: Fix regression in previous release when calling - :func:`pkgutil.iter_modules` with a list of :class:`pathlib.Path` objects - -- bpo-44059: Register the SerenityOS Browser in the :mod:`webbrowser` - module. - -- bpo-36515: The :mod:`hashlib` module no longer does unaligned memory - accesses when compiled for ARM platforms. - -- bpo-40465: Remove random module features deprecated in Python 3.9. - -- bpo-44018: random.seed() no longer mutates bytearray inputs. - -- bpo-38352: Add ``IO``, ``BinaryIO``, ``TextIO``, ``Match``, and - ``Pattern`` to ``typing.__all__``. Patch by Jelle Zijlstra. - -- bpo-44002: :mod:`urllib.parse` now uses :func:`functool.lru_cache` for its - internal URL splitting and quoting caches instead of rolling its own like - its the '90s. - - The undocumented internal :mod:`urllib.parse` ``Quoted`` class API is now - deprecated, for removal in 3.14. - -- bpo-43972: When :class:`http.server.SimpleHTTPRequestHandler` sends a - ``301 (Moved Permanently)`` for a directory path not ending with ``/``, - add a ``Content-Length: 0`` header. This improves the behavior for certain - clients. - -- bpo-28528: Fix a bug in :mod:`pdb` where :meth:`~pdb.Pdb.checkline` raises - :exc:`AttributeError` if it is called after :meth:`~pdb.Pdb.reset`. - -- bpo-43853: Improved string handling for :mod:`sqlite3` user-defined - functions and aggregates: - - * It is now possible to pass strings with embedded null characters to UDFs - * Conversion failures now correctly raise :exc:`MemoryError` - - Patch by Erlend E. Aasland. - -- bpo-43666: AIX: ``Lib/_aix_support.get_platform()`` may fail in an AIX - WPAR. The fileset bos.rte appears to have a builddate in both LPAR and - WPAR so this fileset is queried rather than bos.mp64. To prevent a similar - situation (no builddate in ODM) a value (9988) sufficient for completing a - build is provided. Patch by M Felt. - -- bpo-43650: Fix :exc:`MemoryError` in :func:`shutil.unpack_archive` which - fails inside :func:`shutil._unpack_zipfile` on large files. Patch by Igor - Bolshakov. - -- bpo-43612: :func:`zlib.compress` now accepts a wbits parameter which - allows users to compress data as a raw deflate block without zlib headers - and trailers in one go. Previously this required instantiating a - ``zlib.compressobj``. It also provides a faster alternative to - ``gzip.compress`` when wbits=31 is used. - -- bpo-43392: :func:`importlib._bootstrap._find_and_load` now implements a - two-step check to avoid locking when modules have been already imported - and are ready. This improves performance of repeated calls to - :func:`importlib.import_module` and :func:`importlib.__import__`. - -- bpo-43318: Fix a bug where :mod:`pdb` does not always echo cleared - breakpoints. - -- bpo-43234: Prohibit passing - non-:class:`concurrent.futures.ThreadPoolExecutor` executors to - :meth:`loop.set_default_executor` following a deprecation in Python 3.8. - Patch by Illia Volochii. - -- bpo-43232: Prohibit previously deprecated potentially disruptive - operations on :class:`asyncio.trsock.TransportSocket`. Patch by Illia - Volochii. - -- bpo-30077: Added support for Apple's aifc/sowt pseudo-compression - -- bpo-42971: Add definition of ``errno.EQFULL`` for platforms that define - this constant (such as macOS). - -- bpo-43086: Added a new optional :code:`strict_mode` parameter to - *binascii.a2b_base64*. When :code:`scrict_mode` is set to :code:`True`, - the *a2b_base64* function will accept only valid base64 content. More - details about what "valid base64 content" is, can be found in the - function's documentation. - -- bpo-43024: Improve the help signature of - :func:`traceback.print_exception`, :func:`traceback.format_exception` and - :func:`traceback.format_exception_only`. - -- bpo-33809: Add the :meth:`traceback.TracebackException.print` method which - prints the formatted exception information. - -- bpo-42862: :mod:`sqlite3` now utilizes :meth:`functools.lru_cache` to - implement the connection statement cache. As a small optimisation, the - default statement cache size has been increased from 100 to 128. Patch by - Erlend E. Aasland. - -- bpo-41818: Soumendra Ganguly: add termios.tcgetwinsize(), - termios.tcsetwinsize(). - -- bpo-40497: :meth:`subprocess.check_output` now raises :exc:`ValueError` - when the invalid keyword argument *check* is passed by user code. - Previously such use would fail later with a :exc:`TypeError`. Patch by - Rémi Lapeyre. - -- bpo-37449: ``ensurepip`` now uses ``importlib.resources.files()`` - traversable APIs - -- bpo-40956: Use Argument Clinic in :mod:`sqlite3`. Patches by Erlend E. - Aasland. - -- bpo-41730: ``DeprecationWarning`` is now raised when importing - :mod:`tkinter.tix`, which has been deprecated in documentation since - Python 3.6. - -- bpo-20684: Remove unused ``_signature_get_bound_param`` function from - :mod:`inspect` - by Anthony Sottile. - -- bpo-41402: Fix :meth:`email.message.EmailMessage.set_content` when called - with binary data and ``7bit`` content transfer encoding. - -- bpo-32695: The *compresslevel* and *preset* keyword arguments of - :func:`tarfile.open` are now both documented and tested. - -- bpo-41137: Use utf-8 encoding while reading .pdbrc files. Patch by - Srinivas Reddy Thatiparthy - -- bpo-24391: Improved reprs of :mod:`threading` synchronization objects: - :class:`~threading.Semaphore`, :class:`~threading.BoundedSemaphore`, - :class:`~threading.Event` and :class:`~threading.Barrier`. - -- bpo-5846: Deprecated the following :mod:`unittest` functions, scheduled - for removal in Python 3.13: - - * :func:`!findTestCases` - * :func:`!makeSuite` - * :func:`!getTestCaseNames` - - Use :class:`~unittest.TestLoader` methods instead: - - * :meth:`unittest.TestLoader.loadTestsFromModule` - * :meth:`unittest.TestLoader.loadTestsFromTestCase` - * :meth:`unittest.TestLoader.getTestCaseNames` - - Patch by Erlend E. Aasland. - -- bpo-40563: Support pathlike objects on dbm/shelve. Patch by Hakan Çelik - and Henry-Joseph Audéoud. - -- bpo-34990: Fixed a Y2k38 bug in the compileall module where it would fail - to compile files with a modification time after the year 2038. - -- bpo-39549: Whereas the code for reprlib.Repr had previously used a - hardcoded string value of '...', this PR updates it to use of a - “fillvalue” attribute, whose value defaults to '...' and can be reset in - either individual reprlib.Repr instances or in subclasses thereof. - -- bpo-37022: :mod:`pdb` now displays exceptions from ``repr()`` with its - ``p`` and ``pp`` commands. - -- bpo-38840: Fix ``test___all__`` on platforms lacking a shared memory - implementation. - -- bpo-39359: Add one missing check that the password is a bytes object for - an encrypted zipfile. - -- bpo-38741: :mod:`configparser`: using ']' inside a section header will no - longer cut the section name short at the ']' - -- bpo-38415: Added missing behavior to - :func:`contextlib.asynccontextmanager` to match - :func:`contextlib.contextmanager` so decorated functions can themselves be - decorators. - -- bpo-30256: Pass multiprocessing BaseProxy argument ``manager_owned`` - through AutoProxy. - -- bpo-27513: :func:`email.utils.getaddresses` now accepts - :class:`email.header.Header` objects along with string values. Patch by - Zackery Spytz. - -- bpo-16379: Add SQLite error code and name to :mod:`sqlite3` exceptions. - Patch by Aviv Palivoda, Daniel Shahaf, and Erlend E. Aasland. - -- bpo-26228: pty.spawn no longer hangs on FreeBSD, macOS, and Solaris. - -- bpo-33349: lib2to3 now recognizes async generators everywhere. - -- bpo-29298: Fix ``TypeError`` when required subparsers without ``dest`` do - not receive arguments. Patch by Anthony Sottile. - -Documentation -------------- - -- bpo-45216: Remove extra documentation listing methods in ``difflib``. It - was rendering twice in pydoc and was outdated in some places. - -- bpo-45024: :mod:`collections.abc` documentation has been expanded to - explicitly cover how instance and subclass checks work, with additional - doctest examples and an exhaustive list of ABCs which test membership - purely by presence of the right :term:`special method`\s. Patch by Raymond - Hettinger. - -- bpo-44957: Promote PEP 604 union syntax by using it where possible. Also, - mention ``X | Y`` more prominently in section about ``Union`` and mention - ``X | None`` at all in section about ``Optional``. - -- bpo-16580: Added code equivalents for the :meth:`int.to_bytes` and - :meth:`int.from_bytes` methods, as well as tests ensuring that these code - equivalents are valid. - -- bpo-44903: Removed the ``othergui.rst`` file, any references to it, and - the list of GUI frameworks in the FAQ. In their place I've added links to - the Python Wiki `page on GUI frameworks - <https://wiki.python.org/moin/GuiProgramming>`_. - -- bpo-33479: Tkinter documentation has been greatly expanded with new - "Architecture" and "Threading model" sections. - -- bpo-36700: :mod:`base64` RFC references were updated to point to - :rfc:`4648`; a section was added to point users to the new "security - considerations" section of the RFC. - -- bpo-44740: Replaced occurrences of uppercase "Web" and "Internet" with - lowercase versions per the 2016 revised Associated Press Style Book. - -- bpo-44693: Update the definition of __future__ in the glossary by - replacing the confusing word "pseudo-module" with a more accurate - description. - -- bpo-35183: Add typical examples to os.path.splitext docs - -- bpo-30511: Clarify that :func:`shutil.make_archive` is not thread-safe due - to reliance on changing the current working directory. - -- bpo-44561: Update of three expired hyperlinks in - Doc/distributing/index.rst: "Project structure", "Building and packaging - the project", and "Uploading the project to the Python Packaging Index". - -- bpo-44651: Delete entry "coercion" in Doc/glossary.rst for its outdated - definition. - -- bpo-42958: Updated the docstring and docs of :func:`filecmp.cmp` to be - more accurate and less confusing especially in respect to *shallow* arg. - -- bpo-44631: Refactored the ``repr()`` code of the ``_Environ`` (os module). - -- bpo-44613: importlib.metadata is no longer provisional. - -- bpo-44558: Match the docstring and python implementation of - :func:`~operator.countOf` to the behavior of its c implementation. - -- bpo-44544: List all kwargs for :func:`textwrap.wrap`, - :func:`textwrap.fill`, and :func:`textwrap.shorten`. Now, there are nav - links to attributes of :class:`TextWrap`, which makes navigation much - easier while minimizing duplication in the documentation. - -- bpo-38062: Clarify that atexit uses equality comparisons internally. - -- bpo-40620: Convert examples in tutorial controlflow.rst section 4.3 to be - interpreter-demo style. - -- bpo-43066: Added a warning to :mod:`zipfile` docs: filename arg with a - leading slash may cause archive to be un-openable on Windows systems. - -- bpo-39452: Rewrote ``Doc/library/__main__.rst``. Broadened scope of the - document to explicitly discuss and differentiate between ``__main__.py`` - in packages versus the ``__name__ == '__main__'`` expression (and the - idioms that surround it). - -- bpo-13814: In the Design FAQ, answer "Why don't generators support the - with statement?" - -- bpo-27752: Documentation of csv.Dialect is more descriptive. - -- bpo-44453: Fix documentation for the return type of - :func:`sysconfig.get_path`. - -- bpo-44392: Added a new section in the C API documentation for types used - in type hinting. Documented ``Py_GenericAlias`` and - ``Py_GenericAliasType``. - -- bpo-38291: Mark ``typing.io`` and ``typing.re`` as deprecated since Python - 3.8 in the documentation. They were never properly supported by type - checkers. - -- bpo-44322: Document that SyntaxError args have a details tuple and that - details are adjusted for errors in f-string field replacement expressions. - -- bpo-42392: Document the deprecation and removal of the ``loop`` parameter - for many functions and classes in :mod:`asyncio`. - -- bpo-44195: Corrected references to ``TraversableResources`` in docs. There - is no ``TraversableReader``. - -- bpo-41963: Document that ``ConfigParser`` strips off comments when reading - configuration files. - -- bpo-44072: Correct where in the numeric ABC hierarchy ``**`` support is - added, i.e., in numbers.Complex, not numbers.Integral. - -- bpo-43558: Add the remark to :mod:`dataclasses` documentation that the - :meth:`__init__` of any base class has to be called in - :meth:`__post_init__`, along with a code example. - -- bpo-44025: Clarify when '_' in match statements is a keyword, and when - not. - -- bpo-41706: Fix docs about how methods like ``__add__`` are invoked when - evaluating operator expressions. - -- bpo-41621: Document that :class:`collections.defaultdict` parameter - ``default_factory`` defaults to ``None`` and is positional-only. - -- bpo-41576: document BaseException in favor of bare except - -- bpo-21760: The description for __file__ fixed. Patch by Furkan Onder - -- bpo-39498: Add a "Security Considerations" index which links to standard - library modules that have explicitly documented security considerations. - -- bpo-33479: Remove the unqualified claim that tkinter is threadsafe. It has - not been true for several years and likely never was. An explanation of - what is true may be added later, after more discussion, and possibly after - patching _tkinter.c, - -Tests ------ - -- bpo-40173: Fix :func:`test.support.import_helper.import_fresh_module`. - -- bpo-45280: Add a test case for empty :class:`typing.NamedTuple`. - -- bpo-45269: Cover case when invalid ``markers`` type is supplied to - ``c_make_encoder``. - -- bpo-45128: Fix ``test_multiprocessing_fork`` failure due to - ``test_logging`` and ``sys.modules`` manipulation. - -- bpo-45209: Fix ``UserWarning: resource_tracker`` warning in - ``_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination`` - -- bpo-45185: Enables ``TestEnumerations`` test cases in ``test_ssl`` suite. - -- bpo-45195: Fix test_readline.test_nonascii(): sometimes, the newline - character is not written at the end, so don't expect it in the output. - Patch by Victor Stinner. - -- bpo-45156: Fixes infinite loop on :func:`unittest.mock.seal` of mocks - created by :func:`~unittest.create_autospec`. - -- bpo-45125: Improves pickling tests and docs of ``SharedMemory`` and - ``SharableList`` objects. - -- bpo-44860: Update ``test_sysconfig.test_user_similar()`` for the - posix_user scheme: ``platlib`` doesn't use :data:`sys.platlibdir`. Patch - by Victor Stinner. - -- bpo-45052: ``WithProcessesTestSharedMemory.test_shared_memory_basics`` - test was ignored, because ``self.assertEqual(sms.size, sms2.size)`` line - was failing. It is now removed and test is unskipped. - - The main motivation for this line to be removed from the test is that the - ``size`` of ``SharedMemory`` is not ever guaranteed to be the same. It is - decided by the platform. - -- bpo-44895: libregrtest now clears the type cache later to reduce the risk - of false alarm when checking for reference leaks. Previously, the type - cache was cleared too early and libregrtest raised a false alarm about - reference leaks under very specific conditions. Patch by Irit Katriel and - Victor Stinner. - -- bpo-45042: Fixes that test classes decorated with - ``@hashlib_helper.requires_hashdigest`` were skipped all the time. - -- bpo-25130: Add calls of :func:`gc.collect` in tests to support PyPy. - -- bpo-45011: Made tests relying on the :mod:`!_asyncio` C extension module - optional to allow running on alternative Python implementations. Patch by - Serhiy Storchaka. - -- bpo-44949: Fix auto history tests of test_readline: sometimes, the newline - character is not written at the end, so don't expect it in the output. - -- bpo-44891: Tests were added to clarify :func:`id` is preserved when ``obj - * 1`` is used on :class:`str` and :class:`bytes` objects. Patch by Nikita - Sobolev. - -- bpo-44852: Add ability to wholesale silence DeprecationWarnings while - running the regression test suite. - -- bpo-40928: Notify users running test_decimal regression tests on macOS of - potential harmless "malloc can't allocate region" messages spewed by - test_decimal. - -- bpo-44734: Fixed floating-point precision issue in turtle tests. - -- bpo-44708: Regression tests, when run with -w, are now re-running only the - affected test methods instead of re-running the entire test file. - -- bpo-42095: Added interop tests for Apple plists: generate plist files with - Python plistlib and parse with Apple plutil; and the other way round. - -- bpo-44647: Added a permanent Unicode-valued environment variable to - regression tests to ensure they handle this use case in the future. If - your test environment breaks because of that, report a bug to us, and - temporarily set PYTHONREGRTEST_UNICODE_GUARD=0 in your test environment. - -- bpo-44515: Adjust recently added contextlib tests to avoid assuming the - use of a refcounted GC - -- bpo-44287: Fix asyncio test_popen() of test_windows_utils by using a - longer timeout. Use military grade battle-tested - :data:`test.support.SHORT_TIMEOUT` timeout rather than a hardcoded timeout - of 10 seconds: it's 30 seconds by default, but it is made longer on slow - buildbots. Patch by Victor Stinner. - -- bpo-44451: Reset ``DeprecationWarning`` filters in - ``test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index`` - to avoid ``StopIteration`` error if ``DeprecationWarnings`` are ignored. - -- bpo-44363: Account for address sanitizer in test_capi. test_capi now - passes when run GCC address sanitizer. - -- bpo-44364: Add non integral tests for :func:`math.sqrt` function. - -- bpo-43921: Fix test_ssl.test_wrong_cert_tls13(): use - ``suppress_ragged_eofs=False``, since ``read()`` can raise - :exc:`ssl.SSLEOFError` on Windows. Patch by Victor Stinner. - -- bpo-43921: Fix test_pha_required_nocert() of test_ssl: catch two more EOF - cases (when the ``recv()`` method returns an empty string). Patch by - Victor Stinner. - -- bpo-44131: Add test_frozenmain to test_embed to test the - :c:func:`Py_FrozenMain` C function. Patch by Victor Stinner. - -- bpo-31904: Ignore error string case in test_file_not_exists(). - -- bpo-42083: Add test to check that ``PyStructSequence_NewType`` accepts a - ``PyStructSequence_Desc`` with ``doc`` field set to ``NULL``. - -- bpo-35753: Fix crash in doctest when doctest parses modules that include - unwrappable functions by skipping those functions. - -- bpo-30256: Add test for nested queues when using ``multiprocessing`` - shared objects ``AutoProxy[Queue]`` inside ``ListProxy`` and ``DictProxy`` - -Build ------ - -- bpo-45220: Avoid building with the Windows 11 SDK previews automatically. - This may be overridden by setting the ``DefaultWindowsSDKVersion`` - environment variable before building. - -- bpo-45020: Freeze stdlib modules that are imported during startup. This - provides significant performance improvements to startup. If necessary, - use the previously added "-X frozen_modules=off" commandline option to - force importing the source modules. - -- bpo-45188: Windows builds now regenerate frozen modules as the first part - of the build. Previously the regeneration was later in the build, which - would require it to be restarted if any modules had changed. - -- bpo-45163: Fixes Haiku platform build. - -- bpo-45067: The ncurses function extended_color_content was introduced in - 2017 - - (https://invisible-island.net/ncurses/NEWS.html#index-t20170401). The - - ncurses-devel package in CentOS 7 had a older version ncurses resulted in - compilation error. For compiling ncurses with extended color support, we - verify the version of the ncurses library >= 20170401. - -- bpo-45019: Generate lines in relevant files for frozen modules. Up until - now each of the files had to be edited manually. This change makes it - easier to add to and modify the frozen modules. - -- bpo-44340: Add support for building with clang thin lto via - --with-lto=thin/full. Patch by Donghee Na and Brett Holman. - -- bpo-44535: Enable building using a Visual Studio 2022 install on Windows. - -- bpo-43298: Improved error message when building without a Windows SDK - installed. - -- bpo-44381: The Windows build now accepts :envvar:`EnableControlFlowGuard` - set to ``guard`` to enable CFG. - -- bpo-41282: Fix broken ``make install`` that caused standard library - extension modules to be unnecessarily and incorrectly rebuilt during the - install phase of cpython. - -Windows -------- - -- bpo-45375: Fixes an assertion failure due to searching for the standard - library in unnormalised paths. - -- bpo-45022: Update Windows release to include libffi 3.4.2 - -- bpo-45007: Update to OpenSSL 1.1.1l in Windows build - -- bpo-44848: Upgrade Windows installer to use SQLite 3.36.0. - -- bpo-44572: Avoid consuming standard input in the :mod:`platform` module - -- bpo-44582: Accelerate speed of :mod:`mimetypes` initialization using a - native implementation of the registry scan. - -- bpo-41299: Fix 16 milliseconds jitter when using timeouts in - :mod:`threading`, such as with :meth:`threading.Lock.acquire` or - :meth:`threading.Condition.wait`. - -- bpo-42686: Build :mod:`sqlite3` with math functions enabled. Patch by - Erlend E. Aasland. - -- bpo-40263: This is a follow-on bug from - https://bugs.python.org/issue26903. Once that is applied we run into an - off-by-one assertion problem. The assert was not correct. - -macOS ------ - -- bpo-45007: Update macOS installer builds to use OpenSSL 1.1.1l. - -- bpo-34602: When building CPython on macOS with ``./configure - --with-undefined-behavior-sanitizer --with-pydebug``, the stack size is - now quadrupled to allow for the entire test suite to pass. - -- bpo-44848: Update macOS installer to use SQLite 3.36.0. - -- bpo-44689: :meth:`ctypes.util.find_library` now works correctly on macOS - 11 Big Sur even if Python is built on an older version of macOS. - Previously, when built on older macOS systems, ``find_library`` was not - able to find macOS system libraries when running on Big Sur due to - changes in how system libraries are stored. - -- bpo-41972: The framework build's user header path in sysconfig is changed - to add a 'pythonX.Y' component to match distutils's behavior. - -- bpo-43109: Allow --with-lto configure option to work with Apple-supplied - Xcode or Command Line Tools. - -- bpo-34932: Add socket.TCP_KEEPALIVE support for macOS. Patch by Shane - Harvey. - -IDLE ----- - -- bpo-45296: On Windows, change exit/quit message to suggest Ctrl-D, which - works, instead of <Ctrl-Z Return>, which does not work in IDLE. - -- bpo-45193: Make completion boxes appear on Ubuntu again. - -- bpo-40128: Mostly fix completions on macOS when not using tcl/tk 8.6.11 - (as with 3.9). The added update_idletask call should be harmless and - possibly helpful otherwise. - -- bpo-33962: Move the indent space setting from the Font tab to the new - Windows tab. Patch by Mark Roseman and Terry Jan Reedy. - -- bpo-40468: Split the settings dialog General tab into Windows and Shell/ED - tabs. Move help sources, which extend the Help menu, to the Extensions - tab. Make space for new options and shorten the dialog. The latter makes - the dialog better fit small screens. - -- bpo-41611: Avoid uncaught exceptions in - ``AutoCompleteWindow.winconfig_event()``. - -- bpo-41611: Fix IDLE sometimes freezing upon tab-completion on macOS. - -- bpo-44010: Highlight the new :ref:`match <match>` statement's :ref:`soft - keywords <soft-keywords>`: :keyword:`match`, :keyword:`case <match>`, and - :keyword:`_ <wildcard-patterns>`. However, this highlighting is not - perfect and will be incorrect in some rare cases, including some ``_``-s - in ``case`` patterns. - -- bpo-44026: Include interpreter's typo fix suggestions in message line for - NameErrors and AttributeErrors. Patch by E. Paine. - -Tools/Demos ------------ - -- bpo-44786: Fix a warning in regular expression in the c-analyzer script. - -- bpo-44967: pydoc now returns a non-zero status code when a module cannot - be found. - -- bpo-44978: Allow the Argument Clinic tool to handle ``__complex__`` - special methods. - -- bpo-43425: Removed the 'test2to3' demo project that demonstrated using - lib2to3 to support Python 2.x and Python 3.x from a single source in a - distutils package. Patch by Donghee Na - -- bpo-44074: Make patchcheck automatically detect the correct base branch - name (previously it was hardcoded to 'master') - -- bpo-20291: Added support for variadic positional parameters in Argument - Clinic. - -C API ------ - -- bpo-41710: The PyThread_acquire_lock_timed() function now clamps the - timeout if it is too large, rather than aborting the process. Patch by - Victor Stinner. - -- bpo-44687: :meth:`BufferedReader.peek` no longer raises :exc:`ValueError` - when the entire file has already been buffered. - -- bpo-45116: Add the :c:macro:`Py_ALWAYS_INLINE` macro to ask the compiler - to always inline a static inline function. The compiler can ignore it and - decides to not inline the function. Patch by Victor Stinner. - -- bpo-45094: Add the :c:macro:`Py_NO_INLINE` macro to disable inlining on a - function. Patch by Victor Stinner. - -- bpo-45061: Add a deallocator to the :class:`bool` type to detect refcount - bugs in C extensions which call ``Py_DECREF(Py_True);`` or - ``Py_DECREF(Py_False);`` by mistake. Patch by Victor Stinner. - -- bpo-42035: Add a new :c:func:`PyType_GetQualName` function to get type's - qualified name. - -- bpo-41103: Reverts removal of the old buffer protocol because they are - part of stable ABI. - -- bpo-44751: Remove ``crypt.h`` include from the public ``Python.h`` header. - -- bpo-42747: The ``Py_TPFLAGS_HAVE_VERSION_TAG`` type flag now does nothing. - The ``Py_TPFLAGS_HAVE_AM_SEND`` flag (which was added in 3.10) is removed. - Both were unnecessary because it is not possible to have type objects with - the relevant fields missing. - -- bpo-44530: Added the ``co_qualname`` to the ``PyCodeObject`` structure to - propagate the qualified name from the compiler to code objects. - - Patch by Gabriele N. Tornetta - -- bpo-44441: :c:func:`Py_RunMain` now resets :c:data:`PyImport_Inittab` to - its initial value at exit. It must be possible to call - :c:func:`PyImport_AppendInittab` or :c:func:`PyImport_ExtendInittab` at - each Python initialization. Patch by Victor Stinner. - -- bpo-39947: Remove 4 private trashcan C API functions which were only kept - for the backward compatibility of the stable ABI with Python 3.8 and - older, since the trashcan API was not usable with the limited C API on - Python 3.8 and older. The trashcan API was excluded from the limited C API - in Python 3.9. - - Removed functions: - - * _PyTrash_deposit_object() - * _PyTrash_destroy_chain() - * _PyTrash_thread_deposit_object() - * _PyTrash_thread_destroy_chain() - - The trashcan C API was never usable with the limited C API, since old - trashcan macros accessed directly :c:type:`PyThreadState` members like - ``_tstate->trash_delete_nesting``, whereas the :c:type:`PyThreadState` - structure is opaque in the limited C API. - - Exclude also the ``PyTrash_UNWIND_LEVEL`` constant from the C API. - - Patch by Victor Stinner. - -- bpo-40939: Removed documentation for the removed ``PyParser_*`` C API. - -- bpo-43795: The list in :ref:`limited-api-list` now shows the public name - :c:struct:`PyFrameObject` rather than ``_frame``. The non-existing entry - ``_node`` no longer appears in the list. - -- bpo-44378: :c:func:`Py_IS_TYPE` no longer uses :c:func:`Py_TYPE` to avoid - a compiler warning: no longer cast ``const PyObject*`` to ``PyObject*``. - Patch by Victor Stinner. - -- bpo-39573: Convert the :c:func:`Py_TYPE` and :c:func:`Py_SIZE` macros to - static inline functions. The :c:func:`Py_SET_TYPE` and - :c:func:`Py_SET_SIZE` functions must now be used to set an object type and - size. Patch by Victor Stinner. - -- bpo-44263: The :c:func:`PyType_Ready` function now raises an error if a - type is defined with the :c:macro:`Py_TPFLAGS_HAVE_GC` flag set but has no - traverse function (:c:member:`PyTypeObject.tp_traverse`). Patch by Victor - Stinner. - -- bpo-43795: The undocumented function :c:func:`Py_FrozenMain` is removed - from the Limited API. - -- bpo-44113: Deprecate the following functions to configure the Python - initialization: - - * :c:func:`!PySys_AddWarnOptionUnicode` - * :c:func:`!PySys_AddWarnOption` - * :c:func:`!PySys_AddXOption` - * :c:func:`!PySys_HasWarnOptions` - * :c:func:`!Py_SetPath` - * :c:func:`!Py_SetProgramName` - * :c:func:`!Py_SetPythonHome` - * :c:func:`!Py_SetStandardStreamEncoding` - * :c:func:`!_Py_SetProgramFullPath` - - Use the new :c:type:`PyConfig` API of the :ref:`Python Initialization - Configuration <init-config>` instead (:pep:`587`). - -- bpo-44094: Remove ``PyErr_SetFromErrnoWithUnicodeFilename()``, - ``PyErr_SetFromWindowsErrWithUnicodeFilename()``, and - ``PyErr_SetExcFromWindowsErrWithUnicodeFilename()``. They are not - documented and have been deprecated since Python 3.3. - -- bpo-43795: :c:func:`PyCodec_Unregister` is now properly exported as a - function in the Windows Stable ABI DLL. - -- bpo-44029: Remove deprecated ``Py_UNICODE`` APIs: ``PyUnicode_Encode``, - ``PyUnicode_EncodeUTF7``, ``PyUnicode_EncodeUTF8``, - ``PyUnicode_EncodeUTF16``, ``PyUnicode_EncodeUTF32``, - ``PyUnicode_EncodeLatin1``, ``PyUnicode_EncodeMBCS``, - ``PyUnicode_EncodeDecimal``, ``PyUnicode_EncodeRawUnicodeEscape``, - ``PyUnicode_EncodeCharmap``, ``PyUnicode_EncodeUnicodeEscape``, - ``PyUnicode_TransformDecimalToASCII``, ``PyUnicode_TranslateCharmap``, - ``PyUnicodeEncodeError_Create``, ``PyUnicodeTranslateError_Create``. See - :pep:`393` and :pep:`624` for reference. - -- bpo-42035: Add a new :c:func:`PyType_GetName` function to get type's short - name. - - -What's New in Python 3.10.0 beta 1? -=================================== - -*Release date: 2021-05-03* - -Security --------- - -- bpo-43434: Creating :class:`sqlite3.Connection` objects now also produces - ``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events - <auditing>`. Previously these events were only produced by - :func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. - -- bpo-43998: The :mod:`ssl` module sets more secure cipher suites defaults. - Ciphers without forward secrecy and with SHA-1 MAC are disabled by - default. Security level 2 prohibits weak RSA, DH, and ECC keys with less - than 112 bits of security. :class:`~ssl.SSLContext` defaults to minimum - protocol version TLS 1.2. Settings are based on Hynek Schlawack's - research. - -- bpo-43882: The presence of newline or tab characters in parts of a URL - could allow some forms of attacks. - - Following the controlling specification for URLs defined by WHATWG - :func:`urllib.parse` now removes ASCII newlines and tabs from URLs, - preventing such attacks. - -- bpo-43472: Ensures interpreter-level audit hooks receive the - ``cpython.PyInterpreterState_New`` event when called through the - ``_xxsubinterpreters`` module. - -- bpo-43362: Fix invalid free in _sha3 module. The issue was introduced in - 3.10.0a1. Python 3.9 and earlier are not affected. - -- bpo-43762: Add audit events for :func:`sqlite3.connect/handle`, - :meth:`sqlite3.Connection.enable_load_extension`, and - :meth:`sqlite3.Connection.load_extension`. Patch by Erlend E. Aasland. - -- bpo-43756: Add new audit event ``glob.glob/2`` to incorporate the new - *root_dir* and *dir_fd* arguments added to :func:`glob.glob` and - :func:`glob.iglob`. - -- bpo-36384: :mod:`ipaddress` module no longer accepts any leading zeros in - IPv4 address strings. Leading zeros are ambiguous and interpreted as octal - notation by some libraries. For example the legacy function - :func:`socket.inet_aton` treats leading zeros as octal notation. glibc - implementation of modern :func:`~socket.inet_pton` does not accept any - leading zeros. For a while the :mod:`ipaddress` module used to accept - ambiguous leading zeros. - -- bpo-43075: Fix Regular Expression Denial of Service (ReDoS) vulnerability - in :class:`urllib.request.AbstractBasicAuthHandler`. The ReDoS-vulnerable - regex has quadratic worst-case complexity and it allows cause a denial of - service when identifying crafted invalid RFCs. This ReDoS issue is on the - client side and needs remote attackers to control the HTTP server. - -- bpo-42800: Audit hooks are now fired for frame.f_code, traceback.tb_frame, - and generator code/frame attribute access. - -- bpo-37363: Add audit events to the :mod:`http.client` module. - -Core and Builtins ------------------ - -- bpo-43977: Prevent classes being both a sequence and a mapping when - pattern matching. - -- bpo-43977: Use :c:member:`~PyTypeObject.tp_flags` on the class object to - determine if the subject is a sequence or mapping when pattern matching. - Avoids the need to import :mod:`collections.abc` when pattern matching. - -- bpo-43892: Restore proper validation of complex literal value patterns - when parsing :keyword:`!match` blocks. - -- bpo-43933: Set frame.f_lineno to the line number of the 'with' kweyword - when executing the call to ``__exit__``. - -- bpo-43933: If the current position in a frame has no line number then set - the f_lineno attribute to None, instead of -1, to conform to PEP 626. This - should not normally be possible, but might occur in some unusual - circumstances. - -- bpo-43963: Importing the :mod:`!_signal` module in a subinterpreter has no - longer side effects. - -- bpo-42739: The internal representation of line number tables is changed to - not use sentinels, and an explicit length parameter is added to the out of - process API function ``PyLineTable_InitAddressRange``. This makes the - handling of line number tables more robust in some circumstances. - -Library -------- - -- bpo-43908: Make :mod:`re` types immutable. Patch by Erlend E. Aasland. - -- bpo-43908: Make the :class:`array.array` type immutable. Patch by Erlend - E. Aasland. - -Core and Builtins ------------------ - -- bpo-43901: Change class and module objects to lazy-create empty - annotations dicts on demand. The annotations dicts are stored in the - object's __dict__ for backwards compatibility. - -- bpo-43892: Match patterns now use new dedicated AST nodes (``MatchValue``, - ``MatchSingleton``, ``MatchSequence``, ``MatchStar``, ``MatchMapping``, - ``MatchClass``) rather than reusing expression AST nodes. ``MatchAs`` and - ``MatchOr`` are now defined as pattern nodes rather than as expression - nodes. Patch by Nick Coghlan. - -- bpo-42725: Usage of ``await``/``yield``/``yield from`` and named - expressions within an annotation is now forbidden when PEP 563 is - activated. - -- bpo-43754: When performing structural pattern matching (:pep:`634`), - captured names are now left unbound until the *entire* pattern has matched - successfully. - -- bpo-42737: Annotations for complex targets (everything beside simple - names) no longer cause any runtime effects with ``from __future__ import - annotations``. - -- bpo-43914: :exc:`SyntaxError` exceptions raised by the interpreter will - highlight the full error range of the expression that constitutes the - syntax error itself, instead of just where the problem is detected. Patch - by Pablo Galindo. - -- bpo-38605: Revert making ``from __future__ import annotations`` the - default. This follows the Steering Council decision to postpone PEP 563 - changes to at least Python 3.11. See the original email for more - information regarding the decision: - https://mail.python.org/archives/list/python-dev@python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/. - Patch by Pablo Galindo. - -- bpo-43475: Hashes of NaN values now depend on object identity. Formerly, - they always hashed to 0 even though NaN values are not equal to one - another. Having the same hash for unequal values caused pile-ups in hash - tables. - -- bpo-43859: Improve the error message for :exc:`IndentationError` - exceptions. Patch by Pablo Galindo - -- bpo-41323: Constant tuple folding in bytecode optimizer now reuses tuple - in constant table. - -- bpo-43846: Data stack usage is much reduced for large literal and call - expressions. - -- bpo-38530: When printing :exc:`NameError` raised by the interpreter, - :c:func:`PyErr_Display` will offer suggestions of similar variable names - in the function that the exception was raised from. Patch by Pablo Galindo - -- bpo-43823: Improve syntax errors for invalid dictionary literals. Patch by - Pablo Galindo. - -- bpo-43822: Improve syntax errors in the parser for missing commas between - expressions. Patch by Pablo Galindo. - -- bpo-43798: :class:`ast.alias` nodes now include source location metadata - attributes e.g. lineno, col_offset. - -- bpo-43797: Improve ``SyntaxError`` error messages for invalid comparisons. - Patch by Pablo Galindo. - -- bpo-43760: Move the flag for checking whether tracing is enabled to the C - stack, from the heap. Should speed up dispatch in the interpreter. - -- bpo-43682: Static methods (:deco:`staticmethod`) and class methods - (:deco:`classmethod`) now inherit the method attributes (``__module__``, - ``__name__``, ``__qualname__``, ``__doc__``, ``__annotations__``) and have - a new ``__wrapped__`` attribute. Patch by Victor Stinner. - -- bpo-43751: Fixed a bug where ``anext(ait, default)`` would erroneously - return None. - -- bpo-42128: :data:`~object.__match_args__` is no longer allowed to be a - list. - -- bpo-43683: Add GEN_START opcode. Marks start of generator, including - async, or coroutine and handles sending values to a newly created - generator or coroutine. - -Library -------- - -- bpo-43105: Importlib now resolves relative paths when creating module spec - objects from file locations. - -Core and Builtins ------------------ - -- bpo-43682: Static methods (:deco:`staticmethod`) are now callable as - regular functions. Patch by Victor Stinner. - -- bpo-42609: Prevented crashes in the AST validator and optimizer when - compiling some absurdly long expressions like ``"+0"*1000000``. - :exc:`RecursionError` is now raised instead. - -- bpo-38530: When printing :exc:`AttributeError`, :c:func:`PyErr_Display` - will offer suggestions of similar attribute names in the object that the - exception was raised from. Patch by Pablo Galindo - -Library -------- - -- bpo-44015: In @dataclass(), raise a TypeError if KW_ONLY is specified more - than once. - -- bpo-25478: Added a *total()* method to collections.Counter() to compute - the sum of the counts. - -- bpo-43733: Change :class:`netrc.netrc` to use UTF-8 encoding before using - locale encoding. - -- bpo-43979: Removed an unnecessary list comprehension before looping from - :func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Donghee - Na. - -- bpo-43993: Update bundled pip to 21.1.1. - -- bpo-43957: [Enum] Deprecate ``TypeError`` when non-member is used in a - containment check; In 3.12 ``True`` or ``False`` will be returned instead, - and containment will return ``True`` if the value is either a member of - that enum or one of its members' value. - -- bpo-42904: For backwards compatibility with previous minor versions of - Python, if :func:`typing.get_type_hints` receives no namespace dictionary - arguments, :func:`typing.get_type_hints` will search through the global - then local namespaces during evaluation of stringized type annotations - (string forward references) inside a class. - -- bpo-43945: [Enum] Deprecate non-standard mixin format() behavior: in 3.12 - the enum member, not the member's value, will be used for format() calls. - -- bpo-41139: Deprecate undocumented ``cgi.log()`` API. - -- bpo-43937: Fixed the :mod:`turtle` module working with non-default root - window. - -- bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 - -- bpo-43907: Fix a bug in the pure-Python pickle implementation when using - protocol 5, where bytearray instances that occur several time in the - pickled object graph would incorrectly unpickle into repeated copies of - the bytearray object. - -- bpo-43926: In ``importlib.metadata``, provide a uniform interface to - ``Description``, allow for any field to be encoded with multiline values, - remove continuation lines from multiline values, and add a ``.json`` - property for easy access to the PEP 566 JSON-compatible form. Sync with - ``importlib_metadata 4.0``. - -- bpo-43920: OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` - now returns a consistent error message when cadata contains no valid - certificate. - -- bpo-43607: :mod:`urllib` can now convert Windows paths with ``\\?\`` - prefixes into URL paths. - -- bpo-43817: Add :func:`inspect.get_annotations`, which safely computes the - annotations defined on an object. It works around the quirks of accessing - the annotations from various types of objects, and makes very few - assumptions about the object passed in. :func:`inspect.get_annotations` - can also correctly un-stringize stringized annotations. - - :func:`inspect.signature`, :func:`inspect.from_callable`, and - :func:`inspect.from_function` now call :func:`inspect.get_annotations` to - retrieve annotations. This means :func:`inspect.signature` and - :func:`inspect.from_callable` can now un-stringize stringized annotations, - too. - -- bpo-43284: platform.win32_ver derives the windows version from - sys.getwindowsversion().platform_version which in turn derives the version - from kernel32.dll (which can be of a different version than Windows - itself). Therefore change the platform.win32_ver to determine the version - using the platform module's _syscmd_ver private function to return an - accurate version. - -- bpo-42854: The :mod:`ssl` module now uses ``SSL_read_ex`` and - ``SSL_write_ex`` internally. The functions support reading and writing of - data larger than 2 GB. Writing zero-length data no longer fails with a - protocol violation error. - -- bpo-42333: Port ``_ssl`` extension module to multiphase initialization. - -- bpo-43880: :mod:`ssl` now raises DeprecationWarning for OP_NO_SSL/TLS* - options, old TLS versions, old protocols, and other features that have - been deprecated since Python 3.6, 3.7, or OpenSSL 1.1.0. - -- bpo-41559: :pep:`612` is now implemented purely in Python; builtin - ``types.GenericAlias`` objects no longer include ``typing.ParamSpec`` in - ``__parameters__`` (with the exception of ``collections.abc.Callable``\ 's - ``GenericAlias``). This means previously invalid uses of ``ParamSpec`` - (such as ``list[P]``) which worked in earlier versions of Python 3.10 - alpha, will now raise ``TypeError`` during substitution. - -- bpo-43867: The :mod:`multiprocessing` ``Server`` class now explicitly - catches :exc:`SystemExit` and closes the client connection in this case. - It happens when the ``Server.serve_client()`` method reaches the end of - file (EOF). - -- bpo-40443: Remove unused imports: pyclbr no longer uses copy, and typing - no longer uses ast. Patch by Victor Stinner. - -- bpo-43820: Remove an unneeded copy of the namespace passed to - dataclasses.make_dataclass(). - -- bpo-43787: Add ``__iter__()`` method to :class:`bz2.BZ2File`, - :class:`gzip.GzipFile`, and :class:`lzma.LZMAFile`. It makes iterating - them about 2x faster. Patch by Inada Naoki. - -- bpo-43680: Deprecate io.OpenWrapper and _pyio.OpenWrapper: use io.open and - _pyio.open instead. Until Python 3.9, _pyio.open was not a static method - and builtins.open was set to OpenWrapper to not become a bound method when - set to a class variable. _io.open is a built-in function whereas - _pyio.open is a Python function. In Python 3.10, _pyio.open() is now a - static method, and builtins.open() is now io.open(). - -- bpo-43680: The Python :func:`!_pyio.open` function becomes a static method - to behave as :func:`io.open` built-in function: don't become a bound - method when stored as a class variable. It becomes possible since static - methods are now callable in Python 3.10. Moreover, - :func:`!_pyio.OpenWrapper` becomes a simple alias to :func:`!_pyio.open`. - Patch by Victor Stinner. - -- bpo-41515: Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due - to synthetic modules that don't appear in ``sys.modules``. - -- bpo-43776: When :class:`subprocess.Popen` args are provided as a string or - as :class:`pathlib.Path`, the Popen instance repr now shows the right - thing. - -- bpo-42248: [Enum] ensure exceptions raised in ``_missing__`` are released - -- bpo-43744: fix issue with enum member name matching the start of a private - variable name - -- bpo-43772: Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle - Zijlstra. - -- bpo-43764: Add match_args parameter to @dataclass decorator to allow - suppression of __match_args__ generation. - -- bpo-43799: OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress - deprecation warnings. Python requires OpenSSL 1.1.1 APIs. - -- bpo-43478: Mocks can no longer be used as the specs for other Mocks. As a - result, an already-mocked object cannot have an attribute mocked using - ``autospec=True`` or be the subject of a ``create_autospec(...)`` call. - This can uncover bugs in tests since these Mock-derived Mocks will always - pass certain tests (e.g. :func:`isinstance`) and builtin assert functions - (e.g. assert_called_once_with) will unconditionally pass. - -- bpo-43794: Add :const:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL - 3.0.0) - -- bpo-43785: Improve ``bz2.BZ2File`` performance by removing the RLock from - BZ2File. This makes BZ2File thread unsafe in the face of multiple - simultaneous readers or writers, just like its equivalent classes in - :mod:`gzip` and :mod:`lzma` have always been. Patch by Inada Naoki. - -- bpo-43789: OpenSSL 3.0.0: Don't call the password callback function a - second time when first call has signaled an error condition. - -- bpo-43788: The header files for :mod:`ssl` error codes are now OpenSSL - version-specific. Exceptions will now show correct reason and library - codes. The ``make_ssl_data.py`` script has been rewritten to use OpenSSL's - text file with error codes. - -- bpo-43766: Implement :pep:`647` in the :mod:`typing` module by adding - :data:`TypeGuard`. - -- bpo-25264: :func:`os.path.realpath` now accepts a *strict* keyword-only - argument. When set to ``True``, :exc:`OSError` is raised if a path doesn't - exist or a symlink loop is encountered. - -- bpo-43780: In ``importlib.metadata``, incorporate changes from - importlib_metadata 3.10: Add mtime-based caching during distribution - discovery. Flagged use of dict result from ``entry_points()`` as - deprecated. - -- gh-47383: The ``P.args`` and ``P.kwargs`` attributes of - :class:`typing.ParamSpec` are now instances of the new classes - :class:`typing.ParamSpecArgs` and :class:`typing.ParamSpecKwargs`, which - enables a more useful ``repr()``. Patch by Jelle Zijlstra. - -- bpo-43731: Add an ``encoding`` parameter :func:`logging.fileConfig`. - -- bpo-43712: Add ``encoding`` and ``errors`` parameters to - :func:`fileinput.input` and :class:`fileinput.FileInput`. - -- bpo-38659: A ``simple_enum`` decorator is added to the ``enum`` module to - convert a normal class into an Enum. ``test_simple_enum`` added to test - simple enums against a corresponding normal Enum. Standard library - modules updated to use ``simple_enum``. - -- bpo-43764: Fix an issue where :data:`~object.__match_args__` generation - could fail for some :mod:`dataclasses`. - -- bpo-43752: Fix :mod:`sqlite3` regression for zero-sized blobs with - converters, where ``b""`` was returned instead of ``None``. The regression - was introduced by PR 24723. Patch by Erlend E. Aasland. - -- bpo-43655: :mod:`tkinter` dialog windows are now recognized as dialogs by - window managers on macOS and X Window. - -- bpo-43723: The following ``threading`` methods are now deprecated and - should be replaced: - - - ``currentThread`` => :func:`threading.current_thread` - - - ``activeCount`` => :func:`threading.active_count` - - - ``Condition.notifyAll`` => :meth:`threading.Condition.notify_all` - - - ``Event.isSet`` => :meth:`threading.Event.is_set` - - - ``Thread.setName`` => :attr:`threading.Thread.name` - - - ``thread.getName`` => :attr:`threading.Thread.name` - - - ``Thread.isDaemon`` => :attr:`threading.Thread.daemon` - - - ``Thread.setDaemon`` => :attr:`threading.Thread.daemon` - - Patch by Jelle Zijlstra. - -- bpo-2135: Deprecate find_module() and find_loader() implementations in - importlib and zipimport. - -- bpo-43534: :func:`turtle.textinput` and :func:`turtle.numinput` create now - a transient window working on behalf of the canvas window. - -- bpo-43532: Add the ability to specify keyword-only fields to dataclasses. - These fields will become keyword-only arguments to the generated __init__. - -- bpo-43522: Fix problem with - :attr:`~ssl.SSLContext.hostname_checks_common_name`. OpenSSL does not copy - hostflags from *struct SSL_CTX* to *struct SSL*. - -- bpo-8978: Improve error message for :func:`tarfile.open` when :mod:`lzma` - / :mod:`bz2` are unavailable. Patch by Anthony Sottile. - -- bpo-42967: Allow :class:`bytes` ``separator`` argument in - ``urllib.parse.parse_qs`` and ``urllib.parse.parse_qsl`` when parsing - :class:`str` query strings. Previously, this raised a ``TypeError``. - -- bpo-43296: Improve :mod:`sqlite3` error handling: ``sqlite3_value_blob()`` - errors that set ``SQLITE_NOMEM`` now raise :exc:`MemoryError`. Patch by - Erlend E. Aasland. - -- bpo-43312: New functions :func:`sysconfig.get_preferred_scheme` and - :func:`sysconfig.get_default_scheme` are added to query a platform for its - preferred "user", "home", and "prefix" (default) scheme names. - -- bpo-43265: Improve :meth:`sqlite3.Connection.backup` error handling. The - error message for non-existent target database names is now ``unknown - database <database name>`` instead of ``SQL logic error``. Patch by Erlend - E. Aasland. - -- bpo-41282: Install schemes in ``distutils.command.install`` are now loaded - from :mod:`sysconfig`. - -- bpo-41282: ``distutils.sysconfig`` has been merged to :mod:`sysconfig`. - -- bpo-43176: Fixed processing of a dataclass that inherits from a frozen - dataclass with no fields. It is now correctly detected as an error. - -- bpo-43080: :mod:`pprint` now has support for - :class:`dataclasses.dataclass`. Patch by Lewis Gaul. - -- bpo-39950: Add ``pathlib.Path.hardlink_to()`` method that supersedes - ``link_to()``. The new method has the same argument order as - ``symlink_to()``. - -- bpo-42904: :func:`typing.get_type_hints` now checks the local namespace of - a class when evaluating :pep:`563` annotations inside said class. - -- bpo-42269: Add ``slots`` parameter to ``dataclasses.dataclass`` decorator - to automatically generate ``__slots__`` for class. Patch provided by Yurii - Karabas. - -- bpo-39529: Deprecated use of :func:`asyncio.get_event_loop` without - running event loop. Emit deprecation warning for :mod:`asyncio` functions - which implicitly create a :class:`~asyncio.Future` or - :class:`~asyncio.Task` objects if there is no running event loop and no - explicit *loop* argument is passed: :func:`~asyncio.ensure_future`, - :func:`~asyncio.wrap_future`, :func:`~asyncio.gather`, - :func:`~asyncio.shield`, :func:`~asyncio.as_completed` and constructors of - :class:`~asyncio.Future`, :class:`~asyncio.Task`, - :class:`~asyncio.StreamReader`, :class:`~asyncio.StreamReaderProtocol`. - -- bpo-18369: Certificate and PrivateKey classes were added to the ssl - module. Certificates and keys can now be loaded from memory buffer, too. - -- bpo-41486: Use a new output buffer management code for :mod:`bz2` / - :mod:`lzma` / :mod:`zlib` modules, and add ``.readall()`` function to - ``_compression.DecompressReader`` class. These bring some performance - improvements. Patch by Ma Lin. - -- bpo-31870: The :func:`ssl.get_server_certificate` function now has a - *timeout* parameter. - -- bpo-41735: Fix thread locks in zlib module may go wrong in rare case. - Patch by Ma Lin. - -- bpo-36470: Fix dataclasses with ``InitVar``\s and - :func:`~dataclasses.replace`. Patch by Claudiu Popa. - -- bpo-40849: Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag - -- bpo-35114: :func:`ssl.RAND_status` now returns a boolean value (as - documented) instead of ``1`` or ``0``. - -- bpo-39906: :meth:`pathlib.Path.stat` and :meth:`~pathlib.Path.chmod` now - accept a *follow_symlinks* keyword-only argument for consistency with - corresponding functions in the :mod:`os` module. - -- bpo-39899: :func:`os.path.expanduser` now refuses to guess Windows home - directories if the basename of current user's home directory does not - match their username. - - :meth:`pathlib.Path.expanduser` and :meth:`~pathlib.Path.home` now - consistently raise :exc:`RuntimeError` exception when a home directory - cannot be resolved. Previously a :exc:`KeyError` exception could be raised - on Windows when the ``"USERNAME"`` environment variable was unset. - -- bpo-36076: Added SNI support to :func:`ssl.get_server_certificate`. - -- bpo-38490: Covariance, Pearson's correlation, and simple linear regression - functionality was added to statistics module. Patch by Tymoteusz Wołodźko. - -- bpo-33731: Provide a locale.localize() function, which converts a - normalized number string into a locale format. - -- bpo-32745: Fix a regression in the handling of ctypes' - :data:`ctypes.c_wchar_p` type: embedded null characters would cause a - :exc:`ValueError` to be raised. Patch by Zackery Spytz. - -Documentation -------------- - -- bpo-43987: Add "Annotations Best Practices" document as a new HOWTO. - -- bpo-43977: Document the new :c:macro:`Py_TPFLAGS_MAPPING` and - :c:macro:`Py_TPFLAGS_SEQUENCE` type flags. - -- bpo-43959: The documentation on the PyContextVar C-API was clarified. - -- bpo-43938: Update dataclasses documentation to express that - FrozenInstanceError is derived from AttributeError. - -- bpo-43778: Fix the Sphinx glossary_search extension: create the _static/ - sub-directory if it doesn't exist. - -- bpo-43755: Update documentation to reflect that unparenthesized lambda - expressions can no longer be the expression part in an ``if`` clause in - comprehensions and generator expressions since Python 3.9. - -- bpo-43739: Fixing the example code in Doc/extending/extending.rst to - declare and initialize the pmodule variable to be of the right type. - -Tests ------ - -- bpo-43961: Fix test_logging.test_namer_rotator_inheritance() on Windows: - use :func:`os.replace` rather than :func:`os.rename`. Patch by Victor - Stinner. - -- bpo-43842: Fix a race condition in the SMTP test of test_logging. Don't - close a file descriptor (socket) from a different thread while - asyncore.loop() is polling the file descriptor. Patch by Victor Stinner. - -- bpo-43843: :mod:`test.libregrtest` now marks a test as ENV_CHANGED - (altered the execution environment) if a thread raises an exception but - does not catch it. It sets a hook on :func:`threading.excepthook`. Use - ``--fail-env-changed`` option to mark the test as failed. Patch by Victor - Stinner. - -- bpo-43811: Tests multiple OpenSSL versions on GitHub Actions. Use ccache - to speed up testing. - -- bpo-43791: OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and - 1.1. Tests are failing with TLSV1_ALERT_INTERNAL_ERROR. - -Build ------ - -- bpo-43567: Improved generated code refresh (AST/tokens/opcodes/keywords) - on Windows. - -- bpo-43669: Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or - newer. - -Windows -------- - -- bpo-35306: Adds additional arguments to :func:`os.startfile` function. - -- bpo-43538: Avoid raising errors from :meth:`pathlib.Path.exists` when - passed an invalid filename. - -- bpo-38822: Fixed :func:`os.stat` failing on inaccessible directories with - a trailing slash, rather than falling back to the parent directory's - metadata. This implicitly affected :func:`os.path.exists` and - :func:`os.path.isdir`. - -- bpo-26227: Fixed decoding of host names in :func:`socket.gethostbyaddr` - and :func:`socket.gethostbyname_ex`. - -- bpo-40432: Updated pegen regeneration script on Windows to find and use - Python 3.8 or higher. Prior to this, pegen regeneration already required - 3.8 or higher, but the script may have used lower versions of Python. - -- bpo-43745: Actually updates Windows release to OpenSSL 1.1.1k. Earlier - releases were mislabelled and actually included 1.1.1i again. - -- bpo-43652: Update Tcl and Tk to 8.6.11 in Windows installer. - -- bpo-43492: Upgrade Windows installer to use SQLite 3.35.5. - -- bpo-30555: Fix ``WindowsConsoleIO`` errors in the presence of fd - redirection. Patch by Segev Finer. - -macOS ------ - -- bpo-42119: Fix check for macOS SDK paths when building Python. Narrow - search to match contents of SDKs, namely only files in - ``/System/Library``, ``/System/IOSSupport``, and ``/usr`` other than - ``/usr/local``. Previously, anything under ``/System`` was assumed to be - in an SDK which causes problems with the new file system layout in 10.15+ - where user file systems may appear to be mounted under ``/System``. Paths - in ``/Library`` were also incorrectly treated as SDK locations. - -- bpo-43568: Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 - -- bpo-44009: Provide "python3.x-intel64" executable to allow reliably - forcing macOS universal2 framework builds to run under Rosetta 2 Intel-64 - emulation on Apple Silicon Macs. This can be useful for testing or when - universal2 wheels are not yet available. - -- bpo-43851: Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by - Erlend E. Aasland. - -- bpo-43492: Update macOS installer to use SQLite 3.35.4. - -- bpo-42235: ``Mac/BuildScript/build-installer.py`` will now use - "--enable-optimizations" and ``--with-lto`` when building on macOS 10.15 - or later. - -IDLE ----- - -- bpo-37903: Add mouse actions to the shell sidebar. Left click and - optional drag selects one or more lines, as with the editor line number - sidebar. Right click after selecting raises a context menu with 'copy - with prompts'. This zips together prompts from the sidebar with lines - from the selected text. - -- bpo-43981: Fix reference leak in test_sidebar and test_squeezer. Patches - by Terry Jan Reedy and Pablo Galindo - -- bpo-37892: Indent IDLE Shell input with spaces instead of tabs - -- bpo-43655: IDLE dialog windows are now recognized as dialogs by window - managers on macOS and X Window. - -- bpo-37903: IDLE's shell now shows prompts in a separate side-bar. - -C API ------ - -- bpo-43916: Add a new :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type - flag to disallow creating type instances. Patch by Victor Stinner. - -- bpo-43774: Remove the now unused ``PYMALLOC_DEBUG`` macro. Debug hooks on - memory allocators are now installed by default if Python is built in debug - mode (if ``Py_DEBUG`` macro is defined). Moreover, they can now be used on - Python build in release mode (ex: using ``PYTHONMALLOC=debug`` environment - variable). - -- bpo-43962: _PyInterpreterState_IDIncref() now calls - _PyInterpreterState_IDInitref() and always increments id_refcount. - Previously, calling _xxsubinterpreters.get_current() could create an - id_refcount inconsistency when a _xxsubinterpreters.InterpreterID object - was deallocated. Patch by Victor Stinner. - -- bpo-28254: Add new C-API functions to control the state of the garbage - collector: :c:func:`PyGC_Enable()`, :c:func:`PyGC_Disable()`, - :c:func:`PyGC_IsEnabled()`, corresponding to the functions in the - :mod:`gc` module. - -- bpo-43908: Introduce :c:macro:`Py_TPFLAGS_IMMUTABLETYPE` flag for - immutable type objects, and modify :c:func:`PyType_Ready` to set it for - static types. Patch by Erlend E. Aasland. - -- bpo-43795: :c:func:`PyMem_Calloc` is now available in the limited C API - (``Py_LIMITED_API``). - -- bpo-43868: :c:func:`PyOS_ReadlineFunctionPointer` is no longer exported by - limited C API headers and by ``python3.dll`` on Windows. Like any function - that takes ``FILE*``, it is not part of the stable ABI. - -- bpo-43795: Stable ABI and limited API definitions are generated from a - central manifest (:pep:`652`). - -- bpo-43753: Add the :c:func:`Py_Is(x, y) <Py_Is>` function to test if the - *x* object is the *y* object, the same as ``x is y`` in Python. Add also - the :c:func:`Py_IsNone`, :c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` - functions to test if an object is, respectively, the ``None`` singleton, - the ``True`` singleton or the ``False`` singleton. Patch by Victor - Stinner. - - -What's New in Python 3.10.0 alpha 7? -==================================== - -*Release date: 2021-04-05* - -Security --------- - -- bpo-42988: :cve:`2021-3426`: Remove the ``getfile`` feature of the - :mod:`pydoc` module which could be abused to read arbitrary files on the - disk (directory traversal vulnerability). Moreover, even source code of - Python modules can contain sensitive data like passwords. Vulnerability - reported by David Schwörer. - -- bpo-43285: :mod:`ftplib` no longer trusts the IP address value returned - from the server in response to the PASV command by default. This prevents - a malicious FTP server from using the response to probe IPv4 address and - port combinations on the client network. - - Code that requires the former vulnerable behavior may set a - ``trust_server_pasv_ipv4_address`` attribute on their :class:`ftplib.FTP` - instances to ``True`` to re-enable it. - -- bpo-43439: Add audit hooks for :func:`gc.get_objects`, - :func:`gc.get_referrers` and :func:`gc.get_referents`. Patch by Pablo - Galindo. - -Core and Builtins ------------------ - -- bpo-27129: Update CPython bytecode magic number. - -- bpo-43672: Raise ImportWarning when calling find_loader(). - -- bpo-43660: Fix crash that happens when replacing ``sys.stderr`` with a - callable that can remove the object while an exception is being printed. - Patch by Pablo Galindo. - -- bpo-27129: The bytecode interpreter uses instruction, rather byte, offsets - internally. This reduces the number of EXTENDED_ARG instructions needed - and streamlines instruction dispatch a bit. - -Library -------- - -- bpo-40645: Fix reference leak in the :mod:`!_hashopenssl` extension. Patch - by Pablo Galindo. - -Core and Builtins ------------------ - -- bpo-42134: Calls to find_module() by the import system now raise - ImportWarning. - -- bpo-41064: Improve the syntax error for invalid usage of double starred - elements ('**') in f-strings. Patch by Pablo Galindo. - -- bpo-43575: Speed up calls to ``map()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-42137: The import system now prefers using ``__spec__`` for - ``ModuleType.__repr__`` over ``module_repr()``. - -- bpo-43452: Added micro-optimizations to ``_PyType_Lookup()`` to improve - cache lookup performance in the common case of cache hits. - -- bpo-43555: Report the column offset for :exc:`SyntaxError` for invalid - line continuation characters. Patch by Pablo Galindo. - -- bpo-43517: Fix misdetection of circular imports when using ``from pkg.mod - import attr``, which caused false positives in non-trivial multi-threaded - code. - -- bpo-43497: Emit SyntaxWarnings for assertions with tuple constants, this - is a regression introduced in python3.7 - -- bpo-39316: Tracing now has correct line numbers for attribute accesses - when the attribute is on a different line from the object. Improves - debugging and profiling for multi-line method chains. - -- bpo-35883: Python no longer fails at startup with a fatal error if a - command line argument contains an invalid Unicode character. The - :c:func:`Py_DecodeLocale` function now escapes byte sequences which would - be decoded as Unicode characters outside the [U+0000; U+10ffff] range. - -- bpo-43410: Fix a bug that was causing the parser to crash when emitting - syntax errors when reading input from stdin. Patch by Pablo Galindo - -- bpo-43406: Fix a possible race condition where ``PyErr_CheckSignals`` - tries to execute a non-Python signal handler. - -- bpo-42128: Add ``__match_args__`` to :ref:`struct sequence objects - <struct-sequence-objects>`. Patch by Pablo Galindo. - -- bpo-43390: CPython now sets the ``SA_ONSTACK`` flag in ``PyOS_setsig`` for - the VM's default signal handlers. This is friendlier to other in-process - code that an extension module or embedding use could pull in (such as - Golang's cgo) where tiny thread stacks are the norm and ``sigaltstack()`` - has been used to provide for signal handlers. This is a no-op change for - the vast majority of processes that don't use sigaltstack. - -- bpo-43287: Speed up calls to ``filter()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-37448: Add a radix tree based memory map to track in-use obmalloc - arenas. Use to replace the old implementation of address_in_range(). The - radix tree approach makes it easy to increase pool sizes beyond the OS - page size. Boosting the pool and arena size allows obmalloc to handle a - significantly higher percentage of requests from its ultra-fast paths. - - It also has the advantage of eliminating the memory unsanitary behavior of - the previous address_in_range(). The old address_in_range() was marked - with the annotations _Py_NO_SANITIZE_ADDRESS, _Py_NO_SANITIZE_THREAD, and - _Py_NO_SANITIZE_MEMORY. Those annotations are no longer needed. - - To disable the radix tree map, set a preprocessor flag as follows: - ``-DWITH_PYMALLOC_RADIX_TREE=0``. - - Co-authored-by: Tim Peters <tim.peters@gmail.com> - -- bpo-29988: Only handle asynchronous exceptions and requests to drop the - GIL when returning from a call or on the back edges of loops. Makes sure - that :meth:`~object.__exit__` is always called in with statements, even - for interrupts. - -Library -------- - -- bpo-43720: Document various stdlib deprecations in imp, pkgutil, and - importlib.util for removal in Python 3.12. - -- bpo-43433: :class:`xmlrpc.client.ServerProxy` no longer ignores query and - fragment in the URL of the server. - -- bpo-31956: The :meth:`~array.array.index` method of :class:`array.array` - now has optional *start* and *stop* parameters. - -- bpo-40066: Enum: adjust ``repr()`` to show only enum and member name (not - value, nor angle brackets) and ``str()`` to show only member name. Update - and improve documentation to match. - -- bpo-42136: Deprecate all module_repr() methods found in importlib as their - use is being phased out by Python 3.12. - -- bpo-35930: Raising an exception raised in a "future" instance will create - reference cycles. - -- bpo-41369: Finish updating the vendored libmpdec to version 2.5.1. Patch - by Stefan Krah. - -- bpo-43422: Revert the _decimal C API which was added in bpo-41324. - -- bpo-43577: Fix deadlock when using :class:`ssl.SSLContext` debug callback - with :meth:`ssl.SSLContext.sni_callback`. - -- bpo-43571: It's now possible to create MPTCP sockets with IPPROTO_MPTCP - -- bpo-43542: ``image/heic`` and ``image/heif`` were added to - :mod:`mimetypes`. - -- bpo-40645: The :mod:`hmac` module now uses OpenSSL's HMAC implementation - when digestmod argument is a hash name or builtin hash function. - -- bpo-43510: Implement :pep:`597`: Add ``EncodingWarning`` warning, ``-X - warn_default_encoding`` option, :envvar:`PYTHONWARNDEFAULTENCODING` - environment variable and ``encoding="locale"`` argument value. - -- bpo-43521: ``ast.unparse`` can now render NaNs and empty sets. - -- bpo-42914: :func:`pprint.pprint` gains a new boolean - ``underscore_numbers`` optional argument to emit integers with thousands - separated by an underscore character for improved readability (for example - ``1_000_000`` instead of ``1000000``). - -- bpo-41361: :meth:`~collections.deque.rotate` calls are now slightly faster - due to faster argument parsing. - -- bpo-43423: :func:`subprocess.communicate` no longer raises an IndexError - when there is an empty stdout or stderr IO buffer during a timeout on - Windows. - -- bpo-27820: Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN - with initial_response_ok=False will fail. - - The cause is that SMTP.auth_login _always_ returns a password if provided - with a challenge string, thus non-compliant with the standard for AUTH - LOGIN. - - Also fixes bug with the test for smtpd. - -- bpo-43445: Add frozen modules to :data:`sys.stdlib_module_names`. For - example, add ``"_frozen_importlib"`` and ``"_frozen_importlib_external"`` - names. - -- bpo-43245: Add keyword arguments support to ``ChainMap.new_child()``. - -- bpo-29982: Add optional parameter *ignore_cleanup_errors* to - :func:`tempfile.TemporaryDirectory` and allow multiple :func:`cleanup` - attempts. Contributed by C.A.M. Gerlach. - -- bpo-43428: Include changes from `importlib_metadata 3.7 - <https://importlib-metadata.readthedocs.io/en/latest/history.html#v3-7-0>`_: - - Performance enhancements to distribution discovery. - - ``entry_points`` only returns unique distributions. - - Introduces new ``EntryPoints`` object for containing a set of entry points - with convenience methods for selecting entry points by group or name. - ``entry_points`` now returns this object if selection parameters are - supplied but continues to return a dict object for compatibility. Users - are encouraged to rely on the selection interface. The dict object result - is likely to be deprecated in the future. - - Added packages_distributions function to return a mapping of packages to - the distributions that provide them. - -- bpo-43332: Improves the networking efficiency of :mod:`http.client` when - using a proxy via :meth:`~HTTPConnection.set_tunnel`. Fewer small send - calls are made during connection setup. - -- bpo-43420: Improve performance of :class:`fractions.Fraction` arithmetics - for large components. Contributed by Sergey B. Kirpichev. - -- bpo-43356: Allow passing a signal number to ``_thread.interrupt_main()``. - -- bpo-43399: Fix ``ElementTree.extend`` not working on iterators when using - the Python implementation - -- bpo-43369: Improve :mod:`sqlite3` error handling: If - ``sqlite3_column_text()`` and ``sqlite3_column_blob()`` set - ``SQLITE_NOMEM``, :exc:`MemoryError` is now raised. Patch by Erlend E. - Aasland. - -- bpo-43368: Fix a regression introduced in PR 24562, where an empty - bytestring was fetched as ``None`` instead of ``b''`` in :mod:`sqlite3`. - Patch by Mariusz Felisiak. - -- bpo-41282: Fixed stacklevel of ``DeprecationWarning`` emitted from - ``import distutils``. - -- bpo-42129: ``importlib.resources`` now honors namespace packages, merging - resources from each location in the namespace as introduced in - ``importlib_resources`` 3.2 and including incidental changes through - 5.0.3. - -- bpo-43295: :meth:`datetime.datetime.strptime` now raises ``ValueError`` - instead of ``IndexError`` when matching ``'z'`` with the ``%z`` format - specifier. - -- bpo-43125: Return empty string if base64mime.body_encode receive empty - bytes - -- bpo-43084: :func:`curses.window.enclose` returns now ``True`` or ``False`` - (as was documented) instead of ``1`` or ``0``. - -- bpo-42994: Add MIME types for opus, AAC, 3gpp and 3gpp2 - -- bpo-14678: Add an invalidate_caches() method to the zipimport.zipimporter - class to support importlib.invalidate_caches(). Patch by Desmond Cheong. - -- bpo-42782: Fail fast in :func:`shutil.move` to avoid creating destination - directories on failure. - -- bpo-40066: Enum's ``repr()`` and ``str()`` have changed: ``repr()`` is now - *EnumClass.MemberName* and ``str()`` is *MemberName*. Additionally, - stdlib Enum's whose contents are available as module attributes, such as - ``RegexFlag.IGNORECASE``, have their ``repr()`` as *module.name*, e.g. - ``re.IGNORECASE``. - -- bpo-26053: Fixed bug where the :mod:`pdb` interactive run command echoed - the args from the shell command line, even if those have been overridden - at the pdb prompt. - -- bpo-24160: Fixed bug where breakpoints did not persist across multiple - debugger sessions in :mod:`pdb`'s interactive mode. - -- bpo-40701: When the :data:`tempfile.tempdir` global variable is set to a - value of type bytes, it is now handled consistently. Previously - exceptions could be raised from some tempfile APIs when the directory did - not already exist in this situation. Also ensures that the - :func:`tempfile.gettempdir` and :func:`tempfile.gettempdirb` functions - *always* return ``str`` and ``bytes`` respectively. - -- bpo-39342: Expose ``X509_V_FLAG_ALLOW_PROXY_CERTS`` as - :const:`~ssl.VERIFY_ALLOW_PROXY_CERTS` to allow proxy certificate - validation as explained in - https://docs.openssl.org/1.1.1/man7/proxy-certificates/. - -- bpo-31861: Add builtins.aiter and builtins.anext. Patch by Joshua Bronson - (@jab), Daniel Pope (@lordmauve), and Justin Wang (@justin39). - -Documentation -------------- - -- bpo-43199: Answer "Why is there no goto?" in the Design and History FAQ. - -- bpo-43407: Clarified that a result from :func:`time.monotonic`, - :func:`time.perf_counter`, :func:`time.process_time`, or - :func:`time.thread_time` can be compared with the result from any - following call to the same function - not just the next immediate call. - -- bpo-43354: Fix type documentation for ``Fault.faultCode``; the type has to - be ``int`` instead of ``str``. - -- bpo-41933: Clarified wording of s * n in the Common Sequence Operations - -Tests ------ - -- bpo-37945: Fix test_getsetlocale_issue1813() of test_locale: skip the test - if ``setlocale()`` fails. Patch by Victor Stinner. - -- bpo-41561: Add workaround for Ubuntu's custom OpenSSL security level - policy. - -Build ------ - -- bpo-43179: Introduce and correctly use ALIGNOF_X in place of SIZEOF_X for - alignment-related code in optimized string routines. Patch by Jessica - Clarke. - -- bpo-43631: Update macOS, Windows, and CI to OpenSSL 1.1.1k. - -- bpo-43617: Improve configure.ac: Check for presence of autoconf-archive - package and remove our copies of M4 macros. - -- bpo-43466: The ``configure`` script now supports ``--with-openssl-rpath`` - option. - -- bpo-43372: Use ``_freeze_importlib`` to generate code for the - ``__hello__`` module. This approach ensures the code matches the - interpreter version. Previously, PYTHON_FOR_REGEN was used to generate - the code, which might be wrong. The marshal format for code objects has - changed with bpo-42246, commit 877df851. Update the code and the expected - code sizes in ctypes test_frozentable. - -Windows -------- - -- bpo-43440: Build :mod:`sqlite3` with the ``R*Tree`` module enabled. Patch - by Erlend E. Aasland. - -IDLE ----- - -- bpo-42225: Document that IDLE can fail on Unix either from misconfigured - IP masquerade rules or failure displaying complex colored (non-ascii) - characters. - -C API ------ - -- bpo-43688: The limited C API is now supported if Python is built in debug - mode (if the ``Py_DEBUG`` macro is defined). In the limited C API, the - :c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented - as opaque function calls, rather than accessing directly the - :c:member:`PyObject.ob_refcnt` member, if Python is built in debug mode - and the ``Py_LIMITED_API`` macro targets Python 3.10 or newer. It became - possible to support the limited C API in debug mode because the - :c:type:`PyObject` structure is the same in release and debug mode since - Python 3.8 (see :issue:`36465`). - - The limited C API is still not supported in the ``--with-trace-refs`` - special build (``Py_TRACE_REFS`` macro). - - Patch by Victor Stinner. - -- bpo-43244: Remove the ``pyarena.h`` header file with functions: - - * ``PyArena_New()`` - * ``PyArena_Free()`` - * ``PyArena_Malloc()`` - * ``PyArena_AddPyObject()`` - - These functions were undocumented, excluded from the limited C API, and - were only used internally by the compiler. Patch by Victor Stinner. - -- bpo-43244: Remove the compiler and parser functions using ``struct _mod`` - type, because the public AST C API was removed: - - * ``PyAST_Compile()`` - * ``PyAST_CompileEx()`` - * ``PyAST_CompileObject()`` - * ``PyFuture_FromAST()`` - * ``PyFuture_FromASTObject()`` - * ``PyParser_ASTFromFile()`` - * ``PyParser_ASTFromFileObject()`` - * ``PyParser_ASTFromFilename()`` - * ``PyParser_ASTFromString()`` - * ``PyParser_ASTFromStringObject()`` - - These functions were undocumented and excluded from the limited C API. - Patch by Victor Stinner. - -- bpo-43244: Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header - files. These functions were undocumented and excluded from the limited C - API. Most names defined by these header files were not prefixed by ``Py`` - and so could create names conflicts. For example, ``Python-ast.h`` defined - a ``Yield`` macro which was conflict with the ``Yield`` name used by the - Windows ``<winbase.h>`` header. Use the Python :mod:`ast` module instead. - Patch by Victor Stinner. - -- bpo-43541: Fix a ``PyEval_EvalCodeEx()`` regression: fix reference - counting on builtins. Patch by Victor Stinner. - -- bpo-43244: Remove the ``symtable.h`` header file and the undocumented - functions: - - * ``PyST_GetScope()`` - * ``PySymtable_Build()`` - * ``PySymtable_BuildObject()`` - * ``PySymtable_Free()`` - * ``Py_SymtableString()`` - * ``Py_SymtableStringObject()`` - - The ``Py_SymtableString()`` function was part the stable ABI by mistake - but it could not be used, because the ``symtable.h`` header file was - excluded from the limited C API. - - The Python :mod:`symtable` module remains available and is unchanged. - - Patch by Victor Stinner. - -- bpo-43244: Remove the ``PyAST_Validate()`` function. It is no longer - possible to build a AST object (``mod_ty`` type) with the public C API. - The function was already excluded from the limited C API (:pep:`384`). - Patch by Victor Stinner. - - -What's New in Python 3.10.0 alpha 6? -==================================== - -*Release date: 2021-03-01* - -Security --------- - -- bpo-42967: Fix web cache poisoning vulnerability by defaulting the query - args separator to ``&``, and allowing the user to choose a custom - separator. - -Core and Builtins ------------------ - -- bpo-43321: Fix ``SystemError`` raised when ``PyArg_Parse*()`` is used with - ``#`` but without ``PY_SSIZE_T_CLEAN`` defined. - -- bpo-36346: ``PyArg_Parse*()`` functions now emits ``DeprecationWarning`` - when ``u`` or ``Z`` format is used. See :pep:`623` for detail. - -- bpo-43277: Add a new :c:func:`PySet_CheckExact` function to the C-API to - check if an object is an instance of :class:`set` but not an instance of a - subtype. Patch by Pablo Galindo. - -- bpo-42990: The :data:`types.FunctionType` constructor now inherits the - current builtins if the *globals* dictionary has no ``"__builtins__"`` - key, rather than using ``{"None": None}`` as builtins: same behavior as - :func:`eval` and :func:`exec` functions. Defining a function with ``def - function(...): ...`` in Python is not affected, globals cannot be - overridden with this syntax: it also inherits the current builtins. Patch - by Victor Stinner. - -- bpo-42990: Functions have a new ``__builtins__`` attribute which is used - to look for builtin symbols when a function is executed, instead of - looking into ``__globals__['__builtins__']``. Patch by Mark Shannon and - Victor Stinner. - -- bpo-43149: Improve the error message in the parser for exception groups - without parentheses. Patch by Pablo Galindo. - -- bpo-43121: Fixed an incorrect :exc:`SyntaxError` message for missing comma - in literals. Patch by Pablo Galindo. - -Library -------- - -- bpo-42819: :mod:`readline`: Explicitly disable bracketed paste in the - interactive interpreter, even if it's set in the inputrc, is enabled by - default (eg GNU Readline 8.1), or a user calls - ``readline.read_init_file()``. The Python REPL has not implemented - bracketed paste support. Also, bracketed mode writes the ``"\x1b[?2004h"`` - escape sequence into stdout which causes test failures in applications - that don't support it. It can still be explicitly enabled by calling - ``readline.parse_and_bind("set enable-bracketed-paste on")``. Patch by - Dustin Rodrigues. - -Core and Builtins ------------------ - -- bpo-42808: Simple calls to ``type(object)`` are now faster due to the - ``vectorcall`` calling convention. Patch by Dennis Sweeney. - -- bpo-42217: Make the compiler merges same co_code and co_linetable objects - in a module like already did for co_consts. - -- bpo-41972: Substring search functions such as ``str1 in str2`` and - ``str2.find(str1)`` now sometimes use the "Two-Way" string comparison - algorithm to avoid quadratic behavior on long strings. - -- bpo-42128: Implement :pep:`634` (structural pattern matching). Patch by - Brandt Bucher. - -Library -------- - -- bpo-40692: In the :class:`concurrent.futures.ProcessPoolExecutor`, - validate that :func:`multiprocess.synchronize` is available on a given - platform and rely on that check in the :mod:`concurrent.futures` test - suite so we can run tests that are unrelated to - :class:`ProcessPoolExecutor` on those platforms. - -Core and Builtins ------------------ - -- bpo-38302: If :func:`object.__ipow__` returns :data:`NotImplemented`, the - operator will correctly fall back to :func:`object.__pow__` and - :func:`object.__rpow__` as expected. - -Library -------- - -- bpo-43316: The ``python -m gzip`` command line application now properly - fails when detecting an unsupported extension. It exits with a non-zero - exit code and prints an error message to stderr. - -- bpo-43317: Set the chunk size for the ``gzip`` module main function to - io.DEFAULT_BUFFER_SIZE. This is slightly faster than the 1024 bytes - constant that was used previously. - -- bpo-43146: Handle None in single-arg versions of - :func:`~traceback.print_exception` and - :func:`~traceback.format_exception`. - -- bpo-43260: Fix TextIOWrapper can not flush internal buffer forever after - very large text is written. - -- bpo-43258: Prevent needless allocation of :mod:`sqlite3` aggregate - function context when no rows match an aggregate query. Patch by Erlend E. - Aasland. - -- bpo-43251: Improve :mod:`sqlite3` error handling: - ``sqlite3_column_name()`` failures now result in :exc:`MemoryError`. Patch - by Erlend E. Aasland. - -- bpo-40956: Fix segfault in :meth:`sqlite3.Connection.backup` if no - argument was provided. The regression was introduced by PR 23838. Patch by - Erlend E. Aasland. - -- bpo-43172: The readline module now passes its tests when built directly - against libedit. Existing irreconcilable API differences remain in - :func:`readline.get_begidx` and :func:`readline.get_endidx` behavior based - on libreadline vs libedit use. - -- bpo-43163: Fix a bug in :mod:`codeop` that was causing it to not ask for - more input when multi-line snippets have unclosed parentheses. Patch by - Pablo Galindo - -- bpo-43162: deprecate unsupported ability to access enum members as - attributes of other enum members - -- bpo-43146: Fix recent regression in None argument handling in - :mod:`~traceback` module functions. - -- bpo-43102: The namedtuple __new__ method had its __builtins__ set to None - instead of an actual dictionary. This created problems for introspection - tools. - -- bpo-43106: Added :const:`~os.O_EVTONLY`, :const:`~os.O_FSYNC`, - :const:`~os.O_SYMLINK` and :const:`~os.O_NOFOLLOW_ANY` for macOS. Patch by - Donghee Na. - -- bpo-42960: Adds :const:`resource.RLIMIT_KQUEUES` constant from FreeBSD to - the :mod:`resource` module. - -- bpo-42151: Make the pure Python implementation of - :mod:`xml.etree.ElementTree` behave the same as the C implementation - (:mod:`!_elementree`) regarding default attribute values (by not setting - ``specified_attributes=1``). - -- bpo-29753: In ctypes, now packed bitfields are calculated properly and the - first item of packed bitfields is now shrank correctly. - -Documentation -------------- - -- bpo-27646: Clarify that 'yield from <expr>' works with any iterable, not - just iterators. - -- bpo-36346: Update some deprecated unicode APIs which are documented as - "will be removed in 4.0" to "3.12". See :pep:`623` for detail. - -Tests ------ - -- bpo-43288: Fix test_importlib to correctly skip Unicode file tests if the - filesystem does not support them. - -Build ------ - -- bpo-43174: Windows build now uses ``/utf-8`` compiler option. - -- bpo-43103: Add a new configure ``--without-static-libpython`` option to - not build the ``libpythonMAJOR.MINOR.a`` static library and not install - the ``python.o`` object file. - -- bpo-13501: The configure script can now use *libedit* instead of - *readline* with the command line option ``--with-readline=editline``. - -- bpo-42603: Make configure script use pkg-config to detect the location of - Tcl/Tk headers and libraries, used to build tkinter. - - On macOS, a Tcl/Tk configuration provided by pkg-config will be preferred - over Tcl/Tk frameworks installed in ``/{System/,}Library/Frameworks``. If - both exist and the latter is preferred, the appropriate ``--with-tcltk-*`` - configuration options need to be explicitly set. - -- bpo-39448: Add the "regen-frozen" makefile target that regenerates the - code for the frozen ``__hello__`` module. - -Windows -------- - -- bpo-43155: :c:func:`PyCMethod_New` is now present in ``python3.lib``. - -macOS ------ - -- bpo-41837: Update macOS installer build to use OpenSSL 1.1.1j. - -IDLE ----- - -- bpo-43283: Document why printing to IDLE's Shell is often slower than - printing to a system terminal and that it can be made faster by - pre-formatting a single string before printing. - -C API ------ - -- bpo-43278: Always put compiler and system information on the first line of - the REPL welcome message. - -- bpo-43270: Remove the private ``_PyErr_OCCURRED()`` macro: use the public - :c:func:`PyErr_Occurred` function instead. - -- bpo-35134: Move odictobject.h, parser_interface.h, picklebufobject.h, - pydebug.h, and pyfpe.h into the cpython/ directory. They must not be - included directly, as they are already included by Python.h: :ref:`Include - Files <api-includes>`. - -- bpo-35134: Move pyarena.h, pyctype.h, and pytime.h into the cpython/ - directory. They must not be included directly, as they are already - included by Python.h: :ref:`Include Files <api-includes>`. - -- bpo-40170: :c:func:`PyExceptionClass_Name` is now always declared as a - function, in order to hide implementation details. The macro accessed - :c:member:`PyTypeObject.tp_name` directly. Patch by Erlend E. Aasland. - -- bpo-43239: The :c:func:`PyCFunction_New` function is now exported in the - ABI when compiled with ``-fvisibility=hidden``. - -- bpo-40170: :c:func:`PyIter_Check` is now always declared as a function, in - order to hide implementation details. The macro accessed - :c:member:`PyTypeObject.tp_iternext` directly. Patch by Erlend E. Aasland. - -- bpo-40170: Convert :c:func:`PyDescr_IsData` macro to a function to hide - implementation details: The macro accessed - :c:member:`PyTypeObject.tp_descr_set` directly. Patch by Erlend E. - Aasland. - -- bpo-43181: Convert :c:func:`PyObject_TypeCheck` macro to a static inline - function. Patch by Erlend E. Aasland. - - -What's New in Python 3.10.0 alpha 5? -==================================== - -*Release date: 2021-02-02* - -Security --------- - -- bpo-42938: Avoid static buffers when computing the repr of - :class:`ctypes.c_double` and :class:`ctypes.c_longdouble` values. - -Core and Builtins ------------------ - -- bpo-42990: Refactor the ``PyEval_`` family of functions. - - * An new function ``_PyEval_Vector`` is added to simplify calls to Python from C. - * ``_PyEval_EvalCodeWithName`` is removed - * ``PyEval_EvalCodeEx`` is retained as part of the API, but is not used internally - -- bpo-38631: Replace :c:func:`Py_FatalError` calls in the compiler with - regular :exc:`SystemError` exceptions. Patch by Victor Stinner. - -- bpo-42997: Improve error message for missing ":" before blocks. Patch by - Pablo Galindo. - -- bpo-43017: Improve error message in the parser when using un-parenthesised - tuples in comprehensions. Patch by Pablo Galindo. - -- bpo-42986: Fix parser crash when reporting syntax errors in f-string with - newlines. Patch by Pablo Galindo. - -- bpo-40176: Syntax errors for unterminated string literals now point to the - start of the string instead of reporting EOF/EOL. - -- bpo-42927: The inline cache for ``LOAD_ATTR`` now also optimizes access to - attributes defined by ``__slots__``. This makes reading such attribute up - to 30% faster. - -- bpo-42864: Improve error messages in the parser when parentheses are not - closed. Patch by Pablo Galindo. - -- bpo-42924: Fix ``bytearray`` repetition incorrectly copying data from the - start of the buffer, even if the data is offset within the buffer (e.g. - after reassigning a slice at the start of the ``bytearray`` to a shorter - byte string). - -- bpo-42882: Fix the :c:func:`!_PyUnicode_FromId` function - (_Py_IDENTIFIER(var) API) when :c:func:`Py_Initialize` / - :c:func:`Py_Finalize` is called multiple times: preserve - ``_PyRuntime.unicode_ids.next_index`` value. - -- bpo-42827: Fix a crash when working out the error line of a - :exc:`SyntaxError` in some multi-line expressions. - -- bpo-42823: frame.f_lineno is correct even if frame.f_trace is set to True - -Library -------- - -- bpo-37324: Remove deprecated aliases to - :ref:`collections-abstract-base-classes` from the :mod:`collections` - module. - -Core and Builtins ------------------ - -- bpo-41994: Fixed possible leak in ``import`` when ``sys.modules`` is not a - ``dict``. - -- bpo-27772: In string formatting, preceding the *width* field by ``'0'`` no - longer affects the default alignment for strings. - -Library -------- - -- bpo-43108: Fixed a reference leak in the :mod:`curses` module. Patch by - Pablo Galindo - -- bpo-43077: Update the bundled pip to 21.0.1 and setuptools to 52.0.0. - -- bpo-41282: Deprecate ``distutils`` in documentation and add warning on - import. - -- bpo-43014: Improve performance of :mod:`tokenize` by 20-30%. Patch by - Anthony Sottile. - -- bpo-42323: Fix :func:`math.nextafter` for NaN on AIX. - -- bpo-42955: Add :data:`sys.stdlib_module_names`, containing the list of the - standard library module names. Patch by Victor Stinner. - -- bpo-42944: Fix ``random.Random.sample`` when ``counts`` argument is not - ``None``. - -- bpo-42934: Use :class:`~traceback.TracebackException`'s new ``compact`` - param in :class:`~unittest.TestResult` to reduce time and memory consumed - by traceback formatting. - -- bpo-42931: Add :func:`randbytes` to ``random.__all__``. - -- bpo-38250: [Enum] Flags consisting of a single bit are now considered - canonical, and will be the only flags returned from listing and iterating - over a Flag class or a Flag member. Multi-bit flags are considered - aliases; they will be returned from lookups and operations that result in - their value. Iteration for both Flag and Flag members is in definition - order. - -- bpo-42877: Added the ``compact`` parameter to the constructor of - :class:`traceback.TracebackException` to reduce time and memory for use - cases that only need to call :func:`TracebackException.format` and - :func:`TracebackException.format_exception_only`. - -- bpo-42923: The :c:func:`Py_FatalError` function and the - :mod:`faulthandler` module now dump the list of extension modules on a - fatal error. - -- bpo-42848: Removed recursion from :class:`~traceback.TracebackException` - to allow it to handle long exception chains. - -- bpo-42901: [Enum] move member creation from ``EnumMeta.__new__`` to - ``_proto_member.__set_name__``, allowing members to be created and visible - in ``__init_subclass__``. - -- bpo-42780: Fix os.set_inheritable() for O_PATH file descriptors on Linux. - -- bpo-42866: Fix a reference leak in the ``getcodec()`` function of CJK - codecs. Patch by Victor Stinner. - -- bpo-42846: Convert the 6 CJK codec extension modules (_codecs_cn, - _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr and _codecs_tw) to the - multiphase initialization API (:pep:`489`). Patch by Victor Stinner. - -- bpo-42851: remove __init_subclass__ support for Enum members - -- bpo-42834: Make internal caches of the ``_json`` module compatible with - subinterpreters. - -- bpo-41748: Fix HTMLParser parsing rules for element attributes containing - commas with spaces. Patch by Karl Dubost. - -- bpo-40810: Require SQLite 3.7.15 or newer. Patch by Erlend E. Aasland. - -- bpo-1635741: Convert the _multibytecodec extension module (CJK codecs) to - multi-phase initialization (:pep:`489`). Patch by Erlend E. Aasland. - -- bpo-42802: The distutils ``bdist_wininst`` command deprecated in Python - 3.8 has been removed. The distutils ``bdist_wheel`` command is now - recommended to distribute binary packages on Windows. - -- bpo-24464: The undocumented built-in function - ``sqlite3.enable_shared_cache`` is now deprecated, scheduled for removal - in Python 3.12. Its use is strongly discouraged by the SQLite3 - documentation. Patch by Erlend E. Aasland. - -- bpo-42384: Make pdb populate sys.path[0] exactly the same as regular - python execution. - -- bpo-42383: Fix pdb: previously pdb would fail to restart the debugging - target if it was specified using a relative path and the current directory - changed. - -- bpo-42005: Fix CLI of :mod:`cProfile` and :mod:`profile` to catch - :exc:`BrokenPipeError`. - -- bpo-41604: Don't decrement the reference count of the previous user_ptr - when set_panel_userptr fails. - -- bpo-41149: Allow executing callables that have a boolean value of - ``False`` when passed to :class:`Threading.thread` as the target. Patch - contributed by Barney Stratford. - -- bpo-38307: Add an 'end_lineno' attribute to the Class and Function objects - that appear in the tree returned by pyclbr functions. This and the - existing 'lineno' attribute define the extent of class and def statements. - Patch by Aviral Srivastava. - -- bpo-39273: The ``BUTTON5_*`` constants are now exposed in the - :mod:`curses` module if available. - -- bpo-33289: Correct call to :mod:`tkinter.colorchooser` to return RGB - triplet of ints instead of floats. Patch by Cheryl Sabella. - -Documentation -------------- - -- bpo-40304: Fix doc for type(name, bases, dict). Patch by Boris - Verkhovskiy and Éric Araujo. - -- bpo-42811: Updated importlib.util.resolve_name() doc to use - __spec__.parent instead of __package__. (Thanks Yair Frid.) - -Tests ------ - -- bpo-40823: Use :meth:`unittest.TestLoader().loadTestsFromTestCase` instead - of :meth:`unittest.makeSuite` in :mod:`sqlite3` tests. Patch by Erlend E. - Aasland. - -- bpo-40810: In :mod:`sqlite3`, fix ``CheckTraceCallbackContent`` for SQLite - pre 3.7.15. - -Build ------ - -- bpo-43031: Pass ``--timeout=$(TESTTIMEOUT)`` option to the default profile - task ``./python -m test --pgo`` command. - -- bpo-36143: ``make regen-all`` now also runs ``regen-keyword``. Patch by - Victor Stinner. - -- bpo-42874: Removed the grep -q and -E flags in the tzpath validation - section of the configure script to better accommodate users of some - platforms (specifically Solaris 10). - -- bpo-31904: Add library search path by wr-cc in add_cross_compiling_paths() - for VxWorks. - -- bpo-42856: Add ``--with-wheel-pkg-dir=PATH`` option to the ``./configure`` - script. If specified, the :mod:`ensurepip` module looks for ``setuptools`` - and ``pip`` wheel packages in this directory: if both are present, these - wheel packages are used instead of ensurepip bundled wheel packages. - - Some Linux distribution packaging policies recommend against bundling - dependencies. For example, Fedora installs wheel packages in the - ``/usr/share/python-wheels/`` directory and don't install the - ``ensurepip._bundled`` package. - -Windows -------- - -- bpo-41837: Updated Windows installer to include OpenSSL 1.1.1i - -- bpo-42584: Upgrade Windows installer to use SQLite 3.34.0. - -macOS ------ - -- bpo-42504: Ensure that the value of - sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') is always a string, - even in when the value is parsable as an integer. - -IDLE ----- - -- bpo-43008: Make IDLE invoke :func:`sys.excepthook` in normal, 2-process - mode. Patch by Ken Hilton. - -- bpo-33065: Fix problem debugging user classes with __repr__ method. - -- bpo-23544: Disable Debug=>Stack Viewer when user code is running or - Debugger is active, to prevent hang or crash. Patch by Zackery Spytz. - -- bpo-32631: Finish zzdummy example extension module: make menu entries - work; add docstrings and tests with 100% coverage. - -C API ------ - -- bpo-42979: When Python is built in debug mode (with C assertions), calling - a type slot like ``sq_length`` (``__len__()`` in Python) now fails with a - fatal error if the slot succeeded with an exception set, or failed with no - exception set. The error message contains the slot, the type name, and the - current exception (if an exception is set). Patch by Victor Stinner. - -- bpo-43030: Fixed a compiler warning in :c:func:`Py_UNICODE_ISSPACE()` on - platforms with signed :c:type:`wchar_t`. - - -What's New in Python 3.10.0 alpha 4? -==================================== - -*Release date: 2021-01-04* - -Core and Builtins ------------------ - -- bpo-42814: Fix undefined behavior in ``Objects/genericaliasobject.c``. - -- bpo-42806: Fix the column offsets for f-strings :mod:`ast` nodes - surrounded by parentheses and for nodes that spawn multiple lines. Patch - by Pablo Galindo. - -- bpo-40631: Fix regression where a single parenthesized starred expression - was a valid assignment target. - -- bpo-27794: Improve the error message for failed writes/deletes to property - objects. When possible, the attribute name is now shown. Patch provided by - Yurii Karabas. - -- bpo-42745: Make the type attribute lookup cache per-interpreter. Patch by - Victor Stinner. - -- bpo-42246: Jumps to jumps are not eliminated when it would break PEP 626. - -- bpo-42246: Make sure that the ``f_lasti`` and ``f_lineno`` attributes of a - frame are set correctly when an exception is raised or re-raised. Required - for PEP 626. - -- bpo-32381: The coding cookie (ex: ``# coding: latin1``) is now ignored in - the command passed to the :option:`-c` command line option. Patch by - Victor Stinner. - -- bpo-30858: Improve error location in expressions that contain assignments. - Patch by Pablo Galindo and Lysandros Nikolaou. - -- bpo-42615: Remove jump commands made redundant by the deletion of - unreachable bytecode blocks - -Library -------- - -- bpo-42639: Make the :mod:`atexit` module state per-interpreter. It is now - safe have more than one :mod:`atexit` module instance. Patch by Donghee Na - and Victor Stinner. - -Core and Builtins ------------------ - -- bpo-32381: Fix encoding name when running a ``.pyc`` file on Windows: - :c:func:`PyRun_SimpleFileExFlags()` now uses the correct encoding to - decode the filename. - -Library -------- - -- bpo-42195: The ``__args__`` of the parameterized generics for - :data:`typing.Callable` and :class:`collections.abc.Callable` are now - consistent. The ``__args__`` for :class:`collections.abc.Callable` are - now flattened while :data:`typing.Callable`'s have not changed. To allow - this change, :class:`types.GenericAlias` can now be subclassed and - ``collections.abc.Callable``'s ``__class_getitem__`` will now return a - subclass of ``types.GenericAlias``. Tests for typing were also updated to - not subclass things like ``Callable[..., T]`` as that is not a valid base - class. Finally, both ``Callable``\ s no longer validate their - ``argtypes``, in ``Callable[[argtypes], resulttype]`` to prepare for - :pep:`612`. Patch by Ken Jin. - -- bpo-40137: Convert functools module to use - :c:func:`PyType_FromModuleAndSpec`. - -- bpo-40077: Convert :mod:`array` to use heap types, and establish module - state for these. - -- bpo-42008: Fix _random.Random() seeding. - -- bpo-1635741: Port the :mod:`pyexpat` extension module to multi-phase - initialization (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-40521: Make the Unicode dictionary of interned strings compatible with - subinterpreters. Patch by Victor Stinner. - -- bpo-39465: Make :c:func:`!_PyUnicode_FromId` function compatible with - subinterpreters. Each interpreter now has an array of identifier objects - (interned strings decoded from UTF-8). Patch by Victor Stinner. - -Library -------- - -- bpo-42257: Handle empty string in variable executable in - platform.libc_ver() - -- bpo-42772: randrange() now raises a TypeError when step is specified - without a stop argument. Formerly, it silently ignored the step argument. - -- bpo-42759: Fixed equality comparison of :class:`tkinter.Variable` and - :class:`tkinter.font.Font`. Objects which belong to different Tcl - interpreters are now always different, even if they have the same name. - -- bpo-42756: Configure LMTP Unix-domain socket to use socket global default - timeout when a timeout is not explicitly provided. - -- bpo-23328: Allow / character in username, password fields on _PROXY - envars. - -- bpo-42740: :func:`typing.get_args` and :func:`typing.get_origin` now - support :pep:`604` union types and :pep:`612` additions to ``Callable``. - -- bpo-42655: :mod:`subprocess` *extra_groups* is now correctly passed into - setgroups() system call. - -- bpo-42727: ``EnumMeta.__prepare__`` now accepts ``**kwds`` to properly - support ``__init_subclass__`` - -- bpo-38308: Add optional *weights* to *statistics.harmonic_mean()*. - -- bpo-42721: When simple query dialogs (:mod:`tkinter.simpledialog`), - message boxes (:mod:`tkinter.messagebox`) or color choose dialog - (:mod:`tkinter.colorchooser`) are created without arguments *master* and - *parent*, and the default root window is not yet created, and - :func:`~tkinter.NoDefaultRoot` was not called, a new temporal hidden root - window will be created automatically. It will not be set as the default - root window and will be destroyed right after closing the dialog window. - It will help to use these simple dialog windows in programs which do not - need other GUI. - -- bpo-25246: Optimized :meth:`collections.deque.remove`. - -- bpo-35728: Added a root parameter to :func:`tkinter.font.nametofont`. - -- bpo-15303: :mod:`tkinter` supports now widgets with boolean value False. - -- bpo-42681: Fixed range checks for color and pair numbers in :mod:`curses`. - -- bpo-42685: Improved placing of simple query windows in Tkinter (such as - :func:`tkinter.simpledialog.askinteger`). They are now centered at the - center of the parent window if it is specified and shown, otherwise at the - center of the screen. - -- bpo-9694: Argparse help no longer uses the confusing phrase, "optional - arguments". It uses "options" instead. - -- bpo-1635741: Port the :mod:`!_thread` extension module to the multiphase - initialization API (:pep:`489`) and convert its static types to heap - types. - -- bpo-37961: Fix crash in :func:`tracemalloc.Traceback.__repr__` (regressed - in Python 3.9). - -- bpo-42630: :mod:`tkinter` functions and constructors which need a default - root window raise now :exc:`RuntimeError` with descriptive message instead - of obscure :exc:`AttributeError` or :exc:`NameError` if it is not created - yet or cannot be created automatically. - -- bpo-42639: :func:`atexit._run_exitfuncs` now logs callback exceptions - using :data:`sys.unraisablehook`, rather than logging them directly into - :data:`sys.stderr` and raise the last exception. - -- bpo-42644: ``logging.disable`` will now validate the types and value of - its parameter. It also now accepts strings representing the levels (as - does ``logging.setLevel``) instead of only the numerical values. - -- bpo-42639: At Python exit, if a callback registered with - :func:`atexit.register` fails, its exception is now logged. Previously, - only some exceptions were logged, and the last exception was always - silently ignored. - -- bpo-36541: Fixed lib2to3.pgen2 to be able to parse PEP-570 positional only - argument syntax. - -- bpo-42382: In ``importlib.metadata``: - ``EntryPoint`` objects now expose - a ``.dist`` object referencing the ``Distribution`` when constructed from - a ``Distribution``. - Add support for package discovery under package - normalization rules. - The object returned by ``metadata()`` now has a - formally defined protocol called ``PackageMetadata`` with declared support - for the ``.get_all()`` method. - Synced with importlib_metadata 3.3. - -- bpo-41877: A check is added against misspellings of autospect, auto_spec - and set_spec being passed as arguments to patch, patch.object and - create_autospec. - -- bpo-39717: [tarfile] update nested exception raising to use ``from None`` - or ``from e`` - -- bpo-41877: AttributeError for suspected misspellings of assertions on - mocks are now pointing out that the cause are misspelled assertions and - also what to do if the misspelling is actually an intended attribute name. - The unittest.mock document is also updated to reflect the current set of - recognised misspellings. - -- bpo-41559: Implemented :pep:`612`: added ``ParamSpec`` and ``Concatenate`` - to :mod:`typing`. Patch by Ken Jin. - -- bpo-42385: StrEnum: fix _generate_next_value_ to return a str - -- bpo-31904: Define THREAD_STACK_SIZE for VxWorks. - -- bpo-34750: [Enum] ``_EnumDict.update()`` is now supported. - -- bpo-42517: Enum: private names do not become members / do not generate - errors -- they remain normal attributes - -- bpo-42678: ``Enum``: call ``__init_subclass__`` after members have been - added - -- bpo-28964: :func:`ast.literal_eval` adds line number information (if - available) in error message for malformed nodes. - -- bpo-42470: :func:`random.sample` no longer warns on a sequence which is - also a set. - -- bpo-31904: :func:`posixpath.expanduser` returns the input *path* unchanged - if user home directory is None on VxWorks. - -- bpo-42388: Fix subprocess.check_output(..., input=None) behavior when - text=True to be consistent with that of the documentation and - universal_newlines=True. - -- bpo-34463: Fixed discrepancy between :mod:`traceback` and the interpreter - in formatting of SyntaxError with lineno not set (:mod:`traceback` was - changed to match interpreter). - -- bpo-42393: Raise :exc:`OverflowError` instead of silent truncation in - :meth:`socket.ntohs` and :meth:`socket.htons`. Silent truncation was - deprecated in Python 3.7. Patch by Erlend E. Aasland - -- bpo-42222: Harmonized :func:`random.randrange` argument handling to match - :func:`range`. - - * The integer test and conversion in ``randrange()`` now uses - :func:`operator.index`. - * Non-integer arguments to ``randrange()`` are deprecated. - * The ``ValueError`` is deprecated in favor of a ``TypeError``. - * It now runs a little faster than before. - - (Contributed by Raymond Hettinger and Serhiy Storchaka.) - -- bpo-42163: Restore compatibility for ``uname_result`` around deepcopy and - _replace. - -- bpo-42090: ``zipfile.Path.joinpath`` now accepts arbitrary arguments, same - as ``pathlib.Path.joinpath``. - -- bpo-1635741: Port the _csv module to the multi-phase initialization API - (:pep:`489`). - -- bpo-42059: :class:`typing.TypedDict` types created using the alternative - call-style syntax now correctly respect the ``total`` keyword argument - when setting their ``__required_keys__`` and ``__optional_keys__`` class - attributes. - -- bpo-41960: Add ``globalns`` and ``localns`` parameters to the - :func:`inspect.signature` and :meth:`inspect.Signature.from_callable`. - -- bpo-41907: fix ``format()`` behavior for ``IntFlag`` - -- bpo-41891: Ensure asyncio.wait_for waits for task completion - -- bpo-24792: Fixed bug where :mod:`zipimporter` sometimes reports an - incorrect cause of import errors. - -- bpo-31904: Fix site and sysconfig modules for VxWorks RTOS which has no - home directories. - -- bpo-41462: Add :func:`os.set_blocking` support for VxWorks RTOS. - -- bpo-40219: Lowered :class:`tkinter.ttk.LabeledScale` dummy widget to - prevent hiding part of the content label. - -- bpo-37193: Fixed memory leak in ``socketserver.ThreadingMixIn`` introduced - in Python 3.7. - -- bpo-39068: Fix initialization race condition in :func:`a85encode` and - :func:`b85encode` in :mod:`base64`. Patch by Brandon Stansbury. - -Documentation -------------- - -- bpo-17140: Add documentation for the - :class:`multiprocessing.pool.ThreadPool` class. - -- bpo-34398: Prominently feature listings from the glossary in documentation - search results. Patch by Ammar Askar. - -Tests ------ - -- bpo-42794: Update test_nntplib to use official group name of news.aioe.org - for testing. Patch by Donghee Na. - -- bpo-31904: Skip some asyncio tests on VxWorks. - -- bpo-42641: Enhance ``test_select.test_select()``: it now takes 500 - milliseconds rather than 10 seconds. Use Python rather than a shell to - make the test more portable. - -- bpo-31904: Skip some tests in _test_all_chown_common() on VxWorks. - -- bpo-42199: Fix bytecode helper assertNotInBytecode. - -- bpo-41443: Add more attribute checking in test_posix.py - -- bpo-31904: Disable os.popen and impacted tests on VxWorks - -- bpo-41439: Port test_ssl and test_uuid to VxWorks RTOS. - -Build ------ - -- bpo-42692: Fix __builtin_available check on older compilers. Patch by - Joshua Root. - -- bpo-27640: Added ``--disable-test-modules`` option to the ``configure`` - script: don't build nor install test modules. Patch by Xavier de Gaye, - Thomas Petazzoni and Peixing Xin. - -- bpo-42604: Now all platforms use a value for the "EXT_SUFFIX" build - variable derived from SOABI (for instance in freeBSD, "EXT_SUFFIX" is now - ".cpython-310d.so" instead of ".so"). Previously only Linux, Mac and - VxWorks were using a value for "EXT_SUFFIX" that included "SOABI". - -- bpo-42598: Fix implicit function declarations in configure which could - have resulted in incorrect configuration checks. Patch contributed by - Joshua Root. - -- bpo-31904: Enable libpython3.so for VxWorks. - -- bpo-29076: Add fish shell support to macOS installer. - -macOS ------ - -- bpo-42361: Update macOS installer build to use Tcl/Tk 8.6.11 (rc2, - expected to be final release). - -- bpo-41837: Update macOS installer build to use OpenSSL 1.1.1i. - -- bpo-42584: Update macOS installer to use SQLite 3.34.0. - -Tools/Demos ------------ - -- bpo-42726: Fixed Python 3 compatibility issue with gdb/libpython.py - handling of attribute dictionaries. - -- bpo-42613: Fix ``freeze.py`` tool to use the prope config and library - directories. Patch by Victor Stinner. - -C API ------ - -- bpo-42591: Export the :c:func:`Py_FrozenMain` function: fix a Python 3.9.0 - regression. Python 3.9 uses ``-fvisibility=hidden`` and the function was - not exported explicitly and so not exported. - -- bpo-32381: Remove the private :c:func:`!_Py_fopen` function which is no - longer needed. Use :c:func:`!_Py_wfopen` or :c:func:`!_Py_fopen_obj` - instead. Patch by Victor Stinner. - -- bpo-1635741: Port :mod:`resource` extension module to module state - -- bpo-42111: Update the ``xxlimited`` module to be a better example of how - to use the limited C API. - -- bpo-40052: Fix an alignment build warning/error in function - ``PyVectorcall_Function()``. Patch by Andreas Schneider, Antoine Pitrou - and Petr Viktorin. - - -What's New in Python 3.10.0 alpha 3? -==================================== - -*Release date: 2020-12-07* - -Security --------- - -- bpo-40791: Add ``volatile`` to the accumulator variable in - ``hmac.compare_digest``, making constant-time-defeating optimizations less - likely. - -Core and Builtins ------------------ - -- bpo-42576: ``types.GenericAlias`` will now raise a ``TypeError`` when - attempting to initialize with a keyword argument. Previously, this would - cause the interpreter to crash if the interpreter was compiled with debug - symbols. This does not affect interpreters compiled for release. Patch by - Ken Jin. - -- bpo-42536: Several built-in and standard library types now ensure that - their internal result tuples are always tracked by the :term:`garbage - collector <garbage collection>`: - - - :meth:`collections.OrderedDict.items() <collections.OrderedDict>` - - - :meth:`dict.items` - - - :func:`enumerate` - - - :func:`functools.reduce` - - - :func:`itertools.combinations` - - - :func:`itertools.combinations_with_replacement` - - - :func:`itertools.permutations` - - - :func:`itertools.product` - - - :func:`itertools.zip_longest` - - - :func:`zip` - - Previously, they could have become untracked by a prior garbage - collection. Patch by Brandt Bucher. - -- bpo-42500: Improve handling of exceptions near recursion limit. Converts a - number of Fatal Errors in RecursionErrors. - -- bpo-42246: PEP 626: After a return, the f_lineno attribute of a frame is - always the last line executed. - -- bpo-42435: Speed up comparison of bytes objects with non-bytes objects - when option :option:`-b` is specified. Speed up comparison of bytarray - objects with non-buffer object. - -Library -------- - -- bpo-1635741: Port the ``_warnings`` extension module to the multi-phase - initialization API (:pep:`489`). Patch by Victor Stinner. - -Core and Builtins ------------------ - -- bpo-41686: On Windows, the ``SIGINT`` event, ``_PyOS_SigintEvent()``, is - now created even if Python is configured to not install signal handlers - (if :c:member:`PyConfig.install_signal_handlers` equals to 0, or - ``Py_InitializeEx(0)``). - -- bpo-42381: Allow assignment expressions in set literals and set - comprehensions as per PEP 572. Patch by Pablo Galindo. - -- bpo-42202: Change function parameters annotations internal representation - to tuple of strings. Patch provided by Yurii Karabas. - -- bpo-42374: Fix a regression introduced by the new parser, where an - unparenthesized walrus operator was not allowed within generator - expressions. - -- bpo-42316: Allow an unparenthesized walrus in subscript indexes. - -- bpo-42349: Make sure that the compiler front-end produces a well-formed - control flow graph. Be more aggressive in the compiler back-end, as it is - now safe to do so. - -- bpo-42296: On Windows, fix a regression in signal handling which prevented - to interrupt a program using CTRL+C. The signal handler can be run in a - thread different than the Python thread, in which case the test deciding - if the thread can handle signals is wrong. - -- bpo-42332: :class:`types.GenericAlias` objects can now be the targets of - weakrefs. - -- bpo-42282: Optimise constant subexpressions that appear as part of named - expressions (previously the AST optimiser did not descend into named - expressions). Patch by Nick Coghlan. - -- bpo-42266: Fixed a bug with the LOAD_ATTR opcode cache that was not - respecting monkey-patching a class-level attribute to make it a - descriptor. Patch by Pablo Galindo. - -Library -------- - -- bpo-40077: Convert :mod:`queue` to use heap types. - -Core and Builtins ------------------ - -- bpo-42246: Improved accuracy of line tracing events and f_lineno attribute - of Frame objects. See PEP 626 for details. - -Library -------- - -- bpo-40077: Convert :mod:`mmap` to use heap types. - -Core and Builtins ------------------ - -- bpo-42233: Allow ``GenericAlias`` objects to use :ref:`union type - expressions <types-union>`. This allows expressions like ``list[int] | - dict[float, str]`` where previously a ``TypeError`` would have been - thrown. This also fixes union type expressions not de-duplicating - ``GenericAlias`` objects. (Contributed by Ken Jin in :issue:`42233`.) - -- bpo-26131: The import system triggers a ``ImportWarning`` when it falls - back to using ``load_module()``. - -Library -------- - -- bpo-5054: CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly parsed. - Replace the special purpose getallmatchingheaders with generic get_all - method and add relevant tests. - - Original Patch by Martin Panter. Modified by Senthil Kumaran. - -- bpo-42562: Fix issue when dis failed to parse function that has no line - numbers. Patch provided by Yurii Karabas. - -- bpo-17735: :func:`inspect.findsource` now raises :exc:`OSError` instead of - :exc:`IndexError` when :attr:`co_lineno` of a code object is greater than - the file length. This can happen, for example, when a file is edited after - it was imported. PR by Irit Katriel. - -- bpo-42116: Fix handling of trailing comments by :func:`inspect.getsource`. - -- bpo-42532: Remove unexpected call of ``__bool__`` when passing a - ``spec_arg`` argument to a Mock. - -- bpo-38200: Added itertools.pairwise() - -- bpo-41818: Fix test_master_read() so that it succeeds on all platforms - that either raise OSError or return b"" upon reading from master. - -- bpo-42487: ChainMap.__iter__ no longer calls __getitem__ on underlying - maps - -- bpo-42482: :class:`~traceback.TracebackException` no longer holds a - reference to the exception's traceback object. Consequently, instances of - TracebackException for equivalent but non-equal exceptions now compare as - equal. - -- bpo-41818: Make test_openpty() avoid unexpected success due to number of - rows and/or number of columns being == 0. - -- bpo-42392: Remove loop parameter from ``asyncio.subprocess`` and - ``asyncio.tasks`` functions. Patch provided by Yurii Karabas. - -- bpo-42392: Remove loop parameter from ``asyncio.open_connection`` and - ``asyncio.start_server`` functions. Patch provided by Yurii Karabas. - -- bpo-28468: Add :func:`platform.freedesktop_os_release` function to parse - freedesktop.org ``os-release`` files. - -- bpo-42299: Removed the ``formatter`` module, which was deprecated in - Python 3.4. It is somewhat obsolete, little used, and not tested. It was - originally scheduled to be removed in Python 3.6, but such removals were - delayed until after Python 2.7 EOL. Existing users should copy whatever - classes they use into their code. Patch by Donghee Na and and Terry J. - Reedy. - -- bpo-26131: Deprecate zipimport.zipimporter.load_module() in favour of - exec_module(). - -- bpo-41818: Updated tests for the pty library. test_basic() has been - changed to test_openpty(); this additionally checks if slave termios and - slave winsize are being set properly by pty.openpty(). In order to add - support for FreeBSD, NetBSD, OpenBSD, and Darwin, this also adds - test_master_read(), which demonstrates that pty.spawn() should not depend - on an OSError to exit from its copy loop. - -- bpo-42392: Remove loop parameter from ``__init__`` in all - ``asyncio.locks`` and ``asyncio.Queue`` classes. Patch provided by Yurii - Karabas. - -- bpo-15450: Make :class:`filecmp.dircmp` respect subclassing. Now the - :attr:`filecmp.dircmp.subdirs` behaves as expected when subclassing - dircmp. - -- bpo-42413: The exception :exc:`socket.timeout` is now an alias of - :exc:`TimeoutError`. - -- bpo-31904: Support signal module on VxWorks. - -- bpo-42406: We fixed an issue in ``pickle.whichmodule`` in which importing - ``multiprocessing`` could change the how pickle identifies which module an - object belongs to, potentially breaking the unpickling of those objects. - -- bpo-42403: Simplify the :mod:`importlib` external bootstrap code: - ``importlib._bootstrap_external`` now uses regular imports to import - builtin modules. When it is imported, the builtin :func:`__import__` - function is already fully working and so can be used to import builtin - modules like :mod:`sys`. Patch by Victor Stinner. - -- bpo-1635741: Convert _sre module types to heap types (PEP 384). Patch by - Erlend E. Aasland. - -- bpo-42375: subprocess module update for DragonFlyBSD support. - -- bpo-41713: Port the ``_signal`` extension module to the multi-phase - initialization API (:pep:`489`). Patch by Victor Stinner and Mohamed - Koubaa. - -- bpo-37205: :func:`time.time`, :func:`time.perf_counter` and - :func:`time.monotonic` functions can no longer fail with a Python fatal - error, instead raise a regular Python exception on failure. - -- bpo-42328: Fixed :meth:`tkinter.ttk.Style.map`. The function accepts now - the representation of the default state as empty sequence (as returned by - ``Style.map()``). The structure of the result is now the same on all - platform and does not depend on the value of ``wantobjects``. - -- bpo-42345: Fix various issues with ``typing.Literal`` parameter handling - (flatten, deduplicate, use type to cache key). Patch provided by Yurii - Karabas. - -- bpo-37205: :func:`time.perf_counter` on Windows and :func:`time.monotonic` - on macOS are now system-wide. Previously, they used an offset computed at - startup to reduce the precision loss caused by the float type. Use - :func:`time.perf_counter_ns` and :func:`time.monotonic_ns` added in Python - 3.7 to avoid this precision loss. - -- bpo-42318: Fixed support of non-BMP characters in :mod:`tkinter` on macOS. - -- bpo-42350: Fix the :class:`threading.Thread` class at fork: do nothing if - the thread is already stopped (ex: fork called at Python exit). - Previously, an error was logged in the child process. - -- bpo-42333: Port _ssl extension module to heap types. - -- bpo-42014: The ``onerror`` callback from ``shutil.rmtree`` now receives - correct function when ``os.open`` fails. - -- bpo-42237: Fix ``os.sendfile()`` on illumos. - -- bpo-42308: Add :data:`threading.__excepthook__` to allow retrieving the - original value of :func:`threading.excepthook` in case it is set to a - broken or a different value. Patch by Mario Corchero. - -- bpo-42131: Implement PEP 451/spec methods on zipimport.zipimporter: - find_spec(), create_module(), and exec_module(). - - This also allows for the documented deprecation of find_loader(), - find_module(), and load_module(). - -- bpo-41877: Mock objects which are not unsafe will now raise an - AttributeError if an attribute with the prefix asert, aseert, or assrt is - accessed, in addition to this already happening for the prefixes assert or - assret. - -- bpo-42264: ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete - since Python 3.3, when it was made an alias to :class:`str`. It is now - deprecated, scheduled for removal in Python 3.12. - -- bpo-42251: Added :func:`threading.gettrace` and - :func:`threading.getprofile` to retrieve the functions set by - :func:`threading.settrace` and :func:`threading.setprofile` respectively. - Patch by Mario Corchero. - -- bpo-42249: Fixed writing binary Plist files larger than 4 GiB. - -- bpo-42236: On Unix, the :func:`os.device_encoding` function now returns - ``'UTF-8'`` rather than the device encoding if the :ref:`Python UTF-8 Mode - <utf8-mode>` is enabled. - -- bpo-41754: webbrowser: Ignore *NotADirectoryError* when calling - ``xdg-settings``. - -- bpo-42183: Fix a stack overflow error for asyncio Task or Future repr(). - - The overflow occurs under some circumstances when a Task or Future - recursively returns itself. - -- bpo-42140: Improve asyncio.wait function to create the futures set just - one time. - -- bpo-42133: Update various modules in the stdlib to fall back on - ``__spec__.loader`` when ``__loader__`` isn't defined on a module. - -- bpo-26131: The ``load_module()`` methods found in ``importlib`` now - trigger a ``DeprecationWarning``. - -- bpo-39825: Windows: Change ``sysconfig.get_config_var('EXT_SUFFIX')`` to - the expected full ``platform_tag.extension`` format. Previously it was - hard-coded to ``.pyd``, now it is compatible with ``distutils.sysconfig`` - and will result in something like ``.cp38-win_amd64.pyd``. This brings - windows into conformance with the other platforms. - -- bpo-26389: The :func:`traceback.format_exception`, - :func:`traceback.format_exception_only`, and - :func:`traceback.print_exception` functions can now take an exception - object as a positional-only argument. - -- bpo-41889: Enum: fix regression involving inheriting a multiply inherited - enum - -- bpo-41861: Convert :mod:`sqlite3` to use heap types (PEP 384). Patch by - Erlend E. Aasland. - -- bpo-40624: Added support for the XPath ``!=`` operator in xml.etree - -- bpo-28850: Fix :meth:`pprint.PrettyPrinter.format` overrides being ignored - for contents of small containers. The :func:`pprint._safe_repr` function - was removed. - -- bpo-41625: Expose the :c:func:`splice` as :func:`os.splice` in the - :mod:`os` module. Patch by Pablo Galindo - -- bpo-34215: Clarify the error message for - :exc:`asyncio.IncompleteReadError` when ``expected`` is ``None``. - -- bpo-41543: Add async context manager support for contextlib.nullcontext. - -- bpo-21041: :attr:`pathlib.PurePath.parents` now supports negative - indexing. Patch contributed by Yaroslav Pankovych. - -- bpo-41332: Added missing connect_accepted_socket() method to - ``asyncio.AbstractEventLoop``. - -- bpo-12800: Extracting a symlink from a tarball should succeed and - overwrite the symlink if it already exists. The fix is to remove the - existing file or symlink before extraction. Based on patch by Chris AtLee, - Jeffrey Kintscher, and Senthil Kumaran. - -- bpo-40968: :mod:`urllib.request` and :mod:`http.client` now send - ``http/1.1`` ALPN extension during TLS handshake when no custom context is - supplied. - -- bpo-41001: Add :func:`os.eventfd` to provide a low level interface for - Linux's event notification file descriptor. - -- bpo-40816: Add AsyncContextDecorator to contextlib to support async - context manager as a decorator. - -- bpo-40550: Fix time-of-check/time-of-action issue in - subprocess.Popen.send_signal. - -- bpo-39411: Add an ``is_async`` identifier to :mod:`pyclbr`'s ``Function`` - objects. Patch by Batuhan Taskaya - -- bpo-35498: Add slice support to :attr:`pathlib.PurePath.parents`. - -Documentation -------------- - -- bpo-42238: Tentative to deprecate ``make suspicious`` by first removing it - from the CI and documentation builds, but keeping it around for manual - uses. - -- bpo-42153: Fix the URL for the IMAP protocol documents. - -- bpo-41028: Language and version switchers, previously maintained in every - cpython branches, are now handled by docsbuild-script. - -Tests ------ - -- bpo-41473: Re-enable test_gdb on gdb 9.2 and newer: - https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb - 10.1. - -- bpo-42553: Fix ``test_asyncio.test_call_later()`` race condition: don't - measure asyncio performance in the ``call_later()`` unit test. The test - failed randomly on the CI. - -- bpo-31904: Fix test_netrc on VxWorks: create temporary directories using - temp_cwd(). - -- bpo-31904: skip test_getaddrinfo_ipv6_scopeid_symbolic and - test_getnameinfo_ipv6_scopeid_symbolic on VxWorks - -- bpo-31904: skip test_test of test_mailcap on VxWorks - -- bpo-31904: add shell requirement for test_pipes - -- bpo-31904: skip some tests related to fifo on VxWorks - -- bpo-31904: Fix test_doctest.py failures for VxWorks. - -- bpo-40754: Include ``_testinternalcapi`` module in Windows installer for - test suite - -- bpo-41561: test_ssl: skip test_min_max_version_mismatch when TLS 1.0 is - not available - -- bpo-31904: Fix os module failures for VxWorks RTOS. - -- bpo-31904: Fix fifo test cases for VxWorks RTOS. - -Build ------ - -- bpo-31904: remove libnet dependency from detect_socket() for VxWorks - -- bpo-42398: Fix a race condition in "make regen-all" when make -jN option - is used to run jobs in parallel. The clinic.py script now only use atomic - write to write files. Moveover, generated files are now left unchanged if - the content does not change, to not change the file modification time. - -- bpo-41617: Fix building ``pycore_bitutils.h`` internal header on old clang - version without ``__builtin_bswap16()`` (ex: Xcode 4.6.3 on Mac OS X - 10.7). Patch by Joshua Root and Victor Stinner. - -- bpo-38823: It is no longer possible to build the ``_ctypes`` extension - module without :c:type:`wchar_t` type: remove ``CTYPES_UNICODE`` macro. - Anyway, the :c:type:`wchar_t` type is required to build Python. Patch by - Victor Stinner. - -- bpo-42087: Support was removed for AIX 5.3 and below. See :issue:`40680`. - -- bpo-40998: Addressed three compiler warnings found by undefined behavior - sanitizer (ubsan). - -Windows -------- - -- bpo-42120: Remove macro definition of ``copysign`` (to ``_copysign``) in - headers. - -- bpo-38506: The Windows launcher now properly handles Python 3.10 when - listing installed Python versions. - -macOS ------ - -- bpo-42504: Fix build on macOS Big Sur when MACOSX_DEPLOYMENT_TARGET=11 - -- bpo-41116: Ensure distutils.unixxcompiler.find_library_file can find - system provided libraries on macOS 11. - -- bpo-41100: Add support for macOS 11 and Apple Silicon systems. - - It is now possible to build "Universal 2" binaries using - "--enable-universalsdk --with-universal-archs=universal2". - - Binaries build on later macOS versions can be deployed back to older - versions (tested up to macOS 10.9), when using the correct deployment - target. This is tested using Xcode 11 and later. - -- bpo-42232: Added Darwin specific madvise options to mmap module. - -- bpo-38443: The ``--enable-universalsdk`` and ``--with-universal-archs`` - options for the configure script now check that the specified - architectures can be used. - -IDLE ----- - -- bpo-42508: Keep IDLE running on macOS. Remove obsolete workaround that - prevented running files with shortcuts when using new universal2 - installers built on macOS 11. - -- bpo-42426: Fix reporting offset of the RE error in searchengine. - -- bpo-42415: Get docstrings for IDLE calltips more often by using - inspect.getdoc. - -Tools/Demos ------------ - -- bpo-42212: The smelly.py script now also checks the Python dynamic library - and extension modules, not only the Python static library. Make also the - script more verbose: explain what it does. - -- bpo-36310: Allow :file:`Tools/i18n/pygettext.py` to detect calls to - ``gettext`` in f-strings. - -C API ------ - -- bpo-42423: The :c:func:`PyType_FromSpecWithBases` and - :c:func:`PyType_FromModuleAndSpec` functions now accept a single class as - the *bases* argument. - -- bpo-1635741: Port :mod:`select` extension module to multiphase - initialization (:pep:`489`). - -- bpo-1635741: Port _posixsubprocess extension module to multiphase - initialization (:pep:`489`). - -- bpo-1635741: Port _posixshmem extension module to multiphase - initialization (:pep:`489`) - -- bpo-1635741: Port _struct extension module to multiphase initialization - (:pep:`489`) - -- bpo-1635741: Port :mod:`!spwd` extension module to multiphase - initialization (:pep:`489`) - -- bpo-1635741: Port :mod:`gc` extension module to multiphase initialization - (:pep:`489`) - -- bpo-1635741: Port _queue extension module to multiphase initialization - (:pep:`489`) - -- bpo-39573: Convert :c:func:`Py_TYPE` and :c:func:`Py_SIZE` back to macros - to allow using them as an l-value. Many third party C extension modules - rely on the ability of using Py_TYPE() and Py_SIZE() to set an object type - and size: ``Py_TYPE(obj) = type;`` and ``Py_SIZE(obj) = size;``. - -- bpo-1635741: Port :mod:`symtable` extension module to multiphase - initialization (:pep:`489`) - -- bpo-1635741: Port :mod:`grp` and :mod:`pwd` extension modules to - multiphase initialization (:pep:`489`) - -- bpo-1635741: Port _random extension module to multiphase initialization - (:pep:`489`) - -- bpo-1635741: Port _hashlib extension module to multiphase initialization - (:pep:`489`) - -- bpo-41713: Removed the undocumented ``PyOS_InitInterrupts()`` function. - Initializing Python already implicitly installs signal handlers: see - :c:member:`PyConfig.install_signal_handlers`. Patch by Victor Stinner. - -- bpo-40170: The ``Py_TRASHCAN_BEGIN`` macro no longer accesses PyTypeObject - attributes, but now can get the condition by calling the new private - :c:func:`!_PyTrash_cond()` function which hides implementation details. - -- bpo-42260: :c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, - :c:func:`Py_GetExecPrefix`, :c:func:`Py_GetProgramFullPath`, - :c:func:`Py_GetPythonHome` and :c:func:`Py_GetProgramName` functions now - return ``NULL`` if called before :c:func:`Py_Initialize` (before Python is - initialized). Use the new :ref:`Python Initialization Configuration API - <init-config>` to get the :ref:`Python Path Configuration. - <init-path-config>`. Patch by Victor Stinner. - -- bpo-42260: The :c:func:`PyConfig_Read` function now only parses - :c:member:`PyConfig.argv` arguments once: :c:member:`PyConfig.parse_argv` - is set to ``2`` after arguments are parsed. Since Python arguments are - strippped from :c:member:`PyConfig.argv`, parsing arguments twice would - parse the application options as Python options. - -- bpo-42262: Added :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to - increment the reference count of an object and return the object. Patch by - Victor Stinner. - -- bpo-42260: When :c:func:`Py_Initialize` is called twice, the second call - now updates more :mod:`sys` attributes for the configuration, rather than - only :data:`sys.argv`. Patch by Victor Stinner. - -- bpo-41832: The :c:func:`PyType_FromModuleAndSpec` function now accepts - NULL ``tp_doc`` slot. - -- bpo-1635741: Added :c:func:`PyModule_AddObjectRef` function: similar to - :c:func:`PyModule_AddObject` but don't steal a reference to the value on - success. Patch by Victor Stinner. - -- bpo-42171: The :c:macro:`METH_FASTCALL` calling convention is added to the - limited API. The functions :c:func:`PyModule_AddType`, - :c:func:`PyType_FromModuleAndSpec`, :c:func:`PyType_GetModule` and - :c:func:`PyType_GetModuleState` are added to the limited API on Windows. - -- bpo-42085: Add dedicated entry to PyAsyncMethods for sending values - -- bpo-41073: :c:func:`PyType_GetSlot()` can now accept static types. - -- bpo-30459: :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and - :c:func:`PyCell_SET` macros can no longer be used as l-value or r-value. - For example, ``x = PyList_SET_ITEM(a, b, c)`` and ``PyList_SET_ITEM(a, b, - c) = x`` now fail with a compiler error. It prevents bugs like ``if - (PyList_SET_ITEM (a, b, c) < 0) ...`` test. Patch by Zackery Spytz and - Victor Stinner. - - -What's New in Python 3.10.0 alpha 2? -==================================== - -*Release date: 2020-11-03* - -Security --------- - -- bpo-42103: Prevented potential DoS attack via CPU and RAM exhaustion when - processing malformed Apple Property List files in binary format. - -- bpo-42051: The :mod:`plistlib` module no longer accepts entity - declarations in XML plist files to avoid XML vulnerabilities. This should - not affect users as entity declarations are not used in regular plist - files. - -Core and Builtins ------------------ - -- bpo-42236: If the ``nl_langinfo(CODESET)`` function returns an empty - string, Python now uses UTF-8 as the filesystem encoding. Patch by Victor - Stinner. - -- bpo-42218: Fixed a bug in the PEG parser that was causing crashes in debug - mode. Now errors are checked in left-recursive rules to avoid cases where - such errors do not get handled in time and appear as long-distance crashes - in other places. - -- bpo-42214: Fixed a possible crash in the PEG parser when checking for the - '!=' token in the ``barry_as_flufl`` rule. Patch by Pablo Galindo. - -- bpo-42206: Propagate and raise the errors caused by - :c:func:`PyAST_Validate` in the parser. - -- bpo-41796: The :mod:`ast` module internal state is now per interpreter. - Patch by Victor Stinner. - -- bpo-42143: Fix handling of errors during creation of ``PyFunctionObject``, - which resulted in operations on uninitialized memory. Patch by Yonatan - Goldschmidt. - -- bpo-41659: Fix a bug in the parser, where a curly brace following a - ``primary`` didn't fail immediately. This led to invalid expressions like - ``a {b}`` to throw a :exc:`SyntaxError` with a wrong offset, or invalid - expressions ending with a curly brace like ``a {`` to not fail immediately - in the REPL. - -- bpo-42150: Fix possible buffer overflow in the new parser when checking - for continuation lines. Patch by Pablo Galindo. - -- bpo-42123: Run the parser two times. On the first run, disable all the - rules that only generate better error messages to gain performance. If - there's a parse failure, run the parser a second time with those enabled. - -- bpo-42093: The ``LOAD_ATTR`` instruction now uses new "per opcode cache" - mechanism and it is about 36% faster now. Patch by Pablo Galindo and Yury - Selivanov. - -- bpo-42030: Support for the legacy AIX-specific shared library loading - support has been removed. All versions of AIX since 4.3 have supported and - defaulted to using the common Unix mechanism instead. - -- bpo-41984: The garbage collector now tracks all user-defined classes. - Patch by Brandt Bucher. - -- bpo-41993: Fixed potential issues with removing not completely initialized - module from ``sys.modules`` when import fails. - -- bpo-41979: Star-unpacking is now allowed for with item's targets in the - PEG parser. - -- bpo-41974: Removed special methods ``__int__``, ``__float__``, - ``__floordiv__``, ``__mod__``, ``__divmod__``, ``__rfloordiv__``, - ``__rmod__`` and ``__rdivmod__`` of the :class:`complex` class. They - always raised a :exc:`TypeError`. - -- bpo-41902: Micro optimization when compute - :c:member:`~PySequenceMethods.sq_item` and - :c:member:`~PyMappingMethods.mp_subscript` of :class:`range`. Patch by - Donghee Na. - -- bpo-41894: When loading a native module and a load failure occurs, prevent - a possible UnicodeDecodeError when not running in a UTF-8 locale by - decoding the load error message using the current locale's encoding. - -- bpo-41902: Micro optimization for range.index if step is 1. Patch by - Donghee Na. - -Library -------- - -- bpo-41435: Add ``sys._current_exceptions()`` function to retrieve a - dictionary mapping each thread's identifier to the topmost exception - currently active in that thread at the time the function is called. - -Core and Builtins ------------------ - -- bpo-38605: Enable ``from __future__ import annotations`` (:pep:`563`) by - default. The values found in :attr:`~object.__annotations__` dicts are now - strings, for example ``{"x": "int"}`` instead of ``{"x": int}``. - -Library -------- - -- bpo-35455: On Solaris, :func:`~time.thread_time` is now implemented with - ``gethrvtime()`` because ``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` is not - always available. Patch by Jakub Kulik. - -- bpo-42233: The :func:`repr` of :mod:`typing` types containing - :ref:`Generic Alias Types <types-genericalias>` previously did not show - the parameterized types in the ``GenericAlias``. They have now been - changed to do so. - -- bpo-29566: ``binhex.binhex()`` consistently writes macOS 9 line endings. - -- bpo-26789: The :class:`logging.FileHandler` class now keeps a reference to - the builtin :func:`open` function to be able to open or reopen the file - during Python finalization. Fix errors like: ``NameError: name 'open' is - not defined``. Patch by Victor Stinner. - -- bpo-42157: Removed the ``unicodedata.ucnhash_CAPI`` attribute which was an - internal PyCapsule object. The related private ``_PyUnicode_Name_CAPI`` - structure was moved to the internal C API. Patch by Victor Stinner. - -- bpo-42157: Convert the :mod:`unicodedata` extension module to the - multiphase initialization API (:pep:`489`) and convert the - ``unicodedata.UCD`` static type to a heap type. Patch by Mohamed Koubaa - and Victor Stinner. - -- bpo-42146: Fix memory leak in :func:`subprocess.Popen` in case an uid - (gid) specified in ``user`` (``group``, ``extra_groups``) overflows - ``uid_t`` (``gid_t``). - -- bpo-42103: :exc:`~plistlib.InvalidFileException` and :exc:`RecursionError` - are now the only errors caused by loading malformed binary Plist file - (previously ValueError and TypeError could be raised in some specific - cases). - -- bpo-41490: In ``importlib.resources``, ``.path`` method is more aggressive - about releasing handles to zipfile objects early, enabling use-cases like - certifi to leave the context open but delete the underlying zip file. - -- bpo-41052: Pickling heap types implemented in C with protocols 0 and 1 - raises now an error instead of producing incorrect data. - -- bpo-42089: In ``importlib.metadata.PackageNotFoundError``, make reference - to the package metadata being missing to improve the user experience. - -- bpo-41491: plistlib: fix parsing XML plists with hexadecimal integer - values - -- bpo-42065: Fix an incorrectly formatted error from - :meth:`!_codecs.charmap_decode` when called with a mapped value outside - the range of valid Unicode code points. PR by Max Bernstein. - -- bpo-41966: Fix pickling pure Python :class:`datetime.time` subclasses. - Patch by Dean Inwood. - -- bpo-19270: :meth:`sched.scheduler.cancel` will now cancel the correct - event, if two events with same priority are scheduled for the same time. - Patch by Bar Harel. - -- bpo-28660: :func:`textwrap.wrap` now attempts to break long words after - hyphens when ``break_long_words=True`` and ``break_on_hyphens=True``. - -- bpo-35823: Use ``vfork()`` instead of ``fork()`` for - :func:`subprocess.Popen` on Linux to improve performance in cases where it - is deemed safe. - -- bpo-42043: Add support for ``zipfile.Path`` inheritance. - ``zipfile.Path.is_file()`` now returns False for non-existent names. - ``zipfile.Path`` objects now expose a ``.filename`` attribute and rely on - that to resolve ``.name`` and ``.parent`` when the ``Path`` object is at - the root of the zipfile. - -- bpo-42021: Fix possible ref leaks in :mod:`sqlite3` module init. - -- bpo-39101: Fixed tests using IsolatedAsyncioTestCase from hanging on - BaseExceptions. - -- bpo-41976: Fixed a bug that was causing :func:`ctypes.util.find_library` - to return ``None`` when triying to locate a library in an environment when - gcc>=9 is available and ``ldconfig`` is not. Patch by Pablo Galindo - -- bpo-41943: Fix bug where TestCase.assertLogs doesn't correctly filter - messages by level. - -- bpo-41923: Implement :pep:`613`, introducing :data:`typing.TypeAlias` - annotation. - -- bpo-41905: A new function in abc: *update_abstractmethods* to re-calculate - an abstract class's abstract status. In addition, *dataclass* has been - changed to call this function. - -- bpo-23706: Added *newline* parameter to ``pathlib.Path.write_text()``. - -- bpo-41876: Tkinter font class repr uses font name - -- bpo-41831: ``str()`` for the ``type`` attribute of the ``tkinter.Event`` - object always returns now the numeric code returned by Tk instead of the - name of the event type. - -- bpo-39337: :func:`encodings.normalize_encoding` now ignores non-ASCII - characters. - -- bpo-41747: Ensure all methods that generated from - :func:`dataclasses.dataclass` objects now have the proper ``__qualname__`` - attribute referring to the class they belong to. Patch by Batuhan Taskaya. - -- bpo-30681: Handle exceptions caused by unparsable date headers when using - email "default" policy. Patch by Tim Bell, Georges Toth - -- bpo-41586: Add F_SETPIPE_SZ and F_GETPIPE_SZ to fcntl module. Allow - setting pipesize on subprocess.Popen. - -- bpo-41229: Add ``contextlib.aclosing`` for deterministic cleanup of async - generators which is analogous to ``contextlib.closing`` for non-async - generators. Patch by Joongi Kim and John Belmonte. - -- bpo-16396: Allow ``ctypes.wintypes`` to be imported on non-Windows - systems. - -- bpo-4356: Add a key function to the bisect module. - -- bpo-40592: :func:`shutil.which` now ignores empty entries in - :envvar:`PATHEXT` instead of treating them as a match. - -- bpo-40492: Fix ``--outfile`` for :mod:`cProfile` / :mod:`profile` not - writing the output file in the original directory when the program being - profiled changes the working directory. PR by Anthony Sottile. - -- bpo-34204: The :mod:`shelve` module now uses - :const:`pickle.DEFAULT_PROTOCOL` by default instead of :mod:`pickle` - protocol ``3``. - -- bpo-27321: Fixed KeyError exception when flattening an email to a string - attempts to replace a non-existent Content-Transfer-Encoding header. - -- bpo-38976: The :mod:`http.cookiejar` module now supports the parsing of - cookies in CURL-style cookiejar files through MozillaCookieJar on all - platforms. Previously, such cookie entries would be silently ignored when - loading a cookiejar with such entries. - - Additionally, the HTTP Only attribute is persisted in the object, and will - be correctly written to file if the MozillaCookieJar object is - subsequently dumped. - -Documentation -------------- - -- bpo-42061: Document __format__ functionality for IP addresses. - -- bpo-41910: Document the default implementation of ``object.__eq__``. - -- bpo-42010: Clarify that subscription expressions are also valid for - certain :term:`classes <class>` and :term:`types <type>` in the standard - library, and for user-defined classes and types if the classmethod - :meth:`__class_getitem__` is provided. - -- bpo-41805: Documented :ref:`generic alias type <types-genericalias>` and - :data:`types.GenericAlias`. Also added an entry in glossary for - :term:`generic types <generic type>`. - -- bpo-39693: Fix tarfile's extractfile documentation - -- bpo-39416: Document some restrictions on the default string - representations of numeric classes. - -Tests ------ - -- bpo-41739: Fix test_logging.test_race_between_set_target_and_flush(): the - test now waits until all threads complete to avoid leaking running - threads. - -- bpo-41970: Avoid a test failure in ``test_lib2to3`` if the module has - already imported at the time the test executes. Patch by Pablo Galindo. - -- bpo-41944: Tests for CJK codecs no longer call ``eval()`` on content - received via HTTP. - -- bpo-41306: Fixed a failure in ``test_tk.test_widgets.ScaleTest`` happening - when executing the test with Tk 8.6.10. - -Build ------ - -- bpo-38980: Add ``-fno-semantic-interposition`` to both the compile and - link line when building with ``--enable-optimizations``. Patch by Victor - Stinner and Pablo Galindo. - -Windows -------- - -- bpo-38439: Updates the icons for IDLE in the Windows Store package. - -- bpo-38252: Use 8-byte step to detect ASCII sequence in 64-bit Windows - build. - -- bpo-39107: Update Tcl and Tk to 8.6.10 in Windows installer. - -- bpo-41557: Update Windows installer to use SQLite 3.33.0. - -- bpo-38324: Avoid Unicode errors when accessing certain locale data on - Windows. - -macOS ------ - -- bpo-41471: Ignore invalid prefix lengths in system proxy excludes. - -IDLE ----- - -- bpo-33987: Mostly finish using ttk widgets, mainly for editor, settings, - and searches. Some patches by Mark Roseman. - -- bpo-40511: Typing opening and closing parentheses inside the parentheses - of a function call will no longer cause unnecessary "flashing" off and on - of an existing open call-tip, e.g. when typed in a string literal. - -- bpo-38439: Add a 256×256 pixel IDLE icon to the Windows .ico file. Created - by Andrew Clover. Remove the low-color gif variations from the .ico file. - -C API ------ - -- bpo-42157: The private ``_PyUnicode_Name_CAPI`` structure of the PyCapsule - API ``unicodedata.ucnhash_CAPI`` has been moved to the internal C API. - Patch by Victor Stinner. - -- bpo-42015: Fix potential crash in deallocating method objects when - dynamically allocated :c:type:`PyMethodDef`'s lifetime is managed through - the ``self`` argument of a :c:type:`PyCFunction`. - -- bpo-40423: The :mod:`subprocess` module and ``os.closerange`` will now use - the ``close_range(low, high, flags)`` syscall when it is available for - more efficient closing of ranges of descriptors. - -- bpo-41845: :c:func:`PyObject_GenericGetDict` is available again in the - limited API when targeting 3.10 or later. - -- bpo-40422: Add ``_Py_closerange`` function to provide performant closing - of a range of file descriptors. - -- bpo-41986: :c:data:`!Py_FileSystemDefaultEncodeErrors` and - :c:data:`!Py_UTF8Mode` are available again in limited API. - -- bpo-41756: Add ``PyIter_Send`` function to allow sending value into - generator/coroutine/iterator without raising StopIteration exception to - signal return. - -- bpo-41784: Added ``PyUnicode_AsUTF8AndSize`` to the limited C API. - - -What's New in Python 3.10.0 alpha 1? -==================================== - -*Release date: 2020-10-05* - -Security --------- - -- bpo-41304: Fixes ``python3x._pth`` being ignored on Windows, caused by the - fix for :issue:`29778` (:cve:`2020-15801`). - -- bpo-41162: Audit hooks are now cleared later during finalization to avoid - missing events. - -- bpo-29778: Ensure :file:`python3.dll` is loaded from correct locations - when Python is embedded (:cve:`2020-15523`). - -- bpo-41004: The __hash__() methods of ipaddress.IPv4Interface and - ipaddress.IPv6Interface incorrectly generated constant hash values of 32 - and 128 respectively. This resulted in always causing hash collisions. The - fix uses hash() to generate hash values for the tuple of (address, mask - length, network address). - -- bpo-39603: Prevent http header injection by rejecting control characters - in http.client.putrequest(...). - -Core and Builtins ------------------ - -- bpo-41909: Fixed stack overflow in :func:`issubclass` and - :func:`isinstance` when getting the ``__bases__`` attribute leads to - infinite recursion. - -- bpo-41922: Speed up calls to ``reversed()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-41873: Calls to ``float()`` are now faster due to the ``vectorcall`` - calling convention. Patch by Dennis Sweeney. - -- bpo-41870: Speed up calls to ``bool()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -Library -------- - -- bpo-1635741: Port the :mod:`!_bisect` module to the multi-phase - initialization API (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-39934: Correctly count control blocks in 'except' in compiler. Ensures - that a syntax error, rather a fatal error, occurs for deeply nested, named - exception handlers. - -- bpo-41780: Fix :meth:`__dir__` of :class:`types.GenericAlias`. Patch by - Batuhan Taskaya. - -Library -------- - -- bpo-1635741: Port the :mod:`!_lsprof` extension module to multi-phase - initialization (:pep:`489`). - -- bpo-1635741: Port the :mod:`cmath` extension module to multi-phase - initialization (:pep:`489`). - -- bpo-1635741: Port the :mod:`!_scproxy` extension module to multi-phase - initialization (:pep:`489`). - -- bpo-1635741: Port the :mod:`termios` extension module to multi-phase - initialization (:pep:`489`). - -- bpo-1635741: Convert the :mod:`!_sha256` extension module types to heap - types. - -Core and Builtins ------------------ - -- bpo-41690: Fix a possible stack overflow in the parser when parsing - functions and classes with a huge amount of arguments. Patch by Pablo - Galindo. - -Library -------- - -- bpo-1635741: Port the :mod:`!_overlapped` extension module to multi-phase - initialization (:pep:`489`). - -- bpo-1635741: Port the :mod:`!_curses_panel` extension module to - multi-phase initialization (:pep:`489`). - -- bpo-1635741: Port the :mod:`!_opcode` extension module to multi-phase - initialization (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-41681: Fixes the wrong error description in the error raised by using - 2 ``,`` in format string in f-string and :meth:`str.format`. - -Library -------- - -- bpo-41675: The implementation of :func:`signal.siginterrupt` now uses - :c:func:`!sigaction` (if it is available in the system) instead of the - deprecated :c:func:`!siginterrupt`. Patch by Pablo Galindo. - -Core and Builtins ------------------ - -- bpo-41670: Prevent line trace being skipped on platforms not compiled with - ``USE_COMPUTED_GOTOS``. Fixes issue where some lines nested within a - try-except block were not being traced on Windows. - -- bpo-41654: Fix a crash that occurred when destroying subclasses of - :class:`MemoryError`. Patch by Pablo Galindo. - -Library -------- - -- bpo-1635741: Port the :mod:`zlib` extension module to multi-phase - initialization (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-41631: The ``_ast`` module uses again a global state. Using a module - state per module instance is causing subtle practical problems. For - example, the Mercurial project replaces the ``__import__()`` function to - implement lazy import, whereas Python expected that ``import _ast`` always - return a fully initialized ``_ast`` module. - -Library -------- - -- bpo-40077: Convert :mod:`!_operator` to use :c:func:`PyType_FromSpec`. - -Core and Builtins ------------------ - -- bpo-1653741: Port :mod:`!_sha3` to multi-phase init. Convert static types - to heap types. - -Library -------- - -- bpo-1635741: Port the :mod:`!_blake2` extension module to the multi-phase - initialization API (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-41533: Free the stack allocated in ``va_build_stack`` if - ``do_mkstack`` fails and the stack is not a ``small_stack``. - -- bpo-41531: Fix a bug that was dropping keys when compiling dict literals - with more than 0xFFFF elements. Patch by Pablo Galindo. - -- bpo-41525: The output of ``python --help`` contains now only ASCII - characters. - -Library -------- - -- bpo-1635741: Port the :mod:`!_sha1`, :mod:`!_sha512`, and :mod:`!_md5` - extension modules to multi-phase initialization API (:pep:`489`). - -Core and Builtins ------------------ - -- bpo-41431: Optimize ``dict_merge()`` for copying dict (e.g. ``dict(d)`` - and ``{}.update(d)``). - -- bpo-41428: Implement PEP 604. This supports (int | str) etc. in place of - Union[str, int]. - -- bpo-41340: Removed fallback implementation for ``strdup``. - -- bpo-38156: Handle interrupts that come after EOF correctly in - ``PyOS_StdioReadline``. - -- bpo-41342: :func:`round` with integer argument is now faster (9--60%). - -- bpo-41334: Constructors :func:`str`, :func:`bytes` and :func:`bytearray` - are now faster (around 30--40% for small objects). - -- bpo-41295: Resolve a regression in CPython 3.8.4 where defining - "__setattr__" in a multi-inheritance setup and calling up the hierarchy - chain could fail if builtins/extension types were involved in the base - types. - -- bpo-41323: Bytecode optimizations are performed directly on the control - flow graph. This will result in slightly more compact code objects in some - circumstances. - -- bpo-41247: Always cache the running loop holder when running - ``asyncio.set_running_loop``. - -- bpo-41252: Fix incorrect refcounting in _ssl.c's - ``_servername_callback()``. - -- bpo-1635741: Port :mod:`multiprocessing` to multi-phase initialization - -Library -------- - -- bpo-1635741: Port :mod:`winapi` to multiphase initialization - -Core and Builtins ------------------ - -- bpo-41215: Use non-NULL default values in the PEG parser keyword list to - overcome a bug that was preventing Python from being properly compiled - when using the XLC compiler. Patch by Pablo Galindo. - -- bpo-41218: Python 3.8.3 had a regression where compiling with - ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension - with CO_COROUTINE. Now only list comprehension making use of async/await - will tagged as so. - -Library -------- - -- bpo-1635741: Port :mod:`faulthandler` to multiphase initialization. - -- bpo-1635741: Port :mod:`sha256` to multiphase initialization - -Core and Builtins ------------------ - -- bpo-41175: Guard against a NULL pointer dereference within bytearrayobject - triggered by the ``bytearray() + bytearray()`` operation. - -- bpo-41100: add arm64 to the allowable Mac OS arches in mpdecimal.h - -- bpo-41094: Fix decoding errors with audit when open files with non-ASCII - names on non-UTF-8 locale. - -- bpo-39960: The "hackcheck" that prevents sneaking around a type's - __setattr__() by calling the superclass method was rewritten to allow C - implemented heap types. - -- bpo-41084: Prefix the error message with 'f-string: ', when parsing an - f-string expression which throws a :exc:`SyntaxError`. - -- bpo-40521: Empty frozensets are no longer singletons. - -- bpo-41076: Pre-feed the parser with the location of the f-string - expression, not the f-string itself, which allows us to skip the shifting - of the AST node locations after the parsing is completed. - -- bpo-41056: Fixes a reference to deallocated stack space during startup - when constructing sys.path involving a relative symlink when code was - supplied via -c. (discovered via Coverity) - -- bpo-41061: Fix incorrect expressions and asserts in hashtable code and - tests. - -- bpo-41052: Opt out serialization/deserialization for _random.Random - -- bpo-40939: Rename ``PyPegen*`` functions to ``PyParser*``, so that we can - remove the old set of ``PyParser*`` functions that were using the old - parser, but keep everything backwards-compatible. - -- bpo-35975: Stefan Behnel reported that cf_feature_version is used even - when PyCF_ONLY_AST is not set. This is against the intention and against - the documented behavior, so it's been fixed. - -- bpo-40939: Remove the remaining files from the old parser and the - :mod:`symbol` module. - -Library -------- - -- bpo-40077: Convert :mod:`!_bz2` to use :c:func:`PyType_FromSpec`. - -Core and Builtins ------------------ - -- bpo-41006: The ``encodings.latin_1`` module is no longer imported at - startup. Now it is only imported when it is the filesystem encoding or the - stdio encoding. - -- bpo-40636: :func:`zip` now supports :pep:`618`'s ``strict`` parameter, - which raises a :exc:`ValueError` if the arguments are exhausted at - different lengths. Patch by Brandt Bucher. - -- bpo-1635741: Port :mod:`!_gdbm` to multiphase initialization. - -- bpo-40985: Fix a bug that caused the :exc:`SyntaxError` text to be empty - when a file ends with a line ending in a line continuation character (i.e. - backslash). The error text should contain the text of the last line. - -- bpo-40958: Fix a possible buffer overflow in the PEG parser when gathering - information for emitting syntax errors. Patch by Pablo Galindo. - -- bpo-1635741: Port :mod:`!_dbm` to multiphase initialization. - -- bpo-40957: Fix refleak in _Py_fopen_obj() when PySys_Audit() fails - -Library -------- - -- bpo-40950: Add a state to the :mod:`!nis` module (:pep:`3121`) and apply - the multiphase initialization. Patch by Donghee Na. - -Core and Builtins ------------------ - -- bpo-40947: The Python :ref:`Path Configuration <init-path-config>` now - takes :c:member:`PyConfig.platlibdir` in account. - -- bpo-40939: Remove the old parser, the :mod:`parser` module and all - associated support code, command-line options and environment variables. - Patch by Pablo Galindo. - -- bpo-40847: Fix a bug where a line with only a line continuation character - is not considered a blank line at tokenizer level. In such cases, more - than a single ``NEWLINE`` token was emitted. The old parser was working - around the issue, but the new parser threw a :exc:`SyntaxError` for valid - input due to this. For example, an empty line following a line - continuation character was interpreted as a :exc:`SyntaxError`. - -- bpo-40890: Each dictionary view now has a ``mapping`` attribute that - provides a :class:`types.MappingProxyType` wrapping the original - dictionary. Patch contributed by Dennis Sweeney. - -- bpo-40889: Improved the performance of symmetric difference operations on - dictionary item views. Patch by Dennis Sweeney. - -- bpo-40904: Fix possible segfault in the new PEG parser when parsing - f-string containing yield statements with no value (:code:`f"{yield}"`). - Patch by Pablo Galindo - -- bpo-40903: Fixed a possible segfault in the new PEG parser when producing - error messages for invalid assignments of the form :code:`p=p=`. Patch by - Pablo Galindo - -- bpo-40880: Fix invalid memory read in the new parser when checking - newlines in string literals. Patch by Pablo Galindo. - -- bpo-40883: Fix memory leak in when parsing f-strings in the new parser. - Patch by Pablo Galindo - -- bpo-40870: Raise :exc:`ValueError` when validating custom AST's where the - constants ``True``, ``False`` and ``None`` are used within a - :class:`ast.Name` node. - -- bpo-40854: Allow overriding :data:`sys.platlibdir` via a new - :envvar:`PYTHONPLATLIBDIR` environment variable. - -- bpo-40826: Fix GIL usage in :c:func:`PyOS_Readline`: lock the GIL to set - an exception and pass the Python thread state when checking if there is a - pending signal. - -- bpo-1635741: Port :mod:`fcntl` to multiphase initialization. - -- bpo-19468: Delete unnecessary instance check in importlib.reload(). Patch - by Furkan Önder. - -- bpo-40824: Unexpected errors in calling the ``__iter__`` method are no - longer masked by ``TypeError`` in the :keyword:`in` operator and functions - :func:`~operator.contains`, :func:`~operator.indexOf` and - :func:`~operator.countOf` of the :mod:`operator` module. - -- bpo-40792: Attributes ``start``, ``stop`` and ``step`` of the - :class:`range` object now always has exact type :class:`int`. Previously, - they could have been an instance of a subclass of ``int``. - -- bpo-40780: Fix a corner case where g-style string formatting of a float - failed to remove trailing zeros. - -- bpo-38964: When there's a :exc:`SyntaxError` in the expression part of an - fstring, the filename attribute of the :exc:`SyntaxError` gets correctly - set to the name of the file the fstring resides in. - -- bpo-40750: Support the "-d" debug flag in the new PEG parser. Patch by - Pablo Galindo - -- bpo-40217: Instances of types created with - :c:func:`PyType_FromSpecWithBases` will no longer automatically visit - their class object when traversing references in the garbage collector. - The user is expected to manually visit the object's class. Patch by Pablo - Galindo. - -- bpo-39573: :c:func:`Py_TYPE()` is changed to the inline static function. - Patch by Donghee Na. - -- bpo-40696: Fix a hang that can arise after :meth:`generator.throw` due to - a cycle in the exception context chain. - -- bpo-40521: Each interpreter now its has own free lists, singletons and - caches: - - * Free lists: float, tuple, list, dict, frame, context, - asynchronous generator, MemoryError. - * Singletons: empty tuple, empty bytes string, empty Unicode string, - single byte character, single Unicode (latin1) character. - * Slice cache. - - They are no longer shared by all interpreters. - -- bpo-40679: Certain :exc:`TypeError` messages about missing or extra - arguments now include the function's :term:`qualified name`. Patch by - Dennis Sweeney. - -- bpo-29590: Make the stack trace correct after calling - :meth:`generator.throw` on a generator that has yielded from a ``yield - from``. - -- bpo-4022: Improve performance of generators by not raising internal - StopIteration. - -Library -------- - -- bpo-1635741: Port :mod:`mmap` to multiphase initialization. - -- bpo-1635741: Port :mod:`!_lzma` to multiphase initialization. - -Core and Builtins ------------------ - -- bpo-37999: Builtin and extension functions that take integer arguments no - longer accept :class:`~decimal.Decimal`\ s, :class:`~fractions.Fraction`\ - s and other objects that can be converted to integers only with a loss - (e.g. that have the :meth:`~object.__int__` method but do not have the - :meth:`~object.__index__` method). - -- bpo-29882: Add :meth:`int.bit_count`, counting the number of ones in the - binary representation of an integer. Patch by Niklas Fiekas. - -Library -------- - -- bpo-36982: Use ncurses extended color functions when available to support - terminals with 256 colors, and add the new function - :func:`curses.has_extended_color_support` to indicate whether extended - color support is provided by the underlying ncurses library. - -Core and Builtins ------------------ - -- bpo-19569: Add the private macros ``_Py_COMP_DIAG_PUSH``, - ``_Py_COMP_DIAG_IGNORE_DEPR_DECLS``, and ``_Py_COMP_DIAG_POP``. - -- bpo-26680: The int type now supports the x.is_integer() method for - compatibility with float. - -Library -------- - -- bpo-41900: C14N 2.0 serialisation in xml.etree.ElementTree failed for - unprefixed attributes when a default namespace was defined. - -- bpo-41887: Strip leading spaces and tabs on :func:`ast.literal_eval`. Also - document stripping of spaces and tabs for :func:`eval`. - -- bpo-41773: Note in documentation that :func:`random.choices` doesn't - support non-finite weights, raise :exc:`ValueError` when given non-finite - weights. - -- bpo-41840: Fix a bug in the :mod:`symtable` module that was causing - module-scope global variables to not be reported as both local and global. - Patch by Pablo Galindo. - -- bpo-41842: Add :func:`codecs.unregister` function to unregister a codec - search function. - -- bpo-40564: In ``zipfile.Path``, mutate the passed ZipFile object type - instead of making a copy. Prevents issues when both the local copy and the - caller’s copy attempt to close the same file handle. - -- bpo-40670: More reliable validation of statements in - :class:`timeit.Timer`. It now accepts "empty" statements (only whitespaces - and comments) and rejects misindentent statements. - -- bpo-41833: The :class:`threading.Thread` constructor now uses the target - name if the *target* argument is specified but the *name* argument is - omitted. - -- bpo-41817: fix ``tkinter.EventType`` Enum so all members are strings, and - none are tuples - -- bpo-41810: :data:`types.EllipsisType`, :data:`types.NotImplementedType` - and :data:`types.NoneType` have been reintroduced, providing a new set of - types readily interpretable by static type checkers. - -- bpo-41815: Fix SQLite3 segfault when backing up closed database. Patch - contributed by Peter David McCormick. - -- bpo-41816: StrEnum added: it ensures that all members are already strings - or string candidates - -- bpo-41517: fix bug allowing Enums to be extended via multiple inheritance - -- bpo-39587: use the correct mix-in data type when constructing Enums - -- bpo-41792: Add is_typeddict function to typing.py to check if a type is a - TypedDict class - - Previously there was no way to check that without using private API. See - the `relevant issue in python/typing - <https://github.com/python/typing/issues/751>`_. - -- bpo-41789: Honor ``object`` overrides in ``Enum`` class creation - (specifically, ``__str__``, ``__repr__``, ``__format__``, and - ``__reduce_ex__``). - -- bpo-32218: ``enum.Flag`` and ``enum.IntFlag`` members are now iterable. - -- bpo-39651: Fix a race condition in the ``call_soon_threadsafe()`` method - of ``asyncio.ProactorEventLoop``: do nothing if the self-pipe socket has - been closed. - -- bpo-1635741: Port the ``mashal`` extension module to the multi-phase - initialization API (:pep:`489`). - -- bpo-1635741: Port the ``_string`` extension module to the multi-phase - initialization API (:pep:`489`). - -- bpo-41732: Added an :term:`iterator` to :class:`memoryview`. - -- bpo-41720: Fixed :meth:`turtle.Vec2D.__rmul__` for arguments which are not - int or float. - -- bpo-41696: Fix handling of debug mode in :func:`asyncio.run`. This allows - setting ``PYTHONASYNCIODEBUG`` or ``-X dev`` to enable asyncio debug mode - when using :func:`asyncio.run`. - -- bpo-41687: Fix implementation of sendfile to be compatible with Solaris. - -- bpo-41662: No longer override exceptions raised in ``__len__()`` of a - sequence of parameters in :mod:`sqlite3` with - :exc:`~sqlite3.ProgrammingError`. - -- bpo-39010: Restarting a ``ProactorEventLoop`` on Windows no longer logs - spurious ``ConnectionResetErrors``. - -- bpo-41638: :exc:`~sqlite3.ProgrammingError` message for absent parameter - in :mod:`sqlite3` contains now the name of the parameter instead of its - index when parameters are supplied as a dict. - -- bpo-41662: Fixed crash when mutate list of parameters during iteration in - :mod:`sqlite3`. - -- bpo-41513: Improved the accuracy of math.hypot(). Internally, each step - is computed with extra precision so that the result is now almost always - correctly rounded. - -- bpo-41609: The pdb whatis command correctly reports instance methods as - 'Method' rather than 'Function'. - -- bpo-39994: Fixed pprint's handling of dict subclasses that override - __repr__. - -- bpo-32751: When cancelling the task due to a timeout, - :meth:`asyncio.wait_for` will now wait until the cancellation is complete - also in the case when *timeout* is <= 0, like it does with positive - timeouts. - -- bpo-37658: :meth:`asyncio.wait_for` now properly handles races between - cancellation of itself and the completion of the wrapped awaitable. - -- bpo-40782: Change the method asyncio.AbstractEventLoop.run_in_executor to - not be a coroutine. - -- bpo-41520: Fix :mod:`codeop` regression that prevented turning compile - warnings into errors. - -- bpo-41528: turtle uses math module functions to convert degrees to radians - and vice versa and to calculate vector norm - -- bpo-41513: Minor algorithmic improvement to math.hypot() and math.dist() - giving small gains in speed and accuracy. - -- bpo-41503: Fixed a race between setTarget and flush in - logging.handlers.MemoryHandler. - -- bpo-41497: Fix potential UnicodeDecodeError in dis module. - -- bpo-41467: On Windows, fix asyncio ``recv_into()`` return value when the - socket/pipe is closed (:exc:`BrokenPipeError`): return ``0`` rather than - an empty byte string (``b''``). - -- bpo-41425: Make tkinter doc example runnable. - -- bpo-41421: Make an algebraic simplification to random.paretovariate(). It - now is slightly less subject to round-off error and is slightly faster. - Inputs that used to cause ZeroDivisionError now cause an OverflowError - instead. - -- bpo-41440: Add :func:`os.cpu_count` support for VxWorks RTOS. - -- bpo-41316: Fix the :mod:`tarfile` module to write only basename of TAR - file to GZIP compression header. - -- bpo-41384: Raise TclError instead of TypeError when an unknown option is - passed to tkinter.OptionMenu. - -- bpo-41317: Use add_done_callback() in asyncio.loop.sock_accept() to - unsubscribe reader early on cancellation. - -- bpo-41364: Reduce import overhead of :mod:`uuid`. - -- bpo-35328: Set the environment variable ``VIRTUAL_ENV_PROMPT`` at - :mod:`venv` activation. - -- bpo-41341: Recursive evaluation of ``typing.ForwardRef`` in - ``get_type_hints``. - -- bpo-41344: Prevent creating :class:`shared_memory.SharedMemory` objects - with :code:`size=0`. - -- bpo-41333: :meth:`collections.OrderedDict.pop` is now 2 times faster. - -- bpo-41288: Unpickling invalid NEWOBJ_EX opcode with the C implementation - raises now UnpicklingError instead of crashing. - -- bpo-39017: Avoid infinite loop when reading specially crafted TAR files - using the tarfile module (:cve:`2019-20907`). - -- bpo-41273: Speed up any transport using ``_ProactorReadPipeTransport`` by - calling ``recv_into`` instead of ``recv``, thus not creating a new buffer - for each ``recv`` call in the transport's read loop. - -- bpo-41235: Fix the error handling in - :meth:`ssl.SSLContext.load_dh_params`. - -- bpo-41207: In distutils.spawn, restore expectation that DistutilsExecError - is raised when the command is not found. - -- bpo-29727: Register :class:`array.array` as a - :class:`~collections.abc.MutableSequence`. Patch by Pablo Galindo. - -- bpo-39168: Remove the ``__new__`` method of :class:`typing.Generic`. - -- bpo-41194: Fix a crash in the ``_ast`` module: it can no longer be loaded - more than once. It now uses a global state rather than a module state. - -- bpo-41195: Add read-only ssl.SSLContext.security_level attribute to - retrieve the context's security level. - -- bpo-41193: The ``write_history()`` atexit function of the readline - completer now ignores any :exc:`OSError` to ignore error if the filesystem - is read-only, instead of only ignoring :exc:`FileNotFoundError` and - :exc:`PermissionError`. - -- bpo-41182: selector: use DefaultSelector based upon implementation - -- bpo-41161: The decimal module now requires libmpdec-2.5.0. Users of - --with-system-libmpdec should update their system library. - -- bpo-40874: The decimal module now requires libmpdec-2.5.0. - -- bpo-41138: Fixed the :mod:`trace` module CLI for Python source files with - non-UTF-8 encoding. - -- bpo-31082: Use the term "iterable" in the docstring for - :func:`functools.reduce`. - -- bpo-40521: Remove freelist from collections.deque(). - -- bpo-31938: Fix default-value signatures of several functions in the - :mod:`select` module - by Anthony Sottile. - -- bpo-41068: Fixed reading files with non-ASCII names from ZIP archive - directly after writing them. - -- bpo-41058: :func:`pdb.find_function` now correctly determines the source - file encoding. - -- bpo-41056: Invalid file descriptor values are now prevented from being - passed to os.fpathconf. (discovered by Coverity) - -- bpo-41056: Fix a NULL pointer dereference within the ssl module during a - MemoryError in the keylog callback. (discovered by Coverity) - -- bpo-41056: Fixed an instance where a MemoryError within the zoneinfo - module might not be reported or not reported at its source. (found by - Coverity) - -- bpo-41048: :func:`mimetypes.read_mime_types` function reads the rule file - using UTF-8 encoding, not the locale encoding. Patch by Srinivas Reddy - Thatiparthy. - -- bpo-41043: Fixed the use of :func:`~glob.glob` in the stdlib: literal part - of the path is now always correctly escaped. - -- bpo-41025: Fixed an issue preventing the C implementation of - :class:`zoneinfo.ZoneInfo` from being subclassed. - -- bpo-35018: Add the :class:`xml.sax.handler.LexicalHandler` class that is - present in other SAX XML implementations. - -- bpo-41002: Improve performance of HTTPResponse.read with a given amount. - Patch by Bruce Merry. - -- bpo-40448: :mod:`ensurepip` now disables the use of ``pip`` cache when - installing the bundled versions of ``pip`` and ``setuptools``. Patch by - Krzysztof Konopko. - -- bpo-40967: Removed :meth:`!asyncio.Task.current_task` and - :meth:`!asyncio.Task.all_tasks`. Patch contributed by Rémi Lapeyre. - -- bpo-40924: Ensure ``importlib.resources.path`` returns an extant path for - the SourceFileLoader's resource reader. Avoids the regression identified - in master while a long-term solution is devised. - -- bpo-40955: Fix a minor memory leak in :mod:`subprocess` module when - extra_groups was specified. - -- bpo-40855: The standard deviation and variance functions in the statistics - module were ignoring their mu and xbar arguments. - -- bpo-40939: Use the new PEG parser when generating the stdlib - :mod:`keyword` module. - -- bpo-23427: Add :data:`sys.orig_argv` attribute: the list of the original - command line arguments passed to the Python executable. - -- bpo-33689: Ignore empty or whitespace-only lines in .pth files. This - matches the documentated behavior. Before, empty lines caused the - site-packages dir to appear multiple times in sys.path. By Ido Michael, - contributors Malcolm Smith and Tal Einat. - -- bpo-40884: Added a ``defaults`` parameter to :class:`logging.Formatter`, - to allow specifying default values for custom fields. Patch by Asaf Alon - and Bar Harel. - -- bpo-40876: Clarify error message in the :mod:`csv` module. - -- bpo-39791: Refresh importlib.metadata from importlib_metadata 1.6.1. - -- bpo-40807: Stop codeop._maybe_compile, used by code.InteractiveInterpreter - (and IDLE). from emitting each warning three times. - -- bpo-32604: Fix reference leak in the :mod:`select` module when the module - is imported in a subinterpreter. - -- bpo-39791: Built-in loaders (SourceFileLoader and ZipImporter) now supply - ``TraversableResources`` implementations for ``ResourceReader``, and the - fallback function has been removed. - -- bpo-39314: :class:`rlcompleter.Completer` and the standard Python shell - now close the parenthesis for functions that take no arguments. Patch - contributed by Rémi Lapeyre. - -- bpo-17005: The topological sort functionality that was introduced - initially in the :mod:`functools` module has been moved to a new - :mod:`graphlib` module to better accommodate the new tools and keep the - original scope of the :mod:`functools` module. Patch by Pablo Galindo - -- bpo-40834: Fix truncate when sending str object - with_xxsubinterpreters.channel_send. - -- bpo-40755: Add rich comparisons to collections.Counter(). - -- bpo-26407: Unexpected errors in calling the ``__iter__`` method are no - longer masked by ``TypeError`` in :func:`csv.reader`, - :func:`csv.writer.writerow` and :meth:`csv.writer.writerows`. - -- bpo-39384: Fixed email.contentmanager to allow set_content() to set a null - string. - -- bpo-40744: The :mod:`sqlite3` module uses SQLite API functions that - require SQLite v3.7.3 or higher. This patch removes support for older - SQLite versions, and explicitly requires SQLite 3.7.3 both at build, - compile and runtime. Patch by Sergey Fedoseev and Erlend E. Aasland. - -- bpo-40777: Initialize PyDateTime_IsoCalendarDateType.tp_base at run-time - to avoid errors on some compilers. - -- bpo-38488: Update ensurepip to install pip 20.1.1 and setuptools 47.1.0. - -- bpo-40792: The result of :func:`operator.index` now always has exact type - :class:`int`. Previously, the result could have been an instance of a - subclass of ``int``. - -- bpo-40767: :mod:`webbrowser` now properly finds the default browser in - pure Wayland systems by checking the WAYLAND_DISPLAY environment variable. - Patch contributed by Jérémy Attali. - -- bpo-40791: :func:`hashlib.compare_digest` uses OpenSSL's - ``CRYPTO_memcmp()`` function when OpenSSL is available. - -- bpo-40795: :mod:`ctypes` module: If ctypes fails to convert the result of - a callback or if a ctypes callback function raises an exception, - sys.unraisablehook is now called with an exception set. Previously, the - error was logged into stderr by :c:func:`PyErr_Print`. - -- bpo-16995: Add :func:`base64.b32hexencode` and :func:`base64.b32hexdecode` - to support the Base32 Encoding with Extended Hex Alphabet. - -- bpo-30008: Fix :mod:`ssl` code to be compatible with OpenSSL 1.1.x builds - that use ``no-deprecated`` and ``--api=1.1.0``. - -- bpo-30064: Fix asyncio ``loop.sock_*`` race condition issue - -- bpo-40759: Deprecate the :mod:`symbol` module. - -- bpo-40756: The second argument (extra) of ``LoggerAdapter.__init__`` now - defaults to None. - -- bpo-37129: Add a new :const:`os.RWF_APPEND` flag for :func:`os.pwritev`. - -- bpo-40737: Fix possible reference leak for :mod:`sqlite3` initialization. - -- bpo-40726: Handle cases where the ``end_lineno`` is ``None`` on - :func:`ast.increment_lineno`. - -- bpo-40698: ``distutils`` upload creates SHA2-256 and Blake2b-256 digests. - MD5 digests is skipped if platform blocks MD5. - -- bpo-40695: :mod:`hashlib` no longer falls back to builtin hash - implementations when OpenSSL provides a hash digest and the algorithm is - blocked by security policy. - -- bpo-9216: :func:`hashlib.new` passed ``usedforsecurity`` to OpenSSL EVP - constructor ``_hashlib.new()``. test_hashlib and test_smtplib handle - strict security policy better. - -- bpo-40614: :func:`ast.parse` will not parse self documenting expressions - in f-strings when passed ``feature_version`` is less than ``(3, 8)``. - -- bpo-40626: Add h5 file extension as MIME Type application/x-hdf5, as per - HDF Group recommendation for HDF5 formatted data files. Patch contributed - by Mark Schwab. - -- bpo-25920: On macOS, when building Python for macOS 10.4 and older, which - wasn't the case for python.org macOS installer, :func:`socket.getaddrinfo` - no longer uses an internal lock to prevent race conditions when calling - ``getaddrinfo()`` which is thread-safe since macOS 10.5. Python 3.9 - requires macOS 10.6 or newer. The internal lock caused random hang on fork - when another thread was calling :func:`socket.getaddrinfo`. The lock was - also used on FreeBSD older than 5.3, OpenBSD older than 201311 and NetBSD - older than 4. - -- bpo-40671: Prepare ``_hashlib`` for :pep:`489` and use - :c:func:`PyModule_AddType`. - -- bpo-32309: Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is - mainly used for running IO-bound functions in a separate thread to avoid - blocking the event loop, and essentially works as a high-level version of - :meth:`~asyncio.loop.run_in_executor` that can directly take keyword - arguments. - -- bpo-36543: Restored the deprecated :mod:`xml.etree.cElementTree` module. - -- bpo-40611: :const:`~mmap.MAP_POPULATE` constant has now been added to the - list of exported :mod:`mmap` module flags. - -- bpo-39881: PEP 554 for use in the test suite. (Patch By Joannah Nanjekye) - -- bpo-13097: ``ctypes`` now raises an ``ArgumentError`` when a callback is - invoked with more than 1024 arguments. - -- bpo-39385: A new test assertion context-manager, - :func:`unittest.assertNoLogs` will ensure a given block of code emits no - log messages using the logging module. Contributed by Kit Yan Choi. - -- bpo-23082: Updated the error message and docs of PurePath.relative_to() to - better reflect the function behaviour. - -- bpo-40318: Use SQLite3 trace v2 API, if it is available. - -- bpo-40105: ZipFile truncates files to avoid corruption when a shorter - comment is provided in append ("a") mode. Patch by Jan Mazur. - -- bpo-40084: Fix ``Enum.__dir__``: dir(Enum.member) now includes attributes - as well as methods. - -- bpo-31122: ssl.wrap_socket() now raises ssl.SSLEOFError rather than - OSError when peer closes connection during TLS negotiation - -- bpo-39728: fix default ``_missing_`` so a duplicate ``ValueError`` is not - set as the ``__context__`` of the original ``ValueError``. - -- bpo-39244: Fixed :class:`multiprocessing.context.get_all_start_methods` to - properly return the default method first on macOS. - -- bpo-39040: Fix parsing of invalid mime headers parameters by collapsing - whitespace between encoded words in a bare-quote-string. - -- bpo-38731: Add ``--quiet`` option to command-line interface of - :mod:`py_compile`. Patch by Gregory Schevchenko. - -- bpo-35714: :exc:`struct.error` is now raised if there is a null character - in a :mod:`struct` format string. - -- bpo-38144: Added the *root_dir* and *dir_fd* parameters in - :func:`glob.glob`. - -- bpo-26543: Fix :meth:`IMAP4.noop` when debug mode is enabled (ex: - ``imaplib.Debug = 3``). - -- bpo-12178: :func:`csv.writer` now correctly escapes *escapechar* when - input contains *escapechar*. Patch by Catalin Iacob, Berker Peksag, and - Itay Elbirt. - -- bpo-36290: AST nodes are now raising :exc:`TypeError` on conflicting - keyword arguments. Patch contributed by Rémi Lapeyre. - -- bpo-33944: Added site.py site-packages tracing in verbose mode. - -- bpo-35078: Refactor formatweekday, formatmonthname methods in - LocaleHTMLCalendar and LocaleTextCalendar classes in calendar module to - call the base class methods.This enables customizable CSS classes for - LocaleHTMLCalendar. Patch by Srinivas Reddy Thatiparthy - -- bpo-29620: :func:`~unittest.TestCase.assertWarns` no longer raises a - ``RuntimeException`` when accessing a module's ``__warningregistry__`` - causes importation of a new module, or when a new module is imported in - another thread. Patch by Kernc. - -- bpo-31844: Remove ``ParserBase.error()`` method from the private and - undocumented ``_markupbase`` module. :class:`html.parser.HTMLParser` is - the only subclass of ``ParserBase`` and its ``error()`` implementation was - deprecated in Python 3.4 and removed in Python 3.5. - -- bpo-34226: Fix ``cgi.parse_multipart`` without content_length. Patch by - Roger Duran - -- bpo-33660: Fix pathlib.PosixPath to resolve a relative path located on the - root directory properly. - -- bpo-28557: Improve the error message for a misbehaving ``rawio.readinto`` - -- bpo-26680: The d.is_integer() method is added to the Decimal type, for - compatibility with other number types. - -- bpo-26680: The x.is_integer() method is incorporated into the abstract - types of the numeric tower, Real, Rational and Integral, with appropriate - default implementations. - -Documentation -------------- - -- bpo-41428: Add documentation for :pep:`604` (Allow writing union types as - ``X | Y``). - -- bpo-41774: In Programming FAQ "Sequences (Tuples/Lists)" section, add "How - do you remove multiple items from a list". - -- bpo-35293: Fix RemovedInSphinx40Warning when building the documentation. - Patch by Donghee Na. - -- bpo-37149: Change Shipman tkinter doc link from archive.org to TkDocs. - (The doc has been removed from the NMT server.) The new link responds - much faster and includes a short explanatory note. - -- bpo-41726: Update the refcounts info of ``PyType_FromModuleAndSpec``. - -- bpo-41624: Fix the signature of :class:`typing.Coroutine`. - -- bpo-40204: Enable Sphinx 3.2 ``c_allow_pre_v3`` option and disable - ``c_warn_on_allowed_pre_v3`` option to make the documentation compatible - with Sphinx 2 and Sphinx 3. - -- bpo-41045: Add documentation for debug feature of f-strings. - -- bpo-41314: Changed the release when ``from __future__ import annotations`` - becomes the default from ``4.0`` to ``3.10`` (following a change in PEP - 563). - -- bpo-40979: Refactored typing.rst, arranging more than 70 classes, - functions, and decorators into new sub-sections. - -- bpo-40552: Fix in tutorial section 4.2. Code snippet is now correct. - -- bpo-39883: Make code, examples, and recipes in the Python documentation be - licensed under the more permissive BSD0 license in addition to the - existing Python 2.0 license. - -- bpo-37703: Updated Documentation to comprehensively elaborate on the - behaviour of gather.cancel() - -Tests ------ - -- bpo-41939: Fix test_site.test_license_exists_at_url(): call - ``urllib.request.urlcleanup()`` to reset the global - ``urllib.request._opener``. Patch by Victor Stinner. - -- bpo-41731: Make test_cmd_line_script pass with option '-vv'. - -- bpo-41602: Add tests for SIGINT handling in the runpy module. - -- bpo-41521: :mod:`test.support`: Rename ``blacklist`` parameter of - :func:`~test.support.check__all__` to ``not_exported``. - -- bpo-41477: Make ctypes optional in test_genericalias. - -- bpo-41085: Fix integer overflow in the :meth:`array.array.index` method on - 64-bit Windows for index larger than ``2**31``. - -- bpo-41069: :data:`test.support.TESTFN` and the current directory for tests - when run via ``test.regrtest`` contain now non-ascii characters if - possible. - -- bpo-38377: On Linux, skip tests using multiprocessing if the current user - cannot create a file in ``/dev/shm/`` directory. Add the - :func:`~test.support.skip_if_broken_multiprocessing_synchronize` function - to the :mod:`test.support` module. - -- bpo-41009: Fix use of ``support.require_{linux|mac|freebsd}_version()`` - decorators as class decorator. - -- bpo-41003: Fix ``test_copyreg`` when ``numpy`` is installed: - ``test.pickletester`` now saves/restores warnings filters when importing - ``numpy``, to ignore filters installed by ``numpy``. - -- bpo-40964: Disable remote :mod:`imaplib` tests, host cyrus.andrew.cmu.edu - is blocking incoming connections. - -- bpo-40927: Fix test_binhex when run twice: it now uses - import_fresh_module() to ensure that it raises DeprecationWarning each - time. - -- bpo-17258: Skip some :mod:`multiprocessing` tests when MD5 hash digest is - blocked. - -- bpo-31904: Increase LOOPBACK_TIMEOUT to 10 for VxWorks RTOS. - -- bpo-38169: Increase code coverage for SharedMemory and ShareableList - -- bpo-34401: Make test_gdb properly run on HP-UX. Patch by Michael Osipov. - -Build ------ - -- bpo-38249: Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() - if only the compiler is able to use it. Patch by Donghee Na. - -- bpo-41617: Fix ``pycore_bitutils.h`` header file to support old clang - versions: ``__builtin_bswap16()`` is not available in LLVM clang 3.0. - -- bpo-40204: Pin Sphinx version to 2.3.1 in ``Doc/Makefile``. - -- bpo-36020: The C99 functions :c:func:`snprintf` and :c:func:`vsnprintf` - are now required to build Python. - -- bpo-40684: ``make install`` now uses the ``PLATLIBDIR`` variable for the - destination ``lib-dynload/`` directory when ``./configure - --with-platlibdir`` is used. - -- bpo-40683: Fixed an issue where the :mod:`zoneinfo` module and its tests - were not included when Python is installed with ``make``. - -Windows -------- - -- bpo-41744: Fixes automatic import of props file when using the Nuget - package. - -- bpo-41627: The user site directory for 32-bit now includes a ``-32`` - suffix to distinguish it from the 64-bit interpreter's directory. - -- bpo-41526: Fixed layout of final page of the installer by removing the - special thanks to Mark Hammond (with his permission). - -- bpo-41492: Fixes the description that appears in UAC prompts. - -- bpo-40948: Improve post-install message to direct people to the "py" - command. - -- bpo-41412: The installer will now fail to install on Windows 7 and Windows - 8. Further, the UCRT dependency is now always downloaded on demand. - -- bpo-40741: Update Windows release to include SQLite 3.32.3. - -- bpo-41142: :mod:`!msilib` now supports creating CAB files with non-ASCII - file path and adding files with non-ASCII file path to them. - -- bpo-41074: Fixed support of non-ASCII names in functions - :func:`!msilib.OpenDatabase` and :func:`!msilib.init_database` and - non-ASCII SQL in method :meth:`!msilib.Database.OpenView`. - -- bpo-41039: Stable ABI redirection DLL (python3.dll) now uses ``#pragma - comment(linker)`` for re-exporting. - -- bpo-40164: Updates Windows OpenSSL to 1.1.1g - -- bpo-39631: Changes the registered MIME type for ``.py`` files on Windows - to ``text/x-python`` instead of ``text/plain``. - -- bpo-40677: Manually define IO_REPARSE_TAG_APPEXECLINK in case some old - Windows SDK doesn't have it. - -- bpo-37556: Extend py.exe help to mention overrides via venv, shebang, - environmental variables & ini files. - -macOS ------ - -- bpo-41557: Update macOS installer to use SQLite 3.33.0. - -- bpo-39580: Avoid opening Finder window if running installer from the - command line. Patch contributed by Rick Heil. - -- bpo-41100: Fix configure error when building on macOS 11. Note that the - current Python release was released shortly after the first developer - preview of macOS 11 (Big Sur); there are other known issues with building - and running on the developer preview. Big Sur is expected to be fully - supported in a future bugfix release of Python 3.8.x and with 3.9.0. - -- bpo-40741: Update macOS installer to use SQLite 3.32.3. - -- bpo-41005: fixed an XDG settings issue not allowing macos to open browser - in webbrowser.py - -- bpo-40741: Update macOS installer to use SQLite 3.32.2. - -IDLE ----- - -- bpo-41775: Use 'IDLE Shell' as shell title - -- bpo-35764: Rewrite the Calltips doc section. - -- bpo-40181: In calltips, stop reminding that '/' marks the end of - positional-only arguments. - -- bpo-41468: Improve IDLE run crash error message (which users should never - see). - -- bpo-41373: Save files loaded with no line ending, as when blank, or - different line endings, by setting its line ending to the system default. - Fix regression in 3.8.4 and 3.9.0b4. - -- bpo-41300: Save files with non-ascii chars. Fix regression released in - 3.9.0b4 and 3.8.4. - -- bpo-37765: Add keywords to module name completion list. Rewrite - Completions section of IDLE doc. - -- bpo-41152: The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE is - now always UTF-8. - -- bpo-41144: Make Open Module open a special module such as os.path. - -- bpo-39885: Make context menu Cut and Copy work again when right-clicking - within a selection. - -- bpo-40723: Make test_idle pass when run after import. - -C API ------ - -- bpo-41936: Removed undocumented macros ``Py_ALLOW_RECURSION`` and - ``Py_END_ALLOW_RECURSION`` and the ``recursion_critical`` field of the - :c:type:`PyInterpreterState` structure. - -- bpo-41692: The ``PyUnicode_InternImmortal()`` function is now deprecated - and will be removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace` - instead. Patch by Victor Stinner. - -- bpo-41842: Add :c:func:`PyCodec_Unregister` function to unregister a codec - search function. - -- bpo-41834: Remove the ``_Py_CheckRecursionLimit`` variable: it has been - replaced by ``ceval.recursion_limit`` of the :c:type:`PyInterpreterState` - structure. Patch by Victor Stinner. - -- bpo-41689: Types created with :c:func:`PyType_FromSpec` now make any - signature in their ``tp_doc`` slot accessible from ``__text_signature__``. - -- bpo-41524: Fix bug in :c:func:`PyOS_mystrnicmp` and - :c:func:`PyOS_mystricmp` that incremented pointers beyond the end of a - string. - -- bpo-41324: Add a minimal decimal capsule API. The API supports fast - conversions between Decimals up to 38 digits and their triple - representation as a C struct. - -- bpo-30155: Add :c:func:`PyDateTime_DATE_GET_TZINFO` and - :c:func:`PyDateTime_TIME_GET_TZINFO` macros for accessing the ``tzinfo`` - attributes of :class:`datetime.datetime` and :class:`datetime.time` - objects. - -- bpo-40170: Revert :c:func:`PyType_HasFeature` change: it reads again - directly the :c:member:`PyTypeObject.tp_flags` member when the limited C - API is not used, rather than always calling :c:func:`PyType_GetFlags` - which hides implementation details. - -- bpo-41123: Remove ``PyUnicode_AsUnicodeCopy``. - -- bpo-41123: Removed ``PyLong_FromUnicode()``. - -- bpo-41123: Removed ``PyUnicode_GetMax()``. - -- bpo-41123: Removed ``Py_UNICODE_str*`` functions manipulating - ``Py_UNICODE*`` strings. - -- bpo-41103: ``PyObject_AsCharBuffer()``, ``PyObject_AsReadBuffer()``, - ``PyObject_CheckReadBuffer()``, and ``PyObject_AsWriteBuffer()`` are - removed. Please migrate to new buffer protocol; - :c:func:`PyObject_GetBuffer` and :c:func:`PyBuffer_Release`. - -- bpo-36346: Raises DeprecationWarning for ``PyUnicode_FromUnicode(NULL, - size)`` and ``PyUnicode_FromStringAndSize(NULL, size)`` with ``size > 0``. - -- bpo-36346: Mark ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, - ``PyUnicode_WSTR_LENGTH``, ``PyUnicode_FromUnicode``, - ``PyUnicode_AsUnicode``, and ``PyUnicode_AsUnicodeAndSize`` as deprecated - in C. Remove ``Py_UNICODE_MATCH`` which was deprecated and broken since - Python 3.3. - -- bpo-40989: The :c:func:`PyObject_INIT` and :c:func:`PyObject_INIT_VAR` - macros become aliases to, respectively, :c:func:`PyObject_Init` and - :c:func:`PyObject_InitVar` functions. - -- bpo-36020: On Windows, ``#include "pyerrors.h"`` no longer defines - ``snprintf`` and ``vsnprintf`` macros. - -- bpo-40943: The ``PY_SSIZE_T_CLEAN`` macro must now be defined to use - :c:func:`PyArg_ParseTuple` and :c:func:`Py_BuildValue` formats which use - ``#``: ``es#``, ``et#``, ``s#``, ``u#``, ``y#``, ``z#``, ``U#`` and - ``Z#``. See :ref:`Parsing arguments and building values <arg-parsing>` and - the :pep:`353`. - -- bpo-40910: Export explicitly the :c:func:`Py_GetArgcArgv` function to the - C API and document the function. Previously, it was exported implicitly - which no longer works since Python is built with ``-fvisibility=hidden``. - -- bpo-40724: Allow defining buffer slots in type specs. - -- bpo-40679: Fix a ``_PyEval_EvalCode()`` crash if *qualname* argument is - NULL. - -- bpo-40839: Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had - been allowed for historical reason. It is no longer allowed. - -- bpo-40826: :c:func:`PyOS_InterruptOccurred` now fails with a fatal error - if it is called with the GIL released. - -- bpo-40792: The result of :c:func:`PyNumber_Index` now always has exact - type :class:`int`. Previously, the result could have been an instance of a - subclass of ``int``. - -- bpo-39573: Convert :c:func:`Py_REFCNT` and :c:func:`Py_SIZE` macros to - static inline functions. They cannot be used as l-value anymore: use - :c:func:`Py_SET_REFCNT` and :c:func:`Py_SET_SIZE` to set an object - reference count and size. This change is backward incompatible on purpose, - to prepare the C API for an opaque :c:type:`PyObject` structure. - -- bpo-40703: The PyType_FromSpec*() functions no longer overwrite the type's - "__module__" attribute if it is set via "Py_tp_members" or "Py_tp_getset". - -- bpo-39583: Remove superfluous "extern C" declarations from - ``Include/cpython/*.h``. - - -What's New in Python 3.9.0 beta 1? -================================== - -*Release date: 2020-05-19* - -Security --------- - -- bpo-40501: :mod:`uuid` no longer uses :mod:`ctypes` to load - :file:`libuuid` or :file:`rpcrt4.dll` at runtime. - -Core and Builtins ------------------ - -- bpo-40663: Correctly generate annotations where parentheses are omitted - but required (e.g: ``Type[(str, int, *other))]``. - -- bpo-40596: Fixed :meth:`str.isidentifier` for non-canonicalized strings - containing non-BMP characters on Windows. - -- bpo-40593: Improved syntax errors for invalid characters in source code. - -- bpo-40585: Fixed a bug when using :func:`codeop.compile_command` that was - causing exceptions to be swallowed with the new parser. Patch by Pablo - Galindo - -- bpo-40566: Apply :pep:`573` to :mod:`abc`. - -- bpo-40502: Initialize ``n->n_col_offset``. (Patch by Joannah Nanjekye) - -- bpo-40527: Fix command line argument parsing: no longer write errors - multiple times into stderr. - -- bpo-1635741: Port :mod:`errno` to multiphase initialization (:pep:`489`). - -- bpo-40523: Add pass-throughs for :func:`hash` and :func:`reversed` to - :class:`weakref.proxy` objects. Patch by Pablo Galindo. - -- bpo-1635741: Port :mod:`syslog` to multiphase initialization (:pep:`489`). - -- bpo-40246: Reporting a specialised error message for invalid string - prefixes, which was introduced in :issue:`40246`, is being reverted due to - backwards compatibility concerns for strings that immediately follow a - reserved keyword without whitespace between them. Constructs like - ``bg="#d00" if clear else"#fca"`` were failing to parse, which is not an - acceptable breakage on such short notice. - -- bpo-40417: Fix imp module deprecation warning when PyImport_ReloadModule - is called. Patch by Robert Rouhani. - -- bpo-40408: Fixed support of nested type variables in GenericAlias (e.g. - ``list[list[T]]``). - -- bpo-1635741: Port _stat module to multiphase initialization (:pep:`489`). - -- bpo-29587: Enable implicit exception chaining when calling - :meth:`generator.throw`. - -- bpo-40328: Add tools for generating mappings headers for CJKCodecs. - -- bpo-40228: Setting frame.f_lineno is now robust w.r.t. changes in the - source-to-bytecode compiler - -- bpo-38880: Added the ability to list interpreters associated with channel - ends in the internal subinterpreters module. - -- bpo-37986: Improve performance of :c:func:`PyLong_FromDouble` for values - that fit into :c:expr:`long`. - -Library -------- - -- bpo-40662: Fixed :func:`ast.get_source_segment` for ast nodes that have - incomplete location information. Patch by Irit Katriel. - -- bpo-40665: Convert :mod:`bisect` to use Argument Clinic. - -- bpo-40536: Added the :func:`~zoneinfo.available_timezones` function to the - :mod:`zoneinfo` module. Patch by Paul Ganssle. - -- bpo-40645: The :class:`hmac.HMAC` exposes internal implementation details. - The attributes ``digest_cons``, ``inner``, and ``outer`` are deprecated - and will be removed in the future. - -- bpo-40645: The internal module ``_hashlib`` wraps and exposes OpenSSL's - HMAC API. The new code will be used in Python 3.10 after the internal - implementation details of the pure Python HMAC module are no longer part - of the public API. - -- bpo-40637: Builtin hash modules can now be disabled or selectively enabled - with ``configure --with-builtin-hashlib-hashes=sha3,blake1`` or - ``--without-builtin-hashlib-hashes``. - -- bpo-37630: The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF - from OpenSSL when available. - -- bpo-40479: The :mod:`hashlib` now compiles with OpenSSL 3.0.0-alpha2. - -- bpo-40257: Revert changes to :func:`inspect.getdoc`. - -- bpo-40607: When cancelling a task due to timeout, :meth:`asyncio.wait_for` - will now propagate the exception if an error happens during cancellation. - Patch by Roman Skurikhin. - -- bpo-40612: Fix edge cases in SyntaxError formatting. If the offset is <= - 0, no caret is printed. If the offset is > line length, the caret is - printed pointing just after the last character. - -- bpo-40597: If text content lines are longer than policy.max_line_length, - always use a content-encoding to make sure they are wrapped. - -- bpo-40571: Added functools.cache() as a simpler, more discoverable way to - access the unbounded cache variant of lru_cache(maxsize=None). - -- bpo-40503: :pep:`615`, the :mod:`zoneinfo` module. Adds support for the - IANA time zone database. - -- bpo-40397: Removed attributes ``__args__`` and ``__parameters__`` from - special generic aliases like ``typing.List`` (not subscripted). - -- bpo-40549: Convert posixmodule.c ("posix" or "nt" module) to the - multiphase initialization (PEP 489). - -- bpo-31033: Add a ``msg`` argument to :meth:`Future.cancel` and - :meth:`Task.cancel`. - -- bpo-40541: Added an optional *counts* parameter to random.sample(). - -- bpo-40515: The :mod:`ssl` and :mod:`hashlib` modules now actively check - that OpenSSL is build with thread support. Python 3.7.0 made thread - support mandatory and no longer works safely with a no-thread builds. - -- bpo-31033: When a :class:`asyncio.Task` is cancelled, the exception - traceback now chains all the way back to where the task was first - interrupted. - -- bpo-40504: :func:`functools.lru_cache` objects can now be the targets of - weakrefs. - -- bpo-40559: Fix possible memory leak in the C implementation of - :class:`asyncio.Task`. - -- bpo-40480: ``fnmatch.fnmatch()`` could take exponential time in the - presence of multiple ``*`` pattern characters. This was repaired by - generating more elaborate regular expressions to avoid futile - backtracking. - -- bpo-40495: :mod:`compileall` is now able to use hardlinks to prevent - duplicates in a case when ``.pyc`` files for different optimization levels - have the same content. - -- bpo-40457: The ssl module now support OpenSSL builds without TLS 1.0 and - 1.1 methods. - -- bpo-40355: Improve error reporting in :func:`ast.literal_eval` in the - presence of malformed :class:`ast.Dict` nodes instead of silently ignoring - any non-conforming elements. Patch by Curtis Bucher. - -- bpo-40465: Deprecated the optional *random* argument to - *random.shuffle()*. - -- bpo-40459: :func:`platform.win32_ver` now produces correct *ptype* strings - instead of empty strings. - -- bpo-39435: The first argument of :func:`pickle.loads` is now - positional-only. - -- bpo-39305: Update :mod:`!nntplib` to merge :class:`!nntplib.NNTP` and - :class:`!nntplib._NNTPBase`. Patch by Donghee Na. - -- bpo-32494: Update :mod:`dbm.gnu` to use gdbm_count if possible when - calling :func:`len`. Patch by Donghee Na. - -- bpo-40453: Add ``isolated=True`` keyword-only parameter to - ``_xxsubinterpreters.create()``. An isolated subinterpreter cannot spawn - threads, spawn a child process or call ``os.fork()``. - -- bpo-40286: Remove ``_random.Random.randbytes()``: the C implementation of - ``randbytes()``. Implement the method in Python to ease subclassing: - ``randbytes()`` now directly reuses ``getrandbits()``. - -- bpo-40394: Added default arguments to - :meth:`difflib.SequenceMatcher.find_longest_match`. - -- bpo-39995: Fix a race condition in concurrent.futures._ThreadWakeup: - access to _ThreadWakeup is now protected with the shutdown lock. - -- bpo-30966: ``Process.shutdown(wait=True)`` of :mod:`concurrent.futures` - now closes explicitly the result queue. - -- bpo-30966: Add a new :meth:`~multiprocessing.SimpleQueue.close` method to - the :class:`~multiprocessing.SimpleQueue` class to explicitly close the - queue. - -- bpo-39966: Revert bpo-25597. :class:`unittest.mock.MagicMock` with wraps' - set uses default return values for magic methods. - -- bpo-39791: Added ``files()`` function to importlib.resources with support - for subdirectories in package data, matching backport in - importlib_resources 1.5. - -- bpo-40375: :meth:`imaplib.IMAP4.unselect` is added. Patch by Donghee Na. - -- bpo-40389: ``repr()`` now returns ``typing.Optional[T]`` when called for - ``typing.Union`` of two types, one of which is ``NoneType``. - -- bpo-40291: Add support for CAN_J1939 sockets (available on Linux 5.4+) - -- bpo-40273: :class:`types.MappingProxyType` is now reversible. - -- bpo-39075: The repr for :class:`types.SimpleNamespace` is now insertion - ordered rather than alphabetical. - -- bpo-40192: On AIX, :func:`~time.thread_time` is now implemented with - ``thread_cputime()`` which has nanosecond resolution, rather than - ``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 - milliseconds. Patch by Batuhan Taskaya. - -- bpo-40025: Raise TypeError when _generate_next_value_ is defined after - members. Patch by Ethan Onstott. - -- bpo-39058: In the argparse module, the repr for Namespace() and other - argument holders now displayed in the order attributes were added. - Formerly, it displayed in alphabetical order even though argument order is - preserved the user visible parts of the module. - -- bpo-24416: The ``isocalendar()`` methods of :class:`datetime.date` and - :class:`datetime.datetime` now return a :term:`named tuple` instead of a - :class:`tuple`. - -Documentation -------------- - -- bpo-34790: Add version of removal for explicit passing of coros to - ``asyncio.wait()``'s documentation - -- bpo-40561: Provide docstrings for webbrowser open functions. - -- bpo-40499: Mention that :func:`asyncio.wait` requires a non-empty set of - awaitables. - -- bpo-39705: Tutorial example for sorted() in the Loop Techniques section is - given a better explanation. Also a new example is included to explain - sorted()'s basic behavior. - -- bpo-39435: Fix an incorrect signature for :func:`pickle.loads` in the docs - -Tests ------ - -- bpo-40055: distutils.tests now saves/restores warnings filters to leave - them unchanged. Importing tests imports docutils which imports - pkg_resources which adds a warnings filter. - -- bpo-40436: test_gdb and test.pythoninfo now check gdb command exit code. - -Build ------ - -- bpo-40653: Move _dirnameW out of HAVE_SYMLINK to fix a potential compiling - issue. - -- bpo-40514: Add ``--with-experimental-isolated-subinterpreters`` build - option to ``configure``: better isolate subinterpreters, experimental - build mode. - -Windows -------- - -- bpo-40650: Include winsock2.h in pytime.c for timeval. - -- bpo-40458: Increase reserved stack space to prevent overflow crash on - Windows. - -- bpo-39148: Add IPv6 support to :mod:`asyncio` datagram endpoints in - ProactorEventLoop. Change the raised exception for unknown address - families to ValueError as it's not coming from Windows API. - -macOS ------ - -- bpo-34956: When building Python on macOS from source, ``_tkinter`` now - links with non-system Tcl and Tk frameworks if they are installed in - ``/Library/Frameworks``, as had been the case on older releases of macOS. - If a macOS SDK is explicitly configured, by using - ``--enable-universalsdk=`` or ``-isysroot``, only the SDK itself is - searched. The default behavior can still be overridden with - ``--with-tcltk-includes`` and ``--with-tcltk-libs``. - -- bpo-35569: Expose RFC 3542 IPv6 socket options. - -Tools/Demos ------------ - -- bpo-40479: Update multissltest helper to test with latest OpenSSL 1.0.2, - 1.1.0, 1.1.1, and 3.0.0-alpha. - -- bpo-40431: Fix a syntax typo in ``turtledemo`` that now raises a - ``SyntaxError``. - -- bpo-40163: Fix multissltest tool. OpenSSL has changed download URL for old - releases. The multissltest tool now tries to download from current and old - download URLs. - -C API ------ - -- bpo-39465: Remove the ``_PyUnicode_ClearStaticStrings()`` function from - the C API. - -- bpo-38787: Add PyCFunction_CheckExact() macro for exact type checks now - that we allow subtypes of PyCFunction, as well as PyCMethod_CheckExact() - and PyCMethod_Check() for the new PyCMethod subtype. - -- bpo-40545: Declare ``_PyErr_GetTopmostException()`` with ``PyAPI_FUNC()`` - to properly export the function in the C API. The function remains private - (``_Py``) prefix. - -- bpo-40412: Nullify inittab_copy during finalization, preventing future - interpreter initializations in an embedded situation from crashing. Patch - by Gregory Szorc. - -- bpo-40429: The :c:func:`PyThreadState_GetFrame` function now returns a - strong reference to the frame. - -- bpo-40428: Remove the following functions from the C API. Call - :c:func:`PyGC_Collect` explicitly to free all free lists. - - * ``PyAsyncGen_ClearFreeLists()`` - * ``PyContext_ClearFreeList()`` - * ``PyDict_ClearFreeList()`` - * ``PyFloat_ClearFreeList()`` - * ``PyFrame_ClearFreeList()`` - * ``PyList_ClearFreeList()`` - * ``PySet_ClearFreeList()`` - * ``PyTuple_ClearFreeList()`` - -- bpo-40421: New :c:func:`PyFrame_GetBack` function: get the frame next - outer frame. - -- bpo-40421: New :c:func:`PyFrame_GetCode` function: return a borrowed - reference to the frame code. - -- bpo-40217: Ensure that instances of types created with - :c:func:`PyType_FromSpecWithBases` will visit its class object when - traversing references in the garbage collector (implemented as an - extension of the provided :c:member:`~PyTypeObject.tp_traverse`). Patch by - Pablo Galindo. - -- bpo-38787: Module C state is now accessible from C-defined heap type - methods (:pep:`573`). Patch by Marcel Plch and Petr Viktorin. - - -What's New in Python 3.9.0 alpha 6? -=================================== - -*Release date: 2020-04-27* - -Security --------- - -- bpo-40121: Fixes audit events raised on creating a new socket. - -- bpo-39073: Disallow CR or LF in email.headerregistry.Address arguments to - guard against header injection attacks. - -- bpo-39503: :cve:`2020-8492`: The - :class:`~urllib.request.AbstractBasicAuthHandler` class of the - :mod:`urllib.request` module uses an inefficient regular expression which - can be exploited by an attacker to cause a denial of service. Fix the - regex to prevent the catastrophic backtracking. Vulnerability reported by - Ben Caller and Matt Schwager. - -Core and Builtins ------------------ - -- bpo-40313: Improve the performance of bytes.hex(). - -- bpo-40334: Switch to a new parser, based on PEG. For more details see PEP - 617. To temporarily switch back to the old parser, use ``-X oldparser`` or - ``PYTHONOLDPARSER=1``. In Python 3.10 we will remove the old parser - completely, including the ``parser`` module (already deprecated) and - anything that depends on it. - -- bpo-40267: Fix the tokenizer to display the correct error message, when - there is a ``SyntaxError`` on the last input character and no newline - follows. It used to be ``unexpected EOF while parsing``, while it should - be ``invalid syntax``. - -- bpo-39522: Correctly unparse explicit ``u`` prefix for strings when - postponed evaluation for annotations activated. Patch by Batuhan Taskaya. - -- bpo-40246: Report a specialized error message, ``invalid string prefix``, - when the tokenizer encounters a string with an invalid prefix. - -- bpo-40082: Fix the signal handler: it now always uses the main - interpreter, rather than trying to get the current Python thread state. - -- bpo-37388: str.encode() and str.decode() no longer check the encoding and - errors in development mode or in debug mode during Python finalization. - The codecs machinery can no longer work on very late calls to str.encode() - and str.decode(). - -- bpo-40077: Fix possible refleaks in :mod:`!_json`, memo of PyScannerObject - should be traversed. - -- bpo-37207: Speed up calls to ``dict()`` by using the :pep:`590` - ``vectorcall`` calling convention. - -- bpo-40141: Add column and line information to ``ast.keyword`` nodes. Patch - by Pablo Galindo. - -- bpo-1635741: Port :mod:`resource` to multiphase initialization - (:pep:`489`). - -- bpo-1635741: Port :mod:`math` to multiphase initialization (:pep:`489`). - -- bpo-1635741: Port _uuid module to multiphase initialization (:pep:`489`). - -- bpo-40077: Convert json module to use :c:func:`PyType_FromSpec`. - -- bpo-40067: Improve the error message for multiple star expressions in an - assignment. Patch by Furkan Onder - -- bpo-1635741: Port _functools module to multiphase initialization (PEP - 489). Patch by Paulo Henrique Silva. - -- bpo-1635741: Port operator module to multiphase initialization (PEP 489). - Patch by Paulo Henrique Silva. - -- bpo-20526: Fix :c:func:`PyThreadState_Clear()`. ``PyThreadState.frame`` is - a borrowed reference, not a strong reference: ``PyThreadState_Clear()`` - must not call ``Py_CLEAR(tstate->frame)``. - -- bpo-1635741: Port time module to multiphase initialization (:pep:`489`). - Patch by Paulo Henrique Silva. - -- bpo-1635741: Port _weakref extension module to multiphase initialization - (:pep:`489`). - -- bpo-40020: Fix a leak and subsequent crash in parsetok.c caused by realloc - misuse on a rare codepath. - -- bpo-39939: Added str.removeprefix and str.removesuffix methods and - corresponding bytes, bytearray, and collections.UserString methods to - remove affixes from a string if present. See :pep:`616` for a full - description. Patch by Dennis Sweeney. - -- bpo-39481: Implement PEP 585. This supports list[int], tuple[str, ...] - etc. - -- bpo-32894: Support unparsing of infinity numbers in postponed annotations. - Patch by Batuhan Taşkaya. - -- bpo-37207: Speed up calls to ``list()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Mark Shannon. - -Library -------- - -- bpo-40398: :func:`typing.get_args` now always returns an empty tuple for - special generic aliases. - -- bpo-40396: Functions :func:`typing.get_origin`, :func:`typing.get_args` - and :func:`typing.get_type_hints` support now generic aliases like - ``list[int]``. - -- bpo-38061: Optimize the :mod:`subprocess` module on FreeBSD using - ``closefrom()``. A single ``close(fd)`` syscall is cheap, but when - ``sysconf(_SC_OPEN_MAX)`` is high, the loop calling ``close(fd)`` on each - file descriptor can take several milliseconds. - - The workaround on FreeBSD to improve performance was to load and mount the - fdescfs kernel module, but this is not enabled by default. - - Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans - (kevans) and Kubilay Kocak (koobs): - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274 - -- bpo-38061: On FreeBSD, ``os.closerange(fd_low, fd_high)`` now calls - ``closefrom(fd_low)`` if *fd_high* is greater than or equal to - ``sysconf(_SC_OPEN_MAX)``. - - Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans - (kevans) and Kubilay Kocak (koobs): - https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274 - -- bpo-40360: The :mod:`!lib2to3` module is pending deprecation due to - :pep:`617`. - -- bpo-40138: Fix the Windows implementation of :func:`os.waitpid` for exit - code larger than ``INT_MAX >> 8``. The exit status is now interpreted as - an unsigned number. - -- bpo-39942: Set "__main__" as the default module name when "__name__" is - missing in :class:`typing.TypeVar`. Patch by Weipeng Hong. - -- bpo-40275: The :mod:`logging` package is now imported lazily in - :mod:`unittest` only when the :meth:`~unittest.TestCase.assertLogs` - assertion is used. - -- bpo-40275: The :mod:`asyncio` package is now imported lazily in - :mod:`unittest` only when the :class:`~unittest.IsolatedAsyncioTestCase` - class is used. - -- bpo-40330: In :meth:`ShareableList.__setitem__`, check the size of a new - string item after encoding it to utf-8, not before. - -- bpo-40148: Added :meth:`pathlib.Path.with_stem` to create a new Path with - the stem replaced. - -- bpo-40325: Deprecated support for set objects in random.sample(). - -- bpo-40257: Improved help for the :mod:`typing` module. Docstrings are now - shown for all special forms and special generic aliases (like ``Union`` - and ``List``). Using ``help()`` with generic alias like ``List[int]`` will - show the help for the correspondent concrete type (``list`` in this case). - -- bpo-40257: :func:`inspect.getdoc` no longer returns docstring inherited - from the type of the object or from parent class if it is a class if it is - not defined in the object itself. In :mod:`pydoc` the documentation string - is now shown not only for class, function, method etc, but for any object - that has its own ``__doc__`` attribute. - -- bpo-40287: Fixed ``SpooledTemporaryFile.seek()`` to return the position. - -- bpo-40290: Added zscore() to statistics.NormalDist(). - -- bpo-40282: Allow ``random.getrandbits(0)`` to succeed and to return 0. - -- bpo-40286: Add :func:`random.randbytes` function and - :meth:`random.Random.randbytes` method to generate random bytes. - -- bpo-40277: :func:`collections.namedtuple` now provides a human-readable - repr for its field accessors. - -- bpo-40270: The included copy of sqlite3 on Windows is now compiled with - the json extension. This allows the use of functions such as - ``json_object``. - -- bpo-29255: Wait in ``KqueueSelector.select`` when no fds are registered - -- bpo-40260: Ensure :mod:`modulefinder` uses :func:`io.open_code` and - respects coding comments. - -- bpo-40234: Allow again to spawn daemon threads in subinterpreters (revert - change which denied them). - -- bpo-39207: Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are - now spawned on demand, only when there are no available idle workers to - reuse. This optimizes startup overhead and reduces the amount of lost CPU - time to idle workers. Patch by Kyle Stanley. - -- bpo-40091: Fix a hang at fork in the logging module: the new private - _at_fork_reinit() method is now used to reinitialize locks at fork in the - child process. - -- bpo-40149: Implement traverse and clear slots in _abc._abc_data type. - -- bpo-40208: Remove deprecated :meth:`!symtable.SymbolTable.has_exec`. - -- bpo-40196: Fix a bug in the :mod:`symtable` module that was causing - incorrectly report global variables as local. Patch by Pablo Galindo. - -- bpo-40190: Add support for ``_SC_AIX_REALMEM`` to :func:`posix.sysconf`. - -- bpo-40182: Removed the ``_field_types`` attribute of the - :class:`typing.NamedTuple` class. - -- bpo-36517: Multiple inheritance with :class:`typing.NamedTuple` now raises - an error instead of silently ignoring other types. - -- bpo-40126: Fixed reverting multiple patches in unittest.mock. Patcher's - ``__exit__()`` is now never called if its ``__enter__()`` is failed. - Returning true from ``__exit__()`` silences now the exception. - -- bpo-40094: CGIHTTPRequestHandler of http.server now logs the CGI script - exit code, rather than the CGI script exit status of os.waitpid(). For - example, if the script is killed by signal 11, it now logs: "CGI script - exit code -11." - -- bpo-40108: Improve the error message when triying to import a module using - :mod:`runpy` and incorrectly using the ".py" extension at the end of the - module name. Patch by Pablo Galindo. - -- bpo-40094: Add :func:`os.waitstatus_to_exitcode` function: convert a wait - status to an exit code. - -- bpo-40089: Fix threading._after_fork(): if fork was not called by a thread - spawned by threading.Thread, threading._after_fork() now creates a - _MainThread instance for _main_thread, instead of a _DummyThread instance. - -- bpo-40089: Add a private ``_at_fork_reinit()`` method to - :class:`!_thread.Lock`, :class:`!_thread.RLock`, :class:`threading.RLock` - and :class:`threading.Condition` classes: reinitialize the lock at fork in - the child process, reset the lock to the unlocked state. Rename also the - private ``_reset_internal_locks()`` method of :class:`threading.Event` to - ``_at_fork_reinit()``. - -- bpo-25780: Expose :const:`~socket.CAN_RAW_JOIN_FILTERS` in the - :mod:`socket` module. - -- bpo-39503: :class:`~urllib.request.AbstractBasicAuthHandler` of - :mod:`urllib.request` now parses all WWW-Authenticate HTTP headers and - accepts multiple challenges per header: use the realm of the first Basic - challenge. - -- bpo-39812: Removed daemon threads from :mod:`concurrent.futures` by adding - an internal ``threading._register_atexit()``, which calls registered - functions prior to joining all non-daemon threads. This allows for - compatibility with subinterpreters, which don't support daemon threads. - -- bpo-40050: Fix ``importlib._bootstrap_external``: avoid creating a new - ``winreg`` builtin module if it's already available in - :data:`sys.modules`, and remove redundant imports. - -- bpo-40014: Fix ``os.getgrouplist()``: if ``getgrouplist()`` function fails - because the group list is too small, retry with a larger group list. On - failure, the glibc implementation of ``getgrouplist()`` sets ``ngroups`` - to the total number of groups. For other implementations, double the group - list size. - -- bpo-40017: Add :const:`time.CLOCK_TAI` constant if the operating system - support it. - -- bpo-40016: In re docstring, clarify the relationship between inline and - argument compile flags. - -- bpo-39953: Update internal table of OpenSSL error codes in the ``ssl`` - module. - -- bpo-36144: Added :pep:`584` operators to - :class:`weakref.WeakValueDictionary`. - -- bpo-36144: Added :pep:`584` operators to - :class:`weakref.WeakKeyDictionary`. - -- bpo-38891: Fix linear runtime behaviour of the ``__getitem__`` and - ``__setitem__`` methods in - :class:`multiprocessing.shared_memory.ShareableList`. This avoids - quadratic performance when iterating a ``ShareableList``. Patch by Thomas - Krennwallner. - -- bpo-39682: Remove undocumented support for *closing* a ``pathlib.Path`` - object via its context manager. The context manager magic methods remain, - but they are now a no-op, making ``Path`` objects immutable. - -- bpo-36144: Added :pep:`584` operators (``|`` and ``|=``) to - :class:`collections.ChainMap`. - -- bpo-39011: Normalization of line endings in ElementTree attributes was - removed, as line endings which were replaced by entity numbers should be - preserved in original form. - -- bpo-38410: Properly handle :func:`sys.audit` failures in - :func:`sys.set_asyncgen_hooks`. - -- bpo-36541: lib2to3 now recognizes named assignment expressions (the walrus - operator, ``:=``) - -- bpo-35967: In platform, delay the invocation of 'uname -p' until the - processor attribute is requested. - -- bpo-35113: :meth:`inspect.getsource` now returns correct source code for - inner class with same name as module level class. Decorators are also - returned as part of source of the class. Patch by Karthikeyan - Singaravelan. - -- bpo-33262: Deprecate passing None as an argument for :func:`shlex.split`'s - ``s`` parameter. Patch by Zackery Spytz. - -- bpo-31758: Prevent crashes when using an uninitialized - ``_elementtree.XMLParser`` object. Patch by Oren Milman. - -Documentation -------------- - -- bpo-27635: The pickle documentation incorrectly claimed that ``__new__`` - isn't called by default when unpickling. - -- bpo-39879: Updated :ref:`datamodel` docs to include :func:`dict` insertion - order preservation. Patch by Furkan Onder and Samy Lahfa. - -- bpo-38387: Document :c:macro:`PyDoc_STRVAR` macro in the C-API reference. - -- bpo-13743: Some methods within xml.dom.minidom.Element class are now - better documented. - -Tests ------ - -- bpo-31904: Set expected default encoding in test_c_locale_coercion.py for - VxWorks RTOS. - -- bpo-40162: Update Travis CI configuration to OpenSSL 1.1.1f. - -- bpo-40146: Update OpenSSL to 1.1.1f in Azure Pipelines. - -- bpo-40094: Add :func:`test.support.wait_process` function. - -- bpo-40003: ``test.bisect_cmd`` now copies Python command line options like - ``-O`` or ``-W``. Moreover, emit a warning if ``test.bisect_cmd`` is used - with ``-w``/``--verbose2`` option. - -- bpo-39380: Add the encoding in :class:`ftplib.FTP` and - :class:`ftplib.FTP_TLS` to the constructor as keyword-only and change the - default from ``latin-1`` to ``utf-8`` to follow :rfc:`2640`. - -- bpo-39793: Use the same domain when testing ``make_msgid``. Patch by - Batuhan Taskaya. - -- bpo-1812: Fix newline handling in doctest.testfile when loading from a - package whose loader has a get_data method. Patch by Peter Donis. - -Build ------ - -- bpo-38360: Support single-argument form of macOS -isysroot flag. - -- bpo-40158: Fix CPython MSBuild Properties in NuGet Package - (build/native/python.props) - -- bpo-38527: Fix configure check on Solaris for "float word ordering": - sometimes, the correct "grep" command was not being used. Patch by Arnon - Yaari. - -Windows -------- - -- bpo-40164: Updates Windows to OpenSSL 1.1.1f - -- bpo-8901: Ignore the Windows registry when the ``-E`` option is used. - -macOS ------ - -- bpo-38329: python.org macOS installers now update the Current version - symlink of /Library/Frameworks/Python.framework/Versions for 3.9 installs. - Previously, Current was only updated for Python 2.x installs. This should - make it easier to embed Python 3 into other macOS applications. - -- bpo-40164: Update macOS installer builds to use OpenSSL 1.1.1g. - -IDLE ----- - -- bpo-38439: Add a 256×256 pixel IDLE icon to support more modern - environments. Created by Andrew Clover. Delete the unused macOS idle.icns - icon file. - -- bpo-38689: IDLE will no longer freeze when inspect.signature fails when - fetching a calltip. - -Tools/Demos ------------ - -- bpo-40385: Removed the checkpyc.py tool. Please see compileall without - force mode as a potential alternative. - -- bpo-40179: Fixed translation of ``#elif`` in Argument Clinic. - -- bpo-40094: Fix ``which.py`` script exit code: it now uses - :func:`os.waitstatus_to_exitcode` to convert :func:`os.system` exit status - into an exit code. - -C API ------ - -- bpo-40241: Move the :c:type:`!PyGC_Head` structure to the internal C API. - -- bpo-40170: Convert :c:func:`PyObject_IS_GC` macro to a function to hide - implementation details. - -- bpo-40241: Add the functions :c:func:`PyObject_GC_IsTracked` and - :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if - Python objects are being currently tracked or have been already finalized - by the garbage collector respectively. Patch by Pablo Galindo. - -- bpo-40170: The :c:func:`!PyObject_NEW` macro becomes an alias to the - :c:func:`PyObject_New` macro, and the :c:func:`!PyObject_NEW_VAR` macro - becomes an alias to the :c:func:`PyObject_NewVar` macro, to hide - implementation details. They no longer access directly the - :c:member:`PyTypeObject.tp_basicsize` member. - -- bpo-40170: :c:func:`PyType_HasFeature` now always calls - :c:func:`PyType_GetFlags` to hide implementation details. Previously, it - accessed directly the :c:member:`PyTypeObject.tp_flags` member when the - limited C API was not used. - -- bpo-40170: Convert the :c:func:`!PyObject_GET_WEAKREFS_LISTPTR` macro to a - function to hide implementation details: the macro accessed directly to - the :c:member:`PyTypeObject.tp_weaklistoffset` member. - -- bpo-40170: Convert :c:func:`PyObject_CheckBuffer` macro to a function to - hide implementation details: the macro accessed directly the - :c:member:`PyTypeObject.tp_as_buffer` member. - -- bpo-40170: Always declare :c:func:`PyIndex_Check` as an opaque function to - hide implementation details: remove ``PyIndex_Check()`` macro. The macro - accessed directly the :c:member:`PyTypeObject.tp_as_number` member. - -- bpo-39947: Add :c:func:`PyThreadState_GetID` function: get the unique - identifier of a Python thread state. - - -What's New in Python 3.9.0 alpha 5? -=================================== - -*Release date: 2020-03-23* - -Security --------- - -- bpo-38576: Disallow control characters in hostnames in http.client, - addressing :cve:`2019-18348`. Such potentially malicious header injection - URLs now cause a InvalidURL to be raised. - -Core and Builtins ------------------ - -- bpo-40010: Optimize pending calls in multithreaded applications. If a - thread different than the main thread schedules a pending call - (:c:func:`Py_AddPendingCall`), the bytecode evaluation loop is no longer - interrupted at each bytecode instruction to check for pending calls which - cannot be executed. Only the main thread can execute pending calls. - - Previously, the bytecode evaluation loop was interrupted at each - instruction until the main thread executes pending calls. - -- bpo-1635741: Port _weakref extension module to multiphase initialization - (:pep:`489`). - -- bpo-1635741: Port _collections module to multiphase initialization - (:pep:`489`). - -- bpo-40010: Optimize signal handling in multithreaded applications. If a - thread different than the main thread gets a signal, the bytecode - evaluation loop is no longer interrupted at each bytecode instruction to - check for pending signals which cannot be handled. Only the main thread of - the main interpreter can handle signals. - - Previously, the bytecode evaluation loop was interrupted at each - instruction until the main thread handles signals. - -- bpo-39984: If :c:func:`Py_AddPendingCall` is called in a subinterpreter, - the function is now scheduled to be called from the subinterpreter, rather - than being called from the main interpreter. Each subinterpreter now has - its own list of scheduled calls. - -- bpo-1635741: Port _heapq module to multiphase initialization. - -- bpo-1635741: Port itertools module to multiphase initialization - (:pep:`489`). - -- bpo-37207: Speed up calls to ``frozenset()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-39984: subinterpreters: Move - ``_PyRuntimeState.ceval.tracing_possible`` to - ``PyInterpreterState.ceval.tracing_possible``: each interpreter now has - its own variable. - -- bpo-37207: Speed up calls to ``set()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-1635741: Port _statistics module to multiphase initialization - (:pep:`489`). - -- bpo-39968: Use inline function to replace extension modules' - get_module_state macros. - -- bpo-39965: Correctly raise ``SyntaxError`` if *await* is used inside - non-async functions and ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` is set (like in the - asyncio REPL). Patch by Pablo Galindo. - -- bpo-39562: Allow executing asynchronous comprehensions on the top level - when the ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag is given. Patch by Batuhan - Taskaya. - -- bpo-37207: Speed up calls to ``tuple()`` by using the :pep:`590` - ``vectorcall`` calling convention. Patch by Donghee Na. - -- bpo-38373: Changed list overallocation strategy. It no longer - overallocates if the new size is closer to overallocated size than to the - old size and adds padding. - -- bpo-39926: Update Unicode database to Unicode version 13.0.0. - -- bpo-19466: Clear the frames of daemon threads earlier during the Python - shutdown to call objects destructors. So "unclosed file" resource warnings - are now emitted for daemon threads in a more reliable way. - -- bpo-38894: Fix a bug that was causing incomplete results when calling - ``pathlib.Path.glob`` in the presence of symlinks that point to files - where the user does not have read access. Patch by Pablo Galindo and Matt - Wozniski. - -- bpo-39877: Fix :c:func:`PyEval_RestoreThread` random crash at exit with - daemon threads. It now accesses the ``_PyRuntime`` variable directly - instead of using ``tstate->interp->runtime``, since ``tstate`` can be a - dangling pointer after :c:func:`Py_Finalize` has been called. Moreover, - the daemon thread now exits before trying to take the GIL. - -- bpo-39871: Fix a possible :exc:`SystemError` in - ``math.{atan2,copysign,remainder}()`` when the first argument cannot be - converted to a :class:`float`. Patch by Zackery Spytz. - -- bpo-39776: Fix race condition where threads created by PyGILState_Ensure() - could get a duplicate id. - - This affects consumers of tstate->id like the contextvar caching - machinery, which could return invalid cached objects under heavy thread - load (observed in embedded scenarios). - -- bpo-39778: Fixed a crash due to incorrect handling of weak references in - ``collections.OrderedDict`` classes. Patch by Pablo Galindo. - -- bpo-1635741: Port audioop extension module to multiphase initialization - (:pep:`489`). - -- bpo-39702: Relax :term:`decorator` grammar restrictions to allow any valid - expression (:pep:`614`). - -- bpo-38091: Tweak import deadlock detection code to not deadlock itself. - -- bpo-1635741: Port _locale extension module to multiphase initialization - (:pep:`489`). - -- bpo-39087: Optimize :c:func:`PyUnicode_AsUTF8` and - :c:func:`PyUnicode_AsUTF8AndSize` slightly when they need to create - internal UTF-8 cache. - -- bpo-39520: Fix unparsing of ext slices with no items (``foo[:,]``). Patch - by Batuhan Taskaya. - -- bpo-39220: Do not optimize annotations if 'from __future__ import - annotations' is used. Patch by Pablo Galindo. - -- bpo-35712: Using :data:`NotImplemented` in a boolean context has been - deprecated. Patch contributed by Josh Rosenberg. - -- bpo-22490: Don't leak environment variable ``__PYVENV_LAUNCHER__`` into - the interpreter session on macOS. - -Library -------- - -- bpo-39830: Add :class:`zipfile.Path` to ``__all__`` in the :mod:`zipfile` - module. - -- bpo-40000: Improved error messages for validation of ``ast.Constant`` - nodes. Patch by Batuhan Taskaya. - -- bpo-39999: ``__module__`` of the AST node classes is now set to "ast" - instead of "_ast". Added docstrings for dummy AST node classes and - deprecated attributes. - -- bpo-39991: :func:`uuid.getnode` now skips IPv6 addresses with the same - string length than a MAC address (17 characters): only use MAC addresses. - -- bpo-39988: Deprecated ``ast.AugLoad`` and ``ast.AugStore`` node classes - because they are no longer used. - -- bpo-39656: Ensure ``bin/python3.#`` is always present in virtual - environments on POSIX platforms - by Anthony Sottile. - -- bpo-39969: Deprecated ``ast.Param`` node class because it's no longer - used. Patch by Batuhan Taskaya. - -- bpo-39360: Ensure all workers exit when finalizing a - :class:`multiprocessing.Pool` implicitly via the module finalization - handlers of multiprocessing. This fixes a deadlock situation that can be - experienced when the Pool is not properly finalized via the context - manager or a call to ``multiprocessing.Pool.terminate``. Patch by Batuhan - Taskaya and Pablo Galindo. - -- bpo-35370: sys.settrace(), sys.setprofile() and _lsprof.Profiler.enable() - now properly report :c:func:`PySys_Audit` error if "sys.setprofile" or - "sys.settrace" audit event is denied. - -- bpo-39936: AIX: Fix _aix_support module when the subprocess is not - available, when building Python from scratch. It now uses new private - _bootsubprocess module, rather than having two implementations depending - if subprocess is available or not. So _aix_support.aix_platform() result - is now the same if subprocess is available or not. - -- bpo-36144: :class:`collections.OrderedDict` now implements ``|`` and - ``|=`` (:pep:`584`). - -- bpo-39652: The column name found in ``sqlite3.Cursor.description`` is now - truncated on the first '[' only if the PARSE_COLNAMES option is set. - -- bpo-39915: Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has call - objects in the order of awaited arguments instead of using - :attr:`unittest.mock.Mock.call_args` which has the last value of the call. - Patch by Karthikeyan Singaravelan. - -- bpo-36144: Updated :data:`os.environ` and :data:`os.environb` to support - :pep:`584`'s merge (``|``) and update (``|=``) operators. - -- bpo-38662: The ``ensurepip`` module now invokes ``pip`` via the ``runpy`` - module. Hence it is no longer tightly coupled with the internal API of the - bundled ``pip`` version, allowing easier updates to a newer ``pip`` - version both internally and for distributors. - -- bpo-38075: Fix the :meth:`random.Random.seed` method when a :class:`bool` - is passed as the seed. - -- bpo-39916: More reliable use of ``os.scandir()`` in ``Path.glob()``. It no - longer emits a ResourceWarning when interrupted. - -- bpo-39850: :mod:`multiprocessing` now supports abstract socket addresses - (if abstract sockets are supported in the running platform). When creating - arbitrary addresses (like when default-constructing - :class:`multiprocessing.connection.Listener` objects) abstract sockets are - preferred to avoid the case when the temporary-file-generated address is - too large for an AF_UNIX socket address. Patch by Pablo Galindo. - -- bpo-36287: :func:`ast.dump` no longer outputs optional fields and - attributes with default values. The default values for optional fields and - attributes of AST nodes are now set as class attributes (e.g. - ``Constant.kind`` is set to ``None``). - -- bpo-39889: Fixed :func:`ast.unparse` for extended slices containing a - single element (e.g. ``a[i:j,]``). Remove redundant tuples when index with - a tuple (e.g. ``a[i, j]``). - -- bpo-39828: Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by - Donghee Na. - -- bpo-13487: Avoid a possible *"RuntimeError: dictionary changed size during - iteration"* from :func:`inspect.getmodule` when it tried to loop through - :data:`sys.modules`. - -- bpo-39674: Revert "bpo-37330: open() no longer accept 'U' in file mode". - The "U" mode of open() is kept in Python 3.9 to ease transition from - Python 2.7, but will be removed in Python 3.10. - -- bpo-28577: The hosts method on 32-bit prefix length IPv4Networks and - 128-bit prefix IPv6Networks now returns a list containing the single - Address instead of an empty list. - -- bpo-39826: Add getConnection method to logging HTTPHandler to enable - custom connections. - -- bpo-39763: Reimplement ``distutils.spawn.spawn`` function with the - :mod:`subprocess` module. - -- bpo-39794: Add --without-decimal-contextvar build option. This enables a - thread-local rather than a coroutine local context. - -- bpo-36144: :class:`collections.defaultdict` now implements ``|`` - (:pep:`584`). - -- bpo-39517: Fix runpy.run_path() when using pathlike objects - -- bpo-39775: Change ``inspect.Signature.parameters`` back to - ``collections.OrderedDict``. This was changed to ``dict`` in Python - 3.9.0a4. - -- bpo-39678: Refactor queue_manager in - :class:`concurrent.futures.ProcessPoolExecutor` to make it easier to - maintain. - -- bpo-39764: Fix AttributeError when calling get_stack on a PyAsyncGenObject - Task - -- bpo-39769: The :func:`compileall.compile_dir` function's *ddir* parameter - and the compileall command line flag ``-d`` no longer write the wrong - pathname to the generated pyc file for submodules beneath the root of the - directory tree being compiled. This fixes a regression introduced with - Python 3.5. - -- bpo-36144: :class:`types.MappingProxyType` objects now support the merge - (``|``) operator from :pep:`584`. - -- bpo-38691: The :mod:`importlib` module now ignores the - :envvar:`PYTHONCASEOK` environment variable when the :option:`-E` or - :option:`-I` command line options are being used. - -- bpo-39719: Remove :meth:`tempfile.SpooledTemporaryFile.softspace` as files - no longer have the ``softspace`` attribute in Python 3. Patch by Shantanu. - -- bpo-39667: Improve pathlib.Path compatibility on zipfile.Path and correct - performance degradation as found in zipp 3.0. - -- bpo-39638: Keep ASDL signatures in the docstrings for ``AST`` nodes. Patch - by Batuhan Taskaya - -- bpo-39639: Deprecated ``ast.Suite`` node class because it's no longer - used. Patch by Batuhan Taskaya. - -- bpo-39609: Add thread_name_prefix to default asyncio executor - -- bpo-39548: Fix handling of header in - :class:`urllib.request.AbstractDigestAuthHandler` when the optional - ``qop`` parameter is not present. - -- bpo-39509: HTTP status codes ``103 EARLY_HINTS`` and ``425 TOO_EARLY`` are - added to :class:`http.HTTPStatus`. Patch by Donghee Na. - -- bpo-39507: Adding HTTP status 418 "I'm a Teapot" to HTTPStatus in http - library. Patch by Ross Rhodes. - -- bpo-39495: Remove default value from *attrs* parameter of - :meth:`xml.etree.ElementTree.TreeBuilder.start` for consistency between - Python and C implementations. - -- bpo-38971: Open issue in the BPO indicated a desire to make the - implementation of codecs.open() at parity with io.open(), which implements - a try/except to assure file stream gets closed before an exception is - raised. - -- bpo-38641: Added starred expressions support to ``return`` and ``yield`` - statements for ``lib2to3``. Patch by Vlad Emelianov. - -- bpo-37534: When using minidom module to generate XML documents the ability - to add Standalone Document Declaration is added. All the changes are made - to generate a document in compliance with Extensible Markup Language (XML) - 1.0 (Fifth Edition) W3C Recommendation (available here: - https://www.w3.org/TR/xml/#sec-prolog-dtd). - -- bpo-34788: Add support for scoped IPv6 addresses to :mod:`ipaddress`. - Patch by Oleksandr Pavliuk. - -- bpo-34822: Simplified AST for subscription. Simple indices are now - represented by their value, extended slices are represented as tuples. - :mod:`ast` classes ``Index`` and ``ExtSlice`` are considered deprecated - and will be removed in future Python versions. In the meantime, - ``Index(value)`` now returns a ``value`` itself, ``ExtSlice(slices)`` - returns ``Tuple(slices, Load())``. - -Documentation -------------- - -- bpo-39868: Updated the Language Reference for :pep:`572`. - -- bpo-13790: Change 'string' to 'specification' in format doc. - -- bpo-17422: The language reference no longer restricts default class - namespaces to dicts only. - -- bpo-39530: Fix misleading documentation about mixed-type numeric - comparisons. - -- bpo-39718: Update :mod:`token` documentation to reflect additions in - Python 3.8 - -- bpo-39677: Changed operand name of **MAKE_FUNCTION** from *argc* to - *flags* for module :mod:`dis` - -Tests ------ - -- bpo-40019: test_gdb now skips tests if it detects that gdb failed to read - debug information because the Python binary is optimized. - -- bpo-27807: ``test_site.test_startup_imports()`` is now skipped if a path - of :data:`sys.path` contains a ``.pth`` file. - -- bpo-26067: Do not fail test_shutil test_chown test when uid or gid of user - cannot be resolved to a name. - -- bpo-39855: test_subprocess.test_user() now skips the test on an user name - if the user name doesn't exist. For example, skip the test if the user - "nobody" doesn't exist on Linux. - -Build ------ - -- bpo-39761: Fix build with DTrace but without additional DFLAGS. - -- bpo-39763: setup.py now uses a basic implementation of the - :mod:`subprocess` module if the :mod:`subprocess` module is not available: - before required C extension modules are built. - -- bpo-1294959: Add ``--with-platlibdir`` option to the configure script: - name of the platform-specific library directory, stored in the new - :data:`sys.platlibdir` attribute. It is used to build the path of - platform-specific extension modules and the path of the standard library. - It is equal to ``"lib"`` on most platforms. On Fedora and SuSE, it is - equal to ``"lib64"`` on 64-bit platforms. Patch by Jan Matějek, Matěj - Cepl, Charalampos Stratakis and Victor Stinner. - -Windows -------- - -- bpo-39930: Ensures the required :file:`vcruntime140.dll` is included in - install packages. - -- bpo-39847: Avoid hang when computer is hibernated whilst waiting for a - mutex (for lock-related objects from :mod:`threading`) around 49-day - uptime. - -- bpo-38597: ``distutils`` will no longer statically link - :file:`vcruntime140.dll` when a redistributable version is unavailable. - All future releases of CPython will include a copy of this DLL to ensure - distributed extensions can continue to load. - -- bpo-38380: Update Windows builds to use SQLite 3.31.1 - -- bpo-39789: Update Windows release build machines to Visual Studio 2019 - (MSVC 14.2). - -- bpo-34803: Package for nuget.org now includes repository reference and - bundled icon image. - -macOS ------ - -- bpo-38380: Update macOS builds to use SQLite 3.31.1 - -IDLE ----- - -- bpo-27115: For 'Go to Line', use a Query box subclass with IDLE standard - behavior and improved error checking. - -- bpo-39885: Since clicking to get an IDLE context menu moves the cursor, - any text selection should be and now is cleared. - -- bpo-39852: Edit "Go to line" now clears any selection, preventing - accidental deletion. It also updates Ln and Col on the status bar. - -- bpo-39781: Selecting code context lines no longer causes a jump. - -Tools/Demos ------------ - -- bpo-36184: Port python-gdb.py to FreeBSD. python-gdb.py now checks for - "take_gil" function name to check if a frame tries to acquire the GIL, - instead of checking for "pthread_cond_timedwait" which is specific to - Linux and can be a different condition than the GIL. - -- bpo-38080: Added support to fix ``getproxies`` in the - :mod:`!lib2to3.fixes.fix_urllib` module. Patch by José Roberto Meza - Cabrera. - -C API ------ - -- bpo-40024: Add :c:func:`PyModule_AddType` helper function: add a type to a - module. Patch by Donghee Na. - -- bpo-39946: Remove ``_PyRuntime.getframe`` hook and remove - ``_PyThreadState_GetFrame`` macro which was an alias to - ``_PyRuntime.getframe``. They were only exposed by the internal C API. - Remove also ``PyThreadFrameGetter`` type. - -- bpo-39947: Add :c:func:`PyThreadState_GetFrame` function: get the current - frame of a Python thread state. - -- bpo-37207: Add _PyArg_NoKwnames helper function. Patch by Donghee Na. - -- bpo-39947: Add :c:func:`PyThreadState_GetInterpreter`: get the interpreter - of a Python thread state. - -- bpo-39947: Add :c:func:`PyInterpreterState_Get` function to the limited C - API. - -- bpo-35370: If :c:func:`PySys_Audit` fails in :c:func:`PyEval_SetProfile` - or :c:func:`PyEval_SetTrace`, log the error as an unraisable exception. - -- bpo-39947: Move the static inline function flavor of - Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() to the internal C API: - they access PyThreadState attributes. The limited C API provides regular - functions which hide implementation details. - -- bpo-39947: Py_TRASHCAN_BEGIN_CONDITION and Py_TRASHCAN_END macro no longer - access PyThreadState attributes, but call new private _PyTrash_begin() and - _PyTrash_end() functions which hide implementation details. - -- bpo-39884: :c:func:`PyDescr_NewMethod` and :c:func:`PyCFunction_NewEx` now - include the method name in the SystemError "bad call flags" error message - to ease debug. - -- bpo-39877: Deprecated :c:func:`!PyEval_InitThreads` and - :c:func:`!PyEval_ThreadsInitialized`. Calling - :c:func:`!PyEval_InitThreads` now does nothing. - -- bpo-38249: :c:macro:`Py_UNREACHABLE` is now implemented with - ``__builtin_unreachable()`` and analogs in release mode. - -- bpo-38643: :c:func:`PyNumber_ToBase` now raises a :exc:`SystemError` - instead of crashing when called with invalid base. - -- bpo-39882: The :c:func:`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. - -- bpo-39824: Extension modules: :c:member:`~PyModuleDef.m_traverse`, - :c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free` - functions of :c:type:`PyModuleDef` are no longer called if the module - state was requested but is not allocated yet. This is the case immediately - after the module is created and before the module is executed - (:c:data:`Py_mod_exec` function). More precisely, these functions are not - called if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module - state (as returned by :c:func:`PyModule_GetState`) is ``NULL``. - - Extension modules without module state (``m_size <= 0``) are not affected. - -- bpo-38913: Fixed segfault in ``Py_BuildValue()`` called with a format - containing "#" and undefined PY_SSIZE_T_CLEAN whwn an exception is set. - -- bpo-38500: Add a private API to get and set the frame evaluation function: - add :c:func:`_PyInterpreterState_GetEvalFrameFunc` and - :c:func:`_PyInterpreterState_SetEvalFrameFunc` C functions. The - :c:type:`_PyFrameEvalFunction` function type now takes a *tstate* - parameter. - - -What's New in Python 3.9.0 alpha 4? -=================================== - -*Release date: 2020-02-25* - -Security --------- - -- bpo-39184: Add audit events to functions in ``fcntl``, ``msvcrt``, ``os``, - ``resource``, ``shutil``, ``signal`` and ``syslog``. - -- bpo-39401: Avoid unsafe DLL load at startup on Windows 7 and earlier. - -- bpo-39184: Add audit events to command execution functions in os and pty - modules. - -Core and Builtins ------------------ - -- bpo-39382: Fix a use-after-free in the single inheritance path of - ``issubclass()``, when the ``__bases__`` of an object has a single - reference, and so does its first item. Patch by Yonatan Goldschmidt. - -- bpo-39573: Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by - Donghee Na. - -- bpo-39619: Enable use of :func:`os.chroot` on HP-UX systems. - -- bpo-39573: Add :c:func:`Py_IS_TYPE` static inline function to check - whether the object *o* type is *type*. - -- bpo-39606: Fix regression caused by fix for bpo-39386, that prevented - calling ``aclose`` on an async generator that had already been closed or - exhausted. - -- bpo-39579: Change the ending column offset of ``Attribute`` nodes - constructed in ``ast_for_dotted_name`` to point at the end of the current - node and not at the end of the last ``NAME`` node. - -- bpo-1635741: Port _crypt extension module to multiphase initialization - (:pep:`489`). - -- bpo-1635741: Port _contextvars extension module to multiphase - initialization (:pep:`489`). - -- bpo-39510: Fix segfault in ``readinto()`` method on closed BufferedReader. - -- bpo-39502: Fix :func:`time.localtime` on 64-bit AIX to support years - before 1902 and after 2038. Patch by M Felt. - -- bpo-39492: Fix a reference cycle in the C Pickler that was preventing the - garbage collection of deleted, pickled objects. - -- bpo-39453: Fixed a possible crash in :meth:`list.__contains__` when a list - is changed during comparing items. Patch by Donghee Na. - -- bpo-39434: :term:`floor division` of float operation now has a better - performance. Also the message of :exc:`ZeroDivisionError` for this - operation is updated. Patch by Donghee Na. - -- bpo-1635741: Port _codecs extension module to multiphase initialization - (:pep:`489`). - -- bpo-1635741: Port _bz2 extension module to multiphase initialization - (:pep:`489`). - -- bpo-1635741: Port _abc extension module to multiphase initialization - (:pep:`489`). - -- bpo-39320: Replace two complex bytecodes for building dicts with two - simpler ones. The new bytecodes ``DICT_MERGE`` and ``DICT_UPDATE`` have - been added The old bytecodes ``BUILD_MAP_UNPACK`` and - ``BUILD_MAP_UNPACK_WITH_CALL`` have been removed. - -- bpo-39219: Syntax errors raised in the tokenizer now always set correct - "text" and "offset" attributes. - -- bpo-36051: Drop the GIL during large ``bytes.join`` operations. Patch by - Bruce Merry. - -- bpo-38960: Fix DTrace build issues on FreeBSD. Patch by David Carlier. - -- bpo-37207: Speed up calls to ``range()`` by about 30%, by using the PEP - 590 ``vectorcall`` calling convention. Patch by Mark Shannon. - -- bpo-36144: :class:`dict` (and :class:`collections.UserDict`) objects now - support PEP 584's merge (``|``) and update (``|=``) operators. Patch by - Brandt Bucher. - -- bpo-32856: Optimized the idiom for assignment a temporary variable in - comprehensions. Now ``for y in [expr]`` in comprehensions is as fast as a - simple assignment ``y = expr``. - -Library -------- - -- bpo-30566: Fix :exc:`IndexError` when trying to decode an invalid string - with punycode codec. - -- bpo-39649: Remove obsolete check for ``__args__`` in - ``bdb.Bdb.format_stack_entry``. - -- bpo-39648: Expanded :func:`math.gcd` and :func:`math.lcm` to handle - multiple arguments. - -- bpo-39681: Fix a regression where the C pickle module wouldn't allow - unpickling from a file-like object that doesn't expose a readinto() - method. - -- bpo-35950: Raise :exc:`io.UnsupportedOperation` in - :meth:`io.BufferedReader.truncate` when it is called on a read-only - :class:`io.BufferedReader` instance. - -- bpo-39479: Add :func:`math.lcm` function: least common multiple. - -- bpo-39674: Revert "Do not expose abstract collection classes in the - collections module" change (bpo-25988). Aliases to ABC like - collections.Mapping are kept in Python 3.9 to ease transition from Python - 2.7, but will be removed in Python 3.10. - -- bpo-39104: Fix hanging ProcessPoolExcutor on ``shutdown(wait=False)`` when - a task has failed pickling. - -- bpo-39627: Fixed TypedDict totality check for inherited keys. - -- bpo-39474: Fixed starting position of AST for expressions like ``(a)(b)``, - ``(a)[b]`` and ``(a).b``. - -- bpo-21016: The :mod:`pydoc` and :mod:`trace` modules now use the - :mod:`sysconfig` module to get the path to the Python standard library, to - support uncommon installation path like ``/usr/lib64/python3.9/`` on - Fedora. Patch by Jan Matějek. - -- bpo-39590: Collections.deque now holds strong references during - deque.__contains__ and deque.count, fixing crashes. - -- bpo-39586: The distutils ``bdist_msi`` command is deprecated in Python - 3.9, use ``bdist_wheel`` (wheel packages) instead. - -- bpo-39595: Improved performance of zipfile.Path for files with a large - number of entries. Also improved performance and fixed minor issue as - published with `importlib_metadata 1.5 - <https://importlib-metadata.readthedocs.io/en/latest/history.html#v1-5-0>`_. - -- bpo-39350: Fix regression in :class:`fractions.Fraction` if the numerator - and/or the denominator is an :class:`int` subclass. The :func:`math.gcd` - function is now used to normalize the *numerator* and *denominator*. - :func:`math.gcd` always return a :class:`int` type. Previously, the GCD - type depended on *numerator* and *denominator*. - -- bpo-39567: Added audit for :func:`os.walk`, :func:`os.fwalk`, - :meth:`pathlib.Path.glob` and :meth:`pathlib.Path.rglob`. - -- bpo-39559: Remove unused, undocumented argument ``getters`` from - :func:`uuid.getnode` - -- bpo-38149: :func:`sys.audit` is now called only once per call of - :func:`glob.glob` and :func:`glob.iglob`. - -- bpo-39546: Fix a regression in :class:`~argparse.ArgumentParser` where - ``allow_abbrev=False`` was ignored for long options that used a prefix - character other than "-". - -- bpo-39450: Striped whitespace from docstring before returning it from - :func:`unittest.case.shortDescription`. - -- bpo-12915: A new function ``resolve_name`` has been added to the - ``pkgutil`` module. This resolves a string of the form ``'a.b.c.d'`` or - ``'a.b:c.d'`` to an object. In the example, ``a.b`` is a package/module - and ``c.d`` is an object within that package/module reached via recursive - attribute access. - -- bpo-39353: The :func:`binascii.crc_hqx` function is no longer deprecated. - -- bpo-39493: Mark ``typing.IO.closed`` as a property - -- bpo-39491: Add :data:`typing.Annotated` and ``include_extras`` parameter - to :func:`typing.get_type_hints` as part of :pep:`593`. Patch by Till - Varoquaux, documentation by Till Varoquaux and Konstantin Kashin. - -- bpo-39485: Fix a bug in :func:`unittest.mock.create_autospec` that would - complain about the wrong number of arguments for custom descriptors - defined in an extension module returning functions. - -- bpo-38932: Mock fully resets child objects on reset_mock(). Patch by - Vegard Stikbakke - -- bpo-39082: Allow AsyncMock to correctly patch static/class methods - -- bpo-39432: Implement PEP-489 algorithm for non-ascii "PyInit\_..." symbol - names in distutils to make it export the correct init symbol also on - Windows. - -- bpo-18819: Omit ``devmajor`` and ``devminor`` fields for non-device files - in :mod:`tarfile` archives, enabling bit-for-bit compatibility with GNU - ``tar(1)``. - -- bpo-39349: Added a new *cancel_futures* parameter to - :meth:`concurrent.futures.Executor.shutdown` that cancels all pending - futures which have not started running, instead of waiting for them to - complete before shutting down the executor. - -- bpo-39274: ``bool(fraction.Fraction)`` now returns a boolean even if - (numerator != 0) does not return a boolean (ex: numpy number). - -- bpo-34793: Remove support for ``with (await asyncio.lock):`` and ``with - (yield from asyncio.lock):``. The same is correct for - ``asyncio.Condition`` and ``asyncio.Semaphore``. - -- bpo-25597: Ensure, if ``wraps`` is supplied to - :class:`unittest.mock.MagicMock`, it is used to calculate return values - for the magic methods instead of using the default return values. Patch by - Karthikeyan Singaravelan. - -- bpo-36350: ``inspect.Signature.parameters`` and - ``inspect.BoundArguments.arguments`` are now dicts instead of - OrderedDicts. Patch contributed by Rémi Lapeyre. - -- bpo-35727: Fix sys.exit() and sys.exit(None) exit code propagation when - used in multiprocessing.Process. - -- bpo-32173: * Add ``lazycache`` function to ``__all__``. * Use - ``dict.clear`` to clear the cache. * Refactoring ``getline`` function and - ``checkcache`` function. - -Documentation -------------- - -- bpo-17422: The language reference now specifies restrictions on class - namespaces. Adapted from a patch by Ethan Furman. - -- bpo-39572: Updated documentation of ``total`` flag of ``TypedDict``. - -- bpo-39654: In pyclbr doc, update 'class' to 'module' where appropriate and - add readmodule comment. Patch by Hakan Çelik. - -- bpo-39153: Clarify refcounting semantics for the following functions: - - PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem - - PyDict_SetItemString - -- bpo-39392: Explain that when filling with turtle, overlap regions may be - left unfilled. - -- bpo-39369: Update mmap readline method description. The fact that the - readline method does update the file position should not be ignored since - this might give the impression for the programmer that it doesn't update - it. - -- bpo-9056: Include subsection in TOC for PDF version of docs. - -Tests ------ - -- bpo-38325: Skip tests on non-BMP characters of test_winconsoleio. - -- bpo-39502: Skip test_zipfile.test_add_file_after_2107() if - :func:`time.localtime` fails with :exc:`OverflowError`. It is the case on - AIX 6.1 for example. - -Build ------ - -- bpo-39489: Remove ``COUNT_ALLOCS`` special build. - -Windows -------- - -- bpo-39553: Delete unused code related to SxS manifests. - -- bpo-39439: Honor the Python path when a virtualenv is active on Windows. - -- bpo-39393: Improve the error message when attempting to load a DLL with - unresolved dependencies. - -- bpo-38883: :meth:`~pathlib.Path.home` and :meth:`~pathlib.Path.expanduser` - on Windows now prefer :envvar:`USERPROFILE` and no longer use - :envvar:`HOME`, which is not normally set for regular user accounts. This - makes them again behave like :func:`os.path.expanduser`, which was changed - to ignore :envvar:`HOME` in 3.8, see :issue:`36264`. - -- bpo-39185: The build.bat script has additional options for very-quiet - output (-q) and very-verbose output (-vv) - -IDLE ----- - -- bpo-39663: Add tests for pyparse find_good_parse_start(). - -- bpo-39600: In the font configuration window, remove duplicated font names. - -- bpo-30780: Add remaining configdialog tests for buttons and highlights and - keys tabs. - -- bpo-39388: IDLE Settings Cancel button now cancels pending changes - -- bpo-38792: Close an IDLE shell calltip if a :exc:`KeyboardInterrupt` or - shell restart occurs. Patch by Zackery Spytz. - -C API ------ - -- bpo-35081: Move the ``bytes_methods.h`` header file to the internal C API - as ``pycore_bytes_methods.h``: it only contains private symbols (prefixed - by ``_Py``), except of the ``PyDoc_STRVAR_shared()`` macro. - -- bpo-35081: Move the ``dtoa.h`` header file to the internal C API as - ``pycore_dtoa.h``: it only contains private functions (prefixed by - ``_Py``). The :mod:`math` and :mod:`cmath` modules must now be compiled - with the ``Py_BUILD_CORE`` macro defined. - -- bpo-39573: Add :c:func:`Py_SET_SIZE` function to set the size of an - object. - -- bpo-39500: :c:func:`PyUnicode_IsIdentifier` does not call - :c:func:`Py_FatalError` anymore if the string is not ready. - -- bpo-39573: Add :c:func:`Py_SET_TYPE` function to set the type of an - object. - -- bpo-39573: Add a :c:func:`Py_SET_REFCNT` function to set the reference - counter of an object. - -- bpo-39542: Convert :c:func:`PyType_HasFeature`, :c:func:`PyType_Check` and - :c:func:`PyType_CheckExact` macros to static inline functions. - -- bpo-39542: In the limited C API, ``PyObject_INIT()`` and - ``PyObject_INIT_VAR()`` are now defined as aliases to - :c:func:`PyObject_Init` and :c:func:`PyObject_InitVar` to make their - implementation opaque. It avoids to leak implementation details in the - limited C API. Exclude the following functions from the limited C API: - ``_Py_NewReference()``, ``_Py_ForgetReference()``, - ``_PyTraceMalloc_NewReference()`` and ``_Py_GetRefTotal()``. - -- bpo-39542: Exclude trashcan mechanism from the limited C API: it requires - access to PyTypeObject and PyThreadState structure fields, whereas these - structures are opaque in the limited C API. - -- bpo-39511: The :c:func:`PyThreadState_Clear` function now calls the - :c:member:`PyThreadState.on_delete` callback. Previously, that happened in - :c:func:`PyThreadState_Delete`. - -- bpo-38076: Fix to clear the interpreter state only after clearing module - globals to guarantee module state access from C Extensions during runtime - destruction - -- bpo-39245: The Vectorcall API (PEP 590) was made public, adding the - functions ``PyObject_Vectorcall``, ``PyObject_VectorcallMethod``, - ``PyVectorcall_Function``, ``PyObject_CallOneArg``, - ``PyObject_CallMethodNoArgs``, ``PyObject_CallMethodOneArg``, - ``PyObject_FastCallDict``, and the flag ``Py_TPFLAGS_HAVE_VECTORCALL``. - - -What's New in Python 3.9.0 alpha 3? -=================================== - -*Release date: 2020-01-24* - -Core and Builtins ------------------ - -- bpo-39427: Document all possibilities for the ``-X`` options in the - command line help section. Patch by Pablo Galindo. - -- bpo-39421: Fix possible crashes when operating with the functions in the - :mod:`heapq` module and custom comparison operators. - -- bpo-39386: Prevent double awaiting of async iterator. - -- bpo-17005: Add :class:`functools.TopologicalSorter` to the - :mod:`functools` module to offers functionality to perform topological - sorting of graphs. Patch by Pablo Galindo, Tim Peters and Larry Hastings. - -- bpo-39320: Replace four complex bytecodes for building sequences with - three simpler ones. - - The following four bytecodes have been removed: - - * BUILD_LIST_UNPACK - * BUILD_TUPLE_UNPACK - * BUILD_SET_UNPACK - * BUILD_TUPLE_UNPACK_WITH_CALL - - The following three bytecodes have been added: - - * LIST_TO_TUPLE - * LIST_EXTEND - * SET_UPDATE - -- bpo-39336: Import loaders which publish immutable module objects can now - publish immutable packages in addition to individual modules. - -- bpo-39322: Added a new function :func:`gc.is_finalized` to check if an - object has been finalized by the garbage collector. Patch by Pablo - Galindo. - -- bpo-39048: Improve the displayed error message when incorrect types are - passed to ``async with`` statements by looking up the :meth:`__aenter__` - special method before the :meth:`__aexit__` special method when entering - an asynchronous context manager. Patch by Géry Ogam. - -- bpo-39235: Fix AST end location for lone generator expression in function - call, e.g. f(i for i in a). - -- bpo-39209: Correctly handle multi-line tokens in interactive mode. Patch - by Pablo Galindo. - -- bpo-1635741: Port _json extension module to multiphase initialization - (:pep:`489`). - -- bpo-39216: Fix constant folding optimization for positional only arguments - - by Anthony Sottile. - -- bpo-39215: Fix ``SystemError`` when nested function has annotation on - positional-only argument - by Anthony Sottile. - -- bpo-39200: Correct the error message when calling the :func:`min` or - :func:`max` with no arguments. Patch by Donghee Na. - -- bpo-39200: Correct the error message when trying to construct - :class:`range` objects with no arguments. Patch by Pablo Galindo. - -- bpo-39166: Fix incorrect line execution reporting in trace functions when - tracing the last iteration of asynchronous for loops. Patch by Pablo - Galindo. - -- bpo-39114: Fix incorrect line execution reporting in trace functions when - tracing exception handlers with name binding. Patch by Pablo Galindo. - -- bpo-39156: Split the COMPARE_OP bytecode instruction into four distinct - instructions. - - * COMPARE_OP for rich comparisons - * IS_OP for 'is' and 'is not' tests - * CONTAINS_OP for 'in' and 'is not' tests - * JUMP_IF_NOT_EXC_MATCH for checking exceptions in 'try-except' statements. - - This improves the clarity of the interpreter and should provide a modest - speedup. - -- bpo-38588: Fix possible crashes in dict and list when calling - :c:func:`PyObject_RichCompareBool`. - -- bpo-13601: By default, ``sys.stderr`` is line-buffered now, even if - ``stderr`` is redirected to a file. You can still make ``sys.stderr`` - unbuffered by passing the :option:`-u` command-line option or setting the - :envvar:`PYTHONUNBUFFERED` environment variable. - - (Contributed by Jendrik Seipp in bpo-13601.) - -- bpo-38610: Fix possible crashes in several list methods by holding strong - references to list elements when calling - :c:func:`PyObject_RichCompareBool`. - -- bpo-32021: Include brotli .br encoding in mimetypes encodings_map - -Library -------- - -- bpo-39430: Fixed race condition in lazy imports in :mod:`tarfile`. - -- bpo-39413: The :func:`os.unsetenv` function is now also available on - Windows. - -- bpo-39390: Fixed a regression with the ``ignore`` callback of - :func:`shutil.copytree`. The argument types are now ``str`` and - ``List[str]`` again. - -- bpo-39395: The :func:`os.putenv` and :func:`os.unsetenv` functions are now - always available. - -- bpo-39406: If ``setenv()`` C function is available, :func:`os.putenv` is - now implemented with ``setenv()`` instead of ``putenv()``, so Python - doesn't have to handle the environment variable memory. - -- bpo-39396: Fix ``math.nextafter(-0.0, +0.0)`` on AIX 7.1. - -- bpo-29435: Allow :func:`tarfile.is_tarfile` to be used with file and - file-like objects, like :func:`zipfile.is_zipfile`. Patch by William - Woodruff. - -- bpo-39377: Removed ``encoding`` option from :func:`json.loads`. It has - been deprecated since Python 3.1. - -- bpo-39389: Write accurate compression level metadata in :mod:`gzip` - archives, rather than always signaling maximum compression. - -- bpo-39366: The previously deprecated ``xpath()`` and ``xgtitle()`` methods - of :class:`!nntplib.NNTP` have been removed. - -- bpo-39357: Remove the *buffering* parameter of :class:`bz2.BZ2File`. Since - Python 3.0, it was ignored and using it was emitting - :exc:`DeprecationWarning`. Pass an open file object, to control how the - file is opened. The *compresslevel* parameter becomes keyword-only. - -- bpo-39353: Deprecate binhex4 and hexbin4 standards. Deprecate the - :mod:`binhex` module and the following :mod:`binascii` functions: - :func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`, - :func:`~binascii.rlecode_hqx`, :func:`~binascii.rledecode_hqx`, - :func:`~binascii.crc_hqx`. - -- bpo-39351: Remove ``base64.encodestring()`` and ``base64.decodestring()``, - aliases deprecated since Python 3.1: use :func:`base64.encodebytes` and - :func:`base64.decodebytes` instead. - -- bpo-39350: Remove ``fractions.gcd()`` function, deprecated since Python - 3.5 (:issue:`22486`): use :func:`math.gcd` instead. - -- bpo-39329: :class:`~smtplib.LMTP` constructor now has an optional - *timeout* parameter. Patch by Donghee Na. - -- bpo-39313: Add a new ``exec_function`` option (*--exec-function* in the - CLI) to ``RefactoringTool`` for making ``exec`` a function. Patch by - Batuhan Taskaya. - -- bpo-39259: :class:`~ftplib.FTP_TLS` and :class:`~ftplib.FTP_TLS` now raise - a :class:`ValueError` if the given timeout for their constructor is zero - to prevent the creation of a non-blocking socket. Patch by Donghee Na. - -- bpo-39259: :class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise - a :class:`ValueError` if the given timeout for their constructor is zero - to prevent the creation of a non-blocking socket. Patch by Donghee Na. - -- bpo-39310: Add :func:`math.ulp`: return the value of the least significant - bit of a float. - -- bpo-39297: Improved performance of importlib.metadata distribution - discovery and resilients to inaccessible sys.path entries - (importlib_metadata v1.4.0). - -- bpo-39259: :class:`!NNTP` and :class:`!NNTP_SSL` now raise a - :class:`ValueError` if the given timeout for their constructor is zero to - prevent the creation of a non-blocking socket. Patch by Donghee Na. - -- bpo-38901: When you specify prompt='.' or equivalently python -m venv - --prompt . ... the basename of the current directory is used to set the - created venv's prompt when it's activated. - -- bpo-39288: Add :func:`math.nextafter`: return the next floating-point - value after *x* towards *y*. - -- bpo-39259: :class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a - :class:`ValueError` if the given timeout for their constructor is zero to - prevent the creation of a non-blocking socket. Patch by Donghee Na. - -- bpo-39242: Updated the Gmane domain from news.gmane.org to news.gmane.io - which is used for examples of :class:`!NNTP` news reader server and - nntplib tests. - -- bpo-35292: Proxy the ``SimpleHTTPRequestHandler.guess_type`` to - ``mimetypes.guess_type`` so the ``mimetypes.init`` is called lazily to - avoid unnecessary costs when :mod:`http.server` module is imported. - -- bpo-39239: The :meth:`select.epoll.unregister` method no longer ignores - the :data:`~errno.EBADF` error. - -- bpo-38907: In http.server script, restore binding to IPv4 on Windows. - -- bpo-39152: Fix ttk.Scale.configure([name]) to return configuration tuple - for name or all options. Giovanni Lombardo contributed part of the patch. - -- bpo-39198: If an exception were to be thrown in ``Logger.isEnabledFor`` - (say, by asyncio timeouts or stopit) , the ``logging`` global lock may not - be released appropriately, resulting in deadlock. This change wraps that - block of code with ``try...finally`` to ensure the lock is released. - -- bpo-39191: Perform a check for running loop before starting a new task in - ``loop.run_until_complete()`` to fail fast; it prevents the side effect of - new task spawning before exception raising. - -- bpo-38871: Correctly parenthesize filter-based statements that contain - lambda expressions in :mod:`!lib2to3`. Patch by Donghee Na. - -- bpo-39142: A change was made to logging.config.dictConfig to avoid - converting instances of named tuples to ConvertingTuple. It's assumed that - named tuples are too specialised to be treated like ordinary tuples; if a - user of named tuples requires ConvertingTuple functionality, they will - have to implement that themselves in their named tuple class. - -- bpo-39158: ast.literal_eval() now supports empty sets. - -- bpo-39129: Fix import path for ``asyncio.TimeoutError`` - -- bpo-39057: :func:`urllib.request.proxy_bypass_environment` now ignores - leading dots and no longer ignores a trailing newline. - -- bpo-39056: Fixed handling invalid warning category in the -W option. No - longer import the re module if it is not needed. - -- bpo-39055: :func:`base64.b64decode` with ``validate=True`` raises now a - binascii.Error if the input ends with a single ``\n``. - -- bpo-21600: Fix :func:`mock.patch.stopall` to stop active patches that were - created with :func:`mock.patch.dict`. - -- bpo-39019: Implement dummy ``__class_getitem__`` for - :class:`tempfile.SpooledTemporaryFile`. - -- bpo-39019: Implement dummy ``__class_getitem__`` for ``subprocess.Popen``, - ``subprocess.CompletedProcess`` - -- bpo-38914: Adjusted the wording of the warning issued by distutils' - ``check`` command when the ``author`` and ``maintainer`` fields are - supplied but no corresponding e-mail field (``author_email`` or - ``maintainer_email``) is found. The wording now reflects the fact that - these fields are suggested, but not required. Patch by Juergen Gmach. - -- bpo-38878: Fixed __subclasshook__ of :class:`os.PathLike` to return a - correct result upon inheritance. Patch by Bar Harel. - -- bpo-38615: :class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now - have an optional *timeout* parameter for their constructors. Also, the - :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter - with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` - and :class:`~imaplib.IMAP4_stream` were applied to this change. Patch by - Donghee Na. - -- bpo-35182: Fixed :func:`Popen.communicate` subsequent call crash when the - child process has already closed any piped standard stream, but still - continues to be running. Patch by Andriy Maletsky. - -- bpo-38630: On Unix, :meth:`subprocess.Popen.send_signal` now polls the - process status. Polling reduces the risk of sending a signal to the wrong - process if the process completed, the :attr:`subprocess.Popen.returncode` - attribute is still ``None``, and the pid has been reassigned (recycled) to - a new different process. - -- bpo-38536: Removes trailing space in formatted currency with - ``international=True`` and a locale with symbol following value. E.g. - ``locale.currency(12.34, international=True)`` returned ``'12,34 EUR '`` - instead of ``'12,34 EUR'``. - -- bpo-38473: Use signature from inner mock for autospecced methods attached - with :func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan. - -- bpo-38361: Fixed an issue where ``ident`` could include a leading path - separator when :func:`syslog.openlog` was called without arguments. - -- bpo-38293: Add :func:`copy.copy` and :func:`copy.deepcopy` support to - :func:`property` objects. - -- bpo-37958: Added the pstats.Stats.get_profile_dict() method to return the - profile data as a StatsProfile instance. - -- bpo-28367: Termios magic constants for the following baud rates: - - B500000 - B576000 - B921600 - B1000000 - B1152000 - B1500000 - - B2000000 - B2500000 - B3000000 - B3500000 - B4000000 Patch by - Andrey Smirnov - -Documentation -------------- - -- bpo-39381: Mention in docs that :func:`asyncio.get_event_loop` implicitly - creates new event loop only if called from the main thread. - -- bpo-38918: Add an entry for ``__module__`` in the "function" & "method" - sections of the :mod:`inspect` docs' :ref:`inspect-types` table. - -- bpo-3530: In the :mod:`ast` module documentation, fix a misleading - ``NodeTransformer`` example and add advice on when to use the - ``fix_missing_locations`` function. - -Build ------ - -- bpo-39395: On non-Windows platforms, the :c:func:`setenv` and - :c:func:`unsetenv` functions are now required to build Python. - -- bpo-39160: Updated the documentation in ``./configure --help`` to show - default values, reference documentation where required and add additional - explanation where needed. - -- bpo-39144: The ctags and etags build targets both include Modules/_ctypes - and Python standard library source files. - -IDLE ----- - -- bpo-39050: Make IDLE Settings dialog Help button work again. - -- bpo-34118: Tag memoryview, range, and tuple as classes, the same as list, - etcetera, in the library manual built-in functions list. - -- bpo-32989: Add tests for editor newline_and_indent_event method. Remove - dead code from pyparse find_good_parse_start method. - -C API ------ - -- bpo-39372: Clean header files of interfaces defined but with no - implementation. The public API symbols being removed are: - ``_PyBytes_InsertThousandsGroupingLocale``, - ``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``, - ``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, - ``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, - ``_PyAIterWrapper_Type``, ``PyNullImporter_Type``, ``PyCmpWrapper_Type``, - ``PySortWrapper_Type``, ``PyNoArgsFunction``. - -- bpo-39164: Add a private ``_PyErr_GetExcInfo()`` function to retrieve - exception information of the specified Python thread state. - - -What's New in Python 3.9.0 alpha 2? -=================================== - -*Release date: 2019-12-18* - -Security --------- - -- bpo-38945: Newline characters have been escaped when performing uu - encoding to prevent them from overflowing into to content section of the - encoded file. This prevents malicious or accidental modification of data - during the decoding process. - -- bpo-37228: Due to significant security concerns, the *reuse_address* - parameter of :meth:`asyncio.loop.create_datagram_endpoint` is no longer - supported. This is because of the behavior of ``SO_REUSEADDR`` in UDP. For - more details, see the documentation for - ``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine - Pitrou, and Yury Selivanov in :issue:`37228`.) - -- bpo-38804: Fixes a ReDoS vulnerability in :mod:`http.cookiejar`. Patch by - Ben Caller. - -Core and Builtins ------------------ - -- bpo-39028: Slightly improve the speed of keyword argument parsing with - many kwargs by strengthening the assumption that kwargs are interned - strings. - -- bpo-39080: Fix the value of *end_col_offset* for Starred Expression AST - nodes when they are among the elements in the *args* attribute of Call AST - nodes. - -- bpo-39031: When parsing an "elif" node, lineno and col_offset of the node - now point to the "elif" keyword and not to its condition, making it - consistent with the "if" node. Patch by Lysandros Nikolaou. - -- bpo-20443: In Python 3.9.0a1, sys.argv[0] was made an absolute path if a - filename was specified on the command line. Revert this change, since most - users expect sys.argv to be unmodified. - -- bpo-39008: :c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used - for size arguments in the format string, regardless of whether - ``PY_SSIZE_T_CLEAN`` was defined at include time. - -- bpo-38673: In REPL mode, don't switch to PS2 if the line starts with - comment or whitespace. Based on work by Batuhan Taşkaya. - -- bpo-38922: Calling ``replace`` on a code object now raises the - ``code.__new__`` audit event. - -- bpo-38920: Add audit hooks for when :func:`sys.excepthook` and - :func:`sys.unraisablehook` are invoked. - -- bpo-38892: Improve documentation for audit events table and functions. - -- bpo-38852: Set the thread stack size to 8 Mb for debug builds on android - platforms. - -- bpo-38858: Each Python subinterpreter now has its own "small integer - singletons": numbers in [-5; 257] range. It is no longer possible to - change the number of small integers at build time by overriding - ``NSMALLNEGINTS`` and ``NSMALLPOSINTS`` macros: macros should now be - modified manually in ``pycore_pystate.h`` header file. - -- bpo-36854: The garbage collector state becomes per interpreter - (``PyInterpreterState.gc``), rather than being global - (``_PyRuntimeState.gc``). - -- bpo-38835: The ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` - macros are empty: they have been doing nothing for the last year, so stop - using them. - -- bpo-38328: Sped up the creation time of constant :class:`list` and - :class:`set` displays. Patch by Brandt Bucher. - -- bpo-38707: ``MainThread.native_id`` is now correctly reset in child - processes spawned using :class:`multiprocessing.Process`, instead of - retaining the parent's value. - -- bpo-38629: Added ``__floor__`` and ``__ceil__`` methods to float object. - Patch by Batuhan Taşkaya. - -- bpo-27145: int + int and int - int operators can now return small integer - singletons. Patch by hongweipeng. - -- bpo-38021: Provide a platform tag for AIX that is sufficient for PEP425 - binary distribution identification. Patch by Michael Felt. - -- bpo-35409: Ignore GeneratorExit exceptions when throwing an exception into - the aclose coroutine of an asynchronous generator. - -- bpo-33387: Removed WITH_CLEANUP_START, WITH_CLEANUP_FINISH, BEGIN_FINALLY, - END_FINALLY, CALL_FINALLY and POP_FINALLY bytecodes. Replaced with RERAISE - and WITH_EXCEPT_START bytecodes. The compiler now generates different code - for exceptional and non-exceptional branches for 'with' and 'try-except' - statements. For 'try-finally' statements the 'finally' block is replicated - for each exit from the 'try' body. - -Library -------- - -- bpo-39033: Fix :exc:`NameError` in :mod:`zipimport`. Patch by Karthikeyan - Singaravelan. - -- bpo-39022: Update importlib.metadata to include improvements from - importlib_metadata 1.3 including better serialization of EntryPoints and - improved documentation for custom finders. - -- bpo-39006: Fix asyncio when the ssl module is missing: only check for - ssl.SSLSocket instance if the ssl module is available. - -- bpo-38708: Fix a potential IndexError in email parser when parsing an - empty msg-id. - -- bpo-38698: Add a new ``InvalidMessageID`` token to email parser to - represent invalid Message-ID headers. Also, add defects when there is - remaining value after parsing the header. - -- bpo-38994: Implement ``__class_getitem__`` for ``os.PathLike``, - ``pathlib.Path``. - -- bpo-38979: Return class from ``ContextVar.__class_getitem__`` to simplify - subclassing. - -- bpo-38978: Implement ``__class_getitem__`` on asyncio objects (Future, - Task, Queue). Patch by Batuhan Taskaya. - -- bpo-38916: :class:`array.array`: Remove ``tostring()`` and - ``fromstring()`` methods. They were aliases to ``tobytes()`` and - ``frombytes()``, deprecated since Python 3.2. - -- bpo-38986: Make repr of C accelerated TaskWakeupMethWrapper the same as of - pure Python version. - -- bpo-38982: Fix asyncio ``PidfdChildWatcher``: handle ``waitpid()`` error. - If ``waitpid()`` is called elsewhere, ``waitpid()`` call fails with - :exc:`ChildProcessError`: use return code 255 in this case, and log a - warning. It ensures that the pidfd file descriptor is closed if this error - occurs. - -- bpo-38529: Drop too noisy asyncio warning about deletion of a stream - without explicit ``.close()`` call. - -- bpo-27413: Added ability to pass through ``ensure_ascii`` options to - json.dumps in the ``json.tool`` command-line interface. - -- bpo-38634: The :mod:`readline` module now detects if Python is linked to - libedit at runtime on all platforms. Previously, the check was only done - on macOS. - -- bpo-33684: Fix ``json.tool`` failed to read a JSON file with non-ASCII - characters when locale encoding is not UTF-8. - -- bpo-38698: Prevent UnboundLocalError to pop up in parse_message_id. - - parse_message_id() was improperly using a token defined inside an - exception handler, which was raising ``UnboundLocalError`` on parsing an - invalid value. Patch by Claudiu Popa. - -- bpo-38927: Use ``python -m pip`` instead of ``pip`` to upgrade - dependencies in venv. - -- bpo-26730: Fix ``SpooledTemporaryFile.rollover()`` might corrupt the file - when it is in text mode. Patch by Serhiy Storchaka. - -- bpo-38881: random.choices() now raises a ValueError when all the weights - are zero. - -- bpo-38876: Raise pickle.UnpicklingError when loading an item from memo for - invalid input. - - The previous code was raising a ``KeyError`` for both the Python and C - implementation. This was caused by the specified index of an invalid input - which did not exist in the memo structure, where the pickle stores what - objects it has seen. The malformed input would have caused either a - ``BINGET`` or ``LONG_BINGET`` load from the memo, leading to a - ``KeyError`` as the determined index was bogus. Patch by Claudiu Popa. - -- bpo-38688: Calling func:``shutil.copytree`` to copy a directory tree from - one directory to another subdirectory resulted in an endless loop and a - RecursionError. A fix was added to consume an iterator and create the list - of the entries to be copied, avoiding the recursion for newly created - directories. Patch by Bruno P. Kinoshita. - -- bpo-38863: Improve :func:`is_cgi` function in :mod:`http.server`, which - enables processing the case that cgi directory is a child of another - directory other than root. - -- bpo-37838: :meth:`typing.get_type_hints` properly handles functions - decorated with :meth:`functools.wraps`. - -- bpo-38870: Expose :func:`ast.unparse` as a function of the :mod:`ast` - module that can be used to unparse an :class:`ast.AST` object and produce - a string with code that would produce an equivalent :class:`ast.AST` - object when parsed. Patch by Pablo Galindo and Batuhan Taskaya. - -- bpo-38859: AsyncMock now returns StopAsyncIteration on the exhaustion of a - side_effects iterable. Since PEP-479 its Impossible to raise a - StopIteration exception from a coroutine. - -- bpo-38857: AsyncMock fix for return values that are awaitable types. This - also covers side_effect iterable values that happened to be awaitable, and - wraps callables that return an awaitable type. Before these awaitables - were being awaited instead of being returned as is. - -- bpo-38834: :class:`typing.TypedDict` subclasses now track which keys are - optional using the ``__required_keys__`` and ``__optional_keys__`` - attributes, to enable runtime validation by downstream projects. Patch by - Zac Hatfield-Dodds. - -- bpo-38821: Fix unhandled exceptions in :mod:`argparse` when - internationalizing error messages for arguments with ``nargs`` set to - special (non-integer) values. Patch by Federico Bond. - -- bpo-38820: Make Python compatible with OpenSSL 3.0.0. - :func:`ssl.SSLSocket.getpeercert` no longer returns IPv6 addresses with a - trailing new line. - -- bpo-38811: Fix an unhandled exception in :mod:`pathlib` when - :meth:`os.link` is missing. Patch by Toke Høiland-Jørgensen. - -- bpo-38686: Added support for multiple ``qop`` values in - :class:`urllib.request.AbstractDigestAuthHandler`. - -- bpo-38712: Add the Linux-specific :func:`signal.pidfd_send_signal` - function, which allows sending a signal to a process identified by a file - descriptor rather than a pid. - -- bpo-38348: Add ``-i`` and ``--indent`` (indentation level), and - ``--no-type-comments`` (type comments) command line options to ast parsing - tool. - -- bpo-37523: Change :class:`zipfile.ZipExtFile` to raise ``ValueError`` when - trying to access the underlying file object after it has been closed. This - new behavior is consistent with how accessing closed files is handled in - other parts of Python. - -- bpo-38045: Improve the performance of :func:`enum._decompose` in - :mod:`enum`. Patch by hongweipeng. - -- bpo-36820: Break cycle generated when saving an exception in socket.py, - codeop.py and dyld.py as they keep alive not only the exception but user - objects through the ``__traceback__`` attribute. Patch by Mario Corchero. - -- bpo-36406: Handle namespace packages in :mod:`doctest`. Patch by - Karthikeyan Singaravelan. - -- bpo-34776: Fix dataclasses to support forward references in type - annotations - -- bpo-20928: ElementTree supports recursive XInclude processing. Patch by - Stefan Behnel. - -- bpo-29636: Add whitespace options for formatting JSON with the - ``json.tool`` CLI. The following mutually exclusive options are now - supported: ``--indent`` for setting the indent level in spaces; ``--tab`` - for indenting with tabs; ``--no-indent`` for suppressing newlines; and - ``--compact`` for suppressing all whitespace. The default behavior remains - the same as ``--indent=4``. - -Documentation -------------- - -- bpo-38928: Correct when venv's ``upgrade_dependencies()`` and - ``--upgrade-deps`` are added. - -- bpo-38899: Update documentation to state that to activate virtual - environments under fish one should use ``source``, not ``.`` as documented - at https://fishshell.com/docs/current/cmds/source.html. - -- bpo-22377: Improves documentation of the values that - :meth:`datetime.datetime.strptime` accepts for ``%Z``. Patch by Karl - Dubost. - -Tests ------ - -- bpo-38546: Fix test_ressources_gced_in_workers() of - test_concurrent_futures: explicitly stop the manager to prevent leaking a - child process running in the background after the test completes. - -- bpo-38546: Multiprocessing and concurrent.futures tests now stop the - resource tracker process when tests complete. - -- bpo-38614: Replace hardcoded timeout constants in tests with new - :mod:`test.support` constants: :data:`~test.support.LOOPBACK_TIMEOUT`, - :data:`~test.support.INTERNET_TIMEOUT`, - :data:`~test.support.SHORT_TIMEOUT` and - :data:`~test.support.LONG_TIMEOUT`. It becomes easier to adjust these four - timeout constants for all tests at once, rather than having to adjust - every single test file. - -- bpo-38547: Fix test_pty: if the process is the session leader, closing the - master file descriptor raises a SIGHUP signal: simply ignore SIGHUP when - running the tests. - -- bpo-38992: Fix a test for :func:`math.fsum` that was failing due to - constant folding. - -- bpo-38991: :mod:`test.support`: - :func:`~test.support.run_python_until_end`, - :func:`~test.support.assert_python_ok` and - :func:`~test.support.assert_python_failure` functions no longer strip - whitespaces from stderr. Remove ``test.support.strip_python_stderr()`` - function. - -- bpo-38965: Fix test_faulthandler on GCC 10. Use the "volatile" keyword in - ``faulthandler._stack_overflow()`` to prevent tail call optimization on - any compiler, rather than relying on compiler specific pragma. - -- bpo-38875: test_capi: trashcan tests now require the test "cpu" resource. - -- bpo-38841: Skip asyncio test_create_datagram_endpoint_existing_sock_unix - on platforms lacking a functional bind() for named unix domain sockets. - -- bpo-38692: Skip the test_posix.test_pidfd_open() test if - ``os.pidfd_open()`` fails with a :exc:`PermissionError`. This situation - can happen in a Linux sandbox using a syscall whitelist which doesn't - allow the ``pidfd_open()`` syscall yet. - -- bpo-38839: Fix some unused functions in tests. Patch by Adam Johnson. - -- bpo-38669: Raise :exc:`TypeError` when passing target as a string with - :meth:`unittest.mock.patch.object`. - -- bpo-37957: test.regrtest now can receive a list of test patterns to ignore - (using the -i/--ignore argument) or a file with a list of patterns to - ignore (using the --ignore-file argument). Patch by Pablo Galindo. - -Build ------ - -- bpo-37404: :mod:`asyncio` now raises :exc:`TypeError` when calling - incompatible methods with an :class:`ssl.SSLSocket` socket. Patch by Ido - Michael. - -- bpo-36500: Added an optional "regen" project to the Visual Studio solution - that will regenerate all grammar, tokens, and opcodes. - -Windows -------- - -- bpo-39007: Add auditing events to functions in :mod:`winreg`. - -- bpo-33125: Add support for building and releasing Windows ARM64 packages. - -macOS ------ - -- bpo-37931: Fixed a crash on OSX dynamic builds that occurred when - re-initializing the posix module after a Py_Finalize if the environment - had changed since the previous ``import posix``. Patch by Benoît Hudson. - -IDLE ----- - -- bpo-38944: Escape key now closes IDLE completion windows. Patch by Johnny - Najera. - -- bpo-38943: Fix IDLE autocomplete windows not always appearing on some - systems. Patch by Johnny Najera. - -- bpo-38862: 'Strip Trailing Whitespace' on the Format menu removes extra - newlines at the end of non-shell files. - -- bpo-38636: Fix IDLE Format menu tab toggle and file indent width. These - functions (default shortcuts Alt-T and Alt-U) were mistakenly disabled in - 3.7.5 and 3.8.0. - -C API ------ - -- bpo-38896: Remove ``PyUnicode_ClearFreeList()`` function: the Unicode free - list has been removed in Python 3.3. - -- bpo-37340: Remove ``PyMethod_ClearFreeList()`` and - ``PyCFunction_ClearFreeList()`` functions: the free lists of bound method - objects have been removed. - -- bpo-38835: Exclude ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` - macros of ``pyfpe.h`` from ``Py_LIMITED_API`` (stable API). - - -What's New in Python 3.9.0 alpha 1? -=================================== - -*Release date: 2019-11-19* - -Security --------- - -- bpo-38722: :mod:`runpy` now uses :meth:`io.open_code` to open code files. - Patch by Jason Killen. - -- bpo-38622: Add additional audit events for the :mod:`ctypes` module. - -- bpo-38418: Fixes audit event for :func:`os.system` to be named - ``os.system``. - -- bpo-38243: Escape the server title of - :class:`xmlrpc.server.DocXMLRPCServer` when rendering the document page as - HTML. (Contributed by Donghee Na in :issue:`38243`.) - -- bpo-38174: Update vendorized expat library version to 2.2.8, which - resolves :cve:`2019-15903`. - -- bpo-37764: Fixes email._header_value_parser.get_unstructured going into an - infinite loop for a specific case in which the email header does not have - trailing whitespace, and the case in which it contains an invalid encoded - word. Patch by Ashwin Ramaswami. - -- bpo-37461: Fix an infinite loop when parsing specially crafted email - headers. Patch by Abhilash Raj. - -- bpo-37363: Adds audit events for the range of supported run commands (see - :ref:`using-on-general`). - -- bpo-37463: ssl.match_hostname() no longer accepts IPv4 addresses with - additional text after the address and only quad-dotted notation without - trailing whitespaces. Some inet_aton() implementations ignore whitespace - and all data after whitespace, e.g. '127.0.0.1 whatever'. - -- bpo-37363: Adds audit events for :mod:`ensurepip`, :mod:`ftplib`, - :mod:`glob`, :mod:`imaplib`, :mod:`!nntplib`, :mod:`pdb`, :mod:`poplib`, - :mod:`shutil`, :mod:`smtplib`, :mod:`sqlite3`, :mod:`subprocess`, - :mod:`!telnetlib`, :mod:`tempfile` and :mod:`webbrowser`, as well as - :func:`os.listdir`, :func:`os.scandir` and :func:`breakpoint`. - -- bpo-37364: :func:`io.open_code` is now used when reading :file:`.pth` - files. - -- bpo-34631: Updated OpenSSL to 1.1.1c in Windows installer - -- bpo-34155: Fix parsing of invalid email addresses with more than one ``@`` - (e.g. a@b@c.com.) to not return the part before 2nd ``@`` as valid email - address. Patch by maxking & jpic. - -Core and Builtins ------------------ - -- bpo-38631: Replace ``Py_FatalError()`` call with a regular - :exc:`RuntimeError` exception in :meth:`float.__getformat__`. - -- bpo-38639: Optimized :func:`math.floor`, :func:`math.ceil` and - :func:`math.trunc` for floats. - -- bpo-38640: Fixed a bug in the compiler that was causing to raise in the - presence of break statements and continue statements inside always false - while loops. Patch by Pablo Galindo. - -- bpo-38613: Optimized some set operations (e.g. ``|``, ``^``, and ``-``) of - ``dict_keys``. ``d.keys() | other`` was slower than ``set(d) | other`` but - they are almost same performance for now. - -- bpo-28029: ``"".replace("", s, n)`` now returns ``s`` instead of an empty - string for all non-zero ``n``. There are similar changes for - :class:`bytes` and :class:`bytearray` objects. - -- bpo-38535: Fixed line numbers and column offsets for AST nodes for calls - without arguments in decorators. - -- bpo-38525: Fix a segmentation fault when using reverse iterators of empty - ``dict`` objects. Patch by Donghee Na and Inada Naoki. - -- bpo-38465: :class:`bytearray`, :class:`~array.array` and - :class:`~mmap.mmap` objects allow now to export more than ``2**31`` - buffers at a time. - -- bpo-38469: Fixed a bug where the scope of named expressions was not being - resolved correctly in the presence of the *global* keyword. Patch by Pablo - Galindo. - -- bpo-38437: Activate the ``GC_DEBUG`` macro for debug builds of the - interpreter (when ``Py_DEBUG`` is set). Patch by Pablo Galindo. - -- bpo-38379: When the garbage collector makes a collection in which some - objects resurrect (they are reachable from outside the isolated cycles - after the finalizers have been executed), do not block the collection of - all objects that are still unreachable. Patch by Pablo Galindo and Tim - Peters. - -- bpo-38379: When cyclic garbage collection (gc) runs finalizers that - resurrect unreachable objects, the current gc run ends, without collecting - any cyclic trash. However, the statistics reported by ``collect()`` and - ``get_stats()`` claimed that all cyclic trash found was collected, and - that the resurrected objects were collected. Changed the stats to report - that none were collected. - -- bpo-38392: In debug mode, :c:func:`PyObject_GC_Track` now calls - ``tp_traverse()`` of the object type to ensure that the object is valid: - test that objects visited by ``tp_traverse()`` are valid. - -- bpo-38210: Remove unnecessary intersection and update set operation in - dictview with empty set. (Contributed by Donghee Na in :issue:`38210`.) - -- bpo-38402: Check the error from the system's underlying ``crypt`` or - ``crypt_r``. - -- bpo-37474: On FreeBSD, Python no longer calls ``fedisableexcept()`` at - startup to control the floating-point control mode. The call became - useless since FreeBSD 6: it became the default mode. - -- bpo-38006: Fix a bug due to the interaction of weakrefs and the cyclic - garbage collector. We must clear any weakrefs in garbage in order to - prevent their callbacks from executing and causing a crash. - -- bpo-38317: Fix warnings options priority: ``PyConfig.warnoptions`` has the - highest priority, as stated in the :pep:`587`. - -- bpo-38310: Predict ``BUILD_MAP_UNPACK_WITH_CALL`` -> ``CALL_FUNCTION_EX`` - opcode pairs in the main interpreter loop. Patch by Brandt Bucher. - -- bpo-36871: Improve error handling for the assert_has_calls and - assert_has_awaits methods of mocks. Fixed a bug where any errors - encountered while binding the expected calls to the mock's spec were - silently swallowed, leading to misleading error output. - -- bpo-11410: Better control over symbol visibility is provided through use - of the visibility attributes available in gcc >= 4.0, provided in a - uniform way across POSIX and Windows. The POSIX build files have been - updated to compile with -fvisibility=hidden, minimising exported symbols. - -- bpo-38219: Optimized the :class:`dict` constructor and the - :meth:`~dict.update` method for the case when the argument is a dict. - -- bpo-38236: Python now dumps path configuration if it fails to import the - Python codecs of the filesystem and stdio encodings. - -- bpo-38013: Allow to call ``async_generator_athrow().throw(...)`` even for - non-started async generator helper. It fixes annoying warning at the end - of :func:`asyncio.run` call. - -- bpo-38124: Fix an off-by-one error in PyState_AddModule that could cause - out-of-bounds memory access. - -- bpo-38116: The select module is now PEP-384 compliant and no longer has - static state - -- bpo-38113: ast module updated to PEP-384 and all statics removed - -- bpo-38076: The struct module is now PEP-384 compatible - -- bpo-38075: The random module is now PEP-384 compatible - -- bpo-38074: zlib module made PEP-384 compatible - -- bpo-38073: Make pwd extension module PEP-384 compatible - -- bpo-38072: grp module made PEP-384 compatible - -- bpo-38069: Make _posixsubprocess PEP-384 compatible - -- bpo-38071: Make termios extension module PEP-384 compatible - -- bpo-38005: Fixed comparing and creating of InterpreterID and ChannelID. - -- bpo-36946: Fix possible signed integer overflow when handling slices. - Patch by hongweipeng. - -- bpo-37994: Fixed silencing arbitrary errors if an attribute lookup fails - in several sites. Only AttributeError should be silenced. - -- bpo-8425: Optimize set difference_update for the case when the other set - is much larger than the base set. (Suggested by Evgeny Kapun with code - contributed by Michele Orrù). - -- bpo-37966: The implementation of :func:`~unicodedata.is_normalized` has - been greatly sped up on strings that aren't normalized, by implementing - the full normalization-quick-check algorithm from the Unicode standard. - -- bpo-37947: Adjust correctly the recursion level in the symtable generation - for named expressions. Patch by Pablo Galindo. - -- bpo-37812: The ``CHECK_SMALL_INT`` macro used inside - :file:`Object/longobject.c` has been replaced with an explicit ``return`` - at each call site. - -- bpo-37751: Fix :func:`codecs.lookup` to normalize the encoding name the - same way than :func:`encodings.normalize_encoding`, except that - :func:`codecs.lookup` also converts the name to lower case. - -- bpo-37830: Fixed compilation of :keyword:`break` and :keyword:`continue` - in the :keyword:`finally` block when the corresponding :keyword:`try` - block contains :keyword:`return` with a non-constant value. - -- bpo-20490: Improve import error message for partially initialized module - on circular ``from`` imports - by Anthony Sottile. - -- bpo-37840: Fix handling of negative indices in - :c:member:`~PySequenceMethods.sq_item` of :class:`bytearray`. Patch by - Sergey Fedoseev. - -- bpo-37802: Slightly improve performance of - :c:func:`PyLong_FromUnsignedLong`, :c:func:`PyLong_FromUnsignedLongLong` - and :c:func:`PyLong_FromSize_t`. Patch by Sergey Fedoseev. - -- bpo-37409: Ensure explicit relative imports from interactive sessions and - scripts (having no parent package) always raise ImportError, rather than - treating the current module as the package. Patch by Ben Lewis. - -- bpo-32912: Reverted :issue:`32912`: emitting :exc:`SyntaxWarning` instead - of :exc:`DeprecationWarning` for invalid escape sequences in string and - bytes literals. - -- bpo-37757: :pep:`572`: As described in the PEP, assignment expressions now - raise :exc:`SyntaxError` when their interaction with comprehension scoping - results in an ambiguous target scope. - - The ``TargetScopeError`` subclass originally proposed by the PEP has been - removed in favour of just raising regular syntax errors for the disallowed - cases. - -- bpo-36279: Fix potential use of uninitialized memory in :func:`os.wait3`. - -- bpo-36311: Decoding bytes objects larger than 2GiB is faster and no longer - fails when a multibyte characters spans a chunk boundary. - -- bpo-34880: The :keyword:`assert` statement now works properly if the - :exc:`AssertionError` exception is being shadowed. Patch by Zackery Spytz. - -- bpo-37340: Removed object cache (``free_list``) for bound method objects. - Temporary bound method objects are less used than before thanks to the - ``LOAD_METHOD`` opcode and the ``_PyObject_VectorcallMethod`` C API. - -- bpo-37648: Fixed minor inconsistency in :meth:`list.__contains__`, - :meth:`tuple.__contains__` and a few other places. The collection's item - is now always at the left and the needle is on the right of ``==``. - -- bpo-37444: Update differing exception between :meth:`builtins.__import__` - and :meth:`importlib.__import__`. - -- bpo-37619: When adding a wrapper descriptor from one class to a different - class (for example, setting ``__add__ = str.__add__`` on an ``int`` - subclass), an exception is correctly raised when the operator is called. - -- bpo-37593: Swap the positions of the *posonlyargs* and *args* parameters - in the constructor of :class:`ast.parameters` nodes. - -- bpo-37543: Optimized pymalloc for non PGO build. - -- bpo-37537: Compute allocated pymalloc blocks inside - _Py_GetAllocatedBlocks(). This slows down _Py_GetAllocatedBlocks() but - gives a small speedup to _PyObject_Malloc() and _PyObject_Free(). - -- bpo-37467: Fix :func:`sys.excepthook` and :c:func:`PyErr_Display` if a - filename is a bytes string. For example, for a SyntaxError exception where - the filename attribute is a bytes string. - -- bpo-37433: Fix ``SyntaxError`` indicator printing too many spaces for - multi-line strings - by Anthony Sottile. - -- bpo-37417: :meth:`bytearray.extend` now correctly handles errors that - arise during iteration. Patch by Brandt Bucher. - -- bpo-37414: The undocumented ``sys.callstats()`` function has been removed. - Since Python 3.7, it was deprecated and always returned ``None``. It - required a special build option ``CALL_PROFILE`` which was already removed - in Python 3.7. - -- bpo-37392: Remove ``sys.getcheckinterval()`` and - ``sys.setcheckinterval()`` functions. They were deprecated since Python - 3.2. Use :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` - instead. Remove also ``check_interval`` field of the - ``PyInterpreterState`` structure. - -- bpo-37388: In development mode and in debug build, *encoding* and *errors* - arguments are now checked on string encoding and decoding operations. - Examples: :func:`open`, :meth:`str.encode` and :meth:`bytes.decode`. - - By default, for best performances, the *errors* argument is only checked - at the first encoding/decoding error, and the *encoding* argument is - sometimes ignored for empty strings. - -- bpo-37348: Optimized decoding short ASCII string with UTF-8 and ascii - codecs. ``b"foo".decode()`` is about 15% faster. Patch by Inada Naoki. - -- bpo-24214: Improved support of the surrogatepass error handler in the - UTF-8 and UTF-16 incremental decoders. - -- bpo-37330: :func:`open`, :func:`io.open`, :func:`codecs.open` and - :class:`fileinput.FileInput` no longer accept ``'U'`` ("universal - newline") in the file mode. This flag was deprecated since Python 3.3. - -- bpo-35224: Reverse evaluation order of key: value in dict comprehensions - as proposed in PEP 572. I.e. in ``{k: v for ...}``, ``k`` will be - evaluated before ``v``. - -- bpo-37316: Fix the :c:func:`PySys_Audit` call in :class:`mmap.mmap`. - -- bpo-37300: Remove an unnecessary Py_XINCREF in classobject.c. - -- bpo-37269: Fix a bug in the peephole optimizer that was not treating - correctly constant conditions with binary operators. Patch by Pablo - Galindo. - -- bpo-20443: Python now gets the absolute path of the script filename - specified on the command line (ex: "python3 script.py"): the __file__ - attribute of the __main__ module and sys.path[0] become an absolute path, - rather than a relative path. - -- bpo-37257: Python's small object allocator (``obmalloc.c``) now allows (no - more than) one empty arena to remain available for immediate reuse, - without returning it to the OS. This prevents thrashing in simple loops - where an arena could be created and destroyed anew on each iteration. - -- bpo-37231: The dispatching of type slots to special methods (for example - calling ``__mul__`` when doing ``x * y``) has been made faster. - -- bpo-36974: Implemented separate vectorcall functions for every calling - convention of builtin functions and methods. This improves performance for - calls. - -- bpo-37213: Handle correctly negative line offsets in the peephole - optimizer. Patch by Pablo Galindo. - -- bpo-37219: Remove erroneous optimization for empty set differences. - -- bpo-15913: Implement :c:func:`PyBuffer_SizeFromFormat()` function - (previously documented but not implemented): call :func:`struct.calcsize`. - Patch by Joannah Nanjekye. - -- bpo-36922: Slot functions optimize any callable with - ``Py_TPFLAGS_METHOD_DESCRIPTOR`` instead of only instances of - ``function``. - -- bpo-36974: The slot ``tp_vectorcall_offset`` is inherited unconditionally - to support ``super().__call__()`` when the base class uses vectorcall. - -- bpo-37160: :func:`threading.get_native_id` now also supports NetBSD. - -- bpo-37077: Add :func:`threading.get_native_id` support for AIX. Patch by - M. Felt - -- bpo-36781: :func:`sum` has been optimized for boolean values. - -- bpo-34556: Add ``--upgrade-deps`` to venv module. Patch by Cooper Ry Lees - -- bpo-20523: ``pdb.Pdb`` supports ~/.pdbrc in Windows 7. Patch by Tim Hopper - and Dan Lidral-Porter. - -- bpo-35551: Updated encodings: - Removed the "tis260" encoding, which was - an alias for the nonexistent "tactis" codec. - Added "mac_centeuro" as an - alias for the mac_latin2 encoding. - -- bpo-19072: The :class:`classmethod` decorator can now wrap other - descriptors such as property objects. Adapted from a patch written by - Graham Dumpleton. - -- bpo-27575: Improve speed of dictview intersection by directly using set - intersection logic. Patch by David Su. - -- bpo-30773: Prohibit parallel running of aclose() / asend() / athrow(). Fix - ag_running to reflect the actual running status of the AG. - -Library -------- - -- bpo-36589: The :func:`curses.update_lines_cols` function now returns - ``None`` instead of ``1`` on success. - -- bpo-38807: Update :exc:`TypeError` messages for :meth:`os.path.join` to - include :class:`os.PathLike` objects as acceptable input types. - -- bpo-38724: Add a repr for ``subprocess.Popen`` objects. Patch by Andrey - Doroschenko. - -- bpo-38786: pydoc now recognizes and parses HTTPS URLs. Patch by python273. - -- bpo-38785: Prevent asyncio from crashing if parent ``__init__`` is not - called from a constructor of object derived from ``asyncio.Future``. - -- bpo-38723: :mod:`pdb` now uses :meth:`io.open_code` to trigger auditing - events. - -- bpo-27805: Allow opening pipes and other non-seekable files in append mode - with :func:`open`. - -- bpo-38438: Simplify the :mod:`argparse` usage message for ``nargs="*"``. - -- bpo-38761: WeakSet is now registered as a collections.abc.MutableSet. - -- bpo-38716: logging: change RotatingHandler namer and rotator to - class-level attributes. This stops __init__ from setting them to None in - the case where a subclass defines them with eponymous methods. - -- bpo-38713: Add :const:`os.P_PIDFD` constant, which may be passed to - :func:`os.waitid` to wait on a Linux process file descriptor. - -- bpo-38692: Add :class:`asyncio.PidfdChildWatcher`, a Linux-specific child - watcher implementation that polls process file descriptors. - -- bpo-38692: Expose the Linux ``pidfd_open`` syscall as - :func:`os.pidfd_open`. - -- bpo-38602: Added constants :const:`~fcntl.F_OFD_GETLK`, - :const:`~fcntl.F_OFD_SETLK` and :const:`~fcntl.F_OFD_SETLKW` to the - :mod:`fcntl` module. Patch by Donghee Na. - -- bpo-38334: Fixed seeking backward on an encrypted - :class:`zipfile.ZipExtFile`. - -- bpo-38312: Add :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, - :func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions - by - Anthony Sottile. - -- bpo-38586: Now :func:`~logging.config.fileConfig` correctly sets the .name - of handlers loaded. - -- bpo-38565: Add new cache_parameters() method for functools.lru_cache() to - better support pickling. - -- bpo-34679: asynci.ProactorEventLoop.close() now only calls - signal.set_wakeup_fd() in the main thread. - -- bpo-31202: The case the result of :func:`pathlib.WindowsPath.glob` matches - now the case of the pattern for literal parts. - -- bpo-36321: Remove misspelled attribute. The 3.8 changelog noted that this - would be removed in 3.9. - -- bpo-38521: Fixed erroneous equality comparison in statistics.NormalDist(). - -- bpo-38493: Added :const:`~os.CLD_KILLED` and :const:`~os.CLD_STOPPED` for - :attr:`si_code`. Patch by Donghee Na. - -- bpo-38478: Fixed a bug in :meth:`inspect.signature.bind` that was causing - it to fail when handling a keyword argument with same name as - positional-only parameter. Patch by Pablo Galindo. - -- bpo-33604: Fixed ``hmac.new`` and ``hmac.HMAC`` to raise TypeError instead - of ValueError when the digestmod parameter, now required in 3.8, is - omitted. Also clarified the hmac module documentation and docstrings. - -- bpo-38378: Parameters *out* and *in* of :func:`os.sendfile` was renamed to - *out_fd* and *in_fd*. - -- bpo-38417: Added support for setting the umask in the child process to the - subprocess module on POSIX systems. - -- bpo-38449: Revert PR 15522, which introduces a regression in - :meth:`mimetypes.guess_type` due to improper handling of filenames as - urls. - -- bpo-38431: Fix ``__repr__`` method for :class:`dataclasses.InitVar` to - support typing objects, patch by Samuel Colvin. - -- bpo-38109: Add missing :const:`stat.S_IFDOOR`, :const:`stat.S_IFPORT`, - :const:`stat.S_IFWHT`, :func:`stat.S_ISDOOR`, :func:`stat.S_ISPORT`, and - :func:`stat.S_ISWHT` values to the Python implementation of :mod:`stat`. - -- bpo-38422: Clarify docstrings of pathlib suffix(es) - -- bpo-38405: Nested subclasses of :class:`typing.NamedTuple` are now - pickleable. - -- bpo-38332: Prevent :exc:`KeyError` thrown by - :func:`!_encoded_words.decode` when given an encoded-word with invalid - content-type encoding from propagating all the way to - :func:`email.message.get`. - -- bpo-38371: Deprecated the ``split()`` method in - :class:`!_tkinter.TkappType` in favour of the ``splitlist()`` method which - has more consistent and predictable behavior. - -- bpo-38341: Add :exc:`smtplib.SMTPNotSupportedError` to the :mod:`smtplib` - exported names. - -- bpo-38319: sendfile() used in socket and shutil modules was raising - OverflowError for files >= 2GiB on 32-bit architectures. (patch by - Giampaolo Rodola) - -- bpo-38242: Revert the new asyncio Streams API - -- bpo-13153: OS native encoding is now used for converting between Python - strings and Tcl objects. This allows to display, copy and paste to - clipboard emoji and other non-BMP characters. Converting strings from Tcl - to Python and back now never fails (except MemoryError). - -- bpo-38019: Correctly handle pause/resume reading of closed asyncio unix - pipe. - -- bpo-38163: Child mocks will now detect their type as either synchronous or - asynchronous, asynchronous child mocks will be AsyncMocks and synchronous - child mocks will be either MagicMock or Mock (depending on their parent - type). - -- bpo-38161: Removes _AwaitEvent from AsyncMock. - -- bpo-38216: Allow the rare code that wants to send invalid http requests - from the ``http.client`` library a way to do so. The fixes for bpo-30458 - led to breakage for some projects that were relying on this ability to - test their own behavior in the face of bad requests. - -- bpo-28286: Deprecate opening :class:`~gzip.GzipFile` for writing - implicitly. Always specify the *mode* argument for writing. - -- bpo-38108: Any synchronous magic methods on an AsyncMock now return a - MagicMock. Any asynchronous magic methods on a MagicMock now return an - AsyncMock. - -- bpo-38265: Update the *length* parameter of :func:`os.pread` to accept - :c:type:`Py_ssize_t` instead of :c:expr:`int`. - -- bpo-38112: :mod:`compileall` has a higher default recursion limit and new - command-line arguments for path manipulation, symlinks handling, and - multiple optimization levels. - -- bpo-38248: asyncio: Fix inconsistent immediate Task cancellation - -- bpo-38237: The arguments for the builtin pow function are more - descriptive. They can now also be passed in as keywords. - -- bpo-34002: Improve efficiency in parts of email package by changing - while-pop to a for loop, using isdisjoint instead of set intersections. - -- bpo-38191: Constructors of :class:`~typing.NamedTuple` and - :class:`~typing.TypedDict` types now accept arbitrary keyword argument - names, including "cls", "self", "typename", "_typename", "fields" and - "_fields". - -- bpo-38155: Add ``__all__`` to :mod:`datetime`. Patch by Tahia Khan. - -- bpo-38185: Fixed case-insensitive string comparison in - :class:`sqlite3.Row` indexing. - -- bpo-38136: Changes AsyncMock call count and await count to be two - different counters. Now await count only counts when a coroutine has been - awaited, not when it has been called, and vice-versa. Update the - documentation around this. - -- bpo-37828: Fix default mock name in - :meth:`unittest.mock.Mock.assert_called` exceptions. Patch by Abraham - Toriz Cruz. - -- bpo-38175: Fix a memory leak in comparison of :class:`sqlite3.Row` - objects. - -- bpo-33936: _hashlib no longer calls obsolete OpenSSL initialization - function with OpenSSL 1.1.0+. - -- bpo-34706: Preserve subclassing in inspect.Signature.from_callable. - -- bpo-38153: Names of hashing algorithms from OpenSSL are now normalized to - follow Python's naming conventions. For example OpenSSL uses sha3-512 - instead of sha3_512 or blake2b512 instead of blake2b. - -- bpo-38115: Fix a bug in dis.findlinestarts() where it would return invalid - bytecode offsets. Document that a code object's co_lnotab can contain - invalid bytecode offsets. - -- bpo-38148: Add slots to :mod:`asyncio` transport classes, which can reduce - memory usage. - -- bpo-38142: The _hashlib OpenSSL wrapper extension module is now PEP-384 - compliant. - -- bpo-9216: hashlib constructors now support usedforsecurity flag to signal - that a hashing algorithm is not used in a security context. - -- bpo-36991: Fixes a potential incorrect AttributeError exception escaping - ZipFile.extract() in some unsupported input error situations. - -- bpo-38134: Remove obsolete copy of PBKDF2_HMAC_fast. All supported OpenSSL - versions contain a fast implementation. - -- bpo-38132: The OpenSSL hashlib wrapper uses a simpler implementation. - Several Macros and pointless caches are gone. The hash name now comes from - OpenSSL's EVP. The algorithm name stays the same, except it is now always - lower case. - -- bpo-38008: Fix parent class check in protocols to correctly identify the - module that provides a builtin protocol, instead of assuming they all come - from the :mod:`collections.abc` module - -- bpo-34037: For :mod:`asyncio`, add a new coroutine - :meth:`loop.shutdown_default_executor`. The new coroutine provides an API - to schedule an executor shutdown that waits on the threadpool to finish - closing. Also, :func:`asyncio.run` has been updated to utilize the new - coroutine. Patch by Kyle Stanley. - -- bpo-37405: Fixed regression bug for socket.getsockname() for non-CAN_ISOTP - AF_CAN address family sockets by returning a 1-tuple instead of string. - -- bpo-38121: Update parameter names on functions in importlib.metadata - matching the changes in the 0.22 release of importlib_metadata. - -- bpo-38110: The os.closewalk() implementation now uses the libc fdwalk() - API on platforms where it is available. - -- bpo-38093: Fixes AsyncMock so it doesn't crash when used with - AsyncContextManagers or AsyncIterators. - -- bpo-37488: Add warning to :meth:`datetime.utctimetuple`, - :meth:`datetime.utcnow` and :meth:`datetime.utcfromtimestamp` . - -- bpo-35640: Allow passing a :term:`path-like object` as ``directory`` - argument to the :class:`http.server.SimpleHTTPRequestHandler` class. Patch - by Géry Ogam. - -- bpo-38086: Update importlib.metadata with changes from `importlib_metadata - 0.21 - <https://gitlab.com/python-devs/importlib_metadata/blob/0.21/importlib_metadata/docs/changelog.rst>`_. - -- bpo-37251: Remove ``__code__`` check in AsyncMock that incorrectly - evaluated function specs as async objects but failed to evaluate classes - with ``__await__`` but no ``__code__`` attribute defined as async objects. - -- bpo-38037: Fix reference counters in the :mod:`signal` module. - -- bpo-38066: Hide internal asyncio.Stream methods: feed_eof(), feed_data(), - set_exception() and set_transport(). - -- bpo-38059: inspect.py now uses sys.exit() instead of exit() - -- bpo-38049: Added command-line interface for the :mod:`ast` module. - -- bpo-37953: In :mod:`typing`, improved the ``__hash__`` and ``__eq__`` - methods for :class:`ForwardReferences`. - -- bpo-38026: Fixed :func:`inspect.getattr_static` used ``isinstance`` while - it should avoid dynamic lookup. - -- bpo-35923: Update :class:`importlib.machinery.BuiltinImporter` to use - ``loader._ORIGIN`` instead of a hardcoded value. Patch by Donghee Na. - -- bpo-38010: In ``importlib.metadata`` sync with ``importlib_metadata`` - 0.20, clarifying behavior of ``files()`` and fixing issue where only one - requirement was returned for ``requires()`` on ``dist-info`` packages. - -- bpo-38006: weakref.WeakValueDictionary defines a local remove() function - used as callback for weak references. This function was created with a - closure. Modify the implementation to avoid the closure. - -- bpo-37995: Added the *indent* option to :func:`ast.dump` which allows it - to produce a multiline indented output. - -- bpo-34410: Fixed a crash in the :func:`tee` iterator when re-enter it. - RuntimeError is now raised in this case. - -- bpo-37140: Fix a ctypes regression of Python 3.8. When a ctypes.Structure - is passed by copy to a function, ctypes internals created a temporary - object which had the side effect of calling the structure finalizer - (__del__) twice. The Python semantics requires a finalizer to be called - exactly once. Fix ctypes internals to no longer call the finalizer twice. - -- bpo-37587: ``_json.scanstring`` is now up to 3x faster when there are many - backslash escaped characters in the JSON string. - -- bpo-37834: Prevent shutil.rmtree exception when built on non-Windows - system without fd system call support, like older versions of macOS. - -- bpo-10978: Semaphores and BoundedSemaphores can now release more than one - waiting thread at a time. - -- bpo-37972: Subscripts to the ``unittest.mock.call`` objects now receive - the same chaining mechanism as any other custom attributes, so that the - following usage no longer raises a ``TypeError``: - - ``call().foo().__getitem__('bar')`` - - Patch by blhsing - -- bpo-37965: Fix C compiler warning caused by - distutils.ccompiler.CCompiler.has_function. - -- bpo-37964: Add ``F_GETPATH`` command to :mod:`fcntl`. - -- bpo-37960: ``repr()`` of buffered and text streams now silences only - expected exceptions when get the value of "name" and "mode" attributes. - -- bpo-37961: Add a ``total_nframe`` field to the traces collected by the - tracemalloc module. This field indicates the original number of frames - before it was truncated. - -- bpo-37951: Most features of the subprocess module now work again in - subinterpreters. Only *preexec_fn* is restricted in subinterpreters. - -- bpo-36205: Fix the rusage implementation of time.process_time() to - correctly report the sum of the system and user CPU time. - -- bpo-37950: Fix :func:`ast.dump` when call with incompletely initialized - node. - -- bpo-34679: Restores instantiation of Windows IOCP event loops from the - non-main thread. - -- bpo-36917: Add default implementation of the - :meth:`ast.NodeVisitor.visit_Constant` method which emits a deprecation - warning and calls corresponding methods ``visit_Num()``, ``visit_Str()``, - etc. - -- bpo-37798: Update test_statistics.py to verify that the statistics module - works well for both C and Python implementations. Patch by Donghee Na - -- bpo-26589: Added a new status code to the http module: 451 - UNAVAILABLE_FOR_LEGAL_REASONS - -- bpo-37915: Fix a segmentation fault that appeared when comparing instances - of ``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by Pablo - Galindo. - -- bpo-32554: Deprecate having random.seed() call hash on arbitrary types. - -- bpo-9938: Add optional keyword argument ``exit_on_error`` for - :class:`ArgumentParser`. - -- bpo-37851: The :mod:`faulthandler` module no longer allocates its - alternative stack at Python startup. Now the stack is only allocated at - the first faulthandler usage. - -- bpo-32793: Fix a duplicated debug message when - :meth:`smtplib.SMTP.connect` is called. - -- bpo-37885: venv: Don't generate unset variable warning on deactivate. - -- bpo-37868: Fix dataclasses.is_dataclass when given an instance that never - raises AttributeError in __getattr__. That is, an object that returns - something for __dataclass_fields__ even if it's not a dataclass. - -- bpo-37811: Fix ``socket`` module's ``socket.connect(address)`` function - being unable to establish connection in case of interrupted system call. - The problem was observed on all OSes which ``poll(2)`` system call can - take only non-negative integers and -1 as a timeout value. - -- bpo-37863: Optimizations for Fraction.__hash__ suggested by Tim Peters. - -- bpo-21131: Fix ``faulthandler.register(chain=True)`` stack. faulthandler - now allocates a dedicated stack of ``SIGSTKSZ*2`` bytes, instead of just - ``SIGSTKSZ`` bytes. Calling the previous signal handler in faulthandler - signal handler uses more than ``SIGSTKSZ`` bytes of stack memory on some - platforms. - -- bpo-37798: Add C fastpath for statistics.NormalDist.inv_cdf() Patch by - Donghee Na - -- bpo-37804: Remove the deprecated method ``threading.Thread.isAlive()``. - Patch by Donghee Na. - -- bpo-37819: Add Fraction.as_integer_ratio() to match the corresponding - methods in bool, int, float, and decimal. - -- bpo-14465: Add an xml.etree.ElementTree.indent() function for - pretty-printing XML trees. Contributed by Stefan Behnel. - -- bpo-37810: Fix :mod:`difflib` ``?`` hint in diff output when dealing with - tabs. Patch by Anthony Sottile. - -- bpo-37772: In ``zipfile.Path``, when adding implicit dirs, ensure that - ancestral directories are added and that duplicates are excluded. - -- bpo-18578: Renamed and documented ``test.bytecode_helper`` as - ``test.support.bytecode_helper``. Patch by Joannah Nanjekye. - -- bpo-37785: Fix xgettext warnings in :mod:`argparse`. - -- bpo-34488: :meth:`writelines` method of :class:`io.BytesIO` is now - slightly faster when many small lines are passed. Patch by Sergey - Fedoseev. - -- bpo-37449: ``ensurepip`` now uses ``importlib.resources.read_binary()`` to - read data instead of ``pkgutil.get_data()``. Patch by Joannah Nanjekye. - -- bpo-28292: Mark calendar.py helper functions as being private. The - follows PEP 8 guidance to maintain the style conventions in the module and - it addresses a known case of user confusion. - -- bpo-18049: Add definition of THREAD_STACK_SIZE for AIX in - Python/thread_pthread.h The default thread stacksize caused crashes with - the default recursion limit Patch by M Felt - -- bpo-37742: The logging.getLogger() API now returns the root logger when - passed the name 'root', whereas previously it returned a non-root logger - named 'root'. This could affect cases where user code explicitly wants a - non-root logger named 'root', or instantiates a logger using - logging.getLogger(__name__) in some top-level module called 'root.py'. - -- bpo-37738: Fix the implementation of curses ``addch(str, color_pair)``: - pass the color pair to ``setcchar()``, instead of always passing 0 as the - color pair. - -- bpo-37723: Fix performance regression on regular expression parsing with - huge character sets. Patch by Yann Vaginay. - -- bpo-35943: The function :c:func:`PyImport_GetModule` now ensures any - module it returns is fully initialized. Patch by Joannah Nanjekye. - -- bpo-32178: Fix IndexError in :mod:`email` package when trying to parse - invalid address fields starting with ``:``. - -- bpo-37268: The :mod:`parser` module is deprecated and will be removed in - future versions of Python. - -- bpo-11953: Completing WSA* error codes in :mod:`socket`. - -- bpo-37685: Fixed comparisons of :class:`datetime.timedelta` and - :class:`datetime.timezone`. - -- bpo-37697: Synchronize ``importlib.metadata`` with `importlib_metadata - 0.19 - <https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_, - improving handling of EGG-INFO files and fixing a crash when entry point - names contained colons. - -- bpo-37695: Correct :func:`curses.unget_wch` error message. Patch by - Anthony Sottile. - -- bpo-37689: Add :meth:`is_relative_to` in :class:`PurePath` to determine - whether or not one path is relative to another. - -- bpo-29553: Fixed :meth:`argparse.ArgumentParser.format_usage` for mutually - exclusive groups. Patch by Andrew Nester. - -- bpo-37691: Let math.dist() accept coordinates as sequences (or iterables) - rather than just tuples. - -- bpo-37685: Fixed ``__eq__``, ``__lt__`` etc implementations in some - classes. They now return :data:`NotImplemented` for unsupported type of - the other operand. This allows the other operand to play role (for example - the equality comparison with :data:`~unittest.mock.ANY` will return - ``True``). - -- bpo-37354: Make Activate.ps1 Powershell script static to allow for signing - it. - -- bpo-37664: Update wheels bundled with ensurepip (pip 19.2.3 and setuptools - 41.2.0) - -- bpo-37663: Bring consistency to venv shell activation scripts by always - using __VENV_PROMPT__. - -- bpo-37642: Allowed the pure Python implementation of - :class:`datetime.timezone` to represent sub-minute offsets close to - minimum and maximum boundaries, specifically in the ranges (23:59, 24:00) - and (-23:59, 24:00). Patch by Ngalim Siregar - -- bpo-36161: In :mod:`posix`, use ``ttyname_r`` instead of ``ttyname`` for - thread safety. - -- bpo-36324: Make internal attributes for statistics.NormalDist() private. - -- bpo-37555: Fix ``NonCallableMock._call_matcher`` returning tuple instead - of ``_Call`` object when ``self._spec_signature`` exists. Patch by - Elizabeth Uselton - -- bpo-29446: Make ``from tkinter import *`` import only the expected - objects. - -- bpo-16970: Adding a value error when an invalid value in passed to nargs - Patch by Robert Leenders - -- bpo-34443: Exceptions from :mod:`enum` now use the ``__qualname`` of the - enum class in the exception message instead of the ``__name__``. - -- bpo-37491: Fix ``IndexError`` when parsing email headers with unexpectedly - ending bare-quoted string value. Patch by Abhilash Raj. - -- bpo-37587: Make json.loads faster for long strings. (Patch by Marco - Paolini) - -- bpo-18378: Recognize "UTF-8" as a valid value for LC_CTYPE in - locale._parse_localename. - -- bpo-37579: Return :exc:`NotImplemented` in Python implementation of - ``__eq__`` for :class:`~datetime.timedelta` and :class:`~datetime.time` - when the other object being compared is not of the same type to match C - implementation. Patch by Karthikeyan Singaravelan. - -- bpo-21478: Record calls to parent when autospecced object is attached to a - mock using :func:`unittest.mock.attach_mock`. Patch by Karthikeyan - Singaravelan. - -- bpo-37531: "python3 -m test -jN --timeout=TIMEOUT" now kills a worker - process if it runs longer than *TIMEOUT* seconds. - -- bpo-37482: Fix serialization of display name in originator or destination - address fields with both encoded words and special chars. - -- bpo-36993: Improve error reporting for corrupt zip files with bad zip64 - extra data. Patch by Daniel Hillier. - -- bpo-37502: pickle.loads() no longer raises TypeError when the buffers - argument is set to None - -- bpo-37520: Correct behavior for zipfile.Path.parent when the path object - identifies a subdirectory. - -- bpo-18374: Fix the ``.col_offset`` attribute of nested :class:`ast.BinOp` - instances which had a too large value in some situations. - -- bpo-37424: Fixes a possible hang when using a timeout on - ``subprocess.run()`` while capturing output. If the child process spawned - its own children or otherwise connected its stdout or stderr handles with - another process, we could hang after the timeout was reached and our child - was killed when attempting to read final output from the pipes. - -- bpo-37421: Fix :func:`multiprocessing.util.get_temp_dir` finalizer: clear - also the 'tempdir' configuration of the current process, so next call to - ``get_temp_dir()`` will create a new temporary directory, rather than - reusing the removed temporary directory. - -- bpo-37481: The distutils ``bdist_wininst`` command is deprecated in Python - 3.8, use ``bdist_wheel`` (wheel packages) instead. - -- bpo-37479: When ``Enum.__str__`` is overridden in a derived class, the - override will be used by ``Enum.__format__`` regardless of whether mixin - classes are present. - -- bpo-37440: http.client now enables TLS 1.3 post-handshake authentication - for default context or if a cert_file is passed to HTTPSConnection. - -- bpo-37437: Update vendorized expat version to 2.2.7. - -- bpo-37428: SSLContext.post_handshake_auth = True no longer sets - SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the - option is documented as ignored for clients, OpenSSL implicitly enables - cert chain validation when the flag is set. - -- bpo-37420: :func:`os.sched_setaffinity` now correctly handles errors that - arise during iteration over its ``mask`` argument. Patch by Brandt Bucher. - -- bpo-37412: The :func:`os.getcwdb` function now uses the UTF-8 encoding on - Windows, rather than the ANSI code page: see :pep:`529` for the rationale. - The function is no longer deprecated on Windows. - -- bpo-37406: The sqlite3 module now raises TypeError, rather than - ValueError, if operation argument type is not str: execute(), - executemany() and calling a connection. - -- bpo-29412: Fix IndexError in parsing a header value ending unexpectedly. - Patch by Abhilash Raj. - -- bpo-36546: The *dist* argument for statistics.quantiles() is now - positional only. The current name doesn't reflect that the argument can be - either a dataset or a distribution. Marking the parameter as positional - avoids confusion and makes it possible to change the name later. - -- bpo-37394: Fix a bug that was causing the :mod:`queue` module to fail if - the accelerator module was not available. Patch by Pablo Galindo. - -- bpo-37376: :mod:`pprint` now has support for - :class:`types.SimpleNamespace`. Patch by Carl Bordum Hansen. - -- bpo-26967: An :class:`~argparse.ArgumentParser` with - ``allow_abbrev=False`` no longer disables grouping of short flags, such as - ``-vv``, but only disables abbreviation of long flags as documented. Patch - by Zac Hatfield-Dodds. - -- bpo-37212: :func:`unittest.mock.call` now preserves the order of keyword - arguments in repr output. Patch by Karthikeyan Singaravelan. - -- bpo-37372: Fix error unpickling datetime.time objects from Python 2 with - seconds>=24. Patch by Justin Blanchard. - -- bpo-37345: Add formal support for UDPLITE sockets. Support was present - before, but it is now easier to detect support with ``hasattr(socket, - 'IPPROTO_UDPLITE')`` and there are constants defined for each of the - values needed: ``socket.IPPROTO_UDPLITE``, ``UDPLITE_SEND_CSCOV``, and - ``UDPLITE_RECV_CSCOV``. Patch by Gabe Appleton. - -- bpo-37358: Optimized ``functools.partial`` by using vectorcall. - -- bpo-37347: :meth:`sqlite3.Connection.create_aggregate`, - :meth:`sqlite3.Connection.create_function`, - :meth:`sqlite3.Connection.set_authorizer`, - :meth:`sqlite3.Connection.set_progress_handler` - :meth:`sqlite3.Connection.set_trace_callback` methods lead to segfaults if - some of these methods are called twice with an equal object but not the - same. Now callbacks are stored more carefully. Patch by Aleksandr Balezin. - -- bpo-37163: The *obj* argument of :func:`dataclasses.replace` is - positional-only now. - -- bpo-37085: Add the optional Linux SocketCAN Broadcast Manager constants, - used as flags to configure the BCM behaviour, in the socket module. Patch - by Karl Ding. - -- bpo-37328: ``HTMLParser.unescape`` is removed. It was undocumented and - deprecated since Python 3.4. - -- bpo-37305: Add .webmanifest -> application/manifest+json to list of - recognized file types and content type headers - -- bpo-37320: ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` - alias to ``sunau.open()``, and ``wave.openfp()`` alias to ``wave.open()`` - have been removed. They were deprecated since Python 3.7. - -- bpo-37315: Deprecated accepting floats with integral value (like ``5.0``) - in :func:`math.factorial`. - -- bpo-37312: ``_dummy_thread`` and ``dummy_threading`` modules have been - removed. These modules were deprecated since Python 3.7 which requires - threading support. - -- bpo-33972: Email with single part but content-type set to ``multipart/*`` - doesn't raise AttributeError anymore. - -- bpo-37280: Use threadpool for reading from file for sendfile fallback - mode. - -- bpo-37279: Fix asyncio sendfile support when sendfile sends extra data in - fallback mode. - -- bpo-19865: :func:`ctypes.create_unicode_buffer` now also supports non-BMP - characters on platforms with 16-bit :c:type:`wchar_t` (for example, - Windows and AIX). - -- bpo-37266: In a subinterpreter, spawning a daemon thread now raises an - exception. Daemon threads were never supported in subinterpreters. - Previously, the subinterpreter finalization crashed with a Python fatal - error if a daemon thread was still running. - -- bpo-37210: Allow pure Python implementation of :mod:`pickle` to work even - when the C :mod:`!_pickle` module is unavailable. - -- bpo-21872: Fix :mod:`lzma`: module decompresses data incompletely. When - decompressing a FORMAT_ALONE format file, and it doesn't have the end - marker, sometimes the last one to dozens bytes can't be output. Patch by - Ma Lin. - -- bpo-35922: Fix :meth:`RobotFileParser.crawl_delay` and - :meth:`RobotFileParser.request_rate` to return ``None`` rather than raise - :exc:`AttributeError` when no relevant rule is defined in the robots.txt - file. Patch by Rémi Lapeyre. - -- bpo-35766: Change the format of feature_version to be a (major, minor) - tuple. - -- bpo-36607: Eliminate :exc:`RuntimeError` raised by - :func:`asyncio.all_tasks` if internal tasks weak set is changed by another - thread during iteration. - -- bpo-18748: :class:`!_pyio.IOBase` destructor now does nothing if getting - the ``closed`` attribute fails to better mimic :class:`!_io.IOBase` - finalizer. - -- bpo-36402: Fix a race condition at Python shutdown when waiting for - threads. Wait until the Python thread state of all non-daemon threads get - deleted (join all non-daemon threads), rather than just wait until - non-daemon Python threads complete. - -- bpo-37206: Default values which cannot be represented as Python objects no - longer improperly represented as ``None`` in function signatures. - -- bpo-37111: Added ``encoding`` and ``errors`` keyword parameters to - ``logging.basicConfig``. - -- bpo-12144: Ensure cookies with ``expires`` attribute are handled in - :meth:`CookieJar.make_cookies`. - -- bpo-34886: Fix an unintended ValueError from :func:`subprocess.run` when - checking for conflicting *input* and *stdin* or *capture_output* and - *stdout* or *stderr* args when they were explicitly provided but with - ``None`` values within a passed in ``**kwargs`` dict rather than as passed - directly by name. Patch contributed by Rémi Lapeyre. - -- bpo-37173: The exception message for ``inspect.getfile()`` now correctly - reports the passed class rather than the builtins module. - -- bpo-37178: Give math.perm() a one argument form that means the same as - math.factorial(). - -- bpo-37178: For math.perm(n, k), let k default to n, giving the same result - as factorial. - -- bpo-37165: Converted _collections._count_elements to use the Argument - Clinic. - -- bpo-34767: Do not always create a :class:`collections.deque` in - :class:`asyncio.Lock`. - -- bpo-37158: Speed-up statistics.fmean() by switching from a function to a - generator. - -- bpo-34282: Remove ``Enum._convert`` method, deprecated in 3.8. - -- bpo-37150: ``argparse._ActionsContainer.add_argument`` now throws error, - if someone accidentally pass FileType class object instead of instance of - FileType as ``type`` argument. - -- bpo-28724: The socket module now has the :func:`socket.send_fds` and - :func:`socket.recv.fds` methods. Contributed by Joannah Nanjekye, Shinya - Okano and Victor Stinner. - -- bpo-35621: Support running asyncio subprocesses when execution event loop - in a thread on UNIX. - -- bpo-36520: Lengthy email headers with UTF-8 characters are now properly - encoded when they are folded. Patch by Jeffrey Kintscher. - -- bpo-30835: Fixed a bug in email parsing where a message with invalid bytes - in content-transfer-encoding of a multipart message can cause an - AttributeError. Patch by Andrew Donnellan. - -- bpo-31163: pathlib.Path instance's rename and replace methods now return - the new Path instance. - -- bpo-25068: :class:`urllib.request.ProxyHandler` now lowercases the keys of - the passed dictionary. - -- bpo-26185: Fix :func:`repr` on empty :class:`ZipInfo` object. Patch by - Mickaël Schoentgen. - -- bpo-21315: Email headers containing RFC2047 encoded words are parsed - despite the missing whitespace, and a defect registered. Also missing - trailing whitespace after encoded words is now registered as a defect. - -- bpo-31904: Port test_datetime to VxWorks: skip zoneinfo tests on VxWorks - -- bpo-35805: Add parser for Message-ID header and add it to default - HeaderRegistry. This should prevent folding of Message-ID using RFC 2048 - encoded words. - -- bpo-36871: Ensure method signature is used instead of constructor - signature of a class while asserting mock object against method calls. - Patch by Karthikeyan Singaravelan. - -- bpo-35070: posix.getgrouplist() now works correctly when the user belongs - to NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher. - -- bpo-31783: Fix race condition in ThreadPoolExecutor when worker threads - are created during interpreter shutdown. - -- bpo-36582: Fix ``UserString.encode()`` to correctly return ``bytes`` - rather than a ``UserString`` instance. - -- bpo-32424: Deprecate xml.etree.ElementTree.Element.copy() in favor of - copy.copy(). - - Patch by Gordon P. Hemsley - -- bpo-36564: Fix infinite loop in email header folding logic that would be - triggered when an email policy's max_line_length is not long enough to - include the required markup and any values in the message. Patch by Paul - Ganssle - -- bpo-36543: Removed methods Element.getchildren(), Element.getiterator() - and ElementTree.getiterator() and the xml.etree.cElementTree module. - -- bpo-36409: Remove the old plistlib API deprecated in Python 3.4 - -- bpo-36302: distutils sorts source file lists so that Extension .so files - build more reproducibly by default - -- bpo-36250: Ignore ``ValueError`` from ``signal`` with ``interaction`` in - non-main thread. - -- bpo-36046: Added ``user``, ``group`` and ``extra_groups`` parameters to - the subprocess.Popen constructor. Patch by Patrick McLean. - -- bpo-32627: Fix compile error when ``_uuid`` headers conflicting included. - -- bpo-35800: Deprecate ``smtpd.MailmanProxy`` ready for future removal. - -- bpo-35168: :attr:`shlex.shlex.punctuation_chars` is now a read-only - property. - -- bpo-8538: Add support for boolean actions like ``--foo`` and ``--no-foo`` - to argparse. Patch contributed by Rémi Lapeyre. - -- bpo-20504: Fixes a bug in :mod:`!cgi` module when a multipart/form-data - request has no ``Content-Length`` header. - -- bpo-25988: The abstract base classes in :mod:`collections.abc` no longer - are exposed in the regular :mod:`collections` module. - -- bpo-11122: Distutils won't check for rpmbuild in specified paths only. - -- bpo-34775: Division handling of PurePath now returns NotImplemented - instead of raising a TypeError when passed something other than an - instance of str or PurePath. Patch by Roger Aiudi. - -- bpo-34749: :func:`binascii.a2b_base64` is now up to 2 times faster. Patch - by Sergey Fedoseev. - -- bpo-34519: Add additional aliases for HP Roman 8. Patch by Michael Osipov. - -- bpo-28009: Fix uuid.getnode() on platforms with '.' as MAC Addr delimiter - as well fix for MAC Addr format that omits a leading 0 in MAC Addr values. - Currently, AIX is the only know platform with these settings. Patch by - Michael Felt. - -- bpo-30618: Add :meth:`~pathlib.Path.readlink`. Patch by Girts Folkmanis. - -- bpo-32498: Made :func:`urllib.parse.unquote` accept bytes in addition to - strings. Patch by Stein Karlsen. - -- bpo-33348: lib2to3 now recognizes expressions after ``*`` and ``**`` like - in ``f(*[] or [])``. - -- bpo-32689: Update :func:`shutil.move` function to allow for Path objects - to be used as source argument. Patch by Emily Morehouse and Maxwell - "5.13b" McKinnon. - -- bpo-32820: Added ``__format__`` to IPv4 and IPv6 classes. Always outputs - a fully zero-padded string. Supports b/x/n modifiers (bin/hex/native - format). Native format for IPv4 is bin, native format for IPv6 is hex. - Also supports '#' and '_' modifiers. - -- bpo-27657: Fix urllib.parse.urlparse() with numeric paths. A string like - "path:80" is no longer parsed as a path but as a scheme ("path") and a - path ("80"). - -- bpo-4963: Fixed non-deterministic behavior related to mimetypes extension - mapping and module reinitialization. - -Documentation -------------- - -- bpo-21767: Explicitly mention abc support in functools.singledispatch - -- bpo-38816: Provides more details about the interaction between - :c:func:`fork` and CPython's runtime, focusing just on the C-API. This - includes cautions about where :c:func:`fork` should and shouldn't be - called. - -- bpo-38351: Modernize :mod:`email` examples from %-formatting to f-strings. - -- bpo-38778: Document the fact that :exc:`RuntimeError` is raised if - :meth:`os.fork` is called in a subinterpreter. - -- bpo-38592: Add Brazilian Portuguese to the language switcher at Python - Documentation website. - -- bpo-38294: Add list of no-longer-escaped chars to re.escape documentation - -- bpo-38053: Modernized the plistlib documentation - -- bpo-26868: Fix example usage of :c:func:`PyModule_AddObject` to properly - handle errors. - -- bpo-36797: Fix a dead link in the distutils API Reference. - -- bpo-37977: Warn more strongly and clearly about pickle insecurity - -- bpo-37979: Added a link to dateutil.parser.isoparse in the - datetime.fromisoformat documentation. Patch by Paul Ganssle - -- bpo-12707: Deprecate info(), geturl(), getcode() methods in favor of the - headers, url, and status properties, respectively, for HTTPResponse and - addinfourl. Also deprecate the code attribute of addinfourl in favor of - the status attribute. Patch by Ashwin Ramaswami - -- bpo-37937: Mention ``frame.f_trace`` in :func:`sys.settrace` docs. - -- bpo-37878: Make :c:func:`PyThreadState_DeleteCurrent` Internal. - -- bpo-37759: Beginning edits to Whatsnew 3.8 - -- bpo-37726: Stop recommending getopt in the tutorial for command line - argument parsing and promote argparse. - -- bpo-32910: Remove implementation-specific behaviour of how venv's - Deactivate works. - -- bpo-37256: Fix wording of arguments for :class:`Request` in - :mod:`urllib.request` - -- bpo-37284: Add a brief note to indicate that any new - ``sys.implementation`` required attributes must go through the PEP - process. - -- bpo-30088: Documented that :class:`mailbox.Maildir` constructor doesn't - attempt to verify the maildir folder layout correctness. Patch by - Sviatoslav Sydorenko. - -- bpo-37521: Fix ``importlib`` examples to insert any newly created modules - via importlib.util.module_from_spec() immediately into sys.modules instead - of after calling loader.exec_module(). - - Thanks to Benjamin Mintz for finding the bug. - -- bpo-37456: Slash ('/') is now part of syntax. - -- bpo-37487: Fix PyList_GetItem index description to include 0. - -- bpo-37149: Replace the dead link to the Tkinter 8.5 reference by John - Shipman, New Mexico Tech, with a link to the archive.org copy. - -- bpo-37478: Added possible exceptions to the description of os.chdir(). - -- bpo-34903: Documented that in :meth:`datetime.datetime.strptime`, the - leading zero in some two-digit formats is optional. Patch by Mike Gleen. - -- bpo-36260: Add decompression pitfalls to zipfile module documentation. - -- bpo-37004: In the documentation for difflib, a note was added explicitly - warning that the results of SequenceMatcher's ratio method may depend on - the order of the input strings. - -- bpo-36960: Restructured the :mod:`datetime` docs in the interest of making - them more user-friendly and improving readability. Patch by Brad Solomon. - -- bpo-36487: Make C-API docs clear about what the "main" interpreter is. - -- bpo-23460: The documentation for decimal string formatting using the - ``:g`` specifier has been updated to reflect the correct exponential - notation cutoff point. Original patch contributed by Tuomas Suutari. - -- bpo-35803: Document and test that ``tempfile`` functions may accept a - :term:`path-like object` for the ``dir`` argument. Patch by Anthony - Sottile. - -- bpo-33944: Added a note about the intended use of code in .pth files. - -- bpo-34293: Fix the Doc/Makefile regarding PAPER environment variable and - PDF builds - -- bpo-25237: Add documentation for tkinter modules - -Tests ------ - -- bpo-38614: Fix test_communicate() of test_asyncio.test_subprocess: use - ``support.LONG_TIMEOUT`` (5 minutes), instead of just 1 minute. - -- bpo-38614: Add timeout constants to :mod:`test.support`: - :data:`~test.support.LOOPBACK_TIMEOUT`, - :data:`~test.support.INTERNET_TIMEOUT`, - :data:`~test.support.SHORT_TIMEOUT` and - :data:`~test.support.LONG_TIMEOUT`. - -- bpo-38502: test.regrtest now uses process groups in the multiprocessing - mode (-jN command line option) if process groups are available: if - :func:`os.setsid` and :func:`os.killpg` functions are available. - -- bpo-35998: Fix a race condition in test_asyncio.test_start_tls_server_1(). - Previously, there was a race condition between the test main() function - which replaces the protocol and the test ServerProto protocol which sends - ANSWER once it gets HELLO. Now, only the test main() function is - responsible to send data, ServerProto no longer sends data. - -- bpo-38470: Fix ``test_compileall.test_compile_dir_maxlevels()`` on Windows - without long path support: only create 3 subdirectories instead of between - 20 and 100 subdirectories. - -- bpo-37531: On timeout, regrtest no longer attempts to call - ``popen.communicate()`` again: it can hang until all child processes using - stdout and stderr pipes completes. Kill the worker process and ignores its - output. Change also the faulthandler timeout of the main process from 1 - minute to 5 minutes, for Python slowest buildbots. - -- bpo-38239: Fix test_gdb for Link Time Optimization (LTO) builds. - -- bpo-38275: test_ssl now handles disabled TLS/SSL versions better. - OpenSSL's crypto policy and run-time settings are recognized and tests for - disabled versions are skipped. Tests also accept more TLS minimum_versions - for platforms that override OpenSSL's default with strict settings. - -- bpo-38271: The private keys for test_ssl were encrypted with 3DES in - traditional PKCS#5 format. 3DES and the digest algorithm of PKCS#5 are - blocked by some strict crypto policies. Use PKCS#8 format with AES256 - encryption instead. - -- bpo-38270: test.support now has a helper function to check for - availability of a hash digest function. Several tests are refactored avoid - MD5 and use SHA256 instead. Other tests are marked to use MD5 and skipped - when MD5 is disabled. - -- bpo-37123: Multiprocessing test test_mymanager() now also expects - -SIGTERM, not only exitcode 0. BaseManager._finalize_manager() sends - SIGTERM to the manager process if it takes longer than 1 second to stop, - which happens on slow buildbots. - -- bpo-38212: Multiprocessing tests: increase - test_queue_feeder_donot_stop_onexc() timeout from 1 to 60 seconds. - -- bpo-38117: Test with OpenSSL 1.1.1d - -- bpo-38018: Increase code coverage for multiprocessing.shared_memory. - -- bpo-37805: Add tests for json.dump(..., skipkeys=True). Patch by Donghee - Na. - -- bpo-37531: Enhance regrtest multiprocess timeout: write a message when - killing a worker process, catch popen.kill() and popen.wait() exceptions, - put a timeout on the second call to popen.communicate(). - -- bpo-37876: Add tests for ROT-13 codec. - -- bpo-36833: Added tests for :samp:`PyDateTime_{xxx}_GET_{xxx}()` macros of - the C API of the :mod:`datetime` module. Patch by Joannah Nanjekye. - -- bpo-37558: Fix test_shared_memory_cleaned_after_process_termination name - handling - -- bpo-37526: Add :func:`test.support.catch_threading_exception`: context - manager catching :class:`threading.Thread` exception using - :func:`threading.excepthook`. - -- bpo-37421: test_concurrent_futures now explicitly stops the ForkServer - instance if it's running. - -- bpo-37421: multiprocessing tests now stop the ForkServer instance if it's - running: close the "alive" file descriptor to ask the server to stop and - then remove its UNIX address. - -- bpo-37421: test_distutils.test_build_ext() is now able to remove the - temporary directory on Windows: don't import the newly built C extension - ("xx") in the current process, but test it in a separated process. - -- bpo-37421: test_concurrent_futures now cleans up multiprocessing to remove - immediately temporary directories created by - multiprocessing.util.get_temp_dir(). - -- bpo-37421: test_winconsoleio doesn't leak a temporary file anymore: use - tempfile.TemporaryFile() to remove it when the test completes. - -- bpo-37421: multiprocessing tests now explicitly call ``_run_finalizers()`` - to immediately remove temporary directories created by tests. - -- bpo-37421: urllib.request tests now call - :func:`~urllib.request.urlcleanup` to remove temporary files created by - ``urlretrieve()`` tests and to clear the ``_opener`` global variable set - by ``urlopen()`` and functions calling indirectly ``urlopen()``. - -- bpo-37472: Remove ``Lib/test/outstanding_bugs.py``. - -- bpo-37199: Fix test failures when IPv6 is unavailable or disabled. - -- bpo-19696: Replace deprecated method "random.choose" with "random.choice" - in "test_pkg_import.py". - -- bpo-37335: Remove no longer necessary code from c locale coercion tests - -- bpo-37421: Fix test_shutil to no longer leak temporary files. - -- bpo-37411: Fix test_wsgiref.testEnviron() to no longer depend on the - environment variables (don't fail if "X" variable is set). - -- bpo-37400: Fix test_os.test_chown(): use os.getgroups() rather than - grp.getgrall() to get groups. Rename also the test to test_chown_gid(). - -- bpo-37359: Add --cleanup option to python3 -m test to remove - ``test_python_*`` directories of previous failed jobs. Add "make - cleantest" to run ``python3 -m test --cleanup``. - -- bpo-37362: test_gdb no longer fails if it gets an "unexpected" message on - stderr: it now ignores stderr. The purpose of test_gdb is to test that - python-gdb.py commands work as expected, not to test gdb. - -- bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() - -- bpo-37278: Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent - leaking a running thread and leaking a reference. - -- bpo-37261: Fix :func:`test.support.catch_unraisable_exception`: its - __exit__() method now ignores unraisable exception raised when clearing - its ``unraisable`` attribute. - -- bpo-37069: regrtest now uses :func:`sys.unraisablehook` to mark a test as - "environment altered" (ENV_CHANGED) if it emits an "unraisable exception". - Moreover, regrtest logs a warning in this case. - - Use ``python3 -m test --fail-env-changed`` to catch unraisable exceptions - in tests. - -- bpo-37252: Fix assertions in ``test_close`` and - ``test_events_mask_overflow`` devpoll tests. - -- bpo-37169: Rewrite ``_PyObject_IsFreed()`` unit tests. - -- bpo-37153: ``test_venv.test_multiprocessing()`` now explicitly calls - ``pool.terminate()`` to wait until the pool completes. - -- bpo-34001: Make test_ssl pass with LibreSSL. LibreSSL handles minimum and - maximum TLS version differently than OpenSSL. - -- bpo-36919: Make ``test_source_encoding.test_issue2301`` implementation - independent. The test will work now for both CPython and IronPython. - -- bpo-30202: Update ``test.test_importlib.test_abc`` to test - ``find_spec()``. - -- bpo-28009: Modify the test_uuid logic to test when a program is available - AND can be used to obtain a MACADDR as basis for an UUID. Patch by M. Felt - -- bpo-34596: Fallback to a default reason when :func:`unittest.skip` is - uncalled. Patch by Naitree Zhu. - -Build ------ - -- bpo-38809: On Windows, build scripts will now recognize and use python.exe - from an active virtual env. - -- bpo-38684: Fix _hashlib build when Blake2 is disabled, but OpenSSL - supports it. - -- bpo-38468: Misc/python-config.in now uses ``getvar()`` for all still - existing ``sysconfig.get_config_var()`` calls. Patch by Joannah Nanjekye. - -- bpo-37415: Fix stdatomic.h header check for ICC compiler: the ICC - implementation lacks atomic_uintptr_t type which is needed by Python. - -- bpo-38301: In Solaris family, we must be sure to use ``-D_REENTRANT``. - Patch by Jesús Cea Avión. - -- bpo-36002: Locate ``llvm-profdata`` and ``llvm-ar`` binaries using - ``AC_PATH_TOOL`` rather than ``AC_PATH_TARGET_TOOL``. - -- bpo-37936: The :file:`.gitignore` file systematically keeps "rooted", with - a non-trailing slash, all the rules that are meant to apply to files in a - specific place in the repo. Previously, when the intended file to ignore - happened to be at the root of the repo, we'd most often accidentally also - ignore files and directories with the same name anywhere in the tree. - -- bpo-37760: The :file:`Tools/unicode/makeunicodedata.py` script, which is - used for converting information from the Unicode Character Database into - generated code and data used by the methods of :class:`str` and by the - :mod:`unicodedata` module, now handles each character's data as a - ``dataclass`` with named attributes, rather than a length-18 list of - different fields. - -- bpo-37936: The :file:`.gitignore` file no longer applies to any files that - are in fact tracked in the Git repository. Patch by Greg Price. - -- bpo-37725: Change "clean" makefile target to also clean the program guided - optimization (PGO) data. Previously you would have to use "make clean" - and "make profile-removal", or "make clobber". - -- bpo-37707: Mark some individual tests to skip when --pgo is used. The - tests marked increase the PGO task time significantly and likely don't - help improve optimization of the final executable. - -- bpo-36044: Reduce the number of unit tests run for the PGO generation - task. This speeds up the task by a factor of about 15x. Running the full - unit test suite is slow. This change may result in a slightly less - optimized build since not as many code branches will be executed. If you - are willing to wait for the much slower build, the old behavior can be - restored using './configure [..] PROFILE_TASK="-m test --pgo-extended"'. - We make no guarantees as to which PGO task set produces a faster build. - Users who care should run their own relevant benchmarks as results can - depend on the environment, workload, and compiler tool chain. - -- bpo-37468: ``make install`` no longer installs ``wininst-*.exe`` files - used by distutils bdist_wininst: bdist_wininst only works on Windows. - -- bpo-37189: Many :samp:`PyRun_{XXX}()` functions like - :c:func:`PyRun_String` were no longer exported in ``libpython38.dll`` by - mistake. Export them again to fix the ABI compatibility. - -- bpo-25361: Enables use of SSE2 instructions in Windows 32-bit build. - -- bpo-36210: Update optional extension module detection for AIX. ossaudiodev - and spwd are not applicable for AIX, and are no longer reported as - missing. 3rd-party packaging of ncurses (with ASIS support) conflicts with - officially supported AIX curses library, so configure AIX to use - libcurses.a. However, skip trying to build _curses_panel. - - patch by M Felt - -Windows -------- - -- bpo-38589: Fixes HTML Help shortcut when Windows is not installed to C - drive - -- bpo-38453: Ensure ntpath.realpath() correctly resolves relative paths. - -- bpo-38519: Restores the internal C headers that were missing from the - nuget.org and Microsoft Store packages. - -- bpo-38492: Remove ``pythonw.exe`` dependency on the Microsoft C++ runtime. - -- bpo-38344: Fix error message in activate.bat - -- bpo-38359: Ensures ``pyw.exe`` launcher reads correct registry key. - -- bpo-38355: Fixes ``ntpath.realpath`` failing on ``sys.executable``. - -- bpo-38117: Update bundled OpenSSL to 1.1.1d - -- bpo-38092: Reduce overhead when using multiprocessing in a Windows virtual - environment. - -- bpo-38133: Allow py.exe launcher to locate installations from the - Microsoft Store and improve display of active virtual environments. - -- bpo-38114: The ``pip.ini`` is no longer included in the Nuget package. - -- bpo-32592: Set Windows 8 as the minimum required version for API support - -- bpo-36634: :func:`os.cpu_count` now returns active processors rather than - maximum processors. - -- bpo-36634: venv activate.bat now works when the existing variables contain - double quote characters. - -- bpo-38081: Prevent error calling :func:`os.path.realpath` on ``'NUL'``. - -- bpo-38087: Fix case sensitivity in test_pathlib and test_ntpath. - -- bpo-38088: Fixes distutils not finding vcruntime140.dll with only the v142 - toolset installed. - -- bpo-37283: Ensure command-line and unattend.xml setting override - previously detected states in Windows installer. - -- bpo-38030: Fixes :func:`os.stat` failing for block devices on Windows - -- bpo-38020: Fixes potential crash when calling :func:`os.readlink` (or - indirectly through :func:`~os.path.realpath`) on a file that is not a - supported link. - -- bpo-37705: Improve the implementation of ``winerror_to_errno()``. - -- bpo-37549: :func:`os.dup` no longer fails for standard streams on Windows - 7. - -- bpo-1311: The ``nul`` file on Windows now returns True from - :func:`~os.path.exists` and a valid result from :func:`os.stat` with - ``S_IFCHR`` set. - -- bpo-9949: Enable support for following symlinks in :func:`os.realpath`. - -- bpo-37834: Treat all name surrogate reparse points on Windows in - :func:`os.lstat` and other reparse points as regular files in - :func:`os.stat`. - -- bpo-36266: Add the module name in the formatted error message when DLL - load fail happens during module import in - ``_PyImport_FindSharedFuncptrWindows()``. Patch by Srinivas Nyayapati. - -- bpo-25172: Trying to import the :mod:`!crypt` module on Windows will - result in an :exc:`ImportError` with a message explaining that the module - isn't supported on Windows. On other platforms, if the underlying - ``_crypt`` module is not available, the ImportError will include a message - explaining the problem. - -- bpo-37778: Fixes the icons used for file associations to the Microsoft - Store package. - -- bpo-37734: Fix use of registry values to launch Python from Microsoft - Store app. - -- bpo-37702: Fix memory leak on Windows in creating an SSLContext object or - running ``urllib.request.urlopen('https://...')``. - -- bpo-37672: Switch Windows Store package's pip to use bundled - :file:`pip.ini` instead of :envvar:`PIP_USER` variable. - -- bpo-10945: Officially drop support for creating bdist_wininst installers - on non-Windows systems. - -- bpo-37445: Include the ``FORMAT_MESSAGE_IGNORE_INSERTS`` flag in - ``FormatMessageW()`` calls. - -- bpo-37369: Fixes path for :data:`sys.executable` when running from the - Microsoft Store. - -- bpo-37380: Don't collect unfinished processes with ``subprocess._active`` - on Windows to cleanup later. Patch by Ruslan Kuprieiev. - -- bpo-37351: Removes libpython38.a from standard Windows distribution. - -- bpo-35360: Update Windows builds to use SQLite 3.28.0. - -- bpo-37267: On Windows, :func:`os.dup` no longer creates an inheritable fd - when handling a character file. - -- bpo-36779: Ensure ``time.tzname`` is correct on Windows when the active - code page is set to CP_UTF7 or CP_UTF8. - -- bpo-32587: Make :const:`winreg.REG_MULTI_SZ` support zero-length strings. - -- bpo-28269: Replace use of :c:func:`strcasecmp` for the system function - :c:func:`!_stricmp`. Patch by Minmin Gong. - -- bpo-36590: Add native Bluetooth RFCOMM support to socket module. - -macOS ------ - -- bpo-38117: Updated OpenSSL to 1.1.1d in macOS installer. - -- bpo-38089: Move Azure Pipelines to latest VM versions and make macOS tests - optional - -- bpo-18049: Increase the default stack size of threads from 5MB to 16MB on - macOS, to match the stack size of the main thread. This avoids crashes on - deep recursion in threads. - -- bpo-34602: Avoid test suite failures on macOS by no longer calling - resource.setrlimit to increase the process stack size limit at runtime. - The runtime change is no longer needed since the interpreter is being - built with a larger default stack size. - -- bpo-35360: Update macOS installer to use SQLite 3.28.0. - -- bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer. - -IDLE ----- - -- bpo-26353: Stop adding newline when saving an IDLE shell window. - -- bpo-4630: Add an option to toggle IDLE's cursor blink for shell, editor, - and output windows. See Settings, General, Window Preferences, Cursor - Blink. Patch by Zackery Spytz. - -- bpo-38598: Do not try to compile IDLE shell or output windows - -- bpo-36698: IDLE no longer fails when write non-encodable characters to - stderr. It now escapes them with a backslash, as the regular Python - interpreter. Added the ``errors`` field to the standard streams. - -- bpo-35379: When exiting IDLE, catch any AttributeError. One happens when - EditorWindow.close is called twice. Printing a traceback, when IDLE is - run from a terminal, is useless and annoying. - -- bpo-38183: To avoid problems, test_idle ignores the user config directory. - It no longer tries to create or access .idlerc or any files within. Users - must run IDLE to discover problems with saving settings. - -- bpo-38077: IDLE no longer adds 'argv' to the user namespace when - initializing it. This bug only affected 3.7.4 and 3.8.0b2 to 3.8.0b4. - -- bpo-38041: Shell restart lines now fill the window width, always start - with '=', and avoid wrapping unnecessarily. The line will still wrap if - the included file name is long relative to the width. - -- bpo-35771: To avoid occasional spurious test_idle failures on slower - machines, increase the ``hover_delay`` in test_tooltip. - -- bpo-37824: Properly handle user input warnings in IDLE shell. Cease - turning SyntaxWarnings into SyntaxErrors. - -- bpo-37929: IDLE Settings dialog now closes properly when there is no shell - window. - -- bpo-37902: Add mousewheel scrolling for IDLE module, path, and stack - browsers. Patch by George Zhang. - -- bpo-37849: Fixed completions list appearing too high or low when shown - above the current line. - -- bpo-36419: Refactor IDLE autocomplete and improve testing. - -- bpo-37748: Reorder the Run menu. Put the most common choice, Run Module, - at the top. - -- bpo-37692: Improve highlight config sample with example shell interaction - and better labels for shell elements. - -- bpo-37628: Settings dialog no longer expands with font size. - -- bpo-37627: Initialize the Customize Run dialog with the command line - arguments most recently entered before. The user can optionally edit - before submitting them. - -- bpo-33610: Fix code context not showing the correct context when first - toggled on. - -- bpo-37530: Optimize code context to reduce unneeded background activity. - Font and highlight changes now occur along with text changes instead of - after a random delay. - -- bpo-27452: Cleanup ``config.py`` by inlining ``RemoveFile`` and - simplifying the handling of ``file`` in ``CreateConfigHandlers``. - -- bpo-37325: Fix tab focus traversal order for help source and custom run - dialogs. - -- bpo-37321: Both subprocess connection error messages now refer to the - 'Startup failure' section of the IDLE doc. - -- bpo-17535: Add optional line numbers for IDLE editor windows. Windows - open without line numbers unless set otherwise in the General tab of the - configuration dialog. - -- bpo-26806: To compensate for stack frames added by IDLE and avoid possible - problems with low recursion limits, add 30 to limits in the user code - execution process. Subtract 30 when reporting recursion limits to make - this addition mostly transparent. - -- bpo-37177: Properly 'attach' search dialogs to their main window so that - they behave like other dialogs and do not get hidden behind their main - window. - -- bpo-37039: Adjust "Zoom Height" to individual screens by momentarily - maximizing the window on first use with a particular screen. Changing - screen settings may invalidate the saved height. While a window is - maximized, "Zoom Height" has no effect. - -- bpo-35763: Make calltip reminder about '/' meaning positional-only less - obtrusive by only adding it when there is room on the first line. - -- bpo-5680: Add 'Run... Customized' to the Run menu to run a module with - customized settings. Any 'command line arguments' entered are added to - sys.argv. One can suppress the normal Shell main module restart. - -- bpo-36390: Gather Format menu functions into format.py. Combine - paragraph.py, rstrip.py, and format methods from editor.py. - -Tools/Demos ------------ - -- bpo-38118: Update Valgrind suppression file to ignore a false alarm in - :c:func:`PyUnicode_Decode` when using GCC builtin strcmp(). - -- bpo-38347: pathfix.py: Assume all files that end on '.py' are Python - scripts when working recursively. - -- bpo-37803: pdb's ``--help`` and ``--version`` long options now work. - -- bpo-37942: Improve ArgumentClinic converter for floats. - -- bpo-37704: Remove ``Tools/scripts/h2py.py``: use cffi to access a C API in - Python. - -- bpo-37675: 2to3 now works when run from a zipped standard library. - -- bpo-37034: Argument Clinic now uses the argument name on errors with - keyword-only argument instead of their position. Patch contributed by Rémi - Lapeyre. - -- bpo-37064: Add option -k to pathscript.py script: preserve shebang flags. - Add option -a to pathscript.py script: add flags. - -C API ------ - -- bpo-37633: Re-export some function compatibility wrappers for macros in - ``pythonrun.h``. - -- bpo-38644: Provide :c:func:`Py_EnterRecursiveCall` and - :c:func:`Py_LeaveRecursiveCall` as regular functions for the limited API. - Previously, there were defined as macros, but these macros didn't work - with the limited API which cannot access ``PyThreadState.recursion_depth`` - field. Remove ``_Py_CheckRecursionLimit`` from the stable ABI. - -- bpo-38650: The global variable :c:data:`PyStructSequence_UnnamedField` is - now a constant and refers to a constant string. - -- bpo-38540: Fixed possible leak in :c:func:`PyArg_Parse` and similar - functions for format units ``"es#"`` and ``"et#"`` when the macro - :c:macro:`PY_SSIZE_T_CLEAN` is not defined. - -- bpo-38395: Fix a crash in :class:`weakref.proxy` objects due to incorrect - lifetime management when calling some associated methods that may delete - the last reference to object being referenced by the proxy. Patch by Pablo - Galindo. - -- bpo-36389: The ``_PyObject_CheckConsistency()`` function is now also - available in release mode. For example, it can be used to debug a crash in - the ``visit_decref()`` function of the GC. - -- bpo-38266: Revert the removal of PyThreadState_DeleteCurrent() with - documentation. - -- bpo-38303: Update audioop extension module to use the stable ABI - (PEP-384). Patch by Tyler Kieft. - -- bpo-38234: :c:func:`!Py_SetPath` now sets :data:`sys.executable` to the - program full path (:c:func:`Py_GetProgramFullPath`) rather than to the - program name (:c:func:`Py_GetProgramName`). - -- bpo-38234: Python ignored arguments passed to :c:func:`!Py_SetPath`, - :c:func:`!Py_SetPythonHome` and :c:func:`!Py_SetProgramName`: fix Python - initialization to use specified arguments. - -- bpo-38205: The :c:func:`Py_UNREACHABLE` macro now calls - :c:func:`Py_FatalError`. - -- bpo-38140: Make dict and weakref offsets opaque for C heap types by - passing the offsets through PyMemberDef - -- bpo-15088: The C function ``PyGen_NeedsFinalizing`` has been removed. It - was not documented, tested or used anywhere within CPython after the - implementation of :pep:`442`. Patch by Joannah Nanjekye. (Patch by Joannah - Nanjekye) - -- bpo-36763: Options added by ``PySys_AddXOption()`` are now handled the - same way than ``PyConfig.xoptions`` and command line ``-X`` options. - -- bpo-37926: Fix a crash in ``PySys_SetArgvEx(0, NULL, 0)``. - -- bpo-37879: Fix subtype_dealloc to suppress the type decref when the base - type is a C heap type - -- bpo-37645: Add :c:func:`!_PyObject_FunctionStr` to get a user-friendly - string representation of a function-like object. Patch by Jeroen Demeyer. - -- bpo-29548: The functions ``PyEval_CallObject``, ``PyEval_CallFunction``, - ``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are - deprecated. Use :c:func:`PyObject_Call` and its variants instead. - -- bpo-37151: ``PyCFunction_Call`` is now a deprecated alias of - :c:func:`PyObject_Call`. - -- bpo-37540: The vectorcall protocol now requires that the caller passes - only strings as keyword names. - -- bpo-37207: The vectorcall protocol is now enabled for ``type`` objects: - set ``tp_vectorcall`` to a vectorcall function to be used instead of - ``tp_new`` and ``tp_init`` when calling the class itself. - -- bpo-21120: Exclude Python-ast.h, ast.h and asdl.h from the limited API. - -- bpo-37483: Add new function ``_PyObject_CallOneArg`` for calling an object - with one positional argument. - -- bpo-36763: Add :c:func:`PyConfig_SetWideStringList` function. - -- bpo-37337: Add fast functions for calling methods: - :c:func:`!_PyObject_VectorcallMethod`, - :c:func:`!_PyObject_CallMethodNoArgs` and - :c:func:`!_PyObject_CallMethodOneArg`. - -- bpo-28805: The :c:macro:`METH_FASTCALL` calling convention has been - documented. - -- bpo-37221: The new function :c:func:`!PyCode_NewWithPosOnlyArgs` allows to - create code objects like :c:func:`!PyCode_New`, but with an extra - *posonlyargcount* parameter for indicating the number of positonal-only - arguments. - -- bpo-37215: Fix dtrace issue introduce by bpo-36842 - -- bpo-37194: Add a new public :c:func:`PyObject_CallNoArgs` function to the - C API: call a callable Python object without any arguments. It is the most - efficient way to call a callback without any argument. On x86-64, for - example, ``PyObject_CallFunctionObjArgs(func, NULL)`` allocates 960 bytes - on the stack per call, whereas ``PyObject_CallNoArgs(func)`` only - allocates 624 bytes per call. - -- bpo-37170: Fix the cast on error in - :c:func:`PyLong_AsUnsignedLongLongMask()`. - -- bpo-35381: Convert posixmodule.c statically allocated types - ``DirEntryType`` and ``ScandirIteratorType`` to heap-allocated types. - -- bpo-34331: Use singular/plural noun in error message when instantiating an - abstract class with non-overridden abstract method(s). - - -What's New in Python 3.8.0 beta 1? -================================== - -*Release date: 2019-06-04* - -Security --------- - -- bpo-35907: :cve:`2019-9948`: Avoid file reading by disallowing - ``local-file://`` and ``local_file://`` URL schemes in - ``URLopener().open()`` and ``URLopener().retrieve()`` of - :mod:`urllib.request`. - -- bpo-33529: Prevent fold function used in email header encoding from - entering infinite loop when there are too many non-ASCII characters in a - header. - -- bpo-33164: Updated blake2 implementation which uses secure memset - implementation provided by platform. - -Core and Builtins ------------------ - -- bpo-35814: Allow unpacking in the right hand side of annotated - assignments. In particular, ``t: Tuple[int, ...] = x, y, *z`` is now - allowed. - -- bpo-37126: All structseq objects are now tracked by the garbage collector. - Patch by Pablo Galindo. - -- bpo-37122: Make the *co_argcount* attribute of code objects represent the - total number of positional arguments (including positional-only - arguments). The value of *co_posonlyargcount* can be used to distinguish - which arguments are positional only, and the difference (*co_argcount* - - *co_posonlyargcount*) is the number of positional-or-keyword arguments. - Patch by Pablo Galindo. - -- bpo-20092: Constructors of :class:`int`, :class:`float` and - :class:`complex` will now use the :meth:`~object.__index__` special - method, if available and the corresponding method :meth:`~object.__int__`, - :meth:`~object.__float__` or :meth:`~object.__complex__` is not available. - -- bpo-37087: Add native thread ID (TID) support to OpenBSD. - -- bpo-26219: Implemented per opcode cache mechanism and ``LOAD_GLOBAL`` - instruction use it. ``LOAD_GLOBAL`` is now about 40% faster. Contributed - by Yury Selivanov, and Inada Naoki. - -- bpo-37072: Fix crash in PyAST_FromNodeObject() when flags is NULL. - -- bpo-37029: Freeing a great many small objects could take time quadratic in - the number of arenas, due to using linear search to keep ``obmalloc.c``'s - list of usable arenas sorted by order of number of free memory pools. - This is accomplished without search now, leaving the worst-case time - linear in the number of arenas. For programs where this quite visibly - matters (typically with more than 100 thousand small objects alive - simultaneously), this can greatly reduce the time needed to release their - memory. - -- bpo-26423: Fix possible overflow in ``wrap_lenfunc()`` when ``sizeof(long) - < sizeof(Py_ssize_t)`` (e.g., 64-bit Windows). - -- bpo-37050: Improve the AST for "debug" f-strings, which use '=' to print - out the source of the expression being evaluated. Delete expr_text from - the FormattedValue node, and instead use a Constant string node (possibly - merged with adjacent constant expressions inside the f-string). - -- bpo-22385: The ``bytes.hex``, ``bytearray.hex``, and ``memoryview.hex`` - methods as well as the ``binascii.hexlify`` and ``b2a_hex`` functions now - have the ability to include an optional separator between hex bytes. This - functionality was inspired by MicroPython's hexlify implementation. - -- bpo-26836: Add :func:`os.memfd_create`. - -- bpo-37032: Added new ``replace()`` method to the code type - (:class:`types.CodeType`). - -- bpo-37007: Implement :func:`socket.if_nameindex`, - :func:`socket.if_nametoindex`, and :func:`socket.if_indextoname` on - Windows. - -- bpo-36829: :c:func:`PyErr_WriteUnraisable` now creates a traceback object - if there is no current traceback. Moreover, call - :c:func:`PyErr_NormalizeException` and :c:func:`PyException_SetTraceback` - to normalize the exception value. Ignore any error. - -- bpo-36878: Only accept text after ``# type: ignore`` if the first - character is ASCII. This is to disallow things like ``# type: ignoreé``. - -- bpo-36878: Store text appearing after a ``# type: ignore`` comment in the - AST. For example a type ignore like ``# type: ignore[E1000]`` will have - the string ``"[E1000]"`` stored in its AST node. - -- bpo-2180: Treat line continuation at EOF as a ``SyntaxError`` by Anthony - Sottile. - -- bpo-36907: Fix a crash when calling a C function with a keyword dict - (``f(**kwargs)``) and changing the dict ``kwargs`` while that function is - running. - -- bpo-36946: Fix possible signed integer overflow when handling slices. - -- bpo-36826: Add NamedExpression kind support to ast_unparse.c - -- bpo-1875: A :exc:`SyntaxError` is now raised if a code blocks that will be - optimized away (e.g. if conditions that are always false) contains syntax - errors. Patch by Pablo Galindo. - -- bpo-36027: Allow computation of modular inverses via three-argument - ``pow``: the second argument is now permitted to be negative in the case - where the first and third arguments are relatively prime. - -- bpo-36861: Update the Unicode database to version 12.1.0. - -- bpo-28866: Avoid caching attributes of classes which type defines mro() to - avoid a hard cache invalidation problem. - -- bpo-36851: The ``FrameType`` stack is now correctly cleaned up if the - execution ends with a return and the stack is not empty. - -- bpo-34616: The ``compile()`` builtin functions now support the - ``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag, which allow to compile sources - that contains top-level ``await``, ``async with`` or ``async for``. This - is useful to evaluate async-code from with an already async functions; for - example in a custom REPL. - -- bpo-36842: Implement PEP 578, adding sys.audit, io.open_code and related - APIs. - -- bpo-27639: Correct return type for UserList slicing operations. Patch by - Michael Blahay, Erick Cervantes, and vaultah - -- bpo-36737: Move PyRuntimeState.warnings into per-interpreter state (via - "module state"). - -- bpo-36793: Removed ``__str__`` implementations from builtin types - :class:`bool`, :class:`int`, :class:`float`, :class:`complex` and few - classes from the standard library. They now inherit ``__str__()`` from - :class:`object`. - -- bpo-36817: Add a ``=`` feature f-strings for debugging. This can precede - ``!s``, ``!r``, or ``!a``. It produces the text of the expression, - followed by an equal sign, followed by the repr of the value of the - expression. So ``f'{3*9+15=}'`` would be equal to the string - ``'3*9+15=42'``. If ``=`` is specified, the default conversion is set to - ``!r``, unless a format spec is given, in which case the formatting - behavior is unchanged, and __format__ will be used. - -- bpo-24048: Save the live exception during import.c's ``remove_module()``. - -- bpo-27987: pymalloc returns memory blocks aligned by 16 bytes, instead of - 8 bytes, on 64-bit platforms to conform x86-64 ABI. Recent compilers - assume this alignment more often. Patch by Inada Naoki. - -- bpo-36601: A long-since-meaningless check for ``getpid() == main_pid`` was - removed from Python's internal C signal handler. - -- bpo-36594: Fix incorrect use of ``%p`` in format strings. Patch by Zackery - Spytz. - -- bpo-36045: ``builtins.help()`` now prefixes ``async`` for async functions. - -- bpo-36084: Add native thread ID (TID) to threading.Thread objects - (supported platforms: Windows, FreeBSD, Linux, macOS) - -- bpo-36035: Added fix for broken symlinks in combination with pathlib - -- bpo-35983: Added new trashcan macros to deal with a double deallocation - that could occur when the ``tp_dealloc`` of a subclass calls the - ``tp_dealloc`` of a base class and that base class uses the trashcan - mechanism. Patch by Jeroen Demeyer. - -- bpo-20602: Do not clear :data:`sys.flags` and :data:`sys.float_info` - during shutdown. Patch by Zackery Spytz. - -- bpo-26826: Expose :func:`copy_file_range` as a low level API in the - :mod:`os` module. - -- bpo-32388: Remove cross-version binary compatibility requirement in - tp_flags. - -- bpo-31862: Port binascii to PEP 489 multiphase initialization. Patch by - Marcel Plch. - -Library -------- - -- bpo-37128: Added :func:`math.perm`. - -- bpo-37120: Add SSLContext.num_tickets to control the number of TLSv1.3 - session tickets. - -- bpo-12202: Fix the error handling in - :meth:`!msilib.SummaryInformation.GetProperty`. Patch by Zackery Spytz. - -- bpo-26835: The fcntl module now contains file sealing constants for - sealing of memfds. - -- bpo-29262: Add ``get_origin()`` and ``get_args()`` introspection helpers - to ``typing`` module. - -- bpo-12639: :meth:`!msilib.Directory.start_component` no longer fails if - *keyfile* is not ``None``. - -- bpo-36999: Add the ``asyncio.Task.get_coro()`` method to publicly expose - the tasks's coroutine object. - -- bpo-35246: Make :func:`asyncio.create_subprocess_exec` accept path-like - arguments. - -- bpo-35279: Change default *max_workers* of ``ThreadPoolExecutor`` from - ``cpu_count() * 5`` to ``min(32, cpu_count() + 4)``. Previous value was - unreasonably large on many cores machines. - -- bpo-37076: :func:`_thread.start_new_thread` now logs uncaught exception - raised by the function using :func:`sys.unraisablehook`, rather than - :func:`sys.excepthook`, so the hook gets access to the function which - raised the exception. - -- bpo-33725: On macOS, the :mod:`multiprocessing` module now uses *spawn* - start method by default. - -- bpo-37054: Fix destructor :class:`!_pyio.BytesIO` and - :class:`!_pyio.TextIOWrapper`: initialize their ``_buffer`` attribute as - soon as possible (in the class body), because it's used by ``__del__()`` - which calls ``close()``. - -- bpo-37058: PEP 544: Add ``Protocol`` and ``@runtime_checkable`` to the - ``typing`` module. - -- bpo-36933: The functions ``sys.set_coroutine_wrapper`` and - ``sys.get_coroutine_wrapper`` that were deprecated and marked for removal - in 3.8 have been removed. - -- bpo-37047: Handle late binding and attribute access in - :class:`unittest.mock.AsyncMock` setup for autospeccing. Document newly - implemented async methods in :class:`unittest.mock.MagicMock`. - -- bpo-37049: PEP 589: Add ``TypedDict`` to the ``typing`` module. - -- bpo-37046: PEP 586: Add ``Literal`` to the ``typing`` module. - -- bpo-37045: PEP 591: Add ``Final`` qualifier and ``@final`` decorator to - the ``typing`` module. - -- bpo-37035: Don't log OSError based exceptions if a fatal error has - occurred in asyncio transport. Peer can generate almost any OSError, user - cannot avoid these exceptions by fixing own code. Errors are still - propagated to user code, it's just logging them is pointless and pollute - asyncio logs. - -- bpo-37001: :func:`symtable.symtable` now accepts the same input types for - source code as the built-in :func:`compile` function. Patch by Dino - Viehland. - -- bpo-37028: Implement asyncio REPL - -- bpo-37027: Return safe to use proxy socket object from - transport.get_extra_info('socket') - -- bpo-32528: Make asyncio.CancelledError a BaseException. - - This will address the common mistake many asyncio users make: an "except - Exception" clause breaking Tasks cancellation. - - In addition to this change, we stop inheriting asyncio.TimeoutError and - asyncio.InvalidStateError from their concurrent.futures.* counterparts. - There's no point for these exceptions to share the inheritance chain. - -- bpo-1230540: Add a new :func:`threading.excepthook` function which handles - uncaught :meth:`threading.Thread.run` exception. It can be overridden to - control how uncaught :meth:`threading.Thread.run` exceptions are handled. - -- bpo-36996: Handle :func:`unittest.mock.patch` used as a decorator on async - functions. - -- bpo-37008: Add support for calling :func:`next` with the mock resulting - from :func:`unittest.mock.mock_open` - -- bpo-27737: Allow whitespace only header encoding in ``email.header`` - by - Batuhan Taskaya - -- bpo-36969: PDB command ``args`` now display positional only arguments. - Patch contributed by Rémi Lapeyre. - -- bpo-36969: PDB command ``args`` now display keyword only arguments. Patch - contributed by Rémi Lapeyre. - -- bpo-36983: Add missing names to ``typing.__all__``: ``ChainMap``, - ``ForwardRef``, ``OrderedDict`` - by Anthony Sottile. - -- bpo-36972: Add SupportsIndex protocol to the typing module to allow type - checking to detect classes that can be passed to ``hex()``, ``oct()`` and - ``bin()``. - -- bpo-32972: Implement ``unittest.IsolatedAsyncioTestCase`` to help testing - asyncio-based code. - -- bpo-36952: :func:`fileinput.input` and :class:`fileinput.FileInput` - **bufsize** argument has been removed (was deprecated and ignored since - Python 3.6), and as a result the **mode** and **openhook** arguments have - been made keyword-only. - -- bpo-36952: Starting with Python 3.3, importing ABCs from - :mod:`collections` is deprecated, and import should be done from - :mod:`collections.abc`. Still being able to import from :mod:`collections` - was marked for removal in 3.8, but has been delayed to 3.9; documentation - and ``DeprecationWarning`` clarified. - -- bpo-36949: Implement __repr__ for WeakSet objects. - -- bpo-36948: Fix :exc:`NameError` in - :meth:`urllib.request.URLopener.retrieve`. Patch by Karthikeyan - Singaravelan. - -- bpo-33524: Fix the folding of email header when the max_line_length is 0 - or None and the header contains non-ascii characters. Contributed by - Licht Takeuchi (@Licht-T). - -- bpo-24564: :func:`shutil.copystat` now ignores :const:`errno.EINVAL` on - :func:`os.setxattr` which may occur when copying files on filesystems - without extended attributes support. - - Original patch by Giampaolo Rodola, updated by Ying Wang. - -- bpo-36888: Python child processes can now access the status of their - parent process using multiprocessing.process.parent_process - -- bpo-36921: Deprecate ``@coroutine`` for sake of ``async def``. - -- bpo-25652: Fix bug in ``__rmod__`` of ``UserString`` - by Batuhan Taskaya. - -- bpo-36916: Remove a message about an unhandled exception in a task when - writer.write() is used without await and writer.drain() fails with an - exception. - -- bpo-36889: Introduce :class:`asyncio.Stream` class that merges - :class:`asyncio.StreamReader` and :class:`asyncio.StreamWriter` - functionality. :class:`asyncio.Stream` can work in readonly, writeonly and - readwrite modes. Provide :func:`asyncio.connect`, - :func:`asyncio.connect_unix`, :func:`asyncio.connect_read_pipe` and - :func:`asyncio.connect_write_pipe` factories to open - :class:`asyncio.Stream` connections. Provide :class:`asyncio.StreamServer` - and :class:`UnixStreamServer` to serve servers with asyncio.Stream API. - Modify :func:`asyncio.create_subprocess_shell` and - :func:`asyncio.create_subprocess_exec` to use :class:`asyncio.Stream` - instead of deprecated :class:`StreamReader` and :class:`StreamWriter`. - Deprecate :class:`asyncio.StreamReader` and :class:`asyncio.StreamWriter`. - Deprecate usage of private classes, e.g. - :class:`asyncio.FlowControlMixing` and - :class:`asyncio.StreamReaderProtocol` outside of asyncio package. - -- bpo-36845: Added validation of integer prefixes to the construction of IP - networks and interfaces in the ipaddress module. - -- bpo-23378: Add an extend action to argparser. - -- bpo-36867: Fix a bug making a SharedMemoryManager instance and its parent - process use two separate resource_tracker processes. - -- bpo-23896: Adds a grammar to lib2to3.pygram that contains exec as a - function not as statement. - -- bpo-36895: The function ``time.clock()`` was deprecated in 3.3 in favor of - ``time.perf_counter()`` and marked for removal in 3.8, it has removed. - -- bpo-35545: Fix asyncio discarding IPv6 scopes when ensuring hostname - resolutions internally - -- bpo-36887: Add new function :func:`math.isqrt` to compute integer square - roots. - -- bpo-34632: Introduce the ``importlib.metadata`` module with (provisional) - support for reading metadata from third-party packages. - -- bpo-36878: When using ``type_comments=True`` in ``ast.parse``, treat ``# - type: ignore`` followed by a non-alphanumeric character and then arbitrary - text as a type ignore, instead of requiring nothing but whitespace or - another comment. This is to permit formations such as ``# type: - ignore[E1000]``. - -- bpo-36778: ``cp65001`` encoding (Windows code page 65001) becomes an alias - to ``utf_8`` encoding. - -- bpo-36867: The multiprocessing.resource_tracker replaces the - multiprocessing.semaphore_tracker module. Other than semaphores, - resource_tracker also tracks shared_memory segments. - -- bpo-30262: The ``Cache`` and ``Statement`` objects of the :mod:`sqlite3` - module are not exposed to the user. Patch by Aviv Palivoda. - -- bpo-24538: In ``shutil.copystat()``, first copy extended file attributes - and then file permissions, since extended attributes can only be set on - the destination while it is still writeable. - -- bpo-36829: Add new :func:`sys.unraisablehook` function which can be - overridden to control how "unraisable exceptions" are handled. It is - called when an exception has occurred but there is no way for Python to - handle it. For example, when a destructor raises an exception or during - garbage collection (:func:`gc.collect`). - -- bpo-36832: Introducing ``zipfile.Path``, a pathlib-compatible wrapper for - traversing zip files. - -- bpo-36814: Fix an issue where os.posix_spawnp() would incorrectly raise a - TypeError when file_actions is None. - -- bpo-33110: Handle exceptions raised by functions added by - concurrent.futures add_done_callback correctly when the Future has already - completed. - -- bpo-26903: Limit ``max_workers`` in ``ProcessPoolExecutor`` to 61 to work - around a WaitForMultipleObjects limitation. - -- bpo-36813: Fix :class:`~logging.handlers.QueueListener` to call - ``queue.task_done()`` upon stopping. Patch by Bar Harel. - -- bpo-36806: Forbid creation of asyncio stream objects like StreamReader, - StreamWriter, Process, and their protocols outside of asyncio package. - -- bpo-36802: Provide both sync and async calls for StreamWriter.write() and - StreamWriter.close() - -- bpo-36801: Properly handle SSL connection closing in asyncio - StreamWriter.drain() call. - -- bpo-36785: Implement PEP 574 (pickle protocol 5 with out-of-band buffers). - -- bpo-36772: functools.lru_cache() can now be used as a straight decorator - in addition to its existing usage as a function that returns a decorator. - -- bpo-6584: Add a :exc:`~gzip.BadGzipFile` exception to the :mod:`gzip` - module. - -- bpo-36748: Optimized write buffering in C implementation of - ``TextIOWrapper``. Writing ASCII string to ``TextIOWrapper`` with ascii, - latin1, or utf-8 encoding is about 20% faster. Patch by Inada Naoki. - -- bpo-8138: Don't mark ``wsgiref.simple_server.SimpleServer`` as - multi-threaded since ``wsgiref.simple_server.WSGIServer`` is - single-threaded. - -- bpo-22640: :func:`py_compile.compile` now supports silent mode. Patch by - Joannah Nanjekye - -- bpo-29183: Fix double exceptions in :class:`wsgiref.handlers.BaseHandler` - by calling its :meth:`~wsgiref.handlers.BaseHandler.close` method only - when no exception is raised. - -- bpo-36548: Improved the repr of regular expression flags. - -- bpo-36542: The signature of Python functions can now be overridden by - specifying the ``__text_signature__`` attribute. - -- bpo-36533: Reinitialize logging.Handler locks in forked child processes - instead of attempting to acquire them all in the parent before forking - only to be released in the child process. The acquire/release pattern was - leading to deadlocks in code that has implemented any form of chained - logging handlers that depend upon one another as the lock acquisition - order cannot be guaranteed. - -- bpo-35252: Throw a TypeError instead of an AssertionError when using an - invalid type annotation with singledispatch. - -- bpo-35900: Allow reduction methods to return a 6-item tuple where the 6th - item specifies a custom state-setting method that's called instead of the - regular ``__setstate__`` method. - -- bpo-35900: enable custom reduction callback registration for functions and - classes in _pickle.c, using the new Pickler's attribute - ``reducer_override`` - -- bpo-36368: Fix a bug crashing SharedMemoryManager instances in interactive - sessions after a ctrl-c (KeyboardInterrupt) was sent - -- bpo-31904: Fix mmap fail for VxWorks - -- bpo-27497: :meth:`csv.DictWriter.writeheader` now returns the return value - of the underlying :meth:`csv.Writer.writerow` method. Patch contributed by - Ashish Nitin Patil. - -- bpo-36239: Parsing .mo files now ignores comments starting and ending with - #-#-#-#-#. - -- bpo-26707: Enable plistlib to read and write binary plist files that were - created as a KeyedArchive file. Specifically, this allows the plistlib to - process 0x80 tokens as UID objects. - -- bpo-31904: Add posix module support for VxWorks. - -- bpo-35125: Asyncio: Remove inner callback on outer cancellation in shield - -- bpo-35721: Fix :meth:`asyncio.SelectorEventLoop.subprocess_exec` leaks - file descriptors if ``Popen`` fails and called with - ``stdin=subprocess.PIPE``. Patch by Niklas Fiekas. - -- bpo-31855: :func:`unittest.mock.mock_open` results now respects the - argument of read([size]). Patch contributed by Rémi Lapeyre. - -- bpo-35431: Implement :func:`math.comb` that returns binomial coefficient, - that computes the number of ways to choose k items from n items without - repetition and without order. Patch by Yash Aggarwal and Keller Fuchs. - -- bpo-26660: Fixed permission errors in - :class:`~tempfile.TemporaryDirectory` clean up. Previously - ``TemporaryDirectory.cleanup()`` failed when non-writeable or - non-searchable files or directories were created inside a temporary - directory. - -- bpo-34271: Add debugging helpers to ssl module. It's now possible to dump - key material and to trace TLS protocol. The default and stdlib contexts - also support SSLKEYLOGFILE env var. - -- bpo-26467: Added AsyncMock to support using unittest to mock asyncio - coroutines. Patch by Lisa Roach. - -- bpo-33569: dataclasses.InitVar: Exposes the type used to create the init - var. - -- bpo-34424: Fix serialization of messages containing encoded strings when - the policy.linesep is set to a multi-character string. Patch by Jens - Troeger. - -- bpo-34303: Performance of :func:`functools.reduce` is slightly improved. - Patch by Sergey Fedoseev. - -- bpo-33361: Fix a bug in :class:`codecs.StreamRecoder` where seeking might - leave old data in a buffer and break subsequent read calls. Patch by Ammar - Askar. - -- bpo-22454: The :mod:`shlex` module now exposes :func:`shlex.join`, the - inverse of :func:`shlex.split`. Patch by Bo Bayles. - -- bpo-31922: :meth:`asyncio.AbstractEventLoop.create_datagram_endpoint`: Do - not connect UDP socket when broadcast is allowed. This allows to receive - replies after a UDP broadcast. - -- bpo-24882: Change ThreadPoolExecutor to use existing idle threads before - spinning up new ones. - -- bpo-31961: Added support for bytes and path-like objects in - :func:`subprocess.Popen` on Windows. The *args* parameter now accepts a - :term:`path-like object` if *shell* is ``False`` and a sequence containing - bytes and path-like objects. The *executable* parameter now accepts a - bytes and :term:`path-like object`. The *cwd* parameter now accepts a - bytes object. Based on patch by Anders Lorentsen. - -- bpo-33123: :class:`pathlib.Path.unlink` now accepts a *missing_ok* - parameter to avoid a :exc:`FileNotFoundError` from being raised. Patch by - Robert Buchholz. - -- bpo-32941: Allow :class:`mmap.mmap` objects to access the madvise() system - call (through :meth:`mmap.mmap.madvise`). - -- bpo-22102: Added support for ZIP files with disks set to 0. Such files are - commonly created by builtin tools on Windows when use ZIP64 extension. - Patch by Francisco Facioni. - -- bpo-32515: trace.py can now run modules via python3 -m trace -t --module - module_name - -- bpo-32299: Changed :func:`unittest.mock.patch.dict` to return the patched - dictionary when used as context manager. Patch by Vadim Tsander. - -- bpo-27141: Added a ``__copy__()`` to ``collections.UserList`` and - ``collections.UserDict`` in order to correctly implement shallow copying - of the objects. Patch by Bar Harel. - -- bpo-31829: ``\r``, ``\0`` and ``\x1a`` (end-of-file on Windows) are now - escaped in protocol 0 pickles of Unicode strings. This allows to load them - without loss from files open in text mode in Python 2. - -- bpo-23395: ``_thread.interrupt_main()`` now avoids setting the Python - error status if the ``SIGINT`` signal is ignored or not handled by Python. - -Documentation -------------- - -- bpo-36896: Clarify that some types have unstable constructor signature - between Python versions. - -- bpo-36686: Improve documentation of the stdin, stdout, and stderr - arguments of the ``asyncio.subprocess_exec`` function to specify which - values are supported. Also mention that decoding as text is not supported. - - Add a few tests to verify that the various values passed to the std* - arguments actually work. - -- bpo-36984: Improve version added references in ``typing`` module - by - Anthony Sottile. - -- bpo-36868: What's new now mentions SSLContext.hostname_checks_common_name - instead of SSLContext.host_flags. - -- bpo-35924: Add a note to the ``curses.addstr()`` documentation to warn - that multiline strings can cause segfaults because of an ncurses bug. - -- bpo-36783: Added C API Documentation for Time_FromTimeAndFold and - PyDateTime_FromDateAndTimeAndFold as per PEP 495. Patch by Edison - Abahurire. - -- bpo-36797: More of the legacy distutils documentation has been either - pruned, or else more clearly marked as being retained solely until the - setuptools documentation covers it independently. - -- bpo-22865: Add detail to the documentation on the ``pty.spawn`` function. - -- bpo-35397: Remove deprecation and document urllib.parse.unwrap(). Patch - contributed by Rémi Lapeyre. - -- bpo-32995: Added the context variable in glossary. - -- bpo-33519: Clarify that ``copy()`` is not part of the ``MutableSequence`` - ABC. - -- bpo-33482: Make ``codecs.StreamRecoder.writelines`` take a list of bytes. - -- bpo-25735: Added documentation for func factorial to indicate that returns - integer values - -- bpo-20285: Expand object.__doc__ (docstring) to make it clearer. Modify - pydoc.py so that help(object) lists object methods (for other classes, - help omits methods of the object base class.) - -Tests ------ - -- bpo-37069: Modify test_coroutines, test_cprofile, test_generators, - test_raise, test_ssl and test_yield_from to use - :func:`test.support.catch_unraisable_exception` rather than - :func:`test.support.captured_stderr`. - -- bpo-37098: Fix test_memfd_create on older Linux Kernels. - -- bpo-37081: Test with OpenSSL 1.1.1c - -- bpo-36829: Add :func:`test.support.catch_unraisable_exception`: context - manager catching unraisable exception using :func:`sys.unraisablehook`. - -- bpo-36915: The main regrtest process now always removes all temporary - directories of worker processes even if they crash or if they are killed - on KeyboardInterrupt (CTRL+c). - -- bpo-36719: "python3 -m test -jN ..." now continues the execution of next - tests when a worker process crash (CHILD_ERROR state). Previously, the - test suite stopped immediately. Use --failfast to stop at the first error. - -- bpo-36816: Update Lib/test/selfsigned_pythontestdotnet.pem to match - self-signed.pythontest.net's new TLS certificate. - -- bpo-35925: Skip httplib and nntplib networking tests when they would - otherwise fail due to a modern OS or distro with a default OpenSSL policy - of rejecting connections to servers with weak certificates. - -- bpo-36782: Add tests for several C API functions in the :mod:`datetime` - module. Patch by Edison Abahurire. - -- bpo-36342: Fix test_multiprocessing in test_venv if platform lacks - functioning sem_open. - -Build ------ - -- bpo-36721: To embed Python into an application, a new ``--embed`` option - must be passed to ``python3-config --libs --embed`` to get ``-lpython3.8`` - (link the application to libpython). To support both 3.8 and older, try - ``python3-config --libs --embed`` first and fallback to ``python3-config - --libs`` (without ``--embed``) if the previous command fails. - - Add a pkg-config ``python-3.8-embed`` module to embed Python into an - application: ``pkg-config python-3.8-embed --libs`` includes - ``-lpython3.8``. To support both 3.8 and older, try ``pkg-config - python-X.Y-embed --libs`` first and fallback to ``pkg-config python-X.Y - --libs`` (without ``--embed``) if the previous command fails (replace - ``X.Y`` with the Python version). - - On the other hand, ``pkg-config python3.8 --libs`` no longer contains - ``-lpython3.8``. C extensions must not be linked to libpython (except on - Android, case handled by the script); this change is backward incompatible - on purpose. - -- bpo-36786: "make install" now runs compileall in parallel. - -Windows -------- - -- bpo-36965: include of STATUS_CONTROL_C_EXIT without depending on MSC - compiler - -- bpo-35926: Update to OpenSSL 1.1.1b for Windows. - -- bpo-29883: Add Windows support for UDP transports for the Proactor Event - Loop. Patch by Adam Meily. - -- bpo-33407: The :c:macro:`Py_DEPRECATED()` macro has been implemented for - MSVC. - -macOS ------ - -- bpo-36231: Support building Python on macOS without /usr/include - installed. As of macOS 10.14, system header files are only available - within an SDK provided by either the Command Line Tools or the Xcode app. - -IDLE ----- - -- bpo-35610: Replace now redundant .context_use_ps1 with .prompt_last_line. - This finishes change started in bpo-31858. - -- bpo-37038: Make idlelib.run runnable; add test clause. - -- bpo-36958: Print any argument other than None or int passed to SystemExit - or sys.exit(). - -- bpo-36807: When saving a file, call os.fsync() so bits are flushed to e.g. - USB drive. - -- bpo-32411: In browser.py, remove extraneous sorting by line number since - dictionary was created in line number order. - -Tools/Demos ------------ - -- bpo-37053: Handle strings like u"bar" correctly in - Tools/parser/unparse.py. Patch by Chih-Hsuan Yen. - -C API ------ - -- bpo-36763: Implement the :pep:`587` "Python Initialization Configuration". - -- bpo-36379: Fix crashes when attempting to use the *modulo* parameter when - ``__ipow__`` is implemented in C. - -- bpo-37107: Update :c:func:`PyObject_CallMethodObjArgs` and - ``_PyObject_CallMethodIdObjArgs`` to use ``_PyObject_GetMethod`` to avoid - creating a bound method object in many cases. Patch by Michael J. - Sullivan. - -- bpo-36974: Implement :pep:`590`: Vectorcall: a fast calling protocol for - CPython. This is a new protocol to optimize calls of custom callable - objects. - -- bpo-36763: ``Py_Main()`` now returns the exitcode rather than calling - ``Py_Exit(exitcode)`` when calling ``PyErr_Print()`` if the current - exception type is ``SystemExit``. - -- bpo-36922: Add new type flag ``Py_TPFLAGS_METHOD_DESCRIPTOR`` for objects - behaving like unbound methods. These are objects supporting the - optimization given by the ``LOAD_METHOD``/``CALL_METHOD`` opcodes. See PEP - 590. - -- bpo-36728: The :c:func:`!PyEval_ReInitThreads` function has been removed - from the C API. It should not be called explicitly: use - :c:func:`PyOS_AfterFork_Child` instead. - - -What's New in Python 3.8.0 alpha 4? -=================================== - -*Release date: 2019-05-06* - -Security --------- - -- bpo-36742: Fixes mishandling of pre-normalization characters in - urlsplit(). - -- bpo-30458: Address :cve:`2019-9740` by disallowing URL paths with embedded - whitespace or control characters through into the underlying http client - request. Such potentially malicious header injection URLs now cause an - http.client.InvalidURL exception to be raised. - -- bpo-35755: :func:`shutil.which` now uses ``os.confstr("CS_PATH")`` if - available and if the :envvar:`PATH` environment variable is not set. - Remove also the current directory from :data:`posixpath.defpath`. On Unix, - :func:`shutil.which` and the :mod:`subprocess` module no longer search the - executable in the current directory if the :envvar:`PATH` environment - variable is not set. - -Core and Builtins ------------------ - -- bpo-36722: In debug build, import now also looks for C extensions compiled - in release mode and for C extensions compiled in the stable ABI. - -- bpo-32849: Fix Python Initialization code on FreeBSD to detect properly - when stdin file descriptor (fd 0) is invalid. - -- bpo-36623: Remove parser headers and related function declarations that - lack implementations after the removal of pgen. - -- bpo-20180: ``dict.pop()`` is now up to 33% faster thanks to Argument - Clinic. Patch by Inada Naoki. - -- bpo-36611: Debug memory allocators: disable serialno field by default from - debug hooks on Python memory allocators to reduce the memory footprint by - 5%. Enable :mod:`tracemalloc` to get the traceback where a memory block - has been allocated when a fatal memory error is logged to decide where to - put a breakpoint. Compile Python with ``PYMEM_DEBUG_SERIALNO`` defined to - get back the field. - -- bpo-36588: On AIX, :data:`sys.platform` doesn't contain the major version - anymore. Always return ``'aix'``, instead of ``'aix3'`` .. ``'aix7'``. - Since older Python versions include the version number, it is recommended - to always use ``sys.platform.startswith('aix')``. Contributed by M. Felt. - -- bpo-36549: Change str.capitalize to use titlecase for the first character - instead of uppercase. - -- bpo-36540: Implement :pep:`570` (Python positional-only parameters). Patch - by Pablo Galindo. - -- bpo-36475: :c:func:`!PyEval_AcquireLock` and - :c:func:`!PyEval_AcquireThread` now terminate the current thread if called - while the interpreter is finalizing, making them consistent with - :c:func:`PyEval_RestoreThread`, :c:func:`Py_END_ALLOW_THREADS`, and - :c:func:`PyGILState_Ensure`. - -- bpo-36504: Fix signed integer overflow in _ctypes.c's - ``PyCArrayType_new()``. - -- bpo-20844: Fix running script with encoding cookie and LF line ending may - fail on Windows. - -- bpo-24214: Fixed support of the surrogatepass error handler in the UTF-8 - incremental decoder. - -- bpo-36452: Changing ``dict`` keys during iteration of the dict itself, - ``keys()``, ``values()``, or ``items()`` will now be detected in certain - corner cases where keys are deleted/added so that the number of keys isn't - changed. A ``RuntimeError`` will be raised after ``len(dict)`` iterations. - Contributed by Thomas Perl. - -- bpo-36459: Fix a possible double ``PyMem_FREE()`` due to tokenizer.c's - ``tok_nextc()``. - -- bpo-36433: Fixed TypeError message in classmethoddescr_call. - -- bpo-36430: Fix a possible reference leak in :func:`itertools.count`. - -- bpo-36440: Include node names in ``ParserError`` messages, instead of - numeric IDs. Patch by A. Skrobov. - -- bpo-36143: Regenerate :mod:`keyword` from the Grammar and Tokens file - using pgen. Patch by Pablo Galindo. - -- bpo-18372: Add missing :c:func:`PyObject_GC_Track` calls in the - :mod:`pickle` module. Patch by Zackery Spytz. - -Library -------- - -- bpo-35952: Fix pythoninfo when the compiler is missing. - -- bpo-28238: The ``.find*()`` methods of xml.etree.ElementTree can now - search for wildcards like ``{*}tag`` and ``{ns}*`` that match a tag in any - namespace or all tags in a namespace. Patch by Stefan Behnel. - -- bpo-26978: ``pathlib.path.link_to()`` is now implemented. It creates a - hard link pointing to a path. - -- bpo-1613500: :class:`fileinput.FileInput` now uses the input file mode to - correctly set the output file mode (previously it was hardcoded to - ``'w'``) when ``inplace=True`` is passed to its constructor. - -- bpo-36734: Fix compilation of ``faulthandler.c`` on HP-UX. Initialize - ``stack_t current_stack`` to zero using ``memset()``. - -- bpo-13611: The xml.etree.ElementTree packages gained support for C14N 2.0 - serialisation. Patch by Stefan Behnel. - -- bpo-36669: Add missing matrix multiplication operator support to - weakref.proxy. - -- bpo-36676: The XMLParser() in xml.etree.ElementTree provides namespace - prefix context to the parser target if it defines the callback methods - "start_ns()" and/or "end_ns()". Patch by Stefan Behnel. - -- bpo-36673: The TreeBuilder and XMLPullParser in xml.etree.ElementTree - gained support for parsing comments and processing instructions. Patch by - Stefan Behnel. - -- bpo-36650: The C version of functools.lru_cache() was treating calls with - an empty ``**kwargs`` dictionary as being distinct from calls with no - keywords at all. This did not result in an incorrect answer, but it did - trigger an unexpected cache miss. - -- bpo-28552: Fix ``distutils.sysconfig`` if :data:`sys.executable` is - ``None`` or an empty string: use :func:`os.getcwd` to initialize - ``project_base``. Fix also the distutils build command: don't use - :data:`sys.executable` if it is ``None`` or an empty string. - -- bpo-35755: :func:`shutil.which` and ``distutils.spawn.find_executable`` - now use ``os.confstr("CS_PATH")`` if available instead of - :data:`os.defpath`, if the ``PATH`` environment variable is not set. - Moreover, don't use ``os.confstr("CS_PATH")`` nor :data:`os.defpath` if - the ``PATH`` environment variable is set to an empty string. - -- bpo-25430: improve performance of ``IPNetwork.__contains__()`` - -- bpo-30485: Path expressions in xml.etree.ElementTree can now avoid - explicit namespace prefixes for tags (or the "{namespace}tag" notation) by - passing a default namespace with an empty string prefix. - -- bpo-36613: Fix :mod:`asyncio` wait() not removing callback if exception - -- bpo-36598: Fix ``isinstance`` check for Mock objects with spec when the - code is executed under tracing. Patch by Karthikeyan Singaravelan. - -- bpo-18748: In development mode (:option:`-X` ``dev``) and in debug build, - the :class:`io.IOBase` destructor now logs ``close()`` exceptions. These - exceptions are silent by default in release mode. - -- bpo-36575: The ``_lsprof`` module now uses internal timer same to - ``time.perf_counter()`` by default. ``gettimeofday(2)`` was used on Unix. - New timer has better resolution on most Unix platforms and timings are no - longer impacted by system clock updates since ``perf_counter()`` is - monotonic. Patch by Inada Naoki. - -- bpo-33461: ``json.loads`` now emits ``DeprecationWarning`` when - ``encoding`` option is specified. Patch by Matthias Bussonnier. - -- bpo-36559: The random module now prefers the lean internal _sha512 module - over hashlib for seed(version=2) to optimize import time. - -- bpo-17561: Set backlog=None as the default for socket.create_server. - -- bpo-34373: Fix :func:`time.mktime` error handling on AIX for year before - 1970. - -- bpo-36232: Improve error message when trying to open existing DBM database - that actually doesn't exist. Patch by Marco Rougeth. - -- bpo-36546: Add statistics.quantiles() - -- bpo-36050: Optimized ``http.client.HTTPResponse.read()`` for large - response. Patch by Inada Naoki. - -- bpo-36522: If *debuglevel* is set to >0 in :mod:`http.client`, print all - values for headers with multiple values for the same header name. Patch by - Matt Houglum. - -- bpo-36492: Deprecated passing required arguments like *func* as keyword - arguments in functions which should accept arbitrary keyword arguments and - pass them to other function. Arbitrary keyword arguments (even with names - "self" and "func") can now be passed to these functions if the required - arguments are passed as positional arguments. - -- bpo-27181: Add statistics.geometric_mean(). - -- bpo-30427: ``os.path.normcase()`` relies on ``os.fspath()`` to check the - type of its argument. Redundant checks have been removed from its - ``posixpath.normcase()`` and ``ntpath.normcase()`` implementations. Patch - by Wolfgang Maier. - -- bpo-36385: Stop rejecting IPv4 octets for being ambiguously octal. Leading - zeros are ignored, and no longer are assumed to specify octal octets. - Octets are always decimal numbers. Octets must still be no more than three - digits, including leading zeroes. - -- bpo-36434: Errors during writing to a ZIP file no longer prevent to - properly close it. - -- bpo-36407: Fixed wrong indentation writing for CDATA section in - xml.dom.minidom. Patch by Vladimir Surjaninov. - -- bpo-36326: inspect.getdoc() can now find docstrings for member objects - when __slots__ is a dictionary. - -- bpo-36366: Calling ``stop()`` on an unstarted or stopped - :func:`unittest.mock.patch` object will now return ``None`` instead of - raising :exc:`RuntimeError`, making the method idempotent. Patch by - Karthikeyan Singaravelan. - -- bpo-36348: The :meth:`imap.IMAP4.logout` method no longer ignores silently - arbitrary exceptions. - -- bpo-31904: Add time module support and fix test_time failures for VxWorks. - -- bpo-36227: Added support for keyword arguments ``default_namespace`` and - ``xml_declaration`` in functions ``ElementTree.tostring()`` and - ``ElementTree.tostringlist()``. - -- bpo-36004: Added new alternate constructors - :meth:`datetime.date.fromisocalendar` and - :meth:`datetime.datetime.fromisocalendar`, which construct date objects - from ISO year, week number and weekday; these are the inverse of each - class's ``isocalendar`` method. Patch by Paul Ganssle. - -- bpo-35936: :mod:`modulefinder` no longer depends on the deprecated - :mod:`imp` module, and the initializer for - :class:`modulefinder.ModuleFinder` now has immutable default arguments. - Patch by Brandt Bucher. - -- bpo-35376: :mod:`modulefinder` correctly handles modules that have the - same name as a bad package. Patch by Brandt Bucher. - -- bpo-17396: :mod:`modulefinder` no longer crashes when encountering syntax - errors in followed imports. Patch by Brandt Bucher. - -- bpo-35934: Added :meth:`~socket.create_server` and - :meth:`~socket.has_dualstack_ipv6` convenience functions to automate the - necessary tasks usually involved when creating a server socket, including - accepting both IPv4 and IPv6 connections on the same socket. (Contributed - by Giampaolo Rodola in :issue:`17561`.) - -- bpo-23078: Add support for :func:`classmethod` and :func:`staticmethod` to - :func:`unittest.mock.create_autospec`. Initial patch by Felipe Ochoa. - -- bpo-35416: Fix potential resource warnings in distutils. Patch by Mickaël - Schoentgen. - -- bpo-25451: Add transparency methods to :class:`tkinter.PhotoImage`. Patch - by Zackery Spytz. - -- bpo-35082: Don't return deleted attributes when calling dir on a - :class:`unittest.mock.Mock`. - -- bpo-34547: :class:`wsgiref.handlers.BaseHandler` now handles abrupt client - connection terminations gracefully. Patch by Petter Strandmark. - -- bpo-31658: :func:`xml.sax.parse` now supports :term:`path-like <path-like - object>`. Patch by Mickaël Schoentgen. - -- bpo-34139: Remove stale unix datagram socket before binding - -- bpo-33530: Implemented Happy Eyeballs in ``asyncio.create_connection()``. - Added two new arguments, *happy_eyeballs_delay* and *interleave*, to - specify Happy Eyeballs behavior. - -- bpo-33291: Do not raise AttributeError when calling the inspect functions - isgeneratorfunction, iscoroutinefunction, isasyncgenfunction on a method - created from an arbitrary callable. Instead, return False. - -- bpo-31310: Fix the multiprocessing.semaphore_tracker so it is reused by - child processes - -- bpo-31292: Fix ``setup.py check --restructuredtext`` for files containing - ``include`` directives. - -Documentation -------------- - -- bpo-36625: Remove obsolete comments from docstrings in fractions.Fraction - -- bpo-30840: Document relative imports - -- bpo-36523: Add docstring for io.IOBase.writelines(). - -- bpo-36425: New documentation translation: `Simplified Chinese - <https://docs.python.org/zh-cn/>`_. - -- bpo-36345: Avoid the duplication of code from ``Tools/scripts/serve.py`` - in using the :rst:dir:`literalinclude` directive for the basic - wsgiref-based web server in the documentation of :mod:`wsgiref`. - Contributed by Stéphane Wirtel. - -- bpo-36345: Using the code of the ``Tools/scripts/serve.py`` script as an - example in the :mod:`wsgiref` documentation. Contributed by Stéphane - Wirtel. - -- bpo-36157: Added documentation for PyInterpreterState_Main(). - -- bpo-33043: Updates the docs.python.org page with the addition of a - 'Contributing to Docs' link at the end of the page (between 'Reporting - Bugs' and 'About Documentation'). Updates the 'Found a Bug' page with - additional links and information in the Documentation Bugs section. - -- bpo-35581: @typing.type_check_only now allows type stubs to mark functions - and classes not available during runtime. - -- bpo-33832: Add glossary entry for 'magic method'. - -- bpo-32913: Added re.Match.groupdict example to regex HOWTO. - -Tests ------ - -- bpo-36719: regrtest now always detects uncollectable objects. Previously, - the check was only enabled by ``--findleaks``. The check now also works - with ``-jN/--multiprocess N``. ``--findleaks`` becomes a deprecated alias - to ``--fail-env-changed``. - -- bpo-36725: When using multiprocessing mode (-jN), regrtest now better - reports errors if a worker process fails, and it exits immediately on a - worker thread failure or when interrupted. - -- bpo-36454: Change test_time.test_monotonic() to test only the lower bound - of elapsed time after a sleep command rather than the upper bound. This - prevents unnecessary test failures on slow buildbots. Patch by Victor - Stinner. - -- bpo-32424: Improve test coverage for xml.etree.ElementTree. Patch by - Gordon P. Hemsley. - -- bpo-32424: Fix typo in test_cyclic_gc() test for xml.etree.ElementTree. - Patch by Gordon P. Hemsley. - -- bpo-36635: Add a new :mod:`!_testinternalcapi` module to test the internal - C API. - -- bpo-36629: Fix ``test_imap4_host_default_value()`` of ``test_imaplib``: - catch also :const:`errno.ENETUNREACH` error. - -- bpo-36611: Fix ``test_sys.test_getallocatedblocks()`` when - :mod:`tracemalloc` is enabled. - -- bpo-36560: Fix reference leak hunting in regrtest: compute also deltas (of - reference count, allocated memory blocks, file descriptor count) during - warmup, to ensure that everything is initialized before starting to hunt - reference leaks. - -- bpo-36565: Fix reference hunting (``python3 -m test -R 3:3``) when Python - has no built-in abc module. - -- bpo-31904: Port test_resource to VxWorks: skip tests cases setting - RLIMIT_FSIZE and RLIMIT_CPU. - -- bpo-31904: Fix test_tabnanny on VxWorks: adjust ENOENT error message. - -- bpo-36436: Fix ``_testcapi.pymem_buffer_overflow()``: handle memory - allocation failure. - -- bpo-31904: Fix test_utf8_mode on VxWorks: Python always use UTF-8 on - VxWorks. - -- bpo-36341: Fix tests that may fail with PermissionError upon calling - bind() on AF_UNIX sockets. - -Build ------ - -- bpo-36747: Remove the stale scriptsinstall Makefile target. - -- bpo-21536: On Unix, C extensions are no longer linked to libpython except - on Android and Cygwin. - - It is now possible for a statically linked Python to load a C extension - built using a shared library Python. - - When Python is embedded, ``libpython`` must not be loaded with - ``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using - ``RTLD_LOCAL``, it was already not possible to load C extensions which - were not linked to ``libpython``, such as C extensions of the standard - library built by the ``*shared*`` section of ``Modules/Setup``. - - distutils, python-config and python-config.py have been modified. - -- bpo-36707: ``./configure --with-pymalloc`` no longer adds the ``m`` flag - to SOABI (sys.implementation.cache_tag). Enabling or disabling pymalloc - has no impact on the ABI. - -- bpo-36635: Change ``PyAPI_FUNC(type)``, ``PyAPI_DATA(type)`` and - ``PyMODINIT_FUNC`` macros of ``pyport.h`` when ``Py_BUILD_CORE_MODULE`` is - defined. The ``Py_BUILD_CORE_MODULE`` define must be now be used to build - a C extension as a dynamic library accessing Python internals: export the - :samp:`PyInit_{xxx}()` function in DLL exports on Windows. - -- bpo-31904: Don't build the ``_crypt`` extension on VxWorks. - -- bpo-36618: Add ``-fmax-type-align=8`` to CFLAGS when clang compiler is - detected. The pymalloc memory allocator aligns memory on 8 bytes. On - x86-64, clang expects alignment on 16 bytes by default and so uses MOVAPS - instruction which can lead to segmentation fault. Instruct clang that - Python is limited to alignment on 8 bytes to use MOVUPS instruction - instead: slower but don't trigger a SIGSEGV if the memory is not aligned - on 16 bytes. Sadly, the flag must be added to ``CFLAGS`` and not just - ``CFLAGS_NODIST``, since third party C extensions can have the same issue. - -- bpo-36605: ``make tags`` and ``make TAGS`` now also parse - ``Modules/_io/*.c`` and ``Modules/_io/*.h``. - -- bpo-36465: Release builds and debug builds are now ABI compatible: - defining the ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` - macro, which introduces the only ABI incompatibility. The - ``Py_TRACE_REFS`` macro, which adds the :func:`sys.getobjects` function - and the :envvar:`PYTHONDUMPREFS` environment variable, can be set using - the new ``./configure --with-trace-refs`` build option. - -- bpo-36577: setup.py now correctly reports missing OpenSSL headers and - libraries again. - -- bpo-36544: Fix regression introduced in bpo-36146 refactoring setup.py - -- bpo-36508: ``python-config --ldflags`` no longer includes flags of the - ``LINKFORSHARED`` variable. The ``LINKFORSHARED`` variable must only be - used to build executables. - -- bpo-36503: Remove references to "aix3" and "aix4". Patch by M. Felt. - -Windows -------- - -- bpo-35920: Added platform.win32_edition() and platform.win32_is_iot(). - Added support for cross-compiling packages for Windows ARM32. Skip tests - that are not expected to work on Windows IoT Core ARM32. - -- bpo-36649: Remove trailing spaces for registry keys when installed via the - Store. - -- bpo-34144: Fixed activate.bat to correctly update codepage when chcp.com - returns dots in output. Patch by Lorenz Mende. - -- bpo-36509: Added preset-iot layout for Windows IoT ARM containers. This - layout doesn't contain UI components like tkinter or IDLE. It also doesn't - contain files to support on-target builds since Windows ARM32 builds must - be cross-compiled when using MSVC. - -- bpo-35941: enum_certificates function of the ssl module now returns - certificates from all available certificate stores inside windows in a - query instead of returning only certificates from the system wide - certificate store. This includes certificates from these certificate - stores: local machine, local machine enterprise, local machine group - policy, current user, current user group policy, services, users. - ssl.enum_crls() function is changed in the same way to return all - certificate revocation lists inside the windows certificate revocation - list stores. - -- bpo-36441: Fixes creating a venv when debug binaries are installed. - -- bpo-36085: Enable better DLL resolution on Windows by using safe DLL - search paths and adding :func:`os.add_dll_directory`. - -- bpo-36010: Add the venv standard library module to the nuget distribution - for Windows. - -- bpo-29515: Add the following socket module constants on Windows: - IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP - IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM - IPPROTO_ICMPV6 IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4 - IPPROTO_IPV6 IPPROTO_L2TP IPPROTO_MAX IPPROTO_ND IPPROTO_NONE IPPROTO_PGM - IPPROTO_PIM IPPROTO_PUP IPPROTO_RDP IPPROTO_ROUTING IPPROTO_SCTP - IPPROTO_ST - -- bpo-35947: Added current version of libffi to cpython-source-deps. Change - _ctypes to use current version of libffi on Windows. - -- bpo-34060: Report system load when running test suite on Windows. Patch by - Ammar Askar. Based on prior work by Jeremy Kloth. - -- bpo-31512: With the Windows 10 Creators Update, non-elevated users can now - create symlinks as long as the computer has Developer Mode enabled. - -macOS ------ - -- bpo-34602: Avoid failures setting macOS stack resource limit with - resource.setrlimit. This reverts an earlier fix for bpo-18075 which forced - a non-default stack size when building the interpreter executable on - macOS. - -IDLE ----- - -- bpo-36429: Fix starting IDLE with pyshell. Add idlelib.pyshell alias at - top; remove pyshell alias at bottom. Remove obsolete __name__=='__main__' - command. - -Tools/Demos ------------ - -- bpo-14546: Fix the argument handling in Tools/scripts/lll.py. - -C API ------ - -- bpo-36763: Fix memory leak in :c:func:`!Py_SetStandardStreamEncoding`: - release memory if the function is called twice. - -- bpo-36641: :c:expr:`PyDoc_VAR(name)` and :c:expr:`PyDoc_STRVAR(name,str)` - now create ``static const char name[]`` instead of ``static char name[]``. - Patch by Inada Naoki. - -- bpo-36389: Change the value of ``CLEANBYTE``, ``DEADDYTE`` and - ``FORBIDDENBYTE`` internal constants used by debug hooks on Python memory - allocators (:c:func:`PyMem_SetupDebugHooks` function). Byte patterns - ``0xCB``, ``0xDB`` and ``0xFB`` have been replaced with ``0xCD``, ``0xDD`` - and ``0xFD`` to use the same values than Windows CRT debug ``malloc()`` - and ``free()``. - -- bpo-36443: Since Python 3.7.0, calling :c:func:`Py_DecodeLocale` before - :c:func:`Py_Initialize` produces mojibake if the ``LC_CTYPE`` locale is - coerced and/or if the UTF-8 Mode is enabled by the user configuration. The - LC_CTYPE coercion and UTF-8 Mode are now disabled by default to fix the - mojibake issue. They must now be enabled explicitly (opt-in) using the new - :c:func:`!_Py_PreInitialize` API with ``_PyPreConfig``. - -- bpo-36025: Fixed an accidental change to the datetime C API where the - arguments to the :c:func:`PyDate_FromTimestamp` function were incorrectly - interpreted as a single timestamp rather than an arguments tuple, which - causes existing code to start raising :exc:`TypeError`. The - backwards-incompatible change was only present in alpha releases of Python - 3.8. Patch by Paul Ganssle. - -- bpo-35810: Modify ``PyObject_Init`` to correctly increase the refcount of - heap-allocated Type objects. Also fix the refcounts of the heap-allocated - types that were either doing this manually or not decreasing the type's - refcount in tp_dealloc - - -What's New in Python 3.8.0 alpha 3? -=================================== - -*Release date: 2019-03-25* - -Security --------- - -- bpo-36216: Changes urlsplit() to raise ValueError when the URL contains - characters that decompose under IDNA encoding (NFKC-normalization) into - characters that affect how the URL is parsed. - -- bpo-35121: Don't send cookies of domain A without Domain attribute to - domain B when domain A is a suffix match of domain B while using a - cookiejar with :class:`http.cookiejar.DefaultCookiePolicy` policy. Patch - by Karthikeyan Singaravelan. - -Core and Builtins ------------------ - -- bpo-36421: Fix a possible double decref in _ctypes.c's - ``PyCArrayType_new()``. - -- bpo-36412: Fix a possible crash when creating a new dictionary. - -- bpo-36398: Fix a possible crash in ``structseq_repr()``. - -- bpo-36256: Fix bug in parsermodule when parsing a state in a DFA that has - two or more arcs with labels of the same type. Patch by Pablo Galindo. - -- bpo-36365: repr(structseq) is no longer limited to 512 bytes. - -- bpo-36374: Fix a possible null pointer dereference in - ``merge_consts_recursive()``. Patch by Zackery Spytz. - -- bpo-36236: At Python initialization, the current directory is no longer - prepended to :data:`sys.path` if it has been removed. - -- bpo-36352: Python initialization now fails with an error, rather than - silently truncating paths, if a path is too long. - -- bpo-36301: Python initialization now fails if decoding ``pybuilddir.txt`` - configuration file fails at startup. - -- bpo-36333: Fix leak in _PyRuntimeState_Fini. Contributed by Stéphane - Wirtel. - -- bpo-36332: The builtin :func:`compile` can now handle AST objects that - contain assignment expressions. Patch by Pablo Galindo. - -- bpo-36282: Improved error message for too much positional arguments in - some builtin functions. - -- bpo-30040: New empty dict uses fewer memory for now. It used more memory - than empty dict created by ``dict.clear()``. And empty dict creation and - deletion is about 2x faster. Patch by Inada Naoki. - -- bpo-36262: Fix an unlikely memory leak on conversion from string to float - in the function ``_Py_dg_strtod()`` used by ``float(str)``, - ``complex(str)``, :func:`pickle.load`, :func:`marshal.load`, etc. - -- bpo-36252: Update Unicode databases to version 12.0.0. - -- bpo-36218: Fix a segfault occurring when sorting a list of heterogeneous - values. Patch contributed by Rémi Lapeyre and Elliot Gorokhovsky. - -- bpo-36188: Cleaned up left-over vestiges of Python 2 unbound method - handling in method objects and documentation. Patch by Martijn Pieters - -- bpo-36124: Add a new interpreter-specific dict and expose it in the C-API - via PyInterpreterState_GetDict(). This parallels PyThreadState_GetDict(). - However, extension modules should continue using PyModule_GetState() for - their own internal per-interpreter state. - -- bpo-35975: Add a ``feature_version`` flag to ``ast.parse()`` (documented) - and ``compile()`` (hidden) that allows tweaking the parser to support - older versions of the grammar. In particular, if ``feature_version`` is 5 - or 6, the hacks for the ``async`` and ``await`` keyword from PEP 492 are - reinstated. (For 7 or higher, these are unconditionally treated as - keywords, but they are still special tokens rather than ``NAME`` tokens - that the parser driver recognizes.) - -- bpo-31904: Use UTF-8 as the system encoding on VxWorks. - -- bpo-36048: The :meth:`~object.__index__` special method will be used - instead of :meth:`~object.__int__` for implicit conversion of Python - numbers to C integers. Using the ``__int__()`` method in implicit - conversions has been deprecated. - -- bpo-35808: Retire pgen and use a modified version of pgen2 to generate the - parser. Patch by Pablo Galindo. - -Library -------- - -- bpo-36401: The class documentation created by pydoc now has a separate - section for readonly properties. - -- bpo-36320: The typing.NamedTuple() class has deprecated the _field_types - attribute in favor of the __annotations__ attribute which carried the same - information. Also, both attributes were converted from OrderedDict to a - regular dict. - -- bpo-34745: Fix :mod:`asyncio` ssl memory issues caused by circular - references - -- bpo-36324: Add method to statistics.NormalDist for computing the inverse - cumulative normal distribution. - -- bpo-36321: collections.namedtuple() misspelled the name of an attribute. - To be consistent with typing.NamedTuple, the attribute name should have - been "_field_defaults" instead of "_fields_defaults". For backwards - compatibility, both spellings are now created. The misspelled version may - be removed in the future. - -- bpo-36297: "unicode_internal" codec is removed. It was deprecated since - Python 3.3. Patch by Inada Naoki. - -- bpo-36298: Raise ModuleNotFoundError in pyclbr when a module can't be - found. Thanks to 'mental' for the bug report. - -- bpo-36268: Switch the default format used for writing tars with - :mod:`tarfile` to the modern POSIX.1-2001 pax standard, from the - vendor-specific GNU. Contributed by C.A.M. Gerlach. - -- bpo-36285: Fix integer overflows in the array module. Patch by Stephan - Hohe. - -- bpo-31904: Add _signal module support for VxWorks. - -- bpo-36272: :mod:`logging` does not silently ignore RecursionError anymore. - Patch contributed by Rémi Lapeyre. - -- bpo-36280: Add a kind field to ast.Constant. It is 'u' if the literal has - a 'u' prefix (i.e. a Python 2 style unicode literal), else None. - -- bpo-35931: The :mod:`pdb` ``debug`` command now gracefully handles all - exceptions. - -- bpo-36251: Fix format strings used for stderrprinter and re.Match reprs. - Patch by Stephan Hohe. - -- bpo-36235: Fix ``CFLAGS`` in ``customize_compiler()`` of - ``distutils.sysconfig``: when the ``CFLAGS`` environment variable is - defined, don't override ``CFLAGS`` variable with the ``OPT`` variable - anymore. Initial patch written by David Malcolm. - -- bpo-35807: Update ensurepip to install pip 19.0.3 and setuptools 40.8.0. - -- bpo-36139: Release GIL when closing :class:`~mmap.mmap` objects. - -- bpo-36179: Fix two unlikely reference leaks in _hashopenssl. The leaks - only occur in out-of-memory cases. - -- bpo-36169: Add overlap() method to statistics.NormalDist. Computes the - overlapping coefficient for two normal distributions. - -- bpo-36103: Default buffer size used by ``shutil.copyfileobj()`` is changed - from 16 KiB to 64 KiB on non-Windows platform to reduce system call - overhead. Contributed by Inada Naoki. - -- bpo-36130: Fix ``pdb`` with ``skip=...`` when stepping into a frame - without a ``__name__`` global. Patch by Anthony Sottile. - -- bpo-35652: shutil.copytree(copy_function=...) erroneously pass DirEntry - instead of a path string. - -- bpo-35178: Ensure custom :func:`warnings.formatwarning` function can - receive ``line`` as positional argument. Based on patch by Tashrif Billah. - -- bpo-36106: Resolve potential name clash with libm's sinpi(). Patch by - Dmitrii Pasechnik. - -- bpo-36091: Clean up reference to async generator in Lib/types. Patch by - Henry Chen. - -- bpo-36043: :class:`FileCookieJar` supports :term:`path-like object`. - Contributed by Stéphane Wirtel - -- bpo-35899: Enum has been fixed to correctly handle empty strings and - strings with non-Latin characters (ie. 'α', 'א') without crashing. - Original patch contributed by Maxwell. Assisted by Stéphane Wirtel. - -- bpo-21269: Add ``args`` and ``kwargs`` properties to mock call objects. - Contributed by Kumar Akshay. - -- bpo-30670: ``pprint.pp`` has been added to pretty-print objects with - dictionary keys being sorted with their insertion order by default. - Parameter *sort_dicts* has been added to ``pprint.pprint``, - ``pprint.pformat`` and ``pprint.PrettyPrinter``. Contributed by Rémi - Lapeyre. - -- bpo-35843: Implement ``__getitem__`` for ``_NamespacePath``. Patch by - Anthony Sottile. - -- bpo-35802: Clean up code which checked presence of ``os.stat`` / - ``os.lstat`` / ``os.chmod`` which are always present. Patch by Anthony - Sottile. - -- bpo-35715: Librates the return value of a ProcessPoolExecutor - _process_worker after it's no longer needed to free memory - -- bpo-35493: Use :func:`multiprocessing.connection.wait` instead of polling - each 0.2 seconds for worker updates in :class:`multiprocessing.Pool`. - Patch by Pablo Galindo. - -- bpo-35661: Store the venv prompt in pyvenv.cfg. - -- bpo-35121: Don't set cookie for a request when the request path is a - prefix match of the cookie's path attribute but doesn't end with "/". - Patch by Karthikeyan Singaravelan. - -- bpo-21478: Calls to a child function created with - :func:`unittest.mock.create_autospec` should propagate to the parent. - Patch by Karthikeyan Singaravelan. - -- bpo-35198: Fix C++ extension compilation on AIX - -Documentation -------------- - -- bpo-36329: Declare the path of the Python binary for the usage of - ``Tools/scripts/serve.py`` when executing ``make -C Doc/ serve``. - Contributed by Stéphane Wirtel - -- bpo-36138: Improve documentation about converting datetime.timedelta to - scalars. - -- bpo-21314: A new entry was added to the Core Language Section of the - Programming FAQ, which explaines the usage of slash(/) in the signature of - a function. Patch by Lysandros Nikolaou - -Tests ------ - -- bpo-36234: test_posix.PosixUidGidTests: add tests for invalid uid/gid type - (str). Initial patch written by David Malcolm. - -- bpo-29571: Fix ``test_re.test_locale_flag()``: use - ``locale.getpreferredencoding()`` rather than ``locale.getlocale()`` to - get the locale encoding. With some locales, ``locale.getlocale()`` returns - the wrong encoding. - -- bpo-36123: Fix race condition in test_socket. - -Build ------ - -- bpo-36356: Fix leaks that led to build failure when configured with - address sanitizer. - -- bpo-36146: Add ``TEST_EXTENSIONS`` constant to ``setup.py`` to allow to - not build test extensions like ``_testcapi``. - -- bpo-36146: Fix setup.py on macOS: only add ``/usr/include/ffi`` to include - directories of _ctypes, not for all extensions. - -- bpo-31904: Enable build system to cross-build for VxWorks RTOS. - -Windows -------- - -- bpo-36312: Fixed decoders for the following code pages: 50220, 50221, - 50222, 50225, 50227, 50229, 57002 through 57011, 65000 and 42. - -- bpo-36264: Don't honor POSIX ``HOME`` in ``os.path.expanduser`` on - windows. Patch by Anthony Sottile. - -- bpo-24643: Fix name collisions due to ``#define timezone _timezone`` in - PC/pyconfig.h. - -IDLE ----- - -- bpo-36405: Use dict unpacking in idlelib. - -- bpo-36396: Remove fgBg param of idlelib.config.GetHighlight(). This param - was only used twice and changed the return type. - -- bpo-36176: Fix IDLE autocomplete & calltip popup colors. Prevent conflicts - with Linux dark themes (and slightly darken calltip background). - -- bpo-23205: For the grep module, add tests for findfiles, refactor - findfiles to be a module-level function, and refactor findfiles to use - os.walk. - -- bpo-23216: Add docstrings to IDLE search modules. - -- bpo-36152: Remove colorizer.ColorDelegator.close_when_done and the - corresponding argument of .close(). In IDLE, both have always been None - or False since 2007. - -- bpo-32129: Avoid blurry IDLE application icon on macOS with Tk 8.6. Patch - by Kevin Walzer. - -- bpo-36096: Refactor class variables to instance variables in colorizer. - -- bpo-30348: Increase test coverage of idlelib.autocomplete by 30%. Patch by - Louie Lu - -Tools/Demos ------------ - -- bpo-35132: Fix py-list and py-bt commands of python-gdb.py on gdb7. - -- bpo-32217: Fix freeze script on Windows. - -C API ------ - -- bpo-36381: Raise ``DeprecationWarning`` when '#' formats are used for - building or parsing values without ``PY_SSIZE_T_CLEAN``. - -- bpo-36142: The whole coreconfig.h header is now excluded from - Py_LIMITED_API. Move functions definitions into a new internal - pycore_coreconfig.h header. - - -What's New in Python 3.8.0 alpha 2? -=================================== - -*Release date: 2019-02-25* - -Core and Builtins ------------------ - -- bpo-36052: Raise a :exc:`SyntaxError` when assigning a value to - ``__debug__`` with the Assignment Operator. Contributed by Stéphane Wirtel - and Pablo Galindo. - -- bpo-36012: Doubled the speed of class variable writes. When a non-dunder - attribute was updated, there was an unnecessary call to update slots. - -- bpo-35942: The error message emitted when returning invalid types from - ``__fspath__`` in interfaces that allow passing :class:`~os.PathLike` - objects has been improved and now it does explain the origin of the error. - -- bpo-36016: ``gc.get_objects`` can now receive an optional parameter - indicating a generation to get objects from. Patch by Pablo Galindo. - -- bpo-1054041: When the main interpreter exits due to an uncaught - KeyboardInterrupt, the process now exits in the appropriate manner for its - parent process to detect that a SIGINT or ^C terminated the process. This - allows shells and batch scripts to understand that the user has asked them - to stop. - -- bpo-35992: Fix ``__class_getitem__()`` not being called on a class with a - custom non-subscriptable metaclass. - -- bpo-35993: Fix a crash on fork when using subinterpreters. Contributed by - Stéphane Wirtel - -- bpo-35991: Fix a potential double free in Modules/_randommodule.c. - -- bpo-35961: Fix a crash in slice_richcompare(): use strong references - rather than stolen references for the two temporary internal tuples. - -- bpo-35911: Enable the creation of cell objects by adding a - ``cell.__new__`` method, and expose the type ``cell`` in ``Lib/types.py`` - under the name CellType. Patch by Pierre Glaser. - -- bpo-12822: Use monotonic clock for ``pthread_cond_timedwait`` when - ``pthread_condattr_setclock`` and ``CLOCK_MONOTONIC`` are available. - -- bpo-15248: The compiler emits now syntax warnings in the case when a comma - is likely missed before tuple or list. - -- bpo-35886: The implementation of PyInterpreterState has been moved into - the internal header files (guarded by Py_BUILD_CORE). - -- bpo-31506: Clarify the errors reported when ``object.__new__`` and - ``object.__init__`` receive more than one argument. Contributed by Sanyam - Khurana. - -- bpo-35724: Signal-handling is now guaranteed to happen relative to the - main interpreter. - -- bpo-33608: We added a new internal _Py_AddPendingCall() that operates - relative to the provided interpreter. This allows us to use the existing - implementation to ask another interpreter to do work that cannot be done - in the current interpreter, like decref an object the other interpreter - owns. The existing Py_AddPendingCall() only operates relative to the main - interpreter. - -- bpo-33989: Fix a possible crash in :meth:`list.sort` when sorting objects - with ``ob_type->tp_richcompare == NULL``. Patch by Zackery Spytz. - -Library -------- - -- bpo-35512: :func:`unittest.mock.patch.dict` used as a decorator with - string target resolves the target during function call instead of during - decorator construction. Patch by Karthikeyan Singaravelan. - -- bpo-36018: Add statistics.NormalDist, a tool for creating and manipulating - normal distributions of random variable. Features a composite class that - treats the mean and standard deviation of measurement data as single - entity. - -- bpo-35904: Added statistics.fmean() as a faster, floating-point variant of - the existing mean() function. - -- bpo-35918: Removed broken ``has_key`` method from - multiprocessing.managers.SyncManager.dict. Contributed by Rémi Lapeyre. - -- bpo-18283: Add support for bytes to :func:`shutil.which`. - -- bpo-35960: Fix :func:`dataclasses.field` throwing away empty mapping - objects passed as metadata. - -- bpo-35500: Write expected and actual call parameters on separate lines in - :meth:`unittest.mock.Mock.assert_called_with` assertion errors. - Contributed by Susan Su. - -- bpo-35931: The :mod:`pdb` ``debug`` command now gracefully handles syntax - errors. - -- bpo-24209: In http.server script, rely on getaddrinfo to bind to preferred - address based on the bind parameter. Now default bind or binding to a name - may bind to IPv6 or dual-stack, depending on the environment. - -- bpo-35321: Set ``__spec__.origin`` of ``_frozen_importlib`` to frozen so - that it matches the behavior of ``_frozen_importlib_external``. Patch by - Nina Zakharenko. - -- bpo-35378: Fix a reference issue inside :class:`multiprocessing.Pool` that - caused the pool to remain alive if it was deleted without being closed or - terminated explicitly. A new strong reference is added to the pool - iterators to link the lifetime of the pool to the lifetime of its - iterators so the pool does not get destroyed if a pool iterator is still - alive. - -- bpo-34294: re module, fix wrong capturing groups in rare cases. - :func:`re.search`, :func:`re.findall`, :func:`re.sub` and other functions - that scan through string looking for a match, should reset capturing - groups between two match attempts. Patch by Ma Lin. - -- bpo-35615: :mod:`weakref`: Fix a RuntimeError when copying a - WeakKeyDictionary or a WeakValueDictionary, due to some keys or values - disappearing while iterating. - -- bpo-35606: Implement :func:`math.prod` as analogous function to - :func:`sum` that returns the product of a 'start' value (default: 1) times - an iterable of numbers. Patch by Pablo Galindo. - -- bpo-32417: Performing arithmetic between :class:`datetime.datetime` - subclasses and :class:`datetime.timedelta` now returns an object of the - same type as the :class:`datetime.datetime` subclass. As a result, - :meth:`datetime.datetime.astimezone` and alternate constructors like - :meth:`datetime.datetime.now` and :meth:`datetime.fromtimestamp` called - with a ``tz`` argument now *also* retain their subclass. - -- bpo-35153: Add *headers* optional keyword-only parameter to - :class:`xmlrpc.client.ServerProxy`, :class:`xmlrpc.client.Transport` and - :class:`xmlrpc.client.SafeTransport`. Patch by Cédric Krier. - -- bpo-34572: Fix C implementation of pickle.loads to use importlib's locking - mechanisms, and thereby avoid using partially loaded modules. Patch by Tim - Burgess. - -Documentation -------------- - -- bpo-36083: Fix formatting of --check-hash-based-pycs options in the - manpage Synopsis. - -- bpo-36007: Bump minimum sphinx version to 1.8. Patch by Anthony Sottile. - -- bpo-22062: Update documentation and docstrings for pathlib. Original patch - by Mike Short. - -Tests ------ - -- bpo-27313: Avoid test_ttk_guionly ComboboxTest failure with macOS Cocoa - Tk. - -- bpo-36019: Add test.support.TEST_HTTP_URL and replace references of - http://www.example.com by this new constant. Contributed by Stéphane - Wirtel. - -- bpo-36037: Fix test_ssl for strict OpenSSL configuration like RHEL8 strict - crypto policy. Use older TLS version for minimum TLS version of the server - SSL context if needed, to test TLS version older than default minimum TLS - version. - -- bpo-35798: Added :func:`test.support.check_syntax_warning`. - -- bpo-35505: Make test_imap4_host_default_value independent on whether the - local IMAP server is running. - -- bpo-35917: multiprocessing: provide unit tests for SyncManager and - SharedMemoryManager classes + all the shareable types which are supposed - to be supported by them. (patch by Giampaolo Rodola) - -- bpo-35704: Skip ``test_shutil.test_unpack_archive_xztar`` to prevent a - MemoryError on 32-bit AIX when MAXDATA setting is less than 0x20000000. - - Patch by Michael Felt (aixtools) - -- bpo-34720: Assert m_state != NULL to mimic GC traversal functions that do - not correctly handle module creation when the module state has not been - created. - -Windows -------- - -- bpo-35976: Added ARM build support to Windows build files in PCBuild. - -- bpo-35692: ``pathlib`` no longer raises when checking file and directory - existence on drives that are not ready - -- bpo-35872: Uses the base Python executable when invoking venv in a virtual - environment - -- bpo-35873: Prevents venv paths being inherited by child processes - -- bpo-35299: Fix sysconfig detection of the source directory and distutils - handling of pyconfig.h during PGO profiling - -IDLE ----- - -- bpo-24310: IDLE -- Document settings dialog font tab sample. - -- bpo-35833: Revise IDLE doc for control codes sent to Shell. Add a code - example block. - -- bpo-35689: Add docstrings and unittests for colorizer.py. - - -What's New in Python 3.8.0 alpha 1? -=================================== - -*Release date: 2019-02-03* - -Security --------- - -- bpo-35746: :cve:`2019-5010`: Fix a NULL pointer deref in ssl module. The - cert parser did not handle CRL distribution points with empty DP or URI - correctly. A malicious or buggy certificate can result into segfault. - Vulnerability (TALOS-2018-0758) reported by Colin Read and Nicolas Edet of - Cisco. - -- bpo-34812: The :option:`-I` command line option (run Python in isolated - mode) is now also copied by the :mod:`multiprocessing` and ``distutils`` - modules when spawning child processes. Previously, only :option:`-E` and - :option:`-s` options (enabled by :option:`-I`) were copied. - -- bpo-34791: The xml.sax and xml.dom.domreg no longer use environment - variables to override parser implementations when - sys.flags.ignore_environment is set by -E or -I arguments. - -- bpo-17239: The xml.sax and xml.dom.minidom parsers no longer processes - external entities by default. External DTD and ENTITY declarations no - longer load files or create network connections. - -- bpo-34623: :cve:`2018-14647`: The C accelerated _elementtree module now - initializes hash randomization salt from _Py_HashSecret instead of - libexpat's default CSPRNG. - -- bpo-34405: Updated to OpenSSL 1.1.0i for Windows builds. - -- bpo-33871: Fixed sending the part of the file in :func:`os.sendfile` on - macOS. Using the *trailers* argument could cause sending more bytes from - the input file than was specified. - -- bpo-32533: Fixed thread-safety of error handling in _ssl. - -- bpo-33136: Harden ssl module against LibreSSL :cve:`2018-8970`. - X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new - test ensures that NULL bytes are not allowed. - -- bpo-33001: Minimal fix to prevent buffer overrun in os.symlink on Windows - -- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic - backtracking. These regexes formed potential DOS vectors (REDOS). They - have been refactored. This resolves :cve:`2018-1060` and :cve:`2018-1061`. - Patch by Jamie Davis. - -- bpo-28414: The ssl module now allows users to perform their own IDN - en/decoding when using SNI. - -Core and Builtins ------------------ - -- bpo-35877: Make parenthesis optional for named expressions in while - statement. Patch by Karthikeyan Singaravelan. - -- bpo-35814: Allow same right hand side expressions in annotated assignments - as in normal ones. In particular, ``x: Tuple[int, int] = 1, 2`` (without - parentheses on the right) is now allowed. - -- bpo-35766: Add the option to parse PEP 484 type comments in the ast - module. (Off by default.) This is merging the key functionality of the - third party fork thereof, - [typed_ast](https://github.com/python/typed_ast). - -- bpo-35713: Reorganize Python initialization to get working exceptions and - sys.stderr earlier. - -- bpo-33416: Add end line and end column position information to the Python - AST nodes. This is a C-level backwards incompatible change. - -- bpo-35720: Fixed a minor memory leak in pymain_parse_cmdline_impl function - in Modules/main.c - -- bpo-35634: ``func(**kwargs)`` will now raise an error when ``kwargs`` is a - mapping containing multiple entries with the same key. An error was - already raised when other keyword arguments are passed before ``**kwargs`` - since Python 3.6. - -- bpo-35623: Fix a crash when sorting very long lists. Patch by Stephan - Hohe. - -- bpo-35214: clang Memory Sanitizer build instrumentation was added to work - around false positives from posix, socket, time, test_io, and - test_faulthandler. - -- bpo-35560: Fix an assertion error in :func:`format` in debug build for - floating-point formatting with "n" format, zero padding and small width. - Release build is not impacted. Patch by Karthikeyan Singaravelan. - -- bpo-35552: Format characters ``%s`` and ``%V`` in - :c:func:`PyUnicode_FromFormat` and ``%s`` in :c:func:`PyBytes_FromFormat` - no longer read memory past the limit if *precision* is specified. - -- bpo-35504: Fix segfaults and :exc:`SystemError`\ s when deleting certain - attributes. Patch by Zackery Spytz. - -- bpo-35504: Fixed a SystemError when delete the characters_written - attribute of an OSError. - -- bpo-35494: Improved syntax error messages for unbalanced parentheses in - f-string. - -- bpo-35444: Fixed error handling in pickling methods when fail to look up - builtin "getattr". Sped up pickling iterators. - -- bpo-35436: Fix various issues with memory allocation error handling. - Patch by Zackery Spytz. - -- bpo-35423: Separate the signal handling trigger in the eval loop from the - "pending calls" machinery. There is no semantic change and the difference - in performance is insignificant. - -- bpo-35357: Internal attributes' names of unittest.mock._Call and - unittest.mock.MagicProxy (name, parent & from_kall) are now prefixed with - _mock_ in order to prevent clashes with widely used object attributes. - Fixed minor typo in test function name. - -- bpo-35372: Fixed the code page decoder for input longer than 2 GiB - containing undecodable bytes. - -- bpo-35336: Fix PYTHONCOERCECLOCALE=1 environment variable: only coerce the - C locale if the LC_CTYPE locale is "C". - -- bpo-31241: The *lineno* and *col_offset* attributes of AST nodes for list - comprehensions, generator expressions and tuples are now point to the - opening parenthesis or square brace. For tuples without parenthesis they - point to the position of the first item. - -- bpo-33954: For :meth:`str.format`, :meth:`float.__format__` and - :meth:`complex.__format__` methods for non-ASCII decimal point when using - the "n" formatter. - -- bpo-35269: Fix a possible segfault involving a newly created coroutine. - Patch by Zackery Spytz. - -- bpo-35224: Implement :pep:`572` (assignment expressions). Patch by Emily - Morehouse. - -- bpo-32492: Speed up :func:`namedtuple` attribute access by 1.6x using a C - fast-path for the name descriptors. Patch by Pablo Galindo. - -- bpo-35214: Fixed an out of bounds memory access when parsing a truncated - unicode escape sequence at the end of a string such as ``'\N'``. It would - read one byte beyond the end of the memory allocation. - -- bpo-35214: The interpreter and extension modules have had annotations - added so that they work properly under clang's Memory Sanitizer. A new - configure flag --with-memory-sanitizer has been added to make test builds - of this nature easier to perform. - -- bpo-35193: Fix an off by one error in the bytecode peephole optimizer - where it could read bytes beyond the end of bounds of an array when - removing unreachable code. This bug was present in every release of Python - 3.6 and 3.7 until now. - -- bpo-35169: Improved error messages for forbidden assignments. - -- bpo-34022: Fix handling of hash-based bytecode files in :mod:`zipimport`. - Patch by Elvis Pranskevichus. - -- bpo-28401: Debug builds will no longer to attempt to import extension - modules built for the ABI as they were never compatible to begin with. - Patch by Stefano Rivera. - -- bpo-29341: Clarify in the docstrings of :mod:`os` methods that path-like - objects are also accepted as input parameters. - -- bpo-35050: :mod:`socket`: Fix off-by-one bug in length check for - ``AF_ALG`` name and type. - -- bpo-29743: Raise :exc:`ValueError` instead of :exc:`OverflowError` in case - of a negative ``_length_`` in a :class:`ctypes.Array` subclass. Also - raise :exc:`TypeError` instead of :exc:`AttributeError` for non-integer - ``_length_``. Original patch by Oren Milman. - -- bpo-16806: Fix ``lineno`` and ``col_offset`` for multi-line string tokens. - -- bpo-35029: :exc:`SyntaxWarning` raised as an exception at code generation - time will be now replaced with a :exc:`SyntaxError` for better error - reporting. - -- bpo-34983: Expose :meth:`symtable.Symbol.is_nonlocal` in the symtable - module. Patch by Pablo Galindo. - -- bpo-34974: :class:`bytes` and :class:`bytearray` constructors no longer - convert unexpected exceptions (e.g. :exc:`MemoryError` and - :exc:`KeyboardInterrupt`) to :exc:`TypeError`. - -- bpo-34939: Allow annotated names in module namespace that are declared - global before the annotation happens. Patch by Pablo Galindo. - -- bpo-34973: Fixed crash in :func:`bytes` when the :class:`list` argument is - mutated while it is iterated. - -- bpo-34876: The *lineno* and *col_offset* attributes of the AST for - decorated function and class refer now to the position of the - corresponding ``def``, ``async def`` and ``class`` instead of the position - of the first decorator. This leads to more correct line reporting in - tracing. This is the only case when the position of child AST nodes can - precede the position of the parent AST node. - -- bpo-34879: Fix a possible null pointer dereference in bytesobject.c. - Patch by Zackery Spytz. - -- bpo-34784: Fix the implementation of PyStructSequence_NewType in order to - create heap allocated StructSequences. - -- bpo-32912: A :exc:`SyntaxWarning` is now emitted instead of a - :exc:`DeprecationWarning` for invalid escape sequences in string and bytes - literals. - -- bpo-34854: Fixed a crash in compiling string annotations containing a - lambda with a keyword-only argument that doesn't have a default value. - -- bpo-34850: The compiler now produces a :exc:`SyntaxWarning` when identity - checks (``is`` and ``is not``) are used with certain types of literals - (e.g. strings, ints). These can often work by accident in CPython, but - are not guaranteed by the language spec. The warning advises users to use - equality tests (``==`` and ``!=``) instead. - -- bpo-34824: Fix a possible null pointer dereference in Modules/_ssl.c. - Patch by Zackery Spytz. - -- bpo-30156: The C function ``property_descr_get()`` uses a "cached" tuple - to optimize function calls. But this tuple can be discovered in debug mode - with :func:`sys.getobjects`. Remove the optimization, it's not really - worth it and it causes 3 different crashes last years. - -- bpo-34762: Fix contextvars C API to use PyObject* pointer types. - -- bpo-34751: The hash function for tuples is now based on xxHash which gives - better collision results on (formerly) pathological cases. Additionally, - on 64-bit systems it improves tuple hashes in general. Patch by Jeroen - Demeyer with substantial contributions by Tim Peters. - -- bpo-34735: Fix a memory leak in Modules/timemodule.c. Patch by Zackery - Spytz. - -- bpo-34683: Fixed a bug where some SyntaxError error pointed to locations - that were off-by-one. - -- bpo-34651: Only allow the main interpreter to fork. The avoids the - possibility of affecting the main interpreter, which is critical to - operation of the runtime. - -- bpo-34653: Remove unused function PyParser_SimpleParseStringFilename. - -- bpo-32236: Warn that line buffering is not supported if :func:`open` is - called with binary mode and ``buffering=1``. - -- bpo-34641: Further restrict the syntax of the left-hand side of keyword - arguments in function calls. In particular, ``f((keyword)=arg)`` is now - disallowed. - -- bpo-34637: Make the *start* argument to *sum()* visible as a keyword - argument. - -- bpo-1621: Do not assume signed integer overflow behavior (C undefined - behavior) when performing set hash table resizing. - -- bpo-34588: Fix an off-by-one in the recursive call pruning feature of - traceback formatting. - -- bpo-34485: On Windows, the LC_CTYPE is now set to the user preferred - locale at startup. Previously, the LC_CTYPE locale was "C" at startup, but - changed when calling setlocale(LC_CTYPE, "") or setlocale(LC_ALL, ""). - -- bpo-34485: Standard streams like sys.stdout now use the "surrogateescape" - error handler, instead of "strict", on the POSIX locale (when the C locale - is not coerced and the UTF-8 Mode is disabled). - -- bpo-34485: Fix the error handler of standard streams like sys.stdout: - PYTHONIOENCODING=":" is now ignored instead of setting the error handler - to "strict". - -- bpo-34485: Python now gets the locale encoding with C code to initialize - the encoding of standard streams like sys.stdout. Moreover, the encoding - is now initialized to the Python codec name to get a normalized encoding - name and to ensure that the codec is loaded. The change avoids importing - _bootlocale and _locale modules at startup by default. - -- bpo-34527: On FreeBSD, Py_DecodeLocale() and Py_EncodeLocale() now also - forces the ASCII encoding if the LC_CTYPE locale is "POSIX", not only if - the LC_CTYPE locale is "C". - -- bpo-34527: The UTF-8 Mode is now also enabled by the "POSIX" locale, not - only by the "C" locale. - -- bpo-34403: On HP-UX with C or POSIX locale, sys.getfilesystemencoding() - now returns "ascii" instead of "roman8" (when the UTF-8 Mode is disabled - and the C locale is not coerced). - -- bpo-34523: The Python filesystem encoding is now read earlier during the - Python initialization. - -- bpo-12458: Tracebacks show now correct line number for subexpressions in - multiline expressions. Tracebacks show now the line number of the first - line for multiline expressions instead of the line number of the last - subexpression. - -- bpo-34408: Prevent a null pointer dereference and resource leakage in - ``PyInterpreterState_New()``. - -- bpo-34400: Fix undefined behavior in parsetok.c. Patch by Zackery Spytz. - -- bpo-33073: Added as_integer_ratio to ints to make them more interoperable - with floats. - -- bpo-34377: Update valgrind suppression list to use - ``_PyObject_Free``/``_PyObject_Realloc`` instead of - ``PyObject_Free``/``PyObject_Realloc``. - -- bpo-34353: Added the "socket" option in the ``stat.filemode()`` Python - implementation to match the C implementation. - -- bpo-34320: Fix ``dict(od)`` didn't copy iteration order of OrderedDict. - -- bpo-34113: Fixed crash on debug builds when opcode stack was adjusted with - negative numbers. Patch by Constantin Petrisor. - -- bpo-34100: Compiler now merges constants in tuples and frozensets - recursively. Code attributes like ``co_names`` are merged too. - -- bpo-34151: Performance of list concatenation, repetition and slicing - operations is slightly improved. Patch by Sergey Fedoseev. - -- bpo-34170: -X dev: it is now possible to override the memory allocator - using PYTHONMALLOC even if the developer mode is enabled. - -- bpo-33237: Improved :exc:`AttributeError` message for partially - initialized module. - -- bpo-34149: Fix min and max functions to get default behavior when key is - None. - -- bpo-34125: Profiling of unbound built-in methods now works when - ``**kwargs`` is given. - -- bpo-34141: Optimized pickling atomic types (None, bool, int, float, bytes, - str). - -- bpo-34126: Fix crashes when profiling certain invalid calls of unbound - methods. Patch by Jeroen Demeyer. - -- bpo-24618: Fixed reading invalid memory when create the code object with - too small varnames tuple or too large argument counts. - -- bpo-34068: In :meth:`io.IOBase.close`, ensure that the - :attr:`~io.IOBase.closed` attribute is not set with a live exception. - Patch by Zackery Spytz and Serhiy Storchaka. - -- bpo-34087: Fix buffer overflow while converting unicode to numeric values. - -- bpo-34080: Fixed a memory leak in the compiler when it raised some - uncommon errors during tokenizing. - -- bpo-34066: Disabled interruption by Ctrl-C between calling ``open()`` and - entering a **with** block in ``with open()``. - -- bpo-34042: Fix dict.copy() to maintain correct total refcount (as reported - by sys.gettotalrefcount()). - -- bpo-33418: Fix potential memory leak in function object when it creates - reference cycle. - -- bpo-33985: Implement contextvars.ContextVar.name attribute. - -- bpo-33956: Update vendored Expat library copy to version 2.2.5. - -- bpo-24596: Decref the module object in :c:func:`PyRun_SimpleFileExFlags` - before calling :c:func:`PyErr_Print()`. Patch by Zackery Spytz. - -- bpo-33451: Close directly executed pyc files before calling - ``PyEval_EvalCode()``. - -- bpo-1617161: The hash of :class:`BuiltinMethodType` instances (methods of - built-in classes) now depends on the hash of the identity of *__self__* - instead of its value. The hash and equality of :class:`ModuleType` and - :class:`MethodWrapperType` instances (methods of user-defined classes and - some methods of built-in classes like ``str.__add__``) now depend on the - hash and equality of the identity of *__self__* instead of its value. - :class:`MethodWrapperType` instances no longer support ordering. - -- bpo-33824: Fix "LC_ALL=C python3.7 -V": reset properly the command line - parser when the encoding changes after reading the Python configuration. - -- bpo-33803: Fix a crash in hamt.c caused by enabling GC tracking for an - object that hadn't all of its fields set to NULL. - -- bpo-33738: Seven macro incompatibilities with the Limited API were fixed, - and the macros :c:func:`PyIter_Check`, :c:func:`PyIndex_Check` and - :c:func:`PyExceptionClass_Name` were added as functions. A script for - automatic macro checks was added. - -- bpo-33786: Fix asynchronous generators to handle GeneratorExit in athrow() - correctly - -- bpo-30167: ``PyRun_SimpleFileExFlags`` removes ``__cached__`` from module - in addition to ``__file__``. - -- bpo-33706: Fix a crash in Python initialization when parsing the command - line options. Thanks Christoph Gohlke for the bug report and the fix! - -- bpo-33597: Reduce ``PyGC_Head`` size from 3 words to 2 words. - -- bpo-30654: Fixed reset of the SIGINT handler to SIG_DFL on interpreter - shutdown even when there was a custom handler set previously. Patch by - Philipp Kerling. - -- bpo-33622: Fixed a leak when the garbage collector fails to add an object - with the ``__del__`` method or referenced by it into the - :data:`gc.garbage` list. :c:func:`PyGC_Collect` can now be called when an - exception is set and preserves it. - -- bpo-33462: Make dict and dict views reversible. Patch by Rémi Lapeyre. - -- bpo-23722: A :exc:`RuntimeError` is now raised when the custom metaclass - doesn't provide the ``__classcell__`` entry in the namespace passed to - ``type.__new__``. A :exc:`DeprecationWarning` was emitted in Python - 3.6--3.7. - -- bpo-33499: Add :envvar:`PYTHONPYCACHEPREFIX` environment variable and - :option:`-X` ``pycache_prefix`` command-line option to set an alternate - root directory for writing module bytecode cache files. - -- bpo-25711: The :mod:`zipimport` module has been rewritten in pure Python. - -- bpo-33509: Fix module_globals parameter of warnings.warn_explicit(): don't - crash if module_globals is not a dict. - -- bpo-31849: Fix signed/unsigned comparison warning in pyhash.c. - -- bpo-33475: Fixed miscellaneous bugs in converting annotations to strings - and optimized parentheses in the string representation. - -- bpo-20104: Added support for the ``setpgroup``, ``resetids``, - ``setsigmask``, ``setsigdef`` and ``scheduler`` parameters of - ``posix_spawn``. Patch by Pablo Galindo. - -- bpo-33391: Fix a leak in set_symmetric_difference(). - -- bpo-33363: Raise a SyntaxError for ``async with`` and ``async for`` - statements outside of async functions. - -- bpo-28055: Fix unaligned accesses in siphash24(). Patch by Rolf Eike Beer. - -- bpo-33128: Fix a bug that causes PathFinder to appear twice on - sys.meta_path. Patch by Pablo Galindo Salgado. - -- bpo-33331: Modules imported last are now cleared first at interpreter - shutdown. - -- bpo-33312: Fixed clang ubsan (undefined behavior sanitizer) warnings in - dictobject.c by adjusting how the internal struct _dictkeysobject shared - keys structure is declared. - -- bpo-33305: Improved syntax error messages for invalid numerical literals. - -- bpo-33306: Improved syntax error messages for unbalanced parentheses. - -- bpo-33234: The list constructor will pre-size and not over-allocate when - the input length is known. - -- bpo-33270: Intern the names for all anonymous code objects. Patch by - Zackery Spytz. - -- bpo-30455: The C and Python code and the documentation related to tokens - are now generated from a single source file :file:`Grammar/Tokens`. - -- bpo-33176: Add a ``toreadonly()`` method to memoryviews. - -- bpo-33231: Fix potential memory leak in ``normalizestring()``. - -- bpo-33205: Change dict growth function from - ``round_up_to_power_2(used*2+hashtable_size/2)`` to - ``round_up_to_power_2(used*3)``. Previously, dict is shrunk only when - ``used == 0``. Now dict has more chance to be shrunk. - -- bpo-29922: Improved error messages in 'async with' when ``__aenter__()`` - or ``__aexit__()`` return non-awaitable object. - -- bpo-33199: Fix ``ma_version_tag`` in dict implementation is uninitialized - when copying from key-sharing dict. - -- bpo-33053: When using the -m switch, sys.path[0] is now explicitly - expanded as the *starting* working directory, rather than being left as - the empty path (which allows imports from the current working directory at - the time of the import) - -- bpo-33138: Changed standard error message for non-pickleable and - non-copyable types. It now says "cannot pickle" instead of "can't pickle" - or "cannot serialize". - -- bpo-33018: Improve consistency of errors raised by ``issubclass()`` when - called with a non-class and an abstract base class as the first and second - arguments, respectively. Patch by Josh Bronson. - -- bpo-33083: ``math.factorial`` no longer accepts arguments that are not - int-like. Patch by Pablo Galindo. - -- bpo-33041: Added new opcode :opcode:`END_ASYNC_FOR` and fixes the - following issues: - - * Setting global :exc:`StopAsyncIteration` no longer breaks ``async for`` - loops. - * Jumping into an ``async for`` loop is now disabled. - * Jumping out of an ``async for`` loop no longer corrupts the stack. - -- bpo-25750: Fix rare Python crash due to bad refcounting in - ``type_getattro()`` if a descriptor deletes itself from the class. Patch - by Jeroen Demeyer. - -- bpo-33041: Fixed bytecode generation for "async for" with a complex - target. A StopAsyncIteration raised on assigning or unpacking will be now - propagated instead of stopping the iteration. - -- bpo-33026: Fixed jumping out of "with" block by setting f_lineno. - -- bpo-33005: Fix a crash on fork when using a custom memory allocator (ex: - using PYTHONMALLOC env var). _PyGILState_Reinit() and - _PyInterpreterState_Enable() now use the default RAW memory allocator to - allocate a new interpreters mutex on fork. - -- bpo-32911: Due to unexpected compatibility issues discovered during - downstream beta testing, reverted :issue:`29463`. ``docstring`` field is - removed from Module, ClassDef, FunctionDef, and AsyncFunctionDef ast nodes - which was added in 3.7a1. Docstring expression is restored as a first - statement in their body. Based on patch by Inada Naoki. - -- bpo-17288: Prevent jumps from 'return' and 'exception' trace events. - -- bpo-32946: Importing names from already imported module with "from ... - import ..." is now 30% faster if the module is not a package. - -- bpo-32932: Make error message more revealing when there are non-str - objects in ``__all__``. - -- bpo-32925: Optimized iterating and containing test for literal lists - consisting of non-constants: ``x in [a, b]`` and ``for x in [a, b]``. The - case of all constant elements already was optimized. - -- bpo-32889: Update Valgrind suppression list to account for the rename of - ``Py_ADDRESS_IN_RANG`` to ``address_in_range``. - -- bpo-32836: Don't use temporary variables in cases of list/dict/set - comprehensions - -- bpo-31356: Remove the new API added in bpo-31356 (gc.ensure_disabled() - context manager). - -- bpo-32305: For namespace packages, ensure that both ``__file__`` and - ``__spec__.origin`` are set to None. - -- bpo-32303: Make sure ``__spec__.loader`` matches ``__loader__`` for - namespace packages. - -- bpo-32711: Fix the warning messages for Python/ast_unparse.c. Patch by - Stéphane Wirtel - -- bpo-32583: Fix possible crashing in builtin Unicode decoders caused by - write out-of-bound errors when using customized decode error handlers. - -- bpo-32489: A :keyword:`continue` statement is now allowed in the - :keyword:`finally` clause. - -- bpo-17611: Simplified the interpreter loop by moving the logic of - unrolling the stack of blocks into the compiler. The compiler emits now - explicit instructions for adjusting the stack of values and calling the - cleaning up code for :keyword:`break`, :keyword:`continue` and - :keyword:`return`. - - Removed opcodes :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`, - :opcode:`SETUP_LOOP` and :opcode:`SETUP_EXCEPT`. Added new opcodes - :opcode:`ROT_FOUR`, :opcode:`BEGIN_FINALLY` and :opcode:`CALL_FINALLY` and - :opcode:`POP_FINALLY`. Changed the behavior of :opcode:`END_FINALLY` and - :opcode:`WITH_CLEANUP_START`. - -- bpo-32285: New function unicodedata.is_normalized, which can check whether - a string is in a specific normal form. - -- bpo-10544: Yield expressions are now disallowed in comprehensions and - generator expressions except the expression for the outermost iterable. - -- bpo-32117: Iterable unpacking is now allowed without parentheses in yield - and return statements, e.g. ``yield 1, 2, 3, *rest``. Thanks to David - Cuthbert for the change and Jordan Chapman for added tests. - -- bpo-31902: Fix the ``col_offset`` attribute for ast nodes - ``ast.AsyncFor``, ``ast.AsyncFunctionDef``, and ``ast.AsyncWith``. - Previously, ``col_offset`` pointed to the keyword after ``async``. - -- bpo-25862: Fix assertion failures in the ``tell()`` method of - ``io.TextIOWrapper``. Patch by Zackery Spytz. - -- bpo-21983: Fix a crash in ``ctypes.cast()`` in case the type argument is a - ctypes structured data type. Patch by Eryk Sun and Oren Milman. - -- bpo-31577: Fix a crash in ``os.utime()`` in case of a bad ns argument. - Patch by Oren Milman. - -- bpo-29832: Remove references to 'getsockaddrarg' from various socket error - messages. Patch by Oren Milman. - -Library -------- - -- bpo-35845: Add 'order' parameter to memoryview.tobytes(). - -- bpo-35864: The _asdict() method for collections.namedtuple now returns a - regular dict instead of an OrderedDict. - -- bpo-35537: An ExitStack is now used internally within subprocess.Popen to - clean up pipe file handles. No behavior change in normal operation. But if - closing one handle were ever to cause an exception, the others will now be - closed instead of leaked. (patch by Giampaolo Rodola) - -- bpo-35847: RISC-V needed the CTYPES_PASS_BY_REF_HACK. Fixes ctypes - Structure test_pass_by_value. - -- bpo-35813: Shared memory submodule added to multiprocessing to avoid need - for serialization between processes - -- bpo-35780: Fix lru_cache() errors arising in recursive, reentrant, or - multi-threaded code. These errors could result in orphan links and in the - cache being trapped in a state with fewer than the specified maximum - number of links. Fix handling of negative maxsize which should have been - treated as zero. Fix errors in toggling the "full" status flag. Fix - misordering of links when errors are encountered. Sync-up the C code and - pure Python code for the space saving path in functions with a single - positional argument. In this common case, the space overhead of an lru - cache entry is reduced by almost half. Fix counting of cache misses. In - error cases, the miss count was out of sync with the actual number of - times the underlying user function was called. - -- bpo-35537: :func:`os.posix_spawn` and :func:`os.posix_spawnp` now have a - *setsid* parameter. - -- bpo-23846: :class:`asyncio.ProactorEventLoop` now catches and logs send - errors when the self-pipe is full. - -- bpo-34323: :mod:`asyncio`: Enhance ``IocpProactor.close()`` log: wait 1 - second before the first log, then log every second. Log also the number of - seconds since ``close()`` was called. - -- bpo-35674: Add a new :func:`os.posix_spawnp` function. Patch by Joannah - Nanjekye. - -- bpo-35733: ``ast.Constant(boolean)`` no longer an instance of - :class:`ast.Num`. Patch by Anthony Sottile. - -- bpo-35726: QueueHandler.prepare() now makes a copy of the record before - modifying and enqueueing it, to avoid affecting other handlers in the - chain. - -- bpo-35719: Sped up multi-argument :mod:`math` functions atan2(), - copysign(), remainder() and hypot() by 1.3--2.5 times. - -- bpo-35717: Fix KeyError exception raised when using enums and compile. - Patch contributed by Rémi Lapeyre. - -- bpo-35699: Fixed detection of Visual Studio Build Tools 2017 in distutils - -- bpo-32710: Fix memory leaks in asyncio ProactorEventLoop on overlapped - operation failure. - -- bpo-35702: The :const:`time.CLOCK_UPTIME_RAW` constant is now available - for macOS 10.12. - -- bpo-32710: Fix a memory leak in asyncio in the ProactorEventLoop when - ``ReadFile()`` or ``WSASend()`` overlapped operation fail immediately: - release the internal buffer. - -- bpo-35682: Fix ``asyncio.ProactorEventLoop.sendfile()``: don't attempt to - set the result of an internal future if it's already done. - -- bpo-35283: Add a deprecated warning for the - :meth:`threading.Thread.isAlive` method. Patch by Donghee Na. - -- bpo-35664: Improve operator.itemgetter() performance by 33% with optimized - argument handling and with adding a fast path for the common case of a - single non-negative integer index into a tuple (which is the typical use - case in the standard library). - -- bpo-35643: Fixed a SyntaxWarning: invalid escape sequence in - Modules/_sha3/cleanup.py. Patch by Mickaël Schoentgen. - -- bpo-35619: Improved support of custom data descriptors in :func:`help` and - :mod:`pydoc`. - -- bpo-28503: The ``crypt`` module now internally uses the ``crypt_r()`` - library function instead of ``crypt()`` when available. - -- bpo-35614: Fixed help() on metaclasses. Patch by Sanyam Khurana. - -- bpo-35568: Expose ``raise(signum)`` as ``raise_signal`` - -- bpo-35588: The floor division and modulo operations and the :func:`divmod` - function on :class:`fractions.Fraction` types are 2--4x faster. Patch by - Stefan Behnel. - -- bpo-35585: Speed-up building enums by value, e.g. http.HTTPStatus(200). - -- bpo-30561: random.gammavariate(1.0, beta) now computes the same result as - random.expovariate(1.0 / beta). This synchronizes the two algorithms and - eliminates some idiosyncrasies in the old implementation. It does however - produce a difference stream of random variables than it used to. - -- bpo-35537: The :mod:`subprocess` module can now use the - :func:`os.posix_spawn` function in some cases for better performance. - -- bpo-35526: Delaying the 'joke' of barry_as_FLUFL.mandatory to Python - version 4.0 - -- bpo-35523: Remove :mod:`ctypes` callback workaround: no longer create a - callback at startup. Avoid SELinux alert on ``import ctypes`` and ``import - uuid``. - -- bpo-31784: :func:`uuid.uuid1` now calls :func:`time.time_ns` rather than - ``int(time.time() * 1e9)``. - -- bpo-35513: :class:`~unittest.runner.TextTestRunner` of - :mod:`unittest.runner` now uses :func:`time.perf_counter` rather than - :func:`time.time` to measure the execution time of a test: - :func:`time.time` can go backwards, whereas :func:`time.perf_counter` is - monotonic. - -- bpo-35502: Fixed reference leaks in - :class:`xml.etree.ElementTree.TreeBuilder` in case of unfinished building - of the tree (in particular when an error was raised during parsing XML). - -- bpo-35348: Make :func:`platform.architecture` parsing of ``file`` command - output more reliable: add the ``-b`` option to the ``file`` command to - omit the filename, force the usage of the C locale, and search also the - "shared object" pattern. - -- bpo-35491: :mod:`multiprocessing`: Add ``Pool.__repr__()`` and enhance - ``BaseProcess.__repr__()`` (add pid and parent pid) to ease debugging. - Pool state constant values are now strings instead of integers, for - example ``RUN`` value becomes ``'RUN'`` instead of ``0``. - -- bpo-35477: :meth:`multiprocessing.Pool.__enter__` now fails if the pool is - not running: ``with pool:`` fails if used more than once. - -- bpo-31446: Copy command line that was passed to CreateProcessW since this - function can change the content of the input buffer. - -- bpo-35471: Python 2.4 dropped MacOS 9 support. The macpath module was - deprecated in Python 3.7. The module is now removed. - -- bpo-23057: Unblock Proactor event loop when keyboard interrupt is received - on Windows - -- bpo-35052: Fix xml.dom.minidom cloneNode() on a document with an entity: - pass the correct arguments to the user data handler of an entity. - -- bpo-20239: Allow repeated assignment deletion of - :class:`unittest.mock.Mock` attributes. Patch by Pablo Galindo. - -- bpo-17185: Set ``__signature__`` on mock for :mod:`inspect` to get - signature. Patch by Karthikeyan Singaravelan. - -- bpo-35445: Memory errors during creating posix.environ no longer ignored. - -- bpo-35415: Validate fileno= argument to socket.socket(). - -- bpo-35424: :class:`multiprocessing.Pool` destructor now emits - :exc:`ResourceWarning` if the pool is still running. - -- bpo-35330: When a :class:`Mock` instance was used to wrap an object, if - ``side_effect`` is used in one of the mocks of it methods, don't call the - original implementation and return the result of using the side effect the - same way that it is done with return_value. - -- bpo-35346: Drop Mac OS 9 and Rhapsody support from the :mod:`platform` - module. Rhapsody last release was in 2000. Mac OS 9 last release was in - 2001. - -- bpo-10496: :func:`~distutils.utils.check_environ` of ``distutils.utils`` - now catches :exc:`KeyError` on calling :func:`pwd.getpwuid`: don't create - the ``HOME`` environment variable in this case. - -- bpo-10496: :func:`posixpath.expanduser` now returns the input *path* - unchanged if the ``HOME`` environment variable is not set and the current - user has no home directory (if the current user identifier doesn't exist - in the password database). This change fix the :mod:`site` module if the - current user doesn't exist in the password database (if the user has no - home directory). - -- bpo-35389: :func:`platform.libc_ver` now uses - ``os.confstr('CS_GNU_LIBC_VERSION')`` if available and the *executable* - parameter is not set. - -- bpo-35394: Add empty slots to asyncio abstract protocols. - -- bpo-35310: Fix a bug in :func:`select.select` where, in some cases, the - file descriptor sequences were returned unmodified after a signal - interruption, even though the file descriptors might not be ready yet. - :func:`select.select` will now always return empty lists if a timeout has - occurred. Patch by Oran Avraham. - -- bpo-35380: Enable TCP_NODELAY on Windows for proactor asyncio event loop. - -- bpo-35341: Add generic version of ``collections.OrderedDict`` to the - ``typing`` module. Patch by Ismo Toijala. - -- bpo-35371: Fixed possible crash in ``os.utime()`` on Windows when pass - incorrect arguments. - -- bpo-35346: :func:`platform.uname` now redirects ``stderr`` to - :data:`os.devnull` when running external programs like ``cmd /c ver``. - -- bpo-35066: Previously, calling the strftime() method on a datetime object - with a trailing '%' in the format string would result in an exception. - However, this only occurred when the datetime C module was being used; the - python implementation did not match this behavior. Datetime is now PEP-399 - compliant, and will not throw an exception on a trailing '%'. - -- bpo-35345: The function ``platform.popen`` has been removed, it was - deprecated since Python 3.3: use :func:`os.popen` instead. - -- bpo-35344: On macOS, :func:`platform.platform` now uses - :func:`platform.mac_ver`, if it returns a non-empty release string, to get - the macOS version rather than the darwin version. - -- bpo-35312: Make ``lib2to3.pgen2.parse.ParseError`` round-trip pickle-able. - Patch by Anthony Sottile. - -- bpo-35308: Fix regression in ``webbrowser`` where default browsers may be - preferred over browsers in the ``BROWSER`` environment variable. - -- bpo-24746: Avoid stripping trailing whitespace in doctest fancy diff. - Original patch by R. David Murray & Jairo Trad. Enhanced by Sanyam - Khurana. - -- bpo-28604: :func:`locale.localeconv` now sets temporarily the ``LC_CTYPE`` - locale to the ``LC_MONETARY`` locale if the two locales are different and - monetary strings are non-ASCII. This temporary change affects other - threads. - -- bpo-35277: Update ensurepip to install pip 18.1 and setuptools 40.6.2. - -- bpo-24209: Adds IPv6 support when invoking http.server directly. - -- bpo-35226: Recursively check arguments when testing for equality of - :class:`unittest.mock.call` objects and add note that tracking of - parameters used to create ancestors of mocks in ``mock_calls`` is not - possible. - -- bpo-29564: The warnings module now suggests to enable tracemalloc if the - source is specified, the tracemalloc module is available, but tracemalloc - is not tracing memory allocations. - -- bpo-35189: Modify the following fnctl function to retry if interrupted by - a signal (EINTR): flock, lockf, fnctl - -- bpo-30064: Use add_done_callback() in sock_* asyncio API to unsubscribe - reader/writer early on calcellation. - -- bpo-35186: Removed the "built with" comment added when ``setup.py upload`` - is used with either ``bdist_rpm`` or ``bdist_dumb``. - -- bpo-35152: Allow sending more than 2 GB at once on a multiprocessing - connection on non-Windows systems. - -- bpo-35062: Fix incorrect parsing of - :class:`io.IncrementalNewlineDecoder`'s *translate* argument. - -- bpo-35065: Remove ``StreamReaderProtocol._untrack_reader``. The call to - ``_untrack_reader`` is currently performed too soon, causing the protocol - to forget about the reader before ``connection_lost`` can run and feed the - EOF to the reader. - -- bpo-34160: ElementTree and minidom now preserve the attribute order - specified by the user. - -- bpo-35079: Improve difflib.SequenceManager.get_matching_blocks doc by - adding 'non-overlapping' and changing '!=' to '<'. - -- bpo-33710: Deprecated ``l*gettext()`` functions and methods in the - :mod:`gettext` module. They return encoded bytes instead of Unicode - strings and are artifacts from Python 2 times. Also deprecated functions - and methods related to setting the charset for ``l*gettext()`` functions - and methods. - -- bpo-35017: :meth:`socketserver.BaseServer.serve_forever` now exits - immediately if it's :meth:`~socketserver.BaseServer.shutdown` method is - called while it is polling for new events. - -- bpo-35024: ``importlib`` no longer logs ``wrote <bytecode path>`` - redundantly after ``(created|could not create) <bytecode path>`` is - already logged. Patch by Quentin Agren. - -- bpo-35047: ``unittest.mock`` now includes mock calls in exception messages - if ``assert_not_called``, ``assert_called_once``, or - ``assert_called_once_with`` fails. Patch by Petter Strandmark. - -- bpo-31047: Fix ``ntpath.abspath`` regression where it didn't remove a - trailing separator on Windows. Patch by Tim Graham. - -- bpo-35053: tracemalloc now tries to update the traceback when an object is - reused from a "free list" (optimization for faster object creation, used - by the builtin list type for example). - -- bpo-31553: Add the --json-lines option to json.tool. Patch by hongweipeng. - -- bpo-34794: Fixed a leak in Tkinter when pass the Python wrapper around - Tcl_Obj back to Tcl/Tk. - -- bpo-34909: Enum: fix grandchildren subclassing when parent mixed with - concrete data types. - -- bpo-35022: :class:`unittest.mock.MagicMock` now supports the - ``__fspath__`` method (from :class:`os.PathLike`). - -- bpo-35008: Fixed references leaks when call the ``__setstate__()`` method - of :class:`xml.etree.ElementTree.Element` in the C implementation for - already initialized element. - -- bpo-23420: Verify the value for the parameter '-s' of the cProfile CLI. - Patch by Robert Kuska - -- bpo-33947: dataclasses now handle recursive reprs without raising - RecursionError. - -- bpo-34890: Make :func:`inspect.iscoroutinefunction`, - :func:`inspect.isgeneratorfunction` and :func:`inspect.isasyncgenfunction` - work with :func:`functools.partial`. Patch by Pablo Galindo. - -- bpo-34521: Use :func:`socket.CMSG_SPACE` to calculate ancillary data size - instead of :func:`socket.CMSG_LEN` in - :func:`multiprocessing.reduction.recvfds` as :rfc:`3542` requires the use - of the former for portable applications. - -- bpo-31522: The ``mailbox.mbox.get_string`` function *from_* parameter can - now successfully be set to a non-default value. - -- bpo-34970: Protect tasks weak set manipulation in ``asyncio.all_tasks()`` - -- bpo-34969: gzip: Add --fast, --best on the gzip CLI, these parameters will - be used for the fast compression method (quick) or the best method - compress (slower, but smaller file). Also, change the default compression - level to 6 (tradeoff). - -- bpo-16965: The 2to3 ``execfile`` fixer now opens the file with mode - ``'rb'``. Patch by Zackery Spytz. - -- bpo-34966: :mod:`pydoc` now supports aliases not only to methods defined - in the end class, but also to inherited methods. The docstring is not - duplicated for aliases. - -- bpo-34926: :meth:`mimetypes.MimeTypes.guess_type` now accepts - :term:`path-like object` in addition to url strings. Patch by Mayank - Asthana. - -- bpo-23831: Add ``moveto()`` method to the ``tkinter.Canvas`` widget. Patch - by Juliette Monsel. - -- bpo-34941: Methods ``find()``, ``findtext()`` and ``findall()`` of the - ``Element`` class in the :mod:`xml.etree.ElementTree` module are now able - to find children which are instances of ``Element`` subclasses. - -- bpo-32680: :class:`smtplib.SMTP` objects now always have a ``sock`` - attribute present - -- bpo-34769: Fix for async generators not finalizing when event loop is in - debug mode and garbage collector runs in another thread. - -- bpo-34936: Fix ``TclError`` in ``tkinter.Spinbox.selection_element()``. - Patch by Juliette Monsel. - -- bpo-34829: Add methods ``selection_from``, ``selection_range``, - ``selection_present`` and ``selection_to`` to the ``tkinter.Spinbox`` for - consistency with the ``tkinter.Entry`` widget. Patch by Juliette Monsel. - -- bpo-34911: Added *secure_protocols* argument to - *http.cookiejar.DefaultCookiePolicy* to allow for tweaking of protocols - and also to add support by default for *wss*, the secure websocket - protocol. - -- bpo-34922: Fixed integer overflow in the :meth:`~hashlib.shake.digest` and - :meth:`~hashlib.shake.hexdigest` methods for the SHAKE algorithm in the - :mod:`hashlib` module. - -- bpo-34925: 25% speedup in argument parsing for the functions in the bisect - module. - -- bpo-34900: Fixed :meth:`unittest.TestCase.debug` when used to call test - methods with subtests. Patch by Bruno Oliveira. - -- bpo-34844: logging.Formatter enhancement - Ensure styles and fmt matches - in logging.Formatter - Added validate method in each format style class: - StrFormatStyle, PercentStyle, StringTemplateStyle. - This method is called - in the constructor of logging.Formatter class - Also re-raise the KeyError - in the format method of each style class, so it would a bit clear that - it's an error with the invalid format fields. - -- bpo-34897: Adjust test.support.missing_compiler_executable check so that a - nominal command name of "" is ignored. Patch by Michael Felt. - -- bpo-34871: Fix inspect module polluted ``sys.modules`` when parsing - ``__text_signature__`` of callable. - -- bpo-34898: Add ``mtime`` argument to ``gzip.compress`` for reproducible - output. Patch by Guo Ci Teo. - -- bpo-28441: On Cygwin and MinGW, ensure that ``sys.executable`` always - includes the full filename in the path, including the ``.exe`` suffix - (unless it is a symbolic link). - -- bpo-34866: Adding ``max_num_fields`` to ``cgi.FieldStorage`` to make DOS - attacks harder by limiting the number of ``MiniFieldStorage`` objects - created by ``FieldStorage``. - -- bpo-34711: http.server ensures it reports HTTPStatus.NOT_FOUND when the - local path ends with "/" and is not a directory, even if the underlying OS - (e.g. AIX) accepts such paths as a valid file reference. Patch by Michael - Felt. - -- bpo-34872: Fix self-cancellation in C implementation of asyncio.Task - -- bpo-34849: Don't log waiting for ``selector.select`` in asyncio loop - iteration. The waiting is pretty normal for any asyncio program, logging - its time just adds a noise to logs without any useful information - provided. - -- bpo-34022: The :envvar:`SOURCE_DATE_EPOCH` environment variable no longer - overrides the value of the *invalidation_mode* argument to - :func:`py_compile.compile`, and determines its default value instead. - -- bpo-34819: Use a monotonic clock to compute timeouts in - :meth:`Executor.map` and :func:`as_completed`, in order to prevent - timeouts from deviating when the system clock is adjusted. - -- bpo-34758: Add .wasm -> application/wasm to list of recognized file types - and content type headers - -- bpo-34789: :func:`xml.sax.make_parser` now accepts any iterable as its - *parser_list* argument. Patch by Andrés Delfino. - -- bpo-34334: In :class:`QueueHandler`, clear ``exc_text`` from - :class:`LogRecord` to prevent traceback from being written twice. - -- bpo-34687: On Windows, asyncio now uses ProactorEventLoop, instead of - SelectorEventLoop, by default. - -- bpo-5950: Support reading zip files with archive comments in - :mod:`zipimport`. - -- bpo-32892: The parser now represents all constants as - :class:`ast.Constant` instead of using specific constant AST types - (``Num``, ``Str``, ``Bytes``, ``NameConstant`` and ``Ellipsis``). These - classes are considered deprecated and will be removed in future Python - versions. - -- bpo-34728: Add deprecation warning when ``loop`` is used in methods: - ``asyncio.sleep``, ``asyncio.wait`` and ``asyncio.wait_for``. - -- bpo-34738: ZIP files created by ``distutils`` will now include entries for - directories. - -- bpo-34659: Add an optional *initial* argument to itertools.accumulate(). - -- bpo-29577: Support multiple mixin classes when creating Enums. - -- bpo-34670: Add SSLContext.post_handshake_auth and - SSLSocket.verify_client_post_handshake for TLS 1.3's post handshake - authentication feature. - -- bpo-32718: The Activate.ps1 script from venv works with PowerShell Core - 6.1 and is now available under all operating systems. - -- bpo-31177: Fix bug that prevented using :meth:`reset_mock - <unittest.mock.Mock.reset_mock>` on mock instances with deleted attributes - -- bpo-34672: Add a workaround, so the ``'Z'`` :func:`time.strftime` - specifier on the musl C library can work in some cases. - -- bpo-34666: Implement ``asyncio.StreamWriter.awrite`` and - ``asyncio.StreamWriter.aclose()`` coroutines. Methods are needed for - providing a consistent stream API with control flow switched on by - default. - -- bpo-6721: Acquire the logging module's commonly used internal locks while - fork()ing to avoid deadlocks in the child process. - -- bpo-34658: Fix a rare interpreter unhandled exception state SystemError - only seen when using subprocess with a preexec_fn while an after_parent - handler has been registered with os.register_at_fork and the fork system - call fails. - -- bpo-34652: Ensure :func:`os.lchmod` is never defined on Linux. - -- bpo-34638: Store a weak reference to stream reader to break strong - references loop between reader and protocol. It allows to detect and - close the socket if the stream is deleted (garbage collected) without - ``close()`` call. - -- bpo-34536: ``Enum._missing_``: raise ``ValueError`` if None returned and - ``TypeError`` if non-member is returned. - -- bpo-34636: Speed up re scanning of many non-matching characters for \s \w - and \d within bytes objects. (microoptimization) - -- bpo-24412: Add :func:`~unittest.addModuleCleanup` and - :meth:`~unittest.TestCase.addClassCleanup` to unittest to support cleanups - for :func:`~unittest.setUpModule` and - :meth:`~unittest.TestCase.setUpClass`. Patch by Lisa Roach. - -- bpo-34630: Don't log SSL certificate errors in asyncio code (connection - error logging is skipped already). - -- bpo-32490: Prevent filename duplication in :mod:`subprocess` exception - messages. Patch by Zackery Spytz. - -- bpo-34363: dataclasses.asdict() and .astuple() now handle namedtuples - correctly. - -- bpo-34625: Update vendorized expat library version to 2.2.6. - -- bpo-32270: The subprocess module no longer mistakenly closes redirected - fds even when they were in pass_fds when outside of the default {0, 1, 2} - set. - -- bpo-34622: Create a dedicated ``asyncio.CancelledError``, - ``asyncio.InvalidStateError`` and ``asyncio.TimeoutError`` exception - classes. Inherit them from corresponding exceptions from - ``concurrent.futures`` package. Extract ``asyncio`` exceptions into a - separate file. - -- bpo-34610: Fixed iterator of :class:`multiprocessing.managers.DictProxy`. - -- bpo-34421: Fix distutils logging for non-ASCII strings. This caused - installation issues on Windows. - -- bpo-34604: Fix possible mojibake in the error message of ``pwd.getpwnam`` - and ``grp.getgrnam`` using string representation because of invisible - characters or trailing whitespaces. Patch by William Grzybowski. - -- bpo-30977: Make uuid.UUID use ``__slots__`` to reduce its memory - footprint. Based on original patch by Wouter Bolsterlee. - -- bpo-34574: OrderedDict iterators are not exhausted during pickling - anymore. Patch by Sergey Fedoseev. - -- bpo-8110: Refactored :mod:`subprocess` to check for Windows-specific - modules rather than ``sys.platform == 'win32'``. - -- bpo-34530: ``distutils.spawn.find_executable()`` now falls back on - :data:`os.defpath` if the ``PATH`` environment variable is not set. - -- bpo-34563: On Windows, fix multiprocessing.Connection for very large read: - fix _winapi.PeekNamedPipe() and _winapi.ReadFile() for read larger than - INT_MAX (usually ``2**31-1``). - -- bpo-34558: Correct typo in Lib/ctypes/_aix.py - -- bpo-34282: Move ``Enum._convert`` to ``EnumMeta._convert_`` and fix enum - members getting shadowed by parent attributes. - -- bpo-22872: When the queue is closed, :exc:`ValueError` is now raised by - :meth:`multiprocessing.Queue.put` and :meth:`multiprocessing.Queue.get` - instead of :exc:`AssertionError` and :exc:`OSError`, respectively. Patch - by Zackery Spytz. - -- bpo-34515: Fix parsing non-ASCII identifiers in - :mod:`!lib2to3.pgen2.tokenize` (:pep:`3131`). - -- bpo-13312: Avoids a possible integer underflow (undefined behavior) in the - time module's year handling code when passed a very low negative year - value. - -- bpo-34472: Improved compatibility for streamed files in :mod:`zipfile`. - Previously an optional signature was not being written and certain ZIP - applications were not supported. Patch by Silas Sewell. - -- bpo-34454: Fix the .fromisoformat() methods of datetime types crashing - when given unicode with non-UTF-8-encodable code points. Specifically, - datetime.fromisoformat() now accepts surrogate unicode code points used as - the separator. Report and tests by Alexey Izbyshev, patch by Paul Ganssle. - -- bpo-6700: Fix inspect.getsourcelines for module level frames/tracebacks. - Patch by Vladimir Matveev. - -- bpo-34171: Running the :mod:`trace` module no longer creates the - ``trace.cover`` file. - -- bpo-34441: Fix crash when an ``ABC``-derived class with invalid - ``__subclasses__`` is passed as the second argument to :func:`issubclass`. - Patch by Alexey Izbyshev. - -- bpo-34427: Fix infinite loop in ``a.extend(a)`` for ``MutableSequence`` - subclasses. - -- bpo-34412: Make :func:`signal.strsignal` work on HP-UX. Patch by Michael - Osipov. - -- bpo-20849: shutil.copytree now accepts a new ``dirs_exist_ok`` keyword - argument. Patch by Josh Bronson. - -- bpo-31715: Associate ``.mjs`` file extension with - ``application/javascript`` MIME Type. - -- bpo-34384: :func:`os.readlink` now accepts :term:`path-like <path-like - object>` and :class:`bytes` objects on Windows. - -- bpo-22602: The UTF-7 decoder now raises :exc:`UnicodeDecodeError` for - ill-formed sequences starting with "+" (as specified in RFC 2152). Patch - by Zackery Spytz. - -- bpo-2122: The :meth:`mmap.flush() <mmap.mmap.flush>` method now returns - ``None`` on success, raises an exception on error under all platforms. - -- bpo-34341: Appending to the ZIP archive with the ZIP64 extension no longer - grows the size of extra fields of existing entries. - -- bpo-34333: Fix %-formatting in :meth:`pathlib.PurePath.with_suffix` when - formatting an error message. - -- bpo-18540: The :class:`imaplib.IMAP4` and :class:`imaplib.IMAP4_SSL` - classes now resolve to the local host IP correctly when the default value - of *host* parameter (``''``) is used. - -- bpo-26502: Implement ``traceback.FrameSummary.__len__()`` method to - preserve compatibility with the old tuple API. - -- bpo-34318: :func:`~unittest.TestCase.assertRaises`, - :func:`~unittest.TestCase.assertRaisesRegex`, - :func:`~unittest.TestCase.assertWarns` and - :func:`~unittest.TestCase.assertWarnsRegex` no longer success if the - passed callable is None. They no longer ignore unknown keyword arguments - in the context manager mode. A DeprecationWarning was raised in these - cases since Python 3.5. - -- bpo-9372: Deprecate :meth:`~object.__getitem__` methods of - :class:`xml.dom.pulldom.DOMEventStream`, :class:`wsgiref.util.FileWrapper` - and :class:`fileinput.FileInput`. - -- bpo-33613: Fix a race condition in ``multiprocessing.semaphore_tracker`` - when the tracker receives SIGINT before it can register signal handlers - for ignoring it. - -- bpo-34248: Report filename in the exception raised when the database file - cannot be opened by :func:`dbm.gnu.open` and :func:`dbm.ndbm.open` due to - OS-related error. Patch by Zsolt Cserna. - -- bpo-33089: Add math.dist() to compute the Euclidean distance between two - points. - -- bpo-34246: :meth:`smtplib.SMTP.send_message` no longer modifies the - content of the *mail_options* argument. Patch by Pablo S. Blum de Aguiar. - -- bpo-31047: Fix ``ntpath.abspath`` for invalid paths on windows. Patch by - Franz Woellert. - -- bpo-32321: Add pure Python fallback for functools.reduce. Patch by Robert - Wright. - -- bpo-34270: The default asyncio task class now always has a name which can - be get or set using two new methods (:meth:`~asyncio.Task.get_name` and - :meth:`~asyncio.Task.set_name`) and is visible in the :func:`repr` output. - An initial name can also be set using the new ``name`` keyword argument to - :func:`asyncio.create_task` or the - :meth:`~asyncio.AbstractEventLoop.create_task` method of the event loop. - If no initial name is set, the default Task implementation generates a - name like ``Task-1`` using a monotonic counter. - -- bpo-34263: asyncio's event loop will not pass timeouts longer than one day - to epoll/select etc. - -- bpo-34035: Fix several AttributeError in zipfile seek() methods. Patch by - Mickaël Schoentgen. - -- bpo-32215: Fix performance regression in :mod:`sqlite3` when a DML - statement appeared in a different line than the rest of the SQL query. - -- bpo-34075: Deprecate passing non-ThreadPoolExecutor instances to - :meth:`AbstractEventLoop.set_default_executor`. - -- bpo-34251: Restore ``msilib.Win64`` to preserve backwards compatibility - since it's already used by ``distutils``' ``bdist_msi`` command. - -- bpo-19891: Ignore errors caused by missing / non-writable homedir while - writing history during exit of an interactive session. Patch by Anthony - Sottile. - -- bpo-33089: Enhanced math.hypot() to support more than two dimensions. - -- bpo-34228: tracemalloc: PYTHONTRACEMALLOC=0 environment variable and -X - tracemalloc=0 command line option are now allowed to disable explicitly - tracemalloc at startup. - -- bpo-13041: Use :func:`shutil.get_terminal_size` to calculate the terminal - width correctly in the ``argparse.HelpFormatter`` class. Initial patch by - Zbyszek Jędrzejewski-Szmek. - -- bpo-34213: Allow frozen dataclasses to have a field named "object". - Previously this conflicted with an internal use of "object". - -- bpo-34052: :meth:`sqlite3.Connection.create_aggregate`, - :meth:`sqlite3.Connection.create_function`, - :meth:`sqlite3.Connection.set_authorizer`, - :meth:`sqlite3.Connection.set_progress_handler` methods raises TypeError - when unhashable objects are passed as callable. These methods now don't - pass such objects to SQLite API. Previous behavior could lead to - segfaults. Patch by Sergey Fedoseev. - -- bpo-34197: Attributes *skipinitialspace*, *doublequote* and *strict* of - the *dialect* attribute of the :mod:`csv` reader are now :class:`bool` - instances instead of integers 0 or 1. - -- bpo-32788: Errors other than :exc:`TypeError` raised in methods - ``__adapt__()`` and ``__conform__()`` in the :mod:`sqlite3` module are now - propagated to the user. - -- bpo-21446: The ``reload`` fixer now uses :func:`importlib.reload` instead - of deprecated :func:`!imp.reload`. - -- bpo-940286: pydoc's ``Helper.showtopic()`` method now prints the cross - references of a topic correctly. - -- bpo-34164: :func:`base64.b32decode` could raise UnboundLocalError or - OverflowError for incorrect padding. Now it always raises - :exc:`base64.Error` in these cases. - -- bpo-33729: Fixed issues with arguments parsing in :mod:`hashlib`. - -- bpo-34097: ZipFile can zip files older than 1980-01-01 and newer than - 2107-12-31 using a new ``strict_timestamps`` parameter at the cost of - setting the timestamp to the limit. - -- bpo-34108: Remove extraneous CR in 2to3 refactor. - -- bpo-34070: Make sure to only check if the handle is a tty, when opening a - file with ``buffering=-1``. - -- bpo-27494: Reverted :issue:`27494`. 2to3 rejects now a trailing comma in - generator expressions. - -- bpo-33967: functools.singledispatch now raises TypeError instead of - IndexError when no positional arguments are passed. - -- bpo-34041: Add the parameter *deterministic* to the - :meth:`sqlite3.Connection.create_function` method. Patch by Sergey - Fedoseev. - -- bpo-34056: Ensure the loader shim created by ``imp.load_module`` always - returns bytes from its ``get_data()`` function. This fixes using - ``imp.load_module`` with :pep:`552` hash-based pycs. - -- bpo-34054: The multiprocessing module now uses the monotonic clock - :func:`time.monotonic` instead of the system clock :func:`time.time` to - implement timeout. - -- bpo-34043: Optimize tarfile uncompress performance about 15% when gzip is - used. - -- bpo-34044: ``subprocess.Popen`` now copies the *startupinfo* argument to - leave it unchanged: it will modify the copy, so that the same - ``STARTUPINFO`` object can be used multiple times. - -- bpo-34010: Fixed a performance regression for reading streams with - tarfile. The buffered read should use a list, instead of appending to a - bytes object. - -- bpo-34019: webbrowser: Correct the arguments passed to Opera Browser when - opening a new URL using the ``webbrowser`` module. Patch by Bumsik Kim. - -- bpo-34003: csv.DictReader now creates dicts instead of OrderedDicts. Patch - by Michael Selik. - -- bpo-33978: Closed existing logging handlers before reconfiguration via - fileConfig and dictConfig. Patch by Karthikeyan Singaravelan. - -- bpo-14117: Make minor tweaks to turtledemo. The 'wikipedia' example is now - 'rosette', describing what it draws. The 'penrose' print output is - reduced. The'1024' output of 'tree' is eliminated. - -- bpo-33974: Fixed passing lists and tuples of strings containing special - characters ``"``, ``\``, ``{``, ``}`` and ``\n`` as options to - :mod:`~tkinter.ttk` widgets. - -- bpo-27500: Fix getaddrinfo to resolve IPv6 addresses correctly. - -- bpo-24567: Improve random.choices() to handle subnormal input weights that - could occasionally trigger an IndexError. - -- bpo-33871: Fixed integer overflow in :func:`os.readv`, :func:`os.writev`, - :func:`os.preadv` and :func:`os.pwritev` and in :func:`os.sendfile` with - *headers* or *trailers* arguments (on BSD-based OSes and macOS). - -- bpo-25007: Add :func:`copy.copy` and :func:`copy.deepcopy` support to zlib - compressors and decompressors. Patch by Zackery Spytz. - -- bpo-33929: multiprocessing: Fix a race condition in Popen of - multiprocessing.popen_spawn_win32. The child process now duplicates the - read end of pipe instead of "stealing" it. Previously, the read end of - pipe was "stolen" by the child process, but it leaked a handle if the - child process had been terminated before it could steal the handle from - the parent process. - -- bpo-33899: Tokenize module now implicitly emits a NEWLINE when provided - with input that does not have a trailing new line. This behavior now - matches what the C tokenizer does internally. Contributed by Ammar Askar. - -- bpo-33897: Added a 'force' keyword argument to logging.basicConfig(). - -- bpo-33695: :func:`shutil.copytree` uses :func:`os.scandir` function and - all copy functions depending from it use cached :func:`os.stat` values. - The speedup for copying a directory with 8000 files is around +9% on - Linux, +20% on Windows and + 30% on a Windows SMB share. Also the number - of :func:`os.stat` syscalls is reduced by 38% making - :func:`shutil.copytree` especially faster on network filesystems. - (Contributed by Giampaolo Rodola' in :issue:`33695`.) - -- bpo-33916: bz2 and lzma: When Decompressor.__init__() is called twice, - free the old lock to not leak memory. - -- bpo-32568: Make select.epoll() and its documentation consistent regarding - *sizehint* and *flags*. - -- bpo-33833: Fixed bug in asyncio where ProactorSocketTransport logs - AssertionError if force closed during write. - -- bpo-33663: Convert content length to string before putting to header. - -- bpo-33721: :mod:`os.path` functions that return a boolean result like - :func:`~os.path.exists`, :func:`~os.path.lexists`, :func:`~os.path.isdir`, - :func:`~os.path.isfile`, :func:`~os.path.islink`, and - :func:`~os.path.ismount`, and :mod:`pathlib.Path` methods that return a - boolean result like :meth:`~pathlib.Path.exists`, - :meth:`~pathlib.Path.is_dir`, :meth:`~pathlib.Path.is_file`, - :meth:`~pathlib.Path.is_mount`, :meth:`~pathlib.Path.is_symlink`, - :meth:`~pathlib.Path.is_block_device`, - :meth:`~pathlib.Path.is_char_device`, :meth:`~pathlib.Path.is_fifo`, - :meth:`~pathlib.Path.is_socket` now return ``False`` instead of raising - :exc:`ValueError` or its subclasses :exc:`UnicodeEncodeError` and - :exc:`UnicodeDecodeError` for paths that contain characters or bytes - unrepresentable at the OS level. - -- bpo-26544: Fixed implementation of :func:`platform.libc_ver`. It almost - always returned version '2.9' for glibc. - -- bpo-33843: Remove deprecated ``cgi.escape``, ``cgi.parse_qs`` and - ``cgi.parse_qsl``. - -- bpo-33842: Remove ``tarfile.filemode`` which is deprecated since Python - 3.3. - -- bpo-30167: Prevent site.main() exception if PYTHONSTARTUP is set. Patch by - Steve Weber. - -- bpo-33805: Improve error message of dataclasses.replace() when an InitVar - is not specified - -- bpo-33687: Fix the call to ``os.chmod()`` for ``uu.decode()`` if a mode is - given or decoded. Patch by Timo Furrer. - -- bpo-33812: Datetime instance d with non-None tzinfo, but with - d.tzinfo.utcoffset(d) returning None is now treated as naive by the - astimezone() method. - -- bpo-32108: In configparser, don't clear section when it is assigned to - itself. - -- bpo-27397: Make email module properly handle invalid-length base64 - strings. - -- bpo-33578: Implement multibyte encoder/decoder state methods - -- bpo-30805: Avoid race condition with debug logging - -- bpo-33476: Fix _header_value_parser.py when address group is missing final - ';'. Contributed by Enrique Perez-Terron - -- bpo-33694: asyncio: Fix a race condition causing data loss on - pause_reading()/resume_reading() when using the ProactorEventLoop. - -- bpo-32493: Correct test for ``uuid_enc_be`` availability in - ``configure.ac``. Patch by Michael Felt. - -- bpo-33792: Add asyncio.WindowsSelectorEventLoopPolicy and - asyncio.WindowsProactorEventLoopPolicy. - -- bpo-33274: W3C DOM Level 1 specifies return value of - Element.removeAttributeNode() as "The Attr node that was removed." - xml.dom.minidom now complies with this requirement. - -- bpo-33778: Update ``unicodedata``'s database to Unicode version 11.0.0. - -- bpo-33165: Added a stacklevel parameter to logging calls to allow use of - wrapper/helper functions for logging APIs. - -- bpo-33770: improve base64 exception message for encoded inputs of invalid - length - -- bpo-33769: asyncio/start_tls: Fix error message; cancel callbacks in case - of an unhandled error; mark SSLTransport as closed if it is aborted. - -- bpo-33767: The concatenation (``+``) and repetition (``*``) sequence - operations now raise :exc:`TypeError` instead of :exc:`SystemError` when - performed on :class:`mmap.mmap` objects. Patch by Zackery Spytz. - -- bpo-33734: asyncio/ssl: Fix AttributeError, increase default handshake - timeout - -- bpo-31014: Fixed creating a controller for :mod:`webbrowser` when a user - specifies a path to an entry in the BROWSER environment variable. Based - on patch by John Still. - -- bpo-2504: Add gettext.pgettext() and variants. - -- bpo-33197: Add description property for _ParameterKind - -- bpo-32751: When cancelling the task due to a timeout, - :meth:`asyncio.wait_for` will now wait until the cancellation is complete. - -- bpo-32684: Fix gather to propagate cancellation of itself even with - return_exceptions. - -- bpo-33654: Support protocol type switching in SSLTransport.set_protocol(). - -- bpo-33674: Pause the transport as early as possible to further reduce the - risk of data_received() being called before connection_made(). - -- bpo-33671: :func:`shutil.copyfile`, :func:`shutil.copy`, - :func:`shutil.copy2`, :func:`shutil.copytree` and :func:`shutil.move` use - platform-specific fast-copy syscalls on Linux and macOS in order to copy - the file more efficiently. On Windows :func:`shutil.copyfile` uses a - bigger default buffer size (1 MiB instead of 16 KiB) and a - :func:`memoryview`-based variant of :func:`shutil.copyfileobj` is used. - The speedup for copying a 512MiB file is about +26% on Linux, +50% on - macOS and +40% on Windows. Also, much less CPU cycles are consumed. - (Contributed by Giampaolo Rodola' in :issue:`25427`.) - -- bpo-33674: Fix a race condition in SSLProtocol.connection_made() of - asyncio.sslproto: start immediately the handshake instead of using - call_soon(). Previously, data_received() could be called before the - handshake started, causing the handshake to hang or fail. - -- bpo-31647: Fixed bug where calling write_eof() on a - _SelectorSocketTransport after it's already closed raises AttributeError. - -- bpo-32610: Make asyncio.all_tasks() return only pending tasks. - -- bpo-32410: Avoid blocking on file IO in sendfile fallback code - -- bpo-33469: Fix RuntimeError after closing loop that used run_in_executor - -- bpo-33672: Fix Task.__repr__ crash with Cython's bogus coroutines - -- bpo-33654: Fix transport.set_protocol() to support switching between - asyncio.Protocol and asyncio.BufferedProtocol. Fix loop.start_tls() to - work with asyncio.BufferedProtocols. - -- bpo-33652: Pickles of type variables and subscripted generics are now - future-proof and compatible with older Python versions. - -- bpo-32493: Fixed :func:`uuid.uuid1` on FreeBSD. - -- bpo-33238: Add ``InvalidStateError`` to :mod:`concurrent.futures`. - ``Future.set_result`` and ``Future.set_exception`` now raise - ``InvalidStateError`` if the futures are not pending or running. Patch by - Jason Haydaman. - -- bpo-33618: Finalize and document preliminary and experimental TLS 1.3 - support with OpenSSL 1.1.1 - -- bpo-33625: Release GIL on ``grp.getgrnam``, ``grp.getgrgid``, - ``pwd.getpwnam`` and ``pwd.getpwuid`` if reentrant variants of these - functions are available. Patch by William Grzybowski. - -- bpo-33623: Fix possible SIGSGV when asyncio.Future is created in __del__ - -- bpo-11874: Use a better regex when breaking usage into wrappable parts. - Avoids bogus assertion errors from custom metavar strings. - -- bpo-30877: Fixed a bug in the Python implementation of the JSON decoder - that prevented the cache of parsed strings from clearing after finishing - the decoding. Based on patch by c-fos. - -- bpo-33604: Remove HMAC default to md5 marked for removal in 3.8 (removal - originally planned in 3.6, bump to 3.8 in PR 7062). - -- bpo-33582: Emit a deprecation warning for inspect.formatargspec - -- bpo-21145: Add ``functools.cached_property`` decorator, for computed - properties cached for the life of the instance. - -- bpo-33570: Change TLS 1.3 cipher suite settings for compatibility with - OpenSSL 1.1.1-pre6 and newer. OpenSSL 1.1.1 will have TLS 1.3 ciphers - enabled by default. - -- bpo-28556: Do not simplify arguments to ``typing.Union``. Now - ``Union[Manager, Employee]`` is not simplified to ``Employee`` at runtime. - Such simplification previously caused several bugs and limited - possibilities for introspection. - -- bpo-12486: :func:`tokenize.generate_tokens` is now documented as a public - API to tokenize unicode strings. It was previously present but - undocumented. - -- bpo-33540: Add a new ``block_on_close`` class attribute to - ``ForkingMixIn`` and ``ThreadingMixIn`` classes of :mod:`socketserver`. - -- bpo-33548: tempfile._candidate_tempdir_list should consider common TEMP - locations - -- bpo-33109: argparse subparsers are once again not required by default, - reverting the change in behavior introduced by bpo-26510 in 3.7.0a2. - -- bpo-33541: Remove unused private method ``_strptime.LocaleTime.__pad`` - (a.k.a. ``_LocaleTime__pad``). - -- bpo-33536: dataclasses.make_dataclass now checks for invalid field names - and duplicate fields. Also, added a check for invalid field - specifications. - -- bpo-33542: Prevent ``uuid.get_node`` from using a DUID instead of a MAC on - Windows. Patch by Zvi Effron - -- bpo-26819: Fix race condition with ``ReadTransport.resume_reading`` in - Windows proactor event loop. - -- Fix failure in ``typing.get_type_hints()`` when ClassVar was provided as a - string forward reference. - -- bpo-33516: :class:`unittest.mock.MagicMock` now supports the ``__round__`` - magic method. - -- bpo-28612: Added support for Site Maps to urllib's ``RobotFileParser`` as - :meth:`RobotFileParser.site_maps() - <urllib.robotparser.RobotFileParser.site_maps>`. Patch by Lady Red, based - on patch by Peter Wirtz. - -- bpo-28167: Remove platform.linux_distribution, which was deprecated since - 3.5. - -- bpo-33504: Switch the default dictionary implementation for - :mod:`configparser` from :class:`collections.OrderedDict` to the standard - :class:`dict` type. - -- bpo-33505: Optimize asyncio.ensure_future() by reordering if checks: 1.17x - faster. - -- bpo-33497: Add errors param to cgi.parse_multipart and make an encoding in - FieldStorage use the given errors (needed for Twisted). Patch by Amber - Brown. - -- bpo-29235: The :class:`cProfile.Profile` class can now be used as a - context manager. Patch by Scott Sanderson. - -- bpo-33495: Change dataclasses.Fields repr to use the repr of each of its - members, instead of str. This makes it more clear what each field - actually represents. This is especially true for the 'type' member. - -- bpo-26103: Correct ``inspect.isdatadescriptor`` to look for ``__set__`` or - ``__delete__``. Patch by Aaron Hall. - -- bpo-29209: Removed the ``doctype()`` method and the *html* parameter of - the constructor of :class:`~xml.etree.ElementTree.XMLParser`. The - ``doctype()`` method defined in a subclass will no longer be called. - Deprecated methods ``getchildren()`` and ``getiterator()`` in the - :mod:`~xml.etree.ElementTree` module emit now a :exc:`DeprecationWarning` - instead of :exc:`PendingDeprecationWarning`. - -- bpo-33453: Fix dataclasses to work if using literal string type - annotations or if using PEP 563 "Postponed Evaluation of Annotations". - Only specific string prefixes are detected for both ClassVar ("ClassVar" - and "typing.ClassVar") and InitVar ("InitVar" and "dataclasses.InitVar"). - -- bpo-28556: Minor fixes in typing module: add annotations to - ``NamedTuple.__new__``, pass ``*args`` and ``**kwds`` in - ``Generic.__new__``. Original PRs by Paulius Šarka and Chad Dombrova. - -- bpo-33365: Print the header values besides the header keys instead just - the header keys if *debuglevel* is set to >0 in :mod:`http.client`. Patch - by Marco Strigl. - -- bpo-20087: Updated alias mapping with glibc 2.27 supported locales. - -- bpo-33422: Fix trailing quotation marks getting deleted when looking up - byte/string literals on pydoc. Patch by Andrés Delfino. - -- bpo-28167: The function ``platform.linux_distribution`` and - ``platform.dist`` now trigger a ``DeprecationWarning`` and have been - marked for removal in Python 3.8 - -- bpo-33281: Fix ctypes.util.find_library regression on macOS. - -- bpo-33311: Text and html output generated by cgitb does not display - parentheses if the current call is done directly in the module. Patch by - Stéphane Blondon. - -- bpo-27300: The file classes in *tempfile* now accept an *errors* parameter - that complements the already existing *encoding*. Patch by Stephan Hohe. - -- bpo-32933: :func:`unittest.mock.mock_open` now supports iteration over the - file contents. Patch by Tony Flury. - -- bpo-33217: Raise :exc:`TypeError` when looking up non-Enum objects in Enum - classes and Enum members. - -- bpo-33197: Update error message when constructing invalid - inspect.Parameters Patch by Donghee Na. - -- bpo-33383: Fixed crash in the get() method of the :mod:`dbm.ndbm` database - object when it is called with a single argument. - -- bpo-33375: The warnings module now finds the Python file associated with a - warning from the code object, rather than the frame's global namespace. - This is consistent with how tracebacks and pdb find filenames, and should - work better for dynamically executed code. - -- bpo-33336: ``imaplib`` now allows ``MOVE`` command in ``IMAP4.uid()`` (RFC - 6851: IMAP MOVE Extension) and potentially as a name of supported method - of ``IMAP4`` object. - -- bpo-32455: Added *jump* parameter to :func:`dis.stack_effect`. - -- bpo-27485: Rename and deprecate undocumented functions in - :func:`urllib.parse`. - -- bpo-33332: Add ``signal.valid_signals()`` to expose the POSIX sigfillset() - functionality. - -- bpo-33251: ``ConfigParser.items()`` was fixed so that key-value pairs - passed in via :func:`vars` are not included in the resulting output. - -- bpo-33329: Fix multiprocessing regression on newer glibcs - -- bpo-33334: :func:`dis.stack_effect` now supports all defined opcodes - including NOP and EXTENDED_ARG. - -- bpo-991266: Fix quoting of the ``Comment`` attribute of - :class:`http.cookies.SimpleCookie`. - -- bpo-33131: Upgrade bundled version of pip to 10.0.1. - -- bpo-33308: Fixed a crash in the :mod:`parser` module when converting an ST - object to a tree of tuples or lists with ``line_info=False`` and - ``col_info=True``. - -- bpo-23403: lib2to3 now uses pickle protocol 4 for pre-computed grammars. - -- bpo-33266: lib2to3 now recognizes ``rf'...'`` strings. - -- bpo-11594: Ensure line-endings are respected when using lib2to3. - -- bpo-33254: Have :func:`importlib.resources.contents` and - :meth:`!importlib.abc.ResourceReader.contents` return an :term:`iterable` - instead of an :term:`iterator`. - -- bpo-33265: ``contextlib.ExitStack`` and ``contextlib.AsyncExitStack`` now - use a method instead of a wrapper function for exit callbacks. - -- bpo-33263: Fix FD leak in ``_SelectorSocketTransport`` Patch by Vlad - Starostin. - -- bpo-33256: Fix display of ``<module>`` call in the html produced by - ``cgitb.html()``. Patch by Stéphane Blondon. - -- bpo-33144: ``random.Random()`` and its subclassing mechanism got optimized - to check only once at class/subclass instantiation time whether its - ``getrandbits()`` method can be relied on by other methods, including - ``randrange()``, for the generation of arbitrarily large random integers. - Patch by Wolfgang Maier. - -- bpo-33185: Fixed regression when running pydoc with the :option:`-m` - switch. (The regression was introduced in 3.7.0b3 by the resolution of - :issue:`33053`) - - This fix also changed pydoc to add ``os.getcwd()`` to :data:`sys.path` - when necessary, rather than adding ``"."``. - -- bpo-29613: Added support for the ``SameSite`` cookie flag to the - ``http.cookies`` module. - -- bpo-33169: Delete entries of ``None`` in :data:`sys.path_importer_cache` - when :meth:`importlib.machinery.invalidate_caches` is called. - -- bpo-33203: ``random.Random.choice()`` now raises ``IndexError`` for empty - sequences consistently even when called from subclasses without a - ``getrandbits()`` implementation. - -- bpo-33224: Update difflib.mdiff() for :pep:`479`. Convert an uncaught - StopIteration in a generator into a return-statement. - -- bpo-33209: End framing at the end of C implementation of - :func:`pickle.Pickler.dump`. - -- bpo-32861: The urllib.robotparser's ``__str__`` representation now - includes wildcard entries and the "Crawl-delay" and "Request-rate" fields. - Also removes extra newlines that were being appended to the end of the - string. Patch by Michael Lazar. - -- bpo-23403: ``DEFAULT_PROTOCOL`` in :mod:`pickle` was bumped to 4. Protocol - 4 is described in :pep:`3154` and available since Python 3.4. It offers - better performance and smaller size compared to protocol 3 introduced in - Python 3.0. - -- bpo-20104: Improved error handling and fixed a reference leak in - :func:`os.posix_spawn`. - -- bpo-33106: Deleting a key from a read-only dbm database raises module - specific error instead of KeyError. - -- bpo-33175: In dataclasses, Field.__set_name__ now looks up the - __set_name__ special method on the class, not the instance, of the default - value. - -- bpo-32380: Create functools.singledispatchmethod to support generic single - dispatch on descriptors and methods. - -- bpo-33141: Have Field objects pass through __set_name__ to their default - values, if they have their own __set_name__. - -- bpo-33096: Allow ttk.Treeview.insert to insert iid that has a false - boolean value. Note iid=0 and iid=False would be same. Patch by Garvit - Khatri. - -- bpo-32873: Treat type variables and special typing forms as immutable by - copy and pickle. This fixes several minor issues and inconsistencies, and - improves backwards compatibility with Python 3.6. - -- bpo-33134: When computing dataclass's __hash__, use the lookup table to - contain the function which returns the __hash__ value. This is an - improvement over looking up a string, and then testing that string to see - what to do. - -- bpo-33127: The ssl module now compiles with LibreSSL 2.7.1. - -- bpo-32505: Raise TypeError if a member variable of a dataclass is of type - Field, but doesn't have a type annotation. - -- bpo-33078: Fix the failure on OSX caused by the tests relying on - sem_getvalue - -- bpo-33116: Add 'Field' to dataclasses.__all__. - -- bpo-32896: Fix an error where subclassing a dataclass with a field that - uses a default_factory would generate an incorrect class. - -- bpo-33100: Dataclasses: If a field has a default value that's a - MemberDescriptorType, then it's from that field being in __slots__, not an - actual default value. - -- bpo-32953: If a non-dataclass inherits from a frozen dataclass, allow - attributes to be added to the derived class. Only attributes from the - frozen dataclass cannot be assigned to. Require all dataclasses in a - hierarchy to be either all frozen or all non-frozen. - -- bpo-33097: Raise RuntimeError when ``executor.submit`` is called during - interpreter shutdown. - -- bpo-32968: Modulo and floor division involving Fraction and float should - return float. - -- bpo-33061: Add missing ``NoReturn`` to ``__all__`` in typing.py - -- bpo-33078: Fix the size handling in multiprocessing.Queue when a pickling - error occurs. - -- bpo-33064: lib2to3 now properly supports trailing commas after ``*args`` - and ``**kwargs`` in function signatures. - -- bpo-33056: FIX properly close leaking fds in - concurrent.futures.ProcessPoolExecutor. - -- bpo-33021: Release the GIL during fstat() calls, avoiding hang of all - threads when calling mmap.mmap(), os.urandom(), and random.seed(). Patch - by Nir Soffer. - -- bpo-31804: Avoid failing in multiprocessing.Process if the standard - streams are closed or None at exit. - -- bpo-33034: Providing an explicit error message when casting the port - property to anything that is not an integer value using ``urlparse()`` and - ``urlsplit()``. Patch by Matt Eaton. - -- bpo-30249: Improve struct.unpack_from() exception messages for problems - with the buffer size and offset. - -- bpo-33037: Skip sending/receiving data after SSL transport closing. - -- bpo-27683: Fix a regression in :mod:`ipaddress` that result of - :meth:`hosts` is empty when the network is constructed by a tuple - containing an integer mask and only 1 bit left for addresses. - -- bpo-22674: Add the strsignal() function in the signal module that returns - the system description of the given signal, as returned by strsignal(3). - -- bpo-32999: Fix C implementation of ``ABC.__subclasscheck__(cls, - subclass)`` crashed when ``subclass`` is not a type object. - -- bpo-33009: Fix inspect.signature() for single-parameter partialmethods. - -- bpo-32969: Expose several missing constants in zlib and fix corresponding - documentation. - -- bpo-32056: Improved exceptions raised for invalid number of channels and - sample width when read an audio file in modules :mod:`!aifc`, :mod:`wave` - and :mod:`!sunau`. - -- bpo-32970: Improved disassembly of the MAKE_FUNCTION instruction. - -- bpo-32844: Fix wrong redirection of a low descriptor (0 or 1) to stderr in - subprocess if another low descriptor is closed. - -- bpo-32960: For dataclasses, disallow inheriting frozen from non-frozen - classes, and also disallow inheriting non-frozen from frozen classes. This - restriction will be relaxed at a future date. - -- bpo-32713: Fixed tarfile.itn handling of out-of-bounds float values. Patch - by Joffrey Fuhrer. - -- bpo-32257: The ssl module now contains OP_NO_RENEGOTIATION constant, - available with OpenSSL 1.1.0h or 1.1.1. - -- bpo-32951: Direct instantiation of SSLSocket and SSLObject objects is now - prohibited. The constructors were never documented, tested, or designed as - public constructors. Users were suppose to use ssl.wrap_socket() or - SSLContext. - -- bpo-32929: Remove the tri-state parameter "hash", and add the boolean - "unsafe_hash". If unsafe_hash is True, add a __hash__ function, but if a - __hash__ exists, raise TypeError. If unsafe_hash is False, add a __hash__ - based on the values of eq= and frozen=. The unsafe_hash=False behavior is - the same as the old hash=None behavior. unsafe_hash=False is the default, - just as hash=None used to be. - -- bpo-32947: Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround for TLSv1.3 - for future compatibility with OpenSSL 1.1.1. - -- bpo-32146: Document the interaction between frozen executables and the - spawn and forkserver start methods in multiprocessing. - -- bpo-30622: The ssl module now detects missing NPN support in LibreSSL. - -- bpo-32922: dbm.open() now encodes filename with the filesystem encoding - rather than default encoding. - -- bpo-32759: Free unused arenas in multiprocessing.heap. - -- bpo-32859: In ``os.dup2``, don't check every call whether the ``dup3`` - syscall exists or not. - -- bpo-32556: nt._getfinalpathname, nt._getvolumepathname and - nt._getdiskusage now correctly convert from bytes. - -- bpo-21060: Rewrite confusing message from setup.py upload from "No dist - file created in earlier command" to the more helpful "Must create and - upload files in one command". - -- bpo-32857: In :mod:`tkinter`, ``after_cancel(None)`` now raises a - :exc:`ValueError` instead of canceling the first scheduled function. - Patch by Cheryl Sabella. - -- bpo-32852: Make sure sys.argv remains as a list when running trace. - -- bpo-31333: ``_abc`` module is added. It is a speedup module with C - implementations for various functions and methods in ``abc``. Creating an - ABC subclass and calling ``isinstance`` or ``issubclass`` with an ABC - subclass are up to 1.5x faster. In addition, this makes Python start-up up - to 10% faster. - - Note that the new implementation hides internal registry and caches, - previously accessible via private attributes ``_abc_registry``, - ``_abc_cache``, and ``_abc_negative_cache``. There are three debugging - helper methods that can be used instead ``_dump_registry``, - ``_abc_registry_clear``, and ``_abc_caches_clear``. - -- bpo-32841: Fixed ``asyncio.Condition`` issue which silently ignored - cancellation after notifying and cancelling a conditional lock. Patch by - Bar Harel. - -- bpo-32819: ssl.match_hostname() has been simplified and no longer depends - on re and ipaddress module for wildcard and IP addresses. Error reporting - for invalid wildcards has been improved. - -- bpo-19675: ``multiprocessing.Pool`` no longer leaks processes if its - initialization fails. - -- bpo-32394: socket: Remove - TCP_FASTOPEN,TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL flags on older version - Windows during run-time. - -- bpo-31787: Fixed refleaks of ``__init__()`` methods in various modules. - (Contributed by Oren Milman) - -- bpo-30157: Fixed guessing quote and delimiter in csv.Sniffer.sniff() when - only the last field is quoted. Patch by Jake Davis. - -- bpo-30688: Added support of ``\N{name}`` escapes in regular expressions. - Based on patch by Jonathan Eunice. - -- bpo-32792: collections.ChainMap() preserves the order of the underlying - mappings. - -- bpo-32775: :func:`fnmatch.translate` no longer produces patterns which - contain set operations. Sets starting with '[' or containing '--', '&&', - '~~' or '||' will be interpreted differently in regular expressions in - future versions. Currently they emit warnings. fnmatch.translate() now - avoids producing patterns containing such sets by accident. - -- bpo-32622: Implement native fast sendfile for Windows proactor event loop. - -- bpo-32777: Fix a rare but potential pre-exec child process deadlock in - subprocess on POSIX systems when marking file descriptors inheritable on - exec in the child process. This bug appears to have been introduced in - 3.4. - -- bpo-32647: The ctypes module used to depend on indirect linking for - dlopen. The shared extension is now explicitly linked against libdl on - platforms with dl. - -- bpo-32749: A :mod:`dbm.dumb` database opened with flags 'r' is now - read-only. :func:`dbm.dumb.open` with flags 'r' and 'w' no longer creates - a database if it does not exist. - -- bpo-32741: Implement ``asyncio.TimerHandle.when()`` method. - -- bpo-32691: Use mod_spec.parent when running modules with pdb - -- bpo-32734: Fixed ``asyncio.Lock()`` safety issue which allowed acquiring - and locking the same lock multiple times, without it being free. Patch by - Bar Harel. - -- bpo-32727: Do not include name field in SMTP envelope from address. Patch - by Stéphane Wirtel - -- bpo-31453: Add TLSVersion constants and SSLContext.maximum_version / - minimum_version attributes. The new API wraps OpenSSL 1.1 - https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html - feature. - -- bpo-24334: Internal implementation details of ssl module were cleaned up. - The SSLSocket has one less layer of indirection. Owner and session - information are now handled by the SSLSocket and SSLObject constructor. - Channel binding implementation has been simplified. - -- bpo-31848: Fix the error handling in Aifc_read.initfp() when the SSND - chunk is not found. Patch by Zackery Spytz. - -- bpo-32585: Add Ttk spinbox widget to :mod:`tkinter.ttk`. Patch by Alan D - Moore. - -- bpo-32512: :mod:`profile` CLI accepts ``-m module_name`` as an alternative - to script path. - -- bpo-8525: help() on a type now displays builtin subclasses. This is - intended primarily to help with notification of more specific exception - subclasses. - - Patch by Sanyam Khurana. - -- bpo-31639: http.server now exposes a ThreadingHTTPServer class and uses it - when the module is run with ``-m`` to cope with web browsers pre-opening - sockets. - -- bpo-29877: compileall: import ProcessPoolExecutor only when needed, - preventing hangs on low resource platforms - -- bpo-32221: Various functions returning tuple containing IPv6 addresses now - omit ``%scope`` part since the same information is already encoded in - *scopeid* tuple item. Especially this speeds up :func:`socket.recvfrom` - when it receives multicast packet since useless resolving of network - interface name is omitted. - -- bpo-32147: :func:`binascii.unhexlify` is now up to 2 times faster. Patch - by Sergey Fedoseev. - -- bpo-30693: The TarFile class now recurses directories in a reproducible - way. - -- bpo-30693: The ZipFile class now recurses directories in a reproducible - way. - -- bpo-31680: Added :data:`curses.ncurses_version`. - -- bpo-31908: Fix output of cover files for ``trace`` module command-line - tool. Previously emitted cover files only when ``--missing`` option was - used. Patch by Michael Selik. - -- bpo-31608: Raise a ``TypeError`` instead of crashing if a - ``collections.deque`` subclass returns a non-deque from ``__new__``. Patch - by Oren Milman. - -- bpo-31425: Add support for sockets of the AF_QIPCRTR address family, - supported by the Linux kernel. This is used to communicate with services, - such as GPS or radio, running on Qualcomm devices. Patch by Bjorn - Andersson. - -- bpo-22005: Implemented unpickling instances of - :class:`~datetime.datetime`, :class:`~datetime.date` and - :class:`~datetime.time` pickled by Python 2. ``encoding='latin1'`` should - be used for successful decoding. - -- bpo-27645: :class:`sqlite3.Connection` now exposes a - :class:`~sqlite3.Connection.backup` method, if the underlying SQLite - library is at version 3.6.11 or higher. Patch by Lele Gaifax. - -- bpo-16865: Support arrays >=2GiB in :mod:`ctypes`. Patch by Segev Finer. - -- bpo-31508: Removed support of arguments in - ``tkinter.ttk.Treeview.selection``. It was deprecated in 3.6. Use - specialized methods like ``selection_set`` for changing the selection. - -- bpo-29456: Fix bugs in hangul normalization: u1176, u11a7 and u11c3 - -Documentation -------------- - -- bpo-21257: Document :func:`http.client.parse_headers`. - -- bpo-34764: Improve example of iter() with 2nd sentinel argument. - -- bpo-35564: Explicitly set master_doc variable in conf.py for compliance - with Sphinx 2.0 - -- bpo-35511: Specified that profile.Profile class doesn't not support enable - or disable methods. Also, elaborated that Profile object as a context - manager is only supported in cProfile module. - -- bpo-10536: Enhance the gettext docs. Patch by Éric Araujo - -- bpo-35089: Remove mention of ``typing.io`` and ``typing.re``. Their types - should be imported from ``typing`` directly. - -- bpo-35038: Fix the documentation about an unexisting ``f_restricted`` - attribute in the frame object. Patch by Stéphane Wirtel - -- bpo-35042: Replace PEP XYZ by the pep role and allow to use the direct - links to the PEPs. - -- bpo-35044: Fix the documentation with the role ``exc`` for the - appropriated exception. Patch by Stéphane Wirtel - -- bpo-35035: Rename documentation for :mod:`email.utils` to - ``email.utils.rst``. - -- bpo-34967: Use app.add_object_type() instead of the deprecated Sphinx - function app.description_unit() - -- bpo-34913: Add documentation about the new command line interface of the - gzip module. - -- bpo-32174: chm document displays non-ASCII characters properly on some - MBCS Windows systems. - -- bpo-11233: Create availability directive for documentation. Original - patch by Georg Brandl. - -- bpo-34790: Document how passing coroutines to asyncio.wait() can be - confusing. - -- bpo-34552: Make clear that ``==`` operator sometimes is equivalent to - ``is``. The ``<``, ``<=``, ``>`` and ``>=`` operators are only defined - where they make sense. - -- bpo-28617: Fixed info in the stdtypes docs concerning the types that - support membership tests. - -- bpo-20177: Migrate datetime.date.fromtimestamp to Argument Clinic. Patch - by Tim Hoffmann. - -- bpo-34065: Fix wrongly written basicConfig documentation markup syntax - -- bpo-33460: replaced ellipsis with correct error codes in tutorial chapter - 3. - -- bpo-33847: Add '@' operator entry to index. - -- bpo-33409: Clarified the relationship between :pep:`538`'s - PYTHONCOERCECLOCALE and PEP 540's PYTHONUTF8 mode. - -- bpo-33197: Add versionadded tag to the documentation of - ParameterKind.description - -- bpo-17045: Improve the C-API doc for PyTypeObject. This includes adding - several quick-reference tables and a lot of missing slot/typedef entries. - The existing entries were also cleaned up with a slightly more consistent - format. - -- bpo-33736: Improve the documentation of :func:`asyncio.open_connection`, - :func:`asyncio.start_server` and their UNIX socket counterparts. - -- bpo-23859: Document that ``asyncio.wait()`` does not cancel its futures on - timeout. - -- bpo-32436: Document :pep:`567` changes to asyncio. - -- bpo-33604: Update HMAC md5 default to a DeprecationWarning, bump removal - to 3.8. - -- bpo-33594: Document ``getargspec``, ``from_function`` and ``from_builtin`` - as deprecated in their respective docstring, and include version since - deprecation in DeprecationWarning message. - -- bpo-33503: Fix broken pypi link - -- bpo-33421: Add missing documentation for ``typing.AsyncContextManager``. - -- bpo-33487: BZ2file now emit a DeprecationWarning when buffering=None is - passed, the deprecation message and documentation also now explicitly - state it is deprecated since 3.0. - -- bpo-33378: Add Korean language switcher for https://docs.python.org/3/ - -- bpo-33276: Clarify that the ``__path__`` attribute on modules cannot be - just any value. - -- bpo-33201: Modernize documentation for writing C extension types. - -- bpo-33195: Deprecate ``Py_UNICODE`` usage in ``c-api/arg`` document. - ``Py_UNICODE`` related APIs are deprecated since Python 3.3, but it is - missed in the document. - -- bpo-33126: Document PyBuffer_ToContiguous(). - -- bpo-27212: Modify documentation for the :func:`islice` recipe to consume - initial values up to the start index. - -- bpo-28247: Update :mod:`zipapp` documentation to describe how to make - standalone applications. - -- bpo-18802: Documentation changes for ipaddress. Patch by Jon Foster and - Berker Peksag. - -- bpo-27428: Update documentation to clarify that ``WindowsRegistryFinder`` - implements ``MetaPathFinder``. (Patch by Himanshu Lakhara) - -- bpo-28124: The ssl module function ssl.wrap_socket() has been - de-emphasized and deprecated in favor of the more secure and efficient - SSLContext.wrap_socket() method. - -- bpo-17232: Clarify docs for -O and -OO. Patch by Terry Reedy. - -- bpo-32436: Add documentation for the contextvars module (PEP 567). - -- bpo-32800: Update link to w3c doc for xml default namespaces. - -- bpo-11015: Update :mod:`test.support` documentation. - -- bpo-32613: Update the faq/windows.html to use the py command from PEP 397 - instead of python. - -- bpo-8722: Document :meth:`__getattr__` behavior when property :meth:`get` - method raises :exc:`AttributeError`. - -- bpo-32614: Modify RE examples in documentation to use raw strings to - prevent :exc:`DeprecationWarning` and add text to REGEX HOWTO to highlight - the deprecation. - -- bpo-20709: Remove the paragraph where we explain that os.utime() does not - support a directory as path under Windows. Patch by Jan-Philip Gehrcke - -- bpo-32722: Remove the bad example in the tutorial of the Generator - Expression. Patch by Stéphane Wirtel - -- bpo-31972: Improve docstrings for ``pathlib.PurePath`` subclasses. - -- bpo-30607: Use the externalized ``python-docs-theme`` package when - building the documentation. - -- bpo-8243: Add a note about curses.addch and curses.addstr exception - behavior when writing outside a window, or pad. - -- bpo-32337: Update documentation related with ``dict`` order. - -- bpo-25041: Document ``AF_PACKET`` in the :mod:`socket` module. - -- bpo-31432: Clarify meaning of CERT_NONE, CERT_OPTIONAL, and CERT_REQUIRED - flags for ssl.SSLContext.verify_mode. - -Tests ------ - -- bpo-35772: Fix sparse file tests of test_tarfile on ppc64 with the tmpfs - filesystem. Fix the function testing if the filesystem supports sparse - files: create a file which contains data and "holes", instead of creating - a file which contains no data. tmpfs effective block size is a page size - (tmpfs lives in the page cache). RHEL uses 64 KiB pages on aarch64, ppc64, - ppc64le, only s390x and x86_64 use 4 KiB pages, whereas the test punch - holes of 4 KiB. - -- bpo-35045: Make ssl tests less strict and also accept TLSv1 as system - default. The changes unbreaks test_min_max_version on Fedora 29. - -- bpo-32710: ``test_asyncio/test_sendfile.py`` now resets the event loop - policy using :func:`tearDownModule` as done in other tests, to prevent a - warning when running tests on Windows. - -- bpo-33717: test.pythoninfo now logs information of all clocks, not only - time.time() and time.perf_counter(). - -- bpo-35488: Add a test to pathlib's Path.match() to verify it does not - support glob-style ** recursive pattern matching. - -- bpo-31731: Fix a race condition in ``check_interrupted_write()`` of - test_io: create directly the thread with SIGALRM signal blocked, rather - than blocking the signal later from the thread. Previously, it was - possible that the thread gets the signal before the signal is blocked. - -- bpo-35424: Fix test_multiprocessing_main_handling: use - :class:`multiprocessing.Pool` with a context manager and then explicitly - join the pool. - -- bpo-35519: Rename :mod:`test.bisect` module to :mod:`test.bisect_cmd` to - avoid conflict with :mod:`bisect` module when running directly a test like - ``./python Lib/test/test_xmlrpc.py``. - -- bpo-35513: Replace :func:`time.time` with :func:`time.monotonic` in tests - to measure time delta. - -- bpo-34279: :func:`test.support.run_unittest` no longer raise - :exc:`TestDidNotRun` if the test result contains skipped tests. The - exception is now only raised if no test have been run and no test have - been skipped. - -- bpo-35412: Add testcase to ``test_future4``: check unicode literal. - -- bpo-26704: Added test demonstrating double-patching of an instance method. - Patch by Anthony Sottile. - -- bpo-33725: test_multiprocessing_fork may crash on recent versions of - macOS. Until the issue is resolved, skip the test on macOS. - -- bpo-35352: Modify test_asyncio to use the certificate set from the test - directory. - -- bpo-35317: Fix ``mktime()`` overflow error in ``test_email``: run - ``test_localtime_daylight_true_dst_true()`` and - ``test_localtime_daylight_false_dst_true()`` with a specific timezone. - -- bpo-21263: After several reports that test_gdb does not work properly on - macOS and since gdb is not shipped by default anymore, test_gdb is now - skipped on macOS when LLVM Clang has been used to compile Python. Patch by - Lysandros Nikolaou - -- bpo-34279: regrtest issue a warning when no tests have been executed in a - particular test file. Also, a new final result state is issued if no test - have been executed across all test files. Patch by Pablo Galindo. - -- bpo-34962: make docstest in Doc now passes., and is enforced in CI - -- bpo-23596: Use argparse for the command line of the gzip module. Patch by - Antony Lee - -- bpo-34537: Fix ``test_gdb.test_strings()`` when ``LC_ALL=C`` and GDB was - compiled with Python 3.6 or earlier. - -- bpo-34587: test_socket: Remove RDSTest.testCongestion(). The test tries to - fill the receiver's socket buffer and expects an error. But the RDS - protocol doesn't require that. Moreover, the Linux implementation of RDS - expects that the producer of the messages reduces its rate, it's not the - role of the receiver to trigger an error. The test fails on Fedora 28 by - design, so just remove it. - -- bpo-34661: Fix test_shutil if unzip doesn't support -t. - -- bpo-34200: Fixed non-deterministic flakiness of test_pkg by not using the - scary test.support.module_cleanup() logic to save and restore sys.modules - contents between test cases. - -- bpo-34569: The experimental PEP 554 data channels now correctly pass - negative PyLong objects between subinterpreters on 32-bit systems. Patch - by Michael Felt. - -- bpo-34594: Fix usage of hardcoded ``errno`` values in the tests. - -- bpo-34579: Fix test_embed for AIX Patch by Michael Felt - -- bpo-34542: Use 3072 RSA keys and SHA-256 signature for test certs and - keys. - -- bpo-11193: Remove special condition for AIX in - ``test_subprocess.test_undecodable_env`` - -- bpo-34347: Fix ``test_utf8_mode.test_cmd_line`` for AIX - -- bpo-34490: On AIX with AF_UNIX family sockets getsockname() does not - provide 'sockname', so skip calls to transport.get_extra_info('sockname') - -- bpo-34391: Fix ftplib test for TLS 1.3 by reading from data socket. - -- bpo-11192: Fix ``test_socket`` on AIX 6.1 and later IPv6 zone id supports - only supported by ``inet_pton6_zone()``. Switch to runtime-based - ``platform.system()`` to establish current platform rather than build-time - based ``sys.platform()`` - -- bpo-34399: Update all RSA keys and DH params to use at least 2048 bits. - -- bpo-34373: Fix ``test_mktime`` and ``test_pthread_getcpuclickid`` tests - for AIX Add range checking for ``_PyTime_localtime`` for AIX Patch by - Michael Felt - -- bpo-11191: Skip the distutils test 'test_search_cpp' when using XLC as - compiler patch by aixtools (Michael Felt) - -- Improved an error message when mock assert_has_calls fails. - -- bpo-33746: Fix test_unittest when run in verbose mode. - -- bpo-33901: Fix test_dbm_gnu on macOS with gdbm 1.15: add a larger value to - make sure that the file size changes. - -- bpo-33873: Fix a bug in ``regrtest`` that caused an extra test to run if - --huntrleaks/-R was used. Exit with error in case that invalid parameters - are specified to --huntrleaks/-R (at least one warmup run and one - repetition must be used). - -- bpo-33562: Check that a global asyncio event loop policy is not left - behind by any tests. - -- bpo-33655: Ignore test_posix_fallocate failures on BSD platforms that - might be due to running on ZFS. - -- bpo-32962: Fixed test_gdb when Python is compiled with flags -mcet - -fcf-protection -O0. - -- bpo-33358: Fix ``test_embed.test_pre_initialization_sys_options()`` when - the interpreter is built with ``--enable-shared``. - -- bpo-32872: Avoid regrtest compatibility issue with namespace packages. - -- bpo-32517: Fix failing ``test_asyncio`` on macOS 10.12.2+ due to transport - of ``KqueueSelector`` loop was not being closed. - -- bpo-32663: Making sure the ``SMTPUTF8SimTests`` class of tests gets run in - ``test_smtplib.py``. - -- bpo-27643: Test_C test case needs "signed short" bitfields, but the IBM - XLC compiler (on AIX) does not support this Skip the code and test when - AIX and XLC are used - - Applicable to Python2-2.7 and later - -- bpo-19417: Add test_bdb.py. - -- bpo-31809: Add tests to verify connection with secp ECDH curves. - -Build ------ - -- bpo-34691: The _contextvars module is now built into the core Python - library on Windows. - -- bpo-35683: Improved Azure Pipelines build steps and now verifying layouts - correctly - -- bpo-35642: Remove asynciomodule.c from pythoncore.vcxproj - -- bpo-35550: Fix incorrect Solaris #ifdef checks to look for __sun && __SVR4 - instead of sun when compiling. - -- bpo-35499: ``make profile-opt`` no longer replaces ``CFLAGS_NODIST`` with - ``CFLAGS``. It now adds profile-guided optimization (PGO) flags to - ``CFLAGS_NODIST``: existing ``CFLAGS_NODIST`` flags are kept. - -- bpo-35257: Avoid leaking the linker flags from Link Time Optimizations - (LTO) into distutils when compiling C extensions. - -- bpo-35351: When building Python with clang and LTO, LTO flags are no - longer passed into CFLAGS to build third-party C extensions through - distutils. - -- bpo-35139: Fix a compiler error when statically linking ``pyexpat`` in - ``Modules/Setup``. - -- bpo-35059: PCbuild: Set InlineFunctionExpansion to OnlyExplicitInline - ("/Ob1" option) in pyproject.props in Debug mode to expand functions - marked as inline. This change should make Python compiled in Debug mode a - little bit faster on Windows. - -- bpo-35011: Restores the use of pyexpatns.h to isolate our embedded copy of - the expat C library so that its symbols do not conflict at link or dynamic - loading time with an embedding application or other extension modules with - their own version of libexpat. - -- bpo-28015: Have --with-lto works correctly with clang. - -- bpo-34765: Update the outdated install-sh file to the latest revision from - automake v1.16.1 - -- bpo-34585: Check for floating-point byte order in configure.ac using - compilation tests instead of executing code, so that these checks work in - cross-compiled builds. - -- bpo-34710: Fixed SSL module build with OpenSSL & pedantic CFLAGS. - -- bpo-34582: Add JUnit XML output for regression tests and update Azure - DevOps builds. - -- bpo-34081: Make Sphinx warnings as errors in the Docs Makefile. - -- bpo-34555: Fix for case where it was not possible to have both - ``HAVE_LINUX_VM_SOCKETS_H`` and ``HAVE_SOCKADDR_ALG`` be undefined. - -- bpo-33015: Fix an undefined behaviour in the pthread implementation of - :c:func:`PyThread_start_new_thread`: add a function wrapper to always - return ``NULL``. - -- bpo-34245: The Python shared library is now installed with write - permission (mode 0755), which is the standard way of installing such - libraries. - -- bpo-34121: Fix detection of C11 atomic support on clang. - -- bpo-32430: Rename Modules/Setup.dist to Modules/Setup, and remove the - necessity to copy the former manually to the latter when updating the - local source tree. - -- bpo-30345: Add -g to LDFLAGS when compiling with LTO to get debug symbols. - -- bpo-5755: Move ``-Wstrict-prototypes`` option to ``CFLAGS_NODIST`` from - ``OPT``. This option emitted annoying warnings when building extension - modules written in C++. - -- bpo-33614: Ensures module definition files for the stable ABI on Windows - are correctly regenerated. - -- bpo-33648: The --with-c-locale-warning configuration flag has been - removed. It has had no effect for about a year. - -- bpo-33522: Enable CI builds on Visual Studio Team Services at - https://python.visualstudio.com/cpython - -- bpo-33512: configure's check for "long double" has been simplified - -- bpo-33483: C compiler is now correctly detected from the standard - environment variables. --without-gcc and --with-icc options have been - removed. - -- bpo-33394: Enable the verbose build for extension modules, when GNU make - is passed macros on the command line. - -- bpo-33393: Update config.guess and config.sub files. - -- bpo-33377: Add new triplets for mips r6 and riscv variants (used in - extension suffixes). - -- bpo-32232: By default, modules configured in ``Modules/Setup`` are no - longer built with ``-DPy_BUILD_CORE``. Instead, modules that specifically - need that preprocessor definition include it in their individual entries. - -- bpo-33182: The embedding tests can once again be built with clang 6.0 - -- bpo-33163: Upgrade pip to 9.0.3 and setuptools to v39.0.1. - -- bpo-33012: gcc 8 has added a new warning heuristic to detect invalid - function casts and a stock python build seems to hit that warning quite - often. The most common is the cast of a METH_NOARGS function (that uses - just one argument) to a PyCFunction. Fix this by adding a dummy argument - to all functions that implement METH_NOARGS. - -- bpo-32898: Fix the python debug build when using COUNT_ALLOCS. - -- bpo-29442: Replace optparse with argparse in setup.py - -Windows -------- - -- bpo-35890: Fix API calling consistency of GetVersionEx and wcstok. - -- bpo-32560: The ``py`` launcher now forwards its ``STARTUPINFO`` structure - to child processes. - -- bpo-35854: Fix EnvBuilder and --symlinks in venv on Windows - -- bpo-35811: Avoid propagating venv settings when launching via py.exe - -- bpo-35797: Fix default executable used by the multiprocessing module - -- bpo-35758: Allow building on ARM with MSVC. - -- bpo-29734: Fix handle leaks in os.stat on Windows. - -- bpo-35596: Use unchecked PYCs for the embeddable distro to avoid zipimport - restrictions. - -- bpo-35596: Fix vcruntime140.dll being added to embeddable distro multiple - times. - -- bpo-35402: Update Windows build to use Tcl and Tk 8.6.9 - -- bpo-35401: Updates Windows build to OpenSSL 1.1.0j - -- bpo-34977: venv on Windows will now use a python.exe redirector rather - than copying the actual binaries from the base environment. - -- bpo-34977: Adds support for building a Windows App Store package - -- bpo-35067: Remove _distutils_findvs module and use vswhere.exe instead. - -- bpo-32557: Allow shutil.disk_usage to take a file path on Windows - -- bpo-34770: Fix a possible null pointer dereference in pyshellext.cpp. - -- bpo-34603: Fix returning structs from functions produced by MSVC - -- bpo-34581: Guard MSVC-specific code in socketmodule.c with ``#ifdef - _MSC_VER``. - -- bpo-34532: Fixes exit code of list version arguments for py.exe. - -- bpo-34062: Fixed the '--list' and '--list-paths' arguments for the py.exe - launcher - -- bpo-34225: Ensure INCLUDE and LIB directories do not end with a backslash. - -- bpo-34011: A suite of code has been changed which copied across DLLs and - init.tcl from the running Python location into a venv being created. These - copies are needed only when running from a Python source build, and the - copying code is now only run when that is the case, rather than whenever a - venv is created. - -- bpo-34006: Revert line length limit for Windows help docs. The line-length - limit is not needed because the pages appear in a separate app rather than - on a browser tab. It can also interact badly with the DPI setting. - -- bpo-31546: Restore running PyOS_InputHook while waiting for user input at - the prompt. The restores integration of interactive GUI windows (such as - Matplotlib figures) with the prompt on Windows. - -- bpo-30237: Output error when ReadConsole is canceled by - CancelSynchronousIo instead of crashing. - -- bpo-33895: GIL is released while calling functions that acquire Windows - loader lock. - -- bpo-33720: Reduces maximum marshal recursion depth on release builds. - -- bpo-29097: Fix bug where :meth:`datetime.fromtimestamp` erroneously throws - an :exc:`OSError` on Windows for values between 0 and 86400. Patch by - Ammar Askar. - -- bpo-33316: PyThread_release_lock always fails - -- bpo-33184: Update Windows installer to use OpenSSL 1.1.0h. - -- bpo-32890: Fix usage of GetLastError() instead of errno in os.execve() and - os.truncate(). - -- bpo-33016: Fix potential use of uninitialized memory in - nt._getfinalpathname - -- bpo-32903: Fix a memory leak in os.chdir() on Windows if the current - directory is set to a UNC path. - -- bpo-32901: Update Tcl and Tk versions to 8.6.8 - -- bpo-31966: Fixed WindowsConsoleIO.write() for writing empty data. - -- bpo-32409: Ensures activate.bat can handle Unicode contents. - -- bpo-32457: Improves handling of denormalized executable path when - launching Python. - -- bpo-32370: Use the correct encoding for ipconfig output in the uuid - module. Patch by Segev Finer. - -- bpo-29248: Fix :func:`os.readlink` on Windows, which was mistakenly - treating the ``PrintNameOffset`` field of the reparse data buffer as a - number of characters instead of bytes. Patch by Craig Holmquist and SSE4. - -- bpo-1104: Correctly handle string length in - ``msilib.SummaryInfo.GetProperty()`` to prevent it from truncating the - last character. - -macOS ------ - -- bpo-35401: Update macOS installer to use OpenSSL 1.1.0j. - -- bpo-35025: Properly guard the use of the ``CLOCK_GETTIME`` et al. macros - in ``timemodule`` on macOS. - -- bpo-24658: On macOS, fix reading from and writing into a file with a size - larger than 2 GiB. - -- bpo-34405: Update to OpenSSL 1.1.0i for macOS installer builds. - -- bpo-33635: In macOS stat on some file descriptors (/dev/fd/3 f.e) will - result in bad file descriptor OSError. Guard against this exception was - added in is_dir, is_file and similar methods. DirEntry.is_dir can also - throw this exception so _RecursiveWildcardSelector._iterate_directories - was also extended with the same error ignoring pattern. - -- bpo-13631: The .editrc file in user's home directory is now processed - correctly during the readline initialization through editline emulation on - macOS. - -- bpo-33184: Update macOS installer build to use OpenSSL 1.1.0h. - -- bpo-32726: Build and link with private copy of Tcl/Tk 8.6 for the macOS - 10.6+ installer. The 10.9+ installer variant already does this. This - means that the Python 3.7 provided by the python.org macOS installers no - longer need or use any external versions of Tcl/Tk, either system-provided - or user-installed, such as ActiveTcl. - -- bpo-32901: Update macOS 10.9+ installer to Tcl/Tk 8.6.8. - -- bpo-31903: In :mod:`!_scproxy`, drop the GIL when calling into - ``SystemConfiguration`` to avoid deadlocks. - -IDLE ----- - -- bpo-35770: IDLE macosx deletes Options => Configure IDLE. It previously - deleted Window => Zoom Height by mistake. (Zoom Height is now on the - Options menu). On Mac, the settings dialog is accessed via Preferences on - the IDLE menu. - -- bpo-35769: Change IDLE's new file name from 'Untitled' to 'untitled' - -- bpo-35660: Fix imports in idlelib.window. - -- bpo-35641: Proper format ``calltip`` when the function has no docstring. - -- bpo-33987: Use ttk Frame for ttk widgets. - -- bpo-34055: Fix erroneous 'smart' indents and newlines in IDLE Shell. - -- bpo-35591: Find Selection now works when selection not found. - -- bpo-35196: Speed up squeezer line counting. - -- bpo-35598: Update config_key: use PEP 8 names and ttk widgets, make some - objects global, and add tests. - -- bpo-28097: Add Previous/Next History entries to Shell menu. - -- bpo-35208: Squeezer now properly counts wrapped lines before newlines. - -- bpo-35555: Gray out Code Context menu entry when it's not applicable. - -- bpo-35521: Document the IDLE editor code context feature. Add some - internal references within the IDLE doc. - -- bpo-22703: The Code Context menu label now toggles between Show/Hide Code - Context. The Zoom Height menu now toggles between Zoom/Restore Height. - Zoom Height has moved from the Window menu to the Options menu. - -- bpo-35213: Where appropriate, use 'macOS' in idlelib. - -- bpo-34864: On macOS, warn if the system preference "Prefer tabs when - opening documents" is set to "Always". - -- bpo-34864: Document two IDLE on MacOS issues. The System Preferences Dock - "prefer tabs always" setting disables some IDLE features. Menus are a bit - different than as described for Windows and Linux. - -- bpo-35202: Remove unused imports from lib/idlelib - -- bpo-33000: Document that IDLE's shell has no line limit. A program that - runs indefinitely can overfill memory. - -- bpo-23220: Explain how IDLE's Shell displays output. - -- bpo-35099: Improve the doc about IDLE running user code. The section is - renamed from "IDLE -- console differences" is renamed "Running user code". - It mostly covers the implications of using custom :samp:`sys.std{xxx}` - objects. - -- bpo-35097: Add IDLE doc subsection explaining editor windows. Topics - include opening, title and status bar, .py* extension, and running. - -- bpo-35093: Document the IDLE document viewer in the IDLE doc. Add a - paragraph in "Help and preferences", "Help sources" subsection. - -- bpo-35088: Update idlelib.help.copy_string docstring. We now use git and - backporting instead of hg and forward merging. - -- bpo-35087: Update idlelib help files for the current doc build. The main - change is the elimination of chapter-section numbers. - -- bpo-34548: Use configured color theme for read-only text views. - -- bpo-1529353: Enable "squeezing" of long outputs in the shell, to avoid - performance degradation and to clean up the history without losing it. - Squeezed outputs may be copied, viewed in a separate window, and - "unsqueezed". - -- bpo-34047: Fixed mousewheel scrolling direction on macOS. - -- bpo-34275: Make IDLE calltips always visible on Mac. Some MacOS-tk - combinations need .update_idletasks(). Patch by Kevin Walzer. - -- bpo-34120: Fix unresponsiveness after closing certain windows and dialogs. - -- bpo-33975: Avoid small type when running htests. Since part of the purpose - of human-viewed tests is to determine that widgets look right, it is - important that they look the same for testing as when running IDLE. - -- bpo-33905: Add test for idlelib.stackview.StackBrowser. - -- bpo-33924: Change mainmenu.menudefs key 'windows' to 'window'. Every other - menudef key is lowercase version of main menu entry. - -- bpo-33906: Rename idlelib.windows as window Match Window on the main menu - and remove last plural module name. - -- bpo-33917: Fix and document idlelib/idle_test/template.py. The revised - file compiles, runs, and tests OK. idle_test/README.txt explains how to - use it to create new IDLE test files. - -- bpo-33904: IDLE: In rstrip, rename class RstripExtension as Rstrip - -- bpo-33907: For consistency and clarity, rename an IDLE module and classes. - Module calltips and its class CallTips are now calltip and Calltip. In - module calltip_w, class CallTip is now CalltipWindow. - -- bpo-33856: Add "help" in the welcome message of IDLE - -- bpo-33839: IDLE: refactor ToolTip and CallTip and add documentation and - tests - -- bpo-33855: Minimally test all IDLE modules. Add missing files, import - module, instantiate classes, and check coverage. Check existing files. - -- bpo-33656: On Windows, add API call saying that tk scales for DPI. On - Windows 8.1+ or 10, with DPI compatibility properties of the Python binary - unchanged, and a monitor resolution greater than 96 DPI, this should make - text and lines sharper. It should otherwise have no effect. - -- bpo-33768: Clicking on a context line moves that line to the top of the - editor window. - -- bpo-33763: IDLE: Use read-only text widget for code context instead of - label widget. - -- bpo-33664: Scroll IDLE editor text by lines. Previously, the mouse wheel - and scrollbar slider moved text by a fixed number of pixels, resulting in - partial lines at the top of the editor box. The change also applies to - the shell and grep output windows, but not to read-only text views. - -- bpo-33679: Enable theme-specific color configuration for Code Context. Use - the Highlights tab to see the setting for built-in themes or add settings - to custom themes. - -- bpo-33642: Display up to maxlines non-blank lines for Code Context. If - there is no current context, show a single blank line. - -- bpo-33628: IDLE: Cleanup codecontext.py and its test. - -- bpo-33564: IDLE's code context now recognizes async as a block opener. - -- bpo-21474: Update word/identifier definition from ascii to unicode. In - text and entry boxes, this affects selection by double-click, movement - left/right by control-left/right, and deletion left/right by - control-BACKSPACE/DEL. - -- bpo-33204: IDLE: consistently color invalid string prefixes. A 'u' string - prefix cannot be paired with either 'r' or 'f'. Consistently color as much - of the prefix, starting at the right, as is valid. Revise and extend - colorizer test. - -- bpo-32984: Set ``__file__`` while running a startup file. Like Python, - IDLE optionally runs one startup file in the Shell window before - presenting the first interactive input prompt. For IDLE, ``-s`` runs a - file named in environmental variable :envvar:`IDLESTARTUP` or - :envvar:`PYTHONSTARTUP`; ``-r file`` runs ``file``. Python sets - ``__file__`` to the startup file name before running the file and unsets - it before the first prompt. IDLE now does the same when run normally, - without the ``-n`` option. - -- bpo-32940: Simplify and rename StringTranslatePseudoMapping in pyparse. - -- bpo-32916: Change ``str`` to ``code`` in pyparse. - -- bpo-32905: Remove unused code in pyparse module. - -- bpo-32874: Add tests for pyparse. - -- bpo-32837: Using the system and place-dependent default encoding for - open() is a bad idea for IDLE's system and location-independent files. - -- bpo-32826: Add "encoding=utf-8" to open() in IDLE's test_help_about. GUI - test test_file_buttons() only looks at initial ascii-only lines, but - failed on systems where open() defaults to 'ascii' because readline() - internally reads and decodes far enough ahead to encounter a non-ascii - character in CREDITS.txt. - -- bpo-32831: Add docstrings and tests for codecontext. - -- bpo-32765: Update configdialog General tab docstring to add new widgets to - the widget list. - -Tools/Demos ------------ - -- bpo-35884: Add a benchmark script for timing various ways to access - variables: ``Tools/scripts/var_access_benchmark.py``. - -- bpo-34989: python-gdb.py now handles errors on computing the line number - of a Python frame. - -- bpo-20260: Argument Clinic now has non-bitwise unsigned int converters. - -- bpo-32962: python-gdb now catches ``UnicodeDecodeError`` exceptions when - calling ``string()``. - -- bpo-32962: python-gdb now catches ValueError on read_var(): when Python - has no debug symbols for example. - -- bpo-33189: :program:`pygettext.py` now recognizes only literal strings as - docstrings and translatable strings, and rejects bytes literals and - f-string expressions. - -- bpo-31920: Fixed handling directories as arguments in the ``pygettext`` - script. Based on patch by Oleg Krasnikov. - -- bpo-29673: Fix pystackv and pystack gdbinit macros. - -- bpo-25427: Remove the pyvenv script in favor of ``python3 -m venv`` in - order to lower confusion as to what Python interpreter a virtual - environment will be created for. - -- bpo-32885: Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disable - automatic backup creation (files with ``~`` suffix). - -- bpo-32222: Fix pygettext not extracting docstrings for functions with type - annotated arguments. Patch by Toby Harradine. - -- bpo-31583: Fix 2to3 for using with --add-suffix option but without - --output-dir option for relative path to files in current directory. - -C API ------ - -- bpo-35713: The :c:func:`!PyByteArray_Init` and :c:func:`!PyByteArray_Fini` - functions have been removed. They did nothing since Python 2.7.4 and - Python 3.2.0, were excluded from the limited API (stable ABI), and were - not documented. - -- bpo-33817: Fixed :c:func:`_PyBytes_Resize` for empty bytes objects. - -- bpo-35322: Fix memory leak in :c:func:`PyUnicode_EncodeLocale` and - :c:func:`PyUnicode_EncodeFSDefault` on error handling. - -- bpo-35059: The following C macros have been converted to static inline - functions: :c:func:`Py_INCREF`, :c:func:`Py_DECREF`, :c:func:`Py_XINCREF`, - :c:func:`Py_XDECREF`, :c:func:`PyObject_INIT`, - :c:func:`PyObject_INIT_VAR`. - -- bpo-35296: ``make install`` now also installs the internal API: - ``Include/internal/*.h`` header files. - -- bpo-35081: Internal APIs surrounded by ``#ifdef Py_BUILD_CORE`` have been - moved from ``Include/*.h`` headers to new header files - ``Include/internal/pycore_*.h``. - -- bpo-35259: Conditionally declare :c:func:`Py_FinalizeEx()` (new in 3.6) - based on Py_LIMITED_API. Patch by Arthur Neufeld. - -- bpo-35081: The :c:func:`!_PyObject_GC_TRACK` and - :c:func:`!_PyObject_GC_UNTRACK` macros have been removed from the public C - API. - -- bpo-35134: Creation of a new ``Include/cpython/`` subdirectory. - -- bpo-34725: Adds _Py_SetProgramFullPath so embedders may override - sys.executable - -- bpo-34910: Ensure that :c:func:`PyObject_Print` always returns ``-1`` on - error. Patch by Zackery Spytz. - -- bpo-34523: Py_DecodeLocale() and Py_EncodeLocale() now use the UTF-8 - encoding on Windows if Py_LegacyWindowsFSEncodingFlag is zero. - -- bpo-34193: Fix pluralization in TypeError messages in getargs.c and - typeobject.c: '1 argument' instead of '1 arguments' and '1 element' - instead of '1 elements'. - -- bpo-34127: Return grammatically correct error message based on argument - count. Patch by Karthikeyan Singaravelan. - -- bpo-23927: Fixed :exc:`SystemError` in - :c:func:`PyArg_ParseTupleAndKeywords` when the ``w*`` format unit is used - for optional parameter. - -- bpo-32455: Added :c:func:`PyCompile_OpcodeStackEffectWithJump`. - -- bpo-34008: Py_Main() can again be called after Py_Initialize(), as in - Python 3.6. - -- bpo-32500: Fixed error messages for :c:func:`PySequence_Size`, - :c:func:`PySequence_GetItem`, :c:func:`PySequence_SetItem` and - :c:func:`PySequence_DelItem` called with a mapping and - :c:func:`PyMapping_Size` called with a sequence. - -- bpo-33818: :c:func:`PyExceptionClass_Name` will now return ``const char - *`` instead of ``char *``. - -- bpo-33042: Embedding applications may once again call - PySys_ResetWarnOptions, PySys_AddWarnOption, and PySys_AddXOption prior to - calling Py_Initialize. - -- bpo-32374: Document that m_traverse for multi-phase initialized modules - can be called with m_state=NULL, and add a sanity check - -- bpo-30863: :c:func:`PyUnicode_AsWideChar` and - :c:func:`PyUnicode_AsWideCharString` no longer cache the ``wchar_t*`` - representation of string objects. - - -What's New in Python 3.7.0 final? -================================= - -*Release date: 2018-06-27* - -Library -------- - -- bpo-33851: Fix :func:`ast.get_docstring` for a node that lacks a - docstring. - -C API ------ - -- bpo-33932: Calling Py_Initialize() twice does nothing, instead of failing - with a fatal error: restore the Python 3.6 behaviour. - - -What's New in Python 3.7.0 release candidate 1? -=============================================== - -*Release date: 2018-06-12* - -Core and Builtins ------------------ - -- bpo-33803: Fix a crash in hamt.c caused by enabling GC tracking for an - object that hadn't all of its fields set to NULL. - -- bpo-33706: Fix a crash in Python initialization when parsing the command - line options. Thanks Christoph Gohlke for the bug report and the fix! - -- bpo-30654: Fixed reset of the SIGINT handler to SIG_DFL on interpreter - shutdown even when there was a custom handler set previously. Patch by - Philipp Kerling. - -- bpo-31849: Fix signed/unsigned comparison warning in pyhash.c. - -Library -------- - -- bpo-30167: Prevent site.main() exception if PYTHONSTARTUP is set. Patch by - Steve Weber. - -- bpo-33812: Datetime instance d with non-None tzinfo, but with - d.tzinfo.utcoffset(d) returning None is now treated as naive by the - astimezone() method. - -- bpo-30805: Avoid race condition with debug logging - -- bpo-33694: asyncio: Fix a race condition causing data loss on - pause_reading()/resume_reading() when using the ProactorEventLoop. - -- bpo-32493: Correct test for ``uuid_enc_be`` availability in - ``configure.ac``. Patch by Michael Felt. - -- bpo-33792: Add asyncio.WindowsSelectorEventLoopPolicy and - asyncio.WindowsProactorEventLoopPolicy. - -- bpo-33778: Update ``unicodedata``'s database to Unicode version 11.0.0. - -- bpo-33770: improve base64 exception message for encoded inputs of invalid - length - -- bpo-33769: asyncio/start_tls: Fix error message; cancel callbacks in case - of an unhandled error; mark SSLTransport as closed if it is aborted. - -- bpo-33767: The concatenation (``+``) and repetition (``*``) sequence - operations now raise :exc:`TypeError` instead of :exc:`SystemError` when - performed on :class:`mmap.mmap` objects. Patch by Zackery Spytz. - -- bpo-33734: asyncio/ssl: Fix AttributeError, increase default handshake - timeout - -- bpo-11874: Use a better regex when breaking usage into wrappable parts. - Avoids bogus assertion errors from custom metavar strings. - -- bpo-33582: Emit a deprecation warning for inspect.formatargspec - -Documentation -------------- - -- bpo-33409: Clarified the relationship between :pep:`538`'s - PYTHONCOERCECLOCALE and PEP 540's PYTHONUTF8 mode. - -- bpo-33736: Improve the documentation of :func:`asyncio.open_connection`, - :func:`asyncio.start_server` and their UNIX socket counterparts. - -- bpo-31432: Clarify meaning of CERT_NONE, CERT_OPTIONAL, and CERT_REQUIRED - flags for ssl.SSLContext.verify_mode. - -Build ------ - -- bpo-5755: Move ``-Wstrict-prototypes`` option to ``CFLAGS_NODIST`` from - ``OPT``. This option emitted annoying warnings when building extension - modules written in C++. - -Windows -------- - -- bpo-33720: Reduces maximum marshal recursion depth on release builds. - -IDLE ----- - -- bpo-33656: On Windows, add API call saying that tk scales for DPI. On - Windows 8.1+ or 10, with DPI compatibility properties of the Python binary - unchanged, and a monitor resolution greater than 96 DPI, this should make - text and lines sharper. It should otherwise have no effect. - -- bpo-33768: Clicking on a context line moves that line to the top of the - editor window. - -- bpo-33763: IDLE: Use read-only text widget for code context instead of - label widget. - -- bpo-33664: Scroll IDLE editor text by lines. Previously, the mouse wheel - and scrollbar slider moved text by a fixed number of pixels, resulting in - partial lines at the top of the editor box. The change also applies to - the shell and grep output windows, but not to read-only text views. - -- bpo-33679: Enable theme-specific color configuration for Code Context. Use - the Highlights tab to see the setting for built-in themes or add settings - to custom themes. - -- bpo-33642: Display up to maxlines non-blank lines for Code Context. If - there is no current context, show a single blank line. - - -What's New in Python 3.7.0 beta 5? -================================== - -*Release date: 2018-05-30* - -Core and Builtins ------------------ - -- bpo-33622: Fixed a leak when the garbage collector fails to add an object - with the ``__del__`` method or referenced by it into the - :data:`gc.garbage` list. :c:func:`PyGC_Collect` can now be called when an - exception is set and preserves it. - -- bpo-33509: Fix module_globals parameter of warnings.warn_explicit(): don't - crash if module_globals is not a dict. - -- bpo-20104: The new ``os.posix_spawn`` added in 3.7.0b1 was removed as we - are still working on what the API should look like. Expect this in 3.8 - instead. - -- bpo-33475: Fixed miscellaneous bugs in converting annotations to strings - and optimized parentheses in the string representation. - -- bpo-33391: Fix a leak in set_symmetric_difference(). - -- bpo-28055: Fix unaligned accesses in siphash24(). Patch by Rolf Eike Beer. - -- bpo-32911: Due to unexpected compatibility issues discovered during - downstream beta testing, reverted :issue:`29463`. ``docstring`` field is - removed from Module, ClassDef, FunctionDef, and AsyncFunctionDef ast nodes - which was added in 3.7a1. Docstring expression is restored as a first - statement in their body. Based on patch by Inada Naoki. - -- bpo-21983: Fix a crash in ``ctypes.cast()`` in case the type argument is a - ctypes structured data type. Patch by Eryk Sun and Oren Milman. - -Library -------- - -- bpo-32751: When cancelling the task due to a timeout, - :meth:`asyncio.wait_for` will now wait until the cancellation is complete. - -- bpo-32684: Fix gather to propagate cancellation of itself even with - return_exceptions. - -- bpo-33654: Support protocol type switching in SSLTransport.set_protocol(). - -- bpo-33674: Pause the transport as early as possible to further reduce the - risk of data_received() being called before connection_made(). - -- bpo-33674: Fix a race condition in SSLProtocol.connection_made() of - asyncio.sslproto: start immediately the handshake instead of using - call_soon(). Previously, data_received() could be called before the - handshake started, causing the handshake to hang or fail. - -- bpo-31647: Fixed bug where calling write_eof() on a - _SelectorSocketTransport after it's already closed raises AttributeError. - -- bpo-32610: Make asyncio.all_tasks() return only pending tasks. - -- bpo-32410: Avoid blocking on file IO in sendfile fallback code - -- bpo-33469: Fix RuntimeError after closing loop that used run_in_executor - -- bpo-33672: Fix Task.__repr__ crash with Cython's bogus coroutines - -- bpo-33654: Fix transport.set_protocol() to support switching between - asyncio.Protocol and asyncio.BufferedProtocol. Fix loop.start_tls() to - work with asyncio.BufferedProtocols. - -- bpo-33652: Pickles of type variables and subscripted generics are now - future-proof and compatible with older Python versions. - -- bpo-32493: Fixed :func:`uuid.uuid1` on FreeBSD. - -- bpo-33618: Finalize and document preliminary and experimental TLS 1.3 - support with OpenSSL 1.1.1 - -- bpo-33623: Fix possible SIGSGV when asyncio.Future is created in __del__ - -- bpo-30877: Fixed a bug in the Python implementation of the JSON decoder - that prevented the cache of parsed strings from clearing after finishing - the decoding. Based on patch by c-fos. - -- bpo-33570: Change TLS 1.3 cipher suite settings for compatibility with - OpenSSL 1.1.1-pre6 and newer. OpenSSL 1.1.1 will have TLS 1.3 ciphers - enabled by default. - -- bpo-28556: Do not simplify arguments to ``typing.Union``. Now - ``Union[Manager, Employee]`` is not simplified to ``Employee`` at runtime. - Such simplification previously caused several bugs and limited - possibilities for introspection. - -- bpo-33540: Add a new ``block_on_close`` class attribute to - ``ForkingMixIn`` and ``ThreadingMixIn`` classes of :mod:`socketserver`. - -- bpo-33548: tempfile._candidate_tempdir_list should consider common TEMP - locations - -- bpo-33109: argparse subparsers are once again not required by default, - reverting the change in behavior introduced by bpo-26510 in 3.7.0a2. - -- bpo-33536: dataclasses.make_dataclass now checks for invalid field names - and duplicate fields. Also, added a check for invalid field - specifications. - -- bpo-33542: Prevent ``uuid.get_node`` from using a DUID instead of a MAC on - Windows. Patch by Zvi Effron - -- bpo-26819: Fix race condition with ``ReadTransport.resume_reading`` in - Windows proactor event loop. - -- Fix failure in ``typing.get_type_hints()`` when ClassVar was provided as a - string forward reference. - -- bpo-33505: Optimize asyncio.ensure_future() by reordering if checks: 1.17x - faster. - -- bpo-33497: Add errors param to cgi.parse_multipart and make an encoding in - FieldStorage use the given errors (needed for Twisted). Patch by Amber - Brown. - -- bpo-33495: Change dataclasses.Fields repr to use the repr of each of its - members, instead of str. This makes it more clear what each field - actually represents. This is especially true for the 'type' member. - -- bpo-33453: Fix dataclasses to work if using literal string type - annotations or if using PEP 563 "Postponed Evaluation of Annotations". - Only specific string prefixes are detected for both ClassVar ("ClassVar" - and "typing.ClassVar") and InitVar ("InitVar" and "dataclasses.InitVar"). - -- bpo-28556: Minor fixes in typing module: add annotations to - ``NamedTuple.__new__``, pass ``*args`` and ``**kwds`` in - ``Generic.__new__``. Original PRs by Paulius Šarka and Chad Dombrova. - -- bpo-20087: Updated alias mapping with glibc 2.27 supported locales. - -- bpo-33422: Fix trailing quotation marks getting deleted when looking up - byte/string literals on pydoc. Patch by Andrés Delfino. - -- bpo-28167: The function ``platform.linux_distribution`` and - ``platform.dist`` now trigger a ``DeprecationWarning`` and have been - marked for removal in Python 3.8 - -- bpo-33197: Update error message when constructing invalid - inspect.Parameters Patch by Donghee Na. - -- bpo-33263: Fix FD leak in ``_SelectorSocketTransport`` Patch by Vlad - Starostin. - -- bpo-32861: The urllib.robotparser's ``__str__`` representation now - includes wildcard entries and the "Crawl-delay" and "Request-rate" fields. - Patch by Michael Lazar. - -- bpo-32257: The ssl module now contains OP_NO_RENEGOTIATION constant, - available with OpenSSL 1.1.0h or 1.1.1. - -- bpo-16865: Support arrays >=2GiB in :mod:`ctypes`. Patch by Segev Finer. - -Documentation -------------- - -- bpo-23859: Document that ``asyncio.wait()`` does not cancel its futures on - timeout. - -- bpo-32436: Document :pep:`567` changes to asyncio. - -- bpo-33604: Update HMAC md5 default to a DeprecationWarning, bump removal - to 3.8. - -- bpo-33503: Fix broken pypi link - -- bpo-33421: Add missing documentation for ``typing.AsyncContextManager``. - -Tests ------ - -- bpo-33655: Ignore test_posix_fallocate failures on BSD platforms that - might be due to running on ZFS. - -- bpo-32604: Remove the _xxsubinterpreters module (meant for testing) and - associated helpers. This module was originally added recently in 3.7b1. - -Build ------ - -- bpo-33614: Ensures module definition files for the stable ABI on Windows - are correctly regenerated. - -- bpo-33522: Enable CI builds on Visual Studio Team Services at - https://python.visualstudio.com/cpython - -- bpo-33012: Add ``-Wno-cast-function-type`` for gcc 8 for silencing - warnings about function casts like casting to PyCFunction in method - definition lists. - -macOS ------ - -- bpo-13631: The .editrc file in user's home directory is now processed - correctly during the readline initialization through editline emulation on - macOS. - -IDLE ----- - -- bpo-33628: IDLE: Cleanup codecontext.py and its test. - -- bpo-33564: IDLE's code context now recognizes async as a block opener. - -- bpo-32831: Add docstrings and tests for codecontext. - - -What's New in Python 3.7.0 beta 4? -================================== - -*Release date: 2018-05-02* - -Core and Builtins ------------------ - -- bpo-33363: Raise a SyntaxError for ``async with`` and ``async for`` - statements outside of async functions. - -- bpo-33128: Fix a bug that causes PathFinder to appear twice on - sys.meta_path. Patch by Pablo Galindo Salgado. - -- bpo-33312: Fixed clang ubsan (undefined behavior sanitizer) warnings in - dictobject.c by adjusting how the internal struct _dictkeysobject shared - keys structure is declared. - -- bpo-33231: Fix potential memory leak in ``normalizestring()``. - -- bpo-33205: Change dict growth function from - ``round_up_to_power_2(used*2+hashtable_size/2)`` to - ``round_up_to_power_2(used*3)``. Previously, dict is shrunk only when - ``used == 0``. Now dict has more chance to be shrunk. - -- bpo-29922: Improved error messages in 'async with' when ``__aenter__()`` - or ``__aexit__()`` return non-awaitable object. - -- bpo-33199: Fix ``ma_version_tag`` in dict implementation is uninitialized - when copying from key-sharing dict. - -Library -------- - -- bpo-33281: Fix ctypes.util.find_library regression on macOS. - -- bpo-33383: Fixed crash in the get() method of the :mod:`dbm.ndbm` database - object when it is called with a single argument. - -- bpo-33329: Fix multiprocessing regression on newer glibcs - -- bpo-991266: Fix quoting of the ``Comment`` attribute of - :class:`http.cookies.SimpleCookie`. - -- bpo-33131: Upgrade bundled version of pip to 10.0.1. - -- bpo-33308: Fixed a crash in the :mod:`parser` module when converting an ST - object to a tree of tuples or lists with ``line_info=False`` and - ``col_info=True``. - -- bpo-33266: lib2to3 now recognizes ``rf'...'`` strings. - -- bpo-11594: Ensure line-endings are respected when using lib2to3. - -- bpo-33254: Have :func:`importlib.resources.contents` and - :meth:`!importlib.abc.ResourceReader.contents` return an :term:`iterable` - instead of an :term:`iterator`. - -- bpo-33256: Fix display of ``<module>`` call in the html produced by - ``cgitb.html()``. Patch by Stéphane Blondon. - -- bpo-33185: Fixed regression when running pydoc with the :option:`-m` - switch. (The regression was introduced in 3.7.0b3 by the resolution of - :issue:`33053`) This fix also changed pydoc to add ``os.getcwd()`` to - :data:`sys.path` when necessary, rather than adding ``"."``. - -- bpo-33169: Delete entries of ``None`` in :data:`sys.path_importer_cache` - when :meth:`importlib.machinery.invalidate_caches` is called. - -- bpo-33217: Deprecate looking up non-Enum objects in Enum classes and Enum - members (will raise :exc:`TypeError` in 3.8+). - -- bpo-33203: ``random.Random.choice()`` now raises ``IndexError`` for empty - sequences consistently even when called from subclasses without a - ``getrandbits()`` implementation. - -- bpo-33224: Update difflib.mdiff() for :pep:`479`. Convert an uncaught - StopIteration in a generator into a return-statement. - -- bpo-33209: End framing at the end of C implementation of - :func:`pickle.Pickler.dump`. - -- bpo-20104: Improved error handling and fixed a reference leak in - :func:`os.posix_spawn`. - -- bpo-33175: In dataclasses, Field.__set_name__ now looks up the - __set_name__ special method on the class, not the instance, of the default - value. - -- bpo-33097: Raise RuntimeError when ``executor.submit`` is called during - interpreter shutdown. - -- bpo-31908: Fix output of cover files for ``trace`` module command-line - tool. Previously emitted cover files only when ``--missing`` option was - used. Patch by Michael Selik. - -Documentation -------------- - -- bpo-33378: Add Korean language switcher for https://docs.python.org/3/ - -- bpo-33276: Clarify that the ``__path__`` attribute on modules cannot be - just any value. - -- bpo-33201: Modernize documentation for writing C extension types. - -- bpo-33195: Deprecate ``Py_UNICODE`` usage in ``c-api/arg`` document. - ``Py_UNICODE`` related APIs are deprecated since Python 3.3, but it is - missed in the document. - -- bpo-8243: Add a note about curses.addch and curses.addstr exception - behavior when writing outside a window, or pad. - -- bpo-32337: Update documentation related with ``dict`` order. - -Tests ------ - -- bpo-33358: Fix ``test_embed.test_pre_initialization_sys_options()`` when - the interpreter is built with ``--enable-shared``. - -Build ------ - -- bpo-33394: Enable the verbose build for extension modules, when GNU make - is passed macros on the command line. - -- bpo-33393: Update config.guess and config.sub files. - -- bpo-33377: Add new triplets for mips r6 and riscv variants (used in - extension suffixes). - -- bpo-32232: By default, modules configured in ``Modules/Setup`` are no - longer built with ``-DPy_BUILD_CORE``. Instead, modules that specifically - need that preprocessor definition include it in their individual entries. - -- bpo-33182: The embedding tests can once again be built with clang 6.0 - -Windows -------- - -- bpo-33184: Update Windows installer to use OpenSSL 1.1.0h. - -macOS ------ - -- bpo-33184: Update macOS installer build to use OpenSSL 1.1.0h. - -IDLE ----- - -- bpo-21474: Update word/identifier definition from ascii to unicode. In - text and entry boxes, this affects selection by double-click, movement - left/right by control-left/right, and deletion left/right by - control-BACKSPACE/DEL. - -- bpo-33204: IDLE: consistently color invalid string prefixes. A 'u' string - prefix cannot be paired with either 'r' or 'f'. Consistently color as much - of the prefix, starting at the right, as is valid. Revise and extend - colorizer test. - -Tools/Demos ------------ - -- bpo-33189: :program:`pygettext.py` now recognizes only literal strings as - docstrings and translatable strings, and rejects bytes literals and - f-string expressions. - -- bpo-31920: Fixed handling directories as arguments in the ``pygettext`` - script. Based on patch by Oleg Krasnikov. - -- bpo-29673: Fix pystackv and pystack gdbinit macros. - -- bpo-31583: Fix 2to3 for using with --add-suffix option but without - --output-dir option for relative path to files in current directory. - - -What's New in Python 3.7.0 beta 3? -================================== - -*Release date: 2018-03-29* - -Security --------- - -- bpo-33136: Harden ssl module against LibreSSL :cve:`2018-8970`. - X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new - test ensures that NULL bytes are not allowed. - -- bpo-33001: Minimal fix to prevent buffer overrun in os.symlink on Windows - -- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic - backtracking. These regexes formed potential DOS vectors (REDOS). They - have been refactored. This resolves :cve:`2018-1060` and :cve:`2018-1061`. - Patch by Jamie Davis. - -Core and Builtins ------------------ - -- bpo-33053: When using the -m switch, sys.path[0] is now explicitly - expanded as the *starting* working directory, rather than being left as - the empty path (which allows imports from the current working directory at - the time of the import) - -- bpo-33018: Improve consistency of errors raised by ``issubclass()`` when - called with a non-class and an abstract base class as the first and second - arguments, respectively. Patch by Josh Bronson. - -- bpo-33041: Fixed jumping when the function contains an ``async for`` loop. - -- bpo-33026: Fixed jumping out of "with" block by setting f_lineno. - -- bpo-33005: Fix a crash on fork when using a custom memory allocator (ex: - using PYTHONMALLOC env var). _PyGILState_Reinit() and - _PyInterpreterState_Enable() now use the default RAW memory allocator to - allocate a new interpreters mutex on fork. - -- bpo-17288: Prevent jumps from 'return' and 'exception' trace events. - -- bpo-32836: Don't use temporary variables in cases of list/dict/set - comprehensions - -Library -------- - -- bpo-33141: Have Field objects pass through __set_name__ to their default - values, if they have their own __set_name__. - -- bpo-33096: Allow ttk.Treeview.insert to insert iid that has a false - boolean value. Note iid=0 and iid=False would be same. Patch by Garvit - Khatri. - -- bpo-32873: Treat type variables and special typing forms as immutable by - copy and pickle. This fixes several minor issues and inconsistencies, and - improves backwards compatibility with Python 3.6. - -- bpo-33134: When computing dataclass's __hash__, use the lookup table to - contain the function which returns the __hash__ value. This is an - improvement over looking up a string, and then testing that string to see - what to do. - -- bpo-33127: The ssl module now compiles with LibreSSL 2.7.1. - -- bpo-32505: Raise TypeError if a member variable of a dataclass is of type - Field, but doesn't have a type annotation. - -- bpo-33078: Fix the failure on OSX caused by the tests relying on - sem_getvalue - -- bpo-33116: Add 'Field' to dataclasses.__all__. - -- bpo-32896: Fix an error where subclassing a dataclass with a field that - uses a default_factory would generate an incorrect class. - -- bpo-33100: Dataclasses: If a field has a default value that's a - MemberDescriptorType, then it's from that field being in __slots__, not an - actual default value. - -- bpo-32953: If a non-dataclass inherits from a frozen dataclass, allow - attributes to be added to the derived class. Only attributes from the - frozen dataclass cannot be assigned to. Require all dataclasses in a - hierarchy to be either all frozen or all non-frozen. - -- bpo-33061: Add missing ``NoReturn`` to ``__all__`` in typing.py - -- bpo-33078: Fix the size handling in multiprocessing.Queue when a pickling - error occurs. - -- bpo-33064: lib2to3 now properly supports trailing commas after ``*args`` - and ``**kwargs`` in function signatures. - -- bpo-33056: FIX properly close leaking fds in - concurrent.futures.ProcessPoolExecutor. - -- bpo-33021: Release the GIL during fstat() calls, avoiding hang of all - threads when calling mmap.mmap(), os.urandom(), and random.seed(). Patch - by Nir Soffer. - -- bpo-31804: Avoid failing in multiprocessing.Process if the standard - streams are closed or None at exit. - -- bpo-33037: Skip sending/receiving data after SSL transport closing. - -- bpo-27683: Fix a regression in :mod:`ipaddress` that result of - :meth:`hosts` is empty when the network is constructed by a tuple - containing an integer mask and only 1 bit left for addresses. - -- bpo-32999: Fix C implementation of ``ABC.__subclasscheck__(cls, - subclass)`` crashed when ``subclass`` is not a type object. - -- bpo-33009: Fix inspect.signature() for single-parameter partialmethods. - -- bpo-32969: Expose several missing constants in zlib and fix corresponding - documentation. - -- bpo-32056: Improved exceptions raised for invalid number of channels and - sample width when read an audio file in modules :mod:`!aifc`, :mod:`wave` - and :mod:`!sunau`. - -- bpo-32844: Fix wrong redirection of a low descriptor (0 or 1) to stderr in - subprocess if another low descriptor is closed. - -- bpo-32857: In :mod:`tkinter`, ``after_cancel(None)`` now raises a - :exc:`ValueError` instead of canceling the first scheduled function. - Patch by Cheryl Sabella. - -- bpo-31639: http.server now exposes a ThreadedHTTPServer class and uses it - when the module is run with ``-m`` to cope with web browsers pre-opening - sockets. - -- bpo-27645: :class:`sqlite3.Connection` now exposes a - :class:`~sqlite3.Connection.backup` method, if the underlying SQLite - library is at version 3.6.11 or higher. Patch by Lele Gaifax. - -Documentation -------------- - -- bpo-33126: Document PyBuffer_ToContiguous(). - -- bpo-27212: Modify documentation for the :func:`islice` recipe to consume - initial values up to the start index. - -- bpo-28247: Update :mod:`zipapp` documentation to describe how to make - standalone applications. - -- bpo-18802: Documentation changes for ipaddress. Patch by Jon Foster and - Berker Peksag. - -- bpo-27428: Update documentation to clarify that ``WindowsRegistryFinder`` - implements ``MetaPathFinder``. (Patch by Himanshu Lakhara) - -Tests ------ - -- bpo-32872: Avoid regrtest compatibility issue with namespace packages. - -- bpo-32517: Fix failing ``test_asyncio`` on macOS 10.12.2+ due to transport - of ``KqueueSelector`` loop was not being closed. - -- bpo-19417: Add test_bdb.py. - -Build ------ - -- bpo-33163: Upgrade pip to 9.0.3 and setuptools to v39.0.1. - -Windows -------- - -- bpo-33016: Fix potential use of uninitialized memory in - nt._getfinalpathname - -- bpo-32903: Fix a memory leak in os.chdir() on Windows if the current - directory is set to a UNC path. - -macOS ------ - -- bpo-32726: Build and link with private copy of Tcl/Tk 8.6 for the macOS - 10.6+ installer. The 10.9+ installer variant already does this. This - means that the Python 3.7 provided by the python.org macOS installers no - longer need or use any external versions of Tcl/Tk, either system-provided - or user-installed, such as ActiveTcl. - -IDLE ----- - -- bpo-32984: Set ``__file__`` while running a startup file. Like Python, - IDLE optionally runs one startup file in the Shell window before - presenting the first interactive input prompt. For IDLE, ``-s`` runs a - file named in environmental variable :envvar:`IDLESTARTUP` or - :envvar:`PYTHONSTARTUP`; ``-r file`` runs ``file``. Python sets - ``__file__`` to the startup file name before running the file and unsets - it before the first prompt. IDLE now does the same when run normally, - without the ``-n`` option. - -- bpo-32940: Simplify and rename StringTranslatePseudoMapping in pyparse. - -Tools/Demos ------------ - -- bpo-32885: Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disable - automatic backup creation (files with ``~`` suffix). - -C API ------ - -- bpo-33042: Embedding applications may once again call - PySys_ResetWarnOptions, PySys_AddWarnOption, and PySys_AddXOption prior to - calling Py_Initialize. - -- bpo-32374: Document that m_traverse for multi-phase initialized modules - can be called with m_state=NULL, and add a sanity check - - -What's New in Python 3.7.0 beta 2? -================================== - -*Release date: 2018-02-27* - -Security --------- - -- bpo-28414: The ssl module now allows users to perform their own IDN - en/decoding when using SNI. - -Core and Builtins ------------------ - -- bpo-32889: Update Valgrind suppression list to account for the rename of - ``Py_ADDRESS_IN_RANG`` to ``address_in_range``. - -- bpo-31356: Remove the new API added in bpo-31356 (gc.ensure_disabled() - context manager). - -- bpo-32305: For namespace packages, ensure that both ``__file__`` and - ``__spec__.origin`` are set to None. - -- bpo-32303: Make sure ``__spec__.loader`` matches ``__loader__`` for - namespace packages. - -- bpo-32711: Fix the warning messages for Python/ast_unparse.c. Patch by - Stéphane Wirtel - -- bpo-32583: Fix possible crashing in builtin Unicode decoders caused by - write out-of-bound errors when using customized decode error handlers. - -Library -------- - -- bpo-32960: For dataclasses, disallow inheriting frozen from non-frozen - classes, and also disallow inheriting non-frozen from frozen classes. This - restriction will be relaxed at a future date. - -- bpo-32713: Fixed tarfile.itn handling of out-of-bounds float values. Patch - by Joffrey Fuhrer. - -- bpo-32951: Direct instantiation of SSLSocket and SSLObject objects is now - prohibited. The constructors were never documented, tested, or designed as - public constructors. Users were suppose to use ssl.wrap_socket() or - SSLContext. - -- bpo-32929: Remove the tri-state parameter "hash", and add the boolean - "unsafe_hash". If unsafe_hash is True, add a __hash__ function, but if a - __hash__ exists, raise TypeError. If unsafe_hash is False, add a __hash__ - based on the values of eq= and frozen=. The unsafe_hash=False behavior is - the same as the old hash=None behavior. unsafe_hash=False is the default, - just as hash=None used to be. - -- bpo-32947: Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround for TLSv1.3 - for future compatibility with OpenSSL 1.1.1. - -- bpo-30622: The ssl module now detects missing NPN support in LibreSSL. - -- bpo-32922: dbm.open() now encodes filename with the filesystem encoding - rather than default encoding. - -- bpo-32859: In ``os.dup2``, don't check every call whether the ``dup3`` - syscall exists or not. - -- bpo-32556: nt._getfinalpathname, nt._getvolumepathname and - nt._getdiskusage now correctly convert from bytes. - -- bpo-25988: Emit a :exc:`DeprecationWarning` when using or importing an ABC - directly from :mod:`collections` rather than from :mod:`collections.abc`. - -- bpo-21060: Rewrite confusing message from setup.py upload from "No dist - file created in earlier command" to the more helpful "Must create and - upload files in one command". - -- bpo-32852: Make sure sys.argv remains as a list when running trace. - -- bpo-31333: ``_abc`` module is added. It is a speedup module with C - implementations for various functions and methods in ``abc``. Creating an - ABC subclass and calling ``isinstance`` or ``issubclass`` with an ABC - subclass are up to 1.5x faster. In addition, this makes Python start-up up - to 10% faster. Note that the new implementation hides internal registry - and caches, previously accessible via private attributes - ``_abc_registry``, ``_abc_cache``, and ``_abc_negative_cache``. There are - three debugging helper methods that can be used instead - ``_dump_registry``, ``_abc_registry_clear``, and ``_abc_caches_clear``. - -- bpo-32841: Fixed ``asyncio.Condition`` issue which silently ignored - cancellation after notifying and cancelling a conditional lock. Patch by - Bar Harel. - -- bpo-32819: ssl.match_hostname() has been simplified and no longer depends - on re and ipaddress module for wildcard and IP addresses. Error reporting - for invalid wildcards has been improved. - -- bpo-32394: socket: Remove - TCP_FASTOPEN,TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL flags on older version - Windows during run-time. - -- bpo-31787: Fixed refleaks of ``__init__()`` methods in various modules. - (Contributed by Oren Milman) - -- bpo-30157: Fixed guessing quote and delimiter in csv.Sniffer.sniff() when - only the last field is quoted. Patch by Jake Davis. - -- bpo-32792: collections.ChainMap() preserves the order of the underlying - mappings. - -- bpo-32775: :func:`fnmatch.translate` no longer produces patterns which - contain set operations. Sets starting with '[' or containing '--', '&&', - '~~' or '||' will be interpreted differently in regular expressions in - future versions. Currently they emit warnings. fnmatch.translate() now - avoids producing patterns containing such sets by accident. - -- bpo-32622: Implement native fast sendfile for Windows proactor event loop. - -- bpo-32777: Fix a rare but potential pre-exec child process deadlock in - subprocess on POSIX systems when marking file descriptors inheritable on - exec in the child process. This bug appears to have been introduced in - 3.4. - -- bpo-32647: The ctypes module used to depend on indirect linking for - dlopen. The shared extension is now explicitly linked against libdl on - platforms with dl. - -- bpo-32741: Implement ``asyncio.TimerHandle.when()`` method. - -- bpo-32691: Use mod_spec.parent when running modules with pdb - -- bpo-32734: Fixed ``asyncio.Lock()`` safety issue which allowed acquiring - and locking the same lock multiple times, without it being free. Patch by - Bar Harel. - -- bpo-32727: Do not include name field in SMTP envelope from address. Patch - by Stéphane Wirtel - -- bpo-31453: Add TLSVersion constants and SSLContext.maximum_version / - minimum_version attributes. The new API wraps OpenSSL 1.1 - https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html - feature. - -- bpo-24334: Internal implementation details of ssl module were cleaned up. - The SSLSocket has one less layer of indirection. Owner and session - information are now handled by the SSLSocket and SSLObject constructor. - Channel binding implementation has been simplified. - -- bpo-31848: Fix the error handling in Aifc_read.initfp() when the SSND - chunk is not found. Patch by Zackery Spytz. - -- bpo-32585: Add Ttk spinbox widget to :mod:`tkinter.ttk`. Patch by Alan D - Moore. - -- bpo-32221: Various functions returning tuple containing IPv6 addresses now - omit ``%scope`` part since the same information is already encoded in - *scopeid* tuple item. Especially this speeds up :func:`socket.recvfrom` - when it receives multicast packet since useless resolving of network - interface name is omitted. - -- bpo-30693: The TarFile class now recurses directories in a reproducible - way. - -- bpo-30693: The ZipFile class now recurses directories in a reproducible - way. - -Documentation -------------- - -- bpo-28124: The ssl module function ssl.wrap_socket() has been - de-emphasized and deprecated in favor of the more secure and efficient - SSLContext.wrap_socket() method. - -- bpo-17232: Clarify docs for -O and -OO. Patch by Terry Reedy. - -- bpo-32436: Add documentation for the contextvars module (PEP 567). - -- bpo-32800: Update link to w3c doc for xml default namespaces. - -- bpo-11015: Update :mod:`test.support` documentation. - -- bpo-8722: Document :meth:`__getattr__` behavior when property :meth:`get` - method raises :exc:`AttributeError`. - -- bpo-32614: Modify RE examples in documentation to use raw strings to - prevent :exc:`DeprecationWarning` and add text to REGEX HOWTO to highlight - the deprecation. - -- bpo-31972: Improve docstrings for ``pathlib.PurePath`` subclasses. - -Tests ------ - -- bpo-31809: Add tests to verify connection with secp ECDH curves. - -Build ------ - -- bpo-32898: Fix the python debug build when using COUNT_ALLOCS. - -Windows -------- - -- bpo-32901: Update Tcl and Tk versions to 8.6.8 - -- bpo-31966: Fixed WindowsConsoleIO.write() for writing empty data. - -- bpo-32409: Ensures activate.bat can handle Unicode contents. - -- bpo-32457: Improves handling of denormalized executable path when - launching Python. - -- bpo-32370: Use the correct encoding for ipconfig output in the uuid - module. Patch by Segev Finer. - -- bpo-29248: Fix :func:`os.readlink` on Windows, which was mistakenly - treating the ``PrintNameOffset`` field of the reparse data buffer as a - number of characters instead of bytes. Patch by Craig Holmquist and SSE4. - -macOS ------ - -- bpo-32901: Update macOS 10.9+ installer to Tcl/Tk 8.6.8. - -IDLE ----- - -- bpo-32916: Change ``str`` to ``code`` in pyparse. - -- bpo-32905: Remove unused code in pyparse module. - -- bpo-32874: Add tests for pyparse. - -- bpo-32837: Using the system and place-dependent default encoding for - open() is a bad idea for IDLE's system and location-independent files. - -- bpo-32826: Add "encoding=utf-8" to open() in IDLE's test_help_about. GUI - test test_file_buttons() only looks at initial ascii-only lines, but - failed on systems where open() defaults to 'ascii' because readline() - internally reads and decodes far enough ahead to encounter a non-ascii - character in CREDITS.txt. - -- bpo-32765: Update configdialog General tab docstring to add new widgets to - the widget list. - -Tools/Demos ------------ - -- bpo-32222: Fix pygettext not extracting docstrings for functions with type - annotated arguments. Patch by Toby Harradine. - - -What's New in Python 3.7.0 beta 1? -================================== - -*Release date: 2018-01-30* - -Core and Builtins ------------------ - -- bpo-32703: Fix coroutine's ResourceWarning when there's an active error - set when it's being finalized. - -- bpo-32650: Pdb and other debuggers dependent on bdb.py will correctly step - over (next command) native coroutines. Patch by Pablo Galindo. - -- bpo-28685: Optimize list.sort() and sorted() by using type specialized - comparisons when possible. - -- bpo-32685: Improve suggestion when the Python 2 form of print statement is - either present on the same line as the header of a compound statement or - else terminated by a semi-colon instead of a newline. Patch by Nitish - Chandra. - -- bpo-32697: Python now explicitly preserves the definition order of - keyword-only parameters. It's always preserved their order, but this - behavior was never guaranteed before; this behavior is now guaranteed and - tested. - -- bpo-32690: The locals() dictionary now displays in the lexical order that - variables were defined. Previously, the order was reversed. - -- bpo-32677: Add ``.isascii()`` method to ``str``, ``bytes`` and - ``bytearray``. It can be used to test that string contains only ASCII - characters. - -- bpo-32670: Enforce :pep:`479` for all code. This means that manually - raising a StopIteration exception from a generator is prohibited for all - code, regardless of whether 'from __future__ import generator_stop' was - used or not. - -- bpo-32591: Added built-in support for tracking the origin of coroutine - objects; see sys.set_coroutine_origin_tracking_depth and - CoroutineType.cr_origin. This replaces the asyncio debug mode's use of - coroutine wrapping for native coroutine objects. - -- bpo-31368: Expose preadv and pwritev system calls in the os module. Patch - by Pablo Galindo - -- bpo-32544: ``hasattr(obj, name)`` and ``getattr(obj, name, default)`` are - about 4 times faster than before when ``name`` is not found and ``obj`` - doesn't override ``__getattr__`` or ``__getattribute__``. - -- bpo-26163: Improved frozenset() hash to create more distinct hash values - when faced with datasets containing many similar values. - -- bpo-32550: Remove the STORE_ANNOTATION bytecode. - -- bpo-20104: Expose posix_spawn as a low level API in the os module. - (removed before 3.7.0rc1) - -- bpo-24340: Fixed estimation of the code stack size. - -- bpo-32436: Implement :pep:`567` Context Variables. - -- bpo-18533: ``repr()`` on a dict containing its own ``values()`` or - ``items()`` no longer raises ``RecursionError``; OrderedDict similarly. - Instead, use ``...``, as for other recursive structures. Patch by Ben - North. - -- bpo-20891: Py_Initialize() now creates the GIL. The GIL is no longer - created "on demand" to fix a race condition when PyGILState_Ensure() is - called in a non-Python thread. - -- bpo-32028: Leading whitespace is now correctly ignored when generating - suggestions for converting Py2 print statements to Py3 builtin print - function calls. Patch by Sanyam Khurana. - -- bpo-31179: Make dict.copy() up to 5.5 times faster. - -- bpo-31113: Get rid of recursion in the compiler for normal control flow. - -Library -------- - -- bpo-25988: Deprecate exposing the contents of collections.abc in the - regular collections module. - -- bpo-31429: The default cipher suite selection of the ssl module now uses a - blacklist approach rather than a hard-coded whitelist. Python no longer - re-enables ciphers that have been blocked by OpenSSL security update. - Default cipher suite selection can be configured on compile time. - -- bpo-30306: contextlib.contextmanager now releases the arguments passed to - the underlying generator as soon as the context manager is entered. - Previously it would keep them alive for as long as the context manager was - alive, even when not being used as a function decorator. Patch by Martin - Teichmann. - -- bpo-21417: Added support for setting the compression level for - zipfile.ZipFile. - -- bpo-32251: Implement asyncio.BufferedProtocol (provisional API). - -- bpo-32513: In dataclasses, allow easier overriding of dunder methods - without specifying decorator parameters. - -- bpo-32660: :mod:`termios` makes available ``FIONREAD``, ``FIONCLEX``, - ``FIOCLEX``, ``FIOASYNC`` and ``FIONBIO`` also under Solaris/derivatives. - -- bpo-27931: Fix email address header parsing error when the username is an - empty quoted string. Patch by Xiang Zhang. - -- bpo-32659: Under Solaris and derivatives, :class:`os.stat_result` provides - a st_fstype attribute. - -- bpo-32662: Implement Server.start_serving(), Server.serve_forever(), and - Server.is_serving() methods. Add 'start_serving' keyword parameter to - loop.create_server() and loop.create_unix_server(). - -- bpo-32391: Implement :meth:`asyncio.StreamWriter.wait_closed` and - :meth:`asyncio.StreamWriter.is_closing` methods - -- bpo-32643: Make Task._step, Task._wakeup and Future._schedule_callbacks - methods private. - -- bpo-32630: Refactor decimal module to use contextvars to store decimal - context. - -- bpo-32622: Add :meth:`asyncio.AbstractEventLoop.sendfile` method. - -- bpo-32304: distutils' upload command no longer corrupts tar files ending - with a CR byte, and no longer tries to convert CR to CRLF in any of the - upload text fields. - -- bpo-32502: uuid.uuid1 no longer raises an exception if a 64-bit hardware - address is encountered. - -- bpo-32596: ``concurrent.futures`` imports ``ThreadPoolExecutor`` and - ``ProcessPoolExecutor`` lazily (using :pep:`562`). It makes ``import - asyncio`` about 15% faster because asyncio uses only - ``ThreadPoolExecutor`` by default. - -- bpo-31801: Add ``_ignore_`` to ``Enum`` so temporary variables can be used - during class construction without being turned into members. - -- bpo-32576: Use queue.SimpleQueue() in places where it can be invoked from - a weakref callback. - -- bpo-32574: Fix memory leak in asyncio.Queue, when the queue has limited - size and it is full, the cancellation of queue.put() can cause a memory - leak. Patch by: José Melero. - -- bpo-32521: The nis module is now compatible with new libnsl and headers - location. - -- bpo-32467: collections.abc.ValuesView now inherits from - collections.abc.Collection. - -- bpo-32473: Improve ABCMeta._dump_registry() output readability - -- bpo-32102: New argument ``capture_output`` for subprocess.run - -- bpo-32521: glibc has removed Sun RPC. Use replacement libtirpc headers and - library in nis module. - -- bpo-32493: UUID module fixes build for FreeBSD/OpenBSD - -- bpo-32503: Pickling with protocol 4 no longer creates too small frames. - -- bpo-29237: Create enum for pstats sorting options - -- bpo-32454: Add close(fd) function to the socket module. - -- bpo-25942: The subprocess module is now more graceful when handling a - Ctrl-C KeyboardInterrupt during subprocess.call, subprocess.run, or a - Popen context manager. It now waits a short amount of time for the child - (presumed to have also gotten the SIGINT) to exit, before continuing the - KeyboardInterrupt exception handling. This still includes a SIGKILL in - the call() and run() APIs, but at least the child had a chance first. - -- bpo-32433: The hmac module now has hmac.digest(), which provides an - optimized HMAC digest. - -- bpo-28134: Sockets now auto-detect family, type and protocol from file - descriptor by default. - -- bpo-32404: Fix bug where :meth:`datetime.datetime.fromtimestamp` did not - call __new__ in :class:`datetime.datetime` subclasses. - -- bpo-32403: Improved speed of :class:`datetime.date` and - :class:`datetime.datetime` alternate constructors. - -- bpo-32228: Ensure that ``truncate()`` preserves the file position (as - reported by ``tell()``) after writes longer than the buffer size. - -- bpo-32410: Implement ``loop.sock_sendfile`` for asyncio event loop. - -- bpo-22908: Added seek and tell to the ZipExtFile class. This only works if - the file object used to open the zipfile is seekable. - -- bpo-32373: Add socket.getblocking() method. - -- bpo-32248: Add :mod:`importlib.resources` and - :class:`!importlib.abc.ResourceReader` as the unified API for reading - resources contained within packages. Loaders wishing to support resource - reading must implement the :meth:`get_resource_reader` method. File-based - and zipimport-based loaders both implement these APIs. - :class:`importlib.abc.ResourceLoader` is deprecated in favor of these new - APIs. - -- bpo-32320: collections.namedtuple() now supports default values. - -- bpo-29302: Add contextlib.AsyncExitStack. Patch by Alexander Mohr and Ilya - Kulakov. - -- bpo-31961: *Removed in Python 3.7.0b2.* The *args* argument of - subprocess.Popen can now be a :term:`path-like object`. If *args* is given - as a sequence, it's first element can now be a :term:`path-like object` as - well. - -- bpo-31900: The :func:`locale.localeconv` function now sets temporarily the - ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale to decode - ``decimal_point`` and ``thousands_sep`` byte strings if they are non-ASCII - or longer than 1 byte, and the ``LC_NUMERIC`` locale is different than the - ``LC_CTYPE`` locale. This temporary change affects other threads. Same - change for the :meth:`str.format` method when formatting a number - (:class:`int`, :class:`float`, :class:`float` and subclasses) with the - ``n`` type (ex: ``'{:n}'.format(1234)``). - -- bpo-31853: Use super().method instead of socket.method in SSLSocket. They - were there most likely for legacy reasons. - -- bpo-31399: The ssl module now uses OpenSSL's X509_VERIFY_PARAM_set1_host() - and X509_VERIFY_PARAM_set1_ip() API to verify hostname and IP addresses. - Subject common name fallback can be disabled with - SSLContext.hostname_checks_common_name. - -- bpo-14976: Add a queue.SimpleQueue class, an unbounded FIFO queue with a - reentrant C implementation of put(). - -Documentation -------------- - -- bpo-32724: Add references to some commands in the documentation of Pdb. - Patch by Stéphane Wirtel - -- bpo-32649: Complete the C API documentation, profiling and tracing part - with the newly added per-opcode events. - -- bpo-17799: Explain real behaviour of sys.settrace and sys.setprofile and - their C-API counterparts regarding which type of events are received in - each function. Patch by Pablo Galindo Salgado. - -Tests ------ - -- bpo-32721: Fix test_hashlib to not fail if the _md5 module is not built. - -- bpo-28414: Add test cases for IDNA 2003 and 2008 host names. IDNA 2003 - internationalized host names are working since bpo-31399 has landed. IDNA - 2008 are still broken. - -- bpo-32604: Add a new "_xxsubinterpreters" extension module that exposes - the existing subinterpreter C-API and a new cross-interpreter data sharing - mechanism. The module is primarily intended for more thorough testing of - the existing subinterpreter support. Note that the _xxsubinterpreters - module has been removed in 3.7.0rc1. - -- bpo-32602: Add test certs and test for ECDSA cert and EC/RSA dual mode. - -- bpo-32549: On Travis CI, Python now Compiles and uses a local copy of - OpenSSL 1.1.0g for testing. - -Build ------ - -- bpo-32635: Fix segfault of the crypt module when libxcrypt is provided - instead of libcrypt at the system. - -- bpo-32598: Use autoconf to detect OpenSSL libs, headers and supported - features. The ax_check_openssl M4 macro uses pkg-config to locate OpenSSL - and falls back to manual search. - -- bpo-32593: Drop support of FreeBSD 9 and older. - -- bpo-29708: If the :envvar:`SOURCE_DATE_EPOCH` environment variable is set, - :mod:`py_compile` will always create hash-based ``.pyc`` files. - -Windows -------- - -- bpo-32588: Create standalone _distutils_findvs module and add missing - _queue module to installer. - -- bpo-29911: Ensure separate Modify and Uninstall buttons are displayed. - -- bpo-32507: Use app-local UCRT install rather than the proper update for - old versions of Windows. - -macOS ------ - -- bpo-32726: Provide an additional, more modern macOS installer variant that - supports macOS 10.9+ systems in 64-bit mode only. Upgrade the supplied - third-party libraries to OpenSSL 1.1.0g and to SQLite 3.22.0. The 10.9+ - installer now links with and supplies its own copy of Tcl/Tk 8.6. - -- bpo-28440: No longer add /Library/Python/3.x/site-packages to sys.path for - macOS framework builds to avoid future conflicts. - -C API ------ - -- bpo-32681: Fix uninitialized variable 'res' in the C implementation of - os.dup2. Patch by Stéphane Wirtel - -- bpo-10381: Add C API access to the ``datetime.timezone`` constructor and - ``datetime.timezone.UTC`` singleton. - - -What's New in Python 3.7.0 alpha 4? -=================================== - -*Release date: 2018-01-08* - -Core and Builtins ------------------ - -- bpo-31975: The default warning filter list now starts with a - "default::DeprecationWarning:__main__" entry, so deprecation warnings are - once again shown by default in single-file scripts and at the interactive - prompt. - -- bpo-32226: ``__class_getitem__`` is now an automatic class method. - -- bpo-32399: Add AIX uuid library support for RFC4122 using uuid_create() in - libc.a - -- bpo-32390: Fix the compilation failure on AIX after the f_fsid field has - been added to the object returned by os.statvfs() (issue #32143). Original - patch by Michael Felt. - -- bpo-32379: Make MRO computation faster when a class inherits from a single - base. - -- bpo-32259: The error message of a TypeError raised when unpack - non-iterable is now more specific. - -- bpo-27169: The ``__debug__`` constant is now optimized out at compile - time. This fixes also bpo-22091. - -- bpo-32329: The :option:`-R` option now turns on hash randomization when - the :envvar:`PYTHONHASHSEED` environment variable is set to ``0``. - Previously, the option was ignored. Moreover, - ``sys.flags.hash_randomization`` is now properly set to 0 when hash - randomization is turned off by ``PYTHONHASHSEED=0``. - -- bpo-30416: The optimizer is now protected from spending much time doing - complex calculations and consuming much memory for creating large - constants in constant folding. Increased limits for constants that can be - produced in constant folding. - -- bpo-32282: Fix an unnecessary ifdef in the include of VersionHelpers.h in - socketmodule on Windows. - -- bpo-30579: Implement TracebackType.__new__ to allow Python-level creation - of traceback objects, and make TracebackType.tb_next mutable. - -- bpo-32260: Don't byte swap the input keys to the SipHash algorithm on - big-endian platforms. This should ensure siphash gives consistent results - across platforms. - -- bpo-31506: Improve the error message logic for object.__new__ and - object.__init__. Patch by Sanyam Khurana. - -- bpo-20361: ``-b`` and ``-bb`` now inject ``'default::BytesWarning'`` and - ``error::BytesWarning`` entries into ``sys.warnoptions``, ensuring that - they take precedence over any other warning filters configured via the - ``-W`` option or the ``PYTHONWARNINGS`` environment variable. - -- bpo-32230: ``-X dev`` now injects a ``'default'`` entry into - sys.warnoptions, ensuring that it behaves identically to actually passing - ``-Wdefault`` at the command line. - -- bpo-29240: Add a new UTF-8 mode: implementation of the :pep:`540`. - -- bpo-32226: :pep:`560`: Add support for ``__mro_entries__`` and - ``__class_getitem__``. Implemented by Ivan Levkivskyi. - -- bpo-32225: :pep:`562`: Add support for module ``__getattr__`` and - ``__dir__``. Implemented by Ivan Levkivskyi. - -- bpo-31901: The ``atexit`` module now has its callback stored per - interpreter. - -- bpo-31650: Implement :pep:`552` (Deterministic pycs). Python now supports - invalidating bytecode cache files bashed on a source content hash rather - than source last-modified time. - -- bpo-29469: Move constant folding from bytecode layer to AST layer. - Original patch by Eugene Toder. - -Library -------- - -- bpo-32506: Now that dict is defined as keeping insertion order, drop - OrderedDict and just use plain dict. - -- bpo-32279: Add params to dataclasses.make_dataclasses(): init, repr, eq, - order, hash, and frozen. Pass them through to dataclass(). - -- bpo-32278: Make type information optional on dataclasses.make_dataclass(). - If omitted, the string 'typing.Any' is used. - -- bpo-32499: Add dataclasses.is_dataclass(obj), which returns True if obj is - a dataclass or an instance of one. - -- bpo-32468: Improve frame repr() to mention filename, code name and current - line number. - -- bpo-23749: asyncio: Implement loop.start_tls() - -- bpo-32441: Return the new file descriptor (i.e., the second argument) from - ``os.dup2``. Previously, ``None`` was always returned. - -- bpo-32422: ``functools.lru_cache`` uses less memory (3 words for each - cached key) and takes about 1/3 time for cyclic GC. - -- bpo-31721: Prevent Python crash from happening when Future._log_traceback - is set to True manually. Now it can only be set to False, or a ValueError - is raised. - -- bpo-32415: asyncio: Add Task.get_loop() and Future.get_loop() - -- bpo-26133: Don't unsubscribe signals in asyncio UNIX event loop on - interpreter shutdown. - -- bpo-32363: Make asyncio.Task.set_exception() and set_result() raise - NotImplementedError. Task._step() and Future.__await__() raise proper - exceptions when they are in an invalid state, instead of raising an - AssertionError. - -- bpo-32357: Optimize asyncio.iscoroutine() and loop.create_task() for - non-native coroutines (e.g. async/await compiled with Cython). - 'loop.create_task(python_coroutine)' used to be 20% faster than - 'loop.create_task(cython_coroutine)'. Now, the latter is as fast. - -- bpo-32356: asyncio.transport.resume_reading() and pause_reading() are now - idempotent. New transport.is_reading() method is added. - -- bpo-32355: Optimize asyncio.gather(); now up to 15% faster. - -- bpo-32351: Use fastpath in asyncio.sleep if delay<0 (2x boost) - -- bpo-32348: Optimize asyncio.Future schedule/add/remove callback. The - optimization shows 3-6% performance improvements of async/await code. - -- bpo-32331: Fix socket.settimeout() and socket.setblocking() to keep - socket.type as is. Fix socket.socket() constructor to reset any bit flags - applied to socket's type. This change only affects OSes that have - SOCK_NONBLOCK and/or SOCK_CLOEXEC. - -- bpo-32248: Add :class:`!importlib.abc.ResourceReader` as an ABC for - loaders to provide a unified API for reading resources contained within - packages. Also add :mod:`importlib.resources` as the port of - ``importlib_resources``. - -- bpo-32311: Implement asyncio.create_task(coro) shortcut - -- bpo-32327: Convert asyncio functions that were documented as coroutines to - coroutines. Affected functions: loop.sock_sendall, loop.sock_recv, - loop.sock_accept, loop.getaddrinfo, loop.getnameinfo. - -- bpo-32323: :func:`urllib.parse.urlsplit` does not convert zone-id (scope) - to lower case for scoped IPv6 addresses in hostnames now. - -- bpo-32302: Fix bdist_wininst of distutils for CRT v142: it binary - compatible with CRT v140. - -- bpo-29711: Fix ``stop_serving`` in asyncio proactor loop kill all - listening servers - -- bpo-32308: :func:`re.sub` now replaces empty matches adjacent to a - previous non-empty match. - -- bpo-29970: Abort asyncio SSLProtocol connection if handshake not complete - within 10 seconds. - -- bpo-32314: Implement asyncio.run(). - -- bpo-17852: Revert incorrect fix based on misunderstanding of - _Py_PyAtExit() semantics. - -- bpo-32296: Implement asyncio._get_running_loop() and get_event_loop() in - C. This makes them 4x faster. - -- bpo-32250: Implement ``asyncio.current_task()`` and - ``asyncio.all_tasks()``. Add helpers intended to be used by alternative - task implementations: ``asyncio._register_task``, ``asyncio._enter_task``, - ``asyncio._leave_task`` and ``asyncio._unregister_task``. Deprecate - ``asyncio.Task.current_task()`` and ``asyncio.Task.all_tasks()``. - -- bpo-32255: A single empty field is now always quoted when written into a - CSV file. This allows to distinguish an empty row from a row consisting of - a single empty field. Patch by Licht Takeuchi. - -- bpo-32277: Raise ``NotImplementedError`` instead of ``SystemError`` on - platforms where ``chmod(..., follow_symlinks=False)`` is not supported. - Patch by Anthony Sottile. - -- bpo-30050: New argument warn_on_full_buffer to signal.set_wakeup_fd lets - you control whether Python prints a warning on stderr when the wakeup fd - buffer overflows. - -- bpo-29137: The ``fpectl`` library has been removed. It was never enabled - by default, never worked correctly on x86-64, and it changed the Python - ABI in ways that caused unexpected breakage of C extensions. - -- bpo-32273: Move asyncio.test_utils to test.test_asyncio. - -- bpo-32272: Remove asyncio.async() function. - -- bpo-32269: Add asyncio.get_running_loop() function. - -- bpo-32265: All class and static methods of builtin types now are correctly - classified by inspect.classify_class_attrs() and grouped in pydoc output. - Added types.ClassMethodDescriptorType for unbound class methods of builtin - types. - -- bpo-32253: Deprecate ``yield from lock``, ``await lock``, ``with (yield - from lock)`` and ``with await lock`` for asyncio synchronization - primitives. - -- bpo-22589: Changed MIME type of .bmp from 'image/x-ms-bmp' to 'image/bmp' - -- bpo-32193: Convert asyncio to use *async/await* syntax. Old styled ``yield - from`` is still supported too. - -- bpo-32206: Add support to run modules with pdb - -- bpo-32227: ``functools.singledispatch`` now supports registering - implementations using type annotations. - -- bpo-15873: Added new alternate constructors - :meth:`datetime.datetime.fromisoformat`, - :meth:`datetime.time.fromisoformat` and - :meth:`datetime.date.fromisoformat` as the inverse operation of each - classes's respective ``isoformat`` methods. - -- bpo-32199: The getnode() ip getter now uses 'ip link' instead of 'ip link - list'. - -- bpo-32143: os.statvfs() includes the f_fsid field from statvfs(2) - -- bpo-26439: Fix ctypes.util.find_library() for AIX by implementing - ctypes._aix.find_library() Patch by: Michael Felt - -- bpo-31993: The pickler now uses less memory when serializing large bytes - and str objects into a file. Pickles created with protocol 4 will require - less memory for unpickling large bytes and str objects. - -- bpo-27456: Ensure TCP_NODELAY is set on Linux. Tests by Victor Stinner. - -- bpo-31778: ast.literal_eval() is now more strict. Addition and subtraction - of arbitrary numbers no longer allowed. - -- bpo-31802: Importing native path module (``posixpath``, ``ntpath``) now - works even if the ``os`` module still is not imported. - -- bpo-30241: Add contextlib.AbstractAsyncContextManager. Patch by Jelle - Zijlstra. - -- bpo-31699: Fix deadlocks in - :class:`concurrent.futures.ProcessPoolExecutor` when task arguments or - results cause pickling or unpickling errors. This should make sure that - calls to the :class:`ProcessPoolExecutor` API always eventually return. - -- bpo-15216: ``TextIOWrapper.reconfigure()`` supports changing *encoding*, - *errors*, and *newline*. - -Documentation -------------- - -- bpo-32418: Add get_loop() method to Server and AbstractServer classes. - -Tests ------ - -- bpo-32252: Fix faulthandler_suppress_crash_report() used to prevent core - dump files when testing crashes. getrlimit() returns zero on success. - -- bpo-32002: Adjust C locale coercion testing for the empty locale and POSIX - locale cases to more readily adjust to platform dependent behaviour. - -Windows -------- - -- bpo-19764: Implement support for ``subprocess.Popen(close_fds=True)`` on - Windows. Patch by Segev Finer. - -Tools/Demos ------------ - -- bpo-24960: 2to3 and lib2to3 can now read pickled grammar files using - pkgutil.get_data() rather than probing the filesystem. This lets 2to3 and - lib2to3 work when run from a zipfile. - -C API ------ - -- bpo-32030: Py_Initialize() doesn't reset the memory allocators to default - if the ``PYTHONMALLOC`` environment variable is not set. - -- bpo-29084: Undocumented C API for OrderedDict has been excluded from the - limited C API. It was added by mistake and actually never worked in the - limited C API. - -- bpo-32264: Moved the pygetopt.h header into internal/, since it has no - public APIs. - -- bpo-32241: :c:func:`!Py_SetProgramName` and :c:func:`!Py_SetPythonHome` - now take the ``const wchar *`` arguments instead of ``wchar *``. - - -What's New in Python 3.7.0 alpha 3? -=================================== - -*Release date: 2017-12-05* - -Core and Builtins ------------------ - -- bpo-32176: co_flags.CO_NOFREE is now always set correctly by the code - object constructor based on freevars and cellvars, rather than needing to - be set correctly by the caller. This ensures it will be cleared - automatically when additional cell references are injected into a modified - code object and function. - -- bpo-10544: Yield expressions are now deprecated in comprehensions and - generator expressions. They are still permitted in the definition of the - outermost iterable, as that is evaluated directly in the enclosing scope. - -- bpo-32137: The repr of deeply nested dict now raises a RecursionError - instead of crashing due to a stack overflow. - -- bpo-32096: Revert memory allocator changes in the C API: move structures - back from _PyRuntime to Objects/obmalloc.c. The memory allocators are once - again initialized statically, and so PyMem_RawMalloc() and - Py_DecodeLocale() can be called before _PyRuntime_Initialize(). - -- bpo-32043: Add a new "developer mode": new "-X dev" command line option to - enable debug checks at runtime. - -- bpo-32023: SyntaxError is now correctly raised when a generator expression - without parenthesis is used instead of an inheritance list in a class - definition. The duplication of the parentheses can be omitted only on - calls. - -- bpo-32012: SyntaxError is now correctly raised when a generator expression - without parenthesis is passed as an argument, but followed by a trailing - comma. A generator expression always needs to be directly inside a set of - parentheses and cannot have a comma on either side. - -- bpo-28180: A new internal ``_Py_SetLocaleFromEnv(category)`` helper - function has been added in order to improve the consistency of behaviour - across different ``libc`` implementations (e.g. Android doesn't support - setting the locale from the environment by default). - -- bpo-31949: Fixed several issues in printing tracebacks - (PyTraceBack_Print()). Setting sys.tracebacklimit to 0 or less now - suppresses printing tracebacks. Setting sys.tracebacklimit to None now - causes using the default limit. Setting sys.tracebacklimit to an integer - larger than LONG_MAX now means using the limit LONG_MAX rather than the - default limit. Fixed integer overflows in the case of more than ``2**31`` - traceback items on Windows. Fixed output errors handling. - -- bpo-30696: Fix the interactive interpreter looping endlessly when no - memory. - -- bpo-20047: Bytearray methods partition() and rpartition() now accept only - bytes-like objects as separator, as documented. In particular they now - raise TypeError rather of returning a bogus result when an integer is - passed as a separator. - -- bpo-21720: BytesWarning no longer emitted when the *fromlist* argument of - ``__import__()`` or the ``__all__`` attribute of the module contain bytes - instances. - -- bpo-31845: Environment variables are once more read correctly at - interpreter startup. - -- bpo-28936: Ensure that lexically first syntax error involving a parameter - and ``global`` or ``nonlocal`` is detected first at a given scope. Patch - by Ivan Levkivskyi. - -- bpo-31825: Fixed OverflowError in the 'unicode-escape' codec and in - codecs.escape_decode() when decode an escaped non-ascii byte. - -- bpo-31618: The per-frame tracing logic added in 3.7a1 has been altered so - that ``frame->f_lineno`` is updated before either ``"line"`` or - ``"opcode"`` events are emitted. Previously, opcode events were emitted - first, and therefore would occasionally see stale line numbers on the - frame. The behavior of this feature has changed slightly as a result: when - both ``f_trace_lines`` and ``f_trace_opcodes`` are enabled, line events - now occur first. - -- bpo-28603: Print the full context/cause chain of exceptions on interpreter - exit, even if an exception in the chain is unhashable or compares equal to - later ones. Patch by Zane Bitter. - -- bpo-31786: Fix timeout rounding in the select module to round correctly - negative timeouts between -1.0 and 0.0. The functions now block waiting - for events as expected. Previously, the call was incorrectly non-blocking. - Patch by Pablo Galindo. - -- bpo-31781: Prevent crashes when calling methods of an uninitialized - ``zipimport.zipimporter`` object. Patch by Oren Milman. - -- bpo-30399: Standard repr() of BaseException with a single argument no - longer contains redundant trailing comma. - -- bpo-31626: Fixed a bug in debug memory allocator. There was a write to - freed memory after shrinking a memory block. - -- bpo-30817: ``PyErr_PrintEx()`` clears now the ignored exception that may - be raised by ``_PySys_SetObjectId()``, for example when no memory. - -Library -------- - -- bpo-28556: Two minor fixes for ``typing`` module: allow shallow copying - instances of generic classes, improve interaction of ``__init_subclass__`` - with generics. Original PRs by Ivan Levkivskyi. - -- bpo-32214: PEP 557, Data Classes. Provides a decorator which adds - boilerplate methods to classes which use type annotations so specify - fields. - -- bpo-27240: The header folding algorithm for the new email policies has - been rewritten, which also fixes bpo-30788, bpo-31831, and bpo-32182. In - particular, RFC2231 folding is now done correctly. - -- bpo-32186: io.FileIO.readall() and io.FileIO.read() now release the GIL - when getting the file size. Fixed hang of all threads with inaccessible - NFS server. Patch by Nir Soffer. - -- bpo-32101: Add :attr:`sys.flags.dev_mode` flag - -- bpo-32154: The ``asyncio.windows_utils.socketpair()`` function has been - removed: use directly :func:`socket.socketpair` which is available on all - platforms since Python 3.5 (before, it wasn't available on Windows). - ``asyncio.windows_utils.socketpair()`` was just an alias to - ``socket.socketpair`` on Python 3.5 and newer. - -- bpo-32089: warnings: In development (-X dev) and debug mode (pydebug - build), use the "default" action for ResourceWarning, rather than the - "always" action, in the default warnings filters. - -- bpo-32107: ``uuid.getnode()`` now preferentially returns universally - administered MAC addresses if available, over locally administered MAC - addresses. This makes a better guarantee for global uniqueness of UUIDs - returned from ``uuid.uuid1()``. If only locally administered MAC - addresses are available, the first such one found is returned. - -- bpo-23033: Wildcard is now supported in hostname when it is one and only - character in the left most segment of hostname in second argument of - :meth:`ssl.match_hostname`. Patch by Mandeep Singh. - -- bpo-12239: Make :meth:`!msilib.SummaryInformation.GetProperty` return - ``None`` when the value of property is ``VT_EMPTY``. Initial patch by - Mark Mc Mahon. - -- bpo-28334: Use :func:`os.path.expanduser` to find the ``~/.netrc`` file in - :class:`netrc.netrc`. If it does not exist, :exc:`FileNotFoundError` is - raised. Patch by Dimitri Merejkowsky. - -- bpo-32121: Made ``tracemalloc.Traceback`` behave more like the traceback - module, sorting the frames from oldest to most recent. - ``Traceback.format()`` now accepts negative *limit*, truncating the result - to the ``abs(limit)`` oldest frames. To get the old behaviour, one can use - the new *most_recent_first* argument to ``Traceback.format()``. (Patch by - Jesse Bakker.) - -- bpo-31325: Fix wrong usage of :func:`collections.namedtuple` in the - :meth:`RobotFileParser.parse() <urllib.robotparser.RobotFileParser.parse>` - method. Initial patch by Robin Wellner. - -- bpo-12382: :func:`!msilib.OpenDatabase` now raises a better exception - message when it couldn't open or create an MSI file. Initial patch by - William Tisäter. - -- bpo-19610: ``setup()`` now warns about invalid types for some fields. The - ``distutils.dist.Distribution`` class now warns when ``classifiers``, - ``keywords`` and ``platforms`` fields are not specified as a list or a - string. - -- bpo-32071: Added the ``-k`` command-line option to ``python -m unittest`` - to run only tests that match the given pattern(s). - -- bpo-10049: Added *nullcontext* no-op context manager to contextlib. This - provides a simpler and faster alternative to ExitStack() when handling - optional context managers. - -- bpo-28684: The new test.support.skip_unless_bind_unix_socket() decorator - is used here to skip asyncio tests that fail because the platform lacks a - functional bind() function for unix domain sockets (as it is the case for - non root users on the recent Android versions that run now SELinux in - enforcing mode). - -- bpo-32110: ``codecs.StreamReader.read(n)`` now returns not more than *n* - characters/bytes for non-negative *n*. This makes it compatible with - ``read()`` methods of other file-like objects. - -- bpo-27535: The warnings module doesn't leak memory anymore in the hidden - warnings registry for the "ignore" action of warnings filters. - warn_explicit() function doesn't add the warning key to the registry - anymore for the "ignore" action. - -- bpo-32088: warnings: When Python is build is debug mode (``Py_DEBUG``), - :exc:`DeprecationWarning`, :exc:`PendingDeprecationWarning` and - :exc:`ImportWarning` warnings are now displayed by default. - -- bpo-1647489: Fixed searching regular expression patterns that could match - an empty string. Non-empty string can now be correctly found after - matching an empty string. - -- bpo-25054: Added support of splitting on a pattern that could match an - empty string. - -- bpo-32072: Fixed issues with binary plists: Fixed saving bytearrays. - Identical objects will be saved only once. Equal references will be load - as identical objects. Added support for saving and loading recursive data - structures. - -- bpo-32069: Drop legacy SSL transport from asyncio, ssl.MemoryBIO is always - used anyway. - -- bpo-32066: asyncio: Support pathlib.Path in create_unix_connection; sock - arg should be optional - -- bpo-32046: Updates 2to3 to convert from operator.isCallable(obj) to - callable(obj). Patch by Donghee Na. - -- bpo-32018: inspect.signature should follow :pep:`8`, if the parameter has - an annotation and a default value. Patch by Donghee Na. - -- bpo-32025: Add time.thread_time() and time.thread_time_ns() - -- bpo-32037: Integers that fit in a signed 32-bit integer will be now - pickled with protocol 0 using the INT opcode. This will decrease the size - of a pickle, speed up pickling and unpickling, and make these integers be - unpickled as int instances in Python 2. - -- bpo-32034: Make asyncio.IncompleteReadError and LimitOverrunError - pickleable. - -- bpo-32015: Fixed the looping of asyncio in the case of reconnection the - socket during waiting async read/write from/to the socket. - -- bpo-32011: Restored support of loading marshal files with the TYPE_INT64 - code. These files can be produced in Python 2.7. - -- bpo-28369: Enhance add_reader/writer check that socket is not used by some - transport. Before, only cases when add_reader/writer were called with an - int FD were supported. Now the check is implemented correctly for all - file-like objects. - -- bpo-31976: Fix race condition when flushing a file is slow, which can - cause a segfault if closing the file from another thread. - -- bpo-31985: Formally deprecated aifc.openfp, sunau.openfp, and wave.openfp. - Since change 7bc817d5ba917528e8bd07ec461c635291e7b06a in 1993, openfp in - each of the three modules had been pointing to that module's open function - as a matter of backwards compatibility, though it had been both untested - and undocumented. - -- bpo-21862: cProfile command line now accepts ``-m module_name`` as an - alternative to script path. Patch by Sanyam Khurana. - -- bpo-31970: Reduce performance overhead of asyncio debug mode. - -- bpo-31843: *database* argument of sqlite3.connect() now accepts a - :term:`path-like object`, instead of just a string. - -- bpo-31945: Add Configurable *blocksize* to ``HTTPConnection`` and - ``HTTPSConnection`` for improved upload throughput. Patch by Nir Soffer. - -- bpo-31943: Add a ``cancelled()`` method to :class:`asyncio.Handle`. Patch - by Marat Sharafutdinov. - -- bpo-9678: Fixed determining the MAC address in the uuid module: Using - ifconfig on NetBSD and OpenBSD. Using arp on Linux, FreeBSD, NetBSD and - OpenBSD. Based on patch by Takayuki Shimizukawa. - -- bpo-30057: Fix potential missed signal in signal.signal(). - -- bpo-31933: Fix Blake2 params leaf_size and node_offset on big endian - platforms. Patch by Jack O'Connor. - -- bpo-21423: Add an initializer argument to {Process,Thread}PoolExecutor - -- bpo-31927: Fixed compilation of the socket module on NetBSD 8. Fixed - assertion failure or reading arbitrary data when parse a AF_BLUETOOTH - address on NetBSD and DragonFly BSD. - -- bpo-27666: Fixed stack corruption in curses.box() and curses.ungetmouse() - when the size of types chtype or mmask_t is less than the size of C long. - curses.box() now accepts characters as arguments. Based on patch by Steve - Fink. - -- bpo-31917: Add 3 new clock identifiers: :const:`time.CLOCK_BOOTTIME`, - :const:`time.CLOCK_PROF` and :const:`time.CLOCK_UPTIME`. - -- bpo-31897: plistlib now catches more errors when read binary plists and - raises InvalidFileException instead of unexpected exceptions. - -- bpo-25720: Fix the method for checking pad state of curses WINDOW. Patch - by Masayuki Yamamoto. - -- bpo-31893: Fixed the layout of the kqueue_event structure on OpenBSD and - NetBSD. Fixed the comparison of the kqueue_event objects. - -- bpo-31891: Fixed building the curses module on NetBSD. - -- bpo-31884: added required constants to subprocess module for setting - priority on windows - -- bpo-28281: Remove year (1-9999) limits on the Calendar.weekday() function. - Patch by Mark Gollahon. - -- bpo-31702: crypt.mksalt() now allows to specify the number of rounds for - SHA-256 and SHA-512 hashing. - -- bpo-30639: :func:`inspect.getfile` no longer computes the repr of unknown - objects to display in an error message, to protect against badly behaved - custom reprs. - -- bpo-30768: Fix the pthread+semaphore implementation of - PyThread_acquire_lock_timed() when called with timeout > 0 and - intr_flag=0: recompute the timeout if sem_timedwait() is interrupted by a - signal (EINTR). See also the :pep:`475`. - -- bpo-31854: Add ``mmap.ACCESS_DEFAULT`` constant. - -- bpo-31834: Use optimized code for BLAKE2 only with SSSE3+. The pure SSE2 - implementation is slower than the pure C reference implementation. - -- bpo-28292: Calendar.itermonthdates() will now consistently raise an - exception when a date falls outside of the 0001-01-01 through 9999-12-31 - range. To support applications that cannot tolerate such exceptions, the - new methods itermonthdays3() and itermonthdays4() are added. The new - methods return tuples and are not restricted by the range supported by - datetime.date. - -- bpo-28564: The shutil.rmtree() function has been sped up to 20--40%. This - was done using the os.scandir() function. - -- bpo-28416: Instances of pickle.Pickler subclass with the persistent_id() - method and pickle.Unpickler subclass with the persistent_load() method no - longer create reference cycles. - -- bpo-31653: Don't release the GIL if we can acquire a multiprocessing - semaphore immediately. - -- bpo-28326: Fix multiprocessing.Process when stdout and/or stderr is closed - or None. - -- bpo-20825: Add ``subnet_of`` and ``superset_of`` containment tests to - :class:`ipaddress.IPv6Network` and :class:`ipaddress.IPv4Network`. Patch - by Michel Albert and Cheryl Sabella. - -- bpo-31827: Remove the os.stat_float_times() function. It was introduced in - Python 2.3 for backward compatibility with Python 2.2, and was deprecated - since Python 3.1. - -- bpo-31756: Add a ``subprocess.Popen(text=False)`` keyword argument to - ``subprocess`` functions to be more explicit about when the library should - attempt to decode outputs into text. Patch by Andrew Clegg. - -- bpo-31819: Add AbstractEventLoop.sock_recv_into(). - -- bpo-31457: If nested log adapters are used, the inner ``process()`` - methods are no longer omitted. - -- bpo-31457: The ``manager`` property on LoggerAdapter objects is now - properly settable. - -- bpo-31806: Fix timeout rounding in time.sleep(), threading.Lock.acquire() - and socket.socket.settimeout() to round correctly negative timeouts - between -1.0 and 0.0. The functions now block waiting for events as - expected. Previously, the call was incorrectly non-blocking. Patch by - Pablo Galindo. - -- bpo-31803: time.clock() and time.get_clock_info('clock') now emit a - DeprecationWarning warning. - -- bpo-31800: Extended support for parsing UTC offsets. strptime '%z' can now - parse the output generated by datetime.isoformat, including seconds and - microseconds. - -- bpo-28603: traceback: Fix a TypeError that occurred during printing of - exception tracebacks when either the current exception or an exception in - its context/cause chain is unhashable. Patch by Zane Bitter. - -- bpo-30541: Add new function to seal a mock and prevent the automatically - creation of child mocks. Patch by Mario Corchero. - -- bpo-31784: Implement the :pep:`564`, add new 6 new functions with - nanosecond resolution to the :mod:`time` module: - :func:`~time.clock_gettime_ns`, :func:`~time.clock_settime_ns`, - :func:`~time.monotonic_ns`, :func:`~time.perf_counter_ns`, - :func:`~time.process_time_ns`, :func:`~time.time_ns`. - -- bpo-30143: 2to3 now generates a code that uses abstract collection classes - from collections.abc rather than collections. - -- bpo-31770: Prevent a crash when calling the ``__init__()`` method of a - ``sqlite3.Cursor`` object more than once. Patch by Oren Milman. - -- bpo-31764: Prevent a crash in ``sqlite3.Cursor.close()`` in case the - ``Cursor`` object is uninitialized. Patch by Oren Milman. - -- bpo-31752: Fix possible crash in timedelta constructor called with custom - integers. - -- bpo-31620: an empty asyncio.Queue now doesn't leak memory when queue.get - pollers timeout - -- bpo-31690: Allow the flags re.ASCII, re.LOCALE, and re.UNICODE to be used - as group flags for regular expressions. - -- bpo-30349: FutureWarning is now emitted if a regular expression contains - character set constructs that will change semantically in the future - (nested sets and set operations). - -- bpo-31664: Added support for the Blowfish hashing in the crypt module. - -- bpo-31632: Fix method set_protocol() of class _SSLProtocolTransport in - asyncio module. This method was previously modifying a wrong reference to - the protocol. - -- bpo-15037: Added a workaround for getkey() in curses for ncurses 5.7 and - earlier. - -- bpo-31307: Allow use of bytes objects for arguments to - :meth:`configparser.ConfigParser.read`. Patch by Vincent Michel. - -- bpo-31334: Fix ``poll.poll([timeout])`` in the ``select`` module for - arbitrary negative timeouts on all OSes where it can only be a - non-negative integer or -1. Patch by Riccardo Coccioli. - -- bpo-31310: multiprocessing's semaphore tracker should be launched again if - crashed. - -- bpo-31308: Make multiprocessing's forkserver process immune to Ctrl-C and - other user interruptions. If it crashes, restart it when necessary. - -- bpo-31245: Added support for AF_UNIX socket in asyncio - ``create_datagram_endpoint``. - -- bpo-30553: Add HTTP/2 status code 421 (Misdirected Request) to - :class:`http.HTTPStatus`. Patch by Vitor Pereira. - -Documentation -------------- - -- bpo-32105: Added asyncio.BaseEventLoop.connect_accepted_socket - versionadded marker. - -Tests ------ - -- bpo-31380: Skip test_httpservers test_undecodable_file on macOS: fails on - APFS. - -- bpo-31705: Skip test_socket.test_sha256() on Linux kernel older than 4.5. - The test fails with ENOKEY on kernel 3.10 (on ppc64le). A fix was merged - into the kernel 4.5. - -- bpo-32138: Skip on Android test_faulthandler tests that raise SIGSEGV and - remove the test.support.requires_android_level decorator. - -- bpo-32136: The runtime embedding tests have been split out from - ``Lib/test/test_capi.py`` into a new ``Lib/test/test_embed.py`` file. - -- bpo-28668: test.support.requires_multiprocessing_queue is removed. Skip - tests with test.support.import_module('multiprocessing.synchronize') - instead when the semaphore implementation is broken or missing. - -- bpo-32126: Skip test_get_event_loop_new_process in - test.test_asyncio.test_events when sem_open() is not functional. - -- bpo-31174: Fix test_tools.test_unparse: DirectoryTestCase now stores the - names sample to always test the same files. It prevents false alarms when - hunting reference leaks. - -Build ------ - -- bpo-28538: Revert the previous changes, the if_nameindex structure is - defined by Unified Headers. - -- bpo-28762: Revert the last commit, the F_LOCK macro is defined by Android - Unified Headers. - -- bpo-29040: Support building Android with Unified Headers. The first NDK - release to support Unified Headers is android-ndk-r14. - -- bpo-32059: ``detect_modules()`` in ``setup.py`` now also searches the - sysroot paths when cross-compiling. - -- bpo-31957: Fixes Windows SDK version detection when building for Windows. - -- bpo-31609: Fixes quotes in PCbuild/clean.bat - -- bpo-31934: Abort the build when building out of a not clean source tree. - -- bpo-31926: Fixed Argument Clinic sometimes causing compilation errors when - there was more than one function and/or method in a .c file with the same - name. - -- bpo-28791: Update Windows builds to use SQLite 3.21.0. - -- bpo-28791: Update OS X installer to use SQLite 3.21.0. - -- bpo-28643: Record profile-opt build progress with stamp files. - -- bpo-31866: Finish removing support for AtheOS. - -Windows -------- - -- bpo-1102: Return ``None`` when ``View.Fetch()`` returns - ``ERROR_NO_MORE_ITEMS`` instead of raising ``MSIError``. Initial patch by - Anthony Tuininga. - -- bpo-31944: Fixes Modify button in Apps and Features dialog. - -- bpo-20486: Implement the ``Database.Close()`` method to help closing MSI - database objects. - -- bpo-31857: Make the behavior of USE_STACKCHECK deterministic in a - multi-threaded environment. - -macOS ------ - -- bpo-31392: Update macOS installer to use OpenSSL 1.0.2m - -IDLE ----- - -- bpo-32207: Improve tk event exception tracebacks in IDLE. When tk event - handling is driven by IDLE's run loop, a confusing and distracting - queue.EMPTY traceback context is no longer added to tk event exception - tracebacks. The traceback is now the same as when event handling is - driven by user code. Patch based on a suggestion by Serhiy Storchaka. - -- bpo-32164: Delete unused file idlelib/tabbedpages.py. Use of TabbedPageSet - in configdialog was replaced by ttk.Notebook. - -- bpo-32100: IDLE: Fix old and new bugs in pathbrowser; improve tests. Patch - mostly by Cheryl Sabella. - -- bpo-31858: IDLE -- Restrict shell prompt manipulation to the shell. Editor - and output windows only see an empty last prompt line. This simplifies - the code and fixes a minor bug when newline is inserted. Sys.ps1, if - present, is read on Shell start-up, but is not set or changed. - -- bpo-31860: The font sample in the IDLE configuration dialog is now - editable. Changes persist while IDLE remains open - -- bpo-31836: Test_code_module now passes if run after test_idle, which sets - ps1. The code module uses sys.ps1 if present or sets it to '>>> ' if not. - Test_code_module now properly tests both behaviors. Ditto for ps2. - -- bpo-28603: Fix a TypeError that caused a shell restart when printing a - traceback that includes an exception that is unhashable. Patch by Zane - Bitter. - -- bpo-13802: Use non-Latin characters in the IDLE's Font settings sample. - Even if one selects a font that defines a limited subset of the unicode - Basic Multilingual Plane, tcl/tk will use other fonts that define a - character. The expanded example give users of non-Latin characters a - better idea of what they might see in IDLE's shell and editors. To make - room for the expanded sample, frames on the Font tab are re-arranged. The - Font/Tabs help explains a bit about the additions. - -Tools/Demos ------------ - -- bpo-32159: Remove CVS and Subversion tools: remove svneol.py and - treesync.py scripts. CPython migrated from CVS to Subversion, to - Mercurial, and then to Git. CVS and Subversion are no longer used to - develop CPython. - -- bpo-30722: Make redemo work with Python 3.6 and newer versions. Also, - remove the ``LOCALE`` option since it doesn't work with string patterns in - Python 3. Patch by Christoph Sarnowski. - -C API ------ - -- bpo-20891: Fix PyGILState_Ensure(). When PyGILState_Ensure() is called in - a non-Python thread before PyEval_InitThreads(), only call - PyEval_InitThreads() after calling PyThreadState_New() to fix a crash. - -- bpo-32125: The ``Py_UseClassExceptionsFlag`` flag has been removed. It was - deprecated and wasn't used anymore since Python 2.0. - -- bpo-25612: Move the current exception state from the frame object to the - co-routine. This simplifies the interpreter and fixes a couple of obscure - bugs caused by having swap exception state when entering or exiting a - generator. - -- bpo-23699: Add Py_RETURN_RICHCOMPARE macro to reduce boilerplate code in - rich comparison functions. - -- bpo-30697: The ``PyExc_RecursionErrorInst`` singleton is removed and - ``PyErr_NormalizeException()`` does not use it anymore. This singleton is - persistent and its members being never cleared may cause a segfault during - finalization of the interpreter. See also issue #22898. - - -What's New in Python 3.7.0 alpha 2? -=================================== - -*Release date: 2017-10-16* - -Core and Builtins ------------------ - -- bpo-31558: ``gc.freeze()`` is a new API that allows for moving all objects - currently tracked by the garbage collector to a permanent generation, - effectively removing them from future collection events. This can be used - to protect those objects from having their PyGC_Head mutated. In effect, - this enables great copy-on-write stability at fork(). - -- bpo-31642: Restored blocking "from package import module" by setting - sys.modules["package.module"] to None. - -- bpo-31708: Allow use of asynchronous generator expressions in synchronous - functions. - -- bpo-31709: Drop support of asynchronous __aiter__. - -- bpo-30404: The -u option now makes the stdout and stderr streams - unbuffered rather than line-buffered. - -- bpo-31619: Fixed a ValueError when convert a string with large number of - underscores to integer with binary base. - -- bpo-31602: Fix an assertion failure in ``zipimporter.get_source()`` in - case of a bad ``zlib.decompress()``. Patch by Oren Milman. - -- bpo-31592: Fixed an assertion failure in Python parser in case of a bad - ``unicodedata.normalize()``. Patch by Oren Milman. - -- bpo-31588: Raise a ``TypeError`` with a helpful error message when class - creation fails due to a metaclass with a bad ``__prepare__()`` method. - Patch by Oren Milman. - -- bpo-31574: Importlib was instrumented with two dtrace probes to profile - import timing. - -- bpo-31566: Fix an assertion failure in ``_warnings.warn()`` in case of a - bad ``__name__`` global. Patch by Oren Milman. - -- bpo-31506: Improved the error message logic for ``object.__new__`` and - ``object.__init__``. - -- bpo-31505: Fix an assertion failure in ``json``, in case - ``_json.make_encoder()`` received a bad ``encoder()`` argument. Patch by - Oren Milman. - -- bpo-31492: Fix assertion failures in case of failing to import from a - module with a bad ``__name__`` attribute, and in case of failing to access - an attribute of such a module. Patch by Oren Milman. - -- bpo-31478: Fix an assertion failure in ``_random.Random.seed()`` in case - the argument has a bad ``__abs__()`` method. Patch by Oren Milman. - -- bpo-31336: Speed up class creation by 10-20% by reducing the overhead in - the necessary special method lookups. Patch by Stefan Behnel. - -- bpo-31415: Add ``-X importtime`` option to show how long each import - takes. It can be used to optimize application's startup time. Support the - :envvar:`PYTHONPROFILEIMPORTTIME` as an equivalent way to enable this. - -- bpo-31410: Optimized calling wrapper and classmethod descriptors. - -- bpo-31353: :pep:`553` - Add a new built-in called ``breakpoint()`` which - calls ``sys.breakpointhook()``. By default this imports ``pdb`` and calls - ``pdb.set_trace()``, but users may override ``sys.breakpointhook()`` to - call whatever debugger they want. The original value of the hook is saved - in ``sys.__breakpointhook__``. - -- bpo-17852: Maintain a list of open buffered files, flush them before - exiting the interpreter. Based on a patch from Armin Rigo. - -- bpo-31315: Fix an assertion failure in imp.create_dynamic(), when - spec.name is not a string. Patch by Oren Milman. - -- bpo-31311: Fix a crash in the ``__setstate__()`` method of - ``ctypes._CData``, in case of a bad ``__dict__``. Patch by Oren Milman. - -- bpo-31293: Fix crashes in true division and multiplication of a timedelta - object by a float with a bad as_integer_ratio() method. Patch by Oren - Milman. - -- bpo-31285: Fix an assertion failure in ``warnings.warn_explicit``, when - the return value of the received loader's ``get_source()`` has a bad - ``splitlines()`` method. Patch by Oren Milman. - -- bpo-30406: Make ``async`` and ``await`` proper keywords, as specified in - :pep:`492`. - -Library -------- - -- bpo-30058: Fixed buffer overflow in select.kqueue.control(). - -- bpo-31672: ``idpattern`` in ``string.Template`` matched some non-ASCII - characters. Now it uses ``-i`` regular expression local flag to avoid - non-ASCII characters. - -- bpo-31701: On Windows, faulthandler.enable() now ignores MSC and COM - exceptions. - -- bpo-31728: Prevent crashes in ``_elementtree`` due to unsafe cleanup of - ``Element.text`` and ``Element.tail``. Patch by Oren Milman. - -- bpo-31671: Now ``re.compile()`` converts passed RegexFlag to normal int - object before compiling. bm_regex_compile benchmark shows 14% performance - improvements. - -- bpo-30397: The types of compiled regular objects and match objects are now - exposed as ``re.Pattern`` and ``re.Match``. This adds information in - pydoc output for the ``re`` module. - -- bpo-31675: Fixed memory leaks in Tkinter's methods splitlist() and split() - when pass a string larger than 2 GiB. - -- bpo-31673: Fixed typo in the name of Tkinter's method adderrorinfo(). - -- bpo-31648: Improvements to path predicates in ElementTree: Allow - whitespace around predicate parts, i.e. "[a = 'text']" instead of - requiring the less readable "[a='text']". Add support for text comparison - of the current node, like "[.='text']". Patch by Stefan Behnel. - -- bpo-30806: Fix the string representation of a netrc object. - -- bpo-31638: Add optional argument ``compressed`` to - ``zipapp.create_archive``, and add option ``--compress`` to the command - line interface of ``zipapp``. - -- bpo-25351: Avoid venv activate failures with undefined variables - -- bpo-20519: Avoid ctypes use (if possible) and improve import time for - uuid. - -- bpo-28293: The regular expression cache is no longer completely dumped - when it is full. - -- bpo-31596: Added pthread_getcpuclockid() to the time module - -- bpo-27494: Make 2to3 accept a trailing comma in generator expressions. For - example, ``set(x for x in [],)`` is now allowed. - -- bpo-30347: Stop crashes when concurrently iterate over itertools.groupby() - iterators. - -- bpo-30346: An iterator produced by itertools.groupby() iterator now - becomes exhausted after advancing the groupby iterator. - -- bpo-31556: Cancel asyncio.wait_for future faster if timeout <= 0 - -- bpo-31540: Allow passing a context object in - :class:`concurrent.futures.ProcessPoolExecutor` constructor. Also, free - job resources in :class:`concurrent.futures.ProcessPoolExecutor` earlier - to improve memory usage when a worker waits for new jobs. - -- bpo-31516: ``threading.current_thread()`` should not return a dummy thread - at shutdown. - -- bpo-31525: In the sqlite module, require the sqlite3_prepare_v2 API. Thus, - the sqlite module now requires sqlite version at least 3.3.9. - -- bpo-26510: argparse subparsers are now required by default. This matches - behaviour in Python 2. For optional subparsers, use the new parameter - ``add_subparsers(required=False)``. Patch by Anthony Sottile. (As of - 3.7.0rc1, the default was changed to not required as had been the case - since Python 3.3.) - -- bpo-27541: Reprs of subclasses of some collection and iterator classes - (``bytearray``, ``array.array``, ``collections.deque``, - ``collections.defaultdict``, ``itertools.count``, ``itertools.repeat``) - now contain actual type name instead of hardcoded names of the base class. - -- bpo-31351: python -m ensurepip now exits with non-zero exit code if pip - bootstrapping has failed. - -- bpo-31389: ``pdb.set_trace()`` now takes an optional keyword-only argument - ``header``. If given, this is printed to the console just before debugging - begins. - -Documentation -------------- - -- bpo-31537: Fix incorrect usage of ``get_history_length`` in readline - documentation example code. Patch by Brad Smith. - -- bpo-30085: The operator functions without double underscores are preferred - for clarity. The one with underscores are only kept for - back-compatibility. - -Build ------ - -- bpo-31696: Improve compiler version information in :data:`sys.version` - when Python is built with Clang. - -- bpo-31625: Stop using ranlib on static libraries. Instead, we assume ar - supports the 's' flag. - -- bpo-31624: Remove support for BSD/OS. - -- bpo-22140: Prevent double substitution of prefix in python-config.sh. - -- bpo-31569: Correct PCBuild/ case to PCbuild/ in build scripts and - documentation. - -- bpo-31536: Avoid wholesale rebuild after ``make regen-all`` if nothing - changed. - -IDLE ----- - -- bpo-31460: Simplify the API of IDLE's Module Browser. Passing a widget - instead of an flist with a root widget opens the option of creating a - browser frame that is only part of a window. Passing a full file name - instead of pieces assumed to come from a .py file opens the possibility of - browsing python files that do not end in .py. - -- bpo-31649: IDLE - Make _htest, _utest parameters keyword only. - -- bpo-31559: Remove test order dependence in idle_test.test_browser. - -- bpo-31459: Rename IDLE's module browser from Class Browser to Module - Browser. The original module-level class and method browser became a - module browser, with the addition of module-level functions, years ago. - Nested classes and functions were added yesterday. For - back-compatibility, the virtual event <<open-class-browser>>, which - appears on the Keys tab of the Settings dialog, is not changed. Patch by - Cheryl Sabella. - -- bpo-31500: Default fonts now are scaled on HiDPI displays. - -- bpo-1612262: IDLE module browser now shows nested classes and functions. - Original patches for code and tests by Guilherme Polo and Cheryl Sabella, - respectively. - -C API ------ - -- bpo-28280: Make ``PyMapping_Keys()``, ``PyMapping_Values()`` and - ``PyMapping_Items()`` always return a ``list`` (rather than a ``list`` or - a ``tuple``). Patch by Oren Milman. - -- bpo-31532: Fix memory corruption due to allocator mix in getpath.c between - Py_GetPath() and Py_SetPath() - -- bpo-25658: Implement :pep:`539` for Thread Specific Storage (TSS) API: it - is a new Thread Local Storage (TLS) API to CPython which would supersede - use of the existing TLS API within the CPython interpreter, while - deprecating the existing API. PEP written by Erik M. Bray, patch by - Masayuki Yamamoto. - - -What's New in Python 3.7.0 alpha 1? -=================================== - -*Release date: 2017-09-19* - -Security --------- - -- bpo-29781: SSLObject.version() now correctly returns None when handshake - over BIO has not been performed yet. - -- bpo-29505: Add fuzz tests for float(str), int(str), unicode(str); for - oss-fuzz. - -- bpo-30947: Upgrade libexpat embedded copy from version 2.2.1 to 2.2.3 to - get security fixes. - -- bpo-30730: Prevent environment variables injection in subprocess on - Windows. Prevent passing other environment variables and command - arguments. - -- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple - security vulnerabilities including: :cve:`2017-9233` (External entity - infinite loop DoS), :cve:`2016-9063` (Integer overflow, re-fix), - :cve:`2016-0718` (Fix regression bugs from 2.2.0's fix to - :cve:`2016-0718`) and :cve:`2012-0876` (Counter hash flooding with - SipHash). Note: the :cve:`2016-5300` (Use os-specific entropy sources like - getrandom) doesn't impact Python, since Python already gets entropy from - the OS to set the expat secret using ``XML_SetHashSalt()``. - -- bpo-30500: Fix urllib.parse.splithost() to correctly parse fragments. For - example, ``splithost('//127.0.0.1#@evil.com/')`` now correctly returns the - ``127.0.0.1`` host, instead of treating ``@evil.com`` as the host in an - authentication (``login@host``). - -- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of - :cve:`2016-0718` and :cve:`2016-4472`. See - https://sourceforge.net/p/expat/bugs/537/ for more information. - -Core and Builtins ------------------ - -- bpo-31490: Fix an assertion failure in ``ctypes`` class definition, in - case the class has an attribute whose name is specified in ``_anonymous_`` - but not in ``_fields_``. Patch by Oren Milman. - -- bpo-31471: Fix an assertion failure in ``subprocess.Popen()`` on Windows, - in case the env argument has a bad ``keys()`` method. Patch by Oren - Milman. - -- bpo-31418: Fix an assertion failure in ``PyErr_WriteUnraisable()`` in case - of an exception with a bad ``__module__`` attribute. Patch by Oren Milman. - -- bpo-31416: Fix assertion failures in case of a bad warnings.filters or - warnings.defaultaction. Patch by Oren Milman. - -- bpo-28411: Change direct usage of PyInterpreterState.modules to - PyImport_GetModuleDict(). Also introduce more uniformity in other code - that deals with sys.modules. This helps reduce complications when working - on sys.modules. - -- bpo-28411: Switch to the abstract API when dealing with - ``PyInterpreterState.modules``. This allows later support for all dict - subclasses and other Mapping implementations. Also add a - ``PyImport_GetModule()`` function to reduce a bunch of duplicated code. - -- bpo-31411: Raise a TypeError instead of SystemError in case - warnings.onceregistry is not a dictionary. Patch by Oren Milman. - -- bpo-31344: For finer control of tracing behaviour when testing the - interpreter, two new frame attributes have been added to control the - emission of particular trace events: ``f_trace_lines`` (``True`` by - default) to turn off per-line trace events; and ``f_trace_opcodes`` - (``False`` by default) to turn on per-opcode trace events. - -- bpo-31373: Fix several possible instances of undefined behavior due to - floating-point demotions. - -- bpo-30465: Location information (``lineno`` and ``col_offset``) in - f-strings is now (mostly) correct. This fixes tools like flake8 from - showing warnings on the wrong line (typically the first line of the file). - -- bpo-30860: Consolidate CPython's global runtime state under a single - struct. This improves discoverability of the runtime state. - -- bpo-31347: Fix possible undefined behavior in _PyObject_FastCall_Prepend. - -- bpo-31343: Include sys/sysmacros.h for major(), minor(), and makedev(). - GNU C library plans to remove the functions from sys/types.h. - -- bpo-31291: Fix an assertion failure in ``zipimport.zipimporter.get_data`` - on Windows, when the return value of ``pathname.replace('/','\\')`` isn't - a string. Patch by Oren Milman. - -- bpo-31271: Fix an assertion failure in the ``write()`` method of - ``io.TextIOWrapper``, when the encoder doesn't return a bytes object. - Patch by Oren Milman. - -- bpo-31243: Fix a crash in some methods of ``io.TextIOWrapper``, when the - decoder's state is invalid. Patch by Oren Milman. - -- bpo-30721: ``print`` now shows correct usage hint for using Python 2 - redirection syntax. Patch by Sanyam Khurana. - -- bpo-31070: Fix a race condition in importlib _get_module_lock(). - -- bpo-30747: Add a non-dummy implementation of _Py_atomic_store and - _Py_atomic_load on MSVC. - -- bpo-31095: Fix potential crash during GC caused by ``tp_dealloc`` which - doesn't call ``PyObject_GC_UnTrack()``. - -- bpo-31071: Avoid masking original TypeError in call with * unpacking when - other arguments are passed. - -- bpo-30978: str.format_map() now passes key lookup exceptions through. - Previously any exception was replaced with a KeyError exception. - -- bpo-30808: Use _Py_atomic API for concurrency-sensitive signal state. - -- bpo-30876: Relative import from unloaded package now reimports the package - instead of failing with SystemError. Relative import from non-package now - fails with ImportError rather than SystemError. - -- bpo-30703: Improve signal delivery. Avoid using Py_AddPendingCall from - signal handler, to avoid calling signal-unsafe functions. The tests I'm - adding here fail without the rest of the patch, on Linux and OS X. This - means our signal delivery logic had defects (some signals could be lost). - -- bpo-30765: Avoid blocking in pthread_mutex_lock() when - PyThread_acquire_lock() is asked not to block. - -- bpo-31161: Make sure the 'Missing parentheses' syntax error message is - only applied to SyntaxError, not to subclasses. Patch by Martijn Pieters. - -- bpo-30814: Fixed a race condition when import a submodule from a package. - -- bpo-30736: The internal unicodedata database has been upgraded to Unicode - 10.0. - -- bpo-30604: Move co_extra_freefuncs from per-thread to per-interpreter to - avoid crashes. - -- bpo-30597: ``print`` now shows expected input in custom error message when - used as a Python 2 statement. Patch by Sanyam Khurana. - -- bpo-30682: Removed a too-strict assertion that failed for certain - f-strings, such as eval("f'\\\n'") and eval("f'\\\r'"). - -- bpo-30501: The compiler now produces more optimal code for complex - condition expressions in the "if", "while" and "assert" statement, the - "if" expression, and generator expressions and comprehensions. - -- bpo-28180: Implement :pep:`538` (legacy C locale coercion). This means - that when a suitable coercion target locale is available, both the core - interpreter and locale-aware C extensions will assume the use of UTF-8 as - the default text encoding, rather than ASCII. - -- bpo-30486: Allows setting cell values for __closure__. Patch by Lisa - Roach. - -- bpo-30537: itertools.islice now accepts integer-like objects (having an - __index__ method) as start, stop, and slice arguments - -- bpo-25324: Tokens needed for parsing in Python moved to C. ``COMMENT``, - ``NL`` and ``ENCODING``. This way the tokens and tok_names in the token - module don't get changed when you import the tokenize module. - -- bpo-29104: Fixed parsing backslashes in f-strings. - -- bpo-27945: Fixed various segfaults with dict when input collections are - mutated during searching, inserting or comparing. Based on patches by - Duane Griffin and Tim Mitchell. - -- bpo-25794: Fixed type.__setattr__() and type.__delattr__() for - non-interned attribute names. Based on patch by Eryk Sun. - -- bpo-30039: If a KeyboardInterrupt happens when the interpreter is in the - middle of resuming a chain of nested 'yield from' or 'await' calls, it's - now correctly delivered to the innermost frame. - -- bpo-28974: ``object.__format__(x, '')`` is now equivalent to ``str(x)`` - rather than ``format(str(self), '')``. - -- bpo-30024: Circular imports involving absolute imports with binding a - submodule to a name are now supported. - -- bpo-12414: sys.getsizeof() on a code object now returns the sizes which - includes the code struct and sizes of objects which it references. Patch - by Donghee Na. - -- bpo-29839: len() now raises ValueError rather than OverflowError if - __len__() returned a large negative integer. - -- bpo-11913: README.rst is now included in the list of distutils standard - READMEs and therefore included in source distributions. - -- bpo-29914: Fixed default implementations of __reduce__ and - __reduce_ex__(). object.__reduce__() no longer takes arguments, - object.__reduce_ex__() now requires one argument. - -- bpo-29949: Fix memory usage regression of set and frozenset object. - -- bpo-29935: Fixed error messages in the index() method of tuple, list and - deque when pass indices of wrong type. - -- bpo-29816: Shift operation now has less opportunity to raise - OverflowError. ValueError always is raised rather than OverflowError for - negative counts. Shifting zero with non-negative count always returns - zero. - -- bpo-24821: Fixed the slowing down to 25 times in the searching of some - unlucky Unicode characters. - -- bpo-29102: Add a unique ID to PyInterpreterState. This makes it easier to - identify each subinterpreter. - -- bpo-29894: The deprecation warning is emitted if __complex__ returns an - instance of a strict subclass of complex. In a future versions of Python - this can be an error. - -- bpo-29859: Show correct error messages when any of the pthread_* calls in - thread_pthread.h fails. - -- bpo-29849: Fix a memory leak when an ImportError is raised during from - import. - -- bpo-28856: Fix an oversight that %b format for bytes should support - objects follow the buffer protocol. - -- bpo-29723: The ``sys.path[0]`` initialization change for bpo-29139 caused - a regression by revealing an inconsistency in how sys.path is initialized - when executing ``__main__`` from a zipfile, directory, or other import - location. The interpreter now consistently avoids ever adding the import - location's parent directory to ``sys.path``, and ensures no other - ``sys.path`` entries are inadvertently modified when inserting the import - location named on the command line. - -- bpo-29568: Escaped percent "%%" in the format string for classic string - formatting no longer allows any characters between two percents. - -- bpo-29714: Fix a regression that bytes format may fail when containing - zero bytes inside. - -- bpo-29695: bool(), float(), list() and tuple() no longer take keyword - arguments. The first argument of int() can now be passes only as - positional argument. - -- bpo-28893: Set correct __cause__ for errors about invalid awaitables - returned from __aiter__ and __anext__. - -- bpo-28876: ``bool(range)`` works even if ``len(range)`` raises - :exc:`OverflowError`. - -- bpo-29683: Fixes to memory allocation in _PyCode_SetExtra. Patch by Brian - Coleman. - -- bpo-29684: Fix minor regression of PyEval_CallObjectWithKeywords. It - should raise TypeError when kwargs is not a dict. But it might cause segv - when args=NULL and kwargs is not a dict. - -- bpo-28598: Support __rmod__ for subclasses of str being called before - str.__mod__. Patch by Martijn Pieters. - -- bpo-29607: Fix stack_effect computation for CALL_FUNCTION_EX. Patch by - Matthieu Dartiailh. - -- bpo-29602: Fix incorrect handling of signed zeros in complex constructor - for complex subclasses and for inputs having a __complex__ method. Patch - by Serhiy Storchaka. - -- bpo-29347: Fixed possibly dereferencing undefined pointers when creating - weakref objects. - -- bpo-29463: Add ``docstring`` field to Module, ClassDef, FunctionDef, and - AsyncFunctionDef ast nodes. docstring is not first stmt in their body - anymore. It affects ``co_firstlineno`` and ``co_lnotab`` of code object - for module and class. (Reverted in :issue:`32911`.) - -- bpo-29438: Fixed use-after-free problem in key sharing dict. - -- bpo-29546: Set the 'path' and 'name' attribute on ImportError for ``from - ... import ...``. - -- bpo-29546: Improve from-import error message with location - -- bpo-29478: If max_line_length=None is specified while using the Compat32 - policy, it is no longer ignored. Patch by Mircea Cosbuc. - -- bpo-29319: Prevent RunMainFromImporter overwriting sys.path[0]. - -- bpo-29337: Fixed possible BytesWarning when compare the code objects. - Warnings could be emitted at compile time. - -- bpo-29327: Fixed a crash when pass the iterable keyword argument to - sorted(). - -- bpo-29034: Fix memory leak and use-after-free in os module - (path_converter). - -- bpo-29159: Fix regression in bytes(x) when x.__index__() raises Exception. - -- bpo-29049: Call _PyObject_GC_TRACK() lazily when calling Python function. - Calling function is up to 5% faster. - -- bpo-28927: bytes.fromhex() and bytearray.fromhex() now ignore all ASCII - whitespace, not only spaces. Patch by Robert Xiao. - -- bpo-28932: Do not include <sys/random.h> if it does not exist. - -- bpo-25677: Correct the positioning of the syntax error caret for indented - blocks. Based on patch by Michael Layzell. - -- bpo-29000: Fixed bytes formatting of octals with zero padding in alternate - form. - -- bpo-18896: Python function can now have more than 255 parameters. - collections.namedtuple() now supports tuples with more than 255 elements. - -- bpo-28596: The preferred encoding is UTF-8 on Android. Patch written by - Chi Hsuan Yen. - -- bpo-22257: Clean up interpreter startup (see :pep:`432`). - -- bpo-26919: On Android, operating system data is now always encoded/decoded - to/from UTF-8, instead of the locale encoding to avoid inconsistencies - with os.fsencode() and os.fsdecode() which are already using UTF-8. - -- bpo-28991: functools.lru_cache() was susceptible to an obscure reentrancy - bug triggerable by a monkey-patched len() function. - -- bpo-28147: Fix a memory leak in split-table dictionaries: setattr() must - not convert combined table into split table. Patch written by INADA Naoki. - -- bpo-28739: f-string expressions are no longer accepted as docstrings and - by ast.literal_eval() even if they do not include expressions. - -- bpo-28512: Fixed setting the offset attribute of SyntaxError by - PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject(). - -- bpo-28918: Fix the cross compilation of xxlimited when Python has been - built with Py_DEBUG defined. - -- bpo-23722: Rather than silently producing a class that doesn't support - zero-argument ``super()`` in methods, failing to pass the new - ``__classcell__`` namespace entry up to ``type.__new__`` now results in a - ``DeprecationWarning`` and a class that supports zero-argument - ``super()``. - -- bpo-28797: Modifying the class __dict__ inside the __set_name__ method of - a descriptor that is used inside that class no longer prevents calling the - __set_name__ method of other descriptors. - -- bpo-28799: Remove the ``PyEval_GetCallStats()`` function and deprecate the - untested and undocumented ``sys.callstats()`` function. Remove the - ``CALL_PROFILE`` special build: use the :func:`sys.setprofile` function, - :mod:`cProfile` or :mod:`profile` to profile function calls. - -- bpo-12844: More than 255 arguments can now be passed to a function. - -- bpo-28782: Fix a bug in the implementation ``yield from`` when checking if - the next instruction is YIELD_FROM. Regression introduced by WORDCODE - (issue #26647). - -- bpo-28774: Fix error position of the unicode error in ASCII and Latin1 - encoders when a string returned by the error handler contains multiple - non-encodable characters (non-ASCII for the ASCII codec, characters out of - the U+0000-U+00FF range for Latin1). - -- bpo-28731: Optimize _PyDict_NewPresized() to create correct size dict. - Improve speed of dict literal with constant keys up to 30%. - -- bpo-28532: Show sys.version when -V option is supplied twice. - -- bpo-27100: The with-statement now checks for __enter__ before it checks - for __exit__. This gives less confusing error messages when both methods - are missing. Patch by Jonathan Ellington. - -- bpo-28746: Fix the set_inheritable() file descriptor method on platforms - that do not have the ioctl FIOCLEX and FIONCLEX commands. - -- bpo-26920: Fix not getting the locale's charset upon initializing the - interpreter, on platforms that do not have langinfo. - -- bpo-28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X - when decode astral characters. Patch by Xiang Zhang. - -- bpo-28665: Improve speed of the STORE_DEREF opcode by 40%. - -- bpo-19398: Extra slash no longer added to sys.path components in case of - empty compile-time PYTHONPATH components. - -- bpo-28621: Sped up converting int to float by reusing faster bits counting - implementation. Patch by Adrian Wielgosik. - -- bpo-28580: Optimize iterating split table values. Patch by Xiang Zhang. - -- bpo-28583: PyDict_SetDefault didn't combine split table when needed. Patch - by Xiang Zhang. - -- bpo-28128: Deprecation warning for invalid str and byte escape sequences - now prints better information about where the error occurs. Patch by - Serhiy Storchaka and Eric Smith. - -- bpo-28509: dict.update() no longer allocate unnecessary large memory. - -- bpo-28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug - build. - -- bpo-28517: Fixed of-by-one error in the peephole optimizer that caused - keeping unreachable code. - -- bpo-28214: Improved exception reporting for problematic __set_name__ - attributes. - -- bpo-23782: Fixed possible memory leak in _PyTraceback_Add() and exception - loss in PyTraceBack_Here(). - -- bpo-28183: Optimize and cleanup dict iteration. - -- bpo-26081: Added C implementation of asyncio.Future. Original patch by - Yury Selivanov. - -- bpo-28379: Added sanity checks and tests for PyUnicode_CopyCharacters(). - Patch by Xiang Zhang. - -- bpo-28376: The type of long range iterator is now registered as Iterator. - Patch by Oren Milman. - -- bpo-28376: Creating instances of range_iterator by calling range_iterator - type now is disallowed. Calling iter() on range instance is the only way. - Patch by Oren Milman. - -- bpo-26906: Resolving special methods of uninitialized type now causes - implicit initialization of the type instead of a fail. - -- bpo-18287: PyType_Ready() now checks that tp_name is not NULL. Original - patch by Niklas Koep. - -- bpo-24098: Fixed possible crash when AST is changed in process of - compiling it. - -- bpo-28201: Dict reduces possibility of 2nd conflict in hash table when - hashes have same lower bits. - -- bpo-28350: String constants with null character no longer interned. - -- bpo-26617: Fix crash when GC runs during weakref callbacks. - -- bpo-27942: String constants now interned recursively in tuples and - frozensets. - -- bpo-28289: ImportError.__init__ now resets not specified attributes. - -- bpo-21578: Fixed misleading error message when ImportError called with - invalid keyword args. - -- bpo-28203: Fix incorrect type in complex(1.0, {2:3}) error message. Patch - by Soumya Sharma. - -- bpo-28086: Single var-positional argument of tuple subtype was passed - unscathed to the C-defined function. Now it is converted to exact tuple. - -- bpo-28214: Now __set_name__ is looked up on the class instead of the - instance. - -- bpo-27955: Fallback on reading /dev/urandom device when the getrandom() - syscall fails with EPERM, for example when blocked by SECCOMP. - -- bpo-28192: Don't import readline in isolated mode. - -- bpo-27441: Remove some redundant assignments to ob_size in longobject.c. - Thanks Oren Milman. - -- bpo-27222: Clean up redundant code in long_rshift function. Thanks Oren - Milman. - -- Upgrade internal unicode databases to Unicode version 9.0.0. - -- bpo-28131: Fix a regression in zipimport's compile_source(). zipimport - should use the same optimization level as the interpreter. - -- bpo-28126: Replace Py_MEMCPY with memcpy(). Visual Studio can properly - optimize memcpy(). - -- bpo-28120: Fix dict.pop() for split dictionary when trying to remove a - "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang. - -- bpo-26182: Raise DeprecationWarning when async and await keywords are used - as variable/attribute/class/function name. - -- bpo-26182: Fix a refleak in code that raises DeprecationWarning. - -- bpo-28721: Fix asynchronous generators aclose() and athrow() to handle - StopAsyncIteration propagation properly. - -- bpo-26110: Speed-up method calls: add LOAD_METHOD and CALL_METHOD opcodes. - -Library -------- - -- bpo-31499: xml.etree: Fix a crash when a parser is part of a reference - cycle. - -- bpo-31482: ``random.seed()`` now works with bytes in version=1 - -- bpo-28556: typing.get_type_hints now finds the right globalns for classes - and modules by default (when no ``globalns`` was specified by the caller). - -- bpo-28556: Speed improvements to the ``typing`` module. Original PRs by - Ivan Levkivskyi and Mitar. - -- bpo-31544: The C accelerator module of ElementTree ignored exceptions - raised when looking up TreeBuilder target methods in XMLParser(). - -- bpo-31234: socket.create_connection() now fixes manually a reference - cycle: clear the variable storing the last exception on success. - -- bpo-31457: LoggerAdapter objects can now be nested. - -- bpo-31431: SSLContext.check_hostname now automatically sets - SSLContext.verify_mode to ssl.CERT_REQUIRED instead of failing with a - ValueError. - -- bpo-31233: socketserver.ThreadingMixIn now keeps a list of non-daemonic - threads to wait until all these threads complete in server_close(). - -- bpo-28638: Changed the implementation strategy for - collections.namedtuple() to substantially reduce the use of exec() in - favor of precomputed methods. As a result, the *verbose* parameter and - *_source* attribute are no longer supported. The benefits include 1) - having a smaller memory footprint for applications using multiple named - tuples, 2) faster creation of the named tuple class (approx 4x to 6x - depending on how it is measured), and 3) minor speed-ups for instance - creation using __new__, _make, and _replace. (The primary patch - contributor is Jelle Zijlstra with further improvements by INADA Naoki, - Serhiy Storchaka, and Raymond Hettinger.) - -- bpo-31400: Improves SSL error handling to avoid losing error numbers. - -- bpo-27629: Make return types of SSLContext.wrap_bio() and - SSLContext.wrap_socket() customizable. - -- bpo-28958: ssl.SSLContext() now uses OpenSSL error information when a - context cannot be instantiated. - -- bpo-28182: The SSL module now raises SSLCertVerificationError when OpenSSL - fails to verify the peer's certificate. The exception contains more - information about the error. - -- bpo-27340: SSLSocket.sendall() now uses memoryview to create slices of - data. This fixes support for all bytes-like object. It is also more - efficient and avoids costly copies. - -- bpo-14191: A new function - ``argparse.ArgumentParser.parse_intermixed_args`` provides the ability to - parse command lines where there user intermixes options and positional - arguments. - -- bpo-31178: Fix string concatenation bug in rare error path in the - subprocess module - -- bpo-31350: Micro-optimize :func:`asyncio._get_running_loop` to become up - to 10% faster. - -- bpo-31170: expat: Update libexpat from 2.2.3 to 2.2.4. Fix copying of - partial characters for UTF-8 input (libexpat bug 115): - https://github.com/libexpat/libexpat/issues/115 - -- bpo-29136: Add TLS 1.3 cipher suites and OP_NO_TLSv1_3. - -- bpo-1198569: ``string.Template`` subclasses can optionally define - ``braceidpattern`` if they want to specify different placeholder patterns - inside and outside the braces. If None (the default) it falls back to - ``idpattern``. - -- bpo-31326: concurrent.futures.ProcessPoolExecutor.shutdown() now - explicitly closes the call queue. Moreover, shutdown(wait=True) now also - join the call queue thread, to prevent leaking a dangling thread. - -- bpo-27144: The ``map()`` and ``as_completed()`` iterators in - ``concurrent.futures`` now avoid keeping a reference to yielded objects. - -- bpo-31281: Fix ``fileinput.FileInput(files, inplace=True)`` when ``files`` - contain ``pathlib.Path`` objects. - -- bpo-10746: Fix ctypes producing wrong :pep:`3118` type codes for integer - types. - -- bpo-27584: ``AF_VSOCK`` has been added to the socket interface which - allows communication between virtual machines and their host. - -- bpo-22536: The subprocess module now sets the filename when - FileNotFoundError is raised on POSIX systems due to the executable or cwd - not being found. - -- bpo-29741: Update some methods in the _pyio module to also accept integer - types. Patch by Oren Milman. - -- bpo-31249: concurrent.futures: WorkItem.run() used by ThreadPoolExecutor - now breaks a reference cycle between an exception object and the WorkItem - object. - -- bpo-31247: xmlrpc.server now explicitly breaks reference cycles when using - sys.exc_info() in code handling exceptions. - -- bpo-23835: configparser: reading defaults in the ``ConfigParser()`` - constructor is now using ``read_dict()``, making its behavior consistent - with the rest of the parser. Non-string keys and values in the defaults - dictionary are now being implicitly converted to strings. Patch by James - Tocknell. - -- bpo-31238: pydoc: the stop() method of the private ServerThread class now - waits until DocServer.serve_until_quit() completes and then explicitly - sets its docserver attribute to None to break a reference cycle. - -- bpo-5001: Many asserts in ``multiprocessing`` are now more informative, - and some error types have been changed to more specific ones. - -- bpo-31109: Convert zipimport to use Argument Clinic. - -- bpo-30102: The ssl and hashlib modules now call - OPENSSL_add_all_algorithms_noconf() on OpenSSL < 1.1.0. The function - detects CPU features and enables optimizations on some CPU architectures - such as POWER8. Patch is based on research from Gustavo Serra Scalet. - -- bpo-18966: Non-daemonic threads created by a multiprocessing.Process are - now joined on child exit. - -- bpo-31183: ``dis`` now works with asynchronous generator and coroutine - objects. Patch by George Collins based on diagnosis by Luciano Ramalho. - -- bpo-5001: There are a number of uninformative asserts in the - ``multiprocessing`` module, as noted in issue 5001. This change fixes two - of the most potentially problematic ones, since they are in - error-reporting code, in the ``multiprocessing.managers.convert_to_error`` - function. (It also makes more informative a ValueError message.) The only - potentially problematic change is that the AssertionError is now a - TypeError; however, this should also help distinguish it from an - AssertionError being *reported* by the function/its caller (such as in - issue 31169). - Patch by Allen W. Smith (drallensmith on github). - -- bpo-31185: Fixed miscellaneous errors in asyncio speedup module. - -- bpo-31151: socketserver.ForkingMixIn.server_close() now waits until all - child processes completed to prevent leaking zombie processes. - -- bpo-31072: Add an ``include_file`` parameter to - ``zipapp.create_archive()`` - -- bpo-24700: Optimize array.array comparison. It is now from 10x up to 70x - faster when comparing arrays holding values of the same integer type. - -- bpo-31135: ttk: fix the destroy() method of LabeledScale and OptionMenu - classes. Call the parent destroy() method even if the used attribute - doesn't exist. The LabeledScale.destroy() method now also explicitly - clears label and scale attributes to help the garbage collector to destroy - all widgets. - -- bpo-31107: Fix ``copyreg._slotnames()`` mangled attribute calculation for - classes whose name begins with an underscore. Patch by Shane Harvey. - -- bpo-31080: Allow ``logging.config.fileConfig`` to accept kwargs and/or - args. - -- bpo-30897: ``pathlib.Path`` objects now include an ``is_mount()`` method - (only implemented on POSIX). This is similar to ``os.path.ismount(p)``. - Patch by Cooper Ry Lees. - -- bpo-31061: Fixed a crash when using asyncio and threads. - -- bpo-30987: Added support for CAN ISO-TP protocol in the socket module. - -- bpo-30522: Added a ``setStream`` method to ``logging.StreamHandler`` to - allow the stream to be set after creation. - -- bpo-30502: Fix handling of long oids in ssl. Based on patch by Christian - Heimes. - -- bpo-5288: Support tzinfo objects with sub-minute offsets. - -- bpo-30919: Fix shared memory performance regression in multiprocessing in - 3.x. Shared memory used anonymous memory mappings in 2.x, while 3.x mmaps - actual files. Try to be careful to do as little disk I/O as possible. - -- bpo-26732: Fix too many fds in processes started with the "forkserver" - method. A child process would inherit as many fds as the number of - still-running children. - -- bpo-29403: Fix ``unittest.mock``'s autospec to not fail on method-bound - builtin functions. Patch by Aaron Gallagher. - -- bpo-30961: Fix decrementing a borrowed reference in tracemalloc. - -- bpo-19896: Fix multiprocessing.sharedctypes to recognize typecodes ``'q'`` - and ``'Q'``. - -- bpo-30946: Remove obsolete code in readline module for platforms where GNU - readline is older than 2.1 or where select() is not available. - -- bpo-25684: Change ``ttk.OptionMenu`` radiobuttons to be unique across - instances of ``OptionMenu``. - -- bpo-30886: Fix multiprocessing.Queue.join_thread(): it now waits until the - thread completes, even if the thread was started by the same process which - created the queue. - -- bpo-29854: Fix segfault in readline when using readline's history-size - option. Patch by Nir Soffer. - -- bpo-30794: Added multiprocessing.Process.kill method to terminate using - the SIGKILL signal on Unix. - -- bpo-30319: socket.close() now ignores ECONNRESET error. - -- bpo-30828: Fix out of bounds write in - ``asyncio.CFuture.remove_done_callback()``. - -- bpo-30302: Use keywords in the ``repr`` of ``datetime.timedelta``. - -- bpo-30807: signal.setitimer() may disable the timer when passed a tiny - value. Tiny values (such as 1e-6) are valid non-zero values for - setitimer(), which is specified as taking microsecond-resolution - intervals. However, on some platform, our conversion routine could convert - 1e-6 into a zero interval, therefore disabling the timer instead of - (re-)scheduling it. - -- bpo-30441: Fix bug when modifying os.environ while iterating over it - -- bpo-29585: Avoid importing ``sysconfig`` from ``site`` to improve startup - speed. Python startup is about 5% faster on Linux and 30% faster on macOS. - -- bpo-29293: Add missing parameter "n" on - multiprocessing.Condition.notify(). The doc claims - multiprocessing.Condition behaves like threading.Condition, but its - notify() method lacked the optional "n" argument (to specify the number of - sleepers to wake up) that threading.Condition.notify() accepts. - -- bpo-30532: Fix email header value parser dropping folding white space in - certain cases. - -- bpo-30596: Add a ``close()`` method to ``multiprocessing.Process``. - -- bpo-9146: Fix a segmentation fault in _hashopenssl when standard hash - functions such as md5 are not available in the linked OpenSSL library. As - in some special FIPS-140 build environments. - -- bpo-29169: Update zlib to 1.2.11. - -- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that - contains CR or LF. Patch by Donghee Na. - -- bpo-30879: os.listdir() and os.scandir() now emit bytes names when called - with bytes-like argument. - -- bpo-30746: Prohibited the '=' character in environment variable names in - ``os.putenv()`` and ``os.spawn*()``. - -- bpo-30664: The description of a unittest subtest now preserves the order - of keyword arguments of TestCase.subTest(). - -- bpo-21071: struct.Struct.format type is now :class:`str` instead of - :class:`bytes`. - -- bpo-29212: Fix concurrent.futures.thread.ThreadPoolExecutor threads to - have a non repr() based thread name by default when no thread_name_prefix - is supplied. They will now identify themselves as - "ThreadPoolExecutor-y_n". - -- bpo-29755: Fixed the lgettext() family of functions in the gettext module. - They now always return bytes. - -- bpo-30616: Functional API of enum allows to create empty enums. Patched by - Donghee Na - -- bpo-30038: Fix race condition between signal delivery and wakeup file - descriptor. Patch by Nathaniel Smith. - -- bpo-23894: lib2to3 now recognizes ``rb'...'`` and ``f'...'`` strings. - -- bpo-24744: pkgutil.walk_packages function now raises ValueError if *path* - is a string. Patch by Sanyam Khurana. - -- bpo-24484: Avoid race condition in multiprocessing cleanup. - -- bpo-30589: Fix multiprocessing.Process.exitcode to return the opposite of - the signal number when the process is killed by a signal (instead of 255) - when using the "forkserver" method. - -- bpo-28994: The traceback no longer displayed for SystemExit raised in a - callback registered by atexit. - -- bpo-30508: Don't log exceptions if Task/Future "cancel()" method was - called. - -- bpo-30645: Fix path calculation in ``imp.load_package()``, fixing it for - cases when a package is only shipped with bytecodes. Patch by Alexandru - Ardelean. - -- bpo-11822: The dis.dis() function now is able to disassemble nested code - objects. - -- bpo-30624: selectors does not take KeyboardInterrupt and SystemExit into - account, leaving a fd in a bad state in case of error. Patch by Giampaolo - Rodola'. - -- bpo-30595: multiprocessing.Queue.get() with a timeout now polls its reader - in non-blocking mode if it succeeded to acquire the lock but the acquire - took longer than the timeout. - -- bpo-28556: Updates to typing module: Add generic AsyncContextManager, add - support for ContextManager on all versions. Original PRs by Jelle Zijlstra - and Ivan Levkivskyi - -- bpo-30605: re.compile() no longer raises a BytesWarning when compiling a - bytes instance with misplaced inline modifier. Patch by Roy Williams. - -- bpo-29870: Fix ssl sockets leaks when connection is aborted in asyncio/ssl - implementation. Patch by Michaël Sghaïer. - -- bpo-29743: Closing transport during handshake process leaks open socket. - Patch by Nikolay Kim - -- bpo-27585: Fix waiter cancellation in asyncio.Lock. Patch by Mathieu - Sornay. - -- bpo-30014: modify() method of poll(), epoll() and devpoll() based classes - of selectors module is around 10% faster. Patch by Giampaolo Rodola'. - -- bpo-30418: On Windows, subprocess.Popen.communicate() now also ignore - EINVAL on stdin.write() if the child process is still running but closed - the pipe. - -- bpo-30463: Added empty __slots__ to abc.ABC. This allows subclassers to - deny __dict__ and __weakref__ creation. Patch by Aaron Hall. - -- bpo-30520: Loggers are now pickleable. - -- bpo-30557: faulthandler now correctly filters and displays exception codes - on Windows - -- bpo-30526: Add TextIOWrapper.reconfigure() and a - TextIOWrapper.write_through attribute. - -- bpo-30245: Fix possible overflow when organize struct.pack_into error - message. Patch by Yuan Liu. - -- bpo-30378: Fix the problem that logging.handlers.SysLogHandler cannot - handle IPv6 addresses. - -- bpo-16500: Allow registering at-fork handlers. - -- bpo-30470: Deprecate invalid ctypes call protection on Windows. Patch by - Mariatta Wijaya. - -- bpo-30414: multiprocessing.Queue._feed background running thread do not - break from main loop on exception. - -- bpo-30003: Fix handling escape characters in HZ codec. Based on patch by - Ma Lin. - -- bpo-30149: inspect.signature() now supports callables with - variable-argument parameters wrapped with partialmethod. Patch by Donghee - Na. - -- bpo-30436: importlib.find_spec() raises ModuleNotFoundError instead of - AttributeError if the specified parent module is not a package (i.e. lacks - a __path__ attribute). - -- bpo-30301: Fix AttributeError when using SimpleQueue.empty() under *spawn* - and *forkserver* start methods. - -- bpo-30375: Warnings emitted when compile a regular expression now always - point to the line in the user code. Previously they could point into - inners of the re module if emitted from inside of groups or conditionals. - -- bpo-30329: imaplib and poplib now catch the Windows socket WSAEINVAL error - (code 10022) on shutdown(SHUT_RDWR): An invalid operation was attempted. - This error occurs sometimes on SSL connections. - -- bpo-29196: Removed previously deprecated in Python 2.4 classes Plist, Dict - and _InternalDict in the plistlib module. Dict values in the result of - functions readPlist() and readPlistFromBytes() are now normal dicts. You - no longer can use attribute access to access items of these dictionaries. - -- bpo-9850: The :mod:`macpath` is now deprecated and will be removed in - Python 3.8. - -- bpo-30299: Compiling regular expression in debug mode on CPython now - displays the compiled bytecode in human readable form. - -- bpo-30048: Fixed ``Task.cancel()`` can be ignored when the task is running - coroutine and the coroutine returned without any more ``await``. - -- bpo-30266: contextlib.AbstractContextManager now supports - anti-registration by setting __enter__ = None or __exit__ = None, - following the pattern introduced in bpo-25958. Patch by Jelle Zijlstra. - -- bpo-30340: Enhanced regular expressions optimization. This increased the - performance of matching some patterns up to 25 times. - -- bpo-30298: Weaken the condition of deprecation warnings for inline - modifiers. Now allowed several subsequential inline modifiers at the start - of the pattern (e.g. ``'(?i)(?s)...'``). In verbose mode whitespaces and - comments now are allowed before and between inline modifiers (e.g. ``'(?x) - (?i) (?s)...'``). - -- bpo-30285: Optimized case-insensitive matching and searching of regular - expressions. - -- bpo-29990: Fix range checking in GB18030 decoder. Original patch by Ma - Lin. - -- bpo-29979: rewrite cgi.parse_multipart, reusing the FieldStorage class and - making its results consistent with those of FieldStorage for - multipart/form-data requests. Patch by Pierre Quentel. - -- bpo-30243: Removed the __init__ methods of _json's scanner and encoder. - Misusing them could cause memory leaks or crashes. Now scanner and - encoder objects are completely initialized in the __new__ methods. - -- bpo-30215: Compiled regular expression objects with the re.LOCALE flag no - longer depend on the locale at compile time. Only the locale at matching - time affects the result of matching. - -- bpo-30185: Avoid KeyboardInterrupt tracebacks in forkserver helper process - when Ctrl-C is received. - -- bpo-30103: binascii.b2a_uu() and uu.encode() now support using ``'`'`` as - zero instead of space. - -- bpo-28556: Various updates to typing module: add typing.NoReturn type, use - WrapperDescriptorType, minor bug-fixes. Original PRs by Jim - Fasarakis-Hilliard and Ivan Levkivskyi. - -- bpo-30205: Fix getsockname() for unbound AF_UNIX sockets on Linux. - -- bpo-30228: The seek() and tell() methods of io.FileIO now set the internal - seekable attribute to avoid one syscall on open() (in buffered or text - mode). - -- bpo-30190: unittest's assertAlmostEqual and assertNotAlmostEqual provide a - better message in case of failure which includes the difference between - left and right arguments. (patch by Giampaolo Rodola') - -- bpo-30101: Add support for curses.A_ITALIC. - -- bpo-29822: inspect.isabstract() now works during __init_subclass__. Patch - by Nate Soares. - -- bpo-29960: Preserve generator state when _random.Random.setstate() raises - an exception. Patch by Bryan Olson. - -- bpo-30070: Fixed leaks and crashes in errors handling in the parser - module. - -- bpo-22352: Column widths in the output of dis.dis() are now adjusted for - large line numbers and instruction offsets. - -- bpo-30061: Fixed crashes in IOBase methods __next__() and readlines() when - readline() or __next__() respectively return non-sizeable object. Fixed - possible other errors caused by not checking results of PyObject_Size(), - PySequence_Size(), or PyMapping_Size(). - -- bpo-30218: Fix PathLike support for shutil.unpack_archive. Patch by Jelle - Zijlstra. - -- bpo-10076: Compiled regular expression and match objects in the re module - now support copy.copy() and copy.deepcopy() (they are considered atomic). - -- bpo-30068: _io._IOBase.readlines will check if it's closed first when hint - is present. - -- bpo-29694: Fixed race condition in pathlib mkdir with flags parents=True. - Patch by Armin Rigo. - -- bpo-29692: Fixed arbitrary unchaining of RuntimeError exceptions in - contextlib.contextmanager. Patch by Siddharth Velankar. - -- bpo-26187: Test that sqlite3 trace callback is not called multiple times - when schema is changing. Indirectly fixed by switching to use - sqlite3_prepare_v2() in bpo-9303. Patch by Aviv Palivoda. - -- bpo-30017: Allowed calling the close() method of the zip entry writer - object multiple times. Writing to a closed writer now always produces a - ValueError. - -- bpo-29998: Pickling and copying ImportError now preserves name and path - attributes. - -- bpo-29995: re.escape() now escapes only regex special characters. - -- bpo-29962: Add math.remainder operation, implementing remainder as - specified in IEEE 754. - -- bpo-29649: Improve struct.pack_into() exception messages for problems with - the buffer size and offset. Patch by Andrew Nester. - -- bpo-29654: Support If-Modified-Since HTTP header (browser cache). Patch - by Pierre Quentel. - -- bpo-29931: Fixed comparison check for ipaddress.ip_interface objects. - Patch by Sanjay Sundaresan. - -- bpo-29953: Fixed memory leaks in the replace() method of datetime and time - objects when pass out of bound fold argument. - -- bpo-29942: Fix a crash in itertools.chain.from_iterable when encountering - long runs of empty iterables. - -- bpo-10030: Sped up reading encrypted ZIP files by 2 times. - -- bpo-29204: Element.getiterator() and the html parameter of XMLParser() - were deprecated only in the documentation (since Python 3.2 and 3.4 - correspondingly). Now using them emits a deprecation warning. - -- bpo-27863: Fixed multiple crashes in ElementTree caused by race conditions - and wrong types. - -- bpo-25996: Added support of file descriptors in os.scandir() on Unix. - os.fwalk() is sped up by 2 times by using os.scandir(). - -- bpo-28699: Fixed a bug in pools in multiprocessing.pool that raising an - exception at the very first of an iterable may swallow the exception or - make the program hang. Patch by Davin Potts and Xiang Zhang. - -- bpo-23890: unittest.TestCase.assertRaises() now manually breaks a - reference cycle to not keep objects alive longer than expected. - -- bpo-29901: The zipapp module now supports general path-like objects, not - just pathlib.Path. - -- bpo-25803: Avoid incorrect errors raised by Path.mkdir(exist_ok=True) when - the OS gives priority to errors such as EACCES over EEXIST. - -- bpo-29861: Release references to tasks, their arguments and their results - as soon as they are finished in multiprocessing.Pool. - -- bpo-19930: The mode argument of os.makedirs() no longer affects the file - permission bits of newly created intermediate-level directories. - -- bpo-29884: faulthandler: Restore the old sigaltstack during teardown. - Patch by Christophe Zeitouny. - -- bpo-25455: Fixed crashes in repr of recursive buffered file-like objects. - -- bpo-29800: Fix crashes in partial.__repr__ if the keys of partial.keywords - are not strings. Patch by Michael Seifert. - -- bpo-8256: Fixed possible failing or crashing input() if attributes - "encoding" or "errors" of sys.stdin or sys.stdout are not set or are not - strings. - -- bpo-28692: Using non-integer value for selecting a plural form in gettext - is now deprecated. - -- bpo-26121: Use C library implementation for math functions erf() and - erfc(). - -- bpo-29619: os.stat() and os.DirEntry.inode() now convert inode (st_ino) - using unsigned integers. - -- bpo-28298: Fix a bug that prevented array 'Q', 'L' and 'I' from accepting - big intables (objects that have __int__) as elements. - -- bpo-29645: Speed up importing the webbrowser module. - webbrowser.register() is now thread-safe. - -- bpo-28231: The zipfile module now accepts path-like objects for external - paths. - -- bpo-26915: index() and count() methods of collections.abc.Sequence now - check identity before checking equality when do comparisons. - -- bpo-28682: Added support for bytes paths in os.fwalk(). - -- bpo-29728: Add new :const:`socket.TCP_NOTSENT_LOWAT` (Linux 3.12) - constant. Patch by Nathaniel J. Smith. - -- bpo-29623: Allow use of path-like object as a single argument in - ConfigParser.read(). Patch by David Ellis. - -- bpo-9303: Migrate sqlite3 module to _v2 API. Patch by Aviv Palivoda. - -- bpo-28963: Fix out of bound iteration in - asyncio.Future.remove_done_callback implemented in C. - -- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol no longer closes - before all pipes are closed. - -- bpo-29271: Fix Task.current_task and Task.all_tasks implemented in C to - accept None argument as their pure Python implementation. - -- bpo-29703: Fix asyncio to support instantiation of new event loops in - child processes. - -- bpo-29615: SimpleXMLRPCDispatcher no longer chains KeyError (or any other - exception) to exception(s) raised in the dispatched methods. Patch by Petr - Motejlek. - -- bpo-7769: Method register_function() of - xmlrpc.server.SimpleXMLRPCDispatcher and its subclasses can now be used as - a decorator. - -- bpo-29376: Fix assertion error in threading._DummyThread.is_alive(). - -- bpo-28624: Add a test that checks that cwd parameter of Popen() accepts - PathLike objects. Patch by Sayan Chowdhury. - -- bpo-28518: Start a transaction implicitly before a DML statement. Patch by - Aviv Palivoda. - -- bpo-29742: get_extra_info() raises exception if get called on closed ssl - transport. Patch by Nikolay Kim. - -- bpo-16285: urllib.parse.quote is now based on RFC 3986 and hence includes - '~' in the set of characters that is not quoted by default. Patch by - Christian Theune and Ratnadeep Debnath. - -- bpo-29532: Altering a kwarg dictionary passed to functools.partial() no - longer affects a partial object after creation. - -- bpo-29110: Fix file object leak in aifc.open() when file is given as a - filesystem path and is not in valid AIFF format. Patch by Anthony Zhang. - -- bpo-22807: Add uuid.SafeUUID and uuid.UUID.is_safe to relay information - from the platform about whether generated UUIDs are generated with a - multiprocessing safe method. - -- bpo-29576: Improve some deprecations in importlib. Some deprecated methods - now emit DeprecationWarnings and have better descriptive messages. - -- bpo-29534: Fixed different behaviour of Decimal.from_float() for _decimal - and _pydecimal. Thanks Andrew Nester. - -- bpo-10379: locale.format_string now supports the 'monetary' keyword - argument, and locale.format is deprecated. - -- bpo-29851: importlib.reload() now raises ModuleNotFoundError if the module - lacks a spec. - -- bpo-28556: Various updates to typing module: typing.Counter, - typing.ChainMap, improved ABC caching, etc. Original PRs by Jelle - Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa. - -- bpo-29100: Fix datetime.fromtimestamp() regression introduced in Python - 3.6.0: check minimum and maximum years. - -- bpo-29416: Prevent infinite loop in pathlib.Path.mkdir - -- bpo-29444: Fixed out-of-bounds buffer access in the group() method of the - match object. Based on patch by WGH. - -- bpo-29377: Add WrapperDescriptorType, MethodWrapperType, and - MethodDescriptorType built-in types to types module. Original patch by - Manuel Krebber. - -- bpo-29218: Unused install_misc command is now removed. It has been - documented as unused since 2000. Patch by Eric N. Vander Weele. - -- bpo-29368: The extend() method is now called instead of the append() - method when unpickle collections.deque and other list-like objects. This - can speed up unpickling to 2 times. - -- bpo-29338: The help of a builtin or extension class now includes the - constructor signature if __text_signature__ is provided for the class. - -- bpo-29335: Fix subprocess.Popen.wait() when the child process has exited - to a stopped instead of terminated state (ex: when under ptrace). - -- bpo-29290: Fix a regression in argparse that help messages would wrap at - non-breaking spaces. - -- bpo-28735: Fixed the comparison of mock.MagickMock with mock.ANY. - -- bpo-29197: Removed deprecated function ntpath.splitunc(). - -- bpo-29210: Removed support of deprecated argument "exclude" in - tarfile.TarFile.add(). - -- bpo-29219: Fixed infinite recursion in the repr of uninitialized - ctypes.CDLL instances. - -- bpo-29192: Removed deprecated features in the http.cookies module. - -- bpo-29193: A format string argument for string.Formatter.format() is now - positional-only. - -- bpo-29195: Removed support of deprecated undocumented keyword arguments in - methods of regular expression objects. - -- bpo-28969: Fixed race condition in C implementation of - functools.lru_cache. KeyError could be raised when cached function with - full cache was simultaneously called from different threads with the same - uncached arguments. - -- bpo-20804: The unittest.mock.sentinel attributes now preserve their - identity when they are copied or pickled. - -- bpo-29142: In urllib.request, suffixes in no_proxy environment variable - with leading dots could match related hostnames again (e.g. .b.c matches - a.b.c). Patch by Milan Oberkirch. - -- bpo-28961: Fix unittest.mock._Call helper: don't ignore the name parameter - anymore. Patch written by Jiajun Huang. - -- bpo-15812: inspect.getframeinfo() now correctly shows the first line of a - context. Patch by Sam Breese. - -- bpo-28985: Update authorizer constants in sqlite3 module. Patch by - Dingyuan Wang. - -- bpo-29079: Prevent infinite loop in pathlib.resolve() on Windows - -- bpo-13051: Fixed recursion errors in large or resized - curses.textpad.Textbox. Based on patch by Tycho Andersen. - -- bpo-9770: curses.ascii predicates now work correctly with negative - integers. - -- bpo-28427: old keys should not remove new values from WeakValueDictionary - when collecting from another thread. - -- bpo-28923: Remove editor artifacts from Tix.py. - -- bpo-28871: Fixed a crash when deallocate deep ElementTree. - -- bpo-19542: Fix bugs in WeakValueDictionary.setdefault() and - WeakValueDictionary.pop() when a GC collection happens in another thread. - -- bpo-20191: Fixed a crash in resource.prlimit() when passing a sequence - that doesn't own its elements as limits. - -- bpo-16255: subprocess.Popen uses /system/bin/sh on Android as the shell, - instead of /bin/sh. - -- bpo-28779: multiprocessing.set_forkserver_preload() would crash the - forkserver process if a preloaded module instantiated some multiprocessing - objects such as locks. - -- bpo-26937: The chown() method of the tarfile.TarFile class does not fail - now when the grp module cannot be imported, as for example on Android - platforms. - -- bpo-28847: dbm.dumb now supports reading read-only files and no longer - writes the index file when it is not changed. A deprecation warning is - now emitted if the index file is missed and recreated in the 'r' and 'w' - modes (will be an error in future Python releases). - -- bpo-27030: Unknown escapes consisting of ``'\'`` and an ASCII letter in - re.sub() replacement templates regular expressions now are errors. - -- bpo-28835: Fix a regression introduced in warnings.catch_warnings(): call - warnings.showwarning() if it was overridden inside the context manager. - -- bpo-27172: To assist with upgrades from 2.7, the previously documented - deprecation of ``inspect.getfullargspec()`` has been reversed. This - decision may be revisited again after the Python 2.7 branch is no longer - officially supported. - -- bpo-28740: Add sys.getandroidapilevel(): return the build time API version - of Android as an integer. Function only available on Android. - -- bpo-26273: Add new :const:`socket.TCP_CONGESTION` (Linux 2.6.13) and - :const:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written - by Omar Sandoval. - -- bpo-28752: Restored the __reduce__() methods of datetime objects. - -- bpo-28727: Regular expression patterns, _sre.SRE_Pattern objects created - by re.compile(), become comparable (only x==y and x!=y operators). This - change should fix the issue #18383: don't duplicate warning filters when - the warnings module is reloaded (thing usually only done in unit tests). - -- bpo-20572: Remove the subprocess.Popen.wait endtime parameter. It was - deprecated in 3.4 and undocumented prior to that. - -- bpo-25659: In ctypes, prevent a crash calling the from_buffer() and - from_buffer_copy() methods on abstract classes like Array. - -- bpo-28548: In the "http.server" module, parse the protocol version if - possible, to avoid using HTTP 0.9 in some error responses. - -- bpo-19717: Makes Path.resolve() succeed on paths that do not exist. Patch - by Vajrasky Kok - -- bpo-28563: Fixed possible DoS and arbitrary code execution when handle - plural form selections in the gettext module. The expression parser now - supports exact syntax supported by GNU gettext. - -- bpo-28387: Fixed possible crash in _io.TextIOWrapper deallocator when the - garbage collector is invoked in other thread. Based on patch by Sebastian - Cufre. - -- bpo-27517: LZMA compressor and decompressor no longer raise exceptions if - given empty data twice. Patch by Benjamin Fogle. - -- bpo-28549: Fixed segfault in curses's addch() with ncurses6. - -- bpo-28449: tarfile.open() with mode "r" or "r:" now tries to open a tar - file with compression before trying to open it without compression. - Otherwise it had 50% chance failed with ignore_zeros=True. - -- bpo-23262: The webbrowser module now supports Firefox 36+ and derived - browsers. Based on patch by Oleg Broytman. - -- bpo-24241: The webbrowser in an X environment now prefers using the - default browser directly. Also, the webbrowser register() function now has - a documented 'preferred' argument, to specify browsers to be returned by - get() with no arguments. Patch by David Steele - -- bpo-27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused - by representing the scale as float value internally in Tk. tkinter.IntVar - now works if float value is set to underlying Tk variable. - -- bpo-28255: calendar.TextCalendar.prweek() no longer prints a space after a - weeks's calendar. calendar.TextCalendar.pryear() no longer prints - redundant newline after a year's calendar. Based on patch by Xiang Zhang. - -- bpo-28255: calendar.TextCalendar.prmonth() no longer prints a space at the - start of new line after printing a month's calendar. Patch by Xiang - Zhang. - -- bpo-20491: The textwrap.TextWrapper class now honors non-breaking spaces. - Based on patch by Kaarle Ritvanen. - -- bpo-28353: os.fwalk() no longer fails on broken links. - -- bpo-28430: Fix iterator of C implemented asyncio.Future doesn't accept - non-None value is passed to it.send(val). - -- bpo-27025: Generated names for Tkinter widgets now start by the "!" prefix - for readability. - -- bpo-25464: Fixed HList.header_exists() in tkinter.tix module by addin a - workaround to Tix library bug. - -- bpo-28488: shutil.make_archive() no longer adds entry "./" to ZIP archive. - -- bpo-25953: re.sub() now raises an error for invalid numerical group - reference in replacement template even if the pattern is not found in the - string. Error message for invalid group reference now includes the group - index and the position of the reference. Based on patch by SilentGhost. - -- bpo-28469: timeit now uses the sequence 1, 2, 5, 10, 20, 50,... instead of - 1, 10, 100,... for autoranging. - -- bpo-28115: Command-line interface of the zipfile module now uses argparse. - Added support of long options. - -- bpo-18219: Optimize csv.DictWriter for large number of columns. Patch by - Mariatta Wijaya. - -- bpo-28448: Fix C implemented asyncio.Future didn't work on Windows. - -- bpo-23214: In the "io" module, the argument to BufferedReader and - BytesIO's read1() methods is now optional and can be -1, matching the - BufferedIOBase specification. - -- bpo-28480: Fix error building socket module when multithreading is - disabled. - -- bpo-28240: timeit: remove ``-c/--clock`` and ``-t/--time`` command line - options which were deprecated since Python 3.3. - -- bpo-28240: timeit now repeats the benchmarks 5 times instead of only 3 to - make benchmarks more reliable. - -- bpo-28240: timeit autorange now uses a single loop iteration if the - benchmark takes less than 10 seconds, instead of 10 iterations. "python3 - -m timeit -s 'import time' 'time.sleep(1)'" now takes 4 seconds instead of - 40 seconds. - -- Distutils.sdist now looks for README and setup.py files with case - sensitivity. This behavior matches that found in Setuptools 6.0 and later. - See `setuptools 100 <https://github.com/pypa/setuptools/issues/100>`_ for - rationale. - -- bpo-24452: Make webbrowser support Chrome on Mac OS X. Patch by Ned - Batchelder. - -- bpo-20766: Fix references leaked by pdb in the handling of SIGINT - handlers. - -- bpo-27998: Fixed bytes path support in os.scandir() on Windows. Patch by - Eryk Sun. - -- bpo-28317: The disassembler now decodes FORMAT_VALUE argument. - -- bpo-28380: unittest.mock Mock autospec functions now properly support - assert_called, assert_not_called, and assert_called_once. - -- bpo-28229: lzma module now supports pathlib. - -- bpo-28321: Fixed writing non-BMP characters with binary format in - plistlib. - -- bpo-28225: bz2 module now supports pathlib. Initial patch by Ethan - Furman. - -- bpo-28227: gzip now supports pathlib. Patch by Ethan Furman. - -- bpo-28332: Deprecated silent truncations in socket.htons and socket.ntohs. - Original patch by Oren Milman. - -- bpo-27358: Optimized merging var-keyword arguments and improved error - message when passing a non-mapping as a var-keyword argument. - -- bpo-28257: Improved error message when passing a non-iterable as a - var-positional argument. Added opcode BUILD_TUPLE_UNPACK_WITH_CALL. - -- bpo-28322: Fixed possible crashes when unpickle itertools objects from - incorrect pickle data. Based on patch by John Leitch. - -- bpo-28228: imghdr now supports pathlib. - -- bpo-28226: compileall now supports pathlib. - -- bpo-28314: Fix function declaration (C flags) for the getiterator() method - of xml.etree.ElementTree.Element. - -- bpo-28148: Stop using localtime() and gmtime() in the time module. - Introduced platform independent _PyTime_localtime API that is similar to - POSIX localtime_r, but available on all platforms. Patch by Ed Schouten. - -- bpo-28253: Fixed calendar functions for extreme months: 0001-01 and - 9999-12. Methods itermonthdays() and itermonthdays2() are reimplemented so - that they don't call itermonthdates() which can cause datetime.date - under/overflow. - -- bpo-28275: Fixed possible use after free in the decompress() methods of - the LZMADecompressor and BZ2Decompressor classes. Original patch by John - Leitch. - -- bpo-27897: Fixed possible crash in sqlite3.Connection.create_collation() - if pass invalid string-like object as a name. Patch by Xiang Zhang. - -- bpo-18844: random.choices() now has k as a keyword-only argument to - improve the readability of common cases and come into line with the - signature used in other languages. - -- bpo-18893: Fix invalid exception handling in Lib/ctypes/macholib/dyld.py. - Patch by Madison May. - -- bpo-27611: Fixed support of default root window in the tkinter.tix module. - Added the master parameter in the DisplayStyle constructor. - -- bpo-27348: In the traceback module, restore the formatting of exception - messages like "Exception: None". This fixes a regression introduced in - 3.5a2. - -- bpo-25651: Allow false values to be used for msg parameter of subTest(). - -- bpo-27778: Fix a memory leak in os.getrandom() when the getrandom() is - interrupted by a signal and a signal handler raises a Python exception. - -- bpo-28200: Fix memory leak on Windows in the os module (fix - path_converter() function). - -- bpo-25400: RobotFileParser now correctly returns default values for - crawl_delay and request_rate. Initial patch by Peter Wirtz. - -- bpo-27932: Prevent memory leak in win32_ver(). - -- Fix UnboundLocalError in socket._sendfile_use_sendfile. - -- bpo-28075: Check for ERROR_ACCESS_DENIED in Windows implementation of - os.stat(). Patch by Eryk Sun. - -- bpo-22493: Warning message emitted by using inline flags in the middle of - regular expression now contains a (truncated) regex pattern. Patch by Tim - Graham. - -- bpo-25270: Prevent codecs.escape_encode() from raising SystemError when an - empty bytestring is passed. - -- bpo-28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam. - -- bpo-25895: Enable WebSocket URL schemes in urllib.parse.urljoin. Patch by - Gergely Imreh and Markus Holtermann. - -- bpo-28114: Fix a crash in parse_envlist() when env contains byte strings. - Patch by Eryk Sun. - -- bpo-27599: Fixed buffer overrun in binascii.b2a_qp() and - binascii.a2b_qp(). - -- bpo-27906: Fix socket accept exhaustion during high TCP traffic. Patch by - Kevin Conway. - -- bpo-28174: Handle when SO_REUSEPORT isn't properly supported. Patch by - Seth Michael Larson. - -- bpo-26654: Inspect functools.partial in asyncio.Handle.__repr__. Patch by - iceboy. - -- bpo-26909: Fix slow pipes IO in asyncio. Patch by INADA Naoki. - -- bpo-28176: Fix callbacks race in asyncio.SelectorLoop.sock_connect. - -- bpo-27759: Fix selectors incorrectly retain invalid file descriptors. - Patch by Mark Williams. - -- bpo-28325: Remove vestigial MacOS 9 macurl2path module and its tests. - -- bpo-28368: Refuse monitoring processes if the child watcher has no loop - attached. Patch by Vincent Michel. - -- bpo-28369: Raise RuntimeError when transport's FD is used with add_reader, - add_writer, etc. - -- bpo-28370: Speedup asyncio.StreamReader.readexactly. Patch by Коренберг - Марк. - -- bpo-28371: Deprecate passing asyncio.Handles to run_in_executor. - -- bpo-28372: Fix asyncio to support formatting of non-python coroutines. - -- bpo-28399: Remove UNIX socket from FS before binding. Patch by Коренберг - Марк. - -- bpo-27972: Prohibit Tasks to await on themselves. - -- bpo-24142: Reading a corrupt config file left configparser in an invalid - state. Original patch by Florian Höch. - -- bpo-29581: ABCMeta.__new__ now accepts ``**kwargs``, allowing abstract - base classes to use keyword parameters in __init_subclass__. Patch by Nate - Soares. - -- bpo-25532: inspect.unwrap() will now only try to unwrap an object - sys.getrecursionlimit() times, to protect against objects which create a - new object on every attribute access. - -- bpo-30177: path.resolve(strict=False) no longer cuts the path after the - first element not present in the filesystem. Patch by Antoine Pietri. - -Documentation -------------- - -- bpo-31294: Fix incomplete code snippet in the ZeroMQSocketListener and - ZeroMQSocketHandler examples and adapt them to Python 3. - -- bpo-21649: Add RFC 7525 and Mozilla server side TLS links to SSL - documentation. - -- bpo-31128: Allow the pydoc server to bind to arbitrary hostnames. - -- bpo-30803: Clarify doc on truth value testing. Original patch by Peter - Thomassen. - -- bpo-30176: Add missing attribute related constants in curses - documentation. - -- bpo-30052: the link targets for :func:`bytes` and :func:`bytearray` are - now their respective type definitions, rather than the corresponding - builtin function entries. Use :ref:`bytes <func-bytes>` and - :ref:`bytearray <func-bytearray>` to reference the latter. In order to - ensure this and future cross-reference updates are applied automatically, - the daily documentation builds now disable the default output caching - features in Sphinx. - -- bpo-26985: Add missing info of code object in inspect documentation. - -- bpo-19824: Improve the documentation for, and links to, template strings - by emphasizing their utility for internationalization, and by clarifying - some usage constraints. (See also: bpo-20314, bpo-12518) - -- bpo-28929: Link the documentation to its source file on GitHub. - -- bpo-25008: Document smtpd.py as effectively deprecated and add a pointer - to aiosmtpd, a third-party asyncio-based replacement. - -- bpo-26355: Add canonical header link on each page to corresponding major - version of the documentation. Patch by Matthias Bussonnier. - -- bpo-29349: Fix Python 2 syntax in code for building the documentation. - -- bpo-23722: The data model reference and the porting section in the 3.6 - What's New guide now cover the additional ``__classcell__`` handling - needed for custom metaclasses to fully support :pep:`487` and - zero-argument ``super()``. - -- bpo-28513: Documented command-line interface of zipfile. - -Tests ------ - -- bpo-29639: test.support.HOST is now "localhost", a new HOSTv4 constant has - been added for your ``127.0.0.1`` needs, similar to the existing HOSTv6 - constant. - -- bpo-31320: Silence traceback in test_ssl - -- bpo-31346: Prefer PROTOCOL_TLS_CLIENT and PROTOCOL_TLS_SERVER protocols - for SSLContext. - -- bpo-25674: Remove sha256.tbs-internet.com ssl test - -- bpo-30715: Address ALPN callback changes for OpenSSL 1.1.0f. The latest - version behaves like OpenSSL 1.0.2 and no longer aborts handshake. - -- bpo-30822: regrtest: Exclude tzdata from regrtest --all. When running the - test suite using --use=all / -u all, exclude tzdata since it makes - test_datetime too slow (15-20 min on some buildbots) which then times out - on some buildbots. Fix also regrtest command line parser to allow passing - -u extralargefile to run test_zipfile64. - -- bpo-30695: Add the ``set_nomemory(start, stop)`` and - ``remove_mem_hooks()`` functions to the ``_testcapi`` module. - -- bpo-30357: test_thread: setUp() now uses support.threading_setup() and - support.threading_cleanup() to wait until threads complete to avoid random - side effects on following tests. Initial patch written by Grzegorz - Grzywacz. - -- bpo-30197: Enhanced functions swap_attr() and swap_item() in the - test.support module. They now work when delete replaced attribute or item - inside the with statement. The old value of the attribute or item (or - None if it doesn't exist) now will be assigned to the target of the "as" - clause, if there is one. - -- bpo-24932: Use proper command line parsing in _testembed - -- bpo-28950: Disallow -j0 to be combined with -T/-l in regrtest command line - arguments. - -- bpo-28683: Fix the tests that bind() a unix socket and raise - PermissionError on Android for a non-root user. - -- bpo-26936: Fix the test_socket failures on Android - getservbyname(), - getservbyport() and getaddrinfo() are broken on some Android API levels. - -- bpo-28666: Now test.support.rmtree is able to remove unwritable or - unreadable directories. - -- bpo-23839: Various caches now are cleared before running every test file. - -- bpo-26944: Fix test_posix for Android where 'id -G' is entirely wrong or - missing the effective gid. - -- bpo-28409: regrtest: fix the parser of command line arguments. - -- bpo-28217: Adds _testconsole module to test console input. - -- bpo-26939: Add the support.setswitchinterval() function to fix - test_functools hanging on the Android armv7 qemu emulator. - -Build ------ - -- bpo-31354: Allow ``--with-lto`` to be used on all builds, not just ``make - profile-opt``. - -- bpo-31370: Remove support for building --without-threads. This option is - not really useful anymore in the 21st century. Removing lots of - conditional paths allows us to simplify the code base, including in - difficult to maintain low-level internal code. - -- bpo-31341: Per :pep:`11`, support for the IRIX operating system was - removed. - -- bpo-30854: Fix compile error when compiling --without-threads. Patch by - Masayuki Yamamoto. - -- bpo-30687: Locate msbuild.exe on Windows when building rather than - vcvarsall.bat - -- bpo-20210: Support the *disabled* marker in Setup files. Extension modules - listed after this marker are not built at all, neither by the Makefile nor - by setup.py. - -- bpo-29941: Add ``--with-assertions`` configure flag to explicitly enable C - ``assert()`` checks. Defaults to off. ``--with-pydebug`` implies - ``--with-assertions``. - -- bpo-28787: Fix out-of-tree builds of Python when configured with - ``--with--dtrace``. - -- bpo-29243: Prevent unnecessary rebuilding of Python during ``make test``, - ``make install`` and some other make targets when configured with - ``--enable-optimizations``. - -- bpo-23404: Don't regenerate generated files based on file modification - time anymore: the action is now explicit. Replace ``make touch`` with - ``make regen-all``. - -- bpo-29643: Fix ``--enable-optimization`` didn't work. - -- bpo-27593: sys.version and the platform module python_build(), - python_branch(), and python_revision() functions now use git information - rather than hg when building from a repo. - -- bpo-29572: Update Windows build and OS X installers to use OpenSSL 1.0.2k. - -- bpo-27659: Prohibit implicit C function declarations: use - ``-Werror=implicit-function-declaration`` when possible (GCC and Clang, - but it depends on the compiler version). Patch written by Chi Hsuan Yen. - -- bpo-29384: Remove old Be OS helper scripts. - -- bpo-26851: Set Android compilation and link flags. - -- bpo-28768: Fix implicit declaration of function _setmode. Patch by - Masayuki Yamamoto - -- bpo-29080: Removes hard dependency on hg.exe from PCBuild/build.bat - -- bpo-23903: Added missed names to PC/python3.def. - -- bpo-28762: lockf() is available on Android API level 24, but the F_LOCK - macro is not defined in android-ndk-r13. - -- bpo-28538: Fix the compilation error that occurs because if_nameindex() is - available on Android API level 24, but the if_nameindex structure is not - defined. - -- bpo-20211: Do not add the directory for installing C header files and the - directory for installing object code libraries to the cross compilation - search paths. Original patch by Thomas Petazzoni. - -- bpo-28849: Do not define sys.implementation._multiarch on Android. - -- bpo-10656: Fix out-of-tree building on AIX. Patch by Tristan Carel and - Michael Haubenwallner. - -- bpo-26359: Rename --with-optimiations to --enable-optimizations. - -- bpo-28444: Fix missing extensions modules when cross compiling. - -- bpo-28208: Update Windows build and OS X installers to use SQLite 3.14.2. - -- bpo-28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j. - -- bpo-21124: Fix building the _struct module on Cygwin by passing ``NULL`` - instead of ``&PyType_Type`` to PyVarObject_HEAD_INIT. Patch by Masayuki - Yamamoto. - -- bpo-13756: Fix building extensions modules on Cygwin. Patch by Roumen - Petrov, based on original patch by Jason Tishler. - -- bpo-21085: Add configure check for siginfo_t.si_band, which Cygwin does - not provide. Patch by Masayuki Yamamoto with review and rebase by Erik - Bray. - -- bpo-28258: Fixed build with Estonian locale (python-config and distclean - targets in Makefile). Patch by Arfrever Frehtes Taifersar Arahesis. - -- bpo-26661: setup.py now detects system libffi with multiarch wrapper. - -- bpo-27979: A full copy of libffi is no longer bundled for use when - building _ctypes on non-OSX UNIX platforms. An installed copy of libffi - is now required when building _ctypes on such platforms. - -- bpo-15819: Remove redundant include search directory option for building - outside the source tree. - -- bpo-28676: Prevent missing 'getentropy' declaration warning on macOS. - Patch by Gareth Rees. - -Windows -------- - -- bpo-31392: Update Windows build to use OpenSSL 1.1.0f - -- bpo-30389: Adds detection of Visual Studio 2017 to distutils on Windows. - -- bpo-31358: zlib is no longer bundled in the CPython source, instead it is - downloaded on demand just like bz2, lzma, OpenSSL, Tcl/Tk, and SQLite. - -- bpo-31340: Change to building with MSVC v141 (included with Visual Studio - 2017) - -- bpo-30581: os.cpu_count() now returns the correct number of processors on - Windows when the number of logical processors is greater than 64. - -- bpo-30916: Pre-build OpenSSL, Tcl and Tk and include the binaries in the - build. - -- bpo-30731: Add a missing xmlns to python.manifest so that it matches the - schema. - -- bpo-30291: Allow requiring 64-bit interpreters from py.exe using -64 - suffix. Contributed by Steve (Gadget) Barnes. - -- bpo-30362: Adds list options (-0, -0p) to py.exe launcher. Contributed by - Steve Barnes. - -- bpo-23451: Fix socket deprecation warnings in socketmodule.c. Patch by - Segev Finer. - -- bpo-30450: The build process on Windows no longer depends on Subversion, - instead pulling external code from GitHub via a Python script. If Python - 3.6 is not found on the system (via ``py -3.6``), NuGet is used to - download a copy of 32-bit Python. - -- bpo-29579: Removes readme.txt from the installer. - -- bpo-25778: winreg does not truncate string correctly (Patch by Eryk Sun) - -- bpo-28896: Deprecate WindowsRegistryFinder and disable it by default - -- bpo-28522: Fixes mishandled buffer reallocation in getpathp.c - -- bpo-28402: Adds signed catalog files for stdlib on Windows. - -- bpo-28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk - Sun) - -- bpo-28251: Improvements to help manuals on Windows. - -- bpo-28110: launcher.msi has different product codes between 32-bit and - 64-bit - -- bpo-28161: Opening CON for write access fails - -- bpo-28162: WindowsConsoleIO readall() fails if first line starts with - Ctrl+Z - -- bpo-28163: WindowsConsoleIO fileno() passes wrong flags to _open_osfhandle - -- bpo-28164: _PyIO_get_console_type fails for various paths - -- bpo-28137: Renames Windows path file to ._pth - -- bpo-28138: Windows ._pth file should allow import site - -IDLE ----- - -- bpo-31493: IDLE code context -- fix code update and font update timers. - Canceling timers prevents a warning message when test_idle completes. - -- bpo-31488: IDLE - Update non-key options in former extension classes. When - applying configdialog changes, call .reload for each feature class. Change - ParenMatch so updated options affect existing instances attached to - existing editor windows. - -- bpo-31477: IDLE - Improve rstrip entry in doc. Strip trailing whitespace - strips more than blank spaces. Multiline string literals are not skipped. - -- bpo-31480: IDLE - make tests pass with zzdummy extension disabled by - default. - -- bpo-31421: Document how IDLE runs tkinter programs. IDLE calls tcl/tk - update in the background in order to make live interaction and - experimentation with tkinter applications much easier. - -- bpo-31414: IDLE -- fix tk entry box tests by deleting first. Adding to an - int entry is not the same as deleting and inserting because int('') will - fail. - -- bpo-31051: Rearrange IDLE configdialog GenPage into Window, Editor, and - Help sections. - -- bpo-30617: IDLE - Add docstrings and tests for outwin subclass of editor. - Move some data and functions from the class to module level. Patch by - Cheryl Sabella. - -- bpo-31287: IDLE - Do not modify tkinter.message in test_configdialog. - -- bpo-27099: Convert IDLE's built-in 'extensions' to regular features. About - 10 IDLE features were implemented as supposedly optional extensions. Their - different behavior could be confusing or worse for users and not good for - maintenance. Hence the conversion. The main difference for users is that - user configurable key bindings for builtin features are now handled - uniformly. Now, editing a binding in a keyset only affects its value in - the keyset. All bindings are defined together in the system-specific - default keysets in config-extensions.def. All custom keysets are saved as - a whole in config-extension.cfg. All take effect as soon as one clicks - Apply or Ok. The affected events are '<<force-open-completions>>', - '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', - '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', and - '<<zoom-height>>'. Any (global) customizations made before 3.6.3 will not - affect their keyset-specific customization after 3.6.3. and vice versa. - Initial patch by Charles Wohlganger. - -- bpo-31206: IDLE: Factor HighPage(Frame) class from ConfigDialog. Patch by - Cheryl Sabella. - -- bpo-31001: Add tests for configdialog highlight tab. Patch by Cheryl - Sabella. - -- bpo-31205: IDLE: Factor KeysPage(Frame) class from ConfigDialog. The - slightly modified tests continue to pass. Patch by Cheryl Sabella. - -- bpo-31130: IDLE -- stop leaks in test_configdialog. Initial patch by - Victor Stinner. - -- bpo-31002: Add tests for configdialog keys tab. Patch by Cheryl Sabella. - -- bpo-19903: IDLE: Calltips use ``inspect.signature`` instead of - ``inspect.getfullargspec``. This improves calltips for builtins converted - to use Argument Clinic. Patch by Louie Lu. - -- bpo-31083: IDLE - Add an outline of a TabPage class in configdialog. - Update existing classes to match outline. Initial patch by Cheryl Sabella. - -- bpo-31050: Factor GenPage(Frame) class from ConfigDialog. The slightly - modified tests continue to pass. Patch by Cheryl Sabella. - -- bpo-31004: IDLE - Factor FontPage(Frame) class from ConfigDialog. Slightly - modified tests continue to pass. Fix General tests. Patch mostly by Cheryl - Sabella. - -- bpo-30781: IDLE - Use ttk widgets in ConfigDialog. Patches by Terry Jan - Reedy and Cheryl Sabella. - -- bpo-31060: IDLE - Finish rearranging methods of ConfigDialog Grouping - methods pertaining to each tab and the buttons will aid writing tests and - improving the tabs and will enable splitting the groups into classes. - -- bpo-30853: IDLE -- Factor a VarTrace class out of ConfigDialog. Instance - tracers manages pairs consisting of a tk variable and a callback function. - When tracing is turned on, setting the variable calls the function. Test - coverage for the new class is 100%. - -- bpo-31003: IDLE: Add more tests for General tab. - -- bpo-30993: IDLE - Improve configdialog font page and tests. In - configdialog: Document causal pathways in create_font_tab docstring. - Simplify some attribute names. Move set_samples calls to var_changed_font - (idea from Cheryl Sabella). Move related functions to positions after the - create widgets function. In test_configdialog: Fix test_font_set so not - order dependent. Fix renamed test_indent_scale so it tests the widget. - Adjust tests for movement of set_samples call. Add tests for load - functions. Put all font tests in one class and tab indent tests in - another. Except for two lines, these tests completely cover the related - functions. - -- bpo-30981: IDLE -- Add more configdialog font page tests. - -- bpo-28523: IDLE: replace 'colour' with 'color' in configdialog. - -- bpo-30917: Add tests for idlelib.config.IdleConf. Increase coverage from - 46% to 96%. Patch by Louie Lu. - -- bpo-30934: Document coverage details for idlelib tests. Add section to - idlelib/idle-test/README.txt. Include check that branches are taken both - ways. Exclude IDLE-specific code that does not run during unit tests. - -- bpo-30913: IDLE: Document ConfigDialog tk Vars, methods, and widgets in - docstrings This will facilitate improving the dialog and splitting up the - class. Original patch by Cheryl Sabella. - -- bpo-30899: IDLE: Add tests for ConfigParser subclasses in config. Patch by - Louie Lu. - -- bpo-30881: IDLE: Add docstrings to browser.py. Patch by Cheryl Sabella. - -- bpo-30851: IDLE: Remove unused variables in configdialog. One is a - duplicate, one is set but cannot be altered by users. Patch by Cheryl - Sabella. - -- bpo-30870: IDLE: In Settings dialog, select font with Up, Down keys as - well as mouse. Initial patch by Louie Lu. - -- bpo-8231: IDLE: call config.IdleConf.GetUserCfgDir only once. - -- bpo-30779: IDLE: Factor ConfigChanges class from configdialog, put in - config; test. * In config, put dump test code in a function; run it and - unittest in 'if __name__ == '__main__'. * Add class config.ConfigChanges - based on changes_class_v4.py on bpo issue. * Add class - test_config.ChangesTest, partly using configdialog_tests_v1.py. * Revise - configdialog to use ConfigChanges; see tracker msg297804. * Revise - test_configdialog to match configdialog changes. * Remove configdialog - functions unused or moved to ConfigChanges. Cheryl Sabella contributed - parts of the patch. - -- bpo-30777: IDLE: configdialog - Add docstrings and fix comments. Patch by - Cheryl Sabella. - -- bpo-30495: IDLE: Improve textview with docstrings, PEP8 names, and more - tests. Patch by Cheryl Sabella. - -- bpo-30723: IDLE: Make several improvements to parenmatch. Add 'parens' - style to highlight both opener and closer. Make 'default' style, which is - not default, a synonym for 'opener'. Make time-delay work the same with - all styles. Add help for config dialog extensions tab, including help for - parenmatch. Add new tests. Original patch by Charles Wohlganger. - -- bpo-30674: IDLE: add docstrings to grep module. Patch by Cheryl Sabella - -- bpo-21519: IDLE's basic custom key entry dialog now detects duplicates - properly. Original patch by Saimadhav Heblikar. - -- bpo-29910: IDLE no longer deletes a character after commenting out a - region by a key shortcut. Add ``return 'break'`` for this and other - potential conflicts between IDLE and default key bindings. - -- bpo-30728: Review and change idlelib.configdialog names. Lowercase method - and attribute names. Replace 'colour' with 'color', expand overly cryptic - names, delete unneeded underscores. Replace ``import *`` with specific - imports. Patches by Cheryl Sabella. - -- bpo-6739: IDLE: Verify user-entered key sequences by trying to bind them - with tk. Add tests for all 3 validation functions. Original patch by G - Polo. Tests added by Cheryl Sabella. - -- bpo-15786: Fix several problems with IDLE's autocompletion box. The - following should now work: clicking on selection box items; using the - scrollbar; selecting an item by hitting Return. Hangs on MacOSX should no - longer happen. Patch by Louie Lu. - -- bpo-25514: Add doc subsubsection about IDLE failure to start. Popup - no-connection message directs users to this section. - -- bpo-30642: Fix reference leaks in IDLE tests. Patches by Louie Lu and - Terry Jan Reedy. - -- bpo-30495: Add docstrings for textview.py and use PEP8 names. Patches by - Cheryl Sabella and Terry Jan Reedy. - -- bpo-30290: Help-about: use pep8 names and add tests. Increase coverage to - 100%. Patches by Louie Lu, Cheryl Sabella, and Terry Jan Reedy. - -- bpo-30303: Add _utest option to textview; add new tests. Increase coverage - to 100%. Patches by Louie Lu and Terry Jan Reedy. - -- bpo-29071: IDLE colors f-string prefixes (but not invalid ur prefixes). - -- bpo-28572: Add 10% to coverage of IDLE's test_configdialog. Update and - augment description of the configuration system. - -Tools/Demos ------------ - -- bpo-30983: gdb integration commands (py-bt, etc.) work on optimized shared - builds now, too. :pep:`523` introduced _PyEval_EvalFrameDefault which - inlines PyEval_EvalFrameEx on non-debug shared builds. This broke the - ability to use py-bt, py-up, and a few other Python-specific gdb - integrations. The problem is fixed by only looking for - _PyEval_EvalFrameDefault frames in python-gdb.py. Original patch by Bruno - "Polaco" Penteado. - -- bpo-29748: Added the slice index converter in Argument Clinic. - -- bpo-24037: Argument Clinic now uses the converter ``bool(accept={int})`` - rather than ``int`` for semantical booleans. This avoids repeating the - default value for Python and C and will help in converting to ``bool`` in - future. - -- bpo-29367: python-gdb.py now supports also ``method-wrapper`` - (``wrapperobject``) objects. - -- bpo-28023: Fix python-gdb.py didn't support new dict implementation. - -- bpo-15369: The pybench and pystone microbenchmark have been removed from - Tools. Please use the new Python benchmark suite - https://github.com/python/pyperformance which is more reliable and - includes a portable version of pybench working on Python 2 and Python 3. - -- bpo-28102: The zipfile module CLI now prints usage to stderr. Patch by - Stephen J. Turnbull. - -C API ------ - -- bpo-31338: Added the ``Py_UNREACHABLE()`` macro for code paths which are - never expected to be reached. This and a few other useful macros are now - documented in the C API manual. - -- bpo-30832: Remove own implementation for thread-local storage. CPython has - provided the own implementation for thread-local storage (TLS) on - Python/thread.c, it's used in the case which a platform has not supplied - native TLS. However, currently all supported platforms (Windows and - pthreads) have provided native TLS and defined the Py_HAVE_NATIVE_TLS - macro with unconditional in any case. - -- bpo-30708: PyUnicode_AsWideCharString() now raises a ValueError if the - second argument is NULL and the wchar_t\* string contains null characters. - -- bpo-16500: Deprecate PyOS_AfterFork() and add PyOS_BeforeFork(), - PyOS_AfterFork_Parent() and PyOS_AfterFork_Child(). - -- bpo-6532: The type of results of PyThread_start_new_thread() and - PyThread_get_thread_ident(), and the id parameter of - PyThreadState_SetAsyncExc() changed from "long" to "unsigned long". - -- bpo-27867: Function PySlice_GetIndicesEx() is deprecated and replaced with - a macro if Py_LIMITED_API is not set or set to the value between - 0x03050400 and 0x03060000 (not including) or 0x03060100 or higher. Added - functions PySlice_Unpack() and PySlice_AdjustIndices(). - -- bpo-29083: Fixed the declaration of some public API functions. - PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not available in - limited API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() and - Py_BuildValue() were not available in limited API of version < 3.3 when - PY_SSIZE_T_CLEAN is defined. - -- bpo-28769: The result of PyUnicode_AsUTF8AndSize() and PyUnicode_AsUTF8() - is now of type ``const char *`` rather of ``char *``. - -- bpo-29058: All stable API extensions added after Python 3.2 are now - available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of - the minimum Python version supporting this API. - -- bpo-28822: The index parameters *start* and *end* of PyUnicode_FindChar() - are now adjusted to behave like ``str[start:end]``. - -- bpo-28808: PyUnicode_CompareWithASCIIString() now never raises exceptions. - -- bpo-28761: The fields name and doc of structures PyMemberDef, PyGetSetDef, - PyStructSequence_Field, PyStructSequence_Desc, and wrapperbase are now of - type ``const char *`` rather of ``char *``. - -- bpo-28748: Private variable _Py_PackageContext is now of type ``const char - *`` rather of ``char *``. - -- bpo-19569: Compiler warnings are now emitted if use most of deprecated - functions. - -- bpo-28426: Deprecated undocumented functions PyUnicode_AsEncodedObject(), - PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() and - PyUnicode_AsEncodedUnicode(). - - -What's New in Python 3.6.6 final? -================================= - -*Release date: 2018-06-27* - -There were no new changes in version 3.6.6. - - - -What's New in Python 3.6.6 release candidate 1? -=============================================== - -*Release date: 2018-06-11* - -Core and Builtins ------------------ - -- bpo-33786: Fix asynchronous generators to handle GeneratorExit in athrow() - correctly - -- bpo-30654: Fixed reset of the SIGINT handler to SIG_DFL on interpreter - shutdown even when there was a custom handler set previously. Patch by - Philipp Kerling. - -- bpo-33622: Fixed a leak when the garbage collector fails to add an object - with the ``__del__`` method or referenced by it into the - :data:`gc.garbage` list. :c:func:`PyGC_Collect` can now be called when an - exception is set and preserves it. - -- bpo-31849: Fix signed/unsigned comparison warning in pyhash.c. - -- bpo-33391: Fix a leak in set_symmetric_difference(). - -- bpo-28055: Fix unaligned accesses in siphash24(). Patch by Rolf Eike Beer. - -- bpo-33231: Fix potential memory leak in ``normalizestring()``. - -- bpo-29922: Improved error messages in 'async with' when ``__aenter__()`` - or ``__aexit__()`` return non-awaitable object. - -- bpo-33199: Fix ``ma_version_tag`` in dict implementation is uninitialized - when copying from key-sharing dict. - -- bpo-33041: Fixed jumping when the function contains an ``async for`` loop. - -- bpo-32282: Fix an unnecessary ifdef in the include of VersionHelpers.h in - socketmodule on Windows. - -- bpo-21983: Fix a crash in ``ctypes.cast()`` in case the type argument is a - ctypes structured data type. Patch by Eryk Sun and Oren Milman. - -Library -------- - -- bpo-30167: Prevent site.main() exception if PYTHONSTARTUP is set. Patch by - Steve Weber. - -- bpo-33812: Datetime instance d with non-None tzinfo, but with - d.tzinfo.utcoffset(d) returning None is now treated as naive by the - astimezone() method. - -- bpo-30805: Avoid race condition with debug logging - -- bpo-33767: The concatenation (``+``) and repetition (``*``) sequence - operations now raise :exc:`TypeError` instead of :exc:`SystemError` when - performed on :class:`mmap.mmap` objects. Patch by Zackery Spytz. - -- bpo-32684: Fix gather to propagate cancellation of itself even with - return_exceptions. - -- bpo-33674: Fix a race condition in SSLProtocol.connection_made() of - asyncio.sslproto: start immediately the handshake instead of using - call_soon(). Previously, data_received() could be called before the - handshake started, causing the handshake to hang or fail. - -- bpo-31647: Fixed bug where calling write_eof() on a - _SelectorSocketTransport after it's already closed raises AttributeError. - -- bpo-33672: Fix Task.__repr__ crash with Cython's bogus coroutines - -- bpo-33469: Fix RuntimeError after closing loop that used run_in_executor - -- bpo-11874: Use a better regex when breaking usage into wrappable parts. - Avoids bogus assertion errors from custom metavar strings. - -- bpo-30877: Fixed a bug in the Python implementation of the JSON decoder - that prevented the cache of parsed strings from clearing after finishing - the decoding. Based on patch by c-fos. - -- bpo-33548: tempfile._candidate_tempdir_list should consider common TEMP - locations - -- bpo-33542: Prevent ``uuid.get_node`` from using a DUID instead of a MAC on - Windows. Patch by Zvi Effron - -- bpo-26819: Fix race condition with ``ReadTransport.resume_reading`` in - Windows proactor event loop. - -- bpo-28556: Minor fixes in typing module: add annotations to - ``NamedTuple.__new__``, pass ``*args`` and ``**kwds`` in - ``Generic.__new__``. Original PRs by Paulius Šarka and Chad Dombrova. - -- bpo-20087: Updated alias mapping with glibc 2.27 supported locales. - -- bpo-33422: Fix trailing quotation marks getting deleted when looking up - byte/string literals on pydoc. Patch by Andrés Delfino. - -- bpo-33197: Update error message when constructing invalid - inspect.Parameters Patch by Donghee Na. - -- bpo-33383: Fixed crash in the get() method of the :mod:`dbm.ndbm` database - object when it is called with a single argument. - -- bpo-33329: Fix multiprocessing regression on newer glibcs - -- bpo-991266: Fix quoting of the ``Comment`` attribute of - :class:`http.cookies.SimpleCookie`. - -- bpo-33131: Upgrade bundled version of pip to 10.0.1. - -- bpo-33308: Fixed a crash in the :mod:`parser` module when converting an ST - object to a tree of tuples or lists with ``line_info=False`` and - ``col_info=True``. - -- bpo-33263: Fix FD leak in ``_SelectorSocketTransport`` Patch by Vlad - Starostin. - -- bpo-33256: Fix display of ``<module>`` call in the html produced by - ``cgitb.html()``. Patch by Stéphane Blondon. - -- bpo-33203: ``random.Random.choice()`` now raises ``IndexError`` for empty - sequences consistently even when called from subclasses without a - ``getrandbits()`` implementation. - -- bpo-33224: Update difflib.mdiff() for :pep:`479`. Convert an uncaught - StopIteration in a generator into a return-statement. - -- bpo-33209: End framing at the end of C implementation of - :func:`pickle.Pickler.dump`. - -- bpo-32861: The urllib.robotparser's ``__str__`` representation now - includes wildcard entries and the "Crawl-delay" and "Request-rate" fields. - Patch by Michael Lazar. - -- bpo-33096: Allow ttk.Treeview.insert to insert iid that has a false - boolean value. Note iid=0 and iid=False would be same. Patch by Garvit - Khatri. - -- bpo-33127: The ssl module now compiles with LibreSSL 2.7.1. - -- bpo-33021: Release the GIL during fstat() calls, avoiding hang of all - threads when calling mmap.mmap(), os.urandom(), and random.seed(). Patch - by Nir Soffer. - -- bpo-27683: Fix a regression in :mod:`ipaddress` that result of - :meth:`hosts` is empty when the network is constructed by a tuple - containing an integer mask and only 1 bit left for addresses. - -- bpo-32844: Fix wrong redirection of a low descriptor (0 or 1) to stderr in - subprocess if another low descriptor is closed. - -- bpo-31908: Fix output of cover files for ``trace`` module command-line - tool. Previously emitted cover files only when ``--missing`` option was - used. Patch by Michael Selik. - -- bpo-31457: If nested log adapters are used, the inner ``process()`` - methods are no longer omitted. - -- bpo-16865: Support arrays >=2GiB in :mod:`ctypes`. Patch by Segev Finer. - -- bpo-31238: pydoc: the stop() method of the private ServerThread class now - waits until DocServer.serve_until_quit() completes and then explicitly - sets its docserver attribute to None to break a reference cycle. - -Documentation -------------- - -- bpo-33503: Fix broken pypi link - -- bpo-33421: Add missing documentation for ``typing.AsyncContextManager``. - -- bpo-33378: Add Korean language switcher for https://docs.python.org/3/ - -- bpo-33276: Clarify that the ``__path__`` attribute on modules cannot be - just any value. - -- bpo-33201: Modernize documentation for writing C extension types. - -- bpo-33195: Deprecate ``Py_UNICODE`` usage in ``c-api/arg`` document. - ``Py_UNICODE`` related APIs are deprecated since Python 3.3, but it is - missed in the document. - -- bpo-33126: Document PyBuffer_ToContiguous(). - -- bpo-27212: Modify documentation for the :func:`islice` recipe to consume - initial values up to the start index. - -- bpo-28247: Update :mod:`zipapp` documentation to describe how to make - standalone applications. - -- bpo-18802: Documentation changes for ipaddress. Patch by Jon Foster and - Berker Peksag. - -- bpo-27428: Update documentation to clarify that ``WindowsRegistryFinder`` - implements ``MetaPathFinder``. (Patch by Himanshu Lakhara) - -- bpo-8243: Add a note about curses.addch and curses.addstr exception - behavior when writing outside a window, or pad. - -- bpo-31432: Clarify meaning of CERT_NONE, CERT_OPTIONAL, and CERT_REQUIRED - flags for ssl.SSLContext.verify_mode. - -Tests ------ - -- bpo-33655: Ignore test_posix_fallocate failures on BSD platforms that - might be due to running on ZFS. - -- bpo-19417: Add test_bdb.py. - -Build ------ - -- bpo-5755: Move ``-Wstrict-prototypes`` option to ``CFLAGS_NODIST`` from - ``OPT``. This option emitted annoying warnings when building extension - modules written in C++. - -- bpo-33614: Ensures module definition files for the stable ABI on Windows - are correctly regenerated. - -- bpo-33522: Enable CI builds on Visual Studio Team Services at - https://python.visualstudio.com/cpython - -- bpo-33012: Add ``-Wno-cast-function-type`` for gcc 8 for silencing - warnings about function casts like casting to PyCFunction in method - definition lists. - -- bpo-33394: Enable the verbose build for extension modules, when GNU make - is passed macros on the command line. - -Windows -------- - -- bpo-33184: Update Windows installer to OpenSSL 1.0.2o. - -macOS ------ - -- bpo-33184: Update macOS installer build to use OpenSSL 1.0.2o. - -IDLE ----- - -- bpo-33656: On Windows, add API call saying that tk scales for DPI. On - Windows 8.1+ or 10, with DPI compatibility properties of the Python binary - unchanged, and a monitor resolution greater than 96 DPI, this should make - text and lines sharper. It should otherwise have no effect. - -- bpo-33768: Clicking on a context line moves that line to the top of the - editor window. - -- bpo-33763: IDLE: Use read-only text widget for code context instead of - label widget. - -- bpo-33664: Scroll IDLE editor text by lines. Previously, the mouse wheel - and scrollbar slider moved text by a fixed number of pixels, resulting in - partial lines at the top of the editor box. The change also applies to - the shell and grep output windows, but not to read-only text views. - -- bpo-33679: Enable theme-specific color configuration for Code Context. Use - the Highlights tab to see the setting for built-in themes or add settings - to custom themes. - -- bpo-33642: Display up to maxlines non-blank lines for Code Context. If - there is no current context, show a single blank line. - -- bpo-33628: IDLE: Cleanup codecontext.py and its test. - -- bpo-33564: IDLE's code context now recognizes async as a block opener. - -- bpo-29706: IDLE now colors async and await as keywords in 3.6. They become - full keywords in 3.7. - -- bpo-21474: Update word/identifier definition from ascii to unicode. In - text and entry boxes, this affects selection by double-click, movement - left/right by control-left/right, and deletion left/right by - control-BACKSPACE/DEL. - -- bpo-33204: IDLE: consistently color invalid string prefixes. A 'u' string - prefix cannot be paired with either 'r' or 'f'. Consistently color as much - of the prefix, starting at the right, as is valid. Revise and extend - colorizer test. - -- bpo-32831: Add docstrings and tests for codecontext. - -Tools/Demos ------------ - -- bpo-33189: :program:`pygettext.py` now recognizes only literal strings as - docstrings and translatable strings, and rejects bytes literals and - f-string expressions. - -- bpo-31920: Fixed handling directories as arguments in the ``pygettext`` - script. Based on patch by Oleg Krasnikov. - -- bpo-29673: Fix pystackv and pystack gdbinit macros. - -- bpo-32885: Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disable - automatic backup creation (files with ``~`` suffix). - -- bpo-31583: Fix 2to3 for using with --add-suffix option but without - --output-dir option for relative path to files in current directory. - -C API ------ - -- bpo-32374: Document that m_traverse for multi-phase initialized modules - can be called with m_state=NULL, and add a sanity check - - -What's New in Python 3.6.5 final? -================================= - -*Release date: 2018-03-28* - -Tests ------ - -- bpo-32872: Avoid regrtest compatibility issue with namespace packages. - -Build ------ - -- bpo-33163: Upgrade pip to 9.0.3 and setuptools to v39.0.1. - - -What's New in Python 3.6.5 release candidate 1? -=============================================== - -*Release date: 2018-03-13* - -Security --------- - -- bpo-33001: Minimal fix to prevent buffer overrun in os.symlink on Windows - -- bpo-32981: Regexes in difflib and poplib were vulnerable to catastrophic - backtracking. These regexes formed potential DOS vectors (REDOS). They - have been refactored. This resolves :cve:`2018-1060` and :cve:`2018-1061`. - Patch by Jamie Davis. - -Core and Builtins ------------------ - -- bpo-33026: Fixed jumping out of "with" block by setting f_lineno. - -- bpo-17288: Prevent jumps from 'return' and 'exception' trace events. - -- bpo-32889: Update Valgrind suppression list to account for the rename of - ``Py_ADDRESS_IN_RANG`` to ``address_in_range``. - -- bpo-32650: Pdb and other debuggers dependent on bdb.py will correctly step - over (next command) native coroutines. Patch by Pablo Galindo. - -- bpo-32685: Improve suggestion when the Python 2 form of print statement is - either present on the same line as the header of a compound statement or - else terminated by a semi-colon instead of a newline. Patch by Nitish - Chandra. - -- bpo-32583: Fix possible crashing in builtin Unicode decoders caused by - write out-of-bound errors when using customized decode error handlers. - -- bpo-26163: Improved frozenset() hash to create more distinct hash values - when faced with datasets containing many similar values. - -- bpo-27169: The ``__debug__`` constant is now optimized out at compile - time. This fixes also bpo-22091. - -- bpo-32329: ``sys.flags.hash_randomization`` is now properly set to 0 when - hash randomization is turned off by ``PYTHONHASHSEED=0``. - -- bpo-30416: The optimizer is now protected from spending much time doing - complex calculations and consuming much memory for creating large - constants in constant folding. - -- bpo-18533: ``repr()`` on a dict containing its own ``values()`` or - ``items()`` no longer raises ``RecursionError``; OrderedDict similarly. - Instead, use ``...``, as for other recursive structures. Patch by Ben - North. - -- bpo-32028: Leading whitespace is now correctly ignored when generating - suggestions for converting Py2 print statements to Py3 builtin print - function calls. Patch by Sanyam Khurana. - -- bpo-32137: The repr of deeply nested dict now raises a RecursionError - instead of crashing due to a stack overflow. - -Library -------- - -- bpo-33064: lib2to3 now properly supports trailing commas after ``*args`` - and ``**kwargs`` in function signatures. - -- bpo-31804: Avoid failing in multiprocessing.Process if the standard - streams are closed or None at exit. - -- bpo-33037: Skip sending/receiving data after SSL transport closing. - -- bpo-30353: Fix ctypes pass-by-value for structs on 64-bit Cygwin/MinGW. - -- bpo-33009: Fix inspect.signature() for single-parameter partialmethods. - -- bpo-32969: Expose several missing constants in zlib and fix corresponding - documentation. - -- bpo-32713: Fixed tarfile.itn handling of out-of-bounds float values. Patch - by Joffrey Fuhrer. - -- bpo-30622: The ssl module now detects missing NPN support in LibreSSL. - -- bpo-32922: dbm.open() now encodes filename with the filesystem encoding - rather than default encoding. - -- bpo-32859: In ``os.dup2``, don't check every call whether the ``dup3`` - syscall exists or not. - -- bpo-21060: Rewrite confusing message from setup.py upload from "No dist - file created in earlier command" to the more helpful "Must create and - upload files in one command". - -- bpo-32857: In :mod:`tkinter`, ``after_cancel(None)`` now raises a - :exc:`ValueError` instead of canceling the first scheduled function. - Patch by Cheryl Sabella. - -- bpo-32852: Make sure sys.argv remains as a list when running trace. - -- bpo-32841: Fixed ``asyncio.Condition`` issue which silently ignored - cancellation after notifying and cancelling a conditional lock. Patch by - Bar Harel. - -- bpo-31787: Fixed refleaks of ``__init__()`` methods in various modules. - (Contributed by Oren Milman) - -- bpo-30157: Fixed guessing quote and delimiter in csv.Sniffer.sniff() when - only the last field is quoted. Patch by Jake Davis. - -- bpo-32394: socket: Remove TCP_FASTOPEN, TCP_KEEPCNT flags on older version - Windows during run-time. - -- bpo-32777: Fix a rare but potential pre-exec child process deadlock in - subprocess on POSIX systems when marking file descriptors inheritable on - exec in the child process. This bug appears to have been introduced in - 3.4. - -- bpo-32647: The ctypes module used to depend on indirect linking for - dlopen. The shared extension is now explicitly linked against libdl on - platforms with dl. - -- bpo-32734: Fixed ``asyncio.Lock()`` safety issue which allowed acquiring - and locking the same lock multiple times, without it being free. Patch by - Bar Harel. - -- bpo-32727: Do not include name field in SMTP envelope from address. Patch - by Stéphane Wirtel - -- bpo-27931: Fix email address header parsing error when the username is an - empty quoted string. Patch by Xiang Zhang. - -- bpo-32304: distutils' upload command no longer corrupts tar files ending - with a CR byte, and no longer tries to convert CR to CRLF in any of the - upload text fields. - -- bpo-32502: uuid.uuid1 no longer raises an exception if a 64-bit hardware - address is encountered. - -- bpo-31848: Fix the error handling in Aifc_read.initfp() when the SSND - chunk is not found. Patch by Zackery Spytz. - -- bpo-32555: On FreeBSD and Solaris, os.strerror() now always decode the - byte string from the current locale encoding, rather than using - ASCII/surrogateescape in some cases. - -- bpo-32521: The nis module is now compatible with new libnsl and headers - location. - -- bpo-32473: Improve ABCMeta._dump_registry() output readability - -- bpo-32521: glibc has removed Sun RPC. Use replacement libtirpc headers and - library in nis module. - -- bpo-32228: Ensure that ``truncate()`` preserves the file position (as - reported by ``tell()``) after writes longer than the buffer size. - -- bpo-26133: Don't unsubscribe signals in asyncio UNIX event loop on - interpreter shutdown. - -- bpo-32185: The SSL module no longer sends IP addresses in SNI TLS - extension on platforms with OpenSSL 1.0.2+ or inet_pton. - -- bpo-32323: :func:`urllib.parse.urlsplit` does not convert zone-id (scope) - to lower case for scoped IPv6 addresses in hostnames now. - -- bpo-32302: Fix bdist_wininst of distutils for CRT v142: it binary - compatible with CRT v140. - -- bpo-32255: A single empty field is now always quoted when written into a - CSV file. This allows to distinguish an empty row from a row consisting of - a single empty field. Patch by Licht Takeuchi. - -- bpo-32277: Raise ``NotImplementedError`` instead of ``SystemError`` on - platforms where ``chmod(..., follow_symlinks=False)`` is not supported. - Patch by Anthony Sottile. - -- bpo-32199: The getnode() ip getter now uses 'ip link' instead of 'ip link - list'. - -- bpo-27456: Ensure TCP_NODELAY is set on Linux. Tests by Victor Stinner. - -- bpo-31900: The :func:`locale.localeconv` function now sets temporarily the - ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale to decode - ``decimal_point`` and ``thousands_sep`` byte strings if they are non-ASCII - or longer than 1 byte, and the ``LC_NUMERIC`` locale is different than the - ``LC_CTYPE`` locale. This temporary change affects other threads. Same - change for the :meth:`str.format` method when formatting a number - (:class:`int`, :class:`float`, :class:`float` and subclasses) with the - ``n`` type (ex: ``'{:n}'.format(1234)``). - -- bpo-31802: Importing native path module (``posixpath``, ``ntpath``) now - works even if the ``os`` module still is not imported. - -Documentation -------------- - -- bpo-17232: Clarify docs for -O and -OO. Patch by Terry Reedy. - -- bpo-32800: Update link to w3c doc for xml default namespaces. - -- bpo-8722: Document :meth:`__getattr__` behavior when property :meth:`get` - method raises :exc:`AttributeError`. - -- bpo-32614: Modify RE examples in documentation to use raw strings to - prevent :exc:`DeprecationWarning` and add text to REGEX HOWTO to highlight - the deprecation. - -- bpo-31972: Improve docstrings for ``pathlib.PurePath`` subclasses. - -- bpo-17799: Explain real behaviour of sys.settrace and sys.setprofile and - their C-API counterparts regarding which type of events are received in - each function. Patch by Pablo Galindo Salgado. - -Tests ------ - -- bpo-32517: Fix failing ``test_asyncio`` on macOS 10.12.2+ due to transport - of ``KqueueSelector`` loop was not being closed. - -- bpo-32721: Fix test_hashlib to not fail if the _md5 module is not built. - -- bpo-32252: Fix faulthandler_suppress_crash_report() used to prevent core - dump files when testing crashes. getrlimit() returns zero on success. - -- bpo-31518: Debian Unstable has disabled TLS 1.0 and 1.1 for - SSLv23_METHOD(). Change TLS/SSL protocol of some tests to PROTOCOL_TLS or - PROTOCOL_TLSv1_2 to make them pass on Debian. - -Build ------ - -- bpo-32635: Fix segfault of the crypt module when libxcrypt is provided - instead of libcrypt at the system. - -Windows -------- - -- bpo-33016: Fix potential use of uninitialized memory in - nt._getfinalpathname - -- bpo-32903: Fix a memory leak in os.chdir() on Windows if the current - directory is set to a UNC path. - -- bpo-31966: Fixed WindowsConsoleIO.write() for writing empty data. - -- bpo-32409: Ensures activate.bat can handle Unicode contents. - -- bpo-32457: Improves handling of denormalized executable path when - launching Python. - -- bpo-32370: Use the correct encoding for ipconfig output in the uuid - module. Patch by Segev Finer. - -- bpo-29248: Fix :func:`os.readlink` on Windows, which was mistakenly - treating the ``PrintNameOffset`` field of the reparse data buffer as a - number of characters instead of bytes. Patch by Craig Holmquist and SSE4. - -- bpo-32588: Create standalone _distutils_findvs module. - -macOS ------ - -- bpo-32726: Provide an additional, more modern macOS installer variant that - supports macOS 10.9+ systems in 64-bit mode only. Upgrade the supplied - third-party libraries to OpenSSL 1.0.2n, XZ 5.2.3, and SQLite 3.22.0. The - 10.9+ installer now links with and supplies its own copy of Tcl/Tk 8.6.8. - -IDLE ----- - -- bpo-32984: Set ``__file__`` while running a startup file. Like Python, - IDLE optionally runs one startup file in the Shell window before - presenting the first interactive input prompt. For IDLE, ``-s`` runs a - file named in environmental variable :envvar:`IDLESTARTUP` or - :envvar:`PYTHONSTARTUP`; ``-r file`` runs ``file``. Python sets - ``__file__`` to the startup file name before running the file and unsets - it before the first prompt. IDLE now does the same when run normally, - without the ``-n`` option. - -- bpo-32940: Simplify and rename StringTranslatePseudoMapping in pyparse. - -- bpo-32916: Change ``str`` to ``code`` in pyparse. - -- bpo-32905: Remove unused code in pyparse module. - -- bpo-32874: Add tests for pyparse. - -- bpo-32837: Using the system and place-dependent default encoding for - open() is a bad idea for IDLE's system and location-independent files. - -- bpo-32826: Add "encoding=utf-8" to open() in IDLE's test_help_about. GUI - test test_file_buttons() only looks at initial ascii-only lines, but - failed on systems where open() defaults to 'ascii' because readline() - internally reads and decodes far enough ahead to encounter a non-ascii - character in CREDITS.txt. - -- bpo-32765: Update configdialog General tab docstring to add new widgets to - the widget list. - -Tools/Demos ------------ - -- bpo-24960: 2to3 and lib2to3 can now read pickled grammar files using - pkgutil.get_data() rather than probing the filesystem. This lets 2to3 and - lib2to3 work when run from a zipfile. - -- bpo-32222: Fix pygettext not extracting docstrings for functions with type - annotated arguments. Patch by Toby Harradine. - -C API ------ - -- bpo-29084: Undocumented C API for OrderedDict has been excluded from the - limited C API. It was added by mistake and actually never worked in the - limited C API. - - -What's New in Python 3.6.4 final? -================================= - -*Release date: 2017-12-18* - -There were no new code changes in version 3.6.4 since v3.6.4rc1. - - - -What's New in Python 3.6.4 release candidate 1? -=============================================== - -*Release date: 2017-12-05* - -Core and Builtins ------------------ - -- bpo-32176: co_flags.CO_NOFREE is now always set correctly by the code - object constructor based on freevars and cellvars, rather than needing to - be set correctly by the caller. This ensures it will be cleared - automatically when additional cell references are injected into a modified - code object and function. - -- bpo-31949: Fixed several issues in printing tracebacks - (PyTraceBack_Print()). Setting sys.tracebacklimit to 0 or less now - suppresses printing tracebacks. Setting sys.tracebacklimit to None now - causes using the default limit. Setting sys.tracebacklimit to an integer - larger than LONG_MAX now means using the limit LONG_MAX rather than the - default limit. Fixed integer overflows in the case of more than ``2**31`` - traceback items on Windows. Fixed output errors handling. - -- bpo-30696: Fix the interactive interpreter looping endlessly when no - memory. - -- bpo-20047: Bytearray methods partition() and rpartition() now accept only - bytes-like objects as separator, as documented. In particular they now - raise TypeError rather of returning a bogus result when an integer is - passed as a separator. - -- bpo-31852: Fix a segmentation fault caused by a combination of the async - soft keyword and continuation lines. - -- bpo-21720: BytesWarning no longer emitted when the *fromlist* argument of - ``__import__()`` or the ``__all__`` attribute of the module contain bytes - instances. - -- bpo-31825: Fixed OverflowError in the 'unicode-escape' codec and in - codecs.escape_decode() when decode an escaped non-ascii byte. - -- bpo-28603: Print the full context/cause chain of exceptions on interpreter - exit, even if an exception in the chain is unhashable or compares equal to - later ones. Patch by Zane Bitter. - -- bpo-31786: Fix timeout rounding in the select module to round correctly - negative timeouts between -1.0 and 0.0. The functions now block waiting - for events as expected. Previously, the call was incorrectly non-blocking. - Patch by Pablo Galindo. - -- bpo-31642: Restored blocking "from package import module" by setting - sys.modules["package.module"] to None. - -- bpo-31626: Fixed a bug in debug memory allocator. There was a write to - freed memory after shrinking a memory block. - -- bpo-31619: Fixed a ValueError when convert a string with large number of - underscores to integer with binary base. - -- bpo-31592: Fixed an assertion failure in Python parser in case of a bad - ``unicodedata.normalize()``. Patch by Oren Milman. - -- bpo-31588: Raise a ``TypeError`` with a helpful error message when class - creation fails due to a metaclass with a bad ``__prepare__()`` method. - Patch by Oren Milman. - -- bpo-31566: Fix an assertion failure in ``_warnings.warn()`` in case of a - bad ``__name__`` global. Patch by Oren Milman. - -- bpo-31505: Fix an assertion failure in ``json``, in case - ``_json.make_encoder()`` received a bad ``encoder()`` argument. Patch by - Oren Milman. - -- bpo-31492: Fix assertion failures in case of failing to import from a - module with a bad ``__name__`` attribute, and in case of failing to access - an attribute of such a module. Patch by Oren Milman. - -- bpo-31490: Fix an assertion failure in ``ctypes`` class definition, in - case the class has an attribute whose name is specified in ``_anonymous_`` - but not in ``_fields_``. Patch by Oren Milman. - -- bpo-31478: Fix an assertion failure in ``_random.Random.seed()`` in case - the argument has a bad ``__abs__()`` method. Patch by Oren Milman. - -- bpo-31315: Fix an assertion failure in imp.create_dynamic(), when - spec.name is not a string. Patch by Oren Milman. - -- bpo-31311: Fix a crash in the ``__setstate__()`` method of - ``ctypes._CData``, in case of a bad ``__dict__``. Patch by Oren Milman. - -- bpo-31293: Fix crashes in true division and multiplication of a timedelta - object by a float with a bad as_integer_ratio() method. Patch by Oren - Milman. - -- bpo-31285: Fix an assertion failure in ``warnings.warn_explicit``, when - the return value of the received loader's ``get_source()`` has a bad - ``splitlines()`` method. Patch by Oren Milman. - -- bpo-30817: ``PyErr_PrintEx()`` clears now the ignored exception that may - be raised by ``_PySys_SetObjectId()``, for example when no memory. - -Library -------- - -- bpo-28556: Two minor fixes for ``typing`` module: allow shallow copying - instances of generic classes, improve interaction of ``__init_subclass__`` - with generics. Original PRs by Ivan Levkivskyi. - -- bpo-27240: The header folding algorithm for the new email policies has - been rewritten, which also fixes bpo-30788, bpo-31831, and bpo-32182. In - particular, RFC2231 folding is now done correctly. - -- bpo-32186: io.FileIO.readall() and io.FileIO.read() now release the GIL - when getting the file size. Fixed hang of all threads with inaccessible - NFS server. Patch by Nir Soffer. - -- bpo-12239: Make :meth:`!msilib.SummaryInformation.GetProperty` return - ``None`` when the value of property is ``VT_EMPTY``. Initial patch by - Mark Mc Mahon. - -- bpo-31325: Fix wrong usage of :func:`collections.namedtuple` in the - :meth:`RobotFileParser.parse() <urllib.robotparser.RobotFileParser.parse>` - method. Initial patch by Robin Wellner. - -- bpo-12382: :func:`!msilib.OpenDatabase` now raises a better exception - message when it couldn't open or create an MSI file. Initial patch by - William Tisäter. - -- bpo-32110: ``codecs.StreamReader.read(n)`` now returns not more than *n* - characters/bytes for non-negative *n*. This makes it compatible with - ``read()`` methods of other file-like objects. - -- bpo-32072: Fixed issues with binary plists: Fixed saving bytearrays. - Identical objects will be saved only once. Equal references will be load - as identical objects. Added support for saving and loading recursive data - structures. - -- bpo-32034: Make asyncio.IncompleteReadError and LimitOverrunError - pickleable. - -- bpo-32015: Fixed the looping of asyncio in the case of reconnection the - socket during waiting async read/write from/to the socket. - -- bpo-32011: Restored support of loading marshal files with the TYPE_INT64 - code. These files can be produced in Python 2.7. - -- bpo-31970: Reduce performance overhead of asyncio debug mode. - -- bpo-9678: Fixed determining the MAC address in the uuid module: Using - ifconfig on NetBSD and OpenBSD. Using arp on Linux, FreeBSD, NetBSD and - OpenBSD. Based on patch by Takayuki Shimizukawa. - -- bpo-30057: Fix potential missed signal in signal.signal(). - -- bpo-31933: Fix Blake2 params leaf_size and node_offset on big endian - platforms. Patch by Jack O'Connor. - -- bpo-31927: Fixed compilation of the socket module on NetBSD 8. Fixed - assertion failure or reading arbitrary data when parse a AF_BLUETOOTH - address on NetBSD and DragonFly BSD. - -- bpo-27666: Fixed stack corruption in curses.box() and curses.ungetmouse() - when the size of types chtype or mmask_t is less than the size of C long. - curses.box() now accepts characters as arguments. Based on patch by Steve - Fink. - -- bpo-31897: plistlib now catches more errors when read binary plists and - raises InvalidFileException instead of unexpected exceptions. - -- bpo-25720: Fix the method for checking pad state of curses WINDOW. Patch - by Masayuki Yamamoto. - -- bpo-31893: Fixed the layout of the kqueue_event structure on OpenBSD and - NetBSD. Fixed the comparison of the kqueue_event objects. - -- bpo-31891: Fixed building the curses module on NetBSD. - -- bpo-28416: Instances of pickle.Pickler subclass with the persistent_id() - method and pickle.Unpickler subclass with the persistent_load() method no - longer create reference cycles. - -- bpo-28326: Fix multiprocessing.Process when stdout and/or stderr is closed - or None. - -- bpo-31457: If nested log adapters are used, the inner ``process()`` - methods are no longer omitted. - -- bpo-31457: The ``manager`` property on LoggerAdapter objects is now - properly settable. - -- bpo-31806: Fix timeout rounding in time.sleep(), threading.Lock.acquire() - and socket.socket.settimeout() to round correctly negative timeouts - between -1.0 and 0.0. The functions now block waiting for events as - expected. Previously, the call was incorrectly non-blocking. Patch by - Pablo Galindo. - -- bpo-28603: traceback: Fix a TypeError that occurred during printing of - exception tracebacks when either the current exception or an exception in - its context/cause chain is unhashable. Patch by Zane Bitter. - -- bpo-30058: Fixed buffer overflow in select.kqueue.control(). - -- bpo-31770: Prevent a crash when calling the ``__init__()`` method of a - ``sqlite3.Cursor`` object more than once. Patch by Oren Milman. - -- bpo-31672: ``idpattern`` in ``string.Template`` matched some non-ASCII - characters. Now it uses ``-i`` regular expression local flag to avoid - non-ASCII characters. - -- bpo-31764: Prevent a crash in ``sqlite3.Cursor.close()`` in case the - ``Cursor`` object is uninitialized. Patch by Oren Milman. - -- bpo-31752: Fix possible crash in timedelta constructor called with custom - integers. - -- bpo-31701: On Windows, faulthandler.enable() now ignores MSC and COM - exceptions. - -- bpo-31728: Prevent crashes in ``_elementtree`` due to unsafe cleanup of - ``Element.text`` and ``Element.tail``. Patch by Oren Milman. - -- bpo-31620: an empty asyncio.Queue now doesn't leak memory when queue.get - pollers timeout - -- bpo-31632: Fix method set_protocol() of class _SSLProtocolTransport in - asyncio module. This method was previously modifying a wrong reference to - the protocol. - -- bpo-31675: Fixed memory leaks in Tkinter's methods splitlist() and split() - when pass a string larger than 2 GiB. - -- bpo-31673: Fixed typo in the name of Tkinter's method adderrorinfo(). - -- bpo-30806: Fix the string representation of a netrc object. - -- bpo-15037: Added a workaround for getkey() in curses for ncurses 5.7 and - earlier. - -- bpo-25351: Avoid venv activate failures with undefined variables - -- bpo-25532: inspect.unwrap() will now only try to unwrap an object - sys.getrecursionlimit() times, to protect against objects which create a - new object on every attribute access. - -- bpo-30347: Stop crashes when concurrently iterate over itertools.groupby() - iterators. - -- bpo-31516: ``threading.current_thread()`` should not return a dummy thread - at shutdown. - -- bpo-31351: python -m ensurepip now exits with non-zero exit code if pip - bootstrapping has failed. - -- bpo-31482: ``random.seed()`` now works with bytes in version=1 - -- bpo-31334: Fix ``poll.poll([timeout])`` in the ``select`` module for - arbitrary negative timeouts on all OSes where it can only be a - non-negative integer or -1. Patch by Riccardo Coccioli. - -- bpo-31310: multiprocessing's semaphore tracker should be launched again if - crashed. - -- bpo-31308: Make multiprocessing's forkserver process immune to Ctrl-C and - other user interruptions. If it crashes, restart it when necessary. - -Documentation -------------- - -- bpo-32105: Added asyncio.BaseEventLoop.connect_accepted_socket - versionadded marker. - -- bpo-31537: Fix incorrect usage of ``get_history_length`` in readline - documentation example code. Patch by Brad Smith. - -- bpo-30085: The operator functions without double underscores are preferred - for clarity. The one with underscores are only kept for - back-compatibility. - -Tests ------ - -- bpo-31380: Skip test_httpservers test_undecodable_file on macOS: fails on - APFS. - -- bpo-31705: Skip test_socket.test_sha256() on Linux kernel older than 4.5. - The test fails with ENOKEY on kernel 3.10 (on ppc64le). A fix was merged - into the kernel 4.5. - -- bpo-31174: Fix test_tools.test_unparse: DirectoryTestCase now stores the - names sample to always test the same files. It prevents false alarms when - hunting reference leaks. - -- bpo-30695: Add the ``set_nomemory(start, stop)`` and - ``remove_mem_hooks()`` functions to the ``_testcapi`` module. - -Build ------ - -- bpo-32059: ``detect_modules()`` in ``setup.py`` now also searches the - sysroot paths when cross-compiling. - -- bpo-31957: Fixes Windows SDK version detection when building for Windows. - -- bpo-31609: Fixes quotes in PCbuild/clean.bat - -- bpo-31934: Abort the build when building out of a not clean source tree. - -- bpo-31926: Fixed Argument Clinic sometimes causing compilation errors when - there was more than one function and/or method in a .c file with the same - name. - -- bpo-28791: Update Windows builds to use SQLite 3.21.0. - -- bpo-28791: Update OS X installer to use SQLite 3.21.0. - -- bpo-22140: Prevent double substitution of prefix in python-config.sh. - -- bpo-31536: Avoid wholesale rebuild after ``make regen-all`` if nothing - changed. - -Windows -------- - -- bpo-1102: Return ``None`` when ``View.Fetch()`` returns - ``ERROR_NO_MORE_ITEMS`` instead of raising ``MSIError``. Initial patch by - Anthony Tuininga. - -- bpo-31944: Fixes Modify button in Apps and Features dialog. - -macOS ------ - -- bpo-31392: Update macOS installer to use OpenSSL 1.0.2m - -IDLE ----- - -- bpo-32207: Improve tk event exception tracebacks in IDLE. When tk event - handling is driven by IDLE's run loop, a confusing and distracting - queue.EMPTY traceback context is no longer added to tk event exception - tracebacks. The traceback is now the same as when event handling is - driven by user code. Patch based on a suggestion by Serhiy Storchaka. - -- bpo-32164: Delete unused file idlelib/tabbedpages.py. Use of TabbedPageSet - in configdialog was replaced by ttk.Notebook. - -- bpo-32100: IDLE: Fix old and new bugs in pathbrowser; improve tests. Patch - mostly by Cheryl Sabella. - -- bpo-31858: IDLE -- Restrict shell prompt manipulation to the shell. Editor - and output windows only see an empty last prompt line. This simplifies - the code and fixes a minor bug when newline is inserted. Sys.ps1, if - present, is read on Shell start-up, but is not set or changed. - -- bpo-31860: The font sample in the IDLE configuration dialog is now - editable. Changes persist while IDLE remains open - -- bpo-31836: Test_code_module now passes if run after test_idle, which sets - ps1. The code module uses sys.ps1 if present or sets it to '>>> ' if not. - Test_code_module now properly tests both behaviors. Ditto for ps2. - -- bpo-28603: Fix a TypeError that caused a shell restart when printing a - traceback that includes an exception that is unhashable. Patch by Zane - Bitter. - -- bpo-13802: Use non-Latin characters in the IDLE's Font settings sample. - Even if one selects a font that defines a limited subset of the unicode - Basic Multilingual Plane, tcl/tk will use other fonts that define a - character. The expanded example give users of non-Latin characters a - better idea of what they might see in IDLE's shell and editors. To make - room for the expanded sample, frames on the Font tab are re-arranged. The - Font/Tabs help explains a bit about the additions. - -- bpo-31460: Simplify the API of IDLE's Module Browser. Passing a widget - instead of an flist with a root widget opens the option of creating a - browser frame that is only part of a window. Passing a full file name - instead of pieces assumed to come from a .py file opens the possibility of - browsing python files that do not end in .py. - -- bpo-31649: IDLE - Make _htest, _utest parameters keyword only. - -- bpo-31559: Remove test order dependence in idle_test.test_browser. - -- bpo-31459: Rename IDLE's module browser from Class Browser to Module - Browser. The original module-level class and method browser became a - module browser, with the addition of module-level functions, years ago. - Nested classes and functions were added yesterday. For - back-compatibility, the virtual event <<open-class-browser>>, which - appears on the Keys tab of the Settings dialog, is not changed. Patch by - Cheryl Sabella. - -- bpo-31500: Default fonts now are scaled on HiDPI displays. - -- bpo-1612262: IDLE module browser now shows nested classes and functions. - Original patches for code and tests by Guilherme Polo and Cheryl Sabella, - respectively. - -Tools/Demos ------------ - -- bpo-30722: Make redemo work with Python 3.6 and newer versions. Also, - remove the ``LOCALE`` option since it doesn't work with string patterns in - Python 3. Patch by Christoph Sarnowski. - -C API ------ - -- bpo-20891: Fix PyGILState_Ensure(). When PyGILState_Ensure() is called in - a non-Python thread before PyEval_InitThreads(), only call - PyEval_InitThreads() after calling PyThreadState_New() to fix a crash. - -- bpo-31532: Fix memory corruption due to allocator mix in getpath.c between - Py_GetPath() and Py_SetPath() - -- bpo-30697: The ``PyExc_RecursionErrorInst`` singleton is removed and - ``PyErr_NormalizeException()`` does not use it anymore. This singleton is - persistent and its members being never cleared may cause a segfault during - finalization of the interpreter. See also issue #22898. - - -What's New in Python 3.6.3 final? -================================= - -*Release date: 2017-10-03* - -Library -------- - -- bpo-31641: Re-allow arbitrary iterables in - ``concurrent.futures.as_completed()``. Fixes regression in 3.6.3rc1. - -Build ------ - -- bpo-31662: Fix typos in Windows ``uploadrelease.bat`` script. Fix Windows - Doc build issues in ``Doc/make.bat``. - -- bpo-31423: Fix building the PDF documentation with newer versions of - Sphinx. - - -What's New in Python 3.6.3 release candidate 1? -=============================================== - -*Release date: 2017-09-18* - -Security --------- - -- bpo-29781: SSLObject.version() now correctly returns None when handshake - over BIO has not been performed yet. - -- bpo-30947: Upgrade libexpat embedded copy from version 2.2.1 to 2.2.3 to - get security fixes. - -Core and Builtins ------------------ - -- bpo-31471: Fix an assertion failure in ``subprocess.Popen()`` on Windows, - in case the env argument has a bad ``keys()`` method. Patch by Oren - Milman. - -- bpo-31418: Fix an assertion failure in ``PyErr_WriteUnraisable()`` in case - of an exception with a bad ``__module__`` attribute. Patch by Oren Milman. - -- bpo-31416: Fix assertion failures in case of a bad warnings.filters or - warnings.defaultaction. Patch by Oren Milman. - -- bpo-31411: Raise a TypeError instead of SystemError in case - warnings.onceregistry is not a dictionary. Patch by Oren Milman. - -- bpo-31373: Fix several possible instances of undefined behavior due to - floating-point demotions. - -- bpo-30465: Location information (``lineno`` and ``col_offset``) in - f-strings is now (mostly) correct. This fixes tools like flake8 from - showing warnings on the wrong line (typically the first line of the file). - -- bpo-31343: Include sys/sysmacros.h for major(), minor(), and makedev(). - GNU C library plans to remove the functions from sys/types.h. - -- bpo-31291: Fix an assertion failure in ``zipimport.zipimporter.get_data`` - on Windows, when the return value of ``pathname.replace('/','\\')`` isn't - a string. Patch by Oren Milman. - -- bpo-31271: Fix an assertion failure in the ``write()`` method of - ``io.TextIOWrapper``, when the encoder doesn't return a bytes object. - Patch by Oren Milman. - -- bpo-31243: Fix a crash in some methods of ``io.TextIOWrapper``, when the - decoder's state is invalid. Patch by Oren Milman. - -- bpo-30721: ``print`` now shows correct usage hint for using Python 2 - redirection syntax. Patch by Sanyam Khurana. - -- bpo-31070: Fix a race condition in importlib _get_module_lock(). - -- bpo-31095: Fix potential crash during GC caused by ``tp_dealloc`` which - doesn't call ``PyObject_GC_UnTrack()``. - -- bpo-31071: Avoid masking original TypeError in call with * unpacking when - other arguments are passed. - -- bpo-30978: str.format_map() now passes key lookup exceptions through. - Previously any exception was replaced with a KeyError exception. - -- bpo-30808: Use _Py_atomic API for concurrency-sensitive signal state. - -- bpo-30876: Relative import from unloaded package now reimports the package - instead of failing with SystemError. Relative import from non-package now - fails with ImportError rather than SystemError. - -- bpo-30703: Improve signal delivery. Avoid using Py_AddPendingCall from - signal handler, to avoid calling signal-unsafe functions. The tests I'm - adding here fail without the rest of the patch, on Linux and OS X. This - means our signal delivery logic had defects (some signals could be lost). - -- bpo-30765: Avoid blocking in pthread_mutex_lock() when - PyThread_acquire_lock() is asked not to block. - -- bpo-31161: Make sure the 'Missing parentheses' syntax error message is - only applied to SyntaxError, not to subclasses. Patch by Martijn Pieters. - -- bpo-30814: Fixed a race condition when import a submodule from a package. - -- bpo-30597: ``print`` now shows expected input in custom error message when - used as a Python 2 statement. Patch by Sanyam Khurana. - -Library -------- - -- bpo-31499: xml.etree: Fix a crash when a parser is part of a reference - cycle. - -- bpo-28556: typing.get_type_hints now finds the right globalns for classes - and modules by default (when no ``globalns`` was specified by the caller). - -- bpo-28556: Speed improvements to the ``typing`` module. Original PRs by - Ivan Levkivskyi and Mitar. - -- bpo-31544: The C accelerator module of ElementTree ignored exceptions - raised when looking up TreeBuilder target methods in XMLParser(). - -- bpo-31234: socket.create_connection() now fixes manually a reference - cycle: clear the variable storing the last exception on success. - -- bpo-31457: LoggerAdapter objects can now be nested. - -- bpo-31400: Improves SSL error handling to avoid losing error numbers. - -- bpo-28958: ssl.SSLContext() now uses OpenSSL error information when a - context cannot be instantiated. - -- bpo-27340: SSLSocket.sendall() now uses memoryview to create slices of - data. This fixes support for all bytes-like object. It is also more - efficient and avoids costly copies. - -- bpo-31178: Fix string concatenation bug in rare error path in the - subprocess module - -- bpo-31350: Micro-optimize :func:`asyncio._get_running_loop` to become up - to 10% faster. - -- bpo-31170: expat: Update libexpat from 2.2.3 to 2.2.4. Fix copying of - partial characters for UTF-8 input (libexpat bug 115): - https://github.com/libexpat/libexpat/issues/115 - -- bpo-29136: Add TLS 1.3 cipher suites and OP_NO_TLSv1_3. - -- bpo-29212: Fix concurrent.futures.thread.ThreadPoolExecutor threads to - have a non repr() based thread name by default when no thread_name_prefix - is supplied. They will now identify themselves as - "ThreadPoolExecutor-y_n". - -- bpo-9146: Fix a segmentation fault in _hashopenssl when standard hash - functions such as md5 are not available in the linked OpenSSL library. As - in some special FIPS-140 build environments. - -- bpo-27144: The ``map()`` and ``as_completed()`` iterators in - ``concurrent.futures`` now avoid keeping a reference to yielded objects. - -- bpo-10746: Fix ctypes producing wrong :pep:`3118` type codes for integer - types. - -- bpo-22536: The subprocess module now sets the filename when - FileNotFoundError is raised on POSIX systems due to the executable or cwd - not being found. - -- bpo-31249: concurrent.futures: WorkItem.run() used by ThreadPoolExecutor - now breaks a reference cycle between an exception object and the WorkItem - object. - -- bpo-31247: xmlrpc.server now explicitly breaks reference cycles when using - sys.exc_info() in code handling exceptions. - -- bpo-30102: The ssl and hashlib modules now call - OPENSSL_add_all_algorithms_noconf() on OpenSSL < 1.1.0. The function - detects CPU features and enables optimizations on some CPU architectures - such as POWER8. Patch is based on research from Gustavo Serra Scalet. - -- bpo-31185: Fixed miscellaneous errors in asyncio speedup module. - -- bpo-31135: ttk: fix the destroy() method of LabeledScale and OptionMenu - classes. Call the parent destroy() method even if the used attribute - doesn't exist. The LabeledScale.destroy() method now also explicitly - clears label and scale attributes to help the garbage collector to destroy - all widgets. - -- bpo-31107: Fix ``copyreg._slotnames()`` mangled attribute calculation for - classes whose name begins with an underscore. Patch by Shane Harvey. - -- bpo-31061: Fixed a crash when using asyncio and threads. - -- bpo-30502: Fix handling of long oids in ssl. Based on patch by Christian - Heimes. - -- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that - contains CR or LF. Patch by Donghee Na. - -- bpo-30595: multiprocessing.Queue.get() with a timeout now polls its reader - in non-blocking mode if it succeeded to acquire the lock but the acquire - took longer than the timeout. - -- bpo-29403: Fix ``unittest.mock``'s autospec to not fail on method-bound - builtin functions. Patch by Aaron Gallagher. - -- bpo-30961: Fix decrementing a borrowed reference in tracemalloc. - -- bpo-25684: Change ``ttk.OptionMenu`` radiobuttons to be unique across - instances of ``OptionMenu``. - -- bpo-30886: Fix multiprocessing.Queue.join_thread(): it now waits until the - thread completes, even if the thread was started by the same process which - created the queue. - -- bpo-29854: Fix segfault in readline when using readline's history-size - option. Patch by Nir Soffer. - -- bpo-30319: socket.close() now ignores ECONNRESET error. - -- bpo-30828: Fix out of bounds write in - ``asyncio.CFuture.remove_done_callback()``. - -- bpo-30807: signal.setitimer() may disable the timer when passed a tiny - value. Tiny values (such as 1e-6) are valid non-zero values for - setitimer(), which is specified as taking microsecond-resolution - intervals. However, on some platform, our conversion routine could convert - 1e-6 into a zero interval, therefore disabling the timer instead of - (re-)scheduling it. - -- bpo-30441: Fix bug when modifying os.environ while iterating over it - -- bpo-30532: Fix email header value parser dropping folding white space in - certain cases. - -- bpo-30879: os.listdir() and os.scandir() now emit bytes names when called - with bytes-like argument. - -- bpo-30746: Prohibited the '=' character in environment variable names in - ``os.putenv()`` and ``os.spawn*()``. - -- bpo-29755: Fixed the lgettext() family of functions in the gettext module. - They now always return bytes. - -Documentation -------------- - -- bpo-31294: Fix incomplete code snippet in the ZeroMQSocketListener and - ZeroMQSocketHandler examples and adapt them to Python 3. - -- bpo-21649: Add RFC 7525 and Mozilla server side TLS links to SSL - documentation. - -- bpo-30803: Clarify doc on truth value testing. Original patch by Peter - Thomassen. - -Tests ------ - -- bpo-31320: Silence traceback in test_ssl - -- bpo-25674: Remove sha256.tbs-internet.com ssl test - -- bpo-30715: Address ALPN callback changes for OpenSSL 1.1.0f. The latest - version behaves like OpenSSL 1.0.2 and no longer aborts handshake. - -- bpo-30822: regrtest: Exclude tzdata from regrtest --all. When running the - test suite using --use=all / -u all, exclude tzdata since it makes - test_datetime too slow (15-20 min on some buildbots) which then times out - on some buildbots. Fix also regrtest command line parser to allow passing - -u extralargefile to run test_zipfile64. - -Build ------ - -- bpo-30854: Fix compile error when compiling --without-threads. Patch by - Masayuki Yamamoto. - -Windows -------- - -- bpo-30389: Adds detection of Visual Studio 2017 to distutils on Windows. - -- bpo-31340: Change to building with MSVC v141 (included with Visual Studio - 2017) - -- bpo-30581: os.cpu_count() now returns the correct number of processors on - Windows when the number of logical processors is greater than 64. - -- bpo-30731: Add a missing xmlns to python.manifest so that it matches the - schema. - -IDLE ----- - -- bpo-31493: IDLE code context -- fix code update and font update timers. - Canceling timers prevents a warning message when test_idle completes. - -- bpo-31488: IDLE - Update non-key options in former extension classes. When - applying configdialog changes, call .reload for each feature class. Change - ParenMatch so updated options affect existing instances attached to - existing editor windows. - -- bpo-31477: IDLE - Improve rstrip entry in doc. Strip trailing whitespace - strips more than blank spaces. Multiline string literals are not skipped. - -- bpo-31480: IDLE - make tests pass with zzdummy extension disabled by - default. - -- bpo-31421: Document how IDLE runs tkinter programs. IDLE calls tcl/tk - update in the background in order to make live interaction and - experimentation with tkinter applications much easier. - -- bpo-31414: IDLE -- fix tk entry box tests by deleting first. Adding to an - int entry is not the same as deleting and inserting because int('') will - fail. - -- bpo-31051: Rearrange IDLE configdialog GenPage into Window, Editor, and - Help sections. - -- bpo-30617: IDLE - Add docstrings and tests for outwin subclass of editor. - Move some data and functions from the class to module level. Patch by - Cheryl Sabella. - -- bpo-31287: IDLE - Do not modify tkinter.message in test_configdialog. - -- bpo-27099: Convert IDLE's built-in 'extensions' to regular features. About - 10 IDLE features were implemented as supposedly optional extensions. Their - different behavior could be confusing or worse for users and not good for - maintenance. Hence the conversion. The main difference for users is that - user configurable key bindings for builtin features are now handled - uniformly. Now, editing a binding in a keyset only affects its value in - the keyset. All bindings are defined together in the system-specific - default keysets in config-extensions.def. All custom keysets are saved as - a whole in config-extension.cfg. All take effect as soon as one clicks - Apply or Ok. The affected events are '<<force-open-completions>>', - '<<expand-word>>', '<<force-open-calltip>>', '<<flash-paren>>', - '<<format-paragraph>>', '<<run-module>>', '<<check-module>>', and - '<<zoom-height>>'. Any (global) customizations made before 3.6.3 will not - affect their keyset-specific customization after 3.6.3. and vice versa. - Initial patch by Charles Wohlganger. - -- bpo-31206: IDLE: Factor HighPage(Frame) class from ConfigDialog. Patch by - Cheryl Sabella. - -- bpo-31001: Add tests for configdialog highlight tab. Patch by Cheryl - Sabella. - -- bpo-31205: IDLE: Factor KeysPage(Frame) class from ConfigDialog. The - slightly modified tests continue to pass. Patch by Cheryl Sabella. - -- bpo-31130: IDLE -- stop leaks in test_configdialog. Initial patch by - Victor Stinner. - -- bpo-31002: Add tests for configdialog keys tab. Patch by Cheryl Sabella. - -- bpo-19903: IDLE: Calltips use ``inspect.signature`` instead of - ``inspect.getfullargspec``. This improves calltips for builtins converted - to use Argument Clinic. Patch by Louie Lu. - -- bpo-31083: IDLE - Add an outline of a TabPage class in configdialog. - Update existing classes to match outline. Initial patch by Cheryl Sabella. - -- bpo-31050: Factor GenPage(Frame) class from ConfigDialog. The slightly - modified tests continue to pass. Patch by Cheryl Sabella. - -- bpo-31004: IDLE - Factor FontPage(Frame) class from ConfigDialog. Slightly - modified tests continue to pass. Fix General tests. Patch mostly by Cheryl - Sabella. - -- bpo-30781: IDLE - Use ttk widgets in ConfigDialog. Patches by Terry Jan - Reedy and Cheryl Sabella. - -- bpo-31060: IDLE - Finish rearranging methods of ConfigDialog Grouping - methods pertaining to each tab and the buttons will aid writing tests and - improving the tabs and will enable splitting the groups into classes. - -- bpo-30853: IDLE -- Factor a VarTrace class out of ConfigDialog. Instance - tracers manages pairs consisting of a tk variable and a callback function. - When tracing is turned on, setting the variable calls the function. Test - coverage for the new class is 100%. - -- bpo-31003: IDLE: Add more tests for General tab. - -- bpo-30993: IDLE - Improve configdialog font page and tests. In - configdialog: Document causal pathways in create_font_tab docstring. - Simplify some attribute names. Move set_samples calls to var_changed_font - (idea from Cheryl Sabella). Move related functions to positions after the - create widgets function. In test_configdialog: Fix test_font_set so not - order dependent. Fix renamed test_indent_scale so it tests the widget. - Adjust tests for movement of set_samples call. Add tests for load - functions. Put all font tests in one class and tab indent tests in - another. Except for two lines, these tests completely cover the related - functions. - -- bpo-30981: IDLE -- Add more configdialog font page tests. - -- bpo-28523: IDLE: replace 'colour' with 'color' in configdialog. - -- bpo-30917: Add tests for idlelib.config.IdleConf. Increase coverage from - 46% to 96%. Patch by Louie Lu. - -- bpo-30934: Document coverage details for idlelib tests. Add section to - idlelib/idle-test/README.txt. Include check that branches are taken both - ways. Exclude IDLE-specific code that does not run during unit tests. - -- bpo-30913: IDLE: Document ConfigDialog tk Vars, methods, and widgets in - docstrings This will facilitate improving the dialog and splitting up the - class. Original patch by Cheryl Sabella. - -- bpo-30899: IDLE: Add tests for ConfigParser subclasses in config. Patch by - Louie Lu. - -- bpo-30881: IDLE: Add docstrings to browser.py. Patch by Cheryl Sabella. - -- bpo-30851: IDLE: Remove unused variables in configdialog. One is a - duplicate, one is set but cannot be altered by users. Patch by Cheryl - Sabella. - -- bpo-30870: IDLE: In Settings dialog, select font with Up, Down keys as - well as mouse. Initial patch by Louie Lu. - -- bpo-8231: IDLE: call config.IdleConf.GetUserCfgDir only once. - -- bpo-30779: IDLE: Factor ConfigChanges class from configdialog, put in - config; test. * In config, put dump test code in a function; run it and - unittest in 'if __name__ == '__main__'. * Add class config.ConfigChanges - based on changes_class_v4.py on bpo issue. * Add class - test_config.ChangesTest, partly using configdialog_tests_v1.py. * Revise - configdialog to use ConfigChanges; see tracker msg297804. * Revise - test_configdialog to match configdialog changes. * Remove configdialog - functions unused or moved to ConfigChanges. Cheryl Sabella contributed - parts of the patch. - -- bpo-30777: IDLE: configdialog - Add docstrings and fix comments. Patch by - Cheryl Sabella. - -- bpo-30495: IDLE: Improve textview with docstrings, PEP8 names, and more - tests. Patch by Cheryl Sabella. - -- bpo-30723: IDLE: Make several improvements to parenmatch. Add 'parens' - style to highlight both opener and closer. Make 'default' style, which is - not default, a synonym for 'opener'. Make time-delay work the same with - all styles. Add help for config dialog extensions tab, including help for - parenmatch. Add new tests. Original patch by Charles Wohlganger. - -- bpo-30674: IDLE: add docstrings to grep module. Patch by Cheryl Sabella - -- bpo-21519: IDLE's basic custom key entry dialog now detects duplicates - properly. Original patch by Saimadhav Heblikar. - -- bpo-29910: IDLE no longer deletes a character after commenting out a - region by a key shortcut. Add ``return 'break'`` for this and other - potential conflicts between IDLE and default key bindings. - -- bpo-30728: Review and change idlelib.configdialog names. Lowercase method - and attribute names. Replace 'colour' with 'color', expand overly cryptic - names, delete unneeded underscores. Replace ``import *`` with specific - imports. Patches by Cheryl Sabella. - -- bpo-6739: IDLE: Verify user-entered key sequences by trying to bind them - with tk. Add tests for all 3 validation functions. Original patch by G - Polo. Tests added by Cheryl Sabella. - -Tools/Demos ------------ - -- bpo-30983: gdb integration commands (py-bt, etc.) work on optimized shared - builds now, too. :pep:`523` introduced _PyEval_EvalFrameDefault which - inlines PyEval_EvalFrameEx on non-debug shared builds. This broke the - ability to use py-bt, py-up, and a few other Python-specific gdb - integrations. The problem is fixed by only looking for - _PyEval_EvalFrameDefault frames in python-gdb.py. Original patch by Bruno - "Polaco" Penteado. - - -What's New in Python 3.6.2 final? -================================= - -*Release date: 2017-07-17* - -No changes since release candidate 2 - - - -What's New in Python 3.6.2 release candidate 2? -=============================================== - -*Release date: 2017-07-07* - -Security --------- - -- bpo-30730: Prevent environment variables injection in subprocess on - Windows. Prevent passing other environment variables and command - arguments. - -- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple - security vulnerabilities including: :cve:`2017-9233` (External entity - infinite loop DoS), :cve:`2016-9063` (Integer overflow, re-fix), - :cve:`2016-0718` (Fix regression bugs from 2.2.0's fix to - :cve:`2016-0718`) and :cve:`2012-0876` (Counter hash flooding with - SipHash). Note: the :cve:`2016-5300` (Use os-specific entropy sources like - getrandom) doesn't impact Python, since Python already gets entropy from - the OS to set the expat secret using ``XML_SetHashSalt()``. - -- bpo-30500: Fix urllib.parse.splithost() to correctly parse fragments. For - example, ``splithost('//127.0.0.1#@evil.com/')`` now correctly returns the - ``127.0.0.1`` host, instead of treating ``@evil.com`` as the host in an - authentication (``login@host``). - - -What's New in Python 3.6.2 release candidate 1? -=============================================== - -*Release date: 2017-06-17* - -Security --------- - -- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of - :cve:`2016-0718` and :cve:`2016-4472`. See - https://sourceforge.net/p/expat/bugs/537/ for more information. - -Core and Builtins ------------------ - -- bpo-30682: Removed a too-strict assertion that failed for certain - f-strings, such as eval("f'\\\n'") and eval("f'\\\r'"). - -- bpo-30604: Move co_extra_freefuncs to not be per-thread to avoid crashes - -- bpo-29104: Fixed parsing backslashes in f-strings. - -- bpo-27945: Fixed various segfaults with dict when input collections are - mutated during searching, inserting or comparing. Based on patches by - Duane Griffin and Tim Mitchell. - -- bpo-25794: Fixed type.__setattr__() and type.__delattr__() for - non-interned attribute names. Based on patch by Eryk Sun. - -- bpo-30039: If a KeyboardInterrupt happens when the interpreter is in the - middle of resuming a chain of nested 'yield from' or 'await' calls, it's - now correctly delivered to the innermost frame. - -- bpo-12414: sys.getsizeof() on a code object now returns the sizes which - includes the code struct and sizes of objects which it references. Patch - by Donghee Na. - -- bpo-29949: Fix memory usage regression of set and frozenset object. - -- bpo-29935: Fixed error messages in the index() method of tuple, list and - deque when pass indices of wrong type. - -- bpo-29859: Show correct error messages when any of the pthread_* calls in - thread_pthread.h fails. - -- bpo-28876: ``bool(range)`` works even if ``len(range)`` raises - :exc:`OverflowError`. - -- bpo-29600: Fix wrapping coroutine return values in StopIteration. - -- bpo-28856: Fix an oversight that %b format for bytes should support - objects follow the buffer protocol. - -- bpo-29714: Fix a regression that bytes format may fail when containing - zero bytes inside. - -- bpo-29478: If max_line_length=None is specified while using the Compat32 - policy, it is no longer ignored. Patch by Mircea Cosbuc. - -Library -------- - -- bpo-30616: Functional API of enum allows to create empty enums. Patched by - Donghee Na - -- bpo-30038: Fix race condition between signal delivery and wakeup file - descriptor. Patch by Nathaniel Smith. - -- bpo-23894: lib2to3 now recognizes ``rb'...'`` and ``f'...'`` strings. - -- bpo-23890: unittest.TestCase.assertRaises() now manually breaks a - reference cycle to not keep objects alive longer than expected. - -- bpo-30149: inspect.signature() now supports callables with - variable-argument parameters wrapped with partialmethod. Patch by Donghee - Na. - -- bpo-30645: Fix path calculation in imp.load_package(), fixing it for cases - when a package is only shipped with bytecodes. Patch by Alexandru - Ardelean. - -- bpo-29931: Fixed comparison check for ipaddress.ip_interface objects. - Patch by Sanjay Sundaresan. - -- bpo-30605: re.compile() no longer raises a BytesWarning when compiling a - bytes instance with misplaced inline modifier. Patch by Roy Williams. - -- bpo-24484: Avoid race condition in multiprocessing cleanup (#2159) - -- bpo-28994: The traceback no longer displayed for SystemExit raised in a - callback registered by atexit. - -- bpo-30508: Don't log exceptions if Task/Future "cancel()" method was - called. - -- bpo-28556: Updates to typing module: Add generic AsyncContextManager, add - support for ContextManager on all versions. Original PRs by Jelle Zijlstra - and Ivan Levkivskyi - -- bpo-29870: Fix ssl sockets leaks when connection is aborted in asyncio/ssl - implementation. Patch by Michaël Sghaïer. - -- bpo-29743: Closing transport during handshake process leaks open socket. - Patch by Nikolay Kim - -- bpo-27585: Fix waiter cancellation in asyncio.Lock. Patch by Mathieu - Sornay. - -- bpo-30418: On Windows, subprocess.Popen.communicate() now also ignore - EINVAL on stdin.write() if the child process is still running but closed - the pipe. - -- bpo-29822: inspect.isabstract() now works during __init_subclass__. Patch - by Nate Soares. - -- bpo-29581: ABCMeta.__new__ now accepts ``**kwargs``, allowing abstract - base classes to use keyword parameters in __init_subclass__. Patch by Nate - Soares. - -- bpo-30557: faulthandler now correctly filters and displays exception codes - on Windows - -- bpo-30378: Fix the problem that logging.handlers.SysLogHandler cannot - handle IPv6 addresses. - -- bpo-29960: Preserve generator state when _random.Random.setstate() raises - an exception. Patch by Bryan Olson. - -- bpo-30414: multiprocessing.Queue._feed background running thread do not - break from main loop on exception. - -- bpo-30003: Fix handling escape characters in HZ codec. Based on patch by - Ma Lin. - -- bpo-30301: Fix AttributeError when using SimpleQueue.empty() under *spawn* - and *forkserver* start methods. - -- bpo-30329: imaplib and poplib now catch the Windows socket WSAEINVAL error - (code 10022) on shutdown(SHUT_RDWR): An invalid operation was attempted. - This error occurs sometimes on SSL connections. - -- bpo-30375: Warnings emitted when compile a regular expression now always - point to the line in the user code. Previously they could point into - inners of the re module if emitted from inside of groups or conditionals. - -- bpo-30048: Fixed ``Task.cancel()`` can be ignored when the task is running - coroutine and the coroutine returned without any more ``await``. - -- bpo-30266: contextlib.AbstractContextManager now supports - anti-registration by setting __enter__ = None or __exit__ = None, - following the pattern introduced in bpo-25958. Patch by Jelle Zijlstra. - -- bpo-30298: Weaken the condition of deprecation warnings for inline - modifiers. Now allowed several subsequential inline modifiers at the start - of the pattern (e.g. ``'(?i)(?s)...'``). In verbose mode whitespaces and - comments now are allowed before and between inline modifiers (e.g. ``'(?x) - (?i) (?s)...'``). - -- bpo-29990: Fix range checking in GB18030 decoder. Original patch by Ma - Lin. - -- bpo-26293: Change resulted because of zipfile breakage. (See also: - bpo-29094) - -- bpo-30243: Removed the __init__ methods of _json's scanner and encoder. - Misusing them could cause memory leaks or crashes. Now scanner and - encoder objects are completely initialized in the __new__ methods. - -- bpo-30185: Avoid KeyboardInterrupt tracebacks in forkserver helper process - when Ctrl-C is received. - -- bpo-28556: Various updates to typing module: add typing.NoReturn type, use - WrapperDescriptorType, minor bug-fixes. Original PRs by Jim - Fasarakis-Hilliard and Ivan Levkivskyi. - -- bpo-30205: Fix getsockname() for unbound AF_UNIX sockets on Linux. - -- bpo-30070: Fixed leaks and crashes in errors handling in the parser - module. - -- bpo-30061: Fixed crashes in IOBase methods __next__() and readlines() when - readline() or __next__() respectively return non-sizeable object. Fixed - possible other errors caused by not checking results of PyObject_Size(), - PySequence_Size(), or PyMapping_Size(). - -- bpo-30017: Allowed calling the close() method of the zip entry writer - object multiple times. Writing to a closed writer now always produces a - ValueError. - -- bpo-30068: _io._IOBase.readlines will check if it's closed first when hint - is present. - -- bpo-29694: Fixed race condition in pathlib mkdir with flags parents=True. - Patch by Armin Rigo. - -- bpo-29692: Fixed arbitrary unchaining of RuntimeError exceptions in - contextlib.contextmanager. Patch by Siddharth Velankar. - -- bpo-29998: Pickling and copying ImportError now preserves name and path - attributes. - -- bpo-29953: Fixed memory leaks in the replace() method of datetime and time - objects when pass out of bound fold argument. - -- bpo-29942: Fix a crash in itertools.chain.from_iterable when encountering - long runs of empty iterables. - -- bpo-27863: Fixed multiple crashes in ElementTree caused by race conditions - and wrong types. - -- bpo-28699: Fixed a bug in pools in multiprocessing.pool that raising an - exception at the very first of an iterable may swallow the exception or - make the program hang. Patch by Davin Potts and Xiang Zhang. - -- bpo-25803: Avoid incorrect errors raised by Path.mkdir(exist_ok=True) when - the OS gives priority to errors such as EACCES over EEXIST. - -- bpo-29861: Release references to tasks, their arguments and their results - as soon as they are finished in multiprocessing.Pool. - -- bpo-29884: faulthandler: Restore the old sigaltstack during teardown. - Patch by Christophe Zeitouny. - -- bpo-25455: Fixed crashes in repr of recursive buffered file-like objects. - -- bpo-29800: Fix crashes in partial.__repr__ if the keys of partial.keywords - are not strings. Patch by Michael Seifert. - -- bpo-29742: get_extra_info() raises exception if get called on closed ssl - transport. Patch by Nikolay Kim. - -- bpo-8256: Fixed possible failing or crashing input() if attributes - "encoding" or "errors" of sys.stdin or sys.stdout are not set or are not - strings. - -- bpo-28298: Fix a bug that prevented array 'Q', 'L' and 'I' from accepting - big intables (objects that have __int__) as elements. Patch by Oren - Milman. - -- bpo-28231: The zipfile module now accepts path-like objects for external - paths. - -- bpo-26915: index() and count() methods of collections.abc.Sequence now - check identity before checking equality when do comparisons. - -- bpo-29615: SimpleXMLRPCDispatcher no longer chains KeyError (or any other - exception) to exception(s) raised in the dispatched methods. Patch by Petr - Motejlek. - -- bpo-30177: path.resolve(strict=False) no longer cuts the path after the - first element not present in the filesystem. Patch by Antoine Pietri. - -IDLE ----- - -- bpo-15786: Fix several problems with IDLE's autocompletion box. The - following should now work: clicking on selection box items; using the - scrollbar; selecting an item by hitting Return. Hangs on MacOSX should no - longer happen. Patch by Louie Lu. - -- bpo-25514: Add doc subsubsection about IDLE failure to start. Popup - no-connection message directs users to this section. - -- bpo-30642: Fix reference leaks in IDLE tests. Patches by Louie Lu and - Terry Jan Reedy. - -- bpo-30495: Add docstrings for textview.py and use PEP8 names. Patches by - Cheryl Sabella and Terry Jan Reedy. - -- bpo-30290: Help-about: use pep8 names and add tests. Increase coverage to - 100%. Patches by Louie Lu, Cheryl Sabella, and Terry Jan Reedy. - -- bpo-30303: Add _utest option to textview; add new tests. Increase coverage - to 100%. Patches by Louie Lu and Terry Jan Reedy. - -C API ------ - -- bpo-27867: Function PySlice_GetIndicesEx() no longer replaced with a macro - if Py_LIMITED_API is not set. - -Build ------ - -- bpo-29941: Add ``--with-assertions`` configure flag to explicitly enable C - ``assert()`` checks. Defaults to off. ``--with-pydebug`` implies - ``--with-assertions``. - -- bpo-28787: Fix out-of-tree builds of Python when configured with - ``--with--dtrace``. - -- bpo-29243: Prevent unnecessary rebuilding of Python during ``make test``, - ``make install`` and some other make targets when configured with - ``--enable-optimizations``. - -- bpo-23404: Don't regenerate generated files based on file modification - time anymore: the action is now explicit. Replace ``make touch`` with - ``make regen-all``. - -- bpo-29643: Fix ``--enable-optimization`` didn't work. - -Documentation -------------- - -- bpo-30176: Add missing attribute related constants in curses - documentation. - -- bpo-30052: the link targets for :func:`bytes` and :func:`bytearray` are - now their respective type definitions, rather than the corresponding - builtin function entries. Use :ref:`bytes <func-bytes>` and - :ref:`bytearray <func-bytearray>` to reference the latter. In order to - ensure this and future cross-reference updates are applied automatically, - the daily documentation builds now disable the default output caching - features in Sphinx. - -- bpo-26985: Add missing info of code object in inspect documentation. - -Tools/Demos ------------ - -- bpo-29367: python-gdb.py now supports also ``method-wrapper`` - (``wrapperobject``) objects. - -Tests ------ - -- bpo-30357: test_thread: setUp() now uses support.threading_setup() and - support.threading_cleanup() to wait until threads complete to avoid random - side effects on following tests. Initial patch written by Grzegorz - Grzywacz. - -- bpo-30197: Enhanced functions swap_attr() and swap_item() in the - test.support module. They now work when delete replaced attribute or item - inside the with statement. The old value of the attribute or item (or - None if it doesn't exist) now will be assigned to the target of the "as" - clause, if there is one. - -Windows -------- - -- bpo-30687: Locate msbuild.exe on Windows when building rather than - vcvarsall.bat - -- bpo-30450: The build process on Windows no longer depends on Subversion, - instead pulling external code from GitHub via a Python script. If Python - 3.6 is not found on the system (via ``py -3.6``), NuGet is used to - download a copy of 32-bit Python. - - -What's New in Python 3.6.1 final? -================================= - -*Release date: 2017-03-21* - -Core and Builtins ------------------ - -- bpo-29723: The ``sys.path[0]`` initialization change for bpo-29139 caused - a regression by revealing an inconsistency in how sys.path is initialized - when executing ``__main__`` from a zipfile, directory, or other import - location. The interpreter now consistently avoids ever adding the import - location's parent directory to ``sys.path``, and ensures no other - ``sys.path`` entries are inadvertently modified when inserting the import - location named on the command line. - -Build ------ - -- bpo-27593: fix format of git information used in sys.version - -- Fix incompatible comment in python.h - - -What's New in Python 3.6.1 release candidate 1? -=============================================== - -*Release date: 2017-03-04* - -Core and Builtins ------------------ - -- bpo-28893: Set correct __cause__ for errors about invalid awaitables - returned from __aiter__ and __anext__. - -- bpo-29683: Fixes to memory allocation in _PyCode_SetExtra. Patch by Brian - Coleman. - -- bpo-29684: Fix minor regression of PyEval_CallObjectWithKeywords. It - should raise TypeError when kwargs is not a dict. But it might cause segv - when args=NULL and kwargs is not a dict. - -- bpo-28598: Support __rmod__ for subclasses of str being called before - str.__mod__. Patch by Martijn Pieters. - -- bpo-29607: Fix stack_effect computation for CALL_FUNCTION_EX. Patch by - Matthieu Dartiailh. - -- bpo-29602: Fix incorrect handling of signed zeros in complex constructor - for complex subclasses and for inputs having a __complex__ method. Patch - by Serhiy Storchaka. - -- bpo-29347: Fixed possibly dereferencing undefined pointers when creating - weakref objects. - -- bpo-29438: Fixed use-after-free problem in key sharing dict. - -- bpo-29319: Prevent RunMainFromImporter overwriting sys.path[0]. - -- bpo-29337: Fixed possible BytesWarning when compare the code objects. - Warnings could be emitted at compile time. - -- bpo-29327: Fixed a crash when pass the iterable keyword argument to - sorted(). - -- bpo-29034: Fix memory leak and use-after-free in os module - (path_converter). - -- bpo-29159: Fix regression in bytes(x) when x.__index__() raises Exception. - -- bpo-28932: Do not include <sys/random.h> if it does not exist. - -- bpo-25677: Correct the positioning of the syntax error caret for indented - blocks. Based on patch by Michael Layzell. - -- bpo-29000: Fixed bytes formatting of octals with zero padding in alternate - form. - -- bpo-26919: On Android, operating system data is now always encoded/decoded - to/from UTF-8, instead of the locale encoding to avoid inconsistencies - with os.fsencode() and os.fsdecode() which are already using UTF-8. - -- bpo-28991: functools.lru_cache() was susceptible to an obscure reentrancy - bug triggerable by a monkey-patched len() function. - -- bpo-28739: f-string expressions are no longer accepted as docstrings and - by ast.literal_eval() even if they do not include expressions. - -- bpo-28512: Fixed setting the offset attribute of SyntaxError by - PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject(). - -- bpo-28918: Fix the cross compilation of xxlimited when Python has been - built with Py_DEBUG defined. - -- bpo-28731: Optimize _PyDict_NewPresized() to create correct size dict. - Improve speed of dict literal with constant keys up to 30%. - -Library -------- - -- bpo-29169: Update zlib to 1.2.11. - -- bpo-29623: Allow use of path-like object as a single argument in - ConfigParser.read(). Patch by David Ellis. - -- bpo-28963: Fix out of bound iteration in - asyncio.Future.remove_done_callback implemented in C. - -- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol no longer closes - before all pipes are closed. - -- bpo-29271: Fix Task.current_task and Task.all_tasks implemented in C to - accept None argument as their pure Python implementation. - -- bpo-29703: Fix asyncio to support instantiation of new event loops in - child processes. - -- bpo-29376: Fix assertion error in threading._DummyThread.is_alive(). - -- bpo-28624: Add a test that checks that cwd parameter of Popen() accepts - PathLike objects. Patch by Sayan Chowdhury. - -- bpo-28518: Start a transaction implicitly before a DML statement. Patch by - Aviv Palivoda. - -- bpo-29532: Altering a kwarg dictionary passed to functools.partial() no - longer affects a partial object after creation. - -- bpo-29110: Fix file object leak in aifc.open() when file is given as a - filesystem path and is not in valid AIFF format. Patch by Anthony Zhang. - -- bpo-28556: Various updates to typing module: typing.Counter, - typing.ChainMap, improved ABC caching, etc. Original PRs by Jelle - Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa. - -- bpo-29100: Fix datetime.fromtimestamp() regression introduced in Python - 3.6.0: check minimum and maximum years. - -- bpo-29519: Fix weakref spewing exceptions during interpreter shutdown when - used with a rare combination of multiprocessing and custom codecs. - -- bpo-29416: Prevent infinite loop in pathlib.Path.mkdir - -- bpo-29444: Fixed out-of-bounds buffer access in the group() method of the - match object. Based on patch by WGH. - -- bpo-29335: Fix subprocess.Popen.wait() when the child process has exited - to a stopped instead of terminated state (ex: when under ptrace). - -- bpo-29290: Fix a regression in argparse that help messages would wrap at - non-breaking spaces. - -- bpo-28735: Fixed the comparison of mock.MagickMock with mock.ANY. - -- bpo-29316: Restore the provisional status of typing module, add - corresponding note to documentation. Patch by Ivan L. - -- bpo-29219: Fixed infinite recursion in the repr of uninitialized - ctypes.CDLL instances. - -- bpo-29011: Fix an important omission by adding Deque to the typing module. - -- bpo-28969: Fixed race condition in C implementation of - functools.lru_cache. KeyError could be raised when cached function with - full cache was simultaneously called from different threads with the same - uncached arguments. - -- bpo-29142: In urllib.request, suffixes in no_proxy environment variable - with leading dots could match related hostnames again (e.g. .b.c matches - a.b.c). Patch by Milan Oberkirch. - -- bpo-28961: Fix unittest.mock._Call helper: don't ignore the name parameter - anymore. Patch written by Jiajun Huang. - -- bpo-29203: functools.lru_cache() now respects :pep:`468` and preserves the - order of keyword arguments. f(a=1, b=2) is now cached separately from - f(b=2, a=1) since both calls could potentially give different results. - -- bpo-15812: inspect.getframeinfo() now correctly shows the first line of a - context. Patch by Sam Breese. - -- bpo-29094: Offsets in a ZIP file created with extern file object and modes - "w" and "x" now are relative to the start of the file. - -- bpo-29085: Allow random.Random.seed() to use high quality OS randomness - rather than the pid and time. - -- bpo-29061: Fixed bug in secrets.randbelow() which would hang when given a - negative input. Patch by Brendan Donegan. - -- bpo-29079: Prevent infinite loop in pathlib.resolve() on Windows - -- bpo-13051: Fixed recursion errors in large or resized - curses.textpad.Textbox. Based on patch by Tycho Andersen. - -- bpo-29119: Fix weakrefs in the pure python version of - collections.OrderedDict move_to_end() method. Contributed by Andra - Bogildea. - -- bpo-9770: curses.ascii predicates now work correctly with negative - integers. - -- bpo-28427: old keys should not remove new values from WeakValueDictionary - when collecting from another thread. - -- bpo-28923: Remove editor artifacts from Tix.py. - -- bpo-29055: Neaten-up empty population error on random.choice() by - suppressing the upstream exception. - -- bpo-28871: Fixed a crash when deallocate deep ElementTree. - -- bpo-19542: Fix bugs in WeakValueDictionary.setdefault() and - WeakValueDictionary.pop() when a GC collection happens in another thread. - -- bpo-20191: Fixed a crash in resource.prlimit() when passing a sequence - that doesn't own its elements as limits. - -- bpo-28779: multiprocessing.set_forkserver_preload() would crash the - forkserver process if a preloaded module instantiated some multiprocessing - objects such as locks. - -- bpo-28847: dbm.dumb now supports reading read-only files and no longer - writes the index file when it is not changed. - -- bpo-26937: The chown() method of the tarfile.TarFile class does not fail - now when the grp module cannot be imported, as for example on Android - platforms. - -IDLE ----- - -- bpo-29071: IDLE colors f-string prefixes (but not invalid ur prefixes). - -- bpo-28572: Add 10% to coverage of IDLE's test_configdialog. Update and - augment description of the configuration system. - -Windows -------- - -- bpo-29579: Removes readme.txt from the installer - -- bpo-29326: Ignores blank lines in ._pth files (Patch by Alexey Izbyshev) - -- bpo-28164: Correctly handle special console filenames (patch by Eryk Sun) - -- bpo-29409: Implement :pep:`529` for io.FileIO (Patch by Eryk Sun) - -- bpo-29392: Prevent crash when passing invalid arguments into msvcrt - module. - -- bpo-25778: winreg does not truncate string correctly (Patch by Eryk Sun) - -- bpo-28896: Deprecate WindowsRegistryFinder and disable it by default. - -C API ------ - -- bpo-27867: Function PySlice_GetIndicesEx() is replaced with a macro if - Py_LIMITED_API is not set or set to the value between 0x03050400 and - 0x03060000 (not including) or 0x03060100 or higher. - -- bpo-29083: Fixed the declaration of some public API functions. - PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not available in - limited API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() and - Py_BuildValue() were not available in limited API of version < 3.3 when - PY_SSIZE_T_CLEAN is defined. - -- bpo-29058: All stable API extensions added after Python 3.2 are now - available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of - the minimum Python version supporting this API. - -Documentation -------------- - -- bpo-28929: Link the documentation to its source file on GitHub. - -- bpo-25008: Document smtpd.py as effectively deprecated and add a pointer - to aiosmtpd, a third-party asyncio-based replacement. - -- bpo-26355: Add canonical header link on each page to corresponding major - version of the documentation. Patch by Matthias Bussonnier. - -- bpo-29349: Fix Python 2 syntax in code for building the documentation. - -Tests ------ - -- bpo-28087: Skip test_asyncore and test_eintr poll failures on macOS. Skip - some tests of select.poll when running on macOS due to unresolved issues - with the underlying system poll function on some macOS versions. - -- bpo-29571: to match the behaviour of the ``re.LOCALE`` flag, - test_re.test_locale_flag now uses ``locale.getpreferredencoding(False)`` - to determine the candidate encoding for the test regex (allowing it to - correctly skip the test when the default locale encoding is a multi-byte - encoding) - -- bpo-28950: Disallow -j0 to be combined with -T/-l in regrtest command line - arguments. - -- bpo-28683: Fix the tests that bind() a unix socket and raise - PermissionError on Android for a non-root user. - -- bpo-26939: Add the support.setswitchinterval() function to fix - test_functools hanging on the Android armv7 qemu emulator. - -Build ------ - -- bpo-27593: sys.version and the platform module python_build(), - python_branch(), and python_revision() functions now use git information - rather than hg when building from a repo. - -- bpo-29572: Update Windows build and OS X installers to use OpenSSL 1.0.2k. - -- bpo-26851: Set Android compilation and link flags. - -- bpo-28768: Fix implicit declaration of function _setmode. Patch by - Masayuki Yamamoto - -- bpo-29080: Removes hard dependency on hg.exe from PCBuild/build.bat - -- bpo-23903: Added missed names to PC/python3.def. - -- bpo-28762: lockf() is available on Android API level 24, but the F_LOCK - macro is not defined in android-ndk-r13. - -- bpo-28538: Fix the compilation error that occurs because if_nameindex() is - available on Android API level 24, but the if_nameindex structure is not - defined. - -- bpo-20211: Do not add the directory for installing C header files and the - directory for installing object code libraries to the cross compilation - search paths. Original patch by Thomas Petazzoni. - -- bpo-28849: Do not define sys.implementation._multiarch on Android. - - -What's New in Python 3.6.0 final? -================================= - -*Release date: 2016-12-23* - -No changes since release candidate 2 - - - -What's New in Python 3.6.0 release candidate 2? -=============================================== - -*Release date: 2016-12-16* - -Core and Builtins ------------------ - -- bpo-28147: Fix a memory leak in split-table dictionaries: setattr() must - not convert combined table into split table. Patch written by INADA Naoki. - -- bpo-28990: Fix asyncio SSL hanging if connection is closed before - handshake is completed. (Patch by HoHo-Ho) - -Tools/Demos ------------ - -- bpo-28770: Fix python-gdb.py for fastcalls. - -Windows -------- - -- bpo-28896: Deprecate WindowsRegistryFinder. - -Build ------ - -- bpo-28898: Prevent gdb build errors due to HAVE_LONG_LONG redefinition. - - -What's New in Python 3.6.0 release candidate 1? -=============================================== - -*Release date: 2016-12-06* - -Core and Builtins ------------------ - -- bpo-23722: Rather than silently producing a class that doesn't support - zero-argument ``super()`` in methods, failing to pass the new - ``__classcell__`` namespace entry up to ``type.__new__`` now results in a - ``DeprecationWarning`` and a class that supports zero-argument - ``super()``. - -- bpo-28797: Modifying the class __dict__ inside the __set_name__ method of - a descriptor that is used inside that class no longer prevents calling the - __set_name__ method of other descriptors. - -- bpo-28782: Fix a bug in the implementation ``yield from`` when checking if - the next instruction is YIELD_FROM. Regression introduced by WORDCODE - (issue #26647). - -Library -------- - -- bpo-27030: Unknown escapes in re.sub() replacement template are allowed - again. But they still are deprecated and will be disabled in 3.7. - -- bpo-28835: Fix a regression introduced in warnings.catch_warnings(): call - warnings.showwarning() if it was overridden inside the context manager. - -- bpo-27172: To assist with upgrades from 2.7, the previously documented - deprecation of ``inspect.getfullargspec()`` has been reversed. This - decision may be revisited again after the Python 2.7 branch is no longer - officially supported. - -- bpo-26273: Add new :const:`socket.TCP_CONGESTION` (Linux 2.6.13) and - :const:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written - by Omar Sandoval. - -- bpo-24142: Reading a corrupt config file left configparser in an invalid - state. Original patch by Florian Höch. - -- bpo-28843: Fix asyncio C Task to handle exceptions __traceback__. - -C API ------ - -- bpo-28808: PyUnicode_CompareWithASCIIString() now never raises exceptions. - -Documentation -------------- - -- bpo-23722: The data model reference and the porting section in the What's - New guide now cover the additional ``__classcell__`` handling needed for - custom metaclasses to fully support :pep:`487` and zero-argument - ``super()``. - -Tools/Demos ------------ - -- bpo-28023: Fix python-gdb.py didn't support new dict implementation. - - -What's New in Python 3.6.0 beta 4? -================================== - -*Release date: 2016-11-21* - -Core and Builtins ------------------ - -- bpo-28532: Show sys.version when -V option is supplied twice. - -- bpo-27100: The with-statement now checks for __enter__ before it checks - for __exit__. This gives less confusing error messages when both methods - are missing. Patch by Jonathan Ellington. - -- bpo-28746: Fix the set_inheritable() file descriptor method on platforms - that do not have the ioctl FIOCLEX and FIONCLEX commands. - -- bpo-26920: Fix not getting the locale's charset upon initializing the - interpreter, on platforms that do not have langinfo. - -- bpo-28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X - when decode astral characters. Patch by Xiang Zhang. - -- bpo-19398: Extra slash no longer added to sys.path components in case of - empty compile-time PYTHONPATH components. - -- bpo-28665: Improve speed of the STORE_DEREF opcode by 40%. - -- bpo-28583: PyDict_SetDefault didn't combine split table when needed. Patch - by Xiang Zhang. - -- bpo-27243: Change PendingDeprecationWarning -> DeprecationWarning. As it - was agreed in the issue, __aiter__ returning an awaitable should result in - PendingDeprecationWarning in 3.5 and in DeprecationWarning in 3.6. - -- bpo-26182: Fix a refleak in code that raises DeprecationWarning. - -- bpo-28721: Fix asynchronous generators aclose() and athrow() to handle - StopAsyncIteration propagation properly. - -Library -------- - -- bpo-28752: Restored the __reduce__() methods of datetime objects. - -- bpo-28727: Regular expression patterns, _sre.SRE_Pattern objects created - by re.compile(), become comparable (only x==y and x!=y operators). This - change should fix the issue #18383: don't duplicate warning filters when - the warnings module is reloaded (thing usually only done in unit tests). - -- bpo-20572: The subprocess.Popen.wait method's undocumented endtime - parameter now raises a DeprecationWarning. - -- bpo-25659: In ctypes, prevent a crash calling the from_buffer() and - from_buffer_copy() methods on abstract classes like Array. - -- bpo-19717: Makes Path.resolve() succeed on paths that do not exist. Patch - by Vajrasky Kok - -- bpo-28563: Fixed possible DoS and arbitrary code execution when handle - plural form selections in the gettext module. The expression parser now - supports exact syntax supported by GNU gettext. - -- bpo-28387: Fixed possible crash in _io.TextIOWrapper deallocator when the - garbage collector is invoked in other thread. Based on patch by Sebastian - Cufre. - -- bpo-28600: Optimize loop.call_soon. - -- bpo-28613: Fix get_event_loop() return the current loop if called from - coroutines/callbacks. - -- bpo-28634: Fix asyncio.isfuture() to support unittest.Mock. - -- bpo-26081: Fix refleak in _asyncio.Future.__iter__().throw. - -- bpo-28639: Fix inspect.isawaitable to always return bool Patch by Justin - Mayfield. - -- bpo-28652: Make loop methods reject socket kinds they do not support. - -- bpo-28653: Fix a refleak in functools.lru_cache. - -- bpo-28703: Fix asyncio.iscoroutinefunction to handle Mock objects. - -- bpo-28704: Fix create_unix_server to support Path-like objects (PEP 519). - -- bpo-28720: Add collections.abc.AsyncGenerator. - -Documentation -------------- - -- bpo-28513: Documented command-line interface of zipfile. - -Tests ------ - -- bpo-28666: Now test.support.rmtree is able to remove unwritable or - unreadable directories. - -- bpo-23839: Various caches now are cleared before running every test file. - -Build ------ - -- bpo-10656: Fix out-of-tree building on AIX. Patch by Tristan Carel and - Michael Haubenwallner. - -- bpo-26359: Rename --with-optimiations to --enable-optimizations. - -- bpo-28676: Prevent missing 'getentropy' declaration warning on macOS. - Patch by Gareth Rees. - - -What's New in Python 3.6.0 beta 3? -================================== - -*Release date: 2016-10-31* - -Core and Builtins ------------------ - -- bpo-28128: Deprecation warning for invalid str and byte escape sequences - now prints better information about where the error occurs. Patch by - Serhiy Storchaka and Eric Smith. - -- bpo-28509: dict.update() no longer allocate unnecessary large memory. - -- bpo-28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug - build. - -- bpo-28517: Fixed of-by-one error in the peephole optimizer that caused - keeping unreachable code. - -- bpo-28214: Improved exception reporting for problematic __set_name__ - attributes. - -- bpo-23782: Fixed possible memory leak in _PyTraceback_Add() and exception - loss in PyTraceBack_Here(). - -- bpo-28471: Fix "Python memory allocator called without holding the GIL" - crash in socket.setblocking. - -Library -------- - -- bpo-27517: LZMA compressor and decompressor no longer raise exceptions if - given empty data twice. Patch by Benjamin Fogle. - -- bpo-28549: Fixed segfault in curses's addch() with ncurses6. - -- bpo-28449: tarfile.open() with mode "r" or "r:" now tries to open a tar - file with compression before trying to open it without compression. - Otherwise it had 50% chance failed with ignore_zeros=True. - -- bpo-23262: The webbrowser module now supports Firefox 36+ and derived - browsers. Based on patch by Oleg Broytman. - -- bpo-27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused - by representing the scale as float value internally in Tk. tkinter.IntVar - now works if float value is set to underlying Tk variable. - -- bpo-18844: The various ways of specifying weights for random.choices() now - produce the same result sequences. - -- bpo-28255: calendar.TextCalendar().prmonth() no longer prints a space at - the start of new line after printing a month's calendar. Patch by Xiang - Zhang. - -- bpo-20491: The textwrap.TextWrapper class now honors non-breaking spaces. - Based on patch by Kaarle Ritvanen. - -- bpo-28353: os.fwalk() no longer fails on broken links. - -- bpo-28430: Fix iterator of C implemented asyncio.Future doesn't accept - non-None value is passed to it.send(val). - -- bpo-27025: Generated names for Tkinter widgets now start by the "!" prefix - for readability. - -- bpo-25464: Fixed HList.header_exists() in tkinter.tix module by addin a - workaround to Tix library bug. - -- bpo-28488: shutil.make_archive() no longer adds entry "./" to ZIP archive. - -- bpo-25953: re.sub() now raises an error for invalid numerical group - reference in replacement template even if the pattern is not found in the - string. Error message for invalid group reference now includes the group - index and the position of the reference. Based on patch by SilentGhost. - -- bpo-18219: Optimize csv.DictWriter for large number of columns. Patch by - Mariatta Wijaya. - -- bpo-28448: Fix C implemented asyncio.Future didn't work on Windows. - -- bpo-28480: Fix error building socket module when multithreading is - disabled. - -- bpo-24452: Make webbrowser support Chrome on Mac OS X. - -- bpo-20766: Fix references leaked by pdb in the handling of SIGINT - handlers. - -- bpo-28492: Fix how StopIteration exception is raised in _asyncio.Future. - -- bpo-28500: Fix asyncio to handle async gens GC from another thread. - -- bpo-26923: Fix asyncio.Gather to refuse being cancelled once all children - are done. Patch by Johannes Ebke. - -- bpo-26796: Don't configure the number of workers for default threadpool - executor. Initial patch by Hans Lawrenz. - -- bpo-28544: Implement asyncio.Task in C. - -Windows -------- - -- bpo-28522: Fixes mishandled buffer reallocation in getpathp.c - -Build ------ - -- bpo-28444: Fix missing extensions modules when cross compiling. - -- bpo-28208: Update Windows build and OS X installers to use SQLite 3.14.2. - -- bpo-28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j. - -Tests ------ - -- bpo-26944: Fix test_posix for Android where 'id -G' is entirely wrong or - missing the effective gid. - -- bpo-28409: regrtest: fix the parser of command line arguments. - - -What's New in Python 3.6.0 beta 2? -================================== - -*Release date: 2016-10-10* - -Core and Builtins ------------------ - -- bpo-28183: Optimize and cleanup dict iteration. - -- bpo-26081: Added C implementation of asyncio.Future. Original patch by - Yury Selivanov. - -- bpo-28379: Added sanity checks and tests for PyUnicode_CopyCharacters(). - Patch by Xiang Zhang. - -- bpo-28376: The type of long range iterator is now registered as Iterator. - Patch by Oren Milman. - -- bpo-28376: Creating instances of range_iterator by calling range_iterator - type now is deprecated. Patch by Oren Milman. - -- bpo-28376: The constructor of range_iterator now checks that step is not - 0. Patch by Oren Milman. - -- bpo-26906: Resolving special methods of uninitialized type now causes - implicit initialization of the type instead of a fail. - -- bpo-18287: PyType_Ready() now checks that tp_name is not NULL. Original - patch by Niklas Koep. - -- bpo-24098: Fixed possible crash when AST is changed in process of - compiling it. - -- bpo-28201: Dict reduces possibility of 2nd conflict in hash table when - hashes have same lower bits. - -- bpo-28350: String constants with null character no longer interned. - -- bpo-26617: Fix crash when GC runs during weakref callbacks. - -- bpo-27942: String constants now interned recursively in tuples and - frozensets. - -- bpo-21578: Fixed misleading error message when ImportError called with - invalid keyword args. - -- bpo-28203: Fix incorrect type in complex(1.0, {2:3}) error message. Patch - by Soumya Sharma. - -- bpo-28086: Single var-positional argument of tuple subtype was passed - unscathed to the C-defined function. Now it is converted to exact tuple. - -- bpo-28214: Now __set_name__ is looked up on the class instead of the - instance. - -- bpo-27955: Fallback on reading /dev/urandom device when the getrandom() - syscall fails with EPERM, for example when blocked by SECCOMP. - -- bpo-28192: Don't import readline in isolated mode. - -- Upgrade internal unicode databases to Unicode version 9.0.0. - -- bpo-28131: Fix a regression in zipimport's compile_source(). zipimport - should use the same optimization level as the interpreter. - -- bpo-28126: Replace Py_MEMCPY with memcpy(). Visual Studio can properly - optimize memcpy(). - -- bpo-28120: Fix dict.pop() for split dictionary when trying to remove a - "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang. - -- bpo-26182: Raise DeprecationWarning when async and await keywords are used - as variable/attribute/class/function name. - -Library -------- - -- bpo-27998: Fixed bytes path support in os.scandir() on Windows. Patch by - Eryk Sun. - -- bpo-28317: The disassembler now decodes FORMAT_VALUE argument. - -- bpo-26293: Fixed writing ZIP files that starts not from the start of the - file. Offsets in ZIP file now are relative to the start of the archive in - conforming to the specification. - -- bpo-28380: unittest.mock Mock autospec functions now properly support - assert_called, assert_not_called, and assert_called_once. - -- bpo-27181: remove statistics.geometric_mean and defer until 3.7. - -- bpo-28229: lzma module now supports pathlib. - -- bpo-28321: Fixed writing non-BMP characters with binary format in - plistlib. - -- bpo-28225: bz2 module now supports pathlib. Initial patch by Ethan - Furman. - -- bpo-28227: gzip now supports pathlib. Patch by Ethan Furman. - -- bpo-27358: Optimized merging var-keyword arguments and improved error - message when passing a non-mapping as a var-keyword argument. - -- bpo-28257: Improved error message when passing a non-iterable as a - var-positional argument. Added opcode BUILD_TUPLE_UNPACK_WITH_CALL. - -- bpo-28322: Fixed possible crashes when unpickle itertools objects from - incorrect pickle data. Based on patch by John Leitch. - -- bpo-28228: imghdr now supports pathlib. - -- bpo-28226: compileall now supports pathlib. - -- bpo-28314: Fix function declaration (C flags) for the getiterator() method - of xml.etree.ElementTree.Element. - -- bpo-28148: Stop using localtime() and gmtime() in the time module. - Introduced platform independent _PyTime_localtime API that is similar to - POSIX localtime_r, but available on all platforms. Patch by Ed Schouten. - -- bpo-28253: Fixed calendar functions for extreme months: 0001-01 and - 9999-12. Methods itermonthdays() and itermonthdays2() are reimplemented so - that they don't call itermonthdates() which can cause datetime.date - under/overflow. - -- bpo-28275: Fixed possible use after free in the decompress() methods of - the LZMADecompressor and BZ2Decompressor classes. Original patch by John - Leitch. - -- bpo-27897: Fixed possible crash in sqlite3.Connection.create_collation() - if pass invalid string-like object as a name. Patch by Xiang Zhang. - -- bpo-18844: random.choices() now has k as a keyword-only argument to - improve the readability of common cases and come into line with the - signature used in other languages. - -- bpo-18893: Fix invalid exception handling in Lib/ctypes/macholib/dyld.py. - Patch by Madison May. - -- bpo-27611: Fixed support of default root window in the tkinter.tix module. - Added the master parameter in the DisplayStyle constructor. - -- bpo-27348: In the traceback module, restore the formatting of exception - messages like "Exception: None". This fixes a regression introduced in - 3.5a2. - -- bpo-25651: Allow false values to be used for msg parameter of subTest(). - -- bpo-27778: Fix a memory leak in os.getrandom() when the getrandom() is - interrupted by a signal and a signal handler raises a Python exception. - -- bpo-28200: Fix memory leak on Windows in the os module (fix - path_converter() function). - -- bpo-25400: RobotFileParser now correctly returns default values for - crawl_delay and request_rate. Initial patch by Peter Wirtz. - -- bpo-27932: Prevent memory leak in win32_ver(). - -- Fix UnboundLocalError in socket._sendfile_use_sendfile. - -- bpo-28075: Check for ERROR_ACCESS_DENIED in Windows implementation of - os.stat(). Patch by Eryk Sun. - -- bpo-22493: Warning message emitted by using inline flags in the middle of - regular expression now contains a (truncated) regex pattern. Patch by Tim - Graham. - -- bpo-25270: Prevent codecs.escape_encode() from raising SystemError when an - empty bytestring is passed. - -- bpo-28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam. - -- bpo-25895: Enable WebSocket URL schemes in urllib.parse.urljoin. Patch by - Gergely Imreh and Markus Holtermann. - -- bpo-28114: Fix a crash in parse_envlist() when env contains byte strings. - Patch by Eryk Sun. - -- bpo-27599: Fixed buffer overrun in binascii.b2a_qp() and - binascii.a2b_qp(). - -- bpo-27906: Fix socket accept exhaustion during high TCP traffic. Patch by - Kevin Conway. - -- bpo-28174: Handle when SO_REUSEPORT isn't properly supported. Patch by - Seth Michael Larson. - -- bpo-26654: Inspect functools.partial in asyncio.Handle.__repr__. Patch by - iceboy. - -- bpo-26909: Fix slow pipes IO in asyncio. Patch by INADA Naoki. - -- bpo-28176: Fix callbacks race in asyncio.SelectorLoop.sock_connect. - -- bpo-27759: Fix selectors incorrectly retain invalid file descriptors. - Patch by Mark Williams. - -- bpo-28368: Refuse monitoring processes if the child watcher has no loop - attached. Patch by Vincent Michel. - -- bpo-28369: Raise RuntimeError when transport's FD is used with add_reader, - add_writer, etc. - -- bpo-28370: Speedup asyncio.StreamReader.readexactly. Patch by Коренберг - Марк. - -- bpo-28371: Deprecate passing asyncio.Handles to run_in_executor. - -- bpo-28372: Fix asyncio to support formatting of non-python coroutines. - -- bpo-28399: Remove UNIX socket from FS before binding. Patch by Коренберг - Марк. - -- bpo-27972: Prohibit Tasks to await on themselves. - -Windows -------- - -- bpo-28402: Adds signed catalog files for stdlib on Windows. - -- bpo-28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk - Sun) - -- bpo-28251: Improvements to help manuals on Windows. - -- bpo-28110: launcher.msi has different product codes between 32-bit and - 64-bit - -- bpo-28161: Opening CON for write access fails - -- bpo-28162: WindowsConsoleIO readall() fails if first line starts with - Ctrl+Z - -- bpo-28163: WindowsConsoleIO fileno() passes wrong flags to _open_osfhandle - -- bpo-28164: _PyIO_get_console_type fails for various paths - -- bpo-28137: Renames Windows path file to ._pth - -- bpo-28138: Windows ._pth file should allow import site - -C API ------ - -- bpo-28426: Deprecated undocumented functions PyUnicode_AsEncodedObject(), - PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() and - PyUnicode_AsEncodedUnicode(). - -Build ------ - -- bpo-28258: Fixed build with Estonian locale (python-config and distclean - targets in Makefile). Patch by Arfrever Frehtes Taifersar Arahesis. - -- bpo-26661: setup.py now detects system libffi with multiarch wrapper. - -- bpo-15819: Remove redundant include search directory option for building - outside the source tree. - -Tests ------ - -- bpo-28217: Adds _testconsole module to test console input. - - -What's New in Python 3.6.0 beta 1? -================================== - -*Release date: 2016-09-12* - -Core and Builtins ------------------ - -- bpo-23722: The __class__ cell used by zero-argument super() is now - initialized from type.__new__ rather than __build_class__, so class - methods relying on that will now work correctly when called from metaclass - methods during class creation. Patch by Martin Teichmann. - -- bpo-25221: Fix corrupted result from PyLong_FromLong(0) when Python is - compiled with NSMALLPOSINTS = 0. - -- bpo-27080: Implement formatting support for :pep:`515`. Initial patch by - Chris Angelico. - -- bpo-27199: In tarfile, expose copyfileobj bufsize to improve throughput. - Patch by Jason Fried. - -- bpo-27948: In f-strings, only allow backslashes inside the braces (where - the expressions are). This is a breaking change from the 3.6 alpha - releases, where backslashes are allowed anywhere in an f-string. Also, - require that expressions inside f-strings be enclosed within literal - braces, and not escapes like ``f'\x7b"hi"\x7d'``. - -- bpo-28046: Remove platform-specific directories from sys.path. - -- bpo-28071: Add early-out for differencing from an empty set. - -- bpo-25758: Prevents zipimport from unnecessarily encoding a filename - (patch by Eryk Sun) - -- bpo-25856: The __module__ attribute of extension classes and functions now - is interned. This leads to more compact pickle data with protocol 4. - -- bpo-27213: Rework CALL_FUNCTION* opcodes to produce shorter and more - efficient bytecode. Patch by Demur Rumed, design by Serhiy Storchaka, - reviewed by Serhiy Storchaka and Victor Stinner. - -- bpo-26331: Implement tokenizing support for :pep:`515`. Patch by Georg - Brandl. - -- bpo-27999: Make "global after use" a SyntaxError, and ditto for nonlocal. - Patch by Ivan Levkivskyi. - -- bpo-28003: Implement :pep:`525` -- Asynchronous Generators. - -- bpo-27985: Implement :pep:`526` -- Syntax for Variable Annotations. Patch - by Ivan Levkivskyi. - -- bpo-26058: Add a new private version to the builtin dict type, incremented - at each dictionary creation and at each dictionary change. Implementation - of the PEP 509. - -- bpo-27364: A backslash-character pair that is not a valid escape sequence - now generates a DeprecationWarning. Patch by Emanuel Barry. - -- bpo-27350: ``dict`` implementation is changed like PyPy. It is more - compact and preserves insertion order. (Concept developed by Raymond - Hettinger and patch by Inada Naoki.) - -- bpo-27911: Remove unnecessary error checks in - ``exec_builtin_or_dynamic()``. - -- bpo-27078: Added BUILD_STRING opcode. Optimized f-strings evaluation. - -- bpo-17884: Python now requires systems with inttypes.h and stdint.h - -- bpo-27961: Require platforms to support ``long long``. Python hasn't - compiled without ``long long`` for years, so this is basically a - formality. - -- bpo-27355: Removed support for Windows CE. It was never finished, and - Windows CE is no longer a relevant platform for Python. - -- Implement :pep:`523`. - -- bpo-27870: A left shift of zero by a large integer no longer attempts to - allocate large amounts of memory. - -- bpo-25402: In int-to-decimal-string conversion, improve the estimate of - the intermediate memory required, and remove an unnecessarily strict - overflow check. Patch by Serhiy Storchaka. - -- bpo-27214: In long_invert, be more careful about modifying object returned - by long_add, and remove an unnecessary check for small longs. Thanks Oren - Milman for analysis and patch. - -- bpo-27506: Support passing the bytes/bytearray.translate() "delete" - argument by keyword. - -- bpo-27812: Properly clear out a generator's frame's backreference to the - generator to prevent crashes in frame.clear(). - -- bpo-27811: Fix a crash when a coroutine that has not been awaited is - finalized with warnings-as-errors enabled. - -- bpo-27587: Fix another issue found by PVS-Studio: Null pointer check after - use of 'def' in _PyState_AddModule(). Initial patch by Christian Heimes. - -- bpo-27792: The modulo operation applied to ``bool`` and other ``int`` - subclasses now always returns an ``int``. Previously the return type - depended on the input values. Patch by Xiang Zhang. - -- bpo-26984: int() now always returns an instance of exact int. - -- bpo-25604: Fix a minor bug in integer true division; this bug could - potentially have caused off-by-one-ulp results on platforms with - unreliable ldexp implementations. - -- bpo-24254: Make class definition namespace ordered by default. - -- bpo-27662: Fix an overflow check in ``List_New``: the original code was - checking against ``Py_SIZE_MAX`` instead of the correct upper bound of - ``Py_SSIZE_T_MAX``. Patch by Xiang Zhang. - -- bpo-27782: Multi-phase extension module import now correctly allows the - ``m_methods`` field to be used to add module level functions to instances - of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang. - -- bpo-27936: The round() function accepted a second None argument for some - types but not for others. Fixed the inconsistency by accepting None for - all numeric types. - -- bpo-27487: Warn if a submodule argument to "python -m" or - runpy.run_module() is found in sys.modules after parent packages are - imported, but before the submodule is executed. - -- bpo-27157: Make only type() itself accept the one-argument form. Patch by - Eryk Sun and Emanuel Barry. - -- bpo-27558: Fix a SystemError in the implementation of "raise" statement. - In a brand new thread, raise a RuntimeError since there is no active - exception to reraise. Patch written by Xiang Zhang. - -- bpo-28008: Implement :pep:`530` -- asynchronous comprehensions. - -- bpo-27942: Fix memory leak in codeobject.c - -Library -------- - -- bpo-28732: Fix crash in os.spawnv() with no elements in args - -- bpo-28485: Always raise ValueError for negative - compileall.compile_dir(workers=...) parameter, even when multithreading is - unavailable. - -- bpo-28037: Use sqlite3_get_autocommit() instead of setting - Connection->inTransaction manually. - -- bpo-25283: Attributes tm_gmtoff and tm_zone are now available on all - platforms in the return values of time.localtime() and time.gmtime(). - -- bpo-24454: Regular expression match object groups are now accessible using - __getitem__. "mo[x]" is equivalent to "mo.group(x)". - -- bpo-10740: sqlite3 no longer implicitly commit an open transaction before - DDL statements. - -- bpo-17941: Add a *module* parameter to collections.namedtuple(). - -- bpo-22493: Inline flags now should be used only at the start of the - regular expression. Deprecation warning is emitted if uses them in the - middle of the regular expression. - -- bpo-26885: xmlrpc now supports unmarshalling additional data types used by - Apache XML-RPC implementation for numerics and None. - -- bpo-28070: Fixed parsing inline verbose flag in regular expressions. - -- bpo-19500: Add client-side SSL session resumption to the ssl module. - -- bpo-28022: Deprecate ssl-related arguments in favor of SSLContext. The - deprecation include manual creation of SSLSocket and certfile/keyfile (or - similar) in ftplib, httplib, imaplib, smtplib, poplib and urllib. - -- bpo-28043: SSLContext has improved default settings: OP_NO_SSLv2, - OP_NO_SSLv3, OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, - OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE and HIGH ciphers without MD5. - -- bpo-24693: Changed some RuntimeError's in the zipfile module to more - appropriate types. Improved some error messages and debugging output. - -- bpo-17909: ``json.load`` and ``json.loads`` now support binary input - encoded as UTF-8, UTF-16 or UTF-32. Patch by Serhiy Storchaka. - -- bpo-27137: the pure Python fallback implementation of - ``functools.partial`` now matches the behaviour of its accelerated C - counterpart for subclassing, pickling and text representation purposes. - Patch by Emanuel Barry and Serhiy Storchaka. - -- Fix possible integer overflows and crashes in the mmap module with unusual - usage patterns. - -- bpo-1703178: Fix the ability to pass the --link-objects option to the - distutils build_ext command. - -- bpo-28019: itertools.count() no longer rounds non-integer step in range - between 1.0 and 2.0 to 1. - -- bpo-18401: Pdb now supports the 'readrc' keyword argument to control - whether .pdbrc files should be read. Patch by Martin Matusiak and Sam - Kimbrel. - -- bpo-25969: Update the lib2to3 grammar to handle the unpacking - generalizations added in 3.5. - -- bpo-14977: mailcap now respects the order of the lines in the mailcap - files ("first match"), as required by RFC 1542. Patch by Michael Lazar. - -- bpo-28082: Convert re flag constants to IntFlag. - -- bpo-28025: Convert all ssl module constants to IntEnum and IntFlags. - SSLContext properties now return flags and enums. - -- bpo-23591: Add Flag, IntFlag, and auto() to enum module. - -- bpo-433028: Added support of modifier spans in regular expressions. - -- bpo-24594: Validates persist parameter when opening MSI database - -- bpo-17582: xml.etree.ElementTree nows preserves whitespaces in attributes - (Patch by Duane Griffin. Reviewed and approved by Stefan Behnel.) - -- bpo-28047: Fixed calculation of line length used for the base64 CTE in the - new email policies. - -- bpo-27576: Fix call order in OrderedDict.__init__(). - -- email.generator.DecodedGenerator now supports the policy keyword. - -- bpo-28027: Remove undocumented modules from ``Lib/plat-*``: IN, CDROM, - DLFCN, TYPES, CDIO, and STROPTS. - -- bpo-27445: Don't pass str(_charset) to MIMEText.set_payload(). Patch by - Claude Paroz. - -- bpo-24277: The new email API is no longer provisional, and the docs have - been reorganized and rewritten to emphasize the new API. - -- bpo-22450: urllib now includes an ``Accept: */*`` header among the default - headers. This makes the results of REST API requests more consistent and - predictable especially when proxy servers are involved. - -- lib2to3.pgen3.driver.load_grammar() now creates a stable cache file - between runs given the same Grammar.txt input regardless of the hash - randomization setting. - -- bpo-28005: Allow ImportErrors in encoding implementation to propagate. - -- bpo-26667: Support path-like objects in importlib.util. - -- bpo-27570: Avoid zero-length memcpy() etc calls with null source pointers - in the "ctypes" and "array" modules. - -- bpo-22233: Break email header lines *only* on the RFC specified CR and LF - characters, not on arbitrary unicode line breaks. This also fixes a bug - in HTTP header parsing. - -- bpo-27331: The email.mime classes now all accept an optional policy - keyword. - -- bpo-27988: Fix email iter_attachments incorrect mutation of payload list. - -- bpo-16113: Add SHA-3 and SHAKE support to hashlib module. - -- Eliminate a tautological-pointer-compare warning in _scproxy.c. - -- bpo-27776: The :func:`os.urandom` function does now block on Linux 3.17 - and newer until the system urandom entropy pool is initialized to increase - the security. This change is part of the :pep:`524`. - -- bpo-27778: Expose the Linux ``getrandom()`` syscall as a new - :func:`os.getrandom` function. This change is part of the :pep:`524`. - -- bpo-27691: Fix ssl module's parsing of GEN_RID subject alternative name - fields in X.509 certs. - -- bpo-18844: Add random.choices(). - -- bpo-25761: Improved error reporting about truncated pickle data in C - implementation of unpickler. UnpicklingError is now raised instead of - AttributeError and ValueError in some cases. - -- bpo-26798: Add BLAKE2 (blake2b and blake2s) to hashlib. - -- bpo-26032: Optimized globbing in pathlib by using os.scandir(); it is now - about 1.5--4 times faster. - -- bpo-25596: Optimized glob() and iglob() functions in the glob module; they - are now about 3--6 times faster. - -- bpo-27928: Add scrypt (password-based key derivation function) to hashlib - module (requires OpenSSL 1.1.0). - -- bpo-27850: Remove 3DES from ssl module's default cipher list to counter - measure sweet32 attack (:cve:`2016-2183`). - -- bpo-27766: Add ChaCha20 Poly1305 to ssl module's default cipher list. - (Required OpenSSL 1.1.0 or LibreSSL). - -- bpo-25387: Check return value of winsound.MessageBeep. - -- bpo-27866: Add SSLContext.get_ciphers() method to get a list of all - enabled ciphers. - -- bpo-27744: Add AF_ALG (Linux Kernel crypto) to socket module. - -- bpo-26470: Port ssl and hashlib module to OpenSSL 1.1.0. - -- bpo-11620: Fix support for SND_MEMORY in winsound.PlaySound. Based on a - patch by Tim Lesher. - -- bpo-11734: Add support for IEEE 754 half-precision floats to the struct - module. Based on a patch by Eli Stevens. - -- bpo-27919: Deprecated ``extra_path`` distribution option in distutils - packaging. - -- bpo-23229: Add new ``cmath`` constants: ``cmath.inf`` and ``cmath.nan`` to - match ``math.inf`` and ``math.nan``, and also ``cmath.infj`` and - ``cmath.nanj`` to match the format used by complex repr. - -- bpo-27842: The csv.DictReader now returns rows of type OrderedDict. - (Contributed by Steve Holden.) - -- Remove support for passing a file descriptor to os.access. It never worked - but previously didn't raise. - -- bpo-12885: Fix error when distutils encounters symlink. - -- bpo-27881: Fixed possible bugs when setting - sqlite3.Connection.isolation_level. Based on patch by Xiang Zhang. - -- bpo-27861: Fixed a crash in sqlite3.Connection.cursor() when a factory - creates not a cursor. Patch by Xiang Zhang. - -- bpo-19884: Avoid spurious output on OS X with Gnu Readline. - -- bpo-27706: Restore deterministic behavior of random.Random().seed() for - string seeds using seeding version 1. Allows sequences of calls to - random() to exactly match those obtained in Python 2. Patch by Nofar - Schnider. - -- bpo-10513: Fix a regression in Connection.commit(). Statements should not - be reset after a commit. - -- bpo-12319: Chunked transfer encoding support added to - http.client.HTTPConnection requests. The - urllib.request.AbstractHTTPHandler class does not enforce a Content-Length - header any more. If a HTTP request has a file or iterable body, but no - Content-Length header, the library now falls back to use chunked - transfer-encoding. - -- A new version of typing.py from https://github.com/python/typing: - - Collection (only for 3.6) (issue #27598) - Add FrozenSet to __all__ - (upstream #261) - fix crash in _get_type_vars() (upstream #259) - Remove - the dict constraint in ForwardRef._eval_type (upstream #252) - -- bpo-27832: Make ``_normalize`` parameter to ``Fraction`` constructor - keyword-only, so that ``Fraction(2, 3, 4)`` now raises ``TypeError``. - -- bpo-27539: Fix unnormalised ``Fraction.__pow__`` result in the case of - negative exponent and negative base. - -- bpo-21718: cursor.description is now available for queries using CTEs. - -- bpo-27819: In distutils sdists, simply produce the "gztar" (gzipped tar - format) distributions on all platforms unless "formats" is supplied. - -- bpo-2466: posixpath.ismount now correctly recognizes mount points which - the user does not have permission to access. - -- bpo-9998: On Linux, ctypes.util.find_library now looks in LD_LIBRARY_PATH - for shared libraries. - -- bpo-27573: exit message for code.interact is now configurable. - -- bpo-27930: Improved behaviour of logging.handlers.QueueListener. Thanks to - Paulo Andrade and Petr Viktorin for the analysis and patch. - -- bpo-6766: Distributed reference counting added to multiprocessing to - support nesting of shared values / proxy objects. - -- bpo-21201: Improves readability of multiprocessing error message. Thanks - to Wojciech Walczak for patch. - -- asyncio: Add set_protocol / get_protocol to Transports. - -- bpo-27456: asyncio: Set TCP_NODELAY by default. - -IDLE ----- - -- bpo-15308: Add 'interrupt execution' (^C) to Shell menu. Patch by Roger - Serwy, updated by Bayard Randel. - -- bpo-27922: Stop IDLE tests from 'flashing' gui widgets on the screen. - -- bpo-27891: Consistently group and sort imports within idlelib modules. - -- bpo-17642: add larger font sizes for classroom projection. - -- Add version to title of IDLE help window. - -- bpo-25564: In section on IDLE -- console differences, mention that using - exec means that __builtins__ is defined for each statement. - -- bpo-27821: Fix 3.6.0a3 regression that prevented custom key sets from - being selected when no custom theme was defined. - -C API ------ - -- bpo-26900: Excluded underscored names and other private API from limited - API. - -- bpo-26027: Add support for path-like objects in PyUnicode_FSConverter() & - PyUnicode_FSDecoder(). - -Tests ------ - -- bpo-27427: Additional tests for the math module. Patch by Francisco Couzo. - -- bpo-27953: Skip math and cmath tests that fail on OS X 10.4 due to a poor - libm implementation of tan. - -- bpo-26040: Improve test_math and test_cmath coverage and rigour. Patch by - Jeff Allen. - -- bpo-27787: Call gc.collect() before checking each test for "dangling - threads", since the dangling threads are weak references. - -Build ------ - -- bpo-27566: Fix clean target in freeze makefile (patch by Lisa Roach) - -- bpo-27705: Update message in validate_ucrtbase.py - -- bpo-27976: Deprecate building _ctypes with the bundled copy of libffi on - non-OSX UNIX platforms. - -- bpo-27983: Cause lack of llvm-profdata tool when using clang as required - for PGO linking to be a configure time error rather than make time when - ``--with-optimizations`` is enabled. Also improve our ability to find the - llvm-profdata tool on MacOS and some Linuxes. - -- bpo-21590: Support for DTrace and SystemTap probes. - -- bpo-26307: The profile-opt build now applies PGO to the built-in modules. - -- bpo-26359: Add the --with-optimizations flag to turn on LTO and PGO build - support when available. - -- bpo-27917: Set platform triplets for Android builds. - -- bpo-25825: Update references to the $(LIBPL) installation path on AIX. - This path was changed in 3.2a4. - -- Update OS X installer to use SQLite 3.14.1 and XZ 5.2.2. - -- bpo-21122: Fix LTO builds on OS X. - -- bpo-17128: Build OS X installer with a private copy of OpenSSL. Also - provide a sample Install Certificates command script to install a set of - root certificates from the third-party certifi module. - -Tools/Demos ------------ - -- bpo-27952: Get Tools/scripts/fixcid.py working with Python 3 and the - current "re" module, avoid invalid Python backslash escapes, and fix a bug - parsing escaped C quote signs. - -Windows -------- - -- bpo-28065: Update xz dependency to 5.2.2 and build it from source. - -- bpo-25144: Ensures TargetDir is set before continuing with custom install. - -- bpo-1602: Windows console doesn't input or print Unicode (PEP 528) - -- bpo-27781: Change file system encoding on Windows to UTF-8 (PEP 529) - -- bpo-27731: Opt-out of MAX_PATH on Windows 10 - -- bpo-6135: Adds encoding and errors parameters to subprocess. - -- bpo-27959: Adds oem encoding, alias ansi to mbcs, move aliasmbcs to codec - lookup. - -- bpo-27982: The functions of the winsound module now accept keyword - arguments. - -- bpo-20366: Build full text search support into SQLite on Windows. - -- bpo-27756: Adds new icons for Python files and processes on Windows. - Designs by Cherry Wang. - -- bpo-27883: Update sqlite to 3.14.1.0 on Windows. - - -What's New in Python 3.6.0 alpha 4? -=================================== - -*Release date: 2016-08-15* - -Core and Builtins ------------------ - -- bpo-27704: Optimized creating bytes and bytearray from byte-like objects - and iterables. Speed up to 3 times for short objects. Original patch by - Naoki Inada. - -- bpo-26823: Large sections of repeated lines in tracebacks are now - abbreviated as "[Previous line repeated {count} more times]" by the - builtin traceback rendering. Patch by Emanuel Barry. - -- bpo-27574: Decreased an overhead of parsing keyword arguments in functions - implemented with using Argument Clinic. - -- bpo-22557: Now importing already imported modules is up to 2.5 times - faster. - -- bpo-17596: Include <wincrypt.h> to help with Min GW building. - -- bpo-17599: On Windows, rename the privately defined REPARSE_DATA_BUFFER - structure to avoid conflicting with the definition from Min GW. - -- bpo-27507: Add integer overflow check in bytearray.extend(). Patch by - Xiang Zhang. - -- bpo-27581: Don't rely on wrapping for overflow check in - PySequence_Tuple(). Patch by Xiang Zhang. - -- bpo-1621: Avoid signed integer overflow in list and tuple operations. - Patch by Xiang Zhang. - -- bpo-27419: Standard __import__() no longer look up "__import__" in globals - or builtins for importing submodules or "from import". Fixed a crash if - raise a warning about unabling to resolve package from __spec__ or - __package__. - -- bpo-27083: Respect the PYTHONCASEOK environment variable under Windows. - -- bpo-27514: Make having too many statically nested blocks a SyntaxError - instead of SystemError. - -- bpo-27366: Implemented :pep:`487` (Simpler customization of class - creation). Upon subclassing, the __init_subclass__ classmethod is called - on the base class. Descriptors are initialized with __set_name__ after - class creation. - -Library -------- - -- bpo-26027: Add :pep:`519`/__fspath__() support to the os and os.path - modules. Includes code from Jelle Zijlstra. (See also: bpo-27524) - -- bpo-27598: Add Collections to collections.abc. Patch by Ivan Levkivskyi, - docs by Neil Girdhar. - -- bpo-25958: Support "anti-registration" of special methods from various - ABCs, like __hash__, __iter__ or __len__. All these (and several more) - can be set to None in an implementation class and the behavior will be as - if the method is not defined at all. (Previously, this mechanism existed - only for __hash__, to make mutable classes unhashable.) Code contributed - by Andrew Barnert and Ivan Levkivskyi. - -- bpo-16764: Support keyword arguments to zlib.decompress(). Patch by Xiang - Zhang. - -- bpo-27736: Prevent segfault after interpreter re-initialization due to ref - count problem introduced in code for issue #27038 in 3.6.0a3. Patch by - Xiang Zhang. - -- bpo-25628: The *verbose* and *rename* parameters for - collections.namedtuple are now keyword-only. - -- bpo-12345: Add mathematical constant tau to math and cmath. See also - :pep:`628`. - -- bpo-26823: traceback.StackSummary.format now abbreviates large sections of - repeated lines as "[Previous line repeated {count} more times]" (this - change then further affects other traceback display operations in the - module). Patch by Emanuel Barry. - -- bpo-27664: Add to concurrent.futures.thread.ThreadPoolExecutor() the - ability to specify a thread name prefix. - -- bpo-27181: Add geometric_mean and harmonic_mean to statistics module. - -- bpo-27573: code.interact now prints an message when exiting. - -- bpo-6422: Add autorange method to timeit.Timer objects. - -- bpo-27773: Correct some memory management errors server_hostname in - _ssl.wrap_socket(). - -- bpo-26750: unittest.mock.create_autospec() now works properly for - subclasses of property() and other data descriptors. Removes the never - publicly used, never documented unittest.mock.DescriptorTypes tuple. - -- bpo-26754: Undocumented support of general bytes-like objects as path in - compile() and similar functions is now deprecated. - -- bpo-26800: Undocumented support of general bytes-like objects as paths in - os functions is now deprecated. - -- bpo-26981: Add _order_ compatibility shim to enum.Enum for Python 2/3 code - bases. - -- bpo-27661: Added tzinfo keyword argument to datetime.combine. - -- In the curses module, raise an error if window.getstr() or window.instr() - is passed a negative value. - -- bpo-27783: Fix possible usage of uninitialized memory in - operator.methodcaller. - -- bpo-27774: Fix possible Py_DECREF on unowned object in _sre. - -- bpo-27760: Fix possible integer overflow in binascii.b2a_qp. - -- bpo-27758: Fix possible integer overflow in the _csv module for large - record lengths. - -- bpo-27568: Prevent HTTPoxy attack (:cve:`2016-1000110`). Ignore the - HTTP_PROXY variable when REQUEST_METHOD environment is set, which - indicates that the script is in CGI mode. - -- bpo-7063: Remove dead code from the "array" module's slice handling. Patch - by Chuck. - -- bpo-27656: Do not assume sched.h defines any SCHED_* constants. - -- bpo-27130: In the "zlib" module, fix handling of large buffers (typically - 4 GiB) when compressing and decompressing. Previously, inputs were - limited to 4 GiB, and compression and decompression operations did not - properly handle results of 4 GiB. - -- bpo-24773: Implemented :pep:`495` (Local Time Disambiguation). - -- Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select - module. - -- bpo-27567: Expose the EPOLLRDHUP and POLLRDHUP constants in the select - module. - -- bpo-1621: Avoid signed int negation overflow in the "audioop" module. - -- bpo-27533: Release GIL in nt._isdir - -- bpo-17711: Fixed unpickling by the persistent ID with protocol 0. Original - patch by Alexandre Vassalotti. - -- bpo-27522: Avoid an unintentional reference cycle in email.feedparser. - -- bpo-27512: Fix a segfault when os.fspath() called an __fspath__() method - that raised an exception. Patch by Xiang Zhang. - -IDLE ----- - -- bpo-27714: text_textview and test_autocomplete now pass when re-run in the - same process. This occurs when test_idle fails when run with the -w - option but without -jn. Fix warning from test_config. - -- bpo-27621: Put query response validation error messages in the query box - itself instead of in a separate messagebox. Redo tests to match. Add Mac - OSX refinements. Original patch by Mark Roseman. - -- bpo-27620: Escape key now closes Query box as cancelled. - -- bpo-27609: IDLE: tab after initial whitespace should tab, not - autocomplete. This fixes problem with writing docstrings at least twice - indented. - -- bpo-27609: Explicitly return None when there are also non-None returns. In - a few cases, reverse a condition and eliminate a return. - -- bpo-25507: IDLE no longer runs buggy code because of its tkinter imports. - Users must include the same imports required to run directly in Python. - -- bpo-27173: Add 'IDLE Modern Unix' to the built-in key sets. Make the - default key set depend on the platform. Add tests for the changes to the - config module. - -- bpo-27452: add line counter and crc to IDLE configHandler test dump. - -Tests ------ - -- bpo-25805: Skip a test in test_pkgutil as needed that doesn't work when - ``__name__ == __main__``. Patch by SilentGhost. - -- bpo-27472: Add test.support.unix_shell as the path to the default shell. - -- bpo-27369: In test_pyexpat, avoid testing an error message detail that - changed in Expat 2.2.0. - -- bpo-27594: Prevent assertion error when running test_ast with coverage - enabled: ensure code object has a valid first line number. Patch suggested - by Ivan Levkivskyi. - -Windows -------- - -- bpo-27647: Update bundled Tcl/Tk to 8.6.6. - -- bpo-27610: Adds :pep:`514` metadata to Windows installer - -- bpo-27469: Adds a shell extension to the launcher so that drag and drop - works correctly. - -- bpo-27309: Enables proper Windows styles in python[w].exe manifest. - -Build ------ - -- bpo-27713: Suppress spurious build warnings when updating importlib's - bootstrap files. Patch by Xiang Zhang - -- bpo-25825: Correct the references to Modules/python.exp, which is required - on AIX. The references were accidentally changed in 3.5.0a1. - -- bpo-27453: CPP invocation in configure must use CPPFLAGS. Patch by Chi - Hsuan Yen. - -- bpo-27641: The configure script now inserts comments into the makefile to - prevent the pgen and _freeze_importlib executables from being - cross-compiled. - -- bpo-26662: Set PYTHON_FOR_GEN in configure as the Python program to be - used for file generation during the build. - -- bpo-10910: Avoid C++ compilation errors on FreeBSD and OS X. Also update - FreedBSD version checks for the original ctype UTF-8 workaround. - - -What's New in Python 3.6.0 alpha 3? -=================================== - -*Release date: 2016-07-11* - -Security --------- - -- bpo-27278: Fix os.urandom() implementation using getrandom() on Linux. - Truncate size to INT_MAX and loop until we collected enough random bytes, - instead of casting a directly Py_ssize_t to int. - -- bpo-22636: Avoid shell injection problems with ctypes.util.find_library(). - -Core and Builtins ------------------ - -- bpo-27473: Fixed possible integer overflow in bytes and bytearray - concatenations. Patch by Xiang Zhang. - -- bpo-23034: The output of a special Python build with defined COUNT_ALLOCS, - SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It - can be re-enabled using the "-X showalloccount" option. It now outputs to - stderr instead of stdout. - -- bpo-27443: __length_hint__() of bytearray iterators no longer return a - negative integer for a resized bytearray. - -- bpo-27007: The fromhex() class methods of bytes and bytearray subclasses - now return an instance of corresponding subclass. - -Library -------- - -- bpo-26844: Fix error message for imp.find_module() to refer to 'path' - instead of 'name'. Patch by Lev Maximov. - -- bpo-23804: Fix SSL zero-length recv() calls to not block and not raise an - error about unclean EOF. - -- bpo-27466: Change time format returned by http.cookie.time2netscape, - confirming the netscape cookie format and making it consistent with - documentation. - -- bpo-21708: Deprecated dbm.dumb behavior that differs from common dbm - behavior: creating a database in 'r' and 'w' modes and modifying a - database in 'r' mode. - -- bpo-26721: Change the socketserver.StreamRequestHandler.wfile attribute to - implement BufferedIOBase. In particular, the write() method no longer does - partial writes. - -- bpo-22115: Added methods trace_add, trace_remove and trace_info in the - tkinter.Variable class. They replace old methods trace_variable, trace, - trace_vdelete and trace_vinfo that use obsolete Tcl commands and might not - work in future versions of Tcl. Fixed old tracing methods: - trace_vdelete() with wrong mode no longer break tracing, trace_vinfo() now - always returns a list of pairs of strings, tracing in the "u" mode now - works. - -- bpo-26243: Only the level argument to zlib.compress() is keyword argument - now. The first argument is positional-only. - -- bpo-27038: Expose the DirEntry type as os.DirEntry. Code patch by Jelle - Zijlstra. - -- bpo-27186: Update os.fspath()/PyOS_FSPath() to check the return value of - __fspath__() to be either str or bytes. - -- bpo-18726: All optional parameters of the dump(), dumps(), load() and - loads() functions and JSONEncoder and JSONDecoder class constructors in - the json module are now keyword-only. - -- bpo-27319: Methods selection_set(), selection_add(), selection_remove() - and selection_toggle() of ttk.TreeView now allow passing multiple items as - multiple arguments instead of passing them as a tuple. Deprecated - undocumented ability of calling the selection() method with arguments. - -- bpo-27079: Fixed curses.ascii functions isblank(), iscntrl() and - ispunct(). - -- bpo-27294: Numerical state in the repr for Tkinter event objects is now - represented as a combination of known flags. - -- bpo-27177: Match objects in the re module now support index-like objects - as group indices. Based on patches by Jeroen Demeyer and Xiang Zhang. - -- bpo-26754: Some functions (compile() etc) accepted a filename argument - encoded as an iterable of integers. Now only strings and byte-like objects - are accepted. - -- bpo-26536: socket.ioctl now supports SIO_LOOPBACK_FAST_PATH. Patch by - Daniel Stokes. - -- bpo-27048: Prevents distutils failing on Windows when environment - variables contain non-ASCII characters - -- bpo-27330: Fixed possible leaks in the ctypes module. - -- bpo-27238: Got rid of bare excepts in the turtle module. Original patch - by Jelle Zijlstra. - -- bpo-27122: When an exception is raised within the context being managed by - a contextlib.ExitStack() and one of the exit stack generators catches and - raises it in a chain, do not re-raise the original exception when exiting, - let the new chained one through. This avoids the :pep:`479` bug described - in issue25782. - -- bpo-16864: sqlite3.Cursor.lastrowid now supports REPLACE statement. - Initial patch by Alex LordThorsen. - -- bpo-26386: Fixed ttk.TreeView selection operations with item id's - containing spaces. - -- bpo-8637: Honor a pager set by the env var MANPAGER (in preference to one - set by the env var PAGER). - -- bpo-16182: Fix various functions in the "readline" module to use the - locale encoding, and fix get_begidx() and get_endidx() to return code - point indexes. - -- bpo-27392: Add loop.connect_accepted_socket(). Patch by Jim Fulton. - -IDLE ----- - -- bpo-27477: IDLE search dialogs now use ttk widgets. - -- bpo-27173: Add 'IDLE Modern Unix' to the built-in key sets. Make the - default key set depend on the platform. Add tests for the changes to the - config module. - -- bpo-27452: make command line "idle-test> python test_help.py" work. - __file__ is relative when python is started in the file's directory. - -- bpo-27452: add line counter and crc to IDLE configHandler test dump. - -- bpo-27380: IDLE: add query.py with base Query dialog and ttk widgets. - Module had subclasses SectionName, ModuleName, and HelpSource, which are - used to get information from users by configdialog and file =>Load Module. - Each subclass has itw own validity checks. Using ModuleName allows users - to edit bad module names instead of starting over. Add tests and delete - the two files combined into the new one. - -- bpo-27372: Test_idle no longer changes the locale. - -- bpo-27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. - -- bpo-27245: IDLE: Cleanly delete custom themes and key bindings. - Previously, when IDLE was started from a console or by import, a cascade - of warnings was emitted. Patch by Serhiy Storchaka. - -- bpo-24137: Run IDLE, test_idle, and htest with tkinter default root - disabled. Fix code and tests that fail with this restriction. Fix htests - to not create a second and redundant root and mainloop. - -- bpo-27310: Fix IDLE.app failure to launch on OS X due to vestigial import. - -C API ------ - -- bpo-26754: PyUnicode_FSDecoder() accepted a filename argument encoded as - an iterable of integers. Now only strings and byte-like objects are - accepted. - -Build ------ - -- bpo-28066: Fix the logic that searches build directories for generated - include files when building outside the source tree. - -- bpo-27442: Expose the Android API level that python was built against, in - sysconfig.get_config_vars() as 'ANDROID_API_LEVEL'. - -- bpo-27434: The interpreter that runs the cross-build, found in PATH, must - now be of the same feature version (e.g. 3.6) as the source being built. - -- bpo-26930: Update Windows builds to use OpenSSL 1.0.2h. - -- bpo-23968: Rename the platform directory from plat-$(MACHDEP) to - plat-$(PLATFORM_TRIPLET). Rename the config directory (LIBPL) from - config-$(LDVERSION) to config-$(LDVERSION)-$(PLATFORM_TRIPLET). Install - the platform specific _sysconfigdata module into the platform directory - and rename it to include the ABIFLAGS. - -- Don't use largefile support for GNU/Hurd. - -Tools/Demos ------------ - -- bpo-27332: Fixed the type of the first argument of module-level functions - generated by Argument Clinic. Patch by Petr Viktorin. - -- bpo-27418: Fixed Tools/importbench/importbench.py. - -Documentation -------------- - -- bpo-19489: Moved the search box from the sidebar to the header and footer - of each page. Patch by Ammar Askar. - -- bpo-27285: Update documentation to reflect the deprecation of ``pyvenv`` - and normalize on the term "virtual environment". Patch by Steve Piercy. - -Tests ------ - -- bpo-27027: Added test.support.is_android that is True when this is an - Android build. - - -What's New in Python 3.6.0 alpha 2? -=================================== - -*Release date: 2016-06-13* - -Security --------- - -- bpo-26556: Update expat to 2.1.1, fixes :cve:`2015-1283`. - -- Fix TLS stripping vulnerability in smtplib, :cve:`2016-0772`. Reported by - Team Oststrom. - -- bpo-26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with - ``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom - entropy pool is not initialized yet. Patch written by Colm Buckley. - -Core and Builtins ------------------ - -- bpo-27095: Simplified MAKE_FUNCTION and removed MAKE_CLOSURE opcodes. - Patch by Demur Rumed. - -- bpo-27190: Raise NotSupportedError if sqlite3 is older than 3.3.1. Patch - by Dave Sawyer. - -- bpo-27286: Fixed compiling BUILD_MAP_UNPACK_WITH_CALL opcode. Calling - function with generalized unpacking (PEP 448) and conflicting keyword - names could cause undefined behavior. - -- bpo-27140: Added BUILD_CONST_KEY_MAP opcode. - -- bpo-27186: Add support for os.PathLike objects to open() (part of - :pep:`519`). - -- bpo-27066: Fixed SystemError if a custom opener (for open()) returns a - negative number without setting an exception. - -- bpo-26983: float() now always return an instance of exact float. The - deprecation warning is emitted if __float__ returns an instance of a - strict subclass of float. In a future versions of Python this can be an - error. - -- bpo-27097: Python interpreter is now about 7% faster due to optimized - instruction decoding. Based on patch by Demur Rumed. - -- bpo-26647: Python interpreter now uses 16-bit wordcode instead of - bytecode. Patch by Demur Rumed. - -- bpo-23275: Allow assigning to an empty target list in round brackets: () = - iterable. - -- bpo-27243: Update the __aiter__ protocol: instead of returning an - awaitable that resolves to an asynchronous iterator, the asynchronous - iterator should be returned directly. Doing the former will trigger a - PendingDeprecationWarning. - -Library -------- - -- Comment out socket (SO_REUSEPORT) and posix (O_SHLOCK, O_EXLOCK) constants - exposed on the API which are not implemented on GNU/Hurd. They would not - work at runtime anyway. - -- bpo-27025: Generated names for Tkinter widgets are now more meaningful and - recognizable. - -- bpo-25455: Fixed crashes in repr of recursive ElementTree.Element and - functools.partial objects. - -- bpo-27294: Improved repr for Tkinter event objects. - -- bpo-20508: Improve exception message of IPv{4,6}Network.__getitem__. Patch - by Gareth Rees. - -- bpo-21386: Implement missing IPv4Address.is_global property. It was - documented since 07a5610bae9d. Initial patch by Roger Luethi. - -- bpo-27029: Removed deprecated support of universal newlines mode from - ZipFile.open(). - -- bpo-27030: Unknown escapes consisting of ``'\'`` and an ASCII letter in - regular expressions now are errors. The re.LOCALE flag now can be used - only with bytes patterns. - -- bpo-27186: Add os.PathLike support to DirEntry (part of :pep:`519`). - Initial patch by Jelle Zijlstra. - -- bpo-20900: distutils register command now decodes HTTP responses - correctly. Initial patch by ingrid. - -- bpo-27186: Add os.PathLike support to pathlib, removing its provisional - status (part of PEP 519). Initial patch by Dusty Phillips. - -- bpo-27186: Add support for os.PathLike objects to os.fsencode() and - os.fsdecode() (part of :pep:`519`). - -- bpo-27186: Introduce os.PathLike and os.fspath() (part of :pep:`519`). - -- A new version of typing.py provides several new classes and features: - @overload outside stubs, Reversible, DefaultDict, Text, ContextManager, - Type[], NewType(), TYPE_CHECKING, and numerous bug fixes (note that some - of the new features are not yet implemented in mypy or other static - analyzers). Also classes for :pep:`492` (Awaitable, AsyncIterable, - AsyncIterator) have been added (in fact they made it into 3.5.1 but were - never mentioned). - -- bpo-25738: Stop http.server.BaseHTTPRequestHandler.send_error() from - sending a message body for 205 Reset Content. Also, don't send Content - header fields in responses that don't have a body. Patch by Susumu - Koshiba. - -- bpo-21313: Fix the "platform" module to tolerate when sys.version contains - truncated build information. - -- bpo-23883: Added missing APIs to __all__ to match the documented APIs for - the following modules: cgi, mailbox, mimetypes, plistlib and smtpd. - Patches by Jacek Kołodziej. - -- bpo-27164: In the zlib module, allow decompressing raw Deflate streams - with a predefined zdict. Based on patch by Xiang Zhang. - -- bpo-24291: Fix wsgiref.simple_server.WSGIRequestHandler to completely - write data to the client. Previously it could do partial writes and - truncate data. Also, wsgiref.handler.ServerHandler can now handle stdout - doing partial writes, but this is deprecated. - -- bpo-21272: Use _sysconfigdata.py to initialize distutils.sysconfig. - -- bpo-19611: :mod:`inspect` now reports the implicit ``.0`` parameters - generated by the compiler for comprehension and generator expression - scopes as if they were positional-only parameters called ``implicit0``. - Patch by Jelle Zijlstra. - -- bpo-26809: Add ``__all__`` to :mod:`string`. Patch by Emanuel Barry. - -- bpo-26373: subprocess.Popen.communicate now correctly ignores - BrokenPipeError when the child process dies before .communicate() is - called in more/all circumstances. - -- signal, socket, and ssl module IntEnum constant name lookups now return a - consistent name for values having multiple names. Ex: signal.Signals(6) - now refers to itself as signal.SIGALRM rather than flipping between that - and signal.SIGIOT based on the interpreter's hash randomization seed. - -- bpo-27167: Clarify the subprocess.CalledProcessError error message text - when the child process died due to a signal. - -- bpo-25931: Don't define socketserver.Forking* names on platforms such as - Windows that do not support os.fork(). - -- bpo-21776: distutils.upload now correctly handles HTTPError. Initial patch - by Claudiu Popa. - -- bpo-26526: Replace custom parse tree validation in the parser module with - a simple DFA validator. - -- bpo-27114: Fix SSLContext._load_windows_store_certs fails with - PermissionError - -- bpo-18383: Avoid creating duplicate filters when using filterwarnings and - simplefilter. Based on patch by Alex Shkop. - -- bpo-23026: winreg.QueryValueEx() now return an integer for REG_QWORD type. - -- bpo-26741: subprocess.Popen destructor now emits a ResourceWarning warning - if the child process is still running. - -- bpo-27056: Optimize pickle.load() and pickle.loads(), up to 10% faster to - deserialize a lot of small objects. - -- bpo-21271: New keyword only parameters in reset_mock call. - -IDLE ----- - -- bpo-5124: Paste with text selected now replaces the selection on X11. This - matches how paste works on Windows, Mac, most modern Linux apps, and ttk - widgets. Original patch by Serhiy Storchaka. - -- bpo-24750: Switch all scrollbars in IDLE to ttk versions. Where needed, - minimal tests are added to cover changes. - -- bpo-24759: IDLE requires tk 8.5 and availability ttk widgets. Delete now - unneeded tk version tests and code for older versions. Add test for IDLE - syntax colorizer. - -- bpo-27239: idlelib.macosx.isXyzTk functions initialize as needed. - -- bpo-27262: move Aqua unbinding code, which enable context menus, to - macosx. - -- bpo-24759: Make clear in idlelib.idle_test.__init__ that the directory is - a private implementation of test.test_idle and tool for maintainers. - -- bpo-27196: Stop 'ThemeChanged' warnings when running IDLE tests. These - persisted after other warnings were suppressed in #20567. Apply Serhiy - Storchaka's update_idletasks solution to four test files. Record this - additional advice in idle_test/README.txt - -- bpo-20567: Revise idle_test/README.txt with advice about avoiding tk - warning messages from tests. Apply advice to several IDLE tests. - -- bpo-24225: Update idlelib/README.txt with new file names and event - handlers. - -- bpo-27156: Remove obsolete code not used by IDLE. - -- bpo-27117: Make colorizer htest and turtledemo work with dark themes. Move - code for configuring text widget colors to a new function. - -- bpo-24225: Rename many ``idlelib/*.py`` and ``idle_test/test_*.py`` files. - Edit files to replace old names with new names when the old name referred - to the module rather than the class it contained. See the issue and IDLE - section in What's New in 3.6 for more. - -- bpo-26673: When tk reports font size as 0, change to size 10. Such fonts - on Linux prevented the configuration dialog from opening. - -- bpo-21939: Add test for IDLE's percolator. Original patch by Saimadhav - Heblikar. - -- bpo-21676: Add test for IDLE's replace dialog. Original patch by Saimadhav - Heblikar. - -- bpo-18410: Add test for IDLE's search dialog. Original patch by Westley - Martínez. - -- bpo-21703: Add test for undo delegator. Patch mostly by Saimadhav - Heblikar . - -- bpo-27044: Add ConfigDialog.remove_var_callbacks to stop memory leaks. - -- bpo-23977: Add more asserts to test_delegator. - -Documentation -------------- - -- bpo-16484: Change the default PYTHONDOCS URL to "https:", and fix the - resulting links to use lowercase. Patch by Sean Rodman, test by Kaushik - Nadikuditi. - -- bpo-24136: Document the new :pep:`448` unpacking syntax of 3.5. - -- bpo-22558: Add remaining doc links to source code for Python-coded - modules. Patch by Yoni Lavi. - -Tests ------ - -- bpo-25285: regrtest now uses subprocesses when the -j1 command line option - is used: each test file runs in a fresh child process. Before, the -j1 - option was ignored. - -- bpo-25285: Tools/buildbot/test.bat script now uses -j1 by default to run - each test file in fresh child process. - -Windows -------- - -- bpo-27064: The py.exe launcher now defaults to Python 3. The Windows - launcher ``py.exe`` no longer prefers an installed Python 2 version over - Python 3 by default when used interactively. - -- bpo-17500: Remove unused and outdated icons. (See also: - https://github.com/python/pythondotorg/issues/945) - -Build ------ - -- bpo-27229: Fix the cross-compiling pgen rule for in-tree builds. Patch by - Xavier de Gaye. - -- bpo-26930: Update OS X 10.5+ 32-bit-only installer to build and link with - OpenSSL 1.0.2h. - -C API ------ - -- bpo-27186: Add the PyOS_FSPath() function (part of :pep:`519`). - -- bpo-26282: PyArg_ParseTupleAndKeywords() now supports positional-only - parameters. - -Tools/Demos ------------ - -- bpo-26282: Argument Clinic now supports positional-only and keyword - parameters in the same function. - - -What's New in Python 3.6.0 alpha 1? -=================================== - -*Release date: 2016-05-16* - -Security --------- - -- bpo-26657: Fix directory traversal vulnerability with http.server on - Windows. This fixes a regression that was introduced in 3.3.4rc1 and - 3.4.0rc1. Based on patch by Philipp Hagemeister. - -- bpo-26313: ssl.py _load_windows_store_certs fails if windows cert store is - empty. Patch by Baji. - -- bpo-25939: On Windows open the cert store readonly in - ssl.enum_certificates. - -Core and Builtins ------------------ - -- bpo-20041: Fixed TypeError when frame.f_trace is set to None. Patch by - Xavier de Gaye. - -- bpo-26168: Fixed possible refleaks in failing Py_BuildValue() with the "N" - format unit. - -- bpo-26991: Fix possible refleak when creating a function with annotations. - -- bpo-27039: Fixed bytearray.remove() for values greater than 127. Based on - patch by Joe Jevnik. - -- bpo-23640: int.from_bytes() no longer bypasses constructors for - subclasses. - -- bpo-27005: Optimized the float.fromhex() class method for exact float. It - is now 2 times faster. - -- bpo-18531: Single var-keyword argument of dict subtype was passed - unscathed to the C-defined function. Now it is converted to exact dict. - -- bpo-26811: gc.get_objects() no longer contains a broken tuple with NULL - pointer. - -- bpo-20120: Use RawConfigParser for .pypirc parsing, removing support for - interpolation unintentionally added with move to Python 3. Behavior no - longer does any interpolation in .pypirc files, matching behavior in - Python 2.7 and Setuptools 19.0. - -- bpo-26249: Memory functions of the :c:func:`PyMem_Malloc` domain - (:c:macro:`PYMEM_DOMAIN_MEM`) now use the :ref:`pymalloc allocator - <pymalloc>` rather than system :c:func:`malloc`. Applications calling - :c:func:`PyMem_Malloc` without holding the GIL can now crash: use - ``PYTHONMALLOC=debug`` environment variable to validate the usage of - memory allocators in your application. - -- bpo-26802: Optimize function calls only using unpacking like - ``func(*tuple)`` (no other positional argument, no keyword): avoid copying - the tuple. Patch written by Joe Jevnik. - -- bpo-26659: Make the builtin slice type support cycle collection. - -- bpo-26718: super.__init__ no longer leaks memory if called multiple times. - NOTE: A direct call of super.__init__ is not endorsed! - -- bpo-27138: Fix the doc comment for FileFinder.find_spec(). - -- bpo-27147: Mention :pep:`420` in the importlib docs. - -- bpo-25339: PYTHONIOENCODING now has priority over locale in setting the - error handler for stdin and stdout. - -- bpo-26494: Fixed crash on iterating exhausting iterators. Affected classes - are generic sequence iterators, iterators of str, bytes, bytearray, list, - tuple, set, frozenset, dict, OrderedDict, corresponding views and - os.scandir() iterator. - -- bpo-26574: Optimize ``bytes.replace(b'', b'.')`` and - ``bytearray.replace(b'', b'.')``. Patch written by Josh Snider. - -- bpo-26581: If coding cookie is specified multiple times on a line in - Python source code file, only the first one is taken to account. - -- bpo-19711: Add tests for reloading namespace packages. - -- bpo-21099: Switch applicable importlib tests to use :pep:`451` API. - -- bpo-26563: Debug hooks on Python memory allocators now raise a fatal error - if functions of the :c:func:`PyMem_Malloc` family are called without - holding the GIL. - -- bpo-26564: On error, the debug hooks on Python memory allocators now use - the :mod:`tracemalloc` module to get the traceback where a memory block - was allocated. - -- bpo-26558: The debug hooks on Python memory allocator - :c:func:`PyObject_Malloc` now detect when functions are called without - holding the GIL. - -- bpo-26516: Add :envvar:`PYTHONMALLOC` environment variable to set the - Python memory allocators and/or install debug hooks. - -- bpo-26516: The :c:func:`PyMem_SetupDebugHooks` function can now also be - used on Python compiled in release mode. - -- bpo-26516: The :envvar:`PYTHONMALLOCSTATS` environment variable can now - also be used on Python compiled in release mode. It now has no effect if - set to an empty string. - -- bpo-26516: In debug mode, debug hooks are now also installed on Python - memory allocators when Python is configured without pymalloc. - -- bpo-26464: Fix str.translate() when string is ASCII and first replacements - removes character, but next replacement uses a non-ASCII character or a - string longer than 1 character. Regression introduced in Python 3.5.0. - -- bpo-22836: Ensure exception reports from PyErr_Display() and - PyErr_WriteUnraisable() are sensible even when formatting them produces - secondary errors. This affects the reports produced by - sys.__excepthook__() and when __del__() raises an exception. - -- bpo-26302: Correct behavior to reject comma as a legal character for - cookie names. - -- bpo-26136: Upgrade the warning when a generator raises StopIteration from - PendingDeprecationWarning to DeprecationWarning. Patch by Anish Shah. - -- bpo-26204: The compiler now ignores all constant statements: bytes, str, - int, float, complex, name constants (None, False, True), Ellipsis and - ast.Constant; not only str and int. For example, ``1.0`` is now ignored in - ``def f(): 1.0``. - -- bpo-4806: Avoid masking the original TypeError exception when using star - (``*``) unpacking in function calls. Based on patch by Hagen Fürstenau - and Daniel Urban. - -- bpo-26146: Add a new kind of AST node: ``ast.Constant``. It can be used by - external AST optimizers, but the compiler does not emit directly such - node. - -- bpo-23601: Sped-up allocation of dict key objects by using Python's small - object allocator. (Contributed by Julian Taylor.) - -- bpo-18018: Import raises ImportError instead of SystemError if a relative - import is attempted without a known parent package. - -- bpo-25843: When compiling code, don't merge constants if they are equal - but have a different types. For example, ``f1, f2 = lambda: 1, lambda: - 1.0`` is now correctly compiled to two different functions: ``f1()`` - returns ``1`` (``int``) and ``f2()`` returns ``1.0`` (``float``), even if - ``1`` and ``1.0`` are equal. - -- bpo-26107: The format of the ``co_lnotab`` attribute of code objects - changes to support negative line number delta. - -- bpo-26154: Add a new private _PyThreadState_UncheckedGet() function to get - the current Python thread state, but don't issue a fatal error if it is - NULL. This new function must be used instead of accessing directly the - _PyThreadState_Current variable. The variable is no more exposed since - Python 3.5.1 to hide the exact implementation of atomic C types, to avoid - compiler issues. - -- bpo-25791: If __package__ != __spec__.parent or if neither __package__ or - __spec__ are defined then ImportWarning is raised. - -- bpo-22995: [UPDATE] Comment out the one of the pickleability tests in - _PyObject_GetState() due to regressions observed in Cython-based projects. - -- bpo-25961: Disallowed null characters in the type name. - -- bpo-25973: Fix segfault when an invalid nonlocal statement binds a name - starting with two underscores. - -- bpo-22995: Instances of extension types with a state that aren't - subclasses of list or dict and haven't implemented any pickle-related - methods (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__, or - __getstate__), can no longer be pickled. Including memoryview. - -- bpo-20440: Massive replacing unsafe attribute setting code with special - macro Py_SETREF. - -- bpo-25766: Special method __bytes__() now works in str subclasses. - -- bpo-25421: __sizeof__ methods of builtin types now use dynamic basic size. - This allows sys.getsize() to work correctly with their subclasses with - __slots__ defined. - -- bpo-25709: Fixed problem with in-place string concatenation and utf-8 - cache. - -- bpo-5319: New Py_FinalizeEx() API allowing Python to set an exit status of - 120 on failure to flush buffered streams. - -- bpo-25485: telnetlib.Telnet is now a context manager. - -- bpo-24097: Fixed crash in object.__reduce__() if slot name is freed inside - __getattr__. - -- bpo-24731: Fixed crash on converting objects with special methods - __bytes__, __trunc__, and __float__ returning instances of subclasses of - bytes, int, and float to subclasses of bytes, int, and float - correspondingly. - -- bpo-25630: Fix a possible segfault during argument parsing in functions - that accept filesystem paths. - -- bpo-23564: Fixed a partially broken sanity check in the _posixsubprocess - internals regarding how fds_to_pass were passed to the child. The bug had - no actual impact as subprocess.py already avoided it. - -- bpo-25388: Fixed tokenizer crash when processing undecodable source code - with a null byte. - -- bpo-25462: The hash of the key now is calculated only once in most - operations in C implementation of OrderedDict. - -- bpo-22995: Default implementation of __reduce__ and __reduce_ex__ now - rejects builtin types with not defined __new__. - -- bpo-24802: Avoid buffer overreads when int(), float(), compile(), exec() - and eval() are passed bytes-like objects. These objects are not - necessarily terminated by a null byte, but the functions assumed they - were. - -- bpo-25555: Fix parser and AST: fill lineno and col_offset of "arg" node - when compiling AST from Python objects. - -- bpo-24726: Fixed a crash and leaking NULL in repr() of OrderedDict that - was mutated by direct calls of dict methods. - -- bpo-25449: Iterating OrderedDict with keys with unstable hash now raises - KeyError in C implementations as well as in Python implementation. - -- bpo-25395: Fixed crash when highly nested OrderedDict structures were - garbage collected. - -- bpo-25401: Optimize bytes.fromhex() and bytearray.fromhex(): they are now - between 2x and 3.5x faster. - -- bpo-25399: Optimize bytearray % args using the new private _PyBytesWriter - API. Formatting is now between 2.5 and 5 times faster. - -- bpo-25274: sys.setrecursionlimit() now raises a RecursionError if the new - recursion limit is too low depending at the current recursion depth. - Modify also the "lower-water mark" formula to make it monotonic. This mark - is used to decide when the overflowed flag of the thread state is reset. - -- bpo-24402: Fix input() to prompt to the redirected stdout when - sys.stdout.fileno() fails. - -- bpo-25349: Optimize bytes % args using the new private _PyBytesWriter API. - Formatting is now up to 2 times faster. - -- bpo-24806: Prevent builtin types that are not allowed to be subclassed - from being subclassed through multiple inheritance. - -- bpo-25301: The UTF-8 decoder is now up to 15 times as fast for error - handlers: ``ignore``, ``replace`` and ``surrogateescape``. - -- bpo-24848: Fixed a number of bugs in UTF-7 decoding of misformed data. - -- bpo-25267: The UTF-8 encoder is now up to 75 times as fast for error - handlers: ``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass``. - Patch co-written with Serhiy Storchaka. - -- bpo-25280: Import trace messages emitted in verbose (-v) mode are no - longer formatted twice. - -- bpo-25227: Optimize ASCII and latin1 encoders with the ``surrogateescape`` - error handler: the encoders are now up to 3 times as fast. Initial patch - written by Serhiy Storchaka. - -- bpo-25003: On Solaris 11.3 or newer, os.urandom() now uses the getrandom() - function instead of the getentropy() function. The getentropy() function - is blocking to generate very good quality entropy, os.urandom() doesn't - need such high-quality entropy. - -- bpo-9232: Modify Python's grammar to allow trailing commas in the argument - list of a function declaration. For example, "def f(\*, a = 3,): pass" is - now legal. Patch from Mark Dickinson. - -- bpo-24965: Implement :pep:`498` "Literal String Interpolation". This - allows you to embed expressions inside f-strings, which are converted to - normal strings at run time. Given x=3, then f'value={x}' == 'value=3'. - Patch by Eric V. Smith. - -- bpo-26478: Fix semantic bugs when using binary operators with dictionary - views and tuples. - -- bpo-26171: Fix possible integer overflow and heap corruption in - zipimporter.get_data(). - -- bpo-25660: Fix TAB key behaviour in REPL with readline. - -- bpo-26288: Optimize PyLong_AsDouble. - -- bpo-26289: Optimize floor and modulo division for single-digit longs. - Microbenchmarks show 2-2.5x improvement. Built-in 'divmod' function is - now also ~10% faster. (See also: bpo-26315) - -- bpo-25887: Raise a RuntimeError when a coroutine object is awaited more - than once. - -Library -------- - -- bpo-27057: Fix os.set_inheritable() on Android, ioctl() is blocked by - SELinux and fails with EACCESS. The function now falls back to fcntl(). - Patch written by Michał Bednarski. - -- bpo-27014: Fix infinite recursion using typing.py. Thanks to Kalle Tuure! - -- bpo-27031: Removed dummy methods in Tkinter widget classes: tk_menuBar() - and tk_bindForTraversal(). - -- bpo-14132: Fix urllib.request redirect handling when the target only has a - query string. Original fix by Ján Janech. - -- bpo-17214: The "urllib.request" module now percent-encodes non-ASCII bytes - found in redirect target URLs. Some servers send Location header fields - with non-ASCII bytes, but "http.client" requires the request target to be - ASCII-encodable, otherwise a UnicodeEncodeError is raised. Based on patch - by Christian Heimes. - -- bpo-27033: The default value of the decode_data parameter for - smtpd.SMTPChannel and smtpd.SMTPServer constructors is changed to False. - -- bpo-27034: Removed deprecated class asynchat.fifo. - -- bpo-26870: Added readline.set_auto_history(), which can stop entries being - automatically added to the history list. Based on patch by Tyler - Crompton. - -- bpo-26039: zipfile.ZipFile.open() can now be used to write data into a ZIP - file, as well as for extracting data. Patch by Thomas Kluyver. - -- bpo-26892: Honor debuglevel flag in urllib.request.HTTPHandler. Patch - contributed by Chi Hsuan Yen. - -- bpo-22274: In the subprocess module, allow stderr to be redirected to - stdout even when stdout is not redirected. Patch by Akira Li. - -- bpo-26807: mock_open 'files' no longer error on readline at end of file. - Patch from Yolanda Robla. - -- bpo-25745: Fixed leaking a userptr in curses panel destructor. - -- bpo-26977: Removed unnecessary, and ignored, call to sum of squares helper - in statistics.pvariance. - -- bpo-26002: Use bisect in statistics.median instead of a linear search. - Patch by Upendra Kuma. - -- bpo-25974: Make use of new Decimal.as_integer_ratio() method in statistics - module. Patch by Stefan Krah. - -- bpo-26996: Add secrets module as described in :pep:`506`. - -- bpo-26881: The modulefinder module now supports extended opcode arguments. - -- bpo-23815: Fixed crashes related to directly created instances of types in - _tkinter and curses.panel modules. - -- bpo-17765: weakref.ref() no longer silently ignores keyword arguments. - Patch by Georg Brandl. - -- bpo-26873: xmlrpc now raises ResponseError on unsupported type tags - instead of silently return incorrect result. - -- bpo-26915: The __contains__ methods in the collections ABCs now check for - identity before checking equality. This better matches the behavior of - the concrete classes, allows sensible handling of NaNs, and makes it - easier to reason about container invariants. - -- bpo-26711: Fixed the comparison of plistlib.Data with other types. - -- bpo-24114: Fix an uninitialized variable in ``ctypes.util``. The bug only - occurs on SunOS when the ctypes implementation searches for the ``crle`` - program. Patch by Xiang Zhang. Tested on SunOS by Kees Bos. - -- bpo-26864: In urllib.request, change the proxy bypass host checking - against no_proxy to be case-insensitive, and to not match unrelated host - names that happen to have a bypassed hostname as a suffix. Patch by Xiang - Zhang. - -- bpo-24902: Print server URL on http.server startup. Initial patch by - Felix Kaiser. - -- bpo-25788: fileinput.hook_encoded() now supports an "errors" argument for - passing to open. Original patch by Joseph Hackman. - -- bpo-26634: recursive_repr() now sets __qualname__ of wrapper. Patch by - Xiang Zhang. - -- bpo-26804: urllib.request will prefer lower_case proxy environment - variables over UPPER_CASE or Mixed_Case ones. Patch contributed by - Hans-Peter Jansen. - -- bpo-26837: assertSequenceEqual() now correctly outputs non-stringified - differing items (like bytes in the -b mode). This affects - assertListEqual() and assertTupleEqual(). - -- bpo-26041: Remove "will be removed in Python 3.7" from deprecation - messages of platform.dist() and platform.linux_distribution(). Patch by - Kumaripaba Miyurusara Athukorala. - -- bpo-26822: itemgetter, attrgetter and methodcaller objects no longer - silently ignore keyword arguments. - -- bpo-26733: Disassembling a class now disassembles class and static - methods. Patch by Xiang Zhang. - -- bpo-26801: Fix error handling in :func:`shutil.get_terminal_size`, catch - :exc:`AttributeError` instead of :exc:`NameError`. Patch written by - Emanuel Barry. - -- bpo-24838: tarfile's ustar and gnu formats now correctly calculate name - and link field limits for multibyte character encodings like utf-8. - -- bpo-26717: Stop encoding Latin-1-ized WSGI paths with UTF-8. Patch by - Anthony Sottile. - -- bpo-26782: Add STARTUPINFO to subprocess.__all__ on Windows. - -- bpo-26404: Add context manager to socketserver. Patch by Aviv Palivoda. - -- bpo-26735: Fix :func:`os.urandom` on Solaris 11.3 and newer when reading - more than 1,024 bytes: call ``getrandom()`` multiple times with a limit of - 1024 bytes per call. - -- bpo-26585: Eliminate http.server._quote_html() and use - html.escape(quote=False). Patch by Xiang Zhang. - -- bpo-26685: Raise OSError if closing a socket fails. - -- bpo-16329: Add .webm to mimetypes.types_map. Patch by Giampaolo Rodola'. - -- bpo-13952: Add .csv to mimetypes.types_map. Patch by Geoff Wilson. - -- bpo-26587: the site module now allows .pth files to specify files to be - added to sys.path (e.g. zip files). - -- bpo-25609: Introduce contextlib.AbstractContextManager and - typing.ContextManager. - -- bpo-26709: Fixed Y2038 problem in loading binary PLists. - -- bpo-23735: Handle terminal resizing with Readline 6.3+ by installing our - own SIGWINCH handler. Patch by Eric Price. - -- bpo-25951: Change SSLSocket.sendall() to return None, as explicitly - documented for plain socket objects. Patch by Aviv Palivoda. - -- bpo-26586: In http.server, respond with "413 Request header fields too - large" if there are too many header fields to parse, rather than killing - the connection and raising an unhandled exception. Patch by Xiang Zhang. - -- bpo-26676: Added missing XMLPullParser to ElementTree.__all__. - -- bpo-22854: Change BufferedReader.writable() and BufferedWriter.readable() - to always return False. - -- bpo-26492: Exhausted iterator of array.array now conforms with the - behavior of iterators of other mutable sequences: it lefts exhausted even - if iterated array is extended. - -- bpo-26641: doctest.DocFileTest and doctest.testfile() now support packages - (module split into multiple directories) for the package parameter. - -- bpo-25195: Fix a regression in mock.MagicMock. _Call is a subclass of - tuple (changeset 3603bae63c13 only works for classes) so we need to - implement __ne__ ourselves. Patch by Andrew Plummer. - -- bpo-26644: Raise ValueError rather than SystemError when a negative length - is passed to SSLSocket.recv() or read(). - -- bpo-23804: Fix SSL recv(0) and read(0) methods to return zero bytes - instead of up to 1024. - -- bpo-26616: Fixed a bug in datetime.astimezone() method. - -- bpo-26637: The :mod:`importlib` module now emits an :exc:`ImportError` - rather than a :exc:`TypeError` if :func:`__import__` is tried during the - Python shutdown process but :data:`sys.path` is already cleared (set to - ``None``). - -- bpo-21925: :func:`warnings.formatwarning` now catches exceptions when - calling :func:`linecache.getline` and - :func:`tracemalloc.get_object_traceback` to be able to log - :exc:`ResourceWarning` emitted late during the Python shutdown process. - -- bpo-23848: On Windows, faulthandler.enable() now also installs an - exception handler to dump the traceback of all Python threads on any - Windows exception, not only on UNIX signals (SIGSEGV, SIGFPE, SIGABRT). - -- bpo-26530: Add C functions :c:func:`!_PyTraceMalloc_Track` and - :c:func:`!_PyTraceMalloc_Untrack` to track memory blocks using the - :mod:`tracemalloc` module. Add :c:func:`!_PyTraceMalloc_GetTraceback` to - get the traceback of an object. - -- bpo-26588: The _tracemalloc now supports tracing memory allocations of - multiple address spaces (domains). - -- bpo-24266: Ctrl+C during Readline history search now cancels the search - mode when compiled with Readline 7. - -- bpo-26590: Implement a safe finalizer for the _socket.socket type. It now - releases the GIL to close the socket. - -- bpo-18787: spwd.getspnam() now raises a PermissionError if the user - doesn't have privileges. - -- bpo-26560: Avoid potential ValueError in BaseHandler.start_response. - Initial patch by Peter Inglesby. - -- bpo-26567: Add a new function :c:func:`PyErr_ResourceWarning` function to - pass the destroyed object. Add a *source* attribute to - :class:`warnings.WarningMessage`. Add warnings._showwarnmsg() which uses - tracemalloc to get the traceback where source object was allocated. - -- bpo-26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` - to support importing packages. - -- bpo-26499: Account for remaining Content-Length in HTTPResponse.readline() - and read1(). Based on patch by Silent Ghost. Also document that - HTTPResponse now supports these methods. - -- bpo-25320: Handle sockets in directories unittest discovery is scanning. - Patch from Victor van den Elzen. - -- bpo-16181: cookiejar.http2time() now returns None if year is higher than - datetime.MAXYEAR. - -- bpo-26513: Fixes platform module detection of Windows Server - -- bpo-23718: Fixed parsing time in week 0 before Jan 1. Original patch by - Tamás Bence Gedai. - -- bpo-26323: Add Mock.assert_called() and Mock.assert_called_once() methods - to unittest.mock. Patch written by Amit Saha. - -- bpo-20589: Invoking Path.owner() and Path.group() on Windows now raise - NotImplementedError instead of ImportError. - -- bpo-26177: Fixed the keys() method for Canvas and Scrollbar widgets. - -- bpo-15068: Got rid of excessive buffering in fileinput. The bufsize - parameter is now deprecated and ignored. - -- bpo-19475: Added an optional argument timespec to the datetime isoformat() - method to choose the precision of the time component. - -- bpo-2202: Fix UnboundLocalError in - AbstractDigestAuthHandler.get_algorithm_impls. Initial patch by Mathieu - Dupuy. - -- bpo-26167: Minimized overhead in copy.copy() and copy.deepcopy(). - Optimized copying and deepcopying bytearrays, NotImplemented, slices, - short lists, tuples, dicts, sets. - -- bpo-25718: Fixed pickling and copying the accumulate() iterator with total - is None. - -- bpo-26475: Fixed debugging output for regular expressions with the (?x) - flag. - -- bpo-26482: Allowed pickling recursive dequeues. - -- bpo-26335: Make mmap.write() return the number of bytes written like other - write methods. Patch by Jakub Stasiak. - -- bpo-26457: Fixed the subnets() methods in IP network classes for the case - when resulting prefix length is equal to maximal prefix length. Based on - patch by Xiang Zhang. - -- bpo-26385: Remove the file if the internal open() call in - NamedTemporaryFile() fails. Patch by Silent Ghost. - -- bpo-26402: Fix XML-RPC client to retry when the server shuts down a - persistent connection. This was a regression related to the new - http.client.RemoteDisconnected exception in 3.5.0a4. - -- bpo-25913: Leading ``<~`` is optional now in base64.a85decode() with - adobe=True. Patch by Swati Jaiswal. - -- bpo-26186: Remove an invalid type check in importlib.util.LazyLoader. - -- bpo-26367: importlib.__import__() raises ImportError like - builtins.__import__() when ``level`` is specified but without an - accompanying package specified. - -- bpo-26309: In the "socketserver" module, shut down the request (closing - the connected socket) when verify_request() returns false. Patch by Aviv - Palivoda. - -- bpo-23430: Change the socketserver module to only catch exceptions raised - from a request handler that are derived from Exception (instead of - BaseException). Therefore SystemExit and KeyboardInterrupt no longer - trigger the handle_error() method, and will now to stop a single-threaded - server. - -- bpo-25995: os.walk() no longer uses FDs proportional to the tree depth. - -- bpo-25994: Added the close() method and the support of the context manager - protocol for the os.scandir() iterator. - -- bpo-23992: multiprocessing: make MapResult not fail-fast upon exception. - -- bpo-26243: Support keyword arguments to zlib.compress(). Patch by Aviv - Palivoda. - -- bpo-26117: The os.scandir() iterator now closes file descriptor not only - when the iteration is finished, but when it was failed with error. - -- bpo-25949: __dict__ for an OrderedDict instance is now created only when - needed. - -- bpo-25911: Restored support of bytes paths in os.walk() on Windows. - -- bpo-26045: Add UTF-8 suggestion to error message when posting a - non-Latin-1 string with http.client. - -- bpo-26039: Added zipfile.ZipInfo.from_file() and zipinfo.ZipInfo.is_dir(). - Patch by Thomas Kluyver. - -- bpo-12923: Reset FancyURLopener's redirect counter even if there is an - exception. Based on patches by Brian Brazil and Daniel Rocco. - -- bpo-25945: Fixed a crash when unpickle the functools.partial object with - wrong state. Fixed a leak in failed functools.partial constructor. "args" - and "keywords" attributes of functools.partial have now always types tuple - and dict correspondingly. - -- bpo-26202: copy.deepcopy() now correctly copies range() objects with - non-atomic attributes. - -- bpo-23076: Path.glob() now raises a ValueError if it's called with an - invalid pattern. Patch by Thomas Nyberg. - -- bpo-19883: Fixed possible integer overflows in zipimport. - -- bpo-26227: On Windows, getnameinfo(), gethostbyaddr() and - gethostbyname_ex() functions of the socket module now decode the hostname - from the ANSI code page rather than UTF-8. - -- bpo-26099: The site module now writes an error into stderr if - sitecustomize module can be imported but executing the module raise an - ImportError. Same change for usercustomize. - -- bpo-26147: xmlrpc now works with strings not encodable with used non-UTF-8 - encoding. - -- bpo-25935: Garbage collector now breaks reference loops with OrderedDict. - -- bpo-16620: Fixed AttributeError in msilib.Directory.glob(). - -- bpo-26013: Added compatibility with broken protocol 2 pickles created in - old Python 3 versions (3.4.3 and lower). - -- bpo-26129: Deprecated accepting non-integers in grp.getgrgid(). - -- bpo-25850: Use cross-compilation by default for 64-bit Windows. - -- bpo-25822: Add docstrings to the fields of urllib.parse results. Patch - contributed by Swati Jaiswal. - -- bpo-22642: Convert trace module option parsing mechanism to argparse. - Patch contributed by SilentGhost. - -- bpo-24705: Fix sysconfig._parse_makefile not expanding ${} vars appearing - before $() vars. - -- bpo-26069: Remove the deprecated apis in the trace module. - -- bpo-22138: Fix mock.patch behavior when patching descriptors. Restore - original values after patching. Patch contributed by Sean McCully. - -- bpo-25672: In the ssl module, enable the SSL_MODE_RELEASE_BUFFERS mode - option if it is safe to do so. - -- bpo-26012: Don't traverse into symlinks for ``**`` pattern in - pathlib.Path.[r]glob(). - -- bpo-24120: Ignore PermissionError when traversing a tree with - pathlib.Path.[r]glob(). Patch by Ulrich Petri. - -- bpo-21815: Accept ] characters in the data portion of imap responses, in - order to handle the flags with square brackets accepted and produced by - servers such as gmail. - -- bpo-25447: fileinput now uses sys.stdin as-is if it does not have a buffer - attribute (restores backward compatibility). - -- bpo-25971: Optimized creating Fractions from floats by 2 times and from - Decimals by 3 times. - -- bpo-25802: Document as deprecated the remaining implementations of - importlib.abc.Loader.load_module(). - -- bpo-25928: Add Decimal.as_integer_ratio(). - -- bpo-25447: Copying the lru_cache() wrapper object now always works, - independently from the type of the wrapped object (by returning the - original object unchanged). - -- bpo-25768: Have the functions in compileall return booleans instead of - ints and add proper documentation and tests for the return values. - -- bpo-24103: Fixed possible use after free in ElementTree.XMLPullParser. - -- bpo-25860: os.fwalk() no longer skips remaining directories when error - occurs. Original patch by Samson Lee. - -- bpo-25914: Fixed and simplified OrderedDict.__sizeof__. - -- bpo-25869: Optimized deepcopying ElementTree; it is now 20 times faster. - -- bpo-25873: Optimized iterating ElementTree. Iterating elements - Element.iter() is now 40% faster, iterating text Element.itertext() is now - up to 2.5 times faster. - -- bpo-25902: Fixed various refcount issues in ElementTree iteration. - -- bpo-22227: The TarFile iterator is reimplemented using generator. This - implementation is simpler that using class. - -- bpo-25638: Optimized ElementTree.iterparse(); it is now 2x faster. - Optimized ElementTree parsing; it is now 10% faster. - -- bpo-25761: Improved detecting errors in broken pickle data. - -- bpo-25717: Restore the previous behaviour of tolerating most fstat() - errors when opening files. This was a regression in 3.5a1, and stopped - anonymous temporary files from working in special cases. - -- bpo-24903: Fix regression in number of arguments compileall accepts when - '-d' is specified. The check on the number of arguments has been dropped - completely as it never worked correctly anyway. - -- bpo-25764: In the subprocess module, preserve any exception caused by - fork() failure when preexec_fn is used. - -- bpo-25771: Tweak the exception message for importlib.util.resolve_name() - when 'package' isn't specified but necessary. - -- bpo-6478: _strptime's regexp cache now is reset after changing timezone - with time.tzset(). - -- bpo-14285: When executing a package with the "python -m package" option, - and package initialization fails, a proper traceback is now reported. The - "runpy" module now lets exceptions from package initialization pass back - to the caller, rather than raising ImportError. - -- bpo-19771: Also in runpy and the "-m" option, omit the irrelevant message - ". . . is a package and cannot be directly executed" if the package could - not even be initialized (e.g. due to a bad ``*.pyc`` file). - -- bpo-25177: Fixed problem with the mean of very small and very large - numbers. As a side effect, statistics.mean and statistics.variance should - be significantly faster. - -- bpo-25718: Fixed copying object with state with boolean value is false. - -- bpo-10131: Fixed deep copying of minidom documents. Based on patch by - Marian Ganisin. - -- bpo-7990: dir() on ElementTree.Element now lists properties: "tag", - "text", "tail" and "attrib". Original patch by Santoso Wijaya. - -- bpo-25725: Fixed a reference leak in pickle.loads() when unpickling - invalid data including tuple instructions. - -- bpo-25663: In the Readline completer, avoid listing duplicate global - names, and search the global namespace before searching builtins. - -- bpo-25688: Fixed file leak in ElementTree.iterparse() raising an error. - -- bpo-23914: Fixed SystemError raised by unpickler on broken pickle data. - -- bpo-25691: Fixed crash on deleting ElementTree.Element attributes. - -- bpo-25624: ZipFile now always writes a ZIP_STORED header for directory - entries. Patch by Dingyuan Wang. - -- bpo-25626: Change three zlib functions to accept sizes that fit in - Py_ssize_t, but internally cap those sizes to UINT_MAX. This resolves a - regression in 3.5 where GzipFile.read() failed to read chunks larger than - 2 or 4 GiB. The change affects the zlib.Decompress.decompress() - max_length parameter, the zlib.decompress() bufsize parameter, and the - zlib.Decompress.flush() length parameter. - -- bpo-25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True) - when the OS gives priority to errors such as EACCES over EEXIST. - -- bpo-25593: Change semantics of EventLoop.stop() in asyncio. - -- bpo-6973: When we know a subprocess.Popen process has died, do not allow - the send_signal(), terminate(), or kill() methods to do anything as they - could potentially signal a different process. - -- bpo-23883: Added missing APIs to __all__ to match the documented APIs for - the following modules: calendar, csv, enum, fileinput, ftplib, logging, - optparse, tarfile, threading and wave. Also added a - test.support.check__all__() helper. Patches by Jacek Kołodziej, Mauro S. - M. Rodrigues and Joel Taddei. - -- bpo-25590: In the Readline completer, only call getattr() once per - attribute. Also complete names of attributes such as properties and slots - which are listed by dir() but not yet created on an instance. - -- bpo-25498: Fix a crash when garbage-collecting ctypes objects created by - wrapping a memoryview. This was a regression made in 3.5a1. Based on - patch by Eryksun. - -- bpo-25584: Added "escape" to the __all__ list in the glob module. - -- bpo-25584: Fixed recursive glob() with patterns starting with ``**``. - -- bpo-25446: Fix regression in smtplib's AUTH LOGIN support. - -- bpo-18010: Fix the pydoc web server's module search function to handle - exceptions from importing packages. - -- bpo-25554: Got rid of circular references in regular expression parsing. - -- bpo-18973: Command-line interface of the calendar module now uses argparse - instead of optparse. - -- bpo-25510: fileinput.FileInput.readline() now returns b'' instead of '' at - the end if the FileInput was opened with binary mode. Patch by Ryosuke - Ito. - -- bpo-25503: Fixed inspect.getdoc() for inherited docstrings of properties. - Original patch by John Mark Vandenberg. - -- bpo-25515: Always use os.urandom as a source of randomness in uuid.uuid4. - -- bpo-21827: Fixed textwrap.dedent() for the case when largest common - whitespace is a substring of smallest leading whitespace. Based on patch - by Robert Li. - -- bpo-25447: The lru_cache() wrapper objects now can be copied and pickled - (by returning the original object unchanged). - -- bpo-25390: typing: Don't crash on Union[str, Pattern]. - -- bpo-25441: asyncio: Raise error from drain() when socket is closed. - -- bpo-25410: Cleaned up and fixed minor bugs in C implementation of - OrderedDict. - -- bpo-25411: Improved Unicode support in SMTPHandler through better use of - the email package. Thanks to user simon04 for the patch. - -- Move the imp module from a PendingDeprecationWarning to - DeprecationWarning. - -- bpo-25407: Remove mentions of the formatter module being removed in Python - 3.6. - -- bpo-25406: Fixed a bug in C implementation of OrderedDict.move_to_end() - that caused segmentation fault or hang in iterating after moving several - items to the start of ordered dict. - -- bpo-25382: pickletools.dis() now outputs implicit memo index for the - MEMOIZE opcode. - -- bpo-25357: Add an optional newline parameter to binascii.b2a_base64(). - base64.b64encode() uses it to avoid a memory copy. - -- bpo-24164: Objects that need calling ``__new__`` with keyword arguments, - can now be pickled using pickle protocols older than protocol version 4. - -- bpo-25364: zipfile now works in threads disabled builds. - -- bpo-25328: smtpd's SMTPChannel now correctly raises a ValueError if both - decode_data and enable_SMTPUTF8 are set to true. - -- bpo-16099: RobotFileParser now supports Crawl-delay and Request-rate - extensions. Patch by Nikolay Bogoychev. - -- bpo-25316: distutils raises OSError instead of DistutilsPlatformError when - MSVC is not installed. - -- bpo-25380: Fixed protocol for the STACK_GLOBAL opcode in - pickletools.opcodes. - -- bpo-23972: Updates asyncio datagram create method allowing reuseport and - reuseaddr socket options to be set prior to binding the socket. Mirroring - the existing asyncio create_server method the reuseaddr option for - datagram sockets defaults to True if the O/S is 'posix' (except if the - platform is Cygwin). Patch by Chris Laws. - -- bpo-25304: Add asyncio.run_coroutine_threadsafe(). This lets you submit a - coroutine to a loop from another thread, returning a - concurrent.futures.Future. By Vincent Michel. - -- bpo-25232: Fix CGIRequestHandler to split the query from the URL at the - first question mark (?) rather than the last. Patch from Xiang Zhang. - -- bpo-24657: Prevent CGIRequestHandler from collapsing slashes in the query - part of the URL as if it were a path. Patch from Xiang Zhang. - -- bpo-25287: Don't add crypt.METHOD_CRYPT to crypt.methods if it's not - supported. Check if it is supported, it may not be supported on OpenBSD - for example. - -- bpo-23600: Default implementation of tzinfo.fromutc() was returning wrong - results in some cases. - -- bpo-25203: Failed readline.set_completer_delims() no longer left the - module in inconsistent state. - -- bpo-25011: rlcompleter now omits private and special attribute names - unless the prefix starts with underscores. - -- bpo-25209: rlcompleter now can add a space or a colon after completed - keyword. - -- bpo-22241: timezone.utc name is now plain 'UTC', not 'UTC-00:00'. - -- bpo-23517: fromtimestamp() and utcfromtimestamp() methods of - datetime.datetime now round microseconds to nearest with ties going to - nearest even integer (ROUND_HALF_EVEN), as round(float), instead of - rounding towards -Infinity (ROUND_FLOOR). - -- bpo-23552: Timeit now warns when there is substantial (4x) variance - between best and worst times. Patch from Serhiy Storchaka. - -- bpo-24633: site-packages/README -> README.txt. - -- bpo-24879: help() and pydoc can now list named tuple fields in the order - they were defined rather than alphabetically. The ordering is determined - by the _fields attribute if present. - -- bpo-24874: Improve speed of itertools.cycle() and make its pickle more - compact. - -- Fix crash in itertools.cycle.__setstate__() when the first argument wasn't - a list. - -- bpo-20059: urllib.parse raises ValueError on all invalid ports. Patch by - Martin Panter. - -- bpo-24360: Improve __repr__ of argparse.Namespace() for invalid - identifiers. Patch by Matthias Bussonnier. - -- bpo-23426: run_setup was broken in distutils. Patch from Alexander - Belopolsky. - -- bpo-13938: 2to3 converts StringTypes to a tuple. Patch from Mark Hammond. - -- bpo-2091: open() accepted a 'U' mode string containing '+', but 'U' can - only be used with 'r'. Patch from Jeff Balogh and John O'Connor. - -- bpo-8585: improved tests for zipimporter2. Patch from Mark Lawrence. - -- bpo-18622: unittest.mock.mock_open().reset_mock would recurse infinitely. - Patch from Nicola Palumbo and Laurent De Buyst. - -- bpo-24426: Fast searching optimization in regular expressions now works - for patterns that starts with capturing groups. Fast searching - optimization now can't be disabled at compile time. - -- bpo-23661: unittest.mock side_effects can now be exceptions again. This - was a regression vs Python 3.4. Patch from Ignacio Rossi - -- bpo-13248: Remove deprecated inspect.getmoduleinfo function. - -- bpo-25578: Fix (another) memory leak in SSLSocket.getpeercer(). - -- bpo-25530: Disable the vulnerable SSLv3 protocol by default when creating - ssl.SSLContext. - -- bpo-25569: Fix memory leak in SSLSocket.getpeercert(). - -- bpo-25471: Sockets returned from accept() shouldn't appear to be - nonblocking. - -- bpo-25319: When threading.Event is reinitialized, the underlying condition - should use a regular lock rather than a recursive lock. - -- Skip getaddrinfo if host is already resolved. Patch by A. Jesse Jiryu - Davis. - -- bpo-26050: Add asyncio.StreamReader.readuntil() method. Patch by Марк - Коренберг. - -- bpo-25924: Avoid unnecessary serialization of getaddrinfo(3) calls on OS X - versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis. - -- bpo-26406: Avoid unnecessary serialization of getaddrinfo(3) calls on - current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis. - -- bpo-26848: Fix asyncio/subprocess.communicate() to handle empty input. - Patch by Jack O'Connor. - -- bpo-27040: Add loop.get_exception_handler method - -- bpo-27041: asyncio: Add loop.create_future method - -IDLE ----- - -- bpo-20640: Add tests for idlelib.configHelpSourceEdit. Patch by Saimadhav - Heblikar. - -- In the 'IDLE-console differences' section of the IDLE doc, clarify how - running with IDLE affects sys.modules and the standard streams. - -- bpo-25507: fix incorrect change in IOBinding that prevented printing. - Augment IOBinding htest to include all major IOBinding functions. - -- bpo-25905: Revert unwanted conversion of ' to ’ RIGHT SINGLE QUOTATION - MARK in README.txt and open this and NEWS.txt with 'ascii'. Re-encode - CREDITS.txt to utf-8 and open it with 'utf-8'. - -- bpo-15348: Stop the debugger engine (normally in a user process) before - closing the debugger window (running in the IDLE process). This prevents - the RuntimeErrors that were being caught and ignored. - -- bpo-24455: Prevent IDLE from hanging when a) closing the shell while the - debugger is active (15347); b) closing the debugger with the [X] button - (15348); and c) activating the debugger when already active (24455). The - patch by Mark Roseman does this by making two changes. 1. Suspend and - resume the gui.interaction method with the tcl vwait mechanism intended - for this purpose (instead of root.mainloop & .quit). 2. In gui.run, allow - any existing interaction to terminate first. - -- Change 'The program' to 'Your program' in an IDLE 'kill program?' message - to make it clearer that the program referred to is the currently running - user program, not IDLE itself. - -- bpo-24750: Improve the appearance of the IDLE editor window status bar. - Patch by Mark Roseman. - -- bpo-25313: Change the handling of new built-in text color themes to better - address the compatibility problem introduced by the addition of IDLE Dark. - Consistently use the revised idleConf.CurrentTheme everywhere in idlelib. - -- bpo-24782: Extension configuration is now a tab in the IDLE Preferences - dialog rather than a separate dialog. The former tabs are now a sorted - list. Patch by Mark Roseman. - -- bpo-22726: Re-activate the config dialog help button with some content - about the other buttons and the new IDLE Dark theme. - -- bpo-24820: IDLE now has an 'IDLE Dark' built-in text color theme. It is - more or less IDLE Classic inverted, with a cobalt blue background. - Strings, comments, keywords, ... are still green, red, orange, ... . To - use it with IDLEs released before November 2015, hit the 'Save as New - Custom Theme' button and enter a new name, such as 'Custom Dark'. The - custom theme will work with any IDLE release, and can be modified. - -- bpo-25224: README.txt is now an idlelib index for IDLE developers and - curious users. The previous user content is now in the IDLE doc chapter. - 'IDLE' now means 'Integrated Development and Learning Environment'. - -- bpo-24820: Users can now set breakpoint colors in Settings -> Custom - Highlighting. Original patch by Mark Roseman. - -- bpo-24972: Inactive selection background now matches active selection - background, as configured by users, on all systems. Found items are now - always highlighted on Windows. Initial patch by Mark Roseman. - -- bpo-24570: Idle: make calltip and completion boxes appear on Macs affected - by a tk regression. Initial patch by Mark Roseman. - -- bpo-24988: Idle ScrolledList context menus (used in debugger) now work on - Mac Aqua. Patch by Mark Roseman. - -- bpo-24801: Make right-click for context menu work on Mac Aqua. Patch by - Mark Roseman. - -- bpo-25173: Associate tkinter messageboxes with a specific widget. For Mac - OSX, make them a 'sheet'. Patch by Mark Roseman. - -- bpo-25198: Enhance the initial html viewer now used for Idle Help. - Properly indent fixed-pitch text (patch by Mark Roseman). Give code - snippet a very Sphinx-like light blueish-gray background. Re-use initial - width and height set by users for shell and editor. When the Table of - Contents (TOC) menu is used, put the section header at the top of the - screen. - -- bpo-25225: Condense and rewrite Idle doc section on text colors. - -- bpo-21995: Explain some differences between IDLE and console Python. - -- bpo-22820: Explain need for *print* when running file from Idle editor. - -- bpo-25224: Doc: augment Idle feature list and no-subprocess section. - -- bpo-25219: Update doc for Idle command line options. Some were missing and - notes were not correct. - -- bpo-24861: Most of idlelib is private and subject to change. Use - idleib.idle.* to start Idle. See idlelib.__init__.__doc__. - -- bpo-25199: Idle: add synchronization comments for future maintainers. - -- bpo-16893: Replace help.txt with help.html for Idle doc display. The new - idlelib/help.html is rstripped Doc/build/html/library/idle.html. It looks - better than help.txt and will better document Idle as released. The - tkinter html viewer that works for this file was written by Rose Roseman. - The now unused EditorWindow.HelpDialog class and helt.txt file are - deprecated. - -- bpo-24199: Deprecate unused idlelib.idlever with possible removal in 3.6. - -- bpo-24790: Remove extraneous code (which also create 2 & 3 conflicts). - -Documentation -------------- - -- bpo-26736: Used HTTPS for external links in the documentation if possible. - -- bpo-6953: Rework the Readline module documentation to group related - functions together, and add more details such as what underlying Readline - functions and variables are accessed. - -- bpo-23606: Adds note to ctypes documentation regarding cdll.msvcrt. - -- bpo-24952: Clarify the default size argument of stack_size() in the - "threading" and "_thread" modules. Patch from Mattip. - -- bpo-26014: Update 3.x packaging documentation: * "See also" links to the - new docs are now provided in the legacy pages * links to setuptools - documentation have been updated - -Tests ------ - -- bpo-21916: Added tests for the turtle module. Patch by ingrid, Gregory - Loyse and Jelle Zijlstra. - -- bpo-26295: When using "python3 -m test --testdir=TESTDIR", regrtest - doesn't add "test." prefix to test module names. - -- bpo-26523: The multiprocessing thread pool (multiprocessing.dummy.Pool) - was untested. - -- bpo-26015: Added new tests for pickling iterators of mutable sequences. - -- bpo-26325: Added test.support.check_no_resource_warning() to check that no - ResourceWarning is emitted. - -- bpo-25940: Changed test_ssl to use its internal local server more. This - avoids relying on svn.python.org, which recently changed root certificate. - -- bpo-25616: Tests for OrderedDict are extracted from test_collections into - separate file test_ordered_dict. - -- bpo-25449: Added tests for OrderedDict subclasses. - -- bpo-25188: Add -P/--pgo to test.regrtest to suppress error output when - running the test suite for the purposes of a PGO build. Initial patch by - Alecsandru Patrascu. - -- bpo-22806: Add ``python -m test --list-tests`` command to list tests. - -- bpo-18174: ``python -m test --huntrleaks ...`` now also checks for leak of - file descriptors. Patch written by Richard Oudkerk. - -- bpo-25260: Fix ``python -m test --coverage`` on Windows. Remove the list - of ignored directories. - -- ``PCbuild\rt.bat`` now accepts an unlimited number of arguments to pass - along to regrtest.py. Previously there was a limit of 9. - -- bpo-26583: Skip test_timestamp_overflow in test_import if bytecode files - cannot be written. - -Build ------ - -- bpo-21277: Don't try to link _ctypes with a ffi_convenience library. - -- bpo-26884: Fix linking extension modules for cross builds. Patch by Xavier - de Gaye. - -- bpo-26932: Fixed support of RTLD_* constants defined as enum values, not - via macros (in particular on Android). Patch by Chi Hsuan Yen. - -- bpo-22359: Disable the rules for running _freeze_importlib and pgen when - cross-compiling. The output of these programs is normally saved with the - source code anyway, and is still regenerated when doing a native build. - Patch by Xavier de Gaye. - -- bpo-21668: Link audioop, _datetime, _ctypes_test modules to libm, except - on Mac OS X. Patch written by Chi Hsuan Yen. - -- bpo-25702: A --with-lto configure option has been added that will enable - link time optimizations at build time during a make profile-opt. Some - compilers and toolchains are known to not produce stable code when using - LTO, be sure to test things thoroughly before relying on it. It can - provide a few % speed up over profile-opt alone. - -- bpo-26624: Adds validation of ucrtbase[d].dll version with warning for old - versions. - -- bpo-17603: Avoid error about nonexistent fileblocks.o file by using a - lower-level check for st_blocks in struct stat. - -- bpo-26079: Fixing the build output folder for tix-8.4.3.6. Patch by Bjoern - Thiel. - -- bpo-26465: Update Windows builds to use OpenSSL 1.0.2g. - -- bpo-25348: Added ``--pgo`` and ``--pgo-job`` arguments to - ``PCbuild\build.bat`` for building with Profile-Guided Optimization. The - old ``PCbuild\build_pgo.bat`` script is removed. - -- bpo-25827: Add support for building with ICC to ``configure``, including a - new ``--with-icc`` flag. - -- bpo-25696: Fix installation of Python on UNIX with make -j9. - -- bpo-24986: It is now possible to build Python on Windows without errors - when external libraries are not available. - -- bpo-24421: Compile Modules/_math.c once, before building extensions. - Previously it could fail to compile properly if the math and cmath builds - were concurrent. - -- bpo-26465: Update OS X 10.5+ 32-bit-only installer to build and link with - OpenSSL 1.0.2g. - -- bpo-26268: Update Windows builds to use OpenSSL 1.0.2f. - -- bpo-25136: Support Apple Xcode 7's new textual SDK stub libraries. - -- bpo-24324: Do not enable unreachable code warnings when using gcc as the - option does not work correctly in older versions of gcc and has been - silently removed as of gcc-4.5. - -Windows -------- - -- bpo-27053: Updates make_zip.py to correctly generate library ZIP file. - -- bpo-26268: Update the prepare_ssl.py script to handle OpenSSL releases - that don't include the contents of the include directory (that is, 1.0.2e - and later). - -- bpo-26071: bdist_wininst created binaries fail to start and find 32bit - Python - -- bpo-26073: Update the list of magic numbers in launcher - -- bpo-26065: Excludes venv from library when generating embeddable distro. - -- bpo-25022: Removed very outdated PC/example_nt/ directory. - -Tools/Demos ------------ - -- bpo-26799: Fix python-gdb.py: don't get C types once when the Python code - is loaded, but get C types on demand. The C types can change if - python-gdb.py is loaded before the Python executable. Patch written by - Thomas Ilsche. - -- bpo-26271: Fix the Freeze tool to properly use flags passed through - configure. Patch by Daniel Shaulov. - -- bpo-26489: Add dictionary unpacking support to Tools/parser/unparse.py. - Patch by Guo Ci Teo. - -- bpo-26316: Fix variable name typo in Argument Clinic. - -- bpo-25440: Fix output of python-config --extension-suffix. - -- bpo-25154: The pyvenv script has been deprecated in favour of ``python3 -m - venv``. - -C API ------ - -- bpo-26312: SystemError is now raised in all programming bugs with using - PyArg_ParseTupleAndKeywords(). RuntimeError did raised before in some - programming bugs. - -- bpo-26198: ValueError is now raised instead of TypeError on buffer - overflow in parsing "es#" and "et#" format units. SystemError is now - raised instead of TypeError on programmatical error in parsing format - string. - - -What's New in Python 3.5.5 final? -================================= - -*Release date: 2018-02-04* - -There were no new changes in version 3.5.5. - - - -What's New in Python 3.5.5 release candidate 1? -=============================================== - -*Release date: 2018-01-23* - -Security --------- - -- bpo-32551: The ``sys.path[0]`` initialization change for bpo-29139 caused - a regression by revealing an inconsistency in how sys.path is initialized - when executing ``__main__`` from a zipfile, directory, or other import - location. This is considered a potential security issue, as it may lead to - privileged processes unexpectedly loading code from user controlled - directories in situations where that was not previously the case. The - interpreter now consistently avoids ever adding the import location's - parent directory to ``sys.path``, and ensures no other ``sys.path`` - entries are inadvertently modified when inserting the import location - named on the command line. (Originally reported as bpo-29723 against - Python 3.6rc1, but it was missed at the time that the then upcoming Python - 3.5.4 release would also be affected) - -- bpo-30657: Fixed possible integer overflow in PyBytes_DecodeEscape, - :cve:`2017-1000158`. Original patch by Jay Bosamiya; rebased to Python 3 - by Miro Hrončok. - -- bpo-30947: Upgrade libexpat embedded copy from version 2.2.1 to 2.2.3 to - get security fixes. - -Core and Builtins ------------------ - -- bpo-31095: Fix potential crash during GC caused by ``tp_dealloc`` which - doesn't call ``PyObject_GC_UnTrack()``. - -Library -------- - -- bpo-32072: Fixed issues with binary plists: Fixed saving bytearrays. - Identical objects will be saved only once. Equal references will be load - as identical objects. Added support for saving and loading recursive data - structures. - -- bpo-31170: expat: Update libexpat from 2.2.3 to 2.2.4. Fix copying of - partial characters for UTF-8 input (libexpat bug 115): - https://github.com/libexpat/libexpat/issues/115 - - -What's New in Python 3.5.4 final? -================================= - -*Release date: 2017-08-07* - -Library -------- - -- bpo-30119: ftplib.FTP.putline() now throws ValueError on commands that - contains CR or LF. Patch by Donghee Na. - - -What's New in Python 3.5.4 release candidate 1? -=============================================== - -*Release date: 2017-07-23* - -Security --------- - -- bpo-30730: Prevent environment variables injection in subprocess on - Windows. Prevent passing other environment variables and command - arguments. - -- bpo-30694: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of multiple - security vulnerabilities including: :cve:`2017-9233` (External entity - infinite loop DoS), :cve:`2016-9063` (Integer overflow, re-fix), - :cve:`2016-0718` (Fix regression bugs from 2.2.0's fix to - :cve:`2016-0718`) and :cve:`2012-0876` (Counter hash flooding with - SipHash). Note: the :cve:`2016-5300` (Use os-specific entropy sources like - getrandom) doesn't impact Python, since Python already gets entropy from - the OS to set the expat secret using ``XML_SetHashSalt()``. - -- bpo-30500: Fix urllib.parse.splithost() to correctly parse fragments. For - example, ``splithost('//127.0.0.1#@evil.com/')`` now correctly returns the - ``127.0.0.1`` host, instead of treating ``@evil.com`` as the host in an - authentication (``login@host``). - -- bpo-29591: Update expat copy from 2.1.1 to 2.2.0 to get fixes of - :cve:`2016-0718` and :cve:`2016-4472`. See - https://sourceforge.net/p/expat/bugs/537/ for more information. - -Core and Builtins ------------------ - -- bpo-30876: Relative import from unloaded package now reimports the package - instead of failing with SystemError. Relative import from non-package now - fails with ImportError rather than SystemError. - -- bpo-30765: Avoid blocking in pthread_mutex_lock() when - PyThread_acquire_lock() is asked not to block. - -- bpo-27945: Fixed various segfaults with dict when input collections are - mutated during searching, inserting or comparing. Based on patches by - Duane Griffin and Tim Mitchell. - -- bpo-25794: Fixed type.__setattr__() and type.__delattr__() for - non-interned attribute names. Based on patch by Eryk Sun. - -- bpo-29935: Fixed error messages in the index() method of tuple, list and - deque when pass indices of wrong type. - -- bpo-28876: ``bool(range)`` works even if ``len(range)`` raises - :exc:`OverflowError`. - -- bpo-29600: Fix wrapping coroutine return values in StopIteration. - -- bpo-29537: Restore runtime compatibility with bytecode files generated by - CPython 3.5.0 to 3.5.2, and adjust the eval loop to avoid the problems - that could be caused by the malformed variant of the - BUILD_MAP_UNPACK_WITH_CALL opcode that they may contain. Patch by Petr - Viktorin, Serhiy Storchaka, and Nick Coghlan. - -- bpo-28598: Support __rmod__ for subclasses of str being called before - str.__mod__. Patch by Martijn Pieters. - -- bpo-29602: Fix incorrect handling of signed zeros in complex constructor - for complex subclasses and for inputs having a __complex__ method. Patch - by Serhiy Storchaka. - -- bpo-29347: Fixed possibly dereferencing undefined pointers when creating - weakref objects. - -- bpo-29438: Fixed use-after-free problem in key sharing dict. - -- bpo-29319: Prevent RunMainFromImporter overwriting sys.path[0]. - -- bpo-29337: Fixed possible BytesWarning when compare the code objects. - Warnings could be emitted at compile time. - -- bpo-29478: If max_line_length=None is specified while using the Compat32 - policy, it is no longer ignored. Patch by Mircea Cosbuc. - -Library -------- - -- bpo-29403: Fix ``unittest.mock``'s autospec to not fail on method-bound - builtin functions. Patch by Aaron Gallagher. - -- bpo-30961: Fix decrementing a borrowed reference in tracemalloc. - -- bpo-30886: Fix multiprocessing.Queue.join_thread(): it now waits until the - thread completes, even if the thread was started by the same process which - created the queue. - -- bpo-29854: Fix segfault in readline when using readline's history-size - option. Patch by Nir Soffer. - -- bpo-30807: signal.setitimer() may disable the timer when passed a tiny - value. Tiny values (such as 1e-6) are valid non-zero values for - setitimer(), which is specified as taking microsecond-resolution - intervals. However, on some platform, our conversion routine could convert - 1e-6 into a zero interval, therefore disabling the timer instead of - (re-)scheduling it. - -- bpo-30441: Fix bug when modifying os.environ while iterating over it - -- bpo-30532: Fix email header value parser dropping folding white space in - certain cases. - -- bpo-29169: Update zlib to 1.2.11. - -- bpo-30879: os.listdir() and os.scandir() now emit bytes names when called - with bytes-like argument. - -- bpo-30746: Prohibited the '=' character in environment variable names in - ``os.putenv()`` and ``os.spawn*()``. - -- bpo-29755: Fixed the lgettext() family of functions in the gettext module. - They now always return bytes. - -- bpo-30645: Fix path calculation in imp.load_package(), fixing it for cases - when a package is only shipped with bytecodes. Patch by Alexandru - Ardelean. - -- bpo-23890: unittest.TestCase.assertRaises() now manually breaks a - reference cycle to not keep objects alive longer than expected. - -- bpo-30149: inspect.signature() now supports callables with - variable-argument parameters wrapped with partialmethod. Patch by Donghee - Na. - -- bpo-29931: Fixed comparison check for ipaddress.ip_interface objects. - Patch by Sanjay Sundaresan. - -- bpo-24484: Avoid race condition in multiprocessing cleanup. - -- bpo-28994: The traceback no longer displayed for SystemExit raised in a - callback registered by atexit. - -- bpo-30508: Don't log exceptions if Task/Future "cancel()" method was - called. - -- bpo-28556: Updates to typing module: Add generic AsyncContextManager, add - support for ContextManager on all versions. Original PRs by Jelle Zijlstra - and Ivan Levkivskyi - -- bpo-29870: Fix ssl sockets leaks when connection is aborted in asyncio/ssl - implementation. Patch by Michaël Sghaïer. - -- bpo-29743: Closing transport during handshake process leaks open socket. - Patch by Nikolay Kim - -- bpo-27585: Fix waiter cancellation in asyncio.Lock. Patch by Mathieu - Sornay. - -- bpo-30418: On Windows, subprocess.Popen.communicate() now also ignore - EINVAL on stdin.write() if the child process is still running but closed - the pipe. - -- bpo-30378: Fix the problem that logging.handlers.SysLogHandler cannot - handle IPv6 addresses. - -- bpo-29960: Preserve generator state when _random.Random.setstate() raises - an exception. Patch by Bryan Olson. - -- bpo-30414: multiprocessing.Queue._feed background running thread do not - break from main loop on exception. - -- bpo-30003: Fix handling escape characters in HZ codec. Based on patch by - Ma Lin. - -- bpo-30301: Fix AttributeError when using SimpleQueue.empty() under *spawn* - and *forkserver* start methods. - -- bpo-30329: imaplib and poplib now catch the Windows socket WSAEINVAL error - (code 10022) on shutdown(SHUT_RDWR): An invalid operation was attempted. - This error occurs sometimes on SSL connections. - -- bpo-30375: Warnings emitted when compile a regular expression now always - point to the line in the user code. Previously they could point into - inners of the re module if emitted from inside of groups or conditionals. - -- bpo-30048: Fixed ``Task.cancel()`` can be ignored when the task is running - coroutine and the coroutine returned without any more ``await``. - -- bpo-29990: Fix range checking in GB18030 decoder. Original patch by Ma - Lin. - -- bpo-26293: Change resulted because of zipfile breakage. (See also: - bpo-29094) - -- bpo-30243: Removed the __init__ methods of _json's scanner and encoder. - Misusing them could cause memory leaks or crashes. Now scanner and - encoder objects are completely initialized in the __new__ methods. - -- bpo-30185: Avoid KeyboardInterrupt tracebacks in forkserver helper process - when Ctrl-C is received. - -- bpo-28556: Various updates to typing module: add typing.NoReturn type, use - WrapperDescriptorType, minor bug-fixes. Original PRs by Jim - Fasarakis-Hilliard and Ivan Levkivskyi. - -- bpo-30205: Fix getsockname() for unbound AF_UNIX sockets on Linux. - -- bpo-30070: Fixed leaks and crashes in errors handling in the parser - module. - -- bpo-30061: Fixed crashes in IOBase methods __next__() and readlines() when - readline() or __next__() respectively return non-sizeable object. Fixed - possible other errors caused by not checking results of PyObject_Size(), - PySequence_Size(), or PyMapping_Size(). - -- bpo-30068: _io._IOBase.readlines will check if it's closed first when hint - is present. - -- bpo-29694: Fixed race condition in pathlib mkdir with flags parents=True. - Patch by Armin Rigo. - -- bpo-29692: Fixed arbitrary unchaining of RuntimeError exceptions in - contextlib.contextmanager. Patch by Siddharth Velankar. - -- bpo-29998: Pickling and copying ImportError now preserves name and path - attributes. - -- bpo-29942: Fix a crash in itertools.chain.from_iterable when encountering - long runs of empty iterables. - -- bpo-27863: Fixed multiple crashes in ElementTree caused by race conditions - and wrong types. - -- bpo-28699: Fixed a bug in pools in multiprocessing.pool that raising an - exception at the very first of an iterable may swallow the exception or - make the program hang. Patch by Davin Potts and Xiang Zhang. - -- bpo-25803: Avoid incorrect errors raised by Path.mkdir(exist_ok=True) when - the OS gives priority to errors such as EACCES over EEXIST. - -- bpo-29861: Release references to tasks, their arguments and their results - as soon as they are finished in multiprocessing.Pool. - -- bpo-29884: faulthandler: Restore the old sigaltstack during teardown. - Patch by Christophe Zeitouny. - -- bpo-25455: Fixed crashes in repr of recursive buffered file-like objects. - -- bpo-29800: Fix crashes in partial.__repr__ if the keys of partial.keywords - are not strings. Patch by Michael Seifert. - -- bpo-29742: get_extra_info() raises exception if get called on closed ssl - transport. Patch by Nikolay Kim. - -- bpo-8256: Fixed possible failing or crashing input() if attributes - "encoding" or "errors" of sys.stdin or sys.stdout are not set or are not - strings. - -- bpo-28298: Fix a bug that prevented array 'Q', 'L' and 'I' from accepting - big intables (objects that have __int__) as elements. Patch by Oren - Milman. - -- bpo-29615: SimpleXMLRPCDispatcher no longer chains KeyError (or any other - exception) to exception(s) raised in the dispatched methods. Patch by Petr - Motejlek. - -- bpo-29704: asyncio.subprocess.SubprocessStreamProtocol no longer closes - before all pipes are closed. - -- bpo-29703: Fix asyncio to support instantiation of new event loops in - child processes. - -- bpo-29376: Fix assertion error in threading._DummyThread.is_alive(). - -- bpo-29110: Fix file object leak in aifc.open() when file is given as a - filesystem path and is not in valid AIFF format. Patch by Anthony Zhang. - -- bpo-28961: Fix unittest.mock._Call helper: don't ignore the name parameter - anymore. Patch written by Jiajun Huang. - -- bpo-29532: Altering a kwarg dictionary passed to functools.partial() no - longer affects a partial object after creation. - -- bpo-28556: Various updates to typing module: typing.Counter, - typing.ChainMap, improved ABC caching, etc. Original PRs by Jelle - Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa. - -- bpo-29100: Fix datetime.fromtimestamp() regression introduced in Python - 3.6.0: check minimum and maximum years. - -- bpo-29519: Fix weakref spewing exceptions during interpreter shutdown when - used with a rare combination of multiprocessing and custom codecs. - -- bpo-29416: Prevent infinite loop in pathlib.Path.mkdir - -- bpo-29444: Fixed out-of-bounds buffer access in the group() method of the - match object. Based on patch by WGH. - -- bpo-29335: Fix subprocess.Popen.wait() when the child process has exited - to a stopped instead of terminated state (ex: when under ptrace). - -- bpo-29290: Fix a regression in argparse that help messages would wrap at - non-breaking spaces. - -- bpo-28735: Fixed the comparison of mock.MagickMock with mock.ANY. - -- bpo-29011: Fix an important omission by adding Deque to the typing module. - -- bpo-29219: Fixed infinite recursion in the repr of uninitialized - ctypes.CDLL instances. - -- bpo-28969: Fixed race condition in C implementation of - functools.lru_cache. KeyError could be raised when cached function with - full cache was simultaneously called from different threads with the same - uncached arguments. - -- bpo-29142: In urllib.request, suffixes in no_proxy environment variable - with leading dots could match related hostnames again (e.g. .b.c matches - a.b.c). Patch by Milan Oberkirch. - -Documentation -------------- - -- bpo-30176: Add missing attribute related constants in curses - documentation. - -- bpo-26985: Add missing info of code object in inspect documentation. - -- bpo-28929: Link the documentation to its source file on GitHub. - -- bpo-25008: Document smtpd.py as effectively deprecated and add a pointer - to aiosmtpd, a third-party asyncio-based replacement. - -- bpo-26355: Add canonical header link on each page to corresponding major - version of the documentation. Patch by Matthias Bussonnier. - -- bpo-29349: Fix Python 2 syntax in code for building the documentation. - -Tests ------ - -- bpo-30822: Fix regrtest command line parser to allow passing -u - extralargefile to run test_zipfile64. - -- bpo-30383: regrtest: Enhance regrtest and backport features from the - master branch. Add options: --coverage, --testdir, --list-tests (list test - files, don't run them), --list-cases (list test identifiers, don't run - them, :issue:`30523`), --matchfile (load a list of test filters from a - text file, :issue:`30540`), --slowest (alias to --slow). Enhance output: - add timestamp, test result, currently running tests, "Tests result: xxx" - summary with total duration, etc. Fix reference leak hunting in regrtest, - --huntrleaks: regrtest now warms up caches, create explicitly all internal - singletons which are created on demand to prevent false positives when - checking for reference leaks. (:issue:`30675`). - -- bpo-30357: test_thread: setUp() now uses support.threading_setup() and - support.threading_cleanup() to wait until threads complete to avoid random - side effects on following tests. Initial patch written by Grzegorz - Grzywacz. - -- bpo-28087: Skip test_asyncore and test_eintr poll failures on macOS. Skip - some tests of select.poll when running on macOS due to unresolved issues - with the underlying system poll function on some macOS versions. - -- bpo-30197: Enhanced functions swap_attr() and swap_item() in the - test.support module. They now work when delete replaced attribute or item - inside the with statement. The old value of the attribute or item (or - None if it doesn't exist) now will be assigned to the target of the "as" - clause, if there is one. - -- bpo-29571: to match the behaviour of the ``re.LOCALE`` flag, - test_re.test_locale_flag now uses ``locale.getpreferredencoding(False)`` - to determine the candidate encoding for the test regex (allowing it to - correctly skip the test when the default locale encoding is a multi-byte - encoding) - -Build ------ - -- bpo-29243: Prevent unnecessary rebuilding of Python during ``make test``, - ``make install`` and some other make targets when configured with - ``--enable-optimizations``. - -- bpo-23404: Don't regenerate generated files based on file modification - time anymore: the action is now explicit. Replace ``make touch`` with - ``make regen-all``. - -- bpo-29643: Fix ``--enable-optimization`` didn't work. - -Windows -------- - -- bpo-30687: Locate msbuild.exe on Windows when building rather than - vcvarsall.bat - -- bpo-29392: Prevent crash when passing invalid arguments into msvcrt - module. - -C API ------ - -- bpo-27867: Function PySlice_GetIndicesEx() is replaced with a macro if - Py_LIMITED_API is set to the value between 0x03050400 and 0x03060000 (not - including) or 0x03060100 or higher. - -- bpo-29083: Fixed the declaration of some public API functions. - PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not available in - limited API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() and - Py_BuildValue() were not available in limited API of version < 3.3 when - PY_SSIZE_T_CLEAN is defined. - - -What's New in Python 3.5.3 final? -================================= - -*Release date: 2017-01-17* - -There were no code changes between 3.5.3rc1 and 3.5.3 final. - - - -What's New in Python 3.5.3 release candidate 1? -=============================================== - -*Release date: 2017-01-02* - -Security --------- - -- bpo-27278: Fix os.urandom() implementation using getrandom() on Linux. - Truncate size to INT_MAX and loop until we collected enough random bytes, - instead of casting a directly Py_ssize_t to int. - -- bpo-22636: Avoid shell injection problems with ctypes.util.find_library(). - -Core and Builtins ------------------ - -- bpo-29073: bytearray formatting no longer truncates on first null byte. - -- bpo-28932: Do not include <sys/random.h> if it does not exist. - -- bpo-28147: Fix a memory leak in split-table dictionaries: setattr() must - not convert combined table into split table. - -- bpo-25677: Correct the positioning of the syntax error caret for indented - blocks. Based on patch by Michael Layzell. - -- bpo-29000: Fixed bytes formatting of octals with zero padding in alternate - form. - -- bpo-28512: Fixed setting the offset attribute of SyntaxError by - PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject(). - -- bpo-28991: functools.lru_cache() was susceptible to an obscure reentrancy - bug caused by a monkey-patched len() function. - -- bpo-28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X - when decode astral characters. Patch by Xiang Zhang. - -- bpo-19398: Extra slash no longer added to sys.path components in case of - empty compile-time PYTHONPATH components. - -- bpo-28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug - build. - -- bpo-23782: Fixed possible memory leak in _PyTraceback_Add() and exception - loss in PyTraceBack_Here(). - -- bpo-28379: Added sanity checks and tests for PyUnicode_CopyCharacters(). - Patch by Xiang Zhang. - -- bpo-28376: The type of long range iterator is now registered as Iterator. - Patch by Oren Milman. - -- bpo-28376: The constructor of range_iterator now checks that step is not - 0. Patch by Oren Milman. - -- bpo-26906: Resolving special methods of uninitialized type now causes - implicit initialization of the type instead of a fail. - -- bpo-18287: PyType_Ready() now checks that tp_name is not NULL. Original - patch by Niklas Koep. - -- bpo-24098: Fixed possible crash when AST is changed in process of - compiling it. - -- bpo-28350: String constants with null character no longer interned. - -- bpo-26617: Fix crash when GC runs during weakref callbacks. - -- bpo-27942: String constants now interned recursively in tuples and - frozensets. - -- bpo-21578: Fixed misleading error message when ImportError called with - invalid keyword args. - -- bpo-28203: Fix incorrect type in error message from ``complex(1.0, - {2:3})``. Patch by Soumya Sharma. - -- bpo-27955: Fallback on reading /dev/urandom device when the getrandom() - syscall fails with EPERM, for example when blocked by SECCOMP. - -- bpo-28131: Fix a regression in zipimport's compile_source(). zipimport - should use the same optimization level as the interpreter. - -- bpo-25221: Fix corrupted result from PyLong_FromLong(0) when Python is - compiled with NSMALLPOSINTS = 0. - -- bpo-25758: Prevents zipimport from unnecessarily encoding a filename - (patch by Eryk Sun) - -- bpo-28189: dictitems_contains no longer swallows compare errors. (Patch by - Xiang Zhang) - -- bpo-27812: Properly clear out a generator's frame's backreference to the - generator to prevent crashes in frame.clear(). - -- bpo-27811: Fix a crash when a coroutine that has not been awaited is - finalized with warnings-as-errors enabled. - -- bpo-27587: Fix another issue found by PVS-Studio: Null pointer check after - use of 'def' in _PyState_AddModule(). Initial patch by Christian Heimes. - -- bpo-26020: set literal evaluation order did not match documented - behaviour. - -- bpo-27782: Multi-phase extension module import now correctly allows the - ``m_methods`` field to be used to add module level functions to instances - of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang. - -- bpo-27936: The round() function accepted a second None argument for some - types but not for others. Fixed the inconsistency by accepting None for - all numeric types. - -- bpo-27487: Warn if a submodule argument to "python -m" or - runpy.run_module() is found in sys.modules after parent packages are - imported, but before the submodule is executed. - -- bpo-27558: Fix a SystemError in the implementation of "raise" statement. - In a brand new thread, raise a RuntimeError since there is no active - exception to reraise. Patch written by Xiang Zhang. - -- bpo-27419: Standard __import__() no longer look up "__import__" in globals - or builtins for importing submodules or "from import". Fixed handling an - error of non-string package name. - -- bpo-27083: Respect the PYTHONCASEOK environment variable under Windows. - -- bpo-27514: Make having too many statically nested blocks a SyntaxError - instead of SystemError. - -- bpo-27473: Fixed possible integer overflow in bytes and bytearray - concatenations. Patch by Xiang Zhang. - -- bpo-27507: Add integer overflow check in bytearray.extend(). Patch by - Xiang Zhang. - -- bpo-27581: Don't rely on wrapping for overflow check in - PySequence_Tuple(). Patch by Xiang Zhang. - -- bpo-27443: __length_hint__() of bytearray iterators no longer return a - negative integer for a resized bytearray. - -- bpo-27942: Fix memory leak in codeobject.c - -Library -------- - -- bpo-15812: inspect.getframeinfo() now correctly shows the first line of a - context. Patch by Sam Breese. - -- bpo-29094: Offsets in a ZIP file created with extern file object and modes - "w" and "x" now are relative to the start of the file. - -- bpo-13051: Fixed recursion errors in large or resized - curses.textpad.Textbox. Based on patch by Tycho Andersen. - -- bpo-29119: Fix weakrefs in the pure python version of - collections.OrderedDict move_to_end() method. Contributed by Andra - Bogildea. - -- bpo-9770: curses.ascii predicates now work correctly with negative - integers. - -- bpo-28427: old keys should not remove new values from WeakValueDictionary - when collecting from another thread. - -- bpo-28923: Remove editor artifacts from Tix.py. - -- bpo-28871: Fixed a crash when deallocate deep ElementTree. - -- bpo-19542: Fix bugs in WeakValueDictionary.setdefault() and - WeakValueDictionary.pop() when a GC collection happens in another thread. - -- bpo-20191: Fixed a crash in resource.prlimit() when pass a sequence that - doesn't own its elements as limits. - -- bpo-28779: multiprocessing.set_forkserver_preload() would crash the - forkserver process if a preloaded module instantiated some multiprocessing - objects such as locks. - -- bpo-28847: dbm.dumb now supports reading read-only files and no longer - writes the index file when it is not changed. - -- bpo-25659: In ctypes, prevent a crash calling the from_buffer() and - from_buffer_copy() methods on abstract classes like Array. - -- bpo-28732: Fix crash in os.spawnv() with no elements in args - -- bpo-28485: Always raise ValueError for negative - compileall.compile_dir(workers=...) parameter, even when multithreading is - unavailable. - -- bpo-28387: Fixed possible crash in _io.TextIOWrapper deallocator when the - garbage collector is invoked in other thread. Based on patch by Sebastian - Cufre. - -- bpo-27517: LZMA compressor and decompressor no longer raise exceptions if - given empty data twice. Patch by Benjamin Fogle. - -- bpo-28549: Fixed segfault in curses's addch() with ncurses6. - -- bpo-28449: tarfile.open() with mode "r" or "r:" now tries to open a tar - file with compression before trying to open it without compression. - Otherwise it had 50% chance failed with ignore_zeros=True. - -- bpo-23262: The webbrowser module now supports Firefox 36+ and derived - browsers. Based on patch by Oleg Broytman. - -- bpo-27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused - by representing the scale as float value internally in Tk. tkinter.IntVar - now works if float value is set to underlying Tk variable. - -- bpo-28255: calendar.TextCalendar().prmonth() no longer prints a space at - the start of new line after printing a month's calendar. Patch by Xiang - Zhang. - -- bpo-20491: The textwrap.TextWrapper class now honors non-breaking spaces. - Based on patch by Kaarle Ritvanen. - -- bpo-28353: os.fwalk() no longer fails on broken links. - -- bpo-25464: Fixed HList.header_exists() in tkinter.tix module by addin a - workaround to Tix library bug. - -- bpo-28488: shutil.make_archive() no longer add entry "./" to ZIP archive. - -- bpo-24452: Make webbrowser support Chrome on Mac OS X. - -- bpo-20766: Fix references leaked by pdb in the handling of SIGINT - handlers. - -- bpo-26293: Fixed writing ZIP files that starts not from the start of the - file. Offsets in ZIP file now are relative to the start of the archive in - conforming to the specification. - -- bpo-28321: Fixed writing non-BMP characters with binary format in - plistlib. - -- bpo-28322: Fixed possible crashes when unpickle itertools objects from - incorrect pickle data. Based on patch by John Leitch. - -- Fix possible integer overflows and crashes in the mmap module with unusual - usage patterns. - -- bpo-1703178: Fix the ability to pass the --link-objects option to the - distutils build_ext command. - -- bpo-28253: Fixed calendar functions for extreme months: 0001-01 and - 9999-12. Methods itermonthdays() and itermonthdays2() are reimplemented so - that they don't call itermonthdates() which can cause datetime.date - under/overflow. - -- bpo-28275: Fixed possible use after free in the decompress() methods of - the LZMADecompressor and BZ2Decompressor classes. Original patch by John - Leitch. - -- bpo-27897: Fixed possible crash in sqlite3.Connection.create_collation() - if pass invalid string-like object as a name. Patch by Xiang Zhang. - -- bpo-18893: Fix invalid exception handling in Lib/ctypes/macholib/dyld.py. - Patch by Madison May. - -- bpo-27611: Fixed support of default root window in the tkinter.tix module. - -- bpo-27348: In the traceback module, restore the formatting of exception - messages like "Exception: None". This fixes a regression introduced in - 3.5a2. - -- bpo-25651: Allow false values to be used for msg parameter of subTest(). - -- bpo-27932: Prevent memory leak in win32_ver(). - -- Fix UnboundLocalError in socket._sendfile_use_sendfile. - -- bpo-28075: Check for ERROR_ACCESS_DENIED in Windows implementation of - os.stat(). Patch by Eryk Sun. - -- bpo-25270: Prevent codecs.escape_encode() from raising SystemError when an - empty bytestring is passed. - -- bpo-28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam. - -- bpo-25895: Enable WebSocket URL schemes in urllib.parse.urljoin. Patch by - Gergely Imreh and Markus Holtermann. - -- bpo-27599: Fixed buffer overrun in binascii.b2a_qp() and - binascii.a2b_qp(). - -- bpo-19003: m email.generator now replaces only ``\r`` and/or ``\n`` line - endings, per the RFC, instead of all unicode line endings. - -- bpo-28019: itertools.count() no longer rounds non-integer step in range - between 1.0 and 2.0 to 1. - -- bpo-25969: Update the lib2to3 grammar to handle the unpacking - generalizations added in 3.5. - -- bpo-14977: mailcap now respects the order of the lines in the mailcap - files ("first match"), as required by RFC 1542. Patch by Michael Lazar. - -- bpo-24594: Validates persist parameter when opening MSI database - -- bpo-17582: xml.etree.ElementTree nows preserves whitespaces in attributes - (Patch by Duane Griffin. Reviewed and approved by Stefan Behnel.) - -- bpo-28047: Fixed calculation of line length used for the base64 CTE in the - new email policies. - -- bpo-27445: Don't pass str(_charset) to MIMEText.set_payload(). Patch by - Claude Paroz. - -- bpo-22450: urllib now includes an ``Accept: */*`` header among the default - headers. This makes the results of REST API requests more consistent and - predictable especially when proxy servers are involved. - -- lib2to3.pgen3.driver.load_grammar() now creates a stable cache file - between runs given the same Grammar.txt input regardless of the hash - randomization setting. - -- bpo-27570: Avoid zero-length memcpy() etc calls with null source pointers - in the "ctypes" and "array" modules. - -- bpo-22233: Break email header lines *only* on the RFC specified CR and LF - characters, not on arbitrary unicode line breaks. This also fixes a bug - in HTTP header parsing. - -- bpo-27988: Fix email iter_attachments incorrect mutation of payload list. - -- bpo-27691: Fix ssl module's parsing of GEN_RID subject alternative name - fields in X.509 certs. - -- bpo-27850: Remove 3DES from ssl module's default cipher list to counter - measure sweet32 attack (:cve:`2016-2183`). - -- bpo-27766: Add ChaCha20 Poly1305 to ssl module's default cipher list. - (Required OpenSSL 1.1.0 or LibreSSL). - -- bpo-26470: Port ssl and hashlib module to OpenSSL 1.1.0. - -- Remove support for passing a file descriptor to os.access. It never worked - but previously didn't raise. - -- bpo-12885: Fix error when distutils encounters symlink. - -- bpo-27881: Fixed possible bugs when setting - sqlite3.Connection.isolation_level. Based on patch by Xiang Zhang. - -- bpo-27861: Fixed a crash in sqlite3.Connection.cursor() when a factory - creates not a cursor. Patch by Xiang Zhang. - -- bpo-19884: Avoid spurious output on OS X with Gnu Readline. - -- bpo-27706: Restore deterministic behavior of random.Random().seed() for - string seeds using seeding version 1. Allows sequences of calls to - random() to exactly match those obtained in Python 2. Patch by Nofar - Schnider. - -- bpo-10513: Fix a regression in Connection.commit(). Statements should not - be reset after a commit. - -- A new version of typing.py from https://github.com/python/typing: - Collection (only for 3.6) (issue #27598). Add FrozenSet to __all__ - (upstream #261). Fix crash in _get_type_vars() (upstream #259). Remove the - dict constraint in ForwardRef._eval_type (upstream #252). - -- bpo-27539: Fix unnormalised ``Fraction.__pow__`` result in the case of - negative exponent and negative base. - -- bpo-21718: cursor.description is now available for queries using CTEs. - -- bpo-2466: posixpath.ismount now correctly recognizes mount points which - the user does not have permission to access. - -- bpo-27773: Correct some memory management errors server_hostname in - _ssl.wrap_socket(). - -- bpo-26750: unittest.mock.create_autospec() now works properly for - subclasses of property() and other data descriptors. - -- In the curses module, raise an error if window.getstr() or window.instr() - is passed a negative value. - -- bpo-27783: Fix possible usage of uninitialized memory in - operator.methodcaller. - -- bpo-27774: Fix possible Py_DECREF on unowned object in _sre. - -- bpo-27760: Fix possible integer overflow in binascii.b2a_qp. - -- bpo-27758: Fix possible integer overflow in the _csv module for large - record lengths. - -- bpo-27568: Prevent HTTPoxy attack (:cve:`2016-1000110`). Ignore the - HTTP_PROXY variable when REQUEST_METHOD environment is set, which - indicates that the script is in CGI mode. - -- bpo-27656: Do not assume sched.h defines any SCHED_* constants. - -- bpo-27130: In the "zlib" module, fix handling of large buffers (typically - 4 GiB) when compressing and decompressing. Previously, inputs were - limited to 4 GiB, and compression and decompression operations did not - properly handle results of 4 GiB. - -- bpo-27533: Release GIL in nt._isdir - -- bpo-17711: Fixed unpickling by the persistent ID with protocol 0. Original - patch by Alexandre Vassalotti. - -- bpo-27522: Avoid an unintentional reference cycle in email.feedparser. - -- bpo-26844: Fix error message for imp.find_module() to refer to 'path' - instead of 'name'. Patch by Lev Maximov. - -- bpo-23804: Fix SSL zero-length recv() calls to not block and not raise an - error about unclean EOF. - -- bpo-27466: Change time format returned by http.cookie.time2netscape, - confirming the netscape cookie format and making it consistent with - documentation. - -- bpo-26664: Fix activate.fish by removing mis-use of ``$``. - -- bpo-22115: Fixed tracing Tkinter variables: trace_vdelete() with wrong - mode no longer break tracing, trace_vinfo() now always returns a list of - pairs of strings, tracing in the "u" mode now works. - -- Fix a scoping issue in importlib.util.LazyLoader which triggered an - UnboundLocalError when lazy-loading a module that was already put into - sys.modules. - -- bpo-27079: Fixed curses.ascii functions isblank(), iscntrl() and - ispunct(). - -- bpo-26754: Some functions (compile() etc) accepted a filename argument - encoded as an iterable of integers. Now only strings and byte-like objects - are accepted. - -- bpo-27048: Prevents distutils failing on Windows when environment - variables contain non-ASCII characters - -- bpo-27330: Fixed possible leaks in the ctypes module. - -- bpo-27238: Got rid of bare excepts in the turtle module. Original patch - by Jelle Zijlstra. - -- bpo-27122: When an exception is raised within the context being managed by - a contextlib.ExitStack() and one of the exit stack generators catches and - raises it in a chain, do not re-raise the original exception when exiting, - let the new chained one through. This avoids the :pep:`479` bug described - in issue25782. - -- bpo-26386: Fixed ttk.TreeView selection operations with item id's - containing spaces. - -- bpo-16182: Fix various functions in the "readline" module to use the - locale encoding, and fix get_begidx() and get_endidx() to return code - point indexes. - -- bpo-27392: Add loop.connect_accepted_socket(). Patch by Jim Fulton. - -- bpo-27930: Improved behaviour of logging.handlers.QueueListener. Thanks to - Paulo Andrade and Petr Viktorin for the analysis and patch. - -- bpo-21201: Improves readability of multiprocessing error message. Thanks - to Wojciech Walczak for patch. - -- bpo-27456: asyncio: Set TCP_NODELAY by default. - -- bpo-27906: Fix socket accept exhaustion during high TCP traffic. Patch by - Kevin Conway. - -- bpo-28174: Handle when SO_REUSEPORT isn't properly supported. Patch by - Seth Michael Larson. - -- bpo-26654: Inspect functools.partial in asyncio.Handle.__repr__. Patch by - iceboy. - -- bpo-26909: Fix slow pipes IO in asyncio. Patch by INADA Naoki. - -- bpo-28176: Fix callbacks race in asyncio.SelectorLoop.sock_connect. - -- bpo-27759: Fix selectors incorrectly retain invalid file descriptors. - Patch by Mark Williams. - -- bpo-28368: Refuse monitoring processes if the child watcher has no loop - attached. Patch by Vincent Michel. - -- bpo-28369: Raise RuntimeError when transport's FD is used with add_reader, - add_writer, etc. - -- bpo-28370: Speedup asyncio.StreamReader.readexactly. Patch by Коренберг - Марк. - -- bpo-28371: Deprecate passing asyncio.Handles to run_in_executor. - -- bpo-28372: Fix asyncio to support formatting of non-python coroutines. - -- bpo-28399: Remove UNIX socket from FS before binding. Patch by Коренберг - Марк. - -- bpo-27972: Prohibit Tasks to await on themselves. - -- bpo-26923: Fix asyncio.Gather to refuse being cancelled once all children - are done. Patch by Johannes Ebke. - -- bpo-26796: Don't configure the number of workers for default threadpool - executor. Initial patch by Hans Lawrenz. - -- bpo-28600: Optimize loop.call_soon(). - -- bpo-28613: Fix get_event_loop() return the current loop if called from - coroutines/callbacks. - -- bpo-28639: Fix inspect.isawaitable to always return bool Patch by Justin - Mayfield. - -- bpo-28652: Make loop methods reject socket kinds they do not support. - -- bpo-28653: Fix a refleak in functools.lru_cache. - -- bpo-28703: Fix asyncio.iscoroutinefunction to handle Mock objects. - -- bpo-24142: Reading a corrupt config file left the parser in an invalid - state. Original patch by Florian Höch. - -- bpo-28990: Fix SSL hanging if connection is closed before handshake - completed. (Patch by HoHo-Ho) - -IDLE ----- - -- bpo-15308: Add 'interrupt execution' (^C) to Shell menu. Patch by Roger - Serwy, updated by Bayard Randel. - -- bpo-27922: Stop IDLE tests from 'flashing' gui widgets on the screen. - -- Add version to title of IDLE help window. - -- bpo-25564: In section on IDLE -- console differences, mention that using - exec means that __builtins__ is defined for each statement. - -- bpo-27714: text_textview and test_autocomplete now pass when re-run in the - same process. This occurs when test_idle fails when run with the -w - option but without -jn. Fix warning from test_config. - -- bpo-25507: IDLE no longer runs buggy code because of its tkinter imports. - Users must include the same imports required to run directly in Python. - -- bpo-27452: add line counter and crc to IDLE configHandler test dump. - -- bpo-27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. - -- bpo-27245: IDLE: Cleanly delete custom themes and key bindings. - Previously, when IDLE was started from a console or by import, a cascade - of warnings was emitted. Patch by Serhiy Storchaka. - -C API ------ - -- bpo-28808: PyUnicode_CompareWithASCIIString() now never raises exceptions. - -- bpo-26754: PyUnicode_FSDecoder() accepted a filename argument encoded as - an iterable of integers. Now only strings and bytes-like objects are - accepted. - -Documentation -------------- - -- bpo-28513: Documented command-line interface of zipfile. - -Tests ------ - -- bpo-28950: Disallow -j0 to be combined with -T/-l/-M in regrtest command - line arguments. - -- bpo-28666: Now test.support.rmtree is able to remove unwritable or - unreadable directories. - -- bpo-23839: Various caches now are cleared before running every test file. - -- bpo-28409: regrtest: fix the parser of command line arguments. - -- bpo-27787: Call gc.collect() before checking each test for "dangling - threads", since the dangling threads are weak references. - -- bpo-27369: In test_pyexpat, avoid testing an error message detail that - changed in Expat 2.2.0. - -Tools/Demos ------------ - -- bpo-27952: Get Tools/scripts/fixcid.py working with Python 3 and the - current "re" module, avoid invalid Python backslash escapes, and fix a bug - parsing escaped C quote signs. - -- bpo-27332: Fixed the type of the first argument of module-level functions - generated by Argument Clinic. Patch by Petr Viktorin. - -- bpo-27418: Fixed Tools/importbench/importbench.py. - -Windows -------- - -- bpo-28251: Improvements to help manuals on Windows. - -- bpo-28110: launcher.msi has different product codes between 32-bit and - 64-bit - -- bpo-25144: Ensures TargetDir is set before continuing with custom install. - -- bpo-27469: Adds a shell extension to the launcher so that drag and drop - works correctly. - -- bpo-27309: Enabled proper Windows styles in python[w].exe manifest. - -Build ------ - -- bpo-29080: Removes hard dependency on hg.exe from PCBuild/build.bat - -- bpo-23903: Added missed names to PC/python3.def. - -- bpo-10656: Fix out-of-tree building on AIX. Patch by Tristan Carel and - Michael Haubenwallner. - -- bpo-26359: Rename --with-optimiations to --enable-optimizations. - -- bpo-28444: Fix missing extensions modules when cross compiling. - -- bpo-28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j. - -- bpo-28258: Fixed build with Estonian locale (python-config and distclean - targets in Makefile). Patch by Arfrever Frehtes Taifersar Arahesis. - -- bpo-26661: setup.py now detects system libffi with multiarch wrapper. - -- bpo-28066: Fix the logic that searches build directories for generated - include files when building outside the source tree. - -- bpo-15819: Remove redundant include search directory option for building - outside the source tree. - -- bpo-27566: Fix clean target in freeze makefile (patch by Lisa Roach) - -- bpo-27705: Update message in validate_ucrtbase.py - -- bpo-27983: Cause lack of llvm-profdata tool when using clang as required - for PGO linking to be a configure time error rather than make time when - --with-optimizations is enabled. Also improve our ability to find the - llvm-profdata tool on MacOS and some Linuxes. - -- bpo-26307: The profile-opt build now applies PGO to the built-in modules. - -- bpo-26359: Add the --with-optimizations configure flag. - -- bpo-27713: Suppress spurious build warnings when updating importlib's - bootstrap files. Patch by Xiang Zhang - -- bpo-25825: Correct the references to Modules/python.exp and ld_so_aix, - which are required on AIX. This updates references to an installation - path that was changed in 3.2a4, and undoes changed references to the build - tree that were made in 3.5.0a1. - -- bpo-27453: CPP invocation in configure must use CPPFLAGS. Patch by Chi - Hsuan Yen. - -- bpo-27641: The configure script now inserts comments into the makefile to - prevent the pgen and _freeze_importlib executables from being - cross-compiled. - -- bpo-26662: Set PYTHON_FOR_GEN in configure as the Python program to be - used for file generation during the build. - -- bpo-10910: Avoid C++ compilation errors on FreeBSD and OS X. Also update - FreedBSD version checks for the original ctype UTF-8 workaround. - -- bpo-28676: Prevent missing 'getentropy' declaration warning on macOS. - Patch by Gareth Rees. - - -What's New in Python 3.5.2 final? -================================= - -*Release date: 2016-06-26* - -Core and Builtins ------------------ - -- bpo-26930: Update Windows builds to use OpenSSL 1.0.2h. - -Tests ------ - -- bpo-26867: Ubuntu's openssl OP_NO_SSLv3 is forced on by default; fix test. - -IDLE ----- - -- bpo-27365: Allow non-ascii in idlelib/NEWS.txt - minimal part for 3.5.2. - - -What's New in Python 3.5.2 release candidate 1? -=============================================== - -*Release date: 2016-06-12* - -Security --------- - -- bpo-26556: Update expat to 2.1.1, fixes :cve:`2015-1283`. - -- Fix TLS stripping vulnerability in smtplib, :cve:`2016-0772`. Reported by - Team Oststrom. - -- bpo-26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with - ``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom - entropy pool is not initialized yet. Patch written by Colm Buckley. - -- bpo-26657: Fix directory traversal vulnerability with http.server on - Windows. This fixes a regression that was introduced in 3.3.4rc1 and - 3.4.0rc1. Based on patch by Philipp Hagemeister. - -- bpo-26313: ssl.py _load_windows_store_certs fails if windows cert store is - empty. Patch by Baji. - -- bpo-25939: On Windows open the cert store readonly in - ssl.enum_certificates. - -Core and Builtins ------------------ - -- bpo-27066: Fixed SystemError if a custom opener (for open()) returns a - negative number without setting an exception. - -- bpo-20041: Fixed TypeError when frame.f_trace is set to None. Patch by - Xavier de Gaye. - -- bpo-26168: Fixed possible refleaks in failing Py_BuildValue() with the "N" - format unit. - -- bpo-26991: Fix possible refleak when creating a function with annotations. - -- bpo-27039: Fixed bytearray.remove() for values greater than 127. Patch by - Joe Jevnik. - -- bpo-23640: int.from_bytes() no longer bypasses constructors for - subclasses. - -- bpo-26811: gc.get_objects() no longer contains a broken tuple with NULL - pointer. - -- bpo-20120: Use RawConfigParser for .pypirc parsing, removing support for - interpolation unintentionally added with move to Python 3. Behavior no - longer does any interpolation in .pypirc files, matching behavior in - Python 2.7 and Setuptools 19.0. - -- bpo-26659: Make the builtin slice type support cycle collection. - -- bpo-26718: super.__init__ no longer leaks memory if called multiple times. - NOTE: A direct call of super.__init__ is not endorsed! - -- bpo-25339: PYTHONIOENCODING now has priority over locale in setting the - error handler for stdin and stdout. - -- bpo-26494: Fixed crash on iterating exhausting iterators. Affected classes - are generic sequence iterators, iterators of str, bytes, bytearray, list, - tuple, set, frozenset, dict, OrderedDict, corresponding views and - os.scandir() iterator. - -- bpo-26581: If coding cookie is specified multiple times on a line in - Python source code file, only the first one is taken to account. - -- bpo-26464: Fix str.translate() when string is ASCII and first replacements - removes character, but next replacement uses a non-ASCII character or a - string longer than 1 character. Regression introduced in Python 3.5.0. - -- bpo-22836: Ensure exception reports from PyErr_Display() and - PyErr_WriteUnraisable() are sensible even when formatting them produces - secondary errors. This affects the reports produced by - sys.__excepthook__() and when __del__() raises an exception. - -- bpo-26302: Correct behavior to reject comma as a legal character for - cookie names. - -- bpo-4806: Avoid masking the original TypeError exception when using star - (``*``) unpacking in function calls. Based on patch by Hagen Fürstenau - and Daniel Urban. - -- bpo-27138: Fix the doc comment for FileFinder.find_spec(). - -- bpo-26154: Add a new private _PyThreadState_UncheckedGet() function to get - the current Python thread state, but don't issue a fatal error if it is - NULL. This new function must be used instead of accessing directly the - _PyThreadState_Current variable. The variable is no more exposed since - Python 3.5.1 to hide the exact implementation of atomic C types, to avoid - compiler issues. - -- bpo-26194: Deque.insert() gave odd results for bounded deques that had - reached their maximum size. Now an IndexError will be raised when - attempting to insert into a full deque. - -- bpo-25843: When compiling code, don't merge constants if they are equal - but have a different types. For example, ``f1, f2 = lambda: 1, lambda: - 1.0`` is now correctly compiled to two different functions: ``f1()`` - returns ``1`` (``int``) and ``f2()`` returns ``1.0`` (``int``), even if - ``1`` and ``1.0`` are equal. - -- bpo-22995: [UPDATE] Comment out the one of the pickleability tests in - _PyObject_GetState() due to regressions observed in Cython-based projects. - -- bpo-25961: Disallowed null characters in the type name. - -- bpo-25973: Fix segfault when an invalid nonlocal statement binds a name - starting with two underscores. - -- bpo-22995: Instances of extension types with a state that aren't - subclasses of list or dict and haven't implemented any pickle-related - methods (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__, or - __getstate__), can no longer be pickled. Including memoryview. - -- bpo-20440: Massive replacing unsafe attribute setting code with special - macro Py_SETREF. - -- bpo-25766: Special method __bytes__() now works in str subclasses. - -- bpo-25421: __sizeof__ methods of builtin types now use dynamic basic size. - This allows sys.getsize() to work correctly with their subclasses with - __slots__ defined. - -- bpo-25709: Fixed problem with in-place string concatenation and utf-8 - cache. - -- bpo-27147: Mention :pep:`420` in the importlib docs. - -- bpo-24097: Fixed crash in object.__reduce__() if slot name is freed inside - __getattr__. - -- bpo-24731: Fixed crash on converting objects with special methods - __bytes__, __trunc__, and __float__ returning instances of subclasses of - bytes, int, and float to subclasses of bytes, int, and float - correspondingly. - -- bpo-26478: Fix semantic bugs when using binary operators with dictionary - views and tuples. - -- bpo-26171: Fix possible integer overflow and heap corruption in - zipimporter.get_data(). - -- bpo-25660: Fix TAB key behaviour in REPL with readline. - -- bpo-25887: Raise a RuntimeError when a coroutine object is awaited more - than once. - -- bpo-27243: Update the __aiter__ protocol: instead of returning an - awaitable that resolves to an asynchronous iterator, the asynchronous - iterator should be returned directly. Doing the former will trigger a - PendingDeprecationWarning. - -Library -------- - -- bpo-21386: Implement missing IPv4Address.is_global property. It was - documented since 07a5610bae9d. Initial patch by Roger Luethi. - -- bpo-20900: distutils register command now decodes HTTP responses - correctly. Initial patch by ingrid. - -- A new version of typing.py provides several new classes and features: - @overload outside stubs, Reversible, DefaultDict, Text, ContextManager, - Type[], NewType(), TYPE_CHECKING, and numerous bug fixes (note that some - of the new features are not yet implemented in mypy or other static - analyzers). Also classes for :pep:`492` (Awaitable, AsyncIterable, - AsyncIterator) have been added (in fact they made it into 3.5.1 but were - never mentioned). - -- bpo-25738: Stop http.server.BaseHTTPRequestHandler.send_error() from - sending a message body for 205 Reset Content. Also, don't send Content - header fields in responses that don't have a body. Patch by Susumu - Koshiba. - -- bpo-21313: Fix the "platform" module to tolerate when sys.version contains - truncated build information. - -- bpo-27164: In the zlib module, allow decompressing raw Deflate streams - with a predefined zdict. Based on patch by Xiang Zhang. - -- bpo-24291: Fix wsgiref.simple_server.WSGIRequestHandler to completely - write data to the client. Previously it could do partial writes and - truncate data. Also, wsgiref.handler.ServerHandler can now handle stdout - doing partial writes, but this is deprecated. - -- bpo-26809: Add ``__all__`` to :mod:`string`. Patch by Emanuel Barry. - -- bpo-26373: subprocess.Popen.communicate now correctly ignores - BrokenPipeError when the child process dies before .communicate() is - called in more/all circumstances. - -- bpo-21776: distutils.upload now correctly handles HTTPError. Initial patch - by Claudiu Popa. - -- bpo-27114: Fix SSLContext._load_windows_store_certs fails with - PermissionError - -- bpo-18383: Avoid creating duplicate filters when using filterwarnings and - simplefilter. Based on patch by Alex Shkop. - -- bpo-27057: Fix os.set_inheritable() on Android, ioctl() is blocked by - SELinux and fails with EACCESS. The function now falls back to fcntl(). - Patch written by Michał Bednarski. - -- bpo-27014: Fix infinite recursion using typing.py. Thanks to Kalle Tuure! - -- bpo-14132: Fix urllib.request redirect handling when the target only has a - query string. Original fix by Ján Janech. - -- bpo-17214: The "urllib.request" module now percent-encodes non-ASCII bytes - found in redirect target URLs. Some servers send Location header fields - with non-ASCII bytes, but "http.client" requires the request target to be - ASCII-encodable, otherwise a UnicodeEncodeError is raised. Based on patch - by Christian Heimes. - -- bpo-26892: Honor debuglevel flag in urllib.request.HTTPHandler. Patch - contributed by Chi Hsuan Yen. - -- bpo-22274: In the subprocess module, allow stderr to be redirected to - stdout even when stdout is not redirected. Patch by Akira Li. - -- bpo-26807: mock_open 'files' no longer error on readline at end of file. - Patch from Yolanda Robla. - -- bpo-25745: Fixed leaking a userptr in curses panel destructor. - -- bpo-26977: Removed unnecessary, and ignored, call to sum of squares helper - in statistics.pvariance. - -- bpo-26881: The modulefinder module now supports extended opcode arguments. - -- bpo-23815: Fixed crashes related to directly created instances of types in - _tkinter and curses.panel modules. - -- bpo-17765: weakref.ref() no longer silently ignores keyword arguments. - Patch by Georg Brandl. - -- bpo-26873: xmlrpc now raises ResponseError on unsupported type tags - instead of silently return incorrect result. - -- bpo-26711: Fixed the comparison of plistlib.Data with other types. - -- bpo-24114: Fix an uninitialized variable in ``ctypes.util``. The bug only - occurs on SunOS when the ctypes implementation searches for the ``crle`` - program. Patch by Xiang Zhang. Tested on SunOS by Kees Bos. - -- bpo-26864: In urllib.request, change the proxy bypass host checking - against no_proxy to be case-insensitive, and to not match unrelated host - names that happen to have a bypassed hostname as a suffix. Patch by Xiang - Zhang. - -- bpo-26634: recursive_repr() now sets __qualname__ of wrapper. Patch by - Xiang Zhang. - -- bpo-26804: urllib.request will prefer lower_case proxy environment - variables over UPPER_CASE or Mixed_Case ones. Patch contributed by - Hans-Peter Jansen. - -- bpo-26837: assertSequenceEqual() now correctly outputs non-stringified - differing items (like bytes in the -b mode). This affects - assertListEqual() and assertTupleEqual(). - -- bpo-26041: Remove "will be removed in Python 3.7" from deprecation - messages of platform.dist() and platform.linux_distribution(). Patch by - Kumaripaba Miyurusara Athukorala. - -- bpo-26822: itemgetter, attrgetter and methodcaller objects no longer - silently ignore keyword arguments. - -- bpo-26733: Disassembling a class now disassembles class and static - methods. Patch by Xiang Zhang. - -- bpo-26801: Fix error handling in :func:`shutil.get_terminal_size`, catch - :exc:`AttributeError` instead of :exc:`NameError`. Patch written by - Emanuel Barry. - -- bpo-24838: tarfile's ustar and gnu formats now correctly calculate name - and link field limits for multibyte character encodings like utf-8. - -- bpo-26717: Stop encoding Latin-1-ized WSGI paths with UTF-8. Patch by - Anthony Sottile. - -- bpo-26735: Fix :func:`os.urandom` on Solaris 11.3 and newer when reading - more than 1,024 bytes: call ``getrandom()`` multiple times with a limit of - 1024 bytes per call. - -- bpo-16329: Add .webm to mimetypes.types_map. Patch by Giampaolo Rodola'. - -- bpo-13952: Add .csv to mimetypes.types_map. Patch by Geoff Wilson. - -- bpo-26709: Fixed Y2038 problem in loading binary PLists. - -- bpo-23735: Handle terminal resizing with Readline 6.3+ by installing our - own SIGWINCH handler. Patch by Eric Price. - -- bpo-26586: In http.server, respond with "413 Request header fields too - large" if there are too many header fields to parse, rather than killing - the connection and raising an unhandled exception. Patch by Xiang Zhang. - -- bpo-22854: Change BufferedReader.writable() and BufferedWriter.readable() - to always return False. - -- bpo-25195: Fix a regression in mock.MagicMock. _Call is a subclass of - tuple (changeset 3603bae63c13 only works for classes) so we need to - implement __ne__ ourselves. Patch by Andrew Plummer. - -- bpo-26644: Raise ValueError rather than SystemError when a negative length - is passed to SSLSocket.recv() or read(). - -- bpo-23804: Fix SSL recv(0) and read(0) methods to return zero bytes - instead of up to 1024. - -- bpo-26616: Fixed a bug in datetime.astimezone() method. - -- bpo-21925: :func:`warnings.formatwarning` now catches exceptions on - ``linecache.getline(...)`` to be able to log :exc:`ResourceWarning` - emitted late during the Python shutdown process. - -- bpo-24266: Ctrl+C during Readline history search now cancels the search - mode when compiled with Readline 7. - -- bpo-26560: Avoid potential ValueError in BaseHandler.start_response. - Initial patch by Peter Inglesby. - -- bpo-26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` - to support importing packages. - -- bpo-26499: Account for remaining Content-Length in HTTPResponse.readline() - and read1(). Based on patch by Silent Ghost. Also document that - HTTPResponse now supports these methods. - -- bpo-25320: Handle sockets in directories unittest discovery is scanning. - Patch from Victor van den Elzen. - -- bpo-16181: cookiejar.http2time() now returns None if year is higher than - datetime.MAXYEAR. - -- bpo-26513: Fixes platform module detection of Windows Server - -- bpo-23718: Fixed parsing time in week 0 before Jan 1. Original patch by - Tamás Bence Gedai. - -- bpo-20589: Invoking Path.owner() and Path.group() on Windows now raise - NotImplementedError instead of ImportError. - -- bpo-26177: Fixed the keys() method for Canvas and Scrollbar widgets. - -- bpo-15068: Got rid of excessive buffering in the fileinput module. The - bufsize parameter is no longer used. - -- bpo-2202: Fix UnboundLocalError in - AbstractDigestAuthHandler.get_algorithm_impls. Initial patch by Mathieu - Dupuy. - -- bpo-25718: Fixed pickling and copying the accumulate() iterator with total - is None. - -- bpo-26475: Fixed debugging output for regular expressions with the (?x) - flag. - -- bpo-26457: Fixed the subnets() methods in IP network classes for the case - when resulting prefix length is equal to maximal prefix length. Based on - patch by Xiang Zhang. - -- bpo-26385: Remove the file if the internal open() call in - NamedTemporaryFile() fails. Patch by Silent Ghost. - -- bpo-26402: Fix XML-RPC client to retry when the server shuts down a - persistent connection. This was a regression related to the new - http.client.RemoteDisconnected exception in 3.5.0a4. - -- bpo-25913: Leading ``<~`` is optional now in base64.a85decode() with - adobe=True. Patch by Swati Jaiswal. - -- bpo-26186: Remove an invalid type check in importlib.util.LazyLoader. - -- bpo-26367: importlib.__import__() raises SystemError like - builtins.__import__() when ``level`` is specified but without an - accompanying package specified. - -- bpo-26309: In the "socketserver" module, shut down the request (closing - the connected socket) when verify_request() returns false. Patch by Aviv - Palivoda. - -- bpo-25995: os.walk() no longer uses FDs proportional to the tree depth. - -- bpo-26117: The os.scandir() iterator now closes file descriptor not only - when the iteration is finished, but when it was failed with error. - -- bpo-25911: Restored support of bytes paths in os.walk() on Windows. - -- bpo-26045: Add UTF-8 suggestion to error message when posting a - non-Latin-1 string with http.client. - -- bpo-12923: Reset FancyURLopener's redirect counter even if there is an - exception. Based on patches by Brian Brazil and Daniel Rocco. - -- bpo-25945: Fixed a crash when unpickle the functools.partial object with - wrong state. Fixed a leak in failed functools.partial constructor. "args" - and "keywords" attributes of functools.partial have now always types tuple - and dict correspondingly. - -- bpo-26202: copy.deepcopy() now correctly copies range() objects with - non-atomic attributes. - -- bpo-23076: Path.glob() now raises a ValueError if it's called with an - invalid pattern. Patch by Thomas Nyberg. - -- bpo-19883: Fixed possible integer overflows in zipimport. - -- bpo-26227: On Windows, getnameinfo(), gethostbyaddr() and - gethostbyname_ex() functions of the socket module now decode the hostname - from the ANSI code page rather than UTF-8. - -- bpo-26147: xmlrpc now works with strings not encodable with used non-UTF-8 - encoding. - -- bpo-25935: Garbage collector now breaks reference loops with OrderedDict. - -- bpo-16620: Fixed AttributeError in msilib.Directory.glob(). - -- bpo-26013: Added compatibility with broken protocol 2 pickles created in - old Python 3 versions (3.4.3 and lower). - -- bpo-25850: Use cross-compilation by default for 64-bit Windows. - -- bpo-17633: Improve zipimport's support for namespace packages. - -- bpo-24705: Fix sysconfig._parse_makefile not expanding ${} vars appearing - before $() vars. - -- bpo-22138: Fix mock.patch behavior when patching descriptors. Restore - original values after patching. Patch contributed by Sean McCully. - -- bpo-25672: In the ssl module, enable the SSL_MODE_RELEASE_BUFFERS mode - option if it is safe to do so. - -- bpo-26012: Don't traverse into symlinks for ``**`` pattern in - pathlib.Path.[r]glob(). - -- bpo-24120: Ignore PermissionError when traversing a tree with - pathlib.Path.[r]glob(). Patch by Ulrich Petri. - -- bpo-25447: fileinput now uses sys.stdin as-is if it does not have a buffer - attribute (restores backward compatibility). - -- bpo-25447: Copying the lru_cache() wrapper object now always works, - independently from the type of the wrapped object (by returning the - original object unchanged). - -- bpo-24103: Fixed possible use after free in ElementTree.XMLPullParser. - -- bpo-25860: os.fwalk() no longer skips remaining directories when error - occurs. Original patch by Samson Lee. - -- bpo-25914: Fixed and simplified OrderedDict.__sizeof__. - -- bpo-25902: Fixed various refcount issues in ElementTree iteration. - -- bpo-25717: Restore the previous behaviour of tolerating most fstat() - errors when opening files. This was a regression in 3.5a1, and stopped - anonymous temporary files from working in special cases. - -- bpo-24903: Fix regression in number of arguments compileall accepts when - '-d' is specified. The check on the number of arguments has been dropped - completely as it never worked correctly anyway. - -- bpo-25764: In the subprocess module, preserve any exception caused by - fork() failure when preexec_fn is used. - -- bpo-6478: _strptime's regexp cache now is reset after changing timezone - with time.tzset(). - -- bpo-14285: When executing a package with the "python -m package" option, - and package initialization fails, a proper traceback is now reported. The - "runpy" module now lets exceptions from package initialization pass back - to the caller, rather than raising ImportError. - -- bpo-19771: Also in runpy and the "-m" option, omit the irrelevant message - ". . . is a package and cannot be directly executed" if the package could - not even be initialized (e.g. due to a bad ``*.pyc`` file). - -- bpo-25177: Fixed problem with the mean of very small and very large - numbers. As a side effect, statistics.mean and statistics.variance should - be significantly faster. - -- bpo-25718: Fixed copying object with state with boolean value is false. - -- bpo-10131: Fixed deep copying of minidom documents. Based on patch by - Marian Ganisin. - -- bpo-25725: Fixed a reference leak in pickle.loads() when unpickling - invalid data including tuple instructions. - -- bpo-25663: In the Readline completer, avoid listing duplicate global - names, and search the global namespace before searching builtins. - -- bpo-25688: Fixed file leak in ElementTree.iterparse() raising an error. - -- bpo-23914: Fixed SystemError raised by unpickler on broken pickle data. - -- bpo-25691: Fixed crash on deleting ElementTree.Element attributes. - -- bpo-25624: ZipFile now always writes a ZIP_STORED header for directory - entries. Patch by Dingyuan Wang. - -- Skip getaddrinfo if host is already resolved. Patch by A. Jesse Jiryu - Davis. - -- bpo-26050: Add asyncio.StreamReader.readuntil() method. Patch by Марк - Коренберг. - -- bpo-25924: Avoid unnecessary serialization of getaddrinfo(3) calls on OS X - versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis. - -- bpo-26406: Avoid unnecessary serialization of getaddrinfo(3) calls on - current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis. - -- bpo-26848: Fix asyncio/subprocess.communicate() to handle empty input. - Patch by Jack O'Connor. - -- bpo-27040: Add loop.get_exception_handler method - -- bpo-27041: asyncio: Add loop.create_future method - -- bpo-27223: asyncio: Fix _read_ready and _write_ready to respect - _conn_lost. Patch by Łukasz Langa. - -- bpo-22970: asyncio: Fix inconsistency cancelling Condition.wait. Patch by - David Coles. - -IDLE ----- - -- bpo-5124: Paste with text selected now replaces the selection on X11. This - matches how paste works on Windows, Mac, most modern Linux apps, and ttk - widgets. Original patch by Serhiy Storchaka. - -- bpo-24759: Make clear in idlelib.idle_test.__init__ that the directory is - a private implementation of test.test_idle and tool for maintainers. - -- bpo-27196: Stop 'ThemeChanged' warnings when running IDLE tests. These - persisted after other warnings were suppressed in #20567. Apply Serhiy - Storchaka's update_idletasks solution to four test files. Record this - additional advice in idle_test/README.txt - -- bpo-20567: Revise idle_test/README.txt with advice about avoiding tk - warning messages from tests. Apply advice to several IDLE tests. - -- bpo-27117: Make colorizer htest and turtledemo work with dark themes. Move - code for configuring text widget colors to a new function. - -- bpo-26673: When tk reports font size as 0, change to size 10. Such fonts - on Linux prevented the configuration dialog from opening. - -- bpo-21939: Add test for IDLE's percolator. Original patch by Saimadhav - Heblikar. - -- bpo-21676: Add test for IDLE's replace dialog. Original patch by Saimadhav - Heblikar. - -- bpo-18410: Add test for IDLE's search dialog. Original patch by Westley - Martínez. - -- bpo-21703: Add test for IDLE's undo delegator. Original patch by Saimadhav - Heblikar . - -- bpo-27044: Add ConfigDialog.remove_var_callbacks to stop memory leaks. - -- bpo-23977: Add more asserts to test_delegator. - -- bpo-20640: Add tests for idlelib.configHelpSourceEdit. Patch by Saimadhav - Heblikar. - -- In the 'IDLE-console differences' section of the IDLE doc, clarify how - running with IDLE affects sys.modules and the standard streams. - -- bpo-25507: fix incorrect change in IOBinding that prevented printing. - Augment IOBinding htest to include all major IOBinding functions. - -- bpo-25905: Revert unwanted conversion of ' to ’ RIGHT SINGLE QUOTATION - MARK in README.txt and open this and NEWS.txt with 'ascii'. Re-encode - CREDITS.txt to utf-8 and open it with 'utf-8'. - -Documentation -------------- - -- bpo-19489: Moved the search box from the sidebar to the header and footer - of each page. Patch by Ammar Askar. - -- bpo-24136: Document the new :pep:`448` unpacking syntax of 3.5. - -- bpo-26736: Used HTTPS for external links in the documentation if possible. - -- bpo-6953: Rework the Readline module documentation to group related - functions together, and add more details such as what underlying Readline - functions and variables are accessed. - -- bpo-23606: Adds note to ctypes documentation regarding cdll.msvcrt. - -- bpo-25500: Fix documentation to not claim that __import__ is searched for - in the global scope. - -- bpo-26014: Update 3.x packaging documentation: * "See also" links to the - new docs are now provided in the legacy pages * links to setuptools - documentation have been updated - -Tests ------ - -- bpo-21916: Added tests for the turtle module. Patch by ingrid, Gregory - Loyse and Jelle Zijlstra. - -- bpo-26523: The multiprocessing thread pool (multiprocessing.dummy.Pool) - was untested. - -- bpo-26015: Added new tests for pickling iterators of mutable sequences. - -- bpo-26325: Added test.support.check_no_resource_warning() to check that no - ResourceWarning is emitted. - -- bpo-25940: Changed test_ssl to use self-signed.pythontest.net. This - avoids relying on svn.python.org, which recently changed root certificate. - -- bpo-25616: Tests for OrderedDict are extracted from test_collections into - separate file test_ordered_dict. - -- bpo-26583: Skip test_timestamp_overflow in test_import if bytecode files - cannot be written. - -Build ------ - -- bpo-26884: Fix linking extension modules for cross builds. Patch by Xavier - de Gaye. - -- bpo-22359: Disable the rules for running _freeze_importlib and pgen when - cross-compiling. The output of these programs is normally saved with the - source code anyway, and is still regenerated when doing a native build. - Patch by Xavier de Gaye. - -- bpo-27229: Fix the cross-compiling pgen rule for in-tree builds. Patch by - Xavier de Gaye. - -- bpo-21668: Link audioop, _datetime, _ctypes_test modules to libm, except - on Mac OS X. Patch written by Xavier de Gaye. - -- bpo-25702: A --with-lto configure option has been added that will enable - link time optimizations at build time during a make profile-opt. Some - compilers and toolchains are known to not produce stable code when using - LTO, be sure to test things thoroughly before relying on it. It can - provide a few % speed up over profile-opt alone. - -- bpo-26624: Adds validation of ucrtbase[d].dll version with warning for old - versions. - -- bpo-17603: Avoid error about nonexistent fileblocks.o file by using a - lower-level check for st_blocks in struct stat. - -- bpo-26079: Fixing the build output folder for tix-8.4.3.6. Patch by Bjoern - Thiel. - -- bpo-26465: Update Windows builds to use OpenSSL 1.0.2g. - -- bpo-24421: Compile Modules/_math.c once, before building extensions. - Previously it could fail to compile properly if the math and cmath builds - were concurrent. - -- bpo-25348: Added ``--pgo`` and ``--pgo-job`` arguments to - ``PCbuild\build.bat`` for building with Profile-Guided Optimization. The - old ``PCbuild\build_pgo.bat`` script is now deprecated, and simply calls - ``PCbuild\build.bat --pgo %*``. - -- bpo-25827: Add support for building with ICC to ``configure``, including a - new ``--with-icc`` flag. - -- bpo-25696: Fix installation of Python on UNIX with make -j9. - -- bpo-26930: Update OS X 10.5+ 32-bit-only installer to build and link with - OpenSSL 1.0.2h. - -- bpo-26268: Update Windows builds to use OpenSSL 1.0.2f. - -- bpo-25136: Support Apple Xcode 7's new textual SDK stub libraries. - -- bpo-24324: Do not enable unreachable code warnings when using gcc as the - option does not work correctly in older versions of gcc and has been - silently removed as of gcc-4.5. - -Windows -------- - -- bpo-27053: Updates make_zip.py to correctly generate library ZIP file. - -- bpo-26268: Update the prepare_ssl.py script to handle OpenSSL releases - that don't include the contents of the include directory (that is, 1.0.2e - and later). - -- bpo-26071: bdist_wininst created binaries fail to start and find 32bit - Python - -- bpo-26073: Update the list of magic numbers in launcher - -- bpo-26065: Excludes venv from library when generating embeddable distro. - -- bpo-17500: Remove unused and outdated icons. (See also: - https://github.com/python/pythondotorg/issues/945) - -Tools/Demos ------------ - -- bpo-26799: Fix python-gdb.py: don't get C types once when the Python code - is loaded, but get C types on demand. The C types can change if - python-gdb.py is loaded before the Python executable. Patch written by - Thomas Ilsche. - -- bpo-26271: Fix the Freeze tool to properly use flags passed through - configure. Patch by Daniel Shaulov. - -- bpo-26489: Add dictionary unpacking support to Tools/parser/unparse.py. - Patch by Guo Ci Teo. - -- bpo-26316: Fix variable name typo in Argument Clinic. - - -What's New in Python 3.5.1 final? -================================= - -*Release date: 2015-12-06* - -Core and Builtins ------------------ - -- bpo-25709: Fixed problem with in-place string concatenation and utf-8 - cache. - -Windows -------- - -- bpo-25715: Python 3.5.1 installer shows wrong upgrade path and incorrect - logic for launcher detection. - - -What's New in Python 3.5.1 release candidate 1? -=============================================== - -*Release date: 2015-11-22* - -Core and Builtins ------------------ - -- bpo-25630: Fix a possible segfault during argument parsing in functions - that accept filesystem paths. - -- bpo-23564: Fixed a partially broken sanity check in the _posixsubprocess - internals regarding how fds_to_pass were passed to the child. The bug had - no actual impact as subprocess.py already avoided it. - -- bpo-25388: Fixed tokenizer crash when processing undecodable source code - with a null byte. - -- bpo-25462: The hash of the key now is calculated only once in most - operations in C implementation of OrderedDict. - -- bpo-22995: Default implementation of __reduce__ and __reduce_ex__ now - rejects builtin types with not defined __new__. - -- bpo-25555: Fix parser and AST: fill lineno and col_offset of "arg" node - when compiling AST from Python objects. - -- bpo-24802: Avoid buffer overreads when int(), float(), compile(), exec() - and eval() are passed bytes-like objects. These objects are not - necessarily terminated by a null byte, but the functions assumed they - were. - -- bpo-24726: Fixed a crash and leaking NULL in repr() of OrderedDict that - was mutated by direct calls of dict methods. - -- bpo-25449: Iterating OrderedDict with keys with unstable hash now raises - KeyError in C implementations as well as in Python implementation. - -- bpo-25395: Fixed crash when highly nested OrderedDict structures were - garbage collected. - -- bpo-25274: sys.setrecursionlimit() now raises a RecursionError if the new - recursion limit is too low depending at the current recursion depth. - Modify also the "lower-water mark" formula to make it monotonic. This mark - is used to decide when the overflowed flag of the thread state is reset. - -- bpo-24402: Fix input() to prompt to the redirected stdout when - sys.stdout.fileno() fails. - -- bpo-24806: Prevent builtin types that are not allowed to be subclassed - from being subclassed through multiple inheritance. - -- bpo-24848: Fixed a number of bugs in UTF-7 decoding of misformed data. - -- bpo-25280: Import trace messages emitted in verbose (-v) mode are no - longer formatted twice. - -- bpo-25003: On Solaris 11.3 or newer, os.urandom() now uses the getrandom() - function instead of the getentropy() function. The getentropy() function - is blocking to generate very good quality entropy, os.urandom() doesn't - need such high-quality entropy. - -- bpo-25182: The stdprinter (used as sys.stderr before the io module is - imported at startup) now uses the backslashreplace error handler. - -- bpo-25131: Make the line number and column offset of set/dict literals and - comprehensions correspond to the opening brace. - -- bpo-25150: Hide the private :samp:`_Py_atomic_{xxx}` symbols from the - public Python.h header to fix a compilation error with OpenMP. - PyThreadState_GET() becomes an alias to PyThreadState_Get() to avoid ABI - incompatibilities. - -Library -------- - -- bpo-25626: Change three zlib functions to accept sizes that fit in - Py_ssize_t, but internally cap those sizes to UINT_MAX. This resolves a - regression in 3.5 where GzipFile.read() failed to read chunks larger than - 2 or 4 GiB. The change affects the zlib.Decompress.decompress() - max_length parameter, the zlib.decompress() bufsize parameter, and the - zlib.Decompress.flush() length parameter. - -- bpo-25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True) - when the OS gives priority to errors such as EACCES over EEXIST. - -- bpo-25593: Change semantics of EventLoop.stop() in asyncio. - -- bpo-6973: When we know a subprocess.Popen process has died, do not allow - the send_signal(), terminate(), or kill() methods to do anything as they - could potentially signal a different process. - -- bpo-25590: In the Readline completer, only call getattr() once per - attribute. - -- bpo-25498: Fix a crash when garbage-collecting ctypes objects created by - wrapping a memoryview. This was a regression made in 3.5a1. Based on - patch by Eryksun. - -- bpo-25584: Added "escape" to the __all__ list in the glob module. - -- bpo-25584: Fixed recursive glob() with patterns starting with ``**``. - -- bpo-25446: Fix regression in smtplib's AUTH LOGIN support. - -- bpo-18010: Fix the pydoc web server's module search function to handle - exceptions from importing packages. - -- bpo-25554: Got rid of circular references in regular expression parsing. - -- bpo-25510: fileinput.FileInput.readline() now returns b'' instead of '' at - the end if the FileInput was opened with binary mode. Patch by Ryosuke - Ito. - -- bpo-25503: Fixed inspect.getdoc() for inherited docstrings of properties. - Original patch by John Mark Vandenberg. - -- bpo-25515: Always use os.urandom as a source of randomness in uuid.uuid4. - -- bpo-21827: Fixed textwrap.dedent() for the case when largest common - whitespace is a substring of smallest leading whitespace. Based on patch - by Robert Li. - -- bpo-25447: The lru_cache() wrapper objects now can be copied and pickled - (by returning the original object unchanged). - -- bpo-25390: typing: Don't crash on Union[str, Pattern]. - -- bpo-25441: asyncio: Raise error from drain() when socket is closed. - -- bpo-25410: Cleaned up and fixed minor bugs in C implementation of - OrderedDict. - -- bpo-25411: Improved Unicode support in SMTPHandler through better use of - the email package. Thanks to user simon04 for the patch. - -- bpo-25407: Remove mentions of the formatter module being removed in Python - 3.6. - -- bpo-25406: Fixed a bug in C implementation of OrderedDict.move_to_end() - that caused segmentation fault or hang in iterating after moving several - items to the start of ordered dict. - -- bpo-25364: zipfile now works in threads disabled builds. - -- bpo-25328: smtpd's SMTPChannel now correctly raises a ValueError if both - decode_data and enable_SMTPUTF8 are set to true. - -- bpo-25316: distutils raises OSError instead of DistutilsPlatformError when - MSVC is not installed. - -- bpo-25380: Fixed protocol for the STACK_GLOBAL opcode in - pickletools.opcodes. - -- bpo-23972: Updates asyncio datagram create method allowing reuseport and - reuseaddr socket options to be set prior to binding the socket. Mirroring - the existing asyncio create_server method the reuseaddr option for - datagram sockets defaults to True if the O/S is 'posix' (except if the - platform is Cygwin). Patch by Chris Laws. - -- bpo-25304: Add asyncio.run_coroutine_threadsafe(). This lets you submit a - coroutine to a loop from another thread, returning a - concurrent.futures.Future. By Vincent Michel. - -- bpo-25232: Fix CGIRequestHandler to split the query from the URL at the - first question mark (?) rather than the last. Patch from Xiang Zhang. - -- bpo-24657: Prevent CGIRequestHandler from collapsing slashes in the query - part of the URL as if it were a path. Patch from Xiang Zhang. - -- bpo-24483: C implementation of functools.lru_cache() now calculates key's - hash only once. - -- bpo-22958: Constructor and update method of weakref.WeakValueDictionary - now accept the self and the dict keyword arguments. - -- bpo-22609: Constructor of collections.UserDict now accepts the self - keyword argument. - -- bpo-25111: Fixed comparison of traceback.FrameSummary. - -- bpo-25262: Added support for BINBYTES8 opcode in Python implementation of - unpickler. Highest 32 bits of 64-bit size for BINUNICODE8 and BINBYTES8 - opcodes no longer silently ignored on 32-bit platforms in C - implementation. - -- bpo-25034: Fix string.Formatter problem with auto-numbering and nested - format_specs. Patch by Anthon van der Neut. - -- bpo-25233: Rewrite the guts of asyncio.Queue and asyncio.Semaphore to be - more understandable and correct. - -- bpo-25203: Failed readline.set_completer_delims() no longer left the - module in inconsistent state. - -- bpo-23600: Default implementation of tzinfo.fromutc() was returning wrong - results in some cases. - -- bpo-23329: Allow the ssl module to be built with older versions of - LibreSSL. - -- Prevent overflow in _Unpickler_Read. - -- bpo-25047: The XML encoding declaration written by Element Tree now - respects the letter case given by the user. This restores the ability to - write encoding names in uppercase like "UTF-8", which worked in Python 2. - -- bpo-25135: Make deque_clear() safer by emptying the deque before clearing. - This helps avoid possible reentrancy issues. - -- bpo-19143: platform module now reads Windows version from kernel32.dll to - avoid compatibility shims. - -- bpo-25092: Fix datetime.strftime() failure when errno was already set to - EINVAL. - -- bpo-23517: Fix rounding in fromtimestamp() and utcfromtimestamp() methods - of datetime.datetime: microseconds are now rounded to nearest with ties - going to nearest even integer (ROUND_HALF_EVEN), instead of being rounding - towards minus infinity (ROUND_FLOOR). It's important that these methods - use the same rounding mode than datetime.timedelta to keep the property: - (datetime(1970,1,1) + timedelta(seconds=t)) == - datetime.utcfromtimestamp(t). It also the rounding mode used by - round(float) for example. - -- bpo-25155: Fix datetime.datetime.now() and datetime.datetime.utcnow() on - Windows to support date after year 2038. It was a regression introduced in - Python 3.5.0. - -- bpo-25108: Omitted internal frames in traceback functions print_stack(), - format_stack(), and extract_stack() called without arguments. - -- bpo-25118: Fix a regression of Python 3.5.0 in os.waitpid() on Windows. - -- bpo-24684: socket.socket.getaddrinfo() now calls - PyUnicode_AsEncodedString() instead of calling the encode() method of the - host, to handle correctly custom string with an encode() method which - doesn't return a byte string. The encoder of the IDNA codec is now called - directly instead of calling the encode() method of the string. - -- bpo-25060: Correctly compute stack usage of the BUILD_MAP opcode. - -- bpo-24857: Comparing call_args to a long sequence now correctly returns a - boolean result instead of raising an exception. Patch by A Kaptur. - -- bpo-23144: Make sure that HTMLParser.feed() returns all the data, even - when convert_charrefs is True. - -- bpo-24982: shutil.make_archive() with the "zip" format now adds entries - for directories (including empty directories) in ZIP file. - -- bpo-25019: Fixed a crash caused by setting non-string key of expat parser. - Based on patch by John Leitch. - -- bpo-16180: Exit pdb if file has syntax error, instead of trapping user in - an infinite loop. Patch by Xavier de Gaye. - -- bpo-24891: Fix a race condition at Python startup if the file descriptor - of stdin (0), stdout (1) or stderr (2) is closed while Python is creating - sys.stdin, sys.stdout and sys.stderr objects. These attributes are now set - to None if the creation of the object failed, instead of raising an - OSError exception. Initial patch written by Marco Paolini. - -- bpo-24992: Fix error handling and a race condition (related to garbage - collection) in collections.OrderedDict constructor. - -- bpo-24881: Fixed setting binary mode in Python implementation of FileIO on - Windows and Cygwin. Patch from Akira Li. - -- bpo-25578: Fix (another) memory leak in SSLSocket.getpeercer(). - -- bpo-25530: Disable the vulnerable SSLv3 protocol by default when creating - ssl.SSLContext. - -- bpo-25569: Fix memory leak in SSLSocket.getpeercert(). - -- bpo-25471: Sockets returned from accept() shouldn't appear to be - nonblocking. - -- bpo-25319: When threading.Event is reinitialized, the underlying condition - should use a regular lock rather than a recursive lock. - -- bpo-21112: Fix regression in unittest.expectedFailure on subclasses. Patch - from Berker Peksag. - -- bpo-24764: cgi.FieldStorage.read_multi() now ignores the Content-Length - header in part headers. Patch written by Peter Landry and reviewed by - Pierre Quentel. - -- bpo-24913: Fix overrun error in deque.index(). Found by John Leitch and - Bryce Darling. - -- bpo-24774: Fix docstring in http.server.test. Patch from Chiu-Hsiang Hsu. - -- bpo-21159: Improve message in - configparser.InterpolationMissingOptionError. Patch from Łukasz Langa. - -- bpo-20362: Honour TestCase.longMessage correctly in assertRegex. Patch - from Ilia Kurenkov. - -- bpo-23572: Fixed functools.singledispatch on classes with false - metaclasses. Patch by Ethan Furman. - -- asyncio: ensure_future() now accepts awaitable objects. - -IDLE ----- - -- bpo-15348: Stop the debugger engine (normally in a user process) before - closing the debugger window (running in the IDLE process). This prevents - the RuntimeErrors that were being caught and ignored. - -- bpo-24455: Prevent IDLE from hanging when a) closing the shell while the - debugger is active (15347); b) closing the debugger with the [X] button - (15348); and c) activating the debugger when already active (24455). The - patch by Mark Roseman does this by making two changes. 1. Suspend and - resume the gui.interaction method with the tcl vwait mechanism intended - for this purpose (instead of root.mainloop & .quit). 2. In gui.run, allow - any existing interaction to terminate first. - -- Change 'The program' to 'Your program' in an IDLE 'kill program?' message - to make it clearer that the program referred to is the currently running - user program, not IDLE itself. - -- bpo-24750: Improve the appearance of the IDLE editor window status bar. - Patch by Mark Roseman. - -- bpo-25313: Change the handling of new built-in text color themes to better - address the compatibility problem introduced by the addition of IDLE Dark. - Consistently use the revised idleConf.CurrentTheme everywhere in idlelib. - -- bpo-24782: Extension configuration is now a tab in the IDLE Preferences - dialog rather than a separate dialog. The former tabs are now a sorted - list. Patch by Mark Roseman. - -- bpo-22726: Re-activate the config dialog help button with some content - about the other buttons and the new IDLE Dark theme. - -- bpo-24820: IDLE now has an 'IDLE Dark' built-in text color theme. It is - more or less IDLE Classic inverted, with a cobalt blue background. - Strings, comments, keywords, ... are still green, red, orange, ... . To - use it with IDLEs released before November 2015, hit the 'Save as New - Custom Theme' button and enter a new name, such as 'Custom Dark'. The - custom theme will work with any IDLE release, and can be modified. - -- bpo-25224: README.txt is now an idlelib index for IDLE developers and - curious users. The previous user content is now in the IDLE doc chapter. - 'IDLE' now means 'Integrated Development and Learning Environment'. - -- bpo-24820: Users can now set breakpoint colors in Settings -> Custom - Highlighting. Original patch by Mark Roseman. - -- bpo-24972: Inactive selection background now matches active selection - background, as configured by users, on all systems. Found items are now - always highlighted on Windows. Initial patch by Mark Roseman. - -- bpo-24570: Idle: make calltip and completion boxes appear on Macs affected - by a tk regression. Initial patch by Mark Roseman. - -- bpo-24988: Idle ScrolledList context menus (used in debugger) now work on - Mac Aqua. Patch by Mark Roseman. - -- bpo-24801: Make right-click for context menu work on Mac Aqua. Patch by - Mark Roseman. - -- bpo-25173: Associate tkinter messageboxes with a specific widget. For Mac - OSX, make them a 'sheet'. Patch by Mark Roseman. - -- bpo-25198: Enhance the initial html viewer now used for Idle Help. - Properly indent fixed-pitch text (patch by Mark Roseman). Give code - snippet a very Sphinx-like light blueish-gray background. Re-use initial - width and height set by users for shell and editor. When the Table of - Contents (TOC) menu is used, put the section header at the top of the - screen. - -- bpo-25225: Condense and rewrite Idle doc section on text colors. - -- bpo-21995: Explain some differences between IDLE and console Python. - -- bpo-22820: Explain need for *print* when running file from Idle editor. - -- bpo-25224: Doc: augment Idle feature list and no-subprocess section. - -- bpo-25219: Update doc for Idle command line options. Some were missing and - notes were not correct. - -- bpo-24861: Most of idlelib is private and subject to change. Use - idleib.idle.* to start Idle. See idlelib.__init__.__doc__. - -- bpo-25199: Idle: add synchronization comments for future maintainers. - -- bpo-16893: Replace help.txt with help.html for Idle doc display. The new - idlelib/help.html is rstripped Doc/build/html/library/idle.html. It looks - better than help.txt and will better document Idle as released. The - tkinter html viewer that works for this file was written by Mark Roseman. - The now unused EditorWindow.HelpDialog class and helt.txt file are - deprecated. - -- bpo-24199: Deprecate unused idlelib.idlever with possible removal in 3.6. - -- bpo-24790: Remove extraneous code (which also create 2 & 3 conflicts). - -Documentation -------------- - -- bpo-22558: Add remaining doc links to source code for Python-coded - modules. Patch by Yoni Lavi. - -- bpo-12067: Rewrite Comparisons section in the Expressions chapter of the - language reference. Some of the details of comparing mixed types were - incorrect or ambiguous. NotImplemented is only relevant at a lower level - than the Expressions chapter. Added details of comparing range() objects, - and default behaviour and consistency suggestions for user-defined - classes. Patch from Andy Maier. - -- bpo-24952: Clarify the default size argument of stack_size() in the - "threading" and "_thread" modules. Patch from Mattip. - -- bpo-23725: Overhaul tempfile docs. Note deprecated status of mktemp. Patch - from Zbigniew Jędrzejewski-Szmek. - -- bpo-24808: Update the types of some PyTypeObject fields. Patch by Joseph - Weston. - -- bpo-22812: Fix unittest discovery examples. Patch from Pam McA'Nulty. - -Tests ------ - -- bpo-25449: Added tests for OrderedDict subclasses. - -- bpo-25099: Make test_compileall not fail when an entry on sys.path cannot - be written to (commonly seen in administrative installs on Windows). - -- bpo-23919: Prevents assert dialogs appearing in the test suite. - -- ``PCbuild\rt.bat`` now accepts an unlimited number of arguments to pass - along to regrtest.py. Previously there was a limit of 9. - -Build ------ - -- bpo-24915: Add LLVM support for PGO builds and use the test suite to - generate the profile data. Initial patch by Alecsandru Patrascu of Intel. - -- bpo-24910: Windows MSIs now have unique display names. - -- bpo-24986: It is now possible to build Python on Windows without errors - when external libraries are not available. - -Windows -------- - -- bpo-25450: Updates shortcuts to start Python in installation directory. - -- bpo-25164: Changes default all-users install directory to match per-user - directory. - -- bpo-25143: Improves installer error messages for unsupported platforms. - -- bpo-25163: Display correct directory in installer when using non-default - settings. - -- bpo-25361: Disables use of SSE2 instructions in Windows 32-bit build - -- bpo-25089: Adds logging to installer for case where launcher is not - selected on upgrade. - -- bpo-25165: Windows uninstallation should not remove launcher if other - versions remain - -- bpo-25112: py.exe launcher is missing icons - -- bpo-25102: Windows installer does not precompile for -O or -OO. - -- bpo-25081: Makes Back button in installer go back to upgrade page when - upgrading. - -- bpo-25091: Increases font size of the installer. - -- bpo-25126: Clarifies that the non-web installer will download some - components. - -- bpo-25213: Restores requestedExecutionLevel to manifest to disable UAC - virtualization. - -- bpo-25022: Removed very outdated PC/example_nt/ directory. - -Tools/Demos ------------ - -- bpo-25440: Fix output of python-config --extension-suffix. - - -What's New in Python 3.5.0 final? -================================= - -*Release date: 2015-09-13* - -Build ------ - -- bpo-25071: Windows installer should not require TargetDir parameter when - installing quietly. - - -What's New in Python 3.5.0 release candidate 4? -=============================================== - -*Release date: 2015-09-09* - -Library -------- - -- bpo-25029: Fixes MemoryError in test_strptime. - -Build ------ - -- bpo-25027: Reverts partial-static build options and adds vcruntime140.dll - to Windows installation. - - -What's New in Python 3.5.0 release candidate 3? -=============================================== - -*Release date: 2015-09-07* - -Core and Builtins ------------------ - -- bpo-24305: Prevent import subsystem stack frames from being counted by the - warnings.warn(stacklevel=) parameter. - -- bpo-24912: Prevent __class__ assignment to immutable built-in objects. - -- bpo-24975: Fix AST compilation for :pep:`448` syntax. - -Library -------- - -- bpo-24917: time_strftime() buffer over-read. - -- bpo-24748: To resolve a compatibility problem found with py2exe and - pywin32, imp.load_dynamic() once again ignores previously loaded modules - to support Python modules replacing themselves with extension modules. - Patch by Petr Viktorin. - -- bpo-24635: Fixed a bug in typing.py where isinstance([], typing.Iterable) - would return True once, then False on subsequent calls. - -- bpo-24989: Fixed buffer overread in BytesIO.readline() if a position is - set beyond size. Based on patch by John Leitch. - -- bpo-24913: Fix overrun error in deque.index(). Found by John Leitch and - Bryce Darling. - - -What's New in Python 3.5.0 release candidate 2? -=============================================== - -*Release date: 2015-08-25* - -Core and Builtins ------------------ - -- bpo-24769: Interpreter now starts properly when dynamic loading is - disabled. Patch by Petr Viktorin. - -- bpo-21167: NAN operations are now handled correctly when python is - compiled with ICC even if -fp-model strict is not specified. - -- bpo-24492: A "package" lacking a __name__ attribute when trying to perform - a ``from .. import ...`` statement will trigger an ImportError instead of - an AttributeError. - -Library -------- - -- bpo-24847: Removes vcruntime140.dll dependency from Tcl/Tk. - -- bpo-24839: platform._syscmd_ver raises DeprecationWarning - -- bpo-24867: Fix Task.get_stack() for 'async def' coroutines - - -What's New in Python 3.5.0 release candidate 1? -=============================================== - -*Release date: 2015-08-09* - -Core and Builtins ------------------ - -- bpo-24667: Resize odict in all cases that the underlying dict resizes. - -Library -------- - -- bpo-24824: Signatures of codecs.encode() and codecs.decode() now are - compatible with pydoc. - -- bpo-24634: Importing uuid should not try to load libc on Windows - -- bpo-24798: _msvccompiler.py doesn't properly support manifests - -- bpo-4395: Better testing and documentation of binary operators. Patch by - Martin Panter. - -- bpo-23973: Update typing.py from GitHub repo. - -- bpo-23004: mock_open() now reads binary data correctly when the type of - read_data is bytes. Initial patch by Aaron Hill. - -- bpo-23888: Handle fractional time in cookie expiry. Patch by ssh. - -- bpo-23652: Make it possible to compile the select module against the libc - headers from the Linux Standard Base, which do not include some EPOLL - macros. Patch by Matt Frank. - -- bpo-22932: Fix timezones in email.utils.formatdate. Patch from Dmitry - Shachnev. - -- bpo-23779: imaplib raises TypeError if authenticator tries to abort. Patch - from Craig Holmquist. - -- bpo-23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch - written by Matthieu Gautier. - -- bpo-23254: Document how to close the TCPServer listening socket. Patch - from Martin Panter. - -- bpo-19450: Update Windows and OS X installer builds to use SQLite 3.8.11. - -- bpo-17527: Add PATCH to wsgiref.validator. Patch from Luca Sbardella. - -- bpo-24791: Fix grammar regression for call syntax: 'g(\*a or b)'. - -IDLE ----- - -- bpo-23672: Allow Idle to edit and run files with astral chars in name. - Patch by Mohd Sanad Zaki Rizvi. - -- bpo-24745: Idle editor default font. Switch from Courier to - platform-sensitive TkFixedFont. This should not affect current customized - font selections. If there is a problem, edit - $HOME/.idlerc/config-main.cfg and remove ':samp:`font{xxx}`' entries from - [Editor Window]. Patch by Mark Roseman. - -- bpo-21192: Idle editor. When a file is run, put its name in the restart - bar. Do not print false prompts. Original patch by Adnan Umer. - -- bpo-13884: Idle menus. Remove tearoff lines. Patch by Roger Serwy. - -Documentation -------------- - -- bpo-24129: Clarify the reference documentation for name resolution. This - includes removing the assumption that readers will be familiar with the - name resolution scheme Python used prior to the introduction of lexical - scoping for function namespaces. Patch by Ivan Levkivskyi. - -- bpo-20769: Improve reload() docs. Patch by Dorian Pula. - -- bpo-23589: Remove duplicate sentence from the FAQ. Patch by Yongzhi Pan. - -- bpo-24729: Correct IO tutorial to match implementation regarding encoding - parameter to open function. - -Tests ------ - -- bpo-24751: When running regrtest with the ``-w`` command line option, a - test run is no longer marked as a failure if all tests succeed when - re-run. - - -What's New in Python 3.5.0 beta 4? -================================== - -*Release date: 2015-07-26* - -Core and Builtins ------------------ - -- bpo-23573: Restored optimization of bytes.rfind() and bytearray.rfind() - for single-byte argument on Linux. - -- bpo-24569: Make :pep:`448` dictionary evaluation more consistent. - -- bpo-24583: Fix crash when set is mutated while being updated. - -- bpo-24407: Fix crash when dict is mutated while being updated. - -- bpo-24619: New approach for tokenizing async/await. As a consequence, it - is now possible to have one-line 'async def foo(): await ..' functions. - -- bpo-24687: Plug refleak on SyntaxError in function parameters annotations. - -- bpo-15944: memoryview: Allow arbitrary formats when casting to bytes. - Patch by Martin Panter. - -Library -------- - -- bpo-23441: rcompleter now prints a tab character instead of displaying - possible completions for an empty word. Initial patch by Martin Sekera. - -- bpo-24683: Fixed crashes in _json functions called with arguments of - inappropriate type. - -- bpo-21697: shutil.copytree() now correctly handles symbolic links that - point to directories. Patch by Eduardo Seabra and Thomas Kluyver. - -- bpo-14373: Fixed segmentation fault when gc.collect() is called during - constructing lru_cache (C implementation). - -- bpo-24695: Fix a regression in traceback.print_exception(). If - exc_traceback is None we shouldn't print a traceback header like described - in the documentation. - -- bpo-24620: Random.setstate() now validates the value of state last - element. - -- bpo-22485: Fixed an issue that caused ``inspect.getsource`` to return - incorrect results on nested functions. - -- bpo-22153: Improve unittest docs. Patch from Martin Panter and evilzero. - -- bpo-24580: Symbolic group references to open group in re patterns now are - explicitly forbidden as well as numeric group references. - -- bpo-24206: Fixed __eq__ and __ne__ methods of inspect classes. - -- bpo-24631: Fixed regression in the timeit module with multiline setup. - -- bpo-18622: unittest.mock.mock_open().reset_mock would recurse infinitely. - Patch from Nicola Palumbo and Laurent De Buyst. - -- bpo-23661: unittest.mock side_effects can now be exceptions again. This - was a regression vs Python 3.4. Patch from Ignacio Rossi - -- bpo-24608: chunk.Chunk.read() now always returns bytes, not str. - -- bpo-18684: Fixed reading out of the buffer in the re module. - -- bpo-24259: tarfile now raises a ReadError if an archive is truncated - inside a data segment. - -- bpo-15014: SMTP.auth() and SMTP.login() now support RFC 4954's optional - initial-response argument to the SMTP AUTH command. - -- bpo-24669: Fix inspect.getsource() for 'async def' functions. Patch by Kai - Groner. - -- bpo-24688: ast.get_docstring() for 'async def' functions. - -Build ------ - -- bpo-24603: Update Windows builds and OS X 10.5 installer to use OpenSSL - 1.0.2d. - - -What's New in Python 3.5.0 beta 3? -================================== - -*Release date: 2015-07-05* - -Core and Builtins ------------------ - -- bpo-24467: Fixed possible buffer over-read in bytearray. The bytearray - object now always allocates place for trailing null byte and it's buffer - now is always null-terminated. - -- Upgrade to Unicode 8.0.0. - -- bpo-24345: Add Py_tp_finalize slot for the stable ABI. - -- bpo-24400: Introduce a distinct type for :pep:`492` coroutines; add - types.CoroutineType, inspect.getcoroutinestate, - inspect.getcoroutinelocals; coroutines no longer use CO_GENERATOR flag; - sys.set_coroutine_wrapper works only for 'async def' coroutines; - inspect.iscoroutine no longer uses collections.abc.Coroutine, it's - intended to test for pure 'async def' coroutines only; add new opcode: - GET_YIELD_FROM_ITER; fix generators wrapper used in types.coroutine to be - instance of collections.abc.Generator; collections.abc.Awaitable and - collections.abc.Coroutine can no longer be used to detect generator-based - coroutines--use inspect.isawaitable instead. - -- bpo-24450: Add gi_yieldfrom to generators and cr_await to coroutines. - Contributed by Benno Leslie and Yury Selivanov. - -- bpo-19235: Add new RecursionError exception. Patch by Georg Brandl. - -Library -------- - -- bpo-21750: mock_open.read_data can now be read from each instance, as it - could in Python 3.3. - -- bpo-24552: Fix use after free in an error case of the _pickle module. - -- bpo-24514: tarfile now tolerates number fields consisting of only - whitespace. - -- bpo-19176: Fixed doctype() related bugs in C implementation of - ElementTree. A deprecation warning no longer issued by XMLParser subclass - with default doctype() method. Direct call of doctype() now issues a - warning. Parser's doctype() now is not called if target's doctype() is - called. Based on patch by Martin Panter. - -- bpo-20387: Restore semantic round-trip correctness in tokenize/untokenize - for tab-indented blocks. - -- bpo-24456: Fixed possible buffer over-read in adpcm2lin() and lin2adpcm() - functions of the audioop module. - -- bpo-24336: The contextmanager decorator now works with functions with - keyword arguments called "func" and "self". Patch by Martin Panter. - -- bpo-24522: Fix possible integer overflow in json accelerator module. - -- bpo-24489: ensure a previously set C errno doesn't disturb cmath.polar(). - -- bpo-24408: Fixed AttributeError in measure() and metrics() methods of - tkinter.Font. - -- bpo-14373: C implementation of functools.lru_cache() now can be used with - methods. - -- bpo-24347: Set KeyError if PyDict_GetItemWithError returns NULL. - -- bpo-24348: Drop superfluous incref/decref. - -- bpo-24359: Check for changed OrderedDict size during iteration. - -- bpo-24368: Support keyword arguments in OrderedDict methods. - -- bpo-24362: Simplify the C OrderedDict fast nodes resize logic. - -- bpo-24377: Fix a ref leak in OrderedDict.__repr__. - -- bpo-24369: Defend against key-changes during iteration. - -Tests ------ - -- bpo-24373: _testmultiphase and xxlimited now use tp_traverse and - tp_finalize to avoid reference leaks encountered when combining tp_dealloc - with PyType_FromSpec (see issue #16690 for details) - -Documentation -------------- - -- bpo-24458: Update documentation to cover multi-phase initialization for - extension modules (PEP 489). Patch by Petr Viktorin. - -- bpo-24351: Clarify what is meant by "identifier" in the context of - string.Template instances. - -Build ------ - -- bpo-24432: Update Windows builds and OS X 10.5 installer to use OpenSSL - 1.0.2c. - - -What's New in Python 3.5.0 beta 2? -================================== - -*Release date: 2015-05-31* - -Core and Builtins ------------------ - -- bpo-24284: The startswith and endswith methods of the str class no longer - return True when finding the empty string and the indexes are completely - out of range. - -- bpo-24115: Update uses of PyObject_IsTrue(), PyObject_Not(), - PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains() - to check for and handle errors correctly. - -- bpo-24328: Fix importing one character extension modules. - -- bpo-11205: In dictionary displays, evaluate the key before the value. - -- bpo-24285: Fixed regression that prevented importing extension modules - from inside packages. Patch by Petr Viktorin. - -Library -------- - -- bpo-23247: Fix a crash in the StreamWriter.reset() of CJK codecs. - -- bpo-24270: Add math.isclose() and cmath.isclose() functions as per - :pep:`485`. Contributed by Chris Barker and Tal Einat. - -- bpo-5633: Fixed timeit when the statement is a string and the setup is - not. - -- bpo-24326: Fixed audioop.ratecv() with non-default weightB argument. - Original patch by David Moore. - -- bpo-16991: Add a C implementation of OrderedDict. - -- bpo-23934: Fix inspect.signature to fail correctly for builtin types - lacking signature information. Initial patch by James Powell. - - -What's New in Python 3.5.0 beta 1? -================================== - -*Release date: 2015-05-24* - -Core and Builtins ------------------ - -- bpo-24276: Fixed optimization of property descriptor getter. - -- bpo-24268: PEP 489: Multi-phase extension module initialization. Patch by - Petr Viktorin. - -- bpo-23955: Add pyvenv.cfg option to suppress registry/environment lookup - for generating sys.path on Windows. - -- bpo-24257: Fixed system error in the comparison of faked - types.SimpleNamespace. - -- bpo-22939: Fixed integer overflow in iterator object. Patch by Clement - Rouault. - -- bpo-23985: Fix a possible buffer overrun when deleting a slice from the - front of a bytearray and then appending some other bytes data. - -- bpo-24102: Fixed exception type checking in standard error handlers. - -- bpo-15027: The UTF-32 encoder is now 3x to 7x faster. - -- bpo-23290: Optimize set_merge() for cases where the target is empty. - (Contributed by Serhiy Storchaka.) - -- bpo-2292: PEP 448: Additional Unpacking Generalizations. - -- bpo-24096: Make warnings.warn_explicit more robust against mutation of the - warnings.filters list. - -- bpo-23996: Avoid a crash when a delegated generator raises an unnormalized - StopIteration exception. Patch by Stefan Behnel. - -- bpo-23910: Optimize property() getter calls. Patch by Joe Jevnik. - -- bpo-23911: Move path-based importlib bootstrap code to a separate frozen - module. - -- bpo-24192: Fix namespace package imports. - -- bpo-24022: Fix tokenizer crash when processing undecodable source code. - -- bpo-9951: Added a hex() method to bytes, bytearray, and memoryview. - -- bpo-22906: PEP 479: Change StopIteration handling inside generators. - -- bpo-24017: PEP 492: Coroutines with async and await syntax. - -Library -------- - -- bpo-14373: Added C implementation of functools.lru_cache(). Based on - patches by Matt Joiner and Alexey Kachayev. - -- bpo-24230: The tempfile module now accepts bytes for prefix, suffix and - dir parameters and returns bytes in such situations (matching the os - module APIs). - -- bpo-22189: collections.UserString now supports __getnewargs__(), - __rmod__(), casefold(), format_map(), isprintable(), and maketrans(). - Patch by Joe Jevnik. - -- bpo-24244: Prevents termination when an invalid format string is - encountered on Windows in strftime. - -- bpo-23973: PEP 484: Add the typing module. - -- bpo-23086: The collections.abc.Sequence() abstract base class added - *start* and *stop* parameters to the index() mixin. Patch by Devin - Jeanpierre. - -- bpo-20035: Replaced the ``tkinter._fix`` module used for setting up the - Tcl/Tk environment on Windows with a private function in the ``_tkinter`` - module that makes no permanent changes to the environment. - -- bpo-24257: Fixed segmentation fault in sqlite3.Row constructor with faked - cursor type. - -- bpo-15836: assertRaises(), assertRaisesRegex(), assertWarns() and - assertWarnsRegex() assertments now check the type of the first argument to - prevent possible user error. Based on patch by Daniel Wagner-Hall. - -- bpo-9858: Add missing method stubs to _io.RawIOBase. Patch by Laura - Rupprecht. - -- bpo-22955: attrgetter, itemgetter and methodcaller objects in the operator - module now support pickling. Added readable and evaluable repr for these - objects. Based on patch by Josh Rosenberg. - -- bpo-22107: tempfile.gettempdir() and tempfile.mkdtemp() now try again when - a directory with the chosen name already exists on Windows as well as on - Unix. tempfile.mkstemp() now fails early if parent directory is not valid - (not exists or is a file) on Windows. - -- bpo-23780: Improved error message in os.path.join() with single argument. - -- bpo-6598: Increased time precision and random number range in - email.utils.make_msgid() to strengthen the uniqueness of the message ID. - -- bpo-24091: Fixed various crashes in corner cases in C implementation of - ElementTree. - -- bpo-21931: msilib.FCICreate() now raises TypeError in the case of a bad - argument instead of a ValueError with a bogus FCI error number. Patch by - Jeffrey Armstrong. - -- bpo-13866: *quote_via* argument added to urllib.parse.urlencode. - -- bpo-20098: New mangle_from policy option for email, default True for - compat32, but False for all other policies. - -- bpo-24211: The email library now supports RFC 6532: it can generate - headers using utf-8 instead of encoded words. - -- bpo-16314: Added support for the LZMA compression in distutils. - -- bpo-21804: poplib now supports RFC 6856 (UTF8). - -- bpo-18682: Optimized pprint functions for builtin scalar types. - -- bpo-22027: smtplib now supports RFC 6531 (SMTPUTF8). - -- bpo-23488: Random generator objects now consume 2x less memory on 64-bit. - -- bpo-1322: platform.dist() and platform.linux_distribution() functions are - now deprecated. Initial patch by Vajrasky Kok. - -- bpo-22486: Added the math.gcd() function. The fractions.gcd() function - now is deprecated. Based on patch by Mark Dickinson. - -- bpo-24064: Property() docstrings are now writeable. (Patch by Berker - Peksag.) - -- bpo-22681: Added support for the koi8_t encoding. - -- bpo-22682: Added support for the kz1048 encoding. - -- bpo-23796: peek and read1 methods of BufferedReader now raise ValueError - if they called on a closed object. Patch by John Hergenroeder. - -- bpo-21795: smtpd now supports the 8BITMIME extension whenever the new - *decode_data* constructor argument is set to False. - -- bpo-24155: optimize heapq.heapify() for better cache performance when - heapifying large lists. - -- bpo-21800: imaplib now supports RFC 5161 (enable), RFC 6855 - (utf8/internationalized email) and automatically encodes non-ASCII - usernames and passwords to UTF8. - -- bpo-20274: When calling a _sqlite.Connection, it now complains if passed - any keyword arguments. Previously it silently ignored them. - -- bpo-20274: Remove ignored and erroneous "kwargs" parameters from three - METH_VARARGS methods on _sqlite.Connection. - -- bpo-24134: assertRaises(), assertRaisesRegex(), assertWarns() and - assertWarnsRegex() checks now emits a deprecation warning when callable is - None or keyword arguments except msg is passed in the context manager - mode. - -- bpo-24018: Add a collections.abc.Generator abstract base class. - Contributed by Stefan Behnel. - -- bpo-23880: Tkinter's getint() and getdouble() now support Tcl_Obj. - Tkinter's getdouble() now supports any numbers (in particular int). - -- bpo-22619: Added negative limit support in the traceback module. Based on - patch by Dmitry Kazakov. - -- bpo-24094: Fix possible crash in json.encode with poorly behaved dict - subclasses. - -- bpo-9246: On POSIX, os.getcwd() now supports paths longer than 1025 bytes. - Patch written by William Orr. - -- bpo-17445: add difflib.diff_bytes() to support comparison of byte strings - (fixes a regression from Python 2). - -- bpo-23917: Fall back to sequential compilation when ProcessPoolExecutor - doesn't exist. Patch by Claudiu Popa. - -- bpo-23008: Fixed resolving attributes with boolean value is False in - pydoc. - -- Fix asyncio issue 235: LifoQueue and PriorityQueue's put didn't increment - unfinished tasks (this bug was introduced when JoinableQueue was merged - with Queue). - -- bpo-23908: os functions now reject paths with embedded null character on - Windows instead of silently truncating them. - -- bpo-23728: binascii.crc_hqx() could return an integer outside of the range - 0-0xffff for empty data. - -- bpo-23887: urllib.error.HTTPError now has a proper repr() representation. - Patch by Berker Peksag. - -- asyncio: New event loop APIs: set_task_factory() and get_task_factory(). - -- asyncio: async() function is deprecated in favour of ensure_future(). - -- bpo-24178: asyncio.Lock, Condition, Semaphore, and BoundedSemaphore - support new 'async with' syntax. Contributed by Yury Selivanov. - -- bpo-24179: Support 'async for' for asyncio.StreamReader. Contributed by - Yury Selivanov. - -- bpo-24184: Add AsyncIterator and AsyncIterable ABCs to collections.abc. - Contributed by Yury Selivanov. - -- bpo-22547: Implement informative __repr__ for inspect.BoundArguments. - Contributed by Yury Selivanov. - -- bpo-24190: Implement inspect.BoundArgument.apply_defaults() method. - Contributed by Yury Selivanov. - -- bpo-20691: Add 'follow_wrapped' argument to - inspect.Signature.from_callable() and inspect.signature(). Contributed by - Yury Selivanov. - -- bpo-24248: Deprecate inspect.Signature.from_function() and - inspect.Signature.from_builtin(). - -- bpo-23898: Fix inspect.classify_class_attrs() to support attributes with - overloaded __eq__ and __bool__. Patch by Mike Bayer. - -- bpo-24298: Fix inspect.signature() to correctly unwrap wrappers around - bound methods. - -IDLE ----- - -- bpo-23184: remove unused names and imports in idlelib. Initial patch by Al - Sweigart. - -Tests ------ - -- bpo-21520: test_zipfile no longer fails if the word 'bad' appears anywhere - in the name of the current directory. - -- bpo-9517: Move script_helper into the support package. Patch by Christie - Wilson. - -Documentation -------------- - -- bpo-22155: Add File Handlers subsection with createfilehandler to tkinter - doc. Remove obsolete example from FAQ. Patch by Martin Panter. - -- bpo-24029: Document the name binding behavior for submodule imports. - -- bpo-24077: Fix typo in man page for -I command option: -s, not -S - -Tools/Demos ------------ - -- bpo-24000: Improved Argument Clinic's mapping of converters to legacy - "format units". Updated the documentation to match. - -- bpo-24001: Argument Clinic converters now use accept={type} instead of - types={'type'} to specify the types the converter accepts. - -- bpo-23330: h2py now supports arbitrary filenames in #include. - -- bpo-24031: make patchcheck now supports git checkouts, too. - - -What's New in Python 3.5.0 alpha 4? -=================================== - -*Release date: 2015-04-19* - -Core and Builtins ------------------ - -- bpo-22980: Under Linux, GNU/KFreeBSD and the Hurd, C extensions now - include the architecture triplet in the extension name, to make it easy to - test builds for different ABIs in the same working tree. Under OS X, the - extension name now includes :pep:`3149`-style information. - -- bpo-22631: Added Linux-specific socket constant CAN_RAW_FD_FRAMES. Patch - courtesy of Joe Jevnik. - -- bpo-23731: Implement :pep:`488`: removal of .pyo files. - -- bpo-23726: Don't enable GC for user subclasses of non-GC types that don't - add any new fields. Patch by Eugene Toder. - -- bpo-23309: Avoid a deadlock at shutdown if a daemon thread is aborted - while it is holding a lock to a buffered I/O object, and the main thread - tries to use the same I/O object (typically stdout or stderr). A fatal - error is emitted instead. - -- bpo-22977: Fixed formatting Windows error messages on Wine. Patch by - Martin Panter. - -- bpo-23466: %c, %o, %x, and %X in bytes formatting now raise TypeError on - non-integer input. - -- bpo-24044: Fix possible null pointer dereference in list.sort in out of - memory conditions. - -- bpo-21354: PyCFunction_New function is exposed by python DLL again. - -Library -------- - -- bpo-23840: tokenize.open() now closes the temporary binary file on error - to fix a resource warning. - -- bpo-16914: new debuglevel 2 in smtplib adds timestamps to debug output. - -- bpo-7159: urllib.request now supports sending auth credentials - automatically after the first 401. This enhancement is a superset of the - enhancement from issue #19494 and supersedes that change. - -- bpo-23703: Fix a regression in urljoin() introduced in 901e4e52b20a. Patch - by Demian Brecht. - -- bpo-4254: Adds _curses.update_lines_cols(). Patch by Arnon Yaari - -- bpo-19933: Provide default argument for ndigits in round. Patch by - Vajrasky Kok. - -- bpo-23193: Add a numeric_owner parameter to tarfile.TarFile.extract and - tarfile.TarFile.extractall. Patch by Michael Vogt and Eric Smith. - -- bpo-23342: Add a subprocess.run() function than returns a CalledProcess - instance for a more consistent API than the existing call* functions. - -- bpo-21217: inspect.getsourcelines() now tries to compute the start and end - lines from the code object, fixing an issue when a lambda function is used - as decorator argument. Patch by Thomas Ballinger and Allison Kaptur. - -- bpo-24521: Fix possible integer overflows in the pickle module. - -- bpo-22931: Allow '[' and ']' in cookie values. - -- The keywords attribute of functools.partial is now always a dictionary. - -- bpo-23811: Add missing newline to the PyCompileError error message. Patch - by Alex Shkop. - -- bpo-21116: Avoid blowing memory when allocating a multiprocessing shared - array that's larger than 50% of the available RAM. Patch by Médéric - Boquien. - -- bpo-22982: Improve BOM handling when seeking to multiple positions of a - writable text file. - -- bpo-23464: Removed deprecated asyncio JoinableQueue. - -- bpo-23529: Limit the size of decompressed data when reading from GzipFile, - BZ2File or LZMAFile. This defeats denial of service attacks using - compressed bombs (i.e. compressed payloads which decompress to a huge - size). Patch by Martin Panter and Nikolaus Rath. - -- bpo-21859: Added Python implementation of io.FileIO. - -- bpo-23865: close() methods in multiple modules now are idempotent and more - robust at shutdown. If they need to release multiple resources, all are - released even if errors occur. - -- bpo-23400: Raise same exception on both Python 2 and 3 if sem_open is not - available. Patch by Davin Potts. - -- bpo-10838: The subprocess now module includes SubprocessError and - TimeoutError in its list of exported names for the users wild enough to - use ``from subprocess import *``. - -- bpo-23411: Added DefragResult, ParseResult, SplitResult, - DefragResultBytes, ParseResultBytes, and SplitResultBytes to - urllib.parse.__all__. Patch by Martin Panter. - -- bpo-23881: urllib.request.ftpwrapper constructor now closes the socket if - the FTP connection failed to fix a ResourceWarning. - -- bpo-23853: :meth:`socket.socket.sendall` does no more reset the socket - timeout each time data is sent successfully. The socket timeout is now the - maximum total duration to send all data. - -- bpo-22721: An order of multiline pprint output of set or dict containing - orderable and non-orderable elements no longer depends on iteration order - of set or dict. - -- bpo-15133: _tkinter.tkapp.getboolean() now supports Tcl_Obj and always - returns bool. tkinter.BooleanVar now validates input values (accepted - bool, int, str, and Tcl_Obj). tkinter.BooleanVar.get() now always returns - bool. - -- bpo-10590: xml.sax.parseString() now supports string argument. - -- bpo-23338: Fixed formatting ctypes error messages on Cygwin. Patch by - Makoto Kato. - -- bpo-15582: inspect.getdoc() now follows inheritance chains. - -- bpo-2175: SAX parsers now support a character stream of InputSource - object. - -- bpo-16840: Tkinter now supports 64-bit integers added in Tcl 8.4 and - arbitrary precision integers added in Tcl 8.5. - -- bpo-23834: Fix socket.sendto(), use the C Py_ssize_t type to store the - result of sendto() instead of the C int type. - -- bpo-23618: :meth:`socket.socket.connect` now waits until the connection - completes instead of raising :exc:`InterruptedError` if the connection is - interrupted by signals, signal handlers don't raise an exception and the - socket is blocking or has a timeout. :meth:`socket.socket.connect` still - raise :exc:`InterruptedError` for non-blocking sockets. - -- bpo-21526: Tkinter now supports new boolean type in Tcl 8.5. - -- bpo-23836: Fix the faulthandler module to handle reentrant calls to its - signal handlers. - -- bpo-23838: linecache now clears the cache and returns an empty result on - MemoryError. - -- bpo-10395: Added os.path.commonpath(). Implemented in posixpath and - ntpath. Based on patch by Rafik Draoui. - -- bpo-23611: Serializing more "lookupable" objects (such as unbound methods - or nested classes) now are supported with pickle protocols < 4. - -- bpo-13583: sqlite3.Row now supports slice indexing. - -- bpo-18473: Fixed 2to3 and 3to2 compatible pickle mappings. Fixed - ambiguous reverse mappings. Added many new mappings. Import mapping is - no longer applied to modules already mapped with full name mapping. - -- bpo-23485: select.select() is now retried automatically with the - recomputed timeout when interrupted by a signal, except if the signal - handler raises an exception. This change is part of the :pep:`475`. - -- bpo-23752: When built from an existing file descriptor, io.FileIO() now - only calls fstat() once. Before fstat() was called twice, which was not - necessary. - -- bpo-23704: collections.deque() objects now support __add__, __mul__, and - __imul__(). - -- bpo-23171: csv.Writer.writerow() now supports arbitrary iterables. - -- bpo-23745: The new email header parser now handles duplicate MIME - parameter names without error, similar to how get_param behaves. - -- bpo-22117: Fix os.utime(), it now rounds the timestamp towards minus - infinity (-inf) instead of rounding towards zero. - -- bpo-23310: Fix MagicMock's initializer to work with __methods__, just like - configure_mock(). Patch by Kasia Jachim. - -Build ------ - -- bpo-23817: FreeBSD now uses "1.0" in the SOVERSION as other operating - systems, instead of just "1". - -- bpo-23501: Argument Clinic now generates code into separate files by - default. - -Tests ------ - -- bpo-23799: Added test.support.start_threads() for running and cleaning up - multiple threads. - -- bpo-22390: test.regrtest now emits a warning if temporary files or - directories are left after running a test. - -Tools/Demos ------------ - -- bpo-18128: pygettext now uses standard +NNNN format in the - POT-Creation-Date header. - -- bpo-23935: Argument Clinic's understanding of format units accepting - bytes, bytearrays, and buffers is now consistent with both the - documentation and the implementation. - -- bpo-23944: Argument Clinic now wraps long impl prototypes at column 78. - -- bpo-20586: Argument Clinic now ensures that functions without docstrings - have signatures. - -- bpo-23492: Argument Clinic now generates argument parsing code with - PyArg_Parse instead of PyArg_ParseTuple if possible. - -- bpo-23500: Argument Clinic is now smarter about generating the "#ifndef" - (empty) definition of the methoddef macro: it's only generated once, even - if Argument Clinic processes the same symbol multiple times, and it's - emitted at the end of all processing rather than immediately after the - first use. - -C API ------ - -- bpo-23998: PyImport_ReInitLock() now checks for lock allocation error - - -What's New in Python 3.5.0 alpha 3? -=================================== - -*Release date: 2015-03-28* - -Core and Builtins ------------------ - -- bpo-23573: Increased performance of string search operations (str.find, - str.index, str.count, the in operator, str.split, str.partition) with - arguments of different kinds (UCS1, UCS2, UCS4). - -- bpo-23753: Python doesn't support anymore platforms without stat() or - fstat(), these functions are always required. - -- bpo-23681: The -b option now affects comparisons of bytes with int. - -- bpo-23632: Memoryviews now allow tuple indexing (including for - multi-dimensional memoryviews). - -- bpo-23192: Fixed generator lambdas. Patch by Bruno Cauet. - -- bpo-23629: Fix the default __sizeof__ implementation for variable-sized - objects. - -Library -------- - -- bpo-14260: The groupindex attribute of regular expression pattern object - now is non-modifiable mapping. - -- bpo-23792: Ignore KeyboardInterrupt when the pydoc pager is active. This - mimics the behavior of the standard unix pagers, and prevents pipepager - from shutting down while the pager itself is still running. - -- bpo-23775: pprint() of OrderedDict now outputs the same representation as - repr(). - -- bpo-23765: Removed IsBadStringPtr calls in ctypes - -- bpo-22364: Improved some re error messages using regex for hints. - -- bpo-23742: ntpath.expandvars() no longer loses unbalanced single quotes. - -- bpo-21717: The zipfile.ZipFile.open function now supports 'x' (exclusive - creation) mode. - -- bpo-21802: The reader in BufferedRWPair now is closed even when closing - writer failed in BufferedRWPair.close(). - -- bpo-23622: Unknown escapes in regular expressions that consist of ``'\'`` - and ASCII letter now raise a deprecation warning and will be forbidden in - Python 3.6. - -- bpo-23671: string.Template now allows specifying the "self" parameter as a - keyword argument. string.Formatter now allows specifying the "self" and - the "format_string" parameters as keyword arguments. - -- bpo-23502: The pprint module now supports mapping proxies. - -- bpo-17530: pprint now wraps long bytes objects and bytearrays. - -- bpo-22687: Fixed some corner cases in breaking words in tetxtwrap. Got rid - of quadratic complexity in breaking long words. - -- bpo-4727: The copy module now uses pickle protocol 4 (PEP 3154) and - supports copying of instances of classes whose __new__ method takes - keyword-only arguments. - -- bpo-23491: Added a zipapp module to support creating executable zip file - archives of Python code. Registered ".pyz" and ".pyzw" extensions on - Windows for these archives (PEP 441). - -- bpo-23657: Avoid explicit checks for str in zipapp, adding support for - pathlib.Path objects as arguments. - -- bpo-23688: Added support of arbitrary bytes-like objects and avoided - unnecessary copying of memoryview in gzip.GzipFile.write(). Original patch - by Wolfgang Maier. - -- bpo-23252: Added support for writing ZIP files to unseekable streams. - -- bpo-23647: Increase imaplib's MAXLINE to accommodate modern mailbox sizes. - -- bpo-23539: If body is None, http.client.HTTPConnection.request now sets - Content-Length to 0 for PUT, POST, and PATCH headers to avoid 411 errors - from some web servers. - -- bpo-22351: The nntplib.NNTP constructor no longer leaves the connection - and socket open until the garbage collector cleans them up. Patch by - Martin Panter. - -- bpo-23704: collections.deque() objects now support methods for index(), - insert(), and copy(). This allows deques to be registered as a - MutableSequence and it improves their substitutability for lists. - -- bpo-23715: :func:`signal.sigwaitinfo` and :func:`signal.sigtimedwait` are - now retried when interrupted by a signal not in the *sigset* parameter, if - the signal handler does not raise an exception. signal.sigtimedwait() - recomputes the timeout with a monotonic clock when it is retried. - -- bpo-23001: Few functions in modules mmap, ossaudiodev, socket, ssl, and - codecs, that accepted only read-only bytes-like object now accept writable - bytes-like object too. - -- bpo-23646: If time.sleep() is interrupted by a signal, the sleep is now - retried with the recomputed delay, except if the signal handler raises an - exception (PEP 475). - -- bpo-23136: _strptime now uniformly handles all days in week 0, including - Dec 30 of previous year. Based on patch by Jim Carroll. - -- bpo-23700: Iterator of NamedTemporaryFile now keeps a reference to - NamedTemporaryFile instance. Patch by Bohuslav Kabrda. - -- bpo-22903: The fake test case created by unittest.loader when it fails - importing a test module is now picklable. - -- bpo-22181: On Linux, os.urandom() now uses the new getrandom() syscall if - available, syscall introduced in the Linux kernel 3.17. It is more - reliable and more secure, because it avoids the need of a file descriptor - and waits until the kernel has enough entropy. - -- bpo-2211: Updated the implementation of the http.cookies.Morsel class. - Setting attributes key, value and coded_value directly now is deprecated. - update() and setdefault() now transform and check keys. Comparing for - equality now takes into account attributes key, value and coded_value. - copy() now returns a Morsel, not a dict. repr() now contains all - attributes. Optimized checking keys and quoting values. Added new tests. - Original patch by Demian Brecht. - -- bpo-18983: Allow selection of output units in timeit. Patch by Julian - Gindi. - -- bpo-23631: Fix traceback.format_list when a traceback has been mutated. - -- bpo-23568: Add rdivmod support to MagicMock() objects. Patch by Håkan - Lövdahl. - -- bpo-2052: Add charset parameter to HtmlDiff.make_file(). - -- bpo-23668: Support os.truncate and os.ftruncate on Windows. - -- bpo-23138: Fixed parsing cookies with absent keys or values in cookiejar. - Patch by Demian Brecht. - -- bpo-23051: multiprocessing.Pool methods imap() and imap_unordered() now - handle exceptions raised by an iterator. Patch by Alon Diamant and Davin - Potts. - -- bpo-23581: Add matmul support to MagicMock. Patch by Håkan Lövdahl. - -- bpo-23566: enable(), register(), dump_traceback() and - dump_traceback_later() functions of faulthandler now accept file - descriptors. Patch by Wei Wu. - -- bpo-22928: Disabled HTTP header injections in http.client. Original patch - by Demian Brecht. - -- bpo-23615: Modules bz2, tarfile and tokenize now can be reloaded with - imp.reload(). Patch by Thomas Kluyver. - -- bpo-23605: os.walk() now calls os.scandir() instead of os.listdir(). The - usage of os.scandir() reduces the number of calls to os.stat(). Initial - patch written by Ben Hoyt. - -Build ------ - -- bpo-23585: make patchcheck will ensure the interpreter is built. - -Tests ------ - -- bpo-23583: Added tests for standard IO streams in IDLE. - -- bpo-22289: Prevent test_urllib2net failures due to ftp connection timeout. - -Tools/Demos ------------ - -- bpo-22826: The result of open() in Tools/freeze/bkfile.py is now better - compatible with regular files (in particular it now supports the context - management protocol). - - -What's New in Python 3.5.0 alpha 2? -=================================== - -*Release date: 2015-03-09* - -Core and Builtins ------------------ - -- bpo-23571: PyObject_Call() and PyCFunction_Call() now raise a SystemError - if a function returns a result and raises an exception. The SystemError is - chained to the previous exception. - -Library -------- - -- bpo-22524: New os.scandir() function, part of the :pep:`471`: - "os.scandir() function -- a better and faster directory iterator". Patch - written by Ben Hoyt. - -- bpo-23103: Reduced the memory consumption of IPv4Address and IPv6Address. - -- bpo-21793: BaseHTTPRequestHandler again logs response code as numeric, not - as stringified enum. Patch by Demian Brecht. - -- bpo-23476: In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST - flag on certificate stores when it is available. - -- bpo-23576: Avoid stalling in SSL reads when EOF has been reached in the - SSL layer but the underlying connection hasn't been closed. - -- bpo-23504: Added an __all__ to the types module. - -- bpo-23563: Optimized utility functions in urllib.parse. - -- bpo-7830: Flatten nested functools.partial. - -- bpo-20204: Added the __module__ attribute to _tkinter classes. - -- bpo-19980: Improved help() for non-recognized strings. help('') now shows - the help on str. help('help') now shows the help on help(). Original - patch by Mark Lawrence. - -- bpo-23521: Corrected pure python implementation of timedelta division. - Eliminated OverflowError from ``timedelta * float`` for some floats; - Corrected rounding in timedelta true division. - -- bpo-21619: Popen objects no longer leave a zombie after exit in the with - statement if the pipe was broken. Patch by Martin Panter. - -- bpo-22936: Make it possible to show local variables in tracebacks for both - the traceback module and unittest. - -- bpo-15955: Add an option to limit the output size in bz2.decompress(). - Patch by Nikolaus Rath. - -- bpo-6639: Module-level turtle functions no longer raise TclError after - closing the window. - -- bpo-814253: Group references and conditional group references now work in - lookbehind assertions in regular expressions. (See also: bpo-9179) - -- bpo-23215: Multibyte codecs with custom error handlers that ignores errors - consumed too much memory and raised SystemError or MemoryError. Original - patch by Aleksi Torhamo. - -- bpo-5700: io.FileIO() called flush() after closing the file. flush() was - not called in close() if closefd=False. - -- bpo-23374: Fixed pydoc failure with non-ASCII files when stdout encoding - differs from file system encoding (e.g. on Mac OS). - -- bpo-23481: Remove RC4 from the SSL module's default cipher list. - -- bpo-21548: Fix pydoc.synopsis() and pydoc.apropos() on modules with empty - docstrings. - -- bpo-22885: Fixed arbitrary code execution vulnerability in the dbm.dumb - module. Original patch by Claudiu Popa. - -- bpo-23239: ssl.match_hostname() now supports matching of IP addresses. - -- bpo-23146: Fix mishandling of absolute Windows paths with forward slashes - in pathlib. - -- bpo-23096: Pickle representation of floats with protocol 0 now is the same - for both Python and C implementations. - -- bpo-19105: pprint now more efficiently uses free space at the right. - -- bpo-14910: Add allow_abbrev parameter to argparse.ArgumentParser. Patch by - Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson. - -- bpo-21717: tarfile.open() now supports 'x' (exclusive creation) mode. - -- bpo-23344: marshal.dumps() is now 20-25% faster on average. - -- bpo-20416: marshal.dumps() with protocols 3 and 4 is now 40-50% faster on - average. - -- bpo-23421: Fixed compression in tarfile CLI. Patch by wdv4758h. - -- bpo-23367: Fix possible overflows in the unicodedata module. - -- bpo-23361: Fix possible overflow in Windows subprocess creation code. - -- logging.handlers.QueueListener now takes a respect_handler_level keyword - argument which, if set to True, will pass messages to handlers taking - handler levels into account. - -- bpo-19705: turtledemo now has a visual sorting algorithm demo. Original - patch from Jason Yeo. - -- bpo-23801: Fix issue where cgi.FieldStorage did not always ignore the - entire preamble to a multipart body. - -Build ------ - -- bpo-23445: pydebug builds now use "gcc -Og" where possible, to make the - resulting executable faster. - -- bpo-23686: Update OS X 10.5 installer build to use OpenSSL 1.0.2a. - -C API ------ - -- bpo-20204: Deprecation warning is now raised for builtin types without the - __module__ attribute. - -Windows -------- - -- bpo-23465: Implement :pep:`486` - Make the Python Launcher aware of - virtual environments. Patch by Paul Moore. - -- bpo-23437: Make user scripts directory versioned on Windows. Patch by Paul - Moore. - - -What's New in Python 3.5.0 alpha 1? -=================================== - -*Release date: 2015-02-08* - -Core and Builtins ------------------ - -- bpo-23285: PEP 475 - EINTR handling. - -- bpo-22735: Fix many edge cases (including crashes) involving custom mro() - implementations. - -- bpo-22896: Avoid using PyObject_AsCharBuffer(), PyObject_AsReadBuffer() - and PyObject_AsWriteBuffer(). - -- bpo-21295: Revert some changes (issue #16795) to AST line numbers and - column offsets that constituted a regression. - -- bpo-22986: Allow changing an object's __class__ between a dynamic type and - static type in some cases. - -- bpo-15859: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() and - PyUnicode_EncodeCodePage() now raise an exception if the object is not a - Unicode object. For PyUnicode_EncodeFSDefault(), it was already the case - on platforms other than Windows. Patch written by Campbell Barton. - -- bpo-21408: The default __ne__() now returns NotImplemented if __eq__() - returned NotImplemented. Original patch by Martin Panter. - -- bpo-23321: Fixed a crash in str.decode() when error handler returned - replacement string longer than malformed input data. - -- bpo-22286: The "backslashreplace" error handlers now works with decoding - and translating. - -- bpo-23253: Delay-load ShellExecute[AW] in os.startfile for reduced startup - overhead on Windows. - -- bpo-22038: pyatomic.h now uses stdatomic.h or GCC built-in functions for - atomic memory access if available. Patch written by Vitor de Lima and - Gustavo Temple. - -- bpo-20284: %-interpolation (aka printf) formatting added for bytes and - bytearray. - -- bpo-23048: Fix jumping out of an infinite while loop in the pdb. - -- bpo-20335: bytes constructor now raises TypeError when encoding or errors - is specified with non-string argument. Based on patch by Renaud Blanch. - -- bpo-22834: If the current working directory ends up being set to a - non-existent directory then import will no longer raise FileNotFoundError. - -- bpo-22869: Move the interpreter startup & shutdown code to a new dedicated - pylifecycle.c module - -- bpo-22847: Improve method cache efficiency. - -- bpo-22335: Fix crash when trying to enlarge a bytearray to 0x7fffffff - bytes on a 32-bit platform. - -- bpo-22653: Fix an assertion failure in debug mode when doing a reentrant - dict insertion in debug mode. - -- bpo-22643: Fix integer overflow in Unicode case operations (upper, lower, - title, swapcase, casefold). - -- bpo-17636: Circular imports involving relative imports are now supported. - -- bpo-22604: Fix assertion error in debug mode when dividing a complex - number by (nan+0j). - -- bpo-21052: Do not raise ImportWarning when sys.path_hooks or sys.meta_path - are set to None. - -- bpo-16518: Use 'bytes-like object required' in error messages that - previously used the far more cryptic "'x' does not support the buffer - protocol. - -- bpo-22470: Fixed integer overflow issues in "backslashreplace", - "xmlcharrefreplace", and "surrogatepass" error handlers. - -- bpo-22540: speed up ``PyObject_IsInstance`` and ``PyObject_IsSubclass`` in - the common case that the second argument has metaclass ``type``. - -- bpo-18711: Add a new ``PyErr_FormatV`` function, similar to - ``PyErr_Format`` but accepting a ``va_list`` argument. - -- bpo-22520: Fix overflow checking when generating the repr of a unicode - object. - -- bpo-22519: Fix overflow checking in PyBytes_Repr. - -- bpo-22518: Fix integer overflow issues in latin-1 encoding. - -- bpo-16324: _charset parameter of MIMEText now also accepts - email.charset.Charset instances. Initial patch by Claude Paroz. - -- bpo-1764286: Fix inspect.getsource() to support decorated functions. Patch - by Claudiu Popa. - -- bpo-18554: os.__all__ includes posix functions. - -- bpo-21391: Use os.path.abspath in the shutil module. - -- bpo-11471: avoid generating a JUMP_FORWARD instruction at the end of an - if-block if there is no else-clause. Original patch by Eugene Toder. - -- bpo-22215: Now ValueError is raised instead of TypeError when str or bytes - argument contains not permitted null character or byte. - -- bpo-22258: Fix the internal function set_inheritable() on Illumos. This - platform exposes the function ``ioctl(FIOCLEX)``, but calling it fails - with errno is ENOTTY: "Inappropriate ioctl for device". set_inheritable() - now falls back to the slower ``fcntl()`` (``F_GETFD`` and then - ``F_SETFD``). - -- bpo-21389: Displaying the __qualname__ of the underlying function in the - repr of a bound method. - -- bpo-22206: Using pthread, PyThread_create_key() now sets errno to ENOMEM - and returns -1 (error) on integer overflow. - -- bpo-20184: Argument Clinic based signature introspection added for 30 of - the builtin functions. - -- bpo-22116: C functions and methods (of the 'builtin_function_or_method' - type) can now be weakref'ed. Patch by Wei Wu. - -- bpo-22077: Improve index error messages for bytearrays, bytes, lists, and - tuples by adding 'or slices'. Added ', not <typename>' for bytearrays. - Original patch by Claudiu Popa. - -- bpo-20179: Apply Argument Clinic to bytes and bytearray. Patch by Tal - Einat. - -- bpo-22082: Clear interned strings in slotdefs. - -- Upgrade Unicode database to Unicode 7.0.0. - -- bpo-21897: Fix a crash with the f_locals attribute with closure variables - when frame.clear() has been called. - -- bpo-21205: Add a new ``__qualname__`` attribute to generator, the - qualified name, and use it in the representation of a generator - (``repr(gen)``). The default name of the generator (``__name__`` - attribute) is now get from the function instead of the code. Use - ``gen.gi_code.co_name`` to get the name of the code. - -- bpo-21669: With the aid of heuristics in SyntaxError.__init__, the parser - now attempts to generate more meaningful (or at least more search engine - friendly) error messages when "exec" and "print" are used as statements. - -- bpo-21642: In the conditional if-else expression, allow an integer written - with no space between itself and the ``else`` keyword (e.g. ``True if - 42else False``) to be valid syntax. - -- bpo-21523: Fix over-pessimistic computation of the stack effect of some - opcodes in the compiler. This also fixes a quadratic compilation time - issue noticeable when compiling code with a large number of "and" and "or" - operators. - -- bpo-21418: Fix a crash in the builtin function super() when called without - argument and without current frame (ex: embedded Python). - -- bpo-21425: Fix flushing of standard streams in the interactive - interpreter. - -- bpo-21435: In rare cases, when running finalizers on objects in cyclic - trash a bad pointer dereference could occur due to a subtle flaw in - internal iteration logic. - -- bpo-21377: PyBytes_Concat() now tries to concatenate in-place when the - first argument has a reference count of 1. Patch by Nikolaus Rath. - -- bpo-20355: -W command line options now have higher priority than the - PYTHONWARNINGS environment variable. Patch by Arfrever. - -- bpo-21274: Define PATH_MAX for GNU/Hurd in Python/pythonrun.c. - -- bpo-20904: Support setting FPU precision on m68k. - -- bpo-21209: Fix sending tuples to custom generator objects with the yield - from syntax. - -- bpo-21193: pow(a, b, c) now raises ValueError rather than TypeError when b - is negative. Patch by Josh Rosenberg. - -- bpo-21176: PEP 465: Add the '@' operator for matrix multiplication. - -- bpo-21134: Fix segfault when str is called on an uninitialized - UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object. - -- bpo-19537: Fix PyUnicode_DATA() alignment under m68k. Patch by Andreas - Schwab. - -- bpo-20929: Add a type cast to avoid shifting a negative number. - -- bpo-20731: Properly position in source code files even if they are opened - in text mode. Patch by Serhiy Storchaka. - -- bpo-20637: Key-sharing now also works for instance dictionaries of - subclasses. Patch by Peter Ingebretson. - -- bpo-8297: Attributes missing from modules now include the module name in - the error text. Original patch by ysj.ray. - -- bpo-19995: %c, %o, %x, and %X now raise TypeError on non-integer input. - -- bpo-19655: The ASDL parser - used by the build process to generate code - for managing the Python AST in C - was rewritten. The new parser is self - contained and does not require to carry long the spark.py parser-generator - library; spark.py was removed from the source base. - -- bpo-12546: Allow ``\x00`` to be used as a fill character when using str, - int, float, and complex __format__ methods. - -- bpo-20480: Add ipaddress.reverse_pointer. Patch by Leon Weber. - -- bpo-13598: Modify string.Formatter to support auto-numbering of - replacement fields. It now matches the behavior of str.format() in this - regard. Patches by Phil Elson and Ramchandra Apte. - -- bpo-8931: Make alternate formatting ('#') for type 'c' raise an exception. - In versions prior to 3.5, '#' with 'c' had no effect. Now specifying it is - an error. Patch by Torsten Landschoff. - -- bpo-23165: Perform overflow checks before allocating memory in the - _Py_char2wchar function. - -Library -------- - -- bpo-23399: pyvenv creates relative symlinks where possible. - -- bpo-20289: cgi.FieldStorage() now supports the context management - protocol. - -- bpo-13128: Print response headers for CONNECT requests when debuglevel > - 0. Patch by Demian Brecht. - -- bpo-15381: Optimized io.BytesIO to make less allocations and copyings. - -- bpo-22818: Splitting on a pattern that could match an empty string now - raises a warning. Patterns that can only match empty strings are now - rejected. - -- bpo-23099: Closing io.BytesIO with exported buffer is rejected now to - prevent corrupting exported buffer. - -- bpo-23326: Removed __ne__ implementations. Since fixing default __ne__ - implementation in issue #21408 they are redundant. - -- bpo-23363: Fix possible overflow in itertools.permutations. - -- bpo-23364: Fix possible overflow in itertools.product. - -- bpo-23366: Fixed possible integer overflow in itertools.combinations. - -- bpo-23369: Fixed possible integer overflow in - _json.encode_basestring_ascii. - -- bpo-23353: Fix the exception handling of generators in - PyEval_EvalFrameEx(). At entry, save or swap the exception state even if - PyEval_EvalFrameEx() is called with throwflag=0. At exit, the exception - state is now always restored or swapped, not only if why is WHY_YIELD or - WHY_RETURN. Patch co-written with Antoine Pitrou. - -- bpo-14099: Restored support of writing ZIP files to tellable but - non-seekable streams. - -- bpo-14099: Writing to ZipFile and reading multiple ZipExtFiles is - threadsafe now. - -- bpo-19361: JSON decoder now raises JSONDecodeError instead of ValueError. - -- bpo-18518: timeit now rejects statements which can't be compiled outside a - function or a loop (e.g. "return" or "break"). - -- bpo-23094: Fixed readline with frames in Python implementation of pickle. - -- bpo-23268: Fixed bugs in the comparison of ipaddress classes. - -- bpo-21408: Removed incorrect implementations of __ne__() which didn't - returned NotImplemented if __eq__() returned NotImplemented. The default - __ne__() now works correctly. - -- bpo-19996: :class:`email.feedparser.FeedParser` now handles (malformed) - headers with no key rather than assuming the body has started. - -- bpo-20188: Support Application-Layer Protocol Negotiation (ALPN) in the - ssl module. - -- bpo-23133: Pickling of ipaddress objects now produces more compact and - portable representation. - -- bpo-23248: Update ssl error codes from latest OpenSSL git master. - -- bpo-23266: Much faster implementation of ipaddress.collapse_addresses() - when there are many non-consecutive addresses. - -- bpo-23098: 64-bit dev_t is now supported in the os module. - -- bpo-21817: When an exception is raised in a task submitted to a - ProcessPoolExecutor, the remote traceback is now displayed in the parent - process. Patch by Claudiu Popa. - -- bpo-15955: Add an option to limit output size when decompressing LZMA - data. Patch by Nikolaus Rath and Martin Panter. - -- bpo-23250: In the http.cookies module, capitalize "HttpOnly" and "Secure" - as they are written in the standard. - -- bpo-23063: In the distutils' check command, fix parsing of reST with code - or code-block directives. - -- bpo-23209: selectors.BaseSelector.get_key() now raises a RuntimeError if - the selector is closed. And selectors.BaseSelector.close() now clears its - internal reference to the selector mapping to break a reference cycle. - Initial patch written by Martin Richard. (See also: bpo-23225) - -- bpo-17911: Provide a way to seed the linecache for a PEP-302 module - without actually loading the code. - -- bpo-17911: Provide a new object API for traceback, including the ability - to not lookup lines at all until the traceback is actually rendered, - without any trace of the original objects being kept alive. - -- bpo-19777: Provide a home() classmethod on Path objects. Contributed by - Victor Salgado and Mayank Tripathi. - -- bpo-23206: Make ``json.dumps(..., ensure_ascii=False)`` as fast as the - default case of ``ensure_ascii=True``. Patch by Naoki Inada. - -- bpo-23185: Add math.inf and math.nan constants. - -- bpo-23186: Add ssl.SSLObject.shared_ciphers() and - ssl.SSLSocket.shared_ciphers() to fetch the client's list ciphers sent at - handshake. - -- bpo-23143: Remove compatibility with OpenSSLs older than 0.9.8. - -- bpo-23132: Improve performance and introspection support of comparison - methods created by functool.total_ordering. - -- bpo-19776: Add an expanduser() method on Path objects. - -- bpo-23112: Fix SimpleHTTPServer to correctly carry the query string and - fragment when it redirects to add a trailing slash. - -- bpo-21793: Added http.HTTPStatus enums (i.e. HTTPStatus.OK, - HTTPStatus.NOT_FOUND). Patch by Demian Brecht. - -- bpo-23093: In the io, module allow more operations to work on detached - streams. - -- bpo-23111: In the ftplib, make ssl.PROTOCOL_SSLv23 the default protocol - version. - -- bpo-22585: On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(), - instead of reading /dev/urandom, to get pseudo-random bytes. - -- bpo-19104: pprint now produces evaluable output for wrapped strings. - -- bpo-23071: Added missing names to codecs.__all__. Patch by Martin Panter. - -- bpo-22783: Pickling now uses the NEWOBJ opcode instead of the NEWOBJ_EX - opcode if possible. - -- bpo-15513: Added a __sizeof__ implementation for pickle classes. - -- bpo-19858: pickletools.optimize() now aware of the MEMOIZE opcode, can - produce more compact result and no longer produces invalid output if input - data contains MEMOIZE opcodes together with PUT or BINPUT opcodes. - -- bpo-22095: Fixed HTTPConnection.set_tunnel with default port. The port - value in the host header was set to "None". Patch by Demian Brecht. - -- bpo-23016: A warning no longer produces an AttributeError when the program - is run with pythonw.exe. - -- bpo-21775: shutil.copytree(): fix crash when copying to VFAT. An exception - handler assumed that OSError objects always have a 'winerror' attribute. - That is not the case, so the exception handler itself raised - AttributeError when run on Linux (and, presumably, any other non-Windows - OS). Patch by Greg Ward. - -- bpo-1218234: Fix inspect.getsource() to load updated source of reloaded - module. Initial patch by Berker Peksag. - -- bpo-21740: Support wrapped callables in doctest. Patch by Claudiu Popa. - -- bpo-23009: Make sure selectors.EpollSelector.select() works when no FD is - registered. - -- bpo-22959: In the constructor of http.client.HTTPSConnection, prefer the - context's check_hostname attribute over the *check_hostname* parameter. - -- bpo-22696: Add function :func:`sys.is_finalizing` to know about - interpreter shutdown. - -- bpo-16043: Add a default limit for the amount of data - xmlrpclib.gzip_decode will return. This resolves :cve:`2013-1753`. - -- bpo-14099: ZipFile.open() no longer reopen the underlying file. Objects - returned by ZipFile.open() can now operate independently of the ZipFile - even if the ZipFile was created by passing in a file-like object as the - first argument to the constructor. - -- bpo-22966: Fix __pycache__ pyc file name clobber when pyc_compile is asked - to compile a source file containing multiple dots in the source file name. - -- bpo-21971: Update turtledemo doc and add module to the index. - -- bpo-21032: Fixed socket leak if HTTPConnection.getresponse() fails. - Original patch by Martin Panter. - -- bpo-22407: Deprecated the use of re.LOCALE flag with str patterns or - re.ASCII. It was newer worked. - -- bpo-22902: The "ip" command is now used on Linux to determine MAC address - in uuid.getnode(). Patch by Bruno Cauet. - -- bpo-22960: Add a context argument to xmlrpclib.ServerProxy constructor. - -- bpo-22389: Add contextlib.redirect_stderr(). - -- bpo-21356: Make ssl.RAND_egd() optional to support LibreSSL. The - availability of the function is checked during the compilation. Patch - written by Bernard Spil. - -- bpo-22915: SAX parser now supports files opened with file descriptor or - bytes path. - -- bpo-22609: Constructors and update methods of mapping classes in the - collections module now accept the self keyword argument. - -- bpo-22940: Add readline.append_history_file. - -- bpo-19676: Added the "namereplace" error handler. - -- bpo-22788: Add *context* parameter to logging.handlers.HTTPHandler. - -- bpo-22921: Allow SSLContext to take the *hostname* parameter even if - OpenSSL doesn't support SNI. - -- bpo-22894: TestCase.subTest() would cause the test suite to be stopped - when in failfast mode, even in the absence of failures. - -- bpo-22796: HTTP cookie parsing is now stricter, in order to protect - against potential injection attacks. - -- bpo-22370: Windows detection in pathlib is now more robust. - -- bpo-22841: Reject coroutines in asyncio add_signal_handler(). Patch by - Ludovic.Gasc. - -- bpo-19494: Added urllib.request.HTTPBasicPriorAuthHandler. Patch by Matej - Cepl. - -- bpo-22578: Added attributes to the re.error class. - -- bpo-22849: Fix possible double free in the io.TextIOWrapper constructor. - -- bpo-12728: Different Unicode characters having the same uppercase but - different lowercase are now matched in case-insensitive regular - expressions. - -- bpo-22821: Fixed fcntl() with integer argument on 64-bit big-endian - platforms. - -- bpo-21650: Add an ``--sort-keys`` option to ``json.tool`` CLI. - -- bpo-22824: Updated reprlib output format for sets to use set literals. - Patch contributed by Berker Peksag. - -- bpo-22824: Updated reprlib output format for arrays to display empty - arrays without an unnecessary empty list. Suggested by Serhiy Storchaka. - -- bpo-22406: Fixed the uu_codec codec incorrectly ported to 3.x. Based on - patch by Martin Panter. - -- bpo-17293: uuid.getnode() now determines MAC address on AIX using netstat. - Based on patch by Aivars Kalvāns. - -- bpo-22769: Fixed ttk.Treeview.tag_has() when called without arguments. - -- bpo-22417: Verify certificates by default in httplib (PEP 476). - -- bpo-22775: Fixed unpickling of http.cookies.SimpleCookie with protocol 2 - and above. Patch by Tim Graham. - -- bpo-22776: Brought excluded code into the scope of a try block in - SysLogHandler.emit(). - -- bpo-22665: Add missing get_terminal_size and SameFileError to - shutil.__all__. - -- bpo-6623: Remove deprecated Netrc class in the ftplib module. Patch by - Matt Chaput. - -- bpo-17381: Fixed handling of case-insensitive ranges in regular - expressions. - -- bpo-22410: Module level functions in the re module now cache compiled - locale-dependent regular expressions taking into account the locale. - -- bpo-22759: Query methods on pathlib.Path() (exists(), is_dir(), etc.) now - return False when the underlying stat call raises NotADirectoryError. - -- bpo-8876: distutils now falls back to copying files when hard linking - doesn't work. This allows use with special filesystems such as VirtualBox - shared folders. - -- bpo-22217: Implemented reprs of classes in the zipfile module. - -- bpo-22457: Honour load_tests in the start_dir of discovery. - -- bpo-18216: gettext now raises an error when a .mo file has an unsupported - major version number. Patch by Aaron Hill. - -- bpo-13918: Provide a locale.delocalize() function which can remove - locale-specific number formatting from a string representing a number, - without then converting it to a specific type. Patch by Cédric Krier. - -- bpo-22676: Make the pickling of global objects which don't have a - __module__ attribute less slow. - -- bpo-18853: Fixed ResourceWarning in shlex.__nain__. - -- bpo-9351: Defaults set with set_defaults on an argparse subparser are no - longer ignored when also set on the parent parser. - -- bpo-7559: unittest test loading ImportErrors are reported as import errors - with their import exception rather than as attribute errors after the - import has already failed. - -- bpo-19746: Make it possible to examine the errors from unittest discovery - without executing the test suite. The new ``errors`` attribute on - ``TestLoader`` exposes these non-fatal errors encountered during - discovery. - -- bpo-21991: Make email.headerregistry's header 'params' attributes be - read-only (MappingProxyType). Previously the dictionary was modifiable - but a new one was created on each access of the attribute. - -- bpo-22638: SSLv3 is now disabled throughout the standard library. It can - still be enabled by instantiating a SSLContext manually. - -- bpo-22641: In asyncio, the default SSL context for client connections is - now created using ssl.create_default_context(), for stronger security. - -- bpo-17401: Include closefd in io.FileIO repr. - -- bpo-21338: Add silent mode for compileall. quiet parameters of - compile_{dir, file, path} functions now have a multilevel value. Also, -q - option of the CLI now have a multilevel value. Patch by Thomas Kluyver. - -- bpo-20152: Convert the array and cmath modules to Argument Clinic. - -- bpo-18643: Add socket.socketpair() on Windows. - -- bpo-22435: Fix a file descriptor leak when socketserver bind fails. - -- bpo-13096: Fixed segfault in CTypes POINTER handling of large values. - -- bpo-11694: Raise ConversionError in xdrlib as documented. Patch by Filip - Gruszczyński and Claudiu Popa. - -- bpo-19380: Optimized parsing of regular expressions. - -- bpo-1519638: Now unmatched groups are replaced with empty strings in - re.sub() and re.subn(). - -- bpo-18615: sndhdr.what/whathdr now return a namedtuple. - -- bpo-22462: Fix pyexpat's creation of a dummy frame to make it appear in - exception tracebacks. - -- bpo-21965: Add support for in-memory SSL to the ssl module. Patch by - Geert Jansen. - -- bpo-21173: Fix len() on a WeakKeyDictionary when .clear() was called with - an iterator alive. - -- bpo-11866: Eliminated race condition in the computation of names for new - threads. - -- bpo-21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is - mutated while iterating. Patch by Olivier Grisel. - -- bpo-11271: concurrent.futures.Executor.map() now takes a *chunksize* - argument to allow batching of tasks in child processes and improve - performance of ProcessPoolExecutor. Patch by Dan O'Reilly. - -- bpo-21883: os.path.join() and os.path.relpath() now raise a TypeError with - more helpful error message for unsupported or mismatched types of - arguments. - -- bpo-22219: The zipfile module CLI now adds entries for directories - (including empty directories) in ZIP file. - -- bpo-22449: In the ssl.SSLContext.load_default_certs, consult the - environmental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows. - -- bpo-22508: The email.__version__ variable has been removed; the email code - is no longer shipped separately from the stdlib, and __version__ hasn't - been updated in several releases. - -- bpo-20076: Added non derived UTF-8 aliases to locale aliases table. - -- bpo-20079: Added locales supported in glibc 2.18 to locale alias table. - -- bpo-20218: Added convenience methods read_text/write_text and read_bytes/ - write_bytes to pathlib.Path objects. - -- bpo-22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor - os.posix_fallocate() because their prototypes in system headers are wrong. - -- bpo-22517: When an io.BufferedRWPair object is deallocated, clear its - weakrefs. - -- bpo-22437: Number of capturing groups in regular expression is no longer - limited by 100. - -- bpo-17442: InteractiveInterpreter now displays the full chained traceback - in its showtraceback method, to match the built in interactive - interpreter. - -- bpo-23392: Added tests for marshal C API that works with FILE*. - -- bpo-10510: distutils register and upload methods now use HTML standards - compliant CRLF line endings. - -- bpo-9850: Fixed macpath.join() for empty first component. Patch by Oleg - Oshmyan. - -- bpo-5309: distutils' build and build_ext commands now accept a ``-j`` - option to enable parallel building of extension modules. - -- bpo-22448: Improve canceled timer handles cleanup to prevent unbound - memory usage. Patch by Joshua Moore-Oliva. - -- bpo-22427: TemporaryDirectory no longer attempts to clean up twice when - used in the with statement in generator. - -- bpo-22362: Forbidden ambiguous octal escapes out of range 0-0o377 in - regular expressions. - -- bpo-20912: Now directories added to ZIP file have correct Unix and MS-DOS - directory attributes. - -- bpo-21866: ZipFile.close() no longer writes ZIP64 central directory - records if allowZip64 is false. - -- bpo-22278: Fix urljoin problem with relative urls, a regression observed - after changes to issue22118 were submitted. - -- bpo-22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re - module. Removed trailing spaces in debugging output. - -- bpo-22423: Unhandled exception in thread no longer causes unhandled - AttributeError when sys.stderr is None. - -- bpo-21332: Ensure that ``bufsize=1`` in subprocess.Popen() selects line - buffering, rather than block buffering. Patch by Akira Li. - -- bpo-21091: Fix API bug: email.message.EmailMessage.is_attachment is now a - method. - -- bpo-21079: Fix email.message.EmailMessage.is_attachment to return the - correct result when the header has parameters as well as a value. - -- bpo-22247: Add NNTPError to nntplib.__all__. - -- bpo-22366: urllib.request.urlopen will accept a context object - (SSLContext) as an argument which will then be used for HTTPS connection. - Patch by Alex Gaynor. - -- bpo-4180: The warnings registries are now reset when the filters are - modified. - -- bpo-22419: Limit the length of incoming HTTP request in wsgiref server to - 65536 bytes and send a 414 error code for higher lengths. Patch - contributed by Devin Cook. - -- Lax cookie parsing in http.cookies could be a security issue when combined - with non-standard cookie handling in some web browsers. Reported by - Sergey Bobrov. - -- bpo-20537: logging methods now accept an exception instance as well as a - Boolean value or exception tuple. Thanks to Yury Selivanov for the patch. - -- bpo-22384: An exception in Tkinter callback no longer crashes the program - when it is run with pythonw.exe. - -- bpo-22168: Prevent turtle AttributeError with non-default Canvas on OS X. - -- bpo-21147: sqlite3 now raises an exception if the request contains a null - character instead of truncating it. Based on patch by Victor Stinner. - -- bpo-13968: The glob module now supports recursive search in subdirectories - using the ``**`` pattern. - -- bpo-21951: Fixed a crash in Tkinter on AIX when called Tcl command with - empty string or tuple argument. - -- bpo-21951: Tkinter now most likely raises MemoryError instead of crash if - the memory allocation fails. - -- bpo-22338: Fix a crash in the json module on memory allocation failure. - -- bpo-12410: imaplib.IMAP4 now supports the context management protocol. - Original patch by Tarek Ziadé. - -- bpo-21270: We now override tuple methods in mock.call objects so that they - can be used as normal call attributes. - -- bpo-16662: ``load_tests()`` is now unconditionally run when it is present - in a package's ``__init__.py``. ``TestLoader.loadTestsFromModule()`` - still accepts use_load_tests, but it is deprecated and ignored. A new - keyword-only attribute ``pattern`` is added and documented. Patch given - by Robert Collins, tweaked by Barry Warsaw. - -- bpo-22226: First letter no longer is stripped from the "status" key in the - result of Treeview.heading(). - -- bpo-19524: Fixed resource leak in the HTTP connection when an invalid - response is received. Patch by Martin Panter. - -- bpo-20421: Add a .version() method to SSL sockets exposing the actual - protocol version in use. - -- bpo-19546: configparser exceptions no longer expose implementation - details. Chained KeyErrors are removed, which leads to cleaner tracebacks. - Patch by Claudiu Popa. - -- bpo-22051: turtledemo no longer reloads examples to re-run them. - Initialization of variables and gui setup should be done in main(), which - is called each time a demo is run, but not on import. - -- bpo-21933: Turtledemo users can change the code font size with a menu - selection or control(command) '-' or '+' or control-mousewheel. Original - patch by Lita Cho. - -- bpo-21597: The separator between the turtledemo text pane and the drawing - canvas can now be grabbed and dragged with a mouse. The code text pane - can be widened to easily view or copy the full width of the text. The - canvas can be widened on small screens. Original patches by Jan Kanis and - Lita Cho. - -- bpo-18132: Turtledemo buttons no longer disappear when the window is - shrunk. Original patches by Jan Kanis and Lita Cho. - -- bpo-22043: time.monotonic() is now always available. - ``threading.Lock.acquire()``, ``threading.RLock.acquire()`` and socket - operations now use a monotonic clock, instead of the system clock, when a - timeout is used. - -- bpo-21527: Add a default number of workers to ThreadPoolExecutor equal to - 5 times the number of CPUs. Patch by Claudiu Popa. - -- bpo-22216: smtplib now resets its state more completely after a quit. The - most obvious consequence of the previous behavior was a STARTTLS failure - during a connect/starttls/quit/connect/starttls sequence. - -- bpo-22098: ctypes' BigEndianStructure and LittleEndianStructure now define - an empty __slots__ so that subclasses don't always get an instance dict. - Patch by Claudiu Popa. - -- bpo-22185: Fix an occasional RuntimeError in threading.Condition.wait() - caused by mutation of the waiters queue without holding the lock. Patch - by Doug Zongker. - -- bpo-22287: On UNIX, _PyTime_gettimeofday() now uses - clock_gettime(CLOCK_REALTIME) if available. As a side effect, Python now - depends on the librt library on Solaris and on Linux (only with glibc - older than 2.17). - -- bpo-22182: Use e.args to unpack exceptions correctly in - distutils.file_util.move_file. Patch by Claudiu Popa. - -- The webbrowser module now uses subprocess's start_new_session=True rather - than a potentially risky preexec_fn=os.setsid call. - -- bpo-22042: signal.set_wakeup_fd(fd) now raises an exception if the file - descriptor is in blocking mode. - -- bpo-16808: inspect.stack() now returns a named tuple instead of a tuple. - Patch by Daniel Shahaf. - -- bpo-22236: Fixed Tkinter images copying operations in NoDefaultRoot mode. - -- bpo-2527: Add a *globals* argument to timeit functions, in order to - override the globals namespace in which the timed code is executed. Patch - by Ben Roberts. - -- bpo-22118: Switch urllib.parse to use RFC 3986 semantics for the - resolution of relative URLs, rather than RFCs 1808 and 2396. Patch by - Demian Brecht. - -- bpo-21549: Added the "members" parameter to TarFile.list(). - -- bpo-19628: Allow compileall recursion depth to be specified with a -r - option. - -- bpo-15696: Add a __sizeof__ implementation for mmap objects on Windows. - -- bpo-22068: Avoided reference loops with Variables and Fonts in Tkinter. - -- bpo-22165: SimpleHTTPRequestHandler now supports undecodable file names. - -- bpo-15381: Optimized line reading in io.BytesIO. - -- bpo-8797: Raise HTTPError on failed Basic Authentication immediately. - Initial patch by Sam Bull. - -- bpo-20729: Restored the use of lazy iterkeys()/itervalues()/iteritems() in - the mailbox module. - -- bpo-21448: Changed FeedParser feed() to avoid *O*\ (*n*\ :sup:`2`) - behavior when parsing long line. Original patch by Raymond Hettinger. - -- bpo-22184: The functools LRU Cache decorator factory now gives an earlier - and clearer error message when the user forgets the required parameters. - -- bpo-17923: glob() patterns ending with a slash no longer match non-dirs on - AIX. Based on patch by Delhallt. - -- bpo-21725: Added support for RFC 6531 (SMTPUTF8) in smtpd. - -- bpo-22176: Update the ctypes module's libffi to v3.1. This release adds - support for the Linux AArch64 and POWERPC ELF ABIv2 little endian - architectures. - -- bpo-5411: Added support for the "xztar" format in the shutil module. - -- bpo-21121: Don't force 3rd party C extensions to be built with - -Werror=declaration-after-statement. - -- bpo-21975: Fixed crash when using uninitialized sqlite3.Row (in particular - when unpickling pickled sqlite3.Row). sqlite3.Row is now initialized in - the __new__() method. - -- bpo-20170: Convert posixmodule to use Argument Clinic. - -- bpo-21539: Add an *exists_ok* argument to ``Pathlib.mkdir()`` to mimic - ``mkdir -p`` and ``os.makedirs()`` functionality. When true, ignore - ``FileExistsErrors``. Patch by Berker Peksag. - -- bpo-22127: Bypass IDNA for pure-ASCII host names in the socket module (in - particular for numeric IPs). - -- bpo-21047: set the default value for the *convert_charrefs* argument of - HTMLParser to True. Patch by Berker Peksag. - -- Add an __all__ to html.entities. - -- bpo-15114: the strict mode and argument of HTMLParser, HTMLParser.error, - and the HTMLParserError exception have been removed. - -- bpo-22085: Dropped support of Tk 8.3 in Tkinter. - -- bpo-21580: Now Tkinter correctly handles bytes arguments passed to Tk. In - particular this allows initializing images from binary data. - -- bpo-22003: When initialized from a bytes object, io.BytesIO() now defers - making a copy until it is mutated, improving performance and memory use on - some use cases. Patch by David Wilson. - -- bpo-22018: On Windows, signal.set_wakeup_fd() now also supports sockets. A - side effect is that Python depends to the WinSock library. - -- bpo-22054: Add os.get_blocking() and os.set_blocking() functions to get - and set the blocking mode of a file descriptor (False if the O_NONBLOCK - flag is set, True otherwise). These functions are not available on - Windows. - -- bpo-17172: Make turtledemo start as active on OS X even when run with - subprocess. Patch by Lita Cho. - -- bpo-21704: Fix build error for _multiprocessing when semaphores are not - available. Patch by Arfrever Frehtes Taifersar Arahesis. - -- bpo-20173: Convert sha1, sha256, sha512 and md5 to ArgumentClinic. Patch - by Vajrasky Kok. - -- Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError - on closed socket. repr(socket.socket) already works fine. - -- bpo-22033: Reprs of most Python implemented classes now contain actual - class name instead of hardcoded one. - -- bpo-21947: The dis module can now disassemble generator-iterator objects - based on their gi_code attribute. Patch by Clement Rouault. - -- bpo-16133: The asynchat.async_chat.handle_read() method now ignores - BlockingIOError exceptions. - -- bpo-22044: Fixed premature DECREF in call_tzinfo_method. Patch by Tom - Flanagan. - -- bpo-19884: readline: Disable the meta modifier key if stdout is not a - terminal to not write the ANSI sequence ``"\033[1034h"`` into stdout. This - sequence is used on some terminal (ex: TERM=xterm-256color") to enable - support of 8 bit characters. - -- bpo-4350: Removed a number of out-of-dated and non-working for a long time - Tkinter methods. - -- bpo-6167: Scrollbar.activate() now returns the name of active element if - the argument is not specified. Scrollbar.set() now always accepts only 2 - arguments. - -- bpo-15275: Clean up and speed up the ntpath module. - -- bpo-21888: plistlib's load() and loads() now work if the fmt parameter is - specified. - -- bpo-22032: __qualname__ instead of __name__ is now always used to format - fully qualified class names of Python implemented classes. - -- bpo-22031: Reprs now always use hexadecimal format with the "0x" prefix - when contain an id in form " at 0x...". - -- bpo-22018: signal.set_wakeup_fd() now raises an OSError instead of a - ValueError on ``fstat()`` failure. - -- bpo-21044: tarfile.open() now handles fileobj with an integer 'name' - attribute. Based on patch by Antoine Pietri. - -- bpo-21966: Respect -q command-line option when code module is ran. - -- bpo-19076: Don't pass the redundant 'file' argument to self.error(). - -- bpo-16382: Improve exception message of warnings.warn() for bad category. - Initial patch by Phil Elson. - -- bpo-21932: os.read() now uses a :c:func:`Py_ssize_t` type instead of - :c:expr:`int` for the size to support reading more than 2 GB at once. On - Windows, the size is truncated to INT_MAX. As any call to os.read(), the - OS may read less bytes than the number of requested bytes. - -- bpo-21942: Fixed source file viewing in pydoc's server mode on Windows. - -- bpo-11259: asynchat.async_chat().set_terminator() now raises a ValueError - if the number of received bytes is negative. - -- bpo-12523: asynchat.async_chat.push() now raises a TypeError if it doesn't - get a bytes string - -- bpo-21707: Add missing kwonlyargcount argument to - ModuleFinder.replace_paths_in_code(). - -- bpo-20639: calling Path.with_suffix('') allows removing the suffix again. - Patch by July Tikhonov. - -- bpo-21714: Disallow the construction of invalid paths using - Path.with_name(). Original patch by Antony Lee. - -- bpo-15014: Added 'auth' method to smtplib to make implementing auth - mechanisms simpler, and used it internally in the login method. - -- bpo-21151: Fixed a segfault in the winreg module when ``None`` is passed - as a ``REG_BINARY`` value to SetValueEx. Patch by John Ehresman. - -- bpo-21090: io.FileIO.readall() does not ignore I/O errors anymore. Before, - it ignored I/O errors if at least the first C call read() succeed. - -- bpo-5800: headers parameter of wsgiref.headers.Headers is now optional. - Initial patch by Pablo Torres Navarrete and SilentGhost. - -- bpo-21781: ssl.RAND_add() now supports strings longer than 2 GB. - -- bpo-21679: Prevent extraneous fstat() calls during open(). Patch by - Bohuslav Kabrda. - -- bpo-21863: cProfile now displays the module name of C extension functions, - in addition to their own name. - -- bpo-11453: asyncore: emit a ResourceWarning when an unclosed file_wrapper - object is destroyed. The destructor now closes the file if needed. The - close() method can now be called twice: the second call does nothing. - -- bpo-21858: Better handling of Python exceptions in the sqlite3 module. - -- bpo-21476: Make sure the email.parser.BytesParser TextIOWrapper is - discarded after parsing, so the input file isn't unexpectedly closed. - -- bpo-20295: imghdr now recognizes OpenEXR format images. - -- bpo-21729: Used the "with" statement in the dbm.dumb module to ensure - files closing. Patch by Claudiu Popa. - -- bpo-21491: socketserver: Fix a race condition in child processes reaping. - -- bpo-21719: Added the ``st_file_attributes`` field to os.stat_result on - Windows. - -- bpo-21832: Require named tuple inputs to be exact strings. - -- bpo-21722: The distutils "upload" command now exits with a non-zero return - code when uploading fails. Patch by Martin Dengler. - -- bpo-21723: asyncio.Queue: support any type of number (ex: float) for the - maximum size. Patch written by Vajrasky Kok. - -- bpo-21711: support for "site-python" directories has now been removed from - the site module (it was deprecated in 3.4). - -- bpo-17552: new socket.sendfile() method allowing a file to be sent over a - socket by using high-performance os.sendfile() on UNIX. Patch by Giampaolo - Rodola'. - -- bpo-18039: dbm.dump.open() now always creates a new database when the flag - has the value 'n'. Patch by Claudiu Popa. - -- bpo-21326: Add a new is_closed() method to asyncio.BaseEventLoop. - run_forever() and run_until_complete() methods of asyncio.BaseEventLoop - now raise an exception if the event loop was closed. - -- bpo-21766: Prevent a security hole in CGIHTTPServer by URL unquoting paths - before checking for a CGI script at that path. - -- bpo-21310: Fixed possible resource leak in failed open(). - -- bpo-21256: Printout of keyword args should be in deterministic order in a - mock function call. This will help to write better doctests. - -- bpo-21677: Fixed chaining nonnormalized exceptions in io close() methods. - -- bpo-11709: Fix the pydoc.help function to not fail when sys.stdin is not a - valid file. - -- bpo-21515: tempfile.TemporaryFile now uses os.O_TMPFILE flag is available. - -- bpo-13223: Fix pydoc.writedoc so that the HTML documentation for methods - that use 'self' in the example code is generated correctly. - -- bpo-21463: In urllib.request, fix pruning of the FTP cache. - -- bpo-21618: The subprocess module could fail to close open fds that were - inherited by the calling process and already higher than POSIX resource - limits would otherwise allow. On systems with a functioning /proc/self/fd - or /dev/fd interface the max is now ignored and all fds are closed. - -- bpo-20383: Introduce importlib.util.module_from_spec() as the preferred - way to create a new module. - -- bpo-21552: Fixed possible integer overflow of too long string lengths in - the tkinter module on 64-bit platforms. - -- bpo-14315: The zipfile module now ignores extra fields in the central - directory that are too short to be parsed instead of letting a - struct.unpack error bubble up as this "bad data" appears in many real - world zip files in the wild and is ignored by other zip tools. - -- bpo-13742: Added "key" and "reverse" parameters to heapq.merge(). (First - draft of patch contributed by Simon Sapin.) - -- bpo-21402: tkinter.ttk now works when default root window is not set. - -- bpo-3015: ``_tkinter.create()`` now creates ``tkapp`` object with - ``wantobjects=1`` by default. - -- bpo-10203: sqlite3.Row now truly supports sequence protocol. In - particular it supports reverse() and negative indices. Original patch by - Claudiu Popa. - -- bpo-18807: If copying (no symlinks) specified for a venv, then the python - interpreter aliases (python, python3) are now created by copying rather - than symlinking. - -- bpo-20197: Added support for the WebP image type in the imghdr module. - Patch by Fabrice Aneche and Claudiu Popa. - -- bpo-21513: Speedup some properties of IP addresses (IPv4Address, - IPv6Address) such as .is_private or .is_multicast. - -- bpo-21137: Improve the repr for threading.Lock() and its variants by - showing the "locked" or "unlocked" status. Patch by Berker Peksag. - -- bpo-21538: The plistlib module now supports loading of binary plist files - when reference or offset size is not a power of two. - -- bpo-21455: Add a default backlog to socket.listen(). - -- bpo-21525: Most Tkinter methods which accepted tuples now accept lists - too. - -- bpo-22166: With the assistance of a new internal _codecs._forget_codec - helping function, test_codecs now clears the encoding caches to avoid the - appearance of a reference leak - -- bpo-22236: Tkinter tests now don't reuse default root window. New root - window is created for every test class. - -- bpo-10744: Fix :pep:`3118` format strings on ctypes objects with a - nontrivial shape. - -- bpo-20826: Optimize ipaddress.collapse_addresses(). - -- bpo-21487: Optimize ipaddress.summarize_address_range() and - ipaddress.{IPv4Network,IPv6Network}.subnets(). - -- bpo-21486: Optimize parsing of netmasks in ipaddress.IPv4Network and - ipaddress.IPv6Network. - -- bpo-13916: Disallowed the surrogatepass error handler for non UTF-\* - encodings. - -- bpo-20998: Fixed re.fullmatch() of repeated single character pattern with - ignore case. Original patch by Matthew Barnett. - -- bpo-21075: fileinput.FileInput now reads bytes from standard stream if - binary mode is specified. Patch by Sam Kimbrel. - -- bpo-19775: Add a samefile() method to pathlib Path objects. Initial patch - by Vajrasky Kok. - -- bpo-21226: Set up modules properly in PyImport_ExecCodeModuleObject (and - friends). - -- bpo-21398: Fix a unicode error in the pydoc pager when the documentation - contains characters not encodable to the stdout encoding. - -- bpo-16531: ipaddress.IPv4Network and ipaddress.IPv6Network now accept an - (address, netmask) tuple argument, so as to easily construct network - objects from existing addresses. - -- bpo-21156: importlib.abc.InspectLoader.source_to_code() is now a - staticmethod. - -- bpo-21424: Simplified and optimized heaqp.nlargest() and nmsmallest() to - make fewer tuple comparisons. - -- bpo-21396: Fix TextIOWrapper(..., write_through=True) to not force a - flush() on the underlying binary stream. Patch by akira. - -- bpo-18314: Unlink now removes junctions on Windows. Patch by Kim Gräsman - -- bpo-21088: Bugfix for curses.window.addch() regression in 3.4.0. In - porting to Argument Clinic, the first two arguments were reversed. - -- bpo-21407: _decimal: The module now supports function signatures. - -- bpo-10650: Remove the non-standard 'watchexp' parameter from the - Decimal.quantize() method in the Python version. It had never been - present in the C version. - -- bpo-21469: Reduced the risk of false positives in robotparser by checking - to make sure that robots.txt has been read or does not exist prior to - returning True in can_fetch(). - -- bpo-19414: Have the OrderedDict mark deleted links as unusable. This gives - an early failure if the link is deleted during iteration. - -- bpo-21421: Add __slots__ to the MappingViews ABC. Patch by Josh Rosenberg. - -- bpo-21101: Eliminate double hashing in the C speed-up code for - collections.Counter(). - -- bpo-21321: itertools.islice() now releases the reference to the source - iterator when the slice is exhausted. Patch by Anton Afanasyev. - -- bpo-21057: TextIOWrapper now allows the underlying binary stream's read() - or read1() method to return an arbitrary bytes-like object (such as a - memoryview). Patch by Nikolaus Rath. - -- bpo-20951: SSLSocket.send() now raises either SSLWantReadError or - SSLWantWriteError on a non-blocking socket if the operation would block. - Previously, it would return 0. Patch by Nikolaus Rath. - -- bpo-13248: removed previously deprecated asyncore.dispatcher __getattr__ - cheap inheritance hack. - -- bpo-9815: assertRaises now tries to clear references to local variables in - the exception's traceback. - -- bpo-19940: ssl.cert_time_to_seconds() now interprets the given time string - in the UTC timezone (as specified in RFC 5280), not the local timezone. - -- bpo-13204: Calling sys.flags.__new__ would crash the interpreter, now it - raises a TypeError. - -- bpo-19385: Make operations on a closed dbm.dumb database always raise the - same exception. - -- bpo-21207: Detect when the os.urandom cached fd has been closed or - replaced, and open it anew. - -- bpo-21291: subprocess's Popen.wait() is now thread safe so that multiple - threads may be calling wait() or poll() on a Popen instance at the same - time without losing the Popen.returncode value. - -- bpo-21127: Path objects can now be instantiated from str subclass - instances (such as ``numpy.str_``). - -- bpo-15002: urllib.response object to use _TemporaryFileWrapper (and - _TemporaryFileCloser) facility. Provides a better way to handle file - descriptor close. Patch contributed by Christian Theune. - -- bpo-12220: mindom now raises a custom ValueError indicating it doesn't - support spaces in URIs instead of letting a 'split' ValueError bubble up. - -- bpo-21068: The ssl.PROTOCOL* constants are now enum members. - -- bpo-21276: posixmodule: Don't define USE_XATTRS on KFreeBSD and the Hurd. - -- bpo-21262: New method assert_not_called for Mock. It raises AssertionError - if the mock has been called. - -- bpo-21238: New keyword argument ``unsafe`` to Mock. It raises - ``AttributeError`` in case of an attribute startswith assert or assret. - -- bpo-20896: ssl.get_server_certificate() now uses PROTOCOL_SSLv23, not - PROTOCOL_SSLv3, for maximum compatibility. - -- bpo-21239: patch.stopall() didn't work deterministically when the same - name was patched more than once. - -- bpo-21203: Updated fileConfig and dictConfig to remove inconsistencies. - Thanks to Jure Koren for the patch. - -- bpo-21222: Passing name keyword argument to mock.create_autospec now - works. - -- bpo-21197: Add lib64 -> lib symlink in venvs on 64-bit non-OS X POSIX. - -- bpo-17498: Some SMTP servers disconnect after certain errors, violating - strict RFC conformance. Instead of losing the error code when we issue - the subsequent RSET, smtplib now returns the error code and defers raising - the SMTPServerDisconnected error until the next command is issued. - -- bpo-17826: setting an iterable side_effect on a mock function created by - create_autospec now works. Patch by Kushal Das. - -- bpo-7776: Fix ``Host:`` header and reconnection when using - http.client.HTTPConnection.set_tunnel(). Patch by Nikolaus Rath. - -- bpo-20968: unittest.mock.MagicMock now supports division. Patch by - Johannes Baiter. - -- bpo-21529: Fix arbitrary memory access in JSONDecoder.raw_decode with a - negative second parameter. Bug reported by Guido Vranken. (See also: - :cve:`2014-4616`) - -- bpo-21169: getpass now handles non-ascii characters that the input stream - encoding cannot encode by re-encoding using the replace error handler. - -- bpo-21171: Fixed undocumented filter API of the rot13 codec. Patch by - Berker Peksag. - -- bpo-20539: Improved math.factorial error message for large positive inputs - and changed exception type (OverflowError -> ValueError) for large - negative inputs. - -- bpo-21172: isinstance check relaxed from dict to collections.Mapping. - -- bpo-21155: asyncio.EventLoop.create_unix_server() now raises a ValueError - if path and sock are specified at the same time. - -- bpo-21136: Avoid unnecessary normalization of Fractions resulting from - power and other operations. Patch by Raymond Hettinger. - -- bpo-17621: Introduce importlib.util.LazyLoader. - -- bpo-21076: signal module constants were turned into enums. Patch by - Giampaolo Rodola'. - -- bpo-20636: Improved the repr of Tkinter widgets. - -- bpo-19505: The items, keys, and values views of OrderedDict now support - reverse iteration using reversed(). - -- bpo-21149: Improved thread-safety in logging cleanup during interpreter - shutdown. Thanks to Devin Jeanpierre for the patch. - -- bpo-21058: Fix a leak of file descriptor in - :func:`tempfile.NamedTemporaryFile`, close the file descriptor if - :func:`io.open` fails - -- bpo-21200: Return None from pkgutil.get_loader() when __spec__ is missing. - -- bpo-21013: Enhance ssl.create_default_context() when used for server side - sockets to provide better security by default. - -- bpo-20145: ``assertRaisesRegex`` and ``assertWarnsRegex`` now raise a - ``TypeError`` if the second argument is not a string or compiled regex. - -- bpo-20633: Replace relative import by absolute import. - -- bpo-20980: Stop wrapping exception when using ThreadPool. - -- bpo-21082: In os.makedirs, do not set the process-wide umask. Note this - changes behavior of makedirs when exist_ok=True. - -- bpo-20990: Fix issues found by pyflakes for multiprocessing. - -- bpo-21015: SSL contexts will now automatically select an elliptic curve - for ECDH key exchange on OpenSSL 1.0.2 and later, and otherwise default to - "prime256v1". - -- bpo-21000: Improve the command-line interface of json.tool. - -- bpo-20995: Enhance default ciphers used by the ssl module to enable better - security and prioritize perfect forward secrecy. - -- bpo-20884: Don't assume that __file__ is defined on importlib.__init__. - -- bpo-21499: Ignore __builtins__ in several test_importlib.test_api tests. - -- bpo-20627: xmlrpc.client.ServerProxy is now a context manager. - -- bpo-19165: The formatter module now raises DeprecationWarning instead of - PendingDeprecationWarning. - -- bpo-13936: Remove the ability of datetime.time instances to be considered - false in boolean contexts. - -- bpo-18931: selectors module now supports /dev/poll on Solaris. Patch by - Giampaolo Rodola'. - -- bpo-19977: When the ``LC_TYPE`` locale is the POSIX locale (``C`` locale), - :py:data:`sys.stdin` and :py:data:`sys.stdout` are now using the - ``surrogateescape`` error handler, instead of the ``strict`` error - handler. - -- bpo-20574: Implement incremental decoder for cp65001 code (Windows code - page 65001, Microsoft UTF-8). - -- bpo-20879: Delay the initialization of encoding and decoding tables for - base32, ascii85 and base85 codecs in the base64 module, and delay the - initialization of the unquote_to_bytes() table of the urllib.parse module, - to not waste memory if these modules are not used. - -- bpo-19157: Include the broadcast address in the usable hosts for IPv6 in - ipaddress. - -- bpo-11599: When an external command (e.g. compiler) fails, distutils now - prints out the whole command line (instead of just the command name) if - the environment variable DISTUTILS_DEBUG is set. - -- bpo-4931: distutils should not produce unhelpful "error: None" messages - anymore. distutils.util.grok_environment_error is kept but doc-deprecated. - -- bpo-20875: Prevent possible gzip "'read' is not defined" NameError. Patch - by Claudiu Popa. - -- bpo-11558: ``email.message.Message.attach`` now returns a more useful - error message if ``attach`` is called on a message for which - ``is_multipart`` is False. - -- bpo-20283: RE pattern methods now accept the string keyword parameters as - documented. The pattern and source keyword parameters are left as - deprecated aliases. - -- bpo-20778: Fix modulefinder to work with bytecode-only modules. - -- bpo-20791: copy.copy() now doesn't make a copy when the input is a bytes - object. Initial patch by Peter Otten. - -- bpo-19748: On AIX, time.mktime() now raises an OverflowError for year - outsize range [1902; 2037]. - -- bpo-19573: inspect.signature: Use enum for parameter kind constants. - -- bpo-20726: inspect.signature: Make Signature and Parameter picklable. - -- bpo-17373: Add inspect.Signature.from_callable method. - -- bpo-20378: Improve repr of inspect.Signature and inspect.Parameter. - -- bpo-20816: Fix inspect.getcallargs() to raise correct TypeError for - missing keyword-only arguments. Patch by Jeremiah Lowin. - -- bpo-20817: Fix inspect.getcallargs() to fail correctly if more than 3 - arguments are missing. Patch by Jeremiah Lowin. - -- bpo-6676: Ensure a meaningful exception is raised when attempting to parse - more than one XML document per pyexpat xmlparser instance. (Original - patches by Hirokazu Yamamoto and Amaury Forgeot d'Arc, with suggested - wording by David Gutteridge) - -- bpo-21117: Fix inspect.signature to better support functools.partial. Due - to the specifics of functools.partial implementation, - positional-or-keyword arguments passed as keyword arguments become - keyword-only. - -- bpo-20334: inspect.Signature and inspect.Parameter are now hashable. - Thanks to Antony Lee for bug reports and suggestions. - -- bpo-15916: doctest.DocTestSuite returns an empty unittest.TestSuite - instead of raising ValueError if it finds no tests - -- bpo-21209: Fix asyncio.tasks.CoroWrapper to workaround a bug in yield-from - implementation in CPythons prior to 3.4.1. - -- asyncio: Add gi_{frame,running,code} properties to CoroWrapper (upstream - issue #163). - -- bpo-21311: Avoid exception in _osx_support with non-standard compiler - configurations. Patch by John Szakmeister. - -- bpo-11571: Ensure that the turtle window becomes the topmost window when - launched on OS X. - -- bpo-21801: Validate that __signature__ is None or an instance of - Signature. - -- bpo-21923: Prevent AttributeError in - distutils.sysconfig.customize_compiler due to possible uninitialized - _config_vars. - -- bpo-21323: Fix http.server to again handle scripts in CGI subdirectories, - broken by the fix for security issue #19435. Patch by Zach Byrne. - -- bpo-22733: Fix ffi_prep_args not zero-extending argument values correctly - on 64-bit Windows. - -- bpo-23302: Default to TCP_NODELAY=1 upon establishing an HTTPConnection. - Removed use of hard-coded MSS as it's an optimization that's no longer - needed with Nagle disabled. - -IDLE ----- - -- bpo-20577: Configuration of the max line length for the FormatParagraph - extension has been moved from the General tab of the Idle preferences - dialog to the FormatParagraph tab of the Config Extensions dialog. Patch - by Tal Einat. - -- bpo-16893: Update Idle doc chapter to match current Idle and add new - information. - -- bpo-3068: Add Idle extension configuration dialog to Options menu. Changes - are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal - Einat. - -- bpo-16233: A module browser (File : Class Browser, Alt+C) requires an - editor window with a filename. When Class Browser is requested otherwise, - from a shell, output window, or 'Untitled' editor, Idle no longer displays - an error box. It now pops up an Open Module box (Alt+M). If a valid name - is entered and a module is opened, a corresponding browser is also opened. - -- bpo-4832: Save As to type Python files automatically adds .py to the name - you enter (even if your system does not display it). Some systems - automatically add .txt when type is Text files. - -- bpo-21986: Code objects are not normally pickled by the pickle module. To - match this, they are no longer pickled when running under Idle. - -- bpo-17390: Adjust Editor window title; remove 'Python', move version to - end. - -- bpo-14105: Idle debugger breakpoints no longer disappear when inserting or - deleting lines. - -- bpo-17172: Turtledemo can now be run from Idle. Currently, the entry is on - the Help menu, but it may move to Run. Patch by Ramchandra Apt and Lita - Cho. - -- bpo-21765: Add support for non-ascii identifiers to HyperParser. - -- bpo-21940: Add unittest for WidgetRedirector. Initial patch by Saimadhav - Heblikar. - -- bpo-18592: Add unittest for SearchDialogBase. Patch by Phil Webster. - -- bpo-21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar. - -- bpo-21686: add unittest for HyperParser. Original patch by Saimadhav - Heblikar. - -- bpo-12387: Add missing upper(lower)case versions of default Windows key - bindings for Idle so Caps Lock does not disable them. Patch by Roger - Serwy. - -- bpo-21695: Closing a Find-in-files output window while the search is still - in progress no longer closes Idle. - -- bpo-18910: Add unittest for textView. Patch by Phil Webster. - -- bpo-18292: Add unittest for AutoExpand. Patch by Saihadhav Heblikar. - -- bpo-18409: Add unittest for AutoComplete. Patch by Phil Webster. - -- bpo-21477: htest.py - Improve framework, complete set of tests. Patches by - Saimadhav Heblikar - -- bpo-18104: Add idlelib/idle_test/htest.py with a few sample tests to begin - consolidating and improving human-validated tests of Idle. Change other - files as needed to work with htest. Running the module as __main__ runs - all tests. - -- bpo-21139: Change default paragraph width to 72, the :pep:`8` - recommendation. - -- bpo-21284: Paragraph reformat test passes after user changes reformat - width. - -- bpo-17654: Ensure IDLE menus are customized properly on OS X for - non-framework builds and for all variants of Tk. - -- bpo-23180: Rename IDLE "Windows" menu item to "Window". Patch by Al - Sweigart. - -Build ------ - -- bpo-15506: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the - configure script. - -- bpo-22935: Allow the ssl module to be compiled if openssl doesn't support - SSL 3. - -- bpo-22592: Drop support of the Borland C compiler to build Python. The - distutils module still supports it to build extensions. - -- bpo-22591: Drop support of MS-DOS, especially of the DJGPP compiler - (MS-DOS port of GCC). - -- bpo-16537: Check whether self.extensions is empty in setup.py. Patch by - Jonathan Hosmer. - -- bpo-22359: Remove incorrect uses of recursive make. Patch by Jonas - Wagner. - -- bpo-21958: Define HAVE_ROUND when building with Visual Studio 2013 and - above. Patch by Zachary Turner. - -- bpo-18093: the programs that embed the CPython runtime are now in a - separate "Programs" directory, rather than being kept in the Modules - directory. - -- bpo-15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/ - now display special message when and only when there are failures. - -- bpo-21141: The Windows build process no longer attempts to find Perl, - instead relying on OpenSSL source being configured and ready to build. - The ``PCbuild\build_ssl.py`` script has been re-written and re-named to - ``PCbuild\prepare_ssl.py``, and takes care of configuring OpenSSL source - for both 32 and 64 bit platforms. OpenSSL sources obtained from - svn.python.org will always be pre-configured and ready to build. - -- bpo-21037: Add a build option to enable AddressSanitizer support. - -- bpo-19962: The Windows build process now creates "python.bat" in the root - of the source tree, which passes all arguments through to the most - recently built interpreter. - -- bpo-21285: Refactor and fix curses configure check to always search in a - ncursesw directory. - -- bpo-15234: For BerkeleyDB and Sqlite, only add the found library and - include directories if they aren't already being searched. This avoids an - explicit runtime library dependency. - -- bpo-17861: Tools/scripts/generate_opcode_h.py automatically regenerates - Include/opcode.h from Lib/opcode.py if the latter gets any change. - -- bpo-20644: OS X installer build support for documentation build changes in - 3.4.1: assume externally supplied sphinx-build is available in /usr/bin. - -- bpo-20022: Eliminate use of deprecated bundlebuilder in OS X builds. - -- bpo-15968: Incorporated Tcl, Tk, and Tix builds into the Windows build - solution. - -- bpo-17095: Fix Modules/Setup *shared* support. - -- bpo-21811: Anticipated fixes to support OS X versions > 10.9. - -- bpo-21166: Prevent possible segfaults and other random failures of python - --generate-posix-vars in pybuilddir.txt build target. - -- bpo-18096: Fix library order returned by python-config. - -- bpo-17219: Add library build dir for Python extension cross-builds. - -- bpo-22919: Windows build updated to support VC 14.0 (Visual Studio 2015), - which will be used for the official release. - -- bpo-21236: Build _msi.pyd with cabinet.lib instead of fci.lib - -- bpo-17128: Use private version of OpenSSL for OS X 10.5+ installer. - -C API ------ - -- bpo-14203: Remove obsolete support for view==NULL in PyBuffer_FillInfo(), - bytearray_getbuffer(), bytesiobuf_getbuffer() and array_buffer_getbuf(). - All functions now raise BufferError in that case. - -- bpo-22445: PyBuffer_IsContiguous() now implements precise contiguity - tests, compatible with NumPy's NPY_RELAXED_STRIDES_CHECKING compilation - flag. Previously the function reported false negatives for corner cases. - -- bpo-22079: PyType_Ready() now checks that statically allocated type has no - dynamically allocated bases. - -- bpo-22453: Removed non-documented macro PyObject_REPR(). - -- bpo-18395: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`, - rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document - these functions. - -- bpo-21233: Add new C functions: PyMem_RawCalloc(), PyMem_Calloc(), - PyObject_Calloc(), _PyObject_GC_Calloc(). bytes(int) is now using - ``calloc()`` instead of ``malloc()`` for large objects which is faster and - use less memory. - -- bpo-20942: PyImport_ImportFrozenModuleObject() no longer sets __file__ to - match what importlib does; this affects _frozen_importlib as well as any - module loaded using imp.init_frozen(). - -Documentation -------------- - -- bpo-19548: Update the codecs module documentation to better cover the - distinction between text encodings and other codecs, together with other - clarifications. Patch by Martin Panter. - -- bpo-22394: Doc/Makefile now supports ``make venv PYTHON=../python`` to - create a venv for generating the documentation, e.g., ``make html - PYTHON=venv/bin/python3``. - -- bpo-21514: The documentation of the json module now refers to new JSON RFC - 7159 instead of obsoleted RFC 4627. - -- bpo-21777: The binary sequence methods on bytes and bytearray are now - documented explicitly, rather than assuming users will be able to derive - the expected behaviour from the behaviour of the corresponding str - methods. - -- bpo-6916: undocument deprecated asynchat.fifo class. - -- bpo-17386: Expanded functionality of the ``Doc/make.bat`` script to make - it much more comparable to ``Doc/Makefile``. - -- bpo-21312: Update the thread_foobar.h template file to include newer - threading APIs. Patch by Jack McCracken. - -- bpo-21043: Remove the recommendation for specific CA organizations and to - mention the ability to load the OS certificates. - -- bpo-20765: Add missing documentation for PurePath.with_name() and - PurePath.with_suffix(). - -- bpo-19407: New package installation and distribution guides based on the - Python Packaging Authority tools. Existing guides have been retained as - legacy links from the distutils docs, as they still contain some required - reference material for tool developers that isn't recorded anywhere else. - -- bpo-19697: Document cases where __main__.__spec__ is None. - -Tests ------ - -- bpo-18982: Add tests for CLI of the calendar module. - -- bpo-19548: Added some additional checks to test_codecs to ensure that - statements in the updated documentation remain accurate. Patch by Martin - Panter. - -- bpo-22838: All test_re tests now work with unittest test discovery. - -- bpo-22173: Update lib2to3 tests to use unittest test discovery. - -- bpo-16000: Convert test_curses to use unittest. - -- bpo-21456: Skip two tests in test_urllib2net.py if _ssl module not - present. Patch by Remi Pointel. - -- bpo-20746: Fix test_pdb to run in refleak mode (-R). Patch by Xavier de - Gaye. - -- bpo-22060: test_ctypes has been somewhat cleaned up and simplified; it now - uses unittest test discovery to find its tests. - -- bpo-22104: regrtest.py no longer holds a reference to the suite of tests - loaded from test modules that don't define test_main(). - -- bpo-22111: Assorted cleanups in test_imaplib. Patch by Milan Oberkirch. - -- bpo-22002: Added ``load_package_tests`` function to test.support and used - it to implement/augment test discovery in test_asyncio, test_email, - test_importlib, test_json, and test_tools. - -- bpo-21976: Fix test_ssl to accept LibreSSL version strings. Thanks to - William Orr. - -- bpo-21918: Converted test_tools from a module to a package containing - separate test files for each tested script. - -- bpo-9554: Use modern unittest features in test_argparse. Initial patch by - Denver Coneybeare and Radu Voicilas. - -- bpo-20155: Changed HTTP method names in failing tests in test_httpservers - so that packet filtering software (specifically Windows Base Filtering - Engine) does not interfere with the transaction semantics expected by the - tests. - -- bpo-19493: Refactored the ctypes test package to skip tests explicitly - rather than silently. - -- bpo-18492: All resources are now allowed when tests are not run by - regrtest.py. - -- bpo-21634: Fix pystone micro-benchmark: use floor division instead of true - division to benchmark integers instead of floating-point numbers. Set - pystone version to 1.2. Patch written by Lennart Regebro. - -- bpo-21605: Added tests for Tkinter images. - -- bpo-21493: Added test for ntpath.expanduser(). Original patch by Claudiu - Popa. - -- bpo-19925: Added tests for the spwd module. Original patch by Vajrasky - Kok. - -- bpo-21522: Added Tkinter tests for Listbox.itemconfigure(), - PanedWindow.paneconfigure(), and Menu.entryconfigure(). - -- bpo-17756: Fix test_code test when run from the installed location. - -- bpo-17752: Fix distutils tests when run from the installed location. - -- bpo-18604: Consolidated checks for GUI availability. All platforms now at - least check whether Tk can be instantiated when the GUI resource is - requested. - -- bpo-21275: Fix a socket test on KFreeBSD. - -- bpo-21223: Pass test_site/test_startup_imports when some of the extensions - are built as builtins. - -- bpo-20635: Added tests for Tk geometry managers. - -- Add test case for freeze. - -- bpo-20743: Fix a reference leak in test_tcl. - -- bpo-21097: Move test_namespace_pkgs into test_importlib. - -- bpo-21503: Use test_both() consistently in test_importlib. - -- bpo-20939: Avoid various network test failures due to new redirect of - http://www.python.org/ to https://www.python.org: use - http://www.example.com instead. - -- bpo-20668: asyncio tests no longer rely on tests.txt file. (Patch by - Vajrasky Kok) - -- bpo-21093: Prevent failures of ctypes test_macholib on OS X if a copy of - libz exists in $HOME/lib or /usr/local/lib. - -- bpo-22770: Prevent some Tk segfaults on OS X when running gui tests. - -- bpo-23211: Workaround test_logging failure on some OS X 10.6 systems. - -- bpo-23345: Prevent test_ssl failures with large OpenSSL patch level values - (like 0.9.8zc). - -Tools/Demos ------------ - -- bpo-22314: pydoc now works when the LINES environment variable is set. - -- bpo-22615: Argument Clinic now supports the "type" argument for the int - converter. This permits using the int converter with enums and typedefs. - -- bpo-20076: The makelocalealias.py script no longer ignores UTF-8 mapping. - -- bpo-20079: The makelocalealias.py script now can parse the SUPPORTED file - from glibc sources and supports command line options for source paths. - -- bpo-22201: Command-line interface of the zipfile module now correctly - extracts ZIP files with directory entries. Patch by Ryan Wilson. - -- bpo-22120: For functions using an unsigned integer return converter, - Argument Clinic now generates a cast to that type for the comparison to -1 - in the generated code. (This suppresses a compilation warning.) - -- bpo-18974: Tools/scripts/diff.py now uses argparse instead of optparse. - -- bpo-21906: Make Tools/scripts/md5sum.py work in Python 3. Patch by Zachary - Ware. - -- bpo-21629: Fix Argument Clinic's "--converters" feature. - -- Add support for ``yield from`` to 2to3. - -- Add support for the :pep:`465` matrix multiplication operator to 2to3. - -- bpo-16047: Fix module exception list and __file__ handling in freeze. - Patch by Meador Inge. - -- bpo-11824: Consider ABI tags in freeze. Patch by Meador Inge. - -- bpo-20535: PYTHONWARNING no longer affects the run_tests.py script. Patch - by Arfrever Frehtes Taifersar Arahesis. - -Windows -------- - -- bpo-23260: Update Windows installer - -- The bundled version of Tcl/Tk has been updated to 8.6.3. The most visible - result of this change is the addition of new native file dialogs when - running on Windows Vista or newer. See Tcl/Tk's TIP 432 for more - information. Also, this version of Tcl/Tk includes support for Windows - 10. - -- bpo-17896: The Windows build scripts now expect external library sources - to be in ``PCbuild\..\externals`` rather than ``PCbuild\..\..``. - -- bpo-17717: The Windows build scripts now use a copy of NASM pulled from - svn.python.org to build OpenSSL. - -- bpo-21907: Improved the batch scripts provided for building Python. - -- bpo-22644: The bundled version of OpenSSL has been updated to 1.0.1j. - -- bpo-10747: Use versioned labels in the Windows start menu. Patch by Olive - Kilburn. - -- bpo-22980: .pyd files with a version and platform tag (for example, - ".cp35-win32.pyd") will now be loaded in preference to those without tags. - - -**(For information about older versions, consult the HISTORY file.)** diff --git a/Python314_4_x86_Template/Scripts/pip.exe b/Python314_4_x86_Template/Scripts/pip.exe deleted file mode 100644 index 04ed26239935e514fe654415cfe2f163faa24baa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98163 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 GANd!oljDH^ diff --git a/Python314_4_x86_Template/Scripts/pip3.14.exe b/Python314_4_x86_Template/Scripts/pip3.14.exe deleted file mode 100644 index 04ed26239935e514fe654415cfe2f163faa24baa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98163 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 GANd!oljDH^ diff --git a/Python314_4_x86_Template/Scripts/pip3.exe b/Python314_4_x86_Template/Scripts/pip3.exe deleted file mode 100644 index 04ed26239935e514fe654415cfe2f163faa24baa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98163 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 GANd!oljDH^ diff --git a/Python314_4_x86_Template/include/Python.h b/Python314_4_x86_Template/include/Python.h deleted file mode 100644 index db8165e4b..000000000 --- a/Python314_4_x86_Template/include/Python.h +++ /dev/null @@ -1,155 +0,0 @@ -// Entry point of the Python C API. -// C extensions should only #include <Python.h>, and not include directly -// the other Python header files included by <Python.h>. - -#ifndef Py_PYTHON_H -#define Py_PYTHON_H - -// Since this is a "meta-include" file, "#ifdef __cplusplus / extern "C" {" -// is not needed. - - -// Include Python header files -#include "patchlevel.h" -#include "pyconfig.h" -#include "pymacconfig.h" - - -// Include standard header files -// When changing these files, remember to update Doc/extending/extending.rst. -#include <assert.h> // assert() -#include <inttypes.h> // uintptr_t -#include <limits.h> // INT_MAX -#include <math.h> // HUGE_VAL -#include <stdarg.h> // va_list -#include <wchar.h> // wchar_t -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> // ssize_t -#endif - -// <errno.h>, <stdio.h>, <stdlib.h> and <string.h> headers are no longer used -// by Python, but kept for the backward compatibility of existing third party C -// extensions. They are not included by limited C API version 3.11 and newer. -// -// The <ctype.h> and <unistd.h> headers are not included by limited C API -// version 3.13 and newer. -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# include <errno.h> // errno -# include <stdio.h> // FILE* -# include <stdlib.h> // getenv() -# include <string.h> // memcpy() -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030d0000 -# include <ctype.h> // tolower() -# ifndef MS_WINDOWS -# include <unistd.h> // close() -# endif -#endif - -// gh-111506: The free-threaded build is not compatible with the limited API -// or the stable ABI. -#if defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED) -# error "The limited API is not currently supported in the free-threaded build" -#endif - -#if defined(Py_GIL_DISABLED) && defined(_MSC_VER) -# include <intrin.h> // __readgsqword() -#endif - -#if defined(Py_GIL_DISABLED) && defined(__MINGW32__) -# include <intrin.h> // __readgsqword() -#endif - -// Suppress known warnings in Python header files. -#if defined(_MSC_VER) -// Warning that alignas behaviour has changed. Doesn't affect us, because we -// never relied on the old behaviour. -#pragma warning(push) -#pragma warning(disable: 5274) -#endif - -// Include Python header files -#include "pyport.h" -#include "pymacro.h" -#include "pymath.h" -#include "pymem.h" -#include "pytypedefs.h" -#include "pybuffer.h" -#include "pystats.h" -#include "pyatomic.h" -#include "lock.h" -#include "critical_section.h" -#include "object.h" -#include "refcount.h" -#include "objimpl.h" -#include "typeslots.h" -#include "pyhash.h" -#include "cpython/pydebug.h" -#include "bytearrayobject.h" -#include "bytesobject.h" -#include "unicodeobject.h" -#include "pyerrors.h" -#include "longobject.h" -#include "cpython/longintrepr.h" -#include "boolobject.h" -#include "floatobject.h" -#include "complexobject.h" -#include "rangeobject.h" -#include "memoryobject.h" -#include "tupleobject.h" -#include "listobject.h" -#include "dictobject.h" -#include "cpython/odictobject.h" -#include "enumobject.h" -#include "setobject.h" -#include "methodobject.h" -#include "moduleobject.h" -#include "monitoring.h" -#include "cpython/funcobject.h" -#include "cpython/classobject.h" -#include "fileobject.h" -#include "pycapsule.h" -#include "cpython/code.h" -#include "pyframe.h" -#include "traceback.h" -#include "sliceobject.h" -#include "cpython/cellobject.h" -#include "iterobject.h" -#include "cpython/initconfig.h" -#include "pystate.h" -#include "cpython/genobject.h" -#include "descrobject.h" -#include "genericaliasobject.h" -#include "warnings.h" -#include "weakrefobject.h" -#include "structseq.h" -#include "cpython/picklebufobject.h" -#include "cpython/pytime.h" -#include "codecs.h" -#include "pythread.h" -#include "cpython/context.h" -#include "modsupport.h" -#include "compile.h" -#include "pythonrun.h" -#include "pylifecycle.h" -#include "ceval.h" -#include "sysmodule.h" -#include "audit.h" -#include "osmodule.h" -#include "intrcheck.h" -#include "import.h" -#include "abstract.h" -#include "bltinmodule.h" -#include "cpython/pyctype.h" -#include "pystrtod.h" -#include "pystrcmp.h" -#include "fileutils.h" -#include "cpython/pyfpe.h" -#include "cpython/tracemalloc.h" - -// Restore warning filter -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#endif /* !Py_PYTHON_H */ diff --git a/Python314_4_x86_Template/include/abstract.h b/Python314_4_x86_Template/include/abstract.h deleted file mode 100644 index 80f329870..000000000 --- a/Python314_4_x86_Template/include/abstract.h +++ /dev/null @@ -1,915 +0,0 @@ -/* Abstract Object Interface (many thanks to Jim Fulton) */ - -#ifndef Py_ABSTRACTOBJECT_H -#define Py_ABSTRACTOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* === Object Protocol ================================================== */ - -/* Implemented elsewhere: - - int PyObject_Print(PyObject *o, FILE *fp, int flags); - - Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument - is used to enable certain printing options. The only option currently - supported is Py_PRINT_RAW. By default (flags=0), PyObject_Print() formats - the object by calling PyObject_Repr(). If flags equals to Py_PRINT_RAW, it - formats the object by calling PyObject_Str(). */ - - -/* Implemented elsewhere: - - int PyObject_HasAttrString(PyObject *o, const char *attr_name); - - Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise. - - This is equivalent to the Python expression: hasattr(o,attr_name). - - This function always succeeds. */ - - -/* Implemented elsewhere: - - PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name); - - Retrieve an attributed named attr_name form object o. - Returns the attribute value on success, or NULL on failure. - - This is the equivalent of the Python expression: o.attr_name. */ - - -/* Implemented elsewhere: - - int PyObject_HasAttr(PyObject *o, PyObject *attr_name); - - Returns 1 if o has the attribute attr_name, and 0 otherwise. - - This is equivalent to the Python expression: hasattr(o,attr_name). - - This function always succeeds. */ - - -/* Implemented elsewhere: - - int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name); - - Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise. - This is equivalent to the Python expression: hasattr(o,attr_name). - Returns -1 on failure. */ - - -/* Implemented elsewhere: - - int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name); - - Returns 1 if o has the attribute attr_name, and 0 otherwise. - This is equivalent to the Python expression: hasattr(o,attr_name). - Returns -1 on failure. */ - - -/* Implemented elsewhere: - - PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); - - Retrieve an attributed named 'attr_name' form object 'o'. - Returns the attribute value on success, or NULL on failure. - - This is the equivalent of the Python expression: o.attr_name. */ - - -/* Implemented elsewhere: - - int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result); - - Variant of PyObject_GetAttr() which doesn't raise AttributeError - if the attribute is not found. - - If the attribute is found, return 1 and set *result to a new strong - reference to the attribute. - If the attribute is not found, return 0 and set *result to NULL; - the AttributeError is silenced. - If an error other than AttributeError is raised, return -1 and - set *result to NULL. -*/ - - -/* Implemented elsewhere: - - int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result); - - Variant of PyObject_GetAttrString() which doesn't raise AttributeError - if the attribute is not found. - - If the attribute is found, return 1 and set *result to a new strong - reference to the attribute. - If the attribute is not found, return 0 and set *result to NULL; - the AttributeError is silenced. - If an error other than AttributeError is raised, return -1 and - set *result to NULL. -*/ - - -/* Implemented elsewhere: - - int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v); - - Set the value of the attribute named attr_name, for object 'o', - to the value 'v'. Raise an exception and return -1 on failure; return 0 on - success. - - This is the equivalent of the Python statement o.attr_name=v. */ - - -/* Implemented elsewhere: - - int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v); - - Set the value of the attribute named attr_name, for object 'o', to the value - 'v'. an exception and return -1 on failure; return 0 on success. - - This is the equivalent of the Python statement o.attr_name=v. */ - -/* Implemented elsewhere: - - int PyObject_DelAttrString(PyObject *o, const char *attr_name); - - Delete attribute named attr_name, for object o. Returns - -1 on failure. - - This is the equivalent of the Python statement: del o.attr_name. - - Implemented as a macro in the limited C API 3.12 and older. */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030d0000 -# define PyObject_DelAttrString(O, A) PyObject_SetAttrString((O), (A), NULL) -#endif - - -/* Implemented elsewhere: - - int PyObject_DelAttr(PyObject *o, PyObject *attr_name); - - Delete attribute named attr_name, for object o. Returns -1 - on failure. This is the equivalent of the Python - statement: del o.attr_name. - - Implemented as a macro in the limited C API 3.12 and older. */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030d0000 -# define PyObject_DelAttr(O, A) PyObject_SetAttr((O), (A), NULL) -#endif - - -/* Implemented elsewhere: - - PyObject *PyObject_Repr(PyObject *o); - - Compute the string representation of object 'o'. Returns the - string representation on success, NULL on failure. - - This is the equivalent of the Python expression: repr(o). - - Called by the repr() built-in function. */ - - -/* Implemented elsewhere: - - PyObject *PyObject_Str(PyObject *o); - - Compute the string representation of object, o. Returns the - string representation on success, NULL on failure. - - This is the equivalent of the Python expression: str(o). - - Called by the str() and print() built-in functions. */ - - -/* Declared elsewhere - - PyAPI_FUNC(int) PyCallable_Check(PyObject *o); - - Determine if the object, o, is callable. Return 1 if the object is callable - and 0 otherwise. - - This function always succeeds. */ - - -#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'. - - 'args' must not be NULL, use an empty tuple if no arguments are - needed. If no named arguments are needed, 'kwargs' can be NULL. - - This is the equivalent of the Python expression: - callable(*args, **kwargs). */ -PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable, - PyObject *args, PyObject *kwargs); - - -/* Call a callable Python object 'callable', with arguments given by the - tuple 'args'. If no arguments are needed, then 'args' can be NULL. - - Returns the result of the call on success, or NULL on failure. - - This is the equivalent of the Python expression: - callable(*args). */ -PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable, - PyObject *args); - -/* Call a callable Python object, callable, with a variable number of C - arguments. The C arguments are described using a mkvalue-style format - string. - - The format may be NULL, indicating that no arguments are provided. - - Returns the result of the call on success, or NULL on failure. - - This is the equivalent of the Python expression: - callable(arg1, arg2, ...). */ -PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable, - const char *format, ...); - -/* Call the method named 'name' of object 'obj' with a variable number of - C arguments. The C arguments are described by a mkvalue format string. - - The format can be NULL, indicating that no arguments are provided. - - Returns the result of the call on success, or NULL on failure. - - This is the equivalent of the Python expression: - obj.name(arg1, arg2, ...). */ -PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj, - const char *name, - const char *format, ...); - -/* Call a callable Python object 'callable' with a variable number of C - arguments. The C arguments are provided as PyObject* values, terminated - by a NULL. - - Returns the result of the call on success, or NULL on failure. - - This is the equivalent of the Python expression: - callable(arg1, arg2, ...). */ -PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable, - ...); - -/* Call the method named 'name' of object 'obj' with a variable number of - C arguments. The C arguments are provided as PyObject* values, terminated - by NULL. - - Returns the result of the call on success, or NULL on failure. - - This is the equivalent of the Python expression: obj.name(*args). */ - -PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs( - PyObject *obj, - PyObject *name, - ...); - -/* Given a vectorcall nargsf argument, return the actual number of arguments. - * (For use outside the limited API, this is re-defined as a static inline - * function in cpython/abstract.h) - */ -PyAPI_FUNC(Py_ssize_t) PyVectorcall_NARGS(size_t nargsf); - -/* Call "callable" (which must support vectorcall) with positional arguments - "tuple" and keyword arguments "dict". "dict" may also be NULL */ -PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000 -#define PY_VECTORCALL_ARGUMENTS_OFFSET \ - (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1)) - -/* Perform a PEP 590-style vector call on 'callable' */ -PyAPI_FUNC(PyObject *) PyObject_Vectorcall( - PyObject *callable, - PyObject *const *args, - size_t nargsf, - PyObject *kwnames); - -/* Call the method 'name' on args[0] with arguments in args[1..nargsf-1]. */ -PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod( - PyObject *name, PyObject *const *args, - size_t nargsf, PyObject *kwnames); -#endif - -/* Implemented elsewhere: - - Py_hash_t PyObject_Hash(PyObject *o); - - Compute and return the hash, hash_value, of an object, o. On - failure, return -1. - - This is the equivalent of the Python expression: hash(o). */ - - -/* Implemented elsewhere: - - int PyObject_IsTrue(PyObject *o); - - Returns 1 if the object, o, is considered to be true, 0 if o is - considered to be false and -1 on failure. - - This is equivalent to the Python expression: not not o. */ - - -/* Implemented elsewhere: - - int PyObject_Not(PyObject *o); - - Returns 0 if the object, o, is considered to be true, 1 if o is - considered to be false and -1 on failure. - - This is equivalent to the Python expression: not o. */ - - -/* Get the type of an object. - - On success, returns a type object corresponding to the object type of object - 'o'. On failure, returns NULL. - - This is equivalent to the Python expression: type(o) */ -PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o); - - -/* Return the size of object 'o'. If the object 'o' provides both sequence and - mapping protocols, the sequence size is returned. - - On error, -1 is returned. - - This is the equivalent to the Python expression: len(o) */ -PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o); - - -/* For DLL compatibility */ -#undef PyObject_Length -PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o); -#define PyObject_Length PyObject_Size - -/* Return element of 'o' corresponding to the object 'key'. Return NULL - on failure. - - This is the equivalent of the Python expression: o[key] */ -PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key); - - -/* Map the object 'key' to the value 'v' into 'o'. - - Raise an exception and return -1 on failure; return 0 on success. - - This is the equivalent of the Python statement: o[key]=v. */ -PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v); - -/* Remove the mapping for the string 'key' from the object 'o'. - Returns -1 on failure. - - This is equivalent to the Python statement: del o[key]. */ -PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key); - -/* Delete the mapping for the object 'key' from the object 'o'. - Returns -1 on failure. - - This is the equivalent of the Python statement: del o[key]. */ -PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key); - - -/* Takes an arbitrary object and returns the result of calling - obj.__format__(format_spec). */ -PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj, - PyObject *format_spec); - - -/* ==== Iterators ================================================ */ - -/* Takes an object and returns an iterator for it. - This is typically a new iterator but if the argument is an iterator, this - returns itself. */ -PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *); - -/* Takes an AsyncIterable object and returns an AsyncIterator for it. - This is typically a new iterator but if the argument is an AsyncIterator, - this returns itself. */ -PyAPI_FUNC(PyObject *) PyObject_GetAIter(PyObject *); - -/* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise. - - This function always succeeds. */ -PyAPI_FUNC(int) PyIter_Check(PyObject *); - -/* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise. - - This function always succeeds. */ -PyAPI_FUNC(int) PyAIter_Check(PyObject *); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030e0000 -/* Return 1 and set 'item' to the next item of 'iter' on success. - * Return 0 and set 'item' to NULL when there are no remaining values. - * Return -1, set 'item' to NULL and set an exception on error. - */ -PyAPI_FUNC(int) PyIter_NextItem(PyObject *iter, PyObject **item); -#endif - -/* Takes an iterator object and calls its tp_iternext slot, - returning the next value. - - If the iterator is exhausted, this returns NULL without setting an - exception. - - NULL with an exception means an error occurred. - - Prefer PyIter_NextItem() instead. */ -PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 - -/* Takes generator, coroutine or iterator object and sends the value into it. - Returns: - - PYGEN_RETURN (0) if generator has returned. - 'result' parameter is filled with return value - - PYGEN_ERROR (-1) if exception was raised. - 'result' parameter is NULL - - PYGEN_NEXT (1) if generator has yielded. - 'result' parameter is filled with yielded value. */ -PyAPI_FUNC(PySendResult) PyIter_Send(PyObject *, PyObject *, PyObject **); -#endif - - -/* === Number Protocol ================================================== */ - -/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise. - - This function always succeeds. */ -PyAPI_FUNC(int) PyNumber_Check(PyObject *o); - -/* Returns the result of adding o1 and o2, or NULL on failure. - - This is the equivalent of the Python expression: o1 + o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2); - -/* Returns the result of subtracting o2 from o1, or NULL on failure. - - This is the equivalent of the Python expression: o1 - o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2); - -/* Returns the result of multiplying o1 and o2, or NULL on failure. - - This is the equivalent of the Python expression: o1 * o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* This is the equivalent of the Python expression: o1 @ o2. */ -PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2); -#endif - -/* Returns the result of dividing o1 by o2 giving an integral result, - or NULL on failure. - - This is the equivalent of the Python expression: o1 // o2. */ -PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2); - -/* Returns the result of dividing o1 by o2 giving a float result, or NULL on - failure. - - This is the equivalent of the Python expression: o1 / o2. */ -PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2); - -/* Returns the remainder of dividing o1 by o2, or NULL on failure. - - This is the equivalent of the Python expression: o1 % o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2); - -/* See the built-in function divmod. - - Returns NULL on failure. - - This is the equivalent of the Python expression: divmod(o1, o2). */ -PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2); - -/* See the built-in function pow. Returns NULL on failure. - - This is the equivalent of the Python expression: pow(o1, o2, o3), - where o3 is optional. */ -PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2, - PyObject *o3); - -/* Returns the negation of o on success, or NULL on failure. - - This is the equivalent of the Python expression: -o. */ -PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o); - -/* Returns the positive of o on success, or NULL on failure. - - This is the equivalent of the Python expression: +o. */ -PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o); - -/* Returns the absolute value of 'o', or NULL on failure. - - This is the equivalent of the Python expression: abs(o). */ -PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o); - -/* Returns the bitwise negation of 'o' on success, or NULL on failure. - - This is the equivalent of the Python expression: ~o. */ -PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o); - -/* Returns the result of left shifting o1 by o2 on success, or NULL on failure. - - This is the equivalent of the Python expression: o1 << o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2); - -/* Returns the result of right shifting o1 by o2 on success, or NULL on - failure. - - This is the equivalent of the Python expression: o1 >> o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2); - -/* Returns the result of bitwise and of o1 and o2 on success, or NULL on - failure. - - This is the equivalent of the Python expression: o1 & o2. */ -PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2); - -/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure. - - This is the equivalent of the Python expression: o1 ^ o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2); - -/* Returns the result of bitwise or on o1 and o2 on success, or NULL on - failure. - - This is the equivalent of the Python expression: o1 | o2. */ -PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2); - -/* Returns 1 if obj is an index integer (has the nb_index slot of the - tp_as_number structure filled in), and 0 otherwise. */ -PyAPI_FUNC(int) PyIndex_Check(PyObject *); - -/* Returns the object 'o' converted to a Python int, or NULL with an exception - raised on failure. */ -PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o); - -/* Returns the object 'o' converted to Py_ssize_t by going through - PyNumber_Index() first. - - If an overflow error occurs while converting the int to Py_ssize_t, then the - second argument 'exc' is the error-type to return. If it is NULL, then the - overflow error is cleared and the value is clipped. */ -PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc); - -/* Returns the object 'o' converted to an integer object on success, or NULL - on failure. - - This is the equivalent of the Python expression: int(o). */ -PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); - -/* Returns the object 'o' converted to a float object on success, or NULL - on failure. - - This is the equivalent of the Python expression: float(o). */ -PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o); - - -/* --- In-place variants of (some of) the above number protocol functions -- */ - -/* Returns the result of adding o2 to o1, possibly in-place, or NULL - on failure. - - This is the equivalent of the Python expression: o1 += o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); - -/* Returns the result of subtracting o2 from o1, possibly in-place or - NULL on failure. - - This is the equivalent of the Python expression: o1 -= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); - -/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on - failure. - - This is the equivalent of the Python expression: o1 *= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* This is the equivalent of the Python expression: o1 @= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2); -#endif - -/* Returns the result of dividing o1 by o2 giving an integral result, possibly - in-place, or NULL on failure. - - This is the equivalent of the Python expression: o1 /= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1, - PyObject *o2); - -/* Returns the result of dividing o1 by o2 giving a float result, possibly - in-place, or null on failure. - - This is the equivalent of the Python expression: o1 /= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1, - PyObject *o2); - -/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on - failure. - - This is the equivalent of the Python expression: o1 %= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); - -/* Returns the result of raising o1 to the power of o2, possibly in-place, - or NULL on failure. - - This is the equivalent of the Python expression: o1 **= o2, - or o1 = pow(o1, o2, o3) if o3 is present. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, - PyObject *o3); - -/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL - on failure. - - This is the equivalent of the Python expression: o1 <<= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); - -/* Returns the result of right shifting o1 by o2, possibly in-place or NULL - on failure. - - This is the equivalent of the Python expression: o1 >>= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); - -/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL - on failure. - - This is the equivalent of the Python expression: o1 &= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); - -/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL - on failure. - - This is the equivalent of the Python expression: o1 ^= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); - -/* Returns the result of bitwise or of o1 and o2, possibly in-place, - or NULL on failure. - - This is the equivalent of the Python expression: o1 |= o2. */ -PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); - -/* Returns the integer n converted to a string with a base, with a base - marker of 0b, 0o or 0x prefixed if applicable. - - If n is not an int object, it is converted with PyNumber_Index first. */ -PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base); - - -/* === Sequence protocol ================================================ */ - -/* Return 1 if the object provides sequence protocol, and zero - otherwise. - - This function always succeeds. */ -PyAPI_FUNC(int) PySequence_Check(PyObject *o); - -/* Return the size of sequence object o, or -1 on failure. */ -PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o); - -/* For DLL compatibility */ -#undef PySequence_Length -PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o); -#define PySequence_Length PySequence_Size - - -/* Return the concatenation of o1 and o2 on success, and NULL on failure. - - This is the equivalent of the Python expression: o1 + o2. */ -PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2); - -/* Return the result of repeating sequence object 'o' 'count' times, - or NULL on failure. - - This is the equivalent of the Python expression: o * count. */ -PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count); - -/* Return the ith element of o, or NULL on failure. - - This is the equivalent of the Python expression: o[i]. */ -PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i); - -/* Return the slice of sequence object o between i1 and i2, or NULL on failure. - - This is the equivalent of the Python expression: o[i1:i2]. */ -PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); - -/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception - and return -1 on failure; return 0 on success. - - This is the equivalent of the Python statement o[i] = v. */ -PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v); - -/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure. - - This is the equivalent of the Python statement: del o[i]. */ -PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i); - -/* Assign the sequence object 'v' to the slice in sequence object 'o', - from 'i1' to 'i2'. Returns -1 on failure. - - This is the equivalent of the Python statement: o[i1:i2] = v. */ -PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, - PyObject *v); - -/* Delete the slice in sequence object 'o' from 'i1' to 'i2'. - Returns -1 on failure. - - This is the equivalent of the Python statement: del o[i1:i2]. */ -PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); - -/* Returns the sequence 'o' as a tuple on success, and NULL on failure. - - This is equivalent to the Python expression: tuple(o). */ -PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o); - -/* Returns the sequence 'o' as a list on success, and NULL on failure. - This is equivalent to the Python expression: list(o) */ -PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o); - -/* Return the sequence 'o' as a list, unless it's already a tuple or list. - - Use PySequence_Fast_GET_ITEM to access the members of this list, and - PySequence_Fast_GET_SIZE to get its length. - - Returns NULL on failure. If the object does not support iteration, raises a - TypeError exception with 'm' as the message text. */ -PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); - -/* Return the number of occurrences on value on 'o', that is, return - the number of keys for which o[key] == value. - - On failure, return -1. This is equivalent to the Python expression: - o.count(value). */ -PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value); - -/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence - 'seq'; -1 on error. - - Use __contains__ if possible, else _PySequence_IterSearch(). */ -PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob); - -/* For DLL-level backwards compatibility */ -#undef PySequence_In -/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal - to 'value', return 1, otherwise return 0. On error, return -1. - - This is equivalent to the Python expression: value in o. */ -PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value); - -/* For source-level backwards compatibility */ -#define PySequence_In PySequence_Contains - - -/* Return the first index for which o[i] == value. - On error, return -1. - - This is equivalent to the Python expression: o.index(value). */ -PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value); - - -/* --- In-place versions of some of the above Sequence functions --- */ - -/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the - resulting object, which could be 'o1', or NULL on failure. - - This is the equivalent of the Python expression: o1 += o2. */ -PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); - -/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting - object, which could be 'o', or NULL on failure. - - This is the equivalent of the Python expression: o1 *= count. */ -PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count); - - -/* === Mapping protocol ================================================= */ - -/* Return 1 if the object provides mapping protocol, and 0 otherwise. - - This function always succeeds. */ -PyAPI_FUNC(int) PyMapping_Check(PyObject *o); - -/* Returns the number of keys in mapping object 'o' on success, and -1 on - failure. This is equivalent to the Python expression: len(o). */ -PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o); - -/* For DLL compatibility */ -#undef PyMapping_Length -PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o); -#define PyMapping_Length PyMapping_Size - - -/* Implemented as a macro: - - int PyMapping_DelItemString(PyObject *o, const char *key); - - Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on - failure. - - This is equivalent to the Python statement: del o[key]. */ -#define PyMapping_DelItemString(O, K) PyObject_DelItemString((O), (K)) - -/* Implemented as a macro: - - int PyMapping_DelItem(PyObject *o, PyObject *key); - - Remove the mapping for the object 'key' from the mapping object 'o'. - Returns -1 on failure. - - This is equivalent to the Python statement: del o[key]. */ -#define PyMapping_DelItem(O, K) PyObject_DelItem((O), (K)) - -/* On success, return 1 if the mapping object 'o' has the key 'key', - and 0 otherwise. - - This is equivalent to the Python expression: key in o. - - This function always succeeds. */ -PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key); - -/* Return 1 if the mapping object has the key 'key', and 0 otherwise. - - This is equivalent to the Python expression: key in o. - - This function always succeeds. */ -PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); - -/* Return 1 if the mapping object has the key 'key', and 0 otherwise. - This is equivalent to the Python expression: key in o. - On failure, return -1. */ - -PyAPI_FUNC(int) PyMapping_HasKeyWithError(PyObject *o, PyObject *key); - -/* Return 1 if the mapping object has the key 'key', and 0 otherwise. - This is equivalent to the Python expression: key in o. - On failure, return -1. */ - -PyAPI_FUNC(int) PyMapping_HasKeyStringWithError(PyObject *o, const char *key); - -/* On success, return a list of the keys in mapping object 'o'. - On failure, return NULL. */ -PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); - -/* On success, return a list of the values in mapping object 'o'. - On failure, return NULL. */ -PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o); - -/* On success, return a list of the items in mapping object 'o', - where each item is a tuple containing a key-value pair. On failure, return - NULL. */ -PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o); - -/* Return element of 'o' corresponding to the string 'key' or NULL on failure. - - This is the equivalent of the Python expression: o[key]. */ -PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, - const char *key); - -/* Variants of PyObject_GetItem() and PyMapping_GetItemString() which don't - raise KeyError if the key is not found. - - If the key is found, return 1 and set *result to a new strong - reference to the corresponding value. - If the key is not found, return 0 and set *result to NULL; - the KeyError is silenced. - If an error other than KeyError is raised, return -1 and - set *result to NULL. -*/ -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(int) PyMapping_GetOptionalItem(PyObject *, PyObject *, PyObject **); -PyAPI_FUNC(int) PyMapping_GetOptionalItemString(PyObject *, const char *, PyObject **); -#endif - -/* Map the string 'key' to the value 'v' in the mapping 'o'. - Returns -1 on failure. - - This is the equivalent of the Python statement: o[key]=v. */ -PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key, - PyObject *value); - -/* isinstance(object, typeorclass) */ -PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass); - -/* issubclass(object, typeorclass) */ -PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_ABSTRACTOBJECT_H -# include "cpython/abstract.h" -# undef Py_CPYTHON_ABSTRACTOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* Py_ABSTRACTOBJECT_H */ diff --git a/Python314_4_x86_Template/include/audit.h b/Python314_4_x86_Template/include/audit.h deleted file mode 100644 index 9be54ad44..000000000 --- a/Python314_4_x86_Template/include/audit.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _Py_AUDIT_H -#define _Py_AUDIT_H -#ifdef __cplusplus -extern "C" { -#endif - - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(int) PySys_Audit( - const char *event, - const char *argFormat, - ...); - -PyAPI_FUNC(int) PySys_AuditTuple( - const char *event, - PyObject *args); -#endif - - -#ifndef Py_LIMITED_API -# define _Py_CPYTHON_AUDIT_H -# include "cpython/audit.h" -# undef _Py_CPYTHON_AUDIT_H -#endif - - -#ifdef __cplusplus -} -#endif -#endif /* !_Py_AUDIT_H */ diff --git a/Python314_4_x86_Template/include/bltinmodule.h b/Python314_4_x86_Template/include/bltinmodule.h deleted file mode 100644 index 868c9e644..000000000 --- a/Python314_4_x86_Template/include/bltinmodule.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef Py_BLTINMODULE_H -#define Py_BLTINMODULE_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyFilter_Type; -PyAPI_DATA(PyTypeObject) PyMap_Type; -PyAPI_DATA(PyTypeObject) PyZip_Type; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BLTINMODULE_H */ diff --git a/Python314_4_x86_Template/include/boolobject.h b/Python314_4_x86_Template/include/boolobject.h deleted file mode 100644 index b56e2baec..000000000 --- a/Python314_4_x86_Template/include/boolobject.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Boolean object interface */ - -#ifndef Py_BOOLOBJECT_H -#define Py_BOOLOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -// PyBool_Type is declared by object.h - -#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type) - -/* Py_False and Py_True are the only two bools in existence. */ - -/* Don't use these directly */ -PyAPI_DATA(PyLongObject) _Py_FalseStruct; -PyAPI_DATA(PyLongObject) _Py_TrueStruct; - -/* Use these macros */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000 -# define Py_False Py_GetConstantBorrowed(Py_CONSTANT_FALSE) -# define Py_True Py_GetConstantBorrowed(Py_CONSTANT_TRUE) -#else -# define Py_False _PyObject_CAST(&_Py_FalseStruct) -# define Py_True _PyObject_CAST(&_Py_TrueStruct) -#endif - -// Test if an object is the True singleton, the same as "x is True" in Python. -PyAPI_FUNC(int) Py_IsTrue(PyObject *x); -#define Py_IsTrue(x) Py_Is((x), Py_True) - -// Test if an object is the False singleton, the same as "x is False" in Python. -PyAPI_FUNC(int) Py_IsFalse(PyObject *x); -#define Py_IsFalse(x) Py_Is((x), Py_False) - -/* Macros for returning Py_True or Py_False, respectively. - * Only treat Py_True and Py_False as immortal in the limited C API 3.12 - * and newer. */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030c0000 -# define Py_RETURN_TRUE return Py_NewRef(Py_True) -# define Py_RETURN_FALSE return Py_NewRef(Py_False) -#else -# define Py_RETURN_TRUE return Py_True -# define Py_RETURN_FALSE return Py_False -#endif - -/* Function to return a bool from a C long */ -PyAPI_FUNC(PyObject *) PyBool_FromLong(long); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BOOLOBJECT_H */ diff --git a/Python314_4_x86_Template/include/bytearrayobject.h b/Python314_4_x86_Template/include/bytearrayobject.h deleted file mode 100644 index 3d53fdba6..000000000 --- a/Python314_4_x86_Template/include/bytearrayobject.h +++ /dev/null @@ -1,44 +0,0 @@ -/* ByteArray object interface */ - -#ifndef Py_BYTEARRAYOBJECT_H -#define Py_BYTEARRAYOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Type PyByteArrayObject represents a mutable array of bytes. - * The Python API is that of a sequence; - * the bytes are mapped to ints in [0, 256). - * Bytes are not characters; they may be used to encode characters. - * The only way to go between bytes and str/unicode is via encoding - * and decoding. - * For the convenience of C programmers, the bytes type is considered - * to contain a char pointer, not an unsigned char pointer. - */ - -/* 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_IS_TYPE((self), &PyByteArray_Type) - -/* Direct API functions */ -PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *); -PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t); -PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *); -PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *); -PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_BYTEARRAYOBJECT_H -# include "cpython/bytearrayobject.h" -# undef Py_CPYTHON_BYTEARRAYOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BYTEARRAYOBJECT_H */ diff --git a/Python314_4_x86_Template/include/bytesobject.h b/Python314_4_x86_Template/include/bytesobject.h deleted file mode 100644 index c5a24195b..000000000 --- a/Python314_4_x86_Template/include/bytesobject.h +++ /dev/null @@ -1,66 +0,0 @@ -// Bytes object interface - -#ifndef Py_BYTESOBJECT_H -#define Py_BYTESOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* -Type PyBytesObject represents a byte string. An extra zero byte is -reserved at the end to ensure it is zero-terminated, but a size is -present so strings with null bytes in them can be represented. This -is an immutable object type. - -There are functions to create new bytes objects, to test -an object for bytes-ness, and to get the -byte string value. The latter function returns a null pointer -if the object is not of the proper type. -There is a variant that takes an explicit size as well as a -variant that assumes a zero-terminated string. Note that none of the -functions should be applied to NULL pointer. -*/ - -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_IS_TYPE((op), &PyBytes_Type) - -PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); -PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); -PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *); -PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list) - Py_GCC_ATTRIBUTE((format(printf, 1, 0))); -PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...) - Py_GCC_ATTRIBUTE((format(printf, 1, 2))); -PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *); -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 *); -PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, - const char *, Py_ssize_t, - const char *); - -/* Provides access to the internal data buffer and size of a bytes object. - Passing NULL as len parameter will force the string buffer to be - 0-terminated (passing a string with embedded NUL characters will - cause an exception). */ -PyAPI_FUNC(int) PyBytes_AsStringAndSize( - PyObject *obj, /* bytes object */ - char **s, /* pointer to buffer variable */ - Py_ssize_t *len /* pointer to length variable or NULL */ - ); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_BYTESOBJECT_H -# include "cpython/bytesobject.h" -# undef Py_CPYTHON_BYTESOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BYTESOBJECT_H */ diff --git a/Python314_4_x86_Template/include/ceval.h b/Python314_4_x86_Template/include/ceval.h deleted file mode 100644 index e9df86849..000000000 --- a/Python314_4_x86_Template/include/ceval.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Interface to random parts in ceval.c */ - -#ifndef Py_CEVAL_H -#define Py_CEVAL_H -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyObject *, PyObject *, PyObject *); - -PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co, - PyObject *globals, - PyObject *locals, - PyObject *const *args, int argc, - PyObject *const *kwds, int kwdc, - PyObject *const *defs, int defc, - PyObject *kwdefs, PyObject *closure); - -PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); -PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); -PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); -PyAPI_FUNC(PyFrameObject *) PyEval_GetFrame(void); - -PyAPI_FUNC(PyObject *) PyEval_GetFrameBuiltins(void); -PyAPI_FUNC(PyObject *) PyEval_GetFrameGlobals(void); -PyAPI_FUNC(PyObject *) PyEval_GetFrameLocals(void); - -PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); -PyAPI_FUNC(int) Py_MakePendingCalls(void); - -/* Protection against deeply nested recursive calls - - In Python 3.0, this protection has two levels: - * normal anti-recursion protection is triggered when the recursion level - exceeds the current recursion limit. It raises a RecursionError, and sets - the "overflowed" flag in the thread state structure. This flag - temporarily *disables* the normal protection; this allows cleanup code - to potentially outgrow the recursion limit while processing the - RecursionError. - * "last chance" anti-recursion protection is triggered when the recursion - level exceeds "current recursion limit + 50". By construction, this - protection can only be triggered when the "overflowed" flag is set. It - means the cleanup code has itself gone into an infinite loop, or the - RecursionError has been mistakenly ignored. When this protection is - triggered, the interpreter aborts with a Fatal Error. - - In addition, the "overflowed" flag is automatically reset when the - recursion level drops below "current recursion limit - 50". This heuristic - is meant to ensure that the normal anti-recursion protection doesn't get - disabled too long. - - Please note: this scheme has its own limitations. See: - http://mail.python.org/pipermail/python-dev/2008-August/082106.html - for some observations. -*/ -PyAPI_FUNC(void) Py_SetRecursionLimit(int); -PyAPI_FUNC(int) Py_GetRecursionLimit(void); - -PyAPI_FUNC(int) Py_EnterRecursiveCall(const char *where); -PyAPI_FUNC(void) Py_LeaveRecursiveCall(void); - -PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); -PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); - -PyAPI_FUNC(PyObject *) PyEval_EvalFrame(PyFrameObject *); -PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc); - -/* Interface for threads. - - A module that plans to do a blocking system call (or something else - that lasts a long time and doesn't touch Python data) can allow other - threads to run as follows: - - ...preparations here... - Py_BEGIN_ALLOW_THREADS - ...blocking system call here... - Py_END_ALLOW_THREADS - ...interpret result here... - - The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a - {}-surrounded block. - To leave the block in the middle (e.g., with return), you must insert - a line containing Py_BLOCK_THREADS before the return, e.g. - - if (...premature_exit...) { - Py_BLOCK_THREADS - PyErr_SetFromErrno(PyExc_OSError); - return NULL; - } - - An alternative is: - - Py_BLOCK_THREADS - if (...premature_exit...) { - PyErr_SetFromErrno(PyExc_OSError); - return NULL; - } - Py_UNBLOCK_THREADS - - For convenience, that the value of 'errno' is restored across - Py_END_ALLOW_THREADS and Py_BLOCK_THREADS. - - WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND - Py_END_ALLOW_THREADS!!! - - Note that not yet all candidates have been converted to use this - mechanism! -*/ - -PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); -PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); - -Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); - -PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); -PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); - -#define Py_BEGIN_ALLOW_THREADS { \ - PyThreadState *_save; \ - _save = PyEval_SaveThread(); -#define Py_BLOCK_THREADS PyEval_RestoreThread(_save); -#define Py_UNBLOCK_THREADS _save = PyEval_SaveThread(); -#define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ - } - -/* Masks and values used by FORMAT_VALUE opcode. */ -#define FVC_MASK 0x3 -#define FVC_NONE 0x0 -#define FVC_STR 0x1 -#define FVC_REPR 0x2 -#define FVC_ASCII 0x3 -#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 -#endif /* !Py_CEVAL_H */ diff --git a/Python314_4_x86_Template/include/codecs.h b/Python314_4_x86_Template/include/codecs.h deleted file mode 100644 index 512a3c723..000000000 --- a/Python314_4_x86_Template/include/codecs.h +++ /dev/null @@ -1,176 +0,0 @@ -#ifndef Py_CODECREGISTRY_H -#define Py_CODECREGISTRY_H -#ifdef __cplusplus -extern "C" { -#endif - -/* ------------------------------------------------------------------------ - - Python Codec Registry and support functions - - -Written by Marc-Andre Lemburg (mal@lemburg.com). - -Copyright (c) Corporation for National Research Initiatives. - - ------------------------------------------------------------------------ */ - -/* Register a new codec search function. - - As side effect, this tries to load the encodings package, if not - yet done, to make sure that it is always first in the list of - search functions. - - The search_function's refcount is incremented by this function. */ - -PyAPI_FUNC(int) PyCodec_Register( - PyObject *search_function - ); - -/* Unregister a codec search function and clear the registry's cache. - If the search function is not registered, do nothing. - Return 0 on success. Raise an exception and return -1 on error. */ - -PyAPI_FUNC(int) PyCodec_Unregister( - PyObject *search_function - ); - -/* Codec registry encoding check API. - - Returns 1/0 depending on whether there is a registered codec for - the given encoding. - -*/ - -PyAPI_FUNC(int) PyCodec_KnownEncoding( - const char *encoding - ); - -/* Generic codec based encoding API. - - object is passed through the encoder function found for the given - encoding using the error handling method defined by errors. errors - may be NULL to use the default method defined for the codec. - - Raises a LookupError in case no encoder can be found. - - */ - -PyAPI_FUNC(PyObject *) PyCodec_Encode( - PyObject *object, - const char *encoding, - const char *errors - ); - -/* Generic codec based decoding API. - - object is passed through the decoder function found for the given - encoding using the error handling method defined by errors. errors - may be NULL to use the default method defined for the codec. - - Raises a LookupError in case no encoder can be found. - - */ - -PyAPI_FUNC(PyObject *) PyCodec_Decode( - PyObject *object, - const char *encoding, - const char *errors - ); - -// --- Codec Lookup APIs -------------------------------------------------- - -/* Codec registry lookup API. - - Looks up the given encoding and returns a CodecInfo object with - function attributes which implement the different aspects of - processing the encoding. - - The encoding string is looked up converted to all lower-case - characters. This makes encodings looked up through this mechanism - effectively case-insensitive. - - If no codec is found, a KeyError is set and NULL returned. - - As side effect, this tries to load the encodings package, if not - yet done. This is part of the lazy load strategy for the encodings - package. - */ - -/* Get an encoder function for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_Encoder(const char *encoding); - -/* Get a decoder function for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_Decoder(const char *encoding); - -/* Get an IncrementalEncoder object for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder( - const char *encoding, - const char *errors); - -/* Get an IncrementalDecoder object function for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder( - const char *encoding, - const char *errors); - -/* Get a StreamReader factory function for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_StreamReader( - const char *encoding, - PyObject *stream, - const char *errors); - -/* Get a StreamWriter factory function for the given encoding. */ - -PyAPI_FUNC(PyObject *) PyCodec_StreamWriter( - const char *encoding, - PyObject *stream, - const char *errors); - -/* Unicode encoding error handling callback registry API */ - -/* Register the error handling callback function error under the given - name. This function will be called by the codec when it encounters - unencodable characters/undecodable bytes and doesn't know the - callback name, when name is specified as the error parameter - in the call to the encode/decode function. - Return 0 on success, -1 on error */ -PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error); - -/* Lookup the error handling callback function registered under the given - name. As a special case NULL can be passed, in which case - the error handling callback for "strict" will be returned. */ -PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name); - -/* raise exc as an exception */ -PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc); - -/* ignore the unicode error, skipping the faulty input */ -PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc); - -/* replace the unicode encode error with ? or U+FFFD */ -PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc); - -/* replace the unicode encode error with XML character references */ -PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc); - -/* replace the unicode encode error with backslash escapes (\x, \u and \U) */ -PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */ -PyAPI_FUNC(PyObject *) PyCodec_NameReplaceErrors(PyObject *exc); -#endif - -#ifndef Py_LIMITED_API -PyAPI_DATA(const char *) Py_hexdigits; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CODECREGISTRY_H */ diff --git a/Python314_4_x86_Template/include/compile.h b/Python314_4_x86_Template/include/compile.h deleted file mode 100644 index 52d0bc76c..000000000 --- a/Python314_4_x86_Template/include/compile.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef Py_COMPILE_H -#define Py_COMPILE_H -#ifdef __cplusplus -extern "C" { -#endif - -/* These definitions must match corresponding definitions in graminit.h. */ -#define Py_single_input 256 -#define Py_file_input 257 -#define Py_eval_input 258 -#define Py_func_type_input 345 - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_COMPILE_H -# include "cpython/compile.h" -# undef Py_CPYTHON_COMPILE_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_COMPILE_H */ diff --git a/Python314_4_x86_Template/include/complexobject.h b/Python314_4_x86_Template/include/complexobject.h deleted file mode 100644 index ebe49a832..000000000 --- a/Python314_4_x86_Template/include/complexobject.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Complex number structure */ - -#ifndef Py_COMPLEXOBJECT_H -#define Py_COMPLEXOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Complex object interface */ - -PyAPI_DATA(PyTypeObject) PyComplex_Type; - -#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type) -#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type) - -PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag); - -PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op); -PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_COMPLEXOBJECT_H -# include "cpython/complexobject.h" -# undef Py_CPYTHON_COMPLEXOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_COMPLEXOBJECT_H */ diff --git a/Python314_4_x86_Template/include/cpython/abstract.h b/Python314_4_x86_Template/include/cpython/abstract.h deleted file mode 100644 index ffd19ccd3..000000000 --- a/Python314_4_x86_Template/include/cpython/abstract.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef Py_CPYTHON_ABSTRACTOBJECT_H -# error "this header file must not be included directly" -#endif - -/* === Object Protocol ================================================== */ - -/* Like PyObject_CallMethod(), but expect a _Py_Identifier* - as the method name. */ -PyAPI_FUNC(PyObject*) _PyObject_CallMethodId( - PyObject *obj, - _Py_Identifier *name, - const char *format, ...); - -/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple) - format to a Python dictionary ("kwargs" dict). - - The type of kwnames keys is not checked. The final function getting - arguments is responsible to check if all keys are strings, for example using - PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments(). - - Duplicate keys are merged using the last value. If duplicate keys must raise - an exception, the caller is responsible to implement an explicit keys on - kwnames. */ -PyAPI_FUNC(PyObject*) _PyStack_AsDict(PyObject *const *values, PyObject *kwnames); - - -/* === Vectorcall protocol (PEP 590) ============================= */ - -// PyVectorcall_NARGS() is exported as a function for the stable ABI. -// Here (when we are not using the stable ABI), the name is overridden to -// call a static inline function for best performance. -static inline Py_ssize_t -_PyVectorcall_NARGS(size_t n) -{ - return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET; -} -#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n) - -PyAPI_FUNC(vectorcallfunc) PyVectorcall_Function(PyObject *callable); - -// Backwards compatibility aliases (PEP 590) 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_VectorcallDict( - PyObject *callable, - PyObject *const *args, - size_t nargsf, - PyObject *kwargs); - -PyAPI_FUNC(PyObject *) PyObject_CallOneArg(PyObject *func, PyObject *arg); - -static inline PyObject * -PyObject_CallMethodNoArgs(PyObject *self, PyObject *name) -{ - size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET; - return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL); -} - -static inline PyObject * -PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg) -{ - PyObject *args[2] = {self, arg}; - size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET; - assert(arg != NULL); - return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL); -} - -/* Guess the size of object 'o' using len(o) or o.__length_hint__(). - If neither of those return a non-negative value, then return the default - value. If one of the calls fails, this function returns -1. */ -PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t); - -/* === Sequence protocol ================================================ */ - -/* Assume tp_as_sequence and sq_item exist and that 'i' does not - need to be corrected for a negative index. */ -#define PySequence_ITEM(o, i)\ - ( Py_TYPE(o)->tp_as_sequence->sq_item((o), (i)) ) - -/* Return the size of the sequence 'o', assuming that 'o' was returned by - PySequence_Fast and is not NULL. */ -#define PySequence_Fast_GET_SIZE(o) \ - (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o)) - -/* Return the 'i'-th element of the sequence 'o', assuming that o was returned - by PySequence_Fast, and that i is within bounds. */ -#define PySequence_Fast_GET_ITEM(o, i)\ - (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i))) - -/* Return a pointer to the underlying item array for - 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/Python314_4_x86_Template/include/cpython/audit.h b/Python314_4_x86_Template/include/cpython/audit.h deleted file mode 100644 index 536f92486..000000000 --- a/Python314_4_x86_Template/include/cpython/audit.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _Py_CPYTHON_AUDIT_H -# error "this header file must not be included directly" -#endif - - -typedef int(*Py_AuditHookFunction)(const char *, PyObject *, void *); - -PyAPI_FUNC(int) PySys_AddAuditHook(Py_AuditHookFunction, void*); diff --git a/Python314_4_x86_Template/include/cpython/bytearrayobject.h b/Python314_4_x86_Template/include/cpython/bytearrayobject.h deleted file mode 100644 index 4dddef713..000000000 --- a/Python314_4_x86_Template/include/cpython/bytearrayobject.h +++ /dev/null @@ -1,38 +0,0 @@ -#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; - -PyAPI_DATA(char) _PyByteArray_empty_string[]; - -/* Macros and static inline functions, trading safety for speed */ -#define _PyByteArray_CAST(op) \ - (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op)) - -static inline char* PyByteArray_AS_STRING(PyObject *op) -{ - PyByteArrayObject *self = _PyByteArray_CAST(op); - if (Py_SIZE(self)) { - return self->ob_start; - } - return _PyByteArray_empty_string; -} -#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self)) - -static inline Py_ssize_t PyByteArray_GET_SIZE(PyObject *op) { - PyByteArrayObject *self = _PyByteArray_CAST(op); -#ifdef Py_GIL_DISABLED - return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(self)->ob_size)); -#else - return Py_SIZE(self); -#endif -} -#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self)) diff --git a/Python314_4_x86_Template/include/cpython/bytesobject.h b/Python314_4_x86_Template/include/cpython/bytesobject.h deleted file mode 100644 index 71c133f17..000000000 --- a/Python314_4_x86_Template/include/cpython/bytesobject.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef Py_CPYTHON_BYTESOBJECT_H -# error "this header file must not be included directly" -#endif - -typedef struct { - PyObject_VAR_HEAD - Py_DEPRECATED(3.11) 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 byte string or -1 if not computed yet. - */ -} PyBytesObject; - -PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); - -/* Macros and static inline functions, trading safety for speed */ -#define _PyBytes_CAST(op) \ - (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op)) - -static inline char* PyBytes_AS_STRING(PyObject *op) -{ - return _PyBytes_CAST(op)->ob_sval; -} -#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op)) - -static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) { - PyBytesObject *self = _PyBytes_CAST(op); - return Py_SIZE(self); -} -#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self)) - -PyAPI_FUNC(PyObject*) PyBytes_Join(PyObject *sep, PyObject *iterable); - -// Deprecated alias kept for backward compatibility -Py_DEPRECATED(3.14) static inline PyObject* -_PyBytes_Join(PyObject *sep, PyObject *iterable) -{ - return PyBytes_Join(sep, iterable); -} diff --git a/Python314_4_x86_Template/include/cpython/cellobject.h b/Python314_4_x86_Template/include/cpython/cellobject.h deleted file mode 100644 index 85a63a137..000000000 --- a/Python314_4_x86_Template/include/cpython/cellobject.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Cell object interface */ - -#ifndef Py_LIMITED_API -#ifndef Py_CELLOBJECT_H -#define Py_CELLOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PyObject_HEAD - /* Content of the cell or NULL when empty */ - PyObject *ob_ref; -} PyCellObject; - -PyAPI_DATA(PyTypeObject) PyCell_Type; - -#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type) - -PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); -PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); -PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *); - -static inline PyObject* PyCell_GET(PyObject *op) { - PyObject *res; - PyCellObject *cell; - assert(PyCell_Check(op)); - cell = _Py_CAST(PyCellObject*, op); - Py_BEGIN_CRITICAL_SECTION(cell); - res = cell->ob_ref; - Py_END_CRITICAL_SECTION(); - return res; -} -#define PyCell_GET(op) PyCell_GET(_PyObject_CAST(op)) - -static inline void PyCell_SET(PyObject *op, PyObject *value) { - PyCellObject *cell; - assert(PyCell_Check(op)); - cell = _Py_CAST(PyCellObject*, op); - Py_BEGIN_CRITICAL_SECTION(cell); - cell->ob_ref = value; - Py_END_CRITICAL_SECTION(); -} -#define PyCell_SET(op, value) PyCell_SET(_PyObject_CAST(op), (value)) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_TUPLEOBJECT_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/ceval.h b/Python314_4_x86_Template/include/cpython/ceval.h deleted file mode 100644 index ca8109e32..000000000 --- a/Python314_4_x86_Template/include/cpython/ceval.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef Py_CPYTHON_CEVAL_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) PyEval_SetProfileAllThreads(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) PyEval_SetTraceAllThreads(Py_tracefunc, PyObject *); - -/* 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, struct _PyInterpreterFrame *f, int exc); - -PyAPI_FUNC(Py_ssize_t) PyUnstable_Eval_RequestCodeExtraIndex(freefunc); -// Old name -- remove when this API changes: -_Py_DEPRECATED_EXTERNALLY(3.12) static inline Py_ssize_t -_PyEval_RequestCodeExtraIndex(freefunc f) { - return PyUnstable_Eval_RequestCodeExtraIndex(f); -} - -PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); - - -// Trampoline API - -typedef struct { - FILE* perf_map; - PyThread_type_lock map_lock; -} PerfMapState; - -PyAPI_FUNC(int) PyUnstable_PerfMapState_Init(void); -PyAPI_FUNC(int) PyUnstable_WritePerfMapEntry( - const void *code_addr, - unsigned int code_size, - const char *entry_name); -PyAPI_FUNC(void) PyUnstable_PerfMapState_Fini(void); -PyAPI_FUNC(int) PyUnstable_CopyPerfMapFile(const char* parent_filename); -PyAPI_FUNC(int) PyUnstable_PerfTrampoline_CompileCode(PyCodeObject *); -PyAPI_FUNC(int) PyUnstable_PerfTrampoline_SetPersistAfterFork(int enable); diff --git a/Python314_4_x86_Template/include/cpython/classobject.h b/Python314_4_x86_Template/include/cpython/classobject.h deleted file mode 100644 index d7c9ddd13..000000000 --- a/Python314_4_x86_Template/include/cpython/classobject.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Former class object interface -- now only bound methods are here */ - -/* Revealing some structures (not for general use) */ - -#ifndef Py_LIMITED_API -#ifndef Py_CLASSOBJECT_H -#define Py_CLASSOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PyObject_HEAD - PyObject *im_func; /* The callable object implementing the method */ - PyObject *im_self; /* The instance it is bound to */ - PyObject *im_weakreflist; /* List of weak references */ - vectorcallfunc vectorcall; -} PyMethodObject; - -PyAPI_DATA(PyTypeObject) PyMethod_Type; - -#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type) - -PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *); - -PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *); -PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); - -#define _PyMethod_CAST(meth) \ - (assert(PyMethod_Check(meth)), _Py_CAST(PyMethodObject*, meth)) - -/* Static inline functions for direct access to these values. - Type checks are *not* done, so use with care. */ -static inline PyObject* PyMethod_GET_FUNCTION(PyObject *meth) { - return _PyMethod_CAST(meth)->im_func; -} -#define PyMethod_GET_FUNCTION(meth) PyMethod_GET_FUNCTION(_PyObject_CAST(meth)) - -static inline PyObject* PyMethod_GET_SELF(PyObject *meth) { - return _PyMethod_CAST(meth)->im_self; -} -#define PyMethod_GET_SELF(meth) PyMethod_GET_SELF(_PyObject_CAST(meth)) - -typedef struct { - PyObject_HEAD - PyObject *func; -} PyInstanceMethodObject; - -PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type; - -#define PyInstanceMethod_Check(op) Py_IS_TYPE((op), &PyInstanceMethod_Type) - -PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *); -PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *); - -#define _PyInstanceMethod_CAST(meth) \ - (assert(PyInstanceMethod_Check(meth)), \ - _Py_CAST(PyInstanceMethodObject*, meth)) - -/* Static inline function for direct access to these values. - Type checks are *not* done, so use with care. */ -static inline PyObject* PyInstanceMethod_GET_FUNCTION(PyObject *meth) { - return _PyInstanceMethod_CAST(meth)->func; -} -#define PyInstanceMethod_GET_FUNCTION(meth) PyInstanceMethod_GET_FUNCTION(_PyObject_CAST(meth)) - -#ifdef __cplusplus -} -#endif -#endif // !Py_CLASSOBJECT_H -#endif // !Py_LIMITED_API diff --git a/Python314_4_x86_Template/include/cpython/code.h b/Python314_4_x86_Template/include/cpython/code.h deleted file mode 100644 index 3f0dce034..000000000 --- a/Python314_4_x86_Template/include/cpython/code.h +++ /dev/null @@ -1,340 +0,0 @@ -/* Definitions for bytecode */ - -#ifndef Py_LIMITED_API -#ifndef Py_CODE_H -#define Py_CODE_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PyObject *_co_code; - PyObject *_co_varnames; - PyObject *_co_cellvars; - PyObject *_co_freevars; -} _PyCoCached; - -typedef struct { - int size; - int capacity; - struct _PyExecutorObject *executors[1]; -} _PyExecutorArray; - - -#ifdef Py_GIL_DISABLED - -/* Each thread specializes a thread-local copy of the bytecode in free-threaded - * builds. These copies are stored on the code object in a `_PyCodeArray`. The - * first entry in the array always points to the "main" copy of the bytecode - * that is stored at the end of the code object. - */ -typedef struct { - Py_ssize_t size; - char *entries[1]; -} _PyCodeArray; - -#define _PyCode_DEF_THREAD_LOCAL_BYTECODE() \ - _PyCodeArray *co_tlbc; -#else -#define _PyCode_DEF_THREAD_LOCAL_BYTECODE() -#endif - -// To avoid repeating ourselves in deepfreeze.py, all PyCodeObject members are -// defined in this macro: -#define _PyCode_DEF(SIZE) { \ - PyObject_VAR_HEAD \ - \ - /* Note only the following fields are used in hash and/or comparisons \ - * \ - * - co_name \ - * - co_argcount \ - * - co_posonlyargcount \ - * - co_kwonlyargcount \ - * - co_nlocals \ - * - co_stacksize \ - * - co_flags \ - * - co_firstlineno \ - * - co_consts \ - * - co_names \ - * - co_localsplusnames \ - * 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. \ - */ \ - \ - /* These fields are set with provided values on new code objects. */ \ - \ - /* The hottest fields (in the eval loop) are grouped here at the top. */ \ - PyObject *co_consts; /* list (constants used) */ \ - PyObject *co_names; /* list of strings (names used) */ \ - PyObject *co_exceptiontable; /* Byte string encoding exception handling \ - table */ \ - int co_flags; /* CO_..., see below */ \ - \ - /* The rest are not so impactful on performance. */ \ - int co_argcount; /* #arguments, except *args */ \ - int co_posonlyargcount; /* #positional only arguments */ \ - int co_kwonlyargcount; /* #keyword only arguments */ \ - int co_stacksize; /* #entries needed for evaluation stack */ \ - int co_firstlineno; /* first source line number */ \ - \ - /* redundant values (derived from co_localsplusnames and \ - co_localspluskinds) */ \ - int co_nlocalsplus; /* number of spaces for holding local, cell, \ - and free variables */ \ - int co_framesize; /* Size of frame in words */ \ - int co_nlocals; /* number of local variables */ \ - int co_ncellvars; /* total number of cell variables */ \ - int co_nfreevars; /* number of free variables */ \ - uint32_t co_version; /* version number */ \ - \ - PyObject *co_localsplusnames; /* tuple mapping offsets to names */ \ - PyObject *co_localspluskinds; /* Bytes mapping to local kinds (one byte \ - per variable) */ \ - PyObject *co_filename; /* unicode (where it was loaded from) */ \ - PyObject *co_name; /* unicode (name, for reference) */ \ - PyObject *co_qualname; /* unicode (qualname, for reference) */ \ - PyObject *co_linetable; /* bytes object that holds location info */ \ - PyObject *co_weakreflist; /* to support weakrefs to code objects */ \ - _PyExecutorArray *co_executors; /* executors from optimizer */ \ - _PyCoCached *_co_cached; /* cached co_* attributes */ \ - uintptr_t _co_instrumentation_version; /* current instrumentation version */ \ - struct _PyCoMonitoringData *_co_monitoring; /* Monitoring data */ \ - Py_ssize_t _co_unique_id; /* ID used for per-thread refcounting */ \ - int _co_firsttraceable; /* index of first traceable instruction */ \ - /* 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; \ - _PyCode_DEF_THREAD_LOCAL_BYTECODE() \ - char co_code_adaptive[(SIZE)]; \ -} - -/* Bytecode object */ -struct PyCodeObject _PyCode_DEF(1); - -/* 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_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 - -#define CO_NO_MONITORING_EVENTS 0x2000000 - -/* Whether the code object has a docstring, - If so, it will be the first item in co_consts -*/ -#define CO_HAS_DOCSTRING 0x4000000 - -/* A function defined in class scope */ -#define CO_METHOD 0x8000000 - -/* 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 21 /* Max static block nesting within a function */ - -PyAPI_DATA(PyTypeObject) PyCode_Type; - -#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type) - -static inline Py_ssize_t PyCode_GetNumFree(PyCodeObject *op) { - assert(PyCode_Check(op)); - return op->co_nfreevars; -} - -static inline int PyUnstable_Code_GetFirstFree(PyCodeObject *op) { - assert(PyCode_Check(op)); - return op->co_nlocalsplus - op->co_nfreevars; -} - -Py_DEPRECATED(3.13) static inline int PyCode_GetFirstFree(PyCodeObject *op) { - return PyUnstable_Code_GetFirstFree(op); -} - -/* Unstable public interface */ -PyAPI_FUNC(PyCodeObject *) PyUnstable_Code_New( - int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, int, PyObject *, - PyObject *); - -PyAPI_FUNC(PyCodeObject *) PyUnstable_Code_NewWithPosOnlyArgs( - int, int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, int, PyObject *, - PyObject *); - /* same as struct above */ -// Old names -- remove when this API changes: -_Py_DEPRECATED_EXTERNALLY(3.12) static inline PyCodeObject * -PyCode_New( - int a, int b, int c, int d, int e, PyObject *f, PyObject *g, - PyObject *h, PyObject *i, PyObject *j, PyObject *k, - PyObject *l, PyObject *m, PyObject *n, int o, PyObject *p, - PyObject *q) -{ - return PyUnstable_Code_New( - a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q); -} -_Py_DEPRECATED_EXTERNALLY(3.12) static inline PyCodeObject * -PyCode_NewWithPosOnlyArgs( - int a, int poac, int b, int c, int d, int e, PyObject *f, PyObject *g, - PyObject *h, PyObject *i, PyObject *j, PyObject *k, - PyObject *l, PyObject *m, PyObject *n, int o, PyObject *p, - PyObject *q) -{ - return PyUnstable_Code_NewWithPosOnlyArgs( - a, poac, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q); -} - -/* 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); - -PyAPI_FUNC(int) PyCode_Addr2Location(PyCodeObject *, int, int *, int *, int *, int *); - -#define PY_FOREACH_CODE_EVENT(V) \ - V(CREATE) \ - V(DESTROY) - -typedef enum { - #define PY_DEF_EVENT(op) PY_CODE_EVENT_##op, - PY_FOREACH_CODE_EVENT(PY_DEF_EVENT) - #undef PY_DEF_EVENT -} PyCodeEvent; - - -/* - * A callback that is invoked for different events in a code object's lifecycle. - * - * The callback is invoked with a borrowed reference to co, after it is - * created and before it is destroyed. - * - * If the callback sets an exception, it must return -1. Otherwise - * it should return 0. - */ -typedef int (*PyCode_WatchCallback)( - PyCodeEvent event, - PyCodeObject* co); - -/* - * Register a per-interpreter callback that will be invoked for code object - * lifecycle events. - * - * Returns a handle that may be passed to PyCode_ClearWatcher on success, - * or -1 and sets an error if no more handles are available. - */ -PyAPI_FUNC(int) PyCode_AddWatcher(PyCode_WatchCallback callback); - -/* - * Clear the watcher associated with the watcher_id handle. - * - * Returns 0 on success or -1 if no watcher exists for the provided id. - */ -PyAPI_FUNC(int) PyCode_ClearWatcher(int watcher_id); - -/* for internal use only */ -struct _opaque { - int computed_line; - const uint8_t *lo_next; - const uint8_t *limit; -}; - -typedef struct _line_offsets { - int ar_start; - int ar_end; - int ar_line; - struct _opaque opaque; -} PyCodeAddressRange; - -/* 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(int lasti, PyCodeAddressRange *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) PyUnstable_Code_GetExtra( - PyObject *code, Py_ssize_t index, void **extra); -PyAPI_FUNC(int) PyUnstable_Code_SetExtra( - PyObject *code, Py_ssize_t index, void *extra); -// Old names -- remove when this API changes: -_Py_DEPRECATED_EXTERNALLY(3.12) static inline int -_PyCode_GetExtra(PyObject *code, Py_ssize_t index, void **extra) -{ - return PyUnstable_Code_GetExtra(code, index, extra); -} -_Py_DEPRECATED_EXTERNALLY(3.12) static inline int -_PyCode_SetExtra(PyObject *code, Py_ssize_t index, void *extra) -{ - return PyUnstable_Code_SetExtra(code, index, extra); -} - -/* Equivalent to getattr(code, 'co_code') in Python. - Returns a strong reference to a bytes object. */ -PyAPI_FUNC(PyObject *) PyCode_GetCode(PyCodeObject *code); -/* Equivalent to getattr(code, 'co_varnames') in Python. */ -PyAPI_FUNC(PyObject *) PyCode_GetVarnames(PyCodeObject *code); -/* Equivalent to getattr(code, 'co_cellvars') in Python. */ -PyAPI_FUNC(PyObject *) PyCode_GetCellvars(PyCodeObject *code); -/* Equivalent to getattr(code, 'co_freevars') in Python. */ -PyAPI_FUNC(PyObject *) PyCode_GetFreevars(PyCodeObject *code); - -typedef enum _PyCodeLocationInfoKind { - /* short forms are 0 to 9 */ - PY_CODE_LOCATION_INFO_SHORT0 = 0, - /* one lineforms are 10 to 12 */ - PY_CODE_LOCATION_INFO_ONE_LINE0 = 10, - PY_CODE_LOCATION_INFO_ONE_LINE1 = 11, - PY_CODE_LOCATION_INFO_ONE_LINE2 = 12, - - PY_CODE_LOCATION_INFO_NO_COLUMNS = 13, - PY_CODE_LOCATION_INFO_LONG = 14, - PY_CODE_LOCATION_INFO_NONE = 15 -} _PyCodeLocationInfoKind; - -#ifdef __cplusplus -} -#endif -#endif // !Py_CODE_H -#endif // !Py_LIMITED_API diff --git a/Python314_4_x86_Template/include/cpython/compile.h b/Python314_4_x86_Template/include/cpython/compile.h deleted file mode 100644 index cfdb7080d..000000000 --- a/Python314_4_x86_Template/include/cpython/compile.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef Py_CPYTHON_COMPILE_H -# error "this header file must not be included directly" -#endif - -/* Public interface */ -#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \ - CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \ - CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \ - CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS) -#define PyCF_MASK_OBSOLETE (CO_NESTED) - -/* bpo-39562: 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 PyCF_SOURCE_IS_UTF8 0x0100 -#define PyCF_DONT_IMPLY_DEDENT 0x0200 -#define PyCF_ONLY_AST 0x0400 -#define PyCF_IGNORE_COOKIE 0x0800 -#define PyCF_TYPE_COMMENTS 0x1000 -#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000 -#define PyCF_ALLOW_INCOMPLETE_INPUT 0x4000 -#define PyCF_OPTIMIZED_AST (0x8000 | PyCF_ONLY_AST) -#define PyCF_COMPILE_MASK (PyCF_ONLY_AST | PyCF_ALLOW_TOP_LEVEL_AWAIT | \ - PyCF_TYPE_COMMENTS | PyCF_DONT_IMPLY_DEDENT | \ - PyCF_ALLOW_INCOMPLETE_INPUT | PyCF_OPTIMIZED_AST) - -typedef struct { - int cf_flags; /* bitmask of CO_xxx flags relevant to future */ - int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */ -} PyCompilerFlags; - -#define _PyCompilerFlags_INIT \ - (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION} - -/* Future feature support */ - -#define FUTURE_NESTED_SCOPES "nested_scopes" -#define FUTURE_GENERATORS "generators" -#define FUTURE_DIVISION "division" -#define FUTURE_ABSOLUTE_IMPORT "absolute_import" -#define FUTURE_WITH_STATEMENT "with_statement" -#define FUTURE_PRINT_FUNCTION "print_function" -#define FUTURE_UNICODE_LITERALS "unicode_literals" -#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL" -#define FUTURE_GENERATOR_STOP "generator_stop" -#define FUTURE_ANNOTATIONS "annotations" - -#define PY_INVALID_STACK_EFFECT INT_MAX -PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg); -PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump); diff --git a/Python314_4_x86_Template/include/cpython/complexobject.h b/Python314_4_x86_Template/include/cpython/complexobject.h deleted file mode 100644 index fbdc6a91f..000000000 --- a/Python314_4_x86_Template/include/cpython/complexobject.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef Py_CPYTHON_COMPLEXOBJECT_H -# error "this header file must not be included directly" -#endif - -typedef struct { - double real; - double imag; -} Py_complex; - -// Operations on complex numbers. -PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex); -PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex); -PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex); -PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex); -PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex); -PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex); -PyAPI_FUNC(double) _Py_c_abs(Py_complex); - - -/* Complex object interface */ - -/* -PyComplexObject represents a complex number with double-precision -real and imaginary parts. -*/ -typedef struct { - PyObject_HEAD - Py_complex cval; -} PyComplexObject; - -PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); - -PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op); diff --git a/Python314_4_x86_Template/include/cpython/context.h b/Python314_4_x86_Template/include/cpython/context.h deleted file mode 100644 index 3a7a4b459..000000000 --- a/Python314_4_x86_Template/include/cpython/context.h +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef Py_CONTEXT_H -#define Py_CONTEXT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyContext_Type; -typedef struct _pycontextobject PyContext; - -PyAPI_DATA(PyTypeObject) PyContextVar_Type; -typedef struct _pycontextvarobject PyContextVar; - -PyAPI_DATA(PyTypeObject) PyContextToken_Type; -typedef struct _pycontexttokenobject PyContextToken; - - -#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); -PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *); -PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void); - -PyAPI_FUNC(int) PyContext_Enter(PyObject *); -PyAPI_FUNC(int) PyContext_Exit(PyObject *); - -typedef enum { - /* - * The current context has switched to a different context. The object - * passed to the watch callback is the now-current contextvars.Context - * object, or None if no context is current. - */ - Py_CONTEXT_SWITCHED = 1, -} PyContextEvent; - -/* - * Context object watcher callback function. The object passed to the callback - * is event-specific; see PyContextEvent for details. - * - * if the callback returns with an exception set, it must return -1. Otherwise - * it should return 0 - */ -typedef int (*PyContext_WatchCallback)(PyContextEvent, PyObject *); - -/* - * Register a per-interpreter callback that will be invoked for context object - * enter/exit events. - * - * Returns a handle that may be passed to PyContext_ClearWatcher on success, - * or -1 and sets and error if no more handles are available. - */ -PyAPI_FUNC(int) PyContext_AddWatcher(PyContext_WatchCallback callback); - -/* - * Clear the watcher associated with the watcher_id handle. - * - * Returns 0 on success or -1 if no watcher exists for the provided id. - */ -PyAPI_FUNC(int) PyContext_ClearWatcher(int watcher_id); - -/* Create a new context variable. - - default_value can be NULL. -*/ -PyAPI_FUNC(PyObject *) PyContextVar_New( - const char *name, PyObject *default_value); - - -/* Get a value for the variable. - - Returns -1 if an error occurred during lookup. - - Returns 0 if value either was or was not found. - - If value was found, *value will point to it. - If not, it will point to: - - - default_value, if not NULL; - - the default value of "var", if not NULL; - - NULL. - - '*value' will be a new ref, if not NULL. -*/ -PyAPI_FUNC(int) PyContextVar_Get( - PyObject *var, PyObject *default_value, PyObject **value); - - -/* Set a new value for the variable. - Returns NULL if an error occurs. -*/ -PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value); - - -/* Reset a variable to its previous value. - Returns 0 on success, -1 on error. -*/ -PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CONTEXT_H */ -#endif /* !Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/critical_section.h b/Python314_4_x86_Template/include/cpython/critical_section.h deleted file mode 100644 index 4fc46fefb..000000000 --- a/Python314_4_x86_Template/include/cpython/critical_section.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef Py_CPYTHON_CRITICAL_SECTION_H -# error "this header file must not be included directly" -#endif - -// Python critical sections -// -// Conceptually, critical sections are a deadlock avoidance layer on top of -// per-object locks. These helpers, in combination with those locks, replace -// our usage of the global interpreter lock to provide thread-safety for -// otherwise thread-unsafe objects, such as dict. -// -// NOTE: These APIs are no-ops in non-free-threaded builds. -// -// Straightforward per-object locking could introduce deadlocks that were not -// present when running with the GIL. Threads may hold locks for multiple -// objects simultaneously because Python operations can nest. If threads were -// to acquire the same locks in different orders, they would deadlock. -// -// One way to avoid deadlocks is to allow threads to hold only the lock (or -// locks) for a single operation at a time (typically a single lock, but some -// operations involve two locks). When a thread begins a nested operation it -// could suspend the locks for any outer operation: before beginning the nested -// operation, the locks for the outer operation are released and when the -// nested operation completes, the locks for the outer operation are -// reacquired. -// -// To improve performance, this API uses a variation of the above scheme. -// Instead of immediately suspending locks any time a nested operation begins, -// locks are only suspended if the thread would block. This reduces the number -// of lock acquisitions and releases for nested operations, while still -// avoiding deadlocks. -// -// Additionally, the locks for any active operation are suspended around -// other potentially blocking operations, such as I/O. This is because the -// interaction between locks and blocking operations can lead to deadlocks in -// the same way as the interaction between multiple locks. -// -// Each thread's critical sections and their corresponding locks are tracked in -// a stack in `PyThreadState.critical_section`. When a thread calls -// `_PyThreadState_Detach()`, such as before a blocking I/O operation or when -// waiting to acquire a lock, the thread suspends all of its active critical -// sections, temporarily releasing the associated locks. When the thread calls -// `_PyThreadState_Attach()`, it resumes the top-most (i.e., most recent) -// critical section by reacquiring the associated lock or locks. See -// `_PyCriticalSection_Resume()`. -// -// NOTE: Only the top-most critical section is guaranteed to be active. -// Operations that need to lock two objects at once must use -// `Py_BEGIN_CRITICAL_SECTION2()`. You *CANNOT* use nested critical sections -// to lock more than one object at once, because the inner critical section -// may suspend the outer critical sections. This API does not provide a way -// to lock more than two objects at once (though it could be added later -// if actually needed). -// -// NOTE: Critical sections implicitly behave like reentrant locks because -// attempting to acquire the same lock will suspend any outer (earlier) -// critical sections. However, they are less efficient for this use case than -// purposefully designed reentrant locks. -// -// Example usage: -// Py_BEGIN_CRITICAL_SECTION(op); -// ... -// Py_END_CRITICAL_SECTION(); -// -// To lock two objects at once: -// Py_BEGIN_CRITICAL_SECTION2(op1, op2); -// ... -// Py_END_CRITICAL_SECTION2(); - -typedef struct PyCriticalSection PyCriticalSection; -typedef struct PyCriticalSection2 PyCriticalSection2; - -PyAPI_FUNC(void) -PyCriticalSection_Begin(PyCriticalSection *c, PyObject *op); - -PyAPI_FUNC(void) -PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *m); - -PyAPI_FUNC(void) -PyCriticalSection_End(PyCriticalSection *c); - -PyAPI_FUNC(void) -PyCriticalSection2_Begin(PyCriticalSection2 *c, PyObject *a, PyObject *b); - -PyAPI_FUNC(void) -PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2); - -PyAPI_FUNC(void) -PyCriticalSection2_End(PyCriticalSection2 *c); - -#ifndef Py_GIL_DISABLED -# define Py_BEGIN_CRITICAL_SECTION(op) \ - { -# define Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex) \ - { -# define Py_END_CRITICAL_SECTION() \ - } -# define Py_BEGIN_CRITICAL_SECTION2(a, b) \ - { -# define Py_BEGIN_CRITICAL_SECTION2_MUTEX(m1, m2) \ - { -# define Py_END_CRITICAL_SECTION2() \ - } -#else /* !Py_GIL_DISABLED */ - -// NOTE: the contents of this struct are private and may change betweeen -// Python releases without a deprecation period. -struct PyCriticalSection { - // Tagged pointer to an outer active critical section (or 0). - uintptr_t _cs_prev; - - // Mutex used to protect critical section - PyMutex *_cs_mutex; -}; - -// A critical section protected by two mutexes. Use -// Py_BEGIN_CRITICAL_SECTION2 and Py_END_CRITICAL_SECTION2. -// NOTE: the contents of this struct are private and may change betweeen -// Python releases without a deprecation period. -struct PyCriticalSection2 { - PyCriticalSection _cs_base; - - PyMutex *_cs_mutex2; -}; - -# define Py_BEGIN_CRITICAL_SECTION(op) \ - { \ - PyCriticalSection _py_cs; \ - PyCriticalSection_Begin(&_py_cs, _PyObject_CAST(op)) - -# define Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex) \ - { \ - PyCriticalSection _py_cs; \ - PyCriticalSection_BeginMutex(&_py_cs, mutex) - -# define Py_END_CRITICAL_SECTION() \ - PyCriticalSection_End(&_py_cs); \ - } - -# define Py_BEGIN_CRITICAL_SECTION2(a, b) \ - { \ - PyCriticalSection2 _py_cs2; \ - PyCriticalSection2_Begin(&_py_cs2, _PyObject_CAST(a), _PyObject_CAST(b)) - -# define Py_BEGIN_CRITICAL_SECTION2_MUTEX(m1, m2) \ - { \ - PyCriticalSection2 _py_cs2; \ - PyCriticalSection2_BeginMutex(&_py_cs2, m1, m2) - -# define Py_END_CRITICAL_SECTION2() \ - PyCriticalSection2_End(&_py_cs2); \ - } - -#endif diff --git a/Python314_4_x86_Template/include/cpython/descrobject.h b/Python314_4_x86_Template/include/cpython/descrobject.h deleted file mode 100644 index bbad8b59c..000000000 --- a/Python314_4_x86_Template/include/cpython/descrobject.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef Py_CPYTHON_DESCROBJECT_H -# error "this header file must not be included directly" -#endif - -typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, - void *wrapped); - -typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, - void *wrapped, PyObject *kwds); - -struct wrapperbase { - const char *name; - int offset; - void *function; - wrapperfunc wrapper; - const char *doc; - int flags; - PyObject *name_strobj; -}; - -/* Flags for above struct */ -#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ - -/* Various kinds of descriptor objects */ - -typedef struct { - PyObject_HEAD - PyTypeObject *d_type; - PyObject *d_name; - PyObject *d_qualname; -} PyDescrObject; - -#define PyDescr_COMMON PyDescrObject d_common - -#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) -#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) - -typedef struct { - PyDescr_COMMON; - PyMethodDef *d_method; - vectorcallfunc vectorcall; -} PyMethodDescrObject; - -typedef struct { - PyDescr_COMMON; - PyMemberDef *d_member; -} PyMemberDescrObject; - -typedef struct { - PyDescr_COMMON; - PyGetSetDef *d_getset; -} PyGetSetDescrObject; - -typedef struct { - PyDescr_COMMON; - struct wrapperbase *d_base; - void *d_wrapped; /* This can be any function pointer */ -} PyWrapperDescrObject; - -PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, - struct wrapperbase *, void *); -PyAPI_FUNC(int) PyDescr_IsData(PyObject *); diff --git a/Python314_4_x86_Template/include/cpython/dictobject.h b/Python314_4_x86_Template/include/cpython/dictobject.h deleted file mode 100644 index df9ec7050..000000000 --- a/Python314_4_x86_Template/include/cpython/dictobject.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef Py_CPYTHON_DICTOBJECT_H -# error "this header file must not be included directly" -#endif - -typedef struct _dictkeysobject PyDictKeysObject; -typedef struct _dictvalues PyDictValues; - -/* The ma_values pointer is NULL for a combined table - * or points to an array of PyObject* for a split table - */ -typedef struct { - PyObject_HEAD - - /* Number of items in the dictionary */ - Py_ssize_t ma_used; - - /* This is a private field for CPython's internal use. - * Bits 0-7 are for dict watchers. - * Bits 8-11 are for the watched mutation counter (used by tier2 optimization) - * Bits 12-31 are currently unused - * Bits 32-63 are a unique id in the free threading build (used for per-thread refcounting) - */ - uint64_t _ma_watcher_tag; - - PyDictKeysObject *ma_keys; - - /* If ma_values is NULL, the table is "combined": keys and values - are stored in ma_keys. - - If ma_values is not NULL, the table is split: - keys are stored in ma_keys and values are stored in ma_values */ - PyDictValues *ma_values; -} PyDictObject; - -PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key, - Py_hash_t hash); -// PyDict_GetItemStringRef() can be used instead -Py_DEPRECATED(3.14) PyAPI_FUNC(PyObject *) _PyDict_GetItemStringWithError(PyObject *, const char *); -PyAPI_FUNC(PyObject *) PyDict_SetDefault( - PyObject *mp, PyObject *key, PyObject *defaultobj); - -// Inserts `key` with a value `default_value`, if `key` is not already present -// in the dictionary. If `result` is not NULL, then the value associated -// with `key` is returned in `*result` (either the existing value, or the now -// inserted `default_value`). -// Returns: -// -1 on error -// 0 if `key` was not present and `default_value` was inserted -// 1 if `key` was present and `default_value` was not inserted -PyAPI_FUNC(int) PyDict_SetDefaultRef(PyObject *mp, PyObject *key, PyObject *default_value, PyObject **result); - -/* Get the number of items of a dictionary. */ -static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) { - PyDictObject *mp; - assert(PyDict_Check(op)); - mp = _Py_CAST(PyDictObject*, op); -#ifdef Py_GIL_DISABLED - return _Py_atomic_load_ssize_relaxed(&mp->ma_used); -#else - return mp->ma_used; -#endif -} -#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op)) - -PyAPI_FUNC(int) PyDict_ContainsString(PyObject *mp, const char *key); - -PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused); - -PyAPI_FUNC(int) PyDict_Pop(PyObject *dict, PyObject *key, PyObject **result); -PyAPI_FUNC(int) PyDict_PopString(PyObject *dict, const char *key, PyObject **result); - -// Use PyDict_Pop() instead -Py_DEPRECATED(3.14) PyAPI_FUNC(PyObject *) _PyDict_Pop( - PyObject *dict, - PyObject *key, - PyObject *default_value); - -/* Dictionary watchers */ - -#define PY_FOREACH_DICT_EVENT(V) \ - V(ADDED) \ - V(MODIFIED) \ - V(DELETED) \ - V(CLONED) \ - V(CLEARED) \ - V(DEALLOCATED) - -typedef enum { - #define PY_DEF_EVENT(EVENT) PyDict_EVENT_##EVENT, - PY_FOREACH_DICT_EVENT(PY_DEF_EVENT) - #undef PY_DEF_EVENT -} PyDict_WatchEvent; - -// Callback to be invoked when a watched dict is cleared, dealloced, or modified. -// In clear/dealloc case, key and new_value will be NULL. Otherwise, new_value will be the -// new value for key, NULL if key is being deleted. -typedef int(*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject* dict, PyObject* key, PyObject* new_value); - -// Register/unregister a dict-watcher callback -PyAPI_FUNC(int) PyDict_AddWatcher(PyDict_WatchCallback callback); -PyAPI_FUNC(int) PyDict_ClearWatcher(int watcher_id); - -// Mark given dictionary as "watched" (callback will be called if it is modified) -PyAPI_FUNC(int) PyDict_Watch(int watcher_id, PyObject* dict); -PyAPI_FUNC(int) PyDict_Unwatch(int watcher_id, PyObject* dict); diff --git a/Python314_4_x86_Template/include/cpython/fileobject.h b/Python314_4_x86_Template/include/cpython/fileobject.h deleted file mode 100644 index e2d89c522..000000000 --- a/Python314_4_x86_Template/include/cpython/fileobject.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Py_CPYTHON_FILEOBJECT_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); - -/* The std printer acts as a preliminary sys.stderr until the new io - infrastructure is in place. */ -PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int); -PyAPI_DATA(PyTypeObject) PyStdPrinter_Type; - -typedef PyObject * (*Py_OpenCodeHookFunction)(PyObject *, void *); - -PyAPI_FUNC(PyObject *) PyFile_OpenCode(const char *utf8path); -PyAPI_FUNC(PyObject *) PyFile_OpenCodeObject(PyObject *path); -PyAPI_FUNC(int) PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction hook, void *userData); diff --git a/Python314_4_x86_Template/include/cpython/fileutils.h b/Python314_4_x86_Template/include/cpython/fileutils.h deleted file mode 100644 index 626b1ad57..000000000 --- a/Python314_4_x86_Template/include/cpython/fileutils.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Py_CPYTHON_FILEUTILS_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(FILE*) Py_fopen( - PyObject *path, - const char *mode); - -// Deprecated alias kept for backward compatibility -Py_DEPRECATED(3.14) static inline FILE* -_Py_fopen_obj(PyObject *path, const char *mode) -{ - return Py_fopen(path, mode); -} - -PyAPI_FUNC(int) Py_fclose(FILE *file); diff --git a/Python314_4_x86_Template/include/cpython/floatobject.h b/Python314_4_x86_Template/include/cpython/floatobject.h deleted file mode 100644 index 127093098..000000000 --- a/Python314_4_x86_Template/include/cpython/floatobject.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef Py_CPYTHON_FLOATOBJECT_H -# error "this header file must not be included directly" -#endif - -typedef struct { - PyObject_HEAD - double ob_fval; -} PyFloatObject; - -#define _PyFloat_CAST(op) \ - (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op)) - -// Static inline version of PyFloat_AsDouble() trading safety for speed. -// It doesn't check if op is a double object. -static inline double PyFloat_AS_DOUBLE(PyObject *op) { - return _PyFloat_CAST(op)->ob_fval; -} -#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op)) - - -PyAPI_FUNC(int) PyFloat_Pack2(double x, char *p, int le); -PyAPI_FUNC(int) PyFloat_Pack4(double x, char *p, int le); -PyAPI_FUNC(int) PyFloat_Pack8(double x, char *p, int le); - -PyAPI_FUNC(double) PyFloat_Unpack2(const char *p, int le); -PyAPI_FUNC(double) PyFloat_Unpack4(const char *p, int le); -PyAPI_FUNC(double) PyFloat_Unpack8(const char *p, int le); diff --git a/Python314_4_x86_Template/include/cpython/frameobject.h b/Python314_4_x86_Template/include/cpython/frameobject.h deleted file mode 100644 index dbbfbb510..000000000 --- a/Python314_4_x86_Template/include/cpython/frameobject.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Frame object interface */ - -#ifndef Py_CPYTHON_FRAMEOBJECT_H -# error "this header file must not be included directly" -#endif - -/* Standard object interface */ - -PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, - PyObject *, PyObject *); - -/* The rest of the interface is specific for frame objects */ - -/* Conversions between "fast locals" and locals in dictionary */ - -PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); - -/* -- Caveat emptor -- - * The concept of entry frames is an implementation detail of the CPython - * interpreter. This API is considered unstable and is provided for the - * convenience of debuggers, profilers and state-inspecting tools. Notice that - * this API can be changed in future minor versions if the underlying frame - * mechanism change or the concept of an 'entry frame' or its semantics becomes - * obsolete or outdated. */ - -PyAPI_FUNC(int) _PyFrame_IsEntryFrame(PyFrameObject *frame); - -PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); -PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); - - -typedef struct { - PyObject_HEAD - PyFrameObject* frame; -} PyFrameLocalsProxyObject; diff --git a/Python314_4_x86_Template/include/cpython/funcobject.h b/Python314_4_x86_Template/include/cpython/funcobject.h deleted file mode 100644 index 598cd330b..000000000 --- a/Python314_4_x86_Template/include/cpython/funcobject.h +++ /dev/null @@ -1,185 +0,0 @@ -/* Function object interface */ - -#ifndef Py_LIMITED_API -#ifndef Py_FUNCOBJECT_H -#define Py_FUNCOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -#define _Py_COMMON_FIELDS(PREFIX) \ - PyObject *PREFIX ## globals; \ - PyObject *PREFIX ## builtins; \ - PyObject *PREFIX ## name; \ - PyObject *PREFIX ## qualname; \ - PyObject *PREFIX ## code; /* A code object, the __code__ attribute */ \ - PyObject *PREFIX ## defaults; /* NULL or a tuple */ \ - PyObject *PREFIX ## kwdefaults; /* NULL or a dict */ \ - PyObject *PREFIX ## closure; /* NULL or a tuple of cell objects */ - -typedef struct { - _Py_COMMON_FIELDS(fc_) -} PyFrameConstructor; - -/* Function objects and code objects should not be confused with each other: - * - * Function objects are created by the execution of the 'def' statement. - * They reference a code object in their __code__ attribute, which is a - * purely syntactic object, i.e. nothing more than a compiled version of some - * source code lines. There is one code object per source code "fragment", - * but each code object can be referenced by zero or many function objects - * depending only on how many times the 'def' statement in the source was - * executed so far. - */ - -typedef struct { - PyObject_HEAD - _Py_COMMON_FIELDS(func_) - PyObject *func_doc; /* The __doc__ attribute, can be anything */ - PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */ - PyObject *func_weakreflist; /* List of weak references */ - PyObject *func_module; /* The __module__ attribute, can be anything */ - PyObject *func_annotations; /* Annotations, a dict or NULL */ - PyObject *func_annotate; /* Callable to fill the annotations dictionary */ - PyObject *func_typeparams; /* Tuple of active type variables or NULL */ - vectorcallfunc vectorcall; - /* Version number for use by specializer. - * Can set to non-zero when we want to specialize. - * Will be set to zero if any of these change: - * defaults - * kwdefaults (only if the object changes, not the contents of the dict) - * code - * annotations - * vectorcall function pointer */ - uint32_t func_version; - - /* Invariant: - * func_closure contains the bindings for func_code->co_freevars, so - * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code) - * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0). - */ -} PyFunctionObject; - -#undef _Py_COMMON_FIELDS - -PyAPI_DATA(PyTypeObject) 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 *); -PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *); -PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *); -PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *); -PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *); -PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *); -PyAPI_FUNC(void) PyFunction_SetVectorcall(PyFunctionObject *, vectorcallfunc); -PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *); -PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *); -PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); -PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); - -#define _PyFunction_CAST(func) \ - (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func)) - -/* Static inline functions for direct access to these values. - Type checks are *not* done, so use with care. */ -static inline PyObject* PyFunction_GET_CODE(PyObject *func) { - return _PyFunction_CAST(func)->func_code; -} -#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_GLOBALS(PyObject *func) { - return _PyFunction_CAST(func)->func_globals; -} -#define PyFunction_GET_GLOBALS(func) PyFunction_GET_GLOBALS(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_MODULE(PyObject *func) { - return _PyFunction_CAST(func)->func_module; -} -#define PyFunction_GET_MODULE(func) PyFunction_GET_MODULE(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_DEFAULTS(PyObject *func) { - return _PyFunction_CAST(func)->func_defaults; -} -#define PyFunction_GET_DEFAULTS(func) PyFunction_GET_DEFAULTS(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_KW_DEFAULTS(PyObject *func) { - return _PyFunction_CAST(func)->func_kwdefaults; -} -#define PyFunction_GET_KW_DEFAULTS(func) PyFunction_GET_KW_DEFAULTS(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_CLOSURE(PyObject *func) { - return _PyFunction_CAST(func)->func_closure; -} -#define PyFunction_GET_CLOSURE(func) PyFunction_GET_CLOSURE(_PyObject_CAST(func)) - -static inline PyObject* PyFunction_GET_ANNOTATIONS(PyObject *func) { - return _PyFunction_CAST(func)->func_annotations; -} -#define PyFunction_GET_ANNOTATIONS(func) PyFunction_GET_ANNOTATIONS(_PyObject_CAST(func)) - -/* The classmethod and staticmethod types lives here, too */ -PyAPI_DATA(PyTypeObject) PyClassMethod_Type; -PyAPI_DATA(PyTypeObject) PyStaticMethod_Type; - -PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *); -PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *); - -#define PY_FOREACH_FUNC_EVENT(V) \ - V(CREATE) \ - V(DESTROY) \ - V(MODIFY_CODE) \ - V(MODIFY_DEFAULTS) \ - V(MODIFY_KWDEFAULTS) - -typedef enum { - #define PY_DEF_EVENT(EVENT) PyFunction_EVENT_##EVENT, - PY_FOREACH_FUNC_EVENT(PY_DEF_EVENT) - #undef PY_DEF_EVENT -} PyFunction_WatchEvent; - -/* - * A callback that is invoked for different events in a function's lifecycle. - * - * The callback is invoked with a borrowed reference to func, after it is - * created and before it is modified or destroyed. The callback should not - * modify func. - * - * When a function's code object, defaults, or kwdefaults are modified the - * callback will be invoked with the respective event and new_value will - * contain a borrowed reference to the new value that is about to be stored in - * the function. Otherwise the third argument is NULL. - * - * If the callback returns with an exception set, it must return -1. Otherwise - * it should return 0. - */ -typedef int (*PyFunction_WatchCallback)( - PyFunction_WatchEvent event, - PyFunctionObject *func, - PyObject *new_value); - -/* - * Register a per-interpreter callback that will be invoked for function lifecycle - * events. - * - * Returns a handle that may be passed to PyFunction_ClearWatcher on success, - * or -1 and sets an error if no more handles are available. - */ -PyAPI_FUNC(int) PyFunction_AddWatcher(PyFunction_WatchCallback callback); - -/* - * Clear the watcher associated with the watcher_id handle. - * - * Returns 0 on success or -1 if no watcher exists for the supplied id. - */ -PyAPI_FUNC(int) PyFunction_ClearWatcher(int watcher_id); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_FUNCOBJECT_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/genobject.h b/Python314_4_x86_Template/include/cpython/genobject.h deleted file mode 100644 index f75884e59..000000000 --- a/Python314_4_x86_Template/include/cpython/genobject.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Generator object interface */ - -#ifndef Py_LIMITED_API -#ifndef Py_GENOBJECT_H -#define Py_GENOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* --- Generators --------------------------------------------------------- */ - -typedef struct _PyGenObject PyGenObject; - -PyAPI_DATA(PyTypeObject) PyGen_Type; - -#define PyGen_Check(op) PyObject_TypeCheck((op), &PyGen_Type) -#define PyGen_CheckExact(op) Py_IS_TYPE((op), &PyGen_Type) - -PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *); -PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *, - PyObject *name, PyObject *qualname); -PyAPI_FUNC(PyCodeObject *) PyGen_GetCode(PyGenObject *gen); - - -/* --- PyCoroObject ------------------------------------------------------- */ - -typedef struct _PyCoroObject PyCoroObject; - -PyAPI_DATA(PyTypeObject) PyCoro_Type; - -#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type) -PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *, - PyObject *name, PyObject *qualname); - - -/* --- Asynchronous Generators -------------------------------------------- */ - -typedef struct _PyAsyncGenObject PyAsyncGenObject; - -PyAPI_DATA(PyTypeObject) PyAsyncGen_Type; -PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; - -PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *, - PyObject *name, PyObject *qualname); - -#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type) - -#define PyAsyncGenASend_CheckExact(op) Py_IS_TYPE((op), &_PyAsyncGenASend_Type) - -#undef _PyGenObject_HEAD - -#ifdef __cplusplus -} -#endif -#endif /* !Py_GENOBJECT_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/import.h b/Python314_4_x86_Template/include/cpython/import.h deleted file mode 100644 index 0ce0b1ee6..000000000 --- a/Python314_4_x86_Template/include/cpython/import.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef Py_CPYTHON_IMPORT_H -# error "this header file must not be included directly" -#endif - -struct _inittab { - const char *name; /* ASCII encoded string */ - PyObject* (*initfunc)(void); -}; -// This is not used after Py_Initialize() is called. -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; - int is_package; -}; - -/* Embedding apps may change this pointer to point to their favorite - collection of frozen modules: */ - -PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; - -PyAPI_FUNC(PyObject*) PyImport_ImportModuleAttr( - PyObject *mod_name, - PyObject *attr_name); -PyAPI_FUNC(PyObject*) PyImport_ImportModuleAttrString( - const char *mod_name, - const char *attr_name); diff --git a/Python314_4_x86_Template/include/cpython/initconfig.h b/Python314_4_x86_Template/include/cpython/initconfig.h deleted file mode 100644 index 7ce4acfeb..000000000 --- a/Python314_4_x86_Template/include/cpython/initconfig.h +++ /dev/null @@ -1,334 +0,0 @@ -#ifndef Py_PYCORECONFIG_H -#define Py_PYCORECONFIG_H -#ifndef Py_LIMITED_API -#ifdef __cplusplus -extern "C" { -#endif - -/* --- PyStatus ----------------------------------------------- */ - -typedef struct { - enum { - _PyStatus_TYPE_OK=0, - _PyStatus_TYPE_ERROR=1, - _PyStatus_TYPE_EXIT=2 - } _type; - const char *func; - const char *err_msg; - int exitcode; -} PyStatus; - -PyAPI_FUNC(PyStatus) PyStatus_Ok(void); -PyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg); -PyAPI_FUNC(PyStatus) PyStatus_NoMemory(void); -PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode); -PyAPI_FUNC(int) PyStatus_IsError(PyStatus err); -PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err); -PyAPI_FUNC(int) PyStatus_Exception(PyStatus err); - -/* --- PyWideStringList ------------------------------------------------ */ - -typedef struct { - /* If length is greater than zero, items must be non-NULL - and all items strings must be non-NULL */ - Py_ssize_t length; - wchar_t **items; -} PyWideStringList; - -PyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list, - const wchar_t *item); -PyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list, - Py_ssize_t index, - const wchar_t *item); - - -/* --- PyPreConfig ----------------------------------------------- */ - -typedef struct PyPreConfig { - int _config_init; /* _PyConfigInitEnum value */ - - /* Parse Py_PreInitializeFromBytesArgs() arguments? - See PyConfig.parse_argv */ - int parse_argv; - - /* If greater than 0, enable isolated mode: sys.path contains - neither the script's directory nor the user's site-packages directory. - - Set to 1 by the -I command line option. If set to -1 (default), inherit - Py_IsolatedFlag value. */ - int isolated; - - /* If greater than 0: use environment variables. - Set to 0 by -E command line option. If set to -1 (default), it is - set to !Py_IgnoreEnvironmentFlag. */ - int use_environment; - - /* Set the LC_CTYPE locale to the user preferred locale? If equals to 0, - set coerce_c_locale and coerce_c_locale_warn to 0. */ - int configure_locale; - - /* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538) - - Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1. - Set to 2 if the user preferred LC_CTYPE locale is "C". - - If it is equal to 1, LC_CTYPE locale is read to decide if it should be - coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2 - if the LC_CTYPE locale must be coerced. - - Disable by default (set to 0). Set it to -1 to let Python decide if it - should be enabled or not. */ - int coerce_c_locale; - - /* Emit a warning if the LC_CTYPE locale is coerced? - - Set to 1 by PYTHONCOERCECLOCALE=warn. - - Disable by default (set to 0). Set it to -1 to let Python decide if it - should be enabled or not. */ - int coerce_c_locale_warn; - -#ifdef MS_WINDOWS - /* If greater than 1, use the "mbcs" encoding instead of the UTF-8 - encoding for the filesystem encoding. - - Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is - set to a non-empty string. If set to -1 (default), inherit - Py_LegacyWindowsFSEncodingFlag value. - - See PEP 529 for more details. */ - int legacy_windows_fs_encoding; -#endif - - /* Enable UTF-8 mode? (PEP 540) - - Disabled by default (equals to 0). - - Set to 1 by "-X utf8" and "-X utf8=1" command line options. - Set to 1 by PYTHONUTF8=1 environment variable. - - Set to 0 by "-X utf8=0" and PYTHONUTF8=0. - - If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or - "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */ - int utf8_mode; - - /* 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. */ - int allocator; -} PyPreConfig; - -PyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config); -PyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config); - - -/* --- PyConfig ---------------------------------------------- */ - -/* This structure is best documented in the Doc/c-api/init_config.rst file. */ -typedef struct PyConfig { - int _config_init; /* _PyConfigInitEnum value */ - - int isolated; - int use_environment; - int dev_mode; - int install_signal_handlers; - int use_hash_seed; - unsigned long hash_seed; - int faulthandler; - int tracemalloc; - int perf_profiling; - int remote_debug; - int import_time; - int code_debug_ranges; - int show_ref_count; - int dump_refs; - wchar_t *dump_refs_file; - int malloc_stats; - wchar_t *filesystem_encoding; - wchar_t *filesystem_errors; - wchar_t *pycache_prefix; - int parse_argv; - PyWideStringList orig_argv; - PyWideStringList argv; - PyWideStringList xoptions; - PyWideStringList warnoptions; - int site_import; - int bytes_warning; - int warn_default_encoding; - int inspect; - int interactive; - int optimization_level; - int parser_debug; - int write_bytecode; - int verbose; - int quiet; - int user_site_directory; - int configure_c_stdio; - int buffered_stdio; - wchar_t *stdio_encoding; - wchar_t *stdio_errors; -#ifdef MS_WINDOWS - int legacy_windows_stdio; -#endif - wchar_t *check_hash_pycs_mode; - int use_frozen_modules; - int safe_path; - int int_max_str_digits; - int thread_inherit_context; - int context_aware_warnings; -#ifdef __APPLE__ - int use_system_logger; -#endif - - int cpu_count; -#ifdef Py_GIL_DISABLED - int enable_gil; - int tlbc_enabled; -#endif - - /* --- Path configuration inputs ------------ */ - int pathconfig_warnings; - wchar_t *program_name; - wchar_t *pythonpath_env; - wchar_t *home; - wchar_t *platlibdir; - - /* --- Path configuration outputs ----------- */ - int module_search_paths_set; - PyWideStringList module_search_paths; - wchar_t *stdlib_dir; - wchar_t *executable; - wchar_t *base_executable; - wchar_t *prefix; - wchar_t *base_prefix; - wchar_t *exec_prefix; - wchar_t *base_exec_prefix; - - /* --- Parameter only used by Py_Main() ---------- */ - int skip_source_first_line; - wchar_t *run_command; - wchar_t *run_module; - wchar_t *run_filename; - - /* --- Set by Py_Main() -------------------------- */ - wchar_t *sys_path_0; - - /* --- Private fields ---------------------------- */ - - // Install importlib? If equals to 0, importlib is not initialized at all. - // Needed by freeze_importlib. - int _install_importlib; - - // If equal to 0, stop Python initialization before the "main" phase. - int _init_main; - - // If non-zero, we believe we're running from a source tree. - int _is_python_build; - -#ifdef Py_STATS - // If non-zero, turns on statistics gathering. - int _pystats; -#endif - -#ifdef Py_DEBUG - // If not empty, import a non-__main__ module before site.py is executed. - // PYTHON_PRESITE=package.module or -X presite=package.module - wchar_t *run_presite; -#endif -} PyConfig; - -PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); -PyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config); -PyAPI_FUNC(void) PyConfig_Clear(PyConfig *); -PyAPI_FUNC(PyStatus) PyConfig_SetString( - PyConfig *config, - wchar_t **config_str, - const wchar_t *str); -PyAPI_FUNC(PyStatus) PyConfig_SetBytesString( - PyConfig *config, - wchar_t **config_str, - const char *str); -PyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config); -PyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv( - PyConfig *config, - Py_ssize_t argc, - char * const *argv); -PyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config, - Py_ssize_t argc, - wchar_t * const *argv); -PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config, - PyWideStringList *list, - Py_ssize_t length, wchar_t **items); - - -/* --- PyConfig_Get() ----------------------------------------- */ - -PyAPI_FUNC(PyObject*) PyConfig_Get(const char *name); -PyAPI_FUNC(int) PyConfig_GetInt(const char *name, int *value); -PyAPI_FUNC(PyObject*) PyConfig_Names(void); -PyAPI_FUNC(int) PyConfig_Set(const char *name, PyObject *value); - - -/* --- 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); - - -// --- PyInitConfig --------------------------------------------------------- - -typedef struct PyInitConfig PyInitConfig; - -PyAPI_FUNC(PyInitConfig*) PyInitConfig_Create(void); -PyAPI_FUNC(void) PyInitConfig_Free(PyInitConfig *config); - -PyAPI_FUNC(int) PyInitConfig_GetError(PyInitConfig* config, - const char **err_msg); -PyAPI_FUNC(int) PyInitConfig_GetExitCode(PyInitConfig* config, - int *exitcode); - -PyAPI_FUNC(int) PyInitConfig_HasOption(PyInitConfig *config, - const char *name); -PyAPI_FUNC(int) PyInitConfig_GetInt(PyInitConfig *config, - const char *name, - int64_t *value); -PyAPI_FUNC(int) PyInitConfig_GetStr(PyInitConfig *config, - const char *name, - char **value); -PyAPI_FUNC(int) PyInitConfig_GetStrList(PyInitConfig *config, - const char *name, - size_t *length, - char ***items); -PyAPI_FUNC(void) PyInitConfig_FreeStrList(size_t length, char **items); - -PyAPI_FUNC(int) PyInitConfig_SetInt(PyInitConfig *config, - const char *name, - int64_t value); -PyAPI_FUNC(int) PyInitConfig_SetStr(PyInitConfig *config, - const char *name, - const char *value); -PyAPI_FUNC(int) PyInitConfig_SetStrList(PyInitConfig *config, - const char *name, - size_t length, - char * const *items); - -PyAPI_FUNC(int) PyInitConfig_AddModule(PyInitConfig *config, - const char *name, - PyObject* (*initfunc)(void)); - -PyAPI_FUNC(int) Py_InitializeFromInitConfig(PyInitConfig *config); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_LIMITED_API */ -#endif /* !Py_PYCORECONFIG_H */ diff --git a/Python314_4_x86_Template/include/cpython/listobject.h b/Python314_4_x86_Template/include/cpython/listobject.h deleted file mode 100644 index 49f5e8d6d..000000000 --- a/Python314_4_x86_Template/include/cpython/listobject.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef Py_CPYTHON_LISTOBJECT_H -# error "this header file must not be included directly" -#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; - -/* Cast argument to PyListObject* type. */ -#define _PyList_CAST(op) \ - (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op))) - -// Macros and static inline functions, trading safety for speed - -static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) { - PyListObject *list = _PyList_CAST(op); -#ifdef Py_GIL_DISABLED - return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size)); -#else - return Py_SIZE(list); -#endif -} -#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op)) - -#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)]) - -static inline void -PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) { - PyListObject *list = _PyList_CAST(op); - assert(0 <= index); - assert(index < list->allocated); - list->ob_item[index] = value; -} -#define PyList_SET_ITEM(op, index, value) \ - PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value)) - -PyAPI_FUNC(int) PyList_Extend(PyObject *self, PyObject *iterable); -PyAPI_FUNC(int) PyList_Clear(PyObject *self); diff --git a/Python314_4_x86_Template/include/cpython/lock.h b/Python314_4_x86_Template/include/cpython/lock.h deleted file mode 100644 index 63886fca2..000000000 --- a/Python314_4_x86_Template/include/cpython/lock.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef Py_CPYTHON_LOCK_H -# error "this header file must not be included directly" -#endif - -#define _Py_UNLOCKED 0 -#define _Py_LOCKED 1 - -// A mutex that occupies one byte. The lock can be zero initialized to -// represent the unlocked state. -// -// Typical initialization: -// PyMutex m = (PyMutex){0}; -// -// Or initialize as global variables: -// static PyMutex m; -// -// Typical usage: -// PyMutex_Lock(&m); -// ... -// PyMutex_Unlock(&m); -// -// The contents of the PyMutex are not part of the public API, but are -// described to aid in understanding the implementation and debugging. Only -// the two least significant bits are used. The remaining bits are always zero: -// 0b00: unlocked -// 0b01: locked -// 0b10: unlocked and has parked threads -// 0b11: locked and has parked threads -typedef struct PyMutex { - uint8_t _bits; // (private) -} PyMutex; - -// exported function for locking the mutex -PyAPI_FUNC(void) PyMutex_Lock(PyMutex *m); - -// exported function for unlocking the mutex -PyAPI_FUNC(void) PyMutex_Unlock(PyMutex *m); - -// exported function for checking if the mutex is locked -PyAPI_FUNC(int) PyMutex_IsLocked(PyMutex *m); - -// Locks the mutex. -// -// If the mutex is currently locked, the calling thread will be parked until -// the mutex is unlocked. If the current thread holds the GIL, then the GIL -// will be released while the thread is parked. -static inline void -_PyMutex_Lock(PyMutex *m) -{ - uint8_t expected = _Py_UNLOCKED; - if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) { - PyMutex_Lock(m); - } -} -#define PyMutex_Lock _PyMutex_Lock - -// Unlocks the mutex. -static inline void -_PyMutex_Unlock(PyMutex *m) -{ - uint8_t expected = _Py_LOCKED; - if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) { - PyMutex_Unlock(m); - } -} -#define PyMutex_Unlock _PyMutex_Unlock - -// Checks if the mutex is currently locked. -static inline int -_PyMutex_IsLocked(PyMutex *m) -{ - return (_Py_atomic_load_uint8(&m->_bits) & _Py_LOCKED) != 0; -} -#define PyMutex_IsLocked _PyMutex_IsLocked diff --git a/Python314_4_x86_Template/include/cpython/longintrepr.h b/Python314_4_x86_Template/include/cpython/longintrepr.h deleted file mode 100644 index 4b6f97a5e..000000000 --- a/Python314_4_x86_Template/include/cpython/longintrepr.h +++ /dev/null @@ -1,184 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef Py_LONGINTREPR_H -#define Py_LONGINTREPR_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* This is published for the benefit of "friends" marshal.c and _decimal.c. */ - -/* Parameters of the integer representation. There are two different - sets of parameters: one set for 30-bit digits, stored in an unsigned 32-bit - integer type, and one set for 15-bit digits with each digit stored in an - unsigned short. The value of PYLONG_BITS_IN_DIGIT, defined either at - configure time or in pyport.h, is used to decide which digit size to use. - - Type 'digit' should be able to hold 2*PyLong_BASE-1, and type 'twodigits' - should be an unsigned integer type able to hold all integers up to - PyLong_BASE*PyLong_BASE-1. x_sub assumes that 'digit' is an unsigned type, - and that overflow is handled by taking the result modulo 2**N for some N > - PyLong_SHIFT. The majority of the code doesn't care about the precise - value of PyLong_SHIFT, but there are some notable exceptions: - - - PyLong_{As,From}ByteArray require that PyLong_SHIFT be at least 8 - - - long_hash() requires that PyLong_SHIFT is *strictly* less than the number - of bits in an unsigned long, as do the PyLong <-> long (or unsigned long) - conversion functions - - - the Python int <-> size_t/Py_ssize_t conversion functions expect that - PyLong_SHIFT is strictly less than the number of bits in a size_t - - - the marshal code currently expects that PyLong_SHIFT is a multiple of 15 - - - NSMALLNEGINTS and NSMALLPOSINTS should be small enough to fit in a single - digit; with the current values this forces PyLong_SHIFT >= 9 - - The values 15 and 30 should fit all of the above requirements, on any - platform. -*/ - -#if PYLONG_BITS_IN_DIGIT == 30 -typedef uint32_t digit; -typedef int32_t sdigit; /* signed variant of digit */ -typedef uint64_t twodigits; -typedef int64_t stwodigits; /* signed variant of twodigits */ -#define PyLong_SHIFT 30 -#define _PyLong_DECIMAL_SHIFT 9 /* max(e such that 10**e fits in a digit) */ -#define _PyLong_DECIMAL_BASE ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */ -#elif PYLONG_BITS_IN_DIGIT == 15 -typedef unsigned short digit; -typedef short sdigit; /* signed variant of digit */ -typedef unsigned long twodigits; -typedef long stwodigits; /* signed variant of twodigits */ -#define PyLong_SHIFT 15 -#define _PyLong_DECIMAL_SHIFT 4 /* max(e such that 10**e fits in a digit) */ -#define _PyLong_DECIMAL_BASE ((digit)10000) /* 10 ** DECIMAL_SHIFT */ -#else -#error "PYLONG_BITS_IN_DIGIT should be 15 or 30" -#endif -#define PyLong_BASE ((digit)1 << PyLong_SHIFT) -#define PyLong_MASK ((digit)(PyLong_BASE - 1)) - -/* Long integer representation. - - Long integers are made up of a number of 30- or 15-bit digits, depending on - the platform. The number of digits (ndigits) is stored in the high bits of - the lv_tag field (lvtag >> _PyLong_NON_SIZE_BITS). - - The absolute value of a number is equal to - SUM(for i=0 through ndigits-1) ob_digit[i] * 2**(PyLong_SHIFT*i) - - The sign of the value is stored in the lower 2 bits of lv_tag. - - - 0: Positive - - 1: Zero - - 2: Negative - - The third lowest bit of lv_tag is - set to 1 for the small ints. - - In a normalized number, ob_digit[ndigits-1] (the most significant - digit) is never zero. Also, in all cases, for all valid i, - 0 <= ob_digit[i] <= PyLong_MASK. - - The allocation function takes care of allocating extra memory - so that ob_digit[0] ... ob_digit[ndigits-1] are actually available. - We always allocate memory for at least one digit, so accessing ob_digit[0] - is always safe. However, in the case ndigits == 0, the contents of - ob_digit[0] may be undefined. -*/ - -typedef struct _PyLongValue { - uintptr_t lv_tag; /* Number of digits, sign and flags */ - digit ob_digit[1]; -} _PyLongValue; - -struct _longobject { - PyObject_HEAD - _PyLongValue long_value; -}; - -Py_DEPRECATED(3.14) PyAPI_FUNC(PyLongObject*) _PyLong_New(Py_ssize_t); - -// Return a copy of src. -PyAPI_FUNC(PyObject*) _PyLong_Copy(PyLongObject *src); - -Py_DEPRECATED(3.14) PyAPI_FUNC(PyLongObject*) _PyLong_FromDigits( - int negative, - Py_ssize_t digit_count, - digit *digits); - - -/* Inline some internals for speed. These should be in pycore_long.h - * if user code didn't need them inlined. */ - -#define _PyLong_SIGN_MASK 3 -#define _PyLong_NON_SIZE_BITS 3 - - -static inline int -_PyLong_IsCompact(const PyLongObject* op) { - assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS)); - return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS); -} - -#define PyUnstable_Long_IsCompact _PyLong_IsCompact - -static inline Py_ssize_t -_PyLong_CompactValue(const PyLongObject *op) -{ - Py_ssize_t sign; - assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS)); - assert(PyUnstable_Long_IsCompact(op)); - sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK); - return sign * (Py_ssize_t)op->long_value.ob_digit[0]; -} - -#define PyUnstable_Long_CompactValue _PyLong_CompactValue - - -/* --- Import/Export API -------------------------------------------------- */ - -typedef struct PyLongLayout { - uint8_t bits_per_digit; - uint8_t digit_size; - int8_t digits_order; - int8_t digit_endianness; -} PyLongLayout; - -PyAPI_FUNC(const PyLongLayout*) PyLong_GetNativeLayout(void); - -typedef struct PyLongExport { - int64_t value; - uint8_t negative; - Py_ssize_t ndigits; - const void *digits; - // Member used internally, must not be used for other purpose. - Py_uintptr_t _reserved; -} PyLongExport; - -PyAPI_FUNC(int) PyLong_Export( - PyObject *obj, - PyLongExport *export_long); -PyAPI_FUNC(void) PyLong_FreeExport( - PyLongExport *export_long); - - -/* --- PyLongWriter API --------------------------------------------------- */ - -typedef struct PyLongWriter PyLongWriter; - -PyAPI_FUNC(PyLongWriter*) PyLongWriter_Create( - int negative, - Py_ssize_t ndigits, - void **digits); -PyAPI_FUNC(PyObject*) PyLongWriter_Finish(PyLongWriter *writer); -PyAPI_FUNC(void) PyLongWriter_Discard(PyLongWriter *writer); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_LONGINTREPR_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/longobject.h b/Python314_4_x86_Template/include/cpython/longobject.h deleted file mode 100644 index 32e6fd73f..000000000 --- a/Python314_4_x86_Template/include/cpython/longobject.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef Py_CPYTHON_LONGOBJECT_H -# error "this header file must not be included directly" -#endif - -#define _PyLong_CAST(op) \ - (assert(PyLong_Check(op)), _Py_CAST(PyLongObject*, (op))) - -PyAPI_FUNC(PyObject*) PyLong_FromUnicodeObject(PyObject *u, int base); - -PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op); -PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op); - -/* PyLong_IsPositive. Check if the integer object is positive. - - - On success, return 1 if *obj is positive, and 0 otherwise. - - On failure, set an exception, and return -1. */ -PyAPI_FUNC(int) PyLong_IsPositive(PyObject *obj); - -/* PyLong_IsNegative. Check if the integer object is negative. - - - On success, return 1 if *obj is negative, and 0 otherwise. - - On failure, set an exception, and return -1. */ -PyAPI_FUNC(int) PyLong_IsNegative(PyObject *obj); - -/* PyLong_IsZero. Check if the integer object is zero. - - - On success, return 1 if *obj is zero, and 0 if it is non-zero. - - On failure, set an exception, and return -1. */ -PyAPI_FUNC(int) PyLong_IsZero(PyObject *obj); - -/* PyLong_GetSign. Get the sign of an integer object: - 0, -1 or +1 for zero, negative or positive integer, respectively. - - - On success, set '*sign' to the integer sign, and return 0. - - On failure, set an exception, and return -1. */ -PyAPI_FUNC(int) PyLong_GetSign(PyObject *v, int *sign); - -Py_DEPRECATED(3.14) PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); - -/* _PyLong_NumBits. Return the number of bits needed to represent the - absolute value of a long. For example, this returns 1 for 1 and -1, 2 - for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. - v must not be NULL, and must be a normalized long. - Always successful. -*/ -PyAPI_FUNC(int64_t) _PyLong_NumBits(PyObject *v); - -/* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in - base 256, and return a Python int with the same numeric value. - If n is 0, the integer is 0. Else: - If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB; - else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the - LSB. - If is_signed is 0/false, view the bytes as a non-negative integer. - If is_signed is 1/true, view the bytes as a 2's-complement integer, - non-negative if bit 0x80 of the MSB is clear, negative if set. - Error returns: - + Return NULL with the appropriate exception set if there's not - enough memory to create the Python int. -*/ -PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( - const unsigned char* bytes, size_t n, - int little_endian, int is_signed); - -/* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long - v to a base-256 integer, stored in array bytes. Normally return 0, - return -1 on error. - If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at - bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and - the LSB at bytes[n-1]. - If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes - are filled and there's nothing special about bit 0x80 of the MSB. - If is_signed is 1/true, bytes is filled with the 2's-complement - representation of v's value. Bit 0x80 of the MSB is the sign bit. - Error returns (-1): - + is_signed is 0 and v < 0. TypeError is set in this case, and bytes - isn't altered. - + n isn't big enough to hold the full mathematical value of v. For - example, if is_signed is 0 and there are more digits in the v than - fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of - being large enough to hold a sign bit. OverflowError is set in this - case, but bytes holds the least-significant n bytes of the true value. -*/ -PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, - unsigned char* bytes, size_t n, - int little_endian, int is_signed, int with_exceptions); - -/* For use by the gcd function in mathmodule.c */ -PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *); diff --git a/Python314_4_x86_Template/include/cpython/memoryobject.h b/Python314_4_x86_Template/include/cpython/memoryobject.h deleted file mode 100644 index 961161b70..000000000 --- a/Python314_4_x86_Template/include/cpython/memoryobject.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef Py_CPYTHON_MEMORYOBJECT_H -# error "this header file must not be included directly" -#endif - -/* The structs are declared here so that macros can work, but they shouldn't - be considered public. Don't access their fields directly, use the macros - and functions instead! */ -#define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */ -#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */ - -typedef struct { - PyObject_HEAD - int flags; /* state flags */ - Py_ssize_t exports; /* number of direct memoryview exports */ - Py_buffer master; /* snapshot buffer obtained from the original exporter */ -} _PyManagedBufferObject; - - -/* memoryview state flags */ -#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */ -#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */ -#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */ -#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */ -#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */ -#define _Py_MEMORYVIEW_RESTRICTED 0x020 /* Disallow new references to the memoryview's buffer */ - -typedef struct { - PyObject_VAR_HEAD - _PyManagedBufferObject *mbuf; /* managed buffer */ - Py_hash_t hash; /* hash value for read-only views */ - int flags; /* state flags */ - Py_ssize_t exports; /* number of buffer re-exports */ - Py_buffer view; /* private copy of the exporter's view */ - PyObject *weakreflist; - Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */ -} PyMemoryViewObject; - -#define _PyMemoryView_CAST(op) _Py_CAST(PyMemoryViewObject*, op) - -/* Get a pointer to the memoryview's private copy of the exporter's buffer. */ -static inline Py_buffer* PyMemoryView_GET_BUFFER(PyObject *op) { - return (&_PyMemoryView_CAST(op)->view); -} -#define PyMemoryView_GET_BUFFER(op) PyMemoryView_GET_BUFFER(_PyObject_CAST(op)) - -/* Get a pointer to the exporting object (this may be NULL!). */ -static inline PyObject* PyMemoryView_GET_BASE(PyObject *op) { - return _PyMemoryView_CAST(op)->view.obj; -} -#define PyMemoryView_GET_BASE(op) PyMemoryView_GET_BASE(_PyObject_CAST(op)) diff --git a/Python314_4_x86_Template/include/cpython/methodobject.h b/Python314_4_x86_Template/include/cpython/methodobject.h deleted file mode 100644 index d541e1549..000000000 --- a/Python314_4_x86_Template/include/cpython/methodobject.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef Py_CPYTHON_METHODOBJECT_H -# error "this header file must not be included directly" -#endif - -// PyCFunctionObject structure - -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; - -#define _PyCFunctionObject_CAST(func) \ - (assert(PyCFunction_Check(func)), \ - _Py_CAST(PyCFunctionObject*, (func))) - - -// PyCMethodObject structure - -typedef struct { - PyCFunctionObject func; - PyTypeObject *mm_class; /* Class that defines this method */ -} PyCMethodObject; - -#define _PyCMethodObject_CAST(func) \ - (assert(PyCMethod_Check(func)), \ - _Py_CAST(PyCMethodObject*, (func))) - -PyAPI_DATA(PyTypeObject) PyCMethod_Type; - -#define PyCMethod_CheckExact(op) Py_IS_TYPE((op), &PyCMethod_Type) -#define PyCMethod_Check(op) PyObject_TypeCheck((op), &PyCMethod_Type) - - -/* Static inline functions for direct access to these values. - Type checks are *not* done, so use with care. */ -static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) { - return _PyCFunctionObject_CAST(func)->m_ml->ml_meth; -} -#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func)) - -static inline PyObject* PyCFunction_GET_SELF(PyObject *func_obj) { - PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj); - if (func->m_ml->ml_flags & METH_STATIC) { - return _Py_NULL; - } - return func->m_self; -} -#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func)) - -static inline int PyCFunction_GET_FLAGS(PyObject *func) { - return _PyCFunctionObject_CAST(func)->m_ml->ml_flags; -} -#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func)) - -static inline PyTypeObject* PyCFunction_GET_CLASS(PyObject *func_obj) { - PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj); - if (func->m_ml->ml_flags & METH_METHOD) { - return _PyCMethodObject_CAST(func)->mm_class; - } - return _Py_NULL; -} -#define PyCFunction_GET_CLASS(func) PyCFunction_GET_CLASS(_PyObject_CAST(func)) diff --git a/Python314_4_x86_Template/include/cpython/modsupport.h b/Python314_4_x86_Template/include/cpython/modsupport.h deleted file mode 100644 index d3b88f58c..000000000 --- a/Python314_4_x86_Template/include/cpython/modsupport.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_CPYTHON_MODSUPPORT_H -# error "this header file must not be included directly" -#endif - -// A data structure that can be used to run initialization code once in a -// thread-safe manner. The C++11 equivalent is std::call_once. -typedef struct { - uint8_t v; -} _PyOnceFlag; - -typedef struct _PyArg_Parser { - const char *format; - const char * const *keywords; - const char *fname; - const char *custom_msg; - _PyOnceFlag once; /* atomic one-time initialization flag */ - int is_kwtuple_owned; /* does this parser own the kwtuple object? */ - int pos; /* number of positional-only arguments */ - int min; /* minimal number of arguments */ - int max; /* maximal number of positional arguments */ - PyObject *kwtuple; /* tuple of keyword parameter names */ - struct _PyArg_Parser *next; -} _PyArg_Parser; - -PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, - struct _PyArg_Parser *, ...); diff --git a/Python314_4_x86_Template/include/cpython/monitoring.h b/Python314_4_x86_Template/include/cpython/monitoring.h deleted file mode 100644 index ce9294240..000000000 --- a/Python314_4_x86_Template/include/cpython/monitoring.h +++ /dev/null @@ -1,269 +0,0 @@ -#ifndef Py_CPYTHON_MONITORING_H -# error "this header file must not be included directly" -#endif - -/* Local events. - * These require bytecode instrumentation */ - -#define PY_MONITORING_EVENT_PY_START 0 -#define PY_MONITORING_EVENT_PY_RESUME 1 -#define PY_MONITORING_EVENT_PY_RETURN 2 -#define PY_MONITORING_EVENT_PY_YIELD 3 -#define PY_MONITORING_EVENT_CALL 4 -#define PY_MONITORING_EVENT_LINE 5 -#define PY_MONITORING_EVENT_INSTRUCTION 6 -#define PY_MONITORING_EVENT_JUMP 7 -#define PY_MONITORING_EVENT_BRANCH_LEFT 8 -#define PY_MONITORING_EVENT_BRANCH_RIGHT 9 -#define PY_MONITORING_EVENT_STOP_ITERATION 10 - -#define PY_MONITORING_IS_INSTRUMENTED_EVENT(ev) \ - ((ev) < _PY_MONITORING_LOCAL_EVENTS) - -/* Other events, mainly exceptions */ - -#define PY_MONITORING_EVENT_RAISE 11 -#define PY_MONITORING_EVENT_EXCEPTION_HANDLED 12 -#define PY_MONITORING_EVENT_PY_UNWIND 13 -#define PY_MONITORING_EVENT_PY_THROW 14 -#define PY_MONITORING_EVENT_RERAISE 15 - - -/* Ancillary events */ - -#define PY_MONITORING_EVENT_C_RETURN 16 -#define PY_MONITORING_EVENT_C_RAISE 17 -#define PY_MONITORING_EVENT_BRANCH 18 - - -typedef struct _PyMonitoringState { - uint8_t active; - uint8_t opaque; -} PyMonitoringState; - - -PyAPI_FUNC(int) -PyMonitoring_EnterScope(PyMonitoringState *state_array, uint64_t *version, - const uint8_t *event_types, Py_ssize_t length); - -PyAPI_FUNC(int) -PyMonitoring_ExitScope(void); - - -PyAPI_FUNC(int) -_PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval); - -PyAPI_FUNC(int) -_PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval); - -PyAPI_FUNC(int) -_PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject* callable, PyObject *arg0); - -PyAPI_FUNC(int) -_PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - int lineno); - -PyAPI_FUNC(int) -_PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset); - -Py_DEPRECATED(3.14) PyAPI_FUNC(int) -_PyMonitoring_FireBranchEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireBranchRightEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireBranchLeftEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval); - -PyAPI_FUNC(int) -_PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset); - -PyAPI_FUNC(int) -_PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, PyObject *value); - - -#define _PYMONITORING_IF_ACTIVE(STATE, X) \ - if ((STATE)->active) { \ - return (X); \ - } \ - else { \ - return 0; \ - } - -static inline int -PyMonitoring_FirePyStartEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyStartEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FirePyResumeEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyResumeEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FirePyReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyReturnEvent(state, codelike, offset, retval)); -} - -static inline int -PyMonitoring_FirePyYieldEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyYieldEvent(state, codelike, offset, retval)); -} - -static inline int -PyMonitoring_FireCallEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject* callable, PyObject *arg0) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireCallEvent(state, codelike, offset, callable, arg0)); -} - -static inline int -PyMonitoring_FireLineEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - int lineno) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireLineEvent(state, codelike, offset, lineno)); -} - -static inline int -PyMonitoring_FireJumpEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireJumpEvent(state, codelike, offset, target_offset)); -} - -static inline int -PyMonitoring_FireBranchRightEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireBranchRightEvent(state, codelike, offset, target_offset)); -} - -static inline int -PyMonitoring_FireBranchLeftEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *target_offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireBranchLeftEvent(state, codelike, offset, target_offset)); -} - -static inline int -PyMonitoring_FireCReturnEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, - PyObject *retval) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireCReturnEvent(state, codelike, offset, retval)); -} - -static inline int -PyMonitoring_FirePyThrowEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyThrowEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FireRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireRaiseEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FireReraiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireReraiseEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FireExceptionHandledEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireExceptionHandledEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FireCRaiseEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireCRaiseEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FirePyUnwindEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FirePyUnwindEvent(state, codelike, offset)); -} - -static inline int -PyMonitoring_FireStopIterationEvent(PyMonitoringState *state, PyObject *codelike, int32_t offset, PyObject *value) -{ - _PYMONITORING_IF_ACTIVE( - state, - _PyMonitoring_FireStopIterationEvent(state, codelike, offset, value)); -} - -#undef _PYMONITORING_IF_ACTIVE diff --git a/Python314_4_x86_Template/include/cpython/object.h b/Python314_4_x86_Template/include/cpython/object.h deleted file mode 100644 index 973d358ed..000000000 --- a/Python314_4_x86_Template/include/cpython/object.h +++ /dev/null @@ -1,493 +0,0 @@ -#ifndef Py_CPYTHON_OBJECT_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(void) _Py_NewReference(PyObject *op); -PyAPI_FUNC(void) _Py_NewReferenceNoTotal(PyObject *op); -PyAPI_FUNC(void) _Py_ResurrectReference(PyObject *op); -PyAPI_FUNC(void) _Py_ForgetReference(PyObject *op); - -#ifdef Py_REF_DEBUG -/* These are useful as debugging aids when chasing down refleaks. */ -PyAPI_FUNC(Py_ssize_t) _Py_GetGlobalRefTotal(void); -# define _Py_GetRefTotal() _Py_GetGlobalRefTotal() -PyAPI_FUNC(Py_ssize_t) _Py_GetLegacyRefTotal(void); -PyAPI_FUNC(Py_ssize_t) _PyInterpreterState_GetRefTotal(PyInterpreterState *); -#endif - - -/********************* String Literals ****************************************/ -/* This structure helps managing static strings. The basic usage goes like this: - Instead of doing - - r = PyObject_CallMethod(o, "foo", "args", ...); - - do - - _Py_IDENTIFIER(foo); - ... - r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...); - - 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. - - Alternatively, _Py_static_string allows choosing the variable name. - _PyUnicode_FromId returns a borrowed reference to the interned string. - _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*. -*/ -typedef struct _Py_Identifier { - const char* string; - // Index in PyInterpreterState.unicode.ids.array. It is process-wide - // unique and must be initialized to -1. - Py_ssize_t index; - // Hidden PyMutex struct for non free-threaded build. - struct { - uint8_t v; - } mutex; -} _Py_Identifier; - -#ifndef Py_BUILD_CORE -// For now we are keeping _Py_IDENTIFIER for continued use -// in non-builtin extensions (and naughty PyPI modules). - -#define _Py_static_string_init(value) { .string = (value), .index = -1 } -#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value) -#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) - -#endif /* !Py_BUILD_CORE */ - - -typedef struct { - /* Number implementations must check *both* - arguments for proper type and implement the necessary conversions - in the slot functions themselves. */ - - binaryfunc nb_add; - binaryfunc nb_subtract; - binaryfunc nb_multiply; - binaryfunc nb_remainder; - binaryfunc nb_divmod; - ternaryfunc nb_power; - unaryfunc nb_negative; - unaryfunc nb_positive; - unaryfunc nb_absolute; - inquiry nb_bool; - unaryfunc nb_invert; - binaryfunc nb_lshift; - binaryfunc nb_rshift; - binaryfunc nb_and; - binaryfunc nb_xor; - binaryfunc nb_or; - unaryfunc nb_int; - void *nb_reserved; /* the slot formerly known as nb_long */ - unaryfunc nb_float; - - binaryfunc nb_inplace_add; - binaryfunc nb_inplace_subtract; - binaryfunc nb_inplace_multiply; - binaryfunc nb_inplace_remainder; - ternaryfunc nb_inplace_power; - binaryfunc nb_inplace_lshift; - binaryfunc nb_inplace_rshift; - binaryfunc nb_inplace_and; - binaryfunc nb_inplace_xor; - binaryfunc nb_inplace_or; - - binaryfunc nb_floor_divide; - binaryfunc nb_true_divide; - binaryfunc nb_inplace_floor_divide; - binaryfunc nb_inplace_true_divide; - - unaryfunc nb_index; - - binaryfunc nb_matrix_multiply; - binaryfunc nb_inplace_matrix_multiply; -} PyNumberMethods; - -typedef struct { - lenfunc sq_length; - binaryfunc sq_concat; - ssizeargfunc sq_repeat; - ssizeargfunc sq_item; - void *was_sq_slice; - ssizeobjargproc sq_ass_item; - void *was_sq_ass_slice; - objobjproc sq_contains; - - binaryfunc sq_inplace_concat; - ssizeargfunc sq_inplace_repeat; -} PySequenceMethods; - -typedef struct { - lenfunc mp_length; - binaryfunc mp_subscript; - objobjargproc mp_ass_subscript; -} PyMappingMethods; - -typedef PySendResult (*sendfunc)(PyObject *iter, PyObject *value, PyObject **result); - -typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - sendfunc am_send; -} PyAsyncMethods; - -typedef struct { - getbufferproc bf_getbuffer; - releasebufferproc bf_releasebuffer; -} PyBufferProcs; - -/* Allow printfunc in the tp_vectorcall_offset slot for - * backwards-compatibility */ -typedef Py_ssize_t printfunc; - -// If this structure is modified, Doc/includes/typestruct.h should be updated -// as well. -struct _typeobject { - PyObject_VAR_HEAD - const char *tp_name; /* For printing, in format "<module>.<name>" */ - Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ - - /* Methods to implement standard operations */ - - destructor tp_dealloc; - Py_ssize_t tp_vectorcall_offset; - getattrfunc tp_getattr; - setattrfunc tp_setattr; - PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2) - or tp_reserved (Python 3) */ - reprfunc tp_repr; - - /* Method suites for standard classes */ - - PyNumberMethods *tp_as_number; - PySequenceMethods *tp_as_sequence; - PyMappingMethods *tp_as_mapping; - - /* More standard operations (here for binary compatibility) */ - - hashfunc tp_hash; - ternaryfunc tp_call; - reprfunc tp_str; - getattrofunc tp_getattro; - setattrofunc tp_setattro; - - /* Functions to access object as input/output buffer */ - PyBufferProcs *tp_as_buffer; - - /* Flags to define presence of optional/expanded features */ - unsigned long tp_flags; - - const char *tp_doc; /* Documentation string */ - - /* Assigned meaning in release 2.0 */ - /* call function for all accessible objects */ - traverseproc tp_traverse; - - /* delete references to contained objects */ - inquiry tp_clear; - - /* Assigned meaning in release 2.1 */ - /* rich comparisons */ - richcmpfunc tp_richcompare; - - /* weak reference enabler */ - Py_ssize_t tp_weaklistoffset; - - /* Iterators */ - getiterfunc tp_iter; - iternextfunc tp_iternext; - - /* Attribute descriptor and subclassing stuff */ - PyMethodDef *tp_methods; - PyMemberDef *tp_members; - PyGetSetDef *tp_getset; - // Strong reference on a heap type, borrowed reference on a static type - PyTypeObject *tp_base; - PyObject *tp_dict; - descrgetfunc tp_descr_get; - descrsetfunc tp_descr_set; - Py_ssize_t tp_dictoffset; - initproc tp_init; - allocfunc tp_alloc; - newfunc tp_new; - freefunc tp_free; /* Low-level free-memory routine */ - inquiry tp_is_gc; /* For PyObject_IS_GC */ - PyObject *tp_bases; - PyObject *tp_mro; /* method resolution order */ - PyObject *tp_cache; /* no longer used */ - void *tp_subclasses; /* for static builtin types this is an index */ - PyObject *tp_weaklist; /* not used for static builtin types */ - destructor tp_del; - - /* Type attribute cache version tag. Added in version 2.6. - * If zero, the cache is invalid and must be initialized. - */ - unsigned int tp_version_tag; - - destructor tp_finalize; - vectorcallfunc tp_vectorcall; - - /* bitset of which type-watchers care about this type */ - unsigned char tp_watched; - - /* Number of tp_version_tag values used. - * Set to _Py_ATTR_CACHE_UNUSED if the attribute cache is - * disabled for this type (e.g. due to custom MRO entries). - * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere). - */ - uint16_t tp_versions_used; -}; - -#define _Py_ATTR_CACHE_UNUSED (30000) // (see tp_versions_used) - -/* This struct is used by the specializer - * It should be treated as an opaque blob - * by code other than the specializer and interpreter. */ -struct _specialization_cache { - // In order to avoid bloating the bytecode with lots of inline caches, the - // members of this structure have a somewhat unique contract. They are set - // by the specialization machinery, and are invalidated by PyType_Modified. - // The rules for using them are as follows: - // - If getitem is non-NULL, then it is the same Python function that - // PyType_Lookup(cls, "__getitem__") would return. - // - If getitem is NULL, then getitem_version is meaningless. - // - If getitem->func_version == getitem_version, then getitem can be called - // with two positional arguments and no keyword arguments, and has neither - // *args nor **kwargs (as required by BINARY_OP_SUBSCR_GETITEM): - PyObject *getitem; - uint32_t getitem_version; - PyObject *init; -}; - -/* The *real* layout of a type object when allocated on the heap */ -typedef struct _heaptypeobject { - /* Note: there's a dependency on the order of these members - in slotptr() in typeobject.c . */ - PyTypeObject ht_type; - PyAsyncMethods as_async; - PyNumberMethods as_number; - PyMappingMethods as_mapping; - PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, - so that the mapping wins when both - the mapping and the sequence define - a given operator (e.g. __getitem__). - see add_operators() in typeobject.c . */ - PyBufferProcs as_buffer; - PyObject *ht_name, *ht_slots, *ht_qualname; - struct _dictkeysobject *ht_cached_keys; - PyObject *ht_module; - char *_ht_tpname; // Storage for "tp_name"; see PyType_FromModuleAndSpec - void *ht_token; // Storage for the "Py_tp_token" slot - struct _specialization_cache _spec_cache; // For use by the specializer. -#ifdef Py_GIL_DISABLED - Py_ssize_t unique_id; // ID used for per-thread refcounting -#endif - /* here are optional user slots, followed by the members. */ -} PyHeapTypeObject; - -PyAPI_FUNC(const char *) _PyType_Name(PyTypeObject *); -PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *); -PyAPI_FUNC(PyObject *) _PyType_LookupRef(PyTypeObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyType_GetDict(PyTypeObject *); - -PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int); -PyAPI_FUNC(void) _Py_BreakPoint(void); -PyAPI_FUNC(void) _PyObject_Dump(PyObject *); - -PyAPI_FUNC(PyObject*) _PyObject_GetAttrId(PyObject *, _Py_Identifier *); - -PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); -PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); -PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *); - -PyAPI_FUNC(void) PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *); - -/* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes - dict as the last parameter. */ -PyAPI_FUNC(PyObject *) -_PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *, int); -PyAPI_FUNC(int) -_PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, - PyObject *, PyObject *); - -PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *); - -/* Safely decref `dst` and set `dst` to `src`. - * - * As in case of Py_CLEAR "the obvious" code can be deadly: - * - * Py_DECREF(dst); - * dst = src; - * - * The safe way is: - * - * Py_SETREF(dst, src); - * - * That arranges to set `dst` to `src` _before_ decref'ing, so that any code - * triggered as a side-effect of `dst` getting torn down no longer believes - * `dst` points to a valid object. - * - * Temporary variables are used to only evaluate macro arguments once and so - * avoid the duplication of side effects. _Py_TYPEOF() or memcpy() is used to - * avoid a miscompilation caused by type punning. See Py_CLEAR() comment for - * implementation details about type punning. - * - * The memcpy() implementation does not emit a compiler warning if 'src' has - * not the same type than 'src': any pointer type is accepted for 'src'. - */ -#ifdef _Py_TYPEOF -#define Py_SETREF(dst, src) \ - do { \ - _Py_TYPEOF(dst)* _tmp_dst_ptr = &(dst); \ - _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \ - *_tmp_dst_ptr = (src); \ - Py_DECREF(_tmp_old_dst); \ - } while (0) -#else -#define Py_SETREF(dst, src) \ - do { \ - PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \ - PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \ - PyObject *_tmp_src = _PyObject_CAST(src); \ - memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \ - Py_DECREF(_tmp_old_dst); \ - } while (0) -#endif - -/* Py_XSETREF() is a variant of Py_SETREF() that uses Py_XDECREF() instead of - * Py_DECREF(). - */ -#ifdef _Py_TYPEOF -#define Py_XSETREF(dst, src) \ - do { \ - _Py_TYPEOF(dst)* _tmp_dst_ptr = &(dst); \ - _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \ - *_tmp_dst_ptr = (src); \ - Py_XDECREF(_tmp_old_dst); \ - } while (0) -#else -#define Py_XSETREF(dst, src) \ - do { \ - PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \ - PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \ - PyObject *_tmp_src = _PyObject_CAST(src); \ - memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \ - Py_XDECREF(_tmp_old_dst); \ - } while (0) -#endif - - -/* Define a pair of assertion macros: - _PyObject_ASSERT_FROM(), _PyObject_ASSERT_WITH_MSG() and _PyObject_ASSERT(). - - These work like the regular C assert(), in that they will abort the - process with a message on stderr if the given condition fails to hold, - but compile away to nothing if NDEBUG is defined. - - However, before aborting, Python will also try to call _PyObject_Dump() on - the given object. This may be of use when investigating bugs in which a - particular object is corrupt (e.g. buggy a tp_visit method in an extension - module breaking the garbage collector), to help locate the broken objects. - - The WITH_MSG variant allows you to supply an additional message that Python - will attempt to print to stderr, after the object dump. */ -#ifdef NDEBUG - /* No debugging: compile away the assertions: */ -# define _PyObject_ASSERT_FROM(obj, expr, msg, filename, lineno, func) \ - ((void)0) -#else - /* With debugging: generate checks: */ -# define _PyObject_ASSERT_FROM(obj, expr, msg, filename, lineno, func) \ - ((expr) \ - ? (void)(0) \ - : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \ - (msg), (filename), (lineno), (func))) -#endif - -#define _PyObject_ASSERT_WITH_MSG(obj, expr, msg) \ - _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__) -#define _PyObject_ASSERT(obj, expr) \ - _PyObject_ASSERT_WITH_MSG((obj), expr, NULL) - -#define _PyObject_ASSERT_FAILED_MSG(obj, msg) \ - _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__) - -/* Declare and define _PyObject_AssertFailed() even when NDEBUG is defined, - to avoid causing compiler/linker errors when building extensions without - NDEBUG against a Python built with NDEBUG defined. - - msg, expr and function can be NULL. */ -PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed( - PyObject *obj, - const char *expr, - const char *msg, - const char *file, - int line, - const char *function); - - -PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyThreadState *tstate, PyObject *op); -PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(PyThreadState *tstate); - -PyAPI_FUNC(int) _Py_ReachedRecursionLimitWithMargin(PyThreadState *tstate, int margin_count); - -/* For backwards compatibility with the old trashcan mechanism */ -#define Py_TRASHCAN_BEGIN(op, dealloc) -#define Py_TRASHCAN_END - - -PyAPI_FUNC(void *) PyObject_GetItemData(PyObject *obj); - -PyAPI_FUNC(int) PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg); -PyAPI_FUNC(int) _PyObject_SetManagedDict(PyObject *obj, PyObject *new_dict); -PyAPI_FUNC(void) PyObject_ClearManagedDict(PyObject *obj); - - -typedef int(*PyType_WatchCallback)(PyTypeObject *); -PyAPI_FUNC(int) PyType_AddWatcher(PyType_WatchCallback callback); -PyAPI_FUNC(int) PyType_ClearWatcher(int watcher_id); -PyAPI_FUNC(int) PyType_Watch(int watcher_id, PyObject *type); -PyAPI_FUNC(int) PyType_Unwatch(int watcher_id, PyObject *type); - -/* Attempt to assign a version tag to the given type. - * - * Returns 1 if the type already had a valid version tag or a new one was - * assigned, or 0 if a new tag could not be assigned. - */ -PyAPI_FUNC(int) PyUnstable_Type_AssignVersionTag(PyTypeObject *type); - - -typedef enum { - PyRefTracer_CREATE = 0, - PyRefTracer_DESTROY = 1, -} PyRefTracerEvent; - -typedef int (*PyRefTracer)(PyObject *, PyRefTracerEvent event, void *); -PyAPI_FUNC(int) PyRefTracer_SetTracer(PyRefTracer tracer, void *data); -PyAPI_FUNC(PyRefTracer) PyRefTracer_GetTracer(void**); - -/* Enable PEP-703 deferred reference counting on the object. - * - * Returns 1 if deferred reference counting was successfully enabled, and - * 0 if the runtime ignored it. This function cannot fail. - */ -PyAPI_FUNC(int) PyUnstable_Object_EnableDeferredRefcount(PyObject *); - -/* Determine if the object exists as a unique temporary variable on the - * topmost frame of the interpreter. - */ -PyAPI_FUNC(int) PyUnstable_Object_IsUniqueReferencedTemporary(PyObject *); - -/* Check whether the object is immortal. This cannot fail. */ -PyAPI_FUNC(int) PyUnstable_IsImmortal(PyObject *); - -// Increments the reference count of the object, if it's not zero. -// PyUnstable_EnableTryIncRef() should be called on the object -// before calling this function in order to avoid spurious failures. -PyAPI_FUNC(int) PyUnstable_TryIncRef(PyObject *); -PyAPI_FUNC(void) PyUnstable_EnableTryIncRef(PyObject *); - -PyAPI_FUNC(int) PyUnstable_Object_IsUniquelyReferenced(PyObject *); diff --git a/Python314_4_x86_Template/include/cpython/objimpl.h b/Python314_4_x86_Template/include/cpython/objimpl.h deleted file mode 100644 index e0c2ce286..000000000 --- a/Python314_4_x86_Template/include/cpython/objimpl.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef Py_CPYTHON_OBJIMPL_H -# error "this header file must not be included directly" -#endif - -static inline size_t _PyObject_SIZE(PyTypeObject *type) { - return _Py_STATIC_CAST(size_t, type->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 - -static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) { - size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize); - size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize); - return _Py_SIZE_ROUND_UP(size, 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. */ - - -typedef struct { - /* user context passed as the first argument to the 2 functions */ - void *ctx; - - /* allocate an arena of size bytes */ - void* (*alloc) (void *ctx, size_t size); - - /* free an arena */ - void (*free) (void *ctx, void *ptr, size_t size); -} PyObjectArenaAllocator; - -/* Get the arena allocator. */ -PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator); - -/* Set the arena allocator. */ -PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator); - - -/* Test if an object implements the garbage collector protocol */ -PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj); - - -// Test if a type supports weak references -PyAPI_FUNC(int) PyType_SUPPORTS_WEAKREFS(PyTypeObject *type); - -PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op); - -PyAPI_FUNC(PyObject *) PyUnstable_Object_GC_NewWithExtraData(PyTypeObject *, - size_t); - - -/* Visit all live GC-capable objects, similar to gc.get_objects(None). The - * supplied callback is called on every such object with the void* arg set - * to the supplied arg. Returning 0 from the callback ends iteration, returning - * 1 allows iteration to continue. Returning any other value may result in - * undefined behaviour. - * - * If new objects are (de)allocated by the callback it is undefined if they - * will be visited. - - * Garbage collection is disabled during operation. Explicitly running a - * collection in the callback may lead to undefined behaviour e.g. visiting the - * same objects multiple times or not at all. - */ -typedef int (*gcvisitobjects_t)(PyObject*, void*); -PyAPI_FUNC(void) PyUnstable_GC_VisitObjects(gcvisitobjects_t callback, void* arg); diff --git a/Python314_4_x86_Template/include/cpython/odictobject.h b/Python314_4_x86_Template/include/cpython/odictobject.h deleted file mode 100644 index 3822d5548..000000000 --- a/Python314_4_x86_Template/include/cpython/odictobject.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef Py_ODICTOBJECT_H -#define Py_ODICTOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* OrderedDict */ -/* This API is optional and mostly redundant. */ - -#ifndef Py_LIMITED_API - -typedef struct _odictobject PyODictObject; - -PyAPI_DATA(PyTypeObject) PyODict_Type; -PyAPI_DATA(PyTypeObject) PyODictIter_Type; -PyAPI_DATA(PyTypeObject) PyODictKeys_Type; -PyAPI_DATA(PyTypeObject) PyODictItems_Type; -PyAPI_DATA(PyTypeObject) PyODictValues_Type; - -#define PyODict_Check(op) PyObject_TypeCheck((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); -PyAPI_FUNC(int) PyODict_SetItem(PyObject *od, PyObject *key, PyObject *item); -PyAPI_FUNC(int) PyODict_DelItem(PyObject *od, PyObject *key); - -/* wrappers around PyDict* functions */ -#define PyODict_GetItem(od, key) PyDict_GetItem(_PyObject_CAST(od), (key)) -#define PyODict_GetItemWithError(od, key) \ - PyDict_GetItemWithError(_PyObject_CAST(od), (key)) -#define PyODict_Contains(od, key) PyDict_Contains(_PyObject_CAST(od), (key)) -#define PyODict_Size(od) PyDict_Size(_PyObject_CAST(od)) -#define PyODict_GetItemString(od, key) \ - PyDict_GetItemString(_PyObject_CAST(od), (key)) - -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ODICTOBJECT_H */ diff --git a/Python314_4_x86_Template/include/cpython/picklebufobject.h b/Python314_4_x86_Template/include/cpython/picklebufobject.h deleted file mode 100644 index f3cbaeef9..000000000 --- a/Python314_4_x86_Template/include/cpython/picklebufobject.h +++ /dev/null @@ -1,31 +0,0 @@ -/* PickleBuffer object. This is built-in for ease of use from third-party - * C extensions. - */ - -#ifndef Py_PICKLEBUFOBJECT_H -#define Py_PICKLEBUFOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_LIMITED_API - -PyAPI_DATA(PyTypeObject) 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 *); -/* Get the PickleBuffer's underlying view to the original object - * (NULL if released) - */ -PyAPI_FUNC(const Py_buffer *) PyPickleBuffer_GetBuffer(PyObject *); -/* Release the PickleBuffer. Returns 0 on success, -1 on error. */ -PyAPI_FUNC(int) PyPickleBuffer_Release(PyObject *); - -#endif /* !Py_LIMITED_API */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PICKLEBUFOBJECT_H */ diff --git a/Python314_4_x86_Template/include/cpython/pthread_stubs.h b/Python314_4_x86_Template/include/cpython/pthread_stubs.h deleted file mode 100644 index e542eaa5b..000000000 --- a/Python314_4_x86_Template/include/cpython/pthread_stubs.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef Py_CPYTHON_PTRHEAD_STUBS_H -#define Py_CPYTHON_PTRHEAD_STUBS_H - -#if !defined(HAVE_PTHREAD_STUBS) -# error "this header file requires stubbed pthreads." -#endif - -#ifndef _POSIX_THREADS -# define _POSIX_THREADS 1 -#endif - -/* Minimal pthread stubs for CPython. - * - * The stubs implement the minimum pthread API for CPython. - * - pthread_create() fails. - * - pthread_exit() calls exit(0). - * - pthread_key_*() functions implement minimal TSS without destructor. - * - all other functions do nothing and return 0. - */ - -#ifdef __wasi__ -// WASI's bits/alltypes.h provides type definitions when __NEED_ is set. -// The header file can be included multiple times. -// -// <sys/types.h> may also define these macros. -# ifndef __NEED_pthread_cond_t -# define __NEED_pthread_cond_t 1 -# endif -# ifndef __NEED_pthread_condattr_t -# define __NEED_pthread_condattr_t 1 -# endif -# ifndef __NEED_pthread_mutex_t -# define __NEED_pthread_mutex_t 1 -# endif -# ifndef __NEED_pthread_mutexattr_t -# define __NEED_pthread_mutexattr_t 1 -# endif -# ifndef __NEED_pthread_key_t -# define __NEED_pthread_key_t 1 -# endif -# ifndef __NEED_pthread_t -# define __NEED_pthread_t 1 -# endif -# ifndef __NEED_pthread_attr_t -# define __NEED_pthread_attr_t 1 -# endif -# include <bits/alltypes.h> -#else -typedef struct { void *__x; } pthread_cond_t; -typedef struct { unsigned __attr; } pthread_condattr_t; -typedef struct { void *__x; } pthread_mutex_t; -typedef struct { unsigned __attr; } pthread_mutexattr_t; -typedef unsigned pthread_key_t; -typedef unsigned pthread_t; -typedef struct { unsigned __attr; } pthread_attr_t; -#endif - -// mutex -PyAPI_FUNC(int) pthread_mutex_init(pthread_mutex_t *restrict mutex, - const pthread_mutexattr_t *restrict attr); -PyAPI_FUNC(int) pthread_mutex_destroy(pthread_mutex_t *mutex); -PyAPI_FUNC(int) pthread_mutex_trylock(pthread_mutex_t *mutex); -PyAPI_FUNC(int) pthread_mutex_lock(pthread_mutex_t *mutex); -PyAPI_FUNC(int) pthread_mutex_unlock(pthread_mutex_t *mutex); - -// condition -PyAPI_FUNC(int) pthread_cond_init(pthread_cond_t *restrict cond, - const pthread_condattr_t *restrict attr); -PyAPI_FUNC(int) pthread_cond_destroy(pthread_cond_t *cond); -PyAPI_FUNC(int) pthread_cond_wait(pthread_cond_t *restrict cond, - pthread_mutex_t *restrict mutex); -PyAPI_FUNC(int) pthread_cond_timedwait(pthread_cond_t *restrict cond, - pthread_mutex_t *restrict mutex, - const struct timespec *restrict abstime); -PyAPI_FUNC(int) pthread_cond_signal(pthread_cond_t *cond); -PyAPI_FUNC(int) pthread_condattr_init(pthread_condattr_t *attr); -PyAPI_FUNC(int) pthread_condattr_setclock( - pthread_condattr_t *attr, clockid_t clock_id); - -// pthread -PyAPI_FUNC(int) pthread_create(pthread_t *restrict thread, - const pthread_attr_t *restrict attr, - void *(*start_routine)(void *), - void *restrict arg); -PyAPI_FUNC(int) pthread_detach(pthread_t thread); -PyAPI_FUNC(int) pthread_join(pthread_t thread, void** value_ptr); -PyAPI_FUNC(pthread_t) pthread_self(void); -PyAPI_FUNC(int) pthread_exit(void *retval) __attribute__ ((__noreturn__)); -PyAPI_FUNC(int) pthread_attr_init(pthread_attr_t *attr); -PyAPI_FUNC(int) pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); -PyAPI_FUNC(int) pthread_attr_destroy(pthread_attr_t *attr); - - -// pthread_key -#ifndef PTHREAD_KEYS_MAX -# define PTHREAD_KEYS_MAX 128 -#endif - -PyAPI_FUNC(int) pthread_key_create(pthread_key_t *key, - void (*destr_function)(void *)); -PyAPI_FUNC(int) pthread_key_delete(pthread_key_t key); -PyAPI_FUNC(void *) pthread_getspecific(pthread_key_t key); -PyAPI_FUNC(int) pthread_setspecific(pthread_key_t key, const void *value); - -#endif // Py_CPYTHON_PTRHEAD_STUBS_H diff --git a/Python314_4_x86_Template/include/cpython/pyatomic.h b/Python314_4_x86_Template/include/cpython/pyatomic.h deleted file mode 100644 index 3a71ed689..000000000 --- a/Python314_4_x86_Template/include/cpython/pyatomic.h +++ /dev/null @@ -1,628 +0,0 @@ -// This header provides cross-platform low-level atomic operations -// similar to C11 atomics. -// -// Operations are sequentially consistent unless they have a suffix indicating -// otherwise. If in doubt, prefer the sequentially consistent operations. -// -// The "_relaxed" suffix for load and store operations indicates the "relaxed" -// memory order. They don't provide synchronization, but (roughly speaking) -// guarantee somewhat sane behavior for races instead of undefined behavior. -// In practice, they correspond to "normal" hardware load and store -// instructions, so they are almost as inexpensive as plain loads and stores -// in C. -// -// Note that atomic read-modify-write operations like _Py_atomic_add_* return -// the previous value of the atomic variable, not the new value. -// -// See https://en.cppreference.com/w/c/atomic for more information on C11 -// atomics. -// See https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2055r0.pdf -// "A Relaxed Guide to memory_order_relaxed" for discussion of and common usage -// or relaxed atomics. -// -// Functions with pseudo Python code: -// -// def _Py_atomic_load(obj): -// return obj # sequential consistency -// -// def _Py_atomic_load_relaxed(obj): -// return obj # relaxed consistency -// -// def _Py_atomic_store(obj, value): -// obj = value # sequential consistency -// -// def _Py_atomic_store_relaxed(obj, value): -// obj = value # relaxed consistency -// -// def _Py_atomic_exchange(obj, value): -// # sequential consistency -// old_obj = obj -// obj = value -// return old_obj -// -// def _Py_atomic_compare_exchange(obj, expected, desired): -// # sequential consistency -// if obj == expected: -// obj = desired -// return True -// else: -// expected = obj -// return False -// -// def _Py_atomic_add(obj, value): -// # sequential consistency -// old_obj = obj -// obj += value -// return old_obj -// -// def _Py_atomic_and(obj, value): -// # sequential consistency -// old_obj = obj -// obj &= value -// return old_obj -// -// def _Py_atomic_or(obj, value): -// # sequential consistency -// old_obj = obj -// obj |= value -// return old_obj -// -// Other functions: -// -// def _Py_atomic_load_ptr_acquire(obj): -// return obj # acquire -// -// def _Py_atomic_store_ptr_release(obj, value): -// obj = value # release -// -// def _Py_atomic_fence_seq_cst(): -// # sequential consistency -// ... -// -// def _Py_atomic_fence_release(): -// # release -// ... - -#ifndef Py_CPYTHON_ATOMIC_H -# error "this header file must not be included directly" -#endif - -// --- _Py_atomic_add -------------------------------------------------------- -// Atomically adds `value` to `obj` and returns the previous value - -static inline int -_Py_atomic_add_int(int *obj, int value); - -static inline int8_t -_Py_atomic_add_int8(int8_t *obj, int8_t value); - -static inline int16_t -_Py_atomic_add_int16(int16_t *obj, int16_t value); - -static inline int32_t -_Py_atomic_add_int32(int32_t *obj, int32_t value); - -static inline int64_t -_Py_atomic_add_int64(int64_t *obj, int64_t value); - -static inline intptr_t -_Py_atomic_add_intptr(intptr_t *obj, intptr_t value); - -static inline unsigned int -_Py_atomic_add_uint(unsigned int *obj, unsigned int value); - -static inline uint8_t -_Py_atomic_add_uint8(uint8_t *obj, uint8_t value); - -static inline uint16_t -_Py_atomic_add_uint16(uint16_t *obj, uint16_t value); - -static inline uint32_t -_Py_atomic_add_uint32(uint32_t *obj, uint32_t value); - -static inline uint64_t -_Py_atomic_add_uint64(uint64_t *obj, uint64_t value); - -static inline uintptr_t -_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value); - -static inline Py_ssize_t -_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value); - - -// --- _Py_atomic_compare_exchange ------------------------------------------- -// Performs an atomic compare-and-exchange. -// -// - If `*obj` and `*expected` are equal, store `desired` into `*obj` -// and return 1 (success). -// - Otherwise, store the `*obj` current value into `*expected` -// and return 0 (failure). -// -// These correspond to the C11 atomic_compare_exchange_strong() function. - -static inline int -_Py_atomic_compare_exchange_int(int *obj, int *expected, int desired); - -static inline int -_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t desired); - -static inline int -_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t desired); - -static inline int -_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t desired); - -static inline int -_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t desired); - -static inline int -_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t desired); - -static inline int -_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int desired); - -static inline int -_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t desired); - -static inline int -_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t desired); - -static inline int -_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t desired); - -static inline int -_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t desired); - -static inline int -_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t desired); - -static inline int -_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t desired); - -// NOTE: `obj` and `expected` are logically `void**` types, but we use `void*` -// so that we can pass types like `PyObject**` without a cast. -static inline int -_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *value); - - -// --- _Py_atomic_exchange --------------------------------------------------- -// Atomically replaces `*obj` with `value` and returns the previous value of `*obj`. - -static inline int -_Py_atomic_exchange_int(int *obj, int value); - -static inline int8_t -_Py_atomic_exchange_int8(int8_t *obj, int8_t value); - -static inline int16_t -_Py_atomic_exchange_int16(int16_t *obj, int16_t value); - -static inline int32_t -_Py_atomic_exchange_int32(int32_t *obj, int32_t value); - -static inline int64_t -_Py_atomic_exchange_int64(int64_t *obj, int64_t value); - -static inline intptr_t -_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value); - -static inline unsigned int -_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value); - -static inline uint8_t -_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value); - -static inline uint16_t -_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value); - -static inline uint32_t -_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value); - -static inline uint64_t -_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value); - -static inline uintptr_t -_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value); - -static inline Py_ssize_t -_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value); - -static inline void * -_Py_atomic_exchange_ptr(void *obj, void *value); - - -// --- _Py_atomic_and -------------------------------------------------------- -// Performs `*obj &= value` atomically and returns the previous value of `*obj`. - -static inline uint8_t -_Py_atomic_and_uint8(uint8_t *obj, uint8_t value); - -static inline uint16_t -_Py_atomic_and_uint16(uint16_t *obj, uint16_t value); - -static inline uint32_t -_Py_atomic_and_uint32(uint32_t *obj, uint32_t value); - -static inline uint64_t -_Py_atomic_and_uint64(uint64_t *obj, uint64_t value); - -static inline uintptr_t -_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value); - - -// --- _Py_atomic_or --------------------------------------------------------- -// Performs `*obj |= value` atomically and returns the previous value of `*obj`. - -static inline uint8_t -_Py_atomic_or_uint8(uint8_t *obj, uint8_t value); - -static inline uint16_t -_Py_atomic_or_uint16(uint16_t *obj, uint16_t value); - -static inline uint32_t -_Py_atomic_or_uint32(uint32_t *obj, uint32_t value); - -static inline uint64_t -_Py_atomic_or_uint64(uint64_t *obj, uint64_t value); - -static inline uintptr_t -_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value); - - -// --- _Py_atomic_load ------------------------------------------------------- -// Atomically loads `*obj` (sequential consistency) - -static inline int -_Py_atomic_load_int(const int *obj); - -static inline int8_t -_Py_atomic_load_int8(const int8_t *obj); - -static inline int16_t -_Py_atomic_load_int16(const int16_t *obj); - -static inline int32_t -_Py_atomic_load_int32(const int32_t *obj); - -static inline int64_t -_Py_atomic_load_int64(const int64_t *obj); - -static inline intptr_t -_Py_atomic_load_intptr(const intptr_t *obj); - -static inline uint8_t -_Py_atomic_load_uint8(const uint8_t *obj); - -static inline uint16_t -_Py_atomic_load_uint16(const uint16_t *obj); - -static inline uint32_t -_Py_atomic_load_uint32(const uint32_t *obj); - -static inline uint64_t -_Py_atomic_load_uint64(const uint64_t *obj); - -static inline uintptr_t -_Py_atomic_load_uintptr(const uintptr_t *obj); - -static inline unsigned int -_Py_atomic_load_uint(const unsigned int *obj); - -static inline Py_ssize_t -_Py_atomic_load_ssize(const Py_ssize_t *obj); - -static inline void * -_Py_atomic_load_ptr(const void *obj); - - -// --- _Py_atomic_load_relaxed ----------------------------------------------- -// Loads `*obj` (relaxed consistency, i.e., no ordering) - -static inline int -_Py_atomic_load_int_relaxed(const int *obj); - -static inline char -_Py_atomic_load_char_relaxed(const char *obj); - -static inline unsigned char -_Py_atomic_load_uchar_relaxed(const unsigned char *obj); - -static inline short -_Py_atomic_load_short_relaxed(const short *obj); - -static inline unsigned short -_Py_atomic_load_ushort_relaxed(const unsigned short *obj); - -static inline long -_Py_atomic_load_long_relaxed(const long *obj); - -static inline double -_Py_atomic_load_double_relaxed(const double *obj); - -static inline long long -_Py_atomic_load_llong_relaxed(const long long *obj); - -static inline int8_t -_Py_atomic_load_int8_relaxed(const int8_t *obj); - -static inline int16_t -_Py_atomic_load_int16_relaxed(const int16_t *obj); - -static inline int32_t -_Py_atomic_load_int32_relaxed(const int32_t *obj); - -static inline int64_t -_Py_atomic_load_int64_relaxed(const int64_t *obj); - -static inline intptr_t -_Py_atomic_load_intptr_relaxed(const intptr_t *obj); - -static inline uint8_t -_Py_atomic_load_uint8_relaxed(const uint8_t *obj); - -static inline uint16_t -_Py_atomic_load_uint16_relaxed(const uint16_t *obj); - -static inline uint32_t -_Py_atomic_load_uint32_relaxed(const uint32_t *obj); - -static inline uint64_t -_Py_atomic_load_uint64_relaxed(const uint64_t *obj); - -static inline uintptr_t -_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj); - -static inline unsigned int -_Py_atomic_load_uint_relaxed(const unsigned int *obj); - -static inline Py_ssize_t -_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj); - -static inline void * -_Py_atomic_load_ptr_relaxed(const void *obj); - -static inline unsigned long long -_Py_atomic_load_ullong_relaxed(const unsigned long long *obj); - -// --- _Py_atomic_store ------------------------------------------------------ -// Atomically performs `*obj = value` (sequential consistency) - -static inline void -_Py_atomic_store_int(int *obj, int value); - -static inline void -_Py_atomic_store_int8(int8_t *obj, int8_t value); - -static inline void -_Py_atomic_store_int16(int16_t *obj, int16_t value); - -static inline void -_Py_atomic_store_int32(int32_t *obj, int32_t value); - -static inline void -_Py_atomic_store_int64(int64_t *obj, int64_t value); - -static inline void -_Py_atomic_store_intptr(intptr_t *obj, intptr_t value); - -static inline void -_Py_atomic_store_uint8(uint8_t *obj, uint8_t value); - -static inline void -_Py_atomic_store_uint16(uint16_t *obj, uint16_t value); - -static inline void -_Py_atomic_store_uint32(uint32_t *obj, uint32_t value); - -static inline void -_Py_atomic_store_uint64(uint64_t *obj, uint64_t value); - -static inline void -_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value); - -static inline void -_Py_atomic_store_uint(unsigned int *obj, unsigned int value); - -static inline void -_Py_atomic_store_ptr(void *obj, void *value); - -static inline void -_Py_atomic_store_ssize(Py_ssize_t* obj, Py_ssize_t value); - - -// --- _Py_atomic_store_relaxed ---------------------------------------------- -// Stores `*obj = value` (relaxed consistency, i.e., no ordering) - -static inline void -_Py_atomic_store_int_relaxed(int *obj, int value); - -static inline void -_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value); - -static inline void -_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value); - -static inline void -_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value); - -static inline void -_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value); - -static inline void -_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value); - -static inline void -_Py_atomic_store_uint8_relaxed(uint8_t* obj, uint8_t value); - -static inline void -_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value); - -static inline void -_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value); - -static inline void -_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value); - -static inline void -_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value); - -static inline void -_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value); - -static inline void -_Py_atomic_store_ptr_relaxed(void *obj, void *value); - -static inline void -_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value); - -static inline void -_Py_atomic_store_ullong_relaxed(unsigned long long *obj, - unsigned long long value); - -static inline void -_Py_atomic_store_char_relaxed(char *obj, char value); - -static inline void -_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value); - -static inline void -_Py_atomic_store_short_relaxed(short *obj, short value); - -static inline void -_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value); - -static inline void -_Py_atomic_store_long_relaxed(long *obj, long value); - -static inline void -_Py_atomic_store_float_relaxed(float *obj, float value); - -static inline void -_Py_atomic_store_double_relaxed(double *obj, double value); - -static inline void -_Py_atomic_store_llong_relaxed(long long *obj, long long value); - - -// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------ - -// Loads `*obj` (acquire operation) -static inline void * -_Py_atomic_load_ptr_acquire(const void *obj); - -static inline uintptr_t -_Py_atomic_load_uintptr_acquire(const uintptr_t *obj); - -// Stores `*obj = value` (release operation) -static inline void -_Py_atomic_store_ptr_release(void *obj, void *value); - -static inline void -_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value); - -static inline void -_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value); - -static inline void -_Py_atomic_store_int_release(int *obj, int value); - -static inline int -_Py_atomic_load_int_acquire(const int *obj); - -static inline void -_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value); - -static inline void -_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value); - -static inline void -_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value); - -static inline uint64_t -_Py_atomic_load_uint64_acquire(const uint64_t *obj); - -static inline uint32_t -_Py_atomic_load_uint32_acquire(const uint32_t *obj); - -static inline Py_ssize_t -_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj); - - - - -// --- _Py_atomic_fence ------------------------------------------------------ - -// Sequential consistency fence. C11 fences have complex semantics. When -// possible, use the atomic operations on variables defined above, which -// generally do not require explicit use of a fence. -// See https://en.cppreference.com/w/cpp/atomic/atomic_thread_fence -static inline void _Py_atomic_fence_seq_cst(void); - -// Acquire fence -static inline void _Py_atomic_fence_acquire(void); - -// Release fence -static inline void _Py_atomic_fence_release(void); - - -#ifndef _Py_USE_GCC_BUILTIN_ATOMICS -# if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) -# define _Py_USE_GCC_BUILTIN_ATOMICS 1 -# elif defined(__clang__) -# if __has_builtin(__atomic_load) -# define _Py_USE_GCC_BUILTIN_ATOMICS 1 -# endif -# endif -#endif - -#if _Py_USE_GCC_BUILTIN_ATOMICS -# define Py_ATOMIC_GCC_H -# include "pyatomic_gcc.h" -# undef Py_ATOMIC_GCC_H -#elif __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) -# define Py_ATOMIC_STD_H -# include "pyatomic_std.h" -# undef Py_ATOMIC_STD_H -#elif defined(_MSC_VER) -# define Py_ATOMIC_MSC_H -# include "pyatomic_msc.h" -# undef Py_ATOMIC_MSC_H -#else -# error "no available pyatomic implementation for this platform/compiler" -#endif - - -// --- aliases --------------------------------------------------------------- - -// Compilers don't really support "consume" semantics, so we fake it. Use -// "acquire" with TSan to support false positives. Use "relaxed" otherwise, -// because CPUs on all platforms we support respect address dependencies without -// extra barriers. -// See 2.6.7 in https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2055r0.pdf -#if defined(_Py_THREAD_SANITIZER) -# define _Py_atomic_load_ptr_consume _Py_atomic_load_ptr_acquire -#else -# define _Py_atomic_load_ptr_consume _Py_atomic_load_ptr_relaxed -#endif - -#if SIZEOF_LONG == 8 -# define _Py_atomic_load_ulong(p) \ - _Py_atomic_load_uint64((uint64_t *)p) -# define _Py_atomic_load_ulong_relaxed(p) \ - _Py_atomic_load_uint64_relaxed((uint64_t *)p) -# define _Py_atomic_store_ulong(p, v) \ - _Py_atomic_store_uint64((uint64_t *)p, v) -# define _Py_atomic_store_ulong_relaxed(p, v) \ - _Py_atomic_store_uint64_relaxed((uint64_t *)p, v) -#elif SIZEOF_LONG == 4 -# define _Py_atomic_load_ulong(p) \ - _Py_atomic_load_uint32((uint32_t *)p) -# define _Py_atomic_load_ulong_relaxed(p) \ - _Py_atomic_load_uint32_relaxed((uint32_t *)p) -# define _Py_atomic_store_ulong(p, v) \ - _Py_atomic_store_uint32((uint32_t *)p, v) -# define _Py_atomic_store_ulong_relaxed(p, v) \ - _Py_atomic_store_uint32_relaxed((uint32_t *)p, v) -#else -# error "long must be 4 or 8 bytes in size" -#endif // SIZEOF_LONG diff --git a/Python314_4_x86_Template/include/cpython/pyatomic_gcc.h b/Python314_4_x86_Template/include/cpython/pyatomic_gcc.h deleted file mode 100644 index 465226a76..000000000 --- a/Python314_4_x86_Template/include/cpython/pyatomic_gcc.h +++ /dev/null @@ -1,619 +0,0 @@ -// This is the implementation of Python atomic operations using GCC's built-in -// functions that match the C+11 memory model. This implementation is preferred -// for GCC compatible compilers, such as Clang. These functions are available -// in GCC 4.8+ without needing to compile with --std=c11 or --std=gnu11. - -#ifndef Py_ATOMIC_GCC_H -# error "this header file must not be included directly" -#endif - - -// --- _Py_atomic_add -------------------------------------------------------- - -static inline int -_Py_atomic_add_int(int *obj, int value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline int8_t -_Py_atomic_add_int8(int8_t *obj, int8_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline int16_t -_Py_atomic_add_int16(int16_t *obj, int16_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline int32_t -_Py_atomic_add_int32(int32_t *obj, int32_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline int64_t -_Py_atomic_add_int64(int64_t *obj, int64_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline intptr_t -_Py_atomic_add_intptr(intptr_t *obj, intptr_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline unsigned int -_Py_atomic_add_uint(unsigned int *obj, unsigned int value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint8_t -_Py_atomic_add_uint8(uint8_t *obj, uint8_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint16_t -_Py_atomic_add_uint16(uint16_t *obj, uint16_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint32_t -_Py_atomic_add_uint32(uint32_t *obj, uint32_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint64_t -_Py_atomic_add_uint64(uint64_t *obj, uint64_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline uintptr_t -_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - -static inline Py_ssize_t -_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_compare_exchange ------------------------------------------- - -static inline int -_Py_atomic_compare_exchange_int(int *obj, int *expected, int desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t desired) -{ return __atomic_compare_exchange_n(obj, expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - -static inline int -_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *desired) -{ return __atomic_compare_exchange_n((void **)obj, (void **)expected, desired, 0, - __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_exchange --------------------------------------------------- - -static inline int -_Py_atomic_exchange_int(int *obj, int value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline int8_t -_Py_atomic_exchange_int8(int8_t *obj, int8_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline int16_t -_Py_atomic_exchange_int16(int16_t *obj, int16_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline int32_t -_Py_atomic_exchange_int32(int32_t *obj, int32_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline int64_t -_Py_atomic_exchange_int64(int64_t *obj, int64_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline intptr_t -_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline unsigned int -_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint8_t -_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint16_t -_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint32_t -_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint64_t -_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline uintptr_t -_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline Py_ssize_t -_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void * -_Py_atomic_exchange_ptr(void *obj, void *value) -{ return __atomic_exchange_n((void **)obj, value, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_and -------------------------------------------------------- - -static inline uint8_t -_Py_atomic_and_uint8(uint8_t *obj, uint8_t value) -{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint16_t -_Py_atomic_and_uint16(uint16_t *obj, uint16_t value) -{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint32_t -_Py_atomic_and_uint32(uint32_t *obj, uint32_t value) -{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint64_t -_Py_atomic_and_uint64(uint64_t *obj, uint64_t value) -{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); } - -static inline uintptr_t -_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value) -{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_or --------------------------------------------------------- - -static inline uint8_t -_Py_atomic_or_uint8(uint8_t *obj, uint8_t value) -{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint16_t -_Py_atomic_or_uint16(uint16_t *obj, uint16_t value) -{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint32_t -_Py_atomic_or_uint32(uint32_t *obj, uint32_t value) -{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); } - -static inline uint64_t -_Py_atomic_or_uint64(uint64_t *obj, uint64_t value) -{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); } - -static inline uintptr_t -_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value) -{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_load ------------------------------------------------------- - -static inline int -_Py_atomic_load_int(const int *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline int8_t -_Py_atomic_load_int8(const int8_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline int16_t -_Py_atomic_load_int16(const int16_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline int32_t -_Py_atomic_load_int32(const int32_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline int64_t -_Py_atomic_load_int64(const int64_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline intptr_t -_Py_atomic_load_intptr(const intptr_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline uint8_t -_Py_atomic_load_uint8(const uint8_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline uint16_t -_Py_atomic_load_uint16(const uint16_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline uint32_t -_Py_atomic_load_uint32(const uint32_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline uint64_t -_Py_atomic_load_uint64(const uint64_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline uintptr_t -_Py_atomic_load_uintptr(const uintptr_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline unsigned int -_Py_atomic_load_uint(const unsigned int *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline Py_ssize_t -_Py_atomic_load_ssize(const Py_ssize_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); } - -static inline void * -_Py_atomic_load_ptr(const void *obj) -{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_load_relaxed ----------------------------------------------- - -static inline int -_Py_atomic_load_int_relaxed(const int *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline char -_Py_atomic_load_char_relaxed(const char *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline unsigned char -_Py_atomic_load_uchar_relaxed(const unsigned char *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline short -_Py_atomic_load_short_relaxed(const short *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline unsigned short -_Py_atomic_load_ushort_relaxed(const unsigned short *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline long -_Py_atomic_load_long_relaxed(const long *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline float -_Py_atomic_load_float_relaxed(const float *obj) -{ float ret; __atomic_load(obj, &ret, __ATOMIC_RELAXED); return ret; } - -static inline double -_Py_atomic_load_double_relaxed(const double *obj) -{ double ret; __atomic_load(obj, &ret, __ATOMIC_RELAXED); return ret; } - -static inline int8_t -_Py_atomic_load_int8_relaxed(const int8_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline int16_t -_Py_atomic_load_int16_relaxed(const int16_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline int32_t -_Py_atomic_load_int32_relaxed(const int32_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline int64_t -_Py_atomic_load_int64_relaxed(const int64_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline intptr_t -_Py_atomic_load_intptr_relaxed(const intptr_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline uint8_t -_Py_atomic_load_uint8_relaxed(const uint8_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline uint16_t -_Py_atomic_load_uint16_relaxed(const uint16_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline uint32_t -_Py_atomic_load_uint32_relaxed(const uint32_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline uint64_t -_Py_atomic_load_uint64_relaxed(const uint64_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline uintptr_t -_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline unsigned int -_Py_atomic_load_uint_relaxed(const unsigned int *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline Py_ssize_t -_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline void * -_Py_atomic_load_ptr_relaxed(const void *obj) -{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_RELAXED); } - -static inline unsigned long long -_Py_atomic_load_ullong_relaxed(const unsigned long long *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - -static inline long long -_Py_atomic_load_llong_relaxed(const long long *obj) -{ return __atomic_load_n(obj, __ATOMIC_RELAXED); } - - -// --- _Py_atomic_store ------------------------------------------------------ - -static inline void -_Py_atomic_store_int(int *obj, int value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_int8(int8_t *obj, int8_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_int16(int16_t *obj, int16_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_int32(int32_t *obj, int32_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_int64(int64_t *obj, int64_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_intptr(intptr_t *obj, intptr_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uint8(uint8_t *obj, uint8_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uint16(uint16_t *obj, uint16_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uint32(uint32_t *obj, uint32_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uint64(uint64_t *obj, uint64_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_uint(unsigned int *obj, unsigned int value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_ptr(void *obj, void *value) -{ __atomic_store_n((void **)obj, value, __ATOMIC_SEQ_CST); } - -static inline void -_Py_atomic_store_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); } - - -// --- _Py_atomic_store_relaxed ---------------------------------------------- - -static inline void -_Py_atomic_store_int_relaxed(int *obj, int value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uint8_relaxed(uint8_t *obj, uint8_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_ptr_relaxed(void *obj, void *value) -{ __atomic_store_n((void **)obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_ullong_relaxed(unsigned long long *obj, - unsigned long long value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_char_relaxed(char *obj, char value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_short_relaxed(short *obj, short value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_long_relaxed(long *obj, long value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_float_relaxed(float *obj, float value) -{ __atomic_store(obj, &value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_double_relaxed(double *obj, double value) -{ __atomic_store(obj, &value, __ATOMIC_RELAXED); } - -static inline void -_Py_atomic_store_llong_relaxed(long long *obj, long long value) -{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); } - - -// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------ - -static inline void * -_Py_atomic_load_ptr_acquire(const void *obj) -{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_ACQUIRE); } - -static inline uintptr_t -_Py_atomic_load_uintptr_acquire(const uintptr_t *obj) -{ return (uintptr_t)__atomic_load_n(obj, __ATOMIC_ACQUIRE); } - -static inline void -_Py_atomic_store_ptr_release(void *obj, void *value) -{ __atomic_store_n((void **)obj, value, __ATOMIC_RELEASE); } - -static inline void -_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline void -_Py_atomic_store_int_release(int *obj, int value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline void -_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline void -_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline int -_Py_atomic_load_int_acquire(const int *obj) -{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); } - -static inline void -_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline void -_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value) -{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); } - -static inline uint64_t -_Py_atomic_load_uint64_acquire(const uint64_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); } - -static inline uint32_t -_Py_atomic_load_uint32_acquire(const uint32_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); } - -static inline Py_ssize_t -_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj) -{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); } - -// --- _Py_atomic_fence ------------------------------------------------------ - -static inline void -_Py_atomic_fence_seq_cst(void) -{ __atomic_thread_fence(__ATOMIC_SEQ_CST); } - - static inline void -_Py_atomic_fence_acquire(void) -{ __atomic_thread_fence(__ATOMIC_ACQUIRE); } - - static inline void -_Py_atomic_fence_release(void) -{ __atomic_thread_fence(__ATOMIC_RELEASE); } diff --git a/Python314_4_x86_Template/include/cpython/pyatomic_msc.h b/Python314_4_x86_Template/include/cpython/pyatomic_msc.h deleted file mode 100644 index eb6df819f..000000000 --- a/Python314_4_x86_Template/include/cpython/pyatomic_msc.h +++ /dev/null @@ -1,1204 +0,0 @@ -// This is the implementation of Python atomic operations for MSVC if the -// compiler does not support C11 or C++11 atomics. -// -// MSVC intrinsics are defined on char, short, long, __int64, and pointer -// types. Note that long and int are both 32-bits even on 64-bit Windows, -// so operations on int are cast to long. -// -// The volatile keyword has additional memory ordering semantics on MSVC. On -// x86 and x86-64, volatile accesses have acquire-release semantics. On ARM64, -// volatile accesses behave like C11's memory_order_relaxed. - -#ifndef Py_ATOMIC_MSC_H -# error "this header file must not be included directly" -#endif - -#include <intrin.h> - -#define _Py_atomic_ASSERT_ARG_TYPE(TYPE) \ - Py_BUILD_ASSERT(sizeof(*obj) == sizeof(TYPE)) - - -// --- _Py_atomic_add -------------------------------------------------------- - -static inline int8_t -_Py_atomic_add_int8(int8_t *obj, int8_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(char); - return (int8_t)_InterlockedExchangeAdd8((volatile char *)obj, (char)value); -} - -static inline int16_t -_Py_atomic_add_int16(int16_t *obj, int16_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(short); - return (int16_t)_InterlockedExchangeAdd16((volatile short *)obj, (short)value); -} - -static inline int32_t -_Py_atomic_add_int32(int32_t *obj, int32_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(long); - return (int32_t)_InterlockedExchangeAdd((volatile long *)obj, (long)value); -} - -static inline int64_t -_Py_atomic_add_int64(int64_t *obj, int64_t value) -{ -#if defined(_M_X64) || defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(__int64); - return (int64_t)_InterlockedExchangeAdd64((volatile __int64 *)obj, (__int64)value); -#else - int64_t old_value = _Py_atomic_load_int64_relaxed(obj); - for (;;) { - int64_t new_value = old_value + value; - if (_Py_atomic_compare_exchange_int64(obj, &old_value, new_value)) { - return old_value; - } - } -#endif -} - - -static inline uint8_t -_Py_atomic_add_uint8(uint8_t *obj, uint8_t value) -{ - return (uint8_t)_Py_atomic_add_int8((int8_t *)obj, (int8_t)value); -} - -static inline uint16_t -_Py_atomic_add_uint16(uint16_t *obj, uint16_t value) -{ - return (uint16_t)_Py_atomic_add_int16((int16_t *)obj, (int16_t)value); -} - -static inline uint32_t -_Py_atomic_add_uint32(uint32_t *obj, uint32_t value) -{ - return (uint32_t)_Py_atomic_add_int32((int32_t *)obj, (int32_t)value); -} - -static inline int -_Py_atomic_add_int(int *obj, int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return (int)_Py_atomic_add_int32((int32_t *)obj, (int32_t)value); -} - -static inline unsigned int -_Py_atomic_add_uint(unsigned int *obj, unsigned int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return (unsigned int)_Py_atomic_add_int32((int32_t *)obj, (int32_t)value); -} - -static inline uint64_t -_Py_atomic_add_uint64(uint64_t *obj, uint64_t value) -{ - return (uint64_t)_Py_atomic_add_int64((int64_t *)obj, (int64_t)value); -} - -static inline intptr_t -_Py_atomic_add_intptr(intptr_t *obj, intptr_t value) -{ -#if SIZEOF_VOID_P == 8 - _Py_atomic_ASSERT_ARG_TYPE(int64_t); - return (intptr_t)_Py_atomic_add_int64((int64_t *)obj, (int64_t)value); -#else - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return (intptr_t)_Py_atomic_add_int32((int32_t *)obj, (int32_t)value); -#endif -} - -static inline uintptr_t -_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(intptr_t); - return (uintptr_t)_Py_atomic_add_intptr((intptr_t *)obj, (intptr_t)value); -} - -static inline Py_ssize_t -_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(intptr_t); - return (Py_ssize_t)_Py_atomic_add_intptr((intptr_t *)obj, (intptr_t)value); -} - - -// --- _Py_atomic_compare_exchange ------------------------------------------- - -static inline int -_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(char); - int8_t initial = (int8_t)_InterlockedCompareExchange8( - (volatile char *)obj, - (char)value, - (char)*expected); - if (initial == *expected) { - return 1; - } - *expected = initial; - return 0; -} - -static inline int -_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(short); - int16_t initial = (int16_t)_InterlockedCompareExchange16( - (volatile short *)obj, - (short)value, - (short)*expected); - if (initial == *expected) { - return 1; - } - *expected = initial; - return 0; -} - -static inline int -_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(long); - int32_t initial = (int32_t)_InterlockedCompareExchange( - (volatile long *)obj, - (long)value, - (long)*expected); - if (initial == *expected) { - return 1; - } - *expected = initial; - return 0; -} - -static inline int -_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(__int64); - int64_t initial = (int64_t)_InterlockedCompareExchange64( - (volatile __int64 *)obj, - (__int64)value, - (__int64)*expected); - if (initial == *expected) { - return 1; - } - *expected = initial; - return 0; -} - -static inline int -_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *value) -{ - void *initial = _InterlockedCompareExchangePointer( - (void**)obj, - value, - *(void**)expected); - if (initial == *(void**)expected) { - return 1; - } - *(void**)expected = initial; - return 0; -} - - -static inline int -_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t value) -{ - return _Py_atomic_compare_exchange_int8((int8_t *)obj, - (int8_t *)expected, - (int8_t)value); -} - -static inline int -_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t value) -{ - return _Py_atomic_compare_exchange_int16((int16_t *)obj, - (int16_t *)expected, - (int16_t)value); -} - -static inline int -_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t value) -{ - return _Py_atomic_compare_exchange_int32((int32_t *)obj, - (int32_t *)expected, - (int32_t)value); -} - -static inline int -_Py_atomic_compare_exchange_int(int *obj, int *expected, int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return _Py_atomic_compare_exchange_int32((int32_t *)obj, - (int32_t *)expected, - (int32_t)value); -} - -static inline int -_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return _Py_atomic_compare_exchange_int32((int32_t *)obj, - (int32_t *)expected, - (int32_t)value); -} - -static inline int -_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t value) -{ - return _Py_atomic_compare_exchange_int64((int64_t *)obj, - (int64_t *)expected, - (int64_t)value); -} - -static inline int -_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return _Py_atomic_compare_exchange_ptr((void**)obj, - (void**)expected, - (void*)value); -} - -static inline int -_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return _Py_atomic_compare_exchange_ptr((void**)obj, - (void**)expected, - (void*)value); -} - -static inline int -_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return _Py_atomic_compare_exchange_ptr((void**)obj, - (void**)expected, - (void*)value); -} - - -// --- _Py_atomic_exchange --------------------------------------------------- - -static inline int8_t -_Py_atomic_exchange_int8(int8_t *obj, int8_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(char); - return (int8_t)_InterlockedExchange8((volatile char *)obj, (char)value); -} - -static inline int16_t -_Py_atomic_exchange_int16(int16_t *obj, int16_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(short); - return (int16_t)_InterlockedExchange16((volatile short *)obj, (short)value); -} - -static inline int32_t -_Py_atomic_exchange_int32(int32_t *obj, int32_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(long); - return (int32_t)_InterlockedExchange((volatile long *)obj, (long)value); -} - -static inline int64_t -_Py_atomic_exchange_int64(int64_t *obj, int64_t value) -{ -#if defined(_M_X64) || defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(__int64); - return (int64_t)_InterlockedExchange64((volatile __int64 *)obj, (__int64)value); -#else - int64_t old_value = _Py_atomic_load_int64_relaxed(obj); - for (;;) { - if (_Py_atomic_compare_exchange_int64(obj, &old_value, value)) { - return old_value; - } - } -#endif -} - -static inline void* -_Py_atomic_exchange_ptr(void *obj, void *value) -{ - return (void*)_InterlockedExchangePointer((void * volatile *)obj, (void *)value); -} - - -static inline uint8_t -_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value) -{ - return (uint8_t)_Py_atomic_exchange_int8((int8_t *)obj, - (int8_t)value); -} - -static inline uint16_t -_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value) -{ - return (uint16_t)_Py_atomic_exchange_int16((int16_t *)obj, - (int16_t)value); -} - -static inline uint32_t -_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value) -{ - return (uint32_t)_Py_atomic_exchange_int32((int32_t *)obj, - (int32_t)value); -} - -static inline int -_Py_atomic_exchange_int(int *obj, int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return (int)_Py_atomic_exchange_int32((int32_t *)obj, - (int32_t)value); -} - -static inline unsigned int -_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value) -{ - _Py_atomic_ASSERT_ARG_TYPE(int32_t); - return (unsigned int)_Py_atomic_exchange_int32((int32_t *)obj, - (int32_t)value); -} - -static inline uint64_t -_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value) -{ - return (uint64_t)_Py_atomic_exchange_int64((int64_t *)obj, - (int64_t)value); -} - -static inline intptr_t -_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (intptr_t)_Py_atomic_exchange_ptr((void**)obj, - (void*)value); -} - -static inline uintptr_t -_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (uintptr_t)_Py_atomic_exchange_ptr((void**)obj, - (void*)value); -} - -static inline Py_ssize_t -_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (Py_ssize_t)_Py_atomic_exchange_ptr((void**)obj, - (void*)value); -} - - -// --- _Py_atomic_and -------------------------------------------------------- - -static inline uint8_t -_Py_atomic_and_uint8(uint8_t *obj, uint8_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(char); - return (uint8_t)_InterlockedAnd8((volatile char *)obj, (char)value); -} - -static inline uint16_t -_Py_atomic_and_uint16(uint16_t *obj, uint16_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(short); - return (uint16_t)_InterlockedAnd16((volatile short *)obj, (short)value); -} - -static inline uint32_t -_Py_atomic_and_uint32(uint32_t *obj, uint32_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(long); - return (uint32_t)_InterlockedAnd((volatile long *)obj, (long)value); -} - -static inline uint64_t -_Py_atomic_and_uint64(uint64_t *obj, uint64_t value) -{ -#if defined(_M_X64) || defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(__int64); - return (uint64_t)_InterlockedAnd64((volatile __int64 *)obj, (__int64)value); -#else - uint64_t old_value = _Py_atomic_load_uint64_relaxed(obj); - for (;;) { - uint64_t new_value = old_value & value; - if (_Py_atomic_compare_exchange_uint64(obj, &old_value, new_value)) { - return old_value; - } - } -#endif -} - -static inline uintptr_t -_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value) -{ -#if SIZEOF_VOID_P == 8 - _Py_atomic_ASSERT_ARG_TYPE(uint64_t); - return (uintptr_t)_Py_atomic_and_uint64((uint64_t *)obj, - (uint64_t)value); -#else - _Py_atomic_ASSERT_ARG_TYPE(uint32_t); - return (uintptr_t)_Py_atomic_and_uint32((uint32_t *)obj, - (uint32_t)value); -#endif -} - - -// --- _Py_atomic_or --------------------------------------------------------- - -static inline uint8_t -_Py_atomic_or_uint8(uint8_t *obj, uint8_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(char); - return (uint8_t)_InterlockedOr8((volatile char *)obj, (char)value); -} - -static inline uint16_t -_Py_atomic_or_uint16(uint16_t *obj, uint16_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(short); - return (uint16_t)_InterlockedOr16((volatile short *)obj, (short)value); -} - -static inline uint32_t -_Py_atomic_or_uint32(uint32_t *obj, uint32_t value) -{ - _Py_atomic_ASSERT_ARG_TYPE(long); - return (uint32_t)_InterlockedOr((volatile long *)obj, (long)value); -} - -static inline uint64_t -_Py_atomic_or_uint64(uint64_t *obj, uint64_t value) -{ -#if defined(_M_X64) || defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(__int64); - return (uint64_t)_InterlockedOr64((volatile __int64 *)obj, (__int64)value); -#else - uint64_t old_value = _Py_atomic_load_uint64_relaxed(obj); - for (;;) { - uint64_t new_value = old_value | value; - if (_Py_atomic_compare_exchange_uint64(obj, &old_value, new_value)) { - return old_value; - } - } -#endif -} - - -static inline uintptr_t -_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value) -{ -#if SIZEOF_VOID_P == 8 - _Py_atomic_ASSERT_ARG_TYPE(uint64_t); - return (uintptr_t)_Py_atomic_or_uint64((uint64_t *)obj, - (uint64_t)value); -#else - _Py_atomic_ASSERT_ARG_TYPE(uint32_t); - return (uintptr_t)_Py_atomic_or_uint32((uint32_t *)obj, - (uint32_t)value); -#endif -} - - -// --- _Py_atomic_load ------------------------------------------------------- - -static inline uint8_t -_Py_atomic_load_uint8(const uint8_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(volatile uint8_t *)obj; -#elif defined(_M_ARM64) - return (uint8_t)__ldar8((unsigned __int8 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint8" -#endif -} - -static inline uint16_t -_Py_atomic_load_uint16(const uint16_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(volatile uint16_t *)obj; -#elif defined(_M_ARM64) - return (uint16_t)__ldar16((unsigned __int16 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint16" -#endif -} - -static inline uint32_t -_Py_atomic_load_uint32(const uint32_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(volatile uint32_t *)obj; -#elif defined(_M_ARM64) - return (uint32_t)__ldar32((unsigned __int32 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint32" -#endif -} - -static inline uint64_t -_Py_atomic_load_uint64(const uint64_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(volatile uint64_t *)obj; -#elif defined(_M_ARM64) - return (uint64_t)__ldar64((unsigned __int64 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint64" -#endif -} - -static inline int8_t -_Py_atomic_load_int8(const int8_t *obj) -{ - return (int8_t)_Py_atomic_load_uint8((const uint8_t *)obj); -} - -static inline int16_t -_Py_atomic_load_int16(const int16_t *obj) -{ - return (int16_t)_Py_atomic_load_uint16((const uint16_t *)obj); -} - -static inline int32_t -_Py_atomic_load_int32(const int32_t *obj) -{ - return (int32_t)_Py_atomic_load_uint32((const uint32_t *)obj); -} - -static inline int -_Py_atomic_load_int(const int *obj) -{ - _Py_atomic_ASSERT_ARG_TYPE(uint32_t); - return (int)_Py_atomic_load_uint32((uint32_t *)obj); -} - -static inline unsigned int -_Py_atomic_load_uint(const unsigned int *obj) -{ - _Py_atomic_ASSERT_ARG_TYPE(uint32_t); - return (unsigned int)_Py_atomic_load_uint32((uint32_t *)obj); -} - -static inline int64_t -_Py_atomic_load_int64(const int64_t *obj) -{ - return (int64_t)_Py_atomic_load_uint64((const uint64_t *)obj); -} - -static inline void* -_Py_atomic_load_ptr(const void *obj) -{ -#if SIZEOF_VOID_P == 8 - return (void*)_Py_atomic_load_uint64((const uint64_t *)obj); -#else - return (void*)_Py_atomic_load_uint32((const uint32_t *)obj); -#endif -} - -static inline intptr_t -_Py_atomic_load_intptr(const intptr_t *obj) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (intptr_t)_Py_atomic_load_ptr((void*)obj); -} - -static inline uintptr_t -_Py_atomic_load_uintptr(const uintptr_t *obj) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (uintptr_t)_Py_atomic_load_ptr((void*)obj); -} - -static inline Py_ssize_t -_Py_atomic_load_ssize(const Py_ssize_t *obj) -{ - _Py_atomic_ASSERT_ARG_TYPE(void*); - return (Py_ssize_t)_Py_atomic_load_ptr((void*)obj); -} - - -// --- _Py_atomic_load_relaxed ----------------------------------------------- - -static inline int -_Py_atomic_load_int_relaxed(const int *obj) -{ - return *(volatile int *)obj; -} - -static inline char -_Py_atomic_load_char_relaxed(const char *obj) -{ - return *(volatile char *)obj; -} - -static inline unsigned char -_Py_atomic_load_uchar_relaxed(const unsigned char *obj) -{ - return *(volatile unsigned char *)obj; -} - -static inline short -_Py_atomic_load_short_relaxed(const short *obj) -{ - return *(volatile short *)obj; -} - -static inline unsigned short -_Py_atomic_load_ushort_relaxed(const unsigned short *obj) -{ - return *(volatile unsigned short *)obj; -} - -static inline long -_Py_atomic_load_long_relaxed(const long *obj) -{ - return *(volatile long *)obj; -} - -static inline float -_Py_atomic_load_float_relaxed(const float *obj) -{ - return *(volatile float *)obj; -} - -static inline double -_Py_atomic_load_double_relaxed(const double *obj) -{ - return *(volatile double *)obj; -} - -static inline int8_t -_Py_atomic_load_int8_relaxed(const int8_t *obj) -{ - return *(volatile int8_t *)obj; -} - -static inline int16_t -_Py_atomic_load_int16_relaxed(const int16_t *obj) -{ - return *(volatile int16_t *)obj; -} - -static inline int32_t -_Py_atomic_load_int32_relaxed(const int32_t *obj) -{ - return *(volatile int32_t *)obj; -} - -static inline int64_t -_Py_atomic_load_int64_relaxed(const int64_t *obj) -{ - return *(volatile int64_t *)obj; -} - -static inline intptr_t -_Py_atomic_load_intptr_relaxed(const intptr_t *obj) -{ - return *(volatile intptr_t *)obj; -} - -static inline uint8_t -_Py_atomic_load_uint8_relaxed(const uint8_t *obj) -{ - return *(volatile uint8_t *)obj; -} - -static inline uint16_t -_Py_atomic_load_uint16_relaxed(const uint16_t *obj) -{ - return *(volatile uint16_t *)obj; -} - -static inline uint32_t -_Py_atomic_load_uint32_relaxed(const uint32_t *obj) -{ - return *(volatile uint32_t *)obj; -} - -static inline uint64_t -_Py_atomic_load_uint64_relaxed(const uint64_t *obj) -{ - return *(volatile uint64_t *)obj; -} - -static inline uintptr_t -_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj) -{ - return *(volatile uintptr_t *)obj; -} - -static inline unsigned int -_Py_atomic_load_uint_relaxed(const unsigned int *obj) -{ - return *(volatile unsigned int *)obj; -} - -static inline Py_ssize_t -_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj) -{ - return *(volatile Py_ssize_t *)obj; -} - -static inline void* -_Py_atomic_load_ptr_relaxed(const void *obj) -{ - return *(void * volatile *)obj; -} - -static inline unsigned long long -_Py_atomic_load_ullong_relaxed(const unsigned long long *obj) -{ - return *(volatile unsigned long long *)obj; -} - -static inline long long -_Py_atomic_load_llong_relaxed(const long long *obj) -{ - return *(volatile long long *)obj; -} - - -// --- _Py_atomic_store ------------------------------------------------------ - -static inline void -_Py_atomic_store_int(int *obj, int value) -{ - (void)_Py_atomic_exchange_int(obj, value); -} - -static inline void -_Py_atomic_store_int8(int8_t *obj, int8_t value) -{ - (void)_Py_atomic_exchange_int8(obj, value); -} - -static inline void -_Py_atomic_store_int16(int16_t *obj, int16_t value) -{ - (void)_Py_atomic_exchange_int16(obj, value); -} - -static inline void -_Py_atomic_store_int32(int32_t *obj, int32_t value) -{ - (void)_Py_atomic_exchange_int32(obj, value); -} - -static inline void -_Py_atomic_store_int64(int64_t *obj, int64_t value) -{ - (void)_Py_atomic_exchange_int64(obj, value); -} - -static inline void -_Py_atomic_store_intptr(intptr_t *obj, intptr_t value) -{ - (void)_Py_atomic_exchange_intptr(obj, value); -} - -static inline void -_Py_atomic_store_uint8(uint8_t *obj, uint8_t value) -{ - (void)_Py_atomic_exchange_uint8(obj, value); -} - -static inline void -_Py_atomic_store_uint16(uint16_t *obj, uint16_t value) -{ - (void)_Py_atomic_exchange_uint16(obj, value); -} - -static inline void -_Py_atomic_store_uint32(uint32_t *obj, uint32_t value) -{ - (void)_Py_atomic_exchange_uint32(obj, value); -} - -static inline void -_Py_atomic_store_uint64(uint64_t *obj, uint64_t value) -{ - (void)_Py_atomic_exchange_uint64(obj, value); -} - -static inline void -_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value) -{ - (void)_Py_atomic_exchange_uintptr(obj, value); -} - -static inline void -_Py_atomic_store_uint(unsigned int *obj, unsigned int value) -{ - (void)_Py_atomic_exchange_uint(obj, value); -} - -static inline void -_Py_atomic_store_ptr(void *obj, void *value) -{ - (void)_Py_atomic_exchange_ptr(obj, value); -} - -static inline void -_Py_atomic_store_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - (void)_Py_atomic_exchange_ssize(obj, value); -} - - -// --- _Py_atomic_store_relaxed ---------------------------------------------- - -static inline void -_Py_atomic_store_int_relaxed(int *obj, int value) -{ - *(volatile int *)obj = value; -} - -static inline void -_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value) -{ - *(volatile int8_t *)obj = value; -} - -static inline void -_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value) -{ - *(volatile int16_t *)obj = value; -} - -static inline void -_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value) -{ - *(volatile int32_t *)obj = value; -} - -static inline void -_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value) -{ - *(volatile int64_t *)obj = value; -} - -static inline void -_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value) -{ - *(volatile intptr_t *)obj = value; -} - -static inline void -_Py_atomic_store_uint8_relaxed(uint8_t *obj, uint8_t value) -{ - *(volatile uint8_t *)obj = value; -} - -static inline void -_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value) -{ - *(volatile uint16_t *)obj = value; -} - -static inline void -_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value) -{ - *(volatile uint32_t *)obj = value; -} - -static inline void -_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value) -{ - *(volatile uint64_t *)obj = value; -} - -static inline void -_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value) -{ - *(volatile uintptr_t *)obj = value; -} - -static inline void -_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value) -{ - *(volatile unsigned int *)obj = value; -} - -static inline void -_Py_atomic_store_ptr_relaxed(void *obj, void* value) -{ - *(void * volatile *)obj = value; -} - -static inline void -_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value) -{ - *(volatile Py_ssize_t *)obj = value; -} - -static inline void -_Py_atomic_store_ullong_relaxed(unsigned long long *obj, - unsigned long long value) -{ - *(volatile unsigned long long *)obj = value; -} - -static inline void -_Py_atomic_store_char_relaxed(char *obj, char value) -{ - *(volatile char *)obj = value; -} - -static inline void -_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value) -{ - *(volatile unsigned char *)obj = value; -} - -static inline void -_Py_atomic_store_short_relaxed(short *obj, short value) -{ - *(volatile short *)obj = value; -} - -static inline void -_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value) -{ - *(volatile unsigned short *)obj = value; -} - -static inline void -_Py_atomic_store_long_relaxed(long *obj, long value) -{ - *(volatile long *)obj = value; -} - -static inline void -_Py_atomic_store_float_relaxed(float *obj, float value) -{ - *(volatile float *)obj = value; -} - -static inline void -_Py_atomic_store_double_relaxed(double *obj, double value) -{ - *(volatile double *)obj = value; -} - -static inline void -_Py_atomic_store_llong_relaxed(long long *obj, long long value) -{ - *(volatile long long *)obj = value; -} - - -// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------ - -static inline void * -_Py_atomic_load_ptr_acquire(const void *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(void * volatile *)obj; -#elif defined(_M_ARM64) - return (void *)__ldar64((unsigned __int64 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_ptr_acquire" -#endif -} - -static inline uintptr_t -_Py_atomic_load_uintptr_acquire(const uintptr_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(uintptr_t volatile *)obj; -#elif defined(_M_ARM64) - return (uintptr_t)__ldar64((unsigned __int64 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uintptr_acquire" -#endif -} - -static inline void -_Py_atomic_store_ptr_release(void *obj, void *value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(void * volatile *)obj = value; -#elif defined(_M_ARM64) - __stlr64((unsigned __int64 volatile *)obj, (uintptr_t)value); -#else -# error "no implementation of _Py_atomic_store_ptr_release" -#endif -} - -static inline void -_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(uintptr_t volatile *)obj = value; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int64); - __stlr64((unsigned __int64 volatile *)obj, (unsigned __int64)value); -#else -# error "no implementation of _Py_atomic_store_uintptr_release" -#endif -} - -static inline void -_Py_atomic_store_int_release(int *obj, int value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(int volatile *)obj = value; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); - __stlr32((unsigned __int32 volatile *)obj, (unsigned __int32)value); -#else -# error "no implementation of _Py_atomic_store_int_release" -#endif -} - -static inline void -_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(volatile unsigned int *)obj = value; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); - __stlr32((unsigned __int32 volatile *)obj, (unsigned __int32)value); -#else -# error "no implementation of _Py_atomic_store_uint_release" -#endif -} - -static inline void -_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(Py_ssize_t volatile *)obj = value; -#elif defined(_M_ARM64) - __stlr64((unsigned __int64 volatile *)obj, (unsigned __int64)value); -#else -# error "no implementation of _Py_atomic_store_ssize_release" -#endif -} - -static inline int -_Py_atomic_load_int_acquire(const int *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(int volatile *)obj; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); - return (int)__ldar32((unsigned __int32 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_int_acquire" -#endif -} - -static inline void -_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(uint32_t volatile *)obj = value; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int32); - __stlr32((unsigned __int32 volatile *)obj, (unsigned __int32)value); -#else -# error "no implementation of _Py_atomic_store_uint32_release" -#endif -} - -static inline void -_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value) -{ -#if defined(_M_X64) || defined(_M_IX86) - *(uint64_t volatile *)obj = value; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(unsigned __int64); - __stlr64((unsigned __int64 volatile *)obj, (unsigned __int64)value); -#else -# error "no implementation of _Py_atomic_store_uint64_release" -#endif -} - -static inline uint64_t -_Py_atomic_load_uint64_acquire(const uint64_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(uint64_t volatile *)obj; -#elif defined(_M_ARM64) - _Py_atomic_ASSERT_ARG_TYPE(__int64); - return (uint64_t)__ldar64((unsigned __int64 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint64_acquire" -#endif -} - -static inline uint32_t -_Py_atomic_load_uint32_acquire(const uint32_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(uint32_t volatile *)obj; -#elif defined(_M_ARM64) - return (uint32_t)__ldar32((uint32_t volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_uint32_acquire" -#endif -} - -static inline Py_ssize_t -_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj) -{ -#if defined(_M_X64) || defined(_M_IX86) - return *(Py_ssize_t volatile *)obj; -#elif defined(_M_ARM64) - return (Py_ssize_t)__ldar64((unsigned __int64 volatile *)obj); -#else -# error "no implementation of _Py_atomic_load_ssize_acquire" -#endif -} - -// --- _Py_atomic_fence ------------------------------------------------------ - - static inline void -_Py_atomic_fence_seq_cst(void) -{ -#if defined(_M_ARM64) - __dmb(_ARM64_BARRIER_ISH); -#elif defined(_M_X64) - __faststorefence(); -#elif defined(_M_IX86) - _mm_mfence(); -#else -# error "no implementation of _Py_atomic_fence_seq_cst" -#endif -} - - static inline void -_Py_atomic_fence_acquire(void) -{ -#if defined(_M_ARM64) - __dmb(_ARM64_BARRIER_ISHLD); -#elif defined(_M_X64) || defined(_M_IX86) - _ReadBarrier(); -#else -# error "no implementation of _Py_atomic_fence_acquire" -#endif -} - - static inline void -_Py_atomic_fence_release(void) -{ -#if defined(_M_ARM64) - __dmb(_ARM64_BARRIER_ISH); -#elif defined(_M_X64) || defined(_M_IX86) - _ReadWriteBarrier(); -#else -# error "no implementation of _Py_atomic_fence_release" -#endif -} - -#undef _Py_atomic_ASSERT_ARG_TYPE diff --git a/Python314_4_x86_Template/include/cpython/pyatomic_std.h b/Python314_4_x86_Template/include/cpython/pyatomic_std.h deleted file mode 100644 index 1a2ccd0cc..000000000 --- a/Python314_4_x86_Template/include/cpython/pyatomic_std.h +++ /dev/null @@ -1,1112 +0,0 @@ -// This is the implementation of Python atomic operations using C++11 or C11 -// atomics. Note that the pyatomic_gcc.h implementation is preferred for GCC -// compatible compilers, even if they support C++11 atomics. - -#ifndef Py_ATOMIC_STD_H -# error "this header file must not be included directly" -#endif - -#ifdef __cplusplus -extern "C++" { -# include <atomic> -} -# define _Py_USING_STD using namespace std -# define _Atomic(tp) atomic<tp> -#else -# define _Py_USING_STD -# include <stdatomic.h> -#endif - - -// --- _Py_atomic_add -------------------------------------------------------- - -static inline int -_Py_atomic_add_int(int *obj, int value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(int)*)obj, value); -} - -static inline int8_t -_Py_atomic_add_int8(int8_t *obj, int8_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(int8_t)*)obj, value); -} - -static inline int16_t -_Py_atomic_add_int16(int16_t *obj, int16_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(int16_t)*)obj, value); -} - -static inline int32_t -_Py_atomic_add_int32(int32_t *obj, int32_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(int32_t)*)obj, value); -} - -static inline int64_t -_Py_atomic_add_int64(int64_t *obj, int64_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(int64_t)*)obj, value); -} - -static inline intptr_t -_Py_atomic_add_intptr(intptr_t *obj, intptr_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(intptr_t)*)obj, value); -} - -static inline unsigned int -_Py_atomic_add_uint(unsigned int *obj, unsigned int value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(unsigned int)*)obj, value); -} - -static inline uint8_t -_Py_atomic_add_uint8(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(uint8_t)*)obj, value); -} - -static inline uint16_t -_Py_atomic_add_uint16(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(uint16_t)*)obj, value); -} - -static inline uint32_t -_Py_atomic_add_uint32(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(uint32_t)*)obj, value); -} - -static inline uint64_t -_Py_atomic_add_uint64(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(uint64_t)*)obj, value); -} - -static inline uintptr_t -_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(uintptr_t)*)obj, value); -} - -static inline Py_ssize_t -_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_USING_STD; - return atomic_fetch_add((_Atomic(Py_ssize_t)*)obj, value); -} - - -// --- _Py_atomic_compare_exchange ------------------------------------------- - -static inline int -_Py_atomic_compare_exchange_int(int *obj, int *expected, int desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(int)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(int8_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(int16_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(int32_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(int64_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(intptr_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(unsigned int)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(uint8_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(uint16_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(uint32_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(uint64_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(uintptr_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(Py_ssize_t)*)obj, - expected, desired); -} - -static inline int -_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *desired) -{ - _Py_USING_STD; - return atomic_compare_exchange_strong((_Atomic(void *)*)obj, - (void **)expected, desired); -} - - -// --- _Py_atomic_exchange --------------------------------------------------- - -static inline int -_Py_atomic_exchange_int(int *obj, int value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(int)*)obj, value); -} - -static inline int8_t -_Py_atomic_exchange_int8(int8_t *obj, int8_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(int8_t)*)obj, value); -} - -static inline int16_t -_Py_atomic_exchange_int16(int16_t *obj, int16_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(int16_t)*)obj, value); -} - -static inline int32_t -_Py_atomic_exchange_int32(int32_t *obj, int32_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(int32_t)*)obj, value); -} - -static inline int64_t -_Py_atomic_exchange_int64(int64_t *obj, int64_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(int64_t)*)obj, value); -} - -static inline intptr_t -_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(intptr_t)*)obj, value); -} - -static inline unsigned int -_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(unsigned int)*)obj, value); -} - -static inline uint8_t -_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(uint8_t)*)obj, value); -} - -static inline uint16_t -_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(uint16_t)*)obj, value); -} - -static inline uint32_t -_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(uint32_t)*)obj, value); -} - -static inline uint64_t -_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(uint64_t)*)obj, value); -} - -static inline uintptr_t -_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(uintptr_t)*)obj, value); -} - -static inline Py_ssize_t -_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(Py_ssize_t)*)obj, value); -} - -static inline void* -_Py_atomic_exchange_ptr(void *obj, void *value) -{ - _Py_USING_STD; - return atomic_exchange((_Atomic(void *)*)obj, value); -} - - -// --- _Py_atomic_and -------------------------------------------------------- - -static inline uint8_t -_Py_atomic_and_uint8(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - return atomic_fetch_and((_Atomic(uint8_t)*)obj, value); -} - -static inline uint16_t -_Py_atomic_and_uint16(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - return atomic_fetch_and((_Atomic(uint16_t)*)obj, value); -} - -static inline uint32_t -_Py_atomic_and_uint32(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - return atomic_fetch_and((_Atomic(uint32_t)*)obj, value); -} - -static inline uint64_t -_Py_atomic_and_uint64(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - return atomic_fetch_and((_Atomic(uint64_t)*)obj, value); -} - -static inline uintptr_t -_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - return atomic_fetch_and((_Atomic(uintptr_t)*)obj, value); -} - - -// --- _Py_atomic_or --------------------------------------------------------- - -static inline uint8_t -_Py_atomic_or_uint8(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - return atomic_fetch_or((_Atomic(uint8_t)*)obj, value); -} - -static inline uint16_t -_Py_atomic_or_uint16(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - return atomic_fetch_or((_Atomic(uint16_t)*)obj, value); -} - -static inline uint32_t -_Py_atomic_or_uint32(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - return atomic_fetch_or((_Atomic(uint32_t)*)obj, value); -} - -static inline uint64_t -_Py_atomic_or_uint64(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - return atomic_fetch_or((_Atomic(uint64_t)*)obj, value); -} - -static inline uintptr_t -_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - return atomic_fetch_or((_Atomic(uintptr_t)*)obj, value); -} - - -// --- _Py_atomic_load ------------------------------------------------------- - -static inline int -_Py_atomic_load_int(const int *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(int)*)obj); -} - -static inline int8_t -_Py_atomic_load_int8(const int8_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(int8_t)*)obj); -} - -static inline int16_t -_Py_atomic_load_int16(const int16_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(int16_t)*)obj); -} - -static inline int32_t -_Py_atomic_load_int32(const int32_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(int32_t)*)obj); -} - -static inline int64_t -_Py_atomic_load_int64(const int64_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(int64_t)*)obj); -} - -static inline intptr_t -_Py_atomic_load_intptr(const intptr_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(intptr_t)*)obj); -} - -static inline uint8_t -_Py_atomic_load_uint8(const uint8_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(uint8_t)*)obj); -} - -static inline uint16_t -_Py_atomic_load_uint16(const uint16_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(uint16_t)*)obj); -} - -static inline uint32_t -_Py_atomic_load_uint32(const uint32_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(uint32_t)*)obj); -} - -static inline uint64_t -_Py_atomic_load_uint64(const uint64_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(uint64_t)*)obj); -} - -static inline uintptr_t -_Py_atomic_load_uintptr(const uintptr_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(uintptr_t)*)obj); -} - -static inline unsigned int -_Py_atomic_load_uint(const unsigned int *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(unsigned int)*)obj); -} - -static inline Py_ssize_t -_Py_atomic_load_ssize(const Py_ssize_t *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(Py_ssize_t)*)obj); -} - -static inline void* -_Py_atomic_load_ptr(const void *obj) -{ - _Py_USING_STD; - return atomic_load((const _Atomic(void*)*)obj); -} - - -// --- _Py_atomic_load_relaxed ----------------------------------------------- - -static inline int -_Py_atomic_load_int_relaxed(const int *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int)*)obj, - memory_order_relaxed); -} - -static inline char -_Py_atomic_load_char_relaxed(const char *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(char)*)obj, - memory_order_relaxed); -} - -static inline unsigned char -_Py_atomic_load_uchar_relaxed(const unsigned char *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(unsigned char)*)obj, - memory_order_relaxed); -} - -static inline short -_Py_atomic_load_short_relaxed(const short *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(short)*)obj, - memory_order_relaxed); -} - -static inline unsigned short -_Py_atomic_load_ushort_relaxed(const unsigned short *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(unsigned short)*)obj, - memory_order_relaxed); -} - -static inline long -_Py_atomic_load_long_relaxed(const long *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(long)*)obj, - memory_order_relaxed); -} - -static inline float -_Py_atomic_load_float_relaxed(const float *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(float)*)obj, - memory_order_relaxed); -} - -static inline double -_Py_atomic_load_double_relaxed(const double *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(double)*)obj, - memory_order_relaxed); -} - -static inline int8_t -_Py_atomic_load_int8_relaxed(const int8_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int8_t)*)obj, - memory_order_relaxed); -} - -static inline int16_t -_Py_atomic_load_int16_relaxed(const int16_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int16_t)*)obj, - memory_order_relaxed); -} - -static inline int32_t -_Py_atomic_load_int32_relaxed(const int32_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int32_t)*)obj, - memory_order_relaxed); -} - -static inline int64_t -_Py_atomic_load_int64_relaxed(const int64_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int64_t)*)obj, - memory_order_relaxed); -} - -static inline intptr_t -_Py_atomic_load_intptr_relaxed(const intptr_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(intptr_t)*)obj, - memory_order_relaxed); -} - -static inline uint8_t -_Py_atomic_load_uint8_relaxed(const uint8_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint8_t)*)obj, - memory_order_relaxed); -} - -static inline uint16_t -_Py_atomic_load_uint16_relaxed(const uint16_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint16_t)*)obj, - memory_order_relaxed); -} - -static inline uint32_t -_Py_atomic_load_uint32_relaxed(const uint32_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint32_t)*)obj, - memory_order_relaxed); -} - -static inline uint64_t -_Py_atomic_load_uint64_relaxed(const uint64_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint64_t)*)obj, - memory_order_relaxed); -} - -static inline uintptr_t -_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uintptr_t)*)obj, - memory_order_relaxed); -} - -static inline unsigned int -_Py_atomic_load_uint_relaxed(const unsigned int *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(unsigned int)*)obj, - memory_order_relaxed); -} - -static inline Py_ssize_t -_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(Py_ssize_t)*)obj, - memory_order_relaxed); -} - -static inline void* -_Py_atomic_load_ptr_relaxed(const void *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(void*)*)obj, - memory_order_relaxed); -} - -static inline unsigned long long -_Py_atomic_load_ullong_relaxed(const unsigned long long *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(unsigned long long)*)obj, - memory_order_relaxed); -} - -static inline long long -_Py_atomic_load_llong_relaxed(const long long *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(long long)*)obj, - memory_order_relaxed); -} - - -// --- _Py_atomic_store ------------------------------------------------------ - -static inline void -_Py_atomic_store_int(int *obj, int value) -{ - _Py_USING_STD; - atomic_store((_Atomic(int)*)obj, value); -} - -static inline void -_Py_atomic_store_int8(int8_t *obj, int8_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(int8_t)*)obj, value); -} - -static inline void -_Py_atomic_store_int16(int16_t *obj, int16_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(int16_t)*)obj, value); -} - -static inline void -_Py_atomic_store_int32(int32_t *obj, int32_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(int32_t)*)obj, value); -} - -static inline void -_Py_atomic_store_int64(int64_t *obj, int64_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(int64_t)*)obj, value); -} - -static inline void -_Py_atomic_store_intptr(intptr_t *obj, intptr_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(intptr_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uint8(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(uint8_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uint16(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(uint16_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uint32(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(uint32_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uint64(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(uint64_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(uintptr_t)*)obj, value); -} - -static inline void -_Py_atomic_store_uint(unsigned int *obj, unsigned int value) -{ - _Py_USING_STD; - atomic_store((_Atomic(unsigned int)*)obj, value); -} - -static inline void -_Py_atomic_store_ptr(void *obj, void *value) -{ - _Py_USING_STD; - atomic_store((_Atomic(void*)*)obj, value); -} - -static inline void -_Py_atomic_store_ssize(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_USING_STD; - atomic_store((_Atomic(Py_ssize_t)*)obj, value); -} - - -// --- _Py_atomic_store_relaxed ---------------------------------------------- - -static inline void -_Py_atomic_store_int_relaxed(int *obj, int value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int8_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int16_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int32_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int64_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(intptr_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uint8_relaxed(uint8_t *obj, uint8_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint8_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint16_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint32_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint64_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uintptr_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(unsigned int)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_ptr_relaxed(void *obj, void *value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(void*)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(Py_ssize_t)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_ullong_relaxed(unsigned long long *obj, - unsigned long long value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(unsigned long long)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_char_relaxed(char *obj, char value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(char)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(unsigned char)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_short_relaxed(short *obj, short value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(short)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(unsigned short)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_long_relaxed(long *obj, long value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(long)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_float_relaxed(float *obj, float value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(float)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_double_relaxed(double *obj, double value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(double)*)obj, value, - memory_order_relaxed); -} - -static inline void -_Py_atomic_store_llong_relaxed(long long *obj, long long value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(long long)*)obj, value, - memory_order_relaxed); -} - - -// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------ - -static inline void * -_Py_atomic_load_ptr_acquire(const void *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(void*)*)obj, - memory_order_acquire); -} - -static inline uintptr_t -_Py_atomic_load_uintptr_acquire(const uintptr_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uintptr_t)*)obj, - memory_order_acquire); -} - -static inline void -_Py_atomic_store_ptr_release(void *obj, void *value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(void*)*)obj, value, - memory_order_release); -} - -static inline void -_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uintptr_t)*)obj, value, - memory_order_release); -} - -static inline void -_Py_atomic_store_int_release(int *obj, int value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(int)*)obj, value, - memory_order_release); -} - -static inline void -_Py_atomic_store_uint_release(unsigned int *obj, unsigned int value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(unsigned int)*)obj, value, - memory_order_release); -} - -static inline void -_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(Py_ssize_t)*)obj, value, - memory_order_release); -} - -static inline int -_Py_atomic_load_int_acquire(const int *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(int)*)obj, - memory_order_acquire); -} - -static inline void -_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint32_t)*)obj, value, - memory_order_release); -} - -static inline void -_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value) -{ - _Py_USING_STD; - atomic_store_explicit((_Atomic(uint64_t)*)obj, value, - memory_order_release); -} - -static inline uint64_t -_Py_atomic_load_uint64_acquire(const uint64_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint64_t)*)obj, - memory_order_acquire); -} - -static inline uint32_t -_Py_atomic_load_uint32_acquire(const uint32_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(uint32_t)*)obj, - memory_order_acquire); -} - -static inline Py_ssize_t -_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj) -{ - _Py_USING_STD; - return atomic_load_explicit((const _Atomic(Py_ssize_t)*)obj, - memory_order_acquire); -} - - -// --- _Py_atomic_fence ------------------------------------------------------ - - static inline void -_Py_atomic_fence_seq_cst(void) -{ - _Py_USING_STD; - atomic_thread_fence(memory_order_seq_cst); -} - - static inline void -_Py_atomic_fence_acquire(void) -{ - _Py_USING_STD; - atomic_thread_fence(memory_order_acquire); -} - - static inline void -_Py_atomic_fence_release(void) -{ - _Py_USING_STD; - atomic_thread_fence(memory_order_release); -} diff --git a/Python314_4_x86_Template/include/cpython/pyctype.h b/Python314_4_x86_Template/include/cpython/pyctype.h deleted file mode 100644 index 729d93275..000000000 --- a/Python314_4_x86_Template/include/cpython/pyctype.h +++ /dev/null @@ -1,39 +0,0 @@ -#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 -#define PY_CTF_ALPHA (PY_CTF_LOWER|PY_CTF_UPPER) -#define PY_CTF_DIGIT 0x04 -#define PY_CTF_ALNUM (PY_CTF_ALPHA|PY_CTF_DIGIT) -#define PY_CTF_SPACE 0x08 -#define PY_CTF_XDIGIT 0x10 - -PyAPI_DATA(const unsigned int) _Py_ctype_table[256]; - -/* Unlike their C counterparts, the following macros are not meant to - * handle an int with any of the values [EOF, 0-UCHAR_MAX]. The argument - * must be a signed/unsigned char. */ -#define Py_ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_LOWER) -#define Py_ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_UPPER) -#define Py_ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA) -#define Py_ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT) -#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT) -#define Py_ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM) -#define Py_ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE) - -PyAPI_DATA(const unsigned char) _Py_ctype_tolower[256]; -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/Python314_4_x86_Template/include/cpython/pydebug.h b/Python314_4_x86_Template/include/cpython/pydebug.h deleted file mode 100644 index f6ebd99ed..000000000 --- a/Python314_4_x86_Template/include/cpython/pydebug.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef Py_PYDEBUG_H -#define Py_PYDEBUG_H -#ifdef __cplusplus -extern "C" { -#endif - -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_DebugFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_VerboseFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_QuietFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_InteractiveFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_InspectFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_OptimizeFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_NoSiteFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_BytesWarningFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_FrozenFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_IgnoreEnvironmentFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_DontWriteBytecodeFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_NoUserSiteDirectory; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UnbufferedStdioFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HashRandomizationFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_IsolatedFlag; - -#ifdef MS_WINDOWS -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_LegacyWindowsFSEncodingFlag; -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_LegacyWindowsStdioFlag; -#endif - -/* this is a wrapper around getenv() that pays attention to - Py_IgnoreEnvironmentFlag. It should be used for getting variables like - PYTHONPATH and PYTHONHOME from the environment */ -PyAPI_FUNC(char*) Py_GETENV(const char *name); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYDEBUG_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/pyerrors.h b/Python314_4_x86_Template/include/cpython/pyerrors.h deleted file mode 100644 index be2e3b641..000000000 --- a/Python314_4_x86_Template/include/cpython/pyerrors.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef Py_CPYTHON_ERRORS_H -# error "this header file must not be included directly" -#endif - -/* Error objects */ - -/* PyException_HEAD defines the initial segment of every exception class. */ -#define PyException_HEAD PyObject_HEAD PyObject *dict;\ - PyObject *args; PyObject *notes; PyObject *traceback;\ - PyObject *context; PyObject *cause;\ - char suppress_context; - -typedef struct { - PyException_HEAD -} PyBaseExceptionObject; - -typedef struct { - PyException_HEAD - PyObject *msg; - PyObject *excs; - PyObject *excs_str; -} PyBaseExceptionGroupObject; - -typedef struct { - PyException_HEAD - PyObject *msg; - PyObject *filename; - PyObject *lineno; - PyObject *offset; - PyObject *end_lineno; - PyObject *end_offset; - PyObject *text; - PyObject *print_file_and_line; - PyObject *metadata; -} PySyntaxErrorObject; - -typedef struct { - PyException_HEAD - PyObject *msg; - PyObject *name; - PyObject *path; - PyObject *name_from; -} PyImportErrorObject; - -typedef struct { - PyException_HEAD - PyObject *encoding; - PyObject *object; - Py_ssize_t start; - Py_ssize_t end; - PyObject *reason; -} PyUnicodeErrorObject; - -typedef struct { - PyException_HEAD - PyObject *code; -} PySystemExitObject; - -typedef struct { - PyException_HEAD - PyObject *myerrno; - PyObject *strerror; - PyObject *filename; - PyObject *filename2; -#ifdef MS_WINDOWS - PyObject *winerror; -#endif - Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */ -} PyOSErrorObject; - -typedef struct { - PyException_HEAD - PyObject *value; -} PyStopIterationObject; - -typedef struct { - PyException_HEAD - PyObject *name; -} PyNameErrorObject; - -typedef struct { - PyException_HEAD - PyObject *obj; - PyObject *name; -} PyAttributeErrorObject; - -/* Compatibility typedefs */ -typedef PyOSErrorObject PyEnvironmentErrorObject; -#ifdef MS_WINDOWS -typedef PyOSErrorObject PyWindowsErrorObject; -#endif - -/* Context manipulation (PEP 3134) */ - -PyAPI_FUNC(void) _PyErr_ChainExceptions1(PyObject *); - -/* In exceptions.c */ - -PyAPI_FUNC(PyObject*) PyUnstable_Exc_PrepReraiseStar( - PyObject *orig, - PyObject *excs); - -/* In signalmodule.c */ - -PyAPI_FUNC(int) PySignal_SetWakeupFd(int fd); - -/* Support for adding program text to SyntaxErrors */ - -PyAPI_FUNC(void) PyErr_SyntaxLocationObject( - PyObject *filename, - int lineno, - int col_offset); - -PyAPI_FUNC(void) PyErr_RangedSyntaxLocationObject( - PyObject *filename, - int lineno, - int col_offset, - int end_lineno, - int end_col_offset); - -PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( - PyObject *filename, - int lineno); - -PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( - const char *func, - const char *message); - -PyAPI_FUNC(void) PyErr_FormatUnraisable(const char *, ...); - -PyAPI_DATA(PyObject *) PyExc_PythonFinalizationError; - -#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message)) diff --git a/Python314_4_x86_Template/include/cpython/pyfpe.h b/Python314_4_x86_Template/include/cpython/pyfpe.h deleted file mode 100644 index cc2def63a..000000000 --- a/Python314_4_x86_Template/include/cpython/pyfpe.h +++ /dev/null @@ -1,15 +0,0 @@ -#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, - * to avoid breaking API users. - */ - -#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/Python314_4_x86_Template/include/cpython/pyframe.h b/Python314_4_x86_Template/include/cpython/pyframe.h deleted file mode 100644 index 515297639..000000000 --- a/Python314_4_x86_Template/include/cpython/pyframe.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef Py_CPYTHON_PYFRAME_H -# error "this header file must not be included directly" -#endif - -PyAPI_DATA(PyTypeObject) PyFrame_Type; -PyAPI_DATA(PyTypeObject) PyFrameLocalsProxy_Type; - -#define PyFrame_Check(op) Py_IS_TYPE((op), &PyFrame_Type) -#define PyFrameLocalsProxy_Check(op) Py_IS_TYPE((op), &PyFrameLocalsProxy_Type) - -PyAPI_FUNC(PyFrameObject *) PyFrame_GetBack(PyFrameObject *frame); -PyAPI_FUNC(PyObject *) PyFrame_GetLocals(PyFrameObject *frame); - -PyAPI_FUNC(PyObject *) PyFrame_GetGlobals(PyFrameObject *frame); -PyAPI_FUNC(PyObject *) PyFrame_GetBuiltins(PyFrameObject *frame); - -PyAPI_FUNC(PyObject *) PyFrame_GetGenerator(PyFrameObject *frame); -PyAPI_FUNC(int) PyFrame_GetLasti(PyFrameObject *frame); -PyAPI_FUNC(PyObject*) PyFrame_GetVar(PyFrameObject *frame, PyObject *name); -PyAPI_FUNC(PyObject*) PyFrame_GetVarString(PyFrameObject *frame, const char *name); - -/* The following functions are for use by debuggers and other tools - * implementing custom frame evaluators with PEP 523. */ - -struct _PyInterpreterFrame; - -/* Returns the code object of the frame (strong reference). - * Does not raise an exception. */ -PyAPI_FUNC(PyObject *) PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame); - -/* Returns a byte offset into the last executed instruction. - * Does not raise an exception. */ -PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame); - -/* Returns the currently executing line number, or -1 if there is no line number. - * Does not raise an exception. */ -PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame); - -#define PyUnstable_EXECUTABLE_KIND_SKIP 0 -#define PyUnstable_EXECUTABLE_KIND_PY_FUNCTION 1 -#define PyUnstable_EXECUTABLE_KIND_BUILTIN_FUNCTION 3 -#define PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR 4 -#define PyUnstable_EXECUTABLE_KINDS 5 - -PyAPI_DATA(const PyTypeObject *) const PyUnstable_ExecutableKinds[PyUnstable_EXECUTABLE_KINDS+1]; diff --git a/Python314_4_x86_Template/include/cpython/pyhash.h b/Python314_4_x86_Template/include/cpython/pyhash.h deleted file mode 100644 index a33ba10b8..000000000 --- a/Python314_4_x86_Template/include/cpython/pyhash.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef Py_CPYTHON_HASH_H -# error "this header file must not be included directly" -#endif - -/* Prime multiplier used in string and various other hashes. */ -#define PyHASH_MULTIPLIER 1000003UL /* 0xf4243 */ - -/* Parameters used for the numeric hash implementation. See notes for - _Py_HashDouble in Python/pyhash.c. Numeric hashes are based on - reduction modulo the prime 2**_PyHASH_BITS - 1. */ - -#if SIZEOF_VOID_P >= 8 -# define PyHASH_BITS 61 -#else -# define PyHASH_BITS 31 -#endif - -#define PyHASH_MODULUS (((size_t)1 << _PyHASH_BITS) - 1) -#define PyHASH_INF 314159 -#define PyHASH_IMAG PyHASH_MULTIPLIER - -/* Aliases kept for backward compatibility with Python 3.12 */ -#define _PyHASH_MULTIPLIER PyHASH_MULTIPLIER -#define _PyHASH_BITS PyHASH_BITS -#define _PyHASH_MODULUS PyHASH_MODULUS -#define _PyHASH_INF PyHASH_INF -#define _PyHASH_IMAG PyHASH_IMAG - -/* Helpers for hash functions */ -PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double); - - -/* hash function definition */ -typedef struct { - Py_hash_t (*const hash)(const void *, Py_ssize_t); - const char *name; - const int hash_bits; - const int seed_bits; -} PyHash_FuncDef; - -PyAPI_FUNC(PyHash_FuncDef*) PyHash_GetFuncDef(void); - -PyAPI_FUNC(Py_hash_t) Py_HashPointer(const void *ptr); - -// Deprecated alias kept for backward compatibility -Py_DEPRECATED(3.14) static inline Py_hash_t -_Py_HashPointer(const void *ptr) -{ - return Py_HashPointer(ptr); -} - -PyAPI_FUNC(Py_hash_t) PyObject_GenericHash(PyObject *); - -PyAPI_FUNC(Py_hash_t) Py_HashBuffer(const void *ptr, Py_ssize_t len); diff --git a/Python314_4_x86_Template/include/cpython/pylifecycle.h b/Python314_4_x86_Template/include/cpython/pylifecycle.h deleted file mode 100644 index 86ce6e6f7..000000000 --- a/Python314_4_x86_Template/include/cpython/pylifecycle.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef Py_CPYTHON_PYLIFECYCLE_H -# error "this header file must not be included directly" -#endif - -/* Py_FrozenMain is kept out of the Limited API until documented and present - in all builds of Python */ -PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv); - -/* PEP 432 Multi-phase initialization API (Private while provisional!) */ - -PyAPI_FUNC(PyStatus) Py_PreInitialize( - const PyPreConfig *src_config); -PyAPI_FUNC(PyStatus) Py_PreInitializeFromBytesArgs( - const PyPreConfig *src_config, - Py_ssize_t argc, - char **argv); -PyAPI_FUNC(PyStatus) Py_PreInitializeFromArgs( - const PyPreConfig *src_config, - Py_ssize_t argc, - wchar_t **argv); - - -/* Initialization and finalization */ - -PyAPI_FUNC(PyStatus) Py_InitializeFromConfig( - const PyConfig *config); - -PyAPI_FUNC(int) Py_RunMain(void); - - -PyAPI_FUNC(void) _Py_NO_RETURN Py_ExitStatusException(PyStatus err); - -PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); - -/* --- PyInterpreterConfig ------------------------------------ */ - -#define PyInterpreterConfig_DEFAULT_GIL (0) -#define PyInterpreterConfig_SHARED_GIL (1) -#define PyInterpreterConfig_OWN_GIL (2) - -typedef struct { - // XXX "allow_object_sharing"? "own_objects"? - int use_main_obmalloc; - int allow_fork; - int allow_exec; - int allow_threads; - int allow_daemon_threads; - int check_multi_interp_extensions; - int gil; -} PyInterpreterConfig; - -#define _PyInterpreterConfig_INIT \ - { \ - .use_main_obmalloc = 0, \ - .allow_fork = 0, \ - .allow_exec = 0, \ - .allow_threads = 1, \ - .allow_daemon_threads = 0, \ - .check_multi_interp_extensions = 1, \ - .gil = PyInterpreterConfig_OWN_GIL, \ - } - -// gh-117649: The free-threaded build does not currently support single-phase -// init extensions in subinterpreters. For now, we ensure that -// `check_multi_interp_extensions` is always `1`, even in the legacy config. -#ifdef Py_GIL_DISABLED -# define _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS 1 -#else -# define _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS 0 -#endif - -#define _PyInterpreterConfig_LEGACY_INIT \ - { \ - .use_main_obmalloc = 1, \ - .allow_fork = 1, \ - .allow_exec = 1, \ - .allow_threads = 1, \ - .allow_daemon_threads = 1, \ - .check_multi_interp_extensions = _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS, \ - .gil = PyInterpreterConfig_SHARED_GIL, \ - } - -PyAPI_FUNC(PyStatus) Py_NewInterpreterFromConfig( - PyThreadState **tstate_p, - const PyInterpreterConfig *config); - -typedef void (*atexit_datacallbackfunc)(void *); -PyAPI_FUNC(int) PyUnstable_AtExit( - PyInterpreterState *, atexit_datacallbackfunc, void *); diff --git a/Python314_4_x86_Template/include/cpython/pymem.h b/Python314_4_x86_Template/include/cpython/pymem.h deleted file mode 100644 index 76b3221f7..000000000 --- a/Python314_4_x86_Template/include/cpython/pymem.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef Py_CPYTHON_PYMEM_H -# error "this header file must not be included directly" -#endif - -typedef enum { - /* PyMem_RawMalloc(), PyMem_RawRealloc() and PyMem_RawFree() */ - PYMEM_DOMAIN_RAW, - - /* PyMem_Malloc(), PyMem_Realloc() and PyMem_Free() */ - PYMEM_DOMAIN_MEM, - - /* PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() */ - PYMEM_DOMAIN_OBJ -} PyMemAllocatorDomain; - -typedef enum { - PYMEM_ALLOCATOR_NOT_SET = 0, - PYMEM_ALLOCATOR_DEFAULT = 1, - PYMEM_ALLOCATOR_DEBUG = 2, - PYMEM_ALLOCATOR_MALLOC = 3, - PYMEM_ALLOCATOR_MALLOC_DEBUG = 4, -#ifdef WITH_PYMALLOC - PYMEM_ALLOCATOR_PYMALLOC = 5, - PYMEM_ALLOCATOR_PYMALLOC_DEBUG = 6, -#endif -#ifdef WITH_MIMALLOC - PYMEM_ALLOCATOR_MIMALLOC = 7, - PYMEM_ALLOCATOR_MIMALLOC_DEBUG = 8, -#endif -} PyMemAllocatorName; - - -typedef struct { - /* user context passed as the first argument to the 4 functions */ - void *ctx; - - /* allocate a memory block */ - void* (*malloc) (void *ctx, size_t size); - - /* allocate a memory block initialized by zeros */ - void* (*calloc) (void *ctx, size_t nelem, size_t elsize); - - /* allocate or resize a memory block */ - void* (*realloc) (void *ctx, void *ptr, size_t new_size); - - /* release a memory block */ - void (*free) (void *ctx, void *ptr); -} PyMemAllocatorEx; - -/* Get the memory block allocator of the specified domain. */ -PyAPI_FUNC(void) PyMem_GetAllocator(PyMemAllocatorDomain domain, - PyMemAllocatorEx *allocator); - -/* Set the memory block allocator of the specified domain. - - The new allocator must return a distinct non-NULL pointer when requesting - zero bytes. - - For the PYMEM_DOMAIN_RAW domain, the allocator must be thread-safe: the GIL - is not held when the allocator is called. - - If the new allocator is not a hook (don't call the previous allocator), the - PyMem_SetupDebugHooks() function must be called to reinstall the debug hooks - on top on the new allocator. */ -PyAPI_FUNC(void) PyMem_SetAllocator(PyMemAllocatorDomain domain, - PyMemAllocatorEx *allocator); - -/* Setup hooks to detect bugs in the following Python memory allocator - functions: - - - PyMem_RawMalloc(), PyMem_RawRealloc(), PyMem_RawFree() - - PyMem_Malloc(), PyMem_Realloc(), PyMem_Free() - - PyObject_Malloc(), PyObject_Realloc() and PyObject_Free() - - Newly allocated memory is filled with the byte 0xCB, freed memory is filled - with the byte 0xDB. Additional checks: - - - detect API violations, ex: PyObject_Free() called on a buffer allocated - by PyMem_Malloc() - - detect write before the start of the buffer (buffer underflow) - - detect write after the end of the buffer (buffer overflow) - - The function does nothing if Python is not compiled is debug mode. */ -PyAPI_FUNC(void) PyMem_SetupDebugHooks(void); diff --git a/Python314_4_x86_Template/include/cpython/pystate.h b/Python314_4_x86_Template/include/cpython/pystate.h deleted file mode 100644 index c1b97d428..000000000 --- a/Python314_4_x86_Template/include/cpython/pystate.h +++ /dev/null @@ -1,277 +0,0 @@ -#ifndef Py_CPYTHON_PYSTATE_H -# error "this header file must not be included directly" -#endif - - -/* private interpreter helpers */ - -PyAPI_FUNC(int) _PyInterpreterState_RequiresIDRef(PyInterpreterState *); -PyAPI_FUNC(void) _PyInterpreterState_RequireIDRef(PyInterpreterState *, int); - -/* State unique per thread */ - -/* Py_tracefunc return -1 when raising an exception, or 0 for success. */ -typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *); - -/* The following values are used for 'what' for tracefunc functions - * - * To add a new kind of trace event, also update "trace_init" in - * Python/sysmodule.c to define the Python level event name - */ -#define PyTrace_CALL 0 -#define PyTrace_EXCEPTION 1 -#define PyTrace_LINE 2 -#define PyTrace_RETURN 3 -#define PyTrace_C_CALL 4 -#define PyTrace_C_EXCEPTION 5 -#define PyTrace_C_RETURN 6 -#define PyTrace_OPCODE 7 - -/* Remote debugger support */ -#define _Py_MAX_SCRIPT_PATH_SIZE 512 -typedef struct { - int32_t debugger_pending_call; - char debugger_script_path[_Py_MAX_SCRIPT_PATH_SIZE]; -} _PyRemoteDebuggerSupport; - -typedef struct _err_stackitem { - /* This struct represents a single execution context where we might - * be currently handling an exception. It is a per-coroutine state - * (coroutine in the computer science sense, including the thread - * and generators). - * - * This is used as an entry on the exception stack, where each - * entry indicates if it is currently handling an exception. - * This ensures that the exception state is not impacted - * by "yields" from an except handler. The thread - * always has an entry (the bottom-most one). - */ - - /* The exception currently being handled in this context, if any. */ - PyObject *exc_value; - - struct _err_stackitem *previous_item; - -} _PyErr_StackItem; - -typedef struct _stack_chunk { - struct _stack_chunk *previous; - size_t size; - size_t top; - PyObject * data[1]; /* Variable sized */ -} _PyStackChunk; - -/* Minimum size of data stack chunk */ -#define _PY_DATA_STACK_CHUNK_SIZE (16*1024) -struct _ts { - /* See Python/ceval.c for comments explaining most fields */ - - PyThreadState *prev; - PyThreadState *next; - PyInterpreterState *interp; - - /* The global instrumentation version in high bits, plus flags indicating - when to break out of the interpreter loop in lower bits. See details in - pycore_ceval.h. */ - uintptr_t eval_breaker; - - struct { - /* Has been initialized to a safe state. - - In order to be effective, this must be set to 0 during or right - after allocation. */ - unsigned int initialized:1; - - /* Has been bound to an OS thread. */ - unsigned int bound:1; - /* Has been unbound from its OS thread. */ - unsigned int unbound:1; - /* Has been bound aa current for the GILState API. */ - unsigned int bound_gilstate:1; - /* Currently in use (maybe holds the GIL). */ - unsigned int active:1; - - /* various stages of finalization */ - unsigned int finalizing:1; - unsigned int cleared:1; - unsigned int finalized:1; - - /* padding to align to 4 bytes */ - unsigned int :24; - } _status; -#ifdef Py_BUILD_CORE -# define _PyThreadState_WHENCE_NOTSET -1 -# define _PyThreadState_WHENCE_UNKNOWN 0 -# define _PyThreadState_WHENCE_INIT 1 -# define _PyThreadState_WHENCE_FINI 2 -# define _PyThreadState_WHENCE_THREADING 3 -# define _PyThreadState_WHENCE_GILSTATE 4 -# define _PyThreadState_WHENCE_EXEC 5 -#endif - - /* Currently holds the GIL. Must be its own field to avoid data races */ - int holds_gil; - - int _whence; - - /* Thread state (_Py_THREAD_ATTACHED, _Py_THREAD_DETACHED, _Py_THREAD_SUSPENDED). - See Include/internal/pycore_pystate.h for more details. */ - int state; - - int py_recursion_remaining; - int py_recursion_limit; - int recursion_headroom; /* Allow 50 more calls to handle any errors. */ - - /* 'tracing' keeps track of the execution depth when tracing/profiling. - This is to prevent the actual trace/profile code from being recorded in - the trace/profile. */ - int tracing; - int what_event; /* The event currently being monitored, if any. */ - - /* Pointer to currently executing frame. */ - struct _PyInterpreterFrame *current_frame; - - Py_tracefunc c_profilefunc; - Py_tracefunc c_tracefunc; - PyObject *c_profileobj; - PyObject *c_traceobj; - - /* The exception currently being raised */ - PyObject *current_exception; - - /* Pointer to the top of the exception stack for the exceptions - * we may be currently handling. (See _PyErr_StackItem above.) - * This is never NULL. */ - _PyErr_StackItem *exc_info; - - PyObject *dict; /* Stores per-thread state */ - - int gilstate_counter; - - PyObject *async_exc; /* Asynchronous exception to raise */ - unsigned long thread_id; /* Thread id where this tstate was created */ - - /* Native thread id where this tstate was created. This will be 0 except on - * those platforms that have the notion of native thread id, for which the - * macro PY_HAVE_THREAD_NATIVE_ID is then defined. - */ - unsigned long native_thread_id; - - PyObject *delete_later; - - /* Tagged pointer to top-most critical section, or zero if there is no - * active critical section. Critical sections are only used in - * `--disable-gil` builds (i.e., when Py_GIL_DISABLED is defined to 1). In the - * default build, this field is always zero. - */ - uintptr_t critical_section; - - int coroutine_origin_tracking_depth; - - PyObject *async_gen_firstiter; - PyObject *async_gen_finalizer; - - PyObject *context; - uint64_t context_ver; - - /* Unique thread state id. */ - uint64_t id; - - _PyStackChunk *datastack_chunk; - PyObject **datastack_top; - PyObject **datastack_limit; - /* XXX signal handlers should also be here */ - - /* The following fields are here to avoid allocation during init. - The data is exposed through PyThreadState pointer fields. - These fields should not be accessed directly outside of init. - This is indicated by an underscore prefix on the field names. - - All other PyInterpreterState pointer fields are populated when - needed and default to NULL. - */ - // Note some fields do not have a leading underscore for backward - // compatibility. See https://bugs.python.org/issue45953#msg412046. - - /* The thread's exception stack entry. (Always the last entry.) */ - _PyErr_StackItem exc_state; - - PyObject *current_executor; - - uint64_t dict_global_version; - - /* Used to store/retrieve `threading.local` keys/values for this thread */ - PyObject *threading_local_key; - - /* Used by `threading.local`s to be remove keys/values for dying threads. - The PyThreadObject must hold the only reference to this value. - */ - PyObject *threading_local_sentinel; - _PyRemoteDebuggerSupport remote_debugger_support; - - _PyStackChunk *datastack_cached_chunk; -}; - -/* other API */ - -/* Similar to PyThreadState_Get(), but don't issue a fatal error - * if it is NULL. */ -PyAPI_FUNC(PyThreadState *) PyThreadState_GetUnchecked(void); - -// Deprecated alias kept for backward compatibility -Py_DEPRECATED(3.14) static inline PyThreadState* -_PyThreadState_UncheckedGet(void) -{ - return PyThreadState_GetUnchecked(); -} - -// Disable tracing and profiling. -PyAPI_FUNC(void) PyThreadState_EnterTracing(PyThreadState *tstate); - -// Reset tracing and profiling: enable them if a trace function or a profile -// function is set, otherwise disable them. -PyAPI_FUNC(void) PyThreadState_LeaveTracing(PyThreadState *tstate); - -/* PyGILState */ - -/* Helper/diagnostic function - return 1 if the current thread - currently holds the GIL, 0 otherwise. - - The function returns 1 if _PyGILState_check_enabled is non-zero. */ -PyAPI_FUNC(int) PyGILState_Check(void); - -/* The implementation of sys._current_frames() Returns a dict mapping - thread id to that thread's current frame. -*/ -PyAPI_FUNC(PyObject*) _PyThread_CurrentFrames(void); - -// Set the stack protection start address and stack protection size -// of a Python thread state -PyAPI_FUNC(int) PyUnstable_ThreadState_SetStackProtection( - PyThreadState *tstate, - void *stack_start_addr, // Stack start address - size_t stack_size); // Stack size (in bytes) - -// Reset the stack protection start address and stack protection size -// of a Python thread state -PyAPI_FUNC(void) PyUnstable_ThreadState_ResetStackProtection( - PyThreadState *tstate); - -/* Routines for advanced debuggers, requested by David Beazley. - Don't use unless you know what you are doing! */ -PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Main(void); -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, struct _PyInterpreterFrame *, int); - -PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc( - PyInterpreterState *interp); -PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc( - PyInterpreterState *interp, - _PyFrameEvalFunction eval_frame); diff --git a/Python314_4_x86_Template/include/cpython/pystats.h b/Python314_4_x86_Template/include/cpython/pystats.h deleted file mode 100644 index cf830b606..000000000 --- a/Python314_4_x86_Template/include/cpython/pystats.h +++ /dev/null @@ -1,194 +0,0 @@ -// Statistics on Python performance. -// -// API: -// -// - _Py_INCREF_STAT_INC() and _Py_DECREF_STAT_INC() used by Py_INCREF() -// and Py_DECREF(). -// - _Py_stats variable -// -// Functions of the sys module: -// -// - sys._stats_on() -// - sys._stats_off() -// - sys._stats_clear() -// - sys._stats_dump() -// -// Python must be built with ./configure --enable-pystats to define the -// Py_STATS macro. -// -// Define _PY_INTERPRETER macro to increment interpreter_increfs and -// interpreter_decrefs. Otherwise, increment increfs and decrefs. -// -// The number of incref operations counted by `incref` and -// `interpreter_incref` is the number of increment operations, which is -// not equal to the total of all reference counts. A single increment -// operation may increase the reference count of an object by more than -// one. For example, see `_Py_RefcntAdd`. - -#ifndef Py_CPYTHON_PYSTATS_H -# error "this header file must not be included directly" -#endif - -#define PYSTATS_MAX_UOP_ID 1024 - -#define SPECIALIZATION_FAILURE_KINDS 60 - -/* Stats for determining who is calling PyEval_EvalFrame */ -#define EVAL_CALL_TOTAL 0 -#define EVAL_CALL_VECTOR 1 -#define EVAL_CALL_GENERATOR 2 -#define EVAL_CALL_LEGACY 3 -#define EVAL_CALL_FUNCTION_VECTORCALL 4 -#define EVAL_CALL_BUILD_CLASS 5 -#define EVAL_CALL_SLOT 6 -#define EVAL_CALL_FUNCTION_EX 7 -#define EVAL_CALL_API 8 -#define EVAL_CALL_METHOD 9 - -#define EVAL_CALL_KINDS 10 - -typedef struct _specialization_stats { - uint64_t success; - uint64_t failure; - uint64_t hit; - uint64_t deferred; - uint64_t miss; - uint64_t deopt; - uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS]; -} SpecializationStats; - -typedef struct _opcode_stats { - SpecializationStats specialization; - uint64_t execution_count; - uint64_t pair_count[256]; -} OpcodeStats; - -typedef struct _call_stats { - uint64_t inlined_py_calls; - uint64_t pyeval_calls; - uint64_t frames_pushed; - uint64_t frame_objects_created; - uint64_t eval_calls[EVAL_CALL_KINDS]; -} CallStats; - -typedef struct _object_stats { - uint64_t increfs; - uint64_t decrefs; - uint64_t interpreter_increfs; - uint64_t interpreter_decrefs; - uint64_t immortal_increfs; - uint64_t immortal_decrefs; - uint64_t interpreter_immortal_increfs; - uint64_t interpreter_immortal_decrefs; - uint64_t allocations; - uint64_t allocations512; - uint64_t allocations4k; - uint64_t allocations_big; - uint64_t frees; - uint64_t to_freelist; - uint64_t from_freelist; - uint64_t inline_values; - uint64_t dict_materialized_on_request; - uint64_t dict_materialized_new_key; - uint64_t dict_materialized_too_big; - uint64_t dict_materialized_str_subclass; - uint64_t type_cache_hits; - uint64_t type_cache_misses; - uint64_t type_cache_dunder_hits; - uint64_t type_cache_dunder_misses; - uint64_t type_cache_collisions; - /* Temporary value used during GC */ - uint64_t object_visits; -} ObjectStats; - -typedef struct _gc_stats { - uint64_t collections; - uint64_t object_visits; - uint64_t objects_collected; - uint64_t objects_transitively_reachable; - uint64_t objects_not_transitively_reachable; -} GCStats; - -typedef struct _uop_stats { - uint64_t execution_count; - uint64_t miss; - uint64_t pair_count[PYSTATS_MAX_UOP_ID + 1]; -} UOpStats; - -#define _Py_UOP_HIST_SIZE 32 - -typedef struct _optimization_stats { - uint64_t attempts; - uint64_t traces_created; - uint64_t traces_executed; - uint64_t uops_executed; - uint64_t trace_stack_overflow; - uint64_t trace_stack_underflow; - uint64_t trace_too_long; - uint64_t trace_too_short; - uint64_t inner_loop; - uint64_t recursive_call; - uint64_t low_confidence; - uint64_t unknown_callee; - uint64_t executors_invalidated; - UOpStats opcode[PYSTATS_MAX_UOP_ID + 1]; - uint64_t unsupported_opcode[256]; - uint64_t trace_length_hist[_Py_UOP_HIST_SIZE]; - uint64_t trace_run_length_hist[_Py_UOP_HIST_SIZE]; - uint64_t optimized_trace_length_hist[_Py_UOP_HIST_SIZE]; - uint64_t optimizer_attempts; - uint64_t optimizer_successes; - uint64_t optimizer_failure_reason_no_memory; - uint64_t remove_globals_builtins_changed; - uint64_t remove_globals_incorrect_keys; - uint64_t error_in_opcode[PYSTATS_MAX_UOP_ID + 1]; - // JIT memory stats - uint64_t jit_total_memory_size; - uint64_t jit_code_size; - uint64_t jit_trampoline_size; - uint64_t jit_data_size; - uint64_t jit_padding_size; - uint64_t jit_freed_memory_size; - uint64_t trace_total_memory_hist[_Py_UOP_HIST_SIZE]; -} OptimizationStats; - -typedef struct _rare_event_stats { - /* Setting an object's class, obj.__class__ = ... */ - uint64_t set_class; - /* Setting the bases of a class, cls.__bases__ = ... */ - uint64_t set_bases; - /* Setting the PEP 523 frame eval function, _PyInterpreterState_SetFrameEvalFunc() */ - uint64_t set_eval_frame_func; - /* Modifying the builtins, __builtins__.__dict__[var] = ... */ - uint64_t builtin_dict; - /* Modifying a function, e.g. func.__defaults__ = ..., etc. */ - uint64_t func_modification; - /* Modifying a dict that is being watched */ - uint64_t watched_dict_modification; - uint64_t watched_globals_modification; -} RareEventStats; - -typedef struct _stats { - OpcodeStats opcode_stats[256]; - CallStats call_stats; - ObjectStats object_stats; - OptimizationStats optimization_stats; - RareEventStats rare_event_stats; - GCStats *gc_stats; -} PyStats; - - -// Export for shared extensions like 'math' -PyAPI_DATA(PyStats*) _Py_stats; - -#ifdef _PY_INTERPRETER -# define _Py_INCREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_increfs++; } while (0) -# define _Py_DECREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_decrefs++; } while (0) -# define _Py_INCREF_IMMORTAL_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_immortal_increfs++; } while (0) -# define _Py_DECREF_IMMORTAL_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_immortal_decrefs++; } while (0) -#else -# define _Py_INCREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.increfs++; } while (0) -# define _Py_DECREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.decrefs++; } while (0) -# define _Py_INCREF_IMMORTAL_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.immortal_increfs++; } while (0) -# define _Py_DECREF_IMMORTAL_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.immortal_decrefs++; } while (0) -#endif diff --git a/Python314_4_x86_Template/include/cpython/pythonrun.h b/Python314_4_x86_Template/include/cpython/pythonrun.h deleted file mode 100644 index edc409522..000000000 --- a/Python314_4_x86_Template/include/cpython/pythonrun.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef Py_CPYTHON_PYTHONRUN_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *); -PyAPI_FUNC(int) PyRun_AnyFileExFlags( - FILE *fp, - const char *filename, /* decoded from the filesystem encoding */ - int closeit, - PyCompilerFlags *flags); -PyAPI_FUNC(int) PyRun_SimpleFileExFlags( - FILE *fp, - const char *filename, /* decoded from the filesystem encoding */ - int closeit, - PyCompilerFlags *flags); -PyAPI_FUNC(int) PyRun_InteractiveOneFlags( - FILE *fp, - const char *filename, /* decoded from the filesystem encoding */ - PyCompilerFlags *flags); -PyAPI_FUNC(int) PyRun_InteractiveOneObject( - FILE *fp, - PyObject *filename, - PyCompilerFlags *flags); -PyAPI_FUNC(int) PyRun_InteractiveLoopFlags( - FILE *fp, - const char *filename, /* decoded from the filesystem encoding */ - PyCompilerFlags *flags); - - -PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, - PyObject *, PyCompilerFlags *); - -PyAPI_FUNC(PyObject *) PyRun_FileExFlags( - FILE *fp, - const char *filename, /* decoded from the filesystem encoding */ - int start, - PyObject *globals, - PyObject *locals, - int closeit, - PyCompilerFlags *flags); - - -PyAPI_FUNC(PyObject *) Py_CompileStringExFlags( - const char *str, - const char *filename, /* decoded from the filesystem encoding */ - int start, - PyCompilerFlags *flags, - int optimize); -PyAPI_FUNC(PyObject *) Py_CompileStringObject( - const char *str, - PyObject *filename, int start, - PyCompilerFlags *flags, - int optimize); - -#define Py_CompileString(str, p, s) Py_CompileStringExFlags((str), (p), (s), NULL, -1) -#define Py_CompileStringFlags(str, p, s, f) Py_CompileStringExFlags((str), (p), (s), (f), -1) - -/* A function flavor is also exported by libpython. It is required when - libpython is accessed directly rather than using header files which defines - macros below. On Windows, for example, PyAPI_FUNC() uses dllexport to - export functions in pythonXX.dll. */ -PyAPI_FUNC(PyObject *) PyRun_String(const char *str, int s, PyObject *g, PyObject *l); -PyAPI_FUNC(int) PyRun_AnyFile(FILE *fp, const char *name); -PyAPI_FUNC(int) PyRun_AnyFileEx(FILE *fp, const char *name, int closeit); -PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *); -PyAPI_FUNC(int) PyRun_SimpleString(const char *s); -PyAPI_FUNC(int) PyRun_SimpleFile(FILE *f, const char *p); -PyAPI_FUNC(int) PyRun_SimpleFileEx(FILE *f, const char *p, int c); -PyAPI_FUNC(int) PyRun_InteractiveOne(FILE *f, const char *p); -PyAPI_FUNC(int) PyRun_InteractiveLoop(FILE *f, const char *p); -PyAPI_FUNC(PyObject *) PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l); -PyAPI_FUNC(PyObject *) PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c); -PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, PyCompilerFlags *flags); - -/* Use macros for a bunch of old variants */ -#define PyRun_String(str, s, g, l) PyRun_StringFlags((str), (s), (g), (l), NULL) -#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags((fp), (name), 0, NULL) -#define PyRun_AnyFileEx(fp, name, closeit) \ - PyRun_AnyFileExFlags((fp), (name), (closeit), NULL) -#define PyRun_AnyFileFlags(fp, name, flags) \ - PyRun_AnyFileExFlags((fp), (name), 0, (flags)) -#define PyRun_SimpleString(s) PyRun_SimpleStringFlags((s), NULL) -#define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags((f), (p), 0, NULL) -#define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags((f), (p), (c), NULL) -#define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags((f), (p), NULL) -#define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags((f), (p), NULL) -#define PyRun_File(fp, p, s, g, l) \ - PyRun_FileExFlags((fp), (p), (s), (g), (l), 0, NULL) -#define PyRun_FileEx(fp, p, s, g, l, c) \ - PyRun_FileExFlags((fp), (p), (s), (g), (l), (c), NULL) -#define PyRun_FileFlags(fp, p, s, g, l, flags) \ - PyRun_FileExFlags((fp), (p), (s), (g), (l), 0, (flags)) - -/* Stuff with no proper home (yet) */ -PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, const char *); -PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *); diff --git a/Python314_4_x86_Template/include/cpython/pythread.h b/Python314_4_x86_Template/include/cpython/pythread.h deleted file mode 100644 index e658b35bd..000000000 --- a/Python314_4_x86_Template/include/cpython/pythread.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef Py_CPYTHON_PYTHREAD_H -# error "this header file must not be included directly" -#endif - -// PY_TIMEOUT_MAX is the highest usable value (in microseconds) of PY_TIMEOUT_T -// type, and depends on the system threading API. -// -// NOTE: this isn't the same value as `_thread.TIMEOUT_MAX`. The _thread module -// exposes a higher-level API, with timeouts expressed in seconds and -// floating-point numbers allowed. -PyAPI_DATA(const long long) PY_TIMEOUT_MAX; - -#define PYTHREAD_INVALID_THREAD_ID ((unsigned long)-1) - -#ifdef HAVE_PTHREAD_H - /* Darwin needs pthread.h to know type name the pthread_key_t. */ -# include <pthread.h> -# define NATIVE_TSS_KEY_T pthread_key_t -#elif defined(NT_THREADS) - /* In Windows, native TSS key type is DWORD, - but hardcode the unsigned long to avoid errors for include directive. - */ -# define NATIVE_TSS_KEY_T unsigned long -#elif defined(HAVE_PTHREAD_STUBS) -# include "pthread_stubs.h" -# define NATIVE_TSS_KEY_T pthread_key_t -#else -# error "Require native threads. See https://bugs.python.org/issue31370" -#endif - -/* When Py_LIMITED_API is not defined, the type layout of Py_tss_t is - exposed to allow static allocation in the API clients. Even in this case, - you must handle TSS keys through API functions due to compatibility. -*/ -struct _Py_tss_t { - int _is_initialized; - NATIVE_TSS_KEY_T _key; -}; - -#undef NATIVE_TSS_KEY_T - -/* When static allocation, you must initialize with Py_tss_NEEDS_INIT. */ -#define Py_tss_NEEDS_INIT {0} diff --git a/Python314_4_x86_Template/include/cpython/pytime.h b/Python314_4_x86_Template/include/cpython/pytime.h deleted file mode 100644 index 5c68110ae..000000000 --- a/Python314_4_x86_Template/include/cpython/pytime.h +++ /dev/null @@ -1,27 +0,0 @@ -// PyTime_t C API: see Doc/c-api/time.rst for the documentation. - -#ifndef Py_LIMITED_API -#ifndef Py_PYTIME_H -#define Py_PYTIME_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef int64_t PyTime_t; -#define PyTime_MIN INT64_MIN -#define PyTime_MAX INT64_MAX - -PyAPI_FUNC(double) PyTime_AsSecondsDouble(PyTime_t t); -PyAPI_FUNC(int) PyTime_Monotonic(PyTime_t *result); -PyAPI_FUNC(int) PyTime_PerfCounter(PyTime_t *result); -PyAPI_FUNC(int) PyTime_Time(PyTime_t *result); - -PyAPI_FUNC(int) PyTime_MonotonicRaw(PyTime_t *result); -PyAPI_FUNC(int) PyTime_PerfCounterRaw(PyTime_t *result); -PyAPI_FUNC(int) PyTime_TimeRaw(PyTime_t *result); - -#ifdef __cplusplus -} -#endif -#endif /* Py_PYTIME_H */ -#endif /* Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/cpython/setobject.h b/Python314_4_x86_Template/include/cpython/setobject.h deleted file mode 100644 index 89565cb29..000000000 --- a/Python314_4_x86_Template/include/cpython/setobject.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef Py_CPYTHON_SETOBJECT_H -# error "this header file must not be included directly" -#endif - -/* There are three kinds of entries in the table: - -1. Unused: key == NULL and hash == 0 -2. Dummy: key == dummy and hash == -1 -3. Active: key != NULL and key != dummy and hash != -1 - -The hash field of Unused slots is always zero. - -The hash field of Dummy slots are set to -1 -meaning that dummy entries can be detected by -either entry->key==dummy or by entry->hash==-1. -*/ - -#define PySet_MINSIZE 8 - -typedef struct { - PyObject *key; - Py_hash_t hash; /* Cached hash code of the key */ -} setentry; - -/* The SetObject data structure is shared by set and frozenset objects. - -Invariant for sets: - - hash is -1 - -Invariants for frozensets: - - data is immutable. - - hash is the hash of the frozenset or -1 if not computed yet. - -*/ - -typedef struct { - PyObject_HEAD - - Py_ssize_t fill; /* Number active and dummy entries*/ - Py_ssize_t used; /* Number active entries */ - - /* The table contains mask + 1 slots, and that's a power of 2. - * We store the mask instead of the size because the mask is more - * frequently needed. - */ - Py_ssize_t mask; - - /* The table points to a fixed-size smalltable for small tables - * or to additional malloc'ed memory for bigger tables. - * The table pointer is never NULL which saves us from repeated - * runtime null-tests. - */ - setentry *table; - Py_hash_t hash; /* Only used by frozenset objects */ - Py_ssize_t finger; /* Search finger for pop() */ - - setentry smalltable[PySet_MINSIZE]; - PyObject *weakreflist; /* List of weak references */ -} PySetObject; - -#define _PySet_CAST(so) \ - (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so)) - -static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) { -#ifdef Py_GIL_DISABLED - return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used)); -#else - return _PySet_CAST(so)->used; -#endif -} -#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so)) diff --git a/Python314_4_x86_Template/include/cpython/traceback.h b/Python314_4_x86_Template/include/cpython/traceback.h deleted file mode 100644 index 81c51944f..000000000 --- a/Python314_4_x86_Template/include/cpython/traceback.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef Py_CPYTHON_TRACEBACK_H -# error "this header file must not be included directly" -#endif - -typedef struct _traceback PyTracebackObject; - -struct _traceback { - PyObject_HEAD - PyTracebackObject *tb_next; - PyFrameObject *tb_frame; - int tb_lasti; - int tb_lineno; -}; diff --git a/Python314_4_x86_Template/include/cpython/tracemalloc.h b/Python314_4_x86_Template/include/cpython/tracemalloc.h deleted file mode 100644 index 6d094291a..000000000 --- a/Python314_4_x86_Template/include/cpython/tracemalloc.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef Py_TRACEMALLOC_H -#define Py_TRACEMALLOC_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Track an allocated memory block in the tracemalloc module. - Return 0 on success, return -1 on error (failed to allocate memory to store - the trace). - - Return -2 if tracemalloc is disabled. - - If memory block is already tracked, update the existing trace. */ -PyAPI_FUNC(int) PyTraceMalloc_Track( - unsigned int domain, - uintptr_t ptr, - size_t size); - -/* Untrack an allocated memory block in the tracemalloc module. - Do nothing if the block was not tracked. - - Return -2 if tracemalloc is disabled, otherwise return 0. */ -PyAPI_FUNC(int) PyTraceMalloc_Untrack( - unsigned int domain, - uintptr_t ptr); - -#ifdef __cplusplus -} -#endif -#endif // !Py_TRACEMALLOC_H -#endif // !Py_LIMITED_API diff --git a/Python314_4_x86_Template/include/cpython/tupleobject.h b/Python314_4_x86_Template/include/cpython/tupleobject.h deleted file mode 100644 index afb98ccbb..000000000 --- a/Python314_4_x86_Template/include/cpython/tupleobject.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef Py_CPYTHON_TUPLEOBJECT_H -# error "this header file must not be included directly" -#endif - -typedef struct { - PyObject_VAR_HEAD - /* Cached hash. Initially set to -1. */ - Py_hash_t ob_hash; - /* ob_item contains space for 'ob_size' elements. - Items must normally not be NULL, except during construction when - the tuple is not yet visible outside the function that builds it. */ - PyObject *ob_item[1]; -} PyTupleObject; - -PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t); - -/* Cast argument to PyTupleObject* type. */ -#define _PyTuple_CAST(op) \ - (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op))) - -// Macros and static inline functions, trading safety for speed - -static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) { - PyTupleObject *tuple = _PyTuple_CAST(op); - return Py_SIZE(tuple); -} -#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op)) - -#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)]) - -/* Function *only* to be used to fill in brand new tuples */ -static inline void -PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) { - PyTupleObject *tuple = _PyTuple_CAST(op); - assert(0 <= index); - assert(index < Py_SIZE(tuple)); - tuple->ob_item[index] = value; -} -#define PyTuple_SET_ITEM(op, index, value) \ - PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value)) diff --git a/Python314_4_x86_Template/include/cpython/unicodeobject.h b/Python314_4_x86_Template/include/cpython/unicodeobject.h deleted file mode 100644 index 3d0414f52..000000000 --- a/Python314_4_x86_Template/include/cpython/unicodeobject.h +++ /dev/null @@ -1,773 +0,0 @@ -#ifndef Py_CPYTHON_UNICODEOBJECT_H -# error "this header file must not be included directly" -#endif - -/* Py_UNICODE was the native Unicode storage format (code unit) used by - Python and represents a single Unicode element in the Unicode type. - With PEP 393, Py_UNICODE is deprecated and replaced with a - typedef to wchar_t. */ -Py_DEPRECATED(3.13) typedef wchar_t PY_UNICODE_TYPE; -Py_DEPRECATED(3.13) typedef wchar_t Py_UNICODE; - - -/* --- Internal Unicode Operations ---------------------------------------- */ - -// Static inline functions to work with surrogates -static inline int Py_UNICODE_IS_SURROGATE(Py_UCS4 ch) { - return (0xD800 <= ch && ch <= 0xDFFF); -} -static inline int Py_UNICODE_IS_HIGH_SURROGATE(Py_UCS4 ch) { - return (0xD800 <= ch && ch <= 0xDBFF); -} -static inline int Py_UNICODE_IS_LOW_SURROGATE(Py_UCS4 ch) { - return (0xDC00 <= ch && ch <= 0xDFFF); -} - -// Join two surrogate characters and return a single Py_UCS4 value. -static inline Py_UCS4 Py_UNICODE_JOIN_SURROGATES(Py_UCS4 high, Py_UCS4 low) { - assert(Py_UNICODE_IS_HIGH_SURROGATE(high)); - assert(Py_UNICODE_IS_LOW_SURROGATE(low)); - return 0x10000 + (((high & 0x03FF) << 10) | (low & 0x03FF)); -} - -// High surrogate = top 10 bits added to 0xD800. -// The character must be in the range [U+10000; U+10ffff]. -static inline Py_UCS4 Py_UNICODE_HIGH_SURROGATE(Py_UCS4 ch) { - assert(0x10000 <= ch && ch <= 0x10ffff); - return (0xD800 - (0x10000 >> 10) + (ch >> 10)); -} - -// Low surrogate = bottom 10 bits added to 0xDC00. -// The character must be in the range [U+10000; U+10ffff]. -static inline Py_UCS4 Py_UNICODE_LOW_SURROGATE(Py_UCS4 ch) { - assert(0x10000 <= ch && ch <= 0x10ffff); - return (0xDC00 + (ch & 0x3FF)); -} - - -/* --- Unicode Type ------------------------------------------------------- */ - -/* ASCII-only strings created through PyUnicode_New use the PyASCIIObject - structure. state.ascii and state.compact are set, and the data - immediately follow the structure. utf8_length can be found - in the length field; the utf8 pointer is equal to the data pointer. */ -typedef struct { - /* There are 4 forms of Unicode strings: - - - compact ascii: - - * structure = PyASCIIObject - * test: PyUnicode_IS_COMPACT_ASCII(op) - * kind = PyUnicode_1BYTE_KIND - * compact = 1 - * ascii = 1 - * (length is the length of the utf8) - * (data starts just after the structure) - * (since ASCII is decoded from UTF-8, the utf8 string are the data) - - - compact: - - * structure = PyCompactUnicodeObject - * test: PyUnicode_IS_COMPACT(op) && !PyUnicode_IS_ASCII(op) - * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or - PyUnicode_4BYTE_KIND - * compact = 1 - * ascii = 0 - * utf8 is not shared with data - * utf8_length = 0 if utf8 is NULL - * (data starts just after the structure) - - - legacy string: - - * structure = PyUnicodeObject structure - * test: !PyUnicode_IS_COMPACT(op) - * kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or - PyUnicode_4BYTE_KIND - * compact = 0 - * data.any is not NULL - * utf8 is shared and utf8_length = length with data.any if ascii = 1 - * utf8_length = 0 if utf8 is NULL - - Compact strings use only one memory block (structure + characters), - whereas legacy strings use one block for the structure and one block - for characters. - - Legacy strings are created by subclasses of Unicode. - - See also _PyUnicode_CheckConsistency(). - */ - PyObject_HEAD - Py_ssize_t length; /* Number of code points in the string */ - Py_hash_t hash; /* Hash value; -1 if not set */ -#ifdef Py_GIL_DISABLED - /* Ensure 4 byte alignment for PyUnicode_DATA(), see gh-63736 on m68k. - In the non-free-threaded build, we'll use explicit padding instead */ - _Py_ALIGN_AS(4) -#endif - struct { - /* If interned is non-zero, the two references from the - dictionary to this object are *not* counted in ob_refcnt. - The possible values here are: - 0: Not Interned - 1: Interned - 2: Interned and Immortal - 3: Interned, Immortal, and Static - This categorization allows the runtime to determine the right - cleanup mechanism at runtime shutdown. */ -#ifdef Py_GIL_DISABLED - // Needs to be accessed atomically, so can't be a bit field. - unsigned char interned; -#else - unsigned int interned:2; -#endif - /* Character size: - - - PyUnicode_1BYTE_KIND (1): - - * character type = Py_UCS1 (8 bits, unsigned) - * all characters are in the range U+0000-U+00FF (latin1) - * if ascii is set, all characters are in the range U+0000-U+007F - (ASCII), otherwise at least one character is in the range - U+0080-U+00FF - - - PyUnicode_2BYTE_KIND (2): - - * character type = Py_UCS2 (16 bits, unsigned) - * all characters are in the range U+0000-U+FFFF (BMP) - * at least one character is in the range U+0100-U+FFFF - - - PyUnicode_4BYTE_KIND (4): - - * character type = Py_UCS4 (32 bits, unsigned) - * all characters are in the range U+0000-U+10FFFF - * at least one character is in the range U+10000-U+10FFFF - */ - unsigned int kind:3; - /* Compact is with respect to the allocation scheme. Compact unicode - objects only require one memory block while non-compact objects use - one block for the PyUnicodeObject struct and another for its data - buffer. */ - unsigned int compact:1; - /* The string only contains characters in the range U+0000-U+007F (ASCII) - and the kind is PyUnicode_1BYTE_KIND. If ascii is set and compact is - set, use the PyASCIIObject structure. */ - unsigned int ascii:1; - /* The object is statically allocated. */ - unsigned int statically_allocated:1; -#ifndef Py_GIL_DISABLED - /* Padding to ensure that PyUnicode_DATA() is always aligned to - 4 bytes (see issue gh-63736 on m68k) */ - unsigned int :24; -#endif - } state; -} PyASCIIObject; - -/* Non-ASCII strings allocated through PyUnicode_New use the - PyCompactUnicodeObject structure. state.compact is set, and the data - immediately follow the structure. */ -typedef struct { - PyASCIIObject _base; - Py_ssize_t utf8_length; /* Number of bytes in utf8, excluding the - * terminating \0. */ - char *utf8; /* UTF-8 representation (null-terminated) */ -} PyCompactUnicodeObject; - -/* Object format for Unicode subclasses. */ -typedef struct { - PyCompactUnicodeObject _base; - union { - void *any; - Py_UCS1 *latin1; - Py_UCS2 *ucs2; - Py_UCS4 *ucs4; - } data; /* Canonical, smallest-form Unicode buffer */ -} PyUnicodeObject; - - -#define _PyASCIIObject_CAST(op) \ - (assert(PyUnicode_Check(op)), \ - _Py_CAST(PyASCIIObject*, (op))) -#define _PyCompactUnicodeObject_CAST(op) \ - (assert(PyUnicode_Check(op)), \ - _Py_CAST(PyCompactUnicodeObject*, (op))) -#define _PyUnicodeObject_CAST(op) \ - (assert(PyUnicode_Check(op)), \ - _Py_CAST(PyUnicodeObject*, (op))) - - -/* --- Flexible String Representation Helper Macros (PEP 393) -------------- */ - -/* Values for PyASCIIObject.state: */ - -/* Interning state. */ -#define SSTATE_NOT_INTERNED 0 -#define SSTATE_INTERNED_MORTAL 1 -#define SSTATE_INTERNED_IMMORTAL 2 -#define SSTATE_INTERNED_IMMORTAL_STATIC 3 - -/* Use only if you know it's a string */ -static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) { -#ifdef Py_GIL_DISABLED - return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned); -#else - return _PyASCIIObject_CAST(op)->state.interned; -#endif -} -#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op)) - -/* For backward compatibility. Soft-deprecated. */ -static inline unsigned int PyUnicode_IS_READY(PyObject* Py_UNUSED(op)) { - return 1; -} -#define PyUnicode_IS_READY(op) PyUnicode_IS_READY(_PyObject_CAST(op)) - -/* Return true if the string contains only ASCII characters, or 0 if not. The - string may be compact (PyUnicode_IS_COMPACT_ASCII) or not. */ -static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) { - return _PyASCIIObject_CAST(op)->state.ascii; -} -#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op)) - -/* Return true if the string is compact or 0 if not. - No type checks are performed. */ -static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) { - return _PyASCIIObject_CAST(op)->state.compact; -} -#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op)) - -/* Return true if the string is a compact ASCII string (use PyASCIIObject - structure), or 0 if not. No type checks are performed. */ -static inline int PyUnicode_IS_COMPACT_ASCII(PyObject *op) { - return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op)); -} -#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op)) - -enum PyUnicode_Kind { -/* Return values of the PyUnicode_KIND() function: */ - PyUnicode_1BYTE_KIND = 1, - PyUnicode_2BYTE_KIND = 2, - PyUnicode_4BYTE_KIND = 4 -}; - -PyAPI_FUNC(int) PyUnicode_KIND(PyObject *op); - -// PyUnicode_KIND(): Return one of the PyUnicode_*_KIND values defined above. -// -// gh-89653: Converting this macro to a static inline function would introduce -// new compiler warnings on "kind < PyUnicode_KIND(str)" (compare signed and -// unsigned numbers) where kind type is an int or on -// "unsigned int kind = PyUnicode_KIND(str)" (cast signed to unsigned). -#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind) - -/* Return a void pointer to the raw unicode buffer. */ -static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) { - if (PyUnicode_IS_ASCII(op)) { - return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1)); - } - return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1)); -} - -static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) { - void *data; - assert(!PyUnicode_IS_COMPACT(op)); - data = _PyUnicodeObject_CAST(op)->data.any; - assert(data != NULL); - return data; -} - -PyAPI_FUNC(void*) PyUnicode_DATA(PyObject *op); - -static inline void* _PyUnicode_DATA(PyObject *op) { - if (PyUnicode_IS_COMPACT(op)) { - return _PyUnicode_COMPACT_DATA(op); - } - return _PyUnicode_NONCOMPACT_DATA(op); -} -#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op)) - -/* Return pointers to the canonical representation cast to unsigned char, - Py_UCS2, or Py_UCS4 for direct character access. - No checks are performed, use PyUnicode_KIND() before to ensure - these will work correctly. */ - -#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op)) -#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op)) -#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op)) - -/* Returns the length of the unicode string. */ -static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) { - return _PyASCIIObject_CAST(op)->length; -} -#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op)) - -/* Write into the canonical representation, this function does not do any sanity - checks and is intended for usage in loops. The caller should cache the - kind and data pointers obtained from other function calls. - index is the index in the string (starts at 0) and value is the new - code point value which should be written to that location. */ -static inline void PyUnicode_WRITE(int kind, void *data, - Py_ssize_t index, Py_UCS4 value) -{ - assert(index >= 0); - if (kind == PyUnicode_1BYTE_KIND) { - assert(value <= 0xffU); - _Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value); - } - else if (kind == PyUnicode_2BYTE_KIND) { - assert(value <= 0xffffU); - _Py_STATIC_CAST(Py_UCS2*, data)[index] = _Py_STATIC_CAST(Py_UCS2, value); - } - else { - assert(kind == PyUnicode_4BYTE_KIND); - assert(value <= 0x10ffffU); - _Py_STATIC_CAST(Py_UCS4*, data)[index] = value; - } -} -#define PyUnicode_WRITE(kind, data, index, value) \ - PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \ - (index), _Py_STATIC_CAST(Py_UCS4, value)) - -/* Read a code point from the string's canonical representation. No checks - are performed. */ -static inline Py_UCS4 PyUnicode_READ(int kind, - const void *data, Py_ssize_t index) -{ - assert(index >= 0); - if (kind == PyUnicode_1BYTE_KIND) { - return _Py_STATIC_CAST(const Py_UCS1*, data)[index]; - } - if (kind == PyUnicode_2BYTE_KIND) { - return _Py_STATIC_CAST(const Py_UCS2*, data)[index]; - } - assert(kind == PyUnicode_4BYTE_KIND); - return _Py_STATIC_CAST(const Py_UCS4*, data)[index]; -} -#define PyUnicode_READ(kind, data, index) \ - PyUnicode_READ(_Py_STATIC_CAST(int, kind), \ - _Py_STATIC_CAST(const void*, data), \ - (index)) - -/* PyUnicode_READ_CHAR() is less efficient than PyUnicode_READ() because it - calls PyUnicode_KIND() and might call it twice. For single reads, use - PyUnicode_READ_CHAR, for multiple consecutive reads callers should - cache kind and use PyUnicode_READ instead. */ -static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index) -{ - int kind; - - assert(index >= 0); - // Tolerate reading the NUL character at str[len(str)] - assert(index <= PyUnicode_GET_LENGTH(unicode)); - - kind = PyUnicode_KIND(unicode); - if (kind == PyUnicode_1BYTE_KIND) { - return PyUnicode_1BYTE_DATA(unicode)[index]; - } - if (kind == PyUnicode_2BYTE_KIND) { - return PyUnicode_2BYTE_DATA(unicode)[index]; - } - assert(kind == PyUnicode_4BYTE_KIND); - return PyUnicode_4BYTE_DATA(unicode)[index]; -} -#define PyUnicode_READ_CHAR(unicode, index) \ - PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index)) - -/* Return a maximum character value which is suitable for creating another - string based on op. This is always an approximation but more efficient - than iterating over the string. */ -static inline Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *op) -{ - int kind; - - if (PyUnicode_IS_ASCII(op)) { - return 0x7fU; - } - - kind = PyUnicode_KIND(op); - if (kind == PyUnicode_1BYTE_KIND) { - return 0xffU; - } - if (kind == PyUnicode_2BYTE_KIND) { - return 0xffffU; - } - assert(kind == PyUnicode_4BYTE_KIND); - return 0x10ffffU; -} -#define PyUnicode_MAX_CHAR_VALUE(op) \ - PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op)) - - -/* === Public API ========================================================= */ - -/* With PEP 393, this is the recommended way to allocate a new unicode object. - This function will allocate the object and its buffer in a single memory - block. Objects created using this function are not resizable. */ -PyAPI_FUNC(PyObject*) PyUnicode_New( - Py_ssize_t size, /* Number of code points in the new string */ - Py_UCS4 maxchar /* maximum code point value in the string */ - ); - -/* For backward compatibility. Soft-deprecated. */ -static inline int PyUnicode_READY(PyObject* Py_UNUSED(op)) -{ - return 0; -} -#define PyUnicode_READY(op) PyUnicode_READY(_PyObject_CAST(op)) - -/* Copy character from one unicode object into another, this function performs - character conversion when necessary and falls back to memcpy() if possible. - - Fail if to is too small (smaller than *how_many* or smaller than - len(from)-from_start), or if kind(from[from_start:from_start+how_many]) > - kind(to), or if *to* has more than 1 reference. - - Return the number of written character, or return -1 and raise an exception - on error. - - Pseudo-code: - - how_many = min(how_many, len(from) - from_start) - to[to_start:to_start+how_many] = from[from_start:from_start+how_many] - return how_many - - Note: The function doesn't write a terminating null character. - */ -PyAPI_FUNC(Py_ssize_t) PyUnicode_CopyCharacters( - PyObject *to, - Py_ssize_t to_start, - PyObject *from, - Py_ssize_t from_start, - Py_ssize_t how_many - ); - -/* Fill a string with a character: write fill_char into - unicode[start:start+length]. - - Fail if fill_char is bigger than the string maximum character, or if the - string has more than 1 reference. - - Return the number of written character, or return -1 and raise an exception - on error. */ -PyAPI_FUNC(Py_ssize_t) PyUnicode_Fill( - PyObject *unicode, - Py_ssize_t start, - Py_ssize_t length, - Py_UCS4 fill_char - ); - -/* Create a new string from a buffer of Py_UCS1, Py_UCS2 or Py_UCS4 characters. - Scan the string to find the maximum character. */ -PyAPI_FUNC(PyObject*) PyUnicode_FromKindAndData( - int kind, - const void *buffer, - Py_ssize_t size); - - -/* --- Public PyUnicodeWriter API ----------------------------------------- */ - -typedef struct PyUnicodeWriter PyUnicodeWriter; - -PyAPI_FUNC(PyUnicodeWriter*) PyUnicodeWriter_Create(Py_ssize_t length); -PyAPI_FUNC(void) PyUnicodeWriter_Discard(PyUnicodeWriter *writer); -PyAPI_FUNC(PyObject*) PyUnicodeWriter_Finish(PyUnicodeWriter *writer); - -PyAPI_FUNC(int) PyUnicodeWriter_WriteChar( - PyUnicodeWriter *writer, - Py_UCS4 ch); -PyAPI_FUNC(int) PyUnicodeWriter_WriteUTF8( - PyUnicodeWriter *writer, - const char *str, - Py_ssize_t size); -PyAPI_FUNC(int) PyUnicodeWriter_WriteASCII( - PyUnicodeWriter *writer, - const char *str, - Py_ssize_t size); -PyAPI_FUNC(int) PyUnicodeWriter_WriteWideChar( - PyUnicodeWriter *writer, - const wchar_t *str, - Py_ssize_t size); -PyAPI_FUNC(int) PyUnicodeWriter_WriteUCS4( - PyUnicodeWriter *writer, - Py_UCS4 *str, - Py_ssize_t size); - -PyAPI_FUNC(int) PyUnicodeWriter_WriteStr( - PyUnicodeWriter *writer, - PyObject *obj); -PyAPI_FUNC(int) PyUnicodeWriter_WriteRepr( - PyUnicodeWriter *writer, - PyObject *obj); -PyAPI_FUNC(int) PyUnicodeWriter_WriteSubstring( - PyUnicodeWriter *writer, - PyObject *str, - Py_ssize_t start, - Py_ssize_t end); -PyAPI_FUNC(int) PyUnicodeWriter_Format( - PyUnicodeWriter *writer, - const char *format, - ...); -PyAPI_FUNC(int) PyUnicodeWriter_DecodeUTF8Stateful( - PyUnicodeWriter *writer, - const char *string, /* UTF-8 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed); /* bytes consumed */ - - -/* --- Private _PyUnicodeWriter API --------------------------------------- */ - -typedef struct { - PyObject *buffer; - void *data; - int kind; - Py_UCS4 maxchar; - Py_ssize_t size; - Py_ssize_t pos; - - /* minimum number of allocated characters (default: 0) */ - Py_ssize_t min_length; - - /* minimum character (default: 127, ASCII) */ - Py_UCS4 min_char; - - /* If non-zero, overallocate the buffer (default: 0). */ - unsigned char overallocate; - - /* If readonly is 1, buffer is a shared string (cannot be modified) - and size is set to 0. */ - unsigned char readonly; -} _PyUnicodeWriter; - -// Initialize a Unicode writer. -// -// By default, the minimum buffer size is 0 character and overallocation is -// disabled. Set min_length, min_char and overallocate attributes to control -// the allocation of the buffer. -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Init( - _PyUnicodeWriter *writer); - -/* Prepare the buffer to write 'length' characters - with the specified maximum character. - - Return 0 on success, raise an exception and return -1 on error. */ -#define _PyUnicodeWriter_Prepare(WRITER, LENGTH, MAXCHAR) \ - (((MAXCHAR) <= (WRITER)->maxchar \ - && (LENGTH) <= (WRITER)->size - (WRITER)->pos) \ - ? 0 \ - : (((LENGTH) == 0) \ - ? 0 \ - : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR)))) - -/* Don't call this function directly, use the _PyUnicodeWriter_Prepare() macro - instead. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal( - _PyUnicodeWriter *writer, - Py_ssize_t length, - Py_UCS4 maxchar); - -/* Prepare the buffer to have at least the kind KIND. - For example, kind=PyUnicode_2BYTE_KIND ensures that the writer will - support characters in range U+000-U+FFFF. - - Return 0 on success, raise an exception and return -1 on error. */ -#define _PyUnicodeWriter_PrepareKind(WRITER, KIND) \ - ((KIND) <= (WRITER)->kind \ - ? 0 \ - : _PyUnicodeWriter_PrepareKindInternal((WRITER), (KIND))) - -/* Don't call this function directly, use the _PyUnicodeWriter_PrepareKind() - macro instead. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareKindInternal( - _PyUnicodeWriter *writer, - int kind); - -/* Append a Unicode character. - Return 0 on success, raise an exception and return -1 on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteChar( - _PyUnicodeWriter *writer, - Py_UCS4 ch); - -/* Append a Unicode string. - Return 0 on success, raise an exception and return -1 on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteStr( - _PyUnicodeWriter *writer, - PyObject *str); /* Unicode string */ - -/* Append a substring of a Unicode string. - Return 0 on success, raise an exception and return -1 on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring( - _PyUnicodeWriter *writer, - PyObject *str, /* Unicode string */ - Py_ssize_t start, - Py_ssize_t end); - -/* Append an ASCII-encoded byte string. - Return 0 on success, raise an exception and return -1 on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteASCIIString( - _PyUnicodeWriter *writer, - const char *str, /* ASCII-encoded byte string */ - Py_ssize_t len); /* number of bytes, or -1 if unknown */ - -/* Append a latin1-encoded byte string. - Return 0 on success, raise an exception and return -1 on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String( - _PyUnicodeWriter *writer, - const char *str, /* latin1-encoded byte string */ - Py_ssize_t len); /* length in bytes */ - -/* Get the value of the writer as a Unicode string. Clear the - buffer of the writer. Raise an exception and return NULL - on error. */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish( - _PyUnicodeWriter *writer); - -/* Deallocate memory of a writer (clear its internal buffer). */ -_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc( - _PyUnicodeWriter *writer); - - -/* --- Manage the default encoding ---------------------------------------- */ - -/* Returns a pointer to the default encoding (UTF-8) of the - Unicode object unicode. - - Like PyUnicode_AsUTF8AndSize(), this also caches the UTF-8 representation - in the unicodeobject. - - _PyUnicode_AsString is a #define for PyUnicode_AsUTF8 to - support the previous internal function with the same behaviour. - - Use of this API is DEPRECATED since no size information can be - extracted from the returned data. -*/ - -PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); - -// Deprecated alias kept for backward compatibility -Py_DEPRECATED(3.14) static inline const char* -_PyUnicode_AsString(PyObject *unicode) -{ - return PyUnicode_AsUTF8(unicode); -} - - -/* === Characters Type APIs =============================================== */ - -/* These should not be used directly. Use the Py_UNICODE_IS* and - Py_UNICODE_TO* macros instead. - - These APIs are implemented in Objects/unicodectype.c. - -*/ - -PyAPI_FUNC(int) _PyUnicode_IsLowercase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsUppercase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsTitlecase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsWhitespace( - const Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsLinebreak( - const Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(Py_UCS4) _PyUnicode_ToLowercase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(Py_UCS4) _PyUnicode_ToUppercase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(Py_UCS4) _PyUnicode_ToTitlecase( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_ToDecimalDigit( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_ToDigit( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(double) _PyUnicode_ToNumeric( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsDecimalDigit( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsDigit( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsNumeric( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsPrintable( - Py_UCS4 ch /* Unicode character */ - ); - -PyAPI_FUNC(int) _PyUnicode_IsAlpha( - Py_UCS4 ch /* Unicode character */ - ); - -// Helper array used by Py_UNICODE_ISSPACE(). -PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[]; - -// Since splitting on whitespace is an important use case, and -// whitespace in most situations is solely ASCII whitespace, we -// optimize for the common case by using a quick look-up table -// _Py_ascii_whitespace (see below) with an inlined check. -static inline int Py_UNICODE_ISSPACE(Py_UCS4 ch) { - if (ch < 128) { - return _Py_ascii_whitespace[ch]; - } - return _PyUnicode_IsWhitespace(ch); -} - -#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) -#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) -#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch) -#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch) - -#define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch) -#define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch) -#define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch) - -#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch) -#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch) -#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch) -#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch) - -#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch) -#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch) -#define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch) - -#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch) - -static inline int Py_UNICODE_ISALNUM(Py_UCS4 ch) { - return (Py_UNICODE_ISALPHA(ch) - || Py_UNICODE_ISDECIMAL(ch) - || Py_UNICODE_ISDIGIT(ch) - || Py_UNICODE_ISNUMERIC(ch)); -} - - -/* === Misc functions ===================================================== */ - -// Return an interned Unicode object for an Identifier; may fail if there is no -// memory. -PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); diff --git a/Python314_4_x86_Template/include/cpython/warnings.h b/Python314_4_x86_Template/include/cpython/warnings.h deleted file mode 100644 index 4e3eb88e8..000000000 --- a/Python314_4_x86_Template/include/cpython/warnings.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef Py_CPYTHON_WARNINGS_H -# error "this header file must not be included directly" -#endif - -PyAPI_FUNC(int) PyErr_WarnExplicitObject( - PyObject *category, - PyObject *message, - PyObject *filename, - int lineno, - PyObject *module, - PyObject *registry); - -PyAPI_FUNC(int) PyErr_WarnExplicitFormat( - PyObject *category, - const char *filename, int lineno, - const char *module, PyObject *registry, - const char *format, ...); - -// DEPRECATED: Use PyErr_WarnEx() instead. -#define PyErr_Warn(category, msg) PyErr_WarnEx((category), (msg), 1) diff --git a/Python314_4_x86_Template/include/cpython/weakrefobject.h b/Python314_4_x86_Template/include/cpython/weakrefobject.h deleted file mode 100644 index da8e77cdd..000000000 --- a/Python314_4_x86_Template/include/cpython/weakrefobject.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef Py_CPYTHON_WEAKREFOBJECT_H -# error "this header file must not be included directly" -#endif - -/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType, - * and CallableProxyType. - */ -struct _PyWeakReference { - PyObject_HEAD - - /* The object to which this is a weak reference, or Py_None if none. - * Note that this is a stealth reference: wr_object's refcount is - * not incremented to reflect this pointer. - */ - PyObject *wr_object; - - /* A callable to invoke when wr_object dies, or NULL if none. */ - PyObject *wr_callback; - - /* A cache for wr_object's hash code. As usual for hashes, this is -1 - * if the hash code isn't known yet. - */ - Py_hash_t hash; - - /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL- - * terminated list of weak references to it. These are the list pointers. - * If wr_object goes away, wr_object is set to Py_None, and these pointers - * have no meaning then. - */ - PyWeakReference *wr_prev; - PyWeakReference *wr_next; - vectorcallfunc vectorcall; - -#ifdef Py_GIL_DISABLED - /* Pointer to the lock used when clearing in free-threaded builds. - * Normally this can be derived from wr_object, but in some cases we need - * to lock after wr_object has been set to Py_None. - */ - PyMutex *weakrefs_lock; -#endif -}; - -PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self); - -#define _PyWeakref_CAST(op) \ - (assert(PyWeakref_Check(op)), _Py_CAST(PyWeakReference*, (op))) - -// Test if a weak reference is dead. -PyAPI_FUNC(int) PyWeakref_IsDead(PyObject *ref); - -Py_DEPRECATED(3.13) static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj) -{ - PyWeakReference *ref = _PyWeakref_CAST(ref_obj); - PyObject *obj = ref->wr_object; - // Explanation for the Py_REFCNT() check: when a weakref's target is part - // of a long chain of deallocations which triggers the trashcan mechanism, - // clearing the weakrefs can be delayed long after the target's refcount - // has dropped to zero. In the meantime, code accessing the weakref will - // be able to "see" the target object even though it is supposed to be - // unreachable. See issue gh-60806. - if (Py_REFCNT(obj) > 0) { - return obj; - } - return Py_None; -} -#define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref)) diff --git a/Python314_4_x86_Template/include/critical_section.h b/Python314_4_x86_Template/include/critical_section.h deleted file mode 100644 index 3b37615a8..000000000 --- a/Python314_4_x86_Template/include/critical_section.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Py_CRITICAL_SECTION_H -#define Py_CRITICAL_SECTION_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_CRITICAL_SECTION_H -# include "cpython/critical_section.h" -# undef Py_CPYTHON_CRITICAL_SECTION_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CRITICAL_SECTION_H */ diff --git a/Python314_4_x86_Template/include/datetime.h b/Python314_4_x86_Template/include/datetime.h deleted file mode 100644 index b78cc0e8e..000000000 --- a/Python314_4_x86_Template/include/datetime.h +++ /dev/null @@ -1,267 +0,0 @@ -/* datetime.h - */ -#ifndef Py_LIMITED_API -#ifndef DATETIME_H -#define DATETIME_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Fields are packed into successive bytes, each viewed as unsigned and - * big-endian, unless otherwise noted: - * - * byte offset - * 0 year 2 bytes, 1-9999 - * 2 month 1 byte, 1-12 - * 3 day 1 byte, 1-31 - * 4 hour 1 byte, 0-23 - * 5 minute 1 byte, 0-59 - * 6 second 1 byte, 0-59 - * 7 usecond 3 bytes, 0-999999 - * 10 - */ - -/* # of bytes for year, month, and day. */ -#define _PyDateTime_DATE_DATASIZE 4 - -/* # of bytes for hour, minute, second, and usecond. */ -#define _PyDateTime_TIME_DATASIZE 6 - -/* # of bytes for year, month, day, hour, minute, second, and usecond. */ -#define _PyDateTime_DATETIME_DATASIZE 10 - - -typedef struct -{ - PyObject_HEAD - Py_hash_t hashcode; /* -1 when unknown */ - int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */ - int seconds; /* 0 <= seconds < 24*3600 is invariant */ - int microseconds; /* 0 <= microseconds < 1000000 is invariant */ -} PyDateTime_Delta; - -typedef struct -{ - PyObject_HEAD /* a pure abstract base class */ -} PyDateTime_TZInfo; - - -/* The datetime and time types have hashcodes, and an optional tzinfo member, - * present if and only if hastzinfo is true. - */ -#define _PyTZINFO_HEAD \ - PyObject_HEAD \ - Py_hash_t hashcode; \ - char hastzinfo; /* boolean flag */ - -/* No _PyDateTime_BaseTZInfo is allocated; it's just to have something - * convenient to cast to, when getting at the hastzinfo member of objects - * starting with _PyTZINFO_HEAD. - */ -typedef struct -{ - _PyTZINFO_HEAD -} _PyDateTime_BaseTZInfo; - -/* All time objects are of PyDateTime_TimeType, but that can be allocated - * in two ways, with or without a tzinfo member. Without is the same as - * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an - * internal struct used to allocate the right amount of space for the - * "without" case. - */ -#define _PyDateTime_TIMEHEAD \ - _PyTZINFO_HEAD \ - unsigned char data[_PyDateTime_TIME_DATASIZE]; - -typedef struct -{ - _PyDateTime_TIMEHEAD -} _PyDateTime_BaseTime; /* hastzinfo false */ - -typedef struct -{ - _PyDateTime_TIMEHEAD - unsigned char fold; - PyObject *tzinfo; -} PyDateTime_Time; /* hastzinfo true */ - - -/* All datetime objects are of PyDateTime_DateTimeType, but that can be - * allocated in two ways too, just like for time objects above. In addition, - * the plain date type is a base class for datetime, so it must also have - * a hastzinfo member (although it's unused there). - */ -typedef struct -{ - _PyTZINFO_HEAD - unsigned char data[_PyDateTime_DATE_DATASIZE]; -} PyDateTime_Date; - -#define _PyDateTime_DATETIMEHEAD \ - _PyTZINFO_HEAD \ - unsigned char data[_PyDateTime_DATETIME_DATASIZE]; - -typedef struct -{ - _PyDateTime_DATETIMEHEAD -} _PyDateTime_BaseDateTime; /* hastzinfo false */ - -typedef struct -{ - _PyDateTime_DATETIMEHEAD - unsigned char fold; - PyObject *tzinfo; -} PyDateTime_DateTime; /* hastzinfo true */ - - -/* Apply for date and datetime instances. */ - -// o is a pointer to a time or a datetime object. -#define _PyDateTime_HAS_TZINFO(o) (((_PyDateTime_BaseTZInfo *)(o))->hastzinfo) - -#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)(o))->data[0] << 8) | \ - ((PyDateTime_Date*)(o))->data[1]) -#define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)(o))->data[2]) -#define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)(o))->data[3]) - -#define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)(o))->data[4]) -#define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)(o))->data[5]) -#define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)(o))->data[6]) -#define PyDateTime_DATE_GET_MICROSECOND(o) \ - ((((PyDateTime_DateTime*)(o))->data[7] << 16) | \ - (((PyDateTime_DateTime*)(o))->data[8] << 8) | \ - ((PyDateTime_DateTime*)(o))->data[9]) -#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)(o))->fold) -#define PyDateTime_DATE_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO((o)) ? \ - ((PyDateTime_DateTime *)(o))->tzinfo : Py_None) - -/* Apply for time instances. */ -#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)(o))->data[0]) -#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)(o))->data[1]) -#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)(o))->data[2]) -#define PyDateTime_TIME_GET_MICROSECOND(o) \ - ((((PyDateTime_Time*)(o))->data[3] << 16) | \ - (((PyDateTime_Time*)(o))->data[4] << 8) | \ - ((PyDateTime_Time*)(o))->data[5]) -#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)(o))->fold) -#define PyDateTime_TIME_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO(o) ? \ - ((PyDateTime_Time *)(o))->tzinfo : Py_None) - -/* Apply for time delta instances */ -#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)(o))->days) -#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)(o))->seconds) -#define PyDateTime_DELTA_GET_MICROSECONDS(o) \ - (((PyDateTime_Delta*)(o))->microseconds) - - -/* Define structure for C API. */ -typedef struct { - /* type objects */ - PyTypeObject *DateType; - PyTypeObject *DateTimeType; - PyTypeObject *TimeType; - PyTypeObject *DeltaType; - PyTypeObject *TZInfoType; - - /* singletons */ - PyObject *TimeZone_UTC; - - /* constructors */ - PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); - PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, - PyObject*, PyTypeObject*); - PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); - PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); - PyObject *(*TimeZone_FromTimeZone)(PyObject *offset, PyObject *name); - - /* constructors for the DB API */ - PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); - PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); - - /* PEP 495 constructors */ - PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int, - PyObject*, int, PyTypeObject*); - PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*); - -} PyDateTime_CAPI; - -#define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" - - -/* This block is only used as part of the public API and should not be - * included in _datetimemodule.c, which does not use the C API capsule. - * See bpo-35081 for more details. - * */ -#ifndef _PY_DATETIME_IMPL -/* Define global variable for the C API and a macro for setting it. */ -static PyDateTime_CAPI *PyDateTimeAPI = NULL; - -#define PyDateTime_IMPORT \ - PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) - -/* Macro for access to the UTC singleton */ -#define PyDateTime_TimeZone_UTC PyDateTimeAPI->TimeZone_UTC - -/* Macros for type checking when not building the Python core. */ -#define PyDate_Check(op) PyObject_TypeCheck((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_IS_TYPE((op), PyDateTimeAPI->DateTimeType) - -#define PyTime_Check(op) PyObject_TypeCheck((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_IS_TYPE((op), PyDateTimeAPI->DeltaType) - -#define PyTZInfo_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->TZInfoType) -#define PyTZInfo_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->TZInfoType) - - -/* Macros for accessing constructors in a simplified fashion. */ -#define PyDate_FromDate(year, month, day) \ - PyDateTimeAPI->Date_FromDate((year), (month), (day), PyDateTimeAPI->DateType) - -#define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \ - PyDateTimeAPI->DateTime_FromDateAndTime((year), (month), (day), (hour), \ - (min), (sec), (usec), Py_None, PyDateTimeAPI->DateTimeType) - -#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \ - PyDateTimeAPI->DateTime_FromDateAndTimeAndFold((year), (month), (day), (hour), \ - (min), (sec), (usec), Py_None, (fold), PyDateTimeAPI->DateTimeType) - -#define PyTime_FromTime(hour, minute, second, usecond) \ - PyDateTimeAPI->Time_FromTime((hour), (minute), (second), (usecond), \ - Py_None, PyDateTimeAPI->TimeType) - -#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \ - PyDateTimeAPI->Time_FromTimeAndFold((hour), (minute), (second), (usecond), \ - Py_None, (fold), PyDateTimeAPI->TimeType) - -#define PyDelta_FromDSU(days, seconds, useconds) \ - PyDateTimeAPI->Delta_FromDelta((days), (seconds), (useconds), 1, \ - PyDateTimeAPI->DeltaType) - -#define PyTimeZone_FromOffset(offset) \ - PyDateTimeAPI->TimeZone_FromTimeZone((offset), NULL) - -#define PyTimeZone_FromOffsetAndName(offset, name) \ - PyDateTimeAPI->TimeZone_FromTimeZone((offset), (name)) - -/* Macros supporting the DB API. */ -#define PyDateTime_FromTimestamp(args) \ - PyDateTimeAPI->DateTime_FromTimestamp( \ - (PyObject*) (PyDateTimeAPI->DateTimeType), (args), NULL) - -#define PyDate_FromTimestamp(args) \ - PyDateTimeAPI->Date_FromTimestamp( \ - (PyObject*) (PyDateTimeAPI->DateType), (args)) - -#endif /* !defined(_PY_DATETIME_IMPL) */ - -#ifdef __cplusplus -} -#endif -#endif -#endif /* !Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/descrobject.h b/Python314_4_x86_Template/include/descrobject.h deleted file mode 100644 index fd66d17b4..000000000 --- a/Python314_4_x86_Template/include/descrobject.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Descriptors */ -#ifndef Py_DESCROBJECT_H -#define Py_DESCROBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef PyObject *(*getter)(PyObject *, void *); -typedef int (*setter)(PyObject *, PyObject *, void *); - -struct PyGetSetDef { - const char *name; - getter get; - setter set; - const char *doc; - void *closure; -}; - -PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type; -PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; -PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; -PyAPI_DATA(PyTypeObject) PyMethodDescr_Type; -PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; -PyAPI_DATA(PyTypeObject) PyDictProxy_Type; -PyAPI_DATA(PyTypeObject) PyProperty_Type; - -PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); -PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); -PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, PyMemberDef *); -PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, PyGetSetDef *); - -PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); -PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); - - -/* An array of PyMemberDef structures defines the name, type and offset - of selected members of a C structure. These can be read by - PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY - flag is set). The array must be terminated with an entry whose name - pointer is NULL. */ -struct PyMemberDef { - const char *name; - int type; - Py_ssize_t offset; - int flags; - const char *doc; -}; - -// These constants used to be in structmember.h, not prefixed by Py_. -// (structmember.h now has aliases to the new names.) - -/* Types */ -#define Py_T_SHORT 0 -#define Py_T_INT 1 -#define Py_T_LONG 2 -#define Py_T_FLOAT 3 -#define Py_T_DOUBLE 4 -#define Py_T_STRING 5 -#define _Py_T_OBJECT 6 // Deprecated, use Py_T_OBJECT_EX instead -/* the ordering here is weird for binary compatibility */ -#define Py_T_CHAR 7 /* 1-character string */ -#define Py_T_BYTE 8 /* 8-bit signed int */ -/* unsigned variants: */ -#define Py_T_UBYTE 9 -#define Py_T_USHORT 10 -#define Py_T_UINT 11 -#define Py_T_ULONG 12 - -/* Added by Jack: strings contained in the structure */ -#define Py_T_STRING_INPLACE 13 - -/* Added by Lillo: bools contained in the structure (assumed char) */ -#define Py_T_BOOL 14 - -#define Py_T_OBJECT_EX 16 -#define Py_T_LONGLONG 17 -#define Py_T_ULONGLONG 18 - -#define Py_T_PYSSIZET 19 /* Py_ssize_t */ -#define _Py_T_NONE 20 // Deprecated. Value is always None. - -/* Flags */ -#define Py_READONLY 1 -#define Py_AUDIT_READ 2 // Added in 3.10, harmless no-op before that -#define _Py_WRITE_RESTRICTED 4 // Deprecated, no-op. Do not reuse the value. -#define Py_RELATIVE_OFFSET 8 - -PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, PyMemberDef *); -PyAPI_FUNC(int) PyMember_SetOne(char *, PyMemberDef *, PyObject *); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_DESCROBJECT_H -# include "cpython/descrobject.h" -# undef Py_CPYTHON_DESCROBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_DESCROBJECT_H */ diff --git a/Python314_4_x86_Template/include/dictobject.h b/Python314_4_x86_Template/include/dictobject.h deleted file mode 100644 index 1bbeec1ab..000000000 --- a/Python314_4_x86_Template/include/dictobject.h +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef Py_DICTOBJECT_H -#define Py_DICTOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Dictionary object type -- mapping from hashable object to object */ - -/* The distribution includes a separate file, Objects/dictnotes.txt, - describing explorations into dictionary design and optimization. - It covers typical dictionary use patterns, the parameters for - tuning dictionaries, and several ideas for possible optimizations. -*/ - -PyAPI_DATA(PyTypeObject) PyDict_Type; - -#define PyDict_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) -#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); -PyAPI_FUNC(PyObject *) PyDict_GetItemWithError(PyObject *mp, PyObject *key); -PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item); -PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); -PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); -PyAPI_FUNC(int) PyDict_Next( - PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value); -PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp); -PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp); -PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp); -PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp); -PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp); -PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key); - -/* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */ -PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other); - -/* PyDict_Merge updates/merges from a mapping object (an object that - supports PyMapping_Keys() and PyObject_GetItem()). If override is true, - the last occurrence of a key wins, else the first. The Python - dict.update(other) is equivalent to PyDict_Merge(dict, other, 1). -*/ -PyAPI_FUNC(int) PyDict_Merge(PyObject *mp, - PyObject *other, - int override); - -/* PyDict_MergeFromSeq2 updates/merges from an iterable object producing - iterable objects of length 2. If override is true, the last occurrence - of a key wins, else the first. The Python dict constructor dict(seq2) - is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1). -*/ -PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d, - PyObject *seq2, - int override); - -PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key); -PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item); -PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000 -// Return the object from dictionary *op* which has a key *key*. -// - If the key is present, set *result to a new strong reference to the value -// and return 1. -// - If the key is missing, set *result to NULL and return 0 . -// - On error, raise an exception and return -1. -PyAPI_FUNC(int) PyDict_GetItemRef(PyObject *mp, PyObject *key, PyObject **result); -PyAPI_FUNC(int) PyDict_GetItemStringRef(PyObject *mp, const char *key, PyObject **result); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 -PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *); -#endif - -/* Dictionary (keys, values, items) views */ - -PyAPI_DATA(PyTypeObject) PyDictKeys_Type; -PyAPI_DATA(PyTypeObject) PyDictValues_Type; -PyAPI_DATA(PyTypeObject) PyDictItems_Type; - -#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type) -#define PyDictValues_Check(op) PyObject_TypeCheck((op), &PyDictValues_Type) -#define PyDictItems_Check(op) PyObject_TypeCheck((op), &PyDictItems_Type) -/* This excludes Values, since they are not sets. */ -# define PyDictViewSet_Check(op) \ - (PyDictKeys_Check(op) || PyDictItems_Check(op)) - -/* Dictionary (key, value, items) iterators */ - -PyAPI_DATA(PyTypeObject) PyDictIterKey_Type; -PyAPI_DATA(PyTypeObject) PyDictIterValue_Type; -PyAPI_DATA(PyTypeObject) PyDictIterItem_Type; - -PyAPI_DATA(PyTypeObject) PyDictRevIterKey_Type; -PyAPI_DATA(PyTypeObject) PyDictRevIterItem_Type; -PyAPI_DATA(PyTypeObject) PyDictRevIterValue_Type; - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_DICTOBJECT_H -# include "cpython/dictobject.h" -# undef Py_CPYTHON_DICTOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_DICTOBJECT_H */ diff --git a/Python314_4_x86_Template/include/dynamic_annotations.h b/Python314_4_x86_Template/include/dynamic_annotations.h deleted file mode 100644 index 4d4def9bf..000000000 --- a/Python314_4_x86_Template/include/dynamic_annotations.h +++ /dev/null @@ -1,499 +0,0 @@ -/* Copyright (c) 2008-2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Kostya Serebryany - * Copied to CPython by Jeffrey Yasskin, with all macros renamed to - * start with _Py_ to avoid colliding with users embedding Python, and - * with deprecated macros removed. - */ - -/* This file defines dynamic annotations for use with dynamic analysis - tool such as valgrind, PIN, etc. - - Dynamic annotation is a source code annotation that affects - the generated code (that is, the annotation is not a comment). - Each such annotation is attached to a particular - instruction and/or to a particular object (address) in the program. - - The annotations that should be used by users are macros in all upper-case - (e.g., _Py_ANNOTATE_NEW_MEMORY). - - Actual implementation of these macros may differ depending on the - dynamic analysis tool being used. - - See https://code.google.com/p/data-race-test/ for more information. - - This file supports the following dynamic analysis tools: - - None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero). - Macros are defined empty. - - ThreadSanitizer, Helgrind, DRD (DYNAMIC_ANNOTATIONS_ENABLED is 1). - Macros are defined as calls to non-inlinable empty functions - that are intercepted by Valgrind. */ - -#ifndef __DYNAMIC_ANNOTATIONS_H__ -#define __DYNAMIC_ANNOTATIONS_H__ - -#ifndef DYNAMIC_ANNOTATIONS_ENABLED -# define DYNAMIC_ANNOTATIONS_ENABLED 0 -#endif - -#if DYNAMIC_ANNOTATIONS_ENABLED != 0 - - /* ------------------------------------------------------------- - Annotations useful when implementing condition variables such as CondVar, - using conditional critical sections (Await/LockWhen) and when constructing - user-defined synchronization mechanisms. - - The annotations _Py_ANNOTATE_HAPPENS_BEFORE() and - _Py_ANNOTATE_HAPPENS_AFTER() can be used to define happens-before arcs in - user-defined synchronization mechanisms: the race detector will infer an - arc from the former to the latter when they share the same argument - pointer. - - Example 1 (reference counting): - - void Unref() { - _Py_ANNOTATE_HAPPENS_BEFORE(&refcount_); - if (AtomicDecrementByOne(&refcount_) == 0) { - _Py_ANNOTATE_HAPPENS_AFTER(&refcount_); - delete this; - } - } - - Example 2 (message queue): - - void MyQueue::Put(Type *e) { - MutexLock lock(&mu_); - _Py_ANNOTATE_HAPPENS_BEFORE(e); - PutElementIntoMyQueue(e); - } - - Type *MyQueue::Get() { - MutexLock lock(&mu_); - Type *e = GetElementFromMyQueue(); - _Py_ANNOTATE_HAPPENS_AFTER(e); - return e; - } - - Note: when possible, please use the existing reference counting and message - queue implementations instead of inventing new ones. */ - - /* Report that wait on the condition variable at address "cv" has succeeded - and the lock at address "lock" is held. */ -#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \ - AnnotateCondVarWait(__FILE__, __LINE__, cv, lock) - - /* Report that wait on the condition variable at "cv" has succeeded. Variant - w/o lock. */ -#define _Py_ANNOTATE_CONDVAR_WAIT(cv) \ - AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL) - - /* Report that we are about to signal on the condition variable at address - "cv". */ -#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \ - AnnotateCondVarSignal(__FILE__, __LINE__, cv) - - /* Report that we are about to signal_all on the condition variable at "cv". */ -#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \ - AnnotateCondVarSignalAll(__FILE__, __LINE__, cv) - - /* Annotations for user-defined synchronization mechanisms. */ -#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj) -#define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj) - - /* Report that the bytes in the range [pointer, pointer+size) are about - to be published safely. The race checker will create a happens-before - arc from the call _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to - subsequent accesses to this memory. - Note: this annotation may not work properly if the race detector uses - sampling, i.e. does not observe all memory accesses. - */ -#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \ - AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size) - - /* Instruct the tool to create a happens-before arc between mu->Unlock() and - mu->Lock(). This annotation may slow down the race detector and hide real - races. Normally it is used only when it would be difficult to annotate each - of the mutex's critical sections individually using the annotations above. - This annotation makes sense only for hybrid race detectors. For pure - happens-before detectors this is a no-op. For more details see - https://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */ -#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \ - AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu) - - /* ------------------------------------------------------------- - Annotations useful when defining memory allocators, or when memory that - was protected in one way starts to be protected in another. */ - - /* Report that a new memory at "address" of size "size" has been allocated. - This might be used when the memory has been retrieved from a free list and - is about to be reused, or when the locking discipline for a variable - changes. */ -#define _Py_ANNOTATE_NEW_MEMORY(address, size) \ - AnnotateNewMemory(__FILE__, __LINE__, address, size) - - /* ------------------------------------------------------------- - Annotations useful when defining FIFO queues that transfer data between - threads. */ - - /* Report that the producer-consumer queue (such as ProducerConsumerQueue) at - address "pcq" has been created. The _Py_ANNOTATE_PCQ_* annotations should - be used only for FIFO queues. For non-FIFO queues use - _Py_ANNOTATE_HAPPENS_BEFORE (for put) and _Py_ANNOTATE_HAPPENS_AFTER (for - get). */ -#define _Py_ANNOTATE_PCQ_CREATE(pcq) \ - AnnotatePCQCreate(__FILE__, __LINE__, pcq) - - /* Report that the queue at address "pcq" is about to be destroyed. */ -#define _Py_ANNOTATE_PCQ_DESTROY(pcq) \ - AnnotatePCQDestroy(__FILE__, __LINE__, pcq) - - /* Report that we are about to put an element into a FIFO queue at address - "pcq". */ -#define _Py_ANNOTATE_PCQ_PUT(pcq) \ - AnnotatePCQPut(__FILE__, __LINE__, pcq) - - /* Report that we've just got an element from a FIFO queue at address "pcq". */ -#define _Py_ANNOTATE_PCQ_GET(pcq) \ - AnnotatePCQGet(__FILE__, __LINE__, pcq) - - /* ------------------------------------------------------------- - Annotations that suppress errors. It is usually better to express the - program's synchronization using the other annotations, but these can - be used when all else fails. */ - - /* Report that we may have a benign race at "pointer", with size - "sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the - point where "pointer" has been allocated, preferably close to the point - where the race happens. See also _Py_ANNOTATE_BENIGN_RACE_STATIC. */ -#define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \ - AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \ - sizeof(*(pointer)), description) - - /* Same as _Py_ANNOTATE_BENIGN_RACE(address, description), but applies to - the memory range [address, address+size). */ -#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ - AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description) - - /* Request the analysis tool to ignore all reads in the current thread - until _Py_ANNOTATE_IGNORE_READS_END is called. - Useful to ignore intentional racey reads, while still checking - other reads and all writes. - See also _Py_ANNOTATE_UNPROTECTED_READ. */ -#define _Py_ANNOTATE_IGNORE_READS_BEGIN() \ - AnnotateIgnoreReadsBegin(__FILE__, __LINE__) - - /* Stop ignoring reads. */ -#define _Py_ANNOTATE_IGNORE_READS_END() \ - AnnotateIgnoreReadsEnd(__FILE__, __LINE__) - - /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */ -#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \ - AnnotateIgnoreWritesBegin(__FILE__, __LINE__) - - /* Stop ignoring writes. */ -#define _Py_ANNOTATE_IGNORE_WRITES_END() \ - AnnotateIgnoreWritesEnd(__FILE__, __LINE__) - - /* Start ignoring all memory accesses (reads and writes). */ -#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ - do {\ - _Py_ANNOTATE_IGNORE_READS_BEGIN();\ - _Py_ANNOTATE_IGNORE_WRITES_BEGIN();\ - }while(0)\ - - /* Stop ignoring all memory accesses. */ -#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \ - do {\ - _Py_ANNOTATE_IGNORE_WRITES_END();\ - _Py_ANNOTATE_IGNORE_READS_END();\ - }while(0)\ - - /* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events: - RWLOCK* and CONDVAR*. */ -#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \ - AnnotateIgnoreSyncBegin(__FILE__, __LINE__) - - /* Stop ignoring sync events. */ -#define _Py_ANNOTATE_IGNORE_SYNC_END() \ - AnnotateIgnoreSyncEnd(__FILE__, __LINE__) - - - /* Enable (enable!=0) or disable (enable==0) race detection for all threads. - This annotation could be useful if you want to skip expensive race analysis - during some period of program execution, e.g. during initialization. */ -#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \ - AnnotateEnableRaceDetection(__FILE__, __LINE__, enable) - - /* ------------------------------------------------------------- - Annotations useful for debugging. */ - - /* Request to trace every access to "address". */ -#define _Py_ANNOTATE_TRACE_MEMORY(address) \ - AnnotateTraceMemory(__FILE__, __LINE__, address) - - /* Report the current thread name to a race detector. */ -#define _Py_ANNOTATE_THREAD_NAME(name) \ - AnnotateThreadName(__FILE__, __LINE__, name) - - /* ------------------------------------------------------------- - Annotations useful when implementing locks. They are not - normally needed by modules that merely use locks. - The "lock" argument is a pointer to the lock object. */ - - /* Report that a lock has been created at address "lock". */ -#define _Py_ANNOTATE_RWLOCK_CREATE(lock) \ - AnnotateRWLockCreate(__FILE__, __LINE__, lock) - - /* Report that the lock at address "lock" is about to be destroyed. */ -#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \ - AnnotateRWLockDestroy(__FILE__, __LINE__, lock) - - /* Report that the lock at address "lock" has been acquired. - is_w=1 for writer lock, is_w=0 for reader lock. */ -#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ - AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w) - - /* Report that the lock at address "lock" is about to be released. */ -#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ - AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w) - - /* ------------------------------------------------------------- - Annotations useful when implementing barriers. They are not - normally needed by modules that merely use barriers. - The "barrier" argument is a pointer to the barrier object. */ - - /* Report that the "barrier" has been initialized with initial "count". - If 'reinitialization_allowed' is true, initialization is allowed to happen - multiple times w/o calling barrier_destroy() */ -#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \ - AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \ - reinitialization_allowed) - - /* Report that we are about to enter barrier_wait("barrier"). */ -#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \ - AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier) - - /* Report that we just exited barrier_wait("barrier"). */ -#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \ - AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier) - - /* Report that the "barrier" has been destroyed. */ -#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \ - AnnotateBarrierDestroy(__FILE__, __LINE__, barrier) - - /* ------------------------------------------------------------- - Annotations useful for testing race detectors. */ - - /* Report that we expect a race on the variable at "address". - Use only in unit tests for a race detector. */ -#define _Py_ANNOTATE_EXPECT_RACE(address, description) \ - AnnotateExpectRace(__FILE__, __LINE__, address, description) - - /* A no-op. Insert where you like to test the interceptors. */ -#define _Py_ANNOTATE_NO_OP(arg) \ - AnnotateNoOp(__FILE__, __LINE__, arg) - - /* Force the race detector to flush its state. The actual effect depends on - * the implementation of the detector. */ -#define _Py_ANNOTATE_FLUSH_STATE() \ - AnnotateFlushState(__FILE__, __LINE__) - - -#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ - -#define _Py_ANNOTATE_RWLOCK_CREATE(lock) /* empty */ -#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) /* empty */ -#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) /* empty */ -#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) /* empty */ -#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) /* */ -#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) /* empty */ -#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) /* empty */ -#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) /* empty */ -#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) /* empty */ -#define _Py_ANNOTATE_CONDVAR_WAIT(cv) /* empty */ -#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) /* empty */ -#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) /* empty */ -#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) /* empty */ -#define _Py_ANNOTATE_HAPPENS_AFTER(obj) /* empty */ -#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) /* empty */ -#define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size) /* empty */ -#define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size) /* empty */ -#define _Py_ANNOTATE_PCQ_CREATE(pcq) /* empty */ -#define _Py_ANNOTATE_PCQ_DESTROY(pcq) /* empty */ -#define _Py_ANNOTATE_PCQ_PUT(pcq) /* empty */ -#define _Py_ANNOTATE_PCQ_GET(pcq) /* empty */ -#define _Py_ANNOTATE_NEW_MEMORY(address, size) /* empty */ -#define _Py_ANNOTATE_EXPECT_RACE(address, description) /* empty */ -#define _Py_ANNOTATE_BENIGN_RACE(address, description) /* empty */ -#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */ -#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */ -#define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) /* empty */ -#define _Py_ANNOTATE_TRACE_MEMORY(arg) /* empty */ -#define _Py_ANNOTATE_THREAD_NAME(name) /* empty */ -#define _Py_ANNOTATE_IGNORE_READS_BEGIN() /* empty */ -#define _Py_ANNOTATE_IGNORE_READS_END() /* empty */ -#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() /* empty */ -#define _Py_ANNOTATE_IGNORE_WRITES_END() /* empty */ -#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() /* empty */ -#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() /* empty */ -#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() /* empty */ -#define _Py_ANNOTATE_IGNORE_SYNC_END() /* empty */ -#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) /* empty */ -#define _Py_ANNOTATE_NO_OP(arg) /* empty */ -#define _Py_ANNOTATE_FLUSH_STATE() /* empty */ - -#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ - -/* Use the macros above rather than using these functions directly. */ -#ifdef __cplusplus -extern "C" { -#endif -void AnnotateRWLockCreate(const char *file, int line, - const volatile void *lock); -void AnnotateRWLockDestroy(const char *file, int line, - const volatile void *lock); -void AnnotateRWLockAcquired(const char *file, int line, - const volatile void *lock, long is_w); -void AnnotateRWLockReleased(const char *file, int line, - const volatile void *lock, long is_w); -void AnnotateBarrierInit(const char *file, int line, - const volatile void *barrier, long count, - long reinitialization_allowed); -void AnnotateBarrierWaitBefore(const char *file, int line, - const volatile void *barrier); -void AnnotateBarrierWaitAfter(const char *file, int line, - const volatile void *barrier); -void AnnotateBarrierDestroy(const char *file, int line, - const volatile void *barrier); -void AnnotateCondVarWait(const char *file, int line, - const volatile void *cv, - const volatile void *lock); -void AnnotateCondVarSignal(const char *file, int line, - const volatile void *cv); -void AnnotateCondVarSignalAll(const char *file, int line, - const volatile void *cv); -void AnnotatePublishMemoryRange(const char *file, int line, - const volatile void *address, - long size); -void AnnotateUnpublishMemoryRange(const char *file, int line, - const volatile void *address, - long size); -void AnnotatePCQCreate(const char *file, int line, - const volatile void *pcq); -void AnnotatePCQDestroy(const char *file, int line, - const volatile void *pcq); -void AnnotatePCQPut(const char *file, int line, - const volatile void *pcq); -void AnnotatePCQGet(const char *file, int line, - const volatile void *pcq); -void AnnotateNewMemory(const char *file, int line, - const volatile void *address, - long size); -void AnnotateExpectRace(const char *file, int line, - const volatile void *address, - const char *description); -void AnnotateBenignRace(const char *file, int line, - const volatile void *address, - const char *description); -void AnnotateBenignRaceSized(const char *file, int line, - const volatile void *address, - long size, - const char *description); -void AnnotateMutexIsUsedAsCondVar(const char *file, int line, - const volatile void *mu); -void AnnotateTraceMemory(const char *file, int line, - const volatile void *arg); -void AnnotateThreadName(const char *file, int line, - const char *name); -void AnnotateIgnoreReadsBegin(const char *file, int line); -void AnnotateIgnoreReadsEnd(const char *file, int line); -void AnnotateIgnoreWritesBegin(const char *file, int line); -void AnnotateIgnoreWritesEnd(const char *file, int line); -void AnnotateEnableRaceDetection(const char *file, int line, int enable); -void AnnotateNoOp(const char *file, int line, - const volatile void *arg); -void AnnotateFlushState(const char *file, int line); - -/* Return non-zero value if running under valgrind. - - If "valgrind.h" is included into dynamic_annotations.c, - the regular valgrind mechanism will be used. - See http://valgrind.org/docs/manual/manual-core-adv.html about - RUNNING_ON_VALGRIND and other valgrind "client requests". - The file "valgrind.h" may be obtained by doing - svn co svn://svn.valgrind.org/valgrind/trunk/include - - If for some reason you can't use "valgrind.h" or want to fake valgrind, - there are two ways to make this function return non-zero: - - Use environment variable: export RUNNING_ON_VALGRIND=1 - - Make your tool intercept the function RunningOnValgrind() and - change its return value. - */ -int RunningOnValgrind(void); - -#ifdef __cplusplus -} -#endif - -#if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus) - - /* _Py_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads. - - Instead of doing - _Py_ANNOTATE_IGNORE_READS_BEGIN(); - ... = x; - _Py_ANNOTATE_IGNORE_READS_END(); - one can use - ... = _Py_ANNOTATE_UNPROTECTED_READ(x); */ - template <class T> - inline T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) { - _Py_ANNOTATE_IGNORE_READS_BEGIN(); - T res = x; - _Py_ANNOTATE_IGNORE_READS_END(); - return res; - } - /* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */ -#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ - namespace { \ - class static_var ## _annotator { \ - public: \ - static_var ## _annotator() { \ - _Py_ANNOTATE_BENIGN_RACE_SIZED(&static_var, \ - sizeof(static_var), \ - # static_var ": " description); \ - } \ - }; \ - static static_var ## _annotator the ## static_var ## _annotator;\ - } -#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */ - -#define _Py_ANNOTATE_UNPROTECTED_READ(x) (x) -#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) /* empty */ - -#endif /* DYNAMIC_ANNOTATIONS_ENABLED */ - -#endif /* __DYNAMIC_ANNOTATIONS_H__ */ diff --git a/Python314_4_x86_Template/include/enumobject.h b/Python314_4_x86_Template/include/enumobject.h deleted file mode 100644 index c14dbfc8c..000000000 --- a/Python314_4_x86_Template/include/enumobject.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef Py_ENUMOBJECT_H -#define Py_ENUMOBJECT_H - -/* Enumerate Object */ - -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyEnum_Type; -PyAPI_DATA(PyTypeObject) PyReversed_Type; - -#ifdef __cplusplus -} -#endif - -#endif /* !Py_ENUMOBJECT_H */ diff --git a/Python314_4_x86_Template/include/errcode.h b/Python314_4_x86_Template/include/errcode.h deleted file mode 100644 index dac5cf068..000000000 --- a/Python314_4_x86_Template/include/errcode.h +++ /dev/null @@ -1,45 +0,0 @@ -// Error codes passed around between file input, tokenizer, parser and -// interpreter. This is necessary so we can turn them into Python -// exceptions at a higher level. Note that some errors have a -// slightly different meaning when passed from the tokenizer to the -// parser than when passed from the parser to the interpreter; e.g. -// the parser only returns E_EOF when it hits EOF immediately, and it -// never returns E_OK. -// -// The public PyRun_InteractiveOneObjectEx() function can return E_EOF, -// same as its variants: -// -// * PyRun_InteractiveOneObject() -// * PyRun_InteractiveOneFlags() -// * PyRun_InteractiveOne() - -#ifndef Py_ERRCODE_H -#define Py_ERRCODE_H -#ifdef __cplusplus -extern "C" { -#endif - -#define E_OK 10 /* No error */ -#define E_EOF 11 /* End Of File */ -#define E_INTR 12 /* Interrupted */ -#define E_TOKEN 13 /* Bad token */ -#define E_SYNTAX 14 /* Syntax error */ -#define E_NOMEM 15 /* Ran out of memory */ -#define E_DONE 16 /* Parsing complete */ -#define E_ERROR 17 /* Execution error */ -#define E_TABSPACE 18 /* Inconsistent mixing of tabs and spaces */ -#define E_OVERFLOW 19 /* Node had too many children */ -#define E_TOODEEP 20 /* Too many indentation levels */ -#define E_DEDENT 21 /* No matching outer block for dedent */ -#define E_DECODE 22 /* Error in decoding into Unicode */ -#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_BADSINGLE 27 /* Ill-formed single statement input */ -#define E_INTERACT_STOP 28 /* Interactive mode stopped tokenization */ -#define E_COLUMNOVERFLOW 29 /* Column offset overflow */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ERRCODE_H */ diff --git a/Python314_4_x86_Template/include/exports.h b/Python314_4_x86_Template/include/exports.h deleted file mode 100644 index 0c646d5be..000000000 --- a/Python314_4_x86_Template/include/exports.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef Py_EXPORTS_H -#define Py_EXPORTS_H - -/* Declarations for symbol visibility. - - PyAPI_FUNC(type): Declares a public Python API function and return type - PyAPI_DATA(type): Declares public Python data and its type - PyMODINIT_FUNC: A Python module init function. If these functions are - inside the Python core, they are private to the core. - If in an extension module, it may be declared with - external linkage depending on the platform. - - As a number of platforms support/require "__declspec(dllimport/dllexport)", - we support a HAVE_DECLSPEC_DLL macro to save duplication. -*/ - -/* - All windows ports, except cygwin, are handled in PC/pyconfig.h. - - Cygwin is the only other autoconf platform requiring special - linkage handling and it uses __declspec(). -*/ -#if defined(__CYGWIN__) -# define HAVE_DECLSPEC_DLL -#endif - -#if defined(_WIN32) || defined(__CYGWIN__) - #if defined(Py_ENABLE_SHARED) - #define Py_IMPORTED_SYMBOL __declspec(dllimport) - #define Py_EXPORTED_SYMBOL __declspec(dllexport) - #define Py_LOCAL_SYMBOL - #else - #define Py_IMPORTED_SYMBOL - #define Py_EXPORTED_SYMBOL - #define Py_LOCAL_SYMBOL - #endif -#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. - */ - #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\ - (defined(__clang__) && _Py__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 - -/* 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) 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 Py_EXPORTED_SYMBOL PyObject* -# else /* __CYGWIN__ */ -# define PyMODINIT_FUNC PyObject* -# endif /* __CYGWIN__ */ -# else /* Py_BUILD_CORE */ - /* Building an extension module, or an embedded situation */ - /* public Python functions and data are imported */ - /* Under Cygwin, auto-import functions to prevent compilation */ - /* 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) Py_IMPORTED_SYMBOL RTYPE -# endif /* !__CYGWIN__ */ -# 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" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -# endif /* Py_BUILD_CORE */ -# endif /* HAVE_DECLSPEC_DLL */ -#endif /* Py_ENABLE_SHARED */ - -/* If no external linkage macros defined by now, create defaults */ -#ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyMODINIT_FUNC -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -#endif - - -#endif /* Py_EXPORTS_H */ diff --git a/Python314_4_x86_Template/include/fileobject.h b/Python314_4_x86_Template/include/fileobject.h deleted file mode 100644 index 6a6d11409..000000000 --- a/Python314_4_x86_Template/include/fileobject.h +++ /dev/null @@ -1,41 +0,0 @@ -/* File object interface (what's left of it -- see io.py) */ - -#ifndef Py_FILEOBJECT_H -#define Py_FILEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#define PY_STDIOTEXTMODE "b" - -PyAPI_FUNC(PyObject *) PyFile_FromFd(int, const char *, const char *, int, - const char *, const char *, - const char *, int); -PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int); -PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int); -PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *); -PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); - -/* The default encoding used by the platform file system APIs - If non-NULL, this is different than the default encoding for strings -*/ -Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; -#endif -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UTF8Mode; -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_FILEOBJECT_H -# include "cpython/fileobject.h" -# undef Py_CPYTHON_FILEOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_FILEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/fileutils.h b/Python314_4_x86_Template/include/fileutils.h deleted file mode 100644 index 1509198e4..000000000 --- a/Python314_4_x86_Template/include/fileutils.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef Py_FILEUTILS_H -#define Py_FILEUTILS_H - -/******************************* - * stat() and fstat() fiddling * - *******************************/ - -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> // S_ISREG() -#elif defined(HAVE_STAT_H) -# include <stat.h> // S_ISREG() -#endif - -#ifndef S_IFMT - // VisualAge C/C++ Failed to Define MountType Field in sys/stat.h. -# define S_IFMT 0170000 -#endif -#ifndef S_IFLNK - // Windows doesn't define S_IFLNK, but posixmodule.c maps - // IO_REPARSE_TAG_SYMLINK to S_IFLNK. -# define S_IFLNK 0120000 -#endif -#ifndef S_ISREG -# define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) -#endif -#ifndef S_ISDIR -# define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) -#endif -#ifndef S_ISCHR -# define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) -#endif -#ifndef S_ISLNK -# define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK) -#endif - - -// Move this down here since some C++ #include's don't like to be included -// inside an extern "C". -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_FUNC(wchar_t *) Py_DecodeLocale( - const char *arg, - size_t *size); - -PyAPI_FUNC(char*) Py_EncodeLocale( - const wchar_t *text, - size_t *error_pos); -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_FILEUTILS_H -# include "cpython/fileutils.h" -# undef Py_CPYTHON_FILEUTILS_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_FILEUTILS_H */ diff --git a/Python314_4_x86_Template/include/floatobject.h b/Python314_4_x86_Template/include/floatobject.h deleted file mode 100644 index 4d24a76ed..000000000 --- a/Python314_4_x86_Template/include/floatobject.h +++ /dev/null @@ -1,54 +0,0 @@ - -/* Float object interface */ - -/* -PyFloatObject represents a (double precision) floating-point number. -*/ - -#ifndef Py_FLOATOBJECT_H -#define Py_FLOATOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyFloat_Type; - -#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) -#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type) - -#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN) - -#define Py_RETURN_INF(sign) \ - do { \ - if (copysign(1., sign) == 1.) { \ - return PyFloat_FromDouble(Py_INFINITY); \ - } \ - else { \ - return PyFloat_FromDouble(-Py_INFINITY); \ - } \ - } while(0) - -PyAPI_FUNC(double) PyFloat_GetMax(void); -PyAPI_FUNC(double) PyFloat_GetMin(void); -PyAPI_FUNC(PyObject*) PyFloat_GetInfo(void); - -/* Return Python float from string PyObject. */ -PyAPI_FUNC(PyObject*) PyFloat_FromString(PyObject*); - -/* Return Python float from C double. */ -PyAPI_FUNC(PyObject*) PyFloat_FromDouble(double); - -/* Extract C double from Python float. The macro version trades safety for - speed. */ -PyAPI_FUNC(double) PyFloat_AsDouble(PyObject*); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_FLOATOBJECT_H -# include "cpython/floatobject.h" -# undef Py_CPYTHON_FLOATOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_FLOATOBJECT_H */ diff --git a/Python314_4_x86_Template/include/frameobject.h b/Python314_4_x86_Template/include/frameobject.h deleted file mode 100644 index adb628f63..000000000 --- a/Python314_4_x86_Template/include/frameobject.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Frame object interface */ - -#ifndef Py_FRAMEOBJECT_H -#define Py_FRAMEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#include "pyframe.h" - -#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 */ diff --git a/Python314_4_x86_Template/include/genericaliasobject.h b/Python314_4_x86_Template/include/genericaliasobject.h deleted file mode 100644 index cf002976b..000000000 --- a/Python314_4_x86_Template/include/genericaliasobject.h +++ /dev/null @@ -1,14 +0,0 @@ -// 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/Python314_4_x86_Template/include/import.h b/Python314_4_x86_Template/include/import.h deleted file mode 100644 index 24b23b911..000000000 --- a/Python314_4_x86_Template/include/import.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Module definition and import interface */ - -#ifndef Py_IMPORT_H -#define Py_IMPORT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(long) PyImport_GetMagicNumber(void); -PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); -PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( - const char *name, /* UTF-8 encoded string */ - PyObject *co - ); -PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx( - const char *name, /* UTF-8 encoded string */ - PyObject *co, - const char *pathname /* decoded from the filesystem encoding */ - ); -PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames( - const char *name, /* UTF-8 encoded string */ - PyObject *co, - const char *pathname, /* decoded from the filesystem encoding */ - const char *cpathname /* decoded from the filesystem encoding */ - ); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject( - PyObject *name, - PyObject *co, - PyObject *pathname, - PyObject *cpathname - ); -#endif -PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject *) PyImport_AddModuleObject( - PyObject *name - ); -#endif -PyAPI_FUNC(PyObject *) PyImport_AddModule( - const char *name /* UTF-8 encoded string */ - ); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(PyObject *) PyImport_AddModuleRef( - const char *name /* UTF-8 encoded string */ - ); -#endif -PyAPI_FUNC(PyObject *) PyImport_ImportModule( - const char *name /* UTF-8 encoded string */ - ); -Py_DEPRECATED(3.13) PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock( - const char *name /* UTF-8 encoded string */ - ); -PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel( - const char *name, /* UTF-8 encoded string */ - PyObject *globals, - PyObject *locals, - PyObject *fromlist, - int level - ); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( - PyObject *name, - PyObject *globals, - PyObject *locals, - PyObject *fromlist, - int level - ); -#endif - -#define PyImport_ImportModuleEx(n, g, l, f) \ - PyImport_ImportModuleLevel((n), (g), (l), (f), 0) - -PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); -PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); -PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( - PyObject *name - ); -#endif -PyAPI_FUNC(int) PyImport_ImportFrozenModule( - const char *name /* UTF-8 encoded string */ - ); - -PyAPI_FUNC(int) PyImport_AppendInittab( - const char *name, /* ASCII encoded string */ - PyObject* (*initfunc)(void) - ); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_IMPORT_H -# include "cpython/import.h" -# undef Py_CPYTHON_IMPORT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_IMPORT_H */ diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc.h deleted file mode 100644 index 821129e76..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc.h +++ /dev/null @@ -1,565 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023, Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_H -#define MIMALLOC_H - -#define MI_MALLOC_VERSION 212 // major + 2 digits minor - -// ------------------------------------------------------ -// Compiler specific attributes -// ------------------------------------------------------ - -#ifdef __cplusplus - #if (__cplusplus >= 201103L) || (_MSC_VER > 1900) // C++11 - #define mi_attr_noexcept noexcept - #else - #define mi_attr_noexcept throw() - #endif -#else - #define mi_attr_noexcept -#endif - -#if defined(__cplusplus) && (__cplusplus >= 201703) - #define mi_decl_nodiscard [[nodiscard]] -#elif (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) // includes clang, icc, and clang-cl - #define mi_decl_nodiscard __attribute__((warn_unused_result)) -#elif defined(_HAS_NODISCARD) - #define mi_decl_nodiscard _NODISCARD -#elif (_MSC_VER >= 1700) - #define mi_decl_nodiscard _Check_return_ -#else - #define mi_decl_nodiscard -#endif - -#if defined(_MSC_VER) || defined(__MINGW32__) - #if !defined(MI_SHARED_LIB) - #define mi_decl_export - #elif defined(MI_SHARED_LIB_EXPORT) - #define mi_decl_export __declspec(dllexport) - #else - #define mi_decl_export __declspec(dllimport) - #endif - #if defined(__MINGW32__) - #define mi_decl_restrict - #define mi_attr_malloc __attribute__((malloc)) - #else - #if (_MSC_VER >= 1900) && !defined(__EDG__) - #define mi_decl_restrict __declspec(allocator) __declspec(restrict) - #else - #define mi_decl_restrict __declspec(restrict) - #endif - #define mi_attr_malloc - #endif - #define mi_cdecl __cdecl - #define mi_attr_alloc_size(s) - #define mi_attr_alloc_size2(s1,s2) - #define mi_attr_alloc_align(p) -#elif defined(__GNUC__) // includes clang and icc - #if defined(MI_SHARED_LIB) && defined(MI_SHARED_LIB_EXPORT) - #define mi_decl_export __attribute__((visibility("default"))) - #else - #define mi_decl_export - #endif - #define mi_cdecl // leads to warnings... __attribute__((cdecl)) - #define mi_decl_restrict - #define mi_attr_malloc __attribute__((malloc)) - #if (defined(__clang_major__) && (__clang_major__ < 4)) || (__GNUC__ < 5) - #define mi_attr_alloc_size(s) - #define mi_attr_alloc_size2(s1,s2) - #define mi_attr_alloc_align(p) - #elif defined(__INTEL_COMPILER) - #define mi_attr_alloc_size(s) __attribute__((alloc_size(s))) - #define mi_attr_alloc_size2(s1,s2) __attribute__((alloc_size(s1,s2))) - #define mi_attr_alloc_align(p) - #else - #define mi_attr_alloc_size(s) __attribute__((alloc_size(s))) - #define mi_attr_alloc_size2(s1,s2) __attribute__((alloc_size(s1,s2))) - #define mi_attr_alloc_align(p) __attribute__((alloc_align(p))) - #endif -#else - #define mi_cdecl - #define mi_decl_export - #define mi_decl_restrict - #define mi_attr_malloc - #define mi_attr_alloc_size(s) - #define mi_attr_alloc_size2(s1,s2) - #define mi_attr_alloc_align(p) -#endif - -// ------------------------------------------------------ -// Includes -// ------------------------------------------------------ - -#include <stddef.h> // size_t -#include <stdbool.h> // bool -#include <stdint.h> // INTPTR_MAX - -#ifdef __cplusplus -extern "C" { -#endif - -// ------------------------------------------------------ -// Standard malloc interface -// ------------------------------------------------------ - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_malloc(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_calloc(size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(1,2); -mi_decl_nodiscard mi_decl_export void* mi_realloc(void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(2); -mi_decl_export void* mi_expand(void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(2); - -mi_decl_export void mi_free(void* p) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_strdup(const char* s) mi_attr_noexcept mi_attr_malloc; -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_strndup(const char* s, size_t n) mi_attr_noexcept mi_attr_malloc; -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_realpath(const char* fname, char* resolved_name) mi_attr_noexcept mi_attr_malloc; - -// ------------------------------------------------------ -// Extended functionality -// ------------------------------------------------------ -#define MI_SMALL_WSIZE_MAX (128) -#define MI_SMALL_SIZE_MAX (MI_SMALL_WSIZE_MAX*sizeof(void*)) - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_malloc_small(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_zalloc_small(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_zalloc(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_mallocn(size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(1,2); -mi_decl_nodiscard mi_decl_export void* mi_reallocn(void* p, size_t count, size_t size) mi_attr_noexcept mi_attr_alloc_size2(2,3); -mi_decl_nodiscard mi_decl_export void* mi_reallocf(void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(2); - -mi_decl_nodiscard mi_decl_export size_t mi_usable_size(const void* p) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export size_t mi_good_size(size_t size) mi_attr_noexcept; - - -// ------------------------------------------------------ -// Internals -// ------------------------------------------------------ - -typedef void (mi_cdecl mi_deferred_free_fun)(bool force, unsigned long long heartbeat, void* arg); -mi_decl_export void mi_register_deferred_free(mi_deferred_free_fun* deferred_free, void* arg) mi_attr_noexcept; - -typedef void (mi_cdecl mi_output_fun)(const char* msg, void* arg); -mi_decl_export void mi_register_output(mi_output_fun* out, void* arg) mi_attr_noexcept; - -typedef void (mi_cdecl mi_error_fun)(int err, void* arg); -mi_decl_export void mi_register_error(mi_error_fun* fun, void* arg); - -mi_decl_export void mi_collect(bool force) mi_attr_noexcept; -mi_decl_export int mi_version(void) mi_attr_noexcept; -mi_decl_export void mi_stats_reset(void) mi_attr_noexcept; -mi_decl_export void mi_stats_merge(void) mi_attr_noexcept; -mi_decl_export void mi_stats_print(void* out) mi_attr_noexcept; // backward compatibility: `out` is ignored and should be NULL -mi_decl_export void mi_stats_print_out(mi_output_fun* out, void* arg) mi_attr_noexcept; - -mi_decl_export void mi_process_init(void) mi_attr_noexcept; -mi_decl_export void mi_thread_init(void) mi_attr_noexcept; -mi_decl_export void mi_thread_done(void) mi_attr_noexcept; -mi_decl_export void mi_thread_stats_print_out(mi_output_fun* out, void* arg) mi_attr_noexcept; - -mi_decl_export void mi_process_info(size_t* elapsed_msecs, size_t* user_msecs, size_t* system_msecs, - size_t* current_rss, size_t* peak_rss, - size_t* current_commit, size_t* peak_commit, size_t* page_faults) mi_attr_noexcept; - -// ------------------------------------------------------------------------------------- -// Aligned allocation -// Note that `alignment` always follows `size` for consistency with unaligned -// allocation, but unfortunately this differs from `posix_memalign` and `aligned_alloc`. -// ------------------------------------------------------------------------------------- - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_malloc_aligned(size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1) mi_attr_alloc_align(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_malloc_aligned_at(size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_zalloc_aligned(size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1) mi_attr_alloc_align(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_zalloc_aligned_at(size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_calloc_aligned(size_t count, size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(1,2) mi_attr_alloc_align(3); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_calloc_aligned_at(size_t count, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(1,2); -mi_decl_nodiscard mi_decl_export void* mi_realloc_aligned(void* p, size_t newsize, size_t alignment) mi_attr_noexcept mi_attr_alloc_size(2) mi_attr_alloc_align(3); -mi_decl_nodiscard mi_decl_export void* mi_realloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size(2); - - -// ------------------------------------------------------------------------------------- -// Heaps: first-class, but can only allocate from the same thread that created it. -// ------------------------------------------------------------------------------------- - -struct mi_heap_s; -typedef struct mi_heap_s mi_heap_t; - -mi_decl_nodiscard mi_decl_export mi_heap_t* mi_heap_new(void); -mi_decl_export void mi_heap_delete(mi_heap_t* heap); -mi_decl_export void mi_heap_destroy(mi_heap_t* heap); -mi_decl_export mi_heap_t* mi_heap_set_default(mi_heap_t* heap); -mi_decl_export mi_heap_t* mi_heap_get_default(void); -mi_decl_export mi_heap_t* mi_heap_get_backing(void); -mi_decl_export void mi_heap_collect(mi_heap_t* heap, bool force) mi_attr_noexcept; - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_malloc(mi_heap_t* heap, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_zalloc(mi_heap_t* heap, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_calloc(mi_heap_t* heap, size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2, 3); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_mallocn(mi_heap_t* heap, size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2, 3); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_malloc_small(mi_heap_t* heap, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2); - -mi_decl_nodiscard mi_decl_export void* mi_heap_realloc(mi_heap_t* heap, void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(3); -mi_decl_nodiscard mi_decl_export void* mi_heap_reallocn(mi_heap_t* heap, void* p, size_t count, size_t size) mi_attr_noexcept mi_attr_alloc_size2(3,4); -mi_decl_nodiscard mi_decl_export void* mi_heap_reallocf(mi_heap_t* heap, void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(3); - -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_heap_strdup(mi_heap_t* heap, const char* s) mi_attr_noexcept mi_attr_malloc; -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_heap_strndup(mi_heap_t* heap, const char* s, size_t n) mi_attr_noexcept mi_attr_malloc; -mi_decl_nodiscard mi_decl_export mi_decl_restrict char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name) mi_attr_noexcept mi_attr_malloc; - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_malloc_aligned(mi_heap_t* heap, size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2) mi_attr_alloc_align(3); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_malloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_zalloc_aligned(mi_heap_t* heap, size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2) mi_attr_alloc_align(3); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_zalloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_calloc_aligned(mi_heap_t* heap, size_t count, size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2, 3) mi_attr_alloc_align(4); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_calloc_aligned_at(mi_heap_t* heap, size_t count, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2, 3); -mi_decl_nodiscard mi_decl_export void* mi_heap_realloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment) mi_attr_noexcept mi_attr_alloc_size(3) mi_attr_alloc_align(4); -mi_decl_nodiscard mi_decl_export void* mi_heap_realloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size(3); - - -// -------------------------------------------------------------------------------- -// Zero initialized re-allocation. -// Only valid on memory that was originally allocated with zero initialization too. -// e.g. `mi_calloc`, `mi_zalloc`, `mi_zalloc_aligned` etc. -// see <https://github.com/microsoft/mimalloc/issues/63#issuecomment-508272992> -// -------------------------------------------------------------------------------- - -mi_decl_nodiscard mi_decl_export void* mi_rezalloc(void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export void* mi_recalloc(void* p, size_t newcount, size_t size) mi_attr_noexcept mi_attr_alloc_size2(2,3); - -mi_decl_nodiscard mi_decl_export void* mi_rezalloc_aligned(void* p, size_t newsize, size_t alignment) mi_attr_noexcept mi_attr_alloc_size(2) mi_attr_alloc_align(3); -mi_decl_nodiscard mi_decl_export void* mi_rezalloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export void* mi_recalloc_aligned(void* p, size_t newcount, size_t size, size_t alignment) mi_attr_noexcept mi_attr_alloc_size2(2,3) mi_attr_alloc_align(4); -mi_decl_nodiscard mi_decl_export void* mi_recalloc_aligned_at(void* p, size_t newcount, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size2(2,3); - -mi_decl_nodiscard mi_decl_export void* mi_heap_rezalloc(mi_heap_t* heap, void* p, size_t newsize) mi_attr_noexcept mi_attr_alloc_size(3); -mi_decl_nodiscard mi_decl_export void* mi_heap_recalloc(mi_heap_t* heap, void* p, size_t newcount, size_t size) mi_attr_noexcept mi_attr_alloc_size2(3,4); - -mi_decl_nodiscard mi_decl_export void* mi_heap_rezalloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment) mi_attr_noexcept mi_attr_alloc_size(3) mi_attr_alloc_align(4); -mi_decl_nodiscard mi_decl_export void* mi_heap_rezalloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size(3); -mi_decl_nodiscard mi_decl_export void* mi_heap_recalloc_aligned(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment) mi_attr_noexcept mi_attr_alloc_size2(3,4) mi_attr_alloc_align(5); -mi_decl_nodiscard mi_decl_export void* mi_heap_recalloc_aligned_at(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment, size_t offset) mi_attr_noexcept mi_attr_alloc_size2(3,4); - - -// ------------------------------------------------------ -// Analysis -// ------------------------------------------------------ - -mi_decl_export bool mi_heap_contains_block(mi_heap_t* heap, const void* p); -mi_decl_export bool mi_heap_check_owned(mi_heap_t* heap, const void* p); -mi_decl_export bool mi_check_owned(const void* p); - -// An area of heap space contains blocks of a single size. -typedef struct mi_heap_area_s { - void* blocks; // start of the area containing heap blocks - size_t reserved; // bytes reserved for this area (virtual) - size_t committed; // current available bytes for this area - size_t used; // number of allocated blocks - size_t block_size; // size in bytes of each block - size_t full_block_size; // size in bytes of a full block including padding and metadata. -} mi_heap_area_t; - -typedef bool (mi_cdecl mi_block_visit_fun)(const mi_heap_t* heap, const mi_heap_area_t* area, void* block, size_t block_size, void* arg); - -mi_decl_export bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_all_blocks, mi_block_visit_fun* visitor, void* arg); - -// Experimental -mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export bool mi_is_redirected(void) mi_attr_noexcept; - -mi_decl_export int mi_reserve_huge_os_pages_interleave(size_t pages, size_t numa_nodes, size_t timeout_msecs) mi_attr_noexcept; -mi_decl_export int mi_reserve_huge_os_pages_at(size_t pages, int numa_node, size_t timeout_msecs) mi_attr_noexcept; - -mi_decl_export int mi_reserve_os_memory(size_t size, bool commit, bool allow_large) mi_attr_noexcept; -mi_decl_export bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node) mi_attr_noexcept; - -mi_decl_export void mi_debug_show_arenas(void) mi_attr_noexcept; - -// Experimental: heaps associated with specific memory arena's -typedef int mi_arena_id_t; -mi_decl_export void* mi_arena_area(mi_arena_id_t arena_id, size_t* size); -mi_decl_export int mi_reserve_huge_os_pages_at_ex(size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept; -mi_decl_export int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept; -mi_decl_export bool mi_manage_os_memory_ex(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept; - -#if MI_MALLOC_VERSION >= 182 -// Create a heap that only allocates in the specified arena -mi_decl_nodiscard mi_decl_export mi_heap_t* mi_heap_new_in_arena(mi_arena_id_t arena_id); -#endif - -// deprecated -mi_decl_export int mi_reserve_huge_os_pages(size_t pages, double max_secs, size_t* pages_reserved) mi_attr_noexcept; - - -// ------------------------------------------------------ -// Convenience -// ------------------------------------------------------ - -#define mi_malloc_tp(tp) ((tp*)mi_malloc(sizeof(tp))) -#define mi_zalloc_tp(tp) ((tp*)mi_zalloc(sizeof(tp))) -#define mi_calloc_tp(tp,n) ((tp*)mi_calloc(n,sizeof(tp))) -#define mi_mallocn_tp(tp,n) ((tp*)mi_mallocn(n,sizeof(tp))) -#define mi_reallocn_tp(p,tp,n) ((tp*)mi_reallocn(p,n,sizeof(tp))) -#define mi_recalloc_tp(p,tp,n) ((tp*)mi_recalloc(p,n,sizeof(tp))) - -#define mi_heap_malloc_tp(hp,tp) ((tp*)mi_heap_malloc(hp,sizeof(tp))) -#define mi_heap_zalloc_tp(hp,tp) ((tp*)mi_heap_zalloc(hp,sizeof(tp))) -#define mi_heap_calloc_tp(hp,tp,n) ((tp*)mi_heap_calloc(hp,n,sizeof(tp))) -#define mi_heap_mallocn_tp(hp,tp,n) ((tp*)mi_heap_mallocn(hp,n,sizeof(tp))) -#define mi_heap_reallocn_tp(hp,p,tp,n) ((tp*)mi_heap_reallocn(hp,p,n,sizeof(tp))) -#define mi_heap_recalloc_tp(hp,p,tp,n) ((tp*)mi_heap_recalloc(hp,p,n,sizeof(tp))) - - -// ------------------------------------------------------ -// Options -// ------------------------------------------------------ - -typedef enum mi_option_e { - // stable options - mi_option_show_errors, // print error messages - mi_option_show_stats, // print statistics on termination - mi_option_verbose, // print verbose messages - // the following options are experimental (see src/options.h) - mi_option_eager_commit, // eager commit segments? (after `eager_commit_delay` segments) (=1) - mi_option_arena_eager_commit, // eager commit arenas? Use 2 to enable just on overcommit systems (=2) - mi_option_purge_decommits, // should a memory purge decommit (or only reset) (=1) - mi_option_allow_large_os_pages, // allow large (2MiB) OS pages, implies eager commit - mi_option_reserve_huge_os_pages, // reserve N huge OS pages (1GiB/page) at startup - mi_option_reserve_huge_os_pages_at, // reserve huge OS pages at a specific NUMA node - mi_option_reserve_os_memory, // reserve specified amount of OS memory in an arena at startup - mi_option_deprecated_segment_cache, - mi_option_deprecated_page_reset, - mi_option_abandoned_page_purge, // immediately purge delayed purges on thread termination - mi_option_deprecated_segment_reset, - mi_option_eager_commit_delay, - mi_option_purge_delay, // memory purging is delayed by N milli seconds; use 0 for immediate purging or -1 for no purging at all. - mi_option_use_numa_nodes, // 0 = use all available numa nodes, otherwise use at most N nodes. - mi_option_limit_os_alloc, // 1 = do not use OS memory for allocation (but only programmatically reserved arenas) - mi_option_os_tag, // tag used for OS logging (macOS only for now) - mi_option_max_errors, // issue at most N error messages - mi_option_max_warnings, // issue at most N warning messages - mi_option_max_segment_reclaim, - mi_option_destroy_on_exit, // if set, release all memory on exit; sometimes used for dynamic unloading but can be unsafe. - mi_option_arena_reserve, // initial memory size in KiB for arena reservation (1GiB on 64-bit) - mi_option_arena_purge_mult, - mi_option_purge_extend_delay, - _mi_option_last, - // legacy option names - mi_option_large_os_pages = mi_option_allow_large_os_pages, - mi_option_eager_region_commit = mi_option_arena_eager_commit, - mi_option_reset_decommits = mi_option_purge_decommits, - mi_option_reset_delay = mi_option_purge_delay, - mi_option_abandoned_page_reset = mi_option_abandoned_page_purge -} mi_option_t; - - -mi_decl_nodiscard mi_decl_export bool mi_option_is_enabled(mi_option_t option); -mi_decl_export void mi_option_enable(mi_option_t option); -mi_decl_export void mi_option_disable(mi_option_t option); -mi_decl_export void mi_option_set_enabled(mi_option_t option, bool enable); -mi_decl_export void mi_option_set_enabled_default(mi_option_t option, bool enable); - -mi_decl_nodiscard mi_decl_export long mi_option_get(mi_option_t option); -mi_decl_nodiscard mi_decl_export long mi_option_get_clamp(mi_option_t option, long min, long max); -mi_decl_nodiscard mi_decl_export size_t mi_option_get_size(mi_option_t option); -mi_decl_export void mi_option_set(mi_option_t option, long value); -mi_decl_export void mi_option_set_default(mi_option_t option, long value); - - -// ------------------------------------------------------------------------------------------------------- -// "mi" prefixed implementations of various posix, Unix, Windows, and C++ allocation functions. -// (This can be convenient when providing overrides of these functions as done in `mimalloc-override.h`.) -// note: we use `mi_cfree` as "checked free" and it checks if the pointer is in our heap before free-ing. -// ------------------------------------------------------------------------------------------------------- - -mi_decl_export void mi_cfree(void* p) mi_attr_noexcept; -mi_decl_export void* mi__expand(void* p, size_t newsize) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export size_t mi_malloc_size(const void* p) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export size_t mi_malloc_good_size(size_t size) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export size_t mi_malloc_usable_size(const void *p) mi_attr_noexcept; - -mi_decl_export int mi_posix_memalign(void** p, size_t alignment, size_t size) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_memalign(size_t alignment, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2) mi_attr_alloc_align(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_valloc(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_pvalloc(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_aligned_alloc(size_t alignment, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2) mi_attr_alloc_align(1); - -mi_decl_nodiscard mi_decl_export void* mi_reallocarray(void* p, size_t count, size_t size) mi_attr_noexcept mi_attr_alloc_size2(2,3); -mi_decl_nodiscard mi_decl_export int mi_reallocarr(void* p, size_t count, size_t size) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export void* mi_aligned_recalloc(void* p, size_t newcount, size_t size, size_t alignment) mi_attr_noexcept; -mi_decl_nodiscard mi_decl_export void* mi_aligned_offset_recalloc(void* p, size_t newcount, size_t size, size_t alignment, size_t offset) mi_attr_noexcept; - -mi_decl_nodiscard mi_decl_export mi_decl_restrict unsigned short* mi_wcsdup(const unsigned short* s) mi_attr_noexcept mi_attr_malloc; -mi_decl_nodiscard mi_decl_export mi_decl_restrict unsigned char* mi_mbsdup(const unsigned char* s) mi_attr_noexcept mi_attr_malloc; -mi_decl_export int mi_dupenv_s(char** buf, size_t* size, const char* name) mi_attr_noexcept; -mi_decl_export int mi_wdupenv_s(unsigned short** buf, size_t* size, const unsigned short* name) mi_attr_noexcept; - -mi_decl_export void mi_free_size(void* p, size_t size) mi_attr_noexcept; -mi_decl_export void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept; -mi_decl_export void mi_free_aligned(void* p, size_t alignment) mi_attr_noexcept; - -// The `mi_new` wrappers implement C++ semantics on out-of-memory instead of directly returning `NULL`. -// (and call `std::get_new_handler` and potentially raise a `std::bad_alloc` exception). -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_new(size_t size) mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_new_aligned(size_t size, size_t alignment) mi_attr_malloc mi_attr_alloc_size(1) mi_attr_alloc_align(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_new_nothrow(size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_new_aligned_nothrow(size_t size, size_t alignment) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(1) mi_attr_alloc_align(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_new_n(size_t count, size_t size) mi_attr_malloc mi_attr_alloc_size2(1, 2); -mi_decl_nodiscard mi_decl_export void* mi_new_realloc(void* p, size_t newsize) mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export void* mi_new_reallocn(void* p, size_t newcount, size_t size) mi_attr_alloc_size2(2, 3); - -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_alloc_new(mi_heap_t* heap, size_t size) mi_attr_malloc mi_attr_alloc_size(2); -mi_decl_nodiscard mi_decl_export mi_decl_restrict void* mi_heap_alloc_new_n(mi_heap_t* heap, size_t count, size_t size) mi_attr_malloc mi_attr_alloc_size2(2, 3); - -#ifdef __cplusplus -} -#endif - -// --------------------------------------------------------------------------------------------- -// Implement the C++ std::allocator interface for use in STL containers. -// (note: see `mimalloc-new-delete.h` for overriding the new/delete operators globally) -// --------------------------------------------------------------------------------------------- -#ifdef __cplusplus - -#include <cstddef> // std::size_t -#include <cstdint> // PTRDIFF_MAX -#if (__cplusplus >= 201103L) || (_MSC_VER > 1900) // C++11 -#include <type_traits> // std::true_type -#include <utility> // std::forward -#endif - -template<class T> struct _mi_stl_allocator_common { - typedef T value_type; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef value_type& reference; - typedef value_type const& const_reference; - typedef value_type* pointer; - typedef value_type const* const_pointer; - - #if ((__cplusplus >= 201103L) || (_MSC_VER > 1900)) // C++11 - using propagate_on_container_copy_assignment = std::true_type; - using propagate_on_container_move_assignment = std::true_type; - using propagate_on_container_swap = std::true_type; - template <class U, class ...Args> void construct(U* p, Args&& ...args) { ::new(p) U(std::forward<Args>(args)...); } - template <class U> void destroy(U* p) mi_attr_noexcept { p->~U(); } - #else - void construct(pointer p, value_type const& val) { ::new(p) value_type(val); } - void destroy(pointer p) { p->~value_type(); } - #endif - - size_type max_size() const mi_attr_noexcept { return (PTRDIFF_MAX/sizeof(value_type)); } - pointer address(reference x) const { return &x; } - const_pointer address(const_reference x) const { return &x; } -}; - -template<class T> struct mi_stl_allocator : public _mi_stl_allocator_common<T> { - using typename _mi_stl_allocator_common<T>::size_type; - using typename _mi_stl_allocator_common<T>::value_type; - using typename _mi_stl_allocator_common<T>::pointer; - template <class U> struct rebind { typedef mi_stl_allocator<U> other; }; - - mi_stl_allocator() mi_attr_noexcept = default; - mi_stl_allocator(const mi_stl_allocator&) mi_attr_noexcept = default; - template<class U> mi_stl_allocator(const mi_stl_allocator<U>&) mi_attr_noexcept { } - mi_stl_allocator select_on_container_copy_construction() const { return *this; } - void deallocate(T* p, size_type) { mi_free(p); } - - #if (__cplusplus >= 201703L) // C++17 - mi_decl_nodiscard T* allocate(size_type count) { return static_cast<T*>(mi_new_n(count, sizeof(T))); } - mi_decl_nodiscard T* allocate(size_type count, const void*) { return allocate(count); } - #else - mi_decl_nodiscard pointer allocate(size_type count, const void* = 0) { return static_cast<pointer>(mi_new_n(count, sizeof(value_type))); } - #endif - - #if ((__cplusplus >= 201103L) || (_MSC_VER > 1900)) // C++11 - using is_always_equal = std::true_type; - #endif -}; - -template<class T1,class T2> bool operator==(const mi_stl_allocator<T1>& , const mi_stl_allocator<T2>& ) mi_attr_noexcept { return true; } -template<class T1,class T2> bool operator!=(const mi_stl_allocator<T1>& , const mi_stl_allocator<T2>& ) mi_attr_noexcept { return false; } - - -#if (__cplusplus >= 201103L) || (_MSC_VER >= 1900) // C++11 -#define MI_HAS_HEAP_STL_ALLOCATOR 1 - -#include <memory> // std::shared_ptr - -// Common base class for STL allocators in a specific heap -template<class T, bool _mi_destroy> struct _mi_heap_stl_allocator_common : public _mi_stl_allocator_common<T> { - using typename _mi_stl_allocator_common<T>::size_type; - using typename _mi_stl_allocator_common<T>::value_type; - using typename _mi_stl_allocator_common<T>::pointer; - - _mi_heap_stl_allocator_common(mi_heap_t* hp) : heap(hp) { } /* will not delete nor destroy the passed in heap */ - - #if (__cplusplus >= 201703L) // C++17 - mi_decl_nodiscard T* allocate(size_type count) { return static_cast<T*>(mi_heap_alloc_new_n(this->heap.get(), count, sizeof(T))); } - mi_decl_nodiscard T* allocate(size_type count, const void*) { return allocate(count); } - #else - mi_decl_nodiscard pointer allocate(size_type count, const void* = 0) { return static_cast<pointer>(mi_heap_alloc_new_n(this->heap.get(), count, sizeof(value_type))); } - #endif - - #if ((__cplusplus >= 201103L) || (_MSC_VER > 1900)) // C++11 - using is_always_equal = std::false_type; - #endif - - void collect(bool force) { mi_heap_collect(this->heap.get(), force); } - template<class U> bool is_equal(const _mi_heap_stl_allocator_common<U, _mi_destroy>& x) const { return (this->heap == x.heap); } - -protected: - std::shared_ptr<mi_heap_t> heap; - template<class U, bool D> friend struct _mi_heap_stl_allocator_common; - - _mi_heap_stl_allocator_common() { - mi_heap_t* hp = mi_heap_new(); - this->heap.reset(hp, (_mi_destroy ? &heap_destroy : &heap_delete)); /* calls heap_delete/destroy when the refcount drops to zero */ - } - _mi_heap_stl_allocator_common(const _mi_heap_stl_allocator_common& x) mi_attr_noexcept : heap(x.heap) { } - template<class U> _mi_heap_stl_allocator_common(const _mi_heap_stl_allocator_common<U, _mi_destroy>& x) mi_attr_noexcept : heap(x.heap) { } - -private: - static void heap_delete(mi_heap_t* hp) { if (hp != NULL) { mi_heap_delete(hp); } } - static void heap_destroy(mi_heap_t* hp) { if (hp != NULL) { mi_heap_destroy(hp); } } -}; - -// STL allocator allocation in a specific heap -template<class T> struct mi_heap_stl_allocator : public _mi_heap_stl_allocator_common<T, false> { - using typename _mi_heap_stl_allocator_common<T, false>::size_type; - mi_heap_stl_allocator() : _mi_heap_stl_allocator_common<T, false>() { } // creates fresh heap that is deleted when the destructor is called - mi_heap_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, false>(hp) { } // no delete nor destroy on the passed in heap - template<class U> mi_heap_stl_allocator(const mi_heap_stl_allocator<U>& x) mi_attr_noexcept : _mi_heap_stl_allocator_common<T, false>(x) { } - - mi_heap_stl_allocator select_on_container_copy_construction() const { return *this; } - void deallocate(T* p, size_type) { mi_free(p); } - template<class U> struct rebind { typedef mi_heap_stl_allocator<U> other; }; -}; - -template<class T1, class T2> bool operator==(const mi_heap_stl_allocator<T1>& x, const mi_heap_stl_allocator<T2>& y) mi_attr_noexcept { return (x.is_equal(y)); } -template<class T1, class T2> bool operator!=(const mi_heap_stl_allocator<T1>& x, const mi_heap_stl_allocator<T2>& y) mi_attr_noexcept { return (!x.is_equal(y)); } - - -// STL allocator allocation in a specific heap, where `free` does nothing and -// the heap is destroyed in one go on destruction -- use with care! -template<class T> struct mi_heap_destroy_stl_allocator : public _mi_heap_stl_allocator_common<T, true> { - using typename _mi_heap_stl_allocator_common<T, true>::size_type; - mi_heap_destroy_stl_allocator() : _mi_heap_stl_allocator_common<T, true>() { } // creates fresh heap that is destroyed when the destructor is called - mi_heap_destroy_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, true>(hp) { } // no delete nor destroy on the passed in heap - template<class U> mi_heap_destroy_stl_allocator(const mi_heap_destroy_stl_allocator<U>& x) mi_attr_noexcept : _mi_heap_stl_allocator_common<T, true>(x) { } - - mi_heap_destroy_stl_allocator select_on_container_copy_construction() const { return *this; } - void deallocate(T*, size_type) { /* do nothing as we destroy the heap on destruct. */ } - template<class U> struct rebind { typedef mi_heap_destroy_stl_allocator<U> other; }; -}; - -template<class T1, class T2> bool operator==(const mi_heap_destroy_stl_allocator<T1>& x, const mi_heap_destroy_stl_allocator<T2>& y) mi_attr_noexcept { return (x.is_equal(y)); } -template<class T1, class T2> bool operator!=(const mi_heap_destroy_stl_allocator<T1>& x, const mi_heap_destroy_stl_allocator<T2>& y) mi_attr_noexcept { return (!x.is_equal(y)); } - -#endif // C++11 - -#endif // __cplusplus - -#endif diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/atomic.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/atomic.h deleted file mode 100644 index 65fa477d6..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/atomic.h +++ /dev/null @@ -1,392 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023 Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_ATOMIC_H -#define MIMALLOC_ATOMIC_H - -// -------------------------------------------------------------------------------------------- -// Atomics -// We need to be portable between C, C++, and MSVC. -// We base the primitives on the C/C++ atomics and create a minimal wrapper for MSVC in C compilation mode. -// This is why we try to use only `uintptr_t` and `<type>*` as atomic types. -// To gain better insight in the range of used atomics, we use explicitly named memory order operations -// instead of passing the memory order as a parameter. -// ----------------------------------------------------------------------------------------------- - -#if defined(__cplusplus) -// Use C++ atomics -#include <atomic> -#define _Atomic(tp) std::atomic<tp> -#define mi_atomic(name) std::atomic_##name -#define mi_memory_order(name) std::memory_order_##name -#if (__cplusplus >= 202002L) // c++20, see issue #571 - #define MI_ATOMIC_VAR_INIT(x) x -#elif !defined(ATOMIC_VAR_INIT) - #define MI_ATOMIC_VAR_INIT(x) x -#else - #define MI_ATOMIC_VAR_INIT(x) ATOMIC_VAR_INIT(x) -#endif -#elif defined(_MSC_VER) -// Use MSVC C wrapper for C11 atomics -#define _Atomic(tp) tp -#define MI_ATOMIC_VAR_INIT(x) x -#define mi_atomic(name) mi_atomic_##name -#define mi_memory_order(name) mi_memory_order_##name -#else -// Use C11 atomics -#include <stdatomic.h> -#define mi_atomic(name) atomic_##name -#define mi_memory_order(name) memory_order_##name -#if (__STDC_VERSION__ >= 201710L) // c17, see issue #735 - #define MI_ATOMIC_VAR_INIT(x) x -#elif !defined(ATOMIC_VAR_INIT) - #define MI_ATOMIC_VAR_INIT(x) x -#else - #define MI_ATOMIC_VAR_INIT(x) ATOMIC_VAR_INIT(x) -#endif -#endif - -// Various defines for all used memory orders in mimalloc -#define mi_atomic_cas_weak(p,expected,desired,mem_success,mem_fail) \ - mi_atomic(compare_exchange_weak_explicit)(p,expected,desired,mem_success,mem_fail) - -#define mi_atomic_cas_strong(p,expected,desired,mem_success,mem_fail) \ - mi_atomic(compare_exchange_strong_explicit)(p,expected,desired,mem_success,mem_fail) - -#define mi_atomic_load_acquire(p) mi_atomic(load_explicit)(p,mi_memory_order(acquire)) -#define mi_atomic_load_relaxed(p) mi_atomic(load_explicit)(p,mi_memory_order(relaxed)) -#define mi_atomic_store_release(p,x) mi_atomic(store_explicit)(p,x,mi_memory_order(release)) -#define mi_atomic_store_relaxed(p,x) mi_atomic(store_explicit)(p,x,mi_memory_order(relaxed)) -#define mi_atomic_exchange_release(p,x) mi_atomic(exchange_explicit)(p,x,mi_memory_order(release)) -#define mi_atomic_exchange_acq_rel(p,x) mi_atomic(exchange_explicit)(p,x,mi_memory_order(acq_rel)) -#define mi_atomic_cas_weak_release(p,exp,des) mi_atomic_cas_weak(p,exp,des,mi_memory_order(release),mi_memory_order(relaxed)) -#define mi_atomic_cas_weak_acq_rel(p,exp,des) mi_atomic_cas_weak(p,exp,des,mi_memory_order(acq_rel),mi_memory_order(acquire)) -#define mi_atomic_cas_strong_release(p,exp,des) mi_atomic_cas_strong(p,exp,des,mi_memory_order(release),mi_memory_order(relaxed)) -#define mi_atomic_cas_strong_acq_rel(p,exp,des) mi_atomic_cas_strong(p,exp,des,mi_memory_order(acq_rel),mi_memory_order(acquire)) - -#define mi_atomic_add_relaxed(p,x) mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(relaxed)) -#define mi_atomic_sub_relaxed(p,x) mi_atomic(fetch_sub_explicit)(p,x,mi_memory_order(relaxed)) -#define mi_atomic_add_acq_rel(p,x) mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(acq_rel)) -#define mi_atomic_sub_acq_rel(p,x) mi_atomic(fetch_sub_explicit)(p,x,mi_memory_order(acq_rel)) -#define mi_atomic_and_acq_rel(p,x) mi_atomic(fetch_and_explicit)(p,x,mi_memory_order(acq_rel)) -#define mi_atomic_or_acq_rel(p,x) mi_atomic(fetch_or_explicit)(p,x,mi_memory_order(acq_rel)) - -#define mi_atomic_increment_relaxed(p) mi_atomic_add_relaxed(p,(uintptr_t)1) -#define mi_atomic_decrement_relaxed(p) mi_atomic_sub_relaxed(p,(uintptr_t)1) -#define mi_atomic_increment_acq_rel(p) mi_atomic_add_acq_rel(p,(uintptr_t)1) -#define mi_atomic_decrement_acq_rel(p) mi_atomic_sub_acq_rel(p,(uintptr_t)1) - -static inline void mi_atomic_yield(void); -static inline intptr_t mi_atomic_addi(_Atomic(intptr_t)*p, intptr_t add); -static inline intptr_t mi_atomic_subi(_Atomic(intptr_t)*p, intptr_t sub); - - -#if defined(__cplusplus) || !defined(_MSC_VER) - -// In C++/C11 atomics we have polymorphic atomics so can use the typed `ptr` variants (where `tp` is the type of atomic value) -// We use these macros so we can provide a typed wrapper in MSVC in C compilation mode as well -#define mi_atomic_load_ptr_acquire(tp,p) mi_atomic_load_acquire(p) -#define mi_atomic_load_ptr_relaxed(tp,p) mi_atomic_load_relaxed(p) - -// In C++ we need to add casts to help resolve templates if NULL is passed -#if defined(__cplusplus) -#define mi_atomic_store_ptr_release(tp,p,x) mi_atomic_store_release(p,(tp*)x) -#define mi_atomic_store_ptr_relaxed(tp,p,x) mi_atomic_store_relaxed(p,(tp*)x) -#define mi_atomic_cas_ptr_weak_release(tp,p,exp,des) mi_atomic_cas_weak_release(p,exp,(tp*)des) -#define mi_atomic_cas_ptr_weak_acq_rel(tp,p,exp,des) mi_atomic_cas_weak_acq_rel(p,exp,(tp*)des) -#define mi_atomic_cas_ptr_strong_release(tp,p,exp,des) mi_atomic_cas_strong_release(p,exp,(tp*)des) -#define mi_atomic_exchange_ptr_release(tp,p,x) mi_atomic_exchange_release(p,(tp*)x) -#define mi_atomic_exchange_ptr_acq_rel(tp,p,x) mi_atomic_exchange_acq_rel(p,(tp*)x) -#else -#define mi_atomic_store_ptr_release(tp,p,x) mi_atomic_store_release(p,x) -#define mi_atomic_store_ptr_relaxed(tp,p,x) mi_atomic_store_relaxed(p,x) -#define mi_atomic_cas_ptr_weak_release(tp,p,exp,des) mi_atomic_cas_weak_release(p,exp,des) -#define mi_atomic_cas_ptr_weak_acq_rel(tp,p,exp,des) mi_atomic_cas_weak_acq_rel(p,exp,des) -#define mi_atomic_cas_ptr_strong_release(tp,p,exp,des) mi_atomic_cas_strong_release(p,exp,des) -#define mi_atomic_exchange_ptr_release(tp,p,x) mi_atomic_exchange_release(p,x) -#define mi_atomic_exchange_ptr_acq_rel(tp,p,x) mi_atomic_exchange_acq_rel(p,x) -#endif - -// These are used by the statistics -static inline int64_t mi_atomic_addi64_relaxed(volatile int64_t* p, int64_t add) { - return mi_atomic(fetch_add_explicit)((_Atomic(int64_t)*)p, add, mi_memory_order(relaxed)); -} -static inline void mi_atomic_maxi64_relaxed(volatile int64_t* p, int64_t x) { - int64_t current = mi_atomic_load_relaxed((_Atomic(int64_t)*)p); - while (current < x && !mi_atomic_cas_weak_release((_Atomic(int64_t)*)p, &current, x)) { /* nothing */ }; -} - -// Used by timers -#define mi_atomic_loadi64_acquire(p) mi_atomic(load_explicit)(p,mi_memory_order(acquire)) -#define mi_atomic_loadi64_relaxed(p) mi_atomic(load_explicit)(p,mi_memory_order(relaxed)) -#define mi_atomic_storei64_release(p,x) mi_atomic(store_explicit)(p,x,mi_memory_order(release)) -#define mi_atomic_storei64_relaxed(p,x) mi_atomic(store_explicit)(p,x,mi_memory_order(relaxed)) - -#define mi_atomic_casi64_strong_acq_rel(p,e,d) mi_atomic_cas_strong_acq_rel(p,e,d) -#define mi_atomic_addi64_acq_rel(p,i) mi_atomic_add_acq_rel(p,i) - - -#elif defined(_MSC_VER) - -// MSVC C compilation wrapper that uses Interlocked operations to model C11 atomics. -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <intrin.h> -#ifdef _WIN64 -typedef LONG64 msc_intptr_t; -#define MI_64(f) f##64 -#else -typedef LONG msc_intptr_t; -#define MI_64(f) f -#endif - -typedef enum mi_memory_order_e { - mi_memory_order_relaxed, - mi_memory_order_consume, - mi_memory_order_acquire, - mi_memory_order_release, - mi_memory_order_acq_rel, - mi_memory_order_seq_cst -} mi_memory_order; - -static inline uintptr_t mi_atomic_fetch_add_explicit(_Atomic(uintptr_t)*p, uintptr_t add, mi_memory_order mo) { - (void)(mo); - return (uintptr_t)MI_64(_InterlockedExchangeAdd)((volatile msc_intptr_t*)p, (msc_intptr_t)add); -} -static inline uintptr_t mi_atomic_fetch_sub_explicit(_Atomic(uintptr_t)*p, uintptr_t sub, mi_memory_order mo) { - (void)(mo); - return (uintptr_t)MI_64(_InterlockedExchangeAdd)((volatile msc_intptr_t*)p, -((msc_intptr_t)sub)); -} -static inline uintptr_t mi_atomic_fetch_and_explicit(_Atomic(uintptr_t)*p, uintptr_t x, mi_memory_order mo) { - (void)(mo); - return (uintptr_t)MI_64(_InterlockedAnd)((volatile msc_intptr_t*)p, (msc_intptr_t)x); -} -static inline uintptr_t mi_atomic_fetch_or_explicit(_Atomic(uintptr_t)*p, uintptr_t x, mi_memory_order mo) { - (void)(mo); - return (uintptr_t)MI_64(_InterlockedOr)((volatile msc_intptr_t*)p, (msc_intptr_t)x); -} -static inline bool mi_atomic_compare_exchange_strong_explicit(_Atomic(uintptr_t)*p, uintptr_t* expected, uintptr_t desired, mi_memory_order mo1, mi_memory_order mo2) { - (void)(mo1); (void)(mo2); - uintptr_t read = (uintptr_t)MI_64(_InterlockedCompareExchange)((volatile msc_intptr_t*)p, (msc_intptr_t)desired, (msc_intptr_t)(*expected)); - if (read == *expected) { - return true; - } - else { - *expected = read; - return false; - } -} -static inline bool mi_atomic_compare_exchange_weak_explicit(_Atomic(uintptr_t)*p, uintptr_t* expected, uintptr_t desired, mi_memory_order mo1, mi_memory_order mo2) { - return mi_atomic_compare_exchange_strong_explicit(p, expected, desired, mo1, mo2); -} -static inline uintptr_t mi_atomic_exchange_explicit(_Atomic(uintptr_t)*p, uintptr_t exchange, mi_memory_order mo) { - (void)(mo); - return (uintptr_t)MI_64(_InterlockedExchange)((volatile msc_intptr_t*)p, (msc_intptr_t)exchange); -} -static inline void mi_atomic_thread_fence(mi_memory_order mo) { - (void)(mo); - _Atomic(uintptr_t) x = 0; - mi_atomic_exchange_explicit(&x, 1, mo); -} -static inline uintptr_t mi_atomic_load_explicit(_Atomic(uintptr_t) const* p, mi_memory_order mo) { - (void)(mo); -#if defined(_M_IX86) || defined(_M_X64) - return *p; -#else - uintptr_t x = *p; - if (mo > mi_memory_order_relaxed) { - while (!mi_atomic_compare_exchange_weak_explicit((_Atomic(uintptr_t)*)p, &x, x, mo, mi_memory_order_relaxed)) { /* nothing */ }; - } - return x; -#endif -} -static inline void mi_atomic_store_explicit(_Atomic(uintptr_t)*p, uintptr_t x, mi_memory_order mo) { - (void)(mo); -#if defined(_M_IX86) || defined(_M_X64) - *p = x; -#else - mi_atomic_exchange_explicit(p, x, mo); -#endif -} -static inline int64_t mi_atomic_loadi64_explicit(_Atomic(int64_t)*p, mi_memory_order mo) { - (void)(mo); -#if defined(_M_X64) - return *p; -#else - int64_t old = *p; - int64_t x = old; - while ((old = InterlockedCompareExchange64(p, x, old)) != x) { - x = old; - } - return x; -#endif -} -static inline void mi_atomic_storei64_explicit(_Atomic(int64_t)*p, int64_t x, mi_memory_order mo) { - (void)(mo); -#if defined(x_M_IX86) || defined(_M_X64) - *p = x; -#else - InterlockedExchange64(p, x); -#endif -} - -// These are used by the statistics -static inline int64_t mi_atomic_addi64_relaxed(volatile _Atomic(int64_t)*p, int64_t add) { -#ifdef _WIN64 - return (int64_t)mi_atomic_addi((int64_t*)p, add); -#else - int64_t current; - int64_t sum; - do { - current = *p; - sum = current + add; - } while (_InterlockedCompareExchange64(p, sum, current) != current); - return current; -#endif -} -static inline void mi_atomic_maxi64_relaxed(volatile _Atomic(int64_t)*p, int64_t x) { - int64_t current; - do { - current = *p; - } while (current < x && _InterlockedCompareExchange64(p, x, current) != current); -} - -static inline void mi_atomic_addi64_acq_rel(volatile _Atomic(int64_t*)p, int64_t i) { - mi_atomic_addi64_relaxed(p, i); -} - -static inline bool mi_atomic_casi64_strong_acq_rel(volatile _Atomic(int64_t*)p, int64_t* exp, int64_t des) { - int64_t read = _InterlockedCompareExchange64(p, des, *exp); - if (read == *exp) { - return true; - } - else { - *exp = read; - return false; - } -} - -// The pointer macros cast to `uintptr_t`. -#define mi_atomic_load_ptr_acquire(tp,p) (tp*)mi_atomic_load_acquire((_Atomic(uintptr_t)*)(p)) -#define mi_atomic_load_ptr_relaxed(tp,p) (tp*)mi_atomic_load_relaxed((_Atomic(uintptr_t)*)(p)) -#define mi_atomic_store_ptr_release(tp,p,x) mi_atomic_store_release((_Atomic(uintptr_t)*)(p),(uintptr_t)(x)) -#define mi_atomic_store_ptr_relaxed(tp,p,x) mi_atomic_store_relaxed((_Atomic(uintptr_t)*)(p),(uintptr_t)(x)) -#define mi_atomic_cas_ptr_weak_release(tp,p,exp,des) mi_atomic_cas_weak_release((_Atomic(uintptr_t)*)(p),(uintptr_t*)exp,(uintptr_t)des) -#define mi_atomic_cas_ptr_weak_acq_rel(tp,p,exp,des) mi_atomic_cas_weak_acq_rel((_Atomic(uintptr_t)*)(p),(uintptr_t*)exp,(uintptr_t)des) -#define mi_atomic_cas_ptr_strong_release(tp,p,exp,des) mi_atomic_cas_strong_release((_Atomic(uintptr_t)*)(p),(uintptr_t*)exp,(uintptr_t)des) -#define mi_atomic_exchange_ptr_release(tp,p,x) (tp*)mi_atomic_exchange_release((_Atomic(uintptr_t)*)(p),(uintptr_t)x) -#define mi_atomic_exchange_ptr_acq_rel(tp,p,x) (tp*)mi_atomic_exchange_acq_rel((_Atomic(uintptr_t)*)(p),(uintptr_t)x) - -#define mi_atomic_loadi64_acquire(p) mi_atomic(loadi64_explicit)(p,mi_memory_order(acquire)) -#define mi_atomic_loadi64_relaxed(p) mi_atomic(loadi64_explicit)(p,mi_memory_order(relaxed)) -#define mi_atomic_storei64_release(p,x) mi_atomic(storei64_explicit)(p,x,mi_memory_order(release)) -#define mi_atomic_storei64_relaxed(p,x) mi_atomic(storei64_explicit)(p,x,mi_memory_order(relaxed)) - - -#endif - - -// Atomically add a signed value; returns the previous value. -static inline intptr_t mi_atomic_addi(_Atomic(intptr_t)*p, intptr_t add) { - return (intptr_t)mi_atomic_add_acq_rel((_Atomic(uintptr_t)*)p, (uintptr_t)add); -} - -// Atomically subtract a signed value; returns the previous value. -static inline intptr_t mi_atomic_subi(_Atomic(intptr_t)*p, intptr_t sub) { - return (intptr_t)mi_atomic_addi(p, -sub); -} - -typedef _Atomic(uintptr_t) mi_atomic_once_t; - -// Returns true only on the first invocation -static inline bool mi_atomic_once( mi_atomic_once_t* once ) { - if (mi_atomic_load_relaxed(once) != 0) return false; // quick test - uintptr_t expected = 0; - return mi_atomic_cas_strong_acq_rel(once, &expected, (uintptr_t)1); // try to set to 1 -} - -typedef _Atomic(uintptr_t) mi_atomic_guard_t; - -// Allows only one thread to execute at a time -#define mi_atomic_guard(guard) \ - uintptr_t _mi_guard_expected = 0; \ - for(bool _mi_guard_once = true; \ - _mi_guard_once && mi_atomic_cas_strong_acq_rel(guard,&_mi_guard_expected,(uintptr_t)1); \ - (mi_atomic_store_release(guard,(uintptr_t)0), _mi_guard_once = false) ) - - - -// Yield -#if defined(__cplusplus) -#include <thread> -static inline void mi_atomic_yield(void) { - std::this_thread::yield(); -} -#elif defined(_WIN32) -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -static inline void mi_atomic_yield(void) { - YieldProcessor(); -} -#elif defined(__SSE2__) -#include <emmintrin.h> -static inline void mi_atomic_yield(void) { - _mm_pause(); -} -#elif (defined(__GNUC__) || defined(__clang__)) && \ - (defined(__x86_64__) || defined(__i386__) || \ - defined(__aarch64__) || defined(__arm__) || \ - defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__)) -#if defined(__x86_64__) || defined(__i386__) -static inline void mi_atomic_yield(void) { - __asm__ volatile ("pause" ::: "memory"); -} -#elif defined(__aarch64__) -static inline void mi_atomic_yield(void) { - __asm__ volatile("wfe"); -} -#elif defined(__arm__) -#if __ARM_ARCH >= 7 -static inline void mi_atomic_yield(void) { - __asm__ volatile("yield" ::: "memory"); -} -#else -static inline void mi_atomic_yield(void) { - __asm__ volatile ("nop" ::: "memory"); -} -#endif -#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__) -#ifdef __APPLE__ -static inline void mi_atomic_yield(void) { - __asm__ volatile ("or r27,r27,r27" ::: "memory"); -} -#else -static inline void mi_atomic_yield(void) { - __asm__ __volatile__ ("or 27,27,27" ::: "memory"); -} -#endif -#endif -#elif defined(__sun) -// Fallback for other archs -#include <synch.h> -static inline void mi_atomic_yield(void) { - smt_pause(); -} -#elif defined(__wasi__) -#include <sched.h> -static inline void mi_atomic_yield(void) { - sched_yield(); -} -#else -#include <unistd.h> -static inline void mi_atomic_yield(void) { - sleep(0); -} -#endif - - -#endif // __MIMALLOC_ATOMIC_H diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/internal.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/internal.h deleted file mode 100644 index a7daa3a40..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/internal.h +++ /dev/null @@ -1,969 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023, Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_INTERNAL_H -#define MIMALLOC_INTERNAL_H - - -// -------------------------------------------------------------------------- -// This file contains the internal API's of mimalloc and various utility -// functions and macros. -// -------------------------------------------------------------------------- - -#include "types.h" -#include "track.h" - -#if (MI_DEBUG>0) -#define mi_trace_message(...) _mi_trace_message(__VA_ARGS__) -#else -#define mi_trace_message(...) -#endif - -#if defined(__EMSCRIPTEN__) && !defined(__wasi__) -#define __wasi__ -#endif - -#if defined(__cplusplus) -#define mi_decl_externc extern "C" -#else -#define mi_decl_externc -#endif - -// pthreads -#if !defined(_WIN32) && !defined(__wasi__) -#define MI_USE_PTHREADS -#include <pthread.h> -#endif - -// "options.c" -void _mi_fputs(mi_output_fun* out, void* arg, const char* prefix, const char* message); -void _mi_fprintf(mi_output_fun* out, void* arg, const char* fmt, ...); -void _mi_warning_message(const char* fmt, ...); -void _mi_verbose_message(const char* fmt, ...); -void _mi_trace_message(const char* fmt, ...); -void _mi_options_init(void); -void _mi_error_message(int err, const char* fmt, ...); - -// random.c -void _mi_random_init(mi_random_ctx_t* ctx); -void _mi_random_init_weak(mi_random_ctx_t* ctx); -void _mi_random_reinit_if_weak(mi_random_ctx_t * ctx); -void _mi_random_split(mi_random_ctx_t* ctx, mi_random_ctx_t* new_ctx); -uintptr_t _mi_random_next(mi_random_ctx_t* ctx); -uintptr_t _mi_heap_random_next(mi_heap_t* heap); -uintptr_t _mi_os_random_weak(uintptr_t extra_seed); -static inline uintptr_t _mi_random_shuffle(uintptr_t x); - -// init.c -extern mi_decl_cache_align mi_stats_t _mi_stats_main; -extern mi_decl_cache_align const mi_page_t _mi_page_empty; -bool _mi_is_main_thread(void); -size_t _mi_current_thread_count(void); -bool _mi_preloading(void); // true while the C runtime is not initialized yet -mi_threadid_t _mi_thread_id(void) mi_attr_noexcept; -mi_heap_t* _mi_heap_main_get(void); // statically allocated main backing heap -void _mi_thread_done(mi_heap_t* heap); -void _mi_thread_data_collect(void); -void _mi_tld_init(mi_tld_t* tld, mi_heap_t* bheap); - -// os.c -void _mi_os_init(void); // called from process init -void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* stats); -void _mi_os_free(void* p, size_t size, mi_memid_t memid, mi_stats_t* stats); -void _mi_os_free_ex(void* p, size_t size, bool still_committed, mi_memid_t memid, mi_stats_t* stats); - -size_t _mi_os_page_size(void); -size_t _mi_os_good_alloc_size(size_t size); -bool _mi_os_has_overcommit(void); -bool _mi_os_has_virtual_reserve(void); - -bool _mi_os_purge(void* p, size_t size, mi_stats_t* stats); -bool _mi_os_reset(void* addr, size_t size, mi_stats_t* tld_stats); -bool _mi_os_commit(void* p, size_t size, bool* is_zero, mi_stats_t* stats); -bool _mi_os_decommit(void* addr, size_t size, mi_stats_t* stats); -bool _mi_os_protect(void* addr, size_t size); -bool _mi_os_unprotect(void* addr, size_t size); -bool _mi_os_purge(void* p, size_t size, mi_stats_t* stats); -bool _mi_os_purge_ex(void* p, size_t size, bool allow_reset, mi_stats_t* stats); - -void* _mi_os_alloc_aligned(size_t size, size_t alignment, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* stats); -void* _mi_os_alloc_aligned_at_offset(size_t size, size_t alignment, size_t align_offset, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* tld_stats); - -void* _mi_os_get_aligned_hint(size_t try_alignment, size_t size); -bool _mi_os_use_large_page(size_t size, size_t alignment); -size_t _mi_os_large_page_size(void); - -void* _mi_os_alloc_huge_os_pages(size_t pages, int numa_node, mi_msecs_t max_secs, size_t* pages_reserved, size_t* psize, mi_memid_t* memid); - -// arena.c -mi_arena_id_t _mi_arena_id_none(void); -void _mi_arena_free(void* p, size_t size, size_t still_committed_size, mi_memid_t memid, mi_stats_t* stats); -void* _mi_arena_alloc(size_t size, bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld); -void* _mi_arena_alloc_aligned(size_t size, size_t alignment, size_t align_offset, bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld); -bool _mi_arena_memid_is_suitable(mi_memid_t memid, mi_arena_id_t request_arena_id); -bool _mi_arena_contains(const void* p); -void _mi_arena_collect(bool force_purge, mi_stats_t* stats); -void _mi_arena_unsafe_destroy_all(mi_stats_t* stats); - -// "segment-map.c" -void _mi_segment_map_allocated_at(const mi_segment_t* segment); -void _mi_segment_map_freed_at(const mi_segment_t* segment); - -// "segment.c" -extern mi_abandoned_pool_t _mi_abandoned_default; // global abandoned pool -mi_page_t* _mi_segment_page_alloc(mi_heap_t* heap, size_t block_size, size_t page_alignment, mi_segments_tld_t* tld, mi_os_tld_t* os_tld); -void _mi_segment_page_free(mi_page_t* page, bool force, mi_segments_tld_t* tld); -void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld); -bool _mi_segment_try_reclaim_abandoned( mi_heap_t* heap, bool try_all, mi_segments_tld_t* tld); -void _mi_segment_thread_collect(mi_segments_tld_t* tld); -bool _mi_abandoned_pool_visit_blocks(mi_abandoned_pool_t* pool, uint8_t page_tag, bool visit_blocks, mi_block_visit_fun* visitor, void* arg); - - -#if MI_HUGE_PAGE_ABANDON -void _mi_segment_huge_page_free(mi_segment_t* segment, mi_page_t* page, mi_block_t* block); -#else -void _mi_segment_huge_page_reset(mi_segment_t* segment, mi_page_t* page, mi_block_t* block); -#endif - -uint8_t* _mi_segment_page_start(const mi_segment_t* segment, const mi_page_t* page, size_t* page_size); // page start for any page -void _mi_abandoned_reclaim_all(mi_heap_t* heap, mi_segments_tld_t* tld); -void _mi_abandoned_await_readers(mi_abandoned_pool_t *pool); -void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld); - -// "page.c" -void* _mi_malloc_generic(mi_heap_t* heap, size_t size, bool zero, size_t huge_alignment) mi_attr_noexcept mi_attr_malloc; - -void _mi_page_retire(mi_page_t* page) mi_attr_noexcept; // free the page if there are no other pages with many free blocks -void _mi_page_unfull(mi_page_t* page); -void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq, bool force); // free the page -void _mi_page_abandon(mi_page_t* page, mi_page_queue_t* pq); // abandon the page, to be picked up by another thread... -void _mi_heap_delayed_free_all(mi_heap_t* heap); -bool _mi_heap_delayed_free_partial(mi_heap_t* heap); -void _mi_heap_collect_retired(mi_heap_t* heap, bool force); - -void _mi_page_use_delayed_free(mi_page_t* page, mi_delayed_t delay, bool override_never); -bool _mi_page_try_use_delayed_free(mi_page_t* page, mi_delayed_t delay, bool override_never); -size_t _mi_page_queue_append(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_queue_t* append); -void _mi_deferred_free(mi_heap_t* heap, bool force); - -void _mi_page_free_collect(mi_page_t* page,bool force); -void _mi_page_reclaim(mi_heap_t* heap, mi_page_t* page); // callback from segments - -size_t _mi_bin_size(uint8_t bin); // for stats -uint8_t _mi_bin(size_t size); // for stats - -// "heap.c" -void _mi_heap_init_ex(mi_heap_t* heap, mi_tld_t* tld, mi_arena_id_t arena_id, bool no_reclaim, uint8_t tag); -void _mi_heap_destroy_pages(mi_heap_t* heap); -void _mi_heap_collect_abandon(mi_heap_t* heap); -void _mi_heap_set_default_direct(mi_heap_t* heap); -bool _mi_heap_memid_is_suitable(mi_heap_t* heap, mi_memid_t memid); -void _mi_heap_unsafe_destroy_all(void); -void _mi_heap_area_init(mi_heap_area_t* area, mi_page_t* page); -bool _mi_heap_area_visit_blocks(const mi_heap_area_t* area, mi_page_t *page, mi_block_visit_fun* visitor, void* arg); - -// "stats.c" -void _mi_stats_done(mi_stats_t* stats); -mi_msecs_t _mi_clock_now(void); -mi_msecs_t _mi_clock_end(mi_msecs_t start); -mi_msecs_t _mi_clock_start(void); - -// "alloc.c" -void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t size, bool zero) mi_attr_noexcept; // called from `_mi_malloc_generic` -void* _mi_heap_malloc_zero(mi_heap_t* heap, size_t size, bool zero) mi_attr_noexcept; -void* _mi_heap_malloc_zero_ex(mi_heap_t* heap, size_t size, bool zero, size_t huge_alignment) mi_attr_noexcept; // called from `_mi_heap_malloc_aligned` -void* _mi_heap_realloc_zero(mi_heap_t* heap, void* p, size_t newsize, bool zero) mi_attr_noexcept; -mi_block_t* _mi_page_ptr_unalign(const mi_segment_t* segment, const mi_page_t* page, const void* p); -bool _mi_free_delayed_block(mi_block_t* block); -void _mi_free_generic(const mi_segment_t* segment, mi_page_t* page, bool is_local, void* p) mi_attr_noexcept; // for runtime integration -void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size); - -// option.c, c primitives -char _mi_toupper(char c); -int _mi_strnicmp(const char* s, const char* t, size_t n); -void _mi_strlcpy(char* dest, const char* src, size_t dest_size); -void _mi_strlcat(char* dest, const char* src, size_t dest_size); -size_t _mi_strlen(const char* s); -size_t _mi_strnlen(const char* s, size_t max_len); - - -#if MI_DEBUG>1 -bool _mi_page_is_valid(mi_page_t* page); -#endif - - -// ------------------------------------------------------ -// Branches -// ------------------------------------------------------ - -#if defined(__GNUC__) || defined(__clang__) -#define mi_unlikely(x) (__builtin_expect(!!(x),false)) -#define mi_likely(x) (__builtin_expect(!!(x),true)) -#elif (defined(__cplusplus) && (__cplusplus >= 202002L)) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) -#define mi_unlikely(x) (x) [[unlikely]] -#define mi_likely(x) (x) [[likely]] -#else -#define mi_unlikely(x) (x) -#define mi_likely(x) (x) -#endif - -#ifndef __has_builtin -#define __has_builtin(x) 0 -#endif - - -/* ----------------------------------------------------------- - Error codes passed to `_mi_fatal_error` - All are recoverable but EFAULT is a serious error and aborts by default in secure mode. - For portability define undefined error codes using common Unix codes: - <https://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html> ------------------------------------------------------------ */ -#include <errno.h> -#ifndef EAGAIN // double free -#define EAGAIN (11) -#endif -#ifndef ENOMEM // out of memory -#define ENOMEM (12) -#endif -#ifndef EFAULT // corrupted free-list or meta-data -#define EFAULT (14) -#endif -#ifndef EINVAL // trying to free an invalid pointer -#define EINVAL (22) -#endif -#ifndef EOVERFLOW // count*size overflow -#define EOVERFLOW (75) -#endif - - -/* ----------------------------------------------------------- - Inlined definitions ------------------------------------------------------------ */ -#define MI_UNUSED(x) (void)(x) -#if (MI_DEBUG>0) -#define MI_UNUSED_RELEASE(x) -#else -#define MI_UNUSED_RELEASE(x) MI_UNUSED(x) -#endif - -#define MI_INIT4(x) x(),x(),x(),x() -#define MI_INIT8(x) MI_INIT4(x),MI_INIT4(x) -#define MI_INIT16(x) MI_INIT8(x),MI_INIT8(x) -#define MI_INIT32(x) MI_INIT16(x),MI_INIT16(x) -#define MI_INIT64(x) MI_INIT32(x),MI_INIT32(x) -#define MI_INIT128(x) MI_INIT64(x),MI_INIT64(x) -#define MI_INIT256(x) MI_INIT128(x),MI_INIT128(x) - - -#include <string.h> -// initialize a local variable to zero; use memset as compilers optimize constant sized memset's -#define _mi_memzero_var(x) memset(&x,0,sizeof(x)) - -// Is `x` a power of two? (0 is considered a power of two) -static inline bool _mi_is_power_of_two(uintptr_t x) { - return ((x & (x - 1)) == 0); -} - -// Is a pointer aligned? -static inline bool _mi_is_aligned(void* p, size_t alignment) { - mi_assert_internal(alignment != 0); - return (((uintptr_t)p % alignment) == 0); -} - -// Align upwards -static inline uintptr_t _mi_align_up(uintptr_t sz, size_t alignment) { - mi_assert_internal(alignment != 0); - uintptr_t mask = alignment - 1; - if ((alignment & mask) == 0) { // power of two? - return ((sz + mask) & ~mask); - } - else { - return (((sz + mask)/alignment)*alignment); - } -} - -// Align downwards -static inline uintptr_t _mi_align_down(uintptr_t sz, size_t alignment) { - mi_assert_internal(alignment != 0); - uintptr_t mask = alignment - 1; - if ((alignment & mask) == 0) { // power of two? - return (sz & ~mask); - } - else { - return ((sz / alignment) * alignment); - } -} - -// Divide upwards: `s <= _mi_divide_up(s,d)*d < s+d`. -static inline uintptr_t _mi_divide_up(uintptr_t size, size_t divider) { - mi_assert_internal(divider != 0); - return (divider == 0 ? size : ((size + divider - 1) / divider)); -} - -// Is memory zero initialized? -static inline bool mi_mem_is_zero(const void* p, size_t size) { - for (size_t i = 0; i < size; i++) { - if (((uint8_t*)p)[i] != 0) return false; - } - return true; -} - - -// Align a byte size to a size in _machine words_, -// i.e. byte size == `wsize*sizeof(void*)`. -static inline size_t _mi_wsize_from_size(size_t size) { - mi_assert_internal(size <= SIZE_MAX - sizeof(uintptr_t)); - return (size + sizeof(uintptr_t) - 1) / sizeof(uintptr_t); -} - -// Overflow detecting multiply -#if __has_builtin(__builtin_umul_overflow) || (defined(__GNUC__) && (__GNUC__ >= 5)) -#include <limits.h> // UINT_MAX, ULONG_MAX -#if defined(_CLOCK_T) // for Illumos -#undef _CLOCK_T -#endif -static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) { - #if (SIZE_MAX == ULONG_MAX) - return __builtin_umull_overflow(count, size, (unsigned long *)total); - #elif (SIZE_MAX == UINT_MAX) - return __builtin_umul_overflow(count, size, (unsigned int *)total); - #else - return __builtin_umulll_overflow(count, size, (unsigned long long *)total); - #endif -} -#else /* __builtin_umul_overflow is unavailable */ -static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) { - #define MI_MUL_NO_OVERFLOW ((size_t)1 << (4*sizeof(size_t))) // sqrt(SIZE_MAX) - *total = count * size; - // note: gcc/clang optimize this to directly check the overflow flag - return ((size >= MI_MUL_NO_OVERFLOW || count >= MI_MUL_NO_OVERFLOW) && size > 0 && (SIZE_MAX / size) < count); -} -#endif - -// Safe multiply `count*size` into `total`; return `true` on overflow. -static inline bool mi_count_size_overflow(size_t count, size_t size, size_t* total) { - if (count==1) { // quick check for the case where count is one (common for C++ allocators) - *total = size; - return false; - } - else if mi_unlikely(mi_mul_overflow(count, size, total)) { - #if MI_DEBUG > 0 - _mi_error_message(EOVERFLOW, "allocation request is too large (%zu * %zu bytes)\n", count, size); - #endif - *total = SIZE_MAX; - return true; - } - else return false; -} - - -/*---------------------------------------------------------------------------------------- - Heap functions -------------------------------------------------------------------------------------------- */ - -extern const mi_heap_t _mi_heap_empty; // read-only empty heap, initial value of the thread local default heap - -static inline bool mi_heap_is_backing(const mi_heap_t* heap) { - return (heap->tld->heap_backing == heap); -} - -static inline bool mi_heap_is_initialized(mi_heap_t* heap) { - mi_assert_internal(heap != NULL); - return (heap != &_mi_heap_empty); -} - -static inline uintptr_t _mi_ptr_cookie(const void* p) { - extern mi_heap_t _mi_heap_main; - mi_assert_internal(_mi_heap_main.cookie != 0); - return ((uintptr_t)p ^ _mi_heap_main.cookie); -} - -/* ----------------------------------------------------------- - Pages ------------------------------------------------------------ */ - -static inline mi_page_t* _mi_heap_get_free_small_page(mi_heap_t* heap, size_t size) { - mi_assert_internal(size <= (MI_SMALL_SIZE_MAX + MI_PADDING_SIZE)); - const size_t idx = _mi_wsize_from_size(size); - mi_assert_internal(idx < MI_PAGES_DIRECT); - return heap->pages_free_direct[idx]; -} - -// Segment that contains the pointer -// Large aligned blocks may be aligned at N*MI_SEGMENT_SIZE (inside a huge segment > MI_SEGMENT_SIZE), -// and we need align "down" to the segment info which is `MI_SEGMENT_SIZE` bytes before it; -// therefore we align one byte before `p`. -static inline mi_segment_t* _mi_ptr_segment(const void* p) { - mi_assert_internal(p != NULL); - return (mi_segment_t*)(((uintptr_t)p - 1) & ~MI_SEGMENT_MASK); -} - -static inline mi_page_t* mi_slice_to_page(mi_slice_t* s) { - mi_assert_internal(s->slice_offset== 0 && s->slice_count > 0); - return (mi_page_t*)(s); -} - -static inline mi_slice_t* mi_page_to_slice(mi_page_t* p) { - mi_assert_internal(p->slice_offset== 0 && p->slice_count > 0); - return (mi_slice_t*)(p); -} - -// Segment belonging to a page -static inline mi_segment_t* _mi_page_segment(const mi_page_t* page) { - mi_segment_t* segment = _mi_ptr_segment(page); - mi_assert_internal(segment == NULL || ((mi_slice_t*)page >= segment->slices && (mi_slice_t*)page < segment->slices + segment->slice_entries)); - return segment; -} - -static inline mi_slice_t* mi_slice_first(const mi_slice_t* slice) { - mi_slice_t* start = (mi_slice_t*)((uint8_t*)slice - slice->slice_offset); - mi_assert_internal(start >= _mi_ptr_segment(slice)->slices); - mi_assert_internal(start->slice_offset == 0); - mi_assert_internal(start + start->slice_count > slice); - return start; -} - -// Get the page containing the pointer (performance critical as it is called in mi_free) -static inline mi_page_t* _mi_segment_page_of(const mi_segment_t* segment, const void* p) { - mi_assert_internal(p > (void*)segment); - ptrdiff_t diff = (uint8_t*)p - (uint8_t*)segment; - mi_assert_internal(diff > 0 && diff <= (ptrdiff_t)MI_SEGMENT_SIZE); - size_t idx = (size_t)diff >> MI_SEGMENT_SLICE_SHIFT; - mi_assert_internal(idx <= segment->slice_entries); - mi_slice_t* slice0 = (mi_slice_t*)&segment->slices[idx]; - mi_slice_t* slice = mi_slice_first(slice0); // adjust to the block that holds the page data - mi_assert_internal(slice->slice_offset == 0); - mi_assert_internal(slice >= segment->slices && slice < segment->slices + segment->slice_entries); - return mi_slice_to_page(slice); -} - -// Quick page start for initialized pages -static inline uint8_t* _mi_page_start(const mi_segment_t* segment, const mi_page_t* page, size_t* page_size) { - return _mi_segment_page_start(segment, page, page_size); -} - -// Get the page containing the pointer -static inline mi_page_t* _mi_ptr_page(void* p) { - return _mi_segment_page_of(_mi_ptr_segment(p), p); -} - -// Get the block size of a page (special case for huge objects) -static inline size_t mi_page_block_size(const mi_page_t* page) { - const size_t bsize = page->xblock_size; - mi_assert_internal(bsize > 0); - if mi_likely(bsize < MI_HUGE_BLOCK_SIZE) { - return bsize; - } - else { - size_t psize; - _mi_segment_page_start(_mi_page_segment(page), page, &psize); - return psize; - } -} - -static inline bool mi_page_is_huge(const mi_page_t* page) { - return (_mi_page_segment(page)->kind == MI_SEGMENT_HUGE); -} - -// Get the usable block size of a page without fixed padding. -// This may still include internal padding due to alignment and rounding up size classes. -static inline size_t mi_page_usable_block_size(const mi_page_t* page) { - return mi_page_block_size(page) - MI_PADDING_SIZE; -} - -// size of a segment -static inline size_t mi_segment_size(mi_segment_t* segment) { - return segment->segment_slices * MI_SEGMENT_SLICE_SIZE; -} - -static inline uint8_t* mi_segment_end(mi_segment_t* segment) { - return (uint8_t*)segment + mi_segment_size(segment); -} - -// Thread free access -static inline mi_block_t* mi_page_thread_free(const mi_page_t* page) { - return (mi_block_t*)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xthread_free) & ~3); -} - -static inline mi_delayed_t mi_page_thread_free_flag(const mi_page_t* page) { - return (mi_delayed_t)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xthread_free) & 3); -} - -// Heap access -static inline mi_heap_t* mi_page_heap(const mi_page_t* page) { - return (mi_heap_t*)(mi_atomic_load_relaxed(&((mi_page_t*)page)->xheap)); -} - -static inline void mi_page_set_heap(mi_page_t* page, mi_heap_t* heap) { - mi_assert_internal(mi_page_thread_free_flag(page) != MI_DELAYED_FREEING); - mi_atomic_store_release(&page->xheap,(uintptr_t)heap); -} - -// Thread free flag helpers -static inline mi_block_t* mi_tf_block(mi_thread_free_t tf) { - return (mi_block_t*)(tf & ~0x03); -} -static inline mi_delayed_t mi_tf_delayed(mi_thread_free_t tf) { - return (mi_delayed_t)(tf & 0x03); -} -static inline mi_thread_free_t mi_tf_make(mi_block_t* block, mi_delayed_t delayed) { - return (mi_thread_free_t)((uintptr_t)block | (uintptr_t)delayed); -} -static inline mi_thread_free_t mi_tf_set_delayed(mi_thread_free_t tf, mi_delayed_t delayed) { - return mi_tf_make(mi_tf_block(tf),delayed); -} -static inline mi_thread_free_t mi_tf_set_block(mi_thread_free_t tf, mi_block_t* block) { - return mi_tf_make(block, mi_tf_delayed(tf)); -} - -// are all blocks in a page freed? -// note: needs up-to-date used count, (as the `xthread_free` list may not be empty). see `_mi_page_collect_free`. -static inline bool mi_page_all_free(const mi_page_t* page) { - mi_assert_internal(page != NULL); - return (page->used == 0); -} - -// are there any available blocks? -static inline bool mi_page_has_any_available(const mi_page_t* page) { - mi_assert_internal(page != NULL && page->reserved > 0); - return (page->used < page->reserved || (mi_page_thread_free(page) != NULL)); -} - -// are there immediately available blocks, i.e. blocks available on the free list. -static inline bool mi_page_immediate_available(const mi_page_t* page) { - mi_assert_internal(page != NULL); - return (page->free != NULL); -} - -// is more than 7/8th of a page in use? -static inline bool mi_page_mostly_used(const mi_page_t* page) { - if (page==NULL) return true; - uint16_t frac = page->reserved / 8U; - return (page->reserved - page->used <= frac); -} - -static inline mi_page_queue_t* mi_page_queue(const mi_heap_t* heap, size_t size) { - return &((mi_heap_t*)heap)->pages[_mi_bin(size)]; -} - - - -//----------------------------------------------------------- -// Page flags -//----------------------------------------------------------- -static inline bool mi_page_is_in_full(const mi_page_t* page) { - return page->flags.x.in_full; -} - -static inline void mi_page_set_in_full(mi_page_t* page, bool in_full) { - page->flags.x.in_full = in_full; -} - -static inline bool mi_page_has_aligned(const mi_page_t* page) { - return page->flags.x.has_aligned; -} - -static inline void mi_page_set_has_aligned(mi_page_t* page, bool has_aligned) { - page->flags.x.has_aligned = has_aligned; -} - - -/* ------------------------------------------------------------------- -Encoding/Decoding the free list next pointers - -This is to protect against buffer overflow exploits where the -free list is mutated. Many hardened allocators xor the next pointer `p` -with a secret key `k1`, as `p^k1`. This prevents overwriting with known -values but might be still too weak: if the attacker can guess -the pointer `p` this can reveal `k1` (since `p^k1^p == k1`). -Moreover, if multiple blocks can be read as well, the attacker can -xor both as `(p1^k1) ^ (p2^k1) == p1^p2` which may reveal a lot -about the pointers (and subsequently `k1`). - -Instead mimalloc uses an extra key `k2` and encodes as `((p^k2)<<<k1)+k1`. -Since these operations are not associative, the above approaches do not -work so well any more even if the `p` can be guesstimated. For example, -for the read case we can subtract two entries to discard the `+k1` term, -but that leads to `((p1^k2)<<<k1) - ((p2^k2)<<<k1)` at best. -We include the left-rotation since xor and addition are otherwise linear -in the lowest bit. Finally, both keys are unique per page which reduces -the re-use of keys by a large factor. - -We also pass a separate `null` value to be used as `NULL` or otherwise -`(k2<<<k1)+k1` would appear (too) often as a sentinel value. -------------------------------------------------------------------- */ - -static inline bool mi_is_in_same_segment(const void* p, const void* q) { - return (_mi_ptr_segment(p) == _mi_ptr_segment(q)); -} - -static inline bool mi_is_in_same_page(const void* p, const void* q) { - mi_segment_t* segment = _mi_ptr_segment(p); - if (_mi_ptr_segment(q) != segment) return false; - // assume q may be invalid // return (_mi_segment_page_of(segment, p) == _mi_segment_page_of(segment, q)); - mi_page_t* page = _mi_segment_page_of(segment, p); - size_t psize; - uint8_t* start = _mi_segment_page_start(segment, page, &psize); - return (start <= (uint8_t*)q && (uint8_t*)q < start + psize); -} - -static inline uintptr_t mi_rotl(uintptr_t x, uintptr_t shift) { - shift %= MI_INTPTR_BITS; - return (shift==0 ? x : ((x << shift) | (x >> (MI_INTPTR_BITS - shift)))); -} -static inline uintptr_t mi_rotr(uintptr_t x, uintptr_t shift) { - shift %= MI_INTPTR_BITS; - return (shift==0 ? x : ((x >> shift) | (x << (MI_INTPTR_BITS - shift)))); -} - -static inline void* mi_ptr_decode(const void* null, const mi_encoded_t x, const uintptr_t* keys) { - void* p = (void*)(mi_rotr(x - keys[0], keys[0]) ^ keys[1]); - return (p==null ? NULL : p); -} - -static inline mi_encoded_t mi_ptr_encode(const void* null, const void* p, const uintptr_t* keys) { - uintptr_t x = (uintptr_t)(p==NULL ? null : p); - return mi_rotl(x ^ keys[1], keys[0]) + keys[0]; -} - -static inline mi_block_t* mi_block_nextx( const void* null, const mi_block_t* block, const uintptr_t* keys ) { - mi_track_mem_defined(block,sizeof(mi_block_t)); - mi_block_t* next; - #ifdef MI_ENCODE_FREELIST - next = (mi_block_t*)mi_ptr_decode(null, mi_atomic_load_relaxed((_Atomic(mi_encoded_t)*)&block->next), keys); - #else - MI_UNUSED(keys); MI_UNUSED(null); - next = (mi_block_t*)mi_atomic_load_relaxed((_Atomic(mi_encoded_t)*)&block->next); - #endif - mi_track_mem_noaccess(block,sizeof(mi_block_t)); - return next; -} - -static inline void mi_block_set_nextx(const void* null, mi_block_t* block, const mi_block_t* next, const uintptr_t* keys) { - mi_track_mem_undefined(block,sizeof(mi_block_t)); - #ifdef MI_ENCODE_FREELIST - mi_atomic_store_relaxed(&block->next, mi_ptr_encode(null, next, keys)); - #else - MI_UNUSED(keys); MI_UNUSED(null); - mi_atomic_store_relaxed(&block->next, (mi_encoded_t)next); - #endif - mi_track_mem_noaccess(block,sizeof(mi_block_t)); -} - -static inline mi_block_t* mi_block_next(const mi_page_t* page, const mi_block_t* block) { - #ifdef MI_ENCODE_FREELIST - mi_block_t* next = mi_block_nextx(page,block,page->keys); - // check for free list corruption: is `next` at least in the same page? - // TODO: check if `next` is `page->block_size` aligned? - if mi_unlikely(next!=NULL && !mi_is_in_same_page(block, next)) { - _mi_error_message(EFAULT, "corrupted free list entry of size %zub at %p: value 0x%zx\n", mi_page_block_size(page), block, (uintptr_t)next); - next = NULL; - } - return next; - #else - MI_UNUSED(page); - return mi_block_nextx(page,block,NULL); - #endif -} - -static inline void mi_block_set_next(const mi_page_t* page, mi_block_t* block, const mi_block_t* next) { - #ifdef MI_ENCODE_FREELIST - mi_block_set_nextx(page,block,next, page->keys); - #else - MI_UNUSED(page); - mi_block_set_nextx(page,block,next,NULL); - #endif -} - - -// ------------------------------------------------------------------- -// commit mask -// ------------------------------------------------------------------- - -static inline void mi_commit_mask_create_empty(mi_commit_mask_t* cm) { - for (size_t i = 0; i < MI_COMMIT_MASK_FIELD_COUNT; i++) { - cm->mask[i] = 0; - } -} - -static inline void mi_commit_mask_create_full(mi_commit_mask_t* cm) { - for (size_t i = 0; i < MI_COMMIT_MASK_FIELD_COUNT; i++) { - cm->mask[i] = ~((size_t)0); - } -} - -static inline bool mi_commit_mask_is_empty(const mi_commit_mask_t* cm) { - for (size_t i = 0; i < MI_COMMIT_MASK_FIELD_COUNT; i++) { - if (cm->mask[i] != 0) return false; - } - return true; -} - -static inline bool mi_commit_mask_is_full(const mi_commit_mask_t* cm) { - for (size_t i = 0; i < MI_COMMIT_MASK_FIELD_COUNT; i++) { - if (cm->mask[i] != ~((size_t)0)) return false; - } - return true; -} - -// defined in `segment.c`: -size_t _mi_commit_mask_committed_size(const mi_commit_mask_t* cm, size_t total); -size_t _mi_commit_mask_next_run(const mi_commit_mask_t* cm, size_t* idx); - -#define mi_commit_mask_foreach(cm,idx,count) \ - idx = 0; \ - while ((count = _mi_commit_mask_next_run(cm,&idx)) > 0) { - -#define mi_commit_mask_foreach_end() \ - idx += count; \ - } - - - -/* ----------------------------------------------------------- - memory id's ------------------------------------------------------------ */ - -static inline mi_memid_t _mi_memid_create(mi_memkind_t memkind) { - mi_memid_t memid; - _mi_memzero_var(memid); - memid.memkind = memkind; - return memid; -} - -static inline mi_memid_t _mi_memid_none(void) { - return _mi_memid_create(MI_MEM_NONE); -} - -static inline mi_memid_t _mi_memid_create_os(bool committed, bool is_zero, bool is_large) { - mi_memid_t memid = _mi_memid_create(MI_MEM_OS); - memid.initially_committed = committed; - memid.initially_zero = is_zero; - memid.is_pinned = is_large; - return memid; -} - - -// ------------------------------------------------------------------- -// Fast "random" shuffle -// ------------------------------------------------------------------- - -static inline uintptr_t _mi_random_shuffle(uintptr_t x) { - if (x==0) { x = 17; } // ensure we don't get stuck in generating zeros -#if (MI_INTPTR_SIZE==8) - // by Sebastiano Vigna, see: <http://xoshiro.di.unimi.it/splitmix64.c> - x ^= x >> 30; - x *= 0xbf58476d1ce4e5b9UL; - x ^= x >> 27; - x *= 0x94d049bb133111ebUL; - x ^= x >> 31; -#elif (MI_INTPTR_SIZE==4) - // by Chris Wellons, see: <https://nullprogram.com/blog/2018/07/31/> - x ^= x >> 16; - x *= 0x7feb352dUL; - x ^= x >> 15; - x *= 0x846ca68bUL; - x ^= x >> 16; -#endif - return x; -} - -// ------------------------------------------------------------------- -// Optimize numa node access for the common case (= one node) -// ------------------------------------------------------------------- - -int _mi_os_numa_node_get(mi_os_tld_t* tld); -size_t _mi_os_numa_node_count_get(void); - -extern _Atomic(size_t) _mi_numa_node_count; -static inline int _mi_os_numa_node(mi_os_tld_t* tld) { - if mi_likely(mi_atomic_load_relaxed(&_mi_numa_node_count) == 1) { return 0; } - else return _mi_os_numa_node_get(tld); -} -static inline size_t _mi_os_numa_node_count(void) { - const size_t count = mi_atomic_load_relaxed(&_mi_numa_node_count); - if mi_likely(count > 0) { return count; } - else return _mi_os_numa_node_count_get(); -} - - - -// ----------------------------------------------------------------------- -// Count bits: trailing or leading zeros (with MI_INTPTR_BITS on all zero) -// ----------------------------------------------------------------------- - -#if defined(__GNUC__) - -#include <limits.h> // LONG_MAX -#define MI_HAVE_FAST_BITSCAN -static inline size_t mi_clz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; -#if (INTPTR_MAX == LONG_MAX) - return __builtin_clzl(x); -#else - return __builtin_clzll(x); -#endif -} -static inline size_t mi_ctz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; -#if (INTPTR_MAX == LONG_MAX) - return __builtin_ctzl(x); -#else - return __builtin_ctzll(x); -#endif -} - -#elif defined(_MSC_VER) - -#include <limits.h> // LONG_MAX -#include <intrin.h> // BitScanReverse64 -#define MI_HAVE_FAST_BITSCAN -static inline size_t mi_clz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; - unsigned long idx; -#if (INTPTR_MAX == LONG_MAX) - _BitScanReverse(&idx, x); -#else - _BitScanReverse64(&idx, x); -#endif - return ((MI_INTPTR_BITS - 1) - idx); -} -static inline size_t mi_ctz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; - unsigned long idx; -#if (INTPTR_MAX == LONG_MAX) - _BitScanForward(&idx, x); -#else - _BitScanForward64(&idx, x); -#endif - return idx; -} - -#else -static inline size_t mi_ctz32(uint32_t x) { - // de Bruijn multiplication, see <http://supertech.csail.mit.edu/papers/debruijn.pdf> - static const unsigned char debruijn[32] = { - 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, - 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 - }; - if (x==0) return 32; - return debruijn[((x & -(int32_t)x) * 0x077CB531UL) >> 27]; -} -static inline size_t mi_clz32(uint32_t x) { - // de Bruijn multiplication, see <http://supertech.csail.mit.edu/papers/debruijn.pdf> - static const uint8_t debruijn[32] = { - 31, 22, 30, 21, 18, 10, 29, 2, 20, 17, 15, 13, 9, 6, 28, 1, - 23, 19, 11, 3, 16, 14, 7, 24, 12, 4, 8, 25, 5, 26, 27, 0 - }; - if (x==0) return 32; - x |= x >> 1; - x |= x >> 2; - x |= x >> 4; - x |= x >> 8; - x |= x >> 16; - return debruijn[(uint32_t)(x * 0x07C4ACDDUL) >> 27]; -} - -static inline size_t mi_clz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; -#if (MI_INTPTR_BITS <= 32) - return mi_clz32((uint32_t)x); -#else - size_t count = mi_clz32((uint32_t)(x >> 32)); - if (count < 32) return count; - return (32 + mi_clz32((uint32_t)x)); -#endif -} -static inline size_t mi_ctz(uintptr_t x) { - if (x==0) return MI_INTPTR_BITS; -#if (MI_INTPTR_BITS <= 32) - return mi_ctz32((uint32_t)x); -#else - size_t count = mi_ctz32((uint32_t)x); - if (count < 32) return count; - return (32 + mi_ctz32((uint32_t)(x>>32))); -#endif -} - -#endif - -// "bit scan reverse": Return index of the highest bit (or MI_INTPTR_BITS if `x` is zero) -static inline size_t mi_bsr(uintptr_t x) { - return (x==0 ? MI_INTPTR_BITS : MI_INTPTR_BITS - 1 - mi_clz(x)); -} - - -// --------------------------------------------------------------------------------- -// Provide our own `_mi_memcpy` for potential performance optimizations. -// -// For now, only on Windows with msvc/clang-cl we optimize to `rep movsb` if -// we happen to run on x86/x64 cpu's that have "fast short rep movsb" (FSRM) support -// (AMD Zen3+ (~2020) or Intel Ice Lake+ (~2017). See also issue #201 and pr #253. -// --------------------------------------------------------------------------------- - -#if !MI_TRACK_ENABLED && defined(_WIN32) && (defined(_M_IX86) || defined(_M_X64)) -#include <intrin.h> -extern bool _mi_cpu_has_fsrm; -static inline void _mi_memcpy(void* dst, const void* src, size_t n) { - if (_mi_cpu_has_fsrm) { - __movsb((unsigned char*)dst, (const unsigned char*)src, n); - } - else { - memcpy(dst, src, n); - } -} -static inline void _mi_memzero(void* dst, size_t n) { - if (_mi_cpu_has_fsrm) { - __stosb((unsigned char*)dst, 0, n); - } - else { - memset(dst, 0, n); - } -} -#else -static inline void _mi_memcpy(void* dst, const void* src, size_t n) { - memcpy(dst, src, n); -} -static inline void _mi_memzero(void* dst, size_t n) { - memset(dst, 0, n); -} -#endif - -// ------------------------------------------------------------------------------- -// The `_mi_memcpy_aligned` can be used if the pointers are machine-word aligned -// This is used for example in `mi_realloc`. -// ------------------------------------------------------------------------------- - -#if (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) -// On GCC/CLang we provide a hint that the pointers are word aligned. -static inline void _mi_memcpy_aligned(void* dst, const void* src, size_t n) { - mi_assert_internal(((uintptr_t)dst % MI_INTPTR_SIZE == 0) && ((uintptr_t)src % MI_INTPTR_SIZE == 0)); - void* adst = __builtin_assume_aligned(dst, MI_INTPTR_SIZE); - const void* asrc = __builtin_assume_aligned(src, MI_INTPTR_SIZE); - _mi_memcpy(adst, asrc, n); -} - -static inline void _mi_memzero_aligned(void* dst, size_t n) { - mi_assert_internal((uintptr_t)dst % MI_INTPTR_SIZE == 0); - void* adst = __builtin_assume_aligned(dst, MI_INTPTR_SIZE); - _mi_memzero(adst, n); -} -#else -// Default fallback on `_mi_memcpy` -static inline void _mi_memcpy_aligned(void* dst, const void* src, size_t n) { - mi_assert_internal(((uintptr_t)dst % MI_INTPTR_SIZE == 0) && ((uintptr_t)src % MI_INTPTR_SIZE == 0)); - _mi_memcpy(dst, src, n); -} - -static inline void _mi_memzero_aligned(void* dst, size_t n) { - mi_assert_internal((uintptr_t)dst % MI_INTPTR_SIZE == 0); - _mi_memzero(dst, n); -} -#endif - - -#endif diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/prim.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/prim.h deleted file mode 100644 index 322ab29e6..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/prim.h +++ /dev/null @@ -1,329 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023, Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_PRIM_H -#define MIMALLOC_PRIM_H - - -// -------------------------------------------------------------------------- -// This file specifies the primitive portability API. -// Each OS/host needs to implement these primitives, see `src/prim` -// for implementations on Window, macOS, WASI, and Linux/Unix. -// -// note: on all primitive functions, we always have result parameters != NUL, and: -// addr != NULL and page aligned -// size > 0 and page aligned -// return value is an error code an int where 0 is success. -// -------------------------------------------------------------------------- - -// OS memory configuration -typedef struct mi_os_mem_config_s { - size_t page_size; // 4KiB - size_t large_page_size; // 2MiB - size_t alloc_granularity; // smallest allocation size (on Windows 64KiB) - bool has_overcommit; // can we reserve more memory than can be actually committed? - bool must_free_whole; // must allocated blocks be freed as a whole (false for mmap, true for VirtualAlloc) - bool has_virtual_reserve; // supports virtual address space reservation? (if true we can reserve virtual address space without using commit or physical memory) -} mi_os_mem_config_t; - -// Initialize -void _mi_prim_mem_init( mi_os_mem_config_t* config ); - -// Free OS memory -int _mi_prim_free(void* addr, size_t size ); - -// Allocate OS memory. Return NULL on error. -// The `try_alignment` is just a hint and the returned pointer does not have to be aligned. -// If `commit` is false, the virtual memory range only needs to be reserved (with no access) -// which will later be committed explicitly using `_mi_prim_commit`. -// `is_zero` is set to true if the memory was zero initialized (as on most OS's) -// pre: !commit => !allow_large -// try_alignment >= _mi_os_page_size() and a power of 2 -int _mi_prim_alloc(size_t size, size_t try_alignment, bool commit, bool allow_large, bool* is_large, bool* is_zero, void** addr); - -// Commit memory. Returns error code or 0 on success. -// For example, on Linux this would make the memory PROT_READ|PROT_WRITE. -// `is_zero` is set to true if the memory was zero initialized (e.g. on Windows) -int _mi_prim_commit(void* addr, size_t size, bool* is_zero); - -// Decommit memory. Returns error code or 0 on success. The `needs_recommit` result is true -// if the memory would need to be re-committed. For example, on Windows this is always true, -// but on Linux we could use MADV_DONTNEED to decommit which does not need a recommit. -// pre: needs_recommit != NULL -int _mi_prim_decommit(void* addr, size_t size, bool* needs_recommit); - -// Reset memory. The range keeps being accessible but the content might be reset. -// Returns error code or 0 on success. -int _mi_prim_reset(void* addr, size_t size); - -// Protect memory. Returns error code or 0 on success. -int _mi_prim_protect(void* addr, size_t size, bool protect); - -// Allocate huge (1GiB) pages possibly associated with a NUMA node. -// `is_zero` is set to true if the memory was zero initialized (as on most OS's) -// pre: size > 0 and a multiple of 1GiB. -// numa_node is either negative (don't care), or a numa node number. -int _mi_prim_alloc_huge_os_pages(void* hint_addr, size_t size, int numa_node, bool* is_zero, void** addr); - -// Return the current NUMA node -size_t _mi_prim_numa_node(void); - -// Return the number of logical NUMA nodes -size_t _mi_prim_numa_node_count(void); - -// Clock ticks -mi_msecs_t _mi_prim_clock_now(void); - -// Return process information (only for statistics) -typedef struct mi_process_info_s { - mi_msecs_t elapsed; - mi_msecs_t utime; - mi_msecs_t stime; - size_t current_rss; - size_t peak_rss; - size_t current_commit; - size_t peak_commit; - size_t page_faults; -} mi_process_info_t; - -void _mi_prim_process_info(mi_process_info_t* pinfo); - -// Default stderr output. (only for warnings etc. with verbose enabled) -// msg != NULL && _mi_strlen(msg) > 0 -void _mi_prim_out_stderr( const char* msg ); - -// Get an environment variable. (only for options) -// name != NULL, result != NULL, result_size >= 64 -bool _mi_prim_getenv(const char* name, char* result, size_t result_size); - - -// Fill a buffer with strong randomness; return `false` on error or if -// there is no strong randomization available. -bool _mi_prim_random_buf(void* buf, size_t buf_len); - -// Called on the first thread start, and should ensure `_mi_thread_done` is called on thread termination. -void _mi_prim_thread_init_auto_done(void); - -// Called on process exit and may take action to clean up resources associated with the thread auto done. -void _mi_prim_thread_done_auto_done(void); - -// Called when the default heap for a thread changes -void _mi_prim_thread_associate_default_heap(mi_heap_t* heap); - - -//------------------------------------------------------------------- -// Thread id: `_mi_prim_thread_id()` -// -// Getting the thread id should be performant as it is called in the -// fast path of `_mi_free` and we specialize for various platforms as -// inlined definitions. Regular code should call `init.c:_mi_thread_id()`. -// We only require _mi_prim_thread_id() to return a unique id -// for each thread (unequal to zero). -//------------------------------------------------------------------- - -// defined in `init.c`; do not use these directly -extern mi_decl_thread mi_heap_t* _mi_heap_default; // default heap to allocate from -extern bool _mi_process_is_initialized; // has mi_process_init been called? - -static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept; - -#ifdef MI_PRIM_THREAD_ID - -static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept { - return MI_PRIM_THREAD_ID(); -} - -#elif defined(_WIN32) - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept { - // Windows: works on Intel and ARM in both 32- and 64-bit - return (uintptr_t)NtCurrentTeb(); -} - -// We use assembly for a fast thread id on the main platforms. The TLS layout depends on -// both the OS and libc implementation so we use specific tests for each main platform. -// If you test on another platform and it works please send a PR :-) -// see also https://akkadia.org/drepper/tls.pdf for more info on the TLS register. -#elif defined(__GNUC__) && ( \ - (defined(__GLIBC__) && (defined(__x86_64__) || defined(__i386__) || (defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__))) \ - || (defined(__APPLE__) && (defined(__x86_64__) || defined(__aarch64__))) \ - || (defined(__BIONIC__) && (defined(__x86_64__) || defined(__i386__) || (defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__))) \ - || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__) || defined(__aarch64__))) \ - || (defined(__OpenBSD__) && (defined(__x86_64__) || defined(__i386__) || defined(__aarch64__))) \ - ) - -static inline void* mi_prim_tls_slot(size_t slot) mi_attr_noexcept { - void* res; - const size_t ofs = (slot*sizeof(void*)); - #if defined(__i386__) - __asm__("movl %%gs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x86 32-bit always uses GS - #elif defined(__APPLE__) && defined(__x86_64__) - __asm__("movq %%gs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x86_64 macOSX uses GS - #elif defined(__x86_64__) && (MI_INTPTR_SIZE==4) - __asm__("movl %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x32 ABI - #elif defined(__x86_64__) - __asm__("movq %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x86_64 Linux, BSD uses FS - #elif defined(__arm__) - void** tcb; MI_UNUSED(ofs); - __asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); - res = tcb[slot]; - #elif defined(__aarch64__) - void** tcb; MI_UNUSED(ofs); - #if defined(__APPLE__) // M1, issue #343 - __asm__ volatile ("mrs %0, tpidrro_el0\nbic %0, %0, #7" : "=r" (tcb)); - #else - __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); - #endif - res = tcb[slot]; - #endif - return res; -} - -// setting a tls slot is only used on macOS for now -static inline void mi_prim_tls_slot_set(size_t slot, void* value) mi_attr_noexcept { - const size_t ofs = (slot*sizeof(void*)); - #if defined(__i386__) - __asm__("movl %1,%%gs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // 32-bit always uses GS - #elif defined(__APPLE__) && defined(__x86_64__) - __asm__("movq %1,%%gs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 macOS uses GS - #elif defined(__x86_64__) && (MI_INTPTR_SIZE==4) - __asm__("movl %1,%%fs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x32 ABI - #elif defined(__x86_64__) - __asm__("movq %1,%%fs:%0" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 Linux, BSD uses FS - #elif defined(__arm__) - void** tcb; MI_UNUSED(ofs); - __asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); - tcb[slot] = value; - #elif defined(__aarch64__) - void** tcb; MI_UNUSED(ofs); - #if defined(__APPLE__) // M1, issue #343 - __asm__ volatile ("mrs %0, tpidrro_el0\nbic %0, %0, #7" : "=r" (tcb)); - #else - __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); - #endif - tcb[slot] = value; - #endif -} - -static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept { - #if defined(__BIONIC__) - // issue #384, #495: on the Bionic libc (Android), slot 1 is the thread id - // see: https://github.com/aosp-mirror/platform_bionic/blob/c44b1d0676ded732df4b3b21c5f798eacae93228/libc/platform/bionic/tls_defines.h#L86 - return (uintptr_t)mi_prim_tls_slot(1); - #else - // in all our other targets, slot 0 is the thread id - // glibc: https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/x86_64/nptl/tls.h - // apple: https://github.com/apple/darwin-xnu/blob/main/libsyscall/os/tsd.h#L36 - return (uintptr_t)mi_prim_tls_slot(0); - #endif -} - -#else - -// otherwise use portable C, taking the address of a thread local variable (this is still very fast on most platforms). -static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept { - return (uintptr_t)&_mi_heap_default; -} - -#endif - - - -/* ---------------------------------------------------------------------------------------- -The thread local default heap: `_mi_prim_get_default_heap()` -This is inlined here as it is on the fast path for allocation functions. - -On most platforms (Windows, Linux, FreeBSD, NetBSD, etc), this just returns a -__thread local variable (`_mi_heap_default`). With the initial-exec TLS model this ensures -that the storage will always be available (allocated on the thread stacks). - -On some platforms though we cannot use that when overriding `malloc` since the underlying -TLS implementation (or the loader) will call itself `malloc` on a first access and recurse. -We try to circumvent this in an efficient way: -- macOSX : we use an unused TLS slot from the OS allocated slots (MI_TLS_SLOT). On OSX, the - loader itself calls `malloc` even before the modules are initialized. -- OpenBSD: we use an unused slot from the pthread block (MI_TLS_PTHREAD_SLOT_OFS). -- DragonFly: defaults are working but seem slow compared to freeBSD (see PR #323) -------------------------------------------------------------------------------------------- */ - -static inline mi_heap_t* mi_prim_get_default_heap(void); - -#if defined(MI_MALLOC_OVERRIDE) -#if defined(__APPLE__) // macOS - #define MI_TLS_SLOT 89 // seems unused? - // #define MI_TLS_RECURSE_GUARD 1 - // other possible unused ones are 9, 29, __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY4 (94), __PTK_FRAMEWORK_GC_KEY9 (112) and __PTK_FRAMEWORK_OLDGC_KEY9 (89) - // see <https://github.com/rweichler/substrate/blob/master/include/pthread_machdep.h> -#elif defined(__OpenBSD__) - // use end bytes of a name; goes wrong if anyone uses names > 23 characters (ptrhread specifies 16) - // see <https://github.com/openbsd/src/blob/master/lib/libc/include/thread_private.h#L371> - #define MI_TLS_PTHREAD_SLOT_OFS (6*sizeof(int) + 4*sizeof(void*) + 24) - // #elif defined(__DragonFly__) - // #warning "mimalloc is not working correctly on DragonFly yet." - // #define MI_TLS_PTHREAD_SLOT_OFS (4 + 1*sizeof(void*)) // offset `uniqueid` (also used by gdb?) <https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/lib/libthread_xu/thread/thr_private.h#L458> -#elif defined(__ANDROID__) - // See issue #381 - #define MI_TLS_PTHREAD -#endif -#endif - - -#if defined(MI_TLS_SLOT) - -static inline mi_heap_t* mi_prim_get_default_heap(void) { - mi_heap_t* heap = (mi_heap_t*)mi_prim_tls_slot(MI_TLS_SLOT); - if mi_unlikely(heap == NULL) { - #ifdef __GNUC__ - __asm(""); // prevent conditional load of the address of _mi_heap_empty - #endif - heap = (mi_heap_t*)&_mi_heap_empty; - } - return heap; -} - -#elif defined(MI_TLS_PTHREAD_SLOT_OFS) - -static inline mi_heap_t** mi_prim_tls_pthread_heap_slot(void) { - pthread_t self = pthread_self(); - #if defined(__DragonFly__) - if (self==NULL) return NULL; - #endif - return (mi_heap_t**)((uint8_t*)self + MI_TLS_PTHREAD_SLOT_OFS); -} - -static inline mi_heap_t* mi_prim_get_default_heap(void) { - mi_heap_t** pheap = mi_prim_tls_pthread_heap_slot(); - if mi_unlikely(pheap == NULL) return _mi_heap_main_get(); - mi_heap_t* heap = *pheap; - if mi_unlikely(heap == NULL) return (mi_heap_t*)&_mi_heap_empty; - return heap; -} - -#elif defined(MI_TLS_PTHREAD) - -extern pthread_key_t _mi_heap_default_key; -static inline mi_heap_t* mi_prim_get_default_heap(void) { - mi_heap_t* heap = (mi_unlikely(_mi_heap_default_key == (pthread_key_t)(-1)) ? _mi_heap_main_get() : (mi_heap_t*)pthread_getspecific(_mi_heap_default_key)); - return (mi_unlikely(heap == NULL) ? (mi_heap_t*)&_mi_heap_empty : heap); -} - -#else // default using a thread local variable; used on most platforms. - -static inline mi_heap_t* mi_prim_get_default_heap(void) { - #if defined(MI_TLS_RECURSE_GUARD) - if (mi_unlikely(!_mi_process_is_initialized)) return _mi_heap_main_get(); - #endif - return _mi_heap_default; -} - -#endif // mi_prim_get_default_heap() - - - -#endif // MIMALLOC_PRIM_H diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/track.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/track.h deleted file mode 100644 index fa1a048d8..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/track.h +++ /dev/null @@ -1,147 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023, Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_TRACK_H -#define MIMALLOC_TRACK_H - -/* ------------------------------------------------------------------------------------------------------ -Track memory ranges with macros for tools like Valgrind address sanitizer, or other memory checkers. -These can be defined for tracking allocation: - - #define mi_track_malloc_size(p,reqsize,size,zero) - #define mi_track_free_size(p,_size) - -The macros are set up such that the size passed to `mi_track_free_size` -always matches the size of `mi_track_malloc_size`. (currently, `size == mi_usable_size(p)`). -The `reqsize` is what the user requested, and `size >= reqsize`. -The `size` is either byte precise (and `size==reqsize`) if `MI_PADDING` is enabled, -or otherwise it is the usable block size which may be larger than the original request. -Use `_mi_block_size_of(void* p)` to get the full block size that was allocated (including padding etc). -The `zero` parameter is `true` if the allocated block is zero initialized. - -Optional: - - #define mi_track_align(p,alignedp,offset,size) - #define mi_track_resize(p,oldsize,newsize) - #define mi_track_init() - -The `mi_track_align` is called right after a `mi_track_malloc` for aligned pointers in a block. -The corresponding `mi_track_free` still uses the block start pointer and original size (corresponding to the `mi_track_malloc`). -The `mi_track_resize` is currently unused but could be called on reallocations within a block. -`mi_track_init` is called at program start. - -The following macros are for tools like asan and valgrind to track whether memory is -defined, undefined, or not accessible at all: - - #define mi_track_mem_defined(p,size) - #define mi_track_mem_undefined(p,size) - #define mi_track_mem_noaccess(p,size) - --------------------------------------------------------------------------------------------------------*/ - -#if MI_TRACK_VALGRIND -// valgrind tool - -#define MI_TRACK_ENABLED 1 -#define MI_TRACK_HEAP_DESTROY 1 // track free of individual blocks on heap_destroy -#define MI_TRACK_TOOL "valgrind" - -#include <valgrind/valgrind.h> -#include <valgrind/memcheck.h> - -#define mi_track_malloc_size(p,reqsize,size,zero) VALGRIND_MALLOCLIKE_BLOCK(p,size,MI_PADDING_SIZE /*red zone*/,zero) -#define mi_track_free_size(p,_size) VALGRIND_FREELIKE_BLOCK(p,MI_PADDING_SIZE /*red zone*/) -#define mi_track_resize(p,oldsize,newsize) VALGRIND_RESIZEINPLACE_BLOCK(p,oldsize,newsize,MI_PADDING_SIZE /*red zone*/) -#define mi_track_mem_defined(p,size) VALGRIND_MAKE_MEM_DEFINED(p,size) -#define mi_track_mem_undefined(p,size) VALGRIND_MAKE_MEM_UNDEFINED(p,size) -#define mi_track_mem_noaccess(p,size) VALGRIND_MAKE_MEM_NOACCESS(p,size) - -#elif MI_TRACK_ASAN -// address sanitizer - -#define MI_TRACK_ENABLED 1 -#define MI_TRACK_HEAP_DESTROY 0 -#define MI_TRACK_TOOL "asan" - -#include <sanitizer/asan_interface.h> - -#define mi_track_malloc_size(p,reqsize,size,zero) ASAN_UNPOISON_MEMORY_REGION(p,size) -#define mi_track_free_size(p,size) ASAN_POISON_MEMORY_REGION(p,size) -#define mi_track_mem_defined(p,size) ASAN_UNPOISON_MEMORY_REGION(p,size) -#define mi_track_mem_undefined(p,size) ASAN_UNPOISON_MEMORY_REGION(p,size) -#define mi_track_mem_noaccess(p,size) ASAN_POISON_MEMORY_REGION(p,size) - -#elif MI_TRACK_ETW -// windows event tracing - -#define MI_TRACK_ENABLED 1 -#define MI_TRACK_HEAP_DESTROY 1 -#define MI_TRACK_TOOL "ETW" - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include "../src/prim/windows/etw.h" - -#define mi_track_init() EventRegistermicrosoft_windows_mimalloc(); -#define mi_track_malloc_size(p,reqsize,size,zero) EventWriteETW_MI_ALLOC((UINT64)(p), size) -#define mi_track_free_size(p,size) EventWriteETW_MI_FREE((UINT64)(p), size) - -#else -// no tracking - -#define MI_TRACK_ENABLED 0 -#define MI_TRACK_HEAP_DESTROY 0 -#define MI_TRACK_TOOL "none" - -#define mi_track_malloc_size(p,reqsize,size,zero) -#define mi_track_free_size(p,_size) - -#endif - -// ------------------- -// Utility definitions - -#ifndef mi_track_resize -#define mi_track_resize(p,oldsize,newsize) mi_track_free_size(p,oldsize); mi_track_malloc(p,newsize,false) -#endif - -#ifndef mi_track_align -#define mi_track_align(p,alignedp,offset,size) mi_track_mem_noaccess(p,offset) -#endif - -#ifndef mi_track_init -#define mi_track_init() -#endif - -#ifndef mi_track_mem_defined -#define mi_track_mem_defined(p,size) -#endif - -#ifndef mi_track_mem_undefined -#define mi_track_mem_undefined(p,size) -#endif - -#ifndef mi_track_mem_noaccess -#define mi_track_mem_noaccess(p,size) -#endif - - -#if MI_PADDING -#define mi_track_malloc(p,reqsize,zero) \ - if ((p)!=NULL) { \ - mi_assert_internal(mi_usable_size(p)==(reqsize)); \ - mi_track_malloc_size(p,reqsize,reqsize,zero); \ - } -#else -#define mi_track_malloc(p,reqsize,zero) \ - if ((p)!=NULL) { \ - mi_assert_internal(mi_usable_size(p)>=(reqsize)); \ - mi_track_malloc_size(p,reqsize,mi_usable_size(p),zero); \ - } -#endif - -#endif diff --git a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/types.h b/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/types.h deleted file mode 100644 index 70c600e92..000000000 --- a/Python314_4_x86_Template/include/internal/mimalloc/mimalloc/types.h +++ /dev/null @@ -1,721 +0,0 @@ -/* ---------------------------------------------------------------------------- -Copyright (c) 2018-2023, Microsoft Research, Daan Leijen -This is free software; you can redistribute it and/or modify it under the -terms of the MIT license. A copy of the license can be found in the file -"LICENSE" at the root of this distribution. ------------------------------------------------------------------------------*/ -#pragma once -#ifndef MIMALLOC_TYPES_H -#define MIMALLOC_TYPES_H - -// -------------------------------------------------------------------------- -// This file contains the main type definitions for mimalloc: -// mi_heap_t : all data for a thread-local heap, contains -// lists of all managed heap pages. -// mi_segment_t : a larger chunk of memory (32GiB) from where pages -// are allocated. -// mi_page_t : a mimalloc page (usually 64KiB or 512KiB) from -// where objects are allocated. -// -------------------------------------------------------------------------- - - -#include <stddef.h> // ptrdiff_t -#include <stdint.h> // uintptr_t, uint16_t, etc -#include "atomic.h" // _Atomic - -#ifdef _MSC_VER -#pragma warning(disable:4214) // bitfield is not int -#endif - -// Minimal alignment necessary. On most platforms 16 bytes are needed -// due to SSE registers for example. This must be at least `sizeof(void*)` -#ifndef MI_MAX_ALIGN_SIZE -#define MI_MAX_ALIGN_SIZE 16 // sizeof(max_align_t) -#endif - -#define MI_CACHE_LINE 64 -#if defined(_MSC_VER) -#pragma warning(disable:4127) // suppress constant conditional warning (due to MI_SECURE paths) -#pragma warning(disable:26812) // unscoped enum warning -#define mi_decl_noinline __declspec(noinline) -#define mi_decl_thread __declspec(thread) -#define mi_decl_cache_align __declspec(align(MI_CACHE_LINE)) -#elif (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) // includes clang and icc -#define mi_decl_noinline __attribute__((noinline)) -#define mi_decl_thread __thread -#define mi_decl_cache_align __attribute__((aligned(MI_CACHE_LINE))) -#else -#define mi_decl_noinline -#define mi_decl_thread __thread // hope for the best :-) -#define mi_decl_cache_align -#endif - -// ------------------------------------------------------ -// Variants -// ------------------------------------------------------ - -// Define NDEBUG in the release version to disable assertions. -// #define NDEBUG - -// Define MI_TRACK_<tool> to enable tracking support -// #define MI_TRACK_VALGRIND 1 -// #define MI_TRACK_ASAN 1 -// #define MI_TRACK_ETW 1 - -// Define MI_STAT as 1 to maintain statistics; set it to 2 to have detailed statistics (but costs some performance). -// #define MI_STAT 1 - -// Define MI_SECURE to enable security mitigations -// #define MI_SECURE 1 // guard page around metadata -// #define MI_SECURE 2 // guard page around each mimalloc page -// #define MI_SECURE 3 // encode free lists (detect corrupted free list (buffer overflow), and invalid pointer free) -// #define MI_SECURE 4 // checks for double free. (may be more expensive) - -#if !defined(MI_SECURE) -#define MI_SECURE 0 -#endif - -// Define MI_DEBUG for debug mode -// #define MI_DEBUG 1 // basic assertion checks and statistics, check double free, corrupted free list, and invalid pointer free. -// #define MI_DEBUG 2 // + internal assertion checks -// #define MI_DEBUG 3 // + extensive internal invariant checking (cmake -DMI_DEBUG_FULL=ON) -#if !defined(MI_DEBUG) -#if !defined(NDEBUG) || defined(_DEBUG) -#define MI_DEBUG 2 -#else -#define MI_DEBUG 0 -#endif -#endif - -// Reserve extra padding at the end of each block to be more resilient against heap block overflows. -// The padding can detect buffer overflow on free. -#if !defined(MI_PADDING) && (MI_SECURE>=3 || MI_DEBUG>=1 || (MI_TRACK_VALGRIND || MI_TRACK_ASAN || MI_TRACK_ETW)) -#define MI_PADDING 1 -#endif - -// Check padding bytes; allows byte-precise buffer overflow detection -#if !defined(MI_PADDING_CHECK) && MI_PADDING && (MI_SECURE>=3 || MI_DEBUG>=1) -#define MI_PADDING_CHECK 1 -#endif - - -// Encoded free lists allow detection of corrupted free lists -// and can detect buffer overflows, modify after free, and double `free`s. -#if (MI_SECURE>=3 || MI_DEBUG>=1) -#define MI_ENCODE_FREELIST 1 -#endif - - -// We used to abandon huge pages but to eagerly deallocate if freed from another thread, -// but that makes it not possible to visit them during a heap walk or include them in a -// `mi_heap_destroy`. We therefore instead reset/decommit the huge blocks if freed from -// another thread so most memory is available until it gets properly freed by the owning thread. -// #define MI_HUGE_PAGE_ABANDON 1 - - -// ------------------------------------------------------ -// Platform specific values -// ------------------------------------------------------ - -// ------------------------------------------------------ -// Size of a pointer. -// We assume that `sizeof(void*)==sizeof(intptr_t)` -// and it holds for all platforms we know of. -// -// However, the C standard only requires that: -// p == (void*)((intptr_t)p)) -// but we also need: -// i == (intptr_t)((void*)i) -// or otherwise one might define an intptr_t type that is larger than a pointer... -// ------------------------------------------------------ - -#if INTPTR_MAX > INT64_MAX -# define MI_INTPTR_SHIFT (4) // assume 128-bit (as on arm CHERI for example) -#elif INTPTR_MAX == INT64_MAX -# define MI_INTPTR_SHIFT (3) -#elif INTPTR_MAX == INT32_MAX -# define MI_INTPTR_SHIFT (2) -#else -#error platform pointers must be 32, 64, or 128 bits -#endif - -#if SIZE_MAX == UINT64_MAX -# define MI_SIZE_SHIFT (3) -typedef int64_t mi_ssize_t; -#elif SIZE_MAX == UINT32_MAX -# define MI_SIZE_SHIFT (2) -typedef int32_t mi_ssize_t; -#else -#error platform objects must be 32 or 64 bits -#endif - -#if (SIZE_MAX/2) > LONG_MAX -# define MI_ZU(x) x##ULL -# define MI_ZI(x) x##LL -#else -# define MI_ZU(x) x##UL -# define MI_ZI(x) x##L -#endif - -#define MI_INTPTR_SIZE (1<<MI_INTPTR_SHIFT) -#define MI_INTPTR_BITS (MI_INTPTR_SIZE*8) - -#define MI_SIZE_SIZE (1<<MI_SIZE_SHIFT) -#define MI_SIZE_BITS (MI_SIZE_SIZE*8) - -#define MI_KiB (MI_ZU(1024)) -#define MI_MiB (MI_KiB*MI_KiB) -#define MI_GiB (MI_MiB*MI_KiB) - - -// ------------------------------------------------------ -// Main internal data-structures -// ------------------------------------------------------ - -// Main tuning parameters for segment and page sizes -// Sizes for 64-bit (usually divide by two for 32-bit) -#define MI_SEGMENT_SLICE_SHIFT (13 + MI_INTPTR_SHIFT) // 64KiB (32KiB on 32-bit) - -#if MI_INTPTR_SIZE > 4 -#define MI_SEGMENT_SHIFT ( 9 + MI_SEGMENT_SLICE_SHIFT) // 32MiB -#else -#define MI_SEGMENT_SHIFT ( 7 + MI_SEGMENT_SLICE_SHIFT) // 4MiB on 32-bit -#endif - -#define MI_SMALL_PAGE_SHIFT (MI_SEGMENT_SLICE_SHIFT) // 64KiB -#define MI_MEDIUM_PAGE_SHIFT ( 3 + MI_SMALL_PAGE_SHIFT) // 512KiB - - -// Derived constants -#define MI_SEGMENT_SIZE (MI_ZU(1)<<MI_SEGMENT_SHIFT) -#define MI_SEGMENT_ALIGN MI_SEGMENT_SIZE -#define MI_SEGMENT_MASK ((uintptr_t)(MI_SEGMENT_ALIGN - 1)) -#define MI_SEGMENT_SLICE_SIZE (MI_ZU(1)<< MI_SEGMENT_SLICE_SHIFT) -#define MI_SLICES_PER_SEGMENT (MI_SEGMENT_SIZE / MI_SEGMENT_SLICE_SIZE) // 1024 - -#define MI_SMALL_PAGE_SIZE (MI_ZU(1)<<MI_SMALL_PAGE_SHIFT) -#define MI_MEDIUM_PAGE_SIZE (MI_ZU(1)<<MI_MEDIUM_PAGE_SHIFT) - -#define MI_SMALL_OBJ_SIZE_MAX (MI_SMALL_PAGE_SIZE/4) // 8KiB on 64-bit -#define MI_MEDIUM_OBJ_SIZE_MAX (MI_MEDIUM_PAGE_SIZE/4) // 128KiB on 64-bit -#define MI_MEDIUM_OBJ_WSIZE_MAX (MI_MEDIUM_OBJ_SIZE_MAX/MI_INTPTR_SIZE) -#define MI_LARGE_OBJ_SIZE_MAX (MI_SEGMENT_SIZE/2) // 32MiB on 64-bit -#define MI_LARGE_OBJ_WSIZE_MAX (MI_LARGE_OBJ_SIZE_MAX/MI_INTPTR_SIZE) - -// Maximum number of size classes. (spaced exponentially in 12.5% increments) -#define MI_BIN_HUGE (73U) - -#if (MI_MEDIUM_OBJ_WSIZE_MAX >= 655360) -#error "mimalloc internal: define more bins" -#endif - -// Maximum slice offset (15) -#define MI_MAX_SLICE_OFFSET ((MI_ALIGNMENT_MAX / MI_SEGMENT_SLICE_SIZE) - 1) - -// Used as a special value to encode block sizes in 32 bits. -#define MI_HUGE_BLOCK_SIZE ((uint32_t)(2*MI_GiB)) - -// blocks up to this size are always allocated aligned -#define MI_MAX_ALIGN_GUARANTEE (8*MI_MAX_ALIGN_SIZE) - -// Alignments over MI_ALIGNMENT_MAX are allocated in dedicated huge page segments -#define MI_ALIGNMENT_MAX (MI_SEGMENT_SIZE >> 1) - - -// ------------------------------------------------------ -// Mimalloc pages contain allocated blocks -// ------------------------------------------------------ - -// The free lists use encoded next fields -// (Only actually encodes when MI_ENCODED_FREELIST is defined.) -typedef uintptr_t mi_encoded_t; - -// thread id's -typedef size_t mi_threadid_t; - -// free lists contain blocks -typedef struct mi_block_s { - _Atomic(mi_encoded_t) next; -} mi_block_t; - - -// The delayed flags are used for efficient multi-threaded free-ing -typedef enum mi_delayed_e { - MI_USE_DELAYED_FREE = 0, // push on the owning heap thread delayed list - MI_DELAYED_FREEING = 1, // temporary: another thread is accessing the owning heap - MI_NO_DELAYED_FREE = 2, // optimize: push on page local thread free queue if another block is already in the heap thread delayed free list - MI_NEVER_DELAYED_FREE = 3 // sticky, only resets on page reclaim -} mi_delayed_t; - - -// The `in_full` and `has_aligned` page flags are put in a union to efficiently -// test if both are false (`full_aligned == 0`) in the `mi_free` routine. -#if !MI_TSAN -typedef union mi_page_flags_s { - uint8_t full_aligned; - struct { - uint8_t in_full : 1; - uint8_t has_aligned : 1; - } x; -} mi_page_flags_t; -#else -// under thread sanitizer, use a byte for each flag to suppress warning, issue #130 -typedef union mi_page_flags_s { - uint16_t full_aligned; - struct { - uint8_t in_full; - uint8_t has_aligned; - } x; -} mi_page_flags_t; -#endif - -// Thread free list. -// We use the bottom 2 bits of the pointer for mi_delayed_t flags -typedef uintptr_t mi_thread_free_t; - -// A page contains blocks of one specific size (`block_size`). -// Each page has three list of free blocks: -// `free` for blocks that can be allocated, -// `local_free` for freed blocks that are not yet available to `mi_malloc` -// `thread_free` for freed blocks by other threads -// The `local_free` and `thread_free` lists are migrated to the `free` list -// when it is exhausted. The separate `local_free` list is necessary to -// implement a monotonic heartbeat. The `thread_free` list is needed for -// avoiding atomic operations in the common case. -// -// -// `used - |thread_free|` == actual blocks that are in use (alive) -// `used - |thread_free| + |free| + |local_free| == capacity` -// -// We don't count `freed` (as |free|) but use `used` to reduce -// the number of memory accesses in the `mi_page_all_free` function(s). -// -// Notes: -// - Access is optimized for `mi_free` and `mi_page_alloc` (in `alloc.c`) -// - Using `uint16_t` does not seem to slow things down -// - The size is 8 words on 64-bit which helps the page index calculations -// (and 10 words on 32-bit, and encoded free lists add 2 words. Sizes 10 -// and 12 are still good for address calculation) -// - To limit the structure size, the `xblock_size` is 32-bits only; for -// blocks > MI_HUGE_BLOCK_SIZE the size is determined from the segment page size -// - `thread_free` uses the bottom bits as a delayed-free flags to optimize -// concurrent frees where only the first concurrent free adds to the owning -// heap `thread_delayed_free` list (see `alloc.c:mi_free_block_mt`). -// The invariant is that no-delayed-free is only set if there is -// at least one block that will be added, or as already been added, to -// the owning heap `thread_delayed_free` list. This guarantees that pages -// will be freed correctly even if only other threads free blocks. -typedef struct mi_page_s { - // "owned" by the segment - uint32_t slice_count; // slices in this page (0 if not a page) - uint32_t slice_offset; // distance from the actual page data slice (0 if a page) - uint8_t is_committed : 1; // `true` if the page virtual memory is committed - uint8_t is_zero_init : 1; // `true` if the page was initially zero initialized - uint8_t use_qsbr : 1; // delay page freeing using qsbr - uint8_t tag : 4; // tag from the owning heap - uint8_t debug_offset; // number of bytes to preserve when filling freed or uninitialized memory - - // layout like this to optimize access in `mi_malloc` and `mi_free` - uint16_t capacity; // number of blocks committed, must be the first field, see `segment.c:page_clear` - uint16_t reserved; // number of blocks reserved in memory - mi_page_flags_t flags; // `in_full` and `has_aligned` flags (8 bits) - uint8_t free_is_zero : 1; // `true` if the blocks in the free list are zero initialized - uint8_t retire_expire : 7; // expiration count for retired blocks - - mi_block_t* free; // list of available free blocks (`malloc` allocates from this list) - uint32_t used; // number of blocks in use (including blocks in `local_free` and `thread_free`) - uint32_t xblock_size; // size available in each block (always `>0`) - mi_block_t* local_free; // list of deferred free blocks by this thread (migrates to `free`) - - #if (MI_ENCODE_FREELIST || MI_PADDING) - uintptr_t keys[2]; // two random keys to encode the free lists (see `_mi_block_next`) or padding canary - #endif - - _Atomic(mi_thread_free_t) xthread_free; // list of deferred free blocks freed by other threads - _Atomic(uintptr_t) xheap; - - struct mi_page_s* next; // next page owned by this thread with the same `block_size` - struct mi_page_s* prev; // previous page owned by this thread with the same `block_size` - -#ifdef Py_GIL_DISABLED - struct llist_node qsbr_node; - uint64_t qsbr_goal; -#endif - - // 64-bit 9 words, 32-bit 12 words, (+2 for secure) - #if MI_INTPTR_SIZE==8 && !defined(Py_GIL_DISABLED) - uintptr_t padding[1]; - #endif -} mi_page_t; - - - -// ------------------------------------------------------ -// Mimalloc segments contain mimalloc pages -// ------------------------------------------------------ - -typedef enum mi_page_kind_e { - MI_PAGE_SMALL, // small blocks go into 64KiB pages inside a segment - MI_PAGE_MEDIUM, // medium blocks go into medium pages inside a segment - MI_PAGE_LARGE, // larger blocks go into a page of just one block - MI_PAGE_HUGE, // huge blocks (> 16 MiB) are put into a single page in a single segment. -} mi_page_kind_t; - -typedef enum mi_segment_kind_e { - MI_SEGMENT_NORMAL, // MI_SEGMENT_SIZE size with pages inside. - MI_SEGMENT_HUGE, // > MI_LARGE_SIZE_MAX segment with just one huge page inside. -} mi_segment_kind_t; - -// ------------------------------------------------------ -// A segment holds a commit mask where a bit is set if -// the corresponding MI_COMMIT_SIZE area is committed. -// The MI_COMMIT_SIZE must be a multiple of the slice -// size. If it is equal we have the most fine grained -// decommit (but setting it higher can be more efficient). -// The MI_MINIMAL_COMMIT_SIZE is the minimal amount that will -// be committed in one go which can be set higher than -// MI_COMMIT_SIZE for efficiency (while the decommit mask -// is still tracked in fine-grained MI_COMMIT_SIZE chunks) -// ------------------------------------------------------ - -#define MI_MINIMAL_COMMIT_SIZE (1*MI_SEGMENT_SLICE_SIZE) -#define MI_COMMIT_SIZE (MI_SEGMENT_SLICE_SIZE) // 64KiB -#define MI_COMMIT_MASK_BITS (MI_SEGMENT_SIZE / MI_COMMIT_SIZE) -#define MI_COMMIT_MASK_FIELD_BITS MI_SIZE_BITS -#define MI_COMMIT_MASK_FIELD_COUNT (MI_COMMIT_MASK_BITS / MI_COMMIT_MASK_FIELD_BITS) - -#if (MI_COMMIT_MASK_BITS != (MI_COMMIT_MASK_FIELD_COUNT * MI_COMMIT_MASK_FIELD_BITS)) -#error "the segment size must be exactly divisible by the (commit size * size_t bits)" -#endif - -typedef struct mi_commit_mask_s { - size_t mask[MI_COMMIT_MASK_FIELD_COUNT]; -} mi_commit_mask_t; - -typedef mi_page_t mi_slice_t; -typedef int64_t mi_msecs_t; - - -// Memory can reside in arena's, direct OS allocated, or statically allocated. The memid keeps track of this. -typedef enum mi_memkind_e { - MI_MEM_NONE, // not allocated - MI_MEM_EXTERNAL, // not owned by mimalloc but provided externally (via `mi_manage_os_memory` for example) - MI_MEM_STATIC, // allocated in a static area and should not be freed (for arena meta data for example) - MI_MEM_OS, // allocated from the OS - MI_MEM_OS_HUGE, // allocated as huge os pages - MI_MEM_OS_REMAP, // allocated in a remapable area (i.e. using `mremap`) - MI_MEM_ARENA // allocated from an arena (the usual case) -} mi_memkind_t; - -static inline bool mi_memkind_is_os(mi_memkind_t memkind) { - return (memkind >= MI_MEM_OS && memkind <= MI_MEM_OS_REMAP); -} - -typedef struct mi_memid_os_info { - void* base; // actual base address of the block (used for offset aligned allocations) - size_t alignment; // alignment at allocation -} mi_memid_os_info_t; - -typedef struct mi_memid_arena_info { - size_t block_index; // index in the arena - mi_arena_id_t id; // arena id (>= 1) - bool is_exclusive; // the arena can only be used for specific arena allocations -} mi_memid_arena_info_t; - -typedef struct mi_memid_s { - union { - mi_memid_os_info_t os; // only used for MI_MEM_OS - mi_memid_arena_info_t arena; // only used for MI_MEM_ARENA - } mem; - bool is_pinned; // `true` if we cannot decommit/reset/protect in this memory (e.g. when allocated using large OS pages) - bool initially_committed;// `true` if the memory was originally allocated as committed - bool initially_zero; // `true` if the memory was originally zero initialized - mi_memkind_t memkind; -} mi_memid_t; - - -// Segments are large allocated memory blocks (8mb on 64 bit) from -// the OS. Inside segments we allocated fixed size _pages_ that -// contain blocks. -typedef struct mi_segment_s { - // constant fields - mi_memid_t memid; // memory id for arena allocation - bool allow_decommit; - bool allow_purge; - size_t segment_size; - - // segment fields - mi_msecs_t purge_expire; - mi_commit_mask_t purge_mask; - mi_commit_mask_t commit_mask; - - _Atomic(struct mi_segment_s*) abandoned_next; - - // from here is zero initialized - struct mi_segment_s* next; // the list of freed segments in the cache (must be first field, see `segment.c:mi_segment_init`) - - size_t abandoned; // abandoned pages (i.e. the original owning thread stopped) (`abandoned <= used`) - size_t abandoned_visits; // count how often this segment is visited in the abandoned list (to force reclaim it it is too long) - size_t used; // count of pages in use - uintptr_t cookie; // verify addresses in debug mode: `mi_ptr_cookie(segment) == segment->cookie` - - size_t segment_slices; // for huge segments this may be different from `MI_SLICES_PER_SEGMENT` - size_t segment_info_slices; // initial slices we are using segment info and possible guard pages. - - // layout like this to optimize access in `mi_free` - mi_segment_kind_t kind; - size_t slice_entries; // entries in the `slices` array, at most `MI_SLICES_PER_SEGMENT` - _Atomic(mi_threadid_t) thread_id; // unique id of the thread owning this segment - - mi_slice_t slices[MI_SLICES_PER_SEGMENT+1]; // one more for huge blocks with large alignment -} mi_segment_t; - -typedef uintptr_t mi_tagged_segment_t; - -// Segments unowned by any thread are put in a shared pool -typedef struct mi_abandoned_pool_s { - // This is a list of visited abandoned pages that were full at the time. - // this list migrates to `abandoned` when that becomes NULL. The use of - // this list reduces contention and the rate at which segments are visited. - mi_decl_cache_align _Atomic(mi_segment_t*) abandoned_visited; // = NULL - - // The abandoned page list (tagged as it supports pop) - mi_decl_cache_align _Atomic(mi_tagged_segment_t) abandoned; // = NULL - - // Maintain these for debug purposes (these counts may be a bit off) - mi_decl_cache_align _Atomic(size_t) abandoned_count; - mi_decl_cache_align _Atomic(size_t) abandoned_visited_count; - - // We also maintain a count of current readers of the abandoned list - // in order to prevent resetting/decommitting segment memory if it might - // still be read. - mi_decl_cache_align _Atomic(size_t) abandoned_readers; // = 0 -} mi_abandoned_pool_t; - - -// ------------------------------------------------------ -// Heaps -// Provide first-class heaps to allocate from. -// A heap just owns a set of pages for allocation and -// can only be allocate/reallocate from the thread that created it. -// Freeing blocks can be done from any thread though. -// Per thread, the segments are shared among its heaps. -// Per thread, there is always a default heap that is -// used for allocation; it is initialized to statically -// point to an empty heap to avoid initialization checks -// in the fast path. -// ------------------------------------------------------ - -// Thread local data -typedef struct mi_tld_s mi_tld_t; - -// Pages of a certain block size are held in a queue. -typedef struct mi_page_queue_s { - mi_page_t* first; - mi_page_t* last; - size_t block_size; -} mi_page_queue_t; - -#define MI_BIN_FULL (MI_BIN_HUGE+1) - -// Random context -typedef struct mi_random_cxt_s { - uint32_t input[16]; - uint32_t output[16]; - int output_available; - bool weak; -} mi_random_ctx_t; - - -// In debug mode there is a padding structure at the end of the blocks to check for buffer overflows -#if (MI_PADDING) -typedef struct mi_padding_s { - uint32_t canary; // encoded block value to check validity of the padding (in case of overflow) - uint32_t delta; // padding bytes before the block. (mi_usable_size(p) - delta == exact allocated bytes) -} mi_padding_t; -#define MI_PADDING_SIZE (sizeof(mi_padding_t)) -#define MI_PADDING_WSIZE ((MI_PADDING_SIZE + MI_INTPTR_SIZE - 1) / MI_INTPTR_SIZE) -#else -#define MI_PADDING_SIZE 0 -#define MI_PADDING_WSIZE 0 -#endif - -#define MI_PAGES_DIRECT (MI_SMALL_WSIZE_MAX + MI_PADDING_WSIZE + 1) - - -// A heap owns a set of pages. -struct mi_heap_s { - mi_tld_t* tld; - mi_page_t* pages_free_direct[MI_PAGES_DIRECT]; // optimize: array where every entry points a page with possibly free blocks in the corresponding queue for that size. - mi_page_queue_t pages[MI_BIN_FULL + 1]; // queue of pages for each size class (or "bin") - _Atomic(mi_block_t*) thread_delayed_free; - mi_threadid_t thread_id; // thread this heap belongs too - mi_arena_id_t arena_id; // arena id if the heap belongs to a specific arena (or 0) - uintptr_t cookie; // random cookie to verify pointers (see `_mi_ptr_cookie`) - uintptr_t keys[2]; // two random keys used to encode the `thread_delayed_free` list - mi_random_ctx_t random; // random number context used for secure allocation - size_t page_count; // total number of pages in the `pages` queues. - size_t page_retired_min; // smallest retired index (retired pages are fully free, but still in the page queues) - size_t page_retired_max; // largest retired index into the `pages` array. - mi_heap_t* next; // list of heaps per thread - bool no_reclaim; // `true` if this heap should not reclaim abandoned pages - uint8_t tag; // custom identifier for this heap - uint8_t debug_offset; // number of bytes to preserve when filling freed or uninitialized memory - bool page_use_qsbr; // should freeing pages be delayed using QSBR -}; - - - -// ------------------------------------------------------ -// Debug -// ------------------------------------------------------ - -#if !defined(MI_DEBUG_UNINIT) -#define MI_DEBUG_UNINIT (0xD0) -#endif -#if !defined(MI_DEBUG_FREED) -#define MI_DEBUG_FREED (0xDF) -#endif -#if !defined(MI_DEBUG_PADDING) -#define MI_DEBUG_PADDING (0xDE) -#endif - -#if (MI_DEBUG) -// use our own assertion to print without memory allocation -void _mi_assert_fail(const char* assertion, const char* fname, unsigned int line, const char* func ); -#define mi_assert(expr) ((expr) ? (void)0 : _mi_assert_fail(#expr,__FILE__,__LINE__,__func__)) -#else -#define mi_assert(x) -#endif - -#if (MI_DEBUG>1) -#define mi_assert_internal mi_assert -#else -#define mi_assert_internal(x) -#endif - -#if (MI_DEBUG>2) -#define mi_assert_expensive mi_assert -#else -#define mi_assert_expensive(x) -#endif - -// ------------------------------------------------------ -// Statistics -// ------------------------------------------------------ - -#ifndef MI_STAT -#if (MI_DEBUG>0) -#define MI_STAT 2 -#else -#define MI_STAT 0 -#endif -#endif - -typedef struct mi_stat_count_s { - int64_t allocated; - int64_t freed; - int64_t peak; - int64_t current; -} mi_stat_count_t; - -typedef struct mi_stat_counter_s { - int64_t total; - int64_t count; -} mi_stat_counter_t; - -typedef struct mi_stats_s { - mi_stat_count_t segments; - mi_stat_count_t pages; - mi_stat_count_t reserved; - mi_stat_count_t committed; - mi_stat_count_t reset; - mi_stat_count_t purged; - mi_stat_count_t page_committed; - mi_stat_count_t segments_abandoned; - mi_stat_count_t pages_abandoned; - mi_stat_count_t threads; - mi_stat_count_t normal; - mi_stat_count_t huge; - mi_stat_count_t large; - mi_stat_count_t malloc; - mi_stat_count_t segments_cache; - mi_stat_counter_t pages_extended; - mi_stat_counter_t mmap_calls; - mi_stat_counter_t commit_calls; - mi_stat_counter_t reset_calls; - mi_stat_counter_t purge_calls; - mi_stat_counter_t page_no_retire; - mi_stat_counter_t searches; - mi_stat_counter_t normal_count; - mi_stat_counter_t huge_count; - mi_stat_counter_t large_count; -#if MI_STAT>1 - mi_stat_count_t normal_bins[MI_BIN_HUGE+1]; -#endif -} mi_stats_t; - - -void _mi_stat_increase(mi_stat_count_t* stat, size_t amount); -void _mi_stat_decrease(mi_stat_count_t* stat, size_t amount); -void _mi_stat_counter_increase(mi_stat_counter_t* stat, size_t amount); - -#if (MI_STAT) -#define mi_stat_increase(stat,amount) _mi_stat_increase( &(stat), amount) -#define mi_stat_decrease(stat,amount) _mi_stat_decrease( &(stat), amount) -#define mi_stat_counter_increase(stat,amount) _mi_stat_counter_increase( &(stat), amount) -#else -#define mi_stat_increase(stat,amount) (void)0 -#define mi_stat_decrease(stat,amount) (void)0 -#define mi_stat_counter_increase(stat,amount) (void)0 -#endif - -#define mi_heap_stat_counter_increase(heap,stat,amount) mi_stat_counter_increase( (heap)->tld->stats.stat, amount) -#define mi_heap_stat_increase(heap,stat,amount) mi_stat_increase( (heap)->tld->stats.stat, amount) -#define mi_heap_stat_decrease(heap,stat,amount) mi_stat_decrease( (heap)->tld->stats.stat, amount) - -// ------------------------------------------------------ -// Thread Local data -// ------------------------------------------------------ - -// A "span" is an available range of slices. The span queues keep -// track of slice spans of at most the given `slice_count` (but more than the previous size class). -typedef struct mi_span_queue_s { - mi_slice_t* first; - mi_slice_t* last; - size_t slice_count; -} mi_span_queue_t; - -#define MI_SEGMENT_BIN_MAX (35) // 35 == mi_segment_bin(MI_SLICES_PER_SEGMENT) - -// OS thread local data -typedef struct mi_os_tld_s { - size_t region_idx; // start point for next allocation - mi_stats_t* stats; // points to tld stats -} mi_os_tld_t; - - -// Segments thread local data -typedef struct mi_segments_tld_s { - mi_span_queue_t spans[MI_SEGMENT_BIN_MAX+1]; // free slice spans inside segments - size_t count; // current number of segments; - size_t peak_count; // peak number of segments - size_t current_size; // current size of all segments - size_t peak_size; // peak size of all segments - mi_stats_t* stats; // points to tld stats - mi_os_tld_t* os; // points to os stats - mi_abandoned_pool_t* abandoned; // pool of abandoned segments -} mi_segments_tld_t; - -// Thread local data -struct mi_tld_s { - unsigned long long heartbeat; // monotonic heartbeat count - bool recurse; // true if deferred was called; used to prevent infinite recursion. - mi_heap_t* heap_backing; // backing heap of this thread (cannot be deleted) - mi_heap_t* heaps; // list of heaps in this thread (so we can abandon all when the thread terminates) - mi_segments_tld_t segments; // segment tld - mi_os_tld_t os; // os tld - mi_stats_t stats; // statistics -}; - -#endif diff --git a/Python314_4_x86_Template/include/internal/pycore_abstract.h b/Python314_4_x86_Template/include/internal/pycore_abstract.h deleted file mode 100644 index 3cc0afac4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_abstract.h +++ /dev/null @@ -1,61 +0,0 @@ -#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); -} - -PyObject *_PyNumber_PowerNoMod(PyObject *lhs, PyObject *rhs); -PyObject *_PyNumber_InPlacePowerNoMod(PyObject *lhs, PyObject *rhs); - -extern int _PyObject_HasLen(PyObject *o); - -/* === Sequence protocol ================================================ */ - -#define PY_ITERSEARCH_COUNT 1 -#define PY_ITERSEARCH_INDEX 2 -#define PY_ITERSEARCH_CONTAINS 3 - -/* Iterate over seq. - - Result depends on the operation: - - PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if - error. - PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of - obj in seq; set ValueError and return -1 if none found; - also return -1 on error. - PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on - error. */ -extern Py_ssize_t _PySequence_IterSearch(PyObject *seq, - PyObject *obj, int operation); - -/* === Mapping protocol ================================================= */ - -extern int _PyObject_RealIsInstance(PyObject *inst, PyObject *cls); - -extern int _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls); - -// Convert Python int to Py_ssize_t. Do nothing if the argument is None. -// Export for '_bisect' shared extension. -PyAPI_FUNC(int) _Py_convert_optional_to_ssize_t(PyObject *, void *); - -// Same as PyNumber_Index() but can return an instance of a subclass of int. -// Export for 'math' shared extension. -PyAPI_FUNC(PyObject*) _PyNumber_Index(PyObject *o); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_ABSTRACT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_asdl.h b/Python314_4_x86_Template/include/internal/pycore_asdl.h deleted file mode 100644 index afeada88d..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_asdl.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef Py_INTERNAL_ASDL_H -#define Py_INTERNAL_ASDL_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pyarena.h" // _PyArena_Malloc() - -typedef PyObject * identifier; -typedef PyObject * string; -typedef PyObject * object; -typedef PyObject * constant; - -/* It would be nice if the code generated by asdl_c.py was completely - independent of Python, but it is a goal the requires too much work - at this stage. So, for example, I'll represent identifiers as - interned Python strings. -*/ - -#define _ASDL_SEQ_HEAD \ - Py_ssize_t size; \ - void **elements; - -typedef struct { - _ASDL_SEQ_HEAD -} asdl_seq; - -typedef struct { - _ASDL_SEQ_HEAD - void *typed_elements[1]; -} asdl_generic_seq; - -typedef struct { - _ASDL_SEQ_HEAD - PyObject *typed_elements[1]; -} asdl_identifier_seq; - -typedef struct { - _ASDL_SEQ_HEAD - int typed_elements[1]; -} asdl_int_seq; - -asdl_generic_seq *_Py_asdl_generic_seq_new(Py_ssize_t size, PyArena *arena); -asdl_identifier_seq *_Py_asdl_identifier_seq_new(Py_ssize_t size, PyArena *arena); -asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena); - - -#define GENERATE_ASDL_SEQ_CONSTRUCTOR(NAME, TYPE) \ -asdl_ ## NAME ## _seq *_Py_asdl_ ## NAME ## _seq_new(Py_ssize_t size, PyArena *arena) \ -{ \ - asdl_ ## NAME ## _seq *seq = NULL; \ - size_t n; \ - /* check size is sane */ \ - if (size < 0 || \ - (size && (((size_t)size - 1) > (SIZE_MAX / sizeof(void *))))) { \ - PyErr_NoMemory(); \ - return NULL; \ - } \ - n = (size ? (sizeof(TYPE *) * (size - 1)) : 0); \ - /* check if size can be added safely */ \ - if (n > SIZE_MAX - sizeof(asdl_ ## NAME ## _seq)) { \ - PyErr_NoMemory(); \ - return NULL; \ - } \ - n += sizeof(asdl_ ## NAME ## _seq); \ - seq = (asdl_ ## NAME ## _seq *)_PyArena_Malloc(arena, n); \ - if (!seq) { \ - PyErr_NoMemory(); \ - return NULL; \ - } \ - memset(seq, 0, n); \ - seq->size = size; \ - seq->elements = (void**)seq->typed_elements; \ - return seq; \ -} - -#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)]) -#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)]) -#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size)) - -#ifdef Py_DEBUG -# define asdl_seq_SET(S, I, V) \ - do { \ - Py_ssize_t _asdl_i = (I); \ - assert((S) != NULL); \ - assert(0 <= _asdl_i && _asdl_i < (S)->size); \ - (S)->typed_elements[_asdl_i] = (V); \ - } while (0) -#else -# define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V)) -#endif - -#ifdef Py_DEBUG -# define asdl_seq_SET_UNTYPED(S, I, V) \ - do { \ - Py_ssize_t _asdl_i = (I); \ - assert((S) != NULL); \ - assert(0 <= _asdl_i && _asdl_i < (S)->size); \ - (S)->elements[_asdl_i] = (V); \ - } while (0) -#else -# define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V)) -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_ASDL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_ast.h b/Python314_4_x86_Template/include/internal/pycore_ast.h deleted file mode 100644 index 60367202b..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_ast.h +++ /dev/null @@ -1,945 +0,0 @@ -// File automatically generated by Parser/asdl_c.py. - -#ifndef Py_INTERNAL_AST_H -#define Py_INTERNAL_AST_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_asdl.h" // _ASDL_SEQ_HEAD - -typedef struct _mod *mod_ty; - -typedef struct _stmt *stmt_ty; - -typedef struct _expr *expr_ty; - -typedef enum _expr_context { Load=1, Store=2, Del=3 } expr_context_ty; - -typedef enum _boolop { And=1, Or=2 } boolop_ty; - -typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7, - LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12, - FloorDiv=13 } operator_ty; - -typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty; - -typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8, - In=9, NotIn=10 } cmpop_ty; - -typedef struct _comprehension *comprehension_ty; - -typedef struct _excepthandler *excepthandler_ty; - -typedef struct _arguments *arguments_ty; - -typedef struct _arg *arg_ty; - -typedef struct _keyword *keyword_ty; - -typedef struct _alias *alias_ty; - -typedef struct _withitem *withitem_ty; - -typedef struct _match_case *match_case_ty; - -typedef struct _pattern *pattern_ty; - -typedef struct _type_ignore *type_ignore_ty; - -typedef struct _type_param *type_param_ty; - - -typedef struct { - _ASDL_SEQ_HEAD - mod_ty typed_elements[1]; -} asdl_mod_seq; - -asdl_mod_seq *_Py_asdl_mod_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - stmt_ty typed_elements[1]; -} asdl_stmt_seq; - -asdl_stmt_seq *_Py_asdl_stmt_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - expr_ty typed_elements[1]; -} asdl_expr_seq; - -asdl_expr_seq *_Py_asdl_expr_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - comprehension_ty typed_elements[1]; -} asdl_comprehension_seq; - -asdl_comprehension_seq *_Py_asdl_comprehension_seq_new(Py_ssize_t size, PyArena - *arena); - -typedef struct { - _ASDL_SEQ_HEAD - excepthandler_ty typed_elements[1]; -} asdl_excepthandler_seq; - -asdl_excepthandler_seq *_Py_asdl_excepthandler_seq_new(Py_ssize_t size, PyArena - *arena); - -typedef struct { - _ASDL_SEQ_HEAD - arguments_ty typed_elements[1]; -} asdl_arguments_seq; - -asdl_arguments_seq *_Py_asdl_arguments_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - arg_ty typed_elements[1]; -} asdl_arg_seq; - -asdl_arg_seq *_Py_asdl_arg_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - keyword_ty typed_elements[1]; -} asdl_keyword_seq; - -asdl_keyword_seq *_Py_asdl_keyword_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - alias_ty typed_elements[1]; -} asdl_alias_seq; - -asdl_alias_seq *_Py_asdl_alias_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - withitem_ty typed_elements[1]; -} asdl_withitem_seq; - -asdl_withitem_seq *_Py_asdl_withitem_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - match_case_ty typed_elements[1]; -} asdl_match_case_seq; - -asdl_match_case_seq *_Py_asdl_match_case_seq_new(Py_ssize_t size, PyArena - *arena); - -typedef struct { - _ASDL_SEQ_HEAD - pattern_ty typed_elements[1]; -} asdl_pattern_seq; - -asdl_pattern_seq *_Py_asdl_pattern_seq_new(Py_ssize_t size, PyArena *arena); - -typedef struct { - _ASDL_SEQ_HEAD - type_ignore_ty typed_elements[1]; -} asdl_type_ignore_seq; - -asdl_type_ignore_seq *_Py_asdl_type_ignore_seq_new(Py_ssize_t size, PyArena - *arena); - -typedef struct { - _ASDL_SEQ_HEAD - type_param_ty typed_elements[1]; -} asdl_type_param_seq; - -asdl_type_param_seq *_Py_asdl_type_param_seq_new(Py_ssize_t size, PyArena - *arena); - - -enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, - FunctionType_kind=4}; -struct _mod { - enum _mod_kind kind; - union { - struct { - asdl_stmt_seq *body; - asdl_type_ignore_seq *type_ignores; - } Module; - - struct { - asdl_stmt_seq *body; - } Interactive; - - struct { - expr_ty body; - } Expression; - - struct { - asdl_expr_seq *argtypes; - expr_ty returns; - } FunctionType; - - } v; -}; - -enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3, - Return_kind=4, Delete_kind=5, Assign_kind=6, - TypeAlias_kind=7, AugAssign_kind=8, AnnAssign_kind=9, - For_kind=10, AsyncFor_kind=11, While_kind=12, If_kind=13, - With_kind=14, AsyncWith_kind=15, Match_kind=16, - Raise_kind=17, Try_kind=18, TryStar_kind=19, Assert_kind=20, - Import_kind=21, ImportFrom_kind=22, Global_kind=23, - Nonlocal_kind=24, Expr_kind=25, Pass_kind=26, Break_kind=27, - Continue_kind=28}; -struct _stmt { - enum _stmt_kind kind; - union { - struct { - identifier name; - arguments_ty args; - asdl_stmt_seq *body; - asdl_expr_seq *decorator_list; - expr_ty returns; - string type_comment; - asdl_type_param_seq *type_params; - } FunctionDef; - - struct { - identifier name; - arguments_ty args; - asdl_stmt_seq *body; - asdl_expr_seq *decorator_list; - expr_ty returns; - string type_comment; - asdl_type_param_seq *type_params; - } AsyncFunctionDef; - - struct { - identifier name; - asdl_expr_seq *bases; - asdl_keyword_seq *keywords; - asdl_stmt_seq *body; - asdl_expr_seq *decorator_list; - asdl_type_param_seq *type_params; - } ClassDef; - - struct { - expr_ty value; - } Return; - - struct { - asdl_expr_seq *targets; - } Delete; - - struct { - asdl_expr_seq *targets; - expr_ty value; - string type_comment; - } Assign; - - struct { - expr_ty name; - asdl_type_param_seq *type_params; - expr_ty value; - } TypeAlias; - - struct { - expr_ty target; - operator_ty op; - expr_ty value; - } AugAssign; - - struct { - expr_ty target; - expr_ty annotation; - expr_ty value; - int simple; - } AnnAssign; - - struct { - expr_ty target; - expr_ty iter; - asdl_stmt_seq *body; - asdl_stmt_seq *orelse; - string type_comment; - } For; - - struct { - expr_ty target; - expr_ty iter; - asdl_stmt_seq *body; - asdl_stmt_seq *orelse; - string type_comment; - } AsyncFor; - - struct { - expr_ty test; - asdl_stmt_seq *body; - asdl_stmt_seq *orelse; - } While; - - struct { - expr_ty test; - asdl_stmt_seq *body; - asdl_stmt_seq *orelse; - } If; - - struct { - asdl_withitem_seq *items; - asdl_stmt_seq *body; - string type_comment; - } With; - - struct { - asdl_withitem_seq *items; - asdl_stmt_seq *body; - string type_comment; - } AsyncWith; - - struct { - expr_ty subject; - asdl_match_case_seq *cases; - } Match; - - struct { - expr_ty exc; - expr_ty cause; - } Raise; - - struct { - asdl_stmt_seq *body; - asdl_excepthandler_seq *handlers; - asdl_stmt_seq *orelse; - asdl_stmt_seq *finalbody; - } Try; - - struct { - asdl_stmt_seq *body; - asdl_excepthandler_seq *handlers; - asdl_stmt_seq *orelse; - asdl_stmt_seq *finalbody; - } TryStar; - - struct { - expr_ty test; - expr_ty msg; - } Assert; - - struct { - asdl_alias_seq *names; - } Import; - - struct { - identifier module; - asdl_alias_seq *names; - int level; - } ImportFrom; - - struct { - asdl_identifier_seq *names; - } Global; - - struct { - asdl_identifier_seq *names; - } Nonlocal; - - struct { - expr_ty value; - } Expr; - - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4, - Lambda_kind=5, IfExp_kind=6, Dict_kind=7, Set_kind=8, - ListComp_kind=9, SetComp_kind=10, DictComp_kind=11, - GeneratorExp_kind=12, Await_kind=13, Yield_kind=14, - YieldFrom_kind=15, Compare_kind=16, Call_kind=17, - FormattedValue_kind=18, Interpolation_kind=19, - JoinedStr_kind=20, TemplateStr_kind=21, Constant_kind=22, - Attribute_kind=23, Subscript_kind=24, Starred_kind=25, - Name_kind=26, List_kind=27, Tuple_kind=28, Slice_kind=29}; -struct _expr { - enum _expr_kind kind; - union { - struct { - boolop_ty op; - asdl_expr_seq *values; - } BoolOp; - - struct { - expr_ty target; - expr_ty value; - } NamedExpr; - - struct { - expr_ty left; - operator_ty op; - expr_ty right; - } BinOp; - - struct { - unaryop_ty op; - expr_ty operand; - } UnaryOp; - - struct { - arguments_ty args; - expr_ty body; - } Lambda; - - struct { - expr_ty test; - expr_ty body; - expr_ty orelse; - } IfExp; - - struct { - asdl_expr_seq *keys; - asdl_expr_seq *values; - } Dict; - - struct { - asdl_expr_seq *elts; - } Set; - - struct { - expr_ty elt; - asdl_comprehension_seq *generators; - } ListComp; - - struct { - expr_ty elt; - asdl_comprehension_seq *generators; - } SetComp; - - struct { - expr_ty key; - expr_ty value; - asdl_comprehension_seq *generators; - } DictComp; - - struct { - expr_ty elt; - asdl_comprehension_seq *generators; - } GeneratorExp; - - struct { - expr_ty value; - } Await; - - struct { - expr_ty value; - } Yield; - - struct { - expr_ty value; - } YieldFrom; - - struct { - expr_ty left; - asdl_int_seq *ops; - asdl_expr_seq *comparators; - } Compare; - - struct { - expr_ty func; - asdl_expr_seq *args; - asdl_keyword_seq *keywords; - } Call; - - struct { - expr_ty value; - int conversion; - expr_ty format_spec; - } FormattedValue; - - struct { - expr_ty value; - constant str; - int conversion; - expr_ty format_spec; - } Interpolation; - - struct { - asdl_expr_seq *values; - } JoinedStr; - - struct { - asdl_expr_seq *values; - } TemplateStr; - - struct { - constant value; - string kind; - } Constant; - - struct { - expr_ty value; - identifier attr; - expr_context_ty ctx; - } Attribute; - - struct { - expr_ty value; - expr_ty slice; - expr_context_ty ctx; - } Subscript; - - struct { - expr_ty value; - expr_context_ty ctx; - } Starred; - - struct { - identifier id; - expr_context_ty ctx; - } Name; - - struct { - asdl_expr_seq *elts; - expr_context_ty ctx; - } List; - - struct { - asdl_expr_seq *elts; - expr_context_ty ctx; - } Tuple; - - struct { - expr_ty lower; - expr_ty upper; - expr_ty step; - } Slice; - - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -struct _comprehension { - expr_ty target; - expr_ty iter; - asdl_expr_seq *ifs; - int is_async; -}; - -enum _excepthandler_kind {ExceptHandler_kind=1}; -struct _excepthandler { - enum _excepthandler_kind kind; - union { - struct { - expr_ty type; - identifier name; - asdl_stmt_seq *body; - } ExceptHandler; - - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -struct _arguments { - asdl_arg_seq *posonlyargs; - asdl_arg_seq *args; - arg_ty vararg; - asdl_arg_seq *kwonlyargs; - asdl_expr_seq *kw_defaults; - arg_ty kwarg; - asdl_expr_seq *defaults; -}; - -struct _arg { - identifier arg; - expr_ty annotation; - string type_comment; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -struct _keyword { - identifier arg; - expr_ty value; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -struct _alias { - identifier name; - identifier asname; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -struct _withitem { - expr_ty context_expr; - expr_ty optional_vars; -}; - -struct _match_case { - pattern_ty pattern; - expr_ty guard; - asdl_stmt_seq *body; -}; - -enum _pattern_kind {MatchValue_kind=1, MatchSingleton_kind=2, - MatchSequence_kind=3, MatchMapping_kind=4, - MatchClass_kind=5, MatchStar_kind=6, MatchAs_kind=7, - MatchOr_kind=8}; -struct _pattern { - enum _pattern_kind kind; - union { - struct { - expr_ty value; - } MatchValue; - - struct { - constant value; - } MatchSingleton; - - struct { - asdl_pattern_seq *patterns; - } MatchSequence; - - struct { - asdl_expr_seq *keys; - asdl_pattern_seq *patterns; - identifier rest; - } MatchMapping; - - struct { - expr_ty cls; - asdl_pattern_seq *patterns; - asdl_identifier_seq *kwd_attrs; - asdl_pattern_seq *kwd_patterns; - } MatchClass; - - struct { - identifier name; - } MatchStar; - - struct { - pattern_ty pattern; - identifier name; - } MatchAs; - - struct { - asdl_pattern_seq *patterns; - } MatchOr; - - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -enum _type_ignore_kind {TypeIgnore_kind=1}; -struct _type_ignore { - enum _type_ignore_kind kind; - union { - struct { - int lineno; - string tag; - } TypeIgnore; - - } v; -}; - -enum _type_param_kind {TypeVar_kind=1, ParamSpec_kind=2, TypeVarTuple_kind=3}; -struct _type_param { - enum _type_param_kind kind; - union { - struct { - identifier name; - expr_ty bound; - expr_ty default_value; - } TypeVar; - - struct { - identifier name; - expr_ty default_value; - } ParamSpec; - - struct { - identifier name; - expr_ty default_value; - } TypeVarTuple; - - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - - -// Note: these macros affect function definitions, not only call sites. -mod_ty _PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores, - PyArena *arena); -mod_ty _PyAST_Interactive(asdl_stmt_seq * body, PyArena *arena); -mod_ty _PyAST_Expression(expr_ty body, PyArena *arena); -mod_ty _PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena - *arena); -stmt_ty _PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq * - body, asdl_expr_seq * decorator_list, expr_ty - returns, string type_comment, asdl_type_param_seq * - type_params, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_AsyncFunctionDef(identifier name, arguments_ty args, - asdl_stmt_seq * body, asdl_expr_seq * - decorator_list, expr_ty returns, string - type_comment, asdl_type_param_seq * - type_params, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_ClassDef(identifier name, asdl_expr_seq * bases, - asdl_keyword_seq * keywords, asdl_stmt_seq * body, - asdl_expr_seq * decorator_list, asdl_type_param_seq * - type_params, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Return(expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string - type_comment, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -stmt_ty _PyAST_TypeAlias(expr_ty name, asdl_type_param_seq * type_params, - expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int - simple, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -stmt_ty _PyAST_For(expr_ty target, expr_ty iter, asdl_stmt_seq * body, - asdl_stmt_seq * orelse, string type_comment, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -stmt_ty _PyAST_AsyncFor(expr_ty target, expr_ty iter, asdl_stmt_seq * body, - asdl_stmt_seq * orelse, string type_comment, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_While(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * - orelse, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_If(expr_ty test, asdl_stmt_seq * body, asdl_stmt_seq * orelse, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_With(asdl_withitem_seq * items, asdl_stmt_seq * body, string - type_comment, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -stmt_ty _PyAST_AsyncWith(asdl_withitem_seq * items, asdl_stmt_seq * body, - string type_comment, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Match(expr_ty subject, asdl_match_case_seq * cases, int lineno, - int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -stmt_ty _PyAST_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Try(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, - asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -stmt_ty _PyAST_TryStar(asdl_stmt_seq * body, asdl_excepthandler_seq * handlers, - asdl_stmt_seq * orelse, asdl_stmt_seq * finalbody, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Import(asdl_alias_seq * names, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_ImportFrom(identifier module, asdl_alias_seq * names, int level, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_Global(asdl_identifier_seq * names, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Nonlocal(asdl_identifier_seq * names, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -stmt_ty _PyAST_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -stmt_ty _PyAST_Pass(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_Break(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -stmt_ty _PyAST_Continue(int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_BoolOp(boolop_ty op, asdl_expr_seq * values, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_NamedExpr(expr_ty target, expr_ty value, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -expr_ty _PyAST_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, - int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -expr_ty _PyAST_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Lambda(arguments_ty args, expr_ty body, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, - int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -expr_ty _PyAST_Dict(asdl_expr_seq * keys, asdl_expr_seq * values, int lineno, - int col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Set(asdl_expr_seq * elts, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_ListComp(expr_ty elt, asdl_comprehension_seq * generators, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_SetComp(expr_ty elt, asdl_comprehension_seq * generators, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_DictComp(expr_ty key, expr_ty value, asdl_comprehension_seq * - generators, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -expr_ty _PyAST_GeneratorExp(expr_ty elt, asdl_comprehension_seq * generators, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_Await(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -expr_ty _PyAST_Yield(expr_ty value, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -expr_ty _PyAST_YieldFrom(expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_Compare(expr_ty left, asdl_int_seq * ops, asdl_expr_seq * - comparators, int lineno, int col_offset, int end_lineno, - int end_col_offset, PyArena *arena); -expr_ty _PyAST_Call(expr_ty func, asdl_expr_seq * args, asdl_keyword_seq * - keywords, int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_FormattedValue(expr_ty value, int conversion, expr_ty - format_spec, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_Interpolation(expr_ty value, constant str, int conversion, - expr_ty format_spec, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_JoinedStr(asdl_expr_seq * values, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_TemplateStr(asdl_expr_seq * values, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena *arena); -expr_ty _PyAST_Constant(constant value, string kind, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, - int lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -expr_ty _PyAST_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); -expr_ty _PyAST_Starred(expr_ty value, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Name(identifier id, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_List(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Tuple(asdl_expr_seq * elts, expr_context_ty ctx, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -expr_ty _PyAST_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, - int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -comprehension_ty _PyAST_comprehension(expr_ty target, expr_ty iter, - asdl_expr_seq * ifs, int is_async, - PyArena *arena); -excepthandler_ty _PyAST_ExceptHandler(expr_ty type, identifier name, - asdl_stmt_seq * body, int lineno, int - col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -arguments_ty _PyAST_arguments(asdl_arg_seq * posonlyargs, asdl_arg_seq * args, - arg_ty vararg, asdl_arg_seq * kwonlyargs, - asdl_expr_seq * kw_defaults, arg_ty kwarg, - asdl_expr_seq * defaults, PyArena *arena); -arg_ty _PyAST_arg(identifier arg, expr_ty annotation, string type_comment, int - lineno, int col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -keyword_ty _PyAST_keyword(identifier arg, expr_ty value, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -alias_ty _PyAST_alias(identifier name, identifier asname, int lineno, int - col_offset, int end_lineno, int end_col_offset, PyArena - *arena); -withitem_ty _PyAST_withitem(expr_ty context_expr, expr_ty optional_vars, - PyArena *arena); -match_case_ty _PyAST_match_case(pattern_ty pattern, expr_ty guard, - asdl_stmt_seq * body, PyArena *arena); -pattern_ty _PyAST_MatchValue(expr_ty value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -pattern_ty _PyAST_MatchSingleton(constant value, int lineno, int col_offset, - int end_lineno, int end_col_offset, PyArena - *arena); -pattern_ty _PyAST_MatchSequence(asdl_pattern_seq * patterns, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -pattern_ty _PyAST_MatchMapping(asdl_expr_seq * keys, asdl_pattern_seq * - patterns, identifier rest, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -pattern_ty _PyAST_MatchClass(expr_ty cls, asdl_pattern_seq * patterns, - asdl_identifier_seq * kwd_attrs, asdl_pattern_seq - * kwd_patterns, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -pattern_ty _PyAST_MatchStar(identifier name, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -pattern_ty _PyAST_MatchAs(pattern_ty pattern, identifier name, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -pattern_ty _PyAST_MatchOr(asdl_pattern_seq * patterns, int lineno, int - col_offset, int end_lineno, int end_col_offset, - PyArena *arena); -type_ignore_ty _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena); -type_param_ty _PyAST_TypeVar(identifier name, expr_ty bound, expr_ty - default_value, int lineno, int col_offset, int - end_lineno, int end_col_offset, PyArena *arena); -type_param_ty _PyAST_ParamSpec(identifier name, expr_ty default_value, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); -type_param_ty _PyAST_TypeVarTuple(identifier name, expr_ty default_value, int - lineno, int col_offset, int end_lineno, int - end_col_offset, PyArena *arena); - - -PyObject* PyAST_mod2obj(mod_ty t); -int PyAst_CheckMode(PyObject *ast, int mode); -mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode); -int PyAST_Check(PyObject* obj); - -extern int _PyAST_Validate(mod_ty); - -/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */ -extern PyObject* _PyAST_ExprAsUnicode(expr_ty); - -/* Return the borrowed reference to the first literal string in the - sequence of statements or NULL if it doesn't start from a literal string. - Doesn't set exception. */ -extern PyObject* _PyAST_GetDocString(asdl_stmt_seq *); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_AST_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_ast_state.h b/Python314_4_x86_Template/include/internal/pycore_ast_state.h deleted file mode 100644 index d4ac419f5..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_ast_state.h +++ /dev/null @@ -1,271 +0,0 @@ -// File automatically generated by Parser/asdl_c.py. - -#ifndef Py_INTERNAL_AST_STATE_H -#define Py_INTERNAL_AST_STATE_H - -#include "pycore_lock.h" // _PyOnceFlag - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -struct ast_state { - _PyOnceFlag once; - int finalized; - PyObject *AST_type; - PyObject *Add_singleton; - PyObject *Add_type; - PyObject *And_singleton; - PyObject *And_type; - PyObject *AnnAssign_type; - PyObject *Assert_type; - PyObject *Assign_type; - PyObject *AsyncFor_type; - PyObject *AsyncFunctionDef_type; - PyObject *AsyncWith_type; - PyObject *Attribute_type; - PyObject *AugAssign_type; - PyObject *Await_type; - PyObject *BinOp_type; - PyObject *BitAnd_singleton; - PyObject *BitAnd_type; - PyObject *BitOr_singleton; - PyObject *BitOr_type; - PyObject *BitXor_singleton; - PyObject *BitXor_type; - PyObject *BoolOp_type; - PyObject *Break_type; - PyObject *Call_type; - PyObject *ClassDef_type; - PyObject *Compare_type; - PyObject *Constant_type; - PyObject *Continue_type; - PyObject *Del_singleton; - PyObject *Del_type; - PyObject *Delete_type; - PyObject *DictComp_type; - PyObject *Dict_type; - PyObject *Div_singleton; - PyObject *Div_type; - PyObject *Eq_singleton; - PyObject *Eq_type; - PyObject *ExceptHandler_type; - PyObject *Expr_type; - PyObject *Expression_type; - PyObject *FloorDiv_singleton; - PyObject *FloorDiv_type; - PyObject *For_type; - PyObject *FormattedValue_type; - PyObject *FunctionDef_type; - PyObject *FunctionType_type; - PyObject *GeneratorExp_type; - PyObject *Global_type; - PyObject *GtE_singleton; - PyObject *GtE_type; - PyObject *Gt_singleton; - PyObject *Gt_type; - PyObject *IfExp_type; - PyObject *If_type; - PyObject *ImportFrom_type; - PyObject *Import_type; - PyObject *In_singleton; - PyObject *In_type; - PyObject *Interactive_type; - PyObject *Interpolation_type; - PyObject *Invert_singleton; - PyObject *Invert_type; - PyObject *IsNot_singleton; - PyObject *IsNot_type; - PyObject *Is_singleton; - PyObject *Is_type; - PyObject *JoinedStr_type; - PyObject *LShift_singleton; - PyObject *LShift_type; - PyObject *Lambda_type; - PyObject *ListComp_type; - PyObject *List_type; - PyObject *Load_singleton; - PyObject *Load_type; - PyObject *LtE_singleton; - PyObject *LtE_type; - PyObject *Lt_singleton; - PyObject *Lt_type; - PyObject *MatMult_singleton; - PyObject *MatMult_type; - PyObject *MatchAs_type; - PyObject *MatchClass_type; - PyObject *MatchMapping_type; - PyObject *MatchOr_type; - PyObject *MatchSequence_type; - PyObject *MatchSingleton_type; - PyObject *MatchStar_type; - PyObject *MatchValue_type; - PyObject *Match_type; - PyObject *Mod_singleton; - PyObject *Mod_type; - PyObject *Module_type; - PyObject *Mult_singleton; - PyObject *Mult_type; - PyObject *Name_type; - PyObject *NamedExpr_type; - PyObject *Nonlocal_type; - PyObject *NotEq_singleton; - PyObject *NotEq_type; - PyObject *NotIn_singleton; - PyObject *NotIn_type; - PyObject *Not_singleton; - PyObject *Not_type; - PyObject *Or_singleton; - PyObject *Or_type; - PyObject *ParamSpec_type; - PyObject *Pass_type; - PyObject *Pow_singleton; - PyObject *Pow_type; - PyObject *RShift_singleton; - PyObject *RShift_type; - PyObject *Raise_type; - PyObject *Return_type; - PyObject *SetComp_type; - PyObject *Set_type; - PyObject *Slice_type; - PyObject *Starred_type; - PyObject *Store_singleton; - PyObject *Store_type; - PyObject *Sub_singleton; - PyObject *Sub_type; - PyObject *Subscript_type; - PyObject *TemplateStr_type; - PyObject *TryStar_type; - PyObject *Try_type; - PyObject *Tuple_type; - PyObject *TypeAlias_type; - PyObject *TypeIgnore_type; - PyObject *TypeVarTuple_type; - PyObject *TypeVar_type; - PyObject *UAdd_singleton; - PyObject *UAdd_type; - PyObject *USub_singleton; - PyObject *USub_type; - PyObject *UnaryOp_type; - PyObject *While_type; - PyObject *With_type; - PyObject *YieldFrom_type; - PyObject *Yield_type; - PyObject *__dict__; - PyObject *__doc__; - PyObject *__match_args__; - PyObject *__module__; - PyObject *_attributes; - PyObject *_fields; - PyObject *alias_type; - PyObject *annotation; - PyObject *arg; - PyObject *arg_type; - PyObject *args; - PyObject *argtypes; - PyObject *arguments_type; - PyObject *asname; - PyObject *ast; - PyObject *attr; - PyObject *bases; - PyObject *body; - PyObject *boolop_type; - PyObject *bound; - PyObject *cases; - PyObject *cause; - PyObject *cls; - PyObject *cmpop_type; - PyObject *col_offset; - PyObject *comparators; - PyObject *comprehension_type; - PyObject *context_expr; - PyObject *conversion; - PyObject *ctx; - PyObject *decorator_list; - PyObject *default_value; - PyObject *defaults; - PyObject *elt; - PyObject *elts; - PyObject *end_col_offset; - PyObject *end_lineno; - PyObject *exc; - PyObject *excepthandler_type; - PyObject *expr_context_type; - PyObject *expr_type; - PyObject *finalbody; - PyObject *format_spec; - PyObject *func; - PyObject *generators; - PyObject *guard; - PyObject *handlers; - PyObject *id; - PyObject *ifs; - PyObject *is_async; - PyObject *items; - PyObject *iter; - PyObject *key; - PyObject *keys; - PyObject *keyword_type; - PyObject *keywords; - PyObject *kind; - PyObject *kw_defaults; - PyObject *kwarg; - PyObject *kwd_attrs; - PyObject *kwd_patterns; - PyObject *kwonlyargs; - PyObject *left; - PyObject *level; - PyObject *lineno; - PyObject *lower; - PyObject *match_case_type; - PyObject *mod_type; - PyObject *module; - PyObject *msg; - PyObject *name; - PyObject *names; - PyObject *op; - PyObject *operand; - PyObject *operator_type; - PyObject *ops; - PyObject *optional_vars; - PyObject *orelse; - PyObject *pattern; - PyObject *pattern_type; - PyObject *patterns; - PyObject *posonlyargs; - PyObject *rest; - PyObject *returns; - PyObject *right; - PyObject *simple; - PyObject *slice; - PyObject *step; - PyObject *stmt_type; - PyObject *str; - PyObject *subject; - PyObject *tag; - PyObject *target; - PyObject *targets; - PyObject *test; - PyObject *type; - PyObject *type_comment; - PyObject *type_ignore_type; - PyObject *type_ignores; - PyObject *type_param_type; - PyObject *type_params; - PyObject *unaryop_type; - PyObject *upper; - PyObject *value; - PyObject *values; - PyObject *vararg; - PyObject *withitem_type; -}; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_AST_STATE_H */ - diff --git a/Python314_4_x86_Template/include/internal/pycore_atexit.h b/Python314_4_x86_Template/include/internal/pycore_atexit.h deleted file mode 100644 index 1199b00ea..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_atexit.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef Py_INTERNAL_ATEXIT_H -#define Py_INTERNAL_ATEXIT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - - -#ifdef Py_GIL_DISABLED -# define _PyAtExit_LockCallbacks(state) PyMutex_Lock(&state->ll_callbacks_lock); -# define _PyAtExit_UnlockCallbacks(state) PyMutex_Unlock(&state->ll_callbacks_lock); -#else -# define _PyAtExit_LockCallbacks(state) -# define _PyAtExit_UnlockCallbacks(state) -#endif - -// Export for '_interpchannels' shared extension -PyAPI_FUNC(int) _Py_AtExit( - PyInterpreterState *interp, - atexit_datacallbackfunc func, - void *data); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_ATEXIT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_audit.h b/Python314_4_x86_Template/include/internal/pycore_audit.h deleted file mode 100644 index 2811aaa62..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_audit.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef Py_INTERNAL_AUDIT_H -#define Py_INTERNAL_AUDIT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* Runtime audit hook state */ - -typedef struct _Py_AuditHookEntry { - struct _Py_AuditHookEntry *next; - Py_AuditHookFunction hookCFunction; - void *userData; -} _Py_AuditHookEntry; - - -extern int _PySys_Audit( - PyThreadState *tstate, - const char *event, - const char *argFormat, - ...); - -// _PySys_ClearAuditHooks() must not be exported: use extern rather than -// PyAPI_FUNC(). We want minimal exposure of this function. -extern void _PySys_ClearAuditHooks(PyThreadState *tstate); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_AUDIT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_backoff.h b/Python314_4_x86_Template/include/internal/pycore_backoff.h deleted file mode 100644 index 942d8b107..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_backoff.h +++ /dev/null @@ -1,133 +0,0 @@ - -#ifndef Py_INTERNAL_BACKOFF_H -#define Py_INTERNAL_BACKOFF_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include <assert.h> -#include <stdbool.h> -#include "pycore_structs.h" // _Py_BackoffCounter - -/* 16-bit countdown counters using exponential backoff. - - These are used by the adaptive specializer to count down until - it is time to specialize an instruction. If specialization fails - the counter is reset using exponential backoff. - - Another use is for the Tier 2 optimizer to decide when to create - a new Tier 2 trace (executor). Again, exponential backoff is used. - - The 16-bit counter is structured as a 12-bit unsigned 'value' - and a 4-bit 'backoff' field. When resetting the counter, the - backoff field is incremented (until it reaches a limit) and the - value is set to a bit mask representing the value 2**backoff - 1. - The maximum backoff is 12 (the number of bits in the value). - - There is an exceptional value which must not be updated, 0xFFFF. -*/ - -#define BACKOFF_BITS 4 -#define MAX_BACKOFF 12 -#define UNREACHABLE_BACKOFF 15 - -static inline bool -is_unreachable_backoff_counter(_Py_BackoffCounter counter) -{ - return counter.value_and_backoff == UNREACHABLE_BACKOFF; -} - -static inline _Py_BackoffCounter -make_backoff_counter(uint16_t value, uint16_t backoff) -{ - assert(backoff <= 15); - assert(value <= 0xFFF); - _Py_BackoffCounter result; - result.value_and_backoff = (value << BACKOFF_BITS) | backoff; - return result; -} - -static inline _Py_BackoffCounter -forge_backoff_counter(uint16_t counter) -{ - _Py_BackoffCounter result; - result.value_and_backoff = counter; - return result; -} - -static inline _Py_BackoffCounter -restart_backoff_counter(_Py_BackoffCounter counter) -{ - assert(!is_unreachable_backoff_counter(counter)); - int backoff = counter.value_and_backoff & 15; - if (backoff < MAX_BACKOFF) { - return make_backoff_counter((1 << (backoff + 1)) - 1, backoff + 1); - } - else { - return make_backoff_counter((1 << MAX_BACKOFF) - 1, MAX_BACKOFF); - } -} - -static inline _Py_BackoffCounter -pause_backoff_counter(_Py_BackoffCounter counter) -{ - _Py_BackoffCounter result; - result.value_and_backoff = counter.value_and_backoff | (1 << BACKOFF_BITS); - return result; -} - -static inline _Py_BackoffCounter -advance_backoff_counter(_Py_BackoffCounter counter) -{ - _Py_BackoffCounter result; - result.value_and_backoff = counter.value_and_backoff - (1 << BACKOFF_BITS); - return result; -} - -static inline bool -backoff_counter_triggers(_Py_BackoffCounter counter) -{ - /* Test whether the value is zero and the backoff is not UNREACHABLE_BACKOFF */ - return counter.value_and_backoff < UNREACHABLE_BACKOFF; -} - -/* Initial JUMP_BACKWARD counter. - * This determines when we create a trace for a loop. */ -#define JUMP_BACKWARD_INITIAL_VALUE 4095 -#define JUMP_BACKWARD_INITIAL_BACKOFF 12 -static inline _Py_BackoffCounter -initial_jump_backoff_counter(void) -{ - return make_backoff_counter(JUMP_BACKWARD_INITIAL_VALUE, - JUMP_BACKWARD_INITIAL_BACKOFF); -} - -/* Initial exit temperature. - * Must be larger than ADAPTIVE_COOLDOWN_VALUE, - * otherwise when a side exit warms up we may construct - * a new trace before the Tier 1 code has properly re-specialized. */ -#define SIDE_EXIT_INITIAL_VALUE 4095 -#define SIDE_EXIT_INITIAL_BACKOFF 12 - -static inline _Py_BackoffCounter -initial_temperature_backoff_counter(void) -{ - return make_backoff_counter(SIDE_EXIT_INITIAL_VALUE, - SIDE_EXIT_INITIAL_BACKOFF); -} - -/* Unreachable backoff counter. */ -static inline _Py_BackoffCounter -initial_unreachable_backoff_counter(void) -{ - return make_backoff_counter(0, UNREACHABLE_BACKOFF); -} - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_BACKOFF_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_bitutils.h b/Python314_4_x86_Template/include/internal/pycore_bitutils.h deleted file mode 100644 index 50f693775..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_bitutils.h +++ /dev/null @@ -1,186 +0,0 @@ -/* Bit and bytes utilities. - - Bytes swap functions, reverse order of bytes: - - - _Py_bswap16(uint16_t) - - _Py_bswap32(uint32_t) - - _Py_bswap64(uint64_t) -*/ - -#ifndef Py_INTERNAL_BITUTILS_H -#define Py_INTERNAL_BITUTILS_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 -# include <intrin.h> // _byteswap_uint64() -#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 -} - - -// Population count: count the number of 1's in 'x' -// (number of bits set to 1), also known as the hamming weight. -// -// Implementation note. CPUID is not used, to test if x86 POPCNT instruction -// can be used, to keep the implementation simple. For example, Visual Studio -// __popcnt() is not used this reason. The clang and GCC builtin function can -// use the x86 POPCNT instruction if the target architecture has SSE4a or -// newer. -static inline int -_Py_popcount32(uint32_t x) -{ -#if (defined(__clang__) || defined(__GNUC__)) - -#if SIZEOF_INT >= 4 - Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned int)); - return __builtin_popcount(x); -#else - // The C standard guarantees that unsigned long will always be big enough - // to hold a uint32_t value without losing information. - Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned long)); - return __builtin_popcountl(x); -#endif - -#else - // 32-bit SWAR (SIMD Within A Register) popcount - - // Binary: 0 1 0 1 ... - const uint32_t M1 = 0x55555555; - // Binary: 00 11 00 11. .. - const uint32_t M2 = 0x33333333; - // Binary: 0000 1111 0000 1111 ... - const uint32_t M4 = 0x0F0F0F0F; - - // Put count of each 2 bits into those 2 bits - x = x - ((x >> 1) & M1); - // Put count of each 4 bits into those 4 bits - x = (x & M2) + ((x >> 2) & M2); - // Put count of each 8 bits into those 8 bits - x = (x + (x >> 4)) & M4; - // Sum of the 4 byte counts. - // Take care when considering changes to the next line. Portability and - // correctness are delicate here, thanks to C's "integer promotions" (C99 - // §6.3.1.1p2). On machines where the `int` type has width greater than 32 - // bits, `x` will be promoted to an `int`, and following C's "usual - // arithmetic conversions" (C99 §6.3.1.8), the multiplication will be - // performed as a multiplication of two `unsigned int` operands. In this - // case it's critical that we cast back to `uint32_t` in order to keep only - // the least significant 32 bits. On machines where the `int` type has - // width no greater than 32, the multiplication is of two 32-bit unsigned - // integer types, and the (uint32_t) cast is a no-op. In both cases, we - // avoid the risk of undefined behaviour due to overflow of a - // multiplication of signed integer types. - return (uint32_t)(x * 0x01010101U) >> 24; -#endif -} - - -// Return the index of the most significant 1 bit in 'x'. This is the smallest -// integer k such that x < 2**k. Equivalent to floor(log2(x)) + 1 for x != 0. -static inline int -_Py_bit_length(unsigned long x) -{ -#if (defined(__clang__) || defined(__GNUC__)) - if (x != 0) { - // __builtin_clzl() is available since GCC 3.4. - // Undefined behavior for x == 0. - return (int)sizeof(unsigned long) * 8 - __builtin_clzl(x); - } - else { - return 0; - } -#elif defined(_MSC_VER) - // _BitScanReverse() is documented to search 32 bits. - Py_BUILD_ASSERT(sizeof(unsigned long) <= 4); - unsigned long msb; - if (_BitScanReverse(&msb, x)) { - return (int)msb + 1; - } - else { - return 0; - } -#else - const int BIT_LENGTH_TABLE[32] = { - 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 - }; - int msb = 0; - while (x >= 32) { - msb += 6; - x >>= 6; - } - msb += BIT_LENGTH_TABLE[x]; - return msb; -#endif -} - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_BITUTILS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_blocks_output_buffer.h b/Python314_4_x86_Template/include/internal/pycore_blocks_output_buffer.h deleted file mode 100644 index 573e10359..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_blocks_output_buffer.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - _BlocksOutputBuffer is used to maintain an output buffer - that has unpredictable size. Suitable for compression/decompression - API (bz2/lzma/zlib) that has stream->next_out and stream->avail_out: - - stream->next_out: point to the next output position. - stream->avail_out: the number of available bytes left in the buffer. - - It maintains a list of bytes object, so there is no overhead of resizing - the buffer. - - Usage: - - 1, Initialize the struct instance like this: - _BlocksOutputBuffer buffer = {.list = NULL}; - Set .list to NULL for _BlocksOutputBuffer_OnError() - - 2, Initialize the buffer use one of these functions: - _BlocksOutputBuffer_InitAndGrow() - _BlocksOutputBuffer_InitWithSize() - - 3, If (avail_out == 0), grow the buffer: - _BlocksOutputBuffer_Grow() - - 4, Get the current outputted data size: - _BlocksOutputBuffer_GetDataSize() - - 5, Finish the buffer, and return a bytes object: - _BlocksOutputBuffer_Finish() - - 6, Clean up the buffer when an error occurred: - _BlocksOutputBuffer_OnError() -*/ - -#ifndef Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H -#define Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H -#ifdef __cplusplus -extern "C" { -#endif - -#include "Python.h" - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -typedef struct { - // List of bytes objects - PyObject *list; - // Number of whole allocated size - Py_ssize_t allocated; - // Max length of the buffer, negative number means unlimited length. - Py_ssize_t max_length; -} _BlocksOutputBuffer; - -static const char unable_allocate_msg[] = "Unable to allocate output buffer."; - -/* In 32-bit build, the max block size should <= INT32_MAX. */ -#define OUTPUT_BUFFER_MAX_BLOCK_SIZE (256*1024*1024) - -/* Block size sequence */ -#define KB (1024) -#define MB (1024*1024) -static const Py_ssize_t BUFFER_BLOCK_SIZE[] = - { 32*KB, 64*KB, 256*KB, 1*MB, 4*MB, 8*MB, 16*MB, 16*MB, - 32*MB, 32*MB, 32*MB, 32*MB, 64*MB, 64*MB, 128*MB, 128*MB, - OUTPUT_BUFFER_MAX_BLOCK_SIZE }; -#undef KB -#undef MB - -/* According to the block sizes defined by BUFFER_BLOCK_SIZE, the whole - allocated size growth step is: - 1 32 KB +32 KB - 2 96 KB +64 KB - 3 352 KB +256 KB - 4 1.34 MB +1 MB - 5 5.34 MB +4 MB - 6 13.34 MB +8 MB - 7 29.34 MB +16 MB - 8 45.34 MB +16 MB - 9 77.34 MB +32 MB - 10 109.34 MB +32 MB - 11 141.34 MB +32 MB - 12 173.34 MB +32 MB - 13 237.34 MB +64 MB - 14 301.34 MB +64 MB - 15 429.34 MB +128 MB - 16 557.34 MB +128 MB - 17 813.34 MB +256 MB - 18 1069.34 MB +256 MB - 19 1325.34 MB +256 MB - 20 1581.34 MB +256 MB - 21 1837.34 MB +256 MB - 22 2093.34 MB +256 MB - ... -*/ - -/* Initialize the buffer, and grow the buffer. - - max_length: Max length of the buffer, -1 for unlimited length. - - On success, return allocated size (>=0) - On failure, return -1 -*/ -static inline Py_ssize_t -_BlocksOutputBuffer_InitAndGrow(_BlocksOutputBuffer *buffer, - const Py_ssize_t max_length, - void **next_out) -{ - PyObject *b; - Py_ssize_t block_size; - - // ensure .list was set to NULL - assert(buffer->list == NULL); - - // get block size - if (0 <= max_length && max_length < BUFFER_BLOCK_SIZE[0]) { - block_size = max_length; - } else { - block_size = BUFFER_BLOCK_SIZE[0]; - } - - // the first block - b = PyBytes_FromStringAndSize(NULL, block_size); - if (b == NULL) { - return -1; - } - - // create the list - buffer->list = PyList_New(1); - if (buffer->list == NULL) { - Py_DECREF(b); - return -1; - } - PyList_SET_ITEM(buffer->list, 0, b); - - // set variables - buffer->allocated = block_size; - buffer->max_length = max_length; - - *next_out = PyBytes_AS_STRING(b); - return block_size; -} - -/* Initialize the buffer, with an initial size. - - Check block size limit in the outer wrapper function. For example, some libs - accept UINT32_MAX as the maximum block size, then init_size should <= it. - - On success, return allocated size (>=0) - On failure, return -1 -*/ -static inline Py_ssize_t -_BlocksOutputBuffer_InitWithSize(_BlocksOutputBuffer *buffer, - const Py_ssize_t init_size, - void **next_out) -{ - PyObject *b; - - // ensure .list was set to NULL - assert(buffer->list == NULL); - - // the first block - b = PyBytes_FromStringAndSize(NULL, init_size); - if (b == NULL) { - PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); - return -1; - } - - // create the list - buffer->list = PyList_New(1); - if (buffer->list == NULL) { - Py_DECREF(b); - return -1; - } - PyList_SET_ITEM(buffer->list, 0, b); - - // set variables - buffer->allocated = init_size; - buffer->max_length = -1; - - *next_out = PyBytes_AS_STRING(b); - return init_size; -} - -/* Grow the buffer. The avail_out must be 0, please check it before calling. - - On success, return allocated size (>=0) - On failure, return -1 -*/ -static inline Py_ssize_t -_BlocksOutputBuffer_Grow(_BlocksOutputBuffer *buffer, - void **next_out, - const Py_ssize_t avail_out) -{ - PyObject *b; - const Py_ssize_t list_len = Py_SIZE(buffer->list); - Py_ssize_t block_size; - - // ensure no gaps in the data - if (avail_out != 0) { - PyErr_SetString(PyExc_SystemError, - "avail_out is non-zero in _BlocksOutputBuffer_Grow()."); - return -1; - } - - // get block size - if (list_len < (Py_ssize_t) Py_ARRAY_LENGTH(BUFFER_BLOCK_SIZE)) { - block_size = BUFFER_BLOCK_SIZE[list_len]; - } else { - block_size = BUFFER_BLOCK_SIZE[Py_ARRAY_LENGTH(BUFFER_BLOCK_SIZE) - 1]; - } - - // check max_length - if (buffer->max_length >= 0) { - // if (rest == 0), should not grow the buffer. - Py_ssize_t rest = buffer->max_length - buffer->allocated; - assert(rest > 0); - - // block_size of the last block - if (block_size > rest) { - block_size = rest; - } - } - - // check buffer->allocated overflow - if (block_size > PY_SSIZE_T_MAX - buffer->allocated) { - PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); - return -1; - } - - // create the block - b = PyBytes_FromStringAndSize(NULL, block_size); - if (b == NULL) { - PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); - return -1; - } - if (PyList_Append(buffer->list, b) < 0) { - Py_DECREF(b); - return -1; - } - Py_DECREF(b); - - // set variables - buffer->allocated += block_size; - - *next_out = PyBytes_AS_STRING(b); - return block_size; -} - -/* Return the current outputted data size. */ -static inline Py_ssize_t -_BlocksOutputBuffer_GetDataSize(_BlocksOutputBuffer *buffer, - const Py_ssize_t avail_out) -{ - return buffer->allocated - avail_out; -} - -/* Finish the buffer. - - Return a bytes object on success - Return NULL on failure -*/ -static inline PyObject * -_BlocksOutputBuffer_Finish(_BlocksOutputBuffer *buffer, - const Py_ssize_t avail_out) -{ - PyObject *result, *block; - const Py_ssize_t list_len = Py_SIZE(buffer->list); - - // fast path for single block - if ((list_len == 1 && avail_out == 0) || - (list_len == 2 && Py_SIZE(PyList_GET_ITEM(buffer->list, 1)) == avail_out)) - { - block = PyList_GET_ITEM(buffer->list, 0); - Py_INCREF(block); - - Py_CLEAR(buffer->list); - return block; - } - - // final bytes object - result = PyBytes_FromStringAndSize(NULL, buffer->allocated - avail_out); - if (result == NULL) { - PyErr_SetString(PyExc_MemoryError, unable_allocate_msg); - return NULL; - } - - // memory copy - if (list_len > 0) { - char *posi = PyBytes_AS_STRING(result); - - // blocks except the last one - Py_ssize_t i = 0; - for (; i < list_len-1; i++) { - block = PyList_GET_ITEM(buffer->list, i); - memcpy(posi, PyBytes_AS_STRING(block), Py_SIZE(block)); - posi += Py_SIZE(block); - } - // the last block - block = PyList_GET_ITEM(buffer->list, i); - memcpy(posi, PyBytes_AS_STRING(block), Py_SIZE(block) - avail_out); - } else { - assert(Py_SIZE(result) == 0); - } - - Py_CLEAR(buffer->list); - return result; -} - -/* Clean up the buffer when an error occurred. */ -static inline void -_BlocksOutputBuffer_OnError(_BlocksOutputBuffer *buffer) -{ - Py_CLEAR(buffer->list); -} - -#ifdef __cplusplus -} -#endif -#endif /* Py_INTERNAL_BLOCKS_OUTPUT_BUFFER_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_brc.h b/Python314_4_x86_Template/include/internal/pycore_brc.h deleted file mode 100644 index cd3c9ac26..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_brc.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef Py_INTERNAL_BRC_H -#define Py_INTERNAL_BRC_H - -#include <stdint.h> -#include "pycore_llist.h" // struct llist_node -#include "pycore_object_stack.h" // _PyObjectStack - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED - -// Prime number to avoid correlations with memory addresses. -#define _Py_BRC_NUM_BUCKETS 257 - -// Hash table bucket -struct _brc_bucket { - // Mutex protects both the bucket and thread state queues in this bucket. - PyMutex mutex; - - // Linked list of _PyThreadStateImpl objects hashed to this bucket. - struct llist_node root; -}; - -// Per-interpreter biased reference counting state -struct _brc_state { - // Hash table of thread states by thread-id. Thread states within a bucket - // are chained using a doubly-linked list. - struct _brc_bucket table[_Py_BRC_NUM_BUCKETS]; -}; - -// Per-thread biased reference counting state -struct _brc_thread_state { - // Linked-list of thread states per hash bucket - struct llist_node bucket_node; - - // Thread-id as determined by _PyThread_Id() - uintptr_t tid; - - // Objects with refcounts to be merged (protected by bucket mutex) - _PyObjectStack objects_to_merge; - - // Local stack of objects to be merged (not accessed by other threads) - _PyObjectStack local_objects_to_merge; -}; - -// Initialize/finalize the per-thread biased reference counting state -void _Py_brc_init_thread(PyThreadState *tstate); -void _Py_brc_remove_thread(PyThreadState *tstate); - -// Initialize per-interpreter state -void _Py_brc_init_state(PyInterpreterState *interp); - -void _Py_brc_after_fork(PyInterpreterState *interp); - -// Enqueues an object to be merged by it's owning thread (tid). This -// steals a reference to the object. -void _Py_brc_queue_object(PyObject *ob); - -// Merge the refcounts of queued objects for the current thread. -void _Py_brc_merge_refcounts(PyThreadState *tstate); - -#endif /* Py_GIL_DISABLED */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_BRC_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_bytes_methods.h b/Python314_4_x86_Template/include/internal/pycore_bytes_methods.h deleted file mode 100644 index 059dc2599..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_bytes_methods.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef Py_LIMITED_API -#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. - */ -extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_isascii(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len); -extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len); - -/* These store their len sized answer in the given preallocated *result arg. */ -extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len); -extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len); -extern void _Py_bytes_title(char *result, const char *s, Py_ssize_t len); -extern void _Py_bytes_capitalize(char *result, const char *s, Py_ssize_t len); -extern void _Py_bytes_swapcase(char *result, const char *s, Py_ssize_t len); - -extern PyObject *_Py_bytes_find(const char *str, Py_ssize_t len, PyObject *sub, - Py_ssize_t start, Py_ssize_t end); -extern PyObject *_Py_bytes_index(const char *str, Py_ssize_t len, PyObject *sub, - Py_ssize_t start, Py_ssize_t end); -extern PyObject *_Py_bytes_rfind(const char *str, Py_ssize_t len, PyObject *sub, - Py_ssize_t start, Py_ssize_t end); -extern PyObject *_Py_bytes_rindex(const char *str, Py_ssize_t len, PyObject *sub, - Py_ssize_t start, Py_ssize_t end); -extern PyObject *_Py_bytes_count(const char *str, Py_ssize_t len, PyObject *sub, - Py_ssize_t start, Py_ssize_t end); -extern int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg); -extern PyObject *_Py_bytes_startswith(const char *str, Py_ssize_t len, - PyObject *subobj, Py_ssize_t start, - Py_ssize_t end); -extern PyObject *_Py_bytes_endswith(const char *str, Py_ssize_t len, - PyObject *subobj, Py_ssize_t start, - Py_ssize_t end); - -/* The maketrans() static method. */ -extern PyObject* _Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to); - -/* Shared __doc__ strings. */ -extern const char _Py_isspace__doc__[]; -extern const char _Py_isalpha__doc__[]; -extern const char _Py_isalnum__doc__[]; -extern const char _Py_isascii__doc__[]; -extern const char _Py_isdigit__doc__[]; -extern const char _Py_islower__doc__[]; -extern const char _Py_isupper__doc__[]; -extern const char _Py_istitle__doc__[]; -extern const char _Py_lower__doc__[]; -extern const char _Py_upper__doc__[]; -extern const char _Py_title__doc__[]; -extern const char _Py_capitalize__doc__[]; -extern const char _Py_swapcase__doc__[]; -extern const char _Py_count__doc__[]; -extern const char _Py_find__doc__[]; -extern const char _Py_index__doc__[]; -extern const char _Py_rfind__doc__[]; -extern const char _Py_rindex__doc__[]; -extern const char _Py_startswith__doc__[]; -extern const char _Py_endswith__doc__[]; -extern const char _Py_maketrans__doc__[]; -extern const char _Py_expandtabs__doc__[]; -extern const char _Py_ljust__doc__[]; -extern const char _Py_rjust__doc__[]; -extern const char _Py_center__doc__[]; -extern const char _Py_zfill__doc__[]; - -/* this is needed because some docs are shared from the .o, not static */ -#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str) - -#endif /* !Py_BYTES_CTYPE_H */ -#endif /* !Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/internal/pycore_bytesobject.h b/Python314_4_x86_Template/include/internal/pycore_bytesobject.h deleted file mode 100644 index 8ea9b3ebb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_bytesobject.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef Py_INTERNAL_BYTESOBJECT_H -#define Py_INTERNAL_BYTESOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyObject* _PyBytes_FormatEx( - const char *format, - Py_ssize_t format_len, - PyObject *args, - int use_bytearray); - -extern PyObject* _PyBytes_FromHex( - PyObject *string, - int use_bytearray); - -// Helper for PyBytes_DecodeEscape that detects invalid escape chars. -// Export for test_peg_generator. -PyAPI_FUNC(PyObject*) _PyBytes_DecodeEscape2(const char *, Py_ssize_t, - const char *, - int *, const char **); - - -// Substring Search. -// -// Returns the index of the first occurrence of -// a substring ("needle") in a larger text ("haystack"). -// If the needle is not found, return -1. -// If the needle is found, add offset to the index. -// -// Export for 'mmap' shared extension. -PyAPI_FUNC(Py_ssize_t) -_PyBytes_Find(const char *haystack, Py_ssize_t len_haystack, - const char *needle, Py_ssize_t len_needle, - Py_ssize_t offset); - -// Same as above, but search right-to-left. -// Export for 'mmap' shared extension. -PyAPI_FUNC(Py_ssize_t) -_PyBytes_ReverseFind(const char *haystack, Py_ssize_t len_haystack, - const char *needle, Py_ssize_t len_needle, - Py_ssize_t offset); - - -// Helper function to implement the repeat and inplace repeat methods on a -// buffer. -// -// len_dest is assumed to be an integer multiple of len_src. -// If src equals dest, then assume the operation is inplace. -// -// This method repeately doubles the number of bytes copied to reduce -// the number of invocations of memcpy. -// -// Export for 'array' shared extension. -PyAPI_FUNC(void) -_PyBytes_Repeat(char* dest, Py_ssize_t len_dest, - const char* src, Py_ssize_t len_src); - -/* --- _PyBytesWriter ----------------------------------------------------- */ - -/* 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. - - Export _PyBytesWriter API for '_pickle' shared extension. */ -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); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_BYTESOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_c_array.h b/Python314_4_x86_Template/include/internal/pycore_c_array.h deleted file mode 100644 index 7a10fc866..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_c_array.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef Py_INTERNAL_C_ARRAY_H -#define Py_INTERNAL_C_ARRAY_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* Utility for a number of growing arrays */ - -typedef struct { - void *array; /* pointer to the array */ - int allocated_entries; /* pointer to the capacity of the array */ - size_t item_size; /* size of each element */ - int initial_num_entries; /* initial allocation size */ -} _Py_c_array_t; - - -int _Py_CArray_Init(_Py_c_array_t* array, int item_size, int initial_num_entries); -void _Py_CArray_Fini(_Py_c_array_t* array); - -/* If idx is out of bounds: - * If arr->array is NULL, allocate arr->initial_num_entries slots. - * Otherwise, double its size. - * - * Return 0 if successful and -1 (with exception set) otherwise. - */ -int _Py_CArray_EnsureCapacity(_Py_c_array_t *c_array, int idx); - - -#ifdef __cplusplus -} -#endif - -#endif /* !Py_INTERNAL_C_ARRAY_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_call.h b/Python314_4_x86_Template/include/internal/pycore_call.h deleted file mode 100644 index 05b58b2ba..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_call.h +++ /dev/null @@ -1,214 +0,0 @@ -#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 - -#include "pycore_code.h" // EVAL_CALL_STAT_INC_IF_FUNCTION() -#include "pycore_pystate.h" // _PyThreadState_GET() -#include "pycore_stats.h" - -/* 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. - - 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 - function calls of the Python standard library. On 64-bit CPU, it allocates - 40 bytes on the stack. */ -#define _PY_FASTCALL_SMALL_STACK 5 - - -// Export for 'math' shared extension, used via _PyObject_VectorcallTstate() -// static inline function. -PyAPI_FUNC(PyObject*) _Py_CheckFunctionResult( - PyThreadState *tstate, - PyObject *callable, - PyObject *result, - const char *where); - -extern PyObject* _PyObject_Call_Prepend( - PyThreadState *tstate, - PyObject *callable, - PyObject *obj, - PyObject *args, - PyObject *kwargs); - -extern PyObject* _PyObject_VectorcallDictTstate( - PyThreadState *tstate, - PyObject *callable, - PyObject *const *args, - size_t nargsf, - PyObject *kwargs); - -extern PyObject* _PyObject_Call( - PyThreadState *tstate, - PyObject *callable, - PyObject *args, - PyObject *kwargs); - -extern PyObject * _PyObject_CallMethodFormat( - PyThreadState *tstate, - PyObject *callable, - const char *format, - ...); - -// Export for 'array' shared extension -PyAPI_FUNC(PyObject*) _PyObject_CallMethod( - PyObject *obj, - PyObject *name, - const char *format, ...); - -extern PyObject* _PyObject_CallMethodIdObjArgs( - PyObject *obj, - _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 _Py_NULL; - } - return PyObject_VectorcallMethod(oname, args, nargsf, kwnames); -} - -static inline PyObject * -_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name) -{ - size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET; - return _PyObject_VectorcallMethodId(name, &self, nargsf, _Py_NULL); -} - -static inline PyObject * -_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg) -{ - PyObject *args[2] = {self, arg}; - size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET; - assert(arg != NULL); - return _PyObject_VectorcallMethodId(name, args, nargsf, _Py_NULL); -} - - -extern PyObject *_PyObject_VectorcallPrepend( - PyThreadState *tstate, - PyObject *callable, - PyObject *arg, - PyObject *const *args, - size_t nargsf, - PyObject *kwnames); - -/* === Vectorcall protocol (PEP 590) ============================= */ - -// Call callable using tp_call. Arguments are like PyObject_Vectorcall(), -// except that nargs is plainly the number of arguments without flags. -// -// Export for 'math' shared extension, used via _PyObject_VectorcallTstate() -// static inline function. -PyAPI_FUNC(PyObject*) _PyObject_MakeTpCall( - PyThreadState *tstate, - PyObject *callable, - PyObject *const *args, Py_ssize_t nargs, - PyObject *keywords); - -// Static inline variant of public PyVectorcall_Function(). -static inline vectorcallfunc -_PyVectorcall_FunctionInline(PyObject *callable) -{ - assert(callable != NULL); - - PyTypeObject *tp = Py_TYPE(callable); - if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) { - return NULL; - } - assert(PyCallable_Check(callable)); - - Py_ssize_t offset = tp->tp_vectorcall_offset; - assert(offset > 0); - - vectorcallfunc ptr; - memcpy(&ptr, (char *) callable + offset, sizeof(ptr)); - return ptr; -} - - -/* Call the callable object 'callable' with the "vectorcall" calling - convention. - - args is a C array for positional arguments. - - nargsf is the number of positional arguments plus optionally the flag - PY_VECTORCALL_ARGUMENTS_OFFSET which means that the caller is allowed to - modify args[-1]. - - kwnames is a tuple of keyword names. The values of the keyword arguments - are stored in "args" after the positional arguments (note that the number - of keyword arguments does not change nargsf). kwnames can also be NULL if - there are no keyword arguments. - - 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_VectorcallTstate(PyThreadState *tstate, PyObject *callable, - PyObject *const *args, size_t nargsf, - PyObject *kwnames) -{ - vectorcallfunc func; - PyObject *res; - - assert(kwnames == NULL || PyTuple_Check(kwnames)); - assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0); - - func = _PyVectorcall_FunctionInline(callable); - if (func == NULL) { - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); - return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames); - } - res = func(callable, args, nargsf, kwnames); - return _Py_CheckFunctionResult(tstate, callable, res, NULL); -} - - -static inline PyObject * -_PyObject_CallNoArgsTstate(PyThreadState *tstate, PyObject *func) { - return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); -} - - -// Private static inline function variant of public PyObject_CallNoArgs() -static inline PyObject * -_PyObject_CallNoArgs(PyObject *func) { - EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func); - PyThreadState *tstate = _PyThreadState_GET(); - return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); -} - - -extern PyObject *const * -_PyStack_UnpackDict(PyThreadState *tstate, - PyObject *const *args, Py_ssize_t nargs, - PyObject *kwargs, PyObject **p_kwnames); - -extern void _PyStack_UnpackDict_Free( - PyObject *const *stack, - Py_ssize_t nargs, - PyObject *kwnames); - -extern void _PyStack_UnpackDict_FreeNoDecRef( - PyObject *const *stack, - PyObject *kwnames); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CALL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_capsule.h b/Python314_4_x86_Template/include/internal/pycore_capsule.h deleted file mode 100644 index aa2c67f3a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_capsule.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef Py_INTERNAL_PYCAPSULE_H -#define Py_INTERNAL_PYCAPSULE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Export for '_socket' shared extension -PyAPI_FUNC(int) _PyCapsule_SetTraverse(PyObject *op, traverseproc traverse_func, inquiry clear_func); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYCAPSULE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_cell.h b/Python314_4_x86_Template/include/internal/pycore_cell.h deleted file mode 100644 index d0d45a234..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_cell.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef Py_INTERNAL_CELL_H -#define Py_INTERNAL_CELL_H - -#include "pycore_critical_section.h" -#include "pycore_object.h" -#include "pycore_stackref.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Sets the cell contents to `value` and return previous contents. Steals a -// reference to `value`. -static inline PyObject * -PyCell_SwapTakeRef(PyCellObject *cell, PyObject *value) -{ - PyObject *old_value; - Py_BEGIN_CRITICAL_SECTION(cell); - old_value = cell->ob_ref; - FT_ATOMIC_STORE_PTR_RELEASE(cell->ob_ref, value); - Py_END_CRITICAL_SECTION(); - return old_value; -} - -static inline void -PyCell_SetTakeRef(PyCellObject *cell, PyObject *value) -{ - PyObject *old_value = PyCell_SwapTakeRef(cell, value); - Py_XDECREF(old_value); -} - -// Gets the cell contents. Returns a new reference. -static inline PyObject * -PyCell_GetRef(PyCellObject *cell) -{ - PyObject *res; - Py_BEGIN_CRITICAL_SECTION(cell); -#ifdef Py_GIL_DISABLED - res = _Py_XNewRefWithLock(cell->ob_ref); -#else - res = Py_XNewRef(cell->ob_ref); -#endif - Py_END_CRITICAL_SECTION(); - return res; -} - -static inline _PyStackRef -_PyCell_GetStackRef(PyCellObject *cell) -{ - PyObject *value; -#ifdef Py_GIL_DISABLED - value = _PyObject_CAST(_Py_atomic_load_ptr(&cell->ob_ref)); - if (value == NULL) { - return PyStackRef_NULL; - } - _PyStackRef ref; - if (_Py_TryIncrefCompareStackRef(&cell->ob_ref, value, &ref)) { - return ref; - } -#endif - value = PyCell_GetRef(cell); - if (value == NULL) { - return PyStackRef_NULL; - } - return PyStackRef_FromPyObjectSteal(value); -} - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CELL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_ceval.h b/Python314_4_x86_Template/include/internal/pycore_ceval.h deleted file mode 100644 index e3fa8e10e..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_ceval.h +++ /dev/null @@ -1,394 +0,0 @@ -#ifndef Py_INTERNAL_CEVAL_H -#define Py_INTERNAL_CEVAL_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "dynamic_annotations.h" // _Py_ANNOTATE_RWLOCK_CREATE - -#include "pycore_code.h" // _PyCode_GetTLBCFast() -#include "pycore_interp.h" // PyInterpreterState.eval_frame -#include "pycore_pystate.h" // _PyThreadState_GET() -#include "pycore_stats.h" // EVAL_CALL_STAT_INC() -#include "pycore_typedefs.h" // _PyInterpreterFrame - - -/* Forward declarations */ -struct _ceval_runtime_state; - -// Export for '_lsprof' shared extension -PyAPI_FUNC(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); -extern int _PyEval_SetProfileAllThreads(PyInterpreterState *interp, Py_tracefunc func, PyObject *arg); - -extern int _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); -extern int _PyEval_SetTraceAllThreads(PyInterpreterState *interp, Py_tracefunc func, PyObject *arg); - -extern int _PyEval_SetOpcodeTrace(PyFrameObject *f, bool enable); - -// Helper to look up a builtin object -// Export for 'array' shared extension -PyAPI_FUNC(PyObject*) _PyEval_GetBuiltin(PyObject *); - -extern PyObject* _PyEval_GetBuiltinId(_Py_Identifier *); - -extern void _PyEval_SetSwitchInterval(unsigned long microseconds); -extern unsigned long _PyEval_GetSwitchInterval(void); - -// Export for '_queue' shared extension -PyAPI_FUNC(int) _PyEval_MakePendingCalls(PyThreadState *); - -#ifndef Py_DEFAULT_RECURSION_LIMIT -# define Py_DEFAULT_RECURSION_LIMIT 1000 -#endif - -extern void _Py_FinishPendingCalls(PyThreadState *tstate); -extern void _PyEval_InitState(PyInterpreterState *); -extern void _PyEval_SignalReceived(void); - -// bitwise flags: -#define _Py_PENDING_MAINTHREADONLY 1 -#define _Py_PENDING_RAWFREE 2 - -typedef int _Py_add_pending_call_result; -#define _Py_ADD_PENDING_SUCCESS 0 -#define _Py_ADD_PENDING_FULL -1 - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(_Py_add_pending_call_result) _PyEval_AddPendingCall( - PyInterpreterState *interp, - _Py_pending_call_func func, - void *arg, - int flags); - -#ifdef HAVE_FORK -extern PyStatus _PyEval_ReInitThreads(PyThreadState *tstate); -#endif - -// Used by sys.call_tracing() -extern PyObject* _PyEval_CallTracing(PyObject *func, PyObject *args); - -// Used by sys.get_asyncgen_hooks() -extern PyObject* _PyEval_GetAsyncGenFirstiter(void); -extern PyObject* _PyEval_GetAsyncGenFinalizer(void); - -// Used by sys.set_asyncgen_hooks() -extern int _PyEval_SetAsyncGenFirstiter(PyObject *); -extern int _PyEval_SetAsyncGenFinalizer(PyObject *); - -// Used by sys.get_coroutine_origin_tracking_depth() -// and sys.set_coroutine_origin_tracking_depth() -extern int _PyEval_GetCoroutineOriginTrackingDepth(void); -extern int _PyEval_SetCoroutineOriginTrackingDepth(int depth); - -extern void _PyEval_Fini(void); - - -extern PyObject* _PyEval_GetBuiltins(PyThreadState *tstate); - -// Trampoline API - -typedef struct { - // Callback to initialize the trampoline state - void* (*init_state)(void); - // Callback to register every trampoline being created - void (*write_state)(void* state, const void *code_addr, - unsigned int code_size, PyCodeObject* code); - // Callback to free the trampoline state - int (*free_state)(void* state); -} _PyPerf_Callbacks; - -extern int _PyPerfTrampoline_SetCallbacks(_PyPerf_Callbacks *); -extern void _PyPerfTrampoline_GetCallbacks(_PyPerf_Callbacks *); -extern int _PyPerfTrampoline_Init(int activate); -extern int _PyPerfTrampoline_Fini(void); -extern int _PyIsPerfTrampolineActive(void); -extern PyStatus _PyPerfTrampoline_AfterFork_Child(void); -#ifdef PY_HAVE_PERF_TRAMPOLINE -extern _PyPerf_Callbacks _Py_perfmap_callbacks; -extern _PyPerf_Callbacks _Py_perfmap_jit_callbacks; -#endif - -static inline PyObject* -_PyEval_EvalFrame(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag) -{ - EVAL_CALL_STAT_INC(EVAL_CALL_TOTAL); - if (tstate->interp->eval_frame == NULL) { - return _PyEval_EvalFrameDefault(tstate, frame, throwflag); - } - return tstate->interp->eval_frame(tstate, frame, throwflag); -} - -extern PyObject* -_PyEval_Vector(PyThreadState *tstate, - PyFunctionObject *func, PyObject *locals, - PyObject* const* args, size_t argcount, - PyObject *kwnames); - -extern int _PyEval_ThreadsInitialized(void); -extern void _PyEval_InitGIL(PyThreadState *tstate, int own_gil); -extern void _PyEval_FiniGIL(PyInterpreterState *interp); - -extern void _PyEval_AcquireLock(PyThreadState *tstate); - -extern void _PyEval_ReleaseLock(PyInterpreterState *, PyThreadState *, - int final_release); - -#ifdef Py_GIL_DISABLED -// Returns 0 or 1 if the GIL for the given thread's interpreter is disabled or -// enabled, respectively. -// -// The enabled state of the GIL will not change while one or more threads are -// attached. -static inline int -_PyEval_IsGILEnabled(PyThreadState *tstate) -{ - struct _gil_runtime_state *gil = tstate->interp->ceval.gil; - return _Py_atomic_load_int_relaxed(&gil->enabled) != 0; -} - -// Enable or disable the GIL used by the interpreter that owns tstate, which -// must be the current thread. This may affect other interpreters, if the GIL -// is shared. All three functions will be no-ops (and return 0) if the -// interpreter's `enable_gil' config is not _PyConfig_GIL_DEFAULT. -// -// Every call to _PyEval_EnableGILTransient() must be paired with exactly one -// call to either _PyEval_EnableGILPermanent() or -// _PyEval_DisableGIL(). _PyEval_EnableGILPermanent() and _PyEval_DisableGIL() -// must only be called while the GIL is enabled from a call to -// _PyEval_EnableGILTransient(). -// -// _PyEval_EnableGILTransient() returns 1 if it enabled the GIL, or 0 if the -// GIL was already enabled, whether transiently or permanently. The caller will -// hold the GIL upon return. -// -// _PyEval_EnableGILPermanent() returns 1 if it permanently enabled the GIL -// (which must already be enabled), or 0 if it was already permanently -// enabled. Once _PyEval_EnableGILPermanent() has been called once, all -// subsequent calls to any of the three functions will be no-ops. -// -// _PyEval_DisableGIL() returns 1 if it disabled the GIL, or 0 if the GIL was -// kept enabled because of another request, whether transient or permanent. -// -// All three functions must be called by an attached thread (this implies that -// if the GIL is enabled, the current thread must hold it). -extern int _PyEval_EnableGILTransient(PyThreadState *tstate); -extern int _PyEval_EnableGILPermanent(PyThreadState *tstate); -extern int _PyEval_DisableGIL(PyThreadState *state); - - -static inline _Py_CODEUNIT * -_PyEval_GetExecutableCode(PyThreadState *tstate, PyCodeObject *co) -{ - _Py_CODEUNIT *bc = _PyCode_GetTLBCFast(tstate, co); - if (bc != NULL) { - return bc; - } - return _PyCode_GetTLBC(co); -} - -#endif - -extern void _PyEval_DeactivateOpCache(void); - - -/* --- _Py_EnterRecursiveCall() ----------------------------------------- */ - -static inline int _Py_MakeRecCheck(PyThreadState *tstate) { - uintptr_t here_addr = _Py_get_machine_stack_pointer(); - _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate; - // Overflow if stack pointer is between soft limit and the base of the hardware stack. - // If it is below the hardware stack base, assume that we have the wrong stack limits, and do nothing. - // We could have the wrong stack limits because of limited platform support, or user-space threads. -#if _Py_STACK_GROWS_DOWN - return here_addr < _tstate->c_stack_soft_limit && here_addr >= _tstate->c_stack_soft_limit - 2 * _PyOS_STACK_MARGIN_BYTES; -#else - return here_addr > _tstate->c_stack_soft_limit && here_addr <= _tstate->c_stack_soft_limit + 2 * _PyOS_STACK_MARGIN_BYTES; -#endif -} - -// Export for '_json' shared extension, used via _Py_EnterRecursiveCall() -// static inline function. -PyAPI_FUNC(int) _Py_CheckRecursiveCall( - PyThreadState *tstate, - const char *where); - -int _Py_CheckRecursiveCallPy( - PyThreadState *tstate); - -static inline int _Py_EnterRecursiveCallTstate(PyThreadState *tstate, - const char *where) { - return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where)); -} - -static inline int _Py_EnterRecursiveCall(const char *where) { - PyThreadState *tstate = _PyThreadState_GET(); - return _Py_EnterRecursiveCallTstate(tstate, where); -} - -static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) { - (void)tstate; -} - -PyAPI_FUNC(void) _Py_InitializeRecursionLimits(PyThreadState *tstate); - -static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate) { - uintptr_t here_addr = _Py_get_machine_stack_pointer(); - _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate; - assert(_tstate->c_stack_hard_limit != 0); -#if _Py_STACK_GROWS_DOWN - return here_addr <= _tstate->c_stack_soft_limit; -#else - return here_addr >= _tstate->c_stack_soft_limit; -#endif -} - -static inline void _Py_LeaveRecursiveCall(void) { -} - -extern _PyInterpreterFrame* _PyEval_GetFrame(void); - -extern PyObject * _PyEval_GetGlobalsFromRunningMain(PyThreadState *); -extern int _PyEval_EnsureBuiltins( - PyThreadState *, - PyObject *, - PyObject **p_builtins); -extern int _PyEval_EnsureBuiltinsWithModule( - PyThreadState *, - PyObject *, - PyObject **p_builtins); - -PyAPI_FUNC(PyObject *)_Py_MakeCoro(PyFunctionObject *func); - -/* Handle signals, pending calls, GIL drop request - and asynchronous exception */ -PyAPI_FUNC(int) _Py_HandlePending(PyThreadState *tstate); - -extern PyObject * _PyEval_GetFrameLocals(void); - -typedef PyObject *(*conversion_func)(PyObject *); - -PyAPI_DATA(const binaryfunc) _PyEval_BinaryOps[]; -PyAPI_DATA(const conversion_func) _PyEval_ConversionFuncs[]; - -typedef struct _special_method { - PyObject *name; - const char *error; - const char *error_suggestion; // improved optional suggestion -} _Py_SpecialMethod; - -PyAPI_DATA(const _Py_SpecialMethod) _Py_SpecialMethods[]; -PyAPI_DATA(const size_t) _Py_FunctionAttributeOffsets[]; - -PyAPI_FUNC(int) _PyEval_CheckExceptStarTypeValid(PyThreadState *tstate, PyObject* right); -PyAPI_FUNC(int) _PyEval_CheckExceptTypeValid(PyThreadState *tstate, PyObject* right); -PyAPI_FUNC(int) _PyEval_ExceptionGroupMatch(_PyInterpreterFrame *, PyObject* exc_value, PyObject *match_type, PyObject **match, PyObject **rest); -PyAPI_FUNC(void) _PyEval_FormatAwaitableError(PyThreadState *tstate, PyTypeObject *type, int oparg); -PyAPI_FUNC(void) _PyEval_FormatExcCheckArg(PyThreadState *tstate, PyObject *exc, const char *format_str, PyObject *obj); -PyAPI_FUNC(void) _PyEval_FormatExcUnbound(PyThreadState *tstate, PyCodeObject *co, int oparg); -PyAPI_FUNC(void) _PyEval_FormatKwargsError(PyThreadState *tstate, PyObject *func, PyObject *kwargs); -PyAPI_FUNC(PyObject *) _PyEval_ImportFrom(PyThreadState *, PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) _PyEval_ImportName(PyThreadState *, _PyInterpreterFrame *, PyObject *, PyObject *, PyObject *); -PyAPI_FUNC(PyObject *)_PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type, Py_ssize_t nargs, PyObject *kwargs); -PyAPI_FUNC(PyObject *)_PyEval_MatchKeys(PyThreadState *tstate, PyObject *map, PyObject *keys); -PyAPI_FUNC(void) _PyEval_MonitorRaise(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr); -PyAPI_FUNC(bool) _PyEval_NoToolsForUnwind(PyThreadState *tstate); -PyAPI_FUNC(int) _PyEval_UnpackIterableStackRef(PyThreadState *tstate, PyObject *v, int argcnt, int argcntafter, _PyStackRef *sp); -PyAPI_FUNC(void) _PyEval_FrameClearAndPop(PyThreadState *tstate, _PyInterpreterFrame *frame); -PyAPI_FUNC(PyObject **) _PyObjectArray_FromStackRefArray(_PyStackRef *input, Py_ssize_t nargs, PyObject **scratch); - -PyAPI_FUNC(void) _PyObjectArray_Free(PyObject **array, PyObject **scratch); - -PyAPI_FUNC(PyObject *) _PyEval_GetANext(PyObject *aiter); -PyAPI_FUNC(void) _PyEval_LoadGlobalStackRef(PyObject *globals, PyObject *builtins, PyObject *name, _PyStackRef *writeto); -PyAPI_FUNC(PyObject *) _PyEval_GetAwaitable(PyObject *iterable, int oparg); -PyAPI_FUNC(PyObject *) _PyEval_LoadName(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject *name); -PyAPI_FUNC(int) -_Py_Check_ArgsIterable(PyThreadState *tstate, PyObject *func, PyObject *args); - -/* - * Indicate whether a special method of given 'oparg' can use the (improved) - * alternative error message instead. Only methods loaded by LOAD_SPECIAL - * support alternative error messages. - * - * Symbol is exported for the JIT (see discussion on GH-132218). - */ -PyAPI_FUNC(int) -_PyEval_SpecialMethodCanSuggest(PyObject *self, int oparg); - -/* Bits that can be set in PyThreadState.eval_breaker */ -#define _PY_GIL_DROP_REQUEST_BIT (1U << 0) -#define _PY_SIGNALS_PENDING_BIT (1U << 1) -#define _PY_CALLS_TO_DO_BIT (1U << 2) -#define _PY_ASYNC_EXCEPTION_BIT (1U << 3) -#define _PY_GC_SCHEDULED_BIT (1U << 4) -#define _PY_EVAL_PLEASE_STOP_BIT (1U << 5) -#define _PY_EVAL_EXPLICIT_MERGE_BIT (1U << 6) -#define _PY_EVAL_JIT_INVALIDATE_COLD_BIT (1U << 7) - -/* Reserve a few bits for future use */ -#define _PY_EVAL_EVENTS_BITS 8 -#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1) - -static inline void -_Py_set_eval_breaker_bit(PyThreadState *tstate, uintptr_t bit) -{ - _Py_atomic_or_uintptr(&tstate->eval_breaker, bit); -} - -static inline void -_Py_unset_eval_breaker_bit(PyThreadState *tstate, uintptr_t bit) -{ - _Py_atomic_and_uintptr(&tstate->eval_breaker, ~bit); -} - -static inline int -_Py_eval_breaker_bit_is_set(PyThreadState *tstate, uintptr_t bit) -{ - uintptr_t b = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker); - return (b & bit) != 0; -} - -// Free-threaded builds use these functions to set or unset a bit on all -// threads in the given interpreter. -void _Py_set_eval_breaker_bit_all(PyInterpreterState *interp, uintptr_t bit); -void _Py_unset_eval_breaker_bit_all(PyInterpreterState *interp, uintptr_t bit); - -PyAPI_FUNC(_PyStackRef) _PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef right, double value); - -#ifndef Py_SUPPORTS_REMOTE_DEBUG - #if defined(__APPLE__) - #include <TargetConditionals.h> - # if !defined(TARGET_OS_OSX) -// Older macOS SDKs do not define TARGET_OS_OSX - # define TARGET_OS_OSX 1 - # endif - #endif - #if ((defined(__APPLE__) && TARGET_OS_OSX) || defined(MS_WINDOWS) || (defined(__linux__) && HAVE_PROCESS_VM_READV)) - # define Py_SUPPORTS_REMOTE_DEBUG 1 - #endif -#endif - -#if defined(Py_REMOTE_DEBUG) && defined(Py_SUPPORTS_REMOTE_DEBUG) -extern int _PyRunRemoteDebugger(PyThreadState *tstate); -#endif - -/* Special methods used by LOAD_SPECIAL */ -#define SPECIAL___ENTER__ 0 -#define SPECIAL___EXIT__ 1 -#define SPECIAL___AENTER__ 2 -#define SPECIAL___AEXIT__ 3 -#define SPECIAL_MAX 3 - -PyAPI_FUNC(_PyStackRef) -_Py_LoadAttr_StackRefSteal( - PyThreadState *tstate, _PyStackRef owner, - PyObject *name, _PyStackRef *self_or_null); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CEVAL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_ceval_state.h b/Python314_4_x86_Template/include/internal/pycore_ceval_state.h deleted file mode 100644 index 64128a781..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_ceval_state.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef Py_INTERNAL_CEVAL_STATE_H -#define Py_INTERNAL_CEVAL_STATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_gil.h" // struct _gil_runtime_state - - -#define MAXPENDINGCALLS PENDINGCALLSARRAYSIZE -/* For interpreter-level pending calls, we want to avoid spending too - much time on pending calls in any one thread, so we apply a limit. */ -#if MAXPENDINGCALLS > 100 -# define MAXPENDINGCALLSLOOP 100 -#else -# define MAXPENDINGCALLSLOOP MAXPENDINGCALLS -#endif - -/* We keep the number small to preserve as much compatibility - as possible with earlier versions. */ -#define MAXPENDINGCALLS_MAIN 32 -/* For the main thread, we want to make sure all pending calls are - run at once, for the sake of prompt signal handling. This is - unlikely to cause any problems since there should be very few - pending calls for the main thread. */ -#define MAXPENDINGCALLSLOOP_MAIN 0 - - -#ifdef PY_HAVE_PERF_TRAMPOLINE -# define _PyEval_RUNTIME_PERF_INIT \ - { \ - .status = PERF_STATUS_NO_INIT, \ - .extra_code_index = -1, \ - .persist_after_fork = 0, \ - } -#else -# define _PyEval_RUNTIME_PERF_INIT {0} -#endif - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CEVAL_STATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_code.h b/Python314_4_x86_Template/include/internal/pycore_code.h deleted file mode 100644 index dc0ea9c66..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_code.h +++ /dev/null @@ -1,671 +0,0 @@ -#ifndef Py_INTERNAL_CODE_H -#define Py_INTERNAL_CODE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_backoff.h" // _Py_BackoffCounter -#include "pycore_structs.h" // _Py_CODEUNIT -#include "pycore_tstate.h" // _PyThreadStateImpl - - -#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive) -#define _PyCode_NBYTES(CO) (Py_SIZE(CO) * (Py_ssize_t)sizeof(_Py_CODEUNIT)) - - -/* These macros only remain defined for compatibility. */ -#define _Py_OPCODE(word) ((word).op.code) -#define _Py_OPARG(word) ((word).op.arg) - -static inline _Py_CODEUNIT -_py_make_codeunit(uint8_t opcode, uint8_t oparg) -{ - // No designated initialisers because of C++ compat - _Py_CODEUNIT word; - word.op.code = opcode; - word.op.arg = oparg; - return word; -} - -static inline void -_py_set_opcode(_Py_CODEUNIT *word, uint8_t opcode) -{ - word->op.code = opcode; -} - -#define _Py_MAKE_CODEUNIT(opcode, oparg) _py_make_codeunit((opcode), (oparg)) -#define _Py_SET_OPCODE(word, opcode) _py_set_opcode(&(word), (opcode)) - - -// We hide some of the newer PyCodeObject fields behind macros. -// This helps with backporting certain changes to 3.12. -#define _PyCode_HAS_EXECUTORS(CODE) \ - (CODE->co_executors != NULL) -#define _PyCode_HAS_INSTRUMENTATION(CODE) \ - (CODE->_co_instrumentation_version > 0) - - -extern PyStatus _PyCode_Init(PyInterpreterState *interp); -extern void _PyCode_Fini(PyInterpreterState *interp); - - -/* PEP 659 - * Specialization and quickening structs and helper functions - */ - - -// Inline caches. If you change the number of cache entries for an instruction, -// you must *also* update the number of cache entries in Lib/opcode.py and bump -// the magic number in Lib/importlib/_bootstrap_external.py! - -#define CACHE_ENTRIES(cache) (sizeof(cache)/sizeof(_Py_CODEUNIT)) - -typedef struct { - _Py_BackoffCounter counter; - uint16_t module_keys_version; - uint16_t builtin_keys_version; - uint16_t index; -} _PyLoadGlobalCache; - -#define INLINE_CACHE_ENTRIES_LOAD_GLOBAL CACHE_ENTRIES(_PyLoadGlobalCache) - -typedef struct { - _Py_BackoffCounter counter; - uint16_t external_cache[4]; -} _PyBinaryOpCache; - -#define INLINE_CACHE_ENTRIES_BINARY_OP CACHE_ENTRIES(_PyBinaryOpCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PyUnpackSequenceCache; - -#define INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE \ - CACHE_ENTRIES(_PyUnpackSequenceCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PyCompareOpCache; - -#define INLINE_CACHE_ENTRIES_COMPARE_OP CACHE_ENTRIES(_PyCompareOpCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PySuperAttrCache; - -#define INLINE_CACHE_ENTRIES_LOAD_SUPER_ATTR CACHE_ENTRIES(_PySuperAttrCache) - -typedef struct { - _Py_BackoffCounter counter; - uint16_t version[2]; - uint16_t index; -} _PyAttrCache; - -typedef struct { - _Py_BackoffCounter counter; - uint16_t type_version[2]; - union { - uint16_t keys_version[2]; - uint16_t dict_offset; - }; - uint16_t descr[4]; -} _PyLoadMethodCache; - - -// MUST be the max(_PyAttrCache, _PyLoadMethodCache) -#define INLINE_CACHE_ENTRIES_LOAD_ATTR CACHE_ENTRIES(_PyLoadMethodCache) - -#define INLINE_CACHE_ENTRIES_STORE_ATTR CACHE_ENTRIES(_PyAttrCache) - -typedef struct { - _Py_BackoffCounter counter; - uint16_t func_version[2]; -} _PyCallCache; - -#define INLINE_CACHE_ENTRIES_CALL CACHE_ENTRIES(_PyCallCache) -#define INLINE_CACHE_ENTRIES_CALL_KW CACHE_ENTRIES(_PyCallCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PyStoreSubscrCache; - -#define INLINE_CACHE_ENTRIES_STORE_SUBSCR CACHE_ENTRIES(_PyStoreSubscrCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PyForIterCache; - -#define INLINE_CACHE_ENTRIES_FOR_ITER CACHE_ENTRIES(_PyForIterCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PySendCache; - -#define INLINE_CACHE_ENTRIES_SEND CACHE_ENTRIES(_PySendCache) - -typedef struct { - _Py_BackoffCounter counter; - uint16_t version[2]; -} _PyToBoolCache; - -#define INLINE_CACHE_ENTRIES_TO_BOOL CACHE_ENTRIES(_PyToBoolCache) - -typedef struct { - _Py_BackoffCounter counter; -} _PyContainsOpCache; - -#define INLINE_CACHE_ENTRIES_CONTAINS_OP CACHE_ENTRIES(_PyContainsOpCache) - -/* "Locals plus" for a code object is the set of locals + cell vars + - * free vars. This relates to variable names as well as offsets into - * the "fast locals" storage array of execution frames. The compiler - * builds the list of names, their offsets, and the corresponding - * kind of local. - * - * Those kinds represent the source of the initial value and the - * variable's scope (as related to closures). A "local" is an - * argument or other variable defined in the current scope. A "free" - * variable is one that is defined in an outer scope and comes from - * the function's closure. A "cell" variable is a local that escapes - * into an inner function as part of a closure, and thus must be - * wrapped in a cell. Any "local" can also be a "cell", but the - * "free" kind is mutually exclusive with both. - */ - -// Note that these all fit within a byte, as do combinations. -#define CO_FAST_ARG_POS (0x02) // pos-only, pos-or-kw, varargs -#define CO_FAST_ARG_KW (0x04) // kw-only, pos-or-kw, varkwargs -#define CO_FAST_ARG_VAR (0x08) // varargs, varkwargs -#define CO_FAST_ARG (CO_FAST_ARG_POS | CO_FAST_ARG_KW | CO_FAST_ARG_VAR) -#define CO_FAST_HIDDEN (0x10) -#define CO_FAST_LOCAL (0x20) -#define CO_FAST_CELL (0x40) -#define CO_FAST_FREE (0x80) - -typedef unsigned char _PyLocals_Kind; - -static inline _PyLocals_Kind -_PyLocals_GetKind(PyObject *kinds, int i) -{ - assert(PyBytes_Check(kinds)); - assert(0 <= i && i < PyBytes_GET_SIZE(kinds)); - char *ptr = PyBytes_AS_STRING(kinds); - return (_PyLocals_Kind)(ptr[i]); -} - -static inline void -_PyLocals_SetKind(PyObject *kinds, int i, _PyLocals_Kind kind) -{ - assert(PyBytes_Check(kinds)); - assert(0 <= i && i < PyBytes_GET_SIZE(kinds)); - char *ptr = PyBytes_AS_STRING(kinds); - ptr[i] = (char) kind; -} - - -struct _PyCodeConstructor { - /* metadata */ - PyObject *filename; - PyObject *name; - PyObject *qualname; - int flags; - - /* the code */ - PyObject *code; - int firstlineno; - PyObject *linetable; - - /* used by the code */ - PyObject *consts; - PyObject *names; - - /* mapping frame offsets to information */ - PyObject *localsplusnames; // Tuple of strings - PyObject *localspluskinds; // Bytes object, one byte per variable - - /* args (within varnames) */ - int argcount; - int posonlyargcount; - // XXX Replace argcount with posorkwargcount (argcount - posonlyargcount). - int kwonlyargcount; - - /* needed to create the frame */ - int stacksize; - - /* used by the eval loop */ - PyObject *exceptiontable; -}; - -// Using an "arguments struct" like this is helpful for maintainability -// in a case such as this with many parameters. It does bear a risk: -// if the struct changes and callers are not updated properly then the -// compiler will not catch problems (like a missing argument). This can -// cause hard-to-debug problems. The risk is mitigated by the use of -// check_code() in codeobject.c. However, we may decide to switch -// back to a regular function signature. Regardless, this approach -// wouldn't be appropriate if this weren't a strictly internal API. -// (See the comments in https://github.com/python/cpython/pull/26258.) -extern int _PyCode_Validate(struct _PyCodeConstructor *); -extern PyCodeObject* _PyCode_New(struct _PyCodeConstructor *); - - -/* Private API */ - -/* Getters for internal PyCodeObject data. */ -extern PyObject* _PyCode_GetVarnames(PyCodeObject *); -extern PyObject* _PyCode_GetCellvars(PyCodeObject *); -extern PyObject* _PyCode_GetFreevars(PyCodeObject *); -extern PyObject* _PyCode_GetCode(PyCodeObject *); - -/** API for initializing the line number tables. */ -extern int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds); - -/** Out of process API for initializing the location table. */ -extern void _PyLineTable_InitAddressRange( - const char *linetable, - Py_ssize_t length, - int firstlineno, - PyCodeAddressRange *range); - -/** API for traversing the line number table. */ -extern int _PyLineTable_NextAddressRange(PyCodeAddressRange *range); -extern int _PyLineTable_PreviousAddressRange(PyCodeAddressRange *range); - -// Similar to PyCode_Addr2Line(), but return -1 if the code object is invalid -// and can be called without an attached tstate. Used by dump_frame() in -// Python/traceback.c. The function uses heuristics to detect freed memory, -// it's not 100% reliable. -extern int _PyCode_SafeAddr2Line(PyCodeObject *co, int addr); - - -/** API for executors */ -extern void _PyCode_Clear_Executors(PyCodeObject *code); - - -#ifdef Py_GIL_DISABLED -// gh-115999 tracks progress on addressing this. -#define ENABLE_SPECIALIZATION 0 -// Use this to enable specialization families once they are thread-safe. All -// uses will be replaced with ENABLE_SPECIALIZATION once all families are -// thread-safe. -#define ENABLE_SPECIALIZATION_FT 1 -#else -#define ENABLE_SPECIALIZATION 1 -#define ENABLE_SPECIALIZATION_FT ENABLE_SPECIALIZATION -#endif - -/* Specialization functions */ - -extern void _Py_Specialize_LoadSuperAttr(_PyStackRef global_super, _PyStackRef cls, - _Py_CODEUNIT *instr, int load_method); -extern void _Py_Specialize_LoadAttr(_PyStackRef owner, _Py_CODEUNIT *instr, - PyObject *name); -extern void _Py_Specialize_StoreAttr(_PyStackRef owner, _Py_CODEUNIT *instr, - PyObject *name); -extern void _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins, - _Py_CODEUNIT *instr, PyObject *name); -extern void _Py_Specialize_StoreSubscr(_PyStackRef container, _PyStackRef sub, - _Py_CODEUNIT *instr); -extern void _Py_Specialize_Call(_PyStackRef callable, _Py_CODEUNIT *instr, - int nargs); -extern void _Py_Specialize_CallKw(_PyStackRef callable, _Py_CODEUNIT *instr, - int nargs); -extern void _Py_Specialize_BinaryOp(_PyStackRef lhs, _PyStackRef rhs, _Py_CODEUNIT *instr, - int oparg, _PyStackRef *locals); -extern void _Py_Specialize_CompareOp(_PyStackRef lhs, _PyStackRef rhs, - _Py_CODEUNIT *instr, int oparg); -extern void _Py_Specialize_UnpackSequence(_PyStackRef seq, _Py_CODEUNIT *instr, - int oparg); -extern void _Py_Specialize_ForIter(_PyStackRef iter, _Py_CODEUNIT *instr, int oparg); -extern void _Py_Specialize_Send(_PyStackRef receiver, _Py_CODEUNIT *instr); -extern void _Py_Specialize_ToBool(_PyStackRef value, _Py_CODEUNIT *instr); -extern void _Py_Specialize_ContainsOp(_PyStackRef value, _Py_CODEUNIT *instr); -extern void _Py_GatherStats_GetIter(_PyStackRef iterable); - -// Utility functions for reading/writing 32/64-bit values in the inline caches. -// Great care should be taken to ensure that these functions remain correct and -// performant! They should compile to just "move" instructions on all supported -// compilers and platforms. - -// We use memcpy to let the C compiler handle unaligned accesses and endianness -// issues for us. It also seems to produce better code than manual copying for -// most compilers (see https://blog.regehr.org/archives/959 for more info). - -static inline void -write_u32(uint16_t *p, uint32_t val) -{ - memcpy(p, &val, sizeof(val)); -} - -static inline void -write_u64(uint16_t *p, uint64_t val) -{ - memcpy(p, &val, sizeof(val)); -} - -static inline void -write_ptr(uint16_t *p, void *val) -{ - memcpy(p, &val, sizeof(val)); -} - -static inline uint16_t -read_u16(uint16_t *p) -{ - return *p; -} - -static inline uint32_t -read_u32(uint16_t *p) -{ - uint32_t val; - memcpy(&val, p, sizeof(val)); - return val; -} - -static inline uint64_t -read_u64(uint16_t *p) -{ - uint64_t val; - memcpy(&val, p, sizeof(val)); - return val; -} - -static inline PyObject * -read_obj(uint16_t *p) -{ - PyObject *val; - memcpy(&val, p, sizeof(val)); - return val; -} - -/* See InternalDocs/exception_handling.md for details. - */ -static inline unsigned char * -parse_varint(unsigned char *p, int *result) { - int val = p[0] & 63; - while (p[0] & 64) { - p++; - val = (val << 6) | (p[0] & 63); - } - *result = val; - return p+1; -} - -static inline int -write_varint(uint8_t *ptr, unsigned int val) -{ - int written = 1; - while (val >= 64) { - *ptr++ = 64 | (val & 63); - val >>= 6; - written++; - } - *ptr = (uint8_t)val; - return written; -} - -static inline int -write_signed_varint(uint8_t *ptr, int val) -{ - unsigned int uval; - if (val < 0) { - // (unsigned int)(-val) has an undefined behavior for INT_MIN - uval = ((0 - (unsigned int)val) << 1) | 1; - } - else { - uval = (unsigned int)val << 1; - } - return write_varint(ptr, uval); -} - -static inline int -write_location_entry_start(uint8_t *ptr, int code, int length) -{ - assert((code & 15) == code); - *ptr = 128 | (uint8_t)(code << 3) | (uint8_t)(length - 1); - return 1; -} - - -/** Counters - * The first 16-bit value in each inline cache is a counter. - * - * When counting executions until the next specialization attempt, - * exponential backoff is used to reduce the number of specialization failures. - * See pycore_backoff.h for more details. - * On a specialization failure, the backoff counter is restarted. - */ - -// A value of 1 means that we attempt to specialize the *second* time each -// instruction is executed. Executing twice is a much better indicator of -// "hotness" than executing once, but additional warmup delays only prevent -// specialization. Most types stabilize by the second execution, too: -#define ADAPTIVE_WARMUP_VALUE 1 -#define ADAPTIVE_WARMUP_BACKOFF 1 - -// A value of 52 means that we attempt to re-specialize after 53 misses (a prime -// number, useful for avoiding artifacts if every nth value is a different type -// or something). Setting the backoff to 0 means that the counter is reset to -// the same state as a warming-up instruction (value == 1, backoff == 1) after -// deoptimization. This isn't strictly necessary, but it is bit easier to reason -// about when thinking about the opcode transitions as a state machine: -#define ADAPTIVE_COOLDOWN_VALUE 52 -#define ADAPTIVE_COOLDOWN_BACKOFF 0 - -// Can't assert this in pycore_backoff.h because of header order dependencies -#if SIDE_EXIT_INITIAL_VALUE <= ADAPTIVE_COOLDOWN_VALUE -# error "Cold exit value should be larger than adaptive cooldown value" -#endif - -static inline _Py_BackoffCounter -adaptive_counter_bits(uint16_t value, uint16_t backoff) { - return make_backoff_counter(value, backoff); -} - -static inline _Py_BackoffCounter -adaptive_counter_warmup(void) { - return adaptive_counter_bits(ADAPTIVE_WARMUP_VALUE, - ADAPTIVE_WARMUP_BACKOFF); -} - -static inline _Py_BackoffCounter -adaptive_counter_cooldown(void) { - return adaptive_counter_bits(ADAPTIVE_COOLDOWN_VALUE, - ADAPTIVE_COOLDOWN_BACKOFF); -} - -static inline _Py_BackoffCounter -adaptive_counter_backoff(_Py_BackoffCounter counter) { - return restart_backoff_counter(counter); -} - -/* Specialization Extensions */ - -/* callbacks for an external specialization */ -typedef int (*binaryopguardfunc)(PyObject *lhs, PyObject *rhs); -typedef PyObject *(*binaryopactionfunc)(PyObject *lhs, PyObject *rhs); - -typedef struct { - int oparg; - binaryopguardfunc guard; - binaryopactionfunc action; -} _PyBinaryOpSpecializationDescr; - -/* Comparison bit masks. */ - -/* Note this evaluates its arguments twice each */ -#define COMPARISON_BIT(x, y) (1 << (2 * ((x) >= (y)) + ((x) <= (y)))) - -/* - * The following bits are chosen so that the value of - * COMPARSION_BIT(left, right) - * masked by the values below will be non-zero if the - * comparison is true, and zero if it is false */ - -/* This is for values that are unordered, ie. NaN, not types that are unordered, e.g. sets */ -#define COMPARISON_UNORDERED 1 - -#define COMPARISON_LESS_THAN 2 -#define COMPARISON_GREATER_THAN 4 -#define COMPARISON_EQUALS 8 - -#define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN) - -extern int _Py_Instrument(PyCodeObject *co, PyInterpreterState *interp); - -extern _Py_CODEUNIT _Py_GetBaseCodeUnit(PyCodeObject *code, int offset); - -extern int _PyInstruction_GetLength(PyCodeObject *code, int offset); - -extern PyObject *_PyInstrumentation_BranchesIterator(PyCodeObject *code); - -struct _PyCode8 _PyCode_DEF(8); - -PyAPI_DATA(const struct _PyCode8) _Py_InitCleanup; - -#ifdef Py_GIL_DISABLED - -static inline _PyCodeArray * -_PyCode_GetTLBCArray(PyCodeObject *co) -{ - return _Py_STATIC_CAST(_PyCodeArray *, - _Py_atomic_load_ptr_acquire(&co->co_tlbc)); -} - -// Return a pointer to the thread-local bytecode for the current thread, if it -// exists. -static inline _Py_CODEUNIT * -_PyCode_GetTLBCFast(PyThreadState *tstate, PyCodeObject *co) -{ - _PyCodeArray *code = _PyCode_GetTLBCArray(co); - int32_t idx = ((_PyThreadStateImpl*) tstate)->tlbc_index; - if (idx < code->size && code->entries[idx] != NULL) { - return (_Py_CODEUNIT *) code->entries[idx]; - } - return NULL; -} - -// Return a pointer to the thread-local bytecode for the current thread, -// creating it if necessary. -extern _Py_CODEUNIT *_PyCode_GetTLBC(PyCodeObject *co); - -// Reserve an index for the current thread into thread-local bytecode -// arrays -// -// Returns the reserved index or -1 on error. -extern int32_t _Py_ReserveTLBCIndex(PyInterpreterState *interp); - -// Release the current thread's index into thread-local bytecode arrays -extern void _Py_ClearTLBCIndex(_PyThreadStateImpl *tstate); - -// Free all TLBC copies not associated with live threads. -// -// Returns 0 on success or -1 on error. -extern int _Py_ClearUnusedTLBC(PyInterpreterState *interp); -#endif - - -typedef struct { - int total; - struct co_locals_counts { - int total; - struct { - int total; - int numposonly; - int numposorkw; - int numkwonly; - int varargs; - int varkwargs; - } args; - int numpure; - struct { - int total; - // numargs does not contribute to locals.total. - int numargs; - int numothers; - } cells; - struct { - int total; - int numpure; - int numcells; - } hidden; - } locals; - int numfree; // nonlocal - struct co_unbound_counts { - int total; - struct { - int total; - int numglobal; - int numbuiltin; - int numunknown; - } globals; - int numattrs; - int numunknown; - } unbound; -} _PyCode_var_counts_t; - -PyAPI_FUNC(void) _PyCode_GetVarCounts( - PyCodeObject *, - _PyCode_var_counts_t *); -PyAPI_FUNC(int) _PyCode_SetUnboundVarCounts( - PyThreadState *, - PyCodeObject *, - _PyCode_var_counts_t *, - PyObject *globalnames, - PyObject *attrnames, - PyObject *globalsns, - PyObject *builtinsns); - - -/* "Stateless" code is a function or code object which does not rely on - * external state or internal state. It may rely on arguments and - * builtins, but not globals or a closure. Thus it does not rely - * on __globals__ or __closure__, and a stateless function - * is equivalent to its code object. - * - * Stateless code also does not keep any persistent state - * of its own, so it can't have any executors, monitoring, - * instrumentation, or "extras" (i.e. co_extra). - * - * Stateless code may create nested functions, including closures. - * However, nested functions must themselves be stateless, except they - * *can* close on the enclosing locals. - * - * Stateless code may return any value, including nested functions and closures. - * - * Stateless code that takes no arguments and doesn't return anything - * may be treated like a script. - * - * We consider stateless code to be "portable" if it does not return - * any object that holds a reference to any of the code's locals. Thus - * generators and coroutines are not portable. Likewise a function - * that returns a closure is not portable. The concept of - * portability is useful in cases where the code is run - * in a different execution context than where - * the return value will be used. */ - -PyAPI_FUNC(int) _PyCode_CheckNoInternalState(PyCodeObject *, const char **); -PyAPI_FUNC(int) _PyCode_CheckNoExternalState( - PyCodeObject *, - _PyCode_var_counts_t *, - const char **); -PyAPI_FUNC(int) _PyCode_VerifyStateless( - PyThreadState *, - PyCodeObject *, - PyObject *globalnames, - PyObject *globalsns, - PyObject *builtinsns); - -PyAPI_FUNC(int) _PyCode_CheckPureFunction(PyCodeObject *, const char **); -PyAPI_FUNC(int) _PyCode_ReturnsOnlyNone(PyCodeObject *); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CODE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_codecs.h b/Python314_4_x86_Template/include/internal/pycore_codecs.h deleted file mode 100644 index 52dca1362..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_codecs.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef Py_INTERNAL_CODECS_H -#define Py_INTERNAL_CODECS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_interp_structs.h" // struct codecs_state - -/* Initialize codecs-related state for the given interpreter, including - registering the first codec search function. Must be called before any other - PyCodec-related functions, and while only one thread is active. */ -extern PyStatus _PyCodec_InitRegistry(PyInterpreterState *interp); - -/* Finalize codecs-related state for the given interpreter. No PyCodec-related - functions other than PyCodec_Unregister() may be called after this. */ -extern void _PyCodec_Fini(PyInterpreterState *interp); - -extern PyObject* _PyCodec_Lookup(const char *encoding); - -/* - * Un-register the error handling callback function registered under - * the given 'name'. Only custom error handlers can be un-registered. - * - * - Return -1 and set an exception if 'name' refers to a built-in - * error handling name (e.g., 'strict'), or if an error occurred. - * - Return 0 if no custom error handler can be found for 'name'. - * - Return 1 if the custom error handler was successfully removed. - */ -extern int _PyCodec_UnregisterError(const char *name); - -/* Text codec specific encoding and decoding API. - - Checks the encoding against a list of codecs which do not - implement a str<->bytes encoding before attempting the - operation. - - Please note that these APIs are internal and should not - be used in Python C extensions. - - XXX (ncoghlan): should we make these, or something like them, public - in Python 3.5+? - - */ -extern PyObject* _PyCodec_LookupTextEncoding( - const char *encoding, - const char *alternate_command); - -extern PyObject* _PyCodec_EncodeText( - PyObject *object, - const char *encoding, - const char *errors); - -extern PyObject* _PyCodec_DecodeText( - PyObject *object, - const char *encoding, - const char *errors); - -/* These two aren't actually text encoding specific, but _io.TextIOWrapper - * is the only current API consumer. - */ -extern PyObject* _PyCodecInfo_GetIncrementalDecoder( - PyObject *codec_info, - const char *errors); - -extern PyObject* _PyCodecInfo_GetIncrementalEncoder( - PyObject *codec_info, - const char *errors); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CODECS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_compile.h b/Python314_4_x86_Template/include/internal/pycore_compile.h deleted file mode 100644 index ed776bbb7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_compile.h +++ /dev/null @@ -1,230 +0,0 @@ -#ifndef Py_INTERNAL_COMPILE_H -#define Py_INTERNAL_COMPILE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include <stdbool.h> - -#include "pycore_ast.h" // mod_ty -#include "pycore_symtable.h" // _Py_SourceLocation -#include "pycore_instruction_sequence.h" - -/* A soft limit for stack use, to avoid excessive - * memory use for large constants, etc. - * - * The value 30 is plucked out of thin air. - * Code that could use more stack than this is - * rare, so the exact value is unimportant. - */ -#define _PY_STACK_USE_GUIDELINE 30 - -struct _arena; // Type defined in pycore_pyarena.h -struct _mod; // Type defined in pycore_ast.h - -// Export for 'test_peg_generator' shared extension -PyAPI_FUNC(PyCodeObject*) _PyAST_Compile( - struct _mod *mod, - PyObject *filename, - PyCompilerFlags *flags, - int optimize, - struct _arena *arena); - -/* AST preprocessing */ -extern int _PyCompile_AstPreprocess( - struct _mod *mod, - PyObject *filename, - PyCompilerFlags *flags, - int optimize, - struct _arena *arena, - int syntax_check_only); - -extern int _PyAST_Preprocess( - struct _mod *, - struct _arena *arena, - PyObject *filename, - int optimize, - int ff_features, - int syntax_check_only, - int enable_warnings); - - -typedef struct { - PyObject *u_name; - PyObject *u_qualname; /* dot-separated qualified name (lazy) */ - - /* The following fields are dicts that map objects to - the index of them in co_XXX. The index is used as - the argument for opcodes that refer to those collections. - */ - PyObject *u_consts; /* all constants */ - PyObject *u_names; /* all names */ - PyObject *u_varnames; /* local variables */ - PyObject *u_cellvars; /* cell variables */ - PyObject *u_freevars; /* free variables */ - PyObject *u_fasthidden; /* dict; keys are names that are fast-locals only - temporarily within an inlined comprehension. When - value is True, treat as fast-local. */ - - Py_ssize_t u_argcount; /* number of arguments for block */ - Py_ssize_t u_posonlyargcount; /* number of positional only arguments for block */ - Py_ssize_t u_kwonlyargcount; /* number of keyword only arguments for block */ - - int u_firstlineno; /* the first lineno of the block */ -} _PyCompile_CodeUnitMetadata; - -struct _PyCompiler; - -typedef enum { - COMPILE_OP_FAST, - COMPILE_OP_GLOBAL, - COMPILE_OP_DEREF, - COMPILE_OP_NAME, -} _PyCompile_optype; - -/* _PyCompile_FBlockInfo tracks the current frame block. - * - * A frame block is used to handle loops, try/except, and try/finally. - * It's called a frame block to distinguish it from a basic block in the - * compiler IR. - */ - -enum _PyCompile_FBlockType { - COMPILE_FBLOCK_WHILE_LOOP, - COMPILE_FBLOCK_FOR_LOOP, - COMPILE_FBLOCK_TRY_EXCEPT, - COMPILE_FBLOCK_FINALLY_TRY, - COMPILE_FBLOCK_FINALLY_END, - COMPILE_FBLOCK_WITH, - COMPILE_FBLOCK_ASYNC_WITH, - COMPILE_FBLOCK_HANDLER_CLEANUP, - COMPILE_FBLOCK_POP_VALUE, - COMPILE_FBLOCK_EXCEPTION_HANDLER, - COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER, - COMPILE_FBLOCK_ASYNC_COMPREHENSION_GENERATOR, - COMPILE_FBLOCK_STOP_ITERATION, -}; - -typedef struct { - enum _PyCompile_FBlockType fb_type; - _PyJumpTargetLabel fb_block; - _Py_SourceLocation fb_loc; - /* (optional) type-specific exit or cleanup block */ - _PyJumpTargetLabel fb_exit; - /* (optional) additional information required for unwinding */ - void *fb_datum; -} _PyCompile_FBlockInfo; - - -int _PyCompile_PushFBlock(struct _PyCompiler *c, _Py_SourceLocation loc, - enum _PyCompile_FBlockType t, - _PyJumpTargetLabel block_label, - _PyJumpTargetLabel exit, void *datum); -void _PyCompile_PopFBlock(struct _PyCompiler *c, enum _PyCompile_FBlockType t, - _PyJumpTargetLabel block_label); -_PyCompile_FBlockInfo *_PyCompile_TopFBlock(struct _PyCompiler *c); - -int _PyCompile_EnterScope(struct _PyCompiler *c, identifier name, int scope_type, - void *key, int lineno, PyObject *private, - _PyCompile_CodeUnitMetadata *umd); -void _PyCompile_ExitScope(struct _PyCompiler *c); -Py_ssize_t _PyCompile_AddConst(struct _PyCompiler *c, PyObject *o); -_PyInstructionSequence *_PyCompile_InstrSequence(struct _PyCompiler *c); -int _PyCompile_StartAnnotationSetup(struct _PyCompiler *c); -int _PyCompile_EndAnnotationSetup(struct _PyCompiler *c); -int _PyCompile_FutureFeatures(struct _PyCompiler *c); -void _PyCompile_DeferredAnnotations( - struct _PyCompiler *c, PyObject **deferred_annotations, - PyObject **conditional_annotation_indices); -PyObject *_PyCompile_Mangle(struct _PyCompiler *c, PyObject *name); -PyObject *_PyCompile_MaybeMangle(struct _PyCompiler *c, PyObject *name); -int _PyCompile_MaybeAddStaticAttributeToClass(struct _PyCompiler *c, expr_ty e); -int _PyCompile_GetRefType(struct _PyCompiler *c, PyObject *name); -int _PyCompile_LookupCellvar(struct _PyCompiler *c, PyObject *name); -int _PyCompile_ResolveNameop(struct _PyCompiler *c, PyObject *mangled, int scope, - _PyCompile_optype *optype, Py_ssize_t *arg); - -int _PyCompile_IsInteractiveTopLevel(struct _PyCompiler *c); -int _PyCompile_IsInInlinedComp(struct _PyCompiler *c); -int _PyCompile_ScopeType(struct _PyCompiler *c); -int _PyCompile_OptimizationLevel(struct _PyCompiler *c); -int _PyCompile_LookupArg(struct _PyCompiler *c, PyCodeObject *co, PyObject *name); -PyObject *_PyCompile_Qualname(struct _PyCompiler *c); -_PyCompile_CodeUnitMetadata *_PyCompile_Metadata(struct _PyCompiler *c); -PyObject *_PyCompile_StaticAttributesAsTuple(struct _PyCompiler *c); - -struct symtable *_PyCompile_Symtable(struct _PyCompiler *c); -PySTEntryObject *_PyCompile_SymtableEntry(struct _PyCompiler *c); - -enum { - COMPILE_SCOPE_MODULE, - COMPILE_SCOPE_CLASS, - COMPILE_SCOPE_FUNCTION, - COMPILE_SCOPE_ASYNC_FUNCTION, - COMPILE_SCOPE_LAMBDA, - COMPILE_SCOPE_COMPREHENSION, - COMPILE_SCOPE_ANNOTATIONS, -}; - - -typedef struct { - PyObject *pushed_locals; - PyObject *temp_symbols; - PyObject *fast_hidden; - _PyJumpTargetLabel cleanup; -} _PyCompile_InlinedComprehensionState; - -int _PyCompile_TweakInlinedComprehensionScopes(struct _PyCompiler *c, _Py_SourceLocation loc, - PySTEntryObject *entry, - _PyCompile_InlinedComprehensionState *state); -int _PyCompile_RevertInlinedComprehensionScopes(struct _PyCompiler *c, _Py_SourceLocation loc, - _PyCompile_InlinedComprehensionState *state); -int _PyCompile_AddDeferredAnnotation(struct _PyCompiler *c, stmt_ty s, - PyObject **conditional_annotation_index); -void _PyCompile_EnterConditionalBlock(struct _PyCompiler *c); -void _PyCompile_LeaveConditionalBlock(struct _PyCompiler *c); - -int _PyCodegen_AddReturnAtEnd(struct _PyCompiler *c, int addNone); -int _PyCodegen_EnterAnonymousScope(struct _PyCompiler* c, mod_ty mod); -int _PyCodegen_Expression(struct _PyCompiler *c, expr_ty e); -int _PyCodegen_Module(struct _PyCompiler *c, _Py_SourceLocation loc, asdl_stmt_seq *stmts, - bool is_interactive); - -int _PyCompile_ConstCacheMergeOne(PyObject *const_cache, PyObject **obj); - -PyCodeObject *_PyCompile_OptimizeAndAssemble(struct _PyCompiler *c, int addNone); - -Py_ssize_t _PyCompile_DictAddObj(PyObject *dict, PyObject *o); -int _PyCompile_Error(struct _PyCompiler *c, _Py_SourceLocation loc, const char *format, ...); -int _PyCompile_Warn(struct _PyCompiler *c, _Py_SourceLocation loc, const char *format, ...); - -// Export for '_opcode' extension module -PyAPI_FUNC(PyObject*) _PyCompile_GetUnaryIntrinsicName(int index); -PyAPI_FUNC(PyObject*) _PyCompile_GetBinaryIntrinsicName(int index); - -/* Access compiler internals for unit testing */ - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyCompile_CleanDoc(PyObject *doc); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyCompile_CodeGen( - PyObject *ast, - PyObject *filename, - PyCompilerFlags *flags, - int optimize, - int compile_mode); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyCodeObject*) -_PyCompile_Assemble(_PyCompile_CodeUnitMetadata *umd, PyObject *filename, - PyObject *instructions); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_COMPILE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_complexobject.h b/Python314_4_x86_Template/include/internal/pycore_complexobject.h deleted file mode 100644 index f595f6ab7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_complexobject.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef Py_INTERNAL_COMPLEXOBJECT_H -#define Py_INTERNAL_COMPLEXOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_unicodeobject.h" // _PyUnicodeWriter - -/* Format the object based on the format_spec, as defined in PEP 3101 - (Advanced String Formatting). */ -extern int _PyComplex_FormatAdvancedWriter( - _PyUnicodeWriter *writer, - PyObject *obj, - PyObject *format_spec, - Py_ssize_t start, - Py_ssize_t end); - -// Operations on complex numbers. -PyAPI_FUNC(Py_complex) _Py_cr_sum(Py_complex, double); -PyAPI_FUNC(Py_complex) _Py_cr_diff(Py_complex, double); -PyAPI_FUNC(Py_complex) _Py_rc_diff(double, Py_complex); -PyAPI_FUNC(Py_complex) _Py_cr_prod(Py_complex, double); -PyAPI_FUNC(Py_complex) _Py_cr_quot(Py_complex, double); -PyAPI_FUNC(Py_complex) _Py_rc_quot(double, Py_complex); - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_COMPLEXOBJECT_H diff --git a/Python314_4_x86_Template/include/internal/pycore_condvar.h b/Python314_4_x86_Template/include/internal/pycore_condvar.h deleted file mode 100644 index 55271f0a4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_condvar.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef Py_INTERNAL_CONDVAR_H -#define Py_INTERNAL_CONDVAR_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pythread.h" // _POSIX_THREADS - - -#ifdef _POSIX_THREADS -/* - * POSIX support - */ -#define Py_HAVE_CONDVAR - -#ifdef HAVE_PTHREAD_H -# include <pthread.h> // pthread_mutex_t -#endif - -#define PyMUTEX_T pthread_mutex_t -#define PyCOND_T pthread_cond_t - -#elif defined(NT_THREADS) -/* - * Windows (XP, 2003 server and later, as well as (hopefully) CE) support - * - * Emulated condition variables ones that work with XP and later, plus - * example native support on VISTA and onwards. - */ -#define Py_HAVE_CONDVAR - -/* include windows if it hasn't been done before */ -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif -#include <windows.h> // CRITICAL_SECTION - -/* options */ -/* emulated condition variables are provided for those that want - * to target Windows XP or earlier. Modify this macro to enable them. - */ -#ifndef _PY_EMULATED_WIN_CV -#define _PY_EMULATED_WIN_CV 0 /* use non-emulated condition variables */ -#endif - -/* fall back to emulation if targeting earlier than Vista */ -#if !defined NTDDI_VISTA || NTDDI_VERSION < NTDDI_VISTA -#undef _PY_EMULATED_WIN_CV -#define _PY_EMULATED_WIN_CV 1 -#endif - -#if _PY_EMULATED_WIN_CV - -typedef CRITICAL_SECTION PyMUTEX_T; - -/* The ConditionVariable object. From XP onwards it is easily emulated - with a Semaphore. - Semaphores are available on Windows XP (2003 server) and later. - We use a Semaphore rather than an auto-reset event, because although - an auto-reset event might appear to solve the lost-wakeup bug (race - condition between releasing the outer lock and waiting) because it - maintains state even though a wait hasn't happened, there is still - a lost wakeup problem if more than one thread are interrupted in the - critical place. A semaphore solves that, because its state is - counted, not Boolean. - Because it is ok to signal a condition variable with no one - waiting, we need to keep track of the number of - waiting threads. Otherwise, the semaphore's state could rise - without bound. This also helps reduce the number of "spurious wakeups" - that would otherwise happen. - */ - -typedef struct _PyCOND_T -{ - HANDLE sem; - int waiting; /* to allow PyCOND_SIGNAL to be a no-op */ -} PyCOND_T; - -#else /* !_PY_EMULATED_WIN_CV */ - -/* Use native Windows primitives if build target is Vista or higher */ - -/* SRWLOCK is faster and better than CriticalSection */ -typedef SRWLOCK PyMUTEX_T; - -typedef CONDITION_VARIABLE PyCOND_T; - -#endif /* _PY_EMULATED_WIN_CV */ - -#endif /* _POSIX_THREADS, NT_THREADS */ - -#endif /* Py_INTERNAL_CONDVAR_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_context.h b/Python314_4_x86_Template/include/internal/pycore_context.h deleted file mode 100644 index c77ef7910..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_context.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef Py_INTERNAL_CONTEXT_H -#define Py_INTERNAL_CONTEXT_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" - -extern PyTypeObject _PyContextTokenMissing_Type; - -/* runtime lifecycle */ - -PyStatus _PyContext_Init(PyInterpreterState *); - - -/* other API */ - -typedef struct { - PyObject_HEAD -} _PyContextTokenMissing; - -struct _pycontextobject { - PyObject_HEAD - PyContext *ctx_prev; - PyHamtObject *ctx_vars; - PyObject *ctx_weakreflist; - int ctx_entered; -}; - - -struct _pycontextvarobject { - PyObject_HEAD - PyObject *var_name; - PyObject *var_default; -#ifndef Py_GIL_DISABLED - PyObject *var_cached; - uint64_t var_cached_tsid; - uint64_t var_cached_tsver; -#endif - Py_hash_t var_hash; -}; - - -struct _pycontexttokenobject { - PyObject_HEAD - PyContext *tok_ctx; - PyContextVar *tok_var; - PyObject *tok_oldval; - int tok_used; -}; - - -// _testinternalcapi.hamt() used by tests. -// Export for '_testcapi' shared extension -PyAPI_FUNC(PyObject*) _PyContext_NewHamtForTests(void); - - -#endif /* !Py_INTERNAL_CONTEXT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_critical_section.h b/Python314_4_x86_Template/include/internal/pycore_critical_section.h deleted file mode 100644 index 2b49b9f00..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_critical_section.h +++ /dev/null @@ -1,237 +0,0 @@ -#ifndef Py_INTERNAL_CRITICAL_SECTION_H -#define Py_INTERNAL_CRITICAL_SECTION_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_lock.h" // PyMutex_LockFast() -#include "pycore_pystate.h" // _PyThreadState_GET() -#include <stdint.h> - -#ifdef __cplusplus -extern "C" { -#endif - -// Tagged pointers to critical sections use the two least significant bits to -// mark if the pointed-to critical section is inactive and whether it is a -// PyCriticalSection2 object. -#define _Py_CRITICAL_SECTION_INACTIVE 0x1 -#define _Py_CRITICAL_SECTION_TWO_MUTEXES 0x2 -#define _Py_CRITICAL_SECTION_MASK 0x3 - -#ifdef Py_GIL_DISABLED -// Specialized version of critical section locking to safely use -// PySequence_Fast APIs without the GIL. For performance, the argument *to* -// PySequence_Fast() is provided to the macro, not the *result* of -// PySequence_Fast(), which would require an extra test to determine if the -// lock must be acquired. -# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original) \ - { \ - PyObject *_orig_seq = _PyObject_CAST(original); \ - const bool _should_lock_cs = PyList_CheckExact(_orig_seq); \ - PyCriticalSection _cs; \ - if (_should_lock_cs) { \ - _PyCriticalSection_Begin(&_cs, _orig_seq); \ - } - -# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST() \ - if (_should_lock_cs) { \ - PyCriticalSection_End(&_cs); \ - } \ - } - -// Asserts that the mutex is locked. The mutex must be held by the -// top-most critical section otherwise there's the possibility -// that the mutex would be swalled out in some code paths. -#define _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(mutex) \ - _PyCriticalSection_AssertHeld(mutex) - -// Asserts that the mutex for the given object is locked. The mutex must -// be held by the top-most critical section otherwise there's the -// possibility that the mutex would be swalled out in some code paths. -#ifdef Py_DEBUG - -# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op) \ - if (Py_REFCNT(op) != 1) { \ - _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(&_PyObject_CAST(op)->ob_mutex); \ - } - -#else /* Py_DEBUG */ - -# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op) - -#endif /* Py_DEBUG */ - -#else /* !Py_GIL_DISABLED */ -// The critical section APIs are no-ops with the GIL. -# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original) { -# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST() } -# define _Py_CRITICAL_SECTION_ASSERT_MUTEX_LOCKED(mutex) -# define _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op) -#endif /* !Py_GIL_DISABLED */ - -// Resumes the top-most critical section. -PyAPI_FUNC(void) -_PyCriticalSection_Resume(PyThreadState *tstate); - -// (private) slow path for locking the mutex -PyAPI_FUNC(void) -_PyCriticalSection_BeginSlow(PyCriticalSection *c, PyMutex *m); - -PyAPI_FUNC(void) -_PyCriticalSection2_BeginSlow(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2, - int is_m1_locked); - -PyAPI_FUNC(void) -_PyCriticalSection_SuspendAll(PyThreadState *tstate); - -#ifdef Py_GIL_DISABLED - -static inline int -_PyCriticalSection_IsActive(uintptr_t tag) -{ - return tag != 0 && (tag & _Py_CRITICAL_SECTION_INACTIVE) == 0; -} - -static inline void -_PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *m) -{ - if (PyMutex_LockFast(m)) { - PyThreadState *tstate = _PyThreadState_GET(); - c->_cs_mutex = m; - c->_cs_prev = tstate->critical_section; - tstate->critical_section = (uintptr_t)c; - } - else { - _PyCriticalSection_BeginSlow(c, m); - } -} -#define PyCriticalSection_BeginMutex _PyCriticalSection_BeginMutex - -static inline void -_PyCriticalSection_Begin(PyCriticalSection *c, PyObject *op) -{ - _PyCriticalSection_BeginMutex(c, &op->ob_mutex); -} -#define PyCriticalSection_Begin _PyCriticalSection_Begin - -// Removes the top-most critical section from the thread's stack of critical -// sections. If the new top-most critical section is inactive, then it is -// resumed. -static inline void -_PyCriticalSection_Pop(PyCriticalSection *c) -{ - PyThreadState *tstate = _PyThreadState_GET(); - uintptr_t prev = c->_cs_prev; - tstate->critical_section = prev; - - if ((prev & _Py_CRITICAL_SECTION_INACTIVE) != 0) { - _PyCriticalSection_Resume(tstate); - } -} - -static inline void -_PyCriticalSection_End(PyCriticalSection *c) -{ - // If the mutex is NULL, we used the fast path in - // _PyCriticalSection_BeginSlow for locks already held in the top-most - // critical section, and we shouldn't unlock or pop this critical section. - if (c->_cs_mutex == NULL) { - return; - } - PyMutex_Unlock(c->_cs_mutex); - _PyCriticalSection_Pop(c); -} -#define PyCriticalSection_End _PyCriticalSection_End - -static inline void -_PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *m1, PyMutex *m2) -{ - if (m1 == m2) { - // If the two mutex arguments are the same, treat this as a critical - // section with a single mutex. - c->_cs_mutex2 = NULL; - _PyCriticalSection_BeginMutex(&c->_cs_base, m1); - return; - } - - if ((uintptr_t)m2 < (uintptr_t)m1) { - // Sort the mutexes so that the lower address is locked first. - // The exact order does not matter, but we need to acquire the mutexes - // in a consistent order to avoid lock ordering deadlocks. - PyMutex *tmp = m1; - m1 = m2; - m2 = tmp; - } - - if (PyMutex_LockFast(m1)) { - if (PyMutex_LockFast(m2)) { - PyThreadState *tstate = _PyThreadState_GET(); - c->_cs_base._cs_mutex = m1; - c->_cs_mutex2 = m2; - c->_cs_base._cs_prev = tstate->critical_section; - - uintptr_t p = (uintptr_t)c | _Py_CRITICAL_SECTION_TWO_MUTEXES; - tstate->critical_section = p; - } - else { - _PyCriticalSection2_BeginSlow(c, m1, m2, 1); - } - } - else { - _PyCriticalSection2_BeginSlow(c, m1, m2, 0); - } -} -#define PyCriticalSection2_BeginMutex _PyCriticalSection2_BeginMutex - -static inline void -_PyCriticalSection2_Begin(PyCriticalSection2 *c, PyObject *a, PyObject *b) -{ - _PyCriticalSection2_BeginMutex(c, &a->ob_mutex, &b->ob_mutex); -} -#define PyCriticalSection2_Begin _PyCriticalSection2_Begin - -static inline void -_PyCriticalSection2_End(PyCriticalSection2 *c) -{ - // if mutex1 is NULL, we used the fast path in - // _PyCriticalSection_BeginSlow for mutexes that are already held, - // which should only happen when mutex1 and mutex2 were the same mutex, - // and mutex2 should also be NULL. - if (c->_cs_base._cs_mutex == NULL) { - assert(c->_cs_mutex2 == NULL); - return; - } - if (c->_cs_mutex2) { - PyMutex_Unlock(c->_cs_mutex2); - } - PyMutex_Unlock(c->_cs_base._cs_mutex); - _PyCriticalSection_Pop(&c->_cs_base); -} -#define PyCriticalSection2_End _PyCriticalSection2_End - -static inline void -_PyCriticalSection_AssertHeld(PyMutex *mutex) -{ -#ifdef Py_DEBUG - PyThreadState *tstate = _PyThreadState_GET(); - uintptr_t prev = tstate->critical_section; - if (prev & _Py_CRITICAL_SECTION_TWO_MUTEXES) { - PyCriticalSection2 *cs = (PyCriticalSection2 *)(prev & ~_Py_CRITICAL_SECTION_MASK); - assert(cs != NULL && (cs->_cs_base._cs_mutex == mutex || cs->_cs_mutex2 == mutex)); - } - else { - PyCriticalSection *cs = (PyCriticalSection *)(tstate->critical_section & ~_Py_CRITICAL_SECTION_MASK); - assert(cs != NULL && cs->_cs_mutex == mutex); - } - -#endif -} - -#endif /* Py_GIL_DISABLED */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CRITICAL_SECTION_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_crossinterp.h b/Python314_4_x86_Template/include/internal/pycore_crossinterp.h deleted file mode 100644 index 81faffac1..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_crossinterp.h +++ /dev/null @@ -1,406 +0,0 @@ -#ifndef Py_INTERNAL_CROSSINTERP_H -#define Py_INTERNAL_CROSSINTERP_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pyerrors.h" - - -/**************/ -/* exceptions */ -/**************/ - -PyAPI_DATA(PyObject *) PyExc_InterpreterError; -PyAPI_DATA(PyObject *) PyExc_InterpreterNotFoundError; - - -/***************************/ -/* cross-interpreter calls */ -/***************************/ - -typedef int (*_Py_simple_func)(void *); -extern int _Py_CallInInterpreter( - PyInterpreterState *interp, - _Py_simple_func func, - void *arg); -extern int _Py_CallInInterpreterAndRawFree( - PyInterpreterState *interp, - _Py_simple_func func, - void *arg); - - -/**************************/ -/* cross-interpreter data */ -/**************************/ - -typedef struct _xidata _PyXIData_t; -typedef PyObject *(*xid_newobjfunc)(_PyXIData_t *); -typedef void (*xid_freefunc)(void *); - -// _PyXIData_t is similar to Py_buffer as an effectively -// opaque struct that holds data outside the object machinery. This -// is necessary to pass safely between interpreters in the same process. -struct _xidata { - // data is the cross-interpreter-safe derivation of a Python object - // (see _PyObject_GetXIData). It will be NULL if the - // new_object func (below) encodes the data. - void *data; - // obj is the Python object from which the data was derived. This - // is non-NULL only if the data remains bound to the object in some - // way, such that the object must be "released" (via a decref) when - // the data is released. In that case the code that sets the field, - // likely a registered "xidatafunc", is responsible for - // ensuring it owns the reference (i.e. incref). - PyObject *obj; - // interpid is the ID of the owning interpreter of the original - // object. It corresponds to the active interpreter when - // _PyObject_GetXIData() was called. This should only - // be set by the cross-interpreter machinery. - // - // We use the ID rather than the PyInterpreterState to avoid issues - // with deleted interpreters. Note that IDs are never re-used, so - // each one will always correspond to a specific interpreter - // (whether still alive or not). - int64_t interpid; - // new_object is a function that returns a new object in the current - // interpreter given the data. The resulting object (a new - // reference) will be equivalent to the original object. This field - // is required. - xid_newobjfunc new_object; - // free is called when the data is released. If it is NULL then - // nothing will be done to free the data. For some types this is - // okay (e.g. bytes) and for those types this field should be set - // to NULL. However, for most the data was allocated just for - // cross-interpreter use, so it must be freed when - // _PyXIData_Release is called or the memory will - // leak. In that case, at the very least this field should be set - // to PyMem_RawFree (the default if not explicitly set to NULL). - // The call will happen with the original interpreter activated. - xid_freefunc free; -}; - -PyAPI_FUNC(_PyXIData_t *) _PyXIData_New(void); -PyAPI_FUNC(void) _PyXIData_Free(_PyXIData_t *data); - -#define _PyXIData_DATA(DATA) ((DATA)->data) -#define _PyXIData_OBJ(DATA) ((DATA)->obj) -#define _PyXIData_INTERPID(DATA) ((DATA)->interpid) -// Users should not need getters for "new_object" or "free". - - -/* defining cross-interpreter data */ - -PyAPI_FUNC(void) _PyXIData_Init( - _PyXIData_t *data, - PyInterpreterState *interp, void *shared, PyObject *obj, - xid_newobjfunc new_object); -PyAPI_FUNC(int) _PyXIData_InitWithSize( - _PyXIData_t *, - PyInterpreterState *interp, const size_t, PyObject *, - xid_newobjfunc); -PyAPI_FUNC(void) _PyXIData_Clear(PyInterpreterState *, _PyXIData_t *); - -// Normally the Init* functions are sufficient. The only time -// additional initialization might be needed is to set the "free" func, -// though that should be infrequent. -#define _PyXIData_SET_FREE(DATA, FUNC) \ - do { \ - (DATA)->free = (FUNC); \ - } while (0) -#define _PyXIData_CHECK_FREE(DATA, FUNC) \ - ((DATA)->free == (FUNC)) -// Additionally, some shareable types are essentially light wrappers -// around other shareable types. The xidatafunc of the wrapper -// can often be implemented by calling the wrapped object's -// xidatafunc and then changing the "new_object" function. -// We have _PyXIData_SET_NEW_OBJECT() here for that, -// but might be better to have a function like -// _PyXIData_AdaptToWrapper() instead. -#define _PyXIData_SET_NEW_OBJECT(DATA, FUNC) \ - do { \ - (DATA)->new_object = (FUNC); \ - } while (0) -#define _PyXIData_CHECK_NEW_OBJECT(DATA, FUNC) \ - ((DATA)->new_object == (FUNC)) - - -/* getting cross-interpreter data */ - -typedef int xidata_fallback_t; -#define _PyXIDATA_XIDATA_ONLY (0) -#define _PyXIDATA_FULL_FALLBACK (1) - -// Technically, we don't need two different function types; -// we could go with just the fallback one. However, only container -// types like tuple need it, so always having the extra arg would be -// a bit unfortunate. It's also nice to be able to clearly distinguish -// between types that might call _PyObject_GetXIData() and those that won't. -// -typedef int (*xidatafunc)(PyThreadState *, PyObject *, _PyXIData_t *); -typedef int (*xidatafbfunc)( - PyThreadState *, PyObject *, xidata_fallback_t, _PyXIData_t *); -typedef struct { - xidatafunc basic; - xidatafbfunc fallback; -} _PyXIData_getdata_t; - -PyAPI_FUNC(PyObject *) _PyXIData_GetNotShareableErrorType(PyThreadState *); -PyAPI_FUNC(void) _PyXIData_SetNotShareableError(PyThreadState *, const char *); -PyAPI_FUNC(void) _PyXIData_FormatNotShareableError( - PyThreadState *, - const char *, - ...); - -PyAPI_FUNC(_PyXIData_getdata_t) _PyXIData_Lookup( - PyThreadState *, - PyObject *); -PyAPI_FUNC(int) _PyObject_CheckXIData( - PyThreadState *, - PyObject *); - -PyAPI_FUNC(int) _PyObject_GetXIDataNoFallback( - PyThreadState *, - PyObject *, - _PyXIData_t *); -PyAPI_FUNC(int) _PyObject_GetXIData( - PyThreadState *, - PyObject *, - xidata_fallback_t, - _PyXIData_t *); - -// _PyObject_GetXIData() for bytes -typedef struct { - const char *bytes; - Py_ssize_t len; -} _PyBytes_data_t; -PyAPI_FUNC(int) _PyBytes_GetData(PyObject *, _PyBytes_data_t *); -PyAPI_FUNC(PyObject *) _PyBytes_FromData(_PyBytes_data_t *); -PyAPI_FUNC(PyObject *) _PyBytes_FromXIData(_PyXIData_t *); -PyAPI_FUNC(int) _PyBytes_GetXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); -PyAPI_FUNC(_PyBytes_data_t *) _PyBytes_GetXIDataWrapped( - PyThreadState *, - PyObject *, - size_t, - xid_newobjfunc, - _PyXIData_t *); - -// _PyObject_GetXIData() for pickle -PyAPI_DATA(PyObject *) _PyPickle_LoadFromXIData(_PyXIData_t *); -PyAPI_FUNC(int) _PyPickle_GetXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); - -// _PyObject_GetXIData() for marshal -PyAPI_FUNC(PyObject *) _PyMarshal_ReadObjectFromXIData(_PyXIData_t *); -PyAPI_FUNC(int) _PyMarshal_GetXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); - -// _PyObject_GetXIData() for code objects -PyAPI_FUNC(PyObject *) _PyCode_FromXIData(_PyXIData_t *); -PyAPI_FUNC(int) _PyCode_GetXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); -PyAPI_FUNC(int) _PyCode_GetScriptXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); -PyAPI_FUNC(int) _PyCode_GetPureScriptXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); - -// _PyObject_GetXIData() for functions -PyAPI_FUNC(PyObject *) _PyFunction_FromXIData(_PyXIData_t *); -PyAPI_FUNC(int) _PyFunction_GetXIData( - PyThreadState *, - PyObject *, - _PyXIData_t *); - - -/* using cross-interpreter data */ - -PyAPI_FUNC(PyObject *) _PyXIData_NewObject(_PyXIData_t *); -PyAPI_FUNC(int) _PyXIData_Release(_PyXIData_t *); -PyAPI_FUNC(int) _PyXIData_ReleaseAndRawFree(_PyXIData_t *); - - -/* cross-interpreter data registry */ - -#define Py_CORE_CROSSINTERP_DATA_REGISTRY_H -#include "pycore_crossinterp_data_registry.h" -#undef Py_CORE_CROSSINTERP_DATA_REGISTRY_H - - -/*****************************/ -/* runtime state & lifecycle */ -/*****************************/ - -typedef struct _xid_lookup_state _PyXIData_lookup_t; - -typedef struct { - // builtin types - _PyXIData_lookup_t data_lookup; -} _PyXI_global_state_t; - -typedef struct { - // heap types - _PyXIData_lookup_t data_lookup; - - struct xi_exceptions { - // static types - PyObject *PyExc_InterpreterError; - PyObject *PyExc_InterpreterNotFoundError; - // heap types - PyObject *PyExc_NotShareableError; - } exceptions; -} _PyXI_state_t; - -#define _PyXI_GET_GLOBAL_STATE(interp) (&(interp)->runtime->xi) -#define _PyXI_GET_STATE(interp) (&(interp)->xi) - -#ifndef Py_BUILD_CORE_MODULE -extern PyStatus _PyXI_Init(PyInterpreterState *interp); -extern void _PyXI_Fini(PyInterpreterState *interp); -extern PyStatus _PyXI_InitTypes(PyInterpreterState *interp); -extern void _PyXI_FiniTypes(PyInterpreterState *interp); -#endif // Py_BUILD_CORE_MODULE - -int _Py_xi_global_state_init(_PyXI_global_state_t *); -void _Py_xi_global_state_fini(_PyXI_global_state_t *); -int _Py_xi_state_init(_PyXI_state_t *, PyInterpreterState *); -void _Py_xi_state_fini(_PyXI_state_t *, PyInterpreterState *); - - -/***************************/ -/* short-term data sharing */ -/***************************/ - -// Ultimately we'd like to preserve enough information about the -// exception and traceback that we could re-constitute (or at least -// simulate, a la traceback.TracebackException), and even chain, a copy -// of the exception in the calling interpreter. - -typedef struct _excinfo { - struct _excinfo_type { - PyTypeObject *builtin; - const char *name; - const char *qualname; - const char *module; - } type; - const char *msg; - const char *errdisplay; -} _PyXI_excinfo; - -PyAPI_FUNC(_PyXI_excinfo *) _PyXI_NewExcInfo(PyObject *exc); -PyAPI_FUNC(void) _PyXI_FreeExcInfo(_PyXI_excinfo *info); -PyAPI_FUNC(PyObject *) _PyXI_FormatExcInfo(_PyXI_excinfo *info); -PyAPI_FUNC(PyObject *) _PyXI_ExcInfoAsObject(_PyXI_excinfo *info); - - -typedef enum error_code { - _PyXI_ERR_NO_ERROR = 0, - _PyXI_ERR_UNCAUGHT_EXCEPTION = -1, - _PyXI_ERR_OTHER = -2, - _PyXI_ERR_NO_MEMORY = -3, - _PyXI_ERR_ALREADY_RUNNING = -4, - _PyXI_ERR_MAIN_NS_FAILURE = -5, - _PyXI_ERR_APPLY_NS_FAILURE = -6, - _PyXI_ERR_PRESERVE_FAILURE = -7, - _PyXI_ERR_EXC_PROPAGATION_FAILURE = -8, - _PyXI_ERR_NOT_SHAREABLE = -9, -} _PyXI_errcode; - -typedef struct xi_failure _PyXI_failure; - -PyAPI_FUNC(_PyXI_failure *) _PyXI_NewFailure(void); -PyAPI_FUNC(void) _PyXI_FreeFailure(_PyXI_failure *); -PyAPI_FUNC(_PyXI_errcode) _PyXI_GetFailureCode(_PyXI_failure *); -PyAPI_FUNC(int) _PyXI_InitFailure(_PyXI_failure *, _PyXI_errcode, PyObject *); -PyAPI_FUNC(void) _PyXI_InitFailureUTF8( - _PyXI_failure *, - _PyXI_errcode, - const char *); - -PyAPI_FUNC(int) _PyXI_UnwrapNotShareableError( - PyThreadState *, - _PyXI_failure *); - - -// A cross-interpreter session involves entering an interpreter -// with _PyXI_Enter(), doing some work with it, and finally exiting -// that interpreter with _PyXI_Exit(). -// -// At the boundaries of the session, both entering and exiting, -// data may be exchanged between the previous interpreter and the -// target one in a thread-safe way that does not violate the -// isolation between interpreters. This includes setting objects -// in the target's __main__ module on the way in, and capturing -// uncaught exceptions on the way out. -typedef struct xi_session _PyXI_session; - -PyAPI_FUNC(_PyXI_session *) _PyXI_NewSession(void); -PyAPI_FUNC(void) _PyXI_FreeSession(_PyXI_session *); - -typedef struct { - PyObject *preserved; - PyObject *excinfo; - _PyXI_errcode errcode; -} _PyXI_session_result; -PyAPI_FUNC(void) _PyXI_ClearResult(_PyXI_session_result *); - -PyAPI_FUNC(int) _PyXI_Enter( - _PyXI_session *session, - PyInterpreterState *interp, - PyObject *nsupdates, - _PyXI_session_result *); -PyAPI_FUNC(int) _PyXI_Exit( - _PyXI_session *, - _PyXI_failure *, - _PyXI_session_result *); - -PyAPI_FUNC(PyObject *) _PyXI_GetMainNamespace( - _PyXI_session *, - _PyXI_failure *); - -PyAPI_FUNC(int) _PyXI_Preserve( - _PyXI_session *, - const char *, - PyObject *, - _PyXI_failure *); -PyAPI_FUNC(PyObject *) _PyXI_GetPreserved( - _PyXI_session_result *, - const char *); - - -/*************/ -/* other API */ -/*************/ - -// Export for _testinternalcapi shared extension -PyAPI_FUNC(PyInterpreterState *) _PyXI_NewInterpreter( - PyInterpreterConfig *config, - long *maybe_whence, - PyThreadState **p_tstate, - PyThreadState **p_save_tstate); -PyAPI_FUNC(void) _PyXI_EndInterpreter( - PyInterpreterState *interp, - PyThreadState *tstate, - PyThreadState **p_save_tstate); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CROSSINTERP_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_crossinterp_data_registry.h b/Python314_4_x86_Template/include/internal/pycore_crossinterp_data_registry.h deleted file mode 100644 index fbb4cad5c..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_crossinterp_data_registry.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef Py_CORE_CROSSINTERP_DATA_REGISTRY_H -# error "this header must not be included directly" -#endif - - -// For now we use a global registry of shareable classes. An -// alternative would be to add a tp_* slot for a class's -// xidatafunc. It would be simpler and more efficient. - -struct _xid_regitem; - -typedef struct _xid_regitem { - struct _xid_regitem *prev; - struct _xid_regitem *next; - /* This can be a dangling pointer, but only if weakref is set. */ - PyTypeObject *cls; - /* This is NULL for builtin types. */ - PyObject *weakref; - size_t refcount; - _PyXIData_getdata_t getdata; -} _PyXIData_regitem_t; - -typedef struct { - int global; /* builtin types or heap types */ - int initialized; - PyMutex mutex; - _PyXIData_regitem_t *head; -} _PyXIData_registry_t; - -PyAPI_FUNC(int) _PyXIData_RegisterClass( - PyThreadState *, - PyTypeObject *, - _PyXIData_getdata_t); -PyAPI_FUNC(int) _PyXIData_UnregisterClass( - PyThreadState *, - PyTypeObject *); - -struct _xid_lookup_state { - // XXX Remove this field once we have a tp_* slot. - _PyXIData_registry_t registry; -}; diff --git a/Python314_4_x86_Template/include/internal/pycore_debug_offsets.h b/Python314_4_x86_Template/include/internal/pycore_debug_offsets.h deleted file mode 100644 index 8e7cd16ac..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_debug_offsets.h +++ /dev/null @@ -1,379 +0,0 @@ -#ifndef Py_INTERNAL_DEBUG_OFFSETS_H -#define Py_INTERNAL_DEBUG_OFFSETS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -#define _Py_Debug_Cookie "xdebugpy" - -#if defined(__APPLE__) -# include <mach-o/loader.h> -#endif - -// Macros to burn global values in custom sections so out-of-process -// profilers can locate them easily. -#define GENERATE_DEBUG_SECTION(name, declaration) \ - _GENERATE_DEBUG_SECTION_WINDOWS(name) \ - _GENERATE_DEBUG_SECTION_APPLE(name) \ - declaration \ - _GENERATE_DEBUG_SECTION_LINUX(name) - -// Please note that section names are truncated to eight bytes -// on Windows! -#if defined(MS_WINDOWS) -#define _GENERATE_DEBUG_SECTION_WINDOWS(name) \ - _Pragma(Py_STRINGIFY(section(Py_STRINGIFY(name), read, write))) \ - __declspec(allocate(Py_STRINGIFY(name))) -#else -#define _GENERATE_DEBUG_SECTION_WINDOWS(name) -#endif - -#if defined(__APPLE__) -#define _GENERATE_DEBUG_SECTION_APPLE(name) \ - __attribute__((section(SEG_DATA "," Py_STRINGIFY(name)))) \ - __attribute__((used)) -#else -#define _GENERATE_DEBUG_SECTION_APPLE(name) -#endif - -#if defined(__linux__) && (defined(__GNUC__) || defined(__clang__)) -#define _GENERATE_DEBUG_SECTION_LINUX(name) \ - __attribute__((section("." Py_STRINGIFY(name)))) \ - __attribute__((used)) -#else -#define _GENERATE_DEBUG_SECTION_LINUX(name) -#endif - -#ifdef Py_GIL_DISABLED -# define _Py_Debug_gilruntimestate_enabled offsetof(struct _gil_runtime_state, enabled) -# define _Py_Debug_Free_Threaded 1 -# define _Py_Debug_code_object_co_tlbc offsetof(PyCodeObject, co_tlbc) -# define _Py_Debug_interpreter_frame_tlbc_index offsetof(_PyInterpreterFrame, tlbc_index) -# define _Py_Debug_interpreter_state_tlbc_generation offsetof(PyInterpreterState, tlbc_indices.tlbc_generation) -#else -# define _Py_Debug_gilruntimestate_enabled 0 -# define _Py_Debug_Free_Threaded 0 -# define _Py_Debug_code_object_co_tlbc 0 -# define _Py_Debug_interpreter_frame_tlbc_index 0 -# define _Py_Debug_interpreter_state_tlbc_generation 0 -#endif - - -typedef struct _Py_DebugOffsets { - char cookie[8] _Py_NONSTRING; - uint64_t version; - uint64_t free_threaded; - // Runtime state offset; - struct _runtime_state { - uint64_t size; - uint64_t finalizing; - uint64_t interpreters_head; - } runtime_state; - - // Interpreter state offset; - struct _interpreter_state { - uint64_t size; - uint64_t id; - uint64_t next; - uint64_t threads_head; - uint64_t threads_main; - uint64_t gc; - uint64_t imports_modules; - uint64_t sysdict; - uint64_t builtins; - uint64_t ceval_gil; - uint64_t gil_runtime_state; - uint64_t gil_runtime_state_enabled; - uint64_t gil_runtime_state_locked; - uint64_t gil_runtime_state_holder; - uint64_t code_object_generation; - uint64_t tlbc_generation; - } interpreter_state; - - // Thread state offset; - struct _thread_state{ - uint64_t size; - uint64_t prev; - uint64_t next; - uint64_t interp; - uint64_t current_frame; - uint64_t thread_id; - uint64_t native_thread_id; - uint64_t datastack_chunk; - uint64_t status; - } thread_state; - - // InterpreterFrame offset; - struct _interpreter_frame { - uint64_t size; - uint64_t previous; - uint64_t executable; - uint64_t instr_ptr; - uint64_t localsplus; - uint64_t owner; - uint64_t stackpointer; - uint64_t tlbc_index; - } interpreter_frame; - - // Code object offset; - struct _code_object { - uint64_t size; - uint64_t filename; - uint64_t name; - uint64_t qualname; - uint64_t linetable; - uint64_t firstlineno; - uint64_t argcount; - uint64_t localsplusnames; - uint64_t localspluskinds; - uint64_t co_code_adaptive; - uint64_t co_tlbc; - } code_object; - - // PyObject offset; - struct _pyobject { - uint64_t size; - uint64_t ob_type; - } pyobject; - - // PyTypeObject object offset; - struct _type_object { - uint64_t size; - uint64_t tp_name; - uint64_t tp_repr; - uint64_t tp_flags; - } type_object; - - // PyTuple object offset; - struct _tuple_object { - uint64_t size; - uint64_t ob_item; - uint64_t ob_size; - } tuple_object; - - // PyList object offset; - struct _list_object { - uint64_t size; - uint64_t ob_item; - uint64_t ob_size; - } list_object; - - // PySet object offset; - struct _set_object { - uint64_t size; - uint64_t used; - uint64_t table; - uint64_t mask; - } set_object; - - // PyDict object offset; - struct _dict_object { - uint64_t size; - uint64_t ma_keys; - uint64_t ma_values; - } dict_object; - - // PyFloat object offset; - struct _float_object { - uint64_t size; - uint64_t ob_fval; - } float_object; - - // PyLong object offset; - struct _long_object { - uint64_t size; - uint64_t lv_tag; - uint64_t ob_digit; - } long_object; - - // PyBytes object offset; - struct _bytes_object { - uint64_t size; - uint64_t ob_size; - uint64_t ob_sval; - } bytes_object; - - // Unicode object offset; - struct _unicode_object { - uint64_t size; - uint64_t state; - uint64_t length; - uint64_t asciiobject_size; - } unicode_object; - - // GC runtime state offset; - struct _gc { - uint64_t size; - uint64_t collecting; - } gc; - - // Generator object offset; - struct _gen_object { - uint64_t size; - uint64_t gi_name; - uint64_t gi_iframe; - uint64_t gi_frame_state; - } gen_object; - - struct _llist_node { - uint64_t next; - uint64_t prev; - } llist_node; - - struct _debugger_support { - uint64_t eval_breaker; - uint64_t remote_debugger_support; - uint64_t remote_debugging_enabled; - uint64_t debugger_pending_call; - uint64_t debugger_script_path; - uint64_t debugger_script_path_size; - } debugger_support; -} _Py_DebugOffsets; - - -#define _Py_DebugOffsets_INIT(debug_cookie) { \ - .cookie = debug_cookie, \ - .version = PY_VERSION_HEX, \ - .free_threaded = _Py_Debug_Free_Threaded, \ - .runtime_state = { \ - .size = sizeof(_PyRuntimeState), \ - .finalizing = offsetof(_PyRuntimeState, _finalizing), \ - .interpreters_head = offsetof(_PyRuntimeState, interpreters.head), \ - }, \ - .interpreter_state = { \ - .size = sizeof(PyInterpreterState), \ - .id = offsetof(PyInterpreterState, id), \ - .next = offsetof(PyInterpreterState, next), \ - .threads_head = offsetof(PyInterpreterState, threads.head), \ - .threads_main = offsetof(PyInterpreterState, threads.main), \ - .gc = offsetof(PyInterpreterState, gc), \ - .imports_modules = offsetof(PyInterpreterState, imports.modules), \ - .sysdict = offsetof(PyInterpreterState, sysdict), \ - .builtins = offsetof(PyInterpreterState, builtins), \ - .ceval_gil = offsetof(PyInterpreterState, ceval.gil), \ - .gil_runtime_state = offsetof(PyInterpreterState, _gil), \ - .gil_runtime_state_enabled = _Py_Debug_gilruntimestate_enabled, \ - .gil_runtime_state_locked = offsetof(PyInterpreterState, _gil.locked), \ - .gil_runtime_state_holder = offsetof(PyInterpreterState, _gil.last_holder), \ - .code_object_generation = offsetof(PyInterpreterState, _code_object_generation), \ - .tlbc_generation = _Py_Debug_interpreter_state_tlbc_generation, \ - }, \ - .thread_state = { \ - .size = sizeof(PyThreadState), \ - .prev = offsetof(PyThreadState, prev), \ - .next = offsetof(PyThreadState, next), \ - .interp = offsetof(PyThreadState, interp), \ - .current_frame = offsetof(PyThreadState, current_frame), \ - .thread_id = offsetof(PyThreadState, thread_id), \ - .native_thread_id = offsetof(PyThreadState, native_thread_id), \ - .datastack_chunk = offsetof(PyThreadState, datastack_chunk), \ - .status = offsetof(PyThreadState, _status), \ - }, \ - .interpreter_frame = { \ - .size = sizeof(_PyInterpreterFrame), \ - .previous = offsetof(_PyInterpreterFrame, previous), \ - .executable = offsetof(_PyInterpreterFrame, f_executable), \ - .instr_ptr = offsetof(_PyInterpreterFrame, instr_ptr), \ - .localsplus = offsetof(_PyInterpreterFrame, localsplus), \ - .owner = offsetof(_PyInterpreterFrame, owner), \ - .stackpointer = offsetof(_PyInterpreterFrame, stackpointer), \ - .tlbc_index = _Py_Debug_interpreter_frame_tlbc_index, \ - }, \ - .code_object = { \ - .size = sizeof(PyCodeObject), \ - .filename = offsetof(PyCodeObject, co_filename), \ - .name = offsetof(PyCodeObject, co_name), \ - .qualname = offsetof(PyCodeObject, co_qualname), \ - .linetable = offsetof(PyCodeObject, co_linetable), \ - .firstlineno = offsetof(PyCodeObject, co_firstlineno), \ - .argcount = offsetof(PyCodeObject, co_argcount), \ - .localsplusnames = offsetof(PyCodeObject, co_localsplusnames), \ - .localspluskinds = offsetof(PyCodeObject, co_localspluskinds), \ - .co_code_adaptive = offsetof(PyCodeObject, co_code_adaptive), \ - .co_tlbc = _Py_Debug_code_object_co_tlbc, \ - }, \ - .pyobject = { \ - .size = sizeof(PyObject), \ - .ob_type = offsetof(PyObject, ob_type), \ - }, \ - .type_object = { \ - .size = sizeof(PyTypeObject), \ - .tp_name = offsetof(PyTypeObject, tp_name), \ - .tp_repr = offsetof(PyTypeObject, tp_repr), \ - .tp_flags = offsetof(PyTypeObject, tp_flags), \ - }, \ - .tuple_object = { \ - .size = sizeof(PyTupleObject), \ - .ob_item = offsetof(PyTupleObject, ob_item), \ - .ob_size = offsetof(PyTupleObject, ob_base.ob_size), \ - }, \ - .list_object = { \ - .size = sizeof(PyListObject), \ - .ob_item = offsetof(PyListObject, ob_item), \ - .ob_size = offsetof(PyListObject, ob_base.ob_size), \ - }, \ - .set_object = { \ - .size = sizeof(PySetObject), \ - .used = offsetof(PySetObject, used), \ - .table = offsetof(PySetObject, table), \ - .mask = offsetof(PySetObject, mask), \ - }, \ - .dict_object = { \ - .size = sizeof(PyDictObject), \ - .ma_keys = offsetof(PyDictObject, ma_keys), \ - .ma_values = offsetof(PyDictObject, ma_values), \ - }, \ - .float_object = { \ - .size = sizeof(PyFloatObject), \ - .ob_fval = offsetof(PyFloatObject, ob_fval), \ - }, \ - .long_object = { \ - .size = sizeof(PyLongObject), \ - .lv_tag = offsetof(PyLongObject, long_value.lv_tag), \ - .ob_digit = offsetof(PyLongObject, long_value.ob_digit), \ - }, \ - .bytes_object = { \ - .size = sizeof(PyBytesObject), \ - .ob_size = offsetof(PyBytesObject, ob_base.ob_size), \ - .ob_sval = offsetof(PyBytesObject, ob_sval), \ - }, \ - .unicode_object = { \ - .size = sizeof(PyUnicodeObject), \ - .state = offsetof(PyUnicodeObject, _base._base.state), \ - .length = offsetof(PyUnicodeObject, _base._base.length), \ - .asciiobject_size = sizeof(PyASCIIObject), \ - }, \ - .gc = { \ - .size = sizeof(struct _gc_runtime_state), \ - .collecting = offsetof(struct _gc_runtime_state, collecting), \ - }, \ - .gen_object = { \ - .size = sizeof(PyGenObject), \ - .gi_name = offsetof(PyGenObject, gi_name), \ - .gi_iframe = offsetof(PyGenObject, gi_iframe), \ - .gi_frame_state = offsetof(PyGenObject, gi_frame_state), \ - }, \ - .llist_node = { \ - .next = offsetof(struct llist_node, next), \ - .prev = offsetof(struct llist_node, prev), \ - }, \ - .debugger_support = { \ - .eval_breaker = offsetof(PyThreadState, eval_breaker), \ - .remote_debugger_support = offsetof(PyThreadState, remote_debugger_support), \ - .remote_debugging_enabled = offsetof(PyInterpreterState, config.remote_debug), \ - .debugger_pending_call = offsetof(_PyRemoteDebuggerSupport, debugger_pending_call), \ - .debugger_script_path = offsetof(_PyRemoteDebuggerSupport, debugger_script_path), \ - .debugger_script_path_size = _Py_MAX_SCRIPT_PATH_SIZE, \ - }, \ -} - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_DEBUG_OFFSETS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_descrobject.h b/Python314_4_x86_Template/include/internal/pycore_descrobject.h deleted file mode 100644 index 3cec59a68..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_descrobject.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef Py_INTERNAL_DESCROBJECT_H -#define Py_INTERNAL_DESCROBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -typedef struct { - PyObject_HEAD - PyObject *prop_get; - PyObject *prop_set; - PyObject *prop_del; - PyObject *prop_doc; - PyObject *prop_name; - int getter_doc; -} propertyobject; - -typedef propertyobject _PyPropertyObject; - -extern PyTypeObject _PyMethodWrapper_Type; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_DESCROBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_dict.h b/Python314_4_x86_Template/include/internal/pycore_dict.h deleted file mode 100644 index cfdc63f4d..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_dict.h +++ /dev/null @@ -1,412 +0,0 @@ -#ifndef Py_INTERNAL_DICT_H -#define Py_INTERNAL_DICT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_object.h" // PyManagedDictPointer -#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_LOAD_SSIZE_ACQUIRE -#include "pycore_stackref.h" // _PyStackRef -#include "pycore_stats.h" - -// Unsafe flavor of PyDict_GetItemWithError(): no error checking -extern PyObject* _PyDict_GetItemWithError(PyObject *dp, PyObject *key); - -// Delete an item from a dict if a predicate is true -// Returns -1 on error, 1 if the item was deleted, 0 otherwise -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key, - int (*predicate)(PyObject *value, void *arg), - void *arg); - -// "KnownHash" variants -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key, - PyObject *item, Py_hash_t hash); -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key, - Py_hash_t hash); - -extern int _PyDict_DelItem_KnownHash_LockHeld(PyObject *mp, PyObject *key, - Py_hash_t hash); - -extern int _PyDict_Contains_KnownHash(PyObject *, PyObject *, Py_hash_t); - -// "Id" variants -extern PyObject* _PyDict_GetItemIdWithError(PyObject *dp, - _Py_Identifier *key); -extern int _PyDict_ContainsId(PyObject *, _Py_Identifier *); -extern int _PyDict_SetItemId(PyObject *dp, _Py_Identifier *key, PyObject *item); -extern int _PyDict_DelItemId(PyObject *mp, _Py_Identifier *key); - -extern int _PyDict_Next( - PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash); - -extern int _PyDict_HasOnlyStringKeys(PyObject *mp); - -// Export for '_ctypes' shared extension -PyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *); - -extern Py_ssize_t _PyDict_SizeOf_LockHeld(PyDictObject *); - -#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) - -/* 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 - argument is raised. -*/ -PyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override); - -extern void _PyDict_DebugMallocStats(FILE *out); - - -/* _PyDictView */ - -typedef struct { - PyObject_HEAD - PyDictObject *dv_dict; -} _PyDictViewObject; - -extern PyObject* _PyDictView_New(PyObject *, PyTypeObject *); -extern PyObject* _PyDictView_Intersect(PyObject* self, PyObject *other); - -/* other API */ - -typedef struct { - /* Cached hash code of me_key. */ - Py_hash_t me_hash; - PyObject *me_key; - PyObject *me_value; /* This field is only meaningful for combined tables */ -} PyDictKeyEntry; - -typedef struct { - PyObject *me_key; /* The key must be Unicode and have hash. */ - PyObject *me_value; /* This field is only meaningful for combined tables */ -} PyDictUnicodeEntry; - -extern PyDictKeysObject *_PyDict_NewKeysForClass(PyHeapTypeObject *); -extern PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *); - -/* Gets a version number unique to the current state of the keys of dict, if possible. - * Returns the version number, or zero if it was not possible to get a version number. */ -extern uint32_t _PyDictKeys_GetVersionForCurrentState( - PyInterpreterState *interp, PyDictKeysObject *dictkeys); - -/* Gets a version number unique to the current state of the keys of dict, if possible. - * - * In free-threaded builds ensures that the dict can be used for lock-free - * reads if a version was assigned. - * - * The caller must hold the per-object lock on dict. - * - * Returns the version number, or zero if it was not possible to get a version number. */ -extern uint32_t _PyDict_GetKeysVersionForCurrentState( - PyInterpreterState *interp, PyDictObject *dict); - -extern size_t _PyDict_KeysSize(PyDictKeysObject *keys); - -extern void _PyDictKeys_DecRef(PyDictKeysObject *keys); - -/* _Py_dict_lookup() returns index of entry which can be used like DK_ENTRIES(dk)[index]. - * -1 when no entry found, -3 when compare raises error. - */ -extern Py_ssize_t _Py_dict_lookup(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject **value_addr); -extern Py_ssize_t _Py_dict_lookup_threadsafe(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject **value_addr); -extern Py_ssize_t _Py_dict_lookup_threadsafe_stackref(PyDictObject *mp, PyObject *key, Py_hash_t hash, _PyStackRef *value_addr); - -extern int _PyDict_GetMethodStackRef(PyDictObject *dict, PyObject *name, _PyStackRef *method); - -extern Py_ssize_t _PyDict_LookupIndex(PyDictObject *, PyObject *); -extern Py_ssize_t _PyDictKeys_StringLookup(PyDictKeysObject* dictkeys, PyObject *key); - -/* Look up a string key in an all unicode dict keys, assign the keys object a version, and - * store it in version. - * - * Returns DKIX_ERROR if key is not a string or if the keys object is not all - * strings. - * - * Returns DKIX_EMPTY if the key is not present. - */ -extern Py_ssize_t _PyDictKeys_StringLookupAndVersion(PyDictKeysObject* dictkeys, PyObject *key, uint32_t *version); -extern Py_ssize_t _PyDictKeys_StringLookupSplit(PyDictKeysObject* dictkeys, PyObject *key); -PyAPI_FUNC(PyObject *)_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *); -PyAPI_FUNC(void) _PyDict_LoadGlobalStackRef(PyDictObject *, PyDictObject *, PyObject *, _PyStackRef *); - -// Loads the __builtins__ object from the globals dict. Returns a new reference. -extern PyObject *_PyDict_LoadBuiltinsFromGlobals(PyObject *globals); - -/* Consumes references to key and value */ -PyAPI_FUNC(int) _PyDict_SetItem_Take2(PyDictObject *op, PyObject *key, PyObject *value); -extern int _PyDict_SetItem_LockHeld(PyDictObject *dict, PyObject *name, PyObject *value); -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyDict_SetItem_KnownHash_LockHeld(PyDictObject *mp, PyObject *key, - PyObject *value, Py_hash_t hash); -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyDict_GetItemRef_KnownHash_LockHeld(PyDictObject *op, PyObject *key, Py_hash_t hash, PyObject **result); -extern int _PyDict_GetItemRef_KnownHash(PyDictObject *op, PyObject *key, Py_hash_t hash, PyObject **result); -extern int _PyDict_GetItemRef_Unicode_LockHeld(PyDictObject *op, PyObject *key, PyObject **result); -extern int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject *obj, PyObject **dictptr, PyObject *name, PyObject *value); - -extern int _PyDict_Pop_KnownHash( - PyDictObject *dict, - PyObject *key, - Py_hash_t hash, - PyObject **result); - -extern void _PyDict_Clear_LockHeld(PyObject *op); - -#ifdef Py_GIL_DISABLED -PyAPI_FUNC(void) _PyDict_EnsureSharedOnRead(PyDictObject *mp); -#endif - -#define DKIX_EMPTY (-1) -#define DKIX_DUMMY (-2) /* Used internally */ -#define DKIX_ERROR (-3) -#define DKIX_KEY_CHANGED (-4) /* Used internally */ - -typedef enum { - DICT_KEYS_GENERAL = 0, - DICT_KEYS_UNICODE = 1, - DICT_KEYS_SPLIT = 2 -} DictKeysKind; - -/* See dictobject.c for actual layout of DictKeysObject */ -struct _dictkeysobject { - Py_ssize_t dk_refcnt; - - /* Size of the hash table (dk_indices). It must be a power of 2. */ - uint8_t dk_log2_size; - - /* Size of the hash table (dk_indices) by bytes. */ - uint8_t dk_log2_index_bytes; - - /* Kind of keys */ - uint8_t dk_kind; - -#ifdef Py_GIL_DISABLED - /* Lock used to protect shared keys */ - PyMutex dk_mutex; -#endif - - /* Version number -- Reset to 0 by any modification to keys */ - uint32_t dk_version; - - /* Number of usable entries in dk_entries. */ - Py_ssize_t dk_usable; - - /* Number of used entries in dk_entries. */ - Py_ssize_t dk_nentries; - - - /* Actual hash table of dk_size entries. It holds indices in dk_entries, - or DKIX_EMPTY(-1) or DKIX_DUMMY(-2). - - Indices must be: 0 <= indice < USABLE_FRACTION(dk_size). - - The size in bytes of an indice depends on dk_size: - - - 1 byte if dk_size <= 0xff (char*) - - 2 bytes if dk_size <= 0xffff (int16_t*) - - 4 bytes if dk_size <= 0xffffffff (int32_t*) - - 8 bytes otherwise (int64_t*) - - Dynamically sized, SIZEOF_VOID_P is minimum. */ - char dk_indices[]; /* char is required to avoid strict aliasing. */ - - /* "PyDictKeyEntry or PyDictUnicodeEntry dk_entries[USABLE_FRACTION(DK_SIZE(dk))];" array follows: - see the DK_ENTRIES() / DK_UNICODE_ENTRIES() functions below */ -}; - -/* This must be no more than 250, for the prefix size to fit in one byte. */ -#define SHARED_KEYS_MAX_SIZE 30 -#define NEXT_LOG2_SHARED_KEYS_MAX_SIZE 6 - -/* Layout of dict values: - * - * The PyObject *values are preceded by an array of bytes holding - * the insertion order and size. - * [-1] = prefix size. [-2] = used size. size[-2-n...] = insertion order. - */ -struct _dictvalues { - uint8_t capacity; - uint8_t size; - uint8_t embedded; - uint8_t valid; - PyObject *values[1]; -}; - -#define DK_LOG_SIZE(dk) _Py_RVALUE((dk)->dk_log2_size) -#if SIZEOF_VOID_P > 4 -#define DK_SIZE(dk) (((int64_t)1)<<DK_LOG_SIZE(dk)) -#else -#define DK_SIZE(dk) (1<<DK_LOG_SIZE(dk)) -#endif - -static inline void* _DK_ENTRIES(PyDictKeysObject *dk) { - int8_t *indices = (int8_t*)(dk->dk_indices); - size_t index = (size_t)1 << dk->dk_log2_index_bytes; - return (&indices[index]); -} - -static inline PyDictKeyEntry* DK_ENTRIES(PyDictKeysObject *dk) { - assert(dk->dk_kind == DICT_KEYS_GENERAL); - return (PyDictKeyEntry*)_DK_ENTRIES(dk); -} -static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) { - assert(dk->dk_kind != DICT_KEYS_GENERAL); - return (PyDictUnicodeEntry*)_DK_ENTRIES(dk); -} - -#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL) - -#define DICT_VERSION_INCREMENT (1 << (DICT_MAX_WATCHERS + DICT_WATCHED_MUTATION_BITS)) -#define DICT_WATCHER_MASK ((1 << DICT_MAX_WATCHERS) - 1) -#define DICT_WATCHER_AND_MODIFICATION_MASK ((1 << (DICT_MAX_WATCHERS + DICT_WATCHED_MUTATION_BITS)) - 1) -#define DICT_UNIQUE_ID_SHIFT (32) -#define DICT_UNIQUE_ID_MAX ((UINT64_C(1) << (64 - DICT_UNIQUE_ID_SHIFT)) - 1) - - -PyAPI_FUNC(void) -_PyDict_SendEvent(int watcher_bits, - PyDict_WatchEvent event, - PyDictObject *mp, - PyObject *key, - PyObject *value); - -static inline void -_PyDict_NotifyEvent(PyInterpreterState *interp, - PyDict_WatchEvent event, - PyDictObject *mp, - PyObject *key, - PyObject *value) -{ - assert(Py_REFCNT((PyObject*)mp) > 0); - int watcher_bits = mp->_ma_watcher_tag & DICT_WATCHER_MASK; - if (watcher_bits) { - RARE_EVENT_STAT_INC(watched_dict_modification); - _PyDict_SendEvent(watcher_bits, event, mp, key, value); - } -} - -extern PyDictObject *_PyObject_MaterializeManagedDict(PyObject *obj); - -PyAPI_FUNC(PyObject *)_PyDict_FromItems( - PyObject *const *keys, Py_ssize_t keys_offset, - PyObject *const *values, Py_ssize_t values_offset, - Py_ssize_t length); - -static inline uint8_t * -get_insertion_order_array(PyDictValues *values) -{ - return (uint8_t *)&values->values[values->capacity]; -} - -static inline void -_PyDictValues_AddToInsertionOrder(PyDictValues *values, Py_ssize_t ix) -{ - assert(ix < SHARED_KEYS_MAX_SIZE); - int size = values->size; - uint8_t *array = get_insertion_order_array(values); - assert(size < values->capacity); - assert(((uint8_t)ix) == ix); - array[size] = (uint8_t)ix; - values->size = size+1; -} - -static inline size_t -shared_keys_usable_size(PyDictKeysObject *keys) -{ - // dk_usable will decrease for each instance that is created and each - // value that is added. dk_nentries will increase for each value that - // is added. We want to always return the right value or larger. - // We therefore increase dk_nentries first and we decrease dk_usable - // second, and conversely here we read dk_usable first and dk_entries - // second (to avoid the case where we read entries before the increment - // and read usable after the decrement) - Py_ssize_t dk_usable = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_usable); - Py_ssize_t dk_nentries = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_nentries); - return dk_nentries + dk_usable; -} - -static inline size_t -_PyInlineValuesSize(PyTypeObject *tp) -{ - PyDictKeysObject *keys = ((PyHeapTypeObject*)tp)->ht_cached_keys; - assert(keys != NULL); - size_t size = shared_keys_usable_size(keys); - size_t prefix_size = _Py_SIZE_ROUND_UP(size, sizeof(PyObject *)); - assert(prefix_size < 256); - return prefix_size + (size + 1) * sizeof(PyObject *); -} - -int -_PyDict_DetachFromObject(PyDictObject *dict, PyObject *obj); - -// Enables per-thread ref counting on this dict in the free threading build -extern void _PyDict_EnablePerThreadRefcounting(PyObject *op); - -PyDictObject *_PyObject_MaterializeManagedDict_LockHeld(PyObject *); - -// See `_Py_INCREF_TYPE()` in pycore_object.h -#ifndef Py_GIL_DISABLED -# define _Py_INCREF_DICT Py_INCREF -# define _Py_DECREF_DICT Py_DECREF -# define _Py_INCREF_BUILTINS Py_INCREF -# define _Py_DECREF_BUILTINS Py_DECREF -#else -static inline Py_ssize_t -_PyDict_UniqueId(PyDictObject *mp) -{ - return (Py_ssize_t)(mp->_ma_watcher_tag >> DICT_UNIQUE_ID_SHIFT); -} - -static inline void -_Py_INCREF_DICT(PyObject *op) -{ - assert(PyDict_Check(op)); - Py_ssize_t id = _PyDict_UniqueId((PyDictObject *)op); - _Py_THREAD_INCREF_OBJECT(op, id); -} - -static inline void -_Py_DECREF_DICT(PyObject *op) -{ - assert(PyDict_Check(op)); - Py_ssize_t id = _PyDict_UniqueId((PyDictObject *)op); - _Py_THREAD_DECREF_OBJECT(op, id); -} - -// Like `_Py_INCREF_DICT`, but also handles non-dict objects because builtins -// may not be a dict. -static inline void -_Py_INCREF_BUILTINS(PyObject *op) -{ - if (PyDict_CheckExact(op)) { - _Py_INCREF_DICT(op); - } - else { - Py_INCREF(op); - } -} - -static inline void -_Py_DECREF_BUILTINS(PyObject *op) -{ - if (PyDict_CheckExact(op)) { - _Py_DECREF_DICT(op); - } - else { - Py_DECREF(op); - } -} -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_DICT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_dict_state.h b/Python314_4_x86_Template/include/internal/pycore_dict_state.h deleted file mode 100644 index 11932b8d1..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_dict_state.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef Py_INTERNAL_DICT_STATE_H -#define Py_INTERNAL_DICT_STATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#define DICT_MAX_WATCHERS 8 -#define DICT_WATCHED_MUTATION_BITS 4 - -struct _Py_dict_state { - uint32_t next_keys_version; - PyDict_WatchCallback watchers[DICT_MAX_WATCHERS]; -}; - -#define _dict_state_INIT \ - { \ - .next_keys_version = 2, \ - } - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_DICT_STATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_dtoa.h b/Python314_4_x86_Template/include/internal/pycore_dtoa.h deleted file mode 100644 index 2e2e990a7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_dtoa.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef Py_INTERNAL_DTOA_H -#define Py_INTERNAL_DTOA_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR - - -#if defined(Py_USING_MEMORY_DEBUGGER) || _PY_SHORT_FLOAT_REPR == 0 - -#define _dtoa_state_INIT(INTERP) \ - {0} - -#else - -#define _dtoa_state_INIT(INTERP) \ - { \ - .preallocated_next = (INTERP)->dtoa.preallocated, \ - } -#endif - -extern double _Py_dg_strtod(const char *str, char **ptr); -extern char* _Py_dg_dtoa(double d, int mode, int ndigits, - int *decpt, int *sign, char **rve); -extern void _Py_dg_freedtoa(char *s); - - -extern PyStatus _PyDtoa_Init(PyInterpreterState *interp); -extern void _PyDtoa_Fini(PyInterpreterState *interp); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_DTOA_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_emscripten_signal.h b/Python314_4_x86_Template/include/internal/pycore_emscripten_signal.h deleted file mode 100644 index 754193e21..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_emscripten_signal.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef Py_EMSCRIPTEN_SIGNAL_H -#define Py_EMSCRIPTEN_SIGNAL_H - -#if defined(__EMSCRIPTEN__) - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -void -_Py_CheckEmscriptenSignals(void); - -void -_Py_CheckEmscriptenSignalsPeriodically(void); - -#define _Py_CHECK_EMSCRIPTEN_SIGNALS() _Py_CheckEmscriptenSignals() - -#define _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY() _Py_CheckEmscriptenSignalsPeriodically() - -extern int Py_EMSCRIPTEN_SIGNAL_HANDLING; -extern int _Py_emscripten_signal_clock; - -#else - -#define _Py_CHECK_EMSCRIPTEN_SIGNALS() -#define _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY() - -#endif // defined(__EMSCRIPTEN__) - -#endif // ndef Py_EMSCRIPTEN_SIGNAL_H diff --git a/Python314_4_x86_Template/include/internal/pycore_emscripten_trampoline.h b/Python314_4_x86_Template/include/internal/pycore_emscripten_trampoline.h deleted file mode 100644 index e37c53a64..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_emscripten_trampoline.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef Py_EMSCRIPTEN_TRAMPOLINE_H -#define Py_EMSCRIPTEN_TRAMPOLINE_H - -#include "pycore_typedefs.h" // _PyRuntimeState - -/** - * C function call trampolines to mitigate bad function pointer casts. - * - * Section 6.3.2.3, paragraph 8 reads: - * - * A pointer to a function of one type may be converted to a pointer to a - * function of another type and back again; the result shall compare equal to - * the original pointer. If a converted pointer is used to call a function - * whose type is not compatible with the pointed-to type, the behavior is - * undefined. - * - * Typical native ABIs ignore additional arguments or fill in missing values - * with 0/NULL in function pointer cast. Compilers do not show warnings when a - * function pointer is explicitly casted to an incompatible type. - * - * Bad fpcasts are an issue in WebAssembly. WASM's indirect_call has strict - * function signature checks. Argument count, types, and return type must match. - * - * Third party code unintentionally rely on problematic fpcasts. The call - * trampoline mitigates common occurrences of bad fpcasts on Emscripten. - */ - -#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) - -PyObject* -_PyEM_TrampolineCall(PyCFunctionWithKeywords func, - PyObject* self, - PyObject* args, - PyObject* kw); - -#define _PyCFunction_TrampolineCall(meth, self, args) \ - _PyEM_TrampolineCall(*_PyCFunctionWithKeywords_CAST(meth), (self), (args), NULL) - -#define _PyCFunctionWithKeywords_TrampolineCall(meth, self, args, kw) \ - _PyEM_TrampolineCall((meth), (self), (args), (kw)) - -#define descr_set_trampoline_call(set, obj, value, closure) \ - ((int)_PyEM_TrampolineCall(_PyCFunctionWithKeywords_CAST(set), (obj), \ - (value), (PyObject*)(closure))) - -#define descr_get_trampoline_call(get, obj, closure) \ - _PyEM_TrampolineCall(_PyCFunctionWithKeywords_CAST(get), (obj), \ - (PyObject*)(closure), NULL) - - -#else // defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) - -#define _PyCFunction_TrampolineCall(meth, self, args) \ - (meth)((self), (args)) - -#define _PyCFunctionWithKeywords_TrampolineCall(meth, self, args, kw) \ - (meth)((self), (args), (kw)) - -#define descr_set_trampoline_call(set, obj, value, closure) \ - (set)((obj), (value), (closure)) - -#define descr_get_trampoline_call(get, obj, closure) \ - (get)((obj), (closure)) - -#endif // defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) - -#endif // ndef Py_EMSCRIPTEN_SIGNAL_H diff --git a/Python314_4_x86_Template/include/internal/pycore_exceptions.h b/Python314_4_x86_Template/include/internal/pycore_exceptions.h deleted file mode 100644 index 26456d196..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_exceptions.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef Py_INTERNAL_EXCEPTIONS_H -#define Py_INTERNAL_EXCEPTIONS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* runtime lifecycle */ - -extern PyStatus _PyExc_InitState(PyInterpreterState *); -extern PyStatus _PyExc_InitGlobalObjects(PyInterpreterState *); -extern int _PyExc_InitTypes(PyInterpreterState *); -extern void _PyExc_Fini(PyInterpreterState *); - - -/* other API */ - -struct _Py_exc_state { - // The dict mapping from errno codes to OSError subclasses - PyObject *errnomap; - PyBaseExceptionObject *memerrors_freelist; - int memerrors_numfree; -#ifdef Py_GIL_DISABLED - PyMutex memerrors_lock; -#endif - // The ExceptionGroup type - PyObject *PyExc_ExceptionGroup; -}; - -extern void _PyExc_ClearExceptionGroupType(PyInterpreterState *); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_EXCEPTIONS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_faulthandler.h b/Python314_4_x86_Template/include/internal/pycore_faulthandler.h deleted file mode 100644 index 78cd657e6..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_faulthandler.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef Py_INTERNAL_FAULTHANDLER_H -#define Py_INTERNAL_FAULTHANDLER_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef HAVE_SIGACTION -# include <signal.h> // sigaction -#endif - - -#ifndef MS_WINDOWS - /* register() is useless on Windows, because only SIGSEGV, SIGABRT and - SIGILL can be handled by the process, and these signals can only be used - with enable(), not using register() */ -# define FAULTHANDLER_USER -#endif - - -#ifdef HAVE_SIGACTION -/* Using an alternative stack requires sigaltstack() - and sigaction() SA_ONSTACK */ -# ifdef HAVE_SIGALTSTACK -# define FAULTHANDLER_USE_ALT_STACK -# endif -typedef struct sigaction _Py_sighandler_t; -#else -typedef PyOS_sighandler_t _Py_sighandler_t; -#endif // HAVE_SIGACTION - - -#ifdef FAULTHANDLER_USER -struct faulthandler_user_signal { - int enabled; - PyObject *file; - int fd; - int all_threads; - int chain; - _Py_sighandler_t previous; - PyInterpreterState *interp; -}; -#endif /* FAULTHANDLER_USER */ - - -struct _faulthandler_runtime_state { - struct { - int enabled; - PyObject *file; - int fd; - int all_threads; - PyInterpreterState *interp; -#ifdef MS_WINDOWS - void *exc_handler; -#endif - int c_stack; - } fatal_error; - - struct { - PyObject *file; - int fd; - PY_TIMEOUT_T timeout_us; /* timeout in microseconds */ - int repeat; - PyInterpreterState *interp; - int exit; - char *header; - size_t header_len; - /* The main thread always holds this lock. It is only released when - faulthandler_thread() is interrupted before this thread exits, or at - Python exit. */ - PyThread_type_lock cancel_event; - /* released by child thread when joined */ - PyThread_type_lock running; - } thread; - -#ifdef FAULTHANDLER_USER - struct faulthandler_user_signal *user_signals; -#endif - -#ifdef FAULTHANDLER_USE_ALT_STACK - stack_t stack; - stack_t old_stack; -#endif -}; - -#define _faulthandler_runtime_state_INIT \ - { \ - .fatal_error = { \ - .fd = -1, \ - }, \ - } - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FAULTHANDLER_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_fileutils.h b/Python314_4_x86_Template/include/internal/pycore_fileutils.h deleted file mode 100644 index 2c6d6daa0..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_fileutils.h +++ /dev/null @@ -1,320 +0,0 @@ -#ifndef Py_INTERNAL_FILEUTILS_H -#define Py_INTERNAL_FILEUTILS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include <locale.h> // struct lconv -#include "pycore_interp_structs.h" // _Py_error_handler - - -/* 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 */ - #define _PyIsSelectable_fd(FD) (1) -#else - #define _PyIsSelectable_fd(FD) ((unsigned int)(FD) < (unsigned int)FD_SETSIZE) -#endif - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(int) _Py_DecodeLocaleEx( - const char *arg, - wchar_t **wstr, - size_t *wlen, - const char **reason, - int current_locale, - _Py_error_handler errors); - -// Export for '_testinternalcapi' shared extension -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); - -extern char* _Py_EncodeLocaleRaw( - const wchar_t *text, - size_t *error_pos); - -extern 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 { - uint64_t 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; - time_t st_birthtime; - int st_birthtime_nsec; - unsigned long st_file_attributes; - unsigned long st_reparse_tag; - uint64_t st_ino_high; -}; -#else -# define _Py_stat_struct stat -#endif - -// Export for 'mmap' shared extension -PyAPI_FUNC(int) _Py_fstat( - int fd, - struct _Py_stat_struct *status); - -// Export for 'mmap' shared extension -PyAPI_FUNC(int) _Py_fstat_noraise( - int fd, - struct _Py_stat_struct *status); - -// Export for '_tkinter' shared extension -PyAPI_FUNC(int) _Py_stat( - PyObject *path, - struct stat *status); - -// Export for 'select' shared extension (Solaris newDevPollObject()) -PyAPI_FUNC(int) _Py_open( - const char *pathname, - int flags); - -// Export for '_posixsubprocess' shared extension -PyAPI_FUNC(int) _Py_open_noraise( - const char *pathname, - int flags); - -extern FILE* _Py_wfopen( - const wchar_t *path, - const wchar_t *mode); - -extern Py_ssize_t _Py_read( - int fd, - void *buf, - size_t count); - -// Export for 'select' shared extension (Solaris devpoll_flush()) -PyAPI_FUNC(Py_ssize_t) _Py_write( - int fd, - const void *buf, - size_t count); - -// Export for '_posixsubprocess' shared extension -PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( - int fd, - const void *buf, - size_t count); - -#ifdef HAVE_READLINK -extern 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 -extern 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 - -extern wchar_t* _Py_wgetcwd( - wchar_t *buf, - /* Number of characters of 'buf' buffer - including the trailing NUL character */ - size_t buflen); - -extern int _Py_get_inheritable(int fd); - -// Export for '_socket' shared extension -PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, - int *atomic_flag_works); - -// Export for '_posixsubprocess' shared extension -PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, - int *atomic_flag_works); - -// Export for '_socket' shared extension -PyAPI_FUNC(int) _Py_dup(int fd); - -extern int _Py_get_blocking(int fd); - -extern int _Py_set_blocking(int fd, int blocking); - -#ifdef MS_WINDOWS -extern void* _Py_get_osfhandle_noraise(int fd); - -// Export for '_testconsole' shared extension -PyAPI_FUNC(void*) _Py_get_osfhandle(int fd); - -extern int _Py_open_osfhandle_noraise(void *handle, int flags); - -extern int _Py_open_osfhandle(void *handle, int flags); -#endif /* MS_WINDOWS */ - -// This is used after getting NULL back from Py_DecodeLocale(). -#define DECODE_LOCALE_ERR(NAME, LEN) \ - ((LEN) == (size_t)-2) \ - ? _PyStatus_ERR("cannot decode " NAME) \ - : _PyStatus_NO_MEMORY() - -extern int _Py_HasFileSystemDefaultEncodeErrors; - -extern int _Py_DecodeUTF8Ex( - const char *arg, - Py_ssize_t arglen, - wchar_t **wstr, - size_t *wlen, - const char **reason, - _Py_error_handler errors); - -extern int _Py_EncodeUTF8Ex( - const wchar_t *text, - char **str, - size_t *error_pos, - const char **reason, - int raw_malloc, - _Py_error_handler errors); - -extern wchar_t* _Py_DecodeUTF8_surrogateescape( - const char *arg, - Py_ssize_t arglen, - size_t *wlen); - -extern int -_Py_wstat(const wchar_t *, struct stat *); - -extern int _Py_GetForceASCII(void); - -/* Reset "force ASCII" mode (if it was initialized). - - This function should be called when Python changes the LC_CTYPE locale, - so the "force ASCII" mode can be detected again on the new locale - encoding. */ -extern void _Py_ResetForceASCII(void); - - -extern int _Py_GetLocaleconvNumeric( - struct lconv *lc, - PyObject **decimal_point, - PyObject **thousands_sep); - -// Export for '_posixsubprocess' (on macOS) -PyAPI_FUNC(void) _Py_closerange(int first, int last); - -extern wchar_t* _Py_GetLocaleEncoding(void); -extern PyObject* _Py_GetLocaleEncodingObject(void); - -#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 - -extern int _Py_isabs(const wchar_t *path); -extern int _Py_abspath(const wchar_t *path, wchar_t **abspath_p); -#ifdef MS_WINDOWS -extern int _PyOS_getfullpathname(const wchar_t *path, wchar_t **abspath_p); -#endif -extern wchar_t* _Py_join_relfile(const wchar_t *dirname, - const wchar_t *relfile); -extern int _Py_add_relfile(wchar_t *dirname, - const wchar_t *relfile, - size_t bufsize); -extern size_t _Py_find_basename(const wchar_t *filename); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(wchar_t*) _Py_normpath(wchar_t *path, Py_ssize_t size); - -extern wchar_t *_Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *length); - -// The Windows Games API family does not provide these functions -// so provide our own implementations. Remove them in case they get added -// to the Games API family -#if defined(MS_WINDOWS_GAMES) && !defined(MS_WINDOWS_DESKTOP) -#include <winerror.h> // HRESULT - -extern HRESULT PathCchSkipRoot(const wchar_t *pszPath, const wchar_t **ppszRootEnd); -#endif /* defined(MS_WINDOWS_GAMES) && !defined(MS_WINDOWS_DESKTOP) */ - -extern void _Py_skiproot(const wchar_t *path, Py_ssize_t size, Py_ssize_t *drvsize, Py_ssize_t *rootsize); - -// Macros to protect CRT calls against instant termination when passed an -// invalid parameter (bpo-23524). IPH stands for Invalid Parameter Handler. -// Usage: -// -// _Py_BEGIN_SUPPRESS_IPH -// ... -// _Py_END_SUPPRESS_IPH -#if defined _MSC_VER && _MSC_VER >= 1900 - -# include <stdlib.h> // _set_thread_local_invalid_parameter_handler() - - extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; -# define _Py_BEGIN_SUPPRESS_IPH \ - { _invalid_parameter_handler _Py_old_handler = \ - _set_thread_local_invalid_parameter_handler(_Py_silent_invalid_parameter_handler); -# define _Py_END_SUPPRESS_IPH \ - _set_thread_local_invalid_parameter_handler(_Py_old_handler); } -#else -# define _Py_BEGIN_SUPPRESS_IPH -# define _Py_END_SUPPRESS_IPH -#endif /* _MSC_VER >= 1900 */ - -// Export for 'select' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_FileDescriptor_Converter(PyObject *, void *); - -// Export for test_peg_generator -PyAPI_FUNC(char*) _Py_UniversalNewlineFgetsWithSize(char *, int, FILE*, PyObject *, size_t*); - -extern int _PyFile_Flush(PyObject *); - -#ifndef MS_WINDOWS -extern int _Py_GetTicksPerSecond(long *ticks_per_second); -#endif - -// Export for '_testcapi' shared extension -PyAPI_FUNC(int) _Py_IsValidFD(int fd); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FILEUTILS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_fileutils_windows.h b/Python314_4_x86_Template/include/internal/pycore_fileutils_windows.h deleted file mode 100644 index b79aa9fb4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_fileutils_windows.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef Py_INTERNAL_FILEUTILS_WINDOWS_H -#define Py_INTERNAL_FILEUTILS_WINDOWS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef MS_WINDOWS - -#if !defined(NTDDI_WIN10_NI) || !(NTDDI_VERSION >= NTDDI_WIN10_NI) -typedef struct _FILE_STAT_BASIC_INFORMATION { - LARGE_INTEGER FileId; - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG FileAttributes; - ULONG ReparseTag; - ULONG NumberOfLinks; - ULONG DeviceType; - ULONG DeviceCharacteristics; - ULONG Reserved; - LARGE_INTEGER VolumeSerialNumber; - FILE_ID_128 FileId128; -} FILE_STAT_BASIC_INFORMATION; - -typedef enum _FILE_INFO_BY_NAME_CLASS { - FileStatByNameInfo, - FileStatLxByNameInfo, - FileCaseSensitiveByNameInfo, - FileStatBasicByNameInfo, - MaximumFileInfoByNameClass -} FILE_INFO_BY_NAME_CLASS; -#endif - -typedef BOOL (WINAPI *PGetFileInformationByName)( - PCWSTR FileName, - FILE_INFO_BY_NAME_CLASS FileInformationClass, - PVOID FileInfoBuffer, - ULONG FileInfoBufferSize -); - -static inline BOOL _Py_GetFileInformationByName( - PCWSTR FileName, - FILE_INFO_BY_NAME_CLASS FileInformationClass, - PVOID FileInfoBuffer, - ULONG FileInfoBufferSize -) { - static PGetFileInformationByName GetFileInformationByName = NULL; - static int GetFileInformationByName_init = -1; - - if (GetFileInformationByName_init < 0) { - HMODULE hMod = LoadLibraryW(L"api-ms-win-core-file-l2-1-4"); - GetFileInformationByName_init = 0; - if (hMod) { - GetFileInformationByName = (PGetFileInformationByName)GetProcAddress( - hMod, "GetFileInformationByName"); - if (GetFileInformationByName) { - GetFileInformationByName_init = 1; - } else { - FreeLibrary(hMod); - } - } - } - - if (GetFileInformationByName_init <= 0) { - SetLastError(ERROR_NOT_SUPPORTED); - return FALSE; - } - return GetFileInformationByName(FileName, FileInformationClass, FileInfoBuffer, FileInfoBufferSize); -} - -static inline BOOL _Py_GetFileInformationByName_ErrorIsTrustworthy(int error) -{ - switch(error) { - case ERROR_FILE_NOT_FOUND: - case ERROR_PATH_NOT_FOUND: - case ERROR_NOT_READY: - case ERROR_BAD_NET_NAME: - case ERROR_BAD_NETPATH: - case ERROR_BAD_PATHNAME: - case ERROR_INVALID_NAME: - case ERROR_FILENAME_EXCED_RANGE: - return TRUE; - case ERROR_NOT_SUPPORTED: - return FALSE; - } - return FALSE; -} - -#endif - -#endif diff --git a/Python314_4_x86_Template/include/internal/pycore_floatobject.h b/Python314_4_x86_Template/include/internal/pycore_floatobject.h deleted file mode 100644 index 317f98418..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_floatobject.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef Py_INTERNAL_FLOATOBJECT_H -#define Py_INTERNAL_FLOATOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_unicodeobject.h" // _PyUnicodeWriter - -/* runtime lifecycle */ - -extern void _PyFloat_InitState(PyInterpreterState *); -extern PyStatus _PyFloat_InitTypes(PyInterpreterState *); -extern void _PyFloat_FiniType(PyInterpreterState *); - - - - -PyAPI_FUNC(void) _PyFloat_ExactDealloc(PyObject *op); - - -extern void _PyFloat_DebugMallocStats(FILE* out); - - -/* Format the object based on the format_spec, as defined in PEP 3101 - (Advanced String Formatting). */ -extern int _PyFloat_FormatAdvancedWriter( - _PyUnicodeWriter *writer, - PyObject *obj, - PyObject *format_spec, - Py_ssize_t start, - Py_ssize_t end); - -extern PyObject* _Py_string_to_number_with_underscores( - const char *str, Py_ssize_t len, const char *what, PyObject *obj, void *arg, - PyObject *(*innerfunc)(const char *, Py_ssize_t, void *)); - -extern double _Py_parse_inf_or_nan(const char *p, char **endptr); - -extern int _Py_convert_int_to_double(PyObject **v, double *dbl); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FLOATOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_flowgraph.h b/Python314_4_x86_Template/include/internal/pycore_flowgraph.h deleted file mode 100644 index 5043260d2..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_flowgraph.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef Py_INTERNAL_CFG_H -#define Py_INTERNAL_CFG_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_compile.h" -#include "pycore_instruction_sequence.h" -#include "pycore_opcode_utils.h" - -struct _PyCfgBuilder; - -int _PyCfgBuilder_UseLabel(struct _PyCfgBuilder *g, _PyJumpTargetLabel lbl); -int _PyCfgBuilder_Addop(struct _PyCfgBuilder *g, int opcode, int oparg, _Py_SourceLocation loc); - -struct _PyCfgBuilder* _PyCfgBuilder_New(void); -void _PyCfgBuilder_Free(struct _PyCfgBuilder *g); -int _PyCfgBuilder_CheckSize(struct _PyCfgBuilder* g); - -int _PyCfg_OptimizeCodeUnit(struct _PyCfgBuilder *g, PyObject *consts, PyObject *const_cache, - int nlocals, int nparams, int firstlineno); - -struct _PyCfgBuilder* _PyCfg_FromInstructionSequence(_PyInstructionSequence *seq); -int _PyCfg_ToInstructionSequence(struct _PyCfgBuilder *g, _PyInstructionSequence *seq); -int _PyCfg_OptimizedCfgToInstructionSequence(struct _PyCfgBuilder *g, _PyCompile_CodeUnitMetadata *umd, - int code_flags, int *stackdepth, int *nlocalsplus, - _PyInstructionSequence *seq); - -PyCodeObject * -_PyAssemble_MakeCodeObject(_PyCompile_CodeUnitMetadata *u, PyObject *const_cache, - PyObject *consts, int maxdepth, _PyInstructionSequence *instrs, - int nlocalsplus, int code_flags, PyObject *filename); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyCompile_OptimizeCfg( - PyObject *instructions, - PyObject *consts, - int nlocals); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CFG_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_format.h b/Python314_4_x86_Template/include/internal/pycore_format.h deleted file mode 100644 index 1b8d57539..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_format.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef Py_INTERNAL_FORMAT_H -#define Py_INTERNAL_FORMAT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -/* Format codes - * F_LJUST '-' - * F_SIGN '+' - * F_BLANK ' ' - * F_ALT '#' - * F_ZERO '0' - */ -#define F_LJUST (1<<0) -#define F_SIGN (1<<1) -#define F_BLANK (1<<2) -#define F_ALT (1<<3) -#define F_ZERO (1<<4) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FORMAT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_frame.h b/Python314_4_x86_Template/include/internal/pycore_frame.h deleted file mode 100644 index 8c410e9e2..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_frame.h +++ /dev/null @@ -1,61 +0,0 @@ -/* See InternalDocs/frames.md for an explanation of the frame stack - * including explanation of the PyFrameObject and _PyInterpreterFrame - * structs. */ - -#ifndef Py_INTERNAL_FRAME_H -#define Py_INTERNAL_FRAME_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_typedefs.h" // _PyInterpreterFrame - - -struct _frame { - PyObject_HEAD - PyFrameObject *f_back; /* previous frame, or NULL */ - _PyInterpreterFrame *f_frame; /* points to the frame data */ - PyObject *f_trace; /* Trace function */ - int f_lineno; /* Current line number. Only valid if non-zero */ - char f_trace_lines; /* Emit per-line trace events? */ - char f_trace_opcodes; /* Emit per-opcode trace events? */ - PyObject *f_extra_locals; /* Dict for locals set by users using f_locals, could be NULL */ - /* This is purely for backwards compatibility for PyEval_GetLocals. - PyEval_GetLocals requires a borrowed reference so the actual reference - is stored here */ - PyObject *f_locals_cache; - /* A tuple containing strong references to fast locals that were overwritten - * via f_locals. Borrowed references to these locals may exist in frames - * closer to the top of the stack. The references in this tuple act as - * "support" for the borrowed references, ensuring that they remain valid. - */ - PyObject *f_overwritten_fast_locals; - /* The frame data, if this frame object owns the frame */ - PyObject *_f_frame_data[1]; -}; - -extern PyFrameObject* _PyFrame_New_NoTrack(PyCodeObject *code); - - -/* other API */ - -typedef enum _framestate { - FRAME_CREATED = -3, - FRAME_SUSPENDED = -2, - FRAME_SUSPENDED_YIELD_FROM = -1, - FRAME_EXECUTING = 0, - FRAME_COMPLETED = 1, - FRAME_CLEARED = 4 -} PyFrameState; - -#define FRAME_STATE_SUSPENDED(S) ((S) == FRAME_SUSPENDED || (S) == FRAME_SUSPENDED_YIELD_FROM) -#define FRAME_STATE_FINISHED(S) ((S) >= FRAME_COMPLETED) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FRAME_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_freelist.h b/Python314_4_x86_Template/include/internal/pycore_freelist.h deleted file mode 100644 index f3c9a669a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_freelist.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef Py_INTERNAL_FREELIST_H -#define Py_INTERNAL_FREELIST_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_freelist_state.h" // struct _Py_freelists -#include "pycore_interp_structs.h" // PyInterpreterState -#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_STORE_PTR_RELAXED() -#include "pycore_pystate.h" // _PyThreadState_GET -#include "pycore_stats.h" // OBJECT_STAT_INC - -static inline struct _Py_freelists * -_Py_freelists_GET(void) -{ - PyThreadState *tstate = _PyThreadState_GET(); -#ifdef Py_DEBUG - _Py_EnsureTstateNotNULL(tstate); -#endif - -#ifdef Py_GIL_DISABLED - return &((_PyThreadStateImpl*)tstate)->freelists; -#else - return &tstate->interp->object_state.freelists; -#endif -} - -// Pushes `op` to the freelist, calls `freefunc` if the freelist is full -#define _Py_FREELIST_FREE(NAME, op, freefunc) \ - _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \ - Py_ ## NAME ## _MAXFREELIST, freefunc) -// Pushes `op` to the freelist, returns 1 if successful, 0 if the freelist is full -#define _Py_FREELIST_PUSH(NAME, op, limit) \ - _PyFreeList_Push(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), limit) - -// Pops a PyObject from the freelist, returns NULL if the freelist is empty. -#define _Py_FREELIST_POP(TYPE, NAME) \ - _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME)) - -// Pops a non-PyObject data structure from the freelist, returns NULL if the -// freelist is empty. -#define _Py_FREELIST_POP_MEM(NAME) \ - _PyFreeList_PopMem(&_Py_freelists_GET()->NAME) - -#define _Py_FREELIST_SIZE(NAME) (int)((_Py_freelists_GET()->NAME).size) - -static inline int -_PyFreeList_Push(struct _Py_freelist *fl, void *obj, Py_ssize_t maxsize) -{ - if (fl->size < maxsize && fl->size >= 0) { - FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist); - fl->freelist = obj; - fl->size++; - OBJECT_STAT_INC(to_freelist); - return 1; - } - return 0; -} - -static inline void -_PyFreeList_Free(struct _Py_freelist *fl, void *obj, Py_ssize_t maxsize, - freefunc dofree) -{ - if (!_PyFreeList_Push(fl, obj, maxsize)) { - dofree(obj); - } -} - -static inline void * -_PyFreeList_PopNoStats(struct _Py_freelist *fl) -{ - void *obj = fl->freelist; - if (obj != NULL) { - assert(fl->size > 0); - fl->freelist = *(void **)obj; - fl->size--; - } - return obj; -} - -static inline PyObject * -_PyFreeList_Pop(struct _Py_freelist *fl) -{ - PyObject *op = _PyFreeList_PopNoStats(fl); - if (op != NULL) { - OBJECT_STAT_INC(from_freelist); - _Py_NewReference(op); - } - return op; -} - -static inline void * -_PyFreeList_PopMem(struct _Py_freelist *fl) -{ - void *op = _PyFreeList_PopNoStats(fl); - if (op != NULL) { - OBJECT_STAT_INC(from_freelist); - } - return op; -} - -extern void _PyObject_ClearFreeLists(struct _Py_freelists *freelists, int is_finalization); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FREELIST_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_freelist_state.h b/Python314_4_x86_Template/include/internal/pycore_freelist_state.h deleted file mode 100644 index 4828dfd94..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_freelist_state.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef Py_INTERNAL_FREELIST_STATE_H -#define Py_INTERNAL_FREELIST_STATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -# define PyTuple_MAXSAVESIZE 20 // Largest tuple to save on freelist -# define Py_tuple_MAXFREELIST 2000 // Maximum number of tuples of each size to save -# define Py_lists_MAXFREELIST 80 -# define Py_list_iters_MAXFREELIST 10 -# define Py_tuple_iters_MAXFREELIST 10 -# define Py_dicts_MAXFREELIST 80 -# define Py_dictkeys_MAXFREELIST 80 -# define Py_floats_MAXFREELIST 100 -# define Py_ints_MAXFREELIST 100 -# define Py_slices_MAXFREELIST 1 -# define Py_ranges_MAXFREELIST 6 -# define Py_range_iters_MAXFREELIST 6 -# define Py_contexts_MAXFREELIST 255 -# define Py_async_gens_MAXFREELIST 80 -# define Py_async_gen_asends_MAXFREELIST 80 -# define Py_futureiters_MAXFREELIST 255 -# define Py_object_stack_chunks_MAXFREELIST 4 -# define Py_unicode_writers_MAXFREELIST 1 -# define Py_pycfunctionobject_MAXFREELIST 16 -# define Py_pycmethodobject_MAXFREELIST 16 -# define Py_pymethodobjects_MAXFREELIST 20 - -// A generic freelist of either PyObjects or other data structures. -struct _Py_freelist { - // Entries are linked together using the first word of the object. - // For PyObjects, this overlaps with the `ob_refcnt` field or the `ob_tid` - // field. - void *freelist; - - // The number of items in the free list or -1 if the free list is disabled - Py_ssize_t size; -}; - -struct _Py_freelists { - struct _Py_freelist floats; - struct _Py_freelist ints; - struct _Py_freelist tuples[PyTuple_MAXSAVESIZE]; - struct _Py_freelist lists; - struct _Py_freelist list_iters; - struct _Py_freelist tuple_iters; - struct _Py_freelist dicts; - struct _Py_freelist dictkeys; - struct _Py_freelist slices; - struct _Py_freelist ranges; - struct _Py_freelist range_iters; - struct _Py_freelist contexts; - struct _Py_freelist async_gens; - struct _Py_freelist async_gen_asends; - struct _Py_freelist futureiters; - struct _Py_freelist object_stack_chunks; - struct _Py_freelist unicode_writers; - struct _Py_freelist pycfunctionobject; - struct _Py_freelist pycmethodobject; - struct _Py_freelist pymethodobjects; -}; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FREELIST_STATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_function.h b/Python314_4_x86_Template/include/internal/pycore_function.h deleted file mode 100644 index 69b9ad548..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_function.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef Py_INTERNAL_FUNCTION_H -#define Py_INTERNAL_FUNCTION_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyObject* _PyFunction_Vectorcall( - PyObject *func, - PyObject *const *stack, - size_t nargsf, - PyObject *kwnames); - - -#define FUNC_VERSION_UNSET 0 -#define FUNC_VERSION_CLEARED 1 -#define FUNC_VERSION_FIRST_VALID 2 - -extern PyFunctionObject* _PyFunction_FromConstructor(PyFrameConstructor *constr); - -static inline int -_PyFunction_IsVersionValid(uint32_t version) -{ - return version >= FUNC_VERSION_FIRST_VALID; -} - -extern uint32_t _PyFunction_GetVersionForCurrentState(PyFunctionObject *func); -PyAPI_FUNC(void) _PyFunction_SetVersion(PyFunctionObject *func, uint32_t version); -void _PyFunction_ClearCodeByVersion(uint32_t version); -PyFunctionObject *_PyFunction_LookupByVersion(uint32_t version, PyObject **p_code); - -extern PyObject *_Py_set_function_type_params( - PyThreadState* unused, PyObject *func, PyObject *type_params); - - -/* See pycore_code.h for explanation about what "stateless" means. */ - -PyAPI_FUNC(int) -_PyFunction_VerifyStateless(PyThreadState *, PyObject *); - -static inline PyObject* _PyFunction_GET_BUILTINS(PyObject *func) { - return _PyFunction_CAST(func)->func_builtins; -} -#define _PyFunction_GET_BUILTINS(func) _PyFunction_GET_BUILTINS(_PyObject_CAST(func)) - - -/* Get the callable wrapped by a classmethod. - Returns a borrowed reference. - The caller must ensure 'cm' is a classmethod object. */ -extern PyObject *_PyClassMethod_GetFunc(PyObject *cm); - -/* Get the callable wrapped by a staticmethod. - Returns a borrowed reference. - The caller must ensure 'sm' is a staticmethod object. */ -extern PyObject *_PyStaticMethod_GetFunc(PyObject *sm); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_FUNCTION_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_gc.h b/Python314_4_x86_Template/include/internal/pycore_gc.h deleted file mode 100644 index fd284d0e4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_gc.h +++ /dev/null @@ -1,378 +0,0 @@ -#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 - -#include "pycore_interp_structs.h" // PyGC_Head -#include "pycore_pystate.h" // _PyInterpreterState_GET() -#include "pycore_typedefs.h" // _PyInterpreterFrame - - -/* Get an object's GC head */ -static inline PyGC_Head* _Py_AS_GC(PyObject *op) { - char *gc = ((char*)op) - sizeof(PyGC_Head); - return (PyGC_Head*)gc; -} - -/* Get the object given the GC head */ -static inline PyObject* _Py_FROM_GC(PyGC_Head *gc) { - char *op = ((char *)gc) + sizeof(PyGC_Head); - return (PyObject *)op; -} - - -/* Bit flags for ob_gc_bits (in Py_GIL_DISABLED builds) - * - * Setting the bits requires a relaxed store. The per-object lock must also be - * held, except when the object is only visible to a single thread (e.g. during - * object initialization or destruction). - * - * Reading the bits requires using a relaxed load, but does not require holding - * the per-object lock. - */ -#ifdef Py_GIL_DISABLED -# define _PyGC_BITS_TRACKED (1<<0) // Tracked by the GC -# define _PyGC_BITS_FINALIZED (1<<1) // tp_finalize was called -# define _PyGC_BITS_UNREACHABLE (1<<2) -# define _PyGC_BITS_FROZEN (1<<3) -# define _PyGC_BITS_SHARED (1<<4) -# define _PyGC_BITS_ALIVE (1<<5) // Reachable from a known root. -# define _PyGC_BITS_DEFERRED (1<<6) // Use deferred reference counting -#endif - -#ifdef Py_GIL_DISABLED - -static inline void -_PyObject_SET_GC_BITS(PyObject *op, uint8_t new_bits) -{ - uint8_t bits = _Py_atomic_load_uint8_relaxed(&op->ob_gc_bits); - _Py_atomic_store_uint8_relaxed(&op->ob_gc_bits, bits | new_bits); -} - -static inline int -_PyObject_HAS_GC_BITS(PyObject *op, uint8_t bits) -{ - return (_Py_atomic_load_uint8_relaxed(&op->ob_gc_bits) & bits) != 0; -} - -static inline void -_PyObject_CLEAR_GC_BITS(PyObject *op, uint8_t bits_to_clear) -{ - uint8_t bits = _Py_atomic_load_uint8_relaxed(&op->ob_gc_bits); - _Py_atomic_store_uint8_relaxed(&op->ob_gc_bits, bits & ~bits_to_clear); -} - -#endif - -/* True if the object is currently tracked by the GC. */ -static inline int _PyObject_GC_IS_TRACKED(PyObject *op) { -#ifdef Py_GIL_DISABLED - return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - return (gc->_gc_next != 0); -#endif -} -#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op)) - -/* True if the object may be tracked by the GC in the future, or already is. - This can be useful to implement some optimizations. */ -static inline int _PyObject_GC_MAY_BE_TRACKED(PyObject *obj) { - if (!PyObject_IS_GC(obj)) { - return 0; - } - if (PyTuple_CheckExact(obj)) { - return _PyObject_GC_IS_TRACKED(obj); - } - return 1; -} - -#ifdef Py_GIL_DISABLED - -/* True if memory the object references is shared between - * multiple threads and needs special purpose when freeing - * those references due to the possibility of in-flight - * lock-free reads occurring. The object is responsible - * for calling _PyMem_FreeDelayed on the referenced - * memory. */ -static inline int _PyObject_GC_IS_SHARED(PyObject *op) { - return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_SHARED); -} -#define _PyObject_GC_IS_SHARED(op) _PyObject_GC_IS_SHARED(_Py_CAST(PyObject*, op)) - -static inline void _PyObject_GC_SET_SHARED(PyObject *op) { - _PyObject_SET_GC_BITS(op, _PyGC_BITS_SHARED); -} -#define _PyObject_GC_SET_SHARED(op) _PyObject_GC_SET_SHARED(_Py_CAST(PyObject*, op)) - -#endif - -/* Bit flags for _gc_prev */ -/* Bit 0 is set when tp_finalize is called */ -#define _PyGC_PREV_MASK_FINALIZED ((uintptr_t)1) -/* Bit 1 is set when the object is in generation which is GCed currently. */ -#define _PyGC_PREV_MASK_COLLECTING ((uintptr_t)2) - -/* Bit 0 in _gc_next is the old space bit. - * It is set as follows: - * Young: gcstate->visited_space - * old[0]: 0 - * old[1]: 1 - * permanent: 0 - * - * During a collection all objects handled should have the bit set to - * gcstate->visited_space, as objects are moved from the young gen - * and the increment into old[gcstate->visited_space]. - * When object are moved from the pending space, old[gcstate->visited_space^1] - * into the increment, the old space bit is flipped. -*/ -#define _PyGC_NEXT_MASK_OLD_SPACE_1 1 - -#define _PyGC_PREV_SHIFT 2 -#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT) - -/* set for debugging information */ -#define _PyGC_DEBUG_STATS (1<<0) /* print collection statistics */ -#define _PyGC_DEBUG_COLLECTABLE (1<<1) /* print collectable objects */ -#define _PyGC_DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */ -#define _PyGC_DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */ -#define _PyGC_DEBUG_LEAK _PyGC_DEBUG_COLLECTABLE | \ - _PyGC_DEBUG_UNCOLLECTABLE | \ - _PyGC_DEBUG_SAVEALL - -typedef enum { - // GC was triggered by heap allocation - _Py_GC_REASON_HEAP, - - // GC was called during shutdown - _Py_GC_REASON_SHUTDOWN, - - // GC was called by gc.collect() or PyGC_Collect() - _Py_GC_REASON_MANUAL -} _PyGC_Reason; - -// Lowest bit of _gc_next is used for flags only in GC. -// But it is always 0 for normal code. -static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) { - uintptr_t next = gc->_gc_next & _PyGC_PREV_MASK; - return (PyGC_Head*)next; -} -static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) { - uintptr_t unext = (uintptr_t)next; - assert((unext & ~_PyGC_PREV_MASK) == 0); - gc->_gc_next = (gc->_gc_next & ~_PyGC_PREV_MASK) | unext; -} - -// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags. -static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) { - uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK); - return (PyGC_Head*)prev; -} - -static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) { - uintptr_t uprev = (uintptr_t)prev; - assert((uprev & ~_PyGC_PREV_MASK) == 0); - gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev); -} - -static inline int _PyGC_FINALIZED(PyObject *op) { -#ifdef Py_GIL_DISABLED - return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_FINALIZED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - return ((gc->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0); -#endif -} -static inline void _PyGC_SET_FINALIZED(PyObject *op) { -#ifdef Py_GIL_DISABLED - _PyObject_SET_GC_BITS(op, _PyGC_BITS_FINALIZED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - gc->_gc_prev |= _PyGC_PREV_MASK_FINALIZED; -#endif -} -static inline void _PyGC_CLEAR_FINALIZED(PyObject *op) { -#ifdef Py_GIL_DISABLED - _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_FINALIZED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - gc->_gc_prev &= ~_PyGC_PREV_MASK_FINALIZED; -#endif -} - -extern void _Py_ScheduleGC(PyThreadState *tstate); - -#ifndef Py_GIL_DISABLED -extern void _Py_TriggerGC(struct _gc_runtime_state *gcstate); -#endif - - -/* Tell the GC to track this object. - * - * The object must not be tracked by the GC. - * - * NB: While the object is tracked by the collector, it must be safe to call the - * ob_traverse method. - * - * 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. - * - * See also the public PyObject_GC_Track() function. - */ -static inline void _PyObject_GC_TRACK( -// The preprocessor removes _PyObject_ASSERT_FROM() calls if NDEBUG is defined -#ifndef NDEBUG - const char *filename, int lineno, -#endif - PyObject *op) -{ - _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op), - "object already tracked by the garbage collector", - filename, lineno, __func__); -#ifdef Py_GIL_DISABLED - _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - _PyObject_ASSERT_FROM(op, - (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0, - "object is in generation which is garbage collected", - filename, lineno, __func__); - - struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc; - PyGC_Head *generation0 = &gcstate->young.head; - PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev); - _PyGCHead_SET_NEXT(last, gc); - _PyGCHead_SET_PREV(gc, last); - uintptr_t not_visited = 1 ^ gcstate->visited_space; - gc->_gc_next = ((uintptr_t)generation0) | not_visited; - generation0->_gc_prev = (uintptr_t)gc; - gcstate->young.count++; /* number of tracked GC objects */ - gcstate->heap_size++; - if (gcstate->young.count > gcstate->young.threshold) { - _Py_TriggerGC(gcstate); - } -#endif -} - -/* Tell the GC to stop tracking this object. - * - * Internal note: This may be called while GC. So _PyGC_PREV_MASK_COLLECTING - * must be cleared. But _PyGC_PREV_MASK_FINALIZED bit is kept. - * - * The object must be tracked by the GC. - * - * See also the public PyObject_GC_UnTrack() which accept an object which is - * not tracked. - */ -static inline void _PyObject_GC_UNTRACK( -// The preprocessor removes _PyObject_ASSERT_FROM() calls if NDEBUG is defined -#ifndef NDEBUG - const char *filename, int lineno, -#endif - PyObject *op) -{ - _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op), - "object not tracked by the garbage collector", - filename, lineno, __func__); - -#ifdef Py_GIL_DISABLED - _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED); -#else - PyGC_Head *gc = _Py_AS_GC(op); - PyGC_Head *prev = _PyGCHead_PREV(gc); - PyGC_Head *next = _PyGCHead_NEXT(gc); - _PyGCHead_SET_NEXT(prev, next); - _PyGCHead_SET_PREV(next, prev); - gc->_gc_next = 0; - gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED; - struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc; - if (gcstate->young.count > 0) { - gcstate->young.count--; - } - gcstate->heap_size--; -#endif -} - - - -/* - 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. -*/ - -extern void _PyGC_InitState(struct _gc_runtime_state *); - -extern Py_ssize_t _PyGC_Collect(PyThreadState *tstate, int generation, _PyGC_Reason reason); -extern void _PyGC_CollectNoFail(PyThreadState *tstate); - -/* Freeze objects tracked by the GC and ignore them in future collections. */ -extern void _PyGC_Freeze(PyInterpreterState *interp); -/* Unfreezes objects placing them in the oldest generation */ -extern void _PyGC_Unfreeze(PyInterpreterState *interp); -/* Number of frozen objects */ -extern Py_ssize_t _PyGC_GetFreezeCount(PyInterpreterState *interp); - -extern PyObject *_PyGC_GetObjects(PyInterpreterState *interp, int generation); -extern PyObject *_PyGC_GetReferrers(PyInterpreterState *interp, PyObject *objs); - -// Functions to clear types free lists -extern void _PyGC_ClearAllFreeLists(PyInterpreterState *interp); -extern void _Py_RunGC(PyThreadState *tstate); - -union _PyStackRef; - -// GC visit callback for tracked interpreter frames -extern int _PyGC_VisitFrameStack(_PyInterpreterFrame *frame, visitproc visit, void *arg); -extern int _PyGC_VisitStackRef(union _PyStackRef *ref, visitproc visit, void *arg); - -#ifdef Py_GIL_DISABLED -extern void _PyGC_VisitObjectsWorldStopped(PyInterpreterState *interp, - gcvisitobjects_t callback, void *arg); -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GC_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_genobject.h b/Python314_4_x86_Template/include/internal/pycore_genobject.h deleted file mode 100644 index c1fc3511f..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_genobject.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef Py_INTERNAL_GENOBJECT_H -#define Py_INTERNAL_GENOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_interpframe_structs.h" // _PyGenObject - -#include <stddef.h> // offsetof() - - -static inline -PyGenObject *_PyGen_GetGeneratorFromFrame(_PyInterpreterFrame *frame) -{ - assert(frame->owner == FRAME_OWNED_BY_GENERATOR); - size_t offset_in_gen = offsetof(PyGenObject, gi_iframe); - return (PyGenObject *)(((char *)frame) - offset_in_gen); -} - -PyAPI_FUNC(PyObject *)_PyGen_yf(PyGenObject *); -extern void _PyGen_Finalize(PyObject *self); - -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); - -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); - -PyAPI_FUNC(PyObject *)_PyCoro_GetAwaitableIter(PyObject *o); -extern PyObject *_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *); - -extern PyTypeObject _PyCoroWrapper_Type; -extern PyTypeObject _PyAsyncGenWrappedValue_Type; -extern PyTypeObject _PyAsyncGenAThrow_Type; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GENOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_getopt.h b/Python314_4_x86_Template/include/internal/pycore_getopt.h deleted file mode 100644 index 7f0dd13ae..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_getopt.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef Py_INTERNAL_PYGETOPT_H -#define Py_INTERNAL_PYGETOPT_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern int _PyOS_opterr; -extern Py_ssize_t _PyOS_optind; -extern const wchar_t *_PyOS_optarg; - -extern void _PyOS_ResetGetOpt(void); - -typedef struct { - const wchar_t *name; - int has_arg; - int val; -} _PyOS_LongOption; - -extern int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex); - -#endif /* !Py_INTERNAL_PYGETOPT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_gil.h b/Python314_4_x86_Template/include/internal/pycore_gil.h deleted file mode 100644 index a2de50773..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_gil.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef Py_INTERNAL_GIL_H -#define Py_INTERNAL_GIL_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_condvar.h" // PyCOND_T - -#ifndef Py_HAVE_CONDVAR -# error You need either a POSIX-compatible or a Windows system! -#endif - -/* Enable if you want to force the switching of threads at least - every `interval`. */ -#undef FORCE_SWITCHING -#define FORCE_SWITCHING - -struct _gil_runtime_state { -#ifdef Py_GIL_DISABLED - /* If this GIL is disabled, enabled == 0. - - If this GIL is enabled transiently (most likely to initialize a module - of unknown safety), enabled indicates the number of active transient - requests. - - If this GIL is enabled permanently, enabled == INT_MAX. - - It must not be modified directly; use _PyEval_EnableGILTransiently(), - _PyEval_EnableGILPermanently(), and _PyEval_DisableGIL() - - It is always read and written atomically, but a thread can assume its - value will be stable as long as that thread is attached or knows that no - other threads are attached (e.g., during a stop-the-world.). */ - int enabled; -#endif - /* microseconds (the Python API uses seconds, though) */ - unsigned long interval; - /* Last PyThreadState holding / having held the GIL. This helps us - know whether anyone else was scheduled after we dropped the GIL. */ - PyThreadState* last_holder; - /* Whether the GIL is already taken (-1 if uninitialized). This is - atomic because it can be read without any lock taken in ceval.c. */ - int locked; - /* Number of GIL switches since the beginning. */ - unsigned long switch_number; - /* This condition variable allows one or several threads to wait - until the GIL is released. In addition, the mutex also protects - the above variables. */ - PyCOND_T cond; - PyMUTEX_T mutex; -#ifdef FORCE_SWITCHING - /* This condition variable helps the GIL-releasing thread wait for - a GIL-awaiting thread to be scheduled and take the GIL. */ - PyCOND_T switch_cond; - PyMUTEX_T switch_mutex; -#endif -}; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GIL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_global_objects.h b/Python314_4_x86_Template/include/internal/pycore_global_objects.h deleted file mode 100644 index 13251d467..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_global_objects.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef Py_INTERNAL_GLOBAL_OBJECTS_H -#define Py_INTERNAL_GLOBAL_OBJECTS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -// Only immutable objects should be considered runtime-global. -// All others must be per-interpreter. - -#define _Py_GLOBAL_OBJECT(NAME) \ - _PyRuntime.static_objects.NAME -#define _Py_SINGLETON(NAME) \ - _Py_GLOBAL_OBJECT(singletons.NAME) - - -#define _Py_INTERP_CACHED_OBJECT(interp, NAME) \ - (interp)->cached_objects.NAME - - -#define _Py_INTERP_STATIC_OBJECT(interp, NAME) \ - (interp)->static_objects.NAME -#define _Py_INTERP_SINGLETON(interp, NAME) \ - _Py_INTERP_STATIC_OBJECT(interp, singletons.NAME) - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GLOBAL_OBJECTS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_global_objects_fini_generated.h b/Python314_4_x86_Template/include/internal/pycore_global_objects_fini_generated.h deleted file mode 100644 index 599785837..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_global_objects_fini_generated.h +++ /dev/null @@ -1,1592 +0,0 @@ -#ifndef Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H -#define Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_DEBUG -static inline void -_PyStaticObject_CheckRefcnt(PyObject *obj) { - if (!_Py_IsImmortal(obj)) { - fprintf(stderr, "Immortal Object has less refcnt than expected.\n"); - _PyObject_Dump(obj); - } -} -#endif - -/* The following is auto-generated by Tools/build/generate_global_objects.py. */ -#ifdef Py_DEBUG -static inline void -_PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { - /* generated runtime-global */ - // (see pycore_runtime_init_generated.h) - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -5]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -4]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -3]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -2]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -1]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 0]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 1]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 2]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 3]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 4]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 5]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 6]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 7]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 8]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 9]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 10]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 11]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 12]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 13]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 14]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 15]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 16]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 17]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 18]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 19]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 20]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 21]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 22]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 23]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 24]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 25]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 26]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 27]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 28]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 29]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 30]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 31]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 32]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 33]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 34]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 35]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 36]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 37]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 38]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 39]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 40]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 41]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 42]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 43]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 44]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 45]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 46]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 47]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 48]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 49]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 50]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 51]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 52]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 53]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 54]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 55]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 56]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 57]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 58]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 59]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 60]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 61]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 62]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 63]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 64]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 65]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 66]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 67]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 68]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 69]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 70]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 71]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 72]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 73]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 74]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 75]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 76]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 77]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 78]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 79]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 80]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 81]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 82]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 83]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 84]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 85]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 86]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 87]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 88]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 89]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 90]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 91]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 92]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 93]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 94]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 95]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 96]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 97]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 98]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 99]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 100]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 101]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 102]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 103]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 104]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 105]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 106]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 107]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 108]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 109]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 110]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 111]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 112]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 113]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 114]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 115]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 116]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 117]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 118]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 119]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 120]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 121]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 122]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 123]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 124]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 125]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 126]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 127]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 129]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 130]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 131]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 132]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 133]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 134]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 135]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 136]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 137]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 138]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 139]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 140]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 141]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 142]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 143]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 144]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 145]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 146]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 147]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 148]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 149]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 150]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 151]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 152]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 153]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 154]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 155]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 156]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 157]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 158]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 159]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 160]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 161]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 162]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 163]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 164]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 165]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 166]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 167]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 168]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 169]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 170]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 171]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 172]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 173]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 174]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 175]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 176]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 177]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 178]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 179]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 180]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 181]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 182]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 183]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 184]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 185]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 186]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 187]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 188]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 189]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 190]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 191]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 192]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 193]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 194]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 195]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 196]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 197]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 198]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 199]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 200]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 201]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 202]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 203]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 204]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 205]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 206]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 207]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 208]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 209]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 210]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 211]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 212]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 213]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 214]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 215]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 216]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 217]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 218]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 219]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 220]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 221]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 222]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 223]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 224]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 225]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 226]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 227]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 228]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 229]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 230]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 231]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 232]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 233]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 234]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 235]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 236]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 237]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 238]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 239]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 240]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 241]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 242]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 243]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 244]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 245]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 246]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 247]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 248]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 249]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 250]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 251]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 252]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 253]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 254]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 255]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 256]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[0]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[1]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[2]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[3]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[4]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[5]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[6]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[7]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[8]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[9]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[10]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[11]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[12]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[13]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[14]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[15]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[16]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[17]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[18]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[19]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[20]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[21]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[22]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[23]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[24]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[25]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[26]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[27]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[28]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[29]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[30]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[31]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[32]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[33]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[34]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[35]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[36]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[37]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[38]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[39]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[40]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[41]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[42]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[43]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[44]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[45]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[46]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[47]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[48]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[49]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[50]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[51]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[52]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[53]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[54]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[55]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[56]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[57]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[58]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[59]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[60]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[61]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[62]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[63]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[64]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[65]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[66]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[67]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[68]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[69]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[70]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[71]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[72]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[73]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[74]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[75]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[76]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[77]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[78]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[79]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[80]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[81]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[82]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[83]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[84]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[85]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[86]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[87]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[88]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[89]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[90]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[91]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[92]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[93]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[94]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[95]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[96]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[97]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[98]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[99]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[100]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[101]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[102]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[103]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[104]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[105]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[106]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[107]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[108]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[109]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[110]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[111]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[112]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[113]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[114]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[115]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[116]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[117]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[118]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[119]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[120]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[121]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[122]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[123]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[124]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[125]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[126]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[127]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[129]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[130]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[131]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[132]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[133]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[134]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[135]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[136]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[137]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[138]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[139]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[140]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[141]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[142]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[143]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[144]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[145]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[146]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[147]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[148]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[149]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[150]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[151]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[152]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[153]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[154]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[155]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[156]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[157]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[158]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[159]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[160]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[161]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[162]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[163]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[164]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[165]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[166]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[167]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[168]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[169]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[170]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[171]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[172]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[173]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[174]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[175]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[176]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[177]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[178]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[179]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[180]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[181]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[182]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[183]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[184]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[185]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[186]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[187]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[188]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[189]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[190]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[191]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[192]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[193]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[194]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[195]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[196]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[197]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[198]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[199]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[200]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[201]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[202]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[203]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[204]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[205]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[206]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[207]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[208]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[209]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[210]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[211]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[212]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[213]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[214]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[215]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[216]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[217]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[218]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[219]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[220]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[221]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[222]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[223]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[224]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[225]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[226]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[227]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[228]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[229]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[230]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[231]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[232]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[233]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[234]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[235]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[236]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[237]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[238]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[239]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[240]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[241]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[242]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[243]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[244]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[245]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[246]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[247]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[248]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[249]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[250]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[251]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[252]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[253]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[254]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[255]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_dictcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_genexpr)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_lambda)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_listcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_module)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_null)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_setcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_string)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_unknown)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_close_br)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_open_br)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_percent)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(defaults)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dot_locals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(empty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(format)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(generic_base)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(json_decoder)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(kwdefaults)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(list_err)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(str_replace_inf)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(type_params)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(utf_8)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(CANCELLED)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(FINISHED)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(False)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(JSONDecodeError)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(PENDING)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(Py_Repr)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(TextIOWrapper)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_WindowsConsoleIO)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abc_tpflags__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abs__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abstractmethods__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__add__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aenter__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aexit__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aiter__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__all__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__and__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__anext__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__annotate__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__annotate_func__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__annotations__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__annotations_cache__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__args__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__await__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bases__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bool__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__buffer__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__build_class__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__builtins__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bytes__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__call__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__cantrace__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ceil__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__class__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__class_getitem__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classcell__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classdict__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classdictcell__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__complex__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__conditional_annotations__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__contains__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ctypes_from_outparam__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__del__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delattr__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delete__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delitem__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dict__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dictoffset__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dir__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__divmod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__doc__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__enter__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__eq__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__exit__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__file__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__firstlineno__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__float__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__floor__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__floordiv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__format__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__fspath__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ge__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__get__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getattr__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getattribute__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getinitargs__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getitem__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getnewargs__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getnewargs_ex__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getstate__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__gt__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__hash__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iadd__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iand__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ifloordiv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ilshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imatmul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__import__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__index__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__init__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__init_subclass__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__instancecheck__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__int__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__invert__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ior__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ipow__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__irshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__isabstractmethod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__isub__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iter__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__itruediv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ixor__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__le__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__len__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__length_hint__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lltrace__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__loader__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lt__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__main__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__match_args__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__matmul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__missing__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__module__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mro_entries__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__name__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ne__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__neg__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__new__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__newobj__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__newobj_ex__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__next__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__notes__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__or__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__orig_class__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__origin__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__package__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__parameters__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__path__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__pos__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__pow__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__prepare__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__qualname__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__radd__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rand__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rdivmod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reduce__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reduce_ex__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__release_buffer__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__repr__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reversed__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rfloordiv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rlshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmatmul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmod__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmul__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ror__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__round__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rpow__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rrshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rshift__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rsub__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rtruediv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rxor__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__set__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__set_name__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setattr__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setitem__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setstate__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__sizeof__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__slotnames__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__slots__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__spec__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__static_attributes__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__str__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__sub__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__subclasscheck__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__subclasshook__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__truediv__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__trunc__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__type_params__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_is_unpacked_typevartuple__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_prepare_subst__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_subst__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_unpacked_tuple_args__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__warningregistry__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__weaklistoffset__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__weakref__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__xor__)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_abc_impl)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_abstract_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_active)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_anonymous_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_argtypes_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_as_parameter_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_asyncio_future_blocking)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_blksize)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_bootstrap)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_check_retval_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_dealloc_warn)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_feature_version)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_field_types)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_fields_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_filters)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_finalizing)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_find_and_load)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_fix_up_module)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_flags_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_get_sourcefile)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_handle_fromlist)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_initializing)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_internal_use)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_io)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_is_text_encoding)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_isatty_open_only)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_length_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_limbo)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_lock_unlock_module)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_loop)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_needs_com_addref_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_only_immortal)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_restype_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_showwarnmsg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_shutdown)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_slotnames)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_strptime)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_strptime_datetime_date)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_strptime_datetime_datetime)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_strptime_datetime_time)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_type_)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_uninitialized_submodules)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_warn_unawaited_coroutine)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_xoptions)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(abs_tol)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(access)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(aclose)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(add)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(add_done_callback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_child)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_parent)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(aggregate_class)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(alias)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(align)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(all)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(all_threads)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(allow_code)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(any)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(append)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argdefs)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(args)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arguments)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argv)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(as_integer_ratio)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(asend)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ast)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(athrow)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(attribute)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(authorizer_callback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(autocommit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(backtick)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(base)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(before)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(big)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(binary_form)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bit_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bit_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(block)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bound)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer_callback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffering)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffers)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bufsize)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(builtins)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(byte_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(byte_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(byteorder)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes_per_sep)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_call)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_exception)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_parameter_type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_return)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cached_datetime_module)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cached_statements)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cadata)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cafile)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call_exception_handler)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call_soon)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(callback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cancel)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(capath)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(category)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cb_type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(certfile)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(check_same_thread)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(clear)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(close)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closed)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closefd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closure)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_argcount)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_cellvars)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_code)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_consts)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_exceptiontable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_filename)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_firstlineno)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_flags)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_freevars)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_kwonlyargcount)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_linetable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_names)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_nlocals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_posonlyargcount)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_qualname)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_stacksize)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_varnames)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(code)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(col_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(command)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(comment_factory)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(compile_mode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(consts)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(context)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(contravariant)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(conversion)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cookie)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(copy)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(copyreg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(coro)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(count)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(covariant)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cwd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(d_parameter_type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(data)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(database)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(day)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(debug)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(decode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(decoder)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(default)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(defaultaction)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(delete)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(depth)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(desired_access)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(detect_types)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(deterministic)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(device)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dict)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dictcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(difference_update)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digest)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digest_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digestmod)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dir_fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(discard)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dispatch_table)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(displayhook)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dklen)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(doc)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(done)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dont_inherit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst_dir_fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eager_start)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(effective_ids)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(element_factory)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(encode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(encoding)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end_col_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end_lineno)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(endpos)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(entrypoint)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(env)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(errors)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(event)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eventmask)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_value)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(excepthook)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exception)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(existing_file_name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(expression)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(extend)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(extra_tokens)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(facility)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(factory)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(false)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(family)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fanout)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fd2)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fdel)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fget)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fields)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(file)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(file_actions)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filename)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fileno)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filepath)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fillvalue)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filter)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filters)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(final)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(find_class)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fix_imports)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(flags)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(flush)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fold)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(follow_symlinks)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(format)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(format_spec)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(frame_buffer)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(from_param)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromlist)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromtimestamp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromutc)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(func)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(future)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(generation)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(genexpr)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_debug)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_event_loop)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_loop)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_source)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(getattr)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(getstate)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(gid)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(globals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(groupindex)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(groups)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(handle)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(handle_seq)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(has_location)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hash_name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(header)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(headers)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hi)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hook)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hour)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(id)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ident)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(identity_hint)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ignore)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(imag)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(importlib)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(in_fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(incoming)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(index)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(indexgroup)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inf)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(infer_variance)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inherit_handle)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inheritable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_bytes)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_owner)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_state)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_value)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initval)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inner_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(input)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(insert_comments)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(insert_pis)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(instructions)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(intern)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(intersection)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(interval)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(io)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(is_compress)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(is_raw)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(is_running)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(is_struct)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isatty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isinstance)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isoformat)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isolation_level)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(istext)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(item)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(items)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iter)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iterable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iterations)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(join)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(jump)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keepends)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(key)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keyfile)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keys)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kind)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw2)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kwdefaults)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(label)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lambda)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_exc)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_node)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_traceback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_value)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(latin1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(leaf_size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(len)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(length)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(level)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(limit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(line)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(line_buffering)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lineno)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(listcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(little)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lo)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(locale)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(locals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(logoption)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(loop)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(manual_reset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mapping)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(match)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(max_length)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxdigits)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxevents)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxlen)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxmem)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxsplit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxvalue)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(memLevel)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(memlimit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(message)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(metaclass)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(metadata)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(method)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(microsecond)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(milliseconds)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(minute)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mod)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(module)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(module_globals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(modules)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(month)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mro)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(msg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mutex)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mycmp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_arg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_fields)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_sequence_fields)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_unnamed_fields)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(name_from)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(namespace_separator)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(namespaces)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(narg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ndigits)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nested)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(new_file_name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(new_limit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(newline)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(newlines)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(next)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nlocals)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(node_depth)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(node_offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ns)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nstype)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nt)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(null)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(number)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(obj)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(object)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset_dst)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset_src)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(on_type_read)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(onceregistry)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(only_active_thread)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(only_keys)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(oparg)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(opcode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(open)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(opener)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(operation)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(optimize)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(options)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(order)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(origin)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(out_fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(outgoing)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(outpath)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(overlapped)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(owner)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pages)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(parameter)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(parent)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(password)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(path)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pattern)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(peek)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(persistent_id)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(persistent_load)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(person)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pi_factory)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pid)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(policy)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos2)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(posix)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(print_file_and_line)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(priority)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress_handler)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress_routine)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(proto)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(protocol)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ps1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ps2)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(query)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(quotetabs)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(raw)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readall)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readinto)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readinto1)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readline)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readonly)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(real)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reducer_override)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(registry)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(rel_tol)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(release)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reload)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(repl)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(replace)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reserved)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reset)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(resetids)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(return)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reverse)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reversed)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(salt)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sched_priority)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(scheduler)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(script)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(second)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(security_attributes)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seek)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seekable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(selectors)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(self)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(send)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sep)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sequence)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(server_hostname)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(server_side)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(session)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setcomp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setpgroup)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsid)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsigdef)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsigmask)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setstate)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(shape)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(show_cmd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(signed)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(size)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sizehint)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(skip_file_prefixes)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sleep)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sock)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sort)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(source)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(source_traceback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(spam)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(src)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(src_dir_fd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stacklevel)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(start)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(statement)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(status)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stderr)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stdin)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stdout)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(step)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(steps)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(store_name)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strategy)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strftime)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strict)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strict_mode)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(string)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sub_key)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(subcalls)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(symmetric_difference_update)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tabsize)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tag)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(target)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(target_is_directory)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(task)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_frame)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_lasti)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_lineno)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_next)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tell)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(template)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(term)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(text)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(threading)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(throw)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timeout)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timer)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(times)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timetuple)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timeunit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(top)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trace_callback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(traceback)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trailers)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(translate)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(true)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(truncate)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(twice)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(txt)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(type)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(type_params)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tz)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tzinfo)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tzname)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(uid)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(unlink)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(unraisablehook)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(uri)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(usedforsecurity)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(value)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(values)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(version)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(volume)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(wait_all)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warn_on_full_buffer)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnings)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnoptions)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(wbits)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(week)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(weekday)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(which)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(who)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(withdata)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(writable)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write_through)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(year)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(zdict)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(zstd_dict)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[0]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[1]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[2]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[3]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[4]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[5]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[6]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[7]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[8]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[9]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[10]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[11]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[12]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[13]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[14]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[15]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[16]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[17]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[18]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[19]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[20]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[21]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[22]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[23]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[24]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[25]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[26]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[27]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[28]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[29]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[30]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[31]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[32]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[33]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[34]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[35]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[36]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[37]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[38]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[39]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[40]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[41]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[42]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[43]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[44]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[45]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[46]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[47]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[48]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[49]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[50]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[51]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[52]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[53]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[54]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[55]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[56]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[57]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[58]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[59]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[60]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[61]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[62]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[63]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[64]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[65]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[66]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[67]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[68]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[69]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[70]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[71]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[72]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[73]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[74]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[75]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[76]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[77]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[78]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[79]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[80]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[81]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[82]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[83]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[84]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[85]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[86]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[87]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[88]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[89]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[90]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[91]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[92]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[93]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[94]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[95]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[96]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[97]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[98]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[99]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[100]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[101]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[102]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[103]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[104]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[105]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[106]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[107]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[108]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[109]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[110]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[111]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[112]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[113]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[114]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[115]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[116]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[117]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[118]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[119]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[120]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[121]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[122]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[123]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[124]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[125]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[126]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[127]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[128 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[129 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[130 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[131 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[132 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[133 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[134 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[135 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[136 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[137 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[138 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[139 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[140 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[141 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[142 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[143 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[144 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[145 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[146 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[147 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[148 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[149 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[150 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[151 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[152 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[153 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[154 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[155 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[156 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[157 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[158 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[159 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[160 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[161 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[162 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[163 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[164 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[165 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[166 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[167 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[168 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[169 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[170 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[171 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[172 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[173 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[174 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[175 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[176 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[177 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[178 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[179 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[180 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[181 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[182 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[183 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[184 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[185 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[186 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[187 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[188 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[189 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[190 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[191 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[192 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[193 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[194 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[195 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[196 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[197 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[198 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[199 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[200 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[201 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[202 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[203 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[204 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[205 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[206 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[207 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[208 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[209 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[210 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[211 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[212 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[213 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[214 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[215 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[216 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[217 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[218 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[219 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[220 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[221 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[222 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[223 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[224 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[225 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[226 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[227 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[228 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[229 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[230 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[231 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[232 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[233 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[234 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[235 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[236 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[237 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[238 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[239 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[240 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[241 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[242 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[243 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[244 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[245 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[246 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[247 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[248 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[249 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[250 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[251 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[252 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[253 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[254 - 128]); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[255 - 128]); - /* non-generated */ - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_empty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(tuple_empty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(hamt_bitmap_node_empty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_INTERP_SINGLETON(interp, hamt_empty)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(context_token_missing)); -} -#endif // Py_DEBUG -/* End auto-generated code */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_global_strings.h b/Python314_4_x86_Template/include/internal/pycore_global_strings.h deleted file mode 100644 index bab5da70f..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_global_strings.h +++ /dev/null @@ -1,854 +0,0 @@ -#ifndef Py_INTERNAL_GLOBAL_STRINGS_H -#define Py_INTERNAL_GLOBAL_STRINGS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_global_objects.h" // struct _Py_SINGLETON - -// The data structure & init here are inspired by Tools/build/deepfreeze.py. - -// All field names generated by ASCII_STR() have a common prefix, -// to help avoid collisions with keywords, macros, etc. - -#define STRUCT_FOR_ASCII_STR(LITERAL) \ - struct { \ - PyASCIIObject _ascii; \ - uint8_t _data[sizeof(LITERAL)]; \ - } -#define STRUCT_FOR_STR(NAME, LITERAL) \ - STRUCT_FOR_ASCII_STR(LITERAL) _py_ ## NAME; -#define STRUCT_FOR_ID(NAME) \ - STRUCT_FOR_ASCII_STR(#NAME) _py_ ## NAME; - -// XXX Order by frequency of use? - -/* The following is auto-generated by Tools/build/generate_global_objects.py. */ -struct _Py_global_strings { - struct { - STRUCT_FOR_STR(anon_dictcomp, "<dictcomp>") - STRUCT_FOR_STR(anon_genexpr, "<genexpr>") - STRUCT_FOR_STR(anon_lambda, "<lambda>") - STRUCT_FOR_STR(anon_listcomp, "<listcomp>") - STRUCT_FOR_STR(anon_module, "<module>") - STRUCT_FOR_STR(anon_null, "<NULL>") - STRUCT_FOR_STR(anon_setcomp, "<setcomp>") - STRUCT_FOR_STR(anon_string, "<string>") - STRUCT_FOR_STR(anon_unknown, "<unknown>") - STRUCT_FOR_STR(dbl_close_br, "}}") - STRUCT_FOR_STR(dbl_open_br, "{{") - STRUCT_FOR_STR(dbl_percent, "%%") - STRUCT_FOR_STR(defaults, ".defaults") - STRUCT_FOR_STR(dot_locals, ".<locals>") - STRUCT_FOR_STR(empty, "") - STRUCT_FOR_STR(format, ".format") - STRUCT_FOR_STR(generic_base, ".generic_base") - STRUCT_FOR_STR(json_decoder, "json.decoder") - STRUCT_FOR_STR(kwdefaults, ".kwdefaults") - STRUCT_FOR_STR(list_err, "list index out of range") - STRUCT_FOR_STR(str_replace_inf, "1e309") - STRUCT_FOR_STR(type_params, ".type_params") - STRUCT_FOR_STR(utf_8, "utf-8") - } literals; - - struct { - STRUCT_FOR_ID(CANCELLED) - STRUCT_FOR_ID(FINISHED) - STRUCT_FOR_ID(False) - STRUCT_FOR_ID(JSONDecodeError) - STRUCT_FOR_ID(PENDING) - STRUCT_FOR_ID(Py_Repr) - STRUCT_FOR_ID(TextIOWrapper) - STRUCT_FOR_ID(True) - STRUCT_FOR_ID(WarningMessage) - STRUCT_FOR_ID(_WindowsConsoleIO) - STRUCT_FOR_ID(__IOBase_closed) - STRUCT_FOR_ID(__abc_tpflags__) - STRUCT_FOR_ID(__abs__) - STRUCT_FOR_ID(__abstractmethods__) - STRUCT_FOR_ID(__add__) - STRUCT_FOR_ID(__aenter__) - STRUCT_FOR_ID(__aexit__) - STRUCT_FOR_ID(__aiter__) - STRUCT_FOR_ID(__all__) - STRUCT_FOR_ID(__and__) - STRUCT_FOR_ID(__anext__) - STRUCT_FOR_ID(__annotate__) - STRUCT_FOR_ID(__annotate_func__) - STRUCT_FOR_ID(__annotations__) - STRUCT_FOR_ID(__annotations_cache__) - STRUCT_FOR_ID(__args__) - STRUCT_FOR_ID(__await__) - STRUCT_FOR_ID(__bases__) - STRUCT_FOR_ID(__bool__) - STRUCT_FOR_ID(__buffer__) - STRUCT_FOR_ID(__build_class__) - STRUCT_FOR_ID(__builtins__) - STRUCT_FOR_ID(__bytes__) - STRUCT_FOR_ID(__call__) - STRUCT_FOR_ID(__cantrace__) - STRUCT_FOR_ID(__ceil__) - STRUCT_FOR_ID(__class__) - STRUCT_FOR_ID(__class_getitem__) - STRUCT_FOR_ID(__classcell__) - STRUCT_FOR_ID(__classdict__) - STRUCT_FOR_ID(__classdictcell__) - STRUCT_FOR_ID(__complex__) - STRUCT_FOR_ID(__conditional_annotations__) - STRUCT_FOR_ID(__contains__) - STRUCT_FOR_ID(__ctypes_from_outparam__) - STRUCT_FOR_ID(__del__) - STRUCT_FOR_ID(__delattr__) - STRUCT_FOR_ID(__delete__) - STRUCT_FOR_ID(__delitem__) - STRUCT_FOR_ID(__dict__) - STRUCT_FOR_ID(__dictoffset__) - STRUCT_FOR_ID(__dir__) - STRUCT_FOR_ID(__divmod__) - STRUCT_FOR_ID(__doc__) - STRUCT_FOR_ID(__enter__) - STRUCT_FOR_ID(__eq__) - STRUCT_FOR_ID(__exit__) - STRUCT_FOR_ID(__file__) - STRUCT_FOR_ID(__firstlineno__) - STRUCT_FOR_ID(__float__) - STRUCT_FOR_ID(__floor__) - STRUCT_FOR_ID(__floordiv__) - STRUCT_FOR_ID(__format__) - STRUCT_FOR_ID(__fspath__) - STRUCT_FOR_ID(__ge__) - STRUCT_FOR_ID(__get__) - STRUCT_FOR_ID(__getattr__) - STRUCT_FOR_ID(__getattribute__) - STRUCT_FOR_ID(__getinitargs__) - STRUCT_FOR_ID(__getitem__) - STRUCT_FOR_ID(__getnewargs__) - STRUCT_FOR_ID(__getnewargs_ex__) - STRUCT_FOR_ID(__getstate__) - STRUCT_FOR_ID(__gt__) - STRUCT_FOR_ID(__hash__) - STRUCT_FOR_ID(__iadd__) - STRUCT_FOR_ID(__iand__) - STRUCT_FOR_ID(__ifloordiv__) - STRUCT_FOR_ID(__ilshift__) - STRUCT_FOR_ID(__imatmul__) - STRUCT_FOR_ID(__imod__) - STRUCT_FOR_ID(__import__) - STRUCT_FOR_ID(__imul__) - STRUCT_FOR_ID(__index__) - STRUCT_FOR_ID(__init__) - STRUCT_FOR_ID(__init_subclass__) - STRUCT_FOR_ID(__instancecheck__) - STRUCT_FOR_ID(__int__) - STRUCT_FOR_ID(__invert__) - STRUCT_FOR_ID(__ior__) - STRUCT_FOR_ID(__ipow__) - STRUCT_FOR_ID(__irshift__) - STRUCT_FOR_ID(__isabstractmethod__) - STRUCT_FOR_ID(__isub__) - STRUCT_FOR_ID(__iter__) - STRUCT_FOR_ID(__itruediv__) - STRUCT_FOR_ID(__ixor__) - STRUCT_FOR_ID(__le__) - STRUCT_FOR_ID(__len__) - STRUCT_FOR_ID(__length_hint__) - STRUCT_FOR_ID(__lltrace__) - STRUCT_FOR_ID(__loader__) - STRUCT_FOR_ID(__lshift__) - STRUCT_FOR_ID(__lt__) - STRUCT_FOR_ID(__main__) - STRUCT_FOR_ID(__match_args__) - STRUCT_FOR_ID(__matmul__) - STRUCT_FOR_ID(__missing__) - STRUCT_FOR_ID(__mod__) - STRUCT_FOR_ID(__module__) - STRUCT_FOR_ID(__mro_entries__) - STRUCT_FOR_ID(__mul__) - STRUCT_FOR_ID(__name__) - STRUCT_FOR_ID(__ne__) - STRUCT_FOR_ID(__neg__) - STRUCT_FOR_ID(__new__) - STRUCT_FOR_ID(__newobj__) - STRUCT_FOR_ID(__newobj_ex__) - STRUCT_FOR_ID(__next__) - STRUCT_FOR_ID(__notes__) - STRUCT_FOR_ID(__or__) - STRUCT_FOR_ID(__orig_class__) - STRUCT_FOR_ID(__origin__) - STRUCT_FOR_ID(__package__) - STRUCT_FOR_ID(__parameters__) - STRUCT_FOR_ID(__path__) - STRUCT_FOR_ID(__pos__) - STRUCT_FOR_ID(__pow__) - STRUCT_FOR_ID(__prepare__) - STRUCT_FOR_ID(__qualname__) - STRUCT_FOR_ID(__radd__) - STRUCT_FOR_ID(__rand__) - STRUCT_FOR_ID(__rdivmod__) - STRUCT_FOR_ID(__reduce__) - STRUCT_FOR_ID(__reduce_ex__) - STRUCT_FOR_ID(__release_buffer__) - STRUCT_FOR_ID(__repr__) - STRUCT_FOR_ID(__reversed__) - STRUCT_FOR_ID(__rfloordiv__) - STRUCT_FOR_ID(__rlshift__) - STRUCT_FOR_ID(__rmatmul__) - STRUCT_FOR_ID(__rmod__) - STRUCT_FOR_ID(__rmul__) - STRUCT_FOR_ID(__ror__) - STRUCT_FOR_ID(__round__) - STRUCT_FOR_ID(__rpow__) - STRUCT_FOR_ID(__rrshift__) - STRUCT_FOR_ID(__rshift__) - STRUCT_FOR_ID(__rsub__) - STRUCT_FOR_ID(__rtruediv__) - STRUCT_FOR_ID(__rxor__) - STRUCT_FOR_ID(__set__) - STRUCT_FOR_ID(__set_name__) - STRUCT_FOR_ID(__setattr__) - STRUCT_FOR_ID(__setitem__) - STRUCT_FOR_ID(__setstate__) - STRUCT_FOR_ID(__sizeof__) - STRUCT_FOR_ID(__slotnames__) - STRUCT_FOR_ID(__slots__) - STRUCT_FOR_ID(__spec__) - STRUCT_FOR_ID(__static_attributes__) - STRUCT_FOR_ID(__str__) - STRUCT_FOR_ID(__sub__) - STRUCT_FOR_ID(__subclasscheck__) - STRUCT_FOR_ID(__subclasshook__) - STRUCT_FOR_ID(__truediv__) - STRUCT_FOR_ID(__trunc__) - STRUCT_FOR_ID(__type_params__) - STRUCT_FOR_ID(__typing_is_unpacked_typevartuple__) - STRUCT_FOR_ID(__typing_prepare_subst__) - STRUCT_FOR_ID(__typing_subst__) - STRUCT_FOR_ID(__typing_unpacked_tuple_args__) - STRUCT_FOR_ID(__warningregistry__) - STRUCT_FOR_ID(__weaklistoffset__) - STRUCT_FOR_ID(__weakref__) - STRUCT_FOR_ID(__xor__) - STRUCT_FOR_ID(_abc_impl) - STRUCT_FOR_ID(_abstract_) - STRUCT_FOR_ID(_active) - STRUCT_FOR_ID(_anonymous_) - STRUCT_FOR_ID(_argtypes_) - STRUCT_FOR_ID(_as_parameter_) - STRUCT_FOR_ID(_asyncio_future_blocking) - STRUCT_FOR_ID(_blksize) - STRUCT_FOR_ID(_bootstrap) - STRUCT_FOR_ID(_check_retval_) - STRUCT_FOR_ID(_dealloc_warn) - STRUCT_FOR_ID(_feature_version) - STRUCT_FOR_ID(_field_types) - STRUCT_FOR_ID(_fields_) - STRUCT_FOR_ID(_filters) - STRUCT_FOR_ID(_finalizing) - STRUCT_FOR_ID(_find_and_load) - STRUCT_FOR_ID(_fix_up_module) - STRUCT_FOR_ID(_flags_) - STRUCT_FOR_ID(_get_sourcefile) - STRUCT_FOR_ID(_handle_fromlist) - STRUCT_FOR_ID(_initializing) - STRUCT_FOR_ID(_internal_use) - STRUCT_FOR_ID(_io) - STRUCT_FOR_ID(_is_text_encoding) - STRUCT_FOR_ID(_isatty_open_only) - STRUCT_FOR_ID(_length_) - STRUCT_FOR_ID(_limbo) - STRUCT_FOR_ID(_lock_unlock_module) - STRUCT_FOR_ID(_loop) - STRUCT_FOR_ID(_needs_com_addref_) - STRUCT_FOR_ID(_only_immortal) - STRUCT_FOR_ID(_restype_) - STRUCT_FOR_ID(_showwarnmsg) - STRUCT_FOR_ID(_shutdown) - STRUCT_FOR_ID(_slotnames) - STRUCT_FOR_ID(_strptime) - STRUCT_FOR_ID(_strptime_datetime_date) - STRUCT_FOR_ID(_strptime_datetime_datetime) - STRUCT_FOR_ID(_strptime_datetime_time) - STRUCT_FOR_ID(_type_) - STRUCT_FOR_ID(_uninitialized_submodules) - STRUCT_FOR_ID(_warn_unawaited_coroutine) - STRUCT_FOR_ID(_xoptions) - STRUCT_FOR_ID(abs_tol) - STRUCT_FOR_ID(access) - STRUCT_FOR_ID(aclose) - STRUCT_FOR_ID(add) - STRUCT_FOR_ID(add_done_callback) - STRUCT_FOR_ID(after_in_child) - STRUCT_FOR_ID(after_in_parent) - STRUCT_FOR_ID(aggregate_class) - STRUCT_FOR_ID(alias) - STRUCT_FOR_ID(align) - STRUCT_FOR_ID(all) - STRUCT_FOR_ID(all_threads) - STRUCT_FOR_ID(allow_code) - STRUCT_FOR_ID(any) - STRUCT_FOR_ID(append) - STRUCT_FOR_ID(arg) - STRUCT_FOR_ID(argdefs) - STRUCT_FOR_ID(args) - STRUCT_FOR_ID(arguments) - STRUCT_FOR_ID(argv) - STRUCT_FOR_ID(as_integer_ratio) - STRUCT_FOR_ID(asend) - STRUCT_FOR_ID(ast) - STRUCT_FOR_ID(athrow) - STRUCT_FOR_ID(attribute) - STRUCT_FOR_ID(authorizer_callback) - STRUCT_FOR_ID(autocommit) - STRUCT_FOR_ID(backtick) - STRUCT_FOR_ID(base) - STRUCT_FOR_ID(before) - STRUCT_FOR_ID(big) - STRUCT_FOR_ID(binary_form) - STRUCT_FOR_ID(bit_offset) - STRUCT_FOR_ID(bit_size) - STRUCT_FOR_ID(block) - STRUCT_FOR_ID(bound) - STRUCT_FOR_ID(buffer) - STRUCT_FOR_ID(buffer_callback) - STRUCT_FOR_ID(buffer_size) - STRUCT_FOR_ID(buffering) - STRUCT_FOR_ID(buffers) - STRUCT_FOR_ID(bufsize) - STRUCT_FOR_ID(builtins) - STRUCT_FOR_ID(byte_offset) - STRUCT_FOR_ID(byte_size) - STRUCT_FOR_ID(byteorder) - STRUCT_FOR_ID(bytes) - STRUCT_FOR_ID(bytes_per_sep) - STRUCT_FOR_ID(c_call) - STRUCT_FOR_ID(c_exception) - STRUCT_FOR_ID(c_parameter_type) - STRUCT_FOR_ID(c_return) - STRUCT_FOR_ID(cached_datetime_module) - STRUCT_FOR_ID(cached_statements) - STRUCT_FOR_ID(cadata) - STRUCT_FOR_ID(cafile) - STRUCT_FOR_ID(call) - STRUCT_FOR_ID(call_exception_handler) - STRUCT_FOR_ID(call_soon) - STRUCT_FOR_ID(callback) - STRUCT_FOR_ID(cancel) - STRUCT_FOR_ID(capath) - STRUCT_FOR_ID(category) - STRUCT_FOR_ID(cb_type) - STRUCT_FOR_ID(certfile) - STRUCT_FOR_ID(check_same_thread) - STRUCT_FOR_ID(clear) - STRUCT_FOR_ID(close) - STRUCT_FOR_ID(closed) - STRUCT_FOR_ID(closefd) - STRUCT_FOR_ID(closure) - STRUCT_FOR_ID(co_argcount) - STRUCT_FOR_ID(co_cellvars) - STRUCT_FOR_ID(co_code) - STRUCT_FOR_ID(co_consts) - STRUCT_FOR_ID(co_exceptiontable) - STRUCT_FOR_ID(co_filename) - STRUCT_FOR_ID(co_firstlineno) - STRUCT_FOR_ID(co_flags) - STRUCT_FOR_ID(co_freevars) - STRUCT_FOR_ID(co_kwonlyargcount) - STRUCT_FOR_ID(co_linetable) - STRUCT_FOR_ID(co_name) - STRUCT_FOR_ID(co_names) - STRUCT_FOR_ID(co_nlocals) - STRUCT_FOR_ID(co_posonlyargcount) - STRUCT_FOR_ID(co_qualname) - STRUCT_FOR_ID(co_stacksize) - STRUCT_FOR_ID(co_varnames) - STRUCT_FOR_ID(code) - STRUCT_FOR_ID(col_offset) - STRUCT_FOR_ID(command) - STRUCT_FOR_ID(comment_factory) - STRUCT_FOR_ID(compile_mode) - STRUCT_FOR_ID(consts) - STRUCT_FOR_ID(context) - STRUCT_FOR_ID(contravariant) - STRUCT_FOR_ID(conversion) - STRUCT_FOR_ID(cookie) - STRUCT_FOR_ID(copy) - STRUCT_FOR_ID(copyreg) - STRUCT_FOR_ID(coro) - STRUCT_FOR_ID(count) - STRUCT_FOR_ID(covariant) - STRUCT_FOR_ID(cwd) - STRUCT_FOR_ID(d_parameter_type) - STRUCT_FOR_ID(data) - STRUCT_FOR_ID(database) - STRUCT_FOR_ID(day) - STRUCT_FOR_ID(debug) - STRUCT_FOR_ID(decode) - STRUCT_FOR_ID(decoder) - STRUCT_FOR_ID(default) - STRUCT_FOR_ID(defaultaction) - STRUCT_FOR_ID(delete) - STRUCT_FOR_ID(depth) - STRUCT_FOR_ID(desired_access) - STRUCT_FOR_ID(detect_types) - STRUCT_FOR_ID(deterministic) - STRUCT_FOR_ID(device) - STRUCT_FOR_ID(dict) - STRUCT_FOR_ID(dictcomp) - STRUCT_FOR_ID(difference_update) - STRUCT_FOR_ID(digest) - STRUCT_FOR_ID(digest_size) - STRUCT_FOR_ID(digestmod) - STRUCT_FOR_ID(dir_fd) - STRUCT_FOR_ID(discard) - STRUCT_FOR_ID(dispatch_table) - STRUCT_FOR_ID(displayhook) - STRUCT_FOR_ID(dklen) - STRUCT_FOR_ID(doc) - STRUCT_FOR_ID(done) - STRUCT_FOR_ID(dont_inherit) - STRUCT_FOR_ID(dst) - STRUCT_FOR_ID(dst_dir_fd) - STRUCT_FOR_ID(eager_start) - STRUCT_FOR_ID(effective_ids) - STRUCT_FOR_ID(element_factory) - STRUCT_FOR_ID(encode) - STRUCT_FOR_ID(encoding) - STRUCT_FOR_ID(end) - STRUCT_FOR_ID(end_col_offset) - STRUCT_FOR_ID(end_lineno) - STRUCT_FOR_ID(end_offset) - STRUCT_FOR_ID(endpos) - STRUCT_FOR_ID(entrypoint) - STRUCT_FOR_ID(env) - STRUCT_FOR_ID(errors) - STRUCT_FOR_ID(event) - STRUCT_FOR_ID(eventmask) - STRUCT_FOR_ID(exc_type) - STRUCT_FOR_ID(exc_value) - STRUCT_FOR_ID(excepthook) - STRUCT_FOR_ID(exception) - STRUCT_FOR_ID(existing_file_name) - STRUCT_FOR_ID(exp) - STRUCT_FOR_ID(expression) - STRUCT_FOR_ID(extend) - STRUCT_FOR_ID(extra_tokens) - STRUCT_FOR_ID(facility) - STRUCT_FOR_ID(factory) - STRUCT_FOR_ID(false) - STRUCT_FOR_ID(family) - STRUCT_FOR_ID(fanout) - STRUCT_FOR_ID(fd) - STRUCT_FOR_ID(fd2) - STRUCT_FOR_ID(fdel) - STRUCT_FOR_ID(fget) - STRUCT_FOR_ID(fields) - STRUCT_FOR_ID(file) - STRUCT_FOR_ID(file_actions) - STRUCT_FOR_ID(filename) - STRUCT_FOR_ID(fileno) - STRUCT_FOR_ID(filepath) - STRUCT_FOR_ID(fillvalue) - STRUCT_FOR_ID(filter) - STRUCT_FOR_ID(filters) - STRUCT_FOR_ID(final) - STRUCT_FOR_ID(find_class) - STRUCT_FOR_ID(fix_imports) - STRUCT_FOR_ID(flags) - STRUCT_FOR_ID(flush) - STRUCT_FOR_ID(fold) - STRUCT_FOR_ID(follow_symlinks) - STRUCT_FOR_ID(format) - STRUCT_FOR_ID(format_spec) - STRUCT_FOR_ID(frame_buffer) - STRUCT_FOR_ID(from_param) - STRUCT_FOR_ID(fromlist) - STRUCT_FOR_ID(fromtimestamp) - STRUCT_FOR_ID(fromutc) - STRUCT_FOR_ID(fset) - STRUCT_FOR_ID(func) - STRUCT_FOR_ID(future) - STRUCT_FOR_ID(generation) - STRUCT_FOR_ID(genexpr) - STRUCT_FOR_ID(get) - STRUCT_FOR_ID(get_debug) - STRUCT_FOR_ID(get_event_loop) - STRUCT_FOR_ID(get_loop) - STRUCT_FOR_ID(get_source) - STRUCT_FOR_ID(getattr) - STRUCT_FOR_ID(getstate) - STRUCT_FOR_ID(gid) - STRUCT_FOR_ID(globals) - STRUCT_FOR_ID(groupindex) - STRUCT_FOR_ID(groups) - STRUCT_FOR_ID(handle) - STRUCT_FOR_ID(handle_seq) - STRUCT_FOR_ID(has_location) - STRUCT_FOR_ID(hash_name) - STRUCT_FOR_ID(header) - STRUCT_FOR_ID(headers) - STRUCT_FOR_ID(hi) - STRUCT_FOR_ID(hook) - STRUCT_FOR_ID(hour) - STRUCT_FOR_ID(id) - STRUCT_FOR_ID(ident) - STRUCT_FOR_ID(identity_hint) - STRUCT_FOR_ID(ignore) - STRUCT_FOR_ID(imag) - STRUCT_FOR_ID(importlib) - STRUCT_FOR_ID(in_fd) - STRUCT_FOR_ID(incoming) - STRUCT_FOR_ID(index) - STRUCT_FOR_ID(indexgroup) - STRUCT_FOR_ID(inf) - STRUCT_FOR_ID(infer_variance) - STRUCT_FOR_ID(inherit_handle) - STRUCT_FOR_ID(inheritable) - STRUCT_FOR_ID(initial) - STRUCT_FOR_ID(initial_bytes) - STRUCT_FOR_ID(initial_owner) - STRUCT_FOR_ID(initial_state) - STRUCT_FOR_ID(initial_value) - STRUCT_FOR_ID(initval) - STRUCT_FOR_ID(inner_size) - STRUCT_FOR_ID(input) - STRUCT_FOR_ID(insert_comments) - STRUCT_FOR_ID(insert_pis) - STRUCT_FOR_ID(instructions) - STRUCT_FOR_ID(intern) - STRUCT_FOR_ID(intersection) - STRUCT_FOR_ID(interval) - STRUCT_FOR_ID(io) - STRUCT_FOR_ID(is_compress) - STRUCT_FOR_ID(is_raw) - STRUCT_FOR_ID(is_running) - STRUCT_FOR_ID(is_struct) - STRUCT_FOR_ID(isatty) - STRUCT_FOR_ID(isinstance) - STRUCT_FOR_ID(isoformat) - STRUCT_FOR_ID(isolation_level) - STRUCT_FOR_ID(istext) - STRUCT_FOR_ID(item) - STRUCT_FOR_ID(items) - STRUCT_FOR_ID(iter) - STRUCT_FOR_ID(iterable) - STRUCT_FOR_ID(iterations) - STRUCT_FOR_ID(join) - STRUCT_FOR_ID(jump) - STRUCT_FOR_ID(keepends) - STRUCT_FOR_ID(key) - STRUCT_FOR_ID(keyfile) - STRUCT_FOR_ID(keys) - STRUCT_FOR_ID(kind) - STRUCT_FOR_ID(kw) - STRUCT_FOR_ID(kw1) - STRUCT_FOR_ID(kw2) - STRUCT_FOR_ID(kwdefaults) - STRUCT_FOR_ID(label) - STRUCT_FOR_ID(lambda) - STRUCT_FOR_ID(last) - STRUCT_FOR_ID(last_exc) - STRUCT_FOR_ID(last_node) - STRUCT_FOR_ID(last_traceback) - STRUCT_FOR_ID(last_type) - STRUCT_FOR_ID(last_value) - STRUCT_FOR_ID(latin1) - STRUCT_FOR_ID(leaf_size) - STRUCT_FOR_ID(len) - STRUCT_FOR_ID(length) - STRUCT_FOR_ID(level) - STRUCT_FOR_ID(limit) - STRUCT_FOR_ID(line) - STRUCT_FOR_ID(line_buffering) - STRUCT_FOR_ID(lineno) - STRUCT_FOR_ID(listcomp) - STRUCT_FOR_ID(little) - STRUCT_FOR_ID(lo) - STRUCT_FOR_ID(locale) - STRUCT_FOR_ID(locals) - STRUCT_FOR_ID(logoption) - STRUCT_FOR_ID(loop) - STRUCT_FOR_ID(manual_reset) - STRUCT_FOR_ID(mapping) - STRUCT_FOR_ID(match) - STRUCT_FOR_ID(max_length) - STRUCT_FOR_ID(maxdigits) - STRUCT_FOR_ID(maxevents) - STRUCT_FOR_ID(maxlen) - STRUCT_FOR_ID(maxmem) - STRUCT_FOR_ID(maxsplit) - STRUCT_FOR_ID(maxvalue) - STRUCT_FOR_ID(memLevel) - STRUCT_FOR_ID(memlimit) - STRUCT_FOR_ID(message) - STRUCT_FOR_ID(metaclass) - STRUCT_FOR_ID(metadata) - STRUCT_FOR_ID(method) - STRUCT_FOR_ID(microsecond) - STRUCT_FOR_ID(milliseconds) - STRUCT_FOR_ID(minute) - STRUCT_FOR_ID(mod) - STRUCT_FOR_ID(mode) - STRUCT_FOR_ID(module) - STRUCT_FOR_ID(module_globals) - STRUCT_FOR_ID(modules) - STRUCT_FOR_ID(month) - STRUCT_FOR_ID(mro) - STRUCT_FOR_ID(msg) - STRUCT_FOR_ID(mutex) - STRUCT_FOR_ID(mycmp) - STRUCT_FOR_ID(n_arg) - STRUCT_FOR_ID(n_fields) - STRUCT_FOR_ID(n_sequence_fields) - STRUCT_FOR_ID(n_unnamed_fields) - STRUCT_FOR_ID(name) - STRUCT_FOR_ID(name_from) - STRUCT_FOR_ID(namespace_separator) - STRUCT_FOR_ID(namespaces) - STRUCT_FOR_ID(narg) - STRUCT_FOR_ID(ndigits) - STRUCT_FOR_ID(nested) - STRUCT_FOR_ID(new_file_name) - STRUCT_FOR_ID(new_limit) - STRUCT_FOR_ID(newline) - STRUCT_FOR_ID(newlines) - STRUCT_FOR_ID(next) - STRUCT_FOR_ID(nlocals) - STRUCT_FOR_ID(node_depth) - STRUCT_FOR_ID(node_offset) - STRUCT_FOR_ID(ns) - STRUCT_FOR_ID(nstype) - STRUCT_FOR_ID(nt) - STRUCT_FOR_ID(null) - STRUCT_FOR_ID(number) - STRUCT_FOR_ID(obj) - STRUCT_FOR_ID(object) - STRUCT_FOR_ID(offset) - STRUCT_FOR_ID(offset_dst) - STRUCT_FOR_ID(offset_src) - STRUCT_FOR_ID(on_type_read) - STRUCT_FOR_ID(onceregistry) - STRUCT_FOR_ID(only_active_thread) - STRUCT_FOR_ID(only_keys) - STRUCT_FOR_ID(oparg) - STRUCT_FOR_ID(opcode) - STRUCT_FOR_ID(open) - STRUCT_FOR_ID(opener) - STRUCT_FOR_ID(operation) - STRUCT_FOR_ID(optimize) - STRUCT_FOR_ID(options) - STRUCT_FOR_ID(order) - STRUCT_FOR_ID(origin) - STRUCT_FOR_ID(out_fd) - STRUCT_FOR_ID(outgoing) - STRUCT_FOR_ID(outpath) - STRUCT_FOR_ID(overlapped) - STRUCT_FOR_ID(owner) - STRUCT_FOR_ID(pages) - STRUCT_FOR_ID(parameter) - STRUCT_FOR_ID(parent) - STRUCT_FOR_ID(password) - STRUCT_FOR_ID(path) - STRUCT_FOR_ID(pattern) - STRUCT_FOR_ID(peek) - STRUCT_FOR_ID(persistent_id) - STRUCT_FOR_ID(persistent_load) - STRUCT_FOR_ID(person) - STRUCT_FOR_ID(pi_factory) - STRUCT_FOR_ID(pid) - STRUCT_FOR_ID(policy) - STRUCT_FOR_ID(pos) - STRUCT_FOR_ID(pos1) - STRUCT_FOR_ID(pos2) - STRUCT_FOR_ID(posix) - STRUCT_FOR_ID(print_file_and_line) - STRUCT_FOR_ID(priority) - STRUCT_FOR_ID(progress) - STRUCT_FOR_ID(progress_handler) - STRUCT_FOR_ID(progress_routine) - STRUCT_FOR_ID(proto) - STRUCT_FOR_ID(protocol) - STRUCT_FOR_ID(ps1) - STRUCT_FOR_ID(ps2) - STRUCT_FOR_ID(query) - STRUCT_FOR_ID(quotetabs) - STRUCT_FOR_ID(raw) - STRUCT_FOR_ID(read) - STRUCT_FOR_ID(read1) - STRUCT_FOR_ID(readable) - STRUCT_FOR_ID(readall) - STRUCT_FOR_ID(readinto) - STRUCT_FOR_ID(readinto1) - STRUCT_FOR_ID(readline) - STRUCT_FOR_ID(readonly) - STRUCT_FOR_ID(real) - STRUCT_FOR_ID(reducer_override) - STRUCT_FOR_ID(registry) - STRUCT_FOR_ID(rel_tol) - STRUCT_FOR_ID(release) - STRUCT_FOR_ID(reload) - STRUCT_FOR_ID(repl) - STRUCT_FOR_ID(replace) - STRUCT_FOR_ID(reserved) - STRUCT_FOR_ID(reset) - STRUCT_FOR_ID(resetids) - STRUCT_FOR_ID(return) - STRUCT_FOR_ID(reverse) - STRUCT_FOR_ID(reversed) - STRUCT_FOR_ID(salt) - STRUCT_FOR_ID(sched_priority) - STRUCT_FOR_ID(scheduler) - STRUCT_FOR_ID(script) - STRUCT_FOR_ID(second) - STRUCT_FOR_ID(security_attributes) - STRUCT_FOR_ID(seek) - STRUCT_FOR_ID(seekable) - STRUCT_FOR_ID(selectors) - STRUCT_FOR_ID(self) - STRUCT_FOR_ID(send) - STRUCT_FOR_ID(sep) - STRUCT_FOR_ID(sequence) - STRUCT_FOR_ID(server_hostname) - STRUCT_FOR_ID(server_side) - STRUCT_FOR_ID(session) - STRUCT_FOR_ID(setcomp) - STRUCT_FOR_ID(setpgroup) - STRUCT_FOR_ID(setsid) - STRUCT_FOR_ID(setsigdef) - STRUCT_FOR_ID(setsigmask) - STRUCT_FOR_ID(setstate) - STRUCT_FOR_ID(shape) - STRUCT_FOR_ID(show_cmd) - STRUCT_FOR_ID(signed) - STRUCT_FOR_ID(size) - STRUCT_FOR_ID(sizehint) - STRUCT_FOR_ID(skip_file_prefixes) - STRUCT_FOR_ID(sleep) - STRUCT_FOR_ID(sock) - STRUCT_FOR_ID(sort) - STRUCT_FOR_ID(source) - STRUCT_FOR_ID(source_traceback) - STRUCT_FOR_ID(spam) - STRUCT_FOR_ID(src) - STRUCT_FOR_ID(src_dir_fd) - STRUCT_FOR_ID(stacklevel) - STRUCT_FOR_ID(start) - STRUCT_FOR_ID(statement) - STRUCT_FOR_ID(status) - STRUCT_FOR_ID(stderr) - STRUCT_FOR_ID(stdin) - STRUCT_FOR_ID(stdout) - STRUCT_FOR_ID(step) - STRUCT_FOR_ID(steps) - STRUCT_FOR_ID(store_name) - STRUCT_FOR_ID(strategy) - STRUCT_FOR_ID(strftime) - STRUCT_FOR_ID(strict) - STRUCT_FOR_ID(strict_mode) - STRUCT_FOR_ID(string) - STRUCT_FOR_ID(sub_key) - STRUCT_FOR_ID(subcalls) - STRUCT_FOR_ID(symmetric_difference_update) - STRUCT_FOR_ID(tabsize) - STRUCT_FOR_ID(tag) - STRUCT_FOR_ID(target) - STRUCT_FOR_ID(target_is_directory) - STRUCT_FOR_ID(task) - STRUCT_FOR_ID(tb_frame) - STRUCT_FOR_ID(tb_lasti) - STRUCT_FOR_ID(tb_lineno) - STRUCT_FOR_ID(tb_next) - STRUCT_FOR_ID(tell) - STRUCT_FOR_ID(template) - STRUCT_FOR_ID(term) - STRUCT_FOR_ID(text) - STRUCT_FOR_ID(threading) - STRUCT_FOR_ID(throw) - STRUCT_FOR_ID(timeout) - STRUCT_FOR_ID(timer) - STRUCT_FOR_ID(times) - STRUCT_FOR_ID(timetuple) - STRUCT_FOR_ID(timeunit) - STRUCT_FOR_ID(top) - STRUCT_FOR_ID(trace_callback) - STRUCT_FOR_ID(traceback) - STRUCT_FOR_ID(trailers) - STRUCT_FOR_ID(translate) - STRUCT_FOR_ID(true) - STRUCT_FOR_ID(truncate) - STRUCT_FOR_ID(twice) - STRUCT_FOR_ID(txt) - STRUCT_FOR_ID(type) - STRUCT_FOR_ID(type_params) - STRUCT_FOR_ID(tz) - STRUCT_FOR_ID(tzinfo) - STRUCT_FOR_ID(tzname) - STRUCT_FOR_ID(uid) - STRUCT_FOR_ID(unlink) - STRUCT_FOR_ID(unraisablehook) - STRUCT_FOR_ID(uri) - STRUCT_FOR_ID(usedforsecurity) - STRUCT_FOR_ID(value) - STRUCT_FOR_ID(values) - STRUCT_FOR_ID(version) - STRUCT_FOR_ID(volume) - STRUCT_FOR_ID(wait_all) - STRUCT_FOR_ID(warn_on_full_buffer) - STRUCT_FOR_ID(warnings) - STRUCT_FOR_ID(warnoptions) - STRUCT_FOR_ID(wbits) - STRUCT_FOR_ID(week) - STRUCT_FOR_ID(weekday) - STRUCT_FOR_ID(which) - STRUCT_FOR_ID(who) - STRUCT_FOR_ID(withdata) - STRUCT_FOR_ID(writable) - STRUCT_FOR_ID(write) - STRUCT_FOR_ID(write_through) - STRUCT_FOR_ID(year) - STRUCT_FOR_ID(zdict) - STRUCT_FOR_ID(zstd_dict) - } identifiers; - struct { - PyASCIIObject _ascii; - uint8_t _data[2]; - } ascii[128]; - struct { - PyCompactUnicodeObject _latin1; - uint8_t _data[2]; - } latin1[128]; -}; -/* End auto-generated code */ - -#undef ID -#undef STR - - -#define _Py_ID(NAME) \ - (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base)) -#define _Py_STR(NAME) \ - (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base)) -#define _Py_LATIN1_CHR(CH) \ - ((CH) < 128 \ - ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \ - : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128]) - -/* _Py_DECLARE_STR() should precede all uses of _Py_STR() in a function. - - This is true even if the same string has already been declared - elsewhere, even in the same file. Mismatched duplicates are detected - by Tools/scripts/generate-global-objects.py. - - Pairing _Py_DECLARE_STR() with every use of _Py_STR() makes sure the - string keeps working even if the declaration is removed somewhere - else. It also makes it clear what the actual string is at every - place it is being used. */ -#define _Py_DECLARE_STR(name, str) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_GLOBAL_STRINGS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_hamt.h b/Python314_4_x86_Template/include/internal/pycore_hamt.h deleted file mode 100644 index f973ce6dc..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_hamt.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef Py_INTERNAL_HAMT_H -#define Py_INTERNAL_HAMT_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" // PyHamtNode - -/* -HAMT tree is shaped by hashes of keys. Every group of 5 bits of a hash denotes -the exact position of the key in one level of the tree. Since we're using -32 bit hashes, we can have at most 7 such levels. Although if there are -two distinct keys with equal hashes, they will have to occupy the same -cell in the 7th level of the tree -- so we'd put them in a "collision" node. -Which brings the total possible tree depth to 8. Read more about the actual -layout of the HAMT tree in `hamt.c`. - -This constant is used to define a datastucture for storing iteration state. -*/ -#define _Py_HAMT_MAX_TREE_DEPTH 8 - - -extern PyTypeObject _PyHamt_Type; -extern PyTypeObject _PyHamt_ArrayNode_Type; -extern PyTypeObject _PyHamt_BitmapNode_Type; -extern PyTypeObject _PyHamt_CollisionNode_Type; -extern PyTypeObject _PyHamtKeys_Type; -extern PyTypeObject _PyHamtValues_Type; -extern PyTypeObject _PyHamtItems_Type; - - -/* other API */ - -#define PyHamt_Check(o) Py_IS_TYPE((o), &_PyHamt_Type) - - -/* A struct to hold the state of depth-first traverse of the tree. - - HAMT is an immutable collection. Iterators will hold a strong reference - to it, and every node in the HAMT has strong references to its children. - - So for iterators, we can implement zero allocations and zero reference - inc/dec depth-first iteration. - - - i_nodes: an array of seven pointers to tree nodes - - i_level: the current node in i_nodes - - i_pos: an array of positions within nodes in i_nodes. -*/ -typedef struct { - PyHamtNode *i_nodes[_Py_HAMT_MAX_TREE_DEPTH]; - Py_ssize_t i_pos[_Py_HAMT_MAX_TREE_DEPTH]; - int8_t i_level; -} PyHamtIteratorState; - - -/* Base iterator object. - - Contains the iteration state, a pointer to the HAMT tree, - and a pointer to the 'yield function'. The latter is a simple - function that returns a key/value tuple for the 'Items' iterator, - just a key for the 'Keys' iterator, and a value for the 'Values' - iterator. -*/ -typedef struct { - PyObject_HEAD - PyHamtObject *hi_obj; - PyHamtIteratorState hi_iter; - binaryfunc hi_yield; -} PyHamtIterator; - - -/* Create a new HAMT immutable mapping. */ -PyHamtObject * _PyHamt_New(void); - -/* Return a new collection based on "o", but with an additional - key/val pair. */ -PyHamtObject * _PyHamt_Assoc(PyHamtObject *o, PyObject *key, PyObject *val); - -/* Return a new collection based on "o", but without "key". */ -PyHamtObject * _PyHamt_Without(PyHamtObject *o, PyObject *key); - -/* Find "key" in the "o" collection. - - Return: - - -1: An error occurred. - - 0: "key" wasn't found in "o". - - 1: "key" is in "o"; "*val" is set to its value (a borrowed ref). -*/ -int _PyHamt_Find(PyHamtObject *o, PyObject *key, PyObject **val); - -/* Check if "v" is equal to "w". - - Return: - - 0: v != w - - 1: v == w - - -1: An error occurred. -*/ -int _PyHamt_Eq(PyHamtObject *v, PyHamtObject *w); - -/* Return the size of "o"; equivalent of "len(o)". */ -Py_ssize_t _PyHamt_Len(PyHamtObject *o); - -/* Return a Keys iterator over "o". */ -PyObject * _PyHamt_NewIterKeys(PyHamtObject *o); - -/* Return a Values iterator over "o". */ -PyObject * _PyHamt_NewIterValues(PyHamtObject *o); - -/* Return a Items iterator over "o". */ -PyObject * _PyHamt_NewIterItems(PyHamtObject *o); - -#endif /* !Py_INTERNAL_HAMT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_hashtable.h b/Python314_4_x86_Template/include/internal/pycore_hashtable.h deleted file mode 100644 index 369d49c42..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_hashtable.h +++ /dev/null @@ -1,150 +0,0 @@ -#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_RVALUE(((_Py_slist_item_t *)(ITEM))->next) - -#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_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; -}; - -// Export _Py_hashtable functions for '_testinternalcapi' shared extension -PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( - _Py_hashtable_hash_func hash_func, - _Py_hashtable_compare_func compare_func); - -/* 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_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); -PyAPI_FUNC(size_t) _Py_hashtable_len(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/Python314_4_x86_Template/include/internal/pycore_import.h b/Python314_4_x86_Template/include/internal/pycore_import.h deleted file mode 100644 index 13fbff4eb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_import.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef Py_INTERNAL_IMPORT_H -#define Py_INTERNAL_IMPORT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_hashtable.h" // _Py_hashtable_t -#include "pycore_interp_structs.h" // _import_state - -extern int _PyImport_IsInitialized(PyInterpreterState *); - -// Export for 'pyexpat' shared extension -PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); - -extern int _PyImport_SetModuleString(const char *name, PyObject* module); - -extern void _PyImport_AcquireLock(PyInterpreterState *interp); -extern void _PyImport_ReleaseLock(PyInterpreterState *interp); -extern void _PyImport_ReInitLock(PyInterpreterState *interp); - -// This is used exclusively for the sys and builtins modules: -extern int _PyImport_FixupBuiltin( - PyThreadState *tstate, - PyObject *mod, - const char *name, /* UTF-8 encoded string */ - PyObject *modules - ); - -#ifdef HAVE_DLOPEN -# include <dlfcn.h> // RTLD_NOW, RTLD_LAZY -# if HAVE_DECL_RTLD_NOW -# define _Py_DLOPEN_FLAGS RTLD_NOW -# else -# define _Py_DLOPEN_FLAGS RTLD_LAZY -# endif -# define DLOPENFLAGS_INIT .dlopenflags = _Py_DLOPEN_FLAGS, -#else -# define _Py_DLOPEN_FLAGS 0 -# define DLOPENFLAGS_INIT -#endif - -#define IMPORTS_INIT \ - { \ - DLOPENFLAGS_INIT \ - .find_and_load = { \ - .header = 1, \ - }, \ - } - -extern void _PyImport_ClearCore(PyInterpreterState *interp); - -extern Py_ssize_t _PyImport_GetNextModuleIndex(void); -extern const char * _PyImport_ResolveNameWithPackageContext(const char *name); -extern const char * _PyImport_SwapPackageContext(const char *newcontext); - -extern int _PyImport_GetDLOpenFlags(PyInterpreterState *interp); -extern void _PyImport_SetDLOpenFlags(PyInterpreterState *interp, int new_val); - -extern PyObject * _PyImport_InitModules(PyInterpreterState *interp); -extern PyObject * _PyImport_GetModules(PyInterpreterState *interp); -extern PyObject * _PyImport_GetModulesRef(PyInterpreterState *interp); -extern void _PyImport_ClearModules(PyInterpreterState *interp); - -extern void _PyImport_ClearModulesByIndex(PyInterpreterState *interp); - -extern int _PyImport_InitDefaultImportFunc(PyInterpreterState *interp); -extern int _PyImport_IsDefaultImportFunc( - PyInterpreterState *interp, - PyObject *func); - -extern PyObject * _PyImport_GetImportlibLoader( - PyInterpreterState *interp, - const char *loader_name); -extern PyObject * _PyImport_GetImportlibExternalLoader( - PyInterpreterState *interp, - const char *loader_name); -extern PyObject * _PyImport_BlessMyLoader( - PyInterpreterState *interp, - PyObject *module_globals); -extern PyObject * _PyImport_ImportlibModuleRepr( - PyInterpreterState *interp, - PyObject *module); - - -extern PyStatus _PyImport_Init(void); -extern void _PyImport_Fini(void); -extern void _PyImport_Fini2(void); - -extern PyStatus _PyImport_InitCore( - PyThreadState *tstate, - PyObject *sysmod, - int importlib); -extern PyStatus _PyImport_InitExternal(PyThreadState *tstate); -extern void _PyImport_FiniCore(PyInterpreterState *interp); -extern void _PyImport_FiniExternal(PyInterpreterState *interp); - - -extern PyObject* _PyImport_GetBuiltinModuleNames(void); - -struct _module_alias { - const char *name; /* ASCII encoded string */ - const char *orig; /* ASCII encoded string */ -}; - -// Export these 3 symbols for test_ctypes -PyAPI_DATA(const struct _frozen*) _PyImport_FrozenBootstrap; -PyAPI_DATA(const struct _frozen*) _PyImport_FrozenStdlib; -PyAPI_DATA(const struct _frozen*) _PyImport_FrozenTest; - -extern const struct _module_alias * _PyImport_FrozenAliases; - -extern int _PyImport_CheckSubinterpIncompatibleExtensionAllowed( - const char *name); - - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(int) _PyImport_ClearExtension(PyObject *name, PyObject *filename); - -#ifdef Py_GIL_DISABLED -// Assuming that the GIL is enabled from a call to -// _PyEval_EnableGILTransient(), resolve the transient request depending on the -// state of the module argument: -// - If module is NULL or a PyModuleObject with md_gil == Py_MOD_GIL_NOT_USED, -// call _PyEval_DisableGIL(). -// - Otherwise, call _PyEval_EnableGILPermanent(). If the GIL was not already -// enabled permanently, issue a warning referencing the module's name. -// -// This function may raise an exception. -extern int _PyImport_CheckGILForModule(PyObject *module, PyObject *module_name); -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_IMPORT_H */ -#endif /* !Py_LIMITED_API */ diff --git a/Python314_4_x86_Template/include/internal/pycore_importdl.h b/Python314_4_x86_Template/include/internal/pycore_importdl.h deleted file mode 100644 index 525a16f6b..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_importdl.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef Py_INTERNAL_IMPORTDL_H -#define Py_INTERNAL_IMPORTDL_H - -#include "patchlevel.h" // PY_MAJOR_VERSION - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -extern const char *_PyImport_DynLoadFiletab[]; - - -typedef enum ext_module_kind { - _Py_ext_module_kind_UNKNOWN = 0, - _Py_ext_module_kind_SINGLEPHASE = 1, - _Py_ext_module_kind_MULTIPHASE = 2, - _Py_ext_module_kind_INVALID = 3, -} _Py_ext_module_kind; - -typedef enum ext_module_origin { - _Py_ext_module_origin_CORE = 1, - _Py_ext_module_origin_BUILTIN = 2, - _Py_ext_module_origin_DYNAMIC = 3, -} _Py_ext_module_origin; - -/* Input for loading an extension module. */ -struct _Py_ext_module_loader_info { - PyObject *filename; -#ifndef MS_WINDOWS - PyObject *filename_encoded; -#endif - PyObject *name; - PyObject *name_encoded; - /* path is always a borrowed ref of name or filename, - * depending on if it's builtin or not. */ - PyObject *path; - _Py_ext_module_origin origin; - const char *hook_prefix; - const char *newcontext; -}; -extern void _Py_ext_module_loader_info_clear( - struct _Py_ext_module_loader_info *info); -extern int _Py_ext_module_loader_info_init( - struct _Py_ext_module_loader_info *info, - PyObject *name, - PyObject *filename, - _Py_ext_module_origin origin); -extern int _Py_ext_module_loader_info_init_for_core( - struct _Py_ext_module_loader_info *p_info, - PyObject *name); -extern int _Py_ext_module_loader_info_init_for_builtin( - struct _Py_ext_module_loader_info *p_info, - PyObject *name); -#ifdef HAVE_DYNAMIC_LOADING -extern int _Py_ext_module_loader_info_init_from_spec( - struct _Py_ext_module_loader_info *info, - PyObject *spec); -#endif - -/* The result from running an extension module's init function. */ -struct _Py_ext_module_loader_result { - PyModuleDef *def; - PyObject *module; - _Py_ext_module_kind kind; - struct _Py_ext_module_loader_result_error *err; - struct _Py_ext_module_loader_result_error { - enum _Py_ext_module_loader_result_error_kind { - _Py_ext_module_loader_result_EXCEPTION = 0, - _Py_ext_module_loader_result_ERR_MISSING = 1, - _Py_ext_module_loader_result_ERR_UNREPORTED_EXC = 2, - _Py_ext_module_loader_result_ERR_UNINITIALIZED = 3, - _Py_ext_module_loader_result_ERR_NONASCII_NOT_MULTIPHASE = 4, - _Py_ext_module_loader_result_ERR_NOT_MODULE = 5, - _Py_ext_module_loader_result_ERR_MISSING_DEF = 6, - } kind; - PyObject *exc; - } _err; -}; -extern void _Py_ext_module_loader_result_clear( - struct _Py_ext_module_loader_result *res); -extern void _Py_ext_module_loader_result_apply_error( - struct _Py_ext_module_loader_result *res, - const char *name); - -/* The module init function. */ -typedef PyObject *(*PyModInitFunction)(void); -#ifdef HAVE_DYNAMIC_LOADING -extern PyModInitFunction _PyImport_GetModInitFunc( - struct _Py_ext_module_loader_info *info, - FILE *fp); -#endif -extern int _PyImport_RunModInitFunc( - PyModInitFunction p0, - struct _Py_ext_module_loader_info *info, - struct _Py_ext_module_loader_result *p_res); - - -/* Max length of module suffix searched for -- accommodates "module.slb" */ -#define MAXSUFFIXSIZE 12 - -#ifdef MS_WINDOWS -#include <windows.h> -typedef FARPROC dl_funcptr; - -#ifdef _DEBUG -# define PYD_DEBUG_SUFFIX "_d" -#else -# define PYD_DEBUG_SUFFIX "" -#endif - -#ifdef Py_GIL_DISABLED -# define PYD_THREADING_TAG "t" -#else -# define PYD_THREADING_TAG "" -#endif - -#ifdef PYD_PLATFORM_TAG -# define PYD_SOABI "cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) PYD_THREADING_TAG "-" PYD_PLATFORM_TAG -#else -# define PYD_SOABI "cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) PYD_THREADING_TAG -#endif - -#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX "." PYD_SOABI ".pyd" -#define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" - -#else -typedef void (*dl_funcptr)(void); -#endif - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_IMPORTDL_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_index_pool.h b/Python314_4_x86_Template/include/internal/pycore_index_pool.h deleted file mode 100644 index 2ce06be48..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_index_pool.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef Py_INTERNAL_INDEX_POOL_H -#define Py_INTERNAL_INDEX_POOL_H - -#include "Python.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED - -#include "pycore_interp_structs.h" - -// This contains code for allocating unique indices in an array. It is used by -// the free-threaded build to assign each thread a globally unique index into -// each code object's thread-local bytecode array. - - -// Allocate the smallest available index. Returns -1 on error. -extern int32_t _PyIndexPool_AllocIndex(_PyIndexPool *indices); - -// Release `index` back to the pool -extern void _PyIndexPool_FreeIndex(_PyIndexPool *indices, int32_t index); - -extern void _PyIndexPool_Fini(_PyIndexPool *indices); - -#endif // Py_GIL_DISABLED - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_INDEX_POOL_H diff --git a/Python314_4_x86_Template/include/internal/pycore_initconfig.h b/Python314_4_x86_Template/include/internal/pycore_initconfig.h deleted file mode 100644 index 183b2d45c..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_initconfig.h +++ /dev/null @@ -1,197 +0,0 @@ -#ifndef Py_INTERNAL_CORECONFIG_H -#define Py_INTERNAL_CORECONFIG_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_typedefs.h" // _PyRuntimeState - -/* --- PyStatus ----------------------------------------------- */ - -/* Almost all errors causing Python initialization to fail */ -#ifdef _MSC_VER - /* Visual Studio 2015 doesn't implement C99 __func__ in C */ -# define _PyStatus_GET_FUNC() __FUNCTION__ -#else -# define _PyStatus_GET_FUNC() __func__ -#endif - -#define _PyStatus_OK() \ - (PyStatus){._type = _PyStatus_TYPE_OK} - /* other fields are set to 0 */ -#define _PyStatus_ERR(ERR_MSG) \ - (PyStatus){ \ - ._type = _PyStatus_TYPE_ERROR, \ - .func = _PyStatus_GET_FUNC(), \ - .err_msg = (ERR_MSG)} - /* other fields are set to 0 */ -#define _PyStatus_NO_MEMORY_ERRMSG "memory allocation failed" -#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG) -#define _PyStatus_EXIT(EXITCODE) \ - (PyStatus){ \ - ._type = _PyStatus_TYPE_EXIT, \ - .exitcode = (EXITCODE)} -#define _PyStatus_IS_ERROR(err) \ - ((err)._type == _PyStatus_TYPE_ERROR) -#define _PyStatus_IS_EXIT(err) \ - ((err)._type == _PyStatus_TYPE_EXIT) -#define _PyStatus_EXCEPTION(err) \ - ((err)._type != _PyStatus_TYPE_OK) -#define _PyStatus_UPDATE_FUNC(err) \ - do { (err).func = _PyStatus_GET_FUNC(); } while (0) - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(void) _PyErr_SetFromPyStatus(PyStatus status); - - -/* --- PyWideStringList ------------------------------------------------ */ - -#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL} - -#ifndef NDEBUG -extern int _PyWideStringList_CheckConsistency(const PyWideStringList *list); -#endif -extern void _PyWideStringList_Clear(PyWideStringList *list); -extern int _PyWideStringList_Copy(PyWideStringList *list, - const PyWideStringList *list2); -extern PyStatus _PyWideStringList_Extend(PyWideStringList *list, - const PyWideStringList *list2); -extern PyObject* _PyWideStringList_AsList(const PyWideStringList *list); - - -/* --- _PyArgv ---------------------------------------------------- */ - -typedef struct _PyArgv { - Py_ssize_t argc; - int use_bytes_argv; - char * const *bytes_argv; - wchar_t * const *wchar_argv; -} _PyArgv; - -extern PyStatus _PyArgv_AsWstrList(const _PyArgv *args, - PyWideStringList *list); - - -/* --- Helper functions ------------------------------------------- */ - -extern int _Py_str_to_int( - const char *str, - int *result); -extern const wchar_t* _Py_get_xoption( - const PyWideStringList *xoptions, - const wchar_t *name); -extern const char* _Py_GetEnv( - int use_environment, - const char *name); -extern void _Py_get_env_flag( - int use_environment, - int *flag, - const char *name); - -/* Py_GetArgcArgv() helper */ -extern void _Py_ClearArgcArgv(void); - - -/* --- _PyPreCmdline ------------------------------------------------- */ - -typedef struct { - PyWideStringList argv; - PyWideStringList xoptions; /* "-X value" option */ - int isolated; /* -I option */ - int use_environment; /* -E option */ - int dev_mode; /* -X dev and PYTHONDEVMODE */ - int warn_default_encoding; /* -X warn_default_encoding and PYTHONWARNDEFAULTENCODING */ -} _PyPreCmdline; - -#define _PyPreCmdline_INIT \ - (_PyPreCmdline){ \ - .use_environment = -1, \ - .isolated = -1, \ - .dev_mode = -1} -/* Note: _PyPreCmdline_INIT sets other fields to 0/NULL */ - -extern void _PyPreCmdline_Clear(_PyPreCmdline *cmdline); -extern PyStatus _PyPreCmdline_SetArgv(_PyPreCmdline *cmdline, - const _PyArgv *args); -extern PyStatus _PyPreCmdline_SetConfig( - const _PyPreCmdline *cmdline, - PyConfig *config); -extern PyStatus _PyPreCmdline_Read(_PyPreCmdline *cmdline, - const PyPreConfig *preconfig); - - -/* --- PyPreConfig ----------------------------------------------- */ - -// Export for '_testembed' program -PyAPI_FUNC(void) _PyPreConfig_InitCompatConfig(PyPreConfig *preconfig); - -extern void _PyPreConfig_InitFromConfig( - PyPreConfig *preconfig, - const PyConfig *config); -extern PyStatus _PyPreConfig_InitFromPreConfig( - PyPreConfig *preconfig, - const PyPreConfig *config2); -extern PyObject* _PyPreConfig_AsDict(const PyPreConfig *preconfig); -extern void _PyPreConfig_GetConfig(PyPreConfig *preconfig, - const PyConfig *config); -extern PyStatus _PyPreConfig_Read(PyPreConfig *preconfig, - const _PyArgv *args); -extern PyStatus _PyPreConfig_Write(const PyPreConfig *preconfig); - - -/* --- PyConfig ---------------------------------------------- */ - -typedef enum { - /* Py_Initialize() API: backward compatibility with Python 3.6 and 3.7 */ - _PyConfig_INIT_COMPAT = 1, - _PyConfig_INIT_PYTHON = 2, - _PyConfig_INIT_ISOLATED = 3 -} _PyConfigInitEnum; - -typedef enum { - /* In free threaded builds, this means that the GIL is disabled at startup, - but may be enabled by loading an incompatible extension module. */ - _PyConfig_GIL_DEFAULT = -1, - - /* The GIL has been forced off or on, and will not be affected by module loading. */ - _PyConfig_GIL_DISABLE = 0, - _PyConfig_GIL_ENABLE = 1, -} _PyConfigGILEnum; - -// Export for '_testembed' program -PyAPI_FUNC(void) _PyConfig_InitCompatConfig(PyConfig *config); - -extern PyStatus _PyConfig_Copy( - PyConfig *config, - const PyConfig *config2); -extern PyStatus _PyConfig_InitPathConfig( - PyConfig *config, - int compute_path_config); -extern PyStatus _PyConfig_InitImportConfig(PyConfig *config); -extern PyStatus _PyConfig_Read(PyConfig *config, int compute_path_config); -extern PyStatus _PyConfig_Write(const PyConfig *config, - _PyRuntimeState *runtime); -extern PyStatus _PyConfig_SetPyArgv( - PyConfig *config, - const _PyArgv *args); -extern PyObject* _PyConfig_CreateXOptionsDict(const PyConfig *config); - -extern void _Py_DumpPathConfig(PyThreadState *tstate); - - -/* --- Function used for testing ---------------------------------- */ - -// Export these functions for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyConfig_AsDict(const PyConfig *config); -PyAPI_FUNC(int) _PyConfig_FromDict(PyConfig *config, PyObject *dict); -PyAPI_FUNC(PyObject*) _Py_Get_Getpath_CodeObject(void); -PyAPI_FUNC(PyObject*) _Py_GetConfigsAsDict(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_CORECONFIG_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_instruction_sequence.h b/Python314_4_x86_Template/include/internal/pycore_instruction_sequence.h deleted file mode 100644 index b5c927735..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_instruction_sequence.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef Py_INTERNAL_INSTRUCTION_SEQUENCE_H -#define Py_INTERNAL_INSTRUCTION_SEQUENCE_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_symtable.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct { - int h_label; - int h_startdepth; - int h_preserve_lasti; -} _PyExceptHandlerInfo; - -typedef struct { - int i_opcode; - int i_oparg; - _Py_SourceLocation i_loc; - _PyExceptHandlerInfo i_except_handler_info; - - /* Temporary fields, used by the assembler and in instr_sequence_to_cfg */ - int i_target; - int i_offset; -} _PyInstruction; - -typedef struct instruction_sequence { - PyObject_HEAD - _PyInstruction *s_instrs; - int s_allocated; - int s_used; - - int s_next_free_label; /* next free label id */ - - /* Map of a label id to instruction offset (index into s_instrs). - * If s_labelmap is NULL, then each label id is the offset itself. - */ - int *s_labelmap; - int s_labelmap_size; - - /* PyList of instruction sequences of nested functions */ - PyObject *s_nested; - - /* Code for creating annotations, spliced into the main sequence later */ - struct instruction_sequence *s_annotations_code; -} _PyInstructionSequence; - -typedef struct { - int id; -} _PyJumpTargetLabel; - -#define NO_LABEL ((const _PyJumpTargetLabel){-1}) - -#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id) -#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL))) - -PyAPI_FUNC(PyObject*)_PyInstructionSequence_New(void); - -int _PyInstructionSequence_UseLabel(_PyInstructionSequence *seq, int lbl); -int _PyInstructionSequence_Addop(_PyInstructionSequence *seq, - int opcode, int oparg, - _Py_SourceLocation loc); -_PyJumpTargetLabel _PyInstructionSequence_NewLabel(_PyInstructionSequence *seq); -int _PyInstructionSequence_ApplyLabelMap(_PyInstructionSequence *seq); -int _PyInstructionSequence_InsertInstruction(_PyInstructionSequence *seq, int pos, - int opcode, int oparg, _Py_SourceLocation loc); -int _PyInstructionSequence_SetAnnotationsCode(_PyInstructionSequence *seq, - _PyInstructionSequence *annotations); -int _PyInstructionSequence_AddNested(_PyInstructionSequence *seq, _PyInstructionSequence *nested); -void PyInstructionSequence_Fini(_PyInstructionSequence *seq); - -extern PyTypeObject _PyInstructionSequence_Type; -#define _PyInstructionSequence_Check(v) Py_IS_TYPE((v), &_PyInstructionSequence_Type) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_INSTRUCTION_SEQUENCE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_instruments.h b/Python314_4_x86_Template/include/internal/pycore_instruments.h deleted file mode 100644 index 7658adca7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_instruments.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef Py_INTERNAL_INSTRUMENT_H -#define Py_INTERNAL_INSTRUMENT_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" // _Py_CODEUNIT -#include "pycore_typedefs.h" // _PyInterpreterFrame - -#ifdef __cplusplus -extern "C" { -#endif - -typedef uint32_t _PyMonitoringEventSet; - -/* Tool IDs */ - -/* These are defined in PEP 669 for convenience to avoid clashes */ -#define PY_MONITORING_DEBUGGER_ID 0 -#define PY_MONITORING_COVERAGE_ID 1 -#define PY_MONITORING_PROFILER_ID 2 -#define PY_MONITORING_OPTIMIZER_ID 5 - -/* Internal IDs used to support sys.setprofile() and sys.settrace() */ -#define PY_MONITORING_SYS_PROFILE_ID 6 -#define PY_MONITORING_SYS_TRACE_ID 7 - - -PyObject *_PyMonitoring_RegisterCallback(int tool_id, int event_id, PyObject *obj); - -int _PyMonitoring_SetEvents(int tool_id, _PyMonitoringEventSet events); -int _PyMonitoring_SetLocalEvents(PyCodeObject *code, int tool_id, _PyMonitoringEventSet events); -int _PyMonitoring_GetLocalEvents(PyCodeObject *code, int tool_id, _PyMonitoringEventSet *events); - -extern int -_Py_call_instrumentation(PyThreadState *tstate, int event, - _PyInterpreterFrame *frame, _Py_CODEUNIT *instr); - -extern int -_Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame, - _Py_CODEUNIT *instr, _Py_CODEUNIT *prev); - -extern int -_Py_call_instrumentation_instruction( - PyThreadState *tstate, _PyInterpreterFrame* frame, _Py_CODEUNIT *instr); - -_Py_CODEUNIT * -_Py_call_instrumentation_jump( - _Py_CODEUNIT *instr, PyThreadState *tstate, int event, - _PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest); - -extern int -_Py_call_instrumentation_arg(PyThreadState *tstate, int event, - _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg); - -extern int -_Py_call_instrumentation_2args(PyThreadState *tstate, int event, - _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg0, PyObject *arg1); - -extern void -_Py_call_instrumentation_exc2(PyThreadState *tstate, int event, - _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg0, PyObject *arg1); - -extern int -_Py_Instrumentation_GetLine(PyCodeObject *code, int index); - -extern PyObject _PyInstrumentation_MISSING; -extern PyObject _PyInstrumentation_DISABLE; - - -/* Total tool ids available */ -#define PY_MONITORING_TOOL_IDS 8 -/* Count of all local monitoring events */ -#define _PY_MONITORING_LOCAL_EVENTS 11 -/* Count of all "real" monitoring events (not derived from other events) */ -#define _PY_MONITORING_UNGROUPED_EVENTS 16 -/* Count of all monitoring events */ -#define _PY_MONITORING_EVENTS 19 - -/* Tables of which tools are active for each monitored event. */ -typedef struct _Py_LocalMonitors { - uint8_t tools[_PY_MONITORING_LOCAL_EVENTS]; -} _Py_LocalMonitors; - -typedef struct _Py_GlobalMonitors { - uint8_t tools[_PY_MONITORING_UNGROUPED_EVENTS]; -} _Py_GlobalMonitors; - -/* Ancillary data structure used for instrumentation. - Line instrumentation creates this with sufficient - space for one entry per code unit. The total size - of the data will be `bytes_per_entry * Py_SIZE(code)` */ -typedef struct { - uint8_t bytes_per_entry; - uint8_t data[1]; -} _PyCoLineInstrumentationData; - - -/* Main data structure used for instrumentation. - * This is allocated when needed for instrumentation - */ -typedef struct _PyCoMonitoringData { - /* Monitoring specific to this code object */ - _Py_LocalMonitors local_monitors; - /* Monitoring that is active on this code object */ - _Py_LocalMonitors active_monitors; - /* The tools that are to be notified for events for the matching code unit */ - uint8_t *tools; - /* The version of tools when they instrument the code */ - uintptr_t tool_versions[PY_MONITORING_TOOL_IDS]; - /* Information to support line events */ - _PyCoLineInstrumentationData *lines; - /* The tools that are to be notified for line events for the matching code unit */ - uint8_t *line_tools; - /* Information to support instruction events */ - /* The underlying instructions, which can themselves be instrumented */ - uint8_t *per_instruction_opcodes; - /* The tools that are to be notified for instruction events for the matching code unit */ - uint8_t *per_instruction_tools; -} _PyCoMonitoringData; - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_INSTRUMENT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_interp.h b/Python314_4_x86_Template/include/internal/pycore_interp.h deleted file mode 100644 index 5b1bb2021..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_interp.h +++ /dev/null @@ -1,109 +0,0 @@ -#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_interp_structs.h" // PyInterpreterState - - -/* interpreter state */ - -#define _PyInterpreterState_WHENCE_NOTSET -1 -#define _PyInterpreterState_WHENCE_UNKNOWN 0 -#define _PyInterpreterState_WHENCE_RUNTIME 1 -#define _PyInterpreterState_WHENCE_LEGACY_CAPI 2 -#define _PyInterpreterState_WHENCE_CAPI 3 -#define _PyInterpreterState_WHENCE_XI 4 -#define _PyInterpreterState_WHENCE_STDLIB 5 -#define _PyInterpreterState_WHENCE_MAX 5 - - -/* other API */ - -extern void _PyInterpreterState_Clear(PyThreadState *tstate); - -static inline PyThreadState* -_PyInterpreterState_GetFinalizing(PyInterpreterState *interp) { - return (PyThreadState*)_Py_atomic_load_ptr_relaxed(&interp->_finalizing); -} - -static inline unsigned long -_PyInterpreterState_GetFinalizingID(PyInterpreterState *interp) { - return _Py_atomic_load_ulong_relaxed(&interp->_finalizing_id); -} - -static inline void -_PyInterpreterState_SetFinalizing(PyInterpreterState *interp, PyThreadState *tstate) { - _Py_atomic_store_ptr_relaxed(&interp->_finalizing, tstate); - if (tstate == NULL) { - _Py_atomic_store_ulong_relaxed(&interp->_finalizing_id, 0); - } - else { - // XXX Re-enable this assert once gh-109860 is fixed. - //assert(tstate->thread_id == PyThread_get_thread_ident()); - _Py_atomic_store_ulong_relaxed(&interp->_finalizing_id, - tstate->thread_id); - } -} - - -// Exports for the _testinternalcapi module. -PyAPI_FUNC(int64_t) _PyInterpreterState_ObjectToID(PyObject *); -PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpID(int64_t); -PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpIDObject(PyObject *); -PyAPI_FUNC(void) _PyInterpreterState_IDIncref(PyInterpreterState *); -PyAPI_FUNC(void) _PyInterpreterState_IDDecref(PyInterpreterState *); - -PyAPI_FUNC(int) _PyInterpreterState_IsReady(PyInterpreterState *interp); - -PyAPI_FUNC(long) _PyInterpreterState_GetWhence(PyInterpreterState *interp); -extern void _PyInterpreterState_SetWhence( - PyInterpreterState *interp, - long whence); - -/* -Runtime Feature Flags - -Each flag indicate whether or not a specific runtime feature -is available in a given context. For example, forking the process -might not be allowed in the current interpreter (i.e. os.fork() would fail). -*/ - -/* Set if the interpreter share obmalloc runtime state - with the main interpreter. */ -#define Py_RTFLAGS_USE_MAIN_OBMALLOC (1UL << 5) - -/* Set if import should check a module for subinterpreter support. */ -#define Py_RTFLAGS_MULTI_INTERP_EXTENSIONS (1UL << 8) - -/* Set if threads are allowed. */ -#define Py_RTFLAGS_THREADS (1UL << 10) - -/* Set if daemon threads are allowed. */ -#define Py_RTFLAGS_DAEMON_THREADS (1UL << 11) - -/* Set if os.fork() is allowed. */ -#define Py_RTFLAGS_FORK (1UL << 15) - -/* Set if os.exec*() is allowed. */ -#define Py_RTFLAGS_EXEC (1UL << 16) - -extern int _PyInterpreterState_HasFeature(PyInterpreterState *interp, - unsigned long feature); - -PyAPI_FUNC(PyStatus) _PyInterpreterState_New( - PyThreadState *tstate, - PyInterpreterState **pinterp); - -extern const PyConfig* _PyInterpreterState_GetConfig( - PyInterpreterState *interp); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_INTERP_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_interp_structs.h b/Python314_4_x86_Template/include/internal/pycore_interp_structs.h deleted file mode 100644 index c3d9533e9..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_interp_structs.h +++ /dev/null @@ -1,980 +0,0 @@ -/* This file contains the struct definitions for interpreter state - * and other necessary structs */ - -#ifndef Py_INTERNAL_INTERP_STRUCTS_H -#define Py_INTERNAL_INTERP_STRUCTS_H -#ifdef __cplusplus -extern "C" { -#endif - -#include "pycore_ast_state.h" // struct ast_state -#include "pycore_llist.h" // struct llist_node -#include "pycore_opcode_utils.h" // NUM_COMMON_CONSTANTS -#include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR -#include "pycore_structs.h" // PyHamtObject -#include "pycore_tstate.h" // _PyThreadStateImpl -#include "pycore_typedefs.h" // _PyRuntimeState - - -#define CODE_MAX_WATCHERS 8 -#define CONTEXT_MAX_WATCHERS 8 -#define FUNC_MAX_WATCHERS 8 -#define TYPE_MAX_WATCHERS 8 - - -#ifdef Py_GIL_DISABLED -// This should be prime but otherwise the choice is arbitrary. A larger value -// increases concurrency at the expense of memory. -# define NUM_WEAKREF_LIST_LOCKS 127 -#endif - -typedef int (*_Py_pending_call_func)(void *); - -struct _pending_call { - _Py_pending_call_func func; - void *arg; - int flags; -}; - -#define PENDINGCALLSARRAYSIZE 300 - -struct _pending_calls { - PyThreadState *handling_thread; - PyMutex mutex; - /* Request for running pending calls. */ - int32_t npending; - /* The maximum allowed number of pending calls. - If the queue fills up to this point then _PyEval_AddPendingCall() - will return _Py_ADD_PENDING_FULL. */ - int32_t max; - /* We don't want a flood of pending calls to interrupt any one thread - for too long, so we keep a limit on the number handled per pass. - A value of 0 means there is no limit (other than the maximum - size of the list of pending calls). */ - int32_t maxloop; - struct _pending_call calls[PENDINGCALLSARRAYSIZE]; - int first; - int next; -}; - -typedef enum { - PERF_STATUS_FAILED = -1, // Perf trampoline is in an invalid state - PERF_STATUS_NO_INIT = 0, // Perf trampoline is not initialized - PERF_STATUS_OK = 1, // Perf trampoline is ready to be executed -} perf_status_t; - -#ifdef PY_HAVE_PERF_TRAMPOLINE -struct code_arena_st; - -struct trampoline_api_st { - void* (*init_state)(void); - void (*write_state)(void* state, const void *code_addr, - unsigned int code_size, PyCodeObject* code); - int (*free_state)(void* state); - void *state; - Py_ssize_t code_padding; -}; -#endif - - -struct _ceval_runtime_state { - struct { -#ifdef PY_HAVE_PERF_TRAMPOLINE - perf_status_t status; - int perf_trampoline_type; - Py_ssize_t extra_code_index; - struct code_arena_st *code_arena; - struct trampoline_api_st trampoline_api; - FILE *map_file; - Py_ssize_t persist_after_fork; - _PyFrameEvalFunction prev_eval_frame; - Py_ssize_t trampoline_refcount; - int code_watcher_id; -#else - int _not_used; -#endif - } perf; - /* Pending calls to be made only on the main thread. */ - // The signal machinery falls back on this - // so it must be especially stable and efficient. - // For example, we use a preallocated array - // for the list of pending calls. - struct _pending_calls pending_mainthread; - PyMutex unused_sys_trace_profile_mutex; // kept for ABI compatibility -}; - - -struct _ceval_state { - /* This variable holds the global instrumentation version. When a thread is - running, this value is overlaid onto PyThreadState.eval_breaker so that - changes in the instrumentation version will trigger the eval breaker. */ - uintptr_t instrumentation_version; - int recursion_limit; - struct _gil_runtime_state *gil; - int own_gil; - struct _pending_calls pending; -}; - - -//############### -// runtime atexit - -typedef void (*atexit_callbackfunc)(void); - -struct _atexit_runtime_state { - PyMutex mutex; -#define NEXITFUNCS 32 - atexit_callbackfunc callbacks[NEXITFUNCS]; - int ncallbacks; -}; - - -//################### -// interpreter atexit - -typedef void (*atexit_datacallbackfunc)(void *); - -typedef struct atexit_callback { - atexit_datacallbackfunc func; - void *data; - struct atexit_callback *next; -} atexit_callback; - -struct atexit_state { -#ifdef Py_GIL_DISABLED - PyMutex ll_callbacks_lock; -#endif - atexit_callback *ll_callbacks; - - // XXX The rest of the state could be moved to the atexit module state - // and a low-level callback added for it during module exec. - // For the moment we leave it here. - - // List containing tuples with callback information. - // e.g. [(func, args, kwargs), ...] - PyObject *callbacks; -}; - - -/****** Garbage collector **********/ - -/* GC information is stored BEFORE the object structure. */ -typedef struct { - // Tagged pointer to next object in the list. - // 0 means the object is not tracked - uintptr_t _gc_next; - - // Tagged pointer to previous object in the list. - // Lowest two bits are used for flags documented later. - uintptr_t _gc_prev; -} PyGC_Head; - -#define _PyGC_Head_UNUSED PyGC_Head - -struct gc_generation { - PyGC_Head head; - int threshold; /* collection threshold */ - int count; /* count of allocations or collections of younger - generations */ -}; - -struct gc_collection_stats { - /* number of collected objects */ - Py_ssize_t collected; - /* total number of uncollectable objects (put into gc.garbage) */ - Py_ssize_t uncollectable; -}; - -/* 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; -}; - -enum _GCPhase { - GC_PHASE_MARK = 0, - GC_PHASE_COLLECT = 1 -}; - -/* If we change this, we need to change the default value in the - signature of gc.collect. */ -#define NUM_GENERATIONS 3 - -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; - - /* Is automatic collection enabled? */ - int enabled; - int debug; - /* linked lists of container objects */ - struct gc_generation young; - struct gc_generation old[2]; - /* 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; - - Py_ssize_t heap_size; - Py_ssize_t work_to_do; - /* Which of the old spaces is the visited space */ - int visited_space; - int phase; - -#ifdef Py_GIL_DISABLED - /* 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; - - /* True if gc.freeze() has been used. */ - int freeze_active; - - /* Memory usage of the process (RSS + swap) after last GC. */ - Py_ssize_t last_mem; - - /* This accumulates the new object count whenever collection is deferred - due to the RSS increase condition not being meet. Reset on collection. */ - Py_ssize_t deferred_count; - - /* Mutex held for gc_should_collect_mem_usage(). */ - PyMutex mutex; -#endif -}; - -#include "pycore_gil.h" // struct _gil_runtime_state - -/**** Import ********/ - -struct _import_runtime_state { - /* The builtin modules (defined in config.c). */ - struct _inittab *inittab; - /* The most recent value assigned to a PyModuleDef.m_base.m_index. - This is incremented each time PyModuleDef_Init() is called, - which is just about every time an extension module is imported. - See PyInterpreterState.modules_by_index for more info. */ - Py_ssize_t last_module_index; - struct { - /* A lock to guard the cache. */ - PyMutex mutex; - /* The actual cache of (filename, name, PyModuleDef) for modules. - Only legacy (single-phase init) extension modules are added - and only if they support multiple initialization (m_size >= 0) - or are imported in the main interpreter. - This is initialized lazily in fix_up_extension() in import.c. - Modules are added there and looked up in _imp.find_extension(). */ - struct _Py_hashtable_t *hashtable; - } extensions; - /* Package context -- the full module name for package imports */ - const char * pkgcontext; -}; - -struct _import_state { - /* cached sys.modules dictionary */ - PyObject *modules; - /* This is the list of module objects for all legacy (single-phase init) - extension modules ever loaded in this process (i.e. imported - in this interpreter or in any other). Py_None stands in for - modules that haven't actually been imported in this interpreter. - - A module's index (PyModuleDef.m_base.m_index) is used to look up - the corresponding module object for this interpreter, if any. - (See PyState_FindModule().) When any extension module - is initialized during import, its moduledef gets initialized by - PyModuleDef_Init(), and the first time that happens for each - PyModuleDef, its index gets set to the current value of - a global counter (see _PyRuntimeState.imports.last_module_index). - The entry for that index in this interpreter remains unset until - the module is actually imported here. (Py_None is used as - a placeholder.) Note that multi-phase init modules always get - an index for which there will never be a module set. - - This is initialized lazily in PyState_AddModule(), which is also - where modules get added. */ - PyObject *modules_by_index; - /* importlib module._bootstrap */ - PyObject *importlib; - /* override for config->use_frozen_modules (for tests) - (-1: "off", 1: "on", 0: no override) */ - int override_frozen_modules; - int override_multi_interp_extensions_check; -#ifdef HAVE_DLOPEN - int dlopenflags; -#endif - PyObject *import_func; - /* The global import lock. */ - _PyRecursiveMutex lock; - /* diagnostic info in PyImport_ImportModuleLevelObject() */ - struct { - int import_level; - PyTime_t accumulated; - int header; - } find_and_load; -}; - - - -/********** Interpreter state **************/ - -#include "pycore_object_state.h" // struct _py_object_state -#include "pycore_crossinterp.h" // _PyXI_state_t - - -struct _Py_long_state { - int max_str_digits; -}; - -struct codecs_state { - // A list of callable objects used to search for codecs. - PyObject *search_path; - - // A dict mapping codec names to codecs returned from a callable in - // search_path. - PyObject *search_cache; - - // A dict mapping error handling strategies to functions to implement them. - PyObject *error_registry; - -#ifdef Py_GIL_DISABLED - // Used to safely delete a specific item from search_path. - PyMutex search_path_mutex; -#endif - - // Whether or not the rest of the state is initialized. - int initialized; -}; - -// Support for stop-the-world events. This exists in both the PyRuntime struct -// for global pauses and in each PyInterpreterState for per-interpreter pauses. -struct _stoptheworld_state { - PyMutex mutex; // Serializes stop-the-world attempts. - - // NOTE: The below fields are protected by HEAD_LOCK(runtime), not by the - // above mutex. - bool requested; // Set when a pause is requested. - bool world_stopped; // Set when the world is stopped. - bool is_global; // Set when contained in PyRuntime struct. - - PyEvent stop_event; // Set when thread_countdown reaches zero. - Py_ssize_t thread_countdown; // Number of threads that must pause. - - PyThreadState *requester; // Thread that requested the pause (may be NULL). -}; - -/* Tracks some rare events per-interpreter, used by the optimizer to turn on/off - specific optimizations. */ -typedef struct _rare_events { - /* Setting an object's class, obj.__class__ = ... */ - uint8_t set_class; - /* Setting the bases of a class, cls.__bases__ = ... */ - uint8_t set_bases; - /* Setting the PEP 523 frame eval function, _PyInterpreterState_SetFrameEvalFunc() */ - uint8_t set_eval_frame_func; - /* Modifying the builtins, __builtins__.__dict__[var] = ... */ - uint8_t builtin_dict; - /* Modifying a function, e.g. func.__defaults__ = ..., etc. */ - uint8_t func_modification; -} _rare_events; - -struct -Bigint { - struct Bigint *next; - int k, maxwds, sign, wds; - uint32_t x[1]; -}; - -#if defined(Py_USING_MEMORY_DEBUGGER) || _PY_SHORT_FLOAT_REPR == 0 - -struct _dtoa_state { - int _not_used; -}; - -#else // !Py_USING_MEMORY_DEBUGGER && _PY_SHORT_FLOAT_REPR != 0 - -/* The size of the Bigint freelist */ -#define Bigint_Kmax 7 - -/* The size of the cached powers of 5 array */ -#define Bigint_Pow5size 8 - -#ifndef PRIVATE_MEM -#define PRIVATE_MEM 2304 -#endif -#define Bigint_PREALLOC_SIZE \ - ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) - -struct _dtoa_state { - // p5s is an array of powers of 5 of the form: - // 5**(2**(i+2)) for 0 <= i < Bigint_Pow5size - struct Bigint *p5s[Bigint_Pow5size]; - // XXX This should be freed during runtime fini. - struct Bigint *freelist[Bigint_Kmax+1]; - double preallocated[Bigint_PREALLOC_SIZE]; - double *preallocated_next; -}; - -#endif // !Py_USING_MEMORY_DEBUGGER - -struct _py_code_state { - PyMutex mutex; - // Interned constants from code objects. Used by the free-threaded build. - struct _Py_hashtable_t *constants; -}; - -#define FUNC_VERSION_CACHE_SIZE (1<<12) /* Must be a power of 2 */ - -struct _func_version_cache_item { - PyFunctionObject *func; - PyObject *code; -}; - -struct _py_func_state { -#ifdef Py_GIL_DISABLED - // Protects next_version - PyMutex mutex; -#endif - - uint32_t next_version; - // Borrowed references to function and code objects whose - // func_version % FUNC_VERSION_CACHE_SIZE - // once was equal to the index in the table. - // They are cleared when the function or code object is deallocated. - struct _func_version_cache_item func_version_cache[FUNC_VERSION_CACHE_SIZE]; -}; - -#include "pycore_dict_state.h" // struct _Py_dict_state -#include "pycore_exceptions.h" // struct _Py_exc_state - - -/****** type state *********/ - -/* For now we hard-code this to a value for which we are confident - all the static builtin types will fit (for all builds). */ -#define _Py_MAX_MANAGED_STATIC_BUILTIN_TYPES 200 -#define _Py_MAX_MANAGED_STATIC_EXT_TYPES 10 -#define _Py_MAX_MANAGED_STATIC_TYPES \ - (_Py_MAX_MANAGED_STATIC_BUILTIN_TYPES + _Py_MAX_MANAGED_STATIC_EXT_TYPES) - -struct _types_runtime_state { - /* Used to set PyTypeObject.tp_version_tag for core static types. */ - // bpo-42745: next_version_tag remains shared by all interpreters - // because of static types. - unsigned int next_version_tag; - - struct { - struct { - PyTypeObject *type; - int64_t interp_count; - } types[_Py_MAX_MANAGED_STATIC_TYPES]; - } managed_static; -}; - - -// Type attribute lookup cache: speed up attribute and method lookups, -// see _PyType_Lookup(). -struct type_cache_entry { - unsigned int version; // initialized from type->tp_version_tag -#ifdef Py_GIL_DISABLED - _PySeqLock sequence; -#endif - PyObject *name; // reference to exactly a str or None - PyObject *value; // borrowed reference or NULL -}; - -#define MCACHE_SIZE_EXP 12 - -struct type_cache { - struct type_cache_entry hashtable[1 << MCACHE_SIZE_EXP]; -}; - -typedef struct { - PyTypeObject *type; - int isbuiltin; - int readying; - int ready; - // XXX tp_dict can probably be statically allocated, - // instead of dynamically and stored on the interpreter. - PyObject *tp_dict; - PyObject *tp_subclasses; - /* We never clean up weakrefs for static builtin types since - they will effectively never get triggered. However, there - are also some diagnostic uses for the list of weakrefs, - so we still keep it. */ - PyObject *tp_weaklist; -} managed_static_type_state; - -#define TYPE_VERSION_CACHE_SIZE (1<<12) /* Must be a power of 2 */ - -struct types_state { - /* Used to set PyTypeObject.tp_version_tag. - It starts at _Py_MAX_GLOBAL_TYPE_VERSION_TAG + 1, - where all those lower numbers are used for core static types. */ - unsigned int next_version_tag; - - struct type_cache type_cache; - - /* Every static builtin type is initialized for each interpreter - during its own initialization, including for the main interpreter - during global runtime initialization. This is done by calling - _PyStaticType_InitBuiltin(). - - The first time a static builtin type is initialized, all the - normal PyType_Ready() stuff happens. The only difference from - normal is that there are three PyTypeObject fields holding - objects which are stored here (on PyInterpreterState) rather - than in the corresponding PyTypeObject fields. Those are: - tp_dict (cls.__dict__), tp_subclasses (cls.__subclasses__), - and tp_weaklist. - - When a subinterpreter is initialized, each static builtin type - is still initialized, but only the interpreter-specific portion, - namely those three objects. - - Those objects are stored in the PyInterpreterState.types.builtins - array, at the index corresponding to each specific static builtin - type. That index (a size_t value) is stored in the tp_subclasses - field. For static builtin types, we re-purposed the now-unused - tp_subclasses to avoid adding another field to PyTypeObject. - In all other cases tp_subclasses holds a dict like before. - (The field was previously defined as PyObject*, but is now void* - to reflect its dual use.) - - The index for each static builtin type isn't statically assigned. - Instead it is calculated the first time a type is initialized - (by the main interpreter). The index matches the order in which - the type was initialized relative to the others. The actual - value comes from the current value of num_builtins_initialized, - as each type is initialized for the main interpreter. - - num_builtins_initialized is incremented once for each static - builtin type. Once initialization is over for a subinterpreter, - the value will be the same as for all other interpreters. */ - struct { - size_t num_initialized; - managed_static_type_state initialized[_Py_MAX_MANAGED_STATIC_BUILTIN_TYPES]; - } builtins; - /* We apply a similar strategy for managed extension modules. */ - struct { - size_t num_initialized; - size_t next_index; - managed_static_type_state initialized[_Py_MAX_MANAGED_STATIC_EXT_TYPES]; - } for_extensions; - PyMutex mutex; - - // Borrowed references to type objects whose - // tp_version_tag % TYPE_VERSION_CACHE_SIZE - // once was equal to the index in the table. - // They are cleared when the type object is deallocated. - PyTypeObject *type_version_cache[TYPE_VERSION_CACHE_SIZE]; -}; - -struct _warnings_runtime_state { - /* Both 'filters' and 'onceregistry' can be set in warnings.py; - get_warnings_attr() will reset these variables accordingly. */ - PyObject *filters; /* List */ - PyObject *once_registry; /* Dict */ - PyObject *default_action; /* String */ - _PyRecursiveMutex lock; - long filters_version; - PyObject *context; -}; - -struct _Py_mem_interp_free_queue { - int has_work; // true if the queue is not empty - PyMutex mutex; // protects the queue - struct llist_node head; // queue of _mem_work_chunk items -}; - - -/****** Unicode state *********/ - -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; - -struct _Py_unicode_runtime_ids { - PyMutex mutex; - // next_index value must be preserved when Py_Initialize()/Py_Finalize() - // is called multiple times: see _PyUnicode_FromId() implementation. - Py_ssize_t next_index; -}; - -struct _Py_unicode_runtime_state { - struct _Py_unicode_runtime_ids ids; -}; - -/* 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_ids { - Py_ssize_t size; - PyObject **array; -}; - -#include "pycore_ucnhash.h" // _PyUnicode_Name_CAPI - -struct _Py_unicode_state { - struct _Py_unicode_fs_codec fs_codec; - - _PyUnicode_Name_CAPI *ucnhash_capi; - - // Unicode identifiers (_Py_Identifier): see _PyUnicode_FromId() - struct _Py_unicode_ids ids; -}; - -// Borrowed references to common callables: -struct callable_cache { - PyObject *isinstance; - PyObject *len; - PyObject *list_append; - PyObject *object__getattribute__; -}; - -/* Length of array of slotdef pointers used to store slots with the - same __name__. There should be at most MAX_EQUIV-1 slotdef entries with - the same __name__, for any __name__. Since that's a static property, it is - appropriate to declare fixed-size arrays for this. */ -#define MAX_EQUIV 10 - -typedef struct wrapperbase pytype_slotdef; - - -struct _Py_interp_cached_objects { -#ifdef Py_GIL_DISABLED - PyMutex interned_mutex; -#endif - PyObject *interned_strings; - - /* object.__reduce__ */ - PyObject *objreduce; - PyObject *type_slots_pname; - pytype_slotdef *type_slots_ptrs[MAX_EQUIV]; - - /* TypeVar and related types */ - PyTypeObject *generic_type; - PyTypeObject *typevar_type; - PyTypeObject *typevartuple_type; - PyTypeObject *paramspec_type; - PyTypeObject *paramspecargs_type; - PyTypeObject *paramspeckwargs_type; - PyTypeObject *constevaluator_type; -}; - -struct _Py_interp_static_objects { - struct { - int _not_used; - // hamt_empty is here instead of global because of its weakreflist. - _PyGC_Head_UNUSED _hamt_empty_gc_not_used; - PyHamtObject hamt_empty; - PyBaseExceptionObject last_resort_memory_error; - } singletons; -}; - -#include "pycore_instruments.h" // PY_MONITORING_TOOL_IDS - - -#ifdef Py_GIL_DISABLED - -// A min-heap of indices -typedef struct _PyIndexHeap { - int32_t *values; - - // Number of items stored in values - Py_ssize_t size; - - // Maximum number of items that can be stored in values - Py_ssize_t capacity; -} _PyIndexHeap; - -// An unbounded pool of indices. Indices are allocated starting from 0. They -// may be released back to the pool once they are no longer in use. -typedef struct _PyIndexPool { - PyMutex mutex; - - // Min heap of indices available for allocation - _PyIndexHeap free_indices; - - // Next index to allocate if no free indices are available - int32_t next_index; - - // Generation counter incremented on thread creation/destruction - // Used for TLBC cache invalidation in remote debugging - uint32_t tlbc_generation; -} _PyIndexPool; - -typedef union _Py_unique_id_entry { - // Points to the next free type id, when part of the freelist - union _Py_unique_id_entry *next; - - // Stores the object when the id is assigned - PyObject *obj; -} _Py_unique_id_entry; - -struct _Py_unique_id_pool { - PyMutex mutex; - - // combined table of object with allocated unique ids and unallocated ids. - _Py_unique_id_entry *table; - - // Next entry to allocate inside 'table' or NULL - _Py_unique_id_entry *freelist; - - // size of 'table' - Py_ssize_t size; -}; - -#endif - - -/* PyInterpreterState holds the global state for one of the runtime's - interpreters. Typically the initial (main) interpreter is the only one. - - The PyInterpreterState typedef is in Include/pytypedefs.h. - */ -struct _is { - - /* This struct contains the eval_breaker, - * which is by far the hottest field in this struct - * and should be placed at the beginning. */ - struct _ceval_state ceval; - - // unused, kept for ABI compatibility - void *_malloced; - - PyInterpreterState *next; - - int64_t id; - Py_ssize_t id_refcount; - int requires_idref; - - long _whence; - - /* Has been initialized to a safe state. - - In order to be effective, this must be set to 0 during or right - after allocation. */ - int _initialized; - /* Has been fully initialized via pylifecycle.c. */ - int _ready; - int finalizing; - - uintptr_t last_restart_version; - struct pythreads { - uint64_t next_unique_id; - /* The linked list of threads, newest first. */ - PyThreadState *head; - _PyThreadStateImpl *preallocated; - /* The thread currently executing in the __main__ module, if any. */ - PyThreadState *main; - /* Used in Modules/_threadmodule.c. */ - Py_ssize_t count; - /* 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 stacksize; - } threads; - - /* 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. */ - _PyRuntimeState *runtime; - - /* Set by Py_EndInterpreter(). - - Use _PyInterpreterState_GetFinalizing() - and _PyInterpreterState_SetFinalizing() - to access it, don't access it directly. */ - PyThreadState* _finalizing; - /* The ID of the OS thread in which we are finalizing. */ - unsigned long _finalizing_id; - - struct _gc_runtime_state gc; - - /* The following fields are here to avoid allocation during init. - The data is exposed through PyInterpreterState pointer fields. - These fields should not be accessed directly outside of init. - - All other PyInterpreterState pointer fields are populated when - needed and default to NULL. - - For now there are some exceptions to that rule, which require - allocation during init. These will be addressed on a case-by-case - basis. Also see _PyRuntimeState regarding the various mutex fields. - */ - - // Dictionary of the sys module - PyObject *sysdict; - - // Dictionary of the builtins module - PyObject *builtins; - - struct _import_state imports; - - /* The per-interpreter GIL, which might not be used. */ - struct _gil_runtime_state _gil; - - uint64_t _code_object_generation; - - /* ---------- IMPORTANT --------------------------- - The fields above this line are declared as early as - possible to facilitate out-of-process observability - tools. */ - - struct codecs_state codecs; - - PyConfig config; - unsigned long feature_flags; - - PyObject *dict; /* Stores per-interpreter state */ - - PyObject *sysdict_copy; - PyObject *builtins_copy; - // Initialized to _PyEval_EvalFrameDefault(). - _PyFrameEvalFunction eval_frame; - - PyFunction_WatchCallback func_watchers[FUNC_MAX_WATCHERS]; - // One bit is set for each non-NULL entry in func_watchers - uint8_t active_func_watchers; - - Py_ssize_t co_extra_user_count; - freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; - - /* cross-interpreter data and utils */ - _PyXI_state_t xi; - -#ifdef HAVE_FORK - PyObject *before_forkers; - PyObject *after_forkers_parent; - PyObject *after_forkers_child; -#endif - - struct _warnings_runtime_state warnings; - struct atexit_state atexit; - struct _stoptheworld_state stoptheworld; - struct _qsbr_shared qsbr; - -#if defined(Py_GIL_DISABLED) - struct _mimalloc_interp_state mimalloc; - struct _brc_state brc; // biased reference counting state - struct _Py_unique_id_pool unique_ids; // object ids for per-thread refcounts - PyMutex weakref_locks[NUM_WEAKREF_LIST_LOCKS]; - _PyIndexPool tlbc_indices; -#endif - // Per-interpreter list of tasks, any lingering tasks from thread - // states gets added here and removed from the corresponding - // thread state's list. - struct llist_node asyncio_tasks_head; - // `asyncio_tasks_lock` is used when tasks are moved - // from thread's list to interpreter's list. - PyMutex asyncio_tasks_lock; - - // Per-interpreter state for the obmalloc allocator. For the main - // interpreter and for all interpreters that don't have their - // own obmalloc state, this points to the static structure in - // obmalloc.c obmalloc_state_main. For other interpreters, it is - // heap allocated by _PyMem_init_obmalloc() and freed when the - // interpreter structure is freed. In the case of a heap allocated - // obmalloc state, it is not safe to hold on to or use memory after - // the interpreter is freed. The obmalloc state corresponding to - // that allocated memory is gone. See free_obmalloc_arenas() for - // more comments. - struct _obmalloc_state *obmalloc; - - PyObject *audit_hooks; - PyType_WatchCallback type_watchers[TYPE_MAX_WATCHERS]; - PyCode_WatchCallback code_watchers[CODE_MAX_WATCHERS]; - PyContext_WatchCallback context_watchers[CONTEXT_MAX_WATCHERS]; - // One bit is set for each non-NULL entry in code_watchers - uint8_t active_code_watchers; - uint8_t active_context_watchers; - - struct _py_object_state object_state; - struct _Py_unicode_state unicode; - struct _Py_long_state long_state; - struct _dtoa_state dtoa; - struct _py_func_state func_state; - struct _py_code_state code_state; - - struct _Py_dict_state dict_state; - struct _Py_exc_state exc_state; - struct _Py_mem_interp_free_queue mem_free_queue; - - struct ast_state ast; - struct types_state types; - struct callable_cache callable_cache; - PyObject *common_consts[NUM_COMMON_CONSTANTS]; - bool jit; - struct _PyExecutorObject *executor_list_head; - struct _PyExecutorObject *executor_deletion_list_head; - int executor_deletion_list_remaining_capacity; - size_t trace_run_counter; - _rare_events rare_events; - PyDict_WatchCallback builtins_dict_watcher; - - _Py_GlobalMonitors monitors; - _PyOnceFlag sys_profile_once_flag; - _PyOnceFlag sys_trace_once_flag; - Py_ssize_t sys_profiling_threads; /* Count of threads with c_profilefunc set */ - Py_ssize_t sys_tracing_threads; /* Count of threads with c_tracefunc set */ - PyObject *monitoring_callables[PY_MONITORING_TOOL_IDS][_PY_MONITORING_EVENTS]; - PyObject *monitoring_tool_names[PY_MONITORING_TOOL_IDS]; - uintptr_t monitoring_tool_versions[PY_MONITORING_TOOL_IDS]; - - struct _Py_interp_cached_objects cached_objects; - struct _Py_interp_static_objects static_objects; - - Py_ssize_t _interactive_src_count; - -#if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) - uint64_t next_stackref; - _Py_hashtable_t *open_stackrefs_table; -# ifdef Py_STACKREF_CLOSE_DEBUG - _Py_hashtable_t *closed_stackrefs_table; -# endif -#endif - - /* the initial PyInterpreterState.threads.head */ - _PyThreadStateImpl _initial_thread; - // _initial_thread should be the last field of PyInterpreterState. - // See https://github.com/python/cpython/issues/127117. -}; - - -#ifdef __cplusplus -} -#endif -#endif /* Py_INTERNAL_INTERP_STRUCTS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_interpframe.h b/Python314_4_x86_Template/include/internal/pycore_interpframe.h deleted file mode 100644 index b5b729f14..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_interpframe.h +++ /dev/null @@ -1,406 +0,0 @@ -#ifndef Py_INTERNAL_INTERP_FRAME_H -#define Py_INTERNAL_INTERP_FRAME_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_code.h" // _PyCode_CODE() -#include "pycore_interpframe_structs.h" // _PyInterpreterFrame -#include "pycore_stackref.h" // PyStackRef_AsPyObjectBorrow() -#include "pycore_stats.h" // CALL_STAT_INC() - -#ifdef __cplusplus -extern "C" { -#endif - -#define _PyInterpreterFrame_LASTI(IF) \ - ((int)((IF)->instr_ptr - _PyFrame_GetBytecode((IF)))) - -static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) { - assert(!PyStackRef_IsNull(f->f_executable)); - PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable); - assert(PyCode_Check(executable)); - return (PyCodeObject *)executable; -} - -// Similar to _PyFrame_GetCode(), but return NULL if the frame is invalid or -// freed. Used by dump_frame() in Python/traceback.c. The function uses -// heuristics to detect freed memory, it's not 100% reliable. -static inline PyCodeObject* -_PyFrame_SafeGetCode(_PyInterpreterFrame *f) -{ - // globals and builtins may be NULL on a legit frame, but it's unlikely. - // It's more likely that it's a sign of an invalid frame. - if (f->f_globals == NULL || f->f_builtins == NULL) { - return NULL; - } - - if (PyStackRef_IsNull(f->f_executable)) { - return NULL; - } - void *ptr; - memcpy(&ptr, &f->f_executable, sizeof(f->f_executable)); - if (_PyMem_IsPtrFreed(ptr)) { - return NULL; - } - PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable); - if (_PyObject_IsFreed(executable)) { - return NULL; - } - if (!PyCode_Check(executable)) { - return NULL; - } - return (PyCodeObject *)executable; -} - -static inline _Py_CODEUNIT * -_PyFrame_GetBytecode(_PyInterpreterFrame *f) -{ -#ifdef Py_GIL_DISABLED - PyCodeObject *co = _PyFrame_GetCode(f); - _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co); - assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size); - return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index]; -#else - return _PyCode_CODE(_PyFrame_GetCode(f)); -#endif -} - -// Similar to PyUnstable_InterpreterFrame_GetLasti(), but return NULL if the -// frame is invalid or freed. Used by dump_frame() in Python/traceback.c. The -// function uses heuristics to detect freed memory, it's not 100% reliable. -static inline int -_PyFrame_SafeGetLasti(struct _PyInterpreterFrame *f) -{ - // Code based on _PyFrame_GetBytecode() but replace _PyFrame_GetCode() - // with _PyFrame_SafeGetCode(). - PyCodeObject *co = _PyFrame_SafeGetCode(f); - if (co == NULL) { - return -1; - } - - _Py_CODEUNIT *bytecode; -#ifdef Py_GIL_DISABLED - _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co); - assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size); - bytecode = (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index]; -#else - bytecode = _PyCode_CODE(co); -#endif - - return (int)(f->instr_ptr - bytecode) * sizeof(_Py_CODEUNIT); -} - -static inline PyFunctionObject *_PyFrame_GetFunction(_PyInterpreterFrame *f) { - PyObject *func = PyStackRef_AsPyObjectBorrow(f->f_funcobj); - assert(PyFunction_Check(func)); - return (PyFunctionObject *)func; -} - -static inline _PyStackRef *_PyFrame_Stackbase(_PyInterpreterFrame *f) { - return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus); -} - -static inline _PyStackRef _PyFrame_StackPeek(_PyInterpreterFrame *f) { - assert(f->stackpointer > f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus); - assert(!PyStackRef_IsNull(f->stackpointer[-1])); - return f->stackpointer[-1]; -} - -static inline _PyStackRef _PyFrame_StackPop(_PyInterpreterFrame *f) { - assert(f->stackpointer > f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus); - f->stackpointer--; - return *f->stackpointer; -} - -static inline void _PyFrame_StackPush(_PyInterpreterFrame *f, _PyStackRef value) { - *f->stackpointer = value; - f->stackpointer++; -} - -#define FRAME_SPECIALS_SIZE ((int)((sizeof(_PyInterpreterFrame)-1)/sizeof(PyObject *))) - -static inline int -_PyFrame_NumSlotsForCodeObject(PyCodeObject *code) -{ - /* This function needs to remain in sync with the calculation of - * co_framesize in Tools/build/deepfreeze.py */ - assert(code->co_framesize >= FRAME_SPECIALS_SIZE); - return code->co_framesize - FRAME_SPECIALS_SIZE; -} - -static inline void _PyFrame_Copy(_PyInterpreterFrame *src, _PyInterpreterFrame *dest) -{ - dest->f_executable = PyStackRef_MakeHeapSafe(src->f_executable); - // Don't leave a dangling pointer to the old frame when creating generators - // and coroutines: - dest->previous = NULL; - dest->f_funcobj = PyStackRef_MakeHeapSafe(src->f_funcobj); - dest->f_globals = src->f_globals; - dest->f_builtins = src->f_builtins; - dest->f_locals = src->f_locals; - dest->frame_obj = src->frame_obj; - dest->instr_ptr = src->instr_ptr; -#ifdef Py_GIL_DISABLED - dest->tlbc_index = src->tlbc_index; -#endif - assert(src->stackpointer != NULL); - int stacktop = (int)(src->stackpointer - src->localsplus); - assert(stacktop >= 0); - dest->stackpointer = dest->localsplus + stacktop; - // visited is GC bookkeeping for the current stack walk, not frame state. - dest->visited = 0; -#ifdef Py_DEBUG - dest->lltrace = src->lltrace; -#endif - for (int i = 0; i < stacktop; i++) { - dest->localsplus[i] = PyStackRef_MakeHeapSafe(src->localsplus[i]); - } -} - -#ifdef Py_GIL_DISABLED -static inline void -_PyFrame_InitializeTLBC(PyThreadState *tstate, _PyInterpreterFrame *frame, - PyCodeObject *code) -{ - _Py_CODEUNIT *tlbc = _PyCode_GetTLBCFast(tstate, code); - if (tlbc == NULL) { - // No thread-local bytecode exists for this thread yet; use the main - // thread's copy, deferring thread-local bytecode creation to the - // execution of RESUME. - frame->instr_ptr = _PyCode_CODE(code); - frame->tlbc_index = 0; - } - else { - frame->instr_ptr = tlbc; - frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index; - } -} -#endif - -/* Consumes reference to func and locals. - Does not initialize frame->previous, which happens - when frame is linked into the frame stack. - */ -static inline void -_PyFrame_Initialize( - PyThreadState *tstate, _PyInterpreterFrame *frame, _PyStackRef func, - PyObject *locals, PyCodeObject *code, int null_locals_from, _PyInterpreterFrame *previous) -{ - frame->previous = previous; - frame->f_funcobj = func; - frame->f_executable = PyStackRef_FromPyObjectNew(code); - PyFunctionObject *func_obj = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(func); - frame->f_builtins = func_obj->func_builtins; - frame->f_globals = func_obj->func_globals; - frame->f_locals = locals; - frame->stackpointer = frame->localsplus + code->co_nlocalsplus; - frame->frame_obj = NULL; -#ifdef Py_GIL_DISABLED - _PyFrame_InitializeTLBC(tstate, frame, code); -#else - (void)tstate; - frame->instr_ptr = _PyCode_CODE(code); -#endif - frame->return_offset = 0; - frame->owner = FRAME_OWNED_BY_THREAD; - frame->visited = 0; -#ifdef Py_DEBUG - frame->lltrace = 0; -#endif - - for (int i = null_locals_from; i < code->co_nlocalsplus; i++) { - frame->localsplus[i] = PyStackRef_NULL; - } -} - -/* Gets the pointer to the locals array - * that precedes this frame. - */ -static inline _PyStackRef* -_PyFrame_GetLocalsArray(_PyInterpreterFrame *frame) -{ - return frame->localsplus; -} - -// Fetches the stack pointer, and (on debug builds) sets stackpointer to NULL. -// Having stackpointer == NULL makes it easier to catch missing stack pointer -// spills/restores (which could expose invalid values to the GC) using asserts. -static inline _PyStackRef* -_PyFrame_GetStackPointer(_PyInterpreterFrame *frame) -{ - assert(frame->stackpointer != NULL); - _PyStackRef *sp = frame->stackpointer; -#ifndef NDEBUG - frame->stackpointer = NULL; -#endif - return sp; -} - -static inline void -_PyFrame_SetStackPointer(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer) -{ - assert(frame->stackpointer == NULL); - frame->stackpointer = stack_pointer; -} - -/* Determine whether a frame is incomplete. - * A frame is incomplete if it is part way through - * creating cell objects or a generator or coroutine. - * - * Frames on the frame stack are incomplete until the - * first RESUME instruction. - * Frames owned by a generator are always complete. - * - * NOTE: We allow racy accesses to the instruction pointer - * from other threads for sys._current_frames() and similar APIs. - */ -static inline bool _Py_NO_SANITIZE_THREAD -_PyFrame_IsIncomplete(_PyInterpreterFrame *frame) -{ - if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) { - return true; - } - return frame->owner != FRAME_OWNED_BY_GENERATOR && - frame->instr_ptr < _PyFrame_GetBytecode(frame) + - _PyFrame_GetCode(frame)->_co_firsttraceable; -} - -static inline _PyInterpreterFrame * -_PyFrame_GetFirstComplete(_PyInterpreterFrame *frame) -{ - while (frame && _PyFrame_IsIncomplete(frame)) { - frame = frame->previous; - } - return frame; -} - -static inline _PyInterpreterFrame * -_PyThreadState_GetFrame(PyThreadState *tstate) -{ - return _PyFrame_GetFirstComplete(tstate->current_frame); -} - -/* For use by _PyFrame_GetFrameObject - Do not call directly. */ -PyFrameObject * -_PyFrame_MakeAndSetFrameObject(_PyInterpreterFrame *frame); - -/* Gets the PyFrameObject for this frame, lazily - * creating it if necessary. - * Returns a borrowed reference */ -static inline PyFrameObject * -_PyFrame_GetFrameObject(_PyInterpreterFrame *frame) -{ - - assert(!_PyFrame_IsIncomplete(frame)); - PyFrameObject *res = frame->frame_obj; - if (res != NULL) { - return res; - } - return _PyFrame_MakeAndSetFrameObject(frame); -} - -void -_PyFrame_ClearLocals(_PyInterpreterFrame *frame); - -/* Clears all references in the frame. - * If take is non-zero, then the _PyInterpreterFrame frame - * may be transferred to the frame object it references - * instead of being cleared. Either way - * the caller no longer owns the references - * in the frame. - * take should be set to 1 for heap allocated - * frames like the ones in generators and coroutines. - */ -void -_PyFrame_ClearExceptCode(_PyInterpreterFrame * frame); - -int -_PyFrame_Traverse(_PyInterpreterFrame *frame, visitproc visit, void *arg); - -bool -_PyFrame_HasHiddenLocals(_PyInterpreterFrame *frame); - -PyObject * -_PyFrame_GetLocals(_PyInterpreterFrame *frame); - -static inline bool -_PyThreadState_HasStackSpace(PyThreadState *tstate, int size) -{ - assert( - (tstate->datastack_top == NULL && tstate->datastack_limit == NULL) - || - (tstate->datastack_top != NULL && tstate->datastack_limit != NULL) - ); - return tstate->datastack_top != NULL && - size < tstate->datastack_limit - tstate->datastack_top; -} - -extern _PyInterpreterFrame * -_PyThreadState_PushFrame(PyThreadState *tstate, size_t size); - -PyAPI_FUNC(void) _PyThreadState_PopFrame(PyThreadState *tstate, _PyInterpreterFrame *frame); - -/* Pushes a frame without checking for space. - * Must be guarded by _PyThreadState_HasStackSpace() - * Consumes reference to func. */ -static inline _PyInterpreterFrame * -_PyFrame_PushUnchecked(PyThreadState *tstate, _PyStackRef func, int null_locals_from, _PyInterpreterFrame * previous) -{ - CALL_STAT_INC(frames_pushed); - PyFunctionObject *func_obj = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(func); - PyCodeObject *code = (PyCodeObject *)func_obj->func_code; - _PyInterpreterFrame *new_frame = (_PyInterpreterFrame *)tstate->datastack_top; - tstate->datastack_top += code->co_framesize; - assert(tstate->datastack_top < tstate->datastack_limit); - _PyFrame_Initialize(tstate, new_frame, func, NULL, code, null_locals_from, - previous); - return new_frame; -} - -/* Pushes a trampoline frame without checking for space. - * Must be guarded by _PyThreadState_HasStackSpace() */ -static inline _PyInterpreterFrame * -_PyFrame_PushTrampolineUnchecked(PyThreadState *tstate, PyCodeObject *code, int stackdepth, _PyInterpreterFrame * previous) -{ - CALL_STAT_INC(frames_pushed); - _PyInterpreterFrame *frame = (_PyInterpreterFrame *)tstate->datastack_top; - tstate->datastack_top += code->co_framesize; - assert(tstate->datastack_top < tstate->datastack_limit); - frame->previous = previous; - frame->f_funcobj = PyStackRef_None; - frame->f_executable = PyStackRef_FromPyObjectNew(code); -#ifdef Py_DEBUG - frame->f_builtins = NULL; - frame->f_globals = NULL; -#endif - frame->f_locals = NULL; - assert(stackdepth <= code->co_stacksize); - frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth; - frame->frame_obj = NULL; -#ifdef Py_GIL_DISABLED - _PyFrame_InitializeTLBC(tstate, frame, code); -#else - frame->instr_ptr = _PyCode_CODE(code); -#endif - frame->owner = FRAME_OWNED_BY_THREAD; - frame->visited = 0; -#ifdef Py_DEBUG - frame->lltrace = 0; -#endif - frame->return_offset = 0; - return frame; -} - -PyAPI_FUNC(_PyInterpreterFrame *) -_PyEvalFramePushAndInit(PyThreadState *tstate, _PyStackRef func, - PyObject *locals, _PyStackRef const *args, - size_t argcount, PyObject *kwnames, - _PyInterpreterFrame *previous); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_INTERP_FRAME_H diff --git a/Python314_4_x86_Template/include/internal/pycore_interpframe_structs.h b/Python314_4_x86_Template/include/internal/pycore_interpframe_structs.h deleted file mode 100644 index 835b8e581..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_interpframe_structs.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Structures used by pycore_debug_offsets.h. - * - * See InternalDocs/frames.md for an explanation of the frame stack - * including explanation of the PyFrameObject and _PyInterpreterFrame - * structs. - */ - -#ifndef Py_INTERNAL_INTERP_FRAME_STRUCTS_H -#define Py_INTERNAL_INTERP_FRAME_STRUCTS_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" // _PyStackRef -#include "pycore_typedefs.h" // _PyInterpreterFrame - -#ifdef __cplusplus -extern "C" { -#endif - -enum _frameowner { - FRAME_OWNED_BY_THREAD = 0, - FRAME_OWNED_BY_GENERATOR = 1, - FRAME_OWNED_BY_FRAME_OBJECT = 2, - FRAME_OWNED_BY_INTERPRETER = 3, - FRAME_OWNED_BY_CSTACK = 4, -}; - -struct _PyInterpreterFrame { - _PyStackRef f_executable; /* Deferred or strong reference (code object or None) */ - struct _PyInterpreterFrame *previous; - _PyStackRef f_funcobj; /* Deferred or strong reference. Only valid if not on C stack */ - PyObject *f_globals; /* Borrowed reference. Only valid if not on C stack */ - PyObject *f_builtins; /* Borrowed reference. Only valid if not on C stack */ - PyObject *f_locals; /* Strong reference, may be NULL. Only valid if not on C stack */ - PyFrameObject *frame_obj; /* Strong reference, may be NULL. Only valid if not on C stack */ - _Py_CODEUNIT *instr_ptr; /* Instruction currently executing (or about to begin) */ - _PyStackRef *stackpointer; -#ifdef Py_GIL_DISABLED - /* Index of thread-local bytecode containing instr_ptr. */ - int32_t tlbc_index; -#endif - uint16_t return_offset; /* Only relevant during a function call */ - char owner; -#ifdef Py_DEBUG - uint8_t visited:1; - uint8_t lltrace:7; -#else - uint8_t visited; -#endif - /* Locals and stack */ - _PyStackRef localsplus[1]; -}; - - -/* _PyGenObject_HEAD defines the initial segment of generator - and coroutine objects. */ -#define _PyGenObject_HEAD(prefix) \ - PyObject_HEAD \ - /* List of weak reference. */ \ - PyObject *prefix##_weakreflist; \ - /* Name of the generator. */ \ - PyObject *prefix##_name; \ - /* Qualified name of the generator. */ \ - PyObject *prefix##_qualname; \ - _PyErr_StackItem prefix##_exc_state; \ - PyObject *prefix##_origin_or_finalizer; \ - char prefix##_hooks_inited; \ - char prefix##_closed; \ - char prefix##_running_async; \ - /* The frame */ \ - int8_t prefix##_frame_state; \ - _PyInterpreterFrame prefix##_iframe; \ - -struct _PyGenObject { - /* The gi_ prefix is intended to remind of generator-iterator. */ - _PyGenObject_HEAD(gi) -}; - -struct _PyCoroObject { - _PyGenObject_HEAD(cr) -}; - -struct _PyAsyncGenObject { - _PyGenObject_HEAD(ag) -}; - -#undef _PyGenObject_HEAD - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_INTERP_FRAME_STRUCTS_H diff --git a/Python314_4_x86_Template/include/internal/pycore_interpolation.h b/Python314_4_x86_Template/include/internal/pycore_interpolation.h deleted file mode 100644 index dd610c160..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_interpolation.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_INTERNAL_INTERPOLATION_H -#define Py_INTERNAL_INTERPOLATION_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyTypeObject _PyInterpolation_Type; - -#define _PyInterpolation_CheckExact(op) Py_IS_TYPE((op), &_PyInterpolation_Type) - -PyAPI_FUNC(PyObject *) _PyInterpolation_Build(PyObject *value, PyObject *str, - int conversion, PyObject *format_spec); - -extern PyStatus _PyInterpolation_InitTypes(PyInterpreterState *interp); -extern PyObject *_PyInterpolation_GetValueRef(PyObject *interpolation); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Python314_4_x86_Template/include/internal/pycore_intrinsics.h b/Python314_4_x86_Template/include/internal/pycore_intrinsics.h deleted file mode 100644 index 39c2a30f6..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_intrinsics.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef Py_INTERNAL_INTRINSIC_H -#define Py_INTERNAL_INTRINSIC_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -/* Unary Functions: */ -#define INTRINSIC_1_INVALID 0 -#define INTRINSIC_PRINT 1 -#define INTRINSIC_IMPORT_STAR 2 -#define INTRINSIC_STOPITERATION_ERROR 3 -#define INTRINSIC_ASYNC_GEN_WRAP 4 -#define INTRINSIC_UNARY_POSITIVE 5 -#define INTRINSIC_LIST_TO_TUPLE 6 -#define INTRINSIC_TYPEVAR 7 -#define INTRINSIC_PARAMSPEC 8 -#define INTRINSIC_TYPEVARTUPLE 9 -#define INTRINSIC_SUBSCRIPT_GENERIC 10 -#define INTRINSIC_TYPEALIAS 11 - -#define MAX_INTRINSIC_1 11 - - -/* Binary Functions: */ -#define INTRINSIC_2_INVALID 0 -#define INTRINSIC_PREP_RERAISE_STAR 1 -#define INTRINSIC_TYPEVAR_WITH_BOUND 2 -#define INTRINSIC_TYPEVAR_WITH_CONSTRAINTS 3 -#define INTRINSIC_SET_FUNCTION_TYPE_PARAMS 4 -#define INTRINSIC_SET_TYPEPARAM_DEFAULT 5 - -#define MAX_INTRINSIC_2 5 - -typedef PyObject *(*intrinsic_func1)(PyThreadState* tstate, PyObject *value); -typedef PyObject *(*intrinsic_func2)(PyThreadState* tstate, PyObject *value1, PyObject *value2); - -typedef struct { - intrinsic_func1 func; - const char *name; -} intrinsic_func1_info; - -typedef struct { - intrinsic_func2 func; - const char *name; -} intrinsic_func2_info; - -PyAPI_DATA(const intrinsic_func1_info) _PyIntrinsics_UnaryFunctions[]; -PyAPI_DATA(const intrinsic_func2_info) _PyIntrinsics_BinaryFunctions[]; - -#endif // !Py_INTERNAL_INTRINSIC_H diff --git a/Python314_4_x86_Template/include/internal/pycore_jit.h b/Python314_4_x86_Template/include/internal/pycore_jit.h deleted file mode 100644 index 8a88cbf60..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_jit.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef Py_INTERNAL_JIT_H -#define Py_INTERNAL_JIT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pycore_interp.h" -#include "pycore_optimizer.h" -#include "pycore_stackref.h" - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef _Py_JIT - -typedef _Py_CODEUNIT *(*jit_func)(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate); - -int _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction *trace, size_t length); -void _PyJIT_Free(_PyExecutorObject *executor); - -#endif // _Py_JIT - -#ifdef __cplusplus -} -#endif - -#endif // !Py_INTERNAL_JIT_H diff --git a/Python314_4_x86_Template/include/internal/pycore_list.h b/Python314_4_x86_Template/include/internal/pycore_list.h deleted file mode 100644 index ffbcebdb7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_list.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef Py_INTERNAL_LIST_H -#define Py_INTERNAL_LIST_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED -#include "pycore_stackref.h" -#endif - -PyAPI_FUNC(PyObject*) _PyList_Extend(PyListObject *, PyObject *); -PyAPI_FUNC(PyObject) *_PyList_SliceSubscript(PyObject*, PyObject*); -extern void _PyList_DebugMallocStats(FILE *out); -// _PyList_GetItemRef should be used only when the object is known as a list -// because it doesn't raise TypeError when the object is not a list, whereas PyList_GetItemRef does. -extern PyObject* _PyList_GetItemRef(PyListObject *, Py_ssize_t i); - - -#ifdef Py_GIL_DISABLED -// Returns -1 in case of races with other threads. -extern int _PyList_GetItemRefNoLock(PyListObject *, Py_ssize_t, _PyStackRef *); -#endif - -#define _PyList_ITEMS(op) _Py_RVALUE(_PyList_CAST(op)->ob_item) - -PyAPI_FUNC(int) -_PyList_AppendTakeRefListResize(PyListObject *self, PyObject *newitem); - -// In free-threaded build: self should be locked by the caller, if it should be thread-safe. -static inline int -_PyList_AppendTakeRef(PyListObject *self, PyObject *newitem) -{ - assert(self != NULL && newitem != NULL); - assert(PyList_Check(self)); - Py_ssize_t len = Py_SIZE(self); - Py_ssize_t allocated = self->allocated; - assert((size_t)len + 1 < PY_SSIZE_T_MAX); - if (allocated > len) { -#ifdef Py_GIL_DISABLED - _Py_atomic_store_ptr_release(&self->ob_item[len], newitem); -#else - PyList_SET_ITEM(self, len, newitem); -#endif - Py_SET_SIZE(self, len + 1); - return 0; - } - return _PyList_AppendTakeRefListResize(self, newitem); -} - -// Repeat the bytes of a buffer in place -static inline void -_Py_memory_repeat(char* dest, Py_ssize_t len_dest, Py_ssize_t len_src) -{ - assert(len_src > 0); - Py_ssize_t copied = len_src; - while (copied < len_dest) { - Py_ssize_t bytes_to_copy = Py_MIN(copied, len_dest - copied); - memcpy(dest + copied, dest, (size_t)bytes_to_copy); - copied += bytes_to_copy; - } -} - -typedef struct { - PyObject_HEAD - Py_ssize_t it_index; - PyListObject *it_seq; /* Set to NULL when iterator is exhausted */ -} _PyListIterObject; - -union _PyStackRef; - -PyAPI_FUNC(PyObject *)_PyList_FromStackRefStealOnSuccess(const union _PyStackRef *src, Py_ssize_t n); -PyAPI_FUNC(PyObject *)_PyList_AsTupleAndClear(PyListObject *v); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_LIST_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_llist.h b/Python314_4_x86_Template/include/internal/pycore_llist.h deleted file mode 100644 index f629902fd..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_llist.h +++ /dev/null @@ -1,106 +0,0 @@ -// A doubly-linked list that can be embedded in a struct. -// -// Usage: -// struct llist_node head = LLIST_INIT(head); -// typedef struct { -// ... -// struct llist_node node; -// ... -// } MyObj; -// -// llist_insert_tail(&head, &obj->node); -// llist_remove(&obj->node); -// -// struct llist_node *node; -// llist_for_each(node, &head) { -// MyObj *obj = llist_data(node, MyObj, node); -// ... -// } -// - -#ifndef Py_INTERNAL_LLIST_H -#define Py_INTERNAL_LLIST_H - -#include <stddef.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "Py_BUILD_CORE must be defined to include this header" -#endif - -struct llist_node { - struct llist_node *next; - struct llist_node *prev; -}; - -// Get the struct containing a node. -#define llist_data(node, type, member) (_Py_CONTAINER_OF(node, type, member)) - -// Iterate over a list. -#define llist_for_each(node, head) \ - for (node = (head)->next; node != (head); node = node->next) - -// Iterate over a list, but allow removal of the current node. -#define llist_for_each_safe(node, head) \ - for (struct llist_node *_next = (node = (head)->next, node->next); \ - node != (head); node = _next, _next = node->next) - -#define LLIST_INIT(head) { &head, &head } - -static inline void -llist_init(struct llist_node *head) -{ - head->next = head; - head->prev = head; -} - -// Returns 1 if the list is empty, 0 otherwise. -static inline int -llist_empty(struct llist_node *head) -{ - return head->next == head; -} - -// Appends to the tail of the list. -static inline void -llist_insert_tail(struct llist_node *head, struct llist_node *node) -{ - node->prev = head->prev; - node->next = head; - head->prev->next = node; - head->prev = node; -} - -// Remove a node from the list. -static inline void -llist_remove(struct llist_node *node) -{ - struct llist_node *prev = node->prev; - struct llist_node *next = node->next; - prev->next = next; - next->prev = prev; - node->prev = NULL; - node->next = NULL; -} - -// Append all nodes from head2 onto head1. head2 is left empty. -static inline void -llist_concat(struct llist_node *head1, struct llist_node *head2) -{ - if (!llist_empty(head2)) { - head1->prev->next = head2->next; - head2->next->prev = head1->prev; - - head1->prev = head2->prev; - head2->prev->next = head1; - llist_init(head2); - } -} - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_LLIST_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_lock.h b/Python314_4_x86_Template/include/internal/pycore_lock.h deleted file mode 100644 index 9b071573a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_lock.h +++ /dev/null @@ -1,236 +0,0 @@ -// Lightweight locks and other synchronization mechanisms. -// -// These implementations are based on WebKit's WTF::Lock. See -// https://webkit.org/blog/6161/locking-in-webkit/ for a description of the -// design. -#ifndef Py_INTERNAL_LOCK_H -#define Py_INTERNAL_LOCK_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -//_Py_UNLOCKED is defined as 0 and _Py_LOCKED as 1 in Include/cpython/lock.h -#define _Py_HAS_PARKED 2 -#define _Py_ONCE_INITIALIZED 4 - -static inline int -PyMutex_LockFast(PyMutex *m) -{ - uint8_t expected = _Py_UNLOCKED; - uint8_t *lock_bits = &m->_bits; - return _Py_atomic_compare_exchange_uint8(lock_bits, &expected, _Py_LOCKED); -} - -// Re-initializes the mutex after a fork to the unlocked state. -static inline void -_PyMutex_at_fork_reinit(PyMutex *m) -{ - memset(m, 0, sizeof(*m)); -} - -typedef enum _PyLockFlags { - // Do not detach/release the GIL when waiting on the lock. - _Py_LOCK_DONT_DETACH = 0, - - // Detach/release the GIL while waiting on the lock. - _PY_LOCK_DETACH = 1, - - // Handle signals if interrupted while waiting on the lock. - _PY_LOCK_HANDLE_SIGNALS = 2, -} _PyLockFlags; - -// Lock a mutex with an optional timeout and additional options. See -// _PyLockFlags for details. -extern PyAPI_FUNC(PyLockStatus) -_PyMutex_LockTimed(PyMutex *m, PyTime_t timeout_ns, _PyLockFlags flags); - -// Lock a mutex with additional options. See _PyLockFlags for details. -static inline void -PyMutex_LockFlags(PyMutex *m, _PyLockFlags flags) -{ - uint8_t expected = _Py_UNLOCKED; - if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) { - _PyMutex_LockTimed(m, -1, flags); - } -} - -// Unlock a mutex, returns -1 if the mutex is not locked (used for improved -// error messages) otherwise returns 0. -extern int _PyMutex_TryUnlock(PyMutex *m); - - -// PyEvent is a one-time event notification -typedef struct { - uint8_t v; -} PyEvent; - -// Check if the event is set without blocking. Returns 1 if the event is set or -// 0 otherwise. -PyAPI_FUNC(int) _PyEvent_IsSet(PyEvent *evt); - -// Set the event and notify any waiting threads. -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(void) _PyEvent_Notify(PyEvent *evt); - -// Wait for the event to be set. If the event is already set, then this returns -// immediately. -PyAPI_FUNC(void) PyEvent_Wait(PyEvent *evt); - -// Wait for the event to be set, or until the timeout expires. If the event is -// already set, then this returns immediately. Returns 1 if the event was set, -// and 0 if the timeout expired or thread was interrupted. If `detach` is -// true, then the thread will detach/release the GIL while waiting. -PyAPI_FUNC(int) -PyEvent_WaitTimed(PyEvent *evt, PyTime_t timeout_ns, int detach); - -// _PyRawMutex implements a word-sized mutex that that does not depend on the -// parking lot API, and therefore can be used in the parking lot -// implementation. -// -// The mutex uses a packed representation: the least significant bit is used to -// indicate whether the mutex is locked or not. The remaining bits are either -// zero or a pointer to a `struct raw_mutex_entry` (see lock.c). -typedef struct { - uintptr_t v; -} _PyRawMutex; - -// Slow paths for lock/unlock -extern void _PyRawMutex_LockSlow(_PyRawMutex *m); -extern void _PyRawMutex_UnlockSlow(_PyRawMutex *m); - -static inline void -_PyRawMutex_Lock(_PyRawMutex *m) -{ - uintptr_t unlocked = _Py_UNLOCKED; - if (_Py_atomic_compare_exchange_uintptr(&m->v, &unlocked, _Py_LOCKED)) { - return; - } - _PyRawMutex_LockSlow(m); -} - -static inline void -_PyRawMutex_Unlock(_PyRawMutex *m) -{ - uintptr_t locked = _Py_LOCKED; - if (_Py_atomic_compare_exchange_uintptr(&m->v, &locked, _Py_UNLOCKED)) { - return; - } - _PyRawMutex_UnlockSlow(m); -} - -// Type signature for one-time initialization functions. The function should -// return 0 on success and -1 on failure. -typedef int _Py_once_fn_t(void *arg); - -// (private) slow path for one time initialization -PyAPI_FUNC(int) -_PyOnceFlag_CallOnceSlow(_PyOnceFlag *flag, _Py_once_fn_t *fn, void *arg); - -// Calls `fn` once using `flag`. The `arg` is passed to the call to `fn`. -// -// Returns 0 on success and -1 on failure. -// -// If `fn` returns 0 (success), then subsequent calls immediately return 0. -// If `fn` returns -1 (failure), then subsequent calls will retry the call. -static inline int -_PyOnceFlag_CallOnce(_PyOnceFlag *flag, _Py_once_fn_t *fn, void *arg) -{ - if (_Py_atomic_load_uint8(&flag->v) == _Py_ONCE_INITIALIZED) { - return 0; - } - return _PyOnceFlag_CallOnceSlow(flag, fn, arg); -} - -// A recursive mutex. The mutex should zero-initialized. -typedef struct { - PyMutex mutex; - unsigned long long thread; // i.e., PyThread_get_thread_ident_ex() - size_t level; -} _PyRecursiveMutex; - -PyAPI_FUNC(int) _PyRecursiveMutex_IsLockedByCurrentThread(_PyRecursiveMutex *m); -PyAPI_FUNC(void) _PyRecursiveMutex_Lock(_PyRecursiveMutex *m); -extern PyLockStatus _PyRecursiveMutex_LockTimed(_PyRecursiveMutex *m, PyTime_t timeout, _PyLockFlags flags); -PyAPI_FUNC(void) _PyRecursiveMutex_Unlock(_PyRecursiveMutex *m); -extern int _PyRecursiveMutex_TryUnlock(_PyRecursiveMutex *m); - -// A readers-writer (RW) lock. The lock supports multiple concurrent readers or -// a single writer. The lock is write-preferring: if a writer is waiting while -// the lock is read-locked then, new readers will be blocked. This avoids -// starvation of writers. -// -// In C++, the equivalent synchronization primitive is std::shared_mutex -// with shared ("read") and exclusive ("write") locking. -// -// The two least significant bits are used to indicate if the lock is -// write-locked and if there are parked threads (either readers or writers) -// waiting to acquire the lock. The remaining bits are used to indicate the -// number of readers holding the lock. -// -// 0b000..00000: unlocked -// 0bnnn..nnn00: nnn..nnn readers holding the lock -// 0bnnn..nnn10: nnn..nnn readers holding the lock and a writer is waiting -// 0b00000..010: unlocked with awoken writer about to acquire lock -// 0b00000..001: write-locked -// 0b00000..011: write-locked and readers or other writers are waiting -// -// Note that reader_count must be zero if the lock is held by a writer, and -// vice versa. The lock can only be held by readers or a writer, but not both. -// -// The design is optimized for simplicity of the implementation. The lock is -// not fair: if fairness is desired, use an additional PyMutex to serialize -// writers. The lock is also not reentrant. -typedef struct { - uintptr_t bits; -} _PyRWMutex; - -// Read lock (i.e., shared lock) -PyAPI_FUNC(void) _PyRWMutex_RLock(_PyRWMutex *rwmutex); -PyAPI_FUNC(void) _PyRWMutex_RUnlock(_PyRWMutex *rwmutex); - -// Write lock (i.e., exclusive lock) -PyAPI_FUNC(void) _PyRWMutex_Lock(_PyRWMutex *rwmutex); -PyAPI_FUNC(void) _PyRWMutex_Unlock(_PyRWMutex *rwmutex); - -// Similar to linux seqlock: https://en.wikipedia.org/wiki/Seqlock -// We use a sequence number to lock the writer, an even sequence means we're unlocked, an odd -// sequence means we're locked. Readers will read the sequence before attempting to read the -// underlying data and then read the sequence number again after reading the data. If the -// sequence has not changed the data is valid. -// -// Differs a little bit in that we use CAS on sequence as the lock, instead of a separate spin lock. -// The writer can also detect that the undelering data has not changed and abandon the write -// and restore the previous sequence. -typedef struct { - uint32_t sequence; -} _PySeqLock; - -// Lock the sequence lock for the writer -PyAPI_FUNC(void) _PySeqLock_LockWrite(_PySeqLock *seqlock); - -// Unlock the sequence lock and move to the next sequence number. -PyAPI_FUNC(void) _PySeqLock_UnlockWrite(_PySeqLock *seqlock); - -// Abandon the current update indicating that no mutations have occurred -// and restore the previous sequence value. -PyAPI_FUNC(void) _PySeqLock_AbandonWrite(_PySeqLock *seqlock); - -// Begin a read operation and return the current sequence number. -PyAPI_FUNC(uint32_t) _PySeqLock_BeginRead(_PySeqLock *seqlock); - -// End the read operation and confirm that the sequence number has not changed. -// Returns 1 if the read was successful or 0 if the read should be retried. -PyAPI_FUNC(int) _PySeqLock_EndRead(_PySeqLock *seqlock, uint32_t previous); - -// Check if the lock was held during a fork and clear the lock. Returns 1 -// if the lock was held and any associated data should be cleared. -PyAPI_FUNC(int) _PySeqLock_AfterFork(_PySeqLock *seqlock); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_LOCK_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_long.h b/Python314_4_x86_Template/include/internal/pycore_long.h deleted file mode 100644 index 36d6d7d70..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_long.h +++ /dev/null @@ -1,336 +0,0 @@ -#ifndef Py_INTERNAL_LONG_H -#define Py_INTERNAL_LONG_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_bytesobject.h" // _PyBytesWriter -#include "pycore_runtime.h" // _Py_SINGLETON() - -/* - * Default int base conversion size limitation: Denial of Service prevention. - * - * Chosen such that this isn't wildly slow on modern hardware and so that - * everyone's existing deployed numpy test suite passes before - * https://github.com/numpy/numpy/issues/22098 is widely available. - * - * $ python -m timeit -s 's = "1"*4300' 'int(s)' - * 2000 loops, best of 5: 125 usec per loop - * $ python -m timeit -s 's = "1"*4300; v = int(s)' 'str(v)' - * 1000 loops, best of 5: 311 usec per loop - * (zen2 cloud VM) - * - * 4300 decimal digits fits a ~14284 bit number. - */ -#define _PY_LONG_DEFAULT_MAX_STR_DIGITS 4300 -/* - * Threshold for max digits check. For performance reasons int() and - * int.__str__() don't checks values that are smaller than this - * threshold. Acts as a guaranteed minimum size limit for bignums that - * applications can expect from CPython. - * - * % python -m timeit -s 's = "1"*640; v = int(s)' 'str(int(s))' - * 20000 loops, best of 5: 12 usec per loop - * - * "640 digits should be enough for anyone." - gps - * fits a ~2126 bit decimal number. - */ -#define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640 - -#if ((_PY_LONG_DEFAULT_MAX_STR_DIGITS != 0) && \ - (_PY_LONG_DEFAULT_MAX_STR_DIGITS < _PY_LONG_MAX_STR_DIGITS_THRESHOLD)) -# error "_PY_LONG_DEFAULT_MAX_STR_DIGITS smaller than threshold." -#endif - -/* runtime lifecycle */ - -extern PyStatus _PyLong_InitTypes(PyInterpreterState *); -extern void _PyLong_FiniTypes(PyInterpreterState *interp); - - -/* other API */ - -PyAPI_FUNC(void) _PyLong_ExactDealloc(PyObject *self); - -#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints) - -// _PyLong_GetZero() and _PyLong_GetOne() must always be available -// _PyLong_FromUnsignedChar must always be available -#if _PY_NSMALLPOSINTS < 257 -# error "_PY_NSMALLPOSINTS must be greater than or equal to 257" -#endif - -#define _PY_IS_SMALL_INT(val) \ - (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS) - -// Return a reference to the immortal zero singleton. -// The function cannot return NULL. -static inline PyObject* _PyLong_GetZero(void) -{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; } - -// Return a reference to the immortal one singleton. -// The function cannot return NULL. -static inline PyObject* _PyLong_GetOne(void) -{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; } - -static inline PyObject* _PyLong_FromUnsignedChar(unsigned char i) -{ - return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i]; -} - -// _PyLong_Frexp returns a double x and an exponent e such that the -// true value is approximately equal to x * 2**e. x is -// 0.0 if and only if the input is 0 (in which case, e and x are both -// zeroes); otherwise, 0.5 <= abs(x) < 1.0. -// Always successful. -// -// Export for 'math' shared extension -PyAPI_DATA(double) _PyLong_Frexp(PyLongObject *a, int64_t *e); - -extern PyObject* _PyLong_FromBytes(const char *, Py_ssize_t, int); - -// _PyLong_DivmodNear. Given integers a and b, compute the nearest -// integer q to the exact quotient a / b, rounding to the nearest even integer -// in the case of a tie. Return (q, r), where r = a - q*b. The remainder r -// will satisfy abs(r) <= abs(b)/2, with equality possible only if q is -// even. -// -// Export for '_datetime' shared extension. -PyAPI_DATA(PyObject*) _PyLong_DivmodNear(PyObject *, PyObject *); - -// _PyLong_Format: Convert the long to a string object with given base, -// appending a base prefix of 0[box] if base is 2, 8 or 16. -// Export for '_tkinter' shared extension. -PyAPI_DATA(PyObject*) _PyLong_Format(PyObject *obj, int base); - -// Export for 'math' shared extension -PyAPI_DATA(PyObject*) _PyLong_Rshift(PyObject *, int64_t); - -// Export for 'math' shared extension -PyAPI_DATA(PyObject*) _PyLong_Lshift(PyObject *, int64_t); - -PyAPI_FUNC(PyObject*) _PyLong_Add(PyLongObject *left, PyLongObject *right); -PyAPI_FUNC(PyObject*) _PyLong_Multiply(PyLongObject *left, PyLongObject *right); -PyAPI_FUNC(PyObject*) _PyLong_Subtract(PyLongObject *left, PyLongObject *right); - -// Export for 'binascii' shared extension. -PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; - -/* Format the object based on the format_spec, as defined in PEP 3101 - (Advanced String Formatting). */ -extern int _PyLong_FormatAdvancedWriter( - _PyUnicodeWriter *writer, - PyObject *obj, - PyObject *format_spec, - Py_ssize_t start, - Py_ssize_t end); - -extern int _PyLong_FormatWriter( - _PyUnicodeWriter *writer, - PyObject *obj, - int base, - int alternate); - -extern char* _PyLong_FormatBytesWriter( - _PyBytesWriter *writer, - char *str, - PyObject *obj, - int base, - int alternate); - -// Argument converters used by Argument Clinic - -// Export for 'select' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_UnsignedShort_Converter(PyObject *, void *); - -// Export for '_testclinic' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_UnsignedInt_Converter(PyObject *, void *); - -// Export for '_blake2' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_UnsignedLong_Converter(PyObject *, void *); - -// Export for '_blake2' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_UnsignedLongLong_Converter(PyObject *, void *); - -// Export for '_testclinic' shared extension (Argument Clinic code) -PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *); - -PyAPI_FUNC(int) _PyLong_UInt8_Converter(PyObject *, void *); -PyAPI_FUNC(int) _PyLong_UInt16_Converter(PyObject *, void *); -PyAPI_FUNC(int) _PyLong_UInt32_Converter(PyObject *, void *); -PyAPI_FUNC(int) _PyLong_UInt64_Converter(PyObject *, void *); - -/* Long value tag bits: - * 0-1: Sign bits value = (1-sign), ie. negative=2, positive=0, zero=1. - * 2: Set to 1 for the small ints - * 3+ Unsigned digit count - */ -#define SIGN_MASK 3 -#define SIGN_ZERO 1 -#define SIGN_NEGATIVE 2 -#define NON_SIZE_BITS 3 -#define IMMORTALITY_BIT_MASK (1 << 2) - -/* The functions _PyLong_IsCompact and _PyLong_CompactValue are defined - * in Include/cpython/longobject.h, since they need to be inline. - * - * "Compact" values have at least one bit to spare, - * so that addition and subtraction can be performed on the values - * without risk of overflow. - * - * The inline functions need tag bits. - * For readability, rather than do `#define SIGN_MASK _PyLong_SIGN_MASK` - * we define them to the numbers in both places and then assert that - * they're the same. - */ -#if SIGN_MASK != _PyLong_SIGN_MASK -# error "SIGN_MASK does not match _PyLong_SIGN_MASK" -#endif -#if NON_SIZE_BITS != _PyLong_NON_SIZE_BITS -# error "NON_SIZE_BITS does not match _PyLong_NON_SIZE_BITS" -#endif - -/* All *compact" values are guaranteed to fit into - * a Py_ssize_t with at least one bit to spare. - * In other words, for 64 bit machines, compact - * will be signed 63 (or fewer) bit values - */ - -/* Return 1 if the argument is compact int */ -static inline int -_PyLong_IsNonNegativeCompact(const PyLongObject* op) { - assert(PyLong_Check(op)); - return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS)); -} - - -static inline int -_PyLong_BothAreCompact(const PyLongObject* a, const PyLongObject* b) { - assert(PyLong_Check(a)); - assert(PyLong_Check(b)); - return (a->long_value.lv_tag | b->long_value.lv_tag) < (2 << NON_SIZE_BITS); -} - -static inline bool -_PyLong_IsZero(const PyLongObject *op) -{ - return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO; -} - -static inline bool -_PyLong_IsNegative(const PyLongObject *op) -{ - return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE; -} - -static inline bool -_PyLong_IsPositive(const PyLongObject *op) -{ - return (op->long_value.lv_tag & SIGN_MASK) == 0; -} - -/* Return true if the argument is a small int */ -static inline bool -_PyLong_IsSmallInt(const PyLongObject *op) -{ - assert(PyLong_Check(op)); - bool is_small_int = (op->long_value.lv_tag & IMMORTALITY_BIT_MASK) != 0; - assert(PyLong_CheckExact(op) || (!is_small_int)); - assert(_Py_IsImmortal(op) || (!is_small_int)); - assert((_PyLong_IsCompact(op) - && _PY_IS_SMALL_INT(_PyLong_CompactValue(op))) - || (!is_small_int)); - return is_small_int; -} - -static inline Py_ssize_t -_PyLong_DigitCount(const PyLongObject *op) -{ - assert(PyLong_Check(op)); - return (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS); -} - -/* Equivalent to _PyLong_DigitCount(op) * _PyLong_NonCompactSign(op) */ -static inline Py_ssize_t -_PyLong_SignedDigitCount(const PyLongObject *op) -{ - assert(PyLong_Check(op)); - Py_ssize_t sign = 1 - (op->long_value.lv_tag & SIGN_MASK); - return sign * (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS); -} - -static inline int -_PyLong_CompactSign(const PyLongObject *op) -{ - assert(PyLong_Check(op)); - assert(_PyLong_IsCompact((PyLongObject *)op)); - return 1 - (op->long_value.lv_tag & SIGN_MASK); -} - -static inline int -_PyLong_NonCompactSign(const PyLongObject *op) -{ - assert(PyLong_Check(op)); - assert(!_PyLong_IsCompact((PyLongObject *)op)); - return 1 - (op->long_value.lv_tag & SIGN_MASK); -} - -/* Do a and b have the same sign? */ -static inline int -_PyLong_SameSign(const PyLongObject *a, const PyLongObject *b) -{ - return (a->long_value.lv_tag & SIGN_MASK) == (b->long_value.lv_tag & SIGN_MASK); -} - -#define TAG_FROM_SIGN_AND_SIZE(sign, size) \ - ((uintptr_t)(1 - (sign)) | ((uintptr_t)(size) << NON_SIZE_BITS)) - -static inline void -_PyLong_SetSignAndDigitCount(PyLongObject *op, int sign, Py_ssize_t size) -{ - assert(size >= 0); - assert(-1 <= sign && sign <= 1); - assert(sign != 0 || size == 0); - op->long_value.lv_tag = TAG_FROM_SIGN_AND_SIZE(sign, size); -} - -static inline void -_PyLong_SetDigitCount(PyLongObject *op, Py_ssize_t size) -{ - assert(size >= 0); - op->long_value.lv_tag = (((size_t)size) << NON_SIZE_BITS) | (op->long_value.lv_tag & SIGN_MASK); -} - -#define NON_SIZE_MASK ~(uintptr_t)((1 << NON_SIZE_BITS) - 1) - -static inline void -_PyLong_FlipSign(PyLongObject *op) -{ - assert(!_PyLong_IsSmallInt(op)); - unsigned int flipped_sign = 2 - (op->long_value.lv_tag & SIGN_MASK); - op->long_value.lv_tag &= NON_SIZE_MASK; - op->long_value.lv_tag |= flipped_sign; -} - -#define _PyLong_DIGIT_INIT(val) \ - { \ - .ob_base = _PyObject_HEAD_INIT(&PyLong_Type), \ - .long_value = { \ - .lv_tag = TAG_FROM_SIGN_AND_SIZE( \ - (val) == 0 ? 0 : ((val) < 0 ? -1 : 1), \ - (val) == 0 ? 0 : 1) | IMMORTALITY_BIT_MASK, \ - { ((val) >= 0 ? (val) : -(val)) }, \ - } \ - } - -#define _PyLong_FALSE_TAG TAG_FROM_SIGN_AND_SIZE(0, 0) -#define _PyLong_TRUE_TAG TAG_FROM_SIGN_AND_SIZE(1, 1) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_LONG_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_magic_number.h b/Python314_4_x86_Template/include/internal/pycore_magic_number.h deleted file mode 100644 index f31951057..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_magic_number.h +++ /dev/null @@ -1,305 +0,0 @@ -#ifndef Py_INTERNAL_MAGIC_NUMBER_H -#define Py_INTERNAL_MAGIC_NUMBER_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -/* - -Magic number to reject .pyc files generated by other Python versions. -It should change for each incompatible change to the bytecode. - -PYC_MAGIC_NUMBER must change whenever the bytecode emitted by the compiler may -no longer be understood by older implementations of the eval loop (usually due -to the addition of new opcodes). - -The value of CR and LF is incorporated so if you ever read or write -a .pyc file in text mode the magic number will be wrong; also, the -Apple MPW compiler swaps their values, botching string constants. - -There were a variety of old schemes for setting the magic number. Starting with -Python 3.11, Python 3.n starts with magic number 2900+50n. Within each minor -version, the magic number is incremented by 1 each time the file format changes. - -Known values: - Python 1.5: 20121 - Python 1.5.1: 20121 - Python 1.5.2: 20121 - Python 1.6: 50428 - Python 2.0: 50823 - Python 2.0.1: 50823 - Python 2.1: 60202 - Python 2.1.1: 60202 - Python 2.1.2: 60202 - Python 2.2: 60717 - Python 2.3a0: 62011 - Python 2.3a0: 62021 - Python 2.3a0: 62011 (!) - Python 2.4a0: 62041 - Python 2.4a3: 62051 - Python 2.4b1: 62061 - Python 2.5a0: 62071 - Python 2.5a0: 62081 (ast-branch) - Python 2.5a0: 62091 (with) - Python 2.5a0: 62092 (changed WITH_CLEANUP opcode) - Python 2.5b3: 62101 (fix wrong code: for x, in ...) - Python 2.5b3: 62111 (fix wrong code: x += yield) - Python 2.5c1: 62121 (fix wrong lnotab with for loops and - storing constants that should have been removed) - Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp) - Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode) - Python 2.6a1: 62161 (WITH_CLEANUP optimization) - Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND) - Python 2.7a0: 62181 (optimize conditional branches: - introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE) - Python 2.7a0 62191 (introduce SETUP_WITH) - Python 2.7a0 62201 (introduce BUILD_SET) - Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD) - Python 3000: 3000 - 3010 (removed UNARY_CONVERT) - 3020 (added BUILD_SET) - 3030 (added keyword-only parameters) - 3040 (added signature annotations) - 3050 (print becomes a function) - 3060 (PEP 3115 metaclass syntax) - 3061 (string literals become unicode) - 3071 (PEP 3109 raise changes) - 3081 (PEP 3137 make __file__ and __name__ unicode) - 3091 (kill str8 interning) - 3101 (merge from 2.6a0, see 62151) - 3103 (__file__ points to source file) - Python 3.0a4: 3111 (WITH_CLEANUP optimization). - Python 3.0b1: 3131 (lexical exception stacking, including POP_EXCEPT - #3021) - Python 3.1a1: 3141 (optimize list, set and dict comprehensions: - change LIST_APPEND and SET_ADD, add MAP_ADD #2183) - Python 3.1a1: 3151 (optimize conditional branches: - introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE - #4715) - Python 3.2a1: 3160 (add SETUP_WITH #6101) - Python 3.2a2: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR #9225) - Python 3.2a3 3180 (add DELETE_DEREF #4617) - Python 3.3a1 3190 (__class__ super closure changed) - Python 3.3a1 3200 (PEP 3155 __qualname__ added #13448) - Python 3.3a1 3210 (added size modulo 2**32 to the pyc header #13645) - Python 3.3a2 3220 (changed PEP 380 implementation #14230) - Python 3.3a4 3230 (revert changes to implicit __class__ closure #14857) - Python 3.4a1 3250 (evaluate positional default arguments before - keyword-only defaults #16967) - Python 3.4a1 3260 (add LOAD_CLASSDEREF; allow locals of class to override - free vars #17853) - Python 3.4a1 3270 (various tweaks to the __class__ closure #12370) - Python 3.4a1 3280 (remove implicit class argument) - Python 3.4a4 3290 (changes to __qualname__ computation #19301) - Python 3.4a4 3300 (more changes to __qualname__ computation #19301) - Python 3.4rc2 3310 (alter __qualname__ computation #20625) - Python 3.5a1 3320 (PEP 465: Matrix multiplication operator #21176) - Python 3.5b1 3330 (PEP 448: Additional Unpacking Generalizations #2292) - Python 3.5b2 3340 (fix dictionary display evaluation order #11205) - Python 3.5b3 3350 (add GET_YIELD_FROM_ITER opcode #24400) - Python 3.5.2 3351 (fix BUILD_MAP_UNPACK_WITH_CALL opcode #27286) - Python 3.6a0 3360 (add FORMAT_VALUE opcode #25483) - Python 3.6a1 3361 (lineno delta of code.co_lnotab becomes signed #26107) - Python 3.6a2 3370 (16 bit wordcode #26647) - Python 3.6a2 3371 (add BUILD_CONST_KEY_MAP opcode #27140) - Python 3.6a2 3372 (MAKE_FUNCTION simplification, remove MAKE_CLOSURE - #27095) - Python 3.6b1 3373 (add BUILD_STRING opcode #27078) - Python 3.6b1 3375 (add SETUP_ANNOTATIONS and STORE_ANNOTATION opcodes - #27985) - Python 3.6b1 3376 (simplify CALL_FUNCTIONs & BUILD_MAP_UNPACK_WITH_CALL - #27213) - Python 3.6b1 3377 (set __class__ cell from type.__new__ #23722) - Python 3.6b2 3378 (add BUILD_TUPLE_UNPACK_WITH_CALL #28257) - Python 3.6rc1 3379 (more thorough __class__ validation #23722) - Python 3.7a1 3390 (add LOAD_METHOD and CALL_METHOD opcodes #26110) - Python 3.7a2 3391 (update GET_AITER #31709) - Python 3.7a4 3392 (PEP 552: Deterministic pycs #31650) - Python 3.7b1 3393 (remove STORE_ANNOTATION opcode #32550) - Python 3.7b5 3394 (restored docstring as the first stmt in the body; - this might affected the first line number #32911) - Python 3.8a1 3400 (move frame block handling to compiler #17611) - Python 3.8a1 3401 (add END_ASYNC_FOR #33041) - Python 3.8a1 3410 (PEP570 Python Positional-Only Parameters #36540) - Python 3.8b2 3411 (Reverse evaluation order of key: value in dict - comprehensions #35224) - Python 3.8b2 3412 (Swap the position of positional args and positional - only args in ast.arguments #37593) - Python 3.8b4 3413 (Fix "break" and "continue" in "finally" #37830) - Python 3.9a0 3420 (add LOAD_ASSERTION_ERROR #34880) - Python 3.9a0 3421 (simplified bytecode for with blocks #32949) - Python 3.9a0 3422 (remove BEGIN_FINALLY, END_FINALLY, CALL_FINALLY, POP_FINALLY bytecodes #33387) - Python 3.9a2 3423 (add IS_OP, CONTAINS_OP and JUMP_IF_NOT_EXC_MATCH bytecodes #39156) - Python 3.9a2 3424 (simplify bytecodes for *value unpacking) - Python 3.9a2 3425 (simplify bytecodes for **value unpacking) - Python 3.10a1 3430 (Make 'annotations' future by default) - Python 3.10a1 3431 (New line number table format -- PEP 626) - Python 3.10a2 3432 (Function annotation for MAKE_FUNCTION is changed from dict to tuple bpo-42202) - Python 3.10a2 3433 (RERAISE restores f_lasti if oparg != 0) - Python 3.10a6 3434 (PEP 634: Structural Pattern Matching) - Python 3.10a7 3435 Use instruction offsets (as opposed to byte offsets). - Python 3.10b1 3436 (Add GEN_START bytecode #43683) - Python 3.10b1 3437 (Undo making 'annotations' future by default - We like to dance among core devs!) - Python 3.10b1 3438 Safer line number table handling. - Python 3.10b1 3439 (Add ROT_N) - Python 3.11a1 3450 Use exception table for unwinding ("zero cost" exception handling) - Python 3.11a1 3451 (Add CALL_METHOD_KW) - Python 3.11a1 3452 (drop nlocals from marshaled code objects) - Python 3.11a1 3453 (add co_fastlocalnames and co_fastlocalkinds) - Python 3.11a1 3454 (compute cell offsets relative to locals bpo-43693) - Python 3.11a1 3455 (add MAKE_CELL bpo-43693) - Python 3.11a1 3456 (interleave cell args bpo-43693) - Python 3.11a1 3457 (Change localsplus to a bytes object bpo-43693) - Python 3.11a1 3458 (imported objects now don't use LOAD_METHOD/CALL_METHOD) - Python 3.11a1 3459 (PEP 657: add end line numbers and column offsets for instructions) - Python 3.11a1 3460 (Add co_qualname field to PyCodeObject bpo-44530) - Python 3.11a1 3461 (JUMP_ABSOLUTE must jump backwards) - Python 3.11a2 3462 (bpo-44511: remove COPY_DICT_WITHOUT_KEYS, change - MATCH_CLASS and MATCH_KEYS, and add COPY) - Python 3.11a3 3463 (bpo-45711: JUMP_IF_NOT_EXC_MATCH no longer pops the - active exception) - Python 3.11a3 3464 (bpo-45636: Merge numeric BINARY_*INPLACE_* into - BINARY_OP) - Python 3.11a3 3465 (Add COPY_FREE_VARS opcode) - Python 3.11a4 3466 (bpo-45292: PEP-654 except*) - Python 3.11a4 3467 (Change CALL_xxx opcodes) - Python 3.11a4 3468 (Add SEND opcode) - Python 3.11a4 3469 (bpo-45711: remove type, traceback from exc_info) - Python 3.11a4 3470 (bpo-46221: PREP_RERAISE_STAR no longer pushes lasti) - Python 3.11a4 3471 (bpo-46202: remove pop POP_EXCEPT_AND_RERAISE) - Python 3.11a4 3472 (bpo-46009: replace GEN_START with POP_TOP) - Python 3.11a4 3473 (Add POP_JUMP_IF_NOT_NONE/POP_JUMP_IF_NONE opcodes) - Python 3.11a4 3474 (Add RESUME opcode) - Python 3.11a5 3475 (Add RETURN_GENERATOR opcode) - Python 3.11a5 3476 (Add ASYNC_GEN_WRAP opcode) - Python 3.11a5 3477 (Replace DUP_TOP/DUP_TOP_TWO with COPY and - ROT_TWO/ROT_THREE/ROT_FOUR/ROT_N with SWAP) - Python 3.11a5 3478 (New CALL opcodes) - Python 3.11a5 3479 (Add PUSH_NULL opcode) - Python 3.11a5 3480 (New CALL opcodes, second iteration) - Python 3.11a5 3481 (Use inline cache for BINARY_OP) - Python 3.11a5 3482 (Use inline caching for UNPACK_SEQUENCE and LOAD_GLOBAL) - Python 3.11a5 3483 (Use inline caching for COMPARE_OP and BINARY_SUBSCR) - Python 3.11a5 3484 (Use inline caching for LOAD_ATTR, LOAD_METHOD, and - STORE_ATTR) - Python 3.11a5 3485 (Add an oparg to GET_AWAITABLE) - Python 3.11a6 3486 (Use inline caching for PRECALL and CALL) - Python 3.11a6 3487 (Remove the adaptive "oparg counter" mechanism) - Python 3.11a6 3488 (LOAD_GLOBAL can push additional NULL) - Python 3.11a6 3489 (Add JUMP_BACKWARD, remove JUMP_ABSOLUTE) - Python 3.11a6 3490 (remove JUMP_IF_NOT_EXC_MATCH, add CHECK_EXC_MATCH) - Python 3.11a6 3491 (remove JUMP_IF_NOT_EG_MATCH, add CHECK_EG_MATCH, - add JUMP_BACKWARD_NO_INTERRUPT, make JUMP_NO_INTERRUPT virtual) - Python 3.11a7 3492 (make POP_JUMP_IF_NONE/NOT_NONE/TRUE/FALSE relative) - Python 3.11a7 3493 (Make JUMP_IF_TRUE_OR_POP/JUMP_IF_FALSE_OR_POP relative) - Python 3.11a7 3494 (New location info table) - Python 3.11b4 3495 (Set line number of module's RESUME instr to 0 per PEP 626) - Python 3.12a1 3500 (Remove PRECALL opcode) - Python 3.12a1 3501 (YIELD_VALUE oparg == stack_depth) - Python 3.12a1 3502 (LOAD_FAST_CHECK, no NULL-check in LOAD_FAST) - Python 3.12a1 3503 (Shrink LOAD_METHOD cache) - Python 3.12a1 3504 (Merge LOAD_METHOD back into LOAD_ATTR) - Python 3.12a1 3505 (Specialization/Cache for FOR_ITER) - Python 3.12a1 3506 (Add BINARY_SLICE and STORE_SLICE instructions) - Python 3.12a1 3507 (Set lineno of module's RESUME to 0) - Python 3.12a1 3508 (Add CLEANUP_THROW) - Python 3.12a1 3509 (Conditional jumps only jump forward) - Python 3.12a2 3510 (FOR_ITER leaves iterator on the stack) - Python 3.12a2 3511 (Add STOPITERATION_ERROR instruction) - Python 3.12a2 3512 (Remove all unused consts from code objects) - Python 3.12a4 3513 (Add CALL_INTRINSIC_1 instruction, removed STOPITERATION_ERROR, PRINT_EXPR, IMPORT_STAR) - Python 3.12a4 3514 (Remove ASYNC_GEN_WRAP, LIST_TO_TUPLE, and UNARY_POSITIVE) - Python 3.12a5 3515 (Embed jump mask in COMPARE_OP oparg) - Python 3.12a5 3516 (Add COMPARE_AND_BRANCH instruction) - Python 3.12a5 3517 (Change YIELD_VALUE oparg to exception block depth) - Python 3.12a6 3518 (Add RETURN_CONST instruction) - Python 3.12a6 3519 (Modify SEND instruction) - Python 3.12a6 3520 (Remove PREP_RERAISE_STAR, add CALL_INTRINSIC_2) - Python 3.12a7 3521 (Shrink the LOAD_GLOBAL caches) - Python 3.12a7 3522 (Removed JUMP_IF_FALSE_OR_POP/JUMP_IF_TRUE_OR_POP) - Python 3.12a7 3523 (Convert COMPARE_AND_BRANCH back to COMPARE_OP) - Python 3.12a7 3524 (Shrink the BINARY_SUBSCR caches) - Python 3.12b1 3525 (Shrink the CALL caches) - Python 3.12b1 3526 (Add instrumentation support) - Python 3.12b1 3527 (Add LOAD_SUPER_ATTR) - Python 3.12b1 3528 (Add LOAD_SUPER_ATTR_METHOD specialization) - Python 3.12b1 3529 (Inline list/dict/set comprehensions) - Python 3.12b1 3530 (Shrink the LOAD_SUPER_ATTR caches) - Python 3.12b1 3531 (Add PEP 695 changes) - Python 3.13a1 3550 (Plugin optimizer support) - Python 3.13a1 3551 (Compact superinstructions) - Python 3.13a1 3552 (Remove LOAD_FAST__LOAD_CONST and LOAD_CONST__LOAD_FAST) - Python 3.13a1 3553 (Add SET_FUNCTION_ATTRIBUTE) - Python 3.13a1 3554 (more efficient bytecodes for f-strings) - Python 3.13a1 3555 (generate specialized opcodes metadata from bytecodes.c) - Python 3.13a1 3556 (Convert LOAD_CLOSURE to a pseudo-op) - Python 3.13a1 3557 (Make the conversion to boolean in jumps explicit) - Python 3.13a1 3558 (Reorder the stack items for CALL) - Python 3.13a1 3559 (Generate opcode IDs from bytecodes.c) - Python 3.13a1 3560 (Add RESUME_CHECK instruction) - Python 3.13a1 3561 (Add cache entry to branch instructions) - Python 3.13a1 3562 (Assign opcode IDs for internal ops in separate range) - Python 3.13a1 3563 (Add CALL_KW and remove KW_NAMES) - Python 3.13a1 3564 (Removed oparg from YIELD_VALUE, changed oparg values of RESUME) - Python 3.13a1 3565 (Oparg of YIELD_VALUE indicates whether it is in a yield-from) - Python 3.13a1 3566 (Emit JUMP_NO_INTERRUPT instead of JUMP for non-loop no-lineno cases) - Python 3.13a1 3567 (Reimplement line number propagation by the compiler) - Python 3.13a1 3568 (Change semantics of END_FOR) - Python 3.13a5 3569 (Specialize CONTAINS_OP) - Python 3.13a6 3570 (Add __firstlineno__ class attribute) - Python 3.13b1 3571 (Fix miscompilation of private names in generic classes) - Python 3.14a1 3600 (Add LOAD_COMMON_CONSTANT) - Python 3.14a1 3601 (Fix miscompilation of private names in generic classes) - Python 3.14a1 3602 (Add LOAD_SPECIAL. Remove BEFORE_WITH and BEFORE_ASYNC_WITH) - Python 3.14a1 3603 (Remove BUILD_CONST_KEY_MAP) - Python 3.14a1 3604 (Do not duplicate test at end of while statements) - Python 3.14a1 3605 (Move ENTER_EXECUTOR to opcode 255) - Python 3.14a1 3606 (Specialize CALL_KW) - Python 3.14a1 3607 (Add pseudo instructions JUMP_IF_TRUE/FALSE) - Python 3.14a1 3608 (Add support for slices) - Python 3.14a2 3609 (Add LOAD_SMALL_INT and LOAD_CONST_IMMORTAL instructions, remove RETURN_CONST) - Python 3.14a4 3610 (Add VALUE_WITH_FAKE_GLOBALS format to annotationlib) - Python 3.14a4 3611 (Add NOT_TAKEN instruction) - Python 3.14a4 3612 (Add POP_ITER and INSTRUMENTED_POP_ITER) - Python 3.14a4 3613 (Add LOAD_CONST_MORTAL instruction) - Python 3.14a5 3614 (Add BINARY_OP_EXTEND) - Python 3.14a5 3615 (CALL_FUNCTION_EX always take a kwargs argument) - Python 3.14a5 3616 (Remove BINARY_SUBSCR and family. Make them BINARY_OPs) - Python 3.14a6 3617 (Branch monitoring for async for loops) - Python 3.14a6 3618 (Add oparg to END_ASYNC_FOR) - Python 3.14a6 3619 (Renumber RESUME opcode from 149 to 128) - Python 3.14a6 3620 (Optimize bytecode for all/any/tuple called on a genexp) - Python 3.14a7 3621 (Optimize LOAD_FAST opcodes into LOAD_FAST_BORROW) - Python 3.14a7 3622 (Store annotations in different class dict keys) - Python 3.14a7 3623 (Add BUILD_INTERPOLATION & BUILD_TEMPLATE opcodes) - Python 3.14b1 3624 (Don't optimize LOAD_FAST when local is killed by DELETE_FAST) - Python 3.14b3 3625 (Fix handling of opcodes that may leave operands on the stack when optimizing LOAD_FAST) - Python 3.14rc2 3626 (Fix missing exception handlers in logical expression) - Python 3.14rc3 3627 (Fix miscompilation of some module-level annotations) - - Python 3.15 will start with 3650 - - Please don't copy-paste the same pre-release tag for new entries above!!! - You should always use the *upcoming* tag. For example, if 3.12a6 came out - a week ago, I should put "Python 3.12a7" next to my new magic number. - -Whenever PYC_MAGIC_NUMBER is changed, the ranges in the magic_values array in -PC/launcher.c must also be updated. - -*/ - -#define PYC_MAGIC_NUMBER 3627 -/* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes - (little-endian) and then appending b'\r\n'. */ -#define PYC_MAGIC_NUMBER_TOKEN \ - ((uint32_t)PYC_MAGIC_NUMBER | ((uint32_t)'\r' << 16) | ((uint32_t)'\n' << 24)) - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_MAGIC_NUMBER_H diff --git a/Python314_4_x86_Template/include/internal/pycore_memoryobject.h b/Python314_4_x86_Template/include/internal/pycore_memoryobject.h deleted file mode 100644 index 62e204fcb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_memoryobject.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef Py_INTERNAL_MEMORYOBJECT_H -#define Py_INTERNAL_MEMORYOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyTypeObject _PyManagedBuffer_Type; - -PyObject * -_PyMemoryView_FromBufferProc(PyObject *v, int flags, - getbufferproc bufferproc); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_MEMORYOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_mimalloc.h b/Python314_4_x86_Template/include/internal/pycore_mimalloc.h deleted file mode 100644 index d870d01be..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_mimalloc.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef Py_INTERNAL_MIMALLOC_H -#define Py_INTERNAL_MIMALLOC_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#if defined(MIMALLOC_H) || defined(MIMALLOC_TYPES_H) -# error "pycore_mimalloc.h must be included before mimalloc.h" -#endif - -typedef enum { - _Py_MIMALLOC_HEAP_MEM = 0, // PyMem_Malloc() and friends - _Py_MIMALLOC_HEAP_OBJECT = 1, // non-GC objects - _Py_MIMALLOC_HEAP_GC = 2, // GC objects without pre-header - _Py_MIMALLOC_HEAP_GC_PRE = 3, // GC objects with pre-header - _Py_MIMALLOC_HEAP_COUNT -} _Py_mimalloc_heap_id; - -#include "pycore_pymem.h" - -#ifdef WITH_MIMALLOC -# ifdef Py_GIL_DISABLED -# define MI_PRIM_THREAD_ID _Py_ThreadId -# endif -# define MI_DEBUG_UNINIT PYMEM_CLEANBYTE -# define MI_DEBUG_FREED PYMEM_DEADBYTE -# define MI_DEBUG_PADDING PYMEM_FORBIDDENBYTE -#ifdef Py_DEBUG -# define MI_DEBUG 2 -#else -# define MI_DEBUG 0 -#endif - -#ifdef _Py_THREAD_SANITIZER -# define MI_TSAN 1 -#endif - -#ifdef __cplusplus -extern "C++" { -#endif - -#include "mimalloc/mimalloc.h" -#include "mimalloc/mimalloc/types.h" -#include "mimalloc/mimalloc/internal.h" - -#ifdef __cplusplus -} -#endif - -#endif - -#ifdef Py_GIL_DISABLED -struct _mimalloc_interp_state { - // When exiting, threads place any segments with live blocks in this - // shared pool for other threads to claim and reuse. - mi_abandoned_pool_t abandoned_pool; -}; - -struct _mimalloc_thread_state { - mi_heap_t *current_object_heap; - mi_heap_t heaps[_Py_MIMALLOC_HEAP_COUNT]; - mi_tld_t tld; - int initialized; - struct llist_node page_list; -}; -#endif - -#endif // Py_INTERNAL_MIMALLOC_H diff --git a/Python314_4_x86_Template/include/internal/pycore_modsupport.h b/Python314_4_x86_Template/include/internal/pycore_modsupport.h deleted file mode 100644 index 614e9f937..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_modsupport.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef Py_INTERNAL_MODSUPPORT_H -#define Py_INTERNAL_MODSUPPORT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -extern int _PyArg_NoKwnames(const char *funcname, PyObject *kwnames); -#define _PyArg_NoKwnames(funcname, kwnames) \ - ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames))) - -// Export for '_bz2' shared extension -PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); -#define _PyArg_NoPositional(funcname, args) \ - ((args) == NULL || _PyArg_NoPositional((funcname), (args))) - -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs); -#define _PyArg_NoKeywords(funcname, kwargs) \ - ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs))) - -// Export for 'zlib' shared extension -PyAPI_FUNC(int) _PyArg_CheckPositional(const char *, Py_ssize_t, - Py_ssize_t, Py_ssize_t); -#define _Py_ANY_VARARGS(n) ((n) == PY_SSIZE_T_MAX) -#define _PyArg_CheckPositional(funcname, nargs, min, max) \ - ((!_Py_ANY_VARARGS(max) && (min) <= (nargs) && (nargs) <= (max)) \ - || _PyArg_CheckPositional((funcname), (nargs), (min), (max))) - -extern PyObject ** _Py_VaBuildStack( - PyObject **small_stack, - Py_ssize_t small_stack_len, - const char *format, - va_list va, - Py_ssize_t *p_nargs); - -extern PyObject* _PyModule_CreateInitialized(PyModuleDef*, int apiver); - -// Export for '_curses' shared extension -PyAPI_FUNC(int) _PyArg_ParseStack( - PyObject *const *args, - Py_ssize_t nargs, - const char *format, - ...); - -extern int _PyArg_UnpackStack( - PyObject *const *args, - Py_ssize_t nargs, - const char *name, - Py_ssize_t min, - Py_ssize_t max, - ...); - -// Export for '_heapq' shared extension -PyAPI_FUNC(void) _PyArg_BadArgument( - const char *fname, - const char *displayname, - const char *expected, - PyObject *arg); - -// --- _PyArg_Parser API --------------------------------------------------- - -// Export for '_dbm' shared extension -PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords( - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwnames, - struct _PyArg_Parser *, - ...); - -// Export for 'math' shared extension -PyAPI_FUNC(PyObject * const *) _PyArg_UnpackKeywords( - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs, - PyObject *kwnames, - struct _PyArg_Parser *parser, - int minpos, - int maxpos, - int minkw, - int varpos, - PyObject **buf); -#define _PyArg_UnpackKeywords(args, nargs, kwargs, kwnames, parser, minpos, maxpos, minkw, varpos, buf) \ - (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \ - (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \ - (args) : \ - _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \ - (minpos), (maxpos), (minkw), (varpos), (buf))) - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_MODSUPPORT_H - diff --git a/Python314_4_x86_Template/include/internal/pycore_moduleobject.h b/Python314_4_x86_Template/include/internal/pycore_moduleobject.h deleted file mode 100644 index b170d7bce..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_moduleobject.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef Py_INTERNAL_MODULEOBJECT_H -#define Py_INTERNAL_MODULEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern void _PyModule_Clear(PyObject *); -extern void _PyModule_ClearDict(PyObject *); -extern int _PyModuleSpec_IsInitializing(PyObject *); -extern int _PyModuleSpec_GetFileOrigin(PyObject *, PyObject **); -extern int _PyModule_IsPossiblyShadowing(PyObject *); - -extern int _PyModule_IsExtension(PyObject *obj); - -typedef struct { - PyObject_HEAD - PyObject *md_dict; - PyModuleDef *md_def; - void *md_state; - PyObject *md_weaklist; - // for logging purposes after md_dict is cleared - PyObject *md_name; -#ifdef Py_GIL_DISABLED - void *md_gil; -#endif -} PyModuleObject; - -static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { - assert(PyModule_Check(mod)); - return ((PyModuleObject *)mod)->md_def; -} - -static inline void* _PyModule_GetState(PyObject* mod) { - assert(PyModule_Check(mod)); - return ((PyModuleObject *)mod)->md_state; -} - -static inline PyObject* _PyModule_GetDict(PyObject *mod) { - assert(PyModule_Check(mod)); - PyObject *dict = ((PyModuleObject *)mod) -> md_dict; - // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) - assert(dict != NULL); - return dict; // borrowed reference -} - -extern PyObject * _PyModule_GetFilenameObject(PyObject *); -extern Py_ssize_t _PyModule_GetFilenameUTF8( - PyObject *module, - char *buffer, - Py_ssize_t maxlen); - -PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress); -PyObject* _Py_module_getattro(PyObject *m, PyObject *name); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_MODULEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_namespace.h b/Python314_4_x86_Template/include/internal/pycore_namespace.h deleted file mode 100644 index f165cf153..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_namespace.h +++ /dev/null @@ -1,21 +0,0 @@ -// Simple namespace object interface - -#ifndef Py_INTERNAL_NAMESPACE_H -#define Py_INTERNAL_NAMESPACE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyTypeObject _PyNamespace_Type; - -// Export for '_testmultiphase' shared extension -PyAPI_FUNC(PyObject*) _PyNamespace_New(PyObject *kwds); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_NAMESPACE_H diff --git a/Python314_4_x86_Template/include/internal/pycore_object.h b/Python314_4_x86_Template/include/internal/pycore_object.h deleted file mode 100644 index ca44b2c10..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_object.h +++ /dev/null @@ -1,1032 +0,0 @@ -#ifndef Py_INTERNAL_OBJECT_H -#define Py_INTERNAL_OBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_emscripten_trampoline.h" // _PyCFunction_TrampolineCall() -#include "pycore_gc.h" // _PyObject_GC_TRACK() -#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_LOAD_PTR_ACQUIRE() -#include "pycore_pystate.h" // _PyInterpreterState_GET() -#include "pycore_runtime.h" // _PyRuntime -#include "pycore_typeobject.h" // _PyStaticType_GetState() -#include "pycore_uniqueid.h" // _PyObject_ThreadIncrefSlow() - -#include <stdbool.h> // bool - - -// This value is added to `ob_ref_shared` for objects that use deferred -// reference counting so that they are not immediately deallocated when the -// non-deferred reference count drops to zero. -// -// The value is half the maximum shared refcount because the low two bits of -// `ob_ref_shared` are used for flags. -#define _Py_REF_DEFERRED (PY_SSIZE_T_MAX / 8) - -/* For backwards compatibility -- Do not use this */ -#define _Py_IsImmortalLoose(op) _Py_IsImmortal - - -/* Check if an object is consistent. For example, ensure that the reference - counter is greater than or equal to 1, and ensure that ob_type is not NULL. - - Call _PyObject_AssertFailed() if the object is inconsistent. - - If check_content is zero, only check header fields: reduce the overhead. - - The function always return 1. The return value is just here to be able to - write: - - assert(_PyObject_CheckConsistency(obj, 1)); */ -extern int _PyObject_CheckConsistency(PyObject *op, int check_content); - -extern void _PyDebugAllocatorStats(FILE *out, const char *block_name, - int num_blocks, size_t sizeof_block); - -extern void _PyObject_DebugTypeStats(FILE *out); - -#ifdef Py_TRACE_REFS -// Forget a reference registered by _Py_NewReference(). Function called by -// _Py_Dealloc(). -// -// On a free list, the function can be used before modifying an object to -// remove the object from traced objects. Then _Py_NewReference() or -// _Py_NewReferenceNoTotal() should be called again on the object to trace -// it again. -extern void _Py_ForgetReference(PyObject *); -#endif - -// Export for shared _testinternalcapi extension -PyAPI_FUNC(int) _PyObject_IsFreed(PyObject *); - -/* We need to maintain an internal copy of Py{Var}Object_HEAD_INIT to avoid - designated initializer conflicts in C++20. If we use the definition in - object.h, we will be mixing designated and non-designated initializers in - pycore objects which is forbiddent in C++20. However, if we then use - designated initializers in object.h then Extensions without designated break. - Furthermore, we can't use designated initializers in Extensions since these - are not supported pre-C++20. Thus, keeping an internal copy here is the most - backwards compatible solution */ -#if defined(Py_GIL_DISABLED) -#define _PyObject_HEAD_INIT(type) \ - { \ - .ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL, \ - .ob_flags = _Py_STATICALLY_ALLOCATED_FLAG, \ - .ob_gc_bits = _PyGC_BITS_DEFERRED, \ - .ob_type = (type) \ - } -#else -#if SIZEOF_VOID_P > 4 -#define _PyObject_HEAD_INIT(type) \ - { \ - .ob_refcnt = _Py_IMMORTAL_INITIAL_REFCNT, \ - .ob_flags = _Py_STATIC_FLAG_BITS, \ - .ob_type = (type) \ - } -#else -#define _PyObject_HEAD_INIT(type) \ - { \ - .ob_refcnt = _Py_STATIC_IMMORTAL_INITIAL_REFCNT, \ - .ob_type = (type) \ - } -#endif -#endif -#define _PyVarObject_HEAD_INIT(type, size) \ - { \ - .ob_base = _PyObject_HEAD_INIT(type), \ - .ob_size = size \ - } - -PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalRefcountErrorFunc( - const char *func, - const char *message); - -#define _Py_FatalRefcountError(message) \ - _Py_FatalRefcountErrorFunc(__func__, (message)) - -#define _PyReftracerTrack(obj, operation) \ - do { \ - struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \ - if (tracer->tracer_func != NULL) { \ - void *data = tracer->tracer_data; \ - tracer->tracer_func((obj), (operation), data); \ - } \ - } while(0) - -#ifdef Py_REF_DEBUG -/* The symbol is only exposed in the API for the sake of extensions - built against the pre-3.12 stable ABI. */ -PyAPI_DATA(Py_ssize_t) _Py_RefTotal; - -extern void _Py_AddRefTotal(PyThreadState *, Py_ssize_t); -extern PyAPI_FUNC(void) _Py_IncRefTotal(PyThreadState *); -extern PyAPI_FUNC(void) _Py_DecRefTotal(PyThreadState *); - -# define _Py_DEC_REFTOTAL(interp) \ - interp->object_state.reftotal-- -#endif - -// Increment reference count by n -static inline void _Py_RefcntAdd(PyObject* op, Py_ssize_t n) -{ - if (_Py_IsImmortal(op)) { - _Py_INCREF_IMMORTAL_STAT_INC(); - return; - } -#ifndef Py_GIL_DISABLED - Py_ssize_t refcnt = _Py_REFCNT(op); - Py_ssize_t new_refcnt = refcnt + n; - if (new_refcnt >= (Py_ssize_t)_Py_IMMORTAL_MINIMUM_REFCNT) { - new_refcnt = _Py_IMMORTAL_INITIAL_REFCNT; - } -# if SIZEOF_VOID_P > 4 - op->ob_refcnt = (PY_UINT32_T)new_refcnt; -# else - op->ob_refcnt = new_refcnt; -# endif -# ifdef Py_REF_DEBUG - _Py_AddRefTotal(_PyThreadState_GET(), new_refcnt - refcnt); -# endif -#else - if (_Py_IsOwnedByCurrentThread(op)) { - uint32_t local = op->ob_ref_local; - Py_ssize_t refcnt = (Py_ssize_t)local + n; -# if PY_SSIZE_T_MAX > UINT32_MAX - if (refcnt > (Py_ssize_t)UINT32_MAX) { - // Make the object immortal if the 32-bit local reference count - // would overflow. - refcnt = _Py_IMMORTAL_REFCNT_LOCAL; - } -# endif - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, (uint32_t)refcnt); - } - else { - _Py_atomic_add_ssize(&op->ob_ref_shared, (n << _Py_REF_SHARED_SHIFT)); - } -# ifdef Py_REF_DEBUG - _Py_AddRefTotal(_PyThreadState_GET(), n); -# endif -#endif - // Although the ref count was increased by `n` (which may be greater than 1) - // it is only a single increment (i.e. addition) operation, so only 1 refcnt - // increment operation is counted. - _Py_INCREF_STAT_INC(); -} -#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n) - -// Checks if an object has a single, unique reference. If the caller holds a -// unique reference, it may be able to safely modify the object in-place. -static inline int -_PyObject_IsUniquelyReferenced(PyObject *ob) -{ -#if !defined(Py_GIL_DISABLED) - return Py_REFCNT(ob) == 1; -#else - // NOTE: the entire ob_ref_shared field must be zero, including flags, to - // ensure that other threads cannot concurrently create new references to - // this object. - return (_Py_IsOwnedByCurrentThread(ob) && - _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 && - _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0); -#endif -} - -PyAPI_FUNC(void) _Py_SetImmortal(PyObject *op); -PyAPI_FUNC(void) _Py_SetImmortalUntracked(PyObject *op); - -// Makes an immortal object mortal again with the specified refcnt. Should only -// be used during runtime finalization. -static inline void _Py_SetMortal(PyObject *op, short refcnt) -{ - if (op) { - assert(_Py_IsImmortal(op)); -#ifdef Py_GIL_DISABLED - op->ob_tid = _Py_UNOWNED_TID; - op->ob_ref_local = 0; - op->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED); -#else - op->ob_refcnt = refcnt; -#endif - } -} - -/* _Py_ClearImmortal() should only be used during runtime finalization. */ -static inline void _Py_ClearImmortal(PyObject *op) -{ - if (op) { - _Py_SetMortal(op, 1); - Py_DECREF(op); - } -} -#define _Py_ClearImmortal(op) \ - do { \ - _Py_ClearImmortal(_PyObject_CAST(op)); \ - op = NULL; \ - } while (0) - -#if !defined(Py_GIL_DISABLED) -static inline void -_Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) -{ - if (_Py_IsImmortal(op)) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); -#ifdef Py_REF_DEBUG - _Py_DEC_REFTOTAL(PyInterpreterState_Get()); -#endif - if (--op->ob_refcnt != 0) { - assert(op->ob_refcnt > 0); - } - else { -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#endif - _PyReftracerTrack(op, PyRefTracer_DESTROY); - destruct(op); - } -} - -static inline void -_Py_DECREF_NO_DEALLOC(PyObject *op) -{ - if (_Py_IsImmortal(op)) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); -#ifdef Py_REF_DEBUG - _Py_DEC_REFTOTAL(PyInterpreterState_Get()); -#endif - op->ob_refcnt--; -#ifdef Py_DEBUG - if (op->ob_refcnt <= 0) { - _Py_FatalRefcountError("Expected a positive remaining refcount"); - } -#endif -} - -#else -// TODO: implement Py_DECREF specializations for Py_GIL_DISABLED build -static inline void -_Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) -{ - Py_DECREF(op); -} - -static inline void -_Py_DECREF_NO_DEALLOC(PyObject *op) -{ - Py_DECREF(op); -} - -static inline int -_Py_REF_IS_MERGED(Py_ssize_t ob_ref_shared) -{ - return (ob_ref_shared & _Py_REF_SHARED_FLAG_MASK) == _Py_REF_MERGED; -} - -static inline int -_Py_REF_IS_QUEUED(Py_ssize_t ob_ref_shared) -{ - return (ob_ref_shared & _Py_REF_SHARED_FLAG_MASK) == _Py_REF_QUEUED; -} - -// Merge the local and shared reference count fields and add `extra` to the -// refcount when merging. -Py_ssize_t _Py_ExplicitMergeRefcount(PyObject *op, Py_ssize_t extra); -#endif // !defined(Py_GIL_DISABLED) - -#ifdef Py_REF_DEBUG -# undef _Py_DEC_REFTOTAL -#endif - - -extern int _PyType_CheckConsistency(PyTypeObject *type); -extern int _PyDict_CheckConsistency(PyObject *mp, int check_content); - -// Fast inlined version of PyType_HasFeature() -static inline int -_PyType_HasFeature(PyTypeObject *type, unsigned long feature) { - return ((FT_ATOMIC_LOAD_ULONG_RELAXED(type->tp_flags) & feature) != 0); -} - -extern void _PyType_InitCache(PyInterpreterState *interp); - -extern PyStatus _PyObject_InitState(PyInterpreterState *interp); -extern void _PyObject_FiniState(PyInterpreterState *interp); -extern bool _PyRefchain_IsTraced(PyInterpreterState *interp, PyObject *obj); - -// Macros used for per-thread reference counting in the free threading build. -// They resolve to normal Py_INCREF/DECREF calls in the default build. -// -// The macros are used for only a few references that would otherwise cause -// scaling bottlenecks in the free threading build: -// - The reference from an object to `ob_type`. -// - The reference from a function to `func_code`. -// - The reference from a function to `func_globals` and `func_builtins`. -// -// It's safe, but not performant or necessary, to use these macros for other -// references to code, type, or dict objects. It's also safe to mix their -// usage with normal Py_INCREF/DECREF calls. -// -// See also Include/internal/pycore_dict.h for _Py_INCREF_DICT/_Py_DECREF_DICT. -#ifndef Py_GIL_DISABLED -# define _Py_INCREF_TYPE Py_INCREF -# define _Py_DECREF_TYPE Py_DECREF -# define _Py_INCREF_CODE Py_INCREF -# define _Py_DECREF_CODE Py_DECREF -#else -static inline void -_Py_THREAD_INCREF_OBJECT(PyObject *obj, Py_ssize_t unique_id) -{ - _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET(); - - // The table index is `unique_id - 1` because 0 is not a valid unique id. - // Unsigned comparison so that `idx=-1` is handled by the "else". - size_t idx = (size_t)(unique_id - 1); - if (idx < (size_t)tstate->refcounts.size) { -# ifdef Py_REF_DEBUG - _Py_INCREF_IncRefTotal(); -# endif - _Py_INCREF_STAT_INC(); - tstate->refcounts.values[idx]++; - } - else { - // The slow path resizes the per-thread refcount array if necessary. - // It handles the unique_id=0 case to keep the inlinable function smaller. - _PyObject_ThreadIncrefSlow(obj, idx); - } -} - -static inline void -_Py_INCREF_TYPE(PyTypeObject *type) -{ - if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) { - assert(_Py_IsImmortal(type)); - _Py_INCREF_IMMORTAL_STAT_INC(); - return; - } - - // gh-122974: GCC 11 warns about the access to PyHeapTypeObject fields when - // _Py_INCREF_TYPE() is called on a statically allocated type. The - // _PyType_HasFeature check above ensures that the type is a heap type. -#if defined(__GNUC__) && __GNUC__ >= 11 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Warray-bounds" -#endif - _Py_THREAD_INCREF_OBJECT((PyObject *)type, ((PyHeapTypeObject *)type)->unique_id); -#if defined(__GNUC__) && __GNUC__ >= 11 -# pragma GCC diagnostic pop -#endif -} - -static inline void -_Py_INCREF_CODE(PyCodeObject *co) -{ - _Py_THREAD_INCREF_OBJECT((PyObject *)co, co->_co_unique_id); -} - -static inline void -_Py_THREAD_DECREF_OBJECT(PyObject *obj, Py_ssize_t unique_id) -{ - _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET(); - - // The table index is `unique_id - 1` because 0 is not a valid unique id. - // Unsigned comparison so that `idx=-1` is handled by the "else". - size_t idx = (size_t)(unique_id - 1); - if (idx < (size_t)tstate->refcounts.size) { -# ifdef Py_REF_DEBUG - _Py_DECREF_DecRefTotal(); -# endif - _Py_DECREF_STAT_INC(); - tstate->refcounts.values[idx]--; - } - else { - // Directly decref the object if the id is not assigned or if - // per-thread refcounting has been disabled on this object. - Py_DECREF(obj); - } -} - -static inline void -_Py_DECREF_TYPE(PyTypeObject *type) -{ - if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) { - assert(_Py_IsImmortal(type)); - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - PyHeapTypeObject *ht = (PyHeapTypeObject *)type; - _Py_THREAD_DECREF_OBJECT((PyObject *)type, ht->unique_id); -} - -static inline void -_Py_DECREF_CODE(PyCodeObject *co) -{ - _Py_THREAD_DECREF_OBJECT((PyObject *)co, co->_co_unique_id); -} -#endif - -#ifndef Py_GIL_DISABLED -#ifdef Py_REF_DEBUG - -static inline void Py_DECREF_MORTAL(const char *filename, int lineno, PyObject *op) -{ - if (op->ob_refcnt <= 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - _Py_DECREF_STAT_INC(); - assert(!_Py_IsStaticImmortal(op)); - if (!_Py_IsImmortal(op)) { - _Py_DECREF_DecRefTotal(); - } - if (--op->ob_refcnt == 0) { - _Py_Dealloc(op); - } -} -#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(__FILE__, __LINE__, _PyObject_CAST(op)) - -static inline void _Py_DECREF_MORTAL_SPECIALIZED(const char *filename, int lineno, PyObject *op, destructor destruct) -{ - if (op->ob_refcnt <= 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - _Py_DECREF_STAT_INC(); - assert(!_Py_IsStaticImmortal(op)); - if (!_Py_IsImmortal(op)) { - _Py_DECREF_DecRefTotal(); - } - if (--op->ob_refcnt == 0) { -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#endif - _PyReftracerTrack(op, PyRefTracer_DESTROY); - destruct(op); - } -} -#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) _Py_DECREF_MORTAL_SPECIALIZED(__FILE__, __LINE__, op, destruct) - -#else - -static inline void Py_DECREF_MORTAL(PyObject *op) -{ - assert(!_Py_IsStaticImmortal(op)); - _Py_DECREF_STAT_INC(); - if (--op->ob_refcnt == 0) { - _Py_Dealloc(op); - } -} -#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op)) - -static inline void Py_DECREF_MORTAL_SPECIALIZED(PyObject *op, destructor destruct) -{ - assert(!_Py_IsStaticImmortal(op)); - _Py_DECREF_STAT_INC(); - if (--op->ob_refcnt == 0) { - _PyReftracerTrack(op, PyRefTracer_DESTROY); - destruct(op); - } -} -#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) Py_DECREF_MORTAL_SPECIALIZED(_PyObject_CAST(op), destruct) - -#endif -#endif - -/* Inline functions trading binary compatibility for speed: - _PyObject_Init() is the fast version of PyObject_Init(), and - _PyObject_InitVar() is the fast version of PyObject_InitVar(). - - These inline functions must not be called with op=NULL. */ -static inline void -_PyObject_Init(PyObject *op, PyTypeObject *typeobj) -{ - assert(op != NULL); - Py_SET_TYPE(op, typeobj); - assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj)); - _Py_INCREF_TYPE(typeobj); - _Py_NewReference(op); -} - -static inline void -_PyObject_InitVar(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size) -{ - assert(op != NULL); - assert(typeobj != &PyLong_Type); - _PyObject_Init((PyObject *)op, typeobj); - Py_SET_SIZE(op, size); -} - -// Macros to accept any type for the parameter, and to automatically pass -// the filename and the filename (if NDEBUG is not defined) where the macro -// is called. -#ifdef NDEBUG -# define _PyObject_GC_TRACK(op) \ - _PyObject_GC_TRACK(_PyObject_CAST(op)) -# define _PyObject_GC_UNTRACK(op) \ - _PyObject_GC_UNTRACK(_PyObject_CAST(op)) -#else -# define _PyObject_GC_TRACK(op) \ - _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op)) -# define _PyObject_GC_UNTRACK(op) \ - _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op)) -#endif - -#ifdef Py_GIL_DISABLED - -/* Tries to increment an object's reference count - * - * This is a specialized version of _Py_TryIncref that only succeeds if the - * object is immortal or local to this thread. It does not handle the case - * where the reference count modification requires an atomic operation. This - * allows call sites to specialize for the immortal/local case. - */ -static inline int -_Py_TryIncrefFast(PyObject *op) { - uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); - local += 1; - if (local == 0) { - // immortal - _Py_INCREF_IMMORTAL_STAT_INC(); - return 1; - } - if (_Py_IsOwnedByCurrentThread(op)) { - _Py_INCREF_STAT_INC(); - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local); -#ifdef Py_REF_DEBUG - _Py_IncRefTotal(_PyThreadState_GET()); -#endif - return 1; - } - return 0; -} - -static inline int -_Py_TryIncRefShared(PyObject *op) -{ - Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&op->ob_ref_shared); - for (;;) { - // If the shared refcount is zero and the object is either merged - // or may not have weak references, then we cannot incref it. - if (shared == 0 || shared == _Py_REF_MERGED) { - return 0; - } - - if (_Py_atomic_compare_exchange_ssize( - &op->ob_ref_shared, - &shared, - shared + (1 << _Py_REF_SHARED_SHIFT))) { -#ifdef Py_REF_DEBUG - _Py_IncRefTotal(_PyThreadState_GET()); -#endif - _Py_INCREF_STAT_INC(); - return 1; - } - } -} - -/* Tries to incref the object op and ensures that *src still points to it. */ -static inline int -_Py_TryIncrefCompare(PyObject **src, PyObject *op) -{ - if (_Py_TryIncrefFast(op)) { - return 1; - } - if (!_Py_TryIncRefShared(op)) { - return 0; - } - if (op != _Py_atomic_load_ptr(src)) { - Py_DECREF(op); - return 0; - } - return 1; -} - -/* Loads and increfs an object from ptr, which may contain a NULL value. - Safe with concurrent (atomic) updates to ptr. - NOTE: The writer must set maybe-weakref on the stored object! */ -static inline PyObject * -_Py_XGetRef(PyObject **ptr) -{ - for (;;) { - PyObject *value = _PyObject_CAST(_Py_atomic_load_ptr(ptr)); - if (value == NULL) { - return value; - } - if (_Py_TryIncrefCompare(ptr, value)) { - return value; - } - } -} - -/* Attempts to loads and increfs an object from ptr. Returns NULL - on failure, which may be due to a NULL value or a concurrent update. */ -static inline PyObject * -_Py_TryXGetRef(PyObject **ptr) -{ - PyObject *value = _PyObject_CAST(_Py_atomic_load_ptr(ptr)); - if (value == NULL) { - return value; - } - if (_Py_TryIncrefCompare(ptr, value)) { - return value; - } - return NULL; -} - -/* Like Py_NewRef but also optimistically sets _Py_REF_MAYBE_WEAKREF - on objects owned by a different thread. */ -static inline PyObject * -_Py_NewRefWithLock(PyObject *op) -{ - if (_Py_TryIncrefFast(op)) { - return op; - } -#ifdef Py_REF_DEBUG - _Py_IncRefTotal(_PyThreadState_GET()); -#endif - _Py_INCREF_STAT_INC(); - for (;;) { - Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&op->ob_ref_shared); - Py_ssize_t new_shared = shared + (1 << _Py_REF_SHARED_SHIFT); - if ((shared & _Py_REF_SHARED_FLAG_MASK) == 0) { - new_shared |= _Py_REF_MAYBE_WEAKREF; - } - if (_Py_atomic_compare_exchange_ssize( - &op->ob_ref_shared, - &shared, - new_shared)) { - return op; - } - } -} - -static inline PyObject * -_Py_XNewRefWithLock(PyObject *obj) -{ - if (obj == NULL) { - return NULL; - } - return _Py_NewRefWithLock(obj); -} - -static inline void -_PyObject_SetMaybeWeakref(PyObject *op) -{ - if (_Py_IsImmortal(op)) { - return; - } - for (;;) { - Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&op->ob_ref_shared); - if ((shared & _Py_REF_SHARED_FLAG_MASK) != 0) { - // Nothing to do if it's in WEAKREFS, QUEUED, or MERGED states. - return; - } - if (_Py_atomic_compare_exchange_ssize( - &op->ob_ref_shared, &shared, shared | _Py_REF_MAYBE_WEAKREF)) { - return; - } - } -} - -extern PyAPI_FUNC(int) _PyObject_ResurrectEndSlow(PyObject *op); -#endif - -// Temporarily resurrects an object during deallocation. The refcount is set -// to one. -static inline void -_PyObject_ResurrectStart(PyObject *op) -{ - assert(Py_REFCNT(op) == 0); -#ifdef Py_REF_DEBUG - _Py_IncRefTotal(_PyThreadState_GET()); -#endif -#ifdef Py_GIL_DISABLED - _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId()); - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1); - _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0); -#else - Py_SET_REFCNT(op, 1); -#endif -#ifdef Py_TRACE_REFS - _Py_ResurrectReference(op); -#endif -} - -// Undoes an object resurrection by decrementing the refcount without calling -// _Py_Dealloc(). Returns 0 if the object is dead (the normal case), and -// deallocation should continue. Returns 1 if the object is still alive. -static inline int -_PyObject_ResurrectEnd(PyObject *op) -{ -#ifdef Py_REF_DEBUG - _Py_DecRefTotal(_PyThreadState_GET()); -#endif -#ifndef Py_GIL_DISABLED - Py_SET_REFCNT(op, Py_REFCNT(op) - 1); - if (Py_REFCNT(op) == 0) { -# ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -# endif - return 0; - } - return 1; -#else - uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); - Py_ssize_t shared = _Py_atomic_load_ssize_acquire(&op->ob_ref_shared); - if (_Py_IsOwnedByCurrentThread(op) && local == 1 && shared == 0) { - // Fast-path: object has a single refcount and is owned by this thread - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 0); -# ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -# endif - return 0; - } - // Slow-path: object has a shared refcount or is not owned by this thread - return _PyObject_ResurrectEndSlow(op); -#endif -} - -/* Tries to incref op and returns 1 if successful or 0 otherwise. */ -static inline int -_Py_TryIncref(PyObject *op) -{ -#ifdef Py_GIL_DISABLED - return _Py_TryIncrefFast(op) || _Py_TryIncRefShared(op); -#else - if (Py_REFCNT(op) > 0) { - Py_INCREF(op); - return 1; - } - return 0; -#endif -} - -#ifdef Py_REF_DEBUG -extern void _PyInterpreterState_FinalizeRefTotal(PyInterpreterState *); -extern void _Py_FinalizeRefTotal(_PyRuntimeState *); -extern void _PyDebug_PrintTotalRefs(void); -#endif - -#ifdef Py_TRACE_REFS -extern void _Py_AddToAllObjects(PyObject *op); -extern void _Py_PrintReferences(PyInterpreterState *, FILE *); -extern void _Py_PrintReferenceAddresses(PyInterpreterState *, FILE *); -#endif - - -/* Return the *address* of the object's weaklist. The address may be - * dereferenced to get the current head of the weaklist. This is useful - * for iterating over the linked list of weakrefs, especially when the - * list is being modified externally (e.g. refs getting removed). - * - * The returned pointer should not be used to change the head of the list - * nor should it be used to add, remove, or swap any refs in the list. - * That is the sole responsibility of the code in weakrefobject.c. - */ -static inline PyObject ** -_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op) -{ - if (PyType_Check(op) && - ((PyTypeObject *)op)->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) { - PyInterpreterState *interp = _PyInterpreterState_GET(); - managed_static_type_state *state = _PyStaticType_GetState( - interp, (PyTypeObject *)op); - return _PyStaticType_GET_WEAKREFS_LISTPTR(state); - } - // Essentially _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(): - Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset; - return (PyObject **)((char *)op + offset); -} - -/* This is a special case of _PyObject_GET_WEAKREFS_LISTPTR(). - * Only the most fundamental lookup path is used. - * Consequently, static types should not be used. - * - * For static builtin types the returned pointer will always point - * to a NULL tp_weaklist. This is fine for any deallocation cases, - * since static types are never deallocated and static builtin types - * are only finalized at the end of runtime finalization. - * - * If the weaklist for static types is actually needed then use - * _PyObject_GET_WEAKREFS_LISTPTR(). - */ -static inline PyWeakReference ** -_PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(PyObject *op) -{ - assert(!PyType_Check(op) || - ((PyTypeObject *)op)->tp_flags & Py_TPFLAGS_HEAPTYPE); - Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset; - return (PyWeakReference **)((char *)op + offset); -} - -// Fast inlined version of PyType_IS_GC() -#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) - -// Fast inlined version of PyObject_IS_GC() -static inline int -_PyObject_IS_GC(PyObject *obj) -{ - PyTypeObject *type = Py_TYPE(obj); - return (_PyType_IS_GC(type) - && (type->tp_is_gc == NULL || type->tp_is_gc(obj))); -} - -// Fast inlined version of PyObject_Hash() -static inline Py_hash_t -_PyObject_HashFast(PyObject *op) -{ - if (PyUnicode_CheckExact(op)) { - Py_hash_t hash = FT_ATOMIC_LOAD_SSIZE_RELAXED( - _PyASCIIObject_CAST(op)->hash); - if (hash != -1) { - return hash; - } - } - return PyObject_Hash(op); -} - -static inline size_t -_PyType_PreHeaderSize(PyTypeObject *tp) -{ - return ( -#ifndef Py_GIL_DISABLED - (size_t)_PyType_IS_GC(tp) * sizeof(PyGC_Head) + -#endif - (size_t)_PyType_HasFeature(tp, Py_TPFLAGS_PREHEADER) * 2 * sizeof(PyObject *) - ); -} - -void _PyObject_GC_Link(PyObject *op); - -// Usage: assert(_Py_CheckSlotResult(obj, "__getitem__", result != NULL)); -extern int _Py_CheckSlotResult( - PyObject *obj, - const char *slot_name, - int success); - -// Test if a type supports weak references -static inline int _PyType_SUPPORTS_WEAKREFS(PyTypeObject *type) { - return (type->tp_weaklistoffset != 0); -} - -extern PyObject* _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems); -PyAPI_FUNC(PyObject *) _PyType_NewManagedObject(PyTypeObject *type); - -extern PyTypeObject* _PyType_CalculateMetaclass(PyTypeObject *, PyObject *); -extern PyObject* _PyType_GetDocFromInternalDoc(const char *, const char *); -extern PyObject* _PyType_GetTextSignatureFromInternalDoc(const char *, const char *, int); -extern int _PyObject_SetAttributeErrorContext(PyObject *v, PyObject* name); - -void _PyObject_InitInlineValues(PyObject *obj, PyTypeObject *tp); -extern int _PyObject_StoreInstanceAttribute(PyObject *obj, - PyObject *name, PyObject *value); -extern bool _PyObject_TryGetInstanceAttribute(PyObject *obj, PyObject *name, - PyObject **attr); -extern PyObject *_PyType_LookupRefAndVersion(PyTypeObject *, PyObject *, - unsigned int *); - -// Internal API to look for a name through the MRO. -// This stores a stack reference in out and returns the value of -// type->tp_version or zero if name is missing. It doesn't set an exception! -extern unsigned int -_PyType_LookupStackRefAndVersion(PyTypeObject *type, PyObject *name, _PyStackRef *out); - -extern int _PyObject_GetMethodStackRef(PyThreadState *ts, _PyStackRef *self, - PyObject *name, _PyStackRef *method); - -// Cache the provided init method in the specialization cache of type if the -// provided type version matches the current version of the type. -// -// The cached value is borrowed and is only valid if guarded by a type -// version check. In free-threaded builds the init method must also use -// deferred reference counting. -// -// Returns 1 if the value was cached or 0 otherwise. -extern int _PyType_CacheInitForSpecialization(PyHeapTypeObject *type, - PyObject *init, - unsigned int tp_version); - -#ifdef Py_GIL_DISABLED -# define MANAGED_DICT_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-1) -# define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-2) -#else -# define MANAGED_DICT_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-3) -# define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-4) -#endif - -typedef union { - PyDictObject *dict; -} PyManagedDictPointer; - -static inline PyManagedDictPointer * -_PyObject_ManagedDictPointer(PyObject *obj) -{ - assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT); - return (PyManagedDictPointer *)((char *)obj + MANAGED_DICT_OFFSET); -} - -static inline PyDictObject * -_PyObject_GetManagedDict(PyObject *obj) -{ - PyManagedDictPointer *dorv = _PyObject_ManagedDictPointer(obj); - return (PyDictObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(dorv->dict); -} - -static inline PyDictValues * -_PyObject_InlineValues(PyObject *obj) -{ - PyTypeObject *tp = Py_TYPE(obj); - assert(tp->tp_basicsize > 0 && (size_t)tp->tp_basicsize % sizeof(PyObject *) == 0); - assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES); - assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT); - return (PyDictValues *)((char *)obj + tp->tp_basicsize); -} - -extern PyObject ** _PyObject_ComputedDictPointer(PyObject *); -extern int _PyObject_IsInstanceDictEmpty(PyObject *); - -// Export for 'math' shared extension -PyAPI_FUNC(PyObject*) _PyObject_LookupSpecial(PyObject *, PyObject *); -PyAPI_FUNC(int) _PyObject_LookupSpecialMethod(PyObject *attr, _PyStackRef *method_and_self); - -// Calls the method named `attr` on `self`, but does not set an exception if -// the attribute does not exist. -PyAPI_FUNC(PyObject *) -_PyObject_MaybeCallSpecialNoArgs(PyObject *self, PyObject *attr); - -PyAPI_FUNC(PyObject *) -_PyObject_MaybeCallSpecialOneArg(PyObject *self, PyObject *attr, PyObject *arg); - -extern int _PyObject_IsAbstract(PyObject *); - -PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); -extern PyObject* _PyObject_NextNotImplemented(PyObject *); - -// Pickle support. -// Export for '_datetime' shared extension -PyAPI_FUNC(PyObject*) _PyObject_GetState(PyObject *); - -/* C function call trampolines to mitigate bad function pointer casts. - * - * Typical native ABIs ignore additional arguments or fill in missing - * values with 0/NULL in function pointer cast. Compilers do not show - * warnings when a function pointer is explicitly casted to an - * incompatible type. - * - * Bad fpcasts are an issue in WebAssembly. WASM's indirect_call has strict - * function signature checks. Argument count, types, and return type must - * match. - * - * Third party code unintentionally rely on problematic fpcasts. The call - * trampoline mitigates common occurrences of bad fpcasts on Emscripten. - */ -#if !(defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)) -#define _PyCFunction_TrampolineCall(meth, self, args) \ - (meth)((self), (args)) -#define _PyCFunctionWithKeywords_TrampolineCall(meth, self, args, kw) \ - (meth)((self), (args), (kw)) -#endif // __EMSCRIPTEN__ && PY_CALL_TRAMPOLINE - -// Export these 2 symbols for '_pickle' shared extension -PyAPI_DATA(PyTypeObject) _PyNone_Type; -PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; - -// Maps Py_LT to Py_GT, ..., Py_GE to Py_LE. -// Export for the stable ABI. -PyAPI_DATA(int) _Py_SwappedOp[]; - -extern void _Py_GetConstant_Init(void); - -enum _PyAnnotateFormat { - _Py_ANNOTATE_FORMAT_VALUE = 1, - _Py_ANNOTATE_FORMAT_VALUE_WITH_FAKE_GLOBALS = 2, - _Py_ANNOTATE_FORMAT_FORWARDREF = 3, - _Py_ANNOTATE_FORMAT_STRING = 4, -}; - -int _PyObject_SetDict(PyObject *obj, PyObject *value); - -#ifndef Py_GIL_DISABLED -static inline Py_ALWAYS_INLINE void _Py_INCREF_MORTAL(PyObject *op) -{ - assert(!_Py_IsStaticImmortal(op)); - op->ob_refcnt++; - _Py_INCREF_STAT_INC(); -#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API) - if (!_Py_IsImmortal(op)) { - _Py_INCREF_IncRefTotal(); - } -#endif -} -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_OBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_object_alloc.h b/Python314_4_x86_Template/include/internal/pycore_object_alloc.h deleted file mode 100644 index 8cc7a444b..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_object_alloc.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef Py_INTERNAL_OBJECT_ALLOC_H -#define Py_INTERNAL_OBJECT_ALLOC_H - -#include "pycore_object.h" // _PyType_HasFeature() -#include "pycore_pystate.h" // _PyThreadState_GET() -#include "pycore_tstate.h" // _PyThreadStateImpl - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED -static inline mi_heap_t * -_PyObject_GetAllocationHeap(_PyThreadStateImpl *tstate, PyTypeObject *tp) -{ - struct _mimalloc_thread_state *m = &tstate->mimalloc; - if (_PyType_HasFeature(tp, Py_TPFLAGS_PREHEADER)) { - return &m->heaps[_Py_MIMALLOC_HEAP_GC_PRE]; - } - else if (_PyType_IS_GC(tp)) { - return &m->heaps[_Py_MIMALLOC_HEAP_GC]; - } - else { - return &m->heaps[_Py_MIMALLOC_HEAP_OBJECT]; - } -} -#endif - -// Sets the heap used for PyObject_Malloc(), PyObject_Realloc(), etc. calls in -// Py_GIL_DISABLED builds. We use different heaps depending on if the object -// supports GC and if it has a pre-header. We smuggle the choice of heap -// through the _mimalloc_thread_state. In the default build, this simply -// calls PyObject_Malloc(). -static inline void * -_PyObject_MallocWithType(PyTypeObject *tp, size_t size) -{ -#ifdef Py_GIL_DISABLED - _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET(); - struct _mimalloc_thread_state *m = &tstate->mimalloc; - m->current_object_heap = _PyObject_GetAllocationHeap(tstate, tp); -#endif - void *mem = PyObject_Malloc(size); -#ifdef Py_GIL_DISABLED - m->current_object_heap = &m->heaps[_Py_MIMALLOC_HEAP_OBJECT]; -#endif - return mem; -} - -static inline void * -_PyObject_ReallocWithType(PyTypeObject *tp, void *ptr, size_t size) -{ -#ifdef Py_GIL_DISABLED - _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET(); - struct _mimalloc_thread_state *m = &tstate->mimalloc; - m->current_object_heap = _PyObject_GetAllocationHeap(tstate, tp); -#endif - void *mem = PyObject_Realloc(ptr, size); -#ifdef Py_GIL_DISABLED - m->current_object_heap = &m->heaps[_Py_MIMALLOC_HEAP_OBJECT]; -#endif - return mem; -} - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_OBJECT_ALLOC_H diff --git a/Python314_4_x86_Template/include/internal/pycore_object_deferred.h b/Python314_4_x86_Template/include/internal/pycore_object_deferred.h deleted file mode 100644 index c070d768b..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_object_deferred.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef Py_INTERNAL_OBJECT_DEFERRED_H -#define Py_INTERNAL_OBJECT_DEFERRED_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pycore_gc.h" - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Mark an object as supporting deferred reference counting. This is a no-op -// in the default (with GIL) build. Objects that use deferred reference -// counting should be tracked by the GC so that they are eventually collected. -extern void _PyObject_SetDeferredRefcount(PyObject *op); - -static inline int -_PyObject_HasDeferredRefcount(PyObject *op) -{ -#ifdef Py_GIL_DISABLED - return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_DEFERRED); -#else - return 0; -#endif -} - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_OBJECT_DEFERRED_H diff --git a/Python314_4_x86_Template/include/internal/pycore_object_stack.h b/Python314_4_x86_Template/include/internal/pycore_object_stack.h deleted file mode 100644 index 39e69b7cd..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_object_stack.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef Py_INTERNAL_OBJECT_STACK_H -#define Py_INTERNAL_OBJECT_STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// _PyObjectStack is a stack of Python objects implemented as a linked list of -// fixed size buffers. - -// Chosen so that _PyObjectStackChunk is a power-of-two size. -#define _Py_OBJECT_STACK_CHUNK_SIZE 254 - -typedef struct _PyObjectStackChunk { - struct _PyObjectStackChunk *prev; - Py_ssize_t n; - PyObject *objs[_Py_OBJECT_STACK_CHUNK_SIZE]; -} _PyObjectStackChunk; - -typedef struct _PyObjectStack { - _PyObjectStackChunk *head; -} _PyObjectStack; - - -extern _PyObjectStackChunk * -_PyObjectStackChunk_New(void); - -extern void -_PyObjectStackChunk_Free(_PyObjectStackChunk *); - -// Push an item onto the stack. Return -1 on allocation failure, 0 on success. -static inline int -_PyObjectStack_Push(_PyObjectStack *stack, PyObject *obj) -{ - _PyObjectStackChunk *buf = stack->head; - if (buf == NULL || buf->n == _Py_OBJECT_STACK_CHUNK_SIZE) { - buf = _PyObjectStackChunk_New(); - if (buf == NULL) { - return -1; - } - buf->prev = stack->head; - buf->n = 0; - stack->head = buf; - } - - assert(buf->n >= 0 && buf->n < _Py_OBJECT_STACK_CHUNK_SIZE); - buf->objs[buf->n] = obj; - buf->n++; - return 0; -} - -// Pop the top item from the stack. Return NULL if the stack is empty. -static inline PyObject * -_PyObjectStack_Pop(_PyObjectStack *stack) -{ - _PyObjectStackChunk *buf = stack->head; - if (buf == NULL) { - return NULL; - } - assert(buf->n > 0 && buf->n <= _Py_OBJECT_STACK_CHUNK_SIZE); - buf->n--; - PyObject *obj = buf->objs[buf->n]; - if (buf->n == 0) { - stack->head = buf->prev; - _PyObjectStackChunk_Free(buf); - } - return obj; -} - -static inline Py_ssize_t -_PyObjectStack_Size(_PyObjectStack *stack) -{ - Py_ssize_t size = 0; - for (_PyObjectStackChunk *buf = stack->head; buf != NULL; buf = buf->prev) { - size += buf->n; - } - return size; -} - -// Merge src into dst, leaving src empty -extern void -_PyObjectStack_Merge(_PyObjectStack *dst, _PyObjectStack *src); - -// Remove all items from the stack -extern void -_PyObjectStack_Clear(_PyObjectStack *stack); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_OBJECT_STACK_H diff --git a/Python314_4_x86_Template/include/internal/pycore_object_state.h b/Python314_4_x86_Template/include/internal/pycore_object_state.h deleted file mode 100644 index 8a47a6d9e..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_object_state.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef Py_INTERNAL_OBJECT_STATE_H -#define Py_INTERNAL_OBJECT_STATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_freelist_state.h" // _Py_freelists -#include "pycore_hashtable.h" // _Py_hashtable_t - - -/* Reference tracer state */ -struct _reftracer_runtime_state { - PyRefTracer tracer_func; - void* tracer_data; -}; - - -struct _py_object_runtime_state { -#ifdef Py_REF_DEBUG - Py_ssize_t interpreter_leaks; -#endif - int _not_used; -}; - -struct _py_object_state { -#if !defined(Py_GIL_DISABLED) - struct _Py_freelists freelists; -#endif -#ifdef Py_REF_DEBUG - Py_ssize_t reftotal; -#endif -#ifdef Py_TRACE_REFS - // Hash table storing all objects. The key is the object pointer - // (PyObject*) and the value is always the number 1 (as uintptr_t). - // See _PyRefchain_IsTraced() and _PyRefchain_Trace() functions. - _Py_hashtable_t *refchain; -#endif - int _not_used; -}; - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_OBJECT_STATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_obmalloc.h b/Python314_4_x86_Template/include/internal/pycore_obmalloc.h deleted file mode 100644 index a7ba8f340..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_obmalloc.h +++ /dev/null @@ -1,702 +0,0 @@ -#ifndef Py_INTERNAL_OBMALLOC_H -#define Py_INTERNAL_OBMALLOC_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -typedef unsigned int pymem_uint; /* assuming >= 16 bits */ - -#undef uint -#define uint pymem_uint - - -/* An object allocator for Python. - - Here is an introduction to the layers of the Python memory architecture, - showing where the object allocator is actually used (layer +2), It is - called for every object allocation and deallocation (PyObject_New/Del), - unless the object-specific allocators implement a proprietary allocation - scheme (ex.: ints use a simple free list). This is also the place where - the cyclic garbage collector operates selectively on container objects. - - - Object-specific allocators - _____ ______ ______ ________ - [ int ] [ dict ] [ list ] ... [ string ] Python core | -+3 | <----- Object-specific memory -----> | <-- Non-object memory --> | - _______________________________ | | - [ Python's object allocator ] | | -+2 | ####### Object memory ####### | <------ Internal buffers ------> | - ______________________________________________________________ | - [ Python's raw memory allocator (PyMem_ API) ] | -+1 | <----- Python memory (under PyMem manager's control) ------> | | - __________________________________________________________________ - [ Underlying general-purpose allocator (ex: C library malloc) ] - 0 | <------ Virtual memory allocated for the python process -------> | - - ========================================================================= - _______________________________________________________________________ - [ OS-specific Virtual Memory Manager (VMM) ] --1 | <--- Kernel dynamic storage allocation & management (page-based) ---> | - __________________________________ __________________________________ - [ ] [ ] --2 | <-- Physical memory: ROM/RAM --> | | <-- Secondary storage (swap) --> | - -*/ -/*==========================================================================*/ - -/* A fast, special-purpose memory allocator for small blocks, to be used - on top of a general-purpose malloc -- heavily based on previous art. */ - -/* Vladimir Marangozov -- August 2000 */ - -/* - * "Memory management is where the rubber meets the road -- if we do the wrong - * thing at any level, the results will not be good. And if we don't make the - * levels work well together, we are in serious trouble." (1) - * - * (1) Paul R. Wilson, Mark S. Johnstone, Michael Neely, and David Boles, - * "Dynamic Storage Allocation: A Survey and Critical Review", - * in Proc. 1995 Int'l. Workshop on Memory Management, September 1995. - */ - -/* #undef WITH_MEMORY_LIMITS */ /* disable mem limit checks */ - -/*==========================================================================*/ - -/* - * Allocation strategy abstract: - * - * For small requests, the allocator sub-allocates <Big> blocks of memory. - * Requests greater than SMALL_REQUEST_THRESHOLD bytes are routed to the - * system's allocator. - * - * Small requests are grouped in size classes spaced 8 bytes apart, due - * to the required valid alignment of the returned address. Requests of - * a particular size are serviced from memory pools of 4K (one VMM page). - * Pools are fragmented on demand and contain free lists of blocks of one - * particular size class. In other words, there is a fixed-size allocator - * for each size class. Free pools are shared by the different allocators - * thus minimizing the space reserved for a particular size class. - * - * This allocation strategy is a variant of what is known as "simple - * segregated storage based on array of free lists". The main drawback of - * simple segregated storage is that we might end up with lot of reserved - * memory for the different free lists, which degenerate in time. To avoid - * this, we partition each free list in pools and we share dynamically the - * reserved space between all free lists. This technique is quite efficient - * for memory intensive programs which allocate mainly small-sized blocks. - * - * For small requests we have the following table: - * - * Request in bytes Size of allocated block Size class idx - * ---------------------------------------------------------------- - * 1-8 8 0 - * 9-16 16 1 - * 17-24 24 2 - * 25-32 32 3 - * 33-40 40 4 - * 41-48 48 5 - * 49-56 56 6 - * 57-64 64 7 - * 65-72 72 8 - * ... ... ... - * 497-504 504 62 - * 505-512 512 63 - * - * 0, SMALL_REQUEST_THRESHOLD + 1 and up: routed to the underlying - * allocator. - */ - -/*==========================================================================*/ - -/* - * -- Main tunable settings section -- - */ - -/* - * Alignment of addresses returned to the user. 8-bytes alignment works - * on most current architectures (with 32-bit or 64-bit address buses). - * The alignment value is also used for grouping small requests in size - * classes spaced ALIGNMENT bytes apart. - * - * You shouldn't change this unless you know what you are doing. - */ - -#if SIZEOF_VOID_P > 4 -#define ALIGNMENT 16 /* must be 2^N */ -#define ALIGNMENT_SHIFT 4 -#else -#define ALIGNMENT 8 /* must be 2^N */ -#define ALIGNMENT_SHIFT 3 -#endif - -/* Return the number of bytes in size class I, as a uint. */ -#define INDEX2SIZE(I) (((pymem_uint)(I) + 1) << ALIGNMENT_SHIFT) - -/* - * Max size threshold below which malloc requests are considered to be - * small enough in order to use preallocated memory pools. You can tune - * this value according to your application behaviour and memory needs. - * - * Note: a size threshold of 512 guarantees that newly created dictionaries - * will be allocated from preallocated memory pools on 64-bit. - * - * The following invariants must hold: - * 1) ALIGNMENT <= SMALL_REQUEST_THRESHOLD <= 512 - * 2) SMALL_REQUEST_THRESHOLD is evenly divisible by ALIGNMENT - * - * Although not required, for better performance and space efficiency, - * it is recommended that SMALL_REQUEST_THRESHOLD is set to a power of 2. - */ -#define SMALL_REQUEST_THRESHOLD 512 -#define NB_SMALL_SIZE_CLASSES (SMALL_REQUEST_THRESHOLD / ALIGNMENT) - -/* - * The system's VMM page size can be obtained on most unices with a - * getpagesize() call or deduced from various header files. To make - * things simpler, we assume that it is 4K, which is OK for most systems. - * It is probably better if this is the native page size, but it doesn't - * have to be. In theory, if SYSTEM_PAGE_SIZE is larger than the native page - * size, then `POOL_ADDR(p)->arenaindex' could rarely cause a segmentation - * violation fault. 4K is apparently OK for all the platforms that python - * currently targets. - */ -#define SYSTEM_PAGE_SIZE (4 * 1024) - -/* - * Maximum amount of memory managed by the allocator for small requests. - */ -#ifdef WITH_MEMORY_LIMITS -#ifndef SMALL_MEMORY_LIMIT -#define SMALL_MEMORY_LIMIT (64 * 1024 * 1024) /* 64 MB -- more? */ -#endif -#endif - -#if !defined(WITH_PYMALLOC_RADIX_TREE) -/* Use radix-tree to track arena memory regions, for address_in_range(). - * Enable by default since it allows larger pool sizes. Can be disabled - * using -DWITH_PYMALLOC_RADIX_TREE=0 */ -#define WITH_PYMALLOC_RADIX_TREE 1 -#endif - -#if SIZEOF_VOID_P > 4 -/* on 64-bit platforms use larger pools and arenas if we can */ -#define USE_LARGE_ARENAS -#if WITH_PYMALLOC_RADIX_TREE -/* large pools only supported if radix-tree is enabled */ -#define USE_LARGE_POOLS -#endif -#endif - -/* - * The allocator sub-allocates <Big> blocks of memory (called arenas) aligned - * on a page boundary. This is a reserved virtual address space for the - * current process (obtained through a malloc()/mmap() call). In no way this - * means that the memory arenas will be used entirely. A malloc(<Big>) is - * usually an address range reservation for <Big> bytes, unless all pages within - * this space are referenced subsequently. So malloc'ing big blocks and not - * using them does not mean "wasting memory". It's an addressable range - * wastage... - * - * Arenas are allocated with mmap() on systems supporting anonymous memory - * mappings to reduce heap fragmentation. - */ -#ifdef USE_LARGE_ARENAS -#define ARENA_BITS 20 /* 1 MiB */ -#else -#define ARENA_BITS 18 /* 256 KiB */ -#endif -#define ARENA_SIZE (1 << ARENA_BITS) -#define ARENA_SIZE_MASK (ARENA_SIZE - 1) - -#ifdef WITH_MEMORY_LIMITS -#define MAX_ARENAS (SMALL_MEMORY_LIMIT / ARENA_SIZE) -#endif - -/* - * Size of the pools used for small blocks. Must be a power of 2. - */ -#ifdef USE_LARGE_POOLS -#define POOL_BITS 14 /* 16 KiB */ -#else -#define POOL_BITS 12 /* 4 KiB */ -#endif -#define POOL_SIZE (1 << POOL_BITS) -#define POOL_SIZE_MASK (POOL_SIZE - 1) - -#if !WITH_PYMALLOC_RADIX_TREE -#if POOL_SIZE != SYSTEM_PAGE_SIZE -# error "pool size must be equal to system page size" -#endif -#endif - -#define MAX_POOLS_IN_ARENA (ARENA_SIZE / POOL_SIZE) -#if MAX_POOLS_IN_ARENA * POOL_SIZE != ARENA_SIZE -# error "arena size not an exact multiple of pool size" -#endif - -/* - * -- End of tunable settings section -- - */ - -/*==========================================================================*/ - -/* When you say memory, my mind reasons in terms of (pointers to) blocks */ -typedef uint8_t pymem_block; - -/* Pool for small blocks. */ -struct pool_header { - union { pymem_block *_padding; - uint count; } ref; /* number of allocated blocks */ - pymem_block *freeblock; /* pool's free list head */ - struct pool_header *nextpool; /* see "Pool table" for meaning */ - struct pool_header *prevpool; /* " */ - uint arenaindex; /* index into arenas of base adr */ - uint szidx; /* block size class index */ - uint nextoffset; /* bytes to virgin block */ - uint maxnextoffset; /* largest valid nextoffset */ -}; - -typedef struct pool_header *poolp; - -/* Record keeping for arenas. */ -struct arena_object { - /* The address of the arena, as returned by malloc. Note that 0 - * will never be returned by a successful malloc, and is used - * here to mark an arena_object that doesn't correspond to an - * allocated arena. - */ - uintptr_t address; - - /* Pool-aligned pointer to the next pool to be carved off. */ - pymem_block* pool_address; - - /* The number of available pools in the arena: free pools + never- - * allocated pools. - */ - uint nfreepools; - - /* The total number of pools in the arena, whether or not available. */ - uint ntotalpools; - - /* Singly-linked list of available pools. */ - struct pool_header* freepools; - - /* Whenever this arena_object is not associated with an allocated - * arena, the nextarena member is used to link all unassociated - * arena_objects in the singly-linked `unused_arena_objects` list. - * The prevarena member is unused in this case. - * - * When this arena_object is associated with an allocated arena - * with at least one available pool, both members are used in the - * doubly-linked `usable_arenas` list, which is maintained in - * increasing order of `nfreepools` values. - * - * Else this arena_object is associated with an allocated arena - * all of whose pools are in use. `nextarena` and `prevarena` - * are both meaningless in this case. - */ - struct arena_object* nextarena; - struct arena_object* prevarena; -}; - -#define POOL_OVERHEAD _Py_SIZE_ROUND_UP(sizeof(struct pool_header), ALIGNMENT) - -#define DUMMY_SIZE_IDX 0xffff /* size class of newly cached pools */ - -/* Round pointer P down to the closest pool-aligned address <= P, as a poolp */ -#define POOL_ADDR(P) ((poolp)_Py_ALIGN_DOWN((P), POOL_SIZE)) - -/* Return total number of blocks in pool of size index I, as a uint. */ -#define NUMBLOCKS(I) ((pymem_uint)(POOL_SIZE - POOL_OVERHEAD) / INDEX2SIZE(I)) - -/*==========================================================================*/ - -/* - * Pool table -- headed, circular, doubly-linked lists of partially used pools. - -This is involved. For an index i, usedpools[i+i] is the header for a list of -all partially used pools holding small blocks with "size class idx" i. So -usedpools[0] corresponds to blocks of size 8, usedpools[2] to blocks of size -16, and so on: index 2*i <-> blocks of size (i+1)<<ALIGNMENT_SHIFT. - -Pools are carved off an arena's highwater mark (an arena_object's pool_address -member) as needed. Once carved off, a pool is in one of three states forever -after: - -used == partially used, neither empty nor full - At least one block in the pool is currently allocated, and at least one - block in the pool is not currently allocated (note this implies a pool - has room for at least two blocks). - This is a pool's initial state, as a pool is created only when malloc - needs space. - The pool holds blocks of a fixed size, and is in the circular list headed - at usedpools[i] (see above). It's linked to the other used pools of the - same size class via the pool_header's nextpool and prevpool members. - If all but one block is currently allocated, a malloc can cause a - transition to the full state. If all but one block is not currently - allocated, a free can cause a transition to the empty state. - -full == all the pool's blocks are currently allocated - On transition to full, a pool is unlinked from its usedpools[] list. - It's not linked to from anything then anymore, and its nextpool and - prevpool members are meaningless until it transitions back to used. - A free of a block in a full pool puts the pool back in the used state. - Then it's linked in at the front of the appropriate usedpools[] list, so - that the next allocation for its size class will reuse the freed block. - -empty == all the pool's blocks are currently available for allocation - On transition to empty, a pool is unlinked from its usedpools[] list, - and linked to the front of its arena_object's singly-linked freepools list, - via its nextpool member. The prevpool member has no meaning in this case. - Empty pools have no inherent size class: the next time a malloc finds - an empty list in usedpools[], it takes the first pool off of freepools. - If the size class needed happens to be the same as the size class the pool - last had, some pool initialization can be skipped. - - -Block Management - -Blocks within pools are again carved out as needed. pool->freeblock points to -the start of a singly-linked list of free blocks within the pool. When a -block is freed, it's inserted at the front of its pool's freeblock list. Note -that the available blocks in a pool are *not* linked all together when a pool -is initialized. Instead only "the first two" (lowest addresses) blocks are -set up, returning the first such block, and setting pool->freeblock to a -one-block list holding the second such block. This is consistent with that -pymalloc strives at all levels (arena, pool, and block) never to touch a piece -of memory until it's actually needed. - -So long as a pool is in the used state, we're certain there *is* a block -available for allocating, and pool->freeblock is not NULL. If pool->freeblock -points to the end of the free list before we've carved the entire pool into -blocks, that means we simply haven't yet gotten to one of the higher-address -blocks. The offset from the pool_header to the start of "the next" virgin -block is stored in the pool_header nextoffset member, and the largest value -of nextoffset that makes sense is stored in the maxnextoffset member when a -pool is initialized. All the blocks in a pool have been passed out at least -once when and only when nextoffset > maxnextoffset. - - -Major obscurity: While the usedpools vector is declared to have poolp -entries, it doesn't really. It really contains two pointers per (conceptual) -poolp entry, the nextpool and prevpool members of a pool_header. The -excruciating initialization code below fools C so that - - usedpool[i+i] - -"acts like" a genuine poolp, but only so long as you only reference its -nextpool and prevpool members. The "- 2*sizeof(pymem_block *)" gibberish is -compensating for that a pool_header's nextpool and prevpool members -immediately follow a pool_header's first two members: - - union { pymem_block *_padding; - uint count; } ref; - pymem_block *freeblock; - -each of which consume sizeof(pymem_block *) bytes. So what usedpools[i+i] really -contains is a fudged-up pointer p such that *if* C believes it's a poolp -pointer, then p->nextpool and p->prevpool are both p (meaning that the headed -circular list is empty). - -It's unclear why the usedpools setup is so convoluted. It could be to -minimize the amount of cache required to hold this heavily-referenced table -(which only *needs* the two interpool pointer members of a pool_header). OTOH, -referencing code has to remember to "double the index" and doing so isn't -free, usedpools[0] isn't a strictly legal pointer, and we're crucially relying -on that C doesn't insert any padding anywhere in a pool_header at or before -the prevpool member. -**************************************************************************** */ - -#define OBMALLOC_USED_POOLS_SIZE (2 * ((NB_SMALL_SIZE_CLASSES + 7) / 8) * 8) - -struct _obmalloc_pools { - poolp used[OBMALLOC_USED_POOLS_SIZE]; -}; - - -/*========================================================================== -Arena management. - -`arenas` is a vector of arena_objects. It contains maxarenas entries, some of -which may not be currently used (== they're arena_objects that aren't -currently associated with an allocated arena). Note that arenas proper are -separately malloc'ed. - -Prior to Python 2.5, arenas were never free()'ed. Starting with Python 2.5, -we do try to free() arenas, and use some mild heuristic strategies to increase -the likelihood that arenas eventually can be freed. - -unused_arena_objects - - This is a singly-linked list of the arena_objects that are currently not - being used (no arena is associated with them). Objects are taken off the - head of the list in new_arena(), and are pushed on the head of the list in - PyObject_Free() when the arena is empty. Key invariant: an arena_object - is on this list if and only if its .address member is 0. - -usable_arenas - - This is a doubly-linked list of the arena_objects associated with arenas - that have pools available. These pools are either waiting to be reused, - or have not been used before. The list is sorted to have the most- - allocated arenas first (ascending order based on the nfreepools member). - This means that the next allocation will come from a heavily used arena, - which gives the nearly empty arenas a chance to be returned to the system. - In my unscientific tests this dramatically improved the number of arenas - that could be freed. - -Note that an arena_object associated with an arena all of whose pools are -currently in use isn't on either list. - -Changed in Python 3.8: keeping usable_arenas sorted by number of free pools -used to be done by one-at-a-time linear search when an arena's number of -free pools changed. That could, overall, consume time quadratic in the -number of arenas. That didn't really matter when there were only a few -hundred arenas (typical!), but could be a timing disaster when there were -hundreds of thousands. See bpo-37029. - -Now we have a vector of "search fingers" to eliminate the need to search: -nfp2lasta[nfp] returns the last ("rightmost") arena in usable_arenas -with nfp free pools. This is NULL if and only if there is no arena with -nfp free pools in usable_arenas. -*/ - -/* How many arena_objects do we initially allocate? - * 16 = can allocate 16 arenas = 16 * ARENA_SIZE = 4MB before growing the - * `arenas` vector. - */ -#define INITIAL_ARENA_OBJECTS 16 - -struct _obmalloc_mgmt { - /* Array of objects used to track chunks of memory (arenas). */ - struct arena_object* arenas; - /* Number of slots currently allocated in the `arenas` vector. */ - uint maxarenas; - - /* The head of the singly-linked, NULL-terminated list of available - * arena_objects. - */ - struct arena_object* unused_arena_objects; - - /* The head of the doubly-linked, NULL-terminated at each end, list of - * arena_objects associated with arenas that have pools available. - */ - struct arena_object* usable_arenas; - - /* nfp2lasta[nfp] is the last arena in usable_arenas with nfp free pools */ - struct arena_object* nfp2lasta[MAX_POOLS_IN_ARENA + 1]; - - /* Number of arenas allocated that haven't been free()'d. */ - size_t narenas_currently_allocated; - - /* Total number of times malloc() called to allocate an arena. */ - size_t ntimes_arena_allocated; - /* High water mark (max value ever seen) for narenas_currently_allocated. */ - size_t narenas_highwater; - - Py_ssize_t raw_allocated_blocks; -}; - - -#if WITH_PYMALLOC_RADIX_TREE -/*==========================================================================*/ -/* radix tree for tracking arena usage. If enabled, used to implement - address_in_range(). - - memory address bit allocation for keys - - 64-bit pointers, IGNORE_BITS=0 and 2^20 arena size: - 15 -> MAP_TOP_BITS - 15 -> MAP_MID_BITS - 14 -> MAP_BOT_BITS - 20 -> ideal aligned arena - ---- - 64 - - 64-bit pointers, IGNORE_BITS=16, and 2^20 arena size: - 16 -> IGNORE_BITS - 10 -> MAP_TOP_BITS - 10 -> MAP_MID_BITS - 8 -> MAP_BOT_BITS - 20 -> ideal aligned arena - ---- - 64 - - 32-bit pointers and 2^18 arena size: - 14 -> MAP_BOT_BITS - 18 -> ideal aligned arena - ---- - 32 - -*/ - -#if SIZEOF_VOID_P == 8 - -/* number of bits in a pointer */ -#define POINTER_BITS 64 - -/* High bits of memory addresses that will be ignored when indexing into the - * radix tree. Setting this to zero is the safe default. For most 64-bit - * machines, setting this to 16 would be safe. The kernel would not give - * user-space virtual memory addresses that have significant information in - * those high bits. The main advantage to setting IGNORE_BITS > 0 is that less - * virtual memory will be used for the top and middle radix tree arrays. Those - * arrays are allocated in the BSS segment and so will typically consume real - * memory only if actually accessed. - */ -#define IGNORE_BITS 0 - -/* use the top and mid layers of the radix tree */ -#define USE_INTERIOR_NODES - -#elif SIZEOF_VOID_P == 4 - -#define POINTER_BITS 32 -#define IGNORE_BITS 0 - -#else - - /* Currently this code works for 64-bit or 32-bit pointers only. */ -#error "obmalloc radix tree requires 64-bit or 32-bit pointers." - -#endif /* SIZEOF_VOID_P */ - -/* arena_coverage_t members require this to be true */ -#if ARENA_BITS >= 32 -# error "arena size must be < 2^32" -#endif - -/* the lower bits of the address that are not ignored */ -#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS) - -#ifdef USE_INTERIOR_NODES -/* number of bits used for MAP_TOP and MAP_MID nodes */ -#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3) -#else -#define INTERIOR_BITS 0 -#endif - -#define MAP_TOP_BITS INTERIOR_BITS -#define MAP_TOP_LENGTH (1 << MAP_TOP_BITS) -#define MAP_TOP_MASK (MAP_TOP_LENGTH - 1) - -#define MAP_MID_BITS INTERIOR_BITS -#define MAP_MID_LENGTH (1 << MAP_MID_BITS) -#define MAP_MID_MASK (MAP_MID_LENGTH - 1) - -#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS) -#define MAP_BOT_LENGTH (1 << MAP_BOT_BITS) -#define MAP_BOT_MASK (MAP_BOT_LENGTH - 1) - -#define MAP_BOT_SHIFT ARENA_BITS -#define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT) -#define MAP_TOP_SHIFT (MAP_MID_BITS + MAP_MID_SHIFT) - -#define AS_UINT(p) ((uintptr_t)(p)) -#define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK) -#define MAP_MID_INDEX(p) ((AS_UINT(p) >> MAP_MID_SHIFT) & MAP_MID_MASK) -#define MAP_TOP_INDEX(p) ((AS_UINT(p) >> MAP_TOP_SHIFT) & MAP_TOP_MASK) - -#if IGNORE_BITS > 0 -/* Return the ignored part of the pointer address. Those bits should be same - * for all valid pointers if IGNORE_BITS is set correctly. - */ -#define HIGH_BITS(p) (AS_UINT(p) >> ADDRESS_BITS) -#else -#define HIGH_BITS(p) 0 -#endif - - -/* This is the leaf of the radix tree. See arena_map_mark_used() for the - * meaning of these members. */ -typedef struct { - int32_t tail_hi; - int32_t tail_lo; -} arena_coverage_t; - -typedef struct arena_map_bot { - /* The members tail_hi and tail_lo are accessed together. So, it - * better to have them as an array of structs, rather than two - * arrays. - */ - arena_coverage_t arenas[MAP_BOT_LENGTH]; -} arena_map_bot_t; - -#ifdef USE_INTERIOR_NODES -typedef struct arena_map_mid { - struct arena_map_bot *ptrs[MAP_MID_LENGTH]; -} arena_map_mid_t; - -typedef struct arena_map_top { - struct arena_map_mid *ptrs[MAP_TOP_LENGTH]; -} arena_map_top_t; -#endif - -struct _obmalloc_usage { - /* The root of radix tree. Note that by initializing like this, the memory - * should be in the BSS. The OS will only memory map pages as the MAP_MID - * nodes get used (OS pages are demand loaded as needed). - */ -#ifdef USE_INTERIOR_NODES - arena_map_top_t arena_map_root; - /* accounting for number of used interior nodes */ - int arena_map_mid_count; - int arena_map_bot_count; -#else - arena_map_bot_t arena_map_root; -#endif -}; - -#endif /* WITH_PYMALLOC_RADIX_TREE */ - - -struct _obmalloc_global_state { - int dump_debug_stats; - Py_ssize_t interpreter_leaks; -}; - -struct _obmalloc_state { - struct _obmalloc_pools pools; - struct _obmalloc_mgmt mgmt; -#if WITH_PYMALLOC_RADIX_TREE - struct _obmalloc_usage usage; -#endif -}; - - -#undef uint - - -/* Allocate memory directly from the O/S virtual memory system, - * where supported. Otherwise fallback on malloc */ -void *_PyObject_VirtualAlloc(size_t size); -void _PyObject_VirtualFree(void *, size_t size); - - -/* This function returns the number of allocated memory blocks, regardless of size */ -extern Py_ssize_t _Py_GetGlobalAllocatedBlocks(void); -#define _Py_GetAllocatedBlocks() \ - _Py_GetGlobalAllocatedBlocks() -extern Py_ssize_t _PyInterpreterState_GetAllocatedBlocks(PyInterpreterState *); -extern void _PyInterpreterState_FinalizeAllocatedBlocks(PyInterpreterState *); -extern int _PyMem_init_obmalloc(PyInterpreterState *interp); -extern bool _PyMem_obmalloc_state_on_heap(PyInterpreterState *interp); - - -#ifdef WITH_PYMALLOC -// Export the symbol for the 3rd party 'guppy3' project -PyAPI_FUNC(int) _PyObject_DebugMallocStats(FILE *out); -#endif - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_OBMALLOC_H diff --git a/Python314_4_x86_Template/include/internal/pycore_obmalloc_init.h b/Python314_4_x86_Template/include/internal/pycore_obmalloc_init.h deleted file mode 100644 index e6811b7ae..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_obmalloc_init.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef Py_INTERNAL_OBMALLOC_INIT_H -#define Py_INTERNAL_OBMALLOC_INIT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/****************************************************/ -/* the default object allocator's state initializer */ - -#define PTA(pools, x) \ - ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *))) -#define PT(p, x) PTA(p, x), PTA(p, x) - -#define PT_8(p, start) \ - PT(p, start), \ - PT(p, start+1), \ - PT(p, start+2), \ - PT(p, start+3), \ - PT(p, start+4), \ - PT(p, start+5), \ - PT(p, start+6), \ - PT(p, start+7) - -#if NB_SMALL_SIZE_CLASSES <= 8 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0) } -#elif NB_SMALL_SIZE_CLASSES <= 16 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8) } -#elif NB_SMALL_SIZE_CLASSES <= 24 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16) } -#elif NB_SMALL_SIZE_CLASSES <= 32 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) } -#elif NB_SMALL_SIZE_CLASSES <= 40 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32) } -#elif NB_SMALL_SIZE_CLASSES <= 48 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40) } -#elif NB_SMALL_SIZE_CLASSES <= 56 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48) } -#elif NB_SMALL_SIZE_CLASSES <= 64 -# define _obmalloc_pools_INIT(p) \ - { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48), PT_8(p, 56) } -#else -# error "NB_SMALL_SIZE_CLASSES should be less than 64" -#endif - -#define _obmalloc_global_state_INIT \ - { \ - .dump_debug_stats = -1, \ - } - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_OBMALLOC_INIT_H diff --git a/Python314_4_x86_Template/include/internal/pycore_opcode_metadata.h b/Python314_4_x86_Template/include/internal/pycore_opcode_metadata.h deleted file mode 100644 index ccd10e90f..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_opcode_metadata.h +++ /dev/null @@ -1,2117 +0,0 @@ -// This file is generated by Tools/cases_generator/opcode_metadata_generator.py -// from: -// Python/bytecodes.c -// Do not edit! - -#ifndef Py_CORE_OPCODE_METADATA_H -#define Py_CORE_OPCODE_METADATA_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include <stdbool.h> // bool -#include "opcode_ids.h" - - -#define IS_PSEUDO_INSTR(OP) ( \ - ((OP) == LOAD_CLOSURE) || \ - ((OP) == STORE_FAST_MAYBE_NULL) || \ - ((OP) == ANNOTATIONS_PLACEHOLDER) || \ - ((OP) == JUMP) || \ - ((OP) == JUMP_NO_INTERRUPT) || \ - ((OP) == JUMP_IF_FALSE) || \ - ((OP) == JUMP_IF_TRUE) || \ - ((OP) == SETUP_FINALLY) || \ - ((OP) == SETUP_CLEANUP) || \ - ((OP) == SETUP_WITH) || \ - ((OP) == POP_BLOCK) || \ - 0) - -#include "pycore_uop_ids.h" -extern int _PyOpcode_num_popped(int opcode, int oparg); -#ifdef NEED_OPCODE_METADATA -int _PyOpcode_num_popped(int opcode, int oparg) { - switch(opcode) { - case ANNOTATIONS_PLACEHOLDER: - return 0; - case BINARY_OP: - return 2; - case BINARY_OP_ADD_FLOAT: - return 2; - case BINARY_OP_ADD_INT: - return 2; - case BINARY_OP_ADD_UNICODE: - return 2; - case BINARY_OP_EXTEND: - return 2; - case BINARY_OP_INPLACE_ADD_UNICODE: - return 2; - case BINARY_OP_MULTIPLY_FLOAT: - return 2; - case BINARY_OP_MULTIPLY_INT: - return 2; - case BINARY_OP_SUBSCR_DICT: - return 2; - case BINARY_OP_SUBSCR_GETITEM: - return 2; - case BINARY_OP_SUBSCR_LIST_INT: - return 2; - case BINARY_OP_SUBSCR_LIST_SLICE: - return 2; - case BINARY_OP_SUBSCR_STR_INT: - return 2; - case BINARY_OP_SUBSCR_TUPLE_INT: - return 2; - case BINARY_OP_SUBTRACT_FLOAT: - return 2; - case BINARY_OP_SUBTRACT_INT: - return 2; - case BINARY_SLICE: - return 3; - case BUILD_INTERPOLATION: - return 2 + (oparg & 1); - case BUILD_LIST: - return oparg; - case BUILD_MAP: - return oparg*2; - case BUILD_SET: - return oparg; - case BUILD_SLICE: - return oparg; - case BUILD_STRING: - return oparg; - case BUILD_TEMPLATE: - return 2; - case BUILD_TUPLE: - return oparg; - case CACHE: - return 0; - case CALL: - return 2 + oparg; - case CALL_ALLOC_AND_ENTER_INIT: - return 2 + oparg; - case CALL_BOUND_METHOD_EXACT_ARGS: - return 2 + oparg; - case CALL_BOUND_METHOD_GENERAL: - return 2 + oparg; - case CALL_BUILTIN_CLASS: - return 2 + oparg; - case CALL_BUILTIN_FAST: - return 2 + oparg; - case CALL_BUILTIN_FAST_WITH_KEYWORDS: - return 2 + oparg; - case CALL_BUILTIN_O: - return 2 + oparg; - case CALL_FUNCTION_EX: - return 4; - case CALL_INTRINSIC_1: - return 1; - case CALL_INTRINSIC_2: - return 2; - case CALL_ISINSTANCE: - return 2 + oparg; - case CALL_KW: - return 3 + oparg; - case CALL_KW_BOUND_METHOD: - return 3 + oparg; - case CALL_KW_NON_PY: - return 3 + oparg; - case CALL_KW_PY: - return 3 + oparg; - case CALL_LEN: - return 3; - case CALL_LIST_APPEND: - return 3; - case CALL_METHOD_DESCRIPTOR_FAST: - return 2 + oparg; - case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: - return 2 + oparg; - case CALL_METHOD_DESCRIPTOR_NOARGS: - return 2 + oparg; - case CALL_METHOD_DESCRIPTOR_O: - return 2 + oparg; - case CALL_NON_PY_GENERAL: - return 2 + oparg; - case CALL_PY_EXACT_ARGS: - return 2 + oparg; - case CALL_PY_GENERAL: - return 2 + oparg; - case CALL_STR_1: - return 3; - case CALL_TUPLE_1: - return 3; - case CALL_TYPE_1: - return 3; - case CHECK_EG_MATCH: - return 2; - case CHECK_EXC_MATCH: - return 2; - case CLEANUP_THROW: - return 3; - case COMPARE_OP: - return 2; - case COMPARE_OP_FLOAT: - return 2; - case COMPARE_OP_INT: - return 2; - case COMPARE_OP_STR: - return 2; - case CONTAINS_OP: - return 2; - case CONTAINS_OP_DICT: - return 2; - case CONTAINS_OP_SET: - return 2; - case CONVERT_VALUE: - return 1; - case COPY: - return 1 + (oparg-1); - case COPY_FREE_VARS: - return 0; - case DELETE_ATTR: - return 1; - case DELETE_DEREF: - return 0; - case DELETE_FAST: - return 0; - case DELETE_GLOBAL: - return 0; - case DELETE_NAME: - return 0; - case DELETE_SUBSCR: - return 2; - case DICT_MERGE: - return 5 + (oparg - 1); - case DICT_UPDATE: - return 2 + (oparg - 1); - case END_ASYNC_FOR: - return 2; - case END_FOR: - return 1; - case END_SEND: - return 2; - case ENTER_EXECUTOR: - return 0; - case EXIT_INIT_CHECK: - return 1; - case EXTENDED_ARG: - return 0; - case FORMAT_SIMPLE: - return 1; - case FORMAT_WITH_SPEC: - return 2; - case FOR_ITER: - return 1; - case FOR_ITER_GEN: - return 1; - case FOR_ITER_LIST: - return 1; - case FOR_ITER_RANGE: - return 1; - case FOR_ITER_TUPLE: - return 1; - case GET_AITER: - return 1; - case GET_ANEXT: - return 1; - case GET_AWAITABLE: - return 1; - case GET_ITER: - return 1; - case GET_LEN: - return 1; - case GET_YIELD_FROM_ITER: - return 1; - case IMPORT_FROM: - return 1; - case IMPORT_NAME: - return 2; - case INSTRUMENTED_CALL: - return 2 + oparg; - case INSTRUMENTED_CALL_FUNCTION_EX: - return 4; - case INSTRUMENTED_CALL_KW: - return 3 + oparg; - case INSTRUMENTED_END_ASYNC_FOR: - return 2; - case INSTRUMENTED_END_FOR: - return 2; - case INSTRUMENTED_END_SEND: - return 2; - case INSTRUMENTED_FOR_ITER: - return 1; - case INSTRUMENTED_INSTRUCTION: - return 0; - case INSTRUMENTED_JUMP_BACKWARD: - return 0; - case INSTRUMENTED_JUMP_FORWARD: - return 0; - case INSTRUMENTED_LINE: - return 0; - case INSTRUMENTED_LOAD_SUPER_ATTR: - return 3; - case INSTRUMENTED_NOT_TAKEN: - return 0; - case INSTRUMENTED_POP_ITER: - return 1; - case INSTRUMENTED_POP_JUMP_IF_FALSE: - return 1; - case INSTRUMENTED_POP_JUMP_IF_NONE: - return 1; - case INSTRUMENTED_POP_JUMP_IF_NOT_NONE: - return 1; - case INSTRUMENTED_POP_JUMP_IF_TRUE: - return 1; - case INSTRUMENTED_RESUME: - return 0; - case INSTRUMENTED_RETURN_VALUE: - return 1; - case INSTRUMENTED_YIELD_VALUE: - return 1; - case INTERPRETER_EXIT: - return 1; - case IS_OP: - return 2; - case JUMP: - return 0; - case JUMP_BACKWARD: - return 0; - case JUMP_BACKWARD_JIT: - return 0; - case JUMP_BACKWARD_NO_INTERRUPT: - return 0; - case JUMP_BACKWARD_NO_JIT: - return 0; - case JUMP_FORWARD: - return 0; - case JUMP_IF_FALSE: - return 1; - case JUMP_IF_TRUE: - return 1; - case JUMP_NO_INTERRUPT: - return 0; - case LIST_APPEND: - return 2 + (oparg-1); - case LIST_EXTEND: - return 2 + (oparg-1); - case LOAD_ATTR: - return 1; - case LOAD_ATTR_CLASS: - return 1; - case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK: - return 1; - case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN: - return 1; - case LOAD_ATTR_INSTANCE_VALUE: - return 1; - case LOAD_ATTR_METHOD_LAZY_DICT: - return 1; - case LOAD_ATTR_METHOD_NO_DICT: - return 1; - case LOAD_ATTR_METHOD_WITH_VALUES: - return 1; - case LOAD_ATTR_MODULE: - return 1; - case LOAD_ATTR_NONDESCRIPTOR_NO_DICT: - return 1; - case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: - return 1; - case LOAD_ATTR_PROPERTY: - return 1; - case LOAD_ATTR_SLOT: - return 1; - case LOAD_ATTR_WITH_HINT: - return 1; - case LOAD_BUILD_CLASS: - return 0; - case LOAD_CLOSURE: - return 0; - case LOAD_COMMON_CONSTANT: - return 0; - case LOAD_CONST: - return 0; - case LOAD_CONST_IMMORTAL: - return 0; - case LOAD_CONST_MORTAL: - return 0; - case LOAD_DEREF: - return 0; - case LOAD_FAST: - return 0; - case LOAD_FAST_AND_CLEAR: - return 0; - case LOAD_FAST_BORROW: - return 0; - case LOAD_FAST_BORROW_LOAD_FAST_BORROW: - return 0; - case LOAD_FAST_CHECK: - return 0; - case LOAD_FAST_LOAD_FAST: - return 0; - case LOAD_FROM_DICT_OR_DEREF: - return 1; - case LOAD_FROM_DICT_OR_GLOBALS: - return 1; - case LOAD_GLOBAL: - return 0; - case LOAD_GLOBAL_BUILTIN: - return 0; - case LOAD_GLOBAL_MODULE: - return 0; - case LOAD_LOCALS: - return 0; - case LOAD_NAME: - return 0; - case LOAD_SMALL_INT: - return 0; - case LOAD_SPECIAL: - return 1; - case LOAD_SUPER_ATTR: - return 3; - case LOAD_SUPER_ATTR_ATTR: - return 3; - case LOAD_SUPER_ATTR_METHOD: - return 3; - case MAKE_CELL: - return 0; - case MAKE_FUNCTION: - return 1; - case MAP_ADD: - return 3 + (oparg - 1); - case MATCH_CLASS: - return 3; - case MATCH_KEYS: - return 2; - case MATCH_MAPPING: - return 1; - case MATCH_SEQUENCE: - return 1; - case NOP: - return 0; - case NOT_TAKEN: - return 0; - case POP_BLOCK: - return 0; - case POP_EXCEPT: - return 1; - case POP_ITER: - return 1; - case POP_JUMP_IF_FALSE: - return 1; - case POP_JUMP_IF_NONE: - return 1; - case POP_JUMP_IF_NOT_NONE: - return 1; - case POP_JUMP_IF_TRUE: - return 1; - case POP_TOP: - return 1; - case PUSH_EXC_INFO: - return 1; - case PUSH_NULL: - return 0; - case RAISE_VARARGS: - return oparg; - case RERAISE: - return 1 + oparg; - case RESERVED: - return 0; - case RESUME: - return 0; - case RESUME_CHECK: - return 0; - case RETURN_GENERATOR: - return 0; - case RETURN_VALUE: - return 1; - case SEND: - return 2; - case SEND_GEN: - return 2; - case SETUP_ANNOTATIONS: - return 0; - case SETUP_CLEANUP: - return 0; - case SETUP_FINALLY: - return 0; - case SETUP_WITH: - return 0; - case SET_ADD: - return 2 + (oparg-1); - case SET_FUNCTION_ATTRIBUTE: - return 2; - case SET_UPDATE: - return 2 + (oparg-1); - case STORE_ATTR: - return 2; - case STORE_ATTR_INSTANCE_VALUE: - return 2; - case STORE_ATTR_SLOT: - return 2; - case STORE_ATTR_WITH_HINT: - return 2; - case STORE_DEREF: - return 1; - case STORE_FAST: - return 1; - case STORE_FAST_LOAD_FAST: - return 1; - case STORE_FAST_MAYBE_NULL: - return 1; - case STORE_FAST_STORE_FAST: - return 2; - case STORE_GLOBAL: - return 1; - case STORE_NAME: - return 1; - case STORE_SLICE: - return 4; - case STORE_SUBSCR: - return 3; - case STORE_SUBSCR_DICT: - return 3; - case STORE_SUBSCR_LIST_INT: - return 3; - case SWAP: - return 2 + (oparg-2); - case TO_BOOL: - return 1; - case TO_BOOL_ALWAYS_TRUE: - return 1; - case TO_BOOL_BOOL: - return 1; - case TO_BOOL_INT: - return 1; - case TO_BOOL_LIST: - return 1; - case TO_BOOL_NONE: - return 1; - case TO_BOOL_STR: - return 1; - case UNARY_INVERT: - return 1; - case UNARY_NEGATIVE: - return 1; - case UNARY_NOT: - return 1; - case UNPACK_EX: - return 1; - case UNPACK_SEQUENCE: - return 1; - case UNPACK_SEQUENCE_LIST: - return 1; - case UNPACK_SEQUENCE_TUPLE: - return 1; - case UNPACK_SEQUENCE_TWO_TUPLE: - return 1; - case WITH_EXCEPT_START: - return 5; - case YIELD_VALUE: - return 1; - default: - return -1; - } -} - -#endif - -extern int _PyOpcode_num_pushed(int opcode, int oparg); -#ifdef NEED_OPCODE_METADATA -int _PyOpcode_num_pushed(int opcode, int oparg) { - switch(opcode) { - case ANNOTATIONS_PLACEHOLDER: - return 0; - case BINARY_OP: - return 1; - case BINARY_OP_ADD_FLOAT: - return 1; - case BINARY_OP_ADD_INT: - return 1; - case BINARY_OP_ADD_UNICODE: - return 1; - case BINARY_OP_EXTEND: - return 1; - case BINARY_OP_INPLACE_ADD_UNICODE: - return 0; - case BINARY_OP_MULTIPLY_FLOAT: - return 1; - case BINARY_OP_MULTIPLY_INT: - return 1; - case BINARY_OP_SUBSCR_DICT: - return 1; - case BINARY_OP_SUBSCR_GETITEM: - return 0; - case BINARY_OP_SUBSCR_LIST_INT: - return 1; - case BINARY_OP_SUBSCR_LIST_SLICE: - return 1; - case BINARY_OP_SUBSCR_STR_INT: - return 1; - case BINARY_OP_SUBSCR_TUPLE_INT: - return 1; - case BINARY_OP_SUBTRACT_FLOAT: - return 1; - case BINARY_OP_SUBTRACT_INT: - return 1; - case BINARY_SLICE: - return 1; - case BUILD_INTERPOLATION: - return 1; - case BUILD_LIST: - return 1; - case BUILD_MAP: - return 1; - case BUILD_SET: - return 1; - case BUILD_SLICE: - return 1; - case BUILD_STRING: - return 1; - case BUILD_TEMPLATE: - return 1; - case BUILD_TUPLE: - return 1; - case CACHE: - return 0; - case CALL: - return 1; - case CALL_ALLOC_AND_ENTER_INIT: - return 0; - case CALL_BOUND_METHOD_EXACT_ARGS: - return 0; - case CALL_BOUND_METHOD_GENERAL: - return 0; - case CALL_BUILTIN_CLASS: - return 1; - case CALL_BUILTIN_FAST: - return 1; - case CALL_BUILTIN_FAST_WITH_KEYWORDS: - return 1; - case CALL_BUILTIN_O: - return 1; - case CALL_FUNCTION_EX: - return 1; - case CALL_INTRINSIC_1: - return 1; - case CALL_INTRINSIC_2: - return 1; - case CALL_ISINSTANCE: - return 1; - case CALL_KW: - return 1; - case CALL_KW_BOUND_METHOD: - return 0; - case CALL_KW_NON_PY: - return 1; - case CALL_KW_PY: - return 0; - case CALL_LEN: - return 1; - case CALL_LIST_APPEND: - return 0; - case CALL_METHOD_DESCRIPTOR_FAST: - return 1; - case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: - return 1; - case CALL_METHOD_DESCRIPTOR_NOARGS: - return 1; - case CALL_METHOD_DESCRIPTOR_O: - return 1; - case CALL_NON_PY_GENERAL: - return 1; - case CALL_PY_EXACT_ARGS: - return 0; - case CALL_PY_GENERAL: - return 0; - case CALL_STR_1: - return 1; - case CALL_TUPLE_1: - return 1; - case CALL_TYPE_1: - return 1; - case CHECK_EG_MATCH: - return 2; - case CHECK_EXC_MATCH: - return 2; - case CLEANUP_THROW: - return 2; - case COMPARE_OP: - return 1; - case COMPARE_OP_FLOAT: - return 1; - case COMPARE_OP_INT: - return 1; - case COMPARE_OP_STR: - return 1; - case CONTAINS_OP: - return 1; - case CONTAINS_OP_DICT: - return 1; - case CONTAINS_OP_SET: - return 1; - case CONVERT_VALUE: - return 1; - case COPY: - return 2 + (oparg-1); - case COPY_FREE_VARS: - return 0; - case DELETE_ATTR: - return 0; - case DELETE_DEREF: - return 0; - case DELETE_FAST: - return 0; - case DELETE_GLOBAL: - return 0; - case DELETE_NAME: - return 0; - case DELETE_SUBSCR: - return 0; - case DICT_MERGE: - return 4 + (oparg - 1); - case DICT_UPDATE: - return 1 + (oparg - 1); - case END_ASYNC_FOR: - return 0; - case END_FOR: - return 0; - case END_SEND: - return 1; - case ENTER_EXECUTOR: - return 0; - case EXIT_INIT_CHECK: - return 0; - case EXTENDED_ARG: - return 0; - case FORMAT_SIMPLE: - return 1; - case FORMAT_WITH_SPEC: - return 1; - case FOR_ITER: - return 2; - case FOR_ITER_GEN: - return 1; - case FOR_ITER_LIST: - return 2; - case FOR_ITER_RANGE: - return 2; - case FOR_ITER_TUPLE: - return 2; - case GET_AITER: - return 1; - case GET_ANEXT: - return 2; - case GET_AWAITABLE: - return 1; - case GET_ITER: - return 1; - case GET_LEN: - return 2; - case GET_YIELD_FROM_ITER: - return 1; - case IMPORT_FROM: - return 2; - case IMPORT_NAME: - return 1; - case INSTRUMENTED_CALL: - return 1; - case INSTRUMENTED_CALL_FUNCTION_EX: - return 1; - case INSTRUMENTED_CALL_KW: - return 1; - case INSTRUMENTED_END_ASYNC_FOR: - return 0; - case INSTRUMENTED_END_FOR: - return 1; - case INSTRUMENTED_END_SEND: - return 1; - case INSTRUMENTED_FOR_ITER: - return 2; - case INSTRUMENTED_INSTRUCTION: - return 0; - case INSTRUMENTED_JUMP_BACKWARD: - return 0; - case INSTRUMENTED_JUMP_FORWARD: - return 0; - case INSTRUMENTED_LINE: - return 0; - case INSTRUMENTED_LOAD_SUPER_ATTR: - return 1 + (oparg & 1); - case INSTRUMENTED_NOT_TAKEN: - return 0; - case INSTRUMENTED_POP_ITER: - return 0; - case INSTRUMENTED_POP_JUMP_IF_FALSE: - return 0; - case INSTRUMENTED_POP_JUMP_IF_NONE: - return 0; - case INSTRUMENTED_POP_JUMP_IF_NOT_NONE: - return 0; - case INSTRUMENTED_POP_JUMP_IF_TRUE: - return 0; - case INSTRUMENTED_RESUME: - return 0; - case INSTRUMENTED_RETURN_VALUE: - return 1; - case INSTRUMENTED_YIELD_VALUE: - return 1; - case INTERPRETER_EXIT: - return 0; - case IS_OP: - return 1; - case JUMP: - return 0; - case JUMP_BACKWARD: - return 0; - case JUMP_BACKWARD_JIT: - return 0; - case JUMP_BACKWARD_NO_INTERRUPT: - return 0; - case JUMP_BACKWARD_NO_JIT: - return 0; - case JUMP_FORWARD: - return 0; - case JUMP_IF_FALSE: - return 1; - case JUMP_IF_TRUE: - return 1; - case JUMP_NO_INTERRUPT: - return 0; - case LIST_APPEND: - return 1 + (oparg-1); - case LIST_EXTEND: - return 1 + (oparg-1); - case LOAD_ATTR: - return 1 + (oparg&1); - case LOAD_ATTR_CLASS: - return 1 + (oparg & 1); - case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK: - return 1 + (oparg & 1); - case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN: - return 1; - case LOAD_ATTR_INSTANCE_VALUE: - return 1 + (oparg & 1); - case LOAD_ATTR_METHOD_LAZY_DICT: - return 2; - case LOAD_ATTR_METHOD_NO_DICT: - return 2; - case LOAD_ATTR_METHOD_WITH_VALUES: - return 2; - case LOAD_ATTR_MODULE: - return 1 + (oparg & 1); - case LOAD_ATTR_NONDESCRIPTOR_NO_DICT: - return 1; - case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: - return 1; - case LOAD_ATTR_PROPERTY: - return 0; - case LOAD_ATTR_SLOT: - return 1 + (oparg & 1); - case LOAD_ATTR_WITH_HINT: - return 1 + (oparg & 1); - case LOAD_BUILD_CLASS: - return 1; - case LOAD_CLOSURE: - return 1; - case LOAD_COMMON_CONSTANT: - return 1; - case LOAD_CONST: - return 1; - case LOAD_CONST_IMMORTAL: - return 1; - case LOAD_CONST_MORTAL: - return 1; - case LOAD_DEREF: - return 1; - case LOAD_FAST: - return 1; - case LOAD_FAST_AND_CLEAR: - return 1; - case LOAD_FAST_BORROW: - return 1; - case LOAD_FAST_BORROW_LOAD_FAST_BORROW: - return 2; - case LOAD_FAST_CHECK: - return 1; - case LOAD_FAST_LOAD_FAST: - return 2; - case LOAD_FROM_DICT_OR_DEREF: - return 1; - case LOAD_FROM_DICT_OR_GLOBALS: - return 1; - case LOAD_GLOBAL: - return 1 + (oparg & 1); - case LOAD_GLOBAL_BUILTIN: - return 1 + (oparg & 1); - case LOAD_GLOBAL_MODULE: - return 1 + (oparg & 1); - case LOAD_LOCALS: - return 1; - case LOAD_NAME: - return 1; - case LOAD_SMALL_INT: - return 1; - case LOAD_SPECIAL: - return 2; - case LOAD_SUPER_ATTR: - return 1 + (oparg & 1); - case LOAD_SUPER_ATTR_ATTR: - return 1; - case LOAD_SUPER_ATTR_METHOD: - return 2; - case MAKE_CELL: - return 0; - case MAKE_FUNCTION: - return 1; - case MAP_ADD: - return 1 + (oparg - 1); - case MATCH_CLASS: - return 1; - case MATCH_KEYS: - return 3; - case MATCH_MAPPING: - return 2; - case MATCH_SEQUENCE: - return 2; - case NOP: - return 0; - case NOT_TAKEN: - return 0; - case POP_BLOCK: - return 0; - case POP_EXCEPT: - return 0; - case POP_ITER: - return 0; - case POP_JUMP_IF_FALSE: - return 0; - case POP_JUMP_IF_NONE: - return 0; - case POP_JUMP_IF_NOT_NONE: - return 0; - case POP_JUMP_IF_TRUE: - return 0; - case POP_TOP: - return 0; - case PUSH_EXC_INFO: - return 2; - case PUSH_NULL: - return 1; - case RAISE_VARARGS: - return 0; - case RERAISE: - return oparg; - case RESERVED: - return 0; - case RESUME: - return 0; - case RESUME_CHECK: - return 0; - case RETURN_GENERATOR: - return 1; - case RETURN_VALUE: - return 1; - case SEND: - return 2; - case SEND_GEN: - return 1; - case SETUP_ANNOTATIONS: - return 0; - case SETUP_CLEANUP: - return 2; - case SETUP_FINALLY: - return 1; - case SETUP_WITH: - return 1; - case SET_ADD: - return 1 + (oparg-1); - case SET_FUNCTION_ATTRIBUTE: - return 1; - case SET_UPDATE: - return 1 + (oparg-1); - case STORE_ATTR: - return 0; - case STORE_ATTR_INSTANCE_VALUE: - return 0; - case STORE_ATTR_SLOT: - return 0; - case STORE_ATTR_WITH_HINT: - return 0; - case STORE_DEREF: - return 0; - case STORE_FAST: - return 0; - case STORE_FAST_LOAD_FAST: - return 1; - case STORE_FAST_MAYBE_NULL: - return 0; - case STORE_FAST_STORE_FAST: - return 0; - case STORE_GLOBAL: - return 0; - case STORE_NAME: - return 0; - case STORE_SLICE: - return 0; - case STORE_SUBSCR: - return 0; - case STORE_SUBSCR_DICT: - return 0; - case STORE_SUBSCR_LIST_INT: - return 0; - case SWAP: - return 2 + (oparg-2); - case TO_BOOL: - return 1; - case TO_BOOL_ALWAYS_TRUE: - return 1; - case TO_BOOL_BOOL: - return 1; - case TO_BOOL_INT: - return 1; - case TO_BOOL_LIST: - return 1; - case TO_BOOL_NONE: - return 1; - case TO_BOOL_STR: - return 1; - case UNARY_INVERT: - return 1; - case UNARY_NEGATIVE: - return 1; - case UNARY_NOT: - return 1; - case UNPACK_EX: - return 1 + (oparg & 0xFF) + (oparg >> 8); - case UNPACK_SEQUENCE: - return oparg; - case UNPACK_SEQUENCE_LIST: - return oparg; - case UNPACK_SEQUENCE_TUPLE: - return oparg; - case UNPACK_SEQUENCE_TWO_TUPLE: - return 2; - case WITH_EXCEPT_START: - return 6; - case YIELD_VALUE: - return 1; - default: - return -1; - } -} - -#endif - -enum InstructionFormat { - INSTR_FMT_IB = 1, - INSTR_FMT_IBC = 2, - INSTR_FMT_IBC00 = 3, - INSTR_FMT_IBC000 = 4, - INSTR_FMT_IBC0000 = 5, - INSTR_FMT_IBC00000000 = 6, - INSTR_FMT_IX = 7, - INSTR_FMT_IXC = 8, - INSTR_FMT_IXC00 = 9, - INSTR_FMT_IXC000 = 10, - INSTR_FMT_IXC0000 = 11, -}; - -#define IS_VALID_OPCODE(OP) \ - (((OP) >= 0) && ((OP) < 267) && \ - (_PyOpcode_opcode_metadata[(OP)].valid_entry)) - -#define HAS_ARG_FLAG (1) -#define HAS_CONST_FLAG (2) -#define HAS_NAME_FLAG (4) -#define HAS_JUMP_FLAG (8) -#define HAS_FREE_FLAG (16) -#define HAS_LOCAL_FLAG (32) -#define HAS_EVAL_BREAK_FLAG (64) -#define HAS_DEOPT_FLAG (128) -#define HAS_ERROR_FLAG (256) -#define HAS_ESCAPES_FLAG (512) -#define HAS_EXIT_FLAG (1024) -#define HAS_PURE_FLAG (2048) -#define HAS_PASSTHROUGH_FLAG (4096) -#define HAS_OPARG_AND_1_FLAG (8192) -#define HAS_ERROR_NO_POP_FLAG (16384) -#define HAS_NO_SAVE_IP_FLAG (32768) -#define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG)) -#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG)) -#define OPCODE_HAS_NAME(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NAME_FLAG)) -#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG)) -#define OPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG)) -#define OPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG)) -#define OPCODE_HAS_EVAL_BREAK(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EVAL_BREAK_FLAG)) -#define OPCODE_HAS_DEOPT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_DEOPT_FLAG)) -#define OPCODE_HAS_ERROR(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_FLAG)) -#define OPCODE_HAS_ESCAPES(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ESCAPES_FLAG)) -#define OPCODE_HAS_EXIT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EXIT_FLAG)) -#define OPCODE_HAS_PURE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PURE_FLAG)) -#define OPCODE_HAS_PASSTHROUGH(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PASSTHROUGH_FLAG)) -#define OPCODE_HAS_OPARG_AND_1(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_OPARG_AND_1_FLAG)) -#define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG)) -#define OPCODE_HAS_NO_SAVE_IP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NO_SAVE_IP_FLAG)) - -#define OPARG_SIMPLE 0 -#define OPARG_CACHE_1 1 -#define OPARG_CACHE_2 2 -#define OPARG_CACHE_4 4 -#define OPARG_TOP 5 -#define OPARG_BOTTOM 6 -#define OPARG_SAVE_RETURN_OFFSET 7 -#define OPARG_REPLACED 9 -#define OPERAND1_1 10 -#define OPERAND1_2 11 -#define OPERAND1_4 12 - -struct opcode_metadata { - uint8_t valid_entry; - uint8_t instr_format; - uint16_t flags; -}; - -extern const struct opcode_metadata _PyOpcode_opcode_metadata[267]; -#ifdef NEED_OPCODE_METADATA -const struct opcode_metadata _PyOpcode_opcode_metadata[267] = { - [BINARY_OP] = { true, INSTR_FMT_IBC0000, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_EXTEND] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IXC0000, HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_DICT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG }, - [BINARY_OP_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_LIST_SLICE] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_OP_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC0000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC0000, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BINARY_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_INTERPOLATION] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_LIST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_SET] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_SLICE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, - [BUILD_STRING] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, - [BUILD_TEMPLATE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [BUILD_TUPLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG }, - [CACHE] = { true, INSTR_FMT_IX, 0 }, - [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BOUND_METHOD_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_ISINSTANCE] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW_BOUND_METHOD] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW_NON_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_KW_PY] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_LEN] = { true, INSTR_FMT_IXC00, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CALL_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, - [CHECK_EG_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CHECK_EXC_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [CLEANUP_THROW] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [COMPARE_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [COMPARE_OP_FLOAT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG }, - [COMPARE_OP_INT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [COMPARE_OP_STR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG }, - [CONTAINS_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CONTAINS_OP_DICT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CONTAINS_OP_SET] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [CONVERT_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [COPY] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG }, - [COPY_FREE_VARS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [DELETE_ATTR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [DELETE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [DELETE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [DELETE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [DELETE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [DELETE_SUBSCR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [DICT_MERGE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [DICT_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [END_FOR] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG }, - [END_SEND] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG }, - [ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [EXIT_INIT_CHECK] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [EXTENDED_ARG] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [FORMAT_SIMPLE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [FORMAT_WITH_SPEC] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG }, - [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [GET_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG }, - [INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [INSTRUMENTED_LINE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [INSTRUMENTED_LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_NOT_TAKEN] = { true, INSTR_FMT_IX, 0 }, - [INSTRUMENTED_POP_ITER] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, - [INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [INTERPRETER_EXIT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [IS_OP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_BACKWARD_JIT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [JUMP_BACKWARD_NO_JIT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [LIST_APPEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, - [LIST_EXTEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG }, - [LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_METHOD_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_METHOD_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_MODULE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_SLOT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [LOAD_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_COMMON_CONSTANT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [LOAD_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG }, - [LOAD_CONST_IMMORTAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG }, - [LOAD_CONST_MORTAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG }, - [LOAD_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG }, - [LOAD_FAST_AND_CLEAR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG }, - [LOAD_FAST_BORROW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG }, - [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG }, - [LOAD_FAST_CHECK] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG }, - [LOAD_FROM_DICT_OR_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_FROM_DICT_OR_GLOBALS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_GLOBAL] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_GLOBAL_BUILTIN] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [LOAD_GLOBAL_MODULE] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_SMALL_INT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [LOAD_SPECIAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_SUPER_ATTR_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [LOAD_SUPER_ATTR_METHOD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [MAKE_CELL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [MAKE_FUNCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [MAP_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [MATCH_CLASS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [MATCH_KEYS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [MATCH_MAPPING] = { true, INSTR_FMT_IX, 0 }, - [MATCH_SEQUENCE] = { true, INSTR_FMT_IX, 0 }, - [NOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG }, - [NOT_TAKEN] = { true, INSTR_FMT_IX, HAS_PURE_FLAG }, - [POP_EXCEPT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [POP_ITER] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG }, - [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_TOP] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG }, - [PUSH_EXC_INFO] = { true, INSTR_FMT_IX, 0 }, - [PUSH_NULL] = { true, INSTR_FMT_IX, HAS_PURE_FLAG }, - [RAISE_VARARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [RESERVED] = { true, INSTR_FMT_IX, 0 }, - [RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG }, - [RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG }, - [RETURN_GENERATOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG }, - [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [SETUP_ANNOTATIONS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [SET_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [SET_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_ATTR] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [STORE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG }, - [STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG }, - [STORE_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG }, - [STORE_FAST_STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG }, - [STORE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_SUBSCR] = { true, INSTR_FMT_IXC, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_SUBSCR_DICT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [STORE_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [SWAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG }, - [TO_BOOL] = { true, INSTR_FMT_IXC00, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [TO_BOOL_ALWAYS_TRUE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [TO_BOOL_BOOL] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG }, - [TO_BOOL_INT] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [TO_BOOL_LIST] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG }, - [TO_BOOL_NONE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG }, - [TO_BOOL_STR] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [UNARY_INVERT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [UNARY_NEGATIVE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [UNARY_NOT] = { true, INSTR_FMT_IX, HAS_PURE_FLAG }, - [UNPACK_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [UNPACK_SEQUENCE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [UNPACK_SEQUENCE_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [UNPACK_SEQUENCE_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG }, - [UNPACK_SEQUENCE_TWO_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG }, - [WITH_EXCEPT_START] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [ANNOTATIONS_PLACEHOLDER] = { true, -1, HAS_PURE_FLAG }, - [JUMP] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_IF_FALSE] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_IF_TRUE] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG }, - [JUMP_NO_INTERRUPT] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [LOAD_CLOSURE] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG }, - [POP_BLOCK] = { true, -1, HAS_PURE_FLAG }, - [SETUP_CLEANUP] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG }, - [SETUP_FINALLY] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG }, - [SETUP_WITH] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG }, - [STORE_FAST_MAYBE_NULL] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG }, -}; -#endif - -#define MAX_UOP_PER_EXPANSION 10 -struct opcode_macro_expansion { - int nuops; - struct { int16_t uop; int8_t size; int8_t offset; } uops[MAX_UOP_PER_EXPANSION]; -}; -extern const struct opcode_macro_expansion _PyOpcode_macro_expansion[256]; - -#ifdef NEED_OPCODE_METADATA -const struct opcode_macro_expansion -_PyOpcode_macro_expansion[256] = { - [BINARY_OP] = { .nuops = 1, .uops = { { _BINARY_OP, OPARG_SIMPLE, 4 } } }, - [BINARY_OP_ADD_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_FLOAT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_ADD_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_ADD_UNICODE] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_ADD_UNICODE, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_EXTEND] = { .nuops = 2, .uops = { { _GUARD_BINARY_OP_EXTEND, 4, 1 }, { _BINARY_OP_EXTEND, 4, 1 } } }, - [BINARY_OP_INPLACE_ADD_UNICODE] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_INPLACE_ADD_UNICODE, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_MULTIPLY_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_MULTIPLY_FLOAT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_MULTIPLY_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_MULTIPLY_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_DICT] = { .nuops = 2, .uops = { { _GUARD_NOS_DICT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_DICT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_GETITEM] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 5 }, { _BINARY_OP_SUBSCR_CHECK_FUNC, OPARG_SIMPLE, 5 }, { _BINARY_OP_SUBSCR_INIT_CALL, OPARG_SIMPLE, 5 }, { _PUSH_FRAME, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_LIST_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_LIST_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_LIST_SLICE] = { .nuops = 3, .uops = { { _GUARD_TOS_SLICE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_LIST_SLICE, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_STR_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_STR_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBSCR_TUPLE_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_TUPLE, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBSCR_TUPLE_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBTRACT_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBTRACT_FLOAT, OPARG_SIMPLE, 5 } } }, - [BINARY_OP_SUBTRACT_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _BINARY_OP_SUBTRACT_INT, OPARG_SIMPLE, 5 } } }, - [BINARY_SLICE] = { .nuops = 1, .uops = { { _BINARY_SLICE, OPARG_SIMPLE, 0 } } }, - [BUILD_INTERPOLATION] = { .nuops = 1, .uops = { { _BUILD_INTERPOLATION, OPARG_SIMPLE, 0 } } }, - [BUILD_LIST] = { .nuops = 1, .uops = { { _BUILD_LIST, OPARG_SIMPLE, 0 } } }, - [BUILD_MAP] = { .nuops = 1, .uops = { { _BUILD_MAP, OPARG_SIMPLE, 0 } } }, - [BUILD_SET] = { .nuops = 1, .uops = { { _BUILD_SET, OPARG_SIMPLE, 0 } } }, - [BUILD_SLICE] = { .nuops = 1, .uops = { { _BUILD_SLICE, OPARG_SIMPLE, 0 } } }, - [BUILD_STRING] = { .nuops = 1, .uops = { { _BUILD_STRING, OPARG_SIMPLE, 0 } } }, - [BUILD_TEMPLATE] = { .nuops = 1, .uops = { { _BUILD_TEMPLATE, OPARG_SIMPLE, 0 } } }, - [BUILD_TUPLE] = { .nuops = 1, .uops = { { _BUILD_TUPLE, OPARG_SIMPLE, 0 } } }, - [CALL_ALLOC_AND_ENTER_INIT] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_AND_ALLOCATE_OBJECT, 2, 1 }, { _CREATE_INIT_FRAME, OPARG_SIMPLE, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 10, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_BOUND_METHOD_GENERAL] = { .nuops = 7, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION, 2, 1 }, { _EXPAND_METHOD, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_BUILTIN_CLASS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_CLASS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_BUILTIN_O] = { .nuops = 2, .uops = { { _CALL_BUILTIN_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_1, OPARG_SIMPLE, 0 } } }, - [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_2, OPARG_SIMPLE, 0 } } }, - [CALL_ISINSTANCE] = { .nuops = 1, .uops = { { _CALL_ISINSTANCE, OPARG_SIMPLE, 3 } } }, - [CALL_KW_BOUND_METHOD] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION_KW, 2, 1 }, { _EXPAND_METHOD_KW, OPARG_SIMPLE, 3 }, { _PY_FRAME_KW, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_KW_NON_PY] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE_KW, OPARG_SIMPLE, 3 }, { _CALL_KW_NON_PY, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_KW_PY] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION_KW, 2, 1 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_KW, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_LEN] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_LEN, OPARG_SIMPLE, 3 }, { _CALL_LEN, OPARG_SIMPLE, 3 } } }, - [CALL_LIST_APPEND] = { .nuops = 1, .uops = { { _CALL_LIST_APPEND, OPARG_SIMPLE, 3 } } }, - [CALL_METHOD_DESCRIPTOR_FAST] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_NOARGS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_METHOD_DESCRIPTOR_O] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_NON_PY_GENERAL] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE, OPARG_SIMPLE, 3 }, { _CALL_NON_PY_GENERAL, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_PY_EXACT_ARGS] = { .nuops = 8, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_PY_GENERAL] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } }, - [CALL_STR_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_STR_1, OPARG_SIMPLE, 3 }, { _CALL_STR_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_TUPLE_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TUPLE_1, OPARG_SIMPLE, 3 }, { _CALL_TUPLE_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } }, - [CALL_TYPE_1] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TYPE_1, OPARG_SIMPLE, 3 }, { _CALL_TYPE_1, OPARG_SIMPLE, 3 } } }, - [CHECK_EG_MATCH] = { .nuops = 1, .uops = { { _CHECK_EG_MATCH, OPARG_SIMPLE, 0 } } }, - [CHECK_EXC_MATCH] = { .nuops = 1, .uops = { { _CHECK_EXC_MATCH, OPARG_SIMPLE, 0 } } }, - [COMPARE_OP] = { .nuops = 1, .uops = { { _COMPARE_OP, OPARG_SIMPLE, 0 } } }, - [COMPARE_OP_FLOAT] = { .nuops = 3, .uops = { { _GUARD_TOS_FLOAT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_FLOAT, OPARG_SIMPLE, 0 }, { _COMPARE_OP_FLOAT, OPARG_SIMPLE, 1 } } }, - [COMPARE_OP_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_INT, OPARG_SIMPLE, 0 }, { _COMPARE_OP_INT, OPARG_SIMPLE, 1 } } }, - [COMPARE_OP_STR] = { .nuops = 3, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _GUARD_NOS_UNICODE, OPARG_SIMPLE, 0 }, { _COMPARE_OP_STR, OPARG_SIMPLE, 1 } } }, - [CONTAINS_OP] = { .nuops = 1, .uops = { { _CONTAINS_OP, OPARG_SIMPLE, 0 } } }, - [CONTAINS_OP_DICT] = { .nuops = 2, .uops = { { _GUARD_TOS_DICT, OPARG_SIMPLE, 0 }, { _CONTAINS_OP_DICT, OPARG_SIMPLE, 1 } } }, - [CONTAINS_OP_SET] = { .nuops = 2, .uops = { { _GUARD_TOS_ANY_SET, OPARG_SIMPLE, 0 }, { _CONTAINS_OP_SET, OPARG_SIMPLE, 1 } } }, - [CONVERT_VALUE] = { .nuops = 1, .uops = { { _CONVERT_VALUE, OPARG_SIMPLE, 0 } } }, - [COPY] = { .nuops = 1, .uops = { { _COPY, OPARG_SIMPLE, 0 } } }, - [COPY_FREE_VARS] = { .nuops = 1, .uops = { { _COPY_FREE_VARS, OPARG_SIMPLE, 0 } } }, - [DELETE_ATTR] = { .nuops = 1, .uops = { { _DELETE_ATTR, OPARG_SIMPLE, 0 } } }, - [DELETE_DEREF] = { .nuops = 1, .uops = { { _DELETE_DEREF, OPARG_SIMPLE, 0 } } }, - [DELETE_FAST] = { .nuops = 1, .uops = { { _DELETE_FAST, OPARG_SIMPLE, 0 } } }, - [DELETE_GLOBAL] = { .nuops = 1, .uops = { { _DELETE_GLOBAL, OPARG_SIMPLE, 0 } } }, - [DELETE_NAME] = { .nuops = 1, .uops = { { _DELETE_NAME, OPARG_SIMPLE, 0 } } }, - [DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, OPARG_SIMPLE, 0 } } }, - [DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, OPARG_SIMPLE, 0 } } }, - [DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, OPARG_SIMPLE, 0 } } }, - [END_FOR] = { .nuops = 1, .uops = { { _END_FOR, OPARG_SIMPLE, 0 } } }, - [END_SEND] = { .nuops = 1, .uops = { { _END_SEND, OPARG_SIMPLE, 0 } } }, - [EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, OPARG_SIMPLE, 0 } } }, - [FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, OPARG_SIMPLE, 0 } } }, - [FORMAT_WITH_SPEC] = { .nuops = 1, .uops = { { _FORMAT_WITH_SPEC, OPARG_SIMPLE, 0 } } }, - [FOR_ITER] = { .nuops = 1, .uops = { { _FOR_ITER, OPARG_REPLACED, 0 } } }, - [FOR_ITER_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _FOR_ITER_GEN_FRAME, OPARG_SIMPLE, 1 }, { _PUSH_FRAME, OPARG_SIMPLE, 1 } } }, - [FOR_ITER_LIST] = { .nuops = 3, .uops = { { _ITER_CHECK_LIST, OPARG_SIMPLE, 1 }, { _ITER_JUMP_LIST, OPARG_REPLACED, 1 }, { _ITER_NEXT_LIST, OPARG_REPLACED, 1 } } }, - [FOR_ITER_RANGE] = { .nuops = 3, .uops = { { _ITER_CHECK_RANGE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_RANGE, OPARG_REPLACED, 1 }, { _ITER_NEXT_RANGE, OPARG_SIMPLE, 1 } } }, - [FOR_ITER_TUPLE] = { .nuops = 3, .uops = { { _ITER_CHECK_TUPLE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_TUPLE, OPARG_REPLACED, 1 }, { _ITER_NEXT_TUPLE, OPARG_SIMPLE, 1 } } }, - [GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, OPARG_SIMPLE, 0 } } }, - [GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, OPARG_SIMPLE, 0 } } }, - [GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, OPARG_SIMPLE, 0 } } }, - [GET_ITER] = { .nuops = 1, .uops = { { _GET_ITER, OPARG_SIMPLE, 0 } } }, - [GET_LEN] = { .nuops = 1, .uops = { { _GET_LEN, OPARG_SIMPLE, 0 } } }, - [GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { _GET_YIELD_FROM_ITER, OPARG_SIMPLE, 0 } } }, - [IMPORT_FROM] = { .nuops = 1, .uops = { { _IMPORT_FROM, OPARG_SIMPLE, 0 } } }, - [IMPORT_NAME] = { .nuops = 1, .uops = { { _IMPORT_NAME, OPARG_SIMPLE, 0 } } }, - [IS_OP] = { .nuops = 1, .uops = { { _IS_OP, OPARG_SIMPLE, 0 } } }, - [LIST_APPEND] = { .nuops = 1, .uops = { { _LIST_APPEND, OPARG_SIMPLE, 0 } } }, - [LIST_EXTEND] = { .nuops = 1, .uops = { { _LIST_EXTEND, OPARG_SIMPLE, 0 } } }, - [LOAD_ATTR] = { .nuops = 1, .uops = { { _LOAD_ATTR, OPARG_SIMPLE, 8 } } }, - [LOAD_ATTR_CLASS] = { .nuops = 3, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { .nuops = 4, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _GUARD_TYPE_VERSION, 2, 3 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_INSTANCE_VALUE] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_MANAGED_OBJECT_HAS_VALUES, OPARG_SIMPLE, 3 }, { _LOAD_ATTR_INSTANCE_VALUE, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_METHOD_LAZY_DICT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_ATTR_METHOD_LAZY_DICT, 1, 3 }, { _LOAD_ATTR_METHOD_LAZY_DICT, 4, 5 } } }, - [LOAD_ATTR_METHOD_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_METHOD_NO_DICT, 4, 5 } } }, - [LOAD_ATTR_METHOD_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, OPARG_SIMPLE, 3 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_METHOD_WITH_VALUES, 4, 5 } } }, - [LOAD_ATTR_MODULE] = { .nuops = 3, .uops = { { _LOAD_ATTR_MODULE, 2, 1 }, { _LOAD_ATTR_MODULE, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_NONDESCRIPTOR_NO_DICT, 4, 5 } } }, - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, OPARG_SIMPLE, 3 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, 4, 5 } } }, - [LOAD_ATTR_PROPERTY] = { .nuops = 5, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_PROPERTY_FRAME, 4, 5 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 9 }, { _PUSH_FRAME, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_SLOT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_SLOT, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_ATTR_WITH_HINT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_WITH_HINT, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } }, - [LOAD_BUILD_CLASS] = { .nuops = 1, .uops = { { _LOAD_BUILD_CLASS, OPARG_SIMPLE, 0 } } }, - [LOAD_COMMON_CONSTANT] = { .nuops = 1, .uops = { { _LOAD_COMMON_CONSTANT, OPARG_SIMPLE, 0 } } }, - [LOAD_CONST_IMMORTAL] = { .nuops = 1, .uops = { { _LOAD_CONST_IMMORTAL, OPARG_SIMPLE, 0 } } }, - [LOAD_CONST_MORTAL] = { .nuops = 1, .uops = { { _LOAD_CONST_MORTAL, OPARG_SIMPLE, 0 } } }, - [LOAD_DEREF] = { .nuops = 1, .uops = { { _LOAD_DEREF, OPARG_SIMPLE, 0 } } }, - [LOAD_FAST] = { .nuops = 1, .uops = { { _LOAD_FAST, OPARG_SIMPLE, 0 } } }, - [LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { _LOAD_FAST_AND_CLEAR, OPARG_SIMPLE, 0 } } }, - [LOAD_FAST_BORROW] = { .nuops = 1, .uops = { { _LOAD_FAST_BORROW, OPARG_SIMPLE, 0 } } }, - [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = { .nuops = 2, .uops = { { _LOAD_FAST_BORROW, OPARG_TOP, 0 }, { _LOAD_FAST_BORROW, OPARG_BOTTOM, 0 } } }, - [LOAD_FAST_CHECK] = { .nuops = 1, .uops = { { _LOAD_FAST_CHECK, OPARG_SIMPLE, 0 } } }, - [LOAD_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _LOAD_FAST, OPARG_TOP, 0 }, { _LOAD_FAST, OPARG_BOTTOM, 0 } } }, - [LOAD_FROM_DICT_OR_DEREF] = { .nuops = 1, .uops = { { _LOAD_FROM_DICT_OR_DEREF, OPARG_SIMPLE, 0 } } }, - [LOAD_GLOBAL] = { .nuops = 2, .uops = { { _LOAD_GLOBAL, OPARG_SIMPLE, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 3 } } }, - [LOAD_GLOBAL_BUILTIN] = { .nuops = 4, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _LOAD_GLOBAL_BUILTINS, 1, 2 }, { _LOAD_GLOBAL_BUILTINS, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 4 } } }, - [LOAD_GLOBAL_MODULE] = { .nuops = 4, .uops = { { _NOP, OPARG_SIMPLE, 1 }, { _LOAD_GLOBAL_MODULE, 1, 1 }, { _LOAD_GLOBAL_MODULE, OPERAND1_1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 4 } } }, - [LOAD_LOCALS] = { .nuops = 1, .uops = { { _LOAD_LOCALS, OPARG_SIMPLE, 0 } } }, - [LOAD_NAME] = { .nuops = 1, .uops = { { _LOAD_NAME, OPARG_SIMPLE, 0 } } }, - [LOAD_SMALL_INT] = { .nuops = 1, .uops = { { _LOAD_SMALL_INT, OPARG_SIMPLE, 0 } } }, - [LOAD_SPECIAL] = { .nuops = 2, .uops = { { _INSERT_NULL, OPARG_SIMPLE, 0 }, { _LOAD_SPECIAL, OPARG_SIMPLE, 0 } } }, - [LOAD_SUPER_ATTR_ATTR] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_ATTR, OPARG_SIMPLE, 1 } } }, - [LOAD_SUPER_ATTR_METHOD] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_METHOD, OPARG_SIMPLE, 1 } } }, - [MAKE_CELL] = { .nuops = 1, .uops = { { _MAKE_CELL, OPARG_SIMPLE, 0 } } }, - [MAKE_FUNCTION] = { .nuops = 1, .uops = { { _MAKE_FUNCTION, OPARG_SIMPLE, 0 } } }, - [MAP_ADD] = { .nuops = 1, .uops = { { _MAP_ADD, OPARG_SIMPLE, 0 } } }, - [MATCH_CLASS] = { .nuops = 1, .uops = { { _MATCH_CLASS, OPARG_SIMPLE, 0 } } }, - [MATCH_KEYS] = { .nuops = 1, .uops = { { _MATCH_KEYS, OPARG_SIMPLE, 0 } } }, - [MATCH_MAPPING] = { .nuops = 1, .uops = { { _MATCH_MAPPING, OPARG_SIMPLE, 0 } } }, - [MATCH_SEQUENCE] = { .nuops = 1, .uops = { { _MATCH_SEQUENCE, OPARG_SIMPLE, 0 } } }, - [NOP] = { .nuops = 1, .uops = { { _NOP, OPARG_SIMPLE, 0 } } }, - [NOT_TAKEN] = { .nuops = 1, .uops = { { _NOP, OPARG_SIMPLE, 0 } } }, - [POP_EXCEPT] = { .nuops = 1, .uops = { { _POP_EXCEPT, OPARG_SIMPLE, 0 } } }, - [POP_ITER] = { .nuops = 1, .uops = { { _POP_TOP, OPARG_SIMPLE, 0 } } }, - [POP_JUMP_IF_FALSE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_FALSE, OPARG_REPLACED, 1 } } }, - [POP_JUMP_IF_NONE] = { .nuops = 2, .uops = { { _IS_NONE, OPARG_SIMPLE, 1 }, { _POP_JUMP_IF_TRUE, OPARG_REPLACED, 1 } } }, - [POP_JUMP_IF_NOT_NONE] = { .nuops = 2, .uops = { { _IS_NONE, OPARG_SIMPLE, 1 }, { _POP_JUMP_IF_FALSE, OPARG_REPLACED, 1 } } }, - [POP_JUMP_IF_TRUE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_TRUE, OPARG_REPLACED, 1 } } }, - [POP_TOP] = { .nuops = 1, .uops = { { _POP_TOP, OPARG_SIMPLE, 0 } } }, - [PUSH_EXC_INFO] = { .nuops = 1, .uops = { { _PUSH_EXC_INFO, OPARG_SIMPLE, 0 } } }, - [PUSH_NULL] = { .nuops = 1, .uops = { { _PUSH_NULL, OPARG_SIMPLE, 0 } } }, - [RESUME_CHECK] = { .nuops = 1, .uops = { { _RESUME_CHECK, OPARG_SIMPLE, 0 } } }, - [RETURN_GENERATOR] = { .nuops = 1, .uops = { { _RETURN_GENERATOR, OPARG_SIMPLE, 0 } } }, - [RETURN_VALUE] = { .nuops = 1, .uops = { { _RETURN_VALUE, OPARG_SIMPLE, 0 } } }, - [SEND_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _SEND_GEN_FRAME, OPARG_SIMPLE, 1 }, { _PUSH_FRAME, OPARG_SIMPLE, 1 } } }, - [SETUP_ANNOTATIONS] = { .nuops = 1, .uops = { { _SETUP_ANNOTATIONS, OPARG_SIMPLE, 0 } } }, - [SET_ADD] = { .nuops = 1, .uops = { { _SET_ADD, OPARG_SIMPLE, 0 } } }, - [SET_FUNCTION_ATTRIBUTE] = { .nuops = 1, .uops = { { _SET_FUNCTION_ATTRIBUTE, OPARG_SIMPLE, 0 } } }, - [SET_UPDATE] = { .nuops = 1, .uops = { { _SET_UPDATE, OPARG_SIMPLE, 0 } } }, - [STORE_ATTR] = { .nuops = 1, .uops = { { _STORE_ATTR, OPARG_SIMPLE, 3 } } }, - [STORE_ATTR_INSTANCE_VALUE] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION_AND_LOCK, 2, 1 }, { _GUARD_DORV_NO_DICT, OPARG_SIMPLE, 3 }, { _STORE_ATTR_INSTANCE_VALUE, 1, 3 } } }, - [STORE_ATTR_SLOT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _STORE_ATTR_SLOT, 1, 3 } } }, - [STORE_ATTR_WITH_HINT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _STORE_ATTR_WITH_HINT, 1, 3 } } }, - [STORE_DEREF] = { .nuops = 1, .uops = { { _STORE_DEREF, OPARG_SIMPLE, 0 } } }, - [STORE_FAST] = { .nuops = 1, .uops = { { _STORE_FAST, OPARG_SIMPLE, 0 } } }, - [STORE_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, OPARG_TOP, 0 }, { _LOAD_FAST, OPARG_BOTTOM, 0 } } }, - [STORE_FAST_STORE_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, OPARG_TOP, 0 }, { _STORE_FAST, OPARG_BOTTOM, 0 } } }, - [STORE_GLOBAL] = { .nuops = 1, .uops = { { _STORE_GLOBAL, OPARG_SIMPLE, 0 } } }, - [STORE_NAME] = { .nuops = 1, .uops = { { _STORE_NAME, OPARG_SIMPLE, 0 } } }, - [STORE_SLICE] = { .nuops = 1, .uops = { { _STORE_SLICE, OPARG_SIMPLE, 0 } } }, - [STORE_SUBSCR] = { .nuops = 1, .uops = { { _STORE_SUBSCR, OPARG_SIMPLE, 0 } } }, - [STORE_SUBSCR_DICT] = { .nuops = 2, .uops = { { _GUARD_NOS_DICT, OPARG_SIMPLE, 0 }, { _STORE_SUBSCR_DICT, OPARG_SIMPLE, 1 } } }, - [STORE_SUBSCR_LIST_INT] = { .nuops = 3, .uops = { { _GUARD_TOS_INT, OPARG_SIMPLE, 0 }, { _GUARD_NOS_LIST, OPARG_SIMPLE, 0 }, { _STORE_SUBSCR_LIST_INT, OPARG_SIMPLE, 1 } } }, - [SWAP] = { .nuops = 1, .uops = { { _SWAP, OPARG_SIMPLE, 0 } } }, - [TO_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL, OPARG_SIMPLE, 2 } } }, - [TO_BOOL_ALWAYS_TRUE] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _REPLACE_WITH_TRUE, OPARG_SIMPLE, 3 } } }, - [TO_BOOL_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL_BOOL, OPARG_SIMPLE, 3 } } }, - [TO_BOOL_INT] = { .nuops = 1, .uops = { { _TO_BOOL_INT, OPARG_SIMPLE, 3 } } }, - [TO_BOOL_LIST] = { .nuops = 2, .uops = { { _GUARD_TOS_LIST, OPARG_SIMPLE, 0 }, { _TO_BOOL_LIST, OPARG_SIMPLE, 3 } } }, - [TO_BOOL_NONE] = { .nuops = 1, .uops = { { _TO_BOOL_NONE, OPARG_SIMPLE, 3 } } }, - [TO_BOOL_STR] = { .nuops = 2, .uops = { { _GUARD_TOS_UNICODE, OPARG_SIMPLE, 0 }, { _TO_BOOL_STR, OPARG_SIMPLE, 3 } } }, - [UNARY_INVERT] = { .nuops = 1, .uops = { { _UNARY_INVERT, OPARG_SIMPLE, 0 } } }, - [UNARY_NEGATIVE] = { .nuops = 1, .uops = { { _UNARY_NEGATIVE, OPARG_SIMPLE, 0 } } }, - [UNARY_NOT] = { .nuops = 1, .uops = { { _UNARY_NOT, OPARG_SIMPLE, 0 } } }, - [UNPACK_EX] = { .nuops = 1, .uops = { { _UNPACK_EX, OPARG_SIMPLE, 0 } } }, - [UNPACK_SEQUENCE] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE, OPARG_SIMPLE, 0 } } }, - [UNPACK_SEQUENCE_LIST] = { .nuops = 2, .uops = { { _GUARD_TOS_LIST, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_LIST, OPARG_SIMPLE, 1 } } }, - [UNPACK_SEQUENCE_TUPLE] = { .nuops = 2, .uops = { { _GUARD_TOS_TUPLE, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_TUPLE, OPARG_SIMPLE, 1 } } }, - [UNPACK_SEQUENCE_TWO_TUPLE] = { .nuops = 2, .uops = { { _GUARD_TOS_TUPLE, OPARG_SIMPLE, 0 }, { _UNPACK_SEQUENCE_TWO_TUPLE, OPARG_SIMPLE, 1 } } }, - [WITH_EXCEPT_START] = { .nuops = 1, .uops = { { _WITH_EXCEPT_START, OPARG_SIMPLE, 0 } } }, - [YIELD_VALUE] = { .nuops = 1, .uops = { { _YIELD_VALUE, OPARG_SIMPLE, 0 } } }, -}; -#endif // NEED_OPCODE_METADATA - -extern const char *_PyOpcode_OpName[267]; -#ifdef NEED_OPCODE_METADATA -const char *_PyOpcode_OpName[267] = { - [ANNOTATIONS_PLACEHOLDER] = "ANNOTATIONS_PLACEHOLDER", - [BINARY_OP] = "BINARY_OP", - [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT", - [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT", - [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE", - [BINARY_OP_EXTEND] = "BINARY_OP_EXTEND", - [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE", - [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT", - [BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT", - [BINARY_OP_SUBSCR_DICT] = "BINARY_OP_SUBSCR_DICT", - [BINARY_OP_SUBSCR_GETITEM] = "BINARY_OP_SUBSCR_GETITEM", - [BINARY_OP_SUBSCR_LIST_INT] = "BINARY_OP_SUBSCR_LIST_INT", - [BINARY_OP_SUBSCR_LIST_SLICE] = "BINARY_OP_SUBSCR_LIST_SLICE", - [BINARY_OP_SUBSCR_STR_INT] = "BINARY_OP_SUBSCR_STR_INT", - [BINARY_OP_SUBSCR_TUPLE_INT] = "BINARY_OP_SUBSCR_TUPLE_INT", - [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT", - [BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT", - [BINARY_SLICE] = "BINARY_SLICE", - [BUILD_INTERPOLATION] = "BUILD_INTERPOLATION", - [BUILD_LIST] = "BUILD_LIST", - [BUILD_MAP] = "BUILD_MAP", - [BUILD_SET] = "BUILD_SET", - [BUILD_SLICE] = "BUILD_SLICE", - [BUILD_STRING] = "BUILD_STRING", - [BUILD_TEMPLATE] = "BUILD_TEMPLATE", - [BUILD_TUPLE] = "BUILD_TUPLE", - [CACHE] = "CACHE", - [CALL] = "CALL", - [CALL_ALLOC_AND_ENTER_INIT] = "CALL_ALLOC_AND_ENTER_INIT", - [CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS", - [CALL_BOUND_METHOD_GENERAL] = "CALL_BOUND_METHOD_GENERAL", - [CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS", - [CALL_BUILTIN_FAST] = "CALL_BUILTIN_FAST", - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS", - [CALL_BUILTIN_O] = "CALL_BUILTIN_O", - [CALL_FUNCTION_EX] = "CALL_FUNCTION_EX", - [CALL_INTRINSIC_1] = "CALL_INTRINSIC_1", - [CALL_INTRINSIC_2] = "CALL_INTRINSIC_2", - [CALL_ISINSTANCE] = "CALL_ISINSTANCE", - [CALL_KW] = "CALL_KW", - [CALL_KW_BOUND_METHOD] = "CALL_KW_BOUND_METHOD", - [CALL_KW_NON_PY] = "CALL_KW_NON_PY", - [CALL_KW_PY] = "CALL_KW_PY", - [CALL_LEN] = "CALL_LEN", - [CALL_LIST_APPEND] = "CALL_LIST_APPEND", - [CALL_METHOD_DESCRIPTOR_FAST] = "CALL_METHOD_DESCRIPTOR_FAST", - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - [CALL_METHOD_DESCRIPTOR_NOARGS] = "CALL_METHOD_DESCRIPTOR_NOARGS", - [CALL_METHOD_DESCRIPTOR_O] = "CALL_METHOD_DESCRIPTOR_O", - [CALL_NON_PY_GENERAL] = "CALL_NON_PY_GENERAL", - [CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS", - [CALL_PY_GENERAL] = "CALL_PY_GENERAL", - [CALL_STR_1] = "CALL_STR_1", - [CALL_TUPLE_1] = "CALL_TUPLE_1", - [CALL_TYPE_1] = "CALL_TYPE_1", - [CHECK_EG_MATCH] = "CHECK_EG_MATCH", - [CHECK_EXC_MATCH] = "CHECK_EXC_MATCH", - [CLEANUP_THROW] = "CLEANUP_THROW", - [COMPARE_OP] = "COMPARE_OP", - [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT", - [COMPARE_OP_INT] = "COMPARE_OP_INT", - [COMPARE_OP_STR] = "COMPARE_OP_STR", - [CONTAINS_OP] = "CONTAINS_OP", - [CONTAINS_OP_DICT] = "CONTAINS_OP_DICT", - [CONTAINS_OP_SET] = "CONTAINS_OP_SET", - [CONVERT_VALUE] = "CONVERT_VALUE", - [COPY] = "COPY", - [COPY_FREE_VARS] = "COPY_FREE_VARS", - [DELETE_ATTR] = "DELETE_ATTR", - [DELETE_DEREF] = "DELETE_DEREF", - [DELETE_FAST] = "DELETE_FAST", - [DELETE_GLOBAL] = "DELETE_GLOBAL", - [DELETE_NAME] = "DELETE_NAME", - [DELETE_SUBSCR] = "DELETE_SUBSCR", - [DICT_MERGE] = "DICT_MERGE", - [DICT_UPDATE] = "DICT_UPDATE", - [END_ASYNC_FOR] = "END_ASYNC_FOR", - [END_FOR] = "END_FOR", - [END_SEND] = "END_SEND", - [ENTER_EXECUTOR] = "ENTER_EXECUTOR", - [EXIT_INIT_CHECK] = "EXIT_INIT_CHECK", - [EXTENDED_ARG] = "EXTENDED_ARG", - [FORMAT_SIMPLE] = "FORMAT_SIMPLE", - [FORMAT_WITH_SPEC] = "FORMAT_WITH_SPEC", - [FOR_ITER] = "FOR_ITER", - [FOR_ITER_GEN] = "FOR_ITER_GEN", - [FOR_ITER_LIST] = "FOR_ITER_LIST", - [FOR_ITER_RANGE] = "FOR_ITER_RANGE", - [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE", - [GET_AITER] = "GET_AITER", - [GET_ANEXT] = "GET_ANEXT", - [GET_AWAITABLE] = "GET_AWAITABLE", - [GET_ITER] = "GET_ITER", - [GET_LEN] = "GET_LEN", - [GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER", - [IMPORT_FROM] = "IMPORT_FROM", - [IMPORT_NAME] = "IMPORT_NAME", - [INSTRUMENTED_CALL] = "INSTRUMENTED_CALL", - [INSTRUMENTED_CALL_FUNCTION_EX] = "INSTRUMENTED_CALL_FUNCTION_EX", - [INSTRUMENTED_CALL_KW] = "INSTRUMENTED_CALL_KW", - [INSTRUMENTED_END_ASYNC_FOR] = "INSTRUMENTED_END_ASYNC_FOR", - [INSTRUMENTED_END_FOR] = "INSTRUMENTED_END_FOR", - [INSTRUMENTED_END_SEND] = "INSTRUMENTED_END_SEND", - [INSTRUMENTED_FOR_ITER] = "INSTRUMENTED_FOR_ITER", - [INSTRUMENTED_INSTRUCTION] = "INSTRUMENTED_INSTRUCTION", - [INSTRUMENTED_JUMP_BACKWARD] = "INSTRUMENTED_JUMP_BACKWARD", - [INSTRUMENTED_JUMP_FORWARD] = "INSTRUMENTED_JUMP_FORWARD", - [INSTRUMENTED_LINE] = "INSTRUMENTED_LINE", - [INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR", - [INSTRUMENTED_NOT_TAKEN] = "INSTRUMENTED_NOT_TAKEN", - [INSTRUMENTED_POP_ITER] = "INSTRUMENTED_POP_ITER", - [INSTRUMENTED_POP_JUMP_IF_FALSE] = "INSTRUMENTED_POP_JUMP_IF_FALSE", - [INSTRUMENTED_POP_JUMP_IF_NONE] = "INSTRUMENTED_POP_JUMP_IF_NONE", - [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE", - [INSTRUMENTED_POP_JUMP_IF_TRUE] = "INSTRUMENTED_POP_JUMP_IF_TRUE", - [INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME", - [INSTRUMENTED_RETURN_VALUE] = "INSTRUMENTED_RETURN_VALUE", - [INSTRUMENTED_YIELD_VALUE] = "INSTRUMENTED_YIELD_VALUE", - [INTERPRETER_EXIT] = "INTERPRETER_EXIT", - [IS_OP] = "IS_OP", - [JUMP] = "JUMP", - [JUMP_BACKWARD] = "JUMP_BACKWARD", - [JUMP_BACKWARD_JIT] = "JUMP_BACKWARD_JIT", - [JUMP_BACKWARD_NO_INTERRUPT] = "JUMP_BACKWARD_NO_INTERRUPT", - [JUMP_BACKWARD_NO_JIT] = "JUMP_BACKWARD_NO_JIT", - [JUMP_FORWARD] = "JUMP_FORWARD", - [JUMP_IF_FALSE] = "JUMP_IF_FALSE", - [JUMP_IF_TRUE] = "JUMP_IF_TRUE", - [JUMP_NO_INTERRUPT] = "JUMP_NO_INTERRUPT", - [LIST_APPEND] = "LIST_APPEND", - [LIST_EXTEND] = "LIST_EXTEND", - [LOAD_ATTR] = "LOAD_ATTR", - [LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS", - [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK", - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", - [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE", - [LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT", - [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT", - [LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES", - [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE", - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", - [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY", - [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT", - [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT", - [LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS", - [LOAD_CLOSURE] = "LOAD_CLOSURE", - [LOAD_COMMON_CONSTANT] = "LOAD_COMMON_CONSTANT", - [LOAD_CONST] = "LOAD_CONST", - [LOAD_CONST_IMMORTAL] = "LOAD_CONST_IMMORTAL", - [LOAD_CONST_MORTAL] = "LOAD_CONST_MORTAL", - [LOAD_DEREF] = "LOAD_DEREF", - [LOAD_FAST] = "LOAD_FAST", - [LOAD_FAST_AND_CLEAR] = "LOAD_FAST_AND_CLEAR", - [LOAD_FAST_BORROW] = "LOAD_FAST_BORROW", - [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = "LOAD_FAST_BORROW_LOAD_FAST_BORROW", - [LOAD_FAST_CHECK] = "LOAD_FAST_CHECK", - [LOAD_FAST_LOAD_FAST] = "LOAD_FAST_LOAD_FAST", - [LOAD_FROM_DICT_OR_DEREF] = "LOAD_FROM_DICT_OR_DEREF", - [LOAD_FROM_DICT_OR_GLOBALS] = "LOAD_FROM_DICT_OR_GLOBALS", - [LOAD_GLOBAL] = "LOAD_GLOBAL", - [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN", - [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE", - [LOAD_LOCALS] = "LOAD_LOCALS", - [LOAD_NAME] = "LOAD_NAME", - [LOAD_SMALL_INT] = "LOAD_SMALL_INT", - [LOAD_SPECIAL] = "LOAD_SPECIAL", - [LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR", - [LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR", - [LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD", - [MAKE_CELL] = "MAKE_CELL", - [MAKE_FUNCTION] = "MAKE_FUNCTION", - [MAP_ADD] = "MAP_ADD", - [MATCH_CLASS] = "MATCH_CLASS", - [MATCH_KEYS] = "MATCH_KEYS", - [MATCH_MAPPING] = "MATCH_MAPPING", - [MATCH_SEQUENCE] = "MATCH_SEQUENCE", - [NOP] = "NOP", - [NOT_TAKEN] = "NOT_TAKEN", - [POP_BLOCK] = "POP_BLOCK", - [POP_EXCEPT] = "POP_EXCEPT", - [POP_ITER] = "POP_ITER", - [POP_JUMP_IF_FALSE] = "POP_JUMP_IF_FALSE", - [POP_JUMP_IF_NONE] = "POP_JUMP_IF_NONE", - [POP_JUMP_IF_NOT_NONE] = "POP_JUMP_IF_NOT_NONE", - [POP_JUMP_IF_TRUE] = "POP_JUMP_IF_TRUE", - [POP_TOP] = "POP_TOP", - [PUSH_EXC_INFO] = "PUSH_EXC_INFO", - [PUSH_NULL] = "PUSH_NULL", - [RAISE_VARARGS] = "RAISE_VARARGS", - [RERAISE] = "RERAISE", - [RESERVED] = "RESERVED", - [RESUME] = "RESUME", - [RESUME_CHECK] = "RESUME_CHECK", - [RETURN_GENERATOR] = "RETURN_GENERATOR", - [RETURN_VALUE] = "RETURN_VALUE", - [SEND] = "SEND", - [SEND_GEN] = "SEND_GEN", - [SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS", - [SETUP_CLEANUP] = "SETUP_CLEANUP", - [SETUP_FINALLY] = "SETUP_FINALLY", - [SETUP_WITH] = "SETUP_WITH", - [SET_ADD] = "SET_ADD", - [SET_FUNCTION_ATTRIBUTE] = "SET_FUNCTION_ATTRIBUTE", - [SET_UPDATE] = "SET_UPDATE", - [STORE_ATTR] = "STORE_ATTR", - [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE", - [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT", - [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT", - [STORE_DEREF] = "STORE_DEREF", - [STORE_FAST] = "STORE_FAST", - [STORE_FAST_LOAD_FAST] = "STORE_FAST_LOAD_FAST", - [STORE_FAST_MAYBE_NULL] = "STORE_FAST_MAYBE_NULL", - [STORE_FAST_STORE_FAST] = "STORE_FAST_STORE_FAST", - [STORE_GLOBAL] = "STORE_GLOBAL", - [STORE_NAME] = "STORE_NAME", - [STORE_SLICE] = "STORE_SLICE", - [STORE_SUBSCR] = "STORE_SUBSCR", - [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT", - [STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT", - [SWAP] = "SWAP", - [TO_BOOL] = "TO_BOOL", - [TO_BOOL_ALWAYS_TRUE] = "TO_BOOL_ALWAYS_TRUE", - [TO_BOOL_BOOL] = "TO_BOOL_BOOL", - [TO_BOOL_INT] = "TO_BOOL_INT", - [TO_BOOL_LIST] = "TO_BOOL_LIST", - [TO_BOOL_NONE] = "TO_BOOL_NONE", - [TO_BOOL_STR] = "TO_BOOL_STR", - [UNARY_INVERT] = "UNARY_INVERT", - [UNARY_NEGATIVE] = "UNARY_NEGATIVE", - [UNARY_NOT] = "UNARY_NOT", - [UNPACK_EX] = "UNPACK_EX", - [UNPACK_SEQUENCE] = "UNPACK_SEQUENCE", - [UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST", - [UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE", - [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE", - [WITH_EXCEPT_START] = "WITH_EXCEPT_START", - [YIELD_VALUE] = "YIELD_VALUE", -}; -#endif - -extern const uint8_t _PyOpcode_Caches[256]; -#ifdef NEED_OPCODE_METADATA -const uint8_t _PyOpcode_Caches[256] = { - [TO_BOOL] = 3, - [STORE_SUBSCR] = 1, - [SEND] = 1, - [UNPACK_SEQUENCE] = 1, - [STORE_ATTR] = 4, - [LOAD_GLOBAL] = 4, - [LOAD_SUPER_ATTR] = 1, - [LOAD_ATTR] = 9, - [COMPARE_OP] = 1, - [CONTAINS_OP] = 1, - [JUMP_BACKWARD] = 1, - [POP_JUMP_IF_TRUE] = 1, - [POP_JUMP_IF_FALSE] = 1, - [POP_JUMP_IF_NONE] = 1, - [POP_JUMP_IF_NOT_NONE] = 1, - [FOR_ITER] = 1, - [CALL] = 3, - [CALL_KW] = 3, - [BINARY_OP] = 5, -}; -#endif - -extern const uint8_t _PyOpcode_Deopt[256]; -#ifdef NEED_OPCODE_METADATA -const uint8_t _PyOpcode_Deopt[256] = { - [121] = 121, - [122] = 122, - [123] = 123, - [124] = 124, - [125] = 125, - [126] = 126, - [127] = 127, - [212] = 212, - [213] = 213, - [214] = 214, - [215] = 215, - [216] = 216, - [217] = 217, - [218] = 218, - [219] = 219, - [220] = 220, - [221] = 221, - [222] = 222, - [223] = 223, - [224] = 224, - [225] = 225, - [226] = 226, - [227] = 227, - [228] = 228, - [229] = 229, - [230] = 230, - [231] = 231, - [232] = 232, - [233] = 233, - [BINARY_OP] = BINARY_OP, - [BINARY_OP_ADD_FLOAT] = BINARY_OP, - [BINARY_OP_ADD_INT] = BINARY_OP, - [BINARY_OP_ADD_UNICODE] = BINARY_OP, - [BINARY_OP_EXTEND] = BINARY_OP, - [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP, - [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP, - [BINARY_OP_MULTIPLY_INT] = BINARY_OP, - [BINARY_OP_SUBSCR_DICT] = BINARY_OP, - [BINARY_OP_SUBSCR_GETITEM] = BINARY_OP, - [BINARY_OP_SUBSCR_LIST_INT] = BINARY_OP, - [BINARY_OP_SUBSCR_LIST_SLICE] = BINARY_OP, - [BINARY_OP_SUBSCR_STR_INT] = BINARY_OP, - [BINARY_OP_SUBSCR_TUPLE_INT] = BINARY_OP, - [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP, - [BINARY_OP_SUBTRACT_INT] = BINARY_OP, - [BINARY_SLICE] = BINARY_SLICE, - [BUILD_INTERPOLATION] = BUILD_INTERPOLATION, - [BUILD_LIST] = BUILD_LIST, - [BUILD_MAP] = BUILD_MAP, - [BUILD_SET] = BUILD_SET, - [BUILD_SLICE] = BUILD_SLICE, - [BUILD_STRING] = BUILD_STRING, - [BUILD_TEMPLATE] = BUILD_TEMPLATE, - [BUILD_TUPLE] = BUILD_TUPLE, - [CACHE] = CACHE, - [CALL] = CALL, - [CALL_ALLOC_AND_ENTER_INIT] = CALL, - [CALL_BOUND_METHOD_EXACT_ARGS] = CALL, - [CALL_BOUND_METHOD_GENERAL] = CALL, - [CALL_BUILTIN_CLASS] = CALL, - [CALL_BUILTIN_FAST] = CALL, - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL, - [CALL_BUILTIN_O] = CALL, - [CALL_FUNCTION_EX] = CALL_FUNCTION_EX, - [CALL_INTRINSIC_1] = CALL_INTRINSIC_1, - [CALL_INTRINSIC_2] = CALL_INTRINSIC_2, - [CALL_ISINSTANCE] = CALL, - [CALL_KW] = CALL_KW, - [CALL_KW_BOUND_METHOD] = CALL_KW, - [CALL_KW_NON_PY] = CALL_KW, - [CALL_KW_PY] = CALL_KW, - [CALL_LEN] = CALL, - [CALL_LIST_APPEND] = CALL, - [CALL_METHOD_DESCRIPTOR_FAST] = CALL, - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL, - [CALL_METHOD_DESCRIPTOR_NOARGS] = CALL, - [CALL_METHOD_DESCRIPTOR_O] = CALL, - [CALL_NON_PY_GENERAL] = CALL, - [CALL_PY_EXACT_ARGS] = CALL, - [CALL_PY_GENERAL] = CALL, - [CALL_STR_1] = CALL, - [CALL_TUPLE_1] = CALL, - [CALL_TYPE_1] = CALL, - [CHECK_EG_MATCH] = CHECK_EG_MATCH, - [CHECK_EXC_MATCH] = CHECK_EXC_MATCH, - [CLEANUP_THROW] = CLEANUP_THROW, - [COMPARE_OP] = COMPARE_OP, - [COMPARE_OP_FLOAT] = COMPARE_OP, - [COMPARE_OP_INT] = COMPARE_OP, - [COMPARE_OP_STR] = COMPARE_OP, - [CONTAINS_OP] = CONTAINS_OP, - [CONTAINS_OP_DICT] = CONTAINS_OP, - [CONTAINS_OP_SET] = CONTAINS_OP, - [CONVERT_VALUE] = CONVERT_VALUE, - [COPY] = COPY, - [COPY_FREE_VARS] = COPY_FREE_VARS, - [DELETE_ATTR] = DELETE_ATTR, - [DELETE_DEREF] = DELETE_DEREF, - [DELETE_FAST] = DELETE_FAST, - [DELETE_GLOBAL] = DELETE_GLOBAL, - [DELETE_NAME] = DELETE_NAME, - [DELETE_SUBSCR] = DELETE_SUBSCR, - [DICT_MERGE] = DICT_MERGE, - [DICT_UPDATE] = DICT_UPDATE, - [END_ASYNC_FOR] = END_ASYNC_FOR, - [END_FOR] = END_FOR, - [END_SEND] = END_SEND, - [ENTER_EXECUTOR] = ENTER_EXECUTOR, - [EXIT_INIT_CHECK] = EXIT_INIT_CHECK, - [EXTENDED_ARG] = EXTENDED_ARG, - [FORMAT_SIMPLE] = FORMAT_SIMPLE, - [FORMAT_WITH_SPEC] = FORMAT_WITH_SPEC, - [FOR_ITER] = FOR_ITER, - [FOR_ITER_GEN] = FOR_ITER, - [FOR_ITER_LIST] = FOR_ITER, - [FOR_ITER_RANGE] = FOR_ITER, - [FOR_ITER_TUPLE] = FOR_ITER, - [GET_AITER] = GET_AITER, - [GET_ANEXT] = GET_ANEXT, - [GET_AWAITABLE] = GET_AWAITABLE, - [GET_ITER] = GET_ITER, - [GET_LEN] = GET_LEN, - [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER, - [IMPORT_FROM] = IMPORT_FROM, - [IMPORT_NAME] = IMPORT_NAME, - [INSTRUMENTED_CALL] = INSTRUMENTED_CALL, - [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX, - [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW, - [INSTRUMENTED_END_ASYNC_FOR] = INSTRUMENTED_END_ASYNC_FOR, - [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR, - [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND, - [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER, - [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION, - [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD, - [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD, - [INSTRUMENTED_LINE] = INSTRUMENTED_LINE, - [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR, - [INSTRUMENTED_NOT_TAKEN] = INSTRUMENTED_NOT_TAKEN, - [INSTRUMENTED_POP_ITER] = INSTRUMENTED_POP_ITER, - [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE, - [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE, - [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE, - [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE, - [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME, - [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE, - [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE, - [INTERPRETER_EXIT] = INTERPRETER_EXIT, - [IS_OP] = IS_OP, - [JUMP_BACKWARD] = JUMP_BACKWARD, - [JUMP_BACKWARD_JIT] = JUMP_BACKWARD, - [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT, - [JUMP_BACKWARD_NO_JIT] = JUMP_BACKWARD, - [JUMP_FORWARD] = JUMP_FORWARD, - [LIST_APPEND] = LIST_APPEND, - [LIST_EXTEND] = LIST_EXTEND, - [LOAD_ATTR] = LOAD_ATTR, - [LOAD_ATTR_CLASS] = LOAD_ATTR, - [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = LOAD_ATTR, - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR, - [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR, - [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR, - [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR, - [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR, - [LOAD_ATTR_MODULE] = LOAD_ATTR, - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = LOAD_ATTR, - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = LOAD_ATTR, - [LOAD_ATTR_PROPERTY] = LOAD_ATTR, - [LOAD_ATTR_SLOT] = LOAD_ATTR, - [LOAD_ATTR_WITH_HINT] = LOAD_ATTR, - [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS, - [LOAD_COMMON_CONSTANT] = LOAD_COMMON_CONSTANT, - [LOAD_CONST] = LOAD_CONST, - [LOAD_CONST_IMMORTAL] = LOAD_CONST, - [LOAD_CONST_MORTAL] = LOAD_CONST, - [LOAD_DEREF] = LOAD_DEREF, - [LOAD_FAST] = LOAD_FAST, - [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR, - [LOAD_FAST_BORROW] = LOAD_FAST_BORROW, - [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = LOAD_FAST_BORROW_LOAD_FAST_BORROW, - [LOAD_FAST_CHECK] = LOAD_FAST_CHECK, - [LOAD_FAST_LOAD_FAST] = LOAD_FAST_LOAD_FAST, - [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF, - [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS, - [LOAD_GLOBAL] = LOAD_GLOBAL, - [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL, - [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL, - [LOAD_LOCALS] = LOAD_LOCALS, - [LOAD_NAME] = LOAD_NAME, - [LOAD_SMALL_INT] = LOAD_SMALL_INT, - [LOAD_SPECIAL] = LOAD_SPECIAL, - [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR, - [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR, - [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR, - [MAKE_CELL] = MAKE_CELL, - [MAKE_FUNCTION] = MAKE_FUNCTION, - [MAP_ADD] = MAP_ADD, - [MATCH_CLASS] = MATCH_CLASS, - [MATCH_KEYS] = MATCH_KEYS, - [MATCH_MAPPING] = MATCH_MAPPING, - [MATCH_SEQUENCE] = MATCH_SEQUENCE, - [NOP] = NOP, - [NOT_TAKEN] = NOT_TAKEN, - [POP_EXCEPT] = POP_EXCEPT, - [POP_ITER] = POP_ITER, - [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE, - [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE, - [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE, - [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE, - [POP_TOP] = POP_TOP, - [PUSH_EXC_INFO] = PUSH_EXC_INFO, - [PUSH_NULL] = PUSH_NULL, - [RAISE_VARARGS] = RAISE_VARARGS, - [RERAISE] = RERAISE, - [RESERVED] = RESERVED, - [RESUME] = RESUME, - [RESUME_CHECK] = RESUME, - [RETURN_GENERATOR] = RETURN_GENERATOR, - [RETURN_VALUE] = RETURN_VALUE, - [SEND] = SEND, - [SEND_GEN] = SEND, - [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS, - [SET_ADD] = SET_ADD, - [SET_FUNCTION_ATTRIBUTE] = SET_FUNCTION_ATTRIBUTE, - [SET_UPDATE] = SET_UPDATE, - [STORE_ATTR] = STORE_ATTR, - [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR, - [STORE_ATTR_SLOT] = STORE_ATTR, - [STORE_ATTR_WITH_HINT] = STORE_ATTR, - [STORE_DEREF] = STORE_DEREF, - [STORE_FAST] = STORE_FAST, - [STORE_FAST_LOAD_FAST] = STORE_FAST_LOAD_FAST, - [STORE_FAST_STORE_FAST] = STORE_FAST_STORE_FAST, - [STORE_GLOBAL] = STORE_GLOBAL, - [STORE_NAME] = STORE_NAME, - [STORE_SLICE] = STORE_SLICE, - [STORE_SUBSCR] = STORE_SUBSCR, - [STORE_SUBSCR_DICT] = STORE_SUBSCR, - [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR, - [SWAP] = SWAP, - [TO_BOOL] = TO_BOOL, - [TO_BOOL_ALWAYS_TRUE] = TO_BOOL, - [TO_BOOL_BOOL] = TO_BOOL, - [TO_BOOL_INT] = TO_BOOL, - [TO_BOOL_LIST] = TO_BOOL, - [TO_BOOL_NONE] = TO_BOOL, - [TO_BOOL_STR] = TO_BOOL, - [UNARY_INVERT] = UNARY_INVERT, - [UNARY_NEGATIVE] = UNARY_NEGATIVE, - [UNARY_NOT] = UNARY_NOT, - [UNPACK_EX] = UNPACK_EX, - [UNPACK_SEQUENCE] = UNPACK_SEQUENCE, - [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE, - [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE, - [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE, - [WITH_EXCEPT_START] = WITH_EXCEPT_START, - [YIELD_VALUE] = YIELD_VALUE, -}; - -#endif // NEED_OPCODE_METADATA - -#define EXTRA_CASES \ - case 121: \ - case 122: \ - case 123: \ - case 124: \ - case 125: \ - case 126: \ - case 127: \ - case 212: \ - case 213: \ - case 214: \ - case 215: \ - case 216: \ - case 217: \ - case 218: \ - case 219: \ - case 220: \ - case 221: \ - case 222: \ - case 223: \ - case 224: \ - case 225: \ - case 226: \ - case 227: \ - case 228: \ - case 229: \ - case 230: \ - case 231: \ - case 232: \ - case 233: \ - ; -struct pseudo_targets { - uint8_t as_sequence; - uint8_t targets[4]; -}; -extern const struct pseudo_targets _PyOpcode_PseudoTargets[11]; -#ifdef NEED_OPCODE_METADATA -const struct pseudo_targets _PyOpcode_PseudoTargets[11] = { - [LOAD_CLOSURE-256] = { 0, { LOAD_FAST, 0, 0, 0 } }, - [STORE_FAST_MAYBE_NULL-256] = { 0, { STORE_FAST, 0, 0, 0 } }, - [ANNOTATIONS_PLACEHOLDER-256] = { 0, { NOP, 0, 0, 0 } }, - [JUMP-256] = { 0, { JUMP_FORWARD, JUMP_BACKWARD, 0, 0 } }, - [JUMP_NO_INTERRUPT-256] = { 0, { JUMP_FORWARD, JUMP_BACKWARD_NO_INTERRUPT, 0, 0 } }, - [JUMP_IF_FALSE-256] = { 1, { COPY, TO_BOOL, POP_JUMP_IF_FALSE, 0 } }, - [JUMP_IF_TRUE-256] = { 1, { COPY, TO_BOOL, POP_JUMP_IF_TRUE, 0 } }, - [SETUP_FINALLY-256] = { 0, { NOP, 0, 0, 0 } }, - [SETUP_CLEANUP-256] = { 0, { NOP, 0, 0, 0 } }, - [SETUP_WITH-256] = { 0, { NOP, 0, 0, 0 } }, - [POP_BLOCK-256] = { 0, { NOP, 0, 0, 0 } }, -}; - -#endif // NEED_OPCODE_METADATA -static inline bool -is_pseudo_target(int pseudo, int target) { - if (pseudo < 256 || pseudo >= 267) { - return false; - } - for (int i = 0; _PyOpcode_PseudoTargets[pseudo-256].targets[i]; i++) { - if (_PyOpcode_PseudoTargets[pseudo-256].targets[i] == target) return true; - } - return false; -} - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CORE_OPCODE_METADATA_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_opcode_utils.h b/Python314_4_x86_Template/include/internal/pycore_opcode_utils.h deleted file mode 100644 index 79a1a2425..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_opcode_utils.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef Py_INTERNAL_OPCODE_UTILS_H -#define Py_INTERNAL_OPCODE_UTILS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#define MAX_REAL_OPCODE 254 - -#define IS_WITHIN_OPCODE_RANGE(opcode) \ - (((opcode) >= 0 && (opcode) <= MAX_REAL_OPCODE) || \ - IS_PSEUDO_INSTR(opcode)) - -#define IS_BLOCK_PUSH_OPCODE(opcode) \ - ((opcode) == SETUP_FINALLY || \ - (opcode) == SETUP_WITH || \ - (opcode) == SETUP_CLEANUP) - -#define HAS_TARGET(opcode) \ - (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode)) - -/* opcodes that must be last in the basicblock */ -#define IS_TERMINATOR_OPCODE(opcode) \ - (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode)) - -/* opcodes which are not emitted in codegen stage, only by the assembler */ -#define IS_ASSEMBLER_OPCODE(opcode) \ - ((opcode) == JUMP_FORWARD || \ - (opcode) == JUMP_BACKWARD || \ - (opcode) == JUMP_BACKWARD_NO_INTERRUPT) - -#define IS_BACKWARDS_JUMP_OPCODE(opcode) \ - ((opcode) == JUMP_BACKWARD || \ - (opcode) == JUMP_BACKWARD_NO_INTERRUPT) - -#define IS_UNCONDITIONAL_JUMP_OPCODE(opcode) \ - ((opcode) == JUMP || \ - (opcode) == JUMP_NO_INTERRUPT || \ - (opcode) == JUMP_FORWARD || \ - (opcode) == JUMP_BACKWARD || \ - (opcode) == JUMP_BACKWARD_NO_INTERRUPT) - -#define IS_CONDITIONAL_JUMP_OPCODE(opcode) \ - ((opcode) == POP_JUMP_IF_FALSE || \ - (opcode) == POP_JUMP_IF_TRUE || \ - (opcode) == POP_JUMP_IF_NONE || \ - (opcode) == POP_JUMP_IF_NOT_NONE) - -#define IS_SCOPE_EXIT_OPCODE(opcode) \ - ((opcode) == RETURN_VALUE || \ - (opcode) == RAISE_VARARGS || \ - (opcode) == RERAISE) - -#define IS_RETURN_OPCODE(opcode) \ - (opcode == RETURN_VALUE) -#define IS_RAISE_OPCODE(opcode) \ - (opcode == RAISE_VARARGS || opcode == RERAISE) - - -/* Flags used in the oparg for MAKE_FUNCTION */ -#define MAKE_FUNCTION_DEFAULTS 0x01 -#define MAKE_FUNCTION_KWDEFAULTS 0x02 -#define MAKE_FUNCTION_ANNOTATIONS 0x04 -#define MAKE_FUNCTION_CLOSURE 0x08 -#define MAKE_FUNCTION_ANNOTATE 0x10 - -/* Values used as the oparg for LOAD_COMMON_CONSTANT */ -#define CONSTANT_ASSERTIONERROR 0 -#define CONSTANT_NOTIMPLEMENTEDERROR 1 -#define CONSTANT_BUILTIN_TUPLE 2 -#define CONSTANT_BUILTIN_ALL 3 -#define CONSTANT_BUILTIN_ANY 4 -#define NUM_COMMON_CONSTANTS 5 - -/* Values used in the oparg for RESUME */ -#define RESUME_AT_FUNC_START 0 -#define RESUME_AFTER_YIELD 1 -#define RESUME_AFTER_YIELD_FROM 2 -#define RESUME_AFTER_AWAIT 3 - -#define RESUME_OPARG_LOCATION_MASK 0x3 -#define RESUME_OPARG_DEPTH1_MASK 0x4 - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_OPCODE_UTILS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_optimizer.h b/Python314_4_x86_Template/include/internal/pycore_optimizer.h deleted file mode 100644 index d36747269..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_optimizer.h +++ /dev/null @@ -1,318 +0,0 @@ -#ifndef Py_INTERNAL_OPTIMIZER_H -#define Py_INTERNAL_OPTIMIZER_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_typedefs.h" // _PyInterpreterFrame -#include "pycore_uop_ids.h" -#include <stdbool.h> - - -typedef struct _PyExecutorLinkListNode { - struct _PyExecutorObject *next; - struct _PyExecutorObject *previous; -} _PyExecutorLinkListNode; - - -/* Bloom filter with m = 256 - * https://en.wikipedia.org/wiki/Bloom_filter */ -#define _Py_BLOOM_FILTER_WORDS 8 - -typedef struct { - uint32_t bits[_Py_BLOOM_FILTER_WORDS]; -} _PyBloomFilter; - -typedef struct { - uint8_t opcode; - uint8_t oparg; - uint8_t valid:1; - uint8_t linked:1; - uint8_t chain_depth:6; // Must be big enough for MAX_CHAIN_DEPTH - 1. - bool warm; - int index; // Index of ENTER_EXECUTOR (if code isn't NULL, below). - _PyBloomFilter bloom; - _PyExecutorLinkListNode links; - PyCodeObject *code; // Weak (NULL if no corresponding ENTER_EXECUTOR). -} _PyVMData; - -/* Depending on the format, - * the 32 bits between the oparg and operand are: - * UOP_FORMAT_TARGET: - * uint32_t target; - * UOP_FORMAT_JUMP - * uint16_t jump_target; - * uint16_t error_target; - */ -typedef struct { - uint16_t opcode:15; - uint16_t format:1; - uint16_t oparg; - union { - uint32_t target; - struct { - uint16_t jump_target; - uint16_t error_target; - }; - }; - uint64_t operand0; // A cache entry - uint64_t operand1; -#ifdef Py_STATS - uint64_t execution_count; -#endif -} _PyUOpInstruction; - -typedef struct { - uint32_t target; - _Py_BackoffCounter temperature; - struct _PyExecutorObject *executor; -} _PyExitData; - -typedef struct _PyExecutorObject { - PyObject_VAR_HEAD - const _PyUOpInstruction *trace; - _PyVMData vm_data; /* Used by the VM, but opaque to the optimizer */ - uint32_t exit_count; - uint32_t code_size; - size_t jit_size; - void *jit_code; - void *jit_side_entry; - _PyExitData exits[1]; -} _PyExecutorObject; - -/* If pending deletion list gets large enough, then scan, - * and free any executors that aren't executing - * i.e. any that aren't a thread's current_executor. */ -#define EXECUTOR_DELETE_LIST_MAX 100 - -// Export for '_opcode' shared extension (JIT compiler). -PyAPI_FUNC(_PyExecutorObject*) _Py_GetExecutor(PyCodeObject *code, int offset); - -void _Py_ExecutorInit(_PyExecutorObject *, const _PyBloomFilter *); -void _Py_ExecutorDetach(_PyExecutorObject *); -void _Py_BloomFilter_Init(_PyBloomFilter *); -void _Py_BloomFilter_Add(_PyBloomFilter *bloom, void *obj); -PyAPI_FUNC(void) _Py_Executor_DependsOn(_PyExecutorObject *executor, void *obj); - -#define _Py_MAX_ALLOWED_BUILTINS_MODIFICATIONS 3 -#define _Py_MAX_ALLOWED_GLOBALS_MODIFICATIONS 6 - -#ifdef _Py_TIER2 -PyAPI_FUNC(void) _Py_Executors_InvalidateDependency(PyInterpreterState *interp, void *obj, int is_invalidation); -PyAPI_FUNC(void) _Py_Executors_InvalidateAll(PyInterpreterState *interp, int is_invalidation); -PyAPI_FUNC(void) _Py_Executors_InvalidateCold(PyInterpreterState *interp); - -#else -# define _Py_Executors_InvalidateDependency(A, B, C) ((void)0) -# define _Py_Executors_InvalidateAll(A, B) ((void)0) -# define _Py_Executors_InvalidateCold(A) ((void)0) - -#endif - -// Used as the threshold to trigger executor invalidation when -// trace_run_counter is greater than this value. -#define JIT_CLEANUP_THRESHOLD 100000 - -// This is the length of the trace we project initially. -#define UOP_MAX_TRACE_LENGTH 800 - -#define TRACE_STACK_SIZE 5 - -int _Py_uop_analyze_and_optimize(_PyInterpreterFrame *frame, - _PyUOpInstruction *trace, int trace_len, int curr_stackentries, - _PyBloomFilter *dependencies); - -extern PyTypeObject _PyUOpExecutor_Type; - - -#define UOP_FORMAT_TARGET 0 -#define UOP_FORMAT_JUMP 1 - -static inline uint32_t uop_get_target(const _PyUOpInstruction *inst) -{ - assert(inst->format == UOP_FORMAT_TARGET); - return inst->target; -} - -static inline uint16_t uop_get_jump_target(const _PyUOpInstruction *inst) -{ - assert(inst->format == UOP_FORMAT_JUMP); - return inst->jump_target; -} - -static inline uint16_t uop_get_error_target(const _PyUOpInstruction *inst) -{ - assert(inst->format != UOP_FORMAT_TARGET); - return inst->error_target; -} - -// Holds locals, stack, locals, stack ... co_consts (in that order) -#define MAX_ABSTRACT_INTERP_SIZE 4096 - -#define TY_ARENA_SIZE (UOP_MAX_TRACE_LENGTH * 5) - -// Need extras for root frame and for overflow frame (see TRACE_STACK_PUSH()) -#define MAX_ABSTRACT_FRAME_DEPTH (TRACE_STACK_SIZE + 2) - -// The maximum number of side exits that we can take before requiring forward -// progress (and inserting a new ENTER_EXECUTOR instruction). In practice, this -// is the "maximum amount of polymorphism" that an isolated trace tree can -// handle before rejoining the rest of the program. -#define MAX_CHAIN_DEPTH 4 - -/* Symbols */ -/* See explanation in optimizer_symbols.c */ - - -typedef enum _JitSymType { - JIT_SYM_UNKNOWN_TAG = 1, - JIT_SYM_NULL_TAG = 2, - JIT_SYM_NON_NULL_TAG = 3, - JIT_SYM_BOTTOM_TAG = 4, - JIT_SYM_TYPE_VERSION_TAG = 5, - JIT_SYM_KNOWN_CLASS_TAG = 6, - JIT_SYM_KNOWN_VALUE_TAG = 7, - JIT_SYM_TUPLE_TAG = 8, - JIT_SYM_TRUTHINESS_TAG = 9, -} JitSymType; - -typedef struct _jit_opt_known_class { - uint8_t tag; - uint32_t version; - PyTypeObject *type; -} JitOptKnownClass; - -typedef struct _jit_opt_known_version { - uint8_t tag; - uint32_t version; -} JitOptKnownVersion; - -typedef struct _jit_opt_known_value { - uint8_t tag; - PyObject *value; -} JitOptKnownValue; - -#define MAX_SYMBOLIC_TUPLE_SIZE 7 - -typedef struct _jit_opt_tuple { - uint8_t tag; - uint8_t length; - uint16_t items[MAX_SYMBOLIC_TUPLE_SIZE]; -} JitOptTuple; - -typedef struct { - uint8_t tag; - bool invert; - uint16_t value; -} JitOptTruthiness; - -typedef union _jit_opt_symbol { - uint8_t tag; - JitOptKnownClass cls; - JitOptKnownValue value; - JitOptKnownVersion version; - JitOptTuple tuple; - JitOptTruthiness truthiness; -} JitOptSymbol; - - - -struct _Py_UOpsAbstractFrame { - // Max stacklen - int stack_len; - int locals_len; - - JitOptSymbol **stack_pointer; - JitOptSymbol **stack; - JitOptSymbol **locals; -}; - -typedef struct _Py_UOpsAbstractFrame _Py_UOpsAbstractFrame; - -typedef struct ty_arena { - int ty_curr_number; - int ty_max_number; - JitOptSymbol arena[TY_ARENA_SIZE]; -} ty_arena; - -typedef struct _JitOptContext { - char done; - char out_of_space; - bool contradiction; - // The current "executing" frame. - _Py_UOpsAbstractFrame *frame; - _Py_UOpsAbstractFrame frames[MAX_ABSTRACT_FRAME_DEPTH]; - int curr_frame_depth; - - // Arena for the symbolic types. - ty_arena t_arena; - - JitOptSymbol **n_consumed; - JitOptSymbol **limit; - JitOptSymbol *locals_and_stack[MAX_ABSTRACT_INTERP_SIZE]; -} JitOptContext; - -extern bool _Py_uop_sym_is_null(JitOptSymbol *sym); -extern bool _Py_uop_sym_is_not_null(JitOptSymbol *sym); -extern bool _Py_uop_sym_is_const(JitOptContext *ctx, JitOptSymbol *sym); -extern PyObject *_Py_uop_sym_get_const(JitOptContext *ctx, JitOptSymbol *sym); -extern JitOptSymbol *_Py_uop_sym_new_unknown(JitOptContext *ctx); -extern JitOptSymbol *_Py_uop_sym_new_not_null(JitOptContext *ctx); -extern JitOptSymbol *_Py_uop_sym_new_type( - JitOptContext *ctx, PyTypeObject *typ); -extern JitOptSymbol *_Py_uop_sym_new_const(JitOptContext *ctx, PyObject *const_val); -extern JitOptSymbol *_Py_uop_sym_new_null(JitOptContext *ctx); -extern bool _Py_uop_sym_has_type(JitOptSymbol *sym); -extern bool _Py_uop_sym_matches_type(JitOptSymbol *sym, PyTypeObject *typ); -extern bool _Py_uop_sym_matches_type_version(JitOptSymbol *sym, unsigned int version); -extern void _Py_uop_sym_set_null(JitOptContext *ctx, JitOptSymbol *sym); -extern void _Py_uop_sym_set_non_null(JitOptContext *ctx, JitOptSymbol *sym); -extern void _Py_uop_sym_set_type(JitOptContext *ctx, JitOptSymbol *sym, PyTypeObject *typ); -extern bool _Py_uop_sym_set_type_version(JitOptContext *ctx, JitOptSymbol *sym, unsigned int version); -extern void _Py_uop_sym_set_const(JitOptContext *ctx, JitOptSymbol *sym, PyObject *const_val); -extern bool _Py_uop_sym_is_bottom(JitOptSymbol *sym); -extern int _Py_uop_sym_truthiness(JitOptContext *ctx, JitOptSymbol *sym); -extern PyTypeObject *_Py_uop_sym_get_type(JitOptSymbol *sym); -extern bool _Py_uop_sym_is_immortal(JitOptSymbol *sym); -extern JitOptSymbol *_Py_uop_sym_new_tuple(JitOptContext *ctx, int size, JitOptSymbol **args); -extern JitOptSymbol *_Py_uop_sym_tuple_getitem(JitOptContext *ctx, JitOptSymbol *sym, int item); -extern int _Py_uop_sym_tuple_length(JitOptSymbol *sym); -extern JitOptSymbol *_Py_uop_sym_new_truthiness(JitOptContext *ctx, JitOptSymbol *value, bool truthy); - -extern void _Py_uop_abstractcontext_init(JitOptContext *ctx); -extern void _Py_uop_abstractcontext_fini(JitOptContext *ctx); - -extern _Py_UOpsAbstractFrame *_Py_uop_frame_new( - JitOptContext *ctx, - PyCodeObject *co, - int curr_stackentries, - JitOptSymbol **args, - int arg_len); -extern int _Py_uop_frame_pop(JitOptContext *ctx); - -PyAPI_FUNC(PyObject *) _Py_uop_symbols_test(PyObject *self, PyObject *ignored); - -PyAPI_FUNC(int) _PyOptimizer_Optimize(_PyInterpreterFrame *frame, _Py_CODEUNIT *start, _PyExecutorObject **exec_ptr, int chain_depth); - -static inline int is_terminator(const _PyUOpInstruction *uop) -{ - int opcode = uop->opcode; - return ( - opcode == _EXIT_TRACE || - opcode == _JUMP_TO_TOP - ); -} - -PyAPI_FUNC(int) _PyDumpExecutors(FILE *out); -#ifdef _Py_TIER2 -extern void _Py_ClearExecutorDeletionList(PyInterpreterState *interp); -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_OPTIMIZER_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_parking_lot.h b/Python314_4_x86_Template/include/internal/pycore_parking_lot.h deleted file mode 100644 index 8c9260e26..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_parking_lot.h +++ /dev/null @@ -1,97 +0,0 @@ -// ParkingLot is an internal API for building efficient synchronization -// primitives like mutexes and events. -// -// The API and name is inspired by WebKit's WTF::ParkingLot, which in turn -// is inspired Linux's futex API. -// See https://webkit.org/blog/6161/locking-in-webkit/. -// -// The core functionality is an atomic "compare-and-sleep" operation along with -// an atomic "wake-up" operation. - -#ifndef Py_INTERNAL_PARKING_LOT_H -#define Py_INTERNAL_PARKING_LOT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -enum { - // The thread was unparked by another thread. - Py_PARK_OK = 0, - - // The value of `address` did not match `expected`. - Py_PARK_AGAIN = -1, - - // The thread was unparked due to a timeout. - Py_PARK_TIMEOUT = -2, - - // The thread was interrupted by a signal. - Py_PARK_INTR = -3, -}; - -// Checks that `*address == *expected` and puts the thread to sleep until an -// unpark operation is called on the same `address`. Otherwise, the function -// returns `Py_PARK_AGAIN`. The comparison behaves like memcmp, but is -// performed atomically with respect to unpark operations. -// -// The `address_size` argument is the size of the data pointed to by the -// `address` and `expected` pointers (i.e., sizeof(*address)). It must be -// 1, 2, 4, or 8. -// -// The `timeout_ns` argument specifies the maximum amount of time to wait, with -// -1 indicating an infinite wait. -// -// `park_arg`, which can be NULL, is passed to the unpark operation. -// -// If `detach` is true, then the thread will detach/release the GIL while -// waiting. -// -// Example usage: -// -// if (_Py_atomic_compare_exchange_uint8(address, &expected, new_value)) { -// int res = _PyParkingLot_Park(address, &new_value, sizeof(*address), -// timeout_ns, NULL, 1); -// ... -// } -PyAPI_FUNC(int) -_PyParkingLot_Park(const void *address, const void *expected, - size_t address_size, PyTime_t timeout_ns, - void *park_arg, int detach); - -// Callback for _PyParkingLot_Unpark: -// -// `arg` is the data of the same name provided to the _PyParkingLot_Unpark() -// call. -// `park_arg` is the data provided to _PyParkingLot_Park() call or NULL if -// no waiting thread was found. -// `has_more_waiters` is true if there are more threads waiting on the same -// address. May be true in cases where threads are waiting on a different -// address that map to the same internal bucket. -typedef void _Py_unpark_fn_t(void *arg, void *park_arg, int has_more_waiters); - -// Unparks a single thread waiting on `address`. -// -// Note that fn() is called regardless of whether a thread was unparked. If -// no threads are waiting on `address` then the `park_arg` argument to fn() -// will be NULL. -// -// Example usage: -// void callback(void *arg, void *park_arg, int has_more_waiters); -// _PyParkingLot_Unpark(address, &callback, arg); -PyAPI_FUNC(void) -_PyParkingLot_Unpark(const void *address, _Py_unpark_fn_t *fn, void *arg); - -// Unparks all threads waiting on `address`. -PyAPI_FUNC(void) _PyParkingLot_UnparkAll(const void *address); - -// Resets the parking lot state after a fork. Forgets all parked threads. -PyAPI_FUNC(void) _PyParkingLot_AfterFork(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PARKING_LOT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_parser.h b/Python314_4_x86_Template/include/internal/pycore_parser.h deleted file mode 100644 index 2885dee63..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_parser.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef Py_INTERNAL_PARSER_H -#define Py_INTERNAL_PARSER_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -#include "pycore_ast.h" // struct _expr -#include "pycore_global_strings.h" // _Py_DECLARE_STR() -#include "pycore_pyarena.h" // PyArena - -_Py_DECLARE_STR(empty, "") -#if defined(Py_DEBUG) && defined(Py_GIL_DISABLED) -#define _parser_runtime_state_INIT \ - { \ - .mutex = {0}, \ - .dummy_name = { \ - .kind = Name_kind, \ - .v.Name.id = &_Py_STR(empty), \ - .v.Name.ctx = Load, \ - .lineno = 1, \ - .col_offset = 0, \ - .end_lineno = 1, \ - .end_col_offset = 0, \ - }, \ - } -#else -#define _parser_runtime_state_INIT \ - { \ - .dummy_name = { \ - .kind = Name_kind, \ - .v.Name.id = &_Py_STR(empty), \ - .v.Name.ctx = Load, \ - .lineno = 1, \ - .col_offset = 0, \ - .end_lineno = 1, \ - .end_col_offset = 0, \ - }, \ - } -#endif - -extern struct _mod* _PyParser_ASTFromString( - const char *str, - PyObject* filename, - int mode, - PyCompilerFlags *flags, - PyArena *arena); - -extern struct _mod* _PyParser_ASTFromFile( - FILE *fp, - PyObject *filename_ob, - const char *enc, - int mode, - const char *ps1, - const char *ps2, - PyCompilerFlags *flags, - int *errcode, - PyArena *arena); -extern struct _mod* _PyParser_InteractiveASTFromFile( - FILE *fp, - PyObject *filename_ob, - const char *enc, - int mode, - const char *ps1, - const char *ps2, - PyCompilerFlags *flags, - int *errcode, - PyObject **interactive_src, - PyArena *arena); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PARSER_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pathconfig.h b/Python314_4_x86_Template/include/internal/pycore_pathconfig.h deleted file mode 100644 index a1ce1b19a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pathconfig.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_INTERNAL_PATHCONFIG_H -#define Py_INTERNAL_PATHCONFIG_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(void) _PyPathConfig_ClearGlobal(void); - -extern PyStatus _PyPathConfig_ReadGlobal(PyConfig *config); -extern PyStatus _PyPathConfig_UpdateGlobal(const PyConfig *config); -extern const wchar_t * _PyPathConfig_GetGlobalModuleSearchPath(void); - -extern int _PyPathConfig_ComputeSysPath0( - const PyWideStringList *argv, - PyObject **path0); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PATHCONFIG_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pyarena.h b/Python314_4_x86_Template/include/internal/pycore_pyarena.h deleted file mode 100644 index 1f07479fb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pyarena.h +++ /dev/null @@ -1,68 +0,0 @@ -// An arena-like memory interface for the compiler. - -#ifndef Py_INTERNAL_PYARENA_H -#define Py_INTERNAL_PYARENA_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -typedef struct _arena PyArena; - -// _PyArena_New() and _PyArena_Free() create a new arena and free it, -// respectively. Once an arena has been created, it can be used -// to allocate memory via _PyArena_Malloc(). Pointers to PyObject can -// also be registered with the arena via _PyArena_AddPyObject(), and the -// arena will ensure that the PyObjects stay alive at least until -// _PyArena_Free() is called. When an arena is freed, all the memory it -// allocated is freed, the arena releases internal references to registered -// PyObject*, and none of its pointers are valid. -// XXX (tim) What does "none of its pointers are valid" mean? Does it -// XXX mean that pointers previously obtained via _PyArena_Malloc() are -// XXX no longer valid? (That's clearly true, but not sure that's what -// XXX the text is trying to say.) -// -// _PyArena_New() returns an arena pointer. On error, it -// returns a negative number and sets an exception. -// XXX (tim): Not true. On error, _PyArena_New() actually returns NULL, -// XXX and looks like it may or may not set an exception (e.g., if the -// XXX internal PyList_New(0) returns NULL, _PyArena_New() passes that on -// XXX and an exception is set; OTOH, if the internal -// XXX block_new(DEFAULT_BLOCK_SIZE) returns NULL, that's passed on but -// XXX an exception is not set in that case). -// -// Export for test_peg_generator -PyAPI_FUNC(PyArena*) _PyArena_New(void); - -// Export for test_peg_generator -PyAPI_FUNC(void) _PyArena_Free(PyArena *); - -// Mostly like malloc(), return the address of a block of memory spanning -// `size` bytes, or return NULL (without setting an exception) if enough -// new memory can't be obtained. Unlike malloc(0), _PyArena_Malloc() with -// size=0 does not guarantee to return a unique pointer (the pointer -// returned may equal one or more other pointers obtained from -// _PyArena_Malloc()). -// Note that pointers obtained via _PyArena_Malloc() must never be passed to -// the system free() or realloc(), or to any of Python's similar memory- -// management functions. _PyArena_Malloc()-obtained pointers remain valid -// until _PyArena_Free(ar) is called, at which point all pointers obtained -// from the arena `ar` become invalid simultaneously. -// -// Export for test_peg_generator -PyAPI_FUNC(void*) _PyArena_Malloc(PyArena *, size_t size); - -// This routine isn't a proper arena allocation routine. It takes -// a PyObject* and records it so that it can be DECREFed when the -// arena is freed. -// -// Export for test_peg_generator -PyAPI_FUNC(int) _PyArena_AddPyObject(PyArena *, PyObject *); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYARENA_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pyatomic_ft_wrappers.h b/Python314_4_x86_Template/include/internal/pycore_pyatomic_ft_wrappers.h deleted file mode 100644 index be0335a23..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pyatomic_ft_wrappers.h +++ /dev/null @@ -1,187 +0,0 @@ -// This header file provides wrappers around the atomic operations found in -// `pyatomic.h` that are only atomic in free-threaded builds. -// -// These are intended to be used in places where atomics are required in -// free-threaded builds, but not in the default build, and we don't want to -// introduce the potential performance overhead of an atomic operation in the -// default build. -// -// All usages of these macros should be replaced with unconditionally atomic or -// non-atomic versions, and this file should be removed, once the dust settles -// on free threading. -#ifndef Py_ATOMIC_FT_WRAPPERS_H -#define Py_ATOMIC_FT_WRAPPERS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -#error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED -#define FT_ATOMIC_LOAD_PTR(value) _Py_atomic_load_ptr(&value) -#define FT_ATOMIC_STORE_PTR(value, new_value) _Py_atomic_store_ptr(&value, new_value) -#define FT_ATOMIC_LOAD_SSIZE(value) _Py_atomic_load_ssize(&value) -#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) \ - _Py_atomic_load_ssize_acquire(&value) -#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) \ - _Py_atomic_load_ssize_relaxed(&value) -#define FT_ATOMIC_STORE_PTR(value, new_value) \ - _Py_atomic_store_ptr(&value, new_value) -#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) \ - _Py_atomic_load_ptr_acquire(&value) -#define FT_ATOMIC_LOAD_PTR_CONSUME(value) \ - _Py_atomic_load_ptr_consume(&value) -#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) \ - _Py_atomic_load_uintptr_acquire(&value) -#define FT_ATOMIC_LOAD_PTR_RELAXED(value) \ - _Py_atomic_load_ptr_relaxed(&value) -#define FT_ATOMIC_LOAD_UINT8(value) \ - _Py_atomic_load_uint8(&value) -#define FT_ATOMIC_STORE_UINT8(value, new_value) \ - _Py_atomic_store_uint8(&value, new_value) -#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) \ - _Py_atomic_load_uint8_relaxed(&value) -#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) \ - _Py_atomic_load_uint16_relaxed(&value) -#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) \ - _Py_atomic_load_uint32_relaxed(&value) -#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) \ - _Py_atomic_load_ulong_relaxed(&value) -#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \ - _Py_atomic_store_ptr_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) \ - _Py_atomic_store_ptr_release(&value, new_value) -#define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) \ - _Py_atomic_store_uintptr_release(&value, new_value) -#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \ - _Py_atomic_store_ssize_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) \ - _Py_atomic_store_uint8_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) \ - _Py_atomic_store_uint16_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) \ - _Py_atomic_store_uint32_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) \ - _Py_atomic_store_char_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) \ - _Py_atomic_load_char_relaxed(&value) -#define FT_ATOMIC_STORE_UCHAR_RELAXED(value, new_value) \ - _Py_atomic_store_uchar_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) \ - _Py_atomic_load_uchar_relaxed(&value) -#define FT_ATOMIC_STORE_SHORT_RELAXED(value, new_value) \ - _Py_atomic_store_short_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_SHORT_RELAXED(value) \ - _Py_atomic_load_short_relaxed(&value) -#define FT_ATOMIC_STORE_USHORT_RELAXED(value, new_value) \ - _Py_atomic_store_ushort_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_USHORT_RELAXED(value) \ - _Py_atomic_load_ushort_relaxed(&value) -#define FT_ATOMIC_LOAD_INT(value) \ - _Py_atomic_load_int(&value) -#define FT_ATOMIC_STORE_INT(value, new_value) \ - _Py_atomic_store_int(&value, new_value) -#define FT_ATOMIC_STORE_INT_RELAXED(value, new_value) \ - _Py_atomic_store_int_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_INT_RELAXED(value) \ - _Py_atomic_load_int_relaxed(&value) -#define FT_ATOMIC_LOAD_UINT(value) \ - _Py_atomic_load_uint(&value) -#define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) \ - _Py_atomic_store_uint_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_UINT_RELAXED(value) \ - _Py_atomic_load_uint_relaxed(&value) -#define FT_ATOMIC_STORE_LONG_RELAXED(value, new_value) \ - _Py_atomic_store_long_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_LONG_RELAXED(value) \ - _Py_atomic_load_long_relaxed(&value) -#define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) \ - _Py_atomic_store_ulong_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \ - _Py_atomic_store_ssize_relaxed(&value, new_value) -#define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) \ - _Py_atomic_store_ssize_release(&value, new_value) -#define FT_ATOMIC_STORE_FLOAT_RELAXED(value, new_value) \ - _Py_atomic_store_float_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_FLOAT_RELAXED(value) \ - _Py_atomic_load_float_relaxed(&value) -#define FT_ATOMIC_STORE_DOUBLE_RELAXED(value, new_value) \ - _Py_atomic_store_double_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_DOUBLE_RELAXED(value) \ - _Py_atomic_load_double_relaxed(&value) -#define FT_ATOMIC_STORE_LLONG_RELAXED(value, new_value) \ - _Py_atomic_store_llong_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_LLONG_RELAXED(value) \ - _Py_atomic_load_llong_relaxed(&value) -#define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) \ - _Py_atomic_store_ullong_relaxed(&value, new_value) -#define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) \ - _Py_atomic_load_ullong_relaxed(&value) -#define FT_ATOMIC_ADD_SSIZE(value, new_value) \ - (void)_Py_atomic_add_ssize(&value, new_value) -#define FT_MUTEX_LOCK(lock) PyMutex_Lock(lock) -#define FT_MUTEX_UNLOCK(lock) PyMutex_Unlock(lock) - -#else -#define FT_ATOMIC_LOAD_PTR(value) value -#define FT_ATOMIC_STORE_PTR(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_SSIZE(value) value -#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value -#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value -#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value -#define FT_ATOMIC_LOAD_PTR_CONSUME(value) value -#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value -#define FT_ATOMIC_LOAD_PTR_RELAXED(value) value -#define FT_ATOMIC_LOAD_UINT8(value) value -#define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value -#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value -#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value -#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value -#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value -#define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) value = new_value -#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) value = new_value -#define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value -#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) value -#define FT_ATOMIC_STORE_UCHAR_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_SHORT_RELAXED(value) value -#define FT_ATOMIC_STORE_SHORT_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_USHORT_RELAXED(value) value -#define FT_ATOMIC_STORE_USHORT_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_INT(value) value -#define FT_ATOMIC_STORE_INT(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_INT_RELAXED(value) value -#define FT_ATOMIC_STORE_INT_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_UINT(value) value -#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value -#define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_LONG_RELAXED(value) value -#define FT_ATOMIC_STORE_LONG_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_FLOAT_RELAXED(value) value -#define FT_ATOMIC_STORE_FLOAT_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_DOUBLE_RELAXED(value) value -#define FT_ATOMIC_STORE_DOUBLE_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_LLONG_RELAXED(value) value -#define FT_ATOMIC_STORE_LLONG_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) value -#define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) value = new_value -#define FT_ATOMIC_ADD_SSIZE(value, new_value) (void)(value += new_value) -#define FT_MUTEX_LOCK(lock) do {} while (0) -#define FT_MUTEX_UNLOCK(lock) do {} while (0) - -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ATOMIC_FT_WRAPPERS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pybuffer.h b/Python314_4_x86_Template/include/internal/pycore_pybuffer.h deleted file mode 100644 index 9439d2bd7..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pybuffer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef Py_INTERNAL_PYBUFFER_H -#define Py_INTERNAL_PYBUFFER_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -// Exported for the _interpchannels module. -PyAPI_FUNC(int) _PyBuffer_ReleaseInInterpreter( - PyInterpreterState *interp, Py_buffer *view); -PyAPI_FUNC(int) _PyBuffer_ReleaseInInterpreterAndRawFree( - PyInterpreterState *interp, Py_buffer *view); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYBUFFER_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pyerrors.h b/Python314_4_x86_Template/include/internal/pycore_pyerrors.h deleted file mode 100644 index 2c2048f7e..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pyerrors.h +++ /dev/null @@ -1,213 +0,0 @@ -#ifndef Py_INTERNAL_PYERRORS_H -#define Py_INTERNAL_PYERRORS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* Error handling definitions */ - -extern _PyErr_StackItem* _PyErr_GetTopmostException(PyThreadState *tstate); -extern PyObject* _PyErr_GetHandledException(PyThreadState *); -extern void _PyErr_SetHandledException(PyThreadState *, PyObject *); -extern void _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); - - -// Like PyErr_Format(), but saves current exception as __context__ and -// __cause__. -// Export for '_sqlite3' shared extension. -PyAPI_FUNC(PyObject*) _PyErr_FormatFromCause( - PyObject *exception, - const char *format, /* ASCII-encoded string */ - ... - ); - -extern int _PyException_AddNote( - PyObject *exc, - PyObject *note); - -extern int _PyErr_CheckSignals(void); - -/* Support for adding program text to SyntaxErrors */ - -// Export for test_peg_generator -PyAPI_FUNC(PyObject*) _PyErr_ProgramDecodedTextObject( - PyObject *filename, - int lineno, - const char* encoding); - -extern PyObject* _PyUnicodeTranslateError_Create( - PyObject *object, - Py_ssize_t start, - Py_ssize_t end, - const char *reason /* UTF-8 encoded string */ - ); - -extern void _Py_NO_RETURN _Py_FatalErrorFormat( - const char *func, - const char *format, - ...); - -extern PyObject* _PyErr_SetImportErrorWithNameFrom( - PyObject *, - PyObject *, - PyObject *, - PyObject *); -extern int _PyErr_SetModuleNotFoundError(PyObject *name); - - -/* runtime lifecycle */ - -extern PyStatus _PyErr_InitTypes(PyInterpreterState *); -extern void _PyErr_FiniTypes(PyInterpreterState *); - - -/* other API */ - -static inline PyObject* _PyErr_Occurred(PyThreadState *tstate) -{ - assert(tstate != NULL); - if (tstate->current_exception == NULL) { - return NULL; - } - return (PyObject *)Py_TYPE(tstate->current_exception); -} - -static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state) -{ - Py_CLEAR(exc_state->exc_value); -} - -extern PyObject* _PyErr_StackItemToExcInfoTuple( - _PyErr_StackItem *err_info); - -extern void _PyErr_Fetch( - PyThreadState *tstate, - PyObject **type, - PyObject **value, - PyObject **traceback); - -PyAPI_FUNC(PyObject*) _PyErr_GetRaisedException(PyThreadState *tstate); - -PyAPI_FUNC(int) _PyErr_ExceptionMatches( - PyThreadState *tstate, - PyObject *exc); - -PyAPI_FUNC(void) _PyErr_SetRaisedException(PyThreadState *tstate, PyObject *exc); - -extern void _PyErr_Restore( - PyThreadState *tstate, - PyObject *type, - PyObject *value, - PyObject *traceback); - -extern void _PyErr_SetObject( - PyThreadState *tstate, - PyObject *type, - PyObject *value); - -extern void _PyErr_ChainStackItem(void); -extern void _PyErr_ChainExceptions1Tstate(PyThreadState *, PyObject *); - -PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate); - -extern void _PyErr_SetNone(PyThreadState *tstate, PyObject *exception); - -extern PyObject* _PyErr_NoMemory(PyThreadState *tstate); - -extern int _PyErr_EmitSyntaxWarning(PyObject *msg, PyObject *filename, int lineno, int col_offset, - int end_lineno, int end_col_offset); -extern void _PyErr_RaiseSyntaxError(PyObject *msg, PyObject *filename, int lineno, int col_offset, - int end_lineno, int end_col_offset); - -PyAPI_FUNC(void) _PyErr_SetString( - PyThreadState *tstate, - PyObject *exception, - const char *string); - -/* - * Set an exception with the error message decoded from the current locale - * encoding (LC_CTYPE). - * - * Exceptions occurring in decoding take priority over the desired exception. - * - * Exported for '_ctypes' shared extensions. - */ -PyAPI_FUNC(void) _PyErr_SetLocaleString( - PyObject *exception, - const char *string); - -PyAPI_FUNC(PyObject*) _PyErr_Format( - PyThreadState *tstate, - PyObject *exception, - const char *format, - ...); - -PyAPI_FUNC(PyObject*) _PyErr_FormatV( - PyThreadState *tstate, - PyObject *exception, - const char *format, - va_list vargs); - -extern void _PyErr_NormalizeException( - PyThreadState *tstate, - PyObject **exc, - PyObject **val, - PyObject **tb); - -extern PyObject* _PyErr_FormatFromCauseTstate( - PyThreadState *tstate, - PyObject *exception, - const char *format, - ...); - -extern PyObject* _PyExc_CreateExceptionGroup( - const char *msg, - PyObject *excs); - -extern PyObject* _PyExc_PrepReraiseStar( - PyObject *orig, - PyObject *excs); - -extern int _PyErr_CheckSignalsTstate(PyThreadState *tstate); - -extern void _Py_DumpExtensionModules(int fd, PyInterpreterState *interp); -extern PyObject* _Py_CalculateSuggestions(PyObject *dir, PyObject *name); -extern PyObject* _Py_Offer_Suggestions(PyObject* exception); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b, - Py_ssize_t max_cost); - -// Export for '_json' shared extension -PyAPI_FUNC(void) _PyErr_FormatNote(const char *format, ...); - -/* Context manipulation (PEP 3134) */ - -Py_DEPRECATED(3.12) extern void _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); - -// implementation detail for the codeop module. -// Exported for test.test_peg_generator.test_c_parser -PyAPI_DATA(PyTypeObject) _PyExc_IncompleteInputError; -#define PyExc_IncompleteInputError ((PyObject *)(&_PyExc_IncompleteInputError)) - -extern int _PyUnicodeError_GetParams( - PyObject *self, - PyObject **obj, - Py_ssize_t *objlen, - Py_ssize_t *start, - Py_ssize_t *end, - Py_ssize_t *slen, - int as_bytes); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYERRORS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pyhash.h b/Python314_4_x86_Template/include/internal/pycore_pyhash.h deleted file mode 100644 index 84cb72fa6..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pyhash.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef Py_INTERNAL_PYHASH_H -#define Py_INTERNAL_PYHASH_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Similar to Py_HashPointer(), but don't replace -1 with -2. -static inline Py_hash_t -_Py_HashPointerRaw(const void *ptr) -{ - uintptr_t x = (uintptr_t)ptr; - Py_BUILD_ASSERT(sizeof(x) == sizeof(ptr)); - - // Bottom 3 or 4 bits are likely to be 0; rotate x by 4 to the right - // to avoid excessive hash collisions for dicts and sets. - x = (x >> 4) | (x << (8 * sizeof(uintptr_t) - 4)); - - Py_BUILD_ASSERT(sizeof(x) == sizeof(Py_hash_t)); - return (Py_hash_t)x; -} - -/* Hash secret - * - * memory layout on 64 bit systems - * cccccccc cccccccc cccccccc uc -- unsigned char[24] - * pppppppp ssssssss ........ fnv -- two Py_hash_t - * k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t - * ........ ........ ssssssss djbx33a -- 16 bytes padding + one Py_hash_t - * ........ ........ eeeeeeee pyexpat XML hash salt - * - * memory layout on 32 bit systems - * cccccccc cccccccc cccccccc uc - * ppppssss ........ ........ fnv -- two Py_hash_t - * k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t (*) - * ........ ........ ssss.... djbx33a -- 16 bytes padding + one Py_hash_t - * ........ ........ eeee.... pyexpat XML hash salt - * - * (*) The siphash member may not be available on 32 bit platforms without - * an unsigned int64 data type. - */ -typedef union { - /* ensure 24 bytes */ - unsigned char uc[24]; - /* two Py_hash_t for FNV */ - struct { - Py_hash_t prefix; - Py_hash_t suffix; - } fnv; - /* two uint64 for SipHash24 */ - struct { - uint64_t k0; - uint64_t k1; - } siphash; - /* a different (!) Py_hash_t for small string optimization */ - struct { - unsigned char padding[16]; - Py_hash_t suffix; - } djbx33a; - struct { - unsigned char padding[16]; - Py_hash_t hashsalt; - } expat; -} _Py_HashSecret_t; - -// Export for '_elementtree' shared extension -PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret; - -#ifdef Py_DEBUG -extern int _Py_HashSecret_Initialized; -#endif - - -#ifndef MS_WINDOWS -# define _py_urandom_cache_INIT \ - { \ - .fd = -1, \ - } -#else -# define _py_urandom_cache_INIT {0} -#endif - -#define pyhash_state_INIT \ - { \ - .urandom_cache = _py_urandom_cache_INIT, \ - } - - -extern uint64_t _Py_KeyedHash(uint64_t key, const void *src, Py_ssize_t src_sz); - -#endif // !Py_INTERNAL_PYHASH_H diff --git a/Python314_4_x86_Template/include/internal/pycore_pylifecycle.h b/Python314_4_x86_Template/include/internal/pycore_pylifecycle.h deleted file mode 100644 index 8faf7a4d4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pylifecycle.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef Py_INTERNAL_LIFECYCLE_H -#define Py_INTERNAL_LIFECYCLE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_typedefs.h" // _PyRuntimeState - -/* Forward declarations */ -struct _PyArgv; - -extern int _Py_SetFileSystemEncoding( - const char *encoding, - const char *errors); -extern void _Py_ClearFileSystemEncoding(void); -extern PyStatus _PyUnicode_InitEncodings(PyThreadState *tstate); -#ifdef MS_WINDOWS -extern int _PyUnicode_EnableLegacyWindowsFSEncoding(void); -#endif - -extern int _Py_IsLocaleCoercionTarget(const char *ctype_loc); - -/* Various one-time initializers */ - -extern void _Py_InitVersion(void); -extern PyStatus _PyFaulthandler_Init(int enable); -extern PyObject * _PyBuiltin_Init(PyInterpreterState *interp); -extern PyStatus _PySys_Create( - PyThreadState *tstate, - PyObject **sysmod_p); -extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options); -extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config); -extern int _PySys_UpdateConfig(PyThreadState *tstate); -extern void _PySys_FiniTypes(PyInterpreterState *interp); -extern int _PyBuiltins_AddExceptions(PyObject * bltinmod); -extern PyStatus _Py_HashRandomization_Init(const PyConfig *); - -extern PyStatus _PyGC_Init(PyInterpreterState *interp); -extern PyStatus _PyAtExit_Init(PyInterpreterState *interp); -extern PyStatus _PyDateTime_InitTypes(PyInterpreterState *interp); - -/* Various internal finalizers */ - -extern int _PySignal_Init(int install_signal_handlers); -extern void _PySignal_Fini(void); - -extern void _PyGC_Fini(PyInterpreterState *interp); -extern void _Py_HashRandomization_Fini(void); -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(PyInterpreterState *interp); -extern void _PyAtExit_Fini(PyInterpreterState *interp); -extern void _PyThread_FiniType(PyInterpreterState *interp); -extern void _PyArg_Fini(void); -extern void _Py_FinalizeAllocatedBlocks(_PyRuntimeState *); - -extern PyStatus _PyGILState_Init(PyInterpreterState *interp); -extern void _PyGILState_SetTstate(PyThreadState *tstate); -extern void _PyGILState_Fini(PyInterpreterState *interp); - -extern void _PyGC_DumpShutdownStats(PyInterpreterState *interp); - -extern PyStatus _Py_PreInitializeFromPyArgv( - const PyPreConfig *src_config, - const struct _PyArgv *args); -extern PyStatus _Py_PreInitializeFromConfig( - const PyConfig *config, - const struct _PyArgv *args); - -extern wchar_t * _Py_GetStdlibDir(void); - -extern int _Py_HandleSystemExitAndKeyboardInterrupt(int *exitcode_p); - -extern PyObject* _PyErr_WriteUnraisableDefaultHook(PyObject *unraisable); - -extern void _PyErr_Print(PyThreadState *tstate); -extern void _PyErr_Display(PyObject *file, PyObject *exception, - PyObject *value, PyObject *tb); -extern void _PyErr_DisplayException(PyObject *file, PyObject *exc); - -extern void _PyThreadState_DeleteCurrent(PyThreadState *tstate); - -extern void _PyAtExit_Call(PyInterpreterState *interp); - -extern int _Py_IsCoreInitialized(void); - -extern int _Py_FdIsInteractive(FILE *fp, PyObject *filename); - -extern const char* _Py_gitidentifier(void); -extern const char* _Py_gitversion(void); - -// Export for '_asyncio' shared extension -PyAPI_FUNC(int) _Py_IsInterpreterFinalizing(PyInterpreterState *interp); - -/* Random */ -extern int _PyOS_URandom(void *buffer, Py_ssize_t size); - -// Export for '_random' shared extension -PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size); - -/* Legacy locale support */ -extern int _Py_CoerceLegacyLocale(int warn); -extern int _Py_LegacyLocaleDetected(int warn); - -// Export for 'readline' shared extension -PyAPI_FUNC(char*) _Py_SetLocaleFromEnv(int category); - -// Export for special main.c string compiling with source tracebacks -int _PyRun_SimpleStringFlagsWithName(const char *command, const char* name, PyCompilerFlags *flags); - - -/* interpreter config */ - -// Export for _testinternalcapi shared extension -PyAPI_FUNC(int) _PyInterpreterConfig_InitFromState( - PyInterpreterConfig *, - PyInterpreterState *); -PyAPI_FUNC(PyObject *) _PyInterpreterConfig_AsDict(PyInterpreterConfig *); -PyAPI_FUNC(int) _PyInterpreterConfig_InitFromDict( - PyInterpreterConfig *, - PyObject *); -PyAPI_FUNC(int) _PyInterpreterConfig_UpdateFromDict( - PyInterpreterConfig *, - PyObject *); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_LIFECYCLE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pymath.h b/Python314_4_x86_Template/include/internal/pycore_pymath.h deleted file mode 100644 index 5bbbdaab8..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pymath.h +++ /dev/null @@ -1,205 +0,0 @@ -#ifndef Py_INTERNAL_PYMATH_H -#define Py_INTERNAL_PYMATH_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* _Py_ADJUST_ERANGE1(x) - * _Py_ADJUST_ERANGE2(x, y) - * Set errno to 0 before calling a libm function, and invoke one of these - * macros after, passing the function result(s) (_Py_ADJUST_ERANGE2 is useful - * for functions returning complex results). This makes two kinds of - * adjustments to errno: (A) If it looks like the platform libm set - * errno=ERANGE due to underflow, clear errno. (B) If it looks like the - * platform libm overflowed but didn't set errno, force errno to ERANGE. In - * effect, we're trying to force a useful implementation of C89 errno - * behavior. - * Caution: - * This isn't reliable. C99 no longer requires libm to set errno under - * any exceptional condition, but does require +- HUGE_VAL return - * values on overflow. A 754 box *probably* maps HUGE_VAL to a - * double infinity, and we're cool if that's so, unless the input - * was an infinity and an infinity is the expected result. A C89 - * system sets errno to ERANGE, so we check for that too. We're - * out of luck if a C99 754 box doesn't map HUGE_VAL to +Inf, or - * if the returned result is a NaN, or if a C89 box returns HUGE_VAL - * in non-overflow cases. - */ -static inline void _Py_ADJUST_ERANGE1(double x) -{ - if (errno == 0) { - if (x == Py_INFINITY || x == -Py_INFINITY) { - errno = ERANGE; - } - } - else if (errno == ERANGE && x == 0.0) { - errno = 0; - } -} - -static inline void _Py_ADJUST_ERANGE2(double x, double y) -{ - if (x == Py_INFINITY || x == -Py_INFINITY || - y == Py_INFINITY || y == -Py_INFINITY) - { - if (errno == 0) { - errno = ERANGE; - } - } - else if (errno == ERANGE) { - errno = 0; - } -} - - -//--- HAVE_PY_SET_53BIT_PRECISION macro ------------------------------------ -// -// The functions _Py_dg_strtod() and _Py_dg_dtoa() in Python/dtoa.c (which are -// required to support the short float repr introduced in Python 3.1) require -// that the floating-point unit that's being used for arithmetic operations on -// C doubles is set to use 53-bit precision. It also requires that the FPU -// rounding mode is round-half-to-even, but that's less often an issue. -// -// If your FPU isn't already set to 53-bit precision/round-half-to-even, and -// you want to make use of _Py_dg_strtod() and _Py_dg_dtoa(), then you should: -// -// #define HAVE_PY_SET_53BIT_PRECISION 1 -// -// and also give appropriate definitions for the following three macros: -// -// * _Py_SET_53BIT_PRECISION_HEADER: any variable declarations needed to -// use the two macros below. -// * _Py_SET_53BIT_PRECISION_START: store original FPU settings, and -// set FPU to 53-bit precision/round-half-to-even -// * _Py_SET_53BIT_PRECISION_END: restore original FPU settings -// -// The macros are designed to be used within a single C function: see -// Python/pystrtod.c for an example of their use. - - -// Get and set x87 control word for gcc/x86 -#ifdef HAVE_GCC_ASM_FOR_X87 -#define HAVE_PY_SET_53BIT_PRECISION 1 - -// Functions defined in Python/pymath.c -extern unsigned short _Py_get_387controlword(void); -extern void _Py_set_387controlword(unsigned short); - -#define _Py_SET_53BIT_PRECISION_HEADER \ - unsigned short old_387controlword, new_387controlword -#define _Py_SET_53BIT_PRECISION_START \ - do { \ - old_387controlword = _Py_get_387controlword(); \ - new_387controlword = (old_387controlword & ~0x0f00) | 0x0200; \ - if (new_387controlword != old_387controlword) { \ - _Py_set_387controlword(new_387controlword); \ - } \ - } while (0) -#define _Py_SET_53BIT_PRECISION_END \ - do { \ - if (new_387controlword != old_387controlword) { \ - _Py_set_387controlword(old_387controlword); \ - } \ - } while (0) -#endif - -// Get and set x87 control word for VisualStudio/x86. -// x87 is not supported in 64-bit or ARM. -#if defined(_MSC_VER) && !defined(_WIN64) && !defined(_M_ARM) -#define HAVE_PY_SET_53BIT_PRECISION 1 - -#include <float.h> // __control87_2() - -#define _Py_SET_53BIT_PRECISION_HEADER \ - unsigned int old_387controlword, new_387controlword, out_387controlword - // We use the __control87_2 function to set only the x87 control word. - // The SSE control word is unaffected. -#define _Py_SET_53BIT_PRECISION_START \ - do { \ - __control87_2(0, 0, &old_387controlword, NULL); \ - new_387controlword = \ - (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \ - if (new_387controlword != old_387controlword) { \ - __control87_2(new_387controlword, _MCW_PC | _MCW_RC, \ - &out_387controlword, NULL); \ - } \ - } while (0) -#define _Py_SET_53BIT_PRECISION_END \ - do { \ - if (new_387controlword != old_387controlword) { \ - __control87_2(old_387controlword, _MCW_PC | _MCW_RC, \ - &out_387controlword, NULL); \ - } \ - } while (0) -#endif - - -// MC68881 -#ifdef HAVE_GCC_ASM_FOR_MC68881 -#define HAVE_PY_SET_53BIT_PRECISION 1 -#define _Py_SET_53BIT_PRECISION_HEADER \ - unsigned int old_fpcr, new_fpcr -#define _Py_SET_53BIT_PRECISION_START \ - do { \ - __asm__ ("fmove.l %%fpcr,%0" : "=dm" (old_fpcr)); \ - /* Set double precision / round to nearest. */ \ - new_fpcr = (old_fpcr & ~0xf0) | 0x80; \ - if (new_fpcr != old_fpcr) { \ - __asm__ volatile ("fmove.l %0,%%fpcr" : : "dm" (new_fpcr)); \ - } \ - } while (0) -#define _Py_SET_53BIT_PRECISION_END \ - do { \ - if (new_fpcr != old_fpcr) { \ - __asm__ volatile ("fmove.l %0,%%fpcr" : : "dm" (old_fpcr)); \ - } \ - } while (0) -#endif - -// Default definitions are empty -#ifndef _Py_SET_53BIT_PRECISION_HEADER -# define _Py_SET_53BIT_PRECISION_HEADER -# define _Py_SET_53BIT_PRECISION_START -# define _Py_SET_53BIT_PRECISION_END -#endif - - -//--- _PY_SHORT_FLOAT_REPR macro ------------------------------------------- - -// If we can't guarantee 53-bit precision, don't use the code -// in Python/dtoa.c, but fall back to standard code. This -// means that repr of a float will be long (17 significant digits). -// -// Realistically, there are two things that could go wrong: -// -// (1) doubles aren't IEEE 754 doubles, or -// (2) we're on x86 with the rounding precision set to 64-bits -// (extended precision), and we don't know how to change -// the rounding precision. -#if !defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) && \ - !defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) && \ - !defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754) -# define _PY_SHORT_FLOAT_REPR 0 -#endif - -// Double rounding is symptomatic of use of extended precision on x86. -// If we're seeing double rounding, and we don't have any mechanism available -// for changing the FPU rounding precision, then don't use Python/dtoa.c. -#if defined(X87_DOUBLE_ROUNDING) && !defined(HAVE_PY_SET_53BIT_PRECISION) -# define _PY_SHORT_FLOAT_REPR 0 -#endif - -#ifndef _PY_SHORT_FLOAT_REPR -# define _PY_SHORT_FLOAT_REPR 1 -#endif - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYMATH_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pymem.h b/Python314_4_x86_Template/include/internal/pycore_pymem.h deleted file mode 100644 index f0b90a255..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pymem.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef Py_INTERNAL_PYMEM_H -#define Py_INTERNAL_PYMEM_H - -#include "pycore_llist.h" // struct llist_node - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Try to get the allocators name set by _PyMem_SetupAllocators(). -// Return NULL if unknown. -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(const char*) _PyMem_GetCurrentAllocatorName(void); - -// strdup() using PyMem_RawMalloc() -extern char* _PyMem_RawStrdup(const char *str); - -// strdup() using PyMem_Malloc(). -// Export for '_pickle ' shared extension. -PyAPI_FUNC(char*) _PyMem_Strdup(const char *str); - -// wcsdup() using PyMem_RawMalloc() -extern wchar_t* _PyMem_RawWcsdup(const wchar_t *str); - -/* Special bytes broadcast into debug memory blocks at appropriate times. - Strings of these are unlikely to be valid addresses, floats, ints or - 7-bit ASCII. - - - PYMEM_CLEANBYTE: clean (newly allocated) memory - - PYMEM_DEADBYTE dead (newly freed) memory - - PYMEM_FORBIDDENBYTE: untouchable bytes at each end of a block - - Byte patterns 0xCB, 0xDB and 0xFB have been replaced with 0xCD, 0xDD and - 0xFD to use the same values as Windows CRT debug malloc() and free(). - If modified, _PyMem_IsPtrFreed() should be updated as well. */ -#define PYMEM_CLEANBYTE 0xCD -#define PYMEM_DEADBYTE 0xDD -#define PYMEM_FORBIDDENBYTE 0xFD - -/* Heuristic checking if a pointer value is newly allocated - (uninitialized), newly freed or NULL (is equal to zero). - - The pointer is not dereferenced, only the pointer value is checked. - - The heuristic relies on the debug hooks on Python memory allocators which - 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(const void *ptr) -{ - uintptr_t value = (uintptr_t)ptr; -#if SIZEOF_VOID_P == 8 - return (value <= 0xff // NULL, 0x1, 0x2, ..., 0xff - || value == (uintptr_t)0xCDCDCDCDCDCDCDCD - || value == (uintptr_t)0xDDDDDDDDDDDDDDDD - || value == (uintptr_t)0xFDFDFDFDFDFDFDFD - || value >= (uintptr_t)0xFFFFFFFFFFFFFF00); // -0xff, ..., -2, -1 -#elif SIZEOF_VOID_P == 4 - return (value <= 0xff - || value == (uintptr_t)0xCDCDCDCD - || value == (uintptr_t)0xDDDDDDDD - || value == (uintptr_t)0xFDFDFDFD - || value >= (uintptr_t)0xFFFFFF00); -#else -# error "unknown pointer size" -#endif -} - -// Similar to _PyMem_IsPtrFreed() but expects an 'unsigned long' instead of a -// pointer. -static inline int _PyMem_IsULongFreed(unsigned long value) -{ -#if SIZEOF_LONG == 8 - return (value == 0 - || value == (unsigned long)0xCDCDCDCDCDCDCDCD - || value == (unsigned long)0xDDDDDDDDDDDDDDDD - || value == (unsigned long)0xFDFDFDFDFDFDFDFD - || value == (unsigned long)0xFFFFFFFFFFFFFFFF); -#elif SIZEOF_LONG == 4 - return (value == 0 - || value == (unsigned long)0xCDCDCDCD - || value == (unsigned long)0xDDDDDDDD - || value == (unsigned long)0xFDFDFDFD - || value == (unsigned long)0xFFFFFFFF); -#else -# error "unknown long size" -#endif -} - -extern int _PyMem_GetAllocatorName( - const char *name, - PyMemAllocatorName *allocator); - -/* Configure the Python memory allocators. - Pass PYMEM_ALLOCATOR_DEFAULT to use default allocators. - PYMEM_ALLOCATOR_NOT_SET does nothing. */ -extern int _PyMem_SetupAllocators(PyMemAllocatorName allocator); - -// Default raw memory allocator that is not affected by PyMem_SetAllocator() -extern void *_PyMem_DefaultRawMalloc(size_t); -extern void *_PyMem_DefaultRawCalloc(size_t, size_t); -extern void *_PyMem_DefaultRawRealloc(void *, size_t); -extern void _PyMem_DefaultRawFree(void *); -extern wchar_t *_PyMem_DefaultRawWcsdup(const wchar_t *str); - -/* Is the debug allocator enabled? */ -extern int _PyMem_DebugEnabled(void); - -// Enqueue a pointer to be freed possibly after some delay. -extern void _PyMem_FreeDelayed(void *ptr, size_t size); - -// Enqueue an object to be freed possibly after some delay -#ifdef Py_GIL_DISABLED -PyAPI_FUNC(void) _PyObject_XDecRefDelayed(PyObject *obj); -#else -static inline void _PyObject_XDecRefDelayed(PyObject *obj) -{ - Py_XDECREF(obj); -} -#endif - -// Periodically process delayed free requests. -extern void _PyMem_ProcessDelayed(PyThreadState *tstate); - -// Periodically process delayed free requests when the world is stopped. -// Notify of any objects whic should be freeed. -typedef void (*delayed_dealloc_cb)(PyObject *, void *); -extern void _PyMem_ProcessDelayedNoDealloc(PyThreadState *tstate, - delayed_dealloc_cb cb, void *state); - -// Abandon all thread-local delayed free requests and push them to the -// interpreter's queue. -extern void _PyMem_AbandonDelayed(PyThreadState *tstate); - -// On interpreter shutdown, frees all delayed free requests. -extern void _PyMem_FiniDelayed(PyInterpreterState *interp); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_PYMEM_H diff --git a/Python314_4_x86_Template/include/internal/pycore_pymem_init.h b/Python314_4_x86_Template/include/internal/pycore_pymem_init.h deleted file mode 100644 index c593edc86..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pymem_init.h +++ /dev/null @@ -1,103 +0,0 @@ -#ifndef Py_INTERNAL_PYMEM_INIT_H -#define Py_INTERNAL_PYMEM_INIT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/********************************/ -/* the allocators' initializers */ - -extern void * _PyMem_RawMalloc(void *, size_t); -extern void * _PyMem_RawCalloc(void *, size_t, size_t); -extern void * _PyMem_RawRealloc(void *, void *, size_t); -extern void _PyMem_RawFree(void *, void *); -#define PYRAW_ALLOC {NULL, _PyMem_RawMalloc, _PyMem_RawCalloc, _PyMem_RawRealloc, _PyMem_RawFree} - -#ifdef Py_GIL_DISABLED -// Py_GIL_DISABLED requires mimalloc -extern void* _PyObject_MiMalloc(void *, size_t); -extern void* _PyObject_MiCalloc(void *, size_t, size_t); -extern void _PyObject_MiFree(void *, void *); -extern void* _PyObject_MiRealloc(void *, void *, size_t); -# define PYOBJ_ALLOC {NULL, _PyObject_MiMalloc, _PyObject_MiCalloc, _PyObject_MiRealloc, _PyObject_MiFree} -extern void* _PyMem_MiMalloc(void *, size_t); -extern void* _PyMem_MiCalloc(void *, size_t, size_t); -extern void _PyMem_MiFree(void *, void *); -extern void* _PyMem_MiRealloc(void *, void *, size_t); -# define PYMEM_ALLOC {NULL, _PyMem_MiMalloc, _PyMem_MiCalloc, _PyMem_MiRealloc, _PyMem_MiFree} -#elif defined(WITH_PYMALLOC) -extern void* _PyObject_Malloc(void *, size_t); -extern void* _PyObject_Calloc(void *, size_t, size_t); -extern void _PyObject_Free(void *, void *); -extern void* _PyObject_Realloc(void *, void *, size_t); -# define PYOBJ_ALLOC {NULL, _PyObject_Malloc, _PyObject_Calloc, _PyObject_Realloc, _PyObject_Free} -# define PYMEM_ALLOC PYOBJ_ALLOC -#else -# define PYOBJ_ALLOC PYRAW_ALLOC -# define PYMEM_ALLOC PYOBJ_ALLOC -#endif // WITH_PYMALLOC - - -extern void* _PyMem_DebugRawMalloc(void *, size_t); -extern void* _PyMem_DebugRawCalloc(void *, size_t, size_t); -extern void* _PyMem_DebugRawRealloc(void *, void *, size_t); -extern void _PyMem_DebugRawFree(void *, void *); - -extern void* _PyMem_DebugMalloc(void *, size_t); -extern void* _PyMem_DebugCalloc(void *, size_t, size_t); -extern void* _PyMem_DebugRealloc(void *, void *, size_t); -extern void _PyMem_DebugFree(void *, void *); - -#define PYDBGRAW_ALLOC(runtime) \ - {&(runtime).allocators.debug.raw, _PyMem_DebugRawMalloc, _PyMem_DebugRawCalloc, _PyMem_DebugRawRealloc, _PyMem_DebugRawFree} -#define PYDBGMEM_ALLOC(runtime) \ - {&(runtime).allocators.debug.mem, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree} -#define PYDBGOBJ_ALLOC(runtime) \ - {&(runtime).allocators.debug.obj, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree} - -extern void * _PyMem_ArenaAlloc(void *, size_t); -extern void _PyMem_ArenaFree(void *, void *, size_t); - -#ifdef Py_DEBUG -# define _pymem_allocators_standard_INIT(runtime) \ - { \ - PYDBGRAW_ALLOC(runtime), \ - PYDBGMEM_ALLOC(runtime), \ - PYDBGOBJ_ALLOC(runtime), \ - } -# define _pymem_is_debug_enabled_INIT 1 -#else -# define _pymem_allocators_standard_INIT(runtime) \ - { \ - PYRAW_ALLOC, \ - PYMEM_ALLOC, \ - PYOBJ_ALLOC, \ - } -# define _pymem_is_debug_enabled_INIT 0 -#endif - -#define _pymem_allocators_debug_INIT \ - { \ - {'r', PYRAW_ALLOC}, \ - {'m', PYMEM_ALLOC}, \ - {'o', PYOBJ_ALLOC}, \ - } - -# define _pymem_allocators_obj_arena_INIT \ - { NULL, _PyMem_ArenaAlloc, _PyMem_ArenaFree } - - -#define _Py_mem_free_queue_INIT(queue) \ - { \ - .head = LLIST_INIT(queue.head), \ - } - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_PYMEM_INIT_H diff --git a/Python314_4_x86_Template/include/internal/pycore_pystate.h b/Python314_4_x86_Template/include/internal/pycore_pystate.h deleted file mode 100644 index 7f1b0b752..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pystate.h +++ /dev/null @@ -1,339 +0,0 @@ -#ifndef Py_INTERNAL_PYSTATE_H -#define Py_INTERNAL_PYSTATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pythonrun.h" // _PyOS_STACK_MARGIN_SHIFT -#include "pycore_typedefs.h" // _PyRuntimeState -#include "pycore_tstate.h" - - -// Values for PyThreadState.state. A thread must be in the "attached" state -// before calling most Python APIs. If the GIL is enabled, then "attached" -// implies that the thread holds the GIL and "detached" implies that the -// thread does not hold the GIL (or is in the process of releasing it). In -// `--disable-gil` builds, multiple threads may be "attached" to the same -// interpreter at the same time. Only the "bound" thread may perform the -// transitions between "attached" and "detached" on its own PyThreadState. -// -// The "suspended" state is used to implement stop-the-world pauses, such as -// for cyclic garbage collection. It is only used in `--disable-gil` builds. -// The "suspended" state is similar to the "detached" state in that in both -// states the thread is not allowed to call most Python APIs. However, unlike -// the "detached" state, a thread may not transition itself out from the -// "suspended" state. Only the thread performing a stop-the-world pause may -// transition a thread from the "suspended" state back to the "detached" state. -// -// The "shutting down" state is used when the interpreter is being finalized. -// Threads in this state can't do anything other than block the OS thread. -// (See _PyThreadState_HangThread). -// -// State transition diagram: -// -// (bound thread) (stop-the-world thread) -// [attached] <-> [detached] <-> [suspended] -// | ^ -// +---------------------------->---------------------------+ -// (bound thread) -// -// The (bound thread) and (stop-the-world thread) labels indicate which thread -// is allowed to perform the transition. -#define _Py_THREAD_DETACHED 0 -#define _Py_THREAD_ATTACHED 1 -#define _Py_THREAD_SUSPENDED 2 -#define _Py_THREAD_SHUTTING_DOWN 3 - - -/* Check if the current thread is the main thread. - Use _Py_IsMainInterpreter() to check if it's the main interpreter. */ -extern int _Py_IsMainThread(void); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyInterpreterState*) _PyInterpreterState_Main(void); - -static inline int -_Py_IsMainInterpreter(PyInterpreterState *interp) -{ - return (interp == _PyInterpreterState_Main()); -} - -extern int _Py_IsMainInterpreterFinalizing(PyInterpreterState *interp); - -// Export for _interpreters module. -PyAPI_FUNC(PyObject *) _PyInterpreterState_GetIDObject(PyInterpreterState *); - -// Export for _interpreters module. -PyAPI_FUNC(int) _PyInterpreterState_SetRunningMain(PyInterpreterState *); -PyAPI_FUNC(void) _PyInterpreterState_SetNotRunningMain(PyInterpreterState *); -PyAPI_FUNC(int) _PyInterpreterState_IsRunningMain(PyInterpreterState *); -PyAPI_FUNC(void) _PyErr_SetInterpreterAlreadyRunning(void); - -extern int _PyThreadState_IsRunningMain(PyThreadState *); -extern void _PyInterpreterState_ReinitRunningMain(PyThreadState *); -extern const PyConfig* _Py_GetMainConfig(void); - - -/* Only handle signals on the main thread of the main interpreter. */ -static inline int -_Py_ThreadCanHandleSignals(PyInterpreterState *interp) -{ - return (_Py_IsMainThread() && _Py_IsMainInterpreter(interp)); -} - - -/* Variable and static inline functions for in-line access to current thread - and interpreter state */ - -#if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE) -extern _Py_thread_local PyThreadState *_Py_tss_tstate; -#endif - -#ifndef NDEBUG -extern int _PyThreadState_CheckConsistency(PyThreadState *tstate); -#endif - -extern int _PyThreadState_MustExit(PyThreadState *tstate); -extern void _PyThreadState_HangThread(PyThreadState *tstate); - -// Export for most shared extensions, used via _PyThreadState_GET() static -// inline function. -PyAPI_FUNC(PyThreadState *) _PyThreadState_GetCurrent(void); - -/* Get the current Python thread state. - - This function is unsafe: it does not check for error and it can return NULL. - - The caller must hold the GIL. - - See also PyThreadState_Get() and PyThreadState_GetUnchecked(). */ -static inline PyThreadState* -_PyThreadState_GET(void) -{ -#if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE) - return _Py_tss_tstate; -#else - return _PyThreadState_GetCurrent(); -#endif -} - -static inline int -_PyThreadState_IsAttached(PyThreadState *tstate) -{ - return (_Py_atomic_load_int_relaxed(&tstate->state) == _Py_THREAD_ATTACHED); -} - -// Attaches the current thread to the interpreter. -// -// This may block while acquiring the GIL (if the GIL is enabled) or while -// waiting for a stop-the-world pause (if the GIL is disabled). -// -// High-level code should generally call PyEval_RestoreThread() instead, which -// calls this function. -extern void _PyThreadState_Attach(PyThreadState *tstate); - -// Detaches the current thread from the interpreter. -// -// High-level code should generally call PyEval_SaveThread() instead, which -// calls this function. -extern void _PyThreadState_Detach(PyThreadState *tstate); - -// Detaches the current thread to the "suspended" state if a stop-the-world -// pause is in progress. -// -// If there is no stop-the-world pause in progress, then the thread switches -// to the "detached" state. -extern void _PyThreadState_Suspend(PyThreadState *tstate); - -// Mark the thread state as "shutting down". This is used during interpreter -// and runtime finalization. The thread may no longer attach to the -// interpreter and will instead block via _PyThreadState_HangThread(). -extern void _PyThreadState_SetShuttingDown(PyThreadState *tstate); - -// Perform a stop-the-world pause for all threads in the all interpreters. -// -// Threads in the "attached" state are paused and transitioned to the "GC" -// state. Threads in the "detached" state switch to the "GC" state, preventing -// them from reattaching until the stop-the-world pause is complete. -// -// NOTE: This is a no-op outside of Py_GIL_DISABLED builds. -extern void _PyEval_StopTheWorldAll(_PyRuntimeState *runtime); -extern void _PyEval_StartTheWorldAll(_PyRuntimeState *runtime); - -// Perform a stop-the-world pause for threads in the specified interpreter. -// -// NOTE: This is a no-op outside of Py_GIL_DISABLED builds. -extern PyAPI_FUNC(void) _PyEval_StopTheWorld(PyInterpreterState *interp); -extern PyAPI_FUNC(void) _PyEval_StartTheWorld(PyInterpreterState *interp); - - -static inline void -_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate) -{ - if (tstate == NULL) { -#ifndef Py_GIL_DISABLED - _Py_FatalErrorFunc(func, - "the function must be called with the GIL held, " - "after Python initialization and before Python finalization, " - "but the GIL is released (the current Python thread state is NULL)"); -#else - _Py_FatalErrorFunc(func, - "the function must be called with an active thread state, " - "after Python initialization and before Python finalization, " - "but it was called without an active thread state. " - "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?"); -#endif - } -} - -// Call Py_FatalError() if tstate is NULL -#define _Py_EnsureTstateNotNULL(tstate) \ - _Py_EnsureFuncTstateNotNULL(__func__, (tstate)) - - -/* Get the current interpreter state. - - The function is unsafe: it does not check for error and it can return NULL. - - The caller must hold the GIL. - - See also PyInterpreterState_Get() - and _PyGILState_GetInterpreterStateUnsafe(). */ -static inline PyInterpreterState* _PyInterpreterState_GET(void) { - PyThreadState *tstate = _PyThreadState_GET(); -#ifdef Py_DEBUG - _Py_EnsureTstateNotNULL(tstate); -#endif - return tstate->interp; -} - - -// PyThreadState functions - -// Export for _testinternalcapi -PyAPI_FUNC(PyThreadState *) _PyThreadState_New( - PyInterpreterState *interp, - int whence); -extern void _PyThreadState_Bind(PyThreadState *tstate); -PyAPI_FUNC(PyThreadState *) _PyThreadState_NewBound( - PyInterpreterState *interp, - int whence); -extern PyThreadState * _PyThreadState_RemoveExcept(PyThreadState *tstate); -extern void _PyThreadState_DeleteList(PyThreadState *list, int is_after_fork); -extern void _PyThreadState_ClearMimallocHeaps(PyThreadState *tstate); - -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyThreadState_GetDict(PyThreadState *tstate); - -/* The implementation of sys._current_exceptions() Returns a dict mapping - thread id to that thread's current exception. -*/ -extern PyObject* _PyThread_CurrentExceptions(void); - - -/* Other */ - -extern PyThreadState * _PyThreadState_Swap( - _PyRuntimeState *runtime, - PyThreadState *newts); - -extern PyStatus _PyInterpreterState_Enable(_PyRuntimeState *runtime); - -#ifdef HAVE_FORK -extern PyStatus _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime); -extern void _PySignal_AfterFork(void); -#endif - -// Export for the stable ABI -PyAPI_FUNC(int) _PyState_AddModule( - PyThreadState *tstate, - PyObject* module, - PyModuleDef* def); - - -extern int _PyOS_InterruptOccurred(PyThreadState *tstate); - -#define HEAD_LOCK(runtime) \ - PyMutex_LockFlags(&(runtime)->interpreters.mutex, _Py_LOCK_DONT_DETACH) -#define HEAD_UNLOCK(runtime) \ - PyMutex_Unlock(&(runtime)->interpreters.mutex) - -#define _Py_FOR_EACH_TSTATE_UNLOCKED(interp, t) \ - for (PyThreadState *t = interp->threads.head; t; t = t->next) -#define _Py_FOR_EACH_TSTATE_BEGIN(interp, t) \ - HEAD_LOCK(interp->runtime); \ - _Py_FOR_EACH_TSTATE_UNLOCKED(interp, t) -#define _Py_FOR_EACH_TSTATE_END(interp) \ - HEAD_UNLOCK(interp->runtime) - - -// Get the configuration of the current interpreter. -// The caller must hold the GIL. -// Export for test_peg_generator. -PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void); - -// Get the single PyInterpreterState used by this process' GILState -// implementation. -// -// 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(). -extern PyInterpreterState* _PyGILState_GetInterpreterStateUnsafe(void); - -extern PyObject * _Py_GetMainModule(PyThreadState *); -extern int _Py_CheckMainModule(PyObject *module); - -#ifndef NDEBUG -/* Modern equivalent of assert(PyGILState_Check()) */ -static inline void -_Py_AssertHoldsTstateFunc(const char *func) -{ - PyThreadState *tstate = _PyThreadState_GET(); - _Py_EnsureFuncTstateNotNULL(func, tstate); -} -#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__) -#else -#define _Py_AssertHoldsTstate() -#endif - -#if !_Py__has_builtin(__builtin_frame_address) && !defined(__GNUC__) && !defined(_MSC_VER) -static uintptr_t return_pointer_as_int(char* p) { - return (uintptr_t)p; -} -#endif - -static inline uintptr_t -_Py_get_machine_stack_pointer(void) { -#if _Py__has_builtin(__builtin_frame_address) || defined(__GNUC__) - return (uintptr_t)__builtin_frame_address(0); -#elif defined(_MSC_VER) - return (uintptr_t)_AddressOfReturnAddress(); -#else - char here; - /* Avoid compiler warning about returning stack address */ - return return_pointer_as_int(&here); -#endif -} - -static inline intptr_t -_Py_RecursionLimit_GetMargin(PyThreadState *tstate) -{ - _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate; - assert(_tstate->c_stack_hard_limit != 0); - intptr_t here_addr = _Py_get_machine_stack_pointer(); -#if _Py_STACK_GROWS_DOWN - return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, here_addr - (intptr_t)_tstate->c_stack_soft_limit, _PyOS_STACK_MARGIN_SHIFT); -#else - return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, (intptr_t)_tstate->c_stack_soft_limit - here_addr, _PyOS_STACK_MARGIN_SHIFT); -#endif -} - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYSTATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_pystats.h b/Python314_4_x86_Template/include/internal/pycore_pystats.h deleted file mode 100644 index f8af398a5..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pystats.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef Py_INTERNAL_PYSTATS_H -#define Py_INTERNAL_PYSTATS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_STATS -extern void _Py_StatsOn(void); -extern void _Py_StatsOff(void); -extern void _Py_StatsClear(void); -extern int _Py_PrintSpecializationStats(int to_file); -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_PYSTATS_H diff --git a/Python314_4_x86_Template/include/internal/pycore_pythonrun.h b/Python314_4_x86_Template/include/internal/pycore_pythonrun.h deleted file mode 100644 index b25abb4f6..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pythonrun.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef Py_INTERNAL_PYTHONRUN_H -#define Py_INTERNAL_PYTHONRUN_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern int _PyRun_SimpleFileObject( - FILE *fp, - PyObject *filename, - int closeit, - PyCompilerFlags *flags); - -extern int _PyRun_AnyFileObject( - FILE *fp, - PyObject *filename, - int closeit, - PyCompilerFlags *flags); - -extern int _PyRun_InteractiveLoopObject( - FILE *fp, - PyObject *filename, - PyCompilerFlags *flags); - -extern int _PyObject_SupportedAsScript(PyObject *); -extern const char* _Py_SourceAsString( - PyObject *cmd, - const char *funcname, - const char *what, - PyCompilerFlags *cf, - PyObject **cmd_copy); - - -/* Stack size, in "pointers". This must be large enough, so - * no two calls to check recursion depth are more than this far - * apart. In practice, that means it must be larger than the C - * stack consumption of PyEval_EvalDefault */ -#if (defined(Py_DEBUG) \ - || defined(_Py_ADDRESS_SANITIZER) \ - || defined(_Py_THREAD_SANITIZER)) -# define _PyOS_LOG2_STACK_MARGIN 12 -#else -# define _PyOS_LOG2_STACK_MARGIN 11 -#endif -#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN) -#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *)) - -#if SIZEOF_VOID_P == 8 -# define _PyOS_STACK_MARGIN_SHIFT (_PyOS_LOG2_STACK_MARGIN + 3) -#else -# define _PyOS_STACK_MARGIN_SHIFT (_PyOS_LOG2_STACK_MARGIN + 2) -#endif - -#ifdef _Py_THREAD_SANITIZER -# define _PyOS_MIN_STACK_SIZE (_PyOS_STACK_MARGIN_BYTES * 6) -#else -# define _PyOS_MIN_STACK_SIZE (_PyOS_STACK_MARGIN_BYTES * 3) -#endif - - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_PYTHONRUN_H - diff --git a/Python314_4_x86_Template/include/internal/pycore_pythread.h b/Python314_4_x86_Template/include/internal/pycore_pythread.h deleted file mode 100644 index 8457b0734..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_pythread.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef Py_INTERNAL_PYTHREAD_H -#define Py_INTERNAL_PYTHREAD_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "dynamic_annotations.h" // _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX -#include "pycore_llist.h" // struct llist_node - -// Get _POSIX_THREADS and _POSIX_SEMAPHORES macros if available -#if (defined(HAVE_UNISTD_H) && !defined(_POSIX_THREADS) \ - && !defined(_POSIX_SEMAPHORES)) -# include <unistd.h> // _POSIX_THREADS, _POSIX_SEMAPHORES -#endif -#if (defined(HAVE_PTHREAD_H) && !defined(_POSIX_THREADS) \ - && !defined(_POSIX_SEMAPHORES)) - // This means pthreads are not implemented in libc headers, hence the macro - // not present in <unistd.h>. But they still can be implemented as an - // external library (e.g. gnu pth in pthread emulation) -# include <pthread.h> // _POSIX_THREADS, _POSIX_SEMAPHORES -#endif -#if !defined(_POSIX_THREADS) && defined(__hpux) && defined(_SC_THREADS) - // Check if we're running on HP-UX and _SC_THREADS is defined. If so, then - // enough of the POSIX threads package is implemented to support Python - // threads. - // - // This is valid for HP-UX 11.23 running on an ia64 system. If needed, add - // a check of __ia64 to verify that we're running on an ia64 system instead - // of a pa-risc system. -# define _POSIX_THREADS -#endif - - -#if defined(_POSIX_THREADS) || defined(HAVE_PTHREAD_STUBS) -# define _USE_PTHREADS -#endif - -#if defined(_USE_PTHREADS) && defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC) -// monotonic is supported statically. It doesn't mean it works on runtime. -# define CONDATTR_MONOTONIC -#endif - - -#if defined(HAVE_PTHREAD_STUBS) -#include "cpython/pthread_stubs.h" // PTHREAD_KEYS_MAX -#include <stdbool.h> // bool - -// pthread_key -struct py_stub_tls_entry { - bool in_use; - void *value; -}; -#endif - -struct _pythread_runtime_state { - int initialized; - -#ifdef _USE_PTHREADS - // This matches when thread_pthread.h is used. - struct { - /* NULL when pthread_condattr_setclock(CLOCK_MONOTONIC) is not supported. */ - pthread_condattr_t *ptr; -# ifdef CONDATTR_MONOTONIC - /* The value to which condattr_monotonic is set. */ - pthread_condattr_t val; -# endif - } _condattr_monotonic; - -#endif // USE_PTHREADS - -#if defined(HAVE_PTHREAD_STUBS) - struct { - struct py_stub_tls_entry tls_entries[PTHREAD_KEYS_MAX]; - } stubs; -#endif - - // Linked list of ThreadHandles - struct llist_node handles; -}; - -#define _pythread_RUNTIME_INIT(pythread) \ - { \ - .handles = LLIST_INIT(pythread.handles), \ - } - -#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. */ -extern int _PyThread_at_fork_reinit(PyThread_type_lock *lock); -extern void _PyThread_AfterFork(struct _pythread_runtime_state *state); -#endif /* HAVE_FORK */ - - -// unset: -1 seconds, in nanoseconds -#define PyThread_UNSET_TIMEOUT ((PyTime_t)(-1 * 1000 * 1000 * 1000)) - -// Exported for the _interpchannels module. -PyAPI_FUNC(int) PyThread_ParseTimeoutArg( - PyObject *arg, - int blocking, - PY_TIMEOUT_T *timeout); - -/* Helper to acquire an interruptible lock with a timeout. If the lock acquire - * is interrupted, signal handlers are run, and if they raise an exception, - * PY_LOCK_INTR is returned. Otherwise, PY_LOCK_ACQUIRED or PY_LOCK_FAILURE - * are returned, depending on whether the lock can be acquired within the - * timeout. - */ -// Exported for the _interpchannels module. -PyAPI_FUNC(PyLockStatus) PyThread_acquire_lock_timed_with_retries( - PyThread_type_lock, - PY_TIMEOUT_T microseconds); - -typedef unsigned long long PyThread_ident_t; -typedef Py_uintptr_t PyThread_handle_t; - -#define PY_FORMAT_THREAD_IDENT_T "llu" -#define Py_PARSE_THREAD_IDENT_T "K" - -PyAPI_FUNC(PyThread_ident_t) PyThread_get_thread_ident_ex(void); - -/* Thread joining APIs. - * - * These APIs have a strict contract: - * - Either PyThread_join_thread or PyThread_detach_thread must be called - * exactly once with the given handle. - * - Calling neither PyThread_join_thread nor PyThread_detach_thread results - * in a resource leak until the end of the process. - * - Any other usage, such as calling both PyThread_join_thread and - * PyThread_detach_thread, or calling them more than once (including - * simultaneously), results in undefined behavior. - */ -PyAPI_FUNC(int) PyThread_start_joinable_thread(void (*func)(void *), - void *arg, - PyThread_ident_t* ident, - PyThread_handle_t* handle); -/* - * Join a thread started with `PyThread_start_joinable_thread`. - * This function cannot be interrupted. It returns 0 on success, - * a non-zero value on failure. - */ -PyAPI_FUNC(int) PyThread_join_thread(PyThread_handle_t); -/* - * Detach a thread started with `PyThread_start_joinable_thread`, such - * that its resources are released as soon as it exits. - * This function cannot be interrupted. It returns 0 on success, - * a non-zero value on failure. - */ -PyAPI_FUNC(int) PyThread_detach_thread(PyThread_handle_t); -/* - * Hangs the thread indefinitely without exiting it. - * - * gh-87135: There is no safe way to exit a thread other than returning - * normally from its start function. This is used during finalization in lieu - * of actually exiting the thread. Since the program is expected to terminate - * soon anyway, it does not matter if the thread stack stays around until then. - * - * This is unfortunate for embedders who may not be terminating their process - * when they're done with the interpreter, but our C API design does not allow - * for safely exiting threads attempting to re-enter Python post finalization. - */ -void _Py_NO_RETURN PyThread_hang_thread(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_PYTHREAD_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_qsbr.h b/Python314_4_x86_Template/include/internal/pycore_qsbr.h deleted file mode 100644 index eeca6fc47..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_qsbr.h +++ /dev/null @@ -1,173 +0,0 @@ -// The QSBR APIs (quiescent state-based reclamation) provide a mechanism for -// the free-threaded build to safely reclaim memory when there may be -// concurrent accesses. -// -// Many operations in the free-threaded build are protected by locks. However, -// in some cases, we want to allow reads to happen concurrently with updates. -// In this case, we need to delay freeing ("reclaiming") any memory that may be -// concurrently accessed by a reader. The QSBR APIs provide a way to do this. -#ifndef Py_INTERNAL_QSBR_H -#define Py_INTERNAL_QSBR_H - -#include <stdbool.h> -#include <stdint.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// The shared write sequence is always odd and incremented by two. Detached -// threads are indicated by a read sequence of zero. This avoids collisions -// between the offline state and any valid sequence number even if the -// sequences numbers wrap around. -#define QSBR_OFFLINE 0 -#define QSBR_INITIAL 1 -#define QSBR_INCR 2 - -// Wrap-around safe comparison. This is a holdover from the FreeBSD -// implementation, which uses 32-bit sequence numbers. We currently use 64-bit -// sequence numbers, so wrap-around is unlikely. -#define QSBR_LT(a, b) ((int64_t)((a)-(b)) < 0) -#define QSBR_LEQ(a, b) ((int64_t)((a)-(b)) <= 0) - -struct _qsbr_shared; -struct _PyThreadStateImpl; // forward declare to avoid circular dependency - -// Per-thread state -struct _qsbr_thread_state { - // Last observed write sequence (or 0 if detached) - uint64_t seq; - - // Shared (per-interpreter) QSBR state - struct _qsbr_shared *shared; - - // Thread state (or NULL) - PyThreadState *tstate; - - // Number of held items added by this thread since the last write sequence - // advance - int deferred_count; - - // Estimate for the amount of memory that is held by this thread since - // the last write sequence advance - size_t deferred_memory; - - // Amount of memory in mimalloc pages deferred from collection. When - // deferred, they are prevented from being used for a different size class - // and in a different thread. - size_t deferred_page_memory; - - // True if the deferred memory frees should be processed. - bool should_process; - - // Is this thread state allocated? - bool allocated; - struct _qsbr_thread_state *freelist_next; -}; - -// Padding to avoid false sharing -struct _qsbr_pad { - struct _qsbr_thread_state qsbr; - char __padding[64 - sizeof(struct _qsbr_thread_state)]; -}; - -// Per-interpreter state -struct _qsbr_shared { - // Write sequence: always odd, incremented by two - uint64_t wr_seq; - - // Minimum observed read sequence of all QSBR thread states - uint64_t rd_seq; - - // Array of QSBR thread states (aligned to 64 bytes). - struct _qsbr_pad *array; - void *array_raw; // raw allocation pointer (for free) - Py_ssize_t size; - - // Freelist of unused _qsbr_thread_states (protected by mutex) - PyMutex mutex; - struct _qsbr_thread_state *freelist; -}; - -static inline uint64_t -_Py_qsbr_shared_current(struct _qsbr_shared *shared) -{ - return _Py_atomic_load_uint64_acquire(&shared->wr_seq); -} - -// Reports a quiescent state: the caller no longer holds any pointer to shared -// data not protected by locks or reference counts. -static inline void -_Py_qsbr_quiescent_state(struct _qsbr_thread_state *qsbr) -{ - uint64_t seq = _Py_qsbr_shared_current(qsbr->shared); - _Py_atomic_store_uint64_release(&qsbr->seq, seq); -} - -// Have the read sequences advanced to the given goal? Like `_Py_qsbr_poll()`, -// but does not perform a scan of threads. -static inline bool -_Py_qbsr_goal_reached(struct _qsbr_thread_state *qsbr, uint64_t goal) -{ - uint64_t rd_seq = _Py_atomic_load_uint64(&qsbr->shared->rd_seq); - return QSBR_LEQ(goal, rd_seq); -} - -// Advance the write sequence and return the new goal. This should be called -// after data is removed. The returned goal is used with `_Py_qsbr_poll()` to -// determine when it is safe to reclaim (free) the memory. -extern uint64_t -_Py_qsbr_advance(struct _qsbr_shared *shared); - -// Return the next value for the write sequence (current plus the increment). -extern uint64_t -_Py_qsbr_shared_next(struct _qsbr_shared *shared); - -// Return true if deferred memory frees held by QSBR should be processed to -// determine if they can be safely freed. -static inline bool -_Py_qsbr_should_process(struct _qsbr_thread_state *qsbr) -{ - return qsbr->should_process; -} - -// Have the read sequences advanced to the given goal? If this returns true, -// it safe to reclaim any memory tagged with the goal (or earlier goal). -extern bool -_Py_qsbr_poll(struct _qsbr_thread_state *qsbr, uint64_t goal); - -// Called when thread attaches to interpreter -extern void -_Py_qsbr_attach(struct _qsbr_thread_state *qsbr); - -// Called when thread detaches from interpreter -extern void -_Py_qsbr_detach(struct _qsbr_thread_state *qsbr); - -// Reserves (allocates) a QSBR state and returns its index. -extern Py_ssize_t -_Py_qsbr_reserve(PyInterpreterState *interp); - -// Associates a PyThreadState with the QSBR state at the given index -extern void -_Py_qsbr_register(struct _PyThreadStateImpl *tstate, - PyInterpreterState *interp, Py_ssize_t index); - -// Disassociates a PyThreadState from the QSBR state and frees the QSBR state. -extern void -_Py_qsbr_unregister(PyThreadState *tstate); - -extern void -_Py_qsbr_fini(PyInterpreterState *interp); - -extern void -_Py_qsbr_after_fork(struct _PyThreadStateImpl *tstate); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_QSBR_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_range.h b/Python314_4_x86_Template/include/internal/pycore_range.h deleted file mode 100644 index bf045ec4f..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_range.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef Py_INTERNAL_RANGE_H -#define Py_INTERNAL_RANGE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -typedef struct { - PyObject_HEAD - long start; - long step; - long len; -} _PyRangeIterObject; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_RANGE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_runtime.h b/Python314_4_x86_Template/include/internal/pycore_runtime.h deleted file mode 100644 index 7fc7f343f..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_runtime.h +++ /dev/null @@ -1,63 +0,0 @@ -#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_runtime_structs.h" // _PyRuntimeState - - -/* API */ - -// Export _PyRuntime for shared extensions which use it in static inline -// functions for best performance, like _Py_IsMainThread() or _Py_ID(). -// It's also made accessible for debuggers and profilers. -PyAPI_DATA(_PyRuntimeState) _PyRuntime; - -extern PyStatus _PyRuntimeState_Init(_PyRuntimeState *runtime); -extern void _PyRuntimeState_Fini(_PyRuntimeState *runtime); - -#ifdef HAVE_FORK -extern PyStatus _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime); -#endif - -/* Initialize _PyRuntimeState. - Return NULL on success, or return an error message on failure. */ -extern PyStatus _PyRuntime_Initialize(void); - -extern void _PyRuntime_Finalize(void); - - -static inline PyThreadState* -_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) { - return (PyThreadState*)_Py_atomic_load_ptr_relaxed(&runtime->_finalizing); -} - -static inline unsigned long -_PyRuntimeState_GetFinalizingID(_PyRuntimeState *runtime) { - return _Py_atomic_load_ulong_relaxed(&runtime->_finalizing_id); -} - -static inline void -_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) { - _Py_atomic_store_ptr_relaxed(&runtime->_finalizing, tstate); - if (tstate == NULL) { - _Py_atomic_store_ulong_relaxed(&runtime->_finalizing_id, 0); - } - else { - // XXX Re-enable this assert once gh-109860 is fixed. - //assert(tstate->thread_id == PyThread_get_thread_ident()); - _Py_atomic_store_ulong_relaxed(&runtime->_finalizing_id, - tstate->thread_id); - } -} - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_RUNTIME_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_runtime_init.h b/Python314_4_x86_Template/include/internal/pycore_runtime_init.h deleted file mode 100644 index 4200d91a2..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_runtime_init.h +++ /dev/null @@ -1,239 +0,0 @@ -#ifndef Py_INTERNAL_RUNTIME_INIT_H -#define Py_INTERNAL_RUNTIME_INIT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" -#include "pycore_ceval_state.h" // _PyEval_RUNTIME_PERF_INIT -#include "pycore_debug_offsets.h" // _Py_DebugOffsets_INIT() -#include "pycore_dtoa.h" // _dtoa_state_INIT() -#include "pycore_faulthandler.h" // _faulthandler_runtime_state_INIT -#include "pycore_floatobject.h" // _py_float_format_unknown -#include "pycore_function.h" -#include "pycore_hamt.h" // _PyHamt_BitmapNode_Type -#include "pycore_import.h" // IMPORTS_INIT -#include "pycore_object.h" // _PyObject_HEAD_INIT -#include "pycore_obmalloc_init.h" // _obmalloc_global_state_INIT -#include "pycore_parser.h" // _parser_runtime_state_INIT -#include "pycore_pyhash.h" // pyhash_state_INIT -#include "pycore_pymem_init.h" // _pymem_allocators_standard_INIT -#include "pycore_pythread.h" // _pythread_RUNTIME_INIT -#include "pycore_qsbr.h" // QSBR_INITIAL -#include "pycore_runtime_init_generated.h" // _Py_bytes_characters_INIT -#include "pycore_signal.h" // _signals_RUNTIME_INIT -#include "pycore_tracemalloc.h" // _tracemalloc_runtime_state_INIT -#include "pycore_tuple.h" // _PyTuple_HASH_EMPTY - - -extern PyTypeObject _PyExc_MemoryError; - - -/* The static initializers defined here should only be used - in the runtime init code (in pystate.c and pylifecycle.c). */ - -#define _PyRuntimeState_INIT(runtime, debug_cookie) \ - { \ - .debug_offsets = _Py_DebugOffsets_INIT(debug_cookie), \ - .allocators = { \ - .standard = _pymem_allocators_standard_INIT(runtime), \ - .debug = _pymem_allocators_debug_INIT, \ - .obj_arena = _pymem_allocators_obj_arena_INIT, \ - .is_debug_enabled = _pymem_is_debug_enabled_INIT, \ - }, \ - .obmalloc = _obmalloc_global_state_INIT, \ - .pyhash_state = pyhash_state_INIT, \ - .threads = _pythread_RUNTIME_INIT(runtime.threads), \ - .signals = _signals_RUNTIME_INIT, \ - .interpreters = { \ - /* This prevents interpreters from getting created \ - until _PyInterpreterState_Enable() is called. */ \ - .next_id = -1, \ - }, \ - .xi = { \ - .data_lookup = { \ - .registry = { \ - .global = 1, \ - }, \ - }, \ - }, \ - /* A TSS key must be initialized with Py_tss_NEEDS_INIT \ - in accordance with the specification. */ \ - .autoTSSkey = Py_tss_NEEDS_INIT, \ - .parser = _parser_runtime_state_INIT, \ - .ceval = { \ - .pending_mainthread = { \ - .max = MAXPENDINGCALLS_MAIN, \ - .maxloop = MAXPENDINGCALLSLOOP_MAIN, \ - }, \ - .perf = _PyEval_RUNTIME_PERF_INIT, \ - }, \ - .gilstate = { \ - .check_enabled = 1, \ - }, \ - .fileutils = { \ - .force_ascii = -1, \ - }, \ - .faulthandler = _faulthandler_runtime_state_INIT, \ - .tracemalloc = _tracemalloc_runtime_state_INIT, \ - .ref_tracer = { \ - .tracer_func = NULL, \ - .tracer_data = NULL, \ - }, \ - .stoptheworld = { \ - .is_global = 1, \ - }, \ - .float_state = { \ - .float_format = _py_float_format_unknown, \ - .double_format = _py_float_format_unknown, \ - }, \ - .types = { \ - .next_version_tag = _Py_TYPE_VERSION_NEXT, \ - }, \ - .static_objects = { \ - .singletons = { \ - .small_ints = _Py_small_ints_INIT, \ - .bytes_empty = _PyBytes_SIMPLE_INIT(0, 0), \ - .bytes_characters = _Py_bytes_characters_INIT, \ - .strings = { \ - .literals = _Py_str_literals_INIT, \ - .identifiers = _Py_str_identifiers_INIT, \ - .ascii = _Py_str_ascii_INIT, \ - .latin1 = _Py_str_latin1_INIT, \ - }, \ - .tuple_empty = { \ - .ob_base = _PyVarObject_HEAD_INIT(&PyTuple_Type, 0), \ - .ob_hash = _PyTuple_HASH_EMPTY, \ - }, \ - .hamt_bitmap_node_empty = { \ - .ob_base = _PyVarObject_HEAD_INIT(&_PyHamt_BitmapNode_Type, 0), \ - }, \ - .context_token_missing = { \ - .ob_base = _PyObject_HEAD_INIT(&_PyContextTokenMissing_Type), \ - }, \ - }, \ - }, \ - ._main_interpreter = _PyInterpreterState_INIT(runtime._main_interpreter), \ - } - -#define _PyInterpreterState_INIT(INTERP) \ - { \ - .id_refcount = -1, \ - ._whence = _PyInterpreterState_WHENCE_NOTSET, \ - .threads = { \ - .preallocated = &(INTERP)._initial_thread, \ - }, \ - .imports = IMPORTS_INIT, \ - .ceval = { \ - .recursion_limit = Py_DEFAULT_RECURSION_LIMIT, \ - .pending = { \ - .max = MAXPENDINGCALLS, \ - .maxloop = MAXPENDINGCALLSLOOP, \ - }, \ - }, \ - .gc = { \ - .enabled = 1, \ - .young = { .threshold = 2000, }, \ - .old = { \ - { .threshold = 10, }, \ - { .threshold = 0, }, \ - }, \ - .work_to_do = -5000, \ - .phase = GC_PHASE_MARK, \ - }, \ - .qsbr = { \ - .wr_seq = QSBR_INITIAL, \ - .rd_seq = QSBR_INITIAL, \ - }, \ - .dtoa = _dtoa_state_INIT(&(INTERP)), \ - .dict_state = _dict_state_INIT, \ - .mem_free_queue = _Py_mem_free_queue_INIT(INTERP.mem_free_queue), \ - .func_state = { \ - .next_version = FUNC_VERSION_FIRST_VALID, \ - }, \ - .types = { \ - .next_version_tag = _Py_TYPE_BASE_VERSION_TAG, \ - }, \ - .static_objects = { \ - .singletons = { \ - ._not_used = 1, \ - .hamt_empty = { \ - .ob_base = _PyObject_HEAD_INIT(&_PyHamt_Type), \ - .h_root = (PyHamtNode*)&_Py_SINGLETON(hamt_bitmap_node_empty), \ - }, \ - .last_resort_memory_error = { \ - _PyObject_HEAD_INIT(&_PyExc_MemoryError), \ - .args = (PyObject*)&_Py_SINGLETON(tuple_empty) \ - }, \ - }, \ - }, \ - ._initial_thread = _PyThreadStateImpl_INIT, \ - } - -#define _PyThreadStateImpl_INIT \ - { \ - .base = _PyThreadState_INIT, \ - /* The thread and the interpreter's linked list hold a reference */ \ - .refcount = 2, \ - } - -#define _PyThreadState_INIT \ - { \ - ._whence = _PyThreadState_WHENCE_NOTSET, \ - .py_recursion_limit = Py_DEFAULT_RECURSION_LIMIT, \ - .context_ver = 1, \ - } - - -// global objects - -#define _PyBytes_SIMPLE_INIT(CH, LEN) \ - { \ - _PyVarObject_HEAD_INIT(&PyBytes_Type, (LEN)), \ - .ob_shash = -1, \ - .ob_sval = { (CH) }, \ - } -#define _PyBytes_CHAR_INIT(CH) \ - { \ - _PyBytes_SIMPLE_INIT((CH), 1) \ - } - -#define _PyUnicode_ASCII_BASE_INIT(LITERAL, ASCII) \ - { \ - .ob_base = _PyObject_HEAD_INIT(&PyUnicode_Type), \ - .length = sizeof(LITERAL) - 1, \ - .hash = -1, \ - .state = { \ - .kind = 1, \ - .compact = 1, \ - .ascii = (ASCII), \ - .statically_allocated = 1, \ - }, \ - } -#define _PyASCIIObject_INIT(LITERAL) \ - { \ - ._ascii = _PyUnicode_ASCII_BASE_INIT((LITERAL), 1), \ - ._data = (LITERAL) \ - } -#define INIT_STR(NAME, LITERAL) \ - ._py_ ## NAME = _PyASCIIObject_INIT(LITERAL) -#define INIT_ID(NAME) \ - ._py_ ## NAME = _PyASCIIObject_INIT(#NAME) -#define _PyUnicode_LATIN1_INIT(LITERAL, UTF8) \ - { \ - ._latin1 = { \ - ._base = _PyUnicode_ASCII_BASE_INIT((LITERAL), 0), \ - .utf8 = (UTF8), \ - .utf8_length = sizeof(UTF8) - 1, \ - }, \ - ._data = (LITERAL), \ - } - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_RUNTIME_INIT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_runtime_init_generated.h b/Python314_4_x86_Template/include/internal/pycore_runtime_init_generated.h deleted file mode 100644 index e642a42bb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_runtime_init_generated.h +++ /dev/null @@ -1,1589 +0,0 @@ -#ifndef Py_INTERNAL_RUNTIME_INIT_GENERATED_H -#define Py_INTERNAL_RUNTIME_INIT_GENERATED_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_long.h" // _PyLong_DIGIT_INIT() - - -/* The following is auto-generated by Tools/build/generate_global_objects.py. */ -#define _Py_small_ints_INIT { \ - _PyLong_DIGIT_INIT(-5), \ - _PyLong_DIGIT_INIT(-4), \ - _PyLong_DIGIT_INIT(-3), \ - _PyLong_DIGIT_INIT(-2), \ - _PyLong_DIGIT_INIT(-1), \ - _PyLong_DIGIT_INIT(0), \ - _PyLong_DIGIT_INIT(1), \ - _PyLong_DIGIT_INIT(2), \ - _PyLong_DIGIT_INIT(3), \ - _PyLong_DIGIT_INIT(4), \ - _PyLong_DIGIT_INIT(5), \ - _PyLong_DIGIT_INIT(6), \ - _PyLong_DIGIT_INIT(7), \ - _PyLong_DIGIT_INIT(8), \ - _PyLong_DIGIT_INIT(9), \ - _PyLong_DIGIT_INIT(10), \ - _PyLong_DIGIT_INIT(11), \ - _PyLong_DIGIT_INIT(12), \ - _PyLong_DIGIT_INIT(13), \ - _PyLong_DIGIT_INIT(14), \ - _PyLong_DIGIT_INIT(15), \ - _PyLong_DIGIT_INIT(16), \ - _PyLong_DIGIT_INIT(17), \ - _PyLong_DIGIT_INIT(18), \ - _PyLong_DIGIT_INIT(19), \ - _PyLong_DIGIT_INIT(20), \ - _PyLong_DIGIT_INIT(21), \ - _PyLong_DIGIT_INIT(22), \ - _PyLong_DIGIT_INIT(23), \ - _PyLong_DIGIT_INIT(24), \ - _PyLong_DIGIT_INIT(25), \ - _PyLong_DIGIT_INIT(26), \ - _PyLong_DIGIT_INIT(27), \ - _PyLong_DIGIT_INIT(28), \ - _PyLong_DIGIT_INIT(29), \ - _PyLong_DIGIT_INIT(30), \ - _PyLong_DIGIT_INIT(31), \ - _PyLong_DIGIT_INIT(32), \ - _PyLong_DIGIT_INIT(33), \ - _PyLong_DIGIT_INIT(34), \ - _PyLong_DIGIT_INIT(35), \ - _PyLong_DIGIT_INIT(36), \ - _PyLong_DIGIT_INIT(37), \ - _PyLong_DIGIT_INIT(38), \ - _PyLong_DIGIT_INIT(39), \ - _PyLong_DIGIT_INIT(40), \ - _PyLong_DIGIT_INIT(41), \ - _PyLong_DIGIT_INIT(42), \ - _PyLong_DIGIT_INIT(43), \ - _PyLong_DIGIT_INIT(44), \ - _PyLong_DIGIT_INIT(45), \ - _PyLong_DIGIT_INIT(46), \ - _PyLong_DIGIT_INIT(47), \ - _PyLong_DIGIT_INIT(48), \ - _PyLong_DIGIT_INIT(49), \ - _PyLong_DIGIT_INIT(50), \ - _PyLong_DIGIT_INIT(51), \ - _PyLong_DIGIT_INIT(52), \ - _PyLong_DIGIT_INIT(53), \ - _PyLong_DIGIT_INIT(54), \ - _PyLong_DIGIT_INIT(55), \ - _PyLong_DIGIT_INIT(56), \ - _PyLong_DIGIT_INIT(57), \ - _PyLong_DIGIT_INIT(58), \ - _PyLong_DIGIT_INIT(59), \ - _PyLong_DIGIT_INIT(60), \ - _PyLong_DIGIT_INIT(61), \ - _PyLong_DIGIT_INIT(62), \ - _PyLong_DIGIT_INIT(63), \ - _PyLong_DIGIT_INIT(64), \ - _PyLong_DIGIT_INIT(65), \ - _PyLong_DIGIT_INIT(66), \ - _PyLong_DIGIT_INIT(67), \ - _PyLong_DIGIT_INIT(68), \ - _PyLong_DIGIT_INIT(69), \ - _PyLong_DIGIT_INIT(70), \ - _PyLong_DIGIT_INIT(71), \ - _PyLong_DIGIT_INIT(72), \ - _PyLong_DIGIT_INIT(73), \ - _PyLong_DIGIT_INIT(74), \ - _PyLong_DIGIT_INIT(75), \ - _PyLong_DIGIT_INIT(76), \ - _PyLong_DIGIT_INIT(77), \ - _PyLong_DIGIT_INIT(78), \ - _PyLong_DIGIT_INIT(79), \ - _PyLong_DIGIT_INIT(80), \ - _PyLong_DIGIT_INIT(81), \ - _PyLong_DIGIT_INIT(82), \ - _PyLong_DIGIT_INIT(83), \ - _PyLong_DIGIT_INIT(84), \ - _PyLong_DIGIT_INIT(85), \ - _PyLong_DIGIT_INIT(86), \ - _PyLong_DIGIT_INIT(87), \ - _PyLong_DIGIT_INIT(88), \ - _PyLong_DIGIT_INIT(89), \ - _PyLong_DIGIT_INIT(90), \ - _PyLong_DIGIT_INIT(91), \ - _PyLong_DIGIT_INIT(92), \ - _PyLong_DIGIT_INIT(93), \ - _PyLong_DIGIT_INIT(94), \ - _PyLong_DIGIT_INIT(95), \ - _PyLong_DIGIT_INIT(96), \ - _PyLong_DIGIT_INIT(97), \ - _PyLong_DIGIT_INIT(98), \ - _PyLong_DIGIT_INIT(99), \ - _PyLong_DIGIT_INIT(100), \ - _PyLong_DIGIT_INIT(101), \ - _PyLong_DIGIT_INIT(102), \ - _PyLong_DIGIT_INIT(103), \ - _PyLong_DIGIT_INIT(104), \ - _PyLong_DIGIT_INIT(105), \ - _PyLong_DIGIT_INIT(106), \ - _PyLong_DIGIT_INIT(107), \ - _PyLong_DIGIT_INIT(108), \ - _PyLong_DIGIT_INIT(109), \ - _PyLong_DIGIT_INIT(110), \ - _PyLong_DIGIT_INIT(111), \ - _PyLong_DIGIT_INIT(112), \ - _PyLong_DIGIT_INIT(113), \ - _PyLong_DIGIT_INIT(114), \ - _PyLong_DIGIT_INIT(115), \ - _PyLong_DIGIT_INIT(116), \ - _PyLong_DIGIT_INIT(117), \ - _PyLong_DIGIT_INIT(118), \ - _PyLong_DIGIT_INIT(119), \ - _PyLong_DIGIT_INIT(120), \ - _PyLong_DIGIT_INIT(121), \ - _PyLong_DIGIT_INIT(122), \ - _PyLong_DIGIT_INIT(123), \ - _PyLong_DIGIT_INIT(124), \ - _PyLong_DIGIT_INIT(125), \ - _PyLong_DIGIT_INIT(126), \ - _PyLong_DIGIT_INIT(127), \ - _PyLong_DIGIT_INIT(128), \ - _PyLong_DIGIT_INIT(129), \ - _PyLong_DIGIT_INIT(130), \ - _PyLong_DIGIT_INIT(131), \ - _PyLong_DIGIT_INIT(132), \ - _PyLong_DIGIT_INIT(133), \ - _PyLong_DIGIT_INIT(134), \ - _PyLong_DIGIT_INIT(135), \ - _PyLong_DIGIT_INIT(136), \ - _PyLong_DIGIT_INIT(137), \ - _PyLong_DIGIT_INIT(138), \ - _PyLong_DIGIT_INIT(139), \ - _PyLong_DIGIT_INIT(140), \ - _PyLong_DIGIT_INIT(141), \ - _PyLong_DIGIT_INIT(142), \ - _PyLong_DIGIT_INIT(143), \ - _PyLong_DIGIT_INIT(144), \ - _PyLong_DIGIT_INIT(145), \ - _PyLong_DIGIT_INIT(146), \ - _PyLong_DIGIT_INIT(147), \ - _PyLong_DIGIT_INIT(148), \ - _PyLong_DIGIT_INIT(149), \ - _PyLong_DIGIT_INIT(150), \ - _PyLong_DIGIT_INIT(151), \ - _PyLong_DIGIT_INIT(152), \ - _PyLong_DIGIT_INIT(153), \ - _PyLong_DIGIT_INIT(154), \ - _PyLong_DIGIT_INIT(155), \ - _PyLong_DIGIT_INIT(156), \ - _PyLong_DIGIT_INIT(157), \ - _PyLong_DIGIT_INIT(158), \ - _PyLong_DIGIT_INIT(159), \ - _PyLong_DIGIT_INIT(160), \ - _PyLong_DIGIT_INIT(161), \ - _PyLong_DIGIT_INIT(162), \ - _PyLong_DIGIT_INIT(163), \ - _PyLong_DIGIT_INIT(164), \ - _PyLong_DIGIT_INIT(165), \ - _PyLong_DIGIT_INIT(166), \ - _PyLong_DIGIT_INIT(167), \ - _PyLong_DIGIT_INIT(168), \ - _PyLong_DIGIT_INIT(169), \ - _PyLong_DIGIT_INIT(170), \ - _PyLong_DIGIT_INIT(171), \ - _PyLong_DIGIT_INIT(172), \ - _PyLong_DIGIT_INIT(173), \ - _PyLong_DIGIT_INIT(174), \ - _PyLong_DIGIT_INIT(175), \ - _PyLong_DIGIT_INIT(176), \ - _PyLong_DIGIT_INIT(177), \ - _PyLong_DIGIT_INIT(178), \ - _PyLong_DIGIT_INIT(179), \ - _PyLong_DIGIT_INIT(180), \ - _PyLong_DIGIT_INIT(181), \ - _PyLong_DIGIT_INIT(182), \ - _PyLong_DIGIT_INIT(183), \ - _PyLong_DIGIT_INIT(184), \ - _PyLong_DIGIT_INIT(185), \ - _PyLong_DIGIT_INIT(186), \ - _PyLong_DIGIT_INIT(187), \ - _PyLong_DIGIT_INIT(188), \ - _PyLong_DIGIT_INIT(189), \ - _PyLong_DIGIT_INIT(190), \ - _PyLong_DIGIT_INIT(191), \ - _PyLong_DIGIT_INIT(192), \ - _PyLong_DIGIT_INIT(193), \ - _PyLong_DIGIT_INIT(194), \ - _PyLong_DIGIT_INIT(195), \ - _PyLong_DIGIT_INIT(196), \ - _PyLong_DIGIT_INIT(197), \ - _PyLong_DIGIT_INIT(198), \ - _PyLong_DIGIT_INIT(199), \ - _PyLong_DIGIT_INIT(200), \ - _PyLong_DIGIT_INIT(201), \ - _PyLong_DIGIT_INIT(202), \ - _PyLong_DIGIT_INIT(203), \ - _PyLong_DIGIT_INIT(204), \ - _PyLong_DIGIT_INIT(205), \ - _PyLong_DIGIT_INIT(206), \ - _PyLong_DIGIT_INIT(207), \ - _PyLong_DIGIT_INIT(208), \ - _PyLong_DIGIT_INIT(209), \ - _PyLong_DIGIT_INIT(210), \ - _PyLong_DIGIT_INIT(211), \ - _PyLong_DIGIT_INIT(212), \ - _PyLong_DIGIT_INIT(213), \ - _PyLong_DIGIT_INIT(214), \ - _PyLong_DIGIT_INIT(215), \ - _PyLong_DIGIT_INIT(216), \ - _PyLong_DIGIT_INIT(217), \ - _PyLong_DIGIT_INIT(218), \ - _PyLong_DIGIT_INIT(219), \ - _PyLong_DIGIT_INIT(220), \ - _PyLong_DIGIT_INIT(221), \ - _PyLong_DIGIT_INIT(222), \ - _PyLong_DIGIT_INIT(223), \ - _PyLong_DIGIT_INIT(224), \ - _PyLong_DIGIT_INIT(225), \ - _PyLong_DIGIT_INIT(226), \ - _PyLong_DIGIT_INIT(227), \ - _PyLong_DIGIT_INIT(228), \ - _PyLong_DIGIT_INIT(229), \ - _PyLong_DIGIT_INIT(230), \ - _PyLong_DIGIT_INIT(231), \ - _PyLong_DIGIT_INIT(232), \ - _PyLong_DIGIT_INIT(233), \ - _PyLong_DIGIT_INIT(234), \ - _PyLong_DIGIT_INIT(235), \ - _PyLong_DIGIT_INIT(236), \ - _PyLong_DIGIT_INIT(237), \ - _PyLong_DIGIT_INIT(238), \ - _PyLong_DIGIT_INIT(239), \ - _PyLong_DIGIT_INIT(240), \ - _PyLong_DIGIT_INIT(241), \ - _PyLong_DIGIT_INIT(242), \ - _PyLong_DIGIT_INIT(243), \ - _PyLong_DIGIT_INIT(244), \ - _PyLong_DIGIT_INIT(245), \ - _PyLong_DIGIT_INIT(246), \ - _PyLong_DIGIT_INIT(247), \ - _PyLong_DIGIT_INIT(248), \ - _PyLong_DIGIT_INIT(249), \ - _PyLong_DIGIT_INIT(250), \ - _PyLong_DIGIT_INIT(251), \ - _PyLong_DIGIT_INIT(252), \ - _PyLong_DIGIT_INIT(253), \ - _PyLong_DIGIT_INIT(254), \ - _PyLong_DIGIT_INIT(255), \ - _PyLong_DIGIT_INIT(256), \ -} - -#define _Py_bytes_characters_INIT { \ - _PyBytes_CHAR_INIT(0), \ - _PyBytes_CHAR_INIT(1), \ - _PyBytes_CHAR_INIT(2), \ - _PyBytes_CHAR_INIT(3), \ - _PyBytes_CHAR_INIT(4), \ - _PyBytes_CHAR_INIT(5), \ - _PyBytes_CHAR_INIT(6), \ - _PyBytes_CHAR_INIT(7), \ - _PyBytes_CHAR_INIT(8), \ - _PyBytes_CHAR_INIT(9), \ - _PyBytes_CHAR_INIT(10), \ - _PyBytes_CHAR_INIT(11), \ - _PyBytes_CHAR_INIT(12), \ - _PyBytes_CHAR_INIT(13), \ - _PyBytes_CHAR_INIT(14), \ - _PyBytes_CHAR_INIT(15), \ - _PyBytes_CHAR_INIT(16), \ - _PyBytes_CHAR_INIT(17), \ - _PyBytes_CHAR_INIT(18), \ - _PyBytes_CHAR_INIT(19), \ - _PyBytes_CHAR_INIT(20), \ - _PyBytes_CHAR_INIT(21), \ - _PyBytes_CHAR_INIT(22), \ - _PyBytes_CHAR_INIT(23), \ - _PyBytes_CHAR_INIT(24), \ - _PyBytes_CHAR_INIT(25), \ - _PyBytes_CHAR_INIT(26), \ - _PyBytes_CHAR_INIT(27), \ - _PyBytes_CHAR_INIT(28), \ - _PyBytes_CHAR_INIT(29), \ - _PyBytes_CHAR_INIT(30), \ - _PyBytes_CHAR_INIT(31), \ - _PyBytes_CHAR_INIT(32), \ - _PyBytes_CHAR_INIT(33), \ - _PyBytes_CHAR_INIT(34), \ - _PyBytes_CHAR_INIT(35), \ - _PyBytes_CHAR_INIT(36), \ - _PyBytes_CHAR_INIT(37), \ - _PyBytes_CHAR_INIT(38), \ - _PyBytes_CHAR_INIT(39), \ - _PyBytes_CHAR_INIT(40), \ - _PyBytes_CHAR_INIT(41), \ - _PyBytes_CHAR_INIT(42), \ - _PyBytes_CHAR_INIT(43), \ - _PyBytes_CHAR_INIT(44), \ - _PyBytes_CHAR_INIT(45), \ - _PyBytes_CHAR_INIT(46), \ - _PyBytes_CHAR_INIT(47), \ - _PyBytes_CHAR_INIT(48), \ - _PyBytes_CHAR_INIT(49), \ - _PyBytes_CHAR_INIT(50), \ - _PyBytes_CHAR_INIT(51), \ - _PyBytes_CHAR_INIT(52), \ - _PyBytes_CHAR_INIT(53), \ - _PyBytes_CHAR_INIT(54), \ - _PyBytes_CHAR_INIT(55), \ - _PyBytes_CHAR_INIT(56), \ - _PyBytes_CHAR_INIT(57), \ - _PyBytes_CHAR_INIT(58), \ - _PyBytes_CHAR_INIT(59), \ - _PyBytes_CHAR_INIT(60), \ - _PyBytes_CHAR_INIT(61), \ - _PyBytes_CHAR_INIT(62), \ - _PyBytes_CHAR_INIT(63), \ - _PyBytes_CHAR_INIT(64), \ - _PyBytes_CHAR_INIT(65), \ - _PyBytes_CHAR_INIT(66), \ - _PyBytes_CHAR_INIT(67), \ - _PyBytes_CHAR_INIT(68), \ - _PyBytes_CHAR_INIT(69), \ - _PyBytes_CHAR_INIT(70), \ - _PyBytes_CHAR_INIT(71), \ - _PyBytes_CHAR_INIT(72), \ - _PyBytes_CHAR_INIT(73), \ - _PyBytes_CHAR_INIT(74), \ - _PyBytes_CHAR_INIT(75), \ - _PyBytes_CHAR_INIT(76), \ - _PyBytes_CHAR_INIT(77), \ - _PyBytes_CHAR_INIT(78), \ - _PyBytes_CHAR_INIT(79), \ - _PyBytes_CHAR_INIT(80), \ - _PyBytes_CHAR_INIT(81), \ - _PyBytes_CHAR_INIT(82), \ - _PyBytes_CHAR_INIT(83), \ - _PyBytes_CHAR_INIT(84), \ - _PyBytes_CHAR_INIT(85), \ - _PyBytes_CHAR_INIT(86), \ - _PyBytes_CHAR_INIT(87), \ - _PyBytes_CHAR_INIT(88), \ - _PyBytes_CHAR_INIT(89), \ - _PyBytes_CHAR_INIT(90), \ - _PyBytes_CHAR_INIT(91), \ - _PyBytes_CHAR_INIT(92), \ - _PyBytes_CHAR_INIT(93), \ - _PyBytes_CHAR_INIT(94), \ - _PyBytes_CHAR_INIT(95), \ - _PyBytes_CHAR_INIT(96), \ - _PyBytes_CHAR_INIT(97), \ - _PyBytes_CHAR_INIT(98), \ - _PyBytes_CHAR_INIT(99), \ - _PyBytes_CHAR_INIT(100), \ - _PyBytes_CHAR_INIT(101), \ - _PyBytes_CHAR_INIT(102), \ - _PyBytes_CHAR_INIT(103), \ - _PyBytes_CHAR_INIT(104), \ - _PyBytes_CHAR_INIT(105), \ - _PyBytes_CHAR_INIT(106), \ - _PyBytes_CHAR_INIT(107), \ - _PyBytes_CHAR_INIT(108), \ - _PyBytes_CHAR_INIT(109), \ - _PyBytes_CHAR_INIT(110), \ - _PyBytes_CHAR_INIT(111), \ - _PyBytes_CHAR_INIT(112), \ - _PyBytes_CHAR_INIT(113), \ - _PyBytes_CHAR_INIT(114), \ - _PyBytes_CHAR_INIT(115), \ - _PyBytes_CHAR_INIT(116), \ - _PyBytes_CHAR_INIT(117), \ - _PyBytes_CHAR_INIT(118), \ - _PyBytes_CHAR_INIT(119), \ - _PyBytes_CHAR_INIT(120), \ - _PyBytes_CHAR_INIT(121), \ - _PyBytes_CHAR_INIT(122), \ - _PyBytes_CHAR_INIT(123), \ - _PyBytes_CHAR_INIT(124), \ - _PyBytes_CHAR_INIT(125), \ - _PyBytes_CHAR_INIT(126), \ - _PyBytes_CHAR_INIT(127), \ - _PyBytes_CHAR_INIT(128), \ - _PyBytes_CHAR_INIT(129), \ - _PyBytes_CHAR_INIT(130), \ - _PyBytes_CHAR_INIT(131), \ - _PyBytes_CHAR_INIT(132), \ - _PyBytes_CHAR_INIT(133), \ - _PyBytes_CHAR_INIT(134), \ - _PyBytes_CHAR_INIT(135), \ - _PyBytes_CHAR_INIT(136), \ - _PyBytes_CHAR_INIT(137), \ - _PyBytes_CHAR_INIT(138), \ - _PyBytes_CHAR_INIT(139), \ - _PyBytes_CHAR_INIT(140), \ - _PyBytes_CHAR_INIT(141), \ - _PyBytes_CHAR_INIT(142), \ - _PyBytes_CHAR_INIT(143), \ - _PyBytes_CHAR_INIT(144), \ - _PyBytes_CHAR_INIT(145), \ - _PyBytes_CHAR_INIT(146), \ - _PyBytes_CHAR_INIT(147), \ - _PyBytes_CHAR_INIT(148), \ - _PyBytes_CHAR_INIT(149), \ - _PyBytes_CHAR_INIT(150), \ - _PyBytes_CHAR_INIT(151), \ - _PyBytes_CHAR_INIT(152), \ - _PyBytes_CHAR_INIT(153), \ - _PyBytes_CHAR_INIT(154), \ - _PyBytes_CHAR_INIT(155), \ - _PyBytes_CHAR_INIT(156), \ - _PyBytes_CHAR_INIT(157), \ - _PyBytes_CHAR_INIT(158), \ - _PyBytes_CHAR_INIT(159), \ - _PyBytes_CHAR_INIT(160), \ - _PyBytes_CHAR_INIT(161), \ - _PyBytes_CHAR_INIT(162), \ - _PyBytes_CHAR_INIT(163), \ - _PyBytes_CHAR_INIT(164), \ - _PyBytes_CHAR_INIT(165), \ - _PyBytes_CHAR_INIT(166), \ - _PyBytes_CHAR_INIT(167), \ - _PyBytes_CHAR_INIT(168), \ - _PyBytes_CHAR_INIT(169), \ - _PyBytes_CHAR_INIT(170), \ - _PyBytes_CHAR_INIT(171), \ - _PyBytes_CHAR_INIT(172), \ - _PyBytes_CHAR_INIT(173), \ - _PyBytes_CHAR_INIT(174), \ - _PyBytes_CHAR_INIT(175), \ - _PyBytes_CHAR_INIT(176), \ - _PyBytes_CHAR_INIT(177), \ - _PyBytes_CHAR_INIT(178), \ - _PyBytes_CHAR_INIT(179), \ - _PyBytes_CHAR_INIT(180), \ - _PyBytes_CHAR_INIT(181), \ - _PyBytes_CHAR_INIT(182), \ - _PyBytes_CHAR_INIT(183), \ - _PyBytes_CHAR_INIT(184), \ - _PyBytes_CHAR_INIT(185), \ - _PyBytes_CHAR_INIT(186), \ - _PyBytes_CHAR_INIT(187), \ - _PyBytes_CHAR_INIT(188), \ - _PyBytes_CHAR_INIT(189), \ - _PyBytes_CHAR_INIT(190), \ - _PyBytes_CHAR_INIT(191), \ - _PyBytes_CHAR_INIT(192), \ - _PyBytes_CHAR_INIT(193), \ - _PyBytes_CHAR_INIT(194), \ - _PyBytes_CHAR_INIT(195), \ - _PyBytes_CHAR_INIT(196), \ - _PyBytes_CHAR_INIT(197), \ - _PyBytes_CHAR_INIT(198), \ - _PyBytes_CHAR_INIT(199), \ - _PyBytes_CHAR_INIT(200), \ - _PyBytes_CHAR_INIT(201), \ - _PyBytes_CHAR_INIT(202), \ - _PyBytes_CHAR_INIT(203), \ - _PyBytes_CHAR_INIT(204), \ - _PyBytes_CHAR_INIT(205), \ - _PyBytes_CHAR_INIT(206), \ - _PyBytes_CHAR_INIT(207), \ - _PyBytes_CHAR_INIT(208), \ - _PyBytes_CHAR_INIT(209), \ - _PyBytes_CHAR_INIT(210), \ - _PyBytes_CHAR_INIT(211), \ - _PyBytes_CHAR_INIT(212), \ - _PyBytes_CHAR_INIT(213), \ - _PyBytes_CHAR_INIT(214), \ - _PyBytes_CHAR_INIT(215), \ - _PyBytes_CHAR_INIT(216), \ - _PyBytes_CHAR_INIT(217), \ - _PyBytes_CHAR_INIT(218), \ - _PyBytes_CHAR_INIT(219), \ - _PyBytes_CHAR_INIT(220), \ - _PyBytes_CHAR_INIT(221), \ - _PyBytes_CHAR_INIT(222), \ - _PyBytes_CHAR_INIT(223), \ - _PyBytes_CHAR_INIT(224), \ - _PyBytes_CHAR_INIT(225), \ - _PyBytes_CHAR_INIT(226), \ - _PyBytes_CHAR_INIT(227), \ - _PyBytes_CHAR_INIT(228), \ - _PyBytes_CHAR_INIT(229), \ - _PyBytes_CHAR_INIT(230), \ - _PyBytes_CHAR_INIT(231), \ - _PyBytes_CHAR_INIT(232), \ - _PyBytes_CHAR_INIT(233), \ - _PyBytes_CHAR_INIT(234), \ - _PyBytes_CHAR_INIT(235), \ - _PyBytes_CHAR_INIT(236), \ - _PyBytes_CHAR_INIT(237), \ - _PyBytes_CHAR_INIT(238), \ - _PyBytes_CHAR_INIT(239), \ - _PyBytes_CHAR_INIT(240), \ - _PyBytes_CHAR_INIT(241), \ - _PyBytes_CHAR_INIT(242), \ - _PyBytes_CHAR_INIT(243), \ - _PyBytes_CHAR_INIT(244), \ - _PyBytes_CHAR_INIT(245), \ - _PyBytes_CHAR_INIT(246), \ - _PyBytes_CHAR_INIT(247), \ - _PyBytes_CHAR_INIT(248), \ - _PyBytes_CHAR_INIT(249), \ - _PyBytes_CHAR_INIT(250), \ - _PyBytes_CHAR_INIT(251), \ - _PyBytes_CHAR_INIT(252), \ - _PyBytes_CHAR_INIT(253), \ - _PyBytes_CHAR_INIT(254), \ - _PyBytes_CHAR_INIT(255), \ -} - -#define _Py_str_literals_INIT { \ - INIT_STR(anon_dictcomp, "<dictcomp>"), \ - INIT_STR(anon_genexpr, "<genexpr>"), \ - INIT_STR(anon_lambda, "<lambda>"), \ - INIT_STR(anon_listcomp, "<listcomp>"), \ - INIT_STR(anon_module, "<module>"), \ - INIT_STR(anon_null, "<NULL>"), \ - INIT_STR(anon_setcomp, "<setcomp>"), \ - INIT_STR(anon_string, "<string>"), \ - INIT_STR(anon_unknown, "<unknown>"), \ - INIT_STR(dbl_close_br, "}}"), \ - INIT_STR(dbl_open_br, "{{"), \ - INIT_STR(dbl_percent, "%%"), \ - INIT_STR(defaults, ".defaults"), \ - INIT_STR(dot_locals, ".<locals>"), \ - INIT_STR(empty, ""), \ - INIT_STR(format, ".format"), \ - INIT_STR(generic_base, ".generic_base"), \ - INIT_STR(json_decoder, "json.decoder"), \ - INIT_STR(kwdefaults, ".kwdefaults"), \ - INIT_STR(list_err, "list index out of range"), \ - INIT_STR(str_replace_inf, "1e309"), \ - INIT_STR(type_params, ".type_params"), \ - INIT_STR(utf_8, "utf-8"), \ -} - -#define _Py_str_identifiers_INIT { \ - INIT_ID(CANCELLED), \ - INIT_ID(FINISHED), \ - INIT_ID(False), \ - INIT_ID(JSONDecodeError), \ - INIT_ID(PENDING), \ - INIT_ID(Py_Repr), \ - INIT_ID(TextIOWrapper), \ - INIT_ID(True), \ - INIT_ID(WarningMessage), \ - INIT_ID(_WindowsConsoleIO), \ - INIT_ID(__IOBase_closed), \ - INIT_ID(__abc_tpflags__), \ - INIT_ID(__abs__), \ - INIT_ID(__abstractmethods__), \ - INIT_ID(__add__), \ - INIT_ID(__aenter__), \ - INIT_ID(__aexit__), \ - INIT_ID(__aiter__), \ - INIT_ID(__all__), \ - INIT_ID(__and__), \ - INIT_ID(__anext__), \ - INIT_ID(__annotate__), \ - INIT_ID(__annotate_func__), \ - INIT_ID(__annotations__), \ - INIT_ID(__annotations_cache__), \ - INIT_ID(__args__), \ - INIT_ID(__await__), \ - INIT_ID(__bases__), \ - INIT_ID(__bool__), \ - INIT_ID(__buffer__), \ - INIT_ID(__build_class__), \ - INIT_ID(__builtins__), \ - INIT_ID(__bytes__), \ - INIT_ID(__call__), \ - INIT_ID(__cantrace__), \ - INIT_ID(__ceil__), \ - INIT_ID(__class__), \ - INIT_ID(__class_getitem__), \ - INIT_ID(__classcell__), \ - INIT_ID(__classdict__), \ - INIT_ID(__classdictcell__), \ - INIT_ID(__complex__), \ - INIT_ID(__conditional_annotations__), \ - INIT_ID(__contains__), \ - INIT_ID(__ctypes_from_outparam__), \ - INIT_ID(__del__), \ - INIT_ID(__delattr__), \ - INIT_ID(__delete__), \ - INIT_ID(__delitem__), \ - INIT_ID(__dict__), \ - INIT_ID(__dictoffset__), \ - INIT_ID(__dir__), \ - INIT_ID(__divmod__), \ - INIT_ID(__doc__), \ - INIT_ID(__enter__), \ - INIT_ID(__eq__), \ - INIT_ID(__exit__), \ - INIT_ID(__file__), \ - INIT_ID(__firstlineno__), \ - INIT_ID(__float__), \ - INIT_ID(__floor__), \ - INIT_ID(__floordiv__), \ - INIT_ID(__format__), \ - INIT_ID(__fspath__), \ - INIT_ID(__ge__), \ - INIT_ID(__get__), \ - INIT_ID(__getattr__), \ - INIT_ID(__getattribute__), \ - INIT_ID(__getinitargs__), \ - INIT_ID(__getitem__), \ - INIT_ID(__getnewargs__), \ - INIT_ID(__getnewargs_ex__), \ - INIT_ID(__getstate__), \ - INIT_ID(__gt__), \ - INIT_ID(__hash__), \ - INIT_ID(__iadd__), \ - INIT_ID(__iand__), \ - INIT_ID(__ifloordiv__), \ - INIT_ID(__ilshift__), \ - INIT_ID(__imatmul__), \ - INIT_ID(__imod__), \ - INIT_ID(__import__), \ - INIT_ID(__imul__), \ - INIT_ID(__index__), \ - INIT_ID(__init__), \ - INIT_ID(__init_subclass__), \ - INIT_ID(__instancecheck__), \ - INIT_ID(__int__), \ - INIT_ID(__invert__), \ - INIT_ID(__ior__), \ - INIT_ID(__ipow__), \ - INIT_ID(__irshift__), \ - INIT_ID(__isabstractmethod__), \ - INIT_ID(__isub__), \ - INIT_ID(__iter__), \ - INIT_ID(__itruediv__), \ - INIT_ID(__ixor__), \ - INIT_ID(__le__), \ - INIT_ID(__len__), \ - INIT_ID(__length_hint__), \ - INIT_ID(__lltrace__), \ - INIT_ID(__loader__), \ - INIT_ID(__lshift__), \ - INIT_ID(__lt__), \ - INIT_ID(__main__), \ - INIT_ID(__match_args__), \ - INIT_ID(__matmul__), \ - INIT_ID(__missing__), \ - INIT_ID(__mod__), \ - INIT_ID(__module__), \ - INIT_ID(__mro_entries__), \ - INIT_ID(__mul__), \ - INIT_ID(__name__), \ - INIT_ID(__ne__), \ - INIT_ID(__neg__), \ - INIT_ID(__new__), \ - INIT_ID(__newobj__), \ - INIT_ID(__newobj_ex__), \ - INIT_ID(__next__), \ - INIT_ID(__notes__), \ - INIT_ID(__or__), \ - INIT_ID(__orig_class__), \ - INIT_ID(__origin__), \ - INIT_ID(__package__), \ - INIT_ID(__parameters__), \ - INIT_ID(__path__), \ - INIT_ID(__pos__), \ - INIT_ID(__pow__), \ - INIT_ID(__prepare__), \ - INIT_ID(__qualname__), \ - INIT_ID(__radd__), \ - INIT_ID(__rand__), \ - INIT_ID(__rdivmod__), \ - INIT_ID(__reduce__), \ - INIT_ID(__reduce_ex__), \ - INIT_ID(__release_buffer__), \ - INIT_ID(__repr__), \ - INIT_ID(__reversed__), \ - INIT_ID(__rfloordiv__), \ - INIT_ID(__rlshift__), \ - INIT_ID(__rmatmul__), \ - INIT_ID(__rmod__), \ - INIT_ID(__rmul__), \ - INIT_ID(__ror__), \ - INIT_ID(__round__), \ - INIT_ID(__rpow__), \ - INIT_ID(__rrshift__), \ - INIT_ID(__rshift__), \ - INIT_ID(__rsub__), \ - INIT_ID(__rtruediv__), \ - INIT_ID(__rxor__), \ - INIT_ID(__set__), \ - INIT_ID(__set_name__), \ - INIT_ID(__setattr__), \ - INIT_ID(__setitem__), \ - INIT_ID(__setstate__), \ - INIT_ID(__sizeof__), \ - INIT_ID(__slotnames__), \ - INIT_ID(__slots__), \ - INIT_ID(__spec__), \ - INIT_ID(__static_attributes__), \ - INIT_ID(__str__), \ - INIT_ID(__sub__), \ - INIT_ID(__subclasscheck__), \ - INIT_ID(__subclasshook__), \ - INIT_ID(__truediv__), \ - INIT_ID(__trunc__), \ - INIT_ID(__type_params__), \ - INIT_ID(__typing_is_unpacked_typevartuple__), \ - INIT_ID(__typing_prepare_subst__), \ - INIT_ID(__typing_subst__), \ - INIT_ID(__typing_unpacked_tuple_args__), \ - INIT_ID(__warningregistry__), \ - INIT_ID(__weaklistoffset__), \ - INIT_ID(__weakref__), \ - INIT_ID(__xor__), \ - INIT_ID(_abc_impl), \ - INIT_ID(_abstract_), \ - INIT_ID(_active), \ - INIT_ID(_anonymous_), \ - INIT_ID(_argtypes_), \ - INIT_ID(_as_parameter_), \ - INIT_ID(_asyncio_future_blocking), \ - INIT_ID(_blksize), \ - INIT_ID(_bootstrap), \ - INIT_ID(_check_retval_), \ - INIT_ID(_dealloc_warn), \ - INIT_ID(_feature_version), \ - INIT_ID(_field_types), \ - INIT_ID(_fields_), \ - INIT_ID(_filters), \ - INIT_ID(_finalizing), \ - INIT_ID(_find_and_load), \ - INIT_ID(_fix_up_module), \ - INIT_ID(_flags_), \ - INIT_ID(_get_sourcefile), \ - INIT_ID(_handle_fromlist), \ - INIT_ID(_initializing), \ - INIT_ID(_internal_use), \ - INIT_ID(_io), \ - INIT_ID(_is_text_encoding), \ - INIT_ID(_isatty_open_only), \ - INIT_ID(_length_), \ - INIT_ID(_limbo), \ - INIT_ID(_lock_unlock_module), \ - INIT_ID(_loop), \ - INIT_ID(_needs_com_addref_), \ - INIT_ID(_only_immortal), \ - INIT_ID(_restype_), \ - INIT_ID(_showwarnmsg), \ - INIT_ID(_shutdown), \ - INIT_ID(_slotnames), \ - INIT_ID(_strptime), \ - INIT_ID(_strptime_datetime_date), \ - INIT_ID(_strptime_datetime_datetime), \ - INIT_ID(_strptime_datetime_time), \ - INIT_ID(_type_), \ - INIT_ID(_uninitialized_submodules), \ - INIT_ID(_warn_unawaited_coroutine), \ - INIT_ID(_xoptions), \ - INIT_ID(abs_tol), \ - INIT_ID(access), \ - INIT_ID(aclose), \ - INIT_ID(add), \ - INIT_ID(add_done_callback), \ - INIT_ID(after_in_child), \ - INIT_ID(after_in_parent), \ - INIT_ID(aggregate_class), \ - INIT_ID(alias), \ - INIT_ID(align), \ - INIT_ID(all), \ - INIT_ID(all_threads), \ - INIT_ID(allow_code), \ - INIT_ID(any), \ - INIT_ID(append), \ - INIT_ID(arg), \ - INIT_ID(argdefs), \ - INIT_ID(args), \ - INIT_ID(arguments), \ - INIT_ID(argv), \ - INIT_ID(as_integer_ratio), \ - INIT_ID(asend), \ - INIT_ID(ast), \ - INIT_ID(athrow), \ - INIT_ID(attribute), \ - INIT_ID(authorizer_callback), \ - INIT_ID(autocommit), \ - INIT_ID(backtick), \ - INIT_ID(base), \ - INIT_ID(before), \ - INIT_ID(big), \ - INIT_ID(binary_form), \ - INIT_ID(bit_offset), \ - INIT_ID(bit_size), \ - INIT_ID(block), \ - INIT_ID(bound), \ - INIT_ID(buffer), \ - INIT_ID(buffer_callback), \ - INIT_ID(buffer_size), \ - INIT_ID(buffering), \ - INIT_ID(buffers), \ - INIT_ID(bufsize), \ - INIT_ID(builtins), \ - INIT_ID(byte_offset), \ - INIT_ID(byte_size), \ - INIT_ID(byteorder), \ - INIT_ID(bytes), \ - INIT_ID(bytes_per_sep), \ - INIT_ID(c_call), \ - INIT_ID(c_exception), \ - INIT_ID(c_parameter_type), \ - INIT_ID(c_return), \ - INIT_ID(cached_datetime_module), \ - INIT_ID(cached_statements), \ - INIT_ID(cadata), \ - INIT_ID(cafile), \ - INIT_ID(call), \ - INIT_ID(call_exception_handler), \ - INIT_ID(call_soon), \ - INIT_ID(callback), \ - INIT_ID(cancel), \ - INIT_ID(capath), \ - INIT_ID(category), \ - INIT_ID(cb_type), \ - INIT_ID(certfile), \ - INIT_ID(check_same_thread), \ - INIT_ID(clear), \ - INIT_ID(close), \ - INIT_ID(closed), \ - INIT_ID(closefd), \ - INIT_ID(closure), \ - INIT_ID(co_argcount), \ - INIT_ID(co_cellvars), \ - INIT_ID(co_code), \ - INIT_ID(co_consts), \ - INIT_ID(co_exceptiontable), \ - INIT_ID(co_filename), \ - INIT_ID(co_firstlineno), \ - INIT_ID(co_flags), \ - INIT_ID(co_freevars), \ - INIT_ID(co_kwonlyargcount), \ - INIT_ID(co_linetable), \ - INIT_ID(co_name), \ - INIT_ID(co_names), \ - INIT_ID(co_nlocals), \ - INIT_ID(co_posonlyargcount), \ - INIT_ID(co_qualname), \ - INIT_ID(co_stacksize), \ - INIT_ID(co_varnames), \ - INIT_ID(code), \ - INIT_ID(col_offset), \ - INIT_ID(command), \ - INIT_ID(comment_factory), \ - INIT_ID(compile_mode), \ - INIT_ID(consts), \ - INIT_ID(context), \ - INIT_ID(contravariant), \ - INIT_ID(conversion), \ - INIT_ID(cookie), \ - INIT_ID(copy), \ - INIT_ID(copyreg), \ - INIT_ID(coro), \ - INIT_ID(count), \ - INIT_ID(covariant), \ - INIT_ID(cwd), \ - INIT_ID(d_parameter_type), \ - INIT_ID(data), \ - INIT_ID(database), \ - INIT_ID(day), \ - INIT_ID(debug), \ - INIT_ID(decode), \ - INIT_ID(decoder), \ - INIT_ID(default), \ - INIT_ID(defaultaction), \ - INIT_ID(delete), \ - INIT_ID(depth), \ - INIT_ID(desired_access), \ - INIT_ID(detect_types), \ - INIT_ID(deterministic), \ - INIT_ID(device), \ - INIT_ID(dict), \ - INIT_ID(dictcomp), \ - INIT_ID(difference_update), \ - INIT_ID(digest), \ - INIT_ID(digest_size), \ - INIT_ID(digestmod), \ - INIT_ID(dir_fd), \ - INIT_ID(discard), \ - INIT_ID(dispatch_table), \ - INIT_ID(displayhook), \ - INIT_ID(dklen), \ - INIT_ID(doc), \ - INIT_ID(done), \ - INIT_ID(dont_inherit), \ - INIT_ID(dst), \ - INIT_ID(dst_dir_fd), \ - INIT_ID(eager_start), \ - INIT_ID(effective_ids), \ - INIT_ID(element_factory), \ - INIT_ID(encode), \ - INIT_ID(encoding), \ - INIT_ID(end), \ - INIT_ID(end_col_offset), \ - INIT_ID(end_lineno), \ - INIT_ID(end_offset), \ - INIT_ID(endpos), \ - INIT_ID(entrypoint), \ - INIT_ID(env), \ - INIT_ID(errors), \ - INIT_ID(event), \ - INIT_ID(eventmask), \ - INIT_ID(exc_type), \ - INIT_ID(exc_value), \ - INIT_ID(excepthook), \ - INIT_ID(exception), \ - INIT_ID(existing_file_name), \ - INIT_ID(exp), \ - INIT_ID(expression), \ - INIT_ID(extend), \ - INIT_ID(extra_tokens), \ - INIT_ID(facility), \ - INIT_ID(factory), \ - INIT_ID(false), \ - INIT_ID(family), \ - INIT_ID(fanout), \ - INIT_ID(fd), \ - INIT_ID(fd2), \ - INIT_ID(fdel), \ - INIT_ID(fget), \ - INIT_ID(fields), \ - INIT_ID(file), \ - INIT_ID(file_actions), \ - INIT_ID(filename), \ - INIT_ID(fileno), \ - INIT_ID(filepath), \ - INIT_ID(fillvalue), \ - INIT_ID(filter), \ - INIT_ID(filters), \ - INIT_ID(final), \ - INIT_ID(find_class), \ - INIT_ID(fix_imports), \ - INIT_ID(flags), \ - INIT_ID(flush), \ - INIT_ID(fold), \ - INIT_ID(follow_symlinks), \ - INIT_ID(format), \ - INIT_ID(format_spec), \ - INIT_ID(frame_buffer), \ - INIT_ID(from_param), \ - INIT_ID(fromlist), \ - INIT_ID(fromtimestamp), \ - INIT_ID(fromutc), \ - INIT_ID(fset), \ - INIT_ID(func), \ - INIT_ID(future), \ - INIT_ID(generation), \ - INIT_ID(genexpr), \ - INIT_ID(get), \ - INIT_ID(get_debug), \ - INIT_ID(get_event_loop), \ - INIT_ID(get_loop), \ - INIT_ID(get_source), \ - INIT_ID(getattr), \ - INIT_ID(getstate), \ - INIT_ID(gid), \ - INIT_ID(globals), \ - INIT_ID(groupindex), \ - INIT_ID(groups), \ - INIT_ID(handle), \ - INIT_ID(handle_seq), \ - INIT_ID(has_location), \ - INIT_ID(hash_name), \ - INIT_ID(header), \ - INIT_ID(headers), \ - INIT_ID(hi), \ - INIT_ID(hook), \ - INIT_ID(hour), \ - INIT_ID(id), \ - INIT_ID(ident), \ - INIT_ID(identity_hint), \ - INIT_ID(ignore), \ - INIT_ID(imag), \ - INIT_ID(importlib), \ - INIT_ID(in_fd), \ - INIT_ID(incoming), \ - INIT_ID(index), \ - INIT_ID(indexgroup), \ - INIT_ID(inf), \ - INIT_ID(infer_variance), \ - INIT_ID(inherit_handle), \ - INIT_ID(inheritable), \ - INIT_ID(initial), \ - INIT_ID(initial_bytes), \ - INIT_ID(initial_owner), \ - INIT_ID(initial_state), \ - INIT_ID(initial_value), \ - INIT_ID(initval), \ - INIT_ID(inner_size), \ - INIT_ID(input), \ - INIT_ID(insert_comments), \ - INIT_ID(insert_pis), \ - INIT_ID(instructions), \ - INIT_ID(intern), \ - INIT_ID(intersection), \ - INIT_ID(interval), \ - INIT_ID(io), \ - INIT_ID(is_compress), \ - INIT_ID(is_raw), \ - INIT_ID(is_running), \ - INIT_ID(is_struct), \ - INIT_ID(isatty), \ - INIT_ID(isinstance), \ - INIT_ID(isoformat), \ - INIT_ID(isolation_level), \ - INIT_ID(istext), \ - INIT_ID(item), \ - INIT_ID(items), \ - INIT_ID(iter), \ - INIT_ID(iterable), \ - INIT_ID(iterations), \ - INIT_ID(join), \ - INIT_ID(jump), \ - INIT_ID(keepends), \ - INIT_ID(key), \ - INIT_ID(keyfile), \ - INIT_ID(keys), \ - INIT_ID(kind), \ - INIT_ID(kw), \ - INIT_ID(kw1), \ - INIT_ID(kw2), \ - INIT_ID(kwdefaults), \ - INIT_ID(label), \ - INIT_ID(lambda), \ - INIT_ID(last), \ - INIT_ID(last_exc), \ - INIT_ID(last_node), \ - INIT_ID(last_traceback), \ - INIT_ID(last_type), \ - INIT_ID(last_value), \ - INIT_ID(latin1), \ - INIT_ID(leaf_size), \ - INIT_ID(len), \ - INIT_ID(length), \ - INIT_ID(level), \ - INIT_ID(limit), \ - INIT_ID(line), \ - INIT_ID(line_buffering), \ - INIT_ID(lineno), \ - INIT_ID(listcomp), \ - INIT_ID(little), \ - INIT_ID(lo), \ - INIT_ID(locale), \ - INIT_ID(locals), \ - INIT_ID(logoption), \ - INIT_ID(loop), \ - INIT_ID(manual_reset), \ - INIT_ID(mapping), \ - INIT_ID(match), \ - INIT_ID(max_length), \ - INIT_ID(maxdigits), \ - INIT_ID(maxevents), \ - INIT_ID(maxlen), \ - INIT_ID(maxmem), \ - INIT_ID(maxsplit), \ - INIT_ID(maxvalue), \ - INIT_ID(memLevel), \ - INIT_ID(memlimit), \ - INIT_ID(message), \ - INIT_ID(metaclass), \ - INIT_ID(metadata), \ - INIT_ID(method), \ - INIT_ID(microsecond), \ - INIT_ID(milliseconds), \ - INIT_ID(minute), \ - INIT_ID(mod), \ - INIT_ID(mode), \ - INIT_ID(module), \ - INIT_ID(module_globals), \ - INIT_ID(modules), \ - INIT_ID(month), \ - INIT_ID(mro), \ - INIT_ID(msg), \ - INIT_ID(mutex), \ - INIT_ID(mycmp), \ - INIT_ID(n_arg), \ - INIT_ID(n_fields), \ - INIT_ID(n_sequence_fields), \ - INIT_ID(n_unnamed_fields), \ - INIT_ID(name), \ - INIT_ID(name_from), \ - INIT_ID(namespace_separator), \ - INIT_ID(namespaces), \ - INIT_ID(narg), \ - INIT_ID(ndigits), \ - INIT_ID(nested), \ - INIT_ID(new_file_name), \ - INIT_ID(new_limit), \ - INIT_ID(newline), \ - INIT_ID(newlines), \ - INIT_ID(next), \ - INIT_ID(nlocals), \ - INIT_ID(node_depth), \ - INIT_ID(node_offset), \ - INIT_ID(ns), \ - INIT_ID(nstype), \ - INIT_ID(nt), \ - INIT_ID(null), \ - INIT_ID(number), \ - INIT_ID(obj), \ - INIT_ID(object), \ - INIT_ID(offset), \ - INIT_ID(offset_dst), \ - INIT_ID(offset_src), \ - INIT_ID(on_type_read), \ - INIT_ID(onceregistry), \ - INIT_ID(only_active_thread), \ - INIT_ID(only_keys), \ - INIT_ID(oparg), \ - INIT_ID(opcode), \ - INIT_ID(open), \ - INIT_ID(opener), \ - INIT_ID(operation), \ - INIT_ID(optimize), \ - INIT_ID(options), \ - INIT_ID(order), \ - INIT_ID(origin), \ - INIT_ID(out_fd), \ - INIT_ID(outgoing), \ - INIT_ID(outpath), \ - INIT_ID(overlapped), \ - INIT_ID(owner), \ - INIT_ID(pages), \ - INIT_ID(parameter), \ - INIT_ID(parent), \ - INIT_ID(password), \ - INIT_ID(path), \ - INIT_ID(pattern), \ - INIT_ID(peek), \ - INIT_ID(persistent_id), \ - INIT_ID(persistent_load), \ - INIT_ID(person), \ - INIT_ID(pi_factory), \ - INIT_ID(pid), \ - INIT_ID(policy), \ - INIT_ID(pos), \ - INIT_ID(pos1), \ - INIT_ID(pos2), \ - INIT_ID(posix), \ - INIT_ID(print_file_and_line), \ - INIT_ID(priority), \ - INIT_ID(progress), \ - INIT_ID(progress_handler), \ - INIT_ID(progress_routine), \ - INIT_ID(proto), \ - INIT_ID(protocol), \ - INIT_ID(ps1), \ - INIT_ID(ps2), \ - INIT_ID(query), \ - INIT_ID(quotetabs), \ - INIT_ID(raw), \ - INIT_ID(read), \ - INIT_ID(read1), \ - INIT_ID(readable), \ - INIT_ID(readall), \ - INIT_ID(readinto), \ - INIT_ID(readinto1), \ - INIT_ID(readline), \ - INIT_ID(readonly), \ - INIT_ID(real), \ - INIT_ID(reducer_override), \ - INIT_ID(registry), \ - INIT_ID(rel_tol), \ - INIT_ID(release), \ - INIT_ID(reload), \ - INIT_ID(repl), \ - INIT_ID(replace), \ - INIT_ID(reserved), \ - INIT_ID(reset), \ - INIT_ID(resetids), \ - INIT_ID(return), \ - INIT_ID(reverse), \ - INIT_ID(reversed), \ - INIT_ID(salt), \ - INIT_ID(sched_priority), \ - INIT_ID(scheduler), \ - INIT_ID(script), \ - INIT_ID(second), \ - INIT_ID(security_attributes), \ - INIT_ID(seek), \ - INIT_ID(seekable), \ - INIT_ID(selectors), \ - INIT_ID(self), \ - INIT_ID(send), \ - INIT_ID(sep), \ - INIT_ID(sequence), \ - INIT_ID(server_hostname), \ - INIT_ID(server_side), \ - INIT_ID(session), \ - INIT_ID(setcomp), \ - INIT_ID(setpgroup), \ - INIT_ID(setsid), \ - INIT_ID(setsigdef), \ - INIT_ID(setsigmask), \ - INIT_ID(setstate), \ - INIT_ID(shape), \ - INIT_ID(show_cmd), \ - INIT_ID(signed), \ - INIT_ID(size), \ - INIT_ID(sizehint), \ - INIT_ID(skip_file_prefixes), \ - INIT_ID(sleep), \ - INIT_ID(sock), \ - INIT_ID(sort), \ - INIT_ID(source), \ - INIT_ID(source_traceback), \ - INIT_ID(spam), \ - INIT_ID(src), \ - INIT_ID(src_dir_fd), \ - INIT_ID(stacklevel), \ - INIT_ID(start), \ - INIT_ID(statement), \ - INIT_ID(status), \ - INIT_ID(stderr), \ - INIT_ID(stdin), \ - INIT_ID(stdout), \ - INIT_ID(step), \ - INIT_ID(steps), \ - INIT_ID(store_name), \ - INIT_ID(strategy), \ - INIT_ID(strftime), \ - INIT_ID(strict), \ - INIT_ID(strict_mode), \ - INIT_ID(string), \ - INIT_ID(sub_key), \ - INIT_ID(subcalls), \ - INIT_ID(symmetric_difference_update), \ - INIT_ID(tabsize), \ - INIT_ID(tag), \ - INIT_ID(target), \ - INIT_ID(target_is_directory), \ - INIT_ID(task), \ - INIT_ID(tb_frame), \ - INIT_ID(tb_lasti), \ - INIT_ID(tb_lineno), \ - INIT_ID(tb_next), \ - INIT_ID(tell), \ - INIT_ID(template), \ - INIT_ID(term), \ - INIT_ID(text), \ - INIT_ID(threading), \ - INIT_ID(throw), \ - INIT_ID(timeout), \ - INIT_ID(timer), \ - INIT_ID(times), \ - INIT_ID(timetuple), \ - INIT_ID(timeunit), \ - INIT_ID(top), \ - INIT_ID(trace_callback), \ - INIT_ID(traceback), \ - INIT_ID(trailers), \ - INIT_ID(translate), \ - INIT_ID(true), \ - INIT_ID(truncate), \ - INIT_ID(twice), \ - INIT_ID(txt), \ - INIT_ID(type), \ - INIT_ID(type_params), \ - INIT_ID(tz), \ - INIT_ID(tzinfo), \ - INIT_ID(tzname), \ - INIT_ID(uid), \ - INIT_ID(unlink), \ - INIT_ID(unraisablehook), \ - INIT_ID(uri), \ - INIT_ID(usedforsecurity), \ - INIT_ID(value), \ - INIT_ID(values), \ - INIT_ID(version), \ - INIT_ID(volume), \ - INIT_ID(wait_all), \ - INIT_ID(warn_on_full_buffer), \ - INIT_ID(warnings), \ - INIT_ID(warnoptions), \ - INIT_ID(wbits), \ - INIT_ID(week), \ - INIT_ID(weekday), \ - INIT_ID(which), \ - INIT_ID(who), \ - INIT_ID(withdata), \ - INIT_ID(writable), \ - INIT_ID(write), \ - INIT_ID(write_through), \ - INIT_ID(year), \ - INIT_ID(zdict), \ - INIT_ID(zstd_dict), \ -} - -#define _Py_str_ascii_INIT { \ - _PyASCIIObject_INIT("\x00"), \ - _PyASCIIObject_INIT("\x01"), \ - _PyASCIIObject_INIT("\x02"), \ - _PyASCIIObject_INIT("\x03"), \ - _PyASCIIObject_INIT("\x04"), \ - _PyASCIIObject_INIT("\x05"), \ - _PyASCIIObject_INIT("\x06"), \ - _PyASCIIObject_INIT("\x07"), \ - _PyASCIIObject_INIT("\x08"), \ - _PyASCIIObject_INIT("\x09"), \ - _PyASCIIObject_INIT("\x0a"), \ - _PyASCIIObject_INIT("\x0b"), \ - _PyASCIIObject_INIT("\x0c"), \ - _PyASCIIObject_INIT("\x0d"), \ - _PyASCIIObject_INIT("\x0e"), \ - _PyASCIIObject_INIT("\x0f"), \ - _PyASCIIObject_INIT("\x10"), \ - _PyASCIIObject_INIT("\x11"), \ - _PyASCIIObject_INIT("\x12"), \ - _PyASCIIObject_INIT("\x13"), \ - _PyASCIIObject_INIT("\x14"), \ - _PyASCIIObject_INIT("\x15"), \ - _PyASCIIObject_INIT("\x16"), \ - _PyASCIIObject_INIT("\x17"), \ - _PyASCIIObject_INIT("\x18"), \ - _PyASCIIObject_INIT("\x19"), \ - _PyASCIIObject_INIT("\x1a"), \ - _PyASCIIObject_INIT("\x1b"), \ - _PyASCIIObject_INIT("\x1c"), \ - _PyASCIIObject_INIT("\x1d"), \ - _PyASCIIObject_INIT("\x1e"), \ - _PyASCIIObject_INIT("\x1f"), \ - _PyASCIIObject_INIT("\x20"), \ - _PyASCIIObject_INIT("\x21"), \ - _PyASCIIObject_INIT("\x22"), \ - _PyASCIIObject_INIT("\x23"), \ - _PyASCIIObject_INIT("\x24"), \ - _PyASCIIObject_INIT("\x25"), \ - _PyASCIIObject_INIT("\x26"), \ - _PyASCIIObject_INIT("\x27"), \ - _PyASCIIObject_INIT("\x28"), \ - _PyASCIIObject_INIT("\x29"), \ - _PyASCIIObject_INIT("\x2a"), \ - _PyASCIIObject_INIT("\x2b"), \ - _PyASCIIObject_INIT("\x2c"), \ - _PyASCIIObject_INIT("\x2d"), \ - _PyASCIIObject_INIT("\x2e"), \ - _PyASCIIObject_INIT("\x2f"), \ - _PyASCIIObject_INIT("\x30"), \ - _PyASCIIObject_INIT("\x31"), \ - _PyASCIIObject_INIT("\x32"), \ - _PyASCIIObject_INIT("\x33"), \ - _PyASCIIObject_INIT("\x34"), \ - _PyASCIIObject_INIT("\x35"), \ - _PyASCIIObject_INIT("\x36"), \ - _PyASCIIObject_INIT("\x37"), \ - _PyASCIIObject_INIT("\x38"), \ - _PyASCIIObject_INIT("\x39"), \ - _PyASCIIObject_INIT("\x3a"), \ - _PyASCIIObject_INIT("\x3b"), \ - _PyASCIIObject_INIT("\x3c"), \ - _PyASCIIObject_INIT("\x3d"), \ - _PyASCIIObject_INIT("\x3e"), \ - _PyASCIIObject_INIT("\x3f"), \ - _PyASCIIObject_INIT("\x40"), \ - _PyASCIIObject_INIT("\x41"), \ - _PyASCIIObject_INIT("\x42"), \ - _PyASCIIObject_INIT("\x43"), \ - _PyASCIIObject_INIT("\x44"), \ - _PyASCIIObject_INIT("\x45"), \ - _PyASCIIObject_INIT("\x46"), \ - _PyASCIIObject_INIT("\x47"), \ - _PyASCIIObject_INIT("\x48"), \ - _PyASCIIObject_INIT("\x49"), \ - _PyASCIIObject_INIT("\x4a"), \ - _PyASCIIObject_INIT("\x4b"), \ - _PyASCIIObject_INIT("\x4c"), \ - _PyASCIIObject_INIT("\x4d"), \ - _PyASCIIObject_INIT("\x4e"), \ - _PyASCIIObject_INIT("\x4f"), \ - _PyASCIIObject_INIT("\x50"), \ - _PyASCIIObject_INIT("\x51"), \ - _PyASCIIObject_INIT("\x52"), \ - _PyASCIIObject_INIT("\x53"), \ - _PyASCIIObject_INIT("\x54"), \ - _PyASCIIObject_INIT("\x55"), \ - _PyASCIIObject_INIT("\x56"), \ - _PyASCIIObject_INIT("\x57"), \ - _PyASCIIObject_INIT("\x58"), \ - _PyASCIIObject_INIT("\x59"), \ - _PyASCIIObject_INIT("\x5a"), \ - _PyASCIIObject_INIT("\x5b"), \ - _PyASCIIObject_INIT("\x5c"), \ - _PyASCIIObject_INIT("\x5d"), \ - _PyASCIIObject_INIT("\x5e"), \ - _PyASCIIObject_INIT("\x5f"), \ - _PyASCIIObject_INIT("\x60"), \ - _PyASCIIObject_INIT("\x61"), \ - _PyASCIIObject_INIT("\x62"), \ - _PyASCIIObject_INIT("\x63"), \ - _PyASCIIObject_INIT("\x64"), \ - _PyASCIIObject_INIT("\x65"), \ - _PyASCIIObject_INIT("\x66"), \ - _PyASCIIObject_INIT("\x67"), \ - _PyASCIIObject_INIT("\x68"), \ - _PyASCIIObject_INIT("\x69"), \ - _PyASCIIObject_INIT("\x6a"), \ - _PyASCIIObject_INIT("\x6b"), \ - _PyASCIIObject_INIT("\x6c"), \ - _PyASCIIObject_INIT("\x6d"), \ - _PyASCIIObject_INIT("\x6e"), \ - _PyASCIIObject_INIT("\x6f"), \ - _PyASCIIObject_INIT("\x70"), \ - _PyASCIIObject_INIT("\x71"), \ - _PyASCIIObject_INIT("\x72"), \ - _PyASCIIObject_INIT("\x73"), \ - _PyASCIIObject_INIT("\x74"), \ - _PyASCIIObject_INIT("\x75"), \ - _PyASCIIObject_INIT("\x76"), \ - _PyASCIIObject_INIT("\x77"), \ - _PyASCIIObject_INIT("\x78"), \ - _PyASCIIObject_INIT("\x79"), \ - _PyASCIIObject_INIT("\x7a"), \ - _PyASCIIObject_INIT("\x7b"), \ - _PyASCIIObject_INIT("\x7c"), \ - _PyASCIIObject_INIT("\x7d"), \ - _PyASCIIObject_INIT("\x7e"), \ - _PyASCIIObject_INIT("\x7f"), \ -} - -#define _Py_str_latin1_INIT { \ - _PyUnicode_LATIN1_INIT("\x80", "\xc2\x80"), \ - _PyUnicode_LATIN1_INIT("\x81", "\xc2\x81"), \ - _PyUnicode_LATIN1_INIT("\x82", "\xc2\x82"), \ - _PyUnicode_LATIN1_INIT("\x83", "\xc2\x83"), \ - _PyUnicode_LATIN1_INIT("\x84", "\xc2\x84"), \ - _PyUnicode_LATIN1_INIT("\x85", "\xc2\x85"), \ - _PyUnicode_LATIN1_INIT("\x86", "\xc2\x86"), \ - _PyUnicode_LATIN1_INIT("\x87", "\xc2\x87"), \ - _PyUnicode_LATIN1_INIT("\x88", "\xc2\x88"), \ - _PyUnicode_LATIN1_INIT("\x89", "\xc2\x89"), \ - _PyUnicode_LATIN1_INIT("\x8a", "\xc2\x8a"), \ - _PyUnicode_LATIN1_INIT("\x8b", "\xc2\x8b"), \ - _PyUnicode_LATIN1_INIT("\x8c", "\xc2\x8c"), \ - _PyUnicode_LATIN1_INIT("\x8d", "\xc2\x8d"), \ - _PyUnicode_LATIN1_INIT("\x8e", "\xc2\x8e"), \ - _PyUnicode_LATIN1_INIT("\x8f", "\xc2\x8f"), \ - _PyUnicode_LATIN1_INIT("\x90", "\xc2\x90"), \ - _PyUnicode_LATIN1_INIT("\x91", "\xc2\x91"), \ - _PyUnicode_LATIN1_INIT("\x92", "\xc2\x92"), \ - _PyUnicode_LATIN1_INIT("\x93", "\xc2\x93"), \ - _PyUnicode_LATIN1_INIT("\x94", "\xc2\x94"), \ - _PyUnicode_LATIN1_INIT("\x95", "\xc2\x95"), \ - _PyUnicode_LATIN1_INIT("\x96", "\xc2\x96"), \ - _PyUnicode_LATIN1_INIT("\x97", "\xc2\x97"), \ - _PyUnicode_LATIN1_INIT("\x98", "\xc2\x98"), \ - _PyUnicode_LATIN1_INIT("\x99", "\xc2\x99"), \ - _PyUnicode_LATIN1_INIT("\x9a", "\xc2\x9a"), \ - _PyUnicode_LATIN1_INIT("\x9b", "\xc2\x9b"), \ - _PyUnicode_LATIN1_INIT("\x9c", "\xc2\x9c"), \ - _PyUnicode_LATIN1_INIT("\x9d", "\xc2\x9d"), \ - _PyUnicode_LATIN1_INIT("\x9e", "\xc2\x9e"), \ - _PyUnicode_LATIN1_INIT("\x9f", "\xc2\x9f"), \ - _PyUnicode_LATIN1_INIT("\xa0", "\xc2\xa0"), \ - _PyUnicode_LATIN1_INIT("\xa1", "\xc2\xa1"), \ - _PyUnicode_LATIN1_INIT("\xa2", "\xc2\xa2"), \ - _PyUnicode_LATIN1_INIT("\xa3", "\xc2\xa3"), \ - _PyUnicode_LATIN1_INIT("\xa4", "\xc2\xa4"), \ - _PyUnicode_LATIN1_INIT("\xa5", "\xc2\xa5"), \ - _PyUnicode_LATIN1_INIT("\xa6", "\xc2\xa6"), \ - _PyUnicode_LATIN1_INIT("\xa7", "\xc2\xa7"), \ - _PyUnicode_LATIN1_INIT("\xa8", "\xc2\xa8"), \ - _PyUnicode_LATIN1_INIT("\xa9", "\xc2\xa9"), \ - _PyUnicode_LATIN1_INIT("\xaa", "\xc2\xaa"), \ - _PyUnicode_LATIN1_INIT("\xab", "\xc2\xab"), \ - _PyUnicode_LATIN1_INIT("\xac", "\xc2\xac"), \ - _PyUnicode_LATIN1_INIT("\xad", "\xc2\xad"), \ - _PyUnicode_LATIN1_INIT("\xae", "\xc2\xae"), \ - _PyUnicode_LATIN1_INIT("\xaf", "\xc2\xaf"), \ - _PyUnicode_LATIN1_INIT("\xb0", "\xc2\xb0"), \ - _PyUnicode_LATIN1_INIT("\xb1", "\xc2\xb1"), \ - _PyUnicode_LATIN1_INIT("\xb2", "\xc2\xb2"), \ - _PyUnicode_LATIN1_INIT("\xb3", "\xc2\xb3"), \ - _PyUnicode_LATIN1_INIT("\xb4", "\xc2\xb4"), \ - _PyUnicode_LATIN1_INIT("\xb5", "\xc2\xb5"), \ - _PyUnicode_LATIN1_INIT("\xb6", "\xc2\xb6"), \ - _PyUnicode_LATIN1_INIT("\xb7", "\xc2\xb7"), \ - _PyUnicode_LATIN1_INIT("\xb8", "\xc2\xb8"), \ - _PyUnicode_LATIN1_INIT("\xb9", "\xc2\xb9"), \ - _PyUnicode_LATIN1_INIT("\xba", "\xc2\xba"), \ - _PyUnicode_LATIN1_INIT("\xbb", "\xc2\xbb"), \ - _PyUnicode_LATIN1_INIT("\xbc", "\xc2\xbc"), \ - _PyUnicode_LATIN1_INIT("\xbd", "\xc2\xbd"), \ - _PyUnicode_LATIN1_INIT("\xbe", "\xc2\xbe"), \ - _PyUnicode_LATIN1_INIT("\xbf", "\xc2\xbf"), \ - _PyUnicode_LATIN1_INIT("\xc0", "\xc3\x80"), \ - _PyUnicode_LATIN1_INIT("\xc1", "\xc3\x81"), \ - _PyUnicode_LATIN1_INIT("\xc2", "\xc3\x82"), \ - _PyUnicode_LATIN1_INIT("\xc3", "\xc3\x83"), \ - _PyUnicode_LATIN1_INIT("\xc4", "\xc3\x84"), \ - _PyUnicode_LATIN1_INIT("\xc5", "\xc3\x85"), \ - _PyUnicode_LATIN1_INIT("\xc6", "\xc3\x86"), \ - _PyUnicode_LATIN1_INIT("\xc7", "\xc3\x87"), \ - _PyUnicode_LATIN1_INIT("\xc8", "\xc3\x88"), \ - _PyUnicode_LATIN1_INIT("\xc9", "\xc3\x89"), \ - _PyUnicode_LATIN1_INIT("\xca", "\xc3\x8a"), \ - _PyUnicode_LATIN1_INIT("\xcb", "\xc3\x8b"), \ - _PyUnicode_LATIN1_INIT("\xcc", "\xc3\x8c"), \ - _PyUnicode_LATIN1_INIT("\xcd", "\xc3\x8d"), \ - _PyUnicode_LATIN1_INIT("\xce", "\xc3\x8e"), \ - _PyUnicode_LATIN1_INIT("\xcf", "\xc3\x8f"), \ - _PyUnicode_LATIN1_INIT("\xd0", "\xc3\x90"), \ - _PyUnicode_LATIN1_INIT("\xd1", "\xc3\x91"), \ - _PyUnicode_LATIN1_INIT("\xd2", "\xc3\x92"), \ - _PyUnicode_LATIN1_INIT("\xd3", "\xc3\x93"), \ - _PyUnicode_LATIN1_INIT("\xd4", "\xc3\x94"), \ - _PyUnicode_LATIN1_INIT("\xd5", "\xc3\x95"), \ - _PyUnicode_LATIN1_INIT("\xd6", "\xc3\x96"), \ - _PyUnicode_LATIN1_INIT("\xd7", "\xc3\x97"), \ - _PyUnicode_LATIN1_INIT("\xd8", "\xc3\x98"), \ - _PyUnicode_LATIN1_INIT("\xd9", "\xc3\x99"), \ - _PyUnicode_LATIN1_INIT("\xda", "\xc3\x9a"), \ - _PyUnicode_LATIN1_INIT("\xdb", "\xc3\x9b"), \ - _PyUnicode_LATIN1_INIT("\xdc", "\xc3\x9c"), \ - _PyUnicode_LATIN1_INIT("\xdd", "\xc3\x9d"), \ - _PyUnicode_LATIN1_INIT("\xde", "\xc3\x9e"), \ - _PyUnicode_LATIN1_INIT("\xdf", "\xc3\x9f"), \ - _PyUnicode_LATIN1_INIT("\xe0", "\xc3\xa0"), \ - _PyUnicode_LATIN1_INIT("\xe1", "\xc3\xa1"), \ - _PyUnicode_LATIN1_INIT("\xe2", "\xc3\xa2"), \ - _PyUnicode_LATIN1_INIT("\xe3", "\xc3\xa3"), \ - _PyUnicode_LATIN1_INIT("\xe4", "\xc3\xa4"), \ - _PyUnicode_LATIN1_INIT("\xe5", "\xc3\xa5"), \ - _PyUnicode_LATIN1_INIT("\xe6", "\xc3\xa6"), \ - _PyUnicode_LATIN1_INIT("\xe7", "\xc3\xa7"), \ - _PyUnicode_LATIN1_INIT("\xe8", "\xc3\xa8"), \ - _PyUnicode_LATIN1_INIT("\xe9", "\xc3\xa9"), \ - _PyUnicode_LATIN1_INIT("\xea", "\xc3\xaa"), \ - _PyUnicode_LATIN1_INIT("\xeb", "\xc3\xab"), \ - _PyUnicode_LATIN1_INIT("\xec", "\xc3\xac"), \ - _PyUnicode_LATIN1_INIT("\xed", "\xc3\xad"), \ - _PyUnicode_LATIN1_INIT("\xee", "\xc3\xae"), \ - _PyUnicode_LATIN1_INIT("\xef", "\xc3\xaf"), \ - _PyUnicode_LATIN1_INIT("\xf0", "\xc3\xb0"), \ - _PyUnicode_LATIN1_INIT("\xf1", "\xc3\xb1"), \ - _PyUnicode_LATIN1_INIT("\xf2", "\xc3\xb2"), \ - _PyUnicode_LATIN1_INIT("\xf3", "\xc3\xb3"), \ - _PyUnicode_LATIN1_INIT("\xf4", "\xc3\xb4"), \ - _PyUnicode_LATIN1_INIT("\xf5", "\xc3\xb5"), \ - _PyUnicode_LATIN1_INIT("\xf6", "\xc3\xb6"), \ - _PyUnicode_LATIN1_INIT("\xf7", "\xc3\xb7"), \ - _PyUnicode_LATIN1_INIT("\xf8", "\xc3\xb8"), \ - _PyUnicode_LATIN1_INIT("\xf9", "\xc3\xb9"), \ - _PyUnicode_LATIN1_INIT("\xfa", "\xc3\xba"), \ - _PyUnicode_LATIN1_INIT("\xfb", "\xc3\xbb"), \ - _PyUnicode_LATIN1_INIT("\xfc", "\xc3\xbc"), \ - _PyUnicode_LATIN1_INIT("\xfd", "\xc3\xbd"), \ - _PyUnicode_LATIN1_INIT("\xfe", "\xc3\xbe"), \ - _PyUnicode_LATIN1_INIT("\xff", "\xc3\xbf"), \ -} -/* End auto-generated code */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_RUNTIME_INIT_GENERATED_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_runtime_structs.h b/Python314_4_x86_Template/include/internal/pycore_runtime_structs.h deleted file mode 100644 index 78f236a51..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_runtime_structs.h +++ /dev/null @@ -1,320 +0,0 @@ -/* This file contains the struct definitions for the runtime, interpreter - * and thread states, plus all smaller structs contained therein */ - -#ifndef Py_INTERNAL_RUNTIME_STRUCTS_H -#define Py_INTERNAL_RUNTIME_STRUCTS_H -#ifdef __cplusplus -extern "C" { -#endif - -#include "pycore_interp_structs.h" // _PyGC_Head_UNUSED -#include "pycore_obmalloc.h" // struct _obmalloc_global_state - -/************ Runtime state ************/ - -typedef struct { - /* We tag each block with an API ID in order to tag API violations */ - char api_id; - PyMemAllocatorEx alloc; -} debug_alloc_api_t; - -struct _pymem_allocators { - PyMutex mutex; - struct { - PyMemAllocatorEx raw; - PyMemAllocatorEx mem; - PyMemAllocatorEx obj; - } standard; - struct { - debug_alloc_api_t raw; - debug_alloc_api_t mem; - debug_alloc_api_t obj; - } debug; - int is_debug_enabled; - PyObjectArenaAllocator obj_arena; -}; - -enum _py_float_format_type { - _py_float_format_unknown, - _py_float_format_ieee_big_endian, - _py_float_format_ieee_little_endian, -}; - -struct _Py_float_runtime_state { - enum _py_float_format_type float_format; - enum _py_float_format_type double_format; -}; - -struct pyhash_runtime_state { - struct { -#ifndef MS_WINDOWS - int fd; - dev_t st_dev; - ino_t st_ino; -#else - // This is a placeholder so the struct isn't empty on Windows. - int _not_used; -#endif - } urandom_cache; -}; - -#include "pycore_tracemalloc.h" // struct _tracemalloc_runtime_state - -struct _fileutils_state { - int force_ascii; -}; - -#include "pycore_interpframe_structs.h" // _PyInterpreterFrame -#include "pycore_debug_offsets.h" // _Py_DebugOffsets -#include "pycore_signal.h" // struct _signals_runtime_state -#include "pycore_faulthandler.h" // struct _faulthandler_runtime_state -#include "pycore_ast.h" // struct _expr - -#ifdef Py_DEBUG -#define _PYPEGEN_NSTATISTICS 2000 -#endif - -struct _parser_runtime_state { -#ifdef Py_DEBUG - long memo_statistics[_PYPEGEN_NSTATISTICS]; -#ifdef Py_GIL_DISABLED - PyMutex mutex; -#endif -#else - int _not_used; -#endif - struct _expr dummy_name; -}; - -typedef struct { - PyTime_t numer; - PyTime_t denom; -} _PyTimeFraction; - -struct _Py_time_runtime_state { -#if defined(MS_WINDOWS) || defined(__APPLE__) - _PyTimeFraction base; -#else - char _unused; -#endif -}; - - -struct _Py_cached_objects { - // XXX We could statically allocate the hashtable. - _Py_hashtable_t *interned_strings; -}; - -// These would be in pycore_long.h if it weren't for an include cycle. -#define _PY_NSMALLPOSINTS 257 -#define _PY_NSMALLNEGINTS 5 - -#include "pycore_global_strings.h" // struct _Py_global_strings - -struct _Py_static_objects { - struct { - /* 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 (exclusive). - */ - PyLongObject small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS]; - - PyBytesObject bytes_empty; - struct { - PyBytesObject ob; - char eos; - } bytes_characters[256]; - - struct _Py_global_strings strings; - - _PyGC_Head_UNUSED _tuple_empty_gc_not_used; - PyTupleObject tuple_empty; - - _PyGC_Head_UNUSED _hamt_bitmap_node_empty_gc_not_used; - PyHamtNode_Bitmap hamt_bitmap_node_empty; - _PyContextTokenMissing context_token_missing; - } singletons; -}; - -/* Full Python runtime state */ - -/* _PyRuntimeState holds the global state for the CPython runtime. - That data is exported by the internal API as a global variable - (_PyRuntime, defined near the top of pylifecycle.c). - */ -struct pyruntimestate { - /* This field must be first to facilitate locating it by out of process - * debuggers. Out of process debuggers will use the offsets contained in this - * field to be able to locate other fields in several interpreter structures - * in a way that doesn't require them to know the exact layout of those - * structures. - * - * IMPORTANT: - * This struct is **NOT** backwards compatible between minor version of the - * interpreter and the members, order of members and size can change between - * minor versions. This struct is only guaranteed to be stable between patch - * versions for a given minor version of the interpreter. - */ - _Py_DebugOffsets debug_offsets; - - /* Has been initialized to a safe state. - - In order to be effective, this must be set to 0 during or right - after allocation. */ - int _initialized; - - /* 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. */ - PyThreadState *_finalizing; - /* The ID of the OS thread in which we are finalizing. */ - unsigned long _finalizing_id; - - struct pyinterpreters { - PyMutex mutex; - /* The linked list of interpreters, newest first. */ - PyInterpreterState *head; - /* The runtime's initial interpreter, which has a special role - in the operation of the runtime. It is also often the only - interpreter. */ - PyInterpreterState *main; - /* next_id is an auto-numbered sequence of small - integers. It gets initialized in _PyInterpreterState_Enable(), - 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; - - /* Platform-specific identifier and PyThreadState, respectively, for the - main thread in the main interpreter. */ - unsigned long main_thread; - PyThreadState *main_tstate; - - /* ---------- IMPORTANT --------------------------- - The fields above this line are declared as early as - possible to facilitate out-of-process observability - tools. */ - - /* cross-interpreter data and utils */ - _PyXI_global_state_t xi; - - struct _pymem_allocators allocators; - struct _obmalloc_global_state obmalloc; - struct pyhash_runtime_state pyhash_state; - struct _pythread_runtime_state threads; - struct _signals_runtime_state signals; - - /* Used for the thread state bound to the current thread. */ - Py_tss_t autoTSSkey; - - /* Used instead of PyThreadState.trash when there is not current tstate. */ - Py_tss_t trashTSSkey; - - PyWideStringList orig_argv; - - struct _parser_runtime_state parser; - - struct _atexit_runtime_state atexit; - - struct _import_runtime_state imports; - struct _ceval_runtime_state ceval; - struct _gilstate_runtime_state { - /* bpo-26558: Flag to disable PyGILState_Check(). - If set to non-zero, PyGILState_Check() always return 1. */ - int check_enabled; - /* The single PyInterpreterState used by this process' - GILState implementation - */ - /* TODO: Given interp_main, it may be possible to kill this ref */ - PyInterpreterState *autoInterpreterState; - } gilstate; - struct _getargs_runtime_state { - struct _PyArg_Parser *static_parsers; - } getargs; - struct _fileutils_state fileutils; - struct _faulthandler_runtime_state faulthandler; - struct _tracemalloc_runtime_state tracemalloc; - struct _reftracer_runtime_state ref_tracer; - - // The rwmutex is used to prevent overlapping global and per-interpreter - // stop-the-world events. Global stop-the-world events lock the mutex - // exclusively (as a "writer"), while per-interpreter stop-the-world events - // lock it non-exclusively (as "readers"). - _PyRWMutex stoptheworld_mutex; - struct _stoptheworld_state stoptheworld; - - PyPreConfig preconfig; - - // Audit values must be preserved when Py_Initialize()/Py_Finalize() - // is called multiple times. - Py_OpenCodeHookFunction open_code_hook; - void *open_code_userdata; - struct { - PyMutex mutex; - struct _Py_AuditHookEntry *head; - } audit_hooks; - - struct _py_object_runtime_state object_state; - struct _Py_float_runtime_state float_state; - struct _Py_unicode_runtime_state unicode_state; - struct _types_runtime_state types; - struct _Py_time_runtime_state time; - -#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) - // Used in "Python/emscripten_trampoline.c" to choose between wasm-gc - // trampoline and JavaScript trampoline. - PyObject* (*emscripten_trampoline)(int* success, - PyCFunctionWithKeywords func, - PyObject* self, - PyObject* args, - PyObject* kw); -#endif - - /* All the objects that are shared by the runtime's interpreters. */ - struct _Py_cached_objects cached_objects; - struct _Py_static_objects static_objects; - - /* The following fields are here to avoid allocation during init. - The data is exposed through _PyRuntimeState pointer fields. - These fields should not be accessed directly outside of init. - - All other _PyRuntimeState pointer fields are populated when - needed and default to NULL. - - For now there are some exceptions to that rule, which require - allocation during init. These will be addressed on a case-by-case - basis. Most notably, we don't pre-allocated the several mutex - (PyThread_type_lock) fields, because on Windows we only ever get - a pointer type. - */ - - /* _PyRuntimeState.interpreters.main */ - PyInterpreterState _main_interpreter; - // _main_interpreter should be the last field of _PyRuntimeState. - // See https://github.com/python/cpython/issues/127117. -}; - - -#ifdef __cplusplus -} -#endif -#endif /* Py_INTERNAL_RUNTIME_STRUCTS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_semaphore.h b/Python314_4_x86_Template/include/internal/pycore_semaphore.h deleted file mode 100644 index 269538384..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_semaphore.h +++ /dev/null @@ -1,67 +0,0 @@ -// The _PySemaphore API a simplified cross-platform semaphore used to implement -// wakeup/sleep. -#ifndef Py_INTERNAL_SEMAPHORE_H -#define Py_INTERNAL_SEMAPHORE_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_pythread.h" // _POSIX_SEMAPHORES - -#ifdef MS_WINDOWS -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include <windows.h> -#elif defined(HAVE_PTHREAD_H) -# include <pthread.h> -#elif defined(HAVE_PTHREAD_STUBS) -# include "cpython/pthread_stubs.h" -#else -# error "Require native threads. See https://bugs.python.org/issue31370" -#endif - -#if (defined(_POSIX_SEMAPHORES) && (_POSIX_SEMAPHORES+0) != -1 && \ - defined(HAVE_SEM_TIMEDWAIT)) -# define _Py_USE_SEMAPHORES -# include <semaphore.h> -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _PySemaphore { -#if defined(MS_WINDOWS) - HANDLE platform_sem; -#elif defined(_Py_USE_SEMAPHORES) - sem_t platform_sem; -#else - pthread_mutex_t mutex; - pthread_cond_t cond; - int counter; -#endif -} _PySemaphore; - -// Puts the current thread to sleep until _PySemaphore_Wakeup() is called. -// If `detach` is true, then the thread will detach/release the GIL while -// sleeping. -PyAPI_FUNC(int) -_PySemaphore_Wait(_PySemaphore *sema, PyTime_t timeout_ns, int detach); - -// Wakes up a single thread waiting on sema. Note that _PySemaphore_Wakeup() -// can be called before _PySemaphore_Wait(). -PyAPI_FUNC(void) -_PySemaphore_Wakeup(_PySemaphore *sema); - -// Initializes/destroys a semaphore -PyAPI_FUNC(void) _PySemaphore_Init(_PySemaphore *sema); -PyAPI_FUNC(void) _PySemaphore_Destroy(_PySemaphore *sema); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_SEMAPHORE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_setobject.h b/Python314_4_x86_Template/include/internal/pycore_setobject.h deleted file mode 100644 index 24d0135ed..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_setobject.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef Py_INTERNAL_SETOBJECT_H -#define Py_INTERNAL_SETOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Export for '_abc' shared extension -PyAPI_FUNC(int) _PySet_NextEntry( - PyObject *set, - Py_ssize_t *pos, - PyObject **key, - Py_hash_t *hash); - -// Export for '_pickle' shared extension -PyAPI_FUNC(int) _PySet_NextEntryRef( - PyObject *set, - Py_ssize_t *pos, - PyObject **key, - Py_hash_t *hash); - -// Export for '_pickle' shared extension -PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); - -// Export for the gdb plugin's (python-gdb.py) benefit -PyAPI_DATA(PyObject *) _PySet_Dummy; - -PyAPI_FUNC(int) _PySet_Contains(PySetObject *so, PyObject *key); - -// Clears the set without acquiring locks. Used by _PyCode_Fini. -extern void _PySet_ClearInternal(PySetObject *so); - -PyAPI_FUNC(int) _PySet_AddTakeRef(PySetObject *so, PyObject *key); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_SETOBJECT_H diff --git a/Python314_4_x86_Template/include/internal/pycore_signal.h b/Python314_4_x86_Template/include/internal/pycore_signal.h deleted file mode 100644 index 47213a34a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_signal.h +++ /dev/null @@ -1,108 +0,0 @@ -// Define Py_NSIG constant for signal handling. - -#ifndef Py_INTERNAL_SIGNAL_H -#define Py_INTERNAL_SIGNAL_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include <signal.h> // NSIG - - -// Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. -// Export for '_posixsubprocess' shared extension. -PyAPI_FUNC(void) _Py_RestoreSignals(void); - -#ifdef _SIG_MAXSIG - // gh-91145: On FreeBSD, <signal.h> defines NSIG as 32: it doesn't include - // realtime signals: [SIGRTMIN,SIGRTMAX]. Use _SIG_MAXSIG instead. For - // example on x86-64 FreeBSD 13, SIGRTMAX is 126 and _SIG_MAXSIG is 128. -# define Py_NSIG _SIG_MAXSIG -#elif defined(NSIG) -# define Py_NSIG NSIG -#elif defined(_NSIG) -# define Py_NSIG _NSIG // BSD/SysV -#elif defined(_SIGMAX) -# define Py_NSIG (_SIGMAX + 1) // QNX -#elif defined(SIGMAX) -# define Py_NSIG (SIGMAX + 1) // djgpp -#else -# define Py_NSIG 64 // Use a reasonable default value -#endif - -#define INVALID_FD (-1) - -struct _signals_runtime_state { - struct { - // tripped and func should be accessed using atomic ops. - int tripped; - PyObject* func; - } handlers[Py_NSIG]; - - volatile struct { -#ifdef MS_WINDOWS - /* This would be "SOCKET fd" if <winsock2.h> were always included. - It isn't so we must cast to SOCKET where appropriate. */ - volatile int fd; -#elif defined(__VXWORKS__) - int fd; -#else - sig_atomic_t fd; -#endif - - int warn_on_full_buffer; -#ifdef MS_WINDOWS - int use_send; -#endif - } wakeup; - - /* Speed up sigcheck() when none tripped. - is_tripped should be accessed using atomic ops. */ - int is_tripped; - - /* These objects necessarily belong to the main interpreter. */ - PyObject *default_handler; - PyObject *ignore_handler; - -#ifdef MS_WINDOWS - /* This would be "HANDLE sigint_event" if <windows.h> were always included. - It isn't so we must cast to HANDLE everywhere "sigint_event" is used. */ - void *sigint_event; -#endif - - /* True if the main interpreter thread exited due to an unhandled - * KeyboardInterrupt exception, suggesting the user pressed ^C. */ - int unhandled_keyboard_interrupt; -}; - -#ifdef MS_WINDOWS -# define _signals_WAKEUP_INIT \ - {.fd = INVALID_FD, .warn_on_full_buffer = 1, .use_send = 0} -#else -# define _signals_WAKEUP_INIT \ - {.fd = INVALID_FD, .warn_on_full_buffer = 1} -#endif - -#define _signals_RUNTIME_INIT \ - { \ - .wakeup = _signals_WAKEUP_INIT, \ - } - - -// Export for '_multiprocessing' shared extension -PyAPI_FUNC(int) _PyOS_IsMainThread(void); - -#ifdef MS_WINDOWS -// <windows.h> is not included by Python.h so use void* instead of HANDLE. -// Export for '_multiprocessing' shared extension -PyAPI_FUNC(void*) _PyOS_SigintEvent(void); -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_SIGNAL_H diff --git a/Python314_4_x86_Template/include/internal/pycore_sliceobject.h b/Python314_4_x86_Template/include/internal/pycore_sliceobject.h deleted file mode 100644 index ba8b1f1cb..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_sliceobject.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef Py_INTERNAL_SLICEOBJECT_H -#define Py_INTERNAL_SLICEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* runtime lifecycle */ - -PyAPI_FUNC(PyObject *) -_PyBuildSlice_ConsumeRefs(PyObject *start, PyObject *stop); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_SLICEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_stackref.h b/Python314_4_x86_Template/include/internal/pycore_stackref.h deleted file mode 100644 index 42fdbeb21..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_stackref.h +++ /dev/null @@ -1,838 +0,0 @@ -#ifndef Py_INTERNAL_STACKREF_H -#define Py_INTERNAL_STACKREF_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_object.h" // Py_DECREF_MORTAL -#include "pycore_object_deferred.h" // _PyObject_HasDeferredRefcount() - -#include <stdbool.h> // bool - - -/* - This file introduces a new API for handling references on the stack, called - _PyStackRef. This API is inspired by HPy. - - There are 3 main operations, that convert _PyStackRef to PyObject* and - vice versa: - - 1. Borrow (discouraged) - 2. Steal - 3. New - - Borrow means that the reference is converted without any change in ownership. - This is discouraged because it makes verification much harder. It also makes - unboxed integers harder in the future. - - Steal means that ownership is transferred to something else. The total - number of references to the object stays the same. The old reference is no - longer valid. - - New creates a new reference from the old reference. The old reference - is still valid. - - All _PyStackRef must be operated on by the new reference operations: - - 1. DUP - 2. CLOSE - - DUP is roughly equivalent to Py_NewRef. It creates a new reference from an old - reference. The old reference remains unchanged. - - CLOSE is roughly equivalent to Py_DECREF. It destroys a reference. - - Note that it is unsafe to borrow a _PyStackRef and then do normal - CPython refcounting operations on it! -*/ - - -#if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) - -#define Py_TAG_BITS 0 - -PyAPI_FUNC(PyObject *) _Py_stackref_get_object(_PyStackRef ref); -PyAPI_FUNC(PyObject *) _Py_stackref_close(_PyStackRef ref, const char *filename, int linenumber); -PyAPI_FUNC(_PyStackRef) _Py_stackref_create(PyObject *obj, const char *filename, int linenumber); -PyAPI_FUNC(void) _Py_stackref_record_borrow(_PyStackRef ref, const char *filename, int linenumber); -extern void _Py_stackref_associate(PyInterpreterState *interp, PyObject *obj, _PyStackRef ref); - -static const _PyStackRef PyStackRef_NULL = { .index = 0 }; - -// Use the first 3 even numbers for None, True and False. -// Odd numbers are reserved for (tagged) integers -#define PyStackRef_None ((_PyStackRef){ .index = 2 } ) -#define PyStackRef_False ((_PyStackRef){ .index = 4 }) -#define PyStackRef_True ((_PyStackRef){ .index = 6 }) - -#define INITIAL_STACKREF_INDEX 8 - -static inline int -PyStackRef_IsNull(_PyStackRef ref) -{ - return ref.index == 0; -} - -static inline int -PyStackRef_IsTrue(_PyStackRef ref) -{ - return _Py_stackref_get_object(ref) == Py_True; -} - -static inline int -PyStackRef_IsFalse(_PyStackRef ref) -{ - return _Py_stackref_get_object(ref) == Py_False; -} - -static inline int -PyStackRef_IsNone(_PyStackRef ref) -{ - return _Py_stackref_get_object(ref) == Py_None; -} - -static inline PyObject * -_PyStackRef_AsPyObjectBorrow(_PyStackRef ref, const char *filename, int linenumber) -{ - assert((ref.index & 1) == 0); - _Py_stackref_record_borrow(ref, filename, linenumber); - return _Py_stackref_get_object(ref); -} - -#define PyStackRef_AsPyObjectBorrow(REF) _PyStackRef_AsPyObjectBorrow((REF), __FILE__, __LINE__) - -static inline PyObject * -_PyStackRef_AsPyObjectSteal(_PyStackRef ref, const char *filename, int linenumber) -{ - return _Py_stackref_close(ref, filename, linenumber); -} -#define PyStackRef_AsPyObjectSteal(REF) _PyStackRef_AsPyObjectSteal((REF), __FILE__, __LINE__) - -static inline _PyStackRef -_PyStackRef_FromPyObjectNew(PyObject *obj, const char *filename, int linenumber) -{ - Py_INCREF(obj); - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj), __FILE__, __LINE__) - -static inline _PyStackRef -_PyStackRef_FromPyObjectSteal(PyObject *obj, const char *filename, int linenumber) -{ - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectSteal(obj) _PyStackRef_FromPyObjectSteal(_PyObject_CAST(obj), __FILE__, __LINE__) - -static inline _PyStackRef -_PyStackRef_FromPyObjectBorrow(PyObject *obj, const char *filename, int linenumber) -{ - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectBorrow(obj) _PyStackRef_FromPyObjectBorrow(_PyObject_CAST(obj), __FILE__, __LINE__) - -static inline _PyStackRef -_PyStackRef_FromPyObjectImmortal(PyObject *obj, const char *filename, int linenumber) -{ - assert(_Py_IsImmortal(obj)); - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectImmortal(obj) _PyStackRef_FromPyObjectImmortal(_PyObject_CAST(obj), __FILE__, __LINE__) - -static inline bool -PyStackRef_IsTaggedInt(_PyStackRef ref) -{ - return (ref.index & 1) == 1; -} - -static inline void -_PyStackRef_CLOSE(_PyStackRef ref, const char *filename, int linenumber) -{ - if (PyStackRef_IsTaggedInt(ref)) { - return; - } - PyObject *obj = _Py_stackref_close(ref, filename, linenumber); - Py_DECREF(obj); -} -#define PyStackRef_CLOSE(REF) _PyStackRef_CLOSE((REF), __FILE__, __LINE__) - - -static inline void -_PyStackRef_XCLOSE(_PyStackRef ref, const char *filename, int linenumber) -{ - if (PyStackRef_IsNull(ref)) { - return; - } - _PyStackRef_CLOSE(ref, filename, linenumber); -} -#define PyStackRef_XCLOSE(REF) _PyStackRef_XCLOSE((REF), __FILE__, __LINE__) - -static inline _PyStackRef -_PyStackRef_DUP(_PyStackRef ref, const char *filename, int linenumber) -{ - if (PyStackRef_IsTaggedInt(ref)) { - return ref; - } - else { - PyObject *obj = _Py_stackref_get_object(ref); - Py_INCREF(obj); - return _Py_stackref_create(obj, filename, linenumber); - } -} -#define PyStackRef_DUP(REF) _PyStackRef_DUP(REF, __FILE__, __LINE__) - -extern void _PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct, const char *filename, int linenumber); -#define PyStackRef_CLOSE_SPECIALIZED(REF, DESTRUCT) _PyStackRef_CLOSE_SPECIALIZED(REF, DESTRUCT, __FILE__, __LINE__) - -static inline _PyStackRef -PyStackRef_MakeHeapSafe(_PyStackRef ref) -{ - return ref; -} - -static inline _PyStackRef -PyStackRef_Borrow(_PyStackRef ref) -{ - return PyStackRef_DUP(ref); -} - -#define PyStackRef_CLEAR(REF) \ - do { \ - _PyStackRef *_tmp_op_ptr = &(REF); \ - _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \ - *_tmp_op_ptr = PyStackRef_NULL; \ - PyStackRef_XCLOSE(_tmp_old_op); \ - } while (0) - -static inline _PyStackRef -_PyStackRef_FromPyObjectStealMortal(PyObject *obj, const char *filename, int linenumber) -{ - assert(!_Py_IsImmortal(obj)); - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectStealMortal(obj) _PyStackRef_FromPyObjectStealMortal(_PyObject_CAST(obj), __FILE__, __LINE__) - -static inline bool -PyStackRef_IsHeapSafe(_PyStackRef ref) -{ - return true; -} - -static inline _PyStackRef -_PyStackRef_FromPyObjectNewMortal(PyObject *obj, const char *filename, int linenumber) -{ - assert(!_Py_IsStaticImmortal(obj)); - Py_INCREF(obj); - return _Py_stackref_create(obj, filename, linenumber); -} -#define PyStackRef_FromPyObjectNewMortal(obj) _PyStackRef_FromPyObjectNewMortal(_PyObject_CAST(obj), __FILE__, __LINE__) - -#define PyStackRef_RefcountOnObject(REF) 1 - -extern int PyStackRef_Is(_PyStackRef a, _PyStackRef b); - -extern bool PyStackRef_IsTaggedInt(_PyStackRef ref); - -extern intptr_t PyStackRef_UntagInt(_PyStackRef ref); - -extern _PyStackRef PyStackRef_TagInt(intptr_t i); - -extern bool -PyStackRef_IsNullOrInt(_PyStackRef ref); - -#else - -#define Py_INT_TAG 3 -#define Py_TAG_REFCNT 1 - -static inline bool -PyStackRef_IsTaggedInt(_PyStackRef i) -{ - return (i.bits & Py_INT_TAG) == Py_INT_TAG; -} - -static inline _PyStackRef -PyStackRef_TagInt(intptr_t i) -{ - assert(Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, (i << 2), 2) == i); - return (_PyStackRef){ .bits = ((((uintptr_t)i) << 2) | Py_INT_TAG) }; -} - -static inline intptr_t -PyStackRef_UntagInt(_PyStackRef i) -{ - assert((i.bits & Py_INT_TAG) == Py_INT_TAG); - intptr_t val = (intptr_t)i.bits; - return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, val, 2); -} - - -#ifdef Py_GIL_DISABLED - -#define Py_TAG_DEFERRED Py_TAG_REFCNT - -#define Py_TAG_PTR ((uintptr_t)0) -#define Py_TAG_BITS ((uintptr_t)1) - - -static const _PyStackRef PyStackRef_NULL = { .bits = Py_TAG_DEFERRED}; -#define PyStackRef_IsNull(stackref) ((stackref).bits == PyStackRef_NULL.bits) -#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_DEFERRED }) -#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_DEFERRED }) -#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_DEFERRED }) - -// Checks that mask out the deferred bit in the free threading build. -#define PyStackRef_IsNone(ref) (PyStackRef_AsPyObjectBorrow(ref) == Py_None) -#define PyStackRef_IsTrue(ref) (PyStackRef_AsPyObjectBorrow(ref) == Py_True) -#define PyStackRef_IsFalse(ref) (PyStackRef_AsPyObjectBorrow(ref) == Py_False) - -#define PyStackRef_IsNullOrInt(stackref) (PyStackRef_IsNull(stackref) || PyStackRef_IsTaggedInt(stackref)) - -static inline PyObject * -PyStackRef_AsPyObjectBorrow(_PyStackRef stackref) -{ - PyObject *cleared = ((PyObject *)((stackref).bits & (~Py_TAG_BITS))); - return cleared; -} - -#define PyStackRef_IsDeferred(ref) (((ref).bits & Py_TAG_BITS) == Py_TAG_DEFERRED) - -static inline PyObject * -PyStackRef_NotDeferred_AsPyObject(_PyStackRef stackref) -{ - assert(!PyStackRef_IsDeferred(stackref)); - return (PyObject *)stackref.bits; -} - -static inline PyObject * -PyStackRef_AsPyObjectSteal(_PyStackRef stackref) -{ - assert(!PyStackRef_IsNull(stackref)); - if (PyStackRef_IsDeferred(stackref)) { - return Py_NewRef(PyStackRef_AsPyObjectBorrow(stackref)); - } - return PyStackRef_AsPyObjectBorrow(stackref); -} - -static inline _PyStackRef -_PyStackRef_FromPyObjectSteal(PyObject *obj) -{ - assert(obj != NULL); - // Make sure we don't take an already tagged value. - assert(((uintptr_t)obj & Py_TAG_BITS) == 0); - return (_PyStackRef){ .bits = (uintptr_t)obj }; -} -# define PyStackRef_FromPyObjectSteal(obj) _PyStackRef_FromPyObjectSteal(_PyObject_CAST(obj)) - -static inline _PyStackRef -PyStackRef_FromPyObjectBorrow(PyObject *obj) -{ - assert(obj != NULL); - assert(((uintptr_t)obj & Py_TAG_BITS) == 0); - return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_DEFERRED }; -} - -static inline bool -PyStackRef_IsHeapSafe(_PyStackRef stackref) -{ - if (PyStackRef_IsDeferred(stackref) && !PyStackRef_IsTaggedInt(stackref)) { - PyObject *obj = PyStackRef_AsPyObjectBorrow(stackref); - return obj == NULL || _Py_IsImmortal(obj) || _PyObject_HasDeferredRefcount(obj); - } - return true; -} - -static inline _PyStackRef -PyStackRef_MakeHeapSafe(_PyStackRef stackref) -{ - if (PyStackRef_IsHeapSafe(stackref)) { - return stackref; - } - PyObject *obj = PyStackRef_AsPyObjectBorrow(stackref); - return (_PyStackRef){ .bits = (uintptr_t)(Py_NewRef(obj)) | Py_TAG_PTR }; -} - -static inline _PyStackRef -PyStackRef_FromPyObjectStealMortal(PyObject *obj) -{ - assert(obj != NULL); - assert(!_Py_IsImmortal(obj)); - // Make sure we don't take an already tagged value. - assert(((uintptr_t)obj & Py_TAG_BITS) == 0); - return (_PyStackRef){ .bits = (uintptr_t)obj }; -} - -static inline _PyStackRef -PyStackRef_FromPyObjectNew(PyObject *obj) -{ - // Make sure we don't take an already tagged value. - assert(((uintptr_t)obj & Py_TAG_BITS) == 0); - assert(obj != NULL); - if (_PyObject_HasDeferredRefcount(obj)) { - return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_DEFERRED }; - } - else { - return (_PyStackRef){ .bits = (uintptr_t)(Py_NewRef(obj)) | Py_TAG_PTR }; - } -} -#define PyStackRef_FromPyObjectNew(obj) PyStackRef_FromPyObjectNew(_PyObject_CAST(obj)) - -static inline _PyStackRef -PyStackRef_FromPyObjectImmortal(PyObject *obj) -{ - // Make sure we don't take an already tagged value. - assert(((uintptr_t)obj & Py_TAG_BITS) == 0); - assert(obj != NULL); - assert(_Py_IsImmortal(obj)); - return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_DEFERRED }; -} -#define PyStackRef_FromPyObjectImmortal(obj) PyStackRef_FromPyObjectImmortal(_PyObject_CAST(obj)) - -#define PyStackRef_CLOSE(REF) \ - do { \ - _PyStackRef _close_tmp = (REF); \ - assert(!PyStackRef_IsNull(_close_tmp)); \ - if (!PyStackRef_IsDeferred(_close_tmp)) { \ - Py_DECREF(PyStackRef_AsPyObjectBorrow(_close_tmp)); \ - } \ - } while (0) - -static inline void -PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct) -{ - (void)destruct; - PyStackRef_CLOSE(ref); -} - -static inline _PyStackRef -PyStackRef_DUP(_PyStackRef stackref) -{ - assert(!PyStackRef_IsNull(stackref)); - if (PyStackRef_IsDeferred(stackref)) { - return stackref; - } - Py_INCREF(PyStackRef_AsPyObjectBorrow(stackref)); - return stackref; -} - -static inline _PyStackRef -PyStackRef_Borrow(_PyStackRef stackref) -{ - return (_PyStackRef){ .bits = stackref.bits | Py_TAG_DEFERRED }; -} - -// Convert a possibly deferred reference to a strong reference. -static inline _PyStackRef -PyStackRef_AsStrongReference(_PyStackRef stackref) -{ - return PyStackRef_FromPyObjectSteal(PyStackRef_AsPyObjectSteal(stackref)); -} - -#define PyStackRef_XCLOSE(stackref) \ - do { \ - _PyStackRef _tmp = (stackref); \ - if (!PyStackRef_IsNull(_tmp)) { \ - PyStackRef_CLOSE(_tmp); \ - } \ - } while (0); - -#define PyStackRef_CLEAR(op) \ - do { \ - _PyStackRef *_tmp_op_ptr = &(op); \ - _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \ - if (!PyStackRef_IsNull(_tmp_old_op)) { \ - *_tmp_op_ptr = PyStackRef_NULL; \ - PyStackRef_CLOSE(_tmp_old_op); \ - } \ - } while (0) - -#define PyStackRef_FromPyObjectNewMortal PyStackRef_FromPyObjectNew - -#else // Py_GIL_DISABLED - -// With GIL - -/* References to immortal objects always have their tag bit set to Py_TAG_REFCNT - * as they can (must) have their reclamation deferred */ - -#define Py_TAG_BITS 3 -#if _Py_IMMORTAL_FLAGS != Py_TAG_REFCNT -# error "_Py_IMMORTAL_FLAGS != Py_TAG_REFCNT" -#endif - -#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits)) -#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT))) - -#define PyStackRef_NULL_BITS Py_TAG_REFCNT -static const _PyStackRef PyStackRef_NULL = { .bits = PyStackRef_NULL_BITS }; - -#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS) -#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT }) -#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT }) -#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT }) - -#define PyStackRef_IsTrue(REF) ((REF).bits == (((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT)) -#define PyStackRef_IsFalse(REF) ((REF).bits == (((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT)) -#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT)) - -#ifdef Py_DEBUG - -static inline void PyStackRef_CheckValid(_PyStackRef ref) { - assert(ref.bits != 0); - int tag = ref.bits & Py_TAG_BITS; - PyObject *obj = BITS_TO_PTR_MASKED(ref); - switch (tag) { - case 0: - /* Can be immortal if object was made immortal after reference came into existence */ - assert(!_Py_IsStaticImmortal(obj)); - break; - case Py_TAG_REFCNT: - break; - default: - assert(0); - } -} - -#else - -#define PyStackRef_CheckValid(REF) ((void)0) - -#endif - -#ifdef _WIN32 -#define PyStackRef_RefcountOnObject(REF) (((REF).bits & Py_TAG_REFCNT) == 0) -#define PyStackRef_AsPyObjectBorrow BITS_TO_PTR_MASKED -#define PyStackRef_Borrow(REF) (_PyStackRef){ .bits = ((REF).bits) | Py_TAG_REFCNT}; -#else -/* Does this ref not have an embedded refcount and thus not refer to a declared immmortal object? */ -static inline int -PyStackRef_RefcountOnObject(_PyStackRef ref) -{ - return (ref.bits & Py_TAG_REFCNT) == 0; -} - -static inline PyObject * -PyStackRef_AsPyObjectBorrow(_PyStackRef ref) -{ - assert(!PyStackRef_IsTaggedInt(ref)); - return BITS_TO_PTR_MASKED(ref); -} - -static inline _PyStackRef -PyStackRef_Borrow(_PyStackRef ref) -{ - return (_PyStackRef){ .bits = ref.bits | Py_TAG_REFCNT }; -} -#endif - -static inline PyObject * -PyStackRef_AsPyObjectSteal(_PyStackRef ref) -{ - if (PyStackRef_RefcountOnObject(ref)) { - return BITS_TO_PTR(ref); - } - else { - return Py_NewRef(BITS_TO_PTR_MASKED(ref)); - } -} - -static inline _PyStackRef -PyStackRef_FromPyObjectSteal(PyObject *obj) -{ - assert(obj != NULL); -#if SIZEOF_VOID_P > 4 - unsigned int tag = obj->ob_flags & Py_TAG_REFCNT; -#else - unsigned int tag = _Py_IsImmortal(obj) ? Py_TAG_REFCNT : 0; -#endif - _PyStackRef ref = ((_PyStackRef){.bits = ((uintptr_t)(obj)) | tag}); - PyStackRef_CheckValid(ref); - return ref; -} - -static inline _PyStackRef -PyStackRef_FromPyObjectBorrow(PyObject *obj) -{ - assert(obj != NULL); - return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT }; -} - -static inline _PyStackRef -PyStackRef_FromPyObjectStealMortal(PyObject *obj) -{ - assert(obj != NULL); - assert(!_Py_IsImmortal(obj)); - _PyStackRef ref = ((_PyStackRef){.bits = ((uintptr_t)(obj)) }); - PyStackRef_CheckValid(ref); - return ref; -} - -static inline _PyStackRef -_PyStackRef_FromPyObjectNew(PyObject *obj) -{ - assert(obj != NULL); - if (_Py_IsImmortal(obj)) { - return (_PyStackRef){ .bits = ((uintptr_t)obj) | Py_TAG_REFCNT}; - } - _Py_INCREF_MORTAL(obj); - _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj }; - PyStackRef_CheckValid(ref); - return ref; -} -#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj)) - -static inline _PyStackRef -_PyStackRef_FromPyObjectNewMortal(PyObject *obj) -{ - assert(obj != NULL); - _Py_INCREF_MORTAL(obj); - _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj }; - PyStackRef_CheckValid(ref); - return ref; -} -#define PyStackRef_FromPyObjectNewMortal(obj) _PyStackRef_FromPyObjectNewMortal(_PyObject_CAST(obj)) - -/* Create a new reference from an object with an embedded reference count */ -static inline _PyStackRef -PyStackRef_FromPyObjectImmortal(PyObject *obj) -{ - assert(_Py_IsImmortal(obj)); - return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT}; -} - -/* WARNING: This macro evaluates its argument more than once */ -#ifdef _WIN32 -#define PyStackRef_DUP(REF) \ - (PyStackRef_RefcountOnObject(REF) ? (_Py_INCREF_MORTAL(BITS_TO_PTR(REF)), (REF)) : (REF)) -#else -static inline _PyStackRef -PyStackRef_DUP(_PyStackRef ref) -{ - assert(!PyStackRef_IsNull(ref)); - if (PyStackRef_RefcountOnObject(ref)) { - _Py_INCREF_MORTAL(BITS_TO_PTR(ref)); - } - return ref; -} -#endif - -static inline bool -PyStackRef_IsHeapSafe(_PyStackRef ref) -{ - return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref)); -} - -static inline _PyStackRef -PyStackRef_MakeHeapSafe(_PyStackRef ref) -{ - if (PyStackRef_IsHeapSafe(ref)) { - return ref; - } - PyObject *obj = BITS_TO_PTR_MASKED(ref); - Py_INCREF(obj); - ref.bits = (uintptr_t)obj; - PyStackRef_CheckValid(ref); - return ref; -} - -#ifdef _WIN32 -#define PyStackRef_CLOSE(REF) \ -do { \ - _PyStackRef _temp = (REF); \ - if (PyStackRef_RefcountOnObject(_temp)) Py_DECREF_MORTAL(BITS_TO_PTR(_temp)); \ -} while (0) -#else -static inline void -PyStackRef_CLOSE(_PyStackRef ref) -{ - assert(!PyStackRef_IsNull(ref)); - if (PyStackRef_RefcountOnObject(ref)) { - Py_DECREF_MORTAL(BITS_TO_PTR(ref)); - } -} -#endif - -static inline bool -PyStackRef_IsNullOrInt(_PyStackRef ref) -{ - return PyStackRef_IsNull(ref) || PyStackRef_IsTaggedInt(ref); -} - -static inline void -PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct) -{ - assert(!PyStackRef_IsNull(ref)); - if (PyStackRef_RefcountOnObject(ref)) { - Py_DECREF_MORTAL_SPECIALIZED(BITS_TO_PTR(ref), destruct); - } -} - -#ifdef _WIN32 -#define PyStackRef_XCLOSE PyStackRef_CLOSE -#else -static inline void -PyStackRef_XCLOSE(_PyStackRef ref) -{ - assert(ref.bits != 0); - if (PyStackRef_RefcountOnObject(ref)) { - assert(!PyStackRef_IsNull(ref)); - Py_DECREF_MORTAL(BITS_TO_PTR(ref)); - } -} -#endif - -#define PyStackRef_CLEAR(REF) \ - do { \ - _PyStackRef *_tmp_op_ptr = &(REF); \ - _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \ - *_tmp_op_ptr = PyStackRef_NULL; \ - PyStackRef_XCLOSE(_tmp_old_op); \ - } while (0) - - -#endif // Py_GIL_DISABLED - -// Note: this is a macro because MSVC (Windows) has trouble inlining it. - -#define PyStackRef_Is(a, b) (((a).bits & (~Py_TAG_REFCNT)) == ((b).bits & (~Py_TAG_REFCNT))) - - -#endif // !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) - -#define PyStackRef_TYPE(stackref) Py_TYPE(PyStackRef_AsPyObjectBorrow(stackref)) - -// Converts a PyStackRef back to a PyObject *, converting the -// stackref to a new reference. -#define PyStackRef_AsPyObjectNew(stackref) Py_NewRef(PyStackRef_AsPyObjectBorrow(stackref)) - -// StackRef type checks - -static inline bool -PyStackRef_GenCheck(_PyStackRef stackref) -{ - return PyGen_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline bool -PyStackRef_BoolCheck(_PyStackRef stackref) -{ - return PyBool_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline bool -PyStackRef_LongCheck(_PyStackRef stackref) -{ - return PyLong_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline bool -PyStackRef_ExceptionInstanceCheck(_PyStackRef stackref) -{ - return PyExceptionInstance_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline bool -PyStackRef_CodeCheck(_PyStackRef stackref) -{ - return PyCode_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline bool -PyStackRef_FunctionCheck(_PyStackRef stackref) -{ - return PyFunction_Check(PyStackRef_AsPyObjectBorrow(stackref)); -} - -static inline void -_PyThreadState_PushCStackRef(PyThreadState *tstate, _PyCStackRef *ref) -{ -#ifdef Py_GIL_DISABLED - _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate; - ref->next = tstate_impl->c_stack_refs; - tstate_impl->c_stack_refs = ref; -#endif - ref->ref = PyStackRef_NULL; -} - -static inline void -_PyThreadState_PushCStackRefNew(PyThreadState *tstate, _PyCStackRef *ref, PyObject *obj) -{ - _PyThreadState_PushCStackRef(tstate, ref); - ref->ref = PyStackRef_FromPyObjectNew(obj); -} - -static inline void -_PyThreadState_PopCStackRef(PyThreadState *tstate, _PyCStackRef *ref) -{ -#ifdef Py_GIL_DISABLED - _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate; - assert(tstate_impl->c_stack_refs == ref); - tstate_impl->c_stack_refs = ref->next; -#endif - PyStackRef_XCLOSE(ref->ref); -} - -static inline _PyStackRef -_PyThreadState_PopCStackRefSteal(PyThreadState *tstate, _PyCStackRef *ref) -{ -#ifdef Py_GIL_DISABLED - _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate; - assert(tstate_impl->c_stack_refs == ref); - tstate_impl->c_stack_refs = ref->next; -#endif - return ref->ref; -} - -#ifdef Py_GIL_DISABLED - -static inline int -_Py_TryIncrefCompareStackRef(PyObject **src, PyObject *op, _PyStackRef *out) -{ - if (_PyObject_HasDeferredRefcount(op)) { - *out = (_PyStackRef){ .bits = (uintptr_t)op | Py_TAG_DEFERRED }; - return 1; - } - if (_Py_TryIncrefCompare(src, op)) { - *out = PyStackRef_FromPyObjectSteal(op); - return 1; - } - return 0; -} - -static inline int -_Py_TryXGetStackRef(PyObject **src, _PyStackRef *out) -{ - PyObject *op = _PyObject_CAST(_Py_atomic_load_ptr_relaxed(src)); - if (op == NULL) { - *out = PyStackRef_NULL; - return 1; - } - return _Py_TryIncrefCompareStackRef(src, op, out); -} - -#endif - -#define PyStackRef_XSETREF(dst, src) \ - do { \ - _PyStackRef _tmp_dst_ref = (dst); \ - (dst) = (src); \ - PyStackRef_XCLOSE(_tmp_dst_ref); \ - } while(0) - -// Like Py_VISIT but for _PyStackRef fields -#define _Py_VISIT_STACKREF(ref) \ - do { \ - if (!PyStackRef_IsNullOrInt(ref)) { \ - int vret = _PyGC_VisitStackRef(&(ref), visit, arg); \ - if (vret) \ - return vret; \ - } \ - } while (0) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_STACKREF_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_stats.h b/Python314_4_x86_Template/include/internal/pycore_stats.h deleted file mode 100644 index 24f239a21..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_stats.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef Py_INTERNAL_STATS_H -#define Py_INTERNAL_STATS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_structs.h" // - - -#ifdef Py_STATS - -#include "pycore_bitutils.h" // _Py_bit_length - -#define STAT_INC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name++; } while (0) -#define STAT_DEC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name--; } while (0) -#define OPCODE_EXE_INC(opname) do { if (_Py_stats) _Py_stats->opcode_stats[opname].execution_count++; } while (0) -#define CALL_STAT_INC(name) do { if (_Py_stats) _Py_stats->call_stats.name++; } while (0) -#define OBJECT_STAT_INC(name) do { if (_Py_stats) _Py_stats->object_stats.name++; } while (0) -#define OBJECT_STAT_INC_COND(name, cond) \ - do { if (_Py_stats && cond) _Py_stats->object_stats.name++; } while (0) -#define EVAL_CALL_STAT_INC(name) do { if (_Py_stats) _Py_stats->call_stats.eval_calls[name]++; } while (0) -#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) \ - do { if (_Py_stats && PyFunction_Check(callable)) _Py_stats->call_stats.eval_calls[name]++; } while (0) -#define GC_STAT_ADD(gen, name, n) do { if (_Py_stats) _Py_stats->gc_stats[(gen)].name += (n); } while (0) -#define OPT_STAT_INC(name) do { if (_Py_stats) _Py_stats->optimization_stats.name++; } while (0) -#define OPT_STAT_ADD(name, n) do { if (_Py_stats) _Py_stats->optimization_stats.name += (n); } while (0) -#define UOP_STAT_INC(opname, name) do { if (_Py_stats) { assert(opname < 512); _Py_stats->optimization_stats.opcode[opname].name++; } } while (0) -#define UOP_PAIR_INC(uopcode, lastuop) \ - do { \ - if (lastuop && _Py_stats) { \ - _Py_stats->optimization_stats.opcode[lastuop].pair_count[uopcode]++; \ - } \ - lastuop = uopcode; \ - } while (0) -#define OPT_UNSUPPORTED_OPCODE(opname) do { if (_Py_stats) _Py_stats->optimization_stats.unsupported_opcode[opname]++; } while (0) -#define OPT_ERROR_IN_OPCODE(opname) do { if (_Py_stats) _Py_stats->optimization_stats.error_in_opcode[opname]++; } while (0) -#define OPT_HIST(length, name) \ - do { \ - if (_Py_stats) { \ - int bucket = _Py_bit_length(length >= 1 ? length - 1 : 0); \ - bucket = (bucket >= _Py_UOP_HIST_SIZE) ? _Py_UOP_HIST_SIZE - 1 : bucket; \ - _Py_stats->optimization_stats.name[bucket]++; \ - } \ - } while (0) -#define RARE_EVENT_STAT_INC(name) do { if (_Py_stats) _Py_stats->rare_event_stats.name++; } while (0) -#define OPCODE_DEFERRED_INC(opname) do { if (_Py_stats && opcode == opname) _Py_stats->opcode_stats[opname].specialization.deferred++; } while (0) - -// Export for '_opcode' shared extension -PyAPI_FUNC(PyObject*) _Py_GetSpecializationStats(void); - -#else -#define STAT_INC(opname, name) ((void)0) -#define STAT_DEC(opname, name) ((void)0) -#define OPCODE_EXE_INC(opname) ((void)0) -#define CALL_STAT_INC(name) ((void)0) -#define OBJECT_STAT_INC(name) ((void)0) -#define OBJECT_STAT_INC_COND(name, cond) ((void)0) -#define EVAL_CALL_STAT_INC(name) ((void)0) -#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0) -#define GC_STAT_ADD(gen, name, n) ((void)0) -#define OPT_STAT_INC(name) ((void)0) -#define OPT_STAT_ADD(name, n) ((void)0) -#define UOP_STAT_INC(opname, name) ((void)0) -#define UOP_PAIR_INC(uopcode, lastuop) ((void)0) -#define OPT_UNSUPPORTED_OPCODE(opname) ((void)0) -#define OPT_ERROR_IN_OPCODE(opname) ((void)0) -#define OPT_HIST(length, name) ((void)0) -#define RARE_EVENT_STAT_INC(name) ((void)0) -#define OPCODE_DEFERRED_INC(opname) ((void)0) -#endif // !Py_STATS - - -#define RARE_EVENT_INTERP_INC(interp, name) \ - do { \ - /* saturating add */ \ - uint8_t val = FT_ATOMIC_LOAD_UINT8_RELAXED(interp->rare_events.name); \ - if (val < UINT8_MAX) { \ - FT_ATOMIC_STORE_UINT8(interp->rare_events.name, val + 1); \ - } \ - RARE_EVENT_STAT_INC(name); \ - } while (0); \ - -#define RARE_EVENT_INC(name) \ - do { \ - PyInterpreterState *interp = PyInterpreterState_Get(); \ - RARE_EVENT_INTERP_INC(interp, name); \ - } while (0); \ - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_STATS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_strhex.h b/Python314_4_x86_Template/include/internal/pycore_strhex.h deleted file mode 100644 index 225f42391..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_strhex.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef Py_INTERNAL_STRHEX_H -#define Py_INTERNAL_STRHEX_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Returns a str() containing the hex representation of argbuf. -// Export for '_hashlib' shared extension. -PyAPI_FUNC(PyObject*) _Py_strhex(const - char* argbuf, - const Py_ssize_t arglen); - -// Returns a bytes() containing the ASCII hex representation of argbuf. -extern PyObject* _Py_strhex_bytes( - const char* argbuf, - const Py_ssize_t arglen); - -// These variants include support for a separator between every N bytes: -extern PyObject* _Py_strhex_with_sep( - const char* argbuf, - const Py_ssize_t arglen, - PyObject* sep, - const int bytes_per_group); - -// Export for 'binascii' shared extension -PyAPI_FUNC(PyObject*) _Py_strhex_bytes_with_sep( - const char* argbuf, - const Py_ssize_t arglen, - PyObject* sep, - const int bytes_per_group); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_STRHEX_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_structs.h b/Python314_4_x86_Template/include/internal/pycore_structs.h deleted file mode 100644 index 0d5f5dc7a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_structs.h +++ /dev/null @@ -1,88 +0,0 @@ -/* This files contains various key structs that are widely used - * and do not depend on other headers. */ - -#ifndef Py_INTERNAL_STRUCTS_H -#define Py_INTERNAL_STRUCTS_H -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdint.h> // uint16_t - - -typedef struct { - uint16_t value_and_backoff; -} _Py_BackoffCounter; - -/* Each instruction in a code object is a fixed-width value, - * currently 2 bytes: 1-byte opcode + 1-byte oparg. The EXTENDED_ARG - * opcode allows for larger values but the current limit is 3 uses - * of EXTENDED_ARG (see Python/compile.c), for a maximum - * 32-bit value. This aligns with the note in Python/compile.c - * (compiler_addop_i_line) indicating that the max oparg value is - * 2**32 - 1, rather than INT_MAX. - */ -typedef union { - uint16_t cache; - struct { - uint8_t code; - uint8_t arg; - } op; - _Py_BackoffCounter counter; // First cache entry of specializable op -} _Py_CODEUNIT; - - -/* Abstract tree node. */ -typedef struct { - PyObject_HEAD -} PyHamtNode; - - -/* An HAMT immutable mapping collection. */ -typedef struct { - PyObject_HEAD - PyHamtNode *h_root; - PyObject *h_weakreflist; - Py_ssize_t h_count; -} PyHamtObject; - -typedef struct { - PyObject_VAR_HEAD - uint32_t b_bitmap; - PyObject *b_array[1]; -} PyHamtNode_Bitmap; - -#include "pycore_context.h" // _PyContextTokenMissing - -// Define this to get precise tracking of stackrefs. -// #define Py_STACKREF_DEBUG 1 - -// Define this to get precise tracking of closed stackrefs. -// This will use unbounded memory, as it can only grow. -// Use this to track double closes in short-lived programs -// #define Py_STACKREF_CLOSE_DEBUG 1 - - -typedef union _PyStackRef { -#if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) - uint64_t index; -#else - uintptr_t bits; -#endif -} _PyStackRef; - -// A stackref that can be stored in a regular C local variable and be visible -// to the GC in the free threading build. -// Used in combination with _PyThreadState_PushCStackRef(). -typedef struct _PyCStackRef { - _PyStackRef ref; -#ifdef Py_GIL_DISABLED - struct _PyCStackRef *next; -#endif -} _PyCStackRef; - - -#ifdef __cplusplus -} -#endif -#endif /* Py_INTERNAL_STRUCTS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_structseq.h b/Python314_4_x86_Template/include/internal/pycore_structseq.h deleted file mode 100644 index 5cff16562..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_structseq.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef Py_INTERNAL_STRUCTSEQ_H -#define Py_INTERNAL_STRUCTSEQ_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - - -/* other API */ - -// Export for '_curses' shared extension -PyAPI_FUNC(PyTypeObject*) _PyStructSequence_NewType( - PyStructSequence_Desc *desc, - unsigned long tp_flags); - -extern int _PyStructSequence_InitBuiltinWithFlags( - PyInterpreterState *interp, - PyTypeObject *type, - PyStructSequence_Desc *desc, - unsigned long tp_flags); - -static inline int -_PyStructSequence_InitBuiltin(PyInterpreterState *interp, - PyTypeObject *type, - PyStructSequence_Desc *desc) -{ - return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0); -} - -extern void _PyStructSequence_FiniBuiltin( - PyInterpreterState *interp, - PyTypeObject *type); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_STRUCTSEQ_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_symtable.h b/Python314_4_x86_Template/include/internal/pycore_symtable.h deleted file mode 100644 index 98099b4a4..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_symtable.h +++ /dev/null @@ -1,201 +0,0 @@ -#ifndef Py_INTERNAL_SYMTABLE_H -#define Py_INTERNAL_SYMTABLE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -struct _mod; // Type defined in pycore_ast.h - -typedef enum _block_type { - FunctionBlock, ClassBlock, ModuleBlock, - // Used for annotations. If 'from __future__ import annotations' is active, - // annotation blocks cannot bind names and are not evaluated. Otherwise, they - // are lazily evaluated (see PEP 649). - AnnotationBlock, - - // The following blocks are used for generics and type aliases. These work - // mostly like functions (see PEP 695 for details). The three different - // blocks function identically; they are different enum entries only so - // that error messages can be more precise. - - // The block to enter when processing a "type" (PEP 695) construction, - // e.g., "type MyGeneric[T] = list[T]". - TypeAliasBlock, - // The block to enter when processing a "generic" (PEP 695) object, - // e.g., "def foo[T](): pass" or "class A[T]: pass". - TypeParametersBlock, - // The block to enter when processing the bound, the constraint tuple - // or the default value of a single "type variable" in the formal sense, - // i.e., a TypeVar, a TypeVarTuple or a ParamSpec object (the latter two - // do not support a bound or a constraint tuple). - TypeVariableBlock, -} _Py_block_ty; - -typedef enum _comprehension_type { - NoComprehension = 0, - ListComprehension = 1, - DictComprehension = 2, - SetComprehension = 3, - GeneratorExpression = 4 } _Py_comprehension_ty; - -/* source location information */ -typedef struct { - int lineno; - int end_lineno; - int col_offset; - int end_col_offset; -} _Py_SourceLocation; - -#define SRC_LOCATION_FROM_AST(n) \ - (_Py_SourceLocation){ \ - .lineno = (n)->lineno, \ - .end_lineno = (n)->end_lineno, \ - .col_offset = (n)->col_offset, \ - .end_col_offset = (n)->end_col_offset } - -static const _Py_SourceLocation NO_LOCATION = {-1, -1, -1, -1}; -static const _Py_SourceLocation NEXT_LOCATION = {-2, -2, -2, -2}; - -/* __future__ information */ -typedef struct { - int ff_features; /* flags set by future statements */ - _Py_SourceLocation ff_location; /* location of last future statement */ -} _PyFutureFeatures; - -struct _symtable_entry; - -struct symtable { - PyObject *st_filename; /* name of file being compiled, - decoded from the filesystem encoding */ - struct _symtable_entry *st_cur; /* current symbol table entry */ - struct _symtable_entry *st_top; /* symbol table entry for module */ - PyObject *st_blocks; /* dict: map AST node addresses - * to symbol table entries */ - PyObject *st_stack; /* list: stack of namespace info */ - PyObject *st_global; /* borrowed ref to st_top->ste_symbols */ - int st_nblocks; /* number of blocks used. kept for - consistency with the corresponding - compiler structure */ - PyObject *st_private; /* name of current class or NULL */ - _PyFutureFeatures *st_future; /* module's future features that affect - the symbol table */ -}; - -typedef struct _symtable_entry { - PyObject_HEAD - PyObject *ste_id; /* int: key in ste_table->st_blocks */ - PyObject *ste_symbols; /* dict: variable names to flags */ - PyObject *ste_name; /* string: name of current block */ - PyObject *ste_varnames; /* list of function parameters */ - PyObject *ste_children; /* list of child blocks */ - PyObject *ste_directives;/* locations of global and nonlocal statements */ - PyObject *ste_mangled_names; /* set of names for which mangling should be applied */ - - _Py_block_ty ste_type; - // Optional string set by symtable.c and used when reporting errors. - // The content of that string is a description of the current "context". - // - // For instance, if we are processing the default value of the type - // variable "T" in "def foo[T = int](): pass", `ste_scope_info` is - // set to "a TypeVar default". - const char *ste_scope_info; - - int ste_nested; /* true if block is nested */ - unsigned ste_generator : 1; /* true if namespace is a generator */ - unsigned ste_coroutine : 1; /* true if namespace is a coroutine */ - unsigned ste_annotations_used : 1; /* true if there are any annotations in this scope */ - _Py_comprehension_ty ste_comprehension; /* Kind of comprehension (if any) */ - unsigned ste_varargs : 1; /* true if block has varargs */ - unsigned ste_varkeywords : 1; /* true if block has varkeywords */ - unsigned ste_returns_value : 1; /* true if namespace uses return with - an argument */ - unsigned ste_needs_class_closure : 1; /* for class scopes, true if a - closure over __class__ - should be created */ - unsigned ste_needs_classdict : 1; /* for class scopes, true if a closure - over the class dict should be created */ - unsigned ste_comp_inlined : 1; /* true if this comprehension is inlined */ - unsigned ste_comp_iter_target : 1; /* true if visiting comprehension target */ - unsigned ste_can_see_class_scope : 1; /* true if this block can see names bound in an - enclosing class scope */ - unsigned ste_has_docstring : 1; /* true if docstring present */ - unsigned ste_method : 1; /* true if block is a function block defined in class scope */ - unsigned ste_has_conditional_annotations : 1; /* true if block has conditionally executed annotations */ - unsigned ste_in_conditional_block : 1; /* set while we are inside a conditionally executed block */ - unsigned ste_in_unevaluated_annotation : 1; /* set while we are processing an annotation that will not be evaluated */ - int ste_comp_iter_expr; /* non-zero if visiting a comprehension range expression */ - _Py_SourceLocation ste_loc; /* source location of block */ - struct _symtable_entry *ste_annotation_block; /* symbol table entry for this entry's annotations */ - struct symtable *ste_table; -} PySTEntryObject; - -extern PyTypeObject PySTEntry_Type; - -#define PySTEntry_Check(op) Py_IS_TYPE((op), &PySTEntry_Type) - -extern long _PyST_GetSymbol(PySTEntryObject *, PyObject *); -extern int _PyST_GetScope(PySTEntryObject *, PyObject *); -extern int _PyST_IsFunctionLike(PySTEntryObject *); - -extern struct symtable* _PySymtable_Build( - struct _mod *mod, - PyObject *filename, - _PyFutureFeatures *future); -extern PySTEntryObject* _PySymtable_Lookup(struct symtable *, void *); -extern int _PySymtable_LookupOptional(struct symtable *, void *, PySTEntryObject **); - -extern void _PySymtable_Free(struct symtable *); - -extern PyObject *_Py_MaybeMangle(PyObject *privateobj, PySTEntryObject *ste, PyObject *name); -extern PyObject* _Py_Mangle(PyObject *p, PyObject *name); - -/* Flags for def-use information */ - -#define DEF_GLOBAL 1 /* global stmt */ -#define DEF_LOCAL 2 /* assignment in code block */ -#define DEF_PARAM (2<<1) /* formal parameter */ -#define DEF_NONLOCAL (2<<2) /* nonlocal stmt */ -#define USE (2<<3) /* name is used */ -#define DEF_FREE_CLASS (2<<5) /* free variable from class's method */ -#define DEF_IMPORT (2<<6) /* assignment occurred via import */ -#define DEF_ANNOT (2<<7) /* this name is annotated */ -#define DEF_COMP_ITER (2<<8) /* this name is a comprehension iteration variable */ -#define DEF_TYPE_PARAM (2<<9) /* this name is a type parameter */ -#define DEF_COMP_CELL (2<<10) /* this name is a cell in an inlined comprehension */ - -#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT) - -/* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol - table. GLOBAL is returned from _PyST_GetScope() for either of them. - It is stored in ste_symbols at bits 13-16. -*/ -#define SCOPE_OFFSET 12 -#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL) -#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK) - -#define LOCAL 1 -#define GLOBAL_EXPLICIT 2 -#define GLOBAL_IMPLICIT 3 -#define FREE 4 -#define CELL 5 - -// Used by symtablemodule.c -extern struct symtable* _Py_SymtableStringObjectFlags( - const char *str, - PyObject *filename, - int start, - PyCompilerFlags *flags); - -int _PyFuture_FromAST( - struct _mod * mod, - PyObject *filename, - _PyFutureFeatures* futures); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_SYMTABLE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_sysmodule.h b/Python314_4_x86_Template/include/internal/pycore_sysmodule.h deleted file mode 100644 index 008a2da0d..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_sysmodule.h +++ /dev/null @@ -1,32 +0,0 @@ -#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_GetOptionalAttr(PyObject *, PyObject **); -PyAPI_FUNC(int) _PySys_GetOptionalAttrString(const char *, PyObject **); -PyAPI_FUNC(PyObject *) _PySys_GetRequiredAttr(PyObject *); -PyAPI_FUNC(PyObject *) _PySys_GetRequiredAttrString(const char *); - -// Export for '_pickle' shared extension -PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *); - -extern int _PySys_SetAttr(PyObject *, PyObject *); - -extern int _PySys_ClearAttrString(PyInterpreterState *interp, - const char *name, int verbose); - -extern int _PySys_SetFlagObj(Py_ssize_t pos, PyObject *new_value); -extern int _PySys_SetIntMaxStrDigits(int maxdigits); - -extern int _PySysRemoteDebug_SendExec(int pid, int tid, const char *debugger_script_path); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_SYSMODULE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_template.h b/Python314_4_x86_Template/include/internal/pycore_template.h deleted file mode 100644 index f2f8bf991..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_template.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_INTERNAL_TEMPLATE_H -#define Py_INTERNAL_TEMPLATE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyTypeObject _PyTemplate_Type; -extern PyTypeObject _PyTemplateIter_Type; - -#define _PyTemplate_CheckExact(op) Py_IS_TYPE((op), &_PyTemplate_Type) -#define _PyTemplateIter_CheckExact(op) Py_IS_TYPE((op), &_PyTemplateIter_Type) - -extern PyObject *_PyTemplate_Concat(PyObject *self, PyObject *other); - -PyAPI_FUNC(PyObject *) _PyTemplate_Build(PyObject *strings, PyObject *interpolations); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Python314_4_x86_Template/include/internal/pycore_time.h b/Python314_4_x86_Template/include/internal/pycore_time.h deleted file mode 100644 index 23312471c..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_time.h +++ /dev/null @@ -1,334 +0,0 @@ -// Internal PyTime_t C API: see Doc/c-api/time.rst for the documentation. -// -// The PyTime_t type is an integer to support directly common arithmetic -// operations such as t1 + t2. -// -// Time formats: -// -// * Seconds. -// * Seconds as a floating-point number (C double). -// * Milliseconds (10^-3 seconds). -// * Microseconds (10^-6 seconds). -// * 100 nanoseconds (10^-7 seconds), used on Windows. -// * Nanoseconds (10^-9 seconds). -// * timeval structure, 1 microsecond (10^-6 seconds). -// * timespec structure, 1 nanosecond (10^-9 seconds). -// -// Note that PyTime_t is now specified as int64_t, in nanoseconds. -// (If we need to change this, we'll need new public API with new names.) -// Previously, PyTime_t was configurable (in theory); some comments and code -// might still allude to that. -// -// Integer overflows are detected and raise OverflowError. Conversion to a -// resolution larger than 1 nanosecond is rounded correctly with the requested -// rounding mode. Available rounding modes: -// -// * Round towards minus infinity (-inf). For example, used to read a clock. -// * Round towards infinity (+inf). For example, used for timeout to wait "at -// least" N seconds. -// * Round to nearest with ties going to nearest even integer. For example, used -// to round from a Python float. -// * Round away from zero. For example, used for timeout. -// -// Some functions clamp the result in the range [PyTime_MIN; PyTime_MAX]. The -// caller doesn't have to handle errors and so doesn't need to hold the GIL to -// handle exceptions. For example, _PyTime_Add(t1, t2) computes t1+t2 and -// clamps the result on overflow. -// -// Clocks: -// -// * System clock -// * Monotonic clock -// * Performance counter -// -// Internally, operations like (t * k / q) with integers are implemented in a -// way to reduce the risk of integer overflow. Such operation is used to convert a -// clock value expressed in ticks with a frequency to PyTime_t, like -// QueryPerformanceCounter() with QueryPerformanceFrequency() on Windows. - - -#ifndef Py_INTERNAL_TIME_H -#define Py_INTERNAL_TIME_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_runtime_structs.h" // _PyTimeFraction - -#ifdef __clang__ -struct timeval; -#endif - -#define _SIZEOF_PYTIME_T 8 - -typedef enum { - // Round towards minus infinity (-inf). - // For example, used to read a clock. - _PyTime_ROUND_FLOOR=0, - - // Round towards infinity (+inf). - // For example, used for timeout to wait "at least" N seconds. - _PyTime_ROUND_CEILING=1, - - // Round to nearest with ties going to nearest even integer. - // For example, used to round from a Python float. - _PyTime_ROUND_HALF_EVEN=2, - - // Round away from zero - // For example, used for timeout. _PyTime_ROUND_CEILING rounds - // -1e-9 to 0 milliseconds which causes bpo-31786 issue. - // _PyTime_ROUND_UP rounds -1e-9 to -1 millisecond which keeps - // the timeout sign as expected. select.poll(timeout) must block - // for negative values. - _PyTime_ROUND_UP=3, - - // _PyTime_ROUND_TIMEOUT (an alias for _PyTime_ROUND_UP) should be - // used for timeouts. - _PyTime_ROUND_TIMEOUT = _PyTime_ROUND_UP -} _PyTime_round_t; - - -// Convert a time_t to a PyLong. -// Export for '_testinternalcapi' shared extension -PyAPI_FUNC(PyObject*) _PyLong_FromTime_t(time_t sec); - -// Convert a PyLong to a time_t. -// Export for '_datetime' shared extension -PyAPI_FUNC(time_t) _PyLong_AsTime_t(PyObject *obj); - -// Convert a number of seconds, int or float, to time_t. -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyTime_ObjectToTime_t( - PyObject *obj, - time_t *sec, - _PyTime_round_t); - -// Convert a number of seconds, int or float, to a timeval structure. -// usec is in the range [0; 999999] and rounded towards zero. -// For example, -1.2 is converted to (-2, 800000). -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyTime_ObjectToTimeval( - PyObject *obj, - time_t *sec, - long *usec, - _PyTime_round_t); - -// Convert a number of seconds, int or float, to a timespec structure. -// nsec is in the range [0; 999999999] and rounded towards zero. -// For example, -1.2 is converted to (-2, 800000000). -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(int) _PyTime_ObjectToTimespec( - PyObject *obj, - time_t *sec, - long *nsec, - _PyTime_round_t); - - -// Create a timestamp from a number of seconds. -// Export for '_socket' shared extension. -PyAPI_FUNC(PyTime_t) _PyTime_FromSeconds(int seconds); - -// Create a timestamp from a number of seconds in double. -extern int _PyTime_FromSecondsDouble( - double seconds, - _PyTime_round_t round, - PyTime_t *result); - -// Macro to create a timestamp from a number of seconds, no integer overflow. -// Only use the macro for small values, prefer _PyTime_FromSeconds(). -#define _PYTIME_FROMSECONDS(seconds) \ - ((PyTime_t)(seconds) * (1000 * 1000 * 1000)) - -// Create a timestamp from a number of microseconds. -// Clamp to [PyTime_MIN; PyTime_MAX] on overflow. -extern PyTime_t _PyTime_FromMicrosecondsClamp(PyTime_t us); - -// Create a timestamp from a Python int object (number of nanoseconds). -// Export for '_lsprof' shared extension. -PyAPI_FUNC(int) _PyTime_FromLong(PyTime_t *t, - PyObject *obj); - -// Convert a number of seconds (Python float or int) to a timestamp. -// Raise an exception and return -1 on error, return 0 on success. -// Export for '_socket' shared extension. -PyAPI_FUNC(int) _PyTime_FromSecondsObject(PyTime_t *t, - PyObject *obj, - _PyTime_round_t round); - -// Convert a number of milliseconds (Python float or int, 10^-3) to a timestamp. -// Raise an exception and return -1 on error, return 0 on success. -// Export for 'select' shared extension. -PyAPI_FUNC(int) _PyTime_FromMillisecondsObject(PyTime_t *t, - PyObject *obj, - _PyTime_round_t round); - -// Convert timestamp to a number of milliseconds (10^-3 seconds). -// Export for '_ssl' shared extension. -PyAPI_FUNC(PyTime_t) _PyTime_AsMilliseconds(PyTime_t t, - _PyTime_round_t round); - -// Convert timestamp to a number of microseconds (10^-6 seconds). -// Export for '_queue' shared extension. -PyAPI_FUNC(PyTime_t) _PyTime_AsMicroseconds(PyTime_t t, - _PyTime_round_t round); - -#ifdef MS_WINDOWS -// Convert timestamp to a number of 100 nanoseconds (10^-7 seconds). -extern PyTime_t _PyTime_As100Nanoseconds(PyTime_t t, - _PyTime_round_t round); -#endif - -// Convert a timestamp (number of nanoseconds) as a Python int object. -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(PyObject*) _PyTime_AsLong(PyTime_t t); - -#ifndef MS_WINDOWS -// Create a timestamp from a timeval structure. -// Raise an exception and return -1 on overflow, return 0 on success. -extern int _PyTime_FromTimeval(PyTime_t *tp, struct timeval *tv); -#endif - -// Convert a timestamp to a timeval structure (microsecond resolution). -// tv_usec is always positive. -// Raise an exception and return -1 if the conversion overflowed, -// return 0 on success. -// Export for 'select' shared extension. -PyAPI_FUNC(int) _PyTime_AsTimeval(PyTime_t t, - struct timeval *tv, - _PyTime_round_t round); - -// Similar to _PyTime_AsTimeval() but don't raise an exception on overflow. -// On overflow, clamp tv_sec to PyTime_t min/max. -// Export for 'select' shared extension. -PyAPI_FUNC(void) _PyTime_AsTimeval_clamp(PyTime_t t, - struct timeval *tv, - _PyTime_round_t round); - -// Convert a timestamp to a number of seconds (secs) and microseconds (us). -// us is always positive. This function is similar to _PyTime_AsTimeval() -// except that secs is always a time_t type, whereas the timeval structure -// uses a C long for tv_sec on Windows. -// Raise an exception and return -1 if the conversion overflowed, -// return 0 on success. -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyTime_AsTimevalTime_t( - PyTime_t t, - time_t *secs, - int *us, - _PyTime_round_t round); - -#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) -// Create a timestamp from a timespec structure. -// Raise an exception and return -1 on overflow, return 0 on success. -extern int _PyTime_FromTimespec(PyTime_t *tp, const struct timespec *ts); - -// Convert a timestamp to a timespec structure (nanosecond resolution). -// tv_nsec is always positive. -// Raise an exception and return -1 on error, return 0 on success. -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(int) _PyTime_AsTimespec(PyTime_t t, struct timespec *ts); - -// Similar to _PyTime_AsTimespec() but don't raise an exception on overflow. -// On overflow, clamp tv_sec to PyTime_t min/max. -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(void) _PyTime_AsTimespec_clamp(PyTime_t t, struct timespec *ts); -#endif - - -// Compute t1 + t2. Clamp to [PyTime_MIN; PyTime_MAX] on overflow. -extern PyTime_t _PyTime_Add(PyTime_t t1, PyTime_t t2); - -// Structure used by time.get_clock_info() -typedef struct { - const char *implementation; - int monotonic; - int adjustable; - double resolution; -} _Py_clock_info_t; - -// Get the current time from the system clock. -// On success, set *t and *info (if not NULL), and return 0. -// On error, raise an exception and return -1. -extern int _PyTime_TimeWithInfo( - PyTime_t *t, - _Py_clock_info_t *info); - -// Get the time of a monotonic clock, i.e. a clock that cannot go backwards. -// The clock is not affected by system clock updates. The reference point of -// the returned value is undefined, so that only the difference between the -// results of consecutive calls is valid. -// -// Fill info (if set) with information of the function used to get the time. -// -// Return 0 on success, raise an exception and return -1 on error. -// Export for '_testsinglephase' shared extension. -PyAPI_FUNC(int) _PyTime_MonotonicWithInfo( - PyTime_t *t, - _Py_clock_info_t *info); - - -// Converts a timestamp to the Gregorian time, using the local time zone. -// Return 0 on success, raise an exception and return -1 on error. -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyTime_localtime(time_t t, struct tm *tm); - -// Converts a timestamp to the Gregorian time, assuming UTC. -// Return 0 on success, raise an exception and return -1 on error. -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyTime_gmtime(time_t t, struct tm *tm); - - -// Get the performance counter: clock with the highest available resolution to -// measure a short duration. -// -// Fill info (if set) with information of the function used to get the time. -// -// Return 0 on success, raise an exception and return -1 on error. -extern int _PyTime_PerfCounterWithInfo( - PyTime_t *t, - _Py_clock_info_t *info); - - -// --- _PyDeadline ----------------------------------------------------------- - -// Create a deadline. -// Pseudo code: return PyTime_MonotonicRaw() + timeout -// Export for '_ssl' shared extension. -PyAPI_FUNC(PyTime_t) _PyDeadline_Init(PyTime_t timeout); - -// Get remaining time from a deadline. -// Pseudo code: return deadline - PyTime_MonotonicRaw() -// Export for '_ssl' shared extension. -PyAPI_FUNC(PyTime_t) _PyDeadline_Get(PyTime_t deadline); - - -// --- _PyTimeFraction ------------------------------------------------------- - -// Set a fraction. -// Return 0 on success. -// Return -1 if the fraction is invalid. -extern int _PyTimeFraction_Set( - _PyTimeFraction *frac, - PyTime_t numer, - PyTime_t denom); - -// Compute ticks * frac.numer / frac.denom. -// Clamp to [PyTime_MIN; PyTime_MAX] on overflow. -extern PyTime_t _PyTimeFraction_Mul( - PyTime_t ticks, - const _PyTimeFraction *frac); - -// Compute a clock resolution: frac.numer / frac.denom / 1e9. -extern double _PyTimeFraction_Resolution( - const _PyTimeFraction *frac); - -extern PyStatus _PyTime_Init(struct _Py_time_runtime_state *state); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_TIME_H diff --git a/Python314_4_x86_Template/include/internal/pycore_token.h b/Python314_4_x86_Template/include/internal/pycore_token.h deleted file mode 100644 index 5de1f719a..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_token.h +++ /dev/null @@ -1,110 +0,0 @@ -// Auto-generated by Tools/build/generate_token.py - -/* Token types */ -#ifndef Py_INTERNAL_TOKEN_H -#define Py_INTERNAL_TOKEN_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#undef TILDE /* Prevent clash of our definition with system macro. Ex AIX, ioctl.h */ - -#define ENDMARKER 0 -#define NAME 1 -#define NUMBER 2 -#define STRING 3 -#define NEWLINE 4 -#define INDENT 5 -#define DEDENT 6 -#define LPAR 7 -#define RPAR 8 -#define LSQB 9 -#define RSQB 10 -#define COLON 11 -#define COMMA 12 -#define SEMI 13 -#define PLUS 14 -#define MINUS 15 -#define STAR 16 -#define SLASH 17 -#define VBAR 18 -#define AMPER 19 -#define LESS 20 -#define GREATER 21 -#define EQUAL 22 -#define DOT 23 -#define PERCENT 24 -#define LBRACE 25 -#define RBRACE 26 -#define EQEQUAL 27 -#define NOTEQUAL 28 -#define LESSEQUAL 29 -#define GREATEREQUAL 30 -#define TILDE 31 -#define CIRCUMFLEX 32 -#define LEFTSHIFT 33 -#define RIGHTSHIFT 34 -#define DOUBLESTAR 35 -#define PLUSEQUAL 36 -#define MINEQUAL 37 -#define STAREQUAL 38 -#define SLASHEQUAL 39 -#define PERCENTEQUAL 40 -#define AMPEREQUAL 41 -#define VBAREQUAL 42 -#define CIRCUMFLEXEQUAL 43 -#define LEFTSHIFTEQUAL 44 -#define RIGHTSHIFTEQUAL 45 -#define DOUBLESTAREQUAL 46 -#define DOUBLESLASH 47 -#define DOUBLESLASHEQUAL 48 -#define AT 49 -#define ATEQUAL 50 -#define RARROW 51 -#define ELLIPSIS 52 -#define COLONEQUAL 53 -#define EXCLAMATION 54 -#define OP 55 -#define TYPE_IGNORE 56 -#define TYPE_COMMENT 57 -#define SOFT_KEYWORD 58 -#define FSTRING_START 59 -#define FSTRING_MIDDLE 60 -#define FSTRING_END 61 -#define TSTRING_START 62 -#define TSTRING_MIDDLE 63 -#define TSTRING_END 64 -#define COMMENT 65 -#define NL 66 -#define ERRORTOKEN 67 -#define N_TOKENS 69 -#define NT_OFFSET 256 - -/* Special definitions for cooperation with parser */ - -#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) -#define ISSTRINGLIT(x) ((x) == STRING || \ - (x) == FSTRING_MIDDLE || \ - (x) == TSTRING_MIDDLE) - - -// Export these 4 symbols for 'test_peg_generator' -PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */ -PyAPI_FUNC(int) _PyToken_OneChar(int); -PyAPI_FUNC(int) _PyToken_TwoChars(int, int); -PyAPI_FUNC(int) _PyToken_ThreeChars(int, int, int); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_TOKEN_H diff --git a/Python314_4_x86_Template/include/internal/pycore_traceback.h b/Python314_4_x86_Template/include/internal/pycore_traceback.h deleted file mode 100644 index 8357cce9d..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_traceback.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef Py_INTERNAL_TRACEBACK_H -#define Py_INTERNAL_TRACEBACK_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// Export for '_ctypes' shared extension -PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int, int *, PyObject **); - -// Export for 'pyexact' shared extension -PyAPI_FUNC(void) _PyTraceback_Add(const char *, const char *, int); - -/* Write the Python traceback into the file 'fd'. For example: - - Traceback (most recent call first): - File "xxx", line xxx in <xxx> - File "xxx", line xxx in <xxx> - ... - File "xxx", line xxx in <xxx> - - This function is written for debug purpose only, to dump the traceback in - the worst case: after a segmentation fault, at fatal error, etc. That's why, - it is very limited. Strings are truncated to 100 characters and encoded to - ASCII with backslashreplace. It doesn't write the source code, only the - function name, filename and line number of each frame. Write only the first - 100 frames: if the traceback is truncated, write the line " ...". - - This function is signal safe. */ - -extern void _Py_DumpTraceback( - int fd, - PyThreadState *tstate); - -/* Write the traceback of all threads into the file 'fd'. current_thread can be - NULL. - - Return NULL on success, or an error message on error. - - This function is written for debug purpose only. It calls - _Py_DumpTraceback() for each thread, and so has the same limitations. It - only write the traceback of the first 100 threads: write "..." if there are - more threads. - - If current_tstate is NULL, the function tries to get the Python thread state - of the current thread. It is not an error if the function is unable to get - the current Python thread state. - - If interp is NULL, the function tries to get the interpreter state from - the current Python thread state, or from - _PyGILState_GetInterpreterStateUnsafe() in last resort. - - It is better to pass NULL to interp and current_tstate, the function tries - different options to retrieve this information. - - This function is signal safe. */ - -extern const char* _Py_DumpTracebackThreads( - int fd, - PyInterpreterState *interp, - PyThreadState *current_tstate); - -/* Write a Unicode object into the file descriptor fd. Encode the string to - ASCII using the backslashreplace error handler. - - Do nothing if text is not a Unicode object. - - This function is signal safe. */ -extern void _Py_DumpASCII(int fd, PyObject *text); - -/* Format an integer as decimal into the file descriptor fd. - - This function is signal safe. */ -extern void _Py_DumpDecimal( - int fd, - size_t value); - -/* Format an integer as hexadecimal with width digits into fd file descriptor. - The function is signal safe. */ -extern void _Py_DumpHexadecimal( - int fd, - uintptr_t value, - Py_ssize_t width); - -extern PyObject* _PyTraceBack_FromFrame( - PyObject *tb_next, - PyFrameObject *frame); - -#define EXCEPTION_TB_HEADER "Traceback (most recent call last):\n" -#define EXCEPTION_GROUP_TB_HEADER "Exception Group Traceback (most recent call last):\n" - -/* Write the traceback tb to file f. Prefix each line with - indent spaces followed by the margin (if it is not NULL). */ -extern int _PyTraceBack_Print( - PyObject *tb, const char *header, PyObject *f); -extern int _Py_WriteIndentedMargin(int, const char*, PyObject *); -extern int _Py_WriteIndent(int, PyObject *); - -// Export for the faulthandler module -PyAPI_FUNC(void) _Py_InitDumpStack(void); -PyAPI_FUNC(void) _Py_DumpStack(int fd); - -extern void _Py_DumpTraceback_Init(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_TRACEBACK_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_tracemalloc.h b/Python314_4_x86_Template/include/internal/pycore_tracemalloc.h deleted file mode 100644 index 41e1c91be..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_tracemalloc.h +++ /dev/null @@ -1,167 +0,0 @@ -#ifndef Py_INTERNAL_TRACEMALLOC_H -#define Py_INTERNAL_TRACEMALLOC_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_hashtable.h" // _Py_hashtable_t - - -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 TABLES_LOCK() and stored atomically. - Atomic store is used so that it can read without locking for the - general case of checking if tracemalloc is enabled. - */ - int tracing; - - /* limit of the number of frames in a traceback, 1 by default. - Variable protected by the GIL. */ - int max_nframe; -}; - - -/* Pack the frame_t structure to reduce the memory footprint on 64-bit - architectures: 12 bytes instead of 16. */ -#if defined(_MSC_VER) -#pragma pack(push, 4) -#endif - -struct -#ifdef __GNUC__ -__attribute__((packed)) -#endif -tracemalloc_frame { - /* filename cannot be NULL: "<unknown>" is used if the Python frame - filename is NULL */ - PyObject *filename; - unsigned int lineno; -}; -#ifdef _MSC_VER -#pragma pack(pop) -#endif - -struct tracemalloc_traceback { - Py_uhash_t hash; - /* Number of frames stored */ - uint16_t nframe; - /* Total number of frames the traceback had */ - uint16_t total_nframe; - struct tracemalloc_frame frames[1]; -}; - - -struct _tracemalloc_runtime_state { - struct _PyTraceMalloc_Config config; - - /* Protected by the GIL */ - struct { - PyMemAllocatorEx mem; - PyMemAllocatorEx raw; - PyMemAllocatorEx obj; - } allocators; - - PyMutex tables_lock; - /* Size in bytes of currently traced memory. - Protected by TABLES_LOCK(). */ - size_t traced_memory; - /* Peak size in bytes of traced memory. - Protected by TABLES_LOCK(). */ - size_t peak_traced_memory; - /* Hash table used as a set to intern filenames: - PyObject* => PyObject*. - Protected by the TABLES_LOCK(). */ - _Py_hashtable_t *filenames; - /* Buffer to store a new traceback in traceback_new(). - Protected by the TABLES_LOCK(). */ - struct tracemalloc_traceback *traceback; - /* Hash table used as a set to intern tracebacks: - traceback_t* => traceback_t* - Protected by the TABLES_LOCK(). */ - _Py_hashtable_t *tracebacks; - /* pointer (void*) => trace (trace_t*). - Protected by TABLES_LOCK(). */ - _Py_hashtable_t *traces; - /* domain (unsigned int) => traces (_Py_hashtable_t). - Protected by TABLES_LOCK(). */ - _Py_hashtable_t *domains; - - struct tracemalloc_traceback empty_traceback; - - Py_tss_t reentrant_key; -}; - -#define _tracemalloc_runtime_state_INIT \ - { \ - .config = { \ - .initialized = TRACEMALLOC_NOT_INITIALIZED, \ - .tracing = 0, \ - .max_nframe = 1, \ - }, \ - .reentrant_key = Py_tss_NEEDS_INIT, \ - } - - -// Get the traceback where a memory block was allocated. -// -// Return a tuple of (filename: str, lineno: int) tuples. -// -// Return None if the tracemalloc module is disabled or if the memory block -// is not tracked by tracemalloc. -// -// Raise an exception and return NULL on error. -// -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback( - unsigned int domain, - uintptr_t ptr); - -/* Return non-zero if tracemalloc is tracing */ -extern int _PyTraceMalloc_IsTracing(void); - -/* Clear the tracemalloc traces */ -extern void _PyTraceMalloc_ClearTraces(void); - -/* Clear the tracemalloc traces */ -extern PyObject* _PyTraceMalloc_GetTraces(void); - -/* Clear tracemalloc traceback for an object */ -extern PyObject* _PyTraceMalloc_GetObjectTraceback(PyObject *obj); - -/* Initialize tracemalloc */ -extern PyStatus _PyTraceMalloc_Init(void); - -/* Start tracemalloc */ -extern int _PyTraceMalloc_Start(int max_nframe); - -/* Stop tracemalloc */ -extern void _PyTraceMalloc_Stop(void); - -/* Get the tracemalloc traceback limit */ -extern int _PyTraceMalloc_GetTracebackLimit(void); - -/* Get the memory usage of tracemalloc in bytes */ -extern size_t _PyTraceMalloc_GetMemory(void); - -/* Get the current size and peak size of traced memory blocks as a 2-tuple */ -extern PyObject* _PyTraceMalloc_GetTracedMemory(void); - -/* Set the peak size of traced memory blocks to the current size */ -extern void _PyTraceMalloc_ResetPeak(void); - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_TRACEMALLOC_H diff --git a/Python314_4_x86_Template/include/internal/pycore_tstate.h b/Python314_4_x86_Template/include/internal/pycore_tstate.h deleted file mode 100644 index 87f59c274..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_tstate.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef Py_INTERNAL_TSTATE_H -#define Py_INTERNAL_TSTATE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_brc.h" // struct _brc_thread_state -#include "pycore_freelist_state.h" // struct _Py_freelists -#include "pycore_mimalloc.h" // struct _mimalloc_thread_state -#include "pycore_qsbr.h" // struct qsbr - - -#ifdef Py_GIL_DISABLED -struct _gc_thread_state { - /* Thread-local allocation count. */ - Py_ssize_t alloc_count; -}; -#endif - -// Every PyThreadState is actually allocated as a _PyThreadStateImpl. The -// PyThreadState fields are exposed as part of the C API, although most fields -// are intended to be private. The _PyThreadStateImpl fields not exposed. -typedef struct _PyThreadStateImpl { - // semi-public fields are in PyThreadState. - PyThreadState base; - - // The reference count field is used to synchronize deallocation of the - // thread state during runtime finalization. - Py_ssize_t refcount; - - // These are addresses, but we need to convert to ints to avoid UB. - uintptr_t c_stack_top; - uintptr_t c_stack_soft_limit; - uintptr_t c_stack_hard_limit; - - PyObject *asyncio_running_loop; // Strong reference - PyObject *asyncio_running_task; // Strong reference - - /* Head of circular linked-list of all tasks which are instances of `asyncio.Task` - or subclasses of it used in `asyncio.all_tasks`. - */ - struct llist_node asyncio_tasks_head; - struct _qsbr_thread_state *qsbr; // only used by free-threaded build - struct llist_node mem_free_queue; // delayed free queue - -#ifdef Py_GIL_DISABLED - // Stack references for the current thread that exist on the C stack - struct _PyCStackRef *c_stack_refs; - struct _gc_thread_state gc; - struct _mimalloc_thread_state mimalloc; - struct _Py_freelists freelists; - struct _brc_thread_state brc; - struct { - // The per-thread refcounts - Py_ssize_t *values; - - // Size of the refcounts array. - Py_ssize_t size; - - // If set, don't use per-thread refcounts - int is_finalized; - } refcounts; - - // Index to use to retrieve thread-local bytecode for this thread - int32_t tlbc_index; - - // When >1, code objects do not immortalize their non-string constants. - int suppress_co_const_immortalization; -#endif - -#if defined(Py_REF_DEBUG) && defined(Py_GIL_DISABLED) - Py_ssize_t reftotal; // this thread's total refcount operations -#endif - - // PyUnstable_ThreadState_ResetStackProtection() values - uintptr_t c_stack_init_base; - uintptr_t c_stack_init_top; - -#ifdef Py_GIL_DISABLED - // gh-144438: Add padding to ensure that the fields above don't share a - // cache line with other allocations. - char __padding[64]; -#endif -} _PyThreadStateImpl; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_TSTATE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_tuple.h b/Python314_4_x86_Template/include/internal/pycore_tuple.h deleted file mode 100644 index acf1bec46..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_tuple.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef Py_INTERNAL_TUPLE_H -#define Py_INTERNAL_TUPLE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_object.h" // _PyObject_GC_IS_TRACKED -#include "pycore_structs.h" // _PyStackRef - -extern void _PyTuple_MaybeUntrack(PyObject *); -extern void _PyTuple_DebugMallocStats(FILE *out); - -/* runtime lifecycle */ - -extern PyStatus _PyTuple_InitGlobalObjects(PyInterpreterState *); - - -/* other API */ - -#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item) - -PyAPI_FUNC(PyObject *)_PyTuple_FromArray(PyObject *const *, Py_ssize_t); -PyAPI_FUNC(PyObject *)_PyTuple_FromStackRefStealOnSuccess(const union _PyStackRef *, Py_ssize_t); -PyAPI_FUNC(PyObject *)_PyTuple_FromArraySteal(PyObject *const *, Py_ssize_t); - -typedef struct { - PyObject_HEAD - Py_ssize_t it_index; - PyTupleObject *it_seq; /* Set to NULL when iterator is exhausted */ -} _PyTupleIterObject; - -#define _PyTuple_RESET_HASH_CACHE(op) \ - do { \ - assert(op != NULL); \ - _PyTuple_CAST(op)->ob_hash = -1; \ - } while (0) - -/* bpo-42536: If reusing a tuple object, this should be called to re-track it - with the garbage collector and reset its hash cache. */ -static inline void -_PyTuple_Recycle(PyObject *op) -{ - _PyTuple_RESET_HASH_CACHE(op); - if (!_PyObject_GC_IS_TRACKED(op)) { - _PyObject_GC_TRACK(op); - } -} - -/* Below are the official constants from the xxHash specification. Optimizing - compilers should emit a single "rotate" instruction for the - _PyTuple_HASH_XXROTATE() expansion. If that doesn't happen for some important - platform, the macro could be changed to expand to a platform-specific rotate - spelling instead. -*/ -#if SIZEOF_PY_UHASH_T > 4 -#define _PyTuple_HASH_XXPRIME_1 ((Py_uhash_t)11400714785074694791ULL) -#define _PyTuple_HASH_XXPRIME_2 ((Py_uhash_t)14029467366897019727ULL) -#define _PyTuple_HASH_XXPRIME_5 ((Py_uhash_t)2870177450012600261ULL) -#define _PyTuple_HASH_XXROTATE(x) ((x << 31) | (x >> 33)) /* Rotate left 31 bits */ -#else -#define _PyTuple_HASH_XXPRIME_1 ((Py_uhash_t)2654435761UL) -#define _PyTuple_HASH_XXPRIME_2 ((Py_uhash_t)2246822519UL) -#define _PyTuple_HASH_XXPRIME_5 ((Py_uhash_t)374761393UL) -#define _PyTuple_HASH_XXROTATE(x) ((x << 13) | (x >> 19)) /* Rotate left 13 bits */ -#endif -#define _PyTuple_HASH_EMPTY (_PyTuple_HASH_XXPRIME_5 + (_PyTuple_HASH_XXPRIME_5 ^ 3527539UL)) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_TUPLE_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_typedefs.h b/Python314_4_x86_Template/include/internal/pycore_typedefs.h deleted file mode 100644 index d330cc4dc..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_typedefs.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef Py_INTERNAL_TYPEDEFS_H -#define Py_INTERNAL_TYPEDEFS_H - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _PyInterpreterFrame _PyInterpreterFrame; -typedef struct pyruntimestate _PyRuntimeState; - -#ifdef __cplusplus -} -#endif -#endif // !Py_INTERNAL_TYPEDEFS_H diff --git a/Python314_4_x86_Template/include/internal/pycore_typeobject.h b/Python314_4_x86_Template/include/internal/pycore_typeobject.h deleted file mode 100644 index ba66364d3..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_typeobject.h +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef Py_INTERNAL_TYPEOBJECT_H -#define Py_INTERNAL_TYPEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_interp_structs.h" // managed_static_type_state -#include "pycore_moduleobject.h" // PyModuleObject - - -/* state */ - -#define _Py_TYPE_VERSION_INT 1 -#define _Py_TYPE_VERSION_FLOAT 2 -#define _Py_TYPE_VERSION_LIST 3 -#define _Py_TYPE_VERSION_TUPLE 4 -#define _Py_TYPE_VERSION_STR 5 -#define _Py_TYPE_VERSION_SET 6 -#define _Py_TYPE_VERSION_FROZEN_SET 7 -#define _Py_TYPE_VERSION_DICT 8 -#define _Py_TYPE_VERSION_BYTEARRAY 9 -#define _Py_TYPE_VERSION_BYTES 10 -#define _Py_TYPE_VERSION_COMPLEX 11 - -#define _Py_TYPE_VERSION_NEXT 16 - - -#define _Py_TYPE_BASE_VERSION_TAG (2<<16) -#define _Py_MAX_GLOBAL_TYPE_VERSION_TAG (_Py_TYPE_BASE_VERSION_TAG - 1) - - -/* runtime lifecycle */ - -extern PyStatus _PyTypes_InitTypes(PyInterpreterState *); -extern void _PyTypes_FiniTypes(PyInterpreterState *); -extern void _PyTypes_FiniExtTypes(PyInterpreterState *interp); -extern void _PyTypes_Fini(PyInterpreterState *); -extern void _PyTypes_AfterFork(void); - -static inline PyObject ** -_PyStaticType_GET_WEAKREFS_LISTPTR(managed_static_type_state *state) -{ - assert(state != NULL); - return &state->tp_weaklist; -} - -extern int _PyStaticType_InitBuiltin( - PyInterpreterState *interp, - PyTypeObject *type); -extern void _PyStaticType_FiniBuiltin( - PyInterpreterState *interp, - PyTypeObject *type); -extern void _PyStaticType_ClearWeakRefs( - PyInterpreterState *interp, - PyTypeObject *type); -extern managed_static_type_state * _PyStaticType_GetState( - PyInterpreterState *interp, - PyTypeObject *type); - -// Export for '_datetime' shared extension. -PyAPI_FUNC(int) _PyStaticType_InitForExtension( - PyInterpreterState *interp, - PyTypeObject *self); - -// Export for _testinternalcapi extension. -PyAPI_FUNC(PyObject *) _PyStaticType_GetBuiltins(void); - - -/* Like PyType_GetModuleState, but skips verification - * that type is a heap type with an associated module */ -static inline void * -_PyType_GetModuleState(PyTypeObject *type) -{ - assert(PyType_Check(type)); - assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE); - PyHeapTypeObject *et = (PyHeapTypeObject *)type; - assert(et->ht_module); - PyModuleObject *mod = (PyModuleObject *)(et->ht_module); - assert(mod != NULL); - return mod->md_state; -} - - -// Export for 'math' shared extension, used via _PyType_IsReady() static inline -// function -PyAPI_FUNC(PyObject *) _PyType_GetDict(PyTypeObject *); - -extern PyObject * _PyType_GetBases(PyTypeObject *type); -extern PyObject * _PyType_GetMRO(PyTypeObject *type); -extern PyObject* _PyType_GetSubclasses(PyTypeObject *); -extern int _PyType_HasSubclasses(PyTypeObject *); - -// Export for _testinternalcapi extension. -PyAPI_FUNC(PyObject *) _PyType_GetSlotWrapperNames(void); - -// PyType_Ready() must be called if _PyType_IsReady() is false. -// See also the Py_TPFLAGS_READY flag. -static inline int -_PyType_IsReady(PyTypeObject *type) -{ - return _PyType_GetDict(type) != NULL; -} - -extern PyObject* _Py_type_getattro_impl(PyTypeObject *type, PyObject *name, - int *suppress_missing_attribute); -extern PyObject* _Py_type_getattro(PyObject *type, PyObject *name); - -extern PyObject* _Py_BaseObject_RichCompare(PyObject* self, PyObject* other, int op); - -extern PyObject* _Py_slot_tp_getattro(PyObject *self, PyObject *name); -extern PyObject* _Py_slot_tp_getattr_hook(PyObject *self, PyObject *name); - -extern PyTypeObject _PyBufferWrapper_Type; - -PyAPI_FUNC(PyObject*) _PySuper_Lookup(PyTypeObject *su_type, PyObject *su_obj, - PyObject *name, int *meth_found); - -extern PyObject* _PyType_GetFullyQualifiedName(PyTypeObject *type, char sep); - -// Perform the following operation, in a thread-safe way when required by the -// build mode. -// -// self->tp_flags = (self->tp_flags & ~mask) | flags; -extern void _PyType_SetFlags(PyTypeObject *self, unsigned long mask, - unsigned long flags); -extern int _PyType_AddMethod(PyTypeObject *, PyMethodDef *); - -// Like _PyType_SetFlags(), but apply the operation to self and any of its -// subclasses without Py_TPFLAGS_IMMUTABLETYPE set. -extern void _PyType_SetFlagsRecursive(PyTypeObject *self, unsigned long mask, - unsigned long flags); - -extern unsigned int _PyType_GetVersionForCurrentState(PyTypeObject *tp); -PyAPI_FUNC(void) _PyType_SetVersion(PyTypeObject *tp, unsigned int version); -PyTypeObject *_PyType_LookupByVersion(unsigned int version); - -// Function pointer type for user-defined validation function that will be -// called by _PyType_Validate(). -// It should return 0 if the validation is passed, otherwise it will return -1. -typedef int (*_py_validate_type)(PyTypeObject *); - -// It will verify the ``ty`` through user-defined validation function ``validate``, -// and if the validation is passed, it will set the ``tp_version`` as valid -// tp_version_tag from the ``ty``. -extern int _PyType_Validate(PyTypeObject *ty, _py_validate_type validate, unsigned int *tp_version); -extern int _PyType_CacheGetItemForSpecialization(PyHeapTypeObject *ht, PyObject *descriptor, uint32_t tp_version); - -// Like PyType_GetBaseByToken, but does not modify refcounts. -// Cannot fail; arguments must be valid. -PyAPI_FUNC(int) -_PyType_GetBaseByToken_Borrow(PyTypeObject *type, void *token, PyTypeObject **result); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_TYPEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_typevarobject.h b/Python314_4_x86_Template/include/internal/pycore_typevarobject.h deleted file mode 100644 index 4d7556e68..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_typevarobject.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef Py_INTERNAL_TYPEVAROBJECT_H -#define Py_INTERNAL_TYPEVAROBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern PyObject *_Py_make_typevar(PyObject *, PyObject *, PyObject *); -extern PyObject *_Py_make_paramspec(PyThreadState *, PyObject *); -extern PyObject *_Py_make_typevartuple(PyThreadState *, PyObject *); -extern PyObject *_Py_make_typealias(PyThreadState *, PyObject *); -extern PyObject *_Py_subscript_generic(PyThreadState *, PyObject *); -extern PyObject *_Py_set_typeparam_default(PyThreadState *, PyObject *, PyObject *); -extern int _Py_initialize_generic(PyInterpreterState *); -extern void _Py_clear_generic_types(PyInterpreterState *); -extern int _Py_typing_type_repr(PyUnicodeWriter *, PyObject *); - -extern PyTypeObject _PyTypeAlias_Type; -extern PyTypeObject _PyNoDefault_Type; -extern PyObject _Py_NoDefaultStruct; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_TYPEVAROBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_ucnhash.h b/Python314_4_x86_Template/include/internal/pycore_ucnhash.h deleted file mode 100644 index 1561dfbb3..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_ucnhash.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Unicode name database interface */ -#ifndef Py_INTERNAL_UCNHASH_H -#define Py_INTERNAL_UCNHASH_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -/* revised ucnhash CAPI interface (exported through a "wrapper") */ - -#define PyUnicodeData_CAPSULE_NAME "unicodedata._ucnhash_CAPI" - -typedef struct { - - /* Get name for a given character code. - Returns non-zero if success, zero if not. - Does not set Python exceptions. */ - int (*getname)(Py_UCS4 code, char* buffer, int buflen, - int with_alias_and_seq); - - /* Get character code for a given name. - Same error handling as for getname(). */ - int (*getcode)(const char* name, int namelen, Py_UCS4* code, - int with_named_seq); - -} _PyUnicode_Name_CAPI; - -extern _PyUnicode_Name_CAPI* _PyUnicode_GetNameCAPI(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_UCNHASH_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_unicodeobject.h b/Python314_4_x86_Template/include/internal/pycore_unicodeobject.h deleted file mode 100644 index 3791b913c..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_unicodeobject.h +++ /dev/null @@ -1,308 +0,0 @@ -#ifndef Py_INTERNAL_UNICODEOBJECT_H -#define Py_INTERNAL_UNICODEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_fileutils.h" // _Py_error_handler -#include "pycore_ucnhash.h" // _PyUnicode_Name_CAPI - -/* --- Characters Type APIs ----------------------------------------------- */ - -extern int _PyUnicode_IsXidStart(Py_UCS4 ch); -extern int _PyUnicode_IsXidContinue(Py_UCS4 ch); -extern int _PyUnicode_ToLowerFull(Py_UCS4 ch, Py_UCS4 *res); -extern int _PyUnicode_ToTitleFull(Py_UCS4 ch, Py_UCS4 *res); -extern int _PyUnicode_ToUpperFull(Py_UCS4 ch, Py_UCS4 *res); -extern int _PyUnicode_ToFoldedFull(Py_UCS4 ch, Py_UCS4 *res); -extern int _PyUnicode_IsCaseIgnorable(Py_UCS4 ch); -extern int _PyUnicode_IsCased(Py_UCS4 ch); - -/* --- Unicode API -------------------------------------------------------- */ - -// Export for '_json' shared extension -PyAPI_FUNC(int) _PyUnicode_CheckConsistency( - PyObject *op, - int check_content); - -PyAPI_FUNC(void) _PyUnicode_ExactDealloc(PyObject *op); -extern Py_ssize_t _PyUnicode_InternedSize(void); -extern Py_ssize_t _PyUnicode_InternedSize_Immortal(void); - -// Get a copy of a Unicode string. -// Export for '_datetime' shared extension. -PyAPI_FUNC(PyObject*) _PyUnicode_Copy( - PyObject *unicode); - -/* Unsafe version of PyUnicode_Fill(): don't check arguments and so may crash - if parameters are invalid (e.g. if length is longer than the string). */ -extern void _PyUnicode_FastFill( - PyObject *unicode, - Py_ssize_t start, - Py_ssize_t length, - Py_UCS4 fill_char - ); - -/* Unsafe version of PyUnicode_CopyCharacters(): don't check arguments and so - may crash if parameters are invalid (e.g. if the output string - is too short). */ -extern void _PyUnicode_FastCopyCharacters( - PyObject *to, - Py_ssize_t to_start, - PyObject *from, - Py_ssize_t from_start, - Py_ssize_t how_many - ); - -/* Create a new string from a buffer of ASCII characters. - WARNING: Don't check if the string contains any non-ASCII character. */ -extern PyObject* _PyUnicode_FromASCII( - const char *buffer, - Py_ssize_t size); - -/* Compute the maximum character of the substring unicode[start:end]. - Return 127 for an empty string. */ -extern Py_UCS4 _PyUnicode_FindMaxChar ( - PyObject *unicode, - Py_ssize_t start, - Py_ssize_t end); - -/* --- _PyUnicodeWriter API ----------------------------------------------- */ - -/* Format the object based on the format_spec, as defined in PEP 3101 - (Advanced String Formatting). */ -extern int _PyUnicode_FormatAdvancedWriter( - _PyUnicodeWriter *writer, - PyObject *obj, - PyObject *format_spec, - Py_ssize_t start, - Py_ssize_t end); - -/* --- UTF-7 Codecs ------------------------------------------------------- */ - -extern PyObject* _PyUnicode_EncodeUTF7( - PyObject *unicode, /* Unicode object */ - int base64SetO, /* Encode RFC2152 Set O characters in base64 */ - int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ - const char *errors); /* error handling */ - -/* --- UTF-8 Codecs ------------------------------------------------------- */ - -// Export for '_tkinter' shared extension. -PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String( - PyObject *unicode, - const char *errors); - -/* --- UTF-32 Codecs ------------------------------------------------------ */ - -// Export for '_tkinter' shared extension -PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( - PyObject *object, /* Unicode object */ - const char *errors, /* error handling */ - int byteorder); /* byteorder to use 0=BOM+native;-1=LE,1=BE */ - -/* --- UTF-16 Codecs ------------------------------------------------------ */ - -// Returns a Python string object holding the UTF-16 encoded value of -// the Unicode data. -// -// If byteorder is not 0, output is written according to the following -// byte order: -// -// byteorder == -1: little endian -// byteorder == 0: native byte order (writes a BOM mark) -// byteorder == 1: big endian -// -// If byteorder is 0, the output string will always start with the -// Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is -// prepended. -// -// Export for '_tkinter' shared extension -PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16( - PyObject* unicode, /* Unicode object */ - const char *errors, /* error handling */ - int byteorder); /* byteorder to use 0=BOM+native;-1=LE,1=BE */ - -/* --- Unicode-Escape Codecs ---------------------------------------------- */ - -/* Variant of PyUnicode_DecodeUnicodeEscape that supports partial decoding. */ -extern PyObject* _PyUnicode_DecodeUnicodeEscapeStateful( - const char *string, /* Unicode-Escape encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed); /* bytes consumed */ - -// Helper for PyUnicode_DecodeUnicodeEscape that detects invalid escape -// chars. -// Export for test_peg_generator. -PyAPI_FUNC(PyObject*) _PyUnicode_DecodeUnicodeEscapeInternal2( - const char *string, /* Unicode-Escape encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed, /* bytes consumed */ - int *first_invalid_escape_char, /* on return, if not -1, contain the first - invalid escaped char (<= 0xff) or invalid - octal escape (> 0xff) in string. */ - const char **first_invalid_escape_ptr); /* on return, if not NULL, may - point to the first invalid escaped - char in string. - May be NULL if errors is not NULL. */ - -/* --- Raw-Unicode-Escape Codecs ---------------------------------------------- */ - -/* Variant of PyUnicode_DecodeRawUnicodeEscape that supports partial decoding. */ -extern PyObject* _PyUnicode_DecodeRawUnicodeEscapeStateful( - const char *string, /* Unicode-Escape encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed); /* bytes consumed */ - -/* --- Latin-1 Codecs ----------------------------------------------------- */ - -extern PyObject* _PyUnicode_AsLatin1String( - PyObject* unicode, - const char* errors); - -/* --- ASCII Codecs ------------------------------------------------------- */ - -extern PyObject* _PyUnicode_AsASCIIString( - PyObject* unicode, - const char* errors); - -/* --- Character Map Codecs ----------------------------------------------- */ - -/* Translate an Unicode object by applying a character mapping table to - it and return the resulting Unicode object. - - The mapping table must map Unicode ordinal integers to Unicode strings, - Unicode ordinal integers or None (causing deletion of the character). - - Mapping tables may be dictionaries or sequences. Unmapped character - ordinals (ones which cause a LookupError) are left untouched and - are copied as-is. -*/ -extern PyObject* _PyUnicode_EncodeCharmap( - PyObject *unicode, /* Unicode object */ - PyObject *mapping, /* encoding mapping */ - const char *errors); /* error handling */ - -/* --- Decimal Encoder ---------------------------------------------------- */ - -// Converts a Unicode object holding a decimal value to an ASCII string -// for using in int, float and complex parsers. -// Transforms code points that have decimal digit property to the -// corresponding ASCII digit code points. Transforms spaces to ASCII. -// Transforms code points starting from the first non-ASCII code point that -// is neither a decimal digit nor a space to the end into '?'. -// -// Export for '_testinternalcapi' shared extension. -PyAPI_FUNC(PyObject*) _PyUnicode_TransformDecimalAndSpaceToASCII( - PyObject *unicode); /* Unicode object */ - -/* --- Methods & Slots ---------------------------------------------------- */ - -PyAPI_FUNC(PyObject*) _PyUnicode_JoinArray( - PyObject *separator, - PyObject *const *items, - Py_ssize_t seqlen - ); - -/* Test whether a unicode is equal to ASCII identifier. Return 1 if true, - 0 otherwise. The right argument must be ASCII identifier. - Any error occurs inside will be cleared before return. */ -extern int _PyUnicode_EqualToASCIIId( - PyObject *left, /* Left string */ - _Py_Identifier *right /* Right identifier */ - ); - -// Test whether a unicode is equal to ASCII string. Return 1 if true, -// 0 otherwise. The right argument must be ASCII-encoded string. -// Any error occurs inside will be cleared before return. -// Export for '_ctypes' shared extension -PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString( - PyObject *left, - const char *right /* ASCII-encoded string */ - ); - -/* Externally visible for str.strip(unicode) */ -extern PyObject* _PyUnicode_XStrip( - PyObject *self, - int striptype, - PyObject *sepobj - ); - - -/* 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 */ -extern Py_ssize_t _PyUnicode_InsertThousandsGrouping( - _PyUnicodeWriter *writer, - Py_ssize_t n_buffer, - PyObject *digits, - Py_ssize_t d_pos, - Py_ssize_t n_digits, - Py_ssize_t min_width, - const char *grouping, - PyObject *thousands_sep, - Py_UCS4 *maxchar, - int forward); - -/* Dedent a string. - Behaviour is expected to be an exact match of `textwrap.dedent`. - Return a new reference on success, NULL with exception set on error. - */ -extern PyObject* _PyUnicode_Dedent(PyObject *unicode); - -/* --- Misc functions ----------------------------------------------------- */ - -extern PyObject* _PyUnicode_FormatLong(PyObject *, int, int, int); - -// Fast equality check when the inputs are known to be exact unicode types. -// Export for '_pickle' shared extension. -PyAPI_FUNC(int) _PyUnicode_Equal(PyObject *, PyObject *); - -extern int _PyUnicode_WideCharString_Converter(PyObject *, void *); -extern int _PyUnicode_WideCharString_Opt_Converter(PyObject *, void *); - -// Export for test_peg_generator -PyAPI_FUNC(Py_ssize_t) _PyUnicode_ScanIdentifier(PyObject *); - -/* --- Runtime lifecycle -------------------------------------------------- */ - -extern void _PyUnicode_InitState(PyInterpreterState *); -extern PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *); -extern PyStatus _PyUnicode_InitTypes(PyInterpreterState *); -extern void _PyUnicode_Fini(PyInterpreterState *); -extern void _PyUnicode_FiniTypes(PyInterpreterState *); - -extern PyTypeObject _PyUnicodeASCIIIter_Type; - -/* --- Interning ---------------------------------------------------------- */ - -// All these are "ref-neutral", like the public PyUnicode_InternInPlace. - -// Explicit interning routines: -PyAPI_FUNC(void) _PyUnicode_InternMortal(PyInterpreterState *interp, PyObject **); -PyAPI_FUNC(void) _PyUnicode_InternImmortal(PyInterpreterState *interp, PyObject **); -// Left here to help backporting: -PyAPI_FUNC(void) _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p); -// Only for singletons in the _PyRuntime struct: -extern void _PyUnicode_InternStatic(PyInterpreterState *interp, PyObject **); - -/* --- Other API ---------------------------------------------------------- */ - -extern void _PyUnicode_ClearInterned(PyInterpreterState *interp); - -// Like PyUnicode_AsUTF8(), but check for embedded null characters. -// Export for '_sqlite3' shared extension. -PyAPI_FUNC(const char *) _PyUnicode_AsUTF8NoNUL(PyObject *); - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_UNICODEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_unicodeobject_generated.h b/Python314_4_x86_Template/include/internal/pycore_unicodeobject_generated.h deleted file mode 100644 index c3ecdf64c..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_unicodeobject_generated.h +++ /dev/null @@ -1,3132 +0,0 @@ -#ifndef Py_INTERNAL_UNICODEOBJECT_GENERATED_H -#define Py_INTERNAL_UNICODEOBJECT_GENERATED_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -/* The following is auto-generated by Tools/build/generate_global_objects.py. */ -static inline void -_PyUnicode_InitStaticStrings(PyInterpreterState *interp) { - PyObject *string; - string = &_Py_ID(CANCELLED); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(FINISHED); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(False); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(JSONDecodeError); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(PENDING); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(Py_Repr); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(TextIOWrapper); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(True); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(WarningMessage); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_WindowsConsoleIO); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__IOBase_closed); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__abc_tpflags__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__abs__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__abstractmethods__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__add__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__aenter__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__aexit__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__aiter__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__all__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__and__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__anext__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__annotate__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__annotate_func__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__annotations__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__annotations_cache__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__args__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__await__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__bases__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__bool__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__buffer__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__build_class__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__builtins__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__bytes__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__call__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__cantrace__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ceil__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__class__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__class_getitem__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__classcell__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__classdict__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__classdictcell__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__complex__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__conditional_annotations__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__contains__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ctypes_from_outparam__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__del__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__delattr__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__delete__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__delitem__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__dict__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__dictoffset__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__dir__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__divmod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__doc__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__enter__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__eq__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__exit__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__file__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__firstlineno__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__float__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__floor__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__floordiv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__format__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__fspath__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ge__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__get__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getattr__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getattribute__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getinitargs__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getitem__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getnewargs__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getnewargs_ex__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__getstate__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__gt__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__hash__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__iadd__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__iand__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ifloordiv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ilshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__imatmul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__imod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__import__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__imul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__index__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__init__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__init_subclass__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__instancecheck__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__int__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__invert__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ior__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ipow__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__irshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__isabstractmethod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__isub__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__iter__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__itruediv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ixor__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__le__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__len__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__length_hint__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__lltrace__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__loader__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__lshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__lt__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__main__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__match_args__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__matmul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__missing__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__mod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__module__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__mro_entries__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__mul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__name__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ne__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__neg__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__new__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__newobj__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__newobj_ex__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__next__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__notes__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__or__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__orig_class__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__origin__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__package__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__parameters__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__path__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__pos__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__pow__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__prepare__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__qualname__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__radd__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rand__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rdivmod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__reduce__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__reduce_ex__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__release_buffer__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__repr__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__reversed__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rfloordiv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rlshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rmatmul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rmod__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rmul__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__ror__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__round__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rpow__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rrshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rshift__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rsub__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rtruediv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__rxor__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__set__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__set_name__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__setattr__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__setitem__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__setstate__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__sizeof__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__slotnames__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__slots__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__spec__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__static_attributes__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__str__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__sub__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__subclasscheck__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__subclasshook__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__truediv__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__trunc__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__type_params__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__typing_is_unpacked_typevartuple__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__typing_prepare_subst__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__typing_subst__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__typing_unpacked_tuple_args__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__warningregistry__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__weaklistoffset__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__weakref__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(__xor__); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_abc_impl); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_abstract_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_active); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_anonymous_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_argtypes_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_as_parameter_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_asyncio_future_blocking); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_blksize); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_bootstrap); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_check_retval_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_dealloc_warn); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_feature_version); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_field_types); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_fields_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_filters); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_finalizing); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_find_and_load); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_fix_up_module); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_flags_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_get_sourcefile); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_handle_fromlist); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_initializing); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_internal_use); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_io); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_is_text_encoding); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_isatty_open_only); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_length_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_limbo); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_lock_unlock_module); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_loop); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_needs_com_addref_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_only_immortal); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_restype_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_showwarnmsg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_shutdown); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_slotnames); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_strptime); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_strptime_datetime_date); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_strptime_datetime_datetime); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_strptime_datetime_time); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_type_); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_uninitialized_submodules); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_warn_unawaited_coroutine); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(_xoptions); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(abs_tol); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(access); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(aclose); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(add); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(add_done_callback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(after_in_child); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(after_in_parent); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(aggregate_class); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(alias); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(align); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(all); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(all_threads); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(allow_code); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(any); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(append); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(arg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(argdefs); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(args); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(arguments); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(argv); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(as_integer_ratio); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(asend); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ast); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(athrow); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(attribute); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(authorizer_callback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(autocommit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(backtick); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(base); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(before); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(big); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(binary_form); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bit_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bit_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(block); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bound); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(buffer); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(buffer_callback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(buffer_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(buffering); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(buffers); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bufsize); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(builtins); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(byte_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(byte_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(byteorder); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bytes); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(bytes_per_sep); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(c_call); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(c_exception); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(c_parameter_type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(c_return); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cached_datetime_module); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cached_statements); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cadata); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cafile); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(call); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(call_exception_handler); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(call_soon); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(callback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cancel); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(capath); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(category); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cb_type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(certfile); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(check_same_thread); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(clear); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(close); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(closed); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(closefd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(closure); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_argcount); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_cellvars); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_code); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_consts); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_exceptiontable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_filename); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_firstlineno); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_flags); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_freevars); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_kwonlyargcount); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_linetable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_names); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_nlocals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_posonlyargcount); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_qualname); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_stacksize); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(co_varnames); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(code); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(col_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(command); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(comment_factory); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(compile_mode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(consts); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(context); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(contravariant); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(conversion); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cookie); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(copy); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(copyreg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(coro); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(count); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(covariant); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(cwd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(d_parameter_type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(data); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(database); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(day); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(debug); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(decode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(decoder); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(default); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(defaultaction); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(delete); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(depth); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(desired_access); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(detect_types); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(deterministic); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(device); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dict); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dictcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(difference_update); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(digest); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(digest_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(digestmod); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dir_fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(discard); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dispatch_table); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(displayhook); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dklen); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(doc); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(done); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dont_inherit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dst); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(dst_dir_fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(eager_start); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(effective_ids); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(element_factory); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(encode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(encoding); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(end); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(end_col_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(end_lineno); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(end_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(endpos); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(entrypoint); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(env); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(errors); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(event); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(eventmask); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(exc_type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(exc_value); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(excepthook); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(exception); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(existing_file_name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(exp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(expression); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(extend); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(extra_tokens); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(facility); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(factory); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(false); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(family); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fanout); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fd2); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fdel); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fget); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fields); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(file); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(file_actions); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(filename); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fileno); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(filepath); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fillvalue); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(filter); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(filters); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(final); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(find_class); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fix_imports); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(flags); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(flush); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fold); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(follow_symlinks); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(format); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(format_spec); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(frame_buffer); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(from_param); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fromlist); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fromtimestamp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fromutc); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(fset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(func); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(future); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(generation); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(genexpr); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(get); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(get_debug); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(get_event_loop); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(get_loop); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(get_source); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(getattr); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(getstate); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(gid); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(globals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(groupindex); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(groups); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(handle); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(handle_seq); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(has_location); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(hash_name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(header); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(headers); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(hi); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(hook); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(hour); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(id); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ident); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(identity_hint); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ignore); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(imag); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(importlib); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(in_fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(incoming); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(index); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(indexgroup); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(inf); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(infer_variance); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(inherit_handle); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(inheritable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initial); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initial_bytes); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initial_owner); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initial_state); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initial_value); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(initval); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(inner_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(input); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(insert_comments); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(insert_pis); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(instructions); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(intern); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(intersection); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(interval); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(io); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(is_compress); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(is_raw); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(is_running); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(is_struct); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(isatty); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(isinstance); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(isoformat); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(isolation_level); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(istext); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(item); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(items); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(iter); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(iterable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(iterations); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(join); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(jump); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(keepends); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(key); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(keyfile); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(keys); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(kind); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(kw); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(kw1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(kw2); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(kwdefaults); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(label); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(lambda); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last_exc); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last_node); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last_traceback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last_type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(last_value); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(latin1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(leaf_size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(len); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(length); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(level); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(limit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(line); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(line_buffering); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(lineno); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(listcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(little); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(lo); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(locale); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(locals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(logoption); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(loop); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(manual_reset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mapping); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(match); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(max_length); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxdigits); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxevents); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxlen); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxmem); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxsplit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(maxvalue); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(memLevel); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(memlimit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(message); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(metaclass); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(metadata); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(method); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(microsecond); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(milliseconds); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(minute); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mod); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(module); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(module_globals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(modules); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(month); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mro); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(msg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mutex); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(mycmp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(n_arg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(n_fields); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(n_sequence_fields); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(n_unnamed_fields); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(name_from); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(namespace_separator); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(namespaces); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(narg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ndigits); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(nested); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(new_file_name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(new_limit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(newline); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(newlines); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(next); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(nlocals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(node_depth); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(node_offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ns); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(nstype); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(nt); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(null); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(number); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(obj); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(object); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(offset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(offset_dst); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(offset_src); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(on_type_read); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(onceregistry); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(only_active_thread); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(only_keys); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(oparg); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(opcode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(open); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(opener); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(operation); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(optimize); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(options); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(order); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(origin); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(out_fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(outgoing); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(outpath); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(overlapped); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(owner); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pages); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(parameter); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(parent); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(password); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(path); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pattern); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(peek); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(persistent_id); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(persistent_load); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(person); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pi_factory); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pid); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(policy); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pos); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pos1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(pos2); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(posix); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(print_file_and_line); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(priority); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(progress); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(progress_handler); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(progress_routine); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(proto); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(protocol); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ps1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(ps2); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(query); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(quotetabs); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(raw); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(read); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(read1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readall); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readinto); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readinto1); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readline); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(readonly); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(real); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reducer_override); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(registry); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(rel_tol); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(release); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reload); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(repl); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(replace); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reserved); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reset); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(resetids); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(return); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reverse); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(reversed); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(salt); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sched_priority); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(scheduler); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(script); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(second); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(security_attributes); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(seek); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(seekable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(selectors); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(self); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(send); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sep); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sequence); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(server_hostname); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(server_side); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(session); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setpgroup); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setsid); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setsigdef); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setsigmask); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(setstate); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(shape); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(show_cmd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(signed); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(size); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sizehint); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(skip_file_prefixes); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sleep); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sock); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sort); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(source); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(source_traceback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(spam); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(src); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(src_dir_fd); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(stacklevel); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(start); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(statement); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(status); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(stderr); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(stdin); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(stdout); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(step); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(steps); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(store_name); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(strategy); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(strftime); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(strict); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(strict_mode); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(string); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(sub_key); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(subcalls); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(symmetric_difference_update); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tabsize); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tag); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(target); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(target_is_directory); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(task); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tb_frame); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tb_lasti); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tb_lineno); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tb_next); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tell); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(template); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(term); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(text); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(threading); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(throw); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(timeout); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(timer); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(times); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(timetuple); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(timeunit); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(top); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(trace_callback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(traceback); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(trailers); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(translate); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(true); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(truncate); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(twice); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(txt); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(type); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(type_params); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tz); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tzinfo); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(tzname); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(uid); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(unlink); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(unraisablehook); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(uri); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(usedforsecurity); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(value); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(values); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(version); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(volume); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(wait_all); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(warn_on_full_buffer); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(warnings); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(warnoptions); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(wbits); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(week); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(weekday); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(which); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(who); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(withdata); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(writable); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(write); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(write_through); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(year); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(zdict); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_ID(zstd_dict); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(empty); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(dbl_percent); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(dot_locals); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(defaults); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(format); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(generic_base); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(kwdefaults); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(type_params); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(str_replace_inf); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_null); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_dictcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_genexpr); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_lambda); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_listcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_module); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_setcomp); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_string); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(anon_unknown); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(json_decoder); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(list_err); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(utf_8); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(dbl_open_br); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); - string = &_Py_STR(dbl_close_br); - _PyUnicode_InternStatic(interp, &string); - assert(_PyUnicode_CheckConsistency(string, 1)); - assert(PyUnicode_GET_LENGTH(string) != 1); -} -/* End auto-generated code */ -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_UNICODEOBJECT_GENERATED_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_unionobject.h b/Python314_4_x86_Template/include/internal/pycore_unionobject.h deleted file mode 100644 index 4bd36f650..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_unionobject.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_INTERNAL_UNIONOBJECT_H -#define Py_INTERNAL_UNIONOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -// For extensions created by test_peg_generator -PyAPI_DATA(PyTypeObject) _PyUnion_Type; -PyAPI_FUNC(PyObject *) _Py_union_type_or(PyObject *, PyObject *); - -#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type) - -#define _PyGenericAlias_Check(op) PyObject_TypeCheck((op), &Py_GenericAliasType) -extern PyObject *_Py_subs_parameters(PyObject *, PyObject *, PyObject *, PyObject *); -extern PyObject *_Py_make_parameters(PyObject *); -extern PyObject *_Py_union_args(PyObject *self); -extern PyObject *_Py_union_from_tuple(PyObject *args); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_UNIONOBJECT_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_uniqueid.h b/Python314_4_x86_Template/include/internal/pycore_uniqueid.h deleted file mode 100644 index c80924d50..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_uniqueid.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef Py_INTERNAL_UNIQUEID_H -#define Py_INTERNAL_UNIQUEID_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#ifdef Py_GIL_DISABLED - -// This contains code for allocating unique ids to objects for per-thread -// reference counting. -// -// Per-thread reference counting is used along with deferred reference -// counting to avoid scaling bottlenecks due to reference count contention. -// -// An id of 0 is used to indicate that an object doesn't use per-thread -// refcounting. This value is used when the object is finalized by the GC -// and during interpreter shutdown to allow the object to be -// deallocated promptly when the object's refcount reaches zero. -// -// Each entry implicitly represents a unique id based on its offset in the -// table. Non-allocated entries form a free-list via the 'next' pointer. -// Allocated entries store the corresponding PyObject. - -#define _Py_INVALID_UNIQUE_ID 0 - -// Assigns the next id from the pool of ids. -extern Py_ssize_t _PyObject_AssignUniqueId(PyObject *obj); - -// Releases the allocated id back to the pool. -extern void _PyObject_ReleaseUniqueId(Py_ssize_t unique_id); - -// Releases the allocated id back to the pool. -extern void _PyObject_DisablePerThreadRefcounting(PyObject *obj); - -// Merges the per-thread reference counts into the corresponding objects. -extern void _PyObject_MergePerThreadRefcounts(_PyThreadStateImpl *tstate); - -// Like _PyObject_MergePerThreadRefcounts, but also frees the per-thread -// array of refcounts. -extern void _PyObject_FinalizePerThreadRefcounts(_PyThreadStateImpl *tstate); - -// Frees the interpreter's pool of type ids. -extern void _PyObject_FinalizeUniqueIdPool(PyInterpreterState *interp); - -// Increfs the object, resizing the thread-local refcount array if necessary. -PyAPI_FUNC(void) _PyObject_ThreadIncrefSlow(PyObject *obj, size_t idx); - -#endif /* Py_GIL_DISABLED */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_UNIQUEID_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_uop_ids.h b/Python314_4_x86_Template/include/internal/pycore_uop_ids.h deleted file mode 100644 index d3d2b716e..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_uop_ids.h +++ /dev/null @@ -1,335 +0,0 @@ -// This file is generated by Tools/cases_generator/uop_id_generator.py -// from: -// Python/bytecodes.c -// Do not edit! - -#ifndef Py_CORE_UOP_IDS_H -#define Py_CORE_UOP_IDS_H -#ifdef __cplusplus -extern "C" { -#endif - -#define _EXIT_TRACE 300 -#define _SET_IP 301 -#define _BINARY_OP 302 -#define _BINARY_OP_ADD_FLOAT 303 -#define _BINARY_OP_ADD_INT 304 -#define _BINARY_OP_ADD_UNICODE 305 -#define _BINARY_OP_EXTEND 306 -#define _BINARY_OP_INPLACE_ADD_UNICODE 307 -#define _BINARY_OP_MULTIPLY_FLOAT 308 -#define _BINARY_OP_MULTIPLY_INT 309 -#define _BINARY_OP_SUBSCR_CHECK_FUNC 310 -#define _BINARY_OP_SUBSCR_DICT 311 -#define _BINARY_OP_SUBSCR_INIT_CALL 312 -#define _BINARY_OP_SUBSCR_LIST_INT 313 -#define _BINARY_OP_SUBSCR_LIST_SLICE 314 -#define _BINARY_OP_SUBSCR_STR_INT 315 -#define _BINARY_OP_SUBSCR_TUPLE_INT 316 -#define _BINARY_OP_SUBTRACT_FLOAT 317 -#define _BINARY_OP_SUBTRACT_INT 318 -#define _BINARY_SLICE 319 -#define _BUILD_INTERPOLATION BUILD_INTERPOLATION -#define _BUILD_LIST BUILD_LIST -#define _BUILD_MAP BUILD_MAP -#define _BUILD_SET BUILD_SET -#define _BUILD_SLICE BUILD_SLICE -#define _BUILD_STRING BUILD_STRING -#define _BUILD_TEMPLATE BUILD_TEMPLATE -#define _BUILD_TUPLE BUILD_TUPLE -#define _CALL_BUILTIN_CLASS 320 -#define _CALL_BUILTIN_FAST 321 -#define _CALL_BUILTIN_FAST_WITH_KEYWORDS 322 -#define _CALL_BUILTIN_O 323 -#define _CALL_INTRINSIC_1 CALL_INTRINSIC_1 -#define _CALL_INTRINSIC_2 CALL_INTRINSIC_2 -#define _CALL_ISINSTANCE CALL_ISINSTANCE -#define _CALL_KW_NON_PY 324 -#define _CALL_LEN 325 -#define _CALL_LIST_APPEND CALL_LIST_APPEND -#define _CALL_METHOD_DESCRIPTOR_FAST 326 -#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 327 -#define _CALL_METHOD_DESCRIPTOR_NOARGS 328 -#define _CALL_METHOD_DESCRIPTOR_O 329 -#define _CALL_NON_PY_GENERAL 330 -#define _CALL_STR_1 331 -#define _CALL_TUPLE_1 332 -#define _CALL_TYPE_1 333 -#define _CHECK_AND_ALLOCATE_OBJECT 334 -#define _CHECK_ATTR_CLASS 335 -#define _CHECK_ATTR_METHOD_LAZY_DICT 336 -#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS 337 -#define _CHECK_EG_MATCH CHECK_EG_MATCH -#define _CHECK_EXC_MATCH CHECK_EXC_MATCH -#define _CHECK_FUNCTION 338 -#define _CHECK_FUNCTION_EXACT_ARGS 339 -#define _CHECK_FUNCTION_VERSION 340 -#define _CHECK_FUNCTION_VERSION_INLINE 341 -#define _CHECK_FUNCTION_VERSION_KW 342 -#define _CHECK_IS_NOT_PY_CALLABLE 343 -#define _CHECK_IS_NOT_PY_CALLABLE_KW 344 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES 345 -#define _CHECK_METHOD_VERSION 346 -#define _CHECK_METHOD_VERSION_KW 347 -#define _CHECK_PEP_523 348 -#define _CHECK_PERIODIC 349 -#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM 350 -#define _CHECK_RECURSION_REMAINING 351 -#define _CHECK_STACK_SPACE 352 -#define _CHECK_STACK_SPACE_OPERAND 353 -#define _CHECK_VALIDITY 354 -#define _COMPARE_OP 355 -#define _COMPARE_OP_FLOAT 356 -#define _COMPARE_OP_INT 357 -#define _COMPARE_OP_STR 358 -#define _CONTAINS_OP 359 -#define _CONTAINS_OP_DICT 360 -#define _CONTAINS_OP_SET 361 -#define _CONVERT_VALUE CONVERT_VALUE -#define _COPY COPY -#define _COPY_FREE_VARS COPY_FREE_VARS -#define _CREATE_INIT_FRAME 362 -#define _DELETE_ATTR DELETE_ATTR -#define _DELETE_DEREF DELETE_DEREF -#define _DELETE_FAST DELETE_FAST -#define _DELETE_GLOBAL DELETE_GLOBAL -#define _DELETE_NAME DELETE_NAME -#define _DELETE_SUBSCR DELETE_SUBSCR -#define _DEOPT 363 -#define _DICT_MERGE DICT_MERGE -#define _DICT_UPDATE DICT_UPDATE -#define _DO_CALL 364 -#define _DO_CALL_FUNCTION_EX 365 -#define _DO_CALL_KW 366 -#define _END_FOR END_FOR -#define _END_SEND END_SEND -#define _ERROR_POP_N 367 -#define _EXIT_INIT_CHECK EXIT_INIT_CHECK -#define _EXPAND_METHOD 368 -#define _EXPAND_METHOD_KW 369 -#define _FATAL_ERROR 370 -#define _FORMAT_SIMPLE FORMAT_SIMPLE -#define _FORMAT_WITH_SPEC FORMAT_WITH_SPEC -#define _FOR_ITER 371 -#define _FOR_ITER_GEN_FRAME 372 -#define _FOR_ITER_TIER_TWO 373 -#define _GET_AITER GET_AITER -#define _GET_ANEXT GET_ANEXT -#define _GET_AWAITABLE GET_AWAITABLE -#define _GET_ITER GET_ITER -#define _GET_LEN GET_LEN -#define _GET_YIELD_FROM_ITER GET_YIELD_FROM_ITER -#define _GUARD_BINARY_OP_EXTEND 374 -#define _GUARD_CALLABLE_LEN 375 -#define _GUARD_CALLABLE_STR_1 376 -#define _GUARD_CALLABLE_TUPLE_1 377 -#define _GUARD_CALLABLE_TYPE_1 378 -#define _GUARD_DORV_NO_DICT 379 -#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 380 -#define _GUARD_GLOBALS_VERSION 381 -#define _GUARD_IS_FALSE_POP 382 -#define _GUARD_IS_NONE_POP 383 -#define _GUARD_IS_NOT_NONE_POP 384 -#define _GUARD_IS_TRUE_POP 385 -#define _GUARD_KEYS_VERSION 386 -#define _GUARD_NOS_DICT 387 -#define _GUARD_NOS_FLOAT 388 -#define _GUARD_NOS_INT 389 -#define _GUARD_NOS_LIST 390 -#define _GUARD_NOS_NULL 391 -#define _GUARD_NOS_TUPLE 392 -#define _GUARD_NOS_UNICODE 393 -#define _GUARD_NOT_EXHAUSTED_LIST 394 -#define _GUARD_NOT_EXHAUSTED_RANGE 395 -#define _GUARD_NOT_EXHAUSTED_TUPLE 396 -#define _GUARD_TOS_ANY_SET 397 -#define _GUARD_TOS_DICT 398 -#define _GUARD_TOS_FLOAT 399 -#define _GUARD_TOS_INT 400 -#define _GUARD_TOS_LIST 401 -#define _GUARD_TOS_SLICE 402 -#define _GUARD_TOS_TUPLE 403 -#define _GUARD_TOS_UNICODE 404 -#define _GUARD_TYPE_VERSION 405 -#define _GUARD_TYPE_VERSION_AND_LOCK 406 -#define _IMPORT_FROM IMPORT_FROM -#define _IMPORT_NAME IMPORT_NAME -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 407 -#define _INIT_CALL_PY_EXACT_ARGS 408 -#define _INIT_CALL_PY_EXACT_ARGS_0 409 -#define _INIT_CALL_PY_EXACT_ARGS_1 410 -#define _INIT_CALL_PY_EXACT_ARGS_2 411 -#define _INIT_CALL_PY_EXACT_ARGS_3 412 -#define _INIT_CALL_PY_EXACT_ARGS_4 413 -#define _INSERT_NULL 414 -#define _INSTRUMENTED_FOR_ITER INSTRUMENTED_FOR_ITER -#define _INSTRUMENTED_INSTRUCTION INSTRUMENTED_INSTRUCTION -#define _INSTRUMENTED_JUMP_FORWARD INSTRUMENTED_JUMP_FORWARD -#define _INSTRUMENTED_LINE INSTRUMENTED_LINE -#define _INSTRUMENTED_NOT_TAKEN INSTRUMENTED_NOT_TAKEN -#define _INSTRUMENTED_POP_JUMP_IF_FALSE INSTRUMENTED_POP_JUMP_IF_FALSE -#define _INSTRUMENTED_POP_JUMP_IF_NONE INSTRUMENTED_POP_JUMP_IF_NONE -#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE INSTRUMENTED_POP_JUMP_IF_NOT_NONE -#define _INSTRUMENTED_POP_JUMP_IF_TRUE INSTRUMENTED_POP_JUMP_IF_TRUE -#define _IS_NONE 415 -#define _IS_OP IS_OP -#define _ITER_CHECK_LIST 416 -#define _ITER_CHECK_RANGE 417 -#define _ITER_CHECK_TUPLE 418 -#define _ITER_JUMP_LIST 419 -#define _ITER_JUMP_RANGE 420 -#define _ITER_JUMP_TUPLE 421 -#define _ITER_NEXT_LIST 422 -#define _ITER_NEXT_LIST_TIER_TWO 423 -#define _ITER_NEXT_RANGE 424 -#define _ITER_NEXT_TUPLE 425 -#define _JUMP_TO_TOP 426 -#define _LIST_APPEND LIST_APPEND -#define _LIST_EXTEND LIST_EXTEND -#define _LOAD_ATTR 427 -#define _LOAD_ATTR_CLASS 428 -#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN -#define _LOAD_ATTR_INSTANCE_VALUE 429 -#define _LOAD_ATTR_METHOD_LAZY_DICT 430 -#define _LOAD_ATTR_METHOD_NO_DICT 431 -#define _LOAD_ATTR_METHOD_WITH_VALUES 432 -#define _LOAD_ATTR_MODULE 433 -#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 434 -#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 435 -#define _LOAD_ATTR_PROPERTY_FRAME 436 -#define _LOAD_ATTR_SLOT 437 -#define _LOAD_ATTR_WITH_HINT 438 -#define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS -#define _LOAD_BYTECODE 439 -#define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT -#define _LOAD_CONST LOAD_CONST -#define _LOAD_CONST_IMMORTAL LOAD_CONST_IMMORTAL -#define _LOAD_CONST_INLINE 440 -#define _LOAD_CONST_INLINE_BORROW 441 -#define _LOAD_CONST_MORTAL LOAD_CONST_MORTAL -#define _LOAD_DEREF LOAD_DEREF -#define _LOAD_FAST 442 -#define _LOAD_FAST_0 443 -#define _LOAD_FAST_1 444 -#define _LOAD_FAST_2 445 -#define _LOAD_FAST_3 446 -#define _LOAD_FAST_4 447 -#define _LOAD_FAST_5 448 -#define _LOAD_FAST_6 449 -#define _LOAD_FAST_7 450 -#define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR -#define _LOAD_FAST_BORROW 451 -#define _LOAD_FAST_BORROW_0 452 -#define _LOAD_FAST_BORROW_1 453 -#define _LOAD_FAST_BORROW_2 454 -#define _LOAD_FAST_BORROW_3 455 -#define _LOAD_FAST_BORROW_4 456 -#define _LOAD_FAST_BORROW_5 457 -#define _LOAD_FAST_BORROW_6 458 -#define _LOAD_FAST_BORROW_7 459 -#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW LOAD_FAST_BORROW_LOAD_FAST_BORROW -#define _LOAD_FAST_CHECK LOAD_FAST_CHECK -#define _LOAD_FAST_LOAD_FAST LOAD_FAST_LOAD_FAST -#define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF -#define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS -#define _LOAD_GLOBAL 460 -#define _LOAD_GLOBAL_BUILTINS 461 -#define _LOAD_GLOBAL_MODULE 462 -#define _LOAD_LOCALS LOAD_LOCALS -#define _LOAD_NAME LOAD_NAME -#define _LOAD_SMALL_INT 463 -#define _LOAD_SMALL_INT_0 464 -#define _LOAD_SMALL_INT_1 465 -#define _LOAD_SMALL_INT_2 466 -#define _LOAD_SMALL_INT_3 467 -#define _LOAD_SPECIAL 468 -#define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR -#define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD -#define _MAKE_CALLARGS_A_TUPLE 469 -#define _MAKE_CELL MAKE_CELL -#define _MAKE_FUNCTION MAKE_FUNCTION -#define _MAKE_WARM 470 -#define _MAP_ADD MAP_ADD -#define _MATCH_CLASS MATCH_CLASS -#define _MATCH_KEYS MATCH_KEYS -#define _MATCH_MAPPING MATCH_MAPPING -#define _MATCH_SEQUENCE MATCH_SEQUENCE -#define _MAYBE_EXPAND_METHOD 471 -#define _MAYBE_EXPAND_METHOD_KW 472 -#define _MONITOR_CALL 473 -#define _MONITOR_CALL_KW 474 -#define _MONITOR_JUMP_BACKWARD 475 -#define _MONITOR_RESUME 476 -#define _NOP NOP -#define _POP_EXCEPT POP_EXCEPT -#define _POP_JUMP_IF_FALSE 477 -#define _POP_JUMP_IF_TRUE 478 -#define _POP_TOP POP_TOP -#define _POP_TOP_LOAD_CONST_INLINE 479 -#define _POP_TOP_LOAD_CONST_INLINE_BORROW 480 -#define _POP_TWO_LOAD_CONST_INLINE_BORROW 481 -#define _PUSH_EXC_INFO PUSH_EXC_INFO -#define _PUSH_FRAME 482 -#define _PUSH_NULL PUSH_NULL -#define _PUSH_NULL_CONDITIONAL 483 -#define _PY_FRAME_GENERAL 484 -#define _PY_FRAME_KW 485 -#define _QUICKEN_RESUME 486 -#define _REPLACE_WITH_TRUE 487 -#define _RESUME_CHECK RESUME_CHECK -#define _RETURN_GENERATOR RETURN_GENERATOR -#define _RETURN_VALUE RETURN_VALUE -#define _SAVE_RETURN_OFFSET 488 -#define _SEND 489 -#define _SEND_GEN_FRAME 490 -#define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS -#define _SET_ADD SET_ADD -#define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE -#define _SET_UPDATE SET_UPDATE -#define _START_EXECUTOR 491 -#define _STORE_ATTR 492 -#define _STORE_ATTR_INSTANCE_VALUE 493 -#define _STORE_ATTR_SLOT 494 -#define _STORE_ATTR_WITH_HINT 495 -#define _STORE_DEREF STORE_DEREF -#define _STORE_FAST 496 -#define _STORE_FAST_0 497 -#define _STORE_FAST_1 498 -#define _STORE_FAST_2 499 -#define _STORE_FAST_3 500 -#define _STORE_FAST_4 501 -#define _STORE_FAST_5 502 -#define _STORE_FAST_6 503 -#define _STORE_FAST_7 504 -#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST -#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST -#define _STORE_GLOBAL STORE_GLOBAL -#define _STORE_NAME STORE_NAME -#define _STORE_SLICE 505 -#define _STORE_SUBSCR 506 -#define _STORE_SUBSCR_DICT 507 -#define _STORE_SUBSCR_LIST_INT 508 -#define _SWAP SWAP -#define _TIER2_RESUME_CHECK 509 -#define _TO_BOOL 510 -#define _TO_BOOL_BOOL TO_BOOL_BOOL -#define _TO_BOOL_INT TO_BOOL_INT -#define _TO_BOOL_LIST 511 -#define _TO_BOOL_NONE TO_BOOL_NONE -#define _TO_BOOL_STR 512 -#define _UNARY_INVERT UNARY_INVERT -#define _UNARY_NEGATIVE UNARY_NEGATIVE -#define _UNARY_NOT UNARY_NOT -#define _UNPACK_EX UNPACK_EX -#define _UNPACK_SEQUENCE 513 -#define _UNPACK_SEQUENCE_LIST 514 -#define _UNPACK_SEQUENCE_TUPLE 515 -#define _UNPACK_SEQUENCE_TWO_TUPLE 516 -#define _WITH_EXCEPT_START WITH_EXCEPT_START -#define _YIELD_VALUE YIELD_VALUE -#define MAX_UOP_ID 516 - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CORE_UOP_IDS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_uop_metadata.h b/Python314_4_x86_Template/include/internal/pycore_uop_metadata.h deleted file mode 100644 index 2166a6900..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_uop_metadata.h +++ /dev/null @@ -1,1204 +0,0 @@ -// This file is generated by Tools/cases_generator/uop_metadata_generator.py -// from: -// Python/bytecodes.c -// Do not edit! - -#ifndef Py_CORE_UOP_METADATA_H -#define Py_CORE_UOP_METADATA_H -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdint.h> -#include "pycore_uop_ids.h" -extern const uint16_t _PyUop_Flags[MAX_UOP_ID+1]; -extern const uint8_t _PyUop_Replication[MAX_UOP_ID+1]; -extern const char * const _PyOpcode_uop_name[MAX_UOP_ID+1]; - -extern int _PyUop_num_popped(int opcode, int oparg); - -#ifdef NEED_OPCODE_METADATA -const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = { - [_NOP] = HAS_PURE_FLAG, - [_CHECK_PERIODIC] = HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_RESUME_CHECK] = HAS_DEOPT_FLAG, - [_LOAD_FAST_CHECK] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_FAST_0] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_1] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_2] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_3] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_4] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_5] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_6] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_7] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_0] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_1] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_2] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_3] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_4] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_5] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_6] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW_7] = HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_BORROW] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG, - [_LOAD_FAST_AND_CLEAR] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, - [_LOAD_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, - [_LOAD_FAST_BORROW_LOAD_FAST_BORROW] = HAS_ARG_FLAG | HAS_LOCAL_FLAG, - [_LOAD_CONST_MORTAL] = HAS_ARG_FLAG | HAS_CONST_FLAG, - [_LOAD_CONST_IMMORTAL] = HAS_ARG_FLAG | HAS_CONST_FLAG, - [_LOAD_SMALL_INT_0] = 0, - [_LOAD_SMALL_INT_1] = 0, - [_LOAD_SMALL_INT_2] = 0, - [_LOAD_SMALL_INT_3] = 0, - [_LOAD_SMALL_INT] = HAS_ARG_FLAG, - [_STORE_FAST_0] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_1] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_2] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_3] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_4] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_5] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_6] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_7] = HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_STORE_FAST_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ESCAPES_FLAG, - [_POP_TOP] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_PUSH_NULL] = HAS_PURE_FLAG, - [_END_FOR] = HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG, - [_END_SEND] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_UNARY_NEGATIVE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_UNARY_NOT] = HAS_PURE_FLAG, - [_TO_BOOL] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_TO_BOOL_BOOL] = HAS_EXIT_FLAG, - [_TO_BOOL_INT] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_NOS_LIST] = HAS_EXIT_FLAG, - [_GUARD_TOS_LIST] = HAS_EXIT_FLAG, - [_GUARD_TOS_SLICE] = HAS_EXIT_FLAG, - [_TO_BOOL_LIST] = 0, - [_TO_BOOL_NONE] = HAS_EXIT_FLAG, - [_GUARD_NOS_UNICODE] = HAS_EXIT_FLAG, - [_GUARD_TOS_UNICODE] = HAS_EXIT_FLAG, - [_TO_BOOL_STR] = HAS_ESCAPES_FLAG, - [_REPLACE_WITH_TRUE] = HAS_ESCAPES_FLAG, - [_UNARY_INVERT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_NOS_INT] = HAS_EXIT_FLAG, - [_GUARD_TOS_INT] = HAS_EXIT_FLAG, - [_BINARY_OP_MULTIPLY_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_ADD_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_SUBTRACT_INT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_GUARD_NOS_FLOAT] = HAS_EXIT_FLAG, - [_GUARD_TOS_FLOAT] = HAS_EXIT_FLAG, - [_BINARY_OP_MULTIPLY_FLOAT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_ADD_FLOAT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_SUBTRACT_FLOAT] = HAS_ERROR_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_ADD_UNICODE] = HAS_ERROR_FLAG | HAS_PURE_FLAG, - [_BINARY_OP_INPLACE_ADD_UNICODE] = HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_BINARY_OP_EXTEND] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_BINARY_OP_EXTEND] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_BINARY_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BINARY_OP_SUBSCR_LIST_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_BINARY_OP_SUBSCR_LIST_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BINARY_OP_SUBSCR_STR_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_NOS_TUPLE] = HAS_EXIT_FLAG, - [_GUARD_TOS_TUPLE] = HAS_EXIT_FLAG, - [_BINARY_OP_SUBSCR_TUPLE_INT] = HAS_DEOPT_FLAG, - [_GUARD_NOS_DICT] = HAS_EXIT_FLAG, - [_GUARD_TOS_DICT] = HAS_EXIT_FLAG, - [_BINARY_OP_SUBSCR_DICT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BINARY_OP_SUBSCR_CHECK_FUNC] = HAS_DEOPT_FLAG, - [_BINARY_OP_SUBSCR_INIT_CALL] = 0, - [_LIST_APPEND] = HAS_ARG_FLAG | HAS_ERROR_FLAG, - [_SET_ADD] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_SUBSCR] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_SUBSCR_LIST_INT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_STORE_SUBSCR_DICT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DELETE_SUBSCR] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_INTRINSIC_1] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_INTRINSIC_2] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_RETURN_VALUE] = HAS_ESCAPES_FLAG, - [_GET_AITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GET_ANEXT] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_GET_AWAITABLE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_SEND_GEN_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_YIELD_VALUE] = HAS_ARG_FLAG, - [_POP_EXCEPT] = HAS_ESCAPES_FLAG, - [_LOAD_COMMON_CONSTANT] = HAS_ARG_FLAG, - [_LOAD_BUILD_CLASS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_NAME] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DELETE_NAME] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_UNPACK_SEQUENCE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_UNPACK_SEQUENCE_TWO_TUPLE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_UNPACK_SEQUENCE_TUPLE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_UNPACK_SEQUENCE_LIST] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_UNPACK_EX] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_ATTR] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DELETE_ATTR] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_GLOBAL] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DELETE_GLOBAL] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_LOCALS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_NAME] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_GLOBAL] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_PUSH_NULL_CONDITIONAL] = HAS_ARG_FLAG, - [_GUARD_GLOBALS_VERSION] = HAS_DEOPT_FLAG, - [_LOAD_GLOBAL_MODULE] = HAS_DEOPT_FLAG, - [_LOAD_GLOBAL_BUILTINS] = HAS_DEOPT_FLAG, - [_DELETE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MAKE_CELL] = HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_DELETE_DEREF] = HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_FROM_DICT_OR_DEREF] = HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_DEREF] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_STORE_DEREF] = HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG, - [_COPY_FREE_VARS] = HAS_ARG_FLAG, - [_BUILD_STRING] = HAS_ARG_FLAG | HAS_ERROR_FLAG, - [_BUILD_INTERPOLATION] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BUILD_TEMPLATE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BUILD_TUPLE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG, - [_BUILD_LIST] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_LIST_EXTEND] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_SET_UPDATE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BUILD_SET] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BUILD_MAP] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_SETUP_ANNOTATIONS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DICT_UPDATE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_DICT_MERGE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MAP_ADD] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_SUPER_ATTR_ATTR] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_SUPER_ATTR_METHOD] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_ATTR] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_TYPE_VERSION] = HAS_EXIT_FLAG, - [_GUARD_TYPE_VERSION_AND_LOCK] = HAS_EXIT_FLAG, - [_CHECK_MANAGED_OBJECT_HAS_VALUES] = HAS_DEOPT_FLAG, - [_LOAD_ATTR_INSTANCE_VALUE] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_ATTR_MODULE] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_ATTR_SLOT] = HAS_DEOPT_FLAG, - [_CHECK_ATTR_CLASS] = HAS_EXIT_FLAG, - [_LOAD_ATTR_CLASS] = 0, - [_LOAD_ATTR_PROPERTY_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_GUARD_DORV_NO_DICT] = HAS_EXIT_FLAG, - [_STORE_ATTR_INSTANCE_VALUE] = HAS_ESCAPES_FLAG, - [_STORE_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_STORE_ATTR_SLOT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG, - [_COMPARE_OP] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_COMPARE_OP_FLOAT] = HAS_ARG_FLAG, - [_COMPARE_OP_INT] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_COMPARE_OP_STR] = HAS_ARG_FLAG, - [_IS_OP] = HAS_ARG_FLAG, - [_CONTAINS_OP] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_TOS_ANY_SET] = HAS_DEOPT_FLAG, - [_CONTAINS_OP_SET] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CONTAINS_OP_DICT] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_EG_MATCH] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_EXC_MATCH] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_IMPORT_NAME] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_IMPORT_FROM] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_IS_NONE] = 0, - [_GET_LEN] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MATCH_CLASS] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MATCH_MAPPING] = 0, - [_MATCH_SEQUENCE] = 0, - [_MATCH_KEYS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GET_ITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GET_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_ITER_CHECK_LIST] = HAS_EXIT_FLAG, - [_GUARD_NOT_EXHAUSTED_LIST] = HAS_EXIT_FLAG, - [_ITER_NEXT_LIST_TIER_TWO] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, - [_ITER_CHECK_TUPLE] = HAS_EXIT_FLAG, - [_GUARD_NOT_EXHAUSTED_TUPLE] = HAS_EXIT_FLAG, - [_ITER_NEXT_TUPLE] = 0, - [_ITER_CHECK_RANGE] = HAS_EXIT_FLAG, - [_GUARD_NOT_EXHAUSTED_RANGE] = HAS_EXIT_FLAG, - [_ITER_NEXT_RANGE] = HAS_ERROR_FLAG, - [_FOR_ITER_GEN_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_INSERT_NULL] = 0, - [_LOAD_SPECIAL] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_WITH_EXCEPT_START] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_PUSH_EXC_INFO] = 0, - [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = HAS_DEOPT_FLAG, - [_GUARD_KEYS_VERSION] = HAS_DEOPT_FLAG, - [_LOAD_ATTR_METHOD_WITH_VALUES] = HAS_ARG_FLAG, - [_LOAD_ATTR_METHOD_NO_DICT] = HAS_ARG_FLAG, - [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_ATTR_METHOD_LAZY_DICT] = HAS_DEOPT_FLAG, - [_LOAD_ATTR_METHOD_LAZY_DICT] = HAS_ARG_FLAG, - [_MAYBE_EXPAND_METHOD] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_PY_FRAME_GENERAL] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_FUNCTION_VERSION] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_CHECK_FUNCTION_VERSION_INLINE] = HAS_EXIT_FLAG, - [_CHECK_METHOD_VERSION] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_EXPAND_METHOD] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_IS_NOT_PY_CALLABLE] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_CALL_NON_PY_GENERAL] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_PEP_523] = HAS_DEOPT_FLAG, - [_CHECK_FUNCTION_EXACT_ARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_CHECK_STACK_SPACE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG, - [_CHECK_RECURSION_REMAINING] = HAS_DEOPT_FLAG, - [_INIT_CALL_PY_EXACT_ARGS_0] = HAS_PURE_FLAG, - [_INIT_CALL_PY_EXACT_ARGS_1] = HAS_PURE_FLAG, - [_INIT_CALL_PY_EXACT_ARGS_2] = HAS_PURE_FLAG, - [_INIT_CALL_PY_EXACT_ARGS_3] = HAS_PURE_FLAG, - [_INIT_CALL_PY_EXACT_ARGS_4] = HAS_PURE_FLAG, - [_INIT_CALL_PY_EXACT_ARGS] = HAS_ARG_FLAG | HAS_PURE_FLAG, - [_PUSH_FRAME] = 0, - [_GUARD_NOS_NULL] = HAS_DEOPT_FLAG, - [_GUARD_CALLABLE_TYPE_1] = HAS_DEOPT_FLAG, - [_CALL_TYPE_1] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_CALLABLE_STR_1] = HAS_DEOPT_FLAG, - [_CALL_STR_1] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_CALLABLE_TUPLE_1] = HAS_DEOPT_FLAG, - [_CALL_TUPLE_1] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_AND_ALLOCATE_OBJECT] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CREATE_INIT_FRAME] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_EXIT_INIT_CHECK] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CALL_BUILTIN_CLASS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_BUILTIN_O] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_BUILTIN_FAST] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_CALLABLE_LEN] = HAS_DEOPT_FLAG, - [_CALL_LEN] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CALL_ISINSTANCE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_CALL_LIST_APPEND] = HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_METHOD_DESCRIPTOR_O] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_METHOD_DESCRIPTOR_NOARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CALL_METHOD_DESCRIPTOR_FAST] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MAYBE_EXPAND_METHOD_KW] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_PY_FRAME_KW] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_FUNCTION_VERSION_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_CHECK_METHOD_VERSION_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_EXPAND_METHOD_KW] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG, - [_CHECK_IS_NOT_PY_CALLABLE_KW] = HAS_ARG_FLAG | HAS_EXIT_FLAG, - [_CALL_KW_NON_PY] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_MAKE_CALLARGS_A_TUPLE] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_MAKE_FUNCTION] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_SET_FUNCTION_ATTRIBUTE] = HAS_ARG_FLAG, - [_RETURN_GENERATOR] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_BUILD_SLICE] = HAS_ARG_FLAG | HAS_ERROR_FLAG, - [_CONVERT_VALUE] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_FORMAT_SIMPLE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_FORMAT_WITH_SPEC] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG, - [_COPY] = HAS_ARG_FLAG | HAS_PURE_FLAG, - [_BINARY_OP] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG, - [_SWAP] = HAS_ARG_FLAG | HAS_PURE_FLAG, - [_GUARD_IS_TRUE_POP] = HAS_EXIT_FLAG, - [_GUARD_IS_FALSE_POP] = HAS_EXIT_FLAG, - [_GUARD_IS_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, - [_GUARD_IS_NOT_NONE_POP] = HAS_EXIT_FLAG | HAS_ESCAPES_FLAG, - [_JUMP_TO_TOP] = 0, - [_SET_IP] = 0, - [_CHECK_STACK_SPACE_OPERAND] = HAS_DEOPT_FLAG, - [_SAVE_RETURN_OFFSET] = HAS_ARG_FLAG, - [_EXIT_TRACE] = HAS_ESCAPES_FLAG, - [_CHECK_VALIDITY] = HAS_DEOPT_FLAG, - [_LOAD_CONST_INLINE] = HAS_PURE_FLAG, - [_POP_TOP_LOAD_CONST_INLINE] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_LOAD_CONST_INLINE_BORROW] = HAS_PURE_FLAG, - [_POP_TOP_LOAD_CONST_INLINE_BORROW] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_POP_TWO_LOAD_CONST_INLINE_BORROW] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG, - [_CHECK_FUNCTION] = HAS_DEOPT_FLAG, - [_START_EXECUTOR] = 0, - [_MAKE_WARM] = 0, - [_FATAL_ERROR] = 0, - [_DEOPT] = 0, - [_ERROR_POP_N] = HAS_ARG_FLAG, - [_TIER2_RESUME_CHECK] = HAS_DEOPT_FLAG, -}; - -const uint8_t _PyUop_Replication[MAX_UOP_ID+1] = { - [_LOAD_FAST] = 8, - [_LOAD_FAST_BORROW] = 8, - [_LOAD_SMALL_INT] = 4, - [_STORE_FAST] = 8, - [_INIT_CALL_PY_EXACT_ARGS] = 5, -}; - -const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = { - [_BINARY_OP] = "_BINARY_OP", - [_BINARY_OP_ADD_FLOAT] = "_BINARY_OP_ADD_FLOAT", - [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", - [_BINARY_OP_ADD_UNICODE] = "_BINARY_OP_ADD_UNICODE", - [_BINARY_OP_EXTEND] = "_BINARY_OP_EXTEND", - [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", - [_BINARY_OP_MULTIPLY_FLOAT] = "_BINARY_OP_MULTIPLY_FLOAT", - [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", - [_BINARY_OP_SUBSCR_CHECK_FUNC] = "_BINARY_OP_SUBSCR_CHECK_FUNC", - [_BINARY_OP_SUBSCR_DICT] = "_BINARY_OP_SUBSCR_DICT", - [_BINARY_OP_SUBSCR_INIT_CALL] = "_BINARY_OP_SUBSCR_INIT_CALL", - [_BINARY_OP_SUBSCR_LIST_INT] = "_BINARY_OP_SUBSCR_LIST_INT", - [_BINARY_OP_SUBSCR_LIST_SLICE] = "_BINARY_OP_SUBSCR_LIST_SLICE", - [_BINARY_OP_SUBSCR_STR_INT] = "_BINARY_OP_SUBSCR_STR_INT", - [_BINARY_OP_SUBSCR_TUPLE_INT] = "_BINARY_OP_SUBSCR_TUPLE_INT", - [_BINARY_OP_SUBTRACT_FLOAT] = "_BINARY_OP_SUBTRACT_FLOAT", - [_BINARY_OP_SUBTRACT_INT] = "_BINARY_OP_SUBTRACT_INT", - [_BINARY_SLICE] = "_BINARY_SLICE", - [_BUILD_INTERPOLATION] = "_BUILD_INTERPOLATION", - [_BUILD_LIST] = "_BUILD_LIST", - [_BUILD_MAP] = "_BUILD_MAP", - [_BUILD_SET] = "_BUILD_SET", - [_BUILD_SLICE] = "_BUILD_SLICE", - [_BUILD_STRING] = "_BUILD_STRING", - [_BUILD_TEMPLATE] = "_BUILD_TEMPLATE", - [_BUILD_TUPLE] = "_BUILD_TUPLE", - [_CALL_BUILTIN_CLASS] = "_CALL_BUILTIN_CLASS", - [_CALL_BUILTIN_FAST] = "_CALL_BUILTIN_FAST", - [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = "_CALL_BUILTIN_FAST_WITH_KEYWORDS", - [_CALL_BUILTIN_O] = "_CALL_BUILTIN_O", - [_CALL_INTRINSIC_1] = "_CALL_INTRINSIC_1", - [_CALL_INTRINSIC_2] = "_CALL_INTRINSIC_2", - [_CALL_ISINSTANCE] = "_CALL_ISINSTANCE", - [_CALL_KW_NON_PY] = "_CALL_KW_NON_PY", - [_CALL_LEN] = "_CALL_LEN", - [_CALL_LIST_APPEND] = "_CALL_LIST_APPEND", - [_CALL_METHOD_DESCRIPTOR_FAST] = "_CALL_METHOD_DESCRIPTOR_FAST", - [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - [_CALL_METHOD_DESCRIPTOR_NOARGS] = "_CALL_METHOD_DESCRIPTOR_NOARGS", - [_CALL_METHOD_DESCRIPTOR_O] = "_CALL_METHOD_DESCRIPTOR_O", - [_CALL_NON_PY_GENERAL] = "_CALL_NON_PY_GENERAL", - [_CALL_STR_1] = "_CALL_STR_1", - [_CALL_TUPLE_1] = "_CALL_TUPLE_1", - [_CALL_TYPE_1] = "_CALL_TYPE_1", - [_CHECK_AND_ALLOCATE_OBJECT] = "_CHECK_AND_ALLOCATE_OBJECT", - [_CHECK_ATTR_CLASS] = "_CHECK_ATTR_CLASS", - [_CHECK_ATTR_METHOD_LAZY_DICT] = "_CHECK_ATTR_METHOD_LAZY_DICT", - [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = "_CHECK_CALL_BOUND_METHOD_EXACT_ARGS", - [_CHECK_EG_MATCH] = "_CHECK_EG_MATCH", - [_CHECK_EXC_MATCH] = "_CHECK_EXC_MATCH", - [_CHECK_FUNCTION] = "_CHECK_FUNCTION", - [_CHECK_FUNCTION_EXACT_ARGS] = "_CHECK_FUNCTION_EXACT_ARGS", - [_CHECK_FUNCTION_VERSION] = "_CHECK_FUNCTION_VERSION", - [_CHECK_FUNCTION_VERSION_INLINE] = "_CHECK_FUNCTION_VERSION_INLINE", - [_CHECK_FUNCTION_VERSION_KW] = "_CHECK_FUNCTION_VERSION_KW", - [_CHECK_IS_NOT_PY_CALLABLE] = "_CHECK_IS_NOT_PY_CALLABLE", - [_CHECK_IS_NOT_PY_CALLABLE_KW] = "_CHECK_IS_NOT_PY_CALLABLE_KW", - [_CHECK_MANAGED_OBJECT_HAS_VALUES] = "_CHECK_MANAGED_OBJECT_HAS_VALUES", - [_CHECK_METHOD_VERSION] = "_CHECK_METHOD_VERSION", - [_CHECK_METHOD_VERSION_KW] = "_CHECK_METHOD_VERSION_KW", - [_CHECK_PEP_523] = "_CHECK_PEP_523", - [_CHECK_PERIODIC] = "_CHECK_PERIODIC", - [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = "_CHECK_PERIODIC_IF_NOT_YIELD_FROM", - [_CHECK_RECURSION_REMAINING] = "_CHECK_RECURSION_REMAINING", - [_CHECK_STACK_SPACE] = "_CHECK_STACK_SPACE", - [_CHECK_STACK_SPACE_OPERAND] = "_CHECK_STACK_SPACE_OPERAND", - [_CHECK_VALIDITY] = "_CHECK_VALIDITY", - [_COMPARE_OP] = "_COMPARE_OP", - [_COMPARE_OP_FLOAT] = "_COMPARE_OP_FLOAT", - [_COMPARE_OP_INT] = "_COMPARE_OP_INT", - [_COMPARE_OP_STR] = "_COMPARE_OP_STR", - [_CONTAINS_OP] = "_CONTAINS_OP", - [_CONTAINS_OP_DICT] = "_CONTAINS_OP_DICT", - [_CONTAINS_OP_SET] = "_CONTAINS_OP_SET", - [_CONVERT_VALUE] = "_CONVERT_VALUE", - [_COPY] = "_COPY", - [_COPY_FREE_VARS] = "_COPY_FREE_VARS", - [_CREATE_INIT_FRAME] = "_CREATE_INIT_FRAME", - [_DELETE_ATTR] = "_DELETE_ATTR", - [_DELETE_DEREF] = "_DELETE_DEREF", - [_DELETE_FAST] = "_DELETE_FAST", - [_DELETE_GLOBAL] = "_DELETE_GLOBAL", - [_DELETE_NAME] = "_DELETE_NAME", - [_DELETE_SUBSCR] = "_DELETE_SUBSCR", - [_DEOPT] = "_DEOPT", - [_DICT_MERGE] = "_DICT_MERGE", - [_DICT_UPDATE] = "_DICT_UPDATE", - [_END_FOR] = "_END_FOR", - [_END_SEND] = "_END_SEND", - [_ERROR_POP_N] = "_ERROR_POP_N", - [_EXIT_INIT_CHECK] = "_EXIT_INIT_CHECK", - [_EXIT_TRACE] = "_EXIT_TRACE", - [_EXPAND_METHOD] = "_EXPAND_METHOD", - [_EXPAND_METHOD_KW] = "_EXPAND_METHOD_KW", - [_FATAL_ERROR] = "_FATAL_ERROR", - [_FORMAT_SIMPLE] = "_FORMAT_SIMPLE", - [_FORMAT_WITH_SPEC] = "_FORMAT_WITH_SPEC", - [_FOR_ITER_GEN_FRAME] = "_FOR_ITER_GEN_FRAME", - [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO", - [_GET_AITER] = "_GET_AITER", - [_GET_ANEXT] = "_GET_ANEXT", - [_GET_AWAITABLE] = "_GET_AWAITABLE", - [_GET_ITER] = "_GET_ITER", - [_GET_LEN] = "_GET_LEN", - [_GET_YIELD_FROM_ITER] = "_GET_YIELD_FROM_ITER", - [_GUARD_BINARY_OP_EXTEND] = "_GUARD_BINARY_OP_EXTEND", - [_GUARD_CALLABLE_LEN] = "_GUARD_CALLABLE_LEN", - [_GUARD_CALLABLE_STR_1] = "_GUARD_CALLABLE_STR_1", - [_GUARD_CALLABLE_TUPLE_1] = "_GUARD_CALLABLE_TUPLE_1", - [_GUARD_CALLABLE_TYPE_1] = "_GUARD_CALLABLE_TYPE_1", - [_GUARD_DORV_NO_DICT] = "_GUARD_DORV_NO_DICT", - [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = "_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT", - [_GUARD_GLOBALS_VERSION] = "_GUARD_GLOBALS_VERSION", - [_GUARD_IS_FALSE_POP] = "_GUARD_IS_FALSE_POP", - [_GUARD_IS_NONE_POP] = "_GUARD_IS_NONE_POP", - [_GUARD_IS_NOT_NONE_POP] = "_GUARD_IS_NOT_NONE_POP", - [_GUARD_IS_TRUE_POP] = "_GUARD_IS_TRUE_POP", - [_GUARD_KEYS_VERSION] = "_GUARD_KEYS_VERSION", - [_GUARD_NOS_DICT] = "_GUARD_NOS_DICT", - [_GUARD_NOS_FLOAT] = "_GUARD_NOS_FLOAT", - [_GUARD_NOS_INT] = "_GUARD_NOS_INT", - [_GUARD_NOS_LIST] = "_GUARD_NOS_LIST", - [_GUARD_NOS_NULL] = "_GUARD_NOS_NULL", - [_GUARD_NOS_TUPLE] = "_GUARD_NOS_TUPLE", - [_GUARD_NOS_UNICODE] = "_GUARD_NOS_UNICODE", - [_GUARD_NOT_EXHAUSTED_LIST] = "_GUARD_NOT_EXHAUSTED_LIST", - [_GUARD_NOT_EXHAUSTED_RANGE] = "_GUARD_NOT_EXHAUSTED_RANGE", - [_GUARD_NOT_EXHAUSTED_TUPLE] = "_GUARD_NOT_EXHAUSTED_TUPLE", - [_GUARD_TOS_ANY_SET] = "_GUARD_TOS_ANY_SET", - [_GUARD_TOS_DICT] = "_GUARD_TOS_DICT", - [_GUARD_TOS_FLOAT] = "_GUARD_TOS_FLOAT", - [_GUARD_TOS_INT] = "_GUARD_TOS_INT", - [_GUARD_TOS_LIST] = "_GUARD_TOS_LIST", - [_GUARD_TOS_SLICE] = "_GUARD_TOS_SLICE", - [_GUARD_TOS_TUPLE] = "_GUARD_TOS_TUPLE", - [_GUARD_TOS_UNICODE] = "_GUARD_TOS_UNICODE", - [_GUARD_TYPE_VERSION] = "_GUARD_TYPE_VERSION", - [_GUARD_TYPE_VERSION_AND_LOCK] = "_GUARD_TYPE_VERSION_AND_LOCK", - [_IMPORT_FROM] = "_IMPORT_FROM", - [_IMPORT_NAME] = "_IMPORT_NAME", - [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = "_INIT_CALL_BOUND_METHOD_EXACT_ARGS", - [_INIT_CALL_PY_EXACT_ARGS] = "_INIT_CALL_PY_EXACT_ARGS", - [_INIT_CALL_PY_EXACT_ARGS_0] = "_INIT_CALL_PY_EXACT_ARGS_0", - [_INIT_CALL_PY_EXACT_ARGS_1] = "_INIT_CALL_PY_EXACT_ARGS_1", - [_INIT_CALL_PY_EXACT_ARGS_2] = "_INIT_CALL_PY_EXACT_ARGS_2", - [_INIT_CALL_PY_EXACT_ARGS_3] = "_INIT_CALL_PY_EXACT_ARGS_3", - [_INIT_CALL_PY_EXACT_ARGS_4] = "_INIT_CALL_PY_EXACT_ARGS_4", - [_INSERT_NULL] = "_INSERT_NULL", - [_IS_NONE] = "_IS_NONE", - [_IS_OP] = "_IS_OP", - [_ITER_CHECK_LIST] = "_ITER_CHECK_LIST", - [_ITER_CHECK_RANGE] = "_ITER_CHECK_RANGE", - [_ITER_CHECK_TUPLE] = "_ITER_CHECK_TUPLE", - [_ITER_NEXT_LIST_TIER_TWO] = "_ITER_NEXT_LIST_TIER_TWO", - [_ITER_NEXT_RANGE] = "_ITER_NEXT_RANGE", - [_ITER_NEXT_TUPLE] = "_ITER_NEXT_TUPLE", - [_JUMP_TO_TOP] = "_JUMP_TO_TOP", - [_LIST_APPEND] = "_LIST_APPEND", - [_LIST_EXTEND] = "_LIST_EXTEND", - [_LOAD_ATTR] = "_LOAD_ATTR", - [_LOAD_ATTR_CLASS] = "_LOAD_ATTR_CLASS", - [_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE", - [_LOAD_ATTR_METHOD_LAZY_DICT] = "_LOAD_ATTR_METHOD_LAZY_DICT", - [_LOAD_ATTR_METHOD_NO_DICT] = "_LOAD_ATTR_METHOD_NO_DICT", - [_LOAD_ATTR_METHOD_WITH_VALUES] = "_LOAD_ATTR_METHOD_WITH_VALUES", - [_LOAD_ATTR_MODULE] = "_LOAD_ATTR_MODULE", - [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "_LOAD_ATTR_NONDESCRIPTOR_NO_DICT", - [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", - [_LOAD_ATTR_PROPERTY_FRAME] = "_LOAD_ATTR_PROPERTY_FRAME", - [_LOAD_ATTR_SLOT] = "_LOAD_ATTR_SLOT", - [_LOAD_ATTR_WITH_HINT] = "_LOAD_ATTR_WITH_HINT", - [_LOAD_BUILD_CLASS] = "_LOAD_BUILD_CLASS", - [_LOAD_COMMON_CONSTANT] = "_LOAD_COMMON_CONSTANT", - [_LOAD_CONST_IMMORTAL] = "_LOAD_CONST_IMMORTAL", - [_LOAD_CONST_INLINE] = "_LOAD_CONST_INLINE", - [_LOAD_CONST_INLINE_BORROW] = "_LOAD_CONST_INLINE_BORROW", - [_LOAD_CONST_MORTAL] = "_LOAD_CONST_MORTAL", - [_LOAD_DEREF] = "_LOAD_DEREF", - [_LOAD_FAST] = "_LOAD_FAST", - [_LOAD_FAST_0] = "_LOAD_FAST_0", - [_LOAD_FAST_1] = "_LOAD_FAST_1", - [_LOAD_FAST_2] = "_LOAD_FAST_2", - [_LOAD_FAST_3] = "_LOAD_FAST_3", - [_LOAD_FAST_4] = "_LOAD_FAST_4", - [_LOAD_FAST_5] = "_LOAD_FAST_5", - [_LOAD_FAST_6] = "_LOAD_FAST_6", - [_LOAD_FAST_7] = "_LOAD_FAST_7", - [_LOAD_FAST_AND_CLEAR] = "_LOAD_FAST_AND_CLEAR", - [_LOAD_FAST_BORROW] = "_LOAD_FAST_BORROW", - [_LOAD_FAST_BORROW_0] = "_LOAD_FAST_BORROW_0", - [_LOAD_FAST_BORROW_1] = "_LOAD_FAST_BORROW_1", - [_LOAD_FAST_BORROW_2] = "_LOAD_FAST_BORROW_2", - [_LOAD_FAST_BORROW_3] = "_LOAD_FAST_BORROW_3", - [_LOAD_FAST_BORROW_4] = "_LOAD_FAST_BORROW_4", - [_LOAD_FAST_BORROW_5] = "_LOAD_FAST_BORROW_5", - [_LOAD_FAST_BORROW_6] = "_LOAD_FAST_BORROW_6", - [_LOAD_FAST_BORROW_7] = "_LOAD_FAST_BORROW_7", - [_LOAD_FAST_BORROW_LOAD_FAST_BORROW] = "_LOAD_FAST_BORROW_LOAD_FAST_BORROW", - [_LOAD_FAST_CHECK] = "_LOAD_FAST_CHECK", - [_LOAD_FAST_LOAD_FAST] = "_LOAD_FAST_LOAD_FAST", - [_LOAD_FROM_DICT_OR_DEREF] = "_LOAD_FROM_DICT_OR_DEREF", - [_LOAD_GLOBAL] = "_LOAD_GLOBAL", - [_LOAD_GLOBAL_BUILTINS] = "_LOAD_GLOBAL_BUILTINS", - [_LOAD_GLOBAL_MODULE] = "_LOAD_GLOBAL_MODULE", - [_LOAD_LOCALS] = "_LOAD_LOCALS", - [_LOAD_NAME] = "_LOAD_NAME", - [_LOAD_SMALL_INT] = "_LOAD_SMALL_INT", - [_LOAD_SMALL_INT_0] = "_LOAD_SMALL_INT_0", - [_LOAD_SMALL_INT_1] = "_LOAD_SMALL_INT_1", - [_LOAD_SMALL_INT_2] = "_LOAD_SMALL_INT_2", - [_LOAD_SMALL_INT_3] = "_LOAD_SMALL_INT_3", - [_LOAD_SPECIAL] = "_LOAD_SPECIAL", - [_LOAD_SUPER_ATTR_ATTR] = "_LOAD_SUPER_ATTR_ATTR", - [_LOAD_SUPER_ATTR_METHOD] = "_LOAD_SUPER_ATTR_METHOD", - [_MAKE_CALLARGS_A_TUPLE] = "_MAKE_CALLARGS_A_TUPLE", - [_MAKE_CELL] = "_MAKE_CELL", - [_MAKE_FUNCTION] = "_MAKE_FUNCTION", - [_MAKE_WARM] = "_MAKE_WARM", - [_MAP_ADD] = "_MAP_ADD", - [_MATCH_CLASS] = "_MATCH_CLASS", - [_MATCH_KEYS] = "_MATCH_KEYS", - [_MATCH_MAPPING] = "_MATCH_MAPPING", - [_MATCH_SEQUENCE] = "_MATCH_SEQUENCE", - [_MAYBE_EXPAND_METHOD] = "_MAYBE_EXPAND_METHOD", - [_MAYBE_EXPAND_METHOD_KW] = "_MAYBE_EXPAND_METHOD_KW", - [_NOP] = "_NOP", - [_POP_EXCEPT] = "_POP_EXCEPT", - [_POP_TOP] = "_POP_TOP", - [_POP_TOP_LOAD_CONST_INLINE] = "_POP_TOP_LOAD_CONST_INLINE", - [_POP_TOP_LOAD_CONST_INLINE_BORROW] = "_POP_TOP_LOAD_CONST_INLINE_BORROW", - [_POP_TWO_LOAD_CONST_INLINE_BORROW] = "_POP_TWO_LOAD_CONST_INLINE_BORROW", - [_PUSH_EXC_INFO] = "_PUSH_EXC_INFO", - [_PUSH_FRAME] = "_PUSH_FRAME", - [_PUSH_NULL] = "_PUSH_NULL", - [_PUSH_NULL_CONDITIONAL] = "_PUSH_NULL_CONDITIONAL", - [_PY_FRAME_GENERAL] = "_PY_FRAME_GENERAL", - [_PY_FRAME_KW] = "_PY_FRAME_KW", - [_REPLACE_WITH_TRUE] = "_REPLACE_WITH_TRUE", - [_RESUME_CHECK] = "_RESUME_CHECK", - [_RETURN_GENERATOR] = "_RETURN_GENERATOR", - [_RETURN_VALUE] = "_RETURN_VALUE", - [_SAVE_RETURN_OFFSET] = "_SAVE_RETURN_OFFSET", - [_SEND_GEN_FRAME] = "_SEND_GEN_FRAME", - [_SETUP_ANNOTATIONS] = "_SETUP_ANNOTATIONS", - [_SET_ADD] = "_SET_ADD", - [_SET_FUNCTION_ATTRIBUTE] = "_SET_FUNCTION_ATTRIBUTE", - [_SET_IP] = "_SET_IP", - [_SET_UPDATE] = "_SET_UPDATE", - [_START_EXECUTOR] = "_START_EXECUTOR", - [_STORE_ATTR] = "_STORE_ATTR", - [_STORE_ATTR_INSTANCE_VALUE] = "_STORE_ATTR_INSTANCE_VALUE", - [_STORE_ATTR_SLOT] = "_STORE_ATTR_SLOT", - [_STORE_ATTR_WITH_HINT] = "_STORE_ATTR_WITH_HINT", - [_STORE_DEREF] = "_STORE_DEREF", - [_STORE_FAST] = "_STORE_FAST", - [_STORE_FAST_0] = "_STORE_FAST_0", - [_STORE_FAST_1] = "_STORE_FAST_1", - [_STORE_FAST_2] = "_STORE_FAST_2", - [_STORE_FAST_3] = "_STORE_FAST_3", - [_STORE_FAST_4] = "_STORE_FAST_4", - [_STORE_FAST_5] = "_STORE_FAST_5", - [_STORE_FAST_6] = "_STORE_FAST_6", - [_STORE_FAST_7] = "_STORE_FAST_7", - [_STORE_FAST_LOAD_FAST] = "_STORE_FAST_LOAD_FAST", - [_STORE_FAST_STORE_FAST] = "_STORE_FAST_STORE_FAST", - [_STORE_GLOBAL] = "_STORE_GLOBAL", - [_STORE_NAME] = "_STORE_NAME", - [_STORE_SLICE] = "_STORE_SLICE", - [_STORE_SUBSCR] = "_STORE_SUBSCR", - [_STORE_SUBSCR_DICT] = "_STORE_SUBSCR_DICT", - [_STORE_SUBSCR_LIST_INT] = "_STORE_SUBSCR_LIST_INT", - [_SWAP] = "_SWAP", - [_TIER2_RESUME_CHECK] = "_TIER2_RESUME_CHECK", - [_TO_BOOL] = "_TO_BOOL", - [_TO_BOOL_BOOL] = "_TO_BOOL_BOOL", - [_TO_BOOL_INT] = "_TO_BOOL_INT", - [_TO_BOOL_LIST] = "_TO_BOOL_LIST", - [_TO_BOOL_NONE] = "_TO_BOOL_NONE", - [_TO_BOOL_STR] = "_TO_BOOL_STR", - [_UNARY_INVERT] = "_UNARY_INVERT", - [_UNARY_NEGATIVE] = "_UNARY_NEGATIVE", - [_UNARY_NOT] = "_UNARY_NOT", - [_UNPACK_EX] = "_UNPACK_EX", - [_UNPACK_SEQUENCE] = "_UNPACK_SEQUENCE", - [_UNPACK_SEQUENCE_LIST] = "_UNPACK_SEQUENCE_LIST", - [_UNPACK_SEQUENCE_TUPLE] = "_UNPACK_SEQUENCE_TUPLE", - [_UNPACK_SEQUENCE_TWO_TUPLE] = "_UNPACK_SEQUENCE_TWO_TUPLE", - [_WITH_EXCEPT_START] = "_WITH_EXCEPT_START", - [_YIELD_VALUE] = "_YIELD_VALUE", -}; -int _PyUop_num_popped(int opcode, int oparg) -{ - switch(opcode) { - case _NOP: - return 0; - case _CHECK_PERIODIC: - return 0; - case _CHECK_PERIODIC_IF_NOT_YIELD_FROM: - return 0; - case _RESUME_CHECK: - return 0; - case _LOAD_FAST_CHECK: - return 0; - case _LOAD_FAST_0: - return 0; - case _LOAD_FAST_1: - return 0; - case _LOAD_FAST_2: - return 0; - case _LOAD_FAST_3: - return 0; - case _LOAD_FAST_4: - return 0; - case _LOAD_FAST_5: - return 0; - case _LOAD_FAST_6: - return 0; - case _LOAD_FAST_7: - return 0; - case _LOAD_FAST: - return 0; - case _LOAD_FAST_BORROW_0: - return 0; - case _LOAD_FAST_BORROW_1: - return 0; - case _LOAD_FAST_BORROW_2: - return 0; - case _LOAD_FAST_BORROW_3: - return 0; - case _LOAD_FAST_BORROW_4: - return 0; - case _LOAD_FAST_BORROW_5: - return 0; - case _LOAD_FAST_BORROW_6: - return 0; - case _LOAD_FAST_BORROW_7: - return 0; - case _LOAD_FAST_BORROW: - return 0; - case _LOAD_FAST_AND_CLEAR: - return 0; - case _LOAD_FAST_LOAD_FAST: - return 0; - case _LOAD_FAST_BORROW_LOAD_FAST_BORROW: - return 0; - case _LOAD_CONST_MORTAL: - return 0; - case _LOAD_CONST_IMMORTAL: - return 0; - case _LOAD_SMALL_INT_0: - return 0; - case _LOAD_SMALL_INT_1: - return 0; - case _LOAD_SMALL_INT_2: - return 0; - case _LOAD_SMALL_INT_3: - return 0; - case _LOAD_SMALL_INT: - return 0; - case _STORE_FAST_0: - return 1; - case _STORE_FAST_1: - return 1; - case _STORE_FAST_2: - return 1; - case _STORE_FAST_3: - return 1; - case _STORE_FAST_4: - return 1; - case _STORE_FAST_5: - return 1; - case _STORE_FAST_6: - return 1; - case _STORE_FAST_7: - return 1; - case _STORE_FAST: - return 1; - case _STORE_FAST_LOAD_FAST: - return 1; - case _STORE_FAST_STORE_FAST: - return 2; - case _POP_TOP: - return 1; - case _PUSH_NULL: - return 0; - case _END_FOR: - return 1; - case _END_SEND: - return 2; - case _UNARY_NEGATIVE: - return 1; - case _UNARY_NOT: - return 1; - case _TO_BOOL: - return 1; - case _TO_BOOL_BOOL: - return 0; - case _TO_BOOL_INT: - return 1; - case _GUARD_NOS_LIST: - return 0; - case _GUARD_TOS_LIST: - return 0; - case _GUARD_TOS_SLICE: - return 0; - case _TO_BOOL_LIST: - return 1; - case _TO_BOOL_NONE: - return 1; - case _GUARD_NOS_UNICODE: - return 0; - case _GUARD_TOS_UNICODE: - return 0; - case _TO_BOOL_STR: - return 1; - case _REPLACE_WITH_TRUE: - return 1; - case _UNARY_INVERT: - return 1; - case _GUARD_NOS_INT: - return 0; - case _GUARD_TOS_INT: - return 0; - case _BINARY_OP_MULTIPLY_INT: - return 2; - case _BINARY_OP_ADD_INT: - return 2; - case _BINARY_OP_SUBTRACT_INT: - return 2; - case _GUARD_NOS_FLOAT: - return 0; - case _GUARD_TOS_FLOAT: - return 0; - case _BINARY_OP_MULTIPLY_FLOAT: - return 2; - case _BINARY_OP_ADD_FLOAT: - return 2; - case _BINARY_OP_SUBTRACT_FLOAT: - return 2; - case _BINARY_OP_ADD_UNICODE: - return 2; - case _BINARY_OP_INPLACE_ADD_UNICODE: - return 2; - case _GUARD_BINARY_OP_EXTEND: - return 0; - case _BINARY_OP_EXTEND: - return 2; - case _BINARY_SLICE: - return 3; - case _STORE_SLICE: - return 4; - case _BINARY_OP_SUBSCR_LIST_INT: - return 2; - case _BINARY_OP_SUBSCR_LIST_SLICE: - return 2; - case _BINARY_OP_SUBSCR_STR_INT: - return 2; - case _GUARD_NOS_TUPLE: - return 0; - case _GUARD_TOS_TUPLE: - return 0; - case _BINARY_OP_SUBSCR_TUPLE_INT: - return 2; - case _GUARD_NOS_DICT: - return 0; - case _GUARD_TOS_DICT: - return 0; - case _BINARY_OP_SUBSCR_DICT: - return 2; - case _BINARY_OP_SUBSCR_CHECK_FUNC: - return 0; - case _BINARY_OP_SUBSCR_INIT_CALL: - return 3; - case _LIST_APPEND: - return 1; - case _SET_ADD: - return 1; - case _STORE_SUBSCR: - return 3; - case _STORE_SUBSCR_LIST_INT: - return 3; - case _STORE_SUBSCR_DICT: - return 3; - case _DELETE_SUBSCR: - return 2; - case _CALL_INTRINSIC_1: - return 1; - case _CALL_INTRINSIC_2: - return 2; - case _RETURN_VALUE: - return 1; - case _GET_AITER: - return 1; - case _GET_ANEXT: - return 0; - case _GET_AWAITABLE: - return 1; - case _SEND_GEN_FRAME: - return 1; - case _YIELD_VALUE: - return 1; - case _POP_EXCEPT: - return 1; - case _LOAD_COMMON_CONSTANT: - return 0; - case _LOAD_BUILD_CLASS: - return 0; - case _STORE_NAME: - return 1; - case _DELETE_NAME: - return 0; - case _UNPACK_SEQUENCE: - return 1; - case _UNPACK_SEQUENCE_TWO_TUPLE: - return 1; - case _UNPACK_SEQUENCE_TUPLE: - return 1; - case _UNPACK_SEQUENCE_LIST: - return 1; - case _UNPACK_EX: - return 1; - case _STORE_ATTR: - return 2; - case _DELETE_ATTR: - return 1; - case _STORE_GLOBAL: - return 1; - case _DELETE_GLOBAL: - return 0; - case _LOAD_LOCALS: - return 0; - case _LOAD_NAME: - return 0; - case _LOAD_GLOBAL: - return 0; - case _PUSH_NULL_CONDITIONAL: - return 0; - case _GUARD_GLOBALS_VERSION: - return 0; - case _LOAD_GLOBAL_MODULE: - return 0; - case _LOAD_GLOBAL_BUILTINS: - return 0; - case _DELETE_FAST: - return 0; - case _MAKE_CELL: - return 0; - case _DELETE_DEREF: - return 0; - case _LOAD_FROM_DICT_OR_DEREF: - return 1; - case _LOAD_DEREF: - return 0; - case _STORE_DEREF: - return 1; - case _COPY_FREE_VARS: - return 0; - case _BUILD_STRING: - return oparg; - case _BUILD_INTERPOLATION: - return 2 + (oparg & 1); - case _BUILD_TEMPLATE: - return 2; - case _BUILD_TUPLE: - return oparg; - case _BUILD_LIST: - return oparg; - case _LIST_EXTEND: - return 1; - case _SET_UPDATE: - return 1; - case _BUILD_SET: - return oparg; - case _BUILD_MAP: - return oparg*2; - case _SETUP_ANNOTATIONS: - return 0; - case _DICT_UPDATE: - return 1; - case _DICT_MERGE: - return 1; - case _MAP_ADD: - return 2; - case _LOAD_SUPER_ATTR_ATTR: - return 3; - case _LOAD_SUPER_ATTR_METHOD: - return 3; - case _LOAD_ATTR: - return 1; - case _GUARD_TYPE_VERSION: - return 0; - case _GUARD_TYPE_VERSION_AND_LOCK: - return 0; - case _CHECK_MANAGED_OBJECT_HAS_VALUES: - return 0; - case _LOAD_ATTR_INSTANCE_VALUE: - return 1; - case _LOAD_ATTR_MODULE: - return 1; - case _LOAD_ATTR_WITH_HINT: - return 1; - case _LOAD_ATTR_SLOT: - return 1; - case _CHECK_ATTR_CLASS: - return 0; - case _LOAD_ATTR_CLASS: - return 1; - case _LOAD_ATTR_PROPERTY_FRAME: - return 1; - case _GUARD_DORV_NO_DICT: - return 0; - case _STORE_ATTR_INSTANCE_VALUE: - return 2; - case _STORE_ATTR_WITH_HINT: - return 2; - case _STORE_ATTR_SLOT: - return 2; - case _COMPARE_OP: - return 2; - case _COMPARE_OP_FLOAT: - return 2; - case _COMPARE_OP_INT: - return 2; - case _COMPARE_OP_STR: - return 2; - case _IS_OP: - return 2; - case _CONTAINS_OP: - return 2; - case _GUARD_TOS_ANY_SET: - return 0; - case _CONTAINS_OP_SET: - return 2; - case _CONTAINS_OP_DICT: - return 2; - case _CHECK_EG_MATCH: - return 2; - case _CHECK_EXC_MATCH: - return 1; - case _IMPORT_NAME: - return 2; - case _IMPORT_FROM: - return 0; - case _IS_NONE: - return 1; - case _GET_LEN: - return 0; - case _MATCH_CLASS: - return 3; - case _MATCH_MAPPING: - return 0; - case _MATCH_SEQUENCE: - return 0; - case _MATCH_KEYS: - return 0; - case _GET_ITER: - return 1; - case _GET_YIELD_FROM_ITER: - return 1; - case _FOR_ITER_TIER_TWO: - return 0; - case _ITER_CHECK_LIST: - return 0; - case _GUARD_NOT_EXHAUSTED_LIST: - return 0; - case _ITER_NEXT_LIST_TIER_TWO: - return 0; - case _ITER_CHECK_TUPLE: - return 0; - case _GUARD_NOT_EXHAUSTED_TUPLE: - return 0; - case _ITER_NEXT_TUPLE: - return 0; - case _ITER_CHECK_RANGE: - return 0; - case _GUARD_NOT_EXHAUSTED_RANGE: - return 0; - case _ITER_NEXT_RANGE: - return 0; - case _FOR_ITER_GEN_FRAME: - return 0; - case _INSERT_NULL: - return 1; - case _LOAD_SPECIAL: - return 0; - case _WITH_EXCEPT_START: - return 0; - case _PUSH_EXC_INFO: - return 1; - case _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT: - return 0; - case _GUARD_KEYS_VERSION: - return 0; - case _LOAD_ATTR_METHOD_WITH_VALUES: - return 1; - case _LOAD_ATTR_METHOD_NO_DICT: - return 1; - case _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: - return 1; - case _LOAD_ATTR_NONDESCRIPTOR_NO_DICT: - return 1; - case _CHECK_ATTR_METHOD_LAZY_DICT: - return 0; - case _LOAD_ATTR_METHOD_LAZY_DICT: - return 1; - case _MAYBE_EXPAND_METHOD: - return 0; - case _PY_FRAME_GENERAL: - return 2 + oparg; - case _CHECK_FUNCTION_VERSION: - return 0; - case _CHECK_FUNCTION_VERSION_INLINE: - return 0; - case _CHECK_METHOD_VERSION: - return 0; - case _EXPAND_METHOD: - return 0; - case _CHECK_IS_NOT_PY_CALLABLE: - return 0; - case _CALL_NON_PY_GENERAL: - return 2 + oparg; - case _CHECK_CALL_BOUND_METHOD_EXACT_ARGS: - return 0; - case _INIT_CALL_BOUND_METHOD_EXACT_ARGS: - return 0; - case _CHECK_PEP_523: - return 0; - case _CHECK_FUNCTION_EXACT_ARGS: - return 0; - case _CHECK_STACK_SPACE: - return 0; - case _CHECK_RECURSION_REMAINING: - return 0; - case _INIT_CALL_PY_EXACT_ARGS_0: - return 2 + oparg; - case _INIT_CALL_PY_EXACT_ARGS_1: - return 2 + oparg; - case _INIT_CALL_PY_EXACT_ARGS_2: - return 2 + oparg; - case _INIT_CALL_PY_EXACT_ARGS_3: - return 2 + oparg; - case _INIT_CALL_PY_EXACT_ARGS_4: - return 2 + oparg; - case _INIT_CALL_PY_EXACT_ARGS: - return 2 + oparg; - case _PUSH_FRAME: - return 1; - case _GUARD_NOS_NULL: - return 0; - case _GUARD_CALLABLE_TYPE_1: - return 0; - case _CALL_TYPE_1: - return 3; - case _GUARD_CALLABLE_STR_1: - return 0; - case _CALL_STR_1: - return 3; - case _GUARD_CALLABLE_TUPLE_1: - return 0; - case _CALL_TUPLE_1: - return 3; - case _CHECK_AND_ALLOCATE_OBJECT: - return 0; - case _CREATE_INIT_FRAME: - return 2 + oparg; - case _EXIT_INIT_CHECK: - return 1; - case _CALL_BUILTIN_CLASS: - return 2 + oparg; - case _CALL_BUILTIN_O: - return 2 + oparg; - case _CALL_BUILTIN_FAST: - return 2 + oparg; - case _CALL_BUILTIN_FAST_WITH_KEYWORDS: - return 2 + oparg; - case _GUARD_CALLABLE_LEN: - return 0; - case _CALL_LEN: - return 3; - case _CALL_ISINSTANCE: - return 2 + oparg; - case _CALL_LIST_APPEND: - return 3; - case _CALL_METHOD_DESCRIPTOR_O: - return 2 + oparg; - case _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: - return 2 + oparg; - case _CALL_METHOD_DESCRIPTOR_NOARGS: - return 2 + oparg; - case _CALL_METHOD_DESCRIPTOR_FAST: - return 2 + oparg; - case _MAYBE_EXPAND_METHOD_KW: - return 0; - case _PY_FRAME_KW: - return 3 + oparg; - case _CHECK_FUNCTION_VERSION_KW: - return 0; - case _CHECK_METHOD_VERSION_KW: - return 0; - case _EXPAND_METHOD_KW: - return 0; - case _CHECK_IS_NOT_PY_CALLABLE_KW: - return 0; - case _CALL_KW_NON_PY: - return 3 + oparg; - case _MAKE_CALLARGS_A_TUPLE: - return 0; - case _MAKE_FUNCTION: - return 1; - case _SET_FUNCTION_ATTRIBUTE: - return 2; - case _RETURN_GENERATOR: - return 0; - case _BUILD_SLICE: - return oparg; - case _CONVERT_VALUE: - return 1; - case _FORMAT_SIMPLE: - return 1; - case _FORMAT_WITH_SPEC: - return 2; - case _COPY: - return 0; - case _BINARY_OP: - return 2; - case _SWAP: - return 0; - case _GUARD_IS_TRUE_POP: - return 1; - case _GUARD_IS_FALSE_POP: - return 1; - case _GUARD_IS_NONE_POP: - return 1; - case _GUARD_IS_NOT_NONE_POP: - return 1; - case _JUMP_TO_TOP: - return 0; - case _SET_IP: - return 0; - case _CHECK_STACK_SPACE_OPERAND: - return 0; - case _SAVE_RETURN_OFFSET: - return 0; - case _EXIT_TRACE: - return 0; - case _CHECK_VALIDITY: - return 0; - case _LOAD_CONST_INLINE: - return 0; - case _POP_TOP_LOAD_CONST_INLINE: - return 1; - case _LOAD_CONST_INLINE_BORROW: - return 0; - case _POP_TOP_LOAD_CONST_INLINE_BORROW: - return 1; - case _POP_TWO_LOAD_CONST_INLINE_BORROW: - return 2; - case _CHECK_FUNCTION: - return 0; - case _START_EXECUTOR: - return 0; - case _MAKE_WARM: - return 0; - case _FATAL_ERROR: - return 0; - case _DEOPT: - return 0; - case _ERROR_POP_N: - return 0; - case _TIER2_RESUME_CHECK: - return 0; - default: - return -1; - } -} - -#endif // NEED_OPCODE_METADATA - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CORE_UOP_METADATA_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_warnings.h b/Python314_4_x86_Template/include/internal/pycore_warnings.h deleted file mode 100644 index e1348d529..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_warnings.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef Py_INTERNAL_WARNINGS_H -#define Py_INTERNAL_WARNINGS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -extern int _PyWarnings_InitState(PyInterpreterState *interp); - -extern PyObject* _PyWarnings_Init(void); - -extern void _PyErr_WarnUnawaitedCoroutine(PyObject *coro); -extern void _PyErr_WarnUnawaitedAgenMethod(PyAsyncGenObject *agen, PyObject *method); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_WARNINGS_H */ diff --git a/Python314_4_x86_Template/include/internal/pycore_weakref.h b/Python314_4_x86_Template/include/internal/pycore_weakref.h deleted file mode 100644 index 4ed8928c0..000000000 --- a/Python314_4_x86_Template/include/internal/pycore_weakref.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef Py_INTERNAL_WEAKREF_H -#define Py_INTERNAL_WEAKREF_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION() -#include "pycore_lock.h" // PyMutex_LockFlags() -#include "pycore_object.h" // _Py_REF_IS_MERGED() -#include "pycore_pyatomic_ft_wrappers.h" - -#ifdef Py_GIL_DISABLED - -#define WEAKREF_LIST_LOCK(obj) \ - _PyInterpreterState_GET() \ - ->weakref_locks[((uintptr_t)obj) % NUM_WEAKREF_LIST_LOCKS] - -// Lock using the referenced object -#define LOCK_WEAKREFS(obj) \ - PyMutex_LockFlags(&WEAKREF_LIST_LOCK(obj), _Py_LOCK_DONT_DETACH) -#define UNLOCK_WEAKREFS(obj) PyMutex_Unlock(&WEAKREF_LIST_LOCK(obj)) - -// Lock using a weakref -#define LOCK_WEAKREFS_FOR_WR(wr) \ - PyMutex_LockFlags(wr->weakrefs_lock, _Py_LOCK_DONT_DETACH) -#define UNLOCK_WEAKREFS_FOR_WR(wr) PyMutex_Unlock(wr->weakrefs_lock) - -#define FT_CLEAR_WEAKREFS(obj, weakref_list) \ - do { \ - assert(Py_REFCNT(obj) == 0); \ - PyObject_ClearWeakRefs(obj); \ - } while (0) - -#else - -#define LOCK_WEAKREFS(obj) -#define UNLOCK_WEAKREFS(obj) - -#define LOCK_WEAKREFS_FOR_WR(wr) -#define UNLOCK_WEAKREFS_FOR_WR(wr) - -#define FT_CLEAR_WEAKREFS(obj, weakref_list) \ - do { \ - assert(Py_REFCNT(obj) == 0); \ - if (weakref_list != NULL) { \ - PyObject_ClearWeakRefs(obj); \ - } \ - } while (0) - -#endif - -static inline int _is_dead(PyObject *obj) -{ - // Explanation for the Py_REFCNT() check: when a weakref's target is part - // of a long chain of deallocations which triggers the trashcan mechanism, - // clearing the weakrefs can be delayed long after the target's refcount - // has dropped to zero. In the meantime, code accessing the weakref will - // be able to "see" the target object even though it is supposed to be - // unreachable. See issue gh-60806. -#if defined(Py_GIL_DISABLED) - Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&obj->ob_ref_shared); - return shared == _Py_REF_SHARED(0, _Py_REF_MERGED); -#else - return (Py_REFCNT(obj) == 0); -#endif -} - -static inline PyObject* _PyWeakref_GET_REF(PyObject *ref_obj) -{ - assert(PyWeakref_Check(ref_obj)); - PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj); - - PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object); - if (obj == Py_None) { - // clear_weakref() was called - return NULL; - } - - LOCK_WEAKREFS(obj); -#ifdef Py_GIL_DISABLED - if (ref->wr_object == Py_None) { - // clear_weakref() was called - UNLOCK_WEAKREFS(obj); - return NULL; - } -#endif - if (_Py_TryIncref(obj)) { - UNLOCK_WEAKREFS(obj); - return obj; - } - UNLOCK_WEAKREFS(obj); - return NULL; -} - -static inline int _PyWeakref_IS_DEAD(PyObject *ref_obj) -{ - assert(PyWeakref_Check(ref_obj)); - int ret = 0; - PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj); - PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object); - if (obj == Py_None) { - // clear_weakref() was called - ret = 1; - } - else { - LOCK_WEAKREFS(obj); - // See _PyWeakref_GET_REF() for the rationale of this test -#ifdef Py_GIL_DISABLED - ret = (ref->wr_object == Py_None) || _is_dead(obj); -#else - ret = _is_dead(obj); -#endif - UNLOCK_WEAKREFS(obj); - } - return ret; -} - -extern Py_ssize_t _PyWeakref_GetWeakrefCount(PyObject *obj); - -// Clear all the weak references to obj but leave their callbacks uncalled and -// intact. -extern void _PyWeakref_ClearWeakRefsNoCallbacks(PyObject *obj); - -PyAPI_FUNC(int) _PyWeakref_IsDead(PyObject *weakref); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTERNAL_WEAKREF_H */ diff --git a/Python314_4_x86_Template/include/intrcheck.h b/Python314_4_x86_Template/include/intrcheck.h deleted file mode 100644 index 1d1feee83..000000000 --- a/Python314_4_x86_Template/include/intrcheck.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef Py_INTRCHECK_H -#define Py_INTRCHECK_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(int) PyOS_InterruptOccurred(void); - -#ifdef HAVE_FORK -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -PyAPI_FUNC(void) PyOS_BeforeFork(void); -PyAPI_FUNC(void) PyOS_AfterFork_Parent(void); -PyAPI_FUNC(void) PyOS_AfterFork_Child(void); -#endif -#endif - -/* Deprecated, please use PyOS_AfterFork_Child() instead */ -Py_DEPRECATED(3.7) PyAPI_FUNC(void) PyOS_AfterFork(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_INTRCHECK_H */ diff --git a/Python314_4_x86_Template/include/iterobject.h b/Python314_4_x86_Template/include/iterobject.h deleted file mode 100644 index e69d09719..000000000 --- a/Python314_4_x86_Template/include/iterobject.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef Py_ITEROBJECT_H -#define Py_ITEROBJECT_H -/* Iterators (the basic kind, over a sequence) */ -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PySeqIter_Type; -PyAPI_DATA(PyTypeObject) PyCallIter_Type; - -#define PySeqIter_Check(op) Py_IS_TYPE((op), &PySeqIter_Type) - -PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); - - -#define PyCallIter_Check(op) Py_IS_TYPE((op), &PyCallIter_Type) - -PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ITEROBJECT_H */ - diff --git a/Python314_4_x86_Template/include/listobject.h b/Python314_4_x86_Template/include/listobject.h deleted file mode 100644 index e1e059b0b..000000000 --- a/Python314_4_x86_Template/include/listobject.h +++ /dev/null @@ -1,55 +0,0 @@ -/* 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. - - 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 -#define Py_LISTOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyList_Type; -PyAPI_DATA(PyTypeObject) PyListIter_Type; -PyAPI_DATA(PyTypeObject) PyListRevIter_Type; - -#define PyList_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS) -#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); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(PyObject *) PyList_GetItemRef(PyObject *, Py_ssize_t); -#endif -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 -# define Py_CPYTHON_LISTOBJECT_H -# include "cpython/listobject.h" -# undef Py_CPYTHON_LISTOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_LISTOBJECT_H */ diff --git a/Python314_4_x86_Template/include/lock.h b/Python314_4_x86_Template/include/lock.h deleted file mode 100644 index 782b9dbc7..000000000 --- a/Python314_4_x86_Template/include/lock.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Py_LOCK_H -#define Py_LOCK_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_LOCK_H -# include "cpython/lock.h" -# undef Py_CPYTHON_LOCK_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_LOCK_H */ diff --git a/Python314_4_x86_Template/include/longobject.h b/Python314_4_x86_Template/include/longobject.h deleted file mode 100644 index 19f069770..000000000 --- a/Python314_4_x86_Template/include/longobject.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef Py_LONGOBJECT_H -#define Py_LONGOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* Long (arbitrary precision) integer object interface */ - -// PyLong_Type is declared by object.h - -#define PyLong_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) -#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type) - -PyAPI_FUNC(PyObject *) PyLong_FromLong(long); -PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); -PyAPI_FUNC(PyObject *) PyLong_FromSize_t(size_t); -PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t); -PyAPI_FUNC(PyObject *) PyLong_FromDouble(double); - -PyAPI_FUNC(long) PyLong_AsLong(PyObject *); -PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *); -PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *); -PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *); -PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *); -PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(int) PyLong_AsInt(PyObject *); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030e0000 -PyAPI_FUNC(PyObject*) PyLong_FromInt32(int32_t value); -PyAPI_FUNC(PyObject*) PyLong_FromUInt32(uint32_t value); -PyAPI_FUNC(PyObject*) PyLong_FromInt64(int64_t value); -PyAPI_FUNC(PyObject*) PyLong_FromUInt64(uint64_t value); - -PyAPI_FUNC(int) PyLong_AsInt32(PyObject *obj, int32_t *value); -PyAPI_FUNC(int) PyLong_AsUInt32(PyObject *obj, uint32_t *value); -PyAPI_FUNC(int) PyLong_AsInt64(PyObject *obj, int64_t *value); -PyAPI_FUNC(int) PyLong_AsUInt64(PyObject *obj, uint64_t *value); - -#define Py_ASNATIVEBYTES_DEFAULTS -1 -#define Py_ASNATIVEBYTES_BIG_ENDIAN 0 -#define Py_ASNATIVEBYTES_LITTLE_ENDIAN 1 -#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3 -#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4 -#define Py_ASNATIVEBYTES_REJECT_NEGATIVE 8 -#define Py_ASNATIVEBYTES_ALLOW_INDEX 16 - -/* PyLong_AsNativeBytes: Copy the integer value to a native variable. - buffer points to the first byte of the variable. - n_bytes is the number of bytes available in the buffer. Pass 0 to request - the required size for the value. - flags is a bitfield of the following flags: - * 1 - little endian - * 2 - native endian - * 4 - unsigned destination (e.g. don't reject copying 255 into one byte) - * 8 - raise an exception for negative inputs - * 16 - call __index__ on non-int types - If flags is -1 (all bits set), native endian is used, value truncation - behaves most like C (allows negative inputs and allow MSB set), and non-int - objects will raise a TypeError. - Big endian mode will write the most significant byte into the address - directly referenced by buffer; little endian will write the least significant - byte into that address. - - If an exception is raised, returns a negative value. - Otherwise, returns the number of bytes that are required to store the value. - To check that the full value is represented, ensure that the return value is - equal or less than n_bytes. - All n_bytes are guaranteed to be written (unless an exception occurs), and - so ignoring a positive return value is the equivalent of a downcast in C. - In cases where the full value could not be represented, the returned value - may be larger than necessary - this function is not an accurate way to - calculate the bit length of an integer object. - */ -PyAPI_FUNC(Py_ssize_t) PyLong_AsNativeBytes(PyObject* v, void* buffer, - Py_ssize_t n_bytes, int flags); - -/* PyLong_FromNativeBytes: Create an int value from a native integer - n_bytes is the number of bytes to read from the buffer. Passing 0 will - always produce the zero int. - PyLong_FromUnsignedNativeBytes always produces a non-negative int. - flags is the same as for PyLong_AsNativeBytes, but only supports selecting - the endianness or forcing an unsigned buffer. - - Returns the int object, or NULL with an exception set. */ -PyAPI_FUNC(PyObject*) PyLong_FromNativeBytes(const void* buffer, size_t n_bytes, - int flags); -PyAPI_FUNC(PyObject*) PyLong_FromUnsignedNativeBytes(const void* buffer, - size_t n_bytes, int flags); - -#endif - -PyAPI_FUNC(PyObject *) PyLong_GetInfo(void); - -/* It may be useful in the future. I've added it in the PyInt -> PyLong - cleanup to keep the extra information. [CH] */ -#define PyLong_AS_LONG(op) PyLong_AsLong(op) - -/* Issue #1983: pid_t can be longer than a C long on some systems */ -#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT -#define _Py_PARSE_PID "i" -#define PyLong_FromPid PyLong_FromLong -# if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -# define PyLong_AsPid PyLong_AsInt -# elif SIZEOF_INT == SIZEOF_LONG -# define PyLong_AsPid PyLong_AsLong -# else -static inline int -PyLong_AsPid(PyObject *obj) -{ - int overflow; - long result = PyLong_AsLongAndOverflow(obj, &overflow); - if (overflow || result > INT_MAX || result < INT_MIN) { - PyErr_SetString(PyExc_OverflowError, - "Python int too large to convert to C int"); - return -1; - } - return (int)result; -} -# endif -#elif SIZEOF_PID_T == SIZEOF_LONG -#define _Py_PARSE_PID "l" -#define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong -#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG -#define _Py_PARSE_PID "L" -#define PyLong_FromPid PyLong_FromLongLong -#define PyLong_AsPid PyLong_AsLongLong -#else -#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" -#endif /* SIZEOF_PID_T */ - -#if SIZEOF_VOID_P == SIZEOF_INT -# define _Py_PARSE_INTPTR "i" -# define _Py_PARSE_UINTPTR "I" -#elif SIZEOF_VOID_P == SIZEOF_LONG -# define _Py_PARSE_INTPTR "l" -# define _Py_PARSE_UINTPTR "k" -#elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG -# define _Py_PARSE_INTPTR "L" -# define _Py_PARSE_UINTPTR "K" -#else -# error "void* different in size from int, long and long long" -#endif /* SIZEOF_VOID_P */ - -PyAPI_FUNC(double) PyLong_AsDouble(PyObject *); -PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *); -PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *); - -PyAPI_FUNC(PyObject *) PyLong_FromLongLong(long long); -PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned long long); -PyAPI_FUNC(long long) PyLong_AsLongLong(PyObject *); -PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLong(PyObject *); -PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *); -PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *); - -PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int); - -/* These aren't really part of the int object, but they're handy. The - functions are in Python/mystrtoul.c. - */ -PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int); -PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_LONGOBJECT_H -# include "cpython/longobject.h" -# undef Py_CPYTHON_LONGOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_LONGOBJECT_H */ diff --git a/Python314_4_x86_Template/include/marshal.h b/Python314_4_x86_Template/include/marshal.h deleted file mode 100644 index f773587bd..000000000 --- a/Python314_4_x86_Template/include/marshal.h +++ /dev/null @@ -1,31 +0,0 @@ - -/* Interface for marshal.c */ - -#ifndef Py_MARSHAL_H -#define Py_MARSHAL_H -#ifndef Py_LIMITED_API - -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(const char *, - Py_ssize_t); -PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int); - -#define Py_MARSHAL_VERSION 5 - -PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *); -PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *); -PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *); -PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *); - -PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int); -PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int); - -#ifdef __cplusplus -} -#endif - -#endif /* Py_LIMITED_API */ -#endif /* !Py_MARSHAL_H */ diff --git a/Python314_4_x86_Template/include/memoryobject.h b/Python314_4_x86_Template/include/memoryobject.h deleted file mode 100644 index 2c9146aa2..000000000 --- a/Python314_4_x86_Template/include/memoryobject.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Memory view object. In Python this is available as "memoryview". */ - -#ifndef Py_MEMORYOBJECT_H -#define Py_MEMORYOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyMemoryView_Type; - -#define PyMemoryView_Check(op) Py_IS_TYPE((op), &PyMemoryView_Type) - -PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size, - int flags); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000 -PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(const Py_buffer *info); -#endif -PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base, - int buffertype, - char order); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_MEMORYOBJECT_H -# include "cpython/memoryobject.h" -# undef Py_CPYTHON_MEMORYOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_MEMORYOBJECT_H */ diff --git a/Python314_4_x86_Template/include/methodobject.h b/Python314_4_x86_Template/include/methodobject.h deleted file mode 100644 index e6ec6421d..000000000 --- a/Python314_4_x86_Template/include/methodobject.h +++ /dev/null @@ -1,146 +0,0 @@ - -/* Method object interface */ - -#ifndef Py_METHODOBJECT_H -#define Py_METHODOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* This is about the type 'builtin_function_or_method', - not Python methods in user-defined classes. See classobject.h - for the latter. */ - -PyAPI_DATA(PyTypeObject) 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); -typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, - PyObject *); -typedef PyObject *(*PyCFunctionFastWithKeywords) (PyObject *, - PyObject *const *, Py_ssize_t, - PyObject *); -typedef PyObject *(*PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, - Py_ssize_t, PyObject *); - -// For backwards compatibility. `METH_FASTCALL` was added to the stable API in -// 3.10 alongside `_PyCFunctionFastWithKeywords` and `_PyCFunctionFast`. -// Note that the underscore-prefixed names were documented in public docs; -// people may be using them. -typedef PyCFunctionFast _PyCFunctionFast; -typedef PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords; - -// Cast a function to the PyCFunction type to use it with PyMethodDef. -// -// This macro can be used to prevent compiler warnings if the first parameter -// uses a different pointer type than PyObject* (ex: METH_VARARGS and METH_O -// calling conventions). -// -// The macro can also be used for METH_FASTCALL and METH_VARARGS|METH_KEYWORDS -// calling conventions to avoid compiler warnings because the function has more -// than 2 parameters. The macro first casts the function to the -// "void func(void)" type to prevent compiler warnings. -// -// If a function is declared with the METH_NOARGS calling convention, it must -// have 2 parameters. Since the second parameter is unused, Py_UNUSED() can be -// used to prevent a compiler warning. If the function has a single parameter, -// it triggers an undefined behavior when Python calls it with 2 parameters -// (bpo-33012). -#define _PyCFunction_CAST(func) \ - _Py_FUNC_CAST(PyCFunction, func) -// The macros below are given for semantic convenience, allowing users -// to see whether a cast to suppress an undefined behavior is necessary. -// Note: At runtime, the original function signature must be respected. -#define _PyCFunctionFast_CAST(func) \ - _Py_FUNC_CAST(PyCFunctionFast, func) -#define _PyCFunctionWithKeywords_CAST(func) \ - _Py_FUNC_CAST(PyCFunctionWithKeywords, func) -#define _PyCFunctionFastWithKeywords_CAST(func) \ - _Py_FUNC_CAST(PyCFunctionFastWithKeywords, func) - -PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); -PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); -PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); - -struct PyMethodDef { - const char *ml_name; /* The name of the built-in function/method */ - PyCFunction ml_meth; /* The C function that implements it */ - int ml_flags; /* Combination of METH_xxx flags, which mostly - describe the args expected by the C func */ - const char *ml_doc; /* The __doc__ attribute, or NULL */ -}; - -/* PyCFunction_New is declared as a function for stable ABI (declaration is - * needed for e.g. GCC with -fvisibility=hidden), but redefined as a macro - * that calls PyCFunction_NewEx. */ -PyAPI_FUNC(PyObject *) PyCFunction_New(PyMethodDef *, PyObject *); -#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) - -/* PyCFunction_NewEx is similar: on 3.9+, this calls PyCMethod_New. */ -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 -#define METH_KEYWORDS 0x0002 -/* METH_NOARGS and METH_O must not be combined with the flags above. */ -#define METH_NOARGS 0x0004 -#define METH_O 0x0008 - -/* METH_CLASS and METH_STATIC are a little different; these control - the construction of methods for a class. These cannot be used for - functions in modules. */ -#define METH_CLASS 0x0010 -#define METH_STATIC 0x0020 - -/* METH_COEXIST allows a method to be entered even though a slot has - already filled the entry. When defined, the flag allows a separate - method, "__contains__" for example, to coexist with a defined - slot like sq_contains. */ - -#define METH_COEXIST 0x0040 - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030a0000 -# define METH_FASTCALL 0x0080 -#endif - -/* This bit is preserved for Stackless Python */ -#ifdef STACKLESS -# define METH_STACKLESS 0x0100 -#else -# define METH_STACKLESS 0x0000 -#endif - -/* 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. - */ - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 -#define METH_METHOD 0x0200 -#endif - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_METHODOBJECT_H -# include "cpython/methodobject.h" -# undef Py_CPYTHON_METHODOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_METHODOBJECT_H */ diff --git a/Python314_4_x86_Template/include/modsupport.h b/Python314_4_x86_Template/include/modsupport.h deleted file mode 100644 index af995f567..000000000 --- a/Python314_4_x86_Template/include/modsupport.h +++ /dev/null @@ -1,146 +0,0 @@ -// Module support interface - -#ifndef Py_MODSUPPORT_H -#define Py_MODSUPPORT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...); -PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); -PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, - const char *, PY_CXX_CONST char * const *, ...); -PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); -PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, - const char *, PY_CXX_CONST char * const *, va_list); - -PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *); -PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...); -PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); -PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030a0000 -// Add an attribute with name 'name' and value 'obj' to the module 'mod. -// On success, return 0. -// On error, raise an exception and return -1. -PyAPI_FUNC(int) PyModule_AddObjectRef(PyObject *mod, const char *name, PyObject *value); -#endif /* Py_LIMITED_API */ - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -// Similar to PyModule_AddObjectRef() but steal a reference to 'value'. -PyAPI_FUNC(int) PyModule_Add(PyObject *mod, const char *name, PyObject *value); -#endif /* Py_LIMITED_API */ - -// Similar to PyModule_AddObjectRef() and PyModule_Add() but steal -// a reference to 'value' on success and only on success. -// Errorprone. Should not be used in new code. -PyAPI_FUNC(int) PyModule_AddObject(PyObject *mod, const char *, PyObject *value); - -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)) - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* New in 3.5 */ -PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *); -PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *); -PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def); -#endif - -#define Py_CLEANUP_SUPPORTED 0x20000 - -#define PYTHON_API_VERSION 1013 -#define PYTHON_API_STRING "1013" -/* The API version is maintained (independently from the Python version) - so we can detect mismatches between the interpreter and dynamically - loaded modules. These are diagnosed by an error message but - the module is still loaded (because the mismatch can only be tested - after loading the module). The error message is intended to - explain the core dump a few seconds later. - - The symbol PYTHON_API_STRING defines the same value as a string - literal. *** PLEASE MAKE SURE THE DEFINITIONS MATCH. *** - - Please add a line or two to the top of this log for each API - version change: - - 22-Feb-2006 MvL 1013 PEP 353 - long indices for sequence lengths - - 19-Aug-2002 GvR 1012 Changes to string object struct for - interning changes, saving 3 bytes. - - 17-Jul-2001 GvR 1011 Descr-branch, just to be on the safe side - - 25-Jan-2001 FLD 1010 Parameters added to PyCode_New() and - PyFrame_New(); Python 2.1a2 - - 14-Mar-2000 GvR 1009 Unicode API added - - 3-Jan-1999 GvR 1007 Decided to change back! (Don't reuse 1008!) - - 3-Dec-1998 GvR 1008 Python 1.5.2b1 - - 18-Jan-1997 GvR 1007 string interning and other speedups - - 11-Oct-1996 GvR renamed Py_Ellipses to Py_Ellipsis :-( - - 30-Jul-1996 GvR Slice and ellipses syntax added - - 23-Jul-1996 GvR For 1.4 -- better safe than sorry this time :-) - - 7-Nov-1995 GvR Keyword arguments (should've been done at 1.3 :-( ) - - 10-Jan-1995 GvR Renamed globals to new naming scheme - - 9-Jan-1995 GvR Initial version (incompatible with older API) -*/ - -/* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of - Python 3, it will stay at the value of 3; changes to the limited API - must be performed in a strictly backwards-compatible manner. */ -#define PYTHON_ABI_VERSION 3 -#define PYTHON_ABI_STRING "3" - -PyAPI_FUNC(PyObject *) PyModule_Create2(PyModuleDef*, int apiver); - -#ifdef Py_LIMITED_API -#define PyModule_Create(module) \ - PyModule_Create2((module), PYTHON_ABI_VERSION) -#else -#define PyModule_Create(module) \ - PyModule_Create2((module), PYTHON_API_VERSION) -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* New in 3.5 */ -PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def, - PyObject *spec, - int module_api_version); - -#ifdef Py_LIMITED_API -#define PyModule_FromDefAndSpec(module, spec) \ - PyModule_FromDefAndSpec2((module), (spec), PYTHON_ABI_VERSION) -#else -#define PyModule_FromDefAndSpec(module, spec) \ - PyModule_FromDefAndSpec2((module), (spec), PYTHON_API_VERSION) -#endif /* Py_LIMITED_API */ - -#endif /* New in 3.5 */ - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_MODSUPPORT_H -# include "cpython/modsupport.h" -# undef Py_CPYTHON_MODSUPPORT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_MODSUPPORT_H */ diff --git a/Python314_4_x86_Template/include/moduleobject.h b/Python314_4_x86_Template/include/moduleobject.h deleted file mode 100644 index 2a17c891d..000000000 --- a/Python314_4_x86_Template/include/moduleobject.h +++ /dev/null @@ -1,122 +0,0 @@ - -/* Module object interface */ - -#ifndef Py_MODULEOBJECT_H -#define Py_MODULEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyModule_Type; - -#define PyModule_Check(op) PyObject_TypeCheck((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( - PyObject *name - ); -#endif -PyAPI_FUNC(PyObject *) PyModule_New( - const char *name /* UTF-8 encoded string */ - ); -PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *); -#endif -PyAPI_FUNC(const char *) PyModule_GetName(PyObject *); -Py_DEPRECATED(3.2) PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *); -PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *); -PyAPI_FUNC(PyModuleDef*) PyModule_GetDef(PyObject*); -PyAPI_FUNC(void*) PyModule_GetState(PyObject*); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* New in 3.5 */ -PyAPI_FUNC(PyObject *) PyModuleDef_Init(PyModuleDef*); -PyAPI_DATA(PyTypeObject) PyModuleDef_Type; -#endif - -typedef struct PyModuleDef_Base { - PyObject_HEAD - /* The function used to re-initialize the module. - This is only set for legacy (single-phase init) extension modules - and only used for those that support multiple initializations - (m_size >= 0). - It is set by _PyImport_LoadDynamicModuleWithSpec() - and _imp.create_builtin(). */ - PyObject* (*m_init)(void); - /* The module's index into its interpreter's modules_by_index cache. - This is set for all extension modules but only used for legacy ones. - (See PyInterpreterState.modules_by_index for more info.) - It is set by PyModuleDef_Init(). */ - Py_ssize_t m_index; - /* A copy of the module's __dict__ after the first time it was loaded. - This is only set/used for legacy modules that do not support - multiple initializations. - It is set by fix_up_extension() in import.c. */ - PyObject* m_copy; -} PyModuleDef_Base; - -#define PyModuleDef_HEAD_INIT { \ - PyObject_HEAD_INIT(_Py_NULL) \ - _Py_NULL, /* m_init */ \ - 0, /* m_index */ \ - _Py_NULL, /* m_copy */ \ - } - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* New in 3.5 */ -struct PyModuleDef_Slot { - int slot; - void *value; -}; - -#define Py_mod_create 1 -#define Py_mod_exec 2 -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000 -# define Py_mod_multiple_interpreters 3 -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -# define Py_mod_gil 4 -#endif - - -#ifndef Py_LIMITED_API -#define _Py_mod_LAST_SLOT 4 -#endif - -#endif /* New in 3.5 */ - -/* for Py_mod_multiple_interpreters: */ -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000 -# define Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED ((void *)0) -# define Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED ((void *)1) -# define Py_MOD_PER_INTERPRETER_GIL_SUPPORTED ((void *)2) -#endif - -/* for Py_mod_gil: */ -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -# define Py_MOD_GIL_USED ((void *)0) -# define Py_MOD_GIL_NOT_USED ((void *)1) -#endif - -#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED) -PyAPI_FUNC(int) PyUnstable_Module_SetGIL(PyObject *module, void *gil); -#endif - -struct PyModuleDef { - PyModuleDef_Base m_base; - const char* m_name; - const char* m_doc; - Py_ssize_t m_size; - PyMethodDef *m_methods; - PyModuleDef_Slot *m_slots; - traverseproc m_traverse; - inquiry m_clear; - freefunc m_free; -}; - -#ifdef __cplusplus -} -#endif -#endif /* !Py_MODULEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/monitoring.h b/Python314_4_x86_Template/include/monitoring.h deleted file mode 100644 index 985f7f230..000000000 --- a/Python314_4_x86_Template/include/monitoring.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef Py_MONITORING_H -#define Py_MONITORING_H -#ifdef __cplusplus -extern "C" { -#endif - -// There is currently no limited API for monitoring - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_MONITORING_H -# include "cpython/monitoring.h" -# undef Py_CPYTHON_MONITORING_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_MONITORING_H */ diff --git a/Python314_4_x86_Template/include/object.h b/Python314_4_x86_Template/include/object.h deleted file mode 100644 index 50a41e355..000000000 --- a/Python314_4_x86_Template/include/object.h +++ /dev/null @@ -1,828 +0,0 @@ -#ifndef Py_OBJECT_H -#define Py_OBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* Object and type object interface */ - -/* -Objects are structures allocated on the heap. Special rules apply to -the use of objects to ensure they are properly garbage-collected. -Objects are never allocated statically or on the stack; they must be -accessed through special macros and functions only. (Type objects are -exceptions to the first rule; the standard types are represented by -statically initialized type objects, although work on type/class unification -for Python 2.2 made it possible to have heap-allocated type objects too). - -An object has a 'reference count' that is increased or decreased when a -pointer to the object is copied or deleted; when the reference count -reaches zero there are no references to the object left and it can be -removed from the heap. - -An object has a 'type' that determines what it represents and what kind -of data it contains. An object's type is fixed when it is created. -Types themselves are represented as objects; an object contains a -pointer to the corresponding type object. The type itself has a type -pointer pointing to the object representing the type 'type', which -contains a pointer to itself!. - -Objects do not float around in memory; once allocated an object keeps -the same size and address. Objects that must hold variable-size data -can contain pointers to variable-size parts of the object. Not all -objects of the same type have the same size; but the size cannot change -after allocation. (These restrictions are made so a reference to an -object can be simply a pointer -- moving an object would require -updating all the pointers, and changing an object's size would require -moving it if there was another object right next to it.) - -Objects are always accessed through pointers of the type 'PyObject *'. -The type 'PyObject' is a structure that only contains the reference count -and the type pointer. The actual memory allocated for an object -contains other data that can only be accessed after casting the pointer -to a pointer to a longer structure type. This longer type must start -with the reference count and type fields; the macro PyObject_HEAD should be -used for this (to accommodate for future changes). The implementation -of a particular object type can cast the object pointer to the proper -type and back. - -A standard interface exists for objects that contain an array of items -whose size is determined when the object is allocated. -*/ - -/* Py_DEBUG implies Py_REF_DEBUG. */ -#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG) -# define Py_REF_DEBUG -#endif - -/* PyObject_HEAD defines the initial segment of every PyObject. */ -#define PyObject_HEAD PyObject ob_base; - -// Kept for backward compatibility. It was needed by Py_TRACE_REFS build. -#define _PyObject_EXTRA_INIT - -/* Make all uses of PyObject_HEAD_INIT immortal. - * - * Statically allocated objects might be shared between - * interpreters, so must be marked as immortal. - */ -#if defined(Py_GIL_DISABLED) -#define PyObject_HEAD_INIT(type) \ - { \ - 0, \ - _Py_STATICALLY_ALLOCATED_FLAG, \ - { 0 }, \ - 0, \ - _Py_IMMORTAL_REFCNT_LOCAL, \ - 0, \ - (type), \ - }, -#else -#define PyObject_HEAD_INIT(type) \ - { \ - { _Py_STATIC_IMMORTAL_INITIAL_REFCNT }, \ - (type) \ - }, -#endif - -#define PyVarObject_HEAD_INIT(type, size) \ - { \ - PyObject_HEAD_INIT(type) \ - (size) \ - }, - -/* PyObject_VAR_HEAD defines the initial segment of all variable-size - * container objects. These end with a declaration of an array with 1 - * element, but enough space is malloc'ed so that the array actually - * has room for ob_size elements. Note that ob_size is an element count, - * not necessarily a byte count. - */ -#define PyObject_VAR_HEAD PyVarObject ob_base; -#define Py_INVALID_SIZE (Py_ssize_t)-1 - -/* Nothing is actually declared to be a PyObject, but every pointer to - * a Python object can be cast to a PyObject*. This is inheritance built - * by hand. Similarly every pointer to a variable-size Python object can, - * in addition, be cast to PyVarObject*. - */ -#ifndef Py_GIL_DISABLED -struct _object { -#if (defined(__GNUC__) || defined(__clang__)) \ - && !(defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L) - // On C99 and older, anonymous union is a GCC and clang extension - __extension__ -#endif -#ifdef _MSC_VER - // Ignore MSC warning C4201: "nonstandard extension used: - // nameless struct/union" - __pragma(warning(push)) - __pragma(warning(disable: 4201)) -#endif - union { -#if SIZEOF_VOID_P > 4 - PY_INT64_T ob_refcnt_full; /* This field is needed for efficient initialization with Clang on ARM */ - struct { -# if PY_BIG_ENDIAN - uint16_t ob_flags; - uint16_t ob_overflow; - uint32_t ob_refcnt; -# else - uint32_t ob_refcnt; - uint16_t ob_overflow; - uint16_t ob_flags; -# endif - }; -#else - Py_ssize_t ob_refcnt; -#endif - }; -#ifdef _MSC_VER - __pragma(warning(pop)) -#endif - - PyTypeObject *ob_type; -}; -#else -// Objects that are not owned by any thread use a thread id (tid) of zero. -// This includes both immortal objects and objects whose reference count -// fields have been merged. -#define _Py_UNOWNED_TID 0 - -struct _object { - // ob_tid stores the thread id (or zero). It is also used by the GC and the - // trashcan mechanism as a linked list pointer and by the GC to store the - // computed "gc_refs" refcount. - uintptr_t ob_tid; - uint16_t ob_flags; - PyMutex ob_mutex; // per-object lock - uint8_t ob_gc_bits; // gc-related state - uint32_t ob_ref_local; // local reference count - Py_ssize_t ob_ref_shared; // shared (atomic) reference count - PyTypeObject *ob_type; -}; -#endif - -/* Cast argument to PyObject* type. */ -#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op)) - -typedef struct { - PyObject ob_base; - Py_ssize_t ob_size; /* Number of items in variable part */ -} PyVarObject; - -/* Cast argument to PyVarObject* type. */ -#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op)) - - -// Test if the 'x' object is the 'y' object, the same as "x is y" in Python. -PyAPI_FUNC(int) Py_Is(PyObject *x, PyObject *y); -#define Py_Is(x, y) ((x) == (y)) - -#if defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API) -PyAPI_FUNC(uintptr_t) _Py_GetThreadLocal_Addr(void); - -static inline uintptr_t -_Py_ThreadId(void) -{ - uintptr_t tid; -#if defined(_MSC_VER) && defined(_M_X64) - tid = __readgsqword(48); -#elif defined(_MSC_VER) && defined(_M_IX86) - tid = __readfsdword(24); -#elif defined(_MSC_VER) && defined(_M_ARM64) - tid = __getReg(18); -#elif defined(__MINGW32__) && defined(_M_X64) - tid = __readgsqword(48); -#elif defined(__MINGW32__) && defined(_M_IX86) - tid = __readfsdword(24); -#elif defined(__MINGW32__) && defined(_M_ARM64) - tid = __getReg(18); -#elif defined(__i386__) - __asm__("{movl %%gs:0, %0|mov %0, dword ptr gs:[0]}" : "=r" (tid)); // 32-bit always uses GS -#elif defined(__MACH__) && defined(__x86_64__) - __asm__("{movq %%gs:0, %0|mov %0, qword ptr gs:[0]}" : "=r" (tid)); // x86_64 macOSX uses GS -#elif defined(__x86_64__) - __asm__("{movq %%fs:0, %0|mov %0, qword ptr fs:[0]}" : "=r" (tid)); // x86_64 Linux, BSD uses FS -#elif defined(__arm__) && __ARM_ARCH >= 7 - __asm__ ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tid)); -#elif defined(__aarch64__) && defined(__APPLE__) - __asm__ ("mrs %0, tpidrro_el0" : "=r" (tid)); -#elif defined(__aarch64__) - __asm__ ("mrs %0, tpidr_el0" : "=r" (tid)); -#elif defined(__powerpc64__) - #if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer) - tid = (uintptr_t)__builtin_thread_pointer(); - #else - // r13 is reserved for use as system thread ID by the Power 64-bit ABI. - register uintptr_t tp __asm__ ("r13"); - __asm__("" : "=r" (tp)); - tid = tp; - #endif -#elif defined(__powerpc__) - #if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer) - tid = (uintptr_t)__builtin_thread_pointer(); - #else - // r2 is reserved for use as system thread ID by the Power 32-bit ABI. - register uintptr_t tp __asm__ ("r2"); - __asm__ ("" : "=r" (tp)); - tid = tp; - #endif -#elif defined(__s390__) && defined(__GNUC__) - // Both GCC and Clang have supported __builtin_thread_pointer - // for s390 from long time ago. - tid = (uintptr_t)__builtin_thread_pointer(); -#elif defined(__riscv) - #if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer) - tid = (uintptr_t)__builtin_thread_pointer(); - #else - // tp is Thread Pointer provided by the RISC-V ABI. - __asm__ ("mv %0, tp" : "=r" (tid)); - #endif -#else - // Fallback to a portable implementation if we do not have a faster - // platform-specific implementation. - tid = _Py_GetThreadLocal_Addr(); -#endif - return tid; -} - -static inline Py_ALWAYS_INLINE int -_Py_IsOwnedByCurrentThread(PyObject *ob) -{ -#ifdef _Py_THREAD_SANITIZER - return _Py_atomic_load_uintptr_relaxed(&ob->ob_tid) == _Py_ThreadId(); -#else - return ob->ob_tid == _Py_ThreadId(); -#endif -} -#endif - -// Py_TYPE() implementation for the stable ABI -PyAPI_FUNC(PyTypeObject*) Py_TYPE(PyObject *ob); - -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000 - // Stable ABI implements Py_TYPE() as a function call - // on limited C API version 3.14 and newer. -#else - static inline PyTypeObject* _Py_TYPE(PyObject *ob) - { - return ob->ob_type; - } - #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 - # define Py_TYPE(ob) _Py_TYPE(_PyObject_CAST(ob)) - #else - # define Py_TYPE(ob) _Py_TYPE(ob) - #endif -#endif - -PyAPI_DATA(PyTypeObject) PyLong_Type; -PyAPI_DATA(PyTypeObject) PyBool_Type; - -// bpo-39573: The Py_SET_SIZE() function must be used to set an object size. -static inline Py_ssize_t Py_SIZE(PyObject *ob) { - assert(Py_TYPE(ob) != &PyLong_Type); - assert(Py_TYPE(ob) != &PyBool_Type); - return _PyVarObject_CAST(ob)->ob_size; -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_SIZE(ob) Py_SIZE(_PyObject_CAST(ob)) -#endif - -static inline int Py_IS_TYPE(PyObject *ob, PyTypeObject *type) { - return Py_TYPE(ob) == type; -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_IS_TYPE(ob, type) Py_IS_TYPE(_PyObject_CAST(ob), (type)) -#endif - - -static inline void Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { - ob->ob_type = type; -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type) -#endif - -static inline void Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) { - assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type); - assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type); -#ifdef Py_GIL_DISABLED - _Py_atomic_store_ssize_relaxed(&ob->ob_size, size); -#else - ob->ob_size = size; -#endif -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_SET_SIZE(ob, size) Py_SET_SIZE(_PyVarObject_CAST(ob), (size)) -#endif - - -/* -Type objects contain a string containing the type name (to help somewhat -in debugging), the allocation parameters (see PyObject_New() and -PyObject_NewVar()), -and methods for accessing objects of the type. Methods are optional, a -nil pointer meaning that particular kind of access is not available for -this type. The Py_DECREF() macro uses the tp_dealloc method without -checking for a nil pointer; it should always be implemented except if -the implementation can guarantee that the reference count will never -reach zero (e.g., for statically allocated type objects). - -NB: the methods for certain type groups are now contained in separate -method blocks. -*/ - -typedef PyObject * (*unaryfunc)(PyObject *); -typedef PyObject * (*binaryfunc)(PyObject *, PyObject *); -typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *); -typedef int (*inquiry)(PyObject *); -typedef Py_ssize_t (*lenfunc)(PyObject *); -typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t); -typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t); -typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *); -typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); -typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *); - -typedef int (*objobjproc)(PyObject *, PyObject *); -typedef int (*visitproc)(PyObject *, void *); -typedef int (*traverseproc)(PyObject *, visitproc, void *); - - -typedef void (*freefunc)(void *); -typedef void (*destructor)(PyObject *); -typedef PyObject *(*getattrfunc)(PyObject *, char *); -typedef PyObject *(*getattrofunc)(PyObject *, PyObject *); -typedef int (*setattrfunc)(PyObject *, char *, PyObject *); -typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *); -typedef PyObject *(*reprfunc)(PyObject *); -typedef Py_hash_t (*hashfunc)(PyObject *); -typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int); -typedef PyObject *(*getiterfunc) (PyObject *); -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)(PyTypeObject *, PyObject *, PyObject *); -typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000 // 3.12 -typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args, - size_t nargsf, PyObject *kwnames); -#endif - -typedef struct{ - int slot; /* slot id, see below */ - void *pfunc; /* function pointer */ -} PyType_Slot; - -typedef struct{ - const char* name; - int basicsize; - int itemsize; - unsigned int flags; - PyType_Slot *slots; /* terminated by slot==0. */ -} PyType_Spec; - -PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 -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(PyTypeObject *); -PyAPI_FUNC(void *) PyType_GetModuleState(PyTypeObject *); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030B0000 -PyAPI_FUNC(PyObject *) PyType_GetName(PyTypeObject *); -PyAPI_FUNC(PyObject *) PyType_GetQualName(PyTypeObject *); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000 -PyAPI_FUNC(PyObject *) PyType_GetFullyQualifiedName(PyTypeObject *type); -PyAPI_FUNC(PyObject *) PyType_GetModuleName(PyTypeObject *type); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000 -PyAPI_FUNC(PyObject *) PyType_FromMetaclass(PyTypeObject*, PyObject*, PyType_Spec*, PyObject*); -PyAPI_FUNC(void *) PyObject_GetTypeData(PyObject *obj, PyTypeObject *cls); -PyAPI_FUNC(Py_ssize_t) PyType_GetTypeDataSize(PyTypeObject *cls); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030E0000 -PyAPI_FUNC(int) PyType_GetBaseByToken(PyTypeObject *, void *, PyTypeObject **); -#define Py_TP_USE_SPEC NULL -#endif - -/* Generic type check */ -PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); - -static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) { - return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type); -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type)) -#endif - -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(PyTypeObject*); - -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(PyTypeObject *); - -/* Generic operations on objects */ -PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); -PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *); -PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *); -PyAPI_FUNC(PyObject *) PyObject_Bytes(PyObject *); -PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int); -PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int); -PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *); -PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *); -PyAPI_FUNC(int) PyObject_DelAttrString(PyObject *v, const char *name); -PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *); -PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(int) PyObject_GetOptionalAttr(PyObject *, PyObject *, PyObject **); -PyAPI_FUNC(int) PyObject_GetOptionalAttrString(PyObject *, const char *, PyObject **); -#endif -PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); -PyAPI_FUNC(int) PyObject_DelAttr(PyObject *v, PyObject *name); -PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(int) PyObject_HasAttrWithError(PyObject *, PyObject *); -PyAPI_FUNC(int) PyObject_HasAttrStringWithError(PyObject *, const char *); -#endif -PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); -PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(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 -PyAPI_FUNC(Py_hash_t) PyObject_Hash(PyObject *); -PyAPI_FUNC(Py_hash_t) PyObject_HashNotImplemented(PyObject *); -PyAPI_FUNC(int) PyObject_IsTrue(PyObject *); -PyAPI_FUNC(int) PyObject_Not(PyObject *); -PyAPI_FUNC(int) PyCallable_Check(PyObject *); -PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *); - -/* PyObject_Dir(obj) acts like Python builtins.dir(obj), returning a - list of strings. PyObject_Dir(NULL) is like builtins.dir(), - returning the names of the current locals. In this case, if there are - no current locals, NULL is returned, and PyErr_Occurred() is false. -*/ -PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *); - -/* Helpers for printing recursive container types */ -PyAPI_FUNC(int) Py_ReprEnter(PyObject *); -PyAPI_FUNC(void) Py_ReprLeave(PyObject *); - -/* Flag bits for printing: */ -#define Py_PRINT_RAW 1 /* No string quotes etc. */ - -/* -Type flags (tp_flags) - -These flags are used to change expected features and behavior for a -particular type. - -Arbitration of the flag bit positions will need to be coordinated among -all extension writers who publicly release their extensions (this will -be fewer than you might expect!). - -Most flags were removed as of Python 3.0 to make room for new flags. (Some -flags are not for backwards compatibility but to indicate the presence of an -optional feature; these flags remain of course.) - -Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value. - -Code can use PyType_HasFeature(type_ob, flag_value) to test whether the -given type object has a specified feature. -*/ - -#ifndef Py_LIMITED_API - -/* Track types initialized using _PyStaticType_InitBuiltin(). */ -#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1) - -/* The values array is placed inline directly after the rest of - * the object. Implies Py_TPFLAGS_HAVE_GC. - */ -#define Py_TPFLAGS_INLINE_VALUES (1 << 2) - -/* Placement of weakref pointers are managed by the VM, not by the type. - * The VM will automatically set tp_weaklistoffset. - */ -#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3) - -/* Placement of dict (and values) pointers are managed by the VM, not by the type. - * The VM will automatically set tp_dictoffset. Implies Py_TPFLAGS_HAVE_GC. - */ -#define Py_TPFLAGS_MANAGED_DICT (1 << 4) - -#define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT) - -/* Set if instances of the type object are treated as sequences for pattern matching */ -#define Py_TPFLAGS_SEQUENCE (1 << 5) -/* Set if instances of the type object are treated as mappings for pattern matching */ -#define Py_TPFLAGS_MAPPING (1 << 6) -#endif - -/* Disallow creating instances of the type: set tp_new to NULL and don't create - * the "__new__" key in the type dictionary. */ -#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7) - -/* Set if the type object is immutable: type attributes cannot be set nor deleted */ -#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8) - -/* Set if the type object is dynamically allocated */ -#define Py_TPFLAGS_HEAPTYPE (1UL << 9) - -/* Set if the type allows subclassing */ -#define Py_TPFLAGS_BASETYPE (1UL << 10) - -/* Set if the type implements the vectorcall protocol (PEP 590) */ -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000 -#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11) -#ifndef Py_LIMITED_API -// Backwards compatibility alias for API that was provisional in Python 3.8 -#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL -#endif -#endif - -/* Set if the type is 'ready' -- fully initialized */ -#define Py_TPFLAGS_READY (1UL << 12) - -/* Set while the type is being 'readied', to prevent recursive ready calls */ -#define Py_TPFLAGS_READYING (1UL << 13) - -/* Objects support garbage collection (see objimpl.h) */ -#define Py_TPFLAGS_HAVE_GC (1UL << 14) - -/* These two bits are preserved for Stackless Python, next after this is 17 */ -#ifdef STACKLESS -#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3UL << 15) -#else -#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0 -#endif - -/* Objects behave like an unbound method */ -#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17) - -/* Unused. Legacy flag */ -#define Py_TPFLAGS_VALID_VERSION_TAG (1UL << 19) - -/* Type is abstract and cannot be instantiated */ -#define Py_TPFLAGS_IS_ABSTRACT (1UL << 20) - -// This undocumented flag gives certain built-ins their unique pattern-matching -// behavior, which allows a single positional subpattern to match against the -// subject itself (rather than a mapped attribute on it): -#define _Py_TPFLAGS_MATCH_SELF (1UL << 22) - -/* Items (ob_size*tp_itemsize) are found at the end of an instance's memory */ -#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23) - -/* These flags are used to determine if a type is a subclass. */ -#define Py_TPFLAGS_LONG_SUBCLASS (1UL << 24) -#define Py_TPFLAGS_LIST_SUBCLASS (1UL << 25) -#define Py_TPFLAGS_TUPLE_SUBCLASS (1UL << 26) -#define Py_TPFLAGS_BYTES_SUBCLASS (1UL << 27) -#define Py_TPFLAGS_UNICODE_SUBCLASS (1UL << 28) -#define Py_TPFLAGS_DICT_SUBCLASS (1UL << 29) -#define Py_TPFLAGS_BASE_EXC_SUBCLASS (1UL << 30) -#define Py_TPFLAGS_TYPE_SUBCLASS (1UL << 31) - -#define Py_TPFLAGS_DEFAULT ( \ - Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \ - 0) - -/* NOTE: Some of the following flags reuse lower bits (removed as part of the - * Python 3.0 transition). */ - -/* The following flags are kept for compatibility; in previous - * versions they indicated presence of newer tp_* fields on the - * type struct. - * Starting with 3.8, binary compatibility of C extensions across - * feature releases of Python is not supported anymore (except when - * using the stable ABI, in which all classes are created dynamically, - * using the interpreter's memory layout.) - * Note that older extensions using the stable ABI set these flags, - * so the bits must not be repurposed. - */ -#define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) -#define Py_TPFLAGS_HAVE_VERSION_TAG (1UL << 18) - - -#define Py_CONSTANT_NONE 0 -#define Py_CONSTANT_FALSE 1 -#define Py_CONSTANT_TRUE 2 -#define Py_CONSTANT_ELLIPSIS 3 -#define Py_CONSTANT_NOT_IMPLEMENTED 4 -#define Py_CONSTANT_ZERO 5 -#define Py_CONSTANT_ONE 6 -#define Py_CONSTANT_EMPTY_STR 7 -#define Py_CONSTANT_EMPTY_BYTES 8 -#define Py_CONSTANT_EMPTY_TUPLE 9 - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(PyObject*) Py_GetConstant(unsigned int constant_id); -PyAPI_FUNC(PyObject*) Py_GetConstantBorrowed(unsigned int constant_id); -#endif - - -/* -_Py_NoneStruct is an object of undefined type which can be used in contexts -where NULL (nil) is not suitable (since NULL often means 'error'). -*/ -PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */ - -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000 -# define Py_None Py_GetConstantBorrowed(Py_CONSTANT_NONE) -#else -# define Py_None (&_Py_NoneStruct) -#endif - -// Test if an object is the None singleton, the same as "x is None" in Python. -PyAPI_FUNC(int) Py_IsNone(PyObject *x); -#define Py_IsNone(x) Py_Is((x), Py_None) - -/* Macro for returning Py_None from a function. - * Only treat Py_None as immortal in the limited C API 3.12 and newer. */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030c0000 -# define Py_RETURN_NONE return Py_NewRef(Py_None) -#else -# define Py_RETURN_NONE return Py_None -#endif - -/* -Py_NotImplemented is a singleton used to signal that an operation is -not implemented for a given type combination. -*/ -PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */ - -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000 -# define Py_NotImplemented Py_GetConstantBorrowed(Py_CONSTANT_NOT_IMPLEMENTED) -#else -# define Py_NotImplemented (&_Py_NotImplementedStruct) -#endif - -/* Macro for returning Py_NotImplemented from a function. Only treat - * Py_NotImplemented as immortal in the limited C API 3.12 and newer. */ -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030c0000 -# define Py_RETURN_NOTIMPLEMENTED return Py_NewRef(Py_NotImplemented) -#else -# define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented -#endif - -/* Rich comparison opcodes */ -#define Py_LT 0 -#define Py_LE 1 -#define Py_EQ 2 -#define Py_NE 3 -#define Py_GT 4 -#define Py_GE 5 - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 -/* Result of calling PyIter_Send */ -typedef enum { - PYGEN_RETURN = 0, - PYGEN_ERROR = -1, - PYGEN_NEXT = 1 -} PySendResult; -#endif - -/* - * Macro for implementing rich comparisons - * - * Needs to be a macro because any C-comparable type can be used. - */ -#define Py_RETURN_RICHCOMPARE(val1, val2, op) \ - do { \ - switch (op) { \ - case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \ - default: \ - Py_UNREACHABLE(); \ - } \ - } while (0) - - -/* -More conventions -================ - -Argument Checking ------------------ - -Functions that take objects as arguments normally don't check for nil -arguments, but they do check the type of the argument, and return an -error if the function doesn't apply to the type. - -Failure Modes -------------- - -Functions may fail for a variety of reasons, including running out of -memory. This is communicated to the caller in two ways: an error string -is set (see errors.h), and the function result differs: functions that -normally return a pointer return NULL for failure, functions returning -an integer return -1 (which could be a legal return value too!), and -other functions return 0 for success and -1 for failure. -Callers should always check for errors before using the result. If -an error was set, the caller must either explicitly clear it, or pass -the error on to its caller. - -Reference Counts ----------------- - -It takes a while to get used to the proper usage of reference counts. - -Functions that create an object set the reference count to 1; such new -objects must be stored somewhere or destroyed again with Py_DECREF(). -Some functions that 'store' objects, such as PyTuple_SetItem() and -PyList_SetItem(), -don't increment the reference count of the object, since the most -frequent use is to store a fresh object. Functions that 'retrieve' -objects, such as PyTuple_GetItem() and PyDict_GetItemString(), also -don't increment -the reference count, since most frequently the object is only looked at -quickly. Thus, to retrieve an object and store it again, the caller -must call Py_INCREF() explicitly. - -NOTE: functions that 'consume' a reference count, like -PyList_SetItem(), consume the reference even if the object wasn't -successfully stored, to simplify error handling. - -It seems attractive to make other functions that take an object as -argument consume a reference count; however, this may quickly get -confusing (even the current practice is already confusing). Consider -it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at -times. -*/ - -#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 -# ifdef Py_GIL_DISABLED - flags = _Py_atomic_load_ulong_relaxed(&type->tp_flags); -# else - flags = type->tp_flags; -# endif -#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); -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define PyType_Check(op) PyType_Check(_PyObject_CAST(op)) -#endif - -#define _PyType_CAST(op) \ - (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op))) - -static inline int PyType_CheckExact(PyObject *op) { - return Py_IS_TYPE(op, &PyType_Type); -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define PyType_CheckExact(op) PyType_CheckExact(_PyObject_CAST(op)) -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -PyAPI_FUNC(PyObject *) PyType_GetModuleByDef(PyTypeObject *, PyModuleDef *); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030e0000 -PyAPI_FUNC(int) PyType_Freeze(PyTypeObject *type); -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_OBJECT_H diff --git a/Python314_4_x86_Template/include/objimpl.h b/Python314_4_x86_Template/include/objimpl.h deleted file mode 100644 index 56472a72e..000000000 --- a/Python314_4_x86_Template/include/objimpl.h +++ /dev/null @@ -1,211 +0,0 @@ -// The PyObject_ memory family: high-level object memory interfaces. -// See pymem.h for the low-level PyMem_ family. - -#ifndef Py_OBJIMPL_H -#define Py_OBJIMPL_H -#ifdef __cplusplus -extern "C" { -#endif - -/* BEWARE: - - Each interface exports both functions and macros. Extension modules should - use the functions, to ensure binary compatibility across Python versions. - Because the Python implementation is free to change internal details, and - the macros may (or may not) expose details for speed, if you do use the - macros you must recompile your extensions with each Python release. - - Never mix calls to PyObject_ memory functions with calls to the platform - malloc/realloc/ calloc/free, or with calls to PyMem_. -*/ - -/* -Functions and macros for modules that implement new object types. - - - PyObject_New(type, typeobj) allocates memory for a new object of the given - type, and initializes part of it. 'type' must be the C structure type used - to represent the object, and 'typeobj' the address of the corresponding - type object. Reference count and type pointer are filled in; the rest of - the bytes of the object are *undefined*! The resulting expression type is - 'type *'. The size of the object is determined by the tp_basicsize field - of the type object. - - - PyObject_NewVar(type, typeobj, n) is similar but allocates a variable-size - object with room for n items. In addition to the refcount and type pointer - fields, this also fills in the ob_size field. - - - PyObject_Free(op) releases the memory allocated for an object. It does not - run a destructor -- it only frees the memory. - - - PyObject_Init(op, typeobj) and PyObject_InitVar(op, typeobj, n) don't - allocate memory. Instead of a 'type' parameter, they take a pointer to a - new object (allocated by an arbitrary allocator), and initialize its object - header fields. - -Note that objects created with PyObject_{New, NewVar} are allocated using the -specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is -enabled. In addition, a special debugging allocator is used if Py_DEBUG -macro is also defined. - -In case a specific form of memory management is needed (for example, if you -must use the platform malloc heap(s), or shared memory, or C++ local storage or -operator new), you must first allocate the object with your custom allocator, -then pass its pointer to PyObject_{Init, InitVar} for filling in its Python- -specific fields: reference count, type pointer, possibly others. You should -be aware that Python has no control over these objects because they don't -cooperate with the Python memory manager. Such objects may not be eligible -for automatic garbage collection and you have to make sure that they are -released accordingly whenever their destructor gets called (cf. the specific -form of memory management you're using). - -Unless you have specific memory management requirements, use -PyObject_{New, NewVar, Del}. -*/ - -/* - * Raw object memory interface - * =========================== - */ - -/* Functions to call the same malloc/realloc/free as used by Python's - object allocator. If WITH_PYMALLOC is enabled, these may differ from - the platform malloc/realloc/free. The Python object allocator is - designed for fast, cache-conscious allocation of many "small" objects, - and with low hidden memory overhead. - - PyObject_Malloc(0) returns a unique non-NULL pointer if possible. - - PyObject_Realloc(NULL, n) acts like PyObject_Malloc(n). - PyObject_Realloc(p != NULL, 0) does not return NULL, or free the memory - at p. - - Returned pointers must be checked for NULL explicitly; no action is - performed on failure other than to return NULL (no warning it printed, no - exception is set, etc). - - For allocating objects, use PyObject_{New, NewVar} instead whenever - possible. The PyObject_{Malloc, Realloc, Free} family is exposed - so that you can exploit Python's small-block allocator for non-object - uses. If you must use these routines to allocate object memory, make sure - the object gets initialized via PyObject_{Init, InitVar} after obtaining - the raw memory. -*/ -PyAPI_FUNC(void *) PyObject_Malloc(size_t size); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_FUNC(void *) PyObject_Calloc(size_t nelem, size_t elsize); -#endif -PyAPI_FUNC(void *) PyObject_Realloc(void *ptr, size_t new_size); -PyAPI_FUNC(void) PyObject_Free(void *ptr); - - -// Deprecated aliases only kept for backward compatibility. -// PyObject_Del and PyObject_DEL are defined with no parameter to be able to -// use them as function pointers (ex: tp_free = PyObject_Del). -#define PyObject_MALLOC PyObject_Malloc -#define PyObject_REALLOC PyObject_Realloc -#define PyObject_FREE PyObject_Free -#define PyObject_Del PyObject_Free -#define PyObject_DEL PyObject_Free - - -/* - * Generic object allocator interface - * ================================== - */ - -/* Functions */ -PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *); -PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, - PyTypeObject *, Py_ssize_t); - -#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)) - - -PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); -PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); - -#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)) ) - -// Alias to PyObject_NewVar(). In Python 3.8, PyObject_NEW_VAR() called -// directly PyObject_MALLOC() with _PyObject_VAR_SIZE(). -#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, (typeobj), (n)) - - -/* - * Garbage Collection Support - * ========================== - */ - -/* C equivalent of gc.collect(). */ -PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void); -/* C API for controlling the state of the garbage collector */ -PyAPI_FUNC(int) PyGC_Enable(void); -PyAPI_FUNC(int) PyGC_Disable(void); -PyAPI_FUNC(int) PyGC_IsEnabled(void); - -/* Test if a type has a GC head */ -#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) - -PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t); -#define PyObject_GC_Resize(type, op, n) \ - ( (type *) _PyObject_GC_Resize(_PyVarObject_CAST(op), (n)) ) - - - -PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *); -PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t); - -/* Tell the GC to track this object. - * - * See also private _PyObject_GC_TRACK() macro. */ -PyAPI_FUNC(void) PyObject_GC_Track(void *); - -/* Tell the GC to stop tracking this object. - * - * See also private _PyObject_GC_UNTRACK() macro. */ -PyAPI_FUNC(void) PyObject_GC_UnTrack(void *); - -PyAPI_FUNC(void) PyObject_GC_Del(void *); - -#define PyObject_GC_New(type, typeobj) \ - _Py_CAST(type*, _PyObject_GC_New(typeobj)) -#define PyObject_GC_NewVar(type, typeobj, n) \ - _Py_CAST(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 - * "visit" and "arg". This is intended to keep tp_traverse functions - * looking as much alike as possible. - */ -#define Py_VISIT(op) \ - do { \ - if (op) { \ - int vret = visit(_PyObject_CAST(op), arg); \ - if (vret) \ - return vret; \ - } \ - } while (0) - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_OBJIMPL_H -# include "cpython/objimpl.h" -# undef Py_CPYTHON_OBJIMPL_H -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_OBJIMPL_H diff --git a/Python314_4_x86_Template/include/opcode.h b/Python314_4_x86_Template/include/opcode.h deleted file mode 100644 index fcb972f2e..000000000 --- a/Python314_4_x86_Template/include/opcode.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef Py_OPCODE_H -#define Py_OPCODE_H -#ifdef __cplusplus -extern "C" { -#endif - -#include "opcode_ids.h" - - -#define NB_ADD 0 -#define NB_AND 1 -#define NB_FLOOR_DIVIDE 2 -#define NB_LSHIFT 3 -#define NB_MATRIX_MULTIPLY 4 -#define NB_MULTIPLY 5 -#define NB_REMAINDER 6 -#define NB_OR 7 -#define NB_POWER 8 -#define NB_RSHIFT 9 -#define NB_SUBTRACT 10 -#define NB_TRUE_DIVIDE 11 -#define NB_XOR 12 -#define NB_INPLACE_ADD 13 -#define NB_INPLACE_AND 14 -#define NB_INPLACE_FLOOR_DIVIDE 15 -#define NB_INPLACE_LSHIFT 16 -#define NB_INPLACE_MATRIX_MULTIPLY 17 -#define NB_INPLACE_MULTIPLY 18 -#define NB_INPLACE_REMAINDER 19 -#define NB_INPLACE_OR 20 -#define NB_INPLACE_POWER 21 -#define NB_INPLACE_RSHIFT 22 -#define NB_INPLACE_SUBTRACT 23 -#define NB_INPLACE_TRUE_DIVIDE 24 -#define NB_INPLACE_XOR 25 -#define NB_SUBSCR 26 - -#define NB_OPARG_LAST 26 - -#ifdef __cplusplus -} -#endif -#endif /* !Py_OPCODE_H */ diff --git a/Python314_4_x86_Template/include/opcode_ids.h b/Python314_4_x86_Template/include/opcode_ids.h deleted file mode 100644 index 209103c83..000000000 --- a/Python314_4_x86_Template/include/opcode_ids.h +++ /dev/null @@ -1,259 +0,0 @@ -// This file is generated by Tools/cases_generator/opcode_id_generator.py -// from: -// Python/bytecodes.c -// Do not edit! - -#ifndef Py_OPCODE_IDS_H -#define Py_OPCODE_IDS_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Instruction opcodes for compiled code */ -#define CACHE 0 -#define BINARY_SLICE 1 -#define BUILD_TEMPLATE 2 -#define BINARY_OP_INPLACE_ADD_UNICODE 3 -#define CALL_FUNCTION_EX 4 -#define CHECK_EG_MATCH 5 -#define CHECK_EXC_MATCH 6 -#define CLEANUP_THROW 7 -#define DELETE_SUBSCR 8 -#define END_FOR 9 -#define END_SEND 10 -#define EXIT_INIT_CHECK 11 -#define FORMAT_SIMPLE 12 -#define FORMAT_WITH_SPEC 13 -#define GET_AITER 14 -#define GET_ANEXT 15 -#define GET_ITER 16 -#define RESERVED 17 -#define GET_LEN 18 -#define GET_YIELD_FROM_ITER 19 -#define INTERPRETER_EXIT 20 -#define LOAD_BUILD_CLASS 21 -#define LOAD_LOCALS 22 -#define MAKE_FUNCTION 23 -#define MATCH_KEYS 24 -#define MATCH_MAPPING 25 -#define MATCH_SEQUENCE 26 -#define NOP 27 -#define NOT_TAKEN 28 -#define POP_EXCEPT 29 -#define POP_ITER 30 -#define POP_TOP 31 -#define PUSH_EXC_INFO 32 -#define PUSH_NULL 33 -#define RETURN_GENERATOR 34 -#define RETURN_VALUE 35 -#define SETUP_ANNOTATIONS 36 -#define STORE_SLICE 37 -#define STORE_SUBSCR 38 -#define TO_BOOL 39 -#define UNARY_INVERT 40 -#define UNARY_NEGATIVE 41 -#define UNARY_NOT 42 -#define WITH_EXCEPT_START 43 -#define BINARY_OP 44 -#define BUILD_INTERPOLATION 45 -#define BUILD_LIST 46 -#define BUILD_MAP 47 -#define BUILD_SET 48 -#define BUILD_SLICE 49 -#define BUILD_STRING 50 -#define BUILD_TUPLE 51 -#define CALL 52 -#define CALL_INTRINSIC_1 53 -#define CALL_INTRINSIC_2 54 -#define CALL_KW 55 -#define COMPARE_OP 56 -#define CONTAINS_OP 57 -#define CONVERT_VALUE 58 -#define COPY 59 -#define COPY_FREE_VARS 60 -#define DELETE_ATTR 61 -#define DELETE_DEREF 62 -#define DELETE_FAST 63 -#define DELETE_GLOBAL 64 -#define DELETE_NAME 65 -#define DICT_MERGE 66 -#define DICT_UPDATE 67 -#define END_ASYNC_FOR 68 -#define EXTENDED_ARG 69 -#define FOR_ITER 70 -#define GET_AWAITABLE 71 -#define IMPORT_FROM 72 -#define IMPORT_NAME 73 -#define IS_OP 74 -#define JUMP_BACKWARD 75 -#define JUMP_BACKWARD_NO_INTERRUPT 76 -#define JUMP_FORWARD 77 -#define LIST_APPEND 78 -#define LIST_EXTEND 79 -#define LOAD_ATTR 80 -#define LOAD_COMMON_CONSTANT 81 -#define LOAD_CONST 82 -#define LOAD_DEREF 83 -#define LOAD_FAST 84 -#define LOAD_FAST_AND_CLEAR 85 -#define LOAD_FAST_BORROW 86 -#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 87 -#define LOAD_FAST_CHECK 88 -#define LOAD_FAST_LOAD_FAST 89 -#define LOAD_FROM_DICT_OR_DEREF 90 -#define LOAD_FROM_DICT_OR_GLOBALS 91 -#define LOAD_GLOBAL 92 -#define LOAD_NAME 93 -#define LOAD_SMALL_INT 94 -#define LOAD_SPECIAL 95 -#define LOAD_SUPER_ATTR 96 -#define MAKE_CELL 97 -#define MAP_ADD 98 -#define MATCH_CLASS 99 -#define POP_JUMP_IF_FALSE 100 -#define POP_JUMP_IF_NONE 101 -#define POP_JUMP_IF_NOT_NONE 102 -#define POP_JUMP_IF_TRUE 103 -#define RAISE_VARARGS 104 -#define RERAISE 105 -#define SEND 106 -#define SET_ADD 107 -#define SET_FUNCTION_ATTRIBUTE 108 -#define SET_UPDATE 109 -#define STORE_ATTR 110 -#define STORE_DEREF 111 -#define STORE_FAST 112 -#define STORE_FAST_LOAD_FAST 113 -#define STORE_FAST_STORE_FAST 114 -#define STORE_GLOBAL 115 -#define STORE_NAME 116 -#define SWAP 117 -#define UNPACK_EX 118 -#define UNPACK_SEQUENCE 119 -#define YIELD_VALUE 120 -#define RESUME 128 -#define BINARY_OP_ADD_FLOAT 129 -#define BINARY_OP_ADD_INT 130 -#define BINARY_OP_ADD_UNICODE 131 -#define BINARY_OP_EXTEND 132 -#define BINARY_OP_MULTIPLY_FLOAT 133 -#define BINARY_OP_MULTIPLY_INT 134 -#define BINARY_OP_SUBSCR_DICT 135 -#define BINARY_OP_SUBSCR_GETITEM 136 -#define BINARY_OP_SUBSCR_LIST_INT 137 -#define BINARY_OP_SUBSCR_LIST_SLICE 138 -#define BINARY_OP_SUBSCR_STR_INT 139 -#define BINARY_OP_SUBSCR_TUPLE_INT 140 -#define BINARY_OP_SUBTRACT_FLOAT 141 -#define BINARY_OP_SUBTRACT_INT 142 -#define CALL_ALLOC_AND_ENTER_INIT 143 -#define CALL_BOUND_METHOD_EXACT_ARGS 144 -#define CALL_BOUND_METHOD_GENERAL 145 -#define CALL_BUILTIN_CLASS 146 -#define CALL_BUILTIN_FAST 147 -#define CALL_BUILTIN_FAST_WITH_KEYWORDS 148 -#define CALL_BUILTIN_O 149 -#define CALL_ISINSTANCE 150 -#define CALL_KW_BOUND_METHOD 151 -#define CALL_KW_NON_PY 152 -#define CALL_KW_PY 153 -#define CALL_LEN 154 -#define CALL_LIST_APPEND 155 -#define CALL_METHOD_DESCRIPTOR_FAST 156 -#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 157 -#define CALL_METHOD_DESCRIPTOR_NOARGS 158 -#define CALL_METHOD_DESCRIPTOR_O 159 -#define CALL_NON_PY_GENERAL 160 -#define CALL_PY_EXACT_ARGS 161 -#define CALL_PY_GENERAL 162 -#define CALL_STR_1 163 -#define CALL_TUPLE_1 164 -#define CALL_TYPE_1 165 -#define COMPARE_OP_FLOAT 166 -#define COMPARE_OP_INT 167 -#define COMPARE_OP_STR 168 -#define CONTAINS_OP_DICT 169 -#define CONTAINS_OP_SET 170 -#define FOR_ITER_GEN 171 -#define FOR_ITER_LIST 172 -#define FOR_ITER_RANGE 173 -#define FOR_ITER_TUPLE 174 -#define JUMP_BACKWARD_JIT 175 -#define JUMP_BACKWARD_NO_JIT 176 -#define LOAD_ATTR_CLASS 177 -#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK 178 -#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 179 -#define LOAD_ATTR_INSTANCE_VALUE 180 -#define LOAD_ATTR_METHOD_LAZY_DICT 181 -#define LOAD_ATTR_METHOD_NO_DICT 182 -#define LOAD_ATTR_METHOD_WITH_VALUES 183 -#define LOAD_ATTR_MODULE 184 -#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 185 -#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 186 -#define LOAD_ATTR_PROPERTY 187 -#define LOAD_ATTR_SLOT 188 -#define LOAD_ATTR_WITH_HINT 189 -#define LOAD_CONST_IMMORTAL 190 -#define LOAD_CONST_MORTAL 191 -#define LOAD_GLOBAL_BUILTIN 192 -#define LOAD_GLOBAL_MODULE 193 -#define LOAD_SUPER_ATTR_ATTR 194 -#define LOAD_SUPER_ATTR_METHOD 195 -#define RESUME_CHECK 196 -#define SEND_GEN 197 -#define STORE_ATTR_INSTANCE_VALUE 198 -#define STORE_ATTR_SLOT 199 -#define STORE_ATTR_WITH_HINT 200 -#define STORE_SUBSCR_DICT 201 -#define STORE_SUBSCR_LIST_INT 202 -#define TO_BOOL_ALWAYS_TRUE 203 -#define TO_BOOL_BOOL 204 -#define TO_BOOL_INT 205 -#define TO_BOOL_LIST 206 -#define TO_BOOL_NONE 207 -#define TO_BOOL_STR 208 -#define UNPACK_SEQUENCE_LIST 209 -#define UNPACK_SEQUENCE_TUPLE 210 -#define UNPACK_SEQUENCE_TWO_TUPLE 211 -#define INSTRUMENTED_END_FOR 234 -#define INSTRUMENTED_POP_ITER 235 -#define INSTRUMENTED_END_SEND 236 -#define INSTRUMENTED_FOR_ITER 237 -#define INSTRUMENTED_INSTRUCTION 238 -#define INSTRUMENTED_JUMP_FORWARD 239 -#define INSTRUMENTED_NOT_TAKEN 240 -#define INSTRUMENTED_POP_JUMP_IF_TRUE 241 -#define INSTRUMENTED_POP_JUMP_IF_FALSE 242 -#define INSTRUMENTED_POP_JUMP_IF_NONE 243 -#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE 244 -#define INSTRUMENTED_RESUME 245 -#define INSTRUMENTED_RETURN_VALUE 246 -#define INSTRUMENTED_YIELD_VALUE 247 -#define INSTRUMENTED_END_ASYNC_FOR 248 -#define INSTRUMENTED_LOAD_SUPER_ATTR 249 -#define INSTRUMENTED_CALL 250 -#define INSTRUMENTED_CALL_KW 251 -#define INSTRUMENTED_CALL_FUNCTION_EX 252 -#define INSTRUMENTED_JUMP_BACKWARD 253 -#define INSTRUMENTED_LINE 254 -#define ENTER_EXECUTOR 255 -#define ANNOTATIONS_PLACEHOLDER 256 -#define JUMP 257 -#define JUMP_IF_FALSE 258 -#define JUMP_IF_TRUE 259 -#define JUMP_NO_INTERRUPT 260 -#define LOAD_CLOSURE 261 -#define POP_BLOCK 262 -#define SETUP_CLEANUP 263 -#define SETUP_FINALLY 264 -#define SETUP_WITH 265 -#define STORE_FAST_MAYBE_NULL 266 - -#define HAVE_ARGUMENT 43 -#define MIN_SPECIALIZED_OPCODE 129 -#define MIN_INSTRUMENTED_OPCODE 234 - -#ifdef __cplusplus -} -#endif -#endif /* !Py_OPCODE_IDS_H */ diff --git a/Python314_4_x86_Template/include/osdefs.h b/Python314_4_x86_Template/include/osdefs.h deleted file mode 100644 index 2599e87a9..000000000 --- a/Python314_4_x86_Template/include/osdefs.h +++ /dev/null @@ -1,57 +0,0 @@ -// Operating system dependencies. -// -// Define constants: -// -// - ALTSEP -// - DELIM -// - MAXPATHLEN -// - SEP - -#ifndef Py_OSDEFS_H -#define Py_OSDEFS_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef MS_WINDOWS -# define SEP L'\\' -# define ALTSEP L'/' -# define MAXPATHLEN 256 -# define DELIM L';' -#endif - -#ifdef __VXWORKS__ -# define DELIM L';' -#endif - -/* Filename separator */ -#ifndef SEP -# define SEP L'/' -#endif - -/* Max pathname length */ -#ifdef __hpux -# include <sys/param.h> -# include <limits.h> -# ifndef PATH_MAX -# define PATH_MAX MAXPATHLEN -# endif -#endif - -#ifndef MAXPATHLEN -# if defined(PATH_MAX) && PATH_MAX > 1024 -# define MAXPATHLEN PATH_MAX -# else -# define MAXPATHLEN 1024 -# endif -#endif - -/* Search path entry delimiter */ -#ifndef DELIM -# define DELIM L':' -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_OSDEFS_H diff --git a/Python314_4_x86_Template/include/osmodule.h b/Python314_4_x86_Template/include/osmodule.h deleted file mode 100644 index 9095c2fdd..000000000 --- a/Python314_4_x86_Template/include/osmodule.h +++ /dev/null @@ -1,17 +0,0 @@ - -/* os module interface */ - -#ifndef Py_OSMODULE_H -#define Py_OSMODULE_H -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_FUNC(PyObject *) PyOS_FSPath(PyObject *path); -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_OSMODULE_H */ diff --git a/Python314_4_x86_Template/include/patchlevel.h b/Python314_4_x86_Template/include/patchlevel.h deleted file mode 100644 index ba0a27457..000000000 --- a/Python314_4_x86_Template/include/patchlevel.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _Py_PATCHLEVEL_H -#define _Py_PATCHLEVEL_H -/* Python version identification scheme. - - When the major or minor version changes, the VERSION variable in - configure.ac must also be changed. - - There is also (independent) API version information in modsupport.h. -*/ - -/* Values for PY_RELEASE_LEVEL */ -#define PY_RELEASE_LEVEL_ALPHA 0xA -#define PY_RELEASE_LEVEL_BETA 0xB -#define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */ -#define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */ - /* Higher for patch releases */ - -/* Version parsed out into numeric values */ -/*--start constants--*/ -#define PY_MAJOR_VERSION 3 -#define PY_MINOR_VERSION 14 -#define PY_MICRO_VERSION 4 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL -#define PY_RELEASE_SERIAL 0 - -/* Version as a string */ -#define PY_VERSION "3.14.4" -/*--end constants--*/ - - -#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \ - (((X) & 0xff) << 24) | \ - (((Y) & 0xff) << 16) | \ - (((Z) & 0xff) << 8) | \ - (((LEVEL) & 0xf) << 4) | \ - (((SERIAL) & 0xf) << 0)) - -/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. - Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */ -#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \ - PY_MAJOR_VERSION, \ - PY_MINOR_VERSION, \ - PY_MICRO_VERSION, \ - PY_RELEASE_LEVEL, \ - PY_RELEASE_SERIAL) - -// Public Py_PACK_VERSION is declared in pymacro.h; it needs <inttypes.h>. - -#endif //_Py_PATCHLEVEL_H diff --git a/Python314_4_x86_Template/include/py_curses.h b/Python314_4_x86_Template/include/py_curses.h deleted file mode 100644 index 49fc3c9d1..000000000 --- a/Python314_4_x86_Template/include/py_curses.h +++ /dev/null @@ -1,117 +0,0 @@ - -#ifndef Py_CURSES_H -#define Py_CURSES_H - -#ifdef __APPLE__ -/* -** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards -** against multiple definition of wchar_t. -*/ -#ifdef _BSD_WCHAR_T_DEFINED_ -#define _WCHAR_T -#endif -#endif /* __APPLE__ */ - -/* On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards - against multiple definition of wchar_t and wint_t. */ -#if defined(__FreeBSD__) && defined(_XOPEN_SOURCE_EXTENDED) -# ifndef __wchar_t -# define __wchar_t -# endif -# ifndef __wint_t -# define __wint_t -# endif -#endif - -#if defined(WINDOW_HAS_FLAGS) && defined(__APPLE__) -/* gh-109617, gh-115383: we can rely on the default value for NCURSES_OPAQUE on - most platforms, but not on macOS. This is because, starting with Xcode 15, - Apple-provided ncurses.h comes from ncurses 6 (which defaults to opaque - structs) but can still be linked to older versions of ncurses dynamic - libraries which don't provide functions such as is_pad() to deal with opaque - structs. Setting NCURSES_OPAQUE to 0 is harmless in all ncurses releases to - this date (provided that a thread-safe implementation is not required), but - this might change in the future. This fix might become irrelevant once - support for macOS 13 or earlier is dropped. */ -#define NCURSES_OPAQUE 0 -#endif - -#if defined(HAVE_NCURSESW_NCURSES_H) -# include <ncursesw/ncurses.h> -#elif defined(HAVE_NCURSESW_CURSES_H) -# include <ncursesw/curses.h> -#elif defined(HAVE_NCURSES_NCURSES_H) -# include <ncurses/ncurses.h> -#elif defined(HAVE_NCURSES_CURSES_H) -# include <ncurses/curses.h> -#elif defined(HAVE_NCURSES_H) -# include <ncurses.h> -#elif defined(HAVE_CURSES_H) -# include <curses.h> -#endif - -#ifdef NCURSES_VERSION -/* configure was checking <curses.h>, but we will - use <ncurses.h>, which has some or all these features. */ -#if !defined(WINDOW_HAS_FLAGS) && \ - (NCURSES_VERSION_PATCH+0 < 20070303 || !(NCURSES_OPAQUE+0)) -/* the WINDOW flags field was always accessible in ncurses prior to 20070303; - after that, it depends on the value of NCURSES_OPAQUE. */ -#define WINDOW_HAS_FLAGS 1 -#endif -#if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906 -#define HAVE_CURSES_IS_PAD 1 -#endif -#ifndef MVWDELCH_IS_EXPRESSION -#define MVWDELCH_IS_EXPRESSION 1 -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define PyCurses_API_pointers 4 - -/* Type declarations */ - -typedef struct PyCursesWindowObject { - PyObject_HEAD - WINDOW *win; - char *encoding; - struct PyCursesWindowObject *orig; -} PyCursesWindowObject; - -#define PyCurses_CAPSULE_NAME "_curses._C_API" - - -#ifdef CURSES_MODULE -/* This section is used when compiling _cursesmodule.c */ - -#else -/* This section is used in modules that use the _cursesmodule API */ - -static void **PyCurses_API; - -#define PyCursesWindow_Type (*_PyType_CAST(PyCurses_API[0])) -#define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;} -#define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;} -#define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;} - -#define PyCursesWindow_Check(v) Py_IS_TYPE((v), &PyCursesWindow_Type) - -#define import_curses() \ - PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1); - -#endif - -/* general error messages */ -static const char catchall_ERR[] = "curses function returned ERR"; -static const char catchall_NULL[] = "curses function returned NULL"; - -#ifdef __cplusplus -} -#endif - -#endif /* !defined(Py_CURSES_H) */ - diff --git a/Python314_4_x86_Template/include/pyatomic.h b/Python314_4_x86_Template/include/pyatomic.h deleted file mode 100644 index 2ce2c81cf..000000000 --- a/Python314_4_x86_Template/include/pyatomic.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef Py_ATOMIC_H -#define Py_ATOMIC_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_ATOMIC_H -# include "cpython/pyatomic.h" -# undef Py_CPYTHON_ATOMIC_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ATOMIC_H */ diff --git a/Python314_4_x86_Template/include/pybuffer.h b/Python314_4_x86_Template/include/pybuffer.h deleted file mode 100644 index ca1c6058d..000000000 --- a/Python314_4_x86_Template/include/pybuffer.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Public Py_buffer API */ - -#ifndef Py_BUFFER_H -#define Py_BUFFER_H -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000 - -/* === New Buffer API ============================================ - * Limited API and stable ABI since Python 3.11 - * - * Py_buffer struct layout and size is now part of the stable abi3. The - * struct layout and size must not be changed in any way, as it would - * break the ABI. - * - */ - -typedef struct { - void *buf; - PyObject *obj; /* owned reference */ - Py_ssize_t len; - Py_ssize_t itemsize; /* This is Py_ssize_t so it can be - pointed to by strides in simple case.*/ - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; -} Py_buffer; - -typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); -typedef void (*releasebufferproc)(PyObject *, Py_buffer *); - -/* Return 1 if the getbuffer function is available, otherwise return 0. */ -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 - call. - - Returns -1 and raises an error on failure and returns 0 on success. */ -PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view, - int flags); - -/* Get the memory area pointed to by the indices for the buffer given. - Note that view->ndim is the assumed size of indices. */ -PyAPI_FUNC(void *) PyBuffer_GetPointer(const Py_buffer *view, const Py_ssize_t *indices); - -/* Return the implied itemsize of the data-format area from a - struct-style description. */ -PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format); - -/* Implementation in memoryobject.c */ -PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, const Py_buffer *view, - Py_ssize_t len, char order); - -PyAPI_FUNC(int) PyBuffer_FromContiguous(const Py_buffer *view, const void *buf, - Py_ssize_t len, char order); - -/* Copy len bytes of data from the contiguous chunk of memory - pointed to by buf into the buffer exported by obj. Return - 0 on success and return -1 and raise a PyBuffer_Error on - error (i.e. the object does not have a buffer interface or - it is not working). - - If fort is 'F', then if the object is multi-dimensional, - then the data will be copied into the array in - Fortran-style (first dimension varies the fastest). If - fort is 'C', then the data will be copied into the array - in C-style (last dimension varies the fastest). If fort - is 'A', then it does not matter and the copy will be made - in whatever way is more efficient. */ -PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src); - -/* Copy the data from the src buffer to the buffer of destination. */ -PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort); - -/*Fill the strides array with byte-strides of a contiguous - (Fortran-style if fort is 'F' or C-style otherwise) - array of the given shape with the given number of bytes - per element. */ -PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims, - Py_ssize_t *shape, - Py_ssize_t *strides, - int itemsize, - char fort); - -/* Fills in a buffer-info structure correctly for an exporter - that can only share a contiguous chunk of memory of - "unsigned bytes" of the given length. - - Returns 0 on success and -1 (with raising an error) on error. */ -PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf, - Py_ssize_t len, int readonly, - int flags); - -/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */ -PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view); - -/* Maximum number of dimensions */ -#define PyBUF_MAX_NDIM 64 - -/* Flags for getting buffers. Keep these in sync with inspect.BufferFlags. */ -#define PyBUF_SIMPLE 0 -#define PyBUF_WRITABLE 0x0001 - -#ifndef Py_LIMITED_API -/* we used to include an E, backwards compatible alias */ -#define PyBUF_WRITEABLE PyBUF_WRITABLE -#endif - -#define PyBUF_FORMAT 0x0004 -#define PyBUF_ND 0x0008 -#define PyBUF_STRIDES (0x0010 | PyBUF_ND) -#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) -#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) -#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) -#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - -#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) -#define PyBUF_CONTIG_RO (PyBUF_ND) - -#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) -#define PyBUF_STRIDED_RO (PyBUF_STRIDES) - -#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) -#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) - -#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) -#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) - - -#define PyBUF_READ 0x100 -#define PyBUF_WRITE 0x200 - -#endif /* !Py_LIMITED_API || Py_LIMITED_API >= 3.11 */ - -#ifdef __cplusplus -} -#endif -#endif /* Py_BUFFER_H */ diff --git a/Python314_4_x86_Template/include/pycapsule.h b/Python314_4_x86_Template/include/pycapsule.h deleted file mode 100644 index 666b9f867..000000000 --- a/Python314_4_x86_Template/include/pycapsule.h +++ /dev/null @@ -1,58 +0,0 @@ - -/* Capsule objects let you wrap a C "void *" pointer in a Python - object. They're a way of passing data through the Python interpreter - without creating your own custom type. - - Capsules are used for communication between extension modules. - They provide a way for an extension module to export a C interface - to other extension modules, so that extension modules can use the - Python import mechanism to link to one another. - - For more information, please see "c-api/capsule.html" in the - documentation. -*/ - -#ifndef Py_CAPSULE_H -#define Py_CAPSULE_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PyCapsule_Type; - -typedef void (*PyCapsule_Destructor)(PyObject *); - -#define PyCapsule_CheckExact(op) Py_IS_TYPE((op), &PyCapsule_Type) - - -PyAPI_FUNC(PyObject *) PyCapsule_New( - void *pointer, - const char *name, - PyCapsule_Destructor destructor); - -PyAPI_FUNC(void *) PyCapsule_GetPointer(PyObject *capsule, const char *name); - -PyAPI_FUNC(PyCapsule_Destructor) PyCapsule_GetDestructor(PyObject *capsule); - -PyAPI_FUNC(const char *) PyCapsule_GetName(PyObject *capsule); - -PyAPI_FUNC(void *) PyCapsule_GetContext(PyObject *capsule); - -PyAPI_FUNC(int) PyCapsule_IsValid(PyObject *capsule, const char *name); - -PyAPI_FUNC(int) PyCapsule_SetPointer(PyObject *capsule, void *pointer); - -PyAPI_FUNC(int) PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor); - -PyAPI_FUNC(int) PyCapsule_SetName(PyObject *capsule, const char *name); - -PyAPI_FUNC(int) PyCapsule_SetContext(PyObject *capsule, void *context); - -PyAPI_FUNC(void *) PyCapsule_Import( - const char *name, /* UTF-8 encoded string */ - int no_block); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_CAPSULE_H */ diff --git a/Python314_4_x86_Template/include/pyconfig.h b/Python314_4_x86_Template/include/pyconfig.h deleted file mode 100644 index 710a737eb..000000000 --- a/Python314_4_x86_Template/include/pyconfig.h +++ /dev/null @@ -1,768 +0,0 @@ -#ifndef Py_CONFIG_H -#define Py_CONFIG_H - -/* pyconfig.h. NOT Generated automatically by configure. - -This is a manually maintained version used for the Watcom, -Borland and Microsoft Visual C++ compilers. It is a -standard part of the Python distribution. - -WINDOWS DEFINES: -The code specific to Windows should be wrapped around one of -the following #defines - -MS_WIN64 - Code specific to the MS Win64 API -MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs) -MS_WINDOWS - Code specific to Windows, but all versions. -Py_ENABLE_SHARED - Code if the Python core is built as a DLL. - -Also note that neither "_M_IX86" or "_MSC_VER" should be used for -any purpose other than "Windows Intel x86 specific" and "Microsoft -compiler specific". Therefore, these should be very rare. - - -NOTE: The following symbols are deprecated: -NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT -MS_CORE_DLL. - -WIN32 is still required for the locale module. - -*/ - -/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */ -#ifdef USE_DL_EXPORT -# define Py_BUILD_CORE -#endif /* USE_DL_EXPORT */ - -/* Visual Studio 2005 introduces deprecation warnings for - "insecure" and POSIX functions. The insecure functions should - be replaced by *_s versions (according to Microsoft); the - POSIX functions by _* versions (which, according to Microsoft, - would be ISO C conforming). Neither renaming is feasible, so - we just silence the warnings. */ - -#ifndef _CRT_SECURE_NO_DEPRECATE -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE 1 -#endif - -#define HAVE_IO_H -#define HAVE_SYS_UTIME_H -#define HAVE_TEMPNAM -#define HAVE_TMPFILE -#define HAVE_TMPNAM -#define HAVE_CLOCK -#define HAVE_STRERROR - -#include <io.h> - -#define HAVE_STRFTIME -#define DONT_HAVE_SIG_ALARM -#define DONT_HAVE_SIG_PAUSE -#define LONG_BIT 32 -#define WORD_BIT 32 - -#define MS_WIN32 /* only support win32 and greater. */ -#define MS_WINDOWS -#define NT_THREADS -#define WITH_THREAD -#ifndef NETSCAPE_PI -#define USE_SOCKET -#endif - -#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) || defined(Py_BUILD_CORE_MODULE) -#include <winapifamily.h> - -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -#define MS_WINDOWS_DESKTOP -#endif -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) -#define MS_WINDOWS_APP -#endif -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_SYSTEM) -#define MS_WINDOWS_SYSTEM -#endif -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_GAMES) -#define MS_WINDOWS_GAMES -#endif - -/* Define to 1 if you support windows console io */ -#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM) -#define HAVE_WINDOWS_CONSOLE_IO 1 -#endif -#endif /* Py_BUILD_CORE || Py_BUILD_CORE_BUILTIN || Py_BUILD_CORE_MODULE */ - -/* Define to 1 when compiling for experimental free-threaded builds */ -#ifdef Py_GIL_DISABLED -/* We undefine if it was set to zero because all later checks are #ifdef. - * Note that non-Windows builds do not do this, and so every effort should - * be made to avoid defining the variable at all when not desired. However, - * sysconfig.get_config_var always returns a 1 or a 0, and so it seems likely - * that a build backend will define it with the value. - */ -#if Py_GIL_DISABLED == 0 -#undef Py_GIL_DISABLED -#endif -#endif - -/* Compiler specific defines */ - -/* ------------------------------------------------------------------------*/ -/* Microsoft C defines _MSC_VER, as does clang-cl.exe */ -#ifdef _MSC_VER - -/* We want COMPILER to expand to a string containing _MSC_VER's *value*. - * This is horridly tricky, because the stringization operator only works - * on macro arguments, and doesn't evaluate macros passed *as* arguments. - */ -#define _Py_PASTE_VERSION(SUFFIX) \ - ("[MSC v." _Py_STRINGIZE(_MSC_VER) " " SUFFIX "]") -/* e.g., this produces, after compile-time string catenation, - * ("[MSC v.1900 64 bit (Intel)]") - * - * _Py_STRINGIZE(_MSC_VER) expands to - * _Py_STRINGIZE1(_MSC_VER) and this second macro call is scanned - * again for macros and so further expands to - * _Py_STRINGIZE1(1900) which then expands to - * "1900" - */ -#define _Py_STRINGIZE(X) _Py_STRINGIZE1(X) -#define _Py_STRINGIZE1(X) #X - -/* MSVC defines _WINxx to differentiate the windows platform types - - Note that for compatibility reasons _WIN32 is defined on Win32 - *and* on Win64. For the same reasons, in Python, MS_WIN32 is - defined on Win32 *and* Win64. Win32 only code must therefore be - guarded as follows: - #if defined(MS_WIN32) && !defined(MS_WIN64) -*/ -#ifdef _WIN64 -#define MS_WIN64 -#endif - -/* set the COMPILER and support tier - * - * win_amd64 MSVC (x86_64-pc-windows-msvc): 1 - * win32 MSVC (i686-pc-windows-msvc): 1 - * win_arm64 MSVC (aarch64-pc-windows-msvc): 3 - * other archs and ICC: 0 - */ -#ifdef MS_WIN64 -#if defined(_M_X64) || defined(_M_AMD64) -#if defined(__clang__) -#define COMPILER ("[Clang " __clang_version__ "] 64 bit (AMD64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") -#define PY_SUPPORT_TIER 0 -#elif defined(__INTEL_COMPILER) -#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") -#define PY_SUPPORT_TIER 0 -#else -#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)") -#define PY_SUPPORT_TIER 1 -#endif /* __clang__ */ -#define PYD_PLATFORM_TAG "win_amd64" -#elif defined(_M_ARM64) -#define COMPILER _Py_PASTE_VERSION("64 bit (ARM64)") -#define PY_SUPPORT_TIER 3 -#define PYD_PLATFORM_TAG "win_arm64" -#else -#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)") -#define PY_SUPPORT_TIER 0 -#endif -#endif /* MS_WIN64 */ - -/* set the version macros for the windows headers */ -/* Python 3.13+ requires Windows 10 or greater */ -#define Py_WINVER 0x0A00 /* _WIN32_WINNT_WIN10 */ -#define Py_NTDDI NTDDI_WIN10 - -/* 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 - structures exposed in the Windows headers. Even when building Python, we - allow a single source file to override this - they may need access to - structures etc so it can optionally use new Windows features if it - determines at runtime they are available. -*/ -#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) || defined(Py_BUILD_CORE_MODULE) -#ifndef NTDDI_VERSION -#define NTDDI_VERSION Py_NTDDI -#endif -#ifndef WINVER -#define WINVER Py_WINVER -#endif -#ifndef _WIN32_WINNT -#define _WIN32_WINNT Py_WINVER -#endif -#endif - -/* _W64 is not defined for VC6 or eVC4 */ -#ifndef _W64 -#define _W64 -#endif - -/* Define like size_t, omitting the "unsigned" */ -#ifdef MS_WIN64 -typedef __int64 Py_ssize_t; -# define PY_SSIZE_T_MAX LLONG_MAX -#else -typedef _W64 int Py_ssize_t; -# define PY_SSIZE_T_MAX INT_MAX -#endif -#define HAVE_PY_SSIZE_T 1 - -#if defined(MS_WIN32) && !defined(MS_WIN64) -#if defined(_M_IX86) -#if defined(__clang__) -#define COMPILER ("[Clang " __clang_version__ "] 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") -#define PY_SUPPORT_TIER 0 -#elif defined(__INTEL_COMPILER) -#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]") -#define PY_SUPPORT_TIER 0 -#else -#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)") -#define PY_SUPPORT_TIER 1 -#endif /* __clang__ */ -#define PYD_PLATFORM_TAG "win32" -#elif defined(_M_ARM) -#define COMPILER _Py_PASTE_VERSION("32 bit (ARM)") -#define PYD_PLATFORM_TAG "win_arm32" -#define PY_SUPPORT_TIER 0 -#else -#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)") -#define PY_SUPPORT_TIER 0 -#endif -#endif /* MS_WIN32 && !MS_WIN64 */ - -typedef int pid_t; - -/* define some ANSI types that are not defined in earlier Win headers */ -#if _MSC_VER >= 1200 -/* This file only exists in VC 6.0 or higher */ -#include <basetsd.h> -#endif - -#endif /* _MSC_VER */ - -/* ------------------------------------------------------------------------*/ -/* mingw and mingw-w64 define __MINGW32__ */ -#ifdef __MINGW32__ - -#ifdef _WIN64 -#define MS_WIN64 -#endif - -#endif /* __MINGW32__*/ - -/* ------------------------------------------------------------------------*/ -/* egcs/gnu-win32 defines __GNUC__ and _WIN32 */ -#if defined(__GNUC__) && defined(_WIN32) -/* XXX These defines are likely incomplete, but should be easy to fix. - They should be complete enough to build extension modules. */ -/* Suggested by Rene Liebscher <R.Liebscher@gmx.de> to avoid a GCC 2.91.* - bug that requires structure imports. More recent versions of the - compiler don't exhibit this bug. -*/ -#if (__GNUC__==2) && (__GNUC_MINOR__<=91) -#warning "Please use an up-to-date version of gcc! (>2.91 recommended)" -#endif - -#define COMPILER "[gcc]" -#define PY_LONG_LONG long long -#define PY_LLONG_MIN LLONG_MIN -#define PY_LLONG_MAX LLONG_MAX -#define PY_ULLONG_MAX ULLONG_MAX -#endif /* GNUC */ - -/* ------------------------------------------------------------------------*/ -/* lcc-win32 defines __LCC__ */ -#if defined(__LCC__) -/* XXX These defines are likely incomplete, but should be easy to fix. - They should be complete enough to build extension modules. */ - -#define COMPILER "[lcc-win32]" -typedef int pid_t; -/* __declspec() is supported here too - do nothing to get the defaults */ - -#endif /* LCC */ - -/* ------------------------------------------------------------------------*/ -/* End of compilers - finish up */ - -#ifndef NO_STDIO_H -# include <stdio.h> -#endif - -/* 64 bit ints are usually spelt __int64 unless compiler has overridden */ -#ifndef PY_LONG_LONG -# define PY_LONG_LONG __int64 -# define PY_LLONG_MAX _I64_MAX -# define PY_LLONG_MIN _I64_MIN -# define PY_ULLONG_MAX _UI64_MAX -#endif - -/* For Windows the Python core is in a DLL by default. Test -Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ -#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED) -# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */ -# define MS_COREDLL /* deprecated old symbol */ -#endif /* !MS_NO_COREDLL && ... */ - -/* All windows compilers that use this header support __declspec */ -#define HAVE_DECLSPEC_DLL - -/* For an MSVC DLL, we can nominate the .lib files used by extensions */ -#ifdef MS_COREDLL -# if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN) - /* not building the core - must be an ext */ -# if defined(_MSC_VER) && !defined(Py_NO_LINK_LIB) - /* So MSVC users need not specify the .lib - file in their Makefile */ - /* Define Py_NO_LINK_LIB to build extension disabling pragma - based auto-linking. - This is relevant when using build-system generator (e.g CMake) where - the linking is explicitly handled */ -# if defined(Py_GIL_DISABLED) -# if defined(_DEBUG) -# pragma comment(lib,"python314t_d.lib") -# elif defined(Py_LIMITED_API) -# pragma comment(lib,"python3t.lib") -# else -# pragma comment(lib,"python314t.lib") -# endif /* _DEBUG */ -# else /* Py_GIL_DISABLED */ -# if defined(_DEBUG) -# pragma comment(lib,"python314_d.lib") -# elif defined(Py_LIMITED_API) -# pragma comment(lib,"python3.lib") -# else -# pragma comment(lib,"python314.lib") -# endif /* _DEBUG */ -# endif /* Py_GIL_DISABLED */ -# endif /* _MSC_VER && !Py_NO_LINK_LIB */ -# endif /* Py_BUILD_CORE */ -#endif /* MS_COREDLL */ - -#ifdef MS_WIN64 -/* maintain "win32" sys.platform for backward compatibility of Python code, - the Win64 API should be close enough to the Win32 API to make this - preferable */ -# define PLATFORM "win32" -# define SIZEOF_VOID_P 8 -# define SIZEOF_TIME_T 8 -# define SIZEOF_OFF_T 4 -# define SIZEOF_FPOS_T 8 -# define SIZEOF_HKEY 8 -# define SIZEOF_SIZE_T 8 -# define ALIGNOF_SIZE_T 8 -# define ALIGNOF_MAX_ALIGN_T 8 -/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff - 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. */ -# define HAVE_LARGEFILE_SUPPORT -#elif defined(MS_WIN32) -# define PLATFORM "win32" -# define HAVE_LARGEFILE_SUPPORT -# define SIZEOF_VOID_P 4 -# define SIZEOF_OFF_T 4 -# define SIZEOF_FPOS_T 8 -# define SIZEOF_HKEY 4 -# define SIZEOF_SIZE_T 4 -# define ALIGNOF_SIZE_T 4 - /* MS VS2005 changes time_t to a 64-bit type on all platforms */ -# if defined(_MSC_VER) && _MSC_VER >= 1400 -# define SIZEOF_TIME_T 8 -# else -# define SIZEOF_TIME_T 4 -# endif -# define ALIGNOF_MAX_ALIGN_T 8 -#endif - -#ifdef _DEBUG -# define Py_DEBUG -#endif - - -#ifdef MS_WIN32 - -#define SIZEOF_SHORT 2 -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define ALIGNOF_LONG 4 -#define SIZEOF_LONG_LONG 8 -#define SIZEOF_DOUBLE 8 -#define SIZEOF_FLOAT 4 - -/* VC 7.1 has them and VC 6.0 does not. VC 6.0 has a version number of 1200. - Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't - define these. - If some compiler does not provide them, modify the #if appropriately. */ -#if defined(_MSC_VER) -#if _MSC_VER > 1300 -#define HAVE_UINTPTR_T 1 -#define HAVE_INTPTR_T 1 -#else -/* VC6, VS 2002 and eVC4 don't support the C99 LL suffix for 64-bit integer literals */ -#define Py_LL(x) x##I64 -#endif /* _MSC_VER > 1300 */ -#endif /* _MSC_VER */ - -#endif - -/* define signed and unsigned exact-width 32-bit and 64-bit types, used in the - implementation of Python integers. */ -#define PY_UINT32_T uint32_t -#define PY_UINT64_T uint64_t -#define PY_INT32_T int32_t -#define PY_INT64_T int64_t - -/* Fairly standard from here! */ - -/* Define if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -/* #undef _ALL_SOURCE */ -#endif - -/* Define to empty if the keyword does not work. */ -/* #define const */ - -/* Define to 1 if you have the <conio.h> header file. */ -#define HAVE_CONIO_H 1 - -/* Define to 1 if you have the <direct.h> header file. */ -#define HAVE_DIRECT_H 1 - -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. - */ -#define HAVE_DECL_TZNAME 1 - -/* Define if you have dirent.h. */ -/* #define DIRENT 1 */ - -/* Define to the type of elements in the array set by `getgroups'. - Usually this is either `int' or `gid_t'. */ -/* #undef GETGROUPS_T */ - -/* Define to `int' if <sys/types.h> doesn't define. */ -/* #undef gid_t */ - -/* Define if your struct tm has tm_zone. */ -/* #undef HAVE_TM_ZONE */ - -/* Define if you don't have tm_zone but do have the external array - tzname. */ -#define HAVE_TZNAME - -/* Define to `int' if <sys/types.h> doesn't define. */ -/* #undef mode_t */ - -/* Define if you don't have dirent.h, but have ndir.h. */ -/* #undef NDIR */ - -/* Define to `long' if <sys/types.h> doesn't define. */ -/* #undef off_t */ - -/* Define to `int' if <sys/types.h> doesn't define. */ -/* #undef pid_t */ - -/* Define if the system does not provide POSIX.1 features except - with this defined. */ -/* #undef _POSIX_1_SOURCE */ - -/* Define if you need to in order for stat and other things to work. */ -/* #undef _POSIX_SOURCE */ - -/* Define as the return type of signal handlers (int or void). */ -#define RETSIGTYPE void - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -/* #undef size_t */ - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you don't have dirent.h, but have sys/dir.h. */ -/* #undef SYSDIR */ - -/* Define if you don't have dirent.h, but have sys/ndir.h. */ -/* #undef SYSNDIR */ - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -/* #undef TIME_WITH_SYS_TIME */ - -/* Define if your <sys/time.h> declares struct tm. */ -/* #define TM_IN_SYS_TIME 1 */ - -/* Define to `int' if <sys/types.h> doesn't define. */ -/* #undef uid_t */ - -/* Define if the closedir function returns void instead of int. */ -/* #undef VOID_CLOSEDIR */ - -/* Define if getpgrp() must be called as getpgrp(0) - and (consequently) setpgrp() as setpgrp(0, 0). */ -/* #undef GETPGRP_HAVE_ARGS */ - -/* Define this if your time.h defines altzone */ -/* #define HAVE_ALTZONE */ - -/* Define if you have the putenv function. */ -#define HAVE_PUTENV - -/* Define if your compiler supports function prototypes */ -#define HAVE_PROTOTYPES - -/* Define if you can safely include both <sys/select.h> and <sys/time.h> - (which you can't on SCO ODT 3.0). */ -/* #undef SYS_SELECT_WITH_SYS_TIME */ - -/* Define if you want build the _decimal module using a coroutine-local rather - than a thread-local context */ -#define WITH_DECIMAL_CONTEXTVAR 1 - -/* Define if you want documentation strings in extension modules */ -#define WITH_DOC_STRINGS 1 - -/* Define if you want to compile in rudimentary thread support */ -/* #undef WITH_THREAD */ - -/* Define if you want to use the GNU readline library */ -/* #define WITH_READLINE 1 */ - -/* Use Python's own small-block memory-allocator. */ -#define WITH_PYMALLOC 1 - -/* Define if you want to compile in mimalloc memory allocator. */ -#define WITH_MIMALLOC 1 - -/* Define if you have clock. */ -/* #define HAVE_CLOCK */ - -/* Define when any dynamic module loading is enabled */ -#define HAVE_DYNAMIC_LOADING - -/* Define if you have ftime. */ -#define HAVE_FTIME - -/* Define if you have getpeername. */ -#define HAVE_GETPEERNAME - -/* Define if you have getpgrp. */ -/* #undef HAVE_GETPGRP */ - -/* Define if you have getpid. */ -#define HAVE_GETPID - -/* Define if you have gettimeofday. */ -/* #undef HAVE_GETTIMEOFDAY */ - -/* Define if you have getwd. */ -/* #undef HAVE_GETWD */ - -/* Define if you have lstat. */ -/* #undef HAVE_LSTAT */ - -/* Define if you have the mktime function. */ -#define HAVE_MKTIME - -/* Define if you have nice. */ -/* #undef HAVE_NICE */ - -/* Define if you have readlink. */ -/* #undef HAVE_READLINK */ - -/* Define if you have setpgid. */ -/* #undef HAVE_SETPGID */ - -/* Define if you have setpgrp. */ -/* #undef HAVE_SETPGRP */ - -/* Define if you have setsid. */ -/* #undef HAVE_SETSID */ - -/* Define if you have setvbuf. */ -#define HAVE_SETVBUF - -/* Define if you have siginterrupt. */ -/* #undef HAVE_SIGINTERRUPT */ - -/* Define to 1 if you have the `shutdown' function. */ -#define HAVE_SHUTDOWN 1 - -/* Define if you have symlink. */ -/* #undef HAVE_SYMLINK */ - -/* Define if you have tcgetpgrp. */ -/* #undef HAVE_TCGETPGRP */ - -/* Define if you have tcsetpgrp. */ -/* #undef HAVE_TCSETPGRP */ - -/* Define if you have times. */ -/* #undef HAVE_TIMES */ - -/* Define to 1 if you have the `umask' function. */ -#define HAVE_UMASK 1 - -/* Define if you have uname. */ -/* #undef HAVE_UNAME */ - -/* Define if you have waitpid. */ -/* #undef HAVE_WAITPID */ - -/* Define to 1 if you have the `wcsftime' function. */ -#if defined(_MSC_VER) && _MSC_VER >= 1310 -#define HAVE_WCSFTIME 1 -#endif - -/* Define to 1 if you have the `wcscoll' function. */ -#define HAVE_WCSCOLL 1 - -/* Define to 1 if you have the `wcsxfrm' function. */ -#define HAVE_WCSXFRM 1 - -/* Define if the zlib library has inflateCopy */ -#define HAVE_ZLIB_COPY 1 - -/* Define if you have the <dlfcn.h> header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if you have the <errno.h> header file. */ -#define HAVE_ERRNO_H 1 - -/* Define if you have the <fcntl.h> header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the <process.h> header file. */ -#define HAVE_PROCESS_H 1 - -/* Define to 1 if you have the <signal.h> header file. */ -#define HAVE_SIGNAL_H 1 - -/* Define if you have the <stddef.h> header file. */ -#define HAVE_STDDEF_H 1 - -/* Define if you have the <sys/audioio.h> header file. */ -/* #undef HAVE_SYS_AUDIOIO_H */ - -/* Define if you have the <sys/param.h> header file. */ -/* #define HAVE_SYS_PARAM_H 1 */ - -/* Define if you have the <sys/select.h> header file. */ -/* #define HAVE_SYS_SELECT_H 1 */ - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define if you have the <sys/time.h> header file. */ -/* #define HAVE_SYS_TIME_H 1 */ - -/* Define if you have the <sys/times.h> header file. */ -/* #define HAVE_SYS_TIMES_H 1 */ - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define if you have the <sys/un.h> header file. */ -/* #define HAVE_SYS_UN_H 1 */ - -/* Define if you have the <sys/utime.h> header file. */ -/* #define HAVE_SYS_UTIME_H 1 */ - -/* Define if you have the <sys/utsname.h> header file. */ -/* #define HAVE_SYS_UTSNAME_H 1 */ - -/* Define if you have the <unistd.h> header file. */ -/* #define HAVE_UNISTD_H 1 */ - -/* Define if you have the <utime.h> header file. */ -/* #define HAVE_UTIME_H 1 */ - -/* Define if the compiler provides a wchar.h header file. */ -#define HAVE_WCHAR_H 1 - -/* The size of `wchar_t', as computed by sizeof. */ -#define SIZEOF_WCHAR_T 2 - -/* The size of `_Bool', as computed by sizeof. */ -#define SIZEOF__BOOL 1 - -/* The size of `pid_t', as computed by sizeof. */ -#define SIZEOF_PID_T SIZEOF_INT - -/* Define if you have the dl library (-ldl). */ -/* #undef HAVE_LIBDL */ - -/* Define if you have the mpc library (-lmpc). */ -/* #undef HAVE_LIBMPC */ - -/* Define if you have the seq library (-lseq). */ -/* #undef HAVE_LIBSEQ */ - -/* Define if you have the socket library (-lsocket). */ -#define HAVE_LIBSOCKET 1 - -/* Define if you have the sun library (-lsun). */ -/* #undef HAVE_LIBSUN */ - -/* Define if you have the termcap library (-ltermcap). */ -/* #undef HAVE_LIBTERMCAP */ - -/* Define if you have the termlib library (-ltermlib). */ -/* #undef HAVE_LIBTERMLIB */ - -/* Define if you have the thread library (-lthread). */ -/* #undef HAVE_LIBTHREAD */ - -/* WinSock does not use a bitmask in select, and uses - socket handles greater than FD_SETSIZE */ -#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE - -/* Define if C doubles are 64-bit IEEE 754 binary format, stored with the - least significant byte first */ -#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1 - -/* Define to 1 if you have the `erf' function. */ -#define HAVE_ERF 1 - -/* Define to 1 if you have the `erfc' function. */ -#define HAVE_ERFC 1 - -// netdb.h functions (provided by winsock.h) -#define HAVE_GETHOSTNAME 1 -#define HAVE_GETHOSTBYADDR 1 -#define HAVE_GETHOSTBYNAME 1 -#define HAVE_GETPROTOBYNAME 1 -#define HAVE_GETSERVBYNAME 1 -#define HAVE_GETSERVBYPORT 1 -// sys/socket.h functions (provided by winsock.h) -#define HAVE_INET_PTON 1 -#define HAVE_INET_NTOA 1 -#define HAVE_ACCEPT 1 -#define HAVE_BIND 1 -#define HAVE_CONNECT 1 -#define HAVE_GETSOCKNAME 1 -#define HAVE_LISTEN 1 -#define HAVE_RECVFROM 1 -#define HAVE_SENDTO 1 -#define HAVE_SETSOCKOPT 1 -#define HAVE_SOCKET 1 - -/* Define to 1 if you have the `dup' function. */ -#define HAVE_DUP 1 - -/* framework name */ -#define _PYTHONFRAMEWORK "" - -/* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ -#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1 - -// Truncate the thread name to 32766 characters. -#define _PYTHREAD_NAME_MAXLEN 32766 - -#endif /* !Py_CONFIG_H */ diff --git a/Python314_4_x86_Template/include/pydtrace.h b/Python314_4_x86_Template/include/pydtrace.h deleted file mode 100644 index e197d3669..000000000 --- a/Python314_4_x86_Template/include/pydtrace.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Static DTrace probes interface */ - -#ifndef Py_DTRACE_H -#define Py_DTRACE_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef WITH_DTRACE - -#include "pydtrace_probes.h" - -/* pydtrace_probes.h, on systems with DTrace, is auto-generated to include - `PyDTrace_{PROBE}` and `PyDTrace_{PROBE}_ENABLED()` macros for every probe - defined in pydtrace.d. - - Calling these functions must be guarded by a `PyDTrace_{PROBE}_ENABLED()` - check to minimize performance impact when probing is off. For example: - - if (PyDTrace_FUNCTION_ENTRY_ENABLED()) - PyDTrace_FUNCTION_ENTRY(f); -*/ - -#else - -/* Without DTrace, compile to nothing. */ - -static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2) {} -static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2) {} -static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2) {} -static inline void PyDTrace_GC_START(int arg0) {} -static inline void PyDTrace_GC_DONE(Py_ssize_t arg0) {} -static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {} -static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {} -static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {} -static inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {} -static inline void PyDTrace_IMPORT_FIND_LOAD_START(const char *arg0) {} -static inline void PyDTrace_IMPORT_FIND_LOAD_DONE(const char *arg0, int arg1) {} -static inline void PyDTrace_AUDIT(const char *arg0, void *arg1) {} - -static inline int PyDTrace_LINE_ENABLED(void) { return 0; } -static inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; } -static inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; } -static inline int PyDTrace_GC_START_ENABLED(void) { return 0; } -static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; } -static inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; } -static inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; } -static inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return 0; } -static inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; } -static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return 0; } -static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return 0; } -static inline int PyDTrace_AUDIT_ENABLED(void) { return 0; } - -#endif /* !WITH_DTRACE */ - -#ifdef __cplusplus -} -#endif -#endif /* !Py_DTRACE_H */ diff --git a/Python314_4_x86_Template/include/pyerrors.h b/Python314_4_x86_Template/include/pyerrors.h deleted file mode 100644 index 5d0028c11..000000000 --- a/Python314_4_x86_Template/include/pyerrors.h +++ /dev/null @@ -1,335 +0,0 @@ -// Error handling definitions - -#ifndef Py_ERRORS_H -#define Py_ERRORS_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(void) PyErr_SetNone(PyObject *); -PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *); -PyAPI_FUNC(void) PyErr_SetString( - PyObject *exception, - const char *string /* decoded from utf-8 */ - ); -PyAPI_FUNC(PyObject *) PyErr_Occurred(void); -PyAPI_FUNC(void) PyErr_Clear(void); -PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **); -PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyErr_GetRaisedException(void); -PyAPI_FUNC(void) PyErr_SetRaisedException(PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000 -PyAPI_FUNC(PyObject*) PyErr_GetHandledException(void); -PyAPI_FUNC(void) PyErr_SetHandledException(PyObject *); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); -PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); -#endif - -/* 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); - -/* Error testing and normalization */ -PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *); -PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *); -PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**); - -/* Traceback manipulation (PEP 3134) */ -PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *); - -/* Cause manipulation (PEP 3134) */ -PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *); -PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *); - -/* Context manipulation (PEP 3134) */ -PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *); -PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *); - - -PyAPI_FUNC(PyObject *) PyException_GetArgs(PyObject *); -PyAPI_FUNC(void) PyException_SetArgs(PyObject *, PyObject *); - -/* */ - -#define PyExceptionClass_Check(x) \ - (PyType_Check((x)) && \ - PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)) - -#define PyExceptionInstance_Check(x) \ - PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS) - -PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *); - -#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x)) - -#define _PyBaseExceptionGroup_Check(x) \ - PyObject_TypeCheck((x), (PyTypeObject *)PyExc_BaseExceptionGroup) - -/* Predefined exceptions */ - -PyAPI_DATA(PyObject *) PyExc_BaseException; -PyAPI_DATA(PyObject *) PyExc_Exception; -PyAPI_DATA(PyObject *) PyExc_BaseExceptionGroup; -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration; -#endif -PyAPI_DATA(PyObject *) PyExc_StopIteration; -PyAPI_DATA(PyObject *) PyExc_GeneratorExit; -PyAPI_DATA(PyObject *) PyExc_ArithmeticError; -PyAPI_DATA(PyObject *) PyExc_LookupError; - -PyAPI_DATA(PyObject *) PyExc_AssertionError; -PyAPI_DATA(PyObject *) PyExc_AttributeError; -PyAPI_DATA(PyObject *) PyExc_BufferError; -PyAPI_DATA(PyObject *) PyExc_EOFError; -PyAPI_DATA(PyObject *) PyExc_FloatingPointError; -PyAPI_DATA(PyObject *) PyExc_OSError; -PyAPI_DATA(PyObject *) PyExc_ImportError; -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError; -#endif -PyAPI_DATA(PyObject *) PyExc_IndexError; -PyAPI_DATA(PyObject *) PyExc_KeyError; -PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt; -PyAPI_DATA(PyObject *) PyExc_MemoryError; -PyAPI_DATA(PyObject *) PyExc_NameError; -PyAPI_DATA(PyObject *) PyExc_OverflowError; -PyAPI_DATA(PyObject *) PyExc_RuntimeError; -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_DATA(PyObject *) PyExc_RecursionError; -#endif -PyAPI_DATA(PyObject *) PyExc_NotImplementedError; -PyAPI_DATA(PyObject *) PyExc_SyntaxError; -PyAPI_DATA(PyObject *) PyExc_IndentationError; -PyAPI_DATA(PyObject *) PyExc_TabError; -PyAPI_DATA(PyObject *) PyExc_ReferenceError; -PyAPI_DATA(PyObject *) PyExc_SystemError; -PyAPI_DATA(PyObject *) PyExc_SystemExit; -PyAPI_DATA(PyObject *) PyExc_TypeError; -PyAPI_DATA(PyObject *) PyExc_UnboundLocalError; -PyAPI_DATA(PyObject *) PyExc_UnicodeError; -PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError; -PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError; -PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError; -PyAPI_DATA(PyObject *) PyExc_ValueError; -PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError; - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_DATA(PyObject *) PyExc_BlockingIOError; -PyAPI_DATA(PyObject *) PyExc_BrokenPipeError; -PyAPI_DATA(PyObject *) PyExc_ChildProcessError; -PyAPI_DATA(PyObject *) PyExc_ConnectionError; -PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError; -PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError; -PyAPI_DATA(PyObject *) PyExc_ConnectionResetError; -PyAPI_DATA(PyObject *) PyExc_FileExistsError; -PyAPI_DATA(PyObject *) PyExc_FileNotFoundError; -PyAPI_DATA(PyObject *) PyExc_InterruptedError; -PyAPI_DATA(PyObject *) PyExc_IsADirectoryError; -PyAPI_DATA(PyObject *) PyExc_NotADirectoryError; -PyAPI_DATA(PyObject *) PyExc_PermissionError; -PyAPI_DATA(PyObject *) PyExc_ProcessLookupError; -PyAPI_DATA(PyObject *) PyExc_TimeoutError; -#endif - - -/* Compatibility aliases */ -PyAPI_DATA(PyObject *) PyExc_EnvironmentError; -PyAPI_DATA(PyObject *) PyExc_IOError; -#ifdef MS_WINDOWS -PyAPI_DATA(PyObject *) PyExc_WindowsError; -#endif - -/* Predefined warning categories */ -PyAPI_DATA(PyObject *) PyExc_Warning; -PyAPI_DATA(PyObject *) PyExc_UserWarning; -PyAPI_DATA(PyObject *) PyExc_DeprecationWarning; -PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning; -PyAPI_DATA(PyObject *) PyExc_SyntaxWarning; -PyAPI_DATA(PyObject *) PyExc_RuntimeWarning; -PyAPI_DATA(PyObject *) PyExc_FutureWarning; -PyAPI_DATA(PyObject *) PyExc_ImportWarning; -PyAPI_DATA(PyObject *) PyExc_UnicodeWarning; -PyAPI_DATA(PyObject *) PyExc_BytesWarning; -PyAPI_DATA(PyObject *) PyExc_EncodingWarning; -PyAPI_DATA(PyObject *) PyExc_ResourceWarning; - - -/* Convenience functions */ - -PyAPI_FUNC(int) PyErr_BadArgument(void); -PyAPI_FUNC(PyObject *) PyErr_NoMemory(void); -PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *); -PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( - PyObject *, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 -PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects( - PyObject *, PyObject *, PyObject *); -#endif -PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename( - PyObject *exc, - const char *filename /* decoded from the filesystem encoding */ - ); - -PyAPI_FUNC(PyObject *) PyErr_Format( - PyObject *exception, - const char *format, /* ASCII-encoded string */ - ... - ); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -PyAPI_FUNC(PyObject *) PyErr_FormatV( - PyObject *exception, - const char *format, - va_list vargs); -#endif - -#ifdef MS_WINDOWS -PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( - int ierr, - const char *filename /* decoded from the filesystem encoding */ - ); -PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int); -PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( - PyObject *,int, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 -PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects( - PyObject *,int, PyObject *, PyObject *); -#endif -PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( - PyObject *exc, - int ierr, - const char *filename /* decoded from the filesystem encoding */ - ); -PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int); -#endif /* MS_WINDOWS */ - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *, - PyObject *, PyObject *); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *, - PyObject *); -#endif - -/* Export the old function so that the existing API remains available: */ -PyAPI_FUNC(void) PyErr_BadInternalCall(void); -PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno); -/* Mask the old API with a call to the new API for code compiled under - Python 2.0: */ -#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) - -/* Function to create a new exception */ -PyAPI_FUNC(PyObject *) PyErr_NewException( - const char *name, PyObject *base, PyObject *dict); -PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc( - const char *name, const char *doc, PyObject *base, PyObject *dict); -PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *); - - -/* In signalmodule.c */ -PyAPI_FUNC(int) PyErr_CheckSignals(void); -PyAPI_FUNC(void) PyErr_SetInterrupt(void); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 -PyAPI_FUNC(int) PyErr_SetInterruptEx(int signum); -#endif - -/* Support for adding program text to SyntaxErrors */ -PyAPI_FUNC(void) PyErr_SyntaxLocation( - const char *filename, /* decoded from the filesystem encoding */ - int lineno); -PyAPI_FUNC(void) PyErr_SyntaxLocationEx( - const char *filename, /* decoded from the filesystem encoding */ - int lineno, - int col_offset); -PyAPI_FUNC(PyObject *) PyErr_ProgramText( - const char *filename, /* decoded from the filesystem encoding */ - int lineno); - -/* The following functions are used to create and modify unicode - exceptions from C */ - -/* create a UnicodeDecodeError object */ -PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create( - const char *encoding, /* UTF-8 encoded string */ - const char *object, - Py_ssize_t length, - Py_ssize_t start, - Py_ssize_t end, - const char *reason /* UTF-8 encoded string */ - ); - -/* get the encoding attribute */ -PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *); -PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *); - -/* get the object attribute */ -PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *); -PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *); -PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *); - -/* get the value of the start attribute (the int * may not be NULL) - return 0 on success, -1 on failure */ -PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *); - -/* assign a new value to the start attribute - return 0 on success, -1 on failure */ -PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t); -PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t); -PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t); - -/* get the value of the end attribute (the int *may not be NULL) - return 0 on success, -1 on failure */ -PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *); - -/* assign a new value to the end attribute - return 0 on success, -1 on failure */ -PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t); -PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t); -PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t); - -/* get the value of the reason attribute */ -PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *); -PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *); -PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *); - -/* assign a new value to the reason attribute - return 0 on success, -1 on failure */ -PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason( - PyObject *exc, - const char *reason /* UTF-8 encoded string */ - ); -PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason( - PyObject *exc, - const char *reason /* UTF-8 encoded string */ - ); -PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( - PyObject *exc, - const char *reason /* UTF-8 encoded string */ - ); - -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) - Py_GCC_ATTRIBUTE((format(printf, 3, 0))); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_ERRORS_H -# include "cpython/pyerrors.h" -# undef Py_CPYTHON_ERRORS_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_ERRORS_H */ diff --git a/Python314_4_x86_Template/include/pyexpat.h b/Python314_4_x86_Template/include/pyexpat.h deleted file mode 100644 index 04548b768..000000000 --- a/Python314_4_x86_Template/include/pyexpat.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Stuff to export relevant 'expat' entry points from pyexpat to other - * parser modules, such as cElementTree. */ - -/* note: you must import expat.h before importing this module! */ - -#define PyExpat_CAPI_MAGIC "pyexpat.expat_CAPI 1.1" -#define PyExpat_CAPSULE_NAME "pyexpat.expat_CAPI" - -struct PyExpat_CAPI -{ - char* magic; /* set to PyExpat_CAPI_MAGIC */ - int size; /* set to sizeof(struct PyExpat_CAPI) */ - int MAJOR_VERSION; - int MINOR_VERSION; - int MICRO_VERSION; - /* pointers to selected expat functions. add new functions at - the end, if needed */ - const XML_LChar * (*ErrorString)(enum XML_Error code); - enum XML_Error (*GetErrorCode)(XML_Parser parser); - XML_Size (*GetErrorColumnNumber)(XML_Parser parser); - XML_Size (*GetErrorLineNumber)(XML_Parser parser); - enum XML_Status (*Parse)( - XML_Parser parser, const char *s, int len, int isFinal); - XML_Parser (*ParserCreate_MM)( - const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - void (*ParserFree)(XML_Parser parser); - void (*SetCharacterDataHandler)( - XML_Parser parser, XML_CharacterDataHandler handler); - void (*SetCommentHandler)( - XML_Parser parser, XML_CommentHandler handler); - void (*SetDefaultHandlerExpand)( - XML_Parser parser, XML_DefaultHandler handler); - void (*SetElementHandler)( - XML_Parser parser, XML_StartElementHandler start, - XML_EndElementHandler end); - void (*SetNamespaceDeclHandler)( - XML_Parser parser, XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - void (*SetProcessingInstructionHandler)( - XML_Parser parser, XML_ProcessingInstructionHandler handler); - void (*SetUnknownEncodingHandler)( - XML_Parser parser, XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - void (*SetUserData)(XML_Parser parser, void *userData); - void (*SetStartDoctypeDeclHandler)(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding); - int (*DefaultUnknownEncodingHandler)( - void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); - /* might be NULL for expat < 2.1.0 */ - int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt); - /* might be NULL for expat < 2.6.0 */ - XML_Bool (*SetReparseDeferralEnabled)(XML_Parser parser, XML_Bool enabled); - /* might be NULL for expat < 2.7.2 */ - XML_Bool (*SetAllocTrackerActivationThreshold)( - XML_Parser parser, unsigned long long activationThresholdBytes); - XML_Bool (*SetAllocTrackerMaximumAmplification)( - XML_Parser parser, float maxAmplificationFactor); - /* always add new stuff to the end! */ -}; - diff --git a/Python314_4_x86_Template/include/pyframe.h b/Python314_4_x86_Template/include/pyframe.h deleted file mode 100644 index 13d52312e..000000000 --- a/Python314_4_x86_Template/include/pyframe.h +++ /dev/null @@ -1,26 +0,0 @@ -/* 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 - -/* Return the line of code the frame is currently executing. */ -PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); - -PyAPI_FUNC(PyCodeObject *) PyFrame_GetCode(PyFrameObject *frame); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYFRAME_H -# include "cpython/pyframe.h" -# undef Py_CPYTHON_PYFRAME_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYFRAME_H */ diff --git a/Python314_4_x86_Template/include/pyhash.h b/Python314_4_x86_Template/include/pyhash.h deleted file mode 100644 index 3e23e2758..000000000 --- a/Python314_4_x86_Template/include/pyhash.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef Py_HASH_H -#define Py_HASH_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Cutoff for small string DJBX33A optimization in range [1, cutoff). - * - * About 50% of the strings in a typical Python application are smaller than - * 6 to 7 chars. However DJBX33A is vulnerable to hash collision attacks. - * NEVER use DJBX33A for long strings! - * - * A Py_HASH_CUTOFF of 0 disables small string optimization. 32 bit platforms - * should use a smaller cutoff because it is easier to create colliding - * strings. A cutoff of 7 on 64bit platforms and 5 on 32bit platforms should - * provide a decent safety margin. - */ -#ifndef Py_HASH_CUTOFF -# define Py_HASH_CUTOFF 0 -#elif (Py_HASH_CUTOFF > 7 || Py_HASH_CUTOFF < 0) -# error Py_HASH_CUTOFF must in range 0...7. -#endif /* Py_HASH_CUTOFF */ - - -/* Hash algorithm selection - * - * The values for Py_HASH_* are hard-coded in the - * configure script. - * - * - FNV and SIPHASH* are available on all platforms and architectures. - * - With EXTERNAL embedders can provide an alternative implementation with:: - * - * PyHash_FuncDef PyHash_Func = {...}; - * - * XXX: Figure out __declspec() for extern PyHash_FuncDef. - */ -#define Py_HASH_EXTERNAL 0 -#define Py_HASH_SIPHASH24 1 -#define Py_HASH_FNV 2 -#define Py_HASH_SIPHASH13 3 - -#ifndef Py_HASH_ALGORITHM -# ifndef HAVE_ALIGNED_REQUIRED -# define Py_HASH_ALGORITHM Py_HASH_SIPHASH13 -# else -# define Py_HASH_ALGORITHM Py_HASH_FNV -# endif /* uint64_t && uint32_t && aligned */ -#endif /* Py_HASH_ALGORITHM */ - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_HASH_H -# include "cpython/pyhash.h" -# undef Py_CPYTHON_HASH_H -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_HASH_H diff --git a/Python314_4_x86_Template/include/pylifecycle.h b/Python314_4_x86_Template/include/pylifecycle.h deleted file mode 100644 index de1bcb1d2..000000000 --- a/Python314_4_x86_Template/include/pylifecycle.h +++ /dev/null @@ -1,80 +0,0 @@ - -/* Interfaces to configure, query, create & destroy the Python runtime */ - -#ifndef Py_PYLIFECYCLE_H -#define Py_PYLIFECYCLE_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* Initialization and finalization */ -PyAPI_FUNC(void) Py_Initialize(void); -PyAPI_FUNC(void) Py_InitializeEx(int); -PyAPI_FUNC(void) Py_Finalize(void); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_FUNC(int) Py_FinalizeEx(void); -#endif -PyAPI_FUNC(int) Py_IsInitialized(void); - -/* Subinterpreter support */ -PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); -PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); - - -/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level - * exit functions. - */ -PyAPI_FUNC(int) Py_AtExit(void (*func)(void)); - -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_BytesMain(int argc, char **argv); - -/* In pathconfig.c */ -Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *); -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetProgramName(void); - -Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *); -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void); - -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void); -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); -Py_DEPRECATED(3.13) PyAPI_FUNC(wchar_t *) Py_GetPath(void); -#ifdef MS_WINDOWS -int _Py_CheckPython3(void); -#endif - -/* In their own files */ -PyAPI_FUNC(const char *) Py_GetVersion(void); -PyAPI_FUNC(const char *) Py_GetPlatform(void); -PyAPI_FUNC(const char *) Py_GetCopyright(void); -PyAPI_FUNC(const char *) Py_GetCompiler(void); -PyAPI_FUNC(const char *) Py_GetBuildInfo(void); - -/* Signals */ -typedef void (*PyOS_sighandler_t)(int); -PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int); -PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030B0000 -PyAPI_DATA(const unsigned long) Py_Version; -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000 -PyAPI_FUNC(int) Py_IsFinalizing(void); -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYLIFECYCLE_H -# include "cpython/pylifecycle.h" -# undef Py_CPYTHON_PYLIFECYCLE_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYLIFECYCLE_H */ diff --git a/Python314_4_x86_Template/include/pymacconfig.h b/Python314_4_x86_Template/include/pymacconfig.h deleted file mode 100644 index 615abe103..000000000 --- a/Python314_4_x86_Template/include/pymacconfig.h +++ /dev/null @@ -1,91 +0,0 @@ -// This file moves some of the autoconf magic to compile-time when building on -// macOS. This is needed for building 4-way universal binaries and for 64-bit -// universal binaries because the values redefined below aren't configure-time -// constant but only compile-time constant in these scenarios. - -#ifndef PY_MACCONFIG_H -#define PY_MACCONFIG_H -#ifdef __APPLE__ - -#undef ALIGNOF_MAX_ALIGN_T -#undef SIZEOF_LONG -#undef SIZEOF_LONG_DOUBLE -#undef SIZEOF_PTHREAD_T -#undef SIZEOF_SIZE_T -#undef SIZEOF_TIME_T -#undef SIZEOF_VOID_P -#undef SIZEOF__BOOL -#undef SIZEOF_UINTPTR_T -#undef SIZEOF_PTHREAD_T -#undef WORDS_BIGENDIAN -#undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 -#undef DOUBLE_IS_BIG_ENDIAN_IEEE754 -#undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754 -#undef HAVE_GCC_ASM_FOR_X87 -#undef HAVE_GCC_ASM_FOR_X64 - -#undef VA_LIST_IS_ARRAY -#if defined(__LP64__) && defined(__x86_64__) -# define VA_LIST_IS_ARRAY 1 -#endif - -#undef HAVE_LARGEFILE_SUPPORT -#ifndef __LP64__ -# define HAVE_LARGEFILE_SUPPORT 1 -#endif - -#undef SIZEOF_LONG -#ifdef __LP64__ -# define SIZEOF__BOOL 1 -# define SIZEOF__BOOL 1 -# define SIZEOF_LONG 8 -# define SIZEOF_PTHREAD_T 8 -# define SIZEOF_SIZE_T 8 -# define SIZEOF_TIME_T 8 -# define SIZEOF_VOID_P 8 -# define SIZEOF_UINTPTR_T 8 -# define SIZEOF_PTHREAD_T 8 -#else -# ifdef __ppc__ -# define SIZEOF__BOOL 4 -# else -# define SIZEOF__BOOL 1 -# endif -# define SIZEOF_LONG 4 -# define SIZEOF_PTHREAD_T 4 -# define SIZEOF_SIZE_T 4 -# define SIZEOF_TIME_T 4 -# define SIZEOF_VOID_P 4 -# define SIZEOF_UINTPTR_T 4 -# define SIZEOF_PTHREAD_T 4 -#endif - -// macOS 10.4 (the first release to support 64-bit code -// at all) only supports 64-bit in the UNIX layer. -// Therefore suppress the toolbox-glue in 64-bit mode. -// -// In 64-bit mode setpgrp always has no arguments, in 32-bit -// mode that depends on the compilation environment -#if defined(__LP64__) -# undef SETPGRP_HAVE_ARG -#endif - -#ifdef __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# define DOUBLE_IS_BIG_ENDIAN_IEEE754 -#else -# define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 -#endif - -#if defined(__i386__) || defined(__x86_64__) -# define HAVE_GCC_ASM_FOR_X87 -# define ALIGNOF_MAX_ALIGN_T 16 -# define HAVE_GCC_ASM_FOR_X64 1 -# define SIZEOF_LONG_DOUBLE 16 -#else -# define ALIGNOF_MAX_ALIGN_T 8 -# define SIZEOF_LONG_DOUBLE 8 -#endif - -#endif // __APPLE__ -#endif // !PY_MACCONFIG_H diff --git a/Python314_4_x86_Template/include/pymacro.h b/Python314_4_x86_Template/include/pymacro.h deleted file mode 100644 index 1af057ad7..000000000 --- a/Python314_4_x86_Template/include/pymacro.h +++ /dev/null @@ -1,249 +0,0 @@ -#ifndef Py_PYMACRO_H -#define Py_PYMACRO_H - -// gh-91782: On FreeBSD 12, if the _POSIX_C_SOURCE and _XOPEN_SOURCE macros are -// defined, <sys/cdefs.h> disables C11 support and <assert.h> does not define -// the static_assert() macro. -// https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255290 -// -// macOS <= 10.10 doesn't define static_assert in assert.h at all despite -// having C11 compiler support. -// -// static_assert is defined in glibc from version 2.16. Compiler support for -// the C11 _Static_assert keyword is in gcc >= 4.6. -// -// MSVC makes static_assert a keyword in C11-17, contrary to the standards. -// -// In C++11 and C2x, static_assert is a keyword, redefining is undefined -// behaviour. So only define if building as C, not C++ (if __cplusplus is -// not defined), and only for C11-17. -#if !defined(static_assert) && (defined(__GNUC__) || defined(__clang__)) \ - && !defined(__cplusplus) && defined(__STDC_VERSION__) \ - && __STDC_VERSION__ >= 201112L && __STDC_VERSION__ <= 201710L -# define static_assert _Static_assert -#endif - - -// _Py_ALIGN_AS: this compiler's spelling of `alignas` keyword, -// We currently use alignas for free-threaded builds only; additional compat -// checking would be great before we add it to the default build. -// Standards/compiler support: -// - `alignas` is a keyword in C23 and C++11. -// - `_Alignas` is a keyword in C11 -// - GCC & clang has __attribute__((aligned)) -// (use that for older standards in pedantic mode) -// - MSVC has __declspec(align) -// - `_Alignas` is common C compiler extension -// Older compilers may name it differently; to allow compilation on such -// unsupported platforms, we don't redefine _Py_ALIGN_AS if it's already -// defined. Note that defining it wrong (including defining it to nothing) will -// cause ABI incompatibilities. -#ifdef Py_GIL_DISABLED -# ifndef _Py_ALIGN_AS -# ifdef __cplusplus -# if __cplusplus >= 201103L -# define _Py_ALIGN_AS(V) alignas(V) -# elif defined(__GNUC__) || defined(__clang__) -# define _Py_ALIGN_AS(V) __attribute__((aligned(V))) -# elif defined(_MSC_VER) -# define _Py_ALIGN_AS(V) __declspec(align(V)) -# else -# define _Py_ALIGN_AS(V) alignas(V) -# endif -# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L -# define _Py_ALIGN_AS(V) alignas(V) -# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L -# define _Py_ALIGN_AS(V) _Alignas(V) -# elif (defined(__GNUC__) || defined(__clang__)) -# define _Py_ALIGN_AS(V) __attribute__((aligned(V))) -# elif defined(_MSC_VER) -# define _Py_ALIGN_AS(V) __declspec(align(V)) -# else -# define _Py_ALIGN_AS(V) _Alignas(V) -# endif -# endif -#endif - -/* Minimum value between x and y */ -#define Py_MIN(x, y) (((x) > (y)) ? (y) : (x)) - -/* Maximum value between x and y */ -#define Py_MAX(x, y) (((x) > (y)) ? (x) : (y)) - -/* Absolute value of the number x */ -#define Py_ABS(x) ((x) < 0 ? -(x) : (x)) -/* Safer implementation that avoids an undefined behavior for the minimal - value of the signed integer type if its absolute value is larger than - the maximal value of the signed integer type (in the two's complement - representations, which is common). - */ -#define _Py_ABS_CAST(T, x) ((x) >= 0 ? ((T) (x)) : ((T) (((T) -((x) + 1)) + 1u))) - -#define _Py_XSTRINGIFY(x) #x - -/* Convert the argument to a string. For example, Py_STRINGIFY(123) is replaced - with "123" by the preprocessor. Defines are also replaced by their value. - For example Py_STRINGIFY(__LINE__) is replaced by the line number, not - by "__LINE__". */ -#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x) - -/* Get the size of a structure member in bytes */ -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) - -/* Argument must be a char or an int in [-128, 127] or [0, 255]. */ -#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff)) - -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__cplusplus) && !defined(_MSC_VER)) -# define Py_BUILD_ASSERT_EXPR(cond) \ - ((void)sizeof(struct { int dummy; _Static_assert(cond, #cond); }), \ - 0) -#else - /* Assert a build-time dependency, as an expression. - * - * Your compile will fail if the condition isn't true, or can't be evaluated - * by the compiler. This can be used in an expression: its value is 0. - * - * Example: - * - * #define foo_to_char(foo) \ - * ((char *)(foo) \ - * + Py_BUILD_ASSERT_EXPR(offsetof(struct foo, string) == 0)) - * - * Written by Rusty Russell, public domain, http://ccodearchive.net/ - */ -# define Py_BUILD_ASSERT_EXPR(cond) \ - (sizeof(char [1 - 2*!(cond)]) - 1) -#endif - -#if ((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \ - || (defined(__cplusplus) && __cplusplus >= 201103L)) - // Use static_assert() on C11 and newer -# define Py_BUILD_ASSERT(cond) \ - do { \ - static_assert((cond), #cond); \ - } while (0) -#else -# define Py_BUILD_ASSERT(cond) \ - do { \ - (void)Py_BUILD_ASSERT_EXPR(cond); \ - } while(0) -#endif - -/* Get the number of elements in a visible array - - This does not work on pointers, or arrays declared as [], or function - parameters. With correct compiler support, such usage will cause a build - error (see Py_BUILD_ASSERT_EXPR). - - Written by Rusty Russell, public domain, http://ccodearchive.net/ - - Requires at GCC 3.1+ */ -#if (defined(__GNUC__) && !defined(__STRICT_ANSI__) && \ - (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ >= 4))) -/* Two gcc extensions. - &a[0] degrades to a pointer: a different type from an array */ -#define Py_ARRAY_LENGTH(array) \ - (sizeof(array) / sizeof((array)[0]) \ - + Py_BUILD_ASSERT_EXPR(!__builtin_types_compatible_p(typeof(array), \ - typeof(&(array)[0])))) -#else -#define Py_ARRAY_LENGTH(array) \ - (sizeof(array) / sizeof((array)[0])) -#endif - - -/* Define macros for inline documentation. */ -#define PyDoc_VAR(name) static const char name[] -#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) -#ifdef WITH_DOC_STRINGS -#define PyDoc_STR(str) str -#else -#define PyDoc_STR(str) "" -#endif - -/* Below "a" is a power of 2. */ -/* Round down size "n" to be a multiple of "a". */ -#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1)) -/* Round up size "n" to be a multiple of "a". */ -#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \ - (size_t)((a) - 1)) & ~(size_t)((a) - 1)) -/* Round pointer "p" down to the closest "a"-aligned address <= "p". */ -#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1))) -/* Round pointer "p" up to the closest "a"-aligned address >= "p". */ -#define _Py_ALIGN_UP(p, a) ((void *)(((uintptr_t)(p) + \ - (uintptr_t)((a) - 1)) & ~(uintptr_t)((a) - 1))) -/* Check if pointer "p" is aligned to "a"-bytes boundary. */ -#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1))) - -/* Use this for unused arguments in a function definition to silence compiler - * warnings. Example: - * - * int func(int a, int Py_UNUSED(b)) { return a; } - */ -#if defined(__GNUC__) || defined(__clang__) -# define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) -#elif defined(_MSC_VER) - // Disable warning C4100: unreferenced formal parameter, - // declare the parameter, - // restore old compiler warnings. -# define Py_UNUSED(name) \ - __pragma(warning(push)) \ - __pragma(warning(suppress: 4100)) \ - _unused_ ## name \ - __pragma(warning(pop)) -#else -# define Py_UNUSED(name) _unused_ ## name -#endif - -#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 - -#define _Py_CONTAINER_OF(ptr, type, member) \ - (type*)((char*)ptr - offsetof(type, member)) - -// Prevent using an expression as a l-value. -// For example, "int x; _Py_RVALUE(x) = 1;" fails with a compiler error. -#define _Py_RVALUE(EXPR) ((void)0, (EXPR)) - -// Return non-zero if the type is signed, return zero if it's unsigned. -// Use "<= 0" rather than "< 0" to prevent the compiler warning: -// "comparison of unsigned expression in '< 0' is always false". -#define _Py_IS_TYPE_SIGNED(type) ((type)(-1) <= 0) - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030E0000 // 3.14 -// Version helpers. These are primarily macros, but have exported equivalents. -PyAPI_FUNC(uint32_t) Py_PACK_FULL_VERSION(int x, int y, int z, int level, int serial); -PyAPI_FUNC(uint32_t) Py_PACK_VERSION(int x, int y); -#define Py_PACK_FULL_VERSION _Py_PACK_FULL_VERSION -#define Py_PACK_VERSION(X, Y) Py_PACK_FULL_VERSION(X, Y, 0, 0, 0) -#endif // Py_LIMITED_API < 3.14 - - -#endif /* Py_PYMACRO_H */ diff --git a/Python314_4_x86_Template/include/pymath.h b/Python314_4_x86_Template/include/pymath.h deleted file mode 100644 index 0ead1f956..000000000 --- a/Python314_4_x86_Template/include/pymath.h +++ /dev/null @@ -1,65 +0,0 @@ -// Symbols and macros to supply platform-independent interfaces to mathematical -// functions and constants. - -#ifndef Py_PYMATH_H -#define Py_PYMATH_H - -/* High precision definition of pi and e (Euler) - * The values are taken from libc6's math.h. - */ -#ifndef Py_MATH_PIl -#define Py_MATH_PIl 3.1415926535897932384626433832795029L -#endif -#ifndef Py_MATH_PI -#define Py_MATH_PI 3.14159265358979323846 -#endif - -#ifndef Py_MATH_El -#define Py_MATH_El 2.7182818284590452353602874713526625L -#endif - -#ifndef Py_MATH_E -#define Py_MATH_E 2.7182818284590452354 -#endif - -/* Tau (2pi) to 40 digits, taken from tauday.com/tau-digits. */ -#ifndef Py_MATH_TAU -#define Py_MATH_TAU 6.2831853071795864769252867665590057683943L -#endif - -// Py_IS_NAN(X) -// Return 1 if float or double arg is a NaN, else 0. -// Soft deprecated since Python 3.14, use isnan() instead. -#define Py_IS_NAN(X) isnan(X) - -// Py_IS_INFINITY(X) -// Return 1 if float or double arg is an infinity, else 0. -// Soft deprecated since Python 3.14, use isinf() instead. -#define Py_IS_INFINITY(X) isinf(X) - -// Py_IS_FINITE(X) -// Return 1 if float or double arg is neither infinite nor NAN, else 0. -// Soft deprecated since Python 3.14, use isfinite() instead. -#define Py_IS_FINITE(X) isfinite(X) - -// Py_INFINITY: Value that evaluates to a positive double infinity. -#ifndef Py_INFINITY -# define Py_INFINITY ((double)INFINITY) -#endif - -/* Py_HUGE_VAL should always be the same as Py_INFINITY. But historically - * this was not reliable and Python did not require IEEE floats and C99 - * conformity. The macro was soft deprecated in Python 3.14, use Py_INFINITY instead. - */ -#ifndef Py_HUGE_VAL -# define Py_HUGE_VAL HUGE_VAL -#endif - -/* Py_NAN: Value that evaluates to a quiet Not-a-Number (NaN). The sign is - * undefined and normally not relevant, but e.g. fixed for float("nan"). - */ -#if !defined(Py_NAN) -# define Py_NAN ((double)NAN) -#endif - -#endif /* Py_PYMATH_H */ diff --git a/Python314_4_x86_Template/include/pymem.h b/Python314_4_x86_Template/include/pymem.h deleted file mode 100644 index a80da99e1..000000000 --- a/Python314_4_x86_Template/include/pymem.h +++ /dev/null @@ -1,110 +0,0 @@ -// The PyMem_ family: low-level memory allocation interfaces. -// See objimpl.h for the PyObject_ memory family. - -#ifndef Py_PYMEM_H -#define Py_PYMEM_H -#ifdef __cplusplus -extern "C" { -#endif - -/* BEWARE: - - Each interface exports both functions and macros. Extension modules should - use the functions, to ensure binary compatibility across Python versions. - Because the Python implementation is free to change internal details, and - the macros may (or may not) expose details for speed, if you do use the - macros you must recompile your extensions with each Python release. - - Never mix calls to PyMem_ with calls to the platform malloc/realloc/ - calloc/free. For example, on Windows different DLLs may end up using - different heaps, and if you use PyMem_Malloc you'll get the memory from the - heap used by the Python DLL; it could be a disaster if you free()'ed that - directly in your own extension. Using PyMem_Free instead ensures Python - can return the memory to the proper heap. As another example, in - a debug build (Py_DEBUG macro), Python wraps all calls to all PyMem_ and - PyObject_ memory functions in special debugging wrappers that add additional - debugging info to dynamic memory blocks. The system routines have no idea - what to do with that stuff, and the Python wrappers have no idea what to do - with raw blocks obtained directly by the system routines then. - - The GIL must be held when using these APIs. -*/ - -/* - * Raw memory interface - * ==================== - */ - -/* Functions - - Functions supplying platform-independent semantics for malloc/realloc/ - free. These functions make sure that allocating 0 bytes returns a distinct - non-NULL pointer (whenever possible -- if we're flat out of memory, NULL - may be returned), even if the platform malloc and realloc don't. - Returned pointers must be checked for NULL explicitly. No action is - performed on failure (no exception is set, no warning is printed, etc). -*/ - -PyAPI_FUNC(void *) PyMem_Malloc(size_t size); -PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize); -PyAPI_FUNC(void *) PyMem_Realloc(void *ptr, size_t new_size); -PyAPI_FUNC(void) PyMem_Free(void *ptr); - -/* - * Type-oriented memory interface - * ============================== - * - * Allocate memory for n objects of the given type. Returns a new pointer - * or NULL if the request was too large or memory allocation failed. Use - * these macros rather than doing the multiplication yourself so that proper - * overflow checking is always done. - */ - -#define PyMem_New(type, n) \ - ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ - ( (type *) PyMem_Malloc((n) * sizeof(type)) ) ) - -/* - * The value of (p) is always clobbered by this macro regardless of success. - * The caller MUST check if (p) is NULL afterwards and deal with the memory - * error if so. This means the original value of (p) MUST be saved for the - * caller's memory error handler to not lose track of it. - */ -#define PyMem_Resize(p, type, n) \ - ( (p) = ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \ - (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) - - -// Deprecated aliases only kept for backward compatibility. -// PyMem_Del and PyMem_DEL are defined with no parameter to be able to use -// them as function pointers (ex: dealloc = PyMem_Del). -#define PyMem_MALLOC(n) PyMem_Malloc((n)) -#define PyMem_NEW(type, n) PyMem_New(type, (n)) -#define PyMem_REALLOC(p, n) PyMem_Realloc((p), (n)) -#define PyMem_RESIZE(p, type, n) PyMem_Resize((p), type, (n)) -#define PyMem_FREE(p) PyMem_Free((p)) -#define PyMem_Del(p) PyMem_Free((p)) -#define PyMem_DEL(p) PyMem_Free((p)) - - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 -// Memory allocator which doesn't require the GIL to be held. -// Usually, it's just a thin wrapper to functions of the standard C library: -// malloc(), calloc(), realloc() and free(). The difference is that -// tracemalloc can track these memory allocations. -PyAPI_FUNC(void *) PyMem_RawMalloc(size_t size); -PyAPI_FUNC(void *) PyMem_RawCalloc(size_t nelem, size_t elsize); -PyAPI_FUNC(void *) PyMem_RawRealloc(void *ptr, size_t new_size); -PyAPI_FUNC(void) PyMem_RawFree(void *ptr); -#endif - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYMEM_H -# include "cpython/pymem.h" -# undef Py_CPYTHON_PYMEM_H -#endif - -#ifdef __cplusplus -} -#endif -#endif // !Py_PYMEM_H diff --git a/Python314_4_x86_Template/include/pyport.h b/Python314_4_x86_Template/include/pyport.h deleted file mode 100644 index 2c8567f25..000000000 --- a/Python314_4_x86_Template/include/pyport.h +++ /dev/null @@ -1,710 +0,0 @@ -#ifndef Py_PYPORT_H -#define Py_PYPORT_H - -#ifndef UCHAR_MAX -# error "<limits.h> header must define UCHAR_MAX" -#endif -#if UCHAR_MAX != 255 -# error "Python's source code assumes C's unsigned char is an 8-bit type" -#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 - -// Preprocessor check for a compiler __attribute__. Always return 0 -// if __has_attribute() macro is not defined. -#ifdef __has_attribute -# define _Py__has_attribute(x) __has_attribute(x) -#else -# define _Py__has_attribute(x) 0 -#endif - -// Macro to use C++ static_cast<> in the Python C API. -#ifdef __cplusplus -# define _Py_STATIC_CAST(type, expr) static_cast<type>(expr) -#else -# define _Py_STATIC_CAST(type, expr) ((type)(expr)) -#endif -// Macro to use the more powerful/dangerous C-style cast even in C++. -#define _Py_CAST(type, expr) ((type)(expr)) - -// Cast a function to another function type T. -// -// The macro first casts the function to the "void func(void)" type -// to prevent compiler warnings. -// -// Note that using this cast only prevents the compiler from emitting -// warnings, but does not prevent an undefined behavior at runtime if -// the original function signature is not respected. -#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func))) - -// Static inline functions should use _Py_NULL rather than using directly NULL -// to prevent C++ compiler warnings. On C23 and newer and on C++11 and newer, -// _Py_NULL is defined as nullptr. -#if !defined(_MSC_VER) && \ - ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) \ - || (defined(__cplusplus) && __cplusplus >= 201103)) -# define _Py_NULL nullptr -#else -# define _Py_NULL NULL -#endif - - -/* Defines to build Python and its standard library: - * - * - Py_BUILD_CORE: Build Python core. Give access to Python internals, but - * should not be used by third-party modules. - * - Py_BUILD_CORE_BUILTIN: Build a Python stdlib module as a built-in module. - * - Py_BUILD_CORE_MODULE: Build a Python stdlib module as a dynamic library. - * - * Py_BUILD_CORE_BUILTIN and Py_BUILD_CORE_MODULE imply Py_BUILD_CORE. - * - * On Windows, Py_BUILD_CORE_MODULE exports "PyInit_xxx" symbol, whereas - * Py_BUILD_CORE_BUILTIN does not. - */ -#if defined(Py_BUILD_CORE_BUILTIN) && !defined(Py_BUILD_CORE) -# define Py_BUILD_CORE -#endif -#if defined(Py_BUILD_CORE_MODULE) && !defined(Py_BUILD_CORE) -# define Py_BUILD_CORE -#endif - - -/************************************************************************** -Symbols and macros to supply platform-independent interfaces to basic -C language & library operations whose spellings vary across platforms. - -Please try to make documentation here as clear as possible: by definition, -the stuff here is trying to illuminate C's darkest corners. - -Config #defines referenced here: - -SIGNED_RIGHT_SHIFT_ZERO_FILLS -Meaning: To be defined iff i>>j does not extend the sign bit when i is a - signed integral type and i < 0. -Used in: Py_ARITHMETIC_RIGHT_SHIFT - -Py_DEBUG -Meaning: Extra checks compiled in for debug mode. -Used in: Py_SAFE_DOWNCAST - -**************************************************************************/ - -/* typedefs for some C9X-defined synonyms for integral types. - * - * The names in Python are exactly the same as the C9X names, except with a - * Py_ prefix. Until C9X is universally implemented, this is the only way - * to ensure that Python gets reliable names that don't conflict with names - * in non-Python code that are playing their own tricks to define the C9X - * names. - * - * NOTE: don't go nuts here! Python has no use for *most* of the C9X - * integral synonyms. Only define the ones we actually need. - */ - -/* long long is required. Ensure HAVE_LONG_LONG is defined for compatibility. */ -#ifndef HAVE_LONG_LONG -#define HAVE_LONG_LONG 1 -#endif -#ifndef PY_LONG_LONG -#define PY_LONG_LONG long long -/* If LLONG_MAX is defined in limits.h, use that. */ -#define PY_LLONG_MIN LLONG_MIN -#define PY_LLONG_MAX LLONG_MAX -#define PY_ULLONG_MAX ULLONG_MAX -#endif - -#define PY_UINT32_T uint32_t -#define PY_UINT64_T uint64_t - -/* Signed variants of the above */ -#define PY_INT32_T int32_t -#define PY_INT64_T int64_t - -/* PYLONG_BITS_IN_DIGIT describes the number of bits per "digit" (limb) in the - * PyLongObject implementation (longintrepr.h). It's currently either 30 or 15, - * defaulting to 30. The 15-bit digit option may be removed in the future. - */ -#ifndef PYLONG_BITS_IN_DIGIT -#define PYLONG_BITS_IN_DIGIT 30 -#endif - -/* uintptr_t is the C9X name for an unsigned integral type such that a - * legitimate void* can be cast to uintptr_t and then back to void* again - * without loss of information. Similarly for intptr_t, wrt a signed - * integral type. - */ -typedef uintptr_t Py_uintptr_t; -typedef intptr_t Py_intptr_t; - -/* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) == - * sizeof(size_t). C99 doesn't define such a thing directly (size_t is an - * unsigned integral type). See PEP 353 for details. - * PY_SSIZE_T_MAX is the largest positive value of type Py_ssize_t. - */ -#ifdef HAVE_PY_SSIZE_T - -#elif HAVE_SSIZE_T -typedef ssize_t Py_ssize_t; -# define PY_SSIZE_T_MAX SSIZE_MAX -#elif SIZEOF_VOID_P == SIZEOF_SIZE_T -typedef Py_intptr_t Py_ssize_t; -# define PY_SSIZE_T_MAX INTPTR_MAX -#else -# error "Python needs a typedef for Py_ssize_t in pyport.h." -#endif - -/* Smallest negative value of type Py_ssize_t. */ -#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) - -/* Py_hash_t is the same size as a pointer. */ -#define SIZEOF_PY_HASH_T SIZEOF_SIZE_T -typedef Py_ssize_t Py_hash_t; -/* Py_uhash_t is the unsigned equivalent needed to calculate numeric hash. */ -#define SIZEOF_PY_UHASH_T SIZEOF_SIZE_T -typedef size_t Py_uhash_t; - -/* Now PY_SSIZE_T_CLEAN is mandatory. This is just for backward compatibility. */ -typedef Py_ssize_t Py_ssize_clean_t; - -/* Largest possible value of size_t. */ -#define PY_SIZE_MAX SIZE_MAX - -/* Macro kept for backward compatibility: use directly "z" in new code. - * - * PY_FORMAT_SIZE_T is a modifier for use in a printf format to convert an - * argument with the width of a size_t or Py_ssize_t: "z" (C99). - */ -#ifndef PY_FORMAT_SIZE_T -# define PY_FORMAT_SIZE_T "z" -#endif - -/* Py_LOCAL can be used instead of static to get the fastest possible calling - * convention for functions that are local to a given module. - * - * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining, - * for platforms that support that. - * - * NOTE: You can only use this for functions that are entirely local to a - * module; functions that are exported via method tables, callbacks, etc, - * should keep using static. - */ - -#if defined(_MSC_VER) - /* ignore warnings if the compiler decides not to inline a function */ -# pragma warning(disable: 4710) - /* fastest possible local call under MSVC */ -# define Py_LOCAL(type) static type __fastcall -# define Py_LOCAL_INLINE(type) static __inline type __fastcall -#else -# define Py_LOCAL(type) static type -# define Py_LOCAL_INLINE(type) static inline type -#endif - -// Soft deprecated since Python 3.14, use memcpy() instead. -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_MEMCPY memcpy -#endif - -#ifdef __cplusplus -/* Move this down here since some C++ #include's don't like to be included - inside an extern "C" */ -extern "C" { -#endif - - -/* Py_ARITHMETIC_RIGHT_SHIFT - * C doesn't define whether a right-shift of a signed integer sign-extends - * or zero-fills. Here a macro to force sign extension: - * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) - * Return I >> J, forcing sign extension. Arithmetically, return the - * floor of I/2**J. - * Requirements: - * I should have signed integer type. In the terminology of C99, this can - * be either one of the five standard signed integer types (signed char, - * short, int, long, long long) or an extended signed integer type. - * J is an integer >= 0 and strictly less than the number of bits in the - * type of I (because C doesn't define what happens for J outside that - * range either). - * TYPE used to specify the type of I, but is now ignored. It's been left - * in for backwards compatibility with versions <= 2.6 or 3.0. - * Caution: - * I may be evaluated more than once. - */ -#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS -#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ - ((I) < 0 ? -1-((-1-(I)) >> (J)) : (I) >> (J)) -#else -#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) -#endif - -/* Py_FORCE_EXPANSION(X) - * "Simply" returns its argument. However, macro expansions within the - * argument are evaluated. This unfortunate trickery is needed to get - * token-pasting to work as desired in some cases. - */ -#define Py_FORCE_EXPANSION(X) X - -/* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) - * Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this - * assert-fails if any information is lost. - * Caution: - * VALUE may be evaluated more than once. - */ -#ifdef Py_DEBUG -# define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \ - (assert(_Py_STATIC_CAST(WIDE, _Py_STATIC_CAST(NARROW, (VALUE))) == (VALUE)), \ - _Py_STATIC_CAST(NARROW, (VALUE))) -#else -# define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE)) -#endif - - -/* Py_DEPRECATED(version) - * Declare a variable, type, or function deprecated. - * The macro must be placed before the declaration. - * Usage: - * Py_DEPRECATED(3.3) extern int old_var; - * Py_DEPRECATED(3.4) typedef int T1; - * Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void); - */ -#if defined(__GNUC__) \ - && ((__GNUC__ >= 4) || (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) -#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) -#elif defined(_MSC_VER) -#define Py_DEPRECATED(VERSION) __declspec(deprecated( \ - "deprecated in " #VERSION)) -#else -#define Py_DEPRECATED(VERSION_UNUSED) -#endif - -// _Py_DEPRECATED_EXTERNALLY(version) -// Deprecated outside CPython core. -#ifdef Py_BUILD_CORE -#define _Py_DEPRECATED_EXTERNALLY(VERSION_UNUSED) -#else -#define _Py_DEPRECATED_EXTERNALLY(version) Py_DEPRECATED(version) -#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 - * function is a hot spot of the compiled program. The function is optimized - * more aggressively and on many target it is placed into special subsection of - * the text section so all hot functions appears close together improving - * locality. - * - * Usage: - * int _Py_HOT_FUNCTION x(void) { return 3; } - * - * Issue #28618: This attribute must not be abused, otherwise it can have a - * negative effect on performance. Only the functions were Python spend most of - * its time must use it. Use a profiler when running performance benchmark - * suite to find these functions. - */ -#if defined(__GNUC__) \ - && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) -#define _Py_HOT_FUNCTION __attribute__((hot)) -#else -#define _Py_HOT_FUNCTION -#endif - -// Ask the compiler to always inline a static inline function. The compiler can -// ignore it and decides to not inline the function. -// -// It can be used to inline performance critical static inline functions when -// building Python in debug mode with function inlining disabled. For example, -// MSC disables function inlining when building in debug mode. -// -// Marking blindly a static inline function with Py_ALWAYS_INLINE can result in -// worse performances (due to increased code size for example). The compiler is -// usually smarter than the developer for the cost/benefit analysis. -// -// If Python is built in debug mode (if the Py_DEBUG macro is defined), the -// Py_ALWAYS_INLINE macro does nothing. -// -// It must be specified before the function return type. Usage: -// -// static inline Py_ALWAYS_INLINE int random(void) { return 4; } -#if defined(Py_DEBUG) - // If Python is built in debug mode, usually compiler optimizations are - // disabled. In this case, Py_ALWAYS_INLINE can increase a lot the stack - // memory usage. For example, forcing inlining using gcc -O0 increases the - // stack usage from 6 KB to 15 KB per Python function call. -# define Py_ALWAYS_INLINE -#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) -# define Py_ALWAYS_INLINE __attribute__((always_inline)) -#elif defined(_MSC_VER) -# define Py_ALWAYS_INLINE __forceinline -#else -# define Py_ALWAYS_INLINE -#endif - -// Py_NO_INLINE -// Disable inlining on a function. For example, it reduces the C stack -// consumption: useful on LTO+PGO builds which heavily inline code (see -// bpo-33720). -// -// Usage: -// -// Py_NO_INLINE static int random(void) { return 4; } -#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) -# define Py_NO_INLINE __attribute__ ((noinline)) -#elif defined(_MSC_VER) -# define Py_NO_INLINE __declspec(noinline) -#else -# define Py_NO_INLINE -#endif - -#include "exports.h" - -#ifdef Py_LIMITED_API - // The internal C API must not be used with the limited C API: make sure - // that Py_BUILD_CORE macro is not defined in this case. These 3 macros are - // used by exports.h, so only undefine them afterwards. -# undef Py_BUILD_CORE -# undef Py_BUILD_CORE_BUILTIN -# undef Py_BUILD_CORE_MODULE -#endif - -/* limits.h constants that may be missing */ - -#ifndef INT_MAX -#define INT_MAX 2147483647 -#endif - -#ifndef LONG_MAX -#if SIZEOF_LONG == 4 -#define LONG_MAX 0X7FFFFFFFL -#elif SIZEOF_LONG == 8 -#define LONG_MAX 0X7FFFFFFFFFFFFFFFL -#else -#error "could not set LONG_MAX in pyport.h" -#endif -#endif - -#ifndef LONG_MIN -#define LONG_MIN (-LONG_MAX-1) -#endif - -#ifndef LONG_BIT -#define LONG_BIT (8 * SIZEOF_LONG) -#endif - -#if LONG_BIT != 8 * SIZEOF_LONG -/* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent - * 32-bit platforms using gcc. We try to catch that here at compile-time - * rather than waiting for integer multiplication to trigger bogus - * overflows. - */ -#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." -#endif - -#ifdef __cplusplus -} -#endif - -/* - * Hide GCC attributes from compilers that don't support them. - */ -#if (!defined(__GNUC__) || __GNUC__ < 2 || \ - (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) -#define Py_GCC_ATTRIBUTE(x) -#else -#define Py_GCC_ATTRIBUTE(x) __attribute__(x) -#endif - -/* - * Specify alignment on compilers that support it. - */ -#if defined(__GNUC__) && __GNUC__ >= 3 -#define Py_ALIGNED(x) __attribute__((aligned(x))) -#else -#define Py_ALIGNED(x) -#endif - -/* Eliminate end-of-loop code not reached warnings from SunPro C - * when using do{...}while(0) macros - */ -#ifdef __SUNPRO_C -#pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED) -#endif - -#ifndef Py_LL -#define Py_LL(x) x##LL -#endif - -#ifndef Py_ULL -#define Py_ULL(x) Py_LL(x##U) -#endif - -#define Py_VA_COPY va_copy - -/* - * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is - * detected by configure and defined in pyconfig.h. The code in pyconfig.h - * also takes care of Apple's universal builds. - */ - -#ifdef WORDS_BIGENDIAN -# define PY_BIG_ENDIAN 1 -# define PY_LITTLE_ENDIAN 0 -#else -# define PY_BIG_ENDIAN 0 -# define PY_LITTLE_ENDIAN 1 -#endif - -#ifdef __ANDROID__ - /* The Android langinfo.h header is not used. */ -# undef HAVE_LANGINFO_H -# undef CODESET -#endif - -/* Maximum value of the Windows DWORD type */ -#define PY_DWORD_MAX 4294967295U - -/* This macro used to tell whether Python was built with multithreading - * enabled. Now multithreading is always enabled, but keep the macro - * for compatibility. - */ -#ifndef WITH_THREAD -# define WITH_THREAD -#endif - -/* Some WebAssembly platforms do not provide a working pthread implementation. - * Thread support is stubbed and any attempt to create a new thread fails. - */ -#if (!defined(HAVE_PTHREAD_STUBS) && \ - (!defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__))) -# define Py_CAN_START_THREADS 1 -#endif - -#ifdef WITH_THREAD -# ifdef Py_BUILD_CORE -# ifdef HAVE_THREAD_LOCAL -# error "HAVE_THREAD_LOCAL is already defined" -# endif -# define HAVE_THREAD_LOCAL 1 -# ifdef thread_local -# define _Py_thread_local thread_local -# elif __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) -# define _Py_thread_local _Thread_local -# elif defined(_MSC_VER) /* AKA NT_THREADS */ -# define _Py_thread_local __declspec(thread) -# elif defined(__GNUC__) /* includes clang */ -# define _Py_thread_local __thread -# else - // fall back to the PyThread_tss_*() API, or ignore. -# undef HAVE_THREAD_LOCAL -# endif -# endif -#endif - -#if defined(__ANDROID__) || defined(__VXWORKS__) - // Use UTF-8 as the locale encoding, ignore the LC_CTYPE locale. - // See _Py_GetLocaleEncoding(), PyUnicode_DecodeLocale() - // and PyUnicode_EncodeLocale(). -# define _Py_FORCE_UTF8_LOCALE -#endif - -#if defined(_Py_FORCE_UTF8_LOCALE) || defined(__APPLE__) - // Use UTF-8 as the filesystem encoding. - // See PyUnicode_DecodeFSDefaultAndSize(), PyUnicode_EncodeFSDefault(), - // Py_DecodeLocale() and Py_EncodeLocale(). -# define _Py_FORCE_UTF8_FS_ENCODING -#endif - -/* Mark a function which cannot return. Example: - PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); - - XLC support is intentionally omitted due to bpo-40244 */ -#ifndef _Py_NO_RETURN -#if defined(__clang__) || \ - (defined(__GNUC__) && \ - ((__GNUC__ >= 3) || \ - (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))) -# define _Py_NO_RETURN __attribute__((__noreturn__)) -#elif defined(_MSC_VER) -# define _Py_NO_RETURN __declspec(noreturn) -#else -# define _Py_NO_RETURN -#endif -#endif - - -// _Py_TYPEOF(expr) gets the type of an expression. -// -// Example: _Py_TYPEOF(x) x_copy = (x); -// -// The macro is only defined if GCC or clang compiler is used. -#if defined(__GNUC__) || defined(__clang__) -# define _Py_TYPEOF(expr) __typeof__(expr) -#endif - - -/* 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 -# define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) -# endif -# endif -# if __has_feature(address_sanitizer) -# if !defined(_Py_ADDRESS_SANITIZER) -# define _Py_ADDRESS_SANITIZER -# define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -# endif -# endif -# if __has_feature(thread_sanitizer) -# if !defined(_Py_THREAD_SANITIZER) -# define _Py_THREAD_SANITIZER -# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) -# endif -# endif -#elif defined(__GNUC__) -# if defined(__SANITIZE_ADDRESS__) -# define _Py_ADDRESS_SANITIZER -# define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -# endif -# if defined(__SANITIZE_THREAD__) -# define _Py_THREAD_SANITIZER -# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) -# elif __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ >= 1) - // TSAN is supported since GCC 5.1, but __SANITIZE_THREAD__ macro - // is provided only since GCC 7. -# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) -# endif -#endif - -#ifndef _Py_NO_SANITIZE_ADDRESS -# define _Py_NO_SANITIZE_ADDRESS -#endif -#ifndef _Py_NO_SANITIZE_THREAD -# define _Py_NO_SANITIZE_THREAD -#endif -#ifndef _Py_NO_SANITIZE_MEMORY -# define _Py_NO_SANITIZE_MEMORY -#endif - -/* AIX has __bool__ redefined in it's system header file. */ -#if defined(_AIX) && defined(__bool__) -#undef __bool__ -#endif - -// Make sure we have maximum alignment, even if the current compiler -// does not support max_align_t. Note that: -// - Autoconf reports alignment of unknown types to 0. -// - 'long double' has maximum alignment on *most* platforms, -// looks like the best we can do for pre-C11 compilers. -// - The value is tested, see test_alignof_max_align_t -#if !defined(ALIGNOF_MAX_ALIGN_T) || ALIGNOF_MAX_ALIGN_T == 0 -# undef ALIGNOF_MAX_ALIGN_T -# define ALIGNOF_MAX_ALIGN_T _Alignof(long double) -#endif - -#ifndef PY_CXX_CONST -# ifdef __cplusplus -# define PY_CXX_CONST const -# else -# define PY_CXX_CONST -# endif -#endif - -#if defined(__sgi) && !defined(_SGI_MP_SOURCE) -# define _SGI_MP_SOURCE -#endif - -// Explicit fallthrough in switch case to avoid warnings -// with compiler flag -Wimplicit-fallthrough. -// -// Usage example: -// -// switch (value) { -// case 1: _Py_FALLTHROUGH; -// case 2: code; break; -// } -// -// __attribute__((fallthrough)) was introduced in GCC 7 and Clang 10 / -// Apple Clang 12.0. Earlier Clang versions support only the C++11 -// style fallthrough attribute, not the GCC extension syntax used here, -// and __has_attribute(fallthrough) evaluates to 1. -#if _Py__has_attribute(fallthrough) && (!defined(__clang__) || \ - (!defined(__apple_build_version__) && __clang_major__ >= 10) || \ - (defined(__apple_build_version__) && __clang_major__ >= 12)) -# define _Py_FALLTHROUGH __attribute__((fallthrough)) -#else -# define _Py_FALLTHROUGH do { } while (0) -#endif - - -// _Py_NO_SANITIZE_UNDEFINED(): Disable Undefined Behavior sanitizer (UBsan) -// on a function. -// -// Clang and GCC 9.0+ use __attribute__((no_sanitize("undefined"))). -// GCC 4.9+ uses __attribute__((no_sanitize_undefined)). -#if defined(__has_feature) -# if __has_feature(undefined_behavior_sanitizer) -# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined"))) -# endif -#endif -#if !defined(_Py_NO_SANITIZE_UNDEFINED) && defined(__GNUC__) \ - && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)) -# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize_undefined)) -#endif -#ifndef _Py_NO_SANITIZE_UNDEFINED -# define _Py_NO_SANITIZE_UNDEFINED -#endif - - -// _Py_NONSTRING: The nonstring variable attribute specifies that an object or -// member declaration with type array of char, signed char, or unsigned char, -// or pointer to such a type is intended to store character arrays that do not -// necessarily contain a terminating NUL. -// -// Usage: -// -// char name [8] _Py_NONSTRING; -#if _Py__has_attribute(nonstring) -# define _Py_NONSTRING __attribute__((nonstring)) -#else -# define _Py_NONSTRING -#endif - - -// Assume the stack grows down unless specified otherwise -#ifndef _Py_STACK_GROWS_DOWN -# define _Py_STACK_GROWS_DOWN 1 -#endif - - -#endif /* Py_PYPORT_H */ diff --git a/Python314_4_x86_Template/include/pystate.h b/Python314_4_x86_Template/include/pystate.h deleted file mode 100644 index 727b8fbff..000000000 --- a/Python314_4_x86_Template/include/pystate.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Thread and interpreter state structures and their interfaces */ - - -#ifndef Py_PYSTATE_H -#define Py_PYSTATE_H -#ifdef __cplusplus -extern "C" { -#endif - -/* This limitation is for performance and simplicity. If needed it can be -removed (with effort). */ -#define MAX_CO_EXTRA_USERS 255 - -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 *); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -/* New in 3.7 */ -PyAPI_FUNC(int64_t) PyInterpreterState_GetID(PyInterpreterState *); -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 - -/* State unique per thread */ - -/* New in 3.3 */ -PyAPI_FUNC(int) PyState_AddModule(PyObject*, PyModuleDef*); -PyAPI_FUNC(int) PyState_RemoveModule(PyModuleDef*); -#endif -PyAPI_FUNC(PyObject*) PyState_FindModule(PyModuleDef*); - -PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); -PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); -PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); - -/* Get the current thread state. - - When the current thread state is NULL, this issues a fatal error (so that - the caller needn't check for NULL). - - The caller must hold the GIL. - - See also PyThreadState_GetUnchecked() and _PyThreadState_GET(). */ -PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); - -// Alias to PyThreadState_Get() -#define PyThreadState_GET() PyThreadState_Get() - -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; - - -/* Ensure that the current thread is ready to call the Python - C API, regardless of the current state of Python, or of its - thread lock. This may be called as many times as desired - by a thread so long as each call is matched with a call to - PyGILState_Release(). In general, other thread-state APIs may - be used between _Ensure() and _Release() calls, so long as the - thread-state is restored to its previous state before the Release(). - For example, normal use of the Py_BEGIN_ALLOW_THREADS/ - Py_END_ALLOW_THREADS macros are acceptable. - - The return value is an opaque "handle" to the thread state when - PyGILState_Ensure() was called, and must be passed to - PyGILState_Release() to ensure Python is left in the same state. Even - though recursive calls are allowed, these handles can *not* be shared - - each unique call to PyGILState_Ensure must save the handle for its - call to PyGILState_Release. - - When the function returns, the current thread will hold the GIL. - - Failure is a fatal error. -*/ -PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void); - -/* Release any resources previously acquired. After this call, Python's - state will be the same as it was prior to the corresponding - PyGILState_Ensure() call (but generally this state will be unknown to - the caller, hence the use of the GILState API.) - - Every call to PyGILState_Ensure must be matched by a call to - PyGILState_Release on the same thread. -*/ -PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE); - -/* Helper/diagnostic function - get the current thread state for - this thread. May return NULL if no GILState API has been used - on the current thread. Note that the main thread always has such a - thread-state, even if no auto-thread-state call has been made - on the main thread. -*/ -PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void); - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYSTATE_H -# include "cpython/pystate.h" -# undef Py_CPYTHON_PYSTATE_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYSTATE_H */ diff --git a/Python314_4_x86_Template/include/pystats.h b/Python314_4_x86_Template/include/pystats.h deleted file mode 100644 index a515570d1..000000000 --- a/Python314_4_x86_Template/include/pystats.h +++ /dev/null @@ -1,28 +0,0 @@ -// Statistics on Python performance (public API). -// -// Define _Py_INCREF_STAT_INC() and _Py_DECREF_STAT_INC() used by Py_INCREF() -// and Py_DECREF(). -// -// See Include/cpython/pystats.h for the full API. - -#ifndef Py_PYSTATS_H -#define Py_PYSTATS_H -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(Py_STATS) && !defined(Py_LIMITED_API) -# define Py_CPYTHON_PYSTATS_H -# include "cpython/pystats.h" -# undef Py_CPYTHON_PYSTATS_H -#else -# define _Py_INCREF_STAT_INC() ((void)0) -# define _Py_DECREF_STAT_INC() ((void)0) -# define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0) -# define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0) -#endif // !Py_STATS - -#ifdef __cplusplus -} -#endif -#endif // !Py_PYSTATS_H diff --git a/Python314_4_x86_Template/include/pystrcmp.h b/Python314_4_x86_Template/include/pystrcmp.h deleted file mode 100644 index edb12397e..000000000 --- a/Python314_4_x86_Template/include/pystrcmp.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef Py_STRCMP_H -#define Py_STRCMP_H - -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(int) PyOS_mystrnicmp(const char *, const char *, Py_ssize_t); -PyAPI_FUNC(int) PyOS_mystricmp(const char *, const char *); - -#ifdef MS_WINDOWS -#define PyOS_strnicmp strnicmp -#define PyOS_stricmp stricmp -#else -#define PyOS_strnicmp PyOS_mystrnicmp -#define PyOS_stricmp PyOS_mystricmp -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* !Py_STRCMP_H */ diff --git a/Python314_4_x86_Template/include/pystrtod.h b/Python314_4_x86_Template/include/pystrtod.h deleted file mode 100644 index e83d245eb..000000000 --- a/Python314_4_x86_Template/include/pystrtod.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef Py_STRTOD_H -#define Py_STRTOD_H - -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_FUNC(double) PyOS_string_to_double(const char *str, - char **endptr, - PyObject *overflow_exception); - -/* The caller is responsible for calling PyMem_Free to free the buffer - that's is returned. */ -PyAPI_FUNC(char *) PyOS_double_to_string(double val, - char format_code, - int precision, - int flags, - int *type); - -/* PyOS_double_to_string's "flags" parameter can be set to 0 or more of: */ -#define Py_DTSF_SIGN 0x01 /* always add the sign */ -#define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */ -#define Py_DTSF_ALT 0x04 /* "alternate" formatting. it's format_code - specific */ -#define Py_DTSF_NO_NEG_0 0x08 /* negative zero result is coerced to 0 */ - -/* PyOS_double_to_string's "type", if non-NULL, will be set to one of: */ -#define Py_DTST_FINITE 0 -#define Py_DTST_INFINITE 1 -#define Py_DTST_NAN 2 - -#ifdef __cplusplus -} -#endif - -#endif /* !Py_STRTOD_H */ diff --git a/Python314_4_x86_Template/include/pythonrun.h b/Python314_4_x86_Template/include/pythonrun.h deleted file mode 100644 index 92b50aa80..000000000 --- a/Python314_4_x86_Template/include/pythonrun.h +++ /dev/null @@ -1,42 +0,0 @@ - -/* Interfaces to parse and execute pieces of python code */ - -#ifndef Py_PYTHONRUN_H -#define Py_PYTHONRUN_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(PyObject *) Py_CompileString(const char *, const char *, int); - -PyAPI_FUNC(void) PyErr_Print(void); -PyAPI_FUNC(void) PyErr_PrintEx(int); -PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000 -PyAPI_FUNC(void) PyErr_DisplayException(PyObject *); -#endif - - -/* Stuff with no proper home (yet) */ -PyAPI_DATA(int) (*PyOS_InputHook)(void); - -#if defined(WIN32) -# define USE_STACKCHECK -#endif -#ifdef USE_STACKCHECK -/* Check that we aren't overflowing our stack */ -PyAPI_FUNC(int) PyOS_CheckStack(void); -#endif - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYTHONRUN_H -# include "cpython/pythonrun.h" -# undef Py_CPYTHON_PYTHONRUN_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYTHONRUN_H */ diff --git a/Python314_4_x86_Template/include/pythread.h b/Python314_4_x86_Template/include/pythread.h deleted file mode 100644 index 82247daf8..000000000 --- a/Python314_4_x86_Template/include/pythread.h +++ /dev/null @@ -1,131 +0,0 @@ -#ifndef Py_PYTHREAD_H -#define Py_PYTHREAD_H - -typedef void *PyThread_type_lock; - -#ifdef __cplusplus -extern "C" { -#endif - -/* Return status codes for Python lock acquisition. Chosen for maximum - * backwards compatibility, ie failure -> 0, success -> 1. */ -typedef enum PyLockStatus { - PY_LOCK_FAILURE = 0, - PY_LOCK_ACQUIRED = 1, - PY_LOCK_INTR -} PyLockStatus; - -PyAPI_FUNC(void) PyThread_init_thread(void); -PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *); -/* Terminates the current thread. Considered unsafe. - * - * WARNING: This function is only safe to call if all functions in the full call - * stack are written to safely allow it. Additionally, the behavior is - * platform-dependent. This function should be avoided, and is no longer called - * by Python itself. It is retained only for compatibility with existing C - * extension code. - * - * With pthreads, calls `pthread_exit` causes some libcs (glibc?) to attempt to - * unwind the stack and call C++ destructors; if a `noexcept` function is - * reached, they may terminate the process. Others (macOS) do unwinding. - * - * On Windows, calls `_endthreadex` which kills the thread without calling C++ - * destructors. - * - * In either case there is a risk of invalid references remaining to data on the - * thread stack. - */ -Py_DEPRECATED(3.14) PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); - -PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void); - -#if (defined(__APPLE__) || defined(__linux__) || defined(_WIN32) \ - || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ - || defined(__OpenBSD__) || defined(__NetBSD__) \ - || defined(__DragonFly__) || defined(_AIX)) -#define PY_HAVE_THREAD_NATIVE_ID -PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void); -#endif - -PyAPI_FUNC(PyThread_type_lock) PyThread_allocate_lock(void); -PyAPI_FUNC(void) PyThread_free_lock(PyThread_type_lock); -PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); -#define WAIT_LOCK 1 -#define NOWAIT_LOCK 0 - -// PY_TIMEOUT_T is the integral type used to specify timeouts when waiting -// on a lock (see PyThread_acquire_lock_timed() below). -#define PY_TIMEOUT_T long long - - -/* If microseconds == 0, the call is non-blocking: it returns immediately - even when the lock can't be acquired. - If microseconds > 0, the call waits up to the specified duration. - If microseconds < 0, the call waits until success (or abnormal failure) - - If *microseconds* is greater than PY_TIMEOUT_MAX, clamp the timeout to - PY_TIMEOUT_MAX microseconds. - - If intr_flag is true and the acquire is interrupted by a signal, then the - call will return PY_LOCK_INTR. The caller may reattempt to acquire the - lock. -*/ -PyAPI_FUNC(PyLockStatus) PyThread_acquire_lock_timed(PyThread_type_lock, - PY_TIMEOUT_T microseconds, - int intr_flag); - -PyAPI_FUNC(void) PyThread_release_lock(PyThread_type_lock); - -PyAPI_FUNC(size_t) PyThread_get_stacksize(void); -PyAPI_FUNC(int) PyThread_set_stacksize(size_t); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject*) PyThread_GetInfo(void); -#endif - - -/* Thread Local Storage (TLS) API - TLS API is DEPRECATED. Use Thread Specific Storage (TSS) API. - - The existing TLS API has used int to represent TLS keys across all - platforms, but it is not POSIX-compliant. Therefore, the new TSS API uses - opaque data type to represent TSS keys to be compatible (see PEP 539). -*/ -Py_DEPRECATED(3.7) PyAPI_FUNC(int) PyThread_create_key(void); -Py_DEPRECATED(3.7) PyAPI_FUNC(void) PyThread_delete_key(int key); -Py_DEPRECATED(3.7) PyAPI_FUNC(int) PyThread_set_key_value(int key, - void *value); -Py_DEPRECATED(3.7) PyAPI_FUNC(void *) PyThread_get_key_value(int key); -Py_DEPRECATED(3.7) PyAPI_FUNC(void) PyThread_delete_key_value(int key); - -/* Cleanup after a fork */ -Py_DEPRECATED(3.7) PyAPI_FUNC(void) PyThread_ReInitTLS(void); - - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -/* New in 3.7 */ -/* Thread Specific Storage (TSS) API */ - -typedef struct _Py_tss_t Py_tss_t; /* opaque */ - -PyAPI_FUNC(Py_tss_t *) PyThread_tss_alloc(void); -PyAPI_FUNC(void) PyThread_tss_free(Py_tss_t *key); - -/* The parameter key must not be NULL. */ -PyAPI_FUNC(int) PyThread_tss_is_created(Py_tss_t *key); -PyAPI_FUNC(int) PyThread_tss_create(Py_tss_t *key); -PyAPI_FUNC(void) PyThread_tss_delete(Py_tss_t *key); -PyAPI_FUNC(int) PyThread_tss_set(Py_tss_t *key, void *value); -PyAPI_FUNC(void *) PyThread_tss_get(Py_tss_t *key); -#endif /* New in 3.7 */ - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_PYTHREAD_H -# include "cpython/pythread.h" -# undef Py_CPYTHON_PYTHREAD_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_PYTHREAD_H */ diff --git a/Python314_4_x86_Template/include/pytypedefs.h b/Python314_4_x86_Template/include/pytypedefs.h deleted file mode 100644 index e78ed56a3..000000000 --- a/Python314_4_x86_Template/include/pytypedefs.h +++ /dev/null @@ -1,30 +0,0 @@ -// Forward declarations of types of the Python C API. -// Declare them at the same place since redefining typedef is a C11 feature. -// Only use a forward declaration if there is an interdependency between two -// header files. - -#ifndef Py_PYTYPEDEFS_H -#define Py_PYTYPEDEFS_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PyModuleDef PyModuleDef; -typedef struct PyModuleDef_Slot PyModuleDef_Slot; -typedef struct PyMethodDef PyMethodDef; -typedef struct PyGetSetDef PyGetSetDef; -typedef struct PyMemberDef PyMemberDef; - -typedef struct _object PyObject; -typedef struct _longobject PyLongObject; -typedef struct _typeobject PyTypeObject; -typedef struct PyCodeObject PyCodeObject; -typedef struct _frame PyFrameObject; - -typedef struct _ts PyThreadState; -typedef struct _is PyInterpreterState; - -#ifdef __cplusplus -} -#endif -#endif // !Py_PYTYPEDEFS_H diff --git a/Python314_4_x86_Template/include/rangeobject.h b/Python314_4_x86_Template/include/rangeobject.h deleted file mode 100644 index d46ce7cd4..000000000 --- a/Python314_4_x86_Template/include/rangeobject.h +++ /dev/null @@ -1,27 +0,0 @@ - -/* Range object interface */ - -#ifndef Py_RANGEOBJECT_H -#define Py_RANGEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* -A range object represents an integer range. This is an immutable object; -a range cannot change its value after creation. - -Range objects behave like the corresponding tuple objects except that -they are represented by a start, stop, and step datamembers. -*/ - -PyAPI_DATA(PyTypeObject) PyRange_Type; -PyAPI_DATA(PyTypeObject) PyRangeIter_Type; -PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type; - -#define PyRange_Check(op) Py_IS_TYPE((op), &PyRange_Type) - -#ifdef __cplusplus -} -#endif -#endif /* !Py_RANGEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/refcount.h b/Python314_4_x86_Template/include/refcount.h deleted file mode 100644 index 1ef6b2186..000000000 --- a/Python314_4_x86_Template/include/refcount.h +++ /dev/null @@ -1,555 +0,0 @@ -#ifndef _Py_REFCOUNT_H -#define _Py_REFCOUNT_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* -Immortalization: - -The following indicates the immortalization strategy depending on the amount -of available bits in the reference count field. All strategies are backwards -compatible but the specific reference count value or immortalization check -might change depending on the specializations for the underlying system. - -Proper deallocation of immortal instances requires distinguishing between -statically allocated immortal instances vs those promoted by the runtime to be -immortal. The latter should be the only instances that require -cleanup during runtime finalization. -*/ - -#define _Py_STATICALLY_ALLOCATED_FLAG 4 -#define _Py_IMMORTAL_FLAGS 1 - -#if SIZEOF_VOID_P > 4 -/* -In 64+ bit systems, any object whose 32 bit reference count is >= 2**31 -will be treated as immortal. - -Using the lower 32 bits makes the value backwards compatible by allowing -C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely -increase and decrease the objects reference count. - -In order to offer sufficient resilience to C extensions using the stable ABI -compiled against 3.11 or earlier, we set the initial value near the -middle of the range (2**31, 2**32). That way the refcount can be -off by ~1 billion without affecting immortality. - -Reference count increases will use saturated arithmetic, taking advantage of -having all the lower 32 bits set, which will avoid the reference count to go -beyond the refcount limit. Immortality checks for reference count decreases will -be done by checking the bit sign flag in the lower 32 bits. - -To ensure that once an object becomes immortal, it remains immortal, the threshold -for omitting increfs is much higher than for omitting decrefs. Consequently, once -the refcount for an object exceeds _Py_IMMORTAL_MINIMUM_REFCNT it will gradually -increase over time until it reaches _Py_IMMORTAL_INITIAL_REFCNT. -*/ -#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30) -#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31) -#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS)) -#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48)) - -#else -/* -In 32 bit systems, an object will be treated as immortal if its reference -count equals or exceeds _Py_IMMORTAL_MINIMUM_REFCNT (2**30). - -Using the lower 30 bits makes the value backwards compatible by allowing -C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely -increase and decrease the objects reference count. The object would lose its -immortality, but the execution would still be correct. - -Reference count increases and decreases will first go through an immortality -check by comparing the reference count field to the minimum immortality refcount. -*/ -#define _Py_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(5L << 28)) -#define _Py_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(1L << 30)) -#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT ((Py_ssize_t)(7L << 28)) -#define _Py_STATIC_IMMORTAL_MINIMUM_REFCNT ((Py_ssize_t)(6L << 28)) -#endif - -// Py_GIL_DISABLED builds indicate immortal objects using `ob_ref_local`, which is -// always 32-bits. -#ifdef Py_GIL_DISABLED -#define _Py_IMMORTAL_REFCNT_LOCAL UINT32_MAX -#endif - - -#ifdef Py_GIL_DISABLED - // The shared reference count uses the two least-significant bits to store - // flags. The remaining bits are used to store the reference count. -# define _Py_REF_SHARED_SHIFT 2 -# define _Py_REF_SHARED_FLAG_MASK 0x3 - - // The shared flags are initialized to zero. -# define _Py_REF_SHARED_INIT 0x0 -# define _Py_REF_MAYBE_WEAKREF 0x1 -# define _Py_REF_QUEUED 0x2 -# define _Py_REF_MERGED 0x3 - - // Create a shared field from a refcnt and desired flags -# define _Py_REF_SHARED(refcnt, flags) \ - (((refcnt) << _Py_REF_SHARED_SHIFT) + (flags)) -#endif // Py_GIL_DISABLED - - -// Py_REFCNT() implementation for the stable ABI -PyAPI_FUNC(Py_ssize_t) Py_REFCNT(PyObject *ob); - -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000 - // Stable ABI implements Py_REFCNT() as a function call - // on limited C API version 3.14 and newer. -#else - static inline Py_ssize_t _Py_REFCNT(PyObject *ob) { - #if !defined(Py_GIL_DISABLED) - return ob->ob_refcnt; - #else - uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local); - if (local == _Py_IMMORTAL_REFCNT_LOCAL) { - return _Py_IMMORTAL_INITIAL_REFCNT; - } - Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared); - return _Py_STATIC_CAST(Py_ssize_t, local) + - Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT); - #endif - } - #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 - # define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob)) - #else - # define Py_REFCNT(ob) _Py_REFCNT(ob) - #endif -#endif - -static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op) -{ -#if defined(Py_GIL_DISABLED) - return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) == - _Py_IMMORTAL_REFCNT_LOCAL); -#elif SIZEOF_VOID_P > 4 - return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0; -#else - return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT; -#endif -} -#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op)) - - -static inline Py_ALWAYS_INLINE int _Py_IsStaticImmortal(PyObject *op) -{ -#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4 - return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0; -#else - return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT; -#endif -} -#define _Py_IsStaticImmortal(op) _Py_IsStaticImmortal(_PyObject_CAST(op)) - -// Py_SET_REFCNT() implementation for stable ABI -PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt); - -static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) { - assert(refcnt >= 0); -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000 - // Stable ABI implements Py_SET_REFCNT() as a function call - // on limited C API version 3.13 and newer. - _Py_SetRefcnt(ob, refcnt); -#else - // This immortal check is for code that is unaware of immortal objects. - // The runtime tracks these objects and we should avoid as much - // as possible having extensions inadvertently change the refcnt - // of an immortalized object. - if (_Py_IsImmortal(ob)) { - return; - } -#ifndef Py_GIL_DISABLED -#if SIZEOF_VOID_P > 4 - ob->ob_refcnt = (PY_UINT32_T)refcnt; -#else - ob->ob_refcnt = refcnt; -#endif -#else - if (_Py_IsOwnedByCurrentThread(ob)) { - if ((size_t)refcnt > (size_t)UINT32_MAX) { - // On overflow, make the object immortal - ob->ob_tid = _Py_UNOWNED_TID; - ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL; - ob->ob_ref_shared = 0; - } - else { - // Set local refcount to desired refcount and shared refcount - // to zero, but preserve the shared refcount flags. - ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt); - ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK; - } - } - else { - // Set local refcount to zero and shared refcount to desired refcount. - // Mark the object as merged. - ob->ob_tid = _Py_UNOWNED_TID; - ob->ob_ref_local = 0; - ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED); - } -#endif // Py_GIL_DISABLED -#endif // Py_LIMITED_API+0 < 0x030d0000 -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt)) -#endif - - -/* -The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement -reference counts. Py_DECREF calls the object's deallocator function when -the refcount falls to 0; for -objects that don't contain references to other objects or heap memory -this can be the standard function free(). Both macros can be used -wherever a void expression is allowed. The argument must not be a -NULL pointer. If it may be NULL, use Py_XINCREF/Py_XDECREF instead. -The macro _Py_NewReference(op) initialize reference counts to 1, and -in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional -bookkeeping appropriate to the special build. - -We assume that the reference count field can never overflow; this can -be proven when the size of the field is the same as the pointer size, so -we ignore the possibility. Provided a C int is at least 32 bits (which -is implicitly assumed in many parts of this code), that's enough for -about 2**31 references to an object. - -XXX The following became out of date in Python 2.2, but I'm not sure -XXX what the full truth is now. Certainly, heap-allocated type objects -XXX can and should be deallocated. -Type objects should never be deallocated; the type pointer in an object -is not considered to be a reference to the type object, to save -complications in the deallocation function. (This is actually a -decision that's up to the implementer of each new type so if you want, -you can count such references to the type object.) -*/ - -#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API) -PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno, - PyObject *op); -PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void); -PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void); -#endif // Py_REF_DEBUG && !Py_LIMITED_API - -PyAPI_FUNC(void) _Py_Dealloc(PyObject *); - - -/* -These are provided as conveniences to Python runtime embedders, so that -they can have object code that is not dependent on Python compilation flags. -*/ -PyAPI_FUNC(void) Py_IncRef(PyObject *); -PyAPI_FUNC(void) Py_DecRef(PyObject *); - -// Similar to Py_IncRef() and Py_DecRef() but the argument must be non-NULL. -// Private functions used by Py_INCREF() and Py_DECREF(). -PyAPI_FUNC(void) _Py_IncRef(PyObject *); -PyAPI_FUNC(void) _Py_DecRef(PyObject *); - -static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op) -{ -#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG)) - // Stable ABI implements Py_INCREF() as a function call on limited C API - // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef() - // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions. - // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't. -# if Py_LIMITED_API+0 >= 0x030a00A7 - _Py_IncRef(op); -# else - Py_IncRef(op); -# endif -#else - // Non-limited C API and limited C API for Python 3.9 and older access - // directly PyObject.ob_refcnt. -#if defined(Py_GIL_DISABLED) - uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); - uint32_t new_local = local + 1; - if (new_local == 0) { - _Py_INCREF_IMMORTAL_STAT_INC(); - // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing - return; - } - if (_Py_IsOwnedByCurrentThread(op)) { - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local); - } - else { - _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT)); - } -#elif SIZEOF_VOID_P > 4 - PY_UINT32_T cur_refcnt = op->ob_refcnt; - if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) { - // the object is immortal - _Py_INCREF_IMMORTAL_STAT_INC(); - return; - } - op->ob_refcnt = cur_refcnt + 1; -#else - if (_Py_IsImmortal(op)) { - _Py_INCREF_IMMORTAL_STAT_INC(); - return; - } - op->ob_refcnt++; -#endif - _Py_INCREF_STAT_INC(); -#ifdef Py_REF_DEBUG - // Don't count the incref if the object is immortal. - if (!_Py_IsImmortal(op)) { - _Py_INCREF_IncRefTotal(); - } -#endif -#endif -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op)) -#endif - - -#if !defined(Py_LIMITED_API) && defined(Py_GIL_DISABLED) -// Implements Py_DECREF on objects not owned by the current thread. -PyAPI_FUNC(void) _Py_DecRefShared(PyObject *); -PyAPI_FUNC(void) _Py_DecRefSharedDebug(PyObject *, const char *, int); - -// Called from Py_DECREF by the owning thread when the local refcount reaches -// zero. The call will deallocate the object if the shared refcount is also -// zero. Otherwise, the thread gives up ownership and merges the reference -// count fields. -PyAPI_FUNC(void) _Py_MergeZeroLocalRefcount(PyObject *); -#endif - -#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG)) -// Stable ABI implements Py_DECREF() as a function call on limited C API -// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was -// added to Python 3.10.0a7, use Py_DecRef() on older Python versions. -// Py_DecRef() accepts NULL whereas _Py_DecRef() doesn't. -static inline void Py_DECREF(PyObject *op) { -# if Py_LIMITED_API+0 >= 0x030a00A7 - _Py_DecRef(op); -# else - Py_DecRef(op); -# endif -} -#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op)) - -#elif defined(Py_GIL_DISABLED) && defined(Py_REF_DEBUG) -static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) -{ - uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); - if (local == _Py_IMMORTAL_REFCNT_LOCAL) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); - _Py_DECREF_DecRefTotal(); - if (_Py_IsOwnedByCurrentThread(op)) { - if (local == 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - local--; - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local); - if (local == 0) { - _Py_MergeZeroLocalRefcount(op); - } - } - else { - _Py_DecRefSharedDebug(op, filename, lineno); - } -} -#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) - -#elif defined(Py_GIL_DISABLED) -static inline void Py_DECREF(PyObject *op) -{ - uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local); - if (local == _Py_IMMORTAL_REFCNT_LOCAL) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); - if (_Py_IsOwnedByCurrentThread(op)) { - local--; - _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, local); - if (local == 0) { - _Py_MergeZeroLocalRefcount(op); - } - } - else { - _Py_DecRefShared(op); - } -} -#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op)) - -#elif defined(Py_REF_DEBUG) - -static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) -{ -#if SIZEOF_VOID_P > 4 - /* If an object has been freed, it will have a negative full refcnt - * If it has not it been freed, will have a very large refcnt */ - if (op->ob_refcnt_full <= 0 || op->ob_refcnt > (((PY_UINT32_T)-1) - (1<<20))) { -#else - if (op->ob_refcnt <= 0) { -#endif - _Py_NegativeRefcount(filename, lineno, op); - } - if (_Py_IsImmortal(op)) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); - _Py_DECREF_DecRefTotal(); - if (--op->ob_refcnt == 0) { - _Py_Dealloc(op); - } -} -#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) - -#else - -static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op) -{ - // Non-limited C API and limited C API for Python 3.9 and older access - // directly PyObject.ob_refcnt. - if (_Py_IsImmortal(op)) { - _Py_DECREF_IMMORTAL_STAT_INC(); - return; - } - _Py_DECREF_STAT_INC(); - if (--op->ob_refcnt == 0) { - _Py_Dealloc(op); - } -} -#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op)) -#endif - - -/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear - * and tp_dealloc implementations. - * - * Note that "the obvious" code can be deadly: - * - * Py_XDECREF(op); - * op = NULL; - * - * Typically, `op` is something like self->containee, and `self` is done - * using its `containee` member. In the code sequence above, suppose - * `containee` is non-NULL with a refcount of 1. Its refcount falls to - * 0 on the first line, which can trigger an arbitrary amount of code, - * possibly including finalizers (like __del__ methods or weakref callbacks) - * coded in Python, which in turn can release the GIL and allow other threads - * to run, etc. Such code may even invoke methods of `self` again, or cause - * cyclic gc to trigger, but-- oops! --self->containee still points to the - * object being torn down, and it may be in an insane state while being torn - * down. This has in fact been a rich historic source of miserable (rare & - * hard-to-diagnose) segfaulting (and other) bugs. - * - * The safe way is: - * - * Py_CLEAR(op); - * - * That arranges to set `op` to NULL _before_ decref'ing, so that any code - * triggered as a side-effect of `op` getting torn down no longer believes - * `op` points to a valid object. - * - * There are cases where it's safe to use the naive code, but they're brittle. - * For example, if `op` points to a Python integer, you know that destroying - * one of those can't cause problems -- but in part that relies on that - * Python integers aren't currently weakly referencable. Best practice is - * to use Py_CLEAR() even if you can't think of a reason for why you need to. - * - * gh-98724: Use a temporary variable to only evaluate the macro argument once, - * to avoid the duplication of side effects if the argument has side effects. - * - * gh-99701: If the PyObject* type is used with casting arguments to PyObject*, - * the code can be miscompiled with strict aliasing because of type punning. - * With strict aliasing, a compiler considers that two pointers of different - * types cannot read or write the same memory which enables optimization - * opportunities. - * - * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables, - * and so avoid type punning. Otherwise, use memcpy() which causes type erasure - * and so prevents the compiler to reuse an old cached 'op' value after - * Py_CLEAR(). - */ -#ifdef _Py_TYPEOF -#define Py_CLEAR(op) \ - do { \ - _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \ - _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \ - if (_tmp_old_op != NULL) { \ - *_tmp_op_ptr = _Py_NULL; \ - Py_DECREF(_tmp_old_op); \ - } \ - } while (0) -#else -#define Py_CLEAR(op) \ - do { \ - PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \ - PyObject *_tmp_old_op = (*_tmp_op_ptr); \ - if (_tmp_old_op != NULL) { \ - PyObject *_null_ptr = _Py_NULL; \ - memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \ - Py_DECREF(_tmp_old_op); \ - } \ - } while (0) -#endif - - -/* Function to use in case the object pointer can be NULL: */ -static inline void Py_XINCREF(PyObject *op) -{ - if (op != _Py_NULL) { - Py_INCREF(op); - } -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op)) -#endif - -static inline void Py_XDECREF(PyObject *op) -{ - if (op != _Py_NULL) { - Py_DECREF(op); - } -} -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op)) -#endif - -// Create a new strong reference to an object: -// increment the reference count of the object and return the object. -PyAPI_FUNC(PyObject*) Py_NewRef(PyObject *obj); - -// Similar to Py_NewRef(), but the object can be NULL. -PyAPI_FUNC(PyObject*) Py_XNewRef(PyObject *obj); - -static inline PyObject* _Py_NewRef(PyObject *obj) -{ - Py_INCREF(obj); - return obj; -} - -static inline PyObject* _Py_XNewRef(PyObject *obj) -{ - Py_XINCREF(obj); - return obj; -} - -// Py_NewRef() and Py_XNewRef() are exported as functions for the stable ABI. -// Names overridden with macros by static inline functions for best -// performances. -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 -# define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj)) -# define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj)) -#else -# define Py_NewRef(obj) _Py_NewRef(obj) -# define Py_XNewRef(obj) _Py_XNewRef(obj) -#endif - - -#ifdef __cplusplus -} -#endif -#endif // !_Py_REFCOUNT_H diff --git a/Python314_4_x86_Template/include/setobject.h b/Python314_4_x86_Template/include/setobject.h deleted file mode 100644 index 62c9e6b13..000000000 --- a/Python314_4_x86_Template/include/setobject.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Set object interface */ - -#ifndef Py_SETOBJECT_H -#define Py_SETOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_DATA(PyTypeObject) PySet_Type; -PyAPI_DATA(PyTypeObject) PyFrozenSet_Type; -PyAPI_DATA(PyTypeObject) PySetIter_Type; - -PyAPI_FUNC(PyObject *) PySet_New(PyObject *); -PyAPI_FUNC(PyObject *) PyFrozenSet_New(PyObject *); - -PyAPI_FUNC(int) PySet_Add(PyObject *set, PyObject *key); -PyAPI_FUNC(int) PySet_Clear(PyObject *set); -PyAPI_FUNC(int) PySet_Contains(PyObject *anyset, PyObject *key); -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_IS_TYPE((ob), &PyFrozenSet_Type) -#define PyFrozenSet_Check(ob) \ - (Py_IS_TYPE((ob), &PyFrozenSet_Type) || \ - PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) - -#define PyAnySet_CheckExact(ob) \ - (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type)) -#define PyAnySet_Check(ob) \ - (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_CheckExact(op) Py_IS_TYPE(op, &PySet_Type) -#define PySet_Check(ob) \ - (Py_IS_TYPE((ob), &PySet_Type) || \ - PyType_IsSubtype(Py_TYPE(ob), &PySet_Type)) - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_SETOBJECT_H -# include "cpython/setobject.h" -# undef Py_CPYTHON_SETOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_SETOBJECT_H */ diff --git a/Python314_4_x86_Template/include/sliceobject.h b/Python314_4_x86_Template/include/sliceobject.h deleted file mode 100644 index 35e2ea254..000000000 --- a/Python314_4_x86_Template/include/sliceobject.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef Py_SLICEOBJECT_H -#define Py_SLICEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* The unique ellipsis object "..." */ - -PyAPI_DATA(PyObject) _Py_EllipsisObject; /* Don't use this directly */ - -#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000 -# define Py_Ellipsis Py_GetConstantBorrowed(Py_CONSTANT_ELLIPSIS) -#else -# define Py_Ellipsis (&_Py_EllipsisObject) -#endif - -/* Slice object interface */ - -/* - -A slice object containing start, stop, and step data members (the -names are from range). After much talk with Guido, it was decided to -let these be any arbitrary python type. Py_None stands for omitted values. -*/ -#ifndef Py_LIMITED_API -typedef struct { - PyObject_HEAD - PyObject *start, *stop, *step; /* not NULL */ -} PySliceObject; -#endif - -PyAPI_DATA(PyTypeObject) PySlice_Type; -PyAPI_DATA(PyTypeObject) PyEllipsis_Type; - -#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type) - -PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, - PyObject* step); -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop); -PyAPI_FUNC(int) _PySlice_GetLongIndices(PySliceObject *self, PyObject *length, - PyObject **start_ptr, PyObject **stop_ptr, - PyObject **step_ptr); -#endif -PyAPI_FUNC(int) PySlice_GetIndices(PyObject *r, Py_ssize_t length, - Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); -Py_DEPRECATED(3.7) -PyAPI_FUNC(int) PySlice_GetIndicesEx(PyObject *r, Py_ssize_t length, - Py_ssize_t *start, Py_ssize_t *stop, - Py_ssize_t *step, - Py_ssize_t *slicelength); - -#if !defined(Py_LIMITED_API) || (Py_LIMITED_API+0 >= 0x03050400 && Py_LIMITED_API+0 < 0x03060000) || Py_LIMITED_API+0 >= 0x03060100 -#define PySlice_GetIndicesEx(slice, length, start, stop, step, slicelen) ( \ - PySlice_Unpack((slice), (start), (stop), (step)) < 0 ? \ - ((*(slicelen) = 0), -1) : \ - ((*(slicelen) = PySlice_AdjustIndices((length), (start), (stop), *(step))), \ - 0)) -PyAPI_FUNC(int) PySlice_Unpack(PyObject *slice, - Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); -PyAPI_FUNC(Py_ssize_t) PySlice_AdjustIndices(Py_ssize_t length, - Py_ssize_t *start, Py_ssize_t *stop, - Py_ssize_t step); -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_SLICEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/structmember.h b/Python314_4_x86_Template/include/structmember.h deleted file mode 100644 index 5f29fbcfe..000000000 --- a/Python314_4_x86_Template/include/structmember.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef Py_STRUCTMEMBER_H -#define Py_STRUCTMEMBER_H -#ifdef __cplusplus -extern "C" { -#endif - - -/* Interface to map C struct members to Python object attributes - * - * This header is deprecated: new code should not use stuff from here. - * New definitions are in descrobject.h. - * - * However, there's nothing wrong with old code continuing to use it, - * and there's not much maintenance overhead in maintaining a few aliases. - * So, don't be too eager to convert old code. - * - * It uses names not prefixed with Py_. - * It is also *not* included from Python.h and must be included individually. - */ - -#include <stddef.h> /* For offsetof (not always provided by Python.h) */ - -/* Types */ -#define T_SHORT Py_T_SHORT -#define T_INT Py_T_INT -#define T_LONG Py_T_LONG -#define T_FLOAT Py_T_FLOAT -#define T_DOUBLE Py_T_DOUBLE -#define T_STRING Py_T_STRING -#define T_OBJECT _Py_T_OBJECT -#define T_CHAR Py_T_CHAR -#define T_BYTE Py_T_BYTE -#define T_UBYTE Py_T_UBYTE -#define T_USHORT Py_T_USHORT -#define T_UINT Py_T_UINT -#define T_ULONG Py_T_ULONG -#define T_STRING_INPLACE Py_T_STRING_INPLACE -#define T_BOOL Py_T_BOOL -#define T_OBJECT_EX Py_T_OBJECT_EX -#define T_LONGLONG Py_T_LONGLONG -#define T_ULONGLONG Py_T_ULONGLONG -#define T_PYSSIZET Py_T_PYSSIZET -#define T_NONE _Py_T_NONE - -/* Flags */ -#define READONLY Py_READONLY -#define PY_AUDIT_READ Py_AUDIT_READ -#define READ_RESTRICTED Py_AUDIT_READ -#define PY_WRITE_RESTRICTED _Py_WRITE_RESTRICTED -#define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) - - -#ifdef __cplusplus -} -#endif -#endif /* !Py_STRUCTMEMBER_H */ diff --git a/Python314_4_x86_Template/include/structseq.h b/Python314_4_x86_Template/include/structseq.h deleted file mode 100644 index 29e24fee5..000000000 --- a/Python314_4_x86_Template/include/structseq.h +++ /dev/null @@ -1,46 +0,0 @@ - -/* Named tuple object interface */ - -#ifndef Py_STRUCTSEQ_H -#define Py_STRUCTSEQ_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct PyStructSequence_Field { - const char *name; - const char *doc; -} PyStructSequence_Field; - -typedef struct PyStructSequence_Desc { - const char *name; - const char *doc; - PyStructSequence_Field *fields; - int n_in_sequence; -} PyStructSequence_Desc; - -PyAPI_DATA(const char * const) PyStructSequence_UnnamedField; - -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, - PyStructSequence_Desc *desc); -PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, - PyStructSequence_Desc *desc); -#endif -PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); - -PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); - -PyAPI_FUNC(void) PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*); -PyAPI_FUNC(PyObject*) PyStructSequence_GetItem(PyObject*, Py_ssize_t); - -#ifndef Py_LIMITED_API -typedef PyTupleObject PyStructSequence; -#define PyStructSequence_SET_ITEM PyStructSequence_SetItem -#define PyStructSequence_GET_ITEM PyStructSequence_GetItem -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_STRUCTSEQ_H */ diff --git a/Python314_4_x86_Template/include/sysmodule.h b/Python314_4_x86_Template/include/sysmodule.h deleted file mode 100644 index c1d5f610f..000000000 --- a/Python314_4_x86_Template/include/sysmodule.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef Py_SYSMODULE_H -#define Py_SYSMODULE_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(PyObject *) PySys_GetObject(const char *); -PyAPI_FUNC(int) PySys_SetObject(const char *, PyObject *); - -Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **); -Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); - -PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) - Py_GCC_ATTRIBUTE((format(printf, 1, 2))); -PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) - Py_GCC_ATTRIBUTE((format(printf, 1, 2))); -PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); -PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); - -Py_DEPRECATED(3.13) PyAPI_FUNC(void) PySys_ResetWarnOptions(void); - -PyAPI_FUNC(PyObject *) PySys_GetXOptions(void); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_SYSMODULE_H */ diff --git a/Python314_4_x86_Template/include/traceback.h b/Python314_4_x86_Template/include/traceback.h deleted file mode 100644 index 2b40cc9fc..000000000 --- a/Python314_4_x86_Template/include/traceback.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef Py_TRACEBACK_H -#define Py_TRACEBACK_H -#ifdef __cplusplus -extern "C" { -#endif - -/* Traceback interface */ - -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_IS_TYPE((v), &PyTraceBack_Type) - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_TRACEBACK_H -# include "cpython/traceback.h" -# undef Py_CPYTHON_TRACEBACK_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_TRACEBACK_H */ diff --git a/Python314_4_x86_Template/include/tupleobject.h b/Python314_4_x86_Template/include/tupleobject.h deleted file mode 100644 index 1f9ab54be..000000000 --- a/Python314_4_x86_Template/include/tupleobject.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Tuple object interface */ - -#ifndef Py_TUPLEOBJECT_H -#define Py_TUPLEOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -/* -Another generally useful object type is a tuple of object pointers. -For Python, this is an immutable type. C code can change the tuple items -(but not their number), and even use tuples as general-purpose arrays of -object references, but in general only brand new tuples should be mutated, -not ones that might already have been exposed to Python code. - -*** WARNING *** PyTuple_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 tuple. Similarly, PyTuple_GetItem does not increment the -returned item's reference count. -*/ - -PyAPI_DATA(PyTypeObject) PyTuple_Type; -PyAPI_DATA(PyTypeObject) PyTupleIter_Type; - -#define PyTuple_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) -#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 *); -PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t); -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, ...); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_TUPLEOBJECT_H -# include "cpython/tupleobject.h" -# undef Py_CPYTHON_TUPLEOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_TUPLEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/typeslots.h b/Python314_4_x86_Template/include/typeslots.h deleted file mode 100644 index a7f3017ec..000000000 --- a/Python314_4_x86_Template/include/typeslots.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Do not renumber the file; these numbers are part of the stable ABI. */ -#define Py_bf_getbuffer 1 -#define Py_bf_releasebuffer 2 -#define Py_mp_ass_subscript 3 -#define Py_mp_length 4 -#define Py_mp_subscript 5 -#define Py_nb_absolute 6 -#define Py_nb_add 7 -#define Py_nb_and 8 -#define Py_nb_bool 9 -#define Py_nb_divmod 10 -#define Py_nb_float 11 -#define Py_nb_floor_divide 12 -#define Py_nb_index 13 -#define Py_nb_inplace_add 14 -#define Py_nb_inplace_and 15 -#define Py_nb_inplace_floor_divide 16 -#define Py_nb_inplace_lshift 17 -#define Py_nb_inplace_multiply 18 -#define Py_nb_inplace_or 19 -#define Py_nb_inplace_power 20 -#define Py_nb_inplace_remainder 21 -#define Py_nb_inplace_rshift 22 -#define Py_nb_inplace_subtract 23 -#define Py_nb_inplace_true_divide 24 -#define Py_nb_inplace_xor 25 -#define Py_nb_int 26 -#define Py_nb_invert 27 -#define Py_nb_lshift 28 -#define Py_nb_multiply 29 -#define Py_nb_negative 30 -#define Py_nb_or 31 -#define Py_nb_positive 32 -#define Py_nb_power 33 -#define Py_nb_remainder 34 -#define Py_nb_rshift 35 -#define Py_nb_subtract 36 -#define Py_nb_true_divide 37 -#define Py_nb_xor 38 -#define Py_sq_ass_item 39 -#define Py_sq_concat 40 -#define Py_sq_contains 41 -#define Py_sq_inplace_concat 42 -#define Py_sq_inplace_repeat 43 -#define Py_sq_item 44 -#define Py_sq_length 45 -#define Py_sq_repeat 46 -#define Py_tp_alloc 47 -#define Py_tp_base 48 -#define Py_tp_bases 49 -#define Py_tp_call 50 -#define Py_tp_clear 51 -#define Py_tp_dealloc 52 -#define Py_tp_del 53 -#define Py_tp_descr_get 54 -#define Py_tp_descr_set 55 -#define Py_tp_doc 56 -#define Py_tp_getattr 57 -#define Py_tp_getattro 58 -#define Py_tp_hash 59 -#define Py_tp_init 60 -#define Py_tp_is_gc 61 -#define Py_tp_iter 62 -#define Py_tp_iternext 63 -#define Py_tp_methods 64 -#define Py_tp_new 65 -#define Py_tp_repr 66 -#define Py_tp_richcompare 67 -#define Py_tp_setattr 68 -#define Py_tp_setattro 69 -#define Py_tp_str 70 -#define Py_tp_traverse 71 -#define Py_tp_members 72 -#define Py_tp_getset 73 -#define Py_tp_free 74 -#define Py_nb_matrix_multiply 75 -#define Py_nb_inplace_matrix_multiply 76 -#define Py_am_await 77 -#define Py_am_aiter 78 -#define Py_am_anext 79 -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 -/* New in 3.5 */ -#define Py_tp_finalize 80 -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 -/* New in 3.10 */ -#define Py_am_send 81 -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030E0000 -/* New in 3.14 */ -#define Py_tp_vectorcall 82 -#endif -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030E0000 -/* New in 3.14 */ -#define Py_tp_token 83 -#endif diff --git a/Python314_4_x86_Template/include/unicodeobject.h b/Python314_4_x86_Template/include/unicodeobject.h deleted file mode 100644 index f8bcaecb9..000000000 --- a/Python314_4_x86_Template/include/unicodeobject.h +++ /dev/null @@ -1,1029 +0,0 @@ -#ifndef Py_UNICODEOBJECT_H -#define Py_UNICODEOBJECT_H - -/* - -Unicode implementation based on original code by Fredrik Lundh, -modified by Marc-Andre Lemburg (mal@lemburg.com) according to the -Unicode Integration Proposal. (See -http://www.egenix.com/files/python/unicode-proposal.txt). - -Copyright (c) Corporation for National Research Initiatives. - - - Original header: - -------------------------------------------------------------------- - - * Yet another Unicode string type for Python. This type supports the - * 16-bit Basic Multilingual Plane (BMP) only. - * - * Written by Fredrik Lundh, January 1999. - * - * Copyright (c) 1999 by Secret Labs AB. - * Copyright (c) 1999 by Fredrik Lundh. - * - * fredrik@pythonware.com - * http://www.pythonware.com - * - * -------------------------------------------------------------------- - * This Unicode String Type is - * - * Copyright (c) 1999 by Secret Labs AB - * Copyright (c) 1999 by Fredrik Lundh - * - * By obtaining, using, and/or copying this software and/or its - * associated documentation, you agree that you have read, understood, - * and will comply with the following terms and conditions: - * - * Permission to use, copy, modify, and distribute this software and its - * associated documentation for any purpose and without fee is hereby - * granted, provided that the above copyright notice appears in all - * copies, and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of Secret Labs - * AB or the author not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior - * permission. - * - * SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * -------------------------------------------------------------------- */ - -/* === Internal API ======================================================= */ - -/* --- Internal Unicode Format -------------------------------------------- */ - -/* Python 3.x requires unicode */ -#define Py_USING_UNICODE - -#ifndef SIZEOF_WCHAR_T -#error Must define SIZEOF_WCHAR_T -#endif - -#define Py_UNICODE_SIZE SIZEOF_WCHAR_T - -/* If wchar_t can be used for UCS-4 storage, set Py_UNICODE_WIDE. - Otherwise, Unicode strings are stored as UCS-2 (with limited support - for UTF-16) */ - -#if Py_UNICODE_SIZE >= 4 -#define Py_UNICODE_WIDE -#endif - -/* Set these flags if the platform has "wchar.h" and the - wchar_t type is a 16-bit unsigned type */ -/* #define HAVE_WCHAR_H */ -/* #define HAVE_USABLE_WCHAR_T */ - -/* If the compiler provides a wchar_t type we try to support it - through the interface functions PyUnicode_FromWideChar(), - PyUnicode_AsWideChar() and PyUnicode_AsWideCharString(). */ - -#ifdef HAVE_USABLE_WCHAR_T -# ifndef HAVE_WCHAR_H -# define HAVE_WCHAR_H -# endif -#endif - -/* Py_UCS4 and Py_UCS2 are typedefs for the respective - unicode representations. */ -typedef uint32_t Py_UCS4; -typedef uint16_t Py_UCS2; -typedef uint8_t Py_UCS1; - -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_DATA(PyTypeObject) PyUnicode_Type; -PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type; - -#define PyUnicode_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS) -#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type) - -/* --- Constants ---------------------------------------------------------- */ - -/* This Unicode character will be used as replacement character during - decoding if the errors argument is set to "replace". Note: the - Unicode character U+FFFD is the official REPLACEMENT CHARACTER in - Unicode 3.0. */ - -#define Py_UNICODE_REPLACEMENT_CHARACTER ((Py_UCS4) 0xFFFD) - -/* === Public API ========================================================= */ - -/* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */ -PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize( - const char *u, /* UTF-8 encoded string */ - Py_ssize_t size /* size of buffer */ - ); - -/* Similar to PyUnicode_FromUnicode(), but u points to null-terminated - UTF-8 encoded bytes. The size is determined with strlen(). */ -PyAPI_FUNC(PyObject*) PyUnicode_FromString( - const char *u /* UTF-8 encoded string */ - ); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject*) PyUnicode_Substring( - PyObject *str, - Py_ssize_t start, - Py_ssize_t end); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -/* Copy the string into a UCS4 buffer including the null character if copy_null - is set. Return NULL and raise an exception on error. Raise a SystemError if - the buffer is smaller than the string. Return buffer on success. - - buflen is the length of the buffer in (Py_UCS4) characters. */ -PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4( - PyObject *unicode, - Py_UCS4* buffer, - Py_ssize_t buflen, - int copy_null); - -/* Copy the string into a UCS4 buffer. A new buffer is allocated using - * PyMem_Malloc; if this fails, NULL is returned with a memory error - exception set. */ -PyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4Copy(PyObject *unicode); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -/* Get the length of the Unicode object. */ - -PyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength( - PyObject *unicode -); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -/* Read a character from the string. */ - -PyAPI_FUNC(Py_UCS4) PyUnicode_ReadChar( - PyObject *unicode, - Py_ssize_t index - ); - -/* Write a character to the string. The string must have been created through - PyUnicode_New, must not be shared, and must not have been hashed yet. - - Return 0 on success, -1 on error. */ - -PyAPI_FUNC(int) PyUnicode_WriteChar( - PyObject *unicode, - Py_ssize_t index, - Py_UCS4 character - ); -#endif - -/* Resize a Unicode object. The length is the number of codepoints. - - *unicode is modified to point to the new (resized) object and 0 - returned on success. - - Try to resize the string in place (which is usually faster than allocating - a new string and copy characters), or create a new string. - - Error handling is implemented as follows: an exception is set, -1 - is returned and *unicode left untouched. - - WARNING: The function doesn't check string content, the result may not be a - string in canonical representation. */ - -PyAPI_FUNC(int) PyUnicode_Resize( - PyObject **unicode, /* Pointer to the Unicode object */ - Py_ssize_t length /* New length */ - ); - -/* Decode obj to a Unicode object. - - bytes, bytearray and other bytes-like objects are decoded according to the - given encoding and error handler. The encoding and error handler can be - NULL to have the interface use UTF-8 and "strict". - - All other objects (including Unicode objects) raise an exception. - - The API returns NULL in case of an error. The caller is responsible - for decref'ing the returned objects. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject( - PyObject *obj, /* Object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Copy an instance of a Unicode subtype to a new true Unicode object if - necessary. If obj is already a true Unicode object (not a subtype), return - the reference with *incremented* refcount. - - The API returns NULL in case of an error. The caller is responsible - for decref'ing the returned objects. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_FromObject( - PyObject *obj /* Object */ - ); - -PyAPI_FUNC(PyObject *) PyUnicode_FromFormatV( - const char *format, /* ASCII-encoded string */ - va_list vargs - ); -PyAPI_FUNC(PyObject *) PyUnicode_FromFormat( - const char *format, /* ASCII-encoded string */ - ... - ); - -PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **); -PyAPI_FUNC(PyObject *) PyUnicode_InternFromString( - const char *u /* UTF-8 encoded string */ - ); - -/* --- wchar_t support for platforms which support it --------------------- */ - -#ifdef HAVE_WCHAR_H - -/* Create a Unicode Object from the wchar_t buffer w of the given - size. - - The buffer is copied into the new object. */ - -PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar( - const wchar_t *w, /* wchar_t buffer */ - Py_ssize_t size /* size of buffer */ - ); - -/* Copies the Unicode Object contents into the wchar_t buffer w. At - most size wchar_t characters are copied. - - Note that the resulting wchar_t string may or may not be - 0-terminated. It is the responsibility of the caller to make sure - that the wchar_t string is 0-terminated in case this is required by - the application. - - Returns the number of wchar_t characters copied (excluding a - possibly trailing 0-termination character) or -1 in case of an - error. */ - -PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar( - PyObject *unicode, /* Unicode object */ - wchar_t *w, /* wchar_t buffer */ - Py_ssize_t size /* size of buffer */ - ); - -/* Convert the Unicode object to a wide character string. The output string - always ends with a nul character. If size is not NULL, write the number of - wide characters (excluding the null character) into *size. - - Returns a buffer allocated by PyMem_Malloc() (use PyMem_Free() to free it) - on success. On error, returns NULL, *size is undefined and raises a - MemoryError. */ - -PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( - PyObject *unicode, /* Unicode object */ - Py_ssize_t *size /* number of characters of the result */ - ); - -#endif - -/* --- Unicode ordinals --------------------------------------------------- */ - -/* Create a Unicode Object from the given Unicode code point ordinal. - - The ordinal must be in range(0x110000). A ValueError is - raised in case it is not. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); - -/* === Builtin Codecs ===================================================== - - Many of these APIs take two arguments encoding and errors. These - parameters encoding and errors have the same semantics as the ones - of the builtin str() API. - - Setting encoding to NULL causes the default encoding (UTF-8) to be used. - - Error handling is set by errors which may also be set to NULL - meaning to use the default handling defined for the codec. Default - error handling for all builtin codecs is "strict" (ValueErrors are - raised). - - The codecs all use a similar interface. Only deviation from the - generic ones are documented. - -*/ - -/* --- Manage the default encoding ---------------------------------------- */ - -/* Returns "utf-8". */ -PyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void); - -/* --- Generic Codecs ----------------------------------------------------- */ - -/* Create a Unicode object by decoding the encoded string s of the - given size. */ - -PyAPI_FUNC(PyObject*) PyUnicode_Decode( - const char *s, /* encoded string */ - Py_ssize_t size, /* size of buffer */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Decode a Unicode object unicode and return the result as Python - object. - - This API is DEPRECATED and will be removed in 3.15. - The only supported standard encoding is rot13. - Use PyCodec_Decode() to decode with rot13 and non-standard codecs - that decode from str. */ - -Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject( - PyObject *unicode, /* Unicode object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Decode a Unicode object unicode and return the result as Unicode - object. - - This API is DEPRECATED and will be removed in 3.15. - The only supported standard encoding is rot13. - Use PyCodec_Decode() to decode with rot13 and non-standard codecs - that decode from str to str. */ - -Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode( - PyObject *unicode, /* Unicode object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Encodes a Unicode object and returns the result as Python - object. - - This API is DEPRECATED and will be removed in 3.15. - It is superseded by PyUnicode_AsEncodedString() - since all standard encodings (except rot13) encode str to bytes. - Use PyCodec_Encode() for encoding with rot13 and non-standard codecs - that encode form str to non-bytes. */ - -Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject( - PyObject *unicode, /* Unicode object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Encodes a Unicode object and returns the result as Python string - object. */ - -PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString( - PyObject *unicode, /* Unicode object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Encodes a Unicode object and returns the result as Unicode - object. - - This API is DEPRECATED and will be removed in 3.15. - The only supported standard encodings is rot13. - Use PyCodec_Encode() to encode with rot13 and non-standard codecs - that encode from str to str. */ - -Py_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedUnicode( - PyObject *unicode, /* Unicode object */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - -/* Build an encoding map. */ - -PyAPI_FUNC(PyObject*) PyUnicode_BuildEncodingMap( - PyObject* string /* 256 character map */ - ); - -/* --- UTF-7 Codecs ------------------------------------------------------- */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7( - const char *string, /* UTF-7 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful( - const char *string, /* UTF-7 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed /* bytes consumed */ - ); - -/* --- UTF-8 Codecs ------------------------------------------------------- */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8( - const char *string, /* UTF-8 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful( - const char *string, /* UTF-8 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed /* bytes consumed */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String( - PyObject *unicode /* Unicode object */ - ); - -/* Returns a pointer to the default encoding (UTF-8) of the - Unicode object unicode and the size of the encoded representation - in bytes stored in *size. - - In case of an error, no *size is set. - - This function caches the UTF-8 encoded string in the unicodeobject - and subsequent calls will return the same string. The memory is released - when the unicodeobject is deallocated. -*/ - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 -PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( - PyObject *unicode, - Py_ssize_t *size); -#endif - -/* --- UTF-32 Codecs ------------------------------------------------------ */ - -/* Decodes length bytes from a UTF-32 encoded buffer string and returns - the corresponding Unicode object. - - errors (if non-NULL) defines the error handling. It defaults - to "strict". - - If byteorder is non-NULL, the decoder starts decoding using the - given byte order: - - *byteorder == -1: little endian - *byteorder == 0: native order - *byteorder == 1: big endian - - In native mode, the first four bytes of the stream are checked for a - BOM mark. If found, the BOM mark is analysed, the byte order - adjusted and the BOM skipped. In the other modes, no BOM mark - interpretation is done. After completion, *byteorder is set to the - current byte order at the end of input data. - - If byteorder is NULL, the codec starts in native order mode. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32( - const char *string, /* UTF-32 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - int *byteorder /* pointer to byteorder to use - 0=native;-1=LE,1=BE; updated on - exit */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32Stateful( - const char *string, /* UTF-32 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - int *byteorder, /* pointer to byteorder to use - 0=native;-1=LE,1=BE; updated on - exit */ - Py_ssize_t *consumed /* bytes consumed */ - ); - -/* Returns a Python string using the UTF-32 encoding in native byte - order. The string always starts with a BOM mark. */ - -PyAPI_FUNC(PyObject*) PyUnicode_AsUTF32String( - PyObject *unicode /* Unicode object */ - ); - -/* Returns a Python string object holding the UTF-32 encoded value of - the Unicode data. - - If byteorder is not 0, output is written according to the following - byte order: - - byteorder == -1: little endian - byteorder == 0: native byte order (writes a BOM mark) - byteorder == 1: big endian - - If byteorder is 0, the output string will always start with the - Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is - prepended. - -*/ - -/* --- UTF-16 Codecs ------------------------------------------------------ */ - -/* Decodes length bytes from a UTF-16 encoded buffer string and returns - the corresponding Unicode object. - - errors (if non-NULL) defines the error handling. It defaults - to "strict". - - If byteorder is non-NULL, the decoder starts decoding using the - given byte order: - - *byteorder == -1: little endian - *byteorder == 0: native order - *byteorder == 1: big endian - - In native mode, the first two bytes of the stream are checked for a - BOM mark. If found, the BOM mark is analysed, the byte order - adjusted and the BOM skipped. In the other modes, no BOM mark - interpretation is done. After completion, *byteorder is set to the - current byte order at the end of input data. - - If byteorder is NULL, the codec starts in native order mode. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16( - const char *string, /* UTF-16 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - int *byteorder /* pointer to byteorder to use - 0=native;-1=LE,1=BE; updated on - exit */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful( - const char *string, /* UTF-16 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - int *byteorder, /* pointer to byteorder to use - 0=native;-1=LE,1=BE; updated on - exit */ - Py_ssize_t *consumed /* bytes consumed */ - ); - -/* Returns a Python string using the UTF-16 encoding in native byte - order. The string always starts with a BOM mark. */ - -PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String( - PyObject *unicode /* Unicode object */ - ); - -/* --- Unicode-Escape Codecs ---------------------------------------------- */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape( - const char *string, /* Unicode-Escape encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString( - PyObject *unicode /* Unicode object */ - ); - -/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape( - const char *string, /* Raw-Unicode-Escape encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString( - PyObject *unicode /* Unicode object */ - ); - -/* --- Latin-1 Codecs ----------------------------------------------------- - - Note: Latin-1 corresponds to the first 256 Unicode ordinals. */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1( - const char *string, /* Latin-1 encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String( - PyObject *unicode /* Unicode object */ - ); - -/* --- ASCII Codecs ------------------------------------------------------- - - Only 7-bit ASCII data is expected. All other codes generate errors. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII( - const char *string, /* ASCII encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString( - PyObject *unicode /* Unicode object */ - ); - -/* --- Character Map Codecs ----------------------------------------------- - - This codec uses mappings to encode and decode characters. - - Decoding mappings must map byte ordinals (integers in the range from 0 to - 255) to Unicode strings, integers (which are then interpreted as Unicode - ordinals) or None. Unmapped data bytes (ones which cause a LookupError) - as well as mapped to None, 0xFFFE or '\ufffe' are treated as "undefined - mapping" and cause an error. - - Encoding mappings must map Unicode ordinal integers to bytes objects, - integers in the range from 0 to 255 or None. Unmapped character - ordinals (ones which cause a LookupError) as well as mapped to - None are treated as "undefined mapping" and cause an error. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap( - const char *string, /* Encoded string */ - Py_ssize_t length, /* size of string */ - PyObject *mapping, /* decoding mapping */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString( - PyObject *unicode, /* Unicode object */ - PyObject *mapping /* encoding mapping */ - ); - -/* --- MBCS codecs for Windows -------------------------------------------- */ - -#ifdef MS_WINDOWS -PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS( - const char *string, /* MBCS encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCSStateful( - const char *string, /* MBCS encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed /* bytes consumed */ - ); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject*) PyUnicode_DecodeCodePageStateful( - int code_page, /* code page number */ - const char *string, /* encoded string */ - Py_ssize_t length, /* size of string */ - const char *errors, /* error handling */ - Py_ssize_t *consumed /* bytes consumed */ - ); -#endif - -PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString( - PyObject *unicode /* Unicode object */ - ); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -PyAPI_FUNC(PyObject*) PyUnicode_EncodeCodePage( - int code_page, /* code page number */ - PyObject *unicode, /* Unicode object */ - const char *errors /* error handling */ - ); -#endif - -#endif /* MS_WINDOWS */ - -/* --- Locale encoding --------------------------------------------------- */ - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -/* Decode a string from the current locale encoding. The decoder is strict if - *surrogateescape* is equal to zero, otherwise it uses the 'surrogateescape' - error handler (PEP 383) to escape undecodable bytes. If a byte sequence can - be decoded as a surrogate character and *surrogateescape* is not equal to - zero, the byte sequence is escaped using the 'surrogateescape' error handler - instead of being decoded. *str* must end with a null character but cannot - contain embedded null characters. */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocaleAndSize( - const char *str, - Py_ssize_t len, - const char *errors); - -/* Similar to PyUnicode_DecodeLocaleAndSize(), but compute the string - length using strlen(). */ - -PyAPI_FUNC(PyObject*) PyUnicode_DecodeLocale( - const char *str, - const char *errors); - -/* Encode a Unicode object to the current locale encoding. The encoder is - strict is *surrogateescape* is equal to zero, otherwise the - "surrogateescape" error handler is used. Return a bytes object. The string - cannot contain embedded null characters. */ - -PyAPI_FUNC(PyObject*) PyUnicode_EncodeLocale( - PyObject *unicode, - const char *errors - ); -#endif - -/* --- File system encoding ---------------------------------------------- */ - -/* ParseTuple converter: encode str objects to bytes using - PyUnicode_EncodeFSDefault(); bytes objects are output as-is. */ - -PyAPI_FUNC(int) PyUnicode_FSConverter(PyObject*, void*); - -/* ParseTuple converter: decode bytes objects to unicode using - PyUnicode_DecodeFSDefaultAndSize(); str objects are output as-is. */ - -PyAPI_FUNC(int) PyUnicode_FSDecoder(PyObject*, void*); - -/* Decode a null-terminated string from the Python filesystem encoding - and error handler. - - If the string length is known, use PyUnicode_DecodeFSDefaultAndSize(). */ -PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefault( - const char *s /* encoded string */ - ); - -/* Decode a string from the Python filesystem encoding and error handler. */ -PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefaultAndSize( - const char *s, /* encoded string */ - Py_ssize_t size /* size */ - ); - -/* Encode a Unicode object to the Python filesystem encoding and error handler. - Return bytes. */ -PyAPI_FUNC(PyObject*) PyUnicode_EncodeFSDefault( - PyObject *unicode - ); - -/* --- Methods & Slots ---------------------------------------------------- - - These are capable of handling Unicode objects and strings on input - (we refer to them as strings in the descriptions) and return - Unicode objects or integers as appropriate. */ - -/* Concat two strings giving a new Unicode string. */ - -PyAPI_FUNC(PyObject*) PyUnicode_Concat( - PyObject *left, /* Left string */ - PyObject *right /* Right string */ - ); - -/* Concat two strings and put the result in *pleft - (sets *pleft to NULL on error) */ - -PyAPI_FUNC(void) PyUnicode_Append( - PyObject **pleft, /* Pointer to left string */ - PyObject *right /* Right string */ - ); - -/* Concat two strings, put the result in *pleft and drop the right object - (sets *pleft to NULL on error) */ - -PyAPI_FUNC(void) PyUnicode_AppendAndDel( - PyObject **pleft, /* Pointer to left string */ - PyObject *right /* Right string */ - ); - -/* Split a string giving a list of Unicode strings. - - If sep is NULL, splitting will be done at all whitespace - substrings. Otherwise, splits occur at the given separator. - - At most maxsplit splits will be done. If negative, no limit is set. - - Separators are not included in the resulting list. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_Split( - PyObject *s, /* String to split */ - PyObject *sep, /* String separator */ - Py_ssize_t maxsplit /* Maxsplit count */ - ); - -/* Dito, but split at line breaks. - - CRLF is considered to be one line break. Line breaks are not - included in the resulting list. */ - -PyAPI_FUNC(PyObject*) PyUnicode_Splitlines( - PyObject *s, /* String to split */ - int keepends /* If true, line end markers are included */ - ); - -/* Partition a string using a given separator. */ - -PyAPI_FUNC(PyObject*) PyUnicode_Partition( - PyObject *s, /* String to partition */ - PyObject *sep /* String separator */ - ); - -/* Partition a string using a given separator, searching from the end of the - string. */ - -PyAPI_FUNC(PyObject*) PyUnicode_RPartition( - PyObject *s, /* String to partition */ - PyObject *sep /* String separator */ - ); - -/* Split a string giving a list of Unicode strings. - - If sep is NULL, splitting will be done at all whitespace - substrings. Otherwise, splits occur at the given separator. - - At most maxsplit splits will be done. But unlike PyUnicode_Split - PyUnicode_RSplit splits from the end of the string. If negative, - no limit is set. - - Separators are not included in the resulting list. - -*/ - -PyAPI_FUNC(PyObject*) PyUnicode_RSplit( - PyObject *s, /* String to split */ - PyObject *sep, /* String separator */ - Py_ssize_t maxsplit /* Maxsplit count */ - ); - -/* Translate a string by applying a character mapping table to it and - return the resulting Unicode object. - - The mapping table must map Unicode ordinal integers to Unicode strings, - Unicode ordinal integers or None (causing deletion of the character). - - Mapping tables may be dictionaries or sequences. Unmapped character - ordinals (ones which cause a LookupError) are left untouched and - are copied as-is. - -*/ - -PyAPI_FUNC(PyObject *) PyUnicode_Translate( - PyObject *str, /* String */ - PyObject *table, /* Translate table */ - const char *errors /* error handling */ - ); - -/* Join a sequence of strings using the given separator and return - the resulting Unicode string. */ - -PyAPI_FUNC(PyObject*) PyUnicode_Join( - PyObject *separator, /* Separator string */ - PyObject *seq /* Sequence object */ - ); - -/* Return 1 if substr matches str[start:end] at the given tail end, 0 - otherwise. */ - -PyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch( - PyObject *str, /* String */ - PyObject *substr, /* Prefix or Suffix string */ - Py_ssize_t start, /* Start index */ - Py_ssize_t end, /* Stop index */ - int direction /* Tail end: -1 prefix, +1 suffix */ - ); - -/* Return the first position of substr in str[start:end] using the - given search direction or -1 if not found. -2 is returned in case - an error occurred and an exception is set. */ - -PyAPI_FUNC(Py_ssize_t) PyUnicode_Find( - PyObject *str, /* String */ - PyObject *substr, /* Substring to find */ - Py_ssize_t start, /* Start index */ - Py_ssize_t end, /* Stop index */ - int direction /* Find direction: +1 forward, -1 backward */ - ); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 -/* Like PyUnicode_Find, but search for single character only. */ -PyAPI_FUNC(Py_ssize_t) PyUnicode_FindChar( - PyObject *str, - Py_UCS4 ch, - Py_ssize_t start, - Py_ssize_t end, - int direction - ); -#endif - -/* Count the number of occurrences of substr in str[start:end]. */ - -PyAPI_FUNC(Py_ssize_t) PyUnicode_Count( - PyObject *str, /* String */ - PyObject *substr, /* Substring to count */ - Py_ssize_t start, /* Start index */ - Py_ssize_t end /* Stop index */ - ); - -/* Replace at most maxcount occurrences of substr in str with replstr - and return the resulting Unicode object. */ - -PyAPI_FUNC(PyObject *) PyUnicode_Replace( - PyObject *str, /* String */ - PyObject *substr, /* Substring to find */ - PyObject *replstr, /* Substring to replace */ - Py_ssize_t maxcount /* Max. number of replacements to apply; - -1 = all */ - ); - -/* Compare two strings and return -1, 0, 1 for less than, equal, - greater than resp. - Raise an exception and return -1 on error. */ - -PyAPI_FUNC(int) PyUnicode_Compare( - PyObject *left, /* Left string */ - PyObject *right /* Right string */ - ); - -/* Compare a Unicode object with C string and return -1, 0, 1 for less than, - equal, and greater than, respectively. It is best to pass only - ASCII-encoded strings, but the function interprets the input string as - ISO-8859-1 if it contains non-ASCII characters. - This function does not raise exceptions. */ - -PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString( - PyObject *left, - const char *right /* ASCII-encoded string */ - ); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000 -/* Compare a Unicode object with UTF-8 encoded C string. - Return 1 if they are equal, or 0 otherwise. - This function does not raise exceptions. */ - -PyAPI_FUNC(int) PyUnicode_EqualToUTF8(PyObject *, const char *); -PyAPI_FUNC(int) PyUnicode_EqualToUTF8AndSize(PyObject *, const char *, Py_ssize_t); -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030e0000 -PyAPI_FUNC(int) PyUnicode_Equal(PyObject *str1, PyObject *str2); -#endif - -/* Rich compare two strings and return one of the following: - - - NULL in case an exception was raised - - Py_True or Py_False for successful comparisons - - Py_NotImplemented in case the type combination is unknown - - Possible values for op: - - Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE - -*/ - -PyAPI_FUNC(PyObject *) PyUnicode_RichCompare( - PyObject *left, /* Left string */ - PyObject *right, /* Right string */ - int op /* Operation: Py_EQ, Py_NE, Py_GT, etc. */ - ); - -/* Apply an argument tuple or dictionary to a format string and return - the resulting Unicode string. */ - -PyAPI_FUNC(PyObject *) PyUnicode_Format( - PyObject *format, /* Format string */ - PyObject *args /* Argument tuple or dictionary */ - ); - -/* Checks whether element is contained in container and return 1/0 - accordingly. - - element has to coerce to a one element Unicode string. -1 is - returned in case of an error. */ - -PyAPI_FUNC(int) PyUnicode_Contains( - PyObject *container, /* Container string */ - PyObject *element /* Element string */ - ); - -/* Checks whether argument is a valid identifier. */ - -PyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s); - -/* === Characters Type APIs =============================================== */ - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_UNICODEOBJECT_H -# include "cpython/unicodeobject.h" -# undef Py_CPYTHON_UNICODEOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_UNICODEOBJECT_H */ diff --git a/Python314_4_x86_Template/include/warnings.h b/Python314_4_x86_Template/include/warnings.h deleted file mode 100644 index 18ac1543a..000000000 --- a/Python314_4_x86_Template/include/warnings.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef Py_WARNINGS_H -#define Py_WARNINGS_H -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(int) PyErr_WarnEx( - PyObject *category, - const char *message, /* UTF-8 encoded string */ - Py_ssize_t stack_level); - -PyAPI_FUNC(int) PyErr_WarnFormat( - PyObject *category, - Py_ssize_t stack_level, - const char *format, /* ASCII-encoded string */ - ...); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -/* Emit a ResourceWarning warning */ -PyAPI_FUNC(int) PyErr_ResourceWarning( - PyObject *source, - Py_ssize_t stack_level, - const char *format, /* ASCII-encoded string */ - ...); -#endif - -PyAPI_FUNC(int) PyErr_WarnExplicit( - PyObject *category, - const char *message, /* UTF-8 encoded string */ - const char *filename, /* decoded from the filesystem encoding */ - int lineno, - const char *module, /* UTF-8 encoded string */ - PyObject *registry); - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_WARNINGS_H -# include "cpython/warnings.h" -# undef Py_CPYTHON_WARNINGS_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_WARNINGS_H */ - diff --git a/Python314_4_x86_Template/include/weakrefobject.h b/Python314_4_x86_Template/include/weakrefobject.h deleted file mode 100644 index a6e71eb17..000000000 --- a/Python314_4_x86_Template/include/weakrefobject.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Weak references objects for Python. */ - -#ifndef Py_WEAKREFOBJECT_H -#define Py_WEAKREFOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _PyWeakReference PyWeakReference; - -PyAPI_DATA(PyTypeObject) _PyWeakref_RefType; -PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType; -PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; - -#define PyWeakref_CheckRef(op) PyObject_TypeCheck((op), &_PyWeakref_RefType) -#define PyWeakref_CheckRefExact(op) \ - Py_IS_TYPE((op), &_PyWeakref_RefType) -#define PyWeakref_CheckProxy(op) \ - (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \ - || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType)) - -#define PyWeakref_Check(op) \ - (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) - - -PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob, - PyObject *callback); -PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob, - PyObject *callback); -Py_DEPRECATED(3.13) PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref); - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000 -PyAPI_FUNC(int) PyWeakref_GetRef(PyObject *ref, PyObject **pobj); -#endif - - -#ifndef Py_LIMITED_API -# define Py_CPYTHON_WEAKREFOBJECT_H -# include "cpython/weakrefobject.h" -# undef Py_CPYTHON_WEAKREFOBJECT_H -#endif - -#ifdef __cplusplus -} -#endif -#endif /* !Py_WEAKREFOBJECT_H */ diff --git a/Python314_4_x86_Template/libs/python3.lib b/Python314_4_x86_Template/libs/python3.lib deleted file mode 100644 index e3159eda76574fec7e108d521a743c6c07360607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202484 zcmeFa4VYC`{Xe?a+C*ezWJE@0W@KbWz7Ud`$=k^20MpEXM8<HKIlz(Oobj9)1T!Nu zQ!_I&Gcz+YGcz+YGcz+YGcz+YGcz+IGczM1Gc&rM?|R$cwf5QvdhY+;=XdY(<9R-; zIp4SSy4TxY`@3FsXr(!@=CEDfxL5e^4F`n3-LL)aAJb<ZaPV~f_ljMF7<-wJCyWvD z#A!mlXHaAlHd$;%2)t;O#oY*j7f-S{2_f*3Lk%WDk1*~&ixmig=RR!kyxT>l(SZ=y z<q(Uj5CYGiYH=|_VEnEYn-CI^7QzdbTil5d*cI_>z{aju3H9f?#X|^zCp#>zK?wY1 z4~wk`31=8=Ss|3hT?m1{9%ccZzXDr#H~8C$LTNmT5ZKmZ@b?3S(zpmA@YHyV4G0OF z4gRrID2>|?0#8r3xDX-m&v6z_gapJvcxH*ktq6gC%`kX&FQGI}LrB<W@b8sEX&{b& z1KX!rAdc<8e|E7z9RDFappl7%!r)qjfZWI8JcNYp25MMj8V?}^GSsQY)d+zxlPyk0 zNI=~Yp0mQ@9)!TyOAMa70qtaikSASd@ZP<J)Ho9%;TeNXBSI41cc;Oo&G-$xuiN0{ z>xCq||7?R(#tW%&B0|DegAWV}sc}C-;M5L_8xaB@yu{$Ni9%|ef{^gE!RbhY2I4*) z_z<2SjSCS1XYOWk5<<cjgAcD1QsW+kz*%!Gu0;rZWQqlBd;~aqtii{p3rRS4nZd`A zKEinuEzUqlKsgaUF=X)oLg4%(El|Ga1D~8~aS=k`f?W;HhAiQu^DS;b2%NLO1>!sh z_}B!CClLalT50hRLf}Hgr-8b-5co9mrEv~I;G!`WCn6+lGx*FJAvKVO&j1(qSlo;d z_$<mm<8p++C6g`CMlK<2H~3s#NR1~D0++6^xECSt`D+a>n<}Kn`3Qk8j5D|r@oL<N z5cu-G7Uv=at`ZhagaqW7@RfxYNb6UCt7lkTi4geeB#TW536C3GbBvH0w;}|-HqGJ! zguu1qEgnV)e7(!yizoxab!hK|ZwQMKgoMoo*CSmTHy{MQ3HutT%WncVz`n+MgoH;7 zzSS+H#_b4!8xONUo!$t1d#c672!WemN8@CKgeMKYvs6e8<n24a&C@NA_M3t4PP8}^ zA#e-Ymj?2F3-G;tEY3v;+&ac$6GGto%HmXngl7$IJ4r~5rw{@^SYv_w{Q$Tf^{jz3 z-46V4e~XI{0(T%?8pz8Xglz^tf*p-}5CV73wzwK0@Z%{KNb8S*yYL)qY(PkO%-|=3 zLTbRqPk_5&M*}wQ27bDi#n}i6+YRm+5mEzo?g4&=_M>qpLg3y*Ev`fe{Cu*-83+l_ z7~D4`q{c%CfnT7V5dMMmYn+D=czT@0i3kZ>4gQJrYutwrc;-lhr;v8SGdCOjYd;}1 z&PND53ws)y5d#12vA6{xu>C-bixC3<8E^3j!bgM>-4+-N1t2drP#D)VMi3G(2Owle zTHJsT7=!VX@SI5&ry?XgYcO_LD2>esf#)u>xCbFHZlT592!ZF#wzwW4u*<#{7a#<l zzpKTG2nkOaj9)L5#^VTq7hv4hco-qDE8^9_oMczvg@;&NjS!eH)dFMs1mHyzEzUql z*lw`f8lg0h_T7LNA8s%aa|R8}8zurTSz&P}LSWLN7FQqyUW)S4I0+%)af98L2&I9# z*d2J;G=s^g0}a&KWZ>mp7AT{a1A9!dI2$4Gim?_bmsb$B80?91(YPBS@XEt1u0#mz zHQC}Uguts{N8@CKgl7!)MmcEQj}UluhsCuBfhl`ioQn{6%{Yq<2nmlF?6XuTjoT3d zubpXe6+&R@REtXy0<W8Buy2o08aE>ZUO&SEI<E)z+t1<xguokiwKx+YFl~%Q6CvRt zgEw{wrEv>FVE<_rXcPMb2kdTvJRLyTZgAi#p)^pY2LcD7Ts2VF2LaQer*SGm;7uzn zAp0g@2IMuaMF<?cuf@d(fj8f4a0uiyu0aUA1?8i0K0@Ho@fN2bBy2T!>k6SX?m`G0 zHrE0+4g=n{m&G{<fx~yP*np7mgu$$1gwnVTAut=|PMG<$!JJ7#X&{et2wM#1E)z=Q z4urrw=xAJu5a^g-(6wGDLdVG#+Ykartg?6*Auzws0%bQJ=<Kk#4k2(P%1`4Gguqdg zEKv7H0bOG(9zh5!=(e~KA+Qko8W$r379o8an-CHnH|R#bG;Tu(ynTiR^7M9~XQIW) z2nomw;T^YHEJX+`n`v=1Lg1ZKEY3#=95cpZ7$IS^!Mm0VrExbxVEKHD8xR8h`&nFo z5LhwZ0%=)6c*>xH^3}K(A+Qp5G*Ff+fdQ0<#<>WAL1j@#NO;ho+9Q+(%AyLaLV0Lh zju2SArv+@R2G;Cifihh~*kVvazBKMZ2pl`x;%bDzTG-KmjkUng1PkP8hyXi;b%Pd< zAOz~mEReQ3&^X-UN`%1hWQ#Kq61E#0HzbtC0|<d8%17fGgg|RA3+S{6&?AhDSfIW} zfYBZc#61eEpKft6Lg09mhsJt@gvShemkUK$JjtN<PW%QIpJC8<iBN>a+YFYh5K05j z`V!!1v@eZI5duqhw>TLg;R%BiCJLp2-zNa?MtN!6fe<+HP>U-N0`Eb2X`G3W@QlGp z#|ou^c5xE03Hc<v7v-jL6GC7U(oA^YZWfym5>R)9laUXNdk_NeKiuFH#H)d{pF%)d z2_IN$aVtXL)cq{ZMF@Ow(BgiCz-dU2#tjI8)6cR%K28VDKt41cKnQ%O%i<P<z?sOC z2Fl`0;H<G08xRtZ2f{~CcN(`N1kT2Dp>Y{P;G?KljZ+X3wi%qWN+=D)eGc%k4vT9M z0_W~+fpnis*lzGC$Z6bw5V#QO)VLfW@af4GXCef!jx<1<yNK|p!Dp5UrGYl|8Q@~r zC0ww^;9`^k;ez`Nu%=WRhy&|Nb;%wUXCnkYH_ifO^Etxf2A3Wql*XM1fzKaeaWz8V z<8_ON5d!DoInsdadB7(QwSep=fb*wVoQDwj<OGXN2nkOcT(+lB8fPK|zHq<6<;bH3 z%J_2Ni;&Ye4I$wvgDdV3itr_*SK~5-z?HjOpiZtNJZtdfrcfH25dv5BS=^2g_{t0m z<l!s8)reQ)9E8AEQBN8uyRQ;pgK!P(Xxxkt_}X-fOArFrBL9S&(LM;@9kO^BA#lqQ z3)Jx~!1s`Ujhhexw<28{S0MzxzmLU*2!Y#RTjOkm1jIr3A?y%-Fl_NCLg4meEbc)F z{P0$TI}ncs;<y9&(LNUEAq4K6XmK(^!d8PHuMkS(E`-2cvn{Si2>b+gHDL26z}@>< zT#OL-DeP(>?N}eGdz8hA2!Z>qF}UX${04qjw?O;-8F24%iw6(_Kku@*4IyyfOoLxc z6H4P!guwlKSRl^(2`DqdFPjDrplk@gI?MuT{}u2c^fXW=4+6g)XMwc-n((B-Lo0>S zxECStn}r6yd;<1?2T*Q=-`ryG@S#F!AdZKD-|lIFIDQK}GT!23goLLIeusDno3Aza z{S=`z&P513stkUIG!Qm-7(BWjbi!tXKP(YS1JA-AfX5Co_~Y(E5w3+C;p@vS9z+OS z2R#jx)pfu(kWURfo8JJgpKEb5Lg1Uor^XEkfg7e<T#XR;)_xY3BLr^T+u|aGz_-sZ zxM{3V8mA%zzJuQyryvAw78aWj0)K>_#xn?k$B(r@9v%n&bfg8+^e5nn3pBFbW{PaL z%ki#Yi^wJ(17OehCHOsQqR3u21-J<B875$F9dZ5*WxWk~{1@#BL+`m0ggkjZ_HnWI za|ZSYKDa;jCWrC&&DaCI4f~awu=faD@C5eqAb0J0?A>8+<qMArdHGV{b|Jrbh>%xI z0!{&*7V=Bj@Awk-5WarBkk`TPFJR|>$lQOWkiXm$I9tdE#sVh**t`1Ga^Nl@ADj!^ zB;>ELFY#;0J~Tzh-$3p+kbCF?gphq0doT~*E#z-IfE$H;WSWq_8xLT=<agk2UI~Ez z$i+hb9`+vH2jL9}FBI|*koyDV{($|Z#~}CE{X+h+8-Sh1Vdrtg`KP^r^Mrf?dnZpI z-X~!5&q&{&VH58;<dewLU#0>`&z4<)4Zvn0|Jn!KBIMSYz*R#24Qc-y_N2D$3ZVS9 zZ4vVCu=DpjuxE1!_G6&;pAFbgIS_j!mth@$KK2T(!2ST*@$1kQCZnES_c+#rTd{Tm zZRTl0%?AI?t1y?FA=HKyLTyAl-EbE|=$`<cQ=i5B2hZi{Q-u2PUciMIw?MlBvR^nB z&&COOUamyjoQ!re74L4w_V;%#=w8&**FSe&@0^~_?!HAm{lgna)->t|iT?hDi@Umt z0^+?^!tnd%FJ5?5|J+%9v!Kzvv48exZD?>wWoWe8-&;GO+6QWF-Ee;y4;pjUR0r1f zR0l?zt=jtPoXXG;*GY1rHMa`E#sC-1Nt!><Q(YCZEd|`pdd&3{a2HlrS4NN)7#L`b z)<?LN1P>a$)e#a7ML7{NODgTkCduvIIIFq3zq`_G6-%?oVbXo0!$WOULUyb-t3G&C zb>s1k=3uK(hdx$qA|+|8Evb~JI_3o$rFLB_q7+yQrLx@{=QW%Cvnzw0^^t0`UKxs7 zRhrwqanZ_Ss{<qbB;7Gu9~h}M>V*<$Clgp$P{o5Z*iJu^@Y+YrK@&WlwK^N8r$>@Y zD$O!s!{YKi)fS%1q`YT&`D8K-k;^0#05KPP??`2&+COV>a6w~mbcjb@<aBTBThpvo z1`VgPUgM8nf)&blLpACbxK7T-1Bvu>SL=hd`fA=h5)2}Z%-fKsgc0y({#d(GjfnJf z<4Co&pi--Ik(>sJIgNG0wV`V7ND~QSQV|`JbE^Z5!D?4yppqA5fouq@3uFZRIj^3y z5t6l>d4`6YRXj;7S@Y^4L(4)W*^!qpi5!-y`3ZVQWu!8M$F#xY<V2FG;mKxgIUung z^ER+_J0&7Q=7?&&+N=%C8md)VOe!R6xe;_c1Hk$~j8To0ZVa9ERgF-Lk&T?KR-U~h zsv|koN!42;m3&x<sp0S04HVe%)xj|8ISpeY=Q^$7jm_HXHU9Z3kPTtphUx&Gn^iSl zj7Te|8_Dj<$eJ*2L$TbU%E+olb6q6isa7fxlZ)L+G*&k&>pDh<h7u7rBW9qpu(Hl~ zJ_&{;=?T#MMnRO(jihbsje1vYUC=q8bYh;-SW?9#r@=b`h<YMq{4_)lcZ{I_tc}#- z7Ec|dBL*@-tIwruyYJ+!oqmvRtD`d1;sxX>hHIX;uzP|CBWt-lGTst9TLE25E^O4p z=nO&g`kJF5&k(@ts#a)jmY6V>FhP#GUh`Aa*H+mez)NL8C1yb$gPNXG6#B!MVPwPp z7c!avUiYjyNA-8m1bfN6p5D$y3)xeV;5m&FVNZr!&%BN~3;nd45$MnAaC06_iCAom zW+im_MiQ0=3CwDv$IeqM*F1vJvqnOkVP)AfW!4Erx}n6+6PJ#8(CB+d_dJ#b^AmJF z&1U?N47sJQu6#V6g6V1}iqNcEavK4WO{tlLo6FPF7EYuSLV9vrlw?!xGNnMo#I(3R zTp3tvO}Z>m5(0*i#p10ti20gb13+qYU9~>K9t~0~mvUD00w7GIowvJOl}zK4I`Lee zY|L&nhWb02jdfiOK4pr?kQ-gK3KiB-8ydo3I8s|Z+8AxoL~F3ha@Afcuo8~%OwllM zS)?tGG0&INh}d2agF<(s7Cxv}hqJtVXRA#tA=B&hREMe+-rL&<Jl#vuI-W|o1A}*k z%@(Xe%=UVHjW($Ynb5&xcviDn!BksUO;Di;9@juL13|*PyyI|b%8FS~u?q1ToEvMI zxj7y$%5s@<B*bm_^_3mm^E^8amoAIM(2ZoPq_j9amQ1EUSMY47=gQD^8+s{&<%%iu zPzuU(tA76`&2v<<jG5OOs0>Gi*|JL<$8#FVMu?hg=}y2k&!Y5_u&%f`SX@5UE{wS2 zaOrrhW=e)q={QAcU%X*)=1N|`>CyllXTZ>$M6soqjT_1vEp00+u^FT{(sDa7-AL+z z4MSfjms3e<xP>J=7EV~KpoiMPI)oH2(3o3ojWkCGM)<0ZDRFk77tSS^hG7J<g^rVn zdtR>5xo)`8Oyt4QnPf|kdAw*$QFJ;+E*ll0k<-Ln1~a1466Cx<gBOu&K`w((;_N^# zU4qbvOAsVqN{I+O57zw_S-5=?)43#CO~+7WH5+wv>6{m9*sVBL@;+)(^6W^jw>soE zfRijv3~S8UH2ZLo9A8=G$%g^6wwhzN^+JoB2z%JT8NdeRz}nVOrL_i+^H61=s`op1 z*|e2%R!l$23P)=>YAD4z5|acY2C|bgJ3z5DM-8P4){Gdl*15XgXqMzF<T=Y&05_{N z->eMzwE1?ZbC!}wX#2F3YI_N%eN?@1d|gw6HLfYCi0O2?8jZE1!_iKa(Fj;ho}Rb1 z)twM<x;@p^wN|itGZE$VSTdO|CvKU!PMby;CE4j<oU2yW^<cY}uPIHcLSCqGbhDPo zhtY66rcoOhNk1FVU_7U>xZW%&Db8`yOBZy_SyREr<*F!?VZ$jEBRlKxx@Ci&h0JY? zVzdn&;si6->0DP?J*#E3_)}+;LT;{w5+5qp3c1}IF)9o+sVkd<&ZcF0qCBoNmuaDo z#i)=_a1189pt^1)ZwlVHV+6AFf+S(rr4X{H-TpaPsIabv)0_lmBG_AJrEY{g*~<-Y zWbtX^4I)`S=B}9QupLTm##2KnYI}T@!et%LYM`JJc0Dze3igb&Q7dTojyTE1<C<!U z7g{$OrExHJsCRU2WKGnY@W>e3>QRQ{3b8aRfenUOz>q9|LAAM>tqgQ@mc}LY)VX@x zfl<Y3$((03f<akZ)D+L<(^<<VlI7zuNYtaJhEmD8v9gZmG=lY{j@Pa7^pC~Ev>_8^ z&=IW-{mwluPe(K|*nr!hw=hFXjO<^Wx?P`K5|vMHRC9)xO}%6-VH&btiuBf2<Mj<o zFhvk@taSMJYcWGI{JFIj1}^qolY}P*GV?YJREO!UZkR1A%(zC&6BblP2G;OSouVjm zjaEk$!eIoKWckrH3faonuK6#vY7L0S3i<>jAl!%|F;4fA^DFhiq3WPdahN)&6a~C) zPo>ssr&{1!O`M;o`v{W-ctl#n=;N{U+F^1-PEne=qPh9WkTwFA)xg-)Xhscap{F`2 zY<|((#<EmVtwwyKxo7}yDw_PQ9Mw}!HB#LeOxPGpB9_GXeC6RK%&Nou)GxpKf<<|O zVeDbYsWI9ds2*Ku)`MY;<O@u%gQYv`hpen28X0tOC?V>1kFM1R8^^aG6V_i^qFkHm z6I-{{dhqg&qE1-~rFYJ%+uL!Y=+4-7I{!@!QD?WK<eMm<#N#MF@y3kXdA4b%3c#Or z_8Pj#@pip*Sb9-;lt{I=;>u}fY&qGTu~;n2Wb%q-NMdc8X3P%KlI!iTpvpwOy<(Re z6;V;Z>zd6eR4Cs_v-KPBQX0LZD+g#DP<SetW-gOkpw|)2(c!3*LhIAxzu^?6<1UNK z=RFsw;k#g)8TUTe{&Wo_Dk(?yu@}aqNTI;@nr>niDLAr~+lb}H20DOKoJ;gZyp%?v zOah&}RH$!`WgX4fHNS?3Y6JZI0hLzB$)(*)gJ+Or9o<UO`W%a8jQzBE95xlbK<7;8 ztgj69&l)&xwAQ49No$!xffGub(^+YG$Fmx=&FD7fB88B}<lR!zXP1&g(vHDoO*5h= z+Z}&Q#F7%SHmDG2>m$<2$&p-8wUjO=X<L9Jb>Os1%BZC?tD2HD>p4~$b3QtfG!iVD zbu9**TsoBqh=yr!gmTkbK4(Yvj~HsK4A%ry2F|MIMq2tL9PiG!l4CL*>=)CvL{v=_ zi|2&WW{*5*LRQ*va%rE$SlBaiS(ma{)X}XZotiNZLY&2bW2NoeTiA%7!GIG=yXP!O ziIsOeuhF8}o})$@0ncjm;;>FqoHMMfkqZwB1yQ5~pzD@()KsuQ<pot_Me=hhqx>y+ zV9WAijrhG+sN=YiR$mi4{425J&)OYN9OH9MjErSD@~lX{G)GWK<cO#)&AzaG$~ZTQ zhov~F$M{TB??LuQkCcm!GrKp^tlzxaWxIp{(aNCOyK4L>nHKU?E2YORH&<{e){+5- zOS^HuDD60q9%@uZ@E$(i!;R@ql4h7`S<d0oE-s%69V1CQj*~`~!v%s#geNn(1r>Il z(~D^;m*OXub19-iiUub0CYX<U5t+$RB`q8ccZj_-XOd3iglZkFj~|6Ekh?eHO#Gb2 z&=8L8=g$?VX$frbgwq&Ec$$`&S1$-SlIC}|%um)3VS`a2)!Ajvtk0{rM)@kaz+ked znZ7l(mg(2DI?IMLm=a<({D~dcK753p)4kD5?u%#eQ=B3#erjTCj$hOacA8@~yQA&M z!^1d^PovsMWo2FrX|9injv>>mEBv&elwHE$lO`KsXxPljk}Q{bSNv^-O5&$kCmpM# zO%67EB~3-L-XcBa`ZNQ70b?x$Jg%{zvbr`9Ka;sqz%J<ZRoIsbk&@;G8o{?8DNd0_ zyWfSDfV`N>He9b|5>OC#<VenRFeR<V=!7C|^h;Vm(TWp{Y_&~=V<vUFs_XfAD-&bC z35=qZDA#srikff1hLcNLTG*I96wEmjDe*Gi0{W*$CHg3+gb8we5bs!{V@v^&WUxtL z&SsmwIC^(j#!qPCtsg#lVXY}P?F16KXrXNsH8-slwf8tmX!<sv;C0SzA1m<_@doe2 z3MFLUkKw&n;m9+m!7fQG4ECNGiSa>YuUNf|AzQg#j07w*WZICrH+JC+ME@*3R^$=^ z(aE%;1J6dtQLPlpG)$0|^3+f&7|pn#9myQ27dtYn?L=g2v$Ni+@}p;3$`P$hP&Zn@ z)`$MP2Twn~4ULMyQ>_h5q7pgu)Lbf+YKU2~lMCKe>SVZgmF7oqoQ{#8k7L@2iE>2t za%hSyXGT}kxWqy1y{|O{8KQEj8Pijii0Y-nGvwBkAqFxypScL7zG|q!PDwKHfFEd< z#*m1GNP#8SJF}PyGCsD2`txOd9JP?|faf)+3j2%2?Z~-Yt3=Szz2stB4N<}!Igm?K z56K1fv$)>E8{_JrDXiFPz|3tk@(%TkK&kG6N{cPsNf=F;CyGc$C~0Gd`jPIEMs2Wr zguOenQF^+Kg_eQwa#D+O29r%y3yFqLjinSShS8Z#iZ5ztBxuNyTpQVfe9%^dDkt*+ zm&M{5Z9%~?xU6fpMPbL`($SG0O0eFb$k*YX<QjUxuwyX0uCXU&*;7Ed=1ne9<{_KM z(f(P8O&99I84gOlm|z=AAjMMQTW>+rbF4Itz`<v<x@0}Id*g!2@G#z7$1}o+oXgoE z-Bp!KfRm5df!-p0XrvMy4r7|3K&ft<xVZ%<mfM+MY2lqjUfnKgM~@|)g*cN&-f`1f zw7kR{B>rkKjLxVtvDgk{r4zsea$TCEu%)ky(~@(!@Yt9Wb0^2#@2+ZnHUAnprswwT zM939NoZ^Vh^n!_yvrl~t%_`jQCFBYvku66j$!2Q}UUSeXTC>KYXR(-^c2c<&ww2k} zC^M22f{p4r{cemOp5Zhj(b25387J`##c&q{?iWIu`PEZ7o?gJkkub8CD@Fw=9vgn9 zB4lK5iw?!6BK34DnG|zGErSEDwCTBsZ#bhEIN8gg^`zt+S<B(<(UMyAcs-DqZ|c~C zu8$@a*abbr9~@yazrCJg7xdhs-naTNKF1F9kav1vU_PTvCN+|Pw%+@p-A5+RXk5a* z;^hyG7iCPYgUJh$6uC;sBMsPG&*jf&-$&#)Md@G-n8#rh>^d+fn@6x+;$jINW8X&p zZCq~E(7oiGW)<f{*-FStdb*dSP0hKvU!)@4Q>YVyBo-mP!_|SJ?E>FxqV`i!IC3Bt z?C;rBlc1(^NqSF1o1=yH1L>TX(r`5y)iKj^5?nicL6xV>&|^twp%@3rJ1*CX_WJV( zEW^tNI{;S9?g8Y#TnthCkaHYw4_yyVM;1l~)9^#4(?M;*F$F(iVq(te-5bpoa{sKA zt;WzO-#05Ta#`LRI5DE-5_}WLNf0fUX!W{zy34zh%Q;>;+B~$9mg=SE*4D4%-z8Wv zNA`01by(gWt(c{9sYVmJ_}DxpoAbPe-qS3|S}K$3rf<fAF4ZQXv!1gG@`)mK@<GX3 zBC?YwF)HGeNE}~RYfWtx+gJ#b=(w>K&I>nd8y1Y>fXeU?oA-v=u~fmzj`Tf0)?CEa z-C>->iKV;Ybf;9oGGm>d>N<R}5_~olM#KaPx^2s}$8uvWoar0E8HCch$oa7*d0r`L z!L|u-iCB9nUrB^{)GQ{CeYI5b4B5+>rD@a_-FnqV;2Kse6_-uigd+Kv?bA@&G;@ZR zbuI%7k95xPvWbQlw7Bj@3;urA7rT<2;ccaxW!xTFJBu>UINqjfT(M|eu6bjMBy)zh z+1HpIIHIss=*YQTc{5D5zf{AsEzXRJ*ubMN|Kd4!lIh*u&FY=g*_l_R6E@Ub3T}~x zs`~4<+Hml_yHh9#FkM;-mZpj`nT}r5l_~{XuNCbO+oV~lm!j2LA;X3k$hf(AQZ{EM zbr5xU%*m#OqH(HTCa~ZRa=LcL6dfxe?`@T;d5J)KVWTvejupt8)Fey9u>yI%DmDUs zMV`x%!_<<R)^i!h3pIGViF0jSu;z^}*Q774j;>bVpmh~nkh!FV+*}JERnCP6zhb^U z!^`3|>Z}pI&uwjcdMp`FT|;@t<yzs}uUy{HV@YQrDkG$a<Q+HHs<ENp*(REoa7U{n zgN~fb1sf~Yl-upFKk48Sf8igIy)At>$@w~Di|$<BJ8q*dlR`Z@xVM&nu*9`Ilj~?= zp|+6-%iyw$>!s43mCGCdj99EC8;SMP=-COq@RhpDi8t$3njr)0pmy<jb{rqApMoWA z!E7PE5$!mvSawJO+8b|2K9^BL@^qFOoqX3;)AEkXwOr3p)NmXwoqVp4n&`PQl;Tt3 z>D;E<2QMl9k&s`e>GD?02iJE}+zRciB)cx8Hs^T_Y^Wzw>glnhi!(}@m3Q2<7TY#& zr_RJ;JB*dKzy!E1`<~UdXe1cKKxScs&Yulw?;VNWgEV3huODtN*f<O^kYS#Ni}aj= zBjmIh$j@Lnn~cTeF)fWgit_R~i^<c3v+&GzwhY<J#V;YOO-J@}@gBC7b7U`v;wwa| zX<h<@e7MVPO?f(#<Zh+B7!h-s+Q1reZc*XKS)C~7r8LM5Um>+Uxt8I3P4d=bI=rZ5 z<_spA?w*VNvZc7^s$e?kC%OG(-v(<@-)3I-#AfX~AX`$1yig9B=Hm;ud99k;<F!AR z;D~dhIgpx*bC$Q66Wug8N@Y<1y1n)j{E^^8g@~->2DPJ;{*gw1D|#yq=^|6>bo7R< zLm}x%n!ma_f<qpxuzLF)N%OIfU)A3r=3h_yO!Z=mvcT0^>o!sf2i6S-h8Z=Ns;9*) zS<AJGX>=sRuMg9w+|2V7a@q1kBcn@<%FYy2kT6r6oauB%f(Hs#N1B?H^GEp;X9b9+ zCD!MuV5P>W-5YzW$I&wwp1BW*T4uD0t~Gw~4zYmFB_juoxv2Ld$Vrhemjo-Y&2DHY z(iz3h;Pb-vhCL^gj?TkzaepSx6FVv`);ULHX4lMm*a1i{>N%lwSt=l2OhqSiZQ%_Q zk=cy)mzfw2*hZ3iBN=b60{@y!Bj5*dXbwCo;muT{#O=PJ<1<Y+IJze4BXbNci=&_k z<8<gS$cKxjVAC;}P2a~CggqyeE~_7i7wab+FMQtIsR2)jPOipuN&ybR@)szcV0h8N zXX09t<>L)*=rT!*c&d@YM=}GICR;y}kS7|M-~|=&?b|8(v%A4MT~9E2aZ!xut1@)G z(dk*_?%2^5&HxSK2itnkWg0VKQR~nnlvd!JqBQ^fBerC|{4mrouR2PXTm8ehQ)W#v zpd#M%MHmT&BVi3+I3RDVaE_D4mThBw;ZqnRAM!|pTygrA<$E9B?o0Ru&9G2HEmt}P zYB=SI(gH0v`-wPcL*dM<jE_`qgj3tWLHfAeEc#fr6j=%R#TfR3&$$a0y@c0ZS`w9~ zTglNu{yJ3~HYCQ6`v6Kb30b<4G`mQ>BY2a<W|?F#<V4bqQQmQKY0WXxXcA`f8I~L) zdpVmw{+z-nBy)z5#VRnbkw`q|84Wn2sg9KD6uCwV4Fx;3?6M9j5>E_df`>nsvd_IC zq{;!-9NF6o=eIUaLo_maBR*AK0V9+xRF;#qb!EOD?5`OA3;p4TI7z0vG$+vMAE~Y5 z>-L1E6Up^ywMm!zq$3TvUJEWhNoOrT(r9DjEH6K(zr{()b5=sWAHD$iO5MhiYdHb0 zTg8nu{UiDcqP*E#wSea}R$<>Zoqxvh(yK8nBI7Pz*W20{B5t6C9S!)44Ne_0EyfMB zOji1F{D6N>!4yM*lx|&rP5={y0-@wueJ12>;Q0^F@Y-lS-AmSRyritu1D@CDsnYgP zUsrD-QH<lIo5tIHx|%|!*Fm?_rlulppvCGUs$bG#++1s<(j4ip;}oDN&O)Z36bX3U zkyfie+V!#J%s7FxdB_TJkho(7^5$_#$~#sdPwhS_Z5V+pnov?y(*wzxOI@)YQp!0y z&_kIgW6*Rb*{f$}(X81NW55dK=SCk1as|grY0M#yaK-1*#AFn`NT`oTC(ew~(u{&^ z_%?zk5AyC^L`2qK<d;TbxrLbc$A^(Y^W9-g%s*f(jZ5$7xT|);7=uYCH*IH}oYafC zKx<=t0Dd~sQ3V2FJiW(P*b*kNsyUD*#~$R$yMKO_?~}%KE*W|I%SFA<KRwB#2~;@U zjmWU6Z+e8BUZAk-MRX?_mYWuGC8mFL2OEFJx}iA>D6CYPJlV^IBbB!9*10shH|x<k zm4P+9uZS72Mx+k(DE!Wifaql!>#)~Zi8k`BXu#td`sAZM=E};?#0ssD&ot>=Y(l}1 zBRP7nLZ@8VjMt}&6d2!X`YY&yL+e^8WQFo!{Zb~Zw5w%98ll9@-q_bzTV*>&)_TbF z_G8!mPTG3(XL7ijZR6WV;SO_EtvVQ<r1eS(ncRXY^r&#r$Q?bFoDCn>Y{%6_V#F;o z)=8(!sJK(Up&{MTmL<wE^H|dMW6M-bX~~?E+w2|UZ-89t3^kV`I=#aTcUYWs$hBIX zEjpM5y(oK(ZY5Dbx>_T_oNVRjxCuMCsbjaa?u~ZgT=<MTrpJ<aOffp<QHS!5%d}eh zxE3}E0w1SdEo5^&IvBRDGF+}132<F=ae@7qCz04zB#_XxDQu(cCAhY^(x6Sukw8MX zJjYho2_$rVn%t~6FKDamCAfAM))(~yoZX^s$mg01X3yy@*W+BSh0lX*I?N42<rc~$ zxwXY}dZ(xA$<SlTIojWRF^?o|c!7r5g4$6sler1(^mQCCqdc37IXluj=)ksmIXlvu zNkeKd1;`r%;>+2wUfbwqIxg2b8jD+c98<NB^HLhlTCqNyo|DM6^;NFAIipX(XMV+4 zixRnZ;dQzz70)Qh(%hhJH)d4}a@<n*1}Bfy-QvY4(R+a+huaNazU88toXeRGuUJx! z9!o}tY@J;rZke%;?U2hN@$7;g_ISH1t8w!(_M}$vH>hE><YX$8i!F8ZVir=tM+IeR zU;?GOrH_rtyf@+HVoRpCEK7pp7PO-4q{F;-S#Da(CnbK2Op=YV7m96AFI|>e!%J!G zsJ2Ys?`kx*5clh4@fYP{OSYU$4_#&^5-QlB?zdFeFq1kvDg@iFmz4t8+<i(|<(8R< zm%4msGF{_ZHy29SIJixA!Aoi6_DUl?IG0ISnAs*y@KPGNz0x=_BDuoIEtuJk>oJP) z#{5{*KjmerOd!^E&uW}v6Q|=ct>dr+NyKBwkz8K`b(<*2c_i(aNge<E7t)ohdYRk; zz2z(>&QL?C^bCL`4TnibH*mOypP$I~6nq40%B^%xP2a&rA}l5_oz*zsr094l4R-$r zPmWOmGt_Z!qEfLqUZl|+q?@}Fg^PqOa?DW2&4yC3I9^J_S8TbW7YX&<JS?5eoXfO& zabAT!8ROsN`4Z$zu49I(#1xXAG<ppTRxVGQr)H?vRi9j3rep#O?m$aiCQx*&Kt4U2 zhP2yNbD7lJrgdsxu1?}8iV}HDhS#|c4h3)tU$NX{enHcGeOjvM*i5h0NpGiUTOm;a zxHz71bFCwBLvk?^L(Qdd3-t)TnB!OexME_gT%NWl(mhGe;nKtO5pFRVI9OyDT(*^5 z4&e>9rZdU>kZi&-XEGg@o4B@n7>{Z6;@*J7RJF&_bIB6HwA>JU{IXq6SJ+zE@|fk( zm93J!8SF<nRxaOHsST~8%b1Gg!dOhcS*hcOP5wQ)OAz+l9V?gDFV@r5&sbjG^bFcr zPXC-Hz0)qFD<zWD$8%iTmvAG2T)Cy<pjj{ikurTZVni(|GU24ktl)`hB_6!Uijyj{ zg83EyD%jRvWW)+3ZQ#wsyu>7eTW}&}`Yw%a$^#~xRGF0>=LAOLoS3<VX=6d%M`<aQ z^QkFF6x&Ejq)gw{e*1JdsWL0B%-UOVQe{@sB^%|YUCFuz&?Xs9B$)<Q`|VA%%}HMU z?Ty4a@qHO<CdJAvk@EQ|@?GUcsVNt1W6NcHhqjzx8(Zn>E+%US<>YF#eUhA1S$fK= zK1vW1Y-4Mu@&;2rZ~1o|`cvV21S&APH!{+~Sv^OveU~Dqdn0}K+l22IbUSfNNU#F= zz)2Dlw*HYE1urG_?UQ+;i=5mpq?2|X9g<Br1&qI6NDwjb_0Jm`stvbltuSlE>A)Q{ z*bb!Qu`Xdmrpu^ORQ}alk&hJjHP}R&EYYEY;p*TbzjsW;K73MEP<O>a-@(%j1-i88 zT^dW6lWE7JR4^^dB>WTLd?G$+<|~=1?m^i6twb(Z@wivavxaJwRum1+bf#kpEzqt4 zULpEyA%RQa+BlfE(<^IJS^Z%o^d(tL+Bj03)ofN!tU<QPw}GbX&s>VURzkj&kfr)a zl80NPxU?iRoL>?j(evw=%{|Ex+g>XjQt8l6WS>ZMBqL6|r8kL}R%ya*VhKk(C`|Ck z(PDyZE|D!J70#%soJx{lx#?6`W?4dv2gN8U?xBv!_0hNla2Tk67Opv4v#vT)8_><( zJyZI&8aM|b_uOcKDIPo))K<dJRf0#&)ZYjcnhaP+G#jJ7129o)ANqJOIv1tvHtDcN zcWpQs>FBCe)n-Zy4PKwP4xTs4{G2tlp+Qs|zOJB4I=Pn~&2H4|_~a1zpS2P@0k{IT zolILMIv?Dz)ZTzT$DOb;w~F&$=Au1117665p5uX9!dzc#HtOrJxsWhDZ&62z>h2;6 ztByLcc^mLyQL3zniSKYb8l&}8F11TAq_G=27O8}EjE>;Km}Cz0;hhRT{6yS-FfxtB z+^~?yfng-g;o}&Tg}$~hrARj{B<c3U%48iT8*684)?C~LNS~~3OjyJNzp{Z3i}YSn zbg3koCfEt3u0~_+=x~Bzyj!Li`s`MlnxT_72|Z}EO+NVSOZS9<MZGB^HYHcVZG3{& zjq483Kz7vFyQ|H0wHA$vDI4ZdE-j^=D()dJ(Zv&rvy1qsGhr7`X30&#sHq;j=*3q9 zDK*1MHpAYL#;`t-NkfBfjp4&a{4$olD>D(Fxp*@jou1|-b!h%me6;#1D-+Uv$SA(J zNO3U7NRSuTS5l9lU%4dN`uifb4-uAv-RWSf*fhV`FI&xU{gG5ome*nod`X5LauYd8 z3g<WA#zV`pYO_K9<Pwb$Jt>+*G<xg)Gp70b!NNHQ)+$&WrKVH*DvD5;NYu_E+eEgL zkC;Oa-y<6!^;GJss|iCm9TG{StAd~4RPva|-Y^35`F>KxIPHwYH4$_AC}w<x-dP_W z9hr|_G;azR|FK>gi6?<NLy>{9OroUd5|Y7493K`YN(6ONkV{p8`P?$hnOPk94;B~K z>*&1)J8IP-w%5@+O6$K+5zm1=p&ilnndAg5k#LfV%=(?=V1;3+2@`f5nySfVHQP|$ zxL5e^4F`n3-LL)aAJb<}KiK@eVwVduA;z2_#k3Qp7<`Wun<ivpE3oQCnYbI6^x{mM z1RVO3Ol+EziTlQ7Vg>N<b2D-K^D@x^9I{I$t^%e$KNA-NyN-t}uoYPTf=t{A9J(uH zfcl@6cnIitQi*GTJ^rG^R^SX^#TF&*0uK8tc);#kl{oQlN<0emY*XUEzbkPOF#ahe zHUOJ}rT<XkHemYGN?Ztx`==63;89@7GfLbF%=niQdp)bfX}~sM<-ef=Oxq3}V3+?u z2Y3KjC^B&^u#e2ddBApHSY_fNpd-t~)xhL2nK&8P3aofeChh?)8Jmd>D3j|>l49@o zN^vIe3^1}uiaXyY#b$)v2(Ld`inHG@#rRXCI1$(i41Pe0`+<&ArMMBe<bzU7JWYyI zfTw|x)1ePc`;ZhD0=u0l#Yw;xVC9FUxCfYfmK4_lQ$7M2VC>maO#iqP%g%*8gcHw` z;tb#!VCWN4JOCVdz7*F1Q$H!iMZm5XfDXO+AC=+;VE=QV3rzT!6i)&xKPAOOz>yas zAHbAPOK}b`<|5<;*aocm3~T^B7fW$7F#WSqTn<dW1Z4tj2kM`b;t62IrBd7rT>E*X z;W8=C2gZE?x>uqcfPKF##kqjEN{S}%5U}tounWw%T8b-yNnb^q1s(^ExkidxfoWfp z;sRj&wNg9`bbTFZ_#(>vI@tOK$`jZOEW9511g3ox`2@z_AjNv%5up29Qrr$4b|dl% zO#QYL7X#yOlHz3GNnq)B5Far8X4nTNeiwNJCftJffqlM*^aEpVMH&J1eJM@_o&`?2 zO^T<0H9tUnK+o;41?>Mr)CDl{4#Wd&1J?WqbqvhDQ;MsBDL;l?VC-E|Yychu27dw> zVD{aR0rvVS@(XMSM(%+OaLmup7J)<WMcDz9e~vZ*JOd2fhw=p${sQ*@A;o#XxTjIC zz*b=JpHkch9Qh3FKZQC#xZl4}XTZ2;QJz50zoobZIB+}43K;(%<PGQ+cn*P!C7v~< z#0c;ZaAc;$4Zw^sN=$l=5~l*s0>fkRYy-=ltHeFP!f{I64a|O?64wL!?xMs6z^>0n z{{TD%tRJt$<G{)nDDg0`Y*+Lpz#%VG;%Z>(1U&1&#22Bj0k#8cc7uK3@E4<Rn25ds zSn(1i?gS2<q{J1#q?amj67V>%WOw8PnD#Q{VX_jB09`Lfnt&;LC~-D0_7zAAumxDT zC(;cZ_DUtL1SapL#96@DS1EBa@C>kKZzb*rI$o{BwZPs}lsFd{_ZswZz+=GDeU!Kz znE6^It^%e`RpL@$;_J{a?yJPjz>L>}2kf^W$_Ci=4N9B|jG2bM4R{FXdZQAz0MqtI zSpd5qfVhC|z^Vh0R^YIMkZ)l3>8KB2<(ohU4x54W0s9_|dIau$GiZmPp9ZGBMTzr) z@rNpL3a}Me@m7>SF!wOX0DHYniF1Hm4oAL#CxBySp&tfj%vR#*nJDWyh!fZXESsyu z9l(rv$SW|R1LfL<aznTcSak&I8R(mj^Z^~6N?Zr*d!!PV0F#bF{(&*jc?9TQpu~;9 zz6+6lV8S9LHUW<V%es*cV8+`K7cj90@c`R^Ti=252WBoqI|8P>6L|&39D{ZWYzCIU z3uyr6FGqU@_UlI-0OMD{4)7GPs)8~D=C4FLfqe&1_JA5xq7FO=^i+`!V8$vXE(i8p z4H;mUHApM41z27~n+0Yci}V0{u7wORVF+;nTY$lJ$TP644tv1i4YWUC@-WH-*bWRG zhw%=W-$eZYd$qs=wgV$0$QRHv3VmSudXyQk%kiiK;4xr%FUoi^o)v^=AiSgx<%Mv? z64W~|^JtVMu=`S^3wQ#UcmhIT*}GA<z@aCitpStYgSdfbfMZWWSpd^FA#Lwf;wIn{ z{Jq=zPzJyjV8zKO1K{xYL-!Qe2c7_yegO3a>~|{41Q`4vo-JVhX{Z<AtkV$(aO@e# zJJ9tZJP*M1Gm#Ep>{)1=z!qTnNAS!6GtO4xGGNk2(YAqYz^Zeg4|IGC&jhgdxv&jv z2Rc55xPa*wq7H${pGMw*F&ClifJcF4pFtS`9T(&IzW`}Kcpt*)pM?&v$0g`XfN`Hg zdVt4)V=hHm1BZMb^$yfOj`k1qoCi8^=qEr2rkt<DdBB8EqP&2ofjuun8i4!1fH*Hl znt?sPh&~T^3b^A6*!>dn3G99)@&Y^yG{1~?0Q6mjvH)g$1#tj-UX5oN81q%657-R! zU4woInEo}?7ck*kl*i3zXWvCSfhD&f&p^lbP^Z9*ThU(u`+OgL5isF4<Qdowbo>y{ z)(=otz%jR@u7O)Yn{fwpfPH?1JOUH%MBM{hffYZ7ePH%o=#POJKY=W;-`!}tz{H=z zKA`Twm;qdKAKC)K`p;0l!18-hr$E=w(dL1f;7|Jn+Ay%k{m=!r1I=F|JrAJo`xWd1 zdpwA=0ONiQyTFsc%7^f*0}FqHb_w|vkiP|gANnwKfIWW;9bo(;NI&otu=01Pm(8fZ z-=pmU>QUGLtpl|6_<J+3<PWF^;E=~qPk#grWxV|BcwT@d*CAcN!f&8Hfw|YCK7d2N ziS`IgzX5dz?Ds9SF<|c-F_#9;_%_=8P3U)lvEM-(2L$SE6L1FNcm_E3al`=}`6t){ zE_edvvs)%E2ex2saLh!^fq~1hMwo~-!ju<g;v!%I))A*{MPB}fv}{AW_!smrPo98z z^8AxAKYBmr3};}@gZb|8*_cz{@7vDBT<HSfW0)f%oR7KTdd%TAU|#qru=H}w%YZ{L zpPO_A=E%U)z|fa4*8r}^TyG!D^KQdD=8*d_&jI%QCFVlF*axII0eBKv{wpc&0_Hv_ z#ZAD0zlJO@<sr!Z26Dg!`1?tO$2=^>-9X20F)szCJ%YK-?=Uw4o&;8I1|PT>^tr!B z{EuQ@iSR;%<Np9TU>mUVG0gLU?mxl~Fzs=~3GDSJ%(sAXPat04NnrV(VH4<h5_tlq z{srj)cG-fm05$`Cf5m(Yn7LJotAHtg!@LmKbsNeL*a9s7yA*c-hhWaO0duqsn2#MO z@vM)*IQBC1doM;?nuz*-9qMT^o&|(kr-L>V{R42tZ1i_;#`DyNcDw=YX(OI9gqI=Q zbOQQ`Q_-g1k9K=H#*h!=Sq7fH46;|C-F!ib6RySBgZ4TZ?QAOA&DcLfcdQV7VzF2v zjuuPBGVxCF4snclmsl?P#R^doE5(2q6jiZGtQKoTO&lxMiXpL1)I~!Ki{nI7w8V%Q z73;+*;sfGT@j-E#I9;3}Hi+ZJMsb38w>VL}N1P<yD>jMuiIc_q#fQY1;=|%B@ey&h z_^3EXd`z4xJ}%A^pAhGZPl^k~r^JQg)8ZoW8F8`rthhvcPFyN(5T6&9i7$xD#TUgD z;!EO6@nvz9_=>n%d{tZ{zJ^ue*Tr?>8{&HLP4O*pqxiPCNqk4#EWRsl5#Pgn_xs{D z@dI(Y_@TH%{7Bp>ek|@1KM{9}pNf0L&&0jr=i)x`3vs{rrFcO6N<1ijEgllT5f6*s ziburn#Afk(@u>KNcuf3JJTCquo)CW)Pl~^YE#j|YtN5GPCjKs-68{iSi+_q|#J|L| z;@@Js_>T}$N+mNnM!rBkM~;=xmE+{|<Sz30a=hGCzEDn(FOs{-7t4wAC32E{soY(@ zOiq?BmwU)p$UWsN<zDhta&P%+IYquk?jv6-r^?sKedX)re)0`+ntY?&UmhS2ln2S_ z@=bDvJXp?@Z<dG1x5z`~TjgQ$ZSrtAOU{;a<XkyVcE}^-eAy|Flt;-fxj-(Ii)6Qa zyX=v@vQI9SOXSgVseFfACf_NKk?)erWxre@D{`eAkb|-+SIO0KjjYLI<ytu;*U7qU z$YFV$Y|54#k)v|GJYH^)8|4Y|-SR~F9(j^{uiPZxCr_5|m#4@N$W!G9<!SPCd4~Lu zJX3yHULwzuACYIvkIHl8$K<*4<MKTD33<N!q`W|WN?s^GEiaOvkr&I)%FoG5<>%#P z@(c2E`9*n!yi$HyUM0UGua;kx*T}EQYvtGFb@ChXdif>!O?iX-mb_7ZTiztUBX5@9 zmAA<6$y??3<!$l@a#uA$?WSI+UZh^ECaRaHN$RC)cl9znYCn{>%RA(c<el=z@-F!k zdAIzjyhr{_-Yb7D?~}if_sd_(2js8hgYwt%A^98mu>7rjME*{0mcN&e%0I}*<R9hZ z@=x*!`Dgj0{EOTo|0=i2zsYU#@A4`65BaqGr+h~KOFk?AEw@WN_DU+HGBrj$M~zj_ zRpZq2)Gq4zYP@=Zdb!#|y+ZA&Ua9s{uTp!fSF0)NHR`o$s@g}rPVK8+ul7@KP}9^K z)&A-Lb)Y&(O;>MHGt|Lqrh2nFM7>2Fs@|#&Q*Tp;t66Hcnxp2bd8$Jlq2{Yjb)-5< zb*Tkvp<1N6)!S8%>Q!~sP{Zmt)l@AtqDIwvb-dc3R;ZP#Pc2qU)X{3GdWTx3-l>jJ z?^4TEzpAJKOqQ!^m0GRVsG2%ftyM#6o!Y2QQ14bJs`sdq)O*z?^*(j7dcQhFeL$V6 zKB!Jpr>is6ht!$s!|E*c5p}lus5(b|Or5JfuFg|`QCrks)m98p+tlCHQ|ce;Y4uO_ zjQW>)R{dLTSN~BWlbOo0Y)tl?Y;5)kb-wzfx<GwOU8p{-E>fRS7pu>zOVsDorRp;E z1$DXlqWZkLLVZbHslKePQeRP5tFNkS)YsIt>g(z{^$m5s`lh-;eM{Y_zOBBaZdTt_ zx2W%_Th;f~ZR#fV19iLlp}Ir;NZqOKSHDz0R(GkNsJqoqF>U#ox>x;N-KTz`9#Fqh z52|0QhtzM>!|J!{5%mZ4nEIXCtbUJa!ynb->QCwk^=I{@dTur@dtSCn_WW#o_JV8= z@d~l0c%|4&>@8j;UM;4G*NA<@YsFOYI<c>Kz1UB@K}-{G6#I(<#DU@<F<rb#%n%2Q znc~gj5b+jqsCcV5OuS7TE@p|@Vvd+A=7|n*gqSZn#gXDD(IpmO|7;P~`)?OLqF12F ziCx7D#CS15yimMI>?U3;CW@DcN#dnqckwbYS-f0~5zi50#dF0t@jS7Mcz$7A*fTpu zyfTZ&hF4{Lbl59<byhY)?49v3VxNpgi78pxIPse7wb_3&R!q&@Xt8hh`fR`K4cWBp z2Jyyh|LlP5!0e!G=SGm%Wi*CN&)$^%PaH>PWCv$6vo~jlWN*n1&EA?Fmc1=IJe!rx z&gNuuvm>&3Sw}WM>&%YKj>@{S1zB&lFk6&$XK&AXvc7Cdwm3UFTbjKiTb8{uJ0^Qq zwmj?4R%DfIWj2rvX4Py}wmMsr)v{x=wb@X%E~{saY&bhEYi6x%Bpc1vXUAt7vW?jZ zS^0?e?u?IVCuU|;druaQYbRy@cSp8O+557x(e1t2`?LQOBizZ^DcOHJ%6%Z?<J_s) z2eV7$>DkVXcBf_kXUDrUvj6!b-iNXeXJ=+-WiMAB$#!<^`)C%9erIQH{5vO$N5GF| z=Vt$JkAff1K9TW}@VxB584J(Pc03whko|voJp5!9j)<San0R67sJMIfvdoN(le6|? z<IA)Ec68h$>k+TWdUrTFz9gHJy)<)U<gVEZGa4r+WG~8g%XSej&L(Eh$Ga*V1l8Am zIOp2<*<9U^?{``_8p(cW$4o^EKBB|fnd2MHK^);U;>IOyAity%7_>jNNWuVK`qu{W zX^S<C^o-JhDjk77c}X9dx$D==H6e6pbO>MJ**jwK;uannjDkL=ruoJ*VE0C+0xP)+ zrQR~|MqeMCGGE|XVrMHU+hg4PF>U%bF8tEcTIg#;7Tn2D9Q>mM(~b5>gQr4TJHh5O zGVG2I$8=+Zebtzo%D?!^Y3>_7qQK8<l!TlT8Eo~3>2kjzrXA&&RJCwv5PiewzEXG8 zs9<!|IZc0KYSL58DE!N^?+dxXWX4;#-r8I(VGO$L=0{`cL@kwgPC><c*HR&Mw5|^( z7R2eQh>&Q#Ughc_7{{)2%()8Zt=b>xbsF}-b^ajEshG39NEWr6>IR(0LvnK}UhL~L z<8<65U^t&oOqR81M>WUxxN2uhKYN_yQ)kkG;}nUsm;*40w15$(1tgvpG?IaSa%P9G z=2~m)SB(0^kA8gVi}nHAm~^t(Z<A|HFh`bh0rQ&)bgr&9n&!w9v)fsR_ettoDnq8d za*do<uy$0vaeQ4<?Ne)#8JvVeh3KSF{!6meQ(cXNKc<^8!j58(JUJUB`e^vo$~t_$ zGRSQhs{VSAWrrS;0dtg$6~N+pvyg_R3%cloM4Zq|L`&E0Y|u~QTzwsfwPnbi>nf{f zwG6}5g`p#bL!537q@ZQZ$<L#cyr-KpRRPJIV~R*4Yv|fsC?ad-Jh*MH`pmj_KW~09 zPxF>A40mBhneI5l0UBJA5dNl8GySqwLAnAd`x`~&6)h>PXs8Ks@}%SITt`Lm=)%>% zFcjuL7F3(7_28^o`j_q+tH&Malflbjq3t=eI3B+s3-))EUe{Y{mBqs}8hg{`7(D$% zit*?Ux&fMz%qQEGA=k%}q`oPzx3(HC0CZk7jqdYvdT{fPZ<uwR5YPT(C)-Voo`Abj z;mXn5>Zt0^bd6B%=YUKx7Y6hbbp#`BI$$aDEA_!4oHx!-V;f5l?y1!1G<ku8Yf<Z- z8l?sm;8`w%oJKW{Yq346VUFYFzu^pS2vdoIk^CkalRodjlk%Z|nBm6!Y^-ip*7ey2 zK%~OqT4M!doSfE`Oj2kSh?rVceyGwVEybhU(3x~PAh)w}`8=j9MsC$e`^q+n;8h3; zr5Cp94VDB?<HmNxFC;B#rI@7B0t*=>NhxcA$XRgo-qct~<#&eJ;$%nNa}9T6QQk&i zhrTmoMN-IpN&AOp-fiee^-*a$eQf+6*k}W49x<Kajeo&GzyN)AU^Gc0e3131hCvGt zWCb6mX~FfCq5fIM6Fs8FQBx>0n(?6PsnjF6`&|Q~nVkhBQxH^Je2t@x(|<H%dwEB& zIids*sRNH+D5NP&3jGVYZ-YZZ)3`|!v{2CzN+pjNYOHkqDz~7If`^7Nm!*N$r<`nq z=H_WSd!QvOM#i)|bnUl3kHD^nf{L)Ts3L5S6H$9B>#GsT{A^KdHQgoZA>a3ldJfU= zQ|~%yDnkrRCS{yBr-Dy|bmjwUKEd{u$%H=1yHdL-Mziu7X!=FtASR3xHDw(1z&LfE zdSca~^QV6z0bTHJL8;Zhb@R_3&zzP&hvw)ypKTcm^+5T|ET_eqh|=|{MhJuj6@5!n z{+s-uAW77=sgT@*;0csybE&qGYn)K6BfoCxgKJvnG=_%ou@156hS~ga#;<vG_iW=w zXUqK5g>pn^7rsKqMGo`oEquVFwH*oR=vz~3nbxAE0ybNyo6eN3YB9cdNiL@4g&cG2 z?9Gw!S#2F(71c&YDl3_xc^j$&R4j!ULWb!FtgVn$NI}S^UWu;xpb=L$a%+U@Z{09` zKd0waIdws0b!{N8l!(z+(Yp_fs!#Q^98o(kC;c(mW^|)cAfUaW(hJ!)(wteyrx7X9 zG~_OP0if6JHoaU$^V%9+*wCLnvLvH%G%CC`(06J1LR^oe#w)yOetu<9;22l>+H~%2 z-YB5}%jh)CF5?+r_JxS-1RryGJG0jM^vg~6HH&_@`MxIfqPdc&{y1fpZoT=>mfyA0 zY-&q(QN(}SC%}=cA9!mL_n_kQ4sX&XQ_I@#HarhKLSP=hLtAbYqP2U`rnM@45ySg8 z+6e>!CB)eHMV<zcD9@cSo&9#(hn7tNcCZ%N59T7lgmAgSLQH<v!_zr-)tDK|N<U9v zZ!4xOj?+wpAkmBKxU8~X#rIuiO-dnh&dEDqEvU5g1Sz2zv6eJygWYtGs4c>9{LuPD z3e#*UEYU;>(&PvQVyfIoI4U_!ipoyY{7T)YEh<owii%W|QiU2b3aNEvUY6>(_~=op zuhI(>e4{mtO@+LBaRmFg<s&j<xLc&%15?5(>cSlYCa+YDPQ_5lBn_QL7tH9*#$u?L zWKptob9b_C!@~W}{mVIuefo>(pbF>dT|yTsS>w&t8cdIA$IJBaVa+eVTMOc|X;NQ< zMF6J+H2pWLZmhTUB@a3({GH!@OdR-O4MjnqD<PaTeijsHn~NC_f8rxNnkp?avpKVy zMa%4*fDf0K)NmgU<;lD<u#s^_zDr>K@*4Sw#~6r^=AO0Hqm5Bhg8o}QnzCs7nnIJI z@RwU7F*Opx^A3wGTy-63v-rJ5L$kw$8M(=Zsgbl9^KBd&t1)7Hoav6-QfL;0Zw*;u zsk}g;_Y}C-g3BWNp(qjTP;1SBLbGVMZ&9Qc@&ygI*vO@cl9KfEP%CPO!~9o42~7gq zLV2S#Gq(O&D_e~rxPPF0JCdm~_sb0H?pKSAFP5hF-<Uo=h+Sv4PpyES-!lRHZZzq$ zS+mTwQuZQM+h8JMkO(W;)=XDxO>LEKN}(m}rZsCD7QnT2ZFop`UlG5Qvq+Cwp>%iS zcrzUi$+(~rH<H@T^N3ZFF1oY=A9p5FOx|?L3Tvt9NPQHTU9xiS)Xqa0!HqUnzEDP` zg_9_+h1J!1Lc+`kCDh$$VO_nRH>|j{QpMC0mrtT#`WobZghiYzB3m~2TG(t5n~T8p z{n5cy-ROC$(N)}9$Xsa6uLalS)%MnG{iEI0+ghN-rSn^>4NuQ3O0UOuG9!)Dz1QHb zJQfSxe(yux{ch1qmb{<$Wa^Iei;&tdc4VpaJd4J?goYmO3UogMwd!swp8a%vJd1>H zk3rIHaxkTQpR7PkD=cgztQg%WVlyy1vummYYYVy3Z6sL^dQC>2sW9H?LCe{}{TFmM z4T}qlv{~?{Q>5hGu2p8Qg+fYEvc~P@yOvhX%^mDd+Ve0g*qqP_zg2iQg4vHAiaCQe ziq^(tO=Nk1&BgTsv0AU<#UBQ(D984aCNSKH=pr;47>CjtG(g!g)N73BBP2X632kk! zP;N*-p^`y!^V~cNP<RPL#?6Tf=?plj7-^OfwF%6MBRiH-&=2UrY}h8&3Y4(mN!CBo zkX#eGc4166L$g-t=MwX>%u%rBrI{GH1NJ8M{YeA#UNs<6*UJd`bllp?C$pA-WHEU* zm$iJn8|Kx~6FLcYLOGQV?l6ONa3ZSFVvDnsLJfc(wGX#uu<=5J#pULdmYF*qWHLE1 z@896~fs*KUE%9@-io(tpZaKvt)!`(2tqHEy^_uX`qKnm2SO>#tejmgWJ1Wr?^Xwt< zLZB5jJN0I*m$9=lOuy~vqL_o4g=1kV8^*CS7Ej3=P)@>GhCnM}h}E3e1Fe{7SD{|Y z?@U45tybtyzZIu{uy_3Q8~e)UHhId6-+rb)^*!;1>Z8(Er_Ty6frp4DQ)#<<-itJ| zjcX+B6yN-C*Rw-K?^|QmZ07#Dpfri@3y5hudviLO4enHTkr$}$8HnUj6z)l)tD})T zdgtb@6o>hkXq}Dd<Qrc4qH(J_+Wz)%BV`6lTv46A3ET*w0(Nw>w-Lm9rRer<Lq}FI z4_WV0ZhzXELsmdA9R!moy+_-a)Dy2f-R#vv-Yhv04|~-t;fmCDx3A)YJN=r?v>}v) z8-OFSe`grccYGac7=vv^+zJ(!ztJ?5HW!vU8f|j8oi1Yl+ch+H>5G%SRCslGlDwm< zzrB*VLD*c@?TLfBtV@aRHf%4y!<)9f<Z5&uYxDcG13HFdcVl)yAJO&a?!->9Qny*x zP;CBsX0OyVM^5d{(w^KZNfyyl$pURB?sxX)cX(BEAi2tJmDv_R$|yE^vKXcP{mBsZ zUX;u|x18cnz36d4H#+;K!V~<UVkoXrvrA`T&|DIm_kxySw;-w43~r5u29ansZ#F6I z&z-#M)vIG$Ti@jx5opRtYi2!n)24TL^QyIgr;Zf;1*<vPpJ=uA@Up*nS!ynx4@FMi zP}<&U8msG$O4l}(7SiT+%$&`)`%6f3)%KT)TDf-DgIW<<9qJt;J673~$h4d7?@aLS zusIXy<Yzh)>RLjt&eF_$07>(aG<`ooS@bA3^O7r}jviQFDv;C#v#o9LW83CXtKQ_N z8cO86Ai;AUF$+15_=VI({C24;<eclKavt$x+vr!!MI0>iJZnXMA$LWQLI#T>J4i<% zn~{Z7PKzROB>u)*-)<}=Kd^5b8{Q=9O{#pkl{09sYF&OgEwlCCTrJDhOda`4t`e+N zI;@sW81*oD8h7r}R<03WwwH>r-KDDB7W|3l7oJ9pow%|z(n#JqYO@;N&B_&1ms8DZ zIchO?J9TYn9>LDv`pI>0xZWOZb5%9Rt%4oFbi%wg4aM)7hJv;+7Uk){%}!sKnWxc2 z<}bLT7fE*f598g@O_s4meO#_uYHnw)nv6}xEw)$&x*e8~(Kpx&M`OFtGRGyt9BXo0 ztsP#Sn22eIS05I1_@%@=Z>BqN)n4TIIxVtH<plJ$_YdZ2VmA*a>b7Ht_r2wo$}bgU zGWO~~M#1~e(%zF^hUS~kt~PUO={0_#{T<xK7Ydt>B~=zkjO%@PNn^T!_p)?vt<H!2 z!onpM+<bS55#xtazYq#8oy(JDc=?rb1<sD{gv%A$-0zkPwZHI;$zg6v-4`zn`;|>d zYDGOzw7=?#rR|Mqd9*va+ANp!6AGRjz0cv2o$r*|+h0<byyRD?pf>Z_le;(sM0+a0 zQLsAGAMjALjOL{HEi1UG1N&6gfw_CD)jta#ESM7w{d!o_r$)$HzkU(60E3YJMS~dL zu;qgxeOzXvvEP~HT?5XU4q!|P2*!oHISr^S&Z8HT*4O#^s!xzlP6u8-4f(?~_!8B; z<k7nBhuMb0JY2u6nMK!{Xg&%Gn^psE<BBHgI(Ke|g$OoBx=oqi`S}d~dv*g$pySP3 zBtswG*sQHyqnG7GpraMt&FZR}emPAPxBsR8#;ta%&>6XOMUqYZr3tMq10_Rt%Rg;r zBfi?I&u^Gx@kH@{;=5|=Y!!mK#NEb%D#Uksu8L?Y$s7aM3CVxjBJ4B;hnHz|r;d?v zFV<{FgEPgsnx6QB;=X~vpYB~re^(W!(Tg?f+tPx{+A3>@CT6r`-TSZ>0+LI9_pCWb z^>-}p>gr!Iucx<j(L$X<P3451c^z{W_GuoyXwgl~|I*3Qzpy0mrA>cFrA?%;wDlUo zdgaecyYC&{^R&GsmFU@7>XP2yxuAPdPhbDsdA)ObI=lN8_4E&G(+9z|_d?1~K>&>S z`*DmB?n{b(>dukFf=r4L(MrA_PfIZ>9zyzF%?u9i<1{3|bWplGbFaji7USA4c=M!N z9$vkopmb&eihf_0M*uPGPV1gMCq|0+>9q93i~2gZCj%w3eP%e+h;^Kth{w{NLW4Bx z3R#BC3#_PJlk{A!>bgZ@xaW`lb_Yt(q6f@Go~XKEts0=WTlAARBp-8a-LS51{Zh@I zMshcyp@(x$2MQ#;CkMMu--&8EYf_;|;D&(fdS?U)VtbPqQ%W2YI8(F-XIlVmb>%6F z{1$lm#6?oM!-D+m9t~H6v@Pfrb15?x#0*Tma`l29_3d;w482m1G($%R5z~J~5z*<1 z$S0Wvo1yCiuj^bL=mrs$m*Zhq!j07hJ@1O3$f3lTieQQHHi;X}T8k$9qiWk7%_GbW zUzFRF*<uz_H+kv#NJ+L5ZWnmMoU?^6a!19ZpbwRV8fJCt95IBvWR)SC#@B*bM_|QJ zR7w?X=%Asf)26_kvxZQqSj_P~V7ZqCGwpKvIUNn%Zh)tG-mycHZQMH)S*Fjn?IMp1 zWSWH(<->*%ID+uP=(Y3H1_f$l0mAf+lsk%$ix)jcBzQPpre6@#@v;Ql%+?Z&LYEPH zl8AM@KZ%$T7NGTLfiZ--Ed8-^tN>oSRD+#PH5jF-j><ImMWB!0MR#w|CPTTS3ZGmp zWga<Jwv5V)T$9ZbBNjH)f^g`@B8)ZV%%W7H#D3)1B2*9DTZAkse7la-D;+jcnSyhU zE#iDSx?LZIR@+)ccfy=sgo=izm#u{&q;4p8gc0g-cNih3)G0<TmT-*`GeZX%F&D28 zn46548@5){MDZ8}E;O8u=c4<=6Ob3WXP6HVk__Wi!<#~3(Giij>!l+I)L#)VdQ=<> zQ~eT-UYsX*^wmg$%v^i$WEpZ)E=ZQWNvR}dmYYtTWtOE+(^DyQ=RJ7xXm(=vz9TaE z9SKPO6j+K%4VJ$53V5hk%3qqQ7n>>ZcBTxkRF$1(3@lSB*wapRPq*pCB<r&zP>np7 z1iWB?&_>N?je!uFcA^k0HJR6NN}=r*+fTo9coIZr>OL><|Kj3Lv+TqYNBc2jCX(w> zJFTF_syPwwT&B3>XpV85!b#qJN`mOWTn{7nWbeF$>sp5@0m<%07inyoNa;iSgz<1` zV(CRU7u*^Y3+^TYe%k2@7tzzOf$FevLQ%${2CW^i1Ona-OGqs`W8wVVB@3t8BPs<F zpCVF`*j*drq=idk0a9`gBDBCX4qLbenm$UMX7$`{%Z?<dB=V1-{u}9d89>=drGdv_ zbXfn8D;1jyj8SeNLQY+xq<IcEzjIP02~S!qOYjbgIb^p@V*4k8`ZN7SKT3hm*loEn zUhV`YDk;6=72SGjs>*ZXR*6{6mS|+Eq~zK@v#=HS#yatVW0<Jo0$!Xr=Q@U`&Cr|! znV93=i3N0A#$4sjWIS^{J|YcV%A`1E*Nr8cwD|Wk36?ut9@rxtQ>@fVFnC&bnt_n> zFB2Jc<e-EoA<X$q!HzyBTF^kxOS``#`fYun1CBjfnk4T)%R7=uD(iPEyf>i4Q-t14 zO+n2&tBE<KF(o6R?Nd{SarAbV3tH^rO6?cNa*|bVd*mdKyR`{YZ4(f@kMIKjdtvzh zFD?vE-}+5&7BR1<ZY!AHV*tl%$F|pqJ2ynEFMtva;dtrzKk35o)UEPtyb9BA7|HVZ zf8-YN9bOn7kGCjebk6Or5l`-rP=%Ur@)HKls~vo7Rd$s-?W`p9pz*&KhSS?5D&6vl zGBN-6!f=!Vt#T91=zlK^ZyeuBluMfn!_nZ((vmx#V?(xK(i8>@em=8sdc?AR;*x5G zJ#Zf*Y2tv+K-D;;D{5n+T^1==rI8XZ-gwU=1ve2XjW*t0olA)(B9X>vT|m{FvGL+T z%iFK0!c8u4=+nz^bH+HJ%Y8rj2;jYIL?_01xGQqv1&FbQw1$gLPu4!~LNgFvK&Oa8 zYLvv#C!QB|WbPR+X9oW9isUc~oFeev^PDVb-iIEeIZt|w#Qf=bs&k>|yy_Jg)b3*6 zdIh1vyJ2Xd?WA6&n4vy6+E6ox17c3xVq$)<U+I{kPd=AW%MIP=<+Yh)^F>lppd@`^ zB($ufb2@d5<*Y}r2B{5tk9|>MsmXD_eI;z|y)VJjPIL-cB%_)``=14_NlOVCn;Oik zUlgO!<RT@dV+8%FmReBtoN4|1CF3#bfw#Xla^B}(B!foFJpXwn_y3m@(Ic5tUFQ6a z{q(q$?>_e|6+lI>a;DQ5+&s8Z1tlct)6P=+!6rI(%DtyRuR*kMV_l2oUIPP3<2%ri z$Sa?g4!b8J+t(;j_pROdIhTXn3Jya=XMD6M3IO)mI}T0_9(>2JpZo>3okPNa7?h0G zMv`&hkR9vLRP<koB!HTVDSWwL^tIE%AnK^J;KHw`QeRz7m85a+7msP$zn%4W=q(#j z?B>xi{vwq;@<mkRWGF$zF_PR5VuD|)NQ`#Mfv>#CFqIwoM~um>G~K!Oi^QFKznC1j z_-n&VX3e?!BPPK(N^D~#Dc~If28y&voUC7Bq-xXB3-w9#MCu*6gjHT6q?oJ|%}CaY z=0xu*DPBD>OI8?ZB&$p_$}25qm*mb>T>D(6D~9?W?XNMYuJGA~C&Q?RbG{9u!;Ow? zJG6Kz%Gl1OP1xy_2$b1@R~hV6<j;~*H}v*ehD#HcXjK#%X(K>MXOkSK7rqmARQI8W zD`iKw{cc%Wsbv=Px5PS%%#F2k7a2>j1xoHT(hK2`18vijhbm4pZk;&AInv=Ye6^KQ z2DzvYVu=Yl9#Tj^iU?PesY$mv@<D4z?Q@bPkbG03#A7n|JL!BhF)hwE`&&WTaCSTo zG~(KKC6YsHPv@dCVLy84s&qajnLjh9t**jxWqmN(&MWO)7xc)IaWRSW)hykf<_?1M zrtF#MnUUz0@q+1-?Ae9vMx0>oVv<K|A=BF18BS)v`^bzE;yq<Xbm~0=f0+><HKM&{ zCdk2h!6qEyw2Y^<O`#kaucS;MK|7o&O`?};=_z<YEtuEY1cFv#25p}C+KloWmbG=o zn7iS0(vHDfk)x3}%vdgW%o%Z_F~iz$PC6rDy-iUt4r=bOGt%I0J4;xJ<fdGBrnQ}u z$}~6jSXm<FoqDGE<hU};u`VmqOy<9`M8G<;OmlP3mT5kHF6114rX{qC%K}Tg)GAQ1 z3SrY=+X})7jw7a1y@R68U4%wayYD&*MVu)0+-YcJBwY{X72w>6MrKNj+_@Bu<l9t1 zQ1+3NQD+5Y=W3LZI_txuBl8;#_6`_={=h`>&=0t9VMWKXM;dUs6K-gNx!O7zWpOaa zq%jrWJg*zhD+BtiqJHkGl&PDjxx><sIYOTJViGwoWwiAP%Yh?PFKelRJJSM_MhHD- zTc@T40nB5(YtsT#PtD>Pi0RYK*PSfsCOI_SN)p|$-j)f|;WoOBi>$^cI0~$G%FY#P zltZ#>>?D)LC!H=j?i@9?M!YuV897RgwY|I4h=JWK;~+ClkEiN3p@oyJA-znCoT*0f z#3y*Hp>PImiL@O~?o}fbAO}uXQ*3(Gp<S&OnVOX{>fNr!I+63$Qg*n{=Q0sFVoht) z9445Sd2Q#EwV-DmyQb+SHG+9s$pZ*ZxLVB<Kzmxn^1?zxAI-#JckP6?m=4Y_PY+Gd zj1$+$g7v>zh}qIhEC$@f`qpO4inSGhi`Qb33XWbQk#NysV<V#Z9Mmpm935XU)AEB{ zzs7c2#bbb8%Y51#X~c_gD;+OGEm=E;jVu&ap;nf@T`nXraAgo1iXFyA{M>D9fst<2 zcs!_;mDD-7$+jErFWAh$Mj<cZBEbsg9uf-jIV&DVa0+-BQ@{9&iL$+6O^+6|b_;tj zBEy9$J&5)TW!sJ%G0cGXwi+!)a=P^z>q?(9qHi4-OFO+Ss1$|<uK`Z9zwTMa4Q|0! zp%d~7;FQ@S$G8Pck$c=SK3cYRlAGWM^Ln3-_#w*~+HG#ZPH6;%HtQ{cQ<l}RL3@qp zt&1@ozjX(db|-jQdAGZHvOy|*?n0X01uqv3mgyv=-SKjXIKd-vqfR;N^#%$qd&@Zd z{jM&%=qb^LqGv?YoMT^aICk$FGPsl9kQ2K4&3S=a-(vID-*5VQ49l~?i!u=MO{KH9 zZ0P4k2k_?Jdb?g+r>&jAj#_nyw}DagR&kxg&VpH!iCNZxO+mtY6ZR!Rn&d_}5+zdH zd?9LPiSWr=ZL;2)+!%X~_A<=PqjXKr9Yz6i?s1sQV+ug06wNG!?GI8cIEof|ALg1U zYb-3_gE&D9nj$PgHkB%njmr;i!XBY1X4)}=JexDe$#>YCg<e>DD|QhTdERGnN(9B1 z=acJ#5zbg6W^~j%;_?^XF)M#Ro{l+qOt>=Di}!Av%8c=G9CBzUJ$y%GOrj0Yv`zav zjx<8A$8DI-_i-#jF97KNO9X6N!p6(}AV-RW%o}nk%lSl(1Om^<5pNY7;ieO_8om13 z+)Hw#M_kNbov-8scO>wbTrR-;CPzXwRD$=O9Pyfg59Ns2YMXT8mM0yY$g6T>oLnJC z?{RGPaSzK0B~yiQ!|o?7s)Zy2#hj#b&&!FZkVU2zd13bQo*sSZrVk6wM%_lkgYK>M zOf(#iG+jST!C?<ij^;Fm9zM#<r?XF9=-D|U2k#G!#VAqaxLEI$%&82l;iXFq+H~M= zAW2uh=EkhPVlUtDF?ybU3xop_#`SZ7--b-9P3sprQ1kx6g7<<tHI@~Y6D0+`R^TZ* zG8ntdu*Q;JqhnR`!i6;*8=s+D57KF+@FkFo)F|qas%SN>l6#hpBQpM_V=6^Oy9nWg zQzwA=nhvy(s@kd=IZ_MAwB^R$x@!~kUoK`RJ=P;j;E>u`N{FDsw6})fE0HoemZ-Ey zJf}!YAurldb^BzYV))C7geeTH+G%wgI}q84*dUdT%{a2qhZU%4mzGpPu2@o$NJ&XW zQYC4Rq;{P4l9J+f%1bJeO2?MydTouN$4)uKjw-DvRZ>Dl!IDBM3Z_#Y$(0mUQEKO+ zEp1xfb#_z`kpt}lH*}+2WJk`livp&D@V>E21#I;dIvAX%G%ccy2`dn9j9HVpg*I`7 z4!4V`BnQXk_G4GZ<&wq)chNr4=iqfkD*u5y?u07&J8lzWU&l-usDo)jUNkW79dsvb zb8p4vapaD1izXbeOj~<t)HR4f0cWO)C18DZmojKZ5qNu#6M@|veLqx!9&Plwa<Oi` zV};lmk`p&{>*71D<Q;vNu;D)`boZT>V_u+lAW&N8Cb7-|c-l%AmS#i6(LQi0yMqXf zOYpRL^E5dJ-f5ZmnJQMl$%uYB+A`4*TUX)fn6zi`HWujV+MxwF4==TT@J{H%k$9;- z9?%`c&mYsGA=5vS^D1g$W&Acx%NQtY6xxY+!YcV7?`u#8)0SD<jso}Nap6#E@zpVZ zDd(O><BGhXfV;_z-{%4+as=b;;Bc88T1sXIdYu%%%;oBa$Nb4~W;>(aX?Y>BbeK6h zkHL)^UU`{9-Sx=DTEV2V;LJQu0A%9*e-}Sk>0w46Gzr|B$5xF*?&Q3L?_8Z1*sadN zDo$QvDZ{o(UAm0h^H`@F6Mpz#Zm>5ePJz2XkJWmtpYj6TyF)K>hKKN>W3jlg!I~VE zlW!GW+Df9=<e^%ff0X4_Mpw2<noM7%HngrXGQeK*IxRm3Ehap<6f{@WhmTnPj?g+- zcV)vE3upBl(VNHNJf@>D#SaK$1;<Vu9UBDNk6O_fIH87d!k#*Mdo=gY?vlH#79WqN z*GSA?b{?ho-tKgn<6<VoJh^+p$e+8Xqo)f}9}L6HX1be(2ZqqkySJP2_MS7f3wr;P zdw$P}I0}U~1=#E2-G=!%o4riX?i`A8!6pFnCC|(o_wxL80v5*Hue_J#<gj_tQW|e6 ztmAp6z}?Sta_)paq{fG&$*?=&oI9isb-Y`8PUg<(IX!$CLgu@@qxwLuX&l>!w8&|F zf*I~IY5UBjI#-C@*mItDX77o3iA0Cuc2vXO^R|6&ug|tS|M%V)y>BqYpxVh7elFuY z;&Y0*iy&-Nk#~G19y)~bp7Om!%3r=`8n5~6XY4!Qv(WMAq0M>F=Zx@~PI%Mz!l6%n zPj;U5b3*Q4KcHDJ`<{kvf~c(#g?ro&L{p6f3Z;$2_~7>@Xa<OVMm7KjKGj*h7MoV? zv|l$GILW}HY`m-Mt!_+o@HLKhG8Ot}FG!ZNlbjv-<>$$<vIRTX$xHa?cbaB&3%qO< zEHD{!$fisJ#{t>)I5KZF4V@jk3RvL;BxfZ}ff(A+tCHe}?=WND0vSF%&#sCi7W41# z3dIfObc~d|LhJFI_vimtZD#`BWYNU&a)}5k9td6-1QbL$+X4bgDJ@hA#kL%ZSVJ31 zq)kfF07VdQKoJE*MFd1dMbyt5@Z>7@RVYv>Q11IKwA_3<o21!&-+!>{`<CbVG!#F6 zncbP$+1c4y_E-4-o9q1<vn|d4OIU_=gNR=d@P8-aEdk+2;*!k1RFc1krW~};pYYc^ zSX|C35rlyVJVa3Pm-@@r*_Zb}M-cckr-L4P(fl2(fGvi4^`^7n*G89aG=EOR;ABs> zh+J;DzUK`}{(3qT&akD#m84(jizl+%0Q$cZyoWH-_kM==^^C;MJ-T&C>KKt25#sxK z<CL_tCKmSVv1as7{ja9JABDDV;rsN$O|j)FgygI)Ur@DNNXU&L{8zcgDYkx|)Orct z--d)lun%MXzw!OMeMt2Vjp=OzYrW?FKf05BSi}Ce+xLSC?BDG}nlAADcj3Mthg4%9 zuCf35|2z75`w+{5^6cNYhg6~8hEx@VdN|~c>Xq5g=<lOnw}d<zGI`AHUG2#(r`y>- z)6yWmp(Qq^TNm#i%l{-8{U7Ns2nngkKUHV{ti(SFl#uqx?4=*}T_=wzSMD17eqJ2? zKj;^Ix$+@?k=uua@UJ_-{}V18{XZ)Be-cXn4f{bz$$t|T_zC^oLjUmnqQ5;Pq_yvN z^sn+E@$8>T`d3o^{TY>@igJ@6ZmBe-d6-{kNK?v(ESOLydp`ei^c6#(rljyc3j9OR zlotM<lBUe^|Hk)k(v&jMfYQwC{p?EweU?Uf)LOQZ?5pj$5&JhWfOnGds9ndt!u$h8 zsz~-F{u1mf)c<q(?{fUV@%`J>(Jk$W2317W5e;qW_hv8L#C!)c&e(Fdf8YAry<EB* z=_#TJep=-%Llyq|5M`YY4b!v!=>O^FyBVt-^O3~zM@ORTRVS4gmn9(8Pha11wl*V` z*N}J|CgB7jOJ&R9C96V!R_(IuYC}e=fM`P0CxMkmGz^d@zO!%X1B_fTKo;NM5rk78 zSEMcJE$3e(ZK)LC`JeSM#0vK>rNSJ3+w+M<jTq|&9ZMTc8ynZ~P`##xSG=+4QO2$; zvV%NABnmEkE|oT+Ih`;%yO`$mMz)4CE73k}Bq097oVM1>`sJocJIHZY@yaT{m}HCw zd_dzj9?c;iaFb8El82ZKk<c7Q4qv{3=CG<yuE5JpR59(n_|76m{=Sn47e4>zIm`^b zYa`8JH65E*E(!?sISd0{{Ed$+=jt=w%`%TA&;zm>vyw1iq3ciPoUFsBw@6e<1^M2% zGA1X`p4N+6U9HQAw@O6m=`3SRf1oD#p>?AgoT9a)y2SK%T@!J_=hA5on91TlUcEvy zd7DI|qYCOD;5)w&K>tC1z_>R1XZ02u*V`qk^n92xCh)P-6Ovax$e4HdJc0k2uRy(w zh!j4TZfpT@=~tg`A>y4rDgDI2qhJC>G?&s5o9lgR%gO8VER0w~OY|M{8{&oQd0Xaw zy{jJM-KFJ`^7wZ9Mwn=wK4z&?OzU(_#3TpHyHoMQHW95J|A6t`lCU(N#<!N1?aLO4 zK;d)g<`ejW1}&UN$rs$M<>|yTgO)n>ViD2q(O8JLz*ius>nf0K-vc$56YbsrO?XDn zY}#9+W4KqnFEEmUNBBf}#LuOhH{ex&+37h>UiE%N^B+KqA}VWVsDHC6tQ>LYZ&`F7 zqt+IwW>`M(ZS6L7KS93j0X>V!$L^Gf<0yVE-IxO6huyZWCZa_odJ7$VuO5m6Dts;- z5m@_ci!WZZFk&5%7-U&g=7IQTa_v<oDZY6S^LmQI_#f6`B;m@T8%V;sTA~TQI}Gp& zAKH1Dc=fbAuiusgR31^V*BC!*(t(E=uRi9PV~Jp0y!-i98}DJ<heR&FB`ruLN?R%& z4F#m+`OVf4>0yy%cy&Oe=+RTR5UGLSughj-XnXLR%d|2y^vV=?c#}>(#8DGJmudvV zfL|Fn`GpPSS02&Q*v7*9rl^rQL%XN?36nO`>d*)g{V$b@Q03JD?VcvQ9J_|R%cFqG zA3!xk3<cJ=`QQ)Pw9|h~OQbV2Lo}4f*mQjEV%h^Y1~hhDZj1-w7x%daCrC@1c<mve zrTlPB#0j5ErKKnnHvdAyBa{hi>XXiQ<Y{;$Q5?}?^RE{vj%em%F{|U7BrQx?E}$ci zL>8VW9ck_xML$b7i0U=~=IrAQH!Y(%YY~u4cwbkLM^u+m%^C76dwSWnk!K0@({!)) z8X|(Y)77<T4SAL@9g&rD@e@$?vX}@}A61YQo-ob6i!3i(N99#D#(2PEe>l~-gT}R` zj)xLK0={%J3H0VbYQ1%&H?3qMJ71>8&jLaGTsj&U&(X6FETi#kt)aPD=Tm!%h)|CL zk#A{ei{DAU<#Cy(HFtGg0dv=TRC%5gX(O}P!8>IR=}l-uqX}$c=aoi<WD{+5#Im%B zi1%JSPIK5!M=cwh=v4XhC1ev%=y+z>1X?9*^DKvHm3Y$cxxL;^=eULWES*JwIZUhB zCYR>0y^jUo@D@Poc7Zbbw|;nK2W9jld}GS$w1PejF2aS+rIHwp?#b>ioutw2AhNx? zT|*Xv;<T7y?-$Y<9I0m+TrH4fuhqQ9vlJagnzuaHbjhwX?#d(3C_T%dWN5t~cK5YY zWP{NnO?t{*&<s)5QfWyzSeNP_PT$pl5j#ml2kQ_)RZrG5ufoWp3g6*Bb61`pok!fx zLAc)OG{y}B=LTQiH1YtQ8^nlQ`7wJzJasRC_D$g<@>bHm=_!#Zz5r*82x8*Tn~y7^ ztVI`*NXrJxAkb|Iehb<yD$swB6lhaOw@p_l%83=Z@wQafxr$vK5yccfmr94wT#heT zx`5`gE241`C8T=v0raQe?$z6f*-d7eH>x1warb|3KY4{Xk;(F1HfuV&xJ<XSgwYf~ zmu_SM@snv`SBcnNPvnh)%qQNz^eoQ?Kdm9Mj+H=J1$j#+BgiCP*xZ|EF5^Wad*s&) zZ4C#Sb6dlCiyvcSnjrFeca5bxJ*<+{Ov?oHR=4z8PkNi^r&D3;P=3YE`>cpjZvZlj ziDw$0qO-joGBYOKnp*NSn=q5=nhTiDteE4(>?t#uourw<MDfVzAuA72q}9t8Te5Oe z8e8LWERZj;;ij!5UvIB`-aA%opT*x8^tFmKG^SuTc}vdQdub=~jE2e5n{3x5PTPN2 zMF8)<(-U%u_pFBJeV4*~-qejJmJqLxjz=#@803Lfa@`FD$7z*(&Z{rf<BVm;(%mL# z3^)@S^y!zy6n*rSXf7h^f$D1{@T_5rtlKP%_`FPHS4s3hL03!X$-!z>Wkj>>v|1&} zJpRgyaU$C96pfy`lJ+|<1c>x(jUJ{vo``m}e%eK%S$+D+^o8Hf;FnT_0sIfv2efnj zj~|~S?d%tj%}Xm2f3{}gr4{7Qk^?l~n{Ze`1#wHKFJLXau=+$kt%WH%CR9=7IYcKm z%de(vq5OkQ#|)yT>QvxKUwf}&9(lI@0jl@yBQrD=tWNjdbl@VL@TCSc)!Q3Qa-ynp zh-_lSrMgGRCI*Nke_vSvpl%be4!p(ET~q^VmuRe^j4=|Zz(`vDPBz67FA5}93qi&p z!31#W>;U-97F{NvBfmLN&obdO9YsowlKxmn(xnMR7DX7B4(NV^Hy2$c-A~uEShy_> zrn;?x(X9DLlf^We4n5C=(L_Gw$Br$t$)`Aj5sk|UGO4fs5XCE#GW66yuX{l~|APer z&vM&_!X4yU1_@MB8+qFzU`u5c$kyW)PTxwl?h;6}xEs?LR1fjl`6CNSCbvN9YICtB zGJ+i9=Tgap@`@L~k6c8$nW-gFEfQ<s++3uHpG!py1=g@{$&{0|7||mTwZ}n%l%?Z< zwS3~|cNNiW4VE~XLm*}QM!xH&xVR<cyM_oPw*4{gyTIsGtnTLXHB`?s!IvPd&zfI+ zg~l;UBvStrVUqrXC4(9JxyiD%L>d-|Nz8~wfTw!!WaG_rD*2KiQ;!UGch#s=fVE;~ z*dbyK7g*j<%isut>~4O)!K*0t8Q~p4|J`UaMiI={3tbNGrTKc<M{{^g**Ag}``zhV zPtl4!(mRH}3;yiVorlgMjEy78AD`a$%Ldv9ydv?u&62EXx>7M^FM{e9UwXF1Q43?f z8esCfiwX8r){aG9WCYXu&;IevqKf-y_FfZsX*R2zz*UwE)c`mey}p(#;Pn8BJ?X#_ z;|8PTFc1yQ%&W^Yi*M*yQA3k${LvsuT~tRBG2@mTK1Ms$Hv`NP7<)>O^?o*g_72q< zd6{PKtpGFH#!!-Q>azz%v_sWJyf$-`K=O8O6UI)&mQEvqr>xp{>QT~@(OQzx>SU11 z82@&~V#;NV39#69gH4<6Qkx)UsU!<Se!1$k1$656wnXb}b)=-(Qc84197OdMH4N+- zqn52b{}AK8BXQ%cc6TtWs<h}1vAyX2Rdk1VtU$F7wmC`!MMj~ltH_6b@bt(n7Dj$I zKxUz330E3mRY}pj&U*a$qcpGMFpqXU>~&ZPt1KsqI1lfgm`4%kdji+#dq7!`O9Yor zcYzLVm^f((>CpQk%azW`#fI6;8CfLZ<n8wDB;oh~wdA!-BNCzr_f5<GQ{+o01X$kp z2t<(jya5k)>f-Jq@^BM1B*QhtAZF^jeBot^nLZF%yjfYIwiHfTHWV{;`|XPr6f;c< z@Yu~Yr^l6Sqo;1DL73^|dDDyU?WXbkP-12}T?XTLR1fp}9j)`JF6E;Di*53l1<+2p z7wdBB9O7nysU)NzaH;ICB{(w~8+FrVYUJ_p^||D0N*>V`xZ?LI-FE;!;Pa0%avo>j zVRGreg9*2MT7s4Ip077uZo|IGC#v5>4#Ctl9>frfZn!;<Vu&f)?_xZL0DADq_AS{K zM*CEvk@7LEb2!C$7C)D2&QXP8g)>VQQ-$JG%rj5lz{s9|<Ar6^L~7c<v(3;m;61J1 zugjt4MAJ+A4UFm+SS?<uIAsxKaX-_2ham1oS*yc=h5cD!?6PKzI^#Ojpp&os4Nz1y z=)}wdimE=BzJbZnGRUnp`ygo(<w9plTyG&hFEtYFO8i_p8v{07Wpv!0M;P&oV8oJl zSdDme6e)N7Cu+Nek!Q(ddj8Di$&gbj0=ra_qC9hEwVgX@Y`?@jO#q}yL|KQ!lLqp< z+gB2i_a7Dhdi8x4I&-Y+__cuYZeL3*;F{F!1FXhXtF>B35&3M1X6CLA$vB|uxaB0{ zHxd;joz-OowzwePok#jIN1$b~vg4uD4WD-p7bj8pTsjQ}d5+NS^VU-q=i6XJqdE$h zbMBdvN9R1>1(*~o8zdonUw2{pY6~NMuO(%$w@6v1P+<hc&!rnpu!8^GZRRnGjs7R| zK+_k2Tsj)aL`P=kZ=}7)4+70)&$O|kO_uARYj~ni>Nbx?G_6BEuM+*y#~f@;ONvMy z<gvSKOh*SwKxG+$MLhXY*hR94pY%L$-&bQqP#-pZ@0ycTANI3Aq}+G3IroS`)U~rX z;sWhif6)*@`J%FyLH%AD6@>1felNdjcwWy<Q4Txb<z0@Y!Bu7>e`>Gu7O&m<O<+ec zC8GC2jM2~yW@o$S&d|ut1vHJjQI-yMEez{Yu$%0Eo`&arnN_d{QPk4eKZv7Jnod|` zVYK;(rV&qI|7YG~mMd3?_q)Jj>0^3RDbwzdw*sm>q$_jo{b@C=y?@9&{a~uk9oTnl zyLZTC+IRd3Xi!9TDp(622%or$*5AJXwNsk2pV2cgl(Q<lW7=+7H~t1p{_KuCmFjW= zUH#7W$Sw<G{-a?sr%E;3qCJS8|Ff>v{dB-e;w{kgbk{{ybrpG<@1E+yZ)`7=d1wmN z#}h;vm40n|nmo-SnFpp%SvoL#@7?_1DH_ei0*yb_%-<T8)x`{6rJ~Gr#9JcpeEs^$ zB+AH{z5D=08QFTC8Bqp^YjWO7JWa%<646abTr-Fu%J^YT?jBkTmkGoK>tKXa*HDmA zd2>+fLzK^0F7UjfxdX3m7`;sZqT)JJ5(>$?t?<=n3{6goU{UdabX%r9S)b5Qmle$B zwsL=6qS;(2Fx_q&d-BQY&?A*C1P~MczPgWys{~>uYt`4!lj*(9D0)%xbLl)Ph>Oq7 zh|i(8cy)kCoo(@9nEI%K9sg|WyX$Gkza|K=lgsJJ5M>iTmrhQgKV2$6yp!~2tw2p< zTN`$i6BDPOOm#^C^UIsVHW723z;rnW+8o{O8DKiqnZO@R8}-RT@(1e$ChxFohKyhh z`Si1~xfaID5qPYBryCuUDO(7L=W2h_^bEyw8v?w@0rs>Mc6lS&=B7g{qn%sAfs}DW zvo29?bE80YIvloSas?6nSaTCrgP=nz%L{ZUd%$^qlRFoY^+;tMLelo$={Z2sZbD2} zZSA3o3&YZ)bIJD(jOOQ(n=#qV&L|CYQEf@w&-=HLPuddTc4Y4$*}UmFGjti%1^lm| zcp23N<OQfvanUA72=u5{xdh&!d8@#3u*WZ%|3l&_>k+CYn|`v*W!eR86PbhUE~kSk z9gWM0c9-8T-*%dIm-zw{7R#wi2u8K<x>~v9;kO59bZ#9rl(hmd!xy3Z5W~Yq=9359 zAv4)CKG9B(0~n^dq+r#y&6>4>EM%uZO>?sBwIh``&M`ilsHa4mF|E!~bW$KtJ((Vt zIaL^lIP2+`t`KoofXJT(w6YkUO{<(-RvuY&wzF(gt3s;#*c~966On-Epwogjt0_9z zBd~aHF8%Z=%Z5htt5Kiv(cG)$m6^{ev{)CC&)Fvs9rUg%KWNd5sk}ymUHi&v$9ae5 z{W5c?2{e#fN_}hP1(NW9Nb?<anz1e;pL5`bn4{!#4hl?nL`QZ!kj(5NOE0Lh_Mr9g zi-(_IPV3{L0F|Y%^)Tf*1aaktbKxsV!ow1)pVR8{K76V>NLH2*<(IZ5%sEQ-cqBkI zuVW6d|FGTVb`$Stfak5W)DNn<d>~u!bk;XpC|ht$;5kz~X*LsAD-;DxoVuHzM;s4u zDL-h2lwfV__SNNsv^Jg)XwJ;*nTN8*g0YQjT6~<w_M}8*6(0Vl{7jG*tygcJUwfL? zt5X4PT!INKw0_jRxAAgXjZX`#!8TX_H0KZ#h^T+f`Sgb8sDI6w0MYkE^S^8e)a?bt zlT-g1vxDNvLXqxDx4Ydi<)qF8+FR-Ft2;@1&k9WMW;&QFQr2FO>ALydv%H(dxd64~ zEm-~3nn7Hj70z>OMIy1k&1G}=I)#aOCh_xs&N=1WT5yDBvsfgWSVfFZ@_!gNd9Q^r z&kIZsdsYcKKQl&k_BUC}DPws-$3r2WG7;$OgBjmnC4IdZASPrwGa}qsj%0RC)n!6O z4ak!=dv?r1@<f+pDh8_CC0MINM}+dV`m#XeRYQ97Q0D;&<3eJtk%U*YJT#H&L?Geg z->lt1(a2SiNH4*gAt8v<Kbu?m5}mGH)A6($J5@bJ(Q8KIro0P8NICvq9LuODC0hIG zMN?%Vt8dk~&jkyUten7NChzo=QI_S~6{*`O%Tiw8Wto%H2C@0!%F)*-Hm?w%^>Fl~ zWCuSO)eot<b^<?BqwT#%$<I_2sdkn!v-uuVDU(cO)QT~AM6INwdV7WHg*8Keb~I?b zz{03E=&6RKM7QcJIW>>bt-8uOUZTtDaHp}$>v}=eXBEU94KIf8rS<AY9T~Yf<*@}` zZuEg&i^$7W5s2&%5#iJ&1YWL9=dW_f%iR><@hkfJ0acX_?FRl=bQ{05R5d^|M>22< zGcRdMwuMPnO<<MWRni>$sLF=29uq!WyN~?N%>mxCHkY%beX!lEcpU5jUO3x^pZMHT zj=#oRauUmXA13L_T-0?2to^^%T9Hj_|E(Hk5-S8_oeAVp5OpH3!{6pQc?D>7K#a7q z6DBbN7eALS8V7l^N7fJKJ=ktTL^FEogEb_5(Sjr7&2I-x=IN4c{j5f-Yr$+fre9r5 zvw4S>%I^4;&1_yC8*-Su>YadCHnVw0&Ypdg1+9UIWi*=wZ!K6&vw0U_nlqco!+!SG z&|Q>osp+NC`4Vqv8*Q-42F0wcPTDU}#<iBfVlE)o?l5SNz?;wC^~M1UW8E#Vc-v)g z)kN8w1K#T+7VIY8Jz5^P_Myr{^ERnp?q!;{d%dd%n>V&OHKBVAs!)ES>b4`a=HKU& zjZWs+>#5$J$D;QXKbOvvf{`4Zkh7jf@_vy<mp99Zx9P&qg~Y3^<(V;aAhTMf+?UH} zck_VAV`iYc3ah*lBAYwkt#~onoJB+HYLy@3Qr1bZ9#wt$fuqE#qh;A0qGpJnOQj{K z@7t$CJqPGM(1Skx=Q?S)yDG}|k8d?%56xFypHwcE>Zi!Xgxd!oK3n@i8t;u?PeUUo z+0B#QPt&MgT}OaM&Wk(2U;nD_XF7-39Bef&o8Gv6#w=e?-sB<Q%(?tD<Fg0ivc=&| zH<O+`?3JxkWKyIvEsY&4idras{?8g&r}2REL~2k%Vy&BW7pj!)4Cu%Y{hr%HT{s$+ zkfIzqkh*37iym5S4(~1UNC_#%?PbZ~fvQyKwDPubRW{I0wvmq&6Pv(})on>p4mT^w z5T{7}RvNm|^v*fgX1dYzsD{T(J8^*B?JYazU%?m~Wz<Hms<y(y*pF%0ro1l?*3??R z&)819#$KCaA~N&#_PsZ3bx6L~)9>cz1Wmm1c`t@1MWm#3<>#}~fGX<_(9<53)-0#k zxhdwE5%U2%+~2g?K{|nHhN;Fo#{z$rRpHWJ+L<($nHd>22P-A8XJ%Ua85>=YA$_is z{Rm|$T1d>Op|)gN1HqIk`ySNWp#PZBd*}o@^g2|{g*9a^@(bTTxiE+PLfCb<K%tb` zEkSne`T4Ph)XgLOI&8XY+1;8sz`^1WId!6JNg#8wywZ4{IcX_<0}4-hC6^}rP$mNH z+E<}t9%)xAEwQUL)t+od%!9ftOzyOwzY5wKQWLFm3npbbfe-$DLAA>kCg<Ziq6t0` zc#4en-|<?tHkd~*W*G7mC|0(QEO(G%<+c*jt2z=)*;-JZzg7CPM=8(W4$#<!kp;14 z_@;26vkU8Px!Q!0pZFKD8GZuY#$0u6>uOqgo&<bTWCp&e==Rp<sjFA}pv+j?V4Ja* z!NY+b=hm3Fq%q@0T%QYuTGeXNZG{mXYx2G`9fH!kIXlo*A4$Dc$!Lyqsto5f^^p>p zMTkx-3Zs-Q3T2h*UaftcvPvC&Ojg@EG>P}tmBdqKp<5A08$NTGVzwwhizTqwr3m&< zZ`>cLYq6_5s$j4Ch10c{qKfDsRQ65;`w9l71zLP_%VDP}ZtE0;%T`zkswykG@6tB% zz)Jo;WN@b8RRGQG-1aSaG#(S28`IH{wCFy_=3j061m>wARKuO~!K{w0JZBf}`Mda- zl!Miqi|SmW&YSrYmL8-%f2=_2X1F^gTEjoPJbVqU;axQ(U6X!gFM#CQTQ`MwvhOC) z64+iwQV(?!u>3<;=j<lA;=Fs{Saykq>Z{DinS*Gr{?5afER5DYK=ZxHqz5YN2Z%`O zzdi9HdG4pZ<4DpaMetpr!I1>J?NOoA_&H9z$Z{uoSZ%NbQ<e*`=9D|Vo^r|w0*iJd zhTrl5wG^*cYQLB=P>Fh$;k`Vvw3eRqrKFKPWL^U6GbInCy8Z(V`7<Qv3~5MDffnPS z3+K|Lsk6W?@|U-ZbLr)hUINRo{{`9+zVo@Wq#eBl4l^^G%isw=I!Uq5pIbnzX9O0@ zq8Zjiq#2#=?tP3j<5`(yhGu{~)?+{SEu^)jk4P(%cS}N>*!U{;oJeB#n+<9pkjXwL z@hZvGH{gHuj#pXNQ6}NH_BD@Db;9#LlGBkIZ*`>F@ZzHE6TwOrKej$UkxKH7A|vAC zSY`RpN!y9|k4{jG^MXWUFMLRorYsk*<_@=QKSvg3)sk8md|L^ylJkGxNUVNZR(Pl} zxq#<gGVP)D<av`NRxFz~38g$+DE2=2d%Fv?t4h(aA{;4kzS}JlR(0mk+0Dy4rk$si z)25>umlEyDcU8ZyfO-h@hdk3H1uNUN#D-_c+EXQRH+C&xu&o2NrZ6<NXf2pHqsLiV z3kFEU1m>TUWD``^ACToKUejnVozB{2np=-k)f*(+)rCE_lWZ?av>wd4XiQ#NHbndS z<=CS{8>pjcj9!_B@;A3u9mih_Pm^g5H+!YX#%jwATR&JC7QZ!h5oI^hgEEbC(V5Ak z6<2JaGZV*kxm~SpIZdWM&Oqj|MK7!*nVmt|CUAkJIQMK?MwXHxaeF%LDcv)Ty={Oz zY~~slf7fe}Knqe7r9P@ay4Uyrd5WZSX?S|mRP_U>!YpT7%vqwj^)!uXs?v}j_@aEj zT=D~%8k%w2K(|aQ*jBBfdRY&knLq?tsiW1Z9i?33U=7i%RSM~6hqGf(QUowW!!%`` z0{NBbMMH`$j5k!vGhwAd^3AIJ+98rJOUq;Z(+qoZkc%ky<4*qa?l29{jI|NTS7FJh z%_QGTfTuA*b^iil;xYHUwvbMJhiiGJt&ix$aCPr_>*&OA#C52~Z4$i^QhapAetIM1 z<sf9!Y!lc@`I^%fSr~hyhHb`Lg)${Of1kRF_ExV5Jj&TQ`Wt(D1?7(`$Jx%(KL6Fg z?%RZYK6;J!wO{6+qny@jUQ$<Uh8|?b>U8|RL5pa0dfhvEjFZ7U3^-OW#SR<%`VQ}S z_l8XKrC31;v^o{UZ1!3`wo%OXrj8oNAD*=8A8S|UhJ&n7uhc0=sQ<!S*X5cbHHfJm znOS==MLDBndS|PfHJ&lFZ$#%|J96y2{$n(v0TESo7me>*AtQ5We8&W5Qu&hpvY_(p zqKdIK`)jQwt$G{LP2!?>GJ4)z-WBd0nM;{rIUS%ZCGxHn#?2}u?>bhd>7G|tolg{( z_g+733u)}TGAq{RNX?WVP*tXZn4s~=$%iQ>7$?(wNp_&Jri^EclUMi9c)q8hY7^kf z5&{oUXY~ASG@kFvEbz#+Dh<UPS4WILKrzR7Kh5PHz@FZSw^>uX)iSh!1jDM#2Dbz& z|G4!WWdtV3Y~c!4q7$IiXB6yzn$Pc7Od0EmKDI4Ai5}z7JTIy$C5j1747p)D#RMM& zNYO5ve0ZnK0TR7^*9`vp&7=UQs|gZ;l{vCy?R^w|d>A0bTZe$*Q=chd@paQ);oS*8 zl4!aiRA&Ln96KtXB*{LOSYQ~HX~=Va`|#bX$kHcEG-i6n^$?6>)4w`gqZ5Wt1R6l8 zO9plm&v*H7rG>Gk_~Kw2T}m?PE&*Cy>*fBEL-Y1&iENBV7qH?q*G844L$p1kK3qk# zsS=GXL569l2f$;~9^6DL-n0@L>v!1GZX3ey;CA4xwWYvNSw=+N@l|d9YRPm+1&<?} zLVc!kt=%N+XOIfYH<hWV25xreKQ~Yf+zcI+X;37)%56{eI6ZQhrs}a#KE?XM`D2t% z`MktR{4=Y&aHA|Ix^d$k61L33cr*RH%mL06ldKZ?x8qlH7LkAZ!Z)tGhP|V$e-d3n zkyKWBG(p@n>Eyi4M4RQ4u7su=OjQ~>@m|-qGLIj=6lJ5^OUC2^`_ZdUf4Z6KxWCep z{11o8im9$CV6Di_Nk30^__dbFQv1vx+?iI*(Y`trtQxc0&e~;R)Y)1pFnrZHM5k{n z;`{SHC*NS6;d(CQYi!FC){(E7qh)#nT{yVPvI6T^IqmNiWF6mXxrVI+S^gKV{k@TB z-$}GcmyKQ4G*+j9XhUybQbe@xB^up5W6s8yJ%Xx`;z3(?QT4?CBpN?wv-M|X1qm6p zWMeX-m?QhGV=E};_(7tw^+_wDx+MZ_X}Yk_LK@K@bu^<lf>3qTxn7^|rh18=v@}y* zU`JMXdgstwvcjK(5zX*8U|grIJbjVI^%pHy*HlT_=E08e*1I0rLT7xxBAOWzf-|X0 z>C5>U-)~x`3Ad!tIy|f9kLze3KUd-zts_OzQ=8ZC<<ZkTEy;|L1nYk1cEyKi-JdV< z=uWmX*_5mZSogC!r)AR~@pmzX(jQ@{`xu}p)#vTu-9`WK%ICernH15_?M!2DO-XKB znTIrGUCY0(k*549^9)98i1hrFwO5JsmrT-JSWvcb5HXD}a4ohl(%&-4onXQVH_9uo z+LgGJ@}U1nJQHrSfLu)8wl=&1V}ZnCt?$yEa*(aA9bi?zW!di=NV0_zEt*=!NUEqj zYoI=`*0V1hr1fr*mgRI&XFtt@waP@0X>IvT+pAPxvRER<IJ&2?4shB{i}HA)ik1ee zHZ3FK5=hjTf-(`E+ZSGIdX~=Zvk{R^Bph62GCD<Dx~J87T4$Fca;$rRy}vOXLV5dl zFKu2;dHZFE+11J_PKI{%u;+6#(hQy&0$W+JVg7cCfR{tIDOBL=KD)=h*}|wR5H-$V zH62)gw=VnVG_AiY5wE**h^Ebfx+Vdi_r`~wRdhPJ3Nhnt=~mWk)G!xBiZd(KSW6nb z8gh+mFsefDJ$(KZ(xNqpnc(S{$+}Y-v>OnC*9@IeM3MhmL``&gY-QwuFVBcAB!9RL zaeHf8$13X*TC2<bR41QSwDlSyyRL0$MMJyOxrgTF(e5-y!(w*{<SA5_3`D85?ulGY zQR)VXX1pc~NfsT^X)Q^%QD*5)LRm7Db${`Z&;rW4<w~^cxN~(Xh{TtU7+gSk=uI*e zIdW5YuG}V<iMLteb+e`N8xoRoD)UhN*Gns|9i#fMEfP<&WGItRM*qO?HBOLZc@n9+ z(`~1_9|k1@EAiWHiun7DTQxlG;-nlyg7r83&*7IWOtx(j3olBlJY;#VZ)kIfEH7W? znPGXr29~_u>k`e}c8La;A!SWL(%p7;^-7X%hr~;C($mMr^aMrYPnEmv60JTvWg1@Y z)a3&ag|%V*J+ucdkcira&I~>I`0`(uX(V@fNpT6@GDwzh(llIAmkUINi|6&;Nxo!v z2`xH-I&B%7GqisH+GWQzTEF*rb1_V=7)ORDv$NAFUyxB9L$rfw|LNcj6#wllk%}Gk z*j)7FTwHRp$K|rgTW)107|FCo1;;49-dDm*aeDf(*3y~IB)16_^Jpb_bma8YG<*9? zn5ni*cG=4O*(-W-Ca=IdP(n)2BB_$ojlC?6e94c83VBDZgEGsZgPCFh>)Yh-r7=8I zLUWrjh9J(X)bcRzJAODoa%8Zp6q)j&j<QtfEbzfT51t}zJQ84W9VBh^>ZL&)0T%F6 zo&WKh?ngytrc-W@r7RuFNZ#6L)e-W>$7GU6MyXmg@>-MssK11~*6|Y3U^kjHGgyhe zKFA@~2_LK9i>zmFQba;zOpG*Hsw|`*XZq&tBmFojv)qvbtS(b(a6mR-nx!?bRX(L* z(y<sX+puS_w@)Qem9+)Q`ti|i#U$%#4VQ{SO_3GE3rmXbzeX$284Z&cg951PoFZM_ z9#QWK=})1=G~tFe@MY8f%qyln>sg6KHIwGg-=oV;FQWN7r(^j`MvO7hZTmhC|9XLL z+ZP38vSTvc(;up{h+^CNQ3d?1kzyUWtBner49W^}NFl8|o}wJm`5?ryl5}*Phj<R@ zf{xqGsT*2#PXNvhwj3RFnDz}9bwqIJsZ2z%%oFveU!iFJl8&e;%~qzN%7d}%Kjm*n zUY2PCY{>&n@Hr^!+3M%4rIhu&q9+D%ugW$8ylc|T&3nkZUX`iTJ+YU~I*?U5$wg$! zOt7QgHSAa+?WnKGOlL+`M{B0lm{p=GptCh*^O~cO^8D2*uYxAAUX2l%M(^5#5&eAh z<n1(~<q!=V&nu58@H^js+b)}`N6KrNhWksQJz>ppozIYj6%fq?2~nKdY-w0N#i<o# zrd<wlRL2tenXbFX7LcE*B$1+>u5`_Tud<&(JyRQRT+UzOxk09BuYstuK-8F$9e0W( zt1PkDqZZ5*3|bwCYx48ISxg!08@03;ceLGMO=CBt46eW^LVai2l?@c(RMAuE8LWYZ znZTcYlYQ|p`Lmm}Oina7vS969IV?So*50aGUJr*EL@<{vBWGWsxvVA=Z4MjDTd-0? zog-D&S9Io)5m93eQEv`H)wQ2Bg*q#5;dY|lf~c&>s%&IUySKp(qTU*WYJ#jlbDwx| z?-A16>KbZh1ofXYsJURBT3FX}n%1e?biA@yiND*wAfMK$+Y!x#bqdu2=4Efnw=m`% zTBaFMBN)-RH<}%%5xrB(GrsZzT8EMLLqw|qXtKJfuEZ!JzH8jfMHCU=rKS0=`Rhzk zm5S<T#x;25Jk`(CydKpI?E&>)&pc3Yit4{=Y1veZuM3V<rA4vvCokX5y9(Sb5m{3K z!()pg$CjJEzDO2%52Becrl_mH{$^u}sH?!e!I>uA?nhk(7Iun1O?5l>A-YLi6jy%a z9JZCRO80BI2G65VeO=wv%ZsSKuC|WV%}Fo6q}kGK?9j+yw1=b|^X9@uB;^AVS$By{ zJuU#gFY}jGJIME0bgZ6MgT4>McuU5#JVP;F9hv54J(t-PE2ABrQMRnkz7@qpd{9GV zC*8?uR=1o6P##gV)A}v;fi1KjsjDGUv6Zpd1JSxydv!C>>Pa-vjKUPzR<6Er9ntDb zG&Amtquue`qMx?W?)V{z#;i{oMl;rnudcqGLssyxL@KMB=@-AQvY+g`frgeL8=Uft zp^RUfCwFe4wYQ<nvL_FSbf#xmHIE1?k0q$lsa<KrC5mqz2}bPT)ExOKQ$ft%Evj$@ z#r%yVYJx4Tf7!(Rb<d94MH=&{hNs_1DN6^kZ%;27w4Wl3#}Lhg2m{4XJI0>RB?%jA znTBI<wB{w9e1xBUH<4-DhBL}Gf&9whik36vSDMN!gIQA~)gv!2yFixSOd{#7pejp+ zR=OV@F)L`LYc8>RvLj-rE7|zD8_2x1JNrg4MS(4X5Y0G`LTg^~4U;d?Dim72N=Q=o ztnMyn2CKWxGUMJBh>!-h+{n8>hk0pc_OS<+{(g`3*`%A{0!=TNs!u_q*ePP!IU2>5 zK9cu|h!j0cSv!#>jQOehMzVxfUR_DB4I;m6{555C&RzNCaVO}UyR}y`KTBtJs-uX! z<SpaZuOlz{c!^vd8w+GXYeHojSmja&zPO!Mxi(sw(~)d6kB@vx-RMdu$)~i{^D^1p z41>`#8qa&zRV$|PY^Ni7G%XmE#}m}}j%-_hjfK&k(9qb?f#FpSjpsiZ^On<iKB?!K z@s0`b(Oc(C=kMvX*ASzvZaIurwsMpwoc`#Ab2Oe28X8Ncm&tf8@4D?8jb{fv&y4W| zX9gW>e9G@)L~4jJ4rx=OKAIqs-t%_%WfVzw)Uo(IM%Ft+YxK%C0jREDXRIb_6sE@8 zGFVp&NmyknSY;z$-pg~a(K@Qp`#b2~f~RpdKilf0p_SFXxoFRjWwh3I*7DesWYSQo z>kU{XzWyb53#}3{8XA~7bsq4dPwkz4-okiKX?W~dsZ6Z?$A|l#BdhPC=b2&kz>Buc zZg7U?FIG!5ygxx};QT(fE~hoHtA<uKugPuP-}gL4OWpj@5=|O-0#Mb;LqYzp{=laD zYcf`xUouv{s%c1|tdXehJ*;Mz^;EOnJ;2dFovKa(-g5V?o%!fJEs$6THC=F|JbGa5 ziE1}?1;x<u0ai!5JK5?onu7*2)$Gu;bu?260hYGOi2C>ej=O%71H?%TaJoC?D+B5r za0az)?mzpfD`}4ahn``OoUig60nQy?&&nfC&k}3WZ>Ur`s3K(Cps+%!2<hdMhu%kI zw)CQhz2NCcVZSjNn*%>T=hVPe7RKx?GAXnJKxG-hSQh+q-ww)MK7)Bt2JiKP8wx+Z zw|F!8jb}xoalHro{Kv*G;yqLP`1FL&pWz)U+6~X@8ON)>pA%*3;mFWl7gL@w5P6(f zSX4xjM_(T+ll4C%4{yf%>uA66{4H;7v@qWDB9GN!A)vB+KqG(79(;r}GD+mIE1}N8 zHXx!h5v(t@GnyZuX#52~(d9|bWEl-_mcf*L6_9g8>^&PvPAjBp4Z;jL?elLxN^<rK zMl@_2s21Zw*wtd9CPS(j@hf^6Eb)~yi>MEHiqG~lr8({4a9GoADbaRYn$dL~_?_cz zXKbeYqRq$lu+*suD->AS&-~SZ=Z^aO#x~1Mo}ic2<?t4|NK3Es8jrf%WwrVzhwdq) z1|jxfHw2wVyA6T8>p$JoPf)x*K;rfWVyapSifvz-ym2M1QFejmNzpWzRUS{Y59xpA z81HBMqK0IAAA)@OyceE2Xkl^<4A8vg$qAXP2aJ3)sydE{*W%;+!^BGiJf}zAmaFnm zzWwz0rrT%_nI7OV_ie_#5|rUs_2uvdv=TccnolQ<#)e?Us5m38m{tsDfXB+M0@f}g zRmT%mT~)k)4DUjf5g^9f*wtLKnCKK^M)lZy+JOxUFsXLdl{(m%H$(bztVzLE(ifMG zr3rkMZ5`24Ka1n<wYVjk8QO`)F=6eh4K$9K63uvD0b~hp9ow8kmf#7n_$5o=R+L8) z@pjEw%g<;A>v>wYqRs>BY~tcArzjgX#LG(@z`72n@b05YCgeO&O-WS0S_Ne5L-j;< zaAMOmvsATpREsxrb>pK{i<cFQ7)d=FGzUcLqYHL4cMhM%d-n{}lbQE6X7y-aU!_Mi z{zC3ckY_@@JctSN-rKmFs!N7LX0(fiqmrPiGm1{aX0(3&0%`3C$c*VI0hMPG-Pk?$ zSGRq1WA|lDr2ZcnE~dN&BMqQK-#=bq6M3MKda`yar7S6`&TT#CpQTin@rs^DtCc&; zksLKN+1Lo9h{}_lxWmG@uLAB6tDMwR)*%pgpR2n)pW^P<L>|3@V)#`>B;7apc^gQ& z*CkrKjp}j}V-uv|RF)3pqB``cTtFGVHzb}ld638MvL&&Xo8-1Q%9?}x?5@o}<dUC# zGbl4D)6O=hlCa8T6wM9&^SgcIgWi(K^fD0TkaXfIk1$v{w?FWFF8QEQ5;K{tpNu$A z^ZcN?lz^BOZR0gsqa|VrUo=f1f|IMup6xry7mNu)Od4!WGg_C7VuU<Pg|ieRye)BU zL+zPKnLI*~R7iO?L3X;~J#X@UsqaX{{_M`F3EBfz&6;;jKSUZkR^p}FGHD{guqw+4 zn7yw}EFk8)Iwq^1Paa5Ju#Jr?(4b*6Yi}hD8mD7=Co+jOa5frwp)A>^^aJZCOZHwc zu7kHvWOzwrbvp&S*$#I#+DF>^zQndOPj8C$0&jmPzVb!#_Twd@i+KjtAWyHr>QVx2 zns9E!Uecxs5|eGA%TR+)M88x>%!xW?*=caA#_KPV27e$kGp(-7BnNv}3^*k9@dX}f z)Z7beEsQ%!;%2(tNycBiLoxMJ`<~|+*AI0(@0w=NPQZHhbBc@KuK7qu^sZ?Ji6EBV z+U&k16ia`sBa){#$OAFvt1sQXnqth!Iv(@%5>DB_gA@M9XR{0GzVs(Ln%$k`okXMF z4#*f;kj?vSOwm!9FEAz}pv6|*a-K%?Qy-1>FR*oBi&s)-o6*}SKwpmh@6uV)m#JD> zcWSIB38!xJK)R5(*YmC{)4b;^)VaVbo$>Q4K+E`U_I?`6={}l=-AXj6dIv-Tn<Adv zK^e)<d}B#8zTIMvI-5U|``RzvK(fuy(DWr<s+NaNRoc3u&(f*N=OWGU?i}4dsqobA z%jpDerby~;^fVsjbi3WRlE3cyg-Bu<09{d@vgRYX#@(=|faIDb(Tql<h%_oSocG%O zQqX!6&M<-Zn0{sj&*gsQlZo9|_a;>%t;qunt~Mwy9?|Eg-IN#qTHw*kznZXKdA`sN zt!iQK)fD5-mRQboc5BC~zZ$D*W9YPf&BM1`q|^3qv_$@NrSB;@$&sj1krjlt`i$4! z&e2fm-8u=TKB}Nz<4lzwc9M+W0vcV6r+(K4&%!_)=4v{HXEMGMsGYohY$9}zE33;1 zEMwBWzpkQn^?N<hu-8O+@uRk_xwJp}pTx_g;p~u==p1M>SbvW+C*r5^7ihivL1sp$ zSySaHR31^3pRO|g`)!n;{!v5oq@`s&?O~mz`rB<O#^22YQN#q-*(J2n{v?ylsAvK^ z-9f)4Zl#(08PPgq8Gqjq?B^4jH9Jne?ia)~KBhp*yc?d$BPoAHM1DGF%=e&5zu{90 zj#DM~Z!*)kd|+?;P2In;EsQl+W|5*A<{{aJ9r~2N#5PanC8Qbc1_1IRo<0k<QI2B1 z%%TXMy44u28%DJ@kyGmONd9+$8RMq+7#LMj6*JbvDW6ZdMxN~tfyT_8yBG<k?AcJf zR_@O(yC^dJQ=n1vPh&52p(sA;v0~m~{4ZZ*Nb#C(<E1PUIw`r<Z`2_=Df!zgldrU_ zqm2s8qFgSgE6Mx%ud&e#2ip1frqI)k8Tp@}WOf1;<zQdL?vNY(t7;CCd+elY`$+Bu z*QXoIQlJi2H{O2ZS?XZ5@OorWu%awASU+BjJ-w3Hi>}9JD(!a4VTdvt#CAWnk6TZ9 z@Wt0-vlYeY%Ts8!GipYhq}g5)l+Cu2QHEbP1S9^<bJk@v;@Q_Dm(hs7xP16t8u6vq zW1BJJz`76rGvW+c_cDpi&DrNy%F?=P%)7?Vf0tjMUIy0v(j(=z(tNMD9=VLH`^Kqj zb`g8!_1I;kYfbm&@Kdf;*JGQZYhVxe;EJW!$hubtWtWw8&#u?)5{>wp>ygW7#QWMW z<db!;y&l_y5l1y7i;mvE)xy~8yzz-IYA`2bi`LB0o8yXToYzaTvZS=boyLkBynzaL zD6&Z_uUp_OqsGHG7d2t*oPS{hqgId50RNz~{&C`O_!mA<Gj%@j<gXsDypufn#(&}K zRZV&H!TMRR;uFhh=5wz{2j;EJ1|x4v`eF@@{HA|lm(|Gk|8c}-8u`ut!Z$whXeT$T z{>KHBP1z#RlOi%QY??qxb*xd{)JHu!ETX+?9-^_7Dl5p9wjjz(Fu&s)557jHlv_1S zH-Cx<v?EitCsftw*$}gWPVu*Csq`dKx;3M$xV6qr-9+4cE!Vr*OEJZNfvnsoWAgZ` zE8Bx`O}WhkPWkR=S)Esp?$C0*L8vM6qWRr7s@WkL=bb^gX3Q_THI_VY$P&6WRuF`1 z$~c3Qf|NGxcpvCpT5c?>YjQLL;wsxNSe3@V_$IGf+pVQ`?GTw@0y7*)8Z))!>ZWXj z_h^~%)*-&pjbd#KGHfRBkw<>!tH1gEyuDg}kH~~jW8M+0yccKw!|%@SL$pZt9E>p{ z@W<2J|Bt_-ykAF5jBXYV236f3BWjI?ytn@WKyA^ytf-A@k6l1(&p|+KMMsF*17~$v zfz^DTGiN8QvWE~Ah^lI-sKfWza#t5nhwsBWruQ0aP?J%Y7-;ctEmoYT6O$uadM{S) zNh_`)Ek=I$qrCT)k{>=AjA+I<gLQWJk~q#iCUZM@>}e_fG-_9)w-><f``r8!{Jp5- zG8eVwRi06lH(v45JA6NK0`ll=I#~Fos?Ep;kNly<CW?wrYU##%n1R!&>D^viU}3aV zI+_Wcc|gq6erWy@I!`&R<!PH1D$gVu%P)`K#$U%cBh$R`s3E&VC+}?=|5ijNnT3d^ ze|%J3La??}>oam2dHJ)5>5KOzL6xb<LMFr(ZlHbRIY?y(JKe3REJk68ll}%@l11^a z<Cz7kDgG@&^ymb3E^hUt8LU`DQroKc%^|6auggVCtFm7JE33QFasHakc|`X{!qP;W z!K||2fwQ!lUw}+@;V8}6i7UFz&?)EJOO$oI7@UcQSXr-8rPq}TfAfg+5@J)_Z)k*3 zElaDsYP^=^axkJPR)n<q!z}~&>F5<i*6ue9$&GwvmB!<;$yZ)Q^d1zAOGxF}MVgg2 zywYyctZPA;aIlrxNZ#V-nqDS(Ln`n$D1Dnb_VOMbgEM(sG&f(~mB%02MDmsk$}~w{ z5EW;|^u9z<arq$ZmXf%tz6x2=7az`BNmXGLf)Syxs$}FfnjTNuM6y;4LT+WctmCRA z@Eh8df)P!T71>a$-9PUjow@;%#r>8fw7Ly}?8u`HQZ`b>Xl0r0&9+7Qq7DhGJi8!b zeYEq`0*W?nL{yWa4V15LUJz15Yi||AjWxdZqB_p`>o*>y==>%Pa}X<5lLl6OK0)PQ zuclGk$tP9?v_vO!in8G-Gm)2AaMgN*yhOF2OcY!w>k*K)pzrhxB<;;IIXZ!Lryk5+ zWze)!P?i?mbL*1&B7dd(7A@1e?#QVLWg@CRY`cBWWvZ;aRYPQ*1|<bj9#OD&-PQh$ zvlhmxu4fs}yP(}<@3uEyqn-I}8lL`XU{&c*MbT&F>*iC<!R;EF%b9NG`2twG?GKz@ zMC;iddNOzhSyfgP9sN1wkHusgcLpQ&l$1wVQ_-ru;r+XJk(4#`OmI+ThLjy62Jp)K zy8zL}Y7h<kSTL943ddd~DQoJPW@HILwr*X!in~Z}YXu`B2dh4#V23;{X9Hg`@79ye z$;AR6RHxPq9(CR$Gg+mGFAd>Oj7kcutWBWWacGbHZ0gBzua0a+Z+_ITtHtooR?|(E z`*cL(X9+0Jef0M`k5Hcbewi0T4Tv1k%nzEN!RYo?bm}eqys<Xo#-yh^U6~qFRi00f z$@^pJ(X*7vdjL`${2>cTiA=GXxz4}&DW^q4b;nSz3MzA#g9KGcQH+rH>f2{2MyMk* zpK{ub)dZsmXw#u_tH??olv&+b5wJbet|>xRA5q|OPdTq-lgF(q6XP*bbv#jAvT1!i z{_a*i4KX1jP1EdDnFc&wyXT6pSeShEH8gfj!FbdK){~-VEAyUU4{3QBY3#<hL5l#V zTt6h<!{3y6Sj#isGY0Gm&W(F+1w}p$G_)YkPAY3C+T~4r()$u>Lz$^p7iAiXvsN!T zbd2ob5kO0`JIdgW=izd99VMG@q#=6xxieWW1No|lx{P2g9^7o*LLxpY6BDiWv~+7` zvcWf(kzcF*=b|e_d`v_17pxky3*@zXI;}<IwHsI9ZwdM{n7T_t%032+=cM7icx=-| zmX3EL)j1jU83bOYT&IGQ6x%fQ5(AGxCPf;55fXUOT+ii&7RGC)<8_OO?_}(p0qM&n zTf+^cFU`HYUN-AMm#shbqyU>8^$`VrwB?x__t9>-g^n0+>o2LNvc`b%{PwX(-V-}i zrm-8=?9t1i1}lkxbbTDV7m##eI-X(afIWQNbm<<Ny>PGX^>SHRjjXGq&7BNd(kss% z>aXzC-?J}Me}$Gl`Mg9EUZDgL)B8E?cF{{Pt-R7bYtPVMMO4-iVB`I#bSNMjZ|#+d zn(TLHmBwsEFmB`M4X4)zxL47OJ&*f&nNh5(pQQSx%vJ2)A!}%^+W0uUAg8DCZiVQE z>P-)H-b*)B+xl5qnKpM<_K1@tmhx-?3v1SP>Ta^Ic0Ll7``FXWsC-0owegv#OEgzc z_-HIasx@TwxdNvN4U-NmrVRU&0S-I30O@>FXoHV8JWI6pKAJaiXa)`C2kdn}JVEvq zQ9?`Mdv(w(SXnxhHSCjn(?*J&JCyKPVj$j@>~Xp6gKZ|*H1Hvx{PySC8jKm~XO@XY z=kNLG3R!eVA0?VyrcdK{kR&rx9z|3KkUDA7a;j>H@_OH-Xfm=aH|ta-X0W_BpyXyA zs#cE9V+wbzJVEC%(buJGgLYLix&c4KUj7vIvFhX>V@kjpu8Bo!X-Li6_t0#1){x5L zb%ONVJ9rPD7$2*ow~gH@PoA>wpr~^84^4JaT=JA}_C%U)W1vh#yO4=Z=53^1NS6}% z=uwGe-NO>f8UlRvoj2T&OWrd!z~W1*u4%R@k~Mj%Xdg+|H9+$%dFE%}9@_lGHez)X zSq^umRnzECbrjJ#_TTqa+ePQtae7t<C+q((MAIZ&m5DMOo*utt)68`jnHgCwd+Gp# z@fXU!)tvBj4n-<Y2WU}4ZOPr)2Fq^n<vkEBPpR_lC5o2g12o-pAj)G1sx8Xr=Pw~0 zNf0>fDr|pt+9@qU$}Dhl^Y9y6@+hiI6j;Vb55)}ohi|+}F+&fL<V<BRH$=1cQM!Rt zwrms^UEVh{m*S$HI;O4xkU9@U&JRBN&PCG4UIH&GbAZ#)*=h8B3ZRb<)mzK+-Ms@e zUkv7S#M;v}8y;nC0VgH)uGxoaJ$)uX>}g{$pV4eSx?9rh&gxs~ZppL06^=dCgaagP zh@w1`XjjsE-Mx!xSJKBPX^g{!T?rV`Jr7-6MkD%M35Okym=O(uRkhv&uN07P?yF-N zjfYwQ+NlP`hwfms=lwK;QBWwbfXfYPZY7VLRKke1rn%*#31z(pvgFP?w~<Efg#gDJ zvl`Ytw5k=RJ#~S+h_!@9?{|2$!dNX2()4?NZhf3Iy<Z8fo6{i=p(z%%?Of-L#7QpU zB)Sa0>HyAly3Y<<Nb5|Bj}vRN4z`u?-t>jv3J%fU)aGOA(lW{;h+_UKc~9q2%-_F+ zGSDWZ(G1!bT0b2Z4j!QOGu20ANnO+O3P=|-_T_CM9T^bd8O{Zvld;z~uPCCEF}sh` zJtDG8Qgn~l*rc9O@d+_;-HgRqz=O2AbJPm*ATNqU1XI=&G>+X5ZreoTIM7FnkBW}$ zmM96O&H>Tmjmdo%Q}meT=h!k_QB))%p_Dx^AU!_6@&+QM3nXsY#z<gIxqZz;duUB@ z_(-e)i7q%*l?d6^9X}j8PPXL~I4&L!mrZQ?%IuDOuaqJ1$}TpIU0R*Lzc(mAGcz^? z`N40`C7mT7?D7#4pXnYYDTlhogViNu#D>e1yK?)YQmU0^T`7&Om%w8b?h9Q=9wXBy zPfx39rwc&qhd11iM_TXk$%VptRjo%6TTYK<>xeVhCsl8@q-b5dDhKs*sNa88F7<O5 zLY$=TSu9PJ#Oi?DHvTX$D}?M~%NpWzrMQ!*f=+ggs{Akz*Z)5DL*DOTDC7gEvUZ~0 zUBg1(S#M!dXKASbs48Vku-|?B;_UU!8E=@t>uD{saRz$3tj(|cX(fM2{|!u#8D-T@ zJynC>1|9ArvcrL-4p#4Z3(I5c4nI`K8RhEh-PmX|<?2WHnBK|(ULX<eaU@eYoe9#S zO3)wH{k5JdL0{IBSrh&N&J+{4Xb&{y?-mPb4>VHdc8b&;gsYA(imda$=x~`L>sJu1 zr>2pFx}}1;g4{2sTqEMEIwE@@x=hYOlIJekNtuS%WTNp-_`okXUySAzD6i{S+QC$w zJy3ztE9SAI7ADynJ{rG*M>Pg!bcY9X*S$#(UfKGlk0(B7OgnXBQ3qO0J`6v2jw+Pj z0z{VV)<4yytfR>5l=tk-Ca*J!Vgj~?`b(F{#aa8M*?4`A?yyODMuAt4Z@%v+dG*m6 zvPndsL-RhqYmJ2w$7qNwHYpPcb3Q(Eg(Q62H={{`;LZ$>3U*NYhR5@F8Q<{}BL~=$ z2L?}!sLmrg>1{dpy#o|2kM%P<nxU&Gt{nPa`D+wcz8fIv61J)mp$Mz`wKum}7-yVM zPm-e2((D;-yBieqsq)Zy+K^j2U8G&Wdww2IaI)(co@9f5294tKXBwWPQGDM&iXiQ+ zDizAVv`VO-OWHr)&*^4M<u7G2b4zw=8`7u}(dl*6<Nf%}hY9|1q$DR8MpYKN#q!gz zam(no^uz!wGbWuqM3&AjcG%dv_qxebrK0+<@ezIVDMRvspGvOFY4pAfs;X#G`LWd$ zNlfz39!rtX#A%MOmDeD|dbIGBmBjkcFI572r8~ox5+^^^t<D1Hu1(XkHq*K5M}8J1 bs7;tHw2PS1WB4UHoB!B9hT`@ftN{N9x`GU` diff --git a/Python314_4_x86_Template/libs/python314.lib b/Python314_4_x86_Template/libs/python314.lib deleted file mode 100644 index abb4e0880f63d56c065bacd75c2d78f48a821220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412624 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%0AC_*hs_DaNpp0h}! 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 Ou|DfXkfOM?I{ybL^$xB8 diff --git a/Python314_4_x86_Template/python.exe b/Python314_4_x86_Template/python.exe deleted file mode 100644 index 7fcbb87ab2544e8c0a43d57dfe2a2b21cda56575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104272 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 diff --git a/Python314_4_x86_Template/python3.dll b/Python314_4_x86_Template/python3.dll deleted file mode 100644 index d8c68c0a85f263b246311972ceeeab116d711528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73560 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 diff --git a/Python314_4_x86_Template/python314.dll b/Python314_4_x86_Template/python314.dll deleted file mode 100644 index 47e4b823a289d4f7561d730db2b57600ce9da481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5888336 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%0A`i5kz$TXdkPRPWk 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%0DQUSaXnAKkQ-`_@xT<^<z-iZ5V!f#;JWIY?Mg2V ze&nv#uM<~{Itkof_n2H{uX%Gb*nD@fB6iW~5b(N}lg~d7R^dEFKg;uhk*mL^YI)3L z<Z2`0q@<0CPbn(=++%7!(U|;74PU)b_Zd4s#k0Wbx=3|sFN+a*#wO~SNFDiFV|~$X z?h$_J>yXk{9hI1+;%ZOsNHK-APL4vbDIS}0OXQplTdFO9<dH;MDLX5N6+g4G_rmp- zxSf@~DSwW(mvw_g(#YsZ%7U_^`DI;L>w5{YQuZb^@u4;GtqpSFaX$3NY7Z|&Li8G< z7H=(K9G4tZVH~ej*Fd=VHRn-+`0Zh->0GJ?Wmdj9_)b0aJ+)d(VOrwurdl62sQoWe z`x^KGP>)w;gR?1Yfya)QjgASDVcz5ta=A~wDy!aH6z(I<KGCqXHLo#Yh@@!UF1IOe zJy(Fw>clqJn5TX$;C!#;#Q4;mE+Fsc$e+6`^JmzW$#n*0g*N^g!mTT2*cTz<cVz<o znG(d+___qe@Tt>C!UbFpo{(|tTHK%9V%eLxKe@%S*ZmDvs#=sU1nr!yBgzIRnl0!M z0xi}sM|Vp!Yr_q_A-QaOn=sGjW5Zha8scj6#M3m>y+)o%7`xo*SVZQmeMr!6Y=}yc zA(fPeaD5@C)U#1~NvqE@CSaT@vn!QvYO;l7xuG7pu363*tdW+dKl`0q7I>^Hejbn9 zC>rO6X2@ny@8q>I!S$Mi5_vlzy}B-Sl1^=P9I*cMnNzS^a?Mt9?;kOcT5Bf{={85d zfQ<;QR(j(c>&LrK^imePO1Dg6kXXVqzZ=Jx@!$bE<-3yAT&`b2x_oJCOSD<c<^@7B zS*ujj&f(wEmV*N^@_XNjx1Y>A^B@3YAO8lvR$0&MLc)Zb33JgMkLorf&hC~YxOfyz zp<|-Xo?%(hQ3uJM)H`a8<WLg54?w3brhn#b`!wf6D;9Vjmp_`*$t?YW{Af?-ZQA2I zU#Jx!+<Cp%yui2RX;r<QvTODtMXFq~pM|2IiB!o)K_uX4o;IQRz5-&JIQBCdievjF zU;tZDY>X5ixd~EhjxlnY$NHb2j81F$APY$kuM4dQ`6=jK=UaI}WG?C`GUhzey6KFZ zg1nWLxvZ_gqS3gH_7nX1Ht*bxNc)iy+$g;ZBRPz-;F2#{;%4)X)6qfQ0*6Fo%H8DJ zaEjRQ6!rGfU6Y7m!tbu<cV5epEObXcWGU0s2==Z0e*gWP@`zr0-shlFnaS}>H4GP1 zaC<Pb|AoQi4Hyjl<uDpD!?nDVCA7B5nN28L)<A}ogBkgQ{fG3kZ`vT1a)&|FU^5<n z{I<A6C4pz{Af*R2HCm9Ph#HQ_+7wn9!cMho+q6SI5TTJ?PtZ#hgo2b%*s->$Etu(X zDdZ5G1d_o+Jp7K~*y-5A-n8f_!ol(8^a<hj*GHTkl7)wO@kgAFRy-6k8+R@x+srQb z)TAM6l3rES)K;0N$uE_1Df=@ZA@K~z_IOLi@m_O;0B!dGTbsKdRi_Tt`4VCraR0hY z-<qr+jgje!wM@fTY0CQTh1qGhZI^qGid-;7z6I;efYZEb!O0d%qz8-O$MO``QPad7 zvyxn0I8czb96DL&E=_O<wHGMD9J@$Wb%lz1SGwyaCEtHVi&Q16+5k!K?;cS@RycrW zkzbnW#2DlT>NtQq>6})q@jrM{X$4Lm8n?5rv{T)Ot2W-R&OQ7U6wh>+D_qT?v!R=; zQei~v-K0G+jcF3_VY&aK`mqt`wNS7*9aYuVgSuT-rBTJzF{r%I)wCepL!8Cttb}kN zQZ|hI#L`-~EMjl)?v1^&Vxdb18rQ|XspfOrQl$V=qG3^_gxs3)rkf*zb7_5Y+1dKy z03w%RN{Y+Q;A%C%GW>rMje#%IbYr8<VVlZ^HO<T>M00v`W^4+wO(Hdxxh7Yhtv|1d zCM6}E+U(FTSjK>OG??To@HjF9R>My@PAte?0LYPvyV8I@KO66ptcwXYBXJ@`zI=4C z_B48t+=FN_o6B~>?KYP^iBh(??Dqt>t8OkM!DBAmm8-ez1v5iZXO_KeR_2g%yLsW$ z&7t2g=H|**o0oJpm;F#ArLTgZ6~5WHPVJ@0srD1Mz40yP4T^p@x5OE`4E}b^i5BuY z8Cw^O_aYjN-6G#GHul8=Bug{4dUImsHjj`}dfS5AROtePZ>sbqQhJ+rQEUut8q#K8 zwUX)mmfX-8)K`WxH1Rl5q0Tk-omr@lK6hY-XYP@+9nEs=6cn&Gi2#fS(L0;7CV=t; z31|$^wxJ{gJ^9<bii+@9vcDb4C6Ap1!@CSPh);2jo?<QLt9pu+YKrch*i4Czmr``w zoW%U*q|VPR^V=DpAIs&El~QTt+>b=ceg|J_nefU=#4D`JMBzu$wLm0vMT)dQu?3#5 zE6|?7w)vO*P)CE{d+dV#1wVLL6*MbfHA7FDpu5m89GnQwESyTF_JI;k5+A6}G2=X1 zuG<@W*$nM`RxY@;sBAx$u&|j?F}pTHFC&6iv5g+;4ZUD4{LPLVSh(I$hxLhE0bW41 zj}^P5S4C<be0rAu<FyCP%BSW0HjlX#v{Up)>)-y{rXv92A%9tC{Vkfly~6eEpvCnp zQg*1Wq);-EPnr|$-Bflc5)xr?!_MGmb*J=aJlA1uO6gKULrIrcY?_rmt6^v8wHf{; zoojz?F6r#w{a+r^-K)9whB~9eg`EoRjFdfLF8n<!6{uzbYHHPcb<4M&kriMFK9N;F z!g85$S+z?W8=7Suy@l3iF*vC<yR1w2H0xgwo`^$eI6C}$*Ll(Vc36lyH9jyJ|3jML zaNa=0tEEEd_w0$I8)3WD=X;>mTJ|Hs5wyf*>FM-Bv+N1*ghOqz5g{&>V&WV|!}s~B zuZ?Pj)9fj#tFR2BdEt{MT5*dw(JIGlwt(Mk0l(RV#pd*5qB1+h-_G5~@yv|_yXk%= zvGUgWY7%;<zb9j0*-KfsS?0ng{h{Bl-O5-~N2=LbM`&oZwdkuhN*0W!hPv=U8yNJg zQpy(SvgQ&EiSg|+Ut)J^t)(xpC5~`hmurmFx?GZZipZ(xkGEQ9w)AcJFT(ITLT^@E z2mbqXZ*2d2qsMvve8D)6lmFZKFW=>V75@dv#`SjvaF$MUf3-5Q^wn@Z!&u}dv9VO@ zJCR5!N$+A9R(LyDzk*tIdFyWZ&~fr$_ybpXpVx7kMZDiP8Od;H9F$GCK;=nez4)R6 z30q8t%;a;aGUC+0KM7BsOAO61?T(&e`THtA5&Sv4|CB3-7^-F!?T(U_O9YZ``kr8H z`60hVh;@ftuL_g59e1DGj(fH2`8L==k1|i-52tagx-09A|BK%EP>H-JJhdu;Hk401 zWW;iUKgFWKm>@<D)?DQ-go&rosP2*|Z(>6vD1sNq?Fq)_yY-#M&De5e@QlvquW%Wp zbl`rXTDO+}&^Af9?`~e7Bd^y#AJiC+d*tAE_g8g+!KMA%^veXlA;XD%RfK>@r9>Eh z&SvWq&5kvPrLu#=1n_UuZ*L<$Rh*Oye}zCI?i}d}o{vlf8t6u$ya7uFFaRFqDZKWe z-1F$+Huv109TWJq`PWNErSPvJ3%2>!Z=L-3oc!xAx2R=Q{A=Y|Z0ZVZ{`IdT68viu zO<Dgu4~cde{HVyIxlivDP9-kLH+hmG$PfNomG#>(HYY1qnxo_>RGx)6WMgF*Pn(-6 z_Y!kuYyZV+l7n)sL-arssiT!hoLI{#;<4#&sqTtBug2L-HZvI`>$CBwz+x&3g{Ho? zxlvN6n5ST+>NfDcxp5J{BaLh2>1vl2tTcaJa)>qmVKINLLb)j4hHax;*~X;C0DGH* z1S8-rGJh+rHh+DYv~n#Tc%tXOppV;Kb0jD)KcdRLKL24Od>u3*X-`MC%kHMeFHvMu z!xR}z3ASj$m6>WRk;c1t7Kk*i;G<pr<y~69+}GYH?aB}90|i*3vQd_KW<(0xTt;@A zZnh^@Ey3wGsjiyzv)Em!+c?}*ePPOT@5Qk~wc^1mMEMZ<4EX2#cRuNDju%)x(r!Ty zf(ga-K`By>X`2<Wh5w+&8N9%rpQ#qBq$hNlM0}#{Ui0f}YqG^DB{z6&A8(Y{XPYu- z&0yIcH~`nJ)nNN<wVfh0e`~S{0%?gOvTx+iUFp?LjZmq=rU_w;XD+Thn}5huTVM3Y zW}-}ip{<|TO(f_8@;*5Q5@Dg}1X&1>F+eT|#Q_czMF0_+@D}KQh~?J29Z_G}<096j zXsI=V{PdzdaEjv3FRYeiRNGf$T{<LHV`N0e3!@`iBcsvF*BZ-ds>O?6+sq2vg5*>x z`RN9x*7)pLb!(wgNacz3z=t@`7y;|5OKmbFM?>O$J)F0J0g7;Kh5T8TNFa;sWbJxh zvHL4UrnMq}W?m2r+A+)53!bhESm*saZ*9T)NX6y=aKWM-9ocjLH6u+?S4Jw*iAJ-V z4ssdgBuT^+3_was=Cd-zRVYE~sxb1s_N<H>`R#q9=zLkgYP?%IR~e&aDljJ~PSu+` zzo6bAq~N(MFYO;-w<MkFg!(s9cS);eE9ksf8bIV(a)IrrW^5~|Wid;>NehKEtXxHA zif1YNz)+ZKXgs8%6d}br^C06~W~JXQdOM?8G4%iiRAkxU#Ob<bjdo9<aT}m>7^`1W z`y4*Sr<(eJ!p0t@PHp@T0jB}2y{ro(7W0W*aYFs7_;e))ForX3663<o%MXbK=q53) z>E3Qndx6k*f;)Xf(RGDTaK#m?x0!=$1efUU^q4|fs>`(z1e=pY<&+c5G7m;2Py)+G za#@$PBr~p$Q(1Oilsi95$6+a8Wk1U>aurJ`PFH#J>t=pwE?Sa?DyYS-UuhMX7&Lna zD&k)FVnPwuCcp{*f--JaftCNIgxXDBsMc$&h4qQ2O397m1P4?`!~EIZ#f&7Uk1DRt zmWYk}QHm;Vh}1|?#SLewtl%73#?nCDT0}H8R&-oK71yqZrVKU!?kqS?M+frx4i1Bl z3u4n(Dd4}!Wjxp{B}FA@3v?V3`eeXvzx8DW8Z2Q61DEU|IUp<iO^k-+&;&-Y486&O zf1@oVTC$%_F%G%S$eb6M2F77)@FIKIZb_K5lT2Q$Z1ht9r|3Lwoqf>YmAK<9vmBqt zAYqKHs{W8h?aqG3bJdlZX*7vbSIXs8>BK*4_e388BGc9W+vnAY9H9oln-{GC1=Q5} z*3890X|+Is(v^Kz$=Uj9y&42rXaj`%_*!LkG^$mJ-pMb<E3Cd+7CmhvGLPpnb$Ohr z)(gUUJr8TF2vr$XA-F~sz&shfOqxtposCsPa3{26=@hV0_X)19HP(%G_ZGkE)+eQO z|LxEW%Zp|Qhv{N7lX>F2uGdGozGjAo)mYiOy17pT20650gMbkk#t(a<;#yQ?z1^TD zDl3ot3<ir~YebkTPwK;uhQ{`;aM#V`9&WGb?6{zI$u6zHvrefCft{9J?n_7UL_pM( z8mz0YFWFZv{WSNf-Aa0y^d*!0qruS$Pe#YI<`GF}k9Dr)>ua0qyR3hISHu}ybA`(6 zvgx0Z%2{=Qxhi}_32UzGZeDU!n6#1RE2$QiuTi2#F2f7YVgj>88BDaAr%*nZ9k=5_ z+IG!DO`dG^O-eOw_N}D4?^oe7>sS8!#xolL%vD2;t>K;9rg>uSYU_bNeuAI>St0H_ zgU(;)#->Wtt&wRfp;EC6iBtNQ8;Db4Y;%@%4k`7t9Kpa{{fNj9=ZOs?-oL?<5xjKM zBW}KI*j3mxewMl9Xt_VsWo*7fkS^DVcqk*Ytec;0SvR!JEKE<sIIwwI@+CXo5x;(@ z`|VM3Vcg<DvfjM#c&&M+ImDecgXF2<53;~C^+#=np|T6z{R5v9GD0{A+=1?QA<}S~ zdt)QGunu?ZeU>Sw85Mh)c^7gKv37*Hu-mcHWj{Y=?$3X%d7<S$Xl#yxuHfB>%#w`I zP}Yssj)9l@kYmd3cv4yDCC7QY<hXgO4;TB;472j6e_sgQ<*=ArqM@O<90p<>2257X zHy3u9dyJ>{Iy$T;-vBK32y@_Xjkq(7nR`+escUlCQLJ(*kD9L_W_d=KFXTJe7L#mu zMo-*kh1o2$%(5=Yd1P$a$Q+5y5S%7|aOp7`L^+KRetG)x-rDMj`)RB0*`D60u;lVq zvF6FQE38fb&D))-PPgJ`E(4a-mkXu*FL|>(9XZiiY3yq2=VcTZV;*@apUcx@_e$S> z`7;jA(#c)nOEQ3r_y9iGK}4Zt_N!$nuU1%YdXJT{%&N!F#Je7A7cN?!k?gvVt`S)3 z9>y%sU`)D)tF0gXXAdqnYcd>dW*4hHdEwEZ=bS!oNvk=nA84*TTVo!B<Gj)g<%XxO zw{Ibp@H0k(#A34U_|qr7V&;_QZ!xB~G-qmNZK33B(Y6D~e;?pAvTZgi<BCjkC=RpB z)8?C_t^1F#jYxnH3cV4$gA(bPCKe`cDN@^8C|pG?MfCeDUZhV=pJdj<qX%zAHu^@$ zncv==DYwj_4AiXhn0xdA5ZT$qspw+i+1Lf<Xlgu8D_2Z4M_(~1_9#c(obRg*EHAXW zoYD<0a`==^z3o;t35_4|EGiRGbs7^QCP#Bww^4BjsBbE}fB|!lIAtEgi^HtM3rB2X z%8r|@Mp;>xL!|p%L=vk%%5bw;FP^RT$^qmXBL4O?S+!=uxmD(<%g?5C1g0ZP)*B6C ztT~Mink#c+j!k737|(Sz;9d6!kNvNhFPZJeygfujH0HHnL*e3^dD58oQEw>EY}-K@ zk}AO3hH{M?JN&Pi3y&M~dQh+T&NnK$(VZA&t&xRpM~kC9y{wxgsq&=ECt0zMM#{Pf z6vV2h3-cp^PIB`PV$uNyNXvh#c_HRI>z$2ntaIfrIUX$&L{`>qA3equ>ShGSyu)e; z;WOznf_Y~I5wz#GR?A=xl0DX}Kg(ba7!{qIlCoWlqt(GO$&chH=F2D;rL{&~e{&N= zBtiVNysr=agM-0FWqKm7`M7@Muw<kXN+53(dWb`>$GY)a#nEU{jL2U;wZV(}H5l_` zr-{NyAm?UjGskXrzPeb%{XFAiR_!A`Df0p~H@UDOcA71~!_ND%9WBqvz8Mv5IRAl- zvmGC)RWvF-%5URBvv!VolgH$Om;s^}IYb|7xgTOS-zUDR`!I|HnFbtt%!AhA*9OC< z3{;6;_>2$C{$zXv(+VHe!GGNTZpPQm_<9*mw>`cdO)at=UEB45yU1LY-_5D;_ZXXR z1W;f^8(!d(Yr1);C6*EXOBU3lPkbL}1;HnpIp@={M2M5D<Nb??6UBV8vvgMoIu}(W z-eYrnfGoM+6=!k3JEMZ07t2MbcsrU)2@?vTnV29n6CpGcCx^}&jl{GS|8B?0c>T;| z{S{Il-P&0SNE6chL|*Hd>czq=6#t4=LU;OK53MjiGM?IJJQeD8bcFxmTshKA_h*E> zBn!sVnFp&r4ELNh8g|m(ru6GGLf3_RKGD7oo2I2-KOIF?xTnWxcud|;%ea1eMrc$R z7r2H8)dR=%(@_tE`JS*UQ`*qUWv+EAP=!W{p9{A+)ll6yiAUV`IoOl4LdPqQH`jOD zvn$Dp8L~Pqsu<g*vI<k<6U#_WY`RSB0e?^EYcx?BE^|xfJ+r=>=KW=^wZBf)#4395 zsmG)Ld3#w)I_>ioKO5grCt6%@s?D3>WbT3aJUu`P_c|lHnFL%l*0qPA5uHNn4}>HT z%r1bYKcuu$db+Ri#JXwuhd{QMY5NN<#EwX5`lja6?Kcvdv=`&yPz;W$_10ZVf0cay zhyL%?iBR~T!@v@nuZP=uo0oJm)HPqQm)JWs0YF}nzI(Tsd(77GksDf~na~HZO13%1 zOJEKw<D4SsR`^C(MIjYsXO$xOIBetZ(mV(c8y^wo(Ol9U94*GqUqeb1?n+-eq!sm| z;sjIL9X)uvw6!BGSK4Zlwt~Nx2~@gfp}}7kANzIv$DY#cC1M{V@&m=)^5dOMX65Km zy)kau8f3Uxw7>ST;MA0cE@V00?awK<#;4zJm`0;GW!<KL9aE9*i3umLl-iHn6ya~B z7mNT|&Z%jxJc5p=k}Jh~wKfiLC2)WX=!ckeS+{n;){8@Ep}Fu#q_Qi255$?%Y{xq= zhehTSjBxZ>Y#e5FG!JW@em4AJddM<E#F_Od65U)cEb*2I#}j=_8JZQeyJp#YfD-o$ zk-e0?mm+%Ec<KjiTj)YYRy!YK?w@I4E_^|I*->yL!uQzuGO~-?8CeI+Lgi7MJ1;To zj~e9bJl~wt*yZ1E%-UbtjIQBGv-?-G{OxN$FzYP_R4#)#ZERMq?QlPYEf6i*Z&zud zsn&-bO<k`t!Wg(kEmn4fd^Y0nP-(GZT(BlD@fcfr7!Y%+u?1-EF~EpKdIAz|2EN^o z62ESL%Re&NQ@L*2z&(on48?&vb#wJKXhZNSdlh`bnpe8e)q1SQ<zg*2z%CVGCN@nL z!PoXlZ|s_Xy=h5bNVQ94?Sz9ku`WNBt=em@<hQxxy+Ky+*>ZmyE4Tzzjx~eXGI>9f z-<$>TEfr3({We*}FRqNQVgmg1{VOj8{v=Eu>xcVI87juw<}yok5Uyr+s{TzHh7>BE z&AyMyWk_r>$Fi=ydR@hl&Hb%#y*Dj5!Ct1()hGb04I&Rv3#8@ZUYY5c7g!(#$yc*f zW_QtUVEIyWiDlcHkuo~cMMRHToznzf-fMOOFZ=Xt%Um;nAXAMCtC7t_ToKkg4mIoV z8Faqd=vTZZ<LLV&{0{uMFb~2nz;KbT1y(Qq{$QW?;Xd#OjUw`aoYz{>Vjlqjfxh~q zlS7_$OYGAm3p6<ic=yQy?U2dueen~CTvBGC`@Y!h*5~6K^W{`m9x0cts6Xnj_pJSK z%1pn$B0f`vPx|bq7xDE%*mgM{vavhmuq=F&V?wrMW6K*H5LmZ*mtJpsKZ~;y`&ld= z)5V*bLu`GpU}KLu{W(P8@UW%7(1KTBUT<j*v%*;8vR!Oyw*LMs-`Q4};dSH9(0km4 zk_ce5LIB^Ip%6gm=tfR!LLku=e!oAOZHuE>;M`pJ<}^kP!eu7LHYJ{Dv4#^})lW+0 z&BcOumzuj+Bmw>47wrX-^^y2qpxB!|lBfk^n=B-2ZWIcl3lSwXR%7R&-MAfW?ETr# zewKZ2ofgzTdmdHnC{@Z2M+|*YtnAp191TaDN2E<F>py@?)GFAP6M@S-h)ve3v7v*z z;Qa0$B_m7dek0EHEk`n@Fdb}OE5NVVyy~bsw~Ngyts?2r)=0?J+;&8(++MT^$fR@4 zL&TTg2e*N7tb{Q0nmuyMeUD+m%tlJS%NO!1PlfwX+NW>}+NW@fm}T7P)2k!*{5$2( zd9^iFR&`kC<n4(*M$ML9nD?_0-*aXUj(wlK<00&~Nn&hlo8`Qtd0GaaE<T-ny2EWA zzGjA7T=?xC@*i9E?-K8fctDXGg+t?AkN?=p4`XxswuuTLvnk!!I?LHKO+H*rG`m$b z*EG!mgGy^}(%L8uznf@Il5ICl>!r1iYU7I~A&L-`V%&?8Sn(XGnwF#i>E?UHfHWbV z5`2JEcM<|!ymO4vm|E%;4>=^#`YiiimJu9c&T_{bky(UayVs?zn-f_c6Djs!cA2kz zQEjrQ^ZMOb;_#{R4Uh&#d+_C8+mVaHp-)sL6|Xc;VkVKm%8gC;eagiEpRrUKd|V`_ z^Uo^!yc-yoV8R|0Pe4Rem~?C<=_3bW!nog+ELkMMz9sXv3dzEEPcGkMH{zpfI}C)z z%f0dCq_p_g8R{aMfLn8h%X~>Xvc`bnrMI|WB&q=iTj43%trDh-7EmQ$l<olKE&KSC z3ArCink5(wrM#BNEH^53q3QgZ3DYKbF@{|r1`_B_v$l)$A$B>6hytP_3DcCdy;mN2 zxb|$9kV-q05#P)ficFZyAdGVU$mp<naAJY%rd03xd`zWbn7;Bjb<^e0D0N5hLWZ3O z792(2oQ;VnAD+lUa8ai8AtI7={<p-y&hx)!Y@RH{Nb1r!HmfsU)`w7ruhK^<tAy^s z4M4VjLBR)X{~#`JkLs7nl}=Uc7EcpNxp)Ku({^yQHQ*ZHF!nXJY<}I@<ev4W$)0(l zs~IW|2tK1hdG=O$Qp~jagr#PE#60m`!I<cOf<7JSR$-3F4AEQ95X><{v@wLQk)@Cw zUB=!~Iw<swE%b$1!wcocc}yaY<<(j}>p;&+jo}tu4!6HmV6|XDO7r1ef|zzm^SAn> zCeFw0$!b)gVkrwQke%l*^Q?V1YO#I7$gnSuU<FKzSH%VMCt9#U3-6RRcS@V3s!gP@ ztE5ekCky82!F<oN_IZWrP^|Yt(~T`(qfrWok<87)FVpyTx+F+!(1!$YIWo1^tdQ(B zfqGb72WC484i+KU4W7q)M1>TYPZ4=7@lbNgRS8-Z%Kr1%#G>A~ykE6%s=A{Sbw^9{ z7;mZi<x=M$KhL3${jWPUvH_-3F`MQA!8c|L(oi$dN6t7NQB{hlk?<mJN2m3@u1^@U z8=S>!VnN7bYg6K(w5aiyinq~60aKESZtD(B_%sDfMUTL%SJ}{MRK3@FVUGxWLowio z&>Iu$mR&7y9()owPXYfV%r{sH=KHkq(DQI2l^pDQhu7V%&WYId#GWIZNB$WW(U>P* zVe5w`PF7Vd!GZQ#T-KSkOBr8?);`HS$L9+_0b_>M4#puLAqTwiG;s%s1|vy7#nJ3q z@ajY{WyS>z{A}w*FDOOM8xPD@W3~KM0K$ntJN``LqFF9~xAEX%z>d(phl~e11psR} zqaZvbq>gd9RsKR*I~1}zf5W>z@SG=Y!)Xbvi3o0H2XG2PD{mogwBIqy6|jEYF1?8t zrB|d|(!99{zk6G9#W@<l10CX=EFv6G&?_D-+`nJ3BL84Xfjpo>@Eqsb8!%@P0?E-1 z5p-K$;Jv&PJa~{w_qrtNN$qZRIs|<C5aVaZFp9yrsmIu@1UI$g)&bnqm)|`HH}!=& z1^WrHlj84F?cE0G7h`7>;1uCmAkw~0jqk#LOAr2+{Fw-&gjAA*e-6UUCZc<{a1p-e zcRjswGTg`k%}(B0x2Y%RuF?Bo{~CW+PY?~gn+rX=pz%PY${TW+Rnn!jc;QT`A&-5j zkMF3H$MN%rK25^1w{m&wlB7gu%(*TtWrbB{vm3=o4tPaKI~2V#L09*8mm(Diu9iQO zW#7lAsJ;S@x2n`R@cg7F&KpT0qgN2G@3qeSIPvhD6}PQTlu1_ne)6G&aT*t?@zMaZ zsu8*UUhAt@Cn`m1e0^SBz98{RxBz>P5IQw4<o4EO&gZ%+IW^HIHXgX|qHuk8n#!7h z%i*IZ>$^!LiHu6b_4_H|M=tTeF<Fs?-Tpns<`4KPGwG8=Q|E4CC;Ms)yF_Eyr8S0= z>yJXzDvv6m$Y0~yV4QBqUM#J1WjQDiR4jjd;lE`BiNG6M+8a7<zS0}&R&&1S=V-iU z^?7t=1CNT74jN%Y*NN#UqtEYCB6<xaM)rC1<wYDY^f6~;P(+vQ8>cgYUzVp^?r(I* z&HY13#23d<uxgp+H1}=I*yw7eSn&J*SMc@NFO%DvfG;!o@SN~<0kY;eB1u%tNIo1C zzE)nBsMH_6w%wX|_5V}&YE&9TWKI7!_<HVF1K{h<ul#TDwc9@czD6(mH26x`7Xx2U zek}#Q5@`5S;j0Sav@aY@4=#`d)qGBnGo)fgEYy;j<piY(d94lK?&)=O@v;JvxfI<G z<mZmK^u{jpot6E{r~@<};g(WBBY==5VPr(sV=bN5(<=?pF>Q_Q*H+<;{n|?MJ7!C@ zdAJ59s#aL%k)pCqX0osiKUUzQsmS!*5$7<%^epjgs&qHG!ZAXN{8canGMI--{cT3W zL4FxqUH*N+iO**9T|I0~JiHJL5{i|Yd-FT0Y6I5q5RO7)Ws&}eGVw-3zp;-5+yIP# z#Fy|yy!SvzBJP_-ANu&_B$SsCpyZiI@uS4&V8yXAg8m1QYPq;d`%eaMoP1I6`t33l z{d+RMFGnO0>f*O~F#old(;2uct-ZJ!#C<a=esuGrAo^%_z6|G)XfpJ4e-1Q$-<>1D z)+KmoAqGy9aQ9*a3q&c1i+8G#Mms!6xr%3}RVIUar^{tl3>>S~MTYc6sV&%vIM%BG z5_0L#6yD~0NKs@G))C!zwX5YH8R7S{+Oe=>;u5PP&;FbvpA1lJYl|80Ot`2V#y$Z? zZF7r@tyEkpA%(e1#xjkDU&u2&^5_jE89z>tv7q!>;nAKG1})CWdDWFwb8#r`GO!|< zDaoJ2r=vj8fUIZN(|2qf4~ymMpY^O_`G$piGE_^(%-3uKwGxQg1I5yDhxLu$C^oIc z>}0|P{{5>&+_gY1+=Secc%TbpM#9M9Vp%THYyt#EoM1G*inWc%i;iZo^(f~XU)JS{ z&DU@cSWiL)<ts+3Vjo)~QlhKm&xk6`@>z3WXkx|2HW(yqDH?xBJG}ACN0qzrKX^3; zf8<U3<yCXatIVl_U${Cpt&*qQ?5I>qkHhH^9+~wn<>ttB?db0**)2jaw2d`L+mx?$ z1yMftsc$o_zY*<Lg5fSOUqhA5r&XZ@^}c9y2yM&Axu~%<#jCD@2#XElYu2T2$N+>t z2989&b_SgX?<8t^u0VpU9pjpW*SOqaOUw>s0&0~Y<CcmNE2Zf>5^ISHGI+wni@B%@ z&Rbx;csR~|i!(~Yf6+Rv&XHE5;*e{EH}e;}R8sLWqF^C?cvHzZO-^EX)|1buoh=nU zK0Y>T%Gf+yUplN?6FsSD14Z;iTc!4zP7*t2Nrn@UuC1#Qh1I1%vK7Q9OC^@O{&y+M zExBuv0bikqP+~kqY*5CbVh)gE_6m`?a(KW^##00z5H}oI>k6|?e$T}Dd{Mx1=u&yJ zDF!ls!`L#PU1U^~WGiX{v@nN?zI-YXV1}<H0j|_}HP(J)&uXcarrAd=X;xB-32fx* z=6`s%8bqS`^*@RpldZ&XmrF03&IT9wTUQmxLga`o_h(;^Z;e_5ap_YV|5|({@WElR zIU^<HST0EqF4P~FV^iQHOTfJt77g{EslPjNTYBujxUvgO`OJd>tMg$1evVyio?Wb5 zicL=~7QK^Vm)ga|FkV{Am15&ki+z7OTXD#I4axc&Snr5apk$Y3Y^7>GtU&>D%415k z++g)xPeB`Ie@SQ)x@vs6!3G(aM$lTIRuG$&o2aHh=LO0rh-4u|5S<phj6Md1%F$1K zB7sKoD3qp`OLm3P$T<e)I;|JbspuiG%E6oCYs=^*7~upELgY~@>l-lVE?>eFW8c3% z^}1j8`$42#n-1xl|60&CoH7n_spp11)g08DK4aH!=IA=UesvNef%pLPJB+7Za_kFb zKd++KOOUjp18TG<PjJzGa3QFlz7hQ0v^_r4Vma#Ku)~%d{{@<#6M}hA7*S5=R+S}| zBOpe2w*CvmZ?>^=p4ozDkW#hC2mebPg3K4>w+Xfm2>1r9=Tx9kab3&R{_SnV3GTvF zi5}!|6qtMElooI{N+jAjsjb6z>R`b=kc|nb8!w^J0^_MRby|^aQmdHal)O2mWG+Wg z%&h~A_Q6FmCC<M8BOT&0_65wT{(}J(n5+_HktRjP8epW8B-xwLii#@BMT5MWGh5o1 z<B$D6#Y(AtIi)1i!h(SH?s8QMY$sxbQb}(<$<Z;3B!7X}ucTWUa6a>*uP)=M?ka}n zrKwV4Bm9`UQjg?D?D~Q<a;~tlD%yUj(J0&!u2i=B;aIqh$UM1L&%;w{g!R>>J-t&l zP$YJ}?LpqR#68y2u+A!;Xe_5s-Dj*5Ps<xznpaIBbacg5IjO*xmjBgY2MB$7$qFdQ z@C<ah-&U)n7UmftYDJ=7|9=&j6M`(7&C~GS|0J-clZg1I<W;^zxR`MSDqzJYVcH*8 zD+H|UR|LMribZ*}OmiYlj4KJ0@%ABgNR>JKmcQA;m8HAHQ7d>sop*Y|vissc$xHm= zmXZV6s{T1zgG@pi^bLstzgR`6L;9#iIBY6Q;TmNrY+FfkNAF{orP;j`aOGqmP6o5p zrq*Iee5*u<FhBM$Icv<r*y=;LaghdyDCGV~$<uNHsgOSx``e9%M(|#Kr|I&$Gw^)k zM|h{x-yZr$^e(<jf!p~swoRN|Xf*y)TG@#KRR$$uQAuziC8qOv2ZviwE@ii>vb%NJ z>6H9?G?x;Qk`>bF9QkvpRFlj#$j^;!E`PQTPay&9Tc!7y%D60r-lv)TPRbbDiZkx; z?+pbhq}mj|O-cxck@s6C^0tPz(&ay*Vn`-kRYgh)<<lo+#WYi{A=#lTOLb2lMP=0T zZmqmSf5&^KOIz6#k*@v`yL}wyJx6+$mMVbI)@0HM;n`BH$%4h3T-RrZF2|A#fBA~^ z>u*XAjm3&A=-X70as5phq2bW=ps}e`tjB^`D!M(sQaia?Ojtiw^twC!uLpCD@8Z>e zYs4v*o4o>osrFq-@o!va3;b~3<6`IEgKmg5O<S^SN%Z}LpV$Gy?Dq+O*wC1&x;aT0 z{o@CkxQMx>+zyk5nPcYHtw@&pQA)W!J*`djq(`LhKQyI17S=gWmJ2WLA^Jz6?cf;y zu@L71eYW_F?X^zAz}i2iJ5lQNu6EZwoa}sp>fECyKZv|q@|~;HRxXn`b#3New4(12 zPs3>ZIX$DN@esW7<ZI#gUE#gtMx4rxYo3po@8;>q>hw)n<-|2OmEXgOdD|#InKTyk z^feY_d&N-D-d=4aXm77J5VW^<+JNm1j#x7;brbz>ukKnoG$A`kT5~hhk>*<|l1hj6 zb8TL7wrF=;f6~U4TStDM%|x6g+{VS5eAx|e1jia%&j7Gk^`D&<JJ<(kF`1k^*JU({ z84^UhQS#sz&pAilcJk2DaRd!WDggvufP>bW$cl7151U-24ZB&Nw!nP3V-IIVAwWqj zuk5!NAE?kY^&WFJ-XN|MEv3W(qbQe7te+YW!cEBCw~s;WOALQD39{YcziIo-OimQ` znQcxUV4r#VY;X!ojz{JrR1cs2BzTqBX3pZ$_7(M@CwQUQX3he0sl1M-dxP#xEdMMA zaUdv>y5{D7)Oq1|mxWI+BiQN;<@_e-fZsc~Ql@Q}z*WR7B8r1qoP(Kc<7ZSKQhK(e zml3$|ioQ?mNc)4v*9A0;#x9PZoc=Fs8&YDRs0Y}Q-otupJ5r-@k9r6pT&x}{Thhkg z^03c%s}c5|#f&ZdZQhveXlJn*dSHwEK;Yq=id~|XCiDqu{t9ba?Gt;L?#bZ)E%T&& zBKDehY-;Q^uh=z77?=%Aebu<hq2t=>0{a9m&5fU->a2NDXnq>jf~?W15)7h@%?fW5 zSA5UL-D!mwOhhx~va4tVCTDx3u}L-T(O>uyZp#RNm=WE<SFt#ReOMZKAZ<c#@04Dy z!N!-LmomK$W3vR^kYMG~Xxa!GbxWg<@ziX+bf=M)HasntzO2kivi(gw7yCB5vy9OF z;WkJ3Lr1JS-0NKXg+xQdqlunJP}*B*B(2LqBg~`4a??ntd_cn)p`w&V9idAF5<he* z?Andu^sKS@85Cz=>Co}pmKqQ1W0N?>HbUk+$YJ0da0o&}h{&N3YYhru>{2CNTA3@3 zbLw4K_1<}ogCPKSKKj_f;O$C<imnz|yTrCv#%`h~ILfwF7Wr||C1+u}Ba|J7D<LIn zJaO6~pK{()^+!g7qz4lekU-Z)!xKEJ0qu`L%oy$-vO0^vHj9>y^H@t?8;W_PSdMTe zdNP8a5BE5Ni>=E~%AKG$@3$)`#D%YL`(xI855@R?eEZY!?`y2&_w{ckzpv{|epfZ0 zl`2L>D=k>V_H)rVutOT8v**;Chg*SI1WPRx*uIm%RZDh_rswyU=>PIP{`)k~&g1vH zeEx&~nS8&9|M4}^_z#ym=C8c&Y}T)qfbkfJ{3c12zIr51I^(Qj+<L|n%9gU?<VU#t zS(47@7STk0m?1*B53(@jz-5jIc@Nww=X0)06g-tEd%8qlQ_eG(K5wdwuT9L5yEw1+ zisGoBBbQs0Hf}VTNGy#;k+ztX-R3Jum!5h|NtY05!TimVKd4;JiZZGZWtG^nhEMg9 z)!UwcE!7HLio@4g3Ozl4utHkC6&y*-H_pQDWOcjN*!)3i;UM5|4_<^WiR?7iH#-s+ z2;hxFC8mE1yRbBCpHEn<z11ReJ74}}SwDXq>4DpN_+CDSSXa*Lk=!I?X8n2#=Jb>6 zy9e=;DvRfx=zlmhyxaD2%1DsVWpUm<xn~!MQAa<^pswV`Kl+x<^xMm}u~)9lA!6U& zpf%p{=V$cuTI=#Y&moHHVr|ZIsq~N{dhs9%=$ltCcg8@&m-QWedq!Bb`FqIAULrhF zm@ob=qr6STr6OhWI@$u(cb|w~*1d9BuYlyBu+|s04(oeAV;|-qQbG91<ung*3;|7f zCLa1P<l6Iy9}V>>^j_N=Dh3Z5uA5RN7-D#)f_0k}6|gfyC*K1bHW5-<_t=%GCK5W? zVZgfb&oZO99fz#@R1y4qgEJs^MMdutTVyn>lk<|;8KdEDe%s4`)xc|K>5cl@X$L_P zJFVu6`fQHwssDy}*buBLNCA{$icvS%hWw*VZAdhqagff;+{bm_Z9VZDQ5XalZv2wI zaLzHY)oX<$gpa_P`mXO-ef^2n(qQI^8R$Mg$Nk^UVf%rqWHcU;^9w+jBSc~$Ip9vI zJxo{@?6V&EuD$0E@<r{r6!ln7qq^q8DPxe$R)#%1FFK&NoP+mEno?Um0pYRUaJqhk zr)Cx#&J{l%K3ydX>Mhp`h>dQcy>6*X(r>df!}mFfCsOy5L3et_8)~P)VVK(BUl$zT zjx?FM4v3i8ta}{{`V_qqUk}L-WUbJa`j|lt64qgcZUu@k0DhG}^+%9nJach%77Q&a zcZoIgZWcy<3y<5%6MSO#8xN>p8z5;UD+F7_>*f?bSEp>Bt5d?<;1hNVDvH-GnFhNZ zH^n`4_u$tDJDh(?{I2#;4!nMT3SP&z4~IPMrMqGf%x<gW7vW!Z)ZZGs78d-hLZCIf z5(qRjw!b<&c}Y~f%W(<rvR-Pong<nT9V3`EJL2AAjra~&b!5an*E+s}Z&{ALmWfhO zRP9IoWyc5N)`Ti_5Y*ZSKZw)6oA_Q}+37B<h;ETYstC<7-rmKlV%tzz!hB)HI>0{R zFmQ5<WaN<)Z@HwvBFNV3ppl1czXxa1@4>0>LE-M9q3aO<<)o<q%k+`Eu0oQ*@d$jD z1FA)Us}V0!<os3+&VyrV(s9~xEH-u{&dOLMKj`8~`K)kvHr90A!$TPiT}11QahlQ~ zZT=FgDd7?&hCEs?Z)tFt1pCmInirwE!GR!Qq}kioNE6wa`v)wq9oUyx?nc82L1`-R zj<!0i605^1G2yEc&v`IG(Qc&4@xZ#dwn4jE0PUcVTmYj{MB!=?j4k7(VJeC_9<pYH zrias6ZuZ`m8q%}?LUqLXU4dabfuC0f<9QMHuUhWP%gb=I_$BtP<X6o#$|)dtMVZ%j zL`r_OJ(uFj-ml=}pUWahvFJ~D7;&y-wF@K8ajagUEWD$2KMndt#G5DRt=;a;ZZ$Z? zq{Wr{qqLcu_VLfp->uudBiV4Qin^X^N89q;faRTs5Eb#e2t(;q7mj_dm-)&94QX<U zYoM&p9nDT$1I5cCv8kdURO=~0d2{u){z$kG!uMErp7|tUd!f+(v!j{NU`AY}Q0Rma z*YRtpkDe^WB);YM=P=@WV!A@BNf|unL1MgWV>&w*JH~VwW~+?^=UYLveqv15iJYW0 z<-)G%@j&~;J^>=k3q@L~BAp4&RzZ@iV-Oq}u~XE6%0`(`k<lMASqy(0cduFIpX;i> zRT<`q*1C_*S+k<H`rm^$$OtQph}a&jt)TbdlQh@5Gx^*E<19}3sh4+5%JPc+W8C9F zEFu%j`*r*u63Z(N2jp}3-8q)`#%XGK2ggvXmoP3^x5Gq+X4?_N`YGkxIDND1xK74X zb3yDPu4<koa*wJ&@2CaA1s(`3Q2`KT!;8*r(eJ>3vL8o1n4s2TnX4l8LIJwujyF<V zgOi~PyXj+%PgLIjY2VQCiM=jnY<S1F;gn0_FI<O9+;uh9vzrwYkFh8^!uki}KQ1WR zt?ovRyVdRJHe+V15~rzP+=ITUmW`IXbI}1MA&{sX7&AX9JD!jc6#G+U1jV;8%Hr>( z__2(a=+H^O!!~iHd?z#McZmOr?Nb(-RAcp+@!{szSfAfw{|KHJu0NX=y6D#1^gT~W z0T*`LX$f%Aleh0`G`_H#VVad)T)>YTDn|RQjR(~9cF5I_X}73p$B8`auPs;2HA;p4 zfy{1^%C6WiI7uf{BmJAstEl{u4LhwOYp-0A|8LXQNuISkCwYN-ZVTP5_5yYRza3>L zBQDD$Q$w8CzDOw@U1)xqpAf72oTMeVqw#6wH9BM(u4CT^CA1)B802=Z@AtS1YHRUP z0qad*mNV~f3%QiE7>HIE_>}cq5<U3G)cg{xC-x&YAEn@XLc-aoM!bzG3AON^d8|3~ z<~jY0Xo3tUOOE3FECJH69gGK5>m$F?d(s=SGy`T$Jq@SZ$#^+^uu^4bIWI;-CM&@0 zU`vlsxXSm$#)OsiIl%bZ8QeF6z4e97m(&!)?~H%tNMozf&>`hH`?xsn!Kl~Y2_M%H zBQNEB!y;~pvfuOrN{Cs==5I;S8n|}Nr<@pE-NKDsk<-hhn$XolKwG3_lX)zB3Wg=j zFXXa>gMX>H@`$bfY$sO0k+XrS8taw0ww+V(E}ocsC+7sqBP*OHDbDyk<uPin{|sbX z%Bx@NCPuz2PyJoNVHhm=5K#HMLjUYj#K5U8_ARq3Kh)LIlMy2nWS9TsDk(lmil1Eh zPsu$^Tx&LB;c?_dM#FDtQmi`^B3N>?lx0REvibW!N>pT|`NyQCmyB(@uzA^~!}pu8 z%_k$ydEryWx(i4aW4*xPwy8<*yZI;g_r$(M9`di5d+wM#BKRSKK!4ZD<FT-@^%egs zp&RV#hE(@e&Bybh5_+!5r_pc=Xf^+2w1y81kixV1oODs}@3Uy)WK=xI7`aR#^rm36 z%YcS?z?Il4jp4gVQWNd*dlaC^vORu}ii@mIVi5SY_lJuk|0`UG!>WP{k<<R`a4|U! z7ZQY}KU^3MU*f5PjW_Kr6sY*aoH$f`F%A_s_J@i~`)qk}0xE{z@zAHh#hbB55^#Z? zpumM&%3qTL7(j&_GN59w4Ha#CvflOzNB&2kLX^%LD)tIgbPH4nq(q!I3Fxz@km&j@ zfr}@hUU9hi9|afR_IIv&*xYC9GXy+vrBmP$y<ax|*#4fVM648T#+lGexmK$-FRZGa zZ+&le3Y-XF0O!$Jd?FnW`}qV=vNfPwDQ}NOui!&~z3gncgiSeQDXYI1;vyo!XYWaH zC!DpB_e}#UaJ@9<bt2g)_IKjtV0)o?;}_M@rJ^p@+TkkeO}HrG%R1tZ*3>p0SX1rq zs-Nk9ZEYz|nfb4Yx$gPa0aha7F0>B+0-H?5!Rf#o)(%;smxu^5-yuQ!Z~3*f=+;G4 z-X2>Mohpn-aTiIrMSXs&EgjP3HAdI`h%!bL46W|Fx8W!%siKbLf>dR2A*2<3%)_<b zsi+rp8yw$wVBNSB{jSr$VY|fON(&At_n%(-53xo!j~NaB5CB-&>py91ewVNI{*n%& z$S!X*$Q5|5|788&qC5FUrz6EbBWYN=kK;MdCob=T=!3KAxjacaos&~Zr&GL+ojay% zpe2b5wn4=OGXmD~jV!0cD{=z1^r1$%Lys~zM~!gp%#>CoEO#=UvV`S!KGUyNQg?Y1 ztxA(JiQmtvsqGDQS<fmdL<&5i&tKvuhC_X}+C8<^p{oJ0I4GST2c=O8lvIH#>#Nu@ z+mNK5#LaI$)`H5_F2V@;>Y5T_L969AvfsFW+KCK|r#?mi6*_CJf$QR``S`=qAU4%V zgMzQ48`buol2X-Z6umd{)_s<L6U)_!6zBoINdKL}lU~drz_w;<YjwaH!;8TGL*3WF zM^RmU?<SjMlPt^v3q)8jXcQ!<U_ikHO@JgQ1~vq;h!C(MU8z-s9X=!piIYH<agkPS zv0A@sTl#2Qv=jqaOaNIBL<FlSSkY>G)1`d^(hvw{-~YLHW_FX!T20?ypK42XX70@W zIQQIh&pn^)`8;8IqWkhd+|S>Uhq6{5s%V825|ITCW6S*1p1SLuCOX97_-059*gM8+ z5l<nM+D6Y0t8XJ`0@>-XU*R5+TaXN7I{U+Pis5d9V~t_tuX8E}ep5UktXy4?>mA%d zdx3yM@aztY=AF7|UW>nXK$oeKoiuEwOWC-0xqB4d3x1yDoe;s0KNPu@@c^$joXpdR zE$F3w7^$%pK1Fb@+y6Qlw!);y4ue`Je#y9&`-VcAVUyOsfl|^Z8u@2Nrvee_j%#;E zlT>50>MuCQ9nqE6lI25y<oB)|XovD;4*kF=DmWW|GlDb7u+bDOQrgp(OjO!edv98j zSIU0y5a0?^Gn!O%7DyoB1nuMkLlU|K2Z8Uz4z<Ki{HNJ8Fr@tTq7q06CcJJzb&wC* zxwr&gTFt9(&5J+B2LsP1oS1FW!xM<GVrW?nJBH$Q1RS?P7eE!Gm2?smRN*l<$-#Ns ziH1zxd*hpfTHxO8m*YWK$Lbd%kJUfDGJNivB0S9({kp@sZw!z9C|^^`inBT%t9M*R z?eC3498w5U*$-jHty$JadWIko2Mn^wYo06OS{mU;=|>1KtA9BOVU{~F0;fs7kBd$1 z{7}M8ab;`vE_q<xU^e?v)Qb@VN9*Q{426x65SC-mLf>FEF8snm-<*PW;|-Jz3YYoj ztf9ab8nMTQbhMPjGh~+T?Zw`$6VyR}f!#H)(}M}ucYLsLL&5Ta_FVkC5&w$t55k&w z{6G3XGd+rne*UkYn6STeipQk|Tpt=%Ai`9?W6VqU8`@6Amz<sTf0G|dXu*Z|s|ss` za)x_nM?}r+tJh$_3tnml1vo;n5RM|-G*Z2B_g+vw93x@;j&093)2bH3MhXYZ=4=F= zdgue7$+($T>EXk;=&X4Q=$g0X(LzcQ{|KrrglB_&OVLGGEgogtvA^qK50fIg2S2X- zR+`K~)7AH2M2j$BR=Q1Mb>D~VHH+Oj5kDhZ3ZWF}-;#&Fy{4BSECsUbflSY6MFa{d z;=vaKNPGjfCOf|i9hgCNJ*0!;f82}W+4?{mXuPgUAPV|5;r;X7+KfdE=)VNsx4!gE z;k{A7`+={5_kzywjvx57;O!0r9Pl2zw+ndBZR!t}LEFXv|G7=e!BmIui5U&UR$ES2 zMl7e!A!Mz)w8^0j4Egx>^VK8{?5H0*mu~tf8K#ej`idhxj1lHGT>_1t)_NEp)W$&m zS*!;WTx0#vP3Jck`=M3-u-K2Y*FJW|e4g`<s61KXk;2)?ER58-Rd^=S=Dtd$kq-DB z0&-}(AEYm4NWO$$52P=MQLdU@tl@X?wbCV&)u;$c3?y>-)$J`Y6D$;6&G&%XP_Q3` zMmBrFqFn@2E#n&!&Ni&bfiMY~8sM|;&u?{MH0<_y`dDg3logGi@-WV8@mvWrU(|Rl zC|5Xl=5bCk3_Zt+!m!@OfTjjd1it{Ubw>SwWScx`qHpd=c6yx1o5&NHB?`LlrW0*3 zonj3wr<~?-h1)v#KfEJNv*?{ER>)|*X`YR|oOkpkt$Zw%BWG)Y9T8&5SO~022ZK>z zDg<&D=>h6@j>Mi<=G3BTLL{>Oe`x{_Ky;IN6h;e(W;^qQif~(GhGrqLi=_|PmatJ; zFXEs3yO`ybh`D<ao4*PRhJ9SPX`$$U@j*Lhbr3JGReIHg2~Tpdw_nCbt>9Nk_e)9% zH}rfLS-o4EaEO_-(AluS3i*0c;Osjx`HV+ve<z3nrQ$P_^zc>GgPF|;CUtTGA#24c zr7=zkSZEJGGByeygrm_Z>EU$ZYDkqQ)ilt^ivhor1iTwM@_8QwuQDP~(+bccP&eYT zlm&+KJ~jQ0YPcP0oN*6WD-kVX5^fEC&yp3%?^%`-;C|;~2R0ip@GkREsChzRwxtv> zkbuIz{1X}s`Vb5x+2&?$w5R5uAiy=O$V2y$H0WgZ1J?2%V1LjkHk8qn@7&wh^KKZM zDmQU#LQ3w#u-`Vp3==-o2gn*DN-O)tReVgwX(NJO!C0us>Y+RYZ2Z#^w1-|%dr>T8 zI%I0WOpxfAqmHH{>s$3_C%8<zsdOhfj#af;rAd3se0dah@(y5U2is>6La=J(5EEkX z$bImNrba|G<_T6`o_%*950+}sW#M>={{;UI`iImDQZJL#E7u;#O{bDTu9MjFxs<O2 z=l|kJwKlQ&6%Zb;yaLJ+kEMXtIjt=%`pAV}Xw+8U3Y~ST!WrhtR`unv{YjXHbmoa6 zUk<K))%1k7pD6Vzum=iw`%0y4b)bOv0hx9S?3o1)gz}t*SOilLe;fHJfUlfht;~kK zJ$j0{HS|S`GIVc_h>%J0ld4L+U_ZIai1;&aZ$Y{_A~_D`1LGzA2fFzEuhzoH4-@Mu zLh2Bq@3$)3XmqCK{Z&3dUt*}550?V~LgiAuixj8`r%*iN7!$~&PGW+zd9sN+K3#!4 zu9XYqrHO}5@smzJzFrJ&Ss`djeR*jSDt&$a$OIVUa=(uCyIKvXQyrO&5b$PbCk#Fc z)mEqaIE<DJL;8Vzy1ojYtMPAUmpP?^GN*ErNgiKSnQp>isgXw#$ZXAidv#p=KD8h% zdtZrE)aYV`wc=!r*!|vm9Gz)DH)aR335S{WBqNJej~~I&N-2ItQDgRp%STk*Y(l2R zp70{N3As2`?)p?lbm$OH2s^MSjk=MCrSRx<7u#E7@H}v+z^gc&EOU?(1}?5=fi);b zs3tu%ZABj*wqCXsvk_PFX{8<<+M8rT1G76cP-a_JfHVKy)Bq?k*P$E%d!jc$UWnJT zg?a<No1!Vj{woCL9AY6j4|XCLoFB0f-+L|n>C4wXB2AM$$4ImTq=yY3kpk@@*e?Ac zAgVn~)E^!clC2N3=h>F0g5l3BbU^r9(Z6Jo+09N0$qXfW5JuJ{^->ER>NE@GBDB>x z&7ndO7k@Wp9PF{s=gc#n_?*>Q4Y<QH?}%?CUMK?JgnY>%&ObwbIMYVy6z!&E9rKJi z4dQ{dqtTD;&vW_#^y7N3A}bq9bFG<R13p}S#Fdm}1dO;mvQ-!H2(wb%yY?zgZKs7v z8BqO+6E$(*L4qbCrc_)6LEY!}S30t%+Lk91sY$}RC?-4~N%$!b-&-(5Pk&dDn2R?N z&WbP(YE<khHgh;nXz}z?rUG3sNu)i64STAvf+djjq;TQ=$%Je&ArHKy_t+!8<*Q%t zLx5Ml4McXbrTRQqdiUl5#?0tEmuC?ys?Tp)jo31m5XS`E0BY}Jn-8{9)5250#U5xj z5^%}Md^OXD+%gCbN_+uWyT~Cs{BnVwI7#b3*ZM|3f}ZgHLF1aXDAAMiCIw5gvLk{d zi?6^?NB7U(v45xk5wm~&zM_BYF8de#L+2o2bZ~Mf^1eH=XIYVMsFdyG7*7%5=I+k? zSmeTm$f^a_W?E>SD>Me=t3&G$b$W9dJnRwW27oX8DJB#~D;D6;vLs+guqSEI?6?9p z9fJm_q?9cIx`-_c?PEI71+_n61qBm@mp&Wy5K&FL`O-*5CD8-K88gm1<exH$uNv-P zb@lJ{#e&-M;kLOVOP%S+-nDu}cCocG&9m58U@VTmYDLR9*UUtwR(K-V<~AJws6Dg7 zuN@asQ~sKmZ(45<AcBzsG?fqyy4^p`EcA7{t@e3hN#}y8R<cd<h^kdsI9CEThgj;5 zxUt{O>VdrzhnRiwECt5T=2hWz8_FshrF5EThi^fq8N2*o?C>RQBD{S8E<B{A1S4$% z86hMB&4DsXHI(sNO~xgT0-AK)RtL*}6**<0R8T&>82=vP1P+C{I|3ALrJNKN{KO$O z1%Be8)BzWzG};k1@B~1o9@g~hneUMV5W4>(UaxY&zT|#?K`4G#_P*sQ{s|$!r8;}> z(mBefh|S9R)rHc1J;A*!l;$J9t9_w#=RT=dG9FH~&?9kw3!dLM6#+Mm2kG>HM@S4m z8>uwHk$1^&plHcHBPl&GJo5kAiU5a}0$<)m^z%$4-2Ar5(WA}8`xK86!$p8a3Y-{+ zUm7<J7?(UA<C!JLVvP7Z%7yeLb32YW4<o)+`Sc`>*z|=|86Iys#)=1GXi~3R>~w>{ z&Ib@~NvE4MWiQ6c@3rym<l|d<ouU7rc#s9?8AXFU9XUYEYrNTw{6L3Ca?v`<I&GE$ zKj${Nv8;(W;XkYwQZE2q?KmqUBghy2spfTwl$`Z^=4tS)kb6yY0P~^05`-Jsx>f@N zlWBLPR0Qb=*zIO}xMwX6#Hgak2Hf*aqn!@uhwrU^OBRrf6zdt-FOg>tZo2A$_(F?| zO-TWIW0xfx0`Jp)M;ahaM0$~#q+gI!{RA&4dmN}4Ngr%_wW9amtp9cqwj_>>Pr2hl z$AR?c18MuGPIeM7ieOo%{*Uh5e>FMWe<%icV3cqRVmw-ueg}jEB+=W4PsE7&h!G(f z1PoXcDVr3z?Eq@}@MwNOpVfW*5P|q4W7&YqK|JSLvnSe?r(plioZ^5*2=a`0`@28} zazyuu27pPyc8VD&aj2;{^x4>IUptW!Y>J!%q-J>ipjIx2Iue}0P%!cXeRe(m3|tc7 zWJ<^4Nlw0t2>s#Q-Bl}wm;%&W6C!)=1v5Ub)auOy`8v3a$d^1gx`sGWgK+Oa5Zto4 zP1D}h-3lYe%Qqs}V-XkAci8_ByKh;b_85W2pcS(HK=9lMbg7>i2Iyx7H6Tt6^L(+6 z4I~hcfUZ7%6$f+}5c2_bW<X(ZJGUu+;00_0=%s4L=n{D*_}vIN7J2|EZ2gp@44*Vn z{#^OI8Fr(beG)Dwi;_VgmDhXf!h1;J6a3iBtxFKROuoc(EL=D|vM{S5j2awfm_Owd z<a=D1w9=x{WJ=A@D*2O%<d1?)n#R}-ZD~x0Z8P)}i4>X5?6<r@C#3kjNCZAMI1@H% z{NgtLx>b(-`m2r=!7J%?x)?;Y_EsAapv<V)K}YLSr|Q`LO+v%#Nt9+tTX`0x?LdLm znMdotyKv#cbALk&9kQRfG=3N4<Esae2Hx+e@>`HS{bF_ntTp=Kb*vuR^gJ1b`Z1f0 zgMx?if%=YUAR8_KKQJ32p^Mv=?Y5TN_%vwss1hZOFSN1Gz7K6?>ornM4FIOJ-r-I1 zEJhQ^CZBH;hUY%3f3ig_v_YHiw!s|~EOYkJiZs-)#OzycW6$#%=6Wwv-$TCbzj<8Y z9v1$X_s}?&@fGi1VfFQAPU7qk<K9dw`fm0m-UI^vF*uvIO9UgL-Q{|_UsPPBO6q&q zf3(K05Z(9opsqs$fF67vOz@$jXJCX5iG~ue`fdoA06}ieW6DmFQ#>!Bi%qjQRO`X2 zm^f%7p~v9|{Nrb3^+Pz8y0iaOF+jb*w%q$=XaWG{O{EqSVY~1*$mHH9j|_yNn`l8$ za0J`OfrO&qx-7oMR-enpuEEAcN(j4eB#cJnWY$BBH(y<40n2`eHM>pv>8^@oDx|br z34E?p8PR0CH<J88MrIXnI^KG!5oySRl*+3&tHTik7vb=2*=^-Ga*-C-XU_E%z&D@Q z)5Y)zKa^7${`?a_5|B{!f?8~Wr1v8JopONysLAX+rihbssfNN_AgcztC)F|l3})|` zt)!hKb_-sD5Oh%RyV$XhXq3d;LO45&K7mCY-Ye=LT<Dv#8NoXZ5yS2ck!niG&z(a> zhSAS~2Bqxzew;!ZNCbIz#TPM8Ene|9aiPD!=QJ8Vs+q0+q7&>d{7`09&rzcI+625n z_72`kF`lv=G#;?%)4n(#YO2LJ5yI2yIUGjlWsh}4XfOyRze8t)1VH{lsplepne21f z6ThODZAQm+Fui;NU^+%%IxhbZp#ZVeE@Bl(wT~H)Ef+m;vp<%jc7W8X2T|rb7tdzC zt}llR!TK5c@NKodGl?%|cZ-)gf#GAw8&D?!p{9*y8FpabF$@RvekP-z=w&bqa)5Jr zGtfpl_P<+TjqmNRthAZDy$~2^#w%Y?Rcdq7QmiKzTL5`B_BAe?sU<_Btd^$R@q>N5 zi;%{99efPY?3}<)2))VJ2&%mg;Dv&y(RN=yU#Z1c3UK(6z!&-oEo3RV%96dxTCoTT zAyfU8X7xSaDho@!hg(aWgFe%L>&MFZIm>U7w)!64NOl4Ka{N%B>T}tx6~on3vM+dF zJ;&bn5HXyK60Z$D@4lrLgg0+4|1;eDK=$!I-91VDDQfi>hH!#VE)4Nrrd+tu`(5Qi zg;eun0LgP=GN{YTbd^I_zof}2v1FH6%Tqja=*i>sB$Wv8L<_qMZDP%Wy7G4_1{)=} z@ZMB-^Oe>cL6#rGr@^@xcp?qFz`~P5XdmU_qX*42YzKYBR>A0z#mPe`OAJ|L_*}w@ zRj2;>wt@heG?)l(2;>%Q^t^`Zh5VLn_(4Z3SARUvJ{|wI;NL^|*QIWpbl@=ybOkwA zpzAkX{KmzbG&0QT6Y{P>y+#CwZ0)g|U4VurkVN-^LLnb56!K9T3xuVSGE)FmFrJ+s zJH%r!r>e_>2+ME+*Pp=jwpm<fAMLbZ(!NKV&SDGOybx2i&zFBnX<CKMHcfFbZh_Y3 zJ?I0l|9l8y5==t3sZZ*kGUv7`trhY}<V&o8(dk758C#6+@yt8YW4grv`asY@EF^<k z;Qew)k5<VydWPYx;4$&-Xnc$8f%4_Zki_#VV#m3NwUFORYhk&S?`PUHPl+gs->p<I zldsU~{fG|k`BviHXWA&6L(y4*3w%Gpf<Jc*F*i=eX_a)G585nX4R<lCg@5nJI?i69 za9p|w^dJU}sRD^utu`v`PJ~cly+q2uYy5d1V{t7{m3B6|JT4kjVzFm&7y|daAn0XF z)Avz}n{E5(d??t{&E7eI-$Xa_{mGCMNi`HzrE8M6#Lj67z%_2J)jJCPMQS?;LncFb zmc}Ufov}xm>1HZs_N>3?6cSxv_7Q2M1@;t3k2Ic(+>+`yBwuL{4ja$KSV{HiDYzRj ze%2fa-ID67QgLS+Khli5^!f(dm3F~9heiQT_RwK$p9Ia^CO_c<SZr@Eow<JTJwaU) zI8V(3dV0SLf|}(6#mDYIL4%w;zf7+nsOWw?!6w1?bBa3;-CS4NCs`7k!f{Yr&7Cv6 zW6TnT6dAp>wn3|ka!hqWnMY_9wICX1&nRVLPf-dP-)@b$p!ND$vvO($B}+#ZdkXn= zdi6@7FWNo`!`E$?NJT^kVMuznJ%-tb?+W*Xg+)|4`y+&##`HW&)59Z3m$IkoI<g7N zQKsn<DFja`Th)_~oYoJQ4)sK~?h%m4z@}<3TIadM=Tk0m7oOa^8c+73#7s%z8Wxa$ z6WaG6V{kfgPcRmP;X8hY@!T5t;}EHmam7<^XSmpGzKKFA1y15MR7YM><i!PBuVLg{ zoc*TvS_l^$(pI#CDEk>?T?M6G9d3&$8rEo3Hpj)LV|pR(gUGG|+}=ds4SnIIWaD7W zvi9TC5s<4=(2d(N$bofOT}?(68pP-G={|%0u{$_xgE(*A>rr5%?nd<)b>^ay(d=n1 zgXDd$nMAvD0}L-wJJ#(GfX9W}yKp#7>(K$kXu;)Tk2X{HJE!yI`#0GGLhNBhlQz&A zfRn;cavBXs3EVnRg~hcf4r4}vP-?*hj#_631BH5Ry6BnXS44eOS=JG~I{fl|pmVj< zo~Uk4$LgqmoUtIMCE$OQ8h3<^j}_`UFBEg3zBL`ybK3ZDg250DDyMP)+BE+y6kmrR zpH6=!(VrapGt9+Ca4{yNJyOjiLfuwKF0%>0CuL-09ft!WTn;e{Dd@1BbJc?|s}u=s zgo{-j;h?~fc|5-JG&$VIP)>TCzuO=0jirAsHUsYxHMU_{myLr<BY>Y%U$tSNefxa; zk@63Rju3O^&BJ^nm4kfAb5w=!Xim)i8QloBK9wC?35g7%aeDhA=>n>EF0wH1^KF<G zaz^C|E(|*vZfIbYlU?jgiXcH<l9fMdg<aC8dabZaKjkMyAqGzJH$saJT%(vzTZ92C zH>TUiw-+uVPkCBn#~~>3jJ<z`owXjuhC<?cpa9baI~4lbhw~4X{{uE(o&y|+P?AT< zSH2Q|P9^_K{2}B)cHdKW|4b`Tho4i}B)*&wqFt(a9`nrc<Oy6Lc@uX6!=6^^ex0Iv zNRyx*qJx7s)y4k)3(j^UpL2e5_+*CQ;5c2Mb+MZci^W8f*|XHWD2~1KEX|`0fh46! z>MqI2ZZ=Z%9q)GGFWyHK8l)e&$uJj!UnhNwtrQz**eHjm8I72Qny2(x;B)BqG(Uiu zxbJPu1h5tcEhOIKMf(0l;Rs+`1p&l7D`13GkH2Tt1Fq0gE1Su|g_YwifZ#v_#>t-> zz&P6h7#AttIve$N7#MbUDS+|JGa4|k`ycNDAeUMNN_Pp6I8kT-L@-RiM^c7;jw3S- zt3i$<D>7Rk-<m$B$Ue6z=hL1#tII#o>01T`xpR|4cLWeSM!c{cC#I2bI;<@9*J@zZ zfd@6pQipPKKG`BGt@Dwr`A{$kA)4qOtNt=Pqf2$K7Ul_j-~r~22V`&(tyxWn_lbzZ zFh6I$oB;c&V2ZjlO`YQ4pX0<?h8M{8=M$i&-`P_qvv5BH$>GESd7&g_JBqQl4uffT zhI)vn9fBHw?0eQF=A@9zgxos^8K`oSy(x$yS+gGRtM3(1D@gBj9P-44Sn$}?<eus- zROCcTbP#~x3^KZgFA1)*jw6aB1%`Hv!|&27vHhmQeFw(Kev5>Fs67w^$Rf#!c@wh_ zEjh)%qt5K6FF*z_CAV)8s#I%MdT2U!L{LYBA4en~nu&<O7%IpPN6%^ybV|*2BZzph zZp6XuOo({{7?2@asv&c3L`*Bk&aaS_6OByRH=)_hX24~b1`mj}s?Mi)hahcoTGe^P zKd3qnZw+E!NI-0o@^Mj^-L`~>c?Rc;22j}uypDvz<o-?rg2j2-Qp#GC1}7FY#esD- zfk{1=*$hAp%LM;WieMQv{ox>V8~n}x1dxz>IQ2OD{8H=Q_>_rsT}W|v$h9o<Pb)`6 zn*DgHt|R=L<cq|=9*V%fP!P%hQgT4OaEK+f680kzR%a_0!+yJiWXO;Sg%Zd#M>8)p z))VMug#I&03t+^>*f+rvMmwlzKVm)MD59Jifv<!V!8H<2M+hi}Nl~`faIn@;=r55_ zrkH*AN8r83lW1N&yg(g9fG4&a>8G8lZHFeG&zlTtV^>yKOj7N=@f7D4j*;>4kV%A{ zC$3g4J0hLQg(vwY=n#mx<(}lD@Tq#V=}EK!N2qz(rPhksP!+3M3gONsUBcCxG)?42 zZf7}&Z?9n@iQdVF+{K25A0mquOAFsVM-nNXW(6oQavQltp^Ms7iQdg_5xwKmyGMxt zfSE0YqH0J*C)OKfI_r(gQijkFMC6R4>-dJ>l-Q-(aVP}ylSUlSX!?_esJI#T5UC|T zrtVs511ke1BRSWU=0ctrb_Q?I0mu$498r6Gb%)$%Kv^PRX%xKR>g+NrjN1;esvSls z0(#yTVfM*G@D^_0t2-Q#H{v1nf|d^j>yF)1%JY*sT6Q5OEQLT+-=+|lm(U;L!@xM2 zO~Ky$3P=*9a0t#SdJoBcAhiWMk0>4G2p~knB;9ZMJ<3eD98C+(Z`tT~&Le2!m0=i5 z29Xl#Uowi*rLB~l41pKuE<;#$nzDBxF6rTHqGLnN@PzSOu1C1rj6A$D5{q{<)s}sr ze0wmN8s`z=r<br#xQ7Gr(<6y(I7U5OL5Rc?Y_o@ELRtat5=TgMBu+gn7oc9Pn|A-` ziJTrGe;<G@LPF>{AYtZ%9FRWCIz-kTO<_Golpmw6=z9$2BC8?(gT}waf!2&hmmL1l z>ot8YwZ+p{r$RiA2on@*!baJeMXU+i1XOH$C>~TWmuknDN0c9ksGK|@a&Of)I#$F5 zub4}nD2Vl4tQM0!8`3UkzgIDcBx*2-G}pGQSOVj(+kZr;)-mnh_A3D${Ul0TsD2VP z-8?lMMPb?(#!}GpHaZ`STm-Ox&=rXBrjE!TL4Qu!N{iJq?2{|bg+7|wdPcItuVD}D z0j^1?8eD9Dre)8h2QQ1Htk}-ApisF)V-ktRAnL(XTRlYps@=Z`@pE8aXL*MyCoL{$ z_={c8QJj%_Su)te`F1YXAdLZn^!sl$uZx>N%5JblneU*sq0^y3zy430^?}Ygqccf{ z5=k7K53%`P44-r}o!^0uv-5e(i4zYT5fS^Py26Sh=;}(3cINLB0cpxhr$c%%X4QyS z@%iZ}NWZdzwi1iZkB1@sMEm&;WCkOHr`M#-+|%n}{1mh69}&V63q<QlkUSGV!HJv+ z=d)qpa3239H;oFG6mwTFmJsm)rRABwoz9WLL0a)&)`#n(;=JwlaE;ha!G$8%$$Z$~ zD|;NYkz$d-EID49bXuIK!orv1U-I75u1q5P>xsum1bgqjLcAG2*_Y_qKTZq&#ZEjz zPzZ|yu{B^z5TS3%$m^<%yspZe>r%mhms+dNUyVqM@vZ8v%mA1Q2bNztk)kvtXs@u{ z57*%e+X`S*g>4qHyMr+7MhxM0dJ|vDadoLk$u6xQLfi@tBewqFwK5Q<X{k1sqr!7J zh&FzGE^oVuuNqx`GlKPP#(V<Har~5O#*vPXBq~SU?8GvxAH>eG@X<>CL8NxT8cLFC zd*jj#`%UOvEVz_Y>koeFCf3Cn?1zBRudF^Bq8p-Ze<eK{{E{FPf|U)PrXvOR{z~|B zuZy2pmsAMS4L^UdKbgqzge2>geWouO>1I8xg4sd8;$g9j4>CVqXUR4`APY~LJ(`?o zQNR%Nj1Us3II$&Wa2O6my5b|1eb-r1bM7op&RMZKVMKbJB{eVm&GKNF50Gkp2Eav5 zT>(v90Zm<j6FJ>#6_jJ^7b+a^0RwPcx3ky33n&tzG_1%r)H0Ej!gCjd;GRuaPqTXt z;xs_#0M3wUrjw!dggg%Q5DvDtsOGE|fnqliz|Hav#cXPu7?SR!3ZK+=cF$t8Dyhv; z=fQOGw&5#v|E~wyGw{!af9OBC%NhT13BM5Y3r9Iz6Kh8F`jic#c8JkS)(t3i`&ZJj z+pFH77GT>#qS<=RkjaCT6}cw4zp`SoN$$0sB&)1>&KIQToD7NQxdPHdndL=QZTEY7 zSGBG1_NZ!`<+T<w)&B*g#KkO2#gY|FmOMlAUHvVHH)fD9h(ycy0wMnR#r;yv&HQ2o zmLy?+5;h)b=Wds03&>Q{D0-yHhHwrwtEVw@MHj1YCTTE2m<h?B@}L#kJ2GTe9<<?V z6RzNfv<V@3e~L@q9O?FylW;O_MeQJ4<*#tEwFf^uzfRCr&nZtrJ%JSGRK#~I0!#PU zR?rieD3kD49wDYi@{>*p8Qgp@td?qjf*Z&`&+{n-88;3nc%EC)TYHa;UEJawF8S5o zLT}VVt`H3GrdyOxtt^9#S*g7)EJD-7=a4K7C!Nw*gW(H9ttPx>|Kwo;I(+DK^Mnme zFAuaI$G=bU4}JSuc%yUm0)NP&;evYFS8-9jRB1z=8d72@m3EWA<O6w-$CU>YRDLps zy$+|J;nuO>)Uq@L?P#6iD{yX5b|YW+SzlS2RA=LLILzwQbe_`O8kCeuhsbH3hxxWu z`w)QRDmnhvU?Sp`$mR*qtvhRvtlq&jrLCc58SJB-02`QA=ybiRQfV>49HM8SK*&0y zgo|&V<8xIKT4rZolzoADB!EZB>o<wlV1g`+*VRi=BRXpe6j-r+gaQRN(94i=Uz%B} zql1KhnnjN<uOhZYX*#J1raIj0&=l~1P=ro1`=;WsXTi|bWB$n}eR0Zp`|>-bt<_`e zIX<T2$8#?SBX^Ukl{py0SOv|el5F<hY6%YJmvO;<{MQ0gS1Ph1N+12&saGmu5&4$T zPIp0R8!px6(sG(=!+wPTuKr=TLt+7hgi;eh`cjHr>=zGnmW>uFvYdoq`79LAW*BYM zpjS<U@zlkhc?gRF(6&G%q_l-(iTwfnq_sc*!GY}f%4B7l#eD8Ky-<)AlIpeqJOU;h zAb+?O067MDkO&R+Om+Iwl(uUS5?rdyqjO0?8i-|JB6qt0&iD#|DBPrh!<E;ulIl2& zI;es^1lS80<LxxYLu?N0)o2*2XvZ>!A=QilG+b<bHJ4ENCX&cXsy&U)u?t>4gc^pM z2(-Pli86<Hh(B#gCn0v*Na>+sn)bGF(%K&q3@08&zp0bZP@~@rv6Ij84wI5Z<HsY$ z-gpa*9i1liU>b#5E^zW%xhVkEnuG7QT?@*^EtE13oNL0IhRu|+_pQFdpLYQ^uzuS_ zG!5k^?JV#NL%UO~XnN&_CW^4<*$~F0?4_MBiQEk|0E;Q2TnG`}9Dr{6;?Ygf!>0d1 zv46s0r8QYvOBp<HP3=vD;Y}+wPcyUz&xJfCqM~;uL)}U^-|CCkRzT~>C1pzMxaGI= zQD*KFmRL>UAtEG3_Tkk72#NiUA7b?W>CEparr=5?ww2EZ(>)8a4At%YC7p&wFqxW$ z*l>Ajywd9NrYNoVQk=xw<RYTR1!>S87eO?+Vo*dkhohU&#Zph>#gM^(4f1RbgRu31 zPVE@Sp@kcs+%nMqGyHoL|LXAXMf}@|f2M>4bAtFUE+IZ4!4h#k5%FnB-iY<NDh-G< z3@nvhw(Ola8U9gcfVmJDOEquNf{^@qJCxQeY3<{<qX-K-IKh~OA22*ZJvs(4GeYvU zFh32+R}qg0r9m1_%7@sXr#Roug^QJ_AaV;*&M%b<gtm2v&h_5~OHc^n)xD%X^<|wq zHd))RU=Q><WW{q~aRNwD>A7RRETdF8zeFCyp4l1u6*i$k@IK8{39mo02K3lY1@BWv zyF!?#gEA9g;fn3}bH@UOb}SAPHLEwu2c5+SeRWHrB~hj%Hg+<4M`-D@r+F28;I;TN za^Soj*!`=Av|8ETh_~H%TSbeJO@&!Y1cEF8Phgh&3-}h0Ndb6nV&QovF_(vh_u`&H zJRBzDkhwVE2eD=qO$+BOW=Hau9Z#Z~aUf2k-b!tIoy$>?b5y?tI7&Surx<7T=V}N| z$yQpMv+?BdvwR|l(-01)fh5O)AJ@VIL?u_;9|;xMd9MQ_iWG#j5;~6Gvw$~4$4U0L z`#P-#f8Hn3&Ucj7dCL;E-;7Qn9r<Ke@pR9g@Cr)gU5m&tz2V7i*zoZ0DQtX++Xvb& z2R`FlOQ-+L`h6U1(WzWKz~8tyx;AtE#KHL!{{zFer{f)pq_7&S$ppJM1$aTaH#{OK zW}#KRoq+DOWba;m4Qwm5>+;Ju{x~7Laso19W~7>j(4w)_afoVNN)%-YQItDjx>rc< z+6g#KOgpCDf^hojUPLpy*fD)#KJCl-h)?IFF2PG(^I8w&x1y&e?`&a73+)j(9h)M< zE0WJK^iWrOGnLj%@0Bo)*c9hY#)p~sFgRqBh2NypjRSa$UsEuZ*eo<bpc*&NS`m+Z z7()Y#WkZxlc?5L=Q1JGdoV~kpaQ2&sh*Q`|M6o$&#}hc!=uePk7v0ueb42i1!!@Tq zL~ZqhKYSqn6!(hdd9UqAP=T<#jmu#9bQY_l$Qr-f#a_IJYhuRb!>I$6?&Do>TfGU{ zAA+MJr!U>V^l;^1C>{oo6W89oGz&C6k)9{~)1r&saSG)0S1FZNvs&O#OOXPhRY<wO zKU#T6RZYx=BSQ#p6k0Jh%VZeg02Ws712mN@XewvXRNgPor~0Pw`leESa^hY~uaUt4 zytW?oBQaV;X}wiVf_af;9o<q){8Ebx&F8w<wmi^)0!JL7P5#+9G^!L@+p)<C8z}|z z$a^r9W&)9mN-deYA#sHV5JHnowX$tXumQoSX^+iZ;2_4S;$pf~OVP1uz~K2w#O+Y0 za;HG}g16Q=tcV&1>*blP6hGDhX4&Vc#z^__=5`+5ZQUN($GOxqY>i;%FusO3aOL@D z!D{zcOC8*GiaW-&-bPbwH<vlo)v&0oyo82GNwD1*<)U<U>;Yl~Z05?Y{YQW($|;YV z)LH{bIA6hq7!qBE-L3|83emD<H79mB3Xx>YSM-{QQQV6nWrwp)y@L)HJK=;4gA|Gc zIkVoE{}L?yVfG{S%0FD{&s*Rt+6*gz{9|N%B%k!jTTsvt$Ung?Rq{`oMfiP`S-qFL z+11q$lFzIMiByX=`|_Vv^I!7GFR1bsl%rC3%;#SW<Ub2GF%-yufldkPav0G+g~>Fj z%f{BWz=+YCfoE#LSX`2%5nsUCeYr&(u^o8otJvg)AsZcMDM^&CVk0^!)yY`Zl0Bhn zNHH{vJfvh!KL~aa#s{GTa}Y#W&3Q!$UE#f(?9=kMfDOu0D=v}<nBsccH5o86RY3-< zj($jKzrx!ym+H^og8Em!2mXEkO6%mk`6ofBw$RM_^BY3)YtV1(qvgnz2NZ0)i8#gr zfJ*CzCEN{)Wvp6WK_CRB^$I!T7V1jT=IvMD1AkEis%61FoI$VKheu6S^nB)L(9Yrl zZ)^nc8LOk+m^RfH=wUvz&oe(m8Ea^vZdiDc4@D%!%L2SmTuSBex8!GNOBZM8cbmj9 z9Z3R<m5NO!7_H~Oke&Z*`AAG80ikH~3c!8~CKU54X0vHMorNkkiZ?5!(RcDKo|^EM z`={^ny%2D6vA9E`cNI^WkjA2Dqb|STqDW{TikVCF0kU+Cv<ki1g$dYI;x%6BuMhG{ z%lHS8oPy^EIbS7-lFO-M<m9Idjy3)hOR8AUDA9kq=e6)yzQaF(W??sT|Af<Qat*=$ z3gZHD=CoJ;1?armP3qO36ZBVEaXzNwFI-w}>}V}kMk`1K#1!LTA^<7zBD3GNx!6Au zVrLioA{7B5z&j$lD=Y((gk+4vhKKSW&G`KA?G{e5FyphbXCDLkkw7`rV^Oj(i+Eq> zTf@@o;9s?hU?K<CviA68BT7A|W);~N#d{W?f#A;j#cc>RjVq0%TC|Elg)m{@nveme zg(sw;s6@CUUxrI5-dxWT_WTyDVtPK!vV9ZkVTh#!c?PYFnmj-U2}|1J<-YJx+rEX0 z34y5W3Y1|%Aq9txJDHMlOt=jZ{{nyG>Wu_ZB&vduh^bh;5IRh-LKp-j;>L<oA#0px zMbKIG9bXyv7#pQ%L5OIi11NyCz{SQ-5FqT&&;~fN_Ce)kS3dbTFeyVEqNm!cKe-w0 z!@o{BnHwnJ=3ZI*0tIPk(&U?pkPqBci(Jk<aGP~=cic3-=Z~+#D+7<?JU=JHM(Q^> z^@so=X`Bg&E*}G~U`I!uV0ZLe66Ez4;*cZ7Z!5y7#7O0NdUE!$)%Q$Pcf+3#+-qp{ z@;R;!I(}FUk>OYY<m@)|-RVt%?#k}NzBx4w1MIB571^t$-$D&n0writYhU7!yA<t) zJtNNl1(=!`fuP)B?a|M}2pX}bnsy-Li!Lk^>xJ864#VN@yxJoj=4+7lL&GoC(nQub z%<gAjG)zpd1v;b5MY;SLBuvD@3D+MoV1=nU4nT5wY5n{=`f-z1OXT_wBzTUvInx(D zGfbWw$eoNzD5qQ(rgiUp#z(+;eqcw2cLcJ2LzIu}VUOV&zry5U7#=q5LOqLe;bF)o zH}@6&hTO~k#+86}I)KQ#6)3Q~MqYv^8TIrF<l4-CIBIElHGcD+EA4WhdMX)zn68sh z(PC7DXpm!Q6zql@zYJ~5DV=49Mhhy2ojJ2-!CIq=hEg4(AF}d87ULqaLP=w^b#PV0 z-ZZ5#y^ubsZqHdV%U=EtbiPgsW^xs&DDV&BYw|`ya23rwmCs1_d2fEp+Rp&KbZ-vK z3lPFkr`BBB3?b_y^e}*iFekZOoEXUEn^Yi|FDp@<&~fpINo-d$LO}vQVT3LJfxU~J z0S(V96E@zc<1>(2)M2@ees~>(M$Zudpi2GFt!5$la;}Z$9ux1qUR^=9gx6-b!w)hF z8x#J_=TfJm8M(e}9~p4%E`{!p!}REvDTM3TEMd+*)gG_5`?Bc;&m45XQ;t7u{t>B@ z^~S-2rRr(zu$znH$q==Q_F!};rIaHju6ihyaNSA5F+Kg4=R?&up**)Dks~e`V$hg& zWnY}Hz%KHL^79$_bDe>libs!ngXo!IvLV$_$YL&qkZS*jipaZAIT^1oIJ%IddF^9( zIyT?hq)=(U9rz152x5j^pq8cEjuCq+&(T6R%|O4b*MAwR8e6s0!P>_lROeQc-;(Rk zd4sSj*o*y*KO5Wl*M#Z-;hd-k^7>m5u?cerdHpXx5zvKmC$~A$VR|iKs_${vc43}< zzxJKBy8)My42v7`hJwTl^Rt;yi!IHe=vvr0R`z7SygS)sXnBaKx;c8r`)GB`7i+Kq zS7GdcRMjW(RWMDFG3bfdYK%H?2GJ2Z%znIcQjAJNrmIMJ$4Og#$Aa))`ixdUv-+j7 z&s=jH^UA0GkC2EOtwoSO;upZrgI&Pxul8eKlH?S$EU`@Ul8q?GWU`OGqMW|}Ls#Vy zA%Dmgl$*4x{q(#}R#q4B5w+L(eKV2Fi1%l8e4khkc{)TPM1^4~2MfZ;Dl}#_g6zVd zw=b&TU_g7|mtZTZuDS?O)Rb1lK~PUCf4Qi}Wf59uHHx~BJfpyp6`&^pI28%g2<5Je z=D<WQ8HlW2t*-A$i?A|jvX5Ved`=1TKZX1~x*+rn4jbrt3447p(Ev&ntU;gib6g$) z*@c(9P+TG8j@*M#dsz+q9rPc4udu@BluWj`{{%w&F0oeJEdphw!|A3&P~<nk@!zWF zDd<DFHo)}Xfx|XDqnmmZwTBQv3t_Y5J}{MfAfo6DPK~PV<%lOI@gz_vNTZfzgySNN zb*8gEVo>wAzjqkpXnvuXzLh|6GlFbo=UFTIue;6a$n{M?oQXzS`WC+Q=k5+n5OqiC zg<gfn3*bZ`p!$lS{)d4Jgb|6TF*DEVVhLPeXW`|Zm&VPqv!kP+yT-{CCqe$I0}dwB zU7oX3itOzDS9=2P$nwX7ExJ4ncOmrHF8&bFgTkH16~UX>=SlZKwE~vULawO8grB<Z zq;9yVa}&5!Iy8Ebxe-eW9Z>UVDhDFgLXWH#?ne$QY7}KJwo23B1^a-NKa5y^v}VEt zSiT_=xjkcZzv@^qc(Hb@ptcL_+b0J~KpN(6Td}vqo-^MqO?tDKZU3Gil4Mg1)C1Us z97HE+po)o+O~RMizr3|1jPSFp)w`bp!o%zpM)9f{Yb13qbif4`x@yE~QI$H-Kc(56 zx(k85CORQ;3@JnseM>Ca6Vob@B#Yg(C<Xq-o!#@fKK!%RMP~dDa&qQB+D=qhX>FGW zVcmN+V_yu7u{;eq=k)t&tRzmQeHwInNY_S_Z=L`l7cXfx*^v{B`K9=6ur3A<V<~le z_Mindl~DwF%r*`Ob%)V$SRGK3wWn`O!f9&EZQvT!)==L$!uf%0I>=7WlZ!Kjo1Mo& zgpNfJ#YY{B{{A7yWH6Q$NUFxx!xAx;R(Y59DvoOuzZGW=Fjv4OxyY@v+!Py4qfBV6 zQ;f1B$Gc*a?-jL%h0viaF&;4*@MH+z)S&@@pP#)1Q!U`dPeLkEpshE7Nn>tA_$KEG z`5w^;F6Py($!M~4yO@lk2pcE!TNpf+6s0^`DPl7pD(PTNc9+-!=ajPFf571u?zX!A zB1kOe%<h?tO4%N<M?m6xjp!7L9G*E;^eeq+CHam3eQ5fO$qQE*+Bydz=^~2(jWo=o zZw(b}JL@d6Z&+u)v6noc=7_iVI+yvzVw^lF?RaBc%@O&tto^}+f%}#H=Frv!_yDQ7 z_rv(ew`P9lYQY3kwL9r8-_sua%^pK15qY_~o|<Cs`4EtioDv3M>i5%4D^}}h4fTw^ zca88Le83T2<Biy&nUcvjX7jok_CP{C{sK`=zVWZ|`z_kNAw@r^jK3F-2PS!R_4xU8 zLCj-HAc3xlu?r+Dz?I!sV&}({ZBPB)ZEuzu&AC6L&+6&5DEi5XpdMS9;xj!w)i~Vy zzo#!^5Ue~c9AhL27W6(s(3sZY`y%l@?F>S|*dg9yBRzFSR;S5J{v-Q8sSdr#C2ZwP z&_ZlOQ)0MOeefQ~?U?MsHoY7czFn~sPw3^2uFF?y<r6I>YSputM1E4xm=3^~JEvgJ zq3~5uo?*92MW&0Rz)%pIamaMl@ySqZEFGWph4>p!Y}!}6W=&k9(Q~jgAQ@0sKz>4O z3z`2QX)VuB=fH#YHF&UtuuaW{)mA(xon2jFQK#i#NC~dcJBU8=HhXqm8>BVzXgB*& z;YC56S4>h1bI^7=Db9-dz;L4SUIT+PM}e~2l6|IP1R4)+;)=CAN)GSw9x$w7dfua> zpSD`2d!7Yy22bKW*7zGfFItJVX%If<+Yr93;cc?z&Z9F=5h5Ky^`o3e;_#7pKtiH8 z)PRPmo^ijXdbmYHO$v%h;B<n93cd)T%aGbP&rU+SKj0aaHBcEsU(7<nbu!P$YC-Ax zpW*6t4xtHlsIyc@5*CG;I~s$xLw$vx<mns$@JT`B=mo1N{(z9hl3zW_zlYWk*cG8a zEO5uJ&uS6XA=(gNj_ROKLdvnPs#G#6^-e;C0}4b{ukk!p!5)~KBykxB`B8;EE}VQB zLc7}iWymoGPM2Th^D7aSN%L6X5Edj2=g~3bZm<r=?(?c;vvGD%Up|a<dL(vJ2ucW& z`Y!H$)$}xwNEGV1hCOb=&z_+%dvJwamaqbwH-s7}CL1B~!wDff)p`!GDLtEBEV27; z2=&c<2^@_OV&RY{!FN3RoOabw4KJ>1z;S(kIV|xOeg`}iafc93KJH7pj%1a)>*m?~ zdFj4s7LCE0hp@Dc&E}}kr7&59i+&myj!+<vi~0h2^Qn(_fRxgCzn>b#ZU6j;pczxU z=$}t7vzB4?^w$S~jf$)slZu%KFWjz?X|bR4kT@3*O@bYKkylJI{MsL(4`Lp)jV3%1 zUoFW>(t1D?4+NjR8mF1{5Jefwp+nq66t1~71hy@TSKnvPt>7q(E&VOhB&55^v2BjE zH543*OACAMnl_*~s$B7FI+G`FHfu|jmp*!}UiyeTl*Kae9e)`+a^#AR82|a|3*_Y~ z581wPeTltlH6nS;QQu^5Lb^nIu{^}+IFc>W@|TZ;hOt`#C9OstX&=$h!PBklAQI=1 zrccAI5-74x_mpB)BoYu341*;_f542+wju){sl6^joL_ml|3Qe`h(w|%{VARzPz4T7 z2v=}XTY_v}*=94Bh0H4hS_)o`DlM%(PlJNE>H&*VIm1+bb#=Sv9z3|hLqDZ#O1%ar zxleUFjmn!^-M;CK5<8`+-_3V<At@4F6!20`+4(87I>al_f_jWsK3uE(GOhA|ysB4@ z93i}NtEgPQgC~Dsb1@Pu)}rf<z`)na+TlBnfnBe@&u`(tLAQfpw@;-maVzngyAlZO zG*Eu~E^O>+&!GqNI6)C6`2<f;HV~9tE5)>!d$GE0=FFLWS10)`cf>b9_X{2P4ZpyY zY0Fm+q@EQ5<j4Bw*&*a}KsRv~`$8$}@f$i8U`Jf>J))O~s8&ZjyYl6WWUt{aq%Ei7 zVmZ=FKKcsk{5s*xq_t1bylP>PJBKvmQ~A}AmY+BzXhDP+C45+$Y(z~Pq&FdArU6)5 z)HGd$HlMS_TD)b0<p<B%p}-KB8TcUN5rtp@WC@xT_Qb|>As^j(`%?rZgv@>0#U?#_ zj)NE~6FE@`32>e|1myw(7q>>9llWSB<1I0!uFi+zd`!*tCiVPqYK|BXIlc@u#j4ds z2?}s8@RiGf&D()8rfnIAApxjupmU|+MK8uef1e{P6}km@ebY@n{V|wY1ONTDj91L8 z2r5lr=ylju@qqnC;O{_q_0#P$;+9|kj)qFuiswUNOst(nMSTQ97_8__viHj8a_jT# zJLwO=n1=8dpH&dz5&cZ3gZ5sWOl3yH;+nW${GPxCn__AKi0KX?9LsaRqK6Rk&_jKM zdjH8i=(M}Kol`tmc#sf^-eU*QXSCV3gE&C9hxhEmDqyWQ;ot^UB1sTPs7>E#5GIEl zcndhUZMYK33piV_fv@A`W3*<Ddy#zML~bf#{NUS;hvQTkjPl_FeA033x!SW4-<PuA z{2WJVe2kzU@=bb=BIKXqgD!oO6;X!Ki%=Ze@%X6N%Fx|7EE158v|_am6yC(*nz%m& z4t%y~ljAX>w&*T6wF2nhnwEi>>F{;DVg`UYX+k`8!jZAnm6lDvE3wlv^*y;i>jf;p z^ZxuLvV-Rn#TIdtlAHMBFY#@JcaiWHAp1nSz`wVkaz`EM0^zVPQ46RW_<&?_8E|y! z&9?D6_~iD)<KSP}P&B3?1^P>J70)!|NOoZ^=ZQ6x(Z@rYPq1PVQr|%2I#W=#ZT0v} z;|+L<V8Q~`vVoufBjT4hS>HbxXML&WBr(lo=ytS}otQ|iS(+ZeGtzKg26>q}(vaO_ z754<^--2NpT0!u`Fh#kCD$(sv5U-2ui>HSku(7`_<a-VsA&8q^iszx_7Iyg+!hI4( z&{EAC1b{-UCT|}X8#huD?Gana<v6tB*$-!N;VkL_ZP7v@zs>HYp1?hb`Y%TAo2H3g zeDiF+<#x!*0)<?M3;YTca!s4YzW)CaoDFw_*VHv19E?%&(zW}<Lh3S_#3HS*#e0X2 z&eMgQWlAY45`_S{0z++M6A+6>jMwuh_-N0ppHJ=D$L7g9XhI#RArCc#1q&Jh68bA; z#SBx$?JWf};=CmSl|<ccAdmVZI`rHsVCG-ffYy+U*Kc_XPfeMP<3_LbTh=1H)P<Dg zz5JFx@~68JwwFN~WLY~;X-F&Et>${-_X@6s+M9|!f%7Tj8K`Jz+(@|YPfbH4!l@3N z2B-vlaw1H`ks5&8C)14s%(|wG*HrN^($mfmG5BhGAk0@s&|AJ=Mf8E<2X?m)*wOTw z#V^(;)o<wh%C7@<9AXI=Cy07!#DQOYiuZ|e$)!VmEd2t>pCkHv%fHdzjxg&&7joha zj;fk=L(_i{?{Jy2!U{tj&k2wi&kJF5kUMVY<cUjs^6g}}v3l86E@44p^4!0FlwEuh zVL>vCe*y~<zBeNOo`w!iiab@>Pwe)jSgzgAW${uz1V{Xe^AB9z0^<xAJKj~QE(Zt8 zktrA684Z;;8eb=3-x`7V_D`P&_hY9WE=nu>zkB##VF*z+56Xwn!bEorCxaAxoJu05 z81u#TRq9f$UEvZ(ZA<IvU?17OI2F4+BW<&=d4BRz*y86>BUYi^+s9p6TH+b&!cN{k zi`XDX&`wX%=*cPm#E$qUQN14}dJlfM3!^B9DCFDi+}$M}6IJ#Mugn^u-qPf6I6WwB zaj@=ei<jq<Hfy=1y8ZAwIDA~@p`TK=<wZ`#!R6rO@az$kVEl`ZVsnE*m<@*+?fq-D z_iK#z2Wap27Vmoz8l9g9AbFrKS6j71OK&v^^Jf$AOM)sGK~6$&nbxMaH=o{caUw-P z!`RC(&4t(u*{+`mF@IOqPl>z5L`T8!@4I+`1}5D+U?|bwBstw3?2FpF2rjc#e1??^ z&-$6R>|N4hjRd=-to^utyb&Umu&hNBvl#RN=gAM@jNF3J#baTO8n@U6kGT~V0yNz0 zo7G&(?KoiE3L7k=T$bt!8n`cTaK|AAGpVrT!AL*Krzjmay|DF;=kN6#Pp^5CpahxJ zuAT#X?^NTpOe~<Ms5#y@8HT04RL&>*9&l)cw!kQZZIE#aCVm5ER%CB+9+6&@6&@sd zC#l^WAe3eiHfyFv0_O25iJl$6X?Z*?ODVsZZ3LGCL+k1g?=CEFc}H#4A?hjY6|ics z)z?0ZU)8R@iQp_qp#}BixICMDBMpp0CSJWIO|u4<@{zP`7hXxH_@43rK!R79j0+AV ztGWwOWcESR3MWX>T%W8Xq61R?F43|ar#1o{X%u|AvbT0jxvMO1p3f@Av34VRL>&EL zO$6ngXymft9EI<8D}pY8<b{AH@D2;FeV7^}EEB{>hd&=^XGx&gFiC9W)q;H#aN-ET z;S0l2SixRIYa)x;qPRt7&*&5Y7@E%6PZQrmlhYT8qfjyA_v~)eNF)uMen%x5-%sd} zau+a)Cy45(uWUiOWRLgnF&uL5gT4p!2V@VXfJE;Hd2;iL?4Gm+Lqz*M{tBu2aCXYK zyAT!)oqepA=<Kh5$~&uhLx6J9_(-2eo1z;#pg_{T0!e%7AR7rCXE0M;X3*516E1L? z`XsKxa3z+IOj*V8tW#y083~Mgl7g3p3CkQ#SW1mbur$1rk&~&{Qy>`Jg)~|=^hbE+ z5PYNTE??6MbfJ-^V7m%^(irdYCp=*V+h(j1BZ$DWFB?p^9<Jg0V>>9=!bhnYqMayy z?d!o4AV>rVba;9vaN?O`fPnT!WLOQY6A<Xi0Ql%11OyDumWwmCf31POx;bi~H8;c< z==VfBQ3KWXTz$O4Mr2}V{Ly?-fj{xUpF6D8ZJg-TP_!eWuF`r^02t$rr^CizD&xod zuJH$zC808XW0GqAP6&t1Nm~EsNMs}uTk{T;$q1F;z4hy3_fzx{$L=3SR)|^AER}@n zSUVfzpa=UKaVYkGayCTAb&8^5i<Hvv1N)_~#lYG`QPA~f*0e)>g&K9a={K0`1HXxy z>y2Y#%=K!~Qsi6{y(0T3W1lbNsG4U?8KG(xIHY3F31VSRz<iVzE%g1`@Oz8YfvKe| zT^k4&QWbkl#d!ZEybo|0e7c5D*rVtGy;$ciCi7M&bZB)n%zZ$BOWCX^#WF#Fs7R1= z!PraNyT42}z#3XtxL+w0?sG@S0No_fPT1kL)B5;^^p$L;1P1;i3In+=?3=6)I-`sA z@myqOe0@AZWgR7<{vwOIkwiQy3?HFt-?#MA1XDvOl)Z0BKhFXv154N%QzG^uk_T9_ zjt6^VA|T2?;AZzdLeRE?8;*|kdfB!Z$e*kgbcbaB{l%y$+J0S(DSED+cOVkGb@|YL z=l(bDi`e_$t1*E2npV&qU_J{~OecK*{-_whoFUrj2u$F-z8`!;eE(1I6Q5ik8=kdW zW5DxXt)M&bbp0v{o`XilfTu;Y^KF7>^$oG%Ife_^yWr29T0wW<Y1$M8&$q6L0naVE zcZ(kA>))ft{|WrO^DE%_`R`)j=RvKYJMi56izs+jTpa_R3q(8LD*XJ4_5S!PG2mIQ z6?6xl^M4)%&#OnofTu&W^KF9X%VT1%_xzV*z;lFF&>eW%;c(h%Kl*5R40!I@%scRH zf@kB%*zo-4Z)3pogjUcUcs4vA1yBD~G2rPH?Zk$skn(mu?`h}ps3RK1=n*U^o$d@a zp0l77H;M8deeJ{JapFz+;gL>vMrHi)_&SyG^Ik#B^WF$LeGfHG-*8E!kNA17DzZX4 z+AQ&$ylSewxRj^bdwn=&OoGC*^XZO<yUr8#Z_&!oVWObx(_O0eRrgMJe}6V=O1BS< zF{RIOyE-VYBe%q_$FFskSKPyoV|N*#CrHhNN57gk5@&*5LPDy!SgEbSH0T*UrvOJy zAQ{LN0?97i5-+|a5WhQOjg!wr0pr(K#sJ1+qMeSw_}cvIH--n<8+L++W4Hm2S8t99 zk5eypA0CIFj)KQeuZRJU8qv;w3LcP&cZSD;Fg$*FQ%rcA_@C~>qk+=u!fc5Q=(Y2_ zKO+V_yrP}|6g-AS!y_jQj~|bZ36F!^XvGp%aDM~Q(B`M2;8AgT40tRM?Q|0!|2OjE zVX^nu$2Y~;U(2<E?(DDgpNxX%)tAM9r$e;!ZGz{hp|Rna57*f)<?$o5g6_c6j<5}# z*6T;<G2pr97rX=CCU}~!hz-ww!jP*=c%IM-x&zOKjZyIQUm63RUeV6C37&bE$A;(6 zUx)$EhqZ$4z;p4Bqu@Dya13~6h<3hB@T?vZ8=f<N76YC+T0wW<nU2)%o!0x`oiX6~ z?(_f7dhg7?#n8X4)=s=#>EB932fDTK-tc(TKrOKb8hoznfqo--*4G^G+nU6rtMT3? z`q8cN7Csg=UdO-~6WjLe|A+DZpYR*iBVw<YE5xXx_0=}5pgZfO`G-+p{lg_O!1}^7 zU4!-Oo&Ww%;Mw>U{Kg+)HP+?+_?lMG9e6(bgD7}@KP?74XNY#bP4xU_l3v8Hr>OmD z40ztF6?6xlt_@M}9MnGsJT0P~ZxcMLuZ#`PF|b|f5<i_<L3iM3dL#;-Z}p7<&n?i2 zqXXY2cz*H~{P5>69_$jH2epFkz;m-d3Z4~?81P&m+W9uYGw&<l`S=qt;90H}bO)aE zAC7|O)qP^X(;?c44bN{TUrsaR%RQsy%Vf9rjpWM*=mRcaZj2NMbNTXbsf^2)Z;B~j z?#yjfa%t&`4${&^NQKERB?=N#o_zYpVveHX`5zMnUCWbqXkT?tp8Qh^ncPuCwy0N( zDJ&K(b)3TgVt%66;MnxK_D3<+!@XKTch-Z;7X{2g_87plh;}*x^J~ka|4;a{2L{E4 z=a|Q1z|*M}bO)ZMx+r+Q)iVY>w>-u>@NI%;<AB)k{QS`v@I0s$bO)ZB*F?dyqDKsP zE)eZ}tKgXy8=jB<Fa|u!wSw-zbAD|UJg>IJfTu&W^R0qszu551|3M6Rj?fCa15bNR z6g)pli2=_&8~&a3-g(EC`Hp>mhaLOQQg$gx#K@6X{TMdtS68pLQ2r)whMT?7N6RD= zeZn6ude((Sq+KiN4s6aM?rx`zx-mHhY&LPL%;>WKiIDz__v=r3#m2Wku8)CluW1F{ zf$6i=Q84|!H3m#)h<3hB>vu^1*zm0N$AIU(T0wW<=|aGcPB=O!DF!?(qMcaq>}(Gn zLty)x^4Ja&&p#}N*d5D)HLIgWQj!>BBsYq7qAbCMz!vMRga7HpbExJJt3?#~Qugs6 z?m}%C!-v;r=kedg3Dn#U1Zo-%BqG33ZxP@qm8|0_nh!FO!3z#~Wa3%*bv#H6oYbOx z?W)!81L*F`C;(lT5CcG$h<3ULkVcO>kGGVM*VSRX6O8eusuZs&0b>m&ma=<B>r^^w zh)=_zhRAn!aNwbes3A_X#2DiBqMa^=_+LzKUv54VQ$BdNF9v<MO)KaQeHd9D1<^0# zVnFn>I^Kb=OCM%)e3{V!UkX$TY%llZJ|lb1oB<|SgFO(&9xf!mKTWrAAc<ZUi$u%a z!kMY7qDD9{)(GSD5yEwkJ0fy|5o0~XpnpB{1c~oTf%E*@?&JQN2cyPOVvaFWH;Q(m zX3C&{<Zsw{ec#LHYhj1^n#B#u7Gq^!KYqjdzIN}mh*3#VMeAvlQEPkG8Zo}G;DfBr z(%@vIS)COR;8rxjf^Xsz`0&c8k>75jdb)5|&lNrBF!Har-aGT3U6MP5U4v|^ic)SN zWQ@b*Ic!GU-r%e7IP2hWWfu-ti2ME9+U`&Jqbs5YK0joInIwiTrYY<USt#1+FmN&5 zUz5M=-uP!oH2$q$G5(r=WBkjb$KM`n{Gy#0;|GC3xT9_4B+ZI;alhbj$O7O8@dH^$ zAk9n0hBnTXD?PpopVS_yCs*lh<T$OqC*|*By~MYX+yUp`>3g`5kBxNW^1O(2L!K%i zf0v1UuY?*#_z|Nvw_0h@e80!@=m2iE@Oy1U9YHNKHTUexg-^D3V5#SY@RDlp$Cnf+ z76nE&f?&wW^F$yt@_rs?o`=Y2dar4`B-%wNq?-^JQuNugUGJ@LtQItd(h-YX#Bi?E z(h)D_t%<B_Xw8U$kgvrw*t|&Zb(R*>AXAHJa5<XtG@#!i1A;~nn)yPeAQHUy)ATqO z={(NG0D<Lw5$6J5`w&ALVRRlx$TSRUKc2uvUw;;!PQrI>d|o-+Lp@4EPosyOqclto z2g(@DY2h^;XkmI6$H#Z7Id)UndWzvjj<vYxfCUG1xORyJ=};a43n*%hF#@7jr_w~o zcXGyUqcB_|u7FhY58No(CaLywdU}A(+lHtqt;)?NsU`s}NtfnwBX93Abuwj*xL*sJ z;O&c>@2I(&v3L@9E|-guvN<AZN*~nK-6$_wm>DuK_l^>657*k3Y8H|EKf)^N?MpSY z@Pzk4swu*yF+85I^*~k&TU(E(#8M`2fGKkUmO(4I{tls0cl4Fi18wT@9sQQ;T}a8v zYWubkqlu^r_;@HlwFTdLtkdD~x{gfPW>S96>Fm&XD{Up3TW{78|11acjjJ~xD|m}{ zc^Evo?Ch)G1U#TOonrAMh9k=$iib0dT)w3jm0fYZRAo2XMdNTwzX6dOx(GdU=W0Ps zkq{lxAlwAG4-xaPQmoi10y1hv>pMXuV4sNmGrl702CM-LWxARK2T>n6l`f*Jf&Tnv zzL&Y!YfpiEYgtC@rJi@OMwtgjX~dg#(T9&JMIR8TK44XXX89Q;%hMxv@(qb+rrN5# z7CBi6NdY(QD(=`id9u$n8Ka!8e|n1u_Bo-LtrDMh@U+%wQp;DarX$dkU^QtUYTF;t z0};=eB6D~X=QfcuuCdw<9z-B@bsYt8x&^7sU#8$qe#<{`Ys%a^&Y}2o6mNg!e9H3P z{u~j{>3ns7hi=N*p)OAYWT%CZWITKO_um9bI$;P^C%=sDM~2fmi0~euXDdAM=YbY2 z-l>tz&Hs0rLv8Xa^CClK>ijNvLnG#poWwU0v5#OIiGW-rKdGE@mQei98OV~;NX(HN z9vb$n<46I-1A)9g`Eobq14;+dhIY0i7ane$p_^$vJJ!sgcvd|Snld|qM-`6?y|c&! zHY>x0faV!UZs@nnb0HM^=uqG0#!)y!NHv!dDL{P`<mi%6-)9>}QR<<z@qZ>V$dkiU zDZOb0&lZ17#9Ldal+SBVL2Xjat$19GKA3=y)q72dv0ELYPRciD?O*7F+dDeCdiiW4 zg1HO9CQ0;2>BtH^^d>rl5U+hbdq>&P76PQ(ny$r1+Lw1A<(L+@eHK1NDacs?&NqNd zQxe|GLgu&(_}?!;{Hs9}I~a6mfjVXcP){BGw7Q<w3ENqYnE3oM>j?W~lVob5<o5i- zrC<4BZRCfW=)(m1uoIwaKc&{j?At<dhZij<#iV553En%);Vcg=4fQ>NOWvXxEuxd` z{FncLSc&brD}}<+)KL!Sh04tX<jWSB^&u0q04q!hk44uT<K2rCpUc!Srd^|WbbX4v zSAyJRo~AF+-g|g6BX>N(d|40lf+J1SaZG|MMwN)th&aeRGw}#lL`4WN=h$npnu00e z!3y|_`Sse3dC{^VAXNe_<m>nt2VqcDE#`gBdL(W5DTFA3`hc_`2dQnNprUNXFC{|2 z&g4epx0O?l5_QnwH%8foANF_~kR0J95i`@Oj?cw&rQSmUou%5Xm=_EK;ma-A%~I_z zaSNay!z-TVJJaoIbLjn2%H3cCp1H-h09JbFeT3{j>iXAjjt#w!5sp^&WFQlWR8xrh zv9z2nG%`b5Oj+Vt8a=zHFEBhK#(Dfc^aNGNgrBqte~w-gklCj*PKR=qOSP}!0fB5$ zs8pZMzNb(NdI_%^sfLKF-)1UijR+&Ehv6IzXxrFt?@TeEt7Rh#r%l_nvL(dk;teCJ zAHH$AJ2%7A4rFM+pw0sCXn@Ex<}V1j-1sOX)VCEK>OAqmK}h8H!Bjhai@~|r;uC)k ziHhFGY=f%@JPx8p3eJufFlrmKA>638#SnPLaPYhb$p(R^!P^g!-6E?TgetN2MXm24 z$~YDUA~9yQ1XHy9<`@&GU$H+g4ggCNOW-zx>=2G(1P)d+A9NyOJN4v%mkEub49e>0 zy3kfmE~fpH*qOAZWKhTY1%NwM880&5NoyN0rI_Lfs>I`*A{C#5IL+r!%ux;xfL<8B z+Nxn9&@2M|2qh6<grid~K0<g&dwiRopPtim^$U!t7uE-2wMS6(P~Q;*&bihS?Hs_t zTY>=+CA9*>Q7;&_CEAN=VhwYuE)O;c6&$%V0_Clsz~42S2`Bk<HFE^OOh~mqz(b|Y zBHxATkq>8{AYM7=Iq^!sZEeen8OTBCXqpVVgM{+ZrISpibxDN?LV7;)JVmOEe_LB{ zxRz>)L2|0fdxlcfKY3?1QGP7+gQ#P$2S<(5ZU3N1v{%x6=}^{ajDf-$MiDllWoiR) zxbWAXle#y_<j*s61X$kJRif8m>>hG{NziOepMe<PE7K7JcqT{{5JKBODwjp<AJ086 zh1XI9e*}3DLYQfvaulP`FSfepIMKpVSDzs45`>SiH+#1{$m8PpN6Au(+52Y*?`*~> zv005qV=tSx{}l;4u4`zPHm4x!tAr#up+%wT?A*m3c;Bv!w}UL2e1oVV8Cg5%_T(t1 z9p_Wv1JOWW-n)b{G9{G)aL0r(lAeo)>FPus$q)j}{v1_P>K;!ud6OZNPQgP2z`GOi zYt`030=0(mP>-)Wve~?i`iLI($}xMB*=?a7IC!jh5R+(U(p-)-6vv1-7xis_v3Z?2 zk0Z#N{@cw+-b*{y@T?Zhp+nmlQskCUXHsLtg2l9o=+p~{pJ=B3w|IAzAllZBTAoWX zxW~h;a@jr44tJsbyP^{6m8d6_Q&vg|xyLe7{hq~lZ-#}Aj4scn>p+LG1B?1SI@2L1 zAqblK=R0<5`35ETek}o^<US&nq2xZUWe^PHa>xX7`34-wbrPHcxjZOrAU7Sc(Quc+ zA6C6Ycla-mJB%_E1agUWF$JoK%;5jH+CxA5>Y#D8&$v2lTphy|02vBYoiMIW8l_cw zJ5@Et)eFW|opJTBadnDkOrRcYG@d<WTs>=CZ8om97+3Yi)h6TWHC$150##1|#`IsH z>RIFJ1^p_Y$dD<JPa7V7>gi{1{%gpwoWD7cJCZ-GYS#KD^{Q$>wNkIT!~AE%N&d63 z89#w4Q!2epR~xn3wMnG&iW}*w@D^4BmPe;x=PHdDw6}|++hq@kqnk>g==zn=V(k@z zQP;1W&|e`Scm2vX@rts8Lt0K$R%MvH{dg?L=ngA{MqLhNB6fl<M!16@QX5*~Dpk)l z{>4(g_Yc_Y;?Ma<|BlmdlHGVSJHth!K@Aj8SSMuEK<s^Bn@Fso{9}^xzvh*JGGl3K z5#{IcgBZz^u(eQh$F+o$zBpv$_4ZcUbC9^Q{br<nUQ37^OjOsti(lkc@lCLZXTAx@ zr~<a%H^HIq4NTy15Cape)VA-|G;cpZuebULA;0fdtNIAxzVBAVMDK9M;$hDrAoLfc zXIEO~o0YLC@>F#Vp{bEUvjpWT()jMq4ET0#K#2=M8QFqrPEfF&UO^wXdH3K)T~EzG za0R-xWLUs72=L(YH)IC!f}$fHEDmKLOGvDP#AsR(_9fpM`p{o!UMI~%K^aovarh_~ zLWsSdXPNBFvt*l>q>i=A{X#x^cem#$ROopPe^^18Wb*7YZg0S?wgHj6i}oJ}QWj%k zG2CXHBGWLl@y*I>FSlYeCb!@6GB_EB+(W6Sm4O_dyU~F1pcDKvC2&zUpTc`tM>03l z^11FfiEpI!bn;W{&*I5Ci<C1*PRwg!s4eF*sb&xT4wY(Nqu<M=+QaxoTA$i|_(cLi zz6ncf|BO2WlQ_W^2SBN2KT3%E&)T1Lr0%v12@&0S7t|{10QzcI_h#ZR_>lFd@a{q| zdo}nKU#V5pDdNr6S*+BZbts_jJVd|f&JXbmmaLYZXJRADJ|y|63{9q0<ycd^rFq$h z%KsUB0HMv3w_}*5b;p9zjk|Gj;`CdZG$X@~SEPsIFwxXewT_xp-{XwBnO#3$q!XYt zAzm@b6e@GCrGH9rAY#|2@~o(JlQN`Wa#qWY_?0I8sm{`W0@an*^;om_Ne>T3bD|0L zZB%ArZ_R6`&5-sau#J7i(sBgrP><8M*cmOc2YmzcvDD(9s_|oq1+?9&3Smd)X?0)Y zCzkkq(#~Dd)~eTXonV~QP)6-0T&a)H5GmC94TK!8(@dBo|8T;BwS*t>dy%sFUMCJA zTEd*mLa)*%ooHxaV!DJcIWx0cd|B$_b;ma%jSD!ES)5U|amk4JRjQh#HtJg5eit-L zhy<4P5AZioH?Lf42Pt;-4iJiA>G`yZ<Wyw)6`jFLKHgAZEe#7$4n=o`cVdb&l1JfP z^gTk~P^kb4Bql0<jpW4!JEOnFKe=P~?3<nTd4OsK{(XpR>b1%8Fa9&fDvyg*@O7WZ zTg-;MiGsy_sD*<iy8H!upE$e2>*6UpfwZ$B`>=eA`gQ?p5RVgqKuyYpJIfQ43lCNf zQ!eDu)$Gc_%7u}1HLlX3T$tyTP$ey;>I+r)Tb`t~fWYu+VDqxS@Hz-y($3P*R6Mir zXL2)A+Gxi?qkkgvz!~Lr&Mio_6rnZixYB;7oV5Kj(7>QuX}=rSjIO6B?F(^zimq=~ z+V7DwSTee;v@Z0fD6RJ)<aFy&Ie{-n^)T9f7=^(>O8fozD5tK-9!yc%@00VlH=_df zG0r5E*U&qLXZD$ocPUxIS(JswWZXR+$sTXJk;pq8vPw}KoTx&4!ZC)qyQ|x2<Q4xw zR{@vy2P-d8+6h+evnwT~onX~It`dLd$p?7-ril98Z2CB=8EP4XHwkZHg1+;7P3H}W z?B@%VvvcwdsvCLJoS6{$;eTfK<Q<0IPtHKEw?GQ>D&t~$ikhpOOi&tn`3lpG!$v7< z9Y)g+hB&*_D)~!j!Bf&_^#e%d{+ym;k%s^zj>e|=bMGjhSe5+_zh#uP)oBkRB&m~M z<f)Ar&K#?pju-nxycmB-devDRyiA?y<QJEqTxw~|^(Oes96_tU%!v@nWlq)k=mg$& zHQ+ZL(j$mK)7THLLAQ{wgPUOKg6^=4{D<G=%oh0nF^jNw;S)P_>(1|B_&8(HM_uH~ znyY^#+XIE^y$G|QJrd!V3#{>lPRallrJ5fqzA9n&{hsHcD*=y`R^qXiOan&z<OYrr zMm?Tk{IS9xhtG7;wZ5~E4*=oHY1wEd6O_N;5Gz0m4{7VZ7K=Z3+bwpBd`fAZC+DKz zY80r4rLAuoMehg>q5vF3fh9X}i4z>e&=6-+JTCO4l%2nxItX1~StLvG1=2)DuoR!+ zmR2C)+o^PMm?hrHH}j$pn}CU^^W}f0>};UkYPsYCYmVWLsA(Xd^M+E*$9Rx+JPWxb zd{5J>(3YUzIMZQGrpuPXiNR*2HCgVd2A()qIV|%+eC4o-!H<+yo193W1&=7LbL2^C zQL`GrUX<Uc9zqRl4FA3d4r7PdRg{wBkkXnW)&2_kXV@j$Jx-Yq<6b??eu*bRAIY`{ ztNEX)CQWOSI~nt~kka)^wdHs-I6H)pKT|E)J*9_=a7G&o#%Kn91@x5G%ZY@f5DDoa zUkinA58TPtaXaY@CJ$ElFQnyv0X&qQ#Kq$K4+y0&4)sUG?P^dV)`*UZYJPKVgF1DD zl;0}lAImOZKT__S{nUCo(@3>fp+~-%txY5kMk1;_v(mai@(;yR?Ul;gLu=?rNZe$> z2w(Y{k!ryRtp(pxYp9ms0)!e*qlzo~h1QFgkt}J1y05ljHKXTJZBv5LFRfyvPb{F^ zRx^>h8~>XaC`j*(P5__S__L(%*W>o0F|=<|c{kKji{OTRrB2^^!UK{TO+#Wn%uy|U zhs2EOVF(9NLJ&TKUjbp-4>Ux=C)4o>1Zr*R-ZM&DviI*wo6XBGJN~@Txeo^JzkHv{ zS?I~WsZJk9JEaY*-UPIp6;j$#ynU3m9^Rg)C|Rp0B(rflX%F$ntCdb==Vt8Un67wy zQ8nHJnr_-oe^uUhyx}WiB2i;@rA1PX;^lR5Iq7n*bxAqtUQ150>?q8`JHh|GF-at9 z<hK*5ZZyen`STJHVGF2wiVdgc(d~JOzM{{v4@eKKh4iQT=6k+--~CeUDqJsw-Sv{Y zrP}*(oqb^0z;*FCRg!Wi?xd{^EtXnZ@@T<@2TDb&32EOBF*x#v)S}M<YiLQ~|2&!G z8bUE7E?+~qhtm?Bobpd0&$fV+Z-TvkEME1^cHq3EQ91Nhs+o!ft8mZ&@6yqZIyGH6 z@04n0LT;h7VIlpo4_(|@o~*PzD6RhxwJ2?QbT?aCe~{nJlWKP3qPndLe<eRju`vP2 zFK~#}oe?vcBGoL!;ZkY4MylyYIKFkaHarVHMxU{Y+klbYB&^~R?V}Y^&HKQ4rEQi} zbBJHuFV(aIXO*^TQq4d4#doBdLHuHZRO8_2%+Ng7-z#nN<N@e|g;&?1#h=DgC1`IC zF7V1Hr>UF4x9AW8YE{&X$;}G+W}foppA8}bUlrA<=AR{6H1iZx@W8O|P!5X;a&jQQ znPwsQ9h@NWSf<A_>G3K4c#2ZNOjNLh3Z_#5;|14&alqq+^tgZ?pXHASLPS<uh3!ab z^CGcm+YG683GQB}LiF?o-czORGAbJ?)qa=eui})+d$m&0j43<};8KfH?Q8t%EUq@; ziUe=9sA9)SYy`pK^s=|FQt|(Idl&eo%KP!Zmrw!(5-?!YqE)Kmih>ptNO3K_DguFO ziXzl~y)3J4LrJ(O6fiAtI0n%<b(`CCbKl+E#x|z~{USFh7gz8yMbW97bEk`&s0_<x z=KuaY&pAn2s$aM7@AXI1<ec-I=lXd*_s{2%$3Iq&qfJkZxspd-xfun=MMpn1iyP+3 zb!-;%6Ej>0D3|Oj*;zj$F*%oW$(}<G1OL-mM%O6*1;qj6tXW>(cA2m2rl`B@HnvJM zHbnZ_a)tEf7y??Q`oW$1I7eLFG1ZT2k<p}~4(rN;f-p3Kuj99k;CIq{YrK8UXvF#q zg5SZN_LX<>s?1O)rw%e7T{)TU0ew-sLj=e(0WSyITgu?r;+vHADcZk%rK5(@rO~Xz zsesswe0x*X2aGBH_DZF6Xs`4Mr86o$Mx_ho!!Qn{A7Uz0WK=qPuF}^wnJ#5`3b1IK zXrq#S+D_qXV-bH0SAQ|8>;0Q+H&x*>Dm-nKJhsn#;NVbc&punjJ{iKPnAdCYk#G>T zF*w;KRjPZUe56_KJ*saE)i;uBK=F2~J+Ow=4Qs%O<`}nUVGY4;){OUA7AmOj0wxSK zbv-L{frWZ#YE(5qidNU?*~-RH6}06HN?J+&LyN#R^HO$!z?)mz?Fd=F{5z|cCP%1k zvNkveZFJb%%z8pt0vLG!4whaapb={K-{@_bu6|T|TWZvgCJxvUOndBdZ_E7(<ytw> z%WQao=aN1(&?j@PYzgcdHJHXQ)Q!Jty02tQLwP7{wVe-8a?UPE<LP7nZheeAL^)N- zS)g!uQXsM=^)Kp^ia(*O0G)z_{|BH4woOlFhm|9>Ls1(QR{rokeKjUJAb#w^*k!i; ztiyUW{Q$yyp%C82=-#Y}jg>@3IfIx3TGfMS4Fa2;;}}U+(dbB-oBGIm;E=Gj9F4Y` z7o1*0)`!V%YbV1`(XyIMKlO*LkW*f*_15m?JFE-se(K?jP*;h{eetfo3oEH?h%*f2 ztYhPssA0U4)i;Lmj-WPa_<j(oJ&Y&-()l$snps7iVf;i5V?#;yFiN_2OKKbM4C6Uf z-f+sRVI2Egw_$f!O;nIsm21^irfpwz0yWn3yc_$QT9wE{&In!t1KK0_4QtTJ*-sjz ze$K0EPM53B9RGsddDWS(b?c0Ew{R6|n|xI;=&=iM_3E&8QOMk%>5>aeWQTQqx@?6i zd!x{zY8YlPFpuw(n!8H8Edj3MUFUmSy!^<LVZ5!UNXdPab<;()FFM6?&W(niEyh*| zYj8nqo>j&p>}3s~wo58q;A0yz+jts`ZPW)o13{0?+9lGTMbdo7Q(&4L^F^yku0CZ? z{wJ-SoYh)~bxUV=$*!-tud_hbuEWYzEQ=tmH-$(YYmynh91X30d=YP&`y-D!Tk!>u zk_`dtrNn0v6r>uVD?%CgvgwK<XEyG2Xkx&|e5iBM#If_8E<Gi1{L>0A*MwJUN|VX| zWM06v4z7Bt4gREa6|(J9>*Uu``4y30^W~QtNbdZKNWO~Gh0R{6Yz2x*u~{x-<$a)M zYoJA`F0&(eEH>QA;R4tZt_)P4lN_R;Z;ce`;JoP-^5cHdi!!Ro5EJ;n6-V!<r1!4X z{Ee(vSZU+A6aXIfnQMjL76s#g_))Q892FbJQL$mDeqqDV{o3=CjLmSJqSiz)=Nxib zZFQ&XoHuAJmSdNOK^+}FqJp|a`EOMC%&qp)7`l&Jx4h+Av2{HtK7VV%zY<P=^);T- z19186dAyMWVKOEMH0NeaF0{Fd$wlpxixnF&d8Gal=+9}N46c>0G5Thiz7lakD)Me( z>n^`{ZlMq5@J_zCSGr4S(Y#NT=Pqv(cJDS0B{MGfn}|d~^}N?dwC}gO*IxaO{K^!I zdaLHVV_Z|-K3OJ=-ngYVLhE~oHm)8_1+vcNe&hB){8(=69JSLkQ<%+MTuQC>EPh6* zV5U_3*hCQ|mqrK0kDV#|?+$%_SbUSfNsf2zD*kflSA4NMXGycU*j2h&%6xNkNmo3T z8ygf~JU$0o`{J^k=(wZ{ox$ieLLqJf)P(T=QwcP8M5`F%4DMh0Zh8+VIXzP<J~lCS zPH?e1c4m97Ojdh^aN0Sk1+LVB!g_1?Xn{ai=X*-$VV(XLJiO|SYRh^QzFhg&fjCo_ zcv~LjB`fugIDo}0^fvX@Z43b3Dc*HSl<=BlfAgw$=)n?dkO{95MxS!d%*Rs#;VFUe z)Cmx7!}m!Ji~-#5^jsm~9u;tlmF@(#FB6S)m1T9&%|zw?c-K|lRp$WTfS$imfu5T$ z-J?k&2`m|;DBJch_~31sucgOVKQu;wO7Bg(KP_t?qZa)hTf0PYZpK|JpF>nkDacAM zrx<@ywXV+Js5)egQJ_?zlol;fEC?jTE;hGpjM6yUFMo@)Z{D?1tZ4BgxotOb-&?gc z6nTp-g{`|ss44E8CVg8est3fq(<i7VW5YrrRE7;w?#p($bEMoR!74~<YhR$U>4v)W zZo2Cd8J1{Np5k`=$jBI6&3VZo@guY4*PNs~e&miA0J_xM@-0eeMArI3^9;Fv1tT!g z+?BiPg6s!{K+qHm3d!G^>A#FdjZF=tUX3K6did;FG7?{BizqW%HpzTS;h;ivcxlbx zKuJ~bAyv@dIh%sqT&-@dvfr-ZrajdxRda|Fuj5uOD%QoPnkyCJ)#j-9(`%Jovh!xP zzs&hLoGTvO5<3IkPkUeHA;+k7x7TVURjZH`dgG<X>#aAwuN1OOvzlH}y@oBfYTnb? zE*$r<Nyvh=u98}Jyel`BZ`6)=_R{n4X|k6drda7_+j_xXLV4E<oiUbn*)-;-Z!5BL z3cKff`X?0TxS}w_w8XxT!aObd6YZyRqfvfGDG6b!!Q*x?`V8SeyM{%tiNg)F{8CnU z>2W;2<0*6|-{%tg)ek|d90&a57&)*I^l~lJ(qWZIMN_TdHf6W;R_%srIfAoSo>g}R ztB=R->V<_7qKW8g?~;F;ZITf>k{akj0adxVR?#;icNGCPwBkU~K|{?VAbEuicu+0x zraPa5P6s)({CMn=33u+}A~rg{Q7!)l*=7P}_P*K@itJY;_>v-7DNpBN(SxuzyYgej zGa_B;*=hQjnz<jt6eAN0$JO~AVUW>@m^(I(XLH8-Y+T3JjF};;^9)s+dLyRa5ca6^ zEBqE!q8M+E-HuTUjTgVJY3`5KXvy&Su?fopTHUqeEVDzcwDsLL>Cyh=ZsE=c+7Eq> z+Ge?a_zN^@(c#2KX$`&i&bL{I@d0nEsD!j86b``4+Ik@eLMGl6N&EjH3o1LvSvjX# z{3`O5w!yq#Rxo;=QSUP9d$7{&m6~I$RQ#h|1#@&{zy_h%-l}%PKfnfoDLvjb?(iFT zIBLgF;ZE6h`h3eYPpaFi$ZpS6n#$JAi)Xf`1R3Udt6zg;l^a?O-IG-~Q3Zki^O^vb zrvl@0Hy$Ew5MgIJnD_$obn|GEbHLd5SGnu{omy{~TKh{Kx@Jr{kQi;s$@1P<UDnOi zvY5+t4_sB~`wgFkd}K^H`I&#Y`FWWO`&W<W>ppBK^v#}C=<9zC@8{<IyZ>_XKKmV> zr|q#EJ};Ia!9s^hcNtTUn;mk}rg_u=3#dKr@Z*YeRkYq}c^wem2`%!rs`D{AtlQ+y zKCxB}ht;^u&~}$&DCfox_O|AsA=G;zYoq*;hs(!P#XJ14tujaN&`Nr<!9Ce%fK$w( zBMHx1IP)dV@eK-}WJsH$Y|km$lsrxCe&Kn#G}mDC|4e2_wCZ}4_#?G<XLI0fW$oH0 zXTvKd<MtJsL2UBRe1(1eV;CGLjlF;3N4lefF5q#z+uNGrTMx4Iz=TF$^BF20t;3pd z03xwzy2soXd>)e*l~x8DeM|mg){ce2Iy>!QWBXmT*N&Bj+iNw4UpoexDrbW~HHo{a zwK84tW#zd{0EV@;a&CI7_B(8!P5CgfWRJS~VE17Q^F3Kh*qh<*lmUeuV4H(3_nA&K zy<Y7M<{KzO^?6(U>7m;4iXtAIlP%cqUC<GeHu*KWz2Bjjx3jUJnBJCK<;ODk>w)oQ z@ZdVWhO?R#jTF<x2ryH8nNO(cF{r7ZOYf#yPjG+CovJ?GxrEwn*976*TfPr#qqwLa z@F0E+jr29T{jIM``;JZHar^3y=nP6nuZS=6qeUOB-kIiYJx9N@R!Rxf$2_)bzf+)} z71wsBEZELt9OK=cZ!`b8t}XIw)6)Vs+UeiBX<H~18FTe?pIAUE-}o0W<be~AIl7rq z38hRuA;>%Rgm@DI2;!q)EsnboQE;^in1cmtt~g4S<x7VoCZ{;^d~>Yd3@coxOwaZU z5AIa%0aEWt)NB3ZIpTz?57KxWjicWLx|Pp^xAh~KfaIyY)acSR_9S(M)F-4)7RBD) zwY~|}$GxqmqIbj3Y;$wzng-8ug%vVz@)w#BI1#yBzg7{P?pyMQWPvhNoG;)k++Y?U z<962_kcHdnyht>y9oFGjgx^|<Spq8o^4T(&`vP;WYfADGr4v}NKb6|Jlo}}8#P4oc zrM+dXvzu)mlsBd2jnXCpMw@g66r;CPW-BRvD{CK}xQQT3Vn;a8>n5r`Xd{f@+(EZS zupL;uvi}n$?Xcc^S!Uvn7#1I9q93-7%R5)dFhmjdb*5?K9eNtB=l5se*s^RKo5iys z3u!zX$IQ!w0J5U|{pTM91E%fBY4qq!Xjn~Xo0`z2Znd^dYz8s))v6Wo&d|8H*3(|= z6U^3LtCR-DbidKSY<gRkp$x;|-m*}XV%oO5&6w^Wr|CF|Dp!m6Cgnea{S!D5(El~# z7L3vQ6Zs(sWQqm@MMiALImMaEa2=6FC`%~PrAW&<>?~@?$_|j%ZO9vCUo*uX=HG!X z$|`R>1wUC(wn3&r0L-2p1Qu@<ju2=7Le|e;%AQHHHlX>patuBu?khI`okbL9nk{SJ zqIJ!Vs{t^&eDf|Pb0tE9V%H(cDhe5zCEI-$G>z>pHub(XH=PE$MuN%J0?fr<_4C-P z^jzEZ->2&TimtzNF<QkeF6qBYyKzbNT*89P(0;A>G#)kgZTXX<0oxZZy9d8k|2-UF ze%Tu`BT(0?w^>us6578t|H6w$%qL|!2v-Rv!sj`%h-;Phcdk2xWw%d!S1OrT;x&le z?8?5bLtw3n|08$tD|V=-RQG_Y?uA8PRCV=v0t%A9HJp$dbIf_1&VyQLSJGvA^E=FW zK7$a2%nd`=__y4}f0)}yq^k0_@e6;|03XU4PIH%RE7=39MIh+ZgU@#b_j#vp&EIL( z1WLBSd*LOz_J;yW&4p-}-0{6BWK9BS)Vh}(qYUObO-(!G;yvrAIJH$DpTu5Sws4^Y z#^?x#Tg0anuP-t+M6WZa9->VC?)<IrWf;8kcN;YUXzDcLHH~2j&qU&)y_ao)<0Fkg zN?pGv*Q#0j7T2PhReIPz&}g<}QzL++y+ZZw(~HAj#xMTiP5n~~+^M10ZX;GjdzVJX zRK%MLb7Fm%6r+GYDVx<4Gh7>c7HhBYoAQrt;`I$R>{dr`nmhJ1?V_u}%gc5Pr#-fv zd8b4ttU-oQKXAr&JnrOqwI{V&p36OT?KY=+jMWk}p&E9|${=_y!HP15(#;KFV%m(W z4&g;m-NoD+)yIW&KPb)=sEt=XMh${$#OFFZW8-yAg+61GRJ);Eey)^8t=rZ1a7#G} zRyFUJ0_OMR87noMSbS>;L)LtNs8&PP!oPeZP;c&EGr-)|vMV}#`H}vy{zldRyjL4f z<wf0V>T=6lcEvg&>U7Cm`d<4=sZ{<UyxbI-N9*P*?P`K$O2Z{D(#-S7(R5onBCg<Z z)zh5VCGkzmc{vZSq3Yu>py!sf>o?g3IjX8K!C)Ba@5#I`$~$`?dvsxL$Z&ktX$;2f zq8nEv8hy!=In4fL>trnDjEBlE0q%IVfP@3)9+_Qhij?0k{W^fP%0918c?I^3^=q(} zd{KvBz&|2a*|<LSgv`7H_`)ZfdyVhOJ?cU1%N5qRd}+qF@M2wyp=RCOW^8(hvUX+N zeXiB|bJn-{q4_G#;BMz|I&+G@WC{VNpBPiS5)HXdSlrP>ZK^f3EYECT;~KNNI#t#` znp=xQSAM(RpOH{%KE9?W?$GJx?vjrDsa<Od5({!yR}D(xl>5>0r3BMW?P`xZF*H$J zGbi5EUgb{p&(U{fIk{)l`x^7N7?mW;u)Q674-XNKX(f;1)Sedp)y}p36ZL*b%_Ams zwT>0c-VOGC@yK)7?V<PS7_+P*GGF9RQX8frwSa0QOpPBBqx%j&)!Hf_BynFOKSO?^ z5`!jzs6$^@wV}a=o0d4=Na3%i`XaX!O!HZPA)vz!2lKXkSDvl6X8IzMQ$+m%a+*>R zarkYBJg2D8h=|U+L&GN=x_-$d?OIAZGo&uhlvy}>R-8(5J}(es9?X72ot@aneuDtt zGk8N%0IZf!B4fS$g~{tBpy+vgQ3T2lc-Km9gzV^4$@I_$%Zx3?^>O)?5?&u&N>V)2 zCE+>qg#nQm>wSVNeP%7GAYy0npwEOlSM1B-$m7*=G+&h=4$H^(3Ulv+AWfsh<)YWd z{BQ!qSLx1#BmSDqyN%nOcZb+bQs10I^xBU{;VyRP3H2NgszE6{X>S;L)eZ;$qpDE* zI7`4p8vn;PJ<dGk#=PL`LdLD$2W8t);H3B|hTQeD1HFNjC&USpa6J`y++f9aK;#g4 zJRpma#8DG!zSk<k$H)nu*zW{S_{6|E8eC-_Gw)w5ivzFtE1DE%sUP#bT++da6DBn@ z56r5;m;*%HLN>@}P~&Vm3zw^j3o(@OZNBo5_1fP66T0G}!(R}_>4Z7jKT*w*dfz6B z<h|KjvIqWQO@3lF`}-8Nzk7ZA+xqQzvnMBdwo)%Fg3}de*OTqRrhAD`@@yv2Tq*H` ztbT#9Ql^cLdFZ-_u6Oq1ni0ned%kNEP8ISagxKuBnMP(s5%`h<quOnKU#w7XCZ^=B z$*+_s6HTH^Ud0h7O`Gv2w@!vDLv|@iUF@JXnMNH{)}vjY-RDFl-exeq)}N;gbrw;N zOEP%*bLYDAtD&gEY$PkJVRVGb6#>gMo!uA_UB;ybHeMCrr8y0@g;4_!P=n`?HG(SQ z%|-pA!)?dj=)g!_;Z&b>`-+o<7&XpTJcMn|i25&jftS`kmr8xSzwxxqvp?R?L^sZM z;5M7Tv5}o7n>n!nl>gzc7Wy_U=Z|$4t02T|bM$8OdkSOBISz0Qw27>@bvO&87@@&- z)63ju0o{h*7fAj@mPC;!R@F|SWxlBWw;LK71d*&3L}Hy32H)u&q8ubSC=rTgAEny9 zQV5*<OH{k@@>^;BOLQNgx(*?;)?pBkLu+@(H>Zrgv26{OZ@hxzwCB6XK3nsw^RQ|$ zp1n|jdN?xc%*%&@$3zm8C984okO2X_gOn@IQ%C{gDg3Zge}<N?zeLq<&N<HO!5Wvh zwV56YD`~TIiY9H$k<Hv;{RU%`@G9p53UJX0F=_?~CV;k-Y-z7%1h7gotfwwJEclBK z{!H~kI|Yo>z3{elDsI`GFB9wz7I<6sb7T3URR7omoeM<VT<OqSxfwlqM^1k_2Mo!u z^g|X5W=Uj(oakT$CSTsIyT<tvcpQkvW^x8f?UgpP8om<UsQG;2cA~eIQvoi>lVxW` zHUlgruY|2KaGHV_Z_B0W+Tus^mf*~&*fQP$E?N_Or(tM07v}c_*(HccJetQ|p1xCo zs(0ExbAq{-MIJE|#_M~aBgJ@mTV6$Tf^nN2(KwgHHEOCep;1jaCA;fqG+4iQ0YDKV zB$D@k^U8_X?r-C4DCu68y+brV5PxqJQ9m=xqfYJ;>ps#<s-7&GqR2L3WAALYxdZei z7h9!dlT*1X&Ws2EID6fR0fSB|F!yXvrRq~di&V%N)_R*J=?&CJ-emh5bBo&*W@MgN zM8TH&7hFZo`r8V9LK`}`<-lluxzX3yBuY2!_@9@sQIAsJQBcAymxjUTGU(V;5<dnQ z+E}R-P(4@7e_H>bL~J1<1g(tiolp4bSiKFXGCn?U$uI2Tm}_N0WsaD7!OX1AP3zL} zXcan0b-{Fyag`2hv{Eu>T-cKkc_#sWJN3t+Sj3@IhQkJGJr6L?Oc~wX$!qDEo6&Qo zsgKPxOn1lZS~ECtS?=nS6U%a2UWk3j+iSWvn#PR!2kZa;xBN%^zZ2hrG*9jUm9rrn zHXnGH2?b+@MM%<E^NkQ#6GZ4?hg^cZlO0Ktk9j>c?$KY&^o6Y0Z-i44G=9DHl_%X` zR<*s<t}*YHg(6EE%X^h@b2&NgSl`G?u%XHN$V)S)`evl&yAzdEGj}iBX#m@)JBv9W z*00|B!9@xT5Hdn=CO4oNO`~sJsV_Dza-2%-?0{$OP+g+zc*;7bde0H;ogbS}Z_U*8 zB`+{PN>m>Yg{^!3B!GZbpbLbsIo8+8;XN`h&pDo`&$H^WNpklb;;l|OF_x*1t}NZ7 z`c$kdwa{&yT{Sc(w^49EnR~#HSmKRUBEg?n#nube__AjX5V7IoQz#(dRRR`d+P#`Y zD8?o&@c*00dZ0qq8^IV<xJm1|%Cix*tfQ?*BeDoY{c^~<nR^ORk<F&V`aP&a@d+Ar z3g*lbe)M>3`R9WMa09*ol2M2R8#Ar9x3l<AXjCrV78Q0Y5jHYe65OW%r76dHY6Jmp z8X~<dNkJUdcs8U^XIHXxqN%{zpg5P*6Y{RNYNs*PlNve(3`m!$-u8#7D)t1oL?=3c zp~!B&0NR8x8sA8=TGf1}@k=v}M{hF~#@HY-77Qhrqk5;FGjvQbcW6dKq!{yobxr?4 zN?@1Rz)Q`clB(+lbD$Wf>P^o*=Fm~sk%C91*0Y}ZDTar9W;073S6%w=(Yi|~i2Dis z0G2>v`GB2DzHCudAsFC?)ZvM0AG~x(vZq+20tU=I_Ohtw{zP>^p0f<1Vwjax0>xas zxfr6*!dwbnz^t@M@Pwpf5Mk_ulni!W1WemC!g%F4xf4XJA>2t>3hA%le6q*U{tR@K zOWpBj6z$O7Jc(+*bjIq~3P=#iC|ORfRdUpm%HH#&;A*7~x$7$~zz<KW#Z#o~zyGCd zdeNNtt+&BR$aB|7km5h}kWSonS6rZG)((bLq3l;9F`N(rS**)70^B^;xLf|xe~H&U zYQ9Qt1Fgdtg&|5SFtU@h3~Q(lTf@p#PK6z=OYzHq3ei%vn{RTXXhA5uYSqXL(TpaV zbJyrN_NJVfB_D@pSmSo<iSdCBmF8E8d>z*Ck?an#3HO#j`b+0)AR>AC)#(w?f0Fm8 zkYj@H%#Vqix0@>Y;GzSGnmjbIYFOS?&$42@4NXU-tnr#J6D*1Lt=xzmFMYw`-(E$_ z<t=?dG;;1Wjk&cg2cm`XrEaWH%L$k2tGsxA+rM^opnMH^5n_9B+fq?q1DB(JcT?I0 zi&+lpEZJHftUfe<0&6=?^=N^MG+3vGW;(O26uJNl3h3BLRFi&S%dC=URTCsh{+gL{ zEr{Dos@9WqL8M6un@5#+tr<&!eWiK%5kJC{-si8k^&9+EWx|uhGb0)Zk!>v^&s2&l zMFZ6`t3s2Wkuqn7RUs*#T{w^_Y_1eU+uPm>Z^UYvv*D1)Wp~1Dve1SqES5y?H@7s- zHMam%G{By5C`mV%QtMs#NO}28U+J?#=f!Hr^2fIx#r4ZP(oX&0)Tth_F;0C4=OuDX zTv9e7dM+`5?y`OaH+f=xYJwjwv7G90+ARIOb<#+L95foi50}21m|pOdgm&k5l)SlO z@zLwQe#2K{SKPE>@h4yVa;$1iuK7XP#Ax5LNwM)F@7LtkP<0noA2L6=X<b$bU~JHu zg0k~zwUJgYh!sfD<eR}yZW~yUa197<UGl@uMYK}#aVF!&K~||dh(amQlzLlU=1I7r z-ny^M-hrh#rMskk*C|B(pH|iwbFDu=*^lOREZ6F)f$vqsk9d~+F@9vAH~u)U@8A~l z;d^TO*Z3w5j-A><1k{>P?!+15`nowUz9kQ)@14@k$v#Ay@5I>bZTXi>=eTR3KD^pg z5D9>fLaCPpOnLeyPd8jwHccMt{9&KBUeVBOD55gn{G6SMes#mBfA58|CO6eb#%J}J z*pLBouPXbVzX=laUL=%tFE-~H>0PqVGXkx_H=|S2mKUXf{+NZyMmEkOE*#z40!B}f z#d~F9dhu{4Hv*lD*aH&bJe4F04i5c2GQHJuwgyM*v2%txsbbU)2mVzufu(K&{9j`O z#GkoKs9Eew4fTl3*6T#V2*|KDZ_CQ5)ZDY#UT7(A0tmn>Yh3+FveGh(t1=ucLh?P( z+fparnN2ddBDiPCOU|a2t<k>95m2-5nyX~9XP(h=>z%T;GHvFL&%3nc<O{t@Cpn9a zh3Bn8pbtl`V+B&<gu}2-dP*oG=ZV;~$wrE4xyE=>`q8at9kM?@4?Kp!Rg;*R$RgUS z7gf^(!g?7EF6$v>ko5O#mLC3qC+XIE^eT;8l#bL!&CdEEzX+*%9;~${PXbntn;*8Y zULP=P>&lkT@2~vyJGXNQ0(ooxpt7yE1r(j>yq9}r2j|Z#dn-13d2{Z=^Bc`MVxE8s zKlAlnFo;u+ha&RBFl7Lysbs=kMqId#wg(yA4DtCRi;MS(0#c@NW9H0y>q*g_Z7)ub zrtI&r0#*GZ8xgQ`lBbvbbN>CMySTM(zN_qDGOz3qu>&ZrS4iUYoWwP`Vi8mEyK7v7 zT+7S8=v{R^sI4NnyZIlr%P;L88<47YvqQwN2K=3#{}BUj75jhBnF79rA>RCEylakk z)e}<d6U(n$rM$@xt}OJmUCgaH+r*_szOc;67w%>9B|0L$!~nt<nilyIH7Q@hpYSEV zrF;pu$(KkPe4!<lFTeg0&W<Yyy5#FZ{e`wou9#H$D$-w=x#S9qmVBM6zs}HKm#D9G z<@C9h&on+)@wt}I^?aK6+{$MWpJjYj@=5TykI#4b{D99-`K;&jB%e)up5^l#pBMSO z#^-H57N49zAds6E$anQA=<Dv+pDX*{0MEcd-hj`!Jn?&QV8}@)-p$<c4;^-LHuT!| zAtj~A63t$CGRqS()bjZGiXWNeZTT%jZ`0%FTK(EMl6&|l%-NQ{b6)1o7YJ2w3ZCQK zZX3a`tn$UqgLvm85<7I}#=euNC}rNyw#$vqs^wg#aNB706mgE8eRFfdRXt7@?<|9l z>&%V%_~UJz3MjS-hfjUO_1BrYoYSw<xYPrn`9bQX052sf&f=BRyO$N!VfVq7oN(t0 z&Yhdqy$N`~&nI_vq3<L<7xJm(b2XoZd{*;W&u1&2*ZKT|PY#o9@lMX5L4$Jh_>=D% z)MrouKkR>f2LTF$1~`|!etUYo>)aeDE3fw>Y2D(RUygVA7v98r*R4_OJ%+FNQqLD+ zGnrd-WECH<T1!0_#3sj&To9W?N(FU2I(CsfKR;3Nk-9F6oh8@96BX~P>r3(KawhqF zXHsnNxoO>A#`z|n_xYswcxm)pJ~@5*^vTWRPx@beAD8Yghr9SC<_@*=v1opx4(wRS z&sbhEw>)uG@yt}L2$2%`EHDEZ4Y|=;1#BUNm2U1P8Y#dRepA^y(QbZdeeyhF3$osJ z7Y3^R!H<_t^FHAzU2$YN{hn{TGLAL3oc$KpWvF1<6#6`iI|t>?Tig+Zne?rAyNmDT zM-Ik@Dm!8R!O6jom;5FjGp2P~8wC~FiAg7w-8)ldjz+<?AuxBk4@>)lBA{AdISH9b z%MH<U!dR5{SQmf$Q%(vQUZiBG%)wB4d<bdgj)ugd+;#X=AjKRhX*WB{i5J<Y)E3_9 z`_NqE(vD*L5TWJB3gHP%w>ghvE9i!p-?yX;cdTE?dh!h23Ia<v;Y6>G64uPuntZ8+ zeyi-)Xcx4E9E0PhVl7nSGQy!3;u9r`eAG^+>p={tMh%K6S0fi>PZL{sH{rmkAFd}+ z_)R*MBkn%(F1kLFF-JY?CX9)mWtPLc#{Q{0@YH%bfCk(RIXf-g0sKYkNXtZzj5-`c zRG&P?g*Z(~hluiXD#eFNIy9FiW*c>Msb_~26lMPC`DSb)wVJPqdy~Yq%oJ1M3}49% zH`)I@!G@xxL2(TmyAH*{h4E%rDq5oBz18nCW~OfSV=o&jY`I#J=$E7dUXAZ?#||hi zh)E#6bDCc~kG7Du)+1^87GIierjA^3sbee#s_auv`ah%?t@cU*E;~7*TIw2C^5@dm z)6s*T?R_FQ;VMtKo_*_24L-@I00Sd7i)5Lo9^0PdZt?;)$xdq{@j0SSXZnARlAMD% zqC+LSY<#nCM#$Pe8b((V+2a~pNpd+rqVrdS*p0BTi~E>UT*)(uZ6ghwbcQO*RgoPO z!M{+K8gZh{;^N^702P=jk=dA1)Lx@BI3_1ixFz2MZb_9Mv#+^ac%xwLSaK89j?dqc z%!9F>#*m1aq)YzZOBj`bRILYWSLtny^S*fr%D`bnD($r<LMf1$)s$r=tQJe2+OKA1 z9pmV)(-=+S-A9DKjqjF8!YNXP3yRnD=6}Y!hIm&UX58T1yVfb3djnr>uIq@O`!o0B zD%cDw70t$BKQiNu_$ec1d#Ss@dKsFARyynXSo`@Et@8Ydp3kkZ-*GEr!b3D;4)s5W zj&D!M`r|j1dMZ;7xaQR17~}*Ws3AXc=#H6^`rOkNp@n4mBhrAnen_sz;IP{EG`~uQ zU7o~+gI_v{cfED*w-nrEs%jhcCCTn1%Y)_*C$$%5crV);ngQ?>HCUy}JE<^JJgvK4 zH}&p9-;eoJ^4ZJhEj|bNtm2cy1P<g=!iTtve);|Sx%%}f=-01bUp{W3cPbxevAFbM zcoDt@EOM#2*IcEXGP^r5J|M~DeW8T^0rc(5A17^9AIs=aiVc*!&xq0yHH+X!avFGB zkMo0c;YB4&iUW?m&AX~YM(9WoO6TTC{UWwY2KSNJb0q8H4p)$M^Z>&IWhuawsh!Xq zx@}y3D&hJU)#upSuEna-1$9onqFv%u*{5@PWYp9d)G;k&*3=2!F#J39g>mgpSE?rT z`9{3<w`#->{J#5$V`Qip?`;_Z4NiKVs-#osCxw=+Kov{lu}d(=lunpC3LmsVDj2oB zMik09X2mG>M$zG#^1RroAMZC-h!2rjVCPm&;?6pX8(5=#iD`n*JQH$bx8`r&@>ZTb z>NrnB5+Io6f~7_sy+uaJTV^v(1FnQ?NU&>Z=}qgJio55GRw{On;o1Oxh?lkHaGno1 zt2W{47wlT{g0x!WGy7o=1U<OwXPW-iSPe+*FG9Dy1&n52Hj>R`^gl?ZGin>vyP5FL zKo8Qahz9T|8dMatVnX-CPPVQ=X8>*-)Lx@dh1viR;%S1>1j#5uH(<heIZ;H>IT7n9 zQ0K<Y(uAss#@28v8Zl=Z^$R^loj_jYh3?b~qLN$aw)Jtm8r-AI#|~MO{z&l?3g5S- z(cD5i8B*u;->Dz{w!CFs#u_nOy|<FpAE*4)|4VtXKRUC+VoXE>!u;SNqvl6hb7X25 zJd2eVtoFo`6()YN;&ZC?_n8U?P{9##K;OKm)}B(&>NrqVZeHdh&97tr8<CpliCkGJ z)bsVb&`!jDrio^{O*qL!g`}ArnCXWo=BIi-mqvmYJHnPqb+g@-t+6*}xZ{7zT~sXR z;v_ul)|nS7D+UrXVU>9c-SJKr&lg*;UYvcV#;5R^FANLdGCyocT%K$DB;W(^JZG{> z(#doBrCCU_KC#6P*Z9ggV@Y=3l45s!*_fQz<j5Gf&PW-5tc&lF#PDvTb_^Xo&$c#r z6GJF3_DS3>)W&UZFSpk~bBmE#^72<!D}%LQqLsXG112Qd(~4FSo$XmeEQ7KqnU}dO zPpLvJve)H>tJDk1`eZhY;jZryF-S3pJQ7G2nw}Nl<3Px^N4<HG_7UV<&1@cZP>iz) zPa3MWo9ylr`G>=P^$=&Y$#8d$dG@l9^~V0A>~vQsavdYF*M2dny3D>{nMn-8_Ci&@ ztm}0xus7}=6JdUAPP%SGg&YYa>Iw1U9jW;{GU5O9S>dzce@Icv^Ku!xS=K7$@e%r? zZG1Cd)+5g~T`QbZrQFsV7ivs=P#O)V=J~Df{I|_bEh-cPg0LkGk%v_8MWV2tB9j<> zPp{!L5uDT-wpQ{p+&PZFnN7|9RPcn!1z<9dz@Ls1OKN6ooYP}#T%#MXIh(YODKW!` zWu+6&<!VualEo(aI;<*#g=6(M6~hVgI{>OT7YM5NTZ4aOk0iQLR?Vmj@a1bX=J{c~ z<>y>uma9ES)G*}w2T*d1x+2AtWV$c=Jquq9XS?@D(+Iv8;_OrW!sgED^fPK30r*$P zC+5cfikC0$@ikzL&X2Li*>!fW?_}!RsGQ|`;2#G&$H(W#{$63@9;rg+^S$DXJwuS? z2lnwFFKc5)X2+I1&yg;;_*WlVlT+4&W#RHDaj!|89(VbrV-nSe@U#ubF0uad(Lj|> z0)NWIrMkK}nJrX$C-N7({IN)KLa&tZW0=?0HlKc24yKS}XsZt`r~KKOSD$ULiXN2L zR2Zas?ae{@wI)24q6=x<+pswl{?I$P`Ymg0$eZ)VoP!^d{9i=Vo4gnFS$_HqpFG6v zaC_D5XLX~I(5>YnZ<s2_XMxJz5aHdo2wpX}dk5!OrMtv$Rk^;X#{Vnbc-U&6-fLs3 zopGPh&MC^9_9P9Hs#cF(D>_=b>MFLbxCoj}S`Ylpf6shb$$@&z4oGF~2PJE|gSDPm zKkIkOhi=g%L`V@83s=X3d9jNn^JgvQ9Jb7S7c|MCCOx;zxsPgUqJ@F<mWl81MU(Mm zRRxbooW;^{O^y0=ZCIw_$Ue4o6MU9JxDMa{NA#Tbq_OYSYtBn}25ye^x0bN^I!$IC z@1t({ux<aNg|oUj3^~Calh+iO&x@#v@oA_Cml(PFtSMNXTOn31Jl@{lk(*=gwuVzZ z{HurL=iT-8$wC{CDJ&*9Ogrp6=VQJ}%kFJmNvG69yPzW)rO};$inryD>_r@Tf_(&= zd0Y2#X}xkU82Mm0Qq;(tkSW|Re>~2lyeetca6&Co_}ZIzNNnpG<K4qg@+l8e*grk* zVUbGfA918oD6ah`shXWPL+Z^<`purW&aBjUtuhO*Az#kccx}SNcFo?F!PL?nx4AO7 z&EK9QJhXj|NiVp~!6#Z@)fClJ&MNsi@qB2uG5<=k6I`^*+*VvZac7h3w9T;EtJWi{ z7?)-o99TG#F({eYSv#qMogl8On`0NAU=!&f?dk<RHt4V;8-5C}oy$%T<a9<_1`^v& zkJ^37hnv#R)BUJxuem}*toE7^e-T(?<ESh(#_6zBlqC)HQg5KMS}=VzLcvJ0I$+fJ zh2|PH#Y+8Dg_nadx7>CKv5)y|uki_Su|<~lnlaKe)I)zMAHnvT@%l=f#dtPLe_gA; zZqQ#5{dJ4}nkQdchIVj^d@JUE+L+!&hUp#+sHq9fzUCqw56AGwwq=jMmK6&&6K~#Q zB1i+V-HqtDV5G|HenyLQ0MV*0741sPPcmb=g3xX6q%zWEFEa^h*6{$gzSR7{djE-h z0#k9&Zyk)<^W&Ow5&lTdUSO7!M`eJdXFi!ss$GHDnbt>lyE!meHf&DhCl&R?F`kK8 zCJT9K$D`qjS1gR11W7yOqEMmnVYZ=gjVZ`eDWvX2{mQwcsG;Ehm#jYCUi0ZwPu`$m z*bAkkYu#k~=$~NNv*hn|w<8S!*Q%vouA&|2faQ@PX7weg`r-_c^Osbf>unUZyO&&( z?%pqC1Rd7ZKyc?H{1$)a*s#cI)E<uNCTyJsgUBopxN@XYSnc?tq5-jzc-vdjk*K8W zH86W6Z|J7+NnQ~@(kFUB{76CcyvR#TYHDEsB$isp4;v4Ltq<_Uh;J{XhF7p|CDF?F zX<JX*8@KbvTfH?Toe=d+*t#D>8J)0)FfucQG4#S#P^;Z90;p1Gn~intwRLn+yqQ}H zD24+iZeysU@LC&!=I_oAgq4QP^|t(#V$AZopD+_7<n>Gld5Ccd34=JvY*Wr8sn~#- z)@Y~|OG`fb-9k#)sA+#$NDy}088fW|Kaw(>RSB<LXni-~&Ur*U+@6s?nn5op|DjwE zoe)VaxFNEL>9JyehF^kF5r3p!qSD@VtBqz&qq;O%FsD@YzAf8y>3U;+m37OVYPr)d z8I5)6-;Oq<k+Ijg)+qXm1>S=%iJQPOaaGB$Nd6TPJE?3$>?F0nx&Qi_irflF?4jff zW<lgWwPkP~5CfH7ps@8W3(8<@g#^OaR)-IUUlIQSF*<)>{pvnY9}`9JGz-+LA9i0^ zpSxuF=J?@V2;kOE*C?mKnG1`JRT7b6eE&KAf`0pLQ0~?TqJ1{(`#K?!cZ<aop_hre z2)Fp#9NDwv<pyg7$re~mLpcygGiOUP)xL}`L3~-UcrZjyrDme+V?!cs>!t#ZAOF^o zkovaQdUz}Cj*4S<0Vjp9BRG;KCMU|`GoGw6FE%^2bh_hj=b6vPcl$n82cCMXo;P>L zcNKA!Q;xlEw>&H7$|u&l=gqAH1zmAnF4vriUW|(XCZj@gZ_}WVbuV&*fQ%mzXfB&5 zPvX@(%>CA7q77O`fJB{2h!L%T;hSV~w!-1)#rT^pRxoT7V1O#N{`H{4Rh)LB&)&QO zjouF+B)Psx?M_+_t`Eu5^&q%e9P}WChOpDRt!qGnY2B!nH?U~nfxsc#o)t$WOI;W@ zSB?s(KHeakRXlS(&X<@qZ;Ln_SgY@)Ed?f9WvT(4jt1;OEB14n32+-vN+>3CE$Z*t zbgVSh`5+}5l($!AIh9LD`zj}N)p%0&yLJ03-M}C=fJ%m`N|Ir8M8-mwafz`o(7sAQ zY2QMQt@xsK_#WM(=vdVoIqs<xw_k-$R0V(dhV&viRD&$e{<Tg8Uy*2l*hQZ)cLOIZ za*-2~sgqE^^llXciyaCEl;s+C3zW52Yx(^^tg3XE@;DHa;#FNUki%v$kgwud;Q)zb zVSPh@hBWgYYlQsTYmK6#up0JGHB0{kINiNsS2m#T24bO&oB}M2O{J?7=GT!{mAv`y z+eg2Qe?|P$?W6DcZ4#iIgGGWZTt}$8F{dk=GHQ4GmY2lcz924GQB)jLPAnocB4qtp zAx<eWGBr+VDt@hA64nz^ug*pJzH`UhGM}YNR39uo5W<nGG{xUTA?y8>$N?O_u{}-m z5>Bnr@u}GH$m-FvKqn9WxeL${{ZgwK4T;E2aj?x*hr+fRY5(o2xAq!^Eo*O=a^WU` zEBa*>o{D2KKH$eA?+7h9?+p>6{lt$WnAL{roARuJZ|kF9NwoN$d7`~^Ri4`DXn}BJ z?$R#R4R+%<FHr=90RP^J%@q6HUfudH&<{xn(EH1S?3WJ^6Of;!zEV!xALKf{I>m{b z$;5WOq#xRIlHpjxC?wU<8Qx7T7yX$<;XqiSP^r}8_x}V;#Me&v4(CeQr)F3;AtoY_ zX@6=&{_gN3DXYe=GgoFfJ`GDx|3Ls{<8m98qJ5vLf^$iZI<cg{Psm#5l=QZ|#yUTB zC8Zkx8i1us1I(rt0hq3^)u)3c#+M&l5gpf1AGwaA4o}8HTdfR5bbbLnX=6lw>>E3; z!FoDJO<MAF>#SBcnY1H4Uc7=A0S=b4vG*mpLstN?=p{^Ju73Eb>v^euuFUA#^6uy- z#>%!lLYLcwUc)%1@tQVZRiQQIR}u5crZQ`<R2w4J-z0Ap3XH1NB%>5@wa`&n@~tEu z^Ad=jPU6+wG<Lt3#)>eF-H&PP#&0P@(bupSrBC~|BdB5n*d~qfuFBZsV&GABBIh7* z*Y~p3LOw;*`b!T$X{qFe*k)G?AIwaijd`aqc;9M)vE~4Xbv_`KF4@<q@QUKH-lyG_ z5**+%X;I0oW(C@X=rYyfVwpA-54h}WNaz0EYuNgUu7MMedN1%ux`3SbKHecFqXl+y zV<Tr+%PD~LiHNOqY-nsyoyh6Sg?tCB84DDki+q~dc6xoC5Y=Y#YMt{Lq|LTE|6H(K zjTna{asoyK1&Kr_H05-P0nJ=0U|%$$#vMBin$`Iyr6Bb=3R28T+PYnHB{iHx(LQKO z$(J(CbD0vKR-1Lc_?}d7Pi#15#OW^c<lt`juw6+n41IyAd@D<KCvz*zP(U(_<>Nq@ zxGI2Sj=vt2^$ZlqIOx!_IHI%1GTe*SmumfnIboCV56aumY$U+TTeZU+J03Q~^T?9M zD;?(7tdJ~g`6c@%w;tF4#m-S~ev*&JGhP%|!H)S1GO;*U>))ODyS)k5AQ3Q>&Ma{a z%mk?n&cR;D;mi9J>586I9;CoRPpx@Sl?onP^0rp7rOU*i`I(^0lHDA<h1F$;*<nWm znft7tzc2h?dPSZ6YKJt)$=i}F?VM~)SVrTow59f<juOnW)OXBQKEVdrz6}P4b1(HD zgFEYsm{GD?xwcOA!^q+SWtFVMrOB~3TWltPeG$y-koY2BPLzdkvzb<+mr53`SXM0D zVr+P7y~tz)38mHx6J-7PhXR=>`I!9cX=SQ=!fG+wFFVT&xr4q1r<tnJ>@cXu|DlG> zp(cws9raXmUNPu(sGJxN^al^Ze~ptxOxhjjBZ@Im3#zpA<W8`D_;aa1iI2wxW&xO; z)&&PR--8_lDPR4r+^xp#r1@+qKR;9cIaQt%2-YVmDVKNkM(#+!j@dWNR%2f5kwun( zzO7k*5Q1K4SFGGz6jdK{uS3;ovKO+x{;0wTY>+wKmXAf{eCZW7fnO5^-}V+Xb*p~e zp}o^Jjj3y}X6XlM41OZ%zSwTLS0ZwXewe+hvg!A&cx{vSgtO!RDrd)yp!-9&{3HM4 zm*elc;~oA+Hiq{Jmv8Pivx4(0<>xkYhdMp3*P>6lLQYYBZlgATkJ`|;*d_SYi~acD z=U1OpPVl|@^R>PAc!Mvi5gUJon>@Hw;o<k#nv6TxncXxSp4Ik(op<z~c%vvwTB5>D z=2L)&gzqk$@Y@)J8C=s|nN_L(J)bf;VYlg07PHs@s}=fXd(aIs8~pXe+*%)8Lf*gq z#+-vlx_xKcPb*!CJ4oo%rTo81Z*>~kRD!QHFOGM)Zo8gnaD=wR*zYpll-bva9ZJ-> z@^_dq(iU~0RKN|+^<aE+S8yj;g%|cA1b_bM;MC*%sy;sd?BL#ou3-E8;fPSF*da5I z;QEXEW8F{&8@v5=g3!HY)w<(`>z>KM7ni)xWBZu`8Z|z*c(R!v(C<Ou3+pFrR+~f& zFvETs+fW(XK_k`$hA6O~k%Hnlp<yn3%9_vI1iB#W$2tU-#7vs3F{|>98&&;}2V=*V z{0*MW97aEIT`;QdIqn2P(F3@eqsVg-N|gsIGD8mA8YzvTc8uktl59QPT$s4rU2;_8 zchfZ?fhE73<Y&jp3l@97(cCI}OXnZs2{*YlEIhnA0}J`$LP7ci<pP-H=b+(7r;z%v zK^<av1SQ?(&UjZJ@2YE1dy;{FRvY=5IGCu`uTCm1g6{auX#pWWIOy>uBI$*ZhaL)b z^BmD~PsTHE9+(0&o7wj&xT9~x_1%y!xudB#Wc_26V<LS`45CJzKVwb6d?2P#W0A|4 z=f<jF%qnsS`CONAE%x;T(b?u{{POc_22hD}*H?e%#XFK73Qsc$5?CtiN8)O?87=nX zR>%d&()8y;BtBr-MW2(eip+M&^!|x*KKc+K!{;twLlNK9SaNt5kqs}kAdp(%w*o7C zjLZKiy^$Qfc5mK%-0qFAU_E*xPLA2Vx&AYH<L};^zTJA$e|fjwOe-Q=q*^(*Uavw~ zFTHv!qO2Z0jP;KcvwEGAXqC0>A36RVu10gkCIsgDN22ohbZ*Ex)vQdLd@kTtdrp9r zk!iw$Z7gyd^RRBq(qY+FMs95c;%0iuK6kgSm5xYe2i2{Y<my4LoNhfPH&$^&y7jBp zbhjQ5_BltQB|2{q<O1lDd76{85ESrE<f{<BOqp?Qw8tIFUoQ`>zk!TI<>6ApzCwn5 zt~4)m^t4=^qFNI=Yh9XY@Eq>y5zD{<T^Tqd7R!ENdya%!81r1lEI`+pgmge8di&ZZ z@sa0D(<k{p@_3=|EPmhjJ7O-f_Vd1$&$XX3`~UNm*OJw1U=7TKx5zt;ULt<a!h?w% zDSNF3xFy*c5^p?Eun0(1htDb^ob5D~-QS|m*M6FI9gLqiJ{*?uqXugcFJ}8Y$zkJL zvEEi6tS9ivMxA5mmby3q9u1f?{RvO0G3StV?S(FK)uG97&^9NvUe$%GILq5S%A9jh zG|Bvra^GvZ@=$#Vp&-)&r4nG-YK3LrFy|a9eF5|_98A9D-8>pgERZ+Kk+{}PHmU|4 zhqjR4?mZg`IOtf>PxyV3DY|gUY>;G6ZvYAsfotC8^0utw0zh-2?8`&g2>F@rw)LP1 zaVWV3H?~ys5L+mrH&v#)BDi<SKWHDnCXYD=*|ouMt&$fY7||dv9Bw`n|F-mb<>Kg# zQyuTF;oT12<;9t5S=Y05Syppr=N9Qw+6T60e@066<lE8*oHGv`7I8OksQl2%-lXck z$2~dt%94L17plF9kAOIxhQuFQzaFiXSDR;P6IHiYs$gI6^?83q1^`a)oq4(C1DKax z$&+lhMHm>Nyu!a|HKgH|(>gzXm7^Pki*e|iM^}f}&p0u}iMQZUNQJoe`r+xS&4mC2 zLhb41^X4AF$NH^3Xc8MxEP0(;{vnE=aIG_QAma>I_z8JBS=Y)a=KHPlvPLmXP=e|C zwat3{^5AFm-c6=X=2!xg>Csf(qZ&1f^?vJzzqDtuQ7^zUwE(ugFMBd&zhvgXhDY7A zyO(F?cQjPauSM;Qhvy*r$NOYiKcR-+C;Y^6na~Wi2b}pYL|f01LV|FiIPS2m(176x zG?<fQNx&_h1ZNU~gF7E*aB4$GuQA!FJ@})50F;<zTg1Ouf&5@m@&M<oiw5)e72)of zDe~VCYlql2R4eM7X>ln?3e4T=x9(WRoQOm$H{rR4nVwDdYURAoYQ3NepTyZf^eHDX z+1-wu3cQh58P*_CqdF{o8A)FVTxZ+<ml*`|ebzjd44@jT`|8$xO*Ib|WRvOZUSJ4< zA?c6KpqsKG4<@fwsfEI7|A#W=*Q)LResU69bQ1j^V?EtW_cgwb3E{zoaD(0bihukw z#YU;o9p_}m0@ZPx9}Y*GnHSVs%Iz#vZ-rIElE))@gSpgSdH?|IYl`ixdcSl|Yr^m* zH(v=^KULC+Dtw7_5Lp+eAeDYYi0jL^FW})WZtkOax0vs-_14(M!j(A3F=S*n2R^jE zfFVJHtflEOd0QT))4hyAm)s;JweTOko#WSJfQd?XJ8UaURO!;C9+XlNA|sp+oL8t9 zSk@)KmQ_-Cv~xbSWR+8ru$vJ*HCEblWXpRZXW1LDXGP|VU@S3d!-qEI$Yd3ZFRSH2 zYmu2JM_+`CouK^7B+=`vQG_g!h)H~^LnDFCk!GlvuVOP)#8;6SD&(sW-4tH|5HMeU zGvpB*f!jCxYgDWOdU#=^?7q+D*EdJH^XmXz-^gZOO73bJGsCJ_;xOxPwCBjCNS07- z-^g3vpu~?=;ajBeLsHnEF1)^7tUbalj*=K9#VdLEf>#s(4rtD)P;*X2a7)}QHtLG` z8fnbposq^O@tSm>=xhSU$>u*EzQbO3*61_j9~F;&6eWG>VSxEY^9<;GBd6MHf0R6e z<dNt^k?O7PAR9|EH}*Gnki=UHofz;_kdYAUQKsyM!_B89>UDV4YI%pK9F9niZ*>Xn zwGfK8Dcxgw0|@-TC-Ns8!W<EM;Sml*o6Mke21;J<GT$_N?SrJHlT=A19nqkW**kwm zM^G_E&sSLE^h6jYKzS{=R8QE@PEYpI6GsM3_e8TSdOs>%`-eDgt~=4!dgB3|`h+we z(espRS=a40AS^!fL?iIcmQo_gMi6@J`0zRml5P*+c0^EIaxudz_EO4=!+*v%_lzFC zxts3j4x!p9_aHpfSYi5QS^li~d$@haA6H1e#72qI3-0A&en`ra3$u4|WC=29Px*EI zjon*oDimxradBGch)Sc1>+cTNN`h=O#@G;!pD$8CKmmeUe}8=9sW6A$R&^fbHJJQ4 zGVrngn(k|_K3KP9D(5eBne{$_57H1vTi;9EQ3waT8x_~vsJOhXkFuY@R)Y?2Esyp| zOz|fR%)PLaUURnF{3JX3ulZu|O>gZh@xQrlJK5GJ<OU03L_WIWJ8-;r&3`|B^muga zn%s#6v2)``{}nwCXN`$9xv^8@M?Z-cuBphISd&L~NVMMGH5K_2Yx1LgRjLg+0YjMV z;F}Bc=3lR2vz&h8)W7sPY>}N+%ng0)FMaHrxC0T^{9@_mb>{BnZx=2<;*J$~pY+#q zs+NBhe5`+sXAGHa26~^^6?{JSIPaGy|1hD_9s4O1`bXpaV`2|y2i|AFu$oVC?nbKL z0uQg80#Lgu-;7I355#wn-l}=L9KfjecW!+AFo=G+YsDhhy5HCPVyL6Zjw5ateN>D| z{(hOAzvaeWLMkASMzt{Md#sawr1!nIWw*?Js(DOeiu<N@=uW6_h#7LNxLwy*5Xbx) z?PKKHll*>e>@~)TG@1{~Gg=}N-IBa@{4f!?3gOJ>pw9}JdoU-U(v_@AwJKK34_`2m zKHyspue@zRnn*^^6rK;yKk)*@uf;D1<5UOQ3nU?cfpVm#h&tJ>Bgkfrm^a^VE-SL` zqynXYj(S9=GR7uUS#v3S)EvyQ9r3QyysJd(j4tS%b|U!duAlDP)^?@(d!71Q{?QfO zndhF$-}M*D--x<DPnY@OH0~@{zaLb8A5(uftG_R)zn1!YT>bUjAoT~--%;|H=#>>m z#Oo<m(6;#~O|3X036{AU`*#{!apYlrHA-K#{j%QI)@DufZ7k<)e8IN0)v3y^RDW-g zzc7C@Bg^@vGZkC6EtK6&{?~2e7~*z5@-3h9_-x|S$md2rQ~A{MxtdRqPc5Gc`_snv zXg)Xdxi#y1A;0_Z8Ng>SpOg6v=QDzjgA3JsSHMb<npAwp+(4zMF40uG92K9&mkL>m z1OwSr+_6Z#X9$b%5u0$r4C@baSgTfIcw6?casUnPWNV`UjWD~yu)Z$Pal5;HvT_0G zlpsIsIZ5&BfN2(j42HC3A5kWWLc|4O(Ou@4{Ey75#OrSG4}=ZJ6$ds$>N_Cy2`)X* zd?p%8QOT7Y1)P<}Qq+~~p$|p3hD9(C+_Cg*3h~pI@T@4=mhj&h-|8+ASL-~;t&xkC zQxtF?2!mu5WQG$f?S`k{`u2%<+I^kI(=VjM(e>!p%}<X$`X@RPFgTkKCfML$C33y6 zhc3r|!QY-I*)@#I3(ctk<MJY7GU^87Hpiryy;%HaJ;ZqV0cwN>G4Je>Sww$&Fy7@^ zc&X%5TJGDULSMUflWyQ>Zd49YJen6fi;yocO+Rnz{qo8JxN>icII=r$FW8=@(U2*o z{?^jegz?QclSd{e2jtzt7p0+Ko_s4N*mX0R8Eag%FedSBuHg73e@^dZUBMVt!535o zJ>Hif8QvFynDu^|d%bC0HNF2kpG*0~_&mYq7Cw^4fPcBUdAa#^{sI+WgS}o*@T&p^ zqT)t{h^*(~Q<SVWPnX+#$jR3{4px|}1X1!If<N8y34YX0mr1tDJhR`l{14)r75e>) zNZRr~^#bj$iedKCIfF;%cc<0yExzc7k<g7~kVy@_QgRX2``HJ8c@Z!>%BuQ4z}#gl z!M>h~?ke5I!L}%p*<XbdAn4w;r@-JQYK3ViPBf4TM#M#NiXUl?$KcrI=U|-aDii9( zV#b`1=WRWoABc#>@ojl#h1=kd$0&gO0OqP{9!VXYk}Y0NmTFzd4~&QlUDm3*vuv6Z zSelJ>blg<=xpOBHT8c~M5FyNyCGXW1*vmZpDc{M;dlj9$;R<<W+vkkdiw+?R=QPRR zs`K2He30y;Od9be#iMd!=QLeQ1g}JGXo@jRYX+I2Fr;wj+I*oT$zjR{&jAYDyH7Gr zTnmS?9kZ%zdW9JP@mm;WSkxq2=Q(`S>I=BX;W1{Tti^Z|2k<o(l`UUmc-N;X-t%8) z`{L6A0gsO4_80@DE(P(8<7<3-Ux_Zj-HsD^WM>$hM$=d%&Y>TRYPL2_;Bi5QAfL(7 z7YZh#m;N}*>Z&v*!l$dX;Wn0A9;gCRkd>|g5CtIU)ySX##a%g~9|vTDK(e>x2eKXM zE&3za@sA!7>?n9ql4MExD%r5gl9R!R$Pyo>krd1%_V3&c53_J>v-sn!-V(Bj(;wz_ z2j_GM$7xh<2Y>kZ8McnSp60i;m%|<_f>k-al}%2P$+*+n`bj$lAz2hfk5cFQxI!HN z-LW%Lw{{B?oz}A(0}_ak<+2%6ki7Y8bu`W4=JU-Ra@OmP_|q$1LU~MPK4wy+JiL(j zFV~8aX%^T>`j|0KLkNhu^DYHNN`(2If{=&5=ExQ2IC4d+J=WXV6k*HTbF2z-{6G#6 zGhe`m-#&Ah0AIkm=c^9DwFG%xI%6!dEfgLE%5<p8XT_;F^jGOCWWE|)=HzrBR8RTj z^sjecw!~zip$9|O+0(QTCAyfm)nI??^ltH4&R}<{!N#_Pt#c0aSkw~+8b}Y+Z~f#J zhqGJBAmQ#DGtB20q%*!k!QUR%Rm??2kTyJ&1`&vGnaldtTTI>{C>FEoF&F#I83FL7 zs2P08^ORzHsxOLnSZucVFWn})qFOdK{An>?5L&-EuL$xdtCFZo$(};-xq82poD0sv z81IT*ad=x1`C7Mau?jxk7k`Uv9nT6oo4>>RM43CeRPs##Q4onAn7QVyqT2A7vjXNK zf2Hb-Xk{P5!lO!0S9Q8$=SrQY^j7DSWp&B(q`3Sjl43)%ik0c6KY?v;E;P&TZm@ng z;<#w)AenvQsY!6{3`G!19f_4>STZKBK`?6yzap-QMF?Bv4`-#$RarNdj;wF6Hr(vM z<!T8JhKmPA+@i`XE=;<a!$QWL10pWUiH*|UXIhyZ8H4f55mFzt)1M4z&>)vePHie~ zupVm4AkB;E38{kua*7!%W7K;1Dm2(3)%-<pC<14)NbP+kEt%2iHX87mFR~rpBxh*9 z^tss(^b)%lExq)jHQXKWX{cCZ@d45y$6rVC=_9F_SB)g6n;9#Vd?f&iQK{HX2$C@+ zP`3d>n$w=IV#l<K&!{Z2zVQI~70r;02XT6l@_*PV+#;XCuoZ6<MOxa6>ICo57hh3Z zD$OF<e4PXTe(^3BpkgH<axtH%Wrmpp^cJ}P4YmMkH38@3Oo91m6*E%KV)+E%`4)?) z1cQ`k#|cK(XR)g*>=nEEDrd#6k@ta_6x;1-PFbLq<kP~tj<jBiWY)11##Bwybo?+` zIay7gF&*BO1r&}pU`&U3WgUmm2bS5GUZhgKW-Z@==t*Y2iN<YS0QIuLo3Y~LnY8Pd zU=F`o9w?Wa)x~gxs1w+-<uG1q{{r+Eb{kYS062qcx$*=6DAWMZUq)i<Y~PZe%NQzM z6%xJ1@&kmGg@g%{-6%G)`>Ic&K#{fk%e-%EybHVeC8b@GYF|O~EgWTgfxwQKD+SQ! zx{YR!?nEn<C|1VXa<$L`IDH09M=;w?EpqVW)Z)4AIZB952V$q;1Go?xzzP>A%vWIM z2{f3K-HB`5wp|6nNV~Qnt8BF(CUcdG9+Aw#{PlRGdSUt>kQ)Ulql{}~h1?|$**mzv zJGcg)#Uh@f0524K&yJcRQV>p9QtWF!*Us;2=BMVl!q!#4wj)Zstt%*4D*^z;mb?|V zZf^tYpjQ>cLYFoTkeDF8L7L0)u9DC$Q?+Uoq*katsGfC-PZ^VChrMP+UwT`wl_|Sh z24cPb2P{V7*w!iu6Ej@KATaY8+T!3iiYn)8jzyheHN2$u9=-CLEA08OJG5|k_s$?* zs_xj@i5^jv1cH3Z1L6C=Cf#H=G>E>W{w90H7k|O_Nb@EnYo78-^R`arXM?rr#qM-g z_Fll6bt4d`rRG>)yFFrp6inUjQbHpNX=F((<03Ws=PH@8Jx?*Dmv@Wdci?9f+9`0b zhM;Ro4=Z`Ym$==nfJAASetoZSkc!H|MgA7jfL#uZ$7HWPR|v&^(eIv2fg&?6Zuz|} zKV(HX;68e#aV3W0&Ogc0UZiVAG5rH156%M<Ye0W9mlvXLDV$%K9DpDN&B-%!P<Cx~ z#Zghc4qq#{H~>HF>%3Xdq^I;i;tqVWR_C`1U@QCYWFdm2lS3r)1z%hG71K2yTTqKj zItcerQK_`wv|1Q%cX6jE`5e{us0kLTTP-8(S~kfDKCKpnM!S>6R9&vfK4d1i!+Y1e z!kE)>-X)PTn#lvr<y!6<X-<?-L{ZT#bFEnBsOUJ#H#&qV=)<FEZjGc{97a%)Oa?sq z9;u7-8w1e^V5Uh-#upcQ60YBg+giNqqXlPYt0cs<rwu@xU&t~5m2OTf5|Gi**ynl$ zjm)Ct728ZWQph^^x?d<-Q5+YklyM=ZZA?TWID8!>W+$$HWE3+ZBq=d=U4mq5kUCxw zLS^UQFt6Pp;^nA#5Q*}1UL;KuZoWQmA|)$QwZVg;(cAi=T#&F|<g9{p`i%@u`jt%l z=f+90pfp;PaJ9uZOQpqTfDXjIkeUx}+VEH!H~muep}4qKL@8d7q6$y#4Nte8Cn`<| zgGScZBKr9lSFyQ9VTd%!TF8-{f+V}6t7OBc;40BO)4xJ8{i&oZ))$_)F;>fUKuKpg z&%0q2DGX@<bcEXBOXh94M8JuqGt2#gxgD)T9>hZiWb+n8Rppy6THpRB832e0@UH$6 z5AD1yLvTkh(D%yu23He)Bco*eO~odx&U`fwG%&`5{FFOluW;TY1$FJeE=@7X^^TOM zii+V+mL6lW2*G58Lyw^usAAH)aaCl@FG2%RsHvzhRh2!2;C{xbBJxsItt^B0uK$tR z1uc`xT#JvNiOAOyW+FrBHIT2)Au|6dPLBxuMrQqJnlJL)0Y^`p`i-JHkA4XUngQ|c zem%k7#5dTC_9T;gfs1<U;P1O*b7Aou{0o1#RY*8X?1PGfv0jm-^eIdnWw*cJU3-vC zkRa_82*^C@(A&WZ*G5MQ>Xbhm#4%ZBweADd(S23w<D^d+4y5X2Kcz)sF_eu3#JUL} zz`2UtLDUXUIYQJ7k#`XHo%o!3>#r&Un;b=^7Xh|xwiFZ3rz^3l@3DS|R+hn=2Z4HY zDNoGpok9sgf}!zgvSd>w#n9Xa-70d{SQcCc35cViBxt7G$pt3RuaIycG0zRAn6w<H zb}((B2>lcXv7Qc|nCDU+0@k!Q<seY;jS{r^F6fz4VxzGJp`tI)N5yh2s*|zkj{j>8 z9oN|_qtm2)arC0s6)=Jxqe2DgRv?r3jfx_3OM9-OsEZw4EOqx1+I3`)UiMvSAQp4V zzO*?7hfiyq${6jqY}&lP4Ilr$zjoifvKqbmYYV(#-wmTF_>j1Q27(H$oubXgp9)pB zK8{3TbsWjEgM~btrO4q-mFWajvK_a&#G!<<-Q8t3P4~q=$&2;n_eg%5%-F3(=Hf#0 z>Hsz`tLoiUiiiL=Y1@hS(s9+CiDMNC$=YtOJk^QY^9#|-%*(Ttsb}^uvo_3C%zQe4 zX6`m^Xq9YZd)`)><9=BWv!*j^zo|?R;aQ2fvl5eYjhb02j?M#%M@M&K;hp3tvLT~v z$fn$o)#>dcfWwQB%F*2<kNt!<*bS40ksvujOKhnszfSczE+Iu6&NHjd$WQMlvzdeC ztSw*{c?=vEdRq^(9YsjL`8P5_;?L6ZXCZ<$As8q{rkfYx3{KF+w-VkQ2(&;yh2#i| z#H@_JUAPY0;+02T)^AXgP)LONE6r(jIG8N(o30~LmsK#^-V4zQg2QWVM+og1LB>`i zUo-IjCBI^?1k}6M^VhIfx}<NMwv+VZF?cFFrm(#)^MsV=LSSb@6sQpwTBVGircX*u zn<YoVC@`}3JGYq3v?y;ha|Uf{K>9jz-4z^b`t<c7pEZq;;Oy0O@TW3)G?@R+YEHCQ z^Rz+#$!d<niwVBy(^fOs?7<7C!}{bg0mj7vd%SvN(=tP~Gh*QoF}`o?Z6_m^_2tdE z4kUPDyPMo$>&Epq6hxnDDh*rV^yOn=>nlX&C_V-3{aqT}b#0!^^t}Q-=cfzC^`aGC zonADegy56f`wIQi%O%6{w#;TrS}hDvz)8}VsU_o>LA7R@0%Wbp#wW7Z#Gz;S*S$(w z1T^ku{j9`%wZ|&|_dV8XuS%;&tqQ}qoR{rAmbjx#ZO(|=W(v%D?y~PzsdY(I&We9g zl)O20MnQU;ahEEvTK^eV)7%5(7h9v|=E;UrTj!AMFDNdjoD9d*sqOLjK#JWbZT9(x zR8cQs5%=^VEJA$w(fY;uQHiIsMQWh7(gW@6G%j+O0l(%OskIS%Qn{qME_;xjF@XpZ zm?8qIMzg7Wgq_F>D7?j$_cB+d<H;*KGKiqE<Q*#W39XVQDy3!={l!Zj<5nTPLbJyY z8TT31v&;jNHzYMhcAJ{23~}{vmsw4dBdRM#l&f^72Bq(1E%2+4XDzT^-~V90onx=; z&-?!;`|VlW9Y15gkpf^zvB!E7%Q2&#Pr}0v>$W{?ndWOjQPK06?NZarN}g+8aW|BO zSj-!ioo3YBU{(|xH4(F7q)~GV$x@A)c}d(m(@3is{T>y54y2_Jce7jV`jPA?b%ghs z3O^KEm*{Gqv$s%cKpG@v2ZFn6+`Z$wxxdYtdWHD@<N24IFhadb`u!*KUrkijXU@NM z{eY~wKfLSzKKFSn`RAMa&mb7Xf74?EGx*7&|IOX$|M*X(|K-qUMgRNi8El6B$ND8| z$^?HT$2&->rpzXr+|8h?o`~wu7d4`)DI-;v%@Fj>fCcBZhTZ0yAQxrFg5~!Ir+LW6 z)nWbYzZFdxDo8-Ll=5a?<OSU$k1#gMrr{STL~SaHfI8eRebibkm?uWytfl0)E-Di- zPoy*vL4-@5+Jvn9_n$g+XB5cA6AwZkMzNEv8_G3(kdz+n`TWVzR6>&n-EctnMEH25 ze9<NN$kZ4ekPZJG)=@!vk`1NxMfpWXVAFlZc>Ar`^U{wS)BU)PKG*(CrXZRS4hFF} zh0Yl7O%YAMI!Uzb5{XUdyP{VL7u?hihf5pw#{R1HBc`7kZs>&@q1{5p8lcBU(A#=8 z^iL@1pMT=aM2T55l6MQ*a{zfbFKd>r?Brf5GlH-(Sp+`|t=>t_b%%e6zbE!B(h|eL zG|vK;`MU9>rJo9uf3#upsy+_AoM~6!faBb3nyDAc;Y@{s*xc!jlWcID#S%x0gl=Y_ zF;N45R)#kM5FmX^9>7?Z5S~>)#ac`s1e}Cj*egru1;CUEPC)h|*6ZURYBq>f3YhI0 zT%<Cl*=Kl@)i#{cNFqE7GKS?2XF-B7r3_Fj)rrJ9exQJd;l=CcwWJpdln=;Jg<gwY zt9~i-EdWDtzcuE^&XNVGvWSk%eb$D9{+iW!jqY0CV(ilQ-*eH+5~|)nf^msuv_@a# z?FnkUQBR$Lm!VBp%NewP1x7KEB8<G~q)%NlIm%M-$Rqjon(1xgC)$H%WZO2o)yp~n z)?P@(^z_6czYMBnldZxu6bmXj1xlj&S(?&PMw*W%kX#nbXYFL5vS6$wd{3019qZW! z#WS9!=P6`;lk7i<X>N2WvX=BIImFr1aOzYd;31XK<>FL7YFX1XFl=r5ky6(veU)I7 zE~d)cdW&o!Hu1wewM7{*awy_B&^onDO@HeOQEJu9lFg57l<sxbjtM>11DQh+9eggH z=+6G>ws$^Vp1T(^E$eVfUIw3ketE8RVo!>gwPBbThXD+2`~dHNrua@a0rSaJ4NMUM zOr~9pE6useeTQK)pPt}cPppK}+aFe2#>t|ah2q(bGVyvjlmw!1`-5rRE)F4q*zc)i zIuRBcwXUWQ*qbKQltF8FJC(6iFyS6`+*BlTWEyF$(UDj?RA0sOPmY5B2_B`onhL4` zIw_-xiojhU_Djk<%E@)oEnb<$<&Pd!7`j4Z=pv1w17K(gEU;=Xk&PSQE@?6Bo%mOf zh~;HYWhcJIg~Ka}xM<Im0E}@)?7c{To`+SR1%xf@2hKj1-u?`}Tle-G6w|%+DH15S zBM|#Vc%$#KGel_=P*qr$sn=y;PUrR6Bb?W-<aL2Y8#`f8XxBaPw%!EzMh0ejA=u`> z(!G#s9>r%*_d<$gs_`iMyIMBm3{JC`iUws@#HO)MPFE!ZI)Z{sSG5()al(MSt#TxL z<kn0jvVt!?l07GfG1==XmZhu6T0!zONflGFtMFU*bgSaGr#n>$S=GJJ(8sD90dMO} zsluOKMZlWYtqNa}Q-%0;_A(H!RN>98qR<-9t%?Mvi0Oemk*=cKK%PTk9PwpW;kS0O zmlWQ?nA~Cg4V|4-5nGtOh3r8j<n_Vn*R4eQ)q%V^9V5DWwJZZq-d4%C9T}2&=jv|n z>><)ty(9W?;q?Oz5rq+6q{2%dR6R4>p*uE^XW_f+e*Ee9PF%`0zMDG>)c<+;1#tot zoOkxW<d|I1VadyY{^!<X1;_Qod)@R{iMePietcCPwY!WU6?+-xmxCf3cw2u2<ftta zJP`}MC_0l<D7^bS3iA!H5r7d)ULd^i0O+scVONa*8H0$rjESV9b6R-zYTZI*rUj3p z<@T(GH?E(;o`>Pld;Y5L$;8W^A4Zc8T&&;jBap3lW`!_}VC<>z#<#9G!>3;=O1~s< z^n;u9OZx;6=SsdFW>SwX)&h>1mfhZ8zU#CnJNn}<=~pE?n%y4QWt)E4tMbH0)};Xo zv|4DnRNI1)hfu-&UzG}C*$lq$s{I9<{5t)jwO6$&FNtRKo<{Z32pe``u{G-8(M@-# zM*^aLV|?l6UcvGCM*&BN-m3FlY<{&Hz5R6gX*hYx1onP<RKwo?Nq&0#BAa3DU4DY5 zaw?H*YH^T+D-*gZ($g*9Qqa}A^rRUv8{y;hA%wO_O_xAkhQcaQDYheQeWJFyi(<u~ zGa+5G0imV=Ve9dSY@Fj&2Z4sIZ7+Za=!onK95$uwXv)&1#qeIRQ9}MlDSqiReg8|W z9!ob*yT8Dh6*CyPSdM0(Th<Ft!!L<>l1u=OhD^(w{`*52EwrR+%V?pOUZ|$c-do5n z4>6C@mnf9I7n0jFMiNT=wJM`D+zyP4)NVbaw8xh6$%5rDYKwV>%g;!@Py>@Q6{juS zUsZZ%qjprhxvF641)O;s`Z5P!gs>8jU|maTPNLPNj|+ny-yRTuiAKO#W}nk~f$7c= zmoiVnexIQbNKrN$(_t-VB4rX~JpV)EvJRubCN|IcGj4^g;Pc?1%o?Z!g&o#E1!D<& z!Ag2tms663c}rm;Z%Y!gWX=*FBsCqB!T+f;Jtf|jUq}J5b}H8=dv=O@ogF<b%n3~} zJCs$^;!T{y=$M*$Oikxo)Tep_hwwG2yTiI+mKvLao1gM(*!q(|2~&l>%G+{3x0;3# zpKBce!0iFAked_2*2r(GTQW6LYwQ;4bJ=4PlB=0C!~obdSTsgb98!O*uVJ-e%F86o z_6JJZQcL47ZC|7d)-_`^1YN{MFXEFL$6PnaA2Mln0CJu8<;py(p|B}rrVsP3bWc|9 z85!L(+{m#~{LyPwEKh!<3tz@?<nl_XP`QTjswf#osr`WsFxH)#J^js$TcTr*iC&;K z0-05VGVuz`b0%l4X|X_?0(G%x_r92EP!|Vp@lUKB)%hnT6i!?88NbEqJE8g7=qVGL z%NRdb4E5%A68Q`J(T7r>svNlS`!?y%==)-v5rm-xbrq?aF;^Y=U(8i^(I-K-6aSe( zx1XQPUwM8{GM^D|kXRVVMQkK!&>6N^(J$q71RCfQsvMr>^DKQki?Lbty)<Lv(35O_ z=5x}M$87oS>O&4MLzA{X&ey9xP9JX5t0aBHs1xZ)cg6;Kf`so_c8b5D1mxDuaud3- z*sXPO$umTN=XjFA0HuoObghezFD5kr2o^v>iIHPWh=rTZ4qNN)x3_9^W|K?s?6NPW z0WdmT3b*$K@#XM}x8)OlIP_`mEbATmE1N*2`j(O^h&fxcrbxNnV(i_fbHY|py1h!> zo;RyK+M<UF33^-Z;g_|-ZbFP2y=-i%hF5SJXl=SEY&}C#WgGV_=Ox|9&o0djs_y^e z?K{Aus?zsC0t5(5kN^XW5_Ql3QPF^afGtSC0s(Y_tAeOVj16T*L;=N2)HuejYx!B% zzKgE9uGm%-G++se4MoN7iE%A!MOO2F-|w7r@0}KA2KK+t<C2-V<(%()z3ONa1VP8e zLuxu!Uzt`AgdYU8Xh9GjAY7|A*5G&rTmiOWC;<`vWJ@db)y)GeYjz8%es-1No%IUy z-4*(x9YObv@bE(5d}rD460onmd3Q-jZ9pq!*`vMtrE$*we9=bS(%2bhcf00Cym$Wy zepWL$q;5&P`!es{^>R1M-<reTyZ_0%hlJFu#JeYZ?><!SW_3gJKHj^};oU>g|3C5W zLhs$(<!*X3n|}pk6}HWNOPsV6{!bu$+`iY1_3Rtf6WBM|VDppSyV**xX7`Y~JMr#o zy?0+FcT-<z=KK`r-OTi;*#q-+67LRq@18Dqqos1Y=KZ{PU%<PEh1B50yZzp~d&}Jz zjnJ;S9sW!T(F%%?Beho_jlquL875vbwC&S@HF1j1!o6zBU`>?M_{=1yxQ78=bfaZ} zTjYP~{a3s3T*2Uv`qt%tnKStLyCpJs54%I{+h*{u0#3+-#;NwXT(oA#8|4PDAdh%l zP!iC%D$g5Yppsk|c~d)U)LrN>uF+=}o_98Ut#aFXln6Gd1!#y48s1kcA}lo)MTCj- zDmDPVqV=`#6>Y%q2fPYz3<uR`SUzqUVD(2&2!v+#28PspPJ?$3=)0jqyeEag!k^8M z(9gGOM#BP$2UXZub$WY-)8q*McmJ*7zd*->Di{wca^+8j8xJbd`Z>ebiJsig25I?I zVeFX-B#5|?>)0$vT;$%u#|wEQ&hRm_3L<-;vB1rj$<ffDK}R~EM7!1=j>oKF%8Z7p zv2qK1>g;?feQ9op&5$_IF_Q5Zh`cJktSVU8->c16n1k{~*WqbZs_TmoTriwttMLkW zcIgo=MT#|A198ehtPpJ(&`9xRlRvYM@q6nbba@x*93qOUf#jgH|GswNh2bTPSk2Nw ziY+_5p9yNL9n&uMqD1g%;Q0ZFDyGGi;6u@vssaQ9)~X9*0+@=}N(~m=fc!-?O`O6S z7SX>E@9qTZ<$3w)J_G1*TMPCNJz^2z={<smDTHGY(1RdEwP!w%ed#C$KM;<1vE@#v zWmT|?)O)M&9HfvDPH6p!p!3Ce7Q;#5E7a~dW}xjwe0pmSyAHF!PI!1To#m*!gSl6v zy{5yp*R%xGFih<}5Y&K&vl5gIVY&$OVQRcu2hiZrJ$d|^`B;4nm&TrJ?O{IR4!k{x zRNX=>*H`x{n3X<%)!JZ*bS5D2u@Jp4`ZrvF6_u?kTjS8BUd?SgdR8M_&BxQjdte`` zTrcNBysOagLXXcG3qb!uy@b?R2Pa%BbZY4{t$#l~eI91`<LIw6zIpu(9{TjeYuljD z@jEB$haQa>3Lk^Dnlcgf+5=pzeSH#TdbkwBDig-i0S5pHFN|lO^x_wRGQ~Np=77pI z`<#O(SKyp*)CU=UsqsX*Fq~E_@lV_vh;7CtQsM}M8HwUcW~hg-34BRjky2p{ILbP% z@IwSlz>zuMd6?*nS6e2!4bJCAwGGbauHvlEXZFS0;(WwitzNj)dp`FH>q&J!JAi&` zS4oIH#rgPl+D7NI>s8zEd^UZt4bCTTVAkjJT-~-fABhF1L7+vKemdi{Qq#|?JG6B^ zXJ8ZCgnll%BJq4&`xgd&X8EYc8UA+E=kEDrq5timB`Gv2_|lk<>S1Tl|2Be$xcXmI zj>6IZTs{T{wgvr9qABVw5Stu;FM2HnZIe14;U+ple9>C{#hI7zC6O+z-K^k(&+Q#} z-6U*Xpk^bSkKb)#hgB9?V_7&|bj2zC-MFI7JADfK#F=G~!Udk!RxZ}M2A-MacUy5@ z_kWtpd956f#d%$HVeaQ8ku3Eih%f%U9+{MIUe8_B_IW*waDUt9^{qeoyt)Op(RuBB znfJVqUz4qVf1jbRO&{y?^6K{mDfRn;^!j~Xf6f2W>h}#(SSQ6A8wLW3pq}}u;*WwN zw)_G)O^WS;WECGn#30UbdxN$-8Y-w#_&v%#d+o7wshA`kSt+67s@S`#5LB(1;(2(> z)iF3GS2w_m$(p`3;klSCUZwsv5vLCApZe?qL^#5gxU^B&L3p&*Q$6`tphCYI+ykeI zf>>0jA>WGA7LHUSuzlQom>H(fI>i&!KOZ@o&{yg^goonaA}Y$vQSf`6`)k!oI6+w0 zi6$;`aoNv!h|`wMqnivt$9dPlv-Fx)e@t&*SK9O6m<zr3@^6`53$1<q_L42rt9B;3 zDSXs5184$<{0y{c#RpXG`JxwVUOK2Y1#P<V3%@EF>UeK7*mdjzL7ZZNuf%fT6GZgd z2~*%C1L_p)D`S3I*hX&ah3E$F@>6gATb%q$uisy7<==<y`B?vN*82U4eKdWh$;S*a zo+v6lo8(Y87sC_tEG4SgXR$+})(Ce+BuqKP66qBvq;FXFnQ%1zE1kR@l4numMV&*T z=7Z=B1HKw(5K<Q+<01B|PRgRxya3<g@W)I5fx@_laZ8K{*6!ObQjPC-S;{4a_tRps zB(~PE-HOGM{Gq4jz3evJ1xHTDG>-Q&z=6kW{VJaH8+cf;e#Zri7c$-#z!A4koxOZJ zy0W{JsQ<F`2>F?sAE&3sx3OXR4^DpH<;SV?9Xql)zW%1RNYf+vkuMhSUa18O0s}?k zjt|Yr7KJgDP@VC1djKO+MesDtngMgULAb4+A=Ay{Xu-wPusmE`B3A8!{LvL-!yZ*; zt$GCLir;mNeOTFw*bk0L?%`giqJz5^W*&Gs`5tlfkse-bF-Ulg-k{-?UA@xuUWxpx z4gX*t^uO`UeD{PQw(K7~7ao+5ih_c)EIJm*+X;SX>6S_F;8DUHQ+o%O`GCdA-oY2K zcwlk%-obyP<+~UBj=q;R-yuEx_ci{(C*BqKV?Boe8X4r}nw;F%dm5G`Ik{5H;;QI2 zCl|FW$Q1`qVV(o^1|*>{?UoLR3(k>K>1o_A9*%^IH6LQ=iYQN~P`v*kh_8zyFICgQ z6;hv{=WwG4&<YRlRW6D_A=9`_Fn6Z@WiXuSU=BsnE1(ok)s^fzbs&DM)@OZ#`>>(< zmR<1@JVmN-{Q9dC7IE>usHBI(wTJnmI@Zf4@5?n)T|%GBonx49!XABPYidXJ^<DQ| zL&4#AM7s{}vTwlWybAPNiozS*REpqmMRfsE4=Ppr{q5A#5xBr#){3&ZE60plyi2S@ zwI5fYoArnL*-P?jCm%q`=w~a7mUp2N1$5B(<y~AsI*u=L1Su&Uabw<vqzLj#WJ;9a zABfdHSYZ7uw7ijsyf3;PR;&tf;N0?0_%Q|l1*Em_4oS$7FU-Ll2Ff#H0`h?e(|<e; zW<9ozz51ee;7bGco!m=f`chWaTd<#_zxrAz87|9-DCmm~fb|8;D#1kol-3S`peaoU z?oBMQ{ak#kxLS*y0P_e+rt<%Xm#wL+Qim64sU!Iv-QZVj{x9NA_!)aDOP47>18w3h zQCfbOgTBDNJ>-Xj-%i#Svaa74-lI)@0W^v3E<ja_sFH&Ox*UxYQemM>>hmcpI4n_W z5>3iOidO-Hk>_hVhtzn`y5^rJ;0<4phG1KVG0Ot^ANY;$!tXeqK<r(J`p8(874~rM z+8q~A1wb7*QLzr&BPuS$hZLxYi;H9~jc5(j))P{3=GX=F#sZL)a_|C+rgba?6YU2{ z#K^F_uLcuCFLHj4B9E9@e4_BK@TDgCX=YLN*jrFHZYoz)q&@nTp#@4FiiM{dmMX?q zO*?m*+r)ge1A0A}B$@DFOsFnW8;Wh;mHq4_Fn0>)<jYNkzS*-Bj|@h<SUV~{2d;AI z&2Qt68vk_FG|<+~4gzG+vxfjib8xy{(JGuuS)hJY;{nK20HsZ2Z;iWK9$-~k{h08M zd=#1`lK`638*iAr5GrHnn43N~WYS`n931)N+BZ-!GxHzajDsLO^m`*0{h+LyqaQR( z9*e@2un(Pik(lBHpLCH3SqB%?0TjUV!-!-_T&XZ|qVDV<;+z?Aj)Bvf_TYAv%+Xfo zt~26Oi>iX~82m)PIi80%%VV}2IEr?4mW$MiF;j@{D8%IX<Tp%dMe_y6>jdW)>m>Z@ zN*)>x1E;n#PH6UlQX|oqp_y1yr8-mM%6YsZ_8QtV;ucJ2=*(Iz=)+^ML?Gv%@imK| z!Z)eC05LqOcSA+1K`(C!IPStaX3ebcX1XDIl)@@BjyDW&i~KLWK61M`@4>I<rjH!h zB{O|Q7o9->u?9#?+#!J84`-xNM)a{F7-AwJ@CH!C$7>_SM5AyJ@-MOq58HLECKg}a z)5IQ}05mIx=0P{OhVPC1AMz!Ht?+~-f6Um%Hy(ssKZ*MJBMb1bP4l&;Q4MiKc5@D^ z;8+;b5nZ#<M|>UFM%7d-igP3+@Wrl!<;HhK`^owmrvO5@FP*Ou#Vw82wTUH*ZH!l; z7{mGAbLhvTkGpFhZv}miUYiSjPe(RKt*&tY-_rL@P1}OL@9N|%H&^<8J%PTjl1O;w z^gR_2%Z<JlEZ7$GeXF7GNw4Nc-?KYz4Sn}Q;2I`ivayj1eZRQI(l<lfY3LiI%LJhW z>V9g!c<LT7Pg8eIR@6PG$n}m`>OK?j*=E!ojp!q{{M?NvWGugFCQyDK^>QxsJ->rK zZJHza56@~>`D8v66@c{}oF#Ru735Cgu5kQVwuM5Brpju$>^A`3uil?y6uZd&v5oBi z)`Xl-bvB+x?Ito204sxqI%e&X(#n`L8_{>O`sH?eZ+H!arPM9jqB!RI;oZo_GH;gj zKJ&MSNsdDUd21TTzZRY@zsxwE_Kl&RE-z_#GG8E-f5~R7$NQId+0JD^sp4t6R+d?I zVw_1IuL*o(-;lak;0^D(FUpA<A$1RsmL7M2fM4#2FVWKo-OH-|n8Kkd{95}hK(|Mj zP10D;t4`IlkBwdGbaqt!J7~q`#nw-!0{mWYs{j|<PGO<|%Z&QNF>(o);+dD@2zdlC z47@pjt_4a(X+Un8f|)=C4C)<Z(xz_w+WI(kUDdn2Km$Et_D5qSy!Eak*Gw*zCrPtx zq@akjWusR}_{Prtakmr=a6A>-lAvL>5w8=}cX%j{WSroFQK1Y<h(W>d$xPOlyPl4a zIvRS1u>f>FvL}nwgGfJ~>7_@vzeUE_GmU2nYJ9md7wq}GwX>DBNzquevMK<HGA$G& z+C`J-@RJRRnrc!z@LB)?(-W1`ae!d`Z83PDwh^b+bPTDU&c}m5jO9-fPJs4^noc40 zlRTdBo?ZDwIELr9)7&qWHMp^5B(DPSBVXcCCC}+cMZUl{qbD2_?v1)rDM;M|GKw#W zyn<iKTH(`So8+ddYVJx6n=R{$t#lcV=Y*!AKfBe3a6Z|3k8cC?cs@g4)aS!!UMlKN z?L9vD4}CtVyvLX}7F!DfDNt98rRxQWiaSZzE2#FvvEnrYBqvKh*>X}`k1WLs_FP$+ z%-80iw|pEw%fbJ6zro1SFXV!e(|=Eokx~Fa50g3#{EWPTT&fe^htod<|M2540C;R- zDdy$D>MM<5OcvAcCNhCB2&RI6ior?nPXOcX@ef)VvbixB4jm^2K$23gVPAa%W_Q`< z(zc4@!T-u4%Qm#k*50^rg<v!A2j}Au*uM?!2<e6^tS_g1hDOe85FmYh>2fk%3CoM| zC3+OnMORW^P8VHiV+Ur#*PoYHUoI{>P{5gh2o5uyb`Jx@9;6|LI06J@h7lq_56s}A zpD<m9>dEN5?#MJN&(iw4(%XA%AV`cKy;9B}OV7^#Jaw}G7ls+ECEZIYrT<wMOadK> z7|vwdtIo%_sSBcDSB$*Gh^9yxZREX-r%e6cDuL~ZSvW;)<k2}oL-5|}XT&!>$*K{$ z{X|GrYu*UF6thoM$R>3)B$_t+ihXtW@F<$pk};wz#(wqHF)M`yW1CMjOwt!!sxN9r zZ$qK#Fz$E-F9RfxHO^?@6j&zas}&#vwFN_(#9Cw+T#wK@EI1q=O7Y)t7>zaUrdO)| z-*B==?W&+7*#@aT05zT(NX1;SZyiNVEx5*@Tf2iTTfraccO$lRdoCCLIA~KF{1M5^ zYgPGg!YR<2C43}4M)5jgqzHhumFh0X*eZy9h#$HL2i*}-H?;}R#y8vB+yOVe88}hk zWDD^I)L=z6;_17}(;@Hi>JObOJi??Sy1vKp*HWjRI%A1nXzE$teKt4x`u>+J=!^Y5 z#Fs+)x_4%q^o4X%p|4aK`F@wadVXc;YhUUVfTgA{4DB-X^_0+8vlh$b>2SM1JIzP? z1Ff9~_~nzNPSk@TsG#Yq6!eAf=$2mQ-g}L{tOa}(m&t6KLSNltUI<Tg)V;7qUwF`H zZ%HO65s*BOaj!c_Uv~)lGK$u--dATTYDc1*CaAxds|)C>ii9QkqQXjSAZZvb8V*6j zn(Pk9u+@vg7dFQXL;5f<imH2oI(`{0po$405j&byx1};#(krAA<x`KJwR~!AIfqZJ zmid!S5LHN7Q&)9yRpJlG-k=TOAH<3%s}MP2B_;|)sURb&L<Kp%)D{D0D658>j*C)i z3&e-kY@$lX<NVZ<SOWop3fEMwd;uL=fWXv>d|CaZocJ%Z93I#oUsP*6_}Kk6PcCaG ztTGP(8O9fUt06t4UfX{78jSWmo*NM1F85{>KoVbAziQ9zAG``!u*ALU4t>?wkq#D= z`06g>b-;p<dmSSbc-r{0oR*2heRU`5FZcXW@IcB+r|Pc?j??adO*F(T9`H<2UxI<P zO=>eTMYWJN%orSMIEpWp6shC>DvzU@FieLNha;drRpyqqg$4OP3Kp2>p#pZdpY)MD zkHbn~%uqwnb4~BB8CIoE?(E{pQ#@}SVFXGLPk<m&v8(X}$dimG7|B39G1Y|NiMIS$ zYL7djB)envU1=-vzB-$PQL9U`4{QZy&>-mAybu0Ns+RJw*gH=oi`Du|4*EK)wJDFz zdomY!blrc_%Ohrc#6E=9j#Do{GCbzV|5@@p_5zR!be@MupM(UDy|5ygXU7N)LbuF~ zw?!46eLsL!>aIYx`dbeE9q1+kfrU?K2xOPPan1J{0z543kMQJgNWWRAS0=pSi$1}< zHK`p(NR_!b9gK?fR}dfpMG9wcSzNUm;(|!vtGke2AaYSjhKB$A2){L{8;~AIj6r*! zi0#AMvM-80^HKDfU%fmns-2I(C=gA|P}3KP&9c-l*bCpk13sisk+>FMVq#;trGTI4 zZS1G?8Rnp28;s>}Rv=n;Y6q2%OGn%Ws#&u|ZnDDLa8V^BkUW5mBmUw(U{`!xMKOl= zM*5it#G0mKT=Ff*yTittM;ki9qkMJJxS&bhfdiGtVY0G{+WY%f;=Y=8h($H2S?2D| zU`}RJzPj!4DEu}ZH(>Fc+~Zuor@8)RT4B;PH?@w~ceaC)4n1buEo&#hp7hxAPmPV) zdB-|_n~06BDS<el5wRPAYXYJ2nw}wb=23(teGtPL#XjEoI7pCB(#F;McrdOw*P?~% z`r$=Fs1x!d3IM#&KKx)lyvTXlJ`g;*zsv12><f41&EY|6iGF$@1(W8Zb(tYxZVf*V z8~DpCfq63hXRKecmklAl@UdJVe$BtP4Dmv>`(6%NoCFyCG0GgkQH0TVRTdtH@Blt` zKC+!28rC<dTalz=oNKlx#8R*XHQ^gMm2*<S%^VAr%tZV6_F;HCT~H(O==pXjL%5VV z&btRV$Mt>4F0XU!o#xX>CJ=IM*-AdNe0N!Moc{0H*E2JXpC4=Z^Sh7c!k>R=an1+v zwImiz6&`VJX%S2(3Hy~XxhoK6L&XW#Th;v)APKhZ$F=pH@gS4W<z#m;s2X4an78XD zQ!aX0=sB6B?ZIJibr5eV21(7udoCvjgkdk$!2I%Pd?^|itP$GahXND8&d39UY6WtK zhz+cb)`f{2q^L%Jt+_Wjh$T}`S}B|2v~=KJae5NN9mse&lS%@f6mYJ2){*war(zxK zqJ{NxS#)520)*l6@v#ga*-VtU7TFa`EY?dbQ9HOx^hIG3=yZ<hmRqCW3hWEadJ3r@ zj<D|%<p0e1I0g^zLsm{qWt!c|_DwrgRtXzlzR-b#FZ#RT<;~w%rp{(4<nXw458R6N zb_7#zStTw}P)w>|@R4ZH9*3{4K9Mm$=>hnYpA3FD7k*OS?Bc6*5sWVx5|dL}WUzdJ zZ9<E}gR#TIh^g>-`RZu#^N2zCCX+*l{F&{<1NXY^Yjz2#vv4Y!{U3nmoXETBS}g;< z6tKzl0QC`;1n6zAxs12THNK%OYuPei3tuxSD4o;oNAyJ}fOD3Qv@ZzVmmkUnx}SgP zKsU+%uiLHs0B-{!iw(~vH=aJtf@d0g{EXKh1>+9{#>1;#srFn7EL#s#9dPT;pM23< z0Y`vF-K8{9GR$L%GG2DloBuT+e=c4uxIUZjd4H<BmMf8W9p<p(<Ml6C-zac{0#t4_ zsRxn7ZWo}#s5_}4^5(EVg=`=NY#;^LgY(GK=`%d?G>7<%J)fZu=5js<f3c<W>3{|l z-t&1BTAxN=IiI`q$N2NP;(Ql83FngsgrLg1<@33;llOea>i48LpXaC81-a+b!?OT; zK9^#vIK*tv=h2Yod}MxWwi@OUhJxzR*awgUmSP$4ot)a3ukn}9+BhMjVHT=oklBC@ z&4AN@pHNdYS2>O()y{#?RHFL#n0<hC$dMgDji-_-&(X*hvO><-C|7`n)b!8wfzc#N zf!chE;eK(P4o~byJB7mJKzumHu4p)yaJpUsS1ijI=uq2_huhQa25Li{Wb-TtE@5=i zPCm65>2ahHBO*&&ewWjEO)=;7?gP1;*AJhxabD73imp0yR`URvgMjA*0=_DY%;I@f zIxwgtunyE81yK9Tc?o1tA9ZHZkueoa-TtXy`jRxq1#XmhRHx%MIjV!PpohU2odwBp zJ$slON{Zt;SpNdFv&RKL6#ImgrAvA~VR{@rx%z2>yiZ>rRb}+k(f7OOlXHF4_>bkd zjI2&da7fwzV4`@bndY3LC`$J~;9(;7gJ4XR@fUeDq;3+b%)^xu&FKcLi1lU95ueE< zE%l~8#AT9-(-<;&<b47GK!3Q`PX~pdP?~|^ChbGjU0F>1#ng{v%V_M0>!5M?>fqUI zhgm)B0agJ7D6WtVjy3X=7WjtPlCdbJCI(DIE-V}%)R_N#C@+khLP*rE_#-Y!7Lb!v z$J$ZdBF~_QNC+y5y8Z&Z$O!KH@JKL+`_=bY54Lc-71z2P3%b8fB$Satj_!z@3uG*o z#NN<lUkE;d7$kWSUW$uN2+EJ=+U%xl^wU#CH?bj{QJSXQPgTaT6l?FM&A&;HuN4Mg z>+ea%*R1=wUHf4s_{#MB0$VOK^<W2IZFdY;BVtafRa;ZytDmS$eEmvDo%kxzk<G-J z4Dt0~!%;83I~~3jw1Ka8eBk0MHRQ-*XpZcAx*t$5JYF_eW^t9ACk9iuoGIHtgClUw zcS5j{6C29Yqv(sykfMVw!p11J9wqgLA5l{Qa^UCviTG&}T~py_aqJy0eg=r6z|SvR zbcoc8pFd!CczV|OIbd>1{B-$g#`gXsb2`m`v8OW`WMLRe!xHbD1+hh(7EdsS0*0sj zzQLg744N<j&RKBXvUmnfBA6+$^(`Ce7Gqio6DB0`Hy%f{>>xSDJvF<EtrfFtGpyzy zWQi|&GmwofWTP~;JZVsH4DcyfZVVZGo56ADO2Ais3>m@z&hU0Ek0D84cu)UDI9Fi1 zj_?)7HUjE52<L*4wzE3reL07I_{J2k;4iPCj*rDo&loJZe^i|7((W>4Gns{lc}~dk z5BGc$<X!rFhl36Om~^K-pX~A-X20j0O_uo%ec?H7Blk7Ke21N$vre5eDB~y@C8^!b zcVOe|kU9#aES7~Yx`NCF@&%z+VhRn0W%!CAvNHFooAgyXy({6XVqQi42RG6`BQ$(2 zK721MB76c{-8yYIiqsH^oH`*<BUnJGem30*;y+||9uXX+o?GWqt<j7bLr|juSHAN` zd~kV#QzpV-Fa#`}?y6eva6!3MZduIq#HCmyP5%)0b+q#vMeyP4?Vd0_1O7_@$f#t& z$Zq&z2fe2&xN5hnoGcm(AJvS9wdpzkV3G$nz54Q2;OG6f<%XZny^||`F4%8d;OBEI zwuGM#34T5SYKX_rUoJ_;&uiSP41O+s+n%L^pO@23Mj1o=oGQF82|q7|;REH$hV0Yh z=T5Js#?Ko8*G%zK@9>=iy!hD<yL0jLDd#uh=d!o#o&-N<f&}95bFpxaaL)KSt|AS7 zy8gk8<=ZSH-@4o)_z7VF&Y!XUy~|sIouUgQ#v83OTl)twBehBW1IPrR*L?(tXjYdG z#aHh3daA1*6qGt?e+%$pT+$ws3n%0=*^DH96B;;!`Svrcg%4vZBN%lit&*-~tSArt z`k-WoM^>v4=1ESRi3(rcW^x|>D6k#KyNwVtdRXnM;)KT>*dAf3&g#84<Vfj4xJK4n ztg5j0bh-&tes?Jze^%|ma&lJQrPY_y%e!05c^!3gZv5oTH?rU-arsBP?b{|lNtb^_ z6}iaGKXUm=qeg<H{397<piUm=@DtOm{a&ayR=>Uw_fjsD+p94CuStzqXBY>gS_+-F zb!JjwB!tiT!VbgxYgXatpb!XbjX@(Rs7`#@Wfs~*8l>g{U^wP9S$d{-RBFe|b>)Um z?Rlr|H=6#ui}JLG`Q#hj^IqWSpQeST*axQI-_H3my64i@^?6sg`J8TtQFIML7fzXt zsT&GOK4%5<IoGO@qvFonO~5lPha{tdsk`Wm=@~M|^EO3$FXJgaso$W3kFRb&L~exW z7qDm#Nlhl-?4Ka^s<NNe0+6(kAmgZ^tW^;-yT#Lr$)}kTQ2jVBRg>Kdi{!$8;s4vI zz6)G=BOQplRjFOvOPh%@qpMV*{)$)$^zhZ8p*i2RX)SPvA&ck={l$GqU6kxXWZU@a z{;I!RiJQ3^7Kxf7Ww;1q3s@piD2jWj+7nIB(1Dm>P=EQfyL3gutnKij*nDw4I1;sc zsQJv|nZV3ssCqKovwlJ`J_YJ0FxLnX6Q=K!Hg;lf=lYoi^%F|D9AETj>{h+^nigNp z_+V2cJ?)hM;6kMQpm9?3=mldVpGk^Wl_~-W8xYsw#%ck*`eU^7t>~a@)ql}N1nV#1 zR*&I@8t`wq7qW;YwpIiF)`$yu>XtPC`~&W#9Be_r|5<;9=jx5rvHbxce}0pdmdGa4 zU@qO{z#ctX-_u`K2><a#i=e$xTV2a0acoTh=mTEr@j46l;cDn7F5DLajDWNU?l=XV z7%t#PPIe0LH?kWE;Ep@7T+_LHy(fvqmJF00H?6QrJ&8C7+h6%{&^;xOXj)4bb1=Z| zp=*VS>?bX-%-2Rx$uWUCp!AGhz_9@fFg9QqRiL%%M|S68`>T$)DsAtpJ<!nIaqY?< zmfz$cU;bqH&8BNzev?iAlAf<-Az%D7NNxUjBfO$**i!+qdTG3hP<I+A$>F>5W$6u8 zUyW*hgCIHi4amyyn~T9jLaNJ12kAe<K{H$NXC${7>JX-Ye4m{qx-2doX-f|O^K1Gl z;T@8$h7881-8=uxhe0yk?|ucjB@;QW*I&WK2iHmDOvt3@%Q$9gx+mhpT&xI!=5PwA zH|$srh$Z?*g6iE1aVe^iIh5mr7hExAY_30JQ|g6RG*h?~A5z&|^tZBH8Zo{vt2G$5 zv&#&hg(bYXlZkN8;TFDtQY7$z4F*s9JNhH}nrwi9i<K`4?V=JyG8FE@)9~k|+=9g4 zo%U0D6GhwvNp`Iy67n(hVAO>`(k2V_O#4z_^gn=`S?1C1x9^+Nn&^JD247(@eXx42 zj$DgvQ5Y@QSzpCB`ReZAmpHEO?yZcpaj(A(w|hMwPx^X|ITr$DEw1Jx9|lb(D-W_U zc(3kX<(x^RzyQCw2DfnRfv+KizmRbGwTFS&ib67wkXnd1M)PiRy#dOB_+Wr?j9r~C zN^i6Q$^`pum<8?rVsmyi+|Ll_x1)J>1N2Ad>?Yub&e$Zr;Mp<tM&S}}^QGVQHdCG7 z5f|9=t8DIy%Se(qz;J&J-z#t{o^&~Sv=OV@9(HohzAo3Y{K~aoGWP$R4qRshe$tiN ze#tI=c*5#L`z0<zO-~g4qZ;;`)MZlrUsQdcFp$-ITa2l}o}Ub2&vaKD8+x*Mshu76 z*<QRR4|h$d$p`MJYc@bGnPiz>kV{4A95E|Tpce(>YNxhaqe&QyKQ##-BRUkAnJ>CC zuHmgQU${rZfvuiat{fKA+02SbA1GnfDM8oc3d`y<w)=)Qdf^5~4y+yca+*0p1peoc zdTFk}3_Gte@VY@@!Nk59A@x`MY*WZ4c_H@5FblE0bz04Viw!B-NcBf}H6G%p`v`9} zq=uKb^aUzPWDTe{*?5;QVeMCqoR5K=LTYcm*u+={=`(44*Ethk^gLWuKd`X^QV_Et zPT(g5c+!RI{xMSHu*F|*y&gQe1#vxD($DinDw!NaU4uP{$q-t6fb}!CG0)fN`8U4c zmAm3&c2OA)W;79;IhK!vj~RW6kT?d7Rn&dcH*8`l>3?BwZAJh$3p{yPkUVC>G<t5p zU<Ve)OJQBbH5gJ+T6Nrvx(~7dU!4>LidQpVw0`CR%|LXGsU*1gW<Bywox7){rlGZC z+J|?=*xI#NA$t*Hf;+LQN!>G4I8^=L@lmf5Pr!p<`TOcl05Y3r?a|h=Ohv$-%(F(3 z&SYqZ=UIK-XMM7VT^IJ&J{&}9-lAZstm*??g;f=rC!u+Pd6HgIJkoG59k#=X%6$cN zaKLv9@6onbA`%4d<8|;#H1`C%B|5<!p$=au-?O2(*hW7AP4V>?T|^HDlk!D5kP2V* z0w_Q%leF9lqE5}u*s$JEMqYM!)&~X`5KYAB6YyuXs>mwMjIb5kyap8K_;3^UL}Ze{ z!WQ>+%P#J|>ab9|ugLSxzNC8NWW9;Y2k3l6Y*#E2&K$+wI{zC-Lk$A<l&@}_{_+z{ zqcL9=`|3*cm)&uQ1j_!{hgMB6Hk{ML&6EWT3s&uoZT>fIvZEbKy*{KdZJ$=-&R7<U zL^k8R5*wT809pri^>ZS0i`fSrvo^HAJbVY6#E3y?`l}&dJDY>``GEcsttjl~P;GUc z{&LvvdUMBP*?My&dUN<k2Jd21EJZwk|Ea5=(P|2M=(%c2FWd?>rJJvz70;~cR-Ip+ zZdBho2{8DZU&DnSzt&&(c7-`C5X%p9us<$=)=r_c@Dj@lvy10kwZh8>)Avu5`c?Y3 z{MP=c*o}Zp-^;|<AF1l=3SIl-s+%n5djx6%*_^gNOp_wiuih={L;VoLSbS0Xw?gWM z<3wTtn?-@W0AEs(n{BTP(_onXtfR9XkB`GO?}<(^h>hxM4~dIv%F|cxzv?KbHe;JJ zd)2i77V(e+$5I&#!d~HdfQtS#aKtRVX|P#(coFi$XJMDnXfTj4e3}vU%bW|2hP?#* zv=a9)?&u2V*Kydw(tpX0uxClDJs#WTiXvu5)AKw%Z0&}IHRCFweTb9-u^<q|x69kp zKHr%gc*`+dBirZNdf#sDHA?|#tYgzN&N`^{zlRIB4l)B!6*7F?R=UnIRP+@Gt}Zp* zqp7Kfui<L^Rnw!oI4w0r5eN_^Ls%9qp~bkxfO&3-1@i=gZHDua+WH|_uJCJi+1lMK z_5izB&&(ECY*q6n&})LWzCEtS&F!wtL|cDp4=;gl1%2;j==;WKZuI@|(^=5BbPKig zJr`1^4f?kJg~a;w1poE-j(_23P2VP7>-rZoec!*UIXz$W|47O(@ve8jq7{evXo8oT zcFyG)hwT;NQ*bgTJ>{U}G5DzYQ}|#hHus>TbzcutKdo`l(USQ;p_Qm*fEkgQy&=+) zIa9O|i`A=d8Dw!U%$2|Ie4G<f-yZE!e8^DzQ_cnBL+V4Iqow!}+}175uPmav;z?&) zeerP~_RPiAfY4&o^O^_ZUy=hzyHH4bD!wqwI>J847hP_EdZ7E&-I|ggnvqEDJGj>v zYVYQ*fz<vrF5nuzumqG6yw|UG!0S@`ZMX%p6Vx8VUu{zR_2WS8$H?_@X7fCJg+(m5 zA`?P95G~vt`RdxsS;zbOEfxC9GTvAAgxBtq<Q_*IBzs}h%@gnY@v6+?eRqgRJR1b6 z{Y}a7z6XF7Al_{i?;Fq$AcwA|H8pS8(8T+`dR&my8}FNoy+cZ+%teAFpEBNe&0t}h zmS4K(m9c;04bUw0p_9+o=arp*qxSK{^Ky+slP9(VQ17rE1-dCFy$B`J)N|)xOQ}a> zL-lvV4hL&!53ScYO(p5ANpU_fv=}i%6sZ&(;O3p2tKQ;Q=u32o`_=RO3cZOU?pJJ5 zjD@`cHAPEqmN2kK(Ny;u<iGHmJ+T6uOIX`Dew$nd#mA5Tiq#npYqCYp4!1CMAJA-9 z6sC5qJ}j+t{sI9Dsy2S8Hro3zP8|<`;$_2Au~Fj;>qD5KCvuZI^4d%&`i$MYqBYKc z@AW6d`4ZCSQ?54nGJ3I#FE;-->wd@MA2Y%>^}O{q`yKx}KyYg7`yH3k?u$GRcz!<H z4K)3Q_y7m*fnW><|0F2aq*|$w!Z`#1B3=n5MJ~eKor?ueW;1rwgxC=g1kPx-xeltE zz?;QW7wKe@g3m5uiwg`#!F53<J&ARw9)8ZjCW91*tHS{%AjS9;NWq0*0pK-goh;>T z2|bfvpM!TmH;r`C*MN;U>AW5T>ySZSB(eO&YhPvIZ#v!JNbmD3j__veAanoUqYhs| zer!_ll86GN^LK;KL-Z%uS%u+J9Kzm?W9S0{7w%_3sGz=s&ay?aE$j2?YDz2)tDXqg zc}QKogLB+wq7+Ac;T|mC>D|L@I3_a+7Hq_itc8rsB_rD2-XETU)#N?maQR6!1z;fR zKQB1WK;)a?vGr`*gkB2tSV_zp#EnU$e*ypiumR!^G3V|!`C@W*hcqX70b0ikk$e8n zo+so(wjIuXCLPfKy->~)YdQpj7_HxM%lQGbAJ!zEQGNhxQ47W(KVWwRC;R$^!2OQH zkl^ujN6={k1)QCUDI1a`uyhnt{UUGB8?qKxt2d69!$a$V@W0@I3qP;gKO%r7+bF=S z%yy(fN5w$fG+;+^<FwM9<6&yy3HmVboR#T(*E0=mY+9gcV;1tEz&~Zmk|!VCGvBq1 z`QmwhH^BAGcXcy=0hWfU{MZj55=lu%4{86HDV!~{Rz2Cr;hr`v-5tM6+;*X>r<1s& zpWIII(%~fXA|7|juAm5pC+6bAAN_?9j@N^niajZk0rklWx&kTU1JaR+adPQoy%U=< zorwM5sN`^xW>VqGfYWt}w~4=ZRz4^>vL3J94JQd$GV#G*@5d;Vls%eeqf>kC^_Z6# zY8Z32<!o4P#$4^l2OX}K#L{#<X1U(OKo}<IZirDYK1=jXsxMF*`|E(;oUc6`{1SAH zw<K@zGi^R;dij2v!Ox>2?hdVd_u!{zzG)lydEzpSpK0bFS@}*k88MWty#p+q;5-9= zQ4)s66;2d5)#zh+t1kPM$Z<mGpcp?FihQSPhz~60KHC_U$M-e-UP9!<`vQ&WW`@8F zvo5bpcu;sOb-$`S?e~Olmwrz=K8C3~;o7DS=Qiv<Qr(JO;}wUc5ZB`4BiGks$z*<S zVof?;JN9y;*b$j=alEhJbLiLXAcwxi^G=`t#o;NU|IfGlov|Uy-`j`_;mmCP!Q#J~ zW0oAS#MsbGsXq{?O8o(R-wh$2S%3@)M=o^;dtuvyws(%asMVLin{iJAf`Gh*!J?Ux z)(K7(NI33b%!g+ew-vHXkNu}=?8jRIs_HBYk%@qa_SjSHgPb<t!F&8VHBQ8cRE#<G z876Kv`vHLsx2bEs$eyTt^wZ-p@exDnP@wG26}PQRiqwx9VKKWL_{6l-m0e|8Kp*Ip zXfIZ&%7GbBE9nA$t%aT<4iv)zF*2Y->|Fv25Mq~y!dQE(7Ug5@F+PAUiKBWG){*Ub zHLJ%wb{iU4RZ9Qd+EMKz9b+@{TlxY2r!ldD{Rc~9tJUVGg^df#cjl+>rtZRKvC<t` zB$A}G1gI`0Y}JFxtNSPNFSi~$WADQf!@X{vr@2>l*~X9Em&l)8VH)2rcP~U#0mM8Y ztZ4P<m)i}HjO&-HBLFDP^axheL*Ph-y>tPiDQKo0DmF0b91gN|c<LX8!i5UNFs*AK z4rp;uAljfS5nkw}pA|V(Uw|%!=r7dUd|73_d<kC;7+}6U$b9)2zMK#+U+!+cyd7VD zA2eSwjfWj}WBBsxJ<OLBK2_DSd!!JlH@gV;j5T6m$y(FTetV*pKe_p-n0p3}K%29J zDY#4@zJAQObYDE(66AC}j?&U$!vb%a6g$SYbI1@QFN+N+zI{(;s_n(Ks|srOYlnvZ z9Y79_?uUn9_Ip^^OHm6uc~N<KSNIh2cR@?V)J&;7E$;5}sYd-e&lGY;c`AWQqm`#( zybt6P5H0n}m>r!-HK+&((#2T>9=-xWxY%kS6Pwx6Hs#pN#WFVYg)V4YCnGa44z7f2 z1qC0CdoDxt7Ib%T(uj9Hrc#~uPY5X_4{~;9cb(+PzJ1iV{sWlMvSFE%&GU5eRj)qC z)sszC<VQZi+m@h28S6p_6`fnwDxZG&>NGF^?lHXl7!-|~1?V0wZ{d(s#Jrq71+C@B zjqt=<+0K`5Ztts`12-++Hgz4qLrwEf_;78Z?0b!QwbeBBt{3pdcGp;e9|nL<H&y?= zTko31<|$Gp^?rl6Cs6PA)y<`Y_zVE3N|pJny1>`>me>2D6Sy>3{TPKA#8Lp8;i}7W zH$(J_#tC`L8>Ulq6gGCkgWBnoP$cH+HjFdj-7n_BG#`yenb-5x5*1?#Qk7cX!@hbf zUVRf5!gFJjuEbYg{<!mMUldD3Y(4LGHLb82eU)^|@hn7wuEL$w^W@RT#yxs}^JsA! zC+w=s`)Fpo;L(5Qqv17cZ7YZLD|BkN+Nm4Ag?^f?J^BS!Onv2v8p{l_vqxXQQ|l^Q zwnsTTmt2`;kZ6WLt%D3;FF=10_?{=!lbE_5H0()}kBq@XZbm{LJB_E}$Vxm7qe_6% zL=JrA2Wkg}+TZEup?0al`w-}AtTFU9S};~43Y!Ls=cmY<P_tICQ!^<=_f6H;(rHyt z?~lBWxA~vE^74U&RnnylFBX2HuI@%GV@4TM^gnB|k6`)>?=>93rsxY}fVHI?@fafM zQD8B337+vCKH+h5WAnTOQmWKHfThTkVpHvX8p|z#1R6W^0f97@gAIaC%9%P{tb1w) z>*u4pw$KSu8}O?dj>9Asyudq5!n8L_9qbjHG6;36e#gk?)tZpbkS$6FI4p0fUf$}& z<xTP|@6TAC5YREea;&GQen%Re*BbKK(Rm;#vz<K97oE>*6ZZV$qt2dv(fx1%9xUY3 zf#kCzv_MQBPSK|3Z#})#<I+!B|807GAM>__eiqJk=_ez7-w4sGZqxL$rT*Qp?Vtc@ z&jZu2sf3Dc$F_%KJH^pYoLy&pbTH^>BfwQR1OEh=Jr$o3Mzbym`a!>K=m$h#1c!(W zj{+Hhs)aQ@LaJ6PDEyjHQe1o{8h$_#rPmMw%onZGUmwy{u=I3?m!3^F9#jWCf)j&% z$L?bs#E8bI^wgO)sc4KUZBiR6%wP$B{VX$b0&7CcTn3uj`J$`wL0t^U@r_U6Ln_ly zk|B_=DYP6{``n~%#;J+aTUg^m|Kog1U`!3Y%`1*EpHp~K_%2;OB6Biu48vqM;fI~w z_@bw1WKP(M?)X}wr)A)+*hHXtu)Y+FOKXXC@p(|x>U*yLIAaYSoxKD<-#sxG4gQD! zORvGhtfF<a8IX|40F2wyrg{j(2WIXBr#$Kp?m(U-EhGkvApjC^kXRIu85B1`CDhFJ zCBTg6r`6}UUN1bm?}7Rzo^S)NM1M})$~Aeg@#)TjjjLkk7@jHE7*PLs$l)Kzhvz<I z5JCLtfuhC^5GdfFdHkpTJmH!2DhE{FEkwbTAx3EMv?49@5iaMCGfO?TTA;h<up!pB z!Fe|ypUZi7xH<dtezyHKIPc$hb|PH2aNg}ZCZ6}RJeBzKegzldT$0Xv)v~QS?;?O_ zTby@kx76pILp<SQ?4J7DrsMQ^XE!mW*NytTp(;ZK0jG=~xowB06soS^=fW_Ls~yuP z5{Q-OAx^OLoV;P}rx$7)i1!~B`?Y0IbtR@BwazbYogZkO?{A%7q>FZ|)UFZ=4%9Y| zE!&{h;LQMKe;K;s?FvXTY-8ri_vpv&(8pH5Yt5`&;PvUBGlbWB5Gm>46%m`!g;#MJ zc>O$(sBYkO;|;mN>$!Xnyj=MK&sJvhN2eS4apO#Z7mh4@f9A651!_<|7&B_ypGiGu zY-}S$EQNtHCHqh4&<UZ^W}7PH#_$%AE%CYyZG$3_D|eF5&>Kxjf46Y1aE10pdy?>& zqE)K;+)t+*^_BqBf5V&?TgWc0qrur#K2QN)az!a3KDfsTD&Pt~#3Y8rrtGXT5S`;) zQ%?S}{NKgzgm_qbee^TK51NnB_|14&s)&j$hm4<(*5Nt_zYQ~RJ$5jns>dU!TLtSa zpq^-zq1*Kfpd&_(uTnQc>eH73XyAoY#p3$uH?;c~{|c_z7Y-Yg+}3QT{sp|IBOwp& z6PX|a#|c8TkK^6AbpZW)@g<kAIg0Qi6jXMLy_oD5`><mo04@B|;(L0Jb)~`g`;XS} zWB!hf*A%skvW|RDyrxL})Z({xykthX|Hm~3@zdpFBqREnzik6VmvaiK-hY_E=;4!r z?T_OV;5z}>UbZd?*$3a#7P1exb{ir4-g!JL&-rBQuV7s{<y{vPzC!PV6v_s_cey$d zzun?`3cC-9zw}BJ!}9#%S2>ClBW-}N^e%}8D}i#Sx|K|;DDo!mrZ!5}f#uB+YWVUO z4>e4~6}t*gLojRst1kmO8Wz;iuws>er|WL>P{~!;0jb2A=dN}wg7arMFH%#<^6gwI zvG50fG5tR?wkLiv{H1<|hJSVufxld-34%Nm|KV8}mN$<68sz%`^Tk!djii`oDVOPa zmIXf;#Lj%4rQA&)`)mKPM3M76%hTGspp4_!Y2(A``Sp5(&!ekcev^t{+v?MJem(sP zjn6bkQnY)7%K#h(;>S1+M4WQaLbsm{YMaNV@))$y@-Zl~bRR5TW4JF${T)Lx;WALO zFtx>4WK1W-ycpm)Tm+_98GP(|1Q?bP6lUj(-hu0!SzUVg8$2Dc88W}euw2b$-@G|_ zzTD)?1qc{pd6*t!`N18ISsoq@Y%=LU*1Moha%8{IwSajm2vTz<Rbxc~He{U)u<mvR za6xLlQaBfA-OY3pzvuwLv$Q?mEmc0)zOCIoLSECK8;{Fa8<X;9aKCOx=7KGQ8rr}X z>E`<BW*SbBos6;V=1YXsa&$u%@=TjC5&FaKG3Wh#jRPQeA9_SC`#bouHuk5(hjdb~ z<9Szb5a^Qw%-Q1b%$x`}Y)tdr?fcm|vcYMp*!=^e+^=SJ`Wc`l!T0bJR6T(>|He9q zI1*lrkK1auz^s|El}E=uKX#?Z2jKtRLeG_tIrt+{dnXWVo+c2)GP0}3Y9A9A8eKho zJ(l)I(x0z=k^%T6nS4;pd=vU4@B3aLoIGk8Qq%Y(1KKBPa!rbpeUg&v8ChA=CAK+) zXZuwLlujDnV$um`W52kOwT*Bi;v6xU21{aZ`@+b4yem-CH6&}~{VRX8XT@~FyYVyt z=s@cK2*$_N7!Fex-wXi^S0x7I*y@Z&fS$?+2$6@~jSneU1G7ir*cWz?oI%RI75h1h zI2Mbz0FS{vTz%wl;?qFqXSM`wuh)1>>NS3Ple0!WDFLr7gfG3h(s&r#NNl|KHwWQz zrq@@oc+%^6mATOCb(ge3ufmVYak_vEb6t;Q_HYL)_`~doFo&Q6$sxbV^wO_I?9`UB zIC&Js>X>>V$iB&W6kv4eoN^a$N`O!8*J<sE^z!{QBj1mjk_&|9U+h2#-9cla8DU?; zL2L%=M!4Zq#Ux<}IU4kxf$4=N0bu{M9hcwLr-u8~^OFsmFyVplNU%NpfVau*jqLB; z&WPZYHqL7oIZF)Zwfb64vgtN{#aIAVhNg}<Kh9Gc{|)O)!c4b8PIskxQ^LP_bR(~C z>85jS{5qwDB#TH^5l_84SP3Z`l+R2bNmRsV$@5u`>Y;Y61;ZRqtB0k&@QXRYoblV{ zC*FK`E~occoeP>I?M&l077uxwGC%R&w?!7G%TH84JLu`yQ#t6L`x<%i#9;;zvXmFE zM`e#&k{3w#DT2mdg#AL}AFnn3-k7!`Dn+<E*`@0+0ZyX>F8k`TB9PiEbK7KcE%VwA zZ%HFstUQ5sCc!fC`%tXV^+1=9n=2B;!x1h<wOnkI`kO3-AxyTgT=ET=2wp3GqFMN2 z@wXx;_SHOC%C)B;d68L*rRw(UZ3Zrjk96HhvHA*N!N*j(Bexn`4>D`M4Zy%c@h7Q- z>*R(paw#!|ku`n!&KfB-`hP1P?rHdQBYvPfg4nPH<sR$4RJC5`U0^o~%Ox|yMQClH z#>*;wb&uj!y{r~yY*QK*))!(<E=PYCf>Nt_Vrs<aB0Vws+osWah;7D?$@r-C7x;@x zz`CF?XXtZ$1uvsi8FYxn$?SVLkG{~s%PsbB4l$5L+@Ta<JWHA`j|pi-W}^~p^ST~A zMmKK3om%|}@Fd~5bUctQy3vbR7<sX#A9axuC?}<AB$83I-grK+El|@xq=L>@EFkTK zVrJk_lEX$ygwY0KpKBoe5%Fh=gBeV65yGTcggOPgCr+G=&sIlqZ9Lg6S6Yl!1(EtN zbF4-_Ntt^ai&Qs(#EhbKGq4n^QEs4D3f?cl*JRG~a3yf2gv=Qj{A=Va?&MGQesqFG zd>Z@0PA0~=o_G@|NLOdi%Tsf&cDG}?TCk0sx^1c63ri8~UOZhbXnWb!>sW8llefXW zG=1glg(fT3vj~rpXj2r8^JEtfxYum2uldyp1N)+_X0K6w70=gK_Z7dyR?l#6eMf^z z^Ct{*r4lv~9atE3jP)gIpu|R_S5S3+p@-3JBHi(&Z9>(u8)z<Awx({~k{z(O0^h&` z+9BM+mW>DG)sMd-|G+UXE&7Jf?0~ekzC1zo^a>0geXVQ_lj`c$xm9z!j>Z`GB?0Da zm`C7^m*NRci@s&b8=nF!XdQ`H4#Qb6IgDJ5{%?IQXXV9SYn~1EAUKWXpuLW-ZV|p9 zWW&u4WEsK%WZC0LLskl1fFG6m8V$3L4a~;4HzFm5H}(S*iLpD86~)0UATX2cJ@v-Q z)G*rx8z>c+^&`x-1h31Ub>LN+J-kW*FHm#rH9(22Ncf+j$>x22NAMXPh|&#6+WT8_ zNv)6MG|%O509gE=2j`-Z?6TO=NMe(zOri}{DrK_B+mUKST19dNkF$Lx70HE=5Sp8f z00Y7|ac-M7Mgm>A$XODCDU^Iglb`~wm{f0tj8!NLWxg0mCH4-u$<Dx<AHEQUk^)O+ zY1K+}IIkfz1L|aG29Jr)LNd57_8Sx}N#>4!x<`av_wP7;F(-ZhA#*+_m*;XmwdXm& z$XeeoH^<bwloXYBVeA5kQIP`D(Nm6zEJ!sSWRGe;iZ0PUSOAc@&j0?o&N9Qj0bHYt z<1Z)Q!3=ZqtK;60bPOm*ks-Jc>OD_|`Cc#L0MBZ6ex=Dw<$ncE7`h-AB*oKrunw@R zRy}a+SL3eBUKZ`=VjR2J5o3{~W6eITfdy1GK#9w<bHZHHA{gMI&urrpKWLIrCm(2m zoLxTU(uD$AWIRHsp=%muPq-n9#Qwi=^?f5h5<MlG`o7vxyF}i0iu*45)F#e^pX1A4 zP(hqCU`W*`^WwfKU%85)iECPTmP)(<`d}&b!Hm70ogs?J^LiiP!Ze#4yWP*xFxBzr z^gb=9;<_0EFpw%>5XMI_bhQ$C4QY71`JsR~*{4Nw1A<uFAH_Pyu7p}iay^ZX5HZj0 zXN~*ADE6cgAG~LH5L`rfmOr*p^+s1P%~K;dfgqei{6YQkvHf}`p7Iec!WmWIRl}s! z2;5jEh6K5Uc45#IPp#K(B6N|muB>~Z8LIIB4Bvi}M@{soR$8qpghUP0j}oJ##G_i_ z-NW?`O7Q-p=-E2aS=k}@^&~tM3&#G!W2h-k(7)oTk)d>S?c-d{Vb6Zq2RiyuX@WX} z{ggECjt^!P^`m@sv-n$+dPZ49MUOD@TfDj%*l!fpQhbH0-l37nl%lBcKP=z{eT`N{ zSZBah{N25gw2K=r$GQj=cpc(Y5%vn}K&?5p8rz~0k9@|*sY!Tsh&{{JK<g@5vI`X~ z-@ps-Osl`eDPN^fzW4~daQAkyAE?!lu13S9W(GBoIv(E@+g`1IGVx7=%$s)Ln>;Fy zR`9;Tw|obb6}VD>3d4yG_)q%JOyd`2>zY4?zCw72TGx&nZc;P9l;sR345|!xFWu;X zcf1DgCHMzRE9O;u@hSlLME9y4^;Oe=1NsoUn`;ix*XTp|6~N&k40Uh(obYN=U2rUX z^r={2ygnEdeXs-vF-)y|Li9nT9Ec8GXrR|ZeQ=ng4;FfW<I$hHiAp|9EqP2Hg7j67 z<{bBcQdfJ{_kRm|BygFS7<&!Nt&!lm_xMDqmQHnm|5$*VP2B|c(<_^6*zBJDCom9w zM-7Tve1!+i2E^%jh;+eif%?hmn^}JOnZsu-e|7zn8Qa=7^H{)JpV(LHE7`?!-#E)r z1lrJ7(7X~1Rf>~<@k|yiFh0tPw5lb0Jl3>FJh2kD_*H+syt);d#TJCe;3p>h;CY$r zEkSp=C|4RY1*ceuR$&Bme#4a3*z@(>Y&DppzZ9<&YM^t68t2lDqH*>Geu(PPQ-{T{ z!6K9liVlNf!OnD7Ar3zVOGJU-pD94;y1YrfjwRqxy&EcQi$<zE_N}-J>zFmOzFX}1 z!~oGR=#icvPu=)^#<JAf4{Jv0^A;5=<BID~=Q-!SjqQigdOZM5mi9xXyQJ*xhetn( zw;#$ScAcyJaOB74gfu-OzMHM~XyYkEN9xnbF1zL6GxX^oHN|9axvFDqR(_TG@dI-4 zJRmD0D${HFRH=vGwaUbJq@=)9qB5c5DQhd$rwrZ0#l+dfItgXLjBv3k0L*b&UrFB7 znPdioS+leOZ6B;1;IXboew2j2Y5mpd^Rw8+P3+%&T>Q29Sp_NcvkHXAq>Nn@oo*Dv zbop5@Lcpy=Wn;|+W1D+}3B2;A=z*dao4yLJcMa^s6kFK#C}i*nneN3ngJ5J$b@isn z@a>+u-jS|z!S_Py(DywD<%>?kmw0W2|3H{SAuE);4)#g$)eR@B?1TRA?>JA{NuKgk zcf`l!xWT=AQKmQGDG%XgIJ|i};R1Y&AzV~H*K9{7rizjEWR5&y>((^{zq_{53fR^W zW3Qf8h>4sg(e33^1&~JkmbI#{PScv@?U3dvoOU(C;0jbDE^zZSR)IybA`<@~GlP5- z=^FG$1?ww<_{U#gQG$PvuF)BfL^(x$MJakh6)fJPrl9(`v^}BL!F6wXLiwU6QJchB zgu6>!AfMVseDvZElJM1)uNm{(nLHfG*Q3f@e9b(+XZ|S;zfH>Tk)}NmQxvY0sTxb6 ztD_rplN!7fdW0m@%WMP!5ax}TDL_jG9Hh5Hd_6^%kh<e72Z`w6CBE>V^|%#0U=d(e z#DF^OkhATj;n{K$LvRw|v?nnUVG8T5wl?}IY!9fI-bQ!$2#=nGB?ICitv#*=4~uyd z?b<0Kll7sD&&$SZ??+KK><R6H$XGtEJlQ#~HuRybh}Ukfmu2;!!tCR<#qJWf7_Ytd z{rGroP;%$C7_U9{4IDKv1n|o$UfcV<IQf~A|LqDG9Hh7AJ>~p>U0LS8R2z}t`d{2u z4j>$M1pl?=Q^Yg<jrb3=fp{jeA4n+&zb;%G@9Zv4F~3#ogzQ+g$NuOT*3_gfZ4wER z%9Fq{J@#5Bx+h2t9YuN__R`x{K1eJ^#sFnFzSa(4SiOe@&~UG-mhN+rm8r)qe{zz5 zM_O-ie66qUJF*8Ex9qDkGXj^rDz;la8~z#QFFtY1NJjn>yUcSq3!v~Ln4<{CUwwLF zQ<LhsPNb9M<kQrS8;vYp_A0f*xr}J)_^gQ({f-B!$XqRSxTF+9$CJ&~%~!|%rEq=8 zG}Tua+tO-|FFKV@22OMKMJMA=HPAfuKzwkYDxGH-o5nZ|-9hkLZ0H(v7!m7j9=_Lh z-MP4p@!N^78OF+a3a3DUpjcuT=1I8kP-r#0oNPHV3SV>uDp6*S#oapWT+H+&8+H~z zs6hgUqGlw;w8l2JERZL#D=})~T5EO*sW;c!cODT^zmO`;J2@GB0ifi(b2z@Z9xLQK zSL1PM-?`U9$rEor9~Uusrd49ZP#>zQNd>BBqr4I^;#4gx%H9?Vcl2YEeVj3O_8Do~ ztuz<zJm^G+J10p~1Q|$oHb3yImk5h2@&o%wexP8}5^+3frTIlj#_s4_*}eM8w32a; zFOwzX16XRCk}*{Z;ahLU@y{IcOT|e8?)ldtxxn{@<1>curE7A6FJ?Pp@cL;O^+nw# zygCEuzJ|y_qTX@X2{}M_!5ap;u6~g=KQq1k!i+Y`r%8id2wVFl>wcd{%r?TRZTm&U z2Bc2_-V({rWIwQckh!U-G9#irqo`?RXip0Y#<llGbjD&bj0B++q%s(JKBO)pHy3k5 zD#1-l*h=(Gz!mTjo6g$s6OMfuXTrGsDh?S5h#ZM(k<jxME(--KZr9He`r`12pt?)K z#^|Qt>G}z;nzZ{2y6r!QtEW!W4sW&*GZKO#M@<L7xR8g_NC+5K%-^I9lAOC4Qg?BU zmTlAFIUj67yv|{!ydH^dVeQMfc4szosk&SeNW8OevF2gT72vXfF+?eJTj)uIc|8OZ z>&QcDwEL<pv>M&`nuC|dJ>=-W#Lq~66<jq8wqVH6gc)YaQ2K<$PYr_Jx2x3;vQwZ| z%rrQ;MFlDV1qv;bs6Zi|o%%o?aFTq}Do_DefzlZ^^q4a;BQ4H`;Esb{5G+omN3nMo zutqKyX-$t^d=gj*elHCVVMJmT&+l6;y~CYj8=Id3HWLx}6j)9e#>47A`fQmu1IZuW z5BEt_B%!&$AIJ<5CEy7f>bPI<33tIH5Ie0i^vITcvEpfl;qCvz+aE_c4A)Ei{Dr3v zVr3ed9=9!CPz@jCsrjN})itRLaT7uWcn_BqTUob8&r;JPdF7_HS|VHeL%(<W{Dn?~ zypccD@_kL}THy)dQ{%ff6sybTIfi;9uWUoh80-k<IWgDR?6A^lv!k5@8#tf`0_!29 zd&9=Y&d{!$vWmHC?XkjqXS%wS>;EMENg5nVDWoMcil79RzPgjC<j@MlG1eE39wXu7 z`RpAGZ@I7T5c4zC5z<k<_Rm&T6SLH!f3>BQ-1=%F0a^Pot$!*#`Rs1U=j2^-BcG*5 zXGA`n2?fRslmyC17?@{mbMH%^PeT=ejbZ49y(4*zz5vOfim#cahbj<RSxwb6q%H-W zi8(CDcMs78)=c$6`SCRUBN2%SvmvzzWh9!v=iw<q&@(6A?en6r$Kw*QYmd_%><aIR zBM##1T<j7=YU~U=XjflVgnl4S7ZA=2RD>5_d_O*<z$lGPm^dYb>i2{%&Bh*HWjQzp zw2%&P3l|+>Ze^{om+&&J4x=`Y{r}jo63Z;9RKt(cVumFG%zg{+%B;$7{v-(AUzdN# zuqw;P=&4EH^P~66ar#^B*E#4H;|%^a7jFao;>Q`e>lgPuD>z6W={C_Xa2oV~;%L0u z#nrDTYZo5^`!)6@X%~;K6ckLYUFi692HM53bCR@+Cy9$c0bInzWvOwI3_rbgf&E>F z`^e40lc-zt#Wq~sVv~?`_@M;dVs8nPCg~QF(&!ea;d{JDGK3gpY`ckh-RcB<%z+<v zGx&Jaj+P&0-#_5Ake4U6**^e&8Bb*?YE&uKmH`#LYK84ctvlFImWwx?B2=c^GS#E` zX$O6al3e^+HTE;3S!>6l7K67YsK(@>L1g{H{GYVKoTe`-S|sHCPFUP(k_X;fM8VDK zKD@febAqI&#Pi9Z>U6ThCnKHkWS9%M8{TrtVK7W-ounl%nPjZ7v2#CSqG_fyOB}wu z4<%}c0Hk2cY4X##vz8IqCDl^u76?;&`)(pX_$SdJ@Q6IP!@6PtND)E8I8!$yVVs~> zd5_Dc(a+MxRXxty-ClIWu9der_}8t!cGCct-(~J!?{$P=7LV_L<F7qlFKa9OwezMs zOWdNrHuze+zc#GHNK`@Bw^3iS>=`gj;03r%R{q*KtG1p$G=ito9v<C4cm8nrw2b)! z^(LhIBiEnQs%xWBdv6t|AC|X4^;&tNdp42slQkzp_0z#cgokSd1;qW_4vAEMji!1( z4grR(m&_6wK*u=_1CVxAsYySP>W#hxqCXOFBGGHbM3;UW%>-Y8=AFuAL;6%NC&Qmu zt;NP$;N@c2bOk7+c)Gqlk{lY%Gd#3?=<^P3d*d-V$dB<xe)RL_Lf>VTF7YH)V2KK? z<ETcFE+8JTKECCjf(K3yv$*K4(V#ILbVdqyi01jPh8lq;IN5gUd@(+#2utbvAw>8Q zQYk;;Ne4SP*Hmu7zwOl6??itt)K;2UgnjV?7WN<9f+KW;w<0{8;Oz<TX=fJ;=i`I7 z>;IfKc-v!&0Lf_22;S}vs8Nr(5^G7JQ|lu8bB=eBah33Y3EsxbAz-K}vd1y%s4ZMb z<MR=<&9DAjT90S|K>#OeOPz&q#>`m!m4K*_PJvqV7NDt4E#FH%=&hF$IUjsB4mq88 zVGj8kUtm|{Ug!1J*qL3v#&w5l>`a-j0cf%Su0TD@#4va}F@YW*86tmi^sHmTyN#YT z7Ta}ur6PSJ?=v6?FP&g6Wg0OXm3)UQ-ImH#YQw+zOzK1%!aZw7RF$n!6Sb^n5*%-C zqXpOL|4I$N+OKn<?_Wp`<o`w4^MBij`tZXt;s1yiwQP*9Lp)aNhYgRB4qdlXku}$J zLNHtHQ&Pm~hie{jBt^1$qxD0S*lj^S4C1N9;>hR<Fjx*@D%-1GW+ouc0!~a{^g>`7 z>0cOAcoszihay4U@>lUG>Jo&MWD{OvAoki5Bs^vwawHN{5QnP|4{^;G8;Rc+AWWwZ zLZhQTxL2G|h@&(tY!cT;-Orj8fqJ$mEvl+EK>qb_!t7G(f&-q8Ln*5dZUsIy_skui zexH;hKA}e%4{03gDYM0=g@6BF<I}ybq`;>;{~_`u1wM@e4^D+o6j1T_bos<&eEJF? z{2$?y0rGthw1H1AKe4UwslezTH~O;2Cp*t$Sw$xJgefV)pFH*}dK40${tevl;!`H} z>);0+eA;UJwfb2A0r8!O1>)2U?$X@oE;?OPnXrcncf?dwuqo-{ZrcBr|H)Ar;!Rlk z$m3N9Yr+BqFk$n^#^C&;B0xR~ZT4b7H64m+6}_d*u&fj&EWkPekHiDg7_fxBD!;D{ zBs&Ss+jYdn@++s_IgnMov(<4&ba!!Vrd8h>mUxFTNT*Dv%^ZEcCIfHM!48hKQSV#` zJ8+}d2GaG;MMzh6oX6k()xn$;jSZ2zZKWGRO5*)+>z&<ER*bB`1_G2{(_sy9+U=^9 z*k>r&){A6Abw-i?(k~1U_K!!`j;jMLmb`z-bW<<arLF@VN_i-G|2si5MD1)8XABx@ zvwpTno!Y5GLKTOuttdhXZa7$UrJMfm7SE#Co3#~C3&0IoMr-RUSV%jnQYlJVs91ie zSXRouIbNe|8UxJJFW8Z_1!909Lx6s}D5D|N?`VM0F<t-z%q_a}7+^1<-MYq2ul?ov zlcAYp*8g*;$)~!pYwozY?4XQs6BvaUKXjg$khyvubgu(E*W)ko(<~W_jkAy%jS_mW zfYr^P2R)QB%-O+2Ime|fFE|2EquTj=7ugnrd<=O@^}_)g!AreqQIZm6CQXir@4>eA zK#W0I6dZ+T)UJ}gLvZqj2g3H~1+ogn-hhL#6f0xJ3IlG%&Cd}f8G}Cpga8h7KK{HP zxw_al$Rs?kCZE}{eUEf_B|4@^P)$O`jhz18j*gnKsuqyN9c3}nBD)Y6a}BkxeA^T} zv7{bo^&VEj*(anPW&;$rjHhxcT@P9~X@_CT`q5%B*;SJv+dK5#vI7R&sIAiS;z886 z$Nv{|IXzI*P`{lU%)|bi(_7CiV@1v#C8KpkS*gb^0T|8#y6N+l7!y|O+);=-yyhLQ zz7{-M6wXBqlp-C8L*5dn`aFy3LAl5d@Y#qvf9qtvv;%xz!j~iR&6jq752yOf>tepN z1AK1Bmw)YQzLf4PsYifTpgFuDK`kG0$j4zEm}oknvqsbGsx?OJFLXz$NzQkgnLlP` zL1Yj%^T*x7@cSCvVOE!Sd=^p%JehL?A{$vSDtS0R0SZ8o0$|`v8fQ<K2Al=cW3F&7 zoLqq(LsMU#CyNNEbyyNEPv?SKg0V-*t<io*n|7C(;jgWR=gS>)f#>JrGJ@xWP>YaR zlNmgB@WAtKpjtdUdreJ(C-os0o)_+y13Z^KxUJ!N9(v>B)U(W%zHV$r@SORVEZ|w> zf#;E+=XiLooRS1jFdPp&_r?)tji1M&t^Bsd&!HGOkUcyP9+MF~d)%1?Ja_cKvm;6` z;^8@eauPhjSUvFk1WU>qp56bpt>L+$eJ=3)X>>;L{MYSSz_Ygpo{#AkGamlA%i&4z z#5EpxUcGM)@O<WhZ3WLiuo%jtSi4-{dH1M{;CcFO8N+kwD4M2`_aTz1*(^x%Z$AWn zOV9-aATYlV3=<gmMCFr^R<x#l$N{jvPpg=Z!AWP0rYAvX(`28sJd(D#fajRj4mr^K zks~vL=Z?2#0Z&3v;HgFY_F#{O<Quh!zu=H06ouIGpy;<)Ro1ZVf1iaVA(}HhEq=EA zo(nuX?voKboBl5gcv1z{_$f{lrZ4XYe&OQh-=Rxu{Dib3ex89$fkgbg87s>grZ3)O zVVW~MEq>no-(2AN*zk<tx#Z?t;HmNRETW!PK@EO>RFQ<AQZeYLpi@TV0Lydlwy<>Z z)7!r(V|&{6PoK0|LsTrzjO)uzC=-arXStk8E2v2|0xiW$2)#R1|8%)b_fLQ2I)j0k z_fMC**+2bCdv7@B{^`5l<prig?``C}rO&st{nIyX5_p10vP)O)xwnSsgtpU_O}?eI zhnem|i__%OGx>Y@4T8nVnaD7EO(Aeb{f<jz2HQ>SBL){5ovr^MUx23%zLA>kZEu)O zAR1vJzNm>8eaXw%%78{WBKH8rVytV0aI5f1@vhhswR}A2<X1kTRhpzDgO~0F)Y&E{ z@)kFCrkadQBFa!V2QxfXwFmt0rim%y#3uKW`>)qMEsNug{SjO-<3-FLVtFU7gKI2R zLcwon=}yYi|I_?ztLSgdFS*d)r+cQLztc4RRovJ%{mEsT{tml3Yx<MBNq>d*-rVVL z+3j9n0;Cq6u742zq|E$-mi`w0oE!aJwZ}H1zfs^zu)6=p^jB=@Zz0G%Bl<f4XaNFA zqQ6lG=0bm{e2S;PrGVf62l_krRxip}d~y4aWH0}I%!U3=C{00s7-KE+PXrU9_-W*y zTxR6o<yq68+%59Y-kUr9?S6|FnA?W_HvK0z`s+D#8`0nLtNwq`UoT64o371}{#FQI zNT$E#<8q<Df<*dj5BU9mpugX4@}kT(puaWW<wAd-mZYG+GmQKb!IYl<<T4}wVp-Fl z+%59Y-kUr9ExXYR%#`$(F+Zz^VnmO~!f##r%P4kh=l|~J&>x~k(woqYXR+S^!d>fI zJ~jF$6EdlzA+ZMfr<1li7CcF0pAHXu+Ee2O6Qs3K+X=e&2dW%XWv#L=;jLQtEJ5=d zs-H6d7cZ>Y3G;tJ<VNb5`M-C-zLnsMsmrLNPS>Ok0WyFrlIQ>K>r$O}{x4KZn!j4l zbo#%<Wwd)LfAaBCbul2v^=*a$ol5(ZI!?5IO;w`z6mseSNJiUc*X$fpf4$P|E6l2& zSMfyrT7qB8@o|Z8w(y<t8gx*dJ=)oeFDjK4PLQqy`=M8)d8i~W9;4F}JNTkycr<H3 zQZ(O<tIsS=8@cr32}HR3e_Mph*m@i^NN`O;G27$N3V~eEw-NAZzJ<poBMDx^U)XpA z8^0UF0q|#y&HuPUXJyi22;t{@-j`-khgP4u2m?Rop+P~QbwOe4f&xA8Go(IeHY!XE zww=_TwxD_)Yrr!HxUYA^PA&bVqX3o!n_xF{1-@$84*n4Knh5AH`0iXR?S?j@Z)>je z(D*jsmp8WL!Y?1)B?Z5nr}<^y2I5?Lekqq}ei^tZYknzrlV5&RXHh$6dwub>9$3-> zv+&HpUN{z{OZ1)el||p|?Dg3@JN(l2$4%9r#j)3mU<wxq&jh}MZ#q0PzdpUbf)p2) z4#VPRwm&$i=9#EWO~*5hy<TEwrgJ7a@fS1G`A&7{W#$lk(cAe`lR6n>OrsvpXL5iv z=rX*s2M_}!lEgbZjd1u)-0XDl8aymh-bwmahXRV^ohx~tnE{v3_?2MurQ)3rd3h%$ zaG&7_Wb#fnvc;Y(?>q<_$6k_n=f1<8y`<uuKoY|{r5d=PzO%3HXs}YeU>JUKoCeIh zDM;%yc;PC8w-#Tw!d|)Y%be(cU<&#_)6hQ<ur2zR%MATrm^J;&-9rCMx1Rp5+;;Ro zADb8Y|H9IL_Vs|r?&#$KZPo)qrWslWQlh&u>6vXXf=qs(+pay>qiKVYDo>JZz}}|W zK#<~7_`nU$)K4kGmTb4HjqXI^k|sx>e){bSX}1)s@=F{(@E77S`iVk+1QHkH=TfjL zDG|9u|I|r1R3aZJReua~XeW^m;9+rmpiox@q6~xCVnNq)=Zk(w9jY9V<WgV9hZKAO z`hhN3_1F7_6?jK$VDWc(SwT<q|Gn7a8d<?Tcqq1IS;0u`9jxHCcr~h2?dfjE7iCu_ ztP~9d=!~Qq#rS7)3Dqc3=&%xB-3-kN2Dz`FQ?n=Z4J#%^J=x8DeFavt9BboN1H3mb zEwxnrZBGZHzNqBd#VrA;S?!vUB%?bev%wNNEs_`Ag*ta09JV#5#*h8SE#Mw-WwU=S zV5C_99Jfge80uZXNxUF#0gS0P2fYgj=>_cKEWj5fW3SmOq&8ZC?~6Wzukhv_oQ3$J z59qHRz)A^?9w`=c>mCj?P-x^XM62ZqDCKyDLD!CFYJ5ju!}XwqnvT_1Vq$c4<w;Wt zYa9d{QF`1oRK$)%Skfu-ISW@epMd`}SXkEDJPV(s-v&Bt^(WE!>W;%#*iZL8naK|Q zZwDxc`j-j%mon~d3!33Wu>@|mRr*XVNKWj(k1apTPM^7|pO=@V?M;t}PcbUWim^Ym zOF2tRkherEK!Y^>=8A3I3M(90KEzfT$AGsm@eq29ooLkk0^xZnT&1`{^GNh6k?dY` zCtdkeecXXYR9w&=0tyc1XPsK>u(kVn0!<3Z`JACu%){_S4MQ6d6%KHw?mQ}GWLO$o z`;@A|r9e8JIffP^ty0?TuP>(s7^p8N_bRC`XTo8y{=EFy=0+sQfMu2Ek>k~uOJ5>i z^lc!zIs*_TYOleER6Gqyk20pI5S@2m9_uJY5wl4-$imCvYJAk*nDtl+Fb-37Rt)>1 zm+Eb<1lk!AKMA`&0&w7~?@vKh6Nfrf73o~Iq4@~S>CiESx$g+O=&d@8I)=t6vd0SK zR$-47#m#+jixxr<Nt8@x;DAgTa3Uzax*>Rd&A^a)%Zh%dw7eI|<QQ~|XVQL9HirA^ z)`+=xJ+_DPFG3+MP!q>2hpF?2#BT)ZpJ7+Y8!3Ur@oWSqA{&{kZxPr_)F%=H^g@Iw z@C6z98)XhzA<D_|GfL5%b}qzxwd@>0w=_NG)?U0V>D$IPZu}rO`hK`~M)d92D>g$n zDZV&kQ97aph%`E65nt@DMM99+>Wwe%V*RT(qQPH$eB+(paL&o`#p8sTB>PuqlsIUT zMSM{=_q9D<5MR6l@B@SUU&j}3s`Da^wHI=zKdXe+L3wcU28%D*>$i)0d2yyq{Wd-m zAPnjNAw2_B$*5ikEquTOq~`^7;hz=?im_!&DqYxH`OZ7RnMD@{6HRFsKVN+$fDuxY z7dxo5PP5Iiz`pppp{Ml^y_RSOdMiK1@g2-d+to#=leol`jV~HIQ(Lo&?)Z+VH11fv zI&G!#BZv-A?D%7wk+R$$o~Di5Q-n5u%W-9nI<i6eaVS8<FH?z>w2d+V)JkpzH5=e+ zn_ITWx&z>6qrlmawE_?p=!O~7t9f?njrmv(wg$>;%}*5v|IdZQQ;VNlVb88vFZih| z9y0bIep;w86GEdA|6yy;Mj{&PD$X@nhYh64KatCf{~y~F=8}2-iQFyze|zs%`2UxB ziGAz*S(C7N(f{7D^q!^u=kwBfTKzB1|IhYwGCRh$tr&ZDdf8z7|Hg=gq@XV=XcaoQ zV#_FWz*yt|$9xm<|Nlq?#tUou!v7BrVWh$b_&TKS1Z~5O6$HD%V`1v~qN{j)lbQ&0 z5M4;$UZRygu$y4)XkJ^4GN$+vn>TN+EKF=He^w6x4-~>m-FBe;&Mp^V0HG8j3Ca_# z#bEsu`hy@ms3#UTcJ7N;V<18O6n|p{o8MFS5OX1VF&LAY0MK)V=i);Osy68>rgfNC zFU0Q7)uyMM0#$52$8<k_b}C+kg@IWx|K<Q;s^Pn1=QtJHti&l%3$7=CFmgsZgrRX5 zn~brEALj~|R!zm<CGvk5;54+iF0u7PJL-ak`JyjiKPn37@XgEdLD!UdyN$)^h%#Lr zgh@|YA8kJWQyY&Z#3nvPm@XE;0aO5^x_*Ik*tPmhk2q4=qk&}wW2EF#!WsV-Mds+? zQ~@>H-XxKfa%gINv=oX005hn_6EgYqomA$x<dv<Fp;gnXuxU;wk}V&g_APQYjPVCh z7n{qeGh(H905(Aw)QK9|q`rY-q5<xUvgLFQ+StDbiV#Fa%lalo=|Y&}#iyZry?WaD zl@qjX#ge(mRw~DFLZ?(+J<vfnU-Ttjfb|>aL`u!Qu`|1VK>jpef~y@I^3~nJo14_@ zw(zL4Y-B>Zgr_cxJv_?td*~ynCyJ!+H`~+Lr|+)Q{GJ^u&~LUv9NX@^jEb?k$rYef zn0{WyXI(Y3sxbX#D`t47)5WSVL<gOQ#O#D$c1%@4WDj(uxb;lJcOlgZTTtrhT0xVu zBEMl47gQk4DnQIIG=U!nP#F&5`{Kx}cuoj(%JuQAc+Pkqsxu4lIzL9r$?JB*Wqaz^ zagec@g;(FHWiSgv@gBYe?~3(^;VlK1;F^Nk(FOH|5&5NVO=K93EIdFB=_b;C`_?HK zwXP}D7}pI8W^f~|J>1XI!qv2FXY0uxx-QWjz5)s>WO%RB7V8p^2PIRS40+v(lN0Q! z7tAoHmRy%8RPR&;o5=FWE~rZc3~E=2o<UTE))o$6It!I2M48<^7<AZxd1Guk5>V$3 z+K#Z6p7o%bVSwx0Yo%CmM?x}&*)V+(;+5%S0jyB-|ALlYX0>=l0P|=$F3sQC12Dr0 z1z=}JYYM8=IIZPiWo*#L!APdX&|0;9SkvNrpqADJ!p^0yuQSw6x3Jg%eptIo`Wj<( z-HA57=p1keyh)vojT1+X)K+Go(N3sg_F>{wr8^da&MbZ95YPG+NGbAvtv#?T<$veQ z<iFVa^yV;#<!766w!bYuT}Uh0lM@%YlJ1_c5)-s^O<6C6)T{S`H7%mnnFlPvv6uSl z?jj@Y7Qz(5D?m?1=3jv?L+VysZsa{Kk1QsV#R?k^X<wgj#(Jes*Ii-o`;aEhj?ia+ zMR<>7jE=8!HyAyqlfWw08B1h(>tT?2+AB==jj!$?JRCsTV>z}1joTL;hc6g7mOoSo zpe9}n!?#*m%3G|{3?8$M#C^h+<F~&&RbV?&SN%SLn=o3NwZ{Rx4BD@BcZwlVq?|K! z(Z8>5o|dbVg#ks*ZYcjFZn$n|HW9|kq08x$s2$Y}f{^CZ=9YWGAEbKafP1idAK}X% zUL$vdZL%hE5rzz2rLG1Du=5^RzvfEKm_J6doU#1o)3E^EsuVp+*{XE7nNknI%JTG5 zwR5k;s`No>KmE)=3LS`?0_KXAQYmISop82DDN8?T`}d`nPrn-ddGsp=A+&swPRWI? ze43Dvd>WspiD~j!3`T-GZvy0#8y#l5$B;f`X?Q>-hlkB}kH6I<$tbrEfmWn+(>I== zHG2~YihLGB-b3oLv%ngE#TiPmG<HbpLK8)nCwohnt2vA#q;>}tYh`5#mf|~uO9`)! zS4Cj|_H|T|@IL5>al66<CdjYG&V7KIh?L;}q2X!;N!*A5YX*}$(owCZ13)AJ?_79K z+?SMGKMIT0E!n35o2uu@5-&Z?E|HTWP8GI;@~Sv(DX32D<1X<UEb;GHVl#s^CU!&p zt==EGtojUj=m_VbWAV_w@=#xt{m&C0+|7NkFS-vdz{8g}OfMAdr%I1NfUj;Z{1AHb z%F7293bm@<pkN-tif~Unf9{?*2fCx{&cWNAoBm7s!Mr5OB>DAE_!W=CS^4TV;zy{% z4HMg|5<Dz6uH=C#bY&B}=na6Ioz=Z<)ptGd4n2K&xjTKi51vN}QMJZOh{5_Q-BZ9s z-%V42<%ZRr+g>o4s|<GpvA0y)DcG3*y0_j)q+HHxLjLF_WA#Pjun}@tZUm*>JWbE9 z1M%z52b*81e)3m5n;@CPyY%iXG(Uw1hAOQ=Iph>a2t1VGzBvJu`<}Hri+x|%E@9u} z?Y;x54?_RW&d7wFeRF5k2Y7bIU(L>_DLRMk<DUANJ%vE?n(Vsc{!1=5L8W7zt3QU3 zS2H}M8k`G>r)K~Zq@k7gH4#rw=;aUqeD1h_c={mlbUN)tj!VI+Qu%fIpXpKe9eqUj zsct0$$zM<<BQ%YSElZmrc9221FJ82OpQ5e)LL+A(DqI~ubyJJq{^-PZUI8eNpxto4 zSci$;)(&sr5s*xUEuWC7>UmbwOYmI*%}KJ=;{dC_KqrIhKUTj)y6{tecEHe6=5s9} z)}db(BIST+-TC||ze6{5#>Ze8=uW|Y7VJF3J{81Vsx#e;LW93+M|FlM#R_8Yw%icw z+S-9+xm~OgHy6d;GivuiUOfZzjbfL8HMe8uUCxyuLBxKoX+IUuFIM-zV1YLQFON0K z>u2VhC&YeD1R!VO2@M+pe&Tlk5XvvLZ>$_90{)+%#G)aU+Bah`U8}`yzq<4ev0<Ur zMD{Yw5>V>Kn_9axqhggj>d1$ji&&#$ho!S}rT_<mb7<{C%tUH*E2rwdHP<0pM1shK zVcAsTWWf=)H|HMD{R>^Ndz#5CMuT>yeL4TL@;(RuI2$>UD@<A?@XfMgzzP5D1iimN z*kY1+kMHLx#)0kUIp74r!_@seP4t9K?)cyYEx8!z5RAN9eHs=XQWqjPZ}|T%8hI=6 z4{w9FjEL#06I@z^+%Jr+pYC4%D^M+@j{iTaJ4;v3Pw^!VHh_cT!9B*06FF7bkG5IF zaXhjRzT-Zz2}L!*O4Y&V@R!J>mW8<Wdt|OkOQ6n1eZ!UTtgZ8+diAw8BzxBUn+25c ztnDo{*Jk%lCSl0TMe(1Z`BqmP1h6Po|7f5PAn7nUY7=+?20Enc$GPLF3Fu|`Uk?2^ zncYC_YI#m$S9bk4JEAKLu`5+S&f4>l#QR}Pdk`>acCC5`p>C2ZHV2o&40wa&#)Ouf zd+|trpwETZ;UbUO?IE%Lr+8st=_?2S{uo1F%_}qnva2ucuqlzg++=hNc_Y37-GP+i zFnof0!@O{e0v9|52H&H<YPnRtDj-su{>H1pYe^@*x(j&?_;MvI5;o8B*YGL%$P}c` zj9Ciq818+gS?mxri(Q^JkL26)NRn~W;D%t4YA*J|_cQw?g=xdJB=$AOGL`~<60Ttz z;Go_HHX9D$Bbvs@79u__-Cwq@rrq>rj)gPNirj{auDp!R%|Nq^sC`;5aNq+tloLEp zKcJs^K&)vxyt~~cgR-!BwEHMuT_rx?mXE2H@NpazAGP=Qt;Bsb?J&E#Nv*w<`}e5A zOP~sGukW6Y8}M#_C9gKu-)63V86tsW`O>K*7gswdsqry~{zaTaOL{!|U%7Dm$j^z` z7-!5$qp$)sFlHcBUV{|0kB>79Iy{_16xKN(2MO{;Yk_>~uwR6Gooms;HT8Ir5bA{d zhyrk*2L=fE59Y(8&eQe*ch{P6q4V9&yg58beS>8aW55XEJB(|y%}2LoPxqQDFi)oc zjO#JW4aA$D&IRHfe%dm`3)N{+2dkO&vY*BHqX?tpX4wNcga<Iy`8b9&KONWiKpK#- zj_q)+r972?;^lzbIVs>~j-?Q4Jq&2~xbU=(YH>oacfup_;ZchVL%5W;X4<6;aE@!X z^IhlIJI$tQ1BoWuU~r_Chc%y%uIrBGqyMny<LW;d*9-k*&S%n7x$x%`esInQ^9qcI z!)4J_u%U;DgG_3`p_5CY5Zc8zskiS1YZDXqL@WZR=%>!o84q&2g;Zfoh>)|T<D3<o zVo`gnfv7Kf0gen0W&ICslE!v8yt(+QiTD5`AhsDl6ywXI@nt{065dOC3=ah+fSr*C z2GuZR9T6K?RiZ;%FA^E<$4<$;DPt^|dUaJ)-nVq%UZEgSU#cI-7Ie&A@=oL8n%5p< zv0w@ja)tBp04(cyuvac0tE3xfKHf%Liv+p265+2`KzB9^^hHlJEV}tf%c}?KzT~)h zAKZ-RbOf_)d7&+1Z}$@tFv{YSEAKO=_Z|kHHZ9ME-g|xT;uCyRi7K@iY|<K$8P4o& zSQH+NosPW^he;1>T@-uf5rBL&5}AQgKq83|d5M)1Ne?>O9tNR*BJZYfD}$CO*3kg< zcPt4|++K45uZNb3rKd$EUn}FF>HJOI1#{JG4d|_aZ_vQ^#>aDk@1x&3@J#})HU5g! zIOr7!o55xPDE23k4)~J=(_o^bFM2f~rLOx<(?lIUSekHop|SA|t0Yh&9|Oi8K?M*P zPXdg!V~m!`QAgP~?8Q5v(vOs<x6zu<JB-_Sg;Vw(oqSvZdOQA%9PoRZfq%b$<^un+ zZ?+8oLiLR1Vbs!Q0b)yfLh~Y4PUBHrIl}^~T$~9_|BtyZ0dJ~G-!D+0Kp+tV6sS_P zVAZN9vZI1U7TGF=6cj-eG1Ltt5fDVNtxz*X+|j{tUyyNJM-ex014KbVM-UfW=hos3 z?zqhK|GwWj=iZw%DM^6e{O5T_n!B8H?zf$9KT!It-;rUZvsDp&5)83|4&-U=#*`FX zRdJD|u|s|l{er$4*}cYN;>Kp;;r4d*WQm!*7v{yOlAElnTyv|cx-Ql{nKY5g0X89v zz>N{dg@5;?SZu}1FG^Y-jn(*?{&YI{D%({LzN9?yAdC-LL|jq#*y7dNH-tfW9Pza? zU?4Ww;0vPMZw-Z+5Q8$7uo7h_eXCH$!|Uqu6;TFh9^QrN#FnA5K{^RIbNj=iY?Rd^ z?x@^~eM{LXJzKE00qHPidWE&l*6a9Md`EU1g@@b6jszI{*Th(i8Tpnl{*pK#hy719 z^yi*T2VYyisRv&=peAQ^<^o=~o{`82V>~Z)GYRPc$qv7V^H3qLw9<&=7a$4)eg#O= zvbIl`qVHsKrgEKd$I7XbV>JKHx}K0$>LcI@IjuB@op<m2j|WVtR1!KzkZGv=Z9^Dv z(FG7Wm7U<+#X_9Wi!{Q9B>ffx0<VdhoVuMO+`~lojC)c^=2`CjD-D0hdMuCj*N(>( zc2o0*{A4NY#`A~36Qa*2xr)euxC|FV5Az`3s?U)A;a;WvORRClh7-C+-hs#DrzPY8 z2-arwlps_e%C**33#{7dAie866O05FXcbRp?V1qH0fzn^eLQJ-^|Yb?#{@z^TWaz9 zcmF9c!sZLjR@Lu2Mk=l%=8L}mUtqJR)MEUezVX9By^BT(J0y(VV>~!^V`Gdt!VvEw zh++K<e$u{37WxFN@N+I65m#8-fb|ZZqJoSk@hTJlycPPOx%crFe&cd(n32aebT7zn zU-**J4gu?CzPpWc><FEW2SUii0)z%L#*D4VPRhuGm@D7`Bh29HkN*#{s_B;m59L8v zDtR~1dLOXD>%EPPb?Nh>X~JfJ+zYj(#1-A;=C9Q57;apjI{isWG&MN;R~qt=-2})n zD;`Zp9=`fjz4FjRN;DN52aqltAym*o!vyjL;gRV6%R)Mc?~jihOy9I;DILRQeR_ts zNIVExH5&p}`>}#%=5UZg0OqHGb(|>?8RG9#=t2G&*>p&DpF+5(Z{gpgGrMoG8Zrbs zH><%_{mS;tf;GP9vQXo)JyXI3k-}W*_ekQf{<H@IQPF`u`vFs+32|k=>RUNf+vh|0 z=ZwfT%NUwmzxK1tM(bBi!=<tpuFGhVk<q|A=+&ZN#(8KHFgv$)HrfPaBe}=431}r@ z;5?iw9Eh}Chmkp0ePiK~qTs4??a^lWYG>I^2i8c?H&^70BD@@HBG3YeBofH+yG}1c z|8;Hm8~NhUQ_}W+fu^SkD-}JZ=8v8AMJzoz#y;%_TG;mf+VgZFB|FIBv;hI_h~imy ze`VIMKl~mof`>*r%zi#7bI3Jf8Y502<&<+oT!jXZ_mPKf^M0;o`)<}VNZu!vWQ&9c z4`bR;p7kld0b_JDT<=&c%7RO1y)_wY5TM|nhX2u6$2(S}C*6PeECuQAp=3W6kb88f zAmR{}p+h-N;~B22@h;aDHU_e^$_4T-F6-Mr{J!K8WL0blZNw<Ip+pndfe#%liM^%2 zb<5`h$>Ws1C`o@Nd1;fiXAiq^gn3c`=R%mlYi{C-{ln$hdJxUpqy1S9eJ8zt&e8Ne z_u+Kp<xM+d>D$>nLEnzN6xdQ;o-rgjd5M5%jJ)jUl9w1L3*;>d3pfZMex~%KfOS7O zNbQppp!dOGM$UF=hB)gZA6Vny38FkKdrj2A(!9t}#OeIt2wcsMKs&sO!CwB#wZ{Ko z%goTxK#Cvo68}JKG6&kHiW$)#-w$C|IS+Sp$)eC69|KG<duqb!!y<!AV${g1eb9$i zJeVHGto<Yfj)~HTW}haQO<y1S8f+J(51o%AWo(<l=tFDpR04hI^<Q92y7VFBz((ss z<$Twr4^17$B`2j1ZAbNYtUmNQV1?I{*N4V_jg1lJXZ`xnCNyQ&8<+lPpXKMD?@x~! zp86;SYOv+!#mMzX)<}x-^OP9*S)#brB|pb~T#x)*j|`pE<mWUrYgYg^{N~8dl=Xu? z_bK_Anto8cBUXOaqaU<ARlu6Aey|AqX^5Zt!39Xyfuu9~!T7<#3-#y+x1#DIj(+em zz5!g2x_<EW@L2fogS>n0p7bdE-R&t*c$B<bG(gaizP$SxY!W5!!Yh@GVcMxQdMKs+ zho=(AyZ673mUlgn9T#o?@m-g^3k?z+CuRSkemGX%y$@KWB=4qvmW;gnWSF4?BlT=~ z7r$C2u{X^4OIF^cxG^<<$?G2|Zmi#5G8#~h<1aa-#OeYD6@(%lLVwBYEUt_3m)x*T zV3?Y}<b|Qp5UMM$lGgV&YkjZsFA72nkguKmdF%K6BUWBH`W{M|J+S`RVG~8AOBoZv zd8elkB$=3_B|<#7t94p2XT&h}L<NLPPYzh0fU!t=h$wo?nRbP7&b(5D6*N6>Ih+a^ zr2_)iGki`_x9*<OfIbZ6ubnP+Y?9F(fyQ<gmAV|Lc&cj!6uig~-psLPR6EYX3q-S% zVnp~1nTd_kM5=o^>zcN~tR^3OP%D%rw+ik|SeD$8-cBq{l_hty%aRX*OWRX(g1avH zYJe2r`8tjhnGeJDA3%;raZm$vW-p;J9K&iSSh`Gtn+6M^)TNK4_p^U$`k1~vo&Bur zy;%B)+Rq4Z8d;1%4(%u6(`*|Aa;ztnX=uv6>c6<`lt$ql+P<m{y$kP0WMJkm1I7X? zS>Z!!XLy2R3rC^+^rJtG@mb5^l!TIxCN$sTe$_zwl9`%`6t?OexFR0?3z{`le$Q4| zO<%ZQaFZ>cis?e`V0kbC^2F!nMjD-js{^j|m94>9b>U{kR@Jy)NYr><9B~-i(EZiD z!{O}Jy9SN)Va%SOeM}4mMmnOL5AO{D0EZ6#p}Apb5tm4d+18g|JG98!Oy-;6pXio7 zAW0_Vfh1WsptAaGCtZ%!4JZITB{Dw%(m3b6pM_@fM)=}iLqFJ$Q<cCSpmWpzcH|xD zNZ`UPi6wA!tAraVUp8Aef{KiMVO^Ykv?|Jm;WX_x*@J#4o2?zaNo?N5Hv?jl3CJ47 znEqd(JbJam^YHjZUt(|y?xv9+s`J4S+<;jGH(7E7!zFkoIL}s}it)4kNwT$`#G<#c zkS?2*g9S^<Et3COvn!NLKzb)Us@!AlwaW0lK-TSbz2|%Y(;;fL*}78+Kgl?i2-arn zk^VB>CPYlicJYi>Oxi6no81ym6u*9NYY}$vve!iJmF5Mk#b4U?EXeWa8s<IbM1D|K zEzDU;J6N%lcDcG!&$>n;^kCU?wTD~pqxco8?VyS(O;w&$<cYJt`_EVfY72{l#E$jG z2})GGf#<c@cZn(s{nHJ}8G3W{@1*y$8@0T8?zVLHv#pzB<(0FasgixEDI-`VgTmw^ zM|z6zvQ=@HPmHBpYGX4|vFM(Ys!soH7CHaaM*ze<?P(AuM8;EBsBoxCM)rFv?&fvm zR<P>%4d?Mn_4xgLg$gD|moa2p%RhJIhz@}1vmuCO6xfRkV_nmZ7zTw$0HM9Li3?*F zz(N^fTz)P`KenBi>|j-}lrTFuV}OI_{ebVTTE1+!MevPPrWWt{>}|n#8u6anP86J{ zsqZ%pSWO^=w7x%_GR4d7tf{VTNZc^^L`~rz+-$!1M0avHvqGd22^9?PS`b~w@ZDST zy{KQnbF3g}N=2i#W~%BI+z<pO`3oZ$d!MS53jmdsNL}YBVhndHk`41~gln}s#y%1E z6@ZhJB7<sjsmU_Y9ti}U%Tk8s_Q=d2+=X9wiyafBI@m}{Xm1jVvYy}GN+P&^dt>Wj zm8hu_mO0jw0yrPN;tlQb-+hobroemHP3g#+^EM_WZ*pSgO-G1Q=pyOL8-Mt11{^DT z*aTRv1W4iKQjvnQkfG{?E*D9IxZy<eVCXzx>tqpjp+1ZpprlAursk>2)LhHANudgP z-!@hJ6`x6}NJ@TCnL$U0MAZdr`bFc;jYsph!Dkx&gJy`CQeT;SgW;~^`#qVnyQ?<1 zWlExcPd>zvKh<$$6GJZSCU|wXR&cfwL>P3`CpL(j2W>GIQ6J#+iS9N|uO?2FP(fe` z?5;&i;z~1*7N+x;YGUp$No;W|x+Po@+oRy7^@^Sm-k1gvfaXgQEK%j$RTNxUVk<1s zw&##~%#E&eE&hRq<t?AZr$BR-(iXTGo`Xw8#U%kNQzGO59L6@m5Jb&*z;w2C#1%Sm zxE)2;3cRk}B#{;<w{BA7#ZTsYWTRIT51YmqEb=}RiJzDcz_r58l!J7>J(kK9NS`Yt zqu50}*>KusBEs1)(kT+~M>bl`nt|+D-R(nNcS|hDXQUs`FW<4CH5*i9E{+VytQ^Ec z$2ZRZR~0IIoKbuj<h3jgf<6miD-6@j4AC9~9Ha+;k50Y+Z)6iNy#=4-mmV`Y5SRSF zYN^os&AK8p59k3OrXw<k^>(qH;jc9E|5(#c{%XG@9eLUPje6vzi7)wBTS<=U2g3TU zKsc(a1|@F^6H&&Xe?Qw>yMuTb1I;91X_;cgvfhV>H(_H2ku|d3y8*l7dH~#ng**t> zKd#PE?7iLAr{$<*|2jw#=u!4Lbq`_f6oT9uW6B6{iQz4i&4*?8CGUbC<R~o<FzrKE z?6}#PkN0#TMhifNpEUA|He*_1XWpL_c2e_~-SV2k4y^-kB&M0n<g60w#Pgv+NJ0a> z_~S}jlvoXp)AA}bxWw|S`?%K!JBx>1Ng5#Mh@O*72|{CJm1cD2>jKPn%rCP0fjE{& z{4}EqG+Y-5r466EG<?pAqywMutM$Og&c7OcIpi3P&CX(G<yn^itN=;Jy5CAlghOaZ zR{Zb11x?vq-wVUAI1u@+L=_+>c^=rSdP|soo%-U`;u&SH#PX}l|ASWE$oJn2Ux_rH z!&c*A7w=q<f4?JzYg-wv?NrSsAFLHdX>6pOlyoj#*n2e=7iwDBzPdH<p4uSz3@!vJ zn_4Tu^;)(57ddH@wF2!uz}Lt#^_Gjv2eYXoW~~Lz!)xVXt_TBWSU-kD9YXNfu7o>d zwlVWnC0wbG?xB9~I|fz>1#+dT#~0Tj?5ix@ungsIO|Cquv`KJxLRaB#_~f}eVuuN} zp{P=ajMSLTpnI)#HlWHSb;KeyghZ$qUn;ixjLJ^o8d0~uQb56Lw;pW+WtjrX&FH8G zpok-ZN$46N7n=t|vm%>b7D#+E%RoX>Wru@C6*NOd3IcuJb0E+e5Xf;u0M1iF05eE6 zM(BL&j<rJ56XOU&7z^xRa1?gnJ_{y>dZ8--P6|=`@xk+fOa@F3$5VX<PYkt}whsSQ z_0*>=(0A)iFT3jaIs((|X9@Mi#Qjcg1$Zbihb?mUGxXz<#`ONU{Z9N&sd=pWH1=g- z7hP)+TfIRC1WNO{7qCDEFsA!~l|Y`Zw%S;?(I+<#)A2<0%a;u>+6$3OY=$?`3vnrU zPxDThB9lka2nY9BR1?B%FQGph^3b43K}^-+z#aG^`kI%dO<c}VTu-PUwG(u`i+m83 zUDVC$|4OWGGT2&-Z^t_)#Up5xL18+c{Ue@ER0f4V#X`DF*7#OV(MAbNAOD1Q?8Y|W zzxx5-6DsxtzNfyJ9=>z(_7}dPj$d^|EWTev-ys*iHz5-#3g6JqPd6_Kz6<i}$M;)n z>f(DDzCA^J_c%LAd@ny{zvFv4`t5)#pr*lnpDurgo=*?o1&8e~e8cT@eV15#e+!$- zh3`*(j=?wlHD{Wa1mFEd-X!MlT`$+g_rv)16!Cr9SxMsiujs|@=I_|Q_krI#8vO?c zd+a;@pGy<}x%&hEd64hm_v;V0@lQ`L<mlT!5aEoj{-Ol_M?c~M?HtvYWgA<ne1u!H z%Zr@XH>jtN6=~!x{~Ldbk&L1Z(31~!t8C^f3P!jfXx(09I@ZV*7~2~*uu7l<XJiQs zpQgbzc)n(n1jVcmH#+LYC!$`Ms4P?Wa#e5^M;_CWtpj4dbxo0~%%F*G6B`<A9S#Jf zNQAr3Op*wXIMOCU+rH4+cGA&{o?4sueSt%5$w%YcJSza?_FkttF*+K5H=|{!*92Xe zXjz?TJX8%B%TdvIyz&H*3|a{dr<bL$v(S<#ntkEdRVDOq%dqqyc9pf{SSztI{EX)S z#MuCcvswTOovTvdn;shKJH>a5x=`AKn@WOQxivpqrcH2Qz+aBA5upXaKJb4J?GK!O zrGpV8|Fh%jciD;cyU^eF!vBaa=_WB$?U;Lfe2&ff*{Y?h%UuEGiiNr4wfMm$s&zSN zwu*Y~%Z!XiV@<MsJ2rUq>gH34qYXWb{F^V|4<x1%Z76$MKG=>ncq<~Lp9NX{7I?xu zL}yG#`Mmzd(1Ss^pg-&{SZjC=SqiEdV{Lc>9)7(O9}Wj%8!<Zl7d_z@m9J)SmUSDy zay=ywoHP$&SP<=_R%f69A925<W=f}}@iisNot^JWg=h6kH#*d;$QZ{cYfhT>meWGC zw&MF}iP0Gv$CS}A7RV%eK%=Vf@i{-^6M-M7)v7EWm%ccZUl{s8i_wWFtKUkB&@RsR zhD!zk-U#Olm6`Tco`sQ0Fh)jX*id||r)+L!MyQF3{xG@U>WCL3@4%&4?`wU|$PAgb zLx6^MC(@;8AkjNuU9BSQk@eQJ)vYqBzozMh@2julLd(1uhBW+`hX0TS<g~Z8&vp1Q zc?tQ$6Nx3H1i&Ej{MN^cSC~d#OeuFZcu*{&&>+C_G1$JiLk|_QI*P1I2f95}l)Yy{ zOSD!!DTFr45Sru1C;dRGNdf9*m`eP7T|q0RrDSuEl5uZuvQEK#@<=0ecflRoP3Q`q zuS6Ghm(pY4>-c+;-hsAjexEzX@Ox_U)EgexA}*QwIrf&b>*t2F6H$;jo=Pi_?jN`1 z3h`Doc%oJ_{Gp=}ZwS8zB;D~Sn1L!y#Vr&A@RQNOirK)2d;t{8M{j3Ci3J@rdcEa; z1`nY>AbRy+rflV^lpHg9M=)%mh%0aTB)TJ_nq{Ki{#8ds>4_PUrBgS^?qAomJ%*|i zWcQXcGs!9g^e7H?;zt~LQZ;HKx_Izw@EK?mkEa-5@v8pRPO5@CkeoO<lAbZL(h_tJ zrD{8=Kgc>x@7}nPo)v#noW$}&mc~P-lXocB`v6c^v=L+;p-N^<TOv4aRNE}nvqZHi z(*6>i-IckxthX=xW-xosXtvod&0w@fpECCD@k$aiyeMTf4_l)i6HdE}Vn}U~gpf=C z7~<V{8BTN22;SzHec+cDwLBUYPLE%vJen@QwDYIIFG?TxBex0E&#I*Fx*JCMC$SjC zD17FjfVBifuUJ7Gg}0Gxkcdov6{+YgXY@E=1x6b0J|!nyhn63D8p(Mw*hTq*aHud- zld=&ljttAh&LZVzR?YLRK!R}2hMOpgDQ$p^*-ch=?F>Z*v<@Z@vL*v!7{6Z}{vb1G z=BTJqKEdzctisco=;89HA`21|q-dP1xAPCtG_eo#aIBV}eP*Rc4`-}QmmZq7PKzES z`Ou+<&(Ppb3C{6#1gEBl1?{8g;T}y7y}<IC9+(Chum%rz(*w`W$ZQ)+50X8g=z(Wr z<nce<KpEEd=i*aDXXI3yq!X=)v4O2M3~(c<-HRV)%XOtGxhdl_PzHO~Tnh$L+xi6o z>-N(j(cyL{rLlL%1QB4N=e3m22KiD~v(9)?CxV7OdYbBUxfxJxAIj$6*_Aly0Fl{s zSP1mHIhmE?eU(G~)&2RD$fd*t_+<x0fQJ4Ye>61VQyZZBxYpMb`=iHe`g?AM7V7)r zuX^oaO^o_{2zEMk1#sYxM*r<Svim|Ag8a8nW4^*G#OOYH$|+wZl$1xBUCvdX8`Xo` zy|tU8BHjQtc0jr1o=pskQyTMfGe?|UREU5F=Zk~B)T~VWL^>?!H>0wV92Eg2fz|Sy zP6c-5s0g2PR0Ph<3+E#p%3IFYtl#nBoa;9Xq2!E=rj;_-S~Z+sGF8~!l~_lUzV<{h z`qjG@OXk3(3omw}Mr00ZmE>2DAKsT@eM{KaTmBy97F3H(NH(AbPHBmy=UB6m8zRO! zWTdPHB*_36j2u44RCg8mU-GoDj)IpKn<rZN@=2ki<A_awi#=!Y4c#|TG_EzuCy3hp z+of>!&30{{wm&@$eG`BYC8XIUie6KzKREnBrG-GFM%yz4HbdU3Q`x@1`x^5NCMzI^ z3`B>NPxH_zQ5F=s2VYGKidf%H3^gc1u*JIUVlBqCnH}l{JrXxCo4mfR0jW%zVUl(i z8`HV^0egv|%vx{FG}d{mjFrZ~9<dbJh#iXkAio4O@Ml}#90X8gl^-i8N8B^At)>P4 zp?6E#3D7D;jMz^~dJ$yLJESHwP4j>>RbD5aTs0o+tMzn?XElV;g<W(YBX82M$Bx$c z8+K7T_&e`@2RL=YUD6-uGb~?I@<c%Bl}m+@s9=obr@zulF%bwL%tjSHvJ0L&{g_yz zY%Yzm!+{LEda>Cd;u~cbV@~mL4d4`$)f9N`cu9M_9^qn%&zrVCoA431n`+yiU;H); z8ThBcKkRN#C4NJxCe%>!`D%Wh6Z-MJTFi^hmMCA%!+f>qr27@%7y$bakCsfjsK-va z2k#+dPip)WIOOR+a?%Mq^G#@GZxEh3el2YdK+fvGB~4~XsMvD}rD7-i293DqWDW2+ zddq(z`fxt;4CaG@FOX&BE&oDYyr!knKzM=_oh%=ylrE4=X+tbATk?f;zDc-`JFhl4 zVtJ9t>5BDSFTY0s*uA#<8Vus8IYT+EyZqg@2*XX}MsF+!MI5fIYwfH?ggiI0P8o+N z;edTe$u6D(yn!n6>A(?)EUpI?PjE}>4zPj$>2!+I2zMyP!vLAUVsjBAy}PeLCY*9& z1c^zjOCw<>)DpGO($gjJhqkuK)t2{;ev-6*p`Z4rwhtP5P0hb>{M~L^O?bXuw7dHe zMW<oVoa~@6#b+uBQ=Ab<LXl?oJdEd=CPJbK9TG}$p&tRH8SR$fW=hZNn;2$vbCF=V zBu#cZBYq;E^7OsN%>~}Pu?N@*Sa~99GV!W79Z0i*)mPtfsIU75E88sITfPz3xjwwk zchLq^4QeMSMy}!*Xw{R%iF`Z%qG)$V%@{?smp%!q-A2WDhtw(c1GS(6L^nH7q$_11 zs1Bh9WDaoV>3r)7nL>)BH`Dy!$-5GhEj;?w^r8}g$i^YfG6>=4u})_9-emcj3HZcI zx*B6MMd7V18*uXRIG_4P30Vt}S=7Uvga@6c7UGf($xTfS8C(n~&JaQ5EuTW=EykrY z^$CZ8dB*cGN{2_BiO@jQNo~k(e)gj#kS8S5fsK?Gfd-Cx{uWvtz7yZ*t@uS*rbF-q z*bibACI^p5M#?j5`*xHBHND<~6YPM81YwS6TiFb`*Zm{0y|7B}AC*&`{oBMhQqEtw zdAVjzm%ZS4rI^1W=k+jyg>n#EHNzZitbIB}4-(ql_JXrFQ}U}VfpX5hB}Cf`QrpDy zdOi}y%7nNpENv)`gbv78Fy>uL;7$%HD}M~sXL;`=iNbOuZ{m*Lja=pmh!Z#HI;67x z6%LTGPKRtDi>wKqiPi67MhsK-MzXfySo_||n4RwT<z0p11k>7RWfg}-cya0@@WZGi zZle{Z1@<Jdbh6dFTN;~ri!kmWMCxU0+!G$inV+`rGArm-kzb)lZ9BoKLCa?i8qOa$ z?_n_&#DvvuX>Y|`P&v75ni<VozL2yEe-7fpdQZv@&mfPTYMu#A!Tmg$(OcfD4liX} z*?+Tn$y?q~F%mXEGLo*Xty702%rhC6bF0^ZXCx9xdnAtQ=8+aQGeDzN{E$X}AvT() zHZ^aG!wtzt7jC&-$e$3Z6Mr>YzsLHNuw<%x#pC=7F;;vS(%8a%1J>apvPihSHQ`P{ zaNWs&<;Yi3kv;Pck*hNe)i}(e(HP!EGQCgj=os&0pyw+J9+K(tB$h??J=5sCu^Kd; zM(0O0uM7XOU1^-ZXX-D0ot&P2aL}@(^aEAQM<WW7h^Hd*7(Uy3@xp)qLupiZ=Z7TH zr;EUWq2jKC$76&X?qSiwD3?2M_*H;?6zCW~%=x>_RV7PP18CGxv$MDScMwCsIt(0y zO(7?;o*q}`&ixj7)udn8JD8_|$P<c=*A!<yf`RxGXIOA>=XBm2bvkc0HuJro&imf2 zN*AzC=RNNcn`u!3W*?Oroo@jKr5=!NAJFUUdn870`H}cy>*3p!tjoa<L$z*MC$3xM z&591-?)eP}dhiY*$S-^kUr6b+KEnpxS_Oj#uT$jhEhl49I^FL)!*;$l{N9p{6>R1$ z*MXf<K$JhHQ!t4hrHZlPjU*neGgml(=#vN#`F15XcYh?FL<0i7)9wR+!HgZ_J7LtB zD)9x}h9)isGyA<`uVY(u`v(&TeP|p}!reYmNx0PVxu3dOaTj*Ob@)HVLTiV=Debx) zm`1c~fG6I0;qsU|FFfZLQEcGuKPB?1w-dG&h(POdj7EY94+V(2gG2jmUQkdJ`4tH8 z2jy+<r8|Gt@1}oV_?3-au%rXTz%vbbH69;Ncn&)&J$W_drsU+6GNqN~#B#tq$gEt* ztb7)_(4fxxErHBZ`cj^fS2#AD@+w~$EjckVi$;rIWY!&MYJwlaak=0=DCl@K3o;8= zvvG>(u>WW@c*`?zKVSvHK@gAmlv~t|u~ae?Z5aM7W{l1c8u^E&6kB}NU^G6h#aFIk zL6LuQxOiSt;;YS#G2-j~2OO?-iLZQHQjuX{tAS$mVdMTdhl@{#{I;qwHdi<iKN5;B zAHbAT*;_<dezX}g4DF~4K*d0T2x}~G5TC_DfC)(aqC%d^2LoJ20rti3hS<+j!b>Gs zdE_$Hgb{e@Zy1J4yQq%VRbbtFzYPJcmf1oaP!KVNBam>q^-sz`A@5f9_EzL_EcD0L zM~ZX!Yt#}Se@`nBVfTuz0QD);nkR7Q=oNiPg<}r;OQInGeVzr@83-PM?_Fsof`E76 zyX)qhk=`Gt=rmoXl1Q`ZzCn-l+UkqBMhFP8qR^a@D`b4nz?Cbc*7K+=hRQjEke6=L zO7gbwRO&s~+jqygzhKp`<_oAQoe2o@qY=QA{a_9@P#j2C=!q2bkn=Ti$hoXH*FM;N zKvDG&fX!avM{Ep)d=YL-wDCH+ryFLb^H$u-=MXW1`8O(2X!6Yrx5#qz+i+G1&#Z*| z#eHmLV)4(z%qXtz2&5;jo?McwxB^n72=5Sp;G&;IHlaHrrq94Bep_qub-zp)gwUHj zOUwE+4K)FwtgC5-oeWt|4BI0p6DaE|?iGLr`BRQ(fGWW2d;WtoRhnTNkSj-v5@$%Z zh{{-`lJytYV=T+zW2mJwQ4W`nYig}W9O7m_NW&j%;u(F$sr@yzct&xRfR`k6VB#6~ zj@5YA>TBxpjK}|EFEKWrL0t-Hcf~W#ijHSIEg|B}y~Q)W#TE}dr5w+A0Da!0;u-tk zpPY-Mwv>UNnt$?!NKy<E?Vo%?X;AO~XhcwSbF2jZ$+q7MSJkyrqD+&$`X?XzNhD}4 z#a*<2@_ewZz`*z?%azaqj_ti&$u#&U=a|LY{>ipLBM03#|Kxz{1fZz3*8a)OcVbIR z-#-cev&%o(8tB445!bDroPTl#d?Ely9>3K1Ckq4?vaxIbWb*|Mkd1$`iSrb<e;bm= z{$R*}{>gXn6vvL|pL}h(y}P5ARXYAjfkw*yNlmXmeIxXdz(3jUH_eTXew|RB?%h9G zJ=&3{Y5OOCT%?&ZW&h+O{}Nu?PyWgNV#82>D=cj!{>dv4{ZHVZymYbBJX7*dKJuMr z-8lZqCHB3OF*|LlKMoRqLLL7k;YHd@-amPQJvRN5Por{-ds#&LC;j$a`X_(JFMvS& zlcYn_^#!8e_$ObzsUH928@p}sq}As^dOq-@_D|kxo)Q0Kxy%^fKRM@io0pRHPYUxS z=bvo;i_Hu!dovCD-T3Rbk5K%On*IJmxwCnzc)Kf|N8;_rpJ@W@-tt#~6h^?${<jTi z=2|h_db)For|#hVsV>xVX#zl7uhcK*nWsWmFyX3={qw?rm5&#ct%$51P^knWORSkH z1m-poaN3XXNI>0kQ|VuzPg<iY6qVk9AMs2xS`0|Ht^vsvPhd<Kx_CE!R|S|_?eU%Y zO_$q0TL-MlJXs!=))?K6YOWTo9-};fQCgZ&j^-$**staABfHr@TcSS3j1pe02k=&$ z0~>+UHMJic5wJSoLBszian$N>&DxITs2|!tI|Zz74|jvEm1HIS+Ty>p)o&OBX%fOr zd+>wv+-1MoF<?EZUd3m%5}3Zi*B)`dwwAA9#-RJPc`>g=_}VP@YuDiiK=XZx0<gE@ zEL;HC6Zq?YLpOC%)uQw@><_8-7rYNhr$Mt}n9<ipp+kfY+*eI@AB-NI#|;08>DTk| zLbWXnaq=IU*da)aQ8i>dJ;agS=+`3$2K)OB@q|xBC%&63*%nT$8r@%I0_kIgC8oj5 zha7J?k3U4#w(20@Iu8fSjEv5z8qy!f5bs8Fm&y<v5lnr~3^hmg*AMiX)I7%g=RPHf zG+H0jKr5yZod=rbO&&uWS`wL!#u^tA>~I^Cp=M`A-ZZzp<rmT-?VAzmWF2vhs5(4Q zAR8U{RG7>DOkB;e!~XcP>b^`D2%n7Wes($>0<$;5bTsIGOfqUw>jcQKK&uZ{hjm3h z!As2XX30O!EQpgxQ2U)5^-=g&{x<-kfJW^kLOnamuua^$=-{S`4%QBF=s*o%Xkmey z7E}VA9PrMQ-XDhoo?*Rzl~xbNBhH6X^9*;kBOGUuZO9+wnxt<NQ(K4yqQuYU6;>Bu zf!pN@(j<7e3-qJNJIpzRLky1-Z#XHF&ms)71$onWFydn&78A<gUxTv~H!+||QX8a` z)Y=qafsxE>oFuiwn#c#^dB646VAp0)A~}^=W}xIV)&8+Sj<^RA@#sdp&$viV$XDA! znxyLQ#o0$}hJ!uY8VB(Uj~Bg$bVZ`4i>jc29QaLxLYzkIe~E0iXApPC+CZa3Ex!{k zOgcVlo8iB(C_=LVsJx(O`e<M2@1?)j&hVj+t4aJ1qTL?Vew+aoVgxrERER39#=zT1 z;Ei)P!ViL4r$;)@0-_D`VOmavNAfEh;J=76fT(c=pNpUV$_7znjq`yIHG)>u`w>JJ z`X4+8QOD|7b^*%Ac7p2I<2A}pfIyHf#an(TpKd|&Z4@~q|B({Ye(T7o_b6m8bC5Ys zdyyNRrVxo@wKbu9^`K-G>QB-HyG#>o-j!-QM^t)%2{7hZt=38B`(xEt<-pq!J}h9Z zI>c;f>~H(qDtV^4B2GR7L5&x}GYOqw&iSK#kt{T;ii}wNhjlRu03ri&i>#^gM-GF> z-E>O_U6%3Y2@ZCeVH|Hcib^u9r?5a`W;%Z8PjJP26j%)KvCPi{R%ekTnII_vxw!OD zZ1CaN0#}k9Aag19M|1?Cwy`F3E<WdI`J512ujB_ufPU2K>aO#!I_uoj5bJEA*SQuy z;>2e35+RfTD5RJUj7l+$l2BdaV0Sh~<sQ|g(8wlD0}8e3L}`;ZYH&Mro~^2(B@XH$ zH(5Pims$odWy^-IG@*rcSs3+;a4F79tcK80idg6@)@j^@C$+sCIz6yDw@I!#HPm|J zOAbL0b`SoEFq@TKJIfz^meco=betpc>hkyXhHvW`h&1wqFK<Oxwfo=v8nqZ|fMpa{ z@E<=TE1na%3O!vyrDdlySa80gt3iwZhzy0}F4QJ+5Dv)kqI+|sePry?KO!TR{ZW%0 zDayn>Zv>ssLd|%OR~ts&j5HP6ti3EZGH6j|?M&7Wu=AiM!<!HWtsa3b55_PuK9nz( z3#?GS*dJb%^^76}7s=<-OMFVex}$@me|5vcKm5Bq*hLnr*nymI9{j<=31`Y5IYrfP zyJzX7W~ss~qGitDJe}-$m?AM#tsoF7@t`l<me3KAz7@3#I+wkY^%CSo#x!rIL4aJt zsxg_AZ-X`+{on9+*mnymHmrVn>S*7pUHFgpv{!H@vH9kgC5qsy9*>m(88~YU5k%8U z%;nr%^o_mm?t_1`0Gv!(o-n}Ba%%punRDztb}#4a$tL5mc8(K+#Kh=nEX*ZYum7Bz zD`o8#SP$3_B11FF*80u}=1&7DUzS~anLm01IpSCvxw#M_*r@c;)C|pAt>!8rH4s0P zhuT$QUDubU9LV7vIG<015@nSXMqLm5ab?GHW!ToZ-E&>PV!F#2@ef$tvyIf^i5uak zgvey|(NZfvnyfE6hD+yBfn2)IAi5FsVvPYfDPSw`Bc9-rsJbWOrQB*ox#gr|QEZuR zvxx%+{V_1{J^f^Z@8c0|h)RszHf6L=!!1UkD!*LGFkrd`0Dx1gK%g~)0#-jQlQJWl z!Qh7xYI}BSffn)=732In3DJA1Mvbp&jQ{ZXtH`e$10z7iJSt%Qv#r2VK|j=<V?1q- z(LDG#BwF=KH+ND<(Xv^BrzjyQlEC_Rsc`_<6F9~Udkj2UX5VWY+%4M*3fOSm9nQV; zR8PWq=+&rf91~3d;yq+Q^V`LMP5x;Z(C}XY`?0Yd8#WfGAtjLo6QQT%Apo*&@I+8k zMr8wCtdLmo9jP~$_5C%1ps0q%04jc?_)c;wzR^aI)+0U&iRQ=Pa2b?8pi7irtfqlu zAgo8k2CMW#`9&h1s;9wkQe`fcVw1{u)ef<VvURYBdewr7uE-5pL%ojqm_w6YH+hCh z7bi*}dgc-0IK{5-EpHB51PQQqDEJ6ITVm1H%b#e%@s?KuWZ<il@D66lm42N5$g6}c z)$KQNJNP$w5kX(;TIWS3j0CJ({PG^`EAn)KyoPC|#X8Q<`;^}m_6nQflT3<gRL*F= z)oqdOM?#G_zg}|OkQ>5e(E@e!Y&Vqyexhnv0)-XIJQ7Bj>c)LM6tw07B_PSk+M$70 z^DuGc;E6Uu2sIcA1SgA+&d08YZy(rI?LFZx&domk!Y|`i+spMW=6~z=oN?o2)s01u zcp7MiUeoYb4b<}E$i70JP{Hw4$JLb|(Mpi9$O<pBl^`esG394SiCB=OXrM-zmROU( z#46H3I}{zjh2IagVV&{y);1waX>+21TG_OQ<yEi?vLYBgQ>^c%mF>b!BEJLEVZ3!J z1U5$X@Iq)Rg?MDEH4?Q3_}ME`m{~+!*dNR(rOGL?K`BvMA9+frogx)miS1B+O+&Qe z`!l`^BczcBv=*)0ZG5B=-{Ki)l;^kiHu5~R{ria-$?o6UUIg@*48r|eGV9sYWa0<J z1=x75S4jyXuKG)0ttucA0f_T6sEvxJgMb(a#hggyQsByu%5X`q$c}s{FVP`c+W_`} zFf)`{Z~5)G!~-xN{19>;7A$Nv3RPt9ir*xU??JhogZwZbI06A=mD{c^Pbuq@v$`Dk zTs0p5p{fN8=hwAIw{?Lkh+QPdpw?T?Q+us701#I}krHP|<}$#zkWQ5hXghhE+?jsd zZuY?G0jr()qR>Qs%{JUKyVh`gFAgi0rQ=KbbII>;$q(x#%W`FxGFsx1&T_rwC3Fh) z%cveknSswn9f&N58&{m<+L1fW#wFewM;;`M=OorAa$%#B{@V9UkN%FoBo+F@w~_Xk zBQ*eY_vL#c1M-0co9?*X5eCqZR63FiC!jyI>1Bf$Ba*5>G6pG@^==euf}uS%YnZOE z32$2u!aopMkFjx`yCRzd-wVJpf!iOzMW1yOazd2JRY|!W+zoueoiYprxbTliGc7`9 zX4lTNO_~{pJ9O3zYxS1DOUrr!;6O5ajh40A)LoV}>Y+x7N6<&&#>|z?@o>f6ph<w? z5M=jYeWJ8V?*{bW#!-p5lntS@fJsa^9rFUXYw#1t+SCjOfIKjTAR=M6mCeb@kjjt~ zaXC9!aG@>xqK*N6_ApUe#SqdeYdfy|u8Y;mo8w0u22tFh67Cy#D=vYOg(a7E!asD} z7pk4#+VBs<DolPG&fCmv&I_zQr)4hdWvurNsC~ilT;i<U+F3c(<4O7qNkNoDb@Nud zt|n-P5%9GW_3)+k@TX(=U5CoeQ<U;xjkIqb6Ieat%|m?FN_(=7!K*P@X#>M|oh9bs zQ~6b#7n?XbUDfMDNZgI-bG@7HIKgmF(p%}CQhO`)Ry<5X&~>POtL0FV7^;PsBgalf z(sH$25zEqH`X(%Hb2EG)fYNTbzQLRtz6E3gLB$$^`2rG}*8}nJBk(@q&z>5BE$o{t zdwmo=pmDQ(@CD*&c0ujz{My-hI9j^;aTwGX){dQI<9G04YH-$i@UoGIqcF&_OBG^K z2?1&O2<|HT3sfFDwzR)aJv>2O$F&Yvbxv@P5U;oplu~~(X0WGQfuub>-GrFwj*ObF zU(9r;=;>bFYN%9AH{c@jifg*fObdk39@P!SWixE~kfPVozarZMB@jWrNb&fpS(5Wx zXnF!9mboQ*&wrqs(!pjW(7_66?7^?_$Bkorj#vEUpdy@kQq@q1767i`2;{;#{2#9& z5%_s{G10}o)fU5fEzy@6ceSQmh7lt3=$Q6n=R@OeeZAPqX$GK+(k(t@QeJ6~V(Tjz zh$Iv)w)SMnGx!mNK=VWf`Xe)QBXe^i6X<{TSmPW2x3(x)4gd#ASPP%4I1qeZP;4EI zzFM&TBfBepMnOEkB*$tuU39R6*Xhq5?kXDpZ#6|KAFQ0075=i=x(+NK*-g>?GrelX z)-Zc*Bk;-31A!v((ZIHN_0m=%fu_A{;BX|Npe=k+5-(>z3AMmtYsn!ZD61z?G^r`Q z6&K@2@#-~R87apeDTv8NIg?G`QeKj~1k>rb+YNW|=PC9wK7Ge5<LJ16>y$~rJ?;Rm z`W1*oe0TSsr9KqtT!A1_Yc<{=)QtMj;if;8i&T%;W@`zF=oOJ25A)P*noVrheywTt zyJHN^@@0Hj9Dx^~ZktX^Ot&CIfa(^^0jx<^3GRcXEsCv~0xbe_L9tcd#L(PKfX*L7 zbAIbfxEqUtyKT_rgWB>9TA!t}93+zqlJOF+-f|ZFSIrwQ?eIL-tymzp@PC8UsB~yT zba4xi5XC82^OV-u=|INb@@u(bPqFp#X2A+pJRA3CLJ7g27x7yju<x8*Y^`c+zNILb zdoje&<+-(&<NOFWC1zsD&}fBCnyV#`!Q!l4=c|>Th97a*#qdc@u{8#>7(VIBHFUPu z(5~1z(OyIIU=h|(J=-Dq@S|9LF|-z}{%HKUzPb9)(4nO94>y^Q^ai?b!R-}j+Ercb zyzZ?i#Sh%@sUf=J&&CiL@-1)<6<fF2Lo^T0;N-u7%x!)vP;ZaHtcoN;0gSL!9d$Fj z*sAV9(9l_aa$Hi_j#87N;Bt(s#7`6{{8c*U<W}Ej7z+#(c|#-G#X?`AiMnHNr%}Jg zRD5dJ&mX0@CbjI-_s_Le1Z{0Q-a?}-c&y1NwUu~41u2k{jT*zG{!!KpHsm92R?mgc zb)E@-#Qf}*ZyRJX)f$G3(%qyg?Yp<kJyVr->3Jfj)2T|kd20+jQ_U{Woj|M$k5uqX z?L3T%DGHtm&conggk2D7AGKbr5_1Hs9G&Mn&_U%1sMB8-_MQn568;FjTb$~Lq=0*y zinQNYq|eQ=Za`Nq(S+5Jg3nsrfK*WJ-|C(o;Uc^Xx7f1Vp}(}wi@+f~LV<nq1!9=_ zbohLXD{}8K_%qHCn9&o77`)W?J1I)I%7EoI#Gq9@3{*JURpzjl%yj}u9RP+U23Cc0 ztosJ#I<lRzC_`pQ7%4|sn{hHI2LqBDGEt5FO3iDLgHFZRems?3c@VuwG&JsgLuP0V zl9rY^DyUhRRdXDi6Ld^ccwlTjZZk=4UyP^yWqle~`of5Kc`K%Y;)Cx&R4|A$qGAjJ z1HUn508fONtFRjz^XofVvj7c%u(h(2BxylQ4SZQPz6$e9MwUWk?Ibz;#D&sj?>Hz` z`*9lb<TH)U3%jNxPbwzWBTppTtPu{r!}rYqWQRU#t5A%SO}Ik{J3!eH+znW1+c+xR zHx?bd?3@5<?cVakv0@nOR-egg%Q_gpO;VWSY|$FNwBY<y*5ECd&a|7Xj1~|_v@{nm zcy}&%laT_%oUy1p=&4%GI|o1ie!Hx3oUAeL5)(3qiL4hJWe-1eu(MdzI_3)NCO`;d z+hx2i6W%P5X>0uzm`=l=Q`81UO{gaqxE3UD%%Co~-&w7R=7uN8HR*V+z^xhwIn)~? zJa3Z_jnUuI@b64D{GXQ&#S~Ahhho6;AexOpfX(#B;fuYm3QKlyJmop6MUou^)t*TD za1K`9MCHP1kKi)~i)@d5{?rEW#^JoDso-{HMba_y030J|%VcdrcmY3er3(Q+AG=L{ zE@E@^?&<|<bs=tR^pBiFBq*|tN@%$aNw<c06+PrwW%zy!o%oEX$&(_l#&Y`K-f}oy zIq3EQf3L$ULk(i?VUGN^<9%?3Nj{RwTZkJ<y5US)e(xo|tFXdkCw7?^8II=5)_}GD zsl_dnU$@i|q^;EtK+#aL6#~0I@hDzlnt}eM5YRbgeGh`r-db~2Z3BdRsM2o%!$L-b zMflUY<2A#_V~O(M%?Xgw&<CVMdvzbej%$5`&mvauzz-u%T+9k->=ExYik0|1OeAuo z4ZiA;p(5z$?RX3&0l;zl(t}X{Z7-{N@C7WXItZ#!4oQz>R`m`q!z(XLhw@4BR`D`b zu1!`Al5V*iI+>X&=Pv$A>^-X1ym@D?!EGF4Dt;hl^>~{xajcri?%PV~wbA7r?_g1v ze+E%RC!F^7RbX+}6BC4@=Q}_X!L|UNx96b^<F!uuTcocjw8MYD!eJ<Mci2UT{q7N% z&8EcLjQhCDVZzf`(D#zM0GO5p{g>LzHVZC4Pc^)!^sQi3i)uP)nd+?wlQ}n8<@YHt zazn;LxN_O0>Z9l(557l?!0=ZNAubv18Tj5ugBz$y<ze{oDX0^3pUhm_?)FkBnQj?k zBYm}cNRZyjeyDkH0M=VQ%RR*d_<?tigo_TN=95Z321}?-s68jyWdCd)9MAW=;}z6I z!tjspzpq*!BOr`?Ks--t#FNFBG-U6-B<`=24-*bm@_ljwUy?cvI@XsoE1<~8(TE-8 z4ym<OvqgWRrOyo8<DeWL|Du-eYCv$8AO5GGYg^d%Q<bFTda5RmkF=$h>{&{2Qr4$! zcnf_EO`uI}D2eR0dI1}BG9f=!c@mzYfC$cUD8?n8ORPOeai%4kBQ7H@ILG=D%Lh^p zj&tBOE@1_eBX87E#JuZbpzrwe(%4^%A%F<~?Ky^rQ;XkyH#T+oOr=y}ca+a}KVMfq zgFCf+_9v3hK9SG!w0zEne7=yl)JZ-Y!B7CKlFiHGVg&tYq^nPkC}&#4^Z_+mqsA%O zT!0^rn6cf9S~h31kQ4}yk<DbND_=7F)rSJ+68q;-rG3!<&;HplxCTpeGOtcU7!xXc zH9ZeTXfxIVK`{@PIP_um%M|_h&s2_X=9y&KcbW&kBo{-s6hUK0CVJ^HJ^>3T_8*Ed zb}LZvK<4uScR=j~PV^ieGI}7x-5b<nZG+h}Y#mT}xF4kxq8^v?<ku3?s}ui6Y&N-m z6X$DsJ+ec3^g3`%a`Xy|4(8r^2980k67^?C*zZ?SeBjnxU3?5}z*BQ16bu#EleX|% zBQT{hX%0p*m*K$A(BTL!V-UQiqEUXJREk<$n|f8D3j0MqwBD9YBlHf@di)E(19DU( zLD&zpaYBfor-HqS2o>6!i9hVb=Iaq>Gb)D)@O2?o&%uXtd(FlVW&Vl2rOiJ^i{Ahz zD!K^aONXjOOeY2Z)xN{-RL812qk}=NAdV*5vd#*yFJ@RjpP^Q8D}JaIDBZv~D0OZb zZDdgVXCN!Cs+&DG_tPg4zXOR%ug<pi9lCw8;7r7w?g>{lo2_t^D&{Rmv_+Vsn$<HD z9QB<yap&3?3O4&)8uHd;W=}`#QUN<PdAo3Qa`bEZd(_c~yFF7^-tN0TeBE<~cIwxM zzejMu5T};8y<j0&AL6q}o$xc(BXj*q=El*7O9$Di(WRD1F;R_v0J|zE*Q*crhkB;; zVLCiPOe;UeKayn6MSTZ?jn#_d<z>&+vZ<<#!EF+G*^iG@Dh$-m5JR5TWt>gNQgf_> z5MTyb_mt|YsZbul{|rGY3$KlJ&nN;e#2i7rSJj+`zsnGF&!{<+9|h`WK7Ob%E~9xh z`g?pS{D-$X;#bDmGJ#KNr-<Cv>NI-1DvdEhN=IGx5y7gClAzOd*|P##wH$Bx2Cf>J zhp0UnWwgF{FhcgN=o{1hDZuDYBWxIj=_n~c@v>M3#rQG0P*6X#NJ>xdQIT_eE55H6 zh1b79@Sp+F@4HgJ|3qED{dU1+wg>~5@~cNf^Ck4mx6e_^vj?Y4%lp*Ny<ZD`iGF^Q zJrwox*Odt3&iu_+4iR2rKcw~ZFA$`)r)Z<5n4qXu^z)PK7eqfl*8ZvW^ZOX&tw%rq z_J#c?uO?}ley+8_S8DR=-P4nkSCRsX1WV;1^)dOAJyWlF!tA&1%&vtXHu_wVKuVu0 z?04ppFsqA+qmp*#3s0mKD^;MNertll&5$6qK}Y4<g3tlw5s&{+o8=S`s5N}J5=Ubx z4!}P;BgRz$<l4%^v#2mFe%go{diJiHBwRI>TlgjRopGX>#oIDJl=Ng~`LJ%u3pK%8 zzLj4o?g{I8K#|P12AA|&9Cv_H73n_4#u@&ai~0R2vzYl<%%ketXX4K>UkF`J<3s<z zL;QB;Esw*!Yt>_?*HQ6I?n#fRMJfq&ywyq87Rm?T#GXU0HdfpK2JA#I_#u3_WdC;g zm`_}-2-obd`=B2-^QA|xorfkzuL<<SEq^ogdI0sqV<rl5iGFy{ld0;5m!dZo(auCe zmwq@NA5IcWtRFrIUR0YY^}~nHl0}Gq_$T`g^}{9VPGbG=TU3}tui!q=we^o7Y6Yq3 zhdz65>W8h>+@c@;jBFpZUh0Qd-@WLECC;i+)DN$GHi5iNgMN*_dss`MU&uDdgQVSR z=bdJ6l<^|2^mlKCjA0N;nkjMD>hxFb5mDMWc{bL69blcQm^R4R+Z^c!DGk$RRax&o zp>}*e@*xUM<ro3SM?R!M<k!+ndc7}s%;4cZ@;+_gv+PStVcdA|oHf*3@|H`(*v0{? zhjU3nT<>7Bc0_kOgi`3&^T8Kq{M|R<`vI@i{M|31t-A7aoB!^E{Mn=Ro5~jH$)9@) zlaoI<@oEDx$xtOzpeH;cSnL=ra@Ag8LVPViP1sOW;wi$D>cIPO6EVFdlGp{SSLeH1 zs~*)@^Om#8R|FY`$<+7k0VmU+REcy<#e6B$_uPM~B3~W?whRN|yPjyJR6TF`B6T6- z0@F|;G>7V)PpwnbvkQuls0E|UI(j1)@56Cza001Q=#j!%0ZLbE8W7wQMN1oBR}zV8 zfTE=%tRcVzUOzO>zJ}T%fWAJHvGgf7P3;3c<!gHCgGRPkdy4X)c;MdTfubU&0Fsi} zM#cN^-sC|<YRjpsQ1y}!7?_yx?yZ`nnj?7Ot8GN7fnI7aD3XF_<Ghsy0}o@S9{+?f zh&KV{+l$oEGn=ej^zzgR2Q-Otte5c(Df9F<=(KLQd7u2F?Tr50)X;N^`tK>p@w4a? zfR`kCGdo}q095{<prQb}uHs|@RJo9HpzZq5#4d4;xyWld%2XbeJoCkLUY7MnYdrd+ zYM!p8ooOAi1oi~NOn~yeAZ$7B1%?vEi}l0`gRw=pl^x8TNuQ4-9Y%%D+yCV3>8(V4 z-2{F`f(4S(Kqw>@>nFg1D#p{eqqr){1qGwB(9EVPe#QTTOGZn*EMN`%)Z|T_Pg}0F zc_9=C4&u^Oh&-xPVZo2i(&UK09P2_^Ny2?%u%n$49#YPLybpdzt)s}g6xVr=xyj9y zUyFLY5}L(H`!|gbVOZmI`2D<->g9K0lx*GsNYB4tXv;oz45xxJ(LrwxD(JDW&lMnl zZv}ezWZ0WTxwI|tq8e&GbOP6=&`bB0XsOx}xDG(NUkNeRI#@F@4I}kLvI#DEk}cl4 zw!ian%_B{brc$lLm-BnmtHe6-zp72*&v4|E(%7XL?RN0Fm5}g=)?iBLASfK=U3yxA z1b86wyR{y?rZxxKZ%1K7u)|cMJU9b{RkvX0i0}D=D$H0DYRL`ATh8OGF^AP0h)5u` zNKtkl6U3c<=bI3Ntb7lj8zjU7R$qHHXHhvi+Wt8rcz@j0-2R=tn#iY^xfw?db>UhT z0B*Rl$iy-n%aLyTHIYy4)wn2n#a~?%?d)GVU);}p@p;MSi|6S*EZk7h^t=Q*ZT!63 z>-#FSGt1f=VZOL4i?C27aQLjbl3D33zn?gL7%(iheg=gLM!n@cBP}v3tJt~*Rse%` zvyc!Fo>y#rkCw8g?CGMId|aP376F-};5z_#05QH?$pg<b*6<O#xlu76*U>)@?w1hl z5O`!SQ%Fz3sw`x6z1P0x0{>AfUEp`gleFO9Rm1<MjCA1d?NcxOi)EWw{SaY|bk-;g zgzl@0fef&w8v`@8*N1^EaOWk&zytrPi-8-k+60W38U`LlhjybuDEdz$->rv+{Jh$R zX=rb^^l}7V{L{={JzB)nxm1Lk-m8I)L#81z_S|EB4hrt3$gmqce6m`BjfRsJTMH?+ zkmXj~Tc8)ND=H{XD4=$6?B({@gA<6O=HIG0*j+~{)Sa!L@i{<Es^^+@de}jPMu?F| zY1FH>foPz8QvDyn2-cJQ`DVGgy!}5t1TV}fHKpy2NTSDXF!!}=oQx%<?GUnCpl(UW zbd-;RUvlZ*q%Zlt<=li(wmvss_0J+RK{Vtc1rs}h=uz8%8&{kV{hg#yR1S5DQLLcP zjkJ*0-~oji5ASDWqgKQHQ1{qjD;KIb1IZX%)G;}v0;jj%5?my^-*)TGy9~7~#KcTP z8>+X^OBgi<&L1{Uc+25qsSOrf=BBCZ5NM&6MgvO6b?(Btt%f~`b8q>L{D`^^!XUN& zfHeYRbD5CV=u#4%td?c<FjFGl2j#G<{geKjWhgEJ_PUewJ?ai=G<+D<!r%X5KIdSr zeV6&^tr(=@eR=g6Z;ztQyJ3C#*U+2zbEwWiaR~vQP+m%?7d6^zSB29w*<JR#A-mC} z5^Ms=r!rsL-Q7<MxrU8~y80<Fk$Gdy*Gyyv!O=HBi_Tk71IPnheeNKoc`LWzr%Ezb zO^AGzjl31tLQH8?ti4kpM^Jhzn0&2qu>#k%8tyGWmtqYVxmi6-1dqlgOw+KRQoIK6 z31H?j_i%EyBd~L}^BTR4tgk!Wxzw1KfV5uDrSGxm(#8Rp@UMVj^q!6oT?X4`FwYC# z2^dfd`lF@KR;EaIk7PcM9ow(@AhWhn<U?jkqkyAUf6z8H5_y8_|Cfq#jp?b@4=baV z>w40e?=4=!y6$o=J;zJ3uA`ib_j4qSie6*E{+dZtQug_OS1`l@f?6ncu|7LNgkp}7 zxb7rCps+qNZE~L>Q$wFlJbF^H`4p=f0kq8j*`s!-)cPs>(9PbVAd9ri(UpP)V#GP_ z3_!wKrR8xrXyk9VF#_Em8JR6qlf&v~fI=V;)-4n0(P@Fb6Ih;4k(Ir$_fl|=w_+&~ z&J$M!Vb|anFckUCYV~Ks>=zS1wV-sR$WKzZSz=!p3A~_K(i5B?g_pM_TH<#n0u^FL z>$KyQ@al;l@$iF{pb;a+%)v1;?goZIE*SlM?1_hwmZsT1`vMB%kCUzYxWMW)CrDA= zqT9J{s8FGf!BtVh^%z;7ubOg~j0p*yQ`yN|!6XJfRdX}8Y75Efev$E@=h_`dDzr#v zJtS7pWU<78<^~^-)vm+y#?U^W@u6qb07M@aH3t3hHyhiVnd9xI>*G~=bGAw|TZqMp zIl-Oy0(WJq(VD;el3$rqeLc8D>lEIK2k}FH$UrlW?tYD-k998T?$<B$R$Qumgdd|n zEI$+fWay9iZJF~i;n=uz;*8cuNL1j4jXxPNowV!SI>u&&5KlR-lM)5VOqWWowP2G0 zBRl84a{-V6ZrFe>od6vEM6e9+({Dz=cEgt_a(+|+RXiNk0<v>PjPwOxIIqZO{q`3l z3%Fq!dEhBd%U&Qo5DKsVsANKF_S&Zf3J`JawOLvHW?@sRAO&u;?!QTV5Lf6LKq;P^ zh1{PLumuPri>>1!EVRI<E40`efDUQe(rAYZ7-h*cRa)z<Xd+ujvGvET_DesICfvG8 zvGs|B6@1mmh|P!$#~~aLHj5Yb=2v?w=76W*)F_5+X1x!QPmYit#FKG@<&k$gW3w?F z=5O^TIoVr&5`JpabDr}MlKX3mtviH2#Xdp{C~PgoR*CaWBfgn4OM4kyRUXCG+Rubv z+$EGeMBG{dD09+p@gq?Q<t#KQ)?obR7DGi)h>EQp=BKxUJDmo6_(lEn3-;}D$Or&^ z<3>ZW^Yj<qZXO9uFSh=wZiBiRy&li6n`_@61`u6%ln6VPI{NBZ+5bYxNl|bjK3|nO z=0Uy{n5x&c(upUx`gbf7Ry#6v<Ci-A`ezpd>?8gEVCet5wCMlHz0*HZ)P??+Dy59Y z!m&Is-r<2`Znnu8#i;0)U2Ju5E<xi0hK>XgYPR5^gMj($^9)<G=S#r)S70~IOXQRo zwpb_85nuK5Tw5$#up1QE0#lPQmOBHH2a2tg8(f^yhXf8zx!ifGD=uM4U%sI@r5%21 zIy%F7sDTVMLl|B-WjAn6S~|vg=40*@@j2zTPwH?ATc%o90UzWPo<)%ar>wcra7rEl z{e=Cq4L;xt9J2`uZyvlF)LOm9#X5i0th3NOuUgk~h)bMHikq%nAInX{%_HQdN$R$n zn~t{clba4Xq8@I#8zmq`!H45>)2xsAak<qW?1h_FE^~2{dp}9ppM4T(4|~bne<@x{ zEuMW-S7%eL;{kE%w^WKQ)Jw**M_0+F;;P@O6VDa{TH+%NUa6WN-@?B4fbYYbYa1b% zd;_-L$ad=~FsRymS3xLAoceD2(gRApJkGvwGd6H2J)Yn@6y<g;<|T|^z)|S8eIYs4 zH~26RQfh(fHn(Z4IPy*P`$LOnX@E>ywCP@LQPcG0>s?04(YC1Z#KVQLx3a9?^28R+ zE>rFO+Rz>E^!8(rd9$)b7i6KZ7+_(rK<rW3`ZrlCB7&tEDz3$t79VQrt)R15cnR_U z>lNUna>rPTxwxo>n6VUFI+q+vaoH04Ik6N`yF*LS$<$V6hSYoc7xq=VKa1>Yo3ghb zbMOO^U#)jvv*jvlctBsBCPA+1T;)C9ih;OFJ#Dcw-?6*|OC;=E>c~rCDP}kqn{YsF zDf&WglIaI`Dm4$sQp~fS1;{}%9phOd0=tCuIv?L0#m$DF9e-xh)}raYxAGgs&8b<7 zucOB}2?i!iT~l#VR=-KgK3q~Mq>-&Zw5}p8LCr}2#S2d%*214K2sM~lZ12%*sr{4T z+1C*teAS5BRY2X;iP~gYNsRr&esDRlwa)%or7#sR7rf=v3gK%A7DZv{7SvW5ENQ3L zSUhL7JY4NKL->{$^!iik)bbSGB$!eB?BFBmXyKh&x^}EiN4oat9E%UfjftAP;O=fC z0ndMfQ#HdeoCYu+bD`SC8C4<Vs>~CitD<y@fHeyt7(xhc!EiGTgqpr(3kEg6@~G10 z!4bjHzF-mh>z3N~wQh9SS7JACp*sFVCaGIbV#(ahY5B$RCu)l_s#;QiMm`qFrI1dT zDHbf1O>`tF;jQZo$(+pZdC~rPoT7vg_Ju=hXZwRoqp09|33B+Wi-7DpwCW1!l-yu* zVcPg+ke0jY(f>>b-=}q|AKybSfC_Hag8kH<$K#?Fs)7qPMelksc!@67aRkyb`?0|> zNM9g<2%j5wPZD=OV|wC_h)foDYDpJiE`vKZI^KnqKom0B@P>=@q6CqR>_rJ8e_U)n zMI*Azz95KvCkl~oNL0gLUAPxSF1g-Dr1la!`?1^JPP(7gl^Uz#zEW6Ct)JGVhbXK% z_O{bcOZ6ohsmjDI*DCiXiwsnz1_uG<#g@kg%b1`q952D6*y_Di;ectQEom@%%bx=x z(KXCE<WPm!75Hs5Y^NQUZi$252pg?eX9(gJ=#`AMS8`FYb-{~HAn@!uM&gF&sMZ!> zadC{q<y+L+a<Mkmj;ph^7+?X7WW!#JZH2^MRJF7t<MgI{q6)}On?Jt*1jwI}FVf-9 z2RhcvpP=?Hssw(Q()r%*T7$-OaAz)N#^;VhCj5ZR;0VBpM=eA$YG>xw>1u!Ry8zcV zc;TRsN}d4J$55^n$PtLOlipELrCAhf2?Es%|763<-QOkY9qc_#`x8D-2V%22*bsw9 z8Gb%ALOeC<Fa;G4fd-l*$}z)WT0t(<=_+-PLXqG_gCfLH@OZZM(r2<XK=))s>Zoc% z-NH@GC_^YGwvOXSD}&fF<+s|~%M7&^AIPg{U5>FalBecOQ|-f^wjL<Terq_~dzh~a zLMXV#(_nI}Bg!?t!}`d0)Dv<kj2C8CHmdbvama09%un3rxa@&@Iy@DJ|7^3WACeJE z#Ed~;W_y{T9wwUYc;LUx0E1&a)B|H=t8Ou;0lK&nuUibYR!L|uxupOwGJw%lU0-l* ze3PzAEH6{GC%@J7a^y~fl+^O^24)K?bnI680Xa$!uF`bbgML5>^83GEK;1O9{<FZb zDnK3xLAmNb7xrdr@ldC_C7_`zU142U`R5WiQvmk&h(MsrhuxOAvASMkQ1)ERj_W}L zM5|dkrJpB9S{3+KZn%%)huU!6`F6Um<~s}3yVQ&3ffRgd_8HWRp2j_;3QXaa|A75- zjM9rvv@Z;#c031C$1!_n!{y0EIW|nb^+P+Ms7`UVe}1hb+M$RAx8up?Hj6bOIs0we z^i%zDdi2wv?LN`Zlk-!jpT|<9pHb`L)6dse8EnSV&s#cL;#5Hi{hWqxt%rWNu7I@^ zqZ-|e^z)AR_(DQIA$vxlpY!dXntpx+H!1oO`guBvetPLex#{PrHv2+9?^ndoPa5%3 zo~ptfe#H*8U!`UNzk0B}5hNckU2sLJ@lu{ikT_oY$(07`5-;6s|J3o)N%jRhUixDc zX6}^8MO3`>&y+W9{EA*^7sli8#PL!&M8P`Eo_GkQPfz=2Z_rgfPBev7JSM2fuDyM; zWAMbwmE0*fhpo?QCGy~_J{xL0gbHG_2^}M^l_`SQ5Ax*p?di#rCl1;td2;TY)aA(& zDaw=oqJL|={pi+thK^$8$$Ug7;_OF1;alsGCtO#+8h}yV^5kkYyU3F~dq$BbZS0>~ zp4<;kamka3nl4oK#Xk{6h~1CQlNE*1+>a_2#>kWO^MiWf+bLGYd|=2Z_57e|-hIdq zYJWKiDM5bF90)y~A9T-L0Wtjm-inKO{TV@9C9Z3<dCR42c9X?3M2K(Hm1d|S9P3>5 zI<FpwtKjQye<yW$%X9IQTtC2hq9rdu?>NS}#Mr0OJywD81=rs4uPASze=Lu}_b)f_ z0e>~~&{E0|QXk|R|9eDBu+nFys?Yg?F{o$dt8a1^fv_|mn)0;zoR{#EYoF;nv6An( zL(u`NSk|aqB`Qs_i?z9x>~ZO21pT-mTAs=ImpWf<VqR8~xoTB9CFqU!VrbEh5A40| z=7%09K7h`X33JsXQB4H~J|~_wSxaXrLS*@fPE=#c3$#P{c)b-{NlPkgu<dN20O-aA ziX7QLHu$_C<~NWtr~~)%A-ZPZ{3nqWnYfUL3zIR?kh_)V2$yohqi_ZhlQO-y(Mqjg z@jpnQ#@AeSN>i2h7W`=3C|_{sr1-TaH(tbfbCoiy5;<&57DR{~JvsFuZt<NT8<t*v zKP;aXx<o$y0Nn(v@gmzKE?T2V?b^HW0XQ15Vh3pr9)ZT{qsdJOA(9#kajcv?vWkx& z_3rbqz=e;%<l`fEk5oQ!Z^g}g1|0a3^UOkC0u`@xF2NtDBN;uNixY4W-O+;EqBxN8 z4<m84e|#4nw7zYj_5r3I#EE7YcfPkAqJc}i5<O_evy0svhfd%kKc$_T9_T~i5|V$^ zv+s^jpM%SOZ-w-(P?%-+o)c%1w$S5UYz?R=z))nJUV^b?6~=QGm-TCbOe`ya6dS>| zI*3PgfoqA$^fJ*@u9cel+C@603GM-J#jmQb!^~z%9(;qJsyb16$%oL_JCxV01pn!e z{}00dN8tZsabB2&db>sTV0m?I>DKee;YMF^^w*^QEhmFLxY1O<W0*TN`?*20<n$E@ z&O*lp9@t&e&(vfl01g2f9=%l1a5NkicGfcw=zs@-?g`0yt_Cl=&0|$^$bsm5fsu{4 z?FXntW;b1wvY{GzVec35ZJ{ih%#q)4(lIKKe`Edep&}>1IiWve@}lL6m@uE8t`3an z315R7y@r9^F#(3f2pp8BELTA2lLhz<*8P{++%uBQ8ZFGP)e#0-Q7t*VoG7~%A7cHU zr6}I1e2en01-bHobsC1Z_t2~H9{R-!OLOhBu*94HjJ5a62w#A|7Y~&%WcVzyYzwon z&<L{YAE0xk2c4ug%ZPmehhcbv*|Xh-`X)p-G@E+M&%k$)*Q!s&AH+$08K~uRqW7CL z>fLYQ9uIn)uu13<n8mjyopd*=iEU5mh@#`nQC%gctTH|ML;abM{Mifv4XFqdu^kTe z5d3+la3^>$2l?U>qs6xD@Sw;a9JJ!@!x^xif}c+1Y|bPa%GKZ)?OaA8!}zK389D<q zef6#=(u0HJ34fkQ995_IkLT6n^sp;s;8N=qd?1FK7Dr6#6@_a8R)M_?$;JE+_{+?D z1oBIJnG;&`a6>KE7hH-psA|b-cCV~2a&_nBTF=$tj(w3oCu;dK{jK!m&%(^4<PSV_ zL~%r)>DL0A9X=eFkjknYV)XDKH<>xckOHi@<qpyMLJ>_oW<;Msi9_9vWG1p2F`NED z`)s!sINMG2Rh>_A3Xg;Q$O*ni?AF5T9vPTBw8(Yz(ofGh2-f={Q?sm(@l9No2S4K2 z&EN^0A3^aHbIe!3It~fv3aL{_gBh0?-XB96{O)2y?@Z!71)n$>S-kl3L^8KSiLPFi zsK;;?>Mf@ojrprbtA7cZxa)WbrxB=ioXmC1!Ni6LajcO;gm;OGM3L6kMTGhcOmK*# zMARpBT7_cB(Wb{V<PWpwD1WwZNJsws(4ZdqlOR9ov7nGx%K1rUeSP6AlAQDwQ<Hk% zYry>?H%&GgYAldN#&_tEfR%0EzcXl&*QIEiNRK|o_MB&dCmjq@QYXh6(NLsLYS~G% zFSF5N^b@B(E9nfA`<f_x3|nvH!zh#lBvB+oF4px~XJ^<l0=9=7J?hjXu$eyMCSX|f z{r{BVA!LIwf`Sd73Q7T3#B+h5=pfeJOOyP_o4j3fB7^|m$KyQv9WScB(GyXxH6LYI zJjSiPDmn&-Fp}fL2&&E|yRu<;erfvvE>a&VfIgIGjV;x@>Mh@c?Y^`p>f4=5w19%= z%pvOJgr_JLUGaBEmQdNiIRhEq@(GP0PL|;FDNaV<2k$5ytG0#R!4#1&kV|C)>%Hk1 z1Tuw|5*EvE<crK(33f{`aW_spF%MCaGFJ<sojlK{jh=WbeqiD}-Ki?7YZhRaheH{O z0=Cu!IihCg1HuTC<0bU=^HwmG0)OX3J|x5@;v(!gt1DKkw3>MoFzvW_9C5(1{5+xr zDfDB4OS$YgT`}iAEz9nPMN49W>U?x0mp!SrvA`<_KlGAaRX7m%JWh9_fG4+xvw5)A zT(;*H{joQi5<>aFa$Sega^334*F5VIFuYp#Q1*16Z2#;UT$2FE8=sQZ7F1KsB+&&J z>C3}f0JR*{@ZrChk%AcQ95O2V$O3X>7J$Qp@OZBEEy!6dppdXyz4P}RAD8E|3gr%E zamV0pti?HJ?zyY^j;|V<1s2d>Eg%=e$?3X)L1k~uiS4eonN3&tXltQ87tX`X+{{5Z z{DmNy+||2#=lWR1wS1bnUTp3B51}u|0(K4N&2_J#2i8C`a}^cNf%;%QDzA9UFT{^H z`=#0})dE3K(Lk|w%G?x^rw6R_HkpN-L;?Dmeec-7>c{&^S<deB%_AMG6V+PbP?nR1 zf@85<IUXKUO0Ps59Z*Xs%)>z1eh(EvAAeiM0LXJO?<t&Wf|`n0r6MQI?%r3LXeVl- zG!OI9$!3Z~ec@}5QAOE3e4L)GrM>J4h{ve8FwY3i^PMbTbwBI}(RL4<YBC|du;?WD z!d9*?9P@`@gI{<HFdv-HFGQx4vcEa$PBb6nCoWS1V;*={I@*(-$4TeACLM!G3(Taa zk#Q&4Z}!B!j5|dAJ{qh6%J_ULAw}$Tu-^FHUJH!q+Te1o1xen{TE^<Nc<d1a0qgp= z48n$SExXl-^39AR+zl;De&`uzxMm#d%!n-X+TeQ5h)uQLZi`o4XzzPQKaTy^?1%8j z*(V0EfRrf-c8_$GOrUo<9G4fl8uCa4Q>oUOd#qJD%514Vg}&LWYBURgvuk>r4RVNM zQD-|jys`NR{eNxDL`=L56BleeB<c{pNJ&=JWNOBFRV5V3dHB=cuOUqL&DQsm5sMn# zANS!$DX1EfsgfT+#yKp7!#nt{+{zO4rQzw=u2cDN?2vqNi3e}VL!rEah%{)&4$Ud> zCHbmu6PsC2X;G71vjUF{E<uxZ>j)qY6J+z7DTbu=dR0j#>O8q~W#ghK_sro9?gZwH zFe|Zk!TASS-JAW_edxa~r{NrGoewa8(s*b`f!gO?vH}+&PwlSor9Dfm2hP>RsTwij z37lmYIT#Zc^z-3R=*`yFNw)cr-F=JNcxw*F2Um^GlFI8Gl%{4x{EwIQZ2*zC1!vI@ zM)`1LJKlX3L=1siP}u^Q9U08J!u<tD@eB0o)k#b_)`NRw`H8y64{?qJ!?1Z(L&kUi zxw3`plX$iJ&-~7)%dX6g`-6(K4gKzeJ~#KJ^!2%_pB1^H-ab8juK(HpH~L)pIW~b9 zeQu_6N$GPyYdn2!`$`~Kt5h-i+)McU<n*~rOa`pR*XI&Ud=4j$ug{&PCq6*>TmZ5} z$$HV}hTvx$eU8hHqtC5)M3x;-pIh>ig4co4=l%jFcj<H2+drYtB>?j8D`d6%NuN8! zo-tORn*~Bw3RlPAZmh+KK%DO_j>OdUxhG^qZphH*PJG=AAFa>5HPKuzwtPQ|RN^tu z(C6m4*Kj_g8gcZwkAF}IOG}^g*$ad|chhTTA)?RyDC^?l9epm>UTX(ys!SYm^f@dy zu0FRCFS+!&0yT|WpQ}_;Md@>|$I<6*kT6dD`rJwOvZ2qdfljGVD*9Y!bx$-H>T~ZR zr7K3CJNYd0MhEMf?*$u<KF2SNtIw^Mw+JifbHnXPMW6etx+n8cpPOhV6@6}r{U-If zZYa~oAX>X>ZQtu){rsK17NyT|EuX~G=la`kL7#j174tcw&*i$-LVfO?hSB=m-DmP~ zen$tZ+?i47bDVK+`rKnv>gaQ3|Jz6XEsUTsmZmkKebC?L|2tj%?S#PpOn<uoh)Q06 z1E!4dDzOR}7^$njJpeEO&q?cVUyawKkx+j-7$y}ITe^Q!*57^sVY>CV`R*?$MF1vN zfBX7hvit+6zkN9=T7OF;Uii57k3RRbqrW9}ej7X{reD(AyKMb!ul<tr!3TaTh&Isl zx}eV>j0@^N*TJ9w!%uD_ji<wabxyDwpbXC@{BXlEYiHy{M%?g+))sUj(LxlXP^*w2 zBs@gA;T4S&xbUoVzqLsyTl>kJ_INlCliHM=hp9ucaD`ww>{3EuNDBZV<nTr;YdlJl z#IrOVKUU%#2~g%F)EJJ=v=_<6&B%#f-)Hv-X&1QHNS9&gXfE$nK#re&8EhKm=@56M z2~}fyBv1fkgA<+F`T0arfRbNn)R!@{hTie#pHz}7wdmaY-w56bDHxf9qdWI$MC1Hl z$OXV^dhlhKxyb(k3!1H#UFolWN5U1S2QN~nCIlr2Z#s(Hb+>vUs+u9sT3jQT?O3;( z0a){N-@)XJxUKgdJ1c?w2mEa7J<4)FPFE7tZG6e*ON8G%<hCivk1vfA-Hd;_*)7!y ze$MG;uF9UtS?0XoNkt;Gk~#0Utar2Ur>x^|Uc%FU-zzqI<(t9flvj*Ny4=hq)~R<n zz*TnV1J<!XD?Vd+y(a)qKhp(8vwtf21LHr3Nl8x4@?djfNaFL``)D7?@sArygvXkl zgX2I`#nxk;9z(2psj)P(w#PY7m9TUor?$;h{H3Wd9MvvH2Vx_hg^^17XRK}){!r^m zROnv28WNNK3}2rG{bg_RxV#F}yqyL?P7KassDa5w_lzR)=1jxR=+ntYp2c*;m-WdE zm!Ll{WL8nX-@?5cZQ+<}KX173H^_pkyo(;gG-Ha@qHEh+gayN;Lt(-G`H)+l$TkjI z>3Mz#=EG<CYfKAJ$}RM94^Vhn*FS7G)SldZ3!11d;mBpRncizEInvO~vNf4_-BXqM zB7XCP`|Pqce>7UlA*+VeR%Mp;TR*!=AJnPLI*Ys|zi@BXNcb?bi_frrx}r7RO*LoQ ztDS+>3e$iowCk!4U_Y1+z`7jq^z(Q-UCkv#MrB4aZ>r3^;naQ~%>N!Ya-v4YBH$ik z6+ztuns-Y;m+|QlP2CVkBWEW;k3%&*-t(xUNA+?l^!V&ovGnK!semvSJ?3h9gz1DT zjlIz0-9doOiS=~fu@3tcNfJk@dn>NNU!c0*x$CS4nfXCpla~TuzJA-n-5ad|PJL^4 zHatm@*jsq5s3Z=FJw+to?Z}==&t0f58k|)~vas$`;{y3;U$lZj9?%2P0Yc;Po9xEJ z?Z8{X{2mY>Y686v3jMM6i1fEZ)8Fs0^yjO}Wc@Me&tvE>yQ&cMw@4@s@jszIpQgWT zp+8T_8CH0Xra${rlA*tn3+m9H-%WqF3H@zV^cOWUJ~$_e{-W;U4j%A;G$|J%U!DD` z%j0&!IA^~$^>k^;%fD#)Y_Kw2dD-rZSo(D3)<n@~O7b#eT8zB3=@a6TVKle6jM-R; zdT*xzZuvQ780DvTv2+1cse74=%X+u;R{ROHf~^iGLPE&h@sOOH#TMtYMIY%X5>iBX zWY|z}LG!Y?nV?JdN5m~(zhA?>8f^fFfb7_wCquKu`}niSmNqV_`vPCwCbXVuOWf)) zU?d~i+(Ng*eMac2GijCJ-H0(n@JbtNBY3kN!D|zKtl(Y1iEY6<1A^BB!8<>!2>)`u z1bf}2e~3qrq8+@8y0<sk+;3_f-oWmawovXr#-%JEc;e`*;j9v#yoU5f_IMb-@Yfmb zkmHwF;o1oZQsHWj7SNQIi1OiO6CK%mUz5Xj3eiJyA*2^dTplPJs^kl_hdBLcuxMbq zNq<de#*C4os8W4BOH~{7aC6yOu%U-fFd<4D%jQlfQ_aY&lTN2}=JGd$o021xuDZ7F zZr11w0bKg<YNO4&4<AeqUf+L`D!dK>y#9Kcz)K&I6j_IpwqfqXz>JC9p(ZG%TvyWy zki)?>Ox6WRCh!zM=r=h10MK(Nxb*md)ez#qfbMt=x;`zUfvmE}w+(fktRKjK868cX z`$C@|Yx*oj=aO{j^O}!Sg*WN5|De6lC-YBT^m$wY`Xq$!9+E8Frj0UiOP@XsKli;q zJ$Q}zC>?lt3ikppwoP`yD<MBCQo9)9!4PHrq}F}pKJv4HSM&SQgV$j@(t+1U1NQ<i zmeeE<uah7il7m;H5iWR@?Lz)vsuucBnjyEN`IlkH+4hDpd9RJIzT2(<HpJO593veu z*Q&|=BfC*gE{BRU3tmnlKL+vMhXx4HvQ^3vWR)K#IV$K|X)#|lL?xQd9v>N<#e>MH z*R&1)13RG@?++nx#~?T~c5HJmbH94ky75EXpXI4-r94{p7GEoAt#x;i7f&~gsuLHY z?IUHYN7+S*H(+yqS>@dhJX6_#@7b0d0meNqXY45g()!QKfuAnAvcP?GvuKc#3x}*T zwo;b_tC;h0zJ)Fbu+w5O=jCLhB88W%g{K;q$|7Q<qm=;y!GpSqg1Z18W3zVykCZW6 zJ7l%*6f=1E6K-I53P;a$-w^Yp%VzlR&=~aXPy2Q)3<>ZBoROqmd`Qy%mJj|Rm~?sn z_KSVHW<nD7?S=n_GJXK;+k@4(#C_8C?QypqX#4h->FL<Fv&Yxb;SaohJ7zFxHCn!; zW#6LQS`_`x%N2bpXJRV!+3USn`rI$}ZEneawQm>prAYHGX23%G2e}WRhceGT601mj ziESY|#>unjs;(TMNH5CPulN_6grg?v6+Arzn>Iw&|G7!rDS=7c^yYXbF%QArpC<A2 zX^K}C>~E7ee_S1Qg1fRD%O~Q}HjO(Mf?*u}ImOe&So=(K`1fUoOH$#GHt*KUAu5G< z4fb4m$}`bSsx!zc7de@jq^&xRyR}5)GwrrO+|gji#cveU<5azoIp3SA{r{o<;O6Rs zv5*w)|96s8KVt0vo>BVmp)s~>S)Z0J<u{>mg~Gi;aBy;(Z?l1}P2b4VebIk!b@a8A z^xsViU}@;TJ<`yBJ&yj{>rzwG<<@^Ur=$O#;({erU;|IT>7SpY&O2ksiF$D1-s4rn z^!~K)7R7n<q(N_d?u&o!*==tt?sNM3x%Q{Rc<}+`hh|m$91|Z<gFEr6tBVrtPxBBT zVBa73<d6PmUHxfK-S_~zz7z%G#0Re7FjQ}MS9)GTj%;Dp5N<Wr)~{t;qdyhe@c~4m ziv4UY-e8H*mcm!sBgb>s$9~ttqkmw{h}(Od()&TYFTDb_eMFD!f*`h@%SPBCF!+K^ z2+a1xW=ja{TJgOi+%@Y^D(ZF!!beYR;0)wVt8J$pQZ4;UBg3&D+-k?KaGXcfQZa(W z4~EByUmbLky&uHJ2hxgPeRiXw&(!t%U*3$}9rlZUzjGw;u($YC<jcDBxj*7p-PO2; zK9h=HjgA<KJy7whzn`6set+ADIts~w*Y7XuOHt~`Pxfa^OTRbqtARL5hxTXc`hCgz zSo(Cy&-CM01BNG(pJ~Of?m1TJ_c8G+==V|at2bZ#-ze*e;#X%bj;E~e@A%aVXDY(q z@A0d7!|L$HzQnKQ_li~^4E?8}k4fDCH1=Ut>FHxrUQbsaYgdr6KDMwoPg)IcH7?1g zySrVIFVF$D#;V1Np!YCKGkKTfQ9a!dHSpYr{2?PxzKf(QPny1VK;+5p!TVL7oN-iA z^5o3_&*Vw-^8X8Ya#7#_$&;f`+pqGZpu3y;6YZyI>3iQTPFLS+x;B>n_lv%_yAYt; zo4&Vk$AQuJW~p&g()T7WJka{y>&5Bldk>vjhXxP4zIRPGx4xG~{|%<5(L*)iT4%pY zC0;c1CAHrrm9U}WZ^*nn29ByDy42b4q8w8y)mu&pa`K9rivL076ivhVE!g5<*!se2 z*paLv-^6~Npb?0Q1qMu{*tC<i2Mfio_|3GLi~|+7ZfNeX<6_{OZhZ6CatFSt_;(I^ zF<pIP-QjiMyZ88JcgMd|a&{d5&XZV9%F4vY$3%-$mwlqoYe?U}b5EI)r>XmQo_$`) z)BWt<x%=cq`h?5BvttYWjM4d@`@_Ferp7h$G>(6#^L!&cQ}pkwKWX3mJB#uDf%EUQ z9;HO~KKpl$KN_^^=)3z&pA8nKOP}qYJ0SF#(LV|LoVWGB(C6W5+<NG9;oLOoGr!-y z(Wlk-K+@-B!}k+?-jE+fpKkw7TKede1&TgX_dm{lM$xBJU9?~H(R2C$4|~%`|BQYo zvGQ|&_#X?^xQ0HH@;`3Ip-@ac!M1pS^5=UDOGh7V*BgM0uHQKD`snvv-1<_qzaTC8 zTstpa`uyOj145r`dL}`i{m|FwK+xwGY0&3!p#x2yw+v2)K4<s%AJFHR!=veQpZE99 zbJN}5dp&VL_V?Tq0amAmwtKBz-{I0fhsTkh`$PZy0ll9<_eOrk(Le8*X{a$p{c~vd zecRu&@cx0*KW{ADPy725x%+p2UwC=C^7FR89T53>_3=r_&y{Z;82MSO#x?Yr)c*eO zOAN&xsQrE1z;xtiuWtVX`Pur=X!+^ZKNr|%ASY43Y2pE&%~JHKUWN{pbbjkED`V+% zzr+`J9-ByhrWIct*gC0r!0Dg={}o^S?Lr}XWcD1$`nZWFE5hIJ@x_kE)ZvYNi7)1K zB-K0rQ~rT8`Z=(GmfqHy8HVapq4>rt>ZN#iMG@k&YCnbS+@`Yu$3$fVW}YDN!Q`?5 zkLX~3wDY~G<^y`Qd-=CZ<%99HspSK<epo&^g?d2Nx4qR$T%Ydxw){Fdfu6X<ZGl9^ zZSXI50WX{Ez+)LsMJ8oTaU1(<{`Vl~vHHu6UdvV>cKl6ld775Jbi*a-?)MKp7)xFI z#hzb!WD@&*$FB~|e*fy1GHy!yeeJXZz2BeTC!PI%NPZoecHr&#!`dd^@6)2s@6co} zy?U0W_a6}Y+}$+^`aJ9F14EyU)VL|p=VX+49aw+U>pjz<&xgAF59srngZDFio-sXL z`n=$t145rgc}dV`zi$r=eSWbkb@}=7lmktlT~17gKARr?KcLUgeTnHaEqm#SX^K8m zx0lxaC6+$-i@o%CXMi=XzbP$y>7d4O?WNYS`ItZc|79<|IqCnxUMe{L0NG15o$Bz$ zzSv8<S}MKPSWM~L5C4z3Yk`ZZ%KrllILPQ7bx2ZFEG$b(ZM0Oh&;+%_29bd@P|IwV zUZyjtr3MbHjMphE+wJx5X<J)uYikd!wm?mMl<&=Fo0Zk2p+qx9CFlSBopbM<I}EQG zp{+i`<=*rBo!|TX&hIGai9WcEp?%2q!>(r-(uZI_P`-v`k<5Nj@`(hWC+gUe^F)G8 z`UTjmSPV^@0&9&LkcAH~#ok(aYk2T_>FH46MfTP$5iPK{qC&H`Qf<<^dO!3Uv$w9b zNe^p^H4WrRaU96!58unDhX>zLPlW^DI$s^m^v!SDp6wbMd~si8PE_;o#SIQuYKk=t z-xIM~_|`uk6PCQIm>RCU+xyoxk$2_YT2<clK1WL%ls~Kf`GW(dbN`dW!i}9jIFS2$ z$h+Z}w~@R%o6xHAt}aHyydm@&_UD9$|F?vV|0~)C|GTy>{-13T{<p_Px-fcw_rvmy z;y<p~#(3J;KR*1@w!;7T*2Vv*w!{CM!^Zzd+Xny5t&9J)EyDj{f3W?b16jWd{wKE; z{&#L&{MWS|{@cRF|A*TK|2wrV{{Pw{{J){+AB_J`_+9Y7cU$4V(7O2lTU-PCqphR= zXNQgdV%y+<$JWLF<1NDfr5F9d@c+i&1^;`t75*Dr7yr++1pf=d$!}g^<@nDlhY~HY zx2!(?x5|EQc^p93Tzs~74K9$acfO@H;<F#;?S`~p)_)vB)i#XJexf@^)5!sO#+%FG zJhy!i4z~S%?!;QcRK-5UeM&q(L`q0GCdWtdD3(4G6y6*PUS9X-`gqycK18ydcYg;q zjOp@)(p~j(>+n2l{@gmrv4Omqa_=V~0)=w#JHOW^GxwN_#YnW-7e-vta#5hHZ0+Ri z*1g0?|J|R{<UB${Gud1*(PTt^B-!^(zsV%0Fyj|p$ah~)FI8tJl>SC(cvz~cWZX9) zlrEvaw@Fu26VIQ&K(3GWl37kJ+ST<56mqqZ3gS-9)cr!~Q+Q^X(2<8+n+bgYCPp{a znj6UfW5zde2O2gL+}!%7ug5TO8wE`_v8n?yzy;>An~ygD0Y6vy))h?FfMA4@Y52e{ z3@Et`Ptt144)<pDrk1O+sF?<ue+!qzDxhKaGGlUd`M^m`gkL^TP19qS4?LF6h?DI4 z+i+gf#4jLti%QZ31eAkA&HmHZe*r<VOTGXj(KDvbqkod+`@zlLa|$rBzH;`T#5n|> zWL!XSqAMrRoAI|v0arswjp`%R?wBANO%QtVd~(|R2T}qkA7e-Y%KGoWsNZe9)bE;H zqW?OfrO&|g6Jhy}if>S8G}QZA{<>Jj<c4k!(%g>`()|NP(SbDTk53P4zwm3RMf%g3 zEB{#f)6=7V5B;gm+(!D-hfzUvaX$NnA02C0e>zY3R60h%{ZQo7^AEKY??aYPC6R%+ z--`0-sf?D%r;0`D?1WO>lGc!X@_g5veA-NWS(Z=F;<+LDWNAV^b#1wPDjqT(B3LNB zUn`;>wD?6-zAB<fSV<-<pDLmzG$NwjXhcLcbU)6~Ya0?#Z?v+A%Id^P)mC3tG^a)m z&;^kqvd$vEU7N_K&OdAA(|OY8ch`qQpS}lG3~oj)g-oAE&K(bkWobqFJUyyq^x4}# zyGH5rr?3A|^a;(lK7IDPs!{r!g$cGQecqJ%d(h|G9m1r~<#oWRz+<>=NT0KR)Y505 z{uq}3VPqPo(a`-5x%2ANX{-1j(#`^&&G{eR7<8^p{14f@-H`kb{~W^bvkm<Z@o^kC zL-RkJIvs?VZSQ~B^@ATj!#F>q+-~v4h;Sswr_TBq8Q^(<ZOm?zx(p`z(nE~JcK4g; zL06X24O2WZQDT`ZHPLyHXLiTIo1NnIxU<o8G9xX?F?Q{|TW>NgH4W?J>{hbN(Rryg zVpvv$v!km#(p3>zvdekIQtplJUhdiy0VUODUx3nuI^}NF)z}?$Z7^95dPl8I*g8SE zf3Zc)SvJFfPv4L6#IQRc5~W`;e{|A?u_JkAa>^sTV)>86^;7EIh?n$zpl(hveTx4m zkiUdwpMIUHtYoP6>8UwQu4cIQ>EV-sI>33_ry~!v$Uc4j5q_~Jmgf&~Ki(N=@1Tb^ zj&Hanrj6{=?!N}{w)3%16Tc0l0e}2pi1z`|oe}K(-w*}sL$OSw?`s0%3k+aeyZ=U) zH9NE11%{y+!vn5e!`JUtvac5Y)%gux{p&sUDoL);9(+LN2>AHQzu3npeDuH9IIE(+ zk-_5U2j`tnVdpg*GNI@5`r%#<omS50wc~hW{6LdWA@!kPeWNw<DSW$#wX5hG4dheE zf*Y9p##r^x^0n6<JAPjI+Sj0d+vQUj70EfndFS(*{uOYv74dW6;BfJC%-wB*p95-I zfS=tt9tGSt+#2|~eqnR?`SulI;%DB`^TW>s)Necde96}d#~6*?^TyALLjm}C{^x(M z;`kZ5z4mHhed*FF_S*8Funx`HYiH*N^Uv1UFMgS~tMJbj<@@kmu3&6i<@>n(H;z1^ z*=u8}0mwi{LfhMG7abrG@8_TAji1N*hl`)>>}`UdH9xihKM&4p8~k+fc0<C?seRiT zKR-Pa4t~B`^*_MR#d`zs^St%XtSiEm?|0nZCi2}X0jv$4uhi(D-nqf}*&6cwao(<i zpAG1rJNqcu7^40;?}zh~??X_(?d1EqQ>`T5zuwcj^8M}0!{wiqx3&rYT=iWG_~(tz zVEk+i`TmQ8wX5J~i{yK+ixrG*EBRjfYdHM#jwAmA{yAz_EA!7zeZ%FSmriRF{%QKQ z1^hFW+cB+fAAP$Z06!bxpN}Rf*cc-J9P-Wi@z2_?+me4SKHf_F^Tq7}{PVo!`+a@F z#m^=AZGxY(4z~b5pP3WPKU+h-U(efB_-6z7d8|j6`1#~l=ZBwpsNZ(-{hOn$gr5<g zw=RC}yeM4!{9$sN;OCAnTY#VcJN}u~Jxu(pJ#>Efxd!#y4nIfz)Jpg{eM{@&=fI?J z@pDXGo8aewgDt>Mv5oxm7T#_X{PS(ZpNHk2&pU8__?dwEZHJ#P{n$$QSy35)pXcpg zdb9_}&oKO-IUGM*`96c?`>+np`al1Kc*-_7FY_{QSHaH~*+;&31!LRFKDu4v$P=Rf zb1wk-yZb*s1$wrs|Fc`T_}MPIP4KhkKP|w|J0A?zKU>3o@50*+2|uTHX>0ua^t*8I z^VL271N>aPu5tVfD;_5+f#WBy97=S;9oG8z84z6+Zaj{4H^ADU|1+%fB5%LfqIjGi z%l=sBMGA3GU)#syeD)1T{8rD$E$$4Wjq{1eS@sEGz5l<k<8hRH+*9HetPcg_otaHy zyqu5w`9FhqHk^;!@dbtV>06eM`>!9XlWxWRxasC_<<Z>n^=IEI`^D3?w?H191$nlK zzQo%NNgi!CwzWJO{8c#esOz>Mnrr+0;^QA`<x!aDLwd;Pi$CoY4pn|Nu0CEiCWk^k zAF|=IKv~oZ=R*d{=Zp87*j&MWnm%6~;h$Zj=R-dKXKS1f>D|Qnt>{qBZ@nITKIG1` zEPX3GVqEY1mK75W{d|bH73Ya@&R7~5%c!y5f#QF(@@cJ?4|0mk3-z?t;w?c$nJ{yC zsOPmbF_^_`KyYEpzjx($)F~aqp)_Ykla!{&zh9AM67tWPhI7&E%7lWz$W)tDO=-~g zK@uWZy;I>}n`N_f^C}XJ24F%gRkIw#;`#(}eee~%552F-MMWcMSU!fO50C7iKql1q z^xX6&p%bn?oVF>D2c2hp`ipP0Odp>9$BIv%3=Y)x`tV14+ejaNaAOb~I3Im@!8?H@ z5H>$h^x+%ZD_9?jK79MACNW;&2UFqeYFHnhu{8vJc*$yY(yd7ES+UB@L#6jSMm9P7 zaOvH;p;hVq?N?hw?;kw&2eW@8eh+&8Y<C;cyST1Z>3!KM74@0OJ8ycQ5~E;!DD>{U zwn>ba>HXg2joZJKA<+9@|EW&873qC?v@-Kh>3!~qCTAZmy-zD|ReG;@xkdDT0E+~9 z`iIG{`v6iWwY_{lw7re!{h5zjmENCyQ$_vOq4zr@6|4`1-b;ryiSaVMKk{&+^j@+) z1bTn<4Rz9fdO!d8p9ntl(9f4G8Omqh%IC{webgAeYvOzF%njZjY>oJzF1%gE-_=n3 z&uK=8p`R~%^277nzs^Jbw%fn{W-F)s^FF^5@poXUA3wGG*J0V4JI_V1`_V$*fBE6+ zCaE)Ad9-6~WB3`?{>#AsYmq$qqv@YNB6(fg%cJp|+ejY8t!Y(xWc-`Tnl<vMe!ky= zaPpn*Jj?N)R}Muw{a~q&|E;ngvEw~}uDSS)ty#hRxi$93=kRtF{@kMYjq6S*9J{UJ zH(uGu(KNL9jV12};b7bEN8I`{VXDHPjV#}3NV!h;${y08rxm^&3QlGZtdEnLy$GAZ zQ$Tr5&F)*0O{q4cGX-bvJ3UGKaefy#J<W284tEq4@Lq;on`RHoCTgPGBXMGeUNn}u zhML@6oJN#4F$T5Sc>$Vvzyl==wctOEWAz|Ux>(A^33=n(La+}t^`!uUR^ZhN`8^_P z6}W|JUv(YO1ne>l;mR}J>Q<F!)Bn;Uc{c3jKbC#ft>*WTXA9P~kvvO%JBXK@kN<S| z^8x6u@{9Ap{}<$ay@+4K#{VnY2LD&JF8)8x@t?932j&!h7;lgg$ws?!ai6n`$Nv`| z1}joP`m;Eh#qIJ&VZu+p2L(LvNgGkX(6?HZ0){=Sr2x+V!^qF|yeuu_jw@IninQ!= zd6O7#Bl#wkZ}IOH_J*Xh2HbFe(drO94C&9vlUC#%=?9_Sa1S(MDSZ--g)`-=E^Bhi zq#!^Mfc$5f$$DbGHIFa_Ay&p|@6B8#Fp^5pg{cI~-Q$x@uAzG8wVqKC?x@nuj=_b| zHt7yfDpUe9+f{Y+VyVMzQt{h(y9uc*#EiVL?sj5@tQ=5t=-IN_9aZm(X7gG9GzXvp zKh7^h(y#uENCL`;wEt*0;QQrL6?{-_97yBtb7$mP%9R{O8BE2(Jhb`U2Wu0-i~3@J zvUm78XfS}fG>(r4=sOsoz?&IjhZKBfb%V3NqZv5?{51cN938P^y<Kc4?k3Fj&ZHdd z+whnuO*!II+^ts?8g0_nM+t3dt)a0wdSRLWj+3o;H1iDaj^rep^aa8?TpLVY0~RLH z4dccqcx(ny5D(CTdnV+Gr=jlkr(|!mbnZyf2_43<?g&3XKrgIeCpBW`jRdQMDNky- zfnR?<4|({UEDw+Uq^xtO`e3_D)U|FV?`uf;$ZK9}Re6}TtVR0ZkE5CN`NR0z+kgLi zNW;6<w2?II_iC$3!;~i)!he#7p-Knk{^Bz~GPDOp-vD+Z^Ab<Na1A?&0w+Y`$GXQR zn*7|P^TiD5L%hHEGdGhFjo)8vY{~t_2AgE@aOq$u-Rx}o>ethcYd{vZ{y>*?kTlp@ z6&|?0?Hww(==$RSD`Vi&Ua#8^YeOOs{FSWi<;6qq0RwCBhTU6S!zdTJ(LKR{gnI^+ z*V<>HhE1vw{U96&rpqFr;sR3h+3#f~H)={Y4eVu)X@Ct6T%i1QJCYMg28ZQ;%aS;M z4&DEDM^b(M+$#Pz>&qbRX8mtzZRCIB?Lt(70R9dtgoGwnOM-l*NkjSKKRL`;X&dJI z?Xx-@|69A4f_P-x``^BKgfLZ$pP_QlS7ny4<~v1k02A%sQf+KkkNQZdalmC5$fPh! z3n8-+d`Qn|`%;_q5r2U{x{>~sV3Q{Qjfxn>P5wlfvYurEDg;ooXMzEj{WvcNV;Nn- z7)v54VwTOQin3xwVCG#Em$^*ha_ISHS89Y%N^w}EyhqTzIm__}G794!oKqtw;o0C! z^xbE)Pr7~r?y@<wY@$h8c2%?vs(oLK(A!?jGkC_Dpb{pCixNcv>i<MfR>abXktOBM z)BU!jZgrZoF{wn~HNN;;HV!nQ5+>S1yh-n>)C0|T(P)*iDvC5*kC@MjrNqlnhGH@? zBTNScRhvO$8T{zcawxw%2zB+p#C%C0eDG~}0%2G8PzAz;nCG&^0rInVkT7@)47(*F zG!Fc~)X)E$=IZY)Q(zW8ycB(7={MoQ>!oht!0VRc0C@GR2QSyq3t9rK!8U0<2!^cD z=JgG?r~pfqf8pq7bOQ?E*W|Cm;VzB~o8T@iA#db3GUJ3&a)vdWly}DsEXnRHO;X+- z`RrA`T)_w$^J^8PhuEa2UCdyFy?2dV@qnyF6scc&$Y083O=PC}rO}MOmZc1;etv!4 z@fHz>IbcJNx9FO{f!oUQ7P@B|v-dRd7IEw0WU6-_yEWo1R<C32D*8kN@fOAV6zw6z zd_aAlKEHSi=_$bFMn9tACN|$9yUVAaJzl+m&E(Pl8;DFh;YOEy16zV;jL)P0GrMyQ zqH<185)JYVYzcErkTgbHmNffyuCknWyv3tSfT693pVPk#7eD95w+Vhud$J|?d1bJ^ z+bZ~Z1#7nn{QUYqVd7`mU(XLe$D)4Q;peVbTM0jpm8kd`hW}hp?B4_7iSKVahbq3A z{X0L%{_Pti!ebjWer=5yzlH5=(#ZvWVSXjJLIaj>;e|G7yQWyv3epoUS?2roqY(4& zE9%jm`@@5;t5c}(C3SMdyk^v+*p{eA0M*I|{Sa*$RE3LWP-)_G!oWwmf0NXs)P0;w zF3JnV_{uSH4(ZRRqA|XhdbB#}H@dH&m#pc;`cFb{liFRxzA;^;fslo=V*d=o#)mKD z`Ayjy9zM(w!oi0t?r#PkwC=fnu2gd86Y&I?nZT<jE+K8AS=U@aksneF9c1|#j=roA z(B)r*2e45c!vR>GqZxo1T0%hBXSofO*fRU#vWGN43md->#m?yG?4Izz)ulr?;QD+{ z2;iF72!7GF)S$Tl7tUqk`d$a^wXT5L0S0h^HQOeQeM0ewD8xxv%6$StLoR{63ss1Q z4Nr1~5I=fjcR2j$)41mN(e)QIo^x>!KO$&c0<vYBr_RQB(uoCpieb-BmH)fK!<TQ{ zhl(#u{@=&&MeF|#mj9;E<p0Hx|Dalh*cy}nogn`;#hMmsPdq4NP}uNQ<k_7&!@-}@ z*yiwOPG@GhHz?04yRdJK;m(=|RPxZ+H|HHsUc5t@X{h_He>F5Q+wkM>ip0k3o3P@^ zzrKfXS19`{I749k5v{d)r}+bkf2{bsr#CS(s*Ug0s(ZSP_FF%6V-Yo8DG~Rovm^$O zyY-KbO5MBQINl^?Yp+^|bVvaAM6KX>gOBF=ai27lu<2XT=fuy$<DV}_hsr-mzt6v` z8F|}6eePE?WwmKmpL_WJKxmx@ycGRp%4gxhYmPn~cwKR4Gw_PjsB=x}Co4ewTKy#X zQonxk8r#F69h(;FC)YStu!fC)ihdHeRpGj!*h_t)n&7znem5>(8rDz#e0OvD$s`A# zBA;LV^BM>dUyy91ZKsU9;xn_lV!zwcXsDDD&(nL0GSg7y%QcZr%r<=al2qEN@}=0` zGWqgbof6RXhq%9S*t*|CzC634jpWM|SF6gGTkcayyPiKJ)cwf+lMRr|D;2a4g}_Jq z^mJ<&yN*@hVU_B}4uS)Dfa_6^v62jjA_4nf!kC(wjIP~Fn9&u$(%=}NP{3fRI&+pX z>sF-qfg6>Hhf42b&NVstaL;oLC~j4He{@ER==}yP3U)#MF!6ggeEfUR`<u(#h~Dpf zs8#9xuDcb?ukY^)(O;~Pd+K@x>q8;;oU=`0ynJ5XcQGuNhV$V}!ghFz^Fz+POPzEp z()-AD%FIKh_uMm0&OTgvPg~fk^#0<smeD&F>5oM3lRx-9=>4N*ZA9-6KG>@CzTi(P z>erL+Vbc4JpD0)#3ccTcs!5Dj=sl@XdY@4g0=+M>tCRNIE1~K$hh=?c^2cn#m~CkB z$+J(gDTf%JoRS}400zfby%HE-byXuiYWs^U7{&t{Rve8@dl0klU@-IZ$McSF>HTkx zDWS)=T=Of(mR62$Nt)Lff7HacOgTXiLyREeS{+lD!#86}ZH@SWDBf-p@dGa+<s=WZ z3^BfC?A-H<A26VP+r<w&wuE!a^Nw$Mdj>GnPtPIpFJ*g9{2)AXe))Jf<eYzV067PT z|LHaUoc@i_av@?RH{8-vLSA~C%KQTSg`x641z?lch6k|O$HD<vN?tPn>(&y0VN2@q zDJ=!q&9`a*=I4K*pJ<sbhp6;j6CT9UYC?dRi6W`{zz9BLV-Pb}vQskRb||9>I97*v zY40dGR0VO=II3YTa}B$|(NWxuGL%{YVbI<r+6LH8vDfRtdJ^d!V?n!w(j}08;%*9J z0Sn|??6ImzUU;=l8aNpc-a*@byPWxQA^b8AHQ^8%3_#6+55nL`O>x@uqBe(i3D~$V z>}Hb=f?||bNn%kkilkl_Y{kDYO|x*^oYC-yQ1M;aU@UwuywzL$a|o-)&aBb~<M14| zdQERIULD#7BY^z`$Vid<jcqUj*!O6PHLV^Dn#y6V&_@{gLcFp<75gp&FwPK#qCsB# z69aE!4x$E*1Am>(K&u`H&TZ^C@YT-Y%5h+eO<GEf1NlKH=Q0kQ%7=j+P7ctp4g;Uc zR}s}Oze2@Ng&%KO9Ugvu;|&!*X#?lkiOuk1?S@370t~1Y1vaH%WYeg&`4$yg=dpjI z>}NmouW+#K-5;C4Hn!j3ifw#9dv1J_``OYI{{)+*ry-5*GrS~=o3(HIXXuReOc)L> zZuAaOPEuwJucT0Z7MbinQ(6Bs<%TMb9TSGThU$V35f>Oz3yjW7fDj_G3LpzlyeDHg zB#oK34G{uP?d^}w>1ZH?4NeD|mx~qr13nr_qjnAJ=#2AaKwt=^2<FzghEU``M1V%H z2sUXS2v-&XLg^|JLnH<Y46<M`YXytRCjDJoyqFg^^5Sut>v0MZP_f8g)Hzv>WC=J! zP>2IfH){$F=7pRG3;WxoG|h)Z`NO)xfi~$<%?B35(6GF!x!J$&vbfU7s}S{BMO=OO z&+yp6?jJ&B2PCdM6IvjyI))~$u;Slm`I$pw;;NTT`b1N#X&zFVCxhD0Z$pIdTR<d= zr<(GXpSoIpxX$@~6Z}KYbzqcy!{vOS0}3y&NneAqSP+$?H<NP7(p0PwWKeg);=rSE zpopdt|Nl8x!L+dFuZWu|{|FDi=6n|_ev!DjVtg~=rfW;o|3Nls#Z7*UY8q80+Z0$4 zO@<AxY8hYpy%`R^q#tP#Ux<N{zJD1&)c!^WqV6(6G=vGngSpPHFLMnU=sc(f`+WWc zrHDby;-*5qO}ZD<%rR~)!?;B0CyWCa*M&u}1fm>Xq1~wk;`%A#clqlzCmIuS{16Nq zeu}*Iz8((zqQ7kdemp+lK;!Y$?+<KJUJsen3iDen<40Ur^Xv0X6Z2E~$<YCvpE$22 ztRVZU-hCoKAMevXjscy(b8wqT94L<AK(n`r49o@?`1-o4q5tQKr^Vbn&)hsxp2sM0 z5&aw0SLj4Ian#tq`#H*7HQ~e5W)nX2{+e@?F?sNlI1)tNSa*zSkb1`Cd8Q5*YrNlz zWBiGM#u%Mfh})&TV;IRK$R;vuRQDL#8SW_Cl%6reiNY`y@g{>fMlTZC7@c2m<9Lig z${4|7<R}A81$F+Zv;l*`U-1NJUq`M5se|!##A{Qq!Fn{yk4ORbDubsOqJ-Kn!*eap zfnx<jw5N7|)g(s2o?=dUv-I?p>fCP@Q^nn>i;T{`K%~VP45-~`s^AUoR16@HV^9hn zmWq+Ud4W6C86zIRkp>ghKw))b9?y8yXv&?nRt?lN_!la?lzf%$zl8&@m;c)Yyc*0` zIX#^LD3pAaQ4Qp){J<VkzDn^X4YbZfo~iQx6+g9xlAdMGmz-KN{M70{;(|>PxTeHf zP%F#Y$%Gq||Dzeq8c)yCqT>vRuwDU@Z<)C{d4d*TVaqQCUj0^v2e0c7g#)kOMl}Pk z7MbUO*9=f|%iwi+rWRg`9i#kK=+m5i-up*i!@woJ7W)3tsRNu=TY3NJaDEH+kNQQ! zUTuT@quqMeZWH@Q)1L`*|Hy!OfdLyecC}3#pUfmWRzmhDR9-)v{0XA5Saf4hI%(4_ zZMlCm@$OdIKf3P*Ag&)j>HI)Q`S=v~{<s&yqwwkbLZEQfz2E&hM&T`U?;Bgoy^jP} z6Tw;(M|^Yc{SG$iVomYJ-1{&&>PGroCA+K%_kP7#b-ltkpQ+^AeC9dMMMCp7zxxH} zAPt_+RKgLhbIF+Eck|I1Fv@C0c9fF^B#xR&inUSIa)`p9k~bWX_@6N{Qw>}GDDhZt z{9icp{q#Rg&R34l_+*Z3J<@C!g9-R&JE<Uq+5V8BiV%e!!`M%#QuN<v!<q5!Jx$KI zf&GL>QyC?y`w2OX?I#$W!<7AmfdG{I1wajHN?|T2y9t*d%7dhBSi1>-PgkL*=yze+ z4~oZP{xjjg?{NquOn~_f8VJ~J0Df7+0^yg}F#L*#zD6M~0U+GipXtC_5PmD~?}i1! znWGgDYU$156El)4GZOT3CYdTTl45~hl^KaOvnQEG;Epw&v!m3LvOLwwhTRBqs|%$B zMr2q;PC1y1bUxrTJ0H-v9sE72ksTcIG>3aZNc&*jcQLpR#gVX16en%*Aq{P%JS1@u ztTt&LQl^qUi^E?f6R9(!?|!qi_`CKxv6f7IpM#7xBSu`=4xrY#$LMJpg_6rrSo#qi zP|Y6r1KH)&4ADv-BO>uZD8*&6p-ua!Os?&p3TN8MJC$h*rP0V+&1ZV$z3j4F!i&2w z@%|F|aU9bNkp}2-P%BNg+%Zv}{}KQE$tE*aw!>x0%H$nArDNy<#pB8M6*OxA%NM7@ z*}ceMLFzsA?-4fx8qRjoHe{C+Yt`2pAK8hK9OHm*Sz@|*?ODvhReRPE<ry0xrYGXj z8R?Bk^W-E?^f{Bn9HZ6eOvv)VSk5#^f5j%TYeRyi{O0`iilVLYA5<qZWm`Ps&OhOL z@D?l%Zim*1IR-J^xU{{fE6Y6RsvYhST(u({?OnCkIig*)Y0l0?rymqbe!#$sPA?Qn z{)-3C$j^pH%{5h~AHg5GwdD(LGKuTFCgHvGb883Od=q`Zd!5yqB_)4<nxvaM{Se{G zB9wPMINJE)o^=yVLS}UG?a0)bV{oTS7=k#~C>|5@Om1hjJHICN%$(ky>mw`&i>_-g zr0?@&L<s2{$B1}8TXLsYqdW?2O!w(hkMS4;-z+_@xXrJXB2FIliB2P>qf0+*@y!%^ zAyX_Jt;^D%8pX4}b@$B<$o}@Q>{i|6^G1my4XL#Y`-|y^mzvuZow?KzU3BImXD>|7 zhg5R!Z4uHpjlsamGJV5#3hC?J>9yiM?+apnO;moZ=)}NIhzk!D>I!wD&gNTHZP4j* zeNIVwP{h<XAlhAUF9vMr)tViItF(J;l|F-*5pzy>Zp11ZZ*(m@qH~X$1p1@JIWcjf z-Ma85Q<g0o`gY2+i6*P}0s^+xYF`6z``=HLHv9&B*^n%@8-Y&J7Mfh;K6g83Y_4?n zreE<v@7m;3ctB8*eZ0uj0!uk_-D*)tk-y1ex&d2sN!j87TkeRQoSb-J$#`Iq$Cwti zdHz7LL*LhPO*39hLGSkQ*HU`D(QeAdS|;aqF8Q3%r|JU3QN6fNKKmxugiS(|H^H(? zx^)+pua^ES^$8_4z!-Fi)Ot$hzFze*_wC{?PqjtQTvO>uq2zs3j9M>#0S0GA7>hA= zpWs@BcS!AN6ng23Qg3lyxiRLJ>oZdK&515b)h$eV@g2a}9W(RAHTXT#ouPMaj0XLi zspf3dTpCxhS#Xn0gV30*sMfw{m~LV8sMH;^PhzzX^xKJ5k3c|8U+JxpXSm!ZP?c^L zN=#HM%Y=dSJ-IFk9QjPe(Wp~<T|XFH+s#p@fpzl}fp{2fLgnb>WI&I2>%-6Dx414j zak#;m1JxjTCXl&=KJu+jsKrcM1d|fp*H5+DKf=guQc}zj-}N9m*T(j#w<ISl*p2H; zj3NMvCK8cnHHqNC;6282Q0P^}+M{0d&KTi6eJVzye_m;9ck~e->JQR3xJzkBZ8(CX zo0-rp!r389T9)}MRio$#8HS79=X^fz0IE{fG2?n~buf<Rq7o{oOG#xtqm%pgJ8q?4 zR-!7~L@DhKK(~g7>7-*CTJH-A$`dn<2*k{yDp{E00Qir=I~ix6pBmg%^?25m7{dp? zj0PU#EXDaC{=q+nAToKImzXMUEbx;Fr;pNI@Hgie!Ha3Ag%Q##*PX!_jI<F#JUYkV za~dVw%S{8Lmnw-V^ko*;0cQ-^bdbp?&eG>%ll)W~=UTmdvjVu*KJJ=Thw9pB5=uzF z7vAe=IcV8+QtwGyJI)m4u+ChLtsFh#uQFVxZ*^E)r$;%ibe(oOdbm#KI1*f^XM@$B zp6Kk0m`6gms2a53{S4u0pdt2L{vrFap8xeP*Xc_gX|B^3IZ^`%z9$OVHvk9ipB;oq z0MRq*mq|aC4cDv=H$yz<852P$4|-hMZVXGViJ-J%h&<mz_XqNlBWM+|2rp`R$&k%~ zyhQkT^fkVlQY#$Y?fsRJNEYT_^yd_&bZn!9k7H6RoT<Xc84>txVHI5)Bk^pc=Q`I> zJ!@u|+DtWbyZM^|EX{?t*pUBoJ>~x-{XuWp<&9<#q?Dr{0(MJd#BC+z4gvEUUNoo2 z(vd8K=m}uS$XuKBr)@_G4HR|^Vz%oRVV1KJe6!5HS$HsVZjS_TDU$aTAx)wRJrG0! zQAHA{0*!rEMO@Rh!3?c!2xx+iRb7ROCeT8H_=QzE%j#pC^ScLA!+*zd!t<#riBc6! z_hur+D34Rd*mXK2rPciR;u=r3iPKU{+ROCE8v3CkILGfSjxHaV030qPXnROswsrs} zE{>o~tVB5ClX?^Y`OF;7DcuN4zr-f)6}L*3^$?UX;1awuCg5V6u{Nn2pF@MvOR;}K z?f?7Kp#E2{Yo!0D$1)hUYX38X`?oaKf4AoP=Ygsjqy)FK`r^ly192DC>cmBQM>{CR zTUJLy9e!s&^5C`$1TWJcJ{%)Yk25W-CyC`W(q4>UZB}0nG%iE_dP_MgK;JV#E<;Be zg(vWemj_BqqqhA5MAmC~AEA-@-98$qApLZZ)J8O?pcwzY79zw~u}SZ$^$DXZ{9k!} z=t`sXV%bL^T5+67x~zvzcWPhv@;-!!+Ol$g1P|Z+M*CgeGEMgJ524pPh6`k?f<~e( z<pufc#SEjhGQ$X5)Jfv!Y}k0qhQ!B%$#)P9#dPUK+QO)jZvTMUcay6&YC-RZdXW~V z9oZv^0VA{8tMf8Vg;Dl<HxD$~SN;XVF&-y&$1)Qi-%nf)gdZ>kv=95h1oE-?EC*e+ zk;1ZWn78nVnP!j6%wk5+v>koaoX3z2JBg}vR_XaKPcw%Uk`f6e2C9&0@T8kWn;u^Y zbkAXcjHwAF<UPUqX4}n0;OhzaA*H1fm?-f^*;ahzG;P_%2^!Qat|IaUO0}C4r}L!O z!9+1-`{Mfo;cV`7leGNG80d7Q8UTLrMDSMM;9DL>7Umdcy_vjoMQ0sIeilP9lW&0J z*#oo$d((rxP0n@CHA-*nqO<RM?|4!N^(V%g?1Sis71(3fdsXPY!<?xJ-aayrBRP;+ zF%6JCtXN>W4FEu8hlHQ?;e928cV7-~0$-*f+bUi_@GI!9!tV<DK0#l6T3(KkvN*?b z>}Jc6C7BLsmg6_Pw8!Wob=iQLeE<P{5CMJbPy#x#YYSzxh159EAHzv)0y@?A#V0F3 z?|y{_=m}b&Kf0X|%v9w<vp#1Xr-!lBXD;g#^f0fGFUW1`g46;0%7SFF1?jevFUWOS zd^t?C9Mg!HU-*u`nCh<qebXX(>|TcG0Vz)c)<EF}GX1)$2fdh<Hqm7H)SX^O1IsjK zi}@y7t~-4nTr}xscm5%F<`H-Lj>_~sm>U`GUBxtmYyG*X^_G(`4nHI~yPcA^kC=YQ zlYI^^a}K-8&*2sO1hSgj9<T5>?3DhV^lGMp7U~Nl?S0|=@i})C0%V7>q~E#%x^UF> zMTeyC&!ScD<VimyX6}<|>V^wdoFHe5n0^GL$<e~8xA?q$MGb1OTO4#*(y#l08r&Hp zlyv9STni8D923Q{1~x3mWm(c!oHxOY24i$~kZ!7Au9?yw2~pB9BcJ0U^hezH9Ta80 zXxCXP*+(u}j*{81Qx9n{?&fP$jC+w9Vy0a~WS(?y9B9~+egx3TCd`6yOKth$&4hj8 zKIys3V~ALxgm$LySYk%*U11D*(|yh(8l3y~YMBSm>o4XUfvVJ3Oy4JtHAx>Nz<5jF z<4ut9tBBCYLHL#SEyJ%|?Ov3aSx2~&zQ^)86c@>OZ6{rQeOqRqCoOQWfPMaoISP-E z_X)V<$ux=i#@sA)EOwC|K_U;C9iE`?noRO0=QWJct|>n=-sFJuz-YBQegWn)^j|?^ z)NrFqm@_${iUkdV5nr%Rv%F7H)A>+<a<lm=Od}fHJy>3a`FhJq@4UuW;c1-M&IOw_ z$}qqDG6m*cwJ?8qE2DNqz@&UkEU7+KvLS0Y;~eI{O$-1oL3Sg+s*y<GkFM$zEj^l5 zdW7pS|FApr5LT};o#J_eDDlXL<Rg_S@vuyZM`TK*PckJQX^0Z-j1u<{+8xf4=9pDV zJVcb3#fZk>$vIr8n<#c7Oe&98m(#+&9)cd@my?aHC_}gx>aFM`=4MT(B2pvKI{FLE ziXzdkj$An~OTh`oA|<<{UzRj*O8^PJ^lwhAuc0uA6f-1x?S&dduX+>)<;bKRD>+zc z=OQB3!x}Vs)1shBtPErC<i>I3o;%}+NLeGkc)g4<wU;Ou!{mcPrS~y2%LK0KZHKlA zX#%i8A+>#+)LtA`kJSA75>r<cdixIZ6(0GD&AJ}F^)jmqbcDX&*r51aicf{$kvsQj zK>iMu&o_aD93(pD5eY57ieLkMWqv!$$*RYwM5DZHQX!|J6d5K*`Y137prZUu3KeB= zDhiN#ZxUB}{l5)LJ^H4VdR>?kuqE_GDpPIbg2+Xe1?n<u>a|$G<T+CqIVXdnYXqQ( zmt7#O?<~XCG0JzpURqhn@QdWe#bP{j-tk-7MB}4;+g=<u7I+)uny=S61u@5Dm2^zI z(L)txTC!$+8ysJGz47&Ka(ovDj!z%P_+~NfHE4XUBekGI7LYg=0@reqdlVbx;PZ%$ ze@27XaPS%1XyFs8Xmf+;ebO!<AAC^;@;TB)hBkZkXejV&2=TfOkYyPV&sVjb;VV2? zzW5F62Aag$QlIkzt5wl`+izqjRrNO%V=j>Ege66I_UNx0K@O3*_oL*r)wxjWX5c3Y zaY`yWEf-E<)*wRWE(%bdi0y+?nW%m9Q#Nkzjp9~MR^-g(GsOs3MdVD>`L*Acou{+1 zrOB_K_Q}=7T3`Gu^g&8nBBvF<a$iQuy;L_0u^_bp;U6Rwl+7R6p7UfH;11)sCyj&E zPh%!$T>$+t7l3Ls?3ziu$>57OF%qnmreDNK(C1(zsLbfV1_rOGK*Oob*TC>m5lP(s zBJ=1ZTw###QNps3STo^~R9PTE!so~mzO(cXLFG7U?7Oi=B7q5csUC`q{EVZ>DZq(P zWZ({<2wyFs<Qu$XdmRS9y65bX#dU_VUx9JdoOJgA#yqN6G%$GFPun#-?m4spNe}a2 zAMv<DglcbIq40lF6CMf#u+}D<b30>jWE&(AfXN{9C24E}24n>(o$$5*3xc(UC~ilw zxofnAbf#Sd+ED?*f*Px*Iw<_ZRXsqfKdAaVsq-f_>il6@ozMN`La6URCqY%}4?<3Q zyK!Znw1*st*~W9*;VDRiU%~W-!?FgSYE<<GrokVkg@Oiu*ssBtbx@H6?k^J7S`GeW zpax%t5+t20+cXRUdq7mpwNTPIGPpvJoFyf#(<lV7(xdN^Lg2hrggOsRpr@?4pQ%78 zGJ#z_pEFjvlb0GU<{SnGkP^Gm*vPkYxwu2tm}$I08gmVySI2z}y#mNr5#zGPeBi18 zG0yb6-*<h=1J>u6_RX%36c@(&JpNg;>r+%7us+9DH@H5Nsg!?xw(?TS`YeF;Qh$AD zyg}<zOY3vb7tOBEuz^AAbEKB!{rKb>Fg8~;3}Kn^?r5*V1$R{HuoGm+<rY^Rv5xyL zQ>0XT3v&RIq0~47xoSH63!{@w+!UtA1onsrzC%MoC*B}4@0E!P^X{${M?F5_d<8KQ zY;VMoY=+0#EWNTFKvcx(JrH{~yf)G&yFNbCB)!ssZ_b;PjT?>s*TNi>B!Z|(a+GT< zKEFJG;Ai$85vcIUVn&g&{%Mo#z2_0q!6cPX!cMm<`X}w+V1I2IGY9nuOTNp`#2vkf z+S9kF*yOm06}G5_15`vk`5TwOt3@)lo^y)6X;s7;Cc6^@s8tcR!Sb#J^ZNvw(oM{7 z74uXyIKSIB*PowDEgUdE6V30{-3`u<zG>%Y3Tb|d{m_KH{#845excdxNi;Hzws$|% zG5q%W%uSd+XdJOILWyjzE2c(rF=pK762;UYG5kQ|R8)<l-el?f;uB;`<ADnsv^0MC zun`F?dotOOH4=C|lh`e>C%8Wo+R@2eSFK)HMmtu*Bkw8%Q710MwL@eybd?^CQ33h^ zeZNUD$a-rCU<MJu=t>nqgp!9*7LHM?Z>~Ywx{C}A(*7P4Z^9O>>g;k}$d#W#1pB^( zHnW%~(d0#h3ka^xCLLusW<;Dt0FJT3*UN<!8q#ycguZEU>`iQ&z>6M4L+j;jEzTdn zHA!V;3S+deY#CD+>3(fyNFlsKRv0gk79f0ECLxi&H|*gZh))ESD>rKJW(r<1ulW5& z>D`?&RD_bz)J%rSlUV~_tN2A0Tu|<OQx;;x(@$6qN?xTyXTY8-sdh!o-JUiUu#Fy? zr+0R-+kuO|!NYM6u5{a*G;xFFVAZ!+4WILb4W5Hq`?Dxv&m)wbeKDad_6z6DZX8`l z;3&G!Swk*mXB{zkCrpGyu0PgDpIkutBiJ?^`pyf3w*o(8j;1ao02IYCaV<k@YEU+6 zxWQovT;epshiTgb*+?{BV)~|C;?3o3iR-DG$XF7%bIH_A*`E)-uQ5<wL!6hqrh5P@ zOcK#sTu`ngNR7Qn5tMX7C0I(@uo&cuR<=J3ljC&ua$1V`<rM?zP*_L%A^d6e#TVgk zm`_q^yeuA_-R&o+<lq(m!lJ$PI$yN%0^W_Y&az8<Pu^8|8^^=RK-y~)Yo*aj1C9%| z^7Y^EGw|~21<X8REm_KCnFxFb{nwj+WTW#>SWNTp9pd~k(E9Tqgod>9hqsQ<##e9t ze{X93IJ51aztTXx`2$#xtWC~eoxZCY;Tpv0B%JtCFn}CSS_~LZ5XeXh4FWM3YJCXU z10mq*(jWxhe60xx{1eBvJ?XXBSCg^eTBVUdD7+6FL4|^AVXbb>3(`c>+Ew^bfc;Y~ zMi4&Oa>16w<A^yGPfO2W{)`x$F<g;CAWCXGXFGX6G?-PaVd%MC>WsmO>2<*NtFh3u z%bY9LNY8fW(>&?uM|cW8%-j<3e1w*AxKCEd8XHV@>26+}-cQ8`ttO|^uT4B&e2zGa zv%hPhQRhssmw+S4yQX)&s=yDrY`UQmv(f2TKnvUiG?fU*7VH^KFc!EC?0x=v9%mEb z7$#l&4?Xt6*KB|?nrR^SYXqOK-wVQd?pSh-{hfBX^#vFvPCKvi525OB{vmt@t~*dX zBYpZlw#^u$Jn4*@TCm>cUSyOGzf1g0Pj<0(zZ?E4SM~TCSj?vDOnYI;Q1B<=y~UfB zB$<54rK|9(_$<xe(H}b!^5BJ%3$PB^((re=BCU6w^Eo?7BLEI;9hRO(6W&P6NhNit z>`S6a8gNxELNxC{33%?^0~k;$BWP7+1}gV9Slb)%%xvl5jntcXM%;#ZT)f?N8nLO; zX3U@ZETuj>3AyDng)WF!f%%b)s|}J04GQOH?kvp^j(`ubA-L!1<xxOktv8A>>L{?2 zdJ(#S{eklo()y1fYBh~f@GeE5p+S#69WCqJ5v);pQiYL?4I>|gEt_WoJ*XB9D4?Rn z$Kl~*O^*RkDYURMf(m=@S4S5ql$78V{A)KePb<ZBSx%OgFS?3FcwKK4jjR01kWi9~ z!qT-LBK)B|LMR)DzcM_-$E2d^1-obtV<O!V%pZ7vM@$nrwDDgRa@XhpQv?HRJ%k(z zFxB|VdQix+i&A=l*dG3p=A?<%^b9J)_><K5!s{tQFah_rBOEOezLU$v82dmt6zs2E z0kKQ*T>-&eDNLT5UE6%vckt_WNvLIHWhs_H4g@QDnFzy3Wv`U7Kfrn+P*AKvNL5sZ zH!=0xqG&|>dSfVxNj!!4r9`VVf&c;%!Qc_W+Hd2is9Kr`ir_-cS%glm@<;&GlsXBq zkjt)x<;a!}q4ojD>x4Ij!t*rzfP+vjg=G`RT4~>CE#QL`H$n+ZEE7wwC>j&{oTCw3 znC;uita+jARf6N_<UxE*;?y<qnyu0udk_S<gT{@ZSrg_r0F_g$lJI{&(`;mJ!WKa^ zmdU5&Ug~q)r$%{E%UE?vE;V4HJ3_kq>P|F(Ay#SYv($!3i^|w9vOjz21e4c5Pka2F z=$}j*Km?Z@*o%0y!jdG@i+@fs-S0{=9mn$#{HDKkx`@c==&0!EXgz1N@=wSI@FUCv zS00R|;9s1IbJc<=8Gxa}dqw3-8B=-<ze*1}JAU%fF1V-_Z?NxbY5eO9`_)4c@LV6n z{sX=|#=aQTFFU>D&>o9xwXHVk)5mGup(@GiLv3eEN3&UDRm*|VJG~xrfurM0*8}Ht zo*T{)Rv@j+7GSN};uAL#5~m)UbKy+n5OTBwlB8D5{sq6r;J24PGFN*qVM#BvCEv|z zmEPLLd<le5#1koF9-$rv-CpU)5h-p#!yuR<V1Uj&V5aL@>H$%N$I!#ZNLRTYPe0^J zBQaX$7=o751L$nZQm9l`dHt)6+g~l^=oJ*YD4U8_9FEM!--*6K5gaCXnPkPAzQ7E; zHApW%2KoVx0lgf<@iGC{mD_9}DnW^;eRyR~qb5@~F8Bw~2xQAQ5#-L*MGB4z+|-*v zfhtvv14U`s1=$^ZC*b%+$CZ$BtWHv}_WudVD7BmU7Hu;P#)waQp794PpMpTHvk}g2 z2na&ddyGe)<{AF!VT6pUpP?LYl`daN5s-)vszkw#*`6^b8~BEW9ST)TF2A8H$rKGF zjl=Id@Na<pcYVAkdyv@%6wdS2NuRG?BpJRJSDS(RewQ_Ai{hDF`!aIMFDK7h*9%Bp zq>aZ;WH4mbSw5E*_uzgz4h1Eg!d6*&0%4YPd`Ro8--t8Rq%P6_9#+EYDXm38QvKj% z8!vm=u8ozINXNxgRM{eV{|y2pX~C@Pc1qXpQeTy&HTX%mODaN7&%4yFXF?=DFEJA_ zmK){$p<_GGm7a8VU0YI@YbwCKbiB2-iF_iia}my)W{PZBYiX~3W@^QpYlZhVA>=jD zqaWunemZ<|o~B}vT(RQo=;DguHtna|<xif{YMP{n4bk%io3Y0{+vA}pX;m2u4x~Lx zvt_e?M3>67eecrD#Et!UE7G)us`c&IF5YB1SwRu_J1c&SI<?F7jls3W9JLoQ@41Ot z9Jm!#kv6OA>vmGthp8hYGK2KkTZ@2xOuPV_+|tM01AMQ<A~}C_;fM{{*M2;B0eAp5 zGf0XvE4biKVit%4>cV?i_$$s*(our-H*yqU>J5HSys!3ujjwe`I|U26X|dpKW=tt* zM!-PKP{E8N$ACqq5SzsCjK!xx-`CB}joQqf9-5n}GAX8=L1i^SJ;2EdhXowPI0D5V znwt=yZ%`5NAGiQ|2Dw?{q^&(wHX&L-u-l|6oU_J3f&@&;XwAk?av$SYGD*8+vTYp6 zX}<UY%*%j@OL;MHGvEQDa|Fd(2&HT<A50qknxcF>a9mhIZYOxwWIlJ7yjf}l_nw35 zDbRsPA4Goua01O<9Dw0W#&B9N6mg#o)sm#G(G1wdXK5rf4WZ-#;*nswFnxMhrD3q) z;Ud17zENkQL8|Nl(eCq(!^D!9&a+ioS&KT{AaER^_vG+Su)jm>W6jA}7Gu|dv-^rf zl{G8#Bz~?=nlpDlhh+W^Af`z?L!5&Lj#N`8b2<@TBCc?rEf5{ao1wZgMvUV@h0Fnj zcwb^Zqh;n(p=XdNp!0%Syc^0)Fq7;m35+cK%_JMr^A5vSWQJ&fx*^k3adnEyVmG); zlKbK>#P}I#YePJalQId|0n}yN_(rG+4iq5iaL<C|(fFN=?`c>Zo%9In4Rf5|mCM>? ztR>55(uuB|l8bS(imu3c8KbNi**KlY3^+zOYK8T31t8PyGbzQ-R5{y$Wfx0-AnJ=% zpc!y59T<h3k_d`<b0iN@fVNLs7R71xprdEDBrs!NPdbj;(PX(J)+)q=9F>t+Oh_wY za|u|tO?n0A!O?}8P67;~A1RDIps!?Kd>R%AsGjJHe}O+GQIG<%0O@8fcfqZU|AbQd z)AjLZ0Hcng=ub?gQ<r))U3e~9cQV6daI?N}z!e2?b`f8adcy%jD)$5vTw8i_WuX_D zB-s`xM#MS994q#t23g8ePYdalD!0&*WG0k%9QzW_s{XB=IQ7luL_DGS`Rv88h{mce zBl08Qh%_~6a<}6??=*0u;VxL55e~D}TG&Be+2>X=!RQ@{ftz<qR$wzJoZw*ATq(=V z#0wyo;!VO<k+ZX<9IuCIUdJNeA43j3hBzR#))5#Hg?5PIhhps!c*)?$INm9o$Ohm5 zG;)jBq$Lpy39#sc0Dn|T0SW*s3*tFe@^hg{zk*B;wSy;V$8A=Vy#zm`&+%sf!34=4 zAU~q0$Y9CUPzOn(;tn#!3uSidHXs(m0~aR7A?i35E22mmj-g|&%B~;h0EA%Vg#1Lu zd7+PZp)+m`3+6*%??v@_LLX-Osj>)V7@i1A#sRxj{9q!7wpmC)r>&NL_{yXPD#+=k z-oVjph9$Z9nGCGw0%MSh_8<Tm?fVkiKS6k&3WQ%s4}OG?%2yD6{#lOjkdP@dx{DER z=FDYie_2nqdVMu$4>Bu0$3@X!Fm<e;DT?%WKC8KR0I{@E2vafwBI8N32SQj#`eHhm zq;%-|(5ABy-BqO!#-p~{i=xxVNw;)W#Vus^r2!>~$te!F6)zGcB*^9!kTVg2DFGT! z9CEeDwZs}F9Ei^0TtkIy_BE%*o1_bBAfY;vic~8ff-t!%eD03KNtVW|`?2hpoN9e) z&^RU<SUqh#;-wgppVF&Xt>7~Y*E)kO+l9sm0LtV5Bcv!bkFA?*KC@FpHj-9r2SET7 zM)1=^(&YyK*`0Cx?9i!)1J3SP_@TcPoAh5Z8>?!FF~owblbmltbwpe@oq5IiLZ?P| z1ARdfS+fcwvU5FV=2@~^F#xu!0yA`gl+d0C4eG$W&c!|^U#>2UkuG|PAg%|eG6sli zAWs51O085+=cp$PA#6s@9BOe4m-_q`jl~md*Z{GPkxXDw=(ZYbeHDtJebniYExpT@ zm-Zqbk*eyViTjw*GrTR?B$PlkOj7Wj91K7@fkJ#Fw3lO)lDCk4QZ*5n27iXqTGc50 zU7!Cz^A#7ulWw1cz>QpSuBlKb-JWua?00tznb8-v2aVe$_`h={<FQzb67ecRStMR_ zzHFbBmWgjQz$*FM_t=SFOR@=<bLontOP+u!jkJ``PFDK~*3JfA);rpBqfy-G8K>`q zkzH5ub5Hk3oFH*lXUpZDB}|PYOs$bIwKHLAoHH(4I^3CK>P8xkL+ufKqDXpYg}+CG zi$*@N*&cbh%bV!&9&L}2YLA#`ku*xvV<PME@KFX2?|95n_0KgpS6+S<$~QLG6P+}3 zErVN?Ll;icB5Bj({<#idJ<pVTZXCM2+_g>gxLDic1!|8(50XvO<8apFiJ$pg8}E^q z`wZn8o1;nF<4VK=@Ht`wwMaVhn17CwSdWXF?U9$8+(eJhnKV$nO6?K5=0(zMO^<fg zqe<?u`Ss-G5C7EoT$8muuR(`6HEI0|=2&C1&ttv4gxVlMkj+Wt6X+Pkr@s-{*l`rB zY#!B*luUB{GFJcAX6nD>uRnz9>!lq;rRe`jR{x@A>fh?GUyCIwG)T+k`fsxO-&8j} z{)_ze*HC?vWR>f0;PY>${x=={^QZbrl1Z+=gU`R2`Y-wG4?%r91tm(K6A=RhhglQ7 znrULHzlmQ#7wq_#v{Y`Qnl*9A+cXps{Z0IfnqZ?CBR5gYns}<2CiZtw0dX%iah*=k zNqV^neF^bCTQg1k#ot5<H9?A?R6#@zSeRK8U7Bek+uuYLxRRX=JZX{KL^5k)$B#|J z!sKt_Z)gHy=vuk{AXa~QGxc{ERY1(-_0JIvV+vzgeQPuIm;38qLiHo0kLCK)SbbA7 z^{xK;-(&Wm$VGB}2cLgcGxPV?{~OiUOV`Tvm+|>GQ-4RCfBsb8V1JF(t7YS6GJ68O z?`1D%?+^RmUrp~L?0eYzP5$>i>3yVKV((Y^-^cLsx>CZfC;jh#2I8Q60()QNfByx& z*V|Lrd%OSr$MinJp2ptu^<m?r4Slqe$KDU|mw%YIGmpJb^1r{I-W%*I*n5NjeF5Iv z5hHH0uVSBmVjyH)Tu)VW_D$^lfBf&sW+70p_y6|4??Ue*?T6U=SN!kKLc_rs;A-~X z<A47xz1Q1o*?Xt|{Z{^7|7QYSzW+T78IQInviIr!_q3s37-t{E-e2K=@8a*%*!y_p z{k(e%W9)hCU4;5>N?|+u4EF9PiBJ&ppEm~Ja<F&%)pwS{SbG_J_o@1>S7CemYwX?I z{GDYp)UBr~V0m~(`VhlkfGrFEi8AQ_v^}3@60wKezzK8zcRE$oi|^-&avBmA6dK`- z&61*H87kL1JPpm&HKG<;s?Is6ctkZl=x~6$ePuK~V|{d$(KUE7xsk?z{#^U)ySb(s zp&}yfWvaG@im6-mOb<qK7jYdT5|R^L-zOoFN-s#;E*cMWfk)q7cu%)p9GO_ae)Fs@ z4HkP}E{5M|rE|SjME(`Ov<f)4mk@Wmfdv{}z;t^aV-fKv85}GJ2@3>b5kR~=9Vucd zy4m>%LUQ4eJp6=tVYFhW6eq8vh;<AmlMBWPJSj%FBxi^{D8Y}j9fhK&dV7ib)%F#y zQL-OO&>`>gK3&SXb#3?Ivo=Ppy=$Hxc6dDcp)O|WrCwmqFj-(Y8_B8PO*F2S&mN7W zpf<U}5p>Ba7^H_WC|&_aq5>+g!%FSxu#!+plt8{@Q?A|ahGBLWen_smj(`R`NBuZ8 zs9z0Bya>XIva!OZlO_&=Te?Tur#OmVGaZ|nyP3^YLqB0<t-*V^JlNa5(#E4?Yr#dq z<8EZ{((*^x%w?OJ2Ve12F@Y!j6P935n$S(d(^Su&;v;x{HS2{FtHeo!M>-H37gC-a zv(<Nvl)W75)x*DDX3T4bIGEN8HmnJ2hTx1eZ?dR=E_ltpcd?PfcVvPYg@t>rfrYC; zQ@*)+=}(U;i(r-);W_PzF?kUfkVp8zxfg&;fJXs8eeoX=Gy(Nw-(I)@lcA>4UeuKu z<Q)x@og4au!ult*<B1_eat^jhQ$;os8Q_7Z<C5wD`DJXbGyr5y4?H9m8{2>`=`O+} zX9zL!jXsO?`U?Q;2m&ng*TcaKZ-}#(?1eC{(PC`u&{=w+lsLC<j$TTmCD{jjr8Cz_ z4OWm*{B6{LH+unLYY}1Ve@+v&(hg#@Ypc&YLexT%T*_v0&b+{oa-VN60T6u*(Eu>Y z!<IDlp!1>zGwzElZd3+kwq#z~I4Jwp17+S{8w4doTMkb|)@9omGoidkYdqAp0iYl@ z;_N^}&Eveqn=(U;CmiK}YA{pO|4U{l<BHi#00#wxtF-vmk%-=blp~zfvh7b26rUw1 zK2l3igtWpL>doF!oUY>uC$kBBM!0@)N*$g<yg@k{7dxje({ni-%7lGe;ZupGkC(`h z<RjKE)*_|6l1`9MmSl4?Xln9ADKzbiFGpwCxW|4>AMVmpW+exL@N<{3Y*ta0^7Rv? zd1b6M#`k6Z9pJmo4%o6;+8^%9_>YjDh)&=qB7PVcD7?2G`{xiwYy;h&zDnM23G@Z? zb9rkRZ`>{oW9_X$d%42<HPY4}S%cUP$eMK;0RWn_7Bt7^$M@rvG`=_G@h#xZoyYi| zX6>z1#@A0B-`n>#JU)O6@!Uv%b85^aV4eY)1|}F>rz0HQv+P5F>T)FE>=kVFnQt(E zy{EwBy`$Kd^y5U6W4xVy<x0z?lZ4msmkncS0C-d)k^ziCGJt1?PQWo_I!ani<fA!U za3O0L0UzL76q9Ih)kZiBR{L_4^DY((%uBlmkh}2lR<S0_7yk}{jA-4ch!z|I0lX0> zq=~#5DyNoc$A*OM?KBK#-$=Mx*<eo88_crDX_goaMlzC(B*ALem8np;i+wlJcU!L1 z5y_+&712piq8fyF`r=<>15>C-9-MqYh2sO|XAXq<<uc511k&p7?c8I2m=j_V)bEm^ zK0$_hw;vR!4{r+Udg1~asK3mb=1`}mWw^&#?XRK#ss~Bz5$H8cf&gC&z^@|QqKPVe z0<wxlUCVsp$t7&m4aj|!9x{y}Dt~y~h^80GSa0k<Finn)oeiBYRHD_MfPyl*uIJhw zVHK5;Zu_;Nr7EYTnyIYb8j1q}KF!1p#_Z_7JfX@z%M+rO<n^RS(6=pD10XOK0?Q_x zY9`%?V}x{b31jy>sFmYqHrGsSxp1Wq<owQlDNJPhSZI%O(zquB;tKaHry-c3MS86& z;36Ec(v)Qos<qy$v!t&*Kf^f37$A<Lso<qxO2gUb;8S8J>Q0d6NQ&#l3d4O;D@Hmn zhTD$qRscJ+iXfXNbijA`wwG^ruH<ydbM#v-oWo<j@Q1_nU%wdRL_kPwuHC$pvNLu* zpjhveUsurj;{;07IgyW${BaYR)hrcJ6R4la>hId$bp6i$`kkph^bfgyUsnIIX6o-c z%OFJk?}7?c7$xcC`h!^giOtl1%wPX8s;`sEi~0D6^Z7SZf1<xW<;ejEi{$!a`TX}a zGk<^m&Qu@sm+MdC^KYj9t~37mLoC4iqLb?{;PY>${$u|76rN(&6~Te^?;;L@6|4!N znI>*hnwW=lI`$QAj3TA5qy0@(mUbg1iI8CpYw6Ry1dJpE&o+!q(Yz%dNB>lL!C2sF zJxiP8t7}AxL$-&L=s~uJ=@~$TJ)DfEhU{UgwuXuYn4_}%|1zB)M1>ysWn!|lKaQgD z3^Nh^Jb`^;Z`aFjA^x06#|2Zmam~&_XOXwJf3y^zWm?-GXUc^!a1=0}mu?750>@vo zYEU!{R&;e-=%mN)ZyrqHFOl&S-w;EL_;YYLST;tQ4;rtyUl4LTlwXu(qL<9vaU|ow z&rIRUP0yd)F#5sSLa#KPvfpxCxVgg%J+e%$pA&_?73cxBl=MSvCmm}Yik!GbtgNW& z<vQH1;&9?j;huHB2;Y|@$!lC?)H=4ueO$=Xe_n*{JmgX+5=PY?7jD^v-a61MsmBMN zUfT;}D?K^y;x*SBdY7E~IqHjwGkS3g+Kt*GR#Y60?pMKz^sDg-EDrkPo~ZEDsnh+A z_uD2`?v})DyMJKtDgFU7dMK_^_$MZZ6=w<aWZq3HPW-q&D3!CME&dLT+8LR@o}EL9 zp9CDh;<Da(ciQ&W&}R*bkUmg72+2+}Pl!0^mM%S&U2!-;+(}9KijUuY?~Hqp#_Le= zN$2fzX2Iw$J~roe$9$v(&cWekbMdL$@4k1Adtu$++wYiv7d9Qm1I4GN&%XU0ce)v; z=8J!sKKtGo#m8@*al6C4&?qjft4u!(IO*K^)vj8Du<Q#wi~B01D5MrRwa=5d-kpyG z)F;FtmhEDm-c@d}>~=5Q6XmQC7n*VUPE4=vlwKEs0|1#v#LSv5XM~j%9o!4e;=&rs zHeqFL2lQY`uVY!Mk-w)_tPxgzVG>rZGg+KQOO6>e#q?VD!djN63~iYsP-tOYmou1x zcv@Il*-2Qrsgngm-R53Momwh|l{@2wmB-^nXRT$MC8y5f+#_ebW)rfU#Z+B)?~6bS zLTMT)E%{hbX)Hfxk-o!K8#DKMIwkUck_l5=nif-*{snu8E=&Ipd(fAq@1a@iygk_8 zk!9(-*h55F`c8V#m8I_x(|5!oi*_c$v<}4~o7N7j3Xb|k)c_V<&SJ7Oxy+hQIc8zy zz7E35tsTV7BbJS#^N8gu%mGk1ZlXElm}#yHjh5|*++S$yln<!XbvZ6W>%RcN`c7D9 z%PC8~nLx4^v)>YLL7mK6%T5a=j{*<@=EG4N85qr7wz`}~-C&AfjjD8K0=Q;zW2YP= zAIC2pup&4}Y1uDs=i@kIBEW99<QQoL=1%!QjM}KvG=@4_F+K(hj&oF4^3lo;HUcpd zivjpYopWd6phsPotr5sPo>?buV^iLbDWj|HVvQxgu7OoIcR_-1;ACCYMq2G!n%Y;G z>{h<on5=)Hjh0Q8oLbBU*&Cg;U4FqdBhY81I;XR2PME}h#bdm$El4^@Fxweb+hwa8 zE3rvfxu3&wBc`fM<9NIUpxtW$54G%OM&I%s?<Scl@$X~&dmsPa!oOGW?^*nl=^yd_ zI77O063*Zv5$zCq$i$hQL3r>D9)O?HH7t>_iP%cjht*Nqh$PTAk+OZ&k!<KZ1-nU1 z!9tpMg+1v9dNW>q)7@_Up56?@8_Q-^3U1*7<`f2x!*MMdk88v%Fc9Xiok0(>e4=MA zpX_*QNIp@uHB?N)e9)da()3!Aqa%30sU5Dv2$wfURgiO5DaH9CtU;C%8%)l1IueiX z>qkK;)GyYuHX2@ly({aL>d9P6{N?OspNG(6-(dZ7NZ&3koFyAL1UpahSY#x#O436F zB|THLHLP0GzMQ|7cR=wL=!4tmH&Guqi9M)!Pu8$3gr%&d4yB8~gT4UmSWcn48=*Zl zcLs#P_){qCJ;qcYH4LV>f(9nlU|jH>B-(2~&6H;#8QBE<`H-jbL#C=nf${f%d?99_ zk({3~e;+#&aHBg1Ozn_+;So4_J4WRhEGNOJX*s<}SGaF2J&ko|9;Sp1QF8@6G0?cv zkrt4$F-k1f5!o0c>>IGa$T&z*VEZOY_ijWG%MKT^G3M;S9nvKS(2^JlW>5J}zeB6y zC`vsVhf^8e2%d*i90lxj<XbTSQU#=C#q5X<ySKnG5c&BRK!M9SgylirNU^=FwRfQy zlJ-vHMCsX@6G%CEm`n>eq&rBTVG9-e8>I-R)S(l{Y%yn#cmqO+kj+I%ufQBU*CU7R zdUTpA&Niu8zV*(r@}b56!+q62816XQ0k_~LIHooB>~7|=mF-y;=AZPFNk{0T^(y%W zkKZy8DGm1_bv+$YJ|rLB=<^DjCduoPcK{gD!J@?n_1?}<C=JCvcDyo19I;^@YG)o2 z_sR{q$tfhYdsV6Jm`>0`o!Qv27~ooD&@B=O9JP@P`>^A4-k!m>nEfb6HzfBtY(o}E z%I|EII`?6=C|S{LI$727bjIlESX1AJRa1B0Vugq@>%iGQpCa{<%PREfsvgbHXKa9z zISsrV4s^Gk0)vTz=t%LS8D_Hs>dZBP&7_Xv4#e1+JrC4H%{O>cJoD;4phB+lIyzj0 zR0(sD!<-(`W+F5ggiXQnybN)3<b>w|tAz$^**yuQ%tF>d#FwoHLV^epiRj3oD|cha z>5WClFUtD~&wLU;z-e-hYse?SQcBLC^`AsPwCm5jqVoEWPfkPlXfH2^7?K-H8|E{g zA^KrkD=o<J_AXZO8YCjXg2tj+qU&gc<5DpLJ0|S!1p2$Hm_Z4~W5s=*F?5qkJ24{> zWz9Ib`!dm*e0_uCN_b4C$;U?X)FY8e&J<e7JpW2|<gQ(deBy^sBkxCf8t}B!eXF~r zQx~IcfRQZySm{r9u{=CmaFJ^?XP~b>5K94V30R5&;&zIpPsYC#{7b^WA^4XjU5`XO zh`$^_R#UAw&LHzR<AdOFCmk0CW9hnThNY-8o*g3sfIqI{BV(MI{~&%x`Q?~HHWdEs z`YMP&TW2=HpReIVQTg*yCOBS;a3<PI7%++ZOZOELS@>DAuXq}`xa_`B7<2>U^?Q#2 z-tHQ4Ws|o3Nv1SrgAsW<FA6B|4-~L$wv>~c*^G-?SUJYPVS1`B0^tSwL%xp&7<8Rg zx~zcWu8A@C3&=!>ct_+S+@UyW4AKt6S=HgwQ+Ct@A3I}t8SQiq(Uxr|0?sXrmU0%K z^ijZSLIVM-`+wvMO^42c<hu=(=XHk+;OHlm(CtiO2fD}RgK2&9O!l$ek)G%hQp6{) zt7jsDN0iG(!^YwpOf}h~z3<>W6I%bE7(?s8IE`j_2_#|ITW1GWT)IjgW`+^Rqk}uq z_OaoPdVSbh*vGai4hrhS&~zV%7T4?Jcu~vdQK;#|*mNH&O6v9Ta0~m0QTwoLcF%*9 zHBOb!YtnJh4kK|!({(y}_HkV0u|AmcH%VMRmE%}G(`O9DXJ~z#u`DQnWNh&R`sJTP zdv%UN`1wR>;|d;gY@lt-#&|8;)8-p)7IMr`<^U$I(-Axir5~9cC@#OqY9DefZbQnc zm8N#9VTgz0S57+F$*2oAGj!btr32WER83kpA`8Ec<AW!bMU7+pS+0c!9dyPsj?pg~ zaaah(d#YHxq9di_bq=&Yo0n&jKD`A;tYi*547X3b4Sv$ePQ*`i87=hz&n5PQ3#MFa zhaezE=cwT|r%(<UUeocVCmjbVY|<T{Vtlx(!8ig1<;#fJT@CmA!0{^`w_otPsu+9| z#muBt5zNL<KwkT@bRR#QJ@f&C@bCaeaJ2ubuva>(kX|d_?=;&e4*J-yMhPX^q<Jke zL<^;Kwm@0ks5EzsI02ZDAQmK&ZJ&`ub~QwB<`G!}3nhm!T&$;PGfR5hIDpCX{JTQQ zA@;=tS>*i<q%Lpj3MCux9yUJG>xeluI6T3R#{R(1d7~SqU_H+&S4%~+!AB5O4&1}# zU1CnH7^&Ss<f!3fNdmjL7M=j2LX6@Bx?}LrOrv9fG8Mnx-s^h~&YXlXsQ}foqZstk zbYH;~o;@a=;OZU#&9h*NJ7QG?drJ~{%`#P&T87P2EL3pY>%U`d7fiW|r@X--GP8X- ztH|;TWwVN=tFY~=J;uf53lA=VRzx=+nZ^BdOk?#7vMEx&jiUZ2;`&Bx0N@k@yY8ty zmWpegLdiLR%f9@AJnXO)tOFtm5Nc}lHalm){N)$%0n!<d2x>{WFDDWy3pCQ$z6pvG z&xr&LSl&`Td8=Mm)e*$Tb#9?#DXrr|GmRKZgc(R|KTLCVl9MnQAAuKi{7o89%Ma2^ z#H}^`IPnRdVzdOil|{RkI`D^0Dmfza5P4Tfrqj-HF*+zQofkpWJxG$@#~>GWeaK1d zK~7?|NQ$D6n4N}bwI>b8gX!$6XoSvUv`sq(iQ*8z-tD5F!Ld^NzvWmI&uEN?j9@QC z`=_Y?ixyMmz3!z%U#w|}`jTn%m$Jo$>=#!0TMN=GdmRU<49W=RMF1d$k~AvI;ZS-t zo@D?CB^3V8f$&Qw6$m)XhSvau*=k<^8ElhImNx>3-@f5<bI{Rx90OI5#N<q4s;Hk3 zT=#S3i}NhO^AB{v&WQ-6FX7Q9{fjrHDq*6SMnGLnKNX-}OEn^#*JMd0ytFr^+2D&Y zB5MM}8xbrGE8CIaVVP5zsL=n#u2X4HM&`?=$x51xJsNF`+e6hRk^tC(-47vv+w+7H z3Y();WcEZb|6FNq>@hGqMwB#d*k52e{fp=8Uwa5r?-Fq}DUu!+{mcSWliJ-4Mn;MD z^{E?iM9O*Ms)OD*(OI)PqIe?}LhTC`koaTr?)#dpMG0*2CDhAyN$7mchfEMp-ob4Z zmOQAxGN{EJj`2<~E-_+$Z;dQrA$}L}=J>7#0jGX}2wnh(btp}c;|@C|LCVgRE<?kZ ztqd)Erj$x}f1g2y!n`-Y(joRXS*3sM0Al6f{1!GkRqLPep!Uw#iPCe2*_5z$&#H%Z zm|{xfVe0^X$WDeE#p5Elz5&}xo99AN+9!U214Mwq6eeg8&I4YbD8?y#LOrCC%DYgK z=W_m9T)h$yR7~8G<QE8@l;T>%N#6r>5FJ(-uIw}0O&*+$#o1|4%K&>3idkXf4gyn4 z!n02LM|rHyKEOycbo?Vs6@om0M>q*3azG%s%{y685hiY@U>bN!9_ndNK&wcg6TgE6 z&giXD^yseuQ$tm<O32PD0=V$L#S|t;$zc3kcve0`+^VA(iGAhGdGL?jEf0dF)!vQw z+0qSfVqCNWNTYFyET;s|`}ii4=bL!6NnO5TOHuV4{(=hfPBc^}COP(LRU{@kr2lfJ zAm0J!m#5qL2du;tF-n6@QO?+G>0fd!b{bwjg07J><dWmzge*A}&zo+>DI}UV-GykC zif-Yumh4(=BQ;DVH_BsZ&?dc-f0X_L`GwP?G;^RaEYswJ+%lE9%?K7!HGBz9&LxV7 zP5^eWa4(s0(}8s$L|@>y6;>!|GvxUoFWFRlVryZOzW#tC1l9uD=Qdx}lV~Sf`rvi{ zdNknN5x-=>r6fOhU>#EQjjzKrUNl(u7{fo{yjL`}(>-`G`tTCS4~=m{iAW4C5-B%w zQYc#r8sp-{d4b)Ji9V#q!D-4F_$s5{&ui5w3ni2A9<BqUwCV5ajB(f>3IOIcDXQ^# zl^tpXzwYH92+pTSj|jrC335%2V<pd`&<v3+CR<ohzoY>%{3c4-?JHr1el?-qYCcMz zh_XN*{;BcRq`2^Gsrof_Zpe`oL=pc!7_gcJk&Vy#F<vydjrsgT6RVlaOYqf{Cmal% zfpR-o(6vw<<OS`?Afs7T0Er96DiNjRg^gdMS=a~ho_s^n(O1>U3nee&+DI(ygAt8S z@t+48S=hhu545m7X=p(U>*NLG9RkKS5co>GkS{1{vFkB_05aW;7xuA<SlF1%dJDUT zKJkSe_P#nbzOXCU!gle`t)YcIvOi#9OLdLUdMz&+ys$6u4^1rWB3?o!(;%o!l^ei{ z{%{79$5~sRO)Xe?7$gq@=lluElb~dab4*D8)9-s!e9&OoEbb`vEwYFk)%#34c{{Pc z3~c}A2D;sJsjD`Lt~idRD~^rM=#i=07kr+JOAy|Dp5508NeTa^P;xVkhUufuE9Ibf z9s(SIXCKN6*lRW}$6f~DWqf<(U3F1#`!QRP#jmKy=Io*Xb0(8v&Z#!<B;cO!98wuI zBD5^9`AH24BGGRA1BBLv!Fc!EUS5mEFDo;ln<0ZvOzf6R>OW+N$wV1p<rT;f6M&T? z@PcFItQ&xpTrvwKm(XjDk*~d@nS2Q*pDUHF#4D0BKo)iKck#*JZu3q?Ci_U5d>oVr zS_G}kjw9(iNFH9$^t;O+FsX(G>X|P%2>5-jf@dKzuTaPBgwok~%$4@@0#!38CCenJ zO_0qLNDT!C245;nF&A!0y8&OJ(P`~laXtbN3L`#9yb$ghASSdqgrq61Lg)2b1xTfI z4oe;={tC1upED8p!f~quu81{DJ&<t<z4?s{+(tYvO&1s{Y)^suRZp3!8bW5%C(LdX zN`50uWR9JWkfcRjqwnz=avvJq3+Hm7_kXe)tAa}(wSF3Q>Ep)#aG2r5I8htFwhA%q z+;K@J2^<)d6NbF(PGh$8pZ4G%SiIywj}%+F`Mfd8=Rh(Cc;2-ROAR9$A>rDEX8x-i z<*tLS-@Qt1=Ah%gU_6iKAN_D^UNf7<fXKIHzn{o8vmosH_Z|iazmcJ=e+ssO#wYis zBy9<}eta}8R;FE{k+{8ruAMdjA4u;u+j8Y?9W`i|*>O&~!#G_vN0XdGi&;uj$3QL8 z*vo<!S{la3s!kQQcPU)~iEUPFZz{V<f$jKHG5WRd<5_IZYCGZ$*h&`4He!k3>CvNS z>5&ZPnHM)z{T*+`QOL(vaWvBPLpyAt3)(I89bm2#6J4jH7C1a3f5W`{x_lANcEWq3 zJN@Q0xqOj$et+~0XS}!+dMTV@S31Y51<q*-)Ug7!uG(47e(;ot+pW@_*p~(0aMjKS z#yOJv(pIlgihi2&Ys6S=@^+>OXqlnG&liD+4Qz_X`)8*4MnOX|YN2R54sCHS7tHb| zr<@9f`|{2%QT958k~n}FheRTrJ*0P@XNW;dOakK=!Doyff114AFic9Wl_>Q;4Lk>f zWNG8Kp$Mgxcs)<{0s?=M$#L>7)lE;b?8>5w>{dBEBns&}3ZsBZY0{H_qKIc^#!+9T zC=cwpRK}QI;8%&TCJ{&=)DWx?#qD$4hG7aNeaJC33Ar+XrBn<NTV_tSNz%k>uqv=* zVqGba9#^m|4B66|#ROW|dE6fgG1!-y$d!GYZ`?>|Luo7$kj}J0p;NY#a}Rb0dPAOo zJJbSLsD=t;s09F_h6?nN3t(qANRq|!Z;eDodSTIH{HnQb-_(ABDO=L3vo5X1D%;-# z{%1=+7b~z}`I7AKu($jCZy!Zjti{FhT671rl9->tYLhDJYS0t&s%#?@V-2hPj9R&b z!c<Y&$SWgBFChW~7gg^U<=p3N{8uDpl3jp83F#SFQN({&k0#Z=_8(y54Y}KW+xbEO zo6yg_T6RO;uVlaXtMs-&?^h2DST?Ua;}P~WnyMnFxF`;XhsV8|ek!mZLq#K;X<3qo z_n0MaMLJl*9BvY8jn8#t`LODwUc7_9sB{WVoE|Q=FW*25GN(uez2hN_Jw*m^GTre` zo4RK43nCH;*-#0{z;?$qK-tn6Xb&F-Q0F9CDXGo)<l#Vkh%93+KBY)QNCTk!EJE2} z8Vpc5*z?A=5v#i6yM1MBCI<A)L-K%}&r=OLgf+lkjy2`6J<=%H<e;Xi?_mJ=U2w>k zs)F6*=x3jXO+TAtQ;=ZZg^Rk{KZ>V!qttiN!t>aAf@d8rB$7Amq$c)*#M3jE=ZdGK zc~j{QE+WDh1lMW&6l{;B{WiAfByP!*j>9OT!S(eyWvz%oiZ@#|wU{?;&*!`rr2QtU zr6iU%Ia1h|v!$1m1)0}vQ34w?@;|HZVuVMg1M-O4BbG)iO4G!A%gLel85Yg<%r{Y@ z-LA5ba*Xv0EXVLdpB)W6gk9gQ(ic{OHCt6mqjNQy&2UxfQ|~h@_!t3{YFbY`SN#a2 zBy1i%Kv9aM_qj(@TT)pO6`tY&Bs>2Z!Ua2T#OoHpq5wNf5$C{`KpNJIq2wT6F1BdW z6rqZY&Y0Io*E)UbwgulKxDPiuSrLKw|Fpdee3Zr2Kb~YaVS$Bbfdv8tNOaX8QNe%` z0vgDLD7Rclg33j!;udY?vdcwDKsV7W4~x`l)z)iYZLQU6TVI9H)&!6MA|O&g@q&td zCk8btLJ(ws-*aZ3%jQC9|DQj6p6u>3w=?IQIdkUBnKR-<Yd4mO@W$5Gu0$Si>;!B& z>YmW2XY>S#Yal*BzZUrw#rn{oNgyAhnL9Cl*_;Yt*Hvr>&tZ3A>~ySW?&NX%E)F() zhqu$o-+SfJ=If}x$C&l_s_4eKu~Rvf94+_9Q2w%V{Ueb#8$3hXbnSJg_ugXCqtMEC zVCp$vpWW(Dg<FCCn+$C9iPcv@%P(^Q_<XlKZrz+qeVggl<3fkeAZ&6BYn8dm!`;N2 z6VTjLxgp+u$#R=)5xWDhS628_y)!+fjff$F){cH_3e9!+9lAO$n8C_;T;1c>!}V~* zK~4{Mfqixn_Cctqs5qetEt^};*344ztWnRhDOFce^b=BAvB*cA<|c(ltN8`}Za0H8 z?qH1gkKis2u^I~=;EgtSg172g$Mey{vV`8V<K!hO87JFa?VFn^Q%!vZK6RKG;@D-w z&^Nv0_4hthh7^(Y5ylw;-fGpPQeg3bxqxC@7vYlw0;bS6Uy<;DWgwA=yPu_;roYV6 z3Ivvc^dxqGV;}@02ZW-lm{Rcg$b)8-Ks22w{BIyBrLPQ56MjSm+lP{QWIN*vg4Wc- zEVKVzW}>Hk*JrCl<F1Za<GEUI(P2_tTy+ZL`_DOGN&S7%_kS>C49!X&H!1Z`p@3qZ zA1N-vt;gg_8g_O23WLqRP1~fX!|cN*ZrTSS6L_h(v&Ce-3qS#_nu9}Qcff!8auU%G z{H~LU_E)k>I2OZ5eF?_0>Zukv4#e~9sMR#%Yq7XpW;Kbe&pwU4hs3WXyd7<HW~s{C znNL!!jy!<6)fD-21bGwB&4oh(udv#C2sAay{zn6|;EGdNR3W;YlEML&UfgSM&=>dG z_cU~6CMPcq|0qkF`cwPS9acGvsN;s{<xk1aaEIJ9KTgZ*@oXdF2Egz69eo=uwtIqO zX@{Ibu62RK1Fx0Z4bODhfO)5hy#ZN2-DrVR@zAzYZh-WH+#@4)SJbFZla#siUGw8= z_VQ{%%j-*Uh;?MTQ?2uXvO(<`_QkD?yi8!%&RD#3T_@8F*9%*J2_6K^#R7lL^&P{5 zBLD=8t7b2tHUNr}MeyGMH0Ue<Md61*V_f-y5I_cg^zr0eV_@m{bsa$^0gCFoKp`z} zJmE+`Am*O~Q1{7(JH*ob_CVPP2>9R<>K5KH5+ZW>OCr}7__a=T>H84?mdN_Q#3-Hc zcUP+c_J4tY9=W8~9Iw#wMl+#L97Jgh)xbQ+H!0kT#ZOAu3tQi>@8)Cl!4$S}@OlXV z!QLM$4O_$>l)#8dYd-|;+akF{9mbqX9gtgs68|_4i%mMWxb#Z1mx0?M$@LwP<?*ZI zCt&(NIed3<iFjfmGDtZG(?C8<4Vd>P7m4q$z<Vs-$euQ?{UA+}?Y9T)%gqcJ4+NfH zpd-Wf<gEbGU1B#>sSq{*F`qyc8fflD@`fkda$b_<+qd|TN@!<6xmzWm&d&CyalZgv zT<F$!04<rv+o0grIA%^=b>WDou}j5)`SZy&wNH^~8f_v`tKJPk7|Bn?SW6M96-Gc; zo&z62k~qB|8Xxr!lj41N0Ts?*fSZaixs_qQbJ9d6c_0~hfpHFY2a!OgJ;0HIrG?up zCf=e_c`)U>?DD`BM5x$R@LpjO1v=Qlx>+V-h|tbkhr4|_GD`<!xKO2#%c8l}%%jNg zk&^KgD)f{3s8@6x=S5Fv7B=P-;tPU!cuM?FL&KXNALRj2A<8hQL3w!l_pI>mM3Ttl z<%~;~h14u849_gQ0qRYELn!u?tG+J9;t}|vTxafg(|r*(^BeRQW0yl;Kw@~X&4U#7 zovT@QHAVA1Tggi$@OAVGm}=N#q(U5cl7=Q|w(KD8j_^P908R0m%$J*^OI-eE`Q=OI z%RfbzWcXi&?+@Zj$(Lr}A+jtP`}3jkr{S&5=Sy1Xi#lII-$@5+Ogx5f9i1<sV(TfJ zadJcoF>8G5Cu^e1k^@=rlpc>2%GFD856$0c=PA_s-I5Dpc7n`1K%Q*)#<~L}vpzD@ zU0NcVio5aJpJwN6I2c+k_P^yJe1xxx6u80#e1VX`2LIpMAJS3#KW*23`Tt+-KUv>V z|BKr7f5*S?Kkg~<lXfrH6^#Wn1me^sR^f6_V*y7=ZY+RXIK4-FN(_wA0r*Eo`!1u< z@f=G>$=+bHq89?uNVDLvH{hMp+B}$jDq#5Em;N=4^~OnjqIB#1w0MaNUqxCvnQP{c zjHz2n^!BwrDQoRNKNVHp6I<n^5pm%vFD9+>`Dy1=S+P->2bGO#Q&}o1gIO}r)lx(| zS-aHzT`CdNI<eLL+DNB>TphUm+$Ga36S{4-XMF@pD94Kd#q=t7WDdM-fwA}%=ixS& z*{2(tlDlow9jmtI)J_@W(N9IO^n`nIKK$I9dxv4o#re0>RKgjD5+`wJ_GIr>pInVH zT_8ZXSQifpL0hbHH&fjh<SWjnd~TU9|1@&xaa6rg`Ds+{f^8-AL(YmJWJW;lB$?ZQ z#He!Br&o8|qdRJ6aOrmP7~_#vZYN=GnB<D!G{XWHEHa^bx|U@?#Cb(gvG~ItVjUP< zm%}R-a*%?8OvM(EWUXSTg!)1!PBT7LpEJD0alHGt@Irl)EOAg`p{fjjSG>-@a9;%u z-Tx8aVMBoyBcA5zTy7>Aj_nM~Qg3Lh$FVfIX7BQ@C*F7L4ef|;PH^mHzkPIhQQy^@ zB1__ZS2ui-<j$E;TM)&|#m%+-;-@2EbbEPs6pK^+8*<+*@J8l%D<W0NIB`p-9t&Y? z57iF{&pwvju;Su~vuhFjM|K<C?Pl==yk{c?$?)op6nM!y7c2p%+GJfjvjeo>(ONqr z-V>$U7v+36ya1<?aC#ViYFaJD;SN<I-qq}5Sb(8rZ4JkUr-PoZ?2omY!^nWe`>fE( zqRN}$6g9jd)at1$&zkC8fxu5KSbR)NKC?}q?P>S{ZMD>Y>HtLxymP71)o<zL$*Vr; zf?^Xd-dz8Qv)i_Cc`{OKryvM^0nXn@h?Z4_S{;?ku@91e`ks@k&|>8s_f&fM%gt2( z4%A<N*pV@!+a~uaK#nSK$0;>|RQ#BL^UdLD$+fdw#tZs2!zCLDSDCTXXS=g!yR_=J zsZ)s6@FqTKQ-hl*@B)6W^T6<OL`(;Oq8l;CwB+F*hZ;O}G^aVHc|)gi7WLPL=EcRW z-aHX>ZU&ue<0s(t;;(84yg|7nR5*TKhP9suuuODpBi`t}debDu8B_v{@l|avm3cS% zU}ol8Iw=AA*7l08N}d}o0DDRd;<Po8q^;T^Fct|dyMUi)7jZ4A`fwPxWwl8VjIZKw z*=b_H3Y-qK#98PE_>R+|LU5$+(5sTcjFCwLz=wk*A71{p;zO;LqDxYaveSz3G~KZ^ z4+9$bYohDZz-;;+V3gSH1t5pmO<VIczGdaRwHkVb#wUSEh{q-|gW*Tzcr=#<2L7aV z)%N>Iz^tC?S)K0%KV6(pgavOgOF@1}c50&A7D7KHEWIAZ6(3C>zY6tN7U~Xg=Bh7- zt=e(Fls3tPb_WQg*hKyGs-I0ePz*-6>}_%fmw^8ry>bw0UDUx7=o9hCzi3TYkSqxg zUA*3-cOPEnIt#@?Jd;hpAq^f!_lcbln<;H&_F9>}^VW65O{g2L8-S8P{F>k^Aoy^X z8isw@>ChK0P@L%d!1>^91dhP`LF}?c>lG(%XHC`^EtZ5)JVW}?(NWgrO{i7#^l*2Z zh>&3KhbQ3j^ziHt^ioeG*A@B#JBdfMUQ>7C6u`2ZZ~r!f?7=R_F3mH+HBYOm*Lvk6 zuE3e#n5_JkU}jeSvEZdy`K>q+7=PSZ^OxHvdR)N)q1N*QI6LSMXrb1h2D+i>D6Q87 zSF=;=b&X5U7oo2*(9ZJbaeBTPVF^TLG+cQ&>u!&>_BD_y^N>Em@tx)=Fx$(@-wCmp zzb6|_;(-6YY_y7c4rb@K22u$P2M7%=aRizs+y0i#);!Y?-h%p};|K&ofvr1y=R^!U z-1vhgFs(TD@DKd5{fL5f4&(QP9Gt&(w1zfkAQFJ%hwMU6<xs#4c$;n{WtL1T>cr+# zf00gzNFzwL=m!Xr>j4R!@1`}F5%v=nGF*vur^;^|&T_v4mnmVs{02-4YP5=UI7Ogv z?XO{?58dsFYs^0ez~i*Fv>%IocnH(Uxaioi4f`RuMY-6CofM?&%V2BOp4yzb9lyDA z4Y;t5`tI0<4&z;vJN#CTqXBqvY@-7qjgJlA^iFH`wiRi7tI*Zj13t7Gab8_iF5<SE z5<|mFlmS93k4Bt@j@{vDh#!GTsYUOlU*`;$9o1fYkeV9)!}O@{@7|M$#_-nGxcr8b z$+d;?xQ9;t^2Gddsb5o%*1BqEQZ`)f)?*%fYv&|@PlDg+h?_CHbpmFYP<;l1XrS}i zlRes+A21T4OK?C1TLsCGn6&N$%5Ed!mEVe`Gn^DE597#nxKe~Gk71U~nh7SOi4ylB zm7O-?oj^(ghgmDSB?oe`e!1xO#*9eW;S#;<7|sQ!>$^(D#fSmMi!rUXE7cC6Ikn|G zttzh@t~=_MI#1h=gVJbfHef?^jTU`MH>d7Q_;+l#Ir9)-K?Sxu3ZgkSq2gS}LG-jW zv<W>u3LwFJ+M4UpQ9zce=ePjb?YlE1aPbUWg#Bk|rMLj6U?Wwo3UO_tqS~_A7#xVA zv0L>2jROk7vZ>J}$(S8V#YJY8v1AVyCw|T8mtg14Q4hj*G1CXKVs!xNYBh<qq|!+& zQ8VL2s;2<Y7(5r_Y0KYqzw0fm6>iP*<t4zb6`AGB0~z2mfDM0-KFJ3YMUFlx6(5EA zq;z}~Aq-5DBlJmpgGdM+j>ks8jhWj~d`eR0aeT~hBF{{Gnbi${ZgIoGn|9NpwKIHo zz@OU(!$~^N_j)dNyOwv^fV7p+`L>~=)a-Y($VQNo;@)7vOxp<XCcsB(QDg=-99lm! z%;MFx$cBUwMKFmZi;uH83KmS1D|}d;;QkaDW^`ur2)hL!CaR-x1ZVMOyzU2}beoA0 z+EIE&n)U+wzVRQ4+0ZJY<E>0t^;YUVReS^w(yxGzIQNEqezml2(W&+zL5e$waHDz= zNP47^`T(u+NB9(Pi#GQqCyAbbdlW8j<n0z*k6TYehT=L09IM{)s0P@(c%|3g&PBF% zC=4sw8Kc@+(OElm4P{I_hcNW0ogBkThYdoy`!s{RS%?dW8v^%`qRUDl2nAD7I*7HV z0)xHT#hK_W=vxrlO!u@gokM4mv^8GR`X+fmKaW1$n|Y{|OlMepfOyGFTI3#8BnE$K zl6Dk2GH)GWSYK)M-RyMFa&dXsKyDz#)?t0CiP(OG*b5<mZu=+R$%z4W76a35FtF^y zKvHfKg^2}Bqa;JE&9WG36vY|Fk%`jg;s2JIF1$n<k+vIr#D|x3=eiF34{ipx=}E)i za)4dUo!KO8ZiWN3m{C1j^Wr@@gnWQyj02z$m`pAbUmiB_RkN2c40i&3I^ASv<ODyn zML~|7f0)^;H=?7^ACPs7?CWpGSbZJyAM|xBBJ4x{hR&t0O9@5*j^6Hy*@w=DeKS0x zmiU8WBT%1L0W?IKklaxu946>Bg}_+5jX9e>Me^(pGTlZYy+%NaAx?t6+>IG$g)g0? z0+5n|?#JmX*|`&<iY^)UVXv&qKk}B$^fX_L5xRE*j>WXVKG-EQ+O!nRh)wM7u*CWz zRZv#G`y=@3vhm1*Iss{_lu+=wBupoZ86PXc1m;6Dr3x=NiLc=0K&xjtgw-``rc<lo zqipc|G;EvXB_S^*3{Ux$hX#z<(ib18mV&>+7;>X^gzdq0l4y8{W(}?O7o;0ZrStIB z6v)rqZpN9oiTE8|=!!0Mi_O>2DIka>3`};iydG(&42rB+$~7(fDaLz-9`u&$xile+ z&~s@*$k20XLKq_!62f3fauUYzq{5tY1$=749|P6u-Z<$TKjkXp5DKoTQ%=j@4P!Rq zYiE<e$8I!6GN%(;^s9g5(ciJd*CQ$s;jr894BRCXLCH=Wbgxqxz$9uaH6)^SGH0~R zlX)DxaRb;fsBPGZn_$6QK0L|IgZQ4cp_gJ8m8LZIt4l*ZASzi8CKp$f!>eQ!`~A>l zp;dPyDS!jA6fvSZp%acNHRRGcPRrj0y5_<014uzip`J_5N#uSvMW0B)KZ+owi6A%P zllVIaeamn(;LR;~GYX$~P`r^TK0nDx{9K?<Br?xHy)!|mS$Gu?i+Z%MR$EJB6e_?B zaBbCt4muK>N^BIsdoGUxVzjq~`jXN#2XA9&`%5=`#AZHchS9tyCX8leJW(0)pE?8F z4MlOgI%4SC`g@ss<<ch?dU{nx=5cji9-6i89BHg)0=VC9Bvg%&K0VhnF|;)!d(Vmw zGxuWPLkrx7g2iz4&viwXWav{y91PDGaazwCvG3oheroxF6$dogr|Ku=I1o2$59xa+ zSNxesPLaAA5HbuyYVDU`Zqitfsq^2t(EOojLSHOWdOy^7*7_q0=mivi9cn%z@3ffO zKces$3ji3NXwgG!0E7q2KYZNzFt6MKx4|BvPZhW4V8BgrrH6Zle#i@U)f=(47m3Y1 zvv*e}(GNJRHVkhB2uTP!Ms|L*wK;QdF22%oYE$NRN7<3__#VfTKLByO<9I)N_F*l* z1>I_PpqP#o=Tz*09fNBTG~HI<7X8Drea#S5h!I`$7|4dP(ZP;4uV?A<S-lb`|0qD& zZdx+kx+#fe(J8{#@vNnus)?C<rGDpvO$Q!e&P(XhVJu69BRDYoBOoDEKc%@Ru56_5 z5oi8n6b;800Ho}to)wK)bwEhJjim)KC)u>I28m4lpj1DQc|5uxLrlcQacss6rjp~` z)YFl&4~!jDIyzk{_TY#>XbXbCBcf2pw&H2OXDNdPMaSuv8tF$mPVcGGx0*V+y7}DX zdBztGN>=FOM_|#9m~Y^o(`2T9nz~fz!I~=c3D&$Sz5v>}i)^;LBgOHAKeaiFz7OA# zy(@Ub@%&?{I80LS1toJ*^aG)<oQrztuIz3>2rnmG#qeVB*P%0~1JhT##&!!{6gu-` zAa8YH{Mc)8wRPysnZT8+3lqj(n}D$BXQF|NSLZm!PITb*NGxi>3FDp^1t_r+!(j#R z0`rjSTZRAeIpp!ir}5v+Qqo){#`G8QX-YAE@_bGN;H?kbMlmpcf_>Iyu6gUSM^sMM zht^^4!L?dq7j{WNUWtpzPBs^c4eBM|@HyGVFJWl@$snx8X_XlWLh8B6Kd<@Eb^xW; zR+oyZ)$Yl7f|WK_u_L(QRczRqm-Yo8m3z1<S{VXDiHSoyiH0-mIcAcMH4=_2gTCDj ziwW5`u|MvFF+V|fWVgU@p)vIOHBNyz1n6oYiQ#^aD}xgf!+(R##7*`^AP=$;K?tLf znK0Ai2Kcz_RxLuOB4DK|bn8Xl>>b(ztMI#K`*LUYJHgTV0>tcCo|wHLIXEnP2hK<r zC1-!Ta-v@71Vi<dc)dwNa1%&9DYV(y{9H+KbU|`-fyeJ!XA<`4l|)z-<_XGlNqMn< zik18}Cqv&-bT29P9|T?%SG>%r(4NfUAp2+Tej5HD6rUTrFFi#M5;$N0ru8(Z_z{8! zJzj}u+4$%i1OGE%8oY#c+b#Yn^Hso*-7ep9nJ*g_R%m<_i9bQtbaJP2X70sz1mz$u z0#+THvbR;G_}5tddm@dxZ^bl12oE4ILGOx1pDdHTEzreZj}py0=f_Fv?iO32gG=6g zQ=j8uc2M(K3_l<Yvqg@*q;l2=9%6<#Xt06}RXnCxe&8Nr{iG4DVin5a`=7|YFo5s+ zQs+Hq=-|9oeJdrMnK_HTU&r4^#MAew{Jmb3;QIvrPQhff>e2kY@EdwRjK4qs*HTa5 zihIs1dl8?Pik|}=z}w(*;hRTi0-Oi|{tF^EyMfk^HiZCz?RO$c40k6;R0OLk#8o#S zWHzacP!;ctV9wqxHqOGUAnr^IWbyp4OAKHhKzO=#z8o(<!y``?yw@lgd`rJl>`Nuc z0<-QRpW~d$-jM>FumY$EY`t8TA}%Db+G~h2Wd@_Y{p44W6x>}du8u9)LEVF8j=9X& z%EiW%ee{LsMe>jN`v=-|nU<2>P&K3&LGi7Da^EPzoHbBjB5`JKgI`)X?U4=3E>8{k zii@I4QeiQ&kIrda&KjNB4LG7c4F;8}p~WRd_JQi-oYp{<#97--5l5@(1t|+B{`#g+ zYvR(Ch~Vni(l9dI&3#~J6#1AsX<Rl#W?(F4H)_@7&Jq&wfj;!7%Z6GS0`3i~=p%8% zGJH_Lwm$Ty%X*o(UM8-mMD%|Fa}G}*_hrWRABS@SW6xT?$Un|1K8cHCi&e=PJ*hC% znxfr*F`z|HR#8u;@%C^iD`5qe%2EKP!qEe~*c63;@IPx+_x#|tgI>)<m$8&VC`S~4 z)RDCeR4@17Wz6&gv<<;#0HN(wF5qf@8@QCEjz~qOnrzB|t@%j^A<U2vDoR2j3J`W) zA!>SO?+B#$w^-nHZ3AA+v`~4T-W@Wfw``?KwK9rYLG3K(_n|#b#w0ozUI>JOY>YVr zHoQ(!uRn(nKyGmbRxZ>JI+}uPO$nUcErzJ~`{aAsXje4alq4&pMd<$lK}~z`hf0Py zCl;rHtMqsb*fFx3eX|pSy$rh4_F<r!BYy9L=3LSzC6*}uRtqC12F0csJrPx~{S(|| zTe9`~BG~|?43zMQJoKb#v;<N-0=2y<UH*`L8m%g72GfJ`=vK`e_!^lIZ?K#}*zPK4 z1Lve2yPAjF<doPKpMW`<ekWVe4>T_Y)YfdUg*his1*ol;FUyxdl@L^~B}6a9AC%M& zfNaxyOT>)?Glj+s1ltrb0$Dom9oQC03Xbcz*5!Tu3pg{yiV)AW$-Hh(_cRYZi}Bp7 zKIwb9JI&J%<LefDj>YG%@%b{I?RX~lNb~$eJ$I?k7xDQx9{PM0Pv4%X7f&r7%1=)* zzEk>N@VN!gTGW+@y6JffzwH9Hoav)~BYp{*5kcP}yhD!t7;5!u_rHQ)Saz-ImF9sU zxC0+D|1NQ}%Kr@IhYwSZbG)21$)Gx3&Y21HRZfQ|kZru2J&)2?IbnW+ul`z#Nq;^- z;dsvGP?gge90ge!8q+VBf$FIRsy5J@8wzyi>H?%4CbHZB^flzR<6m!8IM}KXoIr4v zyXmT!L<$SM9|vnrIs=13C;J6=*jpIGEd*a{z6>{2IfH+~Rs})vJA0n)5(<0sftt|R ze!*4xwN8ZI;l9=^z%Z6`+va)ezVM`Z9>a4p&^QvG@8XGzcgFrpNN^<B2!wghpLZMG zKXKk<<3Lq^e~Z;aolU3Eun-Av*PNygu!^%4KgapAfGhdW=g*#8?p)^2BW(3-JAY1d z7|KmG&pBPR`!ADo&Xj&M=QzbI8lEjpeR<w=^5IIYdI`kwJ<FU@0sAR__`Sb01RX+| zruSzqYC23(dk!wq#%jW@H)@dvN|9>`@jfI7G5#O$j&;X<U=yjEO5p)*HM=1&#6QJs zLu~CQ`SiFI*@=W&pof^EYHOqx3Y@TgVA`-PJ1R%wm~~b^9HO5fdlTrVdV<1tD%rQ1 z3LDc6G++c+Mi<(xhqTB^3@}~G+$;L3W{=<ncjADlV4Es8cVeB@iTDmWp=Q_n<c@81 zJOKjX7$0gK80bU#WvI13?)ke$z6ySWxpOXjSJ3xhItJo}YRz~RhM|4UNbAK9&~noP z0ysXqwX&b?9w07*Pd1_c*LcfQ>;GcBn<$h0Rm-)?L3(%e^AfNFmGDzN28Iq<YlN8f zq851%a4>$pSD4*`7ZN{M$_(+RJY=wq_|Ds&q%@!O5X)6r+O($oO5<!qr^%&<s8Bif zQX<bn2RPR15dRpffd|_)fd0%zNxh{x3v5aU^&dwCp=?}Y$J;81ig7$Uv$8+;Ad}lr z>)j??44=rbV3m54LOLcd6X`Sw5z-$=`#NsUg9ju1j~6>@+bz@|(>htGuX>o53or>9 z_85P_>d&S=Z4vf(?=;UJ@f^nE?UUwt56?+&nrD39G|&BbNG|buoR#^4RDD`{dsTj8 zI#t_|DDp{FK0~VV8PO#^yDA^za&1LXMhB|=b)2)UDB64`o-{d{MB=-GjHCh&((eBh zj-{CS#-)-tq9ML8loc1aL(p~e#EAbyI+i42UpM*tP5$i?w<y;BU;Zs;O=uXnQ(LuC z{Togpr%a`6_WDlp_Pt23E5iQ6Kzh@hF4PdMo)-}WKNH^~8$nRY^(2cD1wk(VHZ|0{ ztrmxIid#GiPk1UhfPZ^=Mh9%gR?a9Iivi&%fp7>%{FuG9>RFiAxSY5F6Ao3jvrQ2> z4$dQ32SYK1{Eib}qd~@T;3BTQX%!0j>ruCV5B+%sf0XIt)e99HG|l3U(@^wLWkXRJ zq*9#ttx*|56>=6=)2onz{%uBeO(P_{GW%Z<s*d3Fab9;5o9*HBku@-IUZ~0w2W797 zn`dS3bB|<hV?`wExKq_}m@6i32umcCBcX{5eCRdRnBq@;n7YDsJ=S4e=c~FN;<{Yo zm*@^}ji3tITD;1!Nam0&9aVfa+XP`KVP&BB3@@mEd7OazhVa?+62zrH2cR?!O=Q~1 znt!h<N#?vtjeStPbnr{+Tq0@?{?4CA<v*t7t)Zjerm`O7N=XJPAm*Sf0r3VWxWzOA zBAtLJqDpX2s#VE(s*+!tm2i6-{WB>m!tm4lNtH!FZJ0de>0LSDP=c|}%RX5-PIo#O zJ>*K{65GC(q|Tz6VNt(^n5Vbw`im-UFw%I+`Kz4dQwWRw#S?f<ZB_$j$)X<u5dSQI z<Ua`ZXqri#;h!(gp5|$KTk0iH7nYD!cHy~zH%x)R*k}V@50zGhR_)+*1$bJ`Y;c(W z78918m=feqhGhc5VvuNy8sji2k->rbR4MToSeALH4$MZcu}5P=<a=7A8fzJSTmp9E zG|_<bqg3u&s&~4?Ax(e6uj+n}6NvnS2z&hmjxjU#>L~&4KQNy+KjvRW^n40q*1v#2 zUq(M4mWl<64wQWDRdv>ICtOXRV|hVyC_;1Kn|}=oDamkckJzD!F4HRcMu0|0s;<Bn z@lRAkuwOydvF$Sv^uZl5Btf<6{zm4W_yXc_V!BkB(uj~L{v%e42i>tPW**wW_^X1e z6}BG0h-9Gdl6_E%+)sENmj%xa?8Ij`Xb%i!!w*}dZqh5fn8FgXD^h}Gurzhor>DRh z<bm195`$mYmlE-0c-5z4Bx=<+7yy@0?@l0rdN-3YOa-1BoJ~ImZ@|R0G$p#!+w>V$ z<8rd-O_b>&-c%(nq!PUTu6_*7GQ!s3i+C0ZO;z~jf7R;v$K7K)?tg`7w~zWLk)C9L z^&|1cjjE9byzKz#e@7l}@Kt>280j;AWs>>kHf{6Bf`1DU(;E6(q%TQbCtNRanxA;I zujHpK%@T)XlBK<vLK0}ngp59d1~#E@06uw;z2JAFVIJW2IcNlIqIOlp@3X+$(ya|@ zQjpgCH{hjdI7Eb8LUbjuRr4ywl)su9Sc5-J{Rr<>?zqYn|3g-Nfj0F?{K*OyQw6V> z75tNk%S#lQJcE+|W+uPZCV4a^Z!wb}Vb)N3{*zx2mSDO#!jQ1(;)|}aJ(FsW6hMh| zf9M|MZK9)w!~3Us&Vyp~5<W*Hr+Kc!^E*7#2S5kJ=Z|<E#P_3kG6tr37UFpvPwt>J z&u%<-r=)o{;kj}M$_!2ORNz^H=XE^$@qCZx5!7uwN`GW~u>Kw&HH=-@RaWwbfF^#$ zqAPGKtNI@*{WuM5XJ3>U8(F8(A9Ew?#maX2@p5M;`tgm@jm$KgcC_bU*st~X;9G<J zyABqkG`}(2eMHYDq6aqQ;FQ9!|C1vBDy4tB>c@GV^dt2VTR)DhXxEQFJ38sdqtY|1 z!+x;7-tqofDh;hn3Ig*7>H&Par?JTU0>9`m3^u@PenTncB=)*ym#1hov@gY?4_17L zzNaZUi45SE(Vs;83C_hB5`8~qMD&%D^AtIzTW~iX2LDwMw^vZ6mQU!nR=t*LvD^6? zIV0|!V~t&H*ZoDlyhUx-HDyYHxg;gJ#A{zjjAcWqwUB7D5ip38t<^*9M#PV7Nwrol z?O4L#2VMfv8pE;lJghJBeA3)87_y_e2RbKvd<MZ0fl6bA*AE>vIGDz&!NGZU%71ZJ zJIcQv-wEZPykD;H3^mti7^{I?Kq7VZPk>tq&YcWSV2{05<Wqk>fXDMNo}TCkjZ@=a zxxNtLuPgL3h*t4`spFi%^Rac+x8W<tiT$B}Au6qRZp7JBd(G*A`Dz0Ehv@5O751^i ztgkzZjI8*&8MS%a)CRXfl>^^wTfqzx@Xx3(_eG|8CyJj9Pas}RnhX2c?9I^v-0kC= z8*%5X&UfLM&79i!)%ot)3Ha-&oshr^p>YsPb&$qKc}1~*7D%9fE4~~E<g3$xiF`+b zUXY>VT#YLS+fUFie0p#CmMZ=S1~Ce3;Ay{~=DLrma$<kOS3@aIgS=@$Hc0J-mSeec zi9W#xhn))}&K$=C?<(jlgH|m|hzs^DhBK1570eCloj5qC{=`9)XV9r0?*F&g{)D4m zjua@0qhg(Q;SJ%8j`r@PxW@tlP<n=3DL%mLpmytUqcj~l-_f6f=U`S|KGfI&wEVut z*Kk)Pdc#Yd3`b)ZV&uk2q(sHdRTsrs_=J299ZiPA0}D*p&yw{bx`)7Zd{b(mm;SAd z+>REwZ7fKk^WHcuKz?*^RmAx~$b+u%-%5d(&mw)38Bw$+j-}8q8Buf^$~xD=FC^4@ zLBOf+XwJ?)P<b`nw_JLoS>$pQp<l8{ITiU8@(25qt6iuef!c!{q$q7J1S5SAMk%_+ z$Q|y6zbSAlsHS}m$Pm#R_FE!2TqLyW7w{6!%b;TrQ@MV|h^UnE%!tz!9^+TfXV%Z2 zY5WQfY!fBv7i{K4#MS0x#9n$8IqNb|82*PR&SO(C9Cg}7VSF*f1i^Ok#W;0_E5W<> zGsxFL9E2*F+t~V@@2e1l`l|earn%t-&c-;VWe(G_F~<wOi#FyY%a0WKkxC!7_z6c{ zbbsh+Tq@@-*GJ&cAi^%<n#e}z>WI$=KaXOZs^2dfpt$IJ3L+D69hqn8HQH;nTZYj# zMC3($@L9*^fg7N5#x?gL7neBfo)Q$;JtYp%H+Me?-8eiZJLq2VXVck){F)}>md&n9 z$HK=i^H65A5t%`ZAF`IFM<)Fcao!&pH<8@`s9<Fy;K%|Txdm`WJ>{r;J@mtf#qWlG zxHNbJB|nekff7ud_mVZK>a(ftdF!a&5w?20T(1_n9VkKJ53#sWb!(9dyrcTx;^T7g zWo`|R-~l5K*sa@|p5}QQ&l`Bw<JpI&1y5XJVtk_fmyqa4OmwQTL?0OMJf3_;uz9%N za-?}0S8$7USCDfo-IC!UDzR%helP*~N0GP&s$NKjA$o}rI}40|YB8MePb~^`4V}74 ztN9gPA4j412z(#OEF0_r(bRn_+PVs_(r{LzPm$lhe5z-@vqB8`^j}n;qZK*ftVl`A zXaY;D5NAG7N#r36<7cb%WGNDFe%ER`J`9I1WD25?7WXkY_mcK}zGandW`mP`=1x&x zDUUbJ_mzvX-qxA)Lybwq!{I8YI!2DO<%A2IEtemXjSHBKF=*z~<z%Vybca`;L>H(f z>ys$zMv6Yki;q-syq5wE@y1aH`Obz5z4-8k3n`wR2UkFa3t4Vq5V^yJsd$+_Cp^=I zVDOD`WXTo16u35GDtbaV;tH<viqJB599Hl+Tcg#yOv=~<C)~ENQ>E2Bjh~_At|Ult zj4$kq(eJCFfZb2|Y!T7OQCnXLf0AGl7<M}>_*Z7`MfkLVIP1**B=Mm!17Kl8wux9~ zX769|C7e;|XlKMtZZJ5^#Y11bdsTPLXP8y2Bb@f>MIPhln}1p&lQ7(s|7R5LlT%wG zWiF9GD}MGz>!$Y%=dE=`lbX>{x|L@Y4R4(flgLYU9w*<rd{_1aSLI^MCn*~SjNc=t zS!WK8nd3s-=m<gf|4{xhCnl;~DA)*+BwJ`&LFBPDLc#xo@S?<``yo>+x&|wJ`wRP; zf5jNO!51NRPDdA~>ZRW3;*{v(WU(*Njad=wjZJ@yAI%e|^>S#Q9FNv3*Q4j8hI3Qx zT9ip-W4v;_u#=ee5HUao3PUJ0t@=$u1P-Dv#fIbnt!4w`1$)&XIgia8Cw7x~Z?)zL zr12rAhZ`^zG9(XDcAU0chT~joYUoE71YU$5kTicpi9XXuaDkb{m72-EWyBxkSPw|R zrs2Z$$YcopfhZiF=?fQTgp-=Dz?~9g0~rjn(MNih!t6bj-QkWsG3+3>xUa(U+zg?j z3)P02njPo?$sAOJLy~rUR-Vs6*!qxa@dixV%o6grG?mN^ZFM&9=BZPw`5dJQJs;we z(Zi+*;N~jeW*c5&Ze`s3jlSD(^CA@lJkR2DJ|g%P^n^H2YTNlrACgCz%+Ma2D{Y}I zl<opXZlo^7g(o@DRCp40nA7z+87vA4d@LwPE~L_JRfO1&dML!&M+u1o77maR9Obn! z&P#Q&hzQS2MTC$JS%rB<@{0tS15N6q=^7whBBGy+lsR?hD>C4Pe$O^cmDzh1!w_5_ zjb`sz)Q?@5ip7pigk-W1)_eo&C+Nq%KeysL7A7mMfNnnt8&QDY1CLV-9&(>-(IR=2 znf&kif>a1;K;~~ntUpi^^79h*Z8}}?E(~1dV!D;(KFTuPt-o6?vaGiY@V1<f@Od$- zHtol_r^=_hnzrDpRnb=1l~r5gxguB7Z(}li&T|%<k5gm@YDvaN;<rh%{U%(givfi_ zVyNioqBnx`lRR2vH!CyP%O<4+Ky4EbSha4Yax^Z=;8O4N7C<&OZ#59*1)>apMH64x z{*(CXhss2rRn^^;U{nJq+?@;$17pYcJ~Cz6@SR}QkVQ2x6e#{SV+?@-#bIL!2ZJZ& zP-G<NEHYNMsrC?ZD%5^TN$sl*Th+3m*H-Pkbymf`HWlA%RUD3~*dps?R?YJ$3tb*s zE(Ta{i|Fknx@3SzMgGrLd+Z}-!%uIky#X=pnfR%vNrAWgs>!0-F@9!Kimlp>s7n>v zL`iM%(=>=)lC@l`J`Z2fSd&YB;w^|W*=qD&%4+Kk&9_#6Xe-~|aBr*NHB_)o!>GCi zV@82?5mzmTZ9ASG&OAMc@IYL>!7A2bNPDgvEZx{Se0c_Z2qf<!kAQc@omNf1qf`UL z9Yo^k&ZZ*}YZkR9Sh<%`Zdet0zn(^82lQpxZX-m3RXoey*xUBuW8;s9sBv5QO@_Xq zRiC6J16Z59ddkYOpR!DMHD5(kL@>JTfj$saqSDIos?0$t#I@ufrHJusP9Xy{m$}AD zS%nnV@C`3Gd*AK;4=t4k8TMXGG?8RffiSfO-2b%q+hC*0XY9pxlj&KhSY|QP?1yfV zU0SP|PXc+RD_*Oi2m$^TP|l-Eo#L4bl>?GiO(zQBpcS|N75G5c(Y;)VZ<D{LR6K$G zE3}}xL%{L{z~!=GX^v2d^Va!Bq<Lmzez_T+&)|6x&)ayMBhx$&;dvL&#h0gfLU_Kz zb8Tjtrwk8$`tfYWGj9~^%6J~c^DdryN6Yj+>a#oQUyJW=;Tees^CdYGzo)|nQt7I| z*|Feh@j7hc5-&6L$xZ|*6wjG&3iKPK`%MSu5r!~wds8>dPK$+Rnch6{?X%C?<^t5z z^yC+szY#ePSBcHWY8*kLA=R)p#t6tiW|s$*nL35c^_`&Y{kZtxAi3Lt!|y-vd48VM zco-qhbpA00U^7genAm6uaExc9Jkom9#MWtjFIe@Z)3~zNhuz8vG<RHNfHA}bW3g3? zgXyCf<tACJS|?_2+kTo+5yHFB?oBTvJ^}aVc@&_|&<$>w*^K@ma8UdH;A{xW_b3%# za0mgE58xD^S@r-!Lx&qujVAlcCQ;;dvq%<aLu7o}gf+iZrgQz6?^{d7{bv5I2Cfg7 z1h!M%T7P?`iU!t``Wav4hf|5?rlVa5MPKP?H8?M*JEU{U<<O6zquo*f9W6ISNlo*J zOH1Vi?90sh*#U7clx-!DCQuzL0HB}0!v{wXVDy*cu%Niznr#On8#xW(yw5JN8CykU zyn@!8K*cA!^#kQ%DtuN{rANEt?f&SsJ~~3kcW1!u&6K~D7cwl+eGZ61?9Qk{uT!Bi zr9uIiJtrnIe`_`6@J0cQ9=#AQGFtT{{48nuB|2>Hsf|7{ef<@p467E(sD)1Yy3(3b zFGV)9uLrOVqx#y9ip##<1Wy-LX&k+6+t(O*twk<}jI{bZ<Cs}^Gj+n&=bd^k7!GfE z(zB7zhO#$%njNZcQ+yApp(qa<8oFt@8n)O`{!fced7YJ~!?H2uhcWmAFt-!c9<-{6 zZ&StF#6rk}^PeIcUMmVq?-L1gak;#z*e=hsNU#f1$=6=-=jB%Y&q&%ss|HKZe9R6y zBlH3v%u2(^;*CIAuy_wy1&J3-#zef~^gNuExl@>J&!H+Nvl`|`L*-2~!B<$6+JK3X zM_S}_@_Vtt^IMDDy<*{^TFy?cc~)6=5VKKx4>5HK!n8DPB?MsV0NSuN%Cw4*XA^j? zyy@AP9KEa@tB~Ua$2^P=_M;=d7>eIoh`&izK;uS3ugaTlKt(i5VRAblwp$s;Fj5RP zai&e5j+Gq+81agziB!ZIPdq~1O(zI>W?yczTG&rrkN_52Z|m`v<O)lcpJG=@jkf10 zcdnt|cMi|*4E+ajLa2xZ4`bRRrBIF`g^Wp0i^S2gkBH2I2tl?DUcHp6;lh&Zc3Qo8 z430{w^DfFIdlRzWev8hVz4^`OW^djnq}Y06=l@vz?l%-Ot@=4Cbk6-5fklqhp9idJ z$P=rR{vZmH(VsDP$Uiw^LY~TyTYO<4Fc#`mtGTZUubn_`$dxwoF-VItlN9?5<q7dN zsV+MyOwQFT$g3z5&W;<hrDF)ItXikWLI}RaAkHyhGm2}Gk7(s&69d^+72WJryiLO7 zkQ4*Skp&dJg|rJYjvPd+Hw1FPz0EyIa9#)3CdEJ7h+OO-tc2cpEA2%}L$^^+E>M|F zhOQUzh2bRGo@}2_wa91#P-f+aEcFXl!6^JCvjD~Xa*mL`496n{>5#UN{?bZII2TCU z**|JXnKbEr#89EM>c0{rFue_UA*SRKi{#ost6{bqOvd6%tG*Jol{bY52TG_DdOFhw zmRPOjOIv_!>K*&s8H3+gPJhi>^e4uaxAD<g${)8h9`eK@@-k`Ofi+ey@<kSSCql(K zjH8~=uWElwS%8p<zMSwxA5C`%5``#Y@o`&o5~wf?$RygRL4$GalYOn#T7|00XmAfC zW6XlnhP;^Z8QcFWtQr$z;kW4?XX!s3*iel1rd+EV{XaMSy=G}o%tl6cV)6HMcZt8B z@UrDU!=D!U6!tWWKl7{>`>5)SMtN$O>};9~O&K#PNv8uM!0IutT0X<7#g1cBd=*)F zXj7QP*LILGB~s*qp`QYd7!qWg7AYriE{7CZfR!P1gr22hm4(HXRGtNih5!!YI4i8Q z=J_cc$5<#5HQ<|J@<$r?jqL{q#5_aS3S^nQ_)m-lFHGznyh));a++=<4HiNB-}Ub! z?dqP74e3y`0bRH32Am}Whm^z|nWfD-e_IyLqK!@SRA;Ao{%2g8=Sw`9<I_A};8}_1 z89bA(O7jf3I?dCB=h+;bg`1G(IfCcreAoge!cPoOG&jvN3ctU@r~SEFy-US9C>M`? ziOuVMIE&GG-+{G0c^KV9dQchJaC(<u4|ap0H3qJxQFjB>4?b-p^+S970ksB1z`E1o zd_x-xbVVs%Z@+7zBz6th1|F;dzd?A!sjiC9ax%9(MYMzylp`=2&}lVv7YLnx(`src zMV^4Gj4p7BmEV3DE!FoxRE++JXn}ac6l}Q4Mdy7J>6*TB_^{GZwQ0rR4)Fj8$iprO zUlhv8+abY`Sok6z3<E{Qe2t%Y?Z}tW=0vgkvoEPuYN1r@{g4ZDL8CwNK8B;Nc8gis zhD3l7=PQw*GiJk~W$}4(!=Yu-0JY(8-3ufPAi1;}I>G{E@_M$*(!p5EPPrCz#)z8i z6z^CD?q4CFeMspyKm`YpAn)z;`GD8xymd6g=(;?)k4Bh8dyJAX<<7Ip&9WLzlfbER zvs<Ar+~7i^_M%#ZJZ-GvA6msfCE}@Ocd9N;V^x=>#AZrXrX_ogIDkxsjDA!CY_`U# zkfNc-0OM%~%t7Sl;)YFXs!=>pu8PVv(aU&`7Q`j^Y<h%BDU8}d(IR|Eg22%zbDUWj zSYF}NG<!hSJXDzGc>&LBcv|q>c8&bqf=?IdO5*_Ik^QfJkZym&Ot-&&(u0p1x`=gX z5@$md)xo>$;74kca2d(iv&J4RrIB%UAEE4k_=43~<@(gdyU4P~AR4MmtEh+gbyDcK zJUIQp=L4<_@Z-P-oG+63Zcsgbp4JBfk(`mRVVMCM#FcBku&0M#>Cgq@=q>HnRZv&v z(x1Wj6Z{#L&E#28B(9SH!E^CC`08Ab&^?lO<$P=B-z=tGUs-IEq4xxaKq^aj(09yA z_rdp34sFz?&VoU3`+ze~QFQc;90z{^{*sh{51H+L0kVHmq@jvZv1>RkM1oI}lYEkR zcld4u7^73R!Tuj2g6>h*hbcbs{z3}Z@0y3b;(+U(D4lE#UI~|@DL+<t{H=T;-uJ`c z+=TmFaKotm8V$ZyCu^>BIf@1{^%HOzJ1v%G%iOLGa(9=x%`4)pu$(ML*<R|=H`T3! zRT@S*^aV$QzX50)YVoE*%imFW;vjlA2=S2M72cW!I<H*~`oOlma^nYO(>!{WcTqRE zs}65OsmgxySI&<w7o)D^8|&c3#^EI)K5;fUK6o)APSkyfLfXp>8>q0Oz*!_3adC2d zffslqlw1;dlu~FlJ3rn}nM>=qon4~mWV*owv-)xuV*gVh#hGMaM4<B<AVvaZx&x;j z^N+!*aV-Ks^7=4Z)oXsVxLo}5Y6ghP_}~cymy13*MdGE)S&^c*J;`-FyYg72hANvI zt$2;(7y+M;wa*%zUT|gGPG2ZHef1Sar~4utAs|HbsO{Rr^@YkrZ%4vHR6<Cg$`}co zuCXIwY~)c&QAnW7rFGoyF42{)nZ_+hu;VRva3cr{X=}w4Axb{5zmgX&Vi=7?UYGt& zA#QDTYxfVuc*7jwEJ^chd=%6s{{R|)>_&i3FC=zc(`5YJ_&AcAKi>E>K8y@+z-ULg zWv&Y-*R!1_)5(U7&v%;qf2eBXi=8HKqvTiY$*>?<ZU2Fi*LRvs+`94DG#lhtj+>>M zf4;HaUKAz?E3IVX7JC|OHCEac8@Jih?AT}?xN(n4BNV>TLzTlvTvjCp(4+W514uIV zG%q<<%0bjXgJ_WCr>`>&e&Rt?u5zDcBvnqbGtubCx;7)J#286ikWr2#5A@WOFk;|S z7(hPWf%uUa9$*7UW079s6t$NbgG8$)V$YA3mW$kR#(2`Iqv#Ftd-YvZg8a6M+@i!* z>La7y|9%Xey4>jVe=&xta6z*rNX{~b-bBW;jUiL>wEJB74}zvLoFL8utGJOH4>%yq zahDSW22Tp})~%nG<~e}pBRoIiNtvGJ$;RU<O7mQg&*gX?#q%njJ$R1dVPP!ia~`j5 z9<T69V{uI5)uG-07a$+wwQvT;YYSj$PTqJ7A8){Z5ZBymqj-EOV%==4eqyTU4Hy_Z z<up%wPOBMdVEtS<tq(%*Sg1Y=r(KVX7N_Cn1j%W1Qj8hthb)Vcc;gseN&2n|y~HK7 zODx9w4_IjZ2%|Iq1q)^8+52@C7P=Q1|8o{P-2n?N!|A#h7J}~QhfKZ`&)s<L#be_S z=o=OK5BfLJE6YVCO9;~aYyS$0hgLe{WVAXKF8*h6Ps1EFJ0tFJ0t=Rea`CIn3=Ao9 zb57e7Js%}$cB1z@JNa@gv?O4PUPmcvcB0HBbzH?RaXT_fay!Cvc#0mZS2%H-U%bc} zZjjS<&5kv2xQnEZkiU9{o<J&M>0je(XZgC2ifbKH!!5ZaFXd8PzZPLsaeys~BZFBa z$|7D`{g1*eF<5(RYqPM(AKr>-DwTxy@RRHDJ8pOb`L;J4PQaX)9!dE-B_SZG55W&{ zm2viaTl0JxHtBGUNN<R<RCuYEICZZ_RFTF`a&jVO5CmNxQ#T$Zv3|@amZOAWWa;Io zwJ7MrF{qMcDwuz<(RHmliLwy<FuT2s;*s2VoNTNyL}R4NtM}jFeH7{#MGr<O)kV1B z$D@Bdd=p)%G8j{Xqg?E}B!+^es4xSu+i}D*K6nAvrFH#Lfujr8QzYh10QI`Ce&q;U z5virx74axvaUH!tH~xftAfA4T&Tyd05n)`@fL@i7r4|^&zEpAu2yy1(Z@P05{`#DR zGD2teEZ-=E0zr?6`D8cN&&0JfGkh87#t2(C61W>+#2&HTsGv5DZVaPt)S&`&gX$>~ zPvw~1NZ?bVmqcnQMRkSp7T3`WbmcSTwRa^WtQkEZU<qjM+A;`FCKxCJlBGADAu|*x zxO$dP3*F_SL#`8fn|2W-79BvW{wcnod)0@et$~Lcx2mC=ql|81B2TCs0&1a~7iPpz zYc{$l;gmxzL+`>Jr4dIJ@re7&)%MQnr<$*btZUQR5~H)nk=N*~1{{u3bo&hyJO*zZ z<^+8xv-P5$q^oZR64FW4I8Uk?)x%>ToQr#h>ZlM65T&-J1IqDuMNm=_L+Q4lj1P>8 ztfK@)4$51?m4F;GkPrADCq+X-cqk+P6b2(Bzl36o5!q763yD~cgU!%DBIFwfRP~8u z)l(xM<7X}TQ4gn>rC2mZ#?{a`UeALW;j{_#F(4vNjCRD6G_*!ZWNZR5Qi)t?l3YtK zjzPw3!YEzD1kUFH)}AvHaVfMKV3IR0>zp&Mp$nuDXkVhjKFm0r86YP<lxV><s8SX| zhQ!nE8lgs+d@~%IDbupCz=}Su3r=p0FvQVoL`};2Yv2b$=m0Rg=>kgxh47ln@+hXU z>~muDrf6&SlYqMmm-+Cq?^P=x2Epm)%;#5O*@~IWSoNI~pYIrFN8Q=^yeHp1E#;G) z&w1`6b@~?YoIW&$#S@stF$kYYj{%NZobtC}@p*VfEKW(x;=^nJ21Z2IQG#M|%3C5E z-6a+xUt1OrP(*F;wO-;C6KLlP3r)+Rzs=l76Ckh0T{xv0k69j8K>ZtSt*+R&^VRm& zi(<NV_SN=v*+96t+8){YYWrzqluYWDt8L6z#5l8Yzl;-yBY0fOh^6szGIng*kc^q6 z&VMuJm#CJv0}JngQX6A-TtLN3p$!PHM21#98?Q)2ZDjqyW=cq4Qv&GL#C~!nQ^j<y zou0B{tkt=M06N!3PboF@l+DQ4rgM9NXBgs0S0U~57w1_6=5-<gh;lAgfGiW<|3dxz zTb2bsVor8$1#kfVb5cKJnXDuJdQS0|xfq?=YFi=D6b6IN%@-If=E6z`LZNw<u^hz@ zvhCn{m=0_^&A7PO;<g;QB1H)`g2=pME=n&$=Os;&aUeym6c7j6yg38KBz+QyKHsDo z^a*^xlUyn(F+(Nj&~}}y?ZOr0d7l9~Yr8Y*IHR0;X;Sl{9F2H-%_IIwf?29dPVmq= zN>K1p-V#~CF0m5%3?5=#SF4^*=4-@9*fl=^0ocV<6GjAmBojJudOGT`8_klK)04_Y z^!yk=V>ta%6e1w0Fa!A@?n*Wgn?#&WDGEx;Tw2HN>=N%GqX8u-Mbp9`$U@Cf#?w;$ z_d^X#;_x@k0O!c*(@l8)3r^pQE1M1Y&&ufo=u+ta)ZUdsMp>*H>h1<}L)r6+-x3#4 z=NFOEkxOf)>KXJEvHqY6kh*}Cgtiu2!ery|kQxDoL$<Ya9*-$!YI&Bi#uQT%`H-k7 zrlxhGDICJ>%rTlmM&!{pYF(+J)(r)UB;~q51u=~@e<mr4F41tvb@Bw`#m!h+HAyMR zu3cjPV2hwM*Awu(mec#|A44BcB`s=E4^jlNsDL&Og;c6OE7D?Eu!P#RdP3qB+BnJ7 zBGHR_;^0Mv)Om(SYTHQLVnf=NA+PKS={u?6?o0{6@HRcB(92V<f-nUTrgjM7`>E|9 zv}t8DBLhO3ql?6yquN8*X7(;NX79fuuLWTWLm0SreiAKt*c#^5OI@^-y9-yhaHpez z;ZW3QJ>+rb5cgz5kJ8q>h4n*SCAtJUTne60w%=GWY%J&He4nguDlMnm!M=gD2Mb+< zQi0;G$FV6}t9FwXkGK_}x3>0w6tbl7)exB9w%~~81qY<{{|=2o5-VbCL$?+j?X2(< zGEL5m$FAe4<}sa{4{MMY*y4p^FOt<7fMc3|M$DOij4o!Ems7mK`go;rf50JY3MKy4 znAiC_vldD22D)b!JULV{Wb=@io?Op2qvB4~(-v38tP$_N-0X$1M(lLi^ak?cHd{&d zL|n9{mQ6#c54f%s6d_%p2y6eb;$EE5lXTarDX2F(nF}v!T<eNJMQeNz?u>%?;2kvD zWZy<W4u_|T7z)uE0~G3G_KW7zrr)AQS`|_Wwcc8Ysc9sBlGLZyEcG8BX?8C@c#VFF z_(EIziNO@SMPN;V@s;yrYtIcfuvkPp6LZ?`OhndE3u^YDMoT0lyTotMph4*eaRCUU zC|GMv%5q!6noZknY&4CqK!!%MuFbwiiLtLS5-nMBo<NM<*D!6e27ZUut$%cyM{><( zT;fMulP<aDe^ZS9x&di;s2YT{s--d*ShhuN9o`U<DMilz7Q_jGS}ePfpm0NZvFyfQ z4DXf5r=wlok;0l*wPFr#L!YPn8|gY$xR26=lYskH8uME~GjdN_dkWkZ!G$=uUnO}% z4sgGI6#n3<=lRjl-Ee5gYrvIz`=k!TL+o8*&pu#H#6RqBG3DRz+CWYJ4TV%kSu3vZ zFt`tr-dULf{6Hmoc#we~X#m7EiZN!FDJTswN|h9e^vg^FI@#=!5vipVg%ZkJTt_c} zk~@&sU>A%i2nGh3W7}ZeKx$E`Q(R#KJCS-Lr{jab2uVHBnBQt(XA8dIf=d!2w4X;E ze1r8jn_bh%3KY8akAX4WDq<Nioa{)Xx53Mqb-W@`ekppSmO!#g>5=tqw7d#K%X<u& zC5a7-W*O^F*mfi(50gS4aVt)|t4U!D-O#uhGXh=s*qWU$v^A4RDXeV44LXx>2}-!K z1+>ntJff}X4rR+^>kelKX%CeK-@0@lLA+0-!!mNTVODLDVdLptnqEOSZ{3e6h<^62 z8-@~i@jH}}w++n2aIoJCVAxyT5G0Apu&k|Jhhl_jImy^CZEj7?7!ZT$bJ&{tG{eGq zJZaUPZA}fk#K5;(T9CEsTZl*Ix^bcq^DJ%$3noFOb2lf!1qqv)5)nz_Fx&<V34J*Y zh7~?HZ`YwW5RznT#e_{>9x#953-Ocgr1QC5wfo;gD)v^!{0y-mioh(*<JZrmk1N*S zNFSH2zlA>1*WW=OY3moz$H4W==%dg2RrKLrPh$YVv)ABbeiVats8ptS1Uy5n_s0N8 z5@T#|(%vLAA}?kVf^7oS9&a|nuV`z2LdyjZMO#Z}<%k*^S-RVn$nljkrFh@k-=M~% zjyIn9@U`?Z@;?gj+U{a~|2N)(u%!A~x2pROx0CWLi_|&DXo+;%504e;=2rE(Ew|%L z8J@j(-otYk&;Q~13eWd=PUCUh!RO6n{0+sc^EKG+eBc1_X>S|#Nqw3G6(8d25H<#I zkDr??zVK>6^l9KYC3Fhc4PoP;9|mw}tUK5fqhuY9uP71DLk+Kfmdt}qnj>F{M@-?h z--8;g(_|i^SWU1Al9I4B&(}YWg~3=c(+0`&5csSntng*P#Fnf@{;a5J(|!=E0!q10 znyq+i!e)&8qOU<)7S*$%@B5@NQd;}l8zYwuGv&2mjO<he`Wy1XXq7Gn94Y7NN@RaU zV-8R^4FDsq&hz!ba7w{2+Kl&^+p$9OvSNo&9M$y!T8r3Uu|8u>Mzp{|59x9^`)-E0 z4UiPu$Lj!wxtqb_J4VHOG~L!exGX_cJ<CSG`^as~NcR5G1|(CD+%$9Cx-%X!Azh~_ zS-A{i#L;R&C$oNrX%R7jF7_IPaTC0xXH4@pFS7K~n6=1f7ukTO=nmIJ9&NK0DK*w2 z7fFy|M)gt6RP7*$lXX1GT_o9O7?$3hggLy(1zX_8U$R^|#R1J23Rt4hMhA%H%%uS! zt-Lp5+A*dE9Tl8qiDJwTE<GVs{}m8{n0wG8wENvaALM1mBAk`GmaKs)$Wkz^O<1L| zyQFB@9VH(my7A_jZMT|Hm;&!SlWdF7v>9$tUi_}xf-GX?dtgo(Mk4SAQcj<OgVZsk zRET{}8U3k)a9;z)8X=kVaya{V#LRwe+@rL}LK3bG(Qr?#W*)wliz8WF$N-Vt;wY#+ zrV|OX_$&IWzEYT8_4V)AJ(6Ez90gwOK*T=yx+P)>3-i`}wh;0SPa~d#c#bWw<QrYd z=7)zmZY2eKz9)Ph*<bc7qrGsrJ6+E1PM|HtEmQtZ)M3&MMK0NK$e{{8Qta7;O|KQ7 zlnWi2vCh}QB30d-sJH6wU+7`<B~HJ_71}Tk>RFt2KdsC4d&b}gZu4u5-b1g$f2QAx zVK}nLP#KEGxG9ulmBk0U7K>kuktnszJ#d>)!DkAMW|j^%ny@!uDn;dOeD69<Fdf|N z+PCGO2!D#p_mUbOdMgTd-3swb;74yoq?E4RanBihZm`B9KsucrayoF6m;)-<_BYDw zWNynLrwOHLDM9afDRK0C`&0?7hf<W{Oqok$6}v>H&(M0v)}!1c5T1>;ZXP+nSH{D5 zmH(cu*&PBkx=<?pN=7vJaI@i-Xd*${d-YAL%gC3+?ES;E$r;=GRkV^cccJS%`H+0T z!_?EJ<TI7O3at$qWM&Huy-=9YK<^n1pPy$(12$18MWKN*m&o>Zi45Qi(wg_55p9f} zMc}YWSop<$snsINShKsLT-?)}pm6Cp$=?noeXr;QCB^KyeiBOpD=3^z9JLDyw_>{^ zZar8f+T0sQ(s0C%B@>|e>@NhUyRHR9tf}8{6d%~{fU6<sA+<3Ydi@X)?!8_=L~{VB z^x}sv;B}i>3%`zHDN6ZTvv=7~Ltoq!m=yY=S0Eb~+XpU-ktcDFwO83D;+zivz_dfs zWc_IX02Q>AJ`&d-!v|E*V(~a+9~yV7#wlyet(mfY!=(hv2fn`pphM-M;a`CrNKrx3 zl3u+{uU2}n)tFH?mcH*2lZh87jr1B!KSZfUd611?Q?LeBUQ^KryVX11uvK;KVQ>?f z`mxhwNEc~S$fRwBG!!O=qDq*d9>QTcV+99kV~T~yqm)H)7L_Wk<A!&My(l3$tB2Kw zrSPf|W8g!7pW~a;x}ALIZ|#N7V!Q+@xr49K@X=`Pp*Rnr3!`Bz*rP)HCKE2e(Bzfu zok~{2U3{Mi(1A;)?slUVpMkv|JsEp}3l-)f@^l<!?PC}bn}DBAXJ`p;=qSgxf>Y2v zE1h&lo>sGy)SF2zR%8Jv?B9fDBGmJgf;ZAccZBHE=z$i^>mkx`UsNQE(NM`_JK54u zaci)-U0&GTAfTzCCQA*~Z7D-B8r=RNZIq$QI`?fDIFvQiR6{C|AzT_2J_el7P(8G) z65nBvLUpU%K`+rerF479ICl~AFOGs3%t$>O$`&qbs~F}>(;H$*x0oLBRxugK2$43! zQ9JA0nZahi;%Tdx$|zopF{%}y|CZJ*y&*twwOVflK8-2K-1`y_zGJRVOzCdO4}`o3 z-Q|oU2@f*4D=^M*AVv0fV>(7bsCA_j<M7e$!UL}h^vSM9FFPN2m!U8XJgS5T-XQ9t zGM#jZ8F-XMb(TtD{|SFVnd?x3iKm4(f;iUT+c*LlVj&~%aX@z5WkALp6|)g`B?=Kl zRG1+Or`RAO?{P{|fKcYrI(h*>_8_C=B66FiF*aQ8&P%QN8R$Q1)S9ID85p4*DQxJs z_Un5x^2=H)z*`+y=})Vn114MH)IV-kyQ)26J9;CTfNggA%U}X-XQzK`ki}$dr_WNG zs@TJ^eCEwf)%TGdy=GHAxwgwWRjZy0F~Ay6Az{a|87J|!DRv_lc8MXvj5^L}8G5Io z91((EGa=$Ez-U8q9VIA;C~t|ZV3#PA5Mhot4Low|9bWnKHCn**qa6=cUgf41>>xd@ zeS;3{Aj$#%A4vwt|HX#n1jHIPIQy&{lC{WqHmim?8FgUMBYAz4{5vpM4gZdF+JFBn z(dgQLw*P+n0DG^_zW@F*^2!17Z}#7rNDGO9<O)OXzZZeXHbye{-_uRdc{I<c<BS#~ z%|JO~Bznz^^m?+%;k^G&35t;@Z;7m6mxv;tgx6#wYyVw?HAaxaVlWc#zw>s<v-GxO zgPLNbAeNWVn!uv}1tYcgx1;<l=CP{*|JfMHG>=&l$C&T2zs*j-MtH%2FvegxzO9yz z`-uy7^6F2CE?Uig_jcPizrch7+}QH0Jk<8h+aKEBh$j!5a}aN=i>X9fQYto4B!@|S z5|2*<APOZWOCM|w(2ljW&A_-}A0idwc|`%pJH5Ny0;FwWgm^Yo3^H3-D#quCW-95y zEOZ^@c8XLnl3B%ImseIX9LiU8aX%12?M?@<li6mE-E^JYh<vb-WJo@;?@oVBe!764 z&C8@xV49%)UvpuNOPY|yG_H7HT*3bDU?>}g>UJsENa0spj$^Uvd)*D_zUW0fM!36= z8d5&eDYn{w&hJTme2q@%QPvyqs%|z)<K;UJvvNs{dc5FVqiq$^cC;}92AdV$sw%80 z0kqxg4Y<fzLM%6``3iOp11`G2$EapM-qY}r#G@^L*o92%r6L^pmBM)|173?Z!m%dB zC9q#^YEq86c79y1dSl7g#<9S3H$RPhvE=h9=YkOoJ+KGQ^Q|&45hEv=-@BWR1JmN~ z2xOo-Z}n&lWK6prx!H}-T`sPVYu_U-5!<6YR6;_Hl31vH+Q;mXn;4Q3lu)C*C3W-y zWWBi49?gM*V$kE5jMm3JD!_X~cl;ahtvW=bezpu_VSCeE9+_2d#ETYJV(GxQcGvvT z7@VvnZ~I}2$I_B9C>@o<KwJ2r7ez_@l8|h-$x4MV{tXh7gY#Q>MF^oJM#ww8fe_`C zF0b;9tfNGQ6v|&xM=yYszCa!sqj{8S;R@&n=5{L^`U8DnAia~N1Q|%R>XEbsK!ZxW zhm+;1yVx;pmJvdX{(pc|p~m+(E2B7qa5U<@J{PeV=WF5~8Qq3!f0t~7+5LjO;DCb& z!E{sWdLQT)NL;_-x3Fx`?oXQ3pE&>jAb)hJt6c2l@jwU7X(<i>QE|Gh;=7QM#RC9u zA^cKbZpBO9*#rEithIH`w_pNm@ZyL;ocNnjW+a!PgBMA>9?!w(H7yWE<8Zp}gW>Ue ztIle=0@GNX-f2|Eu`?^kN4qbC;4ZPmR$v>c0W00OLBS|C#whj@lGuWPHgau69>#l9 zNkS+@_^a@sGSDLB<2Pqi_vcYHa&C!3k99e>q+o7g@2sOhALbTz*uwesvrH~+Wt4LF zu03t=u{pV@9hS}}mwp~|EGL|8a+!mCvC_$KeR_~&I6A;AO7;RdxeT_}|BKnNh^+Q> zvI4%@X*97Y+5gWUPa5n=!~C^&6Zb<h!id3VHXE#eCit}7{@>GvF-esOtwMYWC=(Ck z^Y?f*;CTzrhj^OsTyQV$7Q*v)JOl9P)oGqTg>aoQo+t4AWjq^eVB5y?B%YV?Y{a{F z@p<WeX`Z|ATz-F=Cm+uuwDU*&CN0OXzbNZB&N;m&(oX`5@>F$TPz7SF?h@b205s(o z9>HGX1TuiVO_mZ@@H)UyZ7l6c)_*iZ2Je59F1gD0>Qmj}{0|T?5<V9P%i(?%=&dhs zO?G?-6=wDk94MZBxEV)=4@MS8GxrwaWf{FJ!z~KVrMTlAKg0Ql>B81Xz9?ehm56i8 zM}jjDc;SQjh!b|OSbTmQx0Aq!F&#UQOZ0fOhe#yXun%>hi+(WlReT^@hJu72$PxOP zfmn|Kr5oyw6u`0(7!+OT5kJ28E$@gpLkKs}Rs0-e!zQP%A{sm#4IU{)gW`o>Btqq7 zBO2mfzAXj}kzx8__M3Vd8s*zJh$Qt&;+yVm*p79nwq^|p{?>%5VMYF<*s+_R;9u}9 zuGz{MJJsWN<D0sG(f=wjOG;)v1XvlaoVa|&HL+VjWA8b+K7vE-UDnq_eB<;~j=RVo z_-=~F?>UA)T%WVqtS_1C!wo?QJphOC_a5V@8Te7;zjOOYj0}Gq8gB}K|K)l+Cx(7} z?**cdBCu1qa!aW3$8dgqIJmDde-8=}=6X9212niT9NgKM{{g*gzC_R8lDU_*%FDLl zYVL5^&hXR^FtaVi4mDnd^LKV{2<Pv?OZXaqu7@REljb}8+m;Yr>xr&gN=1+FLDz#s z*F%9>@J0Za<nJqrE_RBWceR2iu?3Bgvbip7Ih>d<1L*YxZ{tgs88ZO~h^#Pk<VzrV z*+~4cVdl(V2-C@Wa373y#{&b}UkH;iRBp216g;*uh`7U2B)ub3>x+xTtlbPoIDZQu zd0pRz>seOEPpGaBo*cd-dun~4uYV2bqOJnG`Uz^z)%*Yjfq#S~R4(!0`9-4Ug>Pwu zh4Z)3i0dJ~M^4%(WhaHN;{!iKh)U!fR3!ACDg*-1jVK7UIly-aIVK}=A#w~Y5?MxF zxHg39`h%*gA97BIaWswM{d<v#$9(8aG}v3zs65|7X#+n6KhVn#BJ{x?U?v(wG>~ne zM!9&3UG$RmgM6JD4|~WH@Hd!xg?D9dM5aL47hGTPyC<2&h{F`46QlY62FYk=^p$@$ z8QqW}ynau%@n4x2^|J^$TDp<A9_zAGm?&L(%QVL#S96cZf+##p5|$!%V(`L9ev4!! z2e^7YL_`TO($QkE<y%WYi~_0YK5L+>tA0?9euuu?rT0RJiQf#y80APc7|s~pV+Xby z-WRD?1T({{E-NwQT^Z!vVJYv9lvlh#K%=Q1Qs{*%1@>14>-k3@?+Q0iB1GO)L0#yA z&zik7AdXtS7{>$RF!kd|i8%cY`mu)w#NI$5`r*T2O;ir4CP=FF)vu*+WBDi1D=lv; zQXKmAZoPLYB$yBnupc_kQr{r^HfKP)zD-uI40_nNNy=$^@f9e;v^pxCOCM-puqeb= zNJ&k1DQmrBLfC~Xt#aJWN5!B(JSBdn7Zf6MH{9hA7r;z1XY+dM`kW5#yHfmAxUvBJ z6v2^0$y4{9{7!1a%S!dBxD^x9kD@t4M#hf^NI8|(&gjxXJZRTbpy#$cxTOsbp88V^ z4}zZHd$({RoTf1+jxP64nF7J#eF`C?{^;om{vf4%NPB5<W*|4rk`_Ts<o#9LAIFLd zR-Vt}!zH_O^QrGJ-EmFK1PBD8H<-XWSTg%}wgGlpEU=RQ6ux{b&qMuS6CQ!iw$&Hf zt51;C?`u>2*DuB3Lh(21FU>r}6Byk~K@(VSb6nE|*7O%*iK%YA*9r%s#egHr^+KA7 z7h$&>AGeo8-!X6*gdksB;olZ4^@!9zfS2KZ;Dk`Rz(A%WC!7>s>e3yOsQBs7cZcV? z#iye{kt7?blY(8##hL+9KA+&AF}M<Kf!ptS+MN0ZbB_=qi$cn@nehA{wCR4!i>mv` z`S1CE7BPJwX-?B)cgE9zxE%I6FnV%ljNWE+s0LVmcw^<=R5uBa@_*0(fmdswn|_xo z)Of~ms#%NVo{8Lj2DD&t=d+2s1pgW-?n;ZrfiEp#mjUED^o1_H*y%q!Y?`N72i9JD zh~%>+2+I1l69g00D+3XBcw^+98>5kIt@(#pJVW7w_BQncsCMDm0&`e3Z3;p5=~E9! z%8r)Ez@ziy{Kp{IAmyM^6^jckfVFD6OCFN#DvtWEl(&&mTpP;Uc~X~y@+PGC?iF3= z77MyyYLxu6teBk3%MMo*8ERXI!(~`%+fTfz%f}%vYv*Ea1c2NF(nuM0oFBgy@9|6D z-24}tes`fN3!H#{7$3NTsD7CbWU10jor*?A^WYVU7?e6DFxTv+S4PIgseu#6Dwlu6 zDTo!D=J)d#+73Xfzsv)ZHpUlbzDiuLgQ;(+YntO*aKprCWD%CICO5RoX(IuX-;Lmg ziurLR#bSH2#SN8u7En6`*kmm!fE|sZx-p)ah=(s4oX1I{YVL(ic=hT@2fcFgJxOEj zQ-S4Z!nYhHW-V|A2Vf0J!*9lK&EfatAE-ZW8k=%wT>A3Zc#8YymHlI`HyD1p;}il# z^@`+1Df(0=om>DO!VC|VKk|ju$rQ=*P8}yFU=rA#MKijwSTPqd5(r5@(qFD#Ii5(x zE4gxgfm8QLe@>qDYH8LJb9d0Naq8RV)NEfiil>)4nuD~wO{U~lqBZW<v8v8P&$p%Q zf6;#Qt#fYQ-KKqS=k14%!q`nZ$T7r3na!d6TPw0=BZ|(4WaAk3DCinmHY2X`N{YHw zO{3ZH?nuz8myz*6UE2p?-G%q>`;GmUH;b2|g61-kQvR0i<W~0gZ`35N)pDrM*)3QA zTmzQG;YQ^#f;xR2)wwB4)_FbwHT!ffK+Oh_k(rb^zqP59hA_?@yemlv(IDvuQG*<- zz_F33qF4s|6Nw|gM(|9qrrsK^JZg7u=^pG_Dz50mvkIx{uTb@q6l_kd8tM!+kBh@5 zARbw+sU;v1GBAS+tPWMB<7|sIln{li-Usvqb1F-~u5s8~J0bh675~yJk0MrLMG-7n z{mW5}7UJu-YMp360;EOyqfe0u(J-!3&}zEj2mBv;GiXhxp{d(Pq<;wT;-C54G>?Dh zAs9LlKxZ`FxvIkG9D9!V&)f7l!6eD0MZUq0P(7;GYW{_<72+ycxj9CN;Qyo&CUFA2 zqf1=TC2q0!<?l&a=&jA8V!-$%BI9%p#?K@exG%BYOung?oXO$D$mTOeluY!$roMTo zKN%dY7RV<aaG(=t-KGs-ue?H3$vVJK9W3Q;l8NS~56)yj95uwcbU_}l|MNIGC2xU| zbqppr%xV}T$6>YRXnQb+r2;K+2%-#UfJ%4hWJ2Yg5)F~^3nbs^<3Cta;wdNbv0)rw zhXLwQmLew|(%gcJH3JuxW4yd2wys8pk|0`a9b)z7B@ZJ-5@d>R46X(ILk~G|>0JO@ z28^Sr^GZE|i~P4(_&Knah>dfXgi2Xzu~BN06U9<-4$kl=y~w}LD)~hFl3A)`WWpKT zv4_IxaC-{A^nH}p<%kNWRnGxq!sjMEg2NGSi5H~h92pTuA~-}Ta#~~zG7+;mw3<us zwX|s{{sKCLS%VjOw7Cpcy5wTqXIUgJ%E#!$MDC&icpQAq5eEIWSCa_&BDW<<H!8B~ ztkoVsG7#AZEUM?sXb?jQLMUc;Hq+_Bl+ZFn80qqlr|U{RIL?scA;GR#k2FmXk}eIQ zU=1nI;r`U?I5rHS5L8p_+U#9{VS2p2-yFX2dV>CqjYJ8-t|g+I#v}rWUO4$A7x{fX zXL`!TyGKn)HwtyBj`k4x5P-i2J8_=oLI9Wwa7PfJ75Fj+m5iF70Q`==3>d(s4=we` zv)f}Va=e7X_+XD>@gNxj;Jga1p_5O$NiLD2@EFp$NGj7(ORN4ly|<Ys*?<-YrYu3> zaY`KSp9U3{z0}zShic%U#PCSZJ{1^P>OV~^62Ogc<LX#*M2_0832*2Dy$A5)@SO%n z9y&2@zN4rd*q9>jxD*{xo$wKy8>rMoo=~(1c|uV!x&*Kl^QgRk8`phB0~Pj3CHsfK zs1mf}tMK3P8&eGAJR`+`SCV8ri?ZMq6=G=*CJ8t|O-wiz1SuEHsc0U})%ZPJi}T46 zkN5#LJ|LN}4Q}uOqBsND){621StC&qXiJ9KR4qEMlJvN;SR|-M)8WUT9v4W2sE4EA zdP3Yn7@@XUgREAy2yQ`zCTXqKUUxJ69gDGFtHdZ|T)XRXD`g^$kL>S|L9L>=Y6s11 zvs8wj_BoHkUQSdgQ+#<Ki4UR!!e(4oDQrxQjrAq0euJH;gLEHdAStxm85f-7KYhV8 zWeG15-ys+}hAbO3ap3dX5y+?M*QDaZRTO;(T#UurBDepRi>VBWPI2Q?W)XY)kk8~# zNvrgawtQ)5{95&3;`Hgx3Vp%?u%Rcq$5?Yt!2PLM4pY2Or+%<q$FJ!wv3*FZZ2<AL zYC4Wy5v4&VjpD&K+9TR43n@|0<4Ye^tKUZwUf%pU2{IOPC?`7l*_Y^6>JrF!5^42; zr7BxtVPj4q^2Y%O0}O_;xZuy-7%o;b)tuNKjx{P1siB=_x=m&>XFd~~_Wc0D=i1HZ zh|k0yI>+b9uCe%h;9T&zMHc!G@R`62^&jB#CfNjAjXFiuIF*S^N1bNsFEe$5PeSD9 z`$_tPr44-omu1oWCt!OwxGG65hNM7-&`f5J*dpEl?E4RBgb131je{+G?mO?K-hRkF z;9^W0hboAya(vP~s<3V5II{|Kw1*pNwzpZUSPX#t<^HE34aMardhiABH~|qDp)6jn zP{M{Ed(g=3*y81uAV`as90vO(5z${SX`w-w^WAEmS$hFy0}Ml`-R*|qCam6RfI|PX z%rDd*+*gmQ&+dt?`v`hYPyPOfFk-S3eIH{3WB}IQ=qb!mTL{v*|56vf2j)cbT}6@n z(?#<Wu**V;g#9}|r}Si$xQcf5o~}2Ef%V4&6f<-_2L3y=kp#O{u!9T62TLI7et6zr zMl>6nc0V_~(2aZGi(Q<^NCy1mNo2quL>y-_(_cV(Nnj{L=6}}O`uW-a<LynrqpZ&U z{{#jJ7@4TiVvCh(R5b2jD}ps(0?~p_FeKOpjTL#PHf^IO5^O+l5@mQ8#HxL}Xj`jw zZ>!b?)M^3<aU<Z0uS;>OXBt|gA_R@(|M{NtJTsF8YkOV)U$07@Is3V{bKm#5&pE&H zMIN+=XR{>lP?V%AFi$VJaNY&HKdzmR<P+&(*9|c2(Sd?fskLd3dJK%Ydsx_7g^*_V z?LX*q8MSqgW%}y{w@mj$`!6-RQI_s~9EpB-{35onD~pY`4QA`b*x~l->j5O%--b98 z+v~3f$bZ7mpMnE%(eFS<51K<LlN>}3>W{@0D2{-*B0V#6tytx#;S@=Oz0!%)w1k-^ zch!$=9m$o$!b$^o%I9z$g7by!c}fdRk8}DpF8O3Fk=a+NTjGmqInSP2PTcdonJSfg zB|3O-uWqjj^Y?9*{k_c{WnNZd`c~ftEyEuXuixsG<@o%t@L;FtDrWuSO7mx`NvjU^ zm-DxV9OxEwH@}9XqM!BD<no(eYnWWwGjp5AusILy)-QJkD<!Q`*K7B0<=d{6R8e1^ z;Id|8M~>@g=iD>%%++t^KnJ+iQ|m_s@+*X|E!Rv~j^y&sKjqBvPCN=gY9DHUFZbuc z5va6|a2g7b-qAxZK<oZR%Mg+KDLp-TS@Uvv>hs)7x_TU=g?=72<D~gb{8`GT{oP`p zS<>ug@vHkS3&LZD<Q-g=w~B|zbjFJZ6u5<ZFP->8%fm*^%F=!57<Re|CBLH5-jR+M zZ?7GzvslE#C2gdS+OhhBVcENIm|4;G$bnSzmnf{dXJL<IyOjHS;_<WD-wa=UJ3nI! z^0Vsql0=V~T*82b(3!cbN?WlbS1%oT@&WZ<ZF;S4pQW?1Pd+ERenhNgP^@)O(`)tb za%yo1_kg!?+gJT?T)<;{l7FMeRS{d$-oO53tM5tmL_>D+x2iwuKd+x->ksPq{>r=? z&&pdm{Nx-4%>xum&&WQxRD)j4dBs6ZPh||68s0OD-xBoXuDA?PBSc3<N6~=40s8Gl zRtHM?7oH%9$UaMKLWcLp6^o<G_hf%OOOE;a&xYAY+QUtMBH1d-Ja#$j?|Q2|<aO;> zqt5ESD>Km^^lmrP=G!glD|q8#Y|G+zvYM#YzW6hX((79y?Cp#MF$EEG-9HD3hQavR z_&)#eUM>$gcbNnos_DQ90bh<IdwYXz^$5TEXed3W(zI+<6Zu{j`emPb+~4d{Qd8C7 z={Y~bKcgPeMsy_F24u{y4)K@QaMM%Fxgr7CmG#s;HikYT=BR_+s+=z~3F-FL)HXt% zj>P2D4~v*3Sxz>r^A(onryeP%<(1d-Pq<`t#0P%s!rs95Y5E&<nx^Tk(6o1on9O-A zT(Foa`MAsKEg3$GeJ<aP&thkf6@ICiXGmWwFUnY#*OzqDZ5GN7qH&7|1ktha4K2^i zlBj!vw{-LV>`o_0`RSUG{1$)vj#@WxMJT}IoH1U4R9^{AWG((oyC-$WvE9U5leh*j zi?K^EiJ{1M)uFR7?pe?WDD^puciF1rQckbY^<!N9z3lGg&{fc4R>vTetfy9H-Nbc# z6Zr=paHQj|u}}H6M+Cz4CwLh;E`o**o-9&i6h}$`sR<J%NwdY#J=m+w^%NbO>x|ix zRBfzzqXNUc6KCUBy{V<t9fqSl+<YcdGCGS+li!pNCBvUV|8C+V0@H6A8)zL<5wRzl z&T<;tjKlRLze+d}qQ2D<!p%EzC{~z>yLuxpvvKduGVf((a#E$0X|T>Dbkuy}8ne1( zyf0!-m2Rt4vd%2}*r)7<17cScWi2d^-pH7Jz>jTofKLtI8a~$PweoX222eME0sCv0 znc`5^adZ1w2wf?a9rugH0s${p({1|sS_2}{%|ew#DM=%>5HOVkN5futnpl9tO|<}H z>ClOz>p~NU)eoN9@iFytBj)sTvaJJZ?DLVcE24v3#ip-Nk;DAZE9cg57@a6gIHy23 zF~$cgN1_z2Ong$eol-K)ufF^+06kk3C$xm;mdXow^w;_geZtx&g*!xBmZ;<koNiB^ z%5<LbiA#6LXPNs+>PuX{r)0XSm6}DO2NBn?-f1GPy&x_&mlotE2O*cEofcX0A)Bkj z>$o}B<|N<Ode@8M$XMKCS!P6_w?K45eWLs63_8(C*fi1EgWpn3!_5!TT7_AUb&k|c zNsP?)y<Hi6xR>^q@_z&2>)L7I>@W>ys^jl)(@1_fx7P^1M6J)5rOcAX<+0jFh1sop z%_@B1lFbO!TzpTCd|v=+UQrQRfke<K$nU$+TKe({_R9H|V3W@QU3ooqdVBFt{nLQU z_%Z&poN#lD4_RLezmE9P{S||J-&TE8o#~yb38h7i24_}o2CK~M3>JYUKeFxD?^mhA z_4($RX^yrxC%4e_+0I%F{<USsnW3j>iboNbqYZkk6p`qSf|8yBV;&=;FQ(`5NQ0Y) z?ge74NpVXVKT_OM=D0;{oZ^-?^T8;H9{n^|^M8`A9D|HONC|z<mst`VDz=Ms48oSG zh-TA^smxC^%jSWd9cyiLM~K1J2G~yvgxg(aKwUP&`umsr8U5T`^)AE4m;`3L+np>* zLn137NFa8d$W8b6Eq^cry4b$zGBb4KOonECg2J?)_+9itZ3kO}YOsy;>);F<w(tnA zf_no7Ei6ow<VDz^y~8>S<W$3pos(MNZ4`|)0<mK#*2<%}a3DWY(HDx_i{=uRl4+$K zu}ssl;e$>;XY;ru&tGv7mvH*D#Psg6XaQTq(b3e7M2j!uI*8xhjqSFVJ|)#UeG7f0 z^bDI?zn3dFvdhV5Hiz`=h$26N>nTD!)|KgOu8xlT*KT&CzVB(6`5k-eC19>};xNjn z=om)h^V>d`SvpM#h0=)mU>Um(zD?7lTYK5CO`Hqf@}FQFTx^xMg5a~K?zOw5Omjwj z@Kj-AO-R>5mE=uW(AD@RwjZ0`-XfX%7<JCpuRENk;zUVA@_O6GWx3o%b#8o8p1)Dl zpIC<Pu+Z2&J;+~)^&#BnFMgW^;EMQ6;ySk1oxstWECNw809G+W&JuY|a{P@uZ{!DH zJvg%+`*hHyb-v<uI1}&{H@np&p+MDDf?;a2X<0I*xP_av$>%nlX4YmZZ{dWrZC?*) zRUtEOdvB3UoB<2P&__ib9cN(ZU$;~{KoSJH%&K|&!eNP@a*|+d%g1*kbU$hSq(_gX zWhs%Uz;XAQ6L_uD%Hg`x<3shh*M$1K#&^B|8|UN@H<968iGz#Q^^@{wHFZHoKgMtT zq&GHve?iJWG41>>@K2oTD!b>o2JlZD<mZ1G|Abr-{rnShTKs$egngeOz5h7IN3!#- z*?T5JODe6tYgJv3yX~}<fGY#ZAL|-&#r}x$(PLk;`;}NY;pJBVvW{`Q$AD?wb4B>- z&shi~!Ob6Ycy-IN0R}H|b>XJJX_-WwRtw(FRRVY+S+a*$(AnTtFLY8wZ}Ls5wGJAY zYyU?f^r2BxRPnU<P~n&5tFavo(d}~RnmoJd$Vob`!BzR9QC?^d)n3Feg>h6khRj3R zr8lmVsy_sX4H;h=s%I^Epd{E%s5AvvOFHBwUxvsiGTv(DWBWVNYd*I0P!Y|alCFI9 zPhI6-Qd#3m{)`WpXN~o?MQ}Kp{QWH3d0k1_vC_+9^Ya+D&Pw?Buucvyw8Fn}#RkG0 z?wtOk1E>G&ORNyn9FL-=nLZD`qcOODbZl4l%E%9==T)qVz_H<y)(B37NOTrIlG>TK z{4*XPhL?Bp^9gP>%UXf3<Vv*^^o2J)8s01gB)DzHAK0~-1N)vESa~q8wHK!brg*E} zRQ)$Q6yc97a5W*z&>HKq??Pf7llx=hZ5#R#+Rdz&S-~&6)BK=WLnDf8>~?}F4n>{G z^K$R)-{7^b!6_3yZhTFJMD!C{`#&e=Oa*lHvCo>CfAQ{!4hFTG-+#nLEDsOZ1%|9L zKPz)JclN4t;BpMgo0Y?3BCONHAD0~DdCrbw@lq{8*m<4&l7#fNjl_4do1a=ZJh3p( zN<>~d;l12Nl;ff_+?W3DAzRSd@iVz_Z{ZO*H7%#9n|wB!olZgl-f1~L6l)E|I<o8E z_IMHW3by2?hU&f+)gDDfB>EVjGuxiFE;+w<QcKUl0(;Y@+BiSof<_+7)GpbAr_s^Q zeDrQ<89DLNJgYASrnUuylb?B&pe?*?6O<C$Mfhh$5Y}zOKi89t5x_MO+JCMUv1@TY zWySLS@*Ho^2;@ZbgSLt6g(rLSLMHqZMY(hG!fuh7JQgLVsW*w7&FDIqCD`>q8yX?c z<?J<P^N;PRj32sn(A&@MulY=wyTmye&80uEjS0KB5-!e-K5Hq=ZY&OsDG#5c@+vY9 zK}6S5DpQ$y{Yn)@neulfeE8kaW+`8eO$)w=xpbM0;O_-IAV_&@-v#?WSEPLR_5JsM zBx(KqpIg7w{?ET0|KY6?Q43-8XZ6qQ#_vhR4D?TT(xjstKcqLDfWi7b%goKU+XZ>{ z8Z`2+puxo&in3U;E(w*H?YWvv&g?bO&NS2(*9a82)%wQKj#O}TMik>6)-UT6P#<0| z1$}9J(|P^!OY9$?+-v{%FF*8g2CYuQ-Wvzu?5W%2>V}l{Z0y*h%pCu}zJlQ>I%2jg z?T-@SW9w1GGjn$<XHjNv8(*Th$`9kSw?1*y#hkRQe|Ob!`pdndB|GB_UMC*^z{+TO zI;8k%>%+9f<Bs`FXRoMk{P@|qI-f-7K3C7?DYkXxjr<!fA^44`mY<_@n(!_D{!_TA z)S9A%sCLCZ&0hEortz)H=%RElbNcks^G);NAD|uW4lruzUG`<`nO%z)Y?bj{KXiS` zR_MnM_87a}F~r!OMDCLKbV;Y+{m#R^)n_n!*mU`eTH8wA^^UXp@w<U?d!YOSBNH>X zpvmnC=DhkXiUhk!rKfj#Gq)0ye59A1n7%o+v0(!w<Mo@(-NV?@2y8?Rs3YYHQ^1Y) zCa!=yrtN*EXC<e1CUwLGk;Ku9thFL%bfoYS#SAYj>2L7e)Zr+e<2b$uwN{(G4{foZ zm(lhfG#yMTZQjlD3;N1qt`y(Fb^BWQXizl3xSq!!cD6Z+vZMiZKlxF`-StyDhxkqQ zGbOkF!wwif@&M5q?JiT{gai7z{_N+^+y=l82-XBU5gU4RjmuA&9_Dd`9?R3U!1!41 zl7=pcF7aM<Ysq*Pn~rhBTSwb0o!P~<+xkCqI|dlt@u|^yb^u@XhG%Zt4p;EgUcm^0 ztI@>Y?6geRL4^8zlduQF5hQjo@#T}t=OOZZ^P>UsGv(!vF8?BVi6-gG%lCfsW#r{~ z$${jhY;tb&33*e?_0VNb-GO?;n)7<i$3XDmho%s`ap6y_DA6LIGAwJY{0YigE0`Or zTfI$0oV`7IVyON^F!uG<<lr5fVsGWdp2|;zjt@VC2pE-a$eS|CCJoC-YAqNwF=xQa z4^#PXKTeH8m6h~tI*A?+?A@bBfxFWMsH2o$rc)O8jQ$5(p2tM>r_vm|(Z+Pj`_(fq zH)_)2=q0N$`zxlKwwx9Db^@j81|!i?H>WK4-(^<v2|)7K`tPkdj1iMp=^UH&#nG*0 zI3YfJ313lQ;~RkNXCL36k5{~J(b>z%li`_!2>o-C7vf08Nl}vL{C@VDs`Vw-kmRv? z;{Cbg3W>V>c<_x=ak;Lams0%(e{UXhS7lzH9)}iZ>eLO^=(vO%50jz>xb4Q2BP6eW zg?yE>($M%BKGXrdO;7#ZP9w#|(w{Dr;7Y}4hMQ+fNYY*t?RESqDzm|ye-5TSzH5%p z)DOdq$zvcL6S(`n(%iNU-Bv=lzXbiB>rLf5Mo_rS%%`x5%9wASt&V5s$cIQ~&$yN5 zyDpniHS4V5Q~_(kXDGDObL}xezzV@czW`2qS~v~S@Xm^sj$-Jy%}Nj5rhm&0`-6}B z412Uh^U(SOD$T9$Ss>XVN6b13riOeM5_$aWk=UT0Be89;Hy+4Q#O98QL?1W~n!5Tc zGUj9nH!YC(_Rpz>6L(O<Zli^pZ{jmzPI28Nui=-aSgS7_hXoMb2zAD1ZXLUQY>%mU z!8t<Zul%vwajE}F^j?c>8&o*+0;?<aUnpLG*Un?$(7q@9%mEjR-@D8dnK*WN_W2aM z)LrYd%J66lBT4EG*60J`soPb^QA)TeO0x6U*AI_wRKZf=eEL?)N02>+sPjy3A=5ni zYRWTxjLNl}BR=aSB76Q2vnV<ktJwj(#Bkat620SCx*NH_1$VrpQxIP@1R-sT5pp_t z%{p4r86bcod%+&&+IK8mVhi5QTCkVd{(X1+^)ax;LbBh+Cyyu4W53P(@ut&A&V;sb z^My2A*0bM>B#H^>O3x@}45&UB(ACzMN2jv`8e<3a7lhUq4QOny0bS@1s89pS-pzns zWaF{-fL4<-wk7&(;jFx~=^ZyGktC+;3C&eUHZ|y9QYQM?QIs%$Bg1)OroSsk%qHEj zG1Cw(>j!Ixn;utE;B93Y;y_^540GFcI)#jjb0cnEgcwQy=dQ@&^plAPnH<?pWwPw+ z(Aw;sJ}w`a3&AefniX!6zr&8W!km>JkKN;%L?t^^{DaEcs98uiU>`>9P4CJa+P+H4 z82Vs-mzmFg<`4DtjM036Hr!Lc&Ab_8Zpp}e-ezt!_x;I|2xq`EG9R>=ThMAEX2sP= z6%^{VoWJcvx#tz~{u;~o-m<L_{LiZgK#Io?EKmY{^6Q8kKZ!W&yfSm7s}K~MzBwqF z);x#$ZO-fzC=O;w37!mW;}(L%B<>>E9GnQBzInnKIdz56PAe#^{&m!OR!}7W3Dn27 z1Ra-juGE2Pc7;n`#~^g{27+~7&N73(&7vQ2)i5~7jn9;sa;o|51<4-s2rVLz3j*sn z|5>6>`&!2{zpHLBT^&g#e@yq@(|t!<e{|sLTKkt7oE&r>$drkl=Nj?h*ipQgD@b~- zxNKCkz@7l>z8PoEv~%tJf-<9H$?UqEMU8v+>{XwAdXG+*Z!DW(<~E8bV9;$kwig^D zPD_W|{^ld?-TuH|8sv4d01x1_y~yQ5A%VlQRu0b+bb9${zvc_OiHzB7crhjHCUNUY zfAM{w-&sFBKjdfhi^%SH(+$0Z!zR{V1jiyf)bsvxdE75N9d;XNF24!#5f209FAVax z4V-^&kiQ#PecR>77IbHYn@<Iu=0*e`?`i-j=>rinZL3{*kuS{$k&g)Z>L<PkxtOB7 zIBkBJWEJ1j3b>7#27^6W_4*qQ9Q^>e#?R;nz`Oj6l8rt915+YcpXJYb@J`#TjkmRz z?Jmf((Vtu?99;xvZSd{r$1=h{yUp=erfiG4qoYeAI<+zT5yTpb6X#m$5ALsVe%*~F zwFdhf@q%L$7x3yr`w~-oB5ZtMS4Ye*KK)m4*sLEso_*a89Q*Lv{<_+qU1lm^j~QEi zB&Tl#%@Q#jU|9Z0uLv5pt||}(v)nL!Ud}kfuloSVKL9M&jbod>4Zn<ke%bomzhnN& zJ0Bc(v@TQM;Ql6Nq}OVb64SfNqDO^hVIaM`O7p;WuirPi!m_{hv`x1n0$s7oufq60 z3g?yN%?%$j#Ozm=_uK7ji+_6X8*I{T&3R)~f%!UKSinEGx#fyn70mf4JgbCAL;H;x zY3+y3#ap#|7i^I<6(}TFF%y+D%rhKqwz`g0>WL6ovL}<=UY}oKes?}bqBAY(tCE$Z z>(EeX`Hohq=hdM$G4SN^q}!AnQno4OAW}||g~a<pd|G2EVg{}8jU_^7hSOAr<*|67 zy|D@n^rUd}>xfpnPtJQK7h1O(!_&(t^@reoK8Y<BAF%18JrDn%B?`Ttg5Rb2=Mv5e zA1g07$^7&N=10SF$b3^7Q$nZcdaODZzUm?nu+V}am{?cdrFpR}gKf}KVO#jmXXbW% z#UIZ#bKH2^+<2yOjJc;_#7ar=!u6<Fzgf+V*T80x{dLo7EX*<99)ovUe?mARP14^q zoXsciE52&Sozx|fmFE0;)>>s#N)HNOg7E11E@S7MjbuY{L2fYd^g{Z$YaoDS+GX<x zKZB?VK}4Z1f{5QjIC0A`w||Mz{tG_Kl1uqFXyzq5$odTx=3LiI$C`}F8TUq<>axwe zSx)_&P9v4(mzVigx3|m^8hZtYzU*%!U<-llSyj3b`p>NUkm;GY`p0hnD7-h@5#h=f z`%%Qd#Ra8YOvD77Hzqylr#3rm+p_FqxUwA~uxux*gR-E06sq^a>n!p|3Hcw9Eabb+ z?*JlnelGly$NPifG2)n`?<E2@Jm%?e`E%j&C+CKbZ3~Zi8-{x4l6^l4SG~yB3;c%- zPMMCqNqU{1|Hpq-N_xiIBRpoU9lsmXXge~^Wm-Y0PXiaEX<!zgH@B><#LmKveBxTZ zWI{?osW9cAYuyMX$5O~Cv)SP$Mch=F)9?PM=Z&g@IShDC!5j)98xCFcbtfAxKkN$( zOM9D0xOp{f5KNo#<{g-t_A}w~HE!DfU{+i0v|r*&Q@7JzZKwSnKLwXLn)X^v`#C#R zO&cuQe>H7T=uf*EJHRLXnS555&?}Dgr}B#-fW~m;Q%t1Q3b;expsFw7CMHu7ZiFjI z&m5!c*u(xBO)<I(6_~xd1Tt|7v5VoR*9EMId9>2<P|<FA=<=8CNCM(d^U(Qzh9j${ zN-nE}c8|*z?VgAcf>5ZXgMVC$19t<IYl*nHAfleA!{|g@yvLQD0!w*8bqYA;1+^AL z4Snf5Y2#Kxju%q&ZOhJbHIi}hvlF1<#N*g!K5YNOC-2L;29kf^SN}zFsmnF1%N^7H zf>J_2QEY3Tw>G?YmRW+L!X)Sms6M*gLX{np6gO8s@3<M#3wZ8OY!#p9hObET+|L1% zc+LS$C$$qz1xp-a?qBhNFwZkFwy(SsQ&hNtWQZtlRu0q^E?*ZOvsFY1+W*m?A{`_4 zqR3}$v(@1-Pcj9hUU<wq7H+gDvV|;*EWe8_ZSyev2KCT~&1dyzbCNRH+@V7#g%oUG z4w>OZXPVyMv-F<-qNDd$_?6=4jh3J1-){MNBBP$82kHM~e*OsOi=8rJ?Eeuzhtl)g zN$=RVFMQmS?BLVM*QOodIx0~cF~c5BE&Oje$x~b~E0fy`;r0ff+s}M2#qIgbX<7j= zo;A&9o0B@kRgQ^R+xh+ixe-dYG@#tDt)FCxer`CwRfK=)Qs;>ACCIOEw!`4_&;B<O z<fP|!BS8-GGkgiMpIex8cgTCoXp_Ms`p@UQ(f)LS+|okdUk<&x$u*x|zcZHL$NWr` z20~K_;erd*K~t)O`rm%Rig1W^H6ExHxW9H$?YG_kIg=@V4iWTeu~4+Zi3I>VSCY>z ztN)Mau}+8RU5M-t_}uNX`Z>l|vX~P6<>Dn9Ett(+XF0jJ2<Gf97i+im^n~-46)4AJ zVsL#VymyY7rSvh=3L@TGD5*_JpImJzDHA;3c+P<*I_8#?$N$_jt+n5OFz>ZHoG&Z5 zk<PT6ju!Q|XI%@K1|9l6SN9AQtr%rDHCjzyezf98SAMx@#fx0mQkm>cM6+|f@5#K& zwJ{vtuB3f*<r%a30!4A)n4L#B#xMdmyk~6a#s)Lyyiafm+3f<dj#bd%!o0$D@sixR zD|*JAWM(b#H=gSbv4KyFzev%B1Xbh`Z}^P)A2rQIBRuRfkX6~X!2%~`Rnkc=PlovY zFA(|v;oMJpNIo>d>5La{)_$*BW%nq$ML*VO>t6+l{3E-5%YZR;^{4gc#Isz-KDxq* z%Y9{z`#^reXQesD6%f9x?;<`wPiGwCgyz|($o#(7XUIO2A(o1_dwsm(?bz@i$X(I? zoTCaNU<S<pv!DNE;_Wa!`^Vc!9(|d3J4ntR2%MGUHE1WO=`uuH>{P6YcSWw-*AL}4 zk<<&TZHx}FX}RHp7Lh~@n_jj{#bdGBNmtvGbpaD2*UKLt4~-8tZmoegsD7^*=H+K` zGa&z@ag^jt0dZ=QK&E>W=XI^0nhWrIViU6JtNU8+i%>vxnbzWUH*%<f_oEUO7(tkK zd#=GMKP{xM);Q-~u98*~>&)JBb$oCS`+ieK^<1@xr1*D36Q+z@sH2*jz6)xCgHC6g zpPerv)dVn_<pj3jS8t{!?9Mkb+<~TCH%il;5)Xybb9ph<cz=2D(lZY8B{{K%e4Ng9 z2Q?!OmN-^xA-eh6(7JC}(H_JKz55;Oz!b3cB8}N5DW`+WHkd95GD`*3MXijo9@pX4 z;~E6i+910LZ-$pQ(TWYR3uf3a$gciJtZ=!R8-U+&L3PDJP~A_?u;LG*8=q11-vrS; z{j>#z4WRqDadC>*`mbNVb0v2(#T(O8Jlr~6gDGZ;R~H{-f$o*&^73}wzBY`kY{o@{ z@sCKc!P&yEL6#mc-O^k4nf|sR@{{$8AIl#wehhycube&d2`Y8vs-uWGH}794FPr#` zI}x(ZHalt@HFQQL#-h5^w!(aLeBfzZGKW%8-JKr2$DB#lE9tD$mDQqJwHuW6SUT$% zW$9jo=s50vtuQyIv$Qo~=N&!DW?hxe>VngwItUycIaUq+FrB6Au%a!^^mXH3lod&5 ztyY#?MA4RU$~rNfr4ymi(htcxipzN`%vaM{%WSRh(_k?VUgJMGE;Z$gl_fJHy0u(c z@20aVl=X`P$XdZELhd(9XHBqKUn6TG=X5K~pVC>Qm8B!}_RM*Oxh|chKq9N#Mr)c> zt0A5B52?Kk_fV_$ePzu~XX(P3=%Nr=FIFpSaysh)WyvWO{oQb79iGlo$ZfQ`Q4Qv3 z@VV)%g*J<0{m~YJ&MM4@$EKihfwDHPBCBzTYQ3D!Dpgk2@5$Qwp89$;oprRbqF*Je z)I#HT>8yQ}b;sRm(9WwlowWl&5N#2$ZL!35Q94T|c(haay58dJtaMhZvQ|7tmhNH3 zen@BCrmWHj$$GXx^Ex1%<ta<=iAC?VsN8joKjntHsIDxEMt5pX@28SyM_b-dL-2Zq z*_cY^rqu3LBK0Q}6B=7tBxQy8waRGY|ElC|l+*=dERypN@qN(y_!o=m-mEF>ECZ%w z&j3XZaYfJodp&|Eea)U~;XuRuQPHCNr*nS8%GuwaV}+r60q&gHYj_N5ww~7E!eMXM zMT5dqyDB-&)U)5M>yBrcZrHDI$Kb!o^~gDcD_*lBp^`i3)N^9ha`uuUWoj`m)uIFv z8;+^iBLDY<)pg++5%YbnsKWlhBb~iwCFstw<-AGdhpcw@^!va4Yoq*D0;#LWT(5Nv z?dSArzrwpX&s$gN?IO_UeFgd)g6n?2)_)D&@pA0%Ik64-=OscT!ViVG+18uHO$qv3 z<E^t{Jp&efI1~wr^0|iA^82(#h`C>auU>;;!m;@|d0%VUu{lWRZUH;l*xQ2(SBL*R zDL2RvaQGi~Os^UBo!<bzS>)1<kiWeshsfNqEle<%|Ii0AK;%stnJ!F!ecO}&UgwcG zgTw9ciIT1;!e>!rMtpjg+49N1wEhI4taiL}g@la%QJ<sTvA4sqPjfFlAaO>vo$cHg zw(vQ(bZ+aG(A+(_Mt5a*Pga(eE|o{gXk%5gt@yuNI@7=B@>*0l{4>H@DPb#S^yp=0 z{2;&YZ)l$v3_lG&v`1{qsoVD`s@o_0(3#m&VsD+=x@C_&TS=+^S9~ae{b<l?2^V_y znrO8mX4l@uj$_UJ!?Nta{D0il32v*#HqH40cgiE<@I(x14h~P$&38PKadd)RoI}w; z>=sT%?_(4HoM~BT>{DLrdFQU7&^N7CbzDI9X|MFy)m9|*J~(lvRdBe@{yesGeC8zF z=>2zuIP?wiOR43!fM|esSuC3Xr84tYt6Sw$XSp?HZ_>720EVBrrEPEu>4{K+$!5jc z2D@Sof301E()a_vcVySG$FVE5bF8Ctt^k(+aQ$aiQTV2oJ=JI*asr>$kZRl`_LTVD z=lV28daM*k|8~XFzukDewnc9ZUbHj2et+Tyc~rJ7_SP=f?}Ct8@CQpZ!Gi&V+B>rA z4~r4?@C|P->ok9=ZtuWp&V5)S+O@fno|jR`Q^DP?zOtBWQRtLkT*AK3{!#sjm`m;m z<Xz|lX!+i3+o>BL<vE5bttNcEqw`<}@FzFFq)~u;Q^LUUNe8u93}#;1O?}x|y&#`% z4S3rdpuZZ>m&9ssl-%5T)2Vss8XE87He^CYqCPaC^U{NcWVQ74Oz6C1e@;NQ<Fd9Q zz0L_aqA~m4@3K0p7dr{wiIUKG+vL|;iqeSi0pM-20%YkKLtfazIl{rK(?hW(G@j`> z-Xt#KfsDBQ(q3m&c2Rc3>^(z^b$;(A&t7^?cKD$+yVg{MA3A<;>yq+&L+36zC)@JA z8ca-jy;l!1-gafA*xxa;C`huuy`tk{EyEL`#o{kw;=1FLMtg2O)A-6pLlW^pu}P!3 zaLS)o@JDA?c6$HkeTy|{@I(>lE)nQDQN&4N3<#9F47_#m!Rt?xamf{GIbN$@cBjg= z_AQHnnd42(jh~k5P0fp+#%Znm_-Xmx)RFPiMtW06#ZMcRIBkqKZ*<{~b*CMk75mqi z)?I@Vp?l+}jpmr(35m1E6n^IAp8Rh+8N^v>?zFFe!55u&N}6v8ujl3CWysULO7Y2| z_~n6@v2iFfYs>B!QbeTrIzaONE)A4moT(Hf0+erF?i4iFPadh+CPG)nCy!2CwTSQd zWX>$aCl^dO^SA~3Cnf>#D_5-7MFClfqR=E#8$a|<fdtT%{2JX0<nglJzr9UMCm%L( zaO2>6v)4?_=9<dkhz4&`L#(AJ5t=l9@~BJxenLw|3*IChY&d*r>0yg@4qh-4nZlJH zd9k;5d1o}lT8k37XN)f$b?H!Rc-FrvdKf7i_`QQdjvivGv=^RLx4*YoTjYg{^%HS9 zVdDY~p;up;g@tF%*`OFAxmJZ0D&aMZJe$j-y{UwY=Lkf$8FPia<QxrNeO~H@bk(0c zuEM)dRTH7BTuA|XO2}G+pd-$qW_O+m{H*rzGl<KE!O{9D`BdcQ%Hv|Kd#;~iak73& zfzlGW%j0K`PApx-cl^vzFgxRQ^!$-`Ue5UQ@)qtR?2h{dhqB^R-F2sH5@%<dZ*_dA z2*uI;JzldPwGzxd9Jz+t=TRLQlHyO~*{U2mjBWXBLK^}j12q=u<cl{Dqb_G)2Tc)5 zkyDz05An{KrEHu6{*C*xeOE$5&Iv8v|E|EF6Q37aym}<IX=nJ};Y}@dVV3rui+X05 zJx;TyyS%F#C<T4wdyxWfL*di$+JfxT(T*6lde^9p6P{n(swVEurjflNxnX8yNe-17 z{PRXpb3_Eg?8r!-`QXmp%7>!|sq;CB*<7T!Ah-4Xy}YX=jt8%wuzB9t*yGRgou!NS z#|lWeua+w}5gJc+eqyl|)|)RGe%`rOtU@N%tC<!{g2&d}3KTz%%4{R1^V!wJbk=t% zTE~x!BEn5+GrI?KkJa>?#Fbg20nK9d%y$vr_pRkSeqX2lwURx4Em!emWv-JJS#Cax z`_8J)%DVKxsQyHwx5{5_ZIoTpqz>tIHBJ>F=4a*(UL9Yo)(7a-_N3EKLEHK(`k$HO zU8%8vn8UoK8cF<0+s0x$@+<Ag7iVeYR|;CQ*TiRX9sGxIlj_H|mb*xnC+&MlJbA(O zXZ1M~maE<+vttXnO>}QvIA`A@x$8maG>>>!sgJ_e^;7H(w!h?PIcOiey0vR~B>JMA zW6eqq2%4R^%BTzD_MACp>~l=^Tr;O{E4{0)pn9U@o{J(8^R)y1E}rKXCk;t9kKCR~ zG<N(&8ROSo$vN@qFA`hJ+Al#ceIp9#zAJTN(oNz02iz3Su0R&>WRN5*?+0v7%;a^S z*T-&;L>HYfE06P^ubIzp6u+WkgqPgHYzc=%Qk`urcb?qo*{=xKghF~ySi((<DUp~m zI(}}>D)|cH=jN`TlE=H5S@9|Ph!)wF@pDJT&#g8;XNN<Vl7yS4Q->HtbNw{Dp9Fpp z(H(9&iNx4~jf93iOYN+9{g&|Zc0MxM_=wpra+Mobzj+(H`pxl@mc(hqFSf;}Zy{=P z`WA2Ii(ZJEd<pV3W?x@33pdL%!b>b3FCLk<@>9w7WYxO(f-Yu9>?%Q!ghFbi9?sqA zt3Yd32QgpURxvIDg4bS@RYq`Gi<je{b^O+g1eoEC1J<1R2{+Z#%Y=6Sj0$7QAq>r% z{_G?>zGo*)-xywY4!{7KD4`>ygmR12<cFMkUa~nO@n}DhO$9%`=|~q$bI5MCq}Uy= z@QOy-^PYj**H#%?-@i(w4Gz&YdqEZFUa*ATdcUKRKy^G?9iuY`9jCNqj{gx%$?UNm z%7TW1&`sO--~swR+x2}~=<J|M|7{if97OUZ_>`z~YuWf$NPPtyMkn4G$dNL0L#ef^ zJTCX^1=N2&FaS_DyF_&CvHt~B@eqvtFCfcFg|YtyP{gs?t>fXV<L>LfUFYN%<_t%u zxEzfG65ZZTvm-AsMRa3Yp4qW?@cRG>e$u+lU#`Um%(WkSg~Wyz+WW2C4P9SDgjDFb zOVol`k%X1zgsB2?esJ}sFNCf9C3tY8f2VZgsOT?Jl~7*HXH%?*=k*R9`_9;6sF<O{ zu<SFyZ|-@AMNxkrFT7mmk2y&o4`DAMQ+HY7%+c$oNJAih{ghmN1XAYAK+3G2GRmb_ z>yNqPoe!O}94Ci8`TC!;lEgpb*Uf^JK>+bCcjd8G&S-?!6$I(oD@1R&`FI!%vEgxD zWKZ33aM&sGGS;02P+1NI+Lm5Wda1+$m)+1|s#cQsggxNCpxfT5zJF{BdW4N2>=*(h zu@GkFPk4I4H)q6lW<R0}Zfv-^?wX@2?=|H{xAtoOGTZzpn!gJXCWUpn6@<JU)8*|d zGnbhU12G?`0K<;gZ)4;q2XpnKg8u_a;w?aV=)zW5Ut)v>UAP)v{wKZ?rFrq`TZ8?( znYooc$FueeddCv)q18lTcTHIu2uBElm*seu;(7)haI8JdN(V2SBVLiV8D4T@M(%$i zCG}9v$RZBlXzL8gKYi<j$vNR=Iv49sRCph{2pdMQKZEMII7hGDd^FuM6&uaTqe=Bo z{|au;hnKe?v)s;I{WcbbxoqBPgNxy_9a$P$yi=~~aPuFO0-#`o={!Xt7!(pDl7d0E z@|oo6{_A>-V1<%0VqKN}G69he2C_MV-2VgyGqJMGWbiH+%-qV5C(Pt730-uT+y+*3 zfWH8LnY$ZEe0|7iXf+E6;?L_iha*LOp1<hz_C?oZN8JB8+i~5(e<`K^3ki)D{9k}B zkcWan@3%L4!C)I_caWaJsmK2U6#oSamT-l3FK@2Zm+kpa|9FaXblMFB?@ffUx1rKm zMRxaBCkwfy&3t9EuE~|U_LS&rrs5Ivi0{tl{OD-!jB?!-!+)a^Y^f9XY^_KBj-jw_ zdp$~j&5YBK!r|1lR!8dSS$F`&pubWA36$I2{Fj}p^=xz7KN$x1Sm&kgv9`^P7@#>9 z0NYC~3ijMn0UsF#h1Ro-Matgj<d!GaL@$DllQW~tTeOW09{jAs%`$`z0*fmyHrhXZ z>dTe~s&;)FxPkBVX&_@P`ovM`O&Ogi?ZFf$CZ8*-uttW)c5Y}a>^L;~J6O`UKYC7d z)`oYgU2m=VhrMyGJalWKvnUvClEeF_zs@utp6%)5KVkg%M{^T;Ly-#=x+RlX1Q=wN z>11)k^Mkf8vm%>4uRg@Zc&RUCB(`h#!lM$Q2j$T^1@UpkyaRgOcjUZ?L(q#mIMj@5 zfprV#)K}$E@-`NB;h##(2;r)UpV2KJ)CYm%NANAlnNX73|DG9Z7?K}*w`K9x2A0wE z`Gh*VsOGMc%O8gveY^ts&VtCNnSZ>`v%@;=MVQa7f7p9w3!t`XWtHY{?+Urru|Zgx z8X;=x&fA?DX1y!xn+jz82|Ti;nhHkpIpUPbdGV$K3Gc)*_s11m*HmyY`Gd(E#ow_l zbNL$07a51}M-CrS?A@3QEnXUmPaQ|2dXLFwUvn#kh}GHOtTh-@E@%DKO4a{j3v@-& zZ~0;_s}b8+#HaB26=~2k7^&p>mH51IW)CJdwuPz9jZZ0nH|R!MW_prqZ}XLZ0Ksc# z<|P2bZH{eb>w80V!QnKo-P`EZj;cTsOfx$^rN>4^Du?Lp2U{5$?~o*KU?6kjWjvxH zc$)K-PH_f6sYC4W>c3_iYojT$O3l%fp`~fbi?sT;o7t3d$Y2db#FWR+8fQx1A+NZg zT$l4RgVKUU4TlX5H&qfyMmwDQQ%mo3xRx}MjuC~rO}bbu6JcCRi?hu0JQNQLAI*hX z#q_j>^3fH4)DmZ(ZK^A%HcxP>60Roq26ELBpLg-e`?AG;Jx~3#n{D<FMXJmX_~bxG zRThtfZX`>;xk|Fi95+NyR|-T^NV3hTNtG!fAu(lFq>_Tw=6|}ZP$B(C$)29VPOm-D zR3KA$)2;|#FY=|okLj;DnIee_6kN07Ra;H!oi3Mj_h~d0JU}s87}w0-EK{iB6ZZgq z)5bT9zU)BijUfq}b10wBz31TVwT_=Zdfq#+$85J*bq8C(nm3`k!p=>*h+cZfFBvgA zNn~1#e3tqANI{INp&5HN02b~d<`qgnTN*c+iE+a$JzT3)Ffo|zT!_beB?3qy=5jmv z99`8r|6Eg}LPA-4VW$s-00a&g4hSbw%mKmM8~~v?3%J{!zNJPw?UZXrhp#%Eh^6FE z{xOd;bG0s9gdg6+Yn$6@a>5U{@PCa36i294%y$%`strHX+EdV6z472YwZ;48rMYnk zPDm_gh_&5`Gq!mRU65Kd{P5|6s8WTPsWlIC>mW@=%!qd^sG7h~0VkOlTvTL41<~X* z^KFes+(pN+mNAhE23O0PY(DviuH4SG1l(?hQf%o671F?M|85ffM_C%5Ix5zZOF6xE zRII%VILFf)wr}rRe7S#gX1pNPNK<EZc^}69zAJU6W;7XWSx?Tfry^!eaY6h%kaX*M zZN6~PCdWutaRF6)Y8UO7Ydpz!xnznTeYyrb-Udl@xOnk=dq6APyjGH_0cvp>wW*A| zl_BA?(HsHxAg*%$t26g3`lu(leAsR}NR)QdJP@NfnsQ2ZmEXsD?W6F}k=49)PK4*9 zZ#rjZPsOUy>%OLUm#WR17C*T*q0(&R7xS0}&5EZstfSX9bEHy*w8@&Wp1LVceguy( z+G6%R<^k?dY@HxpD?#MV@AfY4LMSyB)WjdKhZW4X-f~T7f|M&aQ&@upKK4t1K1Hi4 z@#2Ii-vrO#Uuh(dWw+hyG{Y&YPOZnyiN{*=-WI<_mFR-;09F;J(0U#ySmauela4Nm z8B_WCBD<jTv&QH9moy@B*B5o!g~pw#@H1B`v)x=vvoV9GFU2uUf6*ab@M-pg!UYs~ zqBs;El)Ucl0Wsvb#O;1LOsLavbE~eQY3ULyAWge_8({Ba9EjnE&d3I@HQuyq#*A&- z(F*Q*!p*Oe6S1f=hpBr2ZpF~mW6WGe%r^_<N@ibSDjdLtNejc55nc&DGh#N+;z2lG zfAgQSJH~m~4i6k%ea=!L`-Z+jAb;St0y6U?3zylxEM{;4-UmgP9$|%X$BVBS!|+PE zv7h`>E{^dwE^TZ5M-KXPBsozQUq5!)4X0kCSo486^)fQxRBq1E`K5Cvr#SV~HEB)_ zukFpLC-ZV}|E>q*)cw`*K%DxyqXBX174K$n>IqBW)OU4csNdYYB3{Q3p@TAVixD@9 zrwcbfsJ4o_!I2nD41qsZYwDr2obXpZNV~ei{H0A1@nW+^Fz|^Ox3Qp+t7~}jPM4&A zOp2JmocwjSB(*z!?zFitiHRZH^;0Y-Y;Vo3A7VDXX%lPLPq9qk5+7A!ySZK!U}qS> z_CvqL;pKnXL8@EW%szkPJA(yQ+%dq^XA!IuTPf>7V1e@2=n!{97sSsi%c9`7c9}c= zkF?H5tOI0&_|>c<MIz{0m42uV78Uo$^ovRG;_-yV&uYbQu2s?ov;8%jGs}yNGZ!&( zEjTk>mZ$kJOe#(*<DV+;l5Y3#k*U=j%L^J-vCW?)u)`AZhA}MWEJ^WsM@iN4+LFV= z15B(~X!CK}=;Kroh~eh9x@fgXyj|t6S&k4^1R@6qm9@d-fLzV)FZwwp7ciH58w3pV zFF^u<&RN*R4SsI!60;uuvvaWW(DA+|R28r764r*9Au0iYNo@3`okQo=*U4x%Pf9?T zQ1X3(11Z;csY=f!pic!PhMV`>{am(-6a?3H(?H|8JbadUb5DD~m${Ua9+4D6nZsW* zQ=d$%7yU&vHfGU_{wBBq=c|IFKU&k8UoMcH@CnIn=I1JuL3{ZFPivqR_}h%ziQZaI zNN@C6F11n~NC9&pKvsWwnx$qV!YLB>m78-m+s?};tmdNB?R=AG%1JzB5p)!ey-r#p zRJ5vgaeiJR^yI|va?qcOvrMfUb)A*UX0j8OjSf%6qF~+!aEVs0Fj;+Oc?|Be0g#6p zR@&`J&!}QO<#hx{hch)aONagxMThdrhMP}TR=ZgQj5WzZ{hTUg3#>8HT2rAZ`gFLL zavQJ7v-7DicQa5of#Wq~Ss0z5qKfuvB@rNdYBt7eyOTe_PU}D3-3a>IgxP@veS(a% zpsz{``n?}d3;M$z?=9%d?ir}-0R{ch>UbbQ&vu!BAVL3gga`!gRI&paIM$CC0#a3` zhMWou8h%Dh0tQA(+k{GUh1fZ*P%Zc?gK9IczDlZyw??|d<gVncPI)L!-lc6qbno!P zMS~)y^%dKHji62Ox$#MZG#oQb5{=GSP%1!pr59=*g9V<}nqWCAMK>Z8nzu8qVsTQq z>5~s_gXN~uAA!{k9`Qv7vV>M^eI4ilQ2;f4VZvvXpYto_w3|z*hD1^8$>swbv^7i( z(dyuK=~okiI`A#pW&!pc>Q$HrX@q%2D$U*gms!1w_eC@GzJ2WI>-S(PH60fwA~LZ? zxUovGa<K5YYz_h971NRB8b5^i7`fR-)PI38bMlM5m6^N5W%Lni$w@@E(aD`kNYD2! zp`qQxNX-Q19i1ej>zLt!M}{nF80iD!X<99gy_K!ZRt&yDX|VWFhGJRFyxfHLcbG(D z;U>-2o6?OYw}dq2=?$k;lx5PI*nCR^FX!#EZ-W1hA&)n8bGeM*-flW!NXcQ5X%+u9 znqBv6pMxE1pCTToM4@D!HP=U5Q~VLJF#z;(oFsbWWjo*NNKQmhP0TM<V3{3{EAb0g z;$o$@Q^w5G7o&99^Ii4~5;Fld?*m(?+`Ov%41i7jiUrs-uT7~Kn6Y&-B}>g{H4C9f z61mov=exA96%f=#%=JBZR|9GhM9kZ6?X;p(o6<w+kGWcd#nkud^M(C=B-PQQEXIIZ z>FY@VpEbCp@I!hkPb@1aM$=$Cjb%JB3+&7=`D|pcT5YUK61443nrk;dar`dW^AKR7 zG*rgpx@PAi(%kZ?TSJ)%ZkSbGXQHW~h^Aw$-Po7;G%AZls@xbA!4Sp~*l-k+Zk(I3 zpOSm;`jFlT&l0eQncSBwj2bCB{~hYS4r?=O3k9myBp;(JAEk+0xu>#3lL9ldbJK>P ztk5rIidE*1RKF<8y!@ek;fWzfX>*Ch#YP&5YOYr^*RfCG=B`nDz^HLNM>oUE8~J4~ zk*K0%l{aoV4VJGDEzwwM<ZK#&>}q%qslq%24~qQ(RE-(dqRuQ6cZ8{1?hBgZDMZEL z>YZM!LnAUt9eOWMXluN|wia&wmD4+;g<J@L*;x)LT&<dt(AkMePC~tt@1Q_xUwr3V z+9I}znlxVJ?d@G0!dU=&@uEik;dsDd!$`#pvvH?=0a=K*AZs)W#rq)p%#MPKvMBMV zekH2>62j#-EMWQ|@H;Qi1ON*V_%$jNrV-dk^Q8j&Nus(obB~IHzrgSu9!zWiLUt1q z8P`I_wID(`hK$V=94d}{tyZ<;c8qSO5s6Bg7*l|K$eD3hq7ed3G!@iP9XhR%$EF-- zkgRjFP_mJVn%%*g#R_gt??s<A&r>2}dK0O^^lCLN$V-Y{qo#Kb4nd~(R~65gUg5qe zy!BmGHhK-+UTqi7gL0--Yd(U-oj;+n!rX8O;WfT^aKf+3v|70&d9_|&X+mq;#Lsqf zb1MIKmmjQ!cewn;q-F}V+vFpb?w8YN(3kC#8g#M1ni4S65+Tckg>7Y`G;`4Lj8fpU z5l2lk)nJ=>O5OFM-a}o3)&rLlc;EuxZg~MR%QhQZ*JZ_{6tH4|D}PKib_$EhBAAfQ zwa!@AaJiQqe)!Bm<jCP-_GtGVcC-0_F=apPHHKM$3cGZan(HKJoPTEQ^Y}>@Q7>Em zx;fz+Ru6`EFl<iUU?0j$mWWo7Ik2OIj96RVxPHdqM6{~JL?@Rz6Zv*{at0Nyh8Y_R zcd$9@o#b8C9e>REk^Z*9qL}8&DORgH;+u6-1jxJfS&+l1-_lR=$6wvT0K?6j^!w_K z5HCQ{21pHl49vvX>ReN#DFH^!w)?PPw&qTx2M2}ZeS7m#yXT!+KNpgfNdmXX(F&@} zkd5}EhHLqedS-w96zrr@6&FI|@ss>7Y_@KoHVtqUNlf+fJbfGRlkpX0w6QM)k%)Uq z%2yIIcx23Uj(c5{Z9XQ!mzre1C$S(AE#Wz+N0Y6IPZ~qcYvf4GD(|AKq6mK*V=X*X zOW>{8=BLldf6Qa_yhiw2+e#s@*WTwSsqb{TG6W>Ganf`8Xc}CqLPBOcIG7f17}rxe z+FVE?z%3>mJNbb&pTIb{57e05lfd}TA%R>+m|EJS^jMr2=h(y=#gbXpQmcv0@0MGv zkq7Axr3+c#*v*3X+^4a=mh9A{aATEqX0EvoTA{6SaCdr+Y1Xd*A+@AWvj~xyVpfTL zftS->9(~UKnr42cWT*BhNPx+i^B^+oy2aNzdaf*~OS-uWc2a4$`3HP>Wg|K0BF!Aa zyrFfl=3})r!mh*3Q&nQdIC`38*3ouT3q^~=O=Fc#Vr>5C?C|nK`2}9472=*{z_Tg? z7G0y^G;+_!+ML+>;g$tz$Bf;cn7C3s@&H%`#T#Q?p-T>9_mt)S8sexYbj=G*c>2;j zTCAE;X@=gc%RzE^r=BW>uOxCG=2ihdGxQ6Ll1O&q^pID)H&OrH^&bdUmI4I6!t#PB zc1VF~mW&b+0DX&tY4KW12vuZQLf{#-QGE1u{+%k0`4Xbx8=nmz8k`s?+<|n6A|uer z9A>J#h27q9{H`&NK?%@>;A6*CYtCp((Z<?O>3m8KcCf?V1Nse(j4uU)xAP;`gGBj_ zQlX$SVO!j1Dd;r)3MfbtHiLrZiQN$`zT(pGjIB7$oaMxT#7=SSa-nyM+TO_K&h<{e zciRJsybSe#h{WV>(N6JdYSfz1PxbU{FB(ZyCfZgNOqkV?ui=`nkikOHvfjeF%83&V z&ioSrQelPHEO6e)e>INHuV>E!@`;Mo18d-33KvSN%kXe-!Y8&$4DW568$YW6$@(kF zq=8U<F&UbfuKAWE=#T6f+7Tn!XK=>plrOs=1Z!cZ<|@t?{?euo^@<ByVSKkl$r5U# zWVv}{os;xud;`JdC?XrR8R*#pRm8BCW+y7NF(Sy6#~yDJ=)z40P$AJ&a3gC$ggZdx zfAKXOtAMbLZ1LM}?vSv!O0_H`tJzf0Dyb81a*x!Qc`C51U>S*4jlY8?8U36Hs#2Lb z-8MYZs`9f{(pQkA{?+u=kERKgq&xLb+_bI`c&zt#EPAaDqKCpdMC39%p7pxKz?uO= z%n&uxZr((AQ9VkRfp%r>lh5Q$YfHA`=%lkuTfi;Q;4cEas)a)e0Qf}iU!^R>od6{E z-+fRZDywjiH;nR)ZWpVDT`}k~8ZLR7{MxDH$YG}BaIso`%#K$=bBToJDLe46jRlR) zVb**!zg6D!JPAel%1Tp#+`e{$xXSup9Iotirv8R`NdJ+w^eK$#V~9p-A^B>vj)o#V z*INv^dNRFQ978+PYpugsxx?8F_*9Urw!u49%*WZ$KqIPq5mWJOee~O9@Sw`{#$UBY z;^WXQD|0AU=(fYiYs|#m>1u-aTIsgX;X4C;HKNUl@(Q*k2My_qKBrm+`W0vcUyDE+ zT@)uKJ}3+pie#fK)iq-O0C$dp<W=a(_7`d4KV0%@q5`D7OnGfu3SXAD%L}T)&6^KI zRs88%@OC8)hnw5@?Xyh1M4q(G4d!GDSU#yXXOSw3NHi5}6EcMx{;M+UUhl<w-8b5X zYJtL0RB>GAZSb*by4DDrGVe5(Ii?F4pUHmOIDq|X9V(x;Z9DdRQzd;=%07wqvrnFd zQZn&Z4gWa`q=zL;vlkYBL+L_^ss0=oQ$y{hiXIEa=V=bKCf0li3=|Tq<T!AgRe6M` zw2B-^#5PTaK^1#DS)XAH_6Q{<t7MX*10^PPQvzglB_`X&!XbB>_^o;DD0|JG<Fv#0 z0ZP`d2Haga;pYAITMEcbXb#G19^wjIMS;}f#<nA@rRB8T+$6aoQxIRHsijn;=M@OT zZO$^JYV$)^Vix<bov^g!p#M>t(?u0z5w#RyCXotgz#<;iVppxoamN%_;vgla0aq>B zFOtizExCu{V<epdhy@OtV(;`$3#0TNn^ux)_SmemyJ@xfK?`@gX-5@c^fjKg#w#p2 zLi~y_HETN@WRMoj<mVL3(DRp!y4mK+73`5^Wz3Aj?X_kYZ&D7c&G*URLl&(axcMD* zB&~(cYV!_6tigMmNYr8(jZf+VHxo1_s`$FYL>1d$_EV}`cGM>8zJ~oF1&gKKxEyUk zZSc9*T<`>ZDYd5lKuTqpTJ?J^URb>1`Mf;Bx4Do?O`w5DdbVqLxP8sTl0Z)Mh{WXW zpmQy66{h1ZowWuiFy8|O1e;`;1}m^+NH0uR^vB;QN@}<C<$QzRQxRtC=U2J>6a6N- z%mkMo=uQ(|{(hupAfV}FxdNBD?tiHwoo<r3PK&PlW+D=bA4kVqp+V3y%ba}~w+-Q# z0zFtZPfBTU=wasJ=D+_R9D(<mlbOO^aZ(qm&?Ip;mLJp9Mbww&HuE!4H(G{RK|;(6 zJ-MRdblmP*Hv}E=%WM_0KG6$Y@c^%LT9si=(Ks?(^5171jI!LURX*h5{5sjm6N2$b z(VUv$pcL`~$49m8bEgww5$y%|gR5q6opx|oNg$6IQZ!hR_!$iAxfZ%5H;98sGwolL zW2wX}p@Tkw5O+DJT&>CNGw#cg^E6lrX$>IRgtdrwX1CNc)Kl?oBGhaZ4aA!UQmDW3 zh1WucMEmnqtxDmNk6_|Rk!DOXDl*TFg`2<Ue8;l@9iEPy2}?rwJHySzN=8gszLzw+ zEaaVPHX>z2-|z3@4uR`Vf_-~=h^ozRDUgAkC2Qrp+X&izu9}Sn)mbZb--*5XBwW%K zjF&U|@f=1_>x9{SI8j4R)Y4ePv3%md-JSk0%@y|jw}Os?iB#|-fQR~UXM$bhqg0;# zf5e37*7g%>&M4j2;MyPxQ;1cU^{nRrz|!Q+PLr5L^bWtPW9w{kdapj*e1%FtkG|8$ z`;dK#&<(kas!;OGxh1~s9WTJk2m_m@=&u&O7G=&Z-|$Gv_Bu=rX4qc)yAG<Y?KO-a z*7nL$Dz?{4k27kik=FKFuU``3c87{|XM0t}k2Bp820+*sFP}36<(n6k4#8NJp~~s0 zzAsFxdf*L*+8A!l5n5!O0F-Shdu%8dd_bR3f-bShuGgV-N|v)((}jc?Oa*drIGZCM zr6+*sZ8!okXMV`fl+o5mS6LnVAkgQiRGZlgfY6M*x_E#XAn_U+DIM7z^fDw%BYKZy zuQS|UTV+W(!*HuMJFGB~0RCKGPEm36(ft?+?dB!Y=_jBMaTuc`hKi2a3G8sY2Gg9S z2V`BSgZY!1(_FNI2!(-J->i(wWY9~HlqNq}o+1yQCWr&`sYpEQZ#h>7rgqb@Qhf05 zt_%pG=|H6jLmDR1g8r_zc7i;X;3TCD`6MW0V28Bvz?d~N&~`BOK$6qN64w`uMrO_^ z17YYv*JHs1n5r!^Gx44{L%<pkFY^W|ebyiiz)f@&lM{KhAL08$Z<FwI-xYfSyG7C! z=I~#Qx%>C_(ildl5QiVBpq2NRI!PL=V|BuJyP2+38KRvDVxSox(5rTO>cMtM&gA%} ztL%%6V*m+8$09n02k-4(Uwm&WYG;`Fs#>OiERMJMhzMawQERjVpY?hIUA*gyqklkh z{Ax@-%S<RQ#HNvz3eVw5SBY*A5%77Z+^^p>7YRCTHinH!r!d-l4#h3=Mx4l>6>E@( zW3qlJyj1`dxs-#-+`nor;<Cg<YgdBf!dFBmzH8Uphi3_$4+Q*u`h^U)>R|?iFa}-B z-h9f>6vI`i9~h2!D3xk6H$G$;p^6Gpco>v<3TYzVl7}SaB@y@4njb&poS|+xuQtmi zcr1FacLK?e*7&(#!hRo#SPK#;nLd;RnC<ODsc^OBF4LMlEq?Jh=S)3X85w+alV_pl zqPAfUT>9Xy*r#z3kIxN0rTRo_-6V?`Mu0noe+NE(Nu@)9hK<N=<ik4n>&7{f7dxAW zBsMV*)1G~TaDBhNiLY{A{h#1*4nI7F9nHf9TNF|n!Y@3?s?*l_Qf*#;fUE}!G#2ZS zt^X0?vtAB~YRUD_;eYSU9F$g-z{;#P|4@=fD-5}s8X4y;tmW#@5K+Ik2ANh}_EEid z(;<P!&>^N`wjU)-Bvh;nX$-_X?G<ivLAQupADR#~^y8KWxoK-8_PNP}FU|@`=(oUD zU6S^z11<ZM2kl^MSOhg>Cwk2Le+hK&0-DU!z4QIyFK+Nv@Q<&tPN;H(pJYlcvfkPs z56JDz*qo4(x4zi#lQ~Gl9^s^X;7Z$AxXJE+!d}%}pGh13G7ukc0ofiu0b}J&WQBUs zs8VvQF6eX1O&sHHr<<*`Z+<Vif}F6Ts+#dZ8NNw9kHN*(I+NP-i}i}+x(Y56FrCUH z`Bk-B`So2_)^2!a$}g=^R=zvhaAM3~)(;EX4>jB6MtWq_`B3~4A(d!1Z%EiJD|lVR zB~ozW5s~KCV@|~i4){BMITN9d)3^6XK7R$h3+O4)7;BI@{TlrN6>z$Z2Bnm;oiJf> z4r-=~hnpMUrAM}OP!nmq-29LcNDDWEUfU{8^G$<lGntG`<???R0=TI*cjgE0R#?07 zEV&FJSme%(ZZk>~N^9i@ivHTob}N5~i80;!O3C_N;=XqCic72(2+T!}WK))fS?Fd; zt&G_+1;u2Zu36e`aQH$|^LEnQ1_J?!)U1x3Yjy0W_eAPFA8uOBU+-!2&b=Hf0_=kj zx<l_{s@U$glf`|J8q_rV(gGxTw<c7s#S=UG+r36#<VJshKe=vmkjwU+1mAGkpThSU zaBMyZ;*?k-YJ}k;&1|Hx#U(_-pd%vW^ic*xB*WzH6M3zRQCckGN>MCutDs{D0Evsc z14erV!7-cxN6AyPs+5b8mn|%4da`~Ns}Fcr&^Z5XUb~wg+L9wjXE{H-N%^!`v$!E= z5xw%Jq0$7&6Qq1h2~C)UU#5`6L{q^u6a?#)m|<?k72;%p-5#$=0AzVySj0?@Bp+=8 z)T-0VxKtG(qsFmiIqUwsujf#(U2-~L>C#@>hil(yA1hTX;NI{O--JU0DW=mt{>~fk zw`HBbGpWOT|Np{s@3%7G8RAD8o>y9Uc5Wf9FFao(5qLJF;aQGDB?F$nUX}sRl}@@? zcwUrsdK#c*K1A(GRAUyYT!!1f$wAZ?k~3@%PDsvmE&B3MF+3@Kt`9t?!79pj{$nSu zSmXO^bLGDM=gP}WtfiQQW?^ThH~BO85Y)d2*F$$!0{Z2Sa6hY(<BnnS&bFhv<%FGu zU2uZ0Td*ugt(B(-WDw=f^r>c<Z|RPm1o@}^j!}`Mc%b=yPAAZ4b&B|JRsu8g%5-eD zI%U+;VmW6$EZr}lOziTUP`LS0SACXw6atfH^7~4tqn=gTFyPJJOv&Hc;+8r&y~#8k zPP)kdSS#ApmcaWi%~ybvf3^@=twf|WV~PZj+h`thMST(TxGVa<B+|TqSDoDB=w39A zWR}d3hWoS+Br7*+1Su;wtb%K$#wKJ&qwdl|@dZeLp*&o&fyC;>S%{7H*iKv+$G!=L zU+zncgZbf2mc*##0s$n$-b#?i_7*2oo3oT4xJdut5n+V^24dvhH^`HRRm+Fm9vrD* z3g#8`6M2U!aH0!iDfex;xrZ#ZZvz*q&Cwz+f$&zP2Qs1INIq)@ln2ZHWXt*cS6@KC zRmmTH3{>Zh@`)_47Fm#;Rp+ZazMY*i950YZpv^Shl`<U5l%m%HUKV)$P|CuMlECbr zYQjFPVIU5ZXqaTnH5J?{alp=Bsk}Khc+c*xJcIsjA=YmG<fL2UMOhiz62LYOUT;+; z?LJ(tGJ#ONx0eVw%Qoypzy+=;Uj!Th08xpG`pMI2f3)!P!@s@&em*geQhBEeTJ#Jg z0=n*@OuN|xE`i1XBA`5Z{E^K03v9u6Wt_7-`p7~$U<;mV&b?bLvkGc&$Ob?>M?o6^ zu~s$Q_=^*MOx;J|q}E17umo2T$Rn-V4~!@mqHJKqF|X069~kjR#;kChuPTl4Ih!(< zU#LntCOF4yt27UbO1a7<hax%^+cG>pZ%iWpYV}VfM7g3MPCyqeO^myro~z-PD(;G# zuyNiV<N0ahA!-TN+i``9hd4+TUF>2acWL2Ah>6e$f*=Th&;th_DO>!MAxL@n&Ohu6 zubImvbm5}-eA#u$KV9&}(7g((VN5CLYICRDS=-%r(vp8{P_ooP`CKYkD9=>Q6kMjd zU)I)c-7?7WKx}n)>|`FjR6K!r!n}G%hJoxnQVJueHXF%+wdUV$>7>!;fxD1_+{FjH zWgJI+XOy##&%C|2ef(p}7Bcos>-QR5lfA9qS(2(EHlZTZt8}a~GOXX<GCB%osHIK` zuaHlnXd9y86rE;Nk#O_iSE-y*ysOPeNFu9v?>y<_o{lL4wKF2!j`oIJJCAPe-OgP> zI~VU|ujfhm_7_Xk;SAVju69B%aH1~}&f3lSq-H3lO?FcaDV=;?v1J2H3zH+5mM-6R z!#PUBvDRy~jEy$4^baJonKkM}D*L2ui895)57Hn&BYHu&IroQHa9M5~uOcGE_d4J! zg}An#LY!8H)n{_mE3~AKd;AYA>d9MzAM*G8iXYDQFN9iT^vksIx1n^or*HnhaVt$d zR<MYfIrINw+`9GJdam})$~C)0ac8B>e@WI3C21`af4iC@M9hC}Z8Zr*tZ4CuZnL)& zl>yZEQN<0WL&7d&r!1tIVA{W2h<2>CS8U+CwTfgFNBAoZsZmB(H=;=EgP+);Q}<Eq znSGgw+fP&6My5@_H@~Y=20hoAWhI&lHo}S#pI7*!ahol2SYR7u=$(rwtq~E?ZdJEU zOg)OJt{MA=yE#HLa$cp>I^<duKbj+#`&N6W`q(OooS~Dx&Nzf~=VN@F5d?<&^D3#X z?Y6`iK3UQGtw)dDW=rjMJ@-wGUe@^%S0|-ab^1<^UIzLFD%5T!y76uiULmXj)+d?g z-+6+2cz%6|g_R9gw`RFL72t8!=|j#n!RlbD)~e=J67uFlR0O*-XAXZ(VhY0!rSKV2 zC0@Oa93fot%9XU)&J`2CU;z3bpO3k(EOReK!ABM7R9b|;H}aR|PDWXj3o=IBXNQe5 zUJ_JJqv~FMkcHw^sKY<e=KCh1N^Lij)I4)`M=GnWgCe}F`f*a1+3{%RW&B*cQ_oV= z9b&hhzD6wwO5-&Lao3~xj{P54-NJ5}9ja+o7p@iNJWs!n6>@Im#E*|p3MD`KF(W65 z(PaSCJG~28!vq0fDJmd*D0Nbfw^|F+o9M^E^z3KSFr7zghNN3^qX-?<+WeRdK&2p$ zS!UCF8m+@Z2^r3j`W<}%J7>;Jm%L~<hmol1G;d#}4YrkfT7b7y>>S#%gFVq>GzU0E zbATWiV55xwGc<?P1QaCUow1FnU>(q=3l4t?Vc}j)sW9U+#`Q<iDMScdxasuEEQo5o z(+kW@jZ4b1Naz=mG!%;0ZsSiNe|~n0OJ$J30dvi1n3?Zqr1w;Vqf_T8r`?=Hdoh!% z3EN9m{AnWcTI02$SW8Z_=tm62%`&!5n`@<s21P+Hf(nw?xK&>u;NYL~8G)VuPWIzo zM&|h?k#*InD-X(4i(^;{eZT>#me8@?W1hz-ugye$$MArgdymgd;%DWmyiNPK*Er{x zdl^3DXOk+-@A<{KJXGSbPw|&iIpo>LFRyFmrkC)st>Noh61k--S#+~r*kTdejQr_? zTtz_$OUyR;>$=pmQ!{Ja&CIHpnLFq>Ppf+GnbDdyDqOzyC;S;R$qB!;_GQz_s->Mc z7#`U#c$kCyyss-y8q(KEumu>Q*_$7g!BM|C=J&sM(9ki@3UfWbAQ)f)6jlPytnsq; zrnil4u^+!_8Qk`zAkk<caqXr3Au%A1fr3<``uaW)VD>h>f|n^8M(kwZ{-qB!CV8_4 z?k;_(Ft70oILu+#v6i7<21}n@!r1(kT4Dptd8a1Mw1+WR&FoDetoPup-2Cx3{=P#9 z;L!z_3?BnPd*1?blEfA3BzHita<Qhra+h`-a+06R*9_yi^N{z^7IpibhurCSRq+q4 zpALcjXK(<dX*_o~+1Lk%TSimm_R(oDVBvP5m*J;5H8^|ppmLnIZ7I$7iGH{T2i$f@ zIWOFl0Ml0VU8+&gNrgG5jIKGBXl?H=eJt^oUn6NV?pToiAsP%;Nfw7C<LLK`1ms>n zuyk8xF4OS+1t1j9PHu}@ateX~tVBtEuAwt~ySCaSr+5075Qu@?Ed?+71rdfs!*l`4 zTGJ$1;38q>nE!o}`_kYeRAnL!z#K)Y*Sio_ClfCe?s`EwI9&4`<+Pguwb$#ijU`ha zb`Y=vLubtF)cY?BUvZP$?L6>;oT7_0!%cdH=M=pz#OXlC{>9KO;<H9X8wC371QT|z zEOKK&vxhTwB1pCPz@DY%D!4r$*30j9+hgT&R<kJ<et0TdWFhJT5_CVd$fgd`+yNeU z<=}lWQzbg=)hAHu$vFg~p!^DK^4+9$3SWIV;wG9x0QFWX_EoB*P$L#*Nd<nH)UpRo zNP*45Z#S@eZLXt%Ow`^f`4FJC`(e(!eIaU>YNi9CwpKaq=5)2!8?`@ldlJ=lXcKmi z+KIvN6!M{+nL*yf8%A>2*?IZ{jO}2hvLlv<Tp&-`Y|m*)vm3ZC=qt_oFM?#o_D51P zG?}L7ojb7HjC1%)?V8+wVSg{+AOaB(fb1M(gDOtlI7Ma9mo&UM@S1Vh^#bvM@Of4a z`k2QpVx`A1-bi5^-q7XWqI-T#OI)6p2rc2NBuK^ilfvdsO+{+!6|g#9gjfwnI3Vh( z`nNR_wdrnO5tgVoz@CV5(3UKOHKhQs8$@KFM}*HaDPH4}Jbq3yS0P_)teI*2Ho`9O zD55J>N%B~Le_vl|fM4({WtfSiHg8Xsoag4_0N_nqF@~*Yr-qtWH6O=m)<5@?d6adO zK0<B6uKpd(;Y5BFTB+`74mS_uGq}QLpWtN^-PJrzhh}ok<e&FQH`Vzs#q3Fo{xdKK zAYax}CK$$&VDXAE0unW=<@#<KssSp*s%<@42o|fQn)8KGB)HRbFZd<D+$>J|54-I} zClh?ZV%zf3QVd$Gu511Y!hGM&yj*kaHNl-R@|3qaWZGRpttNlRixzHv<NFL(y8HcP z1E2C}@!h%<Zd}ETJbunGN3Nj&)WkV*vrtVi2>~s6o4jy#+8Jbgqa(%?#V|AqE3{AN zyBqS&cU(7BI$?GY8h54n!P>38Naz4cr~~Qb6N1s@`_=l6ZrN&?C5|e$02({8kQ<pK zZc1=ivhE!?*+Ti07=C9Bqxd2*{QLj4)9oXMmnqeu^?WsFa*}f(MCs<aH{^*F>?Y$N zE?|_X*yK%>huZEV5BFXX$xHdwIuDx>vLv@6rA~00eF!x$Gm?fc8YG*l!rXX|MX9w* zI)Sx}+7D5i71-Zy{^g)woBUUGFa|Za`!Qtpqmh_<XhBp^VOHO*o}Br1mEY5Ash*mG zo|@>%a%;*Uvyh(LjSN1cmz6I4waR=)9h_KGsh0x&{7TwFJVXsDs-l`HH9w<E6eu2C zP-|~Lma}A<8BW29<b7K7<qiYTWf(!uH!w-p?o@k&Fe;MoR8k@!PZJXRp<{+0dfF?R zgCJAD<}6+mLn9?|>fVdr&SGFo&&u0#wNK%qVX}0JuR8qDqT{|jId9R*EkBv8J11Yp z;p_ZidtOh&Zg*R5vE)i};;U{I)Q5U!MNZ+PXaU0?D*W+Zsi4byOJQV^-E=8+Dq=XX zV+^FMOJb92`O@U9b(orAjF(L$n@^a~8E*bF1_Jh7aq<8psT16-Z`&x&@IzCwmyXzT zb@E8(ly-WNg^vynNX3BRWhIL8oQY`fh-<o9gC<PI+zzm;6q#d2ZB!J4G!u!Cg@U4$ z?oIl_?sUTKDgmM0oJS%hWuV(oh9-IJ+6<R9sI0%1qCFz6<(pip0Gwi73+69M8GcE5 zSN_8)>iCNpzWo;&3_rR3-!S}r*D>sVde^U&>KMLO%^8heGp<ekR9lu%oE3*op|%&= zbSJpb!&*kAsT0@NU+XKG9el7FY16}CHU>Ubf3IH%HzVl>s*%y8Q`S%Y#wwh^`vZiJ z?S0+SoaCv_DXo~^*g9XG5ANRLpejvB3?P33Z*3Lp13pf@<`r(PP(FfsQNtlwVGfY8 ze_mS<JgDPsh?v1FpCGYXD`$DZtaXzP$?_&oi%%Mvm?U4=wD{y{$Sf2V-KB9RN-w8G z&trVadtYLZc1-HuQgC_<#8WP33?t`j4A1YfW2oV!Sb>XsUndi9!UU_#ON^9WswT8u zdKlf;cs#DeOUSuPH0GlC<Q#L$&wwMC2*rmcE9Y25XhT1`z9@&u^vJi?Fqq_5))y&+ zD9|V#bJL0juRe^m+C=?PyU`@@apan=1PuxwX-(onn(^r%k{CB76_3)}^$s#&xIXbH zyM;})xrUBT`Q0so%|o990GQRAoX54u`wGzX<IBC|+zXh{896|OL&uYIdd|ozGY7w_ zyI<^0j<e-BYctg%H6KLdsIl9gYs`M?Iq!b;JW)N%`~fR&<593YO0?=DXACG5a)cOe zE{o|o5Fuz9YDs{eP)6S?wWvGazO(FKQ3I}RMr<!SLLvlo8Z}ohBmWhz$U0mVSoDD= z<e2a?go}{D*0y{YAVGraB~pESND?*QBaCYs{aFZ!TY_sCD;lr)t7@Nk>mRMIQ)M=6 zN-s!1BP-K1cvxOQDN1qG@wYx$qA=lZzgbF1ZiV^HOM!#7oI-&y<|FGrAquc{za#no zL~5>|>_|HZ6#AQFmA_f+-W^;p-qH670e$b6sVOfjxE?r(#P{>;9G3`eX)3>h_WnyM z7Yu~4|Asl-+Fl33kfR9XfH11fkC)m3Re7ajM3h&{ZEA0PsTGwp=%<1iUO_fMBh}D| zoRq$GSZ)4Hx?9d3)K_Xbdl>4c+6odgDd0hEVbBaR_>(xS)G#J1+;m+Hooq1glHe7M zv9CTfUE$I?)l6y;%TE5-X(Z0lVhQ$@7Oo)pCOyf3HGd`AKXZh8^%=qm8Uj+-T;Hed zeRkJ20=L?{4EF&5dv?i;e^h<sbSS8!|5$AK+r+IJ&p(Iu-UD4ghJ#p4Uoe~Rq-YY0 za(^|cnIOB;?L?HDca@(3i|<zewt@OLM+SYj-q$;TGP`%%OAe!LVbw%=eoa6_ybA3j z)MuNyq)(5XGXq7*u0f8R?A@!-l+LqMbLIBpozYA2rWP=j=MhRfibgI%n1!3_*k857 zh2i5|ZFdWeE#9f6vwnp2dU0=6cQQe$CAhgO{Gt7Ek4*Sgn^VZhgwOYVFP~Wp!`bz@ z6DYBgnnNhbXH|S&x6`o>b|n-5xC7B3K2)CvsLue986>r@6Ur$=EHK@lp>FD!nE5Ay zk#4yt)}8PZIDaV-nQ=z#aa?nvxg?jTx~>K`s@zV?uN`5g`ju^}@{o!-i<TiPY_19g z;42hqmi;g{+(pwU$nKu3Y9<t1RqE4M0h~^1a963HIzp+$dugs<Kdp>e^>c^@-e!KF zLXe(yj!3CYzIV2rNJOdLCYC|}qGCTL$-g?>kM@9C8VlPB6>L<^>Rs-Q_ttZVXdr~D zOtP7^QkRd^&sMCv&Z1R$r{|iz)o&*bKl$_!Q8}hZLP86Vwmf9<xpPeA;L(iL9GIX# zvvDd)0kbFR!nGgU?q3{TtyuLvgF_iL9bYFHJd#xxF4T^Ou8pHgO-GJy>1zALh88%4 zJRL;7N%fAz$Me%S5T|(xXFDEf-U$Z5jtz&jVJ`fb!-A(c^-A;1#Y2!D_#1Hc{DhJj zl+t{?b42PyO0oBHDl#j$;O=_6El!LUoAaAQ5H?P$+=ka`kKSG<P!3tRf}~Uda7E7X zDk#M@Ck?xZkEpq%39#D(uV1`D|Ih!i8}!{MEZWAc;lDalf(r(k_cwmLm#y58Ny&Zp zPHyPPLe=7@nDZi@KV$k@3oFb$KlXRuVVo@UW0hTIA)~>?T6I%a4r(ShWlgqSj07>! zta{zxVKLFM7c<~Mw~r#IK{sc9lXkevLc7fhys@CK2tZyReq?WTw%9?wqxKQ`70l$? zG$Q_vY|sFB6MeSTQQniVc)&Ku4!3QWI)OF)?{9qGFV=fEqS^1jHoioSO98c!1jqZT z97i0B>7rMBYp$uein31EQ;6#p)dR9M0pVpHSn`d@@v5R?Ho9+s5Z93^&~82yf5G*Z zn^M6CUG%2;!gs~O>iJTQ+squ*>7-dAIb`!s5pyLfL-B8!RkQ=pXPMC_XC4{;|9E>B z@TjWmeK;XQ7$7i54H_lZI7CH33nn5lfC=P=Brt)HU=0wh;uKM%&T!EXf|CftVZ2mZ ztUs%@RcpOe>Wz!H0G0%#0nsX6s#vM+F{n`~1dPo0zH6T|GXbpN^M5{`XUNPs`?B`h z>$cZgd+%T4ar~CyXE~qoTZX@|RBmh&@%wlZFHPbMmrh`AVuxOJGnKp!lr14l9?04V zt*;fwxf~OC81OLdR+7OnvGY~tQ(~A2+jT-V#IfDdQvsPw%vX59n(77BU3G5kUZb%c z-ZXT>!<NWZ6{-+23_mChxfVxE7U!W+1mUG6k^TsN!_!;v6lJ*LC5sfa_o5SvKG}(s ziTGBbAJo8`1G%UA+zM!$>t!hbA2L|35u<JI3%cYNOFVh0H-kl;Y6!<*S=SH%wg9p> z%2cUKu8q<CmrJ{0qDg`xw9)^A7r+FgXSMuWsRqrFeeCG|4@5TnohV{XgvOT?yT<47 zbn$*UL#h!c9BQBF11JN&WQ~M4pblfrPc=;Kb2MxIc}@((2?FAROJ#y4vd`zFJq%x( zMaxIemi3Fev*njduud1x-yVF!1X?V#7dXcdxALL5YyQb^m@#WE-`4M+w%&KD=k<Gg z8|@4F{T+BJb8R8bGO(T!SDiWzG9r$p(0oB`AO4l73dB!SuaAgls?m5H&r~zel+9G( zOG<@(tejJ^hPFZ{Y0(S9s>PcW;LA=O?rlf)Sqfvv&QP8SW>J`A8rG-@^_F&qTxdXL z|2*gu|Bc*?R?AV+?$hLEDFf(xsBfp5tlw5(;R&~})hKc_=s;U8O<~h_o4Q3yD?7!b zZZX<yQ&aKO!W=u5u`rJEPAEHs-w7}$K$U^d9aL_8wL1=~uKlE@?f7{-<ph7m6u1Tv znv@7IxhVzB1<$usD<1^mV@5x;4?hDp1Novx#6}P<VtN{NIN<VCsifJs*ai$nUEZl4 zL5=u%*+}<ZUYEfA&X5W*Ry?R!r}b8~g-iko%olJJJ(*@*aOm#a&73#(qk3Q>@TI_- zE4XIV({=w#g?pnpcK@uwn8C>*Tq{K7im{bcs>SfRP=|9u-l3>3x?C_#4EzVe3Z-~X z*EFrfxwCpcK0XzmWvTGzfDH8n#hNvrQ5Bx8Rrn(5fhxQp!Qbl@imLXWI^(`V^maWe zLq0r=hQz(VRH-?K>g`Rx5@}%T?PcDWa5xY30YB1@EWLd$p?OXkgn*EC*|c?i+K=n) z>9=$j5dQ#=vICJm+sLr|0re9Xo$skyI5km)&Jzoe8c5;HQ60Mf_&!}&G6e1YdtS?| z{Gt7Ov+NG+eR!5h&@DqSpM|!nQ*5z9l}>6O!hAxaBD~@}00akXsGcWbPa~(o*J|zy zEEvk9#}Z#3yp>yz+6%?bZdD(Ui)l>2XPMNDTGc~3aU&KYmQ}NRs~K0zTmVBQqFEn6 zY5b7T(|rt4(pU!@h**ItL??BKY6wl^{B)GILm9hXiFuBuu}?dc(U|2yJM^lT^D%W2 zL{+z}!IFgn;~{IC^Z9hE>Wf;8DxF)5X0!tp=QU`{VqRBd9@8;!o)2(`B`^$|F;OY- zF+~y3#DzTQ@=7c!Ct~-h9n*ORuj8zUrgwf5iL^Uy1Zu7F0GkjK0CzVQ0f5%<@9+mU z&RVX0EqE$ycyK4qyl8lf+8_IY=cAWqKdoLSl*sCOETG~NH;=7X;Oj;KQ=2=})L(8# zM>Hc4eCkwv38t2%5N@ufp#;;>4NM+kv!_7@TN~a}sBJKai-6?@=W3)Vx?rnNBLNf4 zjhH*})#>PQt6GURfT#+~l_(Uk9M3dG_+~?{p9+bkbzWfp&;<W@A&{+VuC7@EuzUz} zLO6J;W@Ei~WgK~_d=!ExDWL!^@E;F?0i>YX@O1hL@k|WKZ~+DYGQl=|bsD%C&dMvS zUJUjk&dN%a`Ercj)S_-P+1QWm(F*zqFEAh;wo5l<0#pwKW~JKKY`ZC+LJ5L{?rD}| z!^AQ9u2HSjJSgDt!k?O0AQ%IyRWs2#r<VK%-KSh4`W)zxi=N@JzIiCa(n@$2tpFR@ zgsAcHy0lu{ALCJf;-pzghN6Y5m$il`fEZ9Bc8-Y^_n?I@N!94)J+KClFiqv3=fLnC zGOf?!VLb7_2S1xdRnV(RoAlw|gq>hezPOs69fye_T9;B#arw%bo>qye?xj+(PYJ3N zL(`I^0%eF;1~YF)MVaj(ATF8lYtWsAJ9ZJp96R!z8_KRUJMAQrAKT8Vk+1e>86t8H zU}Fnm5pKT|G1p7YyP`XAt5Dbm?q6duD$4%s!YDy*(Z0P>Yy36l{B+JNfHPZt7pT=B zOEg^yM%b!e<c|u3wzru@B(#z@4wxmQTrVWLo?h>Ip}@%<gx>av1XE2SkTH6wRIdou z7~(;ut;)b_SuPVc*K+SK09lK5Q(i78!qrrNi2&=h$iz25$6%MtjqOQ5Qy`4<>8X~8 z^qfGP6qwj)R_>t}*>W~mr*P_6C`}uBAL!|+m3)dC^?UL=up<T(K@aS-LwKuc4!8<I zpW;>k%se0jmepTs1lvMqWvssq2b(m2*+~lzUWyUW=0rW1uN`=duB<KiKSyb<E$C_p z;mkbzVcR}6Vul<#LWIK{ehkmmx5PWC@c_R7G8E*&^WxvAYTD}`7^*x@m0fPZqBfuy z@f<c$TQ5@*;sAZvdJRitmNfe(HoIK<%GyheSREf_psWspMs2-OSg$rNgfPnLr@a@< z91cV}8^O*<1XPXjd4uO-W~~=6S)$hz^;W6&3mx8Q$>RZo)?t{PepJH#x0}i1BGu;a zp*z6USV6}hy=woZG(jkC-GLs=Yx3P`MAhcwsK(>Zo<w`$;|8Gug&f(Gx?6L?#vZoG z;c7B_qX_MUR&_n9;;WoSWg8hzwSPu;?#n?bQaH$=ao>K1fsbmRPAORqFw~kQ>6j0i z5xgvcyVjwh0VFodL3*45WsHmn5DIuv{cC~XuOhs21fZl9@;aXY#t;tj0J&U=gFavg zO+5t0->?)-7=f}Jehq0;h3xk3M0;Q`sBRz@EVh;@`|L7n6TqpRW#;t=Y)*tZkoyhJ z;+d7yJgYBVj<q;ws0SW3wLsX|FuNMB<1bta82E~s9eFTZOO%9{Xj=mZCFxG2{q3)C zcLXVNmN~vhpe->ZDK&5==JGJ(3fDdBXC-Z#)t4(IbXVRZccZJRiIireXdr3A>WXv$ zrN@@T8MJV))&nWD+4_bmU4&}Lk?+BGsCQ2#5SBSTHmPlD7Rd=s;E*k}2j&|m)i7c4 zV%1M?A=~G{Pc<rEYcy-gKJF&GY*Xo0OQHD=K*-j@K^g?07df{FX>yQfWJh!-m>?Fg zI{;=XZ~+vc3eZr4(_0QhL*pNa278sbZXS9BA?fhK2JkA#<9_{6i~%$Q+)PB7I4$_p zC^SL2b1O??Mq^sAx9VRV!wMb56H$h(kknV~KT1*u*23e^OE>c3wveMHFKjro=lY~0 zkkzn)xOsk&f`s=`9(kTeT^1Wro2o})G2!$?yBY@^#DlLK;eXLKVCn}1aLfq8WKRp! z({{Lxh@YDR8F7mb8+<-ZfMCq2o#VS!^r$|UXt)+>I9T1Rb*d>S2P3sr&AuKBbs{qn z@8fNjGqta9j?N-N&oq?&cUBGHk#PdWnMtF1+%y8$kHJ*>xyUc%Lqc#?s*}%%*-0Th ziSP3nc;_rTi8N4;*VH*cV0G4ZZgi+}J-A+dHjPNrsbdokX`vP^n8oS2Tw@k?a7s1g zKbj9jLz7&vEqDX7Fj*66s_Hx92^6aR95i9%%-{;O9zgH~6cLsYuc4SwB2pgd9IRB& z)S_YqOy0>|;SbN0>9eDugeb0yd%Ja!#4a#sX!@Dmy0{$0;#VrS(%IKy=B1<G5{$Rj z)wDJr{cL51On$n$oE%5R!DtY@-K9f&0GOr4gVdSq5hQF*N(+`Sue2EXa8UYV=%%GQ zqLL}094HN5k{!MP&4OEOkh$J@8}3-Mi0N<@S?jc4wr1ZBbL+t7JUpvauTk89`MWJd zU%gHq+9{4&Fg(tOxc`V1pfSx>OmnRyZm%U%x(e4bF)bfE#A#L)gqM!ASb@p1b{14E zN7Hce1b-HiM$CQov^T6CjI(4CaMF_F>7~7NKA5OE*aC6MV3Y{IwiE`fI_(UzTNi)6 zb()phtxXP`|LKlVaSJisX>C%5d~`KUm;e{FgK9-^ug`JXw*#7BmYLs!*HkwH-!R4a z2hf(PadW`wTwz<T3s)o0Nog4Qw5#a`e1Wp0EW|{Pj-X0?nsxpW?$-^3d&skS-%@Tz z#qU@EH9H~Hn5j^n1U0`(wVmL!RuQ#8xq%XpHnp-~Tr}Q-M*Zp<j3$~bBL$c;<61rd zPRFA%Cdj%QZommh^|~p#dL-)x@*j`U_%1wwl*gn2=9=JAx?kX4y&;y*m<WicO|FW( z4J1MY(Gf?E?4=VP#Z%Sm2-k2~x7}}5&w3Gujv9uf^}K9BVyQ|448SI}M$_^!nwr2Q z(TkzNL%{|*bLjW8<8dKqILegwkmGoe(i#ekA+4@ej{ZqsADSjl*>qUCmf$2V#g6iG zn6NR<gM&yRTGZR8#fa|`Jd78i*VDxZIuUBKr|ZX7c>oowLW{vEo}}XcNT6f|$8Q{* zHV`=~M&OwN9fu}$f&GxL3a{D-bspv)L=6uSCc90!fOxLN!%jhZ4JRQ?-y>T~iEr%) z>CA_v5?_A3U<0Yd#q*e;q4hy7p3)rXR|cC>LKiuB0#Q^O&dIjtT2yE%2`YR)nTyv9 z>v70Kz*T|UwdiaDDpV^-iGF`B$=lR@vt$sBm$4!q<=oZ`EP&<tn{K6bDe6(wpuJA& z5nmM4>ob&d;NkGR<RkW28||@LRmS%S7%Ehz)$4zV@wi_9$=?`UV4YKCuvb8U&Yr&t z`hTScOwuY)B!rxSej2d1e-#JV$r`Zg@P|F6Z74$ECp1Z%V1bRPfo9qLis4tA!_<pc zBP4_^_JBb>E#K)OuTan8yJ#A^8?c6O2G+>6to{*l+=LnghyYwo&Qe0<&%huma*9j* zCz(}gcs>m$bSM`fL85BYe=&EM4t+`?Xe2aoH%Ll${y`<9rsoa1B}qTE>TzI3wo@en z0+FDuMmJFmexdlGOr#c!ZZBbYv;>b!)oIsqDMtH(7WoaA>5W#OX*agEhcSLiC~SKn zwdj2-73u}_NuuTf+m~DkRIk>kE(S&7Q7>S*0okCg#u0n~R6&|J&6HtGA{&H9YO0<p zp4N?V;v5h_dlxhSu@cVF^Y8-zs2p^To};HCRH&9;#z2r8z+wJlfEBJ)xM;l2xd+tw z6b#AGB`GR}m0Q(6Ia^%dVRbj0gQI4x%aQs2p?=qK262rK!mny-T#u8{G};1=Qq)r{ z)2ikksrge6Z@xN)S9Jxe#to}hbzBh}))(JPC$;Jc3_#=dJ^cu6IMo@Nx@uvGtwk+! zDfhzWEWiOr&sn8N{VomN4&va@!7sARibIG$e%6~Y)2>yEoSb=H9aN(xvagbo+<q&U zF_pE1eHA&)k~GeF4o_aY0FTtwGTWVwkfSrapJhPP;0o{+1-%d$`ynzg|8g{bt(uJ9 zY#RIY@)#yQ=@RG#-D6Nj7=;#og@81HGKXU3|G;Mdv!hz+2>C^rORFP5QK1&ZbvBos zwW$$6oJRUpd;otUM1Wd}iX=10n?lsFkbVP3eKAUfa3044EI~#le3D(Oo}lP~D6t~N zPjUoXRg)G-HE8N0^c74Fh-p_4zE6i_>_cUvxPqBy-TRD-%fFK*3xGf3R8Xi+VAmG4 z{<$WGzK2=ZqSgqfuag4klC*}8`!(R)@1{n)58RvymbqEJrQ=yG>sTiUT?0s&Oka&> z(8UY}F69`oLRkx%gC}_b#{w5US_UX<`rsjy6HXAa4nh74sezWyeBNjj{&=80PcdqU zv4zY?G2paG;r*GhvFtb?EyYWhzvGeGr_o*jf1YR`H9~h;5uDd$=YLr<6MiR3CO^<U z^dBbI?!G#%`%A6v%{JGn`A&%a8udLOWvFxvU)83$R<&^YbBhdD;OBg_RlQFhgw^xL zfrk3zL`vm?JL%T0a5eQ~i8htP5|Hk$Rd0t<Xd_nSU=BL4yhj2hCFp<fRnIS&7#SrZ zJ*QCQfbOmFRd8yzs&o02jv-HAXQD4zA1e}aEDnzuDp<F+e!l<$0jl(Yv$zI#tI7rt zfh)1m5s#z#!`=s1>l>jyfe^v`^8!Afgum2raIM&xYtK`}bTVD<I@`^%^=3f*l&)0^ zbXKb7gm1-c=@4gHg=%0WNvF7t-ylM)!7L$nZB;eWXxuWRaTl#uaG?4ROLPQU#Jz=C z4vkt8{!5k&k^ADH|HR~xRjnG#b}%g=Yi;0NnmEmf%rn$SCewOS#2fG}XCZz~vveLi zTQ189&cfINEEumvzu{cnk=_}i7tSS4bNOAVSbM2!2pNSfEGfy5)FvsObl<xGl89T8 z(bW;P$DvRjA-OWa0h=;73tSD=C>Ps?wb5|#WdHGaU9%V}CLzyt|GI{CuPk**x7@KR z+U<|$+vte3tjglr#dZSqg(if!T+VBbRPDq=sy%vGwd^BQgBy4-rvj6&9;VD_Q%~s; z=uk%kp78{;#)0tm=wRK7vn`-$B?v;mF0wlmq>+q!_zG4G{z=$nCDK5w(H1mC0rtNp z>4#P<^j}*PM)<6qWU++UGlyds>mgv)9dHD8y5iOuW+?_xuw*dqI1toesoy6!))83m z1f5`Y1S*kr;ty=&iqeUV7G#QG_grp50`P+!)7?qn!C`_;kGW05Aremr7UTpE$%?^r zNhC+W^cpHO!n0XD7NW^UB;#X)P<wrB=SeM%=^FKxrWm?@VVagicRnwN+yY-RH~=!i zkrnEarPxPi`I)f)nR2ZgTkgCFMPHH{3I0J8btsJqSv;7A+EB=AcpKOr<#HqstD-9A z-B59z#>Qe|CSy8&ZdLn9lgp(F)Uk<&F?HPcESrhYM4U{~OC`vEbcgN{j5R6Qqq*5$ z^(<P&z?dM!fkAA}sZ`f3kv($aL!(7iq3YOq8y0TrR(^{C7pUe7RgI@`NmL|Q9@6FW z;r|1)Y!_0gX&_f&MJd+V68;5dkzs$oR;>IXy4g|y;EmK8k=hjHEtcaY2nA5ZmehYa zJ-SuP=Z>~t#T(9q`s^~i1up=jO_$TE)mnBNDzVw{sttJ0CB-XvVhvhG9GRP<ZoVyk zK9{qjZu4odL3=>{iD*Yp){Td@1%Z7Y+Oh@q*uz@dNR!rX$<<g1=+sL9J-qB(ywI!@ znx7Kb*vCH5hf5sl%8h$vfklh0n)kS>!b`11*8TWmEwcVVRBPChX9z+Nb=UNah}TL? zznFX_YBh<XF|&c_t1`IY@|jNLS5@d!SZ>jNY23C3U~EVz>-v~3@Jb0zDb(kLVCG-~ zz^EAOu!@O^eF+|Or9+h<qk2hqm1obqtLZG(EMd*$_?iYDtIZ@V=nmJaP1ZZJv{mek zud%REPy7O}Ap%gOAn<PpmwPdcmVAd6m7$coZ2dA;TND@uWGY5t_QD8Ut1gjEvs^=3 zbZB+rYWg+TO#)Q6;oQPrFZe;As`>iF?m+o^9SNYn4S`!i&eMOVN`@#WSAcD~k62A% z4+!akzDT_cQm!;qzZrO{r%F!Csff%qBEwV>;tMow+SCUS2Z4(d;VY*uz&gg&c#tkV z@I0=f2OxQZnGg?=;A*BId?vuKhz&B(ED;Y24T#4PgHffRC!#i{D-P(RLt(bW>FGzv zag-~hHxZeD7t&>`x(ooxZjTzZa|t4<uhO@Kl3KQ}``EE~-Ami6B(|emc4x<Ai%?S{ zZjS~-3%WR~T4NvzD%KV{D{bL%FF2_>52s{e&=uy&oj629y$T#dg5TRCc3Ct7E%)Lv zQ3E&C9cxbqxIm?=X%*uI@Nz)i<*-fcVo~)d35nvVQmIQh1J0&qpt2&gQlWW&a%kl) zo>jv68==N>Liu%@DwcjD7kseXI%8qulRbzOIb-1ztM~92c4#Y54#i7u3zh7_x$joy zt6old!(Y%j&RGHu^1E<8B*2%%2P|^}>-MmoISkw40UKih)|SBD_+1NX0_X`~0NH+F zi2+on8bkr_;{7GhbMd@a_fZQwL1%8;HRGzFxH@HuUSdpS`K`*-b1I5--F}I-+gp+H zKs309n6@^MSf@N6|JT0$k;Dub4m+{wR0v7DU|wfM{Iy6u`CN|#uj=AoeLfYhv>1F9 zY#EY6+!#KU?E(LybFEbsqJB(^{{1v@d18%=iUnp>XJ`^J-bg%E08jru7@8zVW$1Z% zW&@t%K1>WA8(KJva;n1|olhdGejA5lD3UGgZH}Rl4d565$TSm;Z<cE`_GJ~2jT$=* zkc#TI&`AEm3*?EuhKl^Bz9h1-&I8`3pnlf&&~kYR3ubi9iUA1LY%aH$@sp3_?s3Wg zm3x-eL#Qm#1UtC-GTd*lT%>jX5Sk@zYB_tr%vdX*Pz8P>{*9;H;UZi%-=T|M&Z0mE z*k?{~-X0xIs%8bwP;oSwqo*p?4@=e0bQQRX7{*pl<9V>SGdQm++`tGO$@m_b1}MFQ z*j0~nGIVN<g-gt8g?SMjoGNRwr4g6mi)cjOXee9GAq5oXN&6UIBwC?AnDRkJfDWm` zh$_Zt<##ik)9AN7WX+q7JDh<=(VA3%x2XcoA-K^$J817+mYq#Jz!kA7rtzQ&g#7_! zC#R{HeL|1V#x|fHo={_E7oI|hOu9(lErh#IS*K0)XF)hIkvn&Sp8lGa;x1xYW3xYa z4GmRT*t904lfZ$sTZ$zq#(Mg1K5bJkLf2qY*+D|c&Wm}Ij@UN!5m^PeI6_v;J*Y+$ zZ9%n4_2}2%$Ps6v(~tUyv*w9xBetD*7}Z_}AZ4zfaN{Jx(W+Jv)TqWP(z-l3lzlrm zl10Or=|GPy8gaN5mNY;$rpcowR3N*X>4rSxhc_}rw8ISs!ji#M^ElhJ%4%N-q2P|e z;Z-M~J?ar|2DDcKa9db;zu+fQmbwE{A~FvNltq8-08Mf9jML%jF3T@)9lxOuJv+5v zLA)NXAL1Tq874HVSA$d$sVyj1zj&&Hb>^cz^$Kdl#LyV+dD3f;%`wRAWa}HdhP0YD zcOotaF+c<Wld2taSgEF>A&eh1HNpBu!&iMdCTdAT&#mNi!?txbeTK+O;45eNM5a3( z0S`BHnhW-@7mgUCr~!+?AHw>000EBPLH)F$EA-Y*^(HM9#KQEBP96Y+{AM9tiykL? zq&6bZA_=Ugqx4gRpyO%xOg_~z{5!}5EyJq?oz1=hpqM5Uh#{`$DKd;{>cdGQM4R@( zzh)n15i9oL$wEbkpBjP~#{5q85PIU!tlg?Ls)5o;Z<ZyhF}2rGaCM{L5IuRV>c8kX z){!3_#ikEfDd1))tp5Hwfk$&!<h7rA#MgJ|*BRYTaO2`V>V6&Atz{tOM+1YHMdpAo zk0M6u<4YMip(hRdA1PD#RqkH2v6kE6cVsoU_p4L~z{Pkk8|g_2iA{Tb7asi%g%`0L zh!+Aw&>eOFh0D?eM`TGbAPzCdU`oVfsR^eUGEoS8Ntzk<m~2iI<5P#gqVcZ+b6D;- zv&`Zi(Uh~?Zz#NRlQ}M0IF$woq^_OrH9SLlT*GuSOe=CGC|)W+&$!Q#o$I`^+;#r5 zXPIMrWNktg+uss(9-9YV!&$*gdQeT-?R^ZZfjsgGQ{iy7Q(K~%p#@D1G?*3%)5`>T zr7D|mIwgaGtRX`p?0GTR`P_!Tqz3|VT>0soFuTj^&}CM0!<ckrP#p4Vind{*qtk<m zX2V9u#)Z?I)y(7&xRGCm19zE7#=NrlT)H_rmkvi~05?C->4!f93ZUwQV9^j4*%TQf zkI+#K#}q8Kkl`r>4%*b&6q6MQ@^xly0)ByNoi0fHvM&sbLyt%GT=oO`4}u`%KZzjx zv@oN@kck%ULD|?fbT723ZJmHTJ4scL{p_X_N7VFIy*Z4IcBf?H0d;agf*MqUrx>y1 zs>2i06&z`=xSl&zppR>pjH_){tIUsu_hs-9MX@DV`?>P0l>#dE)Wj)py}_`#wR3Qd zxb9cNwt+=M6G9W^2yIsrm&_;$x%Ds5=aIA1?uJB@u}gN^^Q2>Dr)?>*veSM^Q5!oo zplK;xu$b+m&rTyqoNr*Q*6(b{Y49g)OneP(c$ll^3dr3k#VOPS4De*80%%AJh^&1W zAym&aHRE6sR$)5De>)z=1GEp$H0|34vVX+4eW*(w33<>2>JBtnslq+K77K$N>Cixp zx~h9;jmzk{+Xm38@gh1gHG#bJ9-*pC^)^Wcf_P)`pzk*pUy`V<nyHIXgI1fh4%Ile zHz~XZRsmQDEETNHcCD(+G>eee;Q>#TsINH(vR)k@uWTw|HGpC%(U9|@UdK!AQ55$A z%eQJFG);X)9Stz5%telJs&w36q24Qyl`LStljXLVEv{81nM`9lKd_$i5!Y7GvrrP= zO*Km{L|0lIQ*4H}lA0JlBiqOdN~CFAK=3J{w=O$zx40ALgM<v`sQU}BC6IfId|cej zQOo&Tb`8x#n{#+P)xv8lL-RA$H()TCYmd4bdXiMbpCAKJMU9+KRTO_dRZ%G#;OSJb z(KB(<cCkafifIVeXGbPxz`z4psRuYONHBwbl%e$J2uYFvaU(U-9BY{-PPc7^))M2a zA^`=NKo{!77}6*ZIFrrk^<g;#-O4HU!CfQRF_kb6?z&9~llLlaMT6EF1w)Zr7H||O zqD5L-3sPZW*-OqijEYmVW}J<?6RciU86OGyW?PRM765}+R)!X2s+Gl244wh49P9a* zka#nY4<r(Q=E3msBxF70IMZQRxq5TGY)Qv<ra@7c>BXG4=Q0~e4sGh8v0@q2Mz*!P zqeaqLM7IYHtXw;I;xt2@1)>0gFc&LXb*uUm;A2t4Ur1YXHQlNoe}u<zr#p2liS3zs z4zFOioGwhdisdl5Jd318y^CyjaoVao@LUS~7GFZTH;)?sJ&k`YWUiGGG@(~A5@h8O zTlwoSVgTDOSOjY{%fP*ibBy>UpDx$%cc_hc7&GdMTxg1X6&Dx`%ukigVmQ?Z9jTtI z4vYh+doWgy_ud4C2vgNd*T+20+rav95^(8%=^K1WDo6^qtLXvMRcla8U3nr_23vtq zHm81zM|MflDNZOrT|tG3SI9(Uv1q4%MyHs^Kj0aC^t6rpAN8v6@x1N^;VJAJK8%F$ z*S!GBK>S48>@WNnV)ei=1d!ySQOdnx?uTw3!gQk&^M)?GEyX=WpF%cNDvu@;E=;P_ zpMEX}8OyFh<X=%c%hKojkI@}6xCfpnNVk+SkK1R97e=tR(1~`?a0LuREb?)sNJ{8l z`1OJg*=~y6hv5$g91fUmGJI_==o->Nz`!Cka0HI0;IdDD9yJSKLGn`0Q#Pj)Fo`j{ z`3<PF=w=W&8FbSHo{gW=)8Q=)59ntR4DUe|&wQXo;I|#-v~D#Mh5rjgqS?6omOfk+ zbF}o7TVAMP_+728&j+MBjS9bORb)&ow}GSsrhO7j%P`Ag{qrgOWFm^shXL2HpFp!D zA-h)H;7mdrkzwW-;NeR3EJ~7xlba%bCYaT#8}I~(YQ^R7a6l+G8AaqM<avcU0Ru;S zc3w&<3PVisu+YZ7DWHwzPQasO34AUM1Sd9X%J5LpUUN898NHzNq*f>clqZ>KSK|v{ zp;a+idpS$hn|ji%03a3!;%$rNrUfALW4USm5jr<*0@>uKuv@E+L$C1(RTb*N(Kdbw zyQ>N4781ZNU)QQy;%}On4Dhd1e$EWB7pm&iNK)SrUog1B?;Si63>EealRG)RbJU#| zcL$(a{R{w5ds-XTblRMT<r&>-1*WRnBs_BXAM(98ifu?MrDxRAOmw>hSsp~MmXUDr z&MXmw+nkK#tHlN@Xo}?AV@!x+t+Qw}cP!FT#-o12&B+O|g0993*yd)nnsZ;lrS4|@ zsSY_>SqS5@TFimBx(|!yIrIx#V=}_}_4jx|De;bK<`i#~tRNU59#R(-0Hm9E32|W4 zb?gZS5~P~C6{WE+Qyn1IkU*<3PooO=tAI0aWNR_c=uIpJDhq$xQy9+5WZ6v&$7QlC z>Lf7Wh+1{I?kq}ivFL1#8i2+vnE?>5#C;PV!vohrHKjQ=>M6JN%(r6%oVdFU?9`ig z`9>Qkf5qHzb9s|q8q1}DVz%`#>kwhzCN%TeK{yB0-6&eAzDHe*STsRCXI{56OWJXS zmy!vox#*|HE4>h*e-0B>z(qZ0iGmeec*o%Ou_%lk1@dyIYu$c_?i{5&QVL~Q!{oJo zcQBCxlXS;mNJL4kz)PGZwN-TzaVTa<%Kbz!&Tqq0R4zCwo1g0l0fhia0tA5}pf`4E zu%%}KMnFdgi@SGwtM2wPK9zXn3hi!$>u|+j2F%N&<y}qFpxUsRzLb9`E{<^a`edS) zBPMLo<XD`4jAm#G$?jfwBUR3j*pblxf?Uw*;}d=ZQo<`B3aKf#+6u{s_T(VNIqFMI z%eYFBJ%HdaK)UK^ddyGd5#57N$FVqzB*5!GS>4V?NxdH*<aru3RqCa4zKXP;B=V^H zi@UFm52F{dqR<L4QLJIJg9s&~2(&sKPvb6<Ybt_!F?<m-g%9&c?xCt*K*dsR=4;(r zfB@20KpF1eKy#o``qQm%YStBTS{Aix)pIDSgB=}mI9Dy5>h0HtDtYqJpNV=j2>#_s z-INUU<yU&t%d;>l-0eXlr}n5#oR$kII%1CR3(<b4)(Na{Rk^w^Tp1Pb@Vp>bL(o#x zLBK4^K8;U7@0hiKGBo(0QNRLaaT0uy;l5hfXvPx)4!?*7FaT}XXqwIwm5dRgrXBW1 zyxS@W=B9k)S?PP!{phPwC8J}F(yoj2H_X0QJvbOfqjrdj@iLR-1mk6ox=It4wYTwV zR07<2co=89G+hPPU-(kTVc^028g~PtzQpHiDs+LnTEkt7aD7c31Cwv_6$Th+-h=T} zm?LHWDC=L+Z)z|e>_Ha8RKcVp3D@AD+R*)c4@I)>;~rH!u+~ABr%#`vOD*dn+z|DY z@riQtPo;W-&#YS}V3%N63n)*a6}5-&mK^*7-B=z`SLj-77z^Nvf@D|I75Hi&yxQMB zc(szZ5u|Yab3q)Hgh!w(%@#Y-1+E2fUbDW-oXhAK#b|{p!)U~Wc^F>+CYGS*02VKW z2FyAg;@Sbp6un#LyYqEmi{5Qu%~DHKHCCbtmcnsne$?l$?xA!8%~J`%*RNBbp8h4c z0pV}W4-_2selm+-uNx_~><wks(`ouC;sNm_KbB9mIys4*VeGgh3q)R>fPsU+N5D@Q zJ_ni#(hMsA%pFdG(&>y8X>Sj~32R+YEPaASUEv;DqcItQ$4qMfgrs^voQK7DMWeAK zZzqvUfe#~C%%d80!w8_%+C<PZ8xWx>dn3U(Hm`xbnbHd*w+43$F}YP$@M){~RReI? zN3$GfgULk6IRz?oNGHukj9q5W)%1VZP7Z$!ru{&usM9>(f~!Vd0rHTkUV|^XaN{Pj zET>zNkYvKQsxX*UTc&O5ALF!L%7|L5TX?q71zMH}C18N<hSQehzAS$eyn44`0zgXo zA~wQb42%LW!KQ>VRe-Vxe59$q3Ah3Y&)`F}huzE3p%eM2z5%Aek3*n2I&zT6Q#-S` zwh*_pw5CUiU8B%taIPn^GqMDiFT*q(-vc+m{@Y+u5{+h{AKzXNz{Fd@ISFiZ5;-J= z*2Emd4Q>E5wnIDEBYXfl`_O^FdByS)_vfvxa-M$ENK^!~jBf0zf|%mQk7zSMh+LSB z{s?2ZA4eSJ#uf}5qaruzF<YDSD37T6)!t9PAqiOS#|rf+g^sKmck^3}8owajZdDuk zwAE6s;B9R2f^QGJRgoYd#qZ>dlIp7(CT*O=A6JaA)~EoQ6j=J`d^sAz61J~U)7TqS z2vvP`cX*}~9=uZ7eBRL{9FO+kVVI)5k`-zV%EX)@OK1RSlQL>f0%>BJ>g_%?Y9HB$ zc&Tp`qazNMEtD!2EZg`!hMPAumP^%ReBKR~7CP>jw|#CmSiZBg>l%shP{h`z+fxcr zlry$V=#;eJDrjZI<&v)OW~)+E3fWun)JhG22jm9iksZ~!8boft$DI?c>pCfyJW1=U zyrrZT39*(lU&gCE`9KYfkyNwus7;YkKaW!~G82zeU;$!lE+}dnU)K&*-bsuD<?$$- zV2^^*#+Ij!0QUT%s<rM4f1@o3aR|rOZQ3;~;Y7(kVg-yfs=twi&a@dGhtdF<4#xis zKw`tR$JO*Z-C~XDL0&l)1r^xYQW8PwYGkM_UCZJr%haFGm+7j7ctX5|ZVW1X6bgjp zBBTZH$*CtoMu7cjK;!+uuBOuu1C998pdDoAfGG;k{PTF9Dn`bG@6`zwOh<(0T~-vb z%!}aOYBhr56ZEEq*vR4Xt5mu0Sg?N^jR7(Np+_FhW(%kEWkh8-w6ldmigLj3zY22c zp3DXSsv6G&i*)wzPe3=g;nGkyv6BuoioJlT>ME;Co`?!(^M&eR3eu=}e{`4y(Ly{H zh&reM^@K4GC+b*HFQOw+Q^x~SAZw@*p7#Y6CF+U1U&6K}<py2|XpP5mQ>ewrwJII& zmi5OtB}ye-%_1>IW#bcQAB8C!D=8M$Y{I6qg76HlkgTu%Lpj6ANom69NnY5G)s?ih ze0Id6ndgKt7{D<yPh`lU%yTXKIfQv`hvO~@^CG~v+AIO7YpsT{r4Kcr7|a_w%<;Rm z*5GX?H6Z=_(FK^B8|BI$;JS`-p`xi7SzbfY6#uQ2^G{yN%*Jn5A@=QZ64}b~%wg;e z7{IKL;#Z2O#>|oUs@{aK$!ZQQmulF>FgwBZo8~}sQa`lVfZv{wF6b&)C#leC{QxA= zz}LW3JTW-oE+2Uee%<Zo9Ez+w%DZlIb|#&A7`Xa7W;G`B?*>d5l#sg&2glqX;Dkts zb#%g+np`P48^Xc_OG^f^q}olkBM)L(g5=%cB*bA_@{n5q6eMU5O{sly!ldk$Jgh$O z=26z-cCb<`)6#Vewp86op1}n4!oD3?+)-<S#QCE)s*w)2sp*y!P^rKMr8@41{L586 zqKC;=0LnJC;$n=~T1SC2!r#KTh_ZEdRz=+HM=5BK#vR(Zob6zO+Sd?p&{W*<YnFYC zf(3A?f)U93r$**FRPMQYP@tK}2z9RhWp=iwBY&@!$iP{>{qg36=$jr{oFn8-t2=;p zAx`=L-%-P|h1x{hcBm^jCqPZy6237&pCrSeQ*}*<MydHIm=Bl@_u)V_@HhlL8f6F6 zk-1%=`Ysh3D)NRaFpdJzqqD)%oU|cd1IQV8jV3h&Nqg0KkU4}kX(JBU5TM^t??FBQ z=o*c*p;rphs>6%5bwgLxoR)&6vb84sIw^!?^azCtoN|G$66c@cIxR0DdLCxVD=m&! zz))5O-g59O3N83ds?A_E+0M3ZXHs~c)f$vHCgE-6;aezfds^j?gybU}k`P@I-hS4h zJk*5|ieSmGK|R1Rb3qDFPr1`P1isy%yBK`0u&f1NkMKM2+EGLZ=+DMA^X4oZ=1m_c z=J$~H?zh`(|EpB1Lp5NRr;b&t2brV^HO5r7DR?1(&SNi_QFuFu*$M22lGzi1Hm_~k zK7Tl%kDWJ~vZBSY!p3iJH5B~;#@fK=i7dY0BdP1qr`F@}a4YGz+kNDnXX`GYpEw9B zU2aH+K5Y~_7Q2pNRfZqez9mxj^VBMYYCeu|nLh+yz4m$Lt6Lo0tSs~0TivhQ_7bO` z90H350;9Apx30C}K)&mdfcQCqID<fd(qQNlJwt6k<ZSgb2uSxM)qAUxZ4hvtdN&Yo z46+4+&P>(T#OH&Lh>cF26EE0!6vkcnep+~-&PtWW4m!wkR&F@BhleKf5PK03?fpFJ zTQp1Ih)0lMXPk*Dmfu`&6#6Be?9EF{^f|KjwsU8~6)e)K`kukYZL$kZ?o>IDG$0>L z1OE5n<He_j?#(%n9OhX<Q%HnJg<k(23~$}?z{t-)?T;)KAAY!jt~4MK^Z6ew80K_4 z-exDbDK^R2)|TnL(=1)x)l#rJnp4|bt<|MuhUI))JKZw=sCsLL$)9Wyy>f;Thr(&K zab$KM2q%0e{=>j0W8i`iqOlq!6WUL*C{z^@DXr?OLBcb1q|kC<bNGtI&Jcav^F{V? z&-y`W@O-G41KMI>b_34<^zoQyMoaO14v|<}rB)0Q9C`z<r2~g+Pyqm=2RTf72(MYE zuKJsPUZ=_CSxy%zav2_zk%{joF4hm_IK;4F{X$(o>&Ei$gChYA7UksoZc{Lwtwy=O z0^ENAK&+0FH>E2uA1mVK;~Z9jr%g+MiUt3Y`VP4l;D^o|-b;M48+%Uh!`tn!;kQ_V z!+U}PMns}jINUr&zk-H)fG^q34|AibyYljOgCF3=s9`_T0t+4EEOULcK|CM+3`TW0 zm6kPU<Q;Wdx9%V1APyA<De>Kh>%d7;_igowC497;C8p0Nrp-g->y}K^h{Ntj7TTy{ ziQPkG+WjmKjDT{NqKG{Ti|E6!-bu)_+;OyCfpQ7$ser3mO~(toPd;5}il-Jzd;`P| z_Yg0>#7Y5F4W$&6O*SeW!vH0h;yOZodO7~EV?4XEQd9SujCksPpW;qaw=^lsS0-o_ zd=K~G=XA?)+F!GzVhlYzwGo*G8W0i$Pd29=S!1T$+2SA<Cj>7P{jE2!1;<ztj||gK z-3sPqt$1v%lL3MW(5{V9J7AZ{1}&#yk*-U66`*<IHC0zPl0BV;2zw``j!m*GAMR%l z>kGbuV;JS^bZgDdyNGzqfR$~nA8yqTOVy*OW{K5si+1dls)z6pXr^%UsMkPeTo=@+ z$IArW5)-`+MJOA9rPA<kSrIcQFkVSO2rT(STFFCl{+OHhL_FTk$0y-}*~U8A{4_^x zDwPId<E5!nSq+Ve<xq$Qy;sU@v;{$Hr_}xPdL)Fe4eG`rc)B1R(0m0xJbtxCJ%J-) z=}%|hTk#T3DEa;-#Yj{&{}Ti#kDtV2>1><!^-~Z&#x^ggcp6!};Fv14`j@gh%Ss)& z8E>%^`ZKGe@GZLC3ia<((PUnV$J-zfb8lCb`eH6qj*RfNXc4(81nLr0pj#RFV0H~( zUm}Dx)CZ`5VuD=*B?Y!@3pUkXcji^F<#lHdM>``1)IwAb%PkZ3M7&P{(WVOQ3dWOm zUs9oz{Urm$(V(L|SLidC#a6W91AP7AXvMebwrL7*W$Au7dJ=G(EdL+$@O1VLb%$-d z-q!A*ZuiIbyq(EnKn^{I=jiVhVe8x)s`C@^%<GMZyha^g6T{S}kV?{ZA9mfUKE-G) z<0I0}lLxBRCqzK2S`M(W(&OB{tzJbnV4>7<WXP4LwRkYUsyzIM?=(p2K1<?h(=f~8 z%$R)~Zy%<py3<fiGcQfVofH6Z%pVn}72zHK6@YSWP-zy-!6ax==~d@zfZrb|Lz^QY zzoSxYkU=AWROAywvAi*+uChu!$vq<wqFU9rX_0Z5s^6%eTdKbGXVy?3#N+Um1J<vH ztU}#(9No{d9Fv&uR4dt#H*;d^h0@<bfB!a4f6r!(I1STHf5)4w4H&zYOBdRmSn8X1 z`iMA`ZJgnpPPB;iMqs0kaGt7zSEcGJEzc@c<tZpZUOa?7X518`xo1#VXy$Er*{ncP zc)NDQm8yr?l$A#W{oT!oxtBA;J#2dCiiSDBhgvCGaV`D)8eJIs_s}8&TGHh&*$uor z_6RPsx`jL$f@0B~q19^COo7;vJqIbakhbRIYL<7wUVAbcoj)hRKdDl^G1tnl^xFsQ zf5hVOD^#hT5Meav+f*)U2x^{;vQw2Rx-o{A`=k$eR>H4YlmJWQH+bm%Kx$YQgV(6L zs$&dz72eCpg7obPCp&aXiuwg!fjG4qSqS#fYUG#2F*S0QU3-F68$Aw+uT~VTHZ-nU zM~2mDDyvc8wW{5C=Is<fEuB%L)MXHg<M#_L3b4(IzMSw*dhP%y!hvcPDuJkxI^$}3 zCV=m)>N&6-Un|q@<Y`n;AvQnwDT>f&^Sy6C^Phtz)%AFbp;mh<;!9kqKC6wPH<x`0 zg1Xej`uiMEimNFH9jnoHx2bp~2px%TmnE~t(#A|&-;khk$Q`vfjYa?Vko_yvO$AJS zcX}$lzWC1PsM+Wosx|x-yl=Da#4wTEq0T@XmhG{byn?4WwHfoc-YFr)1e&?25xz5z zy6;@=tC^vr6{Tv8rf5!M=^OiFsVP2nnufl5ElgM(v}9lm013n32D;k8D#ETHwB*bs zv|k-88p^J%gO`S3mf3lDqjuuaH^Trf_cNec0ge|!;)(|+o+>|E>eOB#Y>pqyK6nYu zFjSd_1VZKrEPfbJunF}JF$QB!bL6|^06t#H$1O8wfNgznuxD*iFYoA|VE$+N24s!} zi?an+C4&R|6S2ok4pCjgCUq-!vz6tUb*$Jta|S9m*p)FN?@rh_-q-LSU|0J#JH?;r zbz*9wPd~=fJF~XAjkAw)8-bJD#t^65Sbm1vSTxRUY$<RXcNV&hHRW!j_W#_*{Zrh= zf(p0sDn5@-MVZUohNs$Xe1Ok*v{60XZM5ODV5{4hxzufZdZ*j?e1+TC`8&M7&uw_| z`IGf|1AnhYoBSj^;5Me=^UZ^9<Ap!Cjrk9|jmD?k#<PEQ8!!FMZA6}P8%@u<jpJT$ z8wG3KMz5Z3W5n@p<LVRK#{2mEJ=JZzKEQ1}e4^VJndUZv`0PH*ZPX3MyK~&e%|&iw z^CfQM)-tz|G7){@^C>=;O>!H(J#M1`pVKhL3n#mc7x6g*<9q~T99HQzp2XN5nc+5! znQr4RH>2NM+{U{L-Nur7x3L<Z<VC;@KCKw<i9z53pFzvqh7X?&_<WAf7}IUsfX_~R zo?Q<7+>Ww$xs9p#{1Kl;zjhn<0Z$G00tfg6fs>E$dHH@k|2_JD$!%QmvfIdb$Zg#9 zh}-xApK~4sJotS6xZ61Y3E&%_Pw~0pNw={PpL_o1Hj03+lvU{OMc}XPhd(QT`=@}@ z!O7?wpHq6djjG;mV>>=secZ-*eSz~7xA7)EkM{#j^miM1F5n8EoRfjKfo`MXRJW0T zn%j6I1Ml5#V@jsm$UfU`ymyY<7<jJR*m@r3B+G5QosD)ca2xIm-NufQz~4n~V^S{W zaTMAb13X;}dc&tA&uy$I!tY|YaZ3sCaf#db^8~l?SIkLK6~;LYxW*@R3+Mv#(1bbI zhtHi2sJGZ{q}__|_<V&=DBw2!i_eTkw~^U|K5s*Le6GV>J%UfKJ3zPiJdSzTf4AFs z0{FNPxc=v(82@8#V--Fd|LQibdK%*aUMrpfz2Q^#EO3s`iJ;Hn!1ES-maYC_JpZpb zIGT5%IiNeA+Zb@I+jt(IpIz@Zeo^Z-lJM-7d2S=!?=}|Wvt%y#cs~9v0Da(d*EN`{ z8$h=+L915-)+<4GsJkC^Uzq|rG<OGfr%W-Yr&O9>2d8#bnG>AmI`fv4puaO%mJ(1n z(d0v{6y?iH_!9Bm(G|)+7|C7|EZpO5hCosGUb9d9bt!bw+=VhQWc?`-|DGx8+*5e+ zsuAdnz$nnSNV!7Su|1uU^h<pGAsfHQ5zSefIpZ>lMepiqWrn(RJi4RoZHoAwm{O(2 z&+3erE+(+=u)@&i1lC1@F8`pzTDDIAEp|jt{%v~S)%Z(j&B`e%(L_6a*^V8~mUj9c zp`9r@XKI{dN;Ip^x+3cw8Q2l3SU&Z*L7Dzeb844amV$B2sDhMVef_54#*4c#Mpxkm z&*bum-|%h|Wy+;lrONmf)OfGJYZ<auS}0xhIzm^6kJ7?lWS%2(q4zn?*{)yh!^GfZ z^6-3&-n`g4IN24t9zXMNhyB&~yJgE3p$~)fvAPTOf@K|n?;>lQf5q3Sos|*46Y)9_ zf_jdd(&)1#4XmQ#E9<N>^V3n<mz)(DvH=%vbej2@NiD&`uH4Rr9&@S@N`Kiv$(BMo z8WXg?J5YB*N2326GruH~ouu0SAbBPTyJVSDQ*dV<_B>z{m{|z4bq4Wds!<%+;K=Q) zYl-+%&8d4T%gwS5b=LP({3&*v;~3_|LKFsW{nO(&$7Tl0_L!HXSK=-b3@nuDH23Fj zc7=E}K%mp<x|PQyo`KAqh6O#5x6_&D8hpV{ce!DHGo-^+^@UkzxT<!!sv;qtd*hrH z^Eb|NU031=<z?V+-UopeC;obN;=gG-X1T7w=eoSz`0@t6l<b-1n)4ptcepA()DP!= z<eGYF#-MV;RdH(b>E*^O*THsHR=V<>_oU<zN_~=hu&yz<unQIb;~M<hEZ0pt(DlKc zE<?UM_<feE{?pt83p33!BL?q2$C`tnj8IXct6*cX*^zsoZa3z_EKI>9osLsC@#mCs z`0Wa130Ce+1F7J=SE07{le3yZ=jDj}dUuVPXn+*dW%3F<$86smpwpb{TtglJS&$#F z*tibH501SnC`<_)Nc5QN*6?{H1I6CKY&}hyKx=>j2?qKIa93zIri9$s%hmKTz8-}z zfGGwk^HAN)3O3g6v_V0){@$yvL|=fW=V~v$nEsT&!mb2Q<z(Snq}!BNfdsv^cxNr2 z{Cm`O2$7OwGmn{Le-iBydYf?L={MubhlT<JQ!33120vb9WW67py1Ob^wlm~d87x$0 zg4y7}Yt!R2*KWf$B*>$oX0OPyx9~l9E1&3Cjg7%Gb?WF8Eoa(K@-k~qjjc(-p=%<R zap(mna%*sAN^qt#IMYy9?ZqJzg}cE${yjO<GF-Qdml-on0RW*ATfgU(fOPN>k-x-X z*)DA5xcvqG!sIt&Rywi8{%ik8v)HjOkB;3QuEqz^7o`rPb~f51V$JmCI&{qaLAiK2 zu6^R{9+l;4>0^{CAeQ=W?NnLqOgd6K*;YH>qR(;d$*!fJ6R5H-v#>KCWWtbrSy%36 zvuqb&bS<x>Q1$P@kc%LYm=WaPgJI^@X1JEaaF0;!9EX0iMq4r#8f^zrhsSrJ;i@U> zrkS=j>WJ5BN2iTIrezS$hWD{Ja@?stx&q_~XIp9<IVK-LfgC|sS?B5>lg^Q_r6_K* zP<a_#@J@SVqT${0KKLiWTEVU)>8V0M2DsW+*a!F@Q%70N(hEsm<h9exPn}X(6)J&} z!o@VsP`WcXy))1`*mZk7dUL%n9J}^Dy?Ae8o-ft)LUCefQDR`{#p^yz?%T1qSDt@2 zE(p5gH5NoZ)we^we&b-$*UOR{o9FkLb?368$i&9x1)Z)JI?WFQpI!V|p6?{r3*!<) zmq`<!CHL*zn}jBy*>ew=8(kAY4HMhU9iWOK>j1%`zvjMv(=~v=>VJUih5W?)Xzz)6 z{x4ben?=R07s?Yu3lanWz8En1PPXoIAh^XW{_o_z+X(EJA;<Zs5t@{kyMEC?G~T}< zC!wxqe(vix?#1UfSQ={VK!K_;eIUB0c47gZjc+EtZ8i&?Z|ujRLo;XKI@v<wvY;W; zW{VQRXEx5<D(k4MBKyrxgW53XWhTu_-&>sK1YP^Coehg`cEZ~Ge^Ftm-1m^Svn^Qo z0Xb~Df4J#4vf!_F-OgM#tp5v<=Dr$B|Na3OiM>7Q#Vw-Zi=mJ{34afyqgD8cd`Y2+ ziCN8yFT#^N*YBJAt_PO|9n0E#W^E5n{Qx((pyAvO^Pp=|XI67?;qInLePtlxxN$fP zs!;07sFr}E$dcCQ6gqLTKp{93KXTXI<f2{WRCOQr2f?MZyR(|nFr@jAZ$c@z;vU;= zrek<$JoZ#|A>il#2ED-AfG^kKYWzLg%-!eDSW_@}ngL@2;NdJr4c<Dl4B*`r{u3UU z8;7)bFwl@=HOBWVZ2f43RoS%3|9bAhg{K~dfi<tkFkmi}T`w;&7QV=tbTD_HEA%vf z5N#{t(AKCc73J=$`($RIH6ofTcVGRW;KFT(^-$HV2hipovn-WI?0v#mU%oR~xT~db zCm`n;ptra2A;j%ESbMmUWM$C*mf71J5iC<d{}$GoAhj$3jN8L=`5Q!0Tw*TD5GlP4 zcEf17k3A=4wX2c&RK>6qzM;K)bH?l*k?hswD)CR27+!RfYv~DWqf8Z>h1+r$?y390 zEc}2wDCVOkGi%E|YWrTfKpRU5obXH$UAQF<AHL0kM6+<GS+*n3^uGm}OYdgkP7DGg z$SvIE3Vq3HQ}=`!@JDB$ihYjNG-v!hgW0Rw*F%_>M`}~O%b%WPv|nfXDcu9jslmeC zf%=RD->KL<T82a#==q3$mwE^;H&G+5rm1XrVg_hw;htdOTe<sPw{HaGX3LOu9`(Be z(0!l)Xox)^f}v_8j;2G)reC4)%E&NpHTtuSh7Of8U1VW6fsGbrm{WJ7NoefcmWAh; z{%uq`Aky20lxLW*Nyoz`zRN6pE06uQ)P2l`%l2rf(F39km!5?5MuE$8S*qmcdVw_9 z*67jAAcrp<+LPGI!ndHxXrYw>TUCTPtsBfu^u@x^Nz<C8MC>kq{?W9b4v2~LJ#nh4 zLuI2uX8si#Nt{wx`n!fq-5H#^E0n$1Ovc0?NBNQBQMa^WBjVIuKrg17G5V>y{2xX+ zg6z9+H`fcE^xSXi&o#I09Sc@&`jZe4Fx7#sArB(8>6OaZ!wEIOP1+E2g$}S7tlRPF zIB6vbw{qi}Yp}u8U0IvX_U{T#-2zP!qO}rOxC@Jbzj4mXb}jx`F9gO1Hg)D>AwbI< zi-6$Nomd2%U54Q}Ln(j5wFJ;Fu-3;rLgQ)w=YN3IfBY?{{eP)#|L5EG|9H#(p9|an zx^h@d2WaYFYMJ_6B5-xUw+BAS_3x~EB<SDvBj)|bx!){2#a!qNj9Qf#%1?9^t}8NI zbHAzkO5+S;9t0f`xiQt;MjZK-tggaecSn<1wgrT~K5KjKesiI6P1*+gaU97IM|Ko$ z$$e+xh>+trjyZertULE53%?Bn_hMV7VLCNM*7d|@hxVlWpfi{}789BKPTfBtEaag5 z+hsX9HXS$n(YjK(g?n5fk+Xg$fQRIw5qb8)ogng1_H9-VQ)J#UFov<_*pkrHEuf>x zk!+j<5&l91NmKLuX#gDses+i;-xW-T!P0)5xh;GPB?V06vR(P;91!J+P*LEt6{wk^ zX&1<u9TD98qeE~LrN5b3%_5njRyp)(CA3XL{h0~=VF-r|9SW;CIT~lTwc;ax7jeb~ zw%XstOPQQA;1(`)niKbIEQ&aID_0xhJQ#RFOA$?|1oiO{G&Qk<U}4)HAK7<h8e~T- zVaipRZWnFEtq*o}26n?<0$6fsNEMI@e|9=t8~BrEKFDkyvm_ho2&pts-{sFGJhNxW zhIO4ixRH&*F61zSOIS35%Uj-*SY`%H&`OolixM^+j`Zx%xWU|QzZDYHqaNBvTxC+s zpG4{Zx;l*`NNPy}*D*7}M#jCbY1zK&PIgn2lDh+&?#P+_%@r?+E`oMX3f>{F9g8&- zW<IwL2$(HMaf52x?mHoJqhoU9g14TnG9m*$!2b~6!BuR6E_AUWUrfm3P(pve85p@6 z>XVb+&)rdXz`TQnfZ3CBFLlg2-dw`2T9)u3|FsX%Pp0U$iM7ap9cbTH{En>m+pFNt zH-eWsTJo7Pk$`iVR<IR-b(|@98?qkZIUqDR)){h~tcQc8nhYW5WYkV|-LoN-{(E{$ zlHLtD0(zjBk|x>gUYHVxvnw}focXzA&9aw8$KVMur>AA@ZF=8#Dohg7u_~_V-n!|c z+;4CE)LfVjZa*8g3hXbpS(qBizE{MvJ$E0h7dR-Jze@D)(hE_uAD5wK%2G2Z)_<?p zzCv!eH3LDRx9CrZ;tf&jUfcJiSI<Lvc{q6MHQ>4wN&>{|1l^`0M{^hqU65)95|Y#L zGZiH=5pf$#?ZvfKV39Myb^8*03;8lrHWp;|O{}b%9P${5f9pK$)%(6+m}oF(k4+gg zdU|56&0;6Fd?X;dp3M%$yEI?cGBjcCM}?tF`OUE+Yt!P9C<U{1UEkJV%8IeMZ{Mg8 z@nKsj;Ro?5`r|(Q$l638xJN)b3mkAR>JtL90Qj`_;p_h0WAOnn&?46oFK8a*TO;Iq zrI0TfHH{opN`Amdvo^^+h^h7C5Xnjn)f&sz3smb-(BOI|`EZd7XwoRw9CwX{-2GS9 zCR81a@uY)S8Qe?9CljAM?pzqDHho9FO-F+n4RrwAHv$b9*xpcX!&XbuhqRzCHBnmx zL$wGxqg-un7K&&;1>3(;o%JW6&9wN6tc3o40?C3Bvwp(*5opT*l_4UBAX@IrIs$iO zLY=V=8;&6w<GA6wS2d&k{|how0<5UtvX?Z#hsg7S7=PqJZHR-P3}V6t=PvsUEa^%! z2M4P`$)GbZ2$>}lDC`X?Pa?Tw!m&B8PpDMr+-M($H1g4!5IrC^k3DB3M3Hl7PdMd# zk|Nq9Uf~T)H4`)m^fjw9GxCB-_>&5$_j6ELn)$|%cTL9$htp&bM=*-W_*j|(c&KIo zyc{iS&N~~egi`NjW2WPj|JeX4qOWv|qF`#Y!PLkLCgbd95MKt~WlzDEVMt&3LTq|u zse(8&opTLHbj@xgX;3Dv)=kx-sWdYW<dX8D6|gOK&Q8FQ2o1c`3|`1n)F;Q2OHwG* zbkUF3>Y@@lh&|qHJ=QYOB0I-YbE!ziFJ6%YQ%g}Ey**%+jam~ic~}r%AHEOMu{7cz z43P$SsFE|aj}OzDtseUYmZb32b2~ECLm|BT(7q3S_GN^W0q{rt1n!GUY=~p?b;zW` zR<kf8i<{*JXT6U`u?nZuG{PN#$fJ&*3@GR?1ntS9cN^)ZFe9lj4V30lx6b)iJH<ew znY23=^8M7btmdZe^)*<)1`arG%&|6_gmAtgBq101-$Ly}W<iD+xjW`1=agoq-(*n8 zluuE&wdqwqEI!kp8cGQa`IZa*{_zWb)MGE3a>_F53q!?5DEn?iE~djmKdpcOq?@Um z%^sShK}9{x!t~%ta<fjWBVYCq<-T6GgWZF$QbC`Y7=Qu$7i((3IE-w8zu9Jf1^$f0 zXOvk;Rgwo*8-|}HX5lbYNe5oiFp>g1Dpif;9h{t0Fw`8gEX~|jMaj&Ai$>yawsLgA zP%Q<|zDDj&vBj<|#1dm$JdU?_{g+3!p?C%;6oyiHG>XNlWJ`9B@9j=dkVI#GqHOKP zKWKF@rF)V_o){xZM{qy>^yu0|gbc^0Mcx2a0nNgEhq%PGf3Ol_@D2C|!Or#O*wUO~ z{sESM4STa-=Ji6vVPt~u8;TX~cJqzK!yFr_nDs>S#**MAC19SDZB`K@JK5j6QmHkf z62y-t*1vbPES4P)Og1K~_b%khHpN;Pm=hgSXmEoXnwl4k+gC)VcAoDdEDb*1dk_pj z$}geqG0t+h<oPc`lFg2|<#(4#F4Hc9-C&WwumLR8S?5FZYa2W#1RmD%7&Gjkv&c%t z4l@s(x`G=}V_&g!>}nKe`&M-&J8wm-i?$DAx*!wnanJM5@Khbr|81pM{+EH7Q!O01 zLeo)4biS);GQQfLfaBr`kTtr|UswRMe9gCLCxXwe`a@0%>DbX;Dg*c7D5UoM#SzXL z_Pk?cKfxl%+5}ng$E&#g(Mfm9+f!8P`50jm=<27^t}8Uk!UzuH7#@d_=&%m=x<jO1 zrU|HYrR^b_tbTWa5D;whte?P2AlXGWP0S^Rll|8phT+3OX}`p-bgr&+=8sk4^8Gc3 zHzN-6kFqu7Kg~{?dD)?hY3M=lb2(S8Rf`XD%KaG+@sFOQ<h(!e2h>hW0>6YMytvT7 zl^f3khhRNw^yY`2n}}<q8+kVZ*0POUeR|5(2@mYy^n*W|c=k)>>_k;trZpDUI<7`8 zAdn__|7<8|m)R{wbCj6}dwqxvf$?F#`wP?wCnwQx$hFaY3`;d}SX~PDz_zSS>YC&F zAq)p`9mbBXHnsb5z-KYkNX<~g51Y9oc>SWmbBUxuaSuBZV$(EYsru1>ZmTaJn0xnr z3v>RgBh|4c!ycz@KP@=SYNX10|E*<)cj)jkxDF0}gq0YC1Pnjibx&VRv12s1miuNR zquVTUFt58VN@40}kd$;o+S%m)hO<cq?P_`lUyowoQCt=~v1N5(e~;D4ljx-VcP0W? z)`CWq0Px~8C)q-8p?;QzXFnla2I2+|ML!`I2NYeI6;WTzk(^ot%0U~msV9m{U;-o| zK~Ou4J?e8vCQYb~K9DZpWkRm2>1zDY5<A0x9Nah1V0{7$Qt+k>Z-_V*MO>A7t%$7{ zoCJn`On+L=LZg28ojO{y_gb85p>@GB&^@B~Upk_(kK(@T=rHTbU1-#83oJ~<4fpiU z=$bD@Yc{o$W8lHc;|O}@lsNo1(8Yf2i8C`}nw7Dev1~6nFyFyjgUeEpNfYt=8T?HB z8-?bmUsLPuD&+WJXVzmK5Vw3A^^EB1Nm&0jMHcP)i2&Kk9NuaqC6u7w_S<Yi5qX*D zkIKvctpVxk&UcJvMBR6;CiOE%^Li`anXs!p-qq1D(KXm#MrDMtJprc{qm)0-p7IOh z7X;pWu?+BLUTz0pu{hBA!#eufQXt3)Y>L1_7!O0$$Zf5^yWHb#jPEVH3M>SAn`)6{ zC;bjj;F&o!6(^vBB5bcmG29;g5qHg9k8oERaRLvp$GfvzYrjIxA?snwXCZ$mG^z>I zA@RY^(A=)9O`%1wPEyQ*UR}{vFJY@q+ZQ1=g!olwFy9$|35h;&iy^HK%pS<TtupuT zlWq4sd_6(bplI<q>Gf45R!2B6OlLjRme9-El2<|iCNoOve8(Y~3`orKyDHVYXA?UP zvt<UGId*cLfgIm>f2#<6XT$0#OsB&!(^FGs_XWACd`u!3Ia*W(26=!0UBl`sDco<i zi_?BmtR&uJv3CG=UN4^LkXK7yXqZ1Bp}h}o8g5uUne}iwe`B+MY`jkcu@iH^!%tz0 zQPc}J9OInb2kndEcox$G>kMA<l-UXDpMwPl6c0y+Z>j}fKf*Up>dHt6KY1RYND+Y2 ztpR&{6|B!I9;R=Q+(GB$wOn_ox_|N}`;=%MyL_e9Uw`)3>(Krpc|)xly8lQ?{O>qQ z(0y^StU2N3b9=EnnBx7s>CYgyXgOkanEY=2cdt(o1ai{EgflyTaUPp+ND~EYVtjlP zgy)F$^?E;aeys9*R!)hpY|-}->&N=fiZ$^EHnB+-2i6eG0d&1;N|;hLJHd3^Y3}## zLOJtZdK{*x`~JuyyNH5hhA}SNP-)&&3wr_=)<qY+y@I#Y{zSj>41`23v!f4Nwj3EA z$Fnhb`Wyis-{J81{@=h8&m%F`sQl_6vWWbNz(s8u7LCUvgW?Jof)yS3(NkSL3}(m1 z85~vo<cgRPx`H8gf;8dliTw&QHh?u}m<_`aV~Alw*j?<|Zf#VVqn4VhI5lXb?MuQT zjkNdXP2$o9j@zN^hYQ?4FjUr6j&mY=zG=m{e8ZucwNA(5`r|3P5$~rt@pI_LmDutZ z93mu+c27~i|2al7K(-#<!9FY1z%#V;vs=+%M*jyr2X=Lq$AhfBPnw+IRyqYR(;)Rv zGDmaIO30Jy@yt$KlZiQ2|N4D2b=Y@iB?Qmw>hVl~fFvbrr4?IN-}ShtYRVu92q3%b z;7EklF$ccS7uP#VW^l>(3^6q`t?7OLcocZKA0`QF=$J>VSubDK9A*n1zUGPbbV~-{ z@2_56gWML{*3SfQ$$+=;wC}%+WW6uOmznGu|54o9@PDLL#XBiB*kd_%wK5YF7Z(_@ zX5@$GW3|xGR<&%m(DEen)Wc?D(*50L<4qtieb5igM$%snnT=Led*LCo;r}E)GwAde zh&_syNNhS@)zh*1Sf&G*f8;yTH&$m0F0jSYQ+jpt=wU4#VReHPf}@+O_;hXT)HxjA zN0t|7wp;Q7HcWR8FNZd#pSYnv{lvcU>Xvobo6`Z_9=qO&CksaZL^(!cy>vsR`oBx` z)o3^jFFtRu{}KFbhf_RvBVF1JU>Kv5y-(u)?{dqq^qrteY~eCLDXVz{bi@XAhOs*W z8<1+l^}BVU{D|EM=&_sv;eegh`EE3IGb2>k<&n0leErpwHcMhH=+E<fT@+NbKKjBW zNBUS3&)YP|#Z3MBc#%T|Yzx}Q!<LM!HMEReNjVFwmfDjpOHL+-o(4OLD7Rl6!<u{M z4C+Q%Djhp1MRW4(e8nl|dlr6xs{K({UkpQ2fT7|4h{w>B{)b{n0*kUd?8C*7tEmwv z^S*Q(woIIv7TYp$gXT#DKh)L%Fmzq?+S&dKgz>m@qIZ=V^oZ~`@Ro;@b6!{9!qonW zxRN!s##JF$*4I}r_WvJXZ_Ac&UqmCL+Gxv`BlF{Lv8`P6H~0|%^s~c73z>0Zld7~5 zPgULY_Y`U3P}Mu*f43&{8{ech77<+N<ND1y%Vx~WMk8rvg4pkAXCx#XO!W2c-9r|+ zSa7V1+MWcE{3O9{D7>ZnCmS&1=Q^$LzCC8WV{s&77S@3VF6LE>DwuZf5a$e@FU2bI z6fgf&sch4B(!iwvM>*X`MNSwB3HTO=PxL4DyJIwa^PMr8t^0m9S{ge^8uO^nmRXIh z9tEY24EfdfPBe5gtRH8u3QFPh5@xl0>lZ@Cn0dp1gbM<zNwW#Qp|cap)f?GxI&6cK z4;+a2`<W9<;K4`^EWk4VbcRxNo+_3jUYs~!rO#EWx(u2t^sYzy{{j01P-vBC_nu?- zK8(Fj>E8RKSnrp`dbhRrsobEmmbt3JT#0K6Xxt?H<}h{okAXj+PM>>7*ey;n=t%(n z0=tLmVD8^xw_$D0ST6D!8BHt1S~x9OxWgQ0KyWN{T9%+cEmXFv+?(f|W_Z+rR!eNm zpU{4u^=z&asFetye-|v+Ldz0dbh>Q`W~jSi_nGqcEN=rw6S-jM-*}?Lz|$-QbL?eZ zS^rSZ2do(AxKz3A4JrVkzhY;w?5*6DrI5Y2W&PM?q*=JbgY(t6eayk_WBtsyDOim3 z+7CPtB&HVbjNF7Qz@Eo(nV1@d$@hB;CgAC9?r|6gl!1~zfUf~9Bb!-MB{G_|#K64u zgcb>vA;(QG#kRi;-=iOih1et&J$6ubgdL?WMc@GHH0vLisZa0M&}jYzJqC7Xh6*xM zF_X+(NvZNosZ_sSND80=6;B!7!`(A1Wg6U|^P;boUI;6Wu|;lpI1x)`xcjtXh6npq z(BG6wZ`u{0Jx6ww_WZqBA-owog)3D`TT%iddx#S{e!`?6DxQ&m1TM>q=V~<3r6`-m z#rP&c&z~^Wh=^L81a&jc4qDsrov%&A!*}x?!G00U_)qfQOa2>noW_BJ$U2C47;u`N zg#%zRkH=+2{uBgQGu6O48|_OUW5^8QVurjn1Gh-RNmJj^o<c|z^RjdR3v5-ZCw#+L z>`*@9Io|*{6QfUXHMZe@bdu)rI{rS<P!Sw(C043y>3f_j<k=w3E1B016J7ZZG&6Yg zV^2V&jvPJzN&Fe^<u8xAr^%Mj1HF8KAn#DM2oDLMwCOv$ou`eaVnfTk1K)ylm<xn# zx&^%vXH5%_=++@F2DALua_HaDM}%Rk7sDsH*1HT_eC~h~9b$R}aHnn>3%tOZhuhSD zhV~|^i*dyzpTIAux5qfMwpUfDR&4g67zer&d?!>^RZj6L&QHy7s;AWUT8>GbKmHpu z?pnGMn5iF$!b1~$$FuCc&!KF#lr`E5u=<jx#`AdkGwbPjC^jDt+E2A#f56v~VeG(Y zcj5I)_V}edNa2dmHvv93vmb?;`6lx~($t+e+@0)x?D1*z`jaw`kd^XNs~$U>9j05T zVW^*{ra*a&Wi*%}REO_8^JZt(Cb-IR;hupjt{G9NNLYA|9h^QrAGtZXTkCc)yLI{o zkeqAZSRJ=c){ndiFWB))`sY4N6U2%g*v-1o_6*kt3sbOt&Z&4#k;O5R;cIX6a`-CE znNB7o)?1k_ffmb)1*r|aXrG4@xq#6;^CU}%zg#ZPYOEuw{1?L$QiMc}+;8jNjp9P9 z0rMTL1+3c9^qcx<^)%lWZ%Ma79j^x!TL_54roP_Q$pINy=;%ny?ZB$-mhWeZxrcB? zN`ikrT)|n}X)>sXkHfj3V5{BNfvupKv6tHCF()}9H>6a0@9Ea@$>(Yt;@Ed_$pmoC z!dcQgd^EhWMC%@0q7TTULNZ7i?S%w0Ydgf>enW$r9|P6Z$UWU~_2Y;Pfw(maah3Yj zP|kj8IE_W(!dG-YdDIZQ2Up`cEHJaArC40?=1tvWkhY@3Mw};r&_KNthn75qZ&AQ% zEWjSSRzy0)A&vb>u!KF{t~h{pz~Kdvo&lh2=Yg#Jj&3itEgnj#mXiF1hxr>0NndHt zfaMaLN&E3+TL{MzvR_&ucAu^5j%fvYxHm%h$)Z2Rx_mctmG_roN<q%yHLx{cH5rmt zzFnl9k$V9T)bV@bt@M~bySBs%j6|du?CTRnmZPx&f%?n@zpKi-E1xz>V4fhoQaz4Y zfD+I?N6Hs2SInZ=%Do5z2c!a#gQH$>tJ&CLL&oM+<+d(Ni#wUEQsE313U3A+yu(&e zoDk4Tg_Bq8=a&4!-l&qnKyS}LPJ%xlO=FL-e;^~AcS=1P=M*kGC6I%KNnn2u|H*vc z(d~V+{a!d(|3~>4w|<FX2AgGXO+PLnVKmQS=k|pNR#0Wm;PP8D@HAAC7+l8Jhlo3o zx6)o{s>52V+S0~c+zMkNciT-FJrkO7%KNq(PXg5CY7-7Z)AQHMS`#u#V!^mRAt4T0 zEzg-$;27O{1D1g)CeEh8?>y)9$WGHU7<resn3J9O<Et!>Y^S7wb>vS1lBXao;;+Ak z2X6<Tz3)F6`4Qk{?>(z+QLbi+evh){u@EbgxX}l3?uoT`y+oC;Sc?uv@KZ<+*}@cS zG2?1#0EX>5plXn}2l6$lJnHgSxUew-V;~1UMv)`WlSG>>hscX4g}UAXISG#Bq&~pC zARe_5*>e`HVaHIY%t;^mx)<$*)741u2iM^I!0*~Q6+yZ&{4=ao(|9p&VD<PeR?{KP zU>)OaUZ@a<Ayug-x>yB*Xg*f0d~sG~eE-$bf06DVOS+je^s!abH+0J)=VA}5bIA`N za-3DF$6fTc>iNsE!YHt3h=`QC%*9wIz@6x7+$LjA!O;)6-&MN7E)TW@rvWc!bu~SX z5)Ji(5VrpVzL`Y@xOxfK?AW3a-m+fiMkZh^=Idk6Z1@SX&HI)R2@~ejMevJy)WafG zKq?{+YD$qJ^3pFohDyKH*^L3Tyg_ORG9~>3<4@v(0GMevg5gs`hssjQK}b%SRZbC? z_NZ4GDopWIMdqfcm*Mf(vzMn|<yx-{wf%rSv1jO48C7u;OL<d^ynVc~2up(w_{!n; zoZ?Y`d<n+<bmm9}zDx8?*t;Ro=L&ps&{i)%dy-D^GGEue>f^P-={rR&xl1dJ*TLt3 z)k`rg3BEoe8$>0<ZHKn`30FE3lFp=g6C#;SPo6T!SbI+ddE0I38u5Yp($+qwe_y75 zJEb|`Nld)8tq$yXZBt|P%l5U7p3{u>H@uygCU5E*Sl0J6I1?^Kv;5p<eJGeJ%^M7J zW0iRjtCr6)MmhY0pq2)#`!Z?Y+ksD=fwt6{AxD4L3l0Xw^3!L|;MWc2#?16l&LbCH z<?z@=@pS`QOFg7Dgfy)Z_-4yVTSx-`hx&uylf&jG$I>dxA2bQ#(LdD`pN=;Ld)3uv zJ>nLUj{@73CSxNBeY7E_BUP@@a=ekXs=ki2QhjuX%u}5Ib1Y24yafNL-aH^pXYi<# z`-@7AD;0bUUK7l%HX3`tIT)93tp4(R2R10mOdqnTUN6I{)IPUZT!)yZf&z|zw=-T; zTH!h!KgOk+*z&siIrN|CpJm=lK(hAc+~lmkROdhAoSaSTA$U5i13n-Pa~C@OC(Ooe z?uq4io4cL26XT?YuIO&lm{Ym!c1^eoy8@9!zpE(sCTHDKF<TrvErU;@M^*VMLPbZ6 zx9Ir`>`vFp6BGBf9t<+2Q>&oL&cIB{tXUgsbzJ|d6k<fghju%sFU7Uy+&geL1!d@l zL~|_H&&IOEe56Y3AJVoM=k-Mv%{|pyEi={i5VMGWc1SbWpT8KzB8%qTSY_`Nko^$! zt-*q?=91rh`~PF^UErgvj{o6ob|DKyo&_QVi5N+^qeg=YE=oc!gi9bHB*6=ym10C| z5q2dg!O-1kmWQ?U_fu;xw%Xd(s;yQnVycn=5^h2Sga}llVtwL98zqJXBK!Z&oby~Z z8?1dl|M&g8wo7)O=UnE@%$YMYXU?2*?VGXeiG^&rqGCBWNU|;R3U#jS>=z$brdJmS z4dfvMsOn|fopGlk@-;FPT__49hAvQ5uD$yaMEG&`l;5B+cEKFMzWzSV_B=93gxQZ& z9@)fr{qj{_G9l@1fq|VE=SkP)IcuZ|<oF*K6f}bNEV(SQiP%8<Y75^x4J@Ugfni>E z#YP^9|Bx|~bC?l8b8MsUZQw=?QqzF|<&m=hxJ0(TvR*7_gtjf<COAgmpBY1Eo~nx| zW*)l`!ZA1bIXLFz(JVt3NfJ&XL|-oxT><ln<j7eL@(4$>_ZszGoFT<?eL8WacyFJ1 z+SO(y!eEXY0r1L(TTwT3yD<?R<bHNKJcR%!sba4&gJtZ9O%9$q5Y84Q_%%hQ(BVs^ zhBDh0YkO5jMC<$bMIge5Lq4lr&`05ds0bSv)#ky`+WI1jEwgbz&Q*WL*%Xvj!#XwV zUz5~S0(3KNs0K4!%nvA{+5tKduoEp$v(9!?fi2Kg`<@MxGyy0MN>DhUbRL;@i$lET zRYF*jLc*f|Vg$6G(MqU$+IjE2m}eZ>93|SDON4n#2Wb*ABduS814x9IS5V5IGOg<G zU(kBnN}5`Cu$lUBMj+7&2}YcvRQx_FmzAPAdPDtMO_m^z;oxWke6JKXiZoJiPmRF4 zUXv>w-eqMKujbKS0quMjYfY@qB0WW@7$pkHkLj7N^X?!bTLOHu+R*iYxsVp>vWld9 zv-*_-iP@?8K-qDz_RjMJKQ6@5l^!#E;XpvltA2~*zATHye%?MM+H3Mvqd=9uR?%PJ zlZe?1yIf4ncp?TZszN6)39?eQp<jHCovr?e5HK}sgFe*W-$^wg=Fr=d&IGf)wC~>@ znRCvH^g67R-*V<HGhB+{7w=v4{+~U)FLYu_D$_0{m^h$DgrMRWQCV_1D3b)66?TZL z5EA&7R|vtb(B)8Pq~Oo%(p~s0EWqIu1S5q-;vboza8y{|4rjFYr*j%vwSpp8Xbct> z_-1&1h83VYJSpAb+57T;2hW;6oFAT-9_|qy-Y>w?1<B={oR?UF>{;s3ELZ_MX~ELY z41*pCv?=~#$V$i*S8y%jcuzi$C1BAIb{KaHP)-cYaWPu8{%1OYO?KFlEDq!+37o12 zb(E4~L=s=3bKwgjAR8g@NP+5gRy=!hwyR<ik@n+@SoXJa0FLRmTaNR#@d#Z;!Z<jq zbwR?B($a-#PLUTM5(tnESbkxr3G%pnq35qKHHtOz4J5K$tynnE2SiZ{z!JxKRwlP> zAO@Hb;stc@p}J0P0@O>qG}bd?$_n|5l!}60B{;x6KivVcm4R$oI?eJg(rLy=5~67K z+=bswvzx*O%|5ZxOnMWrtgBf6yV30rv}VGvcS0bOSE0fW1PQv08;W)2agw9@2_uJR zx$glc+N|$Ev@?D|G-((zj#!cSNWSP7BkvmJn{Gtg*qvxEVt0kqi5S{EBpcv0z9+ZZ z4@H5ViB}+A#u87Lw~4sl{2K~)KpqRHy4+<QfRmCI^_Klhz$l;uYRh2SQGm1MFgbE_ z*w&`34aQzHF$v2Tv_H|(eo{>PfAk5Qen<QN%aXLG_947Tr$4Hm*7hNz3CG7xfwj+9 z3i{s#r8)4XWeB<LQf{N3VDzpY5sT(a1Q-UQ;6Nvr0{OFxw69lSSuCYxk<vo-m17u0 z0VI9BiSx9Ne}eZgCP=(IxG1*qt$2@@zN&DX_el_Hcu9FhJ#zpllv)Wp8u>s1>ks7> zj(^ac=9ky-OH-XUW8uX7>nR=)f%Rg)zuXCpX9StfFvUDWDIHYg<(Ejq{qg5)?dyU> z?CMia0AAm*s}BgYab9C*l|mND5Il9()^o_>2kUr@7DJ5aPi`O~XF;bex#wmh->2M$ zrgOV`Scp@7f}y&zqZ33VJa&3!uve)>8~JA#NVq)^TUl1-;brYk(P_=GN@Q6fkJI4t zij5}j&ak^m;11>m;*Bc4jUeTm_OlN~Kct)47sG@ub9HV_^(YOW+fN<veeCq@PO=}y z0f92?S*;zY?%(`v<lD%*t?HSR&kx$Q^yKqI1U|oV0_h;7iK!Mj^sS-cMN&c;0q6Bd zuY+L;6;r&dIKhCD#}=57iuJSSs2m_RR%t`r?nN-ny<^Dk8(y)d7o0+stMph9ZGbt@ z8xh>XryUP?dNpXnLiPqN#n)m3ZZ5Am@Ot`Jvt64fbbt($Qj(i_%4}vgQd5zd$MJPK z8`F$eS7*GA6&I98zNguz-D{o7+_g@NUdD$(k3GmN0P~R2N>(`E01I7v6Gxd-tR48F z_~}Qn3CUhPb(O>2?x`q({JBHl|GnvHfAKt|I`b6cah35n=jrrU`SDmhUTQoZR$lR{ zfkLf6!_KruSWg{8yI<Q0V}T=ncsr*~|HViJJPZz{gF!}(waBfi_>Z7sQMneU_oCFi zjVA&CyiO6XKUyk5R%-gvYX&>)8H<`b^jF?tP{B?3?qL;L=S6i6y!hTrVhC9fT}t<h zxV-5VM7kJ?B}>H|6ua59U0CJFpMWv1#-vbYG$GeTKd3Q|%mX2NusovPm%-MIyIq;x zz8Q2yt~X`wDfQg=GfF{NS6p~`<5W8FYniYV4**e5auK%xM9PW;iRUknBnAXLXSI*- z;q#;@SeuA~Jn3+#aM*EL&Iuy_H=u-C;OcBh^-S+<$nsnY$rLO|s-x*Cnq3+gpq(i< zTjl~O-3q)PT|h19USPAO0OMTo*HYI8Vio`I>9_Ty+jk)@KZ7qMbnj4R?{GINbHa>0 z^~3Q;m4ary6%%p0IO4*wY-))%{Fotf6n`gHG&SG#EQuV=eyYjW;`HrIvhRS%$xkU+ zHWlvoT0XvCUM6tdUS?uKmk1<ZFQED4YfI*RWrVjm+zp=b$RL-sM4wX^N6ivVVKswh zxNr`w8iVZDkSUkOu;QEDi|V_QF7K$GnNj5$<~kN7L8ed0Jf_ZJc5DtTbh_VP(;qW{ zvIW_LH%9P8eNZxGxQ;kdnH`3#nR{AoL=wjF+mwQ>*JI#`Yx@WPL4Wxj-at|wbblx^ z-~yv+xZ&UNzRwaek1gHUp!Fix+o)%4P@914EKi?cK9XQMT%ntT`6>Km9`MayW<W;z zBJti)(1fg|;dl*QMy2UXI+dm`!%%8~XtNjE3^`GPX$Lo~FWh%!0x!RzEMIsDz9Xq& zTxjC;8lsZ$i!wBYMqTe3&A*U7EiRON{ZkLw=p77woMyT{Ynl=_4AJ|2?akBBi@UT- z*?`Lmfu#-=h|22-*+I2s4;E=Vo559Z5FrAs4e0DavB|%m=dMZdY+}3qz(%j&YJz+< zLB2YLPBk_w!RsK-^!xyGTxtWn(+=-wnx{i)p7vEX-7-9hhWrEimO|rRz&K1v4$Vb2 z^>^X?{x}sL?NQixlT}{3Wf51oLcuq#GLjLQvLKX#QVKQPE4YY&Swz4r0x(WB#kaIE zVN{y0G2VBUFbcrpLb<-Pgi&lB#)T%WJ1bEN#Kwijt~)DnO1{F-MeEK=q%!*Ztvjn@ zH6fTd31Qm^j6;N+yK%)8YCGq<*!&I{>(nRE0oHG=Z;1~ky5e_@d%t>HM(yx9>QVQp zl^;+VbA;0^1k!B4SI!Qbn^?J7+0aBnq_C~1SWMUKk_5i-81Zy5I?LZHg)oir`C>jJ zIhpz{&E@-%!>NZkIkuZq)(9{^@0>gZhpSxD#e}z<Y*MGuoWvdgmI%zrj+i;wfeq`o zfXp~vPTgCT*<00j-3`i|CZyCU4b!aLq0h?y<yrZzG8f4v!T}t1-J_mzA60@isID#y z2g{M5wmpbkrUMb32xUw0zd&!c5`(E*y#pJx-XsTYLB|edQ?4^9G?q3-y1#iXw;(A5 znQ4?&b8E?;V~bmnu(>Z93|(+Ne$eb`Ip?eIZOiLIde}8js0%v;1j`<bc)PTpy%#lY zjG#@H+^oweyvGlPO$tiNC&jRO`yoA~ip07OTWByp!i2;FZ*NG30&uUR_CLe(D&T3o z7c*Mr**NgotYCJM*B;DH33B53P;cxI5vx^&Nw@_uBIJ`DfE2c8sz0LLrRviT%&-V% z*jApDYcMJ2B!zBKHm$*=oRboor_O<3n=&*sL*0!k)u(Aj8s%SGgBgkP6BK;o@*}AH zYg29v4Mi!1TJ05FOEYpU%}AUip7Prraks3)@@$J!e&PqFcVyX0;jO)(<AZswhR@Mi zVqf)0Z9%;LB-!_|qCd3j50fkp9r{C;<zX-VVWQ<>Z~dWDKCCTBKyLZaG{6JYtjGi` zUK18;RRbKesvQ}uLkXx-i7T!}%j%Ja&mF$c6f~bhFxNt-r*YxC0vgm7*r+IyT7Rf) z@X}O|G1EWvNZr@lCPcsubM+NlSLJzrCqmm4T72w^JImQ^an@H{(5`}%_89eVDAzd8 zikm$Fw@EMJ*&TMDg#vgC%Po#Q2Oj|234Pw(u<Su)cEjr+CsF_^bDGs{frVY;8<m0v zPE2&?0b`y}KGz<Wm(N!Aw7f)VH4R`OaPvO**{bQm1@T7y^YytmxPmu3lub?3mp0~{ zxusIw{WKvRL}+NmV~4Far;DH9dwgxqx9+O0HM_BojBD6qob-zY93{AlL*W0d!XEG+ zV}INZiz4Y}T~{jA4UH^3{uZgDSX=d8rJE&J<MF?Y$D^Y(t4Dep#G?ZS`?U+eC*rWd ze)jkBcL+)2Kk&o4wp8%15%L}u`W#}VDJ&$1l)0;+%&j!LEU}st!^|!bpB_ehdc}`r zEO?J`Jj<QxLw65BfXNQ}H&CMiLfC~DFSAwLG6lBUuU;gFty8>EcRt)7TF&p(m1CeD zBK3rBa)#EKf!N-Ro;AUBy)3H^L$>c837N&uqvjBYmI)3Gyx9(LkU4n(wxk80-X9SU z)f}B$!K><i_troV2m2yehTwU8>;zX+f=_{m(cHW61+Qqq6m1UHbl?>RM>3*F<>8j7 zPD+_XKH=fPAiWP3+oZmu?}zS2KIPEG>)<7(RfR9m3iZcNv@&d$@1t|RhTfYYx*r_h z;0`}H%zj#BXtD)R?jXUVZ19k}_GSydt2{8ZhQ5=^cHw@uf&w*E5a^#Mg^3c(!~?mh zJ_cXQwDrp^lZ(;#@Q)-K7q~jNk@XO=pE~IK#Od3UWN*eiTacpG5N=?~20sJ9D(P^# zQbtRLp_FY}a|0`7H(|-Rft51k|DYvfQfNA>ebFl1nzdY-7L2uAdIYO*Q!24w7%E(p zCOl=cM7^McBtSW`;WvQ*JM6cB26>qHwmA<7O8B<f0qeo>O$I%JGi<fFeIwYVK4}ok zppyOl9rmi$e}U>j<fLDK-DxJ+njLYa>V6g*4XqfD!=~=9waeehzK^gb@uM7@e3oQ+ z7B8Q<EYI}1iI!&$S<We+)#mi_ZR;JnPOe8+?1=LkFj(s8O_|kfzHRX#`;NFuZcyD1 z!KXKA&*5iSl>l)<tzGa@j-c;!IbCr7!cdUADDrpWCL#H@7o1=DoP<DD_@N*z^aC4L z-=!beP&Q$=?d$5zS(|6Lyh;rvv8Rmv;(<r0aft`<;=xj-1_+N^Uu^d^*sIT6=IK>^ zX0g|?zSx#seP)ukZ}n;@3ViXy`T^BvuJkU$gKLDlWPNtLuOYq>(km{`kAtC8F7r61 zEcV*6&F+4v)U@Dj_3C&W?mLWc0B(IPK~{bG2VP+eETZ$6eE(hb>AM#xxm&lfU9f0d z^_ff&E{iU&QfhvV>Ux)C8lcPUp1SnjOWk>KV?k6`WL$`@sIt)&{aCbZvkOixonHrB z=ki|UKj0Y%BwSZSNqrmQp*Q#scu!>3hk8LL-AR79zKy-9P58=b0DP35*96iJ=)6n{ z833o%3*LBdo{P?H2&+B=3&FDa`jRxFyrKhsyNbQ0^X`H;i_E2s?EPBbQp8K}e%WyJ zSf<@{u^yVy9|tE=ahM|oVk#0EisK(iIOl(c+!D?781Tg*W+c@(4P<U5esdSI5P~XF z;*<?<gNV5JNb&y)U({8!R>UecD{w~&do^{hgRa<|*KEn+8s|}L;7Zsf6`P&dX-kHJ zuds5n3(Czb%EFkePS3E|EC=1&Fy16A7{Xn11{+l=<4?oa#e)17r_Q>=Ylq|N4B-n~ z1n=e|r+St$6H+}csl0f$CbD{*b*H{!HZJxNJM5+h_g@;1HS}ZeqJQlDxZG8uy{d?f zM9R~b>;`g`U~f#Njkr33VjMU&N89o~P~Q|>ABW4b5sw46fb#G_lmePl9qKl9pYkwS zV%YOcjid)_r=_{rqgnX{PPb9$0a6jOI~J=5)uLo)O3fI2Ez@$BSymBZjI9k?Vq!~e z0)6RS{qfZFsnxry6RT^><7=nee2w<d+}a^(bHnG(+H(Ai59LxpXKjM~d8N9wb_hL~ zZlf1a{*!U#IKCx|CSCFc3dGlz+bLfpMIX^vfq*P*u?j3~I17;#t4Tk0CxeUlkCYN2 z&`#!9Rk_$2w~HFFTbDEC3rr&EkY~L}Eyty3hHHN0C+wOxc78TiWT&})iI0lUoA~@0 zADW=L{%%Z8b7H<*WSN-G%IJyd>7ouSyu4q#w^*N;@ZW+&4MX*bnFw1M@n$?N2M2L` z#ZGMr1q(FGL({n2rH46rTZNdDxTZ<ju!R_arsQMzqRu5pbL^D-5c@b$Q&RVcp4Zm+ z3)ip=!|F3-?_RO+B)E^l)*u~@TzfY~#vjb=beDE08)$OTE?L;2JWRGfqBE27(p>B3 z4@KtY^!6z&;^h1KB|`_S-=1DSrCO;W=fQf<(1GiB&~NW*Wz*Nbe_=h`E^d*rw=0`= z;4T~dvbTqBRyKKt4uJDus4Fy+zQcUW9XcR%1AQMv-v>7Q%h?Zg@YML`3Jo{Q8c)rV zgZNpj!SUr%MtSfdnz7f@gk3eJOba7`jkd4qJyUQsg?$eaOYt^HMz)oO&(Dlcv_v!G zshl)dVQ!i$8=uwq+=!2EK<Mj*FexGRT(mh9OX`l(-AMf(rSDd*VIj3uY5!hkB@}hG zCxyJ-Gk(8PfDoMTAwK`avoSF=&3nb`Bt9`L$`U5RL!I723ag)=V{CjS>thRDlX*Z} zra>Cgl7MhH@2*%uaorE2C1Ehz<vyzfe*rEV-$)TA-PGkvq1q-jwAxR->-)&*+m#e_ zTnUfBq>#{*@ueqCdA6Y`&$epHiBXy|d@oLN)7as5Q4?PeuB*lk;J)yKt8ySCUA2jm zrUS4IbVMw66rLqK3JR$!k^aVaZ?LjgY?W-YN-QU*i<ePM34LH5iO6}l>3}pHE%Hxh zOv4{0<ssjvVCLV(f$jHkcM>H5o<(wJf@wC&2;e(TS(p(lo4Hqe<yL9am}I`PXLrXq zt}OXdRK8EIY?VfAR|;tqhD9l)5qUoDkHD6cJ2+5t664ZgJ)|hKnX^^b4#po*3Ys!I zmu|$3A;Z?^X1b<SuYmNZUpgKYmIiV?N%_8W4%|Lt!?G3=n|9;}OdL$atD_KFg8MU# zCFkYi7G#QX{B^NF!s;ne8b)#^1p-iBKU2f-vy2csi4+3`6fT#w)x$`voTUAZcLlKZ z|76f{t?rZl%M_ReNKg%_4>b&x+_I8Io=`N$$dBlN2;$lxU+8z<$I-vv?)KaJY4rQY zzKs5T;lIt_#`bTb*#4aXhst9!^tIEiyI;oO@mk~YMNxj1QQsI0L^>|cNVMLLXi@R) zbp(Ov!=d%Mr~XD74M+9Y-*_C|-=>b3{_LbCbI+@>G+X<lcynvkG0X<+2$jR9W+Y8h z|Hk(YB8H7q4fl=&`0l}VeD@&fg+~5hJzFkCd4gzk2}&Yf;}R6wCc+;V{n5UuX^)7Y zOum&Y@CrvT|Mo{5-x2UpFf{GBW}#_IF>S40fC4Y5z$GY<*||A=)qLEoN%_C2w0*}i z#J^niIc_|qAX7RTa|)dzEH@S9BCl}NMjFyCP;QlO5gMFZrE#&C566^RC#fSi1+pWF zJ6U(`DYUfW7wWc(*<0qi8ml=HpGI^$c^yR*h~obXo|I|J4<We~f<VkvKc+#lM0Nq# zs!>>vYBi&?azp`aDmCIgFqcIl4Sxh4vly$=G!Yj(-u5MqJ4gs>d{9#ZK0c>FEf9&! z7A6+r`p&2pxSQxg3ut`Z3!%gAjis99bf>YwUC6hV?Qn1PDD#T6ALQ#(#<q?3#rWvQ zy3-Vkuxf^~X<bucnhWaH6ZnJs?t;_ew*?&ow*{v;@UbIG3x7}(s%P9b-l^QSnJiLR z2HSYEQZ@?fbQ|_P?nEnV@L7(}efX&O)ZkNw&rk4Kh|i7q{1Bhp@VOhGpWzc{i;uU* z$J^o^@ecaGBaS|C^cDY#?{Rh;ed`t9JHeTN|N1!M`^LvR65^Ob{jlAIx0HAwE-{fG z;Tu(^e{6AmxN<^bJpGRfIvff3bAk9TE<WnNKJvf5ef!#M^1ICj81Ww}Ntoyx|404U zY}|&8yWyv@>27~$gbWs10Ti}AeF>csPWsDKl=R61eQur0^qGi1L<u4a(+NajLV!Zb zrmYQUoLTm*Ocg;Y+B%M=O+U0S8lPeK^up&-d^+c(xz6B|jPK|0w?F<~h7S#ghD&ZT z8aM{WUqB-Q7Qaw{295F3KbHS!3l;zMhL#I@a<PO2rzpS=@IBrcmq7L7;u7K$Y$(Yy zC81A(4H&2YxMkFlf2jcdN6^S`dI_dVT%6Nsa{^wpO<!&J#B-anqAejIUbNi(U$iHN z#C^mOp!i1BP@lkOdRX*lGU*bqB*8m#3vvXxo3JYyoajPy3>MJ~G7qqu;M7;{_EkfR zjpHj7d`|}A36&Zj8jo7;jir9bEeM67Th@5@)qQx)%{bhz?onRcXYVAH9Z!0xs}k*B zD=&T^&f%=uv<?yQIA`<Mk|O=2%-y0ZsHjOWEgl;W#RC`fxJpPkCoP5MfI}mYzkvie z#8=@wGIxgY@nQGVI8`xsg7)NPh};u0&9g|In}I_nfo7md^JL&f{~n_2`rRaDcje{q zr})}jiYw1qHxFY)ppCk{L>UmL9q~BgvTzLGRP(U<Q_ThF8oM7N2rxRk65G$kDsIs3 z!WLLohWa%fd{q}XaVKw9Dn>N|#}j|CiL-kErM2YP_4e0=Iot*bp+TH9F>fsH_~S!B z+XxZ_p&rrxb_Ir@L=S<NpMo2W<%hDW`OXyulZGjI2O-nFee4I`D#F9iY}^HQ?pE(m zdBKKnXT0y+x4|SbKI4?UrqC6>@HuZk+)fl+{sZ4`d*~9p_V#`2R=mc;kjr<j%iB-? z>Dx`A0RmYr8YiJ@o_d&&_1wzt$RaUs37ND=dx0-@1=dkUcR|GF@dgnU|4sm4CFJv$ zpNEjs78qEdTg%Q%%)WpRv_uXf&yR`L7zOvOZddm+{2Yi&SKNE%_Vj+e`Thz^Cljep zLc=mUwerl0?pWxVWoUl3CBmY>?G>~gmVwhRk*p*&3(271MZj`Tn!GwIL%la8f^h!( zl0a3(|7ZDdbxLG<lKNnh58E;RN9DsN+;6B2x);Nw`fKTFj=|Z>bU4ci%x|d_BSZ1? zrI%(w)?{cvWmNExrQn3<7Ay4@m)RJ9mXeUYM&G?^@0#YSBjrz^DUJ$PSqi^L?U?;n z>&>EEX8mNO1bGb6Lbym~hNaHa(RJwhc5Xf54O8>OjiR3W3AcywQak-)#*C-J(iur| z3t0bJuA>FF4Wix=s@EXvWmxJ_G=`<#Ur{ewP;}>g(3_YF#~g|8+*CbZOdr8Fcbh#U zY|Eh9#nJubo24dLO5JIcVoIb&Lxa$Da>YlVAQJp%Y|eJcZCOe{ZHIET^JXYlRXA8U zR_`XE&TI4%PdKh4v`7|u92!F1C1Ox49TF_a`I)8Qk5EvU*_?9hv0`BuGJD|ORypv5 z?(8zh(!@A4!JsWr%Q6&Kf;tTsTwS>4(hA4Uxri2YNyc^Krf}c(WS$DApm&7EHnjAL zOiM@PQ)6}pDaVc36Uh^)49K3;m|Z|$8?$HQIhZj8$32kDya17B$d2xbSL58xRl^aZ zvQIm?7TweQ`W+g@RugW>?4Ui>_XsA%kF<3}S;fU{A1O%BtXBpk(4xfyex^ve0~RJC zRQ~+PU3ia)+{x6Dff>d!%Nw3Z6D<W@DEOVNCRhr8A^;WC>W=RZKqsBHv<X#5eAs#k zYz4)Y!;+KcGX};(&2d_&{d-H*2T_$tWw5lBi&$QIEX9kWK<dVBvn&NiqaY|x#NMZF zCuaN$&UnFuW5V>IUfsA3#YEb4qADYeSvPXGIlN;u5N=Cf4fauk$e?R9NLGj}f^TtH zFu2HM*vERG?2SGjjW$}kyPMl$=7{Eu^>YMg_#Q~X-Iy6z1w5A_mn7*WG1FnHrNLon z5akgxiFJc!>=>g~Hw^Z%)cTahfeM!9t@7-HyG#U8z^Yl41(LPsE0&@^MNxuZ@h8K{ z-vd_jJ9U(Kmg2Qql0q~DK9@0FKJ%fzSfZy#zh++9iPx<!Lx1FPPBzKgZJ?<JNZur= zp7P`yT_`8t`3UvdGUQRE6QW63r1E9Hv-ni=qJo>XFK3I2uowH4r@3A!OLGm!-;wwz z3({OW<!9_o@MlACQW@)q6d#ti=@xlQ2i}jCLxe$oLBte7I^oJ~`&K%t<U8HhJ5F)g zE1rPO%oyUexB|K0AkqwBQZB)Qs)@L^;n3!LQO2ALNmDioU8TeB!hFp;uDG&Xk(ufE z+U7%;ojo#V3I(4d0p-CWNViXU9^uNAh-W4x^1`v0eOeYoBSL5B;ni5gaDDD^Nj9<E zA}lH5ZP6w}2ls7HvGl!ZmP9ykN@fD(Q2d>I7NreJ{J8kEg8DvsPDWY}+%Ai6IApaS z*GWmfSP3Jbs-vc}F)s{ei<28ib=CN;<c7rx9jIytnC%v!)c;PMpFLN>dpXir$=mD5 z=;D%$;!i7#f_)5ka8Eic(=(TnJ_hsNC@)$Tr<B*Lr^|5fgcG=ZV_9$fyH^?0t34HW zMg#9!KVuAv|5oagjgEk~jbRUX+Z*#bXhaN)934i{hL$0Y3Jtgv{|MAx7O$;8h=cZX zp(!MySfY9e$){(eQ0e$O%HgJ6WU2CRLJvw2*$(RpFK#z8<QFA8G?d!Jx=A`96@ID- z0QTOYBS!H*Eefm4t(xhE=oXgfEihUiF=~76uyj+b7ZMs|g;^@wQmP`l)HJiyFq9Iy z-Nj3xfEi{QD_^AZn2x3r6+G*t5QOcHQuQuJ;O=w>so)T=Ii!`<rJ<K{{01c;SS-AA z08NAW)O|QxH$clB3s#gDi>sg9EY9L+_gqbu3!UAiGj*Ke);r1S>xP3{caj!ho{IFh zvn#qr>U-=(+WK9@<cXnc;0hDT<@%}cU3z-qioa0rVy*8tl&8i46O$&Q3-)9S*^_wC z0n2`5?7qm@S!@_tp;a$%UAaI%2APl@;GeXm3a6ioUQMp*TI=RZ=aHS@z5?w%?t`{I z`Oe*_e9KUNrUz`$eV`;!^x{5fLKu1=zaVxS=1FAVBnM|<yB3d)dqO(C6FY8K4+|E* zs1Gm)FDMS($ApzH64h~E5tfz5>S2k4vV{KFQD^Esbx0_1`#ba&3K~H223+2N<PC}_ zW5o>3=M(Mg+MWO|FjHLW*19Y36`Vm^`sHdRX*~#ONC9&oZe@yvLH@SHoEmRK1<O2u z2n_NjKT?lhRxSwg8SEtGk}Ps+;9~AXHF2Y{0cgXii)?4QeM&rK3)^$3Jwjyv-@}xp z1-Qe|y%(bz?qStW78Za#WJ;{r=!zWJxzr_Y1e}wBBYU_5NIRLFNQq)8@2P(@y~OE* z0$j+0T`b2sY^bCb7vXh==7u<dkjHro1ZB`A#_6~;9=%mmJWD)Ec~cNx_%|ruaoUGF z!0x!@lDy)WD^YS_8);vs0g0D|Tq@Cce)=R7r<*9V)ahgJCs&=Gjz0zJ^a=Pg8#<f| z??}$1^9GAh<SMDDszjSwJ_gkj)#<5Tx@I$rn&kQmMEzUT?ZEi_x)P>cZhBG01p5L= zU8LU0h`gksmC!Y)S7g+y5cTfndQ0kVk@aqks&^dqw2=&sup(NG0im(wb(2v`jK(9N zsT8fQA=1)#mg^1@!QbnDV6w??%%=S5)o7@W<t1?APbY~>4f@k-`P&41W8uopisE|9 zEL^X&G@M5bmpchv+UXrYA6Y7JfuTjB1e)4Ny|Mkty$P2I^+udeBk-sHn!d^2sJPyn zP|~*EW{!h`*F?*pF#-P+KcH{V@HcAsS^hQwnHp2n{rLR?{RYKFX(IX+ZP;@{1JI_` zzQ{>aAqBudI>{0b>4wZMH|GlpqWkJxb)%>q(-InIzy;e~Ul)4a3Sc2FGtj(i8qG`h z{PYP`<J42F_d`YPp`Vj^QBu>AVlzr(5%x3h2$Q3r67xO!W*vIEJPAjAjbrb8x*X)V zk;s9!StQFbxMc08pdhC557d$jb!JLnW-9zX0YsG>P7$15-wr9O7DKrJR~JoF_e7Sv zv{h`Rz-wAL8ZwI{6g(E&@y^?Ya%I|R(v`Pk>aU)T%>Mx>4!X<H+&{95@dD5uZb1E4 zu8EAO6E<f3ZK6o5Abw7~&;i>c3^fn7GlkLQ`LlfW`s_F)CEH%N9DkU_$l9n(w<&q= z0_uaSbell&Q{1r+VL-@f2>cbLg8GeFsbB-bXP^j}OE)5&qNufZ@A=k$Czc{gn|m65 zIC3}IPGwD^{TbNz)a(plpwwmHhnU9O7U}HoSqV0)BT=K)vaoPo1OzuxmU~CP_Ru(8 zg~>r$OLCLedC&;4d$njHxZHN?gJGSgKA3}ae`rNAW3sQ+7T^co3s@j&x8?{cz^$8T zU9$-E$Vw*;@2mTX_G}3cLMK>6jTKVjL9B1SwlRcs4#DJ`<gt_`pPEkI5SzLxL+uZ_ zpX9l+GdsiK8IR}<ZnZAm82pZf`rsA+Ok!hNMo@(ommK`YWxI->PT6I4R#zp*DK-B@ z)l=D%NXZr{4AlasZ}L!Y5)#b%CJ#nl%NdS!s~sEPLCWm-%w2T^iG6D^1Z-+>#cAyt zxV}ln!8$};9Kl;!NC>PxYOzC|maNW9!rMvev{Zmjvj-DB9Z#lU!pz3y%=<|aXAstR zf2MPu)Y2?zOqiYdG;l{Y<68P}&{5qBlrj%KVj=x<VQT`tBvWS7=!0wHgHtvy-3YLf z-5FJb)gjuuccTd2PoVdds5tcTscc5EcZ5D0m{gm2deU0w?W5E6JLOF>swZNXp){<{ z%;LR<@?d2KWyiXYh_NDL{8#Q38A`C3@MJk90lg!b_;(kc2J+eig&lO>3rSm3Y%uQ% zyR@e+wc$k@;86T&)R0o*3->}cg}<GkwX=8RZ?uMLWACJ0cj$uNUcTLtP`@H=^j_#D zO{ANE=hM}^_9)dv>{xR)ru*Foq(`5eHarS3C3+EKfH*(8*<`Gz2>Q}6E>$JR8o;G7 zZJ33*&lTD2vk->@gx4vuBC9SFHK>)*Ml09^0+RB&koBuDtZmtXAXUytr1`gFj^>5S zBFpEi36YnYFtCWXt)xPO^H63#fBGOXT}saq@zB)n5)o%s3nt(I_(g-zvfP4d!G4Xt z1NHTVc-|lJu%&HshI4L>{$$ubgx1v3Hqwl}h#knNIZ*irTmTq_BHEIo!Ogr$N0A5D z9?3FwLkL;sA~@10r1%#AW1ZWao-54K;7nPX7832$je3(v+Kkcy2=!d&Hb>9398{~p zQi~3msK^4?n9;e-1(9LEW%fjhm=?6usi!)pI=98c|Jg%%_5>}ol;4Q*lvT6G((LfQ z!czJNDBZ&%!0WY$;6mKnP3l#1u%EJaUhsZraLQ{m9~5A;ZX)3)8(T2#IMhW~Ol0F$ zj<A}Yiphp02K;CBDr{b$qt7#Nj_=<NwD{m_=kXfo@;4c>_Y5RcA|KpQr<3$bQm2z{ zjJWP({7HdAg+Hm<j3ng!lMI!D9WuHG_`-qbFb5rFBr^tRLoN){FGF@{WtW;&T1oP; z_vo;?R~cX<!KqPv6B$`JBeXhAvSU4IS;)KQeXUIUW{Sz)WIS6HBr1YzTL(lDGxa#H zFc@Dk?;+6E=V`j^oP`kdumWs?a_VB*2OWvzyFdGdu@CwN@Qr;?8G$(z$v6;fO__JJ zDT&w!Ws6$3$Uq;{ckwO9aq(u|1A289;(WgK3IU?Nu<iHsQ4ebOgE2x=eD0y%47J3e z9s7rn(o^(hI?q)HRYOh>W~=5hrf(<#wO^3MFF?Msh}go2+St?iYb(bH=C$MI(;_Dw z7A}N}#~TPcl^}%>sPSs0L(L#t?PKaLN5@cy$~(n`p&vhCU}$#~h6WIZkfp5y7`mvR zj-fxI42ed8A*S^n?HG=UfzB+{Yp5fMWD`q$+)V3JIb!+W11ufU=3|!=Sei;$DtBmq zhxZpv;D&2m7ftMrrI$-}EFIAvlEsIRm5JParQryqZ9CmF&`PE^b1Ey6-KVI;AM9=E z(!(?<SCJ$zuS3gdz%tVeMkluV7&r{(g>i9AM+xF(wNGwCd{#e-56J7V%GZA0#1d`P zb(FiPgXRb=Zhs{F7lui_L23+IdL-7MHAj%&mfiXz$QUVw#hs)!8|jcZAgeFgAqOXm z8A37WWwHriif}LX1t=+#_62VilbWFT;W6Tl)FIsp?X(o)9ZY02IsmW#Ob1*<qj<3! z$W<Ugsnuc#fJb4qK&9t~n<U-Uawff{`+F=cKS#tbPeRLMMa!gwB&snjUuU%JxnJU? z?upr~`w(6T062uTL1wWM-2<PO$j%a8hlK5+{kp`EjhQ-@<zCIbKrj>tFsFO#>!g$@ zxx3W{a#+*(jeXijSTIdSiS;EFPhtv0a}e`SN{PC)tUR-mB=>@3==4=|SRY$rcTLV* zdq?mAr#rK1DDISiN^tx&W^Bb@1M0An_6fPKvS2JBxc@*XUUlJYG_Vigk$OZp1m_u= z#+&o>;R(eTbvg2uasw13LT4eREFVp)-VU5)DR7P7hb_gzwjl2M+=*ij$j{&&t^_|M z+AM5SQ<90be@nk?(*mU@)C}&DC8uV}h4M!Yxj+tEQ*!EZL4#a~PtfH8QJ%mj9x}YX z+m0J6K;_gP#QVu>7`vPg>$Oc{_AgNZ5)SNpk)b1;1EoxDXuTHtf~=mWFCbIOv{yxS zlYZd48w?RERJM7{Eu<FQSFEGa+t;i@YRJBL%5E-L!rNu$1=GzsruPI9k&OUUNYN-S z)J8&mPDZd0yY9T%2JiX=paYKeC4}Y56gcIZak-U>DEz!OI1C^^+O-`=!J0H@i>N;G zYUi~DPzFl#^hCt61*W^8=_>xK@Yc6AQaSmqqZ9OeB6FSgJ-%&+e4pDC7gmq#35qKl zs!#Tmlgirc)TPSd?AdDem_YXY)raVm_jKIM0@^e;a$H$pIW(&*=j6F5Yln&WROkZ1 zq*@iuk4pFr;<MdzQ`UqmRtZJTkf~2tY$vFtsQ)>QPReQ#d67m>ObyXqq@&z(521}i zBR-gehY<6(L|47qs4Di~<{DKqqYHKmK=>^RW<h`&4tXi^L1O*}BI@$KykhTxa*F@? z8fos1>^aGT9@z~QKVtH+?aj8{oFw%i&FOsB#`0MkgFmF5th>B+Lctew!VIeb=`|As zTPnd{p#@@1J8Z|ANAROWyKthA-bT=xbq1guC8_)>Q_O(;B$_x#db*$V!F<*SqadKp zAriTNjuRL1J{>((SGnRm^L#f9^%kmS4xCoJ`xOpEuI23}ZW)b=r8KtX=@w0sHIX?) zAKb9i2jtqXrOLKmCGr?;F`d7=Ew&@#MO$F3ReXvN4ZeuXU${rTSzGF|Q3SycfoU4M zz<XE)#)0fPz(5!Ip*jTK#iq^eUkS{2yL*!J;r{6=#w6VKh+Sg0y_nGZwQm($T-3H2 z^FumEgw?=SOeIfsd~l}oDg<JLYZpf3?ighPLc;0)f!T)r)1BC?(dXYaYCdN2apsX0 zU?qTkO2UQ)8$+`xem-wVUtR>(=t<4xXapoY4g%3&Wf<7+kC>C`MPfnS;ds2xoDO}6 z=C9Azr-N8U=&=6*&+KKkvdDcz@}ay4BUwKr#t)-gy2hATy{M%hTUtWcO5BdTh^>`Y z5C5^&$@mis<+q1TDEmaWZ9>VMImpsBFE<S3AD6|omI{ly`}i#_6RPMe>M_q`O2>>* zQI^DP)&Rt~f>dI9M&<#ZJ4JbPE98uCYdm9fUL6fGG*IBrg1ZD74UKyBEFFKI8ERP~ z;|`$=HX41AK;dEbkWg2iQ5HgULtlo`kg?wnO`^Ig0tXbPij{=y_-0|q^Qv>E0m6=G zBnxj(+3nyJ;qCb&v<A`;yzN=O9i*0m_uLIt&h-l;tq+3INRXuV!N^%fP_vmA$$D&I zd-4R^lN!dr-4FyaRBa_dh?SKXJ{7Dut_J{c)ZQI~*)t*6#V7@c=g$IlE4HDr|CHA; z8J8ib?<<diBu<b7_njwV6U%|kCTuxl?Rx>AHz4nN1@iWWdci`=+pE&~ZTxN$znj!- zg#XfmL*l`qVBQOjd1ThbVZWPlq{7kMF%L$=RJJvQ^!tPmo|A!O6=*X|-c+!sX9c_| zsgrN;VEfGJn?(M<EQfCr`Tw#UxF1IP|LTi)FH)O|pcegvg8v*fNH^EcfU^i5$~^s! zThom)^>R}4$yEL`3Rf!|$Z7%*R-FLZ-u2b4eLAQPmU6=pq!wlPKDNV9!`fE@;_#X& zL&`>)A!Qs6tR)fpN%!_%VQMSZu(Cw-8@P93Y)Dyf;+te;L7xCh9htkJUpn2VtCG~D z42<lz3utku95Nl86*@+lRFT(okA};Bkwatk0DOH1rytBNF%m?U3F*B@`wCovgjDU? zvnWJ+(6^E+r?i8n;k0yhCYH++$c7atJg&|hBW}?I^Fc{%f%+il;*%j%InU<nM-#+) z7?slt{I;&GnuatDTK7%3ZUXtV9A(7sU#Zhv<d!Yf&~cy;$+y}l+xFtjNN};!J*g^1 zO|nDHzv%^5E)~B<@+<Gebl)~ds0AKmwNxXZ3&Su-vz+RJBsvxhC3)JI0PZ85mQJjS z;p8=8ItB{21EGn?{L@#|2{o&eFsSVqJi<UA)Dgf!!shr%3=p~GT)54Yw<lMiSKMBJ zUE1sM4Y|2G8{&~@L&<ISosIX7hG`QlSt(m$^@&;F?R;Heh;22*y;P*sBfZQm^&;^} z-f?nN!-9!}`4BAh7vttG%o0q?z`|#i^;Vl2^PUCPaIZsS9uNT8J|NHEnD>(W`l$8^ zEI}c1u!|55O%*m)pz2i-CsMV!F^{|^LZxfWtLKWYyjR8U#7F^Ou+nzw!(owAAI?=l z^_YA@%6Op#;U0o}z$hR_6}Dx-fj4GGAnc*jLa#t%2^l}zIhuqqz%poC9%BH7C*T<8 znj<O)+iWK<CNHA<BHm^~`1p2Oq2RV(eIe4!CZLZ#h%7dF7~-#A-XX;Am1=BPx`n7G zg3uv<w7-{Vu$BZSQL}sasoQ|#8Qo*LotGS;>$0bEh*72*M%X^BkzBO<aO;y+1y>Aw z6hx~##WF~Js7>l#!lMmkRSgHD@(y7L<jZhMJ&|RO(~FyG_l#v60zhBYA*}EtXwpg7 z?RJI%SO7AwL;@Fvy-2IgHJRrmydg2ggE^6+(D-F>b(eyw+Krat+hd9|z1d-@WmpRS ziVDJ7+o$!#lxE$7a)J^P)zTJ8BC)uwzJ(Vzxti#PmHd0Y{W9`j!mfq^1L<lUZ@99e z;@fhBq-?4&3{)S8=pFhrJ-;5K$*Ss|^?Um97X1?%Tt|NZ<@|8JIN|4;M{|ZxZuHT< zT;C5Ipw!+#&&o5lKpTu}2q*el6d4%>o2@`yPrGi=O!?6LuTTVm%Z`U|hHE|TS8Ty2 zuGNo!)b+HF!M{VR)V^AVO09b+57Vk(UPn<`<mEOL(4Lsf#|jx~bTuLTY?<}zPCum~ zS6XfuKA8#nR7&G;5^qYewtY0SL1+NlZ3fgZc_O%U3yCHuAsvk7P%mE7V3@alOZzWj zT6u~n0LB-wD-Yj+5k}JAOeV15Fw4$RUB3I%ZQc@J<(N1a4>M>Qs@u2RMDS32SFrpI znqE_;$!VwrMiG)?ynEvXU_9YuuuSK)N!6a=Xiv1pdr%!W5);5|s(hoBHtV*O;Gfom z)EkI=n8;k)LdY2p=s9eMH#qy~X&goiwTu~l9*YWs?l;*{N)6c!F#xU~C4^8_7j7&g zHO&gD#6?_Z7C@flt7@}*uOh&2CcqeQw+{H~v90Hb>Cs04_HSwD*n5F*^_VzM!WM9N zT&T~Mh4d#LDoG3wy#x^APz!neBDe4$<<S<51!oJDysheyB5hZeIeq^?Jyvxw86le{ z4YKYLrUEomrCVH}2P*}9X|A*Qe1y;4_^iR_Wq+FMikdW68vfpfzxp&h|NK+2<GZzd z8CXff!LB05ys{$fKD_`nNh}-K48(L1WPy$<!wWm)#9=~77b}E9yI3~9oN5kj5^4k0 zs0v%ptJkZe8?0qLtNAw(stb#Gr8W#Up(ateuBo3DA&Ob(APNcCs3?rijfdz7lXT2( z)2Mmb(pYYPYhzo>jUFEojYVGS!WV7zb8r)j{Sw8$!mJN2W}o<et#KEqCU-wB*S!P< zC@CFSN{t&o%Cvu{3D&g4`C0u0awBAyD5VcM7gwo~5h;XgiV0;4%})@Ee2bnmC^&0} z%Q_f75B#ShlAI*oD^!@`5WxAk3j9fME+a}0L>P<*f@as<VA9M_wGfO@9}gI6N!n=- zoW`TrU<BZtjE{MBKc<#3RZm{e%~*pGs1-S05sW|&5R5>7w1XoUH_$U{c{?L2X5ts! z!ObwhRYgB6T;Ib}0$0RNFt~fe-w)i}Sa82Hb|PH|w-OVZ*d5#{(M~kM&4V9*AQhF$ z>i`pNDKzZ}>5PP%0kn4?=KHchya}-aWc#Iz4w%K`BH&94$CPQ6+t3c!4c4N*^=lsN zR%JzR8%(2m)3XO|m7a*9jrw%({3*8MS)#sKu`U<4p_>f&tNF$>Sxl-41UX4lmuH#a zlKt8YoYEqeqwsDHB!;>tT!yqOk8@}0-Xft3?RT53HWZ~Tot_|$Gq`?~+3DvbA<^l6 z?$)XJ$un6upIE2~hg7NKMk+!P%;)X6%+m2wqCrdPZpQprOW~C$Y=QFEQBYQ6jgvAf z7v(}DEhU9tl_th7-`3Hu_|s$hP9qjJy{dn?jxj`|`U=hf-LX~%-wZI&u3doDlT5Q? z<S8iChzX@>7G_(9^eOVO%^XvAAzCIM8#OLimY|s}I^gN^I5ncXrP^6pw16_gQu1z; z)MX9xl@J{-{u2$5wP!M>X-t1ToQ!FTN#M@LTAC2zisy|(yMKEmf>q8XoV?~LCsr`_ zM@%eHk0N6V%(t)99CX$JTP;C-AXVKTx)#>p0<s2&se_;f7XAh#AxBv?WEbo@HU>W; zV-S_8f~Pmxf|W^X4y?cvY7VSG4JkG;05vBWrYsaIAm2X=)lo}%WE#FiRyu@nw&i7M zoV8OK+!h8AikDFL_rW*|FYB%S=oGUAKp=-lS13z2yPBlgbx3+X7}1S+$3Y|#%uNEJ zf1MPg?|_&wcGu4@HdP+~<21<-q_R(ogQiZLQ-vpJleBc99vcT^_7xc%y8wmC$*R@f z=jcBN)uh;~n40Y2dep2roI2Fax)zH^t}iiI=vsq=zY$|&I5u}dO*i1kH(P766aqrA zgsb}^D-+RF1=T@Znl{EuP^S=pze5Q&!E$?(38sd%vsj;K6a1%UJBV;F%&){_U{Qrx zG|Jzj&`oZ0Q*?h12!`v`%|TsCkeJhQuox7T8fPiRVIF3w_G@_Pp?n~93BWRqRKjz) zwwzBb(RA>f(6JmnWMU_$Hp#=|rE+fwv-%-SH2V1$s)ncon)e1WPtReZ^05VR(1<ob zr2;7Z;WU4EheXXuMJPIPJNUny`M-ntA7@@1*goN4Qtk1Vv4MiEYh3H4_$jeA`enNu zm=&UYd%eJG)JDneC`l?%0!URuo7&}C+eM}d#7=vw0)%pO!{km;2B2YF<a<8|=*Yfq zVfZjhF+VkyV#npS@Y{QNu?0>P{})875~P07=Khilex>#hJ<*BT#z!(N#GG-p!J%ZG zF*|)@m+bTcCNK^93B0ikn)WEjnt!udvQrPo=xuVSXCt14mfkZ77-kaQ{Ms{-dnamM zYbkZLQK}!!qCcP%gkrayF947T_^cZqOy3E#-$6%ir>7z(1LO{gHiTsZX$SxZu@R09 zVoyg9Tv%Ozr~nbQfa}qfM}7%1l?d_H@)s%IAYT>#D!icVHo!OuI3eGHUo)=(dLiF% zYPE}rc1XxK?1koMNU_$K*MdP277tmlzb7+lWMtA|k%|#<uO?eWT$^a-1hM@=Vthi; zw6}O&C3?S&_d*1Ii~TctLUterI(1=_fgTuwqaU;t793k4o-Bfc8@C9KgV?{2f+H#( zgayZ7K!?>utZf#-aiaSo`p>HjYMX-NgoqC_1;=ZmRHz&T9uKfg!2#q&k9zi-x;Ei? zU%rewZ#uzz|2iY!EcwI0Y|lqEC5($LGrvP}2mt~^IGp00fPC!mHV3ii(+Rh8J>1T{ z-8-uWsPW`{?@e(zp-*43E!uV!<!cQOMiO+~I8Qo|C;9r9;P>zhxSre}p1#*_{wp5Z zud3hnl8t1P<X`n@pirYF9)ih%{WwJH{DjoWS<c$L2s|dUR9hz8XjpgGW~n)e<9C9S zgUg*uH>$(o)h?%^VC|&-zB36pym-dx?YF)VDUm%X{#~Br>1c!YT5x$oRr{KEjL16G z+veY;<l?@NJ-pEe-o-|rvGqs(Zf$Qlb8s^ne!T(?TAZ~h+B^wgl)Q!_7Q+#*M(nr} zni&?U?p`pAuPit%0*}(h$J1PIWq~j2CQY5@3SIlwt@M2geIK9MS(iayM!c0u4=2+1 z!EaU5_bmF}_pPVsdoI4K1L551cbK{+2Aaob>_V5-fs}Efp?HTk{6ow+TWFv-VZtx; zd5B;Rf_Z9&!JWPMRyr^q&i9K(z%Ncwl^K<_fc~gp5lblh)?;a|-S`~F=R<r#_?*Hg z8Kb=fpG<s~;3JnKLGQaspTm*Ia@DS$E`S%%7gknf1iaePjmoC#*-vubpGo-Rd%zLz z9iras%&dpj`)Iw|PBP72fb#dfhiJM*j{@nm1`O(r`JO`??GSf$qk#(?z9*Rnr4Bm^ zIiO`2sxHRVrsIIde}z7N#s6+EOA9rfs9r}A9^cW1*s|Yz2TCCUiuU#8QMl2API4fR zTVV6y?7v#&3>HOj<#66{8kl-Yd9(rh8kxKJ*Fq$yXrM$D8V2g#>AA4m#*^Z|93VF4 zoj`viR9!U(*3M81TYL@3F3_b8AdcWO8{{@G)BYExh92PcjRRxDl2F){MQ3gsXipGf zNzR$PvC`$<x~86L<7kCoW;L&+T%Etssm-x8@)8=s4Osr);%{p$wFs-M(waZy5qb#E zV^jpqYCPobq}GBBU}C)vm;*X^2#=ISIK&8pk#JC)*d9y4%cujHH%3^P9PTEaY`m>- zH_Bk$WTrSr{wu66hsD7oEo%ba5x0Db7Xl^@ctaQsBaY@Vb-BROWgWF~r1h8dCx`v~ zHF&GW6$J8{v93I_ihdo`t`<^O@vo<XK#Y!qfcH2BE%;Z^^Ag(5f9_|JXBXoUUuGm1 zN)Q9`42sNtH7Q>6>BY#8rnB}=v3o(Ry_Z?LiCO!QVC|iPwK?#435`|ap%Y4`-oj>a zW{X;QgIlQQ7PgBPHd|U4VQJx2qXo6ZNpURC^7MLvTX>0Ec$M|DXMsZEv?P}n&l@o! zaMWYe59B>zPS0O+{inG8GXjDqEYtI;@#Yw=vb4~~GxNJAI5XK|O9Nj)oxyAYaM@~U zv#%by5RAPO?%m1;+SmwAe2h0%_Y(n<uF@PEC6!*MdMsJw(6K^E$%1mGa3LGJjX1ln zC7r_>qw;?vmYzjw5}kI}87=s#w75DFHmtp$Pq<Zy&^Ve4o0qU;+Nw5bWtJ8-Je6*7 zok^KP$q>^ezh!cf@MmNWw6yUImBq{|Juau#r(@*QT2F5bL3|1Sih>nEYmmi+ERt`g z4)n@cebAm6G*s^xyoXfMeMvmisW?yb8ng5;%x`W<yHx<;>FLD%OFvI@eTj8QeIm{E zz%P(j0l$%k&c-?SL^3-&tx>Fx%x8U?L?Tq`By}<3RalGWfgrdZD+*%kv7#76fBQXF z%b?A&fT8RhP-L)Md!7&p3K6r0NaS=2kx&;WAxZ+_5hdlz9CfK@%i%L`1~Q?#YJEN< zO+$z{m@U%M2`oG=RPco@a*bf*Hs%q%N!lG3E{0izBw3sFW}NcGc>o09keW<e$?BpE z)!vzvVZ+YWfzUKq6u^WqqUcD&aSlO2I12E9a1@*|1X`qZCc4l@a~IePx>Y!^_GyoG z66i43XMavww`UG903jF}H=A^1T-~|{vXpFfRX5ey&B-~+o=IeTASMKCpLV9zY7sI0 z(!s|>!paorl?z*-D;im@JQqWK#B!Vp?~Z3!x7A7>ixa_Rry!OH!V<V$;Ua=H1&)O^ z1)T!cR0q>uldIV%cA-#2hv!W!6O{F*i?jZm5Gy~j{tQFbAH)lHA?ApRJ+2m>VB-lX zf0|WTx><lq@gD^K$?xRfO@vq|0*5WLQBE121M5bal*}a!nBr6sx!ai6j&%~6LPuX} zBn#x}qB~ErKrjs&wl?M^HVG7ef2xI3e|S7CSw)QMv=l%Jmtu0G<B6Z)Wsdu%lr``s zCacq20mt7mI|ZaPx&=<oe=5h<j%bWQG`<uuKE?ksgepWtK1E|3MSu)}cBDIK83fnL z6kY~21Qcn(7bR%qcqO=U7_OWYcYBpM@16tLULx4?-75*US;=Y+V0+!r>UB+1{AGTa zqHd)OX?a~`YC)=6G)7&Xu4aLVurol-4454V069dMDs2jQ_XY}2$P{V_J@K|de<O-5 z#bH`&5;adLJ+LHD^W@Tl87Yx$oJveWm<-}WaA3G3gU;E_OAlbxIdkEfvEcj@-2#G+ zw9|~{fS@_1?ME)l!f?aKz3fM^VoeJary~d>kTX%uJJgs%XR+e~Ig`}9ra;aVHE(Yq zCribEa&iN+3L0}}<1P57gQ&Ylo#)gh1_a+dCG@8{7rn=k8k*61P#MkWHq2;&6@t?u zp9iIz+(swDNamKdpn%po0&hsI$`+3?X{c^pK6jx@?1O1${bVZ0dR*NwE`)fp?+b@& zX@@Tq1RNZD`~w{fy1*8p-xzn9Lz_~|<5v97(9`@x4(g9e$komXx%Oy3fTM<oK?i(* z_<S<(DIpg|%0m*<5PJ^7or91aTJFzMw^E*FQBA<Z>D~@pD$z1dJhimZN5_nimzyn3 zd`tRdRENW(3#*pGO`<Sm2gA(lQnO(FbObA*rt(Rlb_kszFpq1mk|TSH%I9_PF@<AH zz~e-~F@O}_!^M=G5^0Jo-b1+_PQkHQo<Ov*fN4`kbyuY02F3|IX>beyVT{}5q^ar( z6z&apn*vpbz)y_Q`K-fsGZ&`Hhf!L{IQh`bVyJNo1L^rZBn8!$JtRjHA(gO@L}Xom z!qE)D&CR?%VU+?mW0e9o!+}VaU$cdq^N2W-YOk?s32r9SP#cyi$@UaIrcgc(7Q;H; zOzGje$MU7X`>5M7_n-##6LK4|d?Zw}F=N{sv&D?f#*FO<WMjr|4`gG;b_KF?NzP># z7)j&Uf{)Ig_&5P2!F397#Vl*CQ=-}9ZcE7zz^VifVaOWi?|hz>6~-$q&_qpU*-I{w zV}Hg{6JN<G&nE;P`HNYzTGZ6xfInWkIe9zy1T`fgCQmT>&`YL7LtJMm$(bRcSM5PO zg0{{t35~c!Xq(~8U05V(>7fI0bo^Md`Od0K;S|}UJ$;2N|1atQPQ}vpY?3nYP3_ma zkD0@)vR`Wf;m=f=WC~^#{RK-nhfB0@l(LsOE|-eU5gfOZIS#3(!EuOo1;-siO=cWJ zVLe1`Fg`pp)qEF;p)SnSjmA_R!c+C1m-849rA$jFj(mSeFd&c-V63~Cr>UMomZquI z6Kq-UuwQ281C5$qsvMm;y^ezoJgcY|i!G1Ej!;0o_Cv2!WIin=Sl@6!KChW(7KKq_ zf+HjpN>LN(NEA#N<|TyGB$_R>*tK+9>^^VRXN<SNve=bmVA9xks(I~M0c>gFL`!xC zfTb|l08N@hJZYME(u8@^9JfrGQu0EBZ3sF6nt+Rd!u<>c6zS?Mh@vE+ecu<v$F$%o z{z_Vmkk_pq0))JZ#mrsUW84KH+6ST8g1d4qliWoa9x;c(U0Ec3zJt5iY&w>r6JGIO zAQnjVh{;<o43oU|6|E8^!@=U%g7l08cVu>ML@od!#J5e5{qN+0VdjpHK&Bv!TJLdE z`!u2UwXxa<#p(f}ShWPIPG}SVC>5&!S8rj(>O=sFRTv5%DOH<EshaM7z)-3dlg3vs z&Q2Lh73)(emi%+HvxN8|@~}Za22Vhv0{P8NC5$BzUSdxIA8bSTR44Z8;p>AwJTo0g zp6WYo_gv>Y-P?0DGRb)|e5ZSP##j8BT&&VY5GLQtZ1$L0>z@Ahf;gH3Xg>*8@cLTp zQ|#V^ip{7PdK<<U!XZXr<6^%yxtcNOy-{)-=kUATtep)uC+;aqR+pzz;@rY^f{<7y zP};#73NDf+U}R#nIITBPP0Z%!R15{Z)q9+%>&{7~jIUxNt4(M(u}Fz=L~goBZx4q- zK?ax=K`ckOACpvdPMN3puP5#)ap2aV1QzF^1UTbIfV*`($ta+)e=vn~AF88o@yG0h zO+~k0eT;-R4~;y9`CS6FpgPlgHuC9x4UytKj-#}x>YOoZS-N^3W;;yz7O)`c%+Qme zLN8|(y6^;owk_F)|0Jc3MZzfl|B(+(QG^9H;#o_Q$9&d7&z9ktSUp<mjD?XWa@9~B zah^P?$RcY&GS4YbrV3*fsc=XwLU;tHckM|cE%?-sNH>@g$+CubK^8&(=usB!Wmyys ztS$&-&!&l(PwLl&WL~-e&K~Xl1ZF?aA4149=^()$X8p4Z#V8@Hu77?!Mo#e6M6<#! z=$~Psf1=SSjj-ENyPAe8ms;i#j_Q|-OwWDYr}xDY$=X*`M~2Tu#$qd$o(>AFmZT5N zx+u{@7H1f&z!qmqz<Wa5^t6;dPf{()sL>LbmJDB902XI^)kRB<`)=9xl=j^UVSCct zMCNCT5|hp#93X|o2c$qNBNIe=sFn{g5iwDKr*lmzF`MaZ%D0s4OC?#)!@|KlVo3qa z!TOUv(fLF1ABPGZ8iV}5U=NW3n1pU%bq{AXB4n2xN3^I=%P9%4PV=y|IldevY0ggN z!mjB(+Z=bI3$bKGW=+AErJI%&tp^61gPuzIy;u>tF9$@E4swW)7l2oU5l=~)^r2da z-nY^uTs2spA0=OaTpI4T(gQ+gGZqM4GhAX3I-9ZQ3NT=_k^-?i>HOBk|L^6?#TV+> zwaAz7AUuRv`o8id+@kZ3_x}a?a#JGn(0`OKKS`Io_TS2vp&;OYDPIQbef@Xx<wZiQ zlw|*vd?|bK{|ouzvViy9^5tIx&4K)9`O^G>&L97`<;x=@B+dVy%a>u6q5N0!W$Um0 zZ^{=3tswGjdbE65=KB8f<xn^M1=dP4Bo*r~IAXS)^%ukz91oPXSoD|Q(dq$#7Nx(i zF&L$*)RRzHO$AN;<qdlFLp&2JQFE03lE){UUdI3g*W*4!RAwFKQ3VfCbsQ-$rs~q% z&6s);0ff?XnA4-`5{Bvmhk>EG!0UijX(yXeq`Gv=SYLPu>iG<c6AETKq2Ea(=&P!W zkjG+=c0(%jljl(~Ps#eJcZA;82PbT6Qceu>2De%8B6XNXBPTW;7lt{<=`H9m%oPYj z@{B`wY!kb$#L`Gz9mL)d5TN)+a(SaW@>?-3xjWTcUuS43Y;WCV>55~A(Nz{yvgqv= z>F~I`KVw<(b1tc<hO6FSjf0g2Ry7A&8vdC@yAZ<$Vyp_rr_`_<@DfA8Xg-gEapb5@ zMa6#&N=M%@&<9PQ_l^NyRTDh@T_}QBu0J9`;B_ayf`0mWb{@W(XoJ7RhrM{5C{~M; z)q9iRxrVJ4D23*}Gf=gijQY~!0WYZrUL+@KDxe!PHXK8X#FM%cA>iH2n}r)mXDBAi zqZ#L|ml3^INP2mN5~A~aZ-8Uby!KvTB4$=}$t8M8rsMA|1xKJDbp@x6Z?#hbr1<HE zXqu&K#q}i=>ScwM0sV{~7IRzyd{`pvY3E2nx7a{y6qR&n`6z<nw7J9r!*68kJUcu4 zNxrG2r%<fO%D{ZV;ZoKh5ec5xeX4$q{X5;~P>gD!Nfrx({DZI)jA@FgX-rd0S-1$> z<V+<iBd-IqlpF<ZY)K$0D$0_00v<M=I-g?;UM*~gCDGP{C%ea)Iw8@d&+}B>Iw`te z?+_t0NJOrUDSWX`Pay*iSPB=Ta7?hga53KXxGCtzQJY>mfUGP2pdr#D2r}A8$&kIr znGNDSDv(|(ZbUhnW)^!Nd-G8vij^PZEnq$;iVNpxd|yfPNAdJL!2k6z6Zjud<*M$$ zmrLMtEl}l{4I<}m6z~^Yilqo>@V<@=0x_v<trT=?S*tov>q8V5shCDjF%3ZCt4Wj+ zYt5KGa%6S%6s&xIx-SA(cMnW_*<q83H=uOrdUbzrx-CE+yY_~Udf9jX2S)C;-dH%f z5*vzH*o2m>EWBRt43(^W34xZ^W^7%UJi$yEv*IkFG0DMx64p^7$;Q`^ScKBGmcpBi z!rgd7oM|ENq0>_QVNqNyC7Vq9AVFesIX#9quP~g2nTLfG64{;Cq-?mGx#Eo|CS-EP zjNo@pa|B4o$D)nB^sDtw`r)a`h?p6C2<+(3O&)B;zBIZLWX?uC_Vb7<$jEob6i#lC zmqW0zI}5?n5L0>_W3>OLyZ+Rn>rZX4@-al#pD@;L`qKeoSAY?vKfNg*n!3_<7FvIZ zc}{v2!q8)$@5S@(`qoZ*_TBo{48k9?hDF~>@6D9^Px{tn*r5MTeXFCJz6Dn`1UYtj zu-AjFp!4cm9X;w>`vx=n>-tv5_tm$S(r6_2v%VE2#SMii;$@DRWGOvbYG=C2)FyIv zaIg+@-&qGEO7VZ&T?bOD_I6X5KI~<Jv9Ejax>O>lDV|=o6n@&GGObAWor}7biP`j- zcXdK2eu@<cU8e3s&KDLzkVc>adBJ;Bn<jzZk=vxSYjSCu^2k3)!x2i-?2T~IAY&)o zh1f)dp9GtT*p|j7B2*>XM6~Gj<d;<Zr-cS%dA^ySe<YuqYEu(yBfF#`10QaQ5CL`A z@Uddy1wyZ++^<9{Eb8)_Mc^LeizEDgVkvnql?3R;@D3~fjnw2GEgP!@LsJsn4hC%P z@j6R8bVy6UMUuhNBS-(bEF~k+deaZ}Hd%N3%x(_iFck!7-KYOsq5(s*Wc>V@9<sJZ z{X?@9>o|{hAhep$5VX^MU0ZGGts)w%Xmzg0QgEv5p4GY0@sg*<($l<l;SOwOl}>jY zcXtY=?Kc_lYiJ)K@(7B1!Qi+xS3ye-7gpWcrRw%Zk3k6k94Kk_TT*>E2;q(ItGeAw zqmZm~D{D^ezO~LckJnryqPBr;L35$V=uv-Sy#Mkd8mQ2g`}A0h&$X<y6#LlFRP+Vc zB62!t34PmU!uqNxEwrp($4OHB22Z~e{An9Z@b5)o*_B28WAKlW1|h+p*<&#V|5Zz| zGy#xB#lQ(GIc2zTf(3e0-_pm*L64?fJ4z#x0PGTKm)WxF-Q3N7ecn?1m!dd1XKDX8 zVi)rnaYe=~71pPSqJbY=sM>c}+9-=DY|w(|s@qa_oZep(^*2E8Z;+)4NQG|WJ440f z_*$i&!n5jK#9y=gIY>{vZP-8#=11I3-bK2I5x|?sWhwKVrM+K>_Dp=4$clJ(5+kj# zl)j5fmv$lXWtaP~vSAdFv1%_mle(2Ijak&(AVDpqsA+Aa4(sTc9ud$cY0u#Gvvhby zs8<&7+|h+Upk^g*-iax^R4>egc-d0+>6o(JkX~ac?1?GdZG&imrSSBa!rjcY@s`3D z#S}JpC*rLq^nd%UIlwj?Zv?W1vU#XW692GxYQa%A=;|y@{5hsDj($q)^K1@U3a^PN z+-)egS_;pNDQwzM?4ruF6doZ83yIWMA4wvfnxa%!x9_ruq0he&7$~L0J=(ixb^fQv zdE{9mo4qMEK<hK%!pF6&T(Zfqa@5j#YUyFLbe;e$*3WU@8Q(n7q0V$7tv>}|!Lzoy zU(nHqf_jg_0q6_clnw9Vi+U5hYYnaOzK;?*x21ZNhLHW#LEk6HgP&wS8nUZ5rKl%; zt;laU2X-ZY`2|Q2oZ|C^$E>|;quMxrhp(lpXxZgu+O(4wfV(N0_J??+?(<E$+;e+y zxkKGCz5x%ee+m^J94Bk=ueIZX57AS1yJw)-U-I2>x#vn8&T_XSDXeH))O*~0YGwbW z8|nQ3dVgv~2PKH#7YXI6?f5qSWW%}m(4=5u4h{pYO(_zJ)E@1w%x{dO3q!`AeD_=^ z$^HJy3zkwt?Y<rH?ypvyL@O)<8fb{;&MAJfp%E<^Tx(lq!$HULWtW#|BW^#%4dKFE zl*mR2zHbSevN+F?x1*@MMEmz2Q3MI4aR;a3zl7RAuA74h9#8{(k;l|cc*MCgrXvN{ zkAjJIg7sn`uSDzhHTKw%Wh9Y~^WO!nd;H1PJMhQ-zT&$Df2IGf8eo5#51>0+^GP+= z_wx0-Knj3Onuwk=JP|DkyX@EFRaO<}>9$io(%U}#3NCcI|H*S7)GIprf}wakh{%`6 zN@P4f&$KkrAOyIlK$q9Z&)iK8eS2D;{|L6|hQN<*vmmf$8<cd@Lrw9SNF;^ObK%Rm zn)DtPl%Au;so0p_eropisuAx?LqSUz4O*00Q~ou8o70V0BYH*dH%{a@p(YW+1eaY2 zDg4tW;QS#}{?qC-2i*V2`Ah-Xx7$I&IP9GwbQ$=hAo)k;;u*VHgE+K?bdA#-b#HL; zS<2ds%P{6n2rN9I&HEc_>S<(f{|H4|KsNS~7mBC7iYNVhxTCD@pG+nkO|3nR4q-fE zXc%OZxKvz7L-t5lhjrvD{(V%mFw6=bj&aYJpdEM#PxSs@6fL2Dr|kdtI3n9)|JUjL zS5{F1WozHPA&le!42RLTr;LCTNv?7G&J5~le<Tx3srHV%#PeV@curW&$Q?e5vXUdK zG3pFL>+1Gm<N*Q)Uj^M#u9Y=SK$nGCh6NTP#s*IO)ed`oWiQCGDktV}>tezx@)z%x z@@y;QS?AU)oB-XH6mt5ur9htDtjn_#0F33?&+(;4dA8z9L!RNRLc8x@T_iMagY=1# zXk)B$YV8<9qPa*uP>n18gFI6Vc@`#lHVwEtpEP^&^6x9nyjQCWwSJwUIa10DW-0UA zFAOQ;IWqoa=rCmAev&CCS*C=xAqJxiXS_4CwBJct2JbT1og^9sLKB^cN(Yfr0dm2H zn4~~|o?OTe0O@g&+E1S7=d&7|t~Y#C7c^o!gC=_wVm{iD+f=y25WU&v&g;NorP7wx zH(+!bIY@aun@I6Sh?c-^9qrsWGLPZFadPCoMDT%j^j3M19gdL{tNCLHx;d%p5sEy^ z=g6~sL?+>E4*CG}ZJ2h%UW2M3J#o0i1ujbOAqhc_1iHtJ&N5NKC8A8tF>k^@a_?K< z3f&Add;LAgmC%d~ecKVoi}T5S)SbZxT$%MJpU2BD?!-%k_b$XikhPbIy_tnADpDak zRfi25UGYLnQ*Q3S{C-Z@dcJ?#ye%pU<@50q2n{}bl+U4cQ3IsW(a<J6h@o{)TAhj2 z!bn;@3O`D;Ti+LS>2ZiMY4sFQMo1mCELB}QMqPx{5*g|oNX0gu-jootnkF`uJ93QZ z_+Ho{A;JW=7l(RP_$h&h_XK!mBtX<RKYjtW$~-oCp{6`?IZa@oV$BoIKvfHPuEtN| zLs5%yaiV$#H#B{gI>q5l1F475#O|YP%1-h%B!%YVONy@{B{T~$dCDeRC`a9zo-)O0 zE&7@$I#zj26iua~uh~M$XibQTU^c`=Fq^~#Zb^fVG*0n<LI6~m*sr4%mUec|Lx9M& zB<bjaKo)gV)|vx-iM%P(5gLflUgUU#z+;k9knnzP?hrF9j-7*Hk8^-(lUNQ%_2VhV z*3&YylH&%pHXH!rj3&fNOh84q!m)*9zv;%{O<zNKgkX(MqAs}$OFw0vAdq64;uvPx z6zc>En$pdggXAiSaw~RI4L<(LEc{376t}F#ay?EG`77QBvXHj$ObXKZ7SJkj8@7fY zywrDQu(uo!kW%1O)_g$g@DvnlnRio)NFaBun-Ak5y#;WAgLx1EIO;v2q5y6_INrqq z)~;@6x8XZ)5@JQ*ZxJmr52VK_HS~=vmnZ}AN_xn*9pYLJbq|S`=pN8G)2tntx@j6- z+F+8tgSbdsm5B80#r!J@JgUt2ZMTr>#dZ^AFH;@9$YT!Vh_@85lE?8^Q4LT0o(-27 z4I?$lTuL8PS3y<Dy$OdW$A*!^v!^SH*y_E|Y#@a&#Rh)+mu!|;1Jcb!+mPr{<mPzN z6YajX1tNradmuM`K7>7m5ckHh{$a|)k7CD|(k1*e&9w~qcK<|3b>JGh+3E8$_iE3- zD?(GXPySA;hJ5;%{`8AF%hLz-r_&Ewp57^+LZBhy0GGFs=RG&w1%9J=@2`~LKtKS| zykCoyNUUE=!VYEf(O(id;rAhw6Dw11su=1G1rdMYdD7m|YxJTTv(vE-;8hYbt~~Mv z{I0>`h*$&W;}%og^tN=Pdu!D!Ij3>6sPMRACITxY8*<YZkZ{ONzXggv-NRHQxP@u5 z4(QisBPW4EgLFwi(g1*-s{_JEkO2aKN#?~D->GXiAXb8-$@>jpTIoteZSn1Nlv3g} zyGdgDeOSuI)A8~t;E7~S(4O20DKIx9GGl^KqEB>*yY|PF_-wyuS++4_M@)&g%@U2d z>0`jEap*0G+pLPTaZk_`cBt(UPx_e1)wjNaHRi(Q_!n@{#j`uCz^u_5LgeiM7^>rO z7<%kHrYhY|;N<hEcs__D#TEHxRvoB^g^9zs3F-flBJ+4YkrW8E8C0p+1w(;nghc6= z`>X?3^P!7)MpC43s`lssAYmtAq+kMFVk2w3A!}$8kM;Qe*FCg|XnW)=)qZyvPU*dx z`$UfwZ`T`s0A4bqyF&fxd$`lvczUh=bTK?2#?wpXQ{RJQ2vy)b@M)GnRjy#(0>Qkq z)#($Fe6`XU_uy69^F?w_eL}05G-rwRX&tg~_wPfD$53D2b%Q;3Xdb=V3#b<5Y2_v? zLUb7_W?^0!>zzd9z3)im;}(kZ0ZLOWi=*~Ke=^B0!uZd}17iR@m^2mO$0=iRNu&jq z4?Z`T!G99#I5-$`1;@IB^V18o45*}faQ}OxE8s1J%7ls*I{bik(@D1#rypL0D*+3a zf&Jg_6{A@eS43@L#;>^FZ0%vzJUC8@z{92P&<6k`UFuE;7$eJ*TRFheVDaxYMg&~M zj`2*ZIYvc{G07a`Y*zf7ymoy>D#Lt8!vo&F6=96AbqJ)6<N=10w3f&U2gBHUg<ud^ zClEA_ncxnZ;128besYh*f=zpc0|d>5;wSPIninm^=l0aX&1Ny`<^tr(>?Y49>m_EV z-$G6YEJCB?Bjh*#;&7U4FqSIkku=vtd}iWPi_dU;ZfQ<)t-z-ip9LuM9RBXb=ikTE zTvy`vm-v3|`)RJX@fmV7%~gcYQhe6nb3fkG=YQ~h+A%DJ_{>2)*hf&Z>85!VS92p@ zn>_fE2IZEyh3C;S2Z^FvHJvh^c~nU_R_ZE2L<^5zXO@~^xL%x`OF)$3#U=@*EVBxk ze<0ZKFW@PrYwtN@Ebj2G<tsk(e~&IKNn`a~Y$7?uJaNM|AbjgHhR{qJ`!uy9OrjyU zT;=!HjImGeW%Gqo04$<wU?_q?`akKmJeZ8g<O1cS(#R)10+-+|8*AheKLOS^FS|<4 z!X<cvpvvsm2LD>m9!@Snq2M^Rmo69C!~a6hN;3WdY2H11czc0bM|wY}4#&bon#&6x zr@7QR!oxpk8EIWd_^vyl{|<SO;`<wJ8VMGTh3>be4qtfk3y1`9C(6attu=LcGdWK5 zRB2}F@W39%3#Sf$6753p9rJy1&bQ4DqckPd>mO)`Zoa_%JWrFVALhxp1rNa#xbnbv z*1l>?B>l;Hf*ZGdX*SP~=pO}+LHzY9TW&zvkaNqAsU4s=Ci``QfB<+S7L?hq;gzH5 z3`R6lU++Wa9SaxfIg-%kEHE>t+%BBFdW^R~=Vs0@ZX_%JDXK%V!v_~wMUo>1khQzJ zS-70{o9$>s$8cjbF{VRI`N$K1WaXEmA(5;+othNmA57!#OM@Q}tehH3+_Ic7&}$1> zAA|wUI3n_y-~1FFNmdVsMhhGeVtMqq)r2}cd_wTKd7VNG=-YM)(6PGtrvMT|f0iJP zB#;IRk|;Hmkd0fi08Q&X^lc@5yN%?fm;oZ+`7&QsyWP8lXhNgE8HEU#84$xfdL?ir zs<i%{>WOhjcQS~Y&ZegO&^Hf#>!Ov#N-qWU^7Q2l>8&5*B_~O5ZN|5a+doA9ua-1d z3O;|r_t)@Q{85_gYkU^tSveSv=Wn8J{}m$9SD>l`^SCDBRWduFH$PTy&%>@sICQys zE&t3sVBaAg)pV{M8l39{<4hW=`2Pa%ron&WKD_1&Iyw~|uKbj?E^rk^=h{(lPW!ew zmu{pi6<yjW81+00&SGv*j#&4(HJ{S3N^y^OUMd0)Mo6rQ%c&kWeUtv3s6vJ0RhDXD zqJ5vQDkToqBl$8ZH=*YezP(5L@MB#7EB>FMn&GonOI@Lls1XRWs_<|agKMwUXOD{+ z2N$alt)8^BFjscG8GkX2yC{YwjNOAr>hK$QK!k6IB63sz4{PrNA7ypCk8hGCSzu*X zj1o0U#8pwEMnMGwngB^a32cBQsEBx}ZqX|0t^`fExEmq9EMm1)TU)hiwQ5_mS}|1{ zE)qcGVkzFJjh5DvhSsQv0jc|co;mMrlR*3Z{QmIS?7Q!K-gB8VXJ*dKoEc*j^KM=W zQQ~Z~Qgb09=V;a%v>jGuu6hwsk}kxoRd%|{S7AcuFT7Qq*O3oP*xTxha`X0j-e$^q zh||@%HpUmY*u~#JaYjykD~j{jSLI&Lkfbx+OB3y6F1c!^yDDYJ(_lUXf+-d|rYSnZ z)dm{mX!N`+u$zgF;2Z=JR4zHCT|#9x!8zG3A85P<B@c0aIv1Tm+9Sjy>_WVhnp!CQ z`XQ#vm3!L>D<cabL%VPU9g*A`_Cim;{I9qx-s@9<V@4Je6IC~Ej71lJ=Sg`y4c}Xg zVJ`GETuHRV*82`t;$#MZ!gY0<Z`k@Xnc*m`o@;YJ_ZyUCUySNb#-Rd!uk}tr%Zt~e zUQcoL-unB|&gsD1j@gmTP<TM;=2>I9^TCkCG2i(DrcG2H(Q8l;i|Qlj^cwcWTj6l& zK{C+`kBw#F6e+9+YCxGxadZ?dki}osf8t>5`)23oxjN5;G-#pguU3y^PjrW<tZ$t3 zlO+y)?+3$LVV=i&PTpRWM1sk&&_LjjHZ%~hqd)`EDW(}J5><TviRdUZJ3CoHwSU7B zyTL$$AcE1qxWV5r&&rO3!Mttc9-}UX$S2FZNf*N1sXj*cI#oY_?F$DTynR6{k~jrY z=38(Iw18sqP|ery9S7BpvfD%+%Ibqmv4l43A24E=9aJ(9l`K5VN<_^A`wY&AkOV?= z|NOBHB3FV+o5njj5`kBNfCa}90T!HN2Uq~20$8a4BQqH=0MrJ=YzZXZ0%91TazwyR zWFmrr>LuJl_#YoffH(+az46fqdI~*w<GZ+pgVB?WwZqm=3#(aJ1J(}YF}wuL=$Tlm z8U$_4<5+=-sCvO2VUHt_xEU`D-`8;(NcCAzfF^6t#(Oeuu}*#Z7i-97YSZd2oxube zZOj5xbqEsov$5t3oy1WbuH^?@)ls`f0MMdV-PLhJ(tAFjzhD+p<b*l0u;O_qYhWZ- z|8-y^T-E=`sb2TEx(nmXD36!z^&)0dXYu=iWeg_+Kvsm=+912N=uEV9`e6sMX_p0; z=-Kx20t~+b412-#pW4M^+q*9=ppD>5zCND~a|u?Hm9CH}CZV-109L3UKL>D7eb^2u zlsclf)ybtM<ahEG?JR-DBrf9{Q(z<@q3PbbEAhxYXF_Gxm6$GxT}Yi_ji1X6@%T&3 zD&wru)D0sLPz><YD@nA-8$YrD5J+5>Uea-&k&=(ON}i39nDgC^e-}s(Xc8NKh{H1v zhvgiqM%l(xx@!CjQO@b*X?8DV#h&acDakaPlGj-!1<wzB=nUuH^eP8i1vS~)<|;Xx zC4s(WU8NF>kR-9Va&KVSZ^*zf0X6=lHz_L^s^^1@2zl$pCU`@5w--=Ip=G~vK*3W% zoX9k__GkL0EOG6BW&8Aq7JHbhlYcNP5Xaxl4=_&R(9^COdd_YKi)psK&;{LYpm@tE zbs4)T`sByomlmQG_OdX1u-F0}1C2LgiD^VbFsmD|A)#DwqDBUR1<rebtdJcwJu4vS zc)6G5vKhi+%eV2aLG#KGY4-JhNu=2a@wMvN-%SgyT{XL&e;+=Uf1iC`u5aVtg6sKr z(MtYhl0n4C^&(dK+Tks0uU~No-oFl?Irz-NXD&W><5Q2%Qha9Mb00pQz8RTWnHk=` z{MRSDPj(J3vV0Epm-Sp_NyGEJ@r#ZOH0l_CNOO2xpi$(H5^rR4Xi6{)yil*-{0#{m z8No-Gm&nXVCI?gVeCjFte&brsS2^8u`ZBbfPGz|Oq1~bHzL>yAU>BcSJ6Laa86oBr zPp8K-##00|YiyL+_Oj3fpZb}Us{8)0SR!^)Je3LQW3mr<J6G#?a3YLHr%}v{AIPll zylR$+s}fWSMD9YgH)>TU)@aN(YSmtRM^BSv9-v59|BSQhjUD5D$C<-kn59Mkim>@d z_;a$KDPBZuBoVC0hc`4CC*w6D0y^oS*gJNJy~B3!F3^GI869Sa=5fFJocN<1Ub(5z zR+w|+7iPxJB<I?qJ_DVSrLbH-hPS{}zuK<vM(c^b=IIIs@7CjExPBo)m)O-ur$XP7 ztlT@tQ<bdjGO25o&Xbj_KBzkXCCUIyoCJ;I#u_8EE6PAcX`5-bc@@<%yfBdp{GrCU zEq_$Z9~}kZfyoVFT`TbwuU?n~(SFzl_(^O`_21r94IwR948weGV9NR?UdDU~jygp@ z;kL*>3#-en*r`9hXDDix_+V|w43Fmgwee9v*2}%(FO!&x@A$}!K;uN-*atMc2#7Tr zKhTl*NPnQQh}SemDVZDup~IwMx-e<NiYy9dMbq5}Rg5v;8+kc7C0J`_q(an7h}kLi z+>Pdnh#vh%YHaYBp~vy~2K?$68)<tIFR8ez7+PmB1}aCf>sajg$jWmnQEaAFEReVw zwMp_fo2)6Z*D#BnBPVw3u;^bPK}R81VKD=;r0|V3u7ancARw%WEjehOr`Jfz-h9%b z=9%f0v6s@UQ0<tjvJc!GP<8j%y3|$jw<yUaJQSTw*3u`3J<x*@CU~N&@ZGEy5&tBd z;NM4@E8r&GSUQiXHE*V!_hBX#w4+J=EAN`jq)^{QvuwRv%)rO~<iIkE1uvz96mK|~ zDTY@?gZ`18*x)&t&65ERb&IR~pTHzVkKA!Q5+RbgtFY_w%jCb+Jk((}?ZEPMS25<k zu*zs|d7=e(&C?HZASSUOPiN<%XIpbgj56nP6_IchBHtoZ_>wD~X&vTj0q7rtNs4!f zCNi@>bv3|EA3-Sm__pmP2;22t8Hes;-}FAta8>bokHXysG|W}_J`^^G!g0lD`t81@ z{+8W9O7Vf*-<xRr%uH*1(J2=6Fu5F<7O3sfy`kSGGd~5vb0oPQRDnA&v+DkBsCi?m zcy(a>e#1%{E9NxeCWqk%Bc3QJnHn7a76qp@kd2Y>WC!wIfPo<<tUq2n2y}!AWgE5y z8t=!lir?i2by~s&hA8D19v2$|<1n|x6MgFWy#AWjPsif~ylH2%SS56^@Jo6Zeo05d zSrD8}C*uu3e^t3#tF2aNt)UVsc{W}c{_d#iwgo5PJuph)k%7b@+!uvabz42Wly<{F zxpBb|DzqAQJMnO!+=5!81K2NR--B{%oTRZ=;5v*%jiXsYEE$1ouX-IW+geKFdO^VP zEfftN#6+s?aBY`I_sW`s`~tDT>^JE<*FH2G>l!ygiS?s3$V7w1MGlo)4UJ*Sba1)i z3eK(epeRK}=8MeBf#S(Bh5V#AF91W0n3MuRR)Lr`dPl4mP3u;TGnMLRBTPE754h1w zRbzBj@l7f83019=ULi!j^vvwihRdBU{f3K2`&#?p)#>)N&W9UL<t}xG)nr_XzAw(! zAI2MY1I!emjLL1p_a*21w12WpGxJ?!AWqR>sR4+g{yyC7w`3Nr)E?V^;s7vtfFlDz ztuwYG>koRWPII~Q9HBdCOvq(4o-hKA>DkLi0*t1HJ%~7l*#GB~6OMzm#D`d7#TyoS zhph&m-hd1kd;4!gz~y3uVDAh}K?2o1#aqFr*94|)!<&G#NzIxs;7GX42&uB&S!HeE zj@x+74ME}1G<21^X*9|Rw+IBVw|FZe+KhuE7N)AVc8kB0M!&%e#oxIaMK%MIdIPey zzQ7ERy6YX8YA*0&L=vRVUm~!5@>^}YGgq|Sd&j)T5;V2FbA@U)Z@J}-5M28pBtva@ zwb73&t`jRAi)UIA38WD<_b7}eexWCN9t=yxUo@PRyvu70HsIkFJvy8^S1p}oNeIJu zGObzyq85Kq{}J}>2)bJWB^&BPMa8S@f9LE)02+8{jSKQb;5ewH!8}A_DWkS(SE?xD zUu$dL#4pbS^>g=>AhKV#{hez4Y8Y0QtjZgR7}T?lg0dNlb}7SV!qqkAgfl1Yw?rX0 zUj`Dx`OXw?5)Mk(*X&2g#d%j^Uo+!d+1G^eB~lgSDG&<CQ$V%7B2{&%uVCRvzxUuw zLO4>m#(f0%S@E#QmtJkhlqQil2+=BQy&Xt!eo$g<{vCS*c@8IMPmOf@OPpQ6s+YSz zB_bfO9K@NEc-i+*-N1;X6U0<a8=imLMwl58<xvGl9LN&ndF_KGV=%+7r{?+jIt;w? zWb5}GHp~<f*5!kRbdiZn+SCgZaW)kziVmC{T!;^PiGLaVXJ2_dn>QaSe`@b4I;dtr z9nfJoucBkr(7hWQU<#<i_q9KPx{ZO*)KzzhJ{NgWabR=#65ReH_xg+!jd?186HiY3 z!lPmr!{RsM3A#~gn<#Q0^M?j4oUQqT1m^r|!d~ZE_&EkpF12^$qM*7EI!Kw6Mm|6g zRjiFx+6mgm8tb|2tGnv&1)1y9Zq8aS?M*C{rjQ@D{%(u_nZdkFoh0aoH3NABM;_h> zH&BzXUxfcAsgdbqD;WVLYf{^9zF?p+zWi=r={~~3*7#X!#;M}v&N2N0-ZPeDwFzYr z#lluhg8JHoM$5mh!q`TF-xA1sM^$$%xIiEq7@WXuw&(&c0jZ8VOW+gzeo9A1E{=88 zf50Pmmh*cX$f}UisbbY(-?HuIqUYK~w@rHuIjG#Wp_{c6`!eHiSJ-<rUjN_lizgKJ zm?sqW@|+JdBE_&Gpr8b+gFc^XyjDzf`#StFf<UPFffE;e(sNFU09>DfPvjEni>ZP{ zjV)3*u#~$4jdp{OrdkjW$y-@o9rJ53R>HT!SSpUdOySM*|0M+=vgbs67tVl@sk5(b zd0&jWkj0z#ZA|8mH~9xyy!nNV_40bl4j;w~P|hRW^?|!_H2_0&<I{kczecTi0r&)y z3cWxBOHafb98@xwDtvmCY|1dFEsTlh2&c3<DD^qvW1XgH>wXOT6jw<q*oW^EzddNJ znQJG^Ae=f4Rwl%PawE4Ntn1r{nG5Z~^s2cvk&fv7|EBd$C+4su!Y@Kw(($D3jVm`; zMn|c{hZM2npt{wne+1tu>!je)?x(ttlbo^O0=+<-m2@tL4Tx~)(_O9Z#eGvpK@`MT zzUYY`K!0=18<PuF;{r5kE&Ka9Ab6j=XRi4fi}735yp^}XS@V0I<C^c3HD7myvsTQR zfy155%qwqMK#893^d*o4T}xTW7ig@&FO7gdLba&VH45jgh92m8gD!39MmT6woY4An z@MC17GCrt9P9z-lFfCMBEi@_=fkgqIESEDHbo69OzyGt&>USV9gws+@x*sh5E|B~T zC6g7IN$=g<hJY;<&dDGX4yut2C@3Jo(XTzMP_{gpfc9U6-vfFOP(k>|e&r^hFY!%l z|EhQG4)wgw)v+cP1ZTp|-K&P3uF2gz+w`^IbgLG<d%T9lg^G#3>NvZmC=*sxP+eU{ zdmB#JVm>%rAfRag8>Xu=XP3Yt^1Zj#f>P}8)-ThZ0cFyarkzWSuQ_kZX^ScdNBLuL zprVs!<_@58m@@k&7r?zij$3R|3r6DUciO<&m8=QE#%bi>$dj2~5T`6Mn)+ecAZl~G zBO~@V<2$TAW2Zha^~7BmH%{|;dG;kvAYk79<gm6|xd!@kW_)f^)Ia9OX})JUGd_*x zm)M*Nnl_7dSeX9y8VeRiPIQPShH^$PJJz>Gz445V*E$PHPWKW&)g>Ge#=>O%E%GJK zgM#_NMXVYctWA5dgs8Vqa^u<ny|1}(#cqiF!P((Z$n%cnp7lQ3cZPoi@FB_A5M!$= zJ}dU4aJFDtqH%P#_z?Ti${>$(99(dMxwpke>NxB9l?So6#c8cpBt=18CtwG)MLlz> zNhuGI%2#)d!<3+=zrmLR=mc-+=ouv8+p&c*m8M63NZzD%vTx~^SQ1CQyP%oyMDJuL zQpwAF&S((W`b6dgCeoj8HQ2;=D}$02cn52MMVw8^UQJF2+$FX=-O?2-ZSARYyX~pE zvessm?d{0Z1q9=P>);SsYlMb}Ra=WS)qzA1RXJM;kQq5FlMBy+V?n!PxeWXSL%bio z1%U231u95!hj>rJV9t~|lW}U)^a^R+MQ99_S$$Pg9mf6OhGF=|;U6JWBF_IpuDp@Y z%79(ixpbQGTs_zVh#6o9*AILv1PawbfkM@=t=fY{?H2C~z0IGFYT!!dB(ThF9?Rw7 z(1?A|v|7`1DtnRY7>1#p4cH{7Q5!}%UdjuMTV2J)qEWV2JE?^^_@<DF9lO|w1O9Gp z-tDSHNFk(!>Vq8_h@so5ZE9T@HS>G<K&CL#*;YTcz%oDVy{T9oBu)oJ#lVq9Z^kGu z)GfM42;G+SLhofv`3_^^+XvsYMvhc3PG7w?e1rh*M5z)0$o5G#HCWjD%9XQ*xqf** zVglw3Zpwv5SuVbcU>mM!nhyVd9GRV)UkeBRAbyT^#r=w-Nt8;r+TLv5v|}ud58;pn zXhAg|h||*eP(Hv?V2nrXoAIH%K;s&s#k&XrSX$IP9oOymaVVIW%(yxpCoAC-chPGy zyfr+*hK@kuD};JKcA9AOkBtt7kNsOi%sGTNJW$Y&bB?G!w|yrnQ_ortp$6h1i9DT+ zW};+)86PU(ZWYeY+^)j;pZiq;Vm!_(z&#rZ6OvRxSG{AL|AsXMfkcC@5q^w*V`mAQ zBusFGe*Ehw#F1aY5*R5eFtyEQvw$(19if{Yshb@wUejn6v41or$EkxEocJtPt2t(! zga-KghLg;}f1Zi9IBR2}X^Y+@$3!N<SG)vJ@ZjXq<@zwlq|kUr-#6BWp2?KtW?=14 z3Kf_+3)V=W0lgxB%!=v6j#o?A0==s68+b7u2RkO!ufo%ON4tk2qsJ0qinljZa;^zJ zlw~{dI=JCr^PP(2VQgWHtqR{G@OZ>jyf+?42`bQBM;|p?NTVh@xq4`$S&W<e!%Q3c zAu-(${p@5RNEky_V9C3<rnjsgFx!r5f@(#92{+O-`o9YW1O!Bjr801e$J*rnh!p`N z2rCpcV***ODqM5zzXXiUiZ8G#o`u)MRM2s=`6%CdG>(sM#5*0+%tsm4qoHhUdT69{ zvICZEL8O7a%hB_R2?03lxDa=2fjAN2mSC^dR|}KSNem%W5>~G^I~e>2bb%v-bS=YC z_r7Lg?h|+-TAvjxQtukPSPZZiBWaTD@bz|u(VMwR;|T#Qf{S%k(aWukPp{^J)18;k zNiW#VRN!$6!f#XCJS`b}E%u^+?iUK4)jt%Rh|hKSkjh!~4IqQnR!CYMk3t3Q3~hmg zrw_)5W$U6^8tFdkNzM>%6N`F_`5;X>Mk*yV4#{pw;-=s2LwmWg7}iBU)Gy?%qm1&w zF&LRt)X0i(#>>no^xsH>P$ZKya7mdutj|_C^NDoVtPzSh({9uJsyUxXT_8`Sb5&N9 zUsr;mD$<!hB+xZe-~Jis3`=*MV#k_7peZPqdk;WwE)X4Z*dbpCRqs*bU0qzE$(Jl9 z)UHzsx!009##Q<nvlASYj9Fq1u+Ejpb8Icp(Po`My`d%|ul~I`@PZySU?~ZoJgdy9 zL1aU7iL+M{HYTlCiwH?mDBP?mB9FO|1eYOLm`tc-F2$^C68wE3!G$2fcrGNk)*`_L zrhL>J{gpK}b_x5Y>F+GvT0UAUApOOeWYS+EaslXXVg0HU7!bIOiv(BuAg%g9fF~Lz z0j?A}@20;o$`n<Q@=&o*-x5&Yjj+Ce`hH5wjw$qgOxgocpb}_h$_KskE_A@6y@UBq znWnwe5rX#aJ<_JVxyPFTqg6ymD(BXwy^ZfU6LU2ya%gXfwlKSAru`QHu1Q7zz_?&s zqi5hXO?z)NA3bh83h<H8-mv+o(RxH(1)YpBt!l1y^RK*#vE#lud?CCx>vjk)`M1R+ zO5B9E%n!PI@hc7j8LSh9p*WVIsDUpFx<+G0)Tu%nXH9*e*mk~UF+oBkDaV89p%BAO zNfEW>ce;*qY|*fwc|02;r3RNB$z}5zYDg0f)BHF<N2`LN;B)xAg-;tkj<jgfQ}~4x z!O96In5JmR-&7B#g!X;F#-Z`~p^Vsoc->GBkUkf1_C$TW!UZe`ejG^4;}J6OA>19x zyF5=;sG@KGi(7lY#P<m#@`><A41KOPc-<3)D3lz%6wL&$U%@xS7)ibwdvYi6(+9;y zeJJEXM+%W&GZ2Y93x}lh4n8q8n0gTe&!hf%Oa=hv7fx2hYU@MvFGpY1#ozYxU>Ow& zzKDdeWzi@77VXcB_D7|;*jF+r5zi{nkLhmICNt(S7O`eptzO)A43_mic(G=uns(s2 zX)*7#l6ZKYXjxZFY4x<!dFyb6Bs-~X=t;+*2;IKa{ikJmY_-ghY-mesIU+OR^>Qlb z@g-&g_3Rs;^T0$?5io;J6I`v5NP1l}j%iDVDNy^=$~KHn4ZFx88>Ogp@jvJ~1<!CO zC1aPM|3zGA0H8Qsv9>Xu5-f+SQ4{39$wkDnm@oAr4-|D|r(WbiBJ7g>G{&j7on_%A zj&x+^5&6tO;xD*KCH<fI&{QKp0g_|9r{-Y*RGHFvgTpl-T!H~%^rnQfkJ#+$_KlYF z(eacu+IbiRZM5PQENF(1AezePfpb)x4dNb@CoVLy!&Pdm;Q3T>041hxebHVk$c5uD zc+7Wns9+ncJr#cH7I%cjxg%4Um-?~&VyxJ1n{ywb);BWa>B+&!=8vWX4NvO4@l8Or zm4a%i(}`-i_8V6rot4Ws%9KZ{&@#RKrJD?-#R<tWpwc!)Ds&y8MZ+p+_aZtuzCKk~ zinUpj8m>le{G6B%%({S8;q~TzM4!!J)F3faOk5Z|+M2WI5%GU#%wHoKfy=BsZn)6; z$e?*59{DTlj~4QY^lOv7s5rjB@6oae2p=tau<Pv=yIvPJEKpcU{D)2fyljtRePnl~ zrmeJL-&0s~D2kTP7VmkM^H}B&4DHi7q{`fhqFY~JdFJXp=}0gWbc!<EOssbDACNN$ z?Mm(I2W2tnLlN=sF@mCk!t>14s!zNvL#hC1tH`<P^{#8Y-gQmTyRJ!?+C0=7#RpWI zJJY)8jX0vcMePC_(#EkWN3*FCU~fT~GbWl6Vp%)<jXCRNI`><}SYjQ@@OTbhDGIAK z_W6=PVh)NW7Zj0lwm*oGCljGX_(J|>oYmzns06ZDB1FM^P9I)9g)7uGv`<?>6|@M6 z(95`?Zux=J@*q@+VMJN&_|R;$kFRL+BEFadTFX<Iq{;RC=EioeIcMm^1P<dDzp*AP zkXWCMw<ci|YAP~CVF=4`m0I?Iw!~CI^A$*JKwZXao)nwGKV|$gyecvshH1Spl>anM zeMwGZIRNM%=HeBcq{ku;p^1Wa<aqKJt#Wb!Jud1vHd$WOT!f0{SAVgTaBhuOeO3b7 zudst|s^iyAw?nK-4*ViTfTna5EyCI(+*BZmr}rzaw-D9<+}+0)i3fn3yhQDSY*jfQ zh1{cZuWD?;#f&*1V^P0)>?=r0{qSzbdiA@1bFB>}nG4W}p!vs7SvN)r*2tg?iDg92 z95$iDdv}j;e}b!DJ4pd^(hcxy<euyObZ6?1UvPl&kbYgrYrcB<c|0M8F6v$bu-6Tl zpSr4;-o0!$uj*S|Wrw0H;YNa9fFWy*2@#7yT;uDsu{g7Pjo-Ih7lHf)SB*Qd{m1yl zRr~Ab%<iwo&EA{&g{&{#j6^a9*n#g_^5}ub>sDwy&LJKGz4B5MhLU<Tp+CZ+`0i-@ z5MgCJ4wz$H<JCKBEG{(`NIc^D72x}zMfj9}7tHmm7hX3D1R8gnFBkCT@uBg$2E(c$ zwocY%9@}s!-E(4nYt^Y{@32m2dUzW}to#}ayo*!x6pt1zPSw4D?@)w4Yt^UoOzUTC zV1y59)i&!+^cvFf1vl5IzkL2>%C@Wh7}WyfM?~m0SZjdi?*VsH?SJ@}M6QAdcWkC< zd05KOPB|omcLBL;RpWgEzV;vB7guvfRpb{4fE_7NlY{Evlep%6J&(&y(QjFMceCz+ zX5Ae4nYsifB@Z}6&HS-FX^>ABf{OK6OVAJkC7|nAE<J-xc5KfMY|#&G1|4reyy6L1 z-!rkKcnFGQQDpllk3oTI;v7`-$$%5C>x~>Y-6U$?{3~m{MW62ofV!P9L;KPk1)P^y zAGp^Sq!&)#kb2ac*mR(^d`d3g0ADdiX<2p^Va=MRYt}RatV!OQ32hXKm{vZ%FiGAj z0>d$mB(YKG+~NcHQ_?UnIX2alfms8c-ksF=Jsm^XqK<(p9w#r(Hii5MSsXzGF!jqA z&EwBnqX{HFz(U=JF+;Gc#3ccRV^#L*mDelMU%%S*`cF_&mMP)7PKSXeD^v&1b%;SM zy%0zvc^nEobe>Zvj6#+irN<daz77?-Io3eqZ}Fo_?Og_g7{p^(#B9#;CJ6{Rhn7YI z$plsJEkNWz<9uA!c5I;hQ$-n!vR9fm=PZi7roCRPtxiiH?rqOF(8}mh_y()6?B&Z{ zW&bSl38iq02RJlPc+;`2!q4i$nh172Z4$vB_Nby8Vcz*mr*GfuQMg+`++Vp0kL*$S z1ZyA~|LR?Z`}Zi^ts7HZg+FFJY4Ge;c!;YoHwuR>{53&g%3KLu*gbvG+tc4p=aQ@J zm$8M$yhE`8W#tc_66i)pn$tqe-KsUg-;A*E5%CA{g0Q4(P~J&zL7^ICWfo;>_dm+F zd!TFcN{VDeB=iB>CM|`(qlEHIL%BPthaA_<r1CxUrmdWW-z@ofWsm!9a{oNuKN6Pf zm->n%A4r_cJIKg`@nE&*8ezD8;sik+oM-4lQwgsgBx8i}>V3MK(B%+agVmY#%56d( znyPop$pbo+AgKseXpF!z;lGwrm*p3*t@$b&VI+3>rLK~Xq?ha_d7R`bdCQ?nN}b<4 z>9k&!Ueak@*3vt!lE|U!?q@gR_oS=j7nItZ5jk{D92DleO17dT!35x@#kxNlVIC}* z2gU6&STWpX%VCQbi<~kG(_8Gzl|{lVDj%P#!5Upqqu^hk5R?rhN_ZEEbaXZ-Zf&=9 zOWd~mW^NU<HgO<J$2vPk*jimU5Fqb0?m@i^(cdE(uy;!;5hN5TAzqY@XUf@Ikql~& z_#;L80>>ujKu2(r3sl|K^yFVS6ZI%*B*g4;Z>gyy+z>k-2SIs`c()`c@R|2J8%78Q zm%Ic35!bKQufij5Hx!>8f3Cvtk$)X}N|1XgaWP9cGe!#6Bf-sTLd(S20Lq*51~(OP zM;qdrvQEO^sm?(FL8>}eMe9+rHw4HnbSC!~t}?i^5n!dO#Rcgtc7tQKt3_JJU40W< zjHvfw^io$JJ?@MW>IfFaHWc*jrN>NUIV!CJBi80*Q4wbKh^vOr*j)z@1^np<47a#S zzL8#XSbE7aSIGy`OLhb9@pj4R4|)UaAI`7<8?CgSV?Z`guQ=0wer64@<anM!5G;wF zKv-16+dN-A{c|_*KBRTr^bZ<o(eE8VV4Sybk?@0Vwi8I4rfE#NReYd%(;?y81ZfYL zYuUNKLGFLb`y}C?<3jG>WC}?5!88)yW|8n+MrE52?_Jc;Ag`XBVWWFL^3Cvs04EHI z_Z$)~i1HFZU@eEax+kcgFStm!5WJ<XlI7_oyOHo&u9EqODk&s<gsbG2?#1hFUABb% zTqQT8m+VHu+kWPZ=;!Gr(+TRUu7WXLP!rVUkD6=bD&9>asHz)5eE?FMMNrRS>DZ1m zg4!kobq5G4*smt2I?3KHA*k=W2&#7Q6oUF6pt6gg_Bc)VA9m2BVRT`^F`mN^)Pvm! z>gO+DEr=38US-N}H$e?TUbYA-E!Wn<*WzzCsquDKPb74yMJ1H+Hc7A0)Gb4;#TZEV zT{Qy7x>2~0tGZ9!1VSI<5*$v&ME2MZrHTcES9MWM;kNz6oV_Q~DllRjx>2}S?HVMV zmxcBPe9fV5_dBJ`<VmtPx>2?pol-(?o`+5-jowg%Qs<#-j<EP&=negGMm`}&%GP1q zI6|91ph601lL)l6$!c${;av(n=m=ve$cx8V%(YRx?e@WaJS~XozwNeTBHsI_1gliP z*8iYG;H`niGmk*Qa%fR=jhcMyj2P(?{$vH*n<5-4TA-H?G@1E<CGTLmV6xkGAxu;? zKDZlSL#-B(huI@6@fyld9Ya*WCe-3`&Vq@eud^t^KWtSDcGdoU{zRMzr&YuwTHwuK z!w9^@w)<qFT@)BeIXg`{p39e~W4xD$p$U$6JfWoBE;1%STSICfN<$2FIlYMB9*CL? zK}xqO#?O%6pYHS?o7e)>NLK~ZkKyN!IDPk|7wnF(x4Vk|xj(u_S01!x#ylOtmSLJL zs$WD+B%Ta4rY|NOkF$F67~iTWO45S76aA+mlp5N6W)g!l0-!LIXSQ%)3zi4ysB+cE zL(EZJ%Xew&=995`_{wcUYWuDRXfb*uP&dW~kvUzoE->>Vp5V?q&CrxGHBDUhoY(=Z z6u~vNsynP(Fpy!!e8~x^_<nz2NgO>(g_7fo5oq?^j;YP;X~(6_q;MVMo7w-4G0mvO z({X+?<;ae+n`z1F7}^YG0K(RcJ&C8|I5~6Naa1!P?CJ1}o}{CXKFwh65IHlPm8s2z zC_}j>>tUIi_St9?2Z*Yt1S2mX0FkL?emY2%Q&1~*^dP^OZw-=Ae~Q8)2YEV21lz{` zEI5!kt+|ewLgDUF4?d)u`#pD2`!i!x&9cN9Io<0b6cJrks^5h2?xJU)`>vv6%xbS< zF;Sd{;wmeeR~1?04CZ~<r(q`qg#FE@6GVNQhq4-{x2_sHeylrs1Z!l_z2~5lgRx8l zVNab2gzl?pi0)^)pdxkPMamhaxr}GPdFbvPhpI>8K_N&y{o_n`u?MaPfXxlYTbOiN zs$6}DpK%&Bzy$sae1KPl;%c@cTXWNxFXHEMdO%XX-YgILu8rjXdJv;!P1oorBS^)t zO%MCEeT9!I_{iF&zm69i!fQfh=R6ZCgx7)JyWsV@^`xA309k=T9x+(x{C_a#Mj<F$ zL8*#3_(Bl3If(bEbt8|zNDvIQfq#ox8GPOD@N#ZaclaWnZ)piu-oLYKu3dIqZ)HnZ zHbcFSKm+cwgL*6bD9dK57rK@0xI+&WP3s<bk=7v6b^wL5)WU9s-!uy&BB{|=t=`qo z17%`iBnop5M=MUXdQ1AF*&_Ye-A`C=lA=)Y7sO%79Ca47Y#m1flIG@^E9=0C9F5k~ zKMEotrHOItbY6~opO@$DqiKVxEkf|hk-8)OA}i35_S?vZ?(}9Mrt3=nCSTG#ro}pN zT*g=RYLWGNRQe)Z^?)oH!K35SdZ4>0=|QHsy7@H-oYPGl4wMpK6zGmVK>dnP(u=JQ ztm7?L2b?{Q(6S3$9e5<IZdV81J;8xfG`$d5Byye*m_IQ45MYDE=9zA6{&&=c=U=|% z!t)*G6HY7mJ59Y7{4dw-w!h9@3#;6?(e>g_-BnIO^jaGQ7F$n{Utue%<l<3hTF1j* zVr|Hs4L*nmL8F}PEjL{l&>-HAbU`GIS4T_Y>PW=dgH3U0Rix0dDXxOGn;sqF6rkyx z*KAz#62I^gkWF$OJr5=~xezx9w^#0WP+$<cCQXC)0c$5?$af&{w4leg+{Cyh5(1Q) zoZswJ)A%SRzdyYab&qbl-KM<6f3i9k)jrSl;<f27j<Q~aphVGt#0K&j;c3ZgYA4UW zlGa^;{@IubG0j{<KR({Uosk?uc~C%t{lJOFHpm!51u|Pz(yB;wLKG+_`;qPs$(3XV z@;CznFav=`CTEFn^5R(dCSONZe3Rb=78AH<n!ud_2fq>!EZh6s1j$vmX^_Aeg$jR9 zh!DT#ziJL<IV4!fZiz?vL>AQYRpz7Hxx*^&7D9kzMi94gV>1Mnln_|VE_$X<>aUv3 z9w7k6F#->*{Thm@Y>=%pcH#xG>8sM$2s9^*09c5#8A#lx+3YW|_RtXtjx+$*7)xfL zkxVRdT`R<qxnA|iDRzjYJse5J2zUy`5myQZ^}x~(a7zpH#?ka|N{(1zcvsMUi3UYX zG9=#-I3!K!9`l45yKHftx8<9u!C06f&7+s#A?}WR?IyIh;@%@K491R2yc->OZ&k*H zVftRJ&WyKYCf<$h9^TT?=lGWRh76j7z;@vn>Fc0t@W_a7!sK8_f3o7p=8DPU$1?hd zwjax@Uy!={A)MEFGZ3pD9k=@5Gz)<47zB1gYv=OqUjk%4LB(wxtIQe>MQQ95olv=) zsiq*YQ?GhBt7%7ji?fOtVNXLd(P3S#1ak0m@lWO-jf5kCuF3EitZb+=<=Ev`__f`^ zv)J~etJ9BV1)S{Y#V(=ulUq#e!)gq(uUISHU;THU^=hDTGtV)(NX!%F`+~DEtY>?v zFR`AK!||6msWPMeBK~z?PMff{BRj~Z$eiTWO##^Ix-X6KW)<D&vF@K*^0a`&Ztxhp zLHAw?a=H)<B+dcFz$KiRGh=7yE`h%Dc#|-VrJBRq)wSMiLI#Kb&zA)Sc?JUs=~F;+ z=vui|i#Tr}))~;@x;Vug>?D?%ui`kcWVI-Q#n#Mfu?$!sSuIZg0=*}(l2CKl3^A+4 zP&2E=e;q&|QA~!9u4$LIIT`J<aif<8kGC3J)oC_31~dye?rLyFRbeRT#pf?)hJtI( z3I%_Cb|~12&tHl{!Ef-Hdrm0$C_WqT8IR9t!$ZNZ@x9>OQ1E$NzlG1aBSOJD&kF^= z!*w36|BCPF=ZAs=M}>lg_}qfe&+wUry>lhLk3~Bt;1j}U7(VCXGYX#)d@Asnj88Q_ zGx50=pE>wgHYDT7_<<8*=fcqrYrao><T0^4qm+trx%L~Sqy<OeK2`_{_KnZ?dtzBD zGuEElB8DijKjmv>0^`%b?+n_@FAPMesK_+}jQddmpDqL}!>Mj$oMBKG(*8k##7dGk zEWJwNGdOS&5Zc^souB1!U^BeN-8X3@5{+Z6DNvZF=~{mw_}l(Ii6>%5Y*9xuC>e30 ziE_adpUNfuM*I>)yh-qMmHG<XNGWlHNDkUw3cXP=m#)xd(If6@av1rT!<Jm*DtXjl zOFrx>*)H7EZXE+~v+<jC$@Ua`TuKihjtO4A;1TvaPLIWUaG|Sq<FF-zu98=$m*lQk zL*Y2kKJ|~K0)>t{HFRJ7m)VnH>2Enb5lziX{g(7O10^|iT>kKEBQ<7doik~I0Z$Zy zX-346&=(k=84aiTC>GJYl>z7xK?a8)ry*boLdpy!YK;pKwZ;_!wN$><wG~p-)+|Ku z6Pg8YX(-rCAq&cdLHxS3c_6>WHy_EbG0k+BfpUQoJ(LSa^J}O$974GO$6G2Fa`|;s z^RfK$i}ND*1&FR|PE3J?P$c-CS>hm37jcv!{d!v%IkGSi+*TF_eQ^~aE+o^+Ecwx6 z1P3;D=DL{keZ4M>Sw+P2Lg*pnwM*$Bm1xnfX@qz5<~d$<f~zNtck4nUN7XKf|J6NC zpT{4nq#)czS4p0eZ9avN8H@ejZ(UCq47%6Wq>e^c$(?w;`P829)EwdpSIHMpNL)@~ zWFG#Gx+>z3h;DfH)^9bQagg0ZI7tV*cD2#VOgt4C06cAr4#whO<j^A}P+^|UWX-Ag z>kYd7aO5c{TioiS>%YT{u9G+?<oJvO^paT^KDW1D1bUCpVtkh3b00oG#^-1FJcZBm z_`HPAYxuO_(~6HpzlHt=L2|z|_N&4F#3&(_RA46r0AN*Uts*u<pt=m8+a&>XdwSI> zZ)10vx|iUKXq5geR&?I%xXRbklV3$aU#;{9H3%mW?W?ZFEu<v42I^h>?hkv@6n!VG zH$uEKM&G$e&mx*M79bK!wA09;*%tPN1%Kz6_dzInH;Qs_10|Ms>|lMn{gUhOxaLPX z;^-G(H}}@`H?Hz7`V^rGu;7GTFrykc5y^#7;a^&fPQrAzO?{$t10^^l4}Wy?*SYsr zBN?H|vJ#*o+^r-S5s+-_#Hz?_hixr9$Z6IaN72E@7Y03n#PuXabPp$wMR0CxPNwnJ zmIU0i#BZh6r@o@y5yM+!Vc(Tp0l>b<!=4#%$z=^DMSOMuifRG$K?#Yb&IkRJoQ(<d zZRWS6r}h@raReA&e;^<7L>6j~xIpr9z|u~pScxCg)KL*}=n{!k`tJ6g%c6vj{J=M8 zr!R;1$TD?yF>l`O5RH8hj@oa<s!x_77HAhn;|ar8|M*FSk+!N!${ysU1yB1AM?2Z# zX~w$vd~ZgiFiS=rJ3^llkTfeD{ZlV8L`$>4XN&qN#%HkyoWT&{XD)v2?DbDS01)T~ zfXh(Qb~&7cAGK<r9$fDL$RPk~)xWRr4uBikZvlX?yf+p*0QeevMi<5FW{`ToRq}0= zw2?W!5E9n;dR|WiHOG#1>2s`V8bh_#<4#9V$_&(H4nX<IGWVd&qK1?w`U<fw_S<jd zkVi)Bmp1A#(QND?oXkf(>+sg_jg2i=1s+*F>k5FvJVzkwr%<FgW}n&5;C#1hUMpgp zD>h$poHza*a9MngVYcpK%r3+tJ~FW6Q$PiAyGBgFIml4sP<%na9J4ApEf`4Ljb~$4 z{RW<;cOi!1H{+(`cSh_7%`;{q^X&%JKL<m_asQTBwK37#T$F*6EZ<~vh_TU&zZK8a z5sSYS&(uQkOr54CR9c>?$BAd^G<81iFcN|sVwi#I;5>=Z;5!H3h<^7W4_d(?iRTS= z$$5h|qZG2~ZuR^x1&7|3IAU|xm~q6!PiD5Du8t!nhsG}Tsd^MQw$a~`<N9W-9?ks4 z2U<A7Tag`@Q28d_b=17;0Fmh$A`>)3KoN8X$b69O(%jT-0CaDC8szTNs<b|BzLd+U zKxC|U&;v}0Y>INJdZn<q3O5aO^eAjM6D`r=_;*>+^SR+t*o12d_(v>aD*r(x?d6Qw zjX|&6agFBaSIAp`_?xCv*W$njG6Un!G58asqg%2@&SCTYnvPR-jhd0`DiL=;S`nLz zC0#<qp@@`NU@e@e6Cci@>nrNYabT`26nq`up3F>-{Lkb+TxMLqqHjegcmU7B_{MYn zkEJqr$;fB=pUE$EhDKpjIZAzsHH9N>7SAM}QkBq+XTltTAcg4b!#<K6YM7zSqwP|3 z(ZBdV)-u(p<uC_WEPe+5{z0uo>y2M@LZGogq$$l$MjjJrgn0@Kg8Mea#KvzeZE^3W ze|K_<%e_{_`<7@naF54p;2%Z)mu1v>5mTEK0oP1csx`%H0%fa>O_UqRj00sGK&#8% zb7%Rr+@~3f1{pfk+v{u(@Msv8VA5h_(|Zs8BF1ER2JSH?Lk`)?bjFC_Lv}@wmT}da zM7p<Z#<8mp!<|gxT&2s{gj5AV*EvZWwY&k37lhcrMyjh#-+$4Xa@Bl}z(*(?#iULV zlNhR*9TZd*3h?n=f~BHfx$2wuXH5`JY2g;XIbXZGB;+}ckbPNUd{Df=zhFwzOI?*` z3|Q^Ld6$H#-ZC>i-h@n#kQo5?;Z5bfQ49PHL+D0i`RuU&BWN_8>}&GgpDOpGME%G1 z7)?!|oMbfoOAT&!;op4qzafl)llABx`=<|MVR0{DBom$r!yM^-f-GIm$JcktKqs^L z0863x!auWF(+|~hLq&b2IM}!kX)`P*4KrI*vSu)Adq&rW$^wZtbWpkvSq~5jNZ|Pq z7=93A##i5(DxPBWb@amqVpetsR+<(Tp23Ug2_cnV6IlVNi>Rg3;9g%&Dwq!e6t&X- z+(1ylx5s9Mp|NHMz(1@Nd#yC7$!=!!WXp#i=$nn;Y-cup4z|dS{%AFrqOQ<&PPF^^ zJnz!91A4Q*WIwPuBkTo4vVNg#EDM6C8mke66RVEVxtN3}XZXAAzrwJLqmX*1QbH&G zgg=o@=JFJx-c;|=p>A+6X=HY6HV*hS{ua*{r<jH(kfa`aG5GjGT(6M##DmK;c4FMd z8p+MWY&@-IHlF<X7M%?w7U3QC%&6WY@fD4-&Px$A5Sp{at<*SR9gIRsp2cv5xCZMV zp+sRNC2)x*Q=8}UbpUr`omFM@91QA08#yDdW0H`;XRkF^shFfLUp1ak;*Q=OK8w}& zAD+sX90X-R@Y4$<zf}s#W9a3X<*EjI{nm1-!aeG(6IlfjBl-qBMj8L8sT>JxI_tNj z$5D2}{{zHhim%3I2~;SRL7pusGtLF15w{YFr?ya9h5JYBAf=g|fx#sngE7wHBXiJG zD8~Z{y2ckb_@G!K#T9gSsf<Jhd~Kcuk3eFRF5WP+Rt-6TQ?{MxG*8^Tg!=?Np}A9w z>Tj!(Oc22VBB=(J-hmR9xc(-FOldV6B)IWK{HRga%@l&z{v>|ct1c+Y42OZMvs_)d z7!}s2NB6sWQP^8AnloIzAm4Cr1keM9_4>yZS`N0Bd(g$w`w=Hzxx<0M`t&YRDPl2y zlr&r=#V}LG>?_rsVPmehwM5VMd-?Wk*Ygl3aaN)uHO=)JvAsxlUgocW=k8=o8>X`O zKw#N;3iuNcH-~=ddKc`O(3AmCxxf=Z+a+#8Qjd*~Io^Gj%XoXCse)f4wbpZg)0Mj^ zrH}I)mj;>kt@?dPmra#zh(FW^k-a*6MnCb0ZvzyOtQm4>5pc~?X-A7C0PhAw!LDj5 z+l(;S!1!%YcSTy>V(RZ57zu{H!Svd`t&~71FgM*ek8~9%;}u38Nr^(pxXNT0G3WLe znaNv;!^K}UoR+-Po4O#ZW@Ot2B-wrH(2Gcq^{D|SUA?Ci;pDV?XYt$he>55xI@I9M zypS6I@PRN-eKNX674pCrvAQX?n}{9f?8?Ty(5T)OUmuLG@gZ_;Kew3BG=TBy)_dch zXT<()#CEfVaa#D=fYmTAA2vxDzaBn=om2MOK*Y*VeP^wa`9J6dGbdfvO;9k(+ETGj zG!a<=C>oPiii}F>e}hQ>n??HHCepvzj<EWpN(f#G`_Y%$za=(FaPlNKKq@&c7ol;J z3{k$@?8L=fpw*pC*~v>O<s>i70|=9s;t0fU%=Sq&>ZKW9ppIOEstm7E)-WrRYHSEJ zUn}bc&xryK2;?C22Ekr46I%FoXOZ;>hjXeBMJ$^*WEDDg=Kxm?8!<+w29bdeI}<<r z&vzzIMJPVL3p$CVb_shA*0F(({P^B%K!C#cHu!?_dk5qV!D87H2*F%>n==kM0)`Z1 zJ5il6Iau06<Kf|IgCOh6T8$%+SZZnk?dqnyu%CNoYge;DrwoPx?Z`~vWopEV=IhW= zb%d+w4SYfH5Fz~7WN!d88V+W?$No2oqqmz6uD;b7Mm_676v>KI)*A4%^5Ccj6<EH8 zu&I2174{=^9vp_;g>Ar(WbWOFxv%53kl(E?Zs-bBt}%k~3v*(X@jHE<ScNk)qDSc2 zHHq52!3qhYb){#!dh|~!4u+DKR_+B|dEerscR>wqfowg>(7~I9c2}Ttps7L&cB6mA z7{RhDfo5q8R_I^Y(g-5U0E~oXNEkpX9gYDBp<`BoVDTo<H|F!&fvwe4?sLoYK<0Kq z(vCd1p7gCv(>E+a399$Q(Qf+2n2X?*<$lq-V+Exu@XM@D*QP6zXy(K)$q{V^Fgg_u z=%DkI>k<rFfj6-uL6Ns*pU1v9Z|4xBDwvK)sWWM$H4)0k7cGvrLnBm$Mkr+?)a$o6 zExpHSMl{FRSx8*!K{_&2kOB=lM7P=J_7`%bcNi<Wr`b7oqUk-9ZHaq)<#wyl??K2? zzyAVU9#S+?Qz~putL%MPQ{@iXg}pDkur}_(cF8Vm2Z`$+_k*}rDo7wa`#C?<%el`z z)4I{uUdn9HWiU>27}>=8atU~zJ`j?1Y5D0fwt)WB|2#P>zH}z%MxlR{PG#x^I6Wq3 z@XgNTT!<IoCpYOg;9nY23^AEF8MirStz~=AX-{A|B_JJBsZv2#&jkdB;<CNKY^0a= zMSQ?r!=EAgq#eRhpurJrqCTljCiOOYPx<2eu`wTmOE_^%RZsrbac#H}H^IEe2xhDk zl-wXFxmot1Af0<r&pNyp8T~8wzUSsqTqF7IL)bvsUKHRKe8x(r>Y#ptSQBq6&$}2K zm%z6)Pl7yGsuB<>EOPK7aI507gMnqo6Ofr>FzS*9IrW?w>pN9_U8My+b4p*9$l=n_ zRnpPdrK2ra9_Z-HCX*6j|M{C7n6D>Qw5y=0?eJA-D)xO>4GGi`uLx!eEyxwgy9w=a zi5#*cn$?}`s^y}zewgYWhT~7KgV^~p*Tpl?Wov~`Ad#8&u5i2mq4lS4bfC~eDys?5 z%O(LzZ`VzLUZ5e{BtT2}qD6pS76wL0SNIG-I>%@L6<Vc=T`kq<mSh#aEc>;?L(1Hr zb<J@)dlaj{an1%`Ynj4?aUYUV5ybxN67UFmz+*3k6#(UmQGwtoWxHD|w9r1}NQbe! zgIy~5f90O03NP>tGC>Jm1ce38)&CJQ`W-q+DoMcL?7*c(GObug#4Lo)X)0^sA){5C z5<v@OqXHY1upX+y)!}Q{l#OFz)I9wBh_$nitA>KK8pi#1EENOd+V49+`<Tbz?LKgy z{6E2ck*kWIvWn`1BuTV~+O-|NA|PvWY=$h0usR3TrI573<a-lcom!{WJp@cTp^^2w zPH&N9SbHMQuyR~A>=4I$>CO9T+_ML7dd^kDTkzM_qiTe?%Y>1H^6q^V%L){6{6X0D zMOPBv57&`1^%V8`5-}ta2301F(4s^Ij&4BVfZcObAHGRbg;2OaayWX#Bl{WcC*n#r zimK}dXUs>j$7I;O5E&tLvL5vYQzTkZiTvJG1Je{aB2(}A5zP2Rt8oyT>Y-YSacPHB z-XO&u3w<v(l4YAa`e@1eF6hq!!5pIk!on^CvUKANKows%;Y*Wns%3|7Y%Oa85_xd! zdQ|1+!18v~X2ts$>%Go6TK44iI5jS+uBL|f4ez~X5HhIH?q$d^Y+NDLA!1MJUWr3? zx5Odi=}<ck*_l=xGHCDsV`w!yj*Cbrvh0tLuXh8~$RK45Q}dH7oJ1-0vrnz1aHr>2 zkY6hQR!A<FBAsp*5>aJXjOZv%QD)3PRo!$c;xJswz~n~R<_V+9w#9<+H|Aovo@kEb z<3Y-;mZnnrOqf+BO97oOSrc|!(z1AAJTC4@Pl<cdv*Mog0=BQ1*~e{BTJ|Wrzb80B zL)%|KcbLrRJ<!FlDn?x#6&|d^gLuO>np=zvBkYSEhcQ>S*|>HrfQ9L3mso6NZN*_< zpz&+G!$tld3|{n2@XYLsv+<WSRd1M+Y2>a@mw)k3asUuOw$Z}It2Y#H3nX5{E6F;j zG<>x<0Z^pQxrbr9U_x4lf{6=sFL8Q89ww4}2qSQyk-;QVhz?V>VOUv9IE?r4@^#Mh zPblYBuCsRRPHd*miCPFi(l0En>K#)==vg5`&x0cLJdABLpwd+KsO;ERka^zQP7cPF zmp+M_5w87B3_#`>ijhELKN139oS7SEkq${nr?G_0%2Jt?WqMW?S+gQXIi_4^Ps#*# zx;M8P<1TDS_98SO@$TOMS$uV>X^KCPpdRh|72uw&Wvj3rAo0D9qdOjI(YK?qrplIN z<w`b(lTz3z)X71qvXxB@FRNGo1$lsi)VqA4dWV7AI3!i}a?>HtND*RV0kjsNmVzc< zQw%6oO>M0fbrxJ}4=9fV!UCV-kHfVW9d4{5pzsFlw|HqFh_t%s8kC2Iq7p7DmO){z z7!-W1Jf?ywDz}wl*%xEkC;uhA-QDgJp5Ds@2PVh_r(U5qhr2!_Ns0okd{3nKsKP{w zHjsy2g6aH0KNqt)Y|PA6p$2Vc$96|{m{gkD7$s<wo+*>$UztKl{4Am2?N^~A#_c{> zP|RS4?tY?&W^BXu3s5du8|=u&AL!no^*3WQ9ZOn*4Sq%}P^C^l?~)ZkSzld&pwLgF zY!}3-ChRZmcSuDk?wG2?)<yzIz<a2!3k^}}v->!l?7)q=5+0$#1ZQjClO@!B>>!@R zS&;+L?!hp~yZVKk=+U;2%SGQpZ9gHTSByp^TNs3nW0g8fw<x%Js(yz^y|Ww2n@GMZ z4awjAr-|gHe6f00HzYsCiZ9#aIN<OUFdaMuX96)%I6Q7-Bk>?Nn%GyD2a{D9S&aUH z^|+idR5e@=0SAy0m<l;al9G!B1VTz?Pz*=nvH^5uAHAxF6{*&=BKhZJ!Rh3fJwihX z`N4QGR)_cO(2~*N@Hjf#iu8o3W=P4<jS^C_v6E}1;r$AXr?_EPLp@e|`z4tC>x?4` zfdEg?#lDA8XmOfRXyW_C+}!r3W!denwQX02!W}o-FB`^}^V=hQSyrKi#|~YdG2U8& zJ)e!Xp4rITE2IhL-ca^mvjk-YfkvSVW~3x1<BaHkhKj!x)IIR?0c=vOWqUEPpvT-; zLT2eZeBbbo+MnXBBBXQJ*c4;NljRK5kVII@vQFr8EO{gwYOe#?v7_S+U7m*XhJOUP zW7G_9;K8-V+Kz$o139t&G{nUEB*z{gt3SDHZz)vC=zno#XG1BzJ6;z)uuB+wo3IdM zPcDdfaGU{TMz5J&Vi&}a!|Dtip@eW~Ij=!ijJzj%f~m2=X2j>!Or?8eBv%41;I!MI z@aB~cxZcwoi6Ke0Q#>O_bGpMCGPod0=@p0t-l<l9;%xPP!k2YGhH6Ipw%Qr%GoUYl z3bWJJI9=ju^IBO?5Yz%q*XZUk5;U$ANj-be+ZYbabjH9?9yKcRS6iFZX~`<a6tV1A z6u>sXr9A~o?>1u!Hf)MYrQPtoLa(`K=X^$`5=;c5R0=F*$9hp3Jy5EV*c1bH$w?~! zO{cS__c&)!s<&#MJ4_@CGQb~T&XH>tYGX<ty#ZVF#O2iLb*frA0BGys2n}UcsW;Sm zK5@ouZ{WymM65}TSgAg{!Ujp>!|1-_BSr_P<xE6pi7)>rP~T_Q8+{>Jo(ik){^Evo z^r8P9%HDstp$tzy3E37%QfRP4nT^MfDs_5^K-w8ZFSF4{mvKfVD!jwa#;2!Svw^&$ zWEuaL8F}ktYeoWzpKC^CEz})YVjAVSEiL!ih+lQNJu8Vhcn4-c#1)<lHNswV)kbmF ziEhwXcv{|aqfu|T|J`L$WyeI24Wl++_^_ZI@<dltT|qoSQWe4dbv0GMHlp}LSh*lh z+;7_VvINJp+xlkk9A^vYb{En9A~2lfnIUoqK)(|2$_Xra9$O^%&iQVI?;K7&WyZUX zi6WQLAgv`FkGt5tk9Qw&jI8=0DBO6-G9kxnOhe(sQ%nL!7e83=_P+sGQ+lOOrm0xK zTYAAkOS=_ygt({YiLUNvsMNQoIn(@VdIhJ+Pxh+&>oobG39VO<9rA-StjUW;(FbX? z=a6Jcqdr8B(85C)KZ5F^T^6=PFR)BJtX{Of+Qx$*h&G}Ob=tB$tt@$Ttp<P`EJNJ| z8mis<4~~pyoa#qEwN!yoXr@HLjVC(E`G1AoA5Rt7wbLCX1!}cby#am+N`#|Qm>YfT zxqtMyMf|c$*&RMicTtnZ06C8}1K=uw1Y-NEvoXZQfarxCD2?v$w)Mm=!{UN*z^LKO z`w?Ikc~mencQAZM5XZf8aqKIPk&#(-FggH1N&S(bFsinn3IZ6JjVoCKqOaL8#Eo<U zD7eZUrpp51Dt&<LnU6SL9$qI@N~PLzQ`>vUIZDGZ*|QhbSU860Fdz_wuN)wxB30A> zK;kP3l9j&HM6;E{_p+*;fj;y^ox}4u*4zP71XGViS;Zl9Y`Kv_2p|rCes>Z91eYa_ z@%j~^AHe_r=1_1yKK@%m!NK^Pi_d&~UYYCo`yWbww3KUaO$`L@S|&Hz4|M_aX~y=d ze$D76m-`Cpkh;fdxQjQTTXpBoHpVZ7{eKs|j&foHMcneYmaW4iBUDAk!W>-V67eO5 zzdNi9O4&AO5g}SHe};9roTZZ9rP^{*_AHbQ6C|xMv@2{(Y$&R@`i1Ct7)G$I5{oqj zVyF-xC_O6bgvZ4y|CF{EKdh;T%xukcXJ%gmp)}BfD{B605;Z@CsQEc*QS);+gdS1z zYty3UU$FtIDl0SO8?1Y4YlY~G%pG-Wh1OKvHVeGEaxVgYHH|{N01r}3mF<E?sx8V) zntenW1w~Z4&dJnC83V~WREo;QN+yuiu~tuKb7SF=356AoK1`*(DT643Jx=Z_8q$3t zy)P9QEfW|){Zb%8&x5j0S~^G6wy(e*h84sO&s|gmRqm~TQMvv_x?0$~T4x7w%t$SK zK|HSWdZH0jXuJpO*jev63#E$nR8xM2HwUu1VX_+Quol>t#(KGckhaL`PJ-Q$0;1Z0 zo&{Q_EkjtJW{MKi6lg(+6<JbPpNDUR+$|>VG{O3NQ=JLN1YyF}@QuJDI#JNgrAyo_ zBsIteI8Y8Gbg#a~MEr;N0z}g4u2T8~t?_njvD;h9_Nc|Q1bI;`?W=N{yG%D{f*$T7 zKu@@fV5~6r6+k}&>nwFkaQ(A&ORwPC+#erWztrW@FYQU&de=gJk|p~WE;IP>{O|fD zC^5=5A5y<`q8=B~VmYe@HXK&J^zjtH0pj(HL+h6y8C7<Ur45n344uW*8v@CnO5F$B zgP^nU&%$QAM||w3&U1uNP(W@dQS!fObu6we#Z4pS>smMb%2XBZwNAX#O6is7sm+Ee zcf}jl!I`g}{VZz%O2->^aW`hvFZDw00y#6BOaEjY#1uOZ>I1tN<4#Z$*`c{-g<Y08 zxrqp6yJ@56#(lG(d$dpU@u*z=ngBEnFhQ=7TAqy>16OA(Ba*uw_{9B-U6UZ=BZHkq zvl-k6$NZQPaSu;KBVV#U5WT-)F#P_3^*3H+V*L{=TGm+sqZ`jcqmKs<qx(rmz@6`# z2so3K^gzJlT=_G54F`3V#DlWn?G|{EasdE1#fgFIiri9ypwMygtB-m6x6FcQRs=9v zQH)RKWH~05X_M1@_hy-4ajB2kjr=i8Nk7K}i6v<4XZ)PzM=zfqL|}>#YGDwpp#wNQ zH<w5>^`?qKED4?d+r__hh=kl8*;oPz32}Ltj4T5zONh?Ma;U^BXV3UN)ie)rQSDgf z;)aauE6J;n!DDCB1!~gIcoLfCg~WpdK$#!$ylBaS;V!FxMpG6PlM}rnp<#E19E($U z79`eRUHknUa6}OcB;AmIP6iACQAltVp>WOmijf{Qcl$xjB%(}vhXjMu)I0b0V{@?5 zLTxi$T?8dLE>6H9_uR+~$S-M%txh;2!{Fd-BqL(%Id(NTDE9ka=y)38Oqyz{7~z!Z zwhsb6AX*lXxR1(spdT^?_pU{boue7l<ig&cS6k0V^#1%j{k*1|vUt{7;0rOOWKM>D zWE?O)NF5!44xK~r!>#h9R4m97fyiP7xvy6J1Og+l6#g*-aE@v;#%H>-UuCSP|G696 zH*c2l<)c#tt>y4y#SHc!g^v`OV=K_b3VJVgn^}wy8muW=&$=qjLd&;-TchB~t@rS% z_ZkbV!aMB3yz0I1S7+;9E`Q%H%&XoDueS>Gq@L~uuX->1h*h}FF3hXm3*TfFR(4@t z^<Ma5t1xp6>2C0<_re3M!c0=23-hY?!hb)@oHL{;;nZqdOOL62(<%n*6N`x)*>lz& zvWmg4g2hC@>{)ECRg8HHP%O9izD?A{dg3}U6Zl?btfs!Uu88M<N=6_tkZ7?gL<sUn z81^L<U3pL~zJ5=N`J;XDyS&-4Q{vwtR{szYh7L+0zFXo)(JobkqO=adiU$J)qLUya zCL&1SxZ%~tLqtHB`_$t9^n)iSTml1$?dUmEPpcDFV9i4rJiiYzs&-_r{>~r&M}X32 z4^ZBIra)ZMZ2b_gOLugrUup70HhFBk%Nxx#en&L6PIjDF(v;nCY~;FwwZW7;P+gzw z6Q5-tR`(^5WwT}kYt(MugYP}YfOC(gPj8U6!U1%6|GH3GhwA6p)T<m&lB(m+KgCP* zuwa_ze22yv_sN*eG0=F_bRWB9pNw#5gvGD&wF_m_%usIa;_viH$@O>z*EmQRNHDxo zjheh3Q(|pS7=jj&g@WPQ+G#4Wgq#diDH^gY86w_G&Wa0k??J_bmYSQ9pL)PJV3w=& zB_PnIIM?OgG0*-E9cXOfl)<?Z+gY$rK|Rdm@()ocSx&W6Ffe#LisTu8sscC3R}l4` z^9~=N*y06VRu$_5Z$x;6ZYh2{I?U>W7}!uplh4S~jtkQJES@@^KTNN+Y}W%xE<W3Q z0M!JCRthnPYKmecW?>v<c4-;ymPV^N>M=Yv8fc`t0-mHq#N%-pRyVZ32@sg>1^5e? zEuD5LfR;JrglIFrO0Lc+R--mH(Y=mVs6>*8xHiaHGwl~t4KSV-Ay7c!X#*J{pxKO~ zi|1<yoMBv+YmE~l&$6J9E1oE^BdS#688T*o=>ziKraX=f7wlA8XGU9{i8UJN{517# zBgWF7W5G<Bc#L$8siyw1Bc`b{Q7<YCu~RM4a%+tUumz@m-7v}&G(mxDL5_7>J$7d1 zuL!+^ntCGKdi}u0cVUfGbO`+c^}+HnJ`5ZCr`4(ptIUixb!8AyA#F@B=J{&WSL^Ap z0K*P$MTdn^@WpDg;QVuXr4UuRQRk3GSpEEEsl<Ry=b+Kgy{h}st8uXT1{t^XZu4eI z)-fl;m{O>&=I%wyF|iz3+?TCo<ieds6FHwchp08c=yF#p#A3rx4Hf|JvTovl*7rg_ z#d_EBX@T*9EuRwo)Q9IGJr35mpU2{V3q+izF8Bd%nG#ik2`y{X^yM-#AYr3yP;riP zBW65=1whPPz7Oao{v_poBY){M5&UK%U|xNgK=cuLXA;RFOjd<e%}cBev=3UpJWq6} z`&gkX;~{(_%%q23KdnW-Z&R^T-Gw1Co8ofG1k4)_O?f?mM$r?mUESr6w*?ThHb2^@ z@k(EG93(2`e+ya^E<G;0`_O458f9-owQBV=3o$15M7`@y(=f(xOF3pN`cPmQ0wbh) z;`B(ftc}b)D9JHq36u7m%ypO*%b(V9WY60EdFmmMe!G5P3%G7o7~!JhD3=m0*@R2% zN#p3zE2jphsfQjXG`$@^w9b#}{Y%6HeUL4feu!b_r-`PqP#Wm%<DU<o_HP|oOpuzH z9pSWGhD}3s2x6ZEjueqF5G)Del9CoKq1(Qv6PFz)w#qjq!qa-sUfj`FUFH?(tWk~A zonH0s60mcgNK0%4B3Uye<SbiuTiAa6oP2PO$C#0eA2UNC^`CQPPD#r6CT*nCR2{ZK zT<XA#;U7WoRXt68y#{DuF}ep?|M*Z|E%G>~Mmz%S$X8E+YVg1?srXW^0CN?(lRcH3 zA~Q9vcxEWS{&{17#1TeCxlJ-`^lPF&;(_R<uE$ab{x{ttf+9M`<zo!kS31%c&265Z zIfIc2O5r-l);{F3?0qF8gV8)=Ip1h*K?!w|`J9yA$o{5eqzC#?y9i@hsPEuG$toUV z5ot_<8XE&rFoRF@&nZ#6P>J+J<lC0$Ty@5Xf2Er45uvmtdNsCqt>t<XTRs%Ec$)4x zh#n}floHt-hy2yo!}*d(-^^y;;L9+jN>gfVEvNUjCl-a0Z{kAoGn}6UEMs%9r<uU` zdW=)k<2amo()zQLt;LsXu`Xc>lEH72`EX0CK$*>`ee~3~Yc%CxwX!6OyUSddc+2zE zyJ=;>aDvIZitwPdynuBWXgiR27*}&VB7TNd=jB>J^^<ncwn^-qmYO?4?Yj)<111PM zS9hL?8OQU076X|KoTg4iAJGC2W1*1_FIzJzAy&u6QT^lVIA6a6pDFNg^Tj}88-7ev z?L+kFx2VDCU9QBT5=iFIb{X$!S%qQ^Q(HCR^!B+p;rzC$=YbMx<9~{}Y*LXf5AN~l z(2aU^Q&#t`pho}T@O_ppVnS=l1VUxe!jbgMj54wUJVq^Qg?6*Ss?>rn0F;Um#tdJ) zBcpCQ#C0v+k9b%;3E)jj%^T5FQKX((P4^gXX^)5`ApWa6)(Am@d^}!ryovehnlYTM z`Nu`pvBY#;qN9InMG-rKqP^rpd-Eg>DscPiF6iGRuk97agb7XI34l~D?qbW#Hz+Ic zALL^w)u7FRp5Vh;V?mKo8;Tz|y8d`4U4kgduER3cUL3G-Zh{ju)EuCEt3T<JwY8}f zR(^j|=>+OWE-Pv(ofJ5-bY%QnZ!9ZSK3XQh-nNT8-bs5b*fS^u!Ya+lsDb`yHsT+v zSy;buQ=Rt+My-vHkP<_nK%VAB_=6v^F7ZtVA+55)j{^Q+T+jmT>i0mgr5TK-#r~Ga z4UU@YCa2gi2pg*<`p{#jijnh1@y`iWk)azb&5SzuJHo+?T?-&;gID(Bf_1U0C4ek$ zw^j^gkMR`RxMA@NJqu1XE`f1DY<))QP!edPG=#4_qm*I%^ChHdM-EbidQPemJJwdj ztQKp`DypjmD$ykr`6x>LKi4c);#sJ<1XXLx<y8};YG<+F3Tdw-_|;uS@rB-u*u{~V zk4(mPF1BqSx`gE)3q`_!PK~<OzB4c~Tkcd@ccOi-nzah&WIWJ8UkveXtGZ_~LsQpX zphXshM;vFyUebwgQ}g^(h_57ftBEXfpugZHLcc(hIzeD0PM(@tNhYB(DooKU=0$<E zVdZ&F_+FZbXzd3Jx$O5FAA)N#jcYzIEjf26OmcO|e;tTl<cakIQb_{rj%;{5<2sd% z-9eslsh=4#brS463me1gb`kt!({m4c;}%YmBP7v-?B8UAAslw>vyMy{@*wy10GA|a zih=)zrk~jMEeP7FtQF$%SJ?jq&5e9tHF^;?_+4>$r6>BZz}D6K{qau%#a~2Eiht*g z<{N7zPxKf`AAOwBYW^w#Z}O8>ljy%r{vXSu#X5E(SEZ@WRlhw$OB3bT%mflovluXy zvMxTkwCG6A%({uDAQ@P?7-eeJ4NrnSSn{-l!9(g_B!#Z2WqjR<C{9&?A3z;yG7s57 z4Tv34qdM|s2gO8yLdVb6t>!NJTfar$W=4T>aDU;_g3y6uEOhb;@m?$LK}8Wr@GyV8 zD;r@P<-&`o^>WcCka!Xon1I4?t(hwG#PN2|`Tk-AqkkN^G@}hb$Ox}$Q!6E>=8q=W z1%Hl$#+7++>jw6hhb2Z*>gW>ed}TpI?@Uf8Xe|M`1g$F3hRu>-4t_OF$Zajj0~<}X zmdLKRwPZF+HNn9=tg`NuLuFVMB~FU%Jf_$l4SbUn+ri0ZC!(hTn)!@3-2MX1>&&;! zM8~b;q*+H2=*a+q|5cL8j;A2T(7O^tjn^Td)t#oW>s@6rL7$Z#J&=fS7XIHA@;@&D zVvH+lnrpQhNbE<=@j4_IK5Y9u^7Q{h`zKoM=gO#=A$~q;=8?{EPq=XQIyML7njbW# zc)ux~j#+|oPFRPzw-E_|r0fb-IRH`)kZ|chyk}zc(UfW!-oRg@1|27C8if!%g$Cg1 z@w!4!Z1S9x8vVGdSvrt+T&uPG!++({^1pz|ZC{H&`q?1&Gn&2H;WU&=&COH)ddyXw zV5+;nl7l`cRg!1q)THL-s<XrFJJ7b5P4>0NN}mx!8gdkpyO^<f{tte+FJj%X_FNMp zvUM;6KJ?MGJGumm=@36_l4S+qR4iYmUiez*2o;GVjmkWDj+R!@TmVUMAg}z8rtidp zH?kpKbyr_KktZX-YH($BMEyW~9Cltf+7ks~XTTk+xfM=xra}UI7L;p?F{lLn2_la< zzx}F}O=4uhUf?!Nw@S?pg`O%fC}E&=K6p@+6kwBhdQDjMiJ7Z?zVzX;wXvg&0VbTX zN}C24>#5riUisW-{a{+P6dkDR0K}$2>f{bAd`)9x*|Or-nhHQ802NP7u64Etn3~x% zsOLW7?m=31G!dkTd-Ckq={4&6`T=3Hw&{YNFHY3Y>8h;r&ue?2@d22j&^wU%+kNWO z3Lux>V#adJy^c_}T;pw1#RfjAif!hRSON4;<C_vfJ)c}ROopQZSfj+&POU~6Om5_2 zn#_QVEulxf3R52V3yp4;N-)Qm$dKB8YdG9FAUY*TE4R-6m1sm1knEg##-jGIxUHcx z5me*{$geXvuP}e+8&!oyQ7u?m2u5Q#a2e$xoUDSz1V4ttn+qHk?u^i#2f&o5xc5?V z-zPSI)Ph2~)<8xqTE%d<f$^)24g1z)M1A|#WX7`M8w-p(M#ewQl1A1W+ZS*0fWa>U z;m-<`Z8tW>H+rAV2#nukY)3@@XEOuiw`06P<G|vrsLcD#dQz*v_yf40T!4;5v*nQw zX5VLFLU=YKh8v66gVKD+6a{c&{4S$^D}_<@3OwSl8L{2@z+ytkZjTuj+ezSbMCIn6 z65~GZiLVdr93KkfspzfMXJkrrK~Fr(>ZjzZva$>hD#jKly1=-PN)e-q!Ko(ZR;6zB z85^czenW^4_0AZYV^OTG7OJzND*PE*m0UtWkX_(UR5L;};KsIE^|MQ?@~5E&q-Y8e zU6{zJs1`R0i8n<x>W-UeiKX9NuD#40<3nApCeL_D?J3G)!uO!c`X`!1c`a^R<ca$w zY8GvKW}3n%8cHF&cQxWaree7u7^D?%i=S%H*aC3+)ek<k&6(Ie!B?M$<40x%ezaD7 zip?&@-Cv@k{)iCl0(G0j9p)Bw9^MmFv^P>NeB6_lECW>wON`pPkckqq697FOEf~T6 z^e*tzW<A8cwroWr3c}3fGZvL#W?{jGx?t;6qdFL_Q7c~(`*oUI<5eW5+<-)8PpS+? z4qg`ys`oQ<(&GO){sEC4BPRn2J{7yjR3$*(4pN=)C9qT0+%z?DEvP&Qg%3y9&M@^{ zf#h}+5H(?-aXl`lsdopO49POFK);an*W$Ie`|kCXEZW~Mwik|gsfD;vyl7;B(HVom zq{LHVY{0K*SMl4o=PnxAFB&j54BJw?Juqdv_8&rVzx96c+S}e5-eP>S7`xEa!a&)Y zMHh3wmLKa^zUZQY=z-#IVzAT1n0CRo^8iD}Na-bXb_rYd@9Svb)?*4JxFAtaUh!AA zPh_h4d$Y@z=2VRC7tJpI>b5UC&cpq4fOGlm@9-8J{SKhHSawNy@#^}o@i4dB3tqhT zo-Fnr7N%bxsfqf`P~Na_=NGzXJhJFqYZr^jPpuS6nS@FhloGL$KnC$2niVKfmUy|l z^BbMhtnrwK-pH1;(vzg7N9$+n)_d2QUNewE^M<!rmH>^wLQl26o^BdjYC%LqI95Zx z=}YZZRF6RdfSVPM*|lscaxj4n!U1yh#wp0LWIQax*^;F#kMJu9BrXEcsFCqJbT8I2 zL<Fyh2!Uh>PlVkC8jocmbw@BAx742>&qlys3t4&EhAW$Ki~E1wS9@Q8w&$@K1~tR| ztfdFBd;^I;@+UO7Tc&9mpbmUYVhC`u@Dq5tzI<ecdU-H5K@yo)yywU`wy3|t<CS70 zLy3V(lU$`%cA|&s=pS1uTu2as#EB>nj!eSPYt?~ys0oR>&;niv^_-PQ0x~%8%#bIr z>~EyVQZcp9>h&L470WK_Eh2GbhE)87uDD27T+p-P61(C8R16rK6;qk5u0_SB;URkS zv`9p%oQx{bNmgkov>j{L7XzGr))%9XdC1hXMX2K%6@tq$s3RQ5c^*ie0#{D_oQ0p* zQ|2Ra)=|HtL`4wfi?%UfN>f7S0}L*Fzpfu}{)V#C7S*<k>c&lvVXC1v0(zLpJx%={ z_vCkXbk+7H@c#*jF&GpT7NoACy@*BoeG^d&0EaY0%^;fAVf=bu#U83tGHgVR&X%S8 zUXAKp0tnh@+Au*&WTiFgy(4V&B<a<RSQO0WPMxf{kbg!CC!VCfK91-Gcz~ulOni%a z1N>EUW-;v#Q2xJTDNtV;=kyIwkAm&tcXS@u80d2WB{iTXzY4-oW*3gL7;ZJ$%LJb~ zfSfKI6Bx-@Fg&p65Pe(0c=M}-Cs+Ey>g($cvd~a4VZb`y@VRHl7wa2VU-@N>J#C#I znh&<9xu1$btw2>^_E8OpuxVAa*)!*d{j%zZEbU8UnbdQZOH|+z7!S@e7CnV=qwD>| zlZ<ThILnUSZ+Oe7@~&Cf`>Yjb<5_D(;&s~Mm7eLE<gHzL`kB?!+&|a(7PmeMH#i(J z!WmgO8n<QjUk|Ah*@tkonnt4~OVN6~Go$~SrtB2_%PR6yOBUf)({0}3io6AVjjdPB zYQGGJ)gX%Nc4d6Qnm6gez)0uIcuE~EAqxhEBYS34B86OJ?w2?+@LSwQIL2CIRDG6l zt9S82Z^36k()`-Uvu~3Pkc6tUq38sTK<y2>&b^LrT5FjIc*YEW{H`F971gQ_cXwi8 zQ5h2*o~%UP$SOFSKw<IaF`0ZhuAsZ3o^&u4gry%ZD7gX(a;fx+;rnQvM(ytX%@z7y zIC9Izb3nc$9`reK@Sl(<{J1i^w*nj3__};R-I+o?zcsayhyRTr!boA%AJDP38Cbw* z$F<{an&(SS@wZllTmE<|j`{dh!=Ox$wKWrf+V#!o(DnV{k^iN>HnYAn4_V*HPF>%P z|5JUQ7Tv$U0I0q8&#3b&$!H3(I;O{IQ8?gu04AOVesv3^Mh#evEcmPOg>i@LW&>Xq z1Z<EKO*$^C?*r-3@FmNFVeF@o-vXK{l8u(S8ff#uf2-WwoZc5lCw5FlL?$a1ZZQZ4 z&|`SZm1|85^z=TPYaTUc)0s@&zbo56L!)MorN90#Qf7t!0el@4d3>{t4~wJ*q_vWx zJnG24@c4OGly0wyLr>WzV|7~P*7y%Y4>WwRKdV1!;b1I)Fw<ha3N>0<%@d?%b9`BX zw2`NNoQ|!Zimn#en$`uk1m=*25?`O$5ERnLlwRO9>bQPbxt!%pc<82k%bJ9xx3_8I z^Q)U--Na&ZX}mE$CtfnBz{=f#YQ$t!Cxb|&u_{xhdKApcmZ|Opfj8xs=&4$ss#uIJ zI*dwKxOlgmm18q1EhaAXt4lCVG9F6_VDv=X-$UXi;-<@nL<u(pY6w7)TaEHMYSz>O z)D4n-bW?d99Pa$;V@#aYmQd?n+PcJSO9RP-kGmN$2rktUCAI_8e93zc9&MdBh>!9_ zuPkBQzAj(=m&O?H&!+|@e7hE(U)urDsfztQK$g4c5Fq=ukCu9D>n&ZYmfg)31HZrb z1Vo0pD)9X3Sxe=zCwz#%-H-$aqQwq~2r2RXIrGNGUzh%SV#iiR@;7lcF;$#87X~)c z?+q!Ks}i~h@FDQ~yV+>qcN><<1@XBmauCBZ-#Y*svGv~O&GE$;m<Qq6>f-k&aE0lB zE%8=g?H~1$?7H{otS<3Ubok=+9MrzG8PSuB>{|F;Y?HM+|EStX3#yMqr%Vp2nNRE5 z*L$~h#Qp?<%!SLu2Xnp_-zk`ksj}s+{|T9Y{Y{UVxpToGX69;dx0#9Gnd^xTo*F3; zAadrb)MmIEKw%*YIF0h9bxk-$p4mE9j7M52DLS~SI<*BV-1I$A_xXeJz;b1|vOR#E zB?s;LXO5rVjIdupRFMU3$)5ic41Tq*2Mq3LI0Ou?%<2w<1yI$WSQEL)hJkATv4s%U z=5R_~@s{Wbk;k1fF;EQ5whK&fb*!lCxu@8ZDGlOKnD+TK{VCLgWNkfmkD9-^@jnfI zTLEqt?05<IK|KjZH!Y^2;I;WFH*IPXG?=|QolP@4X6kjVYV~~RB^cl1GsQt}WxY#l zF+C!64T&fL1%)ni<4t;?SCMJYUBwNoF{O^ajKAPz4O8$I;hb=>NQtpiaQ3ly$uc}b z+@tb>;w7lT6AS!*%zb-cRMoZjB$*@w44eT11PKx~DheVHP%xkY@={1LAuxl=%c?j= zRD>B4lmKxO&2Stat!-^@TeVuRZLP&O#8(1JK$NEf7F+Rg?T&*sAVNgSe808!K4;Ek z2JQX6e?D6#Gw1B*+H0@1_IhpT8w>8Gou@V4gHL$5KvZ|S`9^XU<wTEuB&b2OUD1!c zTTlpH6S*PbnS6*Zf!fR&^0=fpsy{$|gb<&MSXJ&se}LK#Ax|9a`xSX18rY~vE>5{f zyo_{mPLdRM2YQEGrga(xT~-CO%4=chi>s_O3%DE)uB&xE;mfNn_+Y<*;3p}p`0|?s z^nK+{0;b)N{9^p*cQ(c*8kXFg63PqekVn0bC`<#q_QU7+<IsXSvg>vO+)kGQT-_T` zKH@0lcN)hNZ0JlMNhm^pfKF5d-(&E+o#%)Y87EtmNej();92~WgoZq!Rd70zs?)_t zVoHrg;k=P4i3d-I{fu`+SrjMr!ZvXPybij6CJJ_r@lKOIkdecX`VI1M9+oi~zh~$g zI+V3X65#7y0YD|=_m|57S+;e+38ZJyZK%%`J81+!VB+?F5Ol;3Ix>#S5G@st!|mMI z61-Zt*@248;v&qmR&_5T-i0Qlpv2*Kz)t|>B73oK082cjv|ml|)`&AHgm4gJtAbPV zcYRqM)~%lyj|%c!JR0B(EvwV#J6Uyfs5b=iEwm{I;YGoRfk}xpYr-kHEM#6_>Da68 zi5OPLcxeHT#~G?{8XJQbmeYS8`!}}`!_yt2KV)KswFa%Bzt)Yz@{nZpWw6z{24T*} z{L{%!nuYJ7271z-L9j4_a=Qgi84(kk<EgFkWt+drN8Cj`jT?vz6o1buTw**PQ3JUA zu)K=FHITU5&_<soM@%75Y!@w^R+%+neinJJkGLOwLGXiQ42h3NqVOF@U67ISY|oxz z_uimS9*J4YTPW;-)in!!<Gx1bXZtI@cMp&xQxq~OanA>7k+Sfv<$S`Hp+u!O>;y8g zijgS>E^%M>uefco2d3Y`<)_&e=bwyU&fp4U)cKuWPT?p0%*05!{(k(TNo2xlO|7-> z5fE)(-gOnOjtWec`4y4JiXRSydFgwJf)zg;2y?$IW;sz4Kcx2gZks-^S-7LKoh+9H z2C@&ozjy2*PS=*IjFzZh4GIUd<Xs49)~9y`KRu}*4t{Y`Pt9+Go+H0au4pI~dXM~e zdeRQfhonNm>rbY%PwN8IZTh%o{T^n4ge~i#Hi4sRW?6{8MngFo7Ks!Rh*!9B1*O-w zLkq!SI@0GMaaaESgapZS36g1G?C2&zXML9{hI^eJe2hvMqiEPbo9GlC)ehEqD=i46 zMH}eh{LrsxYatk|I*J1*=?#rTAK-ygB=i%8KH-+o|3;ti_lzXx|8j>1W=z_OflAPR zCHuma61f>qrNW$eDh)h*rW3qhEbb}k)rxdpDSCzbo<P4IZY46do}5}**5N}d+KA;` z-wHjFMZF^R1xSGB)C*lSCy5_UQ<OQwV^tu14N(Cko9Gs+kJ^hRl<S;yN1Fc%+=sE7 zSAn!gv%}?1(jHYhU;uy7ZfcJvllCZ!)euT6c+r#vAqQGiyo%*J>C5ejDIPX1W#TIP zW?ZBXHC{vViXZM3a=4(!a=6}Z<1O%rL%YoJo@X7eJvLst%G&Q*Aa#P~bv-2E0AT2! z&f8WpM)D1D9k0%`1i@hS)so8atsd&&*ad<k`a}|l%z-<2nu)T_#^XHF7|)nZ2~R#^ zD`KDn;0#wp_3SW`RZL@jC&UH+N+es<?QqidFNJlYYGySOi9&X9>7`|0gJ<J;`otyn zz~XA(i^VY9F`4uV0o6VV!AMk%5|!-1a%JLx#>fFx`?5-6b!V(L>JCDW4KOQ5SEFCA z_$-@3+OjBggvOl*pJ+7Rn~Wq#bQJCAg^!q6V_jdRkuvB#jzJ+rpV-%_#1U4;-bc)( z6cEs+_y>Wh!_P+t&)Fv~fv+4%S*?MdF&7lPf(|8-LR@`J5)#CyBWGc-nTUiAOtOWL z?x-?H53b=SEF+iZ!dI{|FUGhPK1esp6KW}JHdo-sbTCEGdzm_zV<HYO$VRv6_S4|S zpT3R93m+Xp#OIAB5BGnr_lmii^n!@mU9zo)GST#BXFG!mu2sI`%0phfxxG^cU<JR! zkt$R&yyI4^n!dRO=dNhm7Ixq(+6X=X14Ge9yr(aXS5ld6Vks^F#R6#P942RRJ^#e@ zRO05lSp-h9_;P>an1%2rb=8_1w_mz_t+lgUJ|AfcrO`d(X=(xy8Mt4MoMnL@<y~S4 zhSl9*AnC=A^4Hl%B@X-ue;p-@DcI$=sxW}0&?9PL(5wF^{!9EjxT*^YdLd2yW&zgu zM}&puZ~mjnT&IfRT00pr`$MzQ*F1(@AdM(;W^&5{zTk&?;c&$u3Ep%x*)Sf(*CY9& zjqcjSEqHFRYpb-0;Uwj+t?BEl!+LtetGn114TbbI@CnB69m?~#?kcM3&#UR-yN^pg zWR@Ha2V#$S$Sj!)a{(8rxc6H!5~4A9nm)dlT4G(gM-;sye<YD_V)VS_0*qHOC8;Fb za1hN(B_Iond{~9BSn@v!`?ddKkd0(#s1t{IHIgYeEco#wOZt**1SE`QqSFOJ-)|KA z;Xvq{WU=nBpcTdXLEdu`&S4pmj|pC|{$5^pbdMAo&zC}@<;eiOgxr3dstn6Y%(Sfd zZ{qJqh?@H`{N2*|AK~xgMzJ5B?47DuiQOZSnDml%1BWqRtiP3=1AQko>-QS6>T?qy z2@=<W;t~rS4Nb!DPy;=MofbI`wZ0`dk>=v94RiqP5DoyjDK!~B=X-?T2evExM$%fm zW7k9+jk9XfeOX+f#VAm>63=q@*;D2-AEWwH?;4w8j)CgeHyWs3>=7^TQK(MjuO`p% z>R>Mw@PGJMYE5+9&>x^_iB~#dJtqIHrrCHX6-6F#Ry#LBYZs%U#{Py4DaKPQCRgJ< znUXTs`<KswRC$`BOfV$8rA)*=9~;UrWAW`LJeyd*To@l4P0Nvd^8fp9Iltf`r$I*K zq18JRE`wS6q;>kEj9AmkU@gyXpH_zD!2K8tB{?C=NIq@|bn=LeH=Tx{{P8QfJtT@Q zF+!POFwY{)qx)$}C}T#F=%Cx;sv?YNNm=rO#j;>b&N0>l^W)1o5n7?wmgzsEi&NW6 zc^V|8S!}a<Wm%|}n$IyrF3v)q5^z?DFAhPln2o@H3ZFTL?$YsOCm+abC`m*-^aAyi zXh1UHouhAr!1y7c>I|-@qBbuDOlnQfr-B8ochVEB=@0Z{0u<bA;){-d_<0H+_0^E5 zWy!-LGBS|-r4#J-J$!*;HJ=Cotdk%BtlrSbugY*SBEirj`pbdFbV2ZuHQXu1C7GEd zkFv*6uJ38W_!s75&87RS|BtMhL>7YE`l|?l6_X55#+04UMdZ3Cs0|;HFJfK8L55=b znkdxSH@X)BC&xDd;QI;Q@XZ^8#|UpArw;P6@I8$2_&&eCoNfxkGx78ylAh^3hr6Uw zD{oO5GWn3-hwm|(!9#DS+vw^a@`TNXe)vLCGb`Pf7JgR&C{=4}!`GSO$d^3)j_xYE z8rw`%gnmXv_=>@<L+o&ZAz*kh!o!|E>`U_BvMKo0WE;4}VB+}6wdy6d1K3g-d5GqU zpHF7TB*g7gn^`7>inUoStHFyZ$F{OxHF=i~7pn#u>ruel6233u1Y%tYir12~DFdFh za0PxSZ$`R-ty<XCY{yfngcbXuLoOwtA6n-Cd_#{AhPJO^%muhiX+h$*KE;uq1LIm? zs+Cg_$dr1}AOguZQLXF_#!eEJ5gvd)YD3HYtRKea_3HD>+DjxwY9eL<_cebJg<l4W zphPd6c$Ym;pjVWI=F_eoV?cg5%{wJ<R+Vs}8}da3qVI!Ck+5A)`^p|UL+blU1F+AH zO(lN9&(UT;UsVPVrgStJxfuayHh-xa0i{A-a2lHMw2;ulP*8m<a*r#m&v|kv!>S@# zXfYA&x2uYDFAUtWRvFVZ6t-l>+gu6~ifqi@(~!^+-8xS~WgW6eBJl*w3Eqf*fWvzr zOGNLIbf4lMMv&GYnjoBT#7%@WkR=@!0|DFLpZzD#+!F5qO~Y>x1Mdk9b$khjl*3+q z+Fbp_6Q6ffyIPv@p-)?=?|4GsTYhW7<XpI|LQ~|12>Zm<>eBbRqV^0b*)oS3K<yn* zyvW}cKCvEuyH#6kR_l!$@TdyQdYfp)1(bNeT+pGIRksQbSqN#M*fW0~9hivy+2lxM zk2}<W?jFJeLTH}<92De~bE+Iq#3*--ET=*y08hzj4ehXfo!k@H`{%&#8Gl9;YzaW# zi+)Pp&yJZ@V)#z>abxjUx;Z~{9o(D`e~@AGjr<;Tj(>iNpK`t8I)DRMtcPi`hw13y zY)H%=))wkrNF6i-kd6+Ri%%jsFe+XR!7Nqw|MU*kKR>mM;P&_tEaVXwoLBw@I0=?o z(>8z+uu|6$YK^brw?5!CP-w(==k9@rdrCTOGYY6{dJHe!zJ<H;TrE$p#wu?YpJN@= zOW0iS(!B#O%MQc!XS-;Ry(H#_nmh6G!S}f4pNyA*JKer@=%}R?>PFOh$b7K`HFo30 zoVi@1&U~@Rx8wsP+-adaHmI?{d@&cc2(bg8&)o^ma?|@*2{*pUpL6JEv-$H%`q^s! zyo`Q!nLkI+&(XV#x;gaIXa4MspK$=C%)NdOJQ|$sQ!pCPV0o<$cH|XazOT-yuVS~s zBs^o7be&6B?&F|oaE?>wf1EEM4~D1MtMzN_9`EsKvnXPN!a+t8vY#1V<#;Y-Y-^{s zPHSxSYsfPft%>5k<HhM%Ax@npz>pz^_#Jv(mOdvt(ibO>MOuGw4{-V{3J;`)vcnaQ zvAfr$prO8#Qv5x{&fC&a3lRtHI(b?U)%S@D+%Df^7XsZ=_ZavMvLhab9t|kU`c(>R z$nwNQ(hE=^f42ujV>@Zvk`bl>pGm@G@)ZNfir&HOfJU|27`=-%y5e+=wtm{3+R6P$ z1_?;WUhy%qKkL)W!gmoDNJAb!ca`}5Is>s~yivIm)4#Mmlhzic`g>}QSBZg_QX$e4 z+#a4*rq9oT?)-p%fZkuFa_<!^c9c;Nd|D(kRPMmLGZW>pv*hqd{qc>ig+`<GB+TIZ zPk0hcB>`Yb9tqO&Kfs61pSU0%SqsQC@*qqj=@VeN_Mh3%Mm*m?5S#(02Yc9=7qaJx zKT+rimQvz?Jx|B~XXUXT3{A@R$crgE*cOitZ9pi@m`hsl;KWYrmZ0^bo7Q*XmT$=O zODTh2g;YCCz%3*V-;oUHFV<6FzPTc1>ciYkfgmP|MGx}aC(d_(+b*}$&1J^|&zrIh zl9Kb*N)Of9BWa;K$#4!MKkg4<HAfO)J}Vnc+;EX6lB*M0pMiLu97&NevG1Y-+!VYa zkHxs~x!56jjbcqumny3%v|^CSY$4?EM)re}Y_)OyqY;>}XT#22(7INf$)+lq`Xjsh zu%ti^iK`UViH4+xMu%$Inqu0MplvvTlo_@3Ivv+>0}gi(%#jp|Qc#e(CkY&$`j`Rh z?apTu(J?k(3?B}W1+U&o>E-HX*;eNG-rrtnIDGY3#yf^bONbS$N3?M7U_BgxGJQu; z4n}tX38FadA&MnhM@ZVRnXz;W3#R_I<E4_U6?aOa<}rv`&lpjgDavn>M2)0{hk(eK zbyl>Hc)>J6YxE(N50H*Xq99@DG7_!jX#~Y`;))sgUWEaY#;y>VUE@YqFGsf=DlLQV z7I#j(97H$y`2MmeMsyF8pijYlg-|>9zzv|=1&R4EaRXk-=<ULrd4u)mKrVu0%=Tc} zZ)@M{w%=&~!>7-<Psb4$Qsr}k7b-958a5Eo>6DrzyHAyi?gMg#%HWkt&n(NW_P+rS zT<<;s$pOb$PYu2qmmB6A93Ygt(v8<LL1Ze$IB+T@kd5t_r@fpRwikx&Zy)^BYXn7M z6Fb+x8~aUR9O9gX5u7kVDPKi3mnS^k<*gEz{L4vnRtF@Q{qTBWt&qyP8Yc`K4&p~| zt|t}~41*MqM<5Y9kW&<i*~O#4K-iQ(#74o|tPhg*e@Ea#j}>4Om+)LTNcE!L^gZ4$ zEnI<#gr)*`p`L0~F$fa<BT0NJ+th3}TtYX~+W1FomZ8-E4F`H+<$UY5=ecSeVhYd5 z8KdpgD%wMH9!q<J<J!AVw#Tw4+^pbrx@?HM#^K9j1YoC_o4E+&Z0IaylAW_rERgLh zik12HYMv*T*+An#z6ZKW1ECpz;{8Ls?$>&Tq4qQ<OydIsL!Ji*-F`b-3<2ZEk{RoQ z_rcFQQ3U)690x24s$qm3)Fb&-CW28)T}bPWiARy-o&QKidklei7F|#X^o<hxG?Y=i zL}&&+Bk6!)uPrssP^kmgv%$Dm2qBZQbxF~A77=M^7o4F%IIK-?FU?wb?Le1a;cDwh z4Stdt>It>;)4BdL+eF&&oxy`x;;gjISXIigh!pTjiAnbfbbn@sI2!B2__(Q-1Eq|4 z8vv5?hx`UKbc)LtsqlNG(G0j%mLYkQmF|2<dIjlMk~EUff+cQrJoz|WpGvNw<slm1 z-#3?6jUQhz$G}e3xB|)qV%!*64CqqOZJ`U9CK#+p6pH^KWbF3m>T4N{KP51R${ZoL zv%Sz&2;m;f&zpBEGEne?Uc2Ob^+Muf@bgx=p1SP_@|hjc`a-IB@dRl)9No!@q$l0i z--RnGGB7++e9PgL$i?SF+v!#s21Ey3g1}Zs<8aVzr74yvbU8>z4&V$2FIsHz<|!H! zHtOGpNwyHTbi725lRP5jkc`47=*N2cFlnNRzdr)mcH(VtDMOe`GU(cH&XL46$iSuF zG2mLDM*FGU5p%<UBnH!H46EYC1C5&-sM=8PB)1K%ZwijW0P7T7y(z&uMXq`ZkLzyB zs!u_+P!-NBt_Lv^UUZ~sm%n=L3?Z|5732)dxGeaL#V1}lAyn_sF9j{ne6<K_`$!&$ z`1V^Uktc}wwN1xXIm35>G3U2_^Jf?>V9*_N(~)TYv5A+iIul|9PQh-tkgzQUXx$ID zKNmgcDk->h<)>JxO^|O4r$`nDIT2~+UY1%|{xcxL@PI!Bk10PIo@1XlVb#rgzCP{^ zNI};UpUog&!ayHRU!!ET$l1~5P9(b*uOFpAK04*QJT1BZ0w}hK4teFXo`xIz3~E9L zaXk$s+wJRVq0wJy!Gx8+jOH7*5{iHYr?FPR>C5C>7Wjc4a(*k4r&hzZUN@%3tY#4{ z1LsJ+f#kh0zn07P0jUl5+|cC>w6BLP@1exc$U8N5h;<8TG@M48_5}-%&*_`<qZ21+ z_y3W`Z}Ex7H6f(7mGRCs+1)l4@~6`20fMB~_;;SUlRPqt*1J#%f#r7m$<puMf)nOM zd|Q^6ZflK3>Fd(LK0j#HOyPsj#Xt_MfXbDsQ<4tStIiZoM6&=+;4brsCF6C-xnAE4 z;A;0R!OXB3Xy<{WA`L)!7H~W%f?G9kp(?V2c=dZ2-+#f(qJmnkieDTUi{F4W2m)b( z6Qy$W9?Cm&*9TukJ>tK*6(O#(a{+dUv4KXvpNIXH)rvnByO(9XId1BPeoVpRnL7&6 zelK=<5YJ>giNr#K+`jvWzQX|>{^S@NNeaZb11=Aazz*>mw?o|c3lPGE`<Q4On?bh6 zvX4U?>5FB?DTRP>T>`856)7vQDc>D|d&{7x4HWCs%CHU6C)U{mgW0|&bM}jO4$7Rz z6e>E>V9GJ8!nJ#1=TnSRsjA8Uxe5~aHgWC9Qv_ldK_(_vK2ugUYPFF5H8b#nSER?a zic54o;-@uV%d}AXers?jXMEken+IXE!=q!5=-1^7MN%YuATPrNMN)`|+`ty$JbI?@ zNkE-uO)!4sOM-kBV+9L%pkH3`X*05V5~*0R43;Z)K9^?54XvoFY*=FP+fY%!Py+jj ze|R-cdXxibp8z5g^|0t;nWCMk#;ru1FwH+BaF0i%%NLd*%tL0y<=I~GD*QjGd4z#q zi~X@+e)}}nPDTSBs-lOUgnbN5z_}1t2@D`7Se2&76gtG`yJ6DZoQS}LpB7qSnhby{ z^XO(G{~|K=>qy(<?~lCF;N2PS=q@a{%8<`@3*;)|Wa!yrC;Xwic;ULAe1Y*6wdNzO z(80wNt0DX}wioC3r;PmlaRC&@kiplE{)e4Ewv#)L^H`SfGpG(u?!;D;k{s|<tsB|F zPR1B=^aq*ptYP_TiW4b<LRF5?6v<}ai6WSne)4nq(438Vej!rlZ6(nDh@_+$FvX68 z!!+{D(h&OS&9NasQr;RxJaGjGsEa(<Fdn#Ez_6OXdp%HS_3^`q@>teKt{Bl9;`>$c zd;r+P*{bL$#P5}i6_X6*Bmh6!TL0Gw;oKqD#2{&MJ#cs+{R3`ej?-|}DGk>W>Txe| zDMXi(-O(Z5!XAc8!CkN`*6Q$HB+BNt2THI7rhA}@40}dxcnoS?@oJmYDU#A;I1)|b zFuFsWhl_5L>M3u9N1K&lcziq22+;wrxQ;K5lVpP+XvVZymRFsxaUNhV8A>sDBv^nv zmNe=tt*HTQ6zTq<pRdI?y_ppyZKNncE^0hsb%fUVB)*~o;;CuUrW!2+(|3xkxbPcO zzY|lxSwB;pn8CW=feqh-;umURAL@pup+pDWC?%iP_rnujU-;LB-s3q+sHqIn`6z0g zYk+S8wvb3<v%nIO{lXO?@sRKI!VrN87NW;Ss0(EKu$00*t5RQ3W;9&wHK^!7**uv^ zH$Yutnn|C*52BH2S`%f;s1|>JH?|&<R0E7MZyiA3f1JZF;c7$B%G&T2%rsJ{l9XFF za@pZ+ws`K%7$%S{nv%%FP3+DR3?P|f)^)OPB-O(vLT){lwIey!trwc^2u;I=TwS{o z2iRqIJWg>1EjV_`@tg$ibRQ4<0E=@iW0}Qc*@65I#c?B<B)P?S<bT-4P^cEag9Xh% zPX-71#0Sn(Cw=N%^ty_QII6|c?qyBojXsq027G6&;&9I0WUqfC1|J0aQiQ|&_z}gV zf?_$Mm;%e#1K7``^?*EA?m)VTuVmt9W4FiXU$F~FgxmpI<49U_cvN4fPiE+y4d|(1 z<<hWDylxIlYy1{3(Xx(g85@hN(9*(`Hku)(HSNGx`1ifj4R=UsIM0cRfza%LwZbh2 z2ih?i9ADvP!(A*g1g=48xG6t#oTW4%+u4bjeueBI2G~lY6;R(KYFSN|mo5Juhhb*) z{-<=q6(&iY16z~K!T|66GMlyK6k^a*%73r7>3{Pb9E>paA^;NZE+cWMLy8#j&msf~ zkb)aIY)EJ@BeSKa{ayoSDeL1J)XRlf0Me67mo1KzdDg`@UyweJ*oMsL)O0UM2sV4D zv@AM))?dkQ=0W%hpc6`1lSeO?nZyFjEW@~k;}ANbqe0;~EJQDz>{#jWBaLKu!~;wD zT5-;E@wO}`ReG*KK@C<|TlA&OUx;xTSq5Wiy&m7fkfYRRm}5_oQf{+#P_`Y9cxnYH zvFtT@z8Qdw8;01;V_Zf~Qlq6<PEs#gg6=sRRmfUeO+$g3i@qc5v5Q}GW*V&-nN<)x zLXl^f!AM$Cuq7O-&ZXzl0YM9A;|C#Wiq_N{U#mKzgwV*Xq8v4#JYO>b8<$`<2L+-p zlZ}CWbl@*BhQI-GvqD41*q#sk4UY0}qXnF`@-QN}6VClQLe4Q5ssjWb-}0z+h1*Fw z`G)$Z#P`pUgNf?sm!pl2di&ldSDwxAHN)gFDYTZy6HA8Q7q?4Xg~8G09|s9}sd31^ znW=i<C)E*e;x_8qY%CN>)t5`gl*M5NeLx!t&NJ=e_aB011F8#1eU@aSJg-^-Iwp4U zbNQ0b3B<d7dB<S^o`DZ>#>*CQGseHwu^e7wl-$o1u2ZqS*b0PgY8U+bV<Zpigl6Qe zgBe(~6{E-zjL44~f)?J0ABrr!g0CLYQx2trkLlaVY(nfsyih|PScpqa5AKLYmNtA( zYN|ly=1g0DG;$R?fK`h#mxC6rq`d0Lnb#1d6o0F-eR*$@!k%b4s*0YVi+CRy2++BL z8yzEdtxXAEnbKU;Guqf1_{LZfrseYfm$xPO6BzkI`JySh;xa6|c~6_gmk8;1CHFs{ zkvfoDB}T|fCQV#LX&7B}m);6{D8;nxS@;FnH)cB;4&`7r*0TuCa1=CinUC|XvTJp; z)*ii7WTydC>bzr;u2P4OlEf1316Vo8&kVwpBc|_U3qyNj9yL$@Au_r#FIW8lRdeBI zp86?XM{)?g4;pbMoIz*4CBbwbx0D<QN10`)gXCp;nq{ch<Ym6tWNaj-4MN^sWi3N7 za>W(>AX$cI=-*#9nIlWLd?YUeSx73~J|LS-JVq~9FEDQlFQGLu_zA)*y}q3WFA;x0 zay9Z!gnCPB{3k)RoWiHG<mnSaYnD2J!r26~T;ryb=su-*S$`0$Ljxt#JFQUWBwdF# z^2}))Auf{{!#tN^$H|Vf<J{pPM0a9)oUKD7*jw#;><f4+5(O3?uz*RV(vJ73dO;#d zxLfsv36O_N*y|8cuv1j&3$;cgX=luw940oyvw$z2RPyCrWg8y0tVZQaNmip}|7lhu zMGhcwHAEZ3AW^t7*P~l}87H0M4Wdh14H;^F5++k6xNqQkAW+zy>xNs`hIJ$fOe+&l zzL;dF+UbVskt0eR>SX!Cgpa}(SeBf88wjulg4RDV6eCB|Z2)1|eI^Y?Uskr^eKnpe z8V?YPZ2ZHKR}FfVZDKX9$3@2EIK2w1eKxnsy_i6<{vuz*Rt~CY6MMW?LtQ?SIurIB z1NJ~*-3JuHIi-Uwb-(;f34OqxW5AwE5+`0HJ39W41w)P<|3|nastlOMe#wH91krY2 zmJO2FcZ8wSkbe+Lz`!6qP5*}JrWRfZY(<`c4r2C`NmqqP&SlvKwvwDgGQ?$g3t{w% z<w`}RHQxk*3hi^Cd&gOLjos(M1CG|BY;8ICkxM5L<O$qU>1v@5Jj!EYx((lCmc<#L z%5;V#2F}%&*^ie1F1Bo~X&5?aIF<V)><*3n@!dyXJz~;-tHi}x)4$QHUgCzd(*r)! zTGLlFNS_=1NXxWW{B<V5*wwKIZ(y@5#4B;jVl4E2Ld*jJg6>$A?cA3_)ji^tgBVb+ z;9H0cv=WD2bW_=mH{`N|XeXze&&mQsJrD;)Ck2$7O!2Rf7<PyqDgVa)_NT)z5$S<5 zxxQvJ9g@IMZGk~<+S70v>RHTziKKud&*tE&9Gmt4G3(%}Tzq?!zaf+213$;NV<p*6 ztx3l>kLX)M6(J!82K%xY3dEAV;(|#81!u>LC<TQi>w&X8tOxdrlc3djNjyInhZF1< zv4M{zM7vlN=m7;F>w!VjyC1dRc%1=)2}ZSFwU#N`{Wu@*XnhsOI7*ug=pde5CxOq} zOL^?X{cmt~BJHKjj#(cQ3>M1P6T2-{FBX)w4372UBMg(S{-T&Vk}O*CB|1&6+jAO9 zc>FcFt_fGu{X@R6P{MBK%W#tOW$gT!B5qCc9yBsUA!)98(St;<{+|?_ljI25upZ-= z@M=X&o@txv&$g-FQURwlYRW*B^EYLnLV2ZmGYwUR9}sTX<CM0NzI1DUD7QbTyOuS+ zr{_Q9o;<+MLEQ``M$d+Y?EEAh)8z1<>K}NDuv_xyH|VPia*9=v%xM&SPGnmkowC$= ze0-6_3Oj93lE<W$p=%rv(A2<aVcvG6Dc72g^Um6b91#G7$z}9XSGY1OcyJ+{UAq>- zv#%1K-~rrFxlrGXU!@fI=>o#N3F(MKPS>FsR6>nO3z4N|fg_TkFUZnsIf3iX=;iis zRSM<bU7IomQu22r-YNLdpW|yZx3PF(0_|dU9AM2$cv{M2$nC3ZC%X-3vT<)Gk+$8q zq2Zko+u<L&HY2<oviBG%dxIf>{-lPo^^Iz;Cbt1z^6FR6{3j$IRq%&$5yIG$7@KcB zK5#p`{-NkUUY+R)wzB|R-&=U+5&F*{ET1OF|LP44SCZk*MvZE)>UZ7psz#7!t?{U_ zxs|EtQMw*e?rNm6#Y-P$67apx9W6ae#X@M!_n5Cf=T~0iRo(3#u(3HGL;eGa$Ib3> zH-R#ZkF1xpAc5BHRxc8QB{rxRe3M}x1p0<jVwjRZQgm4w+TbMjDcyFuK4!}o7DB|k z!Q2lrtti$O%7kvd-5epA<S}7F!ebZ(U=V=oO0t*I1d_ClcdN7`RCKpd%E0q!q_=2% zmk|9f$A;JX!m(f(BrUC|OW(ZKby?rQ8I8OB{noluE~`p`CA~E@*p}M3JMejaYb1S0 zYj6v^Ihk4KuP+;dy4%<Gz09TRRHa<zraEn@s1{d;l1^$xhau2;^l2^td;}(y<@S1f zM}ZaM_tQxSLl*Q+cw~DYj~?JhbOhOiqW#@opMxIP#U6Xbe_g<;8!AJsB4vPE+#7p_ zn}+D%Yz7!edPVwp=&Z+|1Ve_8=izET8+MN8Elr@t34Sd6pkjD)t$hQaWz#nun>Gu% z_1i)jhI?n0{wk@d4Uup-ETNHeYDPtuIbo3BG{!~yzZFDgnlqA8=oXRTJYJdW`2;Gm z0pcZ`GbsUV0x}<ZiP4{Z_#3y;rWAt@U`s+YMp7uPalO&PGH$_<*utNT793EnBKZhe zfjuj!394Ub)X(SoW<o3G`Yc=581)gB-FPL{hYxwRxc+X?5jl#$0Db$LMYJ-fz+O#n zMxNM5aMp(PDREf+jb@>+rusgr|Aw_b?qVPb74}aab3Z<eY0c!1fm7tj%gV{6AX{8W zr$-EgP6{i$zDC?TEbb{n=r~T4xM9;OH1dh^*Dp#UN8)BQQc5>IpqDICx&SgG$+^5& z{5>8_hpt!EC_4d)14*1~R%S+f2GTbdWk&gqfY7QW*Yk~#_1GsRU4+3kOr(0#g*gM$ zwqRx^)D#^t{s3P&esZJ!ozM4Oh06^ZDcZxN8zRIy0NCw#<3WPm-Dt&hYWBT*Z3Q&0 zzoUX6&<GfUJh466@fLu`?w3Vyg~zS)iL%^XFGz$#aFwj`5UTi=WR#=1N=tKmfpi_W z)dih6yz&y;y4Yw7Az@s;%;(Oaab<LG=wfc@uiTKS6^@w~zIa|Tfm-MBf6)0V$pxjG zWD$6;5=02HVhK>%gor-xq_4A)W)ZqC1{5m$8kH@wmgT{m&4WpzJG@%<L>X-u`i!}D zYki+Ulhq=(TSrH!qXR%Nb5PvThGPW2tVHm2KBtxf$B_YV4F3SgvP1lrwSJ;Zz=9Y^ zS}9>@mRqdMGexYx4AJKjY^5FII3YRv1?ZjKJp=ST9#M-t3^4&ro&eaCH(!p3iLF(* zb2dlXB*w<%LF~~7b%gDF7#%SDKKzwvs5OoN3E^{y5+bg7gN{i~IQtP#A`ycmmUJRC z)9pmwNGDcNC7wSAGcm~CdwA?+B**>GI@XiaM>x_LYC6`{Yk}Tg@#l4T3o1hN5=Xd) zQ4x-AoGYrNO3aHj>R;()H1~+QA8ha%YlC&A)EIf)FGM_}rLl{>jOrdS!e}fBDbmms zjqAXQX^E?U<gfhFq!w7up>VG|W~f+scW?yj7Fp87DuZ^=-ydHO(oS2~<DJ*6>+uM| zAM3%|>1|>tm?FCmO^6fj&A?K=g_wPcev;^E$thsHOvVuZy!MAy?b~N9t5!Eqa`rK9 z@t3nqBnTw&FM0#jtOtYBj)5ov>`9>?8p9oNWB4hU!<*QtG<$!O*Vp`aYN7lGTe#TT zg4R5PSj;rqm~OZDEH^fjJ|Zv{=#FR%K1z6*et1M@vl?C!)Or6e3U##RZ?Puk+MDZ* z1E-f3?mjG_VOm>5OWob!PqI#}kqi?$97?9lqO~rBJAdnn9#Z{Nh&xWmujzKs4Jb<J z>x%>m%A<5%Tu_PLo1#mJ@$MC8y=fJo5Yi|O_DnZgdZ7<>)|pJ|3Bo`e3^&XIl{3>E zX^%<bMZOv;)$~W_orW}RdWHegogxAr(E5lQkx>sG3*BUKn4#tSc^#jlfZ8u8Kd<90 zNFwyx6yyg6SHb(q)m@yAiv?0y6Ri$Lay@FCM$dF6B!1i)$W4CKoBo%tAa;^XO1c=g z7n0{5t`2n2A9_y1GXF#Stgm2~&;P|3yXyuFM}LAxF%2&j&V9Cdn<RYTWrT|gki>P0 z9j?YS5Mvlz9>O%C8v>B%wq!Y8nXVVOUg{Q?)&Y?v>God%p0`8b7IM(+BzS%DPYSOQ z#)eKaLi3Srh$7yl*kr`W7~Q|iy3|^`iq|`asIvbpB%nFKr3yvJlSV+re3ZZ79d_P7 zThX;#DHZT337;pH^kt4=028<4z82;)D{lS2c8L1^j|>1Kp^VWsYb+Cz6>jfVI5g)p z#?U{=f@%+%*dy<A%|GUyxXiI?boegkgLLh)e_#TZXVRKu-Tn?*Qxa@<6fASBe7|6s zy?!hzg(n^Vk!nww)$A+Z$0b5>(at1Im?M(#r~BA%(1(shrz%dH)JxFILcKKkk-^Z4 zUnaHqxqi~yg7Lc|0p0#WEL&z`UeB?tcFl?u>t*8r&3<|hd^)}CyvPlV)5|8{kw(Fg zJ(2d`=l^;JoSW#Ib5w;(g;({G+FLr9fTZwUn=pt@LFZ;}1vJu=!a2024}rM8o!Brw z=U!-MV!1}$;)wz}Y-XA4J&@xYi83mw`fQLnkO}i`Llh9yw0rMFgJJu>$&A3-ChcA_ zr`4pG3r1luQWU}kELtP3L!+ZfR(OsxG(oSjH=JPT-2r0TY3Tf69KdByZXAU2#Ooh2 z^QWqx(25htp<U14jeI4LQjsZ8Yy1K)<i&mM(|E5(OYEpjCRTk%aFavS8I1%snLO?I z)LE#Ot2ME9ZRR*6<85rlli;0ntVGInTmAv?ljy2jtE)t55&SqnFDMb+T}&^2PB-+x zEg@9&A@n4C7jHI!KY|nDhkQcBY_idcc@B>qVE_0O?<lDCvu!I!VzAQ)BDkd9wen}? z_<S=M_>|y9?-YCU82mV!eFQ#Wu7d7-L76Q7@ZYCV$eH*nX$A-*C!zI1H<|^jk9{2p zsS;E0jn^m*YeaDp+Wnmve|Uj2nm<$cdvkmZAtvTK6cVherL%}tMcxov6EXKlad(z3 z*B|`be>G<63?Y?ih!%=0N65`?Bgb+&I#-ERe<Om09_q59rH&FTUcsgHw~`^Cqn5zC z%-(IUsuhPb0S%~`S{1)~3a-R}KJ`N>z_BH<QsM}VM2HF*fC)i#dJ^ZOXr%)^1iwxR zd>u2$nG9Px0KaxULd}2qu<3#Ucv4uJn1$1Aertj|y`tBYG=ll_B~n#(F*YqC)Wr6U ztmD?ZL?gZxbomE*TGnNpOXsL>UT0bj4-l|aEc7>YfQwVDGfkrPJmjj@+n`nT<R1$a zcX~sClM_d4_frA|Y^!L#$R1>ha>y-0x;6h;8SFxb9w@g1W0L4Uo|IT=+LVnG0NMER zk5N2hml(AZ3RaEQv-oI&B4gJRl2asTM%T+1!TO`Nz@vKLB!I3Lca~t>1*7XT^N)3u zVJ%F!o21vA@8?}Lxe4CDz`~s563efiG$a<Z0C**pvy5Jh{eiGR<oT$`)>k<}*HxA} zxq%b7ocO(*Xa%KMfp0lkvJ4k0c{t@`P@62qnZ&^;9PMk?ki8TCsbuO1^(!cG;tnH~ zzffHKHoSFM9>p@L$*ppbeS$F?y=8*(b?ksEPZZe{cZdpn#m;ex+1m)Q>{30ufKs|C z)WJOrqHaBi)lRtMYCb=xig;uyQ4{-VuWu;>!ldbi_L**R>sd^A@F1%_0}6;}yf`(V z<T1!6!9zuK(62`hR#M{a!5qOEgWIA8SG)`Jr{nJL@kYD<1$w_jJO-T)$?Sn4xVe@n zIr%w2u%xYNhTMW1&@JY?6fl9p5WZcUkIlzI>x#wT2)O=>RK?$mHKeVhmi#k9xX#uH z+O?hxyD?;dHZIrp@5a$|vp7oCp9#@2ZYb7<P&1Bl^7ucag#C!B+K)hPqLkR+7uBSD z#l6_<tRIU}DYceEw_`02U@f<ayAfASi~tF1;GYH`Py`a<Zm;%CkYl8BwTCJlp#_LG zg$*+cPmr~YVbWg8=m!wx^3x)i(CICRIlvedy*4mr;PAARzz7gUYeoX7!@(ZKdw*u{ zBZ4upTYZOH+{FP=@ZQt+i;qznM;*%BnMXQ7qOoi#qeVVO^z?xLX1FNjiF91D#$Qh2 z+!7<E7%Gh(ZA?V_*;w<}aL^(|sG~LZW>=x<3wSj_rB?K&5faEduBO-9#k2Sk<8~M{ zVaX_TtmEn!jNu%74SsiA=Ftbw^5;!LFvyHNk~+`Q2hiCMqnaR=e}(2u7g{QSxu7wi zc^O6a_No$}^<_PHBwN~~TSj5r(nEjnPw5R-6|*%%Y8qcci^)Q2w*8KY108jjV(yBH zYT+C4L;2ZVgRh>B8TbrO=@IP8)b8Dj&Z2ouZ}kBy7;xX`;Q2e?oV*4LjD6biF5Uuk zZI6Bx?P$e!(GHiuj+gPxw-CqE=y<9jo(CRaQ*_``GMle4_WalCIUBv6i9NqtK9Aht z+aG&)t9m#$0Sf&eik*EgH{ujly$C48@~LqCs*J!ek9hmH424J*uI3R?jF0CV6c&u3 zAvz)XOhRr3{3)~f-B=e|BW0PF(-&`(d{tWJ_Nd2V)^srS$}&t)Cgn@wU|A*mWHiL} z)fO~l9Jm`eK<^+<c_|6?G5<x9SoB8PiWtfoY%iwl{q8qBmzZtMA{o@*mtlMGk>2OJ zg7|kE{(124a{L>If5Y*wFa8<4hW;A#a;}w_@NpFs#alCy$cEfw*p!9Xqu3I3?68Tm zo^~Sa6WPg}c*G(m@HaDm>qG~o;;H0=76)zjC(*eOyJuYn;}17E&xPxsAw84Xl%zDu zvWN>e@ozZ(jf8m`ntv)Fz64e7_zUf^5+`o12=pg!Il8|sN9>?iKc!bw>{M1!cdhYX z)Z!GT@Z>hEH9d_7NM-RO9P-isl8kh_2oNhE^1|0C5P3Nt-B{FsnDcPZgs6D+X{inb zr66K372Q=Kx5W<eDQSQp=wZj;MQA8qm~PEv%V!Tzt*I|n5a-ICJ4n_Q*+2(Yqs`Ji zbUkw(`F>%)5h)|ph!)BxazwZT(E#)&aB<`k`r3_~C|2?cOQF>uAYdgCI~CjjMO74V z%mdCB+P=|Np%YAZBm%o|+b9-jLZAY#X4wM0@Mob7rXW~0rLws-kdLCHgYQI}w(8pv zjE&Wuges#k($Q|Q4ZUH?yvW<dMc~mLM*)1_GsNkiy^LQ1?MI7^L<4a@ES1=e611#< zDmFaItcFDdw>gS>Ty}vIX(<^l4WV`LdKOyIL$-MD6=qV|1zY?sFN?0?vKI(U_6W%% zm(yJtz)l(sCX!>Tzn*6ts674b#$g^s7)TMr2uP3l(eE-Em`)DJGx!^V?{R;q7=iIe zddunUn8?!uUCt#aqvxzp8a@kYXXp+@zeKeBt@MYoCKhs;8F>pybd=+P`xQXFJCfc4 zJfI6%8YdGAf0I@a9p@6p5i*X&Q`CUhcpt!Wk{AfZO2<@SD4`%>s_qJ&K)D=z4W0l$ zdL0cgKbjRF{u1LwZt*3;wBmTtLN($TFY@*}9WM&&%!>dC9M$|INgyKa=doucega(+ z)$tP_F*y?M0*Y~@yYWMDq*{FS2$w9_aWj5}r^a!nLj&SC(-(;CwQ#2Me`Ro{i$HS{ zI8*jODxJugZ0dP;&LogE3gzQD(;oFOku$AWn}joc{ue+b8D|>tOU0RHS~=6(7gCqR znXm_mGcC0FZ<L(L9nYCYP-vc&Gqn`ObEZ+o3Y^OnCvaw!c;y$e&;CFjxA=|_U<(ev zta~7W{3ftPA%VsLCV+iZ5>dSu&}UdX@DD{2P9pPV!!S&tRIWM<Cl<R@7L%<I0;`hk z(;T3?QBg|V7U-_jaoA6TLeuSx=_BJ`CANLw=R7wq97WKhr5y{OoZSRIIX3HD*HHX( z;9qC|b6xxKZ#({N#J@k|pOrsm=~JW@7m5lZCr&6o{f_*t!OJ1)AJ)stz|QKx^R&i% z!s!q3b}ZH#*LaKwcAX5Irv|Ep=_+bP`upQ+mAFt2xPvTu;j6OrJ)-U(7&dz!yeJpK z#YzoOhOH6Wl*%sy^e@=zpctcEF&iQ{P_zZX`S94poU>_5;$L<koo^Qax5$EaI^=30 zT0#Zd?aZ`Wpnap?IqEmQqB{rF*;WIlX}~J`VTJ3whZ*{bK@&yl1-D)XTA^{g3a**{ z^*9>3U2g}-&I2htn{)7?T)5g1s<wkUQEC+24@d*GAz@Ak3HVG!E##Lfy$y%GU|qIN zKcbhBla$tUKZ=S6{{rUF1#;wlmV-@(;gnirXc`J=5i$egyyB1W_#%dJfmdw5L|T-P zSvWzRaJMW5mx8k~QXD^VOz3v}v`B5rj|$3)G#wXV%*p;ieFDedJG{ZmQ_Q<Y`(Xy^ z$jz5#8U~<);G?DisLwqyQZrfJHG04aAc4>*?^F&n$q3{k{_m$e&Dik;L2=u~YtWmL zAuIN{1Vd#@6pM*cKD3O_xEt+18sBYAvGFMbRYCmtVq)#ta(osTBI|Z*0G{vemfu`6 z%O$EFRfbo3oY`^|fQV#M;*5aPE%Ht%#q5glEjjz(3DBD*{MVnrR^lUgR=bTDdc3(P z*4b&6hvZ{QrlM}oU}88ZTz(QcEYNA?cThhSBki`6lw{H>#ZZfVpg!B5C?<cH$^no- zHqU=Z?ix-GaF$YO7^JPQB-=gbBXQ!qj*|~|QvM6G1708GPZ@6Au26kUYKB0Zt+VV0 zbnU^O6j!`~4I%F-uSs)*MCOSZH?c5<yhV$&RjqU-dM?Qj&(c=o<n|ahDS7OuigxJe zee>%XHf=ZxLh+}+g~UqYCWI?WgG|dXRIH(>qLB~<kPv-F-nb2;_ruY-kmaYx>1bG! zg7>3ERZt>F4%#*1i?h{zzA*%jAxH|QPK1IY++^PU)nM3!xU8atc*nW`gi`2U2go#O z!&3E>(A{(TU@~+$v)>+?5Sic=-sb@akUVP5s>vFLnW;%OzLtRy_WL1fqQ6`egkwQD zrE^FPjai^?G!>zMKOjo<r)43!L0%o?cX^Uk9N0$2l}tE#Fg4Y4n)M(NV1n`81mge& z5?nmd?ZC||osmg3sWU|fWETBZDn;TGbpE`0J46G9gwbV3w1Q5UXS!JNzZeg(CLg?- z0fDK~haX6KMkfwTeS)rYUvdSfQgz6LH)0piJ?YoZ>v$BkEKIR*m8n*?;#b3=+;rTC zS6DdHmH#%VYjCpj9IwlUOv(E<j&YHi&7mI&y(FL;355^Q=j#XYsWp+@|M<?evs~@z zR0I4C^Y+j7*&vmM!(E`CRR|@0uyqVA&E?@HdQvkNj}{tkf&Sr|D}6E0$7chxs<CN( z3sYq|T%hrU3ylJhtmWrM;Zj3|%~yfI<JROJ_6AEp=Zk0%-B!D0dt4t~`w-ZQ{k$mn zI*rEW&&Or!E77Lv)hPBGj1X3V0cu?FW1{2-_H#)vc7&Qb0Sa1e@=f$aUn2N~n~vhs z_Xy34e7D`=*sTco8Tuk1fg>7J%X<v3qb{BRR@&YWYNER8KIiRXSqs+A2DukGT3(_~ zq62t2LQS9Jhd3HYF`ldBN0g8WGxJ9G=)a{R5cHbJT`@Y~G4xw4qXxS$6UY#5pADGf z#Y2$!=z#aJ&a4>C(SJ+JT<!Hejll~I-X=u+Iy-(!*m^2;<+yOksj$<wDEL}$YNvPL z9DEHN!`GgHY>rUD+H1ieKJ!}_g&Mh(YSed-+I$s$9};SED7gEq8A?38Gt8jG&mL3h zUJbaSC-X@D2<}9*tr;XJf=d8?bqdvck9-bVtS$l;A*a6AEBc;6JIsasmE`KshgCZX z#)G@$3&}6aPv*ZT>YAYl0sXJ(Q<LU%e8{*0uF3#)iy_Dot5;9Lx;9KY!;Sm^T2m3A zuDw!pM)rnY__nB^EzooQTmUd!=8O#7&<n7^Gp&g<2J08g=V=>*E3>mxwY$mGAGY_! zFNE1Np1@ljFVembUV)zx`dRBt`$oCv7ujO|`N8ipw7cIx0o<fA2Y~j-AZ{!lZJ|Hl z#fF7={2%)_`vYq|8R3cyI6@CvyK&8lQGVCR(UW@A&R;tvWy;!}2nvV*{ByC0fQ1J; z%gs9r>I;9V$CnK-MaR>ch`$ZRpkF84##n&q%(6hzeu|@gb#%bPZJ;sY++``YjwZAe zY|o;pHVq&u#<fs|&&QDS7NCmUTyE4{gPLAw*E*p0)XTx8?a27`9tfY<e2-i)@%6pV zSn3?6c|^|<dWO{cRb`<mWw6!_Hj>&fC*tczYeS4=#D<ywQvM_u;8FOhh7;sY?VoBU zsI()r!6Hf1?F{>%T2r>c`e!4Uwxfg2=QAOH{#E{D_G_s{6&@j4uEIwk3j6E%ZaQ*D zSSIyS$T33pG~}F*yPWPOujO*OYB8NPs&qMB1*%@fQg~6KlJVhYo}$-sIbF5*D`+M< zK;3?-OSJbV8Zx5Ku-e6NE|EI8!oWnB7;&p3uQS~cDvk`n@WIzrcEK25zd&|nN}#5% z7A=Scz9(R0EP^R4ijY5d8J)JEA0gd<S|BYv7e7c^!W|h^_&QT;zn5pB1X?{n7Xzdh ztg`#>Vl~ATKq#oukNMBg`&i|D&Y|^FSr_vD4CBneV`iuCfP4vAgN}Tk)5=JxP7CkD z4|TwM7hkKymGOi424QPB(Jn(?jqT#~d>qz$K>)u>_1`Z%h201!e9xsiNuWW;?~z1K zdBgkoDC3`_rkSLr&8h;xM?%@@ZmD@RzTMb#?~yN52c~c!*T-u0<XAGY6j}1~(XM^V zp=4ItU)>O!B{0a?r{8g**^qowF$VUxg4l`Ob_5PD^~iq>t$7J2VXilw@rHPOg7J>> zqj<&Dh`9sWNimUfog>iVfWJ(ywo9jrLVvvQ9NV4$ngl-!B>aOmLu<YtblEu9(y@*d zCKG{WUhzl|>cGwmdI(Yj5mdSd6>6Dk7^V%A!5vkmmlq<+0w={n)brWHV0xPev$TN2 z>T<&GA$t8uub6_@9^Ye_iFk_NgV9DV@_Kx&^yp`JMB6<{M8f_?i5>vY0g$hRke>DG z{k)?9-`Us++r*6z01p%J>;Y9!Ws%St*V1k?5WQaQHst0Y%TkqCD2rdK1oCazT1hic zOi<01&Y-)4`bd*krrw5M{v%M6mUq&oItU2L^ypgS`vgsOYy#|43brYa+g)^-Wmo=I zeQ9>69MjPn8>pz73AqXw-v`nr$p~m3u_1_cC_hRoHoL3f8-FQMW#P+l|CJc-SbcRi zBmxtvXd=_t{@g@nK=X>_)+U07Q#w|H9f7oq$z#|pB^v0g7Gv-o3klqh44RBl6<TcZ z<Iw;OAclk4`gA&8^f#v26Vt@&NGc|mDyw5GsYoWjL;RDOr9%PQx*dsL#_vbYPU&n` zemSqhf{K1)2S`a@DOo=6%KY83Hp0;9ieY@b!E9%Tp!gZuqyr|wh^gOCPx+ij*(0)L z&H|x5hENmWB=X0A>ru)TkC=`gE&7NU*&mAl84RVHPf54&<7|a7n8QDX-4!={gFo;! zFYAtyoQU`6ez;7j<PqCYC29Z9H*o*vNlt=M!oy0U$kW70G=Wc-V!EZ1^D#V{<4vdQ zqeAv!nIqbVJ^**kB8lFxBFJYMB@{pDo3yyxHR7=N%f*-i4zPRSvL+rJ8PlE=$an;G zF2J?E4^iLjwj@X-PdddNYvdGT%N=(gI!$T~FE9B_1yXR8kv*naFyTQY)8hpxnF?P5 z?2Q5lA$r-Y<843zyZ>^pa15jvcRPZF;cn5oYDlo%6}_}tv|&#G`O&fqE|K<vfMca# zv6-Ay*_K3EZRKUV*d1E&e*B<x`t|2h>=+*TafDxyO_}iNhXz^xE9A^Yn_xtwZz=eA z!F;6n#dmWL0KSB!JfR*K(Y%h!NK!1M(aq}^h3{rj{zB!u@goaJaKSe+ev<^t91OqE zl3V=Kcp&8yIAfCd*IrBqUML|$^<D5Kik1%7FCmIVsRyimgq_VGaoVsoTpEL&0FpoG zG_LrHxoKhCQ*Be;=2|1C5?Ejl)gLk-HB?VQWQvk1FTI5GK;eKoNNeh(F_D)_6?`Iy zHT@pM+MtTD?fAqhNs$sF?AEFm^N#BEUDHDIjt0Na4P^O-|BWR0#p{W~)-qK=B1I=e zESP?EBd$FJwO1e$E>@vFk&E;@%y23u%utJt)~_U@XI>(V=P4*np3M{#d={C*Las;> z5&S4DgTT4q_h;8%EWyl)8p=C6C_j6_KeWaVY2Io2c9V7@iA2Yr>EW6BWD0B~OUDQJ zO-d1pmm#!v&pN&lU+w+^uNc!`p>-#rwagQ&Q2Ps>Fi;!NL~)7Uom!YIN0EQP{Be8= z<E&P+4W?<v>9f@%|KO(GD+U-i?L<=l!8bBaM>2uXbSV=yj5~6LUVaGTK!U39<Vv|r z3_JwpPtc3IqGiLCWEQP7zWKIbeSA;jL)^TWuIw>?UW1>pJplYy_d`n*O(MVz#_1jC zFMSJXzu<f{rL27lEA%W|j~lfjx+zG-inG6b(*5Q(3=6dQE;xq)op31wIn}#BCa$s@ zuwWd)D~EnnBJQBHA!*7vV!V_u3A^k^EEiAQB>~$lfI!txI^-W|u_{@M-QlB%4NF3O z>3$^k|1pIjQc(?<%ty*T=7mWaQ$h|<KPGy#9+tsT3Mg71+3b=TNQTZg%xFbh^nu-X zTBy(bWanF!wjaKeq-~~e*7jp8qihEJz#+U%Azfo8q-1!7AJO|#gX#?2SD$G&L>EXi zsjzC(MC7tkLF016dJ=4S*}48mRX<OknUz=ysIh^X(Td-prKX4q8~s*@2zU^G^@z`y zMw2LzByRoX6>_o59rFQ{B)&U8Hwv64aY{hGpSOvR{Zi`mz&;CQZpQqOw`{>Cib(dG zw%Q-Kk@G^;m66kMf`RB4^C>bgyh>!sBJ&q)Leq()TOfP{v=FZo*9$^|AwA9Os7zpg zBtL<9k%aRhxZ6ym7^*gMW!(YSIAlV?(MdfqdM4^^T<ceRnrr=L$uU{0&=rKpAdwW_ z=f)S0u_dQ^F}*BwR~e{W^6FpIG6eElyOSfDA0)wWF?=W;@asmtPbrlcMa}&aE=Cqk zhg*ujaR=BBCAXI~teb(eb;z&>><e}C%Prutq{x!nQ^}{+S|(K#YwB=7NTfHEblZu= z5YV>ZTxnh%V#q7(-|DnBN#ciLS%8WpD>`80+tAoffXfKAVGBm>fqvqX@BRn;-+z{= zXo1+#&zFnj24Z=~QNo~(Fbc0aGdf@fsuxVCM?+=QkbS*dRLdffTS@anGQZLhL+5Vm zZzzeuy83#36OhCN!^jr@>iKOnGI7<&aF$IQ)<`4aIB@NiSv^k$PvkC751tqm=vS71 z3<Va2#`Q#E*pFeTcH!Ewhrgf^k@*7>R4Y~FM9!m-vKc5apbDO7$muZyJ&CK`l(;K9 zauz+AMNdlki7TSv!F{cm-zEIO35J?*#{F}EQ3rDEJd&u{VnPc1&weeFu3-pP)ewis z*Qz?l{1?zE2c~t8xSk@ml9{cpl7-<G?TQX)gibQf)Cm0J^)#-5Aq~}HwSL?A{#e{k zlwxLCsq%<x&X%VFlni9ZlZ7geSO&_-6mp2YVA-6W(+t!<H`o>p^$DEm5iNd6`(Q(7 ztu>a@EB?SdUR@RylMW318?8BE<SJRrg0vVv)<RlgsRXRMq--$*5$Jt)R0WHwcN!K| zR%-$i9nua#Dth2o@yXMm*C2^r;$er>m~`UWf#Q>q%T}GoNJfg@c=YNUhh7Kq9@upW z!WrqL2t_Ylq2_{mnpVc#8Nf2;RV07v@4#D&{lSZO&h%En)l{P0r{z%WBT-DY3FBBQ zRnIa5sb&MZ1eb?@CDAEa4!_~5v^q57u4-J9n;e<`y_6e<_9zK1(Yg`55r+YzoO5Ep z<v-gBSt5UjhDq!JV+^FrTQq?(G{Tuo=3pZM1}4*o-YvT(-wShfxj%^<OtJdNHY`+F z;s;|-bo|`=p$Gnwamc_Bya)b6t1-_hhfS9Qj<Jqf-xjw4s>Ri63bX+-mEcQwui9TL z+du6*TJA9MKj!9OqCAZ!;j(dQslfexu;b#k(p{nQE~Sp&hVzivGF%<EwB~*|TLp&t z=7I`I#!xM;;p<c6Ep@bUCf1)si8YoI6S|ckfYzw!|GBFyDTH1mI#}*_mE;{bU+&S0 zcg^$_elr6Gk~|}(tZoJ<rM?YElj1E^zJ*Ux6n3Wh@?y4w<EUNj%e}1vuMX{3eiL<B zlm#C9j^b(tK151=;6f6;_?=4(+#arb?NFq7#ZBaAg}j5-jA*PTuaIRe6c6w<l3gRM zGhyUf#u<al@p~wv$TVco6~4b$F+zzih<{Z2kjF;?Ch#&qdTibPATd9$RMf!z0WiX) zQk+;TT$Npg4E`H_L+oMyPhxr%mALy4$Pu5Edf#_D&o<^LQsrAuZDiTe#(q!`pzEjL z0NMG+9=Df6GqzJ93;3T@&meV<OZ?$H6Gi$Eig+F;n@G#q7(B0b$_7Fi3_nj?W*Hq_ zUXLgR+<$Sp@g2I2$A_RL^1nyGfip0~f?Qs40C9;Vj~wgxxzU+It(28OEkqHL#+fn; z`oW@d7@fT0gS`e?6!9(Pj7VPbhWYp+`IwN%EB@PjJP_$CAsl4MTf%qTFVUz|*AjSW zz8pAwU|oqC>Vfhl@&3Dk9u#m#P>BBXG^_N*tqcVVo*5e&_(H-QACW-iq<CiuG>r*v zW3et!U0P_DqNhZkWCJZ{0fe#%ct4PJfzDeSy0CQ6mqJm=DneuhTfQ&>!={~X>=zni zXKEzz8}b}o?(oCe(GM@?Nvmy?mLj_(0RnnSC&6n6d3Gj~NnVy!7j(a^!g7AV)-+{d z04@fnYgmA`oVOrclVq)g)&lw3B3}c35_}M`WAb%en;AwWi)0~J5b%i8PgKVwUA@jw z89;cu4wryCF$@Qkp^CQy5R=)=*Nku*Bq=tNr}dYz5DtmY-U3qqIdI_+TL(m*&uMUR zl9H(ySQymzi9vA4SI-RklOTWFoAVDKt5pCuW@5)@$3j@mELYgw6q{Qm^Y(|UFQS~T z8*)AZH7S`N!<XSCPg27EzU0}PZ1uWo<erD;lN={G5rMF4MdK;L2z?ASo#t}tu*vs_ z$SDX`M>vNA%Y8e0&2hQKt{t?;Nr}}=Hp{?bxJ1!41S8s3oZ(wDmN*#SkkEnKdQdJu z+OZDBAblf}8UIVscZ&PxVce30$Y{ApKPZ4Red|#>(z>2<P3c{3?vF_Q>R%|Tg4~CO zrPz+kS(H#d5a-HBU$7yuJO%l;NIt_FUXGe{DDX_F^34FSe2=x@rr5V0X0tP3>N<_Q zvioL+QgRd6OX_7(-;YP+OY($O5H_fZl&>JHWRb7})9{(q)z#8F@rC7zQS1MZg88+O zlH{QUS<MD~1f&F@kdw?`<n_Jv{S4$kTC(d<G*pb_<fgSLW^v7uW1w4OSN6wcBG_II zv091W`(YJ2fN3YuY<%QXln{5uk(fsKdI<h$I_`4#5E2Xs3wh40mMKsCwJZ<#&ygyo zoSGD`TWrO4A#4F&90s-^Aq|9xNQT#UkWls2TDEY}TTW9;S5f`asIg*LwOGpx$L{rY zQStj?#h>KH%5u=yaM|q`+3khg?M$N)t(l_uy}r5c;N&(VR{sV(WrI6za+cR75A=$a zyL*CaWBaav!CaGFlTZ(jt8pmL9cYag;H$#=14Y>K61B9(XMoVi=^|CLNZcF5?}k$^ z4x8ihFKnSdP@7*E`3A@4fV<(;XlxsQSquHa^M3OA1PtCIejXqaqoDRUwelT43UQAN z%=x$sDu8=rrrg9!<MpllJwRY)G%AsX$tye}R~CqjGd4s_4U#TjRSWWe$9%ogZaj)% zhAmuo6)uCGDbBo4?i*5j)y5{~pUH#l^qYfRk(XqEk1gT>#$+8;rp%ZG#<)_JNjApo z<g04Y%=d*EV_XZ+Fqx@)N;+U%sc>(K#4K^MS)hrBc_oI)kR)t^1zyhA^><*?<wjAh z*#nm0^$|9S;jyQMcnSmQ7c0LaQ%Ca{{EQb0<bHsh>+!mMFIHhC;Yc7#W)l_xjw^cb z?1>HGqzGDfqe8Vpc>HD&H;Hk&$H}re8_WaFFM3a_fYUS3W2TsSBSVuiC{T0B6;~I@ zLNP{c@RvL#W~lrKaAzIvg_t{>&L0nw%??kX9n~6(;F}3O4~I?Zcb4I+48xtu>Ul`P zxe)Jq<R5?lSb?YweSzH&x1h#L(`&Q9t@3~_W>z`U?uDSNAa0R^8lYx3%oLwL2-i|< z8^WyF`riDlVrgqn^7AEjGXkVC>&F!AQ*V&)NYKDspkB;H8V<Ba$++|MZ4@*(QvCLF zz!<3*usG-=msu$Mj1&e<MtW#R|5>iUIIPSTvBX8IzT$jbVXrin$$`H9dN~q=@IfDT z2E^WxZn5b&E1b{+;`jpTA`M&*kqCLdvL}!*@!Jm$W33%b!U1_W4azkBtcq?rptoto zn@}~cVFGV^T+0HPHILNV8xbL`?;_R;ge=~P-|#2aT@B>AS6JUGJT-+JjAcRC&8el$ zr)?>lTcSWivn32hb=sFZ&81H9kigZnJ5-tjMY*9-#?q$HQiUpW*+Qx{euPnQs*J|n z_+~gd#Mn^yCk(0$E3x|^szZCbz7t=y;x@OK@&PLi8DdeW3=(DhN?AKO3mz+9g0)k2 zgCsimzN&UoK6mswxrTHy0M<)v$Eq~-NX0yWMuhQ^p8%I~+`dNd9GCb>m9fY366g5` z*&KrNAZc{;BPxQLK!nQ@%dSveQ-mMvN+hlAq4Q1-a*_X*9TZ%ASqTV?xDb~Ky#|2c zb)Hz~p%EZ5f5nKzR?m^GZrF*^*u<>2?FiA~2Ln-Tj4l8LgMRv6Lp8Y*$TU(>o>)r1 z{R_e3W+6lqyA>2d(8?+o5?)#MVSE9FP=I0(ldsQDWdR5*N!()t>SfZknWLJ<sW|z{ zUTPLNjrCxlD)1kWmB<2~han0BSXe~BucI8oQX;kMPU#3$Iwk<j(huGT=!*%JF$<}r z$B>G{v!PrS^WbVhP&2jmcuyx8+~zUcC9aTftw%__m#S0baz{;v^_@Cj)*$m5YtL+; z>tK9wMGSu6jOPd5nOOO3N|!_E$3e>as<QSHCi-H~|KMuS{j~fCpxboALw37(VK4U| znN;n|nmh+*ovBw4;6Ro9oLr6z-7gCn9D=ch@4RW6FR=wK9tR+840VeaK9BX$NA*!D zt2Z6soWdZ9Zr|b}>T53oal7|*wow@PmEfW_!069u^fxU@e;<FqbF%g~d?fX^C`o_M z8-<hg_lJ3EexMt2etSNP&Ch`0?M4%^`IT{h$0jGvZ>mu^S%2eIf6xsPpC!M6YG3ok zH1<CwY3tbgJW*g0cwx2J2SlOurJZ|uweQ_oRBvgLdT+>j27J#ZQ8O(tq*}Z*m**Ra zE&b0_(NcRs`pAWJi^WL{igh_Y#}w+|y30UTW>7E;<(^1NvggZYn-0`f2IhIif(uYX z;vtPwHuKJ;L|6?x-8g$Ej5C6bgnc9jcCd^Fwq@dv4(#n~dA=Cf;K2D(btUUgN-~;e z*@a$F7Fxw=3=ICs`+;-m1Y~;&$3xb?D+OnCCY^Z;q;HI&GRJ;~B$<sOBu|#ZRn{da z2?~J9MdW^uGnqi{z=;!9xMord#gbzom6X=_FcJ56!gnAU{~CNX{r$IB%@m_yBT+}4 zKmiC{%=h;qV@7$>#yqr2JaJ8Dv?l7UW>=wmBpXxHGauj1k15;aXyb?yi!b~M8UV?O zs{=8yK-MuJMf0P}OPMIbRjT}?M>vROcM&?D-VaJ@xyVoratm+2lfLYKfK<;L2O|u` z(p-$`+(Z|-0ffoQOKu~tYLXP<f4o}aMp9mOpL}V0@Tv8|fqH!2jcEICO~*ij9bV{O zo@|G8WAUxubL_7F2Hefs&{l>h@hY+J3p)tAosJKzI)VBGv#4gF;I2kgK;o~ra%5=) zER_AzPJv!YE>Ju*hld)oQ(0U;fFBlbK2Dev<uM|^<bFvfTm8eth`)mo0reo~=zC&^ znHyLO4}AyDKUTAdoG(xi9)P?3=P;@n)=0v!cadqwz_H$9`$sZA4)I5tBUEf72tny& zoWx9av78Q>lnjoF{u&MuBQ)d9;Jic1{QzRA?AR#nO*VWIs#64ZF1sYI8ti-c0Wx%a zJxCHpO8lKI3e{+?#T^HT)7d#oMtuZdr*>?C)rb+<5A!xwCe-A>BR)iIJL@<m6ncqz z3B5!maRAc9(F4>q{XB{zC#_=iC8`r0@DVrRM5uS*BD9#xVJ>#$50!V$%djhzsgTD} zrpD3EozhJ5kHHzVk-i~(g<6fha@W|Z!%a>+^9dZr+~V4s>2yp<rEbx~R5o0aQqW$H z_=SJseIR2^{gIx5RK2s{_{tZ;Kc|YpXi8vc@Vm67+4_-14VVAx)qu8URqC689^s#B z^tvO>_x?=e#No+eNhf|I6{t|G1$v0@|Azb)srkoZQ;RZetn&kW>42u9Ykbub&a5=U zdNLxA`YM-kESY>mDr72VD3O=9pw}h1l`A^n83ONCOc~O+R@P?ViJ_50`)t0{56?tI z(@qW?bRxMJJb;k_!+#EZ{dfC^z8OV=PWHE5ZyS#Asx*7WqJsA2y`~hrv-B$p=Y&ft z5FdXC-=Qx9p+#nHy&aC>p?N3ix>Xl_^jfeUQl;D=Fa+a1bJ-{D0B7)2)L++d3X{A- zyZ0t&oWk}1D4UUpayFj0jdX#0^$9p55LIg|z#AwM;1gU0SNsdn0Z@`s2MnUiIR=AE zfZL{qQszTVz<V<;Lnsor6Y$AOO82K2_pyYhqy+z!;?JfJ=X}e!-$ZXVtY~yHI>JaP z^eC;BeyrB+B@J)<AQAq6?qy=cwQ!--cQv;9FA0^qr2le@Ezf3~v}Rel_Ht{aHx3I0 z__AokM(vf>l0~7Ea8;`Q&e{yPIPcYG!@iD3I5PoxGe*3#>pS@HVMnw=wI1qA3rh%K z$$g5F)H%X-M|=ZUQFZ{yXt(8o@MA)Nvs{Szv~&i|qV=oKwgpO&h^TkhTV9v;a9e(B zaPmofP0@ba+G~q{Bmk=K@`RT%yi%u<|8+EwGh(mgF`!yv(Us&~-~vA2MI5jG2<wlv zHf40i7iY50s<}6hS8MzVK&3tphdn9E-y7!c5nz5tCAzHYxgL{=cI;0;noS8vLpzPM z4}Zj)G*}z9!Wca<;8?ayu1C1IOW*7EhRctNUFUp@HAdgdF94YJoo!$CJU0p&(ePy< z_P|B7aEn4&mHO<Xi$X<}bcG47cAI?^hhBTZUVpCka_R;yGoo!O;UN{XS58591$&o1 zf<zRwbo7W&n9{0+dWGtbcF;EvYZ&Cs&4D|FiMt1*QU5Yd)C#Qo65|Tn>n;0Ze|OZw zL=ioMUEfG38m>&y_f|p6(-Sm{gL3rZqe!~ucTu4O*dM*}TRVPXZDg*@CC$N*)_uW< zUwex}`r4nwBm7PR@NWN%wHf*ep!%q_`?Z(1g{P*X8(dAa=KD3_2HQsnZ+@j!o3>?9 zsOQ=<F%W%c<AK0FtSW&d6~oCGv2WLjP=9!*)E|wc0YQPr8V@tgR7j$pAr=|rOzP{i zJd{uKkQdoB!*`@E(o?WDi?A-=!VhJ{_FdoQ?}m}7{3z7<M3e^6M~?;JssCm!+Fsm+ zC9p-(C@|(2ji-2EHBL3qWs-ksai{i*b56Kn%{f^9VAtx}LBaYi#Ew3RI@rD$&01+i zWNb;~;zgnIEYM{<OZT|Fk#u-m(Tct=Ni2~kKb24G8qpa^P3xRiFz@Kn$3ey*l{Wne zjg?HC?ega|&^BGYJRM_=<eN#giTp**RPTBySD;9LlWE?7_Y`Rkx<(E9tKnv#pXj&* zZ3XLHn8Zo9zmJtvM36u{#&1o+K{rPkWaF8FO4qfLY%rXzWr|N^M=w5fE$)q75CVZR z1rfC(yuY&{e;n5ThP^iLsH7^PKxYDB(HcJn;Jx~(a3$6(GuSTIY{YlFqKx&!R`ud- zzMz9*!Nc~~?SPV^yN}`t&`?f+X0J;$)Eb-c2C09KV9(z_3g6p{1#MzOUch>W<{b(J zy0lm9bEbuxZOBU2@Ew(?9b52mJ^bZpy|2~}H?;9)E+`kZ10@;wf=aa=?AdEGRLCi| zX?mb*@)`_DyPHzCPPRF0wq;rRmb@$4Ix^O5ZEfy3)w!nQF}yN+0aLBLB;35_94yOs ztF?QAc&Q_*>;SF|EIt%UGuKlIK}@q3aQ?vXRVm~}vjuH8d~yY?>((`)@<VI4toh`M zHCxv-mt&8&bvWU?pJH1EpW#DmwjONmiGZ!<)TxmnZK5B_IXkIjDjwo}bI<0fDZ!1Y zYm1{OQt+{M-zPx5&8fB#d#5%)FN2%Mav>rp5HDuZK+2C^7;vcg5Jc+8rE=^U?P(|; zHOs2OV-GKgWYwgS>{lJ0eF!?0N)n&mas|6i`3KRSmld&5dtgA)HrxGDGT@Uu9?t7{ z9IS-*JMpValCcoUuZBn-1P+4C0Mch>a}o0=gFRVay(*7x27@B}rF^K9q&)o=RAUp! z;dj6@2>N&X#(|fTj<jZwTikJsXM?mL$oUDDkXI;1{TnB1WFiWTlIkaE$2UES#T(_6 z+LnkIGA8D~D{j3~ihlZWs4&SD&=#)1UdRY;R(s*_u2X@YZ;)NM<59c~o=ORf&|b;h zK*1XbdS7;?_Hrkr31`^8JUs60N!QGAMec0-BE4brBoDscj-etIC0PhyCdjH4x4pzl zdy>7$gQXHDDyP1A1k{FZG4@XoW2K1Y|4g6mI@Xr!@2l@>`!enL?%=16;5%7qd%(r2 zbE?`pQjx#olT7ii7HW>tF@KvzGI0FW4Kwm)5J93_C@|H#%Pdl^NxpeK3ErF+!=)eg zt-&<m0|<3p4y-EK;!6+e!K&{B5BtRRG=#JDw@$IyTJjn|vmpo2_m}Y<GFK5vQ95`` zDF_oO`qE1B^orczE~H<D1=Sg<90>$QVmSmQMbeSn5Ty{qg4hVHy)+m7qGR8hUp#^! z0<H0X@RLPq(c@~T?UvRX)Volr4>jbQVO}TXf`?o$he{U`4gDLCof`;wZ-_3*i7v?& z@6L&@Jcldut4}a9RomUI_N?fVtmqP#xW8NNGOo?9o`}^h>{h!-Wvg~~t382hb0X^- z394H<)?$)SbY$tv?MQF!5fylR^A-Yun#hR5w`{+`oFYnMj+k7i(uc|EOW?;l<cF#h zQsZ2uC{$U78R<)K#1*rt^PAhKpAnt6Y`y^&D`%*5LPH0`vT`)n7^jyEr)!LuA6=xm z${gD8HYDAtbS%=A?YHAwsgs{9+fPqEbkdVLDzFmCihGqhaSv{3U9ZxW0WGa$v|cfi z@xT$Pq&$PJQ0bE68FX&;51x#T_gJ7G4fWh8?rZIBdyFJKn4vO4rHf-nZAMzq2TESR zXiBC~$ZevO4ydIQ{u3NUN*2P>{raXwq4_SoavZp}UOHML4dz=hGFt15*24c4V6`A! ziBCO$27U2*)Yu40B@1O$&kfPqyl8E%nA@%19QEAat)5%en-#6iiPmO|yl(Z%)bmN* z>J_SbMbX-<Xf6C>v6j|xPEgP7M!ir8FQ;dmURoF`K^|?lUO5XE(+a!hs+=R2w8C7{ zl7uBKp(U-rl1>VhEYUX|FP%WEroFPoKdfQ(Bw9Lr5A<*NjFzrpn_Rp3F71_VSdvi5 zV!gB|*m^41RZ&~5y}V}hjpw?Ms5b|H8b09~TWt$zwJQwQ74va!^2abVSxO%(o#67v znktNYIRL%1+;FaI7yb$Si{c*<Zt!TkJ=ISC((Lw>)KvPBia-3HP5x28<d4&RrkeC~ zWsG0dVav!ERDE(Gv;n@(>vG9e(iPoTjbtnXoY1&<^!?F&K-l2-V3su*(E)b2bNAwm z+cWa&K(6;p1x}N!hpnk-vPaCX;&jtcZ9IwM;M-#jCv-@**DA029ni=<)%Pp7agYSS ztd1JITQwN$O7Ry3yHW!~*V`DxCCZIl_Is^a40e?Dl*MQfuKP21CN(rsl>k$7Q`(X_ zJQV*deR3yQG@cHx8BSWD=spnp%WEj!8p@J>_?^ESyc)x%G9InyohnM{HCL=ao-=^L z+Q$b|<m}b-wuld4Dks=+oXCB7jab74q0yKi^R}l{aZm`7S6Imyiwq}4BRe|6(c-H+ zknmkvuckuWqI4^FUX(&sENEbcNM)z;%RaJ03QGh;s9PXvlZ-<0$)RzkvJau3r0jO$ z@aPt;2c#m39KHJ^u@GR-33oEp@Vw#TciqtX*xo{niaZww9E<ew-HSrgGvdTI)Fam2 zF4MoX7fNUl0W{<z=r<)^&4L8+U335;8mVj{12BTo_b&9Mp5rVVI16bxaplnzRt8Gn z_WAEJ=zA%JCKkr&rUoQ-<xVWhbNKthH&21&<Lxn!Fmj^&g5bdv%OOOLkM1ufKetiA zdZ#Tg9P$Gso*@wX!tPWt5yC2j2^@uI(aqh6Af>Daz~+@aBXi7HZ;G;@?LsQgqC6-m zc|H){plGq9g}@n>$vm`;Cqqa<gUfH7SWF4v;j~y49nb~bL>Gf&lj&zpMiu8j27IxD zhZ5|_gh45nZsM6-hhq|EGDQv)>S#pUs11$r<selRK7mYh+8jZGDJ2Y((DV->1_xjT zJ5wk{12zXv+q6G1R<%>{ElJCIS9A}x33bFi%cQVQG^ykJ7Yu1VzJGq1)F>I_$Nlsh zA%eji*?SE(3!-d5fF{m!XpM9aJF9lA@%$r>c&fy@uYtc3FJ*2fh^M%M7|#1}Tv`Xu zfSl*xz0`7v@(QR6$epG{ZA6J9d$j%>of6qN+i)9SuE4i?Mh6@vU}6w?qQ`~EZv_7W z%n7$Uf`ZVd4o<KK`iieN{SW7$=3MbFMv!eg;HowPC7#>L>ub0ol#?kaGf;wjCWUNe zhyl?k!uBtj|3(%uuZM91C1^y-6tLop1VaK#8<L*DIhoEf;xSMR;GJ<);Sv(wp!f`C za_E%}vkDlx!0swwV|_-(_yvi^Y%qY4$?fqu4=G4P{2mQ}4HsqO4T!J84u!?n?Gb*g z6-WfIs0Ofv!9h&jr&bSQ6FgsJ7&$|LuX<d@=5zAroLJKn%^*oP5GpU1H_(7Xil4-` z$2aeQJQ~MOd8EuXNc3>9fwAEIOarVY9matyeS^XQ<in;|ZsLEIU5(Cj+5aRu;Aw>v zImT<JS9}SVU;Y0u_b%X3Rp;XOBr_xf8Q2pUFlf}V4jN6=NKlCbn1tNqnh;2AMX;?+ zDYh16wtyx9x)WjC4AN8Es=awmPyffZ=d|{spskjG&2VYC>0d#6L2KKchAIeRg2;To zckMlwK(Ouee9!kC+pzcSz4p4i>s{}9*L%HQ;RI_Ob9<LQHt~w!hi2{WR`?N6`0;4s z6$VgX_tBh`7~>p#k?(cQ6&j<I)p~K_713M;qmvve_PMyiqs+m4hA5vh7?9D?u$V{A z=(Z43hZHFy>kwAhz|$Nzku=#9)n`{uMUG-6vzgO3+087;qB4gfU7H5^YK7qbp}*bg zd<*fLs8Vw<2S0M2Ik+kp@ay)(cxl^yn8de`oX5(xG(8JoR&lrsl+W@uYqhhy&NhM> znJiz2z^XX~)y*j~4<KQQv&dD}4u5NFO8;Zqa<JYnYLMl$+cKB1>R*jR1USFFq$UX9 zJHI2LA_h)D*1n)NrbXl6gC>pD&r7_tW|GA>EFiwdm6uw~0-FI4vLU_|&+-&1>NnJO z?$Ww8@xXZDHzJi4i`5^0>69!`dNKaeEZ2!zzZl_>!A`>0yQ0eKgy;^ttyiZh$`mqY z`$0@$y;ws<5Tgr>4?Ox9>$AW5bAmQeTFLiX=lKAQk(4B{RM0X2TJnXxe(bsT|5_nd z;?-zDnii#^gV_c<!S~PtuPtU(>?JeO;!a7Aw1S_>DNN0m_{biVQ#gm@1)-qAM*5VT zp(zq5lCiEK&&evFq6<7j+Ji#f*?6bg^ToV)Hm5=`9wFQ&$n~;<zvmb79R#YHXepK+ zV$ta&NAUD+1y<=&auoj`p2TbHb`(M|GrHHA(lIjc&9cDwD@s0efq;(1$I2^Yh70u| zA@!tXLMV+%PO;hZSn*c#$iCBECssX8t)-++9cG;NM7~93A#<cGGL_JcH60ZzYuSY( zDwvzI-oCjl33K5Fo$ZtWFe15J6+WQV9f;lzKSrVh9wc|F%?@6}jUrLG-HA(6wx1PH zWbGuvEL}O49LoQj;}Zi^oRlSirC=PtN~CX_0q`Kaev}6pc>U_CBwo)V9QV2LI#HqU zx?~Vuvx$P&rv<Mc{-q+HvY=J+hb$YfGXV`|7r01qA!6`X6^HG>lymqt#bRV2?yri# z<2z=uUn#VHil0e5PF}%hTYf0AK)-d7Qb%Q2mD%|26cLT8by5i_y+V$ug!hfO%A7Kf z3g`T&9maG5{Bigw99DC7c&9#6+XR2PAW~@bUmH0;R_h6G*K=Bpn{JAXP*Hm_**mFk z&0#U%NVD)NbJfXKW2!51>*k^#peZ!-Tf=_+;#MU2V_MC|?ACBYwyqi79%GA#hx#8R zyTpZCjO|(Mzaa=pGteT7(iVLV-Z!^=?JW?|X8nEF+Z11^HTvxcp?086*aW4SU<=nr z+oFASSa@xs{Y5M$0ZFX|781=_r=qzW1vr9Ozi?h>z?c4a?O!o07HCFGx?kHg${1J> z`Lr=`Z3JO1L-2&(?Q^#(Mw_;-Z#6oyZ_=;f;1YKU;nX$}j}Gu@0=^Mg2GUG4OYF&g zHu%&J3`b}A7TRkfF65Mqp?sMwUtS<zj-kTLB2wn|Z8YY&S)WBoHATZHso%^muhBn0 z!Y^IFj$b1X56G{(^~?AL_dHF0eOe#GuTj#1`Y!ibB>b+vVb9vV_RMaI70zyfVWq$o ztw!Qn2^FBm`<je5VTYy}S*dNBJe!h6Vu60JY)fqNY*pqYWy*6^8G@Lp_$;%0i*8$( z92}o{<g<URepL~T`0Pe@N+VfzN1lMqllqkeBE>@r{vRe5+!3Pecv~eX2{y30re;T= zY$^)^=GPnZG$O3(%XPF*O@!}0*c?TDdX#hJVRN7%R&%_;It<dFe3H{+&Ee-3P(yUS zC2rwhYO%W;wfp4C@SbIU(EVE7-5MQ>s5|`ry(nD>gu4(q%>t^_YW~n_+<cAx32oDy z>{v@S+P#{?f>jp_R*jQG$SLAdq9RM-RRn}Oj3mfBNfE@rs%g&nC{57XEr_rnZ@!j< zT$}2$Q8e}SiH3Lnsn(6ojAhJ*)-?;<LC6lSXw@}VD-CO1<9S9!*APiny=}>k)rpGJ zIJv;F3O{+RojA?zT^>LP&pJgj(#QR33hXpjjESS;f=E!ta-odG8=K>yY<e(Sr}&-{ z?7@!JZ1#k=MJ_a~>{esag2*v`jA}JjoL&&gMY0v%roT&2zItsFDYdTAuV^i=&(=q2 zo9a~~*GVHKX8UnmE-*TYqx?D5>xEj-1Kr|zY-x7-#XC@4o;`aFt;ch&ab4pwdOV_b zLU9_;?%gY|=buuqnGzt2jHgH7+50rF6r5jW4(!Lgmp9+w4G1~=G*9X0*zm5%dEnUs zU8#PvjNa_<F8%G|Sw}#*eFKXs7h>d4b0le=py)5uStu|8Nh~o^77oiM&Nh9v{o$R{ zvU7fwG8~lC$9LhGImLQ}TUP#f&i?(oU#R^%WA7d$y~&i_Tz5zEEFl#+(t%SpGsBMN zYgP@AAK^lH8O{w9>PoEmN=A<|gd@%eYS(?y0~b$k;VYb8)!M!4yI3-@COP#R)13M% z&r7du$)0Le9SJPEFLpmNMuc=F1y4t8V;;46$!4IWjul9vlH4U4p+%{b)As(@)SPh| z$&@-EMs!3xN|cz%8GY$F1=-}b?Q9q#JD2kqvh#yZ7n-CGPtf;_J`h)#PABDE<jXwh zkewFuWc2nU=8RGaU%5lC%oG7EKAnr(+LKq~^C+2dnY%&B0oS}J9SYc~odrA!DC}Nr z<C!|Qcb^jyiQ+9Uo~tx(Ka<6X=Iu&tQ&wwu>#|F=XSSns(_)@mVm_sGQ;L-CH-@e0 zR(iKpSd~ByPoZ<W$2$2~O6TTJwe5JvVwZ{fjl$N?H*k7(v~LGLQu~H6=W#S}qJR71 zcar)y-8z;qfy;K)_o#;T!ei!b6CI!-#;Exh0ClV4Y0<oR>88Eq0xosfJ~o7Y^1Nh0 z0hXQAL7;WHw#hBfLPaUiLPeQ`R$n9ys?Wu0j)?P;0@gC?w~r=)6<O^7=SYL~^;m{r zNX6ryqtuhyiSCNXuvkl=&l_tggq3cwm6J^ZoVnk&fwRZD^{)VDJG~@G9+p|{P^6S; znBwnjl(f+iGDGTub~%c4?O?;x<{S;bzv_I%ak9KNvbbt_6@I@1<C0Uiu{xcDxT7bc zK9Rj+IDJ#*ni(W`Pp+7SNZ%tkt2)y3h*$ADDpF%AM5Dd_h@yhuq$6oy=`MCG9x!Rv zFLh28if*M<%}v*es#)=#_zo+7sb){S$|EeddTK97ssAwcGe?QW7zEE*Ul_z7c6Y@H zs8{PVn*;2<Rc37g#x+*Q{tpu(Tbydn20ac(d5=9sZ2`t}=ytkxtQfEPiKbEGWrE$a zeI(G~^jIFRETBG;5mXY0QqU-6Nuu~`IcW}<bNIYtoLT4NQ)9~^cQ+n(t`nZFpWapF z_v)7dQ<TK2_7`y~T;`EH8aK;E_F_P2r`M);u#KuB^h|a|{qF9lEjPM-+h*y;qJ{GN z4ERcZ@a7hbghZNswEX@+$BMGom3$Hqh|)m7z)@Vmfg@C$15A+0xE2bmtk3MT0W)0y zLqUNI<uXBYEiOjBIvX%%l~40~3bgzz&0k&MH?{=<jz4^VpzYz5Om=9ApxKBQV@D;~ zmAc<laM~J~XtH};7P-RcUmW?E(f_%~MN{My9vM5uBNzDUS>zAzpCMfAOg%>-Suz}+ z?63dI{O`4g**fI>i%5NDcu&WbSPi^6tay)hNrg+`H}?>O^=tXn{vgBktGiO8H%ot0 zFy*hq+#Nsz^vKox6%Y_DzYb;G8F-R$-jMwsgf*M(h=v`X2AV0Pxz+TZ@WgDS(Tsu1 z82P|rMn3R4eM))_IV%WTO?>I}nxR)vehHStDPg`jo6Lb=K1Y~M#{Hgz{*&l*PrTNb zT2HddvQTTrE7clf;GjP#f}JwadVh2_X3ZIEPsYT~h9%7O7V`lSjb7Ib-ohypU@5~q zOPJ{!&ya<BO=K4OzJ-{!rtP>WxJWk5jQ`a9`pkW@$R?OQSS8AVzZt}^?H`RhN<TC! zL^biA!gphKX*QD!o!oFag-E9?pp74L4``jj`I0?);LgZsW8kw9&Uv4S3^xW^wXP3X z17;m0qTj42-DkbO7dwqo&0i;L_BnC2HD5G$OF9ylWh#3cS+iPKH*f59E3<8Mf798o zFuq=XWg-+SG{*aR^cjlvjpL?OZsf^l<wi~-cXDIyv|hnrNy%h?GN{qtNRwHZr;JTC z8hJQbLg^u1G<OldNBXraRYdDt%%l=0)T}6pPAh@Tqc5q&VxYjBU0ODy)Of>t-HcLs zGR-ea{Q1Yt`%pG%U0c{#QpSqd4leuBc>faqKFMDje=;o&Jr@HxMD(Q9Kv<Sf@`G@< zi4W22ZW7Dw*WZavj)@3+jUX3R#!qmcntx^OW^)Rfa)d%`-(+noQ>t0Bhx%?)K`~dj zqaM?q+IPzKmp2DGCYL2Pg2tw&JVjT>Opyc`kx^5I%O!V8E*Cw|tS<MM9wS;^UQlJk zgW={tTU?D%f96blOOdOg*U)c^B(FVloMb?q@i#BIBfXo+h?FkjTzlDCYH?PM=Fefa zG=D8rq=NmRHpmsSQd`Oul&h`aTEVqpAvX<zR~f4z1^==w&9F$LS~nV>Ed8*;yhTDE z9q&GrJw*V1pV&r?O)WtM@FUVe$#gv?GeZthrR|W?f4&0!aL*ZQ+nH}tc(<@Mes0Zx z1i4?8r#-W#bZV8KG$zf~hw%@^jiTRrWCu5UIWJUk)}Fd%KuwE(&48L0@0tNMF_@l` z=QCdp@{TBkurXV`*mwGhUu9#1c*;+;y~<4r-;Bd0VBB?PkDyy|yrP7TthRCEUE-zp z2o<Qbe;@CDBO8NA0Yh%zC1pGK*_fm;Db$mQEijdi)4k1Frdf{zmn*`V6o%H8uuYZ- zDsv6cGE(0aHIZ?P@5Gocas6aM3tPj`3jkrMx6dd4s@+pQOKDha{R+<~3YoJ{G_e_w zU>S@nTE@Y0r~0z;l+o)!lqzDzBAN`!dt*hwWj6TDTT9sECu$p(g6IfbaXL3w_}nMW z8_hZL4Y{?nbuaS{Lvy}brD@MRs3xmN>w2EY_>=Fp>U)^07SRZoTECMC#CKTMt+wuK z6oGWE+n{Pta~N22TFs$v&1soKZ1cAwCfni`_xDn5on(<N$CKaOrp*C5Cp=H9y^EIt zy<p90RmB*mijj5|`X`Lj)sgv54@YP8a3@_Bz!mQ#HMe_Lm^u%bRV6?LRl*9dB*}S^ zBH`}#^Ns#H+s}(mFF~E-kLDv<6o8TJR(PFUG*_iI5Ak`Mhxm-}5O)X<aT`2Dq*?fl zM&UPR3cpb&vSiu~0*FwBu~otj1jE?+^ay;l^^Zdrc{LHaS0UY@D;}g4Q^MQYM@l!m z(NC19E`)J_*19HBy7xoQ`AmIb^WyaiNmO8+L(d43_<Jp0W+Kma_1xPFbCOuRIgM0L zInTuhg@F||4yx_noZ24eZJI>b^vO6}ShimoF{>5hll4)RTpw>{+xD^A+FA^P=bp7V z#J<0TH%Stg7?UP&Wp^U_msz@A$cX9N<j{}rUH13HAkxY!(7g8;vPMVfSs}tS@LYE2 zXstK4%o9GQJ-CVj=Im3(+cw5yts{#}7Mr=!8?O|JrOJdWSF>(`8CZ+tW*+OSUhVO} z1pSl~e_`Kno8J{3`cn3YQSPH^Z_qj~p^VxeY_|oqM`)db)F4)9N)9*rC5br;?CPcR zc+Q2=Y_05JuHKs{klb*h&4pU0Xcst8oTw-z@r>xkz#YHpP)Chfk>=$l{Y#AP2sxvy zAnX$1&-Yl5K*B_Kv_h(%T>$zOL@OoufRADlrvk?sZjKuDrP(6n0&u-b=+?hN_c0P# zfW52fs50@^SHj)Fm)$Fhw=5mYCQr21lZ15NZO&+rYVWZwpk)<Luv5ecw4H8OwW(TE z>x~d1W^;i6Y|!@WF{YPhC73IE!F16xflq=pWpLaG0;qDlinaBPvaDX>)O2$u(5|t8 zHd|KbEwVbR?Ug*mUdcDeO1@53a*3?uD-`G}@XM6hz|U65!3yG)`>~0s^gGbO5CXrE z6bItyxk10RYgjyk@D`*^u>@2WO6?u;(HS-P)4X4%bRxZxJRCfOdr0ozgq(zN2K{{I zHXJQqkCY|t`{UxP1K1TyD|_3vbM0*x4zaiGrTg$-=h)X=bSK^A__QMCmlU*~=mo}% zQZzx@gNJ#*eEQ6lr%2DjE+mM(2$%K9Cy5->b%LqlT>2MvaO**2tqyLrGF6o_Rg>+h zy563uYh<dfl&K2IR9zxdbz&N`l!uSoc5-~n>~N6=6BR|It6m=H_@ta$D}=f46gard z7S{3w$>pbCV)J_r!sV;AjM9Y~q?W!5OtP#gOc)-;iN+%>P_?|T<&YX)9%%a!<6K)P z^o3m|Mf@C;fS-Dx2nN#lbm<52X=<-GZ)5nnmEw!jq*mRj^GT6e8GzoFy^bCNFC1~% z;6Ik{23bOyf8^@rRemCfae8Tq>W9shK2jOsc-=PDYfK({Ar1|823vG4>z-rK<?WW% z`4evH!w1^O!@!%>IYr^P*7+@-q4WO?k2s0ucsY~i6!oqZI8|~6ip<<7d;;zW3Vn|C zO~%BzY=@RVi=<Z_A(q)jW737X-&o;wwU4MYwgkhw+y36?<=jeD<m14z0ztNZINW|9 zGBNxT?zSSgrY%nn&P!UphoaS^<N)mTQxb_)&GD*eyG2dnIf-9XWnh}o6J(I+j@OR{ z3b1vJf#R*1{PW=wGr!3OM^t|cKVz-)hBTbaD!MG7%!K0rLj-<+7x3M$z_-T+-zd!D z0N=v`8Nes5EDC%-<>pNAeOn4`S=l-meCv2>RtflKG5<ru@8y36elN>W3T=bH?`7b( z%ZA^42YyF@9~^)6Sb?8k&Rqh(Bb5&PaJfU2Sd|Gs6_-YTtGGKlT@IXZA9MX~K=76v zgK@jsCkHmzb_Lu)$CMP7D*P0G>h7MJL{<whq>+9ymdNHZQV9GWYZ63I&a<7z1QK%s zu@-b2G-0grknFk#Z=@qo={w63;!oCNPH?{uti%nW!P7^M>azXD)JyaU#=u-;H3JJp zViDFaGfrmd7sp*{Bdt&y>7ZSe-oW<vPXh{^(AX2g2iv}@V)(MFq?Y?s+MR4>r=%mL z|I&_%7qhv_FJtAbE<DBRcHF>8wnc&ufd+4SKNJwA4tQs;as@w#^}Y!Lk##i*bs7R= zZxxIM9=5DO)N6xe4f*omk~JSFN!EpHK2V~p(Z&a}5IcM@1F^#gGqo-uw~pAMLBwKL zvqH_CsnK3+j~3aNNPzl3r;jvFdRBRRYEEa78GJ<94(?ohR-n%MK9Yljzmr_;1!`sQ zY&!-rTEwdnUqsJSS$)|PwybVH?OIp!q3*%c@$Pu8%#OJ`UZ>`VbT4S%e<%Uxz_oi; zw}0p&pr(wkBTxF&eF%{#y#Ee@NqmHWZiGE(Jv%y%^dwJZF~fkZFNZ6>T8^mU*MOZa zjGeH>e3!RM|CZjGGN!@dX9wo$xLxA-!fvpU;arwVjxmko7)tswuuva4*YbV)ZFp>@ zV9VT-7avh<wXor$R#B!*)>B^<ejHrSIAz=I;UZza#)$%ryqCCS-WKaW6Q=>=%4-z| zmduDIryCVeL+knwNH$ut&p*?Was~{Yus{HjM2)_U<)x9&)?o$_9%wrr9?)-7o`S3H zy=qWrLw}Tm<*9$q?5x}FY+pwzgHm>+g46KiWMmGB<Hk{Zm(@G@ZMv$@A0n3XkH)J0 zrSho{YV~4R@x`}(Z}!mIC-)BoSb=0~X~W1**mb5CQHu7+4e%tNwvV_UNbnF1)Qh>$ zyRZ;W{1U>4-e}(9bMH3Gjl_kK(I-65%K<W5A7&&L>iP9ipJBWmH2#*gViX%u-`+(F zC)hsmUD*Djl}_#}$wm>3h&e|GB9&pX>zcj?E8<y-3RNmB7b$*tYujHP4WaaJ&HbJy zS2c;L@_>GqXmaLSzy1!<fJ9~@`qtv1g(hUV0TV~5jGEp>dA9V#Xg}rBFOSs@n=%aK zST6psU<Oh5mV1=oI-a|b-;Q|rENQBO7rtqvXOl36i=bJ;(QR27Ov3#d!M7a!ie~H0 zKpNL>-?nNzX897aZnsq~<Xi<5&~w$Ax_w(bcP_2sEG9NEgCt6V?*!Mz{kR{T-zmF8 z1;L|P??20Gac_^^kK^%S#5zUh9-g_klXj{RbC(Mv*JDh8RmA?tl+M?Yr}ocg#!hC5 zaf2h<aEQ3fWdB0ls_lGTdt{r@8zex%%4buh`1rTYR_pf(w}&(vW&LqcaqXbD=I!Y1 zy)(qKQ^F-B=W|=k_ml2JP$L|M`#~#VSneVHWRClYF>qm|!I7RzvrvT6xg>0`HYwSt z9DrKT|2s7qfAip^jA98v>3naJ-yF0_Y5BF@8HN?4C46hYib(`Oo{J1+)?up&3dY<d zg+%x(pOw3*Vzio}K`R4zuQ~iA<4M_1^~>_;l2C61K8bcI+3nUQ^W#27={^wcx<kG3 zM!&j%n`rD#`S)9&=U?!o-_K6cUmo#H*wU8`sa@t-*Y$uDcsjzr#_5Y!O*Brs+lAT} z$GX~hHl2jZi){-r;vif(Nfif)!`JA;<L)xSl4U5pWLPSAiK*G<RL$1b|6-0<5)u*e zzOqF5^U_2|Wei^>81^Lm%=OPpGl{3wfEqpKaH|~QwtTiFa(UEUXKeF?)u(MQn`#(F zxKt;i>b5T&wM*$&CviPZV@~9!aoy?IyQA!mnY%F!IScf^wm(Qbt-$$J)tTMaB_d{* zAxP+spPFBl5yWEBU+YCsWcBj`J69wx?v~}!`z}*#J}&^*{L{SVSJh0!7Vw)>kkNgb z1tFZ=b~i40?r0W@6TV_Y_eCTAx8l|QLsHA;FUYewKKIV&=5Pm~7vVw|%_`eMc}N72 zBKjAW{q{ENQfEL(N@ia<CPJ5zN%Kf9T-@Y+fv;REE{Z+iZ`~MP=4~HsYSzortGy7| z97#^r$9cuv>ewI1W_A!6E`d#2H>Rq}irkor$(%)c`Dxyedopna(D=xWJ~{Q)qjgD` z1v}Aif&Qt~i!2fVCwo>HDL1!~1<(8gNlPDZvR?jodmrvMUu(AF_78V_^h>a<4~yG) zTdopJEWe*{Ce2M&&A;_#uBHw`UPP=WYvDH_!$KF3KQ}0Es>j|>gtvG6Hbp;7RrL8L zt1P4F_|0<eQbkvdLr(tf&Ej+S*!u$@%U<jIOe-Wcn!#nHVb1#0p83+^Z;$t@Fv@HR zWhZdBE8zi3+7@g5M%7XCh_mq3!>>O)_#yPf0>!|!%u-oj8C*(z+GY<tRnkfL>~a-g z<tq)&IO8jLS}`pVmPHcS>0WzYvLdrH=A{Y`QZ=3BCu+TJy{yHmenQO$6wf@+Y`yYL z2d<(L{GYP@n^(&OAC=AP-kjy%3?Eqj=;A|H&i0f10PhuvV`aVcko2B(CPOxUXGY_< zCL5pQ;8Fx1lNZ@gnMbGnX4;o!D2I+>FjwJ%wl>J^v(lB~?W!xIw6!C76h5e}9mbV- zo3mm=!0^eT9=>D_QSzGgLp+QQ_3-DBWXa_Ds&!-WH^=)=e`~z|0j}j-F9j*)bH9<l zm-+omuD{}1!L^mYUhYRzh5_L+neFxr%gOZ)ACc!9mHFSuH1cr=@~!@k^6`9x3tF8i znLL`9bFCICL-1YjdW5mkgB8E*mWxk~pAF9_3~qz<>O(?tVQjaNuFY&HWtSdh&Mn}Q z+nCr7;J4vnz4$N_Y$q+TYM;pXV9FM2uAgwy>bqQXZV?it?ef9ot5P3~Nqs=R>r?Nf z7HQ??C;0fer}#&!*-8*(t#dLnm+D5IIk!+wt~w8;%0Rlxt=~!Z!OzIQ4cscZF62+Z z2mI1br0z7xgntv=@JaZ#C0Qurr@L4B8mzAOq%tr2-e({%EF@Cvnt9fbj>)1FdV&)9 zOVnzf-w4OFR@N#p%RJc2IMG$pIRoy`!-Ck!8GsS~^?~1@?|Isk`q|U;o2?xW+d<IO znoP1OdnIzTFYXr3ljh^o9OiSH*BW<1_03sFgSdmVe6Y~mD)J-*rp=}wYXo<rl5n-e z9>_B9^<YI&><_=HZIB2gBJ(u5gSI}L*fAId=L7Ix$mSA0qRr`nBEy4SsC(-u7Czbb zI{r-oB*ujz>HikRVxFfdn~Y8J2u~UYX$AHIN)hvlq~<=}as(s}p0?qed}N&VYhN<C z(TYYMy0j6)xA8bKuU<K<-q?Pm!u&(=0a2*nfq}fO0JB2+d3SfL694z5TU@cZ6|LIo zZY{s+2_A2WRpLm^W9QjZ_A?ygc?QGhJl-OYGt2D_?`iu!RR_Ym37066a^FLhNVYil zcZ}!o<u|74<P@m&n4@Dp!>l|Nbw?XdA*O;A)&C?PBAP6WEl-rOFLcZVo&~1wSs{(# z@E*3w9`jY<#SmY%Ze$JliDeRZ=?pnq@0ksI81sF_%$Mk6-njAz=zC4-s|)wH{k-eM z3hdj3b7qp1Jqcpfpz$^pWJpF<_70Lk(}5BoP9=f*EEoj`Q-;=17mpYuV^;h;!Z@-b z9wlfEGp5vmN~+Klon^I%T}RESSYZ|{%k6K0ERkYxL+gB;c{Tc%YMo!^X37ZuK|8OW zU4nFtn_i`g=m?lQ&25#jiXgd5W6ODN`i+wpM*eP`TpGz=b5cHpCq2nWpWs%MiF2h8 z`%brcn+G_~h}Il(Z&l3uadRn_W*zh3`ps?u@z#yWnlF-%PplYTzSOIA`K1Qc%%QWJ z5uued)5n!&W^}#2>Ziif%V;7#H4>yJyF>!PiQ+c4%u~v~hZB$KnJ}o(o&*}iwh4sM zT`8uo)to)-fSda9+VIi#iRSzxW{>o<$|v1f8u8i##@@VvqYxU(mm;4HzZ&^8G5&+$ zqiwILP&IFvI>yU~2F*CLfKWAC^ZT%%nwNz{&?BZ)*&-Uu0#)&tw6uI5Kj(?0@bGl7 zhDl`tnbD}kFUAyJcmSDii9Zr@Bo;+t1t!azl~(>hK--Wd3O1$mFWX^b5OR%zm}ld2 zybyny5G&hnF7vsM8dK+LU5Y9qX_@U2Vaw!o1cSL0Oblg8P+X1x<%^w)WcQ`=Ss;VR zmBXu~AO4Rc5LHbm2aDmXnAM>isH&)hgotYE-jQC)x|797e~iRjr0`S2sH!?VS&@<E zRF<zAmwc0$3yLKcYF$1MBUY6NPYY<VQ!@Y4d}f<B7^^!t<#+tl)^4C)!X`ZOq}ozD z<-%SdT5}q+zC+qIq58^`PU~Dk;Rfse_t?&$cpkb}1Z)aZq9zq_+pCXkuv&-F`+2JO ztb47qlrKS;8Ax+zR!k(;Dy@55pM(q99_y9=^I-yQJr!DaJ&D3y0{c@lTrGY?D+0yc za6<aXL1#}R@!5!PO~TCxBOJ*3hAHuZIl~v;>j0@hzb;;#A5?ZgGKGw&3IZ?FsiwH< zw7_Nkr65a+hR6qs@KooA=&7sk*8-0=0KZ3|V#SaaIt;hgDGS(1hj3x?i1k$^@6tCk zTA%W$Gg+U(hyL;=Q0;!%>6rm2uzRbqqT&kasLXz>zCu@;y1}BDa=N#nQa+j?D#Aje z`wsU`vmr$MzVbWuTrmBSEq$Z7e3b{E)w;$?QNU(w`OF|t#jETwRjDCGvwHu|kTd6b z6EaP4%w|z*ot+H3#d_ozv#dFje-?H==vLSX6&4;fG7nXL2~2(0md(Q1JS#j78FsBb zA}bXHUNJ!iEyEquF~%hTSF#rX-aB9T3<~u&$O2ADoe%!kcz+guN541Te-9|?a{t5s zvd&o|+wJE6|6Bjd&Q7y#>JIv~=I~yoBvT$D`D@;dcFD<`Rr9o*xLcwzk$IT4fq2(M zZWI!CP2x__IQrEU+(o<OKrd=HqEx^{Tv821=&&W~?ty4bWC79V)hRxgNb$DNC8cY) z$W|?mwRPE=ty=WPV$vFW2i9}-KC(B2RU_?rW?j&3uWv+LJ(7NyN{(Y}IXLC_{L<DM z!xZ`P|3s0WEl+W(RI-odSdT0U>66gzT3K4>PqDU;pnk*nN59M#%O{2MYz5Ct$K%zx zLE$-iucc1ogNwC?FXzS)>NGV#aKHRF#aDKs*cryFCd>adBsN0HqDlb5Lh9Va3$mNP z-f?s6ew!az|Fp<I5>E@T5$z$biCPX;!@E;Fnyb>CA46Va!%kI3oYmJmu64NGOn>H1 zB~PgwwA*3H<_+&^`%~g+HHUlb)-1nTKDe^6DleubQ_Xa5y$6=rE~x-(?zYP}Sigcg zajxmTh!Shch4A$r0wne=o=rSvp2C#{T4#*s&)vyCeY2CVPXJ~6b>!aXlm%v)nRT_& zWLzZBFOa$D+H04ZjtUiv$=>etM^m25rbR452T#z8n!nPUxTnC}EoPX9_W?$Qjf!3) zF)!ZR+eRg2Tew*!wK;8$k~Y7p+FX!s<iK-6@%tW2mMSzXx7HO-7uaMf`1cB`JEQr} z=M*SDB~KK@$`u-FT^>FI&#-Tm?X}Jut}D{IWUGzmUIJ)@%}C-FpaYsO@y_@lt9Lg) zY)rjW>w1BQC$<5ar{(Rgta$DMUPl*sdc`2jE_Q|1^>tORtV?5;e<<voBwsDa4fTG3 zl6FUp{wwq=&6tSi1_L$Ov*^rR4i9`&E^YT;rFF?xYky%JqbrIIIQpxzKJv&%YQfRJ z_v!4Q^1XlNNxC1!gI;FBCU_M+XZ?k^xO#sqgYLgdUwH2F_73ZmUnS)~$kE5!J;5FR zK8EWcxP#i3&YJ6;rb-Uey2PmNi~@n96!;j=V_oz3dis)VS@Pc|;h#F@YMqja)Qriy z%(eXdTi^u7wy?BX=X0vat!ET@oFYOal%QF(!uLxtGJWo9u-+DSAWyxOIdb+%mG?GJ zAC7#Eqd#xWm?ElYNnvkxUOVJRzsNZ~FNfqvpSEaSVx(=YT@8tyXR48zdmN%-1Hh&u z_K@Ng3QL8Wm|ZfAvxtoKybTaVQg$(0_EJQNS><dIF<Cd^ecJjzVdjK3T+tbnb5-W^ zvdwU^wH+^zfa<~6S8aM_k?D$kWks9m5HRx<>nraj61C=Ty8<yR>B*3q&+pH3DG8lI z?IiCs#pa!EXtXZ>K*7z?cq&2r$C96%l^bK=qzz>J5yeAaWX12jZ`a?t@s0l(?|<w^ z@C^L@guk!<aJ+x%50F1`U&*@_{QddI<NX(KeUW$1^7kkH_WbvF|9L!nl<R4J-^*3X zxw5jdN4rOR_}}PZqjN@&&h?JY_-{D(gC3}NBb*X>KHtb>;Zbs<C4c=dxcc+Y!-73| zUh+9QJ(W)ucH<}~A~B+qI6nba*1X@Vg@c3B1Lh6L1&|m05PZV^T-hC}Gz`tk)Nkt{ z_dYw597%W7ZZfpv%AIBv%zk8~vM?!iEOcOd1B(x&b<@d{)tKdKr*jZQWWBQy21Z70 zG*)8YlWQA%AHxKDR9!q<k((;DHXQYOGpH=_j(!#MT!KhrxClXdFX!P|GH>9~Xm%5M z_>?(GxMQ(f030m=xP<-MhIbh=_8)aVf|ZANw&$2L-9cpn5O5nO=SA8$1hYX<$QYOx zA-cNOC1y+JJU3=&D>#z4i#X$WS#MpB$@7_Ryn6jwY`uKZ=0+qETf=SK<Gz<m-|fza zKIcPEc%Oc!^HKY4>Vx)q6uw6am(rwOJH!_gl3!eDfAKNC_&8s5zv0Q7=?+EdM7-Lq zh&fkvbYQ&7KI~m>y&ouHH6kV>Cxl(EIfbx&yH))<z{{``NV2guJ}D98K#W{#%f01g z`sdsyjMKq(-wQ#SRl112Q8CYZ{IF$g%R>!`8<P^YbZFX9(cD;_C%Rlt%)Y*&q2)c{ zesXH2B6TPe!ZIwL2{%69w<zj6!Z8q8-4PFI0v6sTYNo-RPU3$xlYAY%N-bNYv9kTG z+AG!MFRKpKo4Zw_1xG)RK^F(kTm0Ibt*DoF=<hhObuUPn&MBjM4p&}|=S4^h&S89L zyr0=`Y<Al?Qi->RU+#uBa`cqF-dB*az*G&1C=%i0e*I%ZgQrlM*^}rk9|5y5A@&K6 zm>VZ;?D2XFzeYG3-epSFMYI`Hk$HmX$4(i29x)6C7NvwSC6=poc^10Hd7;T=ufu)v zjui9dpD5|L4*Q=aBvHY^Zl-liY27&@YU{3+`mw364c}YR_6L^uOk|(+)aN&+i|d{3 zLx6|U6~ieQ2?a2RaNp}g#?kB%fkUkBq|yIHZSCv1>h$pP7Ik`9&joM)*R>51uPmid zHAl%pGtgb$*6raCj}7~3--N7+@V2(U^)^Zoe7M7Z)W6^sfe;dvV7vcUDTI_qedonI zVz-hM{MOptsU}j$nPHQ)&a0iiV!25d5inF!#mwkLV(c9BOcS8=9-_ahUkqu`3vnBk z7a(Iqq|O~<rP~qJZIEWQ?|i%4PLCV@=^p=-VG@e$?A|^m<KM1&D1ZXyQP06>B-zsm z(jl3TlidkV_<;U#w=4q!I|th}Cdi)xQ{O18o~A$&@M5|`>WqYj2G1yY319#Z-z)Gi z@5&*eTBg`|QxlN1(E}N!Ofz#c@1Gv&c6vPINPjFtQ4J3{Co?$-3+QL4Fi7<#eTd-6 z@OsC^3VX!y!NDNUYTsBj4R6z5%m&yD^5kQjSXTRTvU^X<3C*s_oXkj6Emu)X5%xT% zJxO}uOf0q8llnF#CQ1ioKN6WXwdH0D3<M<qDj2%y(U4$xQo1?_3<C8*SXepK0Ip08 zz>ydHll_kz>~}zF!&BR^Q+5mB=?u#}Y0DqZf^P4(q@ZBsHexqT>^51xf-|7uoPP!l zUtkzRg5Y~HzCq}h#5lD&r@|m)G#d+aoA=Z3!G3e*K{11=W<_HQ9y!n-Z98zPSCis< ztY3ab`3DuUJSJM&zwv|VEIUywHkBLtIA1PFG~4vAUpN+<{?U<I^3lB2`+}TX_gKrF zN{ANvn=gNuDDIKD5jo9|cwc-#b?>`URM3lAB$?$wPi$F2@QilD@9HgX@pVGxe%1no zhW+0R8ukR;9uhihWjr=?gdkI`S}&82Myrnsy|3@Rh#m|kh}X+E=UVZFs=_3RNw0K( z9;f@zjD$@VcgTqq7mmu(C-E0K0E1<0&yH4>(uYvgi!C5y4E1i|xjlY9mSrlAVu?F+ zx3TTCtd@U?T0G8BhJ?Zzf%4#GV$;S!T|TiDq0}h4O{4!jF&=-eMt#y~CNZ8Uh{-T* z_<S!la+&#w2Th1%_%*%hpPlmmp`$|%_7MTR)VW<v^*lB0vJs>P3pdd9>ZwE`-PC!5 z$bauwc<CTmZyWc?dDKS_F^4nkdD6O$!V9D*yB7N|eh%Jwd(j6--r^TFWUQ{njUOf) z^GBsK!GA8H{O9~@5{?^XLb*|1^pU;5dP;rOXbUo@+k(t#g7F*$a_r?sPYdDj6CK4% z#80h2E#XpIX)Y|x66Qpf@Ed%V=3ZE}z_YX#k{5uL2_MzgSH90cgz?+au^`ireU3R@ z4lMPi%RUp`Z2N>v5}%MV@d?2@WTtqBTqfQjizAm9_>Wwm*2s{sRr1F3v0s8rnSt%1 zZIvy?Q;A%$5B92*d<ruH9oLneSUp*D=|Ry$1WM(MGRiplaor#Hl(s-7aJu%CHgi*n z`Zqiy(6*0nLt#|YT2~f&d5m>MP0gAY&NRgbIqo5%21qg+@@SCO)_BpMwyUKA7IV-X z?)b-b9VS~mHN%?reQ(g4yLcl{*S2n)`NDXA>=)zx7xB0D`SJec&yDy0=$Y~UPx1S+ zzvLZ%uk-tJo5uT3@^>xe-`YIhf6cSw{qOMiHsv4SnJYg(KPx{wU;Up8H`(fv@0K6- zfA)jqul#%ux5M)Db8_<YbLB(+%gOQb@9+`)lPACP-QIj&%YQk(oGflfj?(h;ok*GX ziAc^DhYMA_8%xNt2=Z?~f(2X1YzmkUU`lx^Hq95+k7Ilvt$9n%n1?7PUO%h3y39%L z56n4|CiX_NGHCA2!>xqe8;zm7`KQ7)hxK9QjiE^4iAp?&h~H5ej5db!kwk12I%?d4 zXCab$bT$?3OGuh?Li^!Xcsgy`yJfHN%*^G^*wQ^kBty$<(F@+OO|jMuT(Ex6J2@QP zu<BahHK@6JE}PYVS<NX@Nae(HZ<Wrq_rJgY{Z}qKd1<O#4&}vge%2BEi_99UB3ff% zoe|y|tMqB>uaU!K&0Cn?&0sZ<+=WUoPQJ->rJ`RrPE>cxBKVvvf;;U6bGyA@a8;cp zuBtP{Rdpt=ssa@Ao>1Pa#3e)BO(vM(^ZUazN<V7)flp;95>oKF-HLuZNKl<<Wk^47 z5Qy+QnSaWhA(s6T&_gWyXZWxr&q^vo$oF_lf%)-Z-XG1Cp}dpj9}iOT%1~sSR7|bW zm1jcTu~FDKeCv4sIR38YuadtZby-<FJ(rT|T+jdi*J!EOj0(Sl80TP9DO0`FOO7Bh zv^b%A2^XkrfE;t0c+Fc(H<3RPqM~@JIi$`J_vMnd>i3Y>mcceQ>IAJ^RXShbEfI)1 zMsd!M%}!v?dF+San4F@(!I$tI!y#{)xRCvEBV=!SpyNtV-B~~P;~{Zl()JoJo$4Ds zQIDa>-Sj})Av}mUJnta$jbQD3JYgh)T*u|+A07VJw^j^aJW=1zYAej$SjzvMvIurM ziJa*YL0HFBv97q?N|xUo9>C8Da_d`{6m&}7@y3=W>){J9Gpu1`zPj*f^hY#`1;s22 z>m=K1F<ZYe^B}%B8=mUiE(ohv3X2)&{RUuI;+l&P_VjqMBUDW1g94lOLn#-{l(Zl^ zA1V`BVzeJ|5e(#=Y=DZg`{c17BI`ZLaPq}0#A8N%YsF^hJvs?=ClUp3TA<@{tSy@u z*@UE3Iq8FDPVkt%hof97WDl7ZX#1V*BlsI;TFp?+sYR)|m2D!Szm>UbK)Bc|Y!l9u zJhBjkBBU5Qs~={x5D|>lc{BWrak@g=FiH@jXN$_8b&0n20)8$@XPlH^N`RPcTY2mv zT9Ga6C6V|)Pk&$}<vbcHJ5k9cP<}5;_kZKLxN}wD_~tVgO!62XRJ483^i49lyVndT z@_4)UOtgQykjI$Cg?(2n3_{WMkGh1YQBz-)^Dy8%?7L2JThhq-$5kl=D-m|wNs4$% zKkTpj>@4a$K(!bQ)1&oDoi$g^#bRaFHAC9KXlxK1nQ6GQKn0!0&E?%+QiQV#p^XV3 zofe4=Ef@0qIaB<E*({Q;R&6vAA^KcEE&eb}O?$mCMl>9djtG1}k{*JB{tycd_K|&M zJK0CL4#(J{Ht%Hk81fylZL{kL@U>W$1k`Du&|DVGd)I6V<?Sn9CIqx86bXt0Y;;*L z+7!|QBJ8_FTyJHHob`*hk)Odm&1uTUs<#Em<gOg=thf48QpB+2)ZmxsA68V#szS@( zNTI*Ov83d^Me*_e+5Ao6Z#jSGq|4``v;WKK@?d!^{?-3X`~z|QA0)@LX-VhXvTRCY z4N7<z-m5+MqC5b^@Spc%Kn-#Pa33+|l#&8R*xXOq-qB%E9-ZMGJxw<Dsj{(`+Z+1? zdt=AyZdT-S+1M|YjooHxB&dd84@AYIIiT1XeuGT>Yr99^poH<JuOJyDDssL#v!Fn> zWqo9Hgt3*f1qI^vob-3zt59RFwpIc-pShe;c0ofgnmunE&M;F++G{9#Ga~M{m`AM` zvJ5#d+##C-O9igkH>50ATYDKrQlh$4L<xjUJSX}H^iCK?NR<CXZK)?RoZ!i@bP~=< zq7&(VBl^dKJ+kzdo`Oz72Ur8V_L|M?Xry26z{$S@e?=cgz{1h&fr%ly(`AtwiJ(<M z1g%JT&45zSl&u+1{+PwafXu;w%)x-nK~?E_<}T?1b08!yKq!N3`K=bTKNW^3BYyir zwuf+PHb$E>!!jG^>BCbjX)*-S%TNZQ=4fkgVkT0Ma2D!6n2DN0XU#;K-xm8nH6H^) z$IKgz4x*8Do))<7wq`IxN*($?@>?@@Ccsy*4-Rh?vHomFtZ#3_RSq7U2Ez$>xK6-) zqOR1dbt)6gIl?jC=4eP&jJw&&MOEuO%EW-^_8fxj<VNI)LU^t7Ww{lA+m2lzzSg-# zeJ}%y6m>IG>--TnL<5j*?7Q6J#gD37v_@xzJwu=Elih8ne8JKnTok!TZ}nhg4P>#3 zz`>mWXK0ZK3sCQoZ4YZp<qjzEyrd_@^V)^E21Ut)W^MX0Fq%<HQWWCuNmwi=HbQif z-{z8S|JQ!FWWpyGNV9~_%5v01uLEJh41eT{(1%(-J@@Lv@k**?F#1tjb2ra+(AVT8 zPBz=sPhL`HzkZ3ix9?)vH&W-t`G3gVt|XUNrQaMNlTf@;nZwHz>tBf~)K@_-tjqqC zNL0LkKysPXr%cNohBQeWxhnqk^Rjr$McpTs28yz18^i@4>Vl`zE)zpuv30=!@uZle z*oKy3=VCvP*K7_01Z7_nuaOumuFaq2pLmT}a!HCXCmJI#sw_mgCcy<b`Bh03(VCYf zG$US8L|v{UhG5MWybhh9jn?m0s|bBs=P#&8j(Bw{L?hN$b%9uYR&<Vvyw>?G-iCXy z?%per`g-WK9i=ZH``LVaKdbY_k~Y5-^BSV`p}uU!ytZbuxhG!p=oNe$uMyjIqN{ld z;x$jHTYt@VJ}DsgBp!m&-Ji#59&Mm|Pgq|U{J<2DSi##WSWJ;i9qOvB|BVQ9ZFS+# z1rL(O+G*>)4B$KPckFeU0%Lc=d=>NziEY*{*u9MsO05SbU7L;BKB)1Iy)bK?h50HB zqO$O`7iY;v#4sEzH%PK+=Oj1XM}+|b_VXxxqSHDj$nSdyby>iwCRsxyU&<LBN}sGq z>@jm;AclE3ED%KqkkwIS!f8ppYO#+!(;s~prTZ#bf@1ne#34~m#Q~-%@~dPBtU#(0 z75YdqPz}G-cDVNmDJHy*6lCkbdEJiRH_4^N*7CAaOsIFYy<>C~Wp%7PCk=4I?}YGC z5-I@oPSFAD(0|*TlL*h`fFfW40hRrT*!C7AW*0dt-HwJwXM)jbo(g&&l*o9}KgE-> zNVTpnGrzKCWFs>dkrtrib}%agK1pKuKHXQuQ1}Q%4FAlHLkwS&Tbmf}QLiC}vaP`h z*!()&fY$kQo|rAtZ0Gm66~O+xJi0d!tMW<rIJit>a>TX3o}BB>oSdMs)z>$jL6@Yc zO5$K9Rguv$XD2$QtNALi^%Y4OK!rX+P1Y-Ihx@Js5+x>{|ICsE7#LS6le3!u19(1W zcmHV^3vL|t>e%JjOX2r`D#dyZS^(xg8Po3>ixU<_NRf@h68R*B!?w8vVj+JwGPx?B z(U$8?=(()WTyLMWm+J)>)8zQ@hqga5h$+H&^&CQv8ku0;K=hi^mk~ec^kR~=o&H?p z<~66)&VS>Y(`x6x);K*Ya+Ps<Mr6EkdS>Ke^IkunfNJ^}SrHwYd7sbdphcqf)p~JV zNJZt0j5R9?j1`m|iGe(kR1!L|Tp76>tT9hx1A_dfg7#rqVtEl9Lp5|y-j;>i%u!aq zA{4d*x~-3IlxRTnNYK?{=2?&Z$l0-96+|mzrB1OKk84x$4{ZtW;HZb_*2;zR^Q8F= zwW_yK<zIg0RM{z2hH<W(nUohSC)x_&yPiNh>O7d8lmU^j0pV;q_(Wc;7S~IyYaCTn z;?u+Y?^n~U|AH1?<}{|*46#w;cVLtATiK=UvOM_Ls`s+5@cy_6z{|{bf)Yk%AXoJ% zC&O!0&N#8T);bRgzN--&Qa~85@H16(+e=jFxDYDV!6}+&4gZDH)YqkkJS+N)^IOOY zXR85BIcNdH9+({7U-`EE`!2F)NFt3q>$8}9*>y*n`QX6s>;ludUyqPjKAy^bka;{~ z%QZ8yIW4YE+x4VkPE2l+s)>KdfmI2M2CWXqKIw>YcoG{vNyj9bnS`?{FmDl;jsjet z;>eub_t=h7+Lah7uqA|&qJdwshYa@S`T<W;Y=2rPGLJ2Qg}9!#2n+y(_;Z~EKyt5q zy58i6Ry6)>pRVE~!e+`w6uURbMb66LPABE%i<zO)SR>uT%d6^C%1sO3truBJhs1Xa z!h<iD_;hX2#HWj}V19A#k^)C4ur<~=O1*c#DzABRz<!$(yJw{PeJNqYeeMC}5_b1) zQ6}<?a7qH7PwnMz7k~S-{ARz=Qz1PhG9LlQl#wF9!cA;6b6+I*9`lq(J<40`J?beW zw-y#3l5n^HQA3f82#YUH+(ix6PliD~Z8=M+AaTZ2$0n~!p5OUWl5+(T_xY_qp6qkJ zSSKnO+3SS86}peYrKqvNy8U(~z``dH9f}J&l)LzmC&kNBf`2$(Hp3eg$_TH3)FCNj zQ_k^O`tU~U;C|bfkVqBdumoC-42}3<_1Kz?kk}M<4hBYq(NRPa5-+fu+)k4rY{?M! z>DR-44$<<%4R*@}dL2}6j?|0wdNus@#B~BU0a6-t4FIgfTH{H=tLrbU6e(@Ty^uAW zDG=k-Eqs$0Dh+)Ot$T^n&k(^fGWe;|_iOx5fXwDrJ5`@~)b{j%?+=PsVn+!OFK8^= z&$JePOdzzKyC63%usOtE5qk^0{^9pz%r*%U-^gSIoZSQ~8pMcJ#myEA>Y=MxoKeLm zWZnrSxkAjNIH78tVl4-|VODtEaghik&?Dgj0zFpgOpz9jna984rAizDwJtk9;1hQ0 zM8{aRehE*G2O@EB%zaVcgW*@(-d38tX7Jy)(afzE@>JoRcfc6jxA{siyP!b^|4Ay7 zp@#S|k$V}0m}a}Ir~Xq79Yfc9l*vC>-1cL8vh0p6P?ARSTPR`UI=;zhM)^0To0%+c zhiv8+nyCQ9sl$p){1DA3k>0tHV!}R$nUNwX>`?nD^s_#lAF!HTb-)_^w=80RY3sgB zzm~AT?5NX<AOdQyPzj_AR}YPVJ$nx;)*f(HlQ-_Z-{iTZ)g_aVB5L_L$<X$L!*Wj< zx~}`F>rBO>LVvsN3!J*mSCBndNl0$OblV}hqa&izz40oa9CFK-`?U>X-;UI!&KtX> zq&8li)z8@EOdCGZ_BVEQ3@rWvW|f`D^v`JV;`Nx?<A;o&Jo2vU2_Ayp`a^sz^`Si| z32$%P2GN9DU{eb6C!}nHc!+Y3%T|h?@VaF`nyMn-b^TaX5E82QHEua-F7<bGs5%O5 zev@U;E%E1I-%Y8i#N27`YT_)n`#-=)VFns#2jB-JhJI0XsDktRywD_&X0mw;486-b z{vE+xF)CRny*BGYwUjTE9vj^y)LR%{>Tmlp&w`lVy1Qfb2_6P}zb73`{SuDB=m@zY z1*H1f8LjeJGwFd;Dl}UvGjs5aWIYv0l^+d8FFwBls6wJSd!12Pr~cg;QHNAG)QC!) z5q&H<q7}`m*Q{SQ%1}v#bb}rggzNn6!+T9gD;sbCT#+e<t8rB#b{J4GkZ->4^Ft%y zd%r~=4M9R#Dpm2_l%#x_P*st@An_EG8$V62S(@S_9HAA9ra)wV`i_>~tAwG$5YpTV z<Nq70X@|W;lI!u-^m?3UW})jS+uuT~dC>-s6PWfrGmEY$`HzUIlK2E#>@zzGB{(W# z9Ef<3QbD2F(5)ib>$sL+ap|(2Sn9|Q#9diBP5J^Zp=fPkxW9djjc>IDanI&2vx4fv z9ffU2#FPT|1%ga90cvqYJzwS{L`VUbwjn@GD$Ftr&T4r}v}MzCzWby=?W3oEIKmCH z!b8v{fK0ztJb8qbd|5~y200>^iW~5ipfmRqX@61)EpVNDCs%9V7oFj3k#=XxQMr`B zxm+fao<XIo@UwYqolo#yt%|$4OPGQJH<gQqr4ZqlI-1lK-Zk4_;+~D7EOL?bsS?Rc zp@fI8Jfdz&$*UW!JdSllrBYV%u}T9`DX@Xp2lR@|3)iEn8Ia8!?<jk+x;`O4cUwPu zD+^l0Qh5yTevUv?F%LYL5x4Pxp9>U0=h=<UGhuy|JW7;b2UTXA<JN8BlPgR9giPWt z>x1u7{VZQJOIG2V@(i$&9A~K)iI8lfM8)0X?m-u8Z8=U+@)e>UMVv@c@d4dKD&^x% z=2&Y#mMZM2fZ(!0b{pm_v}clj!*<?xWM@!45r!3*H%P?E3Zzy*DiB3gxWemR>1Ct| zl%_a#V>lmJ7xP?)m2}N1J-7I!XkcAm)-;lYwf%)ikbJ=jrye!!>_EqjI0NI4=sDk9 za6Y;4woVaY$?^gW5uW^$GDLWSi`3|OG+K>qi=47%2ikVo$Dm)Js3fOMa_e%|AY)y( zRS;wrUs}c6qFHtjOi{MV*%3PkiJiYd)P2<ytM$3#;?b;Zgi4(N?L~Hg_DFEez%bw@ z$tmYiXWvC@2E?IX9}{;imER)=dE6uqnm@Gr_cdngTf5clVN0;fs{FQnU&?(KZgIkw zgv|K?e*T5iU?#GtlaN{CkBinYL*>xA@!#GY@Bb!$_@$ivpYw3=#VI!A2WMCD|M3$S z_}-Y#2PXL%AAdp+{8ZPL=NS4bt$wGSvd%ddQXboWiN8PL?D+eaP?L54Vr<Abw)R{8 zB_AT7S}`03Zdh@A5eZ|YMy^g>$@ND55s|vIdnI@AnpK|C<4t}PDC#`(T#$Ko_KYbK z+I|U~=DKHB>|n_~D%93`=vk5(33m!|RX5}6zsqW=U<f&|bW<o$(VmV`H?>C{O;S?P zC9dbb`H6Xc>%N!zlv^5Ne0_N8t+}V{gcat1O&rifWDbLBBw3W-+|y+JUpb?{$mXzO z5@vIM{f>=ICEOPyGGM>E)Or)*fXMVjB%nkIP)44w91dxk#2c8YvmC3Q__gg=wa2>Q z8{*yJ1X9g_mZDGa+r~ha?tN&MZ=EljJRbwu`Uuj_`&y&EDwXFk>ibd>$TDAc`5f&T zk5f8_T!>QAlPZ>K!{ltTmF*Dw=)VLfd-O{f!07J3x!>P!yy-P|1{TIVBeZ8+1oA0d zsIFT>g_FHQ7u)0%<4P^(ol%QvzvYr@oEvmNC%P*lIh$88b=%BtYWI+1Cn3L9zflMV z`CY3Ayx=B#O!d}nvC2QrC7vHd>xJ%y#gkN^N|gb@eXE+GZH<eUrXRlDVn0l`7_0iD z_QDRSVVw5D)`rH#Po_(6aZ1l^T)aK~^aq3LQ2Pb4Iu)<5#jN+6HxU*1M0XIK*3s^_ z-S59*{KaeR4!9*a@ls^c1ku5Atlg`{gt^<893hi4wJ%@&@*?Eh<msTi=LHZr-*vBt zcncR12I0`n-Mzf?&DuMx!r%Qyj(a-=XYGyg<B;dX>QR5W*`FPm2Kn}J_pB_o;_U=M z-uzh@?)Q7UPiC82yRA#yTf+xdm724T$2{M_?y9be4#f&9F&UF?t;YaUjAUewn?%m} zan1&`I8>L)F7aQ@s)!s@CaFy{Ejco}Uo-|jwmd*m4$D$|$RRGu_gHcyZG44azvGXw z{{vEIr=C^tEoh=6vn+N_Z;N@W-~2$#X8xMX9!P|@6Wf9jt-H_t{!7N6yvDA8`v8!; zwa}dJ*IuY8U>NbLLWY!xR(WDog(!J=9Eeth$fhtWaAi%vXb)tg?V&?xVUDXyc2Is) zdDV|9pM8-o^DrQF#j8Z=#;>4U+S-gn7P8=HW)@`i;n<SR{id1IvPDU2c&uI+5_b7T z=58rAPJ5<$TvqI!Z2H5b=S8!l?Z<l!s*w*b&^A@i$adat^2~_Rwd3q~uD(0XYSUxC zFtH9wJ)cScv)Y>avdKC^^{jHAyKj`#C73b|SojR9)$YPoP6<z0s)T2m;MvcBEd8kk zoPa{w18!z_agWiT)mDGbuZT5-OvlQTKmpl0aZptIXV+dEt@2AOKBvMf&sosuzhBR* z<wz-A_$R-(Ono8jgM4AMA9v{$$(C;Xh?YwAaYlQ;D~h4Q>h^-EdM?S_WWNv~#O@6= zH?kmN^G{h9h_oDr3~r$v!k!b)5e$$WZY!aCihD>DcCK*?E7xCw>b<g{7BIsRZKeE2 zz_WjmewDGZz!fQ6d^k;UCMg+hIu8K(-xf(nr8ccoj+f``fi#~(jf)~b`iL^*Mg0R6 zCg3b*9jTqmsDXiXDNK=sYw$+r7pSN*4>;rADdXN9nb>T;#D@1c8=DePm7q7CkF^xK z=9<Gc=VaFSYauTM@rs}vB^1zrz-0T&JCa{6A{t8#C!8R{LANwAs{q%&+<1jrxV3yO z<E@O&DoEDwF}sF~lQoo}{ZKV5(mK2405IQYv=_Ma5sUqY=J<Pm#-rj_hzHxzn$QDg zT>Ej2*S)Qw#rkkkih0mFCAF$p1K#3E+~aFrJdrP*bUM!<@)U-`uNVp~b`K?0;9IRr zmR7U%=jR7A7W&l!ZlWgnS>t6`y!KrpOHw`9<XI*Uh#ySs=by=~LXD53;Ea3>%VOi? zisd&EcklCWEBbi{7vlp!#I)Z57>t#nyY;KgTY{X6FMIB8o>(^mh7{NG&@StW%-@R^ zD(b69bnC{CQQKJls`ztZhW!u!`$vUn|I9kFQV%59Q|f){aaMZ!mGc&dt)oJ2dSC$q z<{xp?9UgvH8G=C6UWtw-(2a3&svaorL4B_klX%j<sCYMdZAm(4oLs1nEAAod{J#FP z-{NC-))yIV%PsAzc%<xsH1CTolhhp7n{LT%w9`%tdSa_=FliRZy_X4VC~QgGz<JKP ztMVAwb_)K}X!pB_I(ng*<KD`dhB%eys^BFmXexx2Y>*nRqy|3Enwpxzj6Tvovs<|1 zdX=GbNTveLIs9t-4fc7;;g~?X34{2FX4>?8O?zewQi6(SZ}EE~!>W+g?lE8E+X)$L z$k-u1li13m%$h)z`I?>Yx{oy;kkcY&53jagm+|>O*=h~YDc)6lQnC}nXuxFH9IN1i zc{>>;#r$+Wu^Ew-5^ssMQoOx*malkLpm>*Uc-*x=I)@-g!RT@iX2sc@iE#v{U?_?x zfgQdsh{`IuC={==_whQlkN4F1UGX|4Siyo)Y~6~n5Nr2dt(WrZ>b}e5o;Xi2Pfam{ z>+`>GHJ8mn{wc>uv$|(p9l=CI4C6BOB906EQfirajjFWorX^Xin!>Uj4T*cbiF?KD zuSt$I)~9cJk6FgwfSwg8fx>5~gdvuXrO#U3*yvbuQDLmn<6abWFG3I&avyLn@)+f% z`gz7pQ=;<=^%2E2f#PlM%0S;R$%jyA?s=h<endUjnLvWx?9fLM#<x!KCN$JHWr-^` z-#-^1CGPd8&NMViXUcY1FPEpgQ=q!@iVSJKzkICS7pk8VDxOmW*ms$?huq3KAEi6o z<-}u(FfHH`o#X2}-|SZF4_-4@e)A7g5!KA|*$YOLw|Fr%ZSi4bG%B2@)#gP<8LJ9i z=4+8#=$CmOnJ%8Jh~z%Iist*qcU#%UAu@%-PCW~U@9HCxH>^%b*!^dP_t&ath0L6A z_wroQ6z(|&TbIKwR9ED#3%ct9?mC~l&g-u8xa$htHGxG7-CMycTe*4rwjaMs%nAN> z@b`26sDE%A&vZo3jJu5Bo;JO(<J*~)-X;~3-`8y3<7qL%uGq=|md+vMP=%43iA(+u zDG1&@HzxD~t7r-&#4RKM^LS*$B87c`v`Evn7a$_2y|Ds#XqtZ=^USM6Zmd$tTl;WX z%GO7>Mgy}4KOY+nY#97RLe&)z8yT5ZXCH$$&o_soR%9=f6aSOvvk9XAi%s*e#hLqz zb~a*_@5Lls9G{B3twbCw#r#c7Ys`bPn@!<1Xu927t71O9SF%8jisx_fw??xdEPurg zIiw`iGMudeBBD;SyWw(YM|1n`A`i?Z6)tnMd!KBTB!=@$cu0M}4$8&OD74C{G3xnR zrKn8tj-oQDIMzsoGAJrF?FuiTu@X#BPP((Dl)R)F;wK`fe!%OBRR2>`vdnAG$s=Lr zgeI94LQ!Ys%H%2-l5Q<>9m`hMk-e(Srh>#WWYM}$sQCjosD-7L)LpW|r<G*YKw*Ne z*bL%8NdOBoOX;RUOm>0UUrwAmZG)KMD9C!<JCmH+b!jerwova4K*Rx2b%;E5Ta5ly z%gdzn@P~K+emEbrMm>BG^=yz9s=_qT_FtlvrU$W(K%ef2R?er*q-aF~^~#V$xUv++ z2QiB+UMYSugF||pFKiLZ@oQ|3$QH3^vDLh>Qvs}OwqE_YtpQGjg^<S0Tz8f^qcEBa z-*Wj97wmPRxfd8-hXu;zV`yYrp<v&9Rza1S8=dcC$S~P6LX@9u))X$uqVQ5LQF<F2 z=ZYk?sR&t$@A@RT^%3c#sC+oB$lVlTMdg|^gjKpgnjED*+-p4(koK5dzbf#6k4=9n zRyxh+-m_n!JI#eS$*^FTm#2}VGT_F4tP)ytwsB*MUI>e!dw(HZEc=<*C&Ze5Ya~9Y zt$mtDL}&C2D3W@-pUaq%7q9cjh<DlFs3b?Xd`U6b$eKzL%e~g$?o@FOvAyIp(mb>} z<^TNL(M2k*FMKkdvwk7x=50t!8my0#HUNg5glooBSL6Wr{4$Qco7Xez&#vPit)?4! z{&T{x_l^7awng*&_UC*+*(c+*zOlIz#Q8!rGuIjeC0g}sO_n=Zs|fXtH65yuUO;K7 zGsW7d`p_Drz(vf8jf{F8f7$$fpT8k}0nXtEaPGi^=lH<wCZbT9!Ghl~4kKT9jr>j! za^wrsfU7uy2K9>;Z=~za5#ZBUQrU9(q(Ec~FZ<pw9`KRqb@37T@v<T`xr-;h!H+m8 zh>gS)J$La^`MDW?L**qJeq~iaa9wl?e*wnf9xW!PFP@2@lnBY3JMrY&O%nIx{2k$# z@``8@5aYe*7q=k^go?A`VJuiV+;QNIc*9|>HY^@kWY~EYl?e_Sh(7wu_BUIPm#FCu z_iJ@=$+ScnZ@B%iIp2b&Egue(RGb^$+i?L#>thk;&uz3eM`ca<R1cMM7gxSl68e!u znIucuWo@T7_WQ{7O1^o%nYYB%%<|Oxt=saYIb{FG-91_OmL>HUHD1h1u30ZNCzDjj zEC~F?{`5}qH$v6q7e0XKxZD<U=R%>)t>S1}%zfO3<Z1GeDD)*I=_GkrzOYd1e1jW@ zyj{m_lDsL&u|wXTWI9shZRU4V<SlZ!P1?p?l}Xy#(^(%}PuXN`m)b2s{&8m;zx?jU zwhUJ`%pnW>B2}Pt=mL-11<*}Q%2cfonlS}9qXV2PSbT_qIN15?s}*+kep*h?vqQ$f zr?oDzLKC}eN`~G{mHdWNvYe7w6w2FM({J0Iw-@quuJy&6#5Bhv91X~zkGG~m_2D79 zPI2g6eCG_QR1AZxTIaL3c#aK;-?jXW2J2`&pzUXNY;GC-r(*J`kY{2ii+MNh2UXqF zALte1`B>$XgtX}oE-z-|fAO>;iBECaEXPRmK;O8{!pg^PJ=v#i7Va%}>$}9E6<w>@ zf!wV)auZQy$OO{?TLWRb6^qJ&yRoS3KoW3?lT}9_o48NXC^cA@-lYtW90V;R$z*wl zw?V7kGgsIh>pzy@EGS-(VkF~bVAwU7d+4iZW)(tOdn7Vt|J8W9Ft};*SVnc_0<^Uq zp}U{`BtIf<G`iTj6qW67u-@TZ&hXX3dRThR&Man14bA*p+91pyirIR_T0}ynNGO^> zg9_`f#C8)&45EQV<l}Unl7VogZ}})$y%G_r<3f4F5+2>a0)C%x^UeY-rgYgB?4Ksn zrCT}Jh%H%317}yPB3hbStYYP4UkG&FEIS$NC89acbtE0<@k93YT&*jY+ZOAC|5gaz zJAhaW+FkVFc>fswCh&K$b9JS-=PXY;N<R4pod0aeu1$m0`rl$4j>sAJq<}C7z}Tx^ z5da<)fs8^BLP8rvKfF8yz)P5q_Yd$m$Wvw7GwDL174`DdIOHMB;4ZJR%Eyu6fbs^w zF2HZ>%BF~#z1Y&cz8vH9-CFgLMr-{3!-?N72u*w!OJ3q!yhu3sYlf}9xY7Te6E9ZZ ze|e^DT{`DMrcIj&X^qq4^)c^iA0JkFVWa<rR=Po33elMy_{NnvTnqa0jMMi%`&sF8 z^-<BoH#Rji6QufGjQ>N{e;*wNrW-F7aFi$!z414w*gQtKGus~Gp`2Rs<O~!a#agb= z6&cp!xp;gn%3(Rj*2syr!dM0N-(;)`-5r@|tOE0|F;)d#dQo$eu&0F&Dbz5J4AwdK zq=^eW$1bZT2#qJYfO#O32FYTeOUia|R}zlajz8P0Ks4~d*-F^NU4fj&8D5F|NFx`# z#N{%nQ4CnGct_TOUo8;TQMYKeTY{kGqy}q;n6x^pMC9T;4Y7J!xK@bC;3Vo<Af4l{ zx|x3_@>gMPrBVqM4e?8md;|uO)fH~`Ehmw!zqmF)nigCWBL2CJ<Qw@?YJr3}BV*yf zcAL17Wpb;t_)40rd{&+DqPQLunR#c0nmqRXB%z-)G#%fcDlmEI0zXL=s2IAyM!Nu` ztIwPTkf=00U1?TE-Kq6-WX)lrMD~uVHp~`GW0sl&%$eFMjj33F<e0Uxj)?AFsO5Kt zRs(9@PnN}og^;3hvfy|oQU+F7XK17STS+>OX&tpe!nAdUo{+a{pAK@Tklwi_H*4V~ z)e>DmZJ(DPH0*;l`X*Zs3!=j_MW49%<@7%E9>D?OCmgFdF)bMUiv`lVc9;at&iiDa ztlVm~a;wi=xg#y}3VX{sj<UGL`j%aKo+>@>?9#V8rF$riO$<z~U(5o9ob(%eyt46X z)%^%s?p8HaV9N%fu*Nj{pOuJ#Y#cVlsKGFd1zjCtS^J0GQP3#AJfXyx$?*2}xzbOs z>s2lFQiqgL#AXB_QbeQgM(%>lqpR;~x#Pz5f>1{(AV1jL^wF`|pG>|?J;(6U)uwUi z@)-m7D%wYMaJ$0~b+dZv1^SIG%?&BCbN%0kxrFF|>mnnFyIn3-UUrN6h89_61*yVb z3d?pRsg@^+)%K$lr?n!eltZ7)lf_44bFx}DK9pOh=+yvZ1rdXF_`>4}T2U5wpOnv_ z3FfQxTuEcB-`cMsmN*RAuS2|?D8sexc*7<%vfY->mTv?&)KFs8WV{N@kuT&GmVbVR zD-q!RLVZ>=#@2^c^P-WDN}H|k5TTm8>ewTp^*o)+`oD877T7`uXyXn^tp>Cjtox+k zFBSS5F9wIATMHT-dSUPG55lnkx`Md9uBaR%?#@srS01h7GFd&U4&BM`Z*nioP8md( z?WdF5<;l-gc`nj9nF67B4c0;F%n<`ZCo$0qX~|r#y0%#)mTF&Mx~27GlhO5|M|dTZ zc_);V8l?v`bBYUf-oc;5l$WdYVWOqehO{7ul;;4Y1mN63n(RWY<|rTu#ys_cM->89 zzq>~+LMZDS6U#kBr@UN+?Do?aytzhl@ws$jb+Rc8mw&^WR;zKIVP5KEO9SD0-*O)o zT*Wzxk*Oh8Cl-Hm8?0;FlVn=!lnI5Gp?5N!)m({Sg|J4D3GY!ZldWr2v*M35S@m3O zK50DYLa#!zd{?@pC~<?e=?_3~7RM=XBF7e{1^Ogpr5N2R_?f5m>(#z+M}zDK&>pxY zuw<_dugTVX62ZSs=&%giZcTz1PzgX@fNU-GT|M7<=m=F*ThFTy<H>LE)0QqRN!-Bd z2_nt7SUQ$VzbaI>qq&j%C09yd<zc*#?jp`0?~9MRilVuh<dG*8nZFq?Y>dCJSc+!8 zI7h*ucc4+<O>T1MIL-Y1KavF&3|+%-QU&f9y1)-p1@0WWz(aNc`u+LLaj*+Q?Kw({ z;d6QuY;I{ZPg<>CB%1<D!~@Tlvk1A+LeiRBPk~M*X_dTYf97^RN*~^Ag`9507deSI zoht3~Df$G1EYY(Hnh9}x70RkLD?J;3+vL~t8-=NAQF!WAU6EXC%UR3z58VeX@h+LX zWEoO;f1^z0RezMJ#4;GeAV`-nuq-l~K%3@VpLOl;c|~VsNYu-xK0f%k;+8!2Kr{MN zB>ibI_9W=jb#|X5ZK!^}LRj5fw%^(?U5+@8n}hVsc7&7qO{Z&9m)x1^+QSOV#Avy5 zjUY4Ki&b(UYg)d916e5Va-wf^704ykxyiO`lG$%hM6*?VLvIrFk(<-y5V+A3cF|-q z#mj7IVPUiN{U>Z30`#h5HY_gt9ZSJ^#5v<vBQE#<AO5mw{VauJO5bST(DgH(WT$kG z*;t*V-XjTe{!6JO&w?+&oq=fA8vTVdO639cWZ$p|^IFXhfLU@@OpY!sG}!f>!J|uo zoq#b8Mij`jD~u?&G2-s!<FTKa=~M8omP-oWzfnx7XAr3RU&C4~i8sJ%EMHvB-#@aj zQ3g2ws1U&VNJE{}`?S5zTci+Wz1aAfgx^bdeFXf*-hWQ`ncx10@H_DOknmeSQo*lN zE-Co^&c?$*@Y{TFF#MYN;tTwJ^uRw7D(ROg_@o~Vx=X!J!B3noZBwUd1w;he649C) z60d?>B6*S6lIAp_9+^*nrJiD=k`=j@Gte9E)dTLx_$RYS2$gtZ+~xkrI7u>@h@58} zI-OCOZ~-Wu_^LSd)ukC<jj_KPmHCz4Y&HdB%ZkG9E}IUnnWOMiJ>*7xKG_{1=XzG; zsuSJmb_?DYYm7uhX25vkbfYs462dhFMZQngGf(*4d(-)MS$~aZghD@vYZ0Q(7RQrp zMSZ-Yo{r;6NsUD4b5|BMEZ%%ali!-dIYY?4IC0*E-EzFvD+S}Vin(l!*K#VdYl+vY zGfcczG1Bqcpj}R#SIA`;T_NcVhY;_5_zi`PQKD@0EQ&5Gu%jlSJ;2jVNla{UVXi*B z#oA|=O-Z^_=QDz1n6H`pa10Zh=-B;5n4--;rLvrkCC(O>gFQfejhxgf+C2%E*mgy8 z<4#tI8MyyCWq~#(gJ+iQjv}Z+CxI_GQ6UJ`Fb$P6BIg3~hahA|JsztoA{J2bv7Wjs zT*li)-KVo-o~KZl<99nL)>2gbN7Fa@A2yOra2FEC=`X1;TBpq1C$seIgeywGFO7-m zsk=PetXvWERmRq=W+dfxh0BJ=)_jRuQP4M$pDc1E=Yy)tC%fCvC)4W%<_I;PD~v4_ zF;8WARpBy{JyJ}6y=%XDQPB@t{E-LlG_PllUFO7Zn-6kClf088YfB=;bTJz`AI0!9 zh^mO;vO^zX{o-P7+fVhKmz32?FfbmVq;{&9e_U#5kQu)?S!j&xPFeb>Ml0`eHRB*_ z`za&dZ`|zCKjBD~J&!slxzxL+=bNMG4PJ++kg`}1d2w1H@*j81hsS(S)|zo7D{m`& zTP^M*g^34O^C)`1CtO?5k;^`RX^|x2PMcCD@ugAx#mwaeAoX-dxsNRpi?&qdHT!{# zHOCRx37fArR;??_ZL>A=G1YyW-qklpbF7=}C+6~CQ*2RDbWt#T>^}N)%6Qwu43098 z;ty}I0(PnJvE^@>a{{*ko1kMhkpxlN;nRB5Ced|XY%OGW&8X)$_B*?MM#TCS#{d7J z?Ofoas;-5fWF};Qfip_Ls8ORvjDj_qsDufckf%amLSRCbhqtxdsb70*Wd=|aOq>K6 zj-$4<t@hehZ@u@nSKDH1HE4?oQNp7I#9qZ}6(7|TgBmS`fRXwBYwt6UJn-@T`st6% z%z5m`+H0@(UJC==u|yp+M|s2*m*MRDF0(8bY?#&+?rh=F_+1^ZBMl6Dz*ld5G)@k; zy1txzRsg8^Ir(VJ*;H{7=Nop?qL-t!E_8J{e34<MdG{I7cSMcC!zj07h1S=^cC9Ii z(e`WZJ-PoaBF=Z+y&-)jQJU28JaI#L`pnq^ur78&21@Q*QWXtb!8SP>()JO6*wimC zZQbCRc>?e3<sD!8%zAmJGlSRK_6~bT676jo{9^BHkat{vlYYdX{<-^FAn)a<_dfSK zl5%fT!54eyUGQPkj4wXE-^hD8E4~2y*!e7JMXLeXq&%l&smku10{huC*Y3VD?eoGX zc<H7kUu2%4lcd|UbTtC$nErcz#LnCl_(IM2QZ3Da8+bQ%$@FU%5Du~4K7DOYV!M+u z8L=K^)0~}M<|7?N>_#$!xXOIi+)G6kqSUTUN&JD9L?hM*Skn7A52tLjn$XDpIN%}V z$|VIl7Y#Iu=?9jnQy2AAxZvKgo(km#?5Xg`FH(1g`i1_CCH}-{e~QN`hA23{QNDU2 ziw=rW=x6eyjQkuY6LDGQ49}QC_+y!~b&b-Tf>?*uiJR|tMes-NXkH!7jtaMi6VjSl zni0NYO6V(MzYi^ekg`)31>B&6&-z7`SOvt*T!F(;9r&1nGeWezP9g>77nqIt=4#vn zk~<{=yF{^XaF>g)vBeo#>EV<VUDA)Y?qJjR6fA6D4Q17e{_1+?w+zzFoPqEggXV|f zw+Bf*B0^75mtHNBl~+59dgMwEPIAp1!e1Rs@2MDIMrq4gJ?OeV2w&?mTRY$t<UY=- zji|4&NG`~ul~~q8f(1S_|I#S&&qM(nF)t0jGibgboo5vx890iN2IP399s_aPOwF7l zI>Bt4;c!VYA?mtEC^Sq=m1BH&Bx4wFiPJ}jW0#zEtCA$RvVMc!J;6HjR;P5iJN)`! zgSpu0Cw%7bMbsUBdr*c@H3)yB8+^?6#Q8Bs`spGftK3=CEl+hXi%{^n>fkkzv`Crr zc=bvs&?)&#3yCUvd$7^lAFMZL3A@*TjJi7*Tit;6e?<LK)b!j$o%f931tLgL>IOiU zHN)I9a4@Xucux-D%mj3A4|)%WwkKAWlMR8>q30=CJux#&^ozZ}9zI7Y6UR%4!TN}7 z&VozE&@vo+XPPY!(Kom^&L7*Ov2X(X^yeADG2za^NcA9@0uoGV#QR3u2HqZ}ja8-} z>3HDKmW<&4X)sSe)SVGrNXYrl@cu!TB$5-J`ia1Ki@<pc0WSh+LOS+4%&VL%LbdZ6 zjRO)js}^QUWK4uo&FY!(Hi`dG0}CH@t{fYF!x7%$jQE|`qz=~Rp9kc83+D}y;0MXL z(q=MXc&UyzO((gAxs5%~O>wdQw!ssr8w`B~cz};Cs=rnZfa|r<t95-pIRnUX(**d= z9%brA>sr+i5&CNf(n6DJ!re}9^FR~RJcx8><xxklj_unYY8fstjesw>F>-w-AF3YA z2pT{wI&Z*QFVthj;3vbTuJ%9ep~*IESPH>-i!&(pNfCcz+snZT(W+O>JtWeNEP6$h znO6khgSfQY*1{+?zH&Y{%F$5dok2j@8r$<6XWPyS$Va2~)72kpN){re`U88pgT8jd z^Vo2%GUst7Qi|ONudwdzK|9`7a#1K#P93KsWun-~J)|<6I5`|Iz{#wCWD|;%P;Qi; z6Ih#N0U^(l!A4G|9yALjy`gyAsUH>ZXSP)+{p=~ZSof1*`V;-^)&0!QG5rMi%MVV_ zWV5k{b_GoSO~obz1iqoK#H}Ih$}#5J!RWF9bG-TD2r4>^eo~v5?X5`((S3@Laf~!t z_ex~xe$-V(V;pqOqNtg)UnX3ss-LXWM!TFpXDQlJ5Axaax;juuT40vZY*pF=$NXFJ zp}i4OSX8}2X3e(!07d6WC-Md@?UwB5O3oz)SkM+9xzR%X)-N7@S2-F9e+qdT1CPO9 ztwjVzz?1q$Q5kncwREgS^ptRtN9`MnUhzI3y4qanG<TU^c2W49W8<4$5icw!9azQb ztB~6``4^J^mIjjE?J01IT<z3A+7c0*>~qBAFqft0*Pf?9g|*J+1%lraf0Hf3F}-5W z$E%ZT8hp#9q;}g1W^P`RLXOcCaV^C2>p-*L96U7JjY+^2{HA%;8fcQ8OF4KZTm7^l zIPik?%5Q`+8<Bf~GkLsd>C?$^E&~ofBbHLKU5a7Ty56Zl{bfPyTCpn6Pwm4Wdrrw; z*cz38{$$AwgN3!)N#tN)Ko;xg(^U)cx01HHGw#q!l_lG_8@b~aCq{;MK8f)8>1ZpU zV>n1S3UlGxkYHJqB9R55(0ss)m)T3Rm8CI6inF2I{yVTXu_lV}*nbrLu{9UC{24%7 zs(?#5(c!C7H6ZqwB6E%lrl$?uP4y_+<_?gGk;u*|azH;I{F-aXkV%LARcE@E`iP!w z(OUKKgcQyOR5-g{N1#X_zb(8yBQnQnz6yg~PnJ*Nv}n+z0+{Ej4~W^R-Yi=Z+XE9O zm`w5EH_Xe-*Z7JR{`GWuy>5Va0{DNOH=eKGYz*vAz6q}qF?T?^>o#8v@Bf4$_g!d? z8NUme2OutRnoMPoQv^%}StQO4VY^PV3uRleydvHEz2S2Qu?kTs6z-lksCEGGRk4|J z_=6-N$PiTGZBAuSmyW_e&NBT2a1Kaej`W}I?G75@kJ2M2m?v2?315iS=m5v1-H39H z=4Mg;qt#_4X`yLm4<-T(0TE>p5YcSVyCv8l%=Os#-AtrQT?xJ4cSVEwT6BH}WksnJ z=hzi($mn{*>3G4qk`CfO#AY(+-4VpPftrkrmoA1pu7uvdW_i!LHu{zSde(^xQT`k1 z-O&2+0Vui1!{!OBN2HFpLegIzl&2$$q*h*%;g=D&4+hG<c#)kkTpW&MM5&FCDho?- zd$l7L#J5D?hBK#PA}J!85p<;A^ynPdkd0C9wDCq|Y8QFb<=qon2f?>@2&X&}KA$-K zqTYNIPaw1_uaPpE5*{R~egQ5$&u`N=<q$z|ac94=@nlr@Nq(u4R&U+yapLs$sGH`~ zYY@sWmT33fjp;mi0w$>m*3wB%m8EAHBBR7c&E(TuUMv~SB@*Uu!WM3s>M){Pg-ou@ zj#d;%Q3-ZCw69(xRP&X9BrYw^8U>rqOJLI(8k?$I!O04p@BkH9y_|ATT8cW~veK1~ z<2(HJv42+c8-_G59`iW`j(&lg_lU7hMW(JE41eInGHJ9aL$l~0r4GtOgCPt=&(er0 zg)cEvqwRa#PR#a1WMhbUj*^d!w$*ZP*+A4kAS=efx33f5$Ub7`%gw*XWQK>*BNq#) zV2j%XOsf>B1Pl^NQWcKbvfQKSK6s@IXrEInjCgz(k7Y+PnAPp)3m0S!al3k2n#DQY za?81-mDpNwZaVl%(he9CY^wbXktRTiN7FCvd`gfA%oq;}8L%R7sKJ^$QQ;8E(#29j zP~*;caEH{N))^-V_N*ZxywScDV*o~QMqI$KrdwgHvO2cfNFA`w^LYXfobU5kGeVh( z5IIHvbCACm^^1}ol~d3grz?>~ZPhwUsw2*~F|8&A)4U1TC-stZ6PR{doNi@nL|bH8 ztshbr2sFmtOfV#x_2Y%~^UrGiY+6rXu>%j$fVt7aF8|MJzZ*wnqJ1)xI0m3$+n7yj zcQz-j%$0-m<g?*an*yiOQQ%aNfYa%T9hn5w;vroXIV7XXKd0qmxOx+la14aIbHm>} zNTut`1z(rSj3n5#wR`a9^tgWUPn=gvYVW3=*8&@2SEWGg@=+jmzJ?g8F-(zqB(j;e z22V;LSAL@HOr9y~OqrZSB2$M$P}};Zj*xZW_)W1-m1_J)bMc#tT`C&5wOb7Ccu)pR zd{O=8ExE?r{+<fu&e8b}9&Q0tQTG+ev<LScK8A8OZ=1suzDS&p`ElfS`N~dT{|uBp zN`CE~)>tq#{Ip`2p%voXxW;9gq9sJX_j@t&f7tc5v)&<5lFRiTwyzIxt?D4T*M2Jx zo3$=$IkN!|!v*}7jdk8rd3-}pU@gykN_w`ZY2L0Rgt~nurm0u34oB+tk<tMg=;$HK zGb$!UcB&52F`+0=$g?!>I2;MRWqnMwh4a)bq}}o659O|i06T+Zn8KzlashTAEf?$z zy&qk)kD)tBU}9G7i`MNU;u-;JDSB)0#1(g&X<Xt$1%BJV%hjLCFpcO^;cuxKCP~I# zW%2wN4kB=bp{-ON=of;Gko!CW9>T#9F<ixMWoUUdakG%QbP%UVg<1CsXhq={MV{$R zXgQ+60VNt75S?#dB=kzct|U`YkV2irBJqp{Tcm0m$04i!Ncpd}|6s7KM71NwA%!*t zsA1YeaD~i}?A|-fDobSHxR|@xWu~`wzrv#0N|xD7r!q|N7psamZWz%V-WR);3{Jjb zQHh|fDWgg^Lpj_>p)hB3(K8E_a5GfujaKdBNJsm>3X)g-k%>#4o6uVh$qQuz_l_sv zGMulFlpIxid@K+-$s<*JtSgv@xoCg14zrTWs^?q>=kw1~D-x?&Vy36pTuaC4HP@9~ zN)6`S)?LJM$2U%j{vi6@bU8&#?W;;cN|^SpC?blzhcIC*A#o-_g~IhLkq7WbIRrtF zyguS^?Jnzob-a^Avgd)LNLnl{GD02~ayVL|j9BVC-x*k_-uwh8N6wI(>ag5!$M2a( zT5z#RY}oVRw?6?jIJ8ST45gMNxcU(FmK=Vm?lT2<TxzgRm1~V4sRT#Qk};S^yxT&z zsW2)g0~*RmF(po=0E2w>MXOzbvQwved}g`QNw_$j$Ivgl{h_}cs&HpuJ0_@18sj>z zUZC=^R=a#ytwndteS5wqV2J|xV$aw#^HQEHP%V((F!Z9FU~hJrFLJWvB8i5xw!FvY z-zr~G3lV!FV|bwu&=vEqP&8k$6m14Ff}Jc!lyzAng0*WD!CLT;ta@={0KW+EI*!a! zh|E)L%RKD5IfHoQLzjzObN4fJ2Z6pQygfZKXE2_E2>XnqA+{H@K|E!W(up0Ru?^Pv zW~~!5UgjcWZl5c-43uTQDx5{`6k3n=qL+xs4P@m}J_}@;Ob^;}lD3D1uXTPRH<d*U z8uNjOxN^Zd5wfeKBLV9hVuC(d=+`(=h(2K&&v8+jM;Cb4d{Mn}1wC?_c`rYvTMJ}+ zNY@B_bjehTwxd~1grd;}SIWIxLLa41lr{jK$9%rgXMG}APOep2C@>GR%UIB&PVa|g z(b4(!%D@b#tWGcw42q+IFI;D%!XKXn6=XYb<mpmc$rIf9Ftm+E^8_Uh^Bc=7oq~-z z>EsYHTDqPN@~~=SIzWQ8w@QIIC)JQbYGg8%rI@&_?>{JJlr_Z)3ss-}p~w3!BWdnX z<Mt5K_MVBuZ7HY!{g{}oWUy+40~}ml>Jq9=ydxt|S`TEqX_s~iZA?%=ZLZsj#bX%x zQT|uz@1X`4y{t0o;oWH}S?t1jUFD|MML<9qD-2vKA0by@uocJ_u+yxJMNV}RA{Ro5 zf^cD@<$I4~mqhqG$*_d&?INz897o|K!d`u|LfAmDH1da2WXkbTnf@m1(REg2>4B1) zUB;bagwm^FzG~YD#X5KphniX35w{O1>t)2rvmDDq?$7X1>Fc2%rWgVJf$O9*pXzK> zBjB?)9mfdxh<&4>sRr`zz1h`toA8Lb{*i9>R{iMcv%XH>91ecvZ?D50=r`+;%+{WW z@I{*Hl8b^9%5YIqPVJzwdMlw*ycAmB(7^C(3zK*S%_9;a!l}eK>-4$I4SS|wAs|!S zb`~=|w&Bn6^ESEIqhjnH?0klb0iD4MVwXI_H_qRp0@ew|?K>rKZ4>c2u`J+EhAP>t zQjSm#iuIJcfixe&#Q9L6JJ#f%ycdh!B_bcJURfyY{Ta46!A4aLvsL7tpaaVa;uEry zgOpHFij>R{MpbptI}lugf#`0jy|J3$fhFwm%e|q&U`c(zckxt8Yr<nC9$+d%OtE2> z4Z(sJtXu}d#^dzzfO!Q?dz%l29yX~TQq^CE-6TBVFzyH_UO#BZm{nQB_M|z~;WTr+ z-j#Hlo)SW&Qfc40TA@uMn=tv&Qe?2?NhEP9J_K-j)L#)b;~}x1=XnA2r#~-ta%o@V z$6KAP2Oi^{cna0Fd~y8B9*6Oi$x)NyO)>`TG;3Y0J+f-i<-vaA(ea{Ezm0>LBpd0R z7*Pe!@`9(A)HDT876N4M_APj_|DrmN^^7DRqCzgz=}?Uu%Y!5vSr9lN`)u3hu?W$U z!*nh&uBY5AM;Gw@-ZVDeWGz($U$*(pvFlbY$F=~POc69u;$sS$aDGrQESjBFv^{Q& z8%N4oVOm>4hw3}7<L<PrfqUp!;^&t*w)(6dzcZ}@itp$Tf9z<w->fN%HkR>*VmPU9 z^TI-3-~k!*&z^=+5Tp&3nbmRtLwI9lPjxNrr!hRE?H}q3Q{BfG@ym1x<dC3dXylH5 z+r!DQPGt~8H|WlAbalPybV%(fjxSjY-U4FJ^X0rZ_`)$MiH{pJe<1q;Wq?%lD&HoO z)KGl@D3cx2j)b!gaF7DtUM#C22NKK7oj!Aq^*ddP*M7>})l)5DSVY#9%7-;Y#KSp6 z9JhAmvHz{=N`gIQJxSG&Uj2>qWjDmC1HFPJ@L~ycKSxe9a<lgVu9>Ui@l(ns8eIl4 z$BQeQcq@~eVXdZ?5CbaZN12-Kcs(uV$INWoXR3}P!jYN*f6C0~ebzq+`(&bJ;EY6# zTbVLVZGmMJ^kmO0R#`Y*2A*EMFn!tLShWv877Mlp&kEn#L|!gw^~r1hR7dI_j%6Wp zpNfvhOr{GPomb1d1(E9G1P^wuRJ)mDar1+>r)#wS1M?>fJmZ>f`Bsm><N^^+rZv$M zlFg}=`EzkarS15U*Vm{3^Zu>l<xulBbBn%O54OzZPOWua>v)OZMyQ$AZ+4x!Wqf}~ z91b(MR%)HwKAv2v9B$cd<?>Y>R4P#CefYa9bK_|wfn=Wgzz@Qzqg&l9RA-nPd;!lp zAoT2~WEV<W-aH2>R<1GcP-K97y6=38z9q!`j(m~)RV)gZ_t=+H-5WMNdlKc_KC69w zhLE-O!fvg*AOdXdIBk*_;ZOBgtHWys()^9lH3OlqjZWeIIU#v>GK%HP2q_ErEQJ5x z!IJ{l$+sr{aLB`IzTtz|kohn^;!VOg4WtFfEbZO=*H|p!`d82C`!<6qgJYd)wmd{H z5<UQbRD>*;rP%RO5+)9PnHIt~xzbYOV<qkW-2$xObd@-6s#zW+^5G0~b}dcn!U*Kp zaYwIm|J)ODDPq?@Ha!7S8BYpJ(Q(HtK!>!c^0iLe>fN(yoVk1XvZcNAZahHw@r!4{ z;BH-gz!$qDh)Fayc@2NTe>&VJWE#3qCa>dcUcRiSY(QTbl#dbfp?~R9YVD93W8T6; zT{)cPHoJ`Pld6)y<8%iVwH$}KoWzH&6R?m7%TY_VX}np3j-KdE>Cw`T1?G!ZkuY6C z@SRlOMBZE4Eh?t%a}^1$M@p5a#buI-ahar1@%=;93#ss@vTf`<L@HR!PxeR|A9h#r z!rnBrGHk)vI4b<{Wn$C_&q@s<SwR*%_68Y2@BoQlwL|7dASE@Fj9>2zZ*e%DGv_Zv zqhY?Jx9aK@hZyvHzr$yJU2M+%GLu80Og0u%S?i347c-Tto-w0NMT;=YBg<TpIW}ed zDI>tZHGiRFsawGO{P2$ZF;NfgI9f3vinCz)Z*Cr+#yEt1*^$nlJ(QGj#5W1>#NTY^ zLlK~e<4umgTt&usV6!{i>2Pc_XD@`d{~XYC+gPwq;bPaDj%nTAZL2ScI>&1yJli+z z?^G|)c-W%wP^37wqdT%Do@XKz!IQ-0wr@!Z!{H%Ovfi>_64l08bDYQvhYZ848DJ3f zu-x3^H*t($=CTbLHDbmpsu{q7gnwRbs-(YOOVm9zYBMYwD!Gjs4mRy$YNzUHwdw7( zT-MayFDcg8Gm-=(5q~tEa>3OD%UEC`B5_=nH5mE+X`{S9R^oy8r}N^_w{3qRIop&= zx=@r`{IGa&`=x?YB_OMIMc29#!B|-f8u7;)!W{Rdp1Cq4Kz`#l6hBl7&7~5ahr&ry zAy;TqB3^5F92VnGT~67X=JS4mCt0Zz;n?P8kyfMY9^tRAXPx|z|17biD-ye=lINrA zelPdU=Pgbf+t)ed#q~eh*HM`5>)Go1EB5t6Y*E^YsBY92jpH|zeOBJP3p~L|0r~J* zPc_72eA2rWSx=B&^$PP*@fQ-M7_IWayPd>2q$6gyd>lI>-r;6=qgWTT%k#6Jzv{D| zPiQyJ(3etS8F0NT;ieJ`C-iKikZ>!P?6vH9?Q&H|BGtH}^`6+bUDm4*qU6|Y{2D%= zFVx>7)~EINZ=>}`{&GN<jT%|Boe@?I0yu05ZmVp>(;9!p9xCuAk)*);3yshHspH!P z$c_(>|Cj#mf9KQSv23*d;HPf#d!(G5XZ!WY!Er>fR9axKmnxqVB<8>KbxW{%h}5C+ zt@VJEc1h}cY5Woz0Qja;mH;?n`NG`gmkR{1vKnHZ+$Q=Uj7?WLk^wYEf1kgN&mK%> z@*8D@uWq)Pls_rMgQ_ZB^PU)^r*l4JOtrCj+j`QQg^x6?p3SkiKi8;ZT^)S1?~PWZ z8&%!2(Tk3rZbWNA*}gwX@NpgAuIk&u!I5sGiVkSZ-S^uKG{bq4hm%<_9l@W3k9;k7 zUq#;!#G2jb<gXOJY(JF-kd@tLx2RI>+qv#Gu9Q?YrQwfVYroWrXc{wC2cyov$~=5l z_euR){*XCvAn0lY<5K3Pj`DMww+s!h8H6Nd<P9ZDsP5Dj<2|~_d$Qx+d4%$Hd~5qf z<lfri>u_%;ZEO|k%!_+vL%wnc8Fq?47Ci9uUWWEOESyb;t69GZ=$b$xh|BsQaWA`0 z3*rQ88}0pc$4Q5FOS(l(K}x*j)4TU2yZ_x$-M#qUP)WqTn_V9er&jcid^v_MC%_lh zH=-0(qT=Oq2K+{Z<?u6j(L+TgfFU@Ed)dRVQV~S0JJ>^h_^Y<=KqE9ccL8tZlRJcw zF0`&-@}f0DkQhWZWu~Y@c@9I06(2S$4~uhbPc_I+8T9vhCvZKmMomFTTJL^FNh`%f zu-@@izI$IX?zo1}qL(QmyjUhB_WqX3n?jk@vf7Z~Y@eQDo0_7i{|iMYUdRkd|H@QN z_r2Bzj9ARGLTno<l$UqCXwXfM$rv|GY{Rf6R(|90E<5$A!)X5{7g~;h1P`e%P2_n| zUuGI@a*Vv?h}US713YvxBXA%w3F`uio!Ai2vp<&^j5d2iW~*UXn}Fd?>l3*=9D;As zQ9Pb+w6?mrua3nVZBo5?cun__i}?1xBo~qW_7!63vYvd1S@ap+ZBIVJm(3mgG3s9M zZrgldah<2$n7eP2;6KLxkJ-^%eGLm3ePM^%8heeZZE920%k~I#DsZS>aXO_d!_VaP z<x@3XE~K)vBoABshN7Wr3PI2C;j>-bvR&lF1bgOud+dQnM9+JRKi1D1GSdPF6F={h zpV<sT-`&8^6?eB)aOReO75uxIe=Yo*$G@fgOB?g~{!7mo{+z=({K^;oof#KQ?9Vto z&t}R=dhX$uP0wBCOQ}#4-N6%;WDC0bHk8>d*%e!$j~wq1CDX3zC-r<K&_&1^{)$T$ z1j>*n*fV(n+1ozrI~7h<W)LzKtxvb@w;R&SReq2i(ud>2Xj^^`4^P{QP`J7wFqam5 zeyfo;k+Prh6vcSceg!o4Oxxl3&~!h=2L8Iam0g)LZOg1z=)d`DYX10WOtNDHme9(y zt+ZoEJES`DM16_=U1e?CLr11<slk{R%WHbH?~K5jzt5FkU!Sdebtn5&{o(nthuIJa z#G8JMhoxb1gpzZVM_RmM;LEmU(vV9FR()eMqQWm;Q%DK+$rv^6{c4%sHz{i->ve!2 zLtGvWxUh>}mU9xMy9f<55~NeMu**6HL0w|H_bB;W^Gj}rj}(L^w8u1qtRcPE-@-@E z3uVEXg7f=c3Llvn{6_eQH~6mvGkq16d15M0Os{|`hCCa_l&%aqOM{^?<isE7dx)+4 zK)CDC@R4b&?}ZV&>l7m%oC~&JetxiB@`R-I-U452xqPb8b|YW(C9#J~nnFqM&Donp zgGRduO5)P2U3j>QuX(znx9KYu<}KcX@Xch}X*<k4^+1l%E_rK}Xsv^^ZSi_Ztu0;~ z?Gn#kQZ*Pn-QN(nM-V4=$)C5tI!o?53Xzbk2JJuL5x-SCU}--R#={bX7o2p>gK6~* z+IF#NWA8jq$3~3MMkPG>_q0ULPrtRdOjelsV#2Qw#{E`jdNS2P4F+59PCIWxm8ZTT zuwTEZ8*Q|{r(UPp1oa6{F(;-fLn;Bq&z5TsQ9Sa6ap_lEk4dP1D66CM=v+@9q4(&d zZeK&-2Hn1S*l%5?+fEG41W{sCujAy!%WJPBcXqVegSQ9&1n!zxC^x!@Y<@Xp|0R2c z+oWQ!%X$XLh;J>Y2LBk&wK5zU;;iYEx4a)WZI?h{SwoyJ6tRd~R+6#PZ!WWqn>KjV z!w7~mLb>sWC+U<AZol<74-=D)u!)nTOMw$#@3U7;_3Yx`<NPb*pX32e=YRQoy#F%P zjf_M_Pfg#XPEW4+5fp*R$wUcLsU*~IMnR|m<)Dmd^P3wk>)(mtQOS(JZn2I!%Oex* z1RN@#?@j>>b~#C|M^;OFQOqqmR|U_rH}wl@*U~@I@2sIqR;HFrYbE03boM3Wx+Nb9 z8OTZ4#dyD^q`(h~gb1Q8lm|lqY|-U9%y296d+X7mtz&E;A!x`&@tPU&=g(2kXJdd# zw5*AWhL6O9Y*Es?-^`H+<!0B0Nfi{p33qOmV36>@4CD64P<BcC@yDfVn+NzX4Sy8c zlVz4z3$6DUw<J3XO}5T`<rq#ez(aAQ`1Zgbb8(>X2Y7W=ipW%+lH|;r|AII}-3Ccf zqOf3=aF4YY2A1$*-?J(GRUT0Nv1*b$Jv71k?aR_<=njZ%!FtJ?T^u26yxmO7ix0o^ zo;GTcEh#vw^;lX<EY>_O&;+D<{{_NCrQ%!ZvM}&-xiX(CDKGEpOTJ8>SExRX_H22I z9#=#z8@<y@Q#$3nEc-pcq~06$nhjIGwLGOe^2gfHmSiL8Onka^#Q_MHwhRW(^II*_ zi<ms)8!WjS7hR)vW0<g_3D$a`EYxqQ?!JJ!KF0;uBYjE-l*hlJpfeQL6!Br1acYg5 z=dtlE+i(5OEBFb%ja+~o1B`Nq*?)GI#uxOwg3t-p-(S*$+9pOvaa72VE{n`}jt<f6 z#JJjoo%pRcj}C3N@4w^l0z3UJDxKqW<+i{zGc=v!Bx{x3`5Zdeeh;;r#?_tD``?Wd zvPRA$<1^Yk%Wm^91SQ!fE|aWLW`tOjYnD)Nd9pgR&htqxOqokLWOA%M`!tCDQ%Drx z(XC30>RXPq%P%==pf-<bXiUOdEcjAzxMm@{$rU7aQ>6wWO~yWuJaB&r#T!GOz(PeW zSiQp~Ls^@w2P|Vl+WPe2n6k?{g}5d*JI6Itqb^^-qMg29NL69p8|5X%xilLi9V%%l z1b<`@N&E?^5v1aeo(lL@qK^}KLYEBXgbqdZXlY+LAtRddF_&q>Thhbixwl^CIeEA@ zCL3X%T~On>)Y2Y0%eP(5f+ALAsviacijYx%ER=0LG4h@{%B3X9e6&WJJ3H4-Q7Y4j zra4P}R0_F_xY6Q0KfbmS0q3b_bxEFX?g}lmZXqHV1c%(7Dtr#TTyiygtlz3g+5~FU z<y4sU6u_daCfLDaIT81sp2|JW8)ie-hmr&9cAOi+^GLq2=6_neXNOKTjS9UW>5<`2 zOIzmH=(mxmD>+|p%k#UuJB+r;B7Fxdq<*+0VD3FEzS67>MP^RRvGa}gOGM5?z{qMj zdUI&Cy}IARK(Z*6TLdZ#q=C6VOEpWj|5;1VR0K-SDw4ZLB=7jFDuzvqGwp1LwD<vc z%oA9P;&IJsX`-qW_=2naR$vUtACQGyl0YOdD170UDEV^WL*-Xa@hZ_p0kNQw@sSD_ z$Kyo;=CHi}$dL|uDkP|dk6isLPk-d=j{^DV<;Xssd+SkUFkvN)2=y+Y+$ukqUd_K9 z7K3wqH8FIx96Q@+zn`~l<{=;~utAt76Sq%v0gnn@FC~=<=~EhsIbYznf|-)G8yB9@ zHjchITE)x+nvtyGa8yAC*8vcPcE<V!8UCnGMhqF&nf9<wP7Z0<%Gllv#uIE%tKhfZ za<T@XAVEt;+Zx%gJ3uk)feHMA)&xC)JJ8i^?79yasfH)1(Ilk-Ajvp7g7Rp{v&ngI zE;Y!pDOh)Lk}3&RGwaENxyZ^=__@6^Vi;9>HaO6C3rbgFzK~Vy8&?`M+8tP-@Yo{= z5s)e15n?O(dT~5~FQo^-m*z}Sf<yIqwhqr$RG9iXyR28=QM8jn0|}ljzDfHL^Hr1x z*kg7uGdj=HN0H57CWn3d=55;7zR=TGgGD4e2`Zy)A=^u(CY;Xt9U(SuAA%IyXI#K1 zV>kl3Q@cXhRTv>>lZeJ*+B73^xt^Apppc~WFpb%w)-xk>EG1k3EQo*h$jG|121URE zP15?mOY346z{o`%foKgT#yf$La?7o<?ah6L&-$MXU9Vsa(3v%|(T5kPMn|`4zS=-p zXv#g={B7uNFIM!c4Ejaq5{{8gYR7xT<SFEAM(;63<4s@tw|Jk~qJB6+6B?|`=o7Lf zf`OS%degu?%*f89zVmOkNE+`osr}P#_Ou<|ZR95yQM>c4dNqxqEXr2a6u;X>7fCMF ze(_LwDY_=TRrdU?t0Zk}j<(kK?gH-{t*@tJSq@6Z4`PUAgG#tKx&OohnVm}hk^lh^ zrWjHQ=yfY!oDpr8vkC$Lqy1*SHdq%kVrDc$fFQef$bM<x+i{)1gzX~RhV4?h&AOJz z@Z@$0<Omwv0}jS{Q=F=}jP}PstD&$+u<Pk;za$`<E*c65Dt|zD6j!h|648XDaT22} zK$|U8>zW*9%dF1gd7c8$T|RrqF_NKOrh;D{N%lHsc(1nP6rX{|X#WW88QNT81_F^} zTTd1aoxui<_R1bAJu|exJRw@{S`b?$q#~~(l4bq!GTU6i!BLqNwXcUyOYu`!xRmBG zuXJ1Q%5jt=>92Q|P9+E1*ywB+XN5Vl(NAZEvFC(T3i&x8t0Jh+x@V*r?cYJ909jJ- zgboTKrF$ZC_ehGIRJAE`60~gicv6Iqk|69*+7~+tl&He2^+BY(=2-q-a(y~^f*A*7 zaLwgIyQI4~S02`-1lHewt}u9I(5=&^S}XJUV`yf_(>;FwyHts<<ieo~5XgUzhz#Ug ztvw?Xo}`{g>ZaHlCd{Ae$!eJDd98k`C(QSc_&0&?J-(@)E!Rx-Ja+X|&niCC`1j*^ zQ$3{%rh4w;{w<ADJzhSmdHyN>g?N5E|Mt+<>kFrPzPn_qXEL7^sLN^T896yQ4rfm0 zn4Fv}zPfV8@^>8n)PLjM6DArto)dCTJRxUNPIgYtWG+w1Icf56``>h8D>*v&7s7Bg zWl(_$KFv?rAyd>DchB;kF_lbRGC^v6fba#iKt*bSE)eJFpM5yw)f$D0%(_2w!3@3P zi;TCrpH+%qLW3K&Fpuq50vBCeo7#nrC-^qUWPCCXVVpq%qZX)8CgF!CV}OXQ8nVV; z*G*w>Ue=Rlx0bL{i2X#>mk!n>{jy-#A~*II36a;@Kwhu_zCdSZQvQ@6s%Udgq}dgf z64H%q9Ut<8$R{3(O%IVJYv9X)ATtPz7Pj+iWs@arhu7>i(BlEUYg2|(I&wJY>EWEE zhLhVkVmu2+AJ6hn9nTr@@g#;L@CH7N=d-}0su9}5F{^S^h6@Sg(S*f%1|bIc3<J+i zpE{hoUlkkxJjvnw)5cRg>Uh5UspCl-eLTr{08pkhfig~_)a#^Vkvp-HdBM}_?RWvA z)1y~O4lV0R%3_HrLjo96BI5!xCF1M2s1qc!u7ZsnrxD-6te38@o<qpEix>snpAdIq zJLV<(O5&THkBc(g9AvLL*of($R8V~`9bZ#*kSUxkTX}%hlmfNCxJ7ITY&MRki!{fP z`{seZZ0`*&BYK`(XxiwhCbN^|ld7@zkH=_}1O9R*sH|A_Ecy2M7~9w&@o=ubiPt+g zh_uss?*mO0IB?N<YuIR)^nMN2i|-}uP&#axXLnhz|A5fMi9_Rjlxcfgt&)v^zVdNv zfA`D5xee{x8<oTRZZ@QHct5}wn-f%EEED-9$Ch72wzTD!Fkc(28+EI;Y&fDRE7{Zl z<~P>HeloDWCc$p*+$wkCY83+<;fqfUE%*Jz(0;Dki_3@cmDZnne<m?3bm<TznnD=H z@sa34Jy6+TR`>Egv2UJ~I^5TuRl}A0%7VZ?q(9<qS`TEie^UH;{35JFrFCmGXD#Wb zpjc4lv@eEEiS?kU^ZJ<$NF@uA9u}j!6cegYD*`B=OXQP>Dsh9$DJ}`c$WxhH<qK$H zl<`zPt03tT^ZHJ@-rEp+QE6+mNcaS$Mdb^sL2=P`k%i1G-kPHP>od|qW6jFDoaIdJ zBX!Stm-!rD#FaSd?v@#8!BuAE51rBimqPD{kGj^@wj#yE4C8hwlNWVL5?rll7`JcZ zt1li_a2=6yVjz`F?jFf;^grB1->GH1IiRit0QitV=9)LTh|{QK&$LTuX7A&2Pwn<6 zMNzl4ky)u#@hU-pMA@jxC8(!#<d#m};KYh99rfzdAnh0=Y8z>{aYvALjM4rFdC2-h zmD&p0P)+0n>x9qw@!8t%H@Xt^Qgt%0!+xRNeu4aYtU#fo$Gc^%&qsY@+ll^^IMoS^ zX^;6ju4CM?xsLBpzafd*f5PM#ekQMXU_1khp?lxC4~*p;4c++E`gxml%D+}ZS_Dsw zcBdd4Q4tkDv<y_5u2evyO%;pOFg@!yFx`_1)2_=BFpZbux^r_XJX3Nfg*afK6&IpF zz%vhyu9IYZqr@-Z_s_wXSjv<dd(Y*s47SCaANrOaX!|EjKnA~12Ja={-niq-GN)jE zDa+el3KIfvD!oUVtHi<mOHp}{=Qru#1Uqi0D;~E)ghJT|30l$gq5#y>yGvf85ovUT zqYYYpDS#~{%;QV)N!-U&KBc=>@RY8k45-f>8$T0-nLuo@g=~}=eK*TDq4#IWvuePC z-CQk>6?a$#k7Ek}ISC-9j3+a}rZU4P1tb<)uUt=fGdb|xqtNNR3I$Z`T<gO!e>r&~ z9TC9N#RAHq74<{T{?H^QRdMV`+f<PfAD<6#!>23~g}B}-t#8SZl!f^|sJPj0j!X4< zjth-lVEuZw?vP>1s|-*ohUU|fShg1Us35{oyDML#l_eZUP*Fb~iF;Xl>Zio3*y}wP ze%;u68GqUQGiXmBRn|ON!7I9tk#7cOX;6w%Jod8Iog^<{C>O}wiSUt-rb6o)=z)L| zN-;xZIQD^4EHSm-qegU!JPOkE{!L8u8rRRG(b4F~L#ep_zr`bP{Xd>M4z5SaN8<YD znLp-4=Fi`HMHQ$MYIZ%T3Bwk4Z>8*BU!#i4=}_S~m0OtCbRW9EVD`|Un?Mq!f1zxz za<(VA_ddsXevielvG>3E`x%5bkFFAg_K~6yfV%0);{fW~vXOwAbbNv^O$}&DazMvh zxr3=Ick0LiS(}bCpxsw|p#l8}3eecw&fhr34uSD!(6=S(?Hc~Fig{uZWAjp;N0BMW z!YFj=mE@xSc`tJSlVz(yPSqxZVSfreJpfs3?0u2H_J$iv*KA==FD1<6S}8<Vg4q~O zfx<uv(UzHAJW^@QhdijrFL)N=UfvfKdz#*%V#6d-%&6PizSsBZh?u9xOr4Xw#F#&2 zy}fF{Q~Aqo_sC>5Ar?Vc2=M{=gb=?apG4%nBA@w2+n@Pt2;}t(O&5W{`uTGTRzi^A zk%S=bfH2tcOtIo)X5}#ziCBXiLgd7Iy$^GnSx@KSRI-t;>PFPT@i@RIuekg8=-Nap zjlKUWe-{KEP%EcKbIK?UeF_vVQO)G>mnAApGw#H5D<Pc)=4(*K%I0r?HE@x8tv7xR z7tsf5jJ6*`Dk1r~SPz7Y{NOsch{60}3HdfzC*^T0VuU6%TKh_sWwAh$&Glaw)<hZv z_(=Q9z_Nnq$jYXBRi8w7(kwODM3(_iK>Pw8Nwfa^ZwaO5bcig67u)2z3SLBOv3-Ih zlG1!t9lY~)HP4dKo7o-amgr&}Qsl$7<GZ?9?|k2a2J4!4#nB<!QoEeRU|_X1-Xl#t zyjY;hJr(<`Cj^19wlZOP?x^lJTQBxs>2b7GepW^@;soy>y_y8bmaG`ICGQ<&OMXLP zh_Z#1?@nw<-SbzE)AJmz12_>}1wQsTFX5`-(@1<gRYp1-^43?rnSl5svSOe_@10nh zeU|ka>Yj=-5M7`NCQZ&z`YJ;pW6fQXFaE8WYMw-rog+h#T_HB$QTtaV4WH-m;jh=D zF%AIv(OUejZc&Jtf|C}vV!<mK+xIqzK--~pGvuulwb6~uTq-DOwXyjUk-oD+Uuv`} zbaQ=Yk9a#pQ{43@k=CTbxD7-JnjQ^=`vlaQ-{<hv=J%(`x(O~5;j&58OxRcp+e_4> z0_$}O@d_BF*tBGz$Rz`X^~i7ac(ul$C0tcK;(H}Y-T{$W`*nSOca*{O%@Y`nkVX^G zNzq*2|D!@FAv%ImYqLjNA4SfCoQNNKf?$}=l5wflS&s9x#5J;Sm70p;jgs@+CHjRC z`m#DNqVkU_Mb-T9`k8)|zdR(f?6}q`#tEf$W&=$DXKvr*>%IQ?ZG!uPnPptg1{67) zM6w~#13oVECDCE-<{g_pOMLfft@xoubNL(B2?KB6!e=#z?V(F|%jNl@TovBW6T%z3 z%`W4PJ@Sb8nmn*!jEL{^!EWIiHS!79xPni8kk@0Kd!nKrLOUe<U&d4e&vCQp9>m5w zq(0P!F?h)5@9_S`nEw}PPaJX5-W0pNiSh{-lCyrog~X)qPvt^q?G#*fW9_vK8#X?k z#e+6Jf`y`C;pA4Rn!GBqC}}h`0t?+p-V*7HG`7QD5E1A}k&jHJ6YJXWg6Y?%TVu~3 zA)>vo5j;!i!6|y%A1+l`og6gm#I5;aU)E5*HhYKCoRW`X&;XLT%a;*?K+xtwd{%tP zCS@k(P257t=B@1^lFycs-kjg?H%?pX3QgQxxr+MdiRh%A)?+(xs`ZPw{|2*SD~yeD z>~tr=KM!NdnzEI<RV1%w#j>N>t)OEr&umTwOH>C$6DI@Sc}(|{=5rEWfuUhT#%vYS z%(5%H#jUHav_bW10ifC=Bw#Peyg^q8L_DJg`NFPfAOSNyA~`rC=@PLi2=lQKoejds z-23j8mjbRLkwv8PGPxx5Ijtacgmy<pg3Y-^K|FDwZs_*2?MLAQ<j<5SK$Pj_<fvsk zWovqaJx1&`zjaoNy~cF@)_ehAc*Itt?2%%xS(3bO#Q6}Pc>q@UQoekO68T?z3b&Vo z6sdm}pyVA?N4?p{#`?uzJW$AC@;QA?Ba!s@R+(GRO<<zYb^^_4t4!^$QnAs9N>s6J zl@XcGZ=G8_3@a%uEDLGY<jWowVsE`!p9#g!!@wkIn;zg2CS&Uli{!|@JS;<R`!Sav zRJoGP3Dfy*x?4?^X_^NLfZ5ohy_}4h@h>#RGFv~rHd9H=s^so$V$oncIa=_b{_I75 z=}}taQeuPZqw&~)v&en%J`K<k{`z31RnHIPn<ZRAQSY0;*1~a%5!Vveuc)x0amn4J zGIWsXaXWbBi8M-a#GFW@<fqJyG|EQHi!|o)ksoQyd(!G|q>@m6WPbL8`fGu?n|vPQ zyfp=(kA|R@?7ssX4kgtX2~FzB^e3U}WS%LK?3Fip%-tm?2WKR5&m1xhg0S<5eyMo; zBe8c*CP8m?xW|e0y6MeiJSW*Aog2xq?p&9UJ>FVgzAWNWn?41nKiwV*>Qem0T$C+N zQy(VLg#<@)v9@S0D^w=i4TPP`%86Yd7kf}1ck^Xuz#eJ|i?}inM59in14(o4@UxTG zDs!#4lkmsg5jXa2|B~i|vW4*fYDv~fEnH6ar}h2khH``|Pbuf!S-<SS4Xa3_Y)#$l z0L{d)`Wu!+gokYNCdyvsFe+htGt66EjsdfWpM?l+wc!ER+VjP_WvrgA&Xk|?IwHB4 zgqRj(p77Msgo<flegz05mxA(r4K|i3q$5$feX?xv#Ul)mPJ0qy8b(x{*`z+D$%Pms zqwY-tT<M^14Ch9<!w7S*QG%6gmzr0)o|FS_pgP7RpHcN35YHB~#M5#Bh~qzIj~v;P zLY#SNar0#lk2cua-~fCg#bkNPGeY_DdY=_NraaHvV?-a2tyk~bB>jL>)3Ins+fQq= z2F>pvRyxH<_hPqVHNCgdMEhRG<B{>;o7kboq^8rugmTO;=c)5a46o$N%0efjLS5yZ zT&=e9C8@X$G}Z@FEGOSm{p9tYB10XkB$Q&#0u~x~UMeE_lKdGe?E*_&Hmy7AybZW{ zT1q&OR?ZNLTT1fnZzyWH&8GqTg~QWS3E32b)>mb;LUS*I3c^9|P>vvU9Xzz#gQuZt zl`f!W(k_2o=3n0+R99X-iSA|fDyhFJRxKNAN>z*S%Xa|om5hgaR7RV!$3yBVpM88| z;I(u&*ZRsH8pHA^9);<tI^)F91i$srmz2&}sOXe!w-+qm6Z^KClg80I@?}x$u?Siv zI~AeiQ8@*e_j&Ar1!+cGh{+5;`!#H9ercNCnyh9iy$L)BxXLBJ;T<3IQ{efUTxL3A z9GqcY&X#4wtc0gVVpjNMZ3>&00j%QQa*5MH?Nk<Ok{qu+u6{4$`(HTVXN>R8^Y!?o zQO1@hv_Q$<#+~021cDH-$#RWoi!3IjA>1RyrfXGD4HaCCHaVolYItPvpIew%{HNr3 zh+nUu2`$Qa7SSRkD6e-GU%VeTuaFZi`?!*8%-;uu3T2P9Z&#aHZ4<V#*<){yLhrIX zwuYE<cyva5YjBV@Zqt!noU%0*cB)<6SH>{PBxk2<T6g>2&H5<pN9NpC735W~w48+6 z><>JWRF_XwE#wRVxac<{PKMg^`x-8#&w%&o=h^U1?1<AOf|bxvC7A)x_6G$Ym?11n z5n=`ZJ8qYihe)tMm9hY_8>Db?rFA-~nGhG0?nMcO%2Aa|dwkE*)o18nYYX)FRD0Ww z*IwVRMw%rqnWnW%#;6xiNFzCA+qcVPSjjR8sDnV;u<r3K2<%V7`oHkYu#>e}LefEw zqL%g+a~U~zgd#aoHGCYeOftWLS(mTtQHYRZR^>@1H?u0&TuKlFDUd~ElT*~*z?a7Y z`xHgx_?-BKKgf7(PArc7D$y8+vfpL2*0)jOY?|@vg~s6OsSHiuP~qY973_ElC$8Yd z3#=bK9_Pgy8L3&3Z(c(#74OnqocqT7MY*s*l8-Fv$91n_LI~rP-gG|nX!hm^De@Qf zi|4LNq|3IjU{Dp(q0yc%+psR*v75?N#+~=58#$U=E<LzeSXfV0j%+)<QdRjZl%vNd zJaem2Rh5%;_iat#m;L@B{PNx3tDTmRt$M2R6+}Vi5Gz*FoNL@AM?ch<LSwzndB$BT zdu>8{s>|~pS-Tdkt9`p-v8K-zDztg*X3b+6&M+RkQg!P|bZainYu_s@R?SOI;c1zg zQPoqjG}mUUPiw-_ljNxV{`$TKlMx(k4#3*Sswce9HD^98w1zP$aLKW@rTrrz#;~4K z6iUW!3lxk&Ae2Ijw&96EqDTxCRB?NElapwEk2w%&CK*P1Z0*8u%z5KQ=A!9Q_a6j) zU`@1~3S)zgt&ZnPs-~}YdS6&+$U(H}R;*;ah;Mx~$qUmyin?zzU!2B)&9XGpc~SIA zXM{K3O-H{%#r@a}<$Jr0`2(aDG@`$frjew3rgbA0MxCu3$3uRbh1{xG`RUO``9jQ{ z^Ap5;iYO9b=AwbVsV2x)M>y2iB>&kWWy9OnH-T^By$XSD_~&`FYI=k!TeQ4Ac*aO# z;W}3ni>m&4eG|RSxlR6(=Db^--lI)*itBMekfGl3HH9?d5x?_PT9&GcKa$ahC}X8G z_R9g}ifCPaJ&9Kr&P$AUg-987`F+dnc`BkW6ra@uwZxNAZ@V$#l;5cO$cHiH!-Si4 zGCm<8NQnbrYTk|3Hzk>|qStl#NbeU^NWIymZsQJ(;W?-RKvKwaXwYhTMN{WQBO|Q2 z$Ih`Kk)!ZjZ_QelSaxkv2{s9mK`s|2N4FXW(U8$qO}A|}qJOJ;zvM<W9Z--Bp6Ctf z>L4DOuLr{e3yj;vwaYoY#kZ?-c%^(Gug?l+k*H&Nq)3PQamB$Ebz;{gLF#V;c~0#P z+BaH`t`1G+l&(G{Tg`i<0#UjXubds4#AEOBe(H^uqbq~sh?@^)wj8}F^rzDEL))uU zdgQ$`LzAj`@i*Zt)V#z{N~ap_*9hs41%Jq$)Fyf7yx?t|I4&&p2B(+K3>IK2eKA@$ zX#E3*sYJif#o&uP7uuKF8#N2>0iJ5aeE)s?d&gURvtfDnU)N3boDF!+;qw>#yNrK6 z{$0qmwDjYhoTmafxA-HU4*AOe^4I>4`%ZOJ9+AtL+{hf0sZZ9kezIv7dHjvuEzMts zeJEF#&+KBC7UA8B6E*LmY~O;8w2vehV_UsH;O3hh>a>`E?(j2&<Ve;rUQv!Q@ros0 z>H8X6XRR5^_HJFf8f8@V0e~-Spd$)%#N$1@FZlc&H`skNruK30al4Oeq!S<Sm|cmX zrM?xIksR35>Ls<SmUb^!w%k$9lZxf&C|Ls*xgp9|$00yTK_E~(1OgtP0>FY15b(!G z$5IXhfyahgUo8x|tyvKikN4QxM(ha+40NO>LdF28o(%s03JM5*>8GLZ2Z^gm*rd+# zC5kV_cP9z2_CnlG2GrrLgOY!Go-?}2X*$0*JCg2wv8f;AV>_lX%0#>u_G<|_6fnfY zQ=OrJZMQ1qVOy&nVz>HpR*I9mCp%%cibuZO^Y5uPs}u|BEoUkcB*>z6L$oSKVmfv3 zB2k5~KI>oAZi?@V6zhn}f5bvX5vS@Tk&~Q_<|XSA{l?O6jn81)atd|cdouOsh6b=5 z;<#B-&XSY7sd?}I?J)tRiVzL2aiw9y;Iwm2XCmHC--m%F0@#N1C&dGY_2(j9=lJ~{ zQ&!Jm{WT>KSl>_Wuj3i+#)Er-Oh@4KD^q_n9u<E{Y0v$u7kWs6Ja}w@r*TENB#kPR zl#Q+;nZMZj$>tsXPr=6QCpP*1j_9#P$=@r?87sUcq0?8eJ14I&*JP~l-joqCP!2KY zaxwI3N|j*fXGefGBB~R6L05!lUJ#nMB23<|=xj<q3<S$JEw(!-OZ#H&pHQuvPBHsk ztD5>k&7ccH&pU45&AV5a<5qZGGQaIIzpI#Et;~;F;GN8Gd&>OmzLC=09e!qM&rdQZ zHxC+5oJ<8|sW+wIyh0Aw`ROJ6@dZY^_&@~Wp~CR21A_}ZXrnW^7iePy*Js2g?|BwO z(KAk;_3CXefp4zl^f1~#^}rcd+Nbm%l&|1&qg~GG=|}jz!t|{0o**;WD>LvhgZh*e z+M6;1Ud^RN^EIhESvN47Dwnt%vcf$Q+5SXdX4sn+Iz2JO*99A@24lgEgMs@QY47j3 z5WdBk){`lyw0_$~p5P_kP=8bM6(!x-uRJENM06V%JF9<|yKbRJFCVA4Y~VEnUg5FW z<i$jEGI546sU%ZC6kK6!?)C+;58}P4SrJ~7F*Ee72c_E;VJ!4Hsxh-WIg<EdOc3;@ zl4jGz_B?{8sfMQ0&=63sY!y(uJC>)cr1P%wh-yGJPb!D*;pW&sb}Xc!l>HW-m3?-j zCoObQKsI7eru-6uYBl`F>oH&82A&Qqkw4S98pwI5(PMp?_&n&dZsfS{Pde`VC+qh+ zq_OV99NcsFpP3jE`(2Vzew*ZhM>)|f3YmBdVJ_y@O_=FK({zyc(m}nE!Dw~1FE)8# z3wl^JmLG1$f?0N1bo@ZvJHS2t)Iq-S?iHMO{&{+EMs!(jgMJkhq2zc^=yZfa(i+z= z8shS)B^9lPl20C#_d0{8@w7ByuTx-+z~mnOSf`99{m=u6pX2$NLg9seNq)OhCiPMy z25gXJI@^WwQ<!Said@N1-ZodPMHS+<$Te?p$$<HqqsK>j;<YL}h7Ar`9%U(3^v#_3 z)P;Y|AHya%BEGINWA=_GS8x95Db!;jv+&_JR0Z{7VA-`vE+2lAT3Q5^6?GndU8RG| zFY0_!8aVuhV>dU7v5@44_sZZ39WP-jna+^&vEh`3pCcs`SyG9?o7Cyp!E?ov_Dp-J zL%@FO7UPlb^ye(cOOxc=SSHXwo>Ex=4ZcuKZ1Mx07kOqqmWk}#ejQU_Hp~miUWkRG zj2=8CS)p^Kz;cCDVJrhK!Eb^aYO4KX#Ve50=jIi8R9)2YXg|ubMXPfKVwDMG5ESM> zly_e+GnPd)yYSW=zs3g4C}rj>SxQ2rZSX(A(|rZp$<~XkZFp@e2$`X%-mC?valJp| zN&5(KhoDQi8+37C`^%;7E4%+Zc0Vqu(6}D;DZ_|Oo&j<2W){lz6CUjNol3&*QkLcZ zu@3W6bE`S2Xv;6sXpXaWTZ^_BkCQ;UXqO~tr(lND+|$>q#`dC(I@p47x@uR8zQL;G zN}5XR59n@CVw_CfKG5>df|lC^OM@<rmJf=@jDb3eI=iuX0RKaL9NyDqouM}Lmb6st z9hu)=C4z?6WcHo~JObCw<>c2v>0pxXAl3dO5*Ud<@0D!}cAINlI5p_;o6*(T6n$ht zWa~z2JUumP_xgY=j{-5-w%nFgGAm@iUK(AUYd_DK3G$cOyR{;|Tm8|Rl-+uY{W80? zJ7ueWD{IJBy_TOTTUCA4`&Fe~MqD0p@ZBt3AAVZqk`|g9-uy?lEUs9;^`oU9E0FK9 zJOKYtwZ|2CLY^Xnxhy}0fOc71Psc4e&ja-kvzmsQ>mNYvuVWa|p084Au8lv|E`AOj z5#vEJEZV!Y_q&yHPs6upua;r`0$=5Drju{;010MNh&xT``9M+|^$rw!n$$;Inz~SC z?)vakdS(k#X4bhRKC?@)g{ztUcKFN=oTg_+^Ukg$c~p3jCo}vwbI1%2@H2IWar)?n zuRoeD=ju2X>}d?Yo&NMjb_&juY@>4E;?C%DXQI?!x-RwiFFz4J<N>F=HEwns#(uU? ztZ$C_M8QPN>dsZs?AuWWBeS!k?p5lX#a%hk`GhA>EIC)H4gE$}dbB!SUS+A$?%O0> z?(h-uGemwUja<BUqZFT<WET*8^#KPb>egHX08f3en4P3pQn=IIKh^~qi*pCzRx2TI z*+4~5Tu~~_oAaC{Uv`DYtF0gI;-z#RP)MG9H>K`ir*kN*1a82Kie@Afl?-OGmn|$U zv9j<pp2Pc2?L54%Hm(TSKn9{8cCb@pjgZd%GqaE?c!^q%uH(|Ev%IHC!=yagWi7q; zExf=t8LGxx|JW=o*^yqJ@D7D&@%6*`=>f^`p-H))T@vgg&d>s=GAC5n1m(iRq*j!K z@ZBlVHBmA}l)HF7pF18q9;hfLwIZavBVZq=Dm$v>USQpLzg}*hEy*Fq0e)a^$X5$} zrP*{_cC`3PGx!_)4Yv{5xMoJwd8H~p@j~To**%rFsbIWld3s`r86T60d`DV<e0l^G z%q}9&Y2Qq{SlsY3u57jb<J9`^uwDh_SpOT5GdNrOqEOlanWYqimkOg|Tb~Q;Vw0Ef zR|G;-I$F#XUqmjxh`i>rrQzPmtO(bqOD-Wnwn9m9u7ow*L<Mq5?xtK$L5p8xq@YC{ z{+um(={M;RTqQ+hN7qnZHM&~%%#<V${niElu7N1$e`cm2?<O`lx#@(OUc6mRc_LFb zz<|CV%ao1v!sru9ZsZJmV@$E1de(kQ;)|mz-5t_g|CwXNwMAUviy)w)FJQv8B>;G> zqkpVO-GYk8#lv#}LAEzj;o_;%(k7t@)&?4*ot#8FI-N#hZ2BkdCsS3Y0Ph>=DZtbF zNy%q!do+MC0mS2u>_nh!4=ii542rmoL#YH6vgOwCNW?H%i`k)UB8mU@n77mhju40! zm;rG#3)QjLo{CzbKDOrmxR6-uv4^lX+$mqt-$|$c&<~I4?0vMi=48S&C43F|m}U5V zB`t-^(Z!L#@7P#m?|x1HHJtq;rvo#v<&r6oD0@cZg<r9Lz<8{=iy{N}0q}&GDNa99 z+&oDpG_r?LnkSzN$idcGCdtf)aw|RF18$KVKJ*9XigdA1xX6EIN^uLfAGFO51m(&~ zLfY71_I$1Esbr?uN2|#All_5*<PqPHN9>~UocE-Fl`pXPs>L4b)pDvvVTH$n8=B}3 zJR@(NqTfn9K0r-Nk`<lB<G+^2v0me54SD<lOCIn0wHn80mFBNCv~_w!a*7&#11fT5 z;smHGR4GTi7pm+$D&F|H|B#m5m?jU=PgwU8Pxh};i>biWqZ3sxHXtaOiQ#Rhif>DM z^8TwAdaUzum1$qH4|WD0ttYbE7m$>W#6In`rk@8c0XLjt1Bp<cWEk;}b>m_U2nxy4 zQ^8dsOQ^F~T+i1AE2tmrUBa&f@+J0{sB~ntBlT0qeyP1_wEsddd$SM~e%#MT&pM?_ z@J$6S#DiVc2|~u_VpeNfw~7kCsf9o0$AACNtsJ4@Yl}B6SZD4eF9`O*cs`mP^$k|p zQ$)=7%e#j{?m(eHaTcLxR9e|(-2+mO49@%21O>~6c<(o8DxMNirRlA%mtZb)3s*hV zooBSIV;~)`F?o1wQS8z5CleK}g^5jS6p>|t^{ekI@~dvP%=!~mxYB}IPydn6z7v5? zOUJh-(@t<qwBrW8*pyh9k74ex{^edxiEm-j<}Nw;_8t!tb+%?Ef*<F7OES~ca55C( z&Y%#fI59W#(4lUpy0!}+wp^2An1{MO!E-t&11m#TOQX{A2T!<OtCzI+)9<T|+V=8I zc^$Xv2V<*TmMe!utgPiT&YqSTzfVtlU|l+`r3XD=)Gq5?hQUVzABVbKMw={I2dRKG zWTMrJZ=WHSW3knVw}D4ztb^7OBR(SL`V6;Pj-)wB)upl4)3itk3XBOcK^1^rV9mKl zfjC^_iXj<>atQ?3n7%HHbgE$gL^5x4sM@N&MN(8a1;B|$N~!dO*_*^h*5My0Hb1%d zzvTBW>oSlffdeVb<cyD<LxfrI-ImLv-yYEXKxsfK<{b4$*WRM+NR(r-=~BXv(xs@W z@=cX9Rn@R4nKph)WK66k*R08n-QEJAA~!m{H92d?O4XO%$bB*zn{dLfpm<pw*Ah>A zO*ffV10PVx?S&sPZX5F*=s?sUA>3s=*lNerE|-!~Zdy*Wu3~AVFo<pt{1#<_V(ra? z=4#nFSx-sZeWiZg^exh~-jJbqR=&te9$f2=-r_NLsfb<P-AUdp)&9G{u;@_9YS-Fn zW)HsmY28?EOm_xKq!IURs?(GZ=5f^+F1@Q=O|O~rN%fAFJI6iLgeCh=^6z5c_v6uL zpysyc-&MkV_>D6n%@mc5EV9hi?&tSI@S?uh*)Nz|p0mzb#DCNFm^)hEDB{1a-i+4Q z<qL+4t}Y8}(m4kIeSJ?l|8>2a(;gZy+OlBNQRj(Kce^MDQD?g-r(|O_-6dx648ket zAQHkyYqa0S9W3{lB_&Br9o|cKbU|i4sPhOf$x5ix&!jy`D+%?JzRgZq_DvP`8d~AE zipMHc@4E(ZNu}2skWF%oAqZi1&xjPyhyzQJepQYx=29<->?nHW^%;^s);jO?_l0kW z&_<YI8Ymz7YDvh$@KOrJ#NVO2v4Z3(^!hI84o5Z>ansH0%VsgFvSwMEi2Jg5xl7f1 zhMX2{)x9qVd8Btdw&ALSnby0idnd_}NepVVd1;d}@<#g)XzhAuVBi4wdFj0g{50B5 zR+Bs+7^$?do@!+U=&8=(4N;@@hf9Q^NVVI#4>em{)3!HQjgMfNWQj(71xK=b=rcJo zw;^xk_I{5>S+;0hzk~)1ZW3JYsp^+5ebxt@8!#uxB^Hn}yP*SioLo-0H$9?mgeC;! zz7@<;OCd3MSBf!@Cad~!=&&QSwr2f@G)7@UL5BD!l1o{fe1ELGzuUS|rU@2=&a<(_ zh<*U&w*#f$;;Y{}Hb(U-vac)w<&;5{9_I`h{>VP|=%+sgp?(#ABD*I|SZe}Hw#K(m zzqzaR?V(#}*N`o=O>LpxobVBkaocG$Qf}2k2n2fA9gH?<SGG#kK?Q3d6z<FfL{vSl zI)GMd-FyO1OD<yK`0rE(VA)+%Jt8KUs^qIZq)w5fl{=odFbpj)Nx>DGB6h=+mBpA4 zarG6E&+|3e3z8N$SgJPY0p05=XY5j+WvH%TWS&Sm+~E}BfWli{;VKu|4)}UBujvP7 zXuv$yM~(D>qS%A7(t1;z#4`L$ekRsGQ?Gw4l%Gf@eTtmMni!hoxBU8U9GskEu(vF> zh^V`c1y73>pQvGOokt)XwpmhqY!A8Or6v*bFNS>9d!}`n#{>dygwWvx)D;;gj-L<G zL;I<mEjxnD@F`_#BMTq(;2IxxDI0>j^3rJa7@}FCem1Tvn*Bp_9L-N?En#G3&6ylk z7Km1h+iZ(G!7DeuA|2GY$5#z3kCeO3E`@@MJ`*XTLe6nQ?^4Fo=dJMmGboE!;eP%N zAlul!#b`T|Z6CckX1)lgIeX6+Akv)*!>k-fr%jsiTG`aube{}U5Q_Xw&<qkC^=A^! zpweo)ReI^Us^GgDDPBrEUd~fgp)}eg^(BE0t!tgaKaKWR1^E$itc>tLh7sP)&+uCD zdp#>Rc3S_7aHTfqIVqGVxtmuw6gDJe2Gb9H8Zeh-n;CGA1YONwD@L*j!lZ8Qh}f31 zbQ|L8a+vO!iI*Ia+?gYvKA53;j58KBlrdtSeA&KH=jj08X_1n+onfctkx3}RuTn<R zkuc_qBhHIQwtvsiW|l`T(&h>XkIom4b1LMnw;uURg83YSuh=PY=C~r1Qz}0OFjtaV zT3M5{x4irq+jrb%*-DYn!M>|}TFRLGT^SmpI~S2bCStu?9x05+$iQL4UB@Ex2#;Jl z4w)t{b0lP%RV0!;`xdv^6DL~(=I+*ahLSA;$Wl0eoNPIWzZ$?N(H-?uqX04Jb8I!x zuRg=u;97YxrM99gJ<-x1MvH%-&+C{IS>2(0$e2yglN_mNaNW2cI><IU{M^}d+>u&0 z42tE6q^qS8iXIPdknc*ZVt=X4)rg-c{C@hH^US3lj6KoPC+z;jvg2;>#TL0m@sT4Y zA2@mNrni-WWSDhO>DwwR4faY%%;NAZ6iUnj!S5j;3z=?4cx!A;Q6rKaJ*fCNV{~i{ zrYZchJ9}w4XM!8dmIuH%RYWnh{+%dKe_?MnXj$O=yX~cxAWw}{!(~;_au*`3F#r1{ za1LoT4iH6e<Zzk!9HDbd`~8jL6s{XAxr%zy#q4T3*y9p8w-YVi7@ZBC9YAuk?TzLP z?`uYzI#E1EThc|>70-{zU%%qhT(=GS9IbPDx2-%QGp#cg^KQFwO5nPk^E`g*m(^k- z7cQkr$XuV%sIsyC;D6tb%il)ZJv0Jg>9iKWEs9=lJ@x?KjC;EK#$%8BK=CJYUxH~U z-CLz;Iy0v3wZFV(5k!VC$)F!%fR`Ss5$<G1i2&-o%GK;6w$cn8=q(gUzPc6!&~+wH z56nYm3LMx*szph!rVUJfYw>qgR7jFKRf!oT;!@jkRIE#C^uU|=xTP*BF1%>4(Ywq| z{dpmt62#*2^;EeSM9lgcdtdmj5ZT#rA}cyS$P3jL0Z$C_tdsMiMD+qAdOwerMaCo# z2Krr5$|ufqThE|^u@?b!+ef@y6f5zrJu_PCp_*#;MMD_c2{lA^c)d;U&=n*de&^_i z>`qJ&(2U5Gk@W2`D$g@u-ig!4c-P@A8CJDe3kWsEo*P_Mw6|o^+Own7Fgd*9ZnN~F zRIxfzGFy6|MDNX%G#k3{=l&2bkdXbf&O>3YAEpRf3a_uv&_vJ^m0ktCVxh5#)xudO z@`Aa$r$&p*HCkM*(dyPMq^C6fZlw`{HqXC{T7;~$KZ3}Vk|<dTLxbjS<gdtTLXO-G z)`L<5*ie#g>Tz;a8u0sr3Opj~C$?Uk9!b0;xPa2w?DF0MKD3R*heZgpaeP=3#|QaB zm148&zG+*Y8-NdohVTYeCF{SLY8)PEcQ8O<3L-~JObT9q1&R@xg9gP7{dC&wN(-H2 z&dG@{d0btX!--{c&XCoJphe8dPJPha`lJ9i;?79G^Mmj^XPCQzXEiP>VM@{2A843F z>yMdp+}0`BP7!7o4HC~11fSYF*Pds7Ogz}Mqh|lzW_HO?Yz18)&mo1aiw2{$8QwXr z=7Q+AGlb?A|0Y^`mwD2VH>Q-sJ0xs&j;rY{hQK0=H(0R@wKfS%8NobQvHxHELl_4< zMDdQrD-`c27XEah%{$EF@Qu==3b8(uZ^S8(zcH}wy#|kY#99#1*x-b3IIxG{?J;*5 zCse!mm&3mT{>|WDE&mqtFTlSwk<IH_Ps{&4CKPa4=WCPmkr)zm!%wIO{;{6Mv2r*u z{)&CYCJNHWPUD0M`lz6f3i_y^j|%#zppOdrs8|#Et!m;U^75mtO#2x5HVT$69emm) z`!;(#h%r<wKf&}1whX;k?=+{3yyzlT^~kGkBDx7j7s>ypa0h#|0yD)Q-6~z_R>{PP zy<`V_9)Wy|XkCcqeq?7gFpLbCh>@ND&M=jlWZemzhA6-XkE;N$9MIhAP;k0=mjIyL z^1%cY%?_OzCp}5Iv_d~0*KdGSPt~A|BU<a4HehBOBWC$egVHw#(?dTI?yzXUtUJi& zac2nEv(m&6A?mr%7s)K|Jv`dTBZoDsh^uhBttXPqX_D|@+I43{iZkM*B&itG+3yOQ zQ6h|99|l8}+arhpJD%?gzj+2&XU_d8;w^L^r={A~{%FVrdj&#iSSsACpU+wg`NPx` z%Wp4!e5!cbE)YhANFTZY8QJdMi2jLp#BPA8eG6aft*wXD6p*KvtG3O#Kfx_d{1G1` z6p{P%!@{o%6_ts<q_&C>uW`}p4EtjEn5U_ZfjneeFM<mr>M=c?;F&#@KUGs0+0Dg? zZk9!6sDAX=h<|clipkJAfui=J-Qky72HL2BM}3m>3Pay=mzIAie0z;K9vO8J%8c=F zf9p+3qvQP$rMPW{Zsn=wO%k+^Ma;Z1J0TckMQ$GK%j%guC@_u>P_gMP;Vr1Y^iv(~ zc7~7T-FPpELkFVw0v1htZ3wKmdm3vY|4#kgRL>)iP4&cSm%SempNLL}Sr#1%_qbFl z##DiQyd1ZtkEXwkCb5GrB7P<0^aIy&Dy=cP()Dy6gGL^~9D*TZWI~wd4{Ab->H(G5 zhkU+#S*nD7jaChWKTtAPwBQg0)1&XkVzY$c%8!k3wxzvC|B>q98TR}q_!AP(=Yfn% zd;fy%KM4VzuUEbxqWg3=I^&~k$KB6c%37dp1=ZLJ#7=M*^SbK)(Li9%UFR`_>$2HM zxlp}mV`jn}w~~#@))`_s{a~lS2+QeB3A>9}Pvx)-j9!VyYS-GK_p*WYWT#_}Hg}s_ zw4Gz_I(BaGFLcO0T|lSSnAFacs62?M%oagZp2?9I7!AudMZ6Oyh!Q?`9R@PND-myO zN}*xcQ=Z4Aw4QRYhVqfGKh&P;DKF5!l=#zAK3)IPQet_b{-uS*@?!l<n^?=0!LX-X zTUyIY<=)ovvb4wv5`V7q2Z*@8VObfzpz(Idy-c6j)JC&(ov0(2spmUek7)ZzD=nDr zb<i$vjjQQo?0Uy`n!DC7E3+O}paA(a;i<d}&GIf4dOXO^E@Y1#!<6ibxYrq*ck)6{ z<(+vl9<wGp;=B`!y7(J`SG<Aw*%1^X*K)Nzk%f3MVJ6647j>><V68_K3NOT>*PIir zaYdbX6NMYSDjmbZb7IrN()a$co%nF2_lS$06Wvz+&_%zDh=SO922@~982~v(m|}Am zU6UpiL!w|ZGQG%T#EWD0L7(TGnXSMp{BJZrV)bQKegv6KJM_*JYxz%Pri3WfJ6n&c zJ$ND+g%{9!(O$pLioH#E)0wSDWj6M8zb`}*3u`i_oIc4wu|$M;&BKBVvC_c^Y^guV zdbjnf4pa4(xINM;g$J?@qcH66>bK$yTT1jrZg83NJ;C(y<&j!Xf}hnx+>YYzwf1jM zPD}zr2vV@8ot&Q`^Jw%j@-2|}zSEPFYt%D)IX<)Rs(m87Zt$t89_x9whTa+R2|}sI z#GMgVklW@q_I<uA%m|+Ltk%2ZlToDHWmbD?F=bNpRL$k?SLx?x{JWQbPw>yC-y$oT zABAtlcRSN>eY`C`$>2GHCG+)CWkV|=B`Cl+9W8vLiQ_uUac2@vAzedq)&9En!LqUi zo}y>rQiuV6!Roa1u}Jd+-j73*^=sEKiK0JQrym%XCWvI#c)S&!;E9S0syoj3om3Z( z9d`g+9A={{TGwH1W>o%Y)g$Do-YCCM*J_!VFZQ!QB^BhMeqL58w9#*!nV6Z@wxV@E zFWOs=!UiT@f{j{FPa98^5mge*iWc{i)D<zC9~pvZOMf0O)*<7%KBJ-0TC??i82dxC z7k@E{tGVwF!Burbg*`az8zX`%-hEHMQT33y^f7|9mKp8iAQ?r6`o=4b@)Nc%*-x7v zhz~2-=CAEn$EWJQ<3nQ`tnb@*z@@DSAAh>W`tG}WEr@mN`%RL+`2z*w;QC#Y-iD%_ zWGw6UCtO>aP}{E8r*Br2L@6S66RA-|65Od>$7Qa}YoAU}OR#lEdBl}!4^-!mgLyq= z$C0gGIG|uMBvZWZ5d0J6AiP%D{dQURFJ|CkSfw=`Q$KR^tk<nkA8)N1e<C=DCTULy zpo%OeNRbe5Wr*Y)m(EhJ=pP+Q+Vv=P;xX;qM^J*c4Fsp#);gW=Wb#A5l=N-M#3#lI zF<f!ZQteONb(A?^&#4sYn*1dDH_J$-uf_ut=Ar8|tirHVzHtw+f!gDZ%S!^-k@u;| zX=B8Q`~QE|Yii%8tk-A3H+4u#@f(gt$jA#43;r;te8OwpX+eAi7k>R80^iSE|9ABc zt9JTRO}q+j0?#^^AF*5ZLFh_^oz|Q6_gT~c2_MS{W`>VBLWNd_*h!$!H)SeHC>O_a zl6$*xPp4e&5G(1E8^u&wxdjaC=p=R^71M^{FVuJzD{cLsZZ$aZ_?;V-$Z6&LndkCZ ztq86*NuD4id7`rE(4;2F33?37+#;SU3V(&)Iyu?mBHbcH9vXO2vb|Z-9wM77fhZTi z6J4}D6roEuF5n1TB9YG(U$yaB&VVN7qt;g;uij7oz~Vkg%2(DTNs5E#MdVEN?P0H+ z=kBTY?SC3gkh%$b86K1+-mq?7^BcYUss?=5XJA`vdWZ9XK(1@6z(-CoIEBf`_7Vlz zWz{0V3tET>!}^8~kj0I12R&5-5Pb54Rvnav(gTC<a&()9*2EhMu8?r^=7ToZ7Y|yn zywTd$l~|%GymP`-=D9e7zF%{A;h7f*K&OZ(9N&4TDS#^OCxL9Cx0iQFIU2R?<Nj|A zFL8R-xt8{RTNDq*>kr)fKJYth_2+|MrwzaFYEQ#R`1u1f`e|?Ps?XP6TBlx**~f2B zt?zB0v%UEGegw2eU0>1s#kJM-dhYnHVZ&GSkzLX0t#h-{?DM6dEt#(fSj7}1Dn!al zHhoN7;<qyYV@q<I6`t50a}F`kSpKd&d$-_7@twGlPAggK44p`*m{}pFWksJ^vI*v; zu){Z%eG&nP!P`owjhpfz{Xsw2g60cd?>fz`UHfy#??EN4MFlK(na;aWl*X6b;0n5= zxJ~FEdfO&i;C&Up)GRSL$Vm(kae5D7mW-}8vdDGzmZFy>0I9f@fu4PLiQgHTEF-N+ z9VwAKE~>xDa9>TBQ<0(Y=Di%Gx*%nrQU2Yx#SBu?5eDd|8wp@rVf-7_O5g6}G|flG zV&}6hXVr5)fy-BK8|@a?d3@Qnj|@*{!AbQV<Ld1zj0?L~Wnn-m!oH1sJNyKnz+Z^d z^|YHuuVSNQOhKk9Kw}`03Yn^?j}>kLvtn6h*0Rw${~Y5oE}XDtO1)>*X^iJ*;022D ziA*?VsH!ARkz`pxv(X8RuR6QIx!iPqC&J01NbYyyD=X`XPblQ}Q6AJr1j3ce;KE8G zkojn1$jc?movR9oIWvoY!qVhvdyXj4tK2M5qY@<K=+Z>BE^k+OmpgCVGu%c(dz=>* z3qvH-Z;tuDti20-RMpisp1=eG49oxt28j?g3JSGgK!^bwAPG?kOb8@cx!F>BOsS&I z2v~^VBq8H*5L>*pwuS23($-dNsRB|A7YTUbE@0tPw6yMYVv9;4C@=GWp0&@JIg<;u z|L+@qWX_zk&%Ug^_S$Q&Yg+@y%pgtctd!J@Qm?vjrYkI@ybpAKoyX)zH*i@=Ngbnk z&G*y0I1hLn69t$>S!LnOKjV3l9={ewb-hzKdQzq`*w(7P|LU5Qa~vBDgm}5LTn~<f z9f3Lg84T&l@a!n4A#GLqT>X~mdOXxAH2iV%GbARAzy;TY&@XU$JYLJ2<+^_lk+LWo zQ(Slk^9h&75KLg|5iUUJu#NBn-wc2dfN{UR?9M*k*Rp2x@xo$dlsVm1IS5W}I1Pdg z^<P<;-%#Y@D0R*%abG~4T$tt2LnvgyvNE5;nDS5Xw~`8)^kkYlRFnZ@6&MYA-?-Kb zO-ZOcEmV{ls>%w@Ld5CyJCS<Jv;2$w{O*iW3s9=96^{OD+ho!OSo@5Y(|lTt;^29y z$j0iiNOLE+9-IMf@xs(?C*gSwFb>5)zHUy)F#CfHqyj{uU51^c{wWyd0*YcCa1neC z+5G{Sfno>^F3v25bRi!#=S^_kzYZdZecD?<y#Z0xYyuYT+s&u4`H9lJIlLAPk6`?P z|FZ4ER5S+%CD;8MXWbbEa%1^`8f90=T8QVha?B^>Em$&e++=d1W&;P=Wxgq}N>D?4 z{{#E5H(~yr%pT4Qo5(Q54h@ek^TFI@U9#{}o`P-QF<O+56-{ADpBi%yt!G`bwF*Z9 zcrc!VW%lpnX1Hue*O@CQh=MUfYukTw<#g0(J~ab>^L7UY0L}Y_SF#=TAezC^>^stq zEy=mU^)qmM{aBs2*=>5EgHNJ2!>@6~A#KWyXf}+<z+lxKzS&MhhDL4k6{FjR?|S&x zt;ZjA&%TxhyBHs_yt%`Y4prCr3`RTxOT^Gl#wr+$J41Giec&R%kFX$E=;loDKxUq~ z(1i@<boU-=@T*+SXy6%xi>kj)vm7Otf;7uTZeMhS8)b~)NVpgoV%`Z)S37QcVD$1Y zoyql>+R$f6UPCX_GfG!nOb@No^1X6DyQ0JEpf}NlK6SNeC5-itFc<plgEVC#We7UD zPyKNi;M!IQ;LYy~HwI-PdtlRT8y_2Qzcaxj6!4PGIhL6*aC2f_Ku6aXF)!l_grcMC zU*2bRoh+=wi=;x_NW?Wx{px0_H6RjQ+=(=4<_@SqG`EL$_L)a;tMQNBrC*%CX=%YG z#Ls}&2u>J?ZR+o8elzv<j_>D0BXItX=0wA@VD%nwQ5u95g^VcpmkfsW6#Vh0R3?>| zs`NjCnSy7>ARK(ho5Rfb@NQ{$c$`OLON-%U+QYN38hdlk=zT6#@D40Opv!mFL>GM& zo^}d?%&|9Nl&~(V?f}XJcV|yEgSb;hQGFU0plC=PjqtRKM}QN^Id1a;h_4v+_cgQ~ zB`hYDD(<JPO}IFYV7ovVxO)F+Mgkt`Q@@>zm7^OD3_^jvHfqFWEE`W~42ZX}iKtK$ zMSc=FfE6|@TY4I?KgDpRV0+D3gbCeSTG>&({{XSwYaU~lTFX;r>x$9pK)coc+T!`L zay3prq?Nabf?s2stvDWQeKzG+yw2x@&SM7zULC52#MUcA>=?UStk);*wbrW;c5Gqg z=8f2U&yAf5=z0TriD}Ts+6zvmRqAqJZK2eK1vg77BfaQoKIEz#5-zN_PB+jEW8d`j zENoJJKE~cT8EhC*+xajT*D&TomI)&w6e$(b&xjRyW?{WqvKt{xLM3M+cP`hY;_Ha8 zX-HC5S^6z|^4dLm{hS5+EPV+hwANmACPy%)w_wZ!{D4}_Dj=$=Cdl{-cEQ9Ji{PGe zWAp_$!_2u?qXz9uu2NUc20iUQ<Ynw1M=L7IRfoITklRs@^^nV_T>aJ1P8&L(ts_u= zrC0#E;_sn@>Tked^RzWWSPIqq)JIdS1ebakJ|VhTlnlw#_;m>Bgal#!5qz)($r;`5 zniP_AqQ#o5`@T(bxOHlH?YvRol^$$%A=w_6Sufnd{IbZhrOio#?6RF=<BaoM=nwb< zoGfCb`(`~V_+Zq30m9yr{+({onJ?#Cox$E;W?u0Oya$n2P(plP4*tSdq3(FpqU11) zD)>CL2$<5C1Avvz{sa@^nsq1M%&E^U_}t}rvOer81P6tr5IK&gHu1(c*H4KXAdIEJ z1LiM3&$ZNEk1w?7@vU}`E$FE_Y$Y}Io8khRLU>VFTuI~c!7cX-@vlsU$e;kB<-zu; zx^I0FHN_wgJ0)T*xRKm`t~rM4s=!sjFJP)|x?YWOCZSaYU>Ph<fvw=7v3eb377}sY zins167i<l_88zLn>Nv^ft;L|`8-j~nN&es4l78Y7_!%%SvF@C|tNreDMt1@uBLmuO zbJetV+U&$O1G6{^+0bx2%9Bv#0nE5?Inyv!y$x+T2`)!Xd$SdPb5&_O{7sjmLav2d z7kDf$27r8_C-|iX&lD`Nh^owgAsn+nIG0=pvQ_0tAexb@fE^%Zr7q+~R$oWAfMJM7 z=3I<M>bXQlXjCP~EsPNB=i-EKAGEoTg44Ou;FnL8ZM7L8PtL(9YV{1OTQhf*s})OP zo1y=sa&-(pWxEf&3%c{ggLnw;J(Zx}<zx{Y^6+9%)!#^#-4`rHiiPv-_GibR6Z+$F z_UGIW68ck|(4Wfx+x`gtBSmc*t%pkBC66?seu)d6iSK-p6Hm{A>}>uS4ko!945fu# zf$Im5G)?m>l+<|_3BOWWp}zAQ@GIEW2hmEE+(L9D;>`n(udw3N!`~d6Wi&9rV%c5K zSPQC{i=s>JeJ)Gyj>G#notD^B{RApvYGP0I3c*jbp5>cj<tO&k)bTMQjri!vobjwA zF!ZUe|L1(PvTt;RAHI^XkwggOX!;^v<J<|~<UnS;2NFC)J^L<_712heZzQ)e6?@mB zTN*k4I5m=#?SkJAJ*7ic-cV6mq)&^)$FCun8aGx%ng-Kx3kb29&poymBv|<BhB(lf zdW%g(Scfch8Trti`W&%meB+R2c_@RjD3?Z{cJM9LTs8`;3k@XiFtWKGCgP9kzoV`5 zgoCSfplrN~p8D+TQ}>SM76?&@qsq6oCsYZ1E`{8y+*~j1pAGag=Ah;12$GRf)g45F zo3!4yY$l6bKNT!f%GHZ`$Q1;(-?>eTU%-xo0s)+d<C~k_F9cuRn0uPV`Hbvd)4fxm zroMlDjLWRL7id7E3heTcVj-l)vdgBUKP8SrgAtp?t#03r*AQPp#1O4@Nu#Z9Ft&Ir zE$smPu;wf*Ui>p_&Mxi}w+vp9kNJ@3MqYHltB=XX{0#UJ%*f7CE?3-D+mU6VbsMi8 z5I6*1KZW`_1nvmFz6cjd<_HEg^Jl@W;RtZkXDlJq)3bL;oUeuzQV8WLk>X+ZauDyw z4ZH@b)o~AE*>6B$`%SfH1S55UwY6-PEJ~%nFuzWeqioeY#G_D!wRP-M=PjEq9SKXb zKA!4ob`qk^BW0>s8zkUBy;x4hyZOTIyuJS0u+-b|EZMzZPyGZ^QEe)oZ=+89RPYO3 z%97T$2HYdob1lYg{r<PCR`#jgJiu`Dkn&jgOyR*sVzl`eFrQZ>;B@XJ3#Y9;Z27|y z_%M(`l!m(a*XJk(5&y>D0tk^CaPOLtIs-ENMJ|A{TooNbRg1a-CWx}Lc&eA7sJdk; z_EeVe=f*ayMb?J(i&yOpVqV+Fq$l<X*Z}Xl<pS~<z;7_S^vhAQknwY1o8|`P`c?A8 z)}YV}5sxJhAHDuyKS9aZXJa)>KoxSz>{)l%$7S<~O;GD}?h&<)8ton?%v>-=D+!o* z5PYy#Pc$qQ@wy;f3w(o|8>i+>V4F!fj+)7;K$|_)bQ_26^~k3E2cYbD!;MThNEQHD zf2&p&>sGiENw~a)sTxN?l3|QiWl^5aph*%Y!?I9_Yu$6L_aXDOv1p7wCEir7GOZyH zZh$~gq)qv8#O-aIjFCe%c_OD9k>aGVjdCs58>}Z&)$05>bg4}P<ME+@vF$NFiQ_w; z0Fp6Lr43KeODnp8SykLnR1Cl&hmeqKcq^FrWrgkx^r%D<RrPGL#AAp|!S(lnx9Bk> z9R=ER1IGuKMqZy<rH3O}HOa2I?Ir#1x21m;W*pTdC9Y_kS9TFD<HR+`PIK25>@-}D zT#V;ocJk_IEJ$G619Nq@9Lbzxx|Z9VL#p}m{yr?>sou>oc8Z1$<9BE|?=~<oR?^yf z#4<pKdqhX<#1#&Tlykac-sYA~fn^S%_I}zF4N0@Pvr-@SIaBq7-OJ$~vMMHt>EN$g z%TtTC*6fu3Jb!HFA8-(TK5K%^!&A46-LmVe+Cj;+wW(lBOfD^p$}@FY5}8rh{>k2N z%vk~q?|3IMpTq(=e<y+u39TSFpyIGsY~cl?KZLQy^#7Tp{b`Ww$r)@l83$+t(ujwh zA%fH#e7N(*%w|M^9A_>U_#zn6#^Jm%EYFv^bYSa2864D<=*ujv=0}^@)g2q>;1%pb z_^Z}!j<X0Y*E4ke7_?Z81Q%x~!4M-b$h_4JN4YD_Wx9R;WqHM^OTjO>vCZV{8N=pq z#?=ZL)CYW)_{k8Yl?ETmPC{lZ36;C~Yk;nGXnBVHSo7!jp#^j=)jV3R<`=YcYALg< z+z3xOwTPFzImL|xH0nX@SO9$s-3H;O`-6DCknTaW=c!(cPOw+bU6Wjv9JJ8YE0~0{ zRagJLCEis_e!P8rJ3aliWwsWdd5G=NPYkfuf?#(}9dxGdJohU9mGtx9pe?Cvl-dpW z7^euNFVV45qdE4wAEGXCVAjVTpOa@4n(V6MC@n4^Hm;%ZDe#_0?N_uO*FVO!Gp+-c zJy(2O7}Vrc#Pei435yNZ#<})ku9vkp)~>hqM*sEYYR^6K(^9{3b@{zQdT?Ut0U|nD z_C{E@-ys%mcUWc(_Hgz7-*T{`NPx4H)+I0#!v%FUjq#5`f0J$B2GQ4vzH+C#Jk?JF z67i*G=GfLsljs)>+a)TxVn*Du*+|HQw;QClR`3h6EETD+`f<;;7N@@lr?!hKz<h$C z`l%_g{J;?8V3O}mMU`;L_t#QCT;f*uAX#zVML+1e1Tvv%yP&bf>FGd!TNv5z48l4Q z2$*l2m+5P1z^x5ky_N^Awz#yb5_{UoEau4CVCT-me2#llr}Bn;8Fh;oWC=SK+GpRl zmou#WfOtOEU9-T<L$iV7Uiwu3R4+CqiHFJ<4x|nC1oC~%6aqR7SVjmx>b<#V;L7TQ z{$7vzl5Z|e4x|U`JHVW``e5Kx&K}F2XXcK6xD4(|#?g{S2X<u|9@vgs^w?2CuMe1< z1joDpQCSlAs?R*tpQ7nf_0q!6W#q>gSG8QNv3~AG@Hu8Yt$quoc$(dTZ}anTdGfqf zk9I0zE<p1<vOY}a@6Hn>H{kj3gbp2djRD<%c;QlLYIGDgAJ4H+u`~M6cbTv~txRn{ z3XSnj_byk?&B!y*5neSo%tOwuZ--qYcNKI@PFl;}mT9FoC<m$lTZMynsIRru5MwAI zQe2EPwDxdWBk>)4?yd+HY3mb&h7Y%J4BBmek#qKs$(z=oZ3&>)Hy-<~R1GW9vENwk zXl0UGYabh+om${#KsR|20d;yJ;!qd$>10vTb&2t*j>tFHY_O=9w10YeQyoBzsew~N zJwy-8(l&H6yMbN}c{$nR?F<72$|P>A_gsf~ud%2-R&c*3C+es@dXlyO{l@xl_VGf4 zz2DYg53bCYdx>gn@E25#gZ@k?-#7;faIN}v(3pl4K^-CiHVQ3-NP8m^^$cR<S#-+N zvvX(yGO*^HZ9I-rS^-|VuWORkoYr|4WntQ-1yGm$r=SHd%HGIt1T69Xjb9ma<SWyM zn`1;J-g_gTj7d<7heohF2m?5j@)ewohxk;w-T(oi(HKZ4d}l|xVOAg@$_7VP05CXF z5_}3sNML%)O;C?*)K16P5GW3kC613GlNPh=sa^t(Ms=Q~BTJe1(O8K;!KG<QlvW{= z!o=*Xxn??Lvz)j&{IdYvn+vV!JkOEp>}7a@-v*L{%=7dv$X<kah;tx$nUDKP9xq<O zj|Kb@(uIY|^YrWl%oxh&3m7pHzIooyJyp5{>MhFhR3F7Vrt1;pOEFgo+dqy0k_W{E z*(h=scusXkp9q=1>aXJm3Q#yT2tW*2OfYI+OJND$1)X+1y7@9xOby_sop<>xWjP+^ ztNj~DP8g?h6j<0BFhhedeB_^gIuBba!YPx=wh~f2WLdNAiFVr-ahr9;3@Ev5BK~58 z)A8C+R5%0CkU3Z%+(r>~#O$*iDo&i$IyC^=Nj`A7p>Z(x&;uOj&P8A0N{PRrac-!N z(VZ(LV)UTpbk)Ea&y<AF`Jv8Oa=M%sUql{%d1+KIOzl4|29G#g%+RbnP>mTdLvqyX z1%rF%3MdDPsF|?E1)d;<yNig^_%`s;Sb<%|$iB<sdNt2GMfJj28tiW5HK<uT6SqPO zB%v+|?vr@Uf|Ms*N8HxlXG?Kes*3An!)m-2zp$Blk@YKq6q4Y`Sw&q3#r+y8?*H_X zlirB@o<{iX(z?Q8Cq40B$CE6S;J??V#sKGKW-)hPZ)rom8xT!W--e$7M%`k8fDHcQ zHX(zy3#fw#X4#!`>}O`Wq#Iq!1p{NXm=?oaMd^Ia!9~|T>^`^b6!&SMt3RXESOz{W zI)ZvP^}!T^lqrOv;L*FJ#A`0k9h(ZH%x$xFRKn@+y^{#PW>EmxmbXa*Ff@9D%xXf> zy{aLCFC7^e^jdE)IQEMQ#{3Hpf5X?Cweh3%4O*5u5E_;rPJt}H^DT0&2G}~QFTq|S zW08cWL<>#3IwM+7YTKO2?5#4<W$G-uY(=w#8eaOg9i77L)7EVuFOT~t<^7C(@K2M- zgjf9y@06v6A6WyNth{4^ew!$g2tTp}D{Jfef{9*+09=uQ?UWV}Eii~THTN}#+}DG@ zb0w7-1&p&Szn{WyJ!#y(BtI&=ybzy#+66Ez2cbYetECqbeVYpt1O^UHcGyo4Mhed0 zQ+7=$%+tU>Rzx3!3S}D1jQ;^dqA39~TE+Z^aj?-*QuKM|bg*d@xj=J!1!x080ANQ> zLIwDdrEa?iM-{;$v)MX`b2Yl3u(VnTnTst8bcXn}XVLWu_>@`U#HYta`~~T-b>w0@ zu%Q&$1S)~4uctZ<1PGKPlcPbRARr}vr3DvdB?o4hRj%ABcVMEiF%9WA)zG_b#bhRk zgV%he321DKY_0>Pb5q9i4P#4BmhKQM?bfAFqjY3HWMC)=S1T9|c_~Vm1)j^Ugo10{ zyN&n2rcQCGx8N4kA`I3LJQV?vr{+prmaB8G37*;GtWbSs%MDP&Yptq1VaE8d-uf3V z%hfjhR^x~K<x>ZHKrI0g7r~op3AxgA1SjOfT#dp23|IhY89a5r!#kY7sSsOZI2ACs z<~jEF@R!ylLK{#5QwruVQ?0m0q&$&_#81Oh{XKAAviBbW-#A{*3?S0Ik$MTct=cn= zifC)fI&m9bf-U?yG>(lCarv<fGknHIkc|rU(`QKMus<wLQFndgA`&P{lUXV)TO^WX z-)msukNAorI6(|CiyC+K)SSX)h1$G10eH42m_txB>Noakk@E{E$7fh8a71Tdjvvs> zoM)n`AOpnVTvhiy&6e+0|Ad<mPEol!?{gB`vrJKN?72NPxM?Ekpue|Rc)E<8JkfS@ zNu*bH18caI3{UgB!KMNnK}2o^?ja3eg)i+kNf(dBl%?}RgLm@gPEJLD3ns(;fbvOl zJCX5~DWz)laZne{*?X$LgWD}-UcyRQr0TMdQTQ#j?C<!3m-LM6Oia`$bAKu3K0`H* z1ukI0GY2IWy{GQq7!=gn`N_ch(LkC};DE%Z5}1YX7);oTYD_N#EOYWc@b{UbZW@6# zPevB%zuwjX!D-y@>>N^*J4ABoCr7v_p`ai_l&i-Oy3$4n-xy(A+-N=<Z8G;aw<Ugy z`)6=*W>m-J9>o6SlSLZJaAimD)H)lE3GYP6VWi<I8%PWOsxY<Gd@H)ZW%}G|i*^LV zLoarPso7bCjOvt+Ap#m0T?srqMj47zTaQ4<EP`syedX#ty%`%BU&J=Rl{d*o6H{$# zOTS`W5V|JpGoHF1V+aIqhrl()zab@{HVr2;wRReMjeU_B@2cr<XakaqYA&cUF!3(* zs6P&zvT*mQd(eCPbn$JwIFu@zM0y+bPbXXudAc07wDhUi`wwe<FUlx~*#D(0OYFZW zu9#|DcQEZ$S!A&joMUzU<(Ki*CF_faId+jTl2p@mG0gB(_aJq49BjzW*2Sc=YSm$# zw#r2Sd;|cLsVip2WHpJW1tX~om^vRoFQI`@Pl7CS#BH32wBTDHiLC_wb+5=^VwPKA zt@f%17<Xnr@OK2gHu9}#(%2;*#x8k9DeUc%q6=ZvZ|<#3s!(r8X>O7S{XfS4r})y8 z)H1AOb$6o;<Ym}rLG5~%fjo~NV8Pl`HxKkI=Xm3{@D-N;Sv;8R=Ys%2zy?&xsJ>9* zEr&_9`s<y-+;hvzCK&Bu!K153sPI&H+6kza8VXMUY~aV=3I$Gv0t(qpK^l?}5Hi!{ zLx74id}`TysZWVK+Op15^Ew`w<BQSTF1d@KTYm|^=_2dzBG4%$l^jE3AEY~Hh^`-4 z@)KXVx_h2%tLDC%dYCGE3f>ALD!_Z#yZ#EEsLU*L!G{=dz1%#aww}VqQF6j;R;Lh| zPiUmbQW4ldv}usl!rck(JtwfA>6NLA|H)arwa8g)>rhgKo#ooX)*&xAu~p-1PzIKy z{X#r7n=y3QC&8Zar?|=wkA4GRNx{(rk^-L*{Io5Af+4xgi?Fc6{GE$}qd!dwoQL!U z+v0$Q{;=x}$kCEEVV0n9hx7^Jm<*&Pil%4o9OfmZW$Y`E=G$;CMJ>7MeCkgRyZ+7h zd{atQ|6N_dm0kcXfVa0V?E16}b_%>#$a~MT{PWTQY_lTxjEnh=1zZyw@JHo8pEy>c zn7#jatwDpqfGn({KIF<~s)>SZxY1<$<Rt7?A7}}SoMra2+O#iGZR0N-)!OyBo$Hz# zo2!mAHMY3TO`>{<`oCs&PEfmaCYWrs3pjSIcF{J5k;}AhW8k<rrdIbP_9J+d9D5pc z<`pZHl)B|uQ*^DyQna3ClCOW*JP^J=`OyyJL{4^OInXNluxAC`gtan2J@Y>?;ku{# zS=^6V$92FQIf72f8LSd*z>lVW(R7Qj^a_uSg6%_C55z<JgC;F#e7xyC1{QjG9LoWZ z78;lYnzg(T+Y1=Dv^MH}_hnsgE9K)B{UC<w*y+4RY7Td#3u~u%E$gyh!X6Qb6M6mZ zje~o1@9Gd>Zk+EbjU}(r_(7;x-VHYZ7{Q&kFQ0`!d`dq#EK~&}=EMRqe9)T!wrUB{ zkaJdjbTyz1j>Sb`rz0j242wWOuQlHcFQz;*d92LSzS1cwe-_>Vfr5Rfr~1!m3Hn#C z)#N({qWFEzc<Fml-plg(VCkt2v;1Pd$(_WBo$)<~UcR2{U3hNH2WCgt(<TG<i`a8C zYvuoX#pdBK3<2|W^*-PrDtFoL-y)NT&u5t$wO%F%0<9GF+;B`H28i?;j7jzhkQD$F zWNht~9ev4q5n}OHQ4T(`9=2(j{Dyu=zQ&>e;4VyK2u5KPaFG`LTrX1DPiR@b4F_d} zl2Caca2(uWNyp07Z>MO?YBpX>o(_)OOrv%efC&_~4K&#MUQjikeF1iaj!<66jAX+! zmkkB<d{#Ack6T6#i-$0B=ppr^57BO`LH;jJ9Dr$zVX|$oaggfVy7WF>I<}%TzLtW5 z0o#1E&1B#PwL9rc;YQuqb$W_oqYoOFHfV)lIi1S<Ng(J&R<(@fJ`pk}QQKT;PNJn* zO72)V*x^)4{17Pz?ES`aHECOK+b)4?gCD@VGy!gwGOWT%BlQ-NH%LBB&VhfNxs<6J zI?*EcVIPj?PCPuYB8G>7t6BqN`|kvFv6atdiG)3Y)N<oYpXuH*we4hM)a(XB$3&Y4 zi3d=lU&gTq^jJ<-4hv{QKO{JDhAp{JuAY*O0GXFscOy?1cFu{0g#N4P0a!wWJpZ)9 z$2}qXAmT6FVIRe3(_(0n&t6rS_>Q4jK0v+=P0_v=HLgNpQ3aw<b#-u;7mN^$RpFNc z_spr;SaOeoz5}Hgqm+S!t>t0&$)-<f&PjsjXqlP8zG34M6AjQPp345OcCGvJfJzpB zRsAhUhT7Y;>JDH>(Uu`-ayiX~VRzDbS3!2~<VgBrxk!q*gPRucxaoNk_s#AzK8Hvc zwu0K;k-M4Br`P6Y$FMBcX7}5lX(B17j6YIIX`6y~h*KfTF=Vq_%B~%YT-)}(CE2vp z9+9pIuia{WU-4U+F(|WYCa^6EYU)W2Gi7fc08*LOSd1BS?pac8qle|MaDO?)i?o=Y z>NhcjM=|nhQ0zb8+U(Z$zP=3%uQk;ApE`!R8}}VUjfJp}4fTinVatJzMVQbpt?dCz zsxoy9j2^aW>}{Foc^g!1;BREqIOJs}d1@x1W%fL{Lq<|_GvB%5)W58O9k2$b{Y5#v zKgNf*sukbzA$AmNd?%lCj8Bm*ice+h@%>@nR~=vT=>IUj3BPuZ?;f=59A7TRw>E>x zMgbshuwB_T9(^TvdfU^+GS;xVIEN+N9&KcYW4rO1`KS<)9<=viq(@~(!P2KE^K2!8 ztzQ9l{@CEFv>nz$$iLP}mm~8XFp6!uF&tRASJ3_X|AYZYpilt@@Oaq@<*(N*fy0^J z0^L0|%#j$Ql=iE`bSGh%@ULI#P7c6}8IBbJ;i|^G_pf2Q?$#vxPx{T+W?+-Mw?WXp zh-QbYT?4%vU&J03>Ai73zuX%$;X)Hh*+@?s#4bo19pjw>{nU}c;9|79%#rf)3iS%| zIip=fskHBMt}4{eaKBCK+-vOq?0`>56&mkm{qKeEzWASo|LmmZPawBO!q38HY~x_= zy5l_J>Di%S9LXJRmivp1kN+~C`lJHgBux!1J%f$2ry7EuN*oMZ`Z0opQKHC=k$BJh z9_@KEa>0p)zcl$~A7W-fy$>b7X!z?RDgEk$yAeI#Q++kjw8)D+1<X%_If5vRJ-SFL z%eUh#fA#uElO6Rr<Q`5A)T|SFzvtoJp1LRTMsTC1^3~Kxn<Gg7qyu?YeC)5<z8@|P z)>z&$N08b`H6zTgTmf=w*%erE+~lYUkRUEU;(dCmm$Hip0pCINe=h3(#vv4s8+%lJ z9Tk6IBNul$cWl=<cQT%Y9`e3^^7jSawfuu=9Zi4ak~3d%g8bJ&x&YAvCg)AGe<NDx zj&|{LfY?si2!J58x6#rh1uH$2ygoT{6rO||Q_xkYWFf)L*^@g7_C20LOQR86DsrLu z16ef-Q=<!As^5Z+wzf*=NpUg`@rf)h4lN+R*ap|q_XSzi<~J&|+uE;3#g|%^`re?# zrFQ#`veaS%bZZsr^>zauM*1NbxAxhMjx^?A`C3l3ca3akF+TIWbil4MVZgHfAaIuO z;?quAx;5}*wBa`2s?agTVU?_=&_ayvp53vZiMyvuF5vF@B~}jRvp1}_cdJLgM7fxa zR(RS;ZQn}~yIQui39}%|heKetUpfeK2pcI+bqZ=IQv-@Lq)x-S<M~5097L`L21~it zVh=sxTTzhovZJSl$q&lZYrl|p8i(SS&!_`9%GJkRBaF03O4(*suoe0po9B$5<nGZA zf=ka}-+rIi4dxVaWZ2n1NMt%-{|uU29fGacGKu#Bg!B)Mg?Wjm9=pnFr0_Hf+zx-i zG)y~=mCW!~X48IYTKpM4U#rL7iW~oneh>#~Yw?%3o|YM_W$^##0zDAeem5XsNfLTf z4b+Y2(J(600U6M#E*Q+?jrX<5!pv>2JGbixPMYi7b%0N{{daHCqM)4$OR21_av|7+ zE^xo?<CdzP-5L}7`iGRON@`gk25HMwd+!<zByA8baVuIJ!1Vfsy%qM8so5?{q83mi z<~FxdSpy{OZoCLMsc-)y6(@6-k@i>oC;|*PGsx`O8Az>f4m%(>@p2lshkpXWLba3- zNG1DONq=35W?W#^3aQ_jTGsa?y-m3(fA|w#tT6J$nVc^zen?Xk;lLlp!*X@@TbLFZ z^RZUa>c9M4#>`bR1%;`uGmn<3Ly$5v+PMpEsprwKWj8P0LBG<kw8rn1R$Vy#4`5w; z)!Rp?S6DpQLP$@T@;G5gJT;8)SgyXQ--+X2+XOH_)qF;@4(R7Qc(D~sZbSe?Zry;1 z|B3R7GBqp}J`Wgy+e{d=jNorSvj<&AF}awo8R~kZQ&a#U)Fs*KsyA`GrMN8dcq@(r zzqDSD`tw@zN+JEQmCQlbqQvI=t}YQ5&O6i{k+4Jh8JDLbg~NM9I4BW;a$_y;+71Cj zLu+#;Kw??OjiEIU!2=4rY54!b(<WI92bAXty))1e9#+0bA$B@(nI`Ja+;ZCg>8Apr z_$bC%ZDs{Bjj5<ryI83&`*A;kS(~*#ma4mP(9t~95@2?8(H8hWLNVs`36xdWH*EKm z8sdmpbL%Io_E=8>Av*DURth0^@HOGlb<kCMk%Sh1#Z93EZHY7q$V)l{)64xlwL;65 zX=SJ^H9eL^&zjAcQH>#iyR|YxyA#m3#HYq)%1F2tJF%|Yi><_?ZEw53cuoLRln33K z=dnt>q5B24(d~@e!AMY|e|veiEwZ}7LK;u_rxbi(yMea(hq$az6LqaIaB`$Ej$ZS# z&h<h1<Ek^3U_Pul{_;^ItfU+fb3DXYg$GLU7MWUfE#^WJ-x=QfNqnXm)(k#V*qGHL zq?1@asckHuU+Py{?=oTi0Lu9tcZ!v2oL-OXp^*<Av;1|+)g+M2_Gs}qs|`(yZKeYC zVaQ_+Z%3ezH5^=|d#qajeZcx;Ik7!?=)5dmh?JbvOBQeAkM-J*2F6mv{F`_M5R{=c zdf@&EWLQAfdWgT#uj`VD&b4}e7;Iykr35Q05BrJ{z@WmsIp;Y1T9>NO<)qp3NFDQ2 zbD!a+q0LIP^p7mzs7FpmkpvN-hvF?%f{+CM%WS*49{Grc5K2Z&IdCqKp7^0JdHQVx z4S>GdTujS*b7=7I7wz8j0BU4j#G-|4tncl%Z0ssyv~@2fcCQC=um!iF<qHU@6S<o@ zI*bL~O$u~G1g7B9Q%QjV#$0)Cs(R-(yRL55dw6L$0*pryt>0ob(0J!iUfYXk=Cd*v zP(a#UjpOB5>lre2?E}ojmc<O5F_$V}&}G7<Y^8687B5;JFZ#S*2o`1L>2O&w0+Ahy zbU>c1H?bTt?KXPr6S2Eo{hw!~{qXI@W=~1|gyUh~))L%TbTKNbY(%ua$qzK8LHvki zgDfAXLo@AYepdLu3W~yKQ95VGOvws(jnO}~+3Lm;Jfr8HQP+Jsc+1G^HhHWY&9_P} zSkVZwY!na(iLw3w-7O2(7`jEgQOngY<CUDFm`fk01nF!t?nN)2<19+VoW=$ggB}%V zG!-0*Zqrj;Om1b!1iG#s^n-^06%lR8S{9#qA@74g*Vl*}joXNO4pL3-UStZ;(LUr% z5!BC45!A~{5%lQ$UuY5@SZb#STKIi5r4=oHqrKEXy&%3OdlF9#l&`Ika?4exr{!7X zhOd(D=kDuC_eI#!iaGxCQ&JI_qq^S%6rP%q7%hTuY!t|m3aQ%;oX6|X!+S!P<6&bh z%Hdc5zBFHp6><fDKJ~-{tcxp)Tg+@0%eSLs=+l64EIuJO;W?vyL}iK|K|>$zw;QUv z3J(QmhPsI}ul_lPGpW+Lw9ts&#9P30&(L)}HpSa`49|?W1>wH<f-mEg;i-EIcOg|O zynx+o0U~Tw-T?cn46g9BVDm*!^>6VU7E}IlaJfhLOZD&!KI71<SFtf>Txuhj^r9#A zOySuAnq~JkXPz-$l+JMHZM+@t!iEv?mEq~Xk`969`+1*NAv{?GoXX<Vj-Pw#;4+XD zyolg7G*e@!@o~^}BTZ@W!_Mon{5{v@`%}W>(jrKNb|F}wDe(s(%rlQv-hfn;{&f5? zcf&e!%&yO(ksj*rKfzaL9443gKO?4H1W8_tih~z1N~+^0<e@8%AtEMN3M`7Yj@`dl zEu$*epzz<R4;iAYvSV__4{HHk7(}SVEIb`tl$zu(@Rb`G-@*=deh_vrFq-Z*_Np=Z zy%+~zEQ*0Giga-4F|P<?nV=56ddt*hy@=5;yKJZHAOA>C2+2ZQ<gP(Kcb>a!vS*)v zhRgZK(sDqa1_~(WpsWhf?T<2RPhkti*=CSgyFgzJHEaF)YPiLziVi<BZUg+x5Io26 zwG-7Nky2yM3ngCFwG+T&aWCCap{<YvOPS^ao4<K8JlVmgw8iFM{Gkk#%eOxei1O0b ztsw?3IBRdD%s2($svoDs+v|e%yp7v|5W>KswTYK#ZB@Lr$BCt=wCxtV<wU{9W;Ff; zr8J9njiXU|H)KS<jutaGzQ1g0e|-Jz78l=+b6b1<PfzICmXHK(Ve&CuAkK5L<LDoh zCt0ybSDwO#nu9)bo2PI)JqRdxFWg-!+<TdE8h|rg-vy~czz)@13w{%3Zo!>dIQred zJ!KYGl6DR7giG;*J229%@L*i3Ds%@LN8wl7i)}<~4DAduEmi<=7up)+=c_anmcaP| z#+bpai-2oM{%nLHNM|SmY$Yv&7}QD;l#13ecmXD4luv!{DM^jpAXtrONX$;G<_DDE zm5I16GxkG48hu5y{Xf~k;2mNeNXGA3aQUcckWXEOiU8#yXn61vSWC{x9@1|{_UPzJ zwuP#A23-j+Y;GBNq2~CKz7K<gzrQ!mH457=?CT~!&c1k|r-<Ep?76O7by?<HX2W3V zW51Q`-y*(TAA7mfr+T$`8Mh|mWwblU+-=H;CCW|5dLQl$fsZC8*$FM>J#&mUzxlzP znH`tFjbkepdhZ$8!)J$n#x`xANt<@?+om6F*z>^h3ofK0YlS41D-Y%^*+yoP4@}Bv z7}{5;Te@q)wok2Qv|u|lTI@XRMfssp{seZp3e_W4er`hfLYQ_h&Nh6Gs{iV?tIl;6 zt?Dmo{{yhX?|GK;8g@+NHOsKmM*8L6k?N_Q9>;D;2MyZDcpdxk(u~*8PpIONf|ubW zv{eKhG;1z`AVro~p#bg#h|?roh59kx;8_j(@o~~D+VAdDX{-k^D|Fz2wo%->QlmH< zf|(r~d6qS_QXzdD)&+Idl22DGHonKwg&3WGp=MncVE<n#W!W9(G4#*0*oGg0N3+-l zrjhh70wzG}5M9p|080Tx<%VI4W%BY=Jr_ZSd8{#&O;|octAz*z!lkNQcPR1*Of8@m z2lTwTGc){fg{aD^OfJ=&$dz7fvHP)>f?r^lra>ViAoaF~CrY;W8>yhfyMeDGa3PO( z$II~6F>)yo98u>%$q4_IsRcOU>ZR$8OaZ|{46xL}7)8hJ;BQLR+W4DDqs)++k8gt8 zJMpp}1``5h9UUaS%$TcD3EOXl%E%%rd0UIe?tM(d9rimgH9F2F+n&iHT@dU-Ootdh z7hPvPMA|j<$%Lh-9Jlr1M9#+?_o0iz*-#D;fa5q1_DJxHAkH+cDp!6;+uM_F?KX8c z<t*%6yw>_{f(gi+5lHGidoz)n$a)sR`dV=R;$v@0D2kNa1+GAEqYf}q5oAEJ-|1|} z<ta>sJt}y|SUgul-Ohx!&1%M<wG<AalUg0*v*P`Xoy_Dsmf`FRMI@PZIS4~|8ncg9 znjyG0#Rfn!onAn2b=wZZQ(cQ9m$D#?1#Zw5gzcGJq_2kz%%s3pZGJ~gnQk+u0|gO0 z(~)&VY?;bb-KQUmM-0q1<p4%jCGvf3n)p~>fXm{3ehB|dW(?Pd8aKmxndgwb1Gh9v zZ+`BZQ@!err@=4~<IQu#`3Of8Xo8r)CwhkKPkjmO6#DWKA3>Y|1FEquBR>_#ymR@C z{+Q+Oqdq(RG0Ne%0{uduk35ast=^s|%U<sKE7@#CSsC!nSdGa=KJg7)=vi{c@!#Ht z)?$80;}#5m_Ns5Z!i;4&tUxSPM53jaQ*YE~rjwOLnY@l%OfHVae>M4f3O<nW`JBV5 zNUY>~Sv9xE^nO;STV~$ywitwi`gz-H?oZasg~%moMFP+Z1CdS4m7_rNQ0dhTwY=iT zCUNnz`U6%CD<wpN6y{aig^TRMq7IP4ylT5}U%N0VukHq~+AiFrPtC~e80&vUOm)#q zIA9~`9M);?{nTHi3WF!Nqpu7>tysUd6tlaLnv8;7p<pCFMg6^uQMjRBKfKTJI&WLA zzvy^9pRd0)P+p&H?w!^65||^aU-p;g7ii!0UWE=jd<Ft~ShATLDLT{p3z=zk{~w5Y zau_Y;B58dHJ6$UnpgHbCftZ}sQ~f-Eg#mOo7O+bh(s!4!ilZr@{-zI4)mVj)eZYSI z_TmsM+1o^-ux<jDIZ#qdY#ZY_)Dl?&`c|&)-2$rMY5S;Brr)eNjz~AHHtd`9Lw#(L z9B`V##r@x_SHjP*FcleYG7v8@Vn`1#pq(7hguSARYF+R9HF{0pMZuSbe3GmrD^HH) z`e|XjZuTv8d90;o)IEC^-Z_bj2KsB_O);B}FA<6SW2?q`iJ)2|$RFQvAPD8x7J`_c z#PMqsLqGmTY*I9SQJk$`_d8$bZR_=k`t{kfz~FT={H)+^R1k}^5#Jx-G-K~W*8YfX z@sqo>qO2{s@ypd3SP9!A>a+Y&)LrLdJFfqFY_iJ78y4+uBVpKGx;{B}LCXk*?`-ms zz>l^>?m1TLt#IRV{Xlqt7RpL2BJ{82W(djLQn%;}Eu&G@Kra|e-j)}WQ+fk8F}7em zU}#wY%(j$8t%Bt}6%^2jzyKqm0zv)o9So)&J?lJOUc?%SB2{a>x9&6eF8BW%YyaF{ zu`Sh8-HoK89czEzIxN@jnG46^AmXWh80h^Pf3$62##kD%3n!~}0j-h{1?+y@ci4m# z+KVt|6ZQ~Vfwg}dD*OCLG{W8PLRL+jg=%ABAn@AmOIZ*;l}@6H^qr1PQZ$dBEZ0@G z!lJ|aL0ksF7FyZ)Z;k#hX{=o@asxtj6?n5kJ=x-Qn|#O4d&67LsQCrvG&AS8g^I#2 zf|3uy-7Gcy&Nxbb&3Nn@I&)_6o<)V*Fj(%{q7TTEa0Gh5A!>Rjkwj&3VYM3g@nsq! ztw6P1KgfkBYRPZmshELddzvqdpa+mnWq>p3xl0ae=q?Tfo|>D9Nn+F8CHD>-y{_kP z9Hv=;zZ-b{p>R-|Sr6QUyQ<z+slAY^it@M!MZJfe2}f$4xc(00$wh3(3}bX1eTHwz zhqe~19pbHcs`n7HFuu}?@O@rf<fHzjpZ>3$kr1}WvL*tEZIKr_tdv}zD^N^*>uBR} z3aH}`Xf}eiPo414xb+>QwhUGMd$eQn^FI%3sQEGW<Nl(uXnK}Jeslrg+3LGgT*M;z z!Osx~E878UNGWQjqa>nwOn!q9bepFmn*k}WygL~0#v`i4Lx~=`NA%(`dIl2=+n5Lh z4faG8Itm8u#(q!GkBcQ!teX!`0h%%_p&N~hogs5u_ciPzZy(35Apy#!sP8~x3L#2U zM<2we#tiz1W|_^6-C5D6;qngiV1>A=!#r@R{~r9=fs28DTdOZ1Ftzo<NO=MB+r}N3 z6Nsq;H+Wu6-pn0wUf%WxuJpWedi1gfJYm;^;o)zL{^oRVBaa!|{+_aY*XZ);-pCKA zx}iKjoOYjj^W)C|lvK#s18K1?y?dv)t(wh|rOZ3EYcO6=%TDP11zd^$T_l=3yA6_X z^T4)$bUb%3_)%)`&9sh35pTO9vlP1WGg?@#@;+hpZk!y)-o*XN9>W863vDyN8!RzE zbkS`FU3}DEJ0hAc-gd$9uS|`Qw{b|r+n2|D2SxrZI@f@H9r2E$vpvt&&ngxU!C?R~ zXCiDbF3bf&{$sw=03tZ17(soL0>hV&8O;kCqI7LY;WeO})R2;oD{rXGD+WWGo`VPB zY0tLg{O9@FMi#R<T}_g3(8=5G_e_ER-&{MMW%3SrSqg&D{FEUdY-OD{aD$U_8E!!u zN|&JFvaDv;eIZm)Xy*>`9PrdlNAH5s<ohelNywMEO?3#K?9BP`Y-{Xz?m+Ov)Zm`9 zj(agXlQI!(=mw_q>dil$)sKG%-Gp0>58^9DowyUz1(nNHp2ujzhK(YlA|FnXuJM+> zf$Bvb@!%$7(KhZZKpgSxRPL*^G@Dj22(*XEirg3-v6|5|hFxH{aS-$`QiVx^|3mN` z{wG()-<i2F8}}+_SANYHg$pBVBAj?a9aZ%@oXbIp5Jw8JLTzW!_=H#gpdGUMJ^et~ zl^u4M<HC)J`Z0RjM!tlv+wUUIlQpfJt{&jU2k4|dt<POwKBPM`iE%X$_e>bv*2NCn z#b8H%iPVn2)5T)PC%wNRUd15Kpp-dRmckSIGf1yeD`31&WKCkw>I`5Leh=breZKYv zrfIB7u-hS4k%a(eZK4ztwhVexL=~#+`!PE0sZIwffa1eY3-RU7$TT)8)NaF*D1e<R z8!rB7*r^86l;bphFy3?lUTjB*zHhOHmB^*EkGKUXPq+rvYk6H&Y2*RyVQCfW_3P0m zNaWy_@4sH6oLK&iwtbQ}u+SI{w6XZdedpL!r2lQN1Cw+I+MfMk*26Z1VrlxJSdmc} zWX~`lkxX$S{%1y9U@tPsJ2BJ{jxLBagrG`*E&@luyWfZW6){1Q#lcunU=RZ)i~wB| ztUbqct+#p6;)eWUPOLe>9rA{Xkt;c6VUK9`lY?>wdf`0^K|TEJcdW|BPy7EBj%)I} z$Y(Ux4ILV`urDlKz6sx7=x#kdlhL)Y-ryIV7S2bdXYl6MIRI$n%B|1w>+-Gp`PF-? z3wwFQy>&RhQnt>=7uNOFKD7l50Vn9JKOZiGvfHUqSnSvWuml09*xg6EIqw=Tq6(|L z;d}y{>K~&Q_v8O!{9lIuEAW3M{y&NTGM+5GGi$Y=MA1Rym}aE@IBAYvZ;s2bL~)kC zxcMs2jG-0$8$Dni3(0RQu;B4PNkbuhPb{fde~7jHeZxozQrHA;D>SRvENlv80Pu~2 zQ7ZPJ!HP3m*rX4pEFgX&B4@fmLgNpzYHsr-ocNRY(z|SWJg8(~P@CmA!6=8Sc-8nz z{29aj$W#3ZE)8D#)Vx{NUgN2es9i|8y(o=@HE<1HWK(U{O<IMzBU3jsXMha{xcHq? z!*P5?pZd4?9*xoYUZ#l@cZDZW?jH4RY*L%S2qVeLNp&p=Ldhv1b%m#JvkigO_JAe^ zNDWqal0`h;!js{#2nLsoMN@cM5HmEE(U>d=fi;xS%#)Bru(YhOJMGf>-qy>D^podj z_*K4Fp$4e<33>$iq4F|y{5eQ7MLV8g#VK6H0Nur!<BK{&?~h@Qa_-eML2(G7wQMo1 z!Z_81m`#O}TA3<1A3OEPc^SU>=>F<@<RzQgc;Snt1d$Z+Tj$4cid_G`9G$e7=*4FD z^^Z>V>P!QG@clS1J{0p0KdSx1AG}sC5yuhBbUkD76VpHAnsqZhlXapj|E>gQkT^fN zHj$5SnwP;e2a7y5jMf(162L%LCR@&?x*lM)qVqKUrXy=t>`;<lAX1>a#yBd^*i<f6 zl|4Z{N<~?@YWz6{+YJg19?6|TdGY)-#mdEH9}%UKa`e1kKhUDF$3{Zb5goA+fI@y_ z%U+cF(E+$!VXQ;%VE+yu-}c01*}67r_M0FzT)PD|f#Rk6)L;G<le&1S_v2Ya+lnQa zi3vO^jNQ^s#wFU>a=(C<?Np<#=!gyM^52^sU7nBo6-JX(_0C_~@A7@|s&b{Op>P0F zKXF!drBs#X;piW^L{-<utNJIFa&*KX_R8n1>Im*v7+F%)$V*gp{Jz)#pO>mevsWq3 zs!XYBs8rSTUi$-F6|ZW#?iH)re9i%@e5op5s#<%AstV&(b(gA!u&R5VRs9<ptO~;? zRh3_&sxKDA2DlxsL`Tdatg@X|{YI*qD^+#7L{%@vt6C^kjbg9fJL?$WY^lmGRn;GB zA69eYRSl7<rm|NnomHhtRn<~e;1X5!jaT&{d}E>`vRT!5XH|P}zrt88Rb79Hs`gs3 zih=D<>8d!u=6^c|SS3}hld3*A+Wr88@v3f@s<K$s@0?ZTNL3r9s@0dMYE--`c-~`x z#T?+boK-1A-Ka1QOI5dCqN-2si6O(E@Cw4>v8v0QRsB?|IxSUQJktIEe-W>$QmPux z0lt040jnueRjQZE`Hz>Vsv=(10I6yQd$rtIRcEOxOR6$1QI$Jh)nTv*(GfmYb(6EI zEw~R?F{$c`OH{Q@H2iQU^3;W-s_CpM^0{Mx3{h2KOq8k)zS};m9*kFYi&Qm)RjqMW zb*)r2U#ePhiK+(2tNI)<t74)ei(lvdJcg*2<d=BOGo#lu?HDGmpi%<QsU{&m17(FA z1{1X%iQ;IHpTj1h#BJ+0<dsk{G%cd(Xi?lMpHLX}4=*Y4w*7+ckJL{#FtJOaVs{($ zBU1Fz)MP7AG~Sor9h|?(zdWhqNE05+Pl`9nAx5kNd@Zj2ha$^O)xqWi@I>`guR#yY zz2VYiJ4(u%p6bVNZxj1(?vi-ejAyOAU3EO`9*%g{ac|dHUL`RKh^wjoJU<fEEf%`V zv0wM~8L5XUhNI7lie4n+qjQ!UP46*<ncV+a?z`nhV`F>>`{ceJLVW&9;VM%%4U&5= z!XY7<R7Gx1)ljhTVb}WTQ26O~X2K>{#M2@srY>Lf=(K2F&XWBo??c(XQnq2dMig@R zIL(Rds>R!F6=9bM|E7#G1}i%QHn$^~)Siz{OI1^`He>u+P89ijmn}_A3N394Ej{h; zgY0oU@<?o_^fU~E9qu;<?>zh<&^qGv+08QoH;&X|)c{4ke;#5+<y4J?GjBCJo5Whp z+Yuh~Wr&udUH?UyQr+eM!r1}R-je2URWjRjy=<Pts1MS-elNTCCom!~Vh$Cdwa_ir zkntc~(xhm@7MI*vaJRoOUcevOU(KB5WO5!xeEP!FS$D=(#A!@l;);+{s01om?9nRB z)Sf<X<8RS>#5T^m=$U*`z1#O+uoMvGE_0}a-GAbYEGI2_cwuE}^Z_IV(J^wT3qWw} z!Fj-6l6P@w-@)g?u8rIN-l5zVtatg;pdZ+AuCVGt?v2ro$Ow*hG001h1(7KfGDmGf zC|=!PE)OU|Ee)tk4^hZNToGyk2=GB1EVvBN5N9ZazD+*08-N1Zd%V=(GWxN@&A`GR zo{%6BcrSNk)c|OdqQlqY&1eq7cA5HRWY7#;Uz9g;$%pI`VAGP8Br0=tTNrYS=Ja{Y z?27>S@K!0jP*HQds>odIGCh`m`aHAeygYB9|2&9%(&w3_9p>fvIs`nyZ7u*8Hv{hj zJ#C+NBxo(XP!w!%<$b>7&oOIaWYQ&aYtY#1<2?jupNSEvZqHzU!BNU3nTkBs-$GfK z%Pu{Wo99`{94ZOUo?-VBp%R6~D#CWl<-*L|Nd3r1XarI1CnX5)KZWqV>t+h?8`t7F zW%bv3UhPOReSgm@`yr-xhh0;`X(FbNEZz1|%JS_ZqrV>~ZSyTm7$o&+52)<@wv=95 z4@3jal**q*eA}Hdsk}BgyQE|uQu*>S7_qD8-?ioPzwVC;kOm#W0%1Y}Y5z<}I^3bO zO%nixygbii-GTM7ea|dZEp!?!(yly;{8*6FLez|^TB*NId`B3f*yPB3Wb#CQ9<7-p zAu#OvTET-b#+rE{G8nSN!C(9f=Ro`-h-)z)HD{~b;UB<MC#U}N-?HCtsTKeJR}@Co zGf#)6HRWFBSt&s_9OhwRcU`FDl#VAe0iu&;%tVrzxr$Z(D>iHL+^Kkxx!WXj_o6j- z(6e;hr1dP@sAt)&^(?oB-CEDG4CS_cn6iAE%wZs0s2p=RXK#EC*Px&^hsvj}-Qk!+ zN<P2Z9DZ=fp2NRoq5>qI-3@?122cp2|Iox$-f;j(-esQ0#J@0ROJo+Fy7Uw_h}<-d ze&MactM{9mIDs}HcF>!W)U_u!Ak{!J2;SOLaus7MFyHiDiat2eN!g;W9K)a+iYDSO zlK8|)Ui1|PfNZGcV}25!9mbu8S_u)^;#qjojD}i1=I6$PY8qI#@TB>;x?Qg3;%Y3f zR#J?OAH(q@`pRkiXsA8Km+(n!jIkygYFUDx#AigPhFX^3C-E7*jvHzP<yt%o?#yqf z<zs%LuMn*gUv=S5L#>c`mPmjL4O<&(S%RO$XD4x|p_V21Nqm+m@12w<EuKAC&``_A z{3N{eAd+1bw7UDsI^444p3dSjEI#8W`U;nh^KtYQYSJ2Nd7q!eXKC_GbZxDkWymv@ z;3x6D4Y<=#%M$!Jp9OagYN+L7e!`Qc-gpq%$_rszEf{OzqcH?;(qt+!U$Tkl>{$&( z3~e2S5=Vcf>Ms#nH56%uU{RXBnW?|B^jEh28YEvaglZ`Au@enNe*Jin{#qh8YnS0m zmnSQwuj*n~kHxN5#jaMzuAYfqJr}!LgDZX-YG1%#U0)W4Nf^Z;(onlU_LPBG_0#pS zdmC}3?`^>qKMl3@_^az1#7Fov6b;pd-o_98Xs0}2@!i%H6W>68hJ3TaLm<JZi%*a# zNZu{->#s#}Q^29G2o8NkaOf+7Lthabx^04kpN3k3gP(?4f<r$g5cCxXtgkpsei~}q z=&fk{Ed0PmgqWSthE8&5s$GM3q=q6Nzc{cs{S)8Jy$V)8C{Gq1<J5&y@x$tqTot+X zmsfwK>8~vPl`UVj_4s-l1sZAzf8A{kfFEbK?V&jO!Y*-tMgFi7dc;F*h|I%?EU0#M z7pD@YLHESiK&_tv3yck9usYNO`!0f<!1A07o-~~A8V*j`;-*83ER9YMQaE~}H#yfF zUg06(mITIdcH+TTPFMQ8k{K>MB^>8LpBj9Lu1WOaiQ$rF_>NrN6{aHK+vwnj#O<lU zrOg*(-7H2o10E#z#labAF!ab0PXYQ~&e`b5Hab4?KX*Jn-#R}V;R`SW#Ks)74r2<R z8UPf4U_Az5C!_6rU-A!-1A>D@1$2g4>RoI{;7NmH>TkK#3(L+ffIrljX<K*Vx7n#< zb2trI5L}*DmSy_}dZXDjY4|cbggQ48;mr=n*Z>721m?6N8tPN;c8g7T3c3@ifL0Pd zDTtQ1TQ$0I){&oqYax`+lBq7p&X&1`8kwgJJRcGnh^HCEyB09RJDly#40ClIe_#Yj zfnsVCVD?c7hXD))mIQq`g5a*qU=`vp-wc&*X5%m}5=Wbhh+kHl_#VR6FuBy9X5r{y zp(t)t)Qhr*5M7lyd7$?i{Qn*P^96o7$|pIwg9T^%i|e5&RSeg`bZVW7dfI>}3C0C9 zm|tqad@CUj?@71_9YOe>0v|fk%yC5hV=JOJm8mH^Ecp|TEtXb7;?j7KeOvwen=l<? zaAS_UC&zqCQs9qq2O`TTU$hlsO}-N^pmdBccJ}ua@FN53<1=;3-*8OEqSTo^twi_5 z=p$y?>qGjFPrAhBxjW{W)8TDg19%`NM&c3$1hokRrcR1Qmc+~kVToC8ToAPtZ3NWO zPeeh~TF25u_d2EpXAHI9d<s@nFHHYCj2er+!4m|TI2J&d3Z3vAoS4}+SSlbj^#VCR zX8>m)LbG#Iw~*qT`(`8>S>C$&$M4WUv)noeGog2YS25{{*lBk~jBW`|T3}9MN`UO; z=b2#Af6Mao>;8!En_3@IM(TPioG>`lBru2#HK!h@L|EwIKP?D{=wv}~K=iEK0eI_1 z;8#%OHr*Q$sbk_+ukGaiDCZ+)vf%#?oqznN<!peOXoy$+5{l3bPA^|TaH3E3geMDb z4T(eWx`OOtCj^Hk1!hmk!|Gc)9_yRQlCn`@TI0QVk(D{e(@~EnQY;VZNV2q!@*fcy zD8fc!(}49MkpEYoSW9^E1g)#nYR|Zst^AHi^u~j*ryHaqO#pYRW8dE@WTs-!vkGr* zv+zb;n6WNeQB3Fjex`2tNUsO~O;%E3%w{XY%DZ)S2^gKC2N~;6&RJ3+06nQ3z|Ml{ z${-&um=GR96Qr!d#V8Q7nIYTry_#_@=dA*qGsmn^Q@nmS?h(W<0Fvsdh+YF?kxLDH z#0!JNG#f73Vyav{{7)2vu9-f585RwRr#N}J95e*g3lY)DrrE?G^b36wl(-1^@zy0# zBEOQZq*>-Z8Ig=eJy~as!{42lg7&k87RTrOkI3^PEw?x4->Qhs`8lLvXbtyIk^ccT z#9(aA`I~JP-l+?>nsd#+AjAnp1c)kZM+D8X^NDTl4)9u7ImT(x^dcrA7Kx~)*kR4o z6-=CtMl@+3%vX_(T}LDGgimAdqtQ_(PtD(OiTLM^F^B-kxjT5OhoB~>2>=4`0+e3R z0&^BaCv|*}p5@r3AG<?#X+OTqPUb!Y4Z@78dp`i&BwpM?v_^dMm8mb@mk>kPY#46U zKX)zTo^Kw6QR1DfO{>?zzz=O`<vOzVh{*vS4OMF<V363OXnS`({5Z2n04mhodojq) z_8=W`k$qG31nrC3PGa%>Xt?z(iewRN&TdFM*mb2ni>Iany~bD(JkOsJY)(cR&8VmD zY4j9tq=iOdz8Wv`SAUH7kXrt}UaWfas!+)vLh|N8zW@!`jydt)6X;%{UM>Uvg8&hS z;CR`7H?Cqg&?4Fkc^i2$F#D91Vzs_5TvRHy;L8znHxP*4WH<<2^2c$CE^}+W6~bG{ z4%}&zuba;+`85BN{z1P8QF~`K1A81q-T_F8$(z<MTBA3Aq?v(U8LW(nh!zMj_;d79 zq7ObL7f8+!#)Yw_J0#H+B-auqMg8wV_K`M|R|<7;Y|7*Q-lF?DLcV&_e#KMGY)pKu zF(qE(Z|%qaj%AUTtaqNWZ^DWQXS1@#!}uHHMYfj@^lqpa=)HFOK<^CvzZ?J2S$vX{ zQsmR2qswAguwLmr1)EmLQ={oa;OSo3Rddr~U=vM$8|pDgmVl<_>3PB2q(HhZ794ez zziTK5L|-Oj7U+f++1jj-e3Kr0ksKI34^r)U!RDce>5bz_erkR%7@`fuoni3pyQD-K zwtDi0A8$bYHI!f0@kWkg@v|HoWP43n98rbw9E!r+HvE*J*glnXj7HL~@KZc^n){4( zc&;Kxt(!cn;^s!)Jc66%6;uoonYS*(qolx<Sf*DP^{Yy}(L;KUJ&5e-@7f?oU*L3- zu^TUkry;`68NLCG4(r+((2)gK@isoj$(9A@CKlwWfFI*b%Yu1{1$j#5$4Kpsrk`4m zOElZZDpZ9yA~ze^cw~3k%`SItC>q872KoGQW7!F4(ySrb&-3;3(MjQ|(dHEjkO+*I z;)9Igj_NL-$1^G7Z16<rQ@6<3f!t!GOG9V&3vBB=PgOk~AS4&T)?>UImakZiGup4Q z=`<H+J2n0UoeXY0scYm{tVVzPHU9WgHA;BTsx)izJz+8p9Jc20j4aGX^pJI~@KiHC z$FgtWA+sfI+VZs$@2amve?T6-4e5Ey<#xtb5l!DM%S~d3HZQ|!yDYZa0x3aIht8rL zi42r4Sk!I7wuvxc$h30|SC-`@jO$KC(vXm~K2(&3DF{_%z`F7j1j!(JhRox=#xo8W z*_dq0ETqUpW1SR{<XjLkj7ER_Bc1L|^E_LV2OsggS`WR)DWCGdA_Y{GC=u6IS;|2y z;{U8ci>+V1__&ILRhdakhe>~W8>(*{lT(1nfu7+>b2leljwSn}!%Q<t)E1GbypUmJ z;*pKoU5WZB;i|cj-uSb5C>~*{+!=dsC?*k;JtWB!rf*KpaYP-<orUlXkKq1V5(8sB z+ux7H4;OJXHh)xx-+*e>p2$!J)j#m1h^8NtY2@Z^9^*9T#-`DK1L}oIVoLDK4prCN z)7YG0Poo!YSku_J0xe7YECxVp*t{Q)AOKi*NQOG6a*QvUJ{=9o&gJhCF7AL?x;2ur zsc!c$FKM-ZWO!P$%7ASM=6x{2v)S!tw{F*nw;SmtjS_KYA+@Z9IR2hQE6k%D?DY<; zX=GIvVD_0n4+I59SC`2$!3iDKA^r)=@{;`HFajG)_V&{3gI`cfKn3D}sx)`tt#kX~ zsyRC}D+>TvfQkWtUmX+x+}8pCcK`q!?;vdE7_W|R1aA^tkGIErqK^&dEYxMeIWnyE z<1;8|Kkg;k_Ryp(KqLkZ5HyNKtFke6I#>wC-J$U$A1@>CvIT$w0^l286##wW0O$tj z0ih}8P1-yabpl_1d%(tXxh<_uH|DUxbmHj$vqr%xCv9G)8@(ysC~pU=1|==MIc`UD zJmNK0$9jNSH;-*zuiw0|zhhF)K`8E4Z_n9-U7+C2(4;}Zt@WtI3AcNU0xW>U5qy(i zoAwpK=BeobD8)eMss0=d;9Wq_z5GkYV(~n7lDB?VkH4Gepfvz<7J7$u{Eb9J@>Fw^ zvXJRGG!NXp-oPy#wyoP3T^-XTglg;Y*BTETkK`xCzloT#1B4MYC%E-(l*YIjX^%7K zsjkOw1Ac>vWA{|A!+nh3Vm$XnH@(mWQoW_kvcJr7<cpt@U|(~qjmUMtZoMt6i{p9Y z0`QfsOEf!5OhO4OBE7#q78A6!ckd;TJaxI~w7IkyUQ3?GzJ}|NjE1B%AN>b3z54{3 z4^@r{?u+`+SqF9UR5LJJczTCTQ(1V&JkvWbuV>6ozy~{lQrZdByI?BN%1*%Q$z)`K zV^1h;v3v47u46q(gnB7>`(V|?r0}eXo|@Arw|Tvu_V4NuRj<Om*woWeg>I46FS2%I zgX%zgrg>&E!u4y%zI_MI2hS&aYE2Xf-_}9RIrmQl0w;3N_qU<&6o7&+RfkrvAB!Be z@U-m3h7I)%*io4-uWBwz?8gtsj@>u`z?TI*#Mm#(fqa){HEl+#Ofy>Ve$1WLVvDG= zun~^&H*wGd#V5WAidEsMaiJxO`761+zVj89*A+Yzm=-f~h-|+XIIyr=Xe*U4XeM%v zJ-WGQMPpqZu59vohbdKT&Po?FX?$DIBsT_m*}gp0j3O<I?u>%nxlA<uTNy4KC$JTN z!F5RVK8dsZT~PbnqE!D3L!o|)gka;P<hK~ynSVSn@lgC!(@ZwYvF&hVo|>PcdT<J( zuF~8bv3vzhi9%a<<1g6^FDRNCqB}pVW#^Z&5VxN*>emR=j)UYqy5kGyg+!s|>@@aJ z|2@Qu_)gjyf;;07Y^2W8F5$x{HH=}+9)t03T0dUzcx>uD7b+bWI+}!_45|EX6^=ol zpL}cc^QU-o-T-SOmLBHzP~rOE>!e9Z{_eroxk3OkD%XM!lZuh$GFFq<l08UJ)>F-x zjNrNS(#N*F<_rV`5T67xd7`t<aIQso%~JI=zJ)g`Zw6N|gFD%2BF0&Nw_Tl(53y)e zCr`m?;_Tg4PXbeob$B;ixWU|47Jiz&^Qjq-xP$4!353TEY}Ok<-v=k;w?^Zr7~tPv zfxo0V=N;7{A7)?BPSl*;Sa5No*HgF)?dy?-pXPuA1JReO<4xkY^Dl_1TQ(N>Q9@&A z$&A4cL7Y($azo<?wrM{49=ST2{$l+wug@6%{$z|~cO`O+<cg%%8!p+MQ$G)krfU8S zaAS<H0oEjM^x@r5;f997Eka}h^&CxPczJk*Kmj0u((vWKiuj(!86v(f+yJ=BkHQVX zojee1FbST(_4YVd$T)8_P7ayu1xL?H=A#l28nX14qn0@LCqR4W77a9+PYkVveJTtH zA(VK>#xnIYtGGi#pwH_dYCtrfd0x$b?HJl~wRwafuK7!i6BxV$&-~vYUw`xFGq`Q; zezfn+m&5+_xWCt<cO>8ZO)J~V_72s@1E+HK!18QQa8EKEy+=2!*ogj;VuvSV2kVEm z?b|IIT{S)R6W6!@9;|H!d0<5H$h=L>XiMiq`HJVgKx#<Zi~P`u`Wj-X7f@TG`JFKE zo9CcY=C*m}(0O?`a;H2?i@F8aDet#-%I(-G&n8;bE!=GU_ix2|H$Du5J;#ps=7IA_ zd*WEER*x5;jl>?u!HMEu<)CNb0Ow!p%jB$w3BD3?Rj*Iw=v3fDgqAAr&Fj%TD6;zb zF4;-IA~VEX(&o3V`z!SQ;ue!=9gv1u2PFDkVYD5B+x7kqm;Av;DRWOd@CEYaiVlTm z*}yXP$lU8wv$bjz_dGQQ_v)=#Y}bD|3*;R1!RlZLq=p)QJvD{0ox4dgd5BGm9Zm6r z=TrhSh_e%aWa%H-@<U7sgvrJeu}KL+Cb6_fLy={2kfBQ#B>8&<tBSEZ6?<yl!99r^ z5FFFIv%;IS@l?rV@9U&8=3Y->vp^LZ#~*wm@-D(vG|R<c+@Ag?2n=lpu7*}co5=tQ zmOeSd(kEwn2H|1kis*v{P7OQ=T&SvmyW4emENa0(E;>X>;SE+-HYXvT!o~vpVRX<^ zbR`4Sv*!mf(jq<Sh)Qf(5#lm345oMU2@HjBoht%b(gmEmD4Cr!BV05C?AX#P44!sN zwX#G#cgU_3EIa37>juIqEEYw9D-3d<EXoe7dOu$FSt+}QWy!|#f>Rr;Lc%6Yf{(`@ z!EC*eTKj0?Hp=Zo=$V(v7^XEt12W!4=lqoC>1Dx;?dK8q96=8Dz#9K~dLfwO7wH1@ z$uWb=*rdEbCnPgi9s5oHCNo$U`%TXxGx%8SHyympAO)NHeR^q`!DnK>2g&dCvEOvC zFwOn^?d(%Fi<vL9yiL~?^LBqiQ92}<CRyl&+w{FLP0BA5Zqtt@_=7Y^L4!ZYND9zM zJw<l2=jqE5d~FS00H^SO@YhIMM%ykOcGVnn%nH65J!+2FVqYHt+Uau1@$jtCqgZ*q zX#ANYbgSc8@HLJvDNtgLVPIDy33FTNqJD-=r0F;%QjOzTa=Ze^-46EMNOtfwPF9k? zf4n|t*V1*pkfb+*M+9C}CWn@v!g5Bave0rR7w*vVq;v=pX^d%(pUN<V<EMiMQ%Cm^ zQK3~JDb{`^i~GeGsKY{x#fQX_wb9m`pF}JbiH%Kfiy>Qs7AJ#&2!xuLTMy$6XyBO; z)Dx_lk-VgfSv1ES#am|i9ITl%EIMC9N)wV@a&0uET)1doWdcE@#gvl^r+T>{Suf~c zR6W#JIuEq;RNv<!etz3i4WSz@zVE4CE*FbDD-2vf@wR56DBg<kWsYI3n+h^P!5aR% z^Wy!Rrs}s={de!(tWT%^U2C42#Q+E3GgNN@eN`fbos5IXU{Kj%jTV*70&HaCz;|n_ zoojMn*t!A0Y)NH>l39dS+w6F%kDwfoBGKL^TC}L~&#a)9^r4a2Dx<Z_<S%hl4BMl% zq$Q2iX2mVlMBW(JQZz1-r?xI4G9QMJxRVt5wl-0e>xyXYYTldNQ0oR5h!~OaQA~bh z40L>%(Gi?PdNPOt{C^SjE2!DY{tkAMlrvgOY83&oO=HDQl(SLk>zBn)spd~0*o{qS z&Kx1Dcn&5U(TB14;luINPmV?P52jYZNy1P$x5CM;3irXV8>g^j%GCn=0`Nde8b||L zEEg;^-qa>cmGQM~o@SL+g<sPZmK#H_zZFbrHi(Bg;xSN_%C78+yE4ykvtxNiUD2)Z z-#q%4sD6@W3>wZio<UjZgG=|J@f?QK;;rd;OUgj;#V$1-VwrY&^phXU5EFXj7-Qqp zd^b)Q8&6P(xmApGJvE$aL^Q*Uso>us+^FS!3OIs%;NSy?U{KbfEyf3O5`$ZXGz7}^ z;tfv*gVj0MU<pvpABcusOF;v0P<#FqR>N-079(#!Y`r$@`Ubpb*mkM<*#w*`VCMh` zHn<jb#S5WYR*ZXM1qV&+lFq6g1O~gvf-^X+80*j@b;A)0Qr3(%{u-~^eR{weW}wm> zL&}v`HDl>_K;kxSz^kTfBXsha|0TV+Hn=qd-AaP88>3K@|3;Yc4q#UOHXy58vU||Q z>Vd!W<dAfMDep%KTv3UQe{I=auFAU~;X?cay(0q1Uy1*B;Qt>U80gK#y=U<KJpSK^ z>v!;d7XL5czaRgX;QtEzzaG!F;rj^we}w=4!2c&vM^bW!j_LpZKd$ujl=SpYsDS^| z(>tf8cj=m*-p#Fl@>cis9{B6>@ERX)de2V1dZ(v3`2Qw^1)8tTMLsi+s%PJ#{KQYc zu(r0b1bmb1+J?Lk*atH|IN^Y?dwP#h8BJhfc8AiU@Mn-eFeUk4;4yW;L{wdOg}DeB zJrP{DYI1nod>9CtqhEz@#!=N>SACV_!b;LV(kr4la1?=W)z@R~MB>bAU>Kd6AfC(% zxR<>8p9Z1TC~{<iG=fXWaX7{$`inSq=gr3jtM&x0MuoF40T$K}o_0ZPfL9NMPzPY# zd;w=f0&^DLBeH@kn14mf<tr5URW{<>cJLPYd%52xPhn3+tm6XT>D0eNI6<VY2nAF_ zVLdO+B40z{+q`NhB<G2*o%(Axzo6#n0#2J<jC7&MuSQ2~Vd%5NzVNgy>Ko^<qGqy7 zm|9QIjxZAO)L^$obd<w9pY0<p+v##Vd<zfFB4kW#ZYVsV+d9dwyloE;m2(4ZtqM<| z0l3-S)gV|SM~r%uu~x1B_Dux<S7gfIZQ$I<loidvTdulr$q6!NH|sEe=>6V?!ovdK z!ec`T;KCC;I>n=-9FE*;6M)=J6H!9-{}2SD5N0O<H>|BnPN<o0fTV3S3r|LeCeFi2 z3>pSXp;VNcG((L*IkWHtxPcHxS9mg1G$+!FU{Y`Ka6}k6!LSqCh86~YfPv*ijg26A zp{1$O^tgn1z`Wd1{>uT1RKgpp=)MD}X(?(FF>@TjJvA#)35{C0D*yykdK$-2Bjl<R zg?)Bo{oawY2eE)~+ADk;6~5?G$pR==W{KtwW87E7UM9yMf4iSq@^)l<g%b#naUBK} zBE1vt5*etK)5stZ@y86gx&mCRe^^fas^~~GzEgK#8Gxpl56!Zf%$I;Xt%W-y$4q&t zA%(AERE+j}4dwsQk>)~IG@Y)(04WA&U6~iLsy;FU%F*~NOg^*ELKDC$pb6lY|2mA` z+-sdYr=3z=sFn~Ej>AFgCjcs-F@Y6EIZ<D<D#xV~F5KcMcU_zHtwA|+(jx4v!*EL8 zd;-(6(FL4?Fktd_RIfp@6pDhDeF+$Vn4|tZZIvmIUY5@fmz+|I1g^xl_<#ae6H(`@ z$F>tuPXS71i3%0X4^3JS>4TDu4Opwh`BUm{6ye<JISlk;swqIv@~Ix5s(-op#TT}y zQFwt@Z>t-utDPzvS76n4v@}7I^G<WH2?Wp!yHFQ4c^6U`;EQ(7X&{eo3>A#HKGJ}{ zU^{Bs37dxxq@i3!xO|2W=CW>;`5SqF5s;#`CfV(`=WWp*+d;d+?5e*VZ>PN%fBjY3 zbNY+;)HAWl{4^>@N3DKh;Ni4vx>>jYj|_y=FUU?+i?<O6^yzZ(fY=^UM-rA0nt(+9 zKWsf(f3N`bH0Pj5bU#&H<Gtb9*S)b0s=-@8<wwb~alzz#EyX18DF>;F26`aQQVL}x z47CKK#i~UtK{-jNXpy$biUzu^rJy8Ky9~e#ZsqBQ_b4n0)$&(xYn^qE0+Wy&dV*Vd zEMhqdO+s==3U1{ghWAEGIsOW6<$*-X$vyrGZe4HPqW~pT%U{8*+{};+oE@eBg&h_z zt>D%d;!h|;kte(ttnynUq!>j;=nrmP6)#OOij?NP;8rr`RtuD*$P?ZRR!vO`EaGWB zkV{sUCvOu<%l}5Xnv316d<H!2)V;4;n6NlO==(w|Ot7a9(lMcbg<BBba23KELaFd} zz^V`{wST-qs5|xEczP<UD?Bq?_Qqxmf|0|T8mV9h-e`$mxMY?3R4+A3D!Jb`u0a9F z<Dw{JmaGm>TjeR7<O^20qM?%2X2~=7C5RI$dB!Yx4!@WQ9M7IJOE%z_J5;g(#KWh4 z{40B@X#wa&)CXZQNbXMc`+5NYn-q~`KeO;{3=k-37VZZUnuUi$a1baw7Ajg|(Yh1Z z>N;WAO_6RI6ixVXBFIG3HH;014kr2g#n0IAp2J;-R~d%`-eremk8u!DRP3qw5sD&G z827W|{_CM@CF|J~9SP0MAGWfu)XaElo?x*%nc4XRUAiHK@30}f*FTzL{vf`ILA_>g zVjn=(^AWloA4?$H>d&{8fC7MbJQSB93{TVH^;<L@-l=|xD=utr;RzknjidsvMt-U3 zVVpi8{+4W49B7;{#d%&34ejKkb5;CqIGlE9MMZYwG9Zxp$sf>^WTQEV(Ult;fK3%D z@VIT~U-uee(aNDAZJ^jrJB`2N@!zJWLXg=5P9WP(fE=qupt<6K@<6$<Q>yP{SHEaZ z>#8?hD^-Vs8<GFOr*6Y3fvQUv^ffn@8(Xj<E7ZFyt^O?<(7J*}x&n#by`!~V{vG-; zs%s<J%V_;jY=3!l0OJkD#Jh1n`t4Kq+#`YgXYDXf;J2EMpPpA~KM#Wj|1@*=yj7l8 z_XN)m40w!_EO3i19~lxJd$KgxJZoWR;}q^k(hx}lV8u_xpDD&^mi9{NRL`qL9T5B& zwSk{|X(L<msWacVT8>YxT-p00^A(p@7|ke*OuMkUr}JBul~7l`g15~FQjN6!Xy(`a zv2r!AS@nlN(J0PD*0<HTX=L;9qw;taA4kDc=*Iy*9?r+#lgE$o@yXcZa@>r*vIX;H z6thr~{I2Kk8T@^d{H93LSis-c%5Oh^SMzrt`8|ZcpW*LL_#NC?5Pjt&Z@tJ{pU+1R zcJrzcSLVufc%o*-dT^MJkMZ%F^7t?xe<SwzPkcP8D+1~^vCK_?wDy?@BJQ;Iwi;e% z*1Cx6`N(|D)Eh9es<{%3K7i>pIRENi)Pl*@Ao&b^G$zKX{40Ly3b48o>UcJxj=|14 ze$P76Vs-qy-8y=Lhl}^)<L^28QOP<^#_G7U-8w=Ebv*B^gY#kdV|85CZXL;hP`n?r zoppRf5I4o@IE0^V!((wm9sQhj{ET%Nu{s`aw~k{8bsVj9z~h^Ei7ckikaUJ-FZ5#~ zJv7}^I9H}%hHc-o4xayyy|;m{s=D(2^KyX;xo|HUHEPsYqhN`Of-Rb$0g@0)f(e0y zDj+kZG(~Eo-YaPhn0OP-&EZ-)bvinawm7v@ru7-MTHdsp01{A(fL8HkrqnX^&`=wd zLe!M|e1H3#n|t$u(3$x^pU?C8&*c;LI{WOiU)ElG?X}lld+p|_JlFP$CjO30qz|Km z(PPx>EXRFgl)BJ|`<GhZd89c;WlNCn^N(VmNfk(++4b*+u<X6}bC}7olL`44d;zER zT~|_>fG!qny6*T6yIwfoVW)-yxszm^Ra)9vSPD7nhM6-5yP>$>{eZls8(Y9CwW791 z?YMzD(qP)*?Q<slCGEyJHvnD>SZUAW^MjWI8Va^gKT+LZC_R4NNB*^S-<RVw)~)*i zjQQNU|3G~(pzeEl?bf{$u+n~z&kt?_G$Y5p;d>{*`^e9zd%0Vclg4{?|GF<v)cxJB z53c(SiMn5J>i%!%QTJ)8yGE@2gTFgL-OFblAMf8KFNoD4vy-8j#qI|#-VY-<xOl&4 zh`PTkxx%5DHvlW`^Hq0wHZ+{Ve)qd4sQY(Ij$ij*pZizV{ZaP=x9$yzx-Y98jQ3@U zy5D5#{#8CdC<TDwQ1(U1b+_(gBx~swNQ~8A7azawXS!7}pMiI7gItD9uKmH^>p+qh zo?wRLIf*KEer<3SGZIyllf_DV%Q;l>Lv#a%0ovg;3H0iQ(tx?4)G(4MpHaC6a)BtQ zR;JUgNqbd2dv5>AZKE8w?>|38<$f*|h12&x0j#tyROKF2<+8*Fmwq+gAbEKof<65? zJ3hp-IKq|<H;Ysp=L)A6ouuv(sJb?YRI1GwA1WfreR6P+wun38_dJ}Q5-rJNJ^o7$ z&EK<F%O8HE=)7l%`(SPFyr<TMJMUTULJ9ZruKstWxO?-1`r7d@P-UGX89rEB{oD@D zy>oWU^}m(A3MWqCo>6FhdNP7};T~UTGA`d%<gGg0^`|tE*&+5Svw|moMP9?7Vk;(c zq9xSZHOiWqr?pIlIWHl_-}Y?s4X^4+3H{5W*oOI3E?FHH+fb*NS8J3$aN|vm3Rv>p zq3k~U!CpDn&_U4fb83H@vy&8Cua;u;RXc^=S$2AbUEG_-?5hmPi&~7T=v$=dWJ&C_ z$<DTX#H1m?84>3o3_73kUd;DqWI2{-4xY(}6_${kLjewo&3dyB#ZG-vL!-FKlw?S* z|Ei4Iol{Gbes$9#yZa0$%YG6p?L!S4-eg)6I)#k{E273kyc<>M!mX1Wzl!mXbc6-x z)x)XsRnjL~ue6Q5I^cRptW3Qc^O7+b7-PiUycY|#B;RO$t0bE)pk^=Wl<ih|^x7(V zu;%$T$=QLu7HQbpfiat3QFT*^ikc{6Vd6M=Bt2Cy>8XeP4c=3gu~vnSyN0*qrN4gD zqR3dz*uCLoQ062U!&}nuHZm3uB?+v8A%oY_KD;glx+#fv`|n^-ekHZzETQ9OrNZX! za5LiDgG&%QIg7etGX5}D{~a6t#l4HHln2>(DGo%ukqV4NL{vmi+PlbN@tqu-sM5d+ z<qlVu$Hx-K63wY}bkTW~p}!e!s6JBts+Xm5@OX>$fjAGFCzz`KA|Qv_0d6%9U6v?m zaN{4#zdorfQxF>gLwu5HDkW0uPlx6c21u{<3Vt=0uIclvSrwg@TER|K%=mY7Pj!T* z4%B@oD(9d<<*1tRk|IA4B5rhcvAG%sxo+C$N2LtNCKJV}lVoszZI&!1^<eNy(_f>4 zSBkYv99VLKA{GqU0d%7kzyToYlfa^g>+2oMu5YvGK_$5;l6rLC+3iR7l{$>X9YBft zfFv(x;_c7()dw&AULO^?SA$Wbuk&6Fc~g;lg@ARc$h}FFV3-u;<AJi*%7}QabR28K zUF1R&M>;e!lFER)WMGy>CZj%_nk;qR)#QgKL|kf4aO^>?Di4RJGk<Q&S++GV(;6k` znQ3%nxZsJD;FuEJXuiGZMqGOu(l%UtQjE3z>CX4D$s1wE#l17dpO4+v?Qmleu~QiM zaCyHxm%>=D3VH7s6PvujW$7XBZ66wrjBAn`8H$F!;lT_*rAE`luI781%hjd+=5K%| zXBhhL)d3HNV)j2U6z2u37f}~Cb%55!@NO97im|s1!=!7)C~C*C?S~DEjbok)4jhJ! z;4GOhI72zJrM&@1b%DEvx9q$vgIq`4R!OdRlqJY%h`c-_j+a+WJg?d0^(Ci<GgL$G z#{C=zU(@El+6%Yci9PW3saKbZ+jbgmyR#p+m5pB^%}<FtH2BQw>>i?Ni4O)MqCY>n zNqs3?EM2qV@5cqke1BZv2L2Sf{0M(HY=(beeG>gr>YBE+>CNq-kKs_vmpv2qux$gY zsIW6f^)aZVkvNz^<ziPpuovJ^LwvIU94Gk3z;8JER29uGMm3Ov{?LpUckOsBTqRj9 zF!D{DE*xAa>wZk>xg@59?19qH{@I12QgAkta3vVtmT7gmT*+kyF2C+SpPc1bhW^+2 z(>!sfi^bb=kKdV7XiDV!sy?jidc(SUkHfl5r5S%XbEWIp5{LD@9_M09jH?52RfmgR zF_7gXxY%-aOdl6Zc-FNRqDJqfL)dBTRuJ`QP~wLs?h=^IYPi{@1GB#0WH^YMxe~3L z8ID~GV2Reg2|FU?nJ}kj<(*<>W?;%z4RaIsxSN<51X-RLNe^#DN#0!;DelfM4m7+0 z!El4M@v(eW)~fTZ9+yALIqd^n<6_>-5SKfz;SXZ%oDaoI?;ggk*l@Zo@}1$?xQ=CK z+Ze|1EHj2@n=yPX>PAUS&KUjz%p48KR0+h?8ZqLqMBF!wi2G4Px6b3rGL(VmHqkxc z#+?@TYTM6@`$gOt)o<o;Xpa6fg3CP%NEP+GfSN94DiX|HD;8A5)+fuvaxAPfWL%aJ zEVS-ZdYSipUuhy9m?=)VUi7#x?on)K(GF)XplFBL-He$+koA%Uu0C$KL%r5FuO|eY z{to0sZwIvBsal7hQ!P>(raLvYzjLF@_mjuJGejRdPVRATWtB9@usB^?Ate)C5N}D7 zUC?KhOmV?n%WSi;+bTaf+~aJSEjD1Ym1;IyMM`~}pAS3}-{bU;HOnMNI8O=Pt>qKy zsBHKhmK<;vb`9J#mPvVZ-=edPkQnC>aL$j7D=>FGr2Y8dB>8Z0=<j5u@6m|f@&WdI zlI*QAO#TwJ|3Av#@QVNp5pP)K-OG^o%n5JFf8NN#!_x7N6G7p=Iu<HO-p&~4B9`mt z%ymxgr7=HxM63PG#2~Pa;`$hSx5UMT#((bf#((Zl=pXq$p5WgwqR)RW4v>2s2gr9t z3mgZ?-|l#CSW~BQp8HLhoO~9UYYJD`7pzD)&rPMqiE9ZD-i)R|?U6fQbHZ=dP*)Sa zibvwA>`FO6u8{-ee`;`?=e}gGd*K6fT){ad`-r?bO{KntD~A{UNDt5Hzk@nsJE3zA zr~T}ISn22{bP-~GbXJ<nHd#3Z{|XHL&02#&Sj`}pRqK6@7GuaQng^YiNtoA-k$wKM z6ZqG~k)zDTk&fM>ga5=mk>FqVMB;!teotgqL*kOiTV+Y(VE<P8$DsuFXTh!#*uQyM z680zZ#&WRlKhjZ%cZ90UE^o9d+u$BXS_zv~4^*fJa_)@xz(w2W0ka9$%@kN&6AN|Q zAAYfK3+`>ri-VB#-3&*^GH7qE-g(jIza~DG6*3-l|5MVQp!I?M4_Rot5I^KNX{NPk ziB(c-yphBGPq#9kV1oJuDof1Y#xk3f;9UF<iJNf;RqK;crdmUm?)sy^S*16H3H(is z%7wlDX5(jkrW6%yb^Xi7BVbLEw~dJF-&}~`$+<0~Z)wZwJC8QsJ&)F|6G!GeT4J>y z`f_cG7e&=V@``UBPOY|Qf5Ii2$GIbUx>N6#SbgS35&Whn_|IS5;nt(?@_>!4nnF)b z=@7akc|0UGNDIBOC+g2&hidd1IlJm>E32rPUJRttKf-i>_dgla{f!E~VE^tr$thu_ zNtG;$SCVwI`sXM`$tlZX754AGWhmHf%_F)Bw{MW^VWa+w<9vki{q)z|KQV@b?TqKR zM1U~&xgYgCp({A@$hg3{v}6Q-m+|*i{xoSZou)ZHl+uk4rMP^s%f1^ql*&))=YQVv zeb<UeU5nbW*1FEy)S*q{MV-Z7xKoO?d*Q+VrFG&i`%&lX2`p*Ttx}H_(ZQ$CDJ?q< z+BTcME!x6dzbI19wPP*!9g0=g?q||=y#O8{9|nXG9%>VprT+40dP?$e(s*KSS?R5@ zr)%uH`_$Nuc$}LjQ$v#nZ&1H6!VHm`+EQrL^>lT+Q=nPSEZoYqU$=b^_h5!r2VcbY zeJ6wPr?Jq~<4{;BxI5omyLWa?ZKf$lj@0Z7r<@EaD5MMWMYx60z@}ZAFD36_&nrEf z@!uAfOP*JRUvsyhvvJDp9@0vO@AC0dxA0m1WKT8|UUx2D^WXbJ-Whh2YR5i?SArtr z7SMb%%X4(vToR-u_TuFn&|GM~Cl3Vd>&lZteZb}016=N(@sG}2{L&Df7jGW!OeJsE zPqFYt7w*hfb6Se%t-c{`N=RJ3P3}*K#_VgG4G|=k2rs{!jP2^gfG+h~PwqY)vOI!I z+2OIsYrv5v#W<d{A8CjD=#g=;E4KmRX<Ke@d|hYM$`_}7`rkXwe6exxH#btWwW~Ak z9N7_ROU!7oFPU&Cwpq$bNW79+0iK+{S>hAV)12oCTx@^Q-{8FXIDGDgVa~MC$u*gS zNwdItD+OsEJwOb)@R{{iO?6dmcQrQ$w~D#0{X~pfn;os?;0q403x^Ws;A0jK=VO6m z9x|%T$U1lyiJ+IXAQ81>a1dv$+~et;^fsog>l=MPGyLxGPf?eYc&g*$=bYN76QiX3 z0n;Oix!>?Rqs`M`IK_T8EIaMs=$jTn;hI0#3Aw-=bUvqct;xq+L^#ak<4xpaJklKe z1E_CW<yrG9-6#2PJXF^nP87cT9|jcObWBXs-z?81eV>W0t7~6NeD>hL&#X9mElNo_ zsq@Y_Zq@4WUUGJaOX%F{+Q|tAwO<%m#H5{9&GxR!wyJ&BSsadYZ@~>-JT1J%lRw+r za8Nk6G~+tn1TasY{%7^3&Ke7CRh6~AME<XTUo8(L(B)JkN7V=>l09ycCEZXdB}*@2 zHgZ&tEMW2GaQ2mPv8MUk;+W+<ecSPY;9TSju3?Q|+B;%uJ9BU-$7G}LC6STG8(1-k zi?oN@4_-+om9<YND)IS&m8h((NWAq8d@G{>oi_{Lm5ECm2_jHSdh#%5lw*_~zuJ<k ze-4L6wY+V%C;Y|xteII=5S%Br8@Gqow7Qq6XdFxZXI-DkE%EQ2?bQjE)|GT19z3n` z!;y!)nz%L@(PqR+5dp0|7bU=E$u-r9dm?}Kp^=tg1fLr`nr}(%FN?V;{LzQ0i8lCf z^eGn#)pn7SGSR~jsS$Ke^8P8!|AATF_-#!C@Yh#eTF?H-L#b-Kt02G%we}&?L1tv$ zeE$HRyL8R(|9M<sFI?eoe=;r*<!>8*RGQz={uirj=HU5Y`t8nS15XW3mmH5$?ASO2 zUHBqb$Gh$}6E|p2PjMy+<Ue+<kS|7KPe*0F&aO$Hp0VHb@92Zc-TILG;UPtYIn;rl zH7UFIqE;v0i+acROrzntM&#AL4P#Ix_07ivTy`Ju^@;5M=Fef-1BW*2w2cyNtX(?F zQM7}zV1c;ph;C+f=Hbm_LEWZx>@(Tl_z)yHN)~e?X@Dlgx~h`9Pxq3>FLo{U+RtPk zmQPJtd}p&1ESvBLxq;4sJIENu@+RZe8yd;|JjebhtWY6qmn(O@7_ZZL)X9-TPcz%i zp)r;AW+%N#YL37AS6_^pG<>Ir4Dfdq|5oj(tnHx{HTL$Uh9O8L;-ov7f-3tLq~YJL z;eRK4+k*=_WC~iCT#(Y8OhNWv3<lyYQbF<@8@|&wR6*G}YSH1ZCbdZEPNtx{1{d@` zT^+s?+t9%+@|c3G<bss$WC}Wca6v7mAUr(|E@+}D=yS;hWu_Q9#RE;8X`O}G=a7PN z!aF=Pvf6&U*C8D)KTl~GXU)jsfa5`2zl9H`2CvqCSJpPrE$#(-zx}obk$3Pyxz@?1 zPuvUJDZ$Iac53hf{dY!k9uGTtuy1_o#z)Dz%eOK3b~zTB8|5#o!v5ne38wP>>e@Wh zveG4St}<9sKlG_-0;-wTuQ0Uw*3EG)!uV!A?lO>T<NHYU#o9c7yXj*sME&<~m9ut@ zYutMex{#>NDWRWx?~A@;_zB$HT|^K1YOeDYEN+om01V_ed5+1!Hip!Aqc70i4Az@s zAdV&RSG+VjF3UI5`3}#pUU!xU%TlYXf>zGDXIu9o<)v7#j@@4pO>;V{{u-2!zRlu5 z6$q|92(E4Bh!w1}(oJ8e1&qTh11#?6n$#q=FhYsbOoCEcSlElnI4WuUuupo~Zag|N z#jsN`LCRZ}QmYcHBdPX96V2!{wGanUEpDS04);EPa229d;lj;Idaz#In8;Fb)sbl) zd+%k5JjE=O=ed1(UYMMx>pohdi^*5X59ajGS8?R)wZEN|uXuy<-OeJ{sq0Yr{u`y5 ze3ks5Zo5mWuj0tpXMZj!U$Fw^d&_6$+Y--L$q&}`&sTBei~a4T2|Q@zE8o*UGv7<% z`6~Irtp52bj(jui+njveDNJXYHfi|TKgHKPGdhHdK!^hbUU0G~yRxF%_UD+%DVNtG zfFUNQ@}4+{$x3OsPFHfE0-M_BWjzpDG?<;7>3m}bfAWn2PjYXwN`hMr(b=V-pc!qm zc1Jd=;s-AyX4$DV_Q7>(fJch?@$5Ct$1-PoQSP+}<G#U#KXlYo*tjp`gPfBT9fP4w z;$wfs7a`X%Zoww;L4D}x-%e5<oVrn4o1#00otjG@X4(ImXK2ItOi$G%8}+<#H7>Wc z8T1`I4^^XztEhdJg58(%+?Q!a54q~B>WbQm#HU|0ZvzJpz&{7`hOZwnD5EZu%@hD@ z`07UvYlzENl^m#$!ebh4OPs|=PUve6LmSG!z9gbe@~>|_Al_z=JJ_e!2wvoP)<68s zWY7AJ(|I$ez5VB8PKA_basB5#Ff~ZPc=UWw%Dm{bn8T4B`7cqwc<sJ^{Mx0&YuD%f z|6Y4g{pKF8e)&VxZ&|8+z}XcZR72{A4vFh_%DvTBRrstY4j`Iyb?x783GdH|q)xZC zUzpN}E@YZV5X28l69nF1LW0n5H2q$q0_K5#<y$i&m05{BIH&z|&D5d@*8rRax*ZO% z=^^^x{@?E<S~gBLR&P|>--3%JE;UF({o=z0^>LE~GX*Pu>;q~WK0iNT-}P>vwm3A* z6~)<Oc2Lb0ku$ZSJl9@tBWRA6_f}f1h6bJ*d+@kRi}yZqC=iuPe4b63|Bb$l^BW7z zEjGAqt34d62~;uRj+ZY7w)Jvob&B1zN4db{>Pz4;S<J0E#nWQEXBvC=JkR_<m3>2B zvh%oeBMa-v^J{H0R`Q;l6OcQ6`)jwx#RGS>kMiPyGphojjB5K+v+dyN@@>BV>iGe9 z_ly7Z9%>wGxXK$Spp9`F2G4v-yN_T6H_t%k&}UVRea#xaMM%Jg)89Ok*K1H^IJyJW zCSM`~2_Jd5S?2>SE_Ud!_T*-V-_0rTgwAE(_mqx<=|}g3f9nnJ%uL_qU!U4lV$IH0 zc#YMOn_b`?D%FP6t{kNz%pwnWBc?<fF(ulFDaqCy1UGT?-w`<d(KVFru7)MXR@-0r z&~#YWx4FN^YnQ&lt^wO4Y<J-^{H0je`OGHSHPsbO^$yxb*v04mLDwE!dL!*+E6z8V z3;pf`lO?D+b1+xm?!2U1xq`{xIuXQBL{?!%jn-E7(fbl;Y}u^&QBGJ&kdXW>Td45C zcK)lK=$p^ATVDIYU47Mcro*J^EIU@`tKDd*L3f2f4cYdaM#~xKDn#qHIp=)18rM{{ z>?GyJMo)RbU$kX&8L<^L8?y;`tf(Ci;OMQ%VZ8khCWq|7?Rvl4A^bs-{jc2@G*}3o zj?yP~W$>{%h}fU66LBIXI=CKZ&F1#S&o~Lu=4Lf$BkES?1!FGh6tl}u#q6<>xPG$z z(yA^<lu>fMb&gm}wBr1Vie;&rf;7>d{ksHvfw8~JPT1MYj>BEjoZ|Xc8QlB?>v+XJ ziz(}Py4YQRGWeOa)9k*quzTV!?dWGVVfd?8EXt~zjFsV||9egVyR#ZQT?~8&h=SGa zKW0^ASz9iYHyaceXK$KI<q@ApY}yFWby@S?Z%x?rfWTadNPmG^VplG&nZr8sS(v54 zwzGA-=`g8`9^c(hb?v39CcJJ}E)g=&rc^i#(cy;HX}U7JKTE{S+2x84`{0Ti5FDi( zLO-?ZebfFM<19H&L9FdZU|D(DL##1IP(6q5DAt;l6}dBOXruE+C%3_4?`!UhxKXC% zceNDh(;|K?$r4=I;9Hu-tNS%Fp#hN<`|vPlm_jpadoR?L>7tqn`_$!zr^;Me#=u{i zNIJiDom}yFE6lCtxMaG`SDX2HePgZ_Yi#QKBt9KT-@|+wtMfAaY`^s<bxyJcu-+%# z?3=U&p*_Wd=TlScoeh1P388fD@s#`Gt41)G8kvm=N#E{*QKa?vgXnrvbbTl;#b0_# z%J!0rQtdUr?2chHom?GPKXu&sdG!9o0E*AgZ!SH~2x>oMs3A@a@%dS{ljXjJ2Os&@ zKg0}vPSpN8PuPCEh&bCT^v(d}Fy);jI+~sxjE<A3-^G7L{kUb7!O9JqoTD{kdq8co zRNHJPNsfY~?)vRB$EhDqXnHbMjEzlx;r?oD+|OKO)*p_ky~}TUhMD(=_5S09{og;b z?Qm7V@XzQ5&D%|}i9`fFR}JUtnR%GRGU=W%r`Emz20Hb{V-9->USU2<N_!?2T=1w< zDx8!*+8IxY(skj%Z6l;0))r;o(1_E6xo<KPmIzg_DHW)}%rGNb!nRL{(<q?}Sv>eE z93gR8YVAYya|3hOZ>zLBo`){rnB(d6l_X+VUT&`rqOmvInhZ3A5zd9;x`bARMqqvw z`eN64mS;n)E}e3&3UYS_FRV2~7kz`}+u-a-Th}F6!?_YgciZ@H=U~t#Z4$wEOJB4Q z?Zs-;Fqh?kZ{x4EG@)-Pl9?bECC$UY&GD#FL$flX(?2mSJQBK?%1?G$IDFag+B#ZT zxh!Q)wf&pt9LgUraqD4(2!jfY0{;1SS~+$6Piq2BD^V!w&Zz*6<YuX|uFpHXJgJ@d z?{b@Z_18>Ok?M?c*yZ}ZjmfPZC5Gs4(KR2jJ3RIVkjipK)fW<TKI@w!;5v4P*ADl6 z<2&Iul6hix`0VTZzR5b_H}bI)yCYzqtqw<+^Mo<t8ELPkb)fb3*d3W@1$l+E>Iomy zt6QB{^QAiAT2uEzu{>Hektp36H`&^T{F94hT)_Q!h4LCW8P_28d(6X=_J+4%oNYQk z-t}d<MJzt;1J2@;eTA~zGVEktwtwwLne`}rA1lnXDl*kK7bSE1z6%E(S~FM=a;jtD z);adpZy1~pF<xXf?~IiG0|n0nnTc_-qi>u%_-taF6k21g>7J=(fS=8pJ2x)(*;|dK z)W<GjhnZu%_N}JXF0~`bK<*;-{zKT|FIHiWWLF8>$?Z#;&5}0M%RXyEeN6ui^`x1t z-@f^uGw51PUCw^{KZg=i#LKFFeA@znpx<<B__+*39%U$t0cpG*%9Qx{ac6OlR({d) zZtUOWQ_p(KT9M6uASSz!&|$ly?bDdZa%2X>-LYlj#mp?sz#=oV^Sf7`id_uJJ3UW) z7u{b;{)+5|ZtMCiwq@CN@;o@C0WF7*!mF}Ug7r0%VppvSth&AmtKe#H`m0vj5l_p{ zZ=N3ThEAI*Ynb4esk${cIAZDu0)){oVQHGhqBSxd@dOd79)G0HbJoo8*1Y^xfrek) z7`r3OxlA#Buco)N#H{ArX-1QCGD~*wL9OsWBDRUq2zXgy@N!7^09NBz{m^u-0R=1e zzeWs7f>X5CD?VgAfOO*lgtIx3l7JlC;>D69V8z~>cjl$f_M$dGC2*C0>@+3?am+!x zaK`NchAOw`Ai^(SVvSZM9ucRrJWYvh$GCCE%Krvh`j?T1Vv*Z(`b>P%f<>(A3X^45 z<3?}ns6#R7OK$Q%*kLp}F7aJ_dxH4>*G-WbIYv#tHM#Bs&0RcA{cKOitq@CgZBLVX z!}zPPX6G=&4RI)Q@$Za$HK2=OzHS#Mcf2(lttnEH8AW85XaAG*)3bAdbBss`y${+| zIQFh7A&Elpn~88>Ux{|zuvU6WhdJY3TjEA8$x=>#f^)@Cw@5o1wKE*roZZuSthE1; zdVRSM35FhXpo*Hv!ftz)Q5X7K|Ctfs+L1jX0<k=6<an-8<CmQYYm>3viDA1lqMz-K zMo!8g+nt(zwmUc6O4Br<=t${QKB%@{>741~!<5dM4ilPbnrGLIfJL(x=bFp<?>j)6 zNqg~Zy%gidW_=;|#Y`gsujP~PpZ!NXQH|-;Sm;nJWXD1WVxj#(e6R*Qm9<4M<F1Ta zNf(v1tvuL&dWKV<OkmlX|JNwD_;sO!?W<m~Z>2ieS6vK08bELTh;4JwA-186tH%7+ z^f!yU3)!%;7Isgw=Jjw2GE&}4tMX?B{HrI>J&RalISg>nBK_t44#mJ%Op17@zSWQZ zG?w?AnhlOX8@0L&Z11v9Lw8<ne-o+#@i1^FaU#7{!UPi>6AJ|@V)J|mJ<Rc^TO}-i zgQF9Xd^p7Xr1G3G1fl1cP8me#r#aO=(Rg_OH>Pz-h0q?jn_T%h{oOWqbk>o*pPM_{ z*P59+E&Opt!yl7c^YY8gG~6%$=A<L>^|)tJ+lzbcb*aI0|Idz=gpXx395S1VE(#3& zW3TlV(#4*mqOHxM;R$;p^A1aM6sw-FCwgmIO|(8OGOw5Ok=4iAUfTPIBU@5~$kV+j z*?zX8tvZ$z*W<*U9*?5jp0?`LzHbhj_k0`P?n&Pj?(~E|4m7NDXFT;^C9{Kn!|Lir z>fvACu@vH%DnqN=Zk{S9IFL@sl8%GkMOIm>*S~&Rz`y>wu}eFC3*0#In(2Y186D#M zQ+1PSXslIIXO$M90rWq<#lODDn>tlH+#EY5zOcx@-V<nR?Y{B40H<4gt>wL3lj+z} zw3)nGixV*p$xuIM3c0<`T9pMKAKO;!JF+{+a|V-RV?kO<m!JOfuP+;(VRc+k?91=K zS6Fj<aDjjQ>Z(SHjuuo!?-kJWv8kconyu<hqkicf{`CkJrh**pC`zZs-nNLU=U=~v z8lKU(dH*-32U1$SLElChWh{-{dp7~dixYwAPn}=;*jiC%%`Sxfj%q9Rs)l3nkhNYq z(+i5d@oH5xK3k*891Ec+EvRzvRG8j@0aF{Tc(dtKQ=1HGV}*L!JZY`N8=rCNu-bfh zV{o)vlja(yD(*tX9bxLvzB#wfsxD=*7q8IOrb1);RcN+<ee<2FQ8e?;Xqy11BNJ%q zOy5B@oo-}OEo$?OXifF6Z*Saa>eYvtyIsr-s*nG<;=s-Ar&h^cbzWxr7VDv=CC{ef zz9%$X+yv=v=ET^{yhzQ&NHNZl9Lqu&bMP*!Fx&EQ;Z!h$vrI0C4|%J&Wex@!ux6Gr zQ+<wC!>+3HguYo-`*d+!*HdHv1l=2nCLQUjCdC|MWs8(LP&?lJwi*3ZwV5S}Z!?y} zzdZ{@&$5&Y8IyN$$DtQ>`49hMYhK4A_Vsx>-!yX~mB7y|0)m<`sDSS{1x#vhI@bQ@ zs=%U~pv^wYaXKvCS5;nXl<c|v>p!qMGLClppS&W!Bj~Yqbp6qq<%{0#bNLH|$@@2W ze|r2q)Yy-|h7V<hznzy-4R5hN2#$ccsY_@KD%GrLjmPqae|s!4uUnJAD09r5=LsDX zJ_xrrhPOAOt=x00A`&`e2mZ!cCKlUp=aGG)9aBgID|j3x#5h<y-TRDYX@A*on6bm3 zW~|K8OmkhGHBFwYhqYx->>Ay+AS0t|MB78@rSv<eY$qMjrPz&;;!Jj2n>+OR`j;9% z_1}?cb#&Ms|8q~=|7A>Oi!)(aT_gO@J*h|Z`5e2j-o!f3|IA0`yfJ-D89DWLhGQ8k zFSO?2Sk9RJy}F+|VEpvFvDff&JI*31O@3Yf5S#qVwT$oDwHNm7T|W2?^j-6G1L@7% zPfhQ%R^M&Nb0^0ln+-_)hLELx{-&Xx@UB=_8fRpR?Hl`6DaL5c7*|D|MDk_ej0?jr z0**3)`=)wfUez_xl`K)ZRSf4~<Cp1{`<A6uR?M+pM_$(}`+RLI=wjkb<E~-a>+wBO zcj%kI<e!<GKgNi-q>zQ=$1F4Pc2}`1y|Q|a^#&dam9JZ}Tde&IGj~!cZ~wY~DJK7{ ze);R9C#EN4E}cD8fV1d|Wu8i`{9bi^!uBsJ66&$%_ABN_`*yb+lYegi{H=v7P7XxM z?P@EXqNGmW6`8kx!j5o9<DQReq8_Z+mMn7B222qvtQpzXJZQj<6u;v%7|G17Llr~0 zf0J>9ZNGpZ8Y#9lxCe<qJKu0RdZnGhO<uFI^UL44$zS{dU3w#k!WYMe*Bl(_iKXPE zU)^Xw>P9*1(f;^iL)keT3(7L-7~#vhvlNt7&xv4e`|7f>ER!8)y8RIscNcdCwWX@i z{uwm)3-KynqCK(^p^Iv|&bDTiM(&ipYlvmW$FH0AP+O<2J+CHpvBQsM)LC`RlGj+B zOp_emO5g2Ye?>T!cE<&qBr%6OkHzI9|N7~v(K)HF?hki(GrGfnN)7!Ho;boW$=_<t z$P2e0yD1%1CCfh(llpf{6@6Q6W$F0l?~XB#Mi#zfy%bsbS~T29Q4_kY8FhP(S+B#8 ztipmw@oo&#BgOmeD)=%z7PXWL<~E_jdTCD&YO`XW{YBnc^X&XB$dtvtw&od1Q_vXn z7W~=Yatrbnd0O)eaTN)Fn$+d97VdBRU*+(oQS*nvks^<fJbYIH`<~xX=H&;hTeVMn zihb@?S|&+)U#wi_*^OH3FLNg_ZY7>MahSevX9Cpu!;SpEEG<%<Y0WICj;$zS1}i^c z)^0{;%v2J&exfxdQXDr<J2l)9i;M~Rs_pB4%}!x4+cPpRZ~3Eg1`Cw>ySv0VA0=Xr zz3j$5%J(<#RGQ*<Tmpx-Aa0kpGVdpNYcgZC=DijzKD=xg=e?}*{k3R`8Y}!yePmBF zN4CXb&#k}F<*X|Ib+OlX@NbQGa;nCTZRil@Ob^7#&{%zq2#u_<zw??)X}fPSk`82G zWI|`yH12VS&7cui6aTK4nbjfEDmU>!{=i7OLiP5Be}8PkuE@ee@PtTcKQ~w2na7<P zbu|%sZ@L6esOBAi%d<kz46k)VDa7LtKt|Wdwg+ab_iq?(cuCd`Nf_P82XS<UgidCY zzd12V4+*8i4NC0<O5Zn5PleL6>aVlr9Y~t5_E*@2j!RT<`NP4uobjrIOL-i1`OdYw zkB7k1-NeimaRi>?CQhC#fDJwitZ8*pnbj3c!hviLLk&;$jG<WT>DIIb)|WYn%LKIp zOr%6PlwJI?-r+?feM@BCYY?tAEsuc-%ThcSeX~b?pNt2jKjVG_F1Kuh3OgC-#y2?^ zU)asX2O%Ey2{wfzHfiP4<&`I#o(ZLS{`IHhBgp^w8yp-=f4y~7+qsROrrmMY^N?l= zD-rlj>!_J+91q=^-_!8Eweqk|DZF7%q#y)S|N2%*rerlOQocXGzJBFsQeF}BKi*lG zzP;-@+;fN9kA{0ztT>w`OvO9S1v~`FsV;!T^ULiZI~Lzc<J<LH%{q-dn1>i9>D$w{ zv`)d(_#M~Jybc=kuOB|?ZQgD#!Z?5jK#r28Z*R?Nye93A?9HmW<hu^6912rgv!?sk zkICPIKC%43Oe|%|A@r<i$bPH1JN;uC1RnEy{Hvb<HC<`eR_n|4`TP7)-TG_2Y8P|o zrnP&Ln%nUQ@xyRWF^8AIcX`hY|N1S~s~zuoGkWZEln(j58?-Sj+V+Hx6$jteC@!Z* z`jQ>tqBn!NMq#cneIG9N!|j{HJ-PmSwGIYP`y4#&Ac*?T>&l4EN=<*I%VWJX;gz=G zt;PCW1MKmRNcrJtMH);f{dNEPtGT)4j&W_}v1r|~*7BH{J^D=<J>mD6GE9XIGnbvk z1r_Bz_EPFoaBk4&UtdnQl^<>`x;&Nm{Ds~A)yE_TP0Nhd2SkAo)jOamyv4=ukr9Q# z;WPO^^ojnD!~XR(sWZdxUaP3n{Of1(u>abQcZX-}R?_#$+oT?`#{JYj&<*t$AB#85 z+6RvPkG~b(nwI|W;g$Q-{Oi+EnBFm=t=MUl71|FH!rPDe*Uw0e-snt-Ba6G$yhCbU zaW|v>)VA_tjUN{USr~$`$G5bWO*HLV`Huf?olkUE<@DpTZ;lJ><PVdq!M~y6{<EnD zf2Wv~gKv!sbn|zBzZ>4B9_jp2xjbdaUmCx3bMjLB<Uo&93gK0CY&mHHT~-#?TrR<9 zghqWy9V?2@x!X>Tdsknpvtecb^c8FnU7s<yYQAFUQvd60o9Y7B)>7#acrMH!;#5VP zMnq?!(SRGMfbvodRM-a<^+BbA+y#-t2u*#v!-r}ekz^aYMoXwXn{UX>#)?Ny9Ww1) zdPkG+-)j7o)S(r`{^xn^>|*QVgK>FA<TrnD$8)T2_$p{jyC&_#-|%|R82?kdTRmfp z@~GQb2F<QR4Kv;92*(N<+Lv0>ydU{jr7k7M+_q_>Chcr3%DqUNS~L_pCV!w&%O?NW zqTE9CK}Ej8QANJ&)*|0{ljHkKNjh;-j4asnaxy8(y~6ocIr-PmEy%XE?6EJL$8W-J z>&2#bC-LK$d(&?Pq_Yu(WRTu*p`YK^+tvRU(y*A;%c(0y&17}eu<44OU1?9I(sbF+ zwwC2)gzK~DUztKRb3|)AVG}rt-E{|B0$p5<apht<J9e7e<<{&v3{3TTVHORQ1;?ew z>HlAu{%1d-EO!ZeZ(rW&&T=JQ2kUgheVeG7WAEB*^i~DOLKs{nR8MVap5RD>lut&Z z6+Fe!Z!roRrR;e!wJYrkPB?CqI;$xrHBoRz<MXWxuM4EyaW#6NOPgYiM21E;K3m-c zkmCRQ_O9V=_ddb0)c@QL3T`V(&7i)%R?jG=G1|A?lLptkSL}3p`tJO>xmo_z6`)7h zYi!891ldw&O!zchkD%G|XL7Zw^Psyjc5(}aNkT)p(dnsxrHZnu>p>nZT|h!#wA8S` z4y+I>h@PAO#!4CP7gj_)r&QRVy9U!9*H<fv(Li1AoHyEKqgWQdW)3p^K3#jwzWg^D zwovoHgpxd?0$Mr3Oj=!MPd$bjkSCdRca5I3m*-fD|KTkhRpg>%cBwV7PNjBE*JoBF zcRjnZS&Vqo{RQ#XHm8Y)@3QYgf&>{EDZ$z1Rbfh~_=H4MNK&g5MVr6btW`_U9j_Ww z!A9@pmG;XlBU#9k>7`&;7nCS9M<c@ZMJb`1LCj}VG&^3=B2$|pa`-aKRNR&AT{SU! zPb2LY>H60@q*l~+w+KeLw|e|D)$2_8N|FCb!&|0Z{^qyUuj=GdI(Zil&arDVNHXUP zz*JuaO7%&5sq!)x5*BFh;#aKt*st2_zwaLM34ao}?Y8Lj7&9Q97A>hG$Rfz^S%E16 z(fK^zUZGkMHT)_P-98-~G(Y0~w}zF5cXSs{*u8X3xFcYFod06O(dcylgW-4m>DUE# zv+E2xi|kce#m+UpnXOmyKUq0;=^CN4uyng8HDwxKeE@+iH*4OP?I&Mw#%X^6)5w<# z66-zWbvcNPtb8`SYDr3Pm_4iVU~E|`XaA<}W^-f_*YEg_njKAiXRh{uyf+|}YV5C> zKI7h8%&L2uTOLCGq@8d-ZeE-2h3ysZ_6P12$K)>QeQnc6wHCj{PR+Wwe!gh*x=}@= zcefUewjKUy-CH{*C4~&i?WNYr?);MFcU($VrxMe_-<*uLZ+u8r@ACI@+jMRueuF~h zZEG!lueEsB!AIzdw(<`-kWbp_8P+x+-g}ou>b;t-UiNR8eku{L_h~42r=Qk3ZB(>) zcZK~uZnUTB;cbDX>~QgMpsjF}$pZyEg_XZ-y-XQoM=?WWVr`>XQ<J3PqQ&dDPn(?C zV<Imu#;EYN)oRitaqBnUS{j+RkL0BpRPR(KPcGaR!t|fbyYAL+eAw793_Zssg_s~U ze1v*l?e1<<V?Q*hS$&!m8BU6W`;ly|RrUFw`lEggH+9!fsKHW+o$X7JJ8`*h7>d7n zH^^$-X!xrCo~=AgZREeu2qqB2P#ax_irC&(G<q9q{7mw&-l(V~(+`EP^8Jj_wzAQ? zHRm+(F-?OoMlq`pq<ekrT-QZCtD<X^GyF|~qtVW^u9M;)uahK!Wl5)z=1dS?tFkEl z4LxeZgB^Kof82f{3kePI#!W`i-PWXvx27c&@T=}7nQ8F)-y4QHGtN+ZK*#D2U~+Bc zJDERbXw+2KTlEF`ude)pfBgtVzs80ssn`Ip;iB6xeqs8|Lo;tCE53p^x5snao&RdX zi;XK^ObJdim|l6cDRdesQEFrtj0|QWPrj&p{^I7NUO0bnr5d)k&HHupUdNG{Dz&Pf z-I_>wySncdT7$g8&P``y0~QKwnQO2Y8pLK!VWVJGBS{d14MKzG>vcr|O9lV>QO^F2 z|M6E^i^isIcTyfR)%?f*P`|a$q~xSFfuV-)wH3b(i8r_VoBvUmtgg?0)gLt~mtFQ( z_^hDO-+VJ~XyMmPT}r9T@V4^zyuN_?`8m}G39BYrP}9GYzvXoDmULD*BTOd;&+XT_ z!<`CS*A=C|*qXY1#QPwuo9peVVq#jPI;(Hhw9EZdDO~21q~P1y?r^(GD=mN8a^3Iy z<*l|KeRE=~+b}{`9!9P9bC}$u*cI*Zt2eTkPrLn3jD^a_)GUiF!;ACtv(lKoxW~92 zjwI$!b7x{#j7{&AF8^v=by51tbF48|I!b$|<XG2eR)pV!MH+7or(1V$q&oDvI6r3F zPBx)UPO(?)ZR$|LPo%2og4Ezh`|8<gDV$jtX?7{4q^`9u<{pN%pJ&7RmY)xBr{d@f zG9AecUT!S&q_o3}tmg@5!ybNN%|~T$C>$HUa(wvNXSN{~r-aU}sclUt-E*t8&64Db zAZnS-fj7`U*l)ZmlIhLwVAmn;r_M?rW)7iny8oQo!zLr+FXiod$|%WG1djFCja~1V z#8PsX|EZo=|6sk+_-^Xncgb<o?$*pnY{~{2{vD0KRo-nkFi5P0hd2&tk9}F#_i|8v zCL`BfikbP#*T224U!=o*Ew<{sTx^Y6JAa0^At!eG+}f8-1!Z|`Uu`PrOE@WU(em6- zXc_G!Hd-6A-){em6+FUnyEUth;ne)x0gxFf+Jqvyjtv~U;kQB+`-{n_l7GOy{i2}| z;f*6ALx|{MOU152+vm19c?PHbmC2SFQWJUB(BU{KKH?f^%=a!!F{boCJQuk{%1YMp zaf_|QUPx2B(O`l8QyX@1BIy<Tail9q?;PvYrY-8+{ym$@9s&K4KpY(yx&Ij<z+Ean z&w!=79zZaPSKS?N7Cvurqt=t=UwsxC`@f^JFUHyug>Y=5edU)>@%1;j>|SD>BiobE zNb7YO7*69DiRYOllS|j$^2MoC>qQZ7#)l+uaiHU{{$|}vq}@h;i=&A3;o2yCY}ks1 zgb$5ScI}jl`u3iFrOdYB!oaP6Qik5}vug~AL?^Eao-?QR>BLv>&CyplKZ<|l+CLcc z@%!{qvbU%?wH1j^9~<y#MeU*a<y<6O`^}wP4gPW_zGHkJULUuBUu9Bf_Z8&m3*~=E zyH+q5w&Z-aT?#UjY;<M48n@ED8Y9Wz-0&yER(uu5h@F_X#SzxmzF>y+qJ6(Z3Ul3x zn;pxc413E8Ow$=4LmKvGVgs3I?DLg<cye~%hOYnk&#3<$)ZgE{TK)RTF#o-BNq@X{ zsGs~aWhdkaF|;-*t?3Q+VJ_&r$8@IR23f0o?U!a`oT%*;`F};*w^j^lyT-LMKKl3H z_?gG=zY_J|V)fs*2DaN;ZRiu*=h4QfG;Tc|Z{H#gGxWs`)t8M|AE!NIWUd@EqeA`G zuTQ(KciM$rYoC#JGQ%1G58wys{?)R(_J2p$LbI>v(C{St!V+zDd$AMa#1m#LI!q@6 z<OL30cTIM!|D4ApreJxVbos*1uQC;5sqWKKJ^V_{)o;Y-Mb=GlM)z!a0p;WW)y@;{ zv1l+h%@-NN$aqn{Cf9^}TGDqcytw&{t@mMg!AA3B$o=3GBCGAzuDFtChqcGi?R5Mh z&C&Lx@3FQ>$-@G02qjPO+}ei3u$f|7f)SKZY-S<<FOLPU3&&1bQB+l1RtAsQO=`RF z3Awh>fyZgmePHJBsf^vMH~ht0E9}2RDM!2F*7e0Z`f|f*Q=+i5XD9WiDa>U_=?+Ws zp4Oiwb(Jf9GE3^$<3rJRY0>fN`}3mjBGLCk4idP$sT99;l1A*=Z!y8_!0t7)yld`| z2MwP6qN)C1e)L&1JkGSi7v335lxc{=@u%=orTzEU8q<rx6h45SncvC`J(uu*()>1W z22DPv-+_W|Cbnam*skju=TK%pGJe1%<E}5zpjR}#WE_nX@B?w4okWPAh~#t<%463G zzZ~4avMh0!z%$fGFYpob;T_%@L$_Vu=AO0Kh?Et}k9MS_q^AV)td0v&HK$C~e-Nd2 zT;ELj(JUc4nJAkOeR^a15@zAk)2FefoqU*r<oAj_2VZB2!yPP-;>288Tad{1A(O2! zlXq#o|BRS3fc%!5^a=7C+#jc!{us^wIAnA9%NOhyraAm&hr?g|)|<i=x5lfBx-N|m zdGpw>TQ<4fGWSZF|B~sJm*U;Bafoi&tZpgsaPl>!7k?zD)do#l&3U#bzGP6?b#3_L zVJj}O>gy&QVaw(8NqgHoXJ9?(8ZEv)J^Tqqi=veLt~08V=hJVR41Acp^kY<ghTKUs zd?ok66u2~;JgQwmBNqmcENGl&a!#PNZ%hxsFZ{dJ;P-C+Ponp)7XD}H{nJS&NAF)y zhhq9(>f!L8{5ILQ(x>vx<bj1G&d@wC1k*NSg?S;~E9WNn%30S9By5e43}=KKY@$Dp zvbn`@n27f7ID_MLyjS!e99sP~v5aDX@U<BrJTX9C)Bu@-7Lo&8E6!(0vBS<{-&Dt8 zJn`c&NrR<!Zepy|nNo%rD=w=J4CvHClfHka4mwU^PUl;<a!l5&?>OrXqMJU^|0~W& zUg&)|(`h5;8zT2eWoNhVgFElCA7rbpZ=f&otMUWv;k-_%#xagFc&cy`fGnz0Xzn1Y z_sS0Fl8(fA*x`;%H1|%lHD9CYfR#FXtL+u`(W~hBo|@R?U&xlM3jcAOgY~m=XI12$ zTs1}<empYTZBNOFLr&hAC{M9g_L%kOV~cKbk3C!INp^|pp^;Vge7+$0qJg&78Wb82 zhkTp=Oeb!7;M;Sx%CV<hPYL_vUHWvCakVlvtUW}xRoP?iQ%=m#{+4$^XzdQY+5t<e zvOkLUz3Svuh5c@bTqKEbI#?DiPZEn0G?UME5+Bbm+fRRPYKw-tWfh;WD)bn%V53#s z<C^1D*xRNEWkLetbT#Slq0HHvUi)Tc4el`Uiu-&^;BGc~vyX3Z=WjWW&&=xa;o4{S z)&y!(#xpyR#rQ;1dKoSib`6E`jn$2$Vd_8pGwT0`C;RIE9AD#0BP;QF7DZIqovV-E z{GTO0ze}H|*>8TauXLaJy!A6aUmpKFRJ3fE{e#4(h33=p&-nE6zE4M5TjMLiLBy2d zr0Ub7^l?@PaQG`nrrdGSc4l0uBi|O%aBwoI5k0*0QQB@I$c&aqt&|nP#=?vF#@|{~ z<r;AF*=oQ3rEbDgPQZTRM}3Ej{mtjoc}R&!ht>9q&nKTS_D6^D&h_sgR#|OVKVkYL zp$4&5W+L(iGb`*nzhJPd)%GsciX%+(@Jj+;L$@56hc7DEqV&8*V$cp6!_wm#Kh;#v zL5$ATE(c~rWx2VsEuHzQH0UzZIkkSdY)en$O}12{Pj$DZ$^eKmyB;0Fmb82ZEpv8E z{wibAuRcDY!AVQ*emzEiRVMRL+>&76>1jn+huO$yg6S-E6vm|~`NKoQ@@IR31z28l zOV-|17jpfGu`_nhH~824(%V*FF80>yn^~B@r2%6M4tVixWO!$ZIv#WP#8J0N?Frth ziWz>CY|mQG)jQoBGlmSfX()uXkTGm^%}e99tSv0}QRjeU>?c?JEU|NR{QOcsD?g;8 zM1JE2=GV_2mcy2i492xE9E?Mkr8~78$`<xFtmOM@x#y>eS|+;0)OX1Iu@5;>{&ywk zf9vt{?`J=nY0bmL+Plo-SdK39sQ$9`p646VXw*J4xs;3nr3}J%aV8qRmEH>blu2-G z%?BuxPj!sH&A!{te{t|YdGz$MVNSPjrm9~@%f@%D+&zt<kB9K)8GOtTJlI9=Jn2`9 z?AzRI6R0)N@$oz2#P~f=6^K*W*dYrze*Pm*od5IExySQ=a@}7?A19IjP09IJ{+0Q| z08T`IF;-uF_5a`}e_j0%c21Q450mr%?n&kEu5FA>kaW%2tq|j~F;-Zd$g1nRboWST zTy2m^#`Qn;YokYvZzmW!J>M<Q(5XAjMWsUwbP?-E=)WbP1aKmBfn}NEDoZ1`>Htli zmFCE37igAB3uVvg8XLFqP53x`<X@6V+E{`A;GYMfbRfMA-QJ87wf8^z)S#O9O?xkQ z3p>g7rvI1Q`{cTT?fusu|0ml!_C)RdbD!$7uf5aU!cMZir($dJU+dqFpA2m8bC3Qf z+v`73dxs5fZ>3w<Nw)U_<K6wgLeG2td0=~Y{pdg0Uf+q@ds?3=xUYZz#x3k5+dIj) zw*RlR_qRVD*xrBtr~hPoN1v#@7dpyfSHLyn_g1&ClWgw{+&ur+==p<32e$Y9M^4z@ zWZ4s$k}cruR>=!<tkaC^E5kVL@1KhpY*@CIVSQYC*(hX*eti3!DO%L`<J(_%D{+!| z$VYi`JR!sHv=EMdvD+csb6kI%V=?dkXdpU%vvv?VB=0)skGZX02km_lkmEZZW-dq# zjYNOzWX1)5L1P8k>=?c#pM-V<9nA;kJ`Z$DQD3g6ysS!;s*weFe*4ZPh+so+tjX>! zn8O}eZEeE$&6Aq7?2FGgYY>ddd{Qqv3Kp}6;5R2BNA|5PtSt{t*kX0>Ip*K+(Cv+U z+xTfL7;60V54Y9DIMTJ!i)1M`X*E7O*si0G^5PnpDg{HRs`1k$L4V_?Uki?E{Pe5A zVU3?I4PD!KS0IHQj_qlibxf#h*yfQ0_}Gu1%ENJ;PPEw<ak>Bvl`I3@h3iIT>cYt) zAou|%wL88wH=yfI>_fFI#a*d%80on>uEaahJ3bIUF~J__2oB&zR{2^>0@n7MB8xH; zr*+MG#T;=8e{zby<#p9gcTI=BhT0;@ZB=5MvebL?)-vmUZz~I=$kQgUp7u8D=~)wC zk7pL5u881|c95wN6Z|df0q59}M+{*dT*s4Xh&?XRh~VrY>W@<D4H{s*w7n#dN(1a8 zvX^wVCoNU7NEvk2^a7_8vsUA@=W!czDhF_%HV1H{nN6%CAmjc%tJ=)z$0NbXIGq&Q zLlfBBzoXA%BKRF{jY{?+KPohGj{WFb(?}h3?03S|$UD+fRdO5i^A|zS`(O#&UbV1S z3ahuk3Fmbc?=&x1FBgg5SA^5c!LMyX*OkHv6b?j4P}@A2yHn71g|3)%1bf7?Uvv*1 zey2ONL0OdE@NYLwdOPl7Q0v;4A~OP!J2NA<XW4(c>`xdD99Ivw`-i4Y=*Wj~3Hg-! za>y&tzVEzDUO2l%ZScX>&Kv=R<mO|cqqCX4`SZOitF$i1hv5$UYwa>b+7Z1o)xt<k zCp^OK&$7hxuaC$SE&bzg&jl;6`D&azdVGKzY;y=Yevf(KmW*!aFlw*$oBVoj!;^hA zpr@S_(adWzy3>zFz6HBEJ32WemQiibgTUw)cL1Vti`H;3!TF@!q_6a)AK{DY^u6}@ z{)x*~Fqvm`Tb&cOn~b?R^4f}MrN{mY>+(dtoNM^dH$Lz!{vP1(1^&YPamAG9vwk{q z5a$Wt&*8t`!M&dI1Jhrh$#e}r(ScZN5$<-p;jO*ar{Ue4B=lJw4^H5WFnUPene%+i zKB)B@7T@J<l1*UaZPnq<)bQSvmc4hCHMnuNPj9O{*7%9VedHf)pLQ%d;e*KKh9x!1 zF;rV+tnri6@QCoy(#~ne*4RmJFARB2+(GN32_M`PxjbpepsbHK)r6v#13gWLbZ$*9 zXg6J={;FY@IWVuPraBtT4FG3WU{`K^3Y3+@2?N6HEL2v6IoTXwBg{n=wt;YbyY=NB z!aVEiy%EBRZ-w7IMmRY#J4eq`@^T{w2@5bUt0XL(6U%HNETUNDQ>tBZ!m?X%;6Yds zyz%m#gmaswnD_Hj3jGiByr5%bhw@uo-g9It;gZzQXj!z^W}x9FTy8u0)oG8I=O9j3 zWaeH^wDNE8<gQEYY|d@unJ>M7%>p^<3)l*%AD}VKK*#`GLrh6dxE)Y_?|Rw92Ydi9 zhoc;T4*}}*0pMCdW=Id<qkxNUx^W?(SoA^u03RbradOb^dQN1yK6@H4+sO>Prerxe zsB@IV_U7Dnz=I^zETG><Kjw0rSqmRUf%)9ppPd#6zwfE`Z<v`DnQ=<zjLGAtP7l~$ zXN=$gFFLE<UIZ9@>Pfy+ge7Yeo1L+ke?!f1%rA<wm>G)JWQA={g?)t?S~&ye%s9OW zS%zND1He|tp%X(hhEDL$7qB)y@vBorK3NUW17Y@p-0>Ef1LjC6N|-yN$C^brzBjTZ zOqloXu@C)(69dz|>fgyPI`lK;L;w8gJQsMQH}?`2e#n6p!lGO@%Lq$zJrU(wmP^MI zRxnA54(FzZ&g&$cKcgpA@e71>!o|6Hk>!L-aO4&wtj)#W5#e&YDBMU`w~&4!43d5Z zVSSJK3cBGlbyOqG=1YM>g>jbT(2Y7uy;2dKb&dT;X^4t5moYd>hl5|Ms5L7(>u(K$ z_wbJOM1KUw@q3s|4Suf%7(5>3{m>bYMfjiFIPu<0;W^urYc;s|MY%5g<f3;jB^=*l z%@^MCP`e9H6B&O7zwY>)5}BDZhxmd@2Y-d&PxvVEMz*V;O23(7##vcv$fI#qkrBL1 z@pBjCdX5mz-<le_o^U}dBc%RZ{78GI@V5lpPlI1MYU6o%CbUObmx`+m!XQGQ#%n#r zDt&_)uMU2@E`CH~P59-j7Qj|Ox%C0mxV&;3WjN!KO@S)F`-zozCP0l#UzM!{8khXS zfNKdE%?kiEE~)%hz;%GB!6#LO#^sUVrI!P0T(&n|qa2<F<VI9KpvL9H?IXJZH7?Oo zDc^R$7qC$U+y<EIaDg2LGz9Z9V2(51cLTy3#B*K)ba}%*K$kbX1DFzip@#(ffh<pM z1n>Z05xos4WN}x4z(at`IYI&04Y&<=AxnV|0~>}R|B7N5M+x<FN%PXBKYrA{9{t&K zbxqLDj7nWl*E!=x-A)G&G5q4|_N62+oI*~<J7?VPBwDFN_9?uJKJ^|iOp2WV_Ax1a ziZiWUBKQi2;9Yj|J6?sijqgwGaeJ|*L#pq|(|g_Gv*Yw$)JN};BIqYK*JEj1kB9Dy z3G;fm&6;pxq%*vqaPqOpn_<E!Og|Nb1wtiZA#~>@EQ)M5bk5E8hR(|}f|qEVRD615 ztLBfnq4HP;;r!5b5GVAWDawT24Ov3(h9==Bh9IGLLyge8Aw|PaphM`LgYDx88_YOy z=-mtzhu+O-ap;`_meGHrcQa-jdN;$yp?A{)hu+=6BYKZeVLn@{&w@`y0Y&e{JuOE7 z*8v7E55E8?dhfk_XA_|4{TluNpC(|U?En<LkNhAaY8Ab^#Mlm4<Pf9i9SYP8xx>VI zM3<s>IFjg6^e(ytd=2nMSSz6Dou57vz58<E;|{%(Z4sd8ooofFi7<G9qIa_01}J(b z+Z*HbzEE^7de_gT^GlZg*seuY^<2(&NM^<?Q84t~Ib)uC4`X!JSL~T2FhtzKhn+LN z;gI<XL*^5B7k%pYyf7&`0qirR`x=_edr=c5lX;w<tBHobCj*>_pF<a7<)Y&pFrfJ= z7k*w$2p>1}EH|Vco+sk1#PIPqVdy+hiF`9ha#aC0iHM#HDK1P{#HrZrgr%+=R7Sk` zb_IM}`OJ-F1kWX$&kmaCd;#yp-xpKNIzr^DaYnxKhAz;!86;nIWwDR#$XAAsOLCz* z8p($o)#1&6WU5YV1t4DuV5<RxZ(1_}*8t+iF$j1+;H3^#J^<)a<wJljRjvhuDoaT# zy6y?L_X3KpEhq`_F~Bm1Kt<PJQn8|I7^kRGbnQ~*vw$vDwgd800?~DQkL3dtT|=L_ zfG-=cNTBH2W$B`8m!*rY#nQJsbS;|vH=^_#N?60)NVwe_nQ@ujfu>0`HmlZN4;X#w zSA1fK?r{M7pNJbuPHQ7Rye%%L#p!KsD)g41GkV5&OeRDaGm=-f8MEMpI{?(vxeI$D z`v}KFQJV<!RAa)4R@r^y2`58fR}oI>2xf`m3dl!cA^9jQBA+l}sX;1|n8B!##0(|P z<t9i`+WcIHlP-Y4ijyu5p0ZKpETK5nqqgXt@uIlpsi7<MT$i2ORY(|gC5n1iqG)h= zWFy~YIy_Po=JH5Un9CzYVK#qsgec7Ak)kk>0I{Ml=<*&wQP_B#>jAC>+yyQGMPWK{ z04NGWKXNUgD9p;vy$etjCfBimqA;dz5u37S_=w?(!nURcB|o$)!S9ZV?}@_Fr*ab4 zp|IGscclZ0!U`kl%0U!%OHNcnMiiFosj2`Jg}DuS2hhx1uB1S2Bsf4MbyUriZdhqV z`5pocax*btH(-tyaE_pW6AHDshuG<t@6}Y$3wRZOfGJQCgKi6;jDttMxJj|{Fw0Ms z^a0MjZ@j<&AY>p=2O``-mjwv1XiQ}Tx`QqU&>eKSfczxD>72LQwmij(jWp+)3o%M^ zgtN)SBEm{kn*z8q^xP)E0;S~#SP0lz1j#n%76Ix7Iyfy*tc97I<~oT=iAER`0%YF` zGtB|45J>$2HGYr?76Hx&WIP`PTmY!wM?aR2NZh=vWW^LI$&Svx*1utf$11wlSvwv1 z6BEP?Z*=y`NJ-U3O+AuQO1`Rzg_S{P$v4g1@`{`6J_%2edo=rOeBy6RVp7>pIIq!@ zMDCIJ*0f!96-S832-IGq_vPM=X5D8avsFYRXX?cYy_koaf9gQ}?iMDg-|)WrRg)mR zZQ?*-42?jXe`qNEUtZsRc{-!~|FQMm==Y5zFy#8~gFgz%|1Img#eerd>%0G1--&CB zdB)}46Rz*R*>!^T-E0yV31f)$-4(nWxV}4=xZ?=E>AXr7d|fSLoS&?r?y#gy7Z6sH z1^n0}U*Sc$Ug;SLeb}{S6YBb*EW%7Sa54$AtXo-OBN6}pn6-*9$8%)nJi^>Gjw=(6 z->}1IcJg%jI?ofoXe}xwoSgr|mnF$gL93TXSYU0wUvfqv3pPozMZwQmiwH}zte-wW zSVqk*Cam~N$6wM2=jPu$S>?_5Th}xZE|8v<aB<<vvt|-5iCojAde*X4rg|?&KGd@u zC8*v(v#v)XHj8?r+1Mq4w~=fjmxr~q5|j1tIbbVbwj*J#26VNE!dfQzAWKSKF?yv( zQ6+ies-!R7YE()092D}|>xv&k>(lYZ@qd`lKXZNU>(eKVk8CV_b!>cny*$3Y)=I1> zm)`(=(r?1Q>jdk^RC%!OiLXP7bD}&K(7{?S6jq^FA}pdFVZu`O`m`P?lj~2y3N$r( z&-~2V4y=2ug*k)^I%gQY?P9)@l)0p5U22H1))Vupx0j#WIirWLjww#x2ca4dVLi#r z`Z~sf#l?Dsiiod6%nDLi_jF}Rs1nwBuLQz6wUFQ;tW$vc?E%F?#DJ0#DP|quTEJA+ zFMy8%7PEc<TnD)73QG&x#{hG^m+u990<a0G3h-$_NmYOwfwqi%Q8JUH#0r)&fbD?2 zj;e7RU=Bn@><++O%Omh*Kq4jP>;^>Em8|j_pew8F1JsXLNr_>WGJyL5-KF*cKwV=& ztQw9qzZ~$8z#M~}ZlyiJ`g#)UYcEa#Hg=D{Fc6(J9cq#2@@I}c$Mw<CS+~Js?01P0 zubH*degiORO|4ehTXj%+=r#2^UJWg+7<r}XkSc1d3ZuW!9VMMD`d@5iQ$BAxTQYgX zs@>{r$pQjtK-oZLS_!q}0I^x&>uiw|rrZzxfzFokK+_IKx;k6(fQ-1_G7;#`EbEER zmdQYdGFqkpSv8ZRoh=1Gnct7h?QAIoLJI{{B#5r-Y>{`JTrULCQfA&pT02`RfSg?B z0!6A(o3zXay2Wc<*4eTEsOc}N{bHb$!j&UBTb2M7M=m2>Ezn=Oh5;=X6#i9eXG<MW z<Wg%!XG;*s$At==E%iVMfuw5yD)DuebQU*e3Ms|Sc!!_ZS=<^ex@UZ6@#;uPPG@KF z8o5U4ET&q~dpnCCXf!DwLc-<UT3rOySqzzn@9HdGH!;0|?;d-`r^qK#mM&e|S^PBr zU)ou`QQkW{i$%@^?VX+<q;?jIjH8{!J7%PYw{{l4d^G<iO5YvX+JG~_*ZilJklDVa zozrtWi{BZ}BEGYDe{ST~!<{(O>wt2LZ5T<Uv-l9bN6<~z5ge8&G#U$tpINcESDN>w zKTc+YasKx-r9)nu@(9HThuX4Wk4ua^%UW(2c{V#;V&pk!T*P{ET@}lC9BPGm&fEWK zSgdE_$lHx7d~$J5WDCzz*s;*WRB)Xy|4W30-j(O+xoD1$X2JT}tg)I<%4Ca9SW&n# zcRJzR$k@m&g!6OoQ9!tWb*NbC;;zfgmc<elR#FMoVi|8(UoKMv&vouXJ4kk6p6hp} zntU2eKF)*#Hyq92ZYBu~aU@_Xpvw?f1B!zXy9U4mA_1WRvv>j&>toR#0(=N?G&+93 zwSb%^5rcsy^wSD&9U%&Ktuh}2WV=k6JpssiODik&1dFUpK(Rh}SQemYMHA*nKX#`# z?L=v><SS-^`!R=$3_pp^`nIE<w*QVOBfET$Pwi%&!rQV2t!U!?{|<>xTK~2&aOP*p z+nUc3`zcTb&&+?!<7WOd`<>cPF?zT;@K)jr4T2$p#C}R=G4W-+Ok9K&LNMW6S1U3f zZJgdOKzFA1i$RC-UxL=m%zxwPN1m5oKqnH`(Y`QY5WR91VZA$_Hn<(z$a^|gTM8lq zGF88c2+V}(%zqHvo5YF;teH7lVv7je-4GGMPG>hnM4;)51Zx2v?il$2pokz+YIZ|J z1ns>>btWQkRc9gscVk3E;Hu6<1g`2VP6TAuPOQ5dvJFtv7qL5lEJwfhGN54s&iv=9 z8eSvT)$i>Cj7!VveIqUZJAfAQzai8wc{gO*{yrMJ$)&MNi86E6GW!C+=u@xojUhVi zq1t}pjx%Q+{*CBy&~``P`g%D%a030@0_oIg7YYf5xmCT9-GtK5={c_yKkI}OKMj8@ z32L%Gyjqkng<hCTSil^lowdTA$eu7^(Ql7gg@mQPtEPDg%U0D##NH}$tx5@db0fd* z_#@%`wD5n7AY2gsOPbisVt@EAqRb_s%p+oNwK<_PRsQnpvb!!MtUIzLN0b=6oZAiw z>$|3!bPYM7n<Q~Gf+>>T3@FMwvZZh{peRp2K(QbH{ads}A<FaZF|x5J5ARHQ#ESA# ztxQQhqP(WRH0rapfOt{*9H1z#tA<h?_EWgo<SWWk&curHwnTk<07ZG>j?DN@-iACD z5f1yw%x(G$U^@vK`2!T?-S$P8uPb@wMiu~y@|e}7G21N=;sq4tX)^*)lxMb&9mz{= zCU!ruZp{t=x;3)_+?pK%q-Ls4H(+M2rN$oyY@*44J%Idf2ka%>8Q!Wfp|Q-8$pa|; z+>s8$r=_2p5F05z?E@T#@)S_|IhH@|fYQ$ePl;U#DE%BescNzGbIVdIr9{jD-0kQH zrJoBRVG=9-oY^97&Xrcl<u20Cd7K`SelD^oM^do#b6cE=NBX%KhFruJ0ve{+Z1i)= zL02D3Kgaz1WwK;ryE#`HI#1N|4Zt!${Q#w*OSP@pfYQ+AL_ONWl7?>TPfY@8=pw0x zf))dMoE_ICfG!iN1$50dGzMMHqvgX;(~qTNUuFin;2nfqvsW5EMx5D4LZ=rNqMfaz zil`-DF!sl9lTtdlsC5O;u0;GhVws>i!)n;n8|Dwt3&j^~@%c(5V&<za0wnbKuAPO^ z<vaWTC^0RkUM!KtGANHx*vB<y^hRFb`M6x;_FD{>nBsDY0+&k^`tl8zC|bG5tourv z0?4s&4YuJ95>^;GgKOl8$lw~|BMeZuhO4Dt>}u(kaDrkR@wL#G_WhSbT;gJNk%J5y zxQ5SJ7uE~UJU1Xah*BGQ&W+BH?9dE|NG1Xo*RaY{q@fnq_?SOHagD;27f%DcA23pG z)Y9S_B{>oC9dV5wuDAhQ3m6>VH3{%hKvxI6P9Vr5R$Rl?0gG#}s@A&dX+U>fwGmK1 zVxJ{I^w!d?9ndXp8=za-4nVAnMv*{VLxzli;u`t^zDB@GQ)7M~AUTNHyaR}QTLidY zpu=oL5-zh5*ATPW?yT41_9kC@v~xzevw2x#6wJ50X(lM6p6t^ZSZb}I>FaszQfj*s zr?uNv#117&84``tr#i*Z=l?zXp9RyQkN?N?!+(4u(E)?(e|Y!bq#vHx`dRX-v|$N( zRZ|60!~fX-X#D^G-2Ug+C(sXHN&+M94xt}Dg?9t>!^d7bu0Z@dUWEq>#BqKiA;s{M zLV9KJd?!D%&U}{>@#Jot7&t>BYqqrj8-HiMbG660)^tvMLhs8CTUvbQ^+c+2MDMI^ z^vPsbdY%%%MFr2OZP+J8N=~01(fcCiHA%gt0Y{Hn##&ukYAI{3C7gQ~2?^(qt*EpK z7f@YE-HVwh6u+d?nxXP)b#V&eauzO%ubYt*QTia|%euDSti7cbhX2Fo8_C8j4W0RJ zgtIH$N-XsoLjuirrQE&(sQHfDFEoE>zT>Bbx8^%$k{N&x0kZJ+0<Hz@O1oU*nCLy+ zeps`WW&l$mXTD=eso7QY9a`1NfST`Uh?anw?~Vkg${_ApKz9k)4(Kicw*k0Iz#V`Q z>={U_`Od>y4N&tP+Tk2P&3CN$vjH{VG3RRW{|+FtpeEY=fbK+l08l?-Z30(Wamd6O zoOJ`zVC8!lkh4Eq0eb-5HDWIy<*LOg&==(jl$0#G0W`uJjxe;NA__EX#4!K|iIBTl z{oFNTnJnhc*~^T%`xHN_&SkD(H;Sm|9dR#A>hPaXfY#WD_h@uz%fO5uwcFlL9Pgr* zP9@lTc{<MGaRaZyLvGK0_WChPl%G|WJMlTfYzh%&=7fKbgi@57+kJGm85x;P8;|iU z#pcC?6T7YKCc?>dhGvE-Xgig@Kwhm03*S9v>@$kU&d+n{hMtZ;5tgMfCJ8Gh)1icO zeF$lU^Yfq>!UZWQ82B(ULKC9JgiBCInUPW3T&DNSQ)(iegmrVILt<o*f0(cyHz(Q| zXkc)QDjO9)f<f(!3^rG!ch|^B4c^=ZsFCrFj^C#NYGg!qTrAtn`vsyi1bjfCjX9Mw zGSI_nRk4=Xl<<EX1JuZ%^#MSQj3^p7z{dcybB&3SMn=v&1Zihv)Zo(rkai-FnQ{0m zAV1MmJK?s##Tuv@89B0_b=Hs6MxaIps8Irqj8kJKRun>m6}u16FSSm5{b=&tPb|tE zp+qCY#g0aXRbXr@G%~<b5eYOhz>@^t!+_|Ngohr$;2Gf&fEpRS(l|LIBb0+Fjx#bs z+1PP8BZD-mg9ZkpQ>fPZaja7_tsnWR#b*8JG5Ko!=;oUP7~F5EG_4=moVyfoJRo*m z*8t`L@+$<?`Vnixk$_r1Vr{5=wSH{(m|YaDA9H<?GGYq_LUVvc0w+e6yX!|{w7AO6 z3vb&rpPYFv<2egK*(@owcy!n0T0DX{<)_7?o3$2?Zq|zhk~Im;;*mT7Yl&5M;up(- zjZug$eA3Uc?)u8oAIlcM{e@GLZ1H`LN&X}!_)_PLFE{sMLi@_E-0Agad~SE}<mfo9 zmw0wnP(O>OQSaFg$Dh(E)cy`n(We#x8YVMcad#3ol$qF9h!1a@GEhP4%)jA7K{NTv z!-_NcvUy^~7n=>J#GT1ki*$x&HiJ+mVmTz&(9QL4cr!{k-uJM1&SN;0@H{c+;vG^! zO?D@{DIz4E3v|CKVIj8R7ZMgl-a7ggVQIwk-Hn9mHRW4z@xG{saBh>9@vs&Y-wGG7 z7FD=dd!vL)+%48xt><`Np2c)SSeNOf56Y;2JFMj(k>66KoxZwA$0nRU32dBrYNo7o zSpU2XR&W2hP&#X#J%Oj8@OdinL#&eG@=TB>4ASov8vacE#a}@p10N(V&z-L@cR}u4 zHGaJ6N0{f|&@H4+Eck*!!em|H!1I)p$U*V#f{sYfQNqG~4l;^7QG=Aytcn_Gp3B4< z2rIz3wjJh1U}l8#Z_Y6%YZmyMf1>w`VR%|0Eb&w?OCzkU#N!6x^2k=hm+QzT%yV#C zrqKY@Lj#j}=0FfzMh<_b20p-MCEeO9O<pS?R1)7=HQH#0KfA+D{Fw<xqv`=bFXw{* z9|GLSAK+Sol%+;jCH@?oG*dib9pDSSU84cTpLL`SQ2hD&@C(uwJPjC*rQQLkjLxx& zl|cNtvp7Zkt{sq{CK2)H)X>4W{hc@TAF8kTv%#IaQit~uEB@T|meD-z1I*Fn=kRB= zR84^UiA4z2BqILYve$4IWt8g;-axGQbA%(jfa1>{(Wb+n=c)%C{ybll>+t6V;cbP0 zDNqvRtK&nGTwJBNBp1yA#QFfe)?|U=&o255e|FF({v4cY&?o*3`ow5+09~AkKf5>+ zf1cprEDzAdnfNn5;Y|G5#hLiCi!<?O7iWb^>)=fMx$CV+naiIy-N+lVFid(uq{uL3 zjrH95Mw=@BoIAHm!lC%Hb&E0h6Mrts^@ym%pFJ%mkHvse1rjU%%<R1YQ2ZIR&IMd9 z5NZdk0|b{6FEuP(@v<IJKiTqSMrTcxlB9%lQ&}5xQa<N!g3ERw?G?T<7HRJ$SK7-~ zR3izZvsSrLBZ<<dQR|mvXGFnBI11>Bf(JXrrByY<r8SK0UlWJ$7qu=i(KY@Jg=vv6 z_add(o1IrfouT+4uLkh&&*V3TS!V^44qq{DbI=%y&*V}MjsNlf4Yv3~o_%zm!ik>T zh_)3c=PXOnie-wMu7Eym;kmHg-~2RT5%Ef2+F{k?5SAIj6TcDF!EgM{G37s>WMza1 zH)h*%G1d@zzXX!)BCI_NSK@@r-E!(GahSz(&<jBk)~oXf8@wvV;Ws5*c>vhVC%&gT zJ%Fu%Pk}zb)ygPh(yjqwjuAzP-?+N*2LKN^x^eNF{gp<TSPO{PMdk1)AU_qcj<6^< zAlCC3AY#z30L5?2Leb$j&uFda@EcBzik*nxxE8qWfRE#<nAmNAT|YG}Z3iIx%U)t% z2J|<FRq$>=;?*GWo7|}9ZoqwjY$vKZ?*O8}5x5_a!c^J;KzEr4&R8ZI;qnk5t^$;= z_zgd`;xHl0MA_T-0OoW}-w4>N*Zcrez#=^;0ayIyvSPOD9eJ>~YmBx{#Ba_kGHJzc z%HjCLir=tNB)%(tbGDV<2`GLeQ3WuEz!iJNZ@RR9>BxicITEG#4L?;<{03CN11NrD zd2%}d#c%efrK{@VH?9`H5KyNfh!wvXj|eanzd_U1$8TJADt_a#Q}G+^qL7LBjfWBe z#cv|MyM>^|fJy@>esi(Sob2$MyB$6*ev>Eh!{Ik*Zv~3qjHhTo@f#KVf7pBf__&Vh z?q9Z-uxUhAP81@D+AL)uGEst(ilPt&*73?#Y}ww}iY*!?RzNXI5Q#|EMFcsKSSjeT z-qZ!BxUFf$Q@1tG<AP~iA~z<iW8qau2o5#HDQ;1V18byyG2q4u5%%}}nK>)VKT^t5 z{`h`huilsC`P{Q}=iWPW=A1KU&df#LtViBdN#1CkX8G{`^Dg!B=Bs-pNfyn{E?FBa zxM8^K+pia0KH0zI7qbmD-EFqvA3$|7MbnvuzT(xH%eWQvAT1Us+~w%Y<$knD^~`)S zI9q2azolo6G>h^?4B<?|8vy4Dme2}BdS!*pQew?8xJJ5!P`jitF4JhS3gM#BV)gOw zWo3ob{0%>l)|LbZ=aJTpW}J0VKX&5y3!KL@O&5en6LhI-NE^SkHvJ3Ira9|gtNSIJ zpK!q!&BR#9Pt$^*Tq)9Jg{+=7Gd0_JK}n4c!pwACCsM72v@1I7?w=BqbKadxy{Cb+ z2QD6`m3n!+3dOQ`>Ehy9ymWCfEhb&`4&ItE?w52i?w52i?%x75?jHgg_iqIm_e;7M z_e;8Pi2Eg7jQe*2;YIa#p1Y)l2`}Jo;1hnKOb!?eYINBM(1uHrE{IzVZzNr8E<w_T z2_ltnK+v=3L11OttwuZqw7xM0w7zi|XnjM{g<{3oVl68{(uHD0JqDy$3EW8_#Y*dn znM~`tPQ<D8f)&MHaPjb1#CpN5obLs}g7+0e+q0QJ<r;N_E&P~$Om}pQ|2&{D=q@;W z1#=hl^z_OYKf_k!?+x^Tv+VOa$I;jiN?9M1R2pqXwUNfSl{goD={$PXlcq17aRNt& zQ2+d1M-3byt)I7tg&S~mtSl*yU&2kB!qLW=P5Sx@^yC8pwj26#b+V(Mw55pxNL%+& z+oWxlzg?T7aNZG4@0%j+%*yD7qm!$gou1<H(wukWi2N7Qp5TK~Nv>Y#I)MEoh;|9_ zL12I2s2lX_BDWZDBWNm9sg~RX9KV=oE^nV3_lu)-Kpi46`*ADK?8j|Dv$?ke^WNs( z0pyVVxRccEM{%^-kK$-vSLNnNU>tGj2nd_|9^fc2I=)PPnP-6vWj+YpFDk_V4**@C z_WCl%x0RuaqdBB9#z@oHzQDu4az(0n&!WBC1XLYR#b5Sr$AI>3;^;NrHWo+QyBSC8 z-J~z=-NHb7H|a}zH|a}zH|a~>O+7{WGUmq<(wB@U<adoKF9%Til38z=wN=U+9#A-` z^kwQ=c1Q5~vX7PGK<P`1ES0|8bN=(HGwDnGvZ~ZL5S1m_Abkl_B~SOCU`sdey2IbO zi5%&Xy4$DyC)SOfzVun7FY&iZL`h%X6&;@oYy+wwp!B8g0yO(v_wIx`Ug<)Fx`6in z(wFxB(w92O+XI|caASmC<!yG7tzWRo*=~b^Nd!Lf8CZu9lLX%gb}pJv0d)9b|L-~% zO;P(!Tl@2OW7>~huVtc(<eou6W|u6J(78gtc%xt8Xd;zEa;iEbh2~Uqu%OHI^6@8% zKmLLrohE(?Q1~A7>|@$m+zBsLf8iOI_iW+y7<6j>-2R%r33UyppRWe|()p6)^)_FE zD~A_AI%xc=XdR-tiLOMdwM+%yAgxC4O8T7Ix5MuXP-oJsUi`rC?EktiO`2E~oqCD1 z(bkbRv5xc&oF~)#K-wIz?K^49y5GhJiBwznTkNpmq#8}jD1e?mPTFy?_X2nFI%&?k z*!Fx8X(~G9=1qv_PC2P&foZ+udnt95W+nQ8HY+g*v{{J_0GpMNRI^zLNj005*et4_ zmDnQawbqazwM4mFfjpfQ*fyYX{&t`asFG@MzWSG>n$0vws!^7xyMd~4U=B!GZl*zP z=VluA0gmva78UETnTEG%rs1(&MT>7q(%5PUk{D;nt%XN{*~cE|8pla`fkGcN#+1c{ z_pHI6-pgYxKc&x}d_yIAeVCr;am@6alyfd-I&<?E_Lh(;idF<6rOq}Xt-_>L<5p)w zf1}2&p*S&9?a$`zy@j;Sf)Y<Lkyn9<D}p&vv5o4cq)pDehKU~b{=DWW)eK$EkqT0L z2ab8$T=T$0u5Dl<F4y&)ToxtmLe7cFQyHv3(r)b4G$}zQz9o9e?^@#H0JVf>aCCS< zp@x|D5MDCedy`oxmkv|=_uuc@qNQ*?XXo+|{^W60`WYdqMf;;?_Brg2M)gGIZ`zes zrebZXl&GGE6esKC-;-*0q?4r8^L~!@ppyS6_~$ff?TaVe3h}y7y1SY4dYWIA7H{pY z(90(%S7{^VDs7@3)1=9fMi)lhY+=ML+)lr@w#Lepwo!K~uiZJxsbu1?Cpqstz8~33 zCF2j29g=$Zn(wAbyI-Cad6cv#m;TBqRoY8=I)Lh_k^c8+DC~P`wj8LQis_^b>ZwF8 z7VVEv@Y5@ys;4%`LW4jt`rcWusM`+#b1(!@J(Z7xs9g2b$flgUMe3=Ek2`OqdMe%X zW~l0^EB$~|J(WY<Q$3aK?BvAE0f{`10@YEq5jb!ZI2ZN=J`22?GJyMmw*-4N20s9N zlw81rKqQ9-eTP6WtHj9|5I&TiJPhoJx^Z;@IF+TLyhUBfIvC(ls5*ehNHC)%P9}ll z6akz91|816D^aK6fEof~-{}@%U?+}8U@7pOi_-gmvOlKAUoYJ#`@=>zvOmlQlKo+Y zMS;s@YW6$(V}^h5vdnoJ+gFp}JpO<+y39{$$^Nj>jqDE_-N^pnP*ul)HoB1lgh^FV z>iYRmde$zrFy~GF0=-HSnDDD@WOlfXp8DM|ok(`Ig3J!pBd|@EAr*k_Knhorb^uj4 zuu~cM0oVn^MJ>ZkX2&dTY}N0E=@r^b%9|Z_i(WF=E&5f0zr`RBr-5#<0l4R1XRF+e zz));XBXARt6+tq%Hv_eiA8-q>BzVd(G0?V{*($0Js@?{)EoQa@EuL`)FyuSOPGGC& z{b696UnsO2h(6Vgb3hx(jR0*VHwtu80VW1&uYL0F2ex}B#sOfP=dgpoBlnz8Jsbj_ zq_Y6WfM#VM2If*%$+Rv2v$s3bdIDI=K5S5r0+*-vih+&+i$*lihR0Jt8y=S+4vm5M zuyv7v!a!r7Qf2TAR0cE#DhC<^RRHs$ht<ZFKCjv$3N+q{0gZR6fYz|pKx^0<pfzkQ zkkue+*g9Z7^rXtIR|b9n#(~B=383*#BQWfFr^!Lbo=KqHq8VtnXaVl|p<|d<APmz@ zxotr6YqbO0y+f%3*f#EDKqs(Mf*k$@Hc6Jlzd$F>;a{L6y85`3j8kt90;Jv^BGq9F z;u(bBhEGUZ&TYr(9N>$}vdb5NSk0dHtJ$l*g!wBoIr|5H&BbN`UnHtCivM8j6m@Ec zl;OhJnd8n8?p@&7N3Nu)gNG&73jah7ML|5W6k6fg;@O9F_9SPlXz$y1FApm98vLEe ze=Ra=!`PL+#JkG-o`c@E=N0`L_>0mbaTOc<CYKi0d72~47opvXa61#lSqX3N)&zZ~ zk}m4!?Ob%0f57<zDmr5w(#w^+jP!Dpc{=II*iVi>?=0y=w&V%Ut4&YW%=?+!!KL=I z7?#lMh~fMpY5fUxKlF1&+U>ZKh&+mDM?Xh4IeJs5@1YRqNxM%olS`ePx4`i2q^+sf zIlbJ5xg&aetm8<8w1Ya)^K>?$s7br{_PWv(f>zJhy(rw*P1+OgbzPeO5&r|<hdrd9 zImA(eq!>|x($CleQmGq(rGMux+XN)*IMmI6dCw5c;q~)1d{`Jb1Ql2HAW-^wG+Qd^ zzYUn)GbPz4{roLHqzc>tj19T~UFqkaW_WY&@ycTG0Cz)8dfAr);_E9wm44O%93@Gk z!GY4x1as)o_XFK@r`OMs{wvjwoqkqhc>Rn!U2u%N42xC+rJuvsJguOq0`SH#3mm+D zo|9QFp>P!H$yzt0m43cC$V*O2KQjTS*PH^5;IILf&>q}k0WbuN2DGx*&*{7~PD-IB zVy>_<Ac0+ap>m*J30MIPd#PLr3>G-OA9WdA-WbsIeig8XwbNWy4TJ||0@MKCyU@9K zYJpSZ7fC$S0Zs4M19d=+1DD|_0VaUy6V9jK2%PVIA5Fl#_v<8q9NWm-3^d<I3($NY ztw2>F8QPTByV%=-rCx=KTgUm9Fc~_5u&Q8}pxD~0=2(Zz&@HOM(7kHb*b&$ZHHoeR z_5&@zV-U#gYN2k>W%<w}z>Prt0Ng}MPm*P}8Hn-nI^Y(dEsz@mI%hKc3$(V_1`MGO z$h#e=AAmbZDXbE>6Sxh102~I!N?p0TfmUt~XyuLot=v&y2z|h1&jROs%uV;~2hxY+ z4mtqjo8)_e2Z0>wLx+Gl))WKB95pUm<1i5WVH8*Z2Cq%4Z%zQU?=$cy&~(c&V29WK zlfcgOh)k*}pxF;n&1OGHHJ5lpK&sgcfl^@3Pen^Lm-{xBY7VEaSx8}0&Dr(NJdkQO z^FXS38C`%3Qq9I^Qq7kWGz7I8_*$L==v1@Wmr#rLC9r5;0y&DR8JkSKP^uYA;UG|| zIgexpHUTMCP^#IOK&si8K&sgqORCu#ORCu#OR5>stkv66%_<GpDM)ERspd+!04UYW zcQhqHq?*}kR8X3ktwwcOFOWme+YcNG?fE`%5U2n<)6`HlKq;Hk65aKAa&x|sbJ|UP zWRqZPtOK}NPznNG29B3Huh|e#qhhFA1v}hArfq`06Kw~o6G<%W06VYQ-vV@KFzj4r zY<lCoW(!NRk4R2CqaeR99vxiiC$LUzE7}B)%%)PzQYb)mzA~rspHQr1@Nk)aAIF!r zvM}m@4`m<ueTZ&Po#~xww(}c#vX97xSNOBy+287HBWKQ9_+LDzvlf0L@<&BBYhk6E zSnqoYdf%Qa$yT`4U*xQXmDzxgla~}0d7ADM$nq%st`#wDE!e(3zXg4!wNUh*uzxO> zy^6h%I?G;g^X;)CW-pXK^27=B@pL@qc&7f(IIj&R-HwHIwz9N7n*O;wY4OOT@EGIy zFoptYV{8s0k@0+tuQHM*L$nNOv!YQ*TRO#)*bD6#45V$C5lY*6t|O!!l~fL?_ODO` zbeD5~VK1O=%Q^3coix7hfx{%=dMTa~L%@E)mT(_%5csk1$Hkbk7i3WYWiLpX0%b2a zw~)6NIFo|jLW*<94TXSM4oy(E0%LOqCBL=-u^iMpWG`Sj6n9dHeA#t1@nP7T4oIew zA9+C}d!aPAKgwk}pgr%1VBCdUjsoK$r%Pln#KLZqE!hivT1-!N0QenmW_WwSy~QD@ zm>J422E1RPRQ=9gi1c4A+d|5Yo9Hbj04V;OfwC9Opg0CJgF^PgYrV9Ty%5UWR7ze+ z6YN$=;SkVli!iX+yAn%*#K<PdpiaasbhmQB(#(5-6~L&MtZG|KD9NNKFu6MTCNKun zg9597yipif4Wx|)YXsLgGow}+IH1-6&CI9=!Y<Nsap39(=Uzwv&9-O+nr+bpv=WlQ zrQWB|473^37T|llPoWiPK7}@*Br>;X2b#?90GiD2R0isr3|&C>{uh^|fF|?1fwX)% z)E*#w+zIRzg!h5{K7(p~&}Wd`+yF!i%I~`oXnx;KKpjvw11)xA3lP&nEkEQl=yA3J z85nE>ZUfHpJh>fM=|_h<fHnZ#3ADBt26AWhtldDjZGs=lLsz*YP%&9l?kLbkozDWx zeYyLAR_+0ym3t6q<sJg=`Tp!VlrRQd6Lq|E7>JeeG}Hnx(*LAha{`E!kpmtD+Ri1% zMD;tDOaieo)ETCLbJBbD=p{%(M2KoKB<S^0SkP;$QlQmu8PMui_JR&Blf9t646GCt zo&!dKRHQ^uOi<Da{spG4ZqVSQ8u*}(ZL0w;^*x{#Xna-&G~1#cXtqThXnd9c8lN=+ zjnA5t!8bq>XnfWTG(Kwq8WXgh%G(AsCTItm>!AZ^Ez}9L7U}|83#EY8^4+5P8}|UM z<$HnF^8G;UON~7SfhyPRg<USp!W#{CkB#K8du#$47i<RJ9(CsR79cL)1f>lLb~+<r zs~`p<)NO+8<LWNkf!3Tm1brj#6!c9$475hx4YWqi0d=_9f2;|c{g*v43fb(5`P25q z7lx+oiA&%xvnMt~_4dTA5Y3*5>345Wbo<}2C;B0tZcnuGo3khWlAj98if3QbS)4Ox zPw17LJrM#F=81f|J#jwtzCG9L*9-hbMSJ2l(T@MQy9s4wgY_c(0D_7*)1G(^dit~} zf};N+#RC=XiQq*AQJ1e?m7XB2DCZ*rq?Nm<G14fLE>Dxjg6EF^BWcw&-@4|zq}A#A z9kLf{BAXfxlh#HabvsPdJ(F24Jzr1#r%B_l%tBXVPiW^{(#Bx@gzST+bw{6+U6N$F zVIFDobD8=bq%FZK>F<-ap6L5nh_sE%bX|L7;Co6t;DPm|onx7gX~wTBSYJq!rXC81 zBc$B}C|uGWT4n-P>gDq5zBsCpkL(G=kHq*OKzbLrfdtp8#Ek5T{Jd{!j3ayE%S#Ur z0yhJ{o-KbAD0^ax2L=uSGfN9j9s_R*1xulB0~RvnmjbuD4ES!m|6zVKxCJPC;&8BE z&mbAZUJFZrvM1QYNgjb5aK85l$ex&!S*Z>o_D!xhsS<d-l7d&MvL`Z259>176D-Z2 z3)FiNeyH)L?1`HRv<8j=bpQ{O1P9Y2zydJj7q?6RGfR(3*T|mua5Q)hD0?EabWFFH z1n!xYQKYc!iHUV{RSzX_5;v0>5&{N!H|hujIrQ?Sz)7!m%7B?wZrN8kFqc{(%d7(U zbYGp5$G{Trq>ciaVBJFo^}XOX(oX@afT7?viRNliZ*jI#4G?bA3)KQ$*uJ+XY`9(z zmE7ye5C`(@KUHc17_1AATYLgNXl4j;B(rp4I;1aH>Kr~vuHaJ}4P4v|JQ_5Ffi1xF zNVzn6E6{{d8&C(-c3`l+Y#i7D{DFUgPEq{}bOG%J)HC%08Y*>z-B9TPfDSirm{GH@ zWh0yTY!?{7^lh-<b*u6Vk`io%7yeYzfzK~!PtU?LoMoT5o9pGQ%)AXycpMrpo6YET zGV5^BQWpN$hrK^`v;R5sO-IL<Y4l#`=`&_|i}FO>#ZB?X0H@;lw9JD#M7n5^2Px6Q z&P!Mc>5L^FPdo1>aRLj;R~>~xNo&SVxag+ZljYw~udbtb(d$RTY2}L(9<Y}*G0X3# z-pGFHDyM0gUxkoNy$g#T=>mW0`W9zfAYGn1|0zkKwz=s&k}~pERFHNsO3|pK6Yb+h zE40KB&Qsi1*LSZ}Z<2J;xtA{1l_Xt4T6p563mebv14_EMvb}V1#e3=E?%<`1yNQ=B zDi`%d$oLbwRE@Tz-8s$|5IAzh##J|!6^{QgYRfGNT%zss6fbfZQsnVf=ViWWVVJfp z{<F|$YJg&UNd&m|^7}v7Qk>Jiui@h_Q-pBvzLhv@he@Mcr+Q$vIOp1H^<+lT+|^Tl z-}@TEJ2abH8w;iXjkNBBU$s|X8LW?T9=~}7x}Nrmg;!~oxv~6fuDmAoAkLH8wvV)V z5hfpL3t<?0Nn5Rb+q8{1=k1HI4oN#;-~?$W6L``_U2G#Rt&n0HakW#oJ#P;JNZqfO zb9NF})2Y2UirN6XSaVIPbc$96X#*MfK(RMBkd?9-_(G;Z&AbI@>&}LNw(e{zkRwh8 zX#-n#wjIcR;*(H!0Ml$=1l$R<?ed0!7D%~UkT157AtzYrB-;qkc7TyKFv<2TP{ol~ zVuAg{^}Gjwu$tgOK^hKtNU+nHxMM(ch(wlH!9<p{fewqF>?n#CZ%3`-%TxIU?>Z_L zOnt@+nI-oZ?gC~X(`}s8VRM|4!Y$Cw6|-;y^z_V-$s#{)r^<`=h~KZ1JxIL7=#15f z^D6aVq|@^uKRf;pjsu%Mi>ne2{1z`vT2ro>dS{P3C3~Q5Q*PEzN$Z(#t0j$N*;kV$ z(m$WAokbe28>ESm7;~^PN#Q_OPIKr9W+&l5%#)vywq_Ea)&1M}kc>FH{X}NDIIZKl zKMd_AMVhDHMk@b??vtXXYe>7{pb%*fjZjT>_wpLJ&EzW+2jYiOI}ZxhxVSTMpw<{d z6$ffPAW$4=O)d^pn?e-_;<8p@LxN#~puK;CS(Fl>IItx6(LA6y@as&T0L6h{Zi>wT ziUS8nvmu~3Z~*HDC=NWCDV5Qb17;Gll|dXxEeeVQ`4oUUk2rAb1ban!4m_cS>z)Jo zLC@eg@MZTx;=pj`Au;0^kl+UySmHoE2T&ZS=KxNSlwgDcj|!GV^v1^kqv@w*rAz{Y z(mz)}ngTNav<)bG#0EpMM{F=8dqicEp%e)3>n+NFb~o80HWI7=G7?mVN?@vPp<Yw= z2;rTV0A-I@Y=i6(^Fvevb&#P3XmcF0N6hzJ2ejB#*&}&B$02)!Lys<dL~|U)^#ynP z(i$OazGK=Lu@{l{wil5xLbRtUs0D~aO;0al<P-b>oiXBNnT!$E?yiF>W5hhhuy4_0 z+yzw0WRNj3;vGQUz*y-XHFFPe_M9bAU@wqj!@zzZJYEYN6l9$^aD!m0<NS?4bdhAv zCZNfj%|IPcw*alMA)pnuRj|huwoOpo7j6bxVLO0U*iN7h1lUqO0O>57`7DB9f$aQH zHuEq)O}l=-^eMDx*ZWv&pAlo5BK=dSPVD8=FF@T<SmD0sk=D*`L!3An_cAAi50leb zQ8#c?$TQYht>Pz_aScBe8ac~8rq^&ZRZgMSUwqbxtrB{AMp$N1K59sPmVET{#b^6} z-8!q-KOg_L<mRb(E*5ffUV|Z~@m=l1U;TyTTOIQ4d!+S@>vE)VD!809ff$XDHg3wf z`Cq2`+zN~27qW>y=*?4+N1q~Xne|UNd619t@RGLSB~;puO{M#E#4^jKNT>b3nd&FA zoTr*%Ra#NejUQNYv}c9QS5UVc;y%g85yIGkgTP4to7L?lA7KMYP02?T<&S`pk8Wd3 zuc7hYs07JJcAQe)A>|ESc^7aiFr2B60k;8zk3{=`l8@iu4=DNAd-E+Cy+|%4Vs7?S zlEQWtlYA8aks$}bTdKmuMwropqoNX{3Y2`D^8IZ;(E8f}pv}-61ajzkB_HW;65?aP zSmrL3a2V+JAMx@r{gj*6m3*`(lYCqee6v7a$wwVP$wzd&-a_*6-Y6?)ynN(L!;27{ zNQ9)iQy91)y-(&zDRBIPwHtwDz$M<FS`JLVGGqOfi_xltYW~zH(EMC6p!vC~fad3_ zRtEo?H9+jKL)@YkXnkJtF`pRFL)HWNCm8n`<Yi3&Z4RvwXme;yK$}BL0`<=1Z3c#X z$dx1_w*B8hZB+*TfNg@lvD$%AKb_VAMD$BIb^^mE@hN!!Z$H%uOzAQ|V3tIj^AR_i z?E&&RP_bt(kbfH3_LJuNuGeLQKpWU@05W^3S;LLM;5_Hs-UPJW<RlR-U}_7H$!T%a z5YR2r@cv($NZke%13_c*?LeDI-2s%$gt`-Gll#NKpo?vIz5jRNl>2N>PI;*as3Sm> zsNP}}i04mo{aHc(-NOAYud9axK$Pe(84jMJ9s=S{m7P2W{GA2a2Z4uylRhS(05p9$ z0n|Z;qrfF;H&=TMXnZyayv)zl@~B0BY6+6i_)P9I<Fhc(_^ebJJfD>TjnB$~RAdEr zs{p=QD3=S@i;>}14CPWq)wyzKhH|Ov#i0_TE-NJgtc^LxOe3(!zrZ5@0*m|$v<dqb z;G74eDnb6=gyL=BUk5t{+krg{U4b3I6i!s2{J&Rtnc4+Z!BA5`=74_y>;}$;fr0Y> z@;zJ4sr3R+5?ci92U2H}MuR|vTyZOmT@s;?H;9Y^a;C{fop|@G)K%Kgacl;fc9sWN zhacZAxmUvqEr~82o?awTnL#P%_LrfQ*>JI_l+S}|d*CRR-4;F{{bbR5n~{Vx1^!P^ zRczLlDXtFEKjzoMQ_!6Y<lXR6VJBzV$MpD4Cx2G7p<)hoiNdEibLw3|VCj*#)H~M) zX?2Z4s+iY>gRL!|y_*6HEyc4nI$P|^DTdAa&tEcR&pcOnJ3pP_P$}wrsS-Cne>>op zh0G7fBWx<p5Q*<U#;68hv@+9pj5HQ#=?qo?eif~MoL+yiFzWV~s-<|1YU=3A%2#jS zMU8jg@5avw`@NCh2l%}yms*=9O@3|4Z35jK_4^99;0(L~dh5E^t#p1BHg{0D?Xbi_ z(hjaqlXfnQy7eGkrLmXxaGt_tDJ!Jgxezr<(ykDGl*FyY(*2}3D?>n80gSTifZhsl zqik6LcomCYTXPz2*5%%5C@a8Z>ku&N1HHBa?OUj_0xJA1WCfT&l@(wDRaSrr)L{@~ zbIDd&0aii|XeEpQRl+`R1soyc(~xx70*u(!LhT^DTXs`9>-=ktao+^VS)SP?D{Mu^ zg^<LbOYSYq0cIa#IOG}jbAZB+KQY7YfBNST5AaiZ=E7Us0JO+owJ`Avd$PC{i@vJ5 zYcXZhB-3A2?bL?$u#~xiVz(We{*agG)yu=z$snvL-R)d5wS2$J2O|1Upw`<bP~-Lq z)P#0RA%CMA&caf(o>p%pC*>B$upB$#mg2Nz8r`QqTj#I#8wGzmD39@bduFLy64b#? zYU27%mK5nZy4Xogti<m0Zp*c9c2b+mc~AOlu$*V9Wca!yP%KsUV6C`IEJZkvGKi%b zOL1SBVW~a#y<v&Ol}Zy!v8jrnSc(;}<-j4}m%ODRmSPuv@rGC`G~ey+B$f()$!+5) zmSWop@v>No>01>hmbz^G?Q)@urA!&*fRa2=#ZqCvuyPc*X%BtR8<v!%yX}XHW%PRB z0U(;?BH%$_a?m}_Az-NBWcC;kCH!SF90m~AA-%wF=mmVLe&Frgs(#?@dZ;%nFQ9jm zVUoPTGp?Ub0d)qo1eSWiccKuG-CO#hhJjD(i*DYq<V(GRWl#}Hg5^LsOV3aN9DzH4 zl|cJ?R}^TshyksHDxj564YU$!fGR=OtytXk!ruiPf$&aJ9r|?D&(T4*m1h^f%Y`Sq zk87<*dRiRLANA9*`0`cBzp=|wA=J0$3tT2Q>w5pgDZdyY#01?F|LcEHXAQ<hSSdmS zGmzOGS8(4|*+K31R;Y*UK9%K`PucCRfOxLXI=z01^?0a~8T}Qu#y{rAf5h8}{aMfB z;)bK#UENpfc_fLeCRs>BT1^(^t0`q64QcH)x%A7Vbu6dZOImMn!SS&7*e2R%y^@07 z_@MWPHC0IH(M{ocrOmr!B*;HD?`4(STKxzEF~)z4!Xysb9|*bU=)iiEr(WYfjVrq- zM%^}*SzNAs-5(A2>Un#}cP*{d%j1((Mn^v|Tm2R3gFzsN7)IUnC-aU7O7efh$MkFh z#=<V9N8OY)u2W>#0%W>Q7VQwQ;KylOfnn_n;JYbvaE(B9)6n&cWyz_VGLJCbP5ou+ zrkWQZ!)~D2<vAdMKBA5QnZMSPjRIXDl<%grji~CTMAz%a>ZTY-;&pXX<Ml&84&@yq zMd&K>;4sjQmVGx}sSQkgH!Y*v0*{ixM8z=xLuM&Mb<=*n<OZD5?@L@ThPo+|>%&mh zO{3XHy{5Y9N_Iv8mMTM4uotLqYDTlV>B*!M6|S55Kw5QEBw`bJ)lG>Nx(ldo%JL&M zfVycm5!3Ukn<iHV&j8g;d2&6OdMQHA+0Q_jLoHt~=+~FWm4O3l0%!q3jlj}asvc?+ zkmX0ZTM{^asoPzlS$X{$>=vMnIa+~MSR2sRAGHH*`A7%wavv+y3AC|o7tqEWDWHux zx`8(4=urmhif8BrnoR8nS`5b^keaL{!v;aW_+uk5ANqvYa}&@?*bGGdZiBi7X!3Um z$l?#FudP6<zHLCoszBWi40-vx1BgbFcG?NdhaT50hLx8efV+VS?=Q^(XYo8xM}T2J zt2^qTyW6usyW4)C-R%I-?sgE!h<FYq90C%wroqD)Fw*}mwcBB!MfwzgeeZFtIU%Z# z^f?O5osYOe%>Wq@izg?6xDMNaQ-X9NU<r~C`Opar0n>hzq4A%MGHm>(8*BVWt*bDN z{}}vgyjlU&0jvZXM@4~fR4vpPa1jfRfK|Zp$Xa!$YM|{)Qv<Z6N3}rXojPUk`_j|{ zZRt@QXuOjE{uknZTqkQLuklU`(0Hd6XhYXFActDB9cT=r@t-kFC(sy1<3DS{6wsQm z8)!|~1B3^}Fug!qkkqfd{uUbliD9Ncby=}XLX!L%Ls`6#27n>YKbwGd^UXlJ`4*tv zd`Njcw{8UznlAp?27EB;ra`s?Q5ro^cL@3zp`C(0MrasljIdkKvqw(QGtCIl*kcrE z?C~s6hnwS?5hGNVeMH+L<`=FS3$H9A{^!&JrBC!=th)tDkH`&d_WFlKbqkapc@yku z)LWtY;Gqvf^t*LET%+Ip#;w=$yN02UJPNIFRq^aAI=h@R7a*kfai)a$z7Q7q^yNum zGFX7nk3QxuVuY$<gFE=8@Q<G62!RM+6Jch6kS$O88|dko0Yb&`f$I4zd!tEuzM`4o zJ}LG_yZp;hYUI~qZ?u`c(M_XL?tjPLh;#jaVs8*e?Cp(e@jH({)7~gOm%Z^H^S&Vw zu#vpXn@L&8-mrNy*&8-*wgq^Stu)9m1gtu>|7&Jx=z6Hzpe_!lt^&&5z<QU^Q&(b) zEVvU$&8h_18wf8^cRScN4$J`=q&RsEw6ztZz;+pE-ri_Sk4Pu)hiZda*&8;PmAxTF zONK+BaMr1hF<|Uwx9nK<hV@t_bRy~G36QN;J_;;_HKEGhz_3tZvNtd+qQEI&@D28T z^uq#$;R8cl;&xy2_C|TISFfppU?=H}G9Wg_2(TPzZuJUaI5?ubmB0`AmCaG0t!$0~ zqnH+Cr~)!F(UVmJ_3S|Pzp#JfT3{)r1=KpA>KItBygm*z4$PnkpeBH93%L*22(<ml znt-MUl0dT|nt`SVT9o0}5O3`CK#Ial4|D@f5A+Cn8=@CzHbg&=Llrd$G?lOcXewbN z(4_JvptbR4ph@K|K$FTtK(isX0?mflro8?Z+ks|7>;Re#u@h)E#IS?ThS&|XyXAm( zw-KP-Z4_uW#Ir!NA@&2!hByE;8{#0)Y=}dmdK+R4Xg0)QpxF=wAnKrvDwz<ZYXOf6 zHaT<R7?94QNy$l|DTyhd4yYwaLbD-4K(iqvfGtBQ&}@h@pxF@RK(iq#fM!Ef0*!Z~ zK(irYK;xY%W$-pcHPCE`8lc$_wLr5W>VRf{)+>W=mN?Mt&jiqTrx9qp(*!gdA_=t1 znt{eJEkI+KR-iFV8_=4t9cWG10kkIU1ey)e1vDEXrM&*hx`D<pJwP)WdVyv%^aJf~ zgFxMFhP@$qNqcPI7rXgJUFvO!O+d3DHUrIu*aAeX%7z#cWL5>ZRj_SbGHn~s7-74h zXOA6%o@sUhjXj2e#vZ$YI?iE3d=2usY={N8rObx-Hd)MCxJp!SL+IN+M!gj3sQ_fN zA?E3KZ$liv-)x8hXoVxiv%k^VcR6!5gx<&55aRp7h{&hg5Mp;*wDed0qM{9PGnW=V z<!R1__^1edR>X9WvDpxJK|jrgFju2XiuOb&H!Io`XT%%xT_(*F|0?muitPHO@y6d* zOW?l<))Rw^J+W@$%y{F<9nf2X@45BT#2dTy&~03%>xeggR%r*ka2sjoVS<E7yMn#* zo*_*|zPwb=(LMNeH!t4v=#-l@>E-g1naT^`u6`h4asLV&1fIy;90G0tUccJSE6Sc2 z_?%;F*%Kw1)v~}hgVGO#m3Ip;GQf9*y*=R`#m`?CGPfOtx{VCi{T~<Itp1@616B6K zL?rzuK-m)<(h1UaD?)*y+;#(_cbCZHm;;{tmQ$1RUxd9<9tAdNYb9?_*i@kG37ZO( zJ)wgP2TACKdw_?4KbY;}W5<9KvzTsV{0C&4L`BUOfQS8Lxa<j=43|A&li{)_IMU>u zBxP1&A#e&99r&(#ZwZ`qE0X}g5YT;r)!P&30X;)0)bn2mWTce=(>W$Kygjk>sEg6A zfNBxIl|UkZb+;(coR2Y}Ib^DU95OAcf$O;rSOYBOI$$kuoKRt49gsVe0qcRp80*Gy zV8evFECCFs*(mf?zDH)JS`*pKR7(P3KNZ;wq)0tU3vhjS{0OiWNYJ*ZZ9t-w^?dC> zd%g}Jx0HTUA2b2h1=OL>VaAy%Q_DN2CV|AvJ>(Z8H3&j{6f*bvDTs`^Q(--4*(Y=- z$%V|NfWlqS+(en;V9t&vUhIE9E1LLP=;<?}iBGL}oS>{%kr&a-dM7W$&h)=1lZZ!2 zV*vqyq*a;FpIba&!vW4~(vvQZrS{RMBAYm`YnZTjzy=qI9A6qv{~UT^_PTkJ6O9c8 zxCD7|blAoJu|9zhKH%@nlzu|Lw|pH3CuwUR4o=cG9z%Z8_BUi2Bo8`*hO#51o!{}# z*TuQ6ORX<;<#vaU;1qG=566wYWIKp2lm>G0V(DRVqvXX$!-U{^d9k$M=4K@?)VHBZ zUR?Ki*YP(45fi#h@?tB0z#)>LVNCu*QEXcU$qVR{P$e(sjXHi&nTLF6pyb7umre|l zK^077peBVSFA#6C(R09{VM0$Pu337>xk)82X7TMAsLukKy3uH7KX7q)-5&xaFEV5X z9t7Sp;hct&7jr{Q|9F4r;mit2y~9ugasVYSZaEq}0F=ClGS>q<3cNY#RzpZ$OnCp{ zB+#Br@}l7=-=p;MA{wwn#mfu56fg{bnZaKQOf7RUev%h?ALCaJ{H6OB71x)Ox46C> z_&c_~99Udm4lLSlz@q&IEZT3%;H94A1xDK;9#Zl`3lEsEa1(TX7_y%A2YlJS-#I>y zvI1dOH<xlQVUZq*s;f&_SXY;@&;iv6i*<(;0HQ9;XOl&hu%K-uHzX_$_*exAi=~Bi zk~|U?%qYoTN&#(psvD>#h1vrwcsr~Ym}wZ(E&73>hutj(eO@*52H-*et-OuOyY8r( zc@uE`#JY=tn}K}FQN!&mKnu7U0@_1v1&*=uh78+)rg^rDI(v?k#SS1oNGXe*z<GWv zq+wu=VFT3Nz!Ja8BnKoINBv<07|eF7Oh$pM=h4eQE2>|lu^(uQG!6ixn#P2iffks1 z2&fi=ItD}*tIiGsO~({~G?1H~ngF}$ss9HcQT}669e!r&liJdzI639lc?35)*?i-2 z@1R;RdsXmpx7+&<?{bq$Ap#yT{qDx9YvkhT*{o51c68>Z*78H)@fn0iMEENa{AAVl zIA^lz>mvVwFZVn}DNdL60L1k4%yQAb(@>)*ucza;y}yVF5BZ5I^=_n!-_DZ8oJ2xi zQ#+EI)ySfskk%Z3-o+8tGOysKk+UU#FL_&U>%`(ez2>`;?}?`s;Do#`W#~lO6xp;# z<t7t@QxVc;mZSZQv<2rx2dVb63X!&P-bPAvBEA>oHOtWD&+6=Xv_#i;HN|2#lcwA* zZrFD`cAE1Zi$v_@oI8s*`hk)D3uGh>0-?VQ+yHP>(%xTG9}Dh<DtR64dq(WHSy@YZ z?*?uWTA7p`HUzTZ2gz#=3G{8GwisLTnkhV)Z<5#1AQ1yfURR{uT#H0omI{Wt8^~5~ zx?2v&p~57uN5U@DYZS<LzV||vyk`4%dB!ELbpR!=ZB%;@h;LZ^=@9TbztPJW(Dr(h zyf#@`02brBfI7HL^4j8|C9h3ZP690+dP@0xJah@1$FYseLcm{fzuN?tRd5+TI%$$h zV46Q*lte>dU<_F5jnFEf8KKocGeT>W*VkDskk}IyRtJ27KVZEw_`>2qV&){p5<qr@ zTxa$j6!k+Dzv~h5bKb<c?&0F4lALg;WtxFl&_4vW0B7TX0=5F@eAERPwgF#?^vf01 z4&=B7*a5Wd-8voBZO_sLwC&weK--?B8)$oL_W;{`cwjHE-M>h`%it<#5J<#M6Svp^ zG`n;o(CpGpKshhTuo-Au1#S_Q1L_da*k>!y*k>E?%7xitwBpqGZ)_y*4yemK3-1IP zcMJn<Be&f^^MvGprb$PDrb$PErb(Yw24AWBfu>0h0C`Ip><57sWqJt6KRxf5&rp=t z7G+w1YEgO<K+}9jbq#ul%Z>pNDqjIkipn2wO3+to33Ac6BLuYQzcA3sEd^S+Wk4&p z90)sT{Y3@PqW>y^3GWb&I_NycF(6TQ8Uj=S*?w~zSPd-m&rk!j8R}Xf{t&fW9k3ml z2&@OT`R0xT)!h5wW}x&^1E~(bXXyvDm)lukdw0GcKZe5g@L*&!`h<X@C6<foyc?M> zLNf2hbx?hPo^~(x-i>rlzkBb-8~ELgE-t4U3l|j6-lMZ$yiZY3@8F5#+Q{^Yb_ALm zf2ePAp^w8C-xi+ZC!8AD%)j`b3SWWX%08i=zv!<#*QZc6xhv1uTy;h~hJ?I}&wCTV z$LGEJC#{BebYD`23aKP&BSS3!qZW@BLsLi#Rarb<HN{Cw)?n78NoyBIk7@toI@|xa zp8b!n;ylhm!vWGnjs=dSjo<2H0WDh4*)?dv&$7Ug^X7mBj-)Lv{tYcyp(aNQ+NZ19 zEf}lAb!@a?2@4$gy-R|eG^K^Yq}>d}my!0ctWv?zz5Kk-Gm^BRE7fa3SFqQDDjP=H zNCq*|ACl^@D7eb4g{$vSbM`?~b1r#r;Wr`J%Emj4U48@7^wibqL2f^8Q}ae=?qOZD zM}D>T>00XJC;z8?PH&$_)|}Bk>mi)cK6gWUmG)WAPv>l(^h5_^nq6<;ZmU)^mO(P# zLib^i69$*!MXq#r;iL?6t%9^%a}mDpRAlC}0D|sx^Q7a|X!`pu05EoID03zBsy+k@ zX*FN%j*!+g1Xrq$)xP&wu!^)Us<1mO%E<T|)1>idW(DshP4IJ+w9!d_`jQjT^d%>s z=}S&Ht1s!xWU?rEPSQ3kF+HMU_RC2-BtSirFJ4?&e7h<kyyo`Ii?{8a{=Q}_^5-mj z+1a6lUDn7RMOaiTjW)-sv{E{zrXl6~5KrrEs=smk+iB98`fc97F~FW2ob&xQ7oSzn z@<qjG#ZS(AM&%@GH#_^f(ZVI0ZVsg%fSznFiKx8hExvrdmF42ITKjh8R9>6iw;jVy z5~pL(=j+UT2EQbd0`=ca$|hudHULSHdLZ*9(jKW_lN1yw)hkJnS><8@RS0`7%W6_r zeMha!D@ozDmGbs-XwH4LWRSf~2_c}KG4q+t&caaMk}I2`ZUwM3O=IG1z}eTk+0pI5 z(1Q)S#SUO?jD_XiUXFUtr|e}X=DfX(M%P2;pgQ5|?d4pmQI^&yR3~D+z3il{x0juu zHUEZxP1(zt^KQ^X9s-hAKG`wA!gz2V@Gx*Z;ie^Yf7X2_piT%@yYSPaf>q-h1Iu29 z&uW0OmtnPP;1n?9=Z<A_z!kD0LqN76P)u1EXfDiBpss{k2Ba*(av&?|1S^0kUqU6& zN{9ljgcy)Rx2OU>H!D!HR0IDwDE~aL2AI+3|GYnRNz{!o>Y&<kl6s)|kmG`WIY|Pj z<8*r&&6n9lUsL@xk%JEj_e|T%R#(l?dH7bcv<Ox?YfPO=TPL7%+JLSPW;36ss8idl zmuD7*g9R&w$Fgp-_56bMtxKEAl7+wcJvZlq_410INSh)|Z+!3x|J!-l4AFF`s_7r@ z;Ri1cGqwC;8mk5B8DejGO2q3Yg>EAMF6K_ob_lagLUU32A?li(Oe{nACFn`zNW>45 zR!pUTppkH8=0Rs0L?3D{`6%bH%ln?pkycThdSo?;RyNmMtS|xOUb)x#b#6W#xmSAo znj_HTmOnu@$*o4R$xLa2$x7D(2v6LXh^<iGmCEZZz{PcbKi}*FOIBwVhJzd5T=>9y zRd=gGXKp^Q96G*d6Md)VgO2+5XNhJ$6w|A7gOFaEG;A+js+W$GF~mRz*o&8cm4}GT zoeil1udk$AWxD6x$0B9q;Urp;x>%wt#`^@3xi^Yd#XE^s%{$$$j8RT%)?n_CB6Wgh zGKyBmHF|)0@+XwBhLboKt-*?plc^@SF`k*v3ttj>{HD;UuU##^mUd4T-p4|5B#4vp z)6G5o{eu>@_a!|3f33aQAWQGa+mcp3{!*YXaYm1SCtXh(+oecvUhS)1!dIW1cU%&_ zrgm5Q2c)$p`W_6C)^WYcsi#&{#c_K>Dhq)_d+X&$o6Po0QW>i5X5*I@@r(GNwe)uQ z;Py3mrk0kQPl{EwH%6$0{Ean(FRvh8iYiGAR%919xY}r5JyYwQSs#59Tj?%m=|AU> z=lcXs@3G@V%;`T~RB5bZGSfm@H5L3znzZ@{Cz#6Ot)r{VUlejHTBhGxjlu8n<(RCb ziOAqq)kY(2-bqS`vGY46<+bL#86MQ{EvhuqR(Mh8ZJdjN+P|SV8T4N`>uRYpbn^;X z6J1GtDqWVc&)0n<JyOnj4;xv?r`ijBinj$y|FNA#(O<MK;=YP3{kQG{w=cibf1Hwc z6G=c(z|Fu=e!hH^(tnht3_~PvrbevNf7mS2UfY1IS?mW&|EX-C^dBEKkpSNb%uNnx zKc8V>WbjdC*bO9$2K+gIZPqpdjPMmFsG~rpi{;;X)<IY9eqf~EspA8V>LwQt0$E+8 z%e?+`nqv$ql3ngA>Axs;9k2il9dT<uCxDbXAFA}9)!8u-eVt8$+%hAt|J+I=@87qG zAL&18?FCAZ{zH+-4=w#SpV2u``i~3+p!A=O@}>W5G+qg`(RkG5bqyf>$CF37O!_aK zbL&Z@|7`CL=|9ww;tZq*n2VA^clxht{H?%xs8((qsAq#J{ikxz(0??~t`Crh9MXR; zMS>4b>%Ws2+rwjJZ<hN}N>C3VtJw5lwYzaEKM=vK$7vIcxx2Lk-Dt1h`HjqH-3e9O zEReU$K{r*L0%FX_^63VCtMA>)(Bm@1WtQ{;v3!0C><3=+-M;I9gDyi!9Jm1(`Rv~F zfg6F(1V~};=Whw6bHL3|!+r$01xS^NABKR;;0bO8LX^3)4VY#Ub1ir~*s1t00L;u@ zQl(GYjIBT$NB=|LPAz^$=^K#znyO4MuW8Gw9#_U4HE$`)r^WcgS+~7x)_oRRev8lW zyYnynlwS)$@$5owSom1+>}s8Th%*L1TFBU_4<I@bnE5?^a#C;^Kc`3HYi`e{wG)7D zbnEE~qBvevXLbIBd4ONK-mgszfMPgpy<f*9q*w;W0%=ucEd71b>Jxz*tJJLYQmU5X z)6nZiSWiS+-`$#iku-i{<t_5UC-_~`tP$y%CT&_6WuqEQ0b8%v>;i+3lD1y2)w!%^ zNXdihbx29`Pju#xGMsmnl>B{BN=m17C-$emPTDgI2L-L#%We1IqX6~;S=29CG$_al zJD?;P`;)5MYy|RwopbJr;-Up4B{3QuKRM`FYb)^8*Zb}BQt}Ape~FAb%un&=t%Zk~ z1RgHC@+~t~>)kJs--Bs6Z7sHGgOq*jb6lBUaJx2+a6F_vC-Mv4ue~D*?<NQAa;~+Y zZ|0};S<~U(e!yO8WSqQIgX1#HC8?ou4U9=EN>Ku&mElZRc-j!cP}JI**n^Gq!nv9r zsX}&MM9KgoRyJ)1Vex4$y_S9!j?A4ermDN$+eY>DzGi0!$>BG5ew5$hSPrt0P&;Np zgl|8>d6TM3dE?oS)|0nJhT;6zr}w-KXIr6h`MJ%*8tC-undafNy>w3h0Cy_o?JLbv zKIIzdboOh-ld5W}g5LNNX*4)~{5zyE8wppjk&k$}y7G@*->5l}xwV3Gt%Q<YRkzE3 zS*SiY>*#fy#}`ztyM$EsvBvqbkCnfPNK$Ed%wrbbV>y`p)MEBiYb6<>x7muRcE6n) zor1mG5;5)SVy5&`w!LPjuLs_T(~^bIH_k0oE<1N!g`l5VSF);#<B2xem#?Sb|2zBg zs~T5CQ7-dHW5+YK@;Fo(7gawPa`jpR3#lGz`(P{5I&P<NM!k(Q;$}A{Y@E?(;|#|g z<kJThRBz2xk2tLbu5;szRyWRYoV4at<s^#ZjMY{<k^GHsjjml;=0+WFFZ`tG+*S1g z^y#W{^>bSPfq}&G+D2aeNg^~vTG@9)qhnz`SyWF!8k50c{fCFwb=5q)>t|6;YIp-( zTq_PJ_8;Sd`ciV9(SH`I+_l`Xk&EJCu9kV72p#!Z<Ut5)BmX$RW^FLPF0+vDxHks# zFU)@QcU@PyD81(`>Po*@a_)D25&HBypR%@pef;qYp7Z}_{PFzabJx`_=+kv|TK~C} z)+zcU&m58S{xinoXO7Qawf{JI^ZTJb^)LF5<Eq-!W$s-4M_l&b8lQ1J!!tLYZ&P`U z(Iin?G|REL!HX3-PL(>2jnxW|-*oPp`E%&gHRHMH*Hu5S#y|g`te?*`p1Xb?g8nM? z(@6NluDR6ztH@v3W;6KbEPsybA^K2RZx3ng-E&+-S(VAvYLlxqCRb~%y{Gxd<Z9gH zYN9At`Aiez_Qg^<OFVC|9J#Ruxti@-u&S_Q(M-?1JQ~v<bbOSb&Un+)`Jqet=CW6R z-=A~O8Snec`b)jnH$QY%OZ7vi^i2)r)Mg&y8vy7Vqhpz@lYWi&J>>LIg2#{^YP{_D zKc-2W>c7P9X6PHMztj8~&`;|xoVQ#3Y41--|IT9lb-DVxPxW{Ibp0)EkzV2x>-T+- zEx-7}`i;^{@`2=Uyw<5F9E>+!Us$nFOtd<bdCpu#wj<}epr5MRV*lz^efrO1`uUJw zQU09Kzh1RI-@&__t3IXo&#KQT4kqa6(|PhgCDZl0WJ)%#^Zuk3^C#(JND1id{N?;f z?Pd>km?rEr{_QgUO&R}o`#N=X*(F<f@ooQEh0ba?cZD8F%&5?!zK>I%Slane%<Scm z*~?+GmrKK$`_SWzG-1^AlgHHX<vdWz{EHXC6p$)0c%2q^W&u{Oh%u~Q)V=pFa!mlO z8nZf>wyWh_f>?`LeY^aNcb7N~UyFvnv4*jt?`(3HUEv0bZ*lK%rt`39-(kPBu41X; z4teX!;0#HLa&wqg;4n>bUWskID7);9dItZn{p`b(h{fI-EQ?0wo(HUQ-+tm*83T?? zKdalbmS<(#ri&wU7wXzN22Zlo>eVBh4Z}&CIT%?$3A7Dw?}n8OFWlQVk>9<2oD4~G zxi*uZw_jLeZ{N(@FN_Z^Y#c88v$y&Wx?Hv39OLI@?{sxCm*40pe%`ET(-hmcgZe06 z&FT>D_n*|ra7lLgo2P4phuud0*z9#zWg>H53#?jH+Mgq>PEkwKH4>dMR*uYF<Z8s` zzw2=(rlxD;Vhu8>5ivL!WfC@)QB9;xVsd44HNu@sAU3OB$yft!F=^APYE{OhY{52y z1F;X=$P`~2EJ`{Bz9>?xF%2_cp09qeOzs9vMZiSM<F3NS_<;&LdprgI)X*QkL>N=d z%wP6&bmlM7V9tUqO+OHwRqPHA&2|3ba+tWux&z;OOYnG=u@G&~!#WPL#>d@WI>X%_ z4jivXDY;7g9u01+(yLWt?Lw<w8{Ak;*Bo4YwR4-C>I#>;w|Jv_i(*$O%15Vf-pCD$ z_L-tBD72K1mSl?KK{l8Wt(?bGTJg7=T&-7XlU~lF^~@iTV%0|;C#^c^cX;K?IP+fN zye3os$7#~qAD+lOL|Rvo`IF70=$jHJAAh#zmD!vpu3uC8AZcT{ml3Q~b>qDxA2(3b zH#;vIEo^eI)#M=KL6@)H@^vU53cB+M7k!AE*r@Pkh1g^txYLF`Z!Ekver|i@$L~3- z!HfMv<H27#zw)=m2B)4>G3C_L8?3=Ie~(+22Itj}PdE6Ule49WV<*W!E&m=oFAc34 z{&`3lqnw;J^CbBP?X=k^WmG4KQ;=@srl80u+G*2J$`}{-FxVFNB*{d_xH0KwV%~Db zOpNab2j8t~@f=jF59x#dg!^B5%|)=aR|a_4Wj&PB3Fy>n@Cps(NGmmBo30Fcf*u`i za&t)P5mo9jq}A#!t}^uKHL;K$y+#$mqt|2_7~NeI+<0Npb9kx?{I=@?m!5h7&;NZB zax2f6FM;EAKlXqr&Fs?nnv)9dFQrpSCzpbV#_;fy@_;1~(yGVz<9+Ah*s*(xv?lmk zdW^L8gx|Wmj%}3GP3m!+D2?+HV)I1Qvw34^&yQZidDDuU-PT}9YrE$3h*Neg`|^ua zuDs8>ZyR2FRb+dJm?hGV%KRdk!Or7M+GU?^Ppx~4+p@cR-J4vwJ+55u62zIPV77ip zulM1satU(CXSjhBXQO5m<Px0ZzCiIZF8*!6&7fJS?<xXd3$Q2V)>8}tmq&?;@)IY_ zg~-3SO&MOI|N4oOP??KB-vRX+A}pcq1aio?Jxm%Q!V<U}cy#<)`L=Vw<<V7|To?iB z0FILI7J7zfffx3@tVI<2fo_{BA2{%un}Q3W9)y~DXJ$F@5D-<<4IBd|*i{>N7^pSN zz=DG`tPdPWJe3{=9)&uK@A(3c0r!M5A>bs?{OeP|DsgkaTSyi2UeXX%7o{1YYU0HC zwffz}i4$S{e&S>mGg|#_;zTzGR;Z<eqq<uqkhj#MM^)HB?xVmMaCe4o)$b-w=si`y zYN$MdsG2z85u!kGIFF#!3w1zSy-*L-!4yg675a-USXvSf7F;|WPhTQ4LQ3)QyNWvm zvL(KcBYYl`M!`!yQrHI^-uS1Nu&bb&(XQD6HT#&JCZGNm<Y||!;u7;|t>1B8+d(TR z^BS@i9^i}zIako&8h%R8*u1xBzfJZ{s3x3$e-Wjg?cYyNl>6@_(1{7ppc9)8i+1|i zP;{)D1+BVmk|h^(;;HHHBk;*BIx$f_KP9b;l*MHe)&De7b`xnl?DywO@Ogv_IB!ff zXVod2rh=E{BTeq{UuS7{0m|sCljplApH}C#rW5}(GFL`ldkjF@fkmt5>->k$<;qFB zv?l;*Dpht;V~g&Qa_SDh{@t@~7Nhs_y8DBd#Ukp&Bc*P0@IjyssOrS@4|Sl8z<=Vo zft!HbNz+T}#F4U6af>?fc;ipS^FzS7r7>mLstj{o&)o(L2mkmvsM~=#J&X72W3{P= zsr663W279YPE0U|CS%o!SDtj=WXS<XO5J4a*_~JqsZRV;|B&j$_K*jF_K@nt*>z09 z_)h%tOM7&SF=gn#PgSB$eDb9G?v?t{+Q`)sMH9;K>74Sa6X&jZT9aMJM7?@cZ>&!I zY5zSGbz(g})DrlrB=Q&P`|89-RVTKs(@O<QA`8e+2DGiy%YngCH;t)I472HZ)rlSd z`A(d|*$Gvw3-_rBtAGj*(xa*0D9ml`Up`s({6%~i;P%|eYPVPRf{qc8i|FhwEP1ER zrK#%kX*Hqp<<ox!Qoh1Ga?qjDBLoq|XRo<ENdLRbs--RJlKJ${LF$QT%$;dWP}Gl2 zJk1RK2nSAoKcI;LFXzM)xVSpv>0Eq4Y|Z59+Zc9))4w2JP1$|tiNkBTZk)94x4iPN z4`-H3y~)cW&QDkzUE_ztX?gdW%I<Uft0k?6G*g7iX>kEps73CZ=Ddv^&^3;0cfnQk zC|*v_*BSS7DqR?_>ba>>-*dayUF&*o&$_Dv3Fuz($E1;cj|!<D7T2H96@8CNT}W^A zJ<4@R-=prHwNebYnG*JUX|Lu$uZoj~fa;1s^(Zz!)GgGb*pFIJJu17%G4>8%g7GF) zHEV0Eyckb_%GV}t>QN^zSa&rr2Mn~-#;Zkw{yqmBg=*bXJ<7VLdX#lf^(gC}2LaYS z4*{)vjsbO0n0l1ySl*==SEwFU8e?|T_oz9;E(Ab53Y%71dJ@1s|B^RTz{nSgboM>! z2V@4SM{&#psz)7-d{O;OJt}zanx}#4QP<?I`x#I@iuK3psp?UGmYbyv>QU#9y4iK9 zMGj?9kNS%}PK~QaaqNPs4y6MqwHR42s>hL9e0o-}94NIoi6IG;T9h#gj00;uH35{1 z!r}=SAnv-E0$uPxBfr&nwozZ<`w|sgoCHeSyNwJq99!<Ac$TbohUg=|!}NJqUpc+| z_lvzd-Aj?h4xW+PD13lyZmv`9mrqLw`9A)XWi2$2L%tpE8l<%mVm__4!@hf~lGMFt z#&MrE-ba6`;hp|`2jE=#Gd!(7W5IBI^<^@TWeMv8Ilw5N-cFFlm`+w&6$|kpEA%Mp z)EmPGi^lLb)6g-7Z%&fdi=jy4FqrgeBG~7?N7FdVe{ZPif>do5dh(X3Kx4>eGkRN^ zVSmnBlfidBN809?onG%aonG(QoL=vE96jn7oL=v^8$HTxogOva*vsk9$KR%|(+{++ zGYGV<vjJ#bXCu(M&L)6$oy|b&I$QKR2ZarhaEsz9VfPlk*YhH>i?@?uJ1q)SuP3*R zK=u09t{o6mYwHiVo5a*kPOv1BfI0#&wWD5dYUf!X0j$a(t|4Tm8K_?GTFM*4taVWa zHNJfWXAG#1;Oz6gz8L>;)z-ql)xfLKeKh=nWRX`F{9ch!mvj{Nkl}8o;!}<{7d)t+ zSVN+UEBqzDIUQ6{)Iom+IiLPK|9d9=0_Yq%sHlG=f*gPP?<vvZ?psQy#%ZVV=MWR? zWI2OBdmzD|ti**sCo{K+FRSU!;@=vg)SOmgI|*r<IzGPQ_>(v*&z}<A@Mjn!owTuG z3UP;4Qt%XM()hL6zMs_6FzJ48MLeiKwAuHQ+U@&E9rpdCPTou9bipLjhAH>)B+s8| z&U+Yu6{FlJQCuMYq)^Ew@n^{IajR;6!N*XEKL=jw)&g<yr}i`kia!xRlA7Yr>z;E` zb4XNTN1$%?P<gijBZ=oFAGZU)J}XE9#h;Vu+!Rp!iPj2$;>{-53n>0X6bR;kMDMEv z@h4wGS_2e+TFmpaKn`UPe-iQ~<?HxU_JHxH7s29Bi#HhqR!UTO{*-Lp=Lc&?AZawE z!y-$r-dd=>x)`9eq}8I6-T=uNPah~;2$V1Ai5Iv?W0}ko0Ou1-4}kLNKj44QpsGqY zTzTOt=Pf$xQ($|br_YQq`M=}eTp0%6|M2hs@Nc2>%Cq?Qy^xH5mjQoe{(S=%o$FI} zv!MT)__yRWm;Mj`{*U}c{%)^2i+}$ZlJV~&z+ahv-^)ek;@|nuUzL9)y`BB=W`MVE zUwu8PL@xte&6!8ZF8$1I->>@pOwHlemS<hQI+=T%*R$1olr+xgGiQ;W@(*3*)_FGJ z!IRTA$>%fsNSnD(_i161rKd<+`Fy7QL2YTGHc8w0e5TS42FFS}aZuk*+QsKHbzO?f zSCV#Hyl4;S(!;%^2eB=HvKwsSmFxySpQ#M88(i6bH0z4@a#wedBSMCQGYJ0#AT9f+ zq&nPkl_l@DFtR5yko=U2K4bXSiW_b$EBwt{r=vJOXkNiTfpo6s`#5xlFJ}x=q(3L> z2+hQL%r}g#Tty6h!?VmoHRl`lGm=l_8xF)upTs%TFq&^T$RkAZ4Tm0oY0nQ7R@N{! z`}n_P@(qV8uYGARSq|nK3bWSDKACTrm=nA)?IOw=jy}b*{d~hQDi*VmJ%$=4-GqC? z6w|A>k|)Z1Tf?La9&>A-=SNP(81sC66B@@d|FLU6x98iee>bIdBLn(ht1gK*7{DQQ zQr~{a4}?H`t_>6hu`CQ!3QDl-BtK9FqL7mOKsjjbz|)cZKn18D8!10fsbASRFFz0k zg*6d65Cie`wWsp~u>VOM0hGst+sUx(*a6J$lbM_Fcn;Kp*r0=7`5@WJMt;r@Xv>ci znU7LR9OUf80Vc{%mR$4iYx4t*AihzyE<Zqk!pUnh<>X6(*j$EEnn6sgf>@Ws8?oQo zKr5&phRP4Lf!spFfp$>nN?qFl$~1kkEI-f*n)RdLJNbbw(fF=Jet<3c^ycyWKsRW8 z=Z!pb4`}ZA-85itc`W#cd_%umiP|v8i)8Z+8%ovZ8ZdXW@W!S`Rc{TOOXfY#Z(GV| zvC~Y$Q1vzcKAvybS{}K)H{T$$mMq)n2NwqUh8?y4JN>nM!_L{)ji>Sr!<#axFXkI| zmt`*O%Qxg+b~#7l>t8b;whJyCp99;aS(yjhrT#Y|+YJX&Ut~74;UF^(l!=KN?}6W* zArJgE{&f0j@mkO{46jwG%^HqYtHBzMRmrG@$8gBy8>Y-Vu(W*5?R-OzXcwZFl{9!B zE8358NSx(=qxKW};;-{u>kG0vk2c3*!=y3yvW#^2lB^^~^`7I;>-U<{PvYl7VkvBw z6n2=mm$W`p`X|a4r*f4hUJh1Ef;DFASw7-MI&PLW`SZ*dHgVoe`6{pFhFU5WiB*!V z{|afF-M4+#kKHs^2M+Bgp?69IlXeBq_1!=!iKX*yk~nD(lgAo+^pce9a=s)<EIM>C zQvI93I>|9ftb9XQ4kVghhvb+_UkV*4fmO~Qa0^LE=5;l|AwgILxRtai>zuD*iKS6D z_Sg=jVdS>i0n`E9sidK@7dY%_EMD>>od#+cm~+(3gTN7B)cd0~(m~MZA)f^XOPM<K zBb^7MaSeJ7Kz(ZJ7Hv`^sl~^~1vSzs@t+?U168n68|q=8i<y|7mQo25P)92Fd>?oe zID5|RQQ$Eks^zV~N#NT2LX|KD43(Uem#YL$iUxC3g5=g-zbHWdH>NjRq00Zpcuvj< z`QKtu6q@(H5ptnL0rJ1u>K3_{csorhMS;;<R?G1x|C<h={BI1`<jIu(Z6U)rp!{## zEdiAO&F&`uo83+9uDeP9#KG<(-8TYsnEP$lQsGye7RqQciD2*b^d3US7L*US{ouDX zca>jolUsk9U(jB~I@J7v5BcQ2dG73?T`U>#qr4Uo(tk}k+dze%U9QQiYq_QKy!{5C z@I7e5`(I=MOh)cVQ)o{^J=eE*zXUyf`tAv*{OMw1XOBby|2=yo^Llzuwfi<By?X_5 zSe(~>vW(@}^ltmkcm0_6x5W$G4|+naLfVL#B0orz`PGs(ncRFCrULX9c&Un1Yw;^c z+sr$!wfHjewHE&fX(z?1+%EfmcgoJY-N(D>-S*|~Ug+#_agcWH2f9+dAHx;wd$-C~ z%d2}6BG@1M6yR2GZd~Kd4L3$#P&Pc2byJkd!h+vYE6j}AVZg6-qi^E}TS(GwEp{oS zvrP@>5-rNx>GpXOxBjoR525#xx>2&L9<UcjB^|3;A7N&P_F)T!1*A3M`~uZ`t>vp@ zON0T=>vO5MD}Ow!32fTOKC;w!;Z5wcN&C1Z-PntE9YF!;a@xoBDB1_}Fu{2nR*dY* zc8oX8f^=XW>Un4%cFdNa2}U4I*{aHJ%1d+3?ptnYPcP@@YEk=8sKm!0@V~b2NOnp5 z)LL+w=l@vqY{hn&u@lMf6+R7NI9L8=mi&Ccnxz-gxjIq@^s_pWIj~)O9qpSCTd!LE zJ2_sZ3|O+32fuCCZ-WLCu{C}N-17I|anC(usJJ&3y@Ry!{qMi?{^@X&`=g!rLX5rt zj?QRguIjAn_wTsxF4F2d-q(4ji#Fk;CVItN?kBCiBKnbz$lSO(LEWAA-5DjVzbh5J zOBri8iQgZ+M+GLh+5KcxhQ|BveZNX<x+8UGyE4Z8{>y};#dS?G`jNZTdd(ftJCwiW z_wVRjw~y9!w@*T8v*^TjnZR5Xht^>cik-1i7m(7$TSuU$U_tRjH!L_w+B0k2d!&VW z`F&LscJO`BafEN<lU<FH-(r3pKy^VRh1`FefE}K?nFMdRGB^#3;SU^w=){Zp5@q0c zUn2W?=*HX0pg>084j@e>xD$vaDIGElbW6w0*IkmAipW8I1VsXrhDB<u0*(TrtS|*W z3$#tf_5*E`u>(L3DY}EC^p}M|Y1kRQL>DU7?=-9e3ng{*3M|O(kNpV1nrts{Xef&n z%r37U-Z<awZlK7BufG8kwxKk;e11Adu*~)SJuAwBMei7{fwzsZ|C%hP%ckYO=Va3( z{NQEN^7}3C#~?XopJD&O-+Ei_5?TGU1{&gPp42sihiZm<?)cE1P=|mpspbZ^0<W#9 zfysU5Rjb9>zV@$(-gUoopZgYoSyPNud>cgD?^I3f=JLDl5vTe~;34OACoR_=GRFQD z+B$~eQKMM4GD8O=jk@7P0y9*D6FO7o^%-@(>QcYGYfT1C#d&Qjnu@e;Awj&P^{kUr z8t2|=(gcD@8zVI`VD2Vux-@mU@+Y~!(q`6-DQ)2yG$3wufh{x4P*hAMbOoR5xjM(A zD?3QlNpznSY^<~!9xjmfIJ)m7Ft7|42|_bm27zvd%XboPEi*}-guA<Gd-W3Mll~*X z5q|s(sSc;U7QfvGxBEEkxx+`lH`fR1_FoDYX>ZBwmp(z}^q%CZLYJq}>~K~vzs<2! ze*W6pReUqM5K8aq6#p$I*SVzTwa{lU(i!q{lABQQu6d-qb(lnH={@&GJ4ws#MGTUb z-!CbLppp)%xbvQ9J89*eop%z(t^Cou?)gBJH1?JiCHE+ws<;Y16tNm6yw-T61}?k; zS}j}`RmLg;P1kGN)fRFncN_*(nt=E2S_^2r=T1c5V%^cLuHa-j<9u>LX|ed!R?HG& zjh*yt!)y>swd2GXChf47>WmPX$9dOpWfqo`rfff>?pw<;t(^CKx-3{mOZAf9xn+El zzl#kjp{mJs03{a@h66w~c`ntWuWtOh<f7ZRX9wj{?Wg3T+gW-Ts&n)d<)ZuCM-Hmq zk!Nsn(F^2JC>#>Vl8XiYfcr&*pMjE#CXf#T?QW8b)SqrV2BcagkPidx#wv(I9b$si zI>b?+Gd=vs!&x7G<RJrOpC5T(y2&UY!rt-y!m{E0mqf(E*=5A8Ckvk__ab!JP3hd_ z`GpI_;K9NhW{S{uvT*TvY#igdiER;+z3KhQLZdF1he-Y8?vh~sUBfl+d5g-=&%ZYj ztSC#S_pB@YcCiHYvf|}|=68~X^Y|^Tshd-dotgcG`EiLtXRlukz{lgQUndQj{-+L; z$UXO3oK!@EP>i&aFa1^OG3Y4BOZAOdMo~eq|7}xjTS^}>`@Dwf$LBa#oSF1|oy|Me ztJOFs=&V6@x<U|2NE^*wZ!&v5`6gTn(3|b|mf$Du`>(CD)?F=ovhDnJZ<F2E9_(}C zReU3{*?CmXLHfq{WqjX-zG2^$MI5^5ogV#6llPL}O=<eR!LL7oItZ2Vu4JJ4#<wzf z49sSDYEs=qeIu8;OiZ&GsNEERTYyXxYC?KQu+j|*rL1fP`Zl1gK;I6u!KV5K45)d+ zodC*`ZK}TEB4~Zzpe#{yP%HH8zHfLh3%r(H^0q?7Mbkd%)ix*i8c5D3y|(c4xnjmM zw;a%PH7%Jee3ze{SoOhDvOg!P;XWKfZ~)0cBL71;gxo@ahOzv|x5_zrAm5<Age!r5 z6wG(d$%$x&NYaL*V<&bg%VB&&<iL3~8ESk@uXj#PLD?(+<FQP`lw6R}V15;kmx-eh zE<cN1r{lHM^~tvD8dCA?tFbIieu`UDUUTyv(wH&R;8mu<tJ(VC@1fUBopc+Y)z16+ z@#i_O%ajg^rR%FV;#7oHPw>SD(!}@K8-cVjdiQL(rkjkVlg84`d`7VwddoZ5+KRN* zhN5l3B;Q4VRo#YGh;bYGbn+@<eNC0?eknwd#CJEWlpvKsAWrNhoAFUU(D+EKYJ4PC z<r!Wi??wPSGl)OMs<<&F(Z#AXljNpYl^!Ub8xqoJ+1pj_DZP0ce9wJzT&!yQoQPFz zKN7L3dt=Y4Zf`r!s&J~hOOBrztyBU>1l0=OyyZnDgw>W7uDc(oqZp?9?qI<s!!;+J z5g|!>Lu5Kkx7EUQ-v%lBSdNPvgFjGs1BBtWi;C81HWTn$VGdL`1OC5s_8%9zPH?Uu z+<)Sy^y&LkW1q@@BzxjouBI)*BuYzV0+5!O`Y(^(`@XxKJ+TUE<(=<OMG>WmqA|gc z33ANFXI0S;-O;7Yl`<8IhC~-82bpSh2e%NWhHep$YJLD-lf#{~N#-eO(tTkGu?SB~ z{I(cRx0ZNkXj{wF9`S7Z?7pY<ydCVqFW%}bm4h5!I}!YInl$yI=jHC`Ep8K}9`}Al zE74g5;<a4&)f#Sy*I*RI?1|Ti*?S#OyhhN{`9SfSg$0V&j6K9_#vVgJXSf=#>FJHv zuycXpH3>DKcuj#1K*wv|43JplkQuO>)Yv&E8YT=>@fyyZHv&h2nTC*J7sYE`r5!5F zcumv;P!$*kJV=72EO<ze;(%kMBW3RE#)pCSbz|L>cUK7$K;B)w>nPA3=NOR3k(8bU znN>0cbk@ChR`Tw$O606`Hh#Yg7PJl_XQd7;%f`CUC**^LbBA*$yj`7LR$G|I^oswu z{jz1&CteQ;nccTfm7s2M(_Mwxo;I9g8xkZvy$S1~`HPs^7!NOAaJq@nCnJ5@%IISr zqU6v942`}$p9U7b?6a#s1)mq;FGV<aQ2QtODXpM(C(OM+BRvu4@mP-Nwr}f!0Yi+q zQlw#~T;$&?#nhc&Tv0QX-ZKTQoP~(n{B8;ruG;B2VT7l;P#M2RU9Be=l2PSOy<ms9 zI>!zvE-;Lev4;FI25L1d*96#%<(2bm2Itom{W|GAEGc>VH}nFwpse`(Nj?9qJipoL zA=&8^88#ce6dOHTeEyrKGV}SZd@}RiDSQ6ly_0%^%2f>Ur=Q;xLQD#w`25taI&L+u zlu<_a{LVP#`DK~v`N^Q|=Tw1gKX>~YWyJF2C*CH0>TRl$g;&m>@iyLH>*gPs1;X`` zU>1m)XS#5|pMzxbF>@`-dlbdbb{=1KGeNjt+~i}n_Ce;74)5!Q;3pqTg8M4-4HNl3 zi~?;3)1c0PQ9wsvowJ{Oj9!zwJ<~9$=MLDe0=sX`-nG*H!TegM`PurVyr}t${;zEm zBl-IV6-PC@VqudtYwnUrExRkVM()7!s(Df8@^a(3j(gW>kXP9rz3)yF!KrokIT0LP zcCR1L6^Ch!MfrPYwG+~{2x$%I>Jad9UDY$bbE7kzG*VTnY#KR31Gw>Bl6n&-H&bJc zq%Bi@FV7-v<xv&M+4lN0p=GjACE*ao=tOZXpD1<9V!N~~mh%+(#Two0xAw23Jts2r zB|v(ipG0&4C5m+b2T9xr--}{N9;h4L&rWh}0^(xOA}5JrObMBfTYzQWk{kl^d3sT| z0vYBX0jj=rIJv{9{lT{U!izPTusXZ!%EFgltL|Q!UABl3Nq*stk`2Ma`r)J>mPk{7 z+GQ#CpY1t)+vRS4N^2&(*vK{(QR3R0@kk1}ch-C$(<}(f9tIhtmCZIE$d36sk6oSl zP1Ro&PyIR4YVinZ4N5@mQTtN-BDF_dWZ;{k*K6{KH2#{9%a=eks@@yf!}m3$O?G`! z)xddk2G=!d3#W0?*7cX&r2K8+NWVrP?a+1K4!f>1<2~P9xyZmDL07wulXlPH2htwC z?WxJSUg)9Qdev;cU1t?X<&npKQw=W_%ON$Sc6}vs{|!L3Yj2(VNQv5Yb>z#^!D`ow z_yZ1+>^U-fK2Yt7A6|Fc1|)?3W}sB;3eOHZfMGl`P<H}#0EbD^BhE#%8_4VApyq%N z;=llo0A1~Q73*vZuVNAC<7C)RhIgj-9t9o%t_|D^9RzZyghQmC;PHTCqHzEZE7e}g z-dTz8m6<3Ni&oqVJPOP#ZC5P(G2oZu?(+$gz(k*$i<<(vnFg<7ZK<48?40@T%U-hQ z{(_dG1gBzyPizHhK9ED^vL?XdthWYgKG5QeH6MsME;BqTSjphE-^~Xqs2GSFx8$~y zWAZL)KJY73Cj~Vhn11Dgj{s|da~FI?HiPB^8EQ!RYd-LWe|YgYFb@3oo)^{f8VsNR z&ufF?gkUSr2DuUPRUsbp6;7HsDapI1PYUX+-w%@|NBZ6VwyUCUxj`!#267n{-3E+B z8ukF&f#V-{zMzg%C3FJOIiDj#7tk?vzx#fV<LiF6uU~H6rz9+T$e?HtzjsWA_QdG; zf7yE<_&BR7|38HRQwcOc(0~yJ7$k*=0iv5qfJrjb1{z=rp#+IEl~7ZRZ73567)r8} zY91d(aliHZt-I`gyRWU^Uw38Qs;mU9n9|xQTC_-A>)O?dl^r&5t!sZ6Ft)$<=iEDK z`X{*h+aJ67+q|IXJokC#`E&2*o_p@O=boduLyd3d-^>V1g)xz!@zO#`U4dyWocfU8 z*qRaIhvSc2Bt0dSzvg&^&D`Q_*s52;QkeOB&ifx_as|FP$h=bExn>R*7Y07bqvPFO zz_Z>bqwhb$700AdLH?*u$r62mXtJ!ZYkX>y@ywXXBZgX>gBg0jyve6#Czr@?Tro^} zlsia%uwu63%g{<HO7fy=_Vcs^^667SMAO3>)+zM++RhSk@JT)m9MtdP;84ej6Xyk@ zO+}+DZX=(bo$<?WLsMbg-lL_~UEk`jZ#!XLP|NvtF5d?2m=Q!i1?>!~KB4#Rx;|>p z?<P8;#;3HcFd(07c>(#vYfI+zL;c#qAgqtOIRuMaQH%@JT7Gw^<P*I^rIJtd4r$`5 zOJ|^v0-L?|o}i(8YSVPiFqPyr#{<bNwMQkC#z>YittxhrPW+UpM0=U}4%)-EF;8g^ zH(t;b`tB&&gW4s=om9X0kBn>DU-fI(F4ePNwR)-fglm^t+C}YF=i4nF(m)(1dWtLx zQxms|bKLykiF0-TR1XaVZOJ@4V>Yz)S2Pf`Ev&Zd+x_(&51wGxcUHUh?Ak^Hab5Q( zf-1FBnyH<B*NfJx=k-NsDBm7F6t>#Kj0a8+;7EO6?ICRuR_!sD7K2rL;P@g|?cu!> z9u@0+A=ZkGnmkhnmUqHdH(uB#iR?%FDP3m{Vht|3zV*(}96Z2aUI<U`#&6<9uwS0V zoDsBSX0L#n4=CmLs_?S8i_?pt<z3M`S3oOPEME~lqysM}<zpfiyR-MsJKXO1${rRI zDXO}pXwkKkD)2Qei;@)9T;Fozt!#`h%|&9J+}|``$|JHILr>B}ZR0!##Wtgk#CW9{ zTNAN2=9x94Y!+*GeF^Gk$ww2hQ-+9|)`0P8Mz-PXp#H?+_@7-YIh5ISlElcy1NOO- znoB`ms3OgNDuMA@>*-P%hocv`{TrGraBp5MdMg`pp)t@l0Ilqe*!x#8DZG^9YEW<& zw1#)kch&Nk4783gn=(ShZAuC%{XUJRlhT(7HO-{?7=fnJS6}*lXv+Y<gtl7NV^Fzy z=H^k3+mFxK9IGQZlb!8I3EXC4&@LZyqT80oK_#<`+bHj~8M&l{@_jfdk>{OYg-Xl% z;ZO+@wfG=Z@+w-+6e>44<x{A%Cpc94HF#B~o&)~Y!fJ^5OQ`;|%7l^g!gaaEvmSZ& zrqcYyzdnHZ=M$VV^Uu=!SrnLb$<Du<x>cjSfud<<r(=v;nJG>zh4$RZ4Xr(EV2)*6 zl=LsOV|l_20TqYu7t?GYhH`ox^w55s<tBxy*)Dc~@)~5Q+P~J@#p`}=_v56sAglHy zx9U}}k}~|oVbz}OZJY_a7WU^s(>Sc8OlAaELnmdt?ffxHsm%nX8^p4f4g0uQr)&+w zdSz=PthafN!0L8fy9I{bHX4Ms!BW9uw~M8p!R`<%`<c^9kzP_ScTwt%F1um%=fQSK ze(S3Td>G)#T{d5!$PoAb{Ce2z7xVxXgxcwqUrpIGkh`B#nIren6sAB0{HYUZ|K&N* z>FnEB;46SmIR^Q1s8*&mv5bayPh_AmVz{n^Rz|o7w5q7*#C~Y?%JYkQp*3e{J15Zd z;YRDs83s|JaHEtbtZJojF#Y4WITqfYfTnWf(t@^7-x58oiO5#bw)2a^_dwg5v&-}z z9l`Cka@~1Xv)ReJDzooAj`D6^X9+YNberPTJ14VAU7(NGQJeI0o<@^FP_;m#$sjlc z%X?|3X-`?M@ys<VlwTIF1Ha+)T{arM^%WD(xyA;~Rpro-8Npp{(WI(p^@}}Mdb;ch zbGR+fE{2H8o-1*Cv^|%?a+!0X6)f>C^Y#R9%8f0HF14^u<pp~}eA1q<VsV-u)hu6O zqYw4ZQQW(^@NH&DAe6pkF(C3)*ueSJgcA=fBtn%KZ@s45QqQzSS3RS<wO^JxsI`d> z8|V?&Ud(r;Z@yGYVYe6aX)oq`$>t>Gq>pS)kwP6~5-Zd(&-HbT_NK)EiEA@ROd1o^ zPu0ESk%Qf^>fYE<CGgd~WrcuUYpj*7gSB{Ju6qNPEnJ}PO#oJPLv?Q&R}WVA_77I~ zrgQ4e)V=*XjKK1zch~}**JM-CZLsOfGQE_l_eF}*Rj}&b-XyXUR&PP6y0`vd)xGKT zTEE)^JCd%_Y-}&=y%h}IZqk|O5Oxg0#j28haQ=h#tJHnaIE?rGn}GGNUIe_ru)a-` zPXBGiu>ON=(&;`(lTN?dtVt(!yaYe9NhdBlur}#LAKN-;lTHnX=W?O`Y-vEN&pmRj z`0$S?N@cIVAsDoIX8x3yC55olEMeZ1o7?W}H18=Gb~QGR{@+}pwQINTtTpKDH4jZ@ zDA}&l*A-8-8V|@@aoykESURvtAjto<zhuX+%p+Cfvoi`mQaJIBg2g!-d|tn}j}ts7 z!i}daRewV-pTEtWJ28CNCZ?0;Q~7$%WE2d2Qu&%<FM6B`Il^9~#c3d~0KHB;3RM!1 zF2Z@t?}V)+tGc>a)rv~88qht{cZT;uYa%Y{SMBX2x8%5P!9j}-87J7tR*n;ydFEL< zxl&zx@T6Ikrv^U<awHzLTa~W6ioA=^Ht8tP_7IT;?O0H0`Hni%i!6^)S8-ALR?53= z{6su*d7R^38#(E^KM#ng?!+UL;4WB+NAImOB(~hfN_Aa%>u|v%uzo-4YFPdPO4Vxf zq6b&Ns_Xh*ycX8?Vs%~palv{B4ohOybv@|SbxZkvN*{-{JwVQ0)Kf#S3D<Rdsx1u4 z2p8y&QgvMf)+p>Y*b5Hct$wAh+vzS)*Y$pPJH_&BE>PFy6?6x6U2dU%wFizYNrkTK zO+32pgeJ?9q^_I3#4Mlcx>2HT^RxZ1Y~dHHu1l4PRoAs)&)JK-QlYL3tRz0vb@d0U zu4`g<(CkI?qLvIpU3b>1xq2OS-Gc{5zaz_!`tHI}dhXdUYbl6A{f%O<7cRa>fsQmB zExRLHFdHpjabc8FnT=N5dAD?CnT?jNxbq%ZnT?{0m+68!SQZ@bgpI>8Jlz+*w<P<x zJ;mnAoJr`X>CWh67>7lR7B8h-mZS8YD})nSjuu7DyRJp0oy$8YmA$1Z`u^pxZ7PkL z&s{t0r7U+++5xLCfbE36pD%!w<!A|C04vK8w)Z<=)3A3gy;rZ=3){gL!1n0^z5upg z7ifS5*RV@gEdL<vkS^ebVIPKF$_v9j0=sBYRKjsJZ0BP8*&5i6<yJ?J!ph^13)YHV z`az9Z>tMU?w9i}*yDS~m$3F(UXz?<=*#_8Ntt5bJ*mt`x9)|T_yb)G^Xd&j@Rr+M3 z9a&Nv6@BC+u1IA+o}oDZ@qMU`a@EOwMBPu)H`^F-E*aU6Yr9$Sk&o%ZC0vLwv{gK} zgqID}$MV;4BHNh60BEY^Gx|y9EBu?wZ029xF+W>BKFXov-#Be5(Hl8!3*Ul!e&S~m zqSc4%L*tpT4x8+}nM>T{Rr-l{0xFY^VopHiXeo)|>NmOM5vVFne)2lul0?Lq#4JE$ zRa$SA#z{ZnxY{Rks2NFLAnmHwC!4H8!bxPteX_}fPd3@)C!fte@N3G)#B5;@e2ME@ zc}<B@IqgfNx7$!FjT7ZXswH0gTM3k}Yd@fCy&``m&WZU~|CK7e=Qh*boAP5EO{1qj z$EnPb8}<tNx!TjJ?0lHln(zDdzzQ_ICwZMHm+RGEW51=v4XN=}SW6Yk3RLHvN8;Wu zD&hU2n%Hg`<$N=%9Pfsv*lt-1ZQ(H*JzCjrITPB(cFPR3o$Z#Imv%5%Xq~mwFB^7w zfBJ6kPoL)Vq%ihw=0%`=0B;xFqM!SE;iu8Z)J~_Iv)xiNH5+|&Z#Vkb?Y;GhDZK>T z8h&@1lo)jY{h8<J{0pXRZz&xvEjRy-RDS+XHM#mImsyLwFaK@|{QUkdKfk|_qGP#; z&Z0asWpY17U(jn>`<)B(o7!)9A1=aFf*P@4uR)2JOA+%^%Wqn_=YRzttm1a6uWBkO z110||eiA_b4>JGiXGhgI1AMYI&aL@Br@%MPV&6C)rD&QSwwzPPY@f_n+8SpvKzON^ z*$eVWOYKe`sdEj-XC2izO@+omAW`|1-l#(3FbSb?A|ZRpXdE20E?482D-)f}pN~iA zO_V3zhAswes&$Rp%;seo$5Jyl1t&pUGVCsc5~9myx@~R1ontxb-VW_B*HSteKUaB| zzpmR~m)3QXSH0M}60rwfg8dNJ7Ub1gl2_OM3sqWrO&J?WF7j3SM-*l6`GD2=E&16T zO;f?AaO&_1o;v@P9leA{mg<qvsryGR<hbJgrFV8s8fH79OJuE$E&t$!Q8)RmTpYb) zIYm_~miO4?S9MyAL%r3l^b$V@u4PzX%DK8_(Zy!zwJGqj<;&hqVd9SEE0+5;^roJ) zE$27i8GXNP35jz-YT2DD7DHRoOrg23+PtDtlyrLM3)QPs>TdN<sOnX;*C$Et0|uHp z_Vb+!BJ9R>sxwDLutSh^!b&9-^hfC<ko0x*aVNZdJ~GKJ{-lRL3iY<lwXoPWrEN%c zUJ(4F5?`%{{XX+>*vDXPtaGzo(pqh%^l{39Tg{DX81`xBMzs<4;2X`2Y6SL1$zP{B z8#<lp?A@rgbHV7T;VE3O1D4O!lITv@C$1^iV&X2?P5rjDWH)S4`dm!__P|j!64!fS z<wXL^gEaZnSB!~8T*K~zwK2h|&b+aHHtv2VDL-L98$A!U2;B!wpc6I%t3TLcSU(>x zu~M6lmma#H43;UjTBsb>&xI>s{hLL_x;Kl7^#e&IybUB5!RSx3VZY<3(>y~>aR1`d zuG?sQDbC*Tj@-P8&U@GuIWHy~QvP3FEQl=Iw4yojcPYv~@icc-7yGydpZsRZG?o6i znpLyukI0eGCe$Ah6oxm<F3fWC|I4mDW{A%|PGzQeVmo~zGd3l^<7E7PjngGkzO>c_ zUn=zrS|-g4T0S18CZH9xdj=YP!8!58qBjyd6R~$jga&YGn0`M+4Le=ps21%>v<^ds zXdLZHVk===l+5sFx&liUrYqp#0y^l3Tqgah^(78&<=fo|e(hB*?(_ns^`wS^hI8}T zpJ-%0I<sdF<xJxapUcYz>g1EHANlzE2>uqH6QLrcupBeL=YCw1I9C=vP&~(nTz;Z> z;|z)_l+trjhPAj4#*|5{eII|HI@U*5>7yrCm%y<eTB9%5>JfY`zftYi>FaHoNe)&= zMB~2%sFD9|ufEPa#-@Hx?zNH$+`YfxE#|W(l^vjB{l^rgPg4Wo^5Sv?NEwOx904)v zL^%RfR_Rw|s(Ag_<i{ul0Vit|+D{*&5vR8JcJEw@d8C$((?H^&hFZpvT*Db!SdndY zN}7S$_F+%`c=E&4Sp5B7e&6~pO!Iv|c;OG?`__JGn(sUCqv^g+`GnQ@zg<4v%*y=* zi259{71m=)5mthz?=ms#GDkv`EX0!#4M|-ii1v}XrqJKgd#n%E74BHg1xg^NPN+`1 zNWIT{ZYG4__%RS$a>N%G<ZaXMVZNRCo~er7Vfl70;M8l%(^ix{m;cYpQ_bonPnG^d zHLCO<=8SF)SK=}N$0XdH$7*HI`DPZaDkqM`WV^vC6GF|wIV*8sclrN(c9+*`w|WWG zCNHd-3&JYS%8p!CIY%l4lUXf3<x8ud`M22%0k2f{egt!UJXc?~=1iB;t^VxHra4$T z^5s7~_MlTl`H_`WkYCLUef1E4N5Ycyh}a0Jo?_fEpcN(Ag%kR0tDb?C6B=ApJw3j9 zPIE6@RXSDjO5$=|jm!7qs)yf94!XLb!I~jeg$XCit$MD}r<#m*dEFRrn_l9jNb6RM zpF;CceO>nMIl21NKS$`(%%%%bRq|*5U|NJ6&nZ6sFyr|Y`Q2&jR=mR0WGHElW%ChE zD!@s7_C6vA`8tqOcJ_vgI2F4R{mbV=DWdf$I^5mb>lfbL+T}y>Iz}C}VTn_$8f?Ea z)gV`-LOvAlj?_$TWc2Vjw@;Zv5}HU93s4~+iqDGCCS#E<OmShm$4!SSQ#nz*yy!q) z%u6lI%{xQug!vbDPwIeI_&L_|6djsX9oE@~IhA=$|JBS`m(5?xd8#umc*ilJ$F>%` z`778eqhxYVF-sE}j$<PeUlG14`MK5R+^7ZNtoF_wH7BLb<&{0fb4IzYuIB<%)Z(@n zAnB-myFkU30l<n66`kUK+NsncRUg`l+8u$mu^=}G+CG~8zMe-gF57$DsT*-jFs?G2 zrxJ||7_QJFtPGA!PjiiLb}OxibcOj>o38LD-!IhZe5Lf3Ui}b7U~tm-I0b*d$Nldw z5B0yl_{V8Mli}2B^uI&$dHVdUcOMc!=!lx&#_o-TU-SY<R%(i>238hNmCxpTUZZSO z1^MjNLGnwY4$@Do=Sf2G>x2-;g;Dq>X`9eyDVo;v4$0@6xvmH))XMpkgch)9aakx+ zbglaMP<>PO{v;CtcJXC4T`sXa@V#S;<)xGxDzvUwkjMCs6@Tvb*VdTFkJOlzXSAR( zqcZbu6@0fPpi;++BBD#6a#m!tavHPGR$Ik)n{3mUSM%YLc{O}^Vp3y{6;Gov4_*82 zT*I3*3>~2~%U+Yp2fOrrN9-T@{rkSwwrRfaufO{T@qOzbn&$hS`G-G<?`!Xy=KEgy z&N05P*{MTHm#i+M<aaV5u-(Pn)ygyXkK4W_ovi3_`M#ob7nCy7jPR>WaEdVLF5j0{ z;^|{HoK;KP@zRJa36>9}mixXWAyc(5dpDVmkU;g-5;B=h=SZ_j@RHLE$FuGIy=L?K zD?g4gDRuJWnw`gJpWi?EaSWq^`@W^mANhT(N49EyRz~}q`c&-A|AJtNGPZ@|aHaC4 zg_a4Q&~p6VUW8U02v-W1(Nzc2=R@&ZE4~6+xv2P_GN@9RmqV)=4|H6^c%bp27XPxB zpy;GFl*V&&i)BYs$Vd%@42Y%<F(8`VjDgRY?^{eQTBzUNqTkwrR#Oe?QMUVrh54ax zPmA3Taw;>`4pzYL6n)5?^p26P{cv?4!^2}MON&-c&PVKb%tu`QNgLN*Yd%u2Etxvt zZA*#YG#_CGa`=?QPeeZX+_azk0H^q5KM^T>FZn5d<Mi}y$p;(AX=mB{Vzl!r|Gftl zg@LxcxA=<tbe(-~@q;!SscE6X3hIxajMT}5pbPDL{cHsFN4eOX`XjpochvO>T^Q%U z^q%b9NvS?ur{AVzia3V)li75c1Xs9Y+M4L*)S;S?HLbA!?P&a?6?!Xhi6-t2|9<LT z#uV*t-lW`DOGQY+XpW<@AVLXIw0bkNa)1ITa(LEiXmzgmhiPby&vRSrC*5^^(j6x} ztS~L5P`_)U-;_a{fs~pdMZdA-_Lkc<EjSYYbq@cz_?hcJb5rTUT>QM=$Czt9@U3Yp zWD%zh>kWt77k`sJh<Y5+bi1@*LH)0(58nSxedX_<5B}HszG?NrPd)nw@qN?kgHLY% zgZRE_^}+9b;}7EdMm{@@zWd78{~*3^T7B`%KaB62R$rX+%rV;UcebAlJmnRL5jV(b zl5)s?(u3iI5v4{3fr0`dqX1=fSUqgUVhV(QMPb714PJrp=7wf7H<Y449I~I>sOz;3 zm%3dx-BeH?*Cw<UHlZc5_cxf`q$0D4<&9hN*K9ks-Q-frj~FcvjhBDG^)V-R?D{yD z@?+Nr^NBvQ$DU2CAKJ{NNrl;A%e?;xp~h_@QNf(zn9h2siSTS1t;z@3t0usnRK%LF z5RBNxeym$?qs3Z`tCfX{%of`++T?d>G^gKYyEIaGhv<BZ-=)#&cWJcQE)DFlShqD% z>F^VkPAuC}yt@2ErQ6>>?XT<g*Y(+T&fmo@J>>5q$JMgze1L@mK09LwRd<s2wENN5 z<W-cG%ftNk{PP?g%ct(klxGfkMVkIjyoUX}idFHuVU9L=Yqwm%Wh*8<y`szQl8$0( z9_BdaKZV`6Bc{jSOad#)t0%%)8E6e2Jl8;LS(lM+i;lWH3XRj@WWr7a&snsLrUSu0 zW;kws;lP3$p{dj@-e;kd@CGt@^9OCqY;mqyTZuoyafe(;pq<{ovdjBdcAuTIxN~w} z*7;s<0O@1Xv^<>qDQ2<aeAq!)9}{Z`Rz5A1J`58XEmvTmM_|qJ?p%sEAE9&&r94Ah zd*w&MpB!P<LNSS~hg}CdBmF&<u7~yh=8wUqFS+y?N;kj`T*Y0SOOb)edE;-I`E&XE zY~+F_GF!opz)plEG1x7z07mRKv6?gaeR6Jd+zv`nRJA!yE=7KG+%8!CQMwzFA+r_i z9$3GFZ!fIh!KbhFJNU-LR#=tngVhc`IfDu}7X18W82veC(55NQpk>2FZ}bqoYO~*m z=Y6Q>-<!XfB0)AB;K%v5a+LkTi?CLv@5;}l>{v+t`O`u&K@q2>1ufuNt@7Xd|K;b_ zPfgfzn?v~j7yJJ=sUaq}kh_Vn|JSvLS|a2<7T)sIhO-xxhOZ*V4rP=eJqQ^k{&*%` z)NyZv^P7bD{lM6`{Z!sxf3Kt@E;Wf(<et2eGcG@gGAO(JB+bh6YWYc!^l;_;BsCtC zx%?y+>A>=nl!WmKm!IU)@1qe|ev(*mX58f`nKA2=n_Yeqi(GH{N$x5SKj-q3thVRY zapy2e{zuDCQukpN;w?W3oAaApeiHN!vZge1o%@CIlh9EkE<Z^ymz_kGpCl5)Q_=F1 z6o(J;MaoY?I0!i9Cn11DvCB_F2nou%beErvp5XG61V77s%jGATp|x+zPg0Vt=iB;p z9k<RU`>zTcN^;4;U@ik>a;Tx0$B~~TN4(jj#2ON8b(pLsw&R+_hY7!se3UJIT(Y*@ z&aErTuIkSvCB8WK*xU-8+YqyJj~C5(Z*?v?yz(vCg}LO$$|XxK$t6c-oioTiC88kP za*;nJ>&SKv8i`DG#e1tsMY8i3h+?8r@hX)>r3&sw4kh<6`{xOJ88|q~^X^2n8lxE@ z`z#w|azCkvw;*t}-DhiZg0;+bQ{2!DFLGXV`#3Gtjpe;Ll<%gH?M8TsP(uzc0+wY4 zwrn>K><{W3n#fB@of3cbU`co**bth)ON&QSafaM5QOX=%VsM#%W^K>VwA}DgMVV`T z%XV|K@KQrr+5Z$?NN;k`;YDcT>p$Vp<bGkMOT&w@-8j4mO%5+YQ*k5tA}!lZ5uL%I z$>F7qv+*G5(G=u`7ojQ06Hmml-8j4mO(od{e4Db}1Z1*tXgV>RSK`oQs4+CnGvM?) z;0(If9df{V*a7De2b|RoIBOhmG%(VvYaMXbIpC~!z<CVd2u%(+k2~NDyIXI}Mb-eE z5sm=P76+Vdzqk|?Be}hW&I+1drRG7?NU#tX?Ftu6@Sxo-2I4(;?-y|PQmc?Wn2HEZ zbU@GqrXc$xb~FyA=n6jD&5?ML+pEXZexiuvR_R}pKMlNDZq+!4PW}*$z~f1gfgGNM zu?O}EPr{hPQwbb++V3#t@Fa}!N#IEsb9kzNb9fTQ9G-+RhmK0P(C{RTIXnqt4o||E z!;>)Pej$uG`4bms@<$kRcoN2nGv7GQNvtqgbfwFv#7D**#vUw=gN|0NOBMxrC$UCP z5Z6vwW}7lE31irwL3t<Kg8h=b!dNUgk+Z_syb?*fG+b#o56RXG7tAfmIf*s5OfsXN zAs~sws?H`pjKr$c4yEM7xw++>lf*()tzN}NNGyDo30n7PZf=aDwVa!iORjrw^~y7m zSlPLiOORL&RU0_RC67B)31gsYqeIn*L)8|Cs%;Kc+a0QQgbT(&)lN_a@OA;Q7BKeV zs^D%U);`10UbDF-^FRz#jZw!{V2o2BZa+t0a~z1_g+aJH<kkV?7WUOCNOJ?G$uBun zd%TSq-t@2GEujxs#f~tKHv!RPrD3qy#yer~{xRWA7_=zFCg&pIf_)By4sXI>tVDP# zg>!fl1|8mnLGZT0$vKA}VbI}C7zA&Oa>Aemqp_@B;O!ANYPw$tgXpNVu`n2D=d5M* za(EL4i!+;#ccZ4mn=r^ng12Tkhqn}*!&?iS!<#VZ@FqED3AYS`3-$?b!l1*OFzE0m z3_83CgAQ-PpyAChXpl2G=TO)0P&epMH^gg!x`!R=9&xB!?NGOdbD-`~hq|>6b?Y4J zG-`sn#~kW}K~VR&L*1}L-9}bak!2$ebz2<jwuST^$vH#a4j>5Xc7C`jTmS}vAl+hj zb#V6>7zAg;YTOIX7>V;hkl&4&_LJPl5)eoGfgn#92ZC(kN=_&c!;()Q1wZ)%4~)rm z-{TKYXyl##HT=!hr>x3z=;WP%>F_5^I{XQf_veK_$wh}hVG{g}IZQhIMW}m+zhXFt zKVj10PndN06DA#+gh_`#$wh}hVbbAGm~{9PCfzTp;2i#{#TovDNryjS5_yL<Cb{VF zCrt8@;4cB^@Fz?<{0Wl|f5N20pD^k0CrmCF6aIurhrf0>hd*J`;ZK-!_!A}_{)9<~ zKVj1FXP7hy8YUeI`*}G~IOtF~<WPuQl<bpS1cj>|3fDLkKI%}omUCRP&Y@741ci?| z6mD=ReB7aM*r9NvL*WQg1N>}pDBK1lLE(0X!W}>o6z;5M)CH3q)R-oh|BafQybFGV zCO0V$6~8<wXQJdz0-PdUcNI&|P3|tmxdHH(gezECu?XhDWw{1Azy$c!7N_J`QRe9g zau^-1giH2H7HjP*IZju>g(zN%OHgt@9#8S;P*dg9zyycQUovBDW*j+#YIDXBOixqy z*Cw2C1oKncw$EW{kVEd|{#qAGRC<p>wN<`B`QzxH?EZ;Ct2MYmYvQ~)v{q5;p>;k= zZhU6XOzq1}<kf~O<eBLKBMG<BaY~Vip)CO$=b-FoGvi2`Y16i!jf626NyrwX@DB6e ziQk_^10@QR+}}utDKFIgUwpx4a=FGUb$Iy9`cQl9#a<-yg;mMy$tsb6V2x7-F0u{u z#axv{3FAOXMTPUjjS{9}oZ}ej&Go94?1N82tJG%DYSNX<0i~t~0}iw{eU6>48+Yg9 zisw&xqNn=cOlVV2)dJn8`B~})nnKZh3EGlz`N~`0dXudJx5XkBcdMP(m3^v%9-D!7 zV#Cq%yZrsT{r%JF9cGW}J%Fu{^L>|&%=w<5P0w15{^@4Z*GIo3L&^|$<xd8YhoN(J zkmtzRi#Ss5a!Dio!D^_OmDr)Fxzu8Emn)d(TG(+sa$(oOVi1hNs+$7X3RqP*W<f>O z(GbGtS@P4z;n61sV_$?prV~YE{#7UzPg!QGe~m26fBkbl(9sR~ufpPlli5OKo%nH! zZVwvo%QZga(uWW7`|0xAyLfQF(Vy?X*7|1o{nM-;J-NX^?m9c;U1sm^<@c@qt7*RP zdw=%_@qMMApXU2s`RozjH<ohBO3wzSk*21c4w%ug7$%q)3^PoWqvtbrl%ZoWTA&DR z!2x$AmWkr<cI+bC!`qmzBzG*I5iDbvDGqDC%rFyPH9#g_8A;;|GY=Av6CLX+MSD!< z$+UVI;|s$Jh5LApbS(2PN{;iKY4v==8|xWvfAm@0+l?pQLCS<@+vNUe<aju|=h8A2 z6OVK<*x)?EOHmX%5H`uBsxnNKNGMi)JxJ-e`e0M3#*3*z2qGNUvB&jo&^X(oYoVG= z#Gy?-L{0Oiz>M{&T*NY0=zID&-^y^3hPG+vCbZoL8R$SHwQ=0(uj}&Hb?Z8<j-}22 z<X#?A*b;rgl27Mr|5ghXOKhRy#{5Mb9r6r3k)UZ|;*oOmyq(3VDQguPfmDD00qvco zrD^YF><*#5zg!w#MSGjUjrJy~F6})pxN4O4KHd`M=7Y<Wu6K+8oTwc8<d#f(TfnvH zEKyU&OXN!w6KIa`f_U6eFA?vKSqwDQFeO?ADR{q_z6yp=QA(UQ^qE$HvsN;kYoAmp zLwUKD9m@&CiYHUWP(y|J^B=Z<>P)M`?Vp*_S$zFz{MLYE<M;V6N3ZvUZER}z6>ny_ z)1VbTKTuS&W{zV;zucj5wDN|DO@d<8aVJ|j$yYG40KGT3ak@5LYU60#0n#W_9)A_> z7Mi&Fq2n8%O$uuPZT11vQemoi4#zF2(v>GeTZz`H@x872lSR6|9fXfUJ5E_(@ftc+ zH5_+gfL;ad9_c+p*Qfaa(Oy>IMEkS_g0Zuo%l$%#Mm+sds_~l~$Qoxge%o@K8^0NH z%P3WKVQ+jd1FgnyMZfqIRDW*FZ9SA#^3>s?7fyGfkFWn5EoTH=WnfR|ucY8uYZ(_% zegx8|;%8v274^rOsZ|1w4{DQ&1#OQy#i~PbvN-Onc+yo!5h+AC?q*NQCTRLcq!5Aj zvVNon=nF|9!e{jJaz7%A2&^iEpypa}QiaSVmk6vXB+vh_nqQ!K6vL`QkS5wEuL|*b zXQa^B0-RH5P9~iQ7p$XnCh0_A*TeFs2TP&x>k?9Ev=fL@=`&G~4=bdRF-Po1*m6`J z*b!K@1nd@A+k-Y}3t&F*)OJew(^u?(_QfI!3AYp0f5k4Hc3&ac9<C(8>7Xrujiei- z*zKh>8L_Z*`bk$&&m2m}V0|R5eXzO(rTbxsHlfcPhph@$N^hHh4eMfha1jmXA8dQ- z-B)N&edscp$hhb;n)p5S2l<&yK=0%(u;s7{TnDR(Ie)6YDD0L}OY5vX_0ddDx}&z# z^9suBQU&WXyHvya%q}&sKC??LtpAESSRaxg4jZx($Q=@}1j82F1d9+5+YE~ys&`1i zqK8^km=<{J9}8h#;^Zw*{eiVoPs<jPE|lZ)JEMy=JX8=3DhiEW6#byeWA~(^?}Juy zei^iipp17yt5=ZW6k6kRJJb@j@dA$PE+Kj3R)mVnlIlV_wO&5*WSj>AqIzXnO%5eu z^Vs>X-QMOH!bY07?J22I)C$`ZqV1=|rO>V@bZ4KbC763!_WE}YKk~Bg%me@DKp{`d z4L(oHGK%nf9oQ<9fx7rLAI!hUl}(MfSAUP<3}iMvn7`7W>~FOEau#b(i5T-Se`3d! zSbKl16DPS7d_cyM#|=C|X(0e$Za}f5baOJhY}VzwKW%TMfKkB@RPYTINatsFEomIS z$@r?6e13%eTh7uI4%va6eljqoo?+ud4a_md2UeK<_&{^g6q??ZL8BJjD#7@G+~K$~ zJjLXH70dt9VyeHy{h&2P121S^RV$+hw61x9i(xP~O5!WVhZ#M8B)Q$><Lovg?)AGA zKhHp0eB9(#A2*pia^wd>9G;Y3YV$kqs?nLg%v?3P25RlO-QHCr?Oio`cVt}f($ULP zl6L*v|0dVjBo6r#(1)OOw#hii8C&jugwmdKa`jxW8rEj8P8_o9L9*&mN)c-sR@RDj zK~W_R{jjng)(bO<LoduWz><Sa{rPdYY~-)i?<5Ynm)MQ4RJ+&_SU<E$9QvVc8?64g zK;qDHUORE<OLsyo^Yx&G81Vrx)#%8wk7^#f2Y&QRZg9Jr)qJ-05{)%zJk^nNhew8d z>g1(=#YVwB2hSzIO(99_LW+Ds*)TCwo(=z;yP=P06XCl#m(6^W0--<DXXW3fTWH3b z4Mz@LSxRZ<hz0(F{@kf0W$8tR&0=qkk@D;Ot6zmHl{p3~|LS^Z`9yezFjT?Mq>Dsf zg@MN650*DTD+BC1&?@HaqSc%h25YX5GDioi6YEJO2v*BR&-oHG&Usyz$S{eA;vQtz zHFKTBS;|M`Z}D4TTe&<#d7Iz;+HPYWx{TlX+Nqtdl8aqttyzY(hE;MGny$V$XgEF8 zzvtP%7xHiR+8YS@VD)CY-k!faqBBp?_XK9^&*#9n{ycTcAqOhgpV=Fs{$sNZXtaJJ zcp4gG75vN4N`7v2H0z1)>$>W)vn&c`P5R96ERJgjer4zD(4x=hINlhXrMgM5XmUNY zDeCI5`TWsKR8E>))6YngYbGnw<XY$@(&XBP#&#Z;;kpj9lc3&kn<&R!RI&8KZcAu~ zdgDVt^>X<Z%E{-BNzC<Uug<9o7!Rb*sXtTKmc;#Gc#F-dNPc7jom%CM<+Gl+#_b&j z#q)2lYQBGM0j%?vcuX&$2&>953}ywqDn7%Lr}2bIyf#nS571&UV}#cP?=HM5R1<i; zQguCvSB)|pgV$5$K`R5T_!?fnDk{8=LTie@YUQ=m#kV-Fn-M%9Ssb@X3~gbv7}}yt z(-?Gbtz8LsDZ|~34tE*|kA=ELLBl17cA@|G_etLTzPI1Nm<Ae?4;L3OYPn+z_FSba z^y9sZDO1M#uwg>|IJSu(M$pReR*Q~Xbz9RFZ{@hU$zispC+YnEio;v=`?`S-6$`U* zPD@rM-Zkrs^Px>Ae8o)Q%|%7e|AgbzjDLDk*R^onENJT!&zQ?*+q31Xp5eG1xpOA8 z!^@pc<c=`i)fk+q_v*fO!UAunz1-=IjlM(WeSRqI=e}mPanm0^luADMp;Y2Qe@G3D z_nBu9^=`bkJG=3on`;K}C>NN_cjLW@eK-BlFS%en)X#YygY|PBjrTsJt(t+o|C;k? zU^E{WH{N60HOYkKKDyzfM9iRXHohaQFAW+S4--;-CZu-$SwTpJ|AQNOIrS8!hs&u# z|8@Sgk~D5`IAVR{Q2bE&%UUc6Xw)b6iy@QOb6n|_u&UzpIW{<uyF@~|hTEzUYX@F2 zs==X><9K~=vdR;jeiACI=(u_GJe%C7{IQJrx?iimUz;y)_xI~4iudi}d?!<1{k}`h z1nnl`@(48T<B|6Ifws>Lv~F}j<_*UFm>=5WNOpeQW&mY!;ckrCzn9y;QwG}m{uG^> z7+G7mq}fj1S`hvJU7x>0eO~yf-%y_eW14jy5g**=Zz^wLF^NX5@Ohh}5>6b)t}Hh& zR2GHzN#ayxUOYJitv)cL=Nf2D<{{Qh0cB5P<{@ZZ#f+XSq4DtZt5pstEuMH&`ttBk zIc{F#z?GW)i%qhOwH$ZFq8e!H%Jakfp=|`@ljLcSxKX=<%cW&@`cb<p{@~j*YIpll zJ6%*{qjoRXjZ)qh)oAQ6X^ZAgB6(woBof}YGQBv3#VjC_NPg0=8kQSMPU%H$=ywun zM(}HithJQY#Vo7vI@kl@d$pD%i4=Yamo#UPse3BWa+M^KZV3B0#QcPuM5>DgD=FPb zX>oYP0PF~?eWEkS#2<XaJW99eXIBJ2gxwCynz`5=u$ga}1l<XHRrsI+i0{(1D{)M8 z9?1_D+avZ+YJO&eW{}}Xuak#_AHq@58D#pN!dY?9f*fLaQLxATTu|<=9fuTUzuZsh zgjk*eTLh9;%7Jmvf*i&uhLu64DD$CeSQ%uF>$~8qurkP;<SvjwW{G?o2hAX3i|T^~ zgN*JF<$_$~DfxlRAj6+tQU;mjWYLC|LFSiN*dt_+34Yc$MyU)kjINq4${-W0v=5R& z=5Dze4O(FE7=VD4K?ZwF!snBtM0Oc@Wj`rV$+5bLT(iSpA=G4^u_Zyp^^?3BDJLDX z$*Y^}-}l+S@3$lzGP`T0Ho%Q+1o@LsPIk)7hbb&bIA@nE{Ojc1z}O&H{HM+@{M@U_ z&(VID`Gw{uolN1REB`0XFV0+D7`i9t7bjA5__%#!{R^H}|BW=np)E2p7MtEyX8t<N zDf;ADi-<%Zibm6@Y)~?m1Tq&_qQ>dC>YDwgUsb2?4sYeSrrep8YvrTOaotOEJ|KHe z{NBa=AA%-MoY8X|v?-`FY21w2NBUq2vyb#G=69tU;#+w=N!PXk0=q%mfxJ|T4%Rxp z2<@DI!dEqPcX8SC(C&YBQZ-$iExCf@-mv*4*_pIOMt!EA>o7ejp@1MrPm)BDw7jBu zrAj3&({B$|DrxB@tAtxMvmQ#<z?v_pla}TW>ZE1mC`%7cf1}pKN?KAkVjqL0?xfX8 zTFS2qR?^ZZY#4^+Pf|_NlGhbG0*gPKq{J53?`1Y=J}PO+hv|bPEy)q1IIxnI;T+Z= zo%x!hIP5Mc^FO`AZrC}a7I<|J?9}}m)uWPMl9pa$9fP&7%1&BFUw&HeAZZ!a#R}%@ zlL=f)sifsh0@uPyTJopQjKF&3RnpQcuacI&CM7MaoboC-noF&dma=h~{%Tt5+sw<q zvB|5gGDk}C{9k&G0`8Q5qR;`tpSd#GjgF)A=ssZbhkQV)!ONxV6~mCIG!eVtNr`rh zzZbeF$)p;7pJp1ROS?K2LCfywTI^B{yVc_~nPu@AqD$OEY657C`~#wuOP2R6!^&LM zQHV=Wd&|O<I!T?(CbA~O$F)2=++Aj|tP|Wm;9DqfA{_1>XmhG_NJb<C^}&0gEu}OL zln!AAi?$LM2)><|*6*OaBaFmWK|4pVU_!fm%>8aqpovi0$K3DrG57l-uIBssXvK`6 z!PFtj)O}osD0fQ_>JW!#1`?FiA<PuxIt133QA!`B^qfu`S=Pex>hGj<ov~KB9@gj7 zQHQW^aUG(>*<aKlcm=5%>JYSx@U9NQ>#Bc_!17||%%UE#=p_ob!syT3m3-Xavvc#_ zG&G~NH2=!SFd#l5YmF@KH{6oXQ{e35xp`eR3rS@>Z^@K!zS$dA<iBQ@95bTt-*76U zAoJ!BB0P;XVblNoqFizq;n|!^Zqy7P&jB;fB)7y$o?;y#IgIxJ?=TDRfhS%L@7FHW z<c{L-@h5W0on;$m=n^H}p5jDc8&H!|9SOK**Wu0t7Q8|Z1z5x6P@s6R$vh5g3Bpvk ztlQOWHpQYpv>;*09P4LIbz8IdujT!@f*0fi61*TEz<2E61Ne@e{sZ)O?gMu70q?dC z*kjI@$-NJiglYeBPn2f9$;$VP;L?oyfPJJO;5Pd$T9A7=UX#a6u*6DG&w8z?B*zs- ztoo=obp4ejeC%O99t2oT#3JU*NB1Q}vW`oN!*^1J5%HzGr8McO5p^+v&84U!V3ADS zQe7}wRP>a(l=}T>AwF2~Q`XI@K-o77{kIzDjSLso;Jv}N;K}g7EtC-+*o6xrvpKyw zX2~VvT%`EA@u6!Qn1!2NY?l3dw*7m){d>{WhVTQlwMV7!g#Y3$=f8;KqPz(9X!Rct z1K=dE2nc#ftLw|CYw)yBFQ}?6R&X=JfnLwypfso_6fm`3>a(xM3>9x9U1?B%ihq|$ zJP6PKF>p9|BCiM<HhDOJ20mjyv7-n_XYVL`;^7(MafmsTA%1AVyN<%ek@}2ejOjCP zgK;K_ss4pi>`{f}d4By#Qig^jX37&I(8>_URcICVYw01?BxBXS(wgE`-%dkoXNMPk z87hTazl#r$Mi!blc=bc4Lz}YKnQg!MjhB937)<#rvn^M<m@KVG?U|IfJ)ilN^p^IX znw)5dzh5USL3*yT^_~LlMlDJ~(+jl7WXthp-|l0Fv8E*byoMiH2VuQgXb9Gug(SXZ z7UJ4RV11?|iEl*enUt=9v4=YG?d@D^DW#?)>Q%L}b7_@F^4r`8{|3gp55C_SK>Tvg z@JN~8yg3j|F6tD9Y?)1L$i9<vM-R?4>LmW0Ji5sQs^k$8MDhr+acp_i=H$_aN+M?_ z_s-}!@u2S`$A@kBd5u*DXBFg8p_5?FE_4zvj|hPC?~q6M7ZbZEx$`FLmb;u=@op1D z>ZGle+;t}}VV(`i{0Rq-XV9m2j<xa<bkYnjz$JU>1PV5Uux_E3y52E?NW0CPjD>$h zVl=3q>St{A^BbODHSP1OUYF-rPy77p*X8*&(>}lEb$Nd6w9l`7U7lYz?eptim*>Z) zeSZ9Pc|Os*rs;o)|Cr}XU-~V_$37>XKF`>KWcWO09$wN7;Q?DP#w3CL_$XoEMFZD3 zU9QaQa!7+}8?|eu84*oBRGWO-;k1XHPJ7s;(2jVgO26T@JJ2U!P(Js*9Hu{SZ<nt$ z-$gf8mnQchs{B}8tg%|*zLVpq6EVrBeGJ$I`6R7^$arqVX7dG0|MBAv=@f;rTGZZe z8vVw-;ojnKg(Rpdhxef>#?T!i_J-P+f#lVu4DHWQ-S9f4hxD7F1+l}Gs(;_}Br#vl z=Sf1op3jp+d_A8h3HW+GPZIC-e4ZrS>-juMwEwv0?Zy6~ncTu#%mSk6l376B`{dbh zSU?sz3&_;`P>az$EAF`CPUkttLG+$z*K%m=j>TP3pC9Vp#VeLlRE77QWpj#hP#wMS zf_tDf7e?>v^tO-MJ6GJPb9GC}6QxO3H3xB$EbE4ebQC)ao_6p}_bk6dcWhpqzSFEJ zg={~Z*KbnM`<6;8Z|RIK*7dFT;xLHmrOh5My}45hlh7_yNJ2Zu<M7=`4E-t{E3viW zUcOo;lD;RNW7_L<>i=1pc?DKF^^BgYr3Oo<W<BvlSn1T{YrYXyI`zTsraY|EshJgc zoq9`g3RWhOPX32o3-L~;(y95A!>3g0JpaR*Nd&bRb^|3?MD$>pL~MhWGl?MYR4S7Q zA0Qv)5m*aoIcPRQ+YIJxgfn`MlQnQV7tCO76LtqIse1Zgcfw*eNWcmW+%^rnTPzVS zF~6}0@F008O|hRhD|<uL@FVqac8<!Qe(;b9<%+>RnNZ%Dy`g@%+A06Czx^?nc%Lq> z{#(AKRDLNZGKFyZlF#xlm$A_1Z&&mDW7(s<`*OK=U#{@(%Te#X9J9fU`P)m*kFY8r z-7jrgeIR^O23qsN0h`CwHia#J!!hxMYztgG*pt%yF5y$gHPNzLIBxdlwG`$x&Ffk+ zb+-D~n!X^jiDOpp%&({&C0|(TXdJy>^R`YlV%hx7ws?RwbA1JCn5<+)?De7f`}j=R zcl)7<&zf0SSle?Tj8i%UTkH~y32UuksaDQ}HFJk|STm1!hqa(IkS$nPi)Cz6*jiZL zP>#LAns@9K*1Th{u;v|mg*E$ZhqXwE6~$rA_I)_4afRM&1R5@k%G|sK_RlxX+yuJ~ zHh3dD9vs%ZX;D}!cZ-z5T7@$$3TshkS`^m2JL4W$zcRTOmX$HRLtZR@uw#($M7FUw zd-Q>uQ|dhXDb+==;}F_ThWiOP-+5$@wk8=gdo)7qB`%OX`VKZ07|65p-{nExc$yhx zZHBt}fg|BN{{wd7Z#dz75C1|>bY6<9Da~f|4(6r!98A7nS86((4S#az%DX7dOnNCg z{1@^^xcxoeiN<muy2TjTjRDVOys|c=8OPC6LZTofaJF-cFqPMonj>NrPaB}Tn)F6R z&>9vC%ptKfxLsnh?xqE1Q;wH9C)tGFj`F50q-uvYM>AK<fTnsd2SerXl7PO(z8>?N z==6RQU1oa#{4(tDyR-}tzOG3P;4B4i8Qw=?S*y}p?mw!oZ?qFvapG_@K|x*&@yc?M zi$bx-zsgfAXf(8hE~ng)#qgyquBOUhtp=M)2ekNJ5#e{xXi-m{%47GlUIneBSVKY8 z6VJ@K0a{($Q>EjYFWzv1%s%D=53PIt$1{Efje8H01RwPb$4z1LH{?9fY)dlKpsmMH zgWNYxdFz8`vJ!*%m^1oj(RSWdw1f8)?c_aghjw{)#%_L>;W&*O(Ho(?8Egkowx^hF zrl0fnQ#VxU*D}+ncC5yoJ18l>ENPD1^UjeAP{W+5E<o45-zxjL`&8Lee7g(!y5#fk zT;C=CUEkBx_u_k}t8etPHMAgFn7J&2^M$l|2}MQVx(2><+45)?v}`%*7qtAI=#u5q zq)Kj)89LgtEPNHE3{~j74vx>)PdT{IB^Zio`$B1kq=q2cD@b)xkT@pemMKTv3jcKw zT?Uk)&9mHwtdw_xZizp5Sp(&*!KtHC#o8<pq%F`|&+4!gkRVzMKAi8;D?qz5ST3Py zlpD#GUQ<CpwAVlSxlH;8C?16MV}jskPFha+GCwUhAezW=1EP6rxdE}@u%!{v9E>EY zox|3(iqjr6R2Eizat)Ux0yaeCpG!-p!GD@<ac*1T5S!17)i*MmuFHR()0wHE+ihA~ zkl#n<uT`xUoFS>%L;i58WBlPv+C+INNtYN-if@8eTIevO&y6n5Wc5c~oXMK#0yAmX z=J^5F)!8^lTlqZO37==X$*=h}`!&CmU-N76YksX>KDYV6-|ea<?$<$mzXYYN?EYPh z)MXrZGtVxCrn$@lfA?DC^TYGjX6MhA0r){C{R%KSYq<JMFV_3-VNCRCYg_XxI6Br= zw)aqO>Y#<?Q+<xfeqr|CBTN`>0c5vd0GVpS*z}?^5ahF8{K|P)3{XcdW6mTKhDl6W zT8q7b#jLGZEF>(sW}hs+-e8fdKkF;szNK`E3Blfn#fjq2vF&$vNUy+fg55WgOYX&> zf-xeWJMJszai87xSnc}6Y9ez9JBo=GC8NtY;VZP(F{b&?P*XG)Kc(=Pf7kt={q67n ztpALE*Zu$Lx4-{C{Wkai>2H7kpH8{I#-EKK)8+?nhdFwE=TN-S1inu|wt~I05{yy8 zj!JyR2s?WC0KY4nq`Z1OTX!3@CM@}i&ew8#{hrjt?C+tA`7W2B%SoYV@?EZZWToXF zND&!EUAo0wuB0MG{nlr^tSE1ncNMh57GA82^~5>u%0}#Y8sPQ3G)tNii@gs{Wd0f2 zcYs|*$iRNi>(7frUP4<aB@UliH6ktiVc1V@x<zw|M_^HdG~-(hn;v3^lM{!2XP~5E z(LuVrn~Rq4ZLsT9%ICqZhhf`N6!tM#CIXsjZh%dwTHXA>Z}A(ZG>tDArD`1FhT6Wq z5qR6z_cV-j?afgAxvfE$PL&mJ9`0Xl6UtoUg?p}SKn7p89Fg&bFL1eSfL)lcqhL6G z*7<}SS)@yl#@YGZnqQvBnOr8|Qtf9e>~PD5e_}tz|AX_#k~jadO!B4>22}k+_>v>s zQU0P%W$bdEPwa3p&!=dg^B;}fzCYMSOI2bCxDr~$bA_Plo>M~&*EQn-K|4ScbGjyI zT_kgV3p8HTYbsxY`>N%exUXn4_su|4TimAk7C%#L<+eKChFw?)X}^9VD1mlJ>xXtC zY$DLE@XeVQpxsP#ozRwe0#SYkT^~E>v_-6+`{92nz-WL)E{YYRT23{~f)I6I^e#a| zh`P}MMu;lWbipBtBmGQ>VvG<7*1}@C(4wRe<#)FUQ5GV_A*$yLqOdqb^_)r|7KbRX zFRTku`hyjs5VjH65!lR@h&&><z|I}V-`~wRxkTog?Ucq!2!P|P8#8zY>`qE&@(kEr zun1t?Y&R^Z*B$mi^bFX&a1lMj%{X&&_siF5Oc(I-u=}7)p-+X~56cw#WY}@on}V%+ z^$A%0!D_}C?6dA9qedjWB}%DgoJ{C1hLs1DpIFNSioZCe@_@3i3WMe^x+%DJKcy9v zW}Y5bMMYr^GK1zX+9K2pn!l(4XVCmb4LgG|`HOnDGWm=0rxw!W<>~!F7p#`Al@|v# zF1FGvLJ6_4%oevXR%WOsN`T{S<}a$5h5Cub@4X&Ie@yG%YkSVv1sgtCo|{|I^!GQF zX0M+&>xsrlnD~f`%+T`zb;icyvLE{hzX|3p9Ue)St23)7w{nsZzYu~(JwFg`@>jbP zR`9F}E}2rG=E=WR1xbul*$r3mLJPA)=R@)*Qq1GnzADp`e}|vnrH)^FxL<0a|M&5; zqx!#1vZwWcY~3GxkNzbONKLk@*sEauzX$=qaZTsAMHZ^{lk>U-k<0^>$6F8p&;&}B z6z3+OSp{uI$*P2=GWZ5UNisx5Goo-?-M5YF)z905E{h4#K{9a3h0Zee+CjSxgqLKX z-9I@Heh`{2<w9t0DO+rzeb@wkLJRhDy9opUtolEm5o&1l|FG*FV%7h-z8F^hUw^Rb z|ET!t^lM-nBA2R{JqkO}+oTKD!ty64X7zt=py5gFn9QYahJ6h7M$Bxm8d3NYC?AJn zc31{G3>$S;uZ^&!8FNJ&fi31Wxj_9t7D=BAyA3uhi;co=hn?#>@(x(<kg5J(tr~Fs z-}@Qvrqufx?t%5jC-r|n(a6IVWxggsDS!pb?2Fa^OJXKs)c=tL`gryKnLQ^<#7yYg zui3Y$|LcfS_5Zw+E9(E@vZ%gT{r_u`FG<As{;zA*|I1?8>tM@a&AjOPe{l1D$sqNA zFN0#RUItad`t7<^u=?X#^?$!zSN$Jlb(~W5e_aEs{*M+bV_6)Q*c<ZWRR2Hq;LM)G z{l!mS5Nv+3&HYZ@UsZ%zYS8?}^%&R|%C|%;I(aMXK&?Hc4YnxGXgC;ahm9iNU^`%E zBHv&;VaL%jV7p)g?F}1@b;H`AI2cRA5*1aYy|DBcJx!fe4zv<T{qS-YRUj)DMLg^& z&o#bPQivG|BIv_T1pV6*$%J{wWyAl?TLq1G6+}=j^KlB=|JNC$b4=yG;VwHd8-9mU zi4Xt#&vU{=RMvT!{wuO;Vg6A{C7;3y-Xs69!jUrM=KDFyY^gp>;1uMI0B-th70l84 z>=b_`CilY|PDKGisnw==geGh>Y+_VM#A4rY@y03#J`_=})$OG3R^J>vYf`9bAF)#t zvD&E97BKxCm8xJB=bJ`)Z@vlItk#95Y|KRpd40EaBz>dYO546q+d|v@6tm;cH_zP6 zac6L=y$^m%M0Z6B`Te$Ozu&gk@3-xvcWqI#@fg45R#Is6xZoR<4#5VkHrzc7>wS?V zg{TFAKvIZ0(5i=|kl%CnD6IY{T?_H1Ur8Z<hxM@BLDJ$e*kWgimK3T$d!kfQ=!kuE z0+(9JMmrYG?av%cNvE*n)49gCC?iY$&pJ?0yRVzYZuTqvcs8UW+nqlDE??9`QT7X; z<sJqWeO!JqWwusMm<1QaDEy|sd@iRB>8NIC@c$I>qdORWqA;(CpSHvIUrNZ*KJs@{ zJ5`3PK0vF`VpGs+-~Khe{cDlO4V2e~&30Y<Qfv$yC%8=<N+_tOXF{8w4q847O;tJ* zbBl=-Mz52RCzQ9%l;k(um_f6{Jj20_Ij=E#ndcg~@up)l8FPKFpErRUQ&IYPE?%5% zG>&isDzs=N+<*!b2&x&IfXL(bB~Ge$>(9xEbEi%~2)#2_>TJ-@zi+b9v~63WV1%OV zJrAkH=HHe7JV(cxPy8w68TkWG+AlPp5X`K7X2TraJ}Jg4w?8%-L}J73b5D2u8$&-2 z=ewg^PyvmxoTYwV`A<aJfmQ|cqVhMazOUqFwO@_C3|gCEb0M^DYi3>)8lP}+5feTx zVpBREYW=A>y6R=ghtxF(dlJx=g)}&{)%qpvRD9`(w3+s++<iOZv;KU9<Ib7;g5#lG znaws&?e_EDH1pjy%6n-Pne+4kll@y$U)N6F?NIGRy+~tLGwBaj{hLuzs)hRZB3=<z z{k!LhFaoRo%`{sbbuBDU6s!L2*Ob=7@?2f3ir28d)oB?5z~?B^pYOb}b@><DY3z~Y z>2%t;zOkRDDEo!K<T7jTd-G508rO@pMOJ|LJBqx8aI(*GDiwY+znW9W>apstV>RZF zv)wX1CwDl1oSn{Ja98ox6Hdo8v>odb&&Eq|Pq?D^pn1FO{aEcr3i3rg#rwR0Y2ezD zehf@p>5W<D^3CwhST3K!F|%tG<1I8HvzB=aVdy<QD0qDr<cF%%@EL<S8lO|fAH*%~ zT0w*_X|0FidChua8^@JlBXRh_<xLY`5k3_*cQ&-<*|6j@&|1X7%h0-~XQT!3xHoYo z&KmfYa7?J&s~>_kA5Y*1Xo_KKJ+y_(GtgFM&w6efm+Sg=E<YaH(HN9#-L^C3<VqKx zk>R)->$1$&>1bxtIJ6h}bq2H#kzWB8`ne8~ul)s*AL!g=u)?L+1%*qm3ksJ=9brwl z^h1Sk>4yqcqL#M6+FDqzh1{m?bCce%-#yjImwRrP__$u8-Y<vGe^A)TzlRfMS3XRB zNX4`EY2wDmS`W{RIqO89w@!3<>qK)bHq7^`S=Fy6^Xt5KB9t7i-XGqqda0ojWJRbA zmPSo(uw1V8o6N7{{hzT;;5R_~ym(-N#)s663$35C)4=oy<c2+`jaiHC)4ml1LZ#&C z`TuqE>&T!Wxslv&1_j9tREGqm(hFk6>!qMeFQ6|-PacLvm}*+I5tcXt+P69aYa-Rn zPR?UuPw6&FO@O-D2{KfQ?+!|5{yY@mcEZL+<0;r(uzCK6l?1SH*I6e*QvXo8m%^8O zejxFv>&jxGROd0+CN0f4>%_U4`z8JMQ(BaMi<IPXxDiEPcC!;k4t-k@?c!(q5wXnn zDb?&m(|lOXPQ0{svy&%P4`r0{ClySylcxQw_qy2$A)RBeQA&A&SV0$if>_N?c!Fk? znw_YNVJ~n?1*q#mW7%-&__+l;K<c)FhCTmYm+&WlB}Jw&4e<2*I|@h7=;&OIW<7Dk zlpYlxpxipu37kV5=Q79h*eA0$O@>-=@~^PoekRvD;Wzzy&F~|?IM)Ve7RCzkna7!X z18$PAFr%ZBy>P&sO{xyuxZoC!rz%m_$-EL>=htcCew`-amFOnFPSfnyX;OZjrp2$* zwEA_LHos2O&TFf4bx_L^&N2b&6}t-SG~KpNv*IPn?$Nb=<dg1`|Cd{()!bpDTq?ht zBZf2?N-W;jlxUipIF&h+`O7JwHlD?8JR70T61n6SmbaSOD}r?rAN}pr(h3Hm5#04H zJ#BI)*=b+4@od-JmiSX{oGZAXepMfm+)IGt1J1uRZ`-|-WADy99pN^680-KTj;H%2 zur#JI*nzXMsXnOeaH^FLDhi<UL9NTxS6G<h`g0Yd_{jB~-~Iig{}tX}`lTd{{2wk8 zO_mj0ApD+}Vj8|AGiLVU(nKt#owQ|KDbNt2=oKAT5Mo~=YIOE1zx*yV7S;?)f>)Nr z*!{|gJ`{XC1I3BNRw`=v`Q;qf-W3Uc0j<mYV#Z8pd=%9Hny8do#)w|*j+;$QW5kH` zoF)ySWkpGN3AA<K*Y+N51oaST+mpd1qtK31+>EueA_kBEb1X922<^rRSietGeiyX2 zIJ{Zk(Ko<KG=im{_u^J3!fHfs2srCTbRzFQ3#$=*Mo_f|RwH^)GhEO#38E^AwnjgT znsrAby0`AEh4t2*b+BGUuZJy?C$*nRI;B%1M%chW>PC#JH9-xmMvP(Y5pg4ioTy<( zD6MpoatmzC$xpRsG_yqm&30HPDYYt@{itH01q~&IxLvu1i-%sh(QFmxEL0CY%wwaV z-)XE7J}!p>j%1k}Vw{_d4+#1i_;}_i>h};nz8ThW9NX~aUkfiJOPKu)XjNFUMtG_I zI;sM+1~a4DrMBquyCTp!gp+7I^Gm}?;%5w`95>n6fJRa5j#JT~PUS5<Z?c`;tt^B+ zz%d(K-(fQm;9|lKxFjj>4Bjz%3bYHjXvWda^}=g9HrkMZ_I_)I9rpnj4c7hq9K>i? z7Cy{<!QlhYG*Bvh02&zwgbzTY5pT6hX-HV%qi#b`4=a3VY6iO&Hsa#=2p^|n=%7^i zIN2?eJO<03z$ScH0C{ikj1XVW;UnsRDUBki+n{SlU|G4*gM|-o=NCQ_ZVgWOU=2=V zyjpn+gMw@oJK?<{?4y4LzvR=ls67=pZx?V<`TR{s!DiCL0DiEi=TL-Ddg3nba9r!| zkzCxO4(H<9EnJ+7%iE&ly_+Y0d1!ptOT6lCf$uH6MnN(uumG)7!US>BIg1^=p~0FH zW&9U1cEgsFcJl^kMYHqKjD|BV{XWOBfmbcoQza_Sn>nsxPkI_!UFs1SGO6HLX*#Zk z);+|e0vbOncwRJdri{xVuskdlvYKCU5-@f3L#JHBaZ6C#GZWhCZB=bj#yD;_LlqJ# zGvX}ne1q=S#runP^Xj-=0YUj(F;UE3dm{#-hO?!3<R7?kYHeHpwD|GY6>nISi^QaO z@Y9H#M4-hCqs`C~s;0iMpVfy=DpS}bjigkO&-75i8>c4sv*xL9PR67|+Hgv5HDefc zg{Hs+5pmB2)wn+B#cSk1tTFX2=ND9CdvJ&9CqoxyHl3TwKe@m@zzw2Kz7+DSR#*db zr_yQlCw&b5E*4Pn|F`j<QYcxk5&sE1v@K-)tWc5AGLMIHj|Z#5?DgkPw)NCdTC+|) zk)IGv>tqS&ssbjgsXZplo;T~%xf*e6!Gtt`I$94!3_NfUx3~{<62iU!9&?Uv^7>^n zUA<Hn#<?&hB@^+G;vy1}#0C5oX<m>e!Q4b)oRYz0<qf7?GDc~W@!YCIaR3WqqkyNW z{!`v>>NWgdsh=#5jW$h$t<c!GQZrHmKCW2R3>VzBx;RbTVQ@Z|sISmk)=$ob*0Ff< zR%qNDpv{<R9la?sdRmI|qm1Adt{TDMoxR(BNDXpbyZ8R=@bSYs%`XkX;PrQmnG6-k z1;XKr_G*sxi%+{%g!z~GInJ%u`-B@;=C6lktY*eUeJS6@f~mPmRcETNu}(zvlV@4q z%l53vCD&NkmhoKjQP~x9$+c12nYymR^6ab+yPHX{^Vn6Z4yJR-4YRZ{Ir;e2{5+Q& zW@^fQ*^M)QMYg}>$d{Qdq0wu~i$-6rfjPN7_zpp!k~<D4(PVPxfMjNJ7iO3Us=Vcw zOzsIT32sG=pHOi2WS*^TiCl6F%OLZDeVC58a=+Q{lH+Ejo6MV+i_eyfoB|8`KEJ=! z?O$VmEqW6h*KGgV)a*T(rxC}={DNrEZS#w<nuGXOu``V|2<8rZc`8be_Sc$q%=WKM zfaKeM)Bf7u<nLvh_kIh1uOsIlvIlNpe?JyMH5V2^6v`wPL4D{hzeCSi1eZ{udtRK8 zKG9hObH_0PVi9Dr#uw@pUe1<%UXvvCQ2RnnlyFPayj*+a@HwlG4%x0j@8mY+Z5*C7 zpV$o?%-$qdp`-1AnoBr)HO>Y$d*HGnAdTnTCUwPF$tpW$Yz|)KxN7#-gEDA!Ecn_l zp*7!m%HsDhHqYM5aa~yQgodEFsYP_bA04nUzUk6$n|+CI$Vlr<{oRaNtD!BMXMOT% zXzPrpffL$cEE`z^ZTDkxM<ixLOlSF}KUG)nikI80p}Wo5#nNm7ko~Lov~a29Y+rbt zsf7J}hN%HgI|S9z%!Vipt~1q5+9AWT)G=v?^P;!h1uN}Po-we}4r3)Z7gob@%vSE_ zwUnCZ_5M|vEwVnYr*zYc#~lwV?eIQUyJ4jrrr#Q92J<*<W~<FgG<)FX_27-Vz$t$t zuzZS?KWT?j{$RJkdVddThy3Yh(hmI{q#XJ??1J@oP@@;r$35_7HGcu-C4T*5sQzr( zB>V*2)RmKx;r18LbC%6dT_el+^ITw-nlHoTS5an*B}Xi5eUS3QYzj{P4~)scWcX{~ z=f}cdna3Z{Is$*MXtombv)Rho2cG;j$4cZj8(RHJSTY2ay;JQjZw#$t)_wcZ?`NR# zx(zdCK@*>R+HlsidB&^4Yx8%rb;Hn9w(fstpe?zHKzMA`f(*2c$*yqN?o-2eSi~o0 zCm0K*=XUj}>Cg>vuecbRzNy%v{`Go%_RT|uqn7*mT!W;;pGT$e=TRyAc~lC29+ko$ zcUCJ4f1pyJdlc5YYpsO^lme(`CkSD={Rn@t7z;-Ze;jG9Ec}5_VM_R$7oE^NMEIj~ zYAHte!$TkfI|6%fX8J-{;m?Cv`14>E{?auDX5r6+S@`R6F|mZdv|G{_{-`HCcn_?W z^kMhHdNAi<`ICpm7&O>y9v1to&>+4ac9)xjkHh-cnSk}LQv|MhwwuqB**mLky-@Z} zUZIcs%HGK<Y=M=%Q|5flri4dZ`F#_N{*?Z3(#d%e{ZjTrReSz_%vCQqk*lp2d{<=; zQRbGA!XI+X>_$q_Qc91tkhp;I%;Z9%SCFiK{3qy#IWSwN%A3>=$^0(B%WbJ_Qa@zW zp-iqzj5YKoDT67e44Qt3LKvT_5PmRebBWyCw=0d@lyUzseb9X`F*dk86N?t8^kGdU z%9%<epcQm8?2PXD(UPz>Lt*Tn4_tAdn;=zo^_;H$SJg6g-h-J`g*D8tH1E;7*V@iW zeQc4!fjDLOI$Epfqo(85OVNvS6Fr^Bq1rHm<oAoV^5HMpS7-0OlDkz8)yFfNE~5GK zA5KiQsz#>fDEa`WGPvpaQMe%gR#VkS`Jb62!T-$sPAl426z18{1g1J@Y<{sBohuIn zje5r_zk{(_otfjBNDzrZS;3z*2(6QY95kM3tT+yu2u}*OL7Osr$WX<%j4LrR-#n6e zMN`a{S*xE`3$#AXE-+{tb{<K-_VBU+*?W|pQnT#NhfbKQ^Iew(&xs=O@F+#%u|nJg z?TzK)mC!!bDLtzn63({)br5zNkEc`;FT)$aO5%Nzmw<f)mhoTv3MKK1c@<bmJZzIM zz^dy_@ItU_VQmm_67OnWi&9CvfH#AE3^r7@YA5lotqL1qCGkpvhH6+zys*)P>PFax z8oOWwwv4#>Tp)=THZu2jBW^>TT_A~9L98cACGo=fW(SnSV~CJDoFraj<?KzcyJ536 zZ!Ac>t<9VCnUZ+N1uGJ;l6YGi=BuJ4@m4*vQePp77gpdN>{fU-H(&ZwSV_FmQ<kXC zCScD=SpBNg1~s2aQYwiz=cTk_kV@i(HS6{2l6e1?dEt0iNxTf{J7Fd8KKXR!0IXJc zsP(O|@@gvnhn_vKQP|*@IHwQV3eQCNX4Se@c>JDJt?*p^&~q}WRqNU}2fA4e?C96g z*#^!3EVea%K5QMOzup?xLRK7hhD^qT=6_avurYeL{~20w<jME(fn3qd#o^tN1(W_~ zHwC%;aMAz4ePYm@(6~%;mLvJ0G4a$Fx53_16RIZLVWR=kV$hZ-N0hj1(EQLCuhjru zT!5;jfwNm|)P{yMEL~m;Wb#Av3uJw;yiX&g{jlcB!Z;4=4ZK6JF`30dwJyk*f%g$u z8F;sXYS@=J`$?$&{6fvy>++3p#*U&NU(Dvw1SkF2@pekHUsy$fjWTz^<j<sRnkAeA zS06c~IC<mkb8ZSr-?XihvJk`D_DPpt0C5)%@A%1il9OeGm@C-l?#K8*QN={?Y6cp8 z;drt_CxC_1(JM1#=jFI+_15BlfL0?wbiM`wBFRwe*ZxVOYis}U6WrQ=BKWRJjHc*8 zn_f4EY*^y@)a^B?h0qpt4rr^|71|ay($$biwQgwYU>GXrxRc3H8MKR<CuIX7$t{N! zjC0p%8SKYb*+_IKlZ_jJR6k=e=4Xn(w%g6m_P817UKgJv@8@T3{<nnb<-Qdd@oj## zpNRr<-f;z8)7(poQZC$@Mw=xBV56ai7Mypinb@J{Yd$6cWcqLw%+dNV6UIV({X#r5 z_s!Ap?(qzt9J73dm_#CEspD9;QJYk+-b{c{+Ja-1*P`{RF6(}nKCvGfUwM8}FEnw6 z)+HDn%<F;C!J9HtQjjQb@qSsY;QxM(*$@A#47B~n$7f`N?XdjJw1vk)7mxWN<=tRG z=hK-V8y0#mCV(2peTD@$I-HOUE~ZatbO?T!m9L*hhgi5w{qtd!K8UY}8y)5*B9c=Y z9p;{I6Sg(54>V`xQ2Z!tS+G*h9&2HPyP74A*TG(SoQV^S4urnwrSvg4)^jUiH^2tB znk%YC2dY{^WEj>*L{sBX-L}<s1l~MAo`%utw){IZQ(~xUe9M{@H?eai)_ISdQOPE) zz@_GLl*+%aPHN!X<G^xe<hUU7N!`dfkrk97sMG%j#%k&5E-FVc*Qw=7{1(tszXi0c zumx1jS>Cg(BMPm!uk+4jE;>gvde5C{iel-d%ib@wrQBfEgke5KaWgib3TVnFW@<s~ zsx!5QbKUUo6C|~#Zw!7!dB=jzHTqp=5h^XT%fD7PGHw;e>5*AOpMmyLu1?=ac+wH7 zv7h7gEumIs)W8Ewb70lL2!m5#)xg(aiHFtj?~@{^f%#LjtAX(ryB<~z%zi7$*R`-H zX=2sDB%&0n2Ci`P12r(%m9$j@>kn29%qNId1N-nCYGD2pVPFKB=YQBO5JZpG=(fRm zH`DE~RHh)Z0~UuOu{&X@&{5c3ux;D|b~h~8ioouHp++>$?1imQb!vf9PfGC?uw$_I zmQ9`T=;QZOx}}5#E;szgv?<pO|9%uM0w`BMbecw14gbNZwpB&LKW^Nb_?5uw4_3p! zcN5p}@3T5-_~*rRUk(3Mq)Zo4vCeTS20MC^4W}CZ{jgUB>%$Lf`1dYS8ve0o>Wc+o z-vAo^?Hv$E(VlK0wPx`$3;$A^UYuUaaozG|_mF|jWnQaxJ5rjSlv53bQH#@{hyvQ4 zt4Y}PvE1CV*Ax-%^^J2T)2_|;Y1e*P%Lu8oYpOjBoY!>bf9%R!9N4>xg8B~@wvgrO z@39TRnN9cSzv8YMPJP+jxb&nz8_e?S{D~c9g~V*R0r{2d6$UmbG;w~wU1F)#1f6`h z3Xbh-aWkhfTjEEKMg{xaZ?WFeLfutN*<UPUM(jDVu0Sg{k<<}dh5w9>s}F`HZ-mwa z3oRc<t#`Vs!|6_AetZB>K^5HccxY2YU`~0>#H7^bNUf7e6t(yPS-~wc9Jg(npszC+ zq)#_vUWcDPbuxXD2<p=G3EFLrcE}3zvO`u_2S!%N-(?Aq>F54O=7*?v!qqw0%^L3h z&YPSW>a;(SJUz_8ZZY6U<zIQ1&A5)1trD{~-gjuRvYclj5tEOa4@J+Tx#ZduG7wED zxz2*lB-dAj2@JH4m1|;^+>l+!2$p>O_HiW!9yWj5<VL&}e~cmhKzK1m_AM6tGr5i0 zOJeN}E)IT;wHHU;VXVD84pZ(f!j5v6-H}x~+Cv{}%O&@oKwN*!yyKE*$+4)0Vv@*) zdhC9bn{reP`V`|&a)PlZdBDaUr6QDKLBgflTtmYec1sp!nTG}xzL%Z=3Uf2~n37z* zTjH&EOT6_ZxrU0OTzx6;7Ub&7%t4~Q9Mf5_Bv)UNh;6MuyTszf&hjh2Ha?-RtmYS{ zubc<t^p#`h3)7k}P0zi`WXFqgxgZq#<#V=_Q#k=fIj$N2qfq6CErHgsd=!P&BCqy9 z>+rbJEHv)@KNH+0!*LU%>0D^D&-0h^OF=CsrER}%s~^VNdT~SGx^^VDX7+-ppb10` znq59+aW|hO9W#yTN$=B3#q5IiQU9`%_48c2r5n!f-(^OnAxiDWZaA}hyWvc?7qV4f zHWn$HqyEgyI{)%1MyAr?wIx2>(z|M;_A9G`q}Tl0^A}LyEK8Fy|4*anSZ1YHFP}OG zQ2YPCU*8`X6MU_`or4KAa#;SS!~NSii~Z5mizsS_)CwDIp_Qy;j6kb!OBF7v@l%za zT0`^dxb_-n@2MLo4VH5pj|Tss_DDSE+P^9IN8A0@jC-p5fv1Wj;ii=?G6UMi`)XaF zoh85swBz7O>?5PS=}J1^#d+Pg`{ynXak}RccB<0eJr}V}mG<7M_IK^gmHS`^`3We{ z5U=)r3)`?@ABN>pUHb^c?~hV*GYD!@z6N%j@efw&OHuH1nON7tZJLq(HtafBHjQeu zUl05Axam!g!2)3o{2O3nPStrF*2IHTU%WfK)R%HM=#Ic@uF20d2ARNh>Pt~rA`NLf zrQ9nDyF)D6F07iDfnS=l)E6ggoc?0U?hh#R?#?EU3(+6W7_NTUr+NJ2ODDZKm-&^> z<rEo!AIx{a9^t(C_j-^7b`$3^M;b!C2rI~&2`)y8nL;2OzLtwL=u#6Ra?GF>Wg$e+ ziZwgKS|zIfKXR;)&%@AaZmq6Ph|Li#ZPnHt7gj+b_2bYuPCutZ6PZopx^L4PR{d0> zqj|Oq36}D!#4XE5AJF+$3^x*4ZFsT|K-=+T*QnaTu+RwY49Y`k-d%+5(*3&wZU{~H zeAh%$FVa_{t}kq`g`s|4uM4Lq+C~uUEX_*05(F;_D%7NcV7B5S0Z0(s9GU$CSV3^p zzaA%Bk0AKPwu@%K3WBq~Sa%WZT38l6^fN(_obE!oAjp(J`nn)E6uClH9YJvOP@8@x z2+p8)!w$nnuv5Vbf<FG(2rRwsWJ(1=AAf8ctdBn?2nu6dAP7cOoeqL$hDr4kLGVgd znnU2#56x<V-9u@RBpckIY0xuCwhWu6ls|pN7!)Zjv(G+QTNHO1v|^7_I!>u~S{9xv z-Atm0&Kb*?)3P*Z^&T|McyTuT5*OLxJr-9F=|?Z|4$5Zm{}@O7a*C=^z^iK1<mIvB zlOG+wBB2&$d?dtz2di0sD;JF0I%gFo7=fia_?qRvtvP@zEyuMq=M&JngJIj1(0GwB z0a(4SRFn6WYWBWTDR0GX@xD^6X9X?#U7K1D+V1!9b@+XJo!&R9%Nh)@;(Vw3r*TDp zGqg9HapjTo`BRz#K}}%oVH+5%z^Xskhard;p;=&MhjBBkz>0IG*fnDD9)J~CExv{W zs}dPes;X6#jjax>P8Z6~f6rY->u9yYuJWMqZ42}NTIB^$Z~n)yhc}f;m_mCE((*^y z<E<sI$JeSwDv%Jqg{rNE*r@eA$|p18EZA?EPOH=R+sa{03~v$6PqxrY;REFy$LB0B zy%(BzZ~sFlLYtT#OKdc^#mc22rT9Gku7wC=CQi`C^t?8oF{j;U%;~^Ps*$skP-VIf z@3fMqpt54>_vz<f3`U`3#4$TxAAL4L_4RW)?8?f3sus$Y{Lvg(wNTgh%G43nLho{e zg<6QNQ%k8@2vxKORxM=8q-!Bct0`Se>F60YV5x=tfVCdBcGTq9W3bevX3HC3xtCap zleF9BI}E#}!qx;OPW+nS2rPfPb_>)?!fmj4c?f6QVSky)mBH?S4bwl=XYPche@l+- zf@K$+4Ar|;`cI~_?SaL_*-hzQ*zw?7dPE+!9uouXm@X*Iya>Aw_Q0$!YLdMlw$$yz z7>6xeXlt$#C$Zui@8SZ9lNoN?yTl29l1-YBZz;1aB$|*%<pDBi6Y^4*X-5-stl}Dh zH6iagBlrhcO~^;j4)twOSnoWn33)BmPN^p3TI+_@guHrmNIgpv@>4Liz-mJ7ZEc#6 zA73BH=%NWZxX^v$utEAI)mZ{IGcq1{d;F8_ygbEC6wiykyxENK%^aBH*`VzQKdEP? zR-#)dRn@_^!m5YEw!s?u2F(s{qGHhO@cxZDxxh<{E?6%u48iVZX-d7c=!KmZHGK8K zdVKZ6`l?VDu5o6dA=v877HKvQ!+Mdf;CM>J(dZKl#is_v3;#~9Ep_C{O6l5HorWd; z7p_dJxPL{d-wvMSmVP+MQfij@cFOV(add<t<K)W}|5%imf{U#8p_Kiu1SCqQC`Dyy zftJNeEqqZqFQ86d@x->U0m@Q+^T(hjb)c1gCST=e^3{GOU*l);wSFdF$4p*AB))*$ zAO8<~e;*%Jb?pJ;Gsyr044eT21c{PL)bOH>Bx)c*Cy<2jJ|Qqc<*iC_Oz9PMMnDrt zoJ2D@jMA&#>Q!&Cr7c?TExtejttNmZh(bWGpwJqXt0$dUqooiuWuEVM?|o(_FSNbC z-}Uo({&)h(*=L`9_RHF9t-bbIYp;WAzWTgH(Fi?(?0>de7Tg;!9k^eR;O|fIdXbn^ zE)SehEDunE1#n#f&sc7!ylNYT9X>cVm=E_me-WO@p_#?Osam`-c=?qCPZ#%fsqcjU zaJTOttG%QE4a8Di+9%XrlBS8BXpF!ir%Ta(*UZ7C-X!f5X`Oohzu`U|Clq*{KtDlT zGt}CarPj7=wYKFF$MD>x{C;WjCZ{d}i6!AmbGNW7xP@I|K0{l=!G7jMq4<?v*Vw$_ z^W*}5)?E=dOmqHSR5@tquh=Vh{~ozdjt`SRThxO_fdP6k>O(SF`F^J8h3TA}R1XG( zYg#G>gloF`j`#%i9q|k_6F`2J5QeY<35^|O1Q9R~<CN+aU;%V3`DukBP9B_?ucV#i z)yw00AJa$uAN5}d=Bb_u-(CN|g=bJ4lKmgUKSRPl<GbsB&Ue~>EV;y=tnaS>_mBB5 z;ScG7{m=gH`v2->-(~-EW&d-(yZ(Rsz3;OBF4=$Ach~=%@3jB<vj6$tUH|V-?FIh5 z>PywxJz;F8F;4p1DsvoF&s>92mCHHfcO1ZdI@}St)=e0${|oh98Bk*IK1+oV%~l~q zb5j|p2fQ9(KB&6S$8MQxWszFzW;@{Hj(fL?8?ivejacMM5$EX_i@;1+@W)c3!h)~t z!d?}xW0kTCuU2+pAGS|~?OLTbEr(Ef9O73c*CM&y<8DK#PHT~bwxgW#8Imx#a_6^+ zNg3edF(%OjRi{rNZASdL4*JsAVfz;IuzlarJ!}EDinaKQOQU*IGc?PG$O=S{xr+4x z@pmb6Gyd*mG=?@Q_V5QuZUcnrRc-@>^;K>IqybhIMnP@|gc(-a=S)ki+!3VS<GT}O zxFfh**kfgR4+rQ#X6of|$G|xZmveu0+F)exV*?tl{6W@5Ou~;{mM#UP?dG{YWyqyd zIWY!;q>x&Ycj67)rvP)Ba81>37MPQEH7vZiPlsJXVA7A_?tuG@kW(0OvV2zt|A6~! zJg539cdbp-<HC%3aG#&*D_)3eQ8C0PTxX-10Iu$RKq*`oC{6q#tFJhW`^6=YQE^>f z>=pH_pwSigxD)rQ#P=Z~Ix5VBMMYrdT7{YAIOQ@Bz^FuVY&NJ)ASUq#Nn(=1FJh7i zGOREO#z_<qn3No*11k|}A$pDE(@63M$<4R~(03%aASsTHNX>#!9ZNMBw8z{`Y(oKY zwp;F7>wROnXC$COzf8V{q;eXlM-nqZcZPjPLaWq@WD}D7LGo=}R4A`zktcHBLsHpj zk0YsUv?r0QsrMhlYb`7wZM3JDlr~y}Nlv^(SnhZj^f?uVR7k58NwA#q#5W@L77hu` zowk#9%*Mj&7$#g0%Dz#wRXRd*R|eqrS-6}Q(O}`trj3+4pl4a6YuLUS<%TYEcPd&G z7E{99xEl|Y##ek+g1!)FD)dM_p1O?^Jm${n5kkZ$z+Hf$v$`BsQ1&|d$8c-fLq8+^ zC4tK1JSiXv;&UpT-Fan*R$kL*c8aajgbw}gcHCzKvqXN@-KT}RH5+;-(o-%@1k*C$ z0s?-FYyNo|0J}&S+JWa#-%droJ2(WPB7o;8*MjRJ*iK0&i&eShs@#g8Q$*14a%%8= z6|ju^nbrE82=f5_OucW0;F$XZZ+76mJa{MiE%DrzhN>l=pT`Co$y!umqX|TEOt(kq z)yOgVgIvNKXv`Xj=W6#)JXd?|%}5TNA$I@7bN?U@5q2w*%GB`!l0YIVfr;mes$N0z z&eXu0$R(cRD;3lz6VD&p8%{v79?5G?=-lrU&(maoIjc5|2)V>_*fFW9QFu-R2=QF` zm=n+8V}3DmiRX<4?JV1ZB!0FcNj$guucSJIz_k0vxRGo_lD9~<<H8Ojc^av3vVcwp zbMb@RPF%2}vVaAc#G*)&8>2B6up^1a*f80#?*pN#aUz)-s3%C0kgPr-xPVwIs8p+# z4im5|Aeo8+*f4Uk(wGDqBAJdPriEN!0+NagP(Q;T<YpnMbR^kGf}B|y^)sq67n8Cw z5&<hS^)qf+MG>-Daa2FUs&{5MM>zlTOH$mdn@GN&jKESzvJdH%c#a3meH*z-t?}>7 zl~L|?AXlh0{(wAVt9eIg8~={G(97(gD8XSH4<Zj+;@+Z4{0NT%u_&B!KUUSoX%hPJ zTqJro=GftjNG=6I2w)W?ZbOh~bR1cX^GpRq8sw%WxTbgN1*dVPU6DmI?o1U5iL5l6 zpwjH~_&^Nub3Z;0#Tuv_a+4d^{9=B`TF6CW6`Kurp90*wJ25U?7g%Imtwl;cS_~^9 zpD*u_&sPY09#%8p^3}*+h45$Na9u6DZ$RZ39_v{vcsi)u79K@~StYX7@rG(7d57Fu zT#rjU-iTx)ZIyC0Qw1KwRah(~mBW5W6XVm!J<a~e)r|OrB&pm+o+har1L%(=soZzD zPFE*Vd1_$KX(V4k5<Wl^ktCJt_*6KOuOT^`pqEs>0J?Z2N#$67xL`IR$w1IZlFF6F zR#7=malD6IM9gK+Naegk@+7Y9a+obhD&r@qe9viN{3N3J4+&i#sa)y$NaaccdKyWg z)sSKo3<IRbPUK2mAD5w7*BgIMGO>Hs3WeGykVV9ub&t`EB(S#22LM7k>?%?Z_@XMQ zHzLRQ1?~dTFw#*63lpCSR)NpyNJxK(3(NOA>mj%TDN-o1DSU><j##y3p4M;1qx23b zHBG<-`f!gk@528f3yab>xQ{#YK9%_H8Un*OuKAyw7pqf|TAgN}*VDN=#lA~R-xRD` z!E~`YEe84%KbMoU;JQNX3%sW#-mg-4zgq1Jd}?2?R_zPQ#lAq|vvL6=K8xLf#AoF@ zy%D*TcQ8$xkPzDhxoQC?xKnrnxxfi7V8my&Q`n58+9?p9)lOk6lX9m(z?(Y-BDCBo zVD{&({H5{dp}oxTtos0Rw{aBDq)UbV0Nzvl@HOPdb_b^ZtNVF1s{deaq1YhYAjH-! z$qdnj0H&PE6f;DZX@6eQ84V!L=M#$LfsTxC1LykVKI@)2`W#%dVTuUgn)~^Ad>jf> z>&Tf-!6Cn53bsjLRS;Mf;0p7HDDOV4mvSq(Ac#;=xGqY1Ks;ZZW=D(@Os&-i|94C+ zJS>Lb>Q%boRnQHO$NlQ5K@q^%SL(nr4_0+L=y(9va$(n&Q=1;1$(iHSs_?9}NMeA@ z<<w$~WC)yE9Cjf?AgfXgfm4egb7~R5nBv4{WQnFEt3qpLK#ermj8TA7oBC`$Wm?WG zITVs)RldREL-S-+`;r9TBdaR2mQX~fN3t2qB$E4(R7U3}Bn6I3R%Jt^UleFYo{|gR zLsBS+C94uTV#%t6n%ERbKqXQjp(7QNARmhzmJKA^kQ91!DUb+Nx)eyPuxy|}2MVw} zl4MmxcO)&~+)%3%IuuAStpq9slG*au90d|^1m;p8QJ|(kLQr!DNr{Ar&ln&@^7xSu zw#f$dhuG>V4cNZAD#_Ux_z&FI?<=L;-x%16n|-(uC3mpoZj@9K!6Do$wz&nlV!fwF ziSci^3-s!-L4Meli)}(<!9EcJq@W4wH$2|n##t;}nir%cy$)CTeT{J*acAWBl26{( z+3*>h;u3=IjztlEQu!}u5eKcn7!}N&D9&%;!{Rr?QM;g>C%aJQ6a-7u$TQz)M#Q#| zPIBVNw}=kK&&<OUKN~bF-SFeXLn(jjKpXYjFW%B<ODmyeE}!3<$Moi>#eHx7W*m95 zG0zD(a44?$o-_|(Cm;!@GC0?P<{`A%qsP>gPgxo`9L@_&CCg7oze&Us<dFdgGAnVH zktRMPpTTd<<1_N&ldm){#LZ@C=4FCyjT%hQ+s%EFx&Dv_#rks@5;1v-Qy`fWttdM; zJvB_oQ_7HnEt7f1BNf(c?%uJ)3%yY~^hO5ziR!pMWB^wKxW<Q8u;Ct|6?_@E#y(B6 zcFIoN7peDV(}x20ZiM`5#&tp9E%CkdMMDA&e19=S+hkmq1Ax>@@Jt80=*2qTit8#> z&uXz#?oFP;ejF4~iE=gd>-Hi^CM9Z>>yM~dGAU8FWKyDfbNz{)!$~n-b5Ocv6^+xf z8B$Eh3X2=3O<`a$;~6}biv|P=DM8mE>jJXxop{uZOvHSNcrd`XrNB24B(zt2yQ|a0 zx4>sY6O**wMsH|=Z(svN!4!dlPT(YNQWX+1^n%^Qx1}IhJi|Q7<BqAg$xuj`C6JIf zhs^9WJBS7k8QCKn%7dvOo2ew5+L@CZrw*?d!03XJ;{-+q2gYHfiI0RJUfnesSK{S` zP!bJ8x)*`>@xcvYqePUC;9JN?n0qno^!qSu++zqnqDY29nJf&G_t^?%auv$B&?L*} z>o<!~mPMZ?im&9&Ms@)C?r*KWF}N-W$nZXk3K<IwsHozpEbmWl4OA4Ynu;pmKJHg3 z+vn<fo2bvH>RStpcH?<DOrl&7Dv>Wv&q!1hu|Om$f?LCO*f{Otts8hgL~v>|IB14| z<&*&mzZ$3I5c`lBnzfJ{wJ~@SfRoa++lYu!k0TSGmXqazdx7536&tA?SGxkK1H`49 z*p$~9+=FLH0B=AZo=v{bZrP2j6!csi02bK9gZ;>a<~jdEb$B*Ca8OY11Vr4piEK__ zQ>QdTX3-3Zg3QZSrpR2>5n#a#WV)0+GM|z=3No)qoimzEFtMNunQj6KScoIVd9Gld z+qA7Vc8T&AXviU82K0|ZzbHSS?IA!w7hvaP%s5Sq4Lg@2KnK^9s&$>#D5FL%X-EYp z%0nDoE0Wx|bM*LThCJ#lMhXIBCB!^4;8M15u>>QeD`j+~!r=@kXh%r}l9{MbhFx-r zuuG)5B3mo^Q^atFxX#8hl^eQia$}yxC@GD3$uANG8peVL8Ds46Y^KW*V>=!JHH7X= z(qEu$g;)$mpvf5J(ceHW1^|bQ+k-yvgtZS>p0GCKU4j4u$VvkNa<h?M4cftV0zQUX zk81|j3c@1`n-jt<TLt~jRYAX9Xf}ZSd^O=k(4i3Mvz0N!Z3*|GtJ4CMW4()1ETYAr zd~WKOV`<IDb%i=V;N|%NbyV{Ejnk5=J4>C$(0*dx6=!aomQQ+#(uKJ}Gx^a*v?M_C zJtY2-zxvLM9HDpkKUyEJ!cb!Cqi^yxxc{d=-A2iRAQ5Z?AR%es-mB1V6;;T%U#*xG zj#h~Edo4guAAxf0*C<O@V%Ym7e<EuZwMwR>_!9xdy7$ZVu@&zy1_*x?<Wsg7|Ivr5 zV-@nmvUrmbLWWuof1uXG`;c{k^>7&;^|l^Dzx%(OpUMB<{PZ?I=M%fl&lkw(Ha{OC z>jLxh1|Ib`KSEx?5m^<#j-+WLN5z%#>lWaO_;pqHnJbLaoh4abN8}_Kzs_QLgKU*6 zj230P`R9Z8Av3KLI1Vn!RVST62XURiPsy^Nl#g-t5)2aZaUSGjL|!PK*qAqj+_5ol zI3r6m=8fW=DHWU4AKSn0L&JjpzmG(WB~nKtS)z!f1#Xxc6f!<Py+OG&73)R{u4zh+ zO}B*dI@v${rcMplj2+)-J8;eVbI3uKmK}0DcLvv7d?uRXajAGQ`4?f=jr&;q^Qpm$ zaPI~urLeJJVJSARV1-z*DR(bMH^~~82lff!XvILf^MUS#HXp)BpBce{xL@rXFX%j~ zm&p#<*pKp%Z7VnAm8hoPCNycJd!<RMMG{VqlvYT1N?PIO9hx-mNgqQJ%z(!TxOo@M zMp@0|v4_pb6)Z<?-UZi@dPc!`)aG6C9&X;7bbwWE-Z8P1*tvPfywj}q8k2;#+`OX; z7qFTMQ&wo!Y-P%tHf(46SrwHi(Mr^3rDB^JM8f#eVq(9DXQUX^2gp^iiYR<-5}%7f zNdE@pcf<Y|{=9(t1pcHW@sIR-fPV_`M&J*7g!}0CH-J8r%qHB_8KPX0@mv7k@8(h} zzbl@N^JM37pQ{65aCIriynGm+sOKxXNG`pzi_0Rk!n*O<K-SNtG=S?OpbPP0u{dZ8 z{DG3E5AIh0UAW47M{~af{DHQ20<Nn=w&z$c;$^{r3FQxLh`g4A6gUZ$s8<;+h(G*6 zF7Zd1E{Q+<K`!w}nJ$Sx%5+Km0Uo@E0#CDmG+l0HQkpKeFey!!TahH%VG$z0xd{Cy zuKbbbrKZI`JUS#c_x&P&!`w4&u2`0Q#+mbfGufW`Er(B$)!T8YgUFAYbyHrT2}jI# zA!_Y8-|_L$(m9_gv!%5$6(7jhiTgD68P{k$es$=C{u+~zpEcF)AB$@?-1Q0XTm;YM z)diPjdU5Bg_ls7_?|000hwdPrxb>SITX9`r^<T#Fi}tKU3=hn=)ptV}*X8A0<T2mr zQf}}fv<2^1rBWk?`4&`-`Bw77TEzYfAirG2_ozg>->~a)^Wv)LL$_(pcW^{F5lPNB zVs`UjJ?GmU305G<`L+b#G2Jx+=Y=kh^X&@Rs!(7vl7V`lzT_7eCDmD+Z)m>AaX8;; z+(<}epKxiE{6d`wCn4d7OpW|Ph?bIHkVhkTA98IRwX{p5gU=xOHgW|Fq_R(dLE0r0 ze>;u>iocyi(lRwX1h2IqRT#XUojiqPg-v|y-aztv;7!^Z+K@yjm3xtFNAd-|{81!N zBiW%}&k=X9EPj#f#Kl!Hq!39e`-0bpX+x#5Z{^CBS0hPfpEkOhWvT4r50X^&iSX#v z!unW&sX{JweUF~juSYTk$ttvgWGY{CmA{50Q5Ua;K}6ie>;}`ElZ2C^dH7l{RA9W| zsM8E?A<WI^55?xQ{#%o3bRK9{?DBc!h62M-lh6?!z!T%&kQa#h(8N~T7{8=hQ_v5$ zJ-yQpunr%%?@B!|F<ppy7Nb1$WPwj{%{o768aHCu{&B%9Tyuq42-Jg}IjIiRv$6)) zqNBc>L%7bq1AA0l-6+2Y*9EVmSGX>+M5(8+75B@lWInY}>9}X0eL+1CO2{==gNT;m zion0(TYYO$ob{B0h^TL_#4Y0Fe1l{)lK62UN$LR|5tm3kpd%tNsRwjKOE#$obi{dl z0?FVzuQN&N!4GL_Gp>rJwjil!iqxZMiqr%DAvUoMNzhb2lCL1CK5VfQNjTCFb4fjj zB5WX8k0gJP+=mMmUJ_^%lBj_LlGGz;su{V8rrtwR(bRDy6-|+P6iu}tsc7mHlAx)P zsEpL3u$<JxALNpH6s3`R6s2__sVI%qqbQBkvqe%GsmCrUjntzkjntzkjntzkjjD1* zX`~+22T~7z&<9eFqBK&EqBK&^qc%ZlwB0L86SjLvX+&~GY1v5b*1zQ{75f|vsI3sx zHc?&*L_`n<NMukDuOPWO9bA<P@sT=CTQH#Guc_^za^osI4+Snq<%0N*;IT0hdA$=K z2+>@>h&+P+E=Qs#{l)nkN;yS*Y7Us3szW`5Yua8ZholGYw<q9!g8wqT1lJ6wKCTMa zEET0a+f^~H0Qb4UaXR;<t|Xp>2L-C<MXqujOauiUw1!DhZn6G@0>$DF3KT0p)-Sa# zEm!LjLhQapiuLNZ2>Evv;>M8DR&#!F^}WxaF|?~Qa0@6<=#wP{!rOl<CY2PZPO6Xs z86_FHq(CAflACZL&Lc?*RPjAXfkGIP6bL3os@jZP$S5KN3`tOIlz)YUJbtE50z_>u zp;`3ZcN;%GW3p87^&d{@&B%hbMrkU{`6A+q`N~6`z3oo|ZK?2wSTvNIie$i_gHFj$ zv#A(OsjK8EwKSZkF2JMoHoc-9*9n-$0IoO~qWmH3h+hTHsiMW@s*uPoLIU~uw&4C6 zT#M?#F>sv?a$$Y${rH3b3moVlu8S<ea{*iz!=GX{uFIiCqI|JJ>@YBINeqJpxkKsq zR;OH3AHcmYVikTHYoS1U9QWn*(n+Wi)rM*lIW3$wOJzd~lAO1Mv&ZSez<Fy42xB1U zt;_=Rwc?yocI3RNi6!!5I8GGUj1-Pl<s!*xgD}OVcPn$@B8B7&NGhWpNpJ)9Rmdgh z9PGP>+z@cE%!3vM$=8td-Ea*LZPz1Nl`YU{ACeZtRYq<TQhWOEVGVC1sc^CxNuYfe za>+S?`PoPwXHxd;B$ALpDQ~wRspRcbNb(1{9G6FadALpFiQIN1)t86KIc@s9RFv&N z67u#QBs*C^HbKs*8Ybsd-67{x4HE%X!{nU&QF@=NjbHx-F`K4M-U+4T&iZEY0lknO zL<!<^9Ug{WX8mI0#St3!B2TIvbTKw*DOrx(3uqn+@F>vJyF&1@sy1Q-&(D01SDv2= zZAbj5NMjBE3KJKCc2t5cU@NQ^D(`~Y1yE2l7Hpi^38&P8O(_YG-wGb<gigD$;0d4? zf?z*=zIG`>TW^M=1xjx5oQ4*^VC(G0!qbff#0r$$7J&z4W5FvP8=vjWYAnQ=eqsTh z)$4b|9j0L4;lSsKjRj32?p49tkMBhw!-8f8F@}ZH{t===6&!~>|MSLzlb!l#1PN&o z$H5CuVP7^4rp@5!AYNz-4i4;xS<^<Lwcxbyq$ud1fw8fmlWIA6rV61xF7E0g3I0*l z*5a^Oo^`qAJ2T%57IeT(()$E*LN$y35{U#KpN+qms9>lF38U_*eir?4FOr${`u0`0 zLZ%rwEbFH;oV)B8*uZPEk<2^+pUq&+0z3}ZEXQBHW(EEZ?300q!O$X+&zzvBDkv(d ziD=coK^1z4O$I}5{MCMEy*#pk$4uWO*v2>MqEZC?2v$GiLxE|sGqNj*RgW#5;T-sr zE&Ti9R{WKH&}-OYV$~BOhiSd)X{7td_pNF(a&*yZpdmRZIvn3U*`b_|v<Gen+UQ~s z1N$UDGy^L34E-67b>OfR-tN@~UYm-9tRqyDibw9CD51t4H|of+<Mr1#_3dfwm8di^ zv>NHegQ3F6n5OYxC2kkD+u7|ho7a+oQ<#78AOz9&eB?xiJ+TL`H`N@#M}~)OMpbU_ z)9G$!>z_eUE46=V$gE$ft!}pHUj;=C1oESRq`V76oZ16x3G-vJXMs=JLm|R7^vq-Y zyL}7(LN8aPrN6aOJKv-Yaa3u}>Y8e1i>y7`5OwRc1yBU{HkfQ|531r12I`$Td+vT! z7tKpJ<uu+ibfv}sl-5^j*qSS+@$S<h+ok$59BWWuUg94U1;`{Gy2~t)?Zm(mk8$=( zQhQQxJ251%*RH>hQ1!P<w22~2mPD9#^?I><TeofBglR6BA8FPf7q3I%A@D6RX*-bz zQ=gc!T_B2h9uyA)Ut0aYlq2Zgo%u%km(Ym*o|A!25x)NpfR=h9!|FL3kztm-*T6O2 z@6@ModLqZ%-hG&$@R(2y-*K0vvg}68A`0CaD>PxO+v(kjl96k-G{SZ~B=uV~;PhH5 z1*?n<+azBZ#TpHii!Xd?v?v^CicnCP(~<d(kr4#t{?C%VdJVxS@`7t;FAJ`A2Ujo1 ztY3PIF<6y|+mL}j6t8%80tQs#(XUN^zSOCISQ?zusoS>cJ8j4gY{<4~)r@haA2!Y( zIvasv=tuhM<eD@7;d+zd`10F`-j198#t`SX5v-qc^}bV3+EtP03gTOAoh6ag4t;vI zC$h$cIT?%*>K#?*L<vkrBskdL-(&nx4`b}M%mX{Qh}2+ET0w*O)`8azFh#DVzq#?V z{v5PDvt9{D%a)4b@!v$icwpGu&03bUjt2R}jg`qR&m)Kr+spHX@SC#h^X*Go|Jb8| zd_VK(lGZ)q8SWvLIdEk6e!ITLR&_qLw#4bX*UO8?Sbz5y>@eniMb-Hhdx_IOU!Uff z()3r9DT=JdmqH(`1tdxVn0ByPfUysThABk*?;Fd}f<CwxXkA|?prtp8!X^~tYsZ+^ zdb!#068!^DY33RI{?#C%p_vEjY+7~wx<u_ahw=jF29~$$`vWbm>Z3k<3dcV(aL5&M z_w(onjXq7JKpX1XiwAv|EzPXIWpCiKH+J_!cUj<6W3)gQ2m&6^eRajCQvI9YoYTRI z4kFbPM5^GD&cOY-z$=O<sO?v86R)&tlC;FFi-B9)+7xaLGPVyQZfVt9P@r=CNQ-ZV zUg*d?swYEym17%~c|aTOvP8%CmK@)iJud%<z*{c;;C#_{W4!D*M)fZ`dIWK}3%Z^z zCAv<_^+fK;SLoVUn1og>z0AXJYcGhkPsgyfwXeWh0YlQKIbXsUL3}D8`rtEZcO~h? zHc-$|vrBzILE%xriV@Eep(R=Mb^U@juk(+mcz#);Q9Jqz;7RX<<&a&hiC_}J0~C%J z3yE5q-X2egn!kUkaq=NCq-FYkl<iJ0I7QVPy+r8^YS!MLlU_a%59N4?-)_*?p&l>r zd5r%4tGDNYQys<nAhIeG%}RA!tzJvS3JIQNc-|6x>Jo`dcLJAI{7K=`t;QV#iA(;Q z^h?N8c8}xS-nfesRt6EZ%xZM3YX?sg^r%(SJI<rO3+C5gK^1*L6>=W#3e-n}ef?z~ zW9x$w4NSJAYk_sS7T-+*QA^Cpl<d&%<-8Hc@_=J^{bL-PB`XK@-W26~z<mTbhx_N6 z)j*fL%%i01!IG|Hc<)OOeDa2VSmAvpg3o0hMel3scd-jv!CQI*=(`6-b|Gi-OMZ!{ zv~qp2#kWMSaMVQBdg6x^T%UxY$Wh(x_@{=nwx%1|fY$@tmI-Dq(JtBvw2%3YvJ^S* zkYM%PTKyrxO7h{UvNqS^cZk>3h<H>9E`Y`0vBnJTPh`US@c_P%fN7EM?M~;sU()&P zeCMvmw$4>^5Aiz1=vWh-e_uLu$4>oSkFodsH}SKNk0^8Yv2;COEk+YK7||bLhl~#z z1@c`RTO>dKJi17>*~KE6jO_|)PJ*!W?;t94Pj%cI$2hhne9I@%X(v!F2#=InJrEBM zt@<Vih`Qeq%1?uka<9$E8!X|_A>puCmX~mt(i<Gw@9hqUV;<wxzg++hKMx2vpvA!9 z2pc`}C7QJxZw(U7%0_Q_mJP`^pJI2r!@j&rn+pK@gC1l0h1$G2)@D=Wh>_E{<`yiN z&Bk>vU?(|PKc*iy#v_??+&|4Y`hEx27=KDUgy&kjLb!4*usqG28@F-3Gk$J%)??lN z2PA{};r^-_CG`*Wb4Koru;3-&>we5J<TWnu1$O-~*qkT06k!Y<#_cU)F@<DxF}_3> zCmT^GWz2X$0(POZ=IGk79&n=T|8Dt_s=Qj)Vwh@?55z)beyFds%u24eyE1j0b5~!Y z?_>x~<bCy8%`9M$7>eO9!Z13>Js|#4t*H+a3|JpT(NXW$INiP(H8f7gz7qG2pLp~j zr&ph0*I!%#Gk;Vh>=)d{d+;rH)p}dgx&==E)%qd*UPnArfxk3f#s?lrWps`<@~Z?8 z@Y+bTU~FJl%7=QtrE#zI<8n4gJ}FBqODId+T^}7J*FP~xe_2_iY!IHc;901suaOgd z;>HtOnQeEwdV+)J>YeNG#97ui`UIXv>PZTo3@PgqeewksFtl^__^A42dnv5<@_ocE zYgs8wF1A|laf%Py1UuR7?*knS=cD$QglL6bUuLfhEPBmq3F-WsYxCiZig(-Can54+ zr&42s(rfPr56nC;X<oKRU*pmqZ^%3voX&4QJicfA5q%Cr6gf;VV`;ML)9t}|E`b8p zO^Z>j{wV*R{czOLs!v8Q2Vz)%52EV83|vgrn3^9`fZwt~%+FHDq(Jax63^rKRg$?@ z%S{G`DaJ^N@Eo)l49}dZ27JI59dHP()IB7I`bdwV9vNs3^^O;<yOUoobxy2r*R~C) zuJ>uc=}1{*zVTzos}zhLT00nDt33k>`+@GV6@m|NAPZsD|ItMdo{od>C)J$rkDGXO zoAq^8g^GsfT74Qyj2u9PnO1uiol*NONO3i1)(;BZ@6-=v*8k-<3}Oi}_Gg2?h=lvU zntv}o(7YJ>rAOE*0R6+v`bl7j8opwIZ#iL!3FW?wMO8n(a+6-14aXJd*$?S~p642M zH1S;)K<By=M4lb7i-UK$)ZCy*u%AA|2CcyFp}tIF2PPhf^?fk<J`jCh(w}`_d!znS zPNtaMxEcLEzTm14>?#E^V3YBFg_uoBfpQaO03W@Z$GM%xEkCweqN{Vy1el-VD9vNQ zQMg?&44izG7+jN*U~-f(`EeYj53*M%ULqI^_(?n7H~C4*Pvl}nDY>8i;<j!Kh4+Bi z|B9jfrTp(Ol=tOBy<c~J@_YF}GR5W7;)XDlOi>p+kK8adP4qqy;}<-zvRjvV|G(|B z>+f}W%!Rr<Kt2FHB!bPk&@VYF^ATxX&B}x5W!ZqTfo0a+8Gw4IsGpH#KJ~A{n|;a> zcDt{TPcDu=nU5!Aolexrcle1aQKLT_Px|4V<yXolpLLi|F2$3+W&L(9SMR(np9ltt z&8A!-<CvsABMSsHQqM~U?GCM6i>;qS@Bfk&r`=jpzoL>duCU}c-Sin`HBCTY$!ZpM zDlT)|>L{0K;3Sc!-UJ#6>HG_x3gfreay5CXS1=L5ff=1wpVJ9?o}R0($p=LT=jCP| ztvP@l4LNIbuWU76K-{`%IcnA)<zGpJzg-3Dc>Z^Piv$Z0AlrY@qyV3Ra1R?ctipOn zI8m?Y1e)}+=4IX|@K@*nqzq4<EB2J}RB6hKz3|@{Q20dyFc1Zq8Fxk@Bl)iY%OeUb zTxuj(iXkq@rRKu?_X|+P-{-&KL5lw-Ux@!c38EtZeVBDgeOE917lNWOx_><XP432j zlX~aBx!}J^<iELkUj9GgzxiqsyYb&-@LwGA=j;V;wD_jMInb%^5ZwQa?^=B>arhF6 z!@~s*I~5Kai~k&<RGO*ZO9}D6xfX<WvYzhTd=a?$BVZ?lL^ZH5JiU7f^7|i)5^GoL ziGp)!p@S4nAVei<HT6iA7~ifDcoPGpK0;t;97ZN@zreEahJ3fTWg-7|xh$CYmMiTI z`>>d0L!QR6P=`pOX-PcAH>~bp-QLOrRxZ|)_iEKMFtK&Vv2oD%>lMy{jav0^tOv!J zN3n%VF}}GEK;^b|U4N|<y6%f;#{v9tLmxVkky;ZePuoD<$))&uMX}*o1wz9~d7vIT zkj~<0d_tJs{&WSIfNLtQ=~WG`sT%E-*#IdGU>Q;x3p88sVwMzI@Yu=6AzLjnlVKOZ zK(x`7%&R*nMugGS?Um#4RbVW5BYdjz;{^XO^c#A6qX9a6WV%p+GyI0WpQEIwK<(l* zt@?m}lmtmaEgW4{HFj0aGy0MweQ%(}>c*xj%U$Xzvm!CZJ>O{mgv6Bs^!Xmdi)^j> z0d#05Diz-iffX_HZDZ6uQYjqh_?!O+XZ9xeeh`?_2Kfe#jR2!Xs^k0v8v8JluSSMt zL!F(|Cj<9>eDTVj(<hb5u_Z>!icau%&P2*iOi)}a+wV48IqzG7xtJ;DB418nnsNQQ z9#hB&`sw3+Jf)vDVN`iqT1{j_QaNd0u$<)r2XKKnK|>vYR(EmhCLl0oHD7FqF}533 ztG)3%$HW8BTR@}gQ@wB)FRty;3p;9d<P_S<hiqWdp40c<e!B>Ta6;yRK!p=QZ|%Os z$^!}5u{~(-YFU%5di1aAhBKD#rPAJUW>112l33jy%;Mn5dwiqnn(@?cfZmqw^>{0< z8wa)Um7faE34PpN&<pCW!zRD-9E^hX=Dy4v6QASbu+|5y+KzfGfrA4bR$u?%94OCT zL@nKmEB!z*bvDBOQr8!fU`}<tf7pu&>=K0Ifz0!_iO~pI4U)3JsZsm$(?%t@J;qO4 z1Y%X*VD-PzZP1dwMg5}cBvgHIv}&iUTHv5~G2%}GvJOPW0~282@jD}aN0}8(WTA;V z=qyvrfva{@{V+yA=~OoyW?HTKs6XvRtB~yn*EQqrPpk(@LheTck%(_Pw3{o#Q!2l) z`8<UGu(}WH_Ea8Bs5>Yp!G9^KtjkcxpbIa4Bt{v2vaUJ&(`~kJ!o>Oq`)*C}L8s#p zlm%y}=x!hSZ?3Ig2V`LHV-$qv-%5@r`>SZGCmm7IS!~y5IC7f(gCMN;7ocHH;3D|j z^?griFEwDF(4o(@L+6)s7<JV9`$r0)h2YyJRK$+Qidl?!jQfSK?F_EBFKa9myYVhF zDDla-95{}BK>|kP=7_d&M3q12DcY;~Py+<E_tHaj&f~~w@=vKb>Yt<+!p!9xSQIRD z0>9bI#zNYSv7o8`Y$N062IV6xSg%3Df{qLbA0>sbxHq=f_;PuV4k>uI*#&|?$I}pK zNni|w(O}*X(fp(JbI3cKpdV}3UL2m&;J+54jUx;jjPFtwiK2lGh?xpBc>WI(4PFiv z+w=zclFz0$g}3yKHe}k5cB0pjcCEn*C!Rou?VdqI8$pyQ!0ULT?B3tA4bTWg{1@p* z(95>~3HH&Ki{}1^y*twY^zA-^PdI`e{r(!B6QG~)Z@P3-&TnS@L)K`Qg23}=m++j1 zKCVZlR3(h2U%4&ve)zAUSymlO*o#`uUSD7RII>P{0{TbalpIOcuUm^AvWh3>y(@Ol znbG@h#rcL(eF__j9OJFOV;OY2D8Gs7FH25=!{1L(!;-yneas~DV|@koGZw3FP$RKM zu4g0{*%3U4J{Z6NvPb-OW8+!wEMf;c<a3anaVrP`m}TpRQ%^1Jf>W}+I>fxM#}W(G zT%L1ls&8<Ek$AQ_&|(iXB_%c>GsWCxu>Q8Rs53>UzAy>Ol;9j3G&lO7yCwW&It&JW zM`_Jb-vIqS95FqgcrH95ly^R~?mW2n8plo+3>Fwz?5++Kw88R?f6!2QtM6anoDa_> zkFk9kzH<T-L^_RLAEUTlVCZvB>BEByPwDVBS=bUdmsp+y{pviU^;|2LWmFjGi1@GU zs+n{A#8ku;K?WTVSZA|nHJeZ&3<^n+dmYA!CD_Cs=dyl+DkITKbBVEKGTKB3xFQeB zj7Uz1jn6yAfih)gE@**|Lcz&U!AUQqfl9Y`%T3UG_*;yfKl@B53!ObRbrnC3+qH=5 z?o-u)AI|B7YVw_1jN4TfF^==I5Ro$`=yMz}v^qVdZxFzMtzEy{J~#0%;lZJ4k<dL9 zqNxo@4;6GsfLhC}-nZ`)04*stR!jvzn+VVYT6I5Ep^t=YFf4MH&G=w(Y#U$OhRU(S zSu|{p)4OQqB4>&5{F4|BAmIcg2AYrnpVA9$XI%?W-0q(Ydye<y)wENe+z31MbXbb8 zGeY4WI@t16aR5Lq0AU6EiH@Tl_zclG3dYfsh-@G;TI9vx#jrf1Cb}KW?B}65?-_rb z$n9u57Kk1S(~DF?Kr<Lt?*Y?sN3LBCNiH&MHU7e`(7F_vU5pD7-hsB1p7?FR2dO81 z+kxNnBz8wa>mu>k-3D-t3l+4>$w<ItbjZm7b{}&^vD>#^FMxz&5VMWIxrFlTVXByC z3_Gia+D4on^Y?JNFLBy`y~Jm`G4PfcK3}Hl20p)cJ-H<f+T6asV<cizPtFjBcI~&z zEXnB9U*g{!;NK!o=9yAZP#**chj3W0FLV~c8kV>xh_Df*^+EsEp#O!Szgg11Hl$!1 ze(Qmd14C0KZbrJ{<{}V#ahYX)snK*JzyV<<oyzs2#LW@-w1-~gCa%7~`~FP*9H}x( zs9>vme&mSQcxyFVkT=Pn1VmnAGn_X^hpyGu@x3`)^@44Q4Z%4ra$6HDI3>3<!6m1I z{`Z3Zldz)&{l}$AjM}vqn}>tC&iE?yzLDU2NC&H!)5s55Tb^ZD5DKA@Yh_FjPox<g z(GRJWU9I$ug<`v8q(0IbQARp{yY4E&n|T35i}dAqCxBSW5+cKz-@FE>2uIlW-uZ8k zj6L&A>oaJ`yS%)_X>9JG*-Y}Fr-B9Ttvm2YpVNYAxLhwd#T9*ggS*(9ZJq1%rl3aS zzm`&UfiAAQGV@H>6R3F4;_n-%IBD^X08v-6h%Smi99U;VkxWui@};PjJ}j3jIEb$H znY7yGzsS2NM%JmHf5SeK;1s!~OZ&w4ij6H^LD%8oWCc%OIoD(bxt)9mdzlw*0fy%4 z(`~xTjh+vI8XA`Yp*dTN;r@YYl~bXv#p~9EO}<Fh&22YPwhMkjB8yz7dy*k`jo;%g zv(AqUYXeO6!eqb!GT73t#mP@0ynhv3*jcKthocRQQc6tI2LrAX@Z$K6V(4(;*A%Nr zpPPib#y3Il1tzWihZO7}l8#@WT%s?s>jxXoC02cl>9K|a7U*lVxlKF4T{h&rrOi7s zes50mdgm>WM{Q6~SX6t7ABGAYC2nK){htx4oJ|%<MhO&AIHY_p#JKgjjzEJmI5#<D zn}ptkY$I<87A6T1A|?W1d?oNV(LVsR?+}v6T$(zTAg1Z~hQJLL-^84b4HuPSMHsiP zA8^HCT~GH(u=7L4Hta7W*J11>a_oShc$Cwze$e=46nFy#&`&3hV&3aCTGw`|Ku!zV z$G2M`VtuWDP^x>JIi4h~W)Fr`b5yJ5H3sHpIB!J3?BRT|lY4?5C-|tgk>CGprFW3N zXMABY{5EOzUkk$_K^;N9HS~}PY7%EolQypbibMf-FuC!KIZf;PE0~98CY}ShOWnq- z`%G|;G=Y7zE3olB3AD7Z1Acvp&B4Ot#71-pkgmNL8xJ`ozjHU61V~_AB}nk~M`y#g z_S$5zH;Ge2{=Xg`IqUvU;qkQC&-exb9wZ8Tt(`zCbmkN$#elY^YawT^h33mb60*rX zAsfXviSIO8A2vcnVTj+ypbh;B6>!PxBEpkC1X+Aoifu->etiVjV@xLYnoiN4^m}<u z)g$%-Vm{O9fKg$u`%wQ%pYF_=9v#|Y<7rvNK;%~*T!mVuWAyg4L}(nG`mxLdMi>aA zcGZv^vH!aHVc{Pj^knnwjnnCVE>ugDv6i&eoX~1E64(4K`jV4D|LK}D8wNvBbmATe z=TMw?g!>`56W^&hQ{H#OU_2Ob_C(-)%h^Aou>QV&Q1^FaMtG)&KiUgNw8Zlbf70}Z zfqVR4(J2kPpkwfsG>XwP9j_eJk5zq4pJe0v7`gVsU$lllYx>@S`~9a>$92D<=f8{t zx_*MY!O-#`eRgCQobn}{{Xjov^g~Udxsa`b1$KO~{W?7>@G3-P94rFKL~B0+P@(2P z*y?X(jo1|}X>;KfyqeQc{+8~0xpPxo`DbN$tW$r&5(K6;(p-jOX7WpJ70Zz7Cs0Jp zmm?<6QF~Z$TK~!oF7-8>ebbCTZ8Lx-Tr-D*SrCv*rHItBR0;YXI3D;m2<Ai%Iy=x| zFTWJwGy$|=LU5)nQ0RniOo&x4nC~1iZiO`{avd5gvq#w+IjSrePz6y}#n9bU5a@@- zHycav5-@Nm$!E@K#_F^O-J${U+EQbdde2-0X>a8AX-L`a{ASiya!gnJ8v0*IRLNN2 z1}YW^nC#U*!Y;QiaT=6XME>y~bRo+Y*rIx(|MTclX;;zN!MdXKM}IUj{E0_FQUSzZ z(rWI+Y)1<1RqO2rR=o8?B6IEN1yMlF4ElAIqQ0S_QY#qgZK83l`WlqNll_(qFb=$@ zUZ{%DY0Lk8^-_|_e<!HdzQM$a*XDM4EoaJ>|D4~;Yk$SInfrph=4&NgUPEjD)mv+? ztJgM~uU*~kHO5%!*~y30YYWZS3cJ0=kVQRTbF0@bHD6oM<+Z^2)I@FL8KO>MN@ywc z;94~|N`V`#u)aI|msV}CZF&cuZZ$`dduF;bQLAo3Dm0fdDX|vnE{Bl3Fz46nYaI%- z(WULk8G#P{1z7J!(_kitjqyb5=(OmGbl5@8hP%_e29#)#Yjgh<JHWr56r!RcsJQaV zq709Ve$+if_RBC9t)pHY%BywbdRm-kEfo|kF$jP#G3cdAdIAmNc=y?24G4O710BDr z1Bb^M4KS8M+Y|<r@-Gb)7+|=Q4DPM$!Gg9xg@KS+rFHKD|HcTtq1Ygi@pfbDZ~j%l zLbCNcBwL@;23D5>{8K18Wzk|ZvO2IK70x71eO}V~iBP{Oa2_@uh_B*yQN`Dq6S~90 zMkzR(swDmmcl;YGyS&i{oY`zP!^%0{Nl3(+_QY4zFTSF6q9Tv+ufsm)@~9vF!;+Ke z$efc#GeF=mCJ*nPzZ3brbnnH}aWGk{YR&CY>&+OP$2ip^e`;*dQ;NO<{!i}?ba#9M z_lO4cd%0L0GJXl%<gWSsQi#L`$H$dkI%`akNWU4#0)W`GjXbXpB;M-Ms=s7%o-^dJ z2U-%VCi7HQ#ht+a%X8)>`7e@8<*;!K=Lb*(`PpI}zge^$9?wG9r+4UwMM>kgD2GC< zPL#V(mP-WRE=4D|wV{(k;e1Q_kM*xdb3AMm-(21Wnsaq)?gw3)%QKrZ0GwEJ-cu>i z<y2oa&*?D+Tifx(LERge#pB@3fKX!jm@|dWL>OqhA${}LVtDD52YumD-5<Uz9}cWM z=*J_`6MczMs+ZV9vz*2cWfzngR{F6e(zB)<d-Pb}rfhwgxVuN<E<P^>s_ZCVHbu<K zBGen2=hTl-z)CjfCI{^z7eLI?t)Ws#S!2<-RkyMfl_=)q43!<6Ml`YNOFCF8oUI=T zzt?>z2K*>cpCs;dHIxn^Lrwt-!U<tX2gI<4r-RQ0_B-iVY1qK@LigGzynJcm9XIWM z_PUEiSQlUWEwc7PVsR73YMjKJW}cX|q(ghyfH1WQn>;*nJZby_jAdHRl8*8(%<B0q z0<ETw7~HLiE90BEUo=5QNe2$hp)_KgLRLBC4lQgqrsyPYuv*`>(q2a?<Ct+B8iO>0 z6xUPnE?+1(Enc#lFZquM5!N2Z^S1s5ovNOTMSIHH7nq#Jq@{B{y834^t!WnjU`Vyt z6q~Hu81czxkX!{0R&lwX=OkrCIpw1ExcRtELTqjdI`>;lDZ;ZL^-GaTL+UA!N=ND^ zB9)BPLrg6(#0=g7+7m!EibV=ixG`O%ijbNjQnQiD6e%}SV?}BKQlmv`5mLiMY64Q@ zMJtPuvWmPUq|O4{Tb&SkJ;vg_r-<JqFYa9l%57M4F5iDDf?)#mdTA1%e|64VvGIDp z6yxoWY29zR5j%!R_kBQo>B+LR#8$->7w**OY%4XsMBmUjn>1cNEIOi)2d<{|kZ8~X z)+N6mRNtp!eEbq|O88;;Vtwek5s5FlOBR(Kn5?D;2yL{34NFjeCQ=0TNu*RC;_L9o z*Kwn$qicfz79a(sD}X3b%Re$63R$v(w911wgh#|b7^P~iJP2iz;!8_OQwM`f4CBW@ ztrFvR4?;0_9FPi<umyTjF{An!Drk|Y57UIl$l2Zon1bJE)eQHmNGh@>O<%&TQfaEO z?lK{RK)1+3^d&2Cmn9fqx3vMuTR7zfr+RT~zI&nIggsg0P3i%ZmgwFA-_<xWr7vs` zIucaR0()%eU|VouJNoz3D`x*{cx*E~0dVAC!ebObdp6LqK(@T31L`>HTB;XN`00Rr zI134ULT0znJ_Aqto3&k%d1jK|SU;S7IYw8qq9nrt=2)2HH_HDMb+<`lMZ(>t+8L7? z%*~42kHI+A+vZJ}50{{8T{L`@=T3ECyL~S34W!+lV`OFN#&BDksTuWMS>}S6NsVhG z{kJW~xkN(57A(X9?$7iXK@`S)<Mb3hmik|*4%QvD(mG^ZyAYc|`c_fFSmxrn?W$${ zEKm$>+jj-Y7K*rLq@XfNErn-ep{T2|FtzfQ;kZjnUCfJP^_y2XgKJVum7*N4IKP3A z#g5Q|G$>E)RF~(c*<pUQ;hIX98l>&GrsxGu;m^Y$25Iaqt`pSN!7B=-8(Y7?L?c2F zd_mG6M5jOrTxKnf>g>AcNG1HL+OoiB<t}(%usSURcjDL{y$s-IQtI*UJUiRzJx(+D z9Ysostkn{k(YI`~8*HBEN^niZFhbR7*{DhRBpt)9gHIUNK%5wZ*){`dy31RPOrbmU zUk@O_Y1r6@B@2C@Kpb-$J5~$N8VrhFLi|L^gzkgdi0_RH5{2VS;k>A&LXI!cmPM7! zH)zcX*hHY0ndbnKWq}2ZZ^+qSk>X7r&&|ocm$5ln1VI-YfT-ywWV<Ff-4Q(vq)!Kj z_D`>(Zezo}eS*`I!XrH926%<E9U&8Cih4&TW4;lyD@|IHTro!0wWiq<wLz^C^>876 z6?FyIBnLLwE&k-l^-xei^_;w)b^$`u*-FVC2|AK6e0Bz|Np6f(pdiA7q#~V;GDMa% z!W!2Mbw5GfXRG^Mb#?J-+_;IVC$U)Jh;PL0UA+UAgtuY#i>$F5FIK?t2QKM^>{A^; zdAYYMF^o^Jm<{9>3f)uM`r)BGIN1Rvknx^yOa6kVIs1LL#QXR2pjstG0cj2yKy!#z zb2l2tyrcAbIHq`4pPpmxBmed(rwX1FiZ_Es!@u!%0!>@L&zGhrsRt&Dk@!%oA0a+W zC47hFOm*IKMV;Lhoa)eam`A<>2<huz7nv9tRx3>~w6onRySjT6I;f_03NeNn7W8}< z+by$7pE2X;)Y$2uD?CEh_}PIAoDF(#o`8tpFhV&joUDu+Au^zchPK08d)`LRcM(3u z7;591p?FHgca;;h9a9q;KDG~RLc*#NBBS9Z9;>)1YUMELA*lp=e84R<GeWmR%oGk; zLKjyKJ!$5F%oBWCb9DV8*k~6z1BallOEk7&Q;F`RXgiAFZDm=Bc2=Ur-+iU;zuZz8 ziJUz?uw8p&KUTTgOMq8G<N9vPG*GKE(5NLgvCf<i%l`{gnZ!>u2OR+y9;VD7_Cllg zP-cB*gy~5Ij`hnkPw>2Ito4ciRO|1<j!^qE00>In0!L9!2TV3>?%=zhOi$c{$ONLT z3P<^`&~h@I=Rh()fxogs6E(qO<0hE;3Uh*&gGodu_$yc31ap2p#_Nq2nBZT|5fd!k zx5<FJBfU76sZTEgeESmV{qO0Qu;txXp({dzXWf;7){Xn)THVHTm*H9yw|V9KLeF<Z z#G){8CJ!^_cVPeCr}ENb;RXW!VZ8sW5&6TC4rCWV3m6TCFW;|fqoZS-N)(H$u@BIP zt?_)sw+ur)WNZ;N`{sMxp_&fz2ICuO9<dN2$`jtc2bNp;V1M<se2y`=jnTT*@`q>I zaf_B~c*P4?Q-x~uCo_~fbxx<*-OP8EEj8AueB;@f{VZ>LXz68OU43SXewV%KJSy2x zp6uNy*tgIvJ^7Yk-$47N@Jvxo2noLQo@a!`F?eI_-H>Ju08UyFFd6T}ot^bwibch{ z=$B-BCm?d#YUNRT<qE#^BQ}*JnxeO&fIoCgFc41-RM;)PT&$ir-Jb$gn(o+Sx;u!Y zuG3SNAvc({si&5D%`C|v)fwY%^DFCLM}2rvO56Zbx>WzZQG8b`2DSEjaa8$#F{t1l z#h}dEV#ml@W{PfMpfM3l@DqIhaVw@ICO>S!9r){4SZRcKV$=X#^k&?Og+DVA_$K22 zdyGF3=3luQyNwUPHG!m{jElUTu~qt|CXr3j)i;XZL|FM}Pgh7Z*A~jN2BFzAAndNk z_mXYimKciM+uOTN^WC=spKJhAObdKm8Q60iTq`B;O^No<WBB~Ew&Q`*ca3vK(rPMk zd4oFV)<=-93q7*ZPHLfYWI==3>cjO7s)}37n4<Q#bvaX1=(c*00x69JY`~RLxxx%F zUPae{iZzq?kREu(bBBer4ShYrYFV`E(R^~)V|;}b0IRd!(K?7Z?@N*&h+QX0-j*2& z4}lw)wao4|Mx0;`h%2FL_ydkzQ9JtEXblIEgJY@s`=NP#j3z42u(Zf6>fc>nnjm+d zi}-G<ItQY!)Iya+1Hre*LM761Y;v`fe2gpQE0_zp(Bo;E@v9uLQg9-ip4O^~O7uS` zgDy3Gw1?Ad3zx@ZFsg_b69x&diGG=p)(^lA^u}EvTFaA}dm6qRJ$_HolV{Jl&`NS> zrWJFU3i&j>*j;KQ`2G}Y^I5)!V|HjW-2*W*4I8v0P-C!5_3Ki5s-54PE@>gsx)QIJ z8n2+XRu5}AWKbWvQoCAkT-aL>)a_?y_T}Gqk@3-fIk!uomIjZ*18HTlr5UHZv@+RS zhs!FiMHS&!QP-;8>l$P{s_Ghox==2^d$}Uf<{;xos$47f2dYV@zE2xsF+M&|%dWHa z7nCFp8GE3y>ZR9%jIpYQU!w+;`*)NJKZe9zz%;^@>-}Q@I6PlL-*10X>I{!W=!qty z{=ol;<s1d7%lI-1!$#0#+%6Qi{&9eIlHz_^s0by5yNFgZ1<7LLu0jFg*6-sEQ<BUG z(<v~zyNyQ{fyzlS`0OZYLhsP3`?G;2k8uKkkW_IN=O2w#Z%UB=2{+!N36KkqBE^mZ zVL6=N0NLdz)@2$usM4>obP7vv>00{tP*<=tXjQBJH#`&L`KeI6YSlH!5IseZgh2h5 zAR^)q=x7xlpr=U|{Tr?NS}vt=YYYSmGdu&1!WkFe_En_SfiiKO>?=E&N>G<_b2mY> zJ6g3nh#eutG{K99>fADmQIaiGxq5TBuRg4N*#by&TJ<R$)r|JzKcQg%JN@|AThWhd zmN{hX$An?nX=2zvLnYyhkh@v}BaOXk05sjk;1A{28sMFTiScP3%=Qc*3}yuHV^5@2 zFURYd5j;-Q9(JL6%qStM&WoVh=TM&UoP48+Fw=wfKs{eh&cQ3?A0aOZEbn5}Vmz{! zlM5%La!i%-EqqGw3lTg3_GK2v2j9>+mliq-)PT2H(8_H{u`vWEEQu+y!UH%7YTO_y z)M{SCjdzQff27c-8VLa4`q~P&@l&7R$gDj!%v%M!hz@fdUKGPj)*ikI4adfJ00qVP z_>Jl$$^ed?(=oW@@=sJ>rm!zBVIY84%|y(%x0!vp7%79}WA;dPv4h!GmOefIb3tpd z{u~8)#(}-nE(S82jdzgE@>>!(Uwg=yge=0BlcRGQOM$~F#>6{6M+g+b0M{0(UEEOa z;`$MMrP$v{@KKEJ;a$01Jv?NbKsVT+|MBq5UTWFcvz9T^X)L8UJftVzT`bERk2Mes z@N<)&JrZI?&u(0;Y6t1H8aSnh(Y^{DC`Ox((bnFLbpjwy(`x9x7wEV_tN9xM5Kk0Q z(tNfY>T9eY$#iN3EVb&NvZyOXucTs|z@s)qEO8buvk)E!C#dLD>(r+f!PW5!bhyu? zwKo5~;<@*g0=mI5$jW>p>A$(mIWrH0Z$hbsDCKjT<4KYL8B}a6&4ULc_AHoJSw&J| ztctsYoWv@I$MvGv=zkmed=gPktNsK!Fv&B|Y1RLY8;|iE$e47{(fTIt%K(R5{}^M; z(_KlqfTX-$7A4|`vy4g<0sO&+ZTkDnGnPs+nLuY1&J0^zjY?aGg93=$1k*BPK=qRh zR87|&K0qiQGG0N=L=)e=#J*&s`ajsb9Sq0Ui_zEPGD$aCEbTd%(DGf75n>BUTx^7N zRl3J%WlcWFtPd9&)80_LB<-pwFPZnc5HVS6S6)&vJdTeXxY6uP5+IwFt5x4Y0g9*S znkY-88lQttbDP!CdK-L%jpL{mfT;1{##@BuT5muKo8O}ZB7W2Gn}Odf{AS}f7rztm zn+~Zoby8ufe}H#0U+ah05C_YUDD5IjCot;}!D}3WApkEeqFg!1xJ@<chdfMp%ZH2Q z!$S3Nk$m`5`Ea>>I95H(kq_^a4_C;C4)yR-`EZGR=#~$^{Jk8gRX%J67|<bs1b-&! z9Ws6|v$%v*pO9J4%d8A$HOVZluXr(wS=(h6<L@CWn^`}XS$D~-TxLBYvzE#%;G<Su zF0*FIEYg4V9WrYxOaiEDf$a2T)#;tG)1y#cGR!Hm^Z;fwb0)Z=rZW>W1gX-CI=o18 zrdHvaj_Yb%-MIR2<;<?dbpfvBxTZnTT21WdWXo8sNM<3qQRZeNxk)A$AxRkv1r{Uu zgiJ0+@@bh|5qvGJ5=rE2=H)T5BQmCJ{*0(rTLu2cE*dGnhG|VPdmI9#*x)kJ)CHX@ z(A0c9hmU(DsAIV%>rd-VQ(tWCh!)7`y};wq0`mBJj|IdREs))N4JFY6xxE*d7%ecN z_X0zr1=4#j(4HfP38pl%=R)+Zd<X!g_Wt%ussKo_m5|Pi7$5CcJjNH}G2vZN9z$-q z74m;;o!kUCVX%k5ag{zdB`42baXF63>5i(ZbKG?z3XfGkHw9A-!DbMuM~ITvKDZk9 ziAJ=V4m|UoCYxwM3T&c5qPbubCzvJK#AKMfFy)jjtM`d)<4TzY8u8IjAsM%@Mq};6 zNDIZHmLOWL=pQPw1_uBJJm4MOCDD1O7~9Kj&tQF6kd`kN7wlLCFFb)>kQV}O=K2<M z&s#s)M63%;$&zRR_9eOXbr7TXZ2?W8`*{X?FVr5Hi?fN)3cP^v;LOb1M%MLGFR<yr z%5lz@@%!};#yMAF3%_>tIOqC1#yKDS;W%d}@@~3yobw%AkKwm3(yt)@mD|TTAIA0K zRpXo=-!{&fwql&qiDysYcP!p-!u@#EnTg-4kp3xtUqks)?>J`(+OSwt@RN{|$cy-~ zrS!qSl)k*_my%-VwLkw17|6dVjzQuwI7LfIaSlltnv!yn$VeJCd_+o0^2m!vnK~gA z%t0Oip~^+i-4ySof4SHikM4P(An=SlPyqGGO?zRL1vp2;2?kT1-0jf7x~uy@vF8k5 z4Ch9i7FZ9p)<x!NfhFP@bTeyr08ze#;Yl475TU;G84!CQ^5k_pC~$U%m?b*w$28M& zL{dKur^SSLiwaLU*x}eYrgwwNPbbA$=iuIpU`AGi6jer&Kt}?M3|-<ebv^YZPsn7V z-1<?l%*NXno;k>#I-wc~UoXrG%0zUn90Bu3Ydhvb9o{#p4nLqbnCkE*?TvF$(~vq= z#G_&{6I^t>P<Qe45mfDwVKgF99b$*re1Wq)#xJssh`wJ|#Ub0utfg^7wjp@WKO8ca zY1{f_H-hTMnN*$^>QiSpGk&}U+r^B9FV%Lefw5tFLc?cvDEoIzx2i-xaqZ>@YBxJ* zVyo0opThUbxbVSHWs{!L*m4XzZXR{Hsa>>%UB(@gu(EEr4M*X#%c1I}z3rZbhzdLf z(Sa>%W+|)Lv?zoH++dNi*PQTO#XtZ!s6Zreml&tO8cQUI^>*`!S1S7_>@B6nMd%P1 zRX1~y)TgIW*D7}GIL{|h5T67n=tP|s91!Y$8m$f47D<FS^~f9L74Uz3fas%}V+V*j zq{VEip!eLK^#16R<^iJrK!@Z3qGkKK93a90RAHK!V}NRLf~XD5p!*4;RpSIRfPk+~ z5S<h!h)%_wAeteHfG3zIh)x>sw?-L*2udjX+Vcd_A72tvPgkQJ62Yxma&0JRN4F5M zuj^qw^YD+bf28qPd4Yomy9{&Q+T^^cSwl2&IWMPp!6r}55W<Ty!=to|u>)TaDOvFU z|3hEnZ)%N%=D<<E!*Fp^1aHB1eSq2-i-5la{Qc(}zRbTjT6NM%&f=4MVzU^8&sZFH zQS^rI&t+q6*rT6wm&OeFSoBkjr_<GZYPA(WXBh3vrbVvxfdOe_Atv%qIzG1vNjoxZ zE!mRd#FwgYRL_c#$hImOUep+r1+LT{9#J+C%R&3o{{!Y}gWm%vH?qHQDnC<&&|O;f zP&5U}z!93uEj2&2lnURz#D+#l$%H?;mIiUv3A%%zEw)0&&_4?6<5iFxQWSP*A?_ZP z(vY8|DK>H^3b+ZY0L*N{o8Yi<?-4*c>P_Hv3vU8eBvw6Y5*y$LzyKo9x6de4CtlY6 z3yTPSnQt9R_Hv%!oonPYq2EP;j>I*yU>V50Z=6$rMS%!1oAM(0a-uZ+lghk1#lblt zwS4|tf%ayny_@hT{HfReeOyj1(;LK$uG};p75B&Q=j$MY;7YCve3$WHp>lMBLjvA0 z<BWWc#k7yH;&)&b?H+H_Z(uvex$sx0@TW-trmEiJ)t$~za73(W?aBHg)8rGFl7VxX z7JpXNlr$zFcvc`f3e)6<jeXLQat86C1K#d>dOJhKHCSE0;A=ZsENY4tivs&!V4otK z_s!$(y4$AD<i=rPU>Da39H{_{XJAaXv2hQ43y6a-Mf%e(u*BsRfkg}yoUo6uR)HA= zGenOtj>z2(Zz@2m6o$K@^MjU49iT@r=m_HAo!MZ^9^%W;UbhB1D%QZnUg<0sW}nXc z$KjxJXu1_&^(fRk^1|=U%?md}G_g+43pa6X-|Jm1Di;yC2mP0rSz*}U`zhW%f!}@j zJ&ND=@oTZEAFG+@dPTPQpO7dLaSt!>LaaoB4e$J&A3QhLWB9{gQ+Mg)4}J3xc<9?y zpCh-w&z?KMXUm=JchnVH3lXU$tL}LC(|FaGcR_TVV4%t(`t}P7nsQwY6<Vv0YWe$@ z2CV}8aVOuz^vm_tiT3>t_^ZLvj1xzI<^T~Su$2cBz(_vdgN?*-Eb1c=RnQTODu}~L z2aTDpw=wkf!#_vaZsK8R8X^yz#+kpBaAp;lWYMc^tP{~i+x68&jjkfxS&Wt3>%-Hv zLj?mUE(+dN1mB90y4vW7ElL6z^NFhjVPI33h7R>Z0QX>axR?Fm%d%XcpwkxkvBS#R zD?0p@cxPl!kGltD;X0gA!$B)A=-8A)q<o0@zS14*Yj98pp@fJR2uLuA(J7{MnUrn4 zOv?4Y`6g0QRsoyAVM7;80{Se~f>agme){GGPGjC=sC*$mp=$rdh(yB|$|{US;+2>` zROT7<B59J}v3~s~aB(MUy_{+gCOg0~g%$50;X0VvI63V5k*5^#krpZE;<bx=?xzD2 zBq!|=5ui*xK$F;HIs*F>*m{oNQ66}y0!>eb`3mHIr;gxw0=+=&<H3*Foq&<R{<txS zM``8i2gV_Hu3|z(2-E?xespqzY4R2t=)V3GkMYHL(JN@8QR)67Rx}e8p_-^m<4c5& zj3D-FBuk84@|`GzC8DdpUFH+(o(=2rH<(RC*IYZzf7$DdjY%{>uZ`ux<3+1}k{D}B zs=)Z;Z_v9DR5FUi^kXGt=r5x%x)p7;=EVB`q4hXqDdKP9{K~6sk<18kpA8k#-~vZN zet!Z`;-|eG#%*k*2~2kc7D{K->f+4#w){jZVu^4kpEUj>mYpRUM8F6E2Q^{%%mo5I zYc=<yDB^RBQ_F{m$0iWO`0MG9$H4pg*YF9<))TeY?V+{SKx_YCPT<_#YsSUsRohYZ zM2+CQZd|n2HLzZmOT_-@+}-!KcwHIf<Ycz-WDsLWIa?J&QayQTEO3VEXm{CI;P*kJ zOk%hBcnKb#r3LCZx|WMs@s}9Crksuam<{`}ivfXb{r!@%C5EtG0Taw9Nbu9gE9?2` zQj{=;01`k<7hDa4wkN0M;92=8K6`12@Q1(#XH-u*xPPpKoC+yIS0QYI&{MoPelIX^ zi2)A*LO#4l;Qvf?)?F-ya+v0{XsB#`aO9d$o-Nqdxc#@nUS-lpH2<US`FFu<!XCK> zujIeUSIpCOs4DiT|F-x?l{b#j`|5~q$xlb-;%gN{0}VDzQgASOoQrwtkI(hNyXL6> z(w+`D@gd1;4y;Sk-wNH8uu``M8WL6lJbxX3=*YR^`Nro@eA%Tl!fNicqOZZeFtEdX z{>vG{d>$QPpv@_U4kg*!nv)+<HopEyn7gAz#B*(jHDq&zY;U%}Y#n`M!cE)5cFjGZ zK6p1BI0BRK31dKYCw(}y{5|R|0f!JI7mNND$V)&%A4+U(umK7p2atG+>e%Y9fpaxS z*JbO?a7w64n9B2(<B#AA$Mh(5dN&FlPJyTON^-ZO>jro$C(d)WUPLB_s+1!|lkww= zg_SqH5C6<uz$(KY99VY+A#Sa+=7}C0l1KH>gHy2{{1SAIIr#K>3iBpHRNi=nJ{SR^ zuuM$U`-i3i9-Q+;2Hr5?6&$W#1Fkx%azkXUZ<fhhr@HXflPEKbGlSF8CS5;^s5O#G znIvz0bUkw$cf#uos}uKng45%?@C{YtoK^V!(F5b0zX*(T{t&+bq<7%=Df~88k8^&2 zyv-<6i|aJ}zKY)?c(w%3=HTkaGs}=(f6Qzvo|<V{(7c0ShKz(hL;Cg`Vz(n{AJSix z7$D0f40H@}3`s~B(kEd^!jM5j@N_VqX#IuwF6AEw_Nx<*2C?*4zzl|sb6*+#4B^ly z7<0Q2n&ZG%XF>}*LvuRdl8?{HV5=PA69kYkekDxo@qT>q{1*OzX8o7^^Yzb<tH1D{ ztH0CuJq&<cMS2+lR?yHwoZqqs&RG$4e@>^-PBx1X&{q(*9}5F|w?SaNC|14iG?x8u zYX8@+wZphW{AGJ4Y<M--V|-}<zV70Pve1jC7+=%Q1EF)>P<Y+TSX<G>)gQ}?a{s`$ zeGnw^81}2qa7M`X4AxW26cV)d&<N~>q6!P4q-sW2Sdu0rh6)F8gzGCmTn15K{a908 z#RfJRJK-c_FZz$w<OYg0LEG->SeHMAVl1hyFQVIBoQs%Th%FeC+OMY64x;`{pX1c` z1V<_kG5#Y~IEyuw0B_a<py)|BJ$~)%Rjxn1S&$ywcAeNBMb@XA{tS+nd#Y-FcbQnj z3Ukhue}rW(#h0m6Z>HicCZ=?g*wsdP{}=-ju!<=dKV53Rc%Gam6X4(Ht%EV-elIU> z<LUwC_k`|{BifCyM&_<y3S&=^bAr?CvO{c$dh%X5Eau7kBk8Jr`l&9SybFbN<DU!v zqVI{Zi5;C3H!Bz>=7x9(##ot(lmnapMc&$|q+*=;8KKDl4QgII#>@MZuf6|Dk8$Qr zapU%SWA6+VDp*JCol;2XZbJ_Wp<2~L_!L8~!jTO;rCcZi+~SN;J9aE7(cn2)q$5Gi zKd{soD91yVd=p3m?{|59Bi0G-xB2a*-d=w@Re*!93&N7^BLJoG^{<4`p?8=)$rFOs zg?myJtBO65KcYXZF7r|NQ$_3gs}RDWjk>_7u8q|dtx8mg`WTOZ`%P>t&%cMgW4*sn zFI@1P1<DM6?sFDwS^UEX(TTb01|W|sSh%2~uQ)p7mSxmY(?dqf#xKaMIgLU?Q+721 z#zlsC5g!(li+YD4Pz;WAU=|8Qe;uNjOJ+@s%Zi~m`Uic8wqqgABFu3%wAcsk;hzQu z+4@*(Xt6Pwj4SR2Hi&qEV2|340tdbR8yZ@iy^R+F6GsfZP#)9wI(M!_`}^~+kHA1C z7MOx0tR#T6r_?A7{C7mR<J&NS13Wim<6)BnKv;$lC~Cl(-Y4$GSl^kF@ck#+L*!Gl zIpcx<pPOTQfLG?xI(s#?E-N=_I}V(&g<QL4IPE@rU6Iv=;K5;x-B}tq@6;ahU|O{u z55MpTw-li#aH-7BfWH?enuRORt(AT~mFE^|)ej@L^4y)iyDHDk^R22pcdKt+<+-W8 znU&`<{7y5zv3M)PcQ(G^k@5Q%6fk?_{|Zt1AloDatvmv@WUq#k6qUOwD@&XS_ndOQ z4%D->zKK7veEU6byIzO8k)`!NyW~6XdBycQ)o-nggY-JQ;Vi9m-V(!k00}i5Umpy` z?~7IF)B<a;D!IbTQPh8nEOsZ0&GXNR6|-vrw<tD=#j<3vTUl(X|B6_#1T8RD6dM{i zpP+5L1nI!}H0_ZjB<k!0RDby@Af)GRf8yseoB&jbw&O_-I_HlSnOIBuX}^6x@!jx< zwb$h&ZO{0{4Ck7wkORpyX<*KgyT8ZQT=Sx@l)n=N;w{VcJ%Az<pwQJ^sqFwA1Vz1v zDn_XJ5idux%iDtpsx|?ZrdyURZM0klIDvSV>|MF(C!ul9mmVJH)bYC<zaQY&Le(37 z5|k1R>N0_EbL@3iEV?6kK1JJ6f5uj0;#-~&q{Ah3BP+ih4`6+JmEW4jXuN($v521o zMmhzc*|25+pIv_TID!u`HGo=)N`E45W&dR7cCu{u_(Z^W(3f0qbhmP?rX4LRK)dXf zJJS&(-J(^WN4*G;UG*t6T$Stk%?cds4D5wA%C0?zh*=emAcALK6Zq_W(BBEAPjcmr z5#L36;R;9^4t$=MRfJw;6@?iQKO$ZY2-&K}H#dBfFdw7B@!hK~r5f1*zVPtBp%{Y^ zeZi63i0`RsJC<3)%TQV72~;;mPu7cUIUo4vfB=Rk9>8(VkRwFQmYa?>W5SNc0z0*H zyOQyzI4UqjkHYz(ZFA}wVMG+Q2eIEw4i>J!`5=8FgtW`d{YC7!!ZjDmowTXxGE4CE z1v-dRCwkrrKm635up0|gF-Bx8bcPcmnACo?g+SEl*4n}$dgJ(p;9OUrzVb*1qI}_< zpzjHL?J~p+NZQ{o62{qEr=HO0a-q`}eL(%E3Cot&<qb_s9I&@GZ)kU|r&@o6{E~@) zIO}2KU4K2kkf`vr@-<H->OokZkZouVg1_?)E0qswF5uc!Xrf#0oQl9>ImgQ1RWeR0 ziYPg13hfD|jPu0wI2mV}BPQdh<7m!DyT~{($em5@3OQ}Z#*8ZV1MtqTwMP#tw=BzB z8nk!O=}LaQiyP%LuAx@7Nyb8@mI?V>+u?$=w)|&8LWn+7>xWqXTtnQ3tM}*PysQHd z{NN>PDU>uxZ$!UsGeSgq7T>lhHGZ<0!mU$(nco@UhilrkZ6m}tYYrPf`~{_Ht#%YJ z9P8QYiAVS6rwz5%E=apb)E3hhKez=02mabBi-snsfYKV&;c$Uqj9o9=Hm*=j-D~4V z2hff-8P(zIIERgIe=b{kk=2~>^{qn_;pg<1GeDoASNWF)F>-AE5`NIMu5c(K6AwuH zTWEcDZQ;=H5A?!p#KI|bqYtyamP&ePx*H4Kcmc<c7s$(OULx;8<QQvy1J~&GLDYAj z|0d$K;5#2i@OKnGlRQTI)^Cxp>DNQHtL0a6z!L*m=+O$)CT2A*)^q?avXcKn6Kw~# zxxW(!!De*?KIzoI3Vhb7CuBAtW=dv*M9N?Sg!9Zs<}~6MjzrJEZJpM}X>?4Y*<5}O zj^V!_*ohgcsbAl(C@7MVx)hvfshdVfOwjMi#`h)xy2M~1eEWQTf~&K`LyXKUgs>7` zCc$kJ&}WoR`&-)i+G#_<U#^8CJuXx9Dgrn-EnBbRxPng#c-OCYEGt?X6j@-d5S^E_ zZh<u9T|OI;P+s@}VDva#sk{@uou_Ue#H~bNiNCO4E3B3DjO|;X4O_@k;?zjs6hM?S ztw?%ig>qdu72oiAB9->q?;P1OdRo;v2E1A`P<MpdpPPXojQ&2mHXWFYcqXB{qdKAY zji>4$_d?mLRewgX%|Z>cCnXfaKR2qA^xeu+_fX76e0G~LfDd5*79UxF%UHx`<*(f+ z#sk5t{R?_pAZ){=9N)u7Hk>3MC^hd2xe;38F^<Xy(LFJgUMVo3I?HTsY-0JrsuU1s zs&Vnl!jo5RP`d2*hWTC~w~8IJU;i*s6AGm0)(`L%`1b#h_b%X3RagJ;%w&=bFmMJ4 z8YM`SsF<K)1C<!igfIyz34uU@Rlr)CPN^-ZGhCEl(n*lRVJvN>#kcqt{?OLHwQs3a z2&k9@%!G^Fw1`SAD%CSiYJ*Y;m@?n*xA!@dnOqRtzTfjb&xcOVIs3Zy-fOSD_S$Q& z1?#do4^LW{9(eR#4GQQmvFd{kz)YuPwEGqMgU;NCCq49`04Ii`7~?g$6zDKm%bS9% zFmD4{3LFHu*8Vjj1T0<B7h`)`lY`#QQ`Q+~wGHYe*8hNgdU;?>Bghn(a^al2l8$__ z8rds>2$gCf+#$dqq$4oVs+KtAzQ`;9@YJ+YEv@r@B@&A!YB#~}Ga0Cl&cleV77*{p z&+~j>_RCPPe&t?7s=ih5s*M-@A*_-H6A;X54km<wc37m;M;(XSw-3W|uND~7E?D41 zg_dAJ>Jg*~7NqeD&N_kx>3mb`W}&=*yG5<@h?iYz-D2_5pb8K1SOJ@Z1sP1MY#EL^ zlr2-Of?36i=zc++xmKP1q*}bG+5M6==w8os!MX<sBcNz@|JLIF!tH~a)LffC$V<sc z&9${(3-TaJsV#+Se$5xO*{Re{!h4|5mfNKKD2E#R#V-f!3%A3UfTgffO=;9-zN{6$ zpiXImFXT!*Z1_3wb5`a!pML&(6J6TOwMek^W}}RMK-nC5P{vEwqYP$5k(Fv%6Rs%D zeiCKQXtd#nReY_ww9!#r^^(Oqyt*pI;=QcC+Kwv{b#_s%x39A07o%^T=pyu6WnE_) zElA;2jJj0Rbq9I_!Kf-4{E!hGD0tD|e!uegm6-Ne#>a0E#~K-U1PbkJ@9jvaY^|_q zO^5WWXW}1>s_v=zARGT0L$;dt`H}#yq>Z{gq48=3|GwK|#lOZ-sv7X3zx`(&3t^)_ zoLtYHK~|&kdoc`8`9Dw+4%U;`YCLDpZB*BAaE8L5yG_|zyLR;p^whopK{e;7^Q)|C zfD*Z~#n0AivtKq?j=Vrhk>=hMa85*L76$A)RrhnsR#3X<RQEbKSyu~eYJo!qC3>1= zWzSw$^C7K7;>G_8p>rr(VX*Sag_mc|Tm{>j#m|Yk<8P`ybgojhs?+S@v025dM4&eF zIe%mIp|h33exd=20Y_kb5zwgSi(jBQz688#?)BOM<kXHtiq|3=a8z}#Cx$h<pS2u1 ztGYL>bU%w>Tj735Eq)<a%p;|C9fnRI%cjshApR0bfI5Xid(&(KRf3b6*lV~i)+DA- zJS17@4FODb)o(4Zyo3UQ?bguu(AYp>0*7=VD-p>;Uq@(MCI9TDk`UEpzPEQ&O=Ib8 z7yzpr8?x9VQ5r5oB{Z|>p)6Vqo3hnjQ|WIX;dSEgRo*20UF_@YuUe1kWM!(EFXQ?` z9mgPG_u+3Op*diOW$w*^{A3KCR=f#%Kgz46|5S^g!%>{FBQK%`W*}X@I&(Fwcetzl z?M~(K43q`^mQBD|R5|r2ZI3o{b$GmHpNcytWAV_YOtptcp}oLRU<ZtXxi|TbD}2R4 z{Bz-c%GQ*buIGVnGgoWHwHnGjH$ths4imzE?kc4=UA$lmekopR&V4{+to<$ezvf&v z-hHq<Adu3)1ZB&lA|ikUM4P?2<^v)e=5(0@H{)l&pnk)NP#_aR`ZDB674!Fw6n|5y zI&*XQdbR?Fk)D#+cZD`{Ga3<`h-Tu3TYve<Ho=A`_!%+9H21oE-bWK3=)2qikzH9; z58+m*40u%Y1p!uSSFj0RaPK6q9@KoXLcA{!;bN0tdq3VaL484trrN<5fb9WfI71@o z!R;bPz}|wG#C_?Az(@(B*nM&)PxAG_%|07$j370_8A;wKXYyn(?7i|*fUu}+V-4<A zxd)ZnZ=(lu?wF+1-Gdjcc)kB@q7q;iYfmrbP-|<rtoQ}R$NIQl9jragWq{ov*CMeh zIB}Ro`Yox$(_As41j1gVCir(cRS~Km8i=w5=|vyEDry2L*ln$QSACjQRjT8gw5pdC z_g-!03x(>8pk0jA49w`aw5rW&)hhqrt4ZF?*%umwqbSUFP6agz_+%|WApBvh>+Ag? zrzXJk>i~o8(uQg|ay>&QiIlQ-)x8S37)dxEe>aS)Z?J6D0@(1;PawQDyH+c%R%fpU zu>%c^Vpa;I4KJuOb{eqmv=OaV6H4`-CTC~??@P{p0S!URv;&Z_!-Bm>wEc+Qz^ibO zrKXU82JJx_UkOeM3UtHMpfo{2X~J$6@EJ&!_BM{!a@}hm%Le0tT+bpGIK<vEg47`s zE`1{V>=(pxHdyj#!pcIHLn^`p1Td08-Q-0Hi#Ma@EKB#M8Nd~)_u#DyWZWi0+Dk_i z?<LE^Jf6w$k&});`aQU78F`Vkqf`?Vr!?{+XGp}ism${xH>9yv?a%*!N~!6d@zMNg z$p6$YGF?0H)A1YfUzx7+c#d2Ld5qPT*yFzh{Od6Sf%e`adJd-z;yzE~+z|D>f!~Ss znXY&6{1CrS@jGjToyRkPbnEc@Eq*cloxe2?o72yr70h<SM45cNDIZ7W<CuKtd`PV) z?JX!bjedy~3@6}~BX)v}5A|M}d&uijTvlbE?Q>;WKD0KDOmu;M`5ROHpIUu?%6cpN z-NthX-`(@uXP<pmEpE_g;v5%Ao}edDn2C4q<H)M+gNA$|;2fuHwQ5W3@M`)I>r#u` zRNrwp*#K?!9sd<+^R6>ZBtP)GMjG_lHkMHH5m}x3@8K2R$f3=oY;D)v$k$R`KYGjU z@EZ<d-==JxY^#qTS7mPF(1tTd{S65T?o$aZxy7x%ft7Wqjr{I?Id0uM8M?19F9QXt z;#M5OSE@_F%`L@5TG|AE04;(%oYQ9RQl|v%0tO~^pU9&=SF|WJ7nY&h1J1iO-wCbi zRO9;zm8#cj-(jf+6n(~6LF28kjU7%x5=1In8_qNdxmIm6;KX|#5Z;a}fW?46P;y?` znrEvyOS-ve97M#cH{o7KLs%*ghOZNT-NIM#ZkQ!JR2Xdur@%3ezrhxECNzX`S2+Qv z{4J5(s-wQdT=y|pXM+`J_c6d8A^2~qRY$3D;B3@_LF;^U=TpIaK><`~GfYFnMO)l& z3RqKeD%D9jNm^4STwABr>|vwGYE8<q16uIIIpDzP1hc*7JZG+NaDUNm)t(~+Pe#gv z1^xzD$Um4ny8+ft$?Uk{N=EGPU)`AL`m6EddwrL8GmPQp`wKDYy1tv=e8&D*hgmkC z{F(9Qy9tMxHZ~o@-o#JG@0juAyZJNo#J0x_>spWb&8Jxh)0#gM9+uTpd5mXT=I`xk z)?ucNO=s4_G%UZ_D8~%%`eYeQXO<QFG{YHYwukx6G+oR3-~N6Jb$6}f%i7m9{r~2- zIWA@$gpEIjn_)dY|G&_;J;C+=moRhOi0>ErF&*PMroE+O9Pu>vcihMm8)m+nIAY?7 z3Cn-#*&Cb;Ck(77cAUG`%eby#y?v7|#Qu6q_wR<Aeb@DA)*V}ZY}<Nji<#$QpFNck zTi^d%?_Jwvew*#!`0}0bu%C#7Ok;+{zIVkDvy2NpUq@M8arZ*$$-`2f-AaA@ceF-a zg-~aMXE_Chq%5rsZbZll8XW2X==)WU*c(`wTA5qij@uAWkp098eWTeO0sCCAIE}|` zrJnXP@Kd$+33)*YH#n8rcTj{nXL6vZpSo;Pz+M!vFINkpF}`eMpzt2p=I#LdSlM}g z9?TQWQ6LX;)zVY`kk$7$C{=)$3#7GBr@r|qGEFl({7n%uP&3;XR|LjChMiL2v44We z3XI=D=6S0%aJMcbOUl3mlaDTNO<;SVgbQ`fqFGw-DSyK(h_L*JE&jhd)iM;@eup2j zwVCbEz^s?D*1)oMLxc@y$1s~M_UX8E1t(86JJ;bDL%TDDDtlI(eDn*du=H=|TcZlc zR(?tV{B72LO=@zaAWbVsi}=CNS=2}Dxdo}q20<D5pBlOf#ja+n!Pwz;Sh1tJWDx9^ z!_yD}EriK8hgz7f<vZ2F47g)d3rA}Ca6dH){<GD>(eTBn7LL&-I<yr$7QwN?0C_;7 zmW)?R#)St53&*2uc<vpiJ~&=RMSLCbP^#@mMYbM~mYNF(TlGVb8bUaay>btSt-Cse z#!~b&AgZHjZj6j4@#{o;{g^v(J79hP<QSWAqY(s|Iu21F+Q(r+s&*2`32C?zCgjz; zoRx=<3<B>-2LnzUr=$6W=NRKT&UlI@B0SIdp2VmA7`9uc#nLB+VC?-9(wFl#Q<|p~ zJ5X526{<UIV&9b(oF&@Fk6tzn6{o`5c^Ne4^7MT$w<XRTlqcRqkx+s~EL41){`b!_ zL7D!^Af^yU;?E-mRPDy;<x`Lpx`fITzeG^>X`~z{_3xFfw<udD+Oz|5BaU|C+_~l; zlprc|@c!@+#^xn7W(NiOW(Oe>4a2A^G1rTy*snVZu_Mg=eChMr8=|^JFyw%jRPEq2 zJjUzSLT(~P&X;PakFCmJcjIFG(Doz?)qik&lw#b`(O^m!k=P(0{);m*-W*0bemLyn z-Gyxha1LIky`yZ|Id*7ZjI}ZBIP-qF)~0O1tpj{yH)ZeN!8B(+s=&>V#xox&TRzuX z7}Jn&E<2cgQj~D!eMC0nZwmtV`p;NiVjeAc=0m!T$MwiYyd6#WOxf}VbgOZNurZYA z|6sUg|B>?BgR1>UFtgpPJl6>Ak3(7$A{zC?fb((9%2=xriC*m~68UzfvfL(Q!Vzei z$cQqK7uQ^HuNzVEMZ)2cqkF_$WWXh-xU+Ef8H_dJkUtM<YQ=C6goE^=8X`qXk+KC& zq<&b954;Ur@k0g&3-j<7=KJpt;+S2$cDoL9_gOK~aL-H(3C4q}kUTYpo$gb}Q-MR% zYqVwKG@O=3aA;a24^0=33-{B{UxGu>dU0G@D341E2gRyIl;H})oJkAw1IzBMhbR*E zp(@p)4o$(~Sw;}2F@UYxz1%(R0w9sTfX8riCOxzpO{PCT+2$u@o1L=FHPt9aw7I5h zn^*VJ=I_WVv?O?bz^R-x?UUq#BkE!q(`k|t{lUY}na;rNsk1{R*z1~@E1xF*jx&u_ zf_8xFV49>LQ+Wj@pc8aMkQ_YIQ6K4xpgMStG`>d}&mQTI{ubqw@v7~DpozsI<`TG4 z+Yi(DKX9q|NE*(3c^63K*kWq(^n0GLpPN4}uq2gaCA&d<&!~kO=Lk-t6qv;ym*)?{ z#JgkZ$5D5!Hp34ejgcF--xBg5{@$-!hS8v?Quh-y9=8x&un95=H8uGD3x>{?IhH}^ z3MwMb$e4Ql+vxZrkeu9Qj-{<8hIJ~K{Oq)W!~l8>sLYzrC6$pEnp^6k7n+s2J`j-U zM;?JPI@GAV87_S#Y6k^|)}qXNmyuWh0}=tO6r7efc#Cij0m|IPerufZ)(xuAgV2{S zU$=So`9B1RX00h~^Ay@LLCt{p!_Oqd#{AQ^h{YEC4Nn=%wsZ1Si2g3g!%+0qYnOc# z2~pGAn5m!R6%#e9$BF9FXAZVnL?IWNt#Y#7g2`H`R`fVahw!xC>Kiak&ydX#Wya3Z z|J)>PIwd-+dr$sf86m3Xp}A1k04rE`9A_qT@9uU!9#w9Wj20LIoK=&>GEYTfZ{;6H zKmG?M(3;CIf#B%wRWXbaZ;`2gU;Wr%i#B&0)Z={D#ZHmmu-;f_RWyqH7nA~1D9f6Q zkm(EP(>2P8aYZLTYs?Qf@c9DsW8vq<{E%8W!rSZfKa80bV>l}s7M+WfQ@eN(W}84v zkz9WU;gIl&c`!MAJ;bA3rhx`i?YuE(+}T~bTuy`q%-3xqeDaxqh03}Py?<OyAgLxj zg+3O<*xEZ4o+rUcm1&Fep!|`h53Bf7#8b@>eGp$;#cMKOpAoMe<van%fCkcFPu}fJ z_lXE`gi0`xJn16nEd+TcorePgx+#h*oTYyoH^Rut;jV-)zYD32-Xc<G;UbY?PgX8l zN`R-vVp2#i-_t@r<UkfgT~(*kKkbZysDIjZb?h5138Vm)a5C={lgM;t8QLYwcV!lE zT43M{93)!szd++hhRfIl|1MX|LMHqk)t;2IXAX3kvE8~Yihrg);1KW*<y<hKgqO2) zg+r<RD?j$@-x$<YGw_Y2yHR<mXEQnv)u!q{pUF;kf?mv>yzpLW%FZ|s&=xrpAhu5u z++}1;9aWLaJd0({G<`O5*7KM^2;eJ6Bms2D_Ps;5k@4i)K$2V`U&b?c?&ODl$2%gP zU1H#_Kz2`qcpZ$_?9<4evuLuioSZQZFL9+*D{^vmf=Y!Ac5_&j+?CNdrc0Y-bA)e( zCL|o0e0HBO%Mi){>Pu$1-eLy~b@pN&TX;u<JfoONeeKwMYLgnVFyX>O9v?$W%PTy( z0Atk*=$gYUqkk8#y}Cr(Do5D+%J#*#j9fKA%mu_h<dK#kGmqscNdKu;?|Bo&SLoNH zcu&e5e7%Y_2_^uIj_w(?&48JTfVaR^86FeOmBTwk-p3^!`3?Dph2t<O+B_~%*q_Qc zg5uf?Oh<I;sr~IeOp;DLwfFED3!T(gj^RXj3qaVLH7uM&7C7_}tQFS4B{c@L++Utz zfhCDcs(Gmdm&D_Vvz+g-(+zkHL;I%UF-!XeN<$bf7g>Kt#V-^Rqh2NSr>Cb%uGp3P zh^y***s5ml&MkEKzL{I%^xd=ajzn>E@y79lCT&VP&3sL+)RMMasxj6hnhd?Htp}I( zt*4WOz~XDeee0Ry)xY3RHH@x97J*Zqeh0P2O7)VbpofJsv2vK1ho)cm29bWXW|%9D zHkRg0ph>;iAR-GK++q84c-PKdJ{qgKQuixPyL?CXyV??`|M>ar-Eb0wt9eifgggLq z%iWr@{MdTP75WCnbHU4*uAJpB50N2!HXsC^e{yio<B9vRkqtZq=hi1g16SjyNZDH0 zE+@k4Xp!=GGym3JgTFYU4nbeyEkIBc8ZCkw@$L_0dan?(#@lZK=cQ723g=g%8x53& zt4HY`j1gK<YW8l-j9gsTK7sGt61!3-tS`dCeNhUxQn+1GeKtw)KgZ<79j6<uzANDP zS)Wh^3jxK{x}!fQY%>vwV{^2hP}3U0z^jK=1EiLr(1U9a(b1<i^VHSTYY?{As$SB6 zI^csp9)N8TDT<jQ3B4A|;~SQ(0f)Zdeh59@p*0=~_baq3wKRdNHS(CP1#Ke%AYD&m zX#Qjk@}DIR^gZlHggQ_<Ogq#(Vl+3AWll^r%>5W`Zet?%v0M~gN4rp(Td%Ia4UBVw z;@^Sq)9{z;8!{azT(XqS?Lc$=#qCxUtTm3<$&J>}nQc0}iaX#vL<y|m=R}O+F}92S zx=@rW>zIf4&<Omwen0+rzwg)K^P0Xs4}H5mkTR6I@Mtw0?y{|gyl@q5>o|O|t)m%= zwu*)dB!m11p6iI0H4-oTGYLdT@1UP^fJN?iLZ1Sd=*SB%hcP4n2_fakzmFHX(~2K? zQfQ3EGgjYa9Qa9(#ti%!So!o9cUUprzOl;IlH&&D#(}jj9Wd0q&+)F=&9PPs^-8tm zIDiTkwxUc6kz|%uVf0;9v7G-&zDWSacU#=_hug#%2UBskV`QaP*q*%`4jHMG`E+CD z2=|GaMj|*IkZ4U$spYtUjA|e)>%ghBzd1E87p8;U$6>@uS@jIaX^cu~9D$Vd`z+j% z7d!Of6S4X<Ky}?Ws!~hdPDBRDsT9bZ%yZWwn_A?cFCaJQiRutD46>6$pxN2TOYPs~ z0Fjxg0l!UN5#O`@IJyHRsZ$->j|-riD%EI#PHp*GWC|?q+xW3P;e77$b@-~fE>9J~ z&B<2q=tHLouNx(|a!@e+?CLmUdZT)`^VQ8TtWz0GvRY%pd!Tmv_Cd9ve8+Inux2!D zI5h9ruzVY(r}@q~wTHc#m5?NEA0<KFPC-*;Kfs%xDiU6<=BKOq5Iow|{4{Z2u-=ht zwdil0P3qKXg=&DaOkLBy>pYwn;(kQAy2kPv-cMHqW}Z?5<M6JoX?qn?sx_zZ7fD<3 zfK#5*Kwt_YgLR|v7u{e{U!2UuPp65$>EiDR{0-LW_`9C^QcoYpTc!FmGp=~L1b_AN z0+1UagR31s23__Flc;s2_*;b8V|;c1ym58Rrqo%HOzhVJ1ezSg(@YILUob~NahrBf zyW1hivKpAgEL*B~oD~|JmUdhl5@l<7F06&s<7~d<W>GF~#QS&JL;bP=Lre-8`j4-f zp@B86C{cTn4PzP5jc>*kKV0&7k*%znRj7)%W}6k0;f|FycniO**=CEDsiv%e<qXuc z0cDQ2Egaiyv&%>Wj^;Y{ixq`OlP*Nk%Af?(x}6Bry}0QDL=G1nm@HiZAwtb<7!}OH zhMEt!Vu{6C;0NxkgP_~gWspug122je1w@N*E76|NmKzXlxh`K7q0LEFus=g9;BrC? zx&BZt$IPx~vmI~WgiCD_sSOBacq78KIs#Pl!8TxM%^orVQQ)xPUknVtii6?joiKa~ z0uzN{ChD4|XFVXVu^!X}*ha%*o1_G$V<n0$QmM^D$n<E_ejZ!wdB}`pPy2UvXs-~L zw8<_lLA7rSeZV-Q(-Im2wXd-kjgFgW)?k7CdRSw^?K-Qkf3w9VvFSI+T7A~G@VaJ; zJ$}$-{Nsp^4tG7fR)){-y-Fo83fH@0t5s?*M@X|JK`rPAjb+Y<JLK?rNH$^g<Yh?U z(Sy~u_VM+tUS`EoN!n)g-75kqMBlX=t(tEZFUZ_Cqg{3a5`5gP%?OC$uM8&lv1YZ^ ze7YWmHJ-Ous*7ye8TH|g(B>OaU%RzAIk`TD;<lJ#N=UA(NC*{9q^(8TXcq|VV(1SL zipwm4x>WRaX+>bo6pqM#{R3(90OGB5aLjKRSULq1m>42bvlnh;_UPA@W??Dug{_Ge zHdgkOS>7sKP)B*PbnPvyw4Y#WC~9C4tl{+=ScCcXD!&M>E53&8m>THKItp=Sw;EQM zHLwWQ@I6t3`8Atgced*TF(D@ipS7tq9|)#y&rr^BImO_Lx6p~ZDq`|Vxn0B81>~VL zQ9wudl|Y>nHQ?+d0yGi*s;_Dnq6+k?r`HKpb(4t{f<}xmaLX8hZ^&BI7g;t3@ORgD zqZQG(A0tkSe);*uzH`L)-5KF3fs)KBk1)7lj?R0iD;`XYOe{6)3Mp|gio@$oNLd{r zP3QqqGwx%El(iSluebSyF$mxqittzM`|>fMTWfv%SUCo3MFAKC(O!Fedy}K>jYaJT z4FX)p)I^IJEF=0=h_9Lt$jM+4*dy2&i3-6&2l<=}QGF#)3mz<XRF&F?5aMCRXn!q` zu(PM$&NA8$aw46xe|h_f^*Wb(j8SN<D1hyMxE)=fzLJMV!9qr|ciQ+qO5Ief8rZSe z<jRW?mB^KFQ2!ok6wZ%UWHHT_LaX57a+{iyB#BWb#Zeb{mWocb2$sv*2Br2Ss1)n+ zC2Gs;;o|Xqd__H1b{=z+=28~p@^Yb7c!kPs?5wCgR>G*FC>!)8*RUnVT=<mh^FiD) ztb@5GX{G)^CW3lfs;aJx9Ru&+&Xw;JSQPYIctBSI8HM2yip`RJ4_D|%-}@v|kI}>K z-kxxj!<Bi#O1~CYX@*CTCv(}?(1iHH{(N0mGA-g|O$~_bHl*y~>YjUe9cM6oS*^GS z0DraN91RA5!+8~QUes{j$jbhW;T%rxhQnD{ABu!VaYNT5_Wl?#JvaAvm_o9--)EYy zguVG#&)HmhV!f#5=CQJWqq(EWK(M(LZ0-bzmPzvd3p04atb5=p{mZ93lj*mk7*6?L zU5n!G>~+e2gh|<Rr!D3dLEuOe(|n~)b7H|~r%|=zqB^Y~EBiM(?F%ff@Ew-t_)NL0 zh=u^90klmWl-M~!XLtdjx9P70HgzMzKOq@rKSs&$S=10eBk#NhFn7g7PP#Qccj&d; z?}!e4@GDQcm#{{%LvOy=Nw=Le@ZadrXHlWip|gq{p=W!Yb-(I$*4-?~Fo_IJl7BS> z+KXkC?Jc_4S+|Eo;@@cRc2tP=76EbY$#aCZbJ}$sTd_tS?sdWx2|C60{?AvQFz;ev zhGxy;i<&I&kwW|%ZQYN`;Og(pDq6{Ngx&%3d4b9CI9TY|rAn#wA;d$zDmpoip~U#f zal;6}_-MOU(4p3GGq*C?WHOcrCZnhaCL>8uK6W6*fV`?`G8x7`rYn;%)vm2!;l{fE zGpx5n8X6X3ePA>mvxo1(j4V^O_Eg~-?n^Ku7iafenHnHh5xZ-`o=Fo-lVmz#Dqn)i z(W(CjcJ%4s&Y=p91dXXJy9%{P;?u)c?^?5O#a8dK=~1?6F?lsnNIVB3q*{g!f)aQF zs74mVrqucII$fW31P&a9R0Y|z5{EzRpnPNeiqJ2vybv6>#KAF2j<3n_caXp6vCu*k z8fA_oXi}t8VpNOzLsv#?)*8ER;M2@{#Rh(W*hQaWrq*=eRJ^dGKt#NO2!GfW+KXqe zcw3camMeBk!{YIE6xxICQ6Fv({Sc)@8(?gI+d~hqY%IGYKn5o~^T&%?c9~2+3|$y5 zyElje#IoCgdBAxsd2HR%+k%^ny5#z>i)k)q!8OQ5$pzWz-*dx4EEnvwIi-5#+kx4; zr|I+Nh9WB!qR_$Wv&pargNv9;?4l>G!#Pj5PxV;`Z?6|wVM5S*NhjJiq803bYloYo z({0R^Ku0$T$|q8S5^BSf9sew_e*zC@E`r}-GW{;_Ijr|ZQ2;x>XNi##aKhJ)i5x^a zrS=>=v=H%xSkg;Kq<Ae@a0(*<WOIb(AQYD=L*=sgKtYGLhN4jImC^XCLb248WU6&S zYFkI)>SR?s0`}@aZ5?Tel(s@GR*LJia!1zUF<Mi<LZ>PU@?C0*Nc%zHrwW-~=!0SC zlO}o4<Asjjd7Pk6PgU1Y;0Ft`QK>4kgkD5q9G36)PU@utss_Y1-q*Rc5tB_5VqA67 zPdg^&9$NZxAWefjE_5#;fQUedHDH?JE&Uyg54u~1KnmXm8BH_7utP?$6ia3@S3w6f z21VNe)8@buxO~jBRKUcmlyCloR8G{%Y?J=jF;x?Z3v*8{ecP!01L&OvrlF~eOU?87 zp2xOoaBS0HkIj-0vvrf=J+urO*-L;Pf_TgJRig&Elw_Y)ww!AWIf@d_dW$;k-Skr5 z1-p{1p|Qs%ZI80031ud<ph2M&)a8HQD&^(g?3xd*tVZ)hZ)7+4_gon#O46r;o)}}2 zz}!cMQr<wh6FaAy=qa=X@!Fabzzjns3qyGnGq2GRR5gC0D&nM=`G$C+cxi@N6$jQH zAnIowl|wlf#Tr3TVwrVRl1m|)zLoU~al9e6j}z4ojuX`<HrryyMM&ABJ%U;ss94*Z z)uIlRg5ZGt6~eNOo9nEWgttS7E{{T^9m+Z?JFiUtwWPgr8vhPydhG}$a3ji!?F^-M z7(#@^F7yeR-QN0837kT7eAW*T;(6w`aA^Je3uW!r{Ulsb9%`*%6Nr?e`(J01&F(*b z85=BudhY&Lk-%6B<*A7fCm%G#$-~WQAx=vAq5EZ8*bEbh9W7HHcywE%FEjItHM$>3 zW!b5a8+Ar=%E^V$8wp8oomVwHw&T40nv)V_T0kQ5M9UMX1*Guaq&0Q23=)e6n1v9W zt^`a?farxY<+)S<0&`3y4#~!?OkPoUGkO>H!Y0FB!>%vH71rUniV(gWe_%vFt8PG_ zhn*WdFO<2$i5sdz(_OiZzG1z|c|*6Oia3uif?d<#_a&;++H^Io7icfk*q2J1Rzr{{ z=Vz=4TAX-Swg{*Qk`9oXle?T#gic(F{6&tO)y(64uzP}?Ofc0B@|qqjvLjIs>d3kK zgd$b<%*&BEr^4<{>mKzzL^UTTsulKf9Qr?{!n}UKBGA);BaJ?XVA^3alH?9yKS`0Q zpki1ZoLKzHiN8-^OeV4dfi;Wmv`MSf1sSv05iIBs02jHgwxFLTSd!2q{$~-!<MqGZ zjpKDuC(2xVFcRUB0}dfxKh|Z(0*2cO3oxW~SP-u?(7wb(TfqX}LSz%@9xgBvTpyPJ zytgTS>xeQhn2Y8t5hxi&P^xOa@lhlKn*zq-APH`a92|lLB#5m;sr?B;00_l{{Vs`N zG(<Oq+J`_BpwSh7PUsyMQ)bn)*z&vu@uvVY$fZcW_E{7an=d+tMQ3p4k^8Mhs`z#> z^alu)t?Kb$@AXq%TlEq`;vw0Cwcmgwouz?!;8t)X@W<d83fkc>RIK&-pRptoT~5TJ zON$YBfPrEUDKqj)!ds<!A2Js)Qr}Yj3^J7JC)dX~us@mt5~U?=d%p(H5slm4x8m6k z8c-K`EZeJK_+8n&816!@g%7v;!*)|Xy;#bIAFR+{ZV}Uuqdo*6_1d==KI2)425L{U z3q{X%gmw=$1G<hO&VLwpXNUgHbnalVHYv4ZAO+K>@tcmAVVVa?Lc=>nWB&^)M-RKZ zvUZ-L3_#t{xnwLJBH|x|F3>+p;Gf64;$9db@xt>G@FMIX!I=Dt<(cQPdIBaks+UnK zqg8d=qFf9o2?YL^*g~}46|LFemj0v5^%W+G5X-eoEY}^9EBg7s?%i%gEk%^sAg!#U zbJ3L=3Oy8xejLm#$HeZ1no-xXP{|EQ*@s|9+YNR!$_)tFN5AIe-naoNSZIo+u#y!R zY_bA^swIM|b)Ay2{A3QUJqgtUaFkpq!D8MNs&xUx!tq-9I7y!3cUt`@!Kp%G?6~;) z5MF7%2FCg22F8l{WaulrfmJBre1+_5)*;mvnnds2<uF!caJ1?g&fTmQEk{VhDtP2Z zb>*IgQ|+AXLR{R)G+!zW(?sbMP#w@8K;8-Im7L_Y$V?JA(;$Hqt;LbRavoV5;xZVj zGS20C5|>pP5K)kD5wbZ764Vk`un-iFO6ve8$_xA!j02`<D4ERBi(<PXsZZRt;gYy* zg9ChP=+E#!5TzS}T@CG_O9Eq90~}WF9WcUT8!?a{D{WdIC<hIra?l~qinG&Q#^7Zb zU{ntf3PJ;+AQZ195<SXiCjB2+u?h7wB#-lD7v=c!9RB)KKqxSGqmU@nNEGM_8{Dt# zl`EeCB~YS|+z+m_LQXW7i1D}nM2!3%#H4@0&PJjtHS1nOI=MmIF7)cQ<XdyaGAlGc znytyoq=T_HmS9m%?yy%vB?>Oh65!Izt}I`MVput3rZ72oH)N(Wd#?SPF|{wg=_}R@ zlsGJF&)yA%FzBEvYZ?;{<V;Re>N=bfQHNIJIigYO7n<v|(5nc&jU?)e>6k>J{dmQc zHTI<17ivJvt#-_0*|j}P<1NGuIgNkI*P;&eK?1I`+7~+ff49Ts3z)eVSx#rqEV9${ z9WL95*$zH<ASZ#;PwG0~XHfI^PBJ=DHUz0qM96>CfDjek<-lfy3aw7xASv20kS%0k zYYg>PNO<0-gy(jcFBB4<-9D$8?r1+&PKi^(k};Z80u-M$*u27i_BV3RD^t(-U!h*0 zp(Kcl+;!|RwT^*7@s7q@LO)?y0Y+ixFbEou@tU31n55r9QWJ!`nXRCm>U=RLk+3=m z1(*_>irrR;Q)*#3poJB>hRFq>P{UG|4`WGPRk1?JO!Vj}*~eh@uLpB5Vf}Up|E?hE z>K!9IOcW(5Bs83!&-X=fcXq&w5!4X}cL;SvCm#AtO!qk63)=9pJn}cqg;T61Wu5zh zRsckf;$b0xp3d^c(%%DnToq+`L?HtNqb;%xMYgVdnuxHmyqM<S0PaAlw|rUi#UYHj zzryt@(fmL5L2(avV4w7D&?`|89G3SA?+tN{PLG!fB><GphTnyfqr}%>cts2HSY=EL z9>B6M#pYku0!oyl16U_(3!Mb%mMz$by@M#oyQbF`D8hbSY%7%7atd=q+2)om2OxE} z<VUE%SeFgN<~k9?+K8F49OB@(ZT+LCu<f+h82Bmo_IVDi+QDn3g4pVhkc$vB2oeJ} zI(|0A(J^Q(8|%-L5~z@c4eo7(phyp?QhfUs3W*aH+RXOd1pqqR_xohgK9Ci2;<9}- z#~8^Hdnwt}K$<^Pi=@3T!Cx-9LpQRTF6FBOS@uYlEd=9JW%GCxCFJ7)`>Uo%JVp(f zg7I$Brwa;MH9;e_HKd7I)5Zuc7k=AS5dh{3vh_x}Hgu)As~~EKUnF9s>Pp=Mh&PGe zy-eGiPz&}VKj|tFJctla!~Z}c_%z<kRSH9(8OqNCSRy7VjyhiDW?;Xu6@H!{ceZQo z`ZFR}JE;E>FE!%OQK$&DcpWw8geHiqCc+T!)S9#W_7+_Lg)aMR7Zj=+f{?D{s6F&> zBI*|yg8R>2pTB*GcY(jXpLdwQJ=L4q35L%pD_3fN%)##+ch|$-Up($UfslCJil@PR z2;6NCeGUdrHV2o6fvvKs-v5r``5%C6lohxT84V=wfNLxn3FC23dp=`&2T17#&_6%y zx`T9f0(2h$GRN<Ytb;hu(E7su?wuW>I}ro9M(4@)AJ7v$^YWuG&m}J(V492Jo-c|c zf0I<lING~Nj=biq&@SAstZC8{51`@V(<Dd<vf-fz5-z%Jr3MVjivMie+PO9Os%;aR zrlM`v?MK_hr`fh^fh54P&}v&}+ive&Ibg9_e=o`bUDN`^c#Ve~HiV59hBz6#$F-98 zNXO%OE7s#RuLGtyRob6|^C3*Up#@N&5ZTkl>u=afeC4hX^@y&xqFc3TMzwXQ)<oe8 zbjA10`v3K=$dz3&1`o1y!>dguA9roy7RS&@bYJgX@c|I@U+sz~oAkl^AhrGxYQWME z$^-fv%Tgov>Ed=q3_qv@PC(`yPrMEzq?0dv6MT;#Tpi&&v!t$qlZ!Z$ED%yd!6nPp zQsn_LFXH4?ze2@(a2fpa{XpK?2|a*jXs>YF926T2G{^#DQMrK^+YnZ{x_VhhvhQkb z066>ML98@rZ#N4iBVQ0QNq@7;|97kJb;ATsaeMabdfFeP83#>VFsgoqw`2@?hc{LK z5hlE0JC}+7zF8*L7a<(RgNIjY{p!DoNl-bWrT&{hFkVJ$eyURKM?>haA61NdP>$@^ zaR*cXqmg&l=}gySA7;ANG{YD8pE6z6GnuX#M>Ab^JWrj-bX|q;V}H+d{SU$p;Jx|X zOjpIROxNr9{RF>FZJDkTgk|IXFL?jy`!L463--fy!bUC1`{ieuuG)7pU0YGsKR?cN z{Tk&IyoOncH10nmO%Tr(_{`j$=}Hf0x=y2vZ3i=5lU@f*hvAd_jZD}52Qpm`?#*<q zM&6twfD^x89m;gwxF7Da0Gl1ZX@ARf4gNIKHN7>{_2<84y7F~A@q6c^OxGXr%=#qL z<pgZ+<L5)VpWtUho?ZAQAkUi5QOBuF*V2EWe!x5cbzOmavrzAE0N?Kc+ZxoHwFm7- ze@#XFT*N<scpdRa5cdG$X1$l``a0^Gi}ot`9Y7mb0G?fcfvw)-nXZRU<B7icJ^J7g z#6N=XJxJe%KB@++GtrhEC?^SheG|(38T#jMDE~o(O??~VfpqWSxd}gFmu3EZt8IRQ z-D0;{Y>Bq{{6CRqiIe8r=i8GVeflQNpFiJb>z6p+*?)lI8aN17U>Pzv$)1FNb~`^3 zEh%{5JrVy6nLq!M`L_9Zn?FA(;ZpqNKh%H{nJD$L`In2J-u?__L|SjLo#Df-m_Ps0 z;e?O>(yyF<m3;f(`8y&h<LYa!wT!$jGtrV|v5dO@h8r&(ihrYT;@_cP%N{c}De3D; zH;-et;9m}Yx6Dt<O&Onpe-j8MgXfP(OuF^9ynMV)ESTg@DlD3O`yF>q!Dn&F)Y555 z)5~Tgjh!i)P;O&-{7bAz95KsgyX&sIzG1W7ZL`h4=bqUj1^z@|FlKWYI5#P2tkEa; z-fQ{hec!r&{<l$U5{*h%nz_D{mX?;}`R=^$J@EY>tX>41i~T){Z~m(Bdjh{T_&o*u z>x&<soZHLrOvf)DKZd`I-}9IUmG}v~q9X^`&$$ot;RDQz*f7$Fzacyt7ITAD++U}? zzQ$&E#0vMqxDi|di*>km*{*C&*4otBr=+20twq`hUi6T6c+Gj5saZ76JKTSMxKjH# zO0GH2o1VDdj=yu~1PY`ntD5&IlF;7p?;eUmD^&%yV^YJvt~r07NW2(-tE(awZ{Gq` zZ(-a@asRtO-kC)}Xd#%?!161xArnpn+|0P8`kC`WSg{TdGizuHQYu@g>VYC%J0wj! z_|FdYrNFAR?$=Xe!o020AbZWZohWY6Jnzt&bG!(+XqI=N|6DG7m!0GFSf%a|T2`q! zj4kS(O0=U=b%;i<7LBIS0PhdbQ#I##rNuk-YTj_!!T0|1j!SZg=H+Y7ZAVb}cQv0J zz|((j(4r;EmX$4{6@hv@y4MmKjeJ-0mf{Y=)}McH?Khl<>%rUV5zKQsf(aqDc9JpI zAZ7=SbP!|SIu1i#<=8Hn2!anL0@khCwb`fYE#U58{X!V+_9k)o!|?7%Tl2o_ph0xC zR@_EAh|b3C*RwL(6mQzjamRH{APRkM%xvd)hTeb<FmNyZpP=dZ-GSx+2%Gtjc=<5G z-^TB2h?~TCPLG&>R;x{5B@CYn4Zu7wHhId{a+|-YZ{r8{ghTou?6+VXCrjB<Vif}1 z+!ow)sd$x~t1{`WxpAV~a{FfMoSk25Fsz()BD_&PgtvwEIXh8Feq1HL<4%RFbSA42 z-p6wH#8eZU8+BfmkgwuA0ENIPgz243*vmi_FlD1`Nt%p}q4N0uMOQ#&;eJb&i`V^O zw4rVlf@n{Imd4<^rKSPjzDJsqk{}e+#MfMwj0CtGln>+m4sRtGlv#$|1Cv9U%u`dV zFMpc8{I^nRA<2&G-pxfeD@(7batJNND@9dq$6QoklmMd^GC>16&)c^-F5l{L0CgsQ ze9p!1^+=}c75qNMFALvO@H2ZfN<Ti+-d;IC+0w{HFS@FNdLuTp7&ej6=pq;<Xa(l5 zq6BMm0Ra@YhS0#=Vu$x6TK8d>*1aKHw{M#M%(Kzf#b=($?$hotdvF5=Di#ao;#$8^ zO_d|`0P3gz(#Py<v?4s81l?`i)QQXXRNfp6Pdcy!0e?KS4caHP7Xwp$wvX=$B8j%w zz{NN8<=hwnO_od$S&?4Z>hL%AZG7LJuvbq-Ebgvalu0w&a?eTcpu#MGQui?m6#K{! zDNDTOswfK65a$qk%prE*{^`o3748VGiJ_K23BZH3kW(v*BZN0ufEm7)Fs3V8T`?ej z$mSBnOJToB6b&mW2b8)cAf%xZQpz~BS&<^9VsY^mRY75Pw=`*xEcS@uG<luQ5gF^9 zJHr+3FU7BeB4d~06P672>LE}Au=*T~7z0<herAmM>aSa~Tswe6e74}}#Pj!f9>9;` zx8mExFRf-RI;uRdpl{<x_JotUHS6$MH7rjR;Zi$K!8SwpL+1^(!nOO(${^N4aZ)~K z=SAnwmQeScKTs-(kWqb>S-sE_8z%14C-KOvX(ukv_vP7`)!LkIvm&4q7(pZ;Y8MJj z30b%czZ3ew_)(*3XFccY&U)hJPSDG}NYM4SA7O{_dmF#M;Kx1!u`wvkqFGoLkJ+=} zn6_>o9@!1!3axXLH4QuCDBNBQy|@xlMFbFpG@FD}9D;Q{0V{_$DD+{8z2+=8$v*fw zz-PW);(!ZY^0FJM-%r3za#4}Qh5oqTdA7Er!X?AlBA*E3RGXtb*{~BkD2&qT*8pWE zeq-?S;)jvNzXW3?kQe~^0%zUAG??}{QNh53Gr5loO!#)5DuN{@RQSJ0UN)G7PHV=s zQg*2%0ND-ANsbkB;5%knW}w^#b8IkrDeN^kmj|ZXvJT|cgw~_<#<RE^e#iOTol8H` zd>v6Ew75TRV3dKwCVJ8y(Mnr6P6LN))9o-DBPj0Iux-no=%~unX8h1KXLgA8)y6w~ zLzOKP;Y-4i+g3$GQxDnT50#tfMpAl#&t33rKrEj5`U+H%iidPtD_}tVv{^)lA?R7{ z?G^5RygT0yWA8&Jz%}7c&Ch<TFzkbTk?S`*PJ~PQAQk!_0VDBZ$?%o#ep#Q(tMV&~ zthg<&!D#FvTXS+BG@d?(-TmbH+lX89JLK|vMC)5~7PaJ6VOi`8ML6Nsp1u()g9%30 zA+NOeChS9>gt?sx)ptr;{v`4R?A3uhTVVWhZQ@8ZIWX6yO&m>=$4{(3hl9+1{DNZ( z93B_bd<yOP6*&-?FmWWzL|d0Ll_vh?F5iUrhX%|Q)=Yq|a+#@eLDM_3?3@0G{h`TP z0(1{hsm0&ekpN#LaQp+C(=wz1Avp<)5_5_>9v-eG<nF}l?2d<10x2SX`m|Dg+Lk1U zGMrF$^Ep>*{WSZ}RQr!7!k_Br8kz%=|H$a7eAE7#VVh;LSQ_>lwplQ)(l(3L3j4|! zR~TN|CM;+qsLuK#6tFa?&4zQ6oGQn%TZ|$k2|CiX2$CS92#FeZI@OeIMY&aurSP(& z?G){gqU$~^w9_iIZN!LR4SSydC=e+R{9zMbFGe1cx-m{3GG}fl`(xPitKW4COuATJ zFipDbQfo6B5L6bB&tPrF3#d$(U#ZP_86y^0l~Iq7awOP=PbAokPyWk(7nzx)q7qj0 z(!oSb%DBn`>wqr$Zbd@o!(wM?M%jGT*TOiWq)>f5qhS6l)P`VGa1ak8JyvL@XNX<* z#H7z-`UV7V=Yavtx~A((aEVKL(B!fB%1f%x*?fIH4=~}+5m0?D!K+lCvoGrFnZ+<( zE`kJeuvw@#*|Q4a;UDN028r{CWY1y--CcbScU`K_L5X1)S|Bb%J}DXjvcS4=pL{4X zaUEAypbNTi3<mFez~mOVXk*3p)T8jo*xH{#5o6zQ+8=aiFN<z6`W*#v%x?+2kg*G| z7c=G=8{)<s(yPn5I{}SAqmXMb4C4XME;GRrc3Z8!KGXE~q6t#EM>fhxDKJ|l@CAla zw?8d~W-F7#^>(3m0j9(a)_rP^9rg(?>5+vW%>_<7aG{&`fU>V=9Y^i;m}9~z85#N* z=xMSk`}I3ep1>v~ZDrE`!=%QIS0?QvlUCnqM~Zz+QH>PyGWF5d;8Ok3d0E6$eFQ#u z*$q|+J5lQj;n9m`?e9jGGMv(|z-MHEL;x^0m($`!yA@@-?nK!cNND1qodJUp5QBr` z7#1Nh->?4&#hajyWcbGj*OxF<pkZIn{R};XP-5aFV4`nIkDa;(d9eAqk-H-8EwS_J zg<%jEtp;k~9QK4OJX2WygD78UaN+E>$I@>Wr7J6TF+mSC?1|;-!PHZ|Y%S7?og$_2 z1w9sf9Hs;XCS-g$CQt<{cP~15F(G~x%%o_@0BkVe$6Q)03J(~c<jbj9<{(Rh)fU%K zZ#4BOIc}EEOq{s{HOr1q^*qA@e}DqV_wgR`?BdtGX7Pz&t-`%GVEDh%fK#mDJakoK zarE0zxB)s#96ibu$B<$>8zN}j8lW6?QIdTFz>Idbm{$CJWi^XqntVqm`p!izNg3Cn zG!uP8s0(I8Qv^1T)ZY<RJ6QE)p42I*`kP3M9gBC1XAD256B4qQ0+Ksf=0WkA4wW#N zD(dU;Fj*Fpk=qb)8J)?_;#DM@!en+NgYwY}R|&IAOpAlz(^Pzuh3+*|*E97IP}l98 z3!=~;G1-g^@u3~n8~FL8Ae^9-4Zs3z4|jMcbDzw38DCZIiK>j2+~<uf1dF-Dmi2a4 zV@-HH(p=9!jbGRs+re1Qu~lMUZxk86-FR8gmESmD#sX)hZrODkUO*u300@3^jDNAi zvg`(}RDwCO6Rz-7@RdWj*<7e_4)922R|BdHe_h@N5g#VJmqg*USdGeYEyO9-Rf9>> zTJ*b6yr2&luWEFXv6B4oGFbNoB@6uy>!Fw&>6{z}h}Q!|>#}RL(iG8?b(jj_$p&mz z0h_%Owi|nZO^Jc68&GoS@^BqdgEidTW~J^vZe#AraMFFkJX<M9Y`W^j96WZj@D?ph z?8;o{fPWIT)3wqli++Ru5x_fAn=aw~6B30>c~f&p^<t|4I4=g^uWOP$kt!FmPghAC zQ1Vq7*DUVX#CN8IU<I^fa+`t2?9I@(K+iiTUK%Raj<U~iS?~@0dSEA)oi<SKLx>Vv zZ;V50=Qy0Z)EI}WxzKUNNY_szDQ}lv<~i7z@Q|6X1LReZ%6yQ@@*YX$izoo}J%`jc zmbyo+w}7=s#una_UK~Y;2hH-=8RbK$R&Ea$pptuftfW*{a$8R%KE_hKAn<64qqC|c zv#Og=m2gs#t{)CZBA~#Rd8Txxd+!pXZ~Anm>)R^G!)2avo$0oi>D~v0m1o~_>AfC9 zC71oOwjO(bshRUPq|LJT7b7VM&}E*boi)rb(>;cCqVw4=cl6jV<3#?&*ME7xh-r5P zjRM{0xwo^jkB1n|9)!xc(hBK1%@cLyCSU(MK~+}dlimE1v95`Ty<Ht0ofv&S2P!(_ zt!U|!ot4isD_=tmUOEs-*MEj|6S&<+(p{ZNZ!?q5W72<@CH*mK!C0Bcvfw(M-I>Y< zWFoSp-6N+Ok(01kIgI_Q%ikDL9lk!L`b|dcs*HWux(G+_*Z_kiz4oV)CG|Yl*|hsp zj3M|DX0T^9SJ+4J7PW8gp!gq$!PuyuY*YSl3Gn4R(2eg){rJcb2mHo>WWnhR^bfDl zcG55^^s!+X7ikCN?!?``qhTG^g3-HVAsvX(cFH*436v259ZZ=QDb-t13+zRQU&0FP zj11Y-aFZbc@f-!Po>3+6vD#kSY2_J`mF&a96evo&lze89roddUcUrl$Cw&sywjZ7M z4%04S0$%b%b=Js2dt`_mPy^!B@ZjvjGLl|!nK>mK#IDejhuS=~tdh$09{oCej?2X7 z!YBlgU&MC<clb0=XoH>VPLSPZ2Be2@B{EtzZT3!l!yk~p753v{9W=+6;vE%hUz(<+ zO^ewB{mas<zJAcF-mm|u5lf^k`?OZ<f~nEE-H#<Ly{fL^p)2NDJbCaPgI)f&ekwW= zMzIbr?fY1wKN4A(;6DHhxv<=9T62d-V6gK!!&?7X;exs5L_Rspks;&IHMxnS89qcC z*78Dy3p=KM+z3bypwdQl1@1<`&Caya$dH!Cn_M)&<xTfT;BcWVGUOOSUIphI3HPsw z*ifu*=&NA$Bd~f2$0a8o{X!6`pdpZo3|Wt%F0Jr%aF{*p^L*??g}rPytZ8G&&}YVo zv2Q!ah9>Nz0s^x?(=>M)8fUM!Ml2B^t<M1;JdK|?wDaF>vH}<^wkha_RJ4}<P11~K zI-gnX*rI1x8b7wz1P``D^YVcH4{*Gi+eOi5#^pE`a67XPuN-iTBYYWjT(S=<TU!uR znG0(PB1#*O>rkF-f@I?=WS)gyFqAInX{gw#C1Ih-wfa8Hoo4sF7mq&x8t#~t+K&JT zE`tW9+5<B(*pzg*HAz!lT9XQa>w!p-Q@5a8*tDOW-W_Mw+L0YYHqig5firvc4X+BE zd6%9HQZe7sBfgYU{ZSM`r_3&lO9g=Khn7|^Mf2h1>VW<<z5pMmXF8{6ac64Z$Kh*1 zmeOITJ`LOU$pmUD9R;ML>S&+pccTOv;g<*xkdh%{U%mqeNR;l;^-|0<xuOQAbE}(E zvs{PpV>#~|Prmb??XphUItLx&U8c>3C1MQonGee`!WD9WwJ);TV@EI>d^IlrqCa8e z-W6DIN^|ARv3sx3nm`lU&_?u%D>4(dg`L^~3JOCTm}9bC9SHa5h8wn^fC0^HE=-~M z)|Tvs+#)AE{gy_)9+O}Hw&3DPXB<(iO%&qC7{nc29fP<A2AlXx#?Vd##!t46&Aea> zr%}>UAzFBd4m?mgQ0Qwp-)Q$`YZLA2Xz=cabN8T4#DV6j6YZ$U1^+huaG`0m_}@Iy zVbzZ0p7b>U2cBZNNQ0@4OVZw4Z33sES^j8r5vQkm6C^kB-L#-1@)juJK&@G3^&K`Q zdrTjUdMv&VJT447s2Jy+e#I|@q_X}^d>Hkq7B$cAZ*WaG;h5oCdU9uZWbCSyIJg<> z+I5pFawIZ#HNJw03}X`+@}vl1xEZomgfQF;StmjmZicKEAq+P|Hi;01n<3AL5QfVT z|E~04A_MsuOnlCGi#cAE>uH<66)pgL4lG_$XUjM`gvejyEQJ0d?i~?i3_o3|)&2|t z{#QE~uGFdc%TdcdT&lk`0fXE^J|f5BO@y<*@O|VYAQ>91AGkFfkp=j&Ffj#f$1`Qj zz)}~Usbh+ZSwWgI5|QCd1c{0xTUk$J>=cmy$dG&Rm&ifk&*O|xDjJl5N&Z^_NClKf zH?SY$!L)M`i31a8Gzfqa%y9xtOAMGJ|5Y$qPmf?SA_mOOK=%zC+;}kC0A)8Yzc;=& zFl#3Ki@nKudIXaZF<|x~n8c=dFyHJ6%w4&?f%(q(e-TX9(<7LShyjz#`37QnJebFN z0&`feU}pcTV6vVb!DK`Xm@naT1L=SX=1&mdfAtjpV$kdG*O)@U&4su0)|;zx|Ha;9 zJw1ZSh$xu8)D5H(*t#nIS4VQ%JeH(B&KHfRA6OluoQ-_p`hfE%ZCDEEop2*Eft1g` zqXT&@-ldWNM&8nvGXV2VYvJk8G@C&`p$6k`v{gbv@sF%MhtAfV1xt3D^0))27jV)S z1#YLQ#qD*wsjUMIfX33u8+0^ehx5i->efVj?QoY_ruSQyWKoBaL~+Fw;P`iliSK<- z(p&<;fEXa)Pp{|tpG3MZum1-z^=oo%P=}HH_;-l8>>Uvq%W009pI`uL)^jt%k&O%_ z6`f6Rb`YN}Ov|~(v<zTcg=rbcv^R;gL@JS%2+y<(VA>C_Ls|whZK6oakrio)bxg|u zrrpZ43}o835vVQa5Z5&<OWerekBsFy6L~8#w#%yXmbODj^1u`P3j!QWG?yRfP`rd9 zcntELz|XjAQfGE(gH~&O1Mp?wZa2^GV*9(ez2MMUf0I4oZR!F4sis+!Z6B)o+HqJ6 zl(+#tZNt|E6V0_UJUW<Yu9D%5nr2Z=aXU_*#V!DBKe14thdR3ruBfiY_5y2sP@HFh z8F&VKd@#?!btaf6))wJw6MkYM+TNUT%ckL!5X|sNEv4STPi3nO=h@H{4=fZ|`uBO3 zX^|nbz;FOWt)(9H#8QNwfc6&fnC7^xxw%VU(q^|wf1)yEueXmsWUKV&<a$39AgRMd z&muDx<~%aTc*w<8!et&ade#EuY5JOl23x}UhVyA(((KTWA(H{S!OrPqH`qO7G6dS; zDFzZxRu?(q-<7g$MaxYt{l#m;5%IQ>+4W!JQ|nLc*~kLs;1o4cCS1jsVu!$3{V{y_ zCy3G5C^-~!_`RwA31Vctihly@ws@1|rgPg-?w!Vh=@tY7@RQR3uX<A@mTYfUWURpC zA%be`vUl<;*i|a1&%kN#72(TzO^U<&ZM#^_eo&8i0@Xu(VwQE*$4~Y@>igw2(fKCp z>m@1cJHh(qbgNJ6&yK0vy@5TWxEs6DOTk3N1PX2?_M6i(_M5#E`%REyzR|v#Rw_tI z|Cz6WxPtM5h6h}DU~i<<(%B6(OtwuKR_fAHwVmqIZ3wT_;5KX^t_#9{#gIy^)K-~0 z&E`}54R(K{9f7|0vLoTdp%MQ9cso&QsdKk&5=+>55jh)>v%%j&sl&s8Ivv$zpDqp5 zox)40hZGpQaToXJ6Yj-43Ovn-x`ui8D3b(iW#rP;I)bU~RopG}Zk!f*%a08qMC)2W z1UG`6oT0U4eeQ3z9XjtnZ(UYc>0f;Q7Vm8(;qlq0>mt6d%lbrhpbMu^5oReMnl0<o zJ`a>&4WfYplp)ujlZVcim+5^^eF{kcjnAjdor7)i-SA<9%LYHJHf|;a*smZergvTu zd%qcruLk(GdHrsEnh_L_k5E#I3+VdopHPnhw)jSD*o-IOy}UGb)fP0DF~nH^gcppo zFZY_3F-&XLO8U{74gtj5(5lRiKw(6!YK60ls<xa*p;X9~2O1y~FkK&09{&}-qScpz z??&~|XXdK05>eTwbF!CR9dNgo(yiW@&H7(%5QpP{dL)!xi%_y^|3hJJ_R@EuAN#e# z*k}*Cv;%UBHZ@l*u#1!ZuN@8)x9Uj<_E)u^54caj^A^{Upj&Up41+=;KJe9=GPTs@ zO~wm}x8j1^9fvZIPLU-AcSLEt$R=sLx)^SOL<0D;3e0TP3gA?Go&`<NGgu>?XD^1o z9=S${ih82Ov1||e4-S%K7oM!(89{<t2<;lD@tUGd%rIV4{g2o!O6?w$3-JoNNgGfa zOzb#6UG94l)9C7&jY~YfXoibq84|CK=`zfX!w8%$|M^}amSTzD7xF`Y`?tK`^0$BA zJICMd_Kx+p-|oHE-#*Ltwa8eO7bt`*uN2)_s(($i(8c}D5cC(;&O%XfIN7j^(Fv4M z*@9?gzO~>8E0tvp7|Q<fJzWT-T+#<+5%h4MWoBvqWhs`b&W}_}U|Fg*j1Ii3iUTE% z?M{rJ_7{CsGWiVOl`<-)FvXkUc>qxnm^7fD?@Ouy@4&#ERA`8y0__W#(0`kyDoJ`g zW?^~Aq36q@Qd!95p0zQBI9Ui_NfSkUmEkqydr@R!Be5`ZEWj|xhaA4VbQzZ-A5w6a zM_*`2IZ_6u@hhHXCjPh`!91goxb##Y?_>i6?}|#rY{*NI1*ghKx_qRunx4xySc-V) zBv=+~l2MJsvpk0^Uob;Kvr!o=IGERS`N4b%e7*!eUzTbWz~@UICSL-dFM-dOz~@Wg z^Cj^4qHxUye=v{*L4-IF{;r^d=7iTPZK6xf$E3=jW2=cNYCdLFDjZ&E6XEJAohohl zBejWXaCpVOB&-0o2PO(#^Y2z*(oK_S3;OBUzU~_{T;&iq^FQsZ{_B+=38AGEE+UiU zKB+8nv;J5D6;_DY*sLr;w|mz22jaH>{ZpKtGx)HtPtZ+)WF%Z1D`tnaISAUT*(A89 z)_?wAZIQCla<I|*sQ>#Bu9U#iDP+FwJsh&^TPjtC5+L0$J#!0(rhk+X{;Cd(vg&Ub ztjHp}{+=xcz@rE(^DK3iy2|y}PM|^ku#-Za#zD?t9^~}%Im>hpibCyT!YV5^h_W2| zPh!hjCCX|&T8y%mT&S$HxUy!7vYdKhY*~4ttc-qy>-r0ob@0(xxG24dEOP1RtTAmo z1#B<#Oc}tk-v96dZLEze>lI{+EK1S;C$_9-L|GZ4tTh)ZYg}Ae4~nu<_4{JWx<`~X zMwE5?h01DuB({xLi?Y)7OJd97?8G>Vvi|wO1=_eit}N~YBa71XJ(igM+J(R}&%L6o zKU}D+8F6LtK6YeLhQ6$`Ebr1XPrVq!?_Q`JXG}SZZ;vb*so%mf1hPfE<0?F<0+y>; zhQgix(b#iF#n-1o-@Qakfx34W_qm%weZe4fbECXbrn;M6`C=A$FqWy);TM=2JW4U~ z4V~<9R<iQs)iD2|KaCyYJJ@wbhKzdcCfB^ak^}|Z9i`=wAxD{&J}RABTXl}bH$<lL zkGsm-SIssxXeDRaqdW!rq~}oWJ#-~)K+;A?PJ1U;W5-l*u@x(w6(jSKM7q+n<lJ0k zQ*WL#*KD$+XJrtw%<L#9L+EbDKKLFeEzO&trPYH|7kga*z&)Ei>vNbam8^3uO5-)A zc>bBP7#!C%lih}(*w+_6D=You7hq8b$tcPlw{%m~^<xj}wCrDMr~4mEvji5Udy}L* zn!??{F9Cnx4###!DQM^<&`k27R3V)=0USQT6l}YcO$R31w%d^qPG_}omASWYs}tc? zXEC-qj~H8>CTw*g*y_Y=SZ3F!BUhz1uril6faLaQ8uFAfPa{PA#`dT)k1ttG3h_Wu zFp^Q$VJR3Auns50LoBbecZ!2yq$Zo~f6NK)5NBW(PYSA(BQ0sF*l&S{QEHz?^!9OV zM@yOD|5jdh%jLeyYv1(_T6vfCmT%x_6JiH{ldbk$--+zq*m&*6QTE-`f|hj^rHAKj zJ3b36^YChvWm)OEWgzk&M*dRkEz_94!G<Dg4<mm}n-W#z9NlA!UWjcG1_^@$-b~*0 zCa)D0WXKhnwPJZTdO+Y?YQWvfO9<z*lcm}b$UA?HqkS};ylQvezQ`3QPovx5sVT7V z1ZTOP#pn>VFhf6prPJUKk$D-mO-_Ti4ZV&^{ma<H&*IIK!5)?@ru2X(dY9Mnx3hD! zmW%3FbgRo?TuV}_W~e18;i=oI!MI;kugaX569aMzQ>!is7N&AShWkf3XMSphDcF-F zLUF(s%S@BA7Az)u4mL<3t9S!#mtCgR?S>e_zicGL$TTx5oBbBvJZoc{{Tf0<vtP!` z_Dy}*?9~_BZbu;B8meZ-gYTAnh5kZ5TWB)#9sR2L5<^_cwx9T_`I16MIj*O^YQE&q zdgikn`-<&zggngW`bzl{1NjNz>}{#YbWz9yw3%Md38fZ}^e@9{IM8OKg*Y-2e2x_0 z12x>Obq$!bxFZMjkjv6sgEj7)mtrc4ZLy#c*kj+r3FU4Lx=)SAThQH(A}xx`-5TC( zGQP$W^S7q;AY#kP1MXw$%u^Mm+DZM_i9owv=CA)&t8cu2nZr`$*iZ^-1ZFZZv}!<h zLr!8k_N>tSg&oKZqwxv}G`7>}P%L5USt50sHf$uMy5O{JoWT^#P^=rJv%3g!p5qzu z5KS|M0xkOft8iLEfkls5V#L5k7BopaQW_{;uctt1)0|$JSZhdKyiU*j-GD^GvHjSt z3RrXGrDFYO)F54!j!knm&LZ8_6nKwJTz%y<7rs^pW?4J!`6q2;K4^MwJT9J&jVHv@ zxltES*Tz=y%-Cpojp<T0wu$f5ji<yjePf4sj@)P$@o5{|`RzW1&GWT^zyknhT3}{1 z^iBsty%SBq-k&>p0CEfqW?c)$E>L$5lEDuo66*7CoF1PHN%t`+7oY6iIVCAxC8xL@ z3OVq@&D@i%8pa4-<@<w72|X-abPU^bgFdoL-_nZL7pMa?_<r7mBY3U&8Q#JzevY)e zcr(m$YQ?+Mk_@f5UM)%0id)nY2#a1;OVa#bBq(*qK+1ydeXJ+wJ}Ac4{bs8`O3rE` z<-Tx&IIqH3`P#}c8bgR5kc4-h4`X{2Si_Oo#?IEyKv9x{rfU6Zdxv;iq5l+boGC8% zvAJ^~NiqcPT%S&~V{7M(jJ;Q!H{Z|mX7Ha5@DDe7T<PF!V`C07=CE%p)H#dn6=u`| zDJ+ZK({V?)f-_iOyx?O95XpfB?r=f%0YwJ#lhr%mzP>#;QS6|z8leaQN!6ve`lZ+Z zQs)TaiWU%gl$MN<{+W56qAhShLMI_LD{aOu^yAP14l&f3OioWuV6?A-mxx)&u=2{) zz2={zO?7nF@caG`1aIB7opYl?2-$zrs2l=0zq3Mn6bgmO{*T(B>ypr%o4jz^Hnvx5 z&OND2Y~)cWl_vn|V~dKS4PlpyneNS|?mz&<$q~3C+5djKTI$T&V=x#{@!_qtc33_N z*l*(PwjyUjBScI6M?PEOx_`qc^mS*aC(LK3OKIVqcHFcCswSv+nwMxzG6(p973J7< zLuh^`ZwAV+dGpZ{aKE=`#x4TNyGd}>s6X~oU3ht1oTd#hwjqPKOCI3sSFTU|zTAmp z2%uyY1C!?pP;AevUzNB#``(40cl(OS*h%ViS41e*>HmdmO*p6Folf+s>`&|j=2@ms z(@PG$8Hp^gQ}rxOu-K{bqq}ckY(-HSLW~fjOgjc2b^a4=K&YA8_w4Ee8Fq?<NBJkD zji_*0D!kV~n0o=43U?0Lhj;JvPiTK0={Gn@g(f)g7h;JGDdO3_VI-cxM3%^zj4R;Y zEKjOxvv^kTxZUNkY{sPg#xkKy6HMgS;`_gSUog>*H{W*_ED5-EaP*s-ph4qn-8Snm z)INMVz}9!n<vK$N<PC(<O^Xnq6DN+(;i{#-EFP^0vnV6o$0;9<LVFN8gBITvks;%` zQE11Z28B}_-$ZaQk&!IQKjCP%WPe5Y#$zHGBbf|)nt7u(ik7?Ep&Udaql!M*$PUm? zFEpA)QZCD-DkCJlr0GER2-=D_6ooM6<{BPM<VqmJxHd3jFp;Z*eB(MG^KvDSZ(IxH z8&?75?XEYuk!q8mm{=n=a$MMRi5xr@8`DR6^+RY{Y_~3*E4o#zlkT3nb>F@XP85FT zC{@k`mThq0I|ko?zhco8ds)(H%<Cwzz@#I7w@Sr<LPwy!9;VMoO|{jlVfiai+%^rn zgUQzmSv_|LX;{sWUfZV(wCczIN#VFls4{XM&@w_|I_ihr0e72rpj4mp7jqT&HPZs_ z;|*xCTC<qeSoiC$U)Zs})iumjo@$&E$d9lL0S^u{*$f_|X`gxHxQ)eSg4<{ik63O4 zjQMtAGI{f#kBS1^Z95Z8WRC$1jIGOf)61uzB@;$-0{YTDE&GbG9bAnQG7#y39vz>U z4%PVH$Rq%c3B69a3bux}p)hVDf{BdasCrAZl2q(gu3(bu5=VoPs#K07=HY2(;`TlJ z@apgG{%1jgrKWM`e_sPli$>kG;)hH<(SI)Wp%0C;;k#eu-s2@kptG^^YiH)!l%lrs zGAdhd0wuzp<&v!P3GdYt8S5gCy=!Jo$BB(VUw2#Trm2{ur^bj!l*9B_wPN4$Hg_-+ z*1pJg@z7_Tg_w8hIXuFZTK`ejGTgt<v3is9{No!fzO#YxuW_9eN+ESv=7eI1JpCtS z1F?q5jIqpCuAf|zME+PE%i_V?kV}SeB0Ma5xO9pbZt%haFz~{HkM_c1l)II4M6Mht zrcxQ4I1=Ob<;=BMQixBtSSZrK$@q^>VBpgOTlom%#!QL@`nY1t992+|=;fF}EEDJj zCPAd<VUl-1%>YX^=7lIIY}5AR){O;LIWbqP(7)!llaiJsnWw)6{Dx{p#7RHQ#3ErI z+IyAXDHdp#Tl=$SH3{-{zi#o4^6OTdC*e=ea4j7k1D63ghM`yKyPV%A+QARJjU#E? zF9LnR+KRRJa{pq0+TXv#VOcsLm~R}h2<FFs&gQ*z11GX}Cw%$wTp*Y)IwO3Ke}bT- zu~bgG+o6rsu~-CNss{N86s43#js%L*@K+n##_%G{AB3dhui>XASR`svAB7(naY(_t zPjPGKm=#bTV%vPT`d`{d`t0jdrU!m|nyeU3G869jB67OG<xu~dse%RKtO*80_UhXn zz;wLR<uY)_bMRZ#+Q%RL0N4qW(J-E|b(TjLY;a}OJ8r{1J>lVg^Q`6iHLxrS!ntxe z!^TG*cARfmA>L^}BCbS1zea)mazY$gUV)>)qv~v22`JS*(^t>u>gnuR%2L&Vq>#o0 zAD<<#iC9Kz9DMv<<6B>!Y?3u!gPh-Oxf2Avb!v~3UaR#dU<tZLqWLPTMLU4$c2u8y zQy8+kC2@3Amx$hd3+A~O3mGmPW)Fm}$u5TwTH;WgtDEnV=<4k)-S{$s)Uk}%K;03k z@<rV;oJV6#zW2t_F3-Uc_|t$t>g;y?57k^QQZ_!x3PwVWOi~J;GsMGetvS>mQ(;~n zbYDrHr9ex_jId(`<2?YfT|-GF`*ipl^YYNCx^q6R<jYVeBvSRGGe*PhfYbHbHF&t> zS4y4;Om&HeIQCNKq)*tq>l!Rn^^BZwknh;bI~O3MI(8i()bIO?-Li2#-*mh|y#}wA zjhpb-JKH~jNi5zO{s~NB@!pA*qG;PQc!!!V{#r4uMb`xrH{<iz7mRp;N%2qr&AWDs zHoFyLxRF^fNNqfnADf4d@KuNrv`}lq*%Z@b-zQmsQ=^^Jz~*5;O=&LoPHmmEQ3&$> zT!Wr$!~Ww+#7DR2#$Z1Hs-`Y5kK|!^c<dO=as4_dLT={-!^-(Ob==(!H5+0?R^2mY zG4^Uie3PH$0YNN3I}758Htl3Zsp@OhZ>|umI1zskRR;>B>VUx;0$JK-&v0$`tb!ud ze!cI90`Y*bBa9{C)avI;*lhH}CcGKF!q$iT8uI|%2Nd~r?pRKT?W-5CB*-;N;Y#X} zH^dD}tdJ$y4cpruoZ*tGq6zMbCb%96#?9}RU|ckTvE*~K!dIHmWlWiBKsO$5G0<@j zPwuePGn(yNtBLkye$cIbn^v0btH)bR3GwYy>YA`jLshQ0755DK3j)2h4JV=65u>e7 z95&jjtZ?GEvu4LS454erAeZlwnjKH#y_)ZRgUeg+K6>ULmp|yJiKJujA9@!44~OT0 zC7Bku!>Z4mOZVA!b<&H^0NHX1{pVdvPh_92T&+!c@tN-1(j#-l0E=XQ?i`ZNK5D2j zTPQJE;5A2(eME&G&DRQqA@la^H$~Mz7Nzb0VyOHN{fzCCH)1{7uZNF!>%Miz%mLVp zw+nQiAH{7e{RlS+hNQGcJl=(~T%ML8;O_L9!H>{h9GGlipf_Kh-d>88cq0RR{Y7H^ zQ(PECx0oaEdEKmdG2UV;9@$F)zmo-Yc9Cd5WQBnzM$uW;5k0){EQ$4Pa{r9WU1H~| zIag>Z7drjj$^?s9|B1KE`cL64w*I(z0e?@Z!LxWHcDxVp&%ONf!guj!?WPi!zG58u z9}_qQ5|*rO?OycHKL)k(c&Dx!Rhm|>gxQN^p74D<JFXjMpb$Ad7vL=h43?m<aUccz zOZ5dCj<NT|$o_+b=E56YN=~@bt?;Zzv8DPSUNg=d!5zk)i7OCu=raJ4;47iTqO9O; z>drn6dGU$LNYk*ykfzNN44z|MC!c3jCf09<V3)Lq9l*DKKRqpE3`%VRrb%SWIIPL= z39#4m^1x!3{<~jsO~dk}tk{d9EA);?%;_!1N$Y383PVEuJg3IZa+Rt7JsO4RCu@mw z%v<{-B=mU3Gj6#ZEQbE4&bWse*D+MY(d~e~O~zrVW!4#to{@%VeSK%9TUm2|T1-)& zNI@p8|C7)2J(cgp9i9h}LAbmOE>A-cZ{@2`q~lFpo`JvmniVD?sr?*1=D9x!=?`v0 zs^w0``#R&_Ac`DNm%AAL^!*<bdljxec@7=j8#;pc$QIG!SO35k+tuZ5SO*C_?ag#Y zuN8L-^wO3ylc)MAB6){CaX+*+jv_nmjNL~jqYP)AddCl=2kafONFfv@ZbLzk6);Z& z%niW&+wv(Kz6&a?m_jPU)>|jmpZtadOEhg4n#Q9xdo5AOKr6u`$1ILmABj&8_Owox z`k}iZahpUneO~VO?=bk<a{a~ilCNFp$Uck<S0m*TCFdWU(<hF+Vwwxr6Gnfg48-4> zaRs;WRwaxT*b?lCzQq5Bw|9Y$vbg?-v&kkbu&@g*7&U6tsA+?W1Z*&%0g?bpU_&6m z%B>c0rM5-b6{uViHwjrD7qO*Qd$CY$OIvHPC<0PUfM&TB5c~;>RkWxRm)58hg67A* z-|v~{+1-%P`o8b~^N;fEbD7JTnKNh3oZEy)+M-wRdrd*QJuNlBNDH>u?V|$Sw0kBD zqv3Kj01iC^Qf<rbtQmUeGFxh(n{3~rp77$F0r|UYZs#Xq1Rzd+CL5B9P_Hap=@!B1 zTjS@c@uDOI>ygsJ^~8dc?i0b`?R~-E1nz*59d3YuDR5OBhDwL^Na=;0KJH-BbUA$i zi?2wj<L{W<?5`ovA2q1K<5#-=(1gmy6&?(n4E1W9N5?G&<=YAYR3v>N?)J$YBl9sH zTO_@j@80KKE$)gzsWI!d-JGkg7)lYy%GJ<6650GCB1N7DF@;|xV5R|BsJ@z_h=Y*U zA6_r1E(_Ie<Gazpm}BvWq#<8p^YPDG%o5I_;xC0pcu=5t&Z3qcE;rJ)>;kP$-dbR1 zfsxOSn-m$F5B5iWkb=F;nc6KDdL7T98ot$*cWWEL45Gl^u^~HgHz%bkb`UF+aUe2U z(9GOHMMi6u^28E|LQz9#n}--~nJy*j`QiVWdKRM|^h#)3CaQ_|4X6kn`G;9uM;{Uk zY2JosJdnmxg0M50<PmTuL+cB$<ON*n=mY<bh2#P4eK@#n7+$A{UpB0}#MDdub(XBp zp?ZEps>#7^MUv`ju>rGf>4q$usZ&*R?)U^XIz#nLfTUj!ZkxrVuDa)O1vl}cF~O}? zPdbZKj!-?n5u(TOF_~u`FqvCzhg*K6$05oems1RX`7;%!zx>R_SSr8%Aw1>D{$e!i zrlIMfdJchJqk$ajJ^=kfvw<iU!pI(^<u#-g8mvD0AgPE)qzHCz^c9Y1q<$vBCwQGl z^&fow{~vpP^RPLp51^{}sIpsPL>svOay-45&I2G1oU$7Gq0VFaJd(<=L-6-fTbILb zAc-a!fq=1+Th^MU0-!?R9<~(Bj#ki|nU+T4kXa0_rsZQaQFl}0iKK428Ebl|p72Uf zn?3Bwp=*id%DC8cWo#LQ#H!}|XJg@QSsd?J;EE0v)|(ajSz&;EdO%G?a){T4y#44z zw{P8k;LO|>;tZHX81!NajLu}o#Ct0`&6oh0ACKatw62S|`|Bs^1thttPP689sF}sZ z(WU?|%ti^ih)<?ehK)|?(E6j8_x@WD-6t2Y{$|6MTz0QV%Z2XZ*Yi3>c<2eGe-njh z^&Mv-@HrO{cM;euU4tr>VpbsGIG7DV>YJj@dNuZIv4^$3EljL$esM$l0-I269*Qw1 z%QZ_+s3QEd&|yL_N}a^1xaOjADYu5ERXHm3W2S}8x`M+~u&=`u-euw#mY6^5B?clB zENzq2KcJb>1qEIfEW}B%2XH{B`R*ADfhQq#u6ik++AnL_IFuV4Zr7Cz!vo^-jDr+& z-V3%@$KdUt##YyQ7s9i+=Gf-M=ESPhsAD{g6$_&ZodTE9I_S`P1h-g!F~W(sFe09J zaJm|}!cvq4<1hNs#z*ET)u|YnoO1b1j7*Ezs{3;W)SX_K5gI~mJ#b=RU2LH<zY*kR zb>lNs*aLNoXr%HC74&#0mIvzZgNt(pr@$CntI1JEE-_InXhH3w4x}ysR?$g6M=QdS zMr*>0a|UbGH&$h>`$jsg{Kg8dwcn^qtG}^IYyCGs2@Rp%Bs83w5>bX*t0th~nB{_? z>G2{k(7~WT(JL2X!!Y!ViEF0(RfWcz)K<c6tYNr~ZX@DyJi$N2%g9DFhOh@(ZD+`y zW0ZK%NQVqLIzgLQV*pscx&xa)O}#X-QR|>_nb-eN9$oO=UY5sl@GGl=`T`rA|5hHr zLT0dm;-bClKjg6LpOTnQlW+zhY6e^A^upG83(hRkNbRb-1^sBw4gXEDdI@MnA~-eG zv}Qlb>NN>-YG|46Poo><%maCW?AaE$4wVe_s>0W>SMujfK^4*Q`qi$3iC2ZNt8iaa z?hfvc2`h?jDB@t^*K2l5vH3g3{GGyI@Vn!TDsK=J9EgT7E^w7>4=%IQAAPW^WP&}o z%n?IGivoNahGz%N^Z1PW1x{q11g%szc7r!sfD%B2179;nPsNHPRMHqd69r`<K{g-} zh77+#hrQ8mnDU64R*s*+>P~Dt<HLo@rdo9Es&UD5&B6$bN6pD%v=Dn(F`0vpJ*M|$ z;56LmbU~K)`vxWpH{z4};9p;I*Bhzh6Np`k*EkZXn~7zJouv~+L^#A})%+>9k>rxB zvZm-Ny=HlTy;?-SNeRAz1SZ7_%%<oh{9~#4l@kf{V7Tvai339D_~)rD{OpiD_;dJ- z@Fa{-<6sgsA<5|GF?@uU)SRm=+nF{=iB3_uEY{F+T?IuBn*oK<Op29D+KTZLDr={J zr^PU9S%g}+@ODc4C=)M{#L;g74z0#B8@|tN$-EiNASGIqXp5GQs}-%%cW6=Io#3ln z7E}BeODd6{tGBjW9TM0^%G4(#ETiI8MJ<wZh81`uKL0UMbB!hh>6Y-8`HfY^ZCcO{ z3T#$EYzq{C6>w|Od!*U{K8C&UU#B7MPJpLkxTD+PRs9fV1qgsf_+81%AhoI);RY%K zFc~sU_3A+8_o|e5%f!Pdu9qEiob7T)^S~W=!t)$BmmD|79i;x5Ms*{AG<C3h)T21z z7@Px0W<p$iRIk)8c3^!8$v6}zHUDO()#t9dG9Wc5eO8LA_AhMy%dZ32IRn9HyRjgs zIaQ*IXH3u_KKph-Y~p*d28_Bb@})R!z_8g>`wX-86T=ax8}VTJb~qo0Tw6=NuDbt& zn9&;y7*3C$l#^-h_C4C*qgSOWzZ2^)V&kA6VKzM3im@ph_|!o6iE1DcaF*#!9oN8Y zvbc|NE+hO;u-Res*6q9Q<1^N94B?#n8j`l022>V%ma`Kr01lAa<i3r2{1R%|J>X?@ zosof$nc;?Z^o5%8{Z?{k1K5A+vTNI8@lxiN36m$K)Z*SMB{~dgGu4E-lF^id7w6<8 zr*BM7FM?@8sT&2|G~p1qqa$D((=-$FLLK;?l-Eb<-~2kH)ms!UQ5?gSzZ-%FWC51t zPyk^;BIRIsv$2rR=E|u@dH^upczG8`n*Z76fL1iZIzw;OcjAs)^;o|~D$ONaRAXR> z*9!}ysVgVCRptMXlZMq?C#17if`Dkvt2Uk5l!C%$$L;sDRwCHw7``6w7em$Ie;|1a zIG_=jb>Fa0EO#LP&ni{!HXs@h$9@6C$sC)6IIh~+K<LiM^Z6LfygzmnjRw<vgBtO- z3r?Mr7oIwM^FX&vA!uJP0&}Pv-$Isx{kWM@MGo5l^{Ya?j|CoKvHP}&PqKx~0ufH$ zEv#eiLH%pJm*1{A`g{$)9?IJNs1LnQVMVs6kjMpj)w!*DO4@}|bPgf+uhF^__H)Y8 z)X|sq0;cl=k3fn%Xa{KmDQ2dzAM>hq9KL%c0pwd(OBd&0_QLkZ*l(l;t`iZtD|{{K z2M+#7b=6&p+leY<RnpP}&t|GToeD}Tq`N}WeJh@>H=a3hX>#()HHrTHGfgWs!qSQe zNiw~@!El06CEwr{7P8kaDPPA;zovZH+CfgsZcEsu%`R747l~~k<cpJij{<kqoqs?V zYR{Fx*L<_^iWZUw;irO8_o}QvydJ~c29eSc^i<CYX(`bzc3{C$-PNE2T@UCzW&+Xt zCYGPzs{^<Mx@w=r)tnh*2RHxxAK1c{4Nc69DV3`CEB|?BoGVG18UE`#&x*ez!FeP# zdR?5nJqPS0Q2{Z@ZP1vSAd)1#9)w<%0rJlZ4(HYeREE*meEZOE9Xv9kXu=9P{_{QD z4I8NAW&~e-8?!NG>7`h0o@ACG&qhFA&Mf;kpmMfs#JA?<xe!d-TIhygEPow+L)`p1 zo*2LE7cW7m3_UcRYpyYt58&Kx3=Fpn4Q1`f2p~S)sbW1Goheo^>g_<We7@0B++Nl9 zyQX;G|3W2I)qnm0By?Q9&?8x$7O&MPpR^mD2>_mqy-eA6WckrG(AkydQ6Ycm^|-p= zDMkbBV7Fo}+1UwL%x#VAC&15S2bVatwTmUJw&zq4aED!foam4g=D{QZ@RN^VU^G9{ zE6$JbvoV=F8K)N)#>*qBp>1!RVsdhof!BcDPMiZ0-1N4_!{4&tYRY<oo9y6`00lFe zl+4pckTEfj>R;ImM`s2%k)2BM7vvvOcfCnhqebSb^>dKcE!DUrty*rZS|0KQC`cD@ zrEbQJh#zV;L%2sVTn2UJMj2XrswqTX3lb=e<LL6wG}-UCgOVQA{aJIe2=IsPIbN0b zhE+viqG`4kDABdgeGjv%gqs9T0(plEh`@c|IMAzj$n=ufJJn0?d>P|X%W!jAejV_z zKBS7Xbywx13t@Y=lTsKD9>}jk!F@ld-(A)gmhhd-tT1rm{B~Hu<FvENDsZX2d<w&? zmaY)Vot#AKE52`nJGMa-GnKy=@hW<`m+wU;47|?;+HMS)34763dBFr3gLn;y5&$!( zN?*zuq`FCpb4YQOu??I(s%N|?SL_=;_Y@?{mBJjx0(&q5)3CrR#*iYE_zEvvNWAFF z<h=!t!zeka<F~Lr*f6uob^^8)ydW?Qwv<&yH7kVTQC<HcX0aB*2GXG`iVmhPU{x&8 zs^0d+m4>a!`XNyoUO57ju0+gG8W*94S%mfn?}=pCSkjK&%B5==$XnK+B^gD}@ZnWn zuwMZPl@<s}J-dNXD=>HcWl+x>2jM~7UGuFlbyk(rTVqv58(;-cN`3Tz1`2vD)d{E- zMFdJoVR4{7IIe*zYwxUlzY7^SR`VUf9pt6!b^*OiEta<L%+kta_)QKWhi$xx6Y&&G zat!-=fMkl5=Q@mSmQvzMj!3uIN>NJG|9@6WOt@FYY96*fc?rVx)p1ooe9)3put?+_ z!>+X5*b5hklj_KWCi=mj5Yrw#YrG2&$l<;fINQ3vk3U{@&-HPYB=_UNB`O6Wfc%%j zl|$Q!yNM)QIfU11B%#+gwU@@^Q=1RIRzV^<ZAq(zDLOJl6&x7Uf;SLk2WUVe^M{O4 zal7+kYaO7$IrbrYRWGy%v*e!W1TB)jVSkcH`rqhxUjYHQ<z1OREit?Sf}Lk^-oe~F z?+}xEbiQ-%NIrmZiB)xC33~80J<g_LGK)-8w?MxtH3c7{J#-0MbqO*hp&vEAM0_rF z-*5kcIv_K_^cMJ@(5Z~FHjD=rCr%d*#Q3?^K-4WD=vFk=3RQgOA6okwnsx$#o%-u? z#+&6>>B5swp_A6NA#LCkr}iH(Qt+c~!+cTiJ*$gwAiqoJ?~VK|6-2gC=Z&`i+W2Vm zC=rf!mqR^lxuyr4t*%;n9Ww5?47Zy5uqZ6WnABB!FN*PUv_r3Bv_UPLFn6egdKdvK z&y1LaoT>h+43{|{>2DY6#;-@99PIyX8TO&k>;B7VPCJ-1ngjo?M-y?(J1e=L8Ky@Q z#G=yyz01vSOWIA+iZOiV*VY&!<}h*W(A#HYAX1$9oq`RNngw+7y1v2uFztjMs{cK0 z4ON|pwBppDXbec%MZtwIdNpz89@N)mWp5VhmRLxj!OPdlTW-bbWC_#oE9;YolC-lJ zs2Pq51PW^ol0{2VjU`Ac3le7PGy8~&P!=vqS0BBKrfw)8a|WEE*vSZv19xE@z>W?< z8M^UA8yo_;U-g1?uV$%G9IOL@?s)a_cRq|o2Y^9D71cm@gxvA^c3nNit%|<;fvy7P zJw-Nj>9S+GiOU?uV_X-7@wV9gY=18`{xJ}4n%9kr4xXju6l+OQeaiujFXvmZsL?JZ zH67;o=>38f`KNuWIC7b0HByJV1Mnr6W&DIyBUJ3mw30AzMwF%YQ!^0eg1jo%b17;6 zTN=Z<q!%M@m2nXOMXf)}7((_NOOvzSl&M_41N6&SN9Js&{d7~dtL`{b7(r?<$tNG; zQxR=cR+2OFo^G;ls{Uw#d$Si8_~d)huj^{dKw9Mof&OYIV*mXR`R^=&^8^yA>olCF zgRIH!Ul!ZI3i3~@zolcb(<?VD#?=+?YId9k<QIj<yUTsW3fUtyGRdQTd=5SyeN(r( z%XxL@P-%77B=ko8(U{!MBUfY-`~wGq-?<tXVN1?W8|gIcn~X7TqsRj*;F@z>?OnAs z><2_tTl%o(1-Kxfitp0pA;|Iamlg)ej`(jA4(ZbPE)lCzx$hK*{qaXMsTxo7>vZ+2 zcVQ`HPSC4K%QO6au@N-iTqJJ-&Pw%z0zJJZw-eCN-Iybt_hFNDBB}d&-%(a~HL5cV z!i1q!gHfBW;4ZxHAz;{}J@rR*Dd8}L4RrA~I1E`h_B8ClkzETNu9f8BH9uw)IT4n? zm~XE+C#&-WS)D7@&MQrN?f;JX=FirfK%U9m8U2WUJ|~>6v|81$uP~jie*F@M)ER|a z5tb?JG{^A7rED`wPG<^v?>BU(Oluvj0WJiXkIq2fKxI1@&RSmeL+rPNfMBu|p9R{i zJtAmh7$hW-Ag}!ET)0CQo;-21ND>pL#+*1OUZt1V`QB?dztETaR2c#WzUT&G>y2fg zySna`voV^AS5>N?U55`MjIsi|NQD00++;p>i^km;Xx`^rn58Z@!}ZH#8*|Xla+ub( zBchw{WI2e~m)8nbK?MlqS35ebOrLG&&sB5L9oS4};k_y@6T>XG&j}oW@<#pW4c!}( zrwjQ*nudj(f$v3D^uu^XFeHcRnSb<f&JB1f>{1!JCJ$?RYn;^NP&cCms7WWjw2N3d zYli4S)FDFjA|d-L==123w5bP%rwV%~$E#jQ6T>S{JPZRhY%hb`j{gAE+&|H{7`r|< zf?VUrWAuU8cK~;GjH<90S|FG|AsGYX!xEV0&F|cQQbJdA2Z3_N1Y5F#pHM{MV6o_{ zU&8{J*2CIJA#Ni48|3TSc=%EMr3<U!dH53CnYm@muf=ZlnN88y7WEss{|WCi^}WIS zO}~}*%Xr_gPVVR9K5i8HP#G4$mF;U}NxB-l>rg!(KxE2|YTTs64(iW9NhoCAF;=$e zwAV!HdB?xbc%D62`u|l2tdryZtQW(ySgfeyjsKkw4fzDySeOda+IYz^%ar-R%YfH3 z+up(ZDZdlgU*^4OulonwzuNeV+u;CpB{YLZ=kmu&`F36Y&u&Ng;g#)>USaD${S&Zi z+w3seB6mms01cbJ-|6}jSRJ$d2q>o-HvKauXX0Udfh{$J03yv083jaw&=Go+|6Y@` z^?!E@I>Q@puShH0!Q*KN<v;8PdG3e=(u!uA6=fpcipih#LZl9%{;sm^h&K8yce}2S zRX`e|>v8IOqz>TI8u)LooC|xhrMYJN>;1Gi^E3cgofaL(YLYslP|_`a2Mv1p<$uO> z{ei5tKA=8k+eKd0=oPI?B%QA~q_K@tQCPC$b!_7-youEFJ^x@lWZosGiqta||H4lY zoJhUTe9kAyjMP71K4Mxqhi()2hnn!G8qQ6iGFMu?(w_^JE#N9wuiY%@q>CI~DA^Vt zh;nW^V}l~~EQWu{?$Qu>F_5@kAVedk1uzNkVT<{xY08FeoO(OuW7Btg_9_<k%)&hP z<M{U!{*i)M^uq}g-uy=KdGcUqta}scJL8GLFaW}gcVhrBJNU#uYbX-hqExdvD`_#L zR*ySt4N0G5%O&+NKG3PE!M;{z=QWXP-btCA82jf3YKnKKLv6VApE0;ssV{#EAraiH z4y)IITq2ip)iU-T3tdmKnNjb=rnqoN;5&E~+(gEgO!+`cVEzaO9djP+mm7~2>Mug1 zaTtZMm$F}V!#Y4$??DUD%MrODWWc8@%<&uuoy<6Bd39iSjs@M<6+F6j0Pjxw=hCy$ zSelDK7tD#Jd3=s6&80bfw$MQOP0mEzbCa}@!DZo5qirR00DCip3gQAXXQVV+|A@A} z837HAGmyBfg3B#x<|p<2=fLZrk3J%QFUsfq(<Wv-><DKyKpthRewpT)ky`m-E{y9f zI72&lw%gLa6O(ZbZHs0ZX(l^e<Osv2zGe+Fhf+h2^B3+5j>XUOOfX<fO|u)rX!I|9 z!|#LYwD1n+l6>w7M{;MF)@azbue15D2#<+bJupm9gdyc>*NxHx(XV@>nSjJdohavF zbU16_Jiu5_;7LnpqnARtTKMcqxWop!>mwy09yGo2l7(l+<#g&X#4n8JvuMjxw>~u{ z*=?`Gp)S`Ie(wJsCZpR@>ifHa{4Tp2-FXbE)V=D&H?fY6i+lL`M`(|s1L`|v=%u5q z2`R5d%D1NB#rY)-K}q=bG)u`a-r;F0#P7Y4>RG^WV0()C;T4i(?`1L{YMOkUcGG4a zizx??h*PAd4J=#esny7V37ln&nu=4iIYIV@E~is3UOYpWUijhSN?gze47>wQAz`cW z22i@sX3CbsBeRw}aL6$XOFjY3t$>+|dK&WLrnW03k~XTyeANymBi$x3S!!8Kit&y7 z#>nV)-Y)NkvX<%{f`8gtsz1ZiDFM8srjUoN2KwM2w@USeo!9`im(4$TEj6Q^QXEaB z=u1DyISkM{S2RY{-P1F&(?)*Q0Ku_QaNr?)HL({_vg^@lV8qsHeXG9@oR)cBQY4)( z1o&PA60`Rjt*w=JorqL-U9{0lfR)6&>pJn<c>)IqTrgrzs%gWy<3;Q&an1{<6Fk4w z;NM_a_pATKd0nc2r)5pWr`=#rU1Q!14yWUrEigBd&KsJ`s8cW4u~5+4PVF8m%N}BA z^XV1qNu2clXg$$8PyJFqneK}I?AQ=GDZ+JIdO_~dKaq6tW<)Intne9#42C=l*JL#l z+1JuZ88AoE`HF3hq>EcL?$Dp61ET8ptGC&lm6ra>7)}kJpSnJTN`{Ev->&;*yhA%` zA#ha<iFu@&E}Hx+SL<(=z1e07$1wl+$FXO|^qTB`!G=HtCjM@50|>D_>;c<DkG4IW zs3LzB+e7)fb~Tb<V|u@)=VJ!#eui(1!F3+|K;F(D)+gqPJ;Xe5j|#k`%@ZHNhu9l0 z*akI9VK89qP|@_x6)pP(Egd%#Fr@B-^17?*rL=_w5Lz5DhU_wRoeXzww>m@~)YCWP zoF5$GtV2@}D)E-kCuxak-+)WvrhP*H%GDQ8;>Oh*`&y!SJdZw}9L!)y2SbzF;BJT= z$dg+wl}zVoW|oSkgEQ=6?1`Z3nIb>JJ6cX4deMpLMF)X`&6SDPPjaLZ<Vg^o9<1=H z4N%BH=!uz5gONTZ$0@2>#C5y`w&?Wf1uupxX&oqKZ!Xd5ib{O1aDXKCqc<N)s@c8? zL@vCNSFd`0ub@6kG(!j-$Aqc7hNVu1==Pu&ICyE3v^FUXYCp(yU!p1`82j&!InNrN zz@xBOc=yt1e8TZuuG(rQI-qhu{@@@3iJCW4MNlM4r#gMu-_9?cC9g#$Gr``sx=J9W zmb8Zop#RbwU6(2~tD8&O5p0M(6DfIJ2BYMt_7i*??-+CFpe{uBE6)q_50klro}|ln zDa5y;%PTpa2quJ$r_KdA@1834E0h#9`9ou}8!US(%rddloRbE7bukL1DKLxC+Q1I$ zZvpHc8xc<m*&HD2*i+<K`wW;BI&nXk@Y5!e9|{OJerZaaqN;T1RFBdI%YMFQZ#0+> z6Q{YqPhQUTu|Pn#rH(?0PvfeCI}5^13{G*?{TX-0{>bw98af^YVRV;!Ky1f5%r*3q zyN<;|FLTv|-9_ot&~mPsYJ(TgZN?FFP8aLp0X3=|-$5TAUL%AX>S-3KoKMRm&)3D{ zg=yRCx61g;n0^-y^jd?7<$DwtRfa{~*A{=g4Ub8a8MkP^(Tj^Ywy`)n4SY2LhahCP z>&K1pcs#+Ap5#u#@h6-<^xuEMM&91oKw1k8p&dPh7tTSASS7Q<+cL58gZapeTXUyq zYwo}wwKey~EVA042QrL}MJQp=ZlRhk)2RFQ^_ptlgi+=6?t|a8v^el>LX%LBNB#UK zkYFAK;R9yoLB`-V4hth*Jni2xBMmI5>>!s2yDV{mf0m;c3Lp_Uu3i(->)@s4q{5!9 z6!%($<f@fHe}&D#xZ|`m99t519$Pp^JCE&G|8gKGLMehGY+y<=05^gn>{rjy>}b3j z;W&OO$Y>|cKff2g|D5gxa6ZO*=?Ooq96R?#PY{g!Kd~<sUXOmL8;@0$@)WfVNM+7x z-@tET&^@@QDOmB6Nc>nnCW12DipK;FSo|)|KdkZ%>^X(1{Y>?nNkRv)p*B4Wy(qWk z_vn7FTG1>gBX1$y-aKUwA`u`Y5dO2Nnf>F&F0NX-QC3!|aSf2*L;U9G7`Rr%Z|-Yk zD4;fMC_(DLH0|TLXgN?G<3QE5S$#FD&tr)`)>x(b8K!u_a(!%Nitb3!nRWXeY@tvZ zD2dzaTMV<9D)o>E_NkyVE7-^E;tc>40>cKilnC3pNl*cv^oW;TNbSmW*?{z0AT%D| z11LVWz6gtny1E_0T~i|IBv~$UjKSCFeU&B<<#8a)&sqFDrgH<-RT^c#8fj-m&!Ra= z-nVn{XqwD)^p-UBL)rO_p~<Zk`NyE#LDcPbqvlx*ZWY2<4V?xtuMfy=3@-wk;cNX? zHc!?mqmhNtij!fS5|+yjonIy1Gti7(f=vxZ9`eHy)W=neZ8H2|okORc!dWQ0{dSzT z!P78(JRw$FN3gr)uBvYL7SBHspJw%AFwHC3?nNji-!62GZ&k?@1jcGro62CAik{6S zP52yR4w`zoujq~`m~C(WFM1sc4hJ-#TyD9wh$29YCIg~ZK8Jw9zMbcwMcQ>S<g7pa z8F3xwJe<TzTT72A1XwHF<?rh)SJNG)ls#b2KNd}weG1JDI`Qx&*)l{pg0Sw`rUx$d zx?RQai6}X)+J6|QPp;Y<QFw*##E2<C!Dk>?0rNse;bOdoL;+Xm%TD4H39s)c{Faq_ zqUg(Dv_Qx{#gKT_J{QE<WlF-ShbEt}AQAP2E#NFyuUv@)lTUCQzF_;2%P2dwi5-o= zVLVe8q`kQ0M5yG1|9b4jE=@L<Lo{d2Ob#u<5w@@|XL=l<P;!d-fhE9=PJX&$Q6te| zZ~ie0oP=~@fc`iK(G!oWUp|J;;NW0n>b4TH{WwC^?94K~pD!&}ZC6Nv*zLvDGg6=! zh8@!%p-S(1M!sTZK8DPl^t4Y~nJKvMVmdE1zn^D#uVrFX(Yoq*EL95^BsM8i?OQ3Q zr(mc-EDMv{ljwt7vsB%4uJAP=-)w9*R~?TCs1m!&Sl~n~K-++-N?#+feI_uJ*uLkE z4;ZC7xHHFSMsIaC65V~d?*C2$v)=qrcHHXY1Wc>VZ%c$JeH_LIL#H`6w-#gG4Qt@M zYl6N0swCX~9+Fh}rWO%*Kf)w4akq+Q3!VD;7PE9qMGfN;ZHeqv#?Pq-frb;?#ehRC z{+Fml(0P3jui$LVIwqMcTRd=fV!29^H$tV2xQ+~|2(k-<SbbVX$9PAk?=Cc|>16PQ zW0*rEG?y0$U0Rl6{|o;1aV$FIBP>#pz_|OfbpIZveTx^V83fESFx4{#i!sEicH?mD zh3A0Qu@~0i>f5x6idwIF5?d(N=rInHV)a51nw#3P5GGc7uR~r6;F<Cu+A#I)1$`n` zBbF-$`A|b>`zLhPMZPtsX?|&cdLooxN1i$xi#jWP2cb9es<Wf9<Yr)el2{*^I%_VI zhG5tDmB1f26}GfCuY&eB8T|3UeXMoPEsp~DN-cdLy!SW(FIqr&#Z%?N@Lq4iONE+O zjlB@Ot(R(elk9oV>uz864bW}s-Yzo1{dz}mf60+p_xU)i4XaKOZN<j~=;!sSKkc=Q z$gYD@?Nj3nEQz}&4EJhKI3Atn(ir^_r|f#v15XP+SNhhVchrsO6G8Sx(>mi-AG6HE z+5sJyI{;09pSfLrWM2&7>ZL{x(?&)Vmp$lN@x~<@CFAo8<I%a(Gdm#3pML_;G&nJ5 zv|puY7~!v3qM0)?LfOV)U5zVDLvw@&gvK58ZU!D&Cg76z{+;CS)A3NLN=$$bw~#mO zG+!B4kOnAoY+J@;!C{~jmO7aI5<=;YF#8Bmk`nfw`aEu!tQZT%L`ILn2nzdO2F%l3 zoG3^ibXc8xy)hx4u1mW9n@rtb!rZxPY22(CJXh^@+|NmY#jtws<}~cUFpqh7>t)t3 zgJrN;%%H6Qu!B9;HIfvWwR935UZ1F5<=rIe+W!jj=ND^`sc-F!0RLlt1&tJru4{n) zWTxr_&=dMY7X%jjftr&ZbhP$|<oRmc8B7IA8fQb{Hjw*m%g|-u{18{vcsG2fZAIFs z+Qz`yyf;I?IEBxy+Ix__@N;8_tF+l@#a0qD?-INUp0m3iIfuOA39;~x+mSSFf8lH4 z)qyW?yTDO+#1%Y_ufcQKu1B854IGVskp*lDzJH~$KW`5Xctg5SxD{8OJv_l3{>uQQ zn4R!f`P{X1L~D3#_H5To1g3cKID`xKk$ibH=}m2k6S?^Ic+y+@D85n2Z$<|jvkU83 z<GkMl|HAt1#$VV6hBS5FO^87FUOVkrEP3^8*Z1t*;zb|`Wo-#t8f?U|*Yn;lY@XkD zwriWS+w9Pz^1i6BdEUR$8i!L%HGgdWZoJ2dS!iG#uVA3r%W3EG-U&&yW)IgrjgP)5 z7!z|C%GxoMID_qPeYH=e`u9Z{dXs1E?>q_rRyPI|Q?dV+H8QAbGYGsfgfak<s?+|7 z_}Fht13w;6Kj+8GPrWnI4G~N>5;SA8ir6AX^BuwCuBLz4N35`CHlzm6Iu@U#9;=c8 zOz%S`Bn_9^w#@y;cz1NVDFyU9x9mf)n|fk&qhn2PO1#{}mlT>t2V35?&Mk^BArnZ6 zUWrI2e}+&MDUb3cR`Qf+k1Y<w?%LE1_gG_5>1Rh7Kft6gczz$xpw|O}I~kb}j=1al zbm4GXw|h}W?Aly#z1YkQ#7`3K;;q$x17OVi8TQ5ls))|t<`Q0CpjnCm<j%|arpUBp z&34s};PXma1LeoSaM!K^oOCPB48gaH`fFU^_NB&^T6*#awZ0zP?<8BMzCQb3VU~pr z0G*S_HRb41QGy5UP85`86%^PCtI5Ss55;h}`e^&`h0nog#N*?SSB1ZnXkH9pdrcdA zhvnoSgXAn17?@Ha1wwR_DbV32SN$G~1Zg4~`2f;T$B-}q*4q+FP&!$ZUahNQzTGHV z42@j1B1&19o#Lu}5ibFw4-gDS{W*A)_T&(T0p2S0+Jl6Z>YL)k{07X~N&VBiyi%Rr zX7$Z1mc{JxGQw6Ffo7<Ba}f^@W+nD%B0S37L`^6VX%kMwkhnc4d>|RN-@;Z0_XX&2 zL<sA?42;dx9QP=6hg<YR4CEj^*I@)|imi^SJA(NMfz<7cCa|RqIP0C$9Vj`0<sQaO z=~6qe7P!jkf#+NBAsKhC6Jw!Flej0Nq=k>p;P9MlFehl)`KcfA=H2RM2$~QFGm_2^ z98KEXEyeE~k8j)}o=o*Br^ICJ-JReozGmzRFS4z$jS%8}pnPJb`X#>O<D68V?^&jQ zOh2O~{fxcgavSu&R{A~0j%bffQ_z!}`=E+)Z>9Q{ncL>$8V`Azeugk?0aQL};<KRM z;1BbUsryQR4{c-?Ik?6YC??Uj9!xJcFyhw2w!kguluzMx16H?J6}oJ{+JGmrmNY!t zukM8>pGs+XJErc2JUn_evZcYgRVQsQlQP>dCOonn+M_b3x{|CRdJ1tpEgl8^$&DN= z*sOgph_2oQYlkr~h7A}^YYcS%GmDeCOxCn>o=IjNoxU92R_18=9Z<umI`qh#)JQtt za;V}QxzWlamGmYYf;ByIRVp2}bn%h92_ttGk60*%kCr)pd&?(Qsdoi!tnsT-2lO+2 zh)N_-^V7eQPOOv>iuKEZ@CMas1rm)I4nR5!#8giJm2`^%Kbq>x!a#Goc0)(*PRozs za?=Kf-&nw-NhnmWfn11fkOQ#9n-=dRyVi>AQa7O*-)a=C0#+BJzH;yzYSI+&8|wMt z2~psc#%OH7{R@W9wfpD!9$>E9|0K+|W*y@aly=B>yuPAKAVJw*1WC~@5|Q0#gyiXo zJkkCZcbC`@2YYLNs}rv@M}O$RpH@`9VA~eg74}ZVDS^G=6I!O*i(0`Aw&2<9#o2=n zt=IwCZ~t3&_<I5;eNTxfw}2t<g?oc^Fk}x?aX4sqES(u8eQz^;fllw3p5J)B`tG~& zfie-4{ii-!13c$W#-j#Y4?583?-_g0p^je%?h3Z4neTF9ZC(hxbB!%?bXfRgym1T{ zQ4j<6x?m#K9akM!uw*3wb#fvYLGeqm!wzm5#w8q*GUyGUgv0BZTet<rQBGg!)E%7S z<iBzAxWf~^@(D3N7IQ-=JZ6rAS8V$%pv2U~)RrDWd#KV0m!1o@c^2fmHdYt?GS3a$ zvjY57A=a?g{EJiyfxi7ctIRi~{n%c?=0gr9=!N8i@DGfd4IY#7zue+3Nt{l8VOs23 z8WY6lPw*t<yB-|s4q9E;xOk2+&Alu=_@!;$Ok=Nc@RgK3KP|*bRNYPcppy29<=zS$ zxb}rAx)cn{E(kJvZa3Zud{9;4^)a!Ul8N_$wkibV^PsSbP)4ZIu14Z5BKJZ_S80Wu zHP7>fD8<AMi=Q!7UR%D70n_pat|Rt_&6|7}ui@=$Cqi%m3r^9wLb6|fPRmT_uyb7{ z!!fFgI#47?8SLjv8E)+<6Ukh=&>uKo#Hw$=`SrD88h24&|IYROqxJ&z?dfq|ea2+i z#e&JjutP+IrEYQlG9J`&O>l3F@!FT=y?NR8!nVb?EwdMX{t##37QO|*({|JyT6X<n zB%Xg&{;^E}wpyoM)^{<|&PP-r8X8th(zH*F=8KNVZM=6iJ)8_>3I?zY(y5-?5zE4u zZuc*mSngw15Z9;rXQULqwfH(z-!>0IFfJrMLNF($mhju*#XayXG7mE;nl31gxiqNm z*y2mkj@UdNm9d%WLm53AapH`Ckl(nO#fLKR(RxP+COapVS5&E&F3w1q5klMnU<%tA zhggqKCEVm3s`|G)-h+$mfot{z&&C2J+JDXTmN1+z7;p>#6%c2YTya*pIyQvZqE?55 z6a&z7^(2TA!035U)65QsvgrDBqt%RG(`4Ks8-Ej`3&l5fBNAg7<N^*vXM`~HY-(U0 z-juZAV$X^7YehtCe3=aBnc{MFF^(e2-TwD!t#~TKWonaaQu_L<%V8FK<BngR-dX&E zt3Gqxbyy1Q<1tIHl1m{|c1x8~A0U)7K+f6%SF_sIzvKU`9CZ>i^zYLE1YwefFc}t` z4ypEanQFG{rgYV>oM4x<&Fh<7?2nNliVum3LLH0XCta%vS;z5g44y2&d_D`I3pM~# zrqZM0NempejNAk?z{(fUlBhp|w^iy41`L>kfyY8rY1dkOBjcJ<(dE>wB-?*sk$CO* z@SVuus-1;9?P{Qc%T0uE)!vP_RldPEti=2l`Kj=kz!8lh;BRjDDE9ZMIm6Hyh(QEM zFig8$KW!Xllas7``#>i&Sg|3)eh7RU4Dy3E#ESsaU*OfF>BMNh4Sc{>9QFnXUsC4& z-1XsZ6h9EfOHj|dn$UxChw28Z<!C=rPj({Rq4*bk#~5v&cb%1M>h`2>1)sU5q|eOc z_@ShNXrX{U5Wyvosp+A3rYYxTnwp#`Ly9gSDy%`o(RnxFxmN-1@MhOTSE(B@ZLQh| z?1E3Ej86zeUU!_j0ixv@=!E#GM>4-K{=-QAuuqfG_kYtI`IY}PM?Ns7QrWOn(jo)y z(za{1hsyO}zrhLq9|n7)5CA)OkWy)-8k;9$H$VWzcH6Fd>F?;jM4w|k8})czCWC1X z<99)3^e{?cC<4*q$fBPDgUm6NvT~*9TyuOm-#NbWvKRwwb>H8Q&cnP*>OhbBXFn{J zh*4%k^UQ-!)mg?$w7Lxa#Z`1NqcX|r3bs|fjGjTcB$FM!7makK@cU0Xe8-?{=DK{Q zC2lW)Dlz{oPc~cN%Gg||FFP>-njwot1##>xSN30>M|(&8C)#_R&|cWv3GL0q(ui&s z+WV+(oJo0sE(J3}UaRS#5}N*kCE<eqh4E&BKzx)S5cfsn1mZOz5VO|;I`GkUZqfAG z;QvqXRSA6MCVUHJkO`klo#ft(^IkYvlO9yX6L_k8)roHU<r9f+(u^{;j4=P9=?8+@ zIO&D*)I_gZ&PJ1<EpjOc@sldx9uu2&PbdvbU;OZ^D)r-B!C8;s5LGt`{JcCFKmS&3 z;im~P&_qy@)TP9U?0^PTqY;bAE_}d~ey8%W*VHMc4$kPr9M{Rx&6(cx&}BLe9Q1}k za2HB5nnM+quag=JBUz9Yxc1;I7Pg1~&~hf5F&zn|Ys?h@<9i-5_rTT)onx-~iSHIN zf6Uc7`8)VE!4EmkYzcP8GB04ualBUsm_m8Nalnve!3=Mz3lr=>-Y%p0vh6*0!S@MG zgKhn_XohY*$N=SUT;oOD-!uM2xA`;I^z`+YmotrIup@&QZ0QDRd^P!nn|{%WU%>YY zVTAQ|lWa^2z%;(Rdle&aEbhN7Be=woGOu^f1Ab4i(H1<EG6Vb%o-&|<4IYZ|DZYA| z{F_Huc9V;9Q_mPYhcGy6Fc&JoomZ)PR`L1Wt6+#dx!q`fDu27k4+5V2J%9tU>aw=W zwi~VLc_-5CD*SBO*I?@h7P4tUc41SXtnf2<(g(&G&Bk72&EJ!^C-|N%xEt|BqiOge zfL|=UUZ3C&o3SJK287{eCkA)K_#zg6feZ$^*7|(T7PuU{jO!))RRZl%!2oL%Af;_V zf)6CYyON+Az%=vg{sslcKr7g0nLYo3E+UyzOCBGcUSky5Sp@@CAeFo8^oW;13A9yy zsH_!PP(%nG@r!jv*p?ctNWvl^n3~;FFpp2hTSglg+7kdd59dOlpX(Zz6@h0zJ^xm? zGkm><R+!Z|XQ-@I*5ZpwPJ!OQQZzI)bQex%JQ=##Y-&w2%L_(g!NXVwp{TG@%n04A z5f)8kf1LDGR!u}l7@vkGw*yoh)1?N30Y{tzVJ})?*?9=eIaKpx%OAq|5W=6M-cS!5 zQhXgOF_vArSZnU9=kqgRv_5wW;b>5J@&%W;Q^30W`y>7+h~=W*YQkqGEn`2<FxRgn zWHsSC(WbXNQ0&TPLX8F(gbca#cmkgh6~JQzD8+Xm6^SUv>AUD|OxaAPF3y2z&f+VU zbsH|N=x6Mg-BQRFDJ9pRA}cf~^|C7#i>X2Nd?sN_Iwk>|f+-v-wa1x~B#=$~n(P4t zWanW+VFLZW&>@Ho7CBWV4zT2?k!X~-4QCGMojv4`m8>I9$@oCLbqc}?H*_VKhqDm> z0HzeGsRt%snIk<V<%tb7hfdYbo*uGckjs;(i#fiC#@N;&KSsGt)qK_bq?g=perCLh z{c#0O(!n`$M!%`>8Z&zFG(Xk9H$dq(OJ2;xRg*>)0~yiF1*qUIbTb%bSP?qd+j!H9 zbP-9%yTJ)L0N^GZ?qu|00c%-S5ZjRvkdO|?2;%rosjrxKtP?9W`&gDrH5>iOWdn2` zJ?WIyumT%F>0m#~E~oOkQtj`a0sfr@A*%-@-eVSqFn{VQ4$4kPYzXUyKMk*vYgf0V zTnx8lfq+FyMO(Ydm4%#H>M>-T=w%`Nr-~%0JCues4ahFgVSLHS;+PZ&&KNlmYc){h zB7IyDaKu8+X*jMP(wYwGXMCmfSTD<gC+cRMy2En7`JbrY^_9v?q<>dX`oF<T`3UUk zF~E?R_FDy+tZ6przgnMYPf<*0pc%^V*drECB-87BqQLpkp}dCwQl9Zu%ELtEK{exY z?5bzHO%6?8!Hx^n!4Nw6Pc4#jcum@`;YrHBS9oXkNjyIo=sW}wp6t8~v%KT<{_p2| zLediJw+0R;v4`x&(OAF5xRsC*J@jkLk8W`9vBMCNaYvKadXgo;S59e76<n>1CuzlO zmbT$_5ItzW%@ScI6-boW2ccecnNU2~gZH`5ARH4jKmZOR1WvanjDK+eir}y>3-rL} z!$tk&BTKMu(!}6!IjEDqGd!Bp@|}@;kYRmPC+UHCR3{Via84_s+)F|^$rA}Xwh&FL zIakdyc7_}EFT(sAuw6BLm20xwf2sF8PsE5MU}dp~+RyuD9lM79syXTH4n~M4+y!5m zN)2ttBO}+Lp|C-HU4F!h#q0-(ed`Vd#~=?SqCuK`hl6Y2ZX60Omiy;$4dH3MJZ&|f z8s%x9`E*d8-sY1rj`s#N!jT|-KKK_2av1646A60b?;4N>{S=D?d1zh(jG$T1aeP<n zp7;{4SqPN20LcDpDGt(X(&No3xQPTE=3}I&4KGu|Mb1c3D~(noMW^^8*kTL(BOIg? zBj!aYMM6x5itORwI`lf~;_WQNU1>1Z<3-pw0n=hvpWqn03Xipii^jS76upRl2sc*r zI{ux2@j%h3NRjxyMMlU^@MBxxQ0PZ%0BYz*&$1mqVkno;j|Rwfpj-#zif{|KuBo@B z)O;zUU*=1}piK<dox*Oy>*`bYB6k&i>UQd%*Y(c{{HR=820Eb;t__<fqC;@XAZ}p` z9Da#;z$twGYs^@f7Y8}`vShIXx(?zd6X5*yAAB1eL2|JJU1FN;0V@l@?v0xXRjKlQ zoJNZvkcbXpa<^){@*quz_<t|hwq(M1A?~*20=-1Y_=(EB<Q%|tujTQT#x4Y7p@~Bi z9Tq%BbMT-zCOpHJYqM|(^<p}FL>!gCGBQQm*mEK6oR2(QBeO$8n6{is=7Bt<<)n}^ zkL3;YH7NF}@!pI6pfiI&2Gx({2lm}%+N0s0_zqryo&w)Q3FuE9K$a(Ok^=gk*=~b= z*qVfsP^a_=v@55hJ;QT*;)Ll?X?x%%YVO5#2TE`0AOIjkk{lmb$J3=*m+wiG>vPxL z0sZXmbTB0dKg)u5yB@m)pBIx0^q>Jj7pDr!K7~$?{_6au^fdOUUo90a79un`Lf@dV zIsdx!I+6w@qRDT5KZyqF^+5}q5J=DTHnul#ttr>RO3>9niXECgyr56de1vJ&^xWFN zLNRW<1*FOa!c-XbBnr?nXTcpM8>5`5Y}nsuG$YrD@CVRpe0PrQ_l+l*`UP9fb~><h z#;lD$5X>^REkrUb0h3@K;H=ppiM0z$PjO+{s}=(X(Vq<;Wl+$%4HgGrU`$_-o}xDt zWUWx&HjCu8EU<<42HNd?(4m?pmMe}ibpPw6a?LV-gffTDcLeOgZ@XVLR&FA7r~7C< z@A%hQ%lV5>#d$+>PvKF{{N2mB3}d97<T_n_>V+O{BcT%g@+%;eDTWK>Ua1XiJC`|D zmx)+|!Kf{8IQT%0(-w$?x9tRhdxfR`=j=T?W)Ihs5Qm;7jq`?{CXrL!!cYURT!&k7 ze*h))G#@&HvaMB`XRLe<pLJjGj(?pKKW-&nA5YA?t`pDFiLpdlNmic3ilFP@UDw%e zu<DQ#xMXm6*LC6)E3t}~%)71=AO1u)b-%hF)+V4M_bkE!w~+_5sOt+Mu3O1l-CsZn zK6G8s3bUYkI)EcGg_#f(IoD`i1sTOd;7o_i1O+lOjfHmTOL1GpgF>MV47|%o-g?$* z4|Ne8Gvt+ZfZo>^!ZCRz<4?tb;X~KJ{O`Za0n9`a-MPH$I`Kg>@zd)u3t=R(lH5b^ z{dVJQ@S}DkHNOc_M)I3NsgQBz@8JE8&}h5yG`R_;CU^1QQy(-_ll%DZsmV{UY;q_6 zHT6oK$D|v{yRI7<{ioR@auSnZ5bwH9yv<51XE8})-gTY$aVxPL$s~#8;3lN*JXvO0 ziD}ZNGOmE(@Jfkc_2uQf<y+kn-gRByRaOzqrxWw8>%^x{>SlxX51mUAH^yBQsXw|# zr;pUX9ltvszdI4XQ}Mf#@w?Xe-KqH9R<m;=^^Nhno$<R}@w<KTyMyt&*W-6b<9BW5 zbdA)v$L~^TABDe2y*+;Ch~GKmckcL|$GmH<&*U8%8?WGa{O&~jPQ~v|#_w9=cc<ca zZRXu<oF3Mn5X}IX@vkZJO2CZYIpTND_?<g`=ZW8Cns?@QC$ZG;hjCUC^QYJ6WbG2& z9<cY;(K6JGdqC&$^v3jQE%}h?C#~nE|0xc7c7SaZ4xg-AI+sSS=5fXW4<2m_4-|73 z-sK4NgrDcNnLuiOd4(%BY%pnP_AS`66>g$z%T?O|PL~Ey>S1)bQRN6f!fgpG(JtLg zlg02Oi;-{J`r>hJaK8|%EO$gf1ka1)B89UWT|wYiIKw^tAjqZPSu?y5zpL)-?~eAU z8NSfGM}QpA*-S7V#ZSX+%OKZbt2u!-wd_Q#h2m!Gzxs4g2Vc5mt$6B!zx)lpYR=wO z_fy;lU*X;k?Fi$F;{N@Mj>Q=Uzl(w0ZvO){XJrF83yki}{8+e#`yTe&(9L$-JyZxc zqob}Xt5H;nk>*1L!IaqG3~W#VHB@i7qK#SMhq6Xv4L}DX&%7fT7`8kHImI|hHx*aP zn_w?$@;lm2O8A{hHUB})LP4@*JVM{s@CshZJUhX_7VhwSjP5l}Md%U3#<!;dO;iP? zk5gQAd^BVS8L|!iX*RM3E)H&C5h;;J_{cw3-8;CNM@97)mTbRjnXg$g##)SRSdD&3 z201JnLF^&Tnc<BDnS_6l;FIyYHRhfAPA%OBo#r-cxDjMWV^A-+$(95xE;j%CO}4pD zuJRT02=#?LLVfEIFzpTCV0{nZqL%P+Q~dFJeEfO*aRwg~v(Jmij<Zk8I}`RemjR3p z_CKvC%NYLXiSzA$-s)`s^Q{Zm<J|g@P;Rp=l&`>W(Rid91Bq_wseXW+1>|<{Q%@!Y zqyyEQib(Udp<ajo5`_1p!2ms+RO!8z8V=b)QdWK=J>A9dYae^&+izI(0vnP@HLK%a zM`@n49~1`i_K*N%dbuZh$tdT?AM#`2YnYxLr71c;yyUBAA_2=r`%s@zP2q$23}IKL z@t~tByv>W{tx9bMzG-7|GC+;nC^T>(@N2S9D*U_svYlF@<J&+V0^J@rP6!BSp74uf zt>K?tseU&eF=V^)?`r%&ubGUt85nSW?`of{v133M(}$MZ13gVwJ61Bo*siyoUL5!3 zThBAUF8Uv<KSiF1Tysq~7+=jIyTqcL!fg|bm?0iW+3dt<sp&@(c=BDuYkgrNlpRbZ zpsQu`HO`oxX?M~IG9yr2sWLR=K#OFd=J_oU{Lscn8B{O_dTeHos9k<whnW@QLHTQN zn{dtneO#q^sAcP?A8@LM>V>~<4D?jzd;mxuAvzW$(EHJHmSK#y8zTk+AHN^mR7+g) z&#qKcA2BuIS_|H(my=+;RFvSf*6Mjsng!#s+o7mxoIkYEH%^dSOj$NB5byz+nJ)IA z(^oCuc^0C2>iq8sY)#DP$qrf<9tzywq0@$Q_Dr0J$t8n?^G<f6Ty55;UU(xhSf)|m z(rFi%)c5{FP)pikN%I~NIo=N`f-_$MFx`Kg5)JaXnxCPebBa|R4A6*f@T{J-tdlC& z>VIUGgL2co$lB^^vQ*dc@33Is9Sc8VeWn^@UU17Kq)zeQPt{`TL{$q~qR%(N8e|!; zwHaBD8xpDkvX|~y?)NJvw^}g>Vh*SWWwu6NfjGt>CDPj!#^w45UuGan4`V-!=UT?# z(K4d5=09ss&;vvvEOWYk+!SiC-dkhVVR({go<pMk`rRf;dycbd6^@4U4ft|`+b54T zcr^RB+~k9nI1!j2=6aM?{tz4-o44?S!mzYCdc76-720y6X>Yoc17y^5u%P|RL@AB) z`W7Ay*bC1hV4_6jz&7t_{%HwAL_r(GSvm~Sng@hr732Fix@=eST<up?;Y+!P6utc) zK<b^Gv+&HZ&H_tXww^kev}|d7qN?&9Q*m%eaH(;=iAxi`N{L!Vn-M}R9o!Rx_!3MB zaK|0|!WI~ckUu6rcQlYyS#>@~XMFkjub0!=Vn;<XCji8`JE1?Nk|6&WY-S)oa)ZC~ zgzL!?F3&`C^+CQiRM$~lM`vOuJSXmx+JtjtJz$4;#-!)JNth=2^l+`5%i(##k1Iu& z@(3G-ki0oP%58Jim4jW1c8|xX3*i{`jL;}&=;6$e(E!8<{pe9#VG9--l_S^eaPa4R zKWbb!cmjY&M)6Q{{0zpG;&cAs51fy_A?Fjn+ln0gi;NnGl^lZeXZ14@t&871XWfmO z#XD2{eUz02cj2mY?zD;uN^BJ*j08`{-?hf?4#w|ZH}9mt>TM5_3k!6w9{xAP9b^2% zQCUn7ywhzn>P0r!=uZu0hDO;39n#{o^|sK{{Gf$uaa8`F`vsMO1jY`nvw0gc&^HMP ztGe&+z*T*L2u;>(7J63>e{kSuUsk-+0j?zRRe#q8IWVC46J(f-0_9(71`<q;4`>W2 zfa)mrMricZF1{k3*93QJX!J~Dv>B$-)KhKjsHbAE^n{+OS3*y98ewS;s9qlc0+_Xv z3Mc3(jo+rV^Z|6j&wxKVG_56-kNbQ%=mOsw_JfTLH`hl*0HOyxmq}{QpzO*vsu?L0 z+Xx8m{UaGL$=}cCLq@oOKv;wrZL3DSjydlLE*+ENzslE|{3)P6S>du~e~=3Ax%KE# zEhpd||2oSh_Pwono|P}+vrf!A{&i0LODi!EN+-5Zt8?OcR$}6uPHbUc=fovu;z|dF z##Hbm3613h+li`XmY&i}9pNW96X4bxS%;K`d;FI}L=|!vJ@_-iZj7{3P=#wjsBdT@ z<M~kv%u<u2z*pl`8%mb{#G=M~0bzEe)Z2B#e{)Rt()cMl*_5u6Ewhr5NknO5x=uF5 zOtz9#B)pARq`#ni_-i^j{O_DNQ)1}SalnfglLvp{?IvE}G)6bDDb_HRDy-51Rv%nC z%z8Uh-VWniV|<YYu}Gde#bbHtEwjPJI$3eo$yQp)=IUf~yH0kWmCUb``MXY5WF=du zlP&Bz*(GMOCrEq4+jzwYV{h&(Jc3hYM>+~eIs=2gVjxq@ydsnP3P0ssOT2r5=OSy} zf?!^S>UNK{*LLE-jqTJ?79If70mB@Ii$6d*px#Kix<j{zmf7{TkcMz_N+i~-OvAG( z{Fp>({UP}ym2G?+3oqx3{M}gWh5|dm^9(u^ddz`$0OF!yHdpO8LF*xrm=Ej+x`yt= zW71;(+^%G5YVnV#*4mb8GgBC|)7TRS=vV@qY8$$30ngv5t>dlecXTwe@RM<^O$QZA z%C~ekxX@ONP&!&2%?Qalfsj9VV>h}X(DbsbRQ~{TZSnUEubhi{r=Eqbg>s+j&42Tt z?f#xMP5W@89>sf8zJS)^gsZ(O^ld#c{}<_u(e8B)|8*eR@TQSNxnk>+?F3x4A0ibE z2$(VzMv1#H_j$%CUPt7L8<8hyel0fFZZL#!LKcIbmk`1q7|XddgZN&KMCT`o$VZkX zk=hZm7wZTdFGs;@*6$C`_rUF`4dzARQSQhn2h({YquElJG@QhHd_IMrnhEY|yfZP* z6jThLpyHwk##ICr^7wjlhhhFJAB&(%^sUB4ZRF#^Q{Ze@<D!0xM|07{`l5MTuujv? zV=4>99mzjgG<Ao$mL~CamtByno7Rb~1NfHgU?yR|9`#pfp^H3^PQW8(4uEB*hD8>r zxU7-!bU73Fr$(L!P$$9Rh1pE9o?4XgbAt2aU*p};!TzO!LK5i%08}oZB<cs^HBytD z)FuBfS=}TE`o|%#)_ZWjf3{T_(;acyt25jXpJsg$n#^+b)HFTKL{e9HE|6v{wHv)L zy)wvsg3^rFb1fre!;EqcI%Jw~X_ic@Cc&m{Ae$Cv&<4*G2CaMih@>PM;@g?%FTjh< z(VOU?*_Bm{S3Tce0e?`OrzEChdSig?BlnfuI2I&#*adJ17Pe9M`C9|y9dKG}&54lU z_{{zi8N^a=N?^FiNK665_utb3h*B>kuh$vl$An6`(q?t$C;oj{uV1C!1gj>MbO=_N zBs2@8-i7l-mx8#0)k=hK6@Ctz@gi#z4frTwA3GTJ4xm5xi0g)>Ex8z^>r$gn@cnbf z$c4eiqOg7B&=FblyBT9KQ~`uL(O#VpYh|L<{nW-=pwkmpQ@v6JkwG)WCph)?EapMc zlC%+_-tvY3vp$OdxDhda$c;!R{uuHl8em~hI=RDyAJ!0jRc2RUTvG7GFEg#+ix0m1 zg$};>GE*f7U%Vb_2L@l%e6GgpTF$K7aDsDED8!ram>4>_GnXAPZu++SlTbyLx&GN# zCCxR2(q8BQ1qJQ=Zg_zwG{bI@&(RFv18_h-M|CEj2!enp=C_0wWSQx)5+Tt16`Qex zjX@pXdKDefW0m32nci5xb`V_DaH&aqg-Rrd<~#(A^{t81&~M{W_c!E^!4WX5%?dWz z*W2oCu8oZ-r8fg&cQ03$jSv*EHUQf@c(3l;cmA`+=j3sztb%%gfj`Z_?h74*8jYV& zbD^yzFl8CjxOb&C!ZGgB)L^-}9lHqVH+0NYe|JR7z$`cwO+}RO$C$m7r9*dh+f<qL z<-m<1_|yProz`4oT%K_0l;yBl?kbYoiw9)_ZRS{nOP#IVA=a%sJp(~aWkMxUkFPf- zBSCUY<I^i?N7v<dbg#`M;9H4iM_!E=N&HXprV@RZ#Fa&pv;=Ae*NrkZBVGNA6r7VO zj+Mxd-~lHgc0n{v<Lv+S4ddGot0!$2_lc=g0=#`|83;D%neC-Kya)rzW?0W0{iNq2 zyV*v3$Nbk_l;HZ%^Wq`kfJ?V|Vo}9T(^|*X@F4iTWU`w1HoW{PZef593DSlH7Zikj zQ7H(iZN8wfqHd`XSYpb<o)kPqq_-#dZj~{AFh*+WiqZs`>>YgXoH0U^$q_?KNhTkH z`vJ%#C|GR%ROOfq88Q4p?F>Lk?VM4X2~?-+|B{=(02l24J`T%-UQCVu0+74N!C8l8 zN{la8pnH}2>~Dg>b*C48)3_V5Jy+da5D8IYO7Bu(2iWWG;9E5OeED37O2O1a$k_4G zTRR7BT&+tdOPdJWxK)Q>e5qUo^yldB4J*P_JXTcF)cIs<9M3I;{SV`5>33YUV`Kn* zV=%g2^@Hv4fxZ5`fxZ2$^9DBKKMm|vlRFRWW9<D+GNdv8_sI_|7>AQG0=>bCU>v%^ z(i-Pxd=^_URZXnGr~!)@NqB+LdkfVxu!}2sZDNIt)vwwBOwUeZ)icn&LY3~b#%j1B z23${e9;d(s#%X|>f*^_*r{d^U9f#w8^l<DiS0C<`@}oPt7!FZ^og~?r3DI@Z=#=Ae zpJ`tlfdAW$3M?dIDJ`bPU(HxLI9y_|`-fSE%J~-}XJiqk@7PRpW;OdzESA5!uywj? zb(7JwLwwjZkpO<c-nz;dE`S`-R?i(k$%q}nWU*|vF|Y13dY#w-j|9Xx_}<6Bb?_ao z+G-4J7h*DFxCqgXgi5;<q8$NOkcu<SOJ}MyfEZyM^OO`F)-6jnEdN-Xy*C4Z|9A%j zpa(a|0c5e#N%1l8WdVVG&ob=92XOe2DWKc;75aI)X_OA4QIXuGTy#WLSNJJB#40C+ zN5(>>lh7lVRfZ}jsl_LOM&l;|O+ig&d>)HUzZ()qxVYH@)Km-yn=5a8GYOj_Y-0gi zrEgRG`F;yl0t|SmZ&{OawcDsZ<>vm;Ros+VfaJTgGXL~&CZQ`FRF{P>Go^ntVDCA{ zR;3mk=FBrs6^eIX+zR6wgoniPmbaqjHb`)W#pXNCH8#k7ND5+<4b7y9p5rOF9VMwf zR^ZX1F8ey{hvMrqW-{0b9plq1NrHh)=#bSKA3EoX+;ST?+2PU7!d-z05Q99y?K6T_ z1{>2tE9H~DCRD!~Y2eA5))cCL61Un265*3Bip{g*xSJ09@X$6E!RE{etz^dJm0Y($ z-3<?bmNz_hGiXSc>nFIrK<cy|gmR38uxMO*qiK(^qId0X|5Yn4u07<x%(Zd1YvZ96 zp`uM=-M6mbHPCHL>1b%%-gIs3Hp8{Cf$v-!Go~}_32yU}2G;CSJ^rZ4Sq<si)vH$Y z*CjhTm0VPc6oGeL8+*Gprl3Trwo}0<Pwa1Vpf7<6^-V0vna#yHy%8M#3u;X`cWL|# z`fC&o#=!M7D6&Yej2(<-RH{GD<*BP6%?mThuV(q2_flmfdeRXkVgwLZbVw1Ceuu)` z{(%PKXf@?z4YT{Z`HGMyy61FLw!d#vOWK*&g6~0L=n30zUcpe%rCIpt!E6ry9V<%R z4aGSZ4O{jQ+(e;4VBnhk(@z<@R^V;^9(?PYw+Hfj40sVA>S9ZAM0$91?98W>>bEi( z-$$?Z<p`vrvHeMLM@aJz<?qfv4P=bnp4W`XBUg1f;gvV?q2(A|cpyA@DKt$35T|W> z;Q_4mxwvZ*7eQEfyJ~+0`0GwD^6Qee+>A$a;tekjnbsSK=Q8fL@rdDSDtsF^#TCA; zT6$>eNG_q<la;=%@Xx4Dqh=m4f0#)5{wk|ayyFACH|=|0OyzUJbKTK9MUh%D<^<(? zwb=YK%$Iz*dCsy*wc;9Gs{_r+;qVtCg;DBWm+kMpuE?JrZ1zMQ!R9QuzCM&CLD~W( zI0h5A;#&DU)_d1RPht3>)U}L3XzXcfu?OFGjdpFc+ZsyG$xGa)Hk8H+kz?^8th+hp zrW}iDc6de%(Cs+$sT2&jGF{<K=&Sq~f_OGAow;HX#&oy;PDo#Kb^JY8HX)+nDA&e= z9cq*c?cYdLSo{rJFp>&m=UiK04{FV1bu6yI^NrC#MK6QQz_W!@(Tp%%>(kD}%SUT2 zSjBm5LiWY`lH0U6XTSsiK7%ze?j(ROCGbc?xbIBB9emH#^s&7QxN*4P1>l}w!Tr0s zV+)56Vj9iC((4=sA=B&+U2ZUneI>_04~!lI+oFR>u*T`F1Xs`uyLuaO9l%4y7Z}nX z{T<G$9tKy~(jmnK<G~>E^W;{XH;1#!TUR(DC2i>Al<KoLFl>1n&?Y6CUVSz%kQSb6 z+fp>K%-viPyWcpM_XQxm*rJTvN@Ae>y;h90jch21Ar9XA$aHH;z#nW*WBM)CnA6OZ zh(GvMvZn=`)8%B?{y4oF{+;RT5YZzvP_|Kw4`aTa((&z<aT?0+NrhHC(XUe94Xk4( zN(0!e*Nk-I&qhVAs`N%gy-BV;aEj@xksjY?ga&d$Ot7r+68fEOrNJ5Y1EA@v5|`D? z*c)aPmN$$clkj>@ihhQVhR4exj=cd*K{hn|H6O*=|2I~1fF44anr?qzeR?BeSf!<< zRPlTwH&zJvBlAefzg~+ap_suF5KJYzu+85eso{cyph-v#SqLjbj-hZc4D>NG9mmdD zXV89<2=){#a0ae1388Ge6L#pIHGLQZ339fGHoO>W%2?p~!e)Ou7rrYheUlO^&GnPc z#t?>po-umwTi6`v-yuahQs8TJl&%?_h1nl0xH>Svm79n(bd$t-nU@J4W~_02Dt*tP z4zJo(p)(`;3j#)DLLW?zX=kV#>ZAtR(#>)}^m-~RGeUyRnE@7lD%8Z_w!kCw#e6}$ zvdN5DY!bcjXxnhCGs|4dpT``47J!EPv3|2~<(UBv#)KqivLYj#b=#ob#upIP3>Y>e z;HYjHSbes8)V(63A$4T+S-e@1F<{`Z?h9^R(Ytg-1}4Xwc<Ud4!&-7tZF6c$-jRt_ zs2f(W;vCSbJp+O};ap_`V}8;fw3n!_A<@l^6WI@$@pYx^Rq@uw_^N322jbg+X}+8| z!80elptZB|PXh<%LP_+1x3aQfT+ZF07jvr7(AZ%h<l@c<`2fZPITl*@2o*K3&s~y( zmx~!{@g$F|or@u|OEl4$-f(RWrI=oI^cEm1c8VU1+5=#4ro{1e;raNAx)*}&@xe$W zM+*`yTO{Y>=E=t2d=&=tR*#{?#d$l>9`DdVrvDPGT9a&nzCfNH464|tx^Q5?2_(jT zKp$GUqNi(P(`kEM(dMykyQ{7h@KvAv9&q~X_<)@W=cIQ)fmWix>A=^!o+1af0hGP! z$suT;1(AS&@N?<S88<|`Gc<)iqd6llJe|V(DJyKl?)Q%vHWuEcC0TRQpm@TzW(r-7 zOF#si!5wLY^m%Z_5pk|;Mu=^67%It6u0&@Z*j3(nl9vQMk@w8tBmmK6UZX4<3t?*L zW@DFYTX7By3x9@1aa^#imuvYL6aY4L^`{c{uNps)w(+YR?Sej<33d*)-eS8jmxGmm z2xv45-E_~;fZIQ<@W8U!;R&|rG~`P=z?{+Bh#;}{rM-{<8#Grj;>j)T8849M#RQjl z&{M`96g3X}q~6h|n866f+{@}|w6*N1a8)e&MBxD=;+oKeFn=i5Xl7WY;PLdl?bw8* zHOWkVs9XN&mT};jI!<PeB!Hhvj_O8yz3@0e3iVhunrEEJ^XJT}oHMXOl|<5EtKw|7 z=iiw2juAO?bd;B`Z^UcEpX0+P_G;d{^v$1YjY@IORD4J~S{QMKf2hlAmD0{Mr>CG8 zf6f$q&pXqccH<~{|1RD$2R}`XK7=A?ojEEM{S{yGrsm8wE8_RUwq=h~C^pp?PW-9B zX)?t*ekSnec+-yNwWby4OsQnqUVdAwzX3{Je9LT#R~F}t%WJD*Q@(B1{ciQcu^Ypq zVu5ZP5LfY0^wZ1~9H(2t5Cn65_SsnBiySLb8q!8psFm}MlB}m4P2id_C>ht1M7h2R zP&@cefSmdE;e>T;Mq@+BdYkgf9XLXoBx0``ixT2?ZuU>|+{5s1H2yt|f42c2Q*5dB z_+OeV!|{vIf6%+ZTV5PJ&Rwx$n%lK)N3ih~_+Gc&;95>QD<JpVp9ykr#m|;?NVnl$ zqs;Rv5I<!EX_^qTKqj1Ck287^J@&IEdg0o2BzWA8-{6O~;BlOtS-xVg`q>v`&@3KW zmo}TF(WE~5f_`xy+_%L>v#wEUah2?fK7mAxb?p!P{%!S)nsz69LE@E(SyeKL_kC$4 z>#_qM!9l<1!1(Ggd)0gBtDDfoBK%XhzXiXe@$YW@TZVt=$8P`WFU_8w_?)4;nEh+T zqp3y<=cIv)vH5UUU5<D(v3^e?o&a?BN6Fj-zl;TLG2<|#$sP|&D+O6zUycuWPzz)- zKcA3>V|g-{!a1pO%4oKPC^6bXOK_O=99W(PhMO5SjAC;;mRFD{Z?!HDbCE}kCW^IJ z#ri1;c@PRHkgO7~7j$CkN|;!FtBVpd?~6k?5+xc#SQ@GYKUNWYBVMfQ<&4c`--P_T zu*rW*xirq}YZPe29zR2%q0PWP)-9!+SA<bIEUlT`Il|s}OCT-k>*J4<Rqi_oIHG^f zKV<Ul;Rdqr`KJ*IXm+7DWBy3vtSRr9<B%L^<y24w%uO;<M#-ttU?kV|a#2QM>*BYg zpy;h(`$nU<$(e=&lyI!#5=3xOouNa#Aagvd2`1x@!>i%Fvc1xH4SA~&(kcHmjywWH zDXYTH4C70Lm&rTlg=nBEtr?+G=D`UvM~8XnpB6Y}AOuuNTjA&P4#)eCV+&qbkHecI zl1A2A{*PK}#m7Umm8J&M7%>KoOOvy5CM}u>MsdavnLXh2W>Se-)^3R5jnUm0$)wr{ zJ{OfkqDshoMZiK`>qIqjEHh`rWZP_Vm+928;Y^m*MW|TmBJ>a9JpjD;c@S-o7ecu6 zX6VP8uv0T7xuIWd#Y3p>MO<U~a}Yo{6CDKU`ngzOG>&L(%k--bowBn?cghhxbz=Fx znSz>ZxccoFe)L4@8c`gFq2;f*gzI+VF(TJoK;+GjRfhh;B(Z*3G90ejm6GlR-uVWi zFTAmS58w-#o<^9H{P-w7l!wD7uyIhS)U~yVmc~Ca41bIx-Z=<FuFQC7$k0u_Q-EO6 z*WzPM!NOVh-V<=wEVKvio4Y8`O+?yQ=b>74)$NEw=f#xB)v(n0*%dLo;2h(LSLt9f zjLUO>U*(=<3?G0z#;{)+%Vp^2j)@eF!J8DLjvW~r=vyyCDYNa#(U_@^F&&q~H<a&I zJcrr)hV)R#X0mgGpET;FI0?|I(c`jsiEW7zOHm@rN~8|-iuTr>*&+%h9@wOj@U1~i ziw<<vMG2tJGlqr>Hv|{iaYDJzcR$fiV12YuQkz&;)|US_Rj?jh1@<(Otc5~U6Zj*s zmxwQ7JRKT}uKzxUL{}wylnzYl;D#h<JIs=y7Jz~AT>+Py0PYiX9Li4y?q`28flDOw zs&1vyJ;~|jo9S@w7-u;T+n8y-vPg+FU!caMh69IFy@fb%Bqi-=v#DQ%JCE0h<TaC; zV9JK=S9oI&f}VH;Y5W(ZA(~rRTj7~`31Zw~-aIPP)t#8t9cs7si!~?d2xlGnQJX_U z9nv`LZL+an!u~nO_*7*}cSG3fs;fr=e9YB&?y9>O&nB+B>U!V-VWS2b+reNBzLuMe z;k@`gHD9#ad#AbT{sLBm82%D|jXmIKpKHo=J@*A<&yY}W51vJm`|&B**4tG#lW7py zvnNh#_2>E4&57gA%$t&j=TU(g=XSLHQ4f*G^B|4_C|>Uz#7l=eh8ia9ieTq<7Ca8& zJ9Y>1eB-_oFSdKv#jdrAU7eGnTc3$iBj_PCEk&39&RGi~>t+#t7(v<qvnNsbb2oMg zbFo!8;6cAKUgN?z%ngZBdlP0H@dMADJYQ|1*vVZN`_JdhuGovC8#=`QKM>rSBhHTt zZkgA8sP4N3dA_4kq=?T`yDsvlR*_qC=)_>`P1~B|Mt`Jzfde0Aud>b;*kc^22#>Ha z<jEzVo+d$<K#I0H$D#W#CvCMZV}BZ&q&sr}H&*Jy_{6TuVistf(JLNgZAG2&j`@CD zyySl)8#{){P%M+-tQ`a;%SLMTgf5S}B`$7pRQcN<bpLqE=k%VF=2MBOKWQY#Dbt)c z@eDsVGx!P;X!z!UE{F6%GpQ+YF93ihff6q(&Qk0FHa~|t;}ZArYvU4kD{lH_xyjOY zeK4(@&X)STNZHYt9CW7!6xjd8?{$;Rc`o~bwoQYJ(5uI{rCT6~jjk9@8iQ9=8QWwP z7>$_x$Kk7FgZ1L&q|RHe1kgfGY@0U$Gt~2I;_$g@_v2$Ff)^Z63$9Ow(G`9XUrdbv z^(K|7@{a;*f(pS0!dHMwv5OrR>o*3$wjjfRdPhf?PVl6E!-A@bbP(b{S*DU1p6}_d z2g6gGOv<m3b>?!PGr@u8Xx1nJLDEOBDi!WR$Jdp82hhj~X5c8fRZPdtDTK8)r=Up4 zUXdAPDO`leLZoaG&FSL`NFWER--E&cVGF2oJ&Hxoh4T`)qJvUE3<1FgA_4I??9UnY zD$Au<9>yfKe3=r%exZXuw6<?FO&-G!xr3kB0&hX+r`=BWnL?tqWDn?aWY{sB)hIOu z*1ExS-Iiq<k8W54kIS%U1Aysa*g}u+F?z3vFpT|&KMH&PLciXokJFg`I>TtpM((D( z9XBwhQ&U@7+V<g$5wxIZ*#24wCtM--RZZ`w)u5rVWeWyEtC=J;MATm@Z!Zl!Xb&x7 z)Ta?{6pr#DBb>asTOZS?rN_|Ez6MoUNu@E*j>?zzjhDrsAt-5j*G|9Kfrp*zjT*Kj zlp1=RzdGWWwLddHHMa`XBL<W)-5oB)0jsBIY!o>46q)D<7<b&X8rwr9C(m3LMm)G( zkZ_-w-JZ554MB=Z+b=3>hc>9BttbQu5Lk9d;!h$Iv_>cqvHD%LN716f={WP23?~d# zN2u>mTgB*a6-FhFRPDC(l1i(8%r?cj{^ZSVTsJLETV*zl0r+2F<1CiE)E&0h(MHV+ zBQ-B{(OxxZD<(Xug7gfv^*z6~=-0kNHM$bWtBf<@QMS;yr#+$4gs)vP%Rm%sYWmQ9 zrio5jRj!gxU*-7b@5V$&fUuIYXPWUC3uFW%j;0S0njt*F-t@j5k}AG$b(Oq9ihw?M zl^i&;9k-3)!9T`NimT)^erXJsr^1E?R!qG|Zpy|B$yel0HMY;-2($kFr?+?WUweAH z4d(*Ggyi)0RDaLcJ{Ar;)PMSprjJuMf&8cNz9N6O>*eirjmBG50w(}$ibA;VDtW8+ zm<BTHII{yp52wu85f}F`;DQ?LcYNb2IeZ4jM)<S{)gvp_iK)Ni8&?VR#kN52(XX`x zy3e><AO)^QLcM3)ZH2y*ZUej`_)ryCf~cmSz9Tf(6Dg8Ye2`M`_5b1RUBII#(k|eH z3=kyH1B8nLf*2GHDi~BSs00`Y%0MtA19DYSBcgJd;bw-5lSqbUkX=!6Wfc`&R8~<D zfdxzelW-9NL=6zvs1Yh8O3(lSvgAK+byrRIq?z@9zJLFHo|Vd+)2H8h>#b{7clFUe zj`v(_1WbC)9_fzp%}4qM-+X(dr)$C<){bB7eo()zU_dNvkU{Z)UA>rizg=-&Qk=*9 z-dYu_OR08xLBm;%a1HdiDsfJ9AUV?SDOE-kvOP2rDDtP3U=R^}4KOf2R-eNLVm>GJ zfUO^Ln^>z1b=IIl!_|L$s5<I=yJA&ut*;;!Hwwh~{LZq#K&n`YM`tad=YI*lT{cuW z|Aca^VvfhRqT*}u8EQun)vaQ6LJ^KDrc;6Q@eRB4Q<OT@QyrC5hc^_XcKMU)0yd=$ zX2;0FF?|#qi2XwKR-wKn?wq+7^LSwXtJMkRs<RAd<njB?R8>!@npP4R(KryZH2d6w zmcDs)_(ooxr}2pFa|?f;<ezEB`|7-1*ZfUiYCeW7#J-=RaBySn%iFL7hJ!X}YDk~b zw9y*ri*P~SrAFA?wJ@Xt(RzW_!p@CeT(AhWQ*9quXgjwn(w%}4=FQXqz`b?I|J`U3 zd>5K7XltsKSO7rNR@oUXi!MaXS&pdldS(0_4P%Q#mppIFrFFTb&QKv`dxu7>j^29l zR%0d_>suHbfsMw2Np}B)T2D(~BF=i2TjBAO8ihAl2IO6Aj5VvMB6VoAKdmOQXhEwL zQMpNpMGG$khT3VLvZI#0j=?8CQ5p@JOKZ?fk7<yT{}&BfQ#5E>j15{^RbWhP_TdHX z@_xeP7;}M32)d|a2sLjtEFc#}1Y%yGz$@$G$Jdx0b?$qyvcYQ{A|pNzMxv2!5*TMY zQiiEe^PT=db!t0bzU{~<@Gvv_8B&NGe;YWo?SRVGoC_Sh#4|I`P*8aow$|IPls{Pj zA%S2hJkek`#h2KP`P;81;ibo!_V|3y9lo9DgX&#@d9iBDl7MYVpwFjjyTrYow(-@8 z1+zP-$#p(vQ)8Rp{l3$Qdud(&@&L4X^c`o>TWa&QD%vb_%tgg`fxV7S80`wR64ltu zg~GqnvXz(@g9^)^IH;HCc>~IyeTfSwRGFzIfD`G9lrv+<{}e#gzFm!}4wnUNZ&KCs zmQhEVgtM?3!-jxuu`dsyQbp|mmYgQk;k3tg@ohTpiT}=T?}!=gafBso#TTpdZP;V( zI~hq;7iHtDnpvbys800M%(_9HP)h?LwOxXC-9C`j3kk<HHYhX8L4}9ti+;@l1L__? z!hK$KFnrT~j9shUx_>&sIJoHdz$onEc^=;eN7VRo>-fX}z8J6Gg_u@Lwsb`mkKgBS z>ATe2`_PW&_)GmR{tpa^5I8l9_oAD+57i^lSvwm~#_IwPv^{cCJ)jP#J;It}L6*@< zIc~0v7awSwkV~)yMltL}jMXI;&Tg!x*TVaU6Z5EiZSX^UwXd?d`yp<Ox-)*?5#|SZ z-;tBe3tDgs994;)+S#4eA(-gb9ASWdLX101w+DjTTVwP{oif7E@)}Ln8WFS~I6n;q zlvbzpQy-qCMi48*O|&P=h!b@96|vpXyJJnD%i<sFo5E4v=*1NY7-kj>vGcxmB1Q}y z{L11B2hfOmTNE^<f49(oDx;APe5rg$2cNetLM?JXgom57nfAeWL`#vpX3&?!j=z9W zNI@heef3>4Tlr3R^$&?H7}5cyLmyl!!PD=ng|iN##veRV*?iZLQy}@%JB&jhH-$+U zt@1}GrbpvE!)hLVcRLw}JmlEfZS;~)Zk<{fe<1tZMD&fmAG=`tsiAq*`isFBB0A|@ zTXnkK@5t>p!|n}soW9)Hz}VOke#bU7W<wx$gWs_~N!{g7EA~4I@njGmlAll%=)Xa2 zdj5>xyBn<)Mjw1TmO5cS>Y3^(M4!g1m+C0@J4#eX8U4llj#3(KI?55^s9o~=N*Je} zKdBZ*Ijh>Fm7_ULt3r>frq{(EDsYsOmpbOgr<MBC>pD70d}WaZjuQG2YKaqyXXmQk z-5CF(ANJiB;pyT#ZA-j_IR(<uNRLRoH0KXkjH>FNVaEn56i`|&>x;sG(K$<?Q}3Y0 zLG^4?FA1B~37Wxb8mxuQu(m{Pi5@W_H_BPkW~b_^!!M}L3AyoyVB8VEt8OdV)Di5G z0!JyOeLqJgdWvTkXvX!6{VZVn%yTuWd*ZIyG5zc?kHNfMb1;Cf^H0a);?RY8z0i1n z810*n$Idrk8)kRJ{=$3k9(0pg?fHmedXzpdpsG+y@gZ3H@3-KUq$so(5;sPJ-oA82 zZNdUO1q5D!y<L4MI;vWIFa~o8`mj8PME(g?>}|g0K&xe0XK6JeIhMbHhm#xp&T^a* zIS`8%G*M8pz9l%VhSxve$k@pEZ|_H&#jeBG{L!+H*1M%^Lc87IT-Lf@N{&{u_{_-P z6jc8<p4Qtdj3B9w=sg9-OkHu<Mj`t*KG=&YcHDC_TFHmSX#%{3!_VjDwK@N9^&nQ1 zHxaK^-G|Cpg6<-F&jLJj#^NP?Rzf|47zYod(&4I|?Zcj9S;tVtP;#hc*dB{fW$uFO z)go$-sUM;_Q!83er_aU*A3`{5qRzm+Hn49WYe_`dr(}&sx5w8WUWXguWB)&q9rS7k z(-FUc^sCq(kP*xEF6!ftBs%aa8^iuC#hI_{utlo}X?)WW#e^)x7vef!MK5H+^9+ri zFcM#gk@)?Io@(#tsS#VRf<8=L9hCK8*PC`ywVFx;BW3w7;NZPKZ8ogW_JUbS$c2`& zIv00Ut1F{$J`3D8luq!d)r+`wXc1TT(4YUjMNa`#+hTplVJKR?Tro}^sF|^#b*Ksd zT_wuDnnwqQ%h9NH-tq`{8~y~TjC~0I;OMGIJO_^aF9W@xRYLDdPl<wc%6h-v;;J=p zrPePMCFB-3w&71qGW`xTpv8*ou(G4Q;=-S+sb${icb2LLVPM({AB)H2i8b=HEO4x* z2v>HvBC#36??hbsF81<VrR*3LnS_-49NJE2N#X&&bF+E|?|Gq(#m||F?_$3>lI1<) zce0y24Er-K-s*XRUySP8&%->u)w~cv)sx%LQ{sun9znEq`cZsT9jf9z<+u%uu(|`5 zS{%8N4y-8PUo<4J!^`k>I@JB!RYwv2>5QZ4cyFxj24wfp@lhBt5{O+aeM8{ImkFO! zrq;$^#)IR8df&yz+|7I!9ZL4A+$E#nk1};<lHZ#v9TrmnBXl$g18vG%%;PJ9?!p+s zS&mxnEul<YtM^Cbt=54)o00;vS)k8MWk)NZ-U{TUz*pN0N1R-a_;5wi?8ZCjANBJ2 zAAH_iY^%7e79=`L@QPDfRll@yyz&cs@FXK&O=IypqwvVE2y?KJ-}3B5qf4PyGywCk zUuXFiSgD>Fmbe%1>8g3C%&KSeqW-;lLBP``d(Xn3!N;_~Sr=6Rk7K0dcPv5~RPa40 zfbydX64THnF=fQ>fN)C$R$5g8&S$AZOi)qbm>wjGFrP&xyq#6&=0HkhV!q<siNn~V z14A#;@V$SM>MW_e-dAh)jtF6>j*@_FQ6MJCmsbQeJP1jvOWc|HX=Qh8L-o=~3_T1+ z5`OQZ#6yU_5x>*D_u!TZ^)P^+ZH@z@4ki}SNp#9^jQ2{^f;`p*H8JL^McAN;J0Rel zbcU3(8b&UN$B9xgUzK4diwpDUh^f2^qT9YEIue|!^SyP-LNAU4z=k+vA6=cZkoJo` zh8fb$3x@bEwp(z`7Fq$p2rZD*4imx$Nd4;`$;0jOhbZ|CC4Ju25lYtW7~at)Ms4FL z>~XB9xE{axE}qK7@cSFcL~P+#;^q^ZRqjFcMWcrvbSH-T$X8lj6e@9<-?<E>y!<^X zT@1t&cT0IsEt6%{O4eM&z&(BNALYfH(IV&7+VClf+Q<dh;5Au|Ujz?u{vnnGWX_4j zPvgmaN)+|y)ljs3tuwIjhhCv@@sBh_pjVOCWGYL(X@=)mNUzA8-3H4c_4TJ07C3Os z2;RZ?4-9KeN|^jq(4w#6KZXCEFVU=RgUo3jqPuH;hItgYyFl~Rc2xqCF~?YE$B1ky zexWeNIuc?{&-;SwwnV_I$VoHUiT_i{=0zW39`svfTovmukJCuuDO{@V%wrgpV=x|H zhz|GxIytxxj3rs$g*!4^!LfWrXFBEGSzX!Nmsf_~=t$Z1nDWt{US~BZmDk`u{O9ZV z=3@|X3MdVKoP{{#Y%iUCsi^P4+5WUFzbD6cv4^t!UEE`9Yy4*gHms$U+@JU@Lfo@i zapq|ivD|YlK3<24SQWn$Gm9vUnbV4Rjl(}_MU`D~hxkLNqLFDV5#fKp=PhZ5mA!AN z_N5ig!iIkAdBdu}3e~YW(ErQ8LWYXhYe=B~yu{x#EB$HZ5J>#p+tr8<?-i*NPN{So z;vhP9Mh9j@`YyK4?6|q#@}K*jKXvFLxvoppPMU8<ol8p0UwDCSWEch%qORg;Aeurx zCavg?T+?`SUMyCz5p>iVENqGv-BViWQN5dYAX;!BRI`4b@&z|*?}I8kn)0E7kM&An z&sLBq7L<mf;650V=qb<q0eV9dtG(j=925UO&JQe%q&28LN*3)1z*TjbN2w7(S5%4@ z>{&D2)Qv=W4JJ@)lM>^9nLgOB4zR<AVv+d4KoVAn?eAfQIIS$;$i*Tt4x>t8O)#`m zYYQB^VLvtr*!<pY1&(6+gT|u{(j2O7*uo3~6B_n1-a<m>OVQkgP$zoC>^<gDB--L( zXU><<oToG!ZP{8Sxkz<j!^7Ohf&TVN%ye;pV1eITgcs_(RYQj)URH(|(lbJ55r$?M z8qzQ_{zCkjo19hHcD!7LIjVCv8-`cd_`Tgz)wFFGr556?J`4j?%(zl)2p7KYja^Kp zaaU#U|1xxf7C!Zz1{1gWwQ({nP$C4jp~r2jddhW=AU72WSaMeZ)Gz3!e#dfP5N*lA z-yk|95g&EBiiqBAK5r@b8)u^qu4Vp8iUJH%5CmA*UVu+rG6zZMzime~!B99Ac~y&8 zJR#M7&u%Oqz5@;Q5JsI%a72!ZfW}RW{b{9CNNZ>oJ~XCaD1WM=F0|u~ruYl!=ip$x z^^S)drIo3wXLsce)mt3svm7h7zI?miyH;%%7>XrU#7K@B?e~_d-nCeS>Y_T!<Es&2 z*sb|O7J1&V991cnqf`_g=7gS_e$K1~^bmb{64n6lZ_Y(DjY?J#{!*RAftTskV>X?v zcJ2<mOmVFAC_)pKR>&U0uX!gM$8V=!qqg&xlnVek*5sAN!ow{i9sAMxq!m`;_~gpK zO^&tr%drN{YY}dYbmLr{qKe}YcPh`*cMLIvK(~c9-`<&yS5<l(srZ<Fc3>gYlXM=R zW>F$ML+Cn!>AKnN@mE{z$lqg%t24duQ1KkDL9-k3bLA7%FY>PjeT;Q~x=uU8)!vz2 zh^S2Vd8_1Ql)p9ZraYUK3I=6{KCw{iZ6PoLeS<x14Vj(mX@QQJA3ltWCKRfd7oX(4 z5jHWEEmX2!=Qg3=TKpUDcsw<W@%bP0R`_!OTJ=`hbKyh(=Tq?Cg6zroFD@V>c^bLd z1$k=KaWF6~LFIMVr^9P9XZBpYJrfsD59ev&+fG7=s&6nA4e9q<q2W_KWsCE;2~Mr! zsGw&y_!U8#u^4w<(`3$M+_!NdP9P%}&+Lcnvp3gJ!-IVCsV&|U#n6OCG>5g3Oe`PC zfQVI_mb$Mh8$-rXxS6KxWOreFfff%F3IkYw$VHd7jxy<YtOwD#4w>ACOwy6f=q@Rf zj;usSoo6CeupZJgjIVN!{9Wm}6L-(m&fXkfgj;s(msag*cOKutK!9NIU~jwvr$CeS zmDkW;W%^&rlJ8OU_`Pj4of5s|ApXJv2(sQmf5dmMX?Y(j;_5wozUJAe&s@NLT<7)= z<yH>Y*!t!G+vWyyye9sQe0Em((SPTl#_Km~_$08~pSiqP?-l+}Do!lx@a}~AtFb@I zwob{aptTMR`tZbt_g59z8Cp-3NXdQ{kk4Bk;TfP;+P-RjUadaFag_OL8)e=QNLxgw zDYio!f|74cb(q2cr9WO9a#h?46~8m9VituhkA;epNNVrh(1?|fiK=N>M{$I!9n}R9 z-H=qWXseN-&aS8!haV8YXm`-WV2f6nn$OokvC$qeGY<3jZumu1swQ({F(l)Iv-m<j zq(WnfiGE>yKS#Ca7On2;_g##~q4tOh8qeyvy^8X#Wbyqj-ZGzeKmHgG7<YEyM(u+) z!eSO)T3a6xF+HkMF}4VP&w9OjkW)}MM7^l!Ktg|7gu67T<bcw68Vt73&L2lb<D<f* zJK?p87w{jg06*d>WFmVlQd+i@>{Un`ZC75PE6^zgS6LR!(LUsOklpeNVugA+>f*K& zFKsvazfC7-k!L{){OR+S;oMWB;G7;<;F}&b=XP{T3-8e;C2!+W<f3r~8fj`qR#dFO zFR}!vu^WK}AD&S(V_KjrxK>Tu9B?d3p%80>ewc<~xt@MHYZ*NjjK*?SK{mCVXb$@o z@CF#lxY^hMwV@R!F|@)gk}p)qm%aGga|IF9RdZ{om22f(VQxk43T+u=EAszQ^YQtg zssA+Y=>LDJ{22ZHpCyVRAzIgKL;ZsCaIBE)AzG&RZ>nwcq${?brq>qb0#qtKRj?JK zmI$0F9Xqr6im1aw0t4-dd9%-1FRK3kw5jGUxe<oHiKlO>xlY?uqi?CvH`HKM*$gMp z29j_-r+IG;Wil|Tj&F=eS8vDLP6v*Z`3KUrp#Kkc+GsAcUcd8I%|(F>icP0z&q2ev zj0U9iI0TDzX~k$UBNn+^;+0QqAo6>cQQ_qz?7=pTLHsM&*qb97)oKibUIQH;9xRAZ zZo~mrX*r&h^Z0lm8sKF9xhB?^KXFHo-U1JZf(vCk;$rX`Z=+%A-uT~_4(=V9loN@! z63?oG?E11&kh%q3dIYP+Mnx4P1NY_~UHPRWv`br>FD<}FFoTz38Iq4~&^+c*t2loU zO!Y^zcXTl&>j~s?N7)#%rI(eUk~I?ylPK$cjHWnsG~c45fz<PwuW0(TY%v-`B?3JS zCJ9&p^?NYI!hs<N_)|9g<jGYXId~j}U&jTU+t{8`(prx{Z^a5Fe|8pMh~;!g9iAj& zLgie4<Trmxta<>&GrfcAS&w<;%R2{FCZe^a?N8hMNwI34>dfW8gEA1D%FY2y&7OfY zO$e%0$8PQEMt)bFz1p9)-=Bgn;<#f2i@(Mbq^)<r$5Hw5-})UJD!VMsqepyESbg1~ z4qstsYmY-IZGYZRjpH#R+kl90=H#7@g$T8jn~{CYcieIG$12san)kwb4~4a+>iZTK zMAlI@S65C9Y`z^8I_e^xA1*+4mTeh8@#DyeKX~LsU}PDd&{kK*sGc0n6ZjG1!hF79 z_FET7qNhY7J;rucTQ_UvShe`+)wo6E;?wlN6PBf|LVwtH1)ohkQ=p9~$F^O=$0B1J zZ{YuqX`7+_TZG4DG^WG=^mjiV<hB!cL%<YKz&vL|PlUPndb+Xia=SS+__Uqvfu$f^ zmp5C$K(SXE%i5HPKj`<A1V+_oBjA-}1c9TPSM&HhRHMU6GNzVjh36`fp6UVz^~Mo? z&+5uH@dxzlX({2rc`PfeRUI2KL-)|i#&ln8V?0A7I|9iVXyY@9h_n%fd_n-{V)^<) z<2m!{@vVkFJ+X{cPP%x0$?r_-wfUI1VomL`-&2T3os|#jlqme^*&SFAiSTvQ;8n(c zeD7i9?FEjFB!QJ@?H_(?{l5B5zob>B0!JYcFp#2WHf3xmZL!3Yq&loq<GB%*K_0}) zn$KI)5^G2lG4@;5UCl>^cl6T!#p1iR0JY=}4C#E{joA3Y7o=Y7PD4EGc<6DVz`?&N zj#Y@MSlTaBs2IMYV!-q7TASaoah=`WmX28-fI$Ut@Tu7V0KEum;7HMZqw3s`<W^c{ z#NY5QR`k%{k8PBMwWve29?Y`$<Bm`&tbClFyceDS0Yt1PsI~Z{A^s_VdR{%P%J{t7 zu<llbt79}%uyqQ%8JPPP{JI6E<Mxc-3iXuMv-EpiWxkisyPg7<Pmr;Gh<P5aM06ch zUf72et+wpKzo^ADr*Db~Q0bmutB(D{24JxePsM_hr?Gjc9*q}q$D(y#{PZ%KjnYFS z+#>FquJD+WbsIGBC!bCy97bM?RZkV_0InUMmP2B;UQ}~(nqX>9gUj0vDNE*}jw?Md zX&sN5;%!CBk~HLSU}9R0cMe&D|9?XgmRHZtujq%%fjRc;RnpQ<<TX15aSh`fIk?jS ztWP3`xL={N<bG6eeFA_V^5%@k`R_^(dbH%sL90Xy9e<E>((nwVrSc+8EPUQV%4jTK z5my4_PChSIUd%<3MuJ%AuR&eJICSi{>Rz7H=YK@xsE$JT<UE3=w!+zj+%@*G98?L2 zA{+XCV3-ydf`@NC@v7N2WNxRHx8QL6%|$zV<+Q^{lA03im)eN(P2B0eY5;i*v01rY z6ob-ZHwq53V9Mzw+yuEV=H|T677o$BXO}->(Y?LgctTlmsxg&D9#&6Ld|1mk4l9b5 z?zHvFiNp*}*aGWuCp2%|q<z|QG2V2E;JxCCL}!`1KbevQDbkT5O@;`G(Cg=8qhASm zB?B^e#saJN@CdwZ?;KpDtx3<1#!uJ->gj_rLV@6kIaZQixC56UDgC!-L47YJy9<6D zk$7g#89)`S@yF63^&|TC!>Skd_x$c|t^Mh)!FQ&b45>JSC`j5skAk(of5hKvS}C3` z(<3L;Uaa@J@9gJU=Wg1Vx`fK;&3MB<BHmFH>8Oq>;u**C8;iiV5NRn7I{}rf4Jcu> z3}{_Cs%h0&+m21#i?(}s-c63u_`-NRCPJ%$esnG7Im4+kVW-UP*iQJscLtHCNCZz# z4zS(d;AbaOYuVPrm>XfXgrnFau({32SO>a<?<_cjta5Xh8+?jG8c^UzHElJ<Ijymn zS_va{U>5*9o@=D{5t;bJ5gr8h^m%iz7gcpG)0axfe%k(9wh$k+a+D5)*|>tDmLBU= zL-SP{7NnKpEz2mlWPcQTBc5Z-<c3Sz+TjW?;E?uM<8;=r-hgyV`oR*2IclikLIj{F z+*9x$>=vMhCD`@D-YKCe;k*$D6~5q}tR9?-#;}%M#IYyxYl@%1DxQmL#UuO!>?jdv zo2Onf0dUarp<|(2mf>?)V=&mkOGx<E(1pgH2dLJkU~mB&x56&G5W!x71PN#krPE*d zJ_d!`q%7~o*?5Xsg(s=C`4PRb>7ZgN?|8~FtM9=p|9%woeYorZ>q~J0AJyU613kq= z4Mr=K)eW+~`8Mn;!1=}zazdc*E2xN~yV87kHJ*n0J;m<9wAfO0P-?k1;;TvGNdVt2 zP7ed3mSas0m+g+>12*<A3M4H^-7mla{PyZWeLTYIFc4MKiha4gsOzm}J*oV#%0{C& z_ALE@CoPC2C2I)U5VU7}>kXDC*7AU8fs(pF*-OI^Wi92V;mo7*)+?^mV|PuKzR4du zZTu^F8g)cX%fZB4L9pUs85#j4>lZ3S=LU=ga#C?;6E+Y(pb%gDj&o4Q%5qu`>E~Fl zWL*Fv0^=adCEsapc;eX$O)4C9+P)8G@ze-B)o+K`ew{m*3ZKf$?<}sonJvL@JRFLt ze%(!1I<+eiD^mr?NAsNtOsi23);rd-H;>XELFXQ%vPh$Se&pR&<TvyV<lXFdaa{#{ zzy|BuzS@3D)@LHa3tA1RY$<;IJAUPj7FDP<2Z)Z_;#<wmVvNM`<vMpX^J_mNFAI^P zrsGMtLED0&EWZQk&}}Fc^Z`!8a?NCf?s&0eGye$g!dsgpGLQ1cn()>M3-Ak@dhWzV zc{eso;Aw0>&rSJF`VG-qTO~Uc5tHbtQnEI|YP|_QU2zY^k+V9dWyM`uMCqZZ_fK5^ zaa1&fBpPe73UTSVigxQL%Nx@rjxrRkw`;IqPvRsJS+K98a>DtQpNkA^K?AB~U=h_@ zegj7_wJyqwqrmkvKj)~%xj7D`alWnWA74X}U^`rXlin2pB(E66ViT6WQwP&SjQ*1H zn?zvBr_V)up{WQiXy70;IHcj0pDWY`1f9D%K1|dUCHl|(u=^ag0%`A_G+YDzuN#WQ zVl!3?$Nk^8CGkgF_+WV<n{}Gj#bhP{;Kzyhk@h!ZA0BOO!G4QHJ$l;d|JUIE_u&86 z;s1m2e{Hn^?+Yc_O#3s{q|w*!r1$#Hm+;>a<?Y2MpId6*Lv1>WeLK6NUi-+o!02<( zwAB;eZ#3y)|Df@es`P-zhF7Z86=-ZD)aU6aqQvT17*60L(23PE+l_jVeX#v3DnA~E zxuf|+2;Xo-j>HGc=zW#tUEe|j#1G7+6#Y+_fj!jq{zwnLvz-7F(T1qY<0P3<*5oFF z+(VKnWlcWn(Up5jGNr7^>jk-&BvZ<oyikz)NHV3Y$qx#0UrDBvHMzSW_m^Z!S(9ts zdIkqbGNr7^`viHgBvZ<o{DvSWOERUb$uk6bxFl1`nmkyLQzV&E*5vkrJX(?|WlcUc zOZUbYNv4!FdAlHwmt;y=lUE4xWJ#u!HTh9No+8PVvL@dt$QhDMDQj{wL7pbbl(Ht5 z&eXjzU6LtfP5xMr-I7cxYx47gJXew_Wlc^K<V;DXlr_1BATN?+N?DUH&CoNLCCQYs zCLa*w97(2>HTf+;UM9(uvL?F)d4(iX%9=b>kXK4FrL4)<2=XdPrj#}L*Xg=9R!cIa ztjW28yhf5KWlerbkk?8wrL4)13-UTirj#|gpCGT7WJ+0+V+47FBvZ<o`~x;1@jhjv zBvZ<o{HY*smSjp<ld}bRn<P`pnmk63b0wKl*5r6W-Yv<LvL;`CM$cfOBvZ<od`OV@ zOERUb$!i6<NRlaKO`apj#ga@ZYx4bqTq4PovL<&H<Wfndlr_2fY26!Tl1wRU@-9Ix zmt;y=lV1^JCdrhtCO;|2Rgz38YjS@<u9jp<S(6n(u90L)S(AU7rhB7Sk|||P{#=mj zB$-my<Qzeccw3C?C}m9^C&)HQrj#}LRzZ%IWJ+0+BLz7|k|||PE`Cb)hFy{=WljEv zAje8FrL4*G1-XMHQ_7m`6y#2lOet$}S3&M7$&|7t|1nk1V4NgV%9@-n$UP*PQr6_x z1i7aqQ_7k=O^|y@GNr7^_X%<zNv4!FxwRnom1Ig;lYe<q_eOt7rj#{#vmg(UWJ+0+ zRY4vs$&|7tPZZ>2Nv4!Fxwjw>mt;y=lWl^WBFU7pCV!Wqdt<aDQ_7nBfgq2OWJ+0+ zy@EVmk|||PP7&nEl1wRU^7Vo|MUp9HO+NR8p1}-Brj#{#k04KzWJ+0+R}1oVNv4!F z`B_1BOERUb$pZy>t|U{+n%q{9GbNc))@1g$?u|u~Oet&fzXUl;k|||PUM|Qvl1wRU z^236>Op+;OP3|MeD<qjx*5sywyi$@WWlcWznC^{Ll1wRU@;?Q6wIox@n!HGm*GMv@ ztjVc@yjGGaWlg?8kk?5vrL4&prsx@5FUgd$Chr&I4U$YLYx0|dyit-VWlf$b$eSgZ zQr2XLAa9doN?DUT2y(6@Q_7lL`Ka!V-I7cxYw`|3E|g?SS(E=F$onOkQr6@tf?OoY zl(Ht@CCJ5+Oet&fRf1e1$&|7tfB%T?jZ#Ublr?#SAeTuprL4(5K`xhMN?DWB1(``Q zrL4&}338PrQ_7lL_pqM9YDuP)HTj?**GMv@tjTW+a;+p&%9`vE<T^>Flr=e7kR#ra z<7cF-$sGmRCdrhtCjT~B_eQiNQ_7m0C&)39Oet&fN<p?uGNr7^PY80XBvZ<oe77KX zkYq|(lUoRKCrPH1HMwk(?v1XJOet&fXM!9j$&|7tzaYpxB$-my<gtR>Q<5oVP3|ek zy(F1Z*5vw$dItMQGNr7^hXuK>BvZ<o{H`GPmt;y=ljjQZ07<5lHTeNS9xTa}vL;_E z$jOpSDQohX3A#6iOERUb$-4zPMUp9HO@397M@urLtjSXad5k1e%9?zSAdi=1N?DWb zf;?H0DP>LmdA#n8DUwVnYw{*R&X8nES(E*OJWY}*WlbJ0$kQd6Qr6_#1lcXgl(Hr_ z66Cp(Oet&fH{*0~WJ)rntjX&Hd66Vj%9{L~AZJN3rL4&#1UW~NDP>K*PLP*LGNr7^ zH4o_-Tp`JnvL+V@@=8gjlr{Npg1kzSDP>K5T98*uGNr7^0|a@EBvZ<o+(wYsN;0La z$tT9@-dHEel(Hso5#;rfOet&fGC|%T$&|7tPZH#fl1wRU^6i4WS&}JbO>Qj6+a#G% z*5r~gx;JtqnNrr|4+VL*BvZ<oyg-l(C7Dvz<WYjWUy><hO^y@fB1xu{HTk?t&tS16 zQ_7mWSCC62nNrr|zYB7yBvZ<oJYA5>B$-my<UxX5F3FU#Cbtu0CdrhtCRe2E-l&pf zN?DV)339b0Q_7nBq9E5uGNr7^j|g(DBvZ<oe1{;{NiwCZ$<cxwu~v?sk+LQqPt(0& zlVnO+lRpyVXi27&HF>ch$4D}ztjVJV*)GYHvL@ds$gz@4DQoh@(Rv0uNHV3Y$zKa{ zCrPH1HF=F7ca>yHS(9f8a-1Yn%9=bxkb6inrL4(U3vy3Mrj#|gDpmJJFG;49HTg?H z?jy;RvL^pkko!t9rL4)1337i)rj#|guOJVQWJ+0+n+x(_Nv4!F`QH!f-bj{YN?DUX z5#-^LOet$}mLR7{GNr7^E<qkG$&|7t-z>;uB$-my<o}G)GdNz7DP>JA66DE}Oet&f zJAyn#k|||Po-N23l1wRU@-RW3CdrhtCU+9#>5@z-Yx3z7-5YL6rj#{#ry$RjWJ+0+ zUl!y{Nv4!FIYW>aNiwCZ$%%rTCCQYsCbtyi97(2>HTlPpx;K_dGNr7^8wGiVBvZ<o zyhM;!N;0La$qxzgDoLi4HTf1nUM<O#vL;6e@)}8|lr{Ot2;CcNC7Dvz<o5)5og`Dr znmkXC*Gn>`tjWU#d4nWV%9`9okT*&)rL4)nJM|21mSjp<lfM$=ZIVnWYw{{V&Xr_J zS(Bd<<lT}?DQoh*f?O!cl(Htb66F1oOet$}`EcDEMUqS@Yw{O@TrA0yvL-JT<Pu4y zlr?#RAeTxqrL4)l1i4I-DP>KL66A78rj#}L+Xr-SFiEDAHTiu(u99R*S(7sbxmuDb zWlbI_$TgBoDQj{!jhz2N2ik~H@Ioj26N!}JW60PPjBjveEV4Q6IG!eN`>)t9kNr;c zCb0j7K8@%L>3C;w+%9o^5<g36DvsTFQ@$n6#$}x5d-pjXn|SwU?7lSI&fG?^N&Xl5 zLJeAY#Tr*bVv!A|sL9c+qqv?JxPDp2nzbYBtWU`G{jYTW@h9~A6N6qKNXD-6jFcwO zsNQDC5NsH5C5=~w1~Ev(MjEzhII*MWR9$|s4pm^QdPW@`=Fv((bmAplb%3B)y6W7M z`c)}9^cg{Rf{qJlv<|Hzs4U89XSo6zuR~sfdeBwx3Wz?jLHBxupsoZh6;Or_4JD{Q zLC*?knhy0Os1HG-1vFiUS`m~?P(J~=b?6-4OUNi$InvIq70_HAI!;iZ?tr2Mv`B|? z37Y#dASQ}9ONZViXaL>oYXRlx&{BfN6ZENomg&&51VzLFdR0Ixb!ap}DRfn)fL7^H zKZ2$Z^ss=|=+LzUO?wBCGDJXYbtsCU$#hk`fY#{{!%GesSp?Yyv|fk4Cdf_DSrJhi zbm&upRuObeKpS=FRf1L$^re6{>rf^^8wgq}plv$zFhO0(8-4-h>d+8^hI^2&X9Toc zhvErJ`5wWRDxg9gvJ<qH?$uX7B|3B#ubOAfB}a7@P^k_bBWN8(ZzBPf>Cl%1RhJ_G zPCl+zhjJZSOVDn**M0#p9r6>jnV?SuRHZ}D5H#%=?)8d*s&y!ppc1<3IRVw^5Pf|) zV?RNY1yrj;oe5e$0r_$Ws7{9(5!7Kg?sc<(BBHdacM@+;XY~CIjhrGNn-1+Ks0Rtw zJf>$kT8BO%C>AX(J1QW%4!uGUBMWy3C{~A_BdC<1cLdZyhb9wLM^KJ{=s+rJ92^8y z6ZEuzy6Vu)1lgYk^q_#^bVwn{M$laXqBreGum&F)%7`PVlYn~a&{2ZszJ^kc6i_c6 z+Ch+w;_$>2-5Y&$=pBM`m%tnQ1k_iD=(Mhk6}xfO1_2G$p{EI|&canM3n*EKaI`g= zls`}?^93|qhv;kd8OvUQg_8u7qC=es>Pq<<ETGXk6iHAof^HJf7#%uM3#cbSEd?}L zhxQRPfS^Af)w4WBhc*z@m!J{>W$4h$1SR)IzP1Z!nhwn;Xgpo@wt(C^G>M=Tf|dwq zt_}?*XgWdD1eB>mHxZOU&?o^d(xH|FEh6Yn0cGjXALjwhC8(o-a&)MKpfZN?iV)B; z9okONh8*PUmq&DOtk9vi335|;?G?}}9a=)rGP>8t0$Qy@(+J8TXr+MG=+G#FRueQ& zKx=jAPJ)W4|C%VEbvo3Mpp|shAOWq{p$LL9E+Ah$1hheiemMtdBVE-(KpS;vFF|Vw z`u$-&%iDD5V}gpPul!CxyLD(KK|Sxmy|xKxzYfjg_j(f0TLLQ5p@{@dqt@mH0Tt`e zAcBg?jHd)t0*D{rcD`g{@;LF*7Jcu%yq2GLe<8bmZU=WioX&j@hClbsi3!-Yqfe;! z)&4QNyZ-4Tejc+LlcS%d-g4jx{!$wM!g)e&U`$NvgKX^K%l!RdeD%*=m^u~5mkk-t z52p6t8yJFPp>UXy{uOnMKmTv{U!G)f|D%UO@1Os`|LFcLt?oaz!TpE)ukOEmfK~pB z8sz`}|5g62?mxD{{fGRo?!Wv#tNb5qkpE%-tNdHte{6&M5BXo+fBC&u`Nuqj-p>!# zzx?F?RsOB+KeoaBhy1VZzx*Dn{D0jb|3m**`M0|N*ar6>^1r(O^8Qx&-`^nrL;g(u z&#*V||3!b3yAHGS`b{g*Wn@gwOtrJeI-kVB5foE6vSDckj%nZ%LKmxh8<#Z4*AQ_2 zWDI@zJ7R!0)|XfBZ|-T4%HFuUqMpuwq(y~XC3_SutlzX*swzg+K3tW$P8WMGtZK4Z z_0kh~<33|IF09|=#tH}P(Uw+gV(5-PaID8GBLo%$OjS7QzFxPtbs(wU-xME2Xy#&7 z{rF0cJgLEgvPYw^8N)PhxepsXmDtJPsmZv#@YLbA!g<OKQG=&$G~|iCv&lxs$~-kU z<cVW_1*SGtvQIybFTC?&;O|B^rA)QgE&eiDly4{W>*^cDnCz%g8XGTkM+sAJ3~TD1 zz9v&MaYNyLT8v`vw~?k!=9uPwjs*lprVh3+bsEGGEi6`=Is*$6^_$34EfkMkV{mZ& zW8`33B5|=9Yr;9WjoIpaTxjJ08X3FT4Pm7U?=m^yIY<cyY$FG(Yb_lxiDQ}rIJQh+ z<bXjyL(A$Zh?4`_3>9TH9cvM9t@t|Cu2Gu|c!&PT;Qyf+kBiND6WkW`0|Hwu(POp) zRYU%(rv+y-Mbkzd&d#4g`Jd7t0B9i!`6t0E*6PAL&H0Cvu?F<J+E73f0gA9HdLx|b zOtWftt{N=%pF0>-qq!<A!noM{u&SNRss|rM7;O%uqB$UG_BH0LvR(TWU@D&*xma9S z)%-h59+)RoH8;;Sica97G+A)5gMSa_fEi}dI9yo2DK|>Q{ZH);4rt0%X)@tr^TMij zG^-wXBp9stNOT0dq{v|Xlw(@3a_k3zQLw%OG&ERu^wEO#@xjO#|AxsfEFy#t*1fC2 z{S(3Zh^9@!dNpo+<zSshf>#XIj*u}ltOp)82kWwS2CsesPz3AsVO76MFsaVvs=;8r z)2KR*t7^ge_3Pnmeb%hn4Hp`NwJYY=GFTgPRjs+26IS(Vv+DlIx~dke`!Iu*q8osv z@|mrRbqg!H`*xE9=HNnOu-?(u;MRw@suryK{}#>x&zM!O!-aawI=d$u)j~#UGzWO3 z0_ZCM-v3Q%7^dwZOKs|xNw_%=(@t3G2p^``lc9eiO#juJYg3rc#I21zRj*is6Vd>t z@&$GmD|juO6P|>kA!0jm)fm|h9BX4xt)ED$w5*8!FRW@CvuZvrG&b5<M%DMZDy{gt zSjVuc+k2U8oz7K*_25>cYARRN>cLm5!g=5cv+6ZmHP{lCv^IF)KNH9UT5vrZR<)H` zbvG^)!Ii;ku9Cs^AqTYJ%3#L@K*9A_K=(w@7&kb$+IpK7T#wu*g6qq(SbQ;bG8vN$ zRm=$qR52{*xY(DkhV#P15H`d?EH_IV<`zbx<xUcoDcQB-DKA>f&9UwRBdbe+hFWdY ztzLhxu(}znHb(EvRt7J>3JG|bM?|x*R)2V_$?A#RGR^8m@ElW{Nk<PfSk19#1x8li zU}5zLh*L#AcaN|-wZ?4qHoL*<AIAl)PJJbuug~6MvU(jZv>F|1#TFe_>I1XX1W55< z(3;!v6AZDC#O>3@2A{ng&b~CWXf!Squ^Y$wMoX8Ten<ww>^Rm%0OZea0fk1v<(`^9 z-|H{@8HMk&Tjg9EXtoS%<OZl20`^hd(AXzjrx=Q62tZM7H?Itr^@q%=EpVZgfm+c# z9ac&)OYIyhy|^i&5n}Un6Y0qJIHuJojvWyg`En`HP+xu;ule$!MB&RX&RF}BR;gWV z=S$&oJq2n8U$(~$)i=hY6EM%$=-CCv|6!%BHcRav6V8D>!%7{v*<{sXNQp4)%RXr= zy_dlOtqJYRRtbPyHxf{&>*hd~s&$vUh3hhLW|&neYpz@J*Kn@8$!uh)%R0ZYeD=^k ztkl16GUfL#kTN#xFOD@-W;a05u%Gx#I0JLcs)@Mpt#u0x^E>(@ga3yfxwzP?B-es| zXgI&4UopR<f7ophh97Axaw0ugG@V#Gn=G2IIiM9yC-$Ex9iXDw2q?5@N_%KUlhs!g z&5t-c<jO@;wIW>3mqX1E)k(Oal@vX9b+Na?N)0kgol7&1XEt7CXl#xG6yy2_!m9py zqshQEA*vINsy?ntPxM^u?2F;D{i<2@eq3ni5{9`9QFJR8)w+Z=VMPa;MbD0w1-@wm zb+p|Y$ud96F|9G<SQCL!v2O<&TI|2vpcQ-IPEqWq=v*y}6(g-io?RX`|4=g&`~A3~ zm6TTOAB2?}ZkDP~H5dE#XhX681W*+F=&-8ix|<AqKScEjqv|rQsula?K)7tLF{`HH zLPN1Xm}V&UySS)U?C*yaeZVYw`9WFivwN^xBV?KX!U3(G_h4-WKn1=ZP-ubI#AyY- zx{oOE3pgdts+3mpfVYJ;@;#^-3VbYXXq;@cZ)zx|{s2WOeY7l`KU2)AQ6Z{%O$@3h zMv<ykN@K#RUcBC9>pyX!-luJfqd~#3%M6VwUrqiC$FzFHu^j><w|anvy7li6r=HD` zAl&*kol$5}k2JUbQw`^Uk!DjH;f6-H<~BAs;Fpx3TU}vQFLX0GU_CB0s!lbkzQ|QI zw?>9leaEbtjthlbOR0JC{YSd>ZjNbg<=7JfBez})G}Ns_AWm-mt+#ON131*Nep9KO zC2zDDd~tLn`GPk3xYz?r!+H4E>rB2_gA0wmm}pe>aaC=WeAXXM^;NU#{kYK35DXh- zXb5iQqI&xuR&=0Q^z4YBgL_cicB_*PKFTr8!5nKMFy8(H4R!D@T{Q;>dI<-g!l@}n z2d73E96T2i!ojC<!ntA@gbgjjeYnu*;Qur-sCMJ3nuAw{RlU=!TH!P~n2j_z_-kNd ziR-?wqCa*qnYt1eiotF#w)>*=?sFW_TH0RhLjjO$9|08V+NF@C*uDKW;aYU_mQ4cf zfpM|FEeYq({$?Xj4<~>2m(}2(kp_Pr2AImXWV+bku&O7nHD&!ZTqr7U1}#10Uy!-? za!iXYj(s37a=^ntLml9UI60vAt-=Az%gqZWca1O<SSM~Z?OAlO<u8QuMK80}KR=*H zfxg!Nqtl?84=|PQL3OddVO5WHHu)le3xzLslP|W`N?*+2nC1(Py&*92MH<jhUw9!- zzUYpF+q9L*=YOVp7JTwrS$`t9K5OSzYc=Be>~Ow_Gh6-L{S+7b(Jp8Y(Ox#HZUvai z_guPI&#<ZoI+=X2n5zbDz0asRg{x{^#kX1EY@KUXjSo?+xNPu1ORl<>&)pV<RqbY0 z{bpFO+-j-Z8l9KrwuNI_xpC~oIUS>N`#aFka{H>IR&Gzni*nnGQyPusmSD7c3?#%D zXRj}uFQ!4*&^~s-g~oFG{yzp^G~%kXSJuVcVO86iRre&DTiqo_)%5_y$m!a!s=3#g zY@HRN+S{m_&Q-N?D||kj2d0`;JL5u8-)gAb?msKbEs|qexpC}Pfl;~rGPGg2wSYL) zx6f}9<<`2)y7AS<W1YjA`sLLo2h79`jmrbmhZ!22G=Qmm^D5T=7l(7elV;UUxKQ*v zUD@y&nfoXX@Z8Vt$`S-XSwA(TVb)tima@LJhsb*SA1Gvp%SK_*B|~t%3yD;|Z5I0n z!rHr~gUJiiaG@x$avJHq_J=e%g=1QQam*_)vbv9j)#D*fR@<c25C2>5EVKpH=E(*p zS3AgP+C1!Hk1Pu3WSiOOFL0sJ6`qR*SNx5u(hg!5iwUdxQG1gs9>#^*K#woaOde`5 z)xkw+<Ft!?u`ryeW6h#5xKQ}FjQrd0cj@2i!Gvl4<ydEdk$;PUhBjn%?KJ<cy+K4p z<oEC|-(0|V{ycTT;E5Gb5JAx>tkG+sYiP$@+%WAiz-}@+>x?uykz<<C9Lo?G8QleF zsL?}pqfd7iMh`DF8NI32VD#}pL8F}u!g=~MZ4L@<S9%*43Qy-y({r#|8vO#tG^088 znZU^CsX#-G{wu^OlJAyAzk1xd>Cu+5-}Z(xb+Fmg^8<sXt|9-%33HU};~djW<yf@9 z$kZ=^hMIbkZz!^{7vqF~tB%#z3s-C)SL{A5UGbbjpJVF;M*5R1^q1)Rw@LkFLH*g2 z*%Lwlv%jD?fDr;9<;E7ux9G~>TrVuY-JtAdErfuQy*o+PmDz4q^P8R@QvMK7s85dY zol7?MoK!A3O2wDi2#Z;!JyhD7{LjyYE52-~86vGOZfJb=cJ8bpemeq8<@>x{ED%=p zHnZwa17uLl9?x2f94gs+IKU$Uz=dB8S>FICH0vdN&ytNT>L#4}eTjACYKwtvez>eJ zg_<Gj_uz(B>mgbt_<LBX`^-|m-zW3CDJv2|+C}6HPro>(RRWGh35*JSE6~tf|I|vW zuS>5Jxjy-wb*|(1Jni>+;c~qaYKB}7#SO3gJm()_rG}ZM>h866Aic=pV&lU~UACL7 z`UFyXEuTGr{a7ih_$m%)0W*LV3V>X<5KyS={sCEP>PB`Iu3P^txvntEx~_aNH=OIn znvIOPLVoF89T%GxR;s00Di4N>R;?@QG5hV5%<{V&(*lNLhXqEt_5%&g^(TC{6wYh! zB67Wnj&Zu;CcC^j;d1>b)C>XB4tKMvCfZzZc37znW~qJsgSn>D(phbV%=O0{({jzR zQh`yfUjiDM>wmS>%KFi3MXqyk_LG&V+K77J>~Oh$8fu1Icf}2@q_kWw3M<vkEcH#I zwUjnNy(6sDci3QLuxcr!MA(!>z=2;d>A+_=ra6#fuM3PE_#n_w2hN8$RhDj@g##Dj zL@;A-z)l-_gBFm$j#s{xxzH2Nm)DuCF238`$Nbf(`UODI$J`WFbzh9h7YlHq@I?;! z;=_~D7msjE^99FV6d3tp2+&YpJOgp^MY~SI7qf7<n9&!dzZrZH$*rdMV_j^PJDe}t znyoJE7qq&Fs=(P3((3gb)2!y$QGt=wD}aVty}7w&_2iDi>g{wyqSYclH??q9I8&!W z%@Ayzal`setI;}XD>uh~H8>ywASRV~$JWJWhE<I<s}}SPI-n~#pyn6pfDbvQIe=p& z0wV{!2sG3IU+~>VHa6)R;ec&L;T%vfGn@mSgqpztop3{=1CCW098iB(&;c{Ts<tt! z=Ho&UxBJNff0RoHe84fy0UY~IVB~=1Ktmm{iEmu8v58j;2mA}C7FtCBy*KP)`7^>f zAOmU!2Xw>@t)#RO(sN;@I-8}6?lk*yd8NUZp8*uX)IF?f0rnLc44jV(g)g(H4fw~; z(w7rCrumX%s=&yX1A&J6aw^2B4QSm#`0`mgaPf+@Y5w$ZzU*W+_23<52L$j~L+*b4 z6rgZGTv*lorX~l>!-c{Dx#WQNev%HDz%k7M99t?dazGN$PzO8-adJSb_QC<r(D{oN z4$vZC-m~Ex(9vw_fj-jI+5Oq&AElk2bAa0k;1>aqk*fiP8o8TqhqAG0?SzqgaCD+^ z^=syxhSd%iB*f;JJ<o)*_bCV)V(Z$Vy_<T`5bXhBnUdWoXtIXgCNQ%4L_$NWTk2MC zYAdX61FNs>+H1p_nu~o+22*F@h9U}jlBsLTq<38$)1rW5Spp+d6D>@A6yg*G&84Xs z`>ajXrXRDO4(HXjW>X7qr)sc5b}BENG*p8R0jBcz+g+@4Sk*7Ft;pbjnOrrv`?r@- zHI1v%H#)HXIW3&6PnuOb;X>W5v!}7)KS-ZOaX^dMX)Hki<j_;S8<u@*$dW_1wh?9D zey_Dd>2ns?{~p%J-Pkx~$od@I&^S!F<AlMX4*^W&pLlVx{ZEC<`ZH$L>$qxg>-P`8 z7*uUsRonVKJFIF4v+BNHL5EIZm%f({{geZmL#MEx1V9db4Nzzkkk?3a=##C5L-Px* z9jdicho*+h`Yfm!9C`z8c%@Bo^vM<%d!FR}#HP4wG&5;a+@agd3-kwj8=9z%0P%E` zYu^yo)WS%Usn6j;QSUcW>%Xp4x^xo9w0h66Wdb9w4gwnL)u$j%VcMpZ@apt}a9(}x z$#7onY&Ny%R(Q2&i(#uF{gJ`{Lmy+n^FNYnK|eIyYDm9gt0DcvcJmEIe5>JeBuWe1 zT2}CW8vUW|U(|}~yNo|qRL=%QZ-A(=H;L<ID5_=vMNvIR+E;x0r!y1{QB`zHu&8RN zsQz<I7S%?MX+_1c9|cB5wF+oxQRUXt#Wt3qz=T>l2>Pq9%(InSe==0qR7i+9)>lu2 zv-$}L8?3&@V6~mbszZfkO7`WRlq1b*j>QX%to{jTsMS~LR)5-3SgnLuJ@-e0)qjVC zuv!Ug^(WX2Ww3e*w@h2|uO_Sia#Z>{*<dxtJOU%Dds<jMn(wr-vAPz*>an}=3J=Ai z3_JQmi)F3Bnfy4oe<GG^`F0~7%OA&!CpPp1gne|2A?jWNmdd}=<6@0T`ifEa4+t7O z@enQ)J=k=%v_!fgi33`LJDtrC0QsN?pwN;_(d=ZkF~SFFyTUaMlOGFbWFxbYpWlpH zOqrJM<j;WkfBNuVyA{d(i8rF&=bMYTJ10X_eWM8D4D%8>eOb%Ja;Jo|?-9rtoY)pp z!ijyD<2&iZx|?JTnB9l<6aYE#XF#D&Y_3_yK5H(VXx|ymi5<flx&4yK$mzJD)o7AF zkK<xRkA}<dOtVyXE_Ef>Wrvlz(JXbWhjiVhDyoT1zm?wG!7;7<;8^81Iz|qB8)&El z_g*A|jm^ADIPf42^R~*hRtt|k5-!)7P&1VBZMfl;1LnoBQoYSm<u?X%T|&8TC32=@ z7jjI?HOI~t8*;rKXlSmB`K~4#%WNicee}yKzd}eKDRZ&1hr#_56=trcO(T@saO*Jn zC&4SWI=vxdaAo-o!Tc}c`4@Ra{yC=QpJQi_81oObLH_wpCgeX_=6{E|uN!#W&}%#a ziB$gOIu|=SIh@tcLD*pRt+?>Y4p<&ms+U>n=k7rV#E}E+B9lsX0mn24aIEIA!2urv z4Ryc~zFi2<|C$O1lx#OUAnBOF0gppMIG|)wI0wv!u)zVh;KD0AAP`pSHnY@EaX|;v zkpmQwNxc8hG0g!S`{R(o0UrPjb--c1C(6d=HxUl_Zku_=zvu=-Z}}J`Qu!y|T<p7v z;T$jz!UhNQ#D&I@-_1r<g{#t+vRrI&Sk>#zs^4C3RxR#suyqSS6c#>I=3?<-Rlmjt zBZIAraG@Cb7n6toS)_YW$)3V7&BGk~i@>O5O$Hk3;pu$$l8tp}EIjP_SMafWPttb^ z4JF%V(C1ihfssDz)==NB>u<IR{k8`EGSdI`ptOH26vW7qV}}Gr`Z*T*8~7F^8yh3_ zKi?|tpPk882mvK~Xiyx$908E>trp7Zy7J{HVfi?NatC&&5Kyvzy-u1vy94Vi08%an z6zcOjz5&U`)=K5bpz@}5<ddTZq)%1^#WifZz)0V1p}$(!A1w9X+7k2$zE>&)l<b6{ z_-s3SQ~;!WjfL_+UHMca;gg|3<xMOSmUj^vc>dj0x<$jH1V;K>frfhKC%$#a#+FL` zlbfaGn=(oN%de$pW*hW5_Kv_v{~-(g=XL#?rT!9w{$SFdBs7%lb_RWp4H6jXU+mJ* z{%*Sd-bmq}8x8s^BA{QtU)sM33L@G$_Orl9|8ExhJNYgp8=ETi3%&^YXFA#crqEEb z(+&C@^9hXf@3zo?MAyGc>OW!7-%R@V2@NIt+_gdbId;9kNdFkn(DH4h>wgd-{L|E+ z-+}ah*eCt-ib0=ay97r1^DXq>uBMA^?0%{Lk4-`U<dXhEp`m2oY0&4`qXHxSYb^8! z>iVbZ%k|m!(4hY86xK}$DA`9lOXmP+CIC{-1r+KTc3QK1g;f6ab7}ePF|2T}bjw16 z@)-8907&_93+3gy@|{xoC4+J@dqxN-+1(Aw$t+C(q#R?R+(%a~y)3-ZFQ~j}Jw<yf zp@H#VC+QFkJG)2E66vo8dJnEJe&wL}H_a!RQvc{i>61-$r2mP~P_i=&`W$;%V5C3X zLf@_Hcar+^4Ek#*T1E*CB|F-n&#^lMM*3A98`>YM>u>vy@Xyr-{n$p(KT{}+bsZE$ zYrwH@1V;MHEc7@2s`+QU)Zg-1&_A6>|1UxVy}v=9V;+H#eoqVi(Yk(Jov?qbL4Otb zzqimp?|)6uevY*j80qf^8d|<JRhs>)rT&FagZ8f={~s!l{>d@ubL?}0k^VFb{gt|Y zf2sePLBBug&k!0|{V?crEKOjfA7i24N7paCB>dCQpx=k|TL}%s|J6bNaO`Zpo;T88 z4>Z(2#g&?WGNt~}PlEm_=J78y5dQ{!j=d}}(jRW2@7DD@N&R^S{r#jrN@yVd4f-6r zLtvy|)uEyNvAX`Yi^4xw8}wtyKWDy@<+~0FBK|q{jlf8MnT7twQ<{IqOZ_byg8s3Q z{$GR!;@_apF^|AVzo&)%XkEYVg0O$ALBEQ}ztBMZw-4ISv9<yu{rx~g%eSUNvwyYJ zzwmL;{#9iEq21CyIR<@>eJ(K4pJt)IQrGV<^<RU&)vAfMhjQ&G^vYM9>JNdMVH$Fw z9nBf(!JB!RO?#nwY*?vF%p~;@q>K-;rtLFKYX1Tdud(pOyQr|L@0wM|;KD0CBA`#R zyV%AQ<o8cJ%^411j4EiYBnqNp@<sb&Sg&2OfKIjz1^~xm1x5w54`^rr{BcqXfY;B9 z0IU6{d3yU+d&89R1xVmqariv6i`9+{S5|+6u%WD+xKMj1fUhtQH;VS=qS~ic-U%z} zFpJj4QmF-B#M-pSP-@2kikFX^VO39`Fq!%`E|d<Y8g?*GI`{>SX|vnagncG3a`053 zp$`5l#A!Tu_c`I<SJ%@5$`}-#wzVn3XmxjPHGSS3-@h0U&cXf6R#&wlUj$V@C^Y!u zAVBdbHYu#?&%c;_@d_@~S0zZAt!!%uhIw4InA=+E3}<V=tU4gX*2@J3Td(J;Hm>?| zSk=4Cs;63;>+m|G>em2M`H=!Hc3)W4AF=Dn5V$LGq0s|>jWu{+4p*(?Rk>n#I1i|1 z)q6v1t;;uf;5x3limSd9R`m|EDr*&tT>8c(Yx|{)-2EKWB9~(qcIX&I?gpTtkz2yI zEMfoqA0l$UfB(vBzjkhJ`2%pmpIH0N)U>HROTev-3tzq47#!RVAU^cQwR1@OihaY) zP&5?V_jX-XdtIuuwLvrwn0OaDA*|>(*tBF2&B2ADW#HA}^X<~V(>SL2mt(I9jQpDd zG}OOy`Hm<X>-xL!uXml^^lC=mXf!&88?AYH!TsSp(ba795yiTf)E-kLgq8XRJBy6@ zhm^=aZO>qzZwuz1V_N<>_L{(W{(&~gKi{^5{GXBe|HqZ%OY0u8hW)wt>ZEB?d>v_N ziiE><LnM3wER~-p<YG6G^cBNvA2u!-Jh1>53Qy3RgzUqANl!e&G0hVkdr@HIi6KBk zJ@E|R6@~r3)xs0A-m@MhP2n|RL2@`#yP8cs(!yN74k-o)Yyyb)!FglbBdqG)A50GL z;zHp7`uqg@V5@Y%!yMBbz_H~5BL_HuhC1MBh*Kxo_Ox)o%y-EF)1ho0+tG0$F6JE? z&H-J_rXG$lJD{kg!2zEGOyy_txY&(hRrmbc<bX_EXdHXooo8slCvjD6yZ)ge;cT5{ zR=oii3b)ed3|Q(G>DH?_rn!}4cL|K#`djmcZfyr~a_f#?g<CtWwT>&TF}NYDsfFL0 z9Pk`&C`_F~6NPn~rKyuRrkTpIWdb8p2U(c<6vWBYHqzAT@BFuo4s#sv?4Q`^plI6E z8023SG<rN4{l^#5=npui8O^cp1V%<L2O1i-n@TmKCsqmn{_AZT+fmqRW4pL74N)-+ z5~=)D8yEZ6;BZkf0m6pX#%{2B3|W1TuuRFWX+}BHtmfEt0wb$SfQDKfp<BJKQdr%X zTOHiN_{<K2)h|Ipym`?$tkwTGZnF9zTxj$~2czmeTy;Eecs?E!&KIN1sy19`m`Fr5 zH&kX8O{UTTKrZ%BSkby;CR0Dgg(8+y$ibzb%dmKfW153GmMbuF@Eo9_4t^8j6w5<T z2?wuTV_ogW^XB~HfnoD+Hr0k38oj!6o1v^uHVsDD*s!XXj+z|s5iT^m{rt31^sijB znwx41EBc;UbSy43n%dr|+Mlc1d0Bmw6wU!DX4NQMD9UO$l~u2evaC)v304M<#R`nd zY9G+hvihS$E34O;D685xOoOnuqYVMJ1PbUb`If;81Hu{oI&=*+cmy|0+Z8sMjDGGj zY4q&|qd7K7U}SVV3#0GVjXrTw7(GZBt@)c(H8og$s4-cs^_+vkTK&s+CaYKBLPK49 z)hL?DMKxFac3(JGtT2lX!iA#zlF1d*Kb5Yykz-n2<Jf3{kt>=54K2R}h*MoVenPmS z@88W$@LO996(rvltRQ{ET73+gg$xB4z=gu<(PZ`3Po&i|IHp<6u{Q)pR;K|Cwb~1D zvbwvp`uWx9?XIw!l+KcKG5@`A@}F2Lx=z!k-j2?`y3*!0I!?^R`fyQNl4-c_m3|dR zDD3}+8%&};hzd{GXz06PgY?7`9Me3(v6TWNPdorL)DyEbVb<{%QGRn@|8J9kh4dNZ zKQYN{A2j*^3^h(N_uCBh;}d|X{5Ve+yPmYKI1Biy*c23VLsVxQRmX8vH*Yq-rVkBY zQT17~YByXc92|o*8~L$xa1)Mc4(3>bz{tU;5SXD3ZVhn?wXHu32e<#*e{=A)WbU7E z@TMa&DxSuzjShY)%HUw?HdFZtq4@r9VmMb!fuf<-wa10R73+~^gFlk4xP;|5G4SD7 z4}p;@egGQkil&;m?Bkz=D`H;zZ?0%V=Kcv+e0W%Qh39dj8>TdpZg4w=3%;c9{a!H| z9)^;1fv1DWel$gb<DYu=-R;$;JbOwYc@@s8%f(4P6$wZQk8pZBL06l44uyK-!Xa+) zq=}p1*a&`<9S)|`|A+JG(p68i%eSC5LS0~UH&qX?&G%fWS4Tu=?{Rl67=lp<re=`_ z(MV6TQEaUyI`w`R>v#TCeR_S7+7vB|fyPhf@rrv-&=2I(@23vIfl2O`^&WdleOinU z=Pu=X+NneEkGn<i$B7emCFJ5i!dU!^>s3cI4p!#Y4Y-1JO|;u4<eIJ}89I-zs)x$Y z`P0t)OIK|<en+`}V)OLqrTjqY#rbrsbbp)2mXKSiq-QL;(9@pIMojn*>R3#|VVu1* z>|1|Y8IF>U_TkuP^_K~|U{}JP`cIQle!c_serJu}Syw;Z#$Mxv6YY0Y(@~?Hspm^! z?u?)CR3G&<@v@S&A3aCCr<yH{KSfp8@2Df@Cj6>8V-n7(qoNZpdi!sw8soJ4>LWKl zyQjBZapa}ohAz56hn4)Yl#J+Sa7NS}rOO_)vyG3|LMj%9R6GNngj~O)D*NyPPhf`K z@2RbfQa!aPbjzMkYj#9u*W;Y0J6-jjXf_6IITCehHM`}OQ~WroSQwPE0+C>GUes#` zwHk3w$%!J99aXS;fX`8jj8r8iMQ6UGI_#987Z86_BLdE<0tch08WnKXjtZnPwUE6` zn?StL@GTK(aHMouL>$#wttQ#j0euh|cc=q8;h$S!d-|yQB1BDPZ)8w2NeR4wUPnLa zO39u_9aP0r_%GP%w^O6oVb4$GTwg8TW9W<DeYKIE{^`gjOYTYji{{9+Kwv^P3O_;} zYD=%59+Odu9#nVhgh$A&_KNc;WHqe@#ebdZD68Kv7=PE#v9W)Ch&oM{`3Y3AGB0C3 zaKB9*)(7!wSCh#8X6X-V#w)6`hMRVm!L+|a36&vE+<XnnbZTV%9mP9Qs@FEHp;D#7 z@X#GSRp~DFKAJ;14=*MgCGapA=ClVKRZ}BU0*=}g_?O*<Eh?I8v)98Ql)g8bGOpaL z$6HB(qn5l4;pJVRKo@2VZ#TwHd3p_b(yq>-FU9-3wGm3z1r!lUWX?qV6jIPStFref zSv&DN1sfCPH!Mc&zZlU}>-Uzj9cRlSMV0+lRaUtH$#BY5zPYvtCHo0nPW5|$4UTtZ zBqQ?`XQ(KWZHq7D9!#|>S?BQQ;tLs1BAvaKASsj_t!^p8Lo<Z(Eo#$xe=*Yj#q>)- zQ|Ly#mAl)8Ky=?&f5&d5rbf7^9AYZlYg72^#-rJzDoJm;{F{^y77WEw3@#ta+nIu) zSeixS-1qkrR6k0ouJlCZ=FZofX~V%8i}?;ETlTri!K$+?aWU<6_jIWLqz7!_^{jfm zEVxR9QM60Tc1GW44MiT`STFLqBUA@dFRRX~0dQ}kqeNNuCPi0+rn#ARU)5Qwo)@T- zI*v%skWs91AFr*Ii4YPfKkS1y>tAaqUE4tS6AeR+L);>quWm?LE-tU0)DWB@z&h)T zN9lMzZ%y?!pSRbYjO}%5x{J5iOmDI0MlW4LZS~>;V~g$LEw+oTc4;m4IfVAG^Qa+N zULN0d1rFM{6OmHCsSkdjw!1#X@2yQZ&fZ@q<9!sMeiQ1Htls=0G?|;Ic}Is?KO4_W zKvcbm7;3a~)}dG_a!yn6;{0CJ3sg#*-&5|pT<__jI_q?oC;=}hQThHzC3_Z9qnL~D zT(VU>hQFppuxR}|bvFNmS`5UqM&Rd!!_=ajQ<hWst0Qe{5?Vwh%MQplHwG252~z5S zm<JKl`r(*LR$KgrmLP?<a(|`O_m(gg9g*IOx1kf%T6$vA**Dl<q&mo6%F6e24^I_& zYY8O>+0G9bjYK1Nx3}or7p<4ai*WSER{D>+kA2F&w^4Z$qBP@LI4NVyyCduw`;U)A z+d0_(puK(rItQG`HD2qO_SLIR45Ni6o@VK6B&;A4j;j-D=Z-`BIuMyoOe<HGU4^M$ zDpPu$<an<8UbH>b|DpTK=!5FQvfiO`wyV{Z-PNSNsN@e*gW?`nKO-i?jc*d@?f2jL z-O;C_jkvmDl|4|X8vs!M<`u6SQJ!Y0>=O-~q~=fLgD8?-0qM$jU<~3RV=WnS>1`fx zFl4oE-x~V4oc|n+pR*@TOvsg^Fdp9>5YuQ()QcD~_`OwZ&h_YZd10Ug`cNO{K!~|p zr=+u<H}SrTN~sY66YSZ?-Q&=!I;smCHE=L*_0@f7_iNaF*sQ{%)7=ko>Plx5yUVM0 zqllEOxA0$nF<rrXiyGEUT;<uTdaEd;-+(N!&~fu_0@NDyAZ}61O0nNVyG0*`K4n+$ zsYz$&<K%57=r^b$zN3a;vrb&&IizJQX=((93IPNT*o#s!R^K!RqZGy_UHF-IE_Ui! z+5l_VsB|jeB?f7cebrH?bzK-4{d=vf%EeSayfu`aOg%feq*{86vQy1k2-Dn2kMsPf zj+(`DZPfF4V$q4EvyQ>Mt%W4Hh5Ld#ubS<z)&1f5s$qCN%Xcx^)FG&YwJ5^nZ$Kf1 zbvTcO3(@iP)atCr4a$}KEuFRIWk>zjT?xl&=r-!FTCk!SxP~$}GRALfPSqXP_;%U! z%Z_t<ahYdd!wUCrzHP|nVqeAUHA~4k372GS#!!>3==&@Gcm(Z6$tuFnu2hzp_8Xtl zAd>Y)#IBu&iVCtqQ)`&-IU0cTvZtbF*-GQsbl(Lrkll%jTsKPZ`_`kf=ymnX7-}gx zRCWd|y2kP#e3--bhM8)n-EGoD49s~wYe+e<o4Za}TFj?ap08c(YYo7a`Vrm@ul+!y zSWl<4`ALkgs%yFnCG{j?XWeJ1cK6-J9xNjo&qXrazmC+JNAzZ<7V@Zzw~z_BlXyqy zn;RYB?wT=XveTZC`8&0ye1Lz1vtk6xs1LzE)i*9mG53w0=t-Dv@u`eAI^c{+9i?}7 zLv0DiQwkhaR9Olfd`RS<Q0JdegRX?le@oV}_t7E+9Chd=`FI#HIw1)9Ias52xGpvj zkUF6bjfd*t9q2P4VD5)zUp<(b&VIUx>8{qbjt0VhI!u#!bkS6WRRp}xTZ0xX0+@Q4 ze%nr!V5m(^##md)dX4^SMyVH(a@8NAzSvR52l+SSmxSX~0sZ<l`_$=usJr_GIrJ@{ z{`5Ff*~jO#SDT<5Tk(-1?;C%^?}3;OsKcX-UF~=Dvx8ArTf=U|^8jx8T(9b7+4Y`| zB8<jSq&4x3PG^tq<RMr&%!Ny8*~;H!?_6%ISS_hvyi4PXa1EZ#cC7~ZyyX#@V+JKo zC{qGoz!23NQ*i@&OmWwHw7cG!&VJ3)?i#Nq_a)zajQsoNVdS0lE>bkvF?5#G(<l(B zcvMHN8f`Qy+S4qBt<l6#h;I#^Jw_W9D1m>FWN!UC^b<a;fWI;*$!2QoiY54k-`(BV z*Du1O(oJJ-9bvEZtKK>)M;afCa&&(~W#~RA%8&8#n~J<?<ws*U;)?P+fWNi!+l`b} z`Q3_ZEy}Mw{p={y%I^t0BhW){3k|WoWyUg`q<M2pI(su$^QKcP!y<Y*sEx21mf<Xo z+pr8D(f}$$W!Vbc4&}(aH^3Pc-KY$ypfEk6LdqTonEXY<j*4_L4Q1o4<@0L{4_xdP zeEfq?u#}u+z%K53>MRDI_?fbVZnok!x^6-pU3#T)eEyd_V;EXkjDz0Sz;S5KuND!; zLz0i-R1L){fYyBJ<M=E6L*t+FT3=O9Z80V_UA?2n2QItIKRT|HdO_{9LG{tFQ4PN? zv*`h?CEJ5KJ?wygcw7exZWT=f3NAsHNKS?$oAsM#Q?h3O$*Aj&Q?vQdG==@rpNBfN zrdpRF+mUOiec|nh9VtBy2gmU__|5pmgT?iNrQBWmwNoPs2FLY<(GhIo%jhjj_>fk~ zT0jFBsXK`N8Wux#_C=B=qlfsw-S3XG<Nv*=IqE<pcU-LRa^!+8fg$xM;pfI_6N_kY zc#~B_)dd_rDHy$F9PXRPu8xbuf#p3n_rPDYRFulvy!M-j44R{FhH^wgePXqGKp9y` z%aHI|oLUWgmR}1TSNBl541oU@beP(Rj|WoOi>pb4H`WX2u7l$`sP1jO>ZkMR(BgOX zQJ*_mrP4bPc(9()?tiEvFZ7r$J(c|nc2Fh3B7l-ZchZ}c`LuL{w$?KvoekwXs%({y zFJ54yM<t%NQ{kZ0gu_^zeClx;sl=#-l>@LI=htS?m}DzimB<lpFn<+pfE9^owF$D+ zRhwhPYIU|nI;+HPB^6nvLfNC_Y{Er|kuJW>xY$O>YU7Nq(^KrJZ0+kZt1p2vG%+(S zPFeOFRULO+k42erJtMYE0I>Nc{73WfC$H)ro;#&swQ%FMxFzmPD?t`h=Twc5%BHR% z8JiwVx_9^y?&KZx1~*A5d*y9f^I)gu!F`ozzbi2>(i#bUu<+hUExh+w-}^hhZz+s% zn>0cy^S;E53)U0fIw@$#L+?&ax_<W_+TBg_9?>3%`rj#}{;L<z0>t_=5l6NS;nrr` zh_%^IhyJG?an}{W!TW|`|MriMi=(0IQdCo{eYSD2k2Y!TTCTgRk~52H_E1`A%INtv zhPyLH{tCxO>y8hgN~F|(M$>&-1Y5a^u0-h1YwcpLFStz53*+MuGH*S|7Z_1<x`LMA zV!c39qfnMS29*F!*eDL8lx$i*Ol6a{nsq$=UF;G}3|^!yC-Ld$?HXCPxc|>1?Ci@C zMvH+=r6m9u(213=KrP_w5AHZx7|cq=9no*P<2t3YIl<uWkDs?vD}kytedTZUR4aSn zH>}~IcK1VGl;wj^OVNTvy7ZQZ<Y*-jYmeJsfwgGhqRG$k_)V@AH1XU<)vSI-bP9Xo zEzvUAQ9`lmK57{np)OUnOJz&5xf3dzYY;ni0d=gl;q?1<z6pvi&e5s~Dr|=cb$ncm zp?x~dYanl*zCo7I7&xf`7OhQGu(dJPr=y#>0jSq8TdAbriN_J<<can86Vv9Vq@w6; z)(7~_SSy=St#q-MbQNk75e@@Xgf6)-kzBZJJ2JbKnhJ<F)5Y^hoHfTL6U*`*s0pUC zvAoq44MM}F<?5jQVs!B&g;`VgpvuX*rDODkad)pur_p%5N%>X_XtgOhL2EH@;1ZrL zF1AGjD`Um2oASogJ(9>2P;4kRU!bsKsex;-Y&c)LJe?)Is5fl-@`sSy%;h|vVEsqG z(|e+I(4O}=qqm~wL`<kSc&WZV2=NqOKZ!}jI*6Kw#Uea9!Nlvh=c*kv=B#+0Jid?3 zd4SeaC~QyRhwS4EngteM$tofDj}K8EM~9rMPpHSQqqRv?V4_`Xi~{sv2!pGb`aYYP z?<T5iGzG|7MygmLEkbo`ruzB#WLPxoUCi@`>B2MqsG*pFCwlFfd6>M`W9eW6b@KlY zYu5u`)%gEc-7>oD%CKrNEZ<>cY8Wl8tTn7$ty-v5Dpx|-68%wHt-1Y~BvA-S5~7s; zAVi}im89|&^7X9Zo1~Jo-~01<o^zh(+;i@2{d~P%SLf{cocHtj|NK4AsaY_H|DTKh zcdJ=Iv4?*+#b8FUbbn|n+Mdv?WjL89@q0{tz;QFfhm^f|oXx|5G?~T1tF6w8Ya*?I zr0~eNw!ZwNt&WFSTWwfd=;VVNIda=CiYT(FGwZ>?%kWvUwavg9k$9b@;_)6T9@1W^ zc!rmXkI+OJRGgBgRE#Aa%$7!|cf$rty#Y(T{^1{2=TjfqrGWa9Lp=vzxed!7Uljfj zvP)-Ki6y>myX%IN(7&Pc=j238$+egx+%^)^@<(W9B5MH#X*FH3Kt)TG=xbrF<<0z7 zzYqUTD?zT)8VdlU5Ef9A!wRS$t7GrboGH2=?LV-GRrT6d#ACG*<=t8y7=4%s658)0 zpM8qlt-T*>o>&R9CSvm~nd{|NGzf1NSvZ_y?8>2itUq%GXi(a)n>f4>hHL;nWLyV{ zzI}W}Ca<iT(*_Z<wvp2k?K<$Z1fK1+8XO@5SJhyB_J9T>9TWfIeHhaE#c%D8LVW1! z!Gws1EGC(En-?pdM?d7F9VsO#QVS(Xp|uDL)t8uXDRDt-u022MS-lQv)v~Pom-O4t z*O~#&Ze8$O=K!9cub(e;JU_|nd5lK@F=kJ^)ODS1#ih+Uhbr$S9&)C14v6mg+?xUq za)^Vjf<M?<e3^r9k@4t-7#yDJj|*4z3%5>(s!C57^Jh)z6}!(4`<8^J&ZVBwk>~9x z@ldA3`?Lnds;|R~Vhv~xyYxwD@77)w@hw-<)QnSHsc%djuM>@Kui-Xp%(*n02(28} z1uI-wP1yPwHNJrgT3k;k>yJ_%6o!u684Lu)_6g*p++_aCE}AtP91e*W@9V;o>_Q(l zx=`T@y6~5Cu()PV0gN~k37v=k*i^(r{|DaWKnU%H9f&79zAS52#{js_;aQ$Q#kgGR zq=CUzz#^LPdX#oT!e<vkQ;ffd7QqM@jm*3j6Z(tkiDmQg7ZCn|P6G)!uB48H8A0TG ziM&pz$8|ROPD%cWMNad-RBI<9&$^GvQwweK9XKr!=ucYYvlaQ-L>^D%7#eBxLF-ti zkVU>ik?&0bd3PdL!WZHixNR)LsY>|OAROomtpuc$pS8n7rTK(GS)pbzP2I~K>Eg9Y zHXqN5JgO;HYKpKy5h9A-4}y;qLfe^bs(9HBeD)sPym?6J@SQlRlq)shD9{B(8v`p@ z7cN3!&0=~=G&3mZ(27viP_C^vTa0U4kM9hjwrf;v`RSzpbwn$rlT~e+tOa{h7jjiY z(#6|G@f0eKe+cz72qkK%_DHF=9h6e#hp3(bM7x(XP$!ggJ=vLgnvSQz(;JF*T$S>o zD|F54Sp%(&dYe$;D5|$kD4l(Vu~y1@Z?mvQK`&JGZk+KD+D_#4LIF))CCRfaHdBfA zeWI1>Ac=$G<4IZ_FHqqu2{cN}kT;BF*nL1*k$UKabw80Oq7e0V(Po$`$yX@ye5{!z zlyxB5Akq3l$(nYLq^-1Qv5O(0tf}Tv>gF7S$D_@NM*^xJ+M;>PeS&S@!Qyd&(#;n{ zZp!=BL@n=IRG2oLv9dK&c@pcdKa_pbh^cXrKobn0JE-swF;y?*(-sIyptlszxKyRM ztB8CN)mtx=uIueC$;Vja+m#FriF~*upQ%OeA<4T~<TSV<PPZq6+!Xl-nNK;C-={*~ z2(EgzuDYMZinm10B%sG5fu1sehEU;lVybRvkdBSP66pQ?%2z_l-#ZX_A=O(qv_sdM zhrb{^DlPI=iabeIT?Mg%;w+=;zna<tjz=NV7M>DE!rHLk5XDNW%@-P^HMT%9cdk|2 zAywNvA|EWtb2WLg%qPG9u4JM4Fw)B~A`gsYSu(Y?<M9{BvPzNXrx5K8n%4r3x2^`8 zEvRr10o4hmX`nJ$?=Y+0oyrgD5qTz&*9%o@9WIdMg%<e^MZO7#Jt#lO<EppvWTKz_ zV2LiwL}AThdP=-wP&`2tvm|p<wNh5d+Wx&yDP@(aZ2*y%N%G;Ee3c}B!y+HAba(}k zuae|JE&2-l1v(sMk<U`-@kG9Z$f=!^sg-U)+r^??prE(oh=<S?CoSEAHcipy_a@sc zB*M%x2PoZwu;w=v`z1v9C=m(^5nYTPlIj~pHICkUA;LZ&gv-sfT3NyMaVwio7&0nl zD@)Ia4wz;{Cy7mxswreE%M{HGin>IRLk!mqm9Ya5$+Gd1o9iu}dk`y|lR(=~(iUpk z6_WOBi}Nz2w3mszlE~|YlG%I=y+@Mo-K*4*OVGoJwn{>G*R)A^MHQ-BrD(^cD5Vq< z`F=@0Uy~O~@+U0vWW`A{B2PgfIGM?bg*hpa<O3}7Ey^=~#gP%AE<|28G(n?JkmOfb z<UDo+@9z`&a3Zf05?U>*Bze3=zFsj?N#s){dI7sBGjm9ifAe1z1SyKV50O_%@{lIa z9mkrPXOXW}<SmHYheC+DUW+<hk`J@U%ao|~h`fNv>xTTAe5NEXw8&Q~a@wR88c*bP zLUXldR!Z__iabAuOgfin=S$iyn(-Zy_P1Y^oSDj`4-&a_X4yhNJWl&@4=SvZSRq|+ zaycvEB?~KEVPz1xAo6;lBL&oPVik9n<U<sB{vcwr4$-Ee1hhF?1G6OUbrx+uqWy}F zi|8$BGc_CgCGA-j8;g{-=2)jo;8We;EGXvl?4b<J3M!mSSiaB>&10GD#BcaTsfTvS zP}Mg_V)Zt#T2o<QJey^U_CO#0g6J7%VbT68!a9Y>vn2ThO`ayni!JiKiu}7okoO?+ zx}l(!Iw;984Z?$&{J{jhkZ7e96S;v{TBfZyjS4FX2z?Z->M{xR-5v#$ML=|DMQDqp z4d_bOO4@~rcHADtV=E$0tY97!wMc&a1sW)`$hRnRKauB2^4=OfN0N87$VVyiZ*llT zs6>(v*XV;J`S})ksv>`#$Y)9NsanqIlKkLqW!fW({9z(rOXT%Jhcx;sNnT}<)1DyG zOpwT>inCe8-NtAYx73AexecbLM3zBus-~#a6paju|I*nK@sENZH2^#$Il0>6g!YCK zC!c`O9{mPc3*0WfP5?tIZ%{2OkuRfLSmN+5C49P)<`KpShDS|@qw`MVigC22PWS@| zXOt6%Zh`Zbg|kD^Ugd$aU6q|hIOCl-bPJq;3MYR!Rrm+ab-+$!lbQUXRInWdp)5ls z>A1$@*a9y{^23!%7BYgG5NOQ`W0lMxfI<skF_AB$TVVWLt^7WTYP!#Zg+wa2i4Y2$ z2y_dCmlVRdxk}&+H^{izs_az4>22Yl;}Mh~y)BR)@CvF>1Ptrm$AYpb>+$!{CJSIO zkuRfLFoKVK%Ulp3fR`D-sZE-@DVszH>zxR63k1AXDitaeyM5gt<94dDe8Sn`#GzZ@ zV7HkvjG}GgfiqN<9mO#ap)F1vx&_X47EYd`-2mDM7a5nU$`%vO9w!dn0;jHpQ>pU# zqaHXkRZsf4n{b2^hi-wh>}Ms{U{z;351c`&?0mvG<iw#{;M`~7&}%kS=V2TG5h>Rq zRrYU`h4wme=oUB^S~y9H_AL*bL{&D8aC~8vSfuCBEpYH@25GOAigus}&I(o5iExfM z`Jr3jJgso@gCtaQH%NXV75E7u(a8zj0-?Kw(47c>#IX<&YRT_H1)rfH<aZ*_EfCJI z5DJL!c@Km<Di}`)c}@hn1;VDEls0Hdk7#?iLB`EhWx0ftY~diFyGxMC7D$x}=rb8a z<)-JENe<{5KLCOjz+xg_Mz>%D$IwW#98r~R1Z{*q#vM{+O9&_A#GzZ@)U$AADHDc0 zaAvBqdkCku6NhervwWxGCsF0wYdmlQs_b8cv&e}<x4^mI!bw)Ne_@kjq+GP0g_Qpt zZGaqX;XuJFCCJ4VNTniN%pgj^c%vDrV+B7;04pp2{?gMjx&<S<epCWc^GB84=fTKS zRo0Dg);e+M7C0|hIF(9?7kc1KP-UkOPL&gfZh>>Ng_EObf50IRk&4MyWpr#sXp0kv zZh_Ot!pTy!PkZ2Gs<M%Uv&o4=x4`-A2c@4)N(Y@iaMr7`%L!+P6Nher^N5ABR?(j1 zfm5Z*ex<`4wmWg?7C2W~IDW<ZhoFtrPrNFdLpZ{TL$|=$_q~$Kr)VGYz=>03y$ENg z6NherGta`=qj+!Ofg@De8HAHL!OFknw#(=iIDIXg>8j3M@ou@Ms<L$`3+*L-e4#zm zdqzx*k~mE)oS7;nUSJ#*6X~oyj)_MJBirHy096v;n;l9qYZX8r0`P^pV+6^o41#N5 z40_$uG5<l&hz>(_cQ{p3$oUVZXl_u{C5lSoqh4qacfN^anP1K^U2kzSQ>kzxj(Jd3 zE<m0Pif<m!wJp|#g($>#GVzpHVo*#ailm9C?S#+*sttl?FXnZa9p5Rz`zgUgptXC~ z`<M}yI;d;e!nM!?;zpyEi#0{ErntnQ@Ds%rDRplep@0uM#0#F#-QuIW;$sJndVm3{ zU}!eL?V6R3QKYmH1hqWqPkb^&tK>yZv4~kAR59D27_BMfBo<RVVo=<wDWnmZqPIcO znkc4|TI+^<N}NjELY#_!E4BJjJtf#vK?`xREq|KM^0H<R;B8kWP8Sx3o)HI2wK$tJ zg=Cf~zA`A@(iD<erdViDR1!s%WOk*Bo|Tf>?cXY93zhEsffmdjf=sOY-7F0=d#$c0 z#LUt&;yR-uI<~?Q9!!yDP}J8Hl3Au`U{L(%14i5=)@+($cE4oy5{udGO0!EqYddUP z&FOQ5AqTAe*azqVF{?zYbp%mtnan}Bm*zq!p~#8#Pq!<T<fvM1G;7($Jg`2l)U^oK z2R$IJGHN-KD6&Zwut`<W*&}d~0ag`*RTaPDUueD1(t4?`Wh070$(6vU6DlB2<5QKE z1@IRjC0j`SRHmFw<av@jTa#x=@?W+o*?K7QQX(&r<kLyp61|@!f6pTCuE_I=d@hmK z3oX**(<S+2i#({v&m?kbhvB#kie~p~6C8%lLWc;;7b?@73W;@%g;l7q))0A*$5;=W zIBk;hmId(_=poS}@2$wGHBeO-a@8-~r>lOL3P%xE-B2=56f)LOiB+{#DXBnVQKnH? zgBYuufz?tMQbl+r1W$=9gW^=8SR^^$t~sACYrEO1t&6Jd2mBk_PUOmI)=R=mEy8zD z4ds=kAhf+->WlsIc>+kD!qTnf`sj&e0sIA;+Vzc+&Ih)*|3~COB3Je0O2Q8;!j-DN zYpFh8sKj#8^~?}gc`;!WJPwR{p?I#69$HrQ1-ttL7Ls38S%X$eDRdP66cqLE)yDZj z7cM|y&0=~={5V)stR#vgs;zD)p1qK3+aYT^(W-4em?8lma{>m%lQve#(9nE|b425; zmpC76QHqL3{n*viQE^O61x1m@$bwcEb*ZU2xTWdJgIfx4AVaLp9*^=8xevQz=;Q|4 z4^%wRPj5Hw3;!vaoul>ym10{|&yOmG`fjZl9KV{nWpRAaL$`tc&f(w0A1M}H-CiG6 z4EC*#15<Im7!Uh%@Cxvs;eFV*of+Bz@yuOJa*qyeUXt&dHawX(*I4gKjXh9$LTJ#` zU|{!W12bz%(?u9H@pf@+jowOoncCuQ7k@?D0A8x7Xqy;rpIFg0DcnA(qHS`xeR4(H zlyLi$ingiY_Nf(Z)57i3DjtLg_u{ei@CU2wupH(#9mwzGHwSgc;`bK6o8OfNzuV6K zU-HXZ_24)BTXFa>bd_nc8k!D1BK7-fLkGX4)HHFq!Q@Xdl?ru2sZb}B3U#JdJQxpk z`jk2mV{zu&;Jm*KFUwLbiQ&WHZ^YWOpbqSFjt8^#u^*C;;i$+5puZv?fPspUDHZwY z;ZJU@=;d480PR&A5!t(_U>^tG@Z-ZnYwyA%dx!VILtXkydcv*0J5O@yFIgODrj2as z588rLLO3`jgiCTdAG%=?+LGs;>^yWMy)^%4cq=02($L;xc;GiD+8oJuVM<B4h#GLe z`x8=qvgm3sxS8X{V2vU|vUjh)SH(?MY@mZ2dHRgOU-%pHxNYDs7xkEK7wK_VM(_ur zP6(|a=03%X`ONB6x?3(;otLb2xyHpRyv<<M@;i)R6sxZIO`H~+yBYDe_9(8Hot?xE z=bIGK)L_S*Z=gk(76wMXfq|2q2F74B(!ehM`W=J6zfN%Tmy2g4f2m?vQ>`vHe=;9} zOYjFS5xU?q#mOb60W_B`{uUgAzgs-`8*lKpt;s*-4^uTR{=D<uA=De`eajm-^e25R z-(V_syqeh!lWCd}m64Rby!qMU!Oulr{48#)l~j9vFq!GakIIk9oNs#&vOC{$o0-o! zfO2ml=ia1>k?}_E#RRc4SCYt(*MWZ|>Hm$7sd-O)&c~kZS?-f=`)>2O?3*M85Lfh0 z89E74pAZ$D1c-`!j1Wk4wp&;kQJU29C9(dJz2###(j4~bGMqzmSYNUv(|9Se{W~*; zzPJxVR)IZ$oy6G5POD%c&%$=vL*ftmr}$VKjlhp?k7N&fTwl+_9-GfNK6_wo+GP*f zf0#f>ZhwZhJo^t=<~OBr`)`gnUTxw7yC$62PJ2jxx1WAo{9-SP6I1(-lK=Sdl05LD z+jD}4J%`nC*)vfzATAv7#Rj0r3RFCpV)O{Hx5|;Dv^)WhhZTvQ`T>x?Vq~h7jZ#)O zz*aS<W=PwnJtf|t+Tvl?Uv2P`Ym0}il~M4b>pSG3?}l+seW%uxCW&dMMd}+3JMtL@ zI>=`j=;(Zw;vCjM-&DUIe{DgXv3hIanuA!hvCpaC{?GzEgZ>7y($HW<_BY(Ds1X*k z5;0<t{GflU`;TeUV{`Q9QJW*~-*W%ahlh0kaWLI2CkB(nz(!hEvi}GMp(W@_YKiof zRKZ<c^dFf?8n-YuwQo*+6&{1TTQqle|M4ASN9k+ZshXYI=!-`@dW7fVXX-KdS@XB8 zEt?<TQ<|UakCPuBF-7v@u-}ejaCD{SNZT(+EZP14G`dsvn-|autF8TLBxT!=`X}V7 zvj0P9?)HLxHlM>MpTmdR?-Xm)Nh2RM>V*Ckp3J{~Z#*EO{Q(ljuV}n&BpR4Rj$fna zgXvI1WdHTAzZ~|IK{zf!>qz!*+(D>%uI%4>Afo)qyT4lEQU5Tn`WqZ){d$Pu@@IiM zW96g24m;%Me6*6>h2tw(3_C@u!W{n?K`#T|n)hLa*kg*A`pA0PZI3&h{78EoI9W4M z8++)HM9lgF9`*13)1eQlKT!;E)z1z|f}=f7l<hGK9yw+}{SN<5CnR^gMDuUg7$K%S z<2~eQ>Lt${f22O6$-{#Pot~`x?d{*aJ?fuv$feI@alWg5ImzgDDl^LTC_?s4RR1J; zyzlVfr=b@=(;7zVqc;5TFvQT!G5J~G!OyUR9{OqU|Kf*-F5dj;{z>MH*!f`h0S7;v z4}5q==7SV*=Sf;sW<H2AKkUc~Joa%i7#Saag0Fpi@Ic06{*t0r_J2=2E<CUCOmzP$ zgI*%rlUM(6=uhUa%ZUp|e?E45!b2Zcl#F*rf1t-PEO>$DK=%hWkqPboz<jz>{eh?B zHE*@;5702m?hime4*pVS#`ds^{kDcQe@7hrl>oxx@9+u7&mRrTO#Y1idEqg*+x@%E z9T|ZAe+99l`kQwe?9`^e88JXp`CG^1%wzC#iw8fxXEZ<C8ff*@h94g1=@_)y6VLhi z9pEj}zt`+@=tuf@H-m|2?Xx*(;lZKd-%-{Fx<k&$`mgt@e{+4Ugxb{4gGsA?)jrGl zya|Nl&OdU#f}1Dm)uIc^gB(Y%7VkSc`=Y8nAp8`JoH!q)$HJHMQ>X>_s71~fCR@E` zUQ07`oq?Zh;ji_1@*mIrXGnqhG}Hoo)B=1TRfM&mv#d_E<qw|ogTp=Sv3#%7ABYo? zPh2?i9Wy{ni5Mv|1GJPV*K01NvEv77S<9;5(;xSE)ZZ$i{v;aDe^T$5^<ODFZHacx zq)lu6rJHyErplxK<^Ofc&-LdYyMAgIA^CCDKkHd{JhY0apZlwy;4mSl{-gEpA{S^a z{d?Mfut)vNe|5^w_2<{R{)p)dYyR7AzmL@M^k){wV?4+Uq-Kmj9!Gr7_r|MDe7n|4 zkLfS_J@gg+#ig$laRzbah!<uk+M>I)Cd?xa=LCY5SM`75j!S>MWa_OyIo==SjfY^y z_#9S2emSo3ezG@SH2WUkct7tscf2&*<J3Q8W-+Y>XQkCf|CZ*HowI<PI{1Gv<0sjJ zpJBUQ{3MA6E`E?RF&_yvn=@^+FMv7GQ53WO@gDX6wacUaaYrNd5xai9F9G#aXK){; zA6wQ`lpaC<NuKUwoz28w8kyMDCy$g0`^JaIQ(%QhS3!tY>+e6ie%#8MnpW%YJ0mm* z?A|CIT1W@})2^ejHON-s1_fgd)k`Q}g@<ZV#|~<n5eSbdL4mPFn$9f32Rv|$20hRX z$DxKsfleeW!P!V?+<knE5X!pMEF6kzi$!Un-fhI+TyUMB^wFI};iL19)`SA(s5KZb z-dk({(mpT%u7EO%MXCXK265p6yiWnzhenOr3z58}pv~Tf6xX6s;)D<I+K6YA6gV(; z%<L!-ACtC*_=-d_`hQT)?hnFaRz#tF3V)Z?t-KjZ+xoUGV@U{A^=5_TU2iE2XF0oM zn>Nr=7S6&f5-+0@tU6UC%>gkADyrUsvxeMH_E1l{4v)G<7TAYJC7c~s(k3HtRc=OL z1b(mJr}Hsfuo#E_;@m?Vyu^n~{lDGsuLZXI^~bORN5YMWhX*!ID6hdN4IUVTlEUTh zL@3ib1MpIMrlbEo+7ubSmX6qL|C=Q>9rx6&W(n;gEE2z8Ybg|OJz{)i5$Tg;+uos+ z>JNWG&e!Ks(ki*~LeK-K2P{)0<{3aEJb?~{G!O?yIOrF@FSN~^P}WxhQfw57n+(8o zPr#Q=Kyn&v+!rsHfTv2p`3x9u0B(a4-J*800c!>)7K_`dR@o_sa_|I%B_Aph?-ppS zReC}-w4tO8a+8or+V8dMR5qZU<3-{g1FfAW+Pk+KsvA6>Buy6Yyk)5FUy{9540x6S z_#5UHRILdUKf=TXAM=+m_8nYy6a6G`^*r2#JEWUwz;dPk5I}q7O1VBSF{CTa?Vy!1 zOxG$;V&g-J4-C*^kSm>W2`QLdDFk}km2NeFT6hAzW&qi)H1|zIA7@HH=}M;<fZvm( zuFTQH1hibK*aZB9^i{J&y3)J(TGUEUz=k#;yHYZVVY$*U2_;?WJ_D+~C)CRRme!8# zN~s3gLCkx(CB4r^3x5%^T<NX_hU&KCIY=s9X=8gW=^PE1FmWiR{gf-+h0AWDu>`KZ z6?fqdAum^&K>)RJrJhEunYvcPm0s;<DFtFkgT;$EZx~{nF2yL}*!LTN-w}f@54hO` z9Q+`Km|t`?0auZjHA?~<V$1WiUM6`0o@fG6KY+56&jh?*0!kkpXaKhM1bpW<m&l1? z;p>LT=So27qm2!~J(x3gi+sBYC|w~*^fdv$#B;VQR9&M*rnkNoV8X<^Fhj0ffnI9v zCQgyS)m?BGF0VpA!pj>b5(ZB79E=ZN9HDC~K5mh<u4hGeHfn8d)_M?Y1gh3Oxa=mT z_htQ5{~LGV@=;M*#xrHDw%7Q?;MWWlen$e-ESbx7Z*He0euZR_UXw6!n67&;*PX2D z?n`xdNc9r;SpvZMk(Rsq#KHMS#RJTWdm0sI>WWSO?_)Uwx;n*T1rb^LYbv3n{u&uj zKM{8>&+lzR;nd=>D>=zTYpPbY)f#zHqa{qd14~BA8ohAYO`IfAtAn@;m(#v+FQrrv zhVp?!bZyB{j2qZNwk(~DTF=q78tRzY+fs*})#AmIuNwMoAOU4o`#V>Qv7Q)oDdl<_ z5C>BiiykI#%SphRB~rg{8Bk+2RKmn!tjQ^j6yma*ICLxXSba6_!X2``)bS7jD0NiR zwWW>%S><eY%Qi-pjdYcUIws1h*xjh1?RYL>QA1lptkf*&0-);s)D`ZK?8V4$#G_)Q zx5>!+@_EU~;x<~174(EljXs+ZcGJ^Ms1gZ9Z@m<WI}IpSkPB*QFU!Pi5qeGCR?h_z zN?IhvfchOvvTm;KHlPAx)=nHZ3q|`#Ki}a2=x03X2fOEM!sQF1B$9OmtyI+7WM-y> zkScooYOSIHp3HpTQ_F=&-bX~1*>99kacuSi1FESf)HE9kQ6QTfzj$n}5e0D)P&PRS zTWj7v!_v81QSIG;0g-D0zJceUuMl%M#{hiL6L5bIOW1I3V)f*|$N|&59B?o_uCz<9 zsoN^KT2?5vdzn!oea*)$!5F(jcEG77)bH580N$l`cjahhyo&-iRJILeXt(9dhIU_& zfKt0p8GwU40e`;5R)%G+fcRmK0eGVXl-eyY0Gn#Sgo&@iPgSOQ5trS>BmhHsG+Kw2 zFE|Xu^3*69_yj^yiXKAOmhXLq-6hb@e75Y`R$4pHp}?)3CT?Nk#p$LnWfD+oXP5!l z$rJF?n_b%Ri&ZZf+G!~PNjuej{v;u{M~T&QsRkwFV{~l^xfe5gwvazxrG;FE0=JNt zxp|5gnI=!qNkA#&Gz0JsPr#iwc?kL4Y(vOS5|D))j>B5R<!MnY*_vwL4n}Y!^)`KC znh8{20v+LWd*n(j>KE7-<reiiH)rvpy$QGo&p~%2YV}l{n;Pzr=@rRy2;RX~&5MS7 zcS{t>R)2%7Y)`fpc6TW(Uc7DsHZ$1z8z-EG%R^B*p!BY|<rTx|+VYC6n2&~JGuidO z%+{)!jRLo-&Ng|fe3*0}FPfM<RY<@xQq>aXX;l=ShEfg6Q-7vwi>G`ELDQ8*qP4+O zfT&!pWw_YV6X(5|Ce&Y;yN7t=iJJ?Un?q5!*#$~zJK37}#5FG%wxd_Vl?N1wSFX@{ z8cxr-cskh4;t2^f?p~><ea{<!eI(!>7P7kmc#$XI923xL@18dS0}@as&=U;6t(g6F zbJ*1l7!W}d@O?Z7k++cUe!<bG;qv`aboV;dz<zJ(?gSHPhy;>};;zfJ?s7djTi(?} zcZ+8kx@#^0rS6gq!2iOH-J%XO0WID2Hvu={IfyECx8^d<;j^BAjopCweu4=&Mgp?# z-oyc{;SMQY34`7hw?beiU0We=jeK6VNLLvQolI0NcN^cuQW=N9Qzq0Q*blN5;BVFE z6D#FAqcj~qgHoDt$1s^ybDuM`{)Pk!6419ez%*RGBMQ*75=hPAc+R8c0i{Uv&eE!; zx4zwyy<TKVhCq^R#fw*-HP}khY~g#Y1|Yrl?FQ^=1EOy&CVyjeh-obYn#v>rkKiEG zFfW04*^NK^#}1!)FrC|<GfbAoN+8zMLIxU-zwCZHTs{jLtKNzuHqqIpKgEYT^v1`r zJCu0UQVa_Ajui3p7K6`oC43gEuvtr1A?7N_{|0ckz=Jwl8mt+dDxNigzQF?!cq%kl zBsR6Mf#!Mwoo4{0iLNG4r39kmG>Syn0vdXoo11^%sJTfO0S!`e12|d90N2?7=ehx& zQ2-xV>kY187$zyaKPA^o7TSv(11b+-zA7&-BQQBXBk*)VMj&u)MqmPd&t8`iSa5wt z;L5^`z)c-90?RsO1X6+-f%-RQ1a{$9);S~4v?wF+27ax(WCR}Unh|)rTSg$aI3rMj z-@xt}fra=j$L|yT*5S7iKe>MRKU_aq{-nKr(u-!()cQ$sLir)gj$r*{{9TCV4n4eF zEQ20^Bj@_Yh&m<l;U%-lE9-?HNVGIh)Aux5+$CqKXf$0U=4P_5@bScp^h}j8EI)9A zWoN{#HEH?V(?;ArB>^e*R;Pl|aCsT(_F{58)u1{G@1fUkXUT37LJp7;4W3dwdFpHP z#98uw6RM$vqG5IQG@1eFkn6?D-^8e5rKS1&8Wg~R(^)+gmuU4oK~K1R^y^MqJ=BGI zk{IS$i$^4o)N`%@ROksb$p+%7g6IA=)N_S|DkGUbr0IzA6vUU8SmzTqyFmf`<p}x9 zl0%5;-DiZC(1~ulPYEvx;Mv^`!b>RMS^`<l@wuFFl1zs$*3ugjXNGfp)6tTi4YBKp z!So{%syi`#GBceV#Vzh7Gf@(z{{LcLbs$G=D*@zET}_7Or6JL~EYZ=)OD~g`1E?QH z9SVu7N7KAV`4%X}OMyQTr^+vynh*;mglx#~HMki;Pq?^wpBJ^U29CL6%#f_7Sp%z2 z5YpTfiSrGp7M@Tg1{9|C#+p#gBovRd=F<F1`S>V;(IJbhWEI3dk^ZFQ$w$iGBxj@I z+3lyKYh^!6>T-#<gV(f4JR>V?n`Quxk${{PPGQd0M=}3>RD%KJ6H`o}t0d40vfalt z6;hrO1&C(USmBtQzm+BsEQKGGGf3|MqDZ`bkrwU)V$3C6JyW=pd#DE$FOEK82scLp z?j)WrWuDeX;pqvgLHW}f8t+>?-DdK1j=@ugCr|g_>{H%TK?=8c8ffy=$l&Q2niMH7 zi{c7(44$qqdHMpPAWVGh1QRdRdU}dvbm?guFHYM&zK2HomUv|niqdeAXlFom@`S3i zp=|N|B0SYlc}oe%Du0irL&{f15${~8L8%-c`qn({g;pS*bc5F~(Bds4b-Bbl!Yk6s z$1Rl~eB9vaISI%-T}V82$nnZ4j}g3LXf;hbSW3E8KF@6x9q|_~&xA+qULGz_r+*iQ zI}Gx|Yir;=VB#f6JlS@Ao~8x-hM02+*i;Lc8;?_b>W1Tj`0ijpd^ptTq%Om=EjL`* z1)ocN5K@G5<HLEC@zlKd??z}$o(ePU&JRzXfC$)qb$BwJN4fj*@MJnqa`(mI$?K{7 z{P5%|`uD8xWZI&G=4dh<+=J$5vY@{=01oc0PXMAhs)NsDSNJR2wL-<i%VD<O>`Dj! zrKPIpDOG!3ICrEbzsQ|pm`y;{0Gv+Idq2&gbm-@$=B;EAWwroKIap?!E1%zi=ZnMu zgQ5HA3747|@%pxdp?LAeV+KRT5>U2uryGFhcmm#L0$R(yy-dIc5-<RjRX;}4DCLWw zWiKKBFy@mk!pC83AwNO^lq3Uq^!Zxr6X^+;kYDg(waNve&RWBP9+XJ4SzT8cNY{8G zjWv+a+)bki3rq8KmLiziPL^9r(<|lsqsT=wYL@YeOo-ibPD;x4N^>pO+n#e$2YE%B z<WhrR1d4m1aXS0vEe6`{o@lSwXf$Ts_L-rjBFUH3(y0bgGf$*j4J3R<dN9ogSXzpg zP^_iLX=bK8fY|b~{z1~Aqv<_!vf-ES%b6%{!>?nYy%e->hdT`RLVHD`#hNXUYHyLM z)qXWS<Z`D`yn=o#wI`B)zlr~aJ7jq=lq4DA)%s2}(P3%mKM=-t?%C&QZs_1IH#hru zJ^EPO3}y%KW}x-;M4N4+VY^273z0=!@{r*M$<|zQ@2&V>xO`6(!(C0tDmRtT#Dpc8 zUqVPde|D~xY%{6JrROA@7w)EBU_yO>C!nMWq~z2Z)KR`A3O5S~TXFLrd|}1rW~79W z+~gSC&?J_dn@4%gob-$ySM~QaEGr)srOq5#XDnyi%Le)Q9Ib>eNvTQ+Px10o>6C8b zG*pW^se6TL2XeKkQL6oz5F8QnQ&<Y@qi*y>6hmj!SuGOR8#Nc}niD2Ag*MgVR{)pY z#A8?;*Bl5M`;{L72h|U<-Zw>ICR;MY{(U#iMOj|ZK(dhy9TkaHDOv&42e%ZUw@WtS z#d*>@d%<}o)N(uliPkdIg9a4Mjk%##^Fp?SLiXN*udvu$4VF-q40W*qb(JU7a04n) zy#BF~EFBYPJI`kMqEDQ)G=P#se-p?taW+E(%|)}~7H$`>W=r9cMY0K0i3gyjRc!dq z7LeD(*-HjUiuih!EtWBHcB&2FF>%&U0YslTYbPnZC(fG7LVMz@^730U0$cDK&;xsf zdu9awi{G$b8G$ahW(0o4?~2|Tfi?Ku+9xA$b>ED@2K*Y`mJw)z-?{iz^vej`**_z2 z&47%+9k*u$-okGge%FUkeh22>@Jk(-5txBrvpX{aY4{C59e3k51iz8^eGHt>@%swD zZ}IyHzhChC1HZrVtB*QP#!tUJuy*a3U3E$t(f{g)+YUufa`bk%5qgrN)5x9T)whr7 z<GAw7zKQK>&}rRCoz}Mg-Ce_@cM^Ta@aUoRZ~O4*T>7_lc=QC=a`$E7(SztdBRqN$ z{o6b|I+6Zu79PEV{yjb1ws1F)y5Q^MZS$yF_8CXD11cXvZ4cvDj^AYbp2Y7t{9eZI z4g8ki_db5B@cR_Mb@*8_Vtx^?2bB7Y@nXP9*3N7kQh4021>82qo>v?O*26vHaRT_5 znQ&G6b0GF>05^l6=JFzOHolf(2W~q4h`s1EJ%|1O$vT}J_6(Dcc%58^3HH%%!q-Y{ zsP8#W7SjHOVsW7X^@b<ZP#X%b5?Hg3_m7i+KFYW<@D}ceG{xeZrWS7{ecj=Ekqt(@ zubv<1$m;~@4l%-$8X?7vP|b_u^6S;GgsVCIRF%87<S&o~9CX$Zl4Rd-Pk%SO{Xw4{ z|0fn6J=(VLoe(2j4>ra;aKcy`Y{Asft=T`a-uY-lwA^kNiHq^I7~4uGqW~(QcD-1X zHL;YMQ1&(9xy0VUOW<Vi7@g#Wg^YH&fmY#(R%WBAmr-a}>%(P+&F{u@U~ec}?5D<> zJsNwu*=uP7)(j4a{_op%Pbj0QBp_umYcnJgH6;J_^u}Ghge@IAQ6!r{UrWEH6_{et zSp&`S1bW^8N)j92GdP+gfv6!V7AIOj`s>`f)$U<{B#TKJq@*K6q7|58QI*8X!RNg_ zyt%0Ypx0`=y!kI)d-jd3DQO&bdGx<!q2bZi`%HM13GZzG^S7DikF=edHbjTZ`{Dnl z8(X{myHV*Gm^fN61TW!qeZ=sTb5Vq5c_{2#B$l74J%t7`ZcjN;3Ki~pM4^Q{`-IN~ z{E{6;y+1P00DR69@Eu;$hQ}P?o)sNSZ3o#n3AKfJJKKQj;t3_!+X>3z4Pg-)Z3ugr z1WaSVb!TW{>v;mo^>zhly+3fK3AmGeaY+&bjxYe<^7LxC-Y$j3t0-%U$m)^On^G`D zGDEenp-S#_8=;I>$sK$piHAqof|djUv<QYR64j?$LY8=Rlv*jE=pCiTilSa?u$L<r zHtLn0SR~?Pf!#?`?@P&i{ZF&?#$mQ&-%PICp4#J4-Erw|kFO+xdYo2W6AyT>Tg`$l zpePpKC0d$DDBI|1?hIa0_to6*!-?9W&5u%_IP^B5jQaQzEXZI}3^4Liw~co2Vzn=P zO?)iY7Qx!ZBF{kcPS8^%TFw1_v3jYI3(vFpk_r0oX)I*)1bwXq6c8g#psnPJtSy<K z-_$_f2|CUKN)(rwK#$o#GC_wdAg=_yoR`0$@g%YL9b2rDpyWg*=zrM&9trv(2@sB! zpl?>?uH@WS78uDH4s7=~{;B_-_Mq**esWLgzkV3o?Z3OpgthSBvm0su^&VN?btzF; z{`>F_!+-Cx{e)&3ip7RgHJG=@rC4C`qU#ddGzn#q9yeYhMfbR`d9fN?`GwyEiuAZP z8pzw@CRsoM@zG*~qezcC5KuAT<#E?qAc<n6261}a+ctoQ$Hhy4s2(SH9oy&b4tyaC zOpp7Y`P+*_Y=5JUsq(i%T)O>@Cd^{{o9u?Zk)U0~JH`FYtKUd*zE~+P#0j&Hf#&US zZ%DM7`{TvVMTU7J9qvqt6y4zlSU`R;!vu<SxOJx}KS>zx?QqR3pn&LX0!2F9SPRI@ z;kNMVHQYZ@oUB2d4wq*GcsSgX5+JI>J)p{6DXy0+FdUBj?SC>}Zdqdc+YZY2a=g6V zGrzqL0va#>cbk!qNQLNv&tl(bf3oFiCAYa7(kFST9i1I|rwsdXG)xH%O8ap>tE(YA zRM<s9L~A9oRJluqO=W?l!vC56e!tJw-=!3eQhzjI>yFm|2uObkL}+yue~|hc#KPD2 zTlz~VTR`S;4L^%`_1xBBKYV+|hI&#$2{y&Dh89%G9c~!E4P%cx<HZR>B$#jP0XB#n zbKa|gJPh&?FLy_uC3sPlyA1NEEKml4J@~vZJxA~l-_O70UfV7MXw89U3GjaY2?^zK zST(@h*xqrN8ynLPrZ9(D)@(rwdZw$t=05mo+&6}f<4^!!rM9;^jQ@ql^oRoSUs|^4 zs%8n=dF>~aDD4@gdlZycBnrl6)kk30@R(o}!cmG)O&wt@mtA6;Goh>i#o(LvycCOP zPqcg^p{x--=W??>yr52Q2LDJIEw_dIe7^yB5J&(lVZe?CAT6c10cY5NYTCr_>f!@! zIG(M}VmS+=$T^+hRR$UGwPBe7C;-F+_Wl*|TEa|EhEB2>G9;{TN_e^iloH-)0Dead zx>UB5*Rqw$<PKZESahGEGU`Ty!xZ2aizWu(Bu~JQ2`Ft45Vx6t_e;Q309GHRbTOuP z6s`588emL1AAk+uTG!<%t7<y0B0Q!b3QDp>;p}~#xnXP<9)M&riRGT4bx+gDZdFa< zg>hC@E*7C^-DeC<1b9W_Ttc8lGN1IrHKO;uhEC-=i*mzH8t9t6*I5$nn(^Ad$e(ZY zPUJd^njRZ2k*I6(n`a(g!>iUZ4=0JgUp0W_I?F;i`f90xyw_PCF@TcAA`?hW_sY@N zuKFw+X16?A*473{invFE&^n8n9(%<G@R&Y0!mHFWjne^mZkuhD6y6hL@5(|>=Ja^w zG^C7g@H_jFj6eZ?nPadHQkD^zk6+4I-cS6$nh(DBPCL{8L8hw5lfiG&r5vpJ;I;0? z_)`#Ien7OFXP9n=d<ruSau8nXvmB~qpj#!YdHMTT69cn2+%M8dDQ=_@3MpE*rl%@* zwW4{l!0Ogm%PD&N`_JdwPaSCM_biBF&$pK?g|bN3Wuw%^*jFf4$HYV5UXi?mvPaA_ zZ`8DTO<hat31y}9kSo`A<mGi4eeu=5p#Jcf`B4(c9fV-d*2{KycX@aW4d=bs<XNZ) zdW!>jER15ayTK-(DCJ^v4ljx;HjBiP^+t0=)1!#ZQQ)FjoNPdiAtkz?ZZV+zMPiT% zrIrX5Fw}>2wDP=%X8{8$Alkib_`hR`V5mfjK0I5^%i2=BMDgbw1IV#NaES);9-fUf zfRe-l6Uebd@Siv<2ljDm=t=`5S=^~Xj3t7XYygiSJj4sp(Yvx+WVv?+TrLZ(K$QL2 zF?&)mO557<Kt+#KoMlP-4J%4g{l%mIqH~{0PYHL7Z@IGKQtPD<UhM1_Zk-N)u31n* zevmUcJQ*FdI5A_>_cSBKFE1R%jyG7P>{Nu~L|_KPd8tV?3#hwZBpUtwGYF}7HGTu= z!X>EzEKi))O?-2MVV@;bl<zy3+XditOA~|Q@DJ5gK`^ul$E#HjqVkdP*rwjqUokv2 zMQr=_Xbt#JqI!Fxkj~Ibn6w;EC!C!}SpIO%bZe>vVRAyh@W~`c`1G`S#euNzF`Vrd z{YbY(e5BjU{q0P17+czKMpw8nH3<@?1;by93y7rz98yMVR14mTV?L;<NGLtIShP9| zyGrs>6Cnav9J`FR#1*EdwCWU}FqU?0hP%K5d8w%tc~8e*)9Raq3D;4tqrqxmp)}5z z6X%nV_B10;^BLM*0cF>eq^62D|FRW)FV$izcxWd>!QH4xD>ywUp88%XIDQrs+z{oV zJY3aW=6kktKx~^q=k3K;*P-W3#rMV5Ad;9Azq5g*_zmD$9hJvk6ZVg<C`?U*8A#7g zON1-PgS<}ClWNcGXRCb-D$r_AA+@*o8P6)Ur@GX>3ai>sYnoE~HF#dBy|hVqcxnJ; z$rX9ek;+FjM@d@sP0)L2ffoFSr={Suk&mBP*Ybe1HI~=^>Xe>%qv*k_=a|hWmq-R% zYbL;a9ph1NMIAEue2mMgSJ9{qP7vNGqo!uTUPvx({ZhxydmtfIh7nzcb!F^q{?j(? zG=j2C`%Ix>+F?|rO^euh?>lAMp=8=jD%U1V70+$ev2zXzW$f^h(LW2D)aU6W#KC=S z`+WpUYx|{={r2Hcmi^LP_VZy205q1a>^Fvp3sX}OHl=668Wb`q%6<tGI>B_ilS6y7 z@tQv+jdwjgN93NydybdEeMlwYFGM@qLe?=}TI~RWs`?c9aAM7p*|1iT$YpcIbE-=~ z8JVlTWiI(*OOd$fkZr2n)GLvuY8Dy{mDF6eeF8#i{B&k+OjV6auuBV3DEi<G2J)CE z>9L-EN-ssh@Mf^qp+7n_@<_>tsL)fG4ZKY4gS2TlMKE9OP$~YGipFL+Q#uEVi*bPE z(lYv@Y@IL-%;ONjnPQ3mmm1o9;-@nxw;@}Ts;g<7Fc3}p1+V^18GxjHpUOJod#~Uk z4j+H5s6*dn<&(>?-;R~kbUpdBRMIYx(_?SqU-oHiAjf5qXmHS0(kBFI`}6158vgt$ z6*>I**X_!mtDvxI!gBcY4LG9_0&!b#BMPNId#9wpai*kM?9$KNYP&QoUPrj}bGLyZ zm6F^peJQp97%shlno;G_O;jrYm*!Sr#5pJl$dr`*f}M+Rm?pitlpc-RM10Dt*yIR_ zO6j9uE^Z<w{bB396Jc1+>Ek-sId?x1>6|3FST##JCvP@l=S)}5Ij^tnoZrF&yq)th zo2PU*=OD{D)7{SL$Jb2_=gbmKPO_b|q#e|f7T#DaeyTiJ6FvdSLAH+<(nih`O3%Z3 zH&(SVyh6!pFoP{(h2+8m<|-F1ZHPiu(gI*f6$L(aXpV)Uh<@9li$b%sR+`Tvt@ttj z*x22{>&`3b_#iSOTAt!>4|iM_R{yK8D7+PIJh~1Dq#mh$I>B4@z8Zm{mMd4oK5=m> zxTGBy)7Y;_eEPd>#Pj+<_h`-HN?U|Vz^(JcIb=`7yZVswhmW%eM%FomC&cb&rD4D5 z4cm>Ntdk07#D}<xgW`?8baE?2{@4Xn44=dY6q_N$0`8WuGj9WsJ(HTnlst;WS(??M z0FbPn6skhS)j=ffrOZM|u~0~Lpl<MxQXIrbt1r>@XCAZu4ZOl_)lYL1MdI0gwyF-@ zY6*}~_DEb@+~_~4t6S1lvhdS0QVX9Fm1H5AS(x9)R>5mFLP?>if;QxQbxN~u6gNl~ zc4t6K=U6>Bx2Do08FE1?aFUgAS2D+YezQ5wSG<hfpg2Bka@<mJe5U3&i8(&p+vfPM zUY5+!IDUp#zJ1_$gTZlKqt{ut^u*3$h$NGZE?QGLAb6g~1B-cTj(V}l<HKQ!BT-(Z z`!%D$1GND&(0^2t7Rq#lp3`1i*qcBm-Q&Da?u%AaS+kJwPIxTRb(26MGG|JoC6buZ zXhBxN1Gm~LIMmZtK@`7znist-zv%%hAXO%d+ca<Q0>k2MZX|DaA`>Aq7-7Y{O`Rcm z8%p&{-U^ww@aq7RG1cRkydC8QYl}DP3o>u3|7+{*92=wb%p1j|c4$6vF1QbUZiH$= zSzRh_YY(Ryi<wU!tqF=bU#WI<FvO|;qz7!a5e4Bb;jhDMkdCrM*?MkDv&nReP>$gs z`XghvB}}3{q5}pboLz>0VN(BC`Ujp7K%IFw2r!&nC#<&eV7OIpDXU{F&?$}F0VsGu zE^;^p_^<SWXhWz2;5lX=uwm)RSl@v30M1o?zzjS~DM+LdtA(jqt*S7dqRP9V;vT8l zL|c(}8eWY{O~XZMTB{EdCftHFqY_t)kbHvI<1Izcw-nv$S6k8V+#;nMyR!83plIIq zKd`zFmGJmy1{GF`HcuU`A%^PW`Wjqwy(>%Gi1Tq16q%cp*0+$>gLo#CG}~_6@0)}s z4J{J1A<h83_9$@$VOh4x6`?QKHd$nwB%o;9z_&2$%{A?lsO{4wwIE#J5BpCQo2MVG zVZ(&Ch+ViQ)2zFhO_QTcvk|wJY4TjA>5mn1sJTFyW(pCLX(j>;7rA7bjnXs)FijR{ zb6loDqN;^y4)e;j4=AcTvzWRwMdHIfwr!GC_2lt$QLD=B!=&$>s094wCNL>OF_XP- zFaDrH@k=U`&D(usR4Zxsm$@D1T--0&*j*H=)HZu>g0@-TCrz8hZUN4hU}z#T!LF4T z7qMKscH460*<3}mSsYWBqCzs<=~}LImg}9H?ezC&cU!I~ZPpB4)}|I9W}8(a$-prs zeT(B&%yG8ncna0WK|xVc)7lXwrBqlY8c)+v(hS$E_m!oMMI3H|;-oKClmwyY>I?CV zxPquG|IZVlFWLVS+5b_l{hzw}vHU;B^8Y6c|Hn1^f3YJqwfqLms?=2A_J6F0L(W3W z|M9H!e}Lg4uT@p)dGNIy@><X#8#QsJrGD`J-4}-9U()gasP?5Z0HfodL8NoWNMRdz zIowxFEd;9WLLGjv(gXjd<Cj&0|K;IVh#wX95QB%4pQKgy>xOn^NID)$QVsYgD|G|@ zK1xZ`PkS`rS6AD<Ivr$IBe{tqgu0)q0ne|9Y$S(6aB<I6srn*3t0J=td+_37+k>y5 zGAVqN2K<|o^psf5V!Hu<LD;+<>8g1vV2vBR%^UB@+s4NwZ%gp3;w_hX`)rP#HD*v* zOx{{Mc(WVu2Aa3tgkeX_=T|u*<{B!j5<gGT5wjcDTqi}$I@|=smd{nh?1XI9hcI(0 z>VtbbVhY9LDvp>Ovg3bH&JmMMt@(TvF?M_IXfN_qyv#v8OUYztFP7n&;^kT3peZj< z?ZtWY@~euMpetT3!#X^q?4shOFP<eKL{BMAVMJ4&1KI)=GuhOXXH!#NyY}KUUcYuV z<&Xczc86bzOqJh!r9<WGsjy0vJf>AX6xT}SZNx3O35xz}mC8eNpz^VJCN!5Fi|0&V z9;ZY3deG}o7J~@ON@a!OnbmBVG%`#_plHLq$cBlV=xL8LfMVI>LR^zQPQl}bJx(Jz zqT1u76CC!~&{^5z^GX(#?XeLY!1JkVmG%$paTTh9*<I~--JfiO^ib8i+HcMh*McV! zFoURM`z_nKO#DH$->2FLB~jY%g}mPFL;IZqlc~w=qh;DqFHANK6}vSYAi*M9L)m^` zxYL%a>_(|plIsy@(;joOT=$|vlB+9Gnf;POo$c&*rHv461h<V>&yU%DFOp;tJr3D^ z5B<^Rcta4p*x9Jf<&MyJn+mJMO_OwJ^u)EDjdF1l6xV&KLgNsH#y~tH9v~|1^m9Me z{nzd&*G|7dWg}yJ;qCtbwEZ8~?EgSA{Qv$h!EAK@$EvrHk2c%@V#-IKPqh4>+i&uH z>btsgk!rseXkU8k5$#Le0HcGRL1Z%#qy28g3-NaQU4SN<+V9@@*KWV*kJhiZ=v^w? z@7bNG{SLv0toFOXQr&*npcMKkn}fL~=qC`YS!@r$M}BWxehbK~_Ph7X5d-jXqa)kM z9FT}NCP>vkj%Sqz=W!c(;0D`+AD}WRe3bUPaXqvBF0sa5KkTr1%ds(Nko!u@h(T^M zDmDkXOTy%cAAF)5aTR#2{=Op|@mCbsju;eYf2gzX7bs^(%%Ns+9y?+lH0BuJ7I=(r zSrab-n4GWzC{S{tY7{5o)^frwu0}DXE<0g&)hKo(VsgR);<7L`Xf%p6h@vEnPCR!c zbEr|wsr~r&ZC>fN8pQy*?eL^zG4eZG$6E?fyB+!MTR0+rITcokTOZYte;cmZt~9>Q z$4yWKKUNCQoC}2y#xtP_>`B}xPI*|z$K{~c@ga%{%gPTyF<zP_oxC<1DB3KqA0t0l z<J$uj$PZ)~^jA&-IGN_x>m8=~2qunhnz2}qhc+zJyoG1kG_L{J!!+sAG(7d7O;fx6 zN)ulCw@hPq5r6#FHce})-8Rj<OowSwsIW?`8m~=Lg=^b1ui_>s-u_6LW+s{DtLtEz zL)tV4M`+W`0KH+F6@;Zta~Dnwgy&_FX`TU!HjQV0#j?i$pjh^J2-jqfUU=LHl^=!f zKe|KZkE1`E_Ba>MvOSs+d+t!ll=g@SmD<_kQB;M9RH@RQ3M$%e+vBxsO?x!C#9@z0 zDy$M&<=P(ExVG)l6gQYZ`cT;;@CxkF9?yhAu#D=K+&)~}qao-Gd!!SVwnxu*byIpW zP-<z9&EvE^cHx@rv97>jkBzvE9v}U&nZt;WDMU=EYa+lr>_Kg)J9X909*2*Z_MjdM zr>>8-+V*HhwcGLWXokZcaa33(W{=hOn2T%M9%0-B#S<%)JtmMn-tGW<tk?GV`XOzP zVW2ncF_W;gJw9K__TXvL5kS%QSk0*`qCaoNM?O%j__!I@WRI)yxDg*OR>iW%SJ?Yu z*rP6<WqbTxX4!-LGt`XGG^yJbsy`Ei_{s@?cu)&H4lr71203PbrX6ob@u6Rk23GQT zUILa&#n0}~&|C!nMBZK0V@R#u(jN9*Tt$nMx;t~l0^Oa-%$MDnGeM$abiL&hZ)~xB z;zW?KjU&6>M<Ag%Fh=TlD{506mmKc6e2YJ*A;o)CCZ&urb=LbZd*-pG&aRYX=z8bC z2gp-Xu<)7$En)`>x(a!`3`BdSat3A=<4--r;;_BsPP+lYMi*MBM53!GNWnja6$Pn! z*|K|D#o%;f<+5h+D5^*6@8IiNe|yoXq3liHrd0ZyYw7QvuWkK(3Nk4@b-6CTFrv#f zkBZGMSKcEOMxEYOVN^w7bT^2^FccU8GXEVNAU#m717r<&9#DDg{#KWHFyLiCr66ex z2qQ?&BDNaBfY7455m|t(8PKxTsDFEn6j5v$UCSWBvJy?&C4&PMB<~K<LDB~>#~UQg zc(;fTTqToFD1S)7zvK_8mOsp?u-32fvD$dD3#Aii_m@$QI@wRiLEtAecz~azv7gij zaYc7ugr5wdrCw{yuwlM-k~Qt5lhlQ0L^{cJU)fGF8)RS;OCU7cduo~^@s?9zmAD8T zE<^3KCUOa`*{Nvmsu6C2B6+#;n5j@|bq<~p*AkUZsShpI9&;hewa2UitaE<E%BKe& zMm{Y8BK7|ON3QZ~TZgOsj@#(2GWLMORo)_EYTsT1FsWC~?;bOs?$@p|r9`{R<$yU} zSJ}sVH>`e%o%5D&w9RokxRgV<W}zysn0ItEM#TsTT_0;k>>DZdvN;#B$>|3<c>4x_ zP&sfJmB}0!W$@O+!4=JbaO>P$bM>&ocP(R+eZ(NeMNo5*#hLi`w)PM*OLGw=6K~#c zW#X92*l$QOWa6wi{0FJ?!fRX&69gy_`){Y}ld22aP<s?t7u47)TO@K`r6`fxn_fa0 zrBXWSUquOxtc%3IHrO^94I0ZP!B?$ewHSL}q)pOMD0+>MHfe{aluhKMb9;i3tH$S3 zSxlQ$@vaNYQ>e#OB&L38v-IoL0I;L>mQ+X7eo2K@qI9^9+6QsX6;jmpz)esLSfZkK z1-PyrhiAm&M5Uv4)e;@GB`DWXyAGO<Hos%V@8tknN*Y1@UWaRn-;04_r25C-2cuC_ z{m0n&0U51Szpu5_nfPVc@x|{bHW`m!Hw@PCI|MK~o@&=0YQcL^EUVb@`_~t?VY-4# z%U9Co+rDxWDt5*%`$`M&KzccYWHaNpF~LY*IgB1hY+sql`%S28L2L39yZG6CG+cKV z5B8U#&>CPhL$ZrR_FNqU&*P6213%WWV_-Hr+<98A5umZ;I>ZX)yfpfrNV&=&w7B^p zDc9A+yOc}roM=lhQm%8UEM^R>;_Vxjw!1J(mFsL(?`ox4>aJD&>)oC#t$t9l^eUcG zEXj=~okrL!O{TJ#EM4kgi5#Fv{QbGjQnA6(7R}Nv-YjJ)mXb6}a_Ouo!ALC~x$0Of zJ<A(OsE-~5?}c9W4~fPY8&E224Y-;i$*}(%!~Xaq+5ah>1C{-?WFtUh*?+E<Z1i1` z%FcO>>_1f5pSX9}pJ0^zsVt_lSMkmb%l>qtN|C5sYb$%#m71k^)T(yo{yNB$rPU88 z`{OBx{a+^-$<kyhi^<ZZ4wjVt*Vrr-+W--Z1+0}k#X_29L5^51(k%FGglLNeum3{T z9doguT#{KM7S*<mXOF#JbNo`aR^kM$#8>Y0RN^B;q!I_<DWyc|vDaQ@xAfOhSxhDF z;awlGJr-H3i>SwY2a~JIub>8e0UDhm@$ie<aRvTPj+=?Du@X=^?!eD%ldJ-b<+#1I zfK>w{1>8xF`+TVsa4eou0?NjFJi$mWxr54L3fNEzs92(n)<xp$Pi>YiHCS4qS-Q-d zrBf73`!2Uxl6|~C@CU`xW-5!x(oo*tVa1YsBOy<-^eh3`{fUOjj{d}GDy$OCOLTwY z0$g*2)SvL<CMeE$L-i-JUPpi8ay%ohAu8RU*#8RmCwSs973I1=F|QW=iT~j1BumLi z=uaHRHMN`nzRb~|xNTFc`Nz^-j{d|8c$P#E&j1V;kyG{mWd89aRHf%1LvR3UmBq%@ zwhv@b?Y6?7ZsJgQfC{Vdez#WmJGfQ~ZzE>lCMaHdO(}djDg0w}heJMGsZs6Ex9hG> z81%ZUBjyv9HcQXBx|=r<DB3JB=exQA#j?jhT$4RI;c<AqwREy^Lo9pzgbfr%|E>|9 zWqX`V>>bDWte+No-vBN2w0ljVYuCT)%zHYlD6vOEO+T^iR@xF=qD6C!ggAZlMV+LF zd_@Ia$dOQWmYp9jq%s++QAR>*e`fDF)`s4fB$;C*gf5_02cUp94i$=`p2S5;^%X6s z7m!vYT0E<h=?wgll4;AxWZLXwTlxn;V<po)tak1N4(lJ8Osh~Rx(t@u$i`ESWZH^g zWHL>rvY46cJ>K+T*+eGOM_1V_?Yva86nw+(1&Ds0EPZf~Wa%Y5rC5^5bS}Y2mMW+$ zCQBDNSdz)~;72w~Hxhsy+wYy>i0v#YtP)%9*0H@E*IXeb)Aw-`6raALVmlckRaa*s znI0f29knmd*2(m1l<TN{4at-@(0T6%vc_lAfVY(FgnT*=*W|a80A$4PX<x*O-{#o- zVZ?7|JWEoDj>PEyHlHrz{TP-H*!gtKhqlhYy~Nb{b*DRYzLE;7M8CVV&O^9XI&UMc z$4yXlovU;{oOE7_XF`kEp?K){WM7?HT7llkr#%QuTjpfE1BS^zUO#9J6m6N9`LqF0 zEPFJ;HQD3n#SVLn`8<|Ap1>9m!yX^vS+>W!gDiX0Zv7x}f!&C_&_@fM4;U?U?eb|| z-j!n6&CaK5R@!!JPF#BBQ_dibP$%i(K!&8U^XXHU*!grTmBq}b!+)Uaj`@N_S4nmp z`Siu^GN1mOPW{tV9-w?TU8mFnutq8MM|1$dI&IsS&z-@~-nSKy3K}b=3Z1{wdPnB3 z;V_G+bEj0uPpHw6zXblE^4F(S7Bhd{$y-J&v&j5)g=Xn70<iPf(Ni6<R6>PSB59zG zrDR;ISi<{@cTg;y_>zjHLU3Ju0iF?;6P1pVpP%C>$s+xniE<q!uhlMpZAL{)Nh!!* zyKqf@vhE^BycB&FD_;6zbBYl!Q}8Uu%S3?TBC<dDkJdkVkA|giJAZxjuI&cRsCHZD zj|Ln%kE24Ye}=Tq=i*xFyp0Is2J4?MDxJ?Hoxgn{t$*T5^#{N1sY7`f=yfQInS`Y+ z(-E(7S@~-OP_$)Y=C6F9SoXLX*JO{Y@wm~Rd{h<79$)?2VUN0amhJKP?Up@im%q~A zw1xhmhZcGqV6@P+%U|ul5;6xOEeou8tbdB!u9O0js&}SQ3fRs=)a_Gs3TS_UOaVJ0 zQ^4xww(ZXWjg<m?%slt1nuB?SwB~tfB?`sS0aCX=phiau_z8bdDc}<-i<tsKyfwx0 zNSOk%G)t2Rz;?&KPIkECy;N8wP6s2)ATX^8HO94a$HwAFe{#nL&ntKA4X&%t$1|cO zQE5lpiTA7EXq*BPQLY_r9$=3(zq}c>utq5Uan14nFNePseG<#x`eQeU8UJ{e{cR$^ zaPdEl|849?stwTbztr}DW>mYa@JIa)g~w4L;=i9(_*`5og(LoPgZO_=DSSRD{O$7* z|J&J{xc~C?O*#~YfnK|nm`PaLEFJM`mL2~<(PmlAnK{aOT|Q7Od)$m`j(<FE#{a5V z_V^0BK@5A;#j|XWzi+ebQM>rhc}vHCcP;cdz-Xas8UMUNC06{ezfr}1D#d>qcLBCn z8u8y;#(x7JYl6A}bktsvSiQuy{W+k~wx4v8!}dNZtP*qkYTM7pwX%I<F&Q^F|Kk~D zdq0G)UJ7Q!Cq$*KdQb)%Prkg2a&6UGwzmU-w{#ZZ5pNISn(W&PK!$yP4};f+$U$%) z_tO0z*x6y&_gp;7_H9Oty5sGi%)dO!n@G&;#`7;li*231cAly8CMP;{UP*=6|J6t9 zJR8?a=WRq&++hFLOr`U^r1SQ8CNxO9-tFDA>oo+uc0G|!SlTk*;>{>4-cAOJwoJ@; z+uU2*V;8PD|DEfwN6`nd;;lb+iWv5of@j$t69FdeQM-6ssfE6;s}}kUz-Xas7jGLj zn|ab6FU(kE+wG5Yz@^uCfjm?EaI4hACyENbDd%7AIL{t0%%ifH<Ap-W#j)mJnoBZ! zyik~$>An0`Ag;pcCe%xKFNG#vGK<902|7ib3x;64vU<LV6ft|DE%s47s8ht94IJ+J zJr!1ovAwjrR^VE>Yhy78H$gGvDdnzt3*oNQ@QiqosI(()!pn$oL{1T9DA$fyoAx*# zU`tbgjr?#kt~vh$#mEmE%fV>W{P5K#hd<UOsbDAZcTdY7?N^0q&&EH=4+Bw^o}Z=O z59f!LZ`lf;c($qV!#;<?2UB5{NCab62PjE08NfE0HsY@yr11LFmBNRU!kgon&;nek z{&<JZI#hOpUWbbC6P7m1yHj+2_~k6qEHU%LVt`uq_zc%%kJs_IVUL#Y#>x-vvH!!! z5BK3&w#Qun!$qz4&m=Cgh3<T#7W%*~rqH#^4{!0N3@fkO`C-@s+iqVq1D9U;fjm=u zh&o9Ra}<@GAFe&y&JT}LS<L*9F1a{XeyA_WYLg!x!hvCwAD&I7UPP!4br7bF*D0a~ zf2S1D0iFt;sTVP`9ubXx!<Kv-Xsl6$U_awg#CJDDjv_|E9^##wr6y+LDaR<{If9WB zp`)lQ<|yJ^-jQP2qYT^?iC<s0St=j^yHopi9Y+vdM1@u2i<@*1ZNxQKNE4xpaT63P zr>Y<-1lQF&nj&lcLR30Dp2cgDR`a<I<vMFs#mR|K@BL-d0JD^IfqXR&*W?$I@VpTp zw~Ymh4WspEny+`nM`t`s%!`i1-*LppN*y09I_db>-2M3DV+wEBpq(Ij9!-(Bzku8< zvHFT8<Yueb%`O?I-E2DkPHy%nN|c*bu}z!2X4|v`G;E{DO}Vqkt@?mzQe=CgLKp%i zo40}$;19~JF0c`zEpe~mO&-Tw;+`$Z5MWqxwmBZp9EaxH9DmqY^5R;uVUFJ@mK;B> zsKBvYl%Iw_D2^YXvY08MvCVPJ&1?I3Lxm3<=McxxP!4djT}w9N+78lE6O+hNhuBhM z%e19_#ox(NcQvr(mSgzAuiA2d1{xiGR~-F`nmj}b+NgxG*Ql^c+}KS=UsqhSloWm0 zxCx4OkE!TOd>hf%7te@$h)PFa3SJ)rW;$U8QLdwJ4g|yzBY9xZ@&2E+{%{6>mhPAF zcOkCHZB79K3}CGvKE60s`}ERUNBnI#QyNKp-qngfM}I-R-}C=^pX4f3rTYte;9=Zf zs5j46c2BC^PIaFhaVR^N3aiA<E?U_F*Gk!K#2VZL#aEN94jL)@k2BC;7>X;^UpVtR zof?*d-smrECoFA}lch<x8}}|yv`JosNfOSEVvlh^vF!0QuE`!F@wj1+jeQ_T!)W>N zbnGfI`U~ywEJ-L@6MO&L@!dS$-(j^o_I%3yb8UNke!6LotNwD>V*wRbi7rLj9^G+m z+oKh3f};H-WskXJkN$Wjv_;#ayg=LIBG4Q5C?qUxkH5!ri10L522g5gj{}{xJx&55 z+2hwlhdu6J7%M);Vta>SkGJqF+v7C=d)VWj%x^d0og|h$wpj7;;~d)_t*Lf9KIZ-D zuty3N;{CT9wLPkEZQJ8j+~EDU3CbS+#jwX$r@<b%xKi<PFkjna2IviYtRO6HkGt^t zmDOQ*1}NGdG5ga4fMUhRL%1e;^upsteEj%kEPMQc-5-WM&c(BAk7mT)ar77FYN6{I zLeB}BLf5W8-Iq6{(EL^=I7oN3Lvq`IpSN)*SI0G?#%Mn`Mu$e|#;6be4sDbTj%<v6 zoUQE-8pHkvo%W|f*#8E@{<v25Z!BKL4ebA@vVRHN|5P+aKM<9+?Bio~WAqWqwPjzC zjZqo?fyF%AqjA7m8d$>p!KZP}`41q5ed{fVW#7}WOT@5mJ3PzwZB0zN^WQ&dkLK}~ z3@hI3_UQf>ZGC?pF!g=a0f)X9P$BYPC#~=9xK{dZBU<4G`L9Chdk~aT-5<|{wrkfb zzedN~MW8q0t&p&^RYpjwaC?*i6m6B5?a_gb+8!qXk@H`I!yeb%0y(0#M`N)`#IVO( zc$V$)8h}0Q@lWOxn(%%U%N}-n^yBlkJz7)kI{)o=*dv7s;s1r&9#y!u?eQvZ;Q!^y z9^1(tU!4MbWZ}xne{HorW`N$X#|pyI_PFa2-5xyylv>(j08p&>cnH^=|M0jGA3x5I z6(4_Kw}xSlbMY+OqZzU1j*oxR9zDt%Lo9pP?NQMz+a9l-Y}%vA?+$xZQX%Gluh;g- z#<gvarntfU?>J?Tf_Gq#_IM^VTifIITy2krpf~K1PFUI=-;UDl(aAv3_K4XYZN5(1 zV;8Q;9_#!LdlbDI%O3qdaM)uCo@IMX1eml(?dE?25MMdreQmVRX8=YEUAy*Z18)pD zR(rIaHybBc4{nI|Xh=$txbp$s7;VBIp^CCQ^%z#}x#;$+ZTtnGv8GC9G50)Gvgm5p zR0#^j#A~H;@5NJUOe;4%mk^AcD(OmPF{ern^8O0TB@1}==A&n9mYOMW*C2Hiv2c=N z;n$OF7UUrHH~c}duz|{A4pK`b3&)zb>L|$~2B}?KoddDxN;yasCsMy)CtB7bv7=O* z;#zP-rg%-8BFJ*DnQ6=2oVd30;*|e7;xL{HtHk^cIt~}$nx&*c>f^Wxif0~CakvMn zs(u&Dh|h>hN7yhU!d^wWj<AoxbftHHU<fdlt_39KhaSZ>#n;_<*vxl>z+cq%r~Z46 z_-cV?iF1)b%z5_rBF>&r?{nuZwd1Q%j*hRz`Ntn$_wj}kim%j&m*&Ln*<{Q>b<=n< z<_<RIX(ig2!|``AW;0k2DxfLIJT~Uhr)^_)2aR;Wh}R!dAcANQhDnM1tpzzZB+qc1 za3WP5Ph}_D2+`(--dI7^9dmAIyd;AYXF?Q<W9fc{n&UYqfMeVJPW#2-eic+$B{JG; z_q!C=w)-XGCMeDtrQB};gsi?A&xq@ZO1s~Y5jw%Aqg=b+CtwZlOMCW559GoBNOADL zlK@ES`BnC?t@)AL27<w;{x=reIgIx9Ej-Kq_Zon`{V!r}MET!P?SE6Q)c$ulV2(Gx z?_0*kQ~r|)|KWL*<<o5!I-R)moWCa*s*5^F5C5qzsQ@I`_dY$rcA?LxEM^`YB)K?N z9&9hk;6hpCLcol=zW2~&RDDwQzp;deiB(V+iOqv`@U#I>;Ja*LWG4LJNn7%!#JBB= z<99h+@hE`diZ8U&t~dwREGK2c3fu(6<0F(S#xH{_(z(lGB~fWt?DOY7d+hr>%C#%5 z0n-U*kHY_>jE@EYX{nI@_z<qi4!r;Y8(9AMQT<r`jX&OT_~W@G66M2Y#Nu(}!@&?v z^*8EXq5W}A+vE4gzF-N-#48`3z&rNwEfsRo#p8L<Tkjri(n0t;nUp>Op!`{8mtUW- zO-il2HtE~KVbY7J5bGbg+N2wCZJTs4Zm|9_Oqn!?Ou7RzE8-WT(k7jBP@8le%C$+W z*rd5p>^TiEOSc1+)<1Af_M~qG8ut9XUMzby#|{=FzjVg4Y|oCw-*MP;wzg-B%d|Z= zw>f@$PT>t6p7tznA=|fBuvg9ESx`-pXnB{m=S=*a?D;kYfNbB^!$LU!eyVNHp`fw) zjVa5?3%TDoJS(!_7>7d96#|e_uf$W1eq#>7$o8%omC0lk<>mbM-_|aQqahr<Fi}?t zH2_TG1v!8fiC%-WP^<Cxu`5fGP<;xjNwuFA1$c7zB{f5O7l{nxfobxA%iIs#&Q<ww z5(Rx-rSv*Bb&IP_8`TUcDH7k^X;oiRh^jAgBi#igz~I1jLMmxye63-qR_X(oUj+$Q zv!?Y?d}alWjr=l$_5FpcqHe|E!^qDVxj>D-jjrJ@UwMCf!H*7077SV}I!>_-THS^X z>Zfln6ryhPP<;C80^3)8dm+CCGo+imrR&Mc_kcID@)LlPUwomHd;Q^cMM2TBj@>E^ zq2j_+KhC5iL;J16sr6TgHuG)|8Xyp>@&k`AJZ7_cwaw~Dp;@R{etUsg*pnk!Xhe0O zZa^gA!yfCz!Z^GB19<a3cKzKP_0zW(ip9CQ{`YKvh`t@OaED@HGEqqu5}Ace&BFaQ z0{87~73gm-Y<!D-9SyTQ$6DI8PHR{<cZAl|d`X7fLx=CsiQ=TOmCW(rN?T)o#fxi5 z#T+kbC6)Fq&=to4=6GZcd|F252UI4FMz3mlaD0x<v0V3)9J{`~aQICY3>?$(Fv`us zU&}A2)C}nXU&G&1<u}ZP|8@!?`8l=@V1d$7p3KZ7XczY4^2xTK=Ya-k310j!aGMee ztgup3&6{Xs<3#w9NY~v<uDj?ese-Loj8rPfVHLbefKmnTQCUpCJxj`_tgwlh+cn8% zZX5wXck+ChH@~;qK>Q)0><%g%>O0t>3)rk%nm+L2ng{$fr-weeG{E)aD|Q|H!O$QG zRDC{ZbJcYdel8xL;`#y~kV_X$@TM6Qm`0d>lyMuFN*|GX55W37B0s)wkWJ@5=F~Ai zC%2T<@zRx29cx-~3y>B5nw2r>FQlsku!9OR&GR4m({L%+dIIsXU@yu7e1ZUZ3TD$= z6~yxdN;ZAYiD)YF&ZGmx=_GM{1q+8E-$rK<oyRuIW}DGYU1hVcGY-~Nw+1Wxw6p-7 zJQ^h?rt?M+TKUfb-{@5*QqLMcJ_kZvn^99!-6@-GnG*iGW^oxcJpAo8@k~GMZd<OB z?sgH1l|^T>MUy7l7F`4y>29Y$nv~Egvd)+I3dGV`xDvgxr5ejXro1Yf71<sn%Bw<D z7SpS$UgwBWJWxwqET&GddB}|5A?020(9z~$>lKoRIL(9f><|95dDwa7v3SUnJU|Fu zrFU!f{&Z;d(B;6P^T58Y8Ir3a_`2J)O2?ue^2?94O4C`KkHfY&eL!QXbU&$dBzRpq z6oQF{N}NlHWtm;GSf%?8+2WjjOmRwi6NlBn$Sl%U^YAUa!{i}IDm{z}BoF16OO?Jx zP9%AdW<7;WA(O>p(!pXha=*<t&05BKc=u6T4>#F7Gz+al{i=i2^rFZP7OQ3dWs;>P znk8xFZ3k_&9KGULR_-NPf=t<PNj_rV5j%*XplEy%AtqIya+z)H#VOR`9nT5&=04iq zPoPG!w-G{8*I!lGa^4FXQ`gf;*OS2Y(v<gL@1{zyw#2-t>qf{2O4rSgDcD%v3S!y2 zJL~#J&BHJ7Ta$;q#KTE84^L)E<-SYqEqRd29eKc3?(<X@GmPs<9sm#}gnD0y5PG{M zaAXKAPNu{pwd(7wwb}+%MQD}25>PB29&c;4X@o@mpv&rPu)8#mwEA&NDba4Sp{dms z`L<TSpt6_}UBY`lEUnU}n_}@-xy{3q05G+>f_PZ;hs8r%#l!8I2dULGkSNPue@q@; zeTC|yVNMjSK79eSdTR@<)h%cSl~!NxrL|g(nGMqFVx61jv!7g`C8C1`Oo=K<q967{ zqQv*1)q7e<tv&%VrB#`mx`9MV^dObR)ap09bHl0Cm&VyzZ5zRZARc<zJnX(y@^Gr= zLFT3n_@IH};Sch$m^^fK@DO4>oTGVo7XYRn`a$~Yt*Aii;daHtM5@P(mrk08dymP( zmoHnEjggEB(@3hM>d~0mw8Cb*Ht^>?w1MMMBN=!Mq)}~YJPTGZ)>iIL=_jg(maxUq zLt9OS1@tYdoP%w<a4#(ry|jBBy|hN)A_v{7U?_`}G91sKr^eTV>G@phsZ~+0M-0X* zVAPQ!ruw3cdur)dq9|d~n}DYm*PZ>fEb6cM>wtqaYtV#mQq@_ylDzM?OQhw`q-t<V zDP)wE-||}x)sqM7gSoVDyz03H=%c>zr6=P2Gv1uygGqDZ62@-6lyylRw^Vf862`to z3Z-4<^zI)})uG+#7~@g@EuH#rMd-gNpNi2n`}-xfsZzh}Ab&c>R)2q0v+N*OZg!}@ zfC_a7`Fd9eIfFaMi7TP@`VuH5R0++<2{JWw4WEa;<Ztj6ScOTqlIIMy`p?;7Yd_t8 zUW+nm73x1f4>dULk?PTZW?S^XSlS{C00?XKpF8c<{b$Gb!MOjt16xF(-dxpxzJVB% z{pV~p!>eQlTCQ;Rq0?;}+*&IeJjgpy=#0)J`d}u|5@AF-MmKq2Y7se#XmGiGUhAdQ zvSYeep4XaIQ9#Fa=2R3U;-Bn_f+RkU6BGIPd}?yV;1uK7Rsg1ic0}sG;knTNy_c|P z-1}ay8@aP@($RV|NGLFl=ybe-8<?j@+wO9?gi+DjXOqKS8dITmmuTau5V_0di`gIe z`ZHXc{_t5}_J?$0W(CUFA2PkiQ)wRlP=E?V*L3L*!vJ9T!_~jW@`v>=IQ*dvF{b^2 z$5Uyr9&Mhn##5Q(3z^1viU%d&z!3xGDX_sW8GxgwWkV1nXbZpxHL>);XE+RMpe#V6 zcZbt_*)rl#S3ga;VaT0ykvTIK;XdeQRum+&7h%1NKf>$sA{wNnXg4|3O}j};NI{lq z1>aCv<sEjD`yaO5Bmp#LYc-urp8gA3tIQ8zo23^@+kBS}g~-+_l}8k__Sh}vM^qNG z#XOJqw^*(APUhjiBW)hS1OVg7%(nPThpXOAg~xW){lxc0phfE9>$CYeow}autzGq0 zlxbI82i3~`$M*LhX#DTxudI`oE|5A|bCJVeM^e+0fOZ77cjvDZY$<_^R{oldXGv$G z0ARStR)@?+_gTtcIFEP~tfCe*GS1>jaC~h(UVNG6aHCqe?!@P$>!Ky|nhNN24*G`I zq|t=&TKHG7$Y9r!$DwYyP`cLjk*<|A!Zzz7&`8&67V5%m^DOv~W|4!m{p4vkKms`H z*it;@@U+W!*`9V2mBsY5rM!8=>1kt!+bo?!0Jf(Ue&O&m9~D-K0sqnqEdz1Q71G*S zN8AKOabLC2vI1OJFTDUUTt-xf)Fe~3xC}3~!3Q`gzKnA1X<xw826(-%?ysPe)8+RX z&j;F4Qc3ubxC+;#l-__bQsZgV`bBlMx3OEqaJ5uC%dYnA|FQNa@KF}Y|L_EcWPpJg zA!vZ8QGz0%q5(w#4MHFafeC>OiX6KlKH`NkBS8+qB+Bp*#rr}<7nOBA5Rec=4TmHg zLKMVss1c)fOjfgs7%(#bZ&g3f)6XQ6puhLs{a~JXs*mcb>Z<DM>VD4qi=t-c6Ku9b zZF5&8YSYk+3U2>3EqN{{uu#+~s;J#`HbkwwJBeBzNaPorvq+0cQM&^oNLuWBC2CG~ zP2alD;_J02V~Sb=qs^k$7HCs5>f`IH02GzoB~{y?mLY0Mtkib?V2RpK=S!+J9fu#q z$tk9&$;eX|h0;1SV4}1@p_J1lDoU9KO0%e2yPoZ@P?~T`l-_@yXSAW~rJj9gwne3G z)PN=Zqjp6|e=Gq@g_f+O|8_iE(mxtMeB%1ahV*;4K>FW557Pf2l~U4wIgZYm(*JM3 zmGpngdN!2~dk~i)(N;b~g#4quBH|OtKb~3s(U4vK$vihL|IbCrKk7>P@79$3UrD~d zat{po-^X0zOA$6F*yJD0D2e)u@(+~cLOdC$BsGc<`b9;eT&sP4F3o~sP{%Je`qV7A z1+#-@!F6gDNL&8;EQ`NGP{tIw0Qh4>#aaRR$XPHFK=IYNlD1CNiV(SvE3H`|k|ph$ zo(1X8HWs;fh0-c&z!JGb+apBoaRQc#-_B7YcO1`_$Q{NHpZNYpL*yz+<kC?`bOh=) zk=u&HWTwbn2DlPAGVQ0*x9iYL5m5y4wgb;3Z?)Yb<n3Q%8Jd*0G-RdN^zB;IWqG?p zj^)&*-H^8x%rcg@F{dkeJC^kK<!v>mi!`ZkTXu!M)si4-_YU-naif%&Ie<Kg*?S<I zp+=-;OAT6Lb{HaRirLVumYBWRsiBx911M$zeIn@#sAY(mjATtZVu{&8f;DT`zj?}> zK#3?gFk%9UwOyzsZ`HGB)7<HU8R8cUGSr}Yp?MnAzJ`OkEnp2Q&O)KVw&ijf#Okx< zAj;3N2GNHt#<Sm8gV;zgIfy1U0TbmQPPJ|M8z+X);Xjyp?vKXYCvwcG#+Y9{i^klW z$Gl{u8uR7ACMqLm&9uhc5oJt9&QOf}ykkQ~)({QeK1<SIUy?-w$;c-wEE=pQShI{w zkb{FHL}BFnoh2j7&Lq*i-7hwbP$Rk-ZPSQ;g7G&*Q|^zvdXF`t!6;*ns924tWup-d z{TL%Ue5M>x3&L6&UFipG`Pv%M_mHXPM>LG{K1@Gg3b6Bw4hp5WsR2s^9@rY80Usq` zsrWTfX~5s{%pH=;c@RH*qS9{~U0_``40Xh5KwaNUN)Ofh?&Hj!WTMVxfU^GUaRq>$ zhbcT2-QM;!{LOXfqloB%*7}H2{6ahVKS8cQlRlud43xbC&43a{psY`nK-r+jd5(hq z6exR(8h|K>X>vfltuNf&2q(}AmdP);8^JREh<i2`ItIm?S$CH`#+@00@C?iUvKf{j z^rzk}s^7FFg6drfSSsdqRa9SyXM^fji>dhG6L)4CRM&{=B$C<+JQ<6xRbHi`$D+LQ z2t<(DQV!8;IJQNMBJMncR+M!rW8S1T!5?!ya5|b}{=h!<#4~ZnhjuV@Gj!JR%jQBQ zuOd0aW}o6wml^X(7ansI`xM<Da%{6kzuKclpN(eJ=>M8O)PeIwWd2ojf2hytGzAl? zKJHAaV5(odGhC^H8xo}|_*JQb3YLK9?zAM}GL$h@K{@k{mjrd~8!ETkF)Z<EXGz%K zyMj1&Rj~e$r3wxatXbtYfRjp0RUr4B;uK2%q6RFX++7?Yln)ZHREPv6lr?xZgtD{P zgC9O|Aj=TSfxx<I0P2WXpl+#xD{zJk!p5qg7oc`kP-uu-6aKfU4_-q@MMM<V2kY^R zB<`y&Oc<pPUOH$GoJZ3K7jou_890A|8X$d;El2hLvpy((*sc$}tc91{Zb?HA>fIuJ z)<+SfZ%e>ZamN{o^mpUgApO;1EPnXJq%j8Rmk{ZTA(vV)o(z4k+^uHBP?T3QLflMk zDShyiWD)CwMQG*k>VsG`$NYgl=z?eBPAb~5>4Uwr=j(yb4;D5KMLmfW4Vyl2qAoM$ zgVTA;e_0<Smsq2JrL7wMFf^k^|JU?E3(gv8P9Lo5Aoam}oygx=3sLrqWkZxo7@i<i zLJQ~t!zf6{^`YsO5OhNsQzg_g>sTdxht2HB_0dv{Onlf$(zfyp&_}8SX$fEb!cqyP z1Z!3$^x#|+QzfimEp_x(3#FxKz(i?0)00se6CI^q21=O<CFz3wQVyES+=_muMCnP+ z<uFk?%qaasq4ekJa=eYw;g~8b<0Vyg8>K*N=?Oow-=fNDf=Q}0;R$z;C|H^GZt&Bg zH%f=A=8O-!Cmekr8>tsV#aX9G33<FDNyt%_koyKJ3F!{3$Oao<FQE)MDIqs&7CT~4 z#$-o@V#gL&LkU?=60)qLq{U{)q#+@4OFQ>-ix#gDtXT<(m4h^d_8Hb(pWR}ibSD}x zQ5soFGma&sPjr-88z^0@P?AFH-ET=q$5Wy-le0fe36Vm3wL<Aoyh15nq4YvrR4U!u zK~iZMY8h0LLOV#Iw18mEQmKN|H%yeI(7rj%qEfoicq5@@M*Vu4M4_`nK??1`y%wYX zgxEAMv=b!?rxM!BWHH<Ft;sF=p%C1$;<xsML}JxJFA1(UhE&_8tCZm04$Me!-v-2x z61h42=FMvSguP|oX0DI0Z@mauDhj;HzCDU(9xbgh0{Gz*^G6u=Z8=z4RnY;i#eb-j zvRsF8FbfuiE!S?qmF3!o*=9eVWRK@%qmiPyXcP8oI-bd1Ek$h%#q?jZK5Nc@{SLVm zHhVP|bqRIRj<AcmbrRiw^=`N9)h|wEub%S!eS0;A(>=&uCF*-37v?4Hh@0Ljw}-e{ z%iR2RpyK9>r%7&75`F|Xzq-ld=6xumxcTb32yRX!V5#`1z2fE;JX_p+4L^Kh)wKpU z%ZZyEP)B@8r4%>Y<E)s;O$XqLo2B3;=T}6H&pwD|it<29@bfu56F-X~x;B31mNm!E zPDm-S@iPx~nV*9QzrVrHbj8neTPl8TYxnp0`9L1gJ}N(lyCpvdwgW%!o#7Yf4N%Pd z6ilY6NjI?>%#=3ew0~O6d<$hv1zyG|vjV@XMMG`*CV(Ox*b_zXM6C#IIl9bJ;A05Z zthQXuX(Oh#jAxrN{~s1gU5v&XX-h`oW4A=1y1j*h)RrR^3VR49QE0-%Uo25Lm9})r zVm56_H;hCE_@E_w3r}0bEZ4RrCiL}-m#<Jv7ztd63C3sXlwn^o#Ts!Blrfo*yu-4h zKROyR!2zJy(pFNS3OtW6>~G-13WlHc3Bj6W!i5j8P#JPDgZ-@IlP#2<L<1&D3lvKJ z=qU9uP|8*)Ny9#Cw<Q->o)RUQA7aYIN=9j#LaBufrLhX7t>I%dYUR`yF_m6uBdN3n z-dlvI?!ya%O0N^FSt`YG$_h=rCe5TzJjN$~6RHYZlTxi=rTXIKN(8P&H&I0(G|8fO zcfyKKKb)!UQ-k~AWW&L&A`vKVEeH2KBrZY(Uf*enzz%{nJGh<;>>{v)=i#x57D|ty z0TZP@J1wak8y%$!4V1DJN>T*k6-t+%5~Zg(_ajmSZc-?P+bEQr3Z+edMy1koE=i?g z)QS*+PpKKXAX!1MW~t<qC^atv7rTh=2~}(3NCe7R1fK7wL|_=YArZK?p(=jxMvLC( z5>|!?<f*|`);Ap76ad8sadL3qLg<XaNqVo?Zizq%!I~Z1`JCqxN$+1LSSUS$227O7 z6-t@WQR-=+<Wnd~U-}=^jHGwpQ=;_5JeEp~Df)6s+=NroRq3%r=mkvZOZzH9f9YyO z=vr1JXR1*Zp^Q1IRccgo{%A<(-n&5Pv9XfS_n}q<p`YJw>9$D(YnIR-a+*gZp%>p^ z5&AqEN>21@tfRz<s3>h}B~khT(q^C}30;R52BCKntXY(LNtBu<^x{|$`fDc<I++Q* z{Zd8f0NN*s9t-LkMr0!sdhPYrsC<Nj<@e8dGs06$Az-O^(y2VfXYtH9lixoVKYZfB zs|`=_c2K2Cfa_unl`?l1zQ^e=_=y}+EC<vcQd~=Z|0&{$*=Ve2B-%zJeT0Tz7*zhl zXbE&t@x;;i1_Meov%l~qCs&y9#0+Wx)EBXYEFGgN_2d@-A0*=@qh%u*_y4-TFhh1` z&|O-}f#WT@m$xzne2BJ8Nz-$64Wvoi%0S-Kod+Ng<$SGkTH2jdCXdL#J0i_Yv~9?o z+>Xkl&gA6w6RcU8E986+vZqNXm>jV<VMppUCuHt62ok<9z%n<kkCHhD+9#R2v!TqT z`mM1ahP*17i+dwN<~|}|sW_*FlDY19W}HdpT=?M=9R?XP7yk)lE`U1XYAR*Q+&%r3 z%uNN<E_16$<{I1=O6yHCe*Jw6<n5>_Z*}-ZL_Le}vdi1oTTUf!cjVBJO?mqg#+ybV zo<fUwXhPojYK$I#e?QA1JByIFUE?g8Yv^4n)FIkX(9F<YJ&!e%x7!)W^41POAj<Og zt|LO;h&<v;yd%=Iq><V8JZQaO$Qym`oO##eapd8g?9q(8t!qKnGTt~4?#Z8JG%3!E zz$v_LA4_A&g-ROlK~a*%3?+^Iftz2f9&1r%l!ak~jr&qiLL3kO$zwd5O35+y;Enr= zO_mLBX|>SQdE=YzWl1>I#{EE93~QMlkWo`-?_!J{3gcxMr=)2#jE5T--$A7$#=RNi zixkG0RtrsG{4S?!sM~Mg`=Yr<C!`n4V!*h!4dbPZ@u)0|#y?VJ;L>Ql$TWWPq@?lt zMk&a!TrbWowrKnk!KB`5V!asVTnzQ`HHmSfkZ`#yW?L^(l6H?qYK}v~@8eK8-yo3C z;06J|wp>l3ejG}r6CG|5`twiw4FbC&{)hVn<VozTY`tHPH~e1x0PYpg`>qPF=}jDY z7&^uw?!ABnm`-H}=Hl7{ub$>AaR3Y@HhI#7iCe;JDy+i#7h<?7o?#V-L|VmX&V{`9 zG$%!%hgAq%G7I^&_}!LLxS8XyZg~;H#4TzFP2)c^!9c#KhlRY~>L>#Fm3HJ8tKteT z8}fclC^~-<ON(tAUd`a+HSoE>>cErN6AeelN!W2ZcD^|TPu}kUSXFFzh1bjl#4m1O z;>$eKo%XUe+J@H*<+2yq%D!YTOI){jyA(hCqJ^#OOnX_FS5<Zfx4WN*C~+8WFAE1p zm0ize->{YKYA*{<PnAvJvh!_ae+Jm10~}#hwwTL~v6bCoFN?K=Rd%M&FC;%Cvd`HI zVr8WYj`s_P)nXuM^^C=-DwOUQhnQ8=TEJ%&qKR*j^G*Eli#4j85;Mdq%yNEhh7$j2 zi0wv*nKc2LmbW$aXv`3~b={TxypGovVxW}SVR+4Q{E`(ghjXnefgG!Ngt*1ymtRz$ zXH8=@-Uv}k<Z@e7IW=CJnEAD#YP|O%_W8HR`-~dzwq!NlcQ7hz01@L|Y9H_8wkkA{ ztSS*>9tenE{LZwI663R%jTm=dF1yoKmexa7ySA~1*X#rCe({p6Y@MA=5mRgzmz`-V zOK+@pBc_;}aTsnZyWCzjVv0GrY*(wSjqefDtA_jkmFd+$&h1lc%`<ZRs+{7xZD#qk zGR61#F%9_+`OdAZ%dJU<eL4UO=|<-ce*vxy3f-8TkQrXH0yNh*`>@PP5_gTT%=;(w z8i$wij|I=vmZ=_gRX6Z1<+V2j<DAkA;x-a_R#;z1pMMxoHuLOO4%qwwW%rz}_1@$2 zW{T_A{tDrAk(+rP^)inxo#~A)J?z(aiW}Ek{=tO+0xho|I|w)%m$<|RTW5<OIEjOn z^|(rKjRWOi+7rd9>n!x!+tII6=(lT#ei7j$zW+_SD;t0^TJ53l2Rb{&o<a+m<$y#- z=7tDlj-nhR(@i0>5bq3HcFYz(F8eO5*TNgfKjz7sMxbHN-&4n8h%JKW`b674#xiIL z5Hno**E!hguIfsq=ezVh`Zzc4E=dxTa8e9dC6YsY65^6_h|bxqMqBzYTvYOm{i2eo zdb{2P=)_)%^HH$uRGfNewZ$pYZQ&p}M2SQoA2i&%>(q{px6$P$LvG_89jr8*#OW!h zkIG2{M!ACX;Ws8?wU`_l`kZUXfCHW-_{3FMkA-+*-^bx-$nLu7>}oT+Q7tjNs?MbH z2k92e$@Upk?x)o$;&rKNAhFt52J(97Pr<;dP3TsN!l7TKD7=F=nNk*f;<Z96==3z+ z>$_8qHFlgcC7Ose^hSnDkNiWP{70#9J0kc7qP;Oi&K&sI81Hn)bO$C&QI8jV-sv&= z0#avSWgpRVVhy(BpuO|MfgT`PGQP$le)|^dwm8tzMw_@`Yri<mNg7T#l%YQP#{!)j zPnHd`go@PXhl8E8W#~5Cj}Q^Ze_$F^zdzjz4vQ=Qs1NI<G(ooqRuZ{GgZbu}&|o+9 zGTS+MQmAvtl~T+XYLR}aF)q_eBa7+K4}>OGSl4Nhqf7s@F6t^stH+$}i}~pn;b9i{ z#!(O>SkLNat76_niJL;cNGrp9z3dmsq!y@^S&%05{XWrRoyDVS5Hplk-<TF}Yf_RJ zhbJIJelbVk@F}X9IP^g`#_T)reFFiKIIRAk#9=;a0f!pGVg7p-4!1OgLr*&nTN#Jn z(=0k<m^cJxFFZ+Ck_9qkcSDTsJhHo5>dvFOt0QF@ZOHF)j)qeY)`o&dt9wF5k}%UG zt8Bu=di4>bY?=tA9hHnKW(2bpf^U*$B}N6Z4FpF?1YfC@^tclRKo3Un&b1aj{8SI~ zCKRl1JatYtJFcxhU*8SEJ4=t@qBaa;f~_;ff2T16^|YGsnq?5HP+FZ|tUS|np*(r* z&<$zBeZX6eU=`lr{-2>1iGKu0j$oECf)PcfBvlnZ%MrYZ0+<N}X_X){%s?qV&0rX; zM**^tc~EX~I20SaEL)6~h*kG$mcSRuQYC4XG$$l}BN@M=LoEF0IFH0{j)C83iC?OL zpWDQbX}ox~MdM$g0&Upwt!K>Gb(|F<g`oBnI4+iDOVVl;jydSjFMJBe*GSp&bcIDr zc*<tcmJmc)w0NJm;sV2>Ed`OQ1{2)0Ve`sG*JPNmw0hzhIegNBZ9~@)_vyJ8g)+)u z)5vH=nl*V5RWxsdc$z7y|6|!OauUggWmFWT?IR0z7wnGAiA+0e7_g3X$Ac&6_KOFm z!hoe6HtZKW#~I~hzRu9+)$3{dLPK97<25fy&nT<<2Mm~&^eO2Kwkxk5kverMm5pjG zx}kZrP56wf4F~J=jLLBEXgF9C4hp{r)*_%t_Z&8kQq(HV^vLhji#xjB-+U8yV7vR! zTJ+c+O#Q8I3XMDJFUY9JjLHnJ%7IWCN@9!{KiH7XoZBSNJ=r4p35(}}ar%7g8n&!P zw@kFcEfdu-ID)-^$-{{b`#DD01mdkF;!5W$aj6tFIB6G3I}C4qvlNx>(L|-@Z;Hx| zKrK@g|JxFke}bPZDs`|fBr03s>Kmd`(MVMM$n4P5DhyFMkDQr|N+~Mi4(rgS($67L zsga^mt3>6#3Ko^BpHH$66kRj_#)%qE(inPLU3k@vtOAaT53aV<#xAOFPRaboEcSTv zpdi9F7BzLV!$#m#H34P8D}F{&GU^%b<~$*0oJ+K?ps9KdK#Kk^lZRvam+pn3jN1Pb z{Zm(3^gr^aqJIt1e<*G3c%X$tX_bxW{{@md^t4KY{;#2~o`DaM&{Q2)0b60Cf32jy z_L((RPkbfme-~A2$}$EyZN#Zhggn&i^NzxWDQCSs@G6S|Bd7tkjPne=omoVJB^Fgl zyV6b$O8N@0D>LA|7<T2Cdh9$zGvD=`i2==B6AIRxLUWhNvL$J>!ZfT)561GTK^B&; zq9;pCCM~sziB6CR&3%72Lv!~AxvEkLZiz#!_y<n$fg2<aDF8Ji4(0zRak%6)OC0v% z9z}CHVg`I6`jML?#X&R@hf*YXVAdJp@HE}Qm{DtpL#3WpZxe@dDGrB~I8+~&;xL7( zH6;$yIE6$_#{^Ir+FM*S(4zAos&7umV-MTt+>Ia+bUx!;gU-u|&gHm@&`#&sIM)?Q z6GZ2o05wDBeg7vqZ(m{2`8Kp4LFZ3a0vAc=@<w!?f)o)wt=ypV#e}v+XAw!~eUi?; zz1FnLJtXN|hnotUr1MG6({SqZXxjP0g^328w_Rz``E#ltZPs=8Ue3CwQ2=9-9;v=Z zoPd{M%(}S%MV)mrKLpdgHZ<{6{?ZK+N4vjNxYkh5XDK`{H1Q0=WBPuHO&&TDBtjnI zk_>rB0KKY8agU;shjMW%4t&8sCwX`upl0OZ?|Mwq3>Lj&$-@M+A0ZDPyarsPJnU;E z4?ZM&z%er9;cP<N@|cdYJV=kJo8>XBRq`<NfRqP;TLhtCqdQGM-9UVoPE&=Rao8UY z!gmtkAbh79vHS<S)8xr}0ZmPwWGqw-pNIXOM7sR>xZ&TBLO%%E8VjCfiQD^IlJyFC z7CeK`)Rr)!?7QqJXGCr82`})QiGbmDei;Glpe61jN5lWJLE&KX!uignpJ0`DjbSpb z)OO9VR-Th(SJC~uBb@Q!RCutE(~?EZdevAG1h+;N@7HBjIj4L)?!e{7xO3i?vq`Ou z2xqYs78w$kKLY~69npFhv+2zh*4k(sAhzz*+Ni(m?iALmgDhpYUWIEh-?K#dWfo76 z7H`aUwKih>k`4Tjjw<mxN`!dZB!nj)5ga>qYHjo!XK=v69;F3x^Xs=eW!aLnqn3p& zq)<kd=&Nv?PHvMSH?>M`9^2nQZi*Q3+rE*6#i^~Zxoo~%p^g3U=xBe-$ro&b!i5yd z$P%miS#*N#vv8OK{u!Z+_R(?pp+e&DIBJ>Ulr<}?W#wGFwlP+bZn7N*3T0%8-U^3* znmE`(89d}1qq}6;T^(_1sOpZ~q^RB1X4Ck<sk%_G?i8Vntw!0jS}bU!pi?L#OXz(q zB5jhckUmdfhGki?0LF3O*ODX)PzEHaCmfgm%Oc6GR5j|lZiLx!J#J^FP)1h@Wi*Uq zbT>+skaitcgXMw`Ye1>aj*9cYjZ|cRz+-5r$ZYzI;`@e5GXngGTe_jt5aLfX72D$} z*0|3j=P7`#djy~tK#+}*XB7>knSSsqIr4AW*7Ak$H27|>ScBgVNQio96qp}1PI3rW zNQba_faHi{fpcKp4YX`j;IPEmvbY)dC9I){DO)~Ee0!;d@4a{-@x@+5v6AN0y$xp+ z51_L#fOD+@Af8XU%CX$iRk2MDLFc3lBW2K-+<t`%2alL`z-6hzW$kBCaVhvx67wm@ z9z~Orh?L`Bwn#Z2@1v8lWdt5_g73M+qRBr|(V|Jh=hh7G9UYHW1|IDVJdz2IvgH;Y z$KVu2$72qse3<l*lYF?s;~<4|3|V?W$<jC}OAjBG!+#p3X!r@#?e(hL`<v|6DZ525 zJswgVkG~10lBQ3`Na3T9wRN?Bp`7(k_OU3}!@@W)&XD{JiEYIpiES0eLD(h|w*Ps_ zBGRXLAAQni8(q%@mff44^%q;kk|-lF|4{H2V|SoCnvS+RP!qX3&|A0>`80P22GE8I z?GAjgGh%n38$~7Kf{A|dVJ4HL`n2f@P&8ulxAjn<*m(=~;S3aX>WJ=K<jac6xj<Lm z5M5=NC~ve(3gKolB$9>Fy_Ch36F)gL-Z_bGvy|W2Fhfkr-#TFPw@zUFEaRT_7g>yX zg~)5z%^EecZrIacW}R}!(dKXEU}j{BAD;ee{?^aCxvS_TxyQ$}R3u?Hh_@c%mKieA zguivUtjcC+jfN@c7fy5BroW~98NykNJs@S#^0(NZdC~01lkbo8wv<ucF`DuGOa9D@ zvaH>oF}7x=UTE>9jp=hi<Be3BX7eWv_)^4(KVL2pCx6TIXKqnwW9~;c?j0p6l18NN zaQ{_r3x@|$&6JH@3Wuwr<8X$711`)a9C&Ny+vlx$jLS!&<M7BRCY{7VZq3}Na6mGu z;d`pB86NV=FXWK7+WeV->h7(k{Fx-#-Cy!&j%G-%Dt~5;+?sj6mqnz1pd%1TpH~y% z&oGWo1IHwZBl|OD&sijCO;w}%Gjq(2oAqbL8KtB@a}?n>)1MJH95S4lcuKhQ<h=;j zNjWp5AIN`+mrF9kQ9yozTi=`sHJ%VITn=IIiM>6oaUQWWI3)5JB@KO`2BF^63~j6_ z&|+fKyWV~FleQ>&T&;hpr-|lAarVQ9*!Z;NLtNFQ@fto-%8~SErjj2*`3YV%gtM(7 z*c?ylUQGC03R4BNA#9LW-;YesJz}Wpmp4ajyc$62J|@^VQ|#gV4QKTQO`D)MWf9Zm z!bWuhOpzCR!sBVLx4?g)&fC*PsW1Axe!tw8o*o0b^$<(1inKk6WP2uj+=T79#z5w@ z=`ON8-yZ&}wx_kMXk#M`O#f!=i{<}X2`(U<o7@JUej>c)cF^B19`9kv&jyS5ke_-b zKeeT&l%J+$X9>&ByhknBxg5QaiQse++D1GLco=~v%2fbKqj=En>ujR4Mz9_%Ki@(< zOg56;t-yVj^Fm#VZhNKN6r+UfHXiN^x^45MC9x|2vv<p1Pl^rp&lXQ!%iW&J#kx}# zGo^>f3`;I|2QM|T%$aC7rr0L>bG8-e3JkLaxrX}0x$TS~*I1x$tWQ7W;A<26LjU7j z4_m;)3X09e<l2j4P&78|3>C|eSRqEc6cNz|8;0gS#b3&Ukz9TK5sRy|(FgLv^+~|! zlPMN`0ezFq1J0uR1S2RGFSilf`NaTWO*6}gik(Bo6kZg<(YOx_7*Y;3;7L|4%ym@4 zHoe)h^X7N$aAp$bY_goQp8Q;DLB^l_J?#!8rY@38;xUPB$tAtTCs(Q|JOOyH`}oYJ zh$%cox{tU8@P2d%M-ixp`c&Nl^QToXuXu}dGbTO;T}8V@)7>=19S6)Q-iGs0s_+>Q zKIK6!V-s`O+<)}z2MzyFKOUM_x9|_+b8OM`M~rpZN6FU2XphtCrh~9b3DlVqNu^7Q zMt*_Ga%_*BEbk-V$P9RFe%!K#EATpM1maFk7KsSD3{W^MMl}<M1axBv^|M<Ws1=FB zJq8Y!OB~oqxk}-X)D#XsaxR8}gItdlcC+XZYr|os!l6@i9Ddp@>97WezfEUt!($d5 zmf>|&I!v?UAXiu^3Wo<!&7{K&g~Ov;qS9fyfy2cT2ljI>Q#d40W0($6^G3cJ$}=Kd zI28&tOT6?)1v>zBVNc$l#tCrJdF;>`aRvQci&h8ez`C*EaFkp8s@mKT&%-1$n?I4X zdWdSlCrB%YVJ4U0-;Y=d_BMh=ox6P{rusO6n0OZN^doXzBQ}0^GF;UjNzmcK8+i<e zPN*?lVT|FG24g5W#~Q=wwlR!XW9Z&!41E9;CwIv)Y(b(l<z1$gQ`)77TWYcV-vo&| zf_sKAt>p+1sY0#-kKjHU!ANAJh6~5@2s+zFFbmC*(>EUw$%O!{V3ug5MlhCoWG-N1 z<dd0}z3}Am+4YExk)L7>o3R$7srnhotd<R!cUbsvW)$K|{T%^FZH!0_X{bj^C8_+I z8)Zw-U8Yzbvdq8(XrIhL24ag9WCZ%srXCxCw8k4{mtSMwC>us-XB?Irl9WnPVWyH` zW291Ul=V13;>ddThGMB_Jyfl!Y?9A8MMG|k2z`&@&W)dfJ8vWZI9y1X)>&dsoszEu zkUOH*Fz`fj$Hm;a<!np7)}e^Sor~|Wac3DpBDmvgWpJmKxRc3nmtIQAs%iCNHA2~( zxq%N70+g~HY`7w$-t+JxvSDPV7unNQi<W}~B4dXX*bb->N$(}i(7PnnPVfDYO?_Pb zfNWS?PRIoN=OHZvWPijp7+4J0;aM_=tnR$JCU+tOXcBhNF2jS*vZ%C_x-ez9_1!iq z-AfQfrQSZ#(`iu2c@R|U1-PauZr}c)<n}pS&!k?Z2;d;7k$Vvf5K*uGij2zUspr`) zskaY#<tFtw@##U@n`=s1L&zyn+q%!7u0F1kskeqWm4O8&k}8n@#MG<*E7ZFTO<L5O z%QDvTOpAJBs0*TA;10v5y;*X9bg9HYUg9qk^2D>crLF#eU`N+hTRATSd9jt%1GG{_ zU-t)+zMHsaQ{njsW$lz=qT09$OeaiOsqe7e=o8tvU_+&6dGfQ-TGgHSPq=U-&$3Rx zsaZA??`f7zK-gW%&l0%xSt2IUqJWREF)Yzkh=t)fOy1bg5~Ttt`j<$u{E3_-AXt!A zMxOp2krc8F(Gh^6TJASF6C^^8XLq&mD5WeXQ;rAUX_Mo(38Lf}X?_2UG32<6<oG6r zoAP>CY~|TrPUFr7h~%~6ij2ce$}10S@-{iJWYjR_wUV^!ethAq$!+HYNV-tl&U9E^ zA9vU`+bi^W<&XnIUMv2JygrB~EqP61dClr#QRx-x!lY8yJ8V>1L=Z(K%=Uo}gG%X# zK&3%|YfmtPS+~#MAf+*d>nZ9Tn}geXWok_VK#F<`qw7kh-Z>vj>d^=8SuE=HFMQ&* zMG#dv)f?~Fzc|27y0=i#BwYbdb&yUb%<xnP>E=GroRS=k<}9)$GuaY5TV%V9nm5T- zd7F)FnFNU-TdT03mVDY)B3mrrnj24sNgQ4z$yQGrSyo0;g&2)fr-q671|aDGu*z?= z3M^uh{j^1rj6Qd73LNJb-HZ>fHAyuMSshB?W)Tt@6=cp&W4nU<BF=M|8>;TA<teNm zT`#d7MipRyqIy|w&KQw~yqxt;nWcB&bXAH0I}Fv6$l<j7Lm+b%U3wcXq%#&-;<;L- zdg}0=rr>69Q>q?{x@U<8&#<`iIbMJ(@CGA-hCL2L(d^kQ$@2utz*nSGF`_F%u|^bQ z9#xGxieXo<Ai&jaZWA;~mP*+UpVH<~R^f&ZR<2$-!sF1ERTMl47pC(F*Z-_WcskzG z2&V%gM@ZqGEV1HrYlOd|KFggaZx-lan3xeoP8wp(COO1+QHUqaVW~@};u~<rFlq13 zrb|^`!xYXHah@V);7VDlB<(OdkKlqs;W*mF(Y7bW_>DC1JI%xoT=0pf@+>CQVc^l3 zu!&PTocg$Cnee<UmGT+OKa8B=*Tc?<cS;RT$k1*6UFfUoA^ZoM%J^@VxacRv2}=AX zPGsS)-A(G!$>PMV09hK~$SpPvFq$Ar1Hinr{KL=yGr*=QI$Nh^`aW^<37Y9_UVaBv z<xGDVPmSX}MI(vN&SJ^u?I>f;^uuIY=KO5U^s+`7P4h3KnO+7>gptXcL^AdnGaWYN zu$t)!+CFq+=%?4$@=ULuOqM6=1nG{3(JEnr6`{>vUs7Th{)i9UujCFm2kEKp)Ik$* zvhAFLfnz#|dPHu<VN*`U+x3YqWI>(4%9=iE_bG16h&N8{v<;<L$93#Wr|@bgiRl;e zi{nNdT|D<A$$<Rgcn#P@GOz}J5gzmU5ZOuyuc8zgzc{U<B?w!Io#yGnK3`f6&z)<S zaJF!b8$dDqL&-ck9Bu8QcX+^>1GMf$@GZ(o!4EjwL!K0rxGZN}@;g|#^ta=(RN-=D zbyQs5|3KnWDFq3m<W23N3oUGRkQheg`o$6(1n}Y!aG%UUME`j&(<v-J@K4Ye!ZbLF zc2Ve^WA4c!@q87q8;n>XeMT_BFTQ&#B4l^I4A~|5#V$_saE4N<hsmJaZ6905xq|fi zVhTov20K%VOJXo`M`*Sy)E1Wz=-*A;;@76A@n2ffjEvnZyJ;+ArhL(P(}Rc;!?6YL z_2bP1^f-uYMD+gawfIs%KCzi;QK|5{?%jrbDJB`|wo&rs3REK*q3E~x>3)kV=iohP z93|xb?4>*xQHQcmWTwT<3XfKHJkr0iWOehZsCYd8zQp5Q_^?*W!!(7*vv?mJkJBRX zkdeJFJr+IYp`t~Pc!kH6(edbL;BkS02PZRpHQ%DgX-(o0;_MDH<3mRG#wk30BVX0z z%SwgE>UW~jL*F3j@iMAeb2nSz5u)ZWTcCy9jSq(X*@t-(E~GP0S>nSVl)bqF6-n3J z3W&iw>D>Igy+yNY?YPcWxW+cZ)%!JM=<6bh>u>Nk$r-@0WRjvD^DL?z0wg;3vLvPk zCJPwdvlS*Ek&DYzvu)gPr_+s27g(Jd=}MW1Nf<83)CS$Ejhn+4Gl5REar2%mh6$NW z6VkwP6=ONOokg$C3QKjmkFngkUXtb@Ij_7UO7~Dv`16hXEHpnLpiT2#C3hw-&lLR( zG<!F_Guc5FLF2$OiLj(?5jsf=g3~uUlZo)qo5RcvkL1Q19z$P>*zo8p4xeM`Pfy-f z=zi$W9##9H`KBjjiBZK+jxg^oy2a)-f|7=yRF`Y$%xmwG7OWz#afhz+R=o;%xbRK9 z$rAm(Q-WBD_aumi0ErO9B)3J_Vrtu*G!;q^=e^l*(o7{m%r2DFCSO(xVjmL3m+rF! zaSR~Q1#!oPED;ebeyXj7$z>KMwga5p={M_Sr@uogB#Y^@p2Xsk9E-&V2^f{dV`RV8 z&9L}lSwym!1rh8uS=$4wonx~0yvD3ejAU(p5tC$NZ54<Q#`UHx>C)Hi#?e#o31Dm> zJ^7pQ=ohc|Cby3EwMt0N9987kkUU)Vp-mp1LfI1fc7UU586LxhE<9(6E5B8&r(TKm ztME61_1)W81pgQ?i}iiMT_d>jz#9!&zn)k>;XTQPyQxdoLCpFUITq{vfJA5go?eYv z|9oo;lK~bcHr8{e->;RO@|7n%yG_>by4Pa;*Pujn*863@&9T0(EYdXVyJ(BRVB<*o zw10zx#2{?^S5GI-tk`IACfF7r$++rKB`qM&G;MpxDT|rw#jp6#HSze95V|G-e-cC2 zB+`!Lea?{A@@%uTMT!||9CmHOq0ZsFjpz<F{GCj@j|`U@H(>B-etm{(@q-C3W5v0R z{yWeagws{+$<`Je@9oVNo7eq8K70zL)n9uO_cr8p!d^~zmP-%1w0fYHEnbSF4OMJu zdlntXE=iW=NWx`O7p%g<sXR-o;4*W#j28>k{6m2=^|tmkOxvJ4OKiA+guNcZK7krq zg@!Z-6txy#L46!@S$)v$!<qvdh?;{z#R_yEgYp0x%Ai*jXfi<I!c?$9>$^MyEmp-^ zEe>H=0CK0jc{la;iGrQauv&0Wt7O=_3f7ikD+pHcuTiM?q=M0|Pq=U+!EWD8{moXe zy$qvpg*NgY>TjZg6*6o+xB0|qzy>SW^8}mKTPu5t06i3d_jzV%S`F9mD8Q}US}Bd} znfs`xUt3wD&S2OA>ZzFPeW75Na8JovDFZ%KfCR4OfQr$E&Y=chQLuX2{g~BXdx8NW z1^AW$iCPT<W+(t%LmVz#MJS{`Nn;wTU~hA!9@<a_3{Ze4xl%Hr;A7a?3O1Wz6vEKP zGpwb8O=MUPs&^y9esEf}7|fmZ(WWwBw*vIwN*WPx2E$e>n44j=NYsYTBU(JAV71u& z2p3Y+LtDl5?o+UR3_D7&MCRlq1zS(BSxK5}J~f!8055T+N*Y-nSGqvKav4@ZuvH9e zr(m}*Y%9SwGVFgXtx=C)*djt?E5kllu!|YCoa-?zMGDrDVPs9T3WmL)V87EQ$gC+^ zIRo+(;420Mv_5$>vfC8kV*(WJW4<tKw1WMcE8VCqV!&kzu#_w15egd_)<wYrTq#wn zVL*%mOyEjM)Kfw}VewrHixyWiERh-<$*}DT){SB1M2i5!-cqnQhAkr45{5mhVAWWY z;h+H1mtjE#+rzLVg4HqXdIej<uw4X8eUR`Rq+m}o3@Xl{&1Kj*3O0vf#ROZ%uvQ8- znP9U9YQ+qwiLnMgj4SmaqEs-fOu>3GtT(|DA0kB7Dp-4N@OEuH1D;oa->_s0&zh<& zXTSpraF_svYYDxh44bB4#SEkKN?IPP((4p#1;e~V4(B4m;vxlG#IRa|^<Y>B1-qSK zvu0>M1{`--L(XDAUoDRT6$)@Aw?^S1Z5P9~D%e>JD<_ycL|Cj;uoetkK(K)fTcTj! zV{sQQOeWav44a`~I~Z0^uxA)HR>9t8*gk@7Wmta&dyHXa#FsjTB`Vmx4C_txa+Z=# zbtu>k467j60)|zF*}9X(y^3J7=4y)=uu}oLbEUb|S?|R(@OKofHCIZ|Ml#?j1*oNE zV&O{aDV<^WDcC-S-ALxo$FNBXww_?KyxKknq$$8lTuD%aWemGO!EzZkmtYkPYo}nh zFl;En${F^*lh%+&Fl;FaT@AxNSFnp2HiPO3h7~DTM~1B@SRKP&P_W;fH1Gt1)iP|M zf*oR5F~OWVQSxR5quYnWvwT`TR~o4RuQ6b}7SA<O6rg|s>6)7XT@-*WCB_PnhBcI7 zC;zmDJf2~tMEmg!JEC9%8Ai^v=40441xsSsazb5W*c%GwWLP{2$P|V>tY88?;XpLO z)-voK1>422r35QxShj-EbvWTdy3Rz~$gnFFj2x$M;Znk77sJj{upEXBBv>iKS|}Jv zT)40=!O9u-eZ55&atvXFsK0#-+o52|4BJJp3WmL{V3di1un)C)m|>48SPe!NE_4!1 zFzj9hqq!R{tf4k58Fqt$t!3CVRIkqx5|gVGj6N3{E?kEHY6}>4u7c4N4HxbrSSiC| z6>N&ENBz0k)c=UndWO?Jlwnh;UjKFEs_s@Wa+i=XMKJH}gv)9LqhJ@t4hm>X3kdd< zf{{i>mI2i(X4riSMmjBAc$n%PW!NMIqe&Gm97wPQ>^EJbV9OXbgJ9{G5T55L80lV_ zU#EGO5-x2NY%0TU#DBHE4EyPXHTHCdjVIVthJB`Bq(fyslJ*S4)+v~mVI!%YVAyjC zMpjI2b85av377c_Moxs>Ak=ag_D=<)#e&?j(%xj)Fa=xAu=O<dGKTe3usnuQa6t1u zM*X!nVL7*l3n`|frSkh@$Bl94jFq8Et#l93@hj{7Kp8pGD){|2>wU5eD`;i>{%!d_ zWjpM~vzsPQDi|E5xcp>nh)kk~UAuAzRm>Udbp-n^9JG%f9Jm;<O-U<y2FV;Ht;+G_ z4P|+W-;SbX@A<v8o=q{S|DtN^shI8ZU+f2E%KHFixP?x|>&~TrY5Cf6B@dZVy%y(O zgR!)-zJ3d~)K<QI5+^*a=Z-kPw+9Y)Xq3>4yWz&wW@(~lhF8mhq=~nHb?#O#naR_E zuo3m)gl3%*_3Gu8Nc5$22XiSs>-9gdV~i!PeKoxe<CnEd(#mP|i5*y4OqQfo(0Vg^ zlh*1y8BJ1q#0eT+;68m}02tyrdRz;(a0MF2ogDf?TEC*}5Dpooxi(d_kk?V+dWLYI zRi&7}hhjy1@AH*7b$7Ks(~0|$?sbPdX<IJwa&R};3R{+RKa$RM%C%%Hu#FJWJJ{s` zb*zvDG64$G>Pph;(5b_x??q^?_X#5|6g+^7fsB0|^Y9)18WiPZcRFG-aH)Pke+YKP zaS8%-do7Xx!8o}qw<UbHOMiqL*ehP#&ErG2rc_z`KQE`Ij`5~!MW8APl+iQXS$IS~ zmRG+X`;N%cZ>8tBs#~Ol3-DC}M0`n<9b<4SVhsIXbIl!#D-wMLgS}Zk;r|Jr^1_vw zJ&>X>LXQpK>qJ|LqRhqNE_%){&bhQ;$jO!^o;>n8^lX=Yo%8p>WAW?__8y}JejVx6 zw$gvbgS=wf2D&HJAS|-rQ+A10I<<7r6hjy<-Zw_<E3HP5g#u7?I_6MdpT4soGiKV- z#W92Pii5{{?HGW=kAd^GC1}$KTD|)e2lOPjWTP2IqliJdF&cdV+1+p%jm1T$uPLF9 zE`ppMvjI-Oqo}d~bK-)wh-;#2H*S#3qwE#&^osxD&?oMLoTgELAlz@t8oxK(X)69p z7{-B`X&kj4?g|ZewxTkj;Rz+flTq0L*}Yl+wBQ;#!{c7MxWzS$|JY<)arQ{ne@Q$; z4=uvF6Y@C-0@dra|AtFw=>jUYv>n)P8El;;?&Q1?CvLyoMxrJMsl`jm;b%h0LkrLp z`gfE(L@Vyv*@<3rSEpraC<fmvNOXiASq@NWzAN-n4LS<6(}%fA7A(8e;UJyGQQU2l zODIhi%?x9~C>fS0f5po`3G`>u1n}+0j<R<{=1uvFx9c?$e5keKBq{nTmfd0LAX=N; z9H+yRPfXG8cj122DPz1LME~{SNx8+p<<_<LJoF)8o^=aueEK49I61#R{(R`1GTK}9 zAH3I|fGpv>*b@j=&T_5C8%M9p^{2~7O*}#)^IW@adU%XaoL@+i5wEtjUmlr1#`|Gk zGz65q)&CIVo;-#)AQFf=#qS#9)psNRVJX$IpLW?Tu0EsE_8HxmkIq3On%PLAY;>9V z+x_82JXW{*Fb7!bepkvN-P7ySEN$PI4DWSxI4Vng<f=g*Zr~6PHJ5iI<-m@1_3~u- zK!qex_Hi}9E&}mg{bR91T`F$)4MIa1_BxS(v^xKXPPozGeGDG%7Y45t(@cBwXQ<}7 z+^va_-pM!*^bn>Mq#u{x27LbP=`F;ZH-#zf!8XtX__SU)Tzv+lAQ9W$-Ylt5#nFeE z9Ojh+i4@O|4R%8OGM<${b(@s1SsQiZO`%h#XI9ICz@xL7XUsspM)gSpcqq`t3ZZ)G z3{P7U`&kl7v)ItEO9wuAk@rFTyA=Q4z`ytLZzulUi+_jk?+E@mVp_Obx?E0It5}!I z6~_|F@>!c(qh%w^>j%aoNo-_l%R|p#3g~5<jyM-?UWGZ-vMhJt)3mS9$5#;lbg-Rx z=Pl@gGGuCatJ{jzCHw>OLt^q#9;TEda9YXmBz&*dL8KUhztydBPYelOYL8H>_;jjm z4)nyV(07Xua5%GyzKfDO-;J5^FSs}u^-#=}L{K#yx+K0=X{JwnoDV)C8v){>*Hy>r zgXT^ii$jD+yhjbBE8^PP{LcdIb5FzuJ79L_<|MTZCKb{2CQ$B)mVq<n!@xkie7HK$ z76tXCluBLQnjfFQWA1v=3l5Aqflf+cT;x1D0v&;hM{h^nqJDf;9$xC{u3peV_}wG- zc+A}Px$9R@-9W2r>6N~KC*~+FKVVpVU?iI8+*nQ)b7}~Eyo7GwO_+{#3uer8hj_FV z^fJ!@nlp6v9nOT*OVuty41Gb{2G29Z%Tw?<m}qP~?ZBg7TqN7B+DHHpp;PXOfdOys z33Kp-p)q*!<t56V9*_Xc(H_trphHsIGEy4E7S9DklYInEMfZs`ap=tyaO<i8*!;Ms zzh2f02t(=iW(o$*8k6#wD5{0v&<)I``eqCx3F6ahQ)pNsI^NuC7~P$ah#HzBa5r&b z0Wk#cXdgx6R&VG<zd+F|P#J&Y0qq^^?h{j};ZbzbjhgRO3T8}gS=Mr7vPL2s8kJam zE>To36Q}==WLF=S*lRO^TA~3$pk?k3Ixp4(T_uG^CFrAEp<(g4MJxfHyeg0vh$Vyh zsVSeKQ`#6#;-+adI5J!?_;_yJ#k1NMU5=s{n!Boq>Ku0l$Cy(-p7{~P!Ms<H;sHGA zf@+dbDJ#Kq_0+@#{o4iOw9=C!p*^+qM404Zxl-IolR2-UF01?G9=|3yQPm7&nq4TZ zay4g>IL+A+>`DC@pS1QA(D_8driCZ}O+1bfURk{AMf{@SaA~l5j1S7S5B~L_zy3_E zk~Hg>AIU*W!t|T@@`|^{csF3?8D{~BA=2@a&IKI>+(=fyyk)wt*xJI{JPi<9y@~FA zQ4q3koz7E333yn|!Yb4BOCdHjF@LU;CBZ4TLoW%&8C53B1q}2bjPX2|KH96#az>wl zF4+Q1k$B++2+D)Y(WM`5Q!J=&b4mCPnM0gofz3JjRTFBTG;6l_=X>9?<#9se_rWag z3y(4z(|Gaul#%UauPMQoE$;h?=;*Sqxr`MTwTSk@L6_)+#z;`$B?WNS5!cR-bEDG4 zEh)wJuc=t&zgsKI(<RzxmjHdRrqP#nk|gR8O&I;Xdg}V24A;b}FOj<ufk5t{u^1<> z57X(vSRc|eF|MT5NIXSbA5yjTRLu0`r9%aLa6Ug1*<8P*9K!Mt7jzHH%9<WiklnIq z<lfO<F~<Qxf<?#PY4Ch0bOl*4(%@hTXPEC->5Jv1SQT=f+53cwKisMOV_F0`ec?{~ z<P%(=Tcg@4@<E;^BBo-d4y0k>qc_I_1GV)_X`Ov<5jisOR02IU!YW%#wcgOpCzQoN zY&;7-CCXubxU0Jv?*;1>c)@s?JJ00^v;k&G+ZZ!A{!wmJ*Ep}k2`y#11KO04Skcx` z#k8!(_34H$N`EB%a0Dtl<(MBPaj3qd;O-c66|p;WjJU5zx<ptI1dX(Zg6u{FoC?R6 z2}o;{aF9NorSFFziU~Mliy>ioa16dndt>{TeV6w1t%UbE^~0%`$O$O%!F^F!l;sy^ zkr~5f3klhtv{I<Gct2$^z?dX~!VaId@7nQRvTWFxCViSH+Wo-<%rBmOK?I*nM$^%H zhbY9y#TB<%mGQTcrs{*pNak<%<cILrSox4YUQ|yi?c$RlMQJWuS2rwaYjMXT&_|>S zorU^RDySndXF+eA35BSft}Q=CYh^l0F-9C&L>{8Mx;rYi&t%knqTSWshO6D?ub(gb zmWlxTR-&WPa&#4x&-oiN2TrR26-37q=Ez;TyRZsh^k&3pEcw7IGqWJmS#%Vmm>wf; z`Lp3TUWNPm7st^havapTPo!NX$02{6ZyU!5qvh!1_<*xNoCSRgDa$wI&{9~Cc&K|a zmr3Fsa`a^CZvHAF?p4Oh{#x?%KGm;<g7)M+1xUDGJ(5&2#g~j6O|(u!a{utoKTYf` z0NJgXjYS5>2BaLkLx-{{{_fbYHgh}_etOC9bo_FNe&^v`4c>`fc+y9whi0WCNybb4 zT~DNy%F<IX5<kdD#(44v;}Q3H%SC@x3Vx*=%B^eb$?t(jb)$%F^4aH~z9ZY;VCFg2 z{gs*bBeace=FxRWI5N8yj<VjKOhR3wDVHu$G^bnyLe~7tf<nNIOYkEmhJj~eMb-lk ziQ!IVQWp*=_vAkbT5(>HRz|dX1i9|4=5nqlVFHh4Ej-R22^fP?UZ1wB*LW~#<#%L! zNX*-c-b)~OXdk&bMBZb8WGl_y8%W3&8`pyd2sSv;e*!L~Y9&tSQdFZ0)a`NX2N-H1 z{;utppj%QCDThSuF>{JsWn8kr7enjLg+@d%Jv}rYlI6);h;f<rFo)S2ygO5PW!u%$ zNV7u3CSm^WgAph6=#}oWliC$*?Gs<dGCDv!P7DU()jjng#@AH5fwQv2mxZ*1CEbn{ zE>=)yq6`!o<86$=E5|@HD<v#?|AjH+G&6>g5+VB-uH9=mB2A2;voVG+#xQR&k72kP zgI{#E#(+2}#&A8#U<`~mrgI{mlW9`PwYZ9{X0onEo!QQm?bVl%xr2{~Q76NGY@k>R z?&xu$g(UoA*AjpGi|Kz-P$&tjgEZXu#TKwp9B5iAN%p8~>1z#O)UT2BmO!+f+usp9 z7hWP(hNp>q_?_#K_2Do)1f@|LOl+DzHC_tn9Mq4CQBNW(tQJx|vLNlKzSoE7sJ_RS zO{V^FnxJsku__I8$QI70Xp@@FAiE%1dRO@MclN6@eMGvJ_iHqVLaKAWc=L5IFN55E zeed)boQ|Q!eLmsr1__2>CLnBU$z{vIAy>9|mXM0}t(HDcLs&iemx1~b1{6tS9GIeO z4(6waCZ&h_aWraPU3ivLd|yq6VW4(Bd9Q;=jEGqHy!5;{l2||j5I<<V*DtCnq`bM1 zP}zx(>q(#a4w`7Ofr-^q{o>|FkVEF7QJJUJ*<<j~CuKq{4K(MUJz$dS{w{Q+251DH zsn>Rmr4H)8W&Kk9njQ;4Lx=o2S)I<5WgImpxeCMdGQgwKL-TnaJxrH`nCc#<C`@&K zFCH^ReG5iLu_S7v`(>%d0m~00K#WTw(Q0@(owN^d&Y;u5SFd=HuEByc>&!hF4t6&} zh{ku5+>aLcjPSmoBjq9nZR*>Mb%&|sEq^bHy;=IsU$Hm$QPhJBs`T^>d*dX`NDOmv z{Y<x}F&jvj-EuZCYjip1yD?14NVCNA$tC@E>l2m-{o3t+AU28Z7w0NNcc;3-t5V^2 z;XW^j7ih#{N8xEqh-@*G-ohTj5w$C6c0v2gjxiB$&f<Be)n;cvj%s@yVIlPDwe~tJ zgifQ*vA`wS+T00n^Mdu_;#<GvPRO(+8&x`Bk1P}m#Ry+_kE4OGL@DzhSthD5SpI^% zPnB`i55n<HfR0Uqmk|~NFEKO*zQ2`#3D!nQChp7m7q9wYZM+=MH#Kw7`s1S!L83Un z81btV0<4!jd5hp1Wkc)6i@rBwXmEX9dMx@&l9P&q6|uo~+2Xe_$V-tkL{7JR7Wq&w zcokXnEREXE7V(<l+IkkH04QyN^BdZ<JbsG>N&twEA}`(UeS1+*y!(p{v-=TEu$fY~ z@*09?hG)37p?yZ1yHu?oXM5C}=u>?<_HOX^etg`DKIity12uFjQ*T<jyBlhXBn*lq z8aBXz<%lQ$SD*z>wkjCntiFlJl5#BEsnS{+rqL^Mbf&kM9)m?=0x#0MxpggqXL{C+ zOm62{2QOjMH?Fp&y!*NEcrPqmJVR@#Ubxdz*$^5B>GSi@m+p`sUh@Xxr^oS9GE4mD zO^%5JjjM^i`d-Zk;vh8o84L=Mzj*d}+El!n-okR#5D)$5r=*}kTMolj@y<UCE?f<L zFD3|hm+13pbmB@p+nL;?c)hOb4YC5*9P3BRO*lNQ8PWadMSJ3r3~!cbkF;c(^`y$r z()u*)b+qiYYB#mBm+pkp5(wFyqPvCc#f_0oKs5?IliwT;@2C5uz#aY9s)x~zv0=#T zH9x*%t3L>tp#WgAsQ8#7CC)*;+P7<iYke7@+k?oTprqFSTb$Q?4^Mvaj;!DpubB@o z;6YYILlJdJlla9Q+W;p844Zxz?nZaikMRaGUMBib07%XNT#1MKfxBSLk~D$Su)PR( zwT(V3p}WIzGNyHmsr^Q<%?l3A7HjHR*s8BEL2QyZg!GIAX)A!aaf0)^`)D!gGCKxB z@D07_5{$S8Xe2Z?Y-40Al777Y(a+>h?YW;Zf*{L5N%qArZX7C%m$gZNKnMqTlEC7} zO~|O{4G3b%$zFJgxsL5@@6PJza&&~ka{4bmMd3Cm4AtC4_cT(%_y55(gA^wkewm7A zM6qwHRx10}+GfI3u;NAfMnn@<qJz<y5vVW>s<cm(KR^x}lyOGASl`R?+5*@6Me7$O zmbF*~BxcfN%cxKJEIV7ywq6u@!fdOpzAa14zXKS;YjdLL1$NSz83zWZj!}HxTGSeC z>U+&Lzd$gCq%^*<!!h!NL?+Ir?0APMMFJq#4>gv+(<Ly9QNsAianEoeaF1_7(fo^u z_c49k#-z1&`4g9dPN9iM^<0{~a-Ox+Q=Q>{w7uvPr_W~bre(a$6WO)a?|lfD_Zn=L z^~l{kNUDW`Zv83f7W^{YuksUoGw?lb0Ln116V9l)WQ9&Hg_4!EfvG+tT|cR<>OS6^ zU6Lvn{v-FpkbwhOSOnXMhvyv&SFI!z%~e}Wpih>Fdm7$p85+nv5k}A)Ze)nZF*qF^ zcA-t%K)e`(y4WwMZetuRy*A}D`o@H}F;CXlF;77HD8anvC6LKrjy_iZ!^S?=5dm2Y z3k;t|u?*2tkX*qf&p8W;7r<-IAYO?FV4Cp#u2}5U8j+@d&pj5F+X(lk#voY)N~?*$ zx5q#<>ayyW-=$=w)dNlW^>9X-+(f+}1r3lm(IQON0|<;QrqVLh)dL8a5Xm8wsk#-q z-xjw_`GMn>Bu{joX0k1R1AgKEI5?Pch(Z;J7bepFF*M?Qc%_h%{9WWNz%c9g@(LfG zO&@wQ$!RhJd;cx<QSpc$Zx3`Zb!RIi1XOoLxbBRXiFA_Wv8n%}A0N?wp!X6S@RG<Z zNiW<AD3Ism(D7x;Xu-ft@p*s*++E!<TU#`M0%%9iHC1K@sBdq|XXO5fhwqeXUVgu- z69p%A_XDQ1HPv{I*?5*#!;L>3wed@2<Hj;im#sS&8&`-niFy~a^=!>OkWjxOYU_LN zVATI^>l<fE!gPlrYwy=e8UG(Hpy;CcYx_CTNOhC!5AIjIPaAt7W<bn$#tc9-^<(G* za(0S{ZT@UTmJv|S)XJO)i@yn%1ddG)vHVA>fLxu~7Z_&t&LCk!YNU;L08LaK2M4sW zFR`yM6B!Wz(H<Bb&ZKNEy9|JREh%J%;1cAqM<xWb4_xxTlDZ<;0ZR*tBtyDpQh;0R zh3O$t?MVuae8?Cb;V6W^4b9Y0iJ@<8DKHm1kn@Tk)9DW1c*x8SoJ~T*S~&sVGJ&+S zL`SR0(F4>J@!sTr#00x%ij<=~eXF}@8>wQzUXgCeqe{RgderUMuTq22c0{9K%mD)! zRlRLAfKgS-OA?5FdqbxnndXJs77ku^BCI4feFrBp0Mf0;gKd4AX;>R+GshtuZtn7Y zgiG+Qk1$WWjKb0%YG7rTQt`;`ChL9*!=zE5=L#v~wCf6?O;Py^=@g}Ib;WFFFkU<Q zz$o}`LqlZU%4e{QD+8`4E+U0xw}!D~MS_R5dSb>cH%rHbyw2^@W3YMno}*H(G~xKV z4Zn!*bZt+ov0HwD5rYh|=;l1lnlII<<3@a&y)}}HaDEbDj8>`#Pu@*<#l4I+dx?y~ z@S?dT`k?j?VL^xTG`Y-`I9WlX^#oGlM`;ZInre-~lNV$5@ZYepVve#bfBAphLrQUe zc(Ui&;z{X^E(@{N!`T1x%PjzK;}^JCm~Qc+jOh#$=*g!GjkU72F!W;jZV(5~5yuC% zl13e6X5xABp2zQnC)b`m-W#}M1O36mswnUy<vvYZc(M-~2#ni6fAIcg`96(Fm23?p zB4EX&DzCLj^*Gx1Yja;gY_A1~%LcmY2SP%ILp%kC@q-ryp8QYon2r0AxOUYRRZ8xA zv)!L7p`sF68Pb>9Flfg+>d+*R#Ms=~5UEH}%wQYfR-zd3sYEL<&Wk81lKZqLj)0x} z{%Nr@u!$*f?n#rCjVZAIXM+McPh!TpMQo=kYZ=vD(LZ=oW7qR}Syi;e0HY#DSv_4z z0_`ikUL<$U0_f>p3Q<p9yeW6VKbuDO0ux!!qDqSWrMaZ%)YB)<+9+iQ6ET=9X24eY zwHzWxKMbCki36;tqa0Q9&LD39^YZ7HIogluG03lJD<A}a0uQb?yO$*acaa-Sp-@l$ zR6J&jXMSSpDJC(!SJ#_EXdKa+CTm2QI$8SR+!`0TP+Ohj^xK@F+moFXvQB^^JFfqN ztBv(IN*p%vP7SsfF6coH_vznG*kW=B9#d=-*V==2_4)C}UCCIt4Kvr0s1PSF@Cmff zL?Y*y@ocx~=BmakyI21!hdi&|;aNflDS!~?FxTnGYetswQJ+?kPSbh9PAUmU@_w%; zL^;~xz}+y^lm-$t6gxt;tS!2jYERq&hL!>cVgfdPp2Z}STUJoyjS?a}vhK?p|L`ks zkbV@=f3T#P?#R>zl04)u#Pk4-@k#P}EBwwOY~B{yRwL&_IM9n?<+XlMdBSjN^tjmr zZO%Qf&7PLUP138#z<dc{$$(uX{xqyR!Kh0gajMG}yWnO>v+yo%(2{O{&L4&l=Dg6j zi>|W%<dk9x_)-t1spY?>Kkmi{ddDU^%@A!thSRV2hjEHGjB(;Boi4F+=ns}+?K+@z zW>@*qxzc+&XvLsdwm5RBaeHlW0Gui>IUC|Ea1kq*p2m8Q7F$gj)!bVf8daOps*(de zdy-OG`*{-Gaon6ljg{6p)sjhva^Ar0Z!VF^ETR?Fb6D+D+SS$ajg^`+!8i|LqfoYg z4EBLuQ&+AAF3YAJldZ#%R@y|QVdalf_~G5O&JD**_B>HMX^Uua*Rk;ARWXyI(ckc5 zOzP_gaB&uWiW<>zxe!^%R4<!(wxoL5J;+S})icHImsocOw+FFv=OE!YuMeL5;(s%2 z7ocIU4w2xQPSG`;w|Y3k_WP(Nsj7<6*Ue4BR8JmX%`htw?n}BUVWdCw{fH+a<ppA~ zQ{bBBFjBuy&(s!-9O>og>`Pd_VPcYxV`Yv^rL5QX)ngXipXBi5KZv@1arx8WB1}5@ zN3$Xt#mzWIqorn}*V!6vv<Gpa#2pJew_{#!rEx_bmKV_%=qH36?iUyX#g9lD;IC|& z6h#`$d>i9?B1khk0LKsc+{S)tD)QvVxsir*)x!Inu8w29!G8K^^1079l@Z7mV?KA5 z&U=SUaj(RoIu3gE#1r3!wOTM&TTl5<@85)Al<Dqpn)E1V?(9?t2qoR!{c?sP9tW;3 zz#1hP9xRq5$(hDlWqT{ERUoSFC|=;7KNxc)FvM{DJq5IPNSL+s<oCiOzK<viS<wrr zqE2TU7sN*x)=PM`lOn{T%k78;IJA}j$?}3W3E@tuZ{lDMZ9QPE)Rt6=`29BQLia5g zoK!N{Mbc9;n1!fhuouU19ihSTC4<TF43`X+S^0yfP$^nW>0e-EIA4L41D1K`i?`5{ zUzEJdqtFuIFhqpSA0EMB^QIR*e}2z34dP+(nLs!r1k(o#P)Fw@5MK(MpJUm8L=s<D zu#-=0mQ@X^h;G2dc($nzUT@U6a9?4z5!dOppVnf~LbHu;b4m755Kdj}k#2^w{=2G) zk*&S%Q+O7;0k&;@%#tjbkuADQ<amz{;Yv{c0`wqWY^u4N(HyYi@<z(XY1pu&I&ElY zkPbh&Ou1E?tsinGh?A?yQNx~OVksMRVZG`A3n6w9D>jZNx@g&Tf<mqT4Pr05oYE@{ z+NB(W&w-S>dU5G^OW6a9tuPPOtv(_<4P{=hjgJ{+9P!$5kO&Gc<@D9DSj?!$?f3D1 z(ei6bGoUn&Gp9SU=^ZW>EH%bNS25AvdL11Qimn#Etz^n)iJtdH?(EyS%laS_@!JHB zprR9_gHAm3_=ur%MQLv--|>G$0&=FS0u5*&&$8K0vHfts7$Pz)j#ZyU!`z)k0VZ_J z+icLG9S_U2irU<H@i_8AZn{b{JQhG~gM&~nQw%C=IyQL|AaDL`D`huHyu9Z()->@T zNIz^4xU;p9ly;cDi8fP*SU6m0ngHd;tm7Sf>|tbyKQJ2dArWTh^&SW!vm@PNDYOZ1 zshACXD&=)Ywg}1wvc$#))g`@X3w<;4t7gP3cBSTR$N8vjI7793sgw}PY>YMcvy(V~ zDjZD22qixRZYX92h%GVu76h;D>W?s+txap$A6#tc0w?;I`<Xdi2ihs9=4!e*SEEN( zmKp7jOs1G@FR=^`3+8?+@#{2BgK{>WRJR&c5O<~Xlgu~HZ<Cq=QwNG-Jv(D6;cX}c zPA0rvi6@;C-lAjFMmBF8pj7gReGPIu!2HqH>LDpGL>s^35_orGhnqg;^}(+C5Ny`> z!DhVy{QX+P`OO&!jgjpa+fv9YF|$|ggwyuHvdKUSh7snR6!Fkx_Wh!4PgwDq_}qC3 z#@?ajB^~sWvey5AVerCLBGY1tbD}4210+3nULyRVWq88j4ZY}@k767J!(&1V=|P|A z%01a)?rqay;%<I|k0RyP4Gc~gm7OKVnZK_Jj>w)KlO@)^uF{Zcw-vcu)nonHniqR| z!XJbnvV}DT?0oief=SupdCHc7<-(k(?&i<ZTvXvaR3L*~M=e#m&6pdUgO;=$eiai1 zvP-kn>(3OfUDm`5rd*Mh;K|FQnIyM>JO#7xgC<g(C;xUl`b7_PiSDdLERhatY{0Z0 z=v_-B6mG(|x6O@`uI7aNkDQPzvPI?B+(z}Y*g46~Np%G8Hp{44Uo6X*3q%I+dgpZm z&?uDnumJ$4wDG_~o@_LvVBtiT0t;=54Pp{!Yp%Cxuln3JGMj^rgCyAJG3RsiZK}(z z1^_Wy%!huBr`w6Iqz1sr!3c#nW}m5a&uu*Pk7Xr=E6lf%1O5hllcrV%4;y`%%2E20 zHDnLPkvm}qa0nA$T_<s!=!VU5+3ehry#_v>MYNZ#!=R0$<Q+f6_4IN!c63Qsao}E_ z!tH<G<baL{q%Hi$k%to%#UL4e>wB>p@xg>9;21+aqF@7d{03nm^LZ71Wo!<I{d%qF zcbC-Sd<+wch%4Zv?7Zz%8oQl-(V<}x;gD}4rm@oBjq_tG7Dv(FhSKI7yRVy3+(W*M zRNRJHHuZPkEPbL^?kl<dB{26G`h2H8eC)sR<i)-ty-0H}bUEOGTKdl0;CR59bQ>~m zhR0zNQ|F53Mq7RfvgI(TviYF&nr!HE>i~(Tpum`whyp!8g~VfrBWI;P%$r*=CAV%$ zFs^`hu5ik2R6@agtQLZ2;jLa0Xo-9S1THC787zmwphJ<I*vB;oPQlUcY!|9!$LsTv zE9A-RjE<^yU}Q8%7Y@8-y9(xetLWtD!f?`$V=!(CkZSaZ_2CvX>5nta_2E7UPZ}RV zxq7;THZ?M{!)5G41&3lXCenlyJ12jGr2(vCqEAd7TM^bfQVHy!kdiI9&#RAdRbLmL z<<^#+PZ4vzPI@?&z9<EGMicQ`9?yJ+T*wf00v#A*_0$RxC^&oN`D4BM9(z*tfE|Is z+E%Vk*^A=E>p}FkytKeE7|G>EQJ>C89kZ)L%QYd9fxOtw6WEN<hqNMBETTns*Wy(B zjswa|$BRZI=I<sC*J~@laOnh6fr$+Z01ha5Zrs42C~yS#$lqx^Usf51TW$UhJ3EFa zXm~r%(YGvMjG}ov?GHAbGzPxPTQU&KJ4Pc*w2e$oFvdTTJx|NqrGbuZx_p!4sd!M$ zf0fT+4M~)hH?2vB9%wic3qL}RRxX6rTVFO{5b)1L541mP;V*8%*BC%B8Z6)jSbW2E zBhw)ae<V78yteTe{^)cpg@Fxgv(pe<Xo@kx^60~9w!h_cNLGdhO#hc$23mt~hs%#Q z-J!FI4h?x=;w}B0$l{KW0Xy8Wr!ia~>>RK;;2Gl+k9}mQmtf2mP9)&K7gVxmUF_lo zeXhF3yC~LEIIKl(g(tVpJ+o^;dJOO4P1}1Ub=q~)a7uYv+p=k)>=u)@tgjC{9MeL> z@JRf@#hn!=(a@mu_p-dfWT<icM)pZ=&REC1PS8b97CSdDid~-yg}}8YZi(J!V$*$2 z+_FJ-ivH~c&^Ki*J_w~8N4F0+5Kd2b>X~DI-%RQ5c-fj?<`yl%Uq@i*!sAJ9pm?^P z8jpgx$FYl$Qk;7{b^=h$EpEAmu7yD(3y&{wqS$G9ht@;mIEpA5;z`>y0jK{aY{@NJ zgrAPUrRW4V9|Yo<m{h5j+KyWv3n&#uXaCIdPJn$caHh4w%Ps3Ex)K@i1^tZt_T#uJ zWm{U<p$|_VH09||-eBu(X(t_3*I^)o`eY?|1LqG)9fLo7y~ZQOXle2!<D_AldqT*y zp0K3NTm<tsOpT>Xf=BQ%8hzqXDBDn4UG5+FsAS5q#fPfiLBV5NVgjDrZ%^7?UGx{D z|4O$|ET*Px3skbUa_1}6HQ*WV#u!Inx;7Mj_{AaqED+)+!E+bRaVAXz2|81bV+JlK z2_ajaQNw;Wqh|KTt|{Lz;r?7sG^0k;0WF?*(&+3?+1a9rw6*_a$)b5D;ag#+2M>5B z<6v}E0DgyJ@rI&dZ{SD?C?JdIbfd~qdCT$L_~wkH4swq`9B0a*>iB4M!EhGL3*)lO zXGeKGY2)g6SlJ=3_<4bG3^90CwpLb@<rSas=YL!S%7a*J@c{>3bT1xv646W_A~y{~ zQs6%YU$9j~dUo*GmGB8jc2_#F^*<ablime$`?quia8xnj&ft*T`;R&T!}a@*l6z4O zsxG|W`Ap|5uP1*ee&pVd)m8o`BKAbe3cafw0kgVrFbB`M$MIYmuAWCtc=CA(hC&NT zdPAW85I2?VnicM}>l0++AQuZi-QuwSSQr<UBh$ANA-LBkZum~7T44Hw1LJ{X!L>0! zv%tN`Q~2qC9l<m`Ej~2Nxi~Gc`kVr)l1bmHivN*fcP>w1*?`SBbZrz#f<AE>nqe}j z2A)fkCQRJIPAeul&yU0`9bc2L#kd?CsG3-Vi*@v2Oe}$yE1jM^5^9pWb=1Vd9OqJu z!jn&eykLGTmRk!5p6&+HK@alQXpj^H#SJyCOdL($Egq;m5}qovcIY)rKc<cDUTowC zWxD8qdPXfA!U6i?eak^N{^8vu&h8t7=McbYb=4CK2FHXRAUG1mBuoN^;!gE&SiV8I ze)@=`SOWE2IGb4*JSTT{B9;-ZK-{IpivY)WCd7qxM`Q(h5w{ID0il3C0^jpGio-9W zB#nlTi)Qv4pL7>*Vs8=qbQB%Ta_SQWZZ8UDpqrp8cXzmICTO#Gcnm%}xF{_gPA(`t ze35s-JT#hd)RR94x^87m;0yhlv5>xV^t4*|pW8#jU97mb#T8Bq4Q~+|?F>zJSM@+c zE4_i<>yJ`&V_Z!x&gceT$SroGj9LCYTlqR*sXwq3{~h$}{ZOV4-HCe88C#9E*V)SM zqOwCk%1RVqv^U}nSW3zzz%TxT7nw50q*NS$Rt3kf*TJwy0LvQ}mIWWckEpxcoa1<u zavTG#K$+?rajpk<>Ckt>hP$`Ly<eTGXF-Y8i1+IlQ7&}3J|zBFs=I}(asfgZp2AIf z*?>~{g3bm_3;F3zo^5d(4RbfV1wyFNuNm={v1Xc#LnW*wzy%H?5e-4->J6D2$oydP z9zz^n4w3PA=U7@eM)tWvACZnPoIP+BmS)C4jl{DDERCJJUJjJWGlLk0v5t0ukBsS> zs!Y5y#2}bMax%j9;+B;-i}?{GSIR{PmJ3hbTX+LJS8u592A!49Cu!^qE&!Y|Me^}? zb<v_TEOHnU^gR$ZMK7-mKeP`pR&6c*Gu=lSxNr+=#^83bgS^9<_<MQRW50hjs*2J9 zJZC#j9Jt8a;owEy*YU6Cp^LoqyECNO{MQrD^sWGZml^Q4@R#%noo~n2aA5s7>N~=z zpAdmuLFndP0>Q@o(g&vxXtioFsgQbN!34@*r7z7_#ZiGF2@7&!V<2L9fdhn&BC>_T zu~(|we)8vOM~{S|o=Fj5&JJh&ijOQmhZAPtC8^hopct!vm3p}^7I^Lr)DHCJPEiSM zgh`B2f%mBwnmSZM|AN6EOE9Zb2m<u_JrVYL0!5Sc5y)udxMU9P^_;CgLP`lLr!{G) zhggG+AP6^b33Dhk%1Jtzba6`Yw%GO6U2<oS#n}$OzH?rjxC-)E-AdfTEI}F{+@`$Z zKx%YvE~!ax&M<<OM`tsNtnabQ@5&+{@*vdx|3VY%^&F?Z2UbdavQV;VD7dgNtPz9q z`qT6MBP*Wk1a8p|8I&Uo6=?g&@1}(}{GTRGJll5K<w%@un)I%;t-(gUu8uut81*<d z>D8?-{R}KxNDI4+I!beR2HeT5Yv*~0ln<_tnp(lvM~%lHRwFJEfTDyty+<Dre{8Tj z262sRp*+Z5PKK3$y)@=Wwrg8#2~oegn^ua(G)jb=ekUeGy}qATN`A5ZcXIQQRvAc! zVwq?9Q~`<=whZ2pCDwBa2d>CqtrGo2=M%Eb-{Bk#G@Ng4vmxiEE&b)|i@bN^-+%BA z7=sJ+KT=<E9cccS`Rj$(4$i_={{_h>3umWS96STOt3qk)rBKeb*!LT;j<RZSw;p+C z?JoT+WxHqxGGdo#U^F+4nNmX^@~ewJ=H*CEL4yUu;S{x=H6MJc{D%2-7=QG6@C>og zci})Owg-)b8=rCco)}9V6F&H8BU(QPe$S<!(P<)#6zVh>yE+C8X_H$O6Sz3HDh_w7 z&@LZ*xJKcRE)om%DJ7H)O>%}tx$`~?#D#{rR<EvZvHIObryCM6tVQ&8KHDy>hk43z z+S1M#MhO2LG5n<`pk|9_;x@E#^_I7I0iiuPVZj`7jS}fc(2e6a(rMycpJA-8+GJb) zAUVxD#f^vH{gspc`r}XB{zM$(QwT<`uI_%+@RqKHtAsU2I55Oh`0IeLJo)RW>=$Ch z^|aw4&$Y7pGJMfAR}rlbA!IY4eSFSI+Z>ywh0<F{%Q&$fiwkmegP1`H3uebU0=L3F zn*TLv+&=>oJ%y#%zVsAsAFwHiue{MI*gc|RJaq;2R9HJ;Tkr}F3+|HddJhU?2|KGh z`LyHe(dpe#dxOm-YNl(_wwPkPFnSNV{=du<+q_|ZOsu*EHq4k1`rw3>?w}`kcCsVb zdQ(Nq-^+3<TwB)DzB{ka0oT(Lj%{)WJLKk|jQiN8m_XbWzC<i5w_IAx>u+2(0<SRl z$jRLAPa<?WXv$pBsTVRHR^E??{`xgopZ}3t=bCk)evNy;FxSlPELz+CA8}tFA60Sn zzeyIdz{0)20ucj52@oZcXaWWkGy(F$`zC>1RNh*ZZh3s3BJ4^~fy7ND%VjOL)@mQC z_-?CJe5pcwAps;HngG_f`UXgK;!+KwAwbIhzGr6c-Mh&KY@a`V`dPAj@64H*GiT16 zbLPxBac|QQp-xZYm{sJ{z4Gazg)N^WS)RUf#b2ynat`GR%bdBeX@ho@>Kb$xu~g!G z3oF;g#rfP-VZQ4P5)gYn1{BbKBA7>2cyk^4rN4Zl)61t{GQE5}>ZN}>u|%{7XKIUt z{hO!~AaDY%)C?t>UQb$1ZjYP!6C0jXZ6{8BC`jDqH~5DBgGDLT<o1F^U$@x?wHcJ- zIu7nL4`=MSFYP}a=Phd6LF)36voe^|8k`Kp!!SAyNaiZ9U7Mc7GBK^7w+r<`T+5C3 z^(tedck{KHbr4d-7}UF<Ymo#|B*GR@Z2rWD>(Mjcl>r`PkdGLwVt3D96FzkqJnK@t z@5(Z^{Vmaqajhrb<h{l_@<&lZ;%+m6i8>x2eM?O5-?ddquy=zv2m057@cOpxS6<og zKN8n)Bq7wJjtDeL;xJhVq`V0a-*r<r9aL4{T>ojCcTUYgGLXxtU&ST3#<?PQ!z_DX zidA`~A)(NgyWiJ)>mxK1&hJ9Kw?2w*b@$+(>b;AV!X32<ywghqQ#c`!h6u3-nqn9F z<U-wP81Kc}8pzkyf6)D$s<oo~8PxqtwIbf-i!0aI5pB~d%sLdKs5Vjd45B_TkDj4p zx{(U_#A<<K(sBRSXR&EaN~tCC{3q&Z#fXy!58~cj>1{bf6q|1w^=nY1pV_=C{H(%z zv7g0D=tc3~-n)Bl&Z=)YfRej=-ivRI_~t(y58uk}j5S-WFxL16$_c+utizUHqn>>9 zTlwe?4l2$od-LD;**#Dj0lk2)bsh8{BpiwgE<yiJKDr2xCh=v`3)h63TY6GcWE&h% zMu&6^k%ehr=9fVx9kLOAnmB$O20rRL{OxO%^-tk3wr%S-eA{kq8HZSUQVb^@QMUV# zY?n@5fE^*G6D#O`Kz15XG9S?3%C)u;K2^f{UjZw$ME-tQ{&vdW56a*9^7kL*?@ald zFEOM6N|{u93RhbfA;=l@eU6O&%i=J8wt-*Wg#pbwEA}okET$X{w#QAOToluPm>VTZ zT)JsL8>hD7GYz=97N1|@W3gJTarpfI_%Gg?5Vc^jJ|OH1`!NJU*i6ZSm<Y#TZBJ-O z)hUj(1<<rjSStnA90t~A#KziBwk1oP-A@yzui8i#MgL%Y;Ctx^e}zq53Hzp9f6|vf z5jNni(c$Fzh28ZgNS<!U7htFfWA`i1m(m?i`Lk7d{uX<m?_KOy3;#h2!Q2aKf7VZ_ zKN9sb{txxDQ2)CHvD&BeB23XS8^%0;0cK~Slg<0bm*LMAq*}jM)Tyaf^m(Z=u3q^= zeO?^4zX)~|j-6hd!I5b?tDgRiU{}beo#8v3?8l?s!oLFe05S0S80}w;`AESbhq%}u z=Nnq;ssEF4(7C8gx-d|)z;<c^I(XdZ4mtw-`j6K8kLA<p)H<|^qa+@;6r;=Il2gLi zJ<9Xb?WIeV|7kd(d{zIwG9LjrzgPNOQ`vK0a4#IwprYVqbb<$L&FmKHf<1s~Pi5Cd z!Hk0U#g{*+f7crQ>lX!!@E!&4*PY;<vww?Z|LQ(BkD0@Z&<CHDiG0?x1RZdS8RKLl z(N;GU^AqVqUvn<s^}K<3LTBL(OhbOPBfJ4SCrJcrG?C<37kfO$+a7FCsrqo+uBo?+ zO^>@x3cq}VMosv#v&8@c4e_Vb$K9Wqan%X`cBcF^cnggAy!zbmwjcgU{fp4Yx1XM~ zf4}-^@D>^UdnhKnV|H?{)OL_^J<Cpd%Hgwcjj6o4+8vk&HPKE%L&;7B8_G~+J#KQ* zCZGKS-{e#9N1JTTEwJK@18*jA%>p`Ikv(rYV)jtjs)iOD%w5<-aJHb!BMDqD5E_SM z@qW{zNt{yk!greA5J4$5i_w;>S7myucO{>?5(VQfQ>jS;#)T0WHKw;Zj1H2EqF~%@ zDkWijh(fX-LDO4pwY4hD>n`BC2-ojQ0a<8&`oIFFDwDWorN7x|e#3F9ztK!@wCk)@ zXSjB#zg=&7TXlx3nip1u>z~8EpcmO-Dgv8I-4;5Ggzdm`l(Z_{rgJ(@sr~_T9$U4N zr&~h3(oQQpUg60pbA`V4811IexZZ3PMrOJOh|?29)(y~`ZiHc7FY&-&195AyHoat` zzaABQN&ZvuD+cm?A@JHBU_79`gMUNt*@FjWy?26~fm#w03`f64YE?M;k@V?i*KCz0 z8DX?I-PIFsm?(i|K#QTUV|yhcux5QSF%hBQi>;+)<ljSQsSq(b{5$RbMtjwnrvZB< zcQT%354|sYQcXPxtksQtv1Opx7Ff(q_jbI$wvJQtkB?KU@!5mV#uGwb6ar&BG8B>2 z$fZa8NTB^h>Nm8szow;)fnc@ze#Qyd*MG~C<^w*+HiG1b`PX6V&f^>Sge^~XF2gBu zc*AMLGpFO0(+L3dbf-eG2mNn|%VIwi@+S#&WO+!2&H*-ZIn>iS;jmB|4_(iCur_Yt zP88x4KX9Vc=IbY>BJKd$OBU{2*s|sGa2WWA$g}y@NlB{#Q(9JfJ}YI+N$QKHr_bq6 zH$P^2`WOA_{VVV^r|NVV=Vt3N&qv#OQ_sliS`*ATL(nnWeDGiA{t<L<;v~;XG;+~- zfP1frjq!h1)P76$ExJEsQ(A7VI$O`6C-vX*j!CU1Ri^4J=XU+KyxZjkpOXGtnmWDU zw@d-4xzqEivz)m4Z`t4J#mOShUc5ioiZZe2aX%M!k9k^A4u15Y@P*T~qHO*9B!MhV zUiXQ3NR-%^dlj8hAjHmH^;o+w7HrwqsVS`)V`^FVsWC5na?JAs{~2MH)5+{lg3Kn- zMILY8Nfo%o<L$YyB^NLxA^usE&_VIPB)=R>q2n$@bcRJ%JCOUH&!*dqv1Z{wF&w5- z*qDcGh`%bqmppmOv;ce@7Gh)W@P8ZU`$y2)Z&5<MI7?{r9!JT4ZkReaeAUzo;M+7! zmTHMEwa@K8o2INE0Ve7{g)elGG`DHxKt!Nl*sgt~?WSWLn9@;OYZ$vbp+2`zRo1rx zTUqt|&=cKKv^9=R0mu4$|Bm?F-79{~s?Q4JDlMJ2P?ipagr9eG(}v^(T-%uU157S> zP}mxncZ>q9twDhep~`=Zz~RaUySm}M4GpOyu3~W3!Io?ZrC#+hPtKbhoU%Rdf>jB@ z@|0i!|5n+Ml2w1z0UT`QC*T-q-myU8A$Thwok(swP9l_I$hr=HV|?zKLrU?QLjmO1 zDQwMcS0*=37Om%gutI}HALCgCPbj9%JDN{tjXUDeb#yqlLAkSpj$n0{V~8({7v*#8 z(uC1`Q9PD(e*ZIxY;nu^g*{wN$*wy4ExNA+3xQ2|e5Py%pmk0}X+hkSGV;A=eQ`S* zI|y8|LBYbZ@7atIn^VZ}1n9V2nhb+nmnF}yH?rL?eyMw^WYv>@H*k9Qr+@?hc)NCs zUCX`;0SZ!ccPrKR($f!+C*(*rUF%nBz^15kX-*eg_cOgW>Ey3UJ-VHWFGx+FL-iAO z2JMC9F17WUKmYmClP!Rrt?ht=M8XbSSxwDtRA#rk%TYClW#bqb^-|#7ncKK-D2`xk zxDw;YZCo=z`&?_s;8kG3fje*bm-iCRu|+^yQZ5j;W`wr8g|1}icvvn{=@|av6e78- z(@V6`*GLY6P@jEprDdlvQF4{(^92!?oB8ychpP8ltym4taloe-w!iiz@E)E6k9Xft z@+IDlU&Z80Y=`;ll4rRuvDb+TD9!zd7n2|HVh3!nSO`~YYwXxmW$e1>>>k`1TDbLs z1xe5S#>=?ci!~w701<uPe|U-i6!|v09oh~6cP9ml9hh493d6to)Drrt?a_Nl{krEF z(XXvWzk0!Xg?Y1wdZYKaNJ(|*vIltGZ#4u_fU{$-+>f<W%A7L^;VyJ1=#t{{rpimq zTuzIG6LD^VHe&P{PVtyM9NIL|UzP<UA-<$)t<lqzBvKRUW`(Yig|<?Nnojy0lzjiO z?6%2v^7Qw51S_vg2PMj$O`^ym<i`u7Zu<ca&IliKKdC6}cElVYCr@IWqg^;^+Q&-L z%&z99U=kV6b+X4JnE4u8LL+ij`A<2N_03qv@WQDK!wV<J^5$mjeA~9*A7$!sV^qqU z7AG5>%?&eJtDH~e6+C>T^TX|U*pbz#<g0kNs#D2uCi`2ba(GnQwbbX+qoJKpR0|A2 z%5|`UaQjD-&>!`FLHDNj;^jS^UXmxfQvEKF=w$yGL7c&A3}^#6H^9ps{|m3v+Nr5C zn6jBl*^N?KCXlYj^iqOP02JMN)-Of8Ni%Ky(qMBZuZQpzZcpk_y4y1MdAO+0$fvbo zDkcwTucwQ^I;8M&D-cp&LZi1C&5NfSIOZZxS%6rRjsZ^vZ;Hr=ZMu}2vSqay9zIJq zee$nyYLBzxb2a`h!sm8;-oWSg_`HDkyYXqoCkemlQ-ja__`L*l@(sR^#@{@A#^QS! z{z_KF{|J5r(~JL@9qw)*@3sb;*LNNYFF~gb3V+}sgTj^SZE#!_RQ~f(W-3>Llt-3d zPf}{`r9!OW8BXny6^xw=<W2{c!#poXW?=Ot94)4Dvk(U!!j%*8-{71((SEfrFPy2* zSLf2mF$8#<I6Qu5;gZfJIG};bdWHoXPW@ebj|>$CLy{{|F*|5j2V1djF+Y)xRGp$F z2x-68dbP1Nl(IeJadBUqd53*N*aK*fHoAuZzBc)4xg_z;e`ejfUj8$cO7JGUs=E;6 zxvdrbY<Ug`+oi0^3}zTBlVIEeOt5^^wmnq13WWiz>I@F3E$iTSgfJWgE|tLX5{o&w zE6m`MSb_v+L)oPPqg(V9ph$OsDru>N^Hh*7X4EAUxa@zRL6w91606@B<Z$*fa6^OK zhL;2*SU!52ok|~p1R{Z=gQ9=862MUekQdpGBBks%W`KR!4HBRSWdYBG-n|oXYlYBD zp2ySh8h%TahZD*xPsRJDu^9vgS4yn3*~n{VJTg-sU*B@}?$fx<H&vv>!gZXQE73G- zA0ztyFZ`hGs^ubjdXVtdEuiX7fHqT==OrM@BTIk+QDpHm^sHqlcBN8Q1Xc&*ri0ra z>1rX&;XNvc3+v)-1KCmu=)VAnmr<93hi28E02kE>sFYdG10_X58D&5rMjJt;=C~Td zxe<$uLK_6^SJPdf_p#B)<6<R9_6=INu$H`muVt)Oc%&Iq0_jb4ma+ynabG%^8ie=_ zYMig%28(%Nu>BcWKgND7mpEUN_kmYLt*lZuvQW|&?11}5?!j!T<cr&%O&=|0YYz1h zPXkl0hS?=T!N_lLrHMeu^E5&rN(~+IvC&tYYi^%@(o7_1@<Viwh?`5anAZmabFa2y za_cT78lDR>*CsvQC<Fk6aISs8#1P3EL%S3|x%~X|<K5mZyaKHfQHLuk49v2=gat{2 zDr9h-qLW1Kx&FAX{RHnU5fOw^`^X*SDA<>!@-F)>qh}mTqQ?g0aHgjc{T4TQ+0u!G zf4HDydbq^8X-`~+>WLShxd|ESAMm-(nxTG*zp40p1>Ud5X9&vNBR};1q$NZB2n>|U zt-|jY@tKD2`kv#`Zoyva*3Kdf-q$I4R^Ld(3mDY!ZNkY9{9nQ0)Ug<fq4J7VU4-)& zM3tqlJGI@Z$$7TeMPIc#^`iK?6VM!;pg|XtCGgD<>>~0w4_@Z8!`(^ynB6fJ2q%*x zIn1vG?Rb*<%vD+8e*w#o;;gu;eyL&5TZH%0pjVEsZuUQqcM{;pRckIXS?X?GJbZ{N zM_ZfeKhmM7$aad8vaiqZOmTD{1Nkf+;!l$JLu?lhQ|M2iD7CRDjlMM&k?d&+xN-t( zGnM{D`EWtSQXcGIoesAkmI!YPEJIky)6p$U)scbVI*moyRHy35cVE(vJo@4Px}&kk zDISM$LJDYri7Uf=5m%(f!P5vSk9@tV-X=pT-f@x3Qup9>K+66tM{qqVP-JHl{&tjq zbFg%L!&R(6Q4(bc^p5tgMKpsHfJ=6TZ?%P2+S!I?@>E4&hl*Z?oYVD!ZmI~C9_?&` zIfJ|cl!ce)hnM4D)$=%rnEn1r;ynBsAKsI56Fl!5VV%K$KuZj#y0;$X6Q#|DBoXWV z6Z(6K8y%y5jsBj3!^C)hlm4DAEys9YsJ~B+{eG1G-WmIS5B+^g?Dzk8gpbb^9`EI; zV5^1xYCb6z3qZ(!F88ujT}`5_vC>x6DzqD7>TSNk5yk7nN5AAD*7zx@wYHH|a?m6v zVCg|jxApfA2Kup#zQ9{8F&y|Ceg~@PX(M?>TOO(3<tAOQUwHg3d|O62+&~#xb7Qes z3&l1LxR^XdE$orqL}c_oC%?d2mCb&R(-KIK*z<iTrS*%AkiTt~6W+~)zO29Rh9K@0 z?}1Q}Ti0X|AS`&urpUHuAP=!*9yQ~!<^n}(3$FBqk*yYD7J9c^CWJI1t_b`?2ZA}^ zd+5eCwhUfj;vRVgkVM9*U*fO6Lcl<JVgZN=3KXY^846qpy^{nUKfe%QQL4vN9d9a* z;Z<#y;;ygTIuAh;n~_mf>2G0!FUH#61%rZ8&7C*hR$N2Sdct8TL0RudN0H0c(l<jz zXh8IdP<FY0qQ#qzqod$0Hh<0qxV4A-dO3s1{B4Dmn_Ea}F6~v*bI8Xplz@WV76gZJ zZ@ktkw_(j?+F+Oot{O|sNvYmQ_?VhX!5HlM{@vEldzuSg+pPCYdhcD1uNf))>&^Ij z<8c1<XJiNCWLJbxDm3C?iH*>P8u6MXw{^`Ptv`ytkDVEh#savlh(s}egEjOaeeoRP z+aBcvlh%*D$$axet?eVwrDjH~SH@f0dA3i6dcQqGy&0c(@u7ps!LdE^Zjo`uXLmzl zrTY7BNbGX)zB7qM2OKle3k5cNHx=8J+?V8)RY+rYCt{r0S>;=j)B4f`y$E9Qq<_UD zH*7&7VZ#Kp>q3EqE)lu@_m5)X0II;ezLT5zN2v>~BHT*&7Q`FUTdi0Qd}Al^_24t+ zWLwhE*}0%eQslMX<`@vY$?GvwG*#2K`f783(Mg@Dlz^7>Fq+AH6e6N)PtkiwFM>FB z8|zCeNCh1X0bzRw_}hDW`}*6haPVsH;Z4Y@H{EO1N2TM}fh%N?w``P_Pn(iFak*{n z7-d90JnrmeTHcoMD&)f`(US^ZjS@u|nVP%YcE@MtzI$%wy(DUj;ClX0j%z~}<MMNO zRSNsnXdsAZRv=**GPDI0?(mM3&e9&w)1-@bJOW_$7s4+POJRKkFbN|W`O>%%0u?E* zt7`FHEN9(Zd5f&vbOG;)tenKY9i>;M6tCy0d{0zm2YW$O1_L~ARhOs=`k<&zGv*?@ zJta_q%~$J{?_@*rq7kG|4*p_(c<?2pcfy%y1Dv0c5eYU691hcsKFoC*wtttWgyWqD z83>GnA%X&6A;bqu26vSjIFd`BO)-{_QtgF=1N(!^UCzGR4X<?y2m?k{I~mU<t(ud` z-1!H-Fc4WIncdY+iDkfql-h9wr4X!8sSe_++ll)Z#>@VA!cUE57pT<d=r*t5OZB`S z>GgZC$>PixP;u9ADNIJP3VH~bJt8nkCv*EodhU<Z{k^c~0<}$SY@}+~m%`p@Gde>- zXuLMJC*^CW8hUG)m9>sAVPh%Y5-L8yayC$LB_75=#i|E%R3x$6(K9%u@3O%xFT32< zaF+;N0o`b$xs7;$lNk4!o7oSP#Arq}nsG2k1Ocz3G@pefk+G51b+XV-5mWFgMX9E2 zQS6IIf%Pb0o(XMMDtZF;av|;<jDhVK^666CZnQ3o53POrF0b`zo7c;y$vYqTulZ4; zv7*3R0@VF=xPdxv2BGcoT@kbe_M-6^<H^6Dqs`z0S|MH1=?Czm4e&>nC9wG>;0FnK zaRm74{u1yu#J;Sl5A+N@5u>FKe$QLN6=PuBVm_15`CWFoi!Afn4kYIWt9O^;S9%aR zuJJb$AG&UqQi^}l5Hd0yK;Up$VrOscm0OHb{U@@-m^~>d6+m7sPFd{WFWFA4?i3ch zNSH`J0*}bH0NIL(sY#|ZaS&hqxC`PNrX}jP5=&^Ukdp=ZKr1yDV<oligpUt7SK$mN zMLW@O)?W2xSV4)e6gtT9pY7qbo!m(QV!RGefy%!4!65!4R1NIMjbueEaXTgpmwQQ) z$bo5*CyUm4={Hko*XcEp9EzT$_Rr$WW*~s7<H#4c9qDQSzY*qU4;Jh9!BRcWJ#%p3 zeS`62fM*GRQlUTbE<m^JKxhhZXJMO97~PwKh9t!4M(N%tN#+ckM@mTJqTW&1P>V=4 zPT$Z!oJ1=%B#xD{fyoAiD%D5DYX_osWBBb2l2&5`n0)YeoN_44IPq70w6f<y6DW$< z3o!78d_f0;Mr)^`(HMj{OMv64Yd{#<Y@!W>BXQzSniKSv$(A+hBvrEuylWy}cpc)t z-K}=^`oHKcIBms9kWjissqT%III6>V{YU+^68Ih+GnN(zHxFs)`w{m+2pd2^?L1`Y z0}1x)N`kKpFi3Ea*3(3SxYR)|_)oR%1WTI$$=)D>YRZ;G0W`DPaNU#Sg>h0|02{V% zVecWp3L%ElYK*er<a&}NAA~s!g^NgR_<%@({qeX#0{H~*M9cdI?@)r5;gL*drqocr zF&FFjZ8Q(Turi@=bNV2JZ0tCKh^QQ6h>5B-NR}Lf6PV>Wk>5-^4uazbh-E!^tix3H z?gc=gu)P`~9}#N^#k3}x!z7x+G~{#A=dgM%rpL?{f?QE?C?l#dKm6o3l~_YETQN+Y zo?r;b;XZ;eYnmC&BE|Kg{l(lM10PBD4$WekAEmk;Ksk%3eg)q!8GR%f^61Zfe7(xq zp5F*=sNbXZpT!!kMQLOlhuaAGOQctw<qi|6JPxXh)!e2BLmA+q7cRC^f8t%osks@# z#WmZ%rhQ|BZ!nMFvgA8sGQF5AZ(2F!a!X^iZ|c~oT|kqF{8y2Z)A0maO9~-VtP6?L zGBAB1k<>JTCb)-q%W#zTywMvgAcf6V+3-}tjjg2z9!Jk-I!<=@M5RHh&7rAsU~;*w z39%9+OQ*@p!_jz({s4cuort}^Q*XR_9u9AoF4gA`V^2k?G+>W1$8oC_j0IOpk(FOD z_t?R#JtYucJ@4>PTvfvCsOw+6(+++)#fapE8L6ikDaj=Njr%}E{%xFMl<ELcR2BU| zcq^&=$fvl>MqWSO3hCaBEvnR)?y0}jIK#OEjYT4^D#0>>4C8iB?}U~jeD}1XEMkI> z|Jx3n$lbm7IPgh&?Kr7`E5Q`KhEg*KUtMhVCQeTLrZ=hUIOZT!a89kQ72dyEBl+>~ z!Ty3%Z*^r4ZIL~6W5ag|SqJ^!#i4LACM;ax3@%OxCO@RT-Ed@hANamBu;I9$nC=f* zQED}VPZ#_*ZXFG(N0(OHt4^b(N}pBxd+0)No@88f9fGY;rSGA>AR^?$Ql9@9k4P0r zv%nD5MZJ6d*Mh%;I-{n{q%FX4RD^ll+?TIB1Z+ejv^^JxMo_N5jS=(?8z~m&zHlF2 zs+(8}*v$0|70-~^06QqTa`B~?C70e<x%7I&Ig0Zy<ntCwul-i}1b4Y*ZA43jXYU8> zjn`-eDz)?Q948xRs+wv0r~ZQCQ=k@mQ}dYT6`h!CFQfVpOlaONrSG$?m<=x9(5wKz zmXif!M+80Y#viR96X2^K13~+@N_xBxKeWou^vIv;^tjecj~QlqJa$nuJ(3%-pvQ^+ zec=|`(xXZ8%x;||FE>c?QoWK=GXh^-?5iN3Rf6y>dQGG2i5E0907N9c&QzIXP~|dE zCF*g)thhc{oDj6$1&J_C8BvLv7D1bk69sK%f)>;KjOddJtv)1abU2>Fyc9*F13{ky zi5NL;Ch4?Enr3=T+Ds9nfJy)Sv}x@lXp_hv^VyZq-`glq0<s-_eyXIE-SDNo&llzF z?*mNI&c6r+IJhH1LQKmyw??G=T5|7=A@W=&8Wzk~+s9ciXSA%+*avF<ilyzb<U<Jj zFKSLd-MkwhNi0}eh!ZU`ERr-0lWNU#)DIb+^Jb!#1m8{N>^qH*(U5vzjxjIJ$`ShF zZ21T~h-u&WY8btNy-tb;F^2KmPO!~51TyT}pgb}t*{g)q%x>sGAR|Fcv9+Yaww7Lm zkzmgtlBDAkLSz!V>m^!|q(4{hz{n^BvQn+!HRQHz$Zf7cLN*}N0@Q}{lf#cTF;sXM z{e;;jwbtL9?`GesK)y8KR?{^^H}x->eE^O@>5#cS;5+otjG#oAxR4fk#RiUi5V$?$ zHe)A}-`t!bg{TFFTrfh1%gM%nZHNjqwcf#8R7hqEBdm&Bx4ZD~jsR~}Vz+6kf!&%% zF~w|HFFLvOE$r%9zEf0;As+onyfKT2F^21x^+}5F5+`=4eAy+-;VkijX8%QUgAwC_ zYYu*Jw%4)=-=gh3+`n;ZxeL~0h%Rm?-xst~U}jwE;AY?yaGyMU^6{A~L)K#vkvBy3 zt2mx;1*fD0R@z)HadfcK-Z(|Xs-NO$oWf((2UaErRxV*3zvFuYz;H(Y0ePzM22FAB zX%{D{<Uza)7Ni7jL9ldQCUA?rOAP$LEy;mfmO!W?Ejk^aYzYZgTRK+hi`9TL?9`-| zSp=>qrLhP*7M&T(1C_=i(bFPFW08oeU&QyN#-b%uj$QiY*OWqqY-hxa!6P6&QuoeS z2@2~S<9#;0{{-*->u|=m3M|IS2J{8(5S$diNvF=C%&RD)pI!3n>4*te%GR$Jqz;^e zesf5EPh|(~G3u|1S-;q*p9;dA35J@c&9MUsv`bGFQm+#|N#*~LK+5KB)A#J^_c3a- zMnOZzha&$wgm#fnBLF!15Xdy@VF^?FM>GsbL!@Ekn>7rZG(c>%3g!U~V;Gf*(lB(n zB^S~H{F!0(&DNS>TmTNC1e5bAmojc-Wg)tyoI*TJA<1G6sk-{$Xaktf)?xdQBE1Wu z9ZiN({U{BunN4ZI@*v5i-V52CdHWpFIb;KNawDHXB&W^yHRef4hdXV4qz;)PW7K(5 z)S<p3KOR#e6&9E)%oj-$z=(sQLa2zk=9wE$IeY>jFu}ZQN28Xfo<Cg~d8*RW^aP&o zC-U?(*em>1VQ-q5S~79AO}U#ib|jO>!p0F0z9!dZ)wfN_sf6X8$P_W@L%0xz6IaAm z^xuwsU|`#nOhkHVE6%C(C31xb`2gB5B`Mf9W|lfJE!sYeEC-)-MtJk@f<LKJeH+@Y zX~P(1dN0DeYzp;3oIZygJ4Ulce4Yo5@XyFep%*FaL@$sxOv1JpMv_(49QDL(NIU4t z4_%@FMDh|0xqwETixF?^hgsKdwZUz^A`2?jRMee=Fa&l)LvPE^N%39~UY-;zigUV3 z*$s_!unxIjseK*DL6z0$G)w*(5Fqb^OosB2fWc_*vGKU*1Xe)9AQ^(=&&}tnoJ~9| z=d0pYuhl;%$Hr%@oLyu*U&NoQe9p>QFXMTUH?e9?4jEOkENHzY6XPP_#KcH0@?OR# zV+?Mvr*)OV=J*APq99cW33DXoD-)}O)+kL>Dn2D_>TwzXhU=Y(-w1DOW4GAk67Y_W zLCPoY<gh_JIhX=VC>}>lFkN<KUT=$nT_@=U`GT|0ScmqTL;;gesmXVDrBS<^BmXj4 z0Jcz?tQbScG)m+cW*S5gHQg2#{{B4Pco{BdWQDWZ*rlI=|LX$d7>u28H3$!BE1-bl zO7%lP2#Jy5Pf=7CZ|LS58AZRLhvEp)TR|KRmp<Mji(Us?hgf!E5)gC>DKa_&wytQq ztx8O4m%aXH@<kV!r9`|i3m9F&j+C{#3yYK>-a|RKpsR56Ri#*v5$|8qOzjmfySSEc zsY9GE!BiqP^jRHIyEP)e0Kvi8kxiNx>$FqPj=fV$NWeeRwJX&l3DTUDM&aZj8#Fv0 z#GXIL(O4|@{9>`^7carAStKM~z@h04&PZvT!Uc!G3<okDQ!cdf#wm6xE@d4l=rm3d zpr$OLcL*znbe8wQI7!S+1;I#Jk8dnI#l{2cx|!fg`J#*X_Y3)gry}O3^<8LSYBbO* zNcc<ijdioJ;)S7#bmbzwM2Xn*2RDjSxV_L=3?_xq6_9{^DM=K|!(gJrcSt6>x(6Nb z@5EB>i`xn~)YYbL>A=OS#r%N8bmR_t;2^&TP$O(WJS<XxPEss!SG|kmo58flk8%sd zQ}kjEd1YO!732kq^0d+v_zes~a2$jN(qr+UN_@bTq7|nER#{J?iX{#Q+-p-45EX1~ zYP_!}_QOE2qY_S7-eG`sfh&AV5_|P!8iq~Jd!{wOuSfPAVGB%WFrMMG_0E67u)Nhq zS>EPwQ>uedp+{LD`X|3Mm<w?p#=S?hkHI_OHR5K?AAwB3D(HGo^-Jh1cWd0oK7^`4 z<U{;MlFvYqK*R20*R6r;93}X(`ojs3p29tGIWBDVRZuf%pzgsAI2`TL_6gUN+aW9Q zUD`XZa{;73LpN~RM!FOAqTYLXH)W9T6lKWpjZ$b`nW|g94Z<?)qvhJQ$>cMJ<SCd3 z038m6?D3EFO|snAPoH21COD+PlXD-N3lT+Y1^r}m$Ic%=Ck({MPqW|-zIfo7fHhyz z&aZKqV-eB$8$9n3-wwFbmXkXT^&_A9k&2VRWW65>w=Y1Tk$e`Elc=49L4^)^ch3;L zk<w!!0(|A$od{yc(jPZ8>qmhRCmWkcLNE^}IkLM@Y!Nq$Nw|xq?HReRt-<OocY9hR zXUtg&3|EE8kd=_e0_XRIN!UB+FY+ximvpJ=vg~Kw&e35^f>L+5_ez{WKTc=RPxRRt z8e=Bki06kXm*AhNOFMD;-&T;5?{z%g%iG88nUDG{KZi8cm;4l+Y*d^{k@w*_6nS4e z>-UtQ$FCkEC{+oP=uM|8(BqYwX;hXyc^mI$OD=xJ(0$j7*EoOlCgbXaE4<vnM!vw; zB*|xFeQ&7*wkhi1?Z8M@m>1dnsGJM0>ST}gkUgYZP<@&A)Q`kAYUrrA&lxwn(PA3F z%e1}<J1_<`H2q0q3`%WI><)glTCnUc_<vWtFmJskWgB0K9ue;pmI-(|;ZC#fde0rd zpQDzsotNs~F2C@63T&I_DLkGWEg}vst4<=}O<@wJ4ST-U4^%-x?cv!mNq2qW4m$A4 z@m(O{-(bK`^z0&Pcu26~DCtM<AI_(QSBp895K`u4g@ZhgkQ!WR6Y?|ysKEvWX)pno zE`xVrQgEI}=ltU|rw#Um6wOI~)k&Jujv(*6FQxdM3c)s+HD971=JqTm549H|_NsjJ za>V+X)Lm^DFbvEzVss;)RFG(wmZ`$y#UT9dX29UT{01)N7{gH`{Flg$Pq1NjEvP|o z$P}DzW1mBa_aa38CYCW6EaTMsl69>X20bJ(lUx$KVi&H*-AZh<oZ*@W;3PrRG^II1 z`zVa$GRNK2Cg4`2Qp>hwJ;-tJGo&QoJXNWtKoiK0iR*<$RurXLb)@=fO;sg1ME$6C zt96-5)dq{ENEY2p)z&zWobVfzp<1Y1=lK`k1DeDhu!^ifLQ}g1#XA=g1AzO^b{<z2 z93J;Tx-SR+;7B<#>gn*dij7A$8Xsx2!_+gqkkRP$2(Z6(UruEgN6I~ma(;w?^G?&7 zo*LEkdbnQ8@m85Y>V;&}R@SUz-@DMi2Hsh-b#Rs_^yTQ_yc0SXFhErUl-wSb-|=(d zg~A(-?#`P80-{H_!a*81%`-_+!1zk^QEnYP9Ua{2bq770_5%0%g?u2^T9nr>1#;`^ z^(&IpXibI`&Ba)ly-?V~p7{eZtxvHAur*R9D@q6UG_{|fqOByY_exOw$pez&mD-JX z=NqYSl9ynUBxeb7&b`<Q=Uk!Z_<j?5mhYQ)PX#38Z1T>>=0#Qzvg2So%3<&-??2~^ zF70@8v>8^2Udb%)8Ikzi7Gtkp?v<Mxw)%U?l#X@9rBu`U(h5=_=B4n{sRE1#GG4-# zIEu_E_;BQXUx=Ihz13fm8L!`4;QYDOe=JAvKPj7XkuNyU3NsjN2esWNoweRG2T5m7 z)_o6pBXfJrH+_Hsa{NtF)_>O*szqu|#XLCv7NyYgpKa9+fD>kFMQQkxtrZbp%+ZR- zu$BkE;xxR2F(XZD77O=HPN3Yxat{F0dkzOa0pL8%NW4n|Ts-T^LlX0a`%CITkxg?Z z5gUetoE@Al9ftu~&5d6(l6&-?fNw4>^odk{Dt8-JiO=FDj5TzCL*R@Y5ORW(AsbU| zbkmmGd(9Y4#p59`m;6OSIe{Z{9SQ*{@Yh>I?`kd`gwY8VU~EPw{zq1SSyZPa$u@H* zK#*XJAVEZbQ0{IbIxQm8G#E4?FjXKhO&~CxI$e?kNeyi{xZhP$u#^-Q@?_q#W*EKC zSN(bMi1~=lqLVwUp+h{H6zp7kDU@0Ye5Prlc7-PZvsv{MVeBkLFaiW64&R#0#&I5m zjX|l7qb|FWxe+}HD5i0tON5wsZ9wi0iDvsH0?h||aRfz=aGxX#^3z7$Zpi{2%XBTX z5a)mJ9ll|pG?82N?F5!PNT-uS`5365{)rbL)c7>3f8t=@5d6i}OYTkH2b**vwh{}N zMrrs~2g%vELc)e#4)h8O-NC_t7Oj^}fd>L6)Mi$&*vb2ZPBx!jx~(*87<QI6IWJIv zplvimWNEtCzZ$w(a#arIEq_gan0;ZS%7?!_ttu1=6mUgtPDD{#4Mi;twMbDbAVm#e zlS;!Yl9=Nu@Ci_$SZ1|HhM?sxp`EW;F2pn!f=II$F)l*Ue6T;wWj9ZhJ;p?x;692< z^(9msokL>~wd8u(r@0LkcrsDc<v4yU2|G*6Fzsn<$V-MT@tZ_c7rFHeO}LgcVXcT0 z^Cy@vPRyJjq7`eU`VG7_l<S5U4XF15D(Q%Sr0F*6*IcI4J^2447IQtKsLQ=_99rp? z#XR;sCp^MvPa31k(V4$QFYVvr`Yjdy7^g)NpXQ~F=&;3P?c}E-<XHsrRqp<aSmCq+ zT~@s9Zbe{qVohYz-IY?UnbyU<u(<fe>A)|jMF?7}thh{7oXoD>`!z0(K$b+hJL~`{ z7NvSB6#*3@yp)UcNwI)q(Z!5WVjTS=<1o{Oi+C%jq<a7xh6(`taU2zcuv`@C;Z`1< zUa5YT%AAW<M-%VX%B(C~LcJ{()II+eUx_39P2HpO6~2p%1Xvg&_M>mpzs0>9a7)4; z{=~4e?zx#SJDercF*Duz2Ks?{o~{p9*lBi&e{V5nm!`HZXCQ>zBJ6ee6?-cbo8UH1 zd3+Px2-pUN?h+6pyP$;|>3RQe;GLia!JFdZaJNkndzD)$@{1$nwv@<+b0EaYGSGiS zAkODkbuN}yb%vU*>hwb)1m&<w{)&z7d}QIrmQCw}E_lZvi*xdur=Bx7!);VOHopNP zyw{-PYp()Nk22t0V(^%S5lESU)Wv>>o*|t|vYE~BOGSSL|E1oafpq|r9h_rDrb6&S zD1BC7+@T>QQ7XPb0P*$0`mnXoF}xO!N4yy7-u++{Ie@HV3q_{2UIu=gP1O1%Ckeg} zucjW%Mglvuo*XQoJ(xBZ(nYzrf?bbpOC4A<3YD?ev;nN*BGGxurh$jV>XRq?QO_EB z3nS6{C>Ifw*PpUGlO)Fa@zX9&frqipQj1Uu;Gz?^wGyLMrtZ-OXp?hBt%I4N&mR6F zFg?dN16w#qRj7Lf6xJmZmv!+c8zHpuCr2wt;e8+(k*F1IVT{S)%w;O;{ZE5ndC+Li zPzGTqr}?>_deO`#d?Sc$CVrw-8x~_35f09~@TTPqXXsYCsh%qyzduOSrzE+=HA`}= zW*V4Hm&FWx(*X_P__z}6Ae7=>9J^Nn;CV$s2StQr5(=Ba+4<T?7A%uSOJb^7XmZQS ze<TXQYt(hnUW{b(*3dpsTFYeWF*em^$nw})Y0m8aoS{mM8y!ZR5J)BL7JguiGrNlU zFlsG;@mQN?&z<A&mipJK7LgAbknK;$ZS_Du3EyJfmXE(MZ90WHf<1f&W{4u3-P<)+ zO1`EzwW8GUt!c2kye0f$$oxPC6$0q}ZvsYJS9dcwO-TPHK|fs=^xx-`2p;Es*5Ge* zQ_~|tzK8C1u;F}2w6JUVb>Q3o4^94DZxWXqL5{JTg>La@P>6q5QYcZ|&)ys;$ij*W z9Q~LJa77?wS1Kq=9FTrZ)-{*C<vzZdVUE~(S?yi%22XtQ$!mCGCM?ce=F684@!}-Q z70D+X=?UhsAO{n!_T|2a1v#{f+p*ryK~aOiFlar@AOKw{YBtF(bagl#9E3Z-B;{U? zpjAZ4f5*uwRaIqGgOWcc(RX@I7NpXu!_<|_r{{DT%f<l$V+UakiQRMJROjgV^|JYU z2tbUUld{uI&r@Vom#iAqbKcX=-ItOipM`_{MbDG|)1E&ff`e9n2=mFm+4H5c>VvZC zzt{65+4DtITc;L>PA#-q#A04@y0tN4*cWwf`aMjy326>v&JCmy|2#w3YG%KKv4x1{ z6KEAYhp$q7SiHGizG=W4GqvdbjG}7mxoP7X$STx|k6P(U8&Wns2XQrx65Y)127u6- z&H>;J2#3^z6Hts}^k6n_Z^YOqB&sWA<yT~7W0pIiI<mYZs{a#Q4U~;di`~=n<LXgx zI2x+08vy6U)jeRi1fUT{oqrowb7kcXvhq*H6<^Ce`-#5Kq}r5HTB$ChDQ{-SV56c= zU4b`da_n}8A4>IzFJ6%*YPQ3vfrexBsF_w+J)ibcVs2uG7a~Ff%pwC&`A50RD7zoW z1&ZZkGfO6u%sw0&Dr!FM>q>t}JJi3&fOXpPl$r<d&0}9W2WLL(`pfeKrP@!kQk0U5 z;_HUs-)yC3Ie(OjA9>2%H_#9BNp3sNL^_|dD4+irZs|i^!fklEx0f8`hZ+tHhBjSp zM^b`A2v$5qNw?KW`w&Y+1Q4<L)qVr9{!bKbQ>nS%kZ(zJIll}kRggHA!@+SW@_zx& zkV6HGd?6=Kg)D-`ON8xfrVtGCNeF!ao^F2b*;KuNs-y4dfTI9-CiJ$9#paC!ll|Za zWZ(KaB%T&KiXoe%c(Re6oQ670@Bc*BqHWd|r^;m{$VM$+kZ;2|@pF<eXvWXihYkF^ zjoRJg=bU4c__491BLt4)=XTy1X%qbkI41n8W(Iz6FZw+AIYihv1{;ZipXESC%ir-N zf}b41kCYu-w&RtEys!x-LZaOd@Wi~fboOP}w<HKKJTQa`b7hwWGlft|w5X}<Y6-EL z+90ATgU}A|hh~;4-z=jyv=zt&rP6|W<~(~I()4l8beXJdEamsGeTqGgG?~(zsv}&^ zDTO~3cSHHNtlEaK%lQ0ph5j`dKDw1WGY=W_{98)@rdzcUI5lF`PQu!B7zX8GFpv?- zZ=mv>cf^QQn;;lgZPKtDQC95_A<Pk!VFC)pGbMy3o2}aC=*0c9`sb7jFGeT2vubx^ z?J`-l$-9%d(mAZ!=wuhGc4k+rcDl)`jg)LyPboCwvD9U0)jr3zKS4^h9T2O#jIfhc z`<!c9TD5oomCrQB#;w{<5ZM2lReLJzW6;~+t4|@jbn~?moKBVl_(mc4+BNuE#`;_* z51Dk?BFZg^@?4tg^SooMeVs6WUrR4zo4;wdh-Lmx$~Vm4N&k-dd(fsR^Y@puwRACm z=U*$#-%>A*$4<|lm3G21=mNTB@f;KT&!d79jHKe7Nw>2VT&W&|t;S>tPiK7}G%Qnx zAj8v+-hy0i(Od7iov3<)+rl7?s(O?!C3r7c_AqO>H5S0vQZ{dX^sF_rf#|u|DM3Z~ zb-Tcl&$m%7hY%t+$}H;af6kYmgr$&{&oKz(#3&+snJkv{<{-WKclq*SEKI8WJ6ZWB z^W|n{MO70zHva^4{A{#=j#O%pOOEf5RS;bmz@LyVUMHVe=!uT9D6Qo@x_AKWpFnPh zL>`02&ZUdbmQ|}|RRbX(n>H%M^EPi)v{5bHbn;5X8=8%ndwCh^1Cuk<xA2LdlA$)_ zXQ<yz%}{6H`|!dH^`^NQ>NoiNcu|I$fby>L40Ta)hWar+NhKNT)M**&^644sQ}`Uk z=gAov>h75t>Q}QwOg=hKK1TV{5$+v<ZumI{0^uQi*Ax}8+S|!BGOyOZ4&L^cAiFX= z-`@U+cptfz*VbTJkBWy0Z4&+Cokp(1^EyJiwBl4k81Wmp5GmD9pq#%QcN^C8FFm~f zO;LEt5s$}rzo#~&3%2YFMoY;S8ceBlbG|X2H}dCp&<Boj^0hv&YbD`$6K0%${zx^T z%1DQ4Pi>^uJrdd;&qtAmcgTk?c^F7c+Rc6;A3mfNImiT$FznbAk^_au&=A73qhZ8y zCy}*~NhicOHkspr7-yBJhM{ZwsBSkkNtXM|=Y%|%=#}acvPtpw&R5aBj30R%_>k(7 zzYdXzn2bsM8J~=HviG=>pN>PHwb>5Y?O7NKV%(z%ibjwAd&%b#LxDwhiq*L+F4QmT zH{y?pW~hr#5Xhg@MH<_I&y2C%{F5uX#hJ;EADG8xa!C{Z4#L^Ne=Lo{Z*i>%{wVNw z_zAuaeg0thI?MuZ(-Pt9kgTj953T@Tht?$-s=Myy8*zx-#9C8`p%5~wFQ%gKYpTez zti8gM6Cu&OuV7*=PSM<;!+waso)lh1ba>MVz6lui)e5Ya0kqdPu|L2tLm->cqJ}7I zO)L#FPfy<9PpHgb@ucQqEF*niw;_80<T!CeKw$>SWPM5r-Y!hmP3$m`OkgOQF8Gq8 zn8ZF|vUXcr=yIiKZX3$AOrl!YXt|q3lq|@VMJbRrF|t?^(2FEcf@zqt4{!+NBXLfF zw22i-D4$TPbi5KRkQVb*2GzIDnTs<uoV+z*6U+uS@h1o9#UK6X0Iv8%Tyvl01cDb_ z8od*M`FURxyY3)A?}H~Qo%bcjIPd$&sh{^HS(NHx>Jy)td?^)<=TB&6?uN~aMn96C zG_mIo0CNdaYHDK3<=Y-c`9<={30}sIDl_q<Wk1*)n&|%6V2suu68#XAPnHl~AP7=` zp&dD&jt&|TKc7>9JSfr+E>5jk4U<L_`$CeIS5_tp;D;8Z2gR<K&nrGDE9Q2oxXc2z zHN48^x$z3j4EYwHzQEXK?I><i42`mxljf_TgT~KKXXEEi0O6qQo;xnV@0Z+l_us&m zSzws4%w7|S;yPgyQ)RDcyP(Bak_ldhHHfto;9dCwHO2BUfaU4HkSg764Q+GRJu6xn zX}q`=gQ)p?I9y%t`xW$7*75>PvTwSl9n0EmW9e*O+42rw>vWvbX}RC}ow4ok<CN7% z{L-_nAT!?A*S|X3;!E^=1lXZR1)b%<1chw^>KxK9ku#T2QNhH;`y}!H1zduPIcZ98 zJ=PPSxPQWw15kGnshDP)lk)-oPN`l>8;e_<^LHycH?c=$@hhpgq&#D#Lv$u;zWZ-t zJy87E?t9k)8s;8WgCR$vR*8iC8TDE~PA(?Kv<KsDxtM5<cQ{3s`zw`mt1UbSb2o&m z1pT}ffNz26j~3}#3Esd%b9Yp)1dH^_&&tXLT`P00#91b|Or~)6h|QA_T#<OvesCU0 z{?wQ62|gdx3^dTv3`!P1^JIGmcmd)umr{Y}L;*?oLu8?6MIre#PCmVlKSkaRrFtDz zYhqu+VAb+p^t}jKK5{HD(JM7K&~Gt@Ikq}Hvd}R6r{c~vl2WY+BjHJIl&L$=WhcAs zJ<e%qRK%Q+b_-fePXdm$^OxrY?%P1Jo_A8`s956c=?)qA8^P?z+8SZ+bV2mo>|Hvf zs_aA)Z?@%Lg3v7ytfjZa`i`Cy9a&8sGcSg75J7=n`6*dBuS?}k71w5{U(U}^|BAnF z;PVbXJ+IGDC*t!eKFJF*)Uo(ng-<JfZ^7T``1~H9MGG_3C-9lQ2y!?+%klXOKK=3T z8~nX$G3w&;5I#N#9xvi^J-(a79qxaBOcnW;$osqMOg(Uja~jO2IB(y_o_@E57C_C{ zct$tL-jn<iavidtX!$t}EHQu>vB=i~*%fX}kX^C07PiyQiu)NP$F>S*@?||)Z{eXw z^L>^8L5;!%i+v4;6SJo0R2{CwGaMAsRfc>yvxTjqCw$+I37dPE<E(%9y9O;iO0eNi z`XPe71PanHg@}B@*KsYqX=0P#4u?;EbYcC;kEDbvcN#A3mV45V!6o;(&%Ox@&tt7! zhO2RF_ItEJ{Qf}zLYswsvjbc^5lnj$e&vgMe~A>J;XsKnH_Wr+rp{zYZQ5i9T=ldv zx|r~I3+L!vE|o$4)P>Jv<FdiWy7al_e4e(!UmMbACP@v6eg-wD1T2t$xffleFEy7E zQ$#u+OyMf4&>}wIb9O9h7P$r@B<6CyUO4mlfGSUsHvk6U^3usC41ef4yd$xnAb)`4 z`F%ov@x%jHY~4O%dVYg)o(F;Bmb+*={;jU;;j_%UGNW@>ZjN*%<6K?&0kiKHHgbv$ z?Wsjqh!^j36NmW<3zb{Pl<F3A&rBKUY7i(RErxV2h^V0S7+9msVe*PuQl!8COM``X zxetmi42oXTJe};-$Mwr!YlFpBEF8ihR4A?~MWZlJ@3*&{@44XJ1N~PeZ*@@reeK&S z@E6zBk(_7(bm!svIJ~2<!3K-tJU8OKlfR1>@1mAK7jhK$b4>o<B3vvkJwhl~acw;4 zvyzM)MVGBB;T~5X4(GP680rxo;6H9O=<++7GO8R8%_vb>|2XIrn$aN-yuh)YH?!5S zJGR_K)H_+kTuu@(m&wtL$6Qu|%jqq}U0x^@nd(0fP&gV;gf{M>-K?#!wj83T(Lg{o z0tn7n34k4q5i8=hN?6Jb0Pm4AE==me+d=f8bLB6vsq=kHv~I3U16*MjS`i=BW3U)f z*;b+efTlAIa`hq?Y{Dh5s4HFiAz-Bh{{~edtp>&D5HN`>*!y4r){3YaKwW~N3pm_Z zFO|0jCAdLURry7u@D-X>g$FoV&D2U#@Fz_xK@R(5e9H!)bT<1(xw9hOr)Ut$7<{kL z-eY)>Y`TjiV{~;ifcx?I9d>jtojU>HC(eGz4d~6IQF1H#%h8!G&`GuoIiU|zKWRQT zLIl9$cWIb37wM#zyoX7|!~Wdga+xUc45y(L2x;QI35=DNBZbar2B*cBsoG@1L<yX& zwGZ%x&i`;ZAYbsZ^?PY~a|ZG=5D>k|6l;xqzV%B32X-4QA{V6=b1opxbtFx79><zb z_!#zJWzkgAy}amgEZy|4n~>WAq;6lDp_bzF9zN6X8H{I7;G^5e{to`(a%Z&#Z%0fS z<4RfUniU8O1l9`YZ*T}WQi1gpfDyIA5e@-F4;W@6GNs{8Hjlo3{~kG9?^wZDkiSow zWUxE$fjb!PxPJMT9Idx!k-yOz3K%x7sH<bVe<^fZ_Y^`R7h8!JI#VgZ;b|mbA>j~* zJHFm{9C9Nys;^9Q=A7I?x5j+MNa}#UG*ix;I*QMsO~C+;BA7J|W(wz{2%Ce!(7tn2 zPK3%z^sXt@skG91;=B(XcRC@W*1SlRlb=dZk;-?b<-AaRHb|g|a(m}aV|w|;iGKQl z0dBg+`Pa0^;Ra-&#Oa#@DF#<)a8ueh6_NaOH^gTB*4eqoK-VN7nAGgjv3nDtrXS+u z4A?=Bh_1{0Yksg$ND!RG^dt{i2-9pO92$^_vKdd7<b+{MX7@A*fn_8v`EVhH&7m^Q z+DGix&aVtcj`_lUs_v-iGHr<eHY>tE(cK^N6olvWY4~WOQ@ubwoDiB~6M_^XIXxf^ zB<y5=mp8b@B*4MEB!`?_AqLW<VuI6%TBqPit2QOwM5!HGlY3bLX*l0v9CBBtFsp5a z9hJVGG#9?<q?zluH*Wl$6R;ub+afdlGEvJAsqh?<{FO5ww>T+oVsFc*0V-Ndml=jr zd{1u@dZ0CNEJ02Hq7J~>5N~gU#1ylTg9;&cA{Dv@+b>$}1G$s(E#S#z$nl3K0}QCF zN)&aV%#+(Y$)@J{^dEE3`a2Dj(@6TVJ<v0V-w?{6QpwT1D4+g7<KV3;fc&6*%A<hK zp^K?Ef|&rb+6CHsoR45h{=j)kJMokzLx2~&WF{wM&N@k!!8(O-KzhI~{h}v$$?x@P z^xj6(R+1BkWQ=HPiEL`3_Tf)x>M)-+!fm$RjOjipn#nYp87P_&h7P$p43wGG9ii_4 zf7<uj$L_$w4yYd-hgNuT5)SVsY^_DW46hrz6^2GM`yrXQVQPnAo@0j$?(LjO9TQlY zV04v&8Q_G2Oj(BT3n$SUh(nyPy_pEb$=Q0B`@*fbfi(oHj@5!+W7L8Ve}2y87m?4j z9WEi8VYf@uRG~x&In8FsX-Vgk(`NY%Iqe&wCVn(5<TQ#w2|4Z46}p^ufI&{HG0AD2 zb7LsMU+Hq%U*S1H==~i5#mOaY?L0>Ym(#wWr*cnKg=~P6=_onvMl?nMcz9p<5fcD} z3?bP7hvEprl+SOM#jbp%Y<-Am-CUUl2sv#bz2S1&83Z_@hC)OL=Lh{MTp+0U>r^~e zzv!N~I(CP2TT$gb7`Xk5YvS>_tuVKVwxpDHxn_+McJp-2nSzR`nv+Xuh+9OH%bpJD zQd&RJBz##26;GnSNnJ&>YqxR{4WZgdL`#z*S{g*ORETI7eiALB$sv<8mDUNH$f-yj zB{A(E@Poh%?bU~z)<sO)DM~!WN$5Wl(++_PN->S({BFdwOW!c|3~pLP=q<6R$?fN| zuf+5WBT-B`wvrDsMu)5^zT8l*PIsLLyXF->Q1alQ`TZ1JyVGFd&@UY|KLk^xLa$OG zK&E5YbTUBRZxR}pZhGQZ8EOHR&&&9G3ZL7TXQ;>V_l;XJ)LZbJ7!~cON5N9lkck>X zy~~ZBCL>`asR$sNo*JEosM=&i$w0W%K0#|QG+gTg`O<;s#+!+br>hMu@&3b!ZIjg$ zuZn;3y*+}rIYPGJZONeo?Y3m?q`w7bfiPy1f2qTlpnW|WbokrT)-D^{<Uia|x@??_ zT{AsixQTdg@*l!J?avvfRNqO(afe{{*ai#~8H76~ZN{T@sTxvc>%Z2f2JfP$xvgHi z|LSoNa&}vDTYW#6%dERE_xMWwHk;laU-5&#DeONB6Vv0UNuh<||Ketzv!?uZPhx~E zzo*x&V^21mjSn>k?Zy6fWo@#vZX7*sW+fY1^qbe-=f<8qa5nTz?x~fJ^LS@VsV^b_ z?s&9zBD5)JPo%oToXf_!S=qFBK*chltAr~+F=J1*{15)%6wH4E5#We?OC_qaB2;c` zaS}~Y{MV=mDW1GP&O#J^D?^`=CIH9Fm>?1D8^<iPGeAWl`peWN(;~~(CeyXL9Oy7y zQ_*ifh>hj5*X0rby9kFy8m?fw`0Z4#sdy?eYL;5ZSAo{9_3IK)sbqpMMCqxF=$2n< zy!RL8vk1=*Fbs4)kQnhYI0sk;aSjC?%!dif9$o=Govt(-hTmQ!w6!VV)kou_olm+% z1$k8zFf9&akJjnG1Q9`i7CTw*pamkJ2mYjG)kDz40!Yz%`%l>+Z`yJ3onsGIT<*X^ zSw|{$9z>D+Jp4|9G{i2IJ`t4borEng%Wz2^S-1Pr6NJy8N#S==oZ?o|Tyd*tK5i8O z_5#}Ir=~hfm%(aCLh7_v4TiIi2#y#u42|)A*2_Bz)-^=Wz(2hj3$mf@SV9-z3${T^ zNW~YNa#})(_=2VpB@ZDQ61nJ-8NbZpsX*Wpmb(`wM-j8j>j7Nq+%D}yMJ<5xiVj?Y zfTPrloqWO}9U)Gk5=!OTtt@Mj#QJUpjVfI7@Ldukvdm@Kf;5^~7F^8q<K!3xt+F7= zz?`m2a`Lqy>|MAZVjtK|gIJQY9r7|xlwdiCR`A=`TnJ{`#2yx<?+4OxnuKDsYkUX< ziVJkX>HKCo>Zjz!E5S#BB5fj?<8zx1F_K!mp2JY8`Rd~mIkj74#f;Nz=gHTX)8fR_ zl03anlELdnhjwlNYGMdM$$7VhD#(7x-Hfac6{aadk5h=@>8DmLv#AbNGB7~4i6-{u z7XsKzv=LCG&L;MZe6*P!flLZA{fEx>!GaGIWTJy@`I+%Z@_^(Jc7zg4CbIC^=o`Mk zeyujjL~cB=7{8ZT5q6idw|s^lSup@ZT<r^SmB$s^+7ZBHU@=&{8PwqF)F6V0hkZTT zEb++hj^jdYzYl7M9v5PeKOB!RPdofJU3})Qt7c#Dmt*jTge_S8FeDLgC`i#ti8&M` zA!LQt54_>6gHck2vAk)2E9J%m*bRzO{RqfoEA!<16Ni@*$UWx*Tpug*B;&VqmC1XH z0I8wT@Zh1M_fye6{`MZeoHEanNI3^DhuBay;#4WbsglAg;An<^u`46Jp%59ukRyU* zaDLNn3OS-J&qjU*U*guI)KaqlYy!U5(|6T>HhydRw@!7N4gbK%D)^^Uh}xZb=a<g` zKgHnx;xHFJM7r<BpAHzfiH@~s?Emehq)!Xt@D&R9W#Sw{Z)TIUzuiI26e7V04PAsj zqR_Ay^klsmZnBCPuOf31X%8X6pb~uymn@1Y$}`<g!Aaj-&>+r&t^rjd#2@?<Hh}ZB zFIH+U!;_%%QTCAjfCv|AlQzW$wo9y94Z6c@op|l*A9SBZylPRITR@k^!OwyOj0ayN zSr%dkf{cHN=FrZ*tS~E-HI-s`Mt#U8h@al$SZyi-D^*j3o3V`vU?G!0{_9p;9<`S_ zF+VbInUQd={4dd12Zq$1bUngK{0b}hA9agq$?aj=dL08tsF*-)Io)7($>nZ#V_zx@ z6LiJJ$e&TvM_#O`aJX5ofgFrfJ5e6bo)Dl7-A#|^Mj`u*ETlUAkJ+%<;Vyn*N3gKn zgT12CNzpdhmL-R&O<In|q=8<!=iDif2Tc&HZNkkBW?aqM6XRF|zX%>1n6g#uq58#$ zujU(#S3M?{Sbc7n=jB4mPeG~d-0U?Na8W30uZD<q3wNT_1a9t#5y{jtj&Bw&kE1A3 z|H4;f{lz>iAi|R^vy1{?T!(15$Zf`+nL~qc5Nv(C6z^*u;(ij%`BXQ=+CIS|pxlS( zg}zG=wb<_Dc{k&h#d)4yGgmEJW<e~)Bk_o*gYl$MoM;=-+eGuEWB*)m5@#UEwc1Ox z@48sS#n@uW#d-Byt*8V8OTgvp@c0K2HXi41&r-KZHWRAb?2^W!5>)FZe`^mY5+IeW zTZ83rpXAGy;^@A)6*qA$zKdYadu$<bWNY9qdW6P)>91&~-5vCFKO)!NO^;z^6N@U| zI|eM<2phy>>wU=T%gArKBE#HDr-+I&oFX3~v((cV90rj|{BopbL5_}FGuGw#)!xgI zU&Leievay?_|d6)?D!TQ&(mOkfx8&~UC9(A5WXRWc0?d4v5Nc?sxM~}4R&k&>6t1p zS73K~yeDR=p6nm+4+mro8G!ENfRY5D^585Lp_?!M6oQN%GL&K*X#0YtaU0?a;1_dh z?Ay7sRPRvFMt}^D&-)E>pTz%}&xqD|J@p0zfhcZvC{a$v_K1kFWb0pPo^x`?+eDKM z6VA`H>155y)~Yt)GS|ed4&d8oo4AeejtGmMnKNgp<z?*I6cMHoD|tJOPboPS>cPLo z5S*2<eAcfQ<MJ#42+vFq8M|+2M<m}3L{#i!cO<VHiVpKM!3eCuvZj)hXy<deaHrFA zZ2l~DSpuI9&&{3Y!TlzmhphVOXqq&<N*bP)KNE2ZeEpRXG(i|;A~F#o;==bDQCdI4 z1+7;>z_ydOXfO=gZ#$#R46|P}K$n(D0T-Zj{q{|Y-3z%vrui(VG`ZyEVQDOOh(CyK zL+9Vyz7D@esKo3f<(}|5=tMtW9EO9i<B{h&G=O&s3=U-`X#1fP!VKo9`2;CbWH48h zOsM%}8=sQGef~8a77kO}sTA%A6ssXSe-)TRt)%GOG&#R!FYXI8Duo{hRyhKTlR!Ge zE#Ktb*^6i5o$-R}*O)I33`=bal;*XHQ(q*@u{1(?cl4m8U=!P}Ht6WPWvWDBBqQ;U zkJ606gkwytMJ%z+w}D1XOYDx<jj824{E>|aohFdeGygIAv6cQY=Bwoyc$pjAUf2T= zuhS%rk?j{bkPABq`;tB?Y=JdDXb;oD0Zxm?c+Mu`Nc-u_u;eKLl3*H6w*NKi3s|uX z@~oW*&W>LS6>fL@QgGiN#~wd$)|XUQO|jydkvnlqp?PB?sc5Y7YQi?U^0qX$VdZe; zmHl~@EA2sRS<vxT-gR)gThnl)N7arz7rw5*UPjqR3Ok%Z$4WN!o^Q~$jrRHK+p#_1 z+#B|T!geR?eV3u|DAh~wMw_FyHKahIKG5(@!pVdFBR2orj)V_kxo{_!!m{Bihi!xH zypI4<aG1ScK;6gi_mfUH0s!Es+00H%HFw^?DAofE?=bpE>Bcv)>NHUc33=djXas>w z1*fYZcDIR^s)^G*TSqudqKTix!$xJA=O(gZ;m~ec1K<ZYi2f|xNg0f6?IfUZ9(+9q z2#<1Oe<bRQu;B@@*)Z>1Wv9+5k<PW{s|nk-urhV)X8ePDiBg83@z1jJhjsM2Y9gp8 zUzxc>zVBu<Q)~9}B}`JUO{#|p#BI7MkA)e#JlaRRPvY#y?8xIhe?d7y|4OHV8?{O4 z=#4M&dqpj=g|2k6yJvhE{tVIE@qi3XyR1u<aeXU?m#Po9?V5VqV9oxjIcK8C)Vl!L zr<W=j4J#IC)>rE;p+z!`HkfUnf^(Bxp=~9e3i@^?8FnS_Xcry8v0)EGobHK+#1iEx zD0=#OxtMhn-wKSq_Iu^pzUr`2RY_}LX%k>Kigd+>AY*|zK71)E7}O{2d-amH@KsGr zrAlyliWQ+*mMZ^Ke?s}H9tlmqSLR#as=T;VMRPrt3@%kM{vO8oFE9_@?q7{Vs-AEw z00TsR@9&lV)>QVF!Y^srMMOw}f26c^b2$r=BKsv`+=v;V1&aJC5Q2@V@Sh6%CWl4< zm7aTzY`{|Yuy7`5_wNnkwZ2n9(DL=6-yF*!WUNH~!uiGn_y?{j7ZXyKLDNA0$8D>? zf?)N7yUa)MkKN3NcVzT@XvL{xi&JtN?ik@L^`!9Sb@Nt|Z$IJkX+%gWWz#%##t|jU zMJ7nn=R7zR*v}!MIwBJ49fpLO-wr`fmr#Gi;DBN{+g#2P{}PR1wKIl`y20>6n~B?; z8^c2g!%7X^jWMuXvv>6piDdYk>qy@JBJ4}o59)&Cv<JIEvT`v;GA20dpuV6>c1WTQ z%(*%1V3t_s5Xp__#uDL3?aUu)Ii;80jQi*?I!uFR;_byLm(pXGvCk034s&B{hwqr{ zi=EF?`!x0^A;Tc$_k1t==(k2j0Utb`uish6_y4f=wo=#(g|_fL^U;1_wrb=82Mg=H zIN)+nW=7GbxxENC&$q!zg5`Ja97f3bscm7)52M7k9a&%6BueS$asG?s#ouC&6R|** z>aWC%#PLAhdDkA7X+GK|Ta5(5-;~1950^{f<zNy5(6wzxXU!qos9nc}jfMAr72amS zwhxzp6ZnpR;h%VCLt>g9ezilv@!j~DFS*t5pat~rt0XN19`5`cx?q660yq2u0sy3> z95XK~Hv>WL_y|N;gK#NAmHD_vUi2kWNOw*r5jCGt_}x;0kXh`rCpyi)X+0tr3*wA- zQ5Z)>D~va;)fL7UelV7!_cj!=(NetQPti-!W{I%6_OS2DZWiJo@F7}=d%`A0PsA(s zoC~4meeWUbg_JCnlDA2pCcaDSA&URf{;m@JkB%ZXYy;e(R4j_#d{J-#vy7d5jbnwj z=xvrQZk4(IhRNMeFh-pNhIwJVEI{ledL`xtWUA<h3)(ldi50el<DuT#ap>Q0Nb!vh zu4yOx4FBJ=NnjKz-Qp9Js3?t;<{l6N%jukijs(M*>~DPqt>Q510G<e&ghXu+u8_mh z{_IwR^Bh@ijfGr&aFuG-he=b^Hx3)VY>xwH3>4bg`*UQbBJY(j@<U<|&W^)HT38M8 z)zpN%coHj>!lq!M3PV}5lRcrA_q`_@eZ+GRY{Hh%6uLw{5q&_bom(ui@xlo<+U&5^ z83o8_z!UI#dx4O}G?ubo*74bpzbSTcWO~K<9mO+;Sd-P}ro*|hKo#j31ETbd7K#k5 zO(L}1s0|~z=Z<lh5TNqfr$M5`EN~L$8>-n~lXOu)-RUj3JqiDs^)>B&&Q51!gA!NN zw5^@62?0&<ed&gR(Rm4LhUCQ|@k@XIk+a(53V(fm&^mcyLGsE(UdZ<e3QhudShr8R z1sN86eb~BnSTU4jV1=$>k-f_0dGJmsHSDYt83=Di>>w<17*%G6F4rcJU{yB^oss)^ zHVU!!eo<QtUE+M}ceH-2I@pL@_3VXWA8*rk%Y8+v%2J<d?W8KFKTm)VR#uj7xqhau ziu3)Z<-*xfza>BB^Wmn;p&K_5dH$L^Mq(j4ty+?y4Oo3w$I=G2T#n(ZWcSEyi`E7n zg7uYa1F|>f#kkB;29XjfJQsv;>bEMrv6$xB!V>ezCT0t)N{=3Myf6>&R!ll%4sRtg z=7_ZN&O4Bu_rC=TPki_TCsU3QGHoCe@nBi+@E~>f<tjKA6`%>&!>$|nRhTn$o^=Gu zq}ZoCG;`l>H1;X)5)#b#9(6x1$5XnESTU%NT_E?U3aJS3y;sV&hW(<%R@Kn)I7a?Q z#EM@mTc?#1r9a@XSIe%|?jo9o9fj48L_lo*3vF|_xF;+D%>|&yC?Xiq`r5I%as8%d zFV}Ez&m<yF=<Ab23GkI-Lk+yTDts<A(9vn)pWx<0sDb*#!z+9aPQsT^5`!hMm(9W5 zIp1)6*LLGqF;1Nz?liN{958p24on7Y@_IkCByWkY2kza4dcsEv$-0QA{u(cXt~fex z-q5p%+snSsJ?>35o6Fw2k4O)<uJj&o>42|AiG98}X<d@AU<*U}i4**Sx%+fkpsBy< zMh5JYBo?UNP6XBb8=nIcez%fRY5Hwm5wsY%{0GL91SKh=h5EN0f_Q@Xk2`h>D_h5n zpvKI^sHM!?lk&hUY+(*00wD{s-3?Ut2~Iu>99zN1$by_C<n#Dt@g8;EToq@xWiGb) z7_m3nz<^`AIe>x=IK#7FJOYl(SurpQ4ak8+?Z`F;qX1<co`D^N$DKE6K$>-{RD#aj zOY>ky3R|inQE%VcWiMB1KBg(Z)yf-nvB!3Cg9z=V^?2bb_hiS-Rz2;s49D0dlT~W5 zXvkgMA#2TgOV+CJ(Ln=wM+|)qYgVDv`H@+IROkxI?7?Dne&Q`E4-a~<9;^UDjyF7L zGrmHSTY|NswTA~S$6p$HINm#*vgQ=}!##ZCJ!v4C@c6l_VV%8^57X9_frkb~(}$Y{ z9wUsvGs`oT*FU<qObxv$TN7>3L2IxGX83o1(LvaQkoiPc(3=Ek_#e~K6lY~Zevy)3 z^vOYLu+XHI?KkAWKYbIC1M}P-$3JJO5Co^Z4}urx?4&d--05b{QD?$#tu;I-h4W0x zchtt4hSh^gn9>#*tAP45izpF$H<$`2yO*}wmT)?&Ez}oYX{X^9y-J8w3)OP5N#dl! z37wH>(#h=ToD``JVXCDlP$S9FI~MZ5w9T>Q0j@l8IZ>%0GI4q455h)O0i?5k^wQ5h zdM(b{yGU!e9;Ri;3qoyjW<%<`ocqIUm`sAga0m(m;Zt$=tX3cdg@TEblUF2ayJy$b zuN?@_IH3A(T(*T2#DPtQEicY{42RiH_KWAg<ccqy-}GkF?*B2&i|Sg}JB#xd1>$%$ z&aR}XiQ`c4hpdB<9Yg03mm-;#OWRTnErkRjoHCRA(_^C3>g(fTFF(MAFr2#YSY+lI z9k|wFOb)&XegS!x($V8w9V?6HrB-oBfV^gW?@aV;-2`d4ovo`E+aDZ&d}*RbV8fz| z5!>%CFGRR1qDUbSVrAO255RB0-WS2;pUg+L&gP@H2JlrPx4vk3QEWx4kdJ(G9dgOf z^w1v{yYsZX6y&>#n<m8uh0UbM?hKEA7G*r#2<YjwHT8bdkV!D-AA)dO#tb)X%ADt# z_;csqVz7MUj7*83ni9dVE4QV+4&EuZ)tKe^6mrP^ZA6)RVPigUzU{Ng6HFX2`-YKG zH1i!gRpds|q9-_0m7=w1BhnoX9@L>#reoIt*T2xS8Au3^w>|_@J^SUa&6Sav(^`r< zYG39^jl$<}dG0levriu9rE%D6HOuij4GH>*Izka<2r1STM|v?w8%7-nI{P{i=VBXm ziTyJnYNsU=W8H>scG^eOXif?gq4Rd?{L%_j=Rb;cez?(jyA%UBf3z7At?EndgxV0e zGk6u4ZX?Z%1uAW~r%sWv^+gp?o($DkjbL5(T**6SUd_TD5^bk2X<Kr-x&XsTv6J1o zDh4=Ozfs6{kr1(kBt!~#rV~I9K6P$wZ3%SEQh;j|hq+Fc4yZW&<$DZn%E46T?d#b> zQ}Za-B&^!(lEB)M#bDeQ==>^@c(|X!rvy&fc%Q7lAIL*3QDWk6`|0m-_{~?fq!*Yt zNwcG+&Et8O;kfrQ_UkI}m;Klq!A)_sEi_8dG)ZXpOEi_(*u?Z>;ZP6ub1DpJg+!X( zm?d4#0}nICJw^a9kv||w!Q|%~IblOE35~`v-XJ&V=<dl!!dahiWGD~poDu3v4}W<T zM?5Z@bafr<D+UNow==T;n&y}IGF)y<f<8M9hYa*uk_F-87!nGTC;Gfrx;;FQB7H38 znX+y4)lcWOetuqSK{$ig_>nq7MZpgutG=<2t}nnfg29U+P<RNA5{-rJ^r#URgz#Tu zu{gD__uf>A6VWB;kdv)vr}=(l!zC*67MKE9#@V~oH?9<t@NsqzZe5bO7D5fm369OD zwx<ti1P8*Pfq5tV140}@nAaMzZJT=Qe3kBY@@{Ke=$IJ_^F_!M0)AFn2A>P61c^qe zeV#P@38;n{{K6O*T}uu7TG^fJ<opJFKafDWmY%;vqi0{g^@T{W8d%s)4mm~isyID} zxH|jTb&YuGJErXhQb>Ai1~P($txk{1^C0JbgG6pPc8AfV75n8FC!5%TC$n04&Q_g- zBP2f7&Pf=}@bF6Bgzy}ATmArF)WVN&1FAGo_^H+$Ec|F$JmQId#?Q22qM1dO#RT*T z>!P$P&=2|upfU5IZWAvNya@wh+HNtNrob!)OxKX(9(4guE4Tu|PY)6?*EHoCm58-W ze<2|*Y}bIxPf(;wiqNU&>d_dzN3_giuz^JR-gi_hJcP+i*XEQ2(80a9qAsJ%T`71% zW-0r7Z^09Edj^IPEBWqAor=Y<mC_!>`QJP{L|bhZ446KZ{h8m}waFY$cptSr^2JDI zHCmZ`qhu7a08}m(B$Y1&bt3CPp?zTseCNZ)VWZV|VfYri=P2J__&)rmVfLhRZgQaj zZ)LTp1Onp#X?-7U_fN7xgRr>V-s_`!qw{L45M(0f4mvJ&iKq?}5*#3DmW5vq?VXT^ z1H`p#cskz2wg>44jG#i&%4%C?*A322uDMW2WYPloM7XDI=?#-JI3?%A;1n;!A+OAv z>RZrp3Xv?wc13+7&c!X3R%J`SYFPG`#Vrdj3%gkDJ*Ux(stt0WC|I*CFp0i}257x8 z#l4ZM;Q)Et``Q9mU2$+r9I6k_gZunVgu5no)xD=-Bv%41{PeI(U?AFjDYloD?Po|3 zmH0Vk_fJZ>Yc39cOw3aV667o=^l~VWcHd2&N}N-M2OZmaxhmN|R#+2UXN0`2`_Fju zwjF{?iMD%#dR2el&}v*I+u)45suZ^{{q^zwhWP4(zN5%Q*yF-_|DHJXzQ2@NIUj#> zIr&O8u}Ry&<;cqeiObpYUSDz-U|s?a@!>%p>V)v&@g<W~gLuE&Uhh9kWsWoa_#NJU z=w+xR_Y0-^Dq?r<js0--MdUf>sk}n>JdhjGff~LcVc#1d6d?#h@17Q?_^rVyafArW z<ZKsPe+OK>U~sZVtF$~j@a>6`U-_=43^is7N`HYU=<T~C1t~RTWO3^hLx&!q7sFtJ z`!BF(CLacK?1Sf8t66*Q<Lgz<RM}LUZ@AHv&jy9~c__5^ac46ARf}qaXLchWOc(oZ z>|s8Rq!`KDUg{~>1bnYJzIhAh@j_cC>bO16@}unV_{ST|RCet($HTG*q`Zo8A`+^u zyq4&xXeB@4&Yo_qK|AevXY72{iMwp9@Jq34@NJoPqH=b{tI_+D2T$EB{U8cLZMM=@ zJ`ayPoBgvP=dcscpg7DB_Gm<MGelz#xg8+T8LE)+-qSIBK9JPTG_=h3%hi`i3xE>* z7v_!lX-}o*dwg}Vy95B-4ryU{Amp(HuDZvsov*TOA7C9)m#|$K&I$Y!&F1UnWYb06 zuI7cyWv?)hjRaI)<5-85L;vlWdKR8(z8_rd?T0Zi5TiZDBz|k<16vk{k+_*U5Na@? z0NiVYq^9vQ)2lDt&FV#Ij3P8jz8-+rHTB3u4P(tC;x*PsB8p%e8>;o`LX&rhLWU2i z;4e`kvS2Homq*|#G(R6;iCI`rV$yJtb_(&_UK1;<N)3-SHi<ZI9UaPuWx4HMP#4QO zDW;!ahWUhM0aqILv5qyICAVxbVT=nCd<dT>aC}s)v6FtRR6B@3=&L97hWR**pM6wL zwzv`FIaZ4KYe8fLozwZM&QfvTU{C!c#6GBN<?Q!WoO6V(h9f8z7JI5cc{LE4XNSk% zi&bCFs{L}+doL(w>(@iaSqL4+3JZJ_v;B)-QW({h1jdQ}8ax4&mc_X|>DQxMlhFvD zcQn&q&cg>Zn{cxIf4qGQd{agCf7+%rK;Q-`Qn6^&s8y;~3JR2Jfxb{4DTM^(smo$y z)dfkQXerdR+IWq!Z+xtZuhm_5g;lgvS6e^|ih!ty;wmWW)S@CHl!xU1J!kGKZG!s$ z|NcMx*d+JPoS8Xu=FEA`nYOi-`J)FEBC;o$2VbF$^?DF?-gfRLTSJs$b_w!gk1=V{ zvNZn1nNP$k!OUr|uer@$_PEdGlbR>;fApt4x-s9JxSapO!GGHi#>DASEu~cnRL+ZK zmyPj9Z_Ppigj+L_rY3qT&M&*f7{mr(Z-oE9NsglI4Q$5EJPPVG^><&K__Q@Q^}_}u z6}4&^okpH!b=_>$H9Nmo@Qm3oLG_ufdXi`7mnR1m1bX5y2p$G;;MLr;&gdL32i#G_ z9QQzrf=d|l<`o~Y-SX$hyuEUUHEitvE#}QLhmEyyV%|=jfjPp0g!J-DV&1m?R_>Nt z#d{6$V&0<tt(|9@;`vEmQCK*^mG?TG<+jKlL|Bx2$zIQHb?t2M;`BPi^Q_*zbPUcu zAJpuhEl}Q|3bd>5K-CD3-8U!2Bj&xWX#?27$l2lXM1%XpZ<dfS#h&u9$MfD2A0CHK z7jAG}P&PG>RZ(IFb};k2CKOzy6*QJY{Qg4_p5%~be|0gP&W2{4g8RfM`0p)ZN|phJ zgZoJ}9lNh?Q~8_}%~@*yPwdc|>1201X;9*kZQw-E&v7t6SmFV<`vxv{9KxaPZc`vj zyCSypNWMJ5BSEsgjnOGIp0~tj$K<f3KQYiBP{QaWZqU)IpCdJf%<{HgdZ-}dCOO!3 zg7}k!$hd)K@YWRZdktVLdT9MwM@++&=CNWY2Mz{LpM$6baV`czqiCv3;~6DmHbnYH z*Rz+ngaa>$Q{lC~#?@w1f0yue6D>JhB$KALbjzT+0ro(K=E-Z4uazR)ha{V|at}Tw zU=AWq|Ho<(Ej34YE6Ai>$s>9%X1eMyf^xs-AD2Mr`=Lq>0eeF15DfS~r~eGg+W%^9 z)PC~*vvC>Gt{O9<kXOw{;qecGq2F&m0)d`x`gMx_E6LnXXV5N2wkAlsmq=vcW>Os5 zsw}hx&menUA=Qwk(EMe*_vv8<QuH}p;s!Q*y0aIxx>2nR)I!d~J{(if;ilxu02=G3 zHHI^MbfK&G?fCC0zUOfX6q_6&JdiG0#_{u0E#_*JUd2xreFd@oGE~%iWX>gh^ZFb9 zh5(h~Ta1t_rS>J-p|V8M9c;2En+3^Re&|a}!X++onl$ADCzbw7-n84oCF$b58m(+# z77oUgWQg^~g9`tskqVw=ij~H*D{+5ibnxWBM3)$F3-L&ha^S)+ZX+8!l^)({l<X5O z$%fyH9?sJr2K#rG4APJBk|q~5bs$HK(n|-nhf8u1FeZ)Yps$*J!(qoVSuB`Sb0qRE zv~FLy|6PQCdBSy+5=gi{B$yykrM?&zOm#Jt!L*FP+!tg#<%7U<43PZv7530i^`vTb zpW`XYoz}UVHy`D0M(TC~R15#5qgbA3pB$)ekW0??fGrQ6dM~!}?^yrh<15Uf3J*&b z#qEhd+@#G|c=a~!mQwpDnvJghh`L_9)R?<@c#3I@uHH>Aa?BT#`9*qk^<H|>+k9~) zzsQKL7WCpMZU^8AQfkk`i^zZW;VGuGrH;@6!mvfgBPu;D)S^YDA9*_(?6!uY(p!na z(;e`GXRCEo&4@*JD=%(DEV>f0kB&Gw7QOX;lx^OVTGLG7=&dTjt=o(`o(MM-`4a&^ zZ2E1H2z?WeU2pEz5t#d;JUwd509i|1@57$GllE*_<ZdE+;MMWs)Zak}c|~S<g!_kR zb)Sc#)%*D6&i$r1eHC`@jbu~I28{5yEaj!TeGpJ_p1RsVOb>ch;>N3Q_|*pU)d5T| zXc({d^Q(WDuiocZIm(N5lpfS0mYJ`}W25tNkgw@WkrLV#@x-~uqy9l4)@Yw)&6m2o z@P=Kwhj<k$dKAp+w*y9`?jV7NX<!*V$h4F{#4AK*$>-5NOWABe_RMCysDUjwx<t8a zHNG3Mf^51WM27!LGp-(ks&jJ%f<Fu(RZP2q$&tGCa>97t{Pi2jY2Bw%z8$9W#K>uq zO1|>a<WrQFDqYG;b5E6uu-Au7jue6U0<zUI;|<<MY6ShKEsGEDU<nsu#Cb7#JUZA0 z2fL-@N?9^Gcz+$($H;|Lj~LBV;k_LhMwss9vXHArwmghm2Ci^6iI<j_nL>0m@q}>6 zAo0xG8e6D5O{#UgIv+!hXO^3|PUn?B{}8Wyi-a&&s}aMH!JlBC>!2T!^UYoldyB(I zCxm4X*@%hHP()~O;4?N*U+~l(bk0K_4+xK#xVTFTe%d^;OixPlXcN)v1??Zh{7t<k z!(&<aF<6L{YJ<5_%}j-wi5RvLJMB+S#5TxXtwI#BozG?ZHOdhafUG%$ZY_eeR||+E zfkh$s1CJg|@jqTs3DzvlMV(`4$H;;q95^{uc1d#rb=M6qb<ss<`1cXz^EtE%alw4v zam}v5l!)Vz9(&DE^2`Ri($Nv12)pmdiBD%Je`;<PJwv;bQZ_d4Nr~8pY6cxS4TOIL zTUvxtuYPn#H;(cV8JvXiXOplnk&q;Xh5diig@x<MQgW$utWX3;5xiEAB?~x6^l~~a z6}VDj)+=rcQ1{7#n&TCVE6LkOUJS!Bl7V9zY#~LwSQT>|{-ya^CB2Y|Nd3_3J3MM4 zQ2`PW@BkX&oUm!Uqkxo8o-ITd&9p`r9r+?g0VS)!hMRe<bf)5ee$Vr0D4-~N_tQj0 zNXaV?B4!2it=RKVhX>#9z7C->bhHU%tR0DDMkc;y<DVJrk8Hv=dBbu|L9TtWi;wK| zTrmV+LH<s{<pus6{1T6E=AP(Jd#~ZAU*j$<qjLl-Fc&^qS0lYF_dpW*s4M)7<V51+ zDMx-(YIDKz5J(y*g+-6-nO7pr>s;E`0)1fur;50Pz$2coLq%j@#DOdwEfj2ttN~7h z#%>k!v&bvwfSh&+5e7~@biw1Fn@*OL_2;3w+61sHQ7ocV?P<W?E33YQNTJmJ9mLYg z$@S&)C-`|h5#quFl99mG3>a~|A6;dE_%;hf?Z@z&j=$F$kq5F^$M*)kt+@b%2Gf=3 zcPHk5CvCEyV{~~<k=tGT?)!gWc#CWBl4%i-B_+PP?anc-2(z>F*~^e>_wC3?wk1n@ zdGbh(pF`4|8l?Y@E?Iaj^YkP!VJ~mVSSL4x(~y1!Ne^pI1k^FEs+TKd#B1fV6)v&s zbl7lVAnst-WCQWH`z7jhR}bvo>3&BZ8Lp16nBY=vn&tcbTbQGC_DcOr0<idgbbL_2 zmmTQvAj{$ru>)~va~v=;_HnM4ZULC(0)2sys^5LV7AZtEAl4HvvD7V`OQF!X@Z|;x zLtnsvyQ&-cOYrcF@I1Izqy?HM$g5t;jGpAp{xC5SNXjK!ZI8a=jlKhlR1d>l@b!!- zQUFGOV>TBo$Pfp-+JZgT<eURl;P1dXZDefqePuG1+T>5zAq59eSCI*B#oHXa*oPZl z+T=iQ?9lUYEWTXq90>kSURBbc;}EF-TR9DA#PqiScR(TCTbu6jQ?u$(@yW+p!%F=J zpf+uRUWDyQJC?1~^~ZAzJ&vfIEL+joAG`O}%;jo`V-axNZ`C%sQ~FR~q1q)Heiz@v zHT0yV3n1E7G_8kg31@YqgV*C5*)hq^pl)d?0Y5{j5{LZ24vdZUymX8h#1sY#p)+B6 zoWpR7r#~tWf!}@;(^lIc|I8|o>$8hxj3Y%2tN=5!?66)&gGVgt$Nqlw<`Uj>r3X`q zY(UFwlThkj#@BM;`iAjpAt&Z&O6@~<Z6Yl&60*}3y7?STEDe_8E#d%foKkV`d(aoh zR=WCY25r!#mRx%UsjeN4ysP$_7#80R#$ej*)8l}hF2QPs7?U1iNYo4=!E6nq@P#en zbx5_K$MdnTwwx>vz>oX5-@IeWNYy}cIrPhq*x82_g!Lf#6Lx)5%4RbO`QXr+Tovgg z`J#gqAfj6_qrr0$oZLNiDNS<v465N(598Rba%L?i0S9qokMC9lyS>Vq5+!HUte0tq zmV^_#`{jw<1(8AW#O|%lU!>M-;1jzy(23ox+KJtT;`ftueJC*BJgqzRDnkpxmEkAT zfas*Ik942Yrs%rQnNL9Xq4Nc2d&RG?LB&03`9K?^c*=Aht>lO0USfxG9gEX;>Fi^a zRWh)cqsm$eWmHI9b}>{opa+*tbW;Y%(~OX*<Uo(mZ4O&?+N-p1Y5&FRe#Vh8b}V%x z8{Kz^v>?H115<;x3tIcDe&_K&(GLvoh7S$C!-)_Ok_Jw8k-_Y;q^mMMce`6Q!@HKP z@u6#>dbAwIo&=$T(j^h38?3QV7g~{G;TI$-Ng=7sFIh(Ka_%1DH&4|$f*Tycu3IQg zQ*9U72OVWp#uD!Y`@hBJ#O|kM2=@Us$p8dFQ_Va2TR`cY0%(tuSxqFdiGyG2C^I9a z2Z#m-sK|j5@BF&f`R?q1N^iXpHFza-SOLLqukiwSCcy$|mkVG?WVl=aRn1?f*0k^f zm>0VMem6m10P;Ena}oGT`3*)$8t^A*NiB<K3)lu*fJdHL=aryL#^M<Z4aq6eS70f? z@eV5ss;{6!+A;zOSpn$BtMsRpF4`H;@^-t&CsM9KU8!6_1|65IGYy2y)KCXbj<xro zpn`!QB3bitnm)S=1(R|7O|OT1*;#Tq_$AjeIj#C##G5>OnRPY}Af155j{bozYV0Vf zQ6>;rO9=!zvZHE~9nHsVXv}DyNG&(#g0eiCbMa=ebuJK^i+C2E3*}HV<vsLJ-a`-N zJ@jNEuBjZs5yY9;Dzn6E%t!4bk~P7g0cwTWKuqYZEefT+g$TG4;=cPruK!Ny?RIJ} zIt3xUCSO>@JxyLoxIZCL7j}$nlA}I_iGeu{0)a#wwvV5)UyYS5njFf?9C#y?OSJeH zMo63)>AUoOHPjpp_oP^Bhc+Ivd17_@Jva}A^ur&BPjFq29-^2gNnxFurjB`7qh*o> z!c`9^5ZhLLo&bN#<qJkrtac&eq3HHN9}@U-2wwF0BFIeO9b(0AAaG!Xu*K>CB7M-6 zan_zxC+JAF){#y#tjHJ9=ZByPF~SP}_Zs|kxoUZ&)s*8nj(ob2z25fD6!e^Y5q*9* z!QV5-(*J=P{0u96Qu5-!_a}lsUWZ>u@N2B_w|9~F$+W`Hj1S+D2>!Pmy8#7aXs8S= zAQvO@$y!^vNoys`+DcaZRvweUI%6qpwt@gE*~;o0Ex78Uwc@t6;*Q_S@I<YgW44l` zw=&+^%A=_gW7*bLvg5b1<5Nl6oha%*@&#e63GQ&lSgYSMmSI{eIo4Jv$}-Np&rQ^d zPrisgKZfQ#Y=!?JIUcYsa;@-l<HL6)f`1r6Q&?xw=W_}E1y=aTCeQE(S>e<1)HwZL zDZzA}@xSQsJp_N#4Ho?L)8G%W!XFYJz9$j<%jJvE%bPI=2nY|oyp6taO6F9~l;;r@ z)>fZ@qk^zD+}i5!_^p1pJHgyH%NNn-UqNHy``MOJ6>0Dbt?-dUB_7spO9cNq`6Bf4 zdKwHL#8bx=y(aU&wCh-woT?~3>@yO<PSsu%ACIm)j!+>n$l85Q0uJ<)S-VdL$~cq$ z@+S$<^O$@QeSQ#4`n$ijpyymzTM7MRtnkOghd(6|{E_lS=;Z+5>*(>sM~^2y?C8e{ z`u>G{5q-Xr`krC!JIkr)`$TKsC&q{WNFw-m$`{C4^U5p>UO0g*U{AKfo*W<cs6?<Y z)camVeV=ND|4$%_@IKWFe`<XApZzxhZr+eDqR%fS_{V=`^dDiZfIZU+duDvtcO`;- zi+o`SRHitpsbiZVt_ZkOVMF`(c$g0NlX!3_a2}s)Udh+8EjmNDzp_ls*?vyd;6mY9 zM?M)-3X%F9pq4$!P^Vg;-iTX8GBLh6J;|+o3VpMaGuuJm$dQ!P2<{H=UB;Rr#}Gri zZR=NfPM+*9uHOq+5R!#v%DDIQ`Jl>KojbPpBgQh>O~@8NeWOo(w0gWT<@d2Dj8GFZ z#P3_7G-CW5&^HT;h1MksiC$A_hZUm`{UHI$Noon1V}1TY<iPTZ(jpj}*%Q<Gh-up{ z?h&0II0Q%<(C!5ECIZ^F#RBwQJofqT!E>)TFe)+7Kbt^TpbA2Do&Jsg7>io3pceHI zKJ>fr#=qa*Ge!LEI+LgZKL1jN|NE1`zf6Z;S?nkN=zp54%+P^XA~WeJ4<phQb|!nA zxX(lE$+uHpKpDK-Ne6gWmM|z&pCL&<MhNZ!%s=dWjf5{az6u>{_OUAk4>QEdw=Af8 z9zu@KE1n(k2~S15)4nrhn`An#LuqX)Xfs&jO2t&nBzR<YM0is-I26)Jk!l-jwY}kB zjJ?K)>Jk4sOxan1feJJ|qKh_R)MHIaU~34+_<r_*T>qVvo;TzRK31*Vvkxmk>sUAH z7^OlKEt@R^eFG)X+PcET16?RV(m)?F;n9iCH8vXPLW1{;2KxFT%Rncmo@}5;cP1F< z9{EBWXiA5UJ^CPGGe3UQGSEE`WiZeWuS`79dnHI3C|P@PMjXTQikAw}LH0?+I6T=W zF-5BqRqDy=sNtG%Q%I)DDb$6XL<9gjoq&3UkGcSO9TGe+yzU0P+Fa_eKa0CCh`Nw~ zCG33PU<p4$un85ULw~geFZHiSe#Mql`UU1<6EmmnjKZIF5NQgh(w`hW^=CW*U3Yc^ zd+X(oYsloN>vhippikokE3Zu4hlyq%7NLsd6HAbz)qr$8Lz28=_DLXhGa+3<kapJM zko9i*;{hi8Wkhh^RfrQr7hS|TyE5QejHVtZ0laF5fu<c0aQtMp@=xY!JFdXUde8$* zl)-;+v0XIGPlG+Uw75kBfyw>@f%pMUi~FZqMp=c&K7S=cT}n_B%$eKl3~oWt$>w6r z$Qu6{qg}$SrKRV+;d};~HJBLkfRg~-`kpbugMg&bA{K^i%|uMN*t*fO9JZr`&%gJ8 z2S9feB<|^LCeTNSV8Fwci1%)_jJcj6IlEBz?l}phToV$VWDvPOpjEcX(SbXk|0c%T zRVRV)&AY|`dlQ5!j!`#=2q;*_=U>JU94CSBtO<egCc*sbY@`S}xQcB^Tp^rZJqoP; z10YU3v@@!;@ED5w{I%S|Q^OPE>ngp4%K5;R%O)0GYv3v{)8~JIA<Q}n1cw3PQt?U_ z9VOsk8L@k)7O-S`e@wIDJMS=R5IfOQ=-7zuwWZL$oIc3<XKN{Bx0k+s>Umg_1E=sc z-cE6FE{|K?**3_!Kl%Sa?*GY88t(sC-_SR+rI~Y=uI-rp872EeT#rZwE?yq@P5HoF z0#@qMs$g{uMit@NqvQTO{Pg+lujAy4xR4+uSXEoL8}#u#Y>58NXj6n?u{5|4-7Dks zFaH}s+Kq#_i6GUQke)%6=-_R4gF3Fb#+XW__IC`biHG&4lYkm(f|^d9dI%Y!#la#= zr|3!nEJcQN^+_Oo%aKcV;Iuv+RhW25F7_|Q6#KJ~fkTX`FzEL*Feh?2iU!=7Bv;AD zaJ%{Z?{Y(*4oy7zJI#jvfhq`(NQX64!gzpTRQ`un`@<)JG17!_1Hqt`Myi4AY$0NA z#3K`o&T@bs+^5JmBpPs)k!<T?Zj0=nUNP__ZSB}*%=<BN^if+B)hXL@5n}SpwkVj$ zKZa)EmQj{jXhuz+{~#mhb!0C{L>f1mjophX{(Yz++*U{n8Iq$5$qu)l1k#x%q#{%i zSDuR*V|F%}Aspwv3_S^i|86w~PWQ|5z$srN*jW>ex}e;^Fx^&%ytu!ySx9&b%+Mgb z=y-H=JJJgz8u9|OnFmotocalL8}8^m458{rg0So)5C)kLu0a)a<kKk5`{-f@*~7uU z8O&${Ow18MmU_S5BFB43sXql(=-{JTNaw4xJZ(QB<^(Jde69scg7_X}DEg4@e#r$% zgOhx6FBoL&JE)_p3+x}*m#H>a;Iy|F`a!7SAu?b1A`J}??CGk$<vH|aT6=i$ap{?l z+(&2R#DUr1)G+De%pLK}nNL9D>^TDT1;LmS5TsIOfN@sl+ClhV#n+5M_$O~j(NSPH z0hbeRF%s0p$2%*mo8>!V5f4JiQ6Hi6{OkcDPRzINe&15O9}jJmj5@}DMCqtC{}F9= z<UcwO38-i1$8{auX1b1k8^NW0lzVzV=bqkpndv+_6`hFUSO{`Y??XO>0dl?ZIh<oq zNPb@K>C)i@kaACtt<&8`|3Phkpc}NAXRhpk<dbPwW4_W953i46{QldX7|k^@Laj57 z{qhCj_;MP<;^T~9^$|*xKxn4uGu4Xb*q{L&$&datk}FLl-yDnNUkx^qyb9TeOe9}$ zp#{l*#w!iUnuE?q4muw>=&b3z_YTuh{8dOt@wKSy^$!7#3042j1Al;iZpz1I=2Y*S za#>>MK9?E<Wj;bF6A2k4nf(l8JgFh0W6JZ69?QfSDIa8F<PofQ6C-^uuwbMXuYL|j zwhz@YvhxldBW0-T_3zU#^60?C7%6(gz({XukT61$*#9a<uFNwr5`o>x#7Jtk1tYiO z)z865(-0ja8)|fnT!y;1>_NlGy_Y7&$iPhoMv|yO!U)mE|0+f<8faqVcGzr8jC_Bd z1tT-b!zI(=pLEsy>vA0<FD%tD;znJs->+e$DmO7kvNjqR`4+kcV}veRA&fXXteOPz zM>;F{e_uVlFEuf99eQJ8=7V!Bm?@!-{tV3gk@o;%*$*tyG1CooahZ*Vnd>h}jF~Pi z24>#F2F{q-{lCpml5$Oqj7Kj_jI_8d7@=F|ehx<NV1`W?sjt>C(hd>b>))+m#B*_C zj2wL3z{on1>#=%fj3GkdONf7ZuX$QyuNPZylsHQUgeVca9-r1)iE;_|oNq5SF;akD zm>5}ojs+uUQwM(rjm%|+O&D3QSjWg0kj>R;?Oy*uAf-YST$C6kd)6B$SxL1PA8$JY zRpt42S^Y$gVZEj!Mv?JT#nsbvG3|Cd@%pn@<DMGv9ttMf+!mSblu<il57sn0$+u!N zK;<&1xlZcx-6sKcu?gx&THs?3M#63awR)=FtIzS=>mSseKwWtfP@k<cM*nXHbzIDC z(1AS4K&CQ~qXQBT?O_wh%><-iIka3dr*y}!*`X^D%b!Hg4_idW__EADO!_k8ALG#1 z?J@K<mt-0Wfh56kp|~%{q_6*?ph;ho&H{bGipqz<*5Z{G3aN4D3X*9mNT$J2Fe4Ds z#mwG`sO?j42Yn%15sT*`RQLKb7&-sFFfnp!)@m4T>mzAOR{1-skU6)hvVbFV#OPJf zIrd9O*M*o;b%)sS5gs8Hcad8U?$Ht%P~L(IBwRDhH%^&USq4W*_)-y$P75_GL(gqW z@poRo%|Y~W=1F?Lu377S<)2k#^I|2bCvvD9-g&y7TDFt31X>XJOZH_`Oks0)(mu8z z+SIuYj)R2uBVO48ff*Cw3{Tr1es~B}A!0&*1N}FWF?3BXX`Q}lpGP@Z59!ijkJ2nq z_5c)OXkyFx13Hq;rrD!BqIi}i&B-;i$`lPNxH3Qqze+lnkv%v|sXa<mxm8@z=hJBT z&V5)x6c~6G>Q(rMBzbUN!+wFW^1Bf@BWp9}38yu8B8M|MT6QAFpYk-DkMeg0`e@0U ztq+5@`LnM<ym#hZ=%_Z?H{fPBB-HSQr#r+S_fd*zqKYA2|D!(YLQS?#C~-1jxSM!- zaCeH*3mLzPKWZD+S<#5T#)UXSqNRBEa3Bup!H}IRlTcVJm>gWiA0g8DbY$X+6o2I5 zQ1G<RDgM<?S5~<c<UlHR;099-*R-Z4wX0kF4e3x&Z+09;NgQ5M>OTWCG1l3xDY4`_ z^!lGgA)k2Ze0`O~_#-(#&=lE6P(l3)RFPEhE?IZVrx2=0A+Bdw%g||`_>BQ8#+Smd z6b)81cny*WAjA?`OmQvkkZ`3vj4PKa^`wi|pgR9unEk{Dl*UY83uOxv3A#bZVCw(~ zh^zw|O-h3)(`0=AuG*hMXt697J2*~xPQH&%XTbCTn`d&#oP3Y=JGkE~x_k@U2384~ z>T18DmWpI1)MZr9jK;;Gfxc=>1W7qm2cXQx>5(4>tbMyZGN=?9vkXMNO>VkG;CE5~ zuclkYond=7T&--wUC(Rnk?LgJ(d%q`+=>?p&z6}9EQvc$wZtcvi<S8@E_q6Y-(QNv zL}Dvk)=b2~vd$5xxBiETQ6r<y?<dIj{>_+X|10<-c0YS8>TfrGzKx%neFaCh>GI2p za8QJ&?Gx{RP5EW);4d`F378t(YP*<H@!eZW3tdJ#t37fs{)qi|;o`k&=Buo8>ruHt zGu>tx_lB)*e8X1jU-7<!Nu%R+T8qr<v~IzkWVuf32gtx!C!AX3&j6&w!|wNpm-`u# zPhg2A_58$DT9vSZ0L|cE)dB2Fi`(fct-we`%c^D0aQd23j6HwxzQyCzplCe>#%Hy7 zZ-)?V9ChORB()&z+2fhYY4g$Y<FO$=iE?H(zRdGRAq++q8N=MA#luo^Z_ANM%2GlU zO9y~KN1%E>P!Xo%Eyt3o(vZp>k>gz>$cX(its~A<bT(O}dASoOfhE$_NV1g|iN}Ta zS=tY2J>YKccknvSmUoKmXK1m@rqt45@(9k5Aw^pT4ghA*Wz*;pmO7Y}<FaE2#tl@; z^F&H5$sRbb;PNmTiyLtQO5<sd;tkmdQTkFGc=m{Y?$<II!GTBb=nQNpjMX<X#ya!k z-^v#nBK>=bw6oJd>4%;<7L7BcD`k1V3uR=%w@}bO#`yUv{TyQae2#ur89yJzPjjZ^ zH|);{W=!=!PNQH(<hY;=ftLaIpeXG;7A0R+kHTjZEEo4cq|*1R*{}*@FI<X1Z%`P{ zN+6q8ICxw%wC(2O4G7nTm2zve?exw#39OM+glW_UYFd9L%Xbu=!9g;RY>X%w8Gli; z&j~F_rfgUru5~-`OP<yNCm2kJkiZYd;&e3b2(Yh2C=K{orX;#@P+g|K6|#lu(a)J+ zvU5Esk}C@OZ;PsQSx{(GQhBtGeFL`jP0<atZZ}$hP*9<iH3Ps9aqua^P!?z@OWh9% z?Omc)B+~<BoJ~>=?!nzEmgM57(^PjR;AdB0_jeOGT!w7N!*tLQ@`zNX6;NMpJyYGW z<|fRPPyq-)lnOun)a%gInQ_jvUEClkYkV1?Wy+M6abot;v|{(T(=iN?Ti#}oyjq@5 z??4d1Z=@Irs)Kx5k<x2pm8sj-aHg*%Ocq)uN`rp%^2stCw=7SBj2IucJms6*mmWJ^ zFrGSjj_fPZG{rk<r`kuA0p0GFQDs2CO-#SqV2+5Wz!ORWDEv<nryy>CTpT)00=qbU zm!VN*mD?@OYTb<~qZ!IH4pSGBOWqM2iu}?qGAi3H)@JWb(R}d_@GJPlX*Upim8bs* z;!n)U0}@bY4`z+_;%YfrNaGea!17vIOk)ZsosZ|@;y3Yp#F;-_R1K`1TXSM5R`TNh ze){k~M3g6Qb*&oBdpa$_bqIF(G2ig^1bh|h`)hEWj7|J)D<(jRP4>v{m3vn+QtNh2 zsl33tA<Q6Yg7*NpM8bS^6#jx6bHE-qrqN}nU>{{BMZ8lgeWBgK5-lgs>lK4PdDJ25 zT-@6l?Gr#^3(V0V60f4~gDPmJnzq(1Z{-9&%j3ZG;&iTAcRey_(AE=}4(U$z8z;Mw zgS5on=}cgtJ0I|@M}!W}nl(}WYMc)B&pm{+Mg+1FONd-H8F1P3^`c{z{^^X3?{Yd$ zIrfXwTSgG4v4vgoCP3nM`;a~sw{R98)Y&tgppg`r1`xy}AwNX>Jb{tZrf&@>M1AiZ z9Jg^q`)tOj@C6Fnp~D|*r8nSOgcuHh@?4l;k!n}i;e8z3Mf(f^uJg7tpm^`krT2;F zGaBdp99ytUv`;Q@7wuCenUDkk_FjpuQR>&|j<)vAaoY2C$TADg0QMP7p1v+J&JL!& ze=Si)AAt|;*sdi)6ywL7gGYddEO(;;ghT|*2kyTd>kRF4lW0Mi%p5-Do@UJ15(m=4 z+(Frr)aJ&8uRhZ6@TV_d@?UosaIkEgw`pF(&ptz(;7;as#jeA9`~ut`zcO&7yV%u8 z#Sed)vK1Q_?MINzGeX-b#4so20|*yc>NHpAZLE@%xA7~dcT>t6D3aTI+khjdf2chB zNz&VGDMxzKx30}?U2*Ms|0ZzxvCaVm{PeYz&Lwo*uuG^VDfA8$?W)t3q=up=7M$`L z7)i7(1$#AwB9e-2-n?DWKJ7peW!|`W=yZot`w<>Ts<Fn9a~Dd-al8bcy5U{0t@Sm$ zghR5GMo$Kx=kTevtSLmQr^9=21|AWJ!qspLWa}VwgsL4hYPV8bi-I^L4z^90K&iV| zQYmC^;Rh2uV$*+;Y#wi<gp_L8Xt0O80j1ytSb&4|<$2q&4`+&PFHlX$gp0cJ9iqLl z2VhUm9#DnPsc!e_*orIr0tL}PFX}+>F3dl1l)PPS{gGCk9(6Y#b*tOekc`(#(N2)d zK@2yqsczSd>5!95!B?Y)V&~zVb8M$K-9Lf0PO$@V23VjmD^b!f$`i!^AR!ln(nt_v z+lL2QL*}ZC_8E@F0~sX08JEEF`FLKROR)%uA^}gzY*;NQNK5wc&N6e+@_Q`)DziMe z60rj+K5gCF4*4Cl{y`NCo~E^p92=?Ko6se&KY1D+Tv~6zEFU;Ey1<SELTIQ3`C{;| z1)d9=%_zzUKzXb$>hfF^?%ZX(uK*J0ej5mI>dxpq6r;`)KMvwPEP4a`L>dwa*@;c# z=109R)PQxDv2HTzQsU5zKb*(|FFrd_$?!5NN$K?>ci5IjqXp3=QDx!JC=OOUjqc|o z{xHeGS>-6H;j_Sj%pxeyiiQ?DZNW^x^K~TSmV4~R9NJ?Ys4oRxzwM0&^5>*bq7w1! z-;dEd2#UKw%1)>#@O3ZgQ3Y9Newu$cfV8dAmI}7#asQ;!$dvIV)>75EOVSE*+oRD1 znf|@F)><aD5Z88S4V)pI3yTPClSHu8KV0vGOVQszey+=Yy*}&+dyKbuuCFZz*$u#k z95b{MhLA2vU7v53_uLZQsH+Kn;AFEEtk5jX5;y{>7*Zer=Of8@SJh>_Qgh|%c8ded z7h+a-R)r4&U=IB+e)Sj+y^VU618F!LP%^<{vH<B!f^_R?CXYD}rUQ}~T@Vq|DNB^j ze5S1dzub?ict-zWr2s~zNJUHs@3``+9(7B1gaj$IL%|+MYlO7_B5m8qL~#0tNcE9K zaw-1LBxbPb2-gKrrzBqjPi8F2RYBUMmT*I<`w<{QuWp72W+TJy+ymdCQ6&2lUo1Nm zJyhayQ0bNu$`EG@^I7m9<xOAyJVIA65F~QOcFC&(ZP8_Ub;}82XAw$n+30yjerhhn zD&$rwapb3F(bw*Pc<9fEpoH+(H<#1bKysxI=97E2W23+}2L}HnzR9V{5x(aL_c2qG z4QkB<<IM)+%>v`isqCrTHxG4CH*_OD4f_G|($IjJrTVx13i;P-@kf0B0Cd-x$XM^s z`T?P)d-0P9Y7X*u%PUJM4H>VDVA8r40FZ*A#*ZMo4Ipz?0-j{#GSiZZPd8YI<WH(i ze<0VhcD}c9@-w*Ykux(w`}Y?jz|-V02sAr0M~jZCEb~)QaU#<^voe?|DyfkMyT(b; zV$1%@b{il%tFvvO;_oavYe)8RAY}z5ca(>1aK@Z|w3MXNN4ysq^rF+@65vlA;d(kN z(6d>j9Nre%4W5&p(!5R`k*Q08UUeSo`P37*3--&b;r8G;*e&}sf0J@}N9YSjXiNHx zh`p!sqTPk7|3+kDGsM?*>IQe_a7X;2FWEhMQG8toXz3lGsrF@B34GK0!OR1HYK~Cw z%Yt)ij=Y6`0VK}+Fa8C3*Bto~{{oa?8#~SX6yzmhvv$Y&G=KXt&E$>{hH%*zn9U;E z1bRkFkJDxnndidpG63Eq$n5yfKF99&V0LlES7e0C=Mm>tTdtmak=AXsy+S<$E`)-H znaH_0-A^AL5m}~DKyXa#g@j#Dl&+>n{umVW&vL+m)9?<0=Iw2iZisJda1Ez@0GATd z)ufz6ZrYPlNyqIZB6$!;>mrVfvR=jRN3nO$$~$cvq6?hjtvs#LUaHhp6rBG9E$oMC zjuC+bEAw{IT3!JZ*DSHq5R|$<;)mbS8wU5R%Z*$#O6|Y!7>WLzx}g^55L4i&(A8Wz zmI%KP=oH39Z@3z|Qo2wEa|S|ngE63co{$4lN7)Ogjlfb$ELRI`XgF|68?w6JsB(=~ zB_`6%=U+(}lqtkwV~GDgjIfAQ2~+rV72~mw-YkAK&B%Lex=7KUXzRTUqPvzVx!Eud zz*Q7u>mZt>@{@40IIfJI2aIg?S5iO5(4QjuGnxME!yl21d{yX22ZE&fkZVSy%SjyJ zjAFeNI#nBA#P&@FUn~j<R!{Tmf&Z7MP-93;&oFEqRo@OzIu5Jp>Hf`VO~c-np@t+u zTX}_7Bf=i)RgS!9Xsx65K6IL>mXV*uS^c^i)$il#l>2!)kOu%b;CEQE9G>4#$dLSD zV1YUg=mIHdmQK7&Qn#qMLFZ%rk!dbgpJYC!PC8DP;T#IShRmRA9cnidY<O6FLrA%- z32RjocgBB^2TE7giqD6@vPPLW9GzP{O|M4+RYwsV_#^o{RNZdlJ4ZfpfyQ|_aqMPW zpOAeYmmss+bMigzH@J)m9ovWoAKNK5&7MdE=!s53B76LzJr@4FKo9dF%3DNfW_fyj z?h-OqJ1}3i&SM;G?HP(mPg5t$b5B{!(g@&}t0R$+-lyiON7Tugp)XDh_!y)VTDLUx z*$J@cuHXbj9l>cxSWhe=I8m~LUU>#P2n<0%XUy6kdpuliOa@VeH$2W6o=%$-=>j6< zQjHgAhApf3Jtt;4$7TfFb(vhw@!bv5{}Yp+5wbUwatM{h$90i%vTo>A=hIy?ef8b8 zXQ8?!+(mGHoA$OI5Pbd%$pnGOagD9bk1;i1&Gn<3D&Enu;|#k19W<}^qI8Mp<2Gv@ zIlL11a)laMpXy3Ux2!BYIe`&yk}TWVqmKDwd0I=^&wg~>l<LE%`8;9<Objd@;unNa z+_3_YGowW&#uB5SqhM>8_c4dLoT`%aF|oFn=7~o({=Ck;U$;W81>|F6xu5Sk7X{fr z=og#8REnc$&t4?&(15;Xwd=DraH$5O(-FfP<O`tvQRo*09=iw0x++lQNr0k(vXWOE zq0<1kw9(EiMTy)5a?@@fxei~E|3sG52#=SU@rUra&yD3!jtu#EyTnZ;B$L5)xEm|B zrzkl02UAjw%yrF~3gwh;)!`)_DN921gnA+z+!q<I-S3lDO8E-qlngi`sXV-RuOTO5 z|0YYGbS?E<Mydgr!=i3tyZeV|>kTAYj6F!{g{RWj5k_Xa+A;WDE;8R?*Cuq7;Bo)5 zV!DIHDM}Z^GY<E#L%VN`t|rIMen`2u3g0Sl4T>1V_0W>cg=E|r<qBNs5ew-=%QlkW zp|5fh{#zZmusvlfrVs$CF6^A({)I;*IRuZ7%Kuo2kdmt|-rM#Eb@BelRjvU?^!UQN zlOm&&>Wh>pu=0IpFgI&p7VpO;W#vh;m)))3kCeY9_!w?PcP_2EB04pYy1{<M)Dk%H z2Yi=uScBP<Vfz1gA3_TJ%UpD~6=WPC!f(O-1mzA(J=jBqKdSN^V0IEn0U<kWJ;jaq ziEqdY7WbyH4{>f7sNh+MmjIzrdymWP999zN%WD2AUy|g(3JuOb{l%a)`XbkF&Avgv ztLeYW#V=4kapj{}s#&lD=N+QEncxXY$Ae6g(#}O8b}LQB`I}JtaBL_(2(i`5RicES zTp^>Y{5N$O=MtZ}Bq5V7jY(HvDf5VLPC-N$Ol2HP(0Nz+<gb#$!TbFQ)L9L+e*|io z)GEZoZveGm9k^m5=oMLK{}8R9yuTT6tq#Ej5X3u)oTI^^nwY3W{tQ608dH=y6<;gF zZL$%KW!~eavBMvA>jP3U^ogPWq&OElu`Dc%(YnCNj5LMrbs8cebmmcK$`?|#G$3ba zkil16xIg{E8}>y3n~X?Z#k8|P3-~byzP&XEGsof!H0dm*cq93sqJ2JM+cW2xo!Yr0 z&pjkbrBj-iKg$<v1>j4XjVqcv^sVZCO~4PhojyNfdgciqLa_#I+D*MgN`dsw?Oq-q zJb4uf{kwv<iP|j84PE)P6wb$VkP@<J?mZhmxzo4E)#2)lzTFSX=|2?EQz|HtmDmt9 zW=a~rxAiahE6xM-4kP*Za!s=Dgp9BRn-?7#bX4cZ-&=nz%gl*Zh@($o^ThHcm#3pN zf3c%#b6cu-;Y@PInFGR5wE<m)<sRzb*6S<XdQixm5-=d#3J9H1x$gmO%($_V7NMR> z6uJD@(QhmkNT)q@i2;I5m++;yt^~5es{Nq%YDeBKq=S!E&z;TrYSpz+h3&yE(2GyQ z#US*{fnP7#uR$=O{r*sU7LFFRcMYV5+MU7FQTd-#y#+RuM_cEJ>*y#6iHK)Hn%=K3 z&%T_~Gl+|E3uRw1mZ#2OvdyBviKc*kz$f91*()YPkpEt(PW9k(HfSg3(QE0OvI7p( z`Xcwm;34<EPJG%DnIZG;W`?5O7WWKAyDK5mwl@?FciZGO>NY8=1a6Kw74-}Xfvnsf zvDk^713M1~CjB0d+4PlBA=dv5v)CQOAtKh;WID}C_h63-vEY7eSO7p3n<}S;zU>AK zlGQG=bsq8QGTQT{8e8Z;cn94pTok6u;l}nQY0%krA<_DrBw%d{8e*(fo?78A!wMGH zJWWq%s|yci(Lkyi%s)6gNc(cRZ0~Uo#}rFO1P-+SPm+Q~#$S@8vrzKuXfP8hUo@Bj z#Z6ugCoYrbK<H%N&{ru9^}sVONX1>@Yo_As1Z7;aM-043MoN(HsS96gxNc4oY_xwT z`c81}WxCcgL_TPGBg-eb*ckGf5I@OT8S@U|R#jjLA(2o3u|<t`Ak|P1PASLiW%<q3 zz0@U+GVtJoa)pu_*I~wsx2dI0(mFFB^6P5?q>Upy>EUTRAqnB$7mT{p8C_`6PCeaN zI}Ia}X&Zv+KzU{A)gIjYnZFU2`4u08N*lN=e_L=MCp6DdM@`HxJ|1)<Jg_8;5Wz_Y z!;=n@9ysYZ?o<s2KMI{lQSMVQ1#Q*%T0Ju|?ng#tdFY5lB;)ZbI^!kzfl~W8N`u6L z`@G`%CpA1Ggi#}~-b7$M>E^yZe*u9Nf5h~q)N?HIr2XhD`V=19j(z}l=y*%<M*wIe zaceZb&_+1|pPmWj{#;C?xJ7Fl)*+?#e6#H@o-o?p-Kp*S|4eP~*4q9K@YP9>`F2Bk zffM&#?J`u)96LfMTZ-Q$yD@?>@z*9kMn)Soh^n+Z!NeadRxwxFB9u!o8!@-Q{8`b# z>6>XqJlKa-emv?5$V3)xPH|_yAEH`2@%il!f8r$&TD;d*H9@2yB`en9Xf^nen$l9d zllo#=G`#7qlQlqF;3IXfkb?`;ckgmqVTi5VAr4^sr!{vcKiL^yr(Z0gn0bDfzDZ&G z!1o$C04cz63J_g$J1e19%7q9WxX4e}51YoHn5eatP)4v{T9h%VXXy!;We9P%yiK_O zxAhK;(ceImye3T&7~#7I=)$Z|Zg*T**DhwivWEhY!DsZ1z~m->|D%S=c3V}gyosm8 zklT|2{V5G*xmbS&S#gk{Beb~PRz3AK%+nHCIF8-HCqa^*&_D507{l*;TxV(ZXP~AJ z>5twNdtmj?+a$^C{$>P(YYGnhLr(&<zJG8}Idab?!Nw?+z&|tyunuu6Hg*8h4d0s7 zD&<wg>*&HNge4MFKip8{?q^evL;~)94R4|FxWk_{f0c6g+NRyf5vMD8(}f=_U6)&b zhWa7Ik&h=}w>U%HF<=9N^TjhhY+hrC`BUU981KSmlJQcLdV57?dxc2t3j+C0=J-Z< zG+Z4@?Pd^(dX-DP)`6J5EJ$mahnlkjr>nTkq07@rfv%yo>G0fSwDk|IB{xt;8?M9S zFQnt#N0q7MYn0alm!FRR1W??lcQNkW+*RH4ZhN<!tl`ra_8pP`W)+hBRA9gV&dV#U zbud*%dwJ2eUU|6ZQMvaVJW<YEO3OxV*7yI+Vc7ra7w`X>w_*R!Y>bTBJ;xSmpT1D3 zpX%-lvAOS@q*n4?s9WYF*BqnWcj1u67l<tHKy&KggCFBYdPvtm7BHS`!$lVBt_tl| zn%nFn?zZRFCx?zCSM39iMOzi>0|4r8rurkT^^0Wv;qmI*wfe&wH&VTB)_NXUuMG7x z`KDv*4p|$%B)H6Q(XDu668a6lTd6k3`G~zz?%50Ks;P2k5x%RD8h%bn<Hn<7NQ`;_ z<<SaCkCEiyzt<#(xby&GI6&e#yc9$Wov#~$xa+Qoa#P(K=!4|_ww`JWeUcb-Cru$7 zRC(KpG!XNU6$M*S&MdSkFJ*ewjhH5yB-l}KWiBR(CJXU=-%f-g*#~vCnL@DHoMfIY zyxfkLzhu5zU&UlcLbhyjF{AZ`LFJ_)Z!$D{_<d7tZXB4&N5>XkJ5t?Bz2w=U28ACj z)qF;EKoUi^=FhsJk3}_K&=X*?`^T~yHS289-s2FAHf3#v)DjPY2nIt?tV6I&eJ7IB zNQNeStN5S-11B>RCY>e{I37tI&flio^G`YL?vB&GRXmPbG1ETp9?P_A+{fexY_UYn z+NDd*!**myHlZa>n^OBvOi5@7#rcwapk9u!Y^4_Z2>D}Q#@PjIOLbu?^Ti3|`?y9* z{CF0`vzltV?f3-vJxI5pZGI*`J#*3;cLFD%mke;)!wC9UO9&y@W(U)u7u+CYv$+Bn z5P>vqyJ{R=zx+0pLSkZ|;7u_IYmr~DSE{WSHkHOP@b?e}HejCMWuglT|B5<*k=D44 zX5dW`;o}7^8dl&}G^D^ZoZ3H<6hOW;Z0?W>#)kHsC@1O{*G<+20&N>QUQHzrB$$If zX5%dOfNi0*OW!`4vc0k&(2#E1LtDH8$qn{N%4z`XLfffmJB9m&r@gps2ZDg`)ZSRO z9M`kFDUOxXs3y|bap9+tW!)9%ikIU6C>F?O6h~PJB&m@Ea+G^fKBb6WHj9}1zvkbY zqxtu)*Zh0eYW}?mkgl-d&A&<=;V58FU||6}0*4l`A8=p+y8#Cja4EMsVk$=8Uluu4 z7ExpoinR}Pb`#3|raZLRL6?^xDe(t^UKoB>V>|J}6CO#VTf{{40-*chUEjvta<X>I zx7wIg?;v;-Pn$3&z0uu`C$lN$ecmDBFK`NB@|8Oy_*-+7hN9Hg@OK{1qMD;Tpm{Y% zc|<p=x7mTeLo8cWj!@r+!0#^!otSm&iwkC=FR6{0vaN||i=~3A5%7T*jz*7sk<Xpr zTjQV!;LRzGGv%AJV!DSnuEyc=O<K$wV=Y?uXScaO!&>DC+ug|Oj6D?b`3HO;(~_a7 z+g?C40R_J~+or1p6t@$7KRWnbJjJtg8P!8?QMya?ef;gl_7Wq20q8yt_L>hNPvUFe zhMnjf;TmCZ5E@3-OLhU$M@Gb8HtL_H4&J*C*K`~T_G@?{rf?s<@LUJ3G~)@F3_pC$ z2{{2{_&ZI2Qd`L1X%dv$LHwO2LJ84rZ|bX+2n~X2)we;!z+Zir>`dMv|NiT;II1Mt zr%=W%Vu+a#!s!}JV?8`IPOg#@vy{;9!EeAtzbEV2n`DPl>c9zY*fw2_Pooutn?>xe zBMXAf(-5HFMcc$|)K^QVg6-$3{YgZ?lEYq*Z9{_ijaP;CD9yrNa<}ue`fi~U#O<4c z0tz!&nFst&)};jvb%zc{@N!XV@1?I22_gE*gjhw(W?`rxmr}q5Zt=hdV}nmB+NV~F z$qHOc1}2EfeW(an%qU_;v+1nZKnyv#aVq)@5`KOxx{Od7e9e|5n$%b?UoEFsYz?5m z-C9I-0U8CMqW<ZP_sBx?Q3!noTAaZ%)lwu<ap4RfF7ZO4K8=;#xsh?Q5ZoW+hRGt7 zQd|tIxl8ONkQHe2ulp_bBv4wWF+*}Uk!00YCub5+?Tv#NYFio_$i!Fi?HKMu!pi^B zDuYCG8l0#h1)9HTkInT1dAo5q-lLVF;(kD-2g~Gx^F%#2Bclh`c8<@3|7YO#l}Y=R zmA!^T&=re%A0^gqCs(ImTz~+YM=ylV@b85bF(digzmo<wQTbXNEI^ylIni=t%_RSH z#~4MFpVsQT?sNU12!6w%hNubR{?O@ql}`{Nj|^25NKE0uc}@9mgGNpNG}wWuM4&!J z8xEd{TXSFp#b4AkUsL~3UbX3u==WIYgLHI5d1;<~cK$+puwb@2qRZ_3(k^gJeT>Uo zcLmOhEOZPw5*guC9r?~7FjbTt&+i%RGcwfV2yJlWzf<)k!iunpYzPiyea8Zy{b%WF zGsHdzT}4_!?8qCL?0B`(I|u?`p*<v$KrBulUSufs%K%2rR~OpVlHp)P-F$TQk6qo^ zR*Zf1p?uue)f7C#D}LWjp&w+=y0BwGSW@@`y}+Af$>LZKH#BsplL+io=i5W;C~7S| z?>i7qMjpsidG0_Y{i>R^lSd}mLaj-VruZr$+V++3T#zr8OXdu8wM*WH>8Z!y<>74= z1V;Gd<86o<*CXxh%Q)dadj!=5gGk7!0B+>{S|#TVPg&d-gwzj4sXZsu5tX5)!iasu z(2~sgY3c$}ipi5yOFkv#OrU3!JwLS!^Qc5fZz;ryIrJwQu_FlUqhsLhxHhB<)Z8ym zgsLIL%m`J3Z%hxhCk3vN8~6mdJ73MLCQu~VOo80MFY^g?ye`#T07o>5X2C3MdYP&> zbHMw$MAH)tbL8RO(KZU2gkn{E9BNyWG8$pd?cp-4b`PqY53K8g+UYC)h%V!lK%tXn zkL0*()k+5yA2K^S%8p@mSwq^>?EL2WsfDw{qq^|e0~g)>GZ9qxDcFiG3TQTPnAFnX z7R4R+Xk5&DggoHb?iSVSw)a}H?WQSpi-19&m|4q1Z~YB^>6<Qeox#gdJFm$HUv-IH zoQ`H@haj{DyEZ(H7ie-F=+KQ_GTddwLwMq~j<PF_lEkic%1b5oNapJlP*9<-$5|+@ zxoiStWE6e=41!zl<W3VT@yf$`r`KQ{F{_x@Rfq7F&Dxb?Sic47>%qaZqwkaP4rCNK zYfd2ogXzef3=HPO8DR>PfW?juyK<1}ly!3o>116pbaeD2T%8r3?p8P8?(UWA&!cF9 zZTOhcQj!5UxOOYk<<7-Z=iJxNb77F1TYt0SkbyiP@qes8w?Zpzu*t?;XbgQrpX3AX zli8)E*|{#+?*i&`Fiq<pdj&fn4B`@Ow`nUL1+v@vt#|?-xR=nR(o}q>b0s7Ud13#4 zh^B+cH$!z?(BmEy_jH&R-Eu4`s6zb+k;ugI*4rnkzp;mJa@)z}jSx7p$sQ3865+s* z+!UAq!N#Euw)7-sy`-vhsV9fP5C(}pph7+&(;r6x22-!a@40J4-hI5{bEb89lO6UY z^|L8BqSB547```+`hNw^reZ(2Tur(lm4>0-?jYOn&~UkZ1^rHGd7M7-Q<vfIg4D<9 zgEndn8pVN1Y9ty4O8BsE;9kH0Bn07OVS5p`ERH=WqgLp`y{BLl*Q;q;k&3(jG?0ui z@J|_EL0b?Dt;~F(D3kE|3fe+Ux*3oz1=l`WFglu`yv$D8c-l_m%+#`ujC7}0M77ej zve=<cbE--}K?nxqnTm40QLfFUu2Y^Xc6q?O_=y9horp=6fycy&NlwE<u+=otWA(8p zjuT=7BT0G{L@M-<_xf(;UOz$1cJN*wDk#EhTi|TvxoIwSN8Y9i@e!t<cdbP|aL=VT zdO5Slyh9{mtRY~Am~l#X7BeoCO*<h3ImIn#9<|{#Wz@)F8qRNvFmmp1wWFsdesLz4 z?xH7;H)5$}WV8fB`>~-Oq=P+}VgKiuDgt8>8fmH1TOqrRD;_ll+zItYDPl&PL7nbB zX4C?UEeN1Cu;@yN#jLa#EZzb+WOV-bflGMt(gLmUh-VQl{Sylm2g%eOp1e(BCU#E7 zedP^pXBkhg(x3k1j4bWSGcr^TgJ#4fKEhB=G9#NIWBMELNBrSt#8;crVl95s0?_A2 z&JB^<Dj*6Xnm3xO7P^=^I?NU1IzFJ$4*p@zR8Jxh8I6wTzg?B|nn9Y1Nt!<KCPM2W zhU%ngA`{$h#$SFCnVKX_0!()Z1vi7xA%S&~M;R>Rd*UWze6V-tZO_|8ZX}0rGPdcY zv;2qgmt#Tl{m6NnP?QRN31be(<{FgJ-a{tlw<3qvkAq(EKfGu73_WsHlK6+LYk6<L zC&T+21plsh@Np7>@&Y);Chnrv1mHtH?r7T&Q#|TfRi8)oX0*|4-rQ*=M47>h_4gk_ z5?W^5Yxpbg_W$CqEUi3_ub7t>X3pq|t%W%;eT!Z0I_8Y=hxYCd?aP6|K2j1bAZ=T@ z>vfDp%mecy?RFJ@MC?D1AQB#21{P!NU>YlboCF>$`?IA0D}6w!9^)*+Rd9xAN5cKI z2h5>#7@4+9APB%<nk7Hoh4M4I=^}ofK_$gS*<VDVuVz4xMLv};aCV;RC!t=>qZf0z z+$Q-sXg5B^kLP~@EM%-odbJG44Vba^Wa`EFLmYz>JyMu@TT*A@HNhIVsU>w5z7w>S zNiC^<d}oNMH{lz>Y)PF<&(JHd)}EkS1>)OktODSs{uLm_AD})ZqfZ(1O)TO*I95p= zj+*aH#~<fJ{nRIMcQSWDalx|Kl3J_5rgfq8N)6yAnmLu1#}+Y;o2k5pIeSZL6Tq(= zMqOHuZ#1=H^LNpx_LlYvqCruQXWBUgq+Uh`ZB7aq=0M!3J)|C^&xgrT2Ht4upI%?$ z^`B&2|G{$yZerC|84eTfb!Z-odbwR9XEJ`uh24@$oudvXoSFF&uHs6iiC;n6{lHC+ z(|Hd@44omd;D4~z#19P8nCBQopJhO#iC!^PLZr!Lh(rMvh@XKnXht7D3B;{7ZR%2K zqF2-s#O;sM6vmsp-!a6>Ng^8zA<9}o2Vtfql~xX+#l#}BMX#*dPfj@%FsHl|t6X%0 zwpY`N2EUQ|a)r7U20jur$jAp1U*Mt&tDt%&1XVnQSSlUjN+cW8g$R0WOIBXG-A-Xh z*bLHMEm|<y)pkCn_UrC+K!&!Nc616#TX(3y>5*!Pdblroix`{sB}flTfk!nvADUWd zF-k^CTu_>+J8NK<vxz4O4mKdAb~}FJl$p8}fiI=VzYYLucb#8STyhxaE#}+Bx*s`^ z5>r%rC#s-XhFF?Df~6_^3=au4*{KOU$RM*o{>G}`u^EjldZ<SyCA`@4m;VkTCPj2W z_N~;y0Zy?b=&E19dR=^O_VPl@4duFC$Ua*R8XhC->Tc)vI2J3o#VhjU3&RtlwTm+g zJq-a&&L7UU>vS>;<e|q_<s#q^&TUvw;Lt!^OBlD_*u`d?G?ODa6^Eo~=@?cU;<=py z)*&Sy5orfBZ6MR@Up6=wS(zpQB@8Ce(<^rVfqvL$fQNLrjfd&WD_X!{Sev+1*2e}c zdP@ji>;t{gOLS1=8hul|A|!!!>=fvgjYsKgD6Rr>wK@YPiF8rhRVOr_ZQR?;6a{?} z#h^#(>LmRV@7upbAlj<q8ifQ3a99y1TcUa5ug0?r)Jf?SrF^wr?8JHm>G#FOKseVz zRvC|&bxf-qJV&29Gh|?4fC<7hQQ;0Db-dGv8b}TpA?g%xhTw`{KS0T?+Xh?XAv)c& z92+?QSQ>HWba-Mqci_-`?f}$Em@Jg#P393=mM_vFjF$VCUY3iHT32`k;t%fQ>6G$M zBKczlfOe8UB>$lMjMVScqt8p7g8A!drW9B%UO#pOoz<nlU{4q+M>H<SHp5<0O~6)a z>0WEAQmWKaD4JS{P<EyEVfsoZJ(XI@#RCw78m9sT*vMs<Q@kSB2+ua;a~Kot^QT2- zAnOCUN@OV)N~yh3eBmdW52Z-HID8piRM0`puRrEDnjs(O1?UZ886s00%1fp85s(!~ zn*pbI3XqLrFQOP)?W|P&=f@)?ucqmGi@AM%e;spSnh%7;(;7vrUc_0KO`|MMPjb)+ zWt~5lub}-9NG4lK19WrU5+(LMg_ExBtCC(er0?z~-Ydk|qgK2J`j9Tl$D72uZ&^7} z_qV0KN&q!MyEjV`ZwkBY_$fXy=WncWkRr`SNQ=;Yi5!EJ4CP-*58PeuZFjA=WV}u& zBmC`1OfMC!i%s7^E;$t2KV1=+b(|6FAYMqYExo#bW~coP{y!)A|CG80La*VhN}%s6 zhQ6=VQ4Y0)9sj01rsJhh8|VUQqz`<QIPpjv37q(JhVmzbqVx>yPD<Gb3rX{ylmTx~ zFzh6~VRnIC!6^>3F_%dJm+qkSRATXfh`JhqJ(j^fJHs+qV?VEeJeGhW@?*Qa0IU7y z8mO)UpSFqw!=y-%r&dzRg`7^R2nVx2h>$m3p-|hU1);5P=QFLZ(SgMdM7RXhi-D7Y zvm@!fFkOyY(%VVo&#Mpf6sd!01$98|nHu~!L^Lr5K8~0gRs)a`#K0Ky%a@0^jZO%# za&s^zgnVEt(wG!Jc~7E~OeEQphC`I29UXG0tG1m=0SkfK)GpERyZ9cip(ip!!wM4Z zu_yJ!c~g8tMjEy*so3|}1f?A;({@3z;1AfXq;Uw2k1VD3Jd(WGf~)p-#oBR$=b}HE zt((yq|I8|+usm`cJW$$rgAe0fR;$3f#Kzv<(%7qyh$Hc&&9~<ww)vu0WH;4pz2@G$ z`*Pi`su@((9<+?m<4h3%8Ii1pF%MP?p1@;~^pz=<<YF)LiP!3Nsbs!aj8s`FG4KqD zPnCz7vTs3jC)|NBPo9O>Sr|>6BY6M5iT6;Qb|vK!0a?vvWnvfT3pBd8t$_Tb=qplE z@y<%UzF6;2@ILmU`kOFB7*4W8y8b5caI5a{!PvUuJm}rrZ<12wgGI&zoR^>ye&az_ zXP*4vlo*Df?av(l0Qr8R+m4+&1sPfcK}nsBgD`qcbS<DDZ0u_`5apWP*c)-<#B!3e z#Ou>#3?-Y^C{c`;J+SwFelX@}7QC5!7^I6*M~Py*;^yBl5+TKDJq?}cwYaM~X!Y_x zjd6jqqmWA-1$%L&V*nga`<3zg8?YHI;U7zWRd;AnmDbHmQ8ZpR$6PVa?B*F}H(^fa zF1GEpc5$&Oq-~$WUGp#h>li4z$LZARnXLzD8#j9!OnYtfr!d?rU}amx%CA3RB_!~s z52E7874jq;I&Y-yeVw#|G;GqZ_{6Oez6s2#IZ&CdJ~2*~!CX5d<6TMf?MStuA1$)( zr-;ua3F`>vFB6Hl<~b-aB~Ej-^$eXz4qmOoPg-an>Tv`M>1(bo5VCOD7oOd$mNcNx zrgqc%z`6Lk1-niVn{Q++7`wYV-ag=sMYsPFq(3v&pbZ`A3qDJL^l7p=E7Je|B_rKX zbg&zBZy>DGawp7-A^Sej*Zu|^8Jiv{bLH)V@d=U`M{w0ORbPmc%!qd%v>Yetp*tcV zcfjp%^dpLMRLVF9G!-hFj}VEf9kQfzIU<e*fYEu70KkJKnIVqc#@tCgIl><FON60w z8cAElA5EWTd6@0qH6Uih{*|bo)I}FvZru?4M7c7)8Ou#e%sKW8LI&b>>5z6fNoyhK ze3i*C{bk!yJ|p&~aJPXLp;!mr#ig??%R!1b{RAZ}oD9m!)(PMxsZOr+ioG`=XdO_I z<<|ljJ{ol$&by3tgs-)SZ*xSvt{LH8C^tQPn)Enp{DY_u4h>=;B#VbP(rT0mRvT$$ zuHc-E7XDGQCT3yQUE7I9ChSQ-BSX<u^iv0amI<B~sbo(zYiQXT?CHGD;J@EZn6&Gd zFxUNuvl+a(E@7`=?Dl4P<;_-!Sf%!MFd`s#&R<y53#Wkjt|B5M`57s7KxX0F?Jc7m zC>9MT(;5yBRlB8ZCAT?tYq+WPa5xKv0H5BxLk$@{%3YzON0s6YFf<euyD@3$p`*tF z7l)4i7&tq0^h9t#!yuG_qsuYD|1`cu=Q+jJBQ&OTXz2}Ac+|G1!9yP(qV^6hI9Dt9 z6c==%pjxvWok2DeIGc3Kz`zwtXH0a>ZlUwSEhS^Pw<U!D(!Vpdp8Yjri&Xn?Ns+ku z-xzC&2W1T=V`6rxEbCuJy^tLBEieLbRH_cXCiNMR7aT(f;|iRTx1G8D;Y0Zw7o?)l zH2B80AY>4WX5s$w4w+!^mh~aB7Q{>4##m;0g?-wO6Tj*K?Czvbk<gW+edf}q2zJME zAjV)<uK=HMVt3|fS>$ALd+3J;^r3DO7fIVZ8T!6PR43$nl*lEe61@P_Sp;nkCBL0n zSi<(@SxfN=Ls+3GABPH%n_Qt2xcTWpR1cjvfrM!ILIyFiF2S?ou?33pG0_H(DMF+n zlUx>Blin9E0~etqxkHnX6n#WiS*Sg2VWwI`Z^%<)2g{nu-Ws&cQ%DBlT!294x*_U% zb%*~TrU7}p>3NmXs}PyJYu)z%F1}~s99gaVA^d<9tuR;2W-rI^R=OI~%A<&>L<ZFZ zY9S<>bi{{*aFOQP*NEhm(v|_+fV)B92`*BrY>gx;C`D`WFauotj5(B&w-5-+7D0$_ zKsMfh&XoFm5<joNdV7hgU~7GS8Pr(B6ccuZqnsnUv!ovibr4^NghVg|hF+ucHbnc< z4>Oa}dC%yXlpZRTnUul|S<9uwS(GNsffoisnVCfiXwSlg%%IL-gcM3fCxwbJI2t$( z64dp;_n{Nr9;Nmhw2N;OmD;`3Wu7Xfb|*dk9Zd>OEa1DGF{Q4F%E(z$?xIAda^}=| zS(eGm+m5-Lh?fY2a5P{FaO5T#;eVRNQsT}njsSOLj=Tx|l*U{p8+nd~Nk^&m$T5I? zl-eSE*GNdIy&OOEP7R<!dZ*5yA05d_?@#NG=u{(_1!AenU)1ww(-hse7Fs{Nbv2Fe z{~MiiCw~d4-_A$-hQlF?W$$-lJV=t#*4_V#$+R*)VWx#Sc4IllIluFlnamW);K{ZJ zGpkj9PfS*;p7?2D{`ji%r%Iha4Wao5-iK?Sh4d-j>!NShYCD(-&ZsV0q{(EYChCGP zxoC8G-HoAOLuCCCYbIOtsxbCkrB-0!U_hDb`>@x3VBL9@$Y#7_K|!f&##h{5JVRsp zlH5Q)p1MuM7Cjygy2G*_q!c$}u@3i$4|!?BHm=lPPmPoii!21EL?_bKE*P4hhJ?=; z7Kz_Q^qg3NSTGG0_cNdD4j8oDDR32JGt(9rjgMJ2<U1eZrn~Kjh1NWA4qgT>MTZK( z9xs4h^`b#nqImlm#3JdfzRGUWS>#k|i-@_9*y9c`$gTdFIx!o3k$EJsMT18^iyx9l zjzm-|(evWYJTe!-_Bj|(78VR5<?6u^GtgTP#^&Mx)e}*5gHnnD1NP%t5%E&yn6F~6 z;Fufm5Tq8o45wt%af$`21t7-cMN_sBD2l)b%00mA5HSF@c*#kz3oG?o005Ls8S1p0 zAY|WEnVY(4BE-?@jN}}Hn`RSwZ>LdE_Z%U%q=Tm}#3Kt&-Tt`FQ_Dtb+36rdYaCTg zvgD_0pT(Rt+vKbmbWWrMXP~<%cP#*`j=Jmo<+(1x32}MiQoWen!3o%l*cBW{w!m*& zw}R#Hq${<j5{IXW$K^8kDkmRT<xy!#07~rv{E$ST)O|tx%p?TmuJ`CcM`FMv%>u@3 ztuGLq{~zRqj%MmR@aA7cV0&<7DiK(w(X|^G0fCuv@PWxX<&W1Wztl3|g~K`x7O0*~ zYZSW+#?31rlHONfujKvY1>iw0a9$Ti$0bXB_80XXX;i51ZNK`T#;Ly+{m_KTrQll_ z3pzR|K3|Sr8^f3Xr~49%CP-MnY<`m{i3jF)I4Iwe`S7dJ*fPu=WEXxy&MFv}>&o)v zx}LTCPtWLo>yASE$-Y4q>W4V<3LWkCF^DTu=Xz*~(-9Q)GWr(6H?WZ6Z5|)pUPI|F zWMbZEaHl$HTjXkoaO0vSl7`!<l<;o<7+tl)syk9~jY6)|A+V(&)<mJ*KM9XAlwKpi zEJtPIlZ44pL%<|Q<l<PW=!e^QF-%jxGBkV2M)uJ8Mu>FM*EF5DqXk9v@Mhj0_fdQ} z^7XWfEm5Q+Urb`UJPSVn<_UE)HY4O$7)n`I=b}ei#P#*>YpRB(G$RF$IH5T%<+1OU z5*GejO0rp2FUcWM-LRB8fh6)!E4q`GqI<*DV{qR_WSm2NU%c%FKDULALYOBN4@#O+ z8>Twj12Yv@34-X4^TPMPz-Yp5Qvx)R++6}RvCLgUXo9?b2ulz+($p;_@;Jdms4(ni z%kkAK2FtTw2I@l9V{98rMkfVMff=DEo&Mb+lE5rsIBPU*H(d%)xzJ+c`o_l#!tY@; zaX?4@jt*$*RB4S?X(v}=!&nzt$#6iJ6i5em)en7?Zw)CE1F7OS>wbtXtsZR)bd8iC zPLslZakLJ)Glc=k%${0OPIVm88pIQ?hR6=6<BH<H&(PnKwiHJ^YxnY~)w>=gTte?n zLnkb#VaNMBvJi+RCcugGbDYaYo)C1oQ+~HGc=(g~-C#{=eDtwg*R<A8FheG)_#5EU z`(>NyJ*DOD{GQ`6C}ov;1Z>-lG1w+RBp??-4*kHVRAO_hv=a$@3M;)0CNLKy2|cy# zLXWukai}u=$u<Ku6yic1rSO=g77!dr48tEW6tJQYL<UI2kR}m%6rJl42Oc9DMR)+6 z>>^2qILYa>E9**FfBIo6VJjZg1%|%E5-DMCO=VHRWf2u9>oG;Vg>mMmC4>4v_RXer zAF1HjzH*?3Kedng0!yn>PZ_(V_#4SwPO&N>60Q*2Pa0`6_68?pELhmXBb;qrW-p@$ zxR)+?dZZk90k~|@DhQaJ?6gWf>t?3|7tfO@2H7e94j=-RkaHXt(JUUx!V}ICX;{c0 zEYK0*(92W-VpCuGVPfII2Xrj-8meJ|L0eVP7TD;?<Y;06TUF+X!0l>Z#GjDjSzCnh zK#Iyjb9Mdj9X)r8Z(H$@!Z6Q44-@Dn$10@k&a;V~07tD(mWkZ3Q9)Q>%K;Qyb-m&m z=`fY5ks2Etsk5<>Ls&+TyzIiSnU}TRh+bN@wcev*wlzC`5~;KPgZn|8@JJxN3la^e z-zjyJwuX+AD0eo~ER+-?#(O}uBPAc#yGwsSGYq)t`R&ziP4(f7CuYpxq=_6esImT( ztxEl$0LW@eW+T4%`aL!!V=V->f&YY>$Qy&aH3-TVM`pod3>n=A8!`lXH(sW+c*Ljl z7)9avuP)RBjo9eLNf*=!jBm~FMuS+`LoF!^RXQNKk~0_z5sjvuR%S~6qJdWXN?aT8 z=xw|&nj2^+niM<}Jw8u)5rLJ3IOMS#=5gc%xWX($VOKA+8S?@V^HyQUK-Ha;ZR2w= z84Qb@Nj-g@$SC9#Q7|OzykM~5=|!D~)KJbtio@;A`OCrF<we!+CSa|Rxhog{55oUL z!~+X8t`s=mBYL#&CDVNt?E=LVKb7gvaM6~{d(m@SWA`GYPS}JkjWpWm0*_46l`U?3 zm>Cgljs==cIB&bOH`{Au8bmDH+Ukz{Yapt5g%hlZ)=>y~wqU#)=ZH+F2o84zSVxAM z98SW*%2h|w`K(Nup-4%(M_kSvg4xZj#BQXao7;?_P3d;X;`3FZBT-xi0n!KeSvz23 zxP(0op?n+EQkcPpf>+C|ZD2m$bZSi8h=bn5e_&9?t@MCTM2AVsFnG{Qi<t+xIhV8; z3Ue5F&NU9i>f2mmIywiUK3X`?X@Ax^(0zjvaiC&fN0luUJr+10;?FstHsl9GaCa!0 z94sNhBT$GTXF}q*4^loPj_W8n6PL&bjrYOWQB<i-<1b0b8wvzL#jD#*lm|fCeMmTF zxWy-qp<#?3VEPeV|7t@?S(4fth{+Ky9OXCITTcAFJyRYZ1L-aJ*{ltt`YR1@IZJ7V ze)hg8zb6#b#xf-g=ObGd=62Z?G0g3J{M7bwoxlB@{d;a8{{BtQT7>z~YStJUtq80M z?C4V;)E0wMN2z`#Hw5wUCa-2LH)v@7?Z{IvH*-`wS5`BKh&S`Kw14YF^i=F-{_Y=i zBD!i|A|kR)Vj{9^=8+j0Eu}0-M;4~zet`-vO)OYMw)l*xp4U_x=#>|fwy?0KNWN%G zgWdzi>!j5K<FUE}m9xdLJ(lJ2cez|#Dv2-hz~dHCe;bwyZe(b2fbqRKEZ&a&zFyBX zcdU+GHJ|-nAMiEEWXs9;6PP=?PUK-*c5h-HtPX6$l%V&-aImOdO6^6oCXOZrr(;g- z!Rvft>L`>T@(+wqTxnP->7+Bfs~J|46;~-VtdY<eO0)1us#R$&_SuoSkb-apD6OY5 zQX-$Bods(PN`b9yG*plg<USg1fw|uA0H<XK0Kp_ZgkZ8B!Z4wS++sp(yOzN5N_2}m zfpcDo{<cw8kkT~p({N7(T+(l7@h7W?G0X(g%Gj%QY31iHXN$7@uVFFf)<^I&fjmw5 zMJA{ph~snhHD^a?83G|(YERn2#5<r*8DUJB0JH@+-y_=oVl22v2<I$#<Zai)5DwmP z8kBefXR@_LhpH=ORb$cdr4a8(N^}~RLcASIhf|j6bolng8XZC;)}%*^(JfTYRA{{v z0>g+@I3nX6V)h91RH~|USdD4(5PA<f8Kx`rTh#UbAv%SSLQfPz3O!Q@EA*g{F`w~F zwvwYmtteE-7wSn~p&loPeF;>!;Aoy#wW3HJUldy-fl@b0uQ5g)KL-7D#@0%p>h+Md z?jBWEUs|@IbaYY_c&}VeeKy^%{;7t@0Ym?B)1Y)o3(Fts{GZ%PIwigQV_B?>WZ4`} z8xpfQbi+@RDE0k8r^lOaG3jv==&{VDj<$=EPjzCn!6<7I<Mcln#Q0zWVsshAI4@`= z#&cxVSYrGKNSzp!L5$DD?gCpPIx!aI7{sXCfGxy$Xk15PgiR@e?6olT?k56Vlm$tF zOthgzZhWJxe7If$0#GfJe*;_emD=@qKGcEqbM(H@u<9#!{R0n3Eu#ECiYrN-m#Opu zvxE(bndJzbS;7SM2D3}?P7&_|5PN0HA7~POO1k8w<T{zcc@3m`u<Z!6PDF<!NACP1 zGU%$~Cg*Rwbx7pSN6$fqj*Sa19<U`+a}zv9&F#slzed{;`yJttlhu-`12$Yl6=I%G zRqtF%vjV0b=k*=@ZiF*DvM_u%`zRLVMi&%%L=DcppiU<BW4!wpEHYQgFI{9G7i%?s z(IR_V){0$Zy_udYi_A0^VUd|DPQ0=1|9X*KA{#ao5z8Wb0STBa8^M$K$%{;1U$aQJ z`~aqsA(#=^Pav`4M<M;dCujpsw*7OowTJ7>u*`5CvCS|y!mo`ydzt=9gLQ}`IS|7p zXD-W@-)YM-I5@F}^65P5a{MEzc*QLjQLJA&u}Q=Vm%*@!G_|xQyVAE$@eOK2k-N+@ zA^JARgYCBT6l=B!D-7C;ybNhfXk7+Gs7zkVP3fTU><W($;!}~x|A_j=?m1d@R$T_$ za}Mi0P=TdhlS{f9YG<@{*Yn+xdTjOiQ(h_f{jqe|-5)M>HV`tU+uz;R1whl0asVP6 zOwZMQ)eYhC=_wn-dBA!)6=dj0>JsshHZ)vJd7qiJ)P{zkhZsYwHuTI~h<CV44r?S^ z<Y4M7%1{oOW9Y(mLyr9hAS}v|Gpuv4JI+re#}2uQxmS+G90P5kE7S(uo|hE7l(AZw zVT(*AuU>{yo1v>bil*|MLTIFTfw!RY@JVBr4^vZy^hVufoIUiNnE*!EQ|jo3Z!n(O zEv03+`c4e_6}n6^p;Ai%B;+)<xNn2SU3y_)aWB;@?xniLy;QTfk8#fxf7?Yk9FEQn ziLW(%F@o1Uv?hp;2)rqPeN!zYtL!OYv-s#vv{EjE(lJvA3<8=vS%x2xU<e<-#Ioe0 zu#O=q6W!_JBFr{RS#`Gpb*)$7PY16++q-Q2_~|{_<O-(q<l)>HdGJ2`G`C)zKfq)y zF9=bm+xd==hG!ArTv7xybh1$|t)6TPRQMv*$ch@cDzqfa7AOiWaZ|8PDYmb`<srFs z1uh;sBzU1^%UakU1=OXcFM46NbVZkv|K2tux?l{BU*RO6%p9(cgH(_05|Ntn7KhGO znX?Ne?`EqxiWL%^&c%*hDT{?3#cMKtr+~C9#&1scx<eL<y;@Jl&q?gx2;TW=`?tk@ zP2TIgT`&vLsX`<hwu`D?>+(()JaX$cYd2?V%)&ClJ*t(bA&VM9zyiJ01IUwxEQi&7 zC{j47ttVMpmb_{!1Rp_Bt0|36&y1&-1InqNt(Hy<kFZ}*Ix$iz8RJHcpTTN23_PPA z3Bznbg)L^dJ06`wzMt!$QzE}*^Cz0+j1Gx|){zKQD^RE|Ngr@5^sOuZaBxum0XV6t z#M-yp^Y<^YryPQ+a{%1hiIeTGPe2xS>^Yjznk+Q5#j6_zw18=sy1)n0Q`Ut`(_y`q z*?KrOY%4}ds|y{msSS4ewN*Ux8@2{zOKZ>o1Ue9xHUzmGIuP|TZ3@s=)g(idyPvq? zYuaUVK9N!@8R1s3=xi{;Qd~Ai`fVwBn?XilZViD_Tg3&%8ao_sxo$2i)P4-kC)f}v z)lXNte2$NF5`NT;G#q3E3lbm9XkAWrA3Wi6MR<}04On{MLQ5t>`Xly71u<W(6;u`@ z<|tB?14w1$D0V&-C#<yi^Wt11mPL;-KIJ8A6pO{_b!50?cDoqv1=Lspd9l{Kg1wwJ zZHBAI$qW&#mzc1#fs`DIk$K_81kfLp(A77wSaI)p-Y(19VuSE)S^?yxVy`BNtrSuM z{ahYgLlfETD1;zunxIIOB@K*3S=PWH%8qf*ls5Ja?=gdK3nMKSc8$rlBrx&YL)BnM z!B92W(QnlfVn=?R9nBb;8=PWgN8?by%8nLj?5Kp<5z=QQl}=Pk(+8{z2^U5Bz)GCt zvC?o|H!MAb3#{WoDXuQ)otuZzAzq+F8%T*hkP<RrK$T3AgJ^BWlv_l%uP%(?*}L%5 z!n1XG4*C)tjcX}oS2~jN6U{f#%#QQ?AKu;vKFaD!_@BuPWPr#sXtYsMh#D<4Y#R-2 zgA?l{WF`>^On?Nef^?V7rq*pS$pEcMBuqkhcpSA|Yo%qaZP~8dx?9~^5|C;pSQ3z8 zP`1X(Yq7HSNr&2KsRpFZ`#tx0W-{TAxbOZxKie?R^W1;uo_p@O=bn4cxkjuYxYQUZ zc-d9E0H%O{o5$DNSYIHsA-KS`AI&?Dwo&QT)to|FY*+mCm0(2le=@j6^xy)0VJIFP zbHZ?`P!1%Micav|r(}JyLK%ti7dC<3#+=03r5qb9FrQw4EZ@3-dc^>W3zLFN7t2YH z93*U&w18|koWZ4g%kwq(8R3!mq+9QpmuA6$cEbD&k+3)j3Qr`5O-LJBZ{aXusbD~B z{|24k8~lO;q2a!uaF>+?z;uSE60_uE+76c-6O>rT1YpV}b9@F&rQbZh8}6nYsfE{& zdx{)@z>)BC9+__+3smZ@1nAe=|0o!?E}hb%M|qJmYNyumUp!Wu-<X4q8o+>!B&qj= zFP0ubKERf=Uf<B1uPIoy4w(nWLfOmb&IyKE?#9G-bPa@8_F2}*VAH&0h}!$9TbKOd zc^0oX)OdvKAxaI(_@AjkfvI?tY6EpblOZk+L&X+9=&_*`90o(Q!8uR0>7vun38P{| zZs)RTFiC$UN@`eED`Kp~CFD1UABXvqmB|Io%{9X=W4V{vlPyz-3oHiOmU`<QQ#kMl z^ZzXKnYj3gsta2J!m&3!Ocly`%eKu%W5{<*vu|-Y`+~|g)W%6)FeL3ksu-z`y_-#6 z=>G_&4G0#ZQ8s_vE+*VaJLmFT{>A4Mu9OM)(1Su(pp;V+^YCYQwlqp&FRL_45;D%x zC<T?k`aBw?3)?=N8c@7!NX(D+2A4ZI?GwrOd0sgMCCG2INBW8Re07N0ziwR2zfJ1w zHjml+A|oX+E7wD}`LehObal(sqL>TT^YGXI>1#rmocW+`ZVHRmUl^6h(<uuU(fEr6 zi<o983l?RX0ndHjyu|`Aei<hB>Gmqs`z^`T5{orLJ6jWCe7L#RZ2#;TM7B3cZD&c* zw^&)zjWT|um<nd{=Pi_P7aHAVn|E1-QgU!oev2Hhw1T((5~CTT3TJO3ZxOeZSWHMV zfn$)*IGkT3>R6@T((UTiTXyS#;{;XETaNYxIPpj%mOL#)u1yK_@HfEx%Ziq9CsD>a zx5Q$N28Kgw_v^aDS%2GxrCzT0UR-M)ooI#PQYTd3mO;EMxvj<9j4f@`R~g1Yx4oN% z0>g7!jyIKC#uitF%tVjnYGGZ0Il=rYJtWs6E+B{uIh&@+HJPuHN8Lz*!2%cjEU>c7 zGOCV6Yr44#%QR2EAOuDzenxPt#nJu!)(D1o-^%*wOKpOtSeu}U(W>s`9w@LI_|LHg z+BRE_vsmEtsf#ARa~=GHbs&vj{4en@m|ya=!~YTS{{Z)xTKHczAr1e+-be9oJJKt) zf~c{_j)T_meZI+9tVxYU<FjMO;*I}QV{x}V78Q&I_raSBo@1^J!=^##Cu_|pr6g2_ z+ZarDHJdEg9e=S%q0Sn&2d(PT$L;kO&o^!_@BLqo+p+7<7`NYjdd#>bMGoQj$5*G# zA2oTF5Xy~!dV$02paXJ}J`Qyv6KEe7jL39h?r_D22P8&kPvL?MwL%0A$OpY;KyTTm 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%0Av`xQ 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%0D{+WKA{*?Zn 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%0DQ@v5W$<*8fs>?GT<)`Mm-1IO;qg-A@3f(h4 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 diff --git a/Python314_4_x86_Template/pythonw.exe b/Python314_4_x86_Template/pythonw.exe deleted file mode 100644 index 10ddb1598eb0608d365ddfb5f71adcab3f3ff0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103256 zcmeEs2{_c<+wgDflqjU#Bto)f%RY*<3E9^n#+EH+>;|DMl@?Kv5fu{Z$&z(MSyCul zWlu8poiT>_&Tr`d^gQqXdEf8)mh1Yi?|KjCzR$VOeeQG4eeQFgWq!IAHz7s{f|x+0 z(IDtGz;Hm(;eP=T5VS?0bPH6#{&D|n#MzJgjhtP4kY3)NPTqFzNP9aE4^J%e0tV@g z^FX?IAhq-ik?x)j7)ee}4xtUv(eoB9AMVOU{EF`;G9zk1{>&cv%T08wc=;n8OJA;{ zW0}i+02_nyW`GNM*ZDr&m5-p(>8f;o<2{WLa6RKa3iSMW7kg*8jlYjbUmJqXBAB5I zTiRWImGwgmh)swshaql2ISmF0!li8hz<DHyuy)`y0|c?aSrC3<=qBI?%G|EU0E$uJ zVUhdRdEp9h9S}AUJzXFSK?QIM1wm{I>uu2stPqfyB1nZHplCp@-w#1X^n!m6*g!ez z_aY>y^LzepX-O=`9}8#)w*UZl2#&B3{1%W9WGm_IV28DXApK3C01%+fAo7CvTR?%P zCD+-Y7TB1iK?J&?^8@rNpdhG9(%Z+|9uVkb1qA3Q0)hkq{w<(jdEOW|PrwL|9o7L| zo&}uwGoT>o*q^!oPW`WFz=Xzk6N!T2q-lJS0GrT2q6#D;-m=+Lb3-bekTeRyA!<f^ z86e2Sm4UPf41i<~%w3<fpA#g{fMnb>NeQG~5i!!FMPL9CZ#UaSR$+a*zLQ?EL6EcN zP83A)U<TYf=@l!140H3SDx3jnHz1I307O+`H#x^_2aFHkQqmE)KpF<DFqj6l^+|Q~ zqB)QT;+aXoa9<v<0&o)mAP-UF%1Y7z{2xe60LoU?kgDL~e0uG8xOR;zud}}}3L<%f zp1C4OoS?tvkyTugy1=-ObVXYa*J)E>O_JV#5l3rxKMIybL9z{+DsQ+V#Q+az=2Q$P zOmrpzMLBl^Kw^SLgArl3g4$~|8tpakrO?O-0M1`vt`?Z<3s^+v=5@?)Wd=|*#vJ<< zG)TjBlX~E8ko-YE<ECY4O6u6%CZr?lUBhz6DVVx4n8r2H`09ZeS_jF5&Ih=7Oh}tI zxY%e4q(^WABttNCuHtEuJ;<5pn>vH#1d(_^ufRNcf-;~x*T^m$GszJ!m;xPyz#_~y zdLCChCLgCe9*2m7Vzm1W^hs+RaA{2(hD4HCuYDveWEcYV4}<!@YH9b!=}tSu05bsG zXdBB0cq$5jM=>Ey00A^yKWPl$52Sj~*oYtKjd9$#D@5bl0}lzuM&m<*gflx6R7K<4 z0h0POK3;&VYXD#PxDcr2%1`6t1|*<nW>*IDk760NGAJm9(+Y-sW-#1q1Ved!7^<BG z(D53dKOJ$p(b3+Mbi}MhN5UvNl28RGC7#&}pg3(P!-0;OGMoXvuFaN#h4WF}R2r?0 z`2|=H2=Mm^F3fNPxjJTB0O5|;F+0#pfmWEkHd3xkW*4iVx-cxrGXUMJ=i}(>D&{OR z8RXyeLvfraP!8vvq5WXC`hk9KHo!xV(`GY?JE_W8&sD6+d);6MV+%;IT$~nVoE_tf zJH1&+ce6J~+%Y!BH%i)@y*Ecxi>h?shGna4tZU+`$Cgb<yV>cB3+eD^2WY-B4A@?r zKGPVJN(+`-wkq!ZG}p^5z^12<RN2(LK-j=-Muf0IIM!O`NWhCARRLoog#am$RXC<2 zRn|2muk{RvD@1YzN%OIh7YO=1g{eh>DiD?l&YQ&H*rFD(%n@q{+yznsSZ-kA4n{5F z1f8P+7ilwG6|~IdoB(H60Ry~(#E(>sNk=r$VmM*07|v^Sc#{rc#u(0fbeIBQEi>F6 z0(9HD#+8|*4HW#rmCgAcyuNP(+uK;muXQaT$WaN51NbuQN2&mYgM$vRF>MIKoh{h} zmbIf&^bWXK9Vom6E)##FZ$JtH^FUwMA`$*VQ1Jc@Ykz?l6Nu9uj{|-o{3sAx#g*_T z?hU*|HW-dn{e3k6wQhJRELRw;Uv}B55_mGM{!$&RZ3xQ}7P1+_Z38QUv>9jw#!Rqg z%r{gVp$4mk2Ix3eQaf;NW1H61Sp(AM=CTb@Ra{!SY;kYs69QMS1MX<)i}~)Vr7tJx z#E5a;>)P{Nrd9fmTs+$IG(I6DZ1-eY?fDpODvb{USs6INww}1IJq{M*W;)aKbzQ2g z_PDGzRrXCo&AJ(zm=e$ZM3q&7-qKW>u}o1-xPznw&}v-0N;8hNL=O~>Z2?pc&aFBS z^roMCQ$27Lz~GlYp=0QlZ&L$&wQLm%Mz0~DhxL4oa~eEYK2gv%FwPoh2pm=cKtRCs zdVw<nJIyb*e-c>thiV7{|F5$^t(w;_U`U#RJ93gKf=wvqBok@)SB?SXKqE@bCqX~B z5<s&b=#}bW_%D}Z^1IK8(`EZ8=E_L=49umDN$3Lu1YM_l1y`^&eE?<vdJ_|MZIwog zxgHI}yOA(_7zV?_U>H{T1L%0|?qfQ-evghGV(BQ#i;kYS(NV55Kq>K2DFDT3GsQ$D zfW&n;kp>cV^mbuC6o;a^>c>Rgq?cyFJvjz?0&0NH)M;n&0aLEiehzvJym<kQ?=aA0 z-1K$rtQc+bug=pa9d^UlwaH+jVLuF%$_dsjmJJMd5Y#odp*y39aV=M^>)PdTGhJYP zfi^%6)R6{t7PUzTu43JBR}M2SZD1TD2B0FCPuR&b(Pd&~OV(E+8%~Vw)54YLD{#;2 z^%bbO1GhCI0K3I^Q$z^~RED_jR@EG-s&OvZ0b2pwMc6LD?3kFwg|NjbhO68AxcB3P zBk<geIDxnmylP11J3Fy^)%L?^yP6=3xYQujeJ~U>>=dh+AQB(wd5m<N9}{USJw<u| z(1$wa*I?@5P-AFP=>}X#84OhBe0G|~sYlVU9C6JX8*pbtEtATe_XybLU|uZD3xofP z_rr$|&V}GC<Uo^$+lkW>;*N0>;=T@|c)y{E=_7befR!ivPCo`iqT$GK+SCn)0#BFr zv_l5Hf3O08a|IjzIM^0xINlf*8jhQW+ic=2zzsH0SPV%M6h*w<13Y6j1c4e6oMwQG zh!_{GW3Jj5sVm2?9hEC`iUEQ^A7rbphkTK3Fyu;)o3p$b!y4nq6r;x$W4bv``%9ee z4`3_dGcF#OQ*qk;@*Y@>+ot+B?QU0uybi_#x2fLD6*B*iRdGt7vhcJ9jZ3YH1p#3X zsM)eGK-fKMUNGWQ(`R9Xuv-8TAXY$R1iMcJ=UdQ8M4WNIY?mx8#&|v=gvuIYJsx9C z;<|PfsKJ%h>|foyZv7>OF~)}}<_uem;pRB&?l|oqG1lZ5?eV1=2#gE6A&wy;<O?EL zh+b85qo04PtNkMmu1InfGE>r~2Je+^0Q%Tqg-d=@NJw{_@%$rLt8twA07ld^#K{}M ziGj6s9mC5m17?V!GsMtKm%w~*LtK$TpfsYMX`K^va-B0`U<$s2?^v&Kpk=*|N()!i z8Ne^wz=ddu(VmuF1R9Cco{rO<kLYJP&=f&t;fgv07*v|Lq67h^cPpZvZCyGrg>~tR zHArkg94Eb#^+<ZxN`X&pc?9?Wz_*D0)%6O%g+LiFEr!mk@(p(mv{u>=$e_ss)d!kX zs&UdPO}NAKn(MZOis<iJm%T0o_~+k+jBQ#kq}N!|9tZb22+J)D9P-+FEA$4Jw86?} zgRr*$u{~YT-l@1c*@ib$pc=TXMhvrLlmjaXZx#c4!qTS$^v*7I9#ErqeI3$ist8}M zh+*P-J2CVEuy|#w8t7Yq6&NV&YG}eok-*UitI{Eg4z=hom<}E2(25SD>F_xnKBmJo zI!vL%dvusUhp*}I8XdaPVHh16(cxJ-ETBVYI?SR&FFM51p+A6N_XGc69UDZb!OIr` zcB5dc@Z|yqs0zy#zFY_}?krcHH5E9Gh-r<iaO|;cCI)c6VSRlAoKPBSvKfF~U?sBI zfVTt0TkAw_HhS*PdJYMm0ba+$2O6#VIN-xy-=x#QME-a9|55|hhagB&9D<$$d>cex z5HEmu4n%1Xc|rUF;w*@4fNu|oa5yOfK{g-;gLnl*I82JJ<1ZU{dV}5%@D{K_(*XSh zz(ycCfY=1+&j76oU?zYQLHq-x!vOXN(G^4+5LH1u1o-y=42Ly<qc_shfFBM&z_$7; z^mG52mH_E5zvX}N{KB?i>AwK6>KEaE1%vu1L9ir2-FmQ8{}N#0|AC+-i2AouKK$0+ zuQyDv=pp#&@P#0V+t;i8Dg*Bn^yfPgC?ox?48FU&fyz`+M%^e|ul>)ka3|QSKrv$& zW0)1FrwY>d0ETHHJm7!~;=Wzr014td5D~i}=rD){AeMkw4k8i6LwmsM3y2RuOa~Eu zkA$z8uzWMHeP!<j@&Ng~p_XBiRQvU)SRSoc{XOibk7@_PD%MiAva^!0x?pv|#ly<a z#Y6Upl~(}P+0(;M(#zojU;qKR5#h7|h&soO&cf}$Z=m$|P$72@xC~~j2T0Nde$*7A zpVjICjSZ$rOWQj-K~M|G13wB$9zSm+WOiH=B%!vy(O}}2ztSuK3F`g}?G(Lk|KDgZ z@yFk2#{rG>R~lX3_+M!Hba~T%rP2B3|3WjO^N|6KJ}&w=jOcvOesF0(fU#}7{i48p z(#J~A3;FnOy!C1Ux*PP1PsrEP4eRaz^03{#X80F9Ffh>J0#F&`Ec{Cj)?Vn8CcS;P zztAk`?R))BGg{}v{)M*A=MQMAaQpNQ3HgI01iz=J!L;?cI|9>;4zAn$22B>GIRn~n zb1VnbU|)g+1Kr?LfNAhswk<%v-nVT*-V4~H<OLrexEMl#e>e}nYYR!s&`DsT>W?6P z(dd1E>Awf?t^mIfLLW9ToZr3;1swtr4!_F3{8p~ahk|rL6y5N7FrP9=S0TZe!FYa! zG(bBFXdix~c>(|F0BCQ2qumBHD?r=xo4h{&tpL!<f8+ZMXhwim@EdI&(9QxHtjAyB z7`!(if93v)|9{zMJ}~JApmptBJfL;=A}b>&>EPxD?Sar}dz`m7#siDS_}gQ=ur8h+ z(B6MXMcaFVixc?u<s{^eareQ1pJC*ojY?=|I}ZmpjJF(Ma(4$3Opc#7K4)}FS6fC- zn%)q^3S@er(P%$AZzo@fc_Rlh_VCXkXdjF-+R?=gi}3~`F_0Ea!J_TFywKPHFAO9J z_yGaugYkB^!#ZQUy&-591b4~N#R=z)LHoHlV9<2YU=KmNc(`C)?A%-eHwrKwzAoOL z9`0b65F`Vkoq%k54d8O!fmZ0<217u*fjc6w!gUFtGwzVmpJ_A(GJ`PwE<lDbJaUjQ zTJNVL{QDpT@q-?%mv0BDbq);(?TvAA@qtH%b@s;Cfkr&-?cCsDqV0e}U9f17b-Q3^ ze-ZX+8)I5$rE_8+APv@r2gVOgZwRrjJ-V*pb`}0IVowjcP^{erH&CYjTl*U&jyMl{ z`aBDO*1Un1>Aiqw9iC!uPd7&|H1HCx5Uc<f4^Rx*dAUfq`$zzFNq`y>;FnRXi#tZb zO-4dSVts=D#sSaL@5O(Y;DdE=@%)|PZ}rzl{yW3pB{*a3y#7)?%53bhZif!qzfAcA z-J~EWi`fu^{l{Vz1|1Cc`1&%?_x7~M04G_`Z1ijNzerFa<0+qwjHmYrj2#wOp1wE6 z2R17_lK~Fn9iWf#cJu@`>S2#L?g_Mn@rG3Yqx4e_5b8Io5#25T5#nJ4JuwUb*5Ymi z6s+k327rN6&@IMO|1xUBv%sEC0#kx=L65XB7jRBa81G*_p}>+2v3A~AoYyH2M^96T z08?~59dK@#lk|mZ3PESI&!5viD|=*pb^g`s{lA}sA8!A5diioEQ44HQG;my?2RID} zIRA^bQS{&F|9K5Cf#-GlktYoPEFcYB#kc_m?@?j!dA<c;fPM>`>2pj1ba32*Cp-+U zzXM=!jDn;AW(N2qz$^gU0?Z1qKfv&r6MQNW#tv{6z#ITq0lW#|F95^$lxctg`Ypf@ z-oUpr{Chg`ALvK_4ITVk2kFy0{hN3o9j4p<1KsN%=<9?3k8*DQ1Ap2-&|mxmz3Lz6 zE&o98{|EZ?KhWuu{(JW~^uP^I=3m0Pevtn_mj-m?DR8e+{<D&E1O$oxc9*<)AIvvw zTpQtN7RbZKuo3!SfU`4fEE^%K7@RR-Biabu6%ZsQ`6~xOs4*b_*q?c42?UfS{AZrq z5aeMa-UzSl!S^(<(QO2jI|6bBbN(x2T|z*4zcK)uc_W|~zl|4l9D=%j>yN62zq=dK z7vt>%&U<QtGLq7QNQ{TQr-O@!lbWEh(Fuv8f=C}M*evYaz^Oq^FaYBtsG-iup=#&j zgK@v$7Jvi-Jbcsyao!%vKK9NScRL>mcNcqaPajW5tOPikDBJnCOZv(PBEe?p;)wCV zn*81x5QRjlV!d%bSa^^6pOhvmNUsNK`e4AZ)dd@{kp~oS%q1LX1>>Oa?cxh|O(%@c zzY2dZ*7gTg;p5L)j4#Fw=>|hJK|7yQ9=@IzG2VhmoQtMCd<0MvbhLBx!3awION^@2 zKR2Q(^_MQGO8skW^y;cWBVKk`mkTa#px6KPaR0&%t8t?fs^CcM=3);dd3yZWul*7d zNK+RN2TwmAqzO11*dZk({w(#ud3kwy1I>UB*-kmA2?k+~NXy8`$tz08$jd26$jREv zOW4UfVkD%ck2+v57+D8dN9mB?$Njr}#s6Hkth|iu(F;m;67mj8K(^xr2Z^JYBMuUF zN95$Bj~tPARFbv(N7+aJbJ=osM;wnF#mGv?%U)2Dkdu>>k+@)|WG~^MpyVKDCugUC zkv;m)vL$8ybLldU3W^H$iV6}(r7<!Raz|v9B$VVYT#z^_>mco@;2`Z_r})p(Wu%c( z|C$1s|DvU%7->gEJDDRA7aT9h0v%zFN&t<?OUNB{bdZ;}laaSm`b|fwQh%RwRjI$2 z$GU<2#`IsC7kzF1xthSa9=08DM#cgM@aMWw1&iNF9~|X1!L<$ZORO^%>!mCuwXy0Y z|F!BRL9e6?bx%nF^HPx7u*Y9A1=YcVz^F?7MdB}`mil)c_&4Krz<6Oi9Dt+xweD4a zQLvgDe(6uM|K+JpfeKi7(ZM%KH9^pn>=8kvhn+jf=>GCpk{jKXJWjvBN*rIm3Hb=Z ze(K+ce|b*@Non{`5dMS|b{wAGn%?%#E?A5`d_hnXJOoN`7r?4Lg9$JKJ_a~k1$kgv z3UV@Xa`yI)G7gS{NH;qVC!C$rI{Pn|qbl|9$M+|lt_h&2KSxjB1!DBi>2PxFf{!Ph zr%q~}Uq96%AU1f9vhvPy1c=@1q&c|eZK;7HqRunR0qld&DJ@MS|CEV`K?%E;aDBub zn_1$9yidhg+>+xvot~8`VZn9A?!%XB*2`iVw+|-rls&s+I9%`E{nR~Wa3A5I`@>q1 z%v0aWFFx_G`6F59qS&SJ`lgy~L*ELuzuv|)rejVgh#ClK-x8Pfo7wSUGo`M7%Ov&Z z(#l6DP8j-*ZyMMM$wDljd+VlpSIUa9wAH2K+>s-1cP?<UU6xkXLa<fy9^gQ6Kiy#f zU6y_q&A=Tgc7ityc~&MJVzP_f%8X<)ye0~1-n;OBkoA)33PNMP*yo{LcQlf1)rYn_ z=}b-l(f?mPaBM#VX>wm!qt^NLzt=S$lkZdeT3tpP7aLqw@vy0S$dyW3=}wDgMY0|L z4$7?xZA~Ck38P$&?>Cb9r)T^;>YP0K?kg?b@ACUTIMsavRNC>rV%v8xT5ct;^r$iX z(xr(K9sEz%v7o8oX(o>fZ^mAHJ4^7-#fScN)~txP)wIPNh5mf5lzpYFNT8qEXuocp z^j7~_rjz7T`#1Bz+HwT%leQlt1#a#D`jUtB^`Zab8d2R#xp2=81vr1LznXTVY|Hn( zetWG9g^@ClCTX^G@7PRVulKDP>hb2znYEx)nbi1i5>|761lSkQo<$wnlH$CxFLY%g zxd5TDkLUF&MfdgCz#V41t_+v~h71$ej8EB6H1oG?qdT2*<lb#Bnk-q;LTTYVm-gR` zDch$W^EEa@ccEf1FXHv!&!|Tn8c@O{k+x<W66VITE%MX;<Zvd<9qY6GT$yFMRb;Xt zl~%8#{>Qg`?#S#Rdw~_RCcY`__Tl^z))xf@1s&-9Y}H}UOBn7E2<WkVZYDd_TSnMQ zRAH;2CmlbEBj!}YsG^yB8;-D5_n$3iMee(T+}!lG4ic(GvPH<A=c>A7LR&a<=FIWs zJ(~AUoY=(}oz5me?PrzI(1?HX<VpCAd8Nz9`R00iNa$_EK4#4wDKYT~V4_D4EJ2{d zd*Qj`^)XR}Vm@!G_W$Fjd03+qF*uiaj5`vswe|4-1uOlZv;B+e{I-STeZ<hV;uo&L zeOHGA8g3CQotjg(_THDCxK_d1zq0mL;1tPtV7Qstj`vyxgMO6L`S>s!F}7;aok7gf zTeb(A=@^T(C~5BCv(JZ4xR-Q(=HZSskX_`k-E(;9MZEG8BwL2<IA2wkM3Fy3b;*Y> znF#HZk@&23S7*6h8I{*#?8f=Rel&>i*DdJhCVX<enq~6dX(H%ip~b+(Olxz{B=<qq zJN*xJ2d4NJQZse;gH_IQ<uJ8`$&{@%Z8I>dkk<G(wT6}{)g-=fQRtC$t04K%@E?NQ z%*Y?!Ma-eulNs$>5RlUYcL>FeYhh<hcrR&{8HpUV?GVoxO_b3H@=X*RPKWu;c0QdZ zShx(ldvfqbrT?xv(_<-Si<jJ9-biX{d)X#A@WFepIQ}r%jyvuAOpC{gXqjX+vIYN? zr+~Y}7(%s=^p}_HOewCs617V|Ik_(Jy6l%fdTSOp{q$O+m>+gCTb)u$I)5E3Er}dH zYUT~8fwH=${^g`y{?w8ruW>A+NYaD*W9jD-0&=sa8BazM2RlE_I$rwG#&ILXVk9+0 zrX+7d(O?GnY8A!&x+lrQmlldR{g>bIe~-=GO<4;Wj@<^vusO<5Tq1a)KaNZ>6uHz- za!IjrtzJ-N>NzH9YPk5E2M@(ex4s<3w#1&Uo!SxsVLTNwL{sW@e)xL{YHY=e%wC!% z?^MN;nbsyh?JThDtI|&H7-03YzEW&c%&DT#%)j=r(1P;}PT=l&GqT#?6;Wuvwniec zeap<yR7JE@@K}IqAW8dmY7(1W!zF!JMd<CtIaD@Dj-6=e-QrQ#scg3iC59$*+8q1g zpM4+zaqdUP`G+wCQ>W?f2EJg5xL$wrWDsvzekI#fP*3}7-<9R4wcQ_@15rjg8JNnt zOTfQNbNfw&vJirP1gM63@5~z(u5ON!5jEC7gz(6`?wiT~SX_{LH}<MYmkmqr%$P+Z zfpYfUCZur7VscjL7K>an_5w@YG^XH%Dj$Dx|J;|5kMGExo)txAAFA#%OW$uq7(mC4 zZ5^Y%{nSdnE~Ogoq}Ps^w+h;J?4k67$UZTp>|rZ%mr^y?+r*yjD<T8K$C~3MG$g26 z;?XarJ{>1hc$x=>djk&idiA_3Svry}6aKP~Q}i0w5`K;iKdC2hDpG({vWQXaOUz2t z7}XMcXW(m{VBIN7J=gNS-0_b!cjEomYsQ_^PQ5YtIVPWnGo)==r4+l!T(q%9@<cPf zhMKYCj+w}Q4it2gRu{Ci<}@8d^O9b$=wHc33B0+hDH0pi`(v@S5PNvnOy__W-urQy zfY{}0{4IqPK2MfhUncBLs!z(1mJzYb8X^7A+NwavCx7%Euu<+$x=JvAD}Wzyfktfi z<*uA!zsa0gCqz|v&C1P!cy>-?iE`VnC!b~YHZJsx6xFy>vumo9ChVY!s1p<En|n94 zNBl9<!H=8Zr9^YKoZu$T6|>$RR(+^*xhd)vZ{#Q+sbBN>wqV1zgfdzwRv>etZh<8i zX@cUN$uB+EG0XUJD0A#?e!hRZ*4FOOeyvACRYGE5IxgQOQYd!iUbW3^a(=XikWTiH zwwUMd)UgFmC{UU^`_hb@K$y+5{EG{xG+S`po1nl%4UXelcK2qPzTr0+@E#=2<c0e4 zu2kZ_1m@p~bU-kPqsbjIkXobO<@`W~w_P@cdpkWfxVjWSGC*4%n!TZ|PF_--CeLVX zojy%`*4m)E^woPcvUE~Udqu3hlapLX?cJ8vext>?Fo-aiaA!D`u_`BhqOMmb8nP+8 z(zn)_|NZB~O(tj1Ilc$e6;Qlkwm)JrGB06YrgDtlYB!Bf^7tB!rrt8Ojk~Q#bZ*^a z<J0a~9<;O#zbqR+aNj=j_Q_D2Jc1L8TXl0|aG{t+;%Ej2(c-hbS7gGvWr?!2ANw$z z!;q<2Qeh^WHMMG`Z~pXLXgPZ}=S|_N1p8MP&?@9(vtJ6HiVV;y2<2i2s407shiAl# zt*^TCgOzD!lSdpct&P@rl(>95i12u=G+W(bN#qm$My-BpDRH9se6?QiY-Qc^C3!L6 zZm$JT`K!f@=A40mBcXneFHdh7mT=1&I8bcEUX?Ow7!mR`TH|KZLgwd?_WR^ZIZ1<h z+BETVr`f>_oM#Z4=F5Lj-Z7#jrv2ix^MDVRnlZ^QUKY5)13KHsPCei{$+}j5z<(}J z!lW_Zdq_KZdR2x0+OSxs-VVN~rrB2(p?^?r4K9>}UyUDUtQzd77E9V1wcm=QxKOaV zz1&q|h}r1kD{|RYLeW~ssd^T;zk96Dno?(Q8kbrZzn2Y13zR!rPRj2kre;h27*TJZ z^%1`LnC4$VjJUQiT+IcZ>a`3k*l!Mb%6~p{tEjK~xLzu0*ePBZcGPXRt}=KD>(Da) z2$`#`)Cg*<H6K*6m>aVSwdp^uvn|kO;_3~hcAXA1AASpZDX4uH)r7JA+hOI?%C9Dh zr`u+pREE-y$}F0Pt*$J^Q?}Q#;GRjVamk0i9r89`Q67GllXs*v`^<vdEw21;;!0bT z4IFx|*<UDnp3f~eF*ZCM9V#BJKO;BHxjWd%Zn$}GX3A@FX&SoA^O4bM@i*s0s_*FV zuZ-@O_5fS8^p;oD+Mz5SJaYS@=Fv;llhwD8-li!`g!jRE4`1qx;PzNrHI)BklCUpr zHX6)NTr#oFTzY+bwbeJpdsHB_hj)I?^7^%Yo+q~%HSTpgBCD80!wj0IcNZT>Gi9-2 z=QU;%(My#}&2UUX>239TBeG8w`>e(9QYBSOs^TQU`tj#xi$V1DGeHmQn}4hfCM)*o z@kV9WYm}_zp6C&!qMi#Sn$&7^dfJ1tz)`c_ODf+I5kk~w=glM@ioSn~NIw@@M#S@; zS@=G;o1jv1O-kTsqN+#^!D&@2mcT(Vb~-<Niv6wPb80K9ug)<3F_XphQr{jutnyan zTOos=g`~lOqiwsNReYEdi)|d|W(IbR;x(fVOHa9JOY~9Oz>8P<$m5E4N<*!K!&};? z#xCQ(MQi+_vf^Avh#gG$bRv))rKxdeB{YvsLmB~}T_#`eGj7xi*T@qxVJx8@91y9* z_KV^d@`;$$=TA!GxmIVAX6gr$p!xUixDoX<5i-ixPvC0)N_(0>-}f`SLqt3K7A>=< zhQc*ssma|mA8m3tdp*OoZ=Y|>84NGB2H>)#MFYSxn|WzZ{%Ke@6ORs2vhjHrbxNvY z_?+Zm<<y>cYFz3OPXe3U&sl|TUl55(;~=`OmQ)$O6X@%%;nU1$zfzNU49^5r$cIKF zg{cAI8uEAgb?iNl=Ym5MGEQWET2;z?@J_o(W3vF)Ao1ZTayCJr@2lT)&hF(U*6APu z&DTTR)B3ocB-Nc5bN{Q-(OVI0hlg}(ixY4w?W@!xtI(f#WrMt-&X60!KNQt=I@Q`B z#=pLDYAcrZJ-kwNji(A{JvLY}@SF*{x3YZKT2ZNvF+h1BQ%wD7aOe;J7=Ha3$Cl?( zPN###>Y9re7(P&1owQvBGK~a!GF+F>2<s$|iJW~?C7R;KEd6z@G2zHC!ozRXHAwaF zEM<A-=f0vuo0w_Kq9ui~##+bJT;yq;6_uWg{vn}$JyS=`2lD-AmU5Qyg(RIJD-KFF zSokJUrG=(W%f@z!+SGPVbyrzEsG?4Io)-~<Q5@=YF1*vJT0}rc&8{9C+wvuf*v8JC zP}>_*B*=k!alv(XC?Vz8!@#iK&s7P-QUNo)&_st#e$tp;2i5xa-p~StsX*u{r}}8` zT6q{jmmE<P-xRq?16;3O+*B;nb0@hRGd-UYe031F+w<+^+~j^9Rw#%s)YXp5b5NIt z_3|UchCIKE-(K98>o1C9c)ho5cDElmy+-YC)SIl_{cfnb<kMP8k&V#2a<N9k+^f@7 zMw(oA3<?YRiJp^_{MqxeVz<I@GOnz*4kIE*9-W`rmXFN8BgL*#vQT8VPuR2LXjKNE zR>QV127FQJnl#&OoQ7IwF73>@h8+vVPdFQ9bqv^wzsIm5Q_7CUdKGlxJ?GAa<MFB| zP-2yB!+sL@SC!o#mzPu##_Z5(96@udQTd@=_?vA@IhH}Jx=ULN7UQeA4S3I$vr2#U zlLDVx6ela>Z1$XMrrhV~eKmahSmy~lrp)ojH^lDgGiySgjx6|B?8V>rJFhgz#An*L z+4d=NEu6kAe+IFSlp`8Mbw_9*HAurI<&U4Wh$R_F;=I+u+KZUWCW^Yee$;Q>qw3FH z7cYQrcN*blmJUCfr)Xr?`SQi1D_v-x<p+2jBDLp0vu$6-)$bzDGYP|KUDYb9eUS;_ zeX+&kTMkiC;}jl)Hcq+3#*34PZtq5khQSP-`0p?4_SIB|tawq$Gmn4T%SSWZLpELM zkC(-B9~`QH&S$G5%kl|KL>?SCTqq30r*q#hJf{j#*3$P?Nq;THi5GeF#9DfkFvqJ? zL?=szQ;kEPiiWY<ZYym}mGF-ua268!kYy_;$zuIFL+?<ELr2NYX7Xje6V-XvWl-8H z&%VlV9qv=yUe~hQU5{_YyG{q>r4`Kyl962dKD=UHjTPkyD_QMXGU}e$`miEsX^U0n z;eA#2KIiurf7@S)Ckdsh6kZmIC%ifHky}a<xAdvlUU2~{TYY6Gt2mxA^@R5uqt|s` z*22^50PcP-k+LNxE8&9OJsd;I%wSgN6W;W%H#AfZnGQrQ?g~QY?N2+FUMg^*BaT^l zb8vz+*GET2+0?kFp1y@*UC?~`THEKwmsss1>>B3yz_Zh~7?tSx)5vFxb)oG2eU`mY zWag{RXZcBrZ|goEtg3*rY*>uY9_67;y%j;MvrJluYx}jM;Clf$7S^n?+En@7csr4e z^I3_$J=p)_yxUG)V?0XgYBQ_9WZ@t&m%mFGQm>wDs#HGx5<2l@zH;s7ne2V|@()Rw zWT;<m_ty~02adQ&zfIQ<?_{W)90r?zino#&#egqdqQ_Jc$9=+lh`S)f$clBsWBcVB z(W5=)VWfS@sOVnXH&rc)`XLWflg=?t)P>cmrx`Im%ZFU^S;{ABgIHJ$8PcKJ==95> z;0gvV6>Mv>V>-7xv4%lP<u7$or|-xYx=%l1S1(<Kg3%iMcxywh9#WnWo?sCmc21IJ zgS+UN$@9p_`*}4XX;S<E>WkPTtJwU(W6gI_)S53T5m}bgMmDTixy$HhL&T<Lzg;Mw zP-=b=|GhHd)ew%=L*X;#^=Fk58k+|vSDX8f69PqrsnC%FWk+321$crjrS2|&%WGF- z30$EVHxk6=a*xg|Z@cYLIm7uX75{L2Tpf2&iXYFhxFAmbG1|IdG~Oy!67%9tV_!$X z!NxV#^A?1p()ZSU_|`GyT`OVl`k1LT9gUP2_GpG3jIM<i9)VL|Mp)G6v#(BHMF;N6 zOg1>tQo@QF_E+(&c32H?BK$G-GjaI=W!d1XWM5~#&kCZWDd*0_Qj*&o23Y#Z02j|L z&nK}V$_90!)S1vt6>c}5h_o?0xz;|c_29_xtnyGCCxeaFGy>^bN25B0zw6uc09;e0 zFT|Ry!IzDz>I>YJLFG=y<f?NEN@^yS0sLF>fgT5T@;mPA!|drFP;AYuEL)+-KB;)# zay2$2Y`&wH9Q5oyr~1KxV&+w4VSddnMGw(G(tR4{n97W7OLT0^+E`LfQx@L!F)^&1 zy&`xT#ak8K@QTW%eu<a3R^mB`HIypv{?1w%e|u2qn7Knwz6GAA+)v#c-!-YOd~iD< ze(>k%^j1Tr(f)Hb^MkLtOf$*c1#dD12K0LTmO?bUt{O^;XlkUTb#cunAOftPrSapI zPmxNt={FN7`GHdzT)^~imZ$aAG#~z+q`sncnq2ZCSsxzQT6v<4Dk<|7m8tLZ8Aerd zIeqd1Em*YdqAdz<t2TA}y!jf^5E`GtsctlWoG%nQ@<v14iY<VfyPhL(YZ97ot*vA- zbSaBD@=VqJW;2aL&ET#jEjSxV1Cxkf_33LWKR2nyMfqgEjgnrims|dN#nWQNhYRT$ zQ}xJkU-=`EmRD=8B4~>_MGFejL1S-77!@4dC1(-egNeJyug*KL-yEJDI~@G;0pwL` z^T3e#TO(>!95wcm8YGA0usyp>QgbXOScXbcQ8UpRB`f6w0%zB_dYWQ+#M1n5!8e2V z-$mm2{B;EC#4-<VtLwXyJ1=|7bWm@o0+nB%`Ca+`Q-S0An`iI5Q^cTOPZuW*+Lvq# zVrUGtUv*CA2MsX&FsBj8qx)5Z4*3d~yvXq&T97ifOv#ytjt)DGwmJ#sXK;CrX=g3t z^N`LCic&9yJBdqcuG{VnPKNeQHwo?z4ol6^GoV!-4xJ5mW3Q?R7Yv6FXXms79<DC= zcF+5qn?vgNp~uU3Yb&{(X=`urUqq!jCx7JkVOw=OnveRHhL=@-J~Kl~U$L5QnB~W< z2As(k<Wy6^tGRr;PuY_=IP6{?bX?WUPS5W$m-5H6XYwEaD9T|n>IBy&ea+}t#pK7- zZJm8$_vcoxSZT!1il|U8dqfH3%#StBj&X#ivw2ahrhLYlCDgesSKnK?%{0tjogiQO z!jeeixF=6@zt0g_+snA)>ds*8_@`TYu_^cOHx#b<sev1Q3R7FcB4funGT1w9dRR#+ z%jX026w9P4FZp_2nYVnG<CrMGJ1yJ3GA6htjOmh;Ko~V@$R(k38Bc};Scb~IiPBiu zd$;%Ha<GSc*o~K_(4cfgJ^?=7LoYCm+s8cB!01=@h3;Rl_=+>U75c}T9XIb5O7=%p zvG4g2tShq#Ozdh^SNvZ@tLM&@wChnQL&1uibNZHnj1}EP$swn4HY;x)KXk>FgqkW9 zDmMFQ*8{@g%7!7+&Xs4=S10D}11qUZ9bIkj7{E#LS_Ecl$@x4>a<Rv&wGO>0jg*FW zS2b^P%-`x~d?!Kt_Ti2KnUsblWXFiS@u7;1HGd9)O4fQ5XR?St$41H!RTEpL&ng^r zc^_iz7OrV2Kr^-sJ>!mNnH<eY>@%2b7NTObFSX3ocE<LxhG6=pjy7KVmd@44a}Ov~ zg0dW{_qGGgIldLsshi5rhfnML@QQ#%-?GxUnLBUT8Uot$UTZig@X?PERl{|DM7{D; zT~5allk$^q1#FW;PCslj>3cLW)hWhks4Z}lbG$IA453lfp{SWi5LnsFa-)J_2Wy-< z>6Une>Jm*{ul(lY)wU|agE3Z0U;mw?$ur;l{f3wBKP5vapR1+a@9WfE`m|_c^S#k$ z4cu@iBE|MUE>!m%%H_f1deCy;^}uUWN2>TO<J?tT6sln^C06}hYFV>PMK9H4ZS@GO z&2P8C*v!n#UaU1;<&tuIMm<}Nmg}jD3o%it+=Ozpl&Vsg!TPN5l5<Kc3c-$^I_dL% z=<zM5$Kw^lA*&__sO3cj&&h$^!6uCqbG-%zxvzr^d?7`J>McG~#^F=snUWg>d@jZm za@}J)-WpbO?~;bAYIEcDwa~$qY@-KUVFu)t?0IozVti9`Af|1#05#jK=C`n1FZu0T zmj^C$>5nW8G4|f(c*{O%HmF#HygyJ|BU0?U=hzR+OM9^`JYWyICAj0n+fb8iONe{Z zOGDXB#8~&-{Jdoqe7D=<ABZ=ngU87;FMlA`Vvg><*{T}3BZ&D0c&j$(tA60~9m}Z0 zKX&RZ!E#OWGJcgq1H7uWg><xEm0yGctGSR8R1ZC}!Fz!|%pYVc_AFtdc54VquixdW zfZxgp^~IM;j3Fgz+S%&qZtZB{yM11YrFslpKUgVkVd#bzK?y+&6C#_$!(O5p&N8yz zkQBb`>N?y$#X?XWFul0qZXI$Yql9nUfX>W}^&XFrk(U$;g8|l??BrWrdih-9{ic`p zTD`;_r@Tu`t~Is}Nd1=c;axK>TwRiy@cqD&2FZhU>W8Q_Ehs89LNx3ZDs_eSc1Bk0 z(GIzuOpl2|bG+plDJVNn-C^O*ZL~uA?uRytgwwc#E<bK5R*H*x9gBW2?06oJZDS9- zHDe8(Kb@g}yji`(<Lbc|V;TaR3c6N9^G+<E`cm^;P?tUQ#b?XG){73SC0+T3EDJi% zmp%?c;QSL-M+jm^m6ERR!1|$Yz3ib@D7WRQt9I(eBDV%Uwx+d_C53zHECc1K$h)%{ zbI@%T0q`d9wWlu1y7MdRj&tw&daaYdx2*WGGA3v7vZc~IqTz%&p2u#tSLeIB+x!Bj zTH4bHH*B-L2#^6}58)_}gdr#SvX$9d-{D&?sfVHZ9BKjBkFcf!sXk8Id$HH5rCWP4 z304~HrOJL@W=|^lI^XQ}?7olxq_H{e>#Nyd#`w|>)0}0a*Q{w5c!L*d1?FyXFGRz( z&b7@5+eds998u5wF<(*EY%)l2?PS)KZ8mw;`8vaLC~1V0fnC^dHUB;^KuY7X<=Sn- z(>G8rtu#!J7%eD%2oo5-u4r{7iu3*FyqUuJKy|TE_6q}<?&YY!hs_m;^DGX_D{m&A z9#|Dd9<?Azq(dh@w2Hiv9~2^MQ<e+6@U9Vh`vTr*_U6UqFY|Drir?sn&1ajWB=omd z;$6p{SWt~ZiD^-;?%N+`-Pto2iPp*H;Z3EqN_o7i(Fke1{*`AT|E-SqN@E)&|DkmC znb%n4!;WQY2}dzy{!23Jx4yzPmRLq`dXv%HtEYEu|C=ch5-V@tw~M7WmSz|O6A4L+ zCe|Y6OLILTuJ&BkiUJmMa}pJ<p2VWQV-2|n4MK_SVTO{HKC9qrb9doc*-FP{KjP2# zZu6ld;i(J5;p*1LgoaTc|C`O=%^^piZLm&LZLL$)h*TWSU}isi1iGrHaNa|m9j~ED zOfSJ37VpDLZl&bC8xAL$a4#evcmjLB95196<izXesu!=hzQ_khW0REbpwR)Y$0{qE zlVivF|HvI4aPp{75Au%E9c^c(V3Yk%PA^+%NWH7uAE#HX_xcrT?A<Ye{T#M$Rek>G z94+hHhEAR9)TRdH5r~R7&avL(V|bh1<jYT}=R>F}YId2S70qWYgK(Bo#2c(Dr-kbt zOd47SA};v}q>k=Z5H605ub}CgKfzN%GZ{m9Clt+tFGuzibTs=c8&jY34!$tY(g*{V z1H8zA!hFJuiOE4@ymqbMeZjSJKSX-)^`n`BYwh>jZii)3w{7k%DZQR#x;PRWay#C> z+B3QTczpI9sghNP<*OqIaQ^@k=^5J3Y2MkVvH5UcXGnDirF+42QxHiecdDe!^Zf*m zauVT2Z!qQCVrvOem$!;d>5}pm=vfJ#r|nAyVOw8$p88B_dFPkoDvwwb^VBy#M9pot zQEqH*;K3K>#7}lhtE}AICRSqHy)4ytEjj<ogGz8K6QKoBkGj>G2%Iciq?X(O$DU)j z<z<<YOeoEzdEiVUn*RWYZRFvOklg96T|v|G#N3v;j#^9Ig_&(=T#%=C>ZVW~rGuRd z9ZS#3ns@t?c$w|u$bP3i4)*Bi&5vLpXy*j{EkL~3gyPx8zAb`QMc^%X<Z9>+#qsV3 z75(!f;fpimm)|nENan%c+U_iCDut^jm*szNsy!1nd-nOY_p+!lv$d|+&<JU_R7*F( zQ7zG$NlFfQ`Y7C*?jSMmlHum|BlpJC`?C`h9@8$%U!yg+byj81AnsZEb}^-<EqxJO zJH^v1UA89B@s04{aw#9zROp~&_obYJJ*-e1Q6Q;1(dnieMFuyvf56mwRn^E3%__!j zOs+Y|{jh_W*$A$sD(O(i&GOACCAUXbzFV)nyy*D{Rh5X&_IKtJ^=PmZoMu;lHf>t& zuObyso_m6LvV8WsYK7~RAOFtpw?wE<&Z$02j_egnGOSU39-$&Jy);ud6|!3B-?uxj zc{_z$h-znuZpkoN{>r4@Jk-n+oaVGzGR=q@i(Gy+l3QZR#@OmC_xyCf!>fpMyyj8p zo__n$(LttMqZYl+_bMet;#4rljA0JT?XOX{5D#2O^(01&_YX+n7_g^3ewv+tunY<J zMYcT>d3{hgjmNu}QubZ>OXUkhnXg9;msQAC_y?z-0(|X*Gu<DLI}QxrT#zb_xoXdY z7u-snbh<Ra8umGTb(Nd>#nT@FkoZTB%!m7bPz=jfI2PyPmgX-?ejlpHYu(-6qvn+U z-T39o``p+5c3V`6+}>6PbMAH=loGu=s8M)sN1BnZp^mbrvMCcKn6hQ<{wVIDH0sIu zH<bIaU*G4DuMWnP8<gD}${bcMCPudpYpVB3+`BP!zo3iD!EZ;AoXQqHEyVNv0sEkv z=plYwx=~AW(d6*dkbY_WBKgjfOwE1l!55|4SBKd`3%}b=$xGEFdv@Qtew(mK3)erd zhMK#03Ex)`CuJ7nH*Ju#FU?;pzv*-9*xLD&-a(y1GC!;HEkawDz|R(D$7dsneD^+P zH}y1k^*DL29H?WwjPwmqd)yOZF}6}+V$*(l4|FyF;%JYJSSnvURDQAf?mdD8cgq90 z^uTT>;!7^J#MWVK2SH(q<h`QMh7u?S@4%gl+gi+5s0~`c@t<s$-y~N;oBwj9VWP8e z>S<^0JN3h(ea?l0g(|Jao)sfUf~O_QYW1cw0z=g(xPpC*qv#t;3qEn4&-yw`mbEtp zon5A?4(KJII8W@4x2Py(+61K5r&#Q2V!#K7={RRsj*xMK573?O6nUoYtMkMcFQu4~ zGeqBZY*Og2(Fi_%$yDPgvsUABCuefg&a?s>TFO4ZCdh6t=`iD)OGy9i(}an<S7k10 zUCKnOk&@Mf>uuT;cMswrYWMExpMx2t9eM#!?DU<MIr}Z}crwR@cR~-R8GVZdNJW!> zqzotaZJ+2IT2aa`pFb8nuNE|}`KrSnHP+xS?rJM`OsxH;ie#6s^`|969UIGw9=odT zw(YR=Aoz`qh_pC~4+~!oRQ!?|oz>AkmCgaakjW61Vl$fy+`9J1*g=G57sPeBgIYQs z_TXnmCpl}9?IiehjhwW0oBU$wZqoOfsq&`r*?d)Q)&`?TitMgi2imQ52&P74oS|R1 zjo&^=YAHncmeFi|^|6GXcRV8##Z64TeYM#vWWn!<W;0tT{>pLQs$IAFnY#6J9>)g1 z=C_R_4?m%_z3h4RE<P*)xa1H>sG7Jk8aLgjap~0>E0~`|TCLlJE`wWOs!ngAcILGH z84pQmg@Iu;ivQ!#78Kf>I8GDDpJV+{62doG;x)jP82+ARZiO_lzP!KCY^BWl8hdyG z@<KhzJfAda7>>8PZtorNn|PNz-8l6%m$>{+4<WT0ZbLpJzv^QgW{k0|_PudO5tmf_ zBfT!b{&kk3K;e%LYkToAdH4SP;`t`?1~)XCXLFYFIEX4qt5a#3@SuhfDT>LHeQ2C= ziF?JYG9^o*;>b|t+5SQmYH2mm?%~z=N+&(vG#8`zGj^+<_dGuzBn3=;Vh=J%B1R9z zU!J$!Qf>6Ht~KZ>%fq7Us--9au36!}!Jqt#Ld3$m_zxA(wl&+GUK4Yo;MdoSr&C#9 zym*wj>-(qJ(@|Z4*|EnS_A@%1@o!%aDc^bWnCVVxwR_nsgvOz$1^LyVu@)n$Zn3C$ z3b>@2vbig|D?+JhooT`guhFqglys!^h|W^d{I<5Vyt#(&hT`7a@ZjYzAt)I>M?JL= zJGWqdkldnFSxn&7{26F%&!s?&w+vCwO)6bJVHd4fIV(6``T51FF+Yj%!>7Q#+L1wp zV<GK5o!7fNCb}}^@g*1HNjdo=4}5+OE$>xK{?7P05$!Z#*w-k5UosoT-*~kz06se< zRl41gZ|5&Do=DL+&ouggV1;jA&}$M~r5dGp@1#+46&>^rhp;%Sr-oSblMI`)89ZOj zYD<Lnw)F_L@RKqpy~)1TNR?{`a8p;p2<~H&`2*lffT@=yRMl!iu#Na?7wq{nSCot! zYY$S$-Qtn*L*F-bm^bHKS4+t%mdOHNa?CnTM5&jLT($EP$e#^bN^N|VM-1IzR>I}Q zK`oiTv)C%e&{|04s;qD8DQ_x2c=j^k>bLS5^dF}42H{*cr)GI#j@af^8a7zqq3B@S zpWDVHrn-vtUMX1~&9TCV4~43KuidxDW7)}Zn43lO>Gybk+Vs9Pi^hC69r8@4)x(OP z9|(+?r&+OPllbRBw~zwOBgv73GD<?%@Edjc!n$PKv@(7|?dRFSPt40kkA^4Jix&eV zH8h?{hPE|<Hm94U<o26^x3#Z<nhK^lwTx{Inhwh&GHLhw2l-DfA+k4DO^O#g=7xrZ zs!reD<g&Ff_sq=K#7zn(N$%m5S$DVl_5}8I+)vV&a@uiq*O$T09T&+6`&&1%v#xgI zTLaNg0`IQj7RETNg*TtIIf!h<Y`^rZxuYTJaA=q31xH^=l{cB~mUE0VH`LW%-{Fa} zo24Y@bw1x|$(3wPYd4zb3(?>Y_E>K3RyPmE<>qgizyBQnX<tZi1)<dRqeb7n)?&Bs zpDJpjh;kXll$3AhR>wHtYfw(H`&l)qZw-E+h5P-<5Bh7;S5Gv?n~@)SEA8xEUL8Fs zK=XQ;fF_Dn32w#r+&Vs3TtCX+Ffq44L)IL{4wY*cO+GWg?^W(ZC-sVde0vNWF;L}e z{9Lx)uP0Z2&PiRk`OdQ=NtP%08J|eZVg^&rkO<hB_jXBs=%6Taje6P|@rCS>|CqV> zy%RS)G%tHCLccXAARPQ`J={K*Qxfv9OmBOi!}0+E(PqZEe0kcIE23dCw!?}3J5gIh zyS9ZbO?MVfpNk|AOc_Fis43!-ZEQ~d+@jJCRNq;cg142{f*wH}m5G?=tbqqE``J%f zW=a^<Ro&2oDA%fH+Q31Ksb}58buT1pRr&2s2t1yed3{`DhE6Ul#O;w1n;(c!2`JUu z+x4*%KGkN>V!FVM#E#pxi+PunP-bqyT|49XnL|qZNUbH*F!j&P&6hMY3o9ik`9GH$ zMq9bhDR=6nan*BFJm``to0&UjYQWF8R?pf|@g6Thyk2d}!D#qc$iFd|%KGWKRHib* z;H^NIOiz;OAlOxT>`YnxYdcL}4yo#@U8V)^f%agu1#%Zko)}r<TMzDQRTA`^s?1A| z@0>Q=>DeH$on)BFn%S{>+Jh*Nlds<E6}PIk8C*WA#r@n)>|g>P;?$p@B0@^z4{NlO zbH?zyzGR=9<cvTrOEw!TtTJT=#_O1W%8Z*G+l7Tjy73K-T=Uuacgy{EOG*UA8qF{8 zkXq%(TXL5&imb_}T1whQI(nej!^u+!wIu=YEUVBR+;HW?H}rL~)8`Pmw;6k%#D$O_ z5Y$XomQBlDkCZlwcd2l_BjC1+Q=A#&n}$qTJxMo42isO39A5Kw`>3L+#~z9AtX|3C znjf)gWnO{GhKjER)YU2`H;<@4%g>3DAEY!ErHx|Gmr)?I))1_^?Ar_!SLm*s_C-s| zC+kn%rIh$riF_fdrOoI;NuoPahZwHzv2cnUPTp~-bBrM*peK-&HP)Uv*(-j8HQX{3 z&vfCPH0}5@;SD#lS7Ln}Blzy>i;r<2tw^FrXA*xayW(KFsMc59_13_xhq~-KOVjlV z$-%7X(aOVO72w9PcJH}5c*xm%aH+CyUr0Ake|4W;0=oG6Zm478gpH}g<QgMbW3iTb zJ&CGKXO@Ih!_d!b3H@XEz`O-$&vv_J9x7P5TZN`kMc4SH%jN=-gRtS1wn{~0hlRQR z#7e?BwP({gbIkr?Q^>K9ySf^QG)rFa+P+m0{gSV%3GJk}BxV_eSeaDc3%)sFLW~4l zaV{}sNGV=aG<cjIKfHigwfI^T<8%{+9u00;$prUQZ7cl4p<#qNQlmv@TKJJJIVY(W zQKi0>*=u`)B@0xgH~#h3^94l3!mvkZdppzW>H5R$>7tTL!gj-kLDvV%bhS}6qn}tG zTd(1x2sW(-LM=|0S?4J)sSQu}Moj0Nt~yBVp6y~H9G#jdNy?f8zZct%zg{p_c`-r7 zeXHF!I;oCLNE5iJ`joOprr4N166N@`XxZ?sPn24~L@G{?w|rf`FGOhisWN_VfMh5! zyt2*dl~T~5g9E@H>rIRV&VM?%&vLJZ{)e7n|6#^t4{_hz%fKQ0$V7)m6@3v&{n<4( zN4Q)#|Cx{CRZQ&EfBRYZY9h31G>=%uQA_Ri6e;5`f5T=21*jxM*qrILly0fB^ybr@ znu%4fbm}XJVXgODS-}jJvEXyS+tk@xn5y23#r8|`{K;h$@bS+eLLEHymqUSjSi+TN z!9_Eyy<<j%S?zSqjr4n^bF;Z+0pXSS?lsl8W`X2G6l}F;bz<);g9=`=*J?{g9<FeK z-Plr{+BD|%X?g5(wP!3@w*E7Z9k<Yk`o4Ma?N3!DQ~wX#&yVw@#+|iq41#7Eeb0CX ze%$_p@sGQ~u66rvWZPXW?a1`Dv0WHZ+igkHrA^rZkqGVbuw`>D+K31ql702EU&uK0 z@OOczNAf*7ni`XQyxZ`|GA3yQhizO2*d45y0y%oT?DL4g{l(17(doIRvmKNw+hcle zfu@h@i47FkY9EM8eTzhs2QJEty-U1Zj<{?YDA_ju<<k4?&P|&%whmpR6)g<MUCs-` z0#mqh2}{Kmr>2__SSh!g-=CV|>v>Zb5m;nmjml5YKbat~;{&BL4=SR%g-(3}CZWYU z!w`0K-!!3bh4Cvk?ZUE)?o{!v?BV&Nilj{KVwR>$%i%U@@!dl&tb=#x+)}Vs$l<zY zjkgZWKba$0$@2+AjJTmKPB}Zaf{!8wig`6m@s_qZu7bncfhSqpUN6Vyk_7~Ud3+CJ zC9>X3c&<qJw_6<S>?8Icux3BWySG-;gkWQsLEW>f7C|~d9UZ*gX~?ad<H<u!Xi55_ z6xTjnoo_O`6|~@Q(42O04W|gHOn#79mWTzve%sak44^g;EBG`PC>O7VS8ch@Z>m7% zjV0%371%i44=cx0vz6B_hpPu(KRC(YlG7Yj@neAjYrrco2YU<uZHq5r3Z5v6Uf`HS zeC-L;BJzc-o>*R9kt%0={iB#;Q)ub}tAi@J-bHR#$#E?u+Bj$Dck7_Mw`%C1ZA<F& z;5YHFJ_K+}_i?Vs&s%BV6@E->D^#=6R;Z@dSvdIfZZL08=F2YdS;{c>ac)V<IorHp zJ@cg#OD`w0Dy5=TW=Tb(PZOcj+JsYEpC4>7O=VS}9<UwA^!^|0y#-vAOZPB3uqg!v zEK)#GQCcJ<Bm@LONhKr|B$NiFOAI6}8l)tokratdBS;B~5>nDq(zW-UX9FIO$Me4L z`M&$z-@W($&So+DnOSSinl<xGtY<xYmR4+iNRa!LeN=r190(nHCo*c*bnW?`3zgor zWDpAQYA(CW%+jp?a*A2@u8V@;_>M}7yc=JRkMXF;d3;<McSF{tgewkhyI-x}P!8N} zzdPBCsPoW(SWo0}v5i|HA)ZzW?gSoIM8^d@^GPq^Z=AeB#2R83XnThI?bSeEbck|M z{3$AIs?M%=r7khh388{Kl8|sFN9@h2>=18X5vS;kC%Jw{hK_5AC2WIlpStzb`#rs{ zcxa*SoD)FTV(es>UoQyo4HLYdDs_SmxMc*9SX%wIX7Xu)9eYsJRCk!rwPF}+k>x(G z_|hQuw~4{$)Mf+?H!k`M6%KX0Ud|8h{-UX5GXgd=+>vzvB>|r3>_f%AxoGTqvSq@9 zjK_qJ@)r~N#1fWdvrq};B##9`D?f&7$&RWo<2}UlJ8IwSDzKYD#G7%Wm9hF`y4GB8 zmfAi_w<3j(I}yaog+m2-{c5fLT?bUi4lmz@qt;NX3}bapv#76@Wy$_bSM%%>T#~iN z*6*?|&ujD)knfvll}WzC*zP%eNPl+ev-AWwu6vJzQ`S@7iEKVR@O!+Is2Mn_Q+<u@ z)A9lR;hha3862sUZiwhPg@xXVZr`64PM5CD1Q!$&3iP_neJ;V%ncZz3mVh7q^_Fzs zt=BF+g8TQlh}s95Fre-b4|p(9wIALk^r81f!!-H(_{>+g40r11Rlp%Dlq7&&@Q$L( zz~1HgBr*S<H}-=y(Cue&awVs?gG?t}v2j+lM(HwsqK$4u-<$;f4J`|c?-#r59VbO& zGW*pFriMSvc3rW}JXuNMa&{k@ARCJ3JY7Py^u?L0NqAc1Tled|A-YZ{IE!b_va_@6 z57zj*e%MPU_32&4!UsFXTf-c$hDYu+N6#@oVyIHi<q*)Hs!N5Qe`U|?`LyiS-*OX1 zYvkcOOgr}q&qwT8HL$j(^!4>cmDo>zDG}t5qS0<q`B=&}GgV|45S^92aJgJS#~{2y z)ovi;N?Yd5Hoj5r-J~}U<yK0)_c(j<iGtvLqNsgiEIwD<_lvsu28?^`c2f*n8nGMZ z`!G*s-tsnZ1U^Ez>%y}!%WF{RF`#9CdHJhOPu*nP#)^lTu`W}Ir|GB4)5qwcC-1?_ zpX}bOw5PujN^NGDeE&Fe0dABw0((^$BZL;noT+Q?!WVkDD<517B~YUJ)~4xtr8gB% z^wu~2i(iI%EhCB=oabMXb;jh3atGML2MKq=R6cVqJ7&JT>7sR>YX|f;6vwLC&#lg) zO#AIefW1UnjaV&V^dsIFeHmj{^Lrxns(1CMM%kLHoM%q-splrw@_Wj3l-EX~_)B+v znlVBf<n3eY1qv7%t6{dqX^~p!%KXW?1MlERV)0um=5Lnms?QWZGKQ7_R&)sSdiPMK zF243WW7{3Yv^R$^1@qE<pY^_tl(k4P%Y$--+V>K5m+DiU(;52(7DiF8)OwGs--v0} z0r}W)-DSbKOybh%_{Ez|hoB$WZM)#Y=n96YnGv<Q6Xr#BdmTug4ymJDBis`m<kMF= zP!oDO-#T~5?DJ5HjMH*_-EwncX}?{R<E`=%31Z74QnX97Fss0ZgL{YKap<{vriuP$ z=i9WGopBMJHf>_)sVP)-nyB7j>RyNT@(6kzA4>}loo5pk$JH><!%mAHaYb{g)0w(^ zrhMqk3f=~HKvq{tfyiFQ4|$?j8zxbj<bd0<?=4+Tzplo*y>0is^_zBcdykR4#V0YU zr^4&E9iEd;oa*GCozHn}+>-t#fY_iHdzIVvZKvy^rnm?wzp$`pZABt+>iq<3zIZQ_ zmi<chZ0?4=iCFyZWtnds&qn5Qb{Yg6hlrE=H_B=aKbW5-hx0?Na>o>#o<Cs`WAIdS znbBeqM%0#!l8}2yV=1+{EMK4?@Tu_qR895*v3KH(S6L^{tel^7=80A&R#>;j+@k9> zJ9B0VzHAL$`WbR8N6+N%C>3%n7;V?N#^+i3b&mbblJ4@;!tMf+S~s@djivmB=qvP+ zNNY4XYZcI+mYMM-S|-tn2_!91eP}$7S1n^PV&3Drs)xsdt#A=NO-PR+$y(N2D?y=$ zg}-Np0lB4KcWm;s1T`uxy<Dvnj~*NJZK7zh!ZE_(LVA&p+1KpW=BbkL1oVA@nw+J2 zTMsOK)_3li_ai>8O{?mtF0Ajulk-+syz{7?(i--tEX*WYKANyTDmQ}sMaN3)(V@h> zZu(gauBoOUTZIUUt&FkLsB0bA>sX7drGP`P2q?h5EDh2ExHH7B*mF%nUBzjLMq_Sr z+zEDi=2$)Xe!X2oj(r1qjXkQ|CqBYm3e$Y$a5VAo(%}R1;n!ByOg>%hERi`IP4$hA z@XHGNXxYhGNB8~63lWDJ@>cY~2zKugIpERyePm(Kp0&Em&i~aZ%gLR6@5NYo@l2ki zA^womcP|#;^)B5M*HmTJPZ@0^T#Z|tIlO+ens6HL_PWGudevUsTO(IV`E8}ysp)!y z-J-s)%!jfOB)xZ5I8j=BUL^in&o1<JcM4|_!Z6+ma#>m>?v{?Kn7(~h-`(-$^?afy z##bJSq(;BSuxo8}?ne`feYStxd}Jri9kV5554a|swe0Q@g25AKP9<5T#N==+Pw0`F zt!97vzV!A54zDiO@~Alb8IbmkICyCxf9^oP*-lIm-GCG3bq^|YmPK<Jc@YGUNDaU0 zJxYAA3tcZMJ~8%fC5O+kql+l*4MS)NL+BgR51u9Gso)&rq4el78{Xm5gzb!Yw8TZ& z(t~B9X0i6gh0zj|L*kP+^cVL_Hugu8BGU)Os-cOG#~>q7xFTxOKzz-lcrTX&C5bxV z9mqYTP7y#=yQh9)@Y0Jngvn+;TJDz%@J<PLr0I`nQ^MK8qeb9m9KkUU+l$M1pUIAp zfgKgO$M4uG&+JeJ73jzbpFZsa2wK*SrlZo_yUsSlSHZ}3af&>BL6&%NR1gl-d=mRp ztW`<c*yrJhT%mcjeWwJ0Zs2in^~flJ4YiyEL5Ubf>}q$Atk69-CirG3I4`Xrm2p=8 z4mb`k#36V<fNzh&|1kXYy96+C^VL!q!8gZ&g@pwOHRT2oW;`Gg!gC8=5NUZDL|gHJ z=hng?)|wy0+nxq5ASB!p1j+WoAlX3}ymS-+Y0jb`-9;3<bArFI=tcsP9K}I~t2jt< zy9lz}#6c7Mm5t^*6yQ^s2zcdj7UbTMgdhd-?@EKh`{%%`yYisufh;KUmIcK==Rv8T zJSg+K0J85Zf!v3eL4m&pD0`*@ik=yP;vge{_P+o=M~H*+M@pbNNFCHfnF4f#IVg{` z09DT|!Q1EX`ne6LinazdvDTn2&KA_aumkTBZ-a&;C(!)T5xh-y2k&0Gf`MEsAl!}x zXCO#?!~!V@=RRS<`OjEzu@eiFAgDo5?#6=4Jy@Xm1q*Z`=)>#l@LH!23$FHKf#Coa z7=6V8Gk9$ZWAh;_upYz$t6?l~g|Q=yZAP)c4uaDd7KDd~gXhnmgSfaj@aokoP*zq3 z(D5FiGQks6CwhX4#Jiv-*$dRY^a72kcR)j?KWNMj1n;xFKu3W;`0zRyw7-c2pNd1l z=d$NutmX;$Qj-L_t6zf7nsm@tn*;_L(!o&kD=^&l28^^9K_~%tp<KRD7C#7g$Faa? z0t@^R_=W{fMj$}hf*=G>VL=#-W2Uj-#UvIa!~D1z_#MK_SuDthPzb+QR8)Z4+FH=j z(E&O;J3()6FBob^gVBykFy2`MzV*BX6Md~<df+{n9{LPszJ36+qdlM;(pSu5LDK>j zv@T&mH-xrjEa-sHwSon`5C#Va!O+kU_&(7OzJD763sb{jVR{rS&WwWP*)gy@Hw9Ma zr$8UX9a_bLQ3%s(5Z19^Zf*`N%+G+u#YM2PFbh_e=E2(X0$5*N0<$oGVI2cjR#xEk zGT2yO11lR?fWcspyX1dNfIpk`pVk%k8%zHH|4)3ki8tdvW&H;ikSZ_GRY68VLPp`< zbA-o#K=cO+q`oU7BP}H*feTW1^ZpqF>?;*H861Nx4hnhyL;x)IirfV`$UzzrK`tgv zLE_3k5diy2=>nwR65$~h`&>fmp9p}BQBlHiK<XgvipBa!Nc=<kEe1FdTwI|RUi||F zU}G<<sHi{*a7x&0hhNLb`)$yBg6l7_mk|ay4v+^<6|Zm^e`xV{<oKJ^SZu7uWrTy0 zlFAm<PtjH{!NV*3OTc1Z-(-R3h8f0cZ!$o%0NX)M=G-|cq%+C5{^&@*p~qq~Pf$?o z+O-SPYir{qfDCXPHaipSj0)Q|_$|FC1qH?KE&3lEw$vz%>r4_pTMT|j|B{{_VX)f- zDgTEEh#GO7X|p%}Ej<=%M^AqMVPF!sNx!89q%YxG5@8?}v)K{;T0RzQ3h5CE*z&gM zwKX(08}cU+9&8HmJ9<`ndU|Sv!An1FZ4Dd`=rW1xOMfu9{P*;b9BKeE;Lp2*P$Mi5 z1~?Aey;1IO=`)y_aU7ryOtFCv?raBlZKN~)P~+dyryV}b!~|7<=<vAR%fi<%6crT~ zzQ)GhLFl*C__y@0nGZA3Lk753q}a6+1|lL93_A=9{csW>TG;AAztbNx3<x<+hp;0d z^auwc6jkP(Z8d8AZTVO}NDoEWVgNfLjsYS8${=B@KVP`}_w?q+n3)j`Y&HUNCu}ny zBEsryGEfQlx&K`IDLlbCL3-xHKN{g@2B?>?MR5(8@OSi&u|?d+Acw=uPy}kEC&L=- z+EM|I9(D#5olWt<U-egrg#thZxJKM;#cc*qgGl*EUwXbZ4*rH7GH~ENvdv)gUi_f~ zgdTG6+baHd<rhK*skhC9ksv6@4}UR<mu<Tdh*JFS-oNh`vrYbcdf3%)p(ryI2`|&a zwrfC?g3Cz0x;;t$PX6ry5gWoxk81_kk&#B&1$$8n7Rkj!b`ZF*MW6qtP?!%tuo@w- zAL9A}aw}{yc==oUpPK)tuLwPFi1kmcNWAl((!a!F#kTH6oDMR7TmE*9{~Tk(j~&~j zN4oN6KZ2*N!SI**|Cw;>3j3Oy`J|H-?q<f_i@SH-_($~E+ek-7`tjDi$i7MbAC?dM zQK%SlFK&$nES7L)!^!ra$&YkIY*Dz=ZEGtlYrCK@c(qltztI1=`Tx*H5w5#!|AT|z zX84u<r$&cgx3T^{{@3(K-}~3$SNeaA{ny<8(*JV*|5Zi*GUaFeJ$aH0KR^FH!=)gp zfA>L77ugJWcu$h`^mO%}Btu*rJV}1`cVs`(|6IPlp1wX5U@P|r(%+Vz{NzvcID$>; zEm~NCe-)l2|3Sa^w_)FJQ}@!*?WLikquonOvv<4xzeoIiDh(&yUQTgwP8u5<n*SAg zgzNt<JuN3E?OvKc<lmO#zw!U`8bF3+4BqD8JOjjVU(kRY7kdEWKgICW4czs=if1;f zK)w|dZ^fuzV!W;EUt_S9{=XXk%5VGn*YdaJ+LrVGH!-e({=q-QPRtEKAHoki@lU^3 z`?H<c(9jUvzI_{nm~i22#bM@u*oqN5@vk=G7q`#g?8J!<qJOa!H#p+q?8PZg;vmyi z9K3Ln1u1T_ID2vP9dgiepBl72JP6V~<bK$UUqPGk&vxVd`?BEm54*7(DE8g78RvMb zf_#5yJNDH8C6Cm>t3X3g5(e$VPt-wI+(m#6F$6VXS3zy05vY4^0xF_y!G|<UP#b>> zyp6X3mGMr{PV5L8lcB9R#Rc?b8Uvv=473wtpq&^4BtBq(R0jsgLpb*d1I|OZ*ogtk z5LCJ`&`yj2T3r~R3qkV>253XL0YSG918v0^aD4y+%yD*N7!P59Ewmq7k6?fcOt%@u zKpQazxI>7Ei2;d;i6A{a9b{)`gVNGc(2(H++H)R)k9oeJ<&_`!SP%$mGaiAu%txR; z`!RU;>M{6G7z93)#e<I(h%Gn+e0i4-`sz|ZUqd$NZ_EV)&4pkX+Jb$dE!b-u1AL(! z*nbQI9#3GvGYCQ7FyJ|~{f13qK=d>Q#6ldz2K*9Ur$fk^!hiy37fwQK!4T4*Ew^+Q z1Io+G!P~cQ!RODP!Iv*zz}V+XFxpuMCcnG`W4-UeRDUZNAN&MHhkL=?crU2>js-RI z7*Icl1@#M9(71pBEfBhwFyPBF28@i1fbsEh@O``=%zqnzw%-x(ZDtZIexCwM^V2xn z@7LK`Fut$|`XK(-6%3eK!+<$>y|AzVRu*T$>XzMi2Bv?9cHhM<yYI&ODzy1x{>RyT z;cfnp0~}8NHO<z_|6e0*=R)L&yY4P`!m{)8x6}SboS*HkxM{qV(v0}`1o_$Oa<b4u z2kmRpa#BJ6mLUHQw1>$;3JJOFY{m2c9^XMxag#tXKVL~A`(H?o%gT39QN|I-N-3#J zNTmF`0`eVIa0GI)(84Amk^K|?FJ?}BKb+bf)u1^@SuyBkWMo8g@@7kH3WcYa_H)Qj zzs5km%iKjn4N@p8Bh`?@S@9IZHVgSPety0H+^+91chrLTY7k#e5vM08lvFZ~;1~P= z-0s-iMN11;!jEc0f?L1Czs^Vnx6@{BS{mvan=&C1$s*=eX<W7c#6Lg(6eA<V7Yu^@ zVSqAiDhg>ksc@u#U+@`WprD|7;-aC2e2`jiX;${!oxkG8AA$H#BGyNt5ANN&hXA75 z&Bk;89X>(;OQ7Js0fUK&v59#iY-}9CZ}{i4;P4TGT|0IV6BDC|QPfYNIT0bi_0vDe zpO(+Z!h#flC<#XZEpNnJVVkvx+?FTG&v)ySf1QN|DFWgn1;7#zTV3L2TOjB-{rFwo z4rzfWP8`{;!gdM7aq5U>9e?2e(Sh>w4Nn|DzD<BD0G1GkG=>^ZoImS7EiEU<iWiEs zU58DH;<U81w13;*5Q6-i^qg22p2fzpZYn7r&U<M-zwOUy>FMw<Uj$Yesq<zP;`7sT z^tLvJh(7<&&z7F@MUHa{!e(RKy&I`Rd`?>0&-j1nXG>4{qDNx$Z{pgS0un&}f5QJm zKU?4OuOEMg;3Mr!v4blA7yf_6_h&gNxUE$R3&{Ro^H0yW<3GODZk(3++5Zkd4UP!0 zkL_%&Z3ANS^V6Wp{>1+${rnIu2a-TYgQDZY-{|KD{;ywt#{V_%m+N%o`XAuq$p2&f zbX*nw)E|B+|F@Sv`0K_+{U;yY?f$0Y2dxNx|2F)<*Y(ra{|ERe_S64SVBK22@Beq< zAP*f656?ldgPZpk4t?LhCi)qFlj?uSf4ByMzv~JQzs6$GsLj{|Z!?C8xb(lq?px_F z?nCqh52L}wsI3@w9NhJG3{h~`|1{pF|25t&XS>}07si`gRh*u1%gn#KM)s*p5X2$; z*r)z<j>^ybRK%a@S6`-|_ov(bODVtjF1>U<i`$FF!@X#NiyUq*ira^J(}Om@Bj95Y z?~lD`p4T7#O9c<)w)~gQL;oc?ka1TT<ojv<*mG8g8$h2VV^9%k1}b9hasEakh`-SX zERgQN!hIwb$RIvP5D=duWeDmJRG^R1w$G6^^f@wxVATu#kKo=B@j1E<eU7$$jcj0= z9ZW;~jhtY*BlP7#{Egs)OPp^}ecA)?Hq9G+E)E7A#o?f%BocI1r-H7UG|*F*4%(ZF z!C+%H7;JqFhM>QY7xY>3fV}QQK0a`tm;(KOGN4aT7KD7b_j@@5_ks|z;l2-zMuX<I zYS7xz2)equw)TG2V7%)s81JqJ-{8LQ+h7NHH!=)5`UgSf)EtC)P%*m-&~WeAun7Ht z7UA9x`UCYsKOkh^H$OQDVF)Zk|DGY}%QFUjdp7rU-*LV?tI(Hc2JYqN;hqlX$FsHy z)^U5f|9O5q@Rs;*fEvIJAb-__Cldaeyp`gqDaOIdA*T5^7@n6nIM~@(1x{c3J;H5% zzEcpv(u&pPw?*6*;^*Vz;5fzeBma+WoRq$&=WP)oe*R0^nrdp>QsUWf2hVflJ9H&Q zgdoN#q!6~thzvjSJ>^Mv!hA__@ofZF<aFFW@>xhpNfjh<2v7<RSP==x;E()+)a0bc zuWTbg4E9q$=Q~kTQ<IX)7@L{hG`o34k{_w*&-tEAI0U%UARr*vqbCj#`2UoDl!=~t zFDWV9>k#1M@6m<`h!SD>(0>I6Ygw3&6hTZ(2oX%h#f6dMcz?)eZ+DCd76B`<11SOK zOCmb{Bj3r%Kw0^sqP#paBEl_ma}${TQ$C_c8(0M701+JQaR)d5Q9e!x8+rq|O#~-< zd%VBWJ1||7Lpba><oVltPsJnfxhys5VWZ#Y+k1N27#SGZz}!FRaV1MjBT0V>zbXI! zK)$|?w7#|eFMr5($7Hj7eI1=&bM>up+aX;3?%#&}`>Ci796<E<+iaM)osZ!Bp9@%Q z9~=fe#GuKFaU0O^fdvG-EdVh76}IybynhU^z#jowryyq+A~yByb&B}U=inha#OV>9 zTMqrLBh63Ye611Nd4k;^e$_v(O_H4?aQ@VYFLj+S7if7Z0PW(kAjcE&qyDomb>V~a zpx~h*D1LYzlmw`N!bf_b_=z^i_R|M>j|@QJ)9au(#1woA7Y84r6+v^9GWZaq47w9k zz^5c#@Fi6bREJ#y4KJ)gUxv}9z5C;)y&GAh$bE*kZV219ZZ&A@zOrT8z6NdEMuQl* zCfT%WTMuL4S_Im+;W{KDA_9~o+{4+j%U;KUtgI~Dx}+jK090oLg2q>Ypg!vnXw7>J zI*OiwmO{8jf$Nm_Z=Qn>CC@<@IvVse<U+sZWVk*l24$_apzu>0cmQqFe$an80NSjB zhL=DPT(3Na*CEiR9SR`|=Ep%ugm&#rXuHmym;-s=F`#gE9k*^le3u&=8$oMpE6#rz zv0IORM8mhp>%r95PXIkK25O;=x(V8)-$NVq2N-uk`!upf8JL&^qobo>dU_hnO~EzG z^cb{FPlB158QfZB7O_RcHOi*VdHKJ#X4v)r8-BM=akj8<cKwTLTs64ZSXqUff6XxC z;o)G@)<GuAKZTooJUm=HoNAkiBBHopcv0?#03WZ$6^$#}+6XH{2PC-45fds43h*H$ zY^*}C@U3(@Vqzuea>mDZiieAX4H9goyX@IR%&4oOs;Vl$3rQ?~r0<6r6buaX^k*(Z zUbu8C7#vvk?AZlpT@(sW3>J^@v4#7x>$VEid-jmQ2_J=bR!~6Whdd4r#tL%K_Df2D zI;*E|jY~)PAVKi}H9{fnYJk*ilMlknSjL2mjEGRy0iJ)hEe}$++sA33P_(zU({W62 zmA-9iddt;eD;+1#btHW|{K98Dc@y8j!S>e=P96!-YltxLfIAqBaPc)np55dyFd_do z!y)FQhmmxqU&E0T$B^`Y7O?A#06Rne1JH0%K|>aQ1tc8-)PDqUBEzktk$H>)0uzMo zc?^E}Bm6Xvh2P}Cy*CtL&X0QroOoLZB-)GMp82LY!uPhEk@thdKqj2OvfL!#ymc1$ z?oYnA0(b@A@j;%|zJ6i=ib4!PX}BeB{;7%5$32s+iiOW)6XA2%G<WbR#|4~&du8PP z99am+yE(`nSq;92a|P~=wc+0QDg+A%$R7FH)*cyo7sm$93&_6M9lo2Bo*o3}pAe9r z^$a8>CE@0z)~tJ=vj{#{EeZl{Md4uReGzz3Uk%dVzXLHn1HcQ?Jsn>MFUFSPd;*_+ z!aZ;rd?uO)_rtGeR^WVs#myhz;JYqua6j7)=ZfLsVK6o}24=?x;QTNKmKNqV-$z+q zg!2Lxw|8A${_ni-N2mJlxBo9`02wQOgmY)a6@FX*aF+4lQK6r%&#)X}XIF*^C!zEG z1wJCd6D)@r=@}Jp*UIF?r&&+19Ajh@-^|}lO2Ng&A;7{Y22RRKO3LitO-cl}h{7!A zHuI%;XsGuP;GY$N{9rx|yfkpKkw3Y`|H1`++TFzal#y#BA1U*^ocx79@{yDa$Thd5 z>>mNH+9}~iW-HL0+VfKle*YEw0M6&ou8M`WRu72sCxBz5$KL>=It2dr&--)?)sgNQ zDZ5qhrR{uD+YW+P^4!NBJv!&vcc=KQgRw)a`o4#&g?`E8LW9N2rE}gnBAJ1^;|Kg! z1GrFJobkuK?=*NEF7^3FOGZF&mg&f&M<v4Nla{*dU#<*(v9-J$C3JbD+qp?+6(g!B z<Z1ygZ&^f77mTluv%{k^3I6Z+Q!Y>8?4Rp$Aem$$iQ8jAohDbAoz*EpAvGsKBu>F` zA@0jAChyM`QPWzUA2udyM7VY<4yG_pw`LfSEib<&ohe~?aPsNX<}_97`+;WPYB?0i z?tRqtI0pzQX;as_vYjL%mR1SP&v`AQS6AQ<tQ;-8*&z2~U`TcCQe=My2b=ZWe)*a5 zU2~G=r~CoQVJTgDIfIRY+a?`nHpcjB%%|5Itc#5&MYP?FxTZQ^?NR?yN(Zbuf`baz z-|2Se%pI9pZ<tl;l82)1s<;p^Sl?wILf{VbfzlpqP{H)=DB4S;G(duvB4r2gzOW9e z0ZClKArzB0QN@mB!Agwt?dR-KyS+WjvzU-XiTwyw4TOMpg5!{@H0PC8uT1R1*z<{k zgQ4hJx6%%cnsGw&=dG9zq@6PZN}aY{sZHZ;MC(<d=*z|n{rQu%F5mpc>R@G#=+Zyu z&t#ONn_Hh5GZ?*4qfLb`=vfZcM1FZ4^pHtWH10zFOC>zQqmUw1y+zg+9;@Xyk@;py zD7PTO@(~ls+2&mW-TK<@H-m=SNIaOXQ1gI0CRZWzxO+$?4%{b$iJ?V$J4}3SI%716 z?j+OGBD^G#wj+ZT&*i=qh^KAebL+CX;s};NSrGmv%^q%vc5)%YZStRZJ`^D-v>SV$ zoC^EGSrdXEJPZLrYXwfopBVoiOKjg5is6Sx$XuB|CRN|p$22hOP!b`Ldz=^lHzNO} zhWpV(M~oQ#vg;a#Bjv}&jpM{C>Ck<B`Xvz*Cvp~OK@Ih_Y~+vH;JxCR{>Tuw?<+22 zNtaC>P@(DgVdkf=QAziDdmlT(pcO#*)#i0D&)xe1AkO+>?Vxw<;4Th_vePv|vPaN@ zGW-$JoFNelNxKb!6ce?9?2$bX;Ubq47yN$gDg3J&vZ*uV$@xeETT1VAoJpQ4kMXmo zjYf|fjf|rxp(53uygjn#VJAH+J$m^P(bH3!0KIHS1Rgb7Uod_(Y9`NALyh)ayhQ)j zflO!eyj`Ajm#A_3)3=6?8io$1rv^g~&#SJTe4+BP<^F2CD$O@BQBN<HL~ap&|Nd4} zvcQXj%MP?GET^a=o|j7rX<6aT3}jvlZ19aPk8-CtfG%$hl8Z}X_WaVs|8DwxZ04JT zC|e=!vZRAai?{l7S9C@vEHVo>{2>1mUu^{6y?b{_TY(u42PRMzvI#2t%^L)3zx3}Y zwsRokVx*~l&OGQa`H7$=(b&f+_#PXnuC`h=x#FxBYVR10pJH=g%flUqxI%)3pX`X_ zFC%TBYAO%&9l2Wholv9HN+D*$w|3CP(o#k!%3@U&p9fS(9~}@AJ?WLsMSiu5t#-B> zvzI!$9>1^ej*X*czk-k2`n@2b*@km{tdi|<=hpks?H7pN?Dp?V@M5vTE|vffLfcO3 zSxtGX&w}#VX6R@d?wXd5AMb~Sg(W`cKZ0U95_z?Z(dd<<$m)9v%))C)2aDbvRwh#Z z1Fu3(^9@irUshgM3a&1CRuM!g`I<A&#VR14CCRFmnQI{6f&D;t2S>$&UW`+kR;Oi; zdo98HF}t>KKm(L31Z(piH(IZchoK559=e`BdD829j5d96C6mI%>5RQ%>UY^TniJxx zTkpB}Fa;ief%nG9Zni2z(qSM$(qV$`z@V6RDITgMDnAqT@=}VaB5@t?-t*S*J?)J1 zY|HUdN38EB`!t8=96p_V>|Acca-}wLx$K(vj=K#NM>hywpOsH!uHEyZ@Qy~b3Ke>` zZ*C1TuPmJM@&Dw~#4~6=;75>{l;pocOIbws2q;mnb`3APZ@iOmnQBU!4VPb^p%7c5 zD4UUIQSe%pmmS%lowd!#m1kEMD6$IFJ=Uh_GRERw;V;&8-{nj9o3(>y_-Ntn?{Rk8 zav(%;vKG6t!D(pgm>_UJk(h(s*|(QTA)3<t^7^=yo(SPdpWf3>C)#Iy)8EXzW)!(| zp~>a>v^H=11=x!dgqMmxl`avK&h=T8oF+VJ%8V(}?aE8rTNdr@uDNbg#W>*J*|w`^ zwAxTVaOzVab}_y-jTtZEF+VK-?ksEB*oED_%Z*JH9JvZ{4$2C%_8;0@2Mz>#mqm}2 zemC{h4mO>?b}H+^bJtx08&1L(PA|#vl0wStB`lnRtX;01V^)xEug>*JTC=0XK1y24 zO*)WqJ7U*28S)a3+S~LV4~=*{hD}dU?nvx+e{Q?J8s=4sZv<oxGgMYvo+h-s@*%K# zPU!In{n~w&nNeSvnHJIqzITEXh)0{=F5KGx-Dje{E17wxX-tNnZj2dKJKAFXvznQP zqo7dNe5Gp*H5}ShyHAM|wG4zhVGj~341CfkT7DQpsJzGBapjipaNjE1$E(Vg4=&Zb z$5<4vyt`L8zCN@((9>l-Q}se*K4Zu(x*A<o^i`Gg^N|3*3j>S9_I(B+&(l{v?&S5w zYdInAYY@KFiy417@Wi3%+Y9f3>2meVFQa?P>U=yITm~gauErEd?kSsy)E=9aFUbvA z_PVe{Lw12xowDo+9z8mc(G9PyTKK>%-Uc&31DVm{eG}p#(p(>(p^>ffn8?(4kpE)C zV|wyJ|Em1~=SJEKOYpbgKj>z1i$;~B+&|y!?lt1Z<MB99%ZvZX-9?4X?WF$g*-lme zGiCMR)wU-K<Mf1BsQhCzypoWTU!S8oq?bAKCaIA~pQqzo?5viol+RmmUnZ&HFe^qa zekh_zgQBpBRE>-MKrEeZ>Hyc}ByYW`_vw^ak_>f+@uA8(TF%`!?#m=T#-q4$?7imK zsN|C4`1?Y985N?8%QVjo&9CTC5N%wU4e5U+D$T6)ZAbO1?s!t)<%SbiW`(c698yd; z^+|wt{B?9AH@?ZTrboI~!N)f{a)R@2cErU?in%m@{r=wZl{`gt`=!In63_i=36!A} z!R(7uO;}oq`jR&$`^K%rUQFzNme6tkT=unA?JiCMc7ID{DMNUCbg!+B(9@2{r&MC3 zmBW(Es-6>PzFr_q8R=0lf3jTPP-AQ3efCy_Pl)H+qyybYt(tv<e53;v68Z_F@F{jR z*425B2#v%>=9{eKpQ-emaJ{yq^wMvS0@vhGOpC>g=S{|#XG6D6KGt@->gd8c=w3@l z!2{0v3ZG6S58ZHDbMsSlZhnwT&k$B6+05AD-3Cw17%RWY+cWZvD^R1m*Ne(ubSGQ{ ziOf)O(?x`r3rstI2|VzqacDM3Pt?my;b2@>;+o-Q;@9Q1(aVi(u4gG}XV*T@)g<(L zc}SIH6Tf3{>*s!AeZP5qfvzREMQ@!4_5rGCx1G&XXVku^>?zYIE#*YZuUFi@tgs}( zE-4((WH=|d)5H+YktmDnPK58=u-y_OIZM=EY`^S`bgvN~d(w+yIW{{=`e62{*i`wb zVNs|SO%my?w`bDWWzXNFytqW@&SYu}mn76X_HfhDM%7#_>+y6i#X26jM&{V`xY<^^ z^OaRfX?arTm}s_n4Gm#7hY;$f0__(-L`*!<b2m8Qy$202oOA3D%$Xi5WfE8x=ilF9 zrK?_cbbxVm(U4bQmnCSllC1tF&Eh78cS`zn#$&f3f#pkLJtGzcO=!Ed7=f(e`$l*q zmUb1lI8p~5sI6b^>0>r}=1W<vXI>>1<H>gtjy8{DI%*^0hpu+_G5hH8-&HZ!zUXzE zv4SVd2(I5+n0Gl=dI!IGmPw*Ok)z@U4_vv{ASuA@DAoE7j*wS!@3cJZRnINH^enQO zFMz7UbbN`gN8Li<6Vb4a+uT_qaR*iN+~UYn-(ej&&qu~mhhCk3|CJY>6rz0QgLdH5 z2?fbq?a!wNV78#eEE~-ono#rkfxTkA?j^eHazrg(PX{g>a2F=l=Bt>VQ0U*F%6PU{ z=S)s1o1NZKb+z==j$k+Ij$;GiI>a(FqX8(nl|*m%>qG~>IuX)MPELLlVGW?MYO-GV zpl;Ax>iQ|~CRG5#8QMa2Izw>Ld+u<v2K#}}s>Z{&^7_3jb@!kD9Awk`G;^T!;F_yX z*|`ojDG!rADjhrJ6VNb7-IZ@%IT$DwQ2BuTfeICk_}<5|M;^%@p~W0%8%_R3#8|Q% zyWhRKgRR{IgK;zaQcM#eU|ECw4j%kXxPoz>6C|JdxN9C=I0hdlcpCD2u7GnB<Bd~2 z>bjOiy0HvtS_Qj1^xV&!9_by7TvETXn?@Y<RQ3p59DKYq9q#*lG-(Z)^t~vAm3&h6 zG7`<OkF0Y9nO%@kLsd{qvIgz6a}#^qG_ZnV$zH3YUOX6qZhfkHS};uFSV*m5r{lFi z*o%Z^hnFHXr=){~v34WxblY6--&~K%^_x%OSQ1TE$sAkQnc$z~8Ot^HQA1xm?V!H7 zxC;XXBT!-UXiqsC9wrSK`Xb$ZPTrP(bmc9e^>YvjxWqcdHZ3LO`@o)|+DkaF?;eV! zq2S96ax*c!9Q}cii5cM@^~PPIMyS0Z32wzi9c<p$Jrr-gcYVYrs?X<4jV48Zl?3wm zlM|jz1$YndC8iGoi{Z%TtA0JB1#&zdM28>CGKIC5S*v}msv?{EvPe7SKFpNJBPdIp zA2>1SCDU+-wDz!DUIFhzJ>i2?vg=c~Q`h=f^~PqsXhP4gQ=*MMUb1++6+=Z)fiu_| ze&kGfm%Ar#r$!IJ3fwj1F+J1KJS6D0((bmttmu3)sHv#h^o^*leG6#=MMLtys)IqU zHf7oIx>2$VTo@%Xc9lXUb%szE0@-OWtYbj8tGi0j{oct%VXa;J2+Y8`H@2m2pQ!yv z+wzx6=Y6wluSH8;(BW}IvAT@SLoPQ~I$NcKh!UyFUYUjx9XO%ADk>-T`H=qdgm}%e zZUun{qjgjIv^g^>`P8gKH!EgjcVv~ZrTb1{^8LD!LkE%$k6#PtyTbYG!1%(foX!o4 zjnOzK)EsSzxaRI^^x^p9cAVZ{OdmY0VevE&!28Ucc!vmRD5C1XxGejD9HRC7Dbf2_ zcz7$fn#-b_<eA;_`yOQZv&z1<CvQcIRE_ZnyyVzVtC3#Sd~2Y?rAZOgVhMvi2KPtK zmGNC?LM1cv&x++(66lqVI2z84OC0wuI^srd&02D0Odai^snPn~skoGFAIf*1^5}r^ zXj|max2t_$d-5yF>IIiXTA&nnCsRtjm{pg*mt3EHu$LoKME_V&|4}#j++y9#>78xp zilpN%VkM=|)XX}n;>A~wsuHr{X;0)mA&c1!cN2q-?wrlDLC&|I>Ak*uHJ5(Kux?;! zFL&F+Huv1_^K1o&$WTw0N<I=D5Y@)$9+{O~G2`}nD&|=n&x!eRbDubo60w=>hW)xV z*CLremFT5C99&5z)#TY^=Hd!<MigZyu6&WroW4;!CdzeHQekj_iVf5AEIO>i<E8P1 z{hUNrK^D@Ldc;|`CO$d|9J&MtX#bF922nx(HwBYyE+q6ET(0cCGRzp+#I?KcY3CMn z{CRq66E^HSSVHmGO$Yc5%J79gMzEIdMw{O_><@0pDk_o-2@Cr>mSXD|`iH`#*;{SA z8{T^!+^~yw0`jkRnCV};8RY8Ui596RCzq+BRgS=SZQ{?TmRQ}dZxr|vZ$fZnqFsu| zgZ7of>@|aF_nE4F49=z`9tx4yhh7$?9nn9~G?>Ls>7L-mg~|!gtqPaq&+5Few6ZT- zJw|bI;g%`j#(1Y6V!X7s4%{FxAaiwftr5Xmu3@e{i1AU~SLQ;XPRsqYq2pO>uwG}H z_WgNf){aciu_{ewl<J~1hnNU~XHgaTP|jO2-slgxFIm9zd!8JTwx;6`$zsmU&(BkP zxrb>pkWY%FP$hL=4+>5t4Sij$S8<|J$6NdUrH}{9{zUgzX{g`Dhm6ne;s44Df75zU zHfH&01i^dZi~d*0^u0o1n=v2Y)HaD+a{nGQ2zOb9)tcAQ7r5N4RijR)l7!NbrD<lU zCo_<H5>2+|5tScutxb7(;f(psZlhTgjktfPfaP=Rjp!x%HeYzM_<Ik{p;nu04j)R{ ziYL{UJltHfzPF^W>pRWfBx7ef6IDMi6n&E9(s|n*I{U<81W-?}f>2%sVthl8$8x|| zlaYMmYicbi=?9{BB2_1R80&40<DH5+Z5~gRJrqk9dhLqJ8<E9Wd?%r2&U1674y5hJ z>`cCsm?j+L50zN-o;(&ydU~X%>B0T7-TGEmSzj)a5US3*o7mA-8Z>z_GrXHZ<v(LR z`01)tgS_<Hl}olQgzs_(;Gov+Z?)^4kQ3z+``xQpQ_|tO9j^_P%2Hp6-@D$ksuJF< zP(Y)RANFO3owFzx)9yZhzyQM00B4d=;>$N)+ix+qUutsvgHLpnSn*-Eqh4nF^GzHD zjjQoa6`UrND6%zOigiM@1#wvzacAv3e{?{DpIcqw9m7kd(Q!Ac%G>wN(Vk;E;!9c= zFN%>jUIRIJ5qQN`GcVr6Uk>QYiXS@q;<+lbn>^Z#UprIjgmI>Zx8d29E~CX*b`5gR zReq96eoil|{C@FOX{|Ocy939Glu&8R9$xYF5@YJ?K{5?&J3?uyo2z-^1+ubWTi!2t zo_FDVf3@(OT^z?wem`-&6Xd)@ppO2y2p2j+K(GV#2(KMH#WS>V{3gnCY(pXs@6?LJ z19msDR-0#m`@NPUT#LB8JugeL*JL>=Ioe+v=3^4OL0Oc;s2#1=xkJoIzwT5?L;JcY zNQLYEI!e8dFAaLL&l}FI3?$9O4=Dv3uh~UgqEeqU5UF3q&<~XcyiLat?v%gsvgd4< zc|37;WLSv#8!JxnlOA>1CG`^@Vy!g^j&nLcRAt75i|&T|)2>lzGe>dM-U*u^<(Hn9 z&x;(WtmThpX8F#`owv)$GcJ<Tm4*I^_4voNi>eJ_j*a<r#(0L{v4Jqw9UehcCQqS| zVy92+9ULN+?o)PYUpu{!gxsrEAJvn`j9*_t<@o77tJt8^Akp5)&(p}4eTY#MQ4^U~ zBTS)=JaMt7=BSx5ojmP`xKp&bz(;`arNjG1_k0G<9kA`?BRvYE68)})8>7>XD8#zN zpKh4k-GhF%DtR)CLZj4#A!8%Lc1TKemmij`{?5W4{<|W<yk%#pCMf3&cjJqwI^;Zh zo(FA|hiirKPxEuqC%^{0ULF!6Z<VnAeprqsylAIy%4z9YbxZv`S6B7xc6muwgM8EC zGIC=AGSh_LSr+j5e0twjHbnQ&ehw#=+Yr<@Dl@eYwrU!AgeT=^O7LiezV=*Owc>|! z4e}8_q!bStgU&VN4Yd1|S!b#z2j?5&_bz`;&~WszQLKHJieC1r2pKq}#MK%sD#>i8 zQSbRW<K3Yyi}YAk5ATyS=!Xw!zWTb0l(l|8Tcoh=hHrHJ)+K=+mZYE?srBgj0rE<8 zN<!+Hd+tTIPc>=Y@+m$nwu2tK8;qn^r({LB_75+(wOx>O(|P_a%e*7_DV~(~<T`T4 zW}xWmCG@Ubes+!!FUKc-C`f9ZV|z|lJDMq+N3OTFd{l#{g)Ou1^POee%5bO4o;yvo zHK+IF=lCCORHQGr0P=O<aMcZ9(6(suItSlp*_H5}_C2;cs`WGb%8m_W?k)RdL%un+ zXDr$2vC`DaaDDa&)GlIpdDls7C-FH8w&LVAb<4@eYUVMS&tx>GUwq!xcZtV?B%20p zc!gR>jyPX|;@Tede6|r1wkuPx{cj}kM|e7Vw_UeT(K-w7^|2}0exEt@!OCfkK#Xo9 zO55?k>Di6%k!6=hi9Cy>(&ck@^eDOCuFHSp`xeS-1XNFH7FKhu@1*7?H7{zWo(;jM zcB)v!%lGBST&p7*4v`YMpMWYk?Oc60vTT^Q`1+*Eizf{BF~hZ<gS{M!>k2(Sz&vgt z$G-vaC8~5bWnG-QYrdoi7dy;tVUg$7gNWa~;3=-Md>E`gCsLMgNIwz6g`QA|dH|Vf za3`Ulq4CIG>z4ug-fI*LlP?K`y7r7tjEQ&iTqcdNGM${A#(zCHb5!Y8NpEh9r)VZ` zlV`V|c_tCE`Z*TC<!<$`R}p=IMFHDt!;;=jbg?;Yzx(Ted?|WMEqft;OYMMNY($Uz znqP$ttsmiDovRRD#$T#B;CV%cT=d@5b=K~%Ym0`QG~#zZDd0itoMz!YJ*$HnaF2J{ z)=Sae8GpLOiZ7$cimyocou#0K-1n#GWfZy!b?^F3*hU9##WX()j?SIDPEI3!&{STi z<hnnyPDlxxdb94&W;J<z;-ri#lTl8k@y?|=MNzy9mNNY`Yi@U^RAZD0R<##=C!!de z1L|gct{k>ec^Jwr8nrALI;Bc3e$xKYSZV3hZkMYKE1$Bip-XK=v>ZekqVEq~-%nZI zIN?B4r-)iP$>dyUHM#zd?RqQmcsZpD-Gp~VC2zZV+Cqd(tRbMh77_fUDI`90if!as zgFpahJ@K>9iL~paGYRBoXY~p?+WhD4eK}Qvs{6*;1Rt1)x!fVS6mmc*=G;l5<1$@F z)#7%h{PDA;l*t6JdSkNHCDk-Fc6yJz#SB&ZE8H!0bEvTn3xp<Z7XxR>xEEOTze_OL z^Ps;xxcKQza<5Gag-P|<rO!r;-;bfZDY{7XEsP^{BljyTy}d#1<P~@v^Zk2b2Um?d z7JbjVnpg7ee9k=*N4NIE=vI~V7LG1Hr<mqT3f=3RJ3%B_Ou+n7Zu!wB*2J}xH{~)M zj2Z=YqNQ0w_yx<3MARj8p<mScpFfbMM#{b8tsG*s_tv9TSBt$99``7bo5vpvFXal; z$d@$?EFn8H#&se_<@NFM9q%UP`hBN+@7})kDVmY^T&b!9Fw!}>0Cz>{1@jSV%7PMP zXA3R{tv${nx~T{UGw+3cF>Lovqh4K~6r%IFx3A+R@j2@-->x0!^!JI~HAson^IOJ- zEIogK5tJi;5>24ct?eD&;h#(}{%o(5UlDIaOUd|m+0<hJkLF#3A63q<zcEYA&Y}S* z?v}3DuR}vvodNs$%imuTUk_??rHalY7)e)~avjms|N3TuN^Il~a1gw>Ml&q(#N^^Y zLHp5!@+ZXMMND6_^E5jcM(2)DeJXA7f-P@w%JVv@6EEKD0Uppx>0XyjV6FLXh+(Rs z&GoGVJr>g|m-&c`8^gvlmtw6KSIMLlVX{Gc|0FptK4ETLMiFO^n|O{t=f#!COBcEu z;f(72c4V$*L4NIxkG#+F^`6S(Zt%=u%Cehw<w3<mx28ob6P!oIa_B-`stOrfDeq@h z+4L#c23PLOKB8puee^x=b>{#Ey9M7hyciuv>xU6K`%vE06D0aE#JU5SUx^swmtV8G zeKw({&MzKX7-s+mVoL=%vGIagcpK#zlN^-n>2Ws2`Ey;vtV@*>>tY}AUMM^u<nc(( z4gd${y~CG|VzQFfB88fSZ7C1TvzB1zPu)5_9Vi#0ASh9lj0|`W#Qn`PUeG7FP8y?c z({Ou?z+t+^ZD))BrNj5_`1Mx3KH3y1@`lO_u-gh)eLtkPM#B(}qDzh=UeHo#$Nvzt z*C-+=ckz^dKY@W6Bb+E}ZttWBJeekxpw8wNyYF%i$<3l>N-+a8onC>gh4!NCu93AU zFD=`w<{I(neSu07DoZ^|0qUQ1>QfuK%}}G&Onl}1I~^)b?-@6C7#3wlD%0wuQHT0| z$>4u|b!^0ca(5v2-J`)M`|uq46z|wfy_>9V6YqnVEm)?Azq&M)=Im?9`?8oIw!5VS z@EwY7rt781HJTMUAAa5Xz)&iEOL63J4&T>ym9CsvmUO*aDc>`M(am&5lH#`ds8uhW zF0I2FSEPp=%#*aH1vq3Qf)<K+ts^pa0o8Zijq%XpdNIo%=(=A~cB%HNR9%mhuYD%J zUN1rU)zMA<z&mRJcITEN%b>kM;!!pg`;xD^9>q`B7}Z^1Gwm5EKTC@?08#ku1QB@e zrcG<(z9=LQgnVGID^g@Xw@=LeA*08dsJp0Y;gr}OAL9Jz*pn__9~0>B^?w=3H0hbh zNir03r%3-T^V9>?kZ__H<ENA4Gb9FP&_bBJBhvOJx7DDJTgY;1#FVPDcf~7(^*(Xq zH$2pSQtL#Xt3sbr_h)PD{>po~{fg>KG`HPa?38grP0~%p4o&g*PJ3H2qhP0@y-G(I z`9^Lz{&f|XAV~3Fmi*LxLLfo3F+_{;#KA`~_#cKS8$5;6b0sARZZx1=H!g=g&7ijy zwiaU=$q7@PKI(>{F0(>byv#PQ=?AO>sT6?2U<zLDQ3KiLulpo?iSM3YAEtBpDjsLX z8prtTB%K;JFY)c{MittQ^pK@!eAoND!34wF1f*Rw2AQWBO$d~j&6qvl#2BH*#p<ge zl2yoVPOQA1urDNe7u8;g-K_Tm)h$U1o%v3Z$517o<6ZnJSqs3fX5_rj8XMj&hsCA= zC+hl>FIGO2H$MhsL!ZW3-`gIdn9kl%c023_HAfj~o4P~$c9V)X@wxuceN|k?1${c~ z@5y_hK8Iw*yk&mza>8{-`yyQDF+KAdpZLCit>wjebN2U377e`wz$$6klPu;wd?Yux zY8%Xjeu8=a>hw_wXYXFhTPL_e0!U|zqveSoJv$^t%1zSVQLdZrU2W68cs%Z7xZKgh zAHO{)iY{%&Zsg0vn!k?rb<g*yboU^ON&H0Sak9^qDq~O8G{>h`$@k2jESE52h6b1^ z+?hPbzk3g%qttF#C&1?LEXAa}JFgy47*)vlXil>$tz2&!tHXx~W!02^%<AoDd8^fR zi_`9-H!NqYeS1ZUlIa^gCy#c<l%$22_~YMewkht6znK%7*wxHL)PKlKT~KMf<IyN; zSa-Oj6n)x57`NdzIOXBs*Z(vmgRt+Yn@M%^y`Z?|LuSmrdaktAGp;8rM-M5fXBr7* zovBK+7%`sjJ0WU)hHQv{GTTT@L<XPxnL%oUIF{Hmbm4ukFtvffjl*!O`gX`BOJ`s1 z*gMskVZNl`y$;^+Inip0GX@a9;<_sFR7O^{L%qG>2En%!(zAlerJQ>4R2ReB&ylMn zp<JhVMow5g<$Mh7B!)aRH=mc4U6UMZ)s9>4f8ia+nRwo5c;HIG^1?LZyst!z=Y#Pe z5_xtR^T5M5(qCRWe67(fd2MWMz1Py&#cEs({_cuk^E8ct;)EL9Y2k^*d%&l#F0<ov zJGm$bmG)SizZCaer~ZLykz#%NqKn#{otHvn*omidRh(J(Cv%ds<LBjlmXA3W3x{yQ z=)6YJP%MMk(gq40QjGB10r~MIE%lR53zI)Q&E^X&NSp^*1{}+76$PeFpnS@5{X5Dn z_V~*%aJAAB?u;IC$dl<XI(e}mT7s-X@>7OQO#8G~(=Bwx&5f_?2MxYSWCj_6TZcm$ zG*NeeRe4xapSz3x-cFSr<g;sGQ+q=ih_&DDNvn;Lh{@1xw9|L?zSz^$JX)^mg4_r@ zkh(hr5a=JTRSQw<R0HxB^K*;6A|CGCICEFng_@3)CHPF|u2yCVbpzGn*#l|4W1@Tm znPJK^N6?<%<TYBpQoe6r*uU_K7VpjY9i`nVnGGGI(oc`&wG!)$fCfwafgU#-_lAk? zUf2l(teRY-b^`P(Pr>D;q+U<=CH0%F&*jA7I<%$2J#N`ID9A0OdioagqnxM*;wbVD zY?Q$o0i6ue$S5UM6~3Xg)V8!z*1NcTH^IX*5G7yMufCp%zucUE!A?Lw3U;A7qa4{I z-`sr+58o%(TPG@>Siihn9esPSlx3+eufL)_W7^x@RO0lqT|7mzS4pl4KXoRrdSv;f zfKZw9wo&+_ok?u9ul(~G2W|)Rnnzq*>-Tct;$GSlgWV91>z!891X|PvA0G%k!s7*D z7l`~$4o+4aE{QT<Zt3dileE<HQV)!*T2v3XwiHYGjgg^p^efpb$9~GexaFg*A>Z&o z%ZCi%Xfmg)uBycIq$&z&C|P!Hv!toWa~?DGBgz5!jVT@_oo1}HUK;QK90qfF&!!yD zraZT%h0CH1)NAq4evj$U#-ej!$*H0HkL=k2k8O!Ye>RRjX!7PdsdKj3RZFS#luM(c zPM4#^{Y~jj+|O{&e4e>&dHegtnonXYjTcUO5FLtW90=C3C|{iHn&^4Pvx{mpwOmv{ zpqI!>=h3b@K<jPB?;BxRN>jGdXgS{V>~PBRv&Z5(_^x+}_3&n_YcyhH1Rvw^Qb*dZ ze=`=VEGS*z@Cyj|_=fKQrLQBhl5q|5Y!<m&PwkOPV-RiNM~JzTW=WoF-N@I`qIdLg z(VI838TKWl5&Y&nr5Z=}@T_^pW}-i6X*FZ{Op972V@{tvdFCXrv)GqUng5_DE!g1g z#LmOx^(w)F9)eW(Q6Gt|rK%-?Xgzh8swo~XX$#sfFmN!x%c2rRF5=O^`G(BP%Zra6 z|EbBw{A!lvpeaT8LRcmGt)A)l`wy8nbB?8Vn%1{hI8mb|0fV96hCv=7tPLLVZhCY< z*@k)dtqz^j*!8(=>%nvEny+3E@vZGk=Df%j&Qwwg4_Il)&il-*GOMLvZl&8s?=y3- z4upF@eoWa7&j&&d<Z0>Xco4*<er@IZkVdWv<?7m6Ygd==;^J*?wS_Pp&v24U1sCh^ zce#{5N_5pV|EME%nXuZoq7?L**QY4mn^wxh>voz*KXlMs>P%lv1m#(JR$|)ViTWLF zm&m#<8M2-mK3Q{a-7t+9`q_|OI@BqLa*eH_G&9c+3y-!5r-PmuD0qI<WqiIg@{2KU z^|L9x?Zcn(Xh8o(>bNKl&r;3y319fYiike;GMiElzw*xZKta>ak%mYkD)<b{^Tz%9 z176;S^ZIlzkDF%mGkx6g^_+*x$N0$4CtQdj^9Uo-`IVDF8g$&#J@-0Hk`&l7>hYg8 zgIc$peqtFXoEPDvE@~2{8u7CNyRu#V2-eNw=?=aK21&i(h~i`Wr$;?9{O?6SEhF6R zLWA}j^9|#J!Y~j}n4cn89hmbxip`m!<=9&i0`$=suF$#0J);)l6?9_?#RJAYI&LY+ zNAYYD=sBMmG@$G^R2W7lIzHshsNS9xo-aj>e%{yTdqWpKs3adq)~(7S*@yQIZOKr# z;6=rd%{RhPe%l?hc4uhm*g-W3W$`3%m*J!Ca*v;<C|~-7HuP;MnKNVhxch5T<H|e5 z(MFz{#5<R@wV-=dWP4(bb9YHvbZk-kgtOUTQb>rXWR8C*(X<WP^J_(4?@r(SjN&&A ziPq+-VSD%~3_;Z)b5?o0hbtr^mkJh|YEI*Km<_gZ7oQ`i7cZ?)2-R|OkKxYgYn-iT z%{U0L*`D9*R6Bcsu|E1}_R9X`>+@h#dQzZe<g&Vx<&5P~0V2b|u(_%?4IO(%KOZa} z=!7a3nRuP(T0%})DS9bWI;Oep(rNC}{dJnXj}M(%BtdgDcYG5nuuAFkU$XCFf(rh^ z^=OoqU7K~{X5I8rrE2<OsR>h72FGGQqVU}HecbDk*j|!oy!)k=%>qj*S^;7!nYp5n zj68mZ^@Kp$uF(}X`^+nk#raBHLOn$dbijQ};+l=o$0*`5{CD)+#_}9QPMq9Bb$H8O zfjcL5LKlQeYT?~|c+F%bAyh^L#ZEdQ;#X;QT)Ik~(dwlda_r&_X7JV1H5wJrtE2Jp z@fo~tYa-k>Wg{KR*ZNtmK5nk`%ig<qXPop*lP?%qmjswh<NNU8l}u^kSh{c7MN_v7 z=9b`iT9Rk~S9?zaPu27Nd(U2^(n6_J+DrG@*HDBAp_CMoEZIT}ku?bw?L{R-rJ|G; z6)l!hNJ^#b(LzKd()`c7=jtU|zV+Syzwh-KcX{{DoO9;PoHKLInQ@V{J@uNZXtS8} z&NJS#hvsotSq1uTp5PN+N`swqQYiVZqm!y~QcOoJ3++f>y3h;U(9-3c*cygW>NnS0 zDpPbzD(w%~H?#2=J<Uzp5`XMP!PM*g{#9elGtT?oG&MYBN!d+gdS1}-I&4Uxg`Sr5 zK~{Gp5u3{Ujl0XQ>>WRK<)-&X%g(~sZ|4yD+ok3&i|i}7d=jPnTdCmRr!HGFg0hCX zu=c<de&G&l^IHDg1ufw|b>d4LOv3K>Jsrud^^U5Y*6(cM+2@MvWxSaS)7`V$RK`+h z6#dI9I_mFST$Y|5?|XIHO#XiB-Z!R<JkWP+A1gQgc~R5H$mdSwZLfpE(4(mpT)?Cg zopZfuWl9f24HbOGnsJ@ckcy||hq6bm-r(Ui%VgSmubV!f5`2BPQK!DN_D>bEG@kwJ zI057km94o#Nue!t$cyCM`ivU-abVdZ8}%g<jdUgYJhO~2Fqsy>ALTm2`F82x6@5OQ z=1P|fJsp@v)ePYEalR&}ERbGFss8Xp#Fbrkg96bek}jb;X@-Z_Hp$mPV`e_dqj1hJ z*!!w!`Zf!SlSSy2{!4B|`+_a~x}3LwPbrNksh=D^f;RgNRkwtH`GKuTJT$MVOZ$74 zmJT`CS1@!QWe<^=GCTiFHo&PkX@B|^N}IpKUh4RR?3p7uGe@zx7;=w)XY#I%9<`E< zs2O9PyVy4%?b_Ds{e5x-E%gGQUf2)baDwHLhp1)7lm+t_s0`ctsGp7^ht3QRoix8o z9Btb}eBP)=xw7SVWX@5qPZCIf9(sDuEW0I3z`^3gAU6L}YQvl3eRD=~jX%$3IGtvw z05*V(9H&`tnl0;8iu*))4bH!ql3$##jV&>96s6TjV(xo)D6%!sbpxNzaO%52W4n=> z^;|1jXcC)z?u<6C76}ugH41RJX6w=1%OCI0b!}ZXVq?~taqYfp-sR<oj%9G%iyt!9 zFUNE%t(DiZHp^nD>2&ZgQ*qAKqc-qS>QAm+Y^T{TJ&n?;XlWl?vSoD8r5kd}dt5(p z%}BlFn(I^<X*>kk(10I|IBGu9D2OM$)VxJluadHXyUbf6b4_6?eV+K@Pv&X|$|I+9 zHO!-o;xzX(SizRem%f(zF^n#~pgyw@-228D$=1**5foFNvICURyt}6)gwq8m8~T*R zho1IY?WlJbs$|SY*Q>+Q6)2{>Wn%*5{q+arv90T$UQbmt@)R}6fljKBH`iS_eKw_r zx{%+zfBLXNOVtE9xTuQLU|VTH1>t#1=JJ3`p7FYJRZ(lIEZfEezCCOU1FrjPd4wom z8rm>7s^Qhid4on?U&X#LYkwVQgSd~ikflb9qjz!>qKZx!F<2)|=RWw8f8Nmt-%z^k z>m$N=Mw!Vx{nP(Lyuc_(D<B<)^bk@jB=UF*7x|Fz8q?;Gy4I)tr{ncK_y8AWNLL{J z%+UcapNAy(z5M^FzXR-e!Pwo97zgajgJ91f1p5ymi)RSwJVFTeUP8(bnAa=d8SFuX zU`-Iz_KEz8ao!34IsU15_68Tgd;~+^0C>Z`N=UC5A=p<6LHrt0D?$kNn_}P&Yr!z+ zfN4P{4fuWc3xrxQ7ch_5-pctWJ_nHXFxXXX2rVx|2=>on;IH!pp*cVUh$Tm`_6?c| zNd@Sj1Ux|E&U#)7-@%?v<YDkn#I+}w0N~4*h1Wet$hZU{SjPuJtRm6}9+(SB8|a|f z$qTbOd0__7Ko97W*NhPChlOB|F$PUw|1k2n(o<Rg#Ag8TJJ^>C!TxAyaVbIzfd&w# zi3}lOUeE;^U|zuO0rLWG4>N%ej?|K<B6OpXi9e=GE3+N6{1b8Q2_}q1UJLYd<p?c> zWD0ax1a!c>VARPAxIcjPo*3-`^MX3iVGHzs<N<rGb+w7=Hu5Rz+f#Y}v}YLFJmBHw zz`M&T5HbTAU|ujOW%2@U4~Dosbn*gj4`km6d(<J=pANxZe2DBDS@6eU$^ZBR<DU=s z+f*TB1vIb(8kl2V=xh&|7Z!B#!jJTgzluM^rla4TtgWpP>|ux=J$i&7jv1r;#ZdtG zuY|h9G*|&Nz`S75$qTqWU|zuO!3@r(a5e#+Fov`Mc)}3c2CRdIbfH~fJpuOi>*;`8 zm<ztZnf5KF_}#d}ewhgNJnRXku4fp3C*Wgypn)AE>rP(4?E&)wZVy&){!Pav$fr+l zG$8SZ{SeXbNF5y=46tEuMFjg&BG{`F#jRC9us<k@c9B7_k0pZr91*NRhn%2Ka{xME z8j!qz+r!WHjaW`%T>;Aj+%M<?UtnDlV(H1_*k6HvTN{%ZVgE@4dy^tq;{d^4s3?Ao zJc6|a5$uzSGUELh_`}*a2&Yv*1IJEYfHnIN>=pWl`o^C0#^umvSoCF$o@nqp>mT;X zWY8P-P(`q=14{6i0W?rVuqP~nwI2|yWAqjNBn`Ur!XN4zq29aejaXK89vA*h{K<aq zU0oG|wJgvnFJ%PlTL2A|5bTB9MFZHo^^5u^`2e4tJ9*(p`o<sC8|OcPeLR>1zzuVF zcN+Yz`fqP<XO!|R^Ef)~GZSc_@+A${F=>z)=Yxts|6|3Q^%}Q_@AZv~OMhH%REB;b z_Z^b}@PFl>h5yHo%+3b(<VCRl7CP;%ieOz6bPC!5=7Zyy4}b=jc3PpgP!q7<Z?809 z?HgHn;g9x>uwO5EocOcwC)+;k$BbYv4s^zMW)}@`U%;RN?hhd~zOF#9UvRJZll<_z z`bOA$nLM8US@`1uV838=e&cL(&R-p9FpEKhq)t9yr2*_gjha7pplx+OMuT7N8;wC{ z>O9*24E*1}2ZaU>*mD_O2-N7Lff|zrxG%so@KX6gCcysH=mW^h>oBI>^9IH@&`*CW z!G6>T_N7LvKvpv3<Tv!j?tLR3OOeN)iGNFd4TAm3J87T}e4vJsF&}i&;1q)fpJf8< zVUA!=Zq)Fi1bt{}{C;}>4&hE5_QFP(9zE%eU40|y&8%bUP8q<mFbk6szoY*r>%XnJ z0i|x%>ZHMJ1pBx%X@L7fhD_)t7dvG_+-i9g3%Ws!s|<qm4pEe|6oP%`5v+lTB36o{ zeRgyNYa%id>^YBM4|D{3c%#_*AJZGnO3B(sZ~lz>$9gk9a36RzM4Lf_i<>ln512GK zi}|3724Bm?c&r~WXu#BwF%1qmeWn4dqXjfz;!n~ce#2Y_4PcLUW_$RC-U$26lSl5K zg+HnH-#TcEV6AJE8l;IBG=TmP^8uC#-;#@%23SXqbz{;Xs*?r>Fdx`Up#3X9^8iVM z^cWumd%}M)hUiIe+zI_g=MnLv_`^Q&=w}kC{}i3y!r+0+!CGB3z%qfPL9cQV+5$OF zAje8k&P+ZyfZKt+_*XQDbOM)+_BP}J@*R&Mu&&Tk-<X0eD9nSg5-uwZdTak_X=&(Z zQe`ER$!ZEyQCg@D&|nUNwMNk;%m-aE;oEYt`&bE&7cmVEI!Pju2CRJn=7V?jFHk7R zj&JFWrNASd$5d9_@%8V*AJz+H6w%(=j52l^0}Zs%6&4!&s9a<nE8+3t;Z>Lh&=&v= z82use0V@p}Yo9aZCf1pH(i=TMpYH7YpLEClTloKxxd3wfTT^%mrEk$;(g6Ab1|R%{ zTqJ40lnIyyy~_kv{Cm<HuYcD4o&Rk7G0n(+@Oj=DbUkcd7Y%-gT!g&}y5u4$6MDiQ z(*d`KD3FhxbzcC?$@y2{k7+=Tg<9XfL}gj=s36H7-Hl(1?!>J@w~x4?+p%saJK7ax zMZ2KPs8#6ZAxH<E(Deh3=vt&BN{?_rmv^l|y~#yZnSk*>2L0P^&>_hb4P%R3P)R#+ zhgm~3rYGEgH~+J?89X0=Wdb=a>g<0Qr;lx|sHNcrGeQ3a``3M$-qfJiW%n54#c#_+ zafI>j>39xtB4^H=!9Vru4fj72e^y$M*QB2K>PaR;H~1ZLv9XScKh7H`vMjP+{}%4w z!vAMv|IfUOD+J^JyX0aM3;rbT`24H*|BUSanRiM2N!=jhfE{{KbOSw3JM_)*A}JH_ z93rb+Y^npr2M*S{|EJ=A{rYtVtgnl+&=ssBgMQTX`t#((onv0#950eIV3mu_^~}i~ z*1G>4_;=6mcim$G)K?Ust5`n*8Z^Fq#-IuQmlN;tQ{%;WcNNB*3+`jP!}qKF-#x$I zb&vG}tRr3v(`SqmvJTjw>iena(dE790y$3j!SP~F;uZ$&u)OUK-#-<9Qb(-FImyrw z@p!qnvC_B3i>bS;QF|M6-U-Xve+&M&pCWaF+Gn>=-Z6K^c!}%}dm1Z|bIEuP@l1d= zDol+;Sckv|re}BD@%=xw{xNKr2Be;harg-J*iiKV)f8SqC7JOc3l5@(m-e6s7k4q_ z!qbdn=y_o}s(=0%ed=J&vtt^<{!TsO{yXsh8JW)dZcla5+cQ!}WTgeBM{ftl8NZ9` zyt};XUdFH1|If&D)^{;2y2J7__ZY99($D09-~G4Z|Fd}Z_WrNp-&?-_mgoQB&-Cm0 zqvM}{OFj1n=YRG8U;Seq_>cd;O#!l<V4t<p($fDoiNx#M*ngh?C-L9Ee?MYPuy5(V zk|uu?|LEvw#G3xs@c;kP27a{u?|4wqzbWNz;6{%lRM4Y+iVV2({Q5KQ@iTmVXFV0= z`t)TajMw+t|Gx=$3~P7%G2Rttof!#V=X&#?mzmoc319zz!@qld{jcNytNi~x{`l|r z|0wVu1^%PJe-!xtK><9s+)D9gOfi>HMlsGl6s|AMu+=r={_8Wf^ZDm<1CuOVooBXg zXKLp?d8TyU|5<0UobG25E)q`uPB{McXGVqm#6P@$D*?$I5|ttX|6wn}ag5X7_7A`x z18Fs+WJuVdqYV;1z(XG0hO`}$1|--`@t<=5JOdydhV%*hWfy}v@+|mV9R`2X17Ma< z0O;?4|5-Esk$GTax7I%a1Av1M(tQkD4ERr)fR_{*Z{0oa9>>+KgLuS8OgCqY$+Ev2 z2Y_K)6Tt2a@q##h9>+}MxN$OG8pn*|^&{|_0kh$HP7yOc@G8?678{NQ|4tmB{1@@y zvu0BIIrbaJJd<(Xcr6GV*QgEWHxOF&9&p96Tyx>RgX!32^*6(hLV(Y4{5Fo+#c}*( z+y#!|C)Y7p0M|GM5rb?2_~H6^4fwzj^moILedlrPF&T4fQp$|I#&Hw+05`b~fi*mL z030zt;rP<dnCq|~g&*c(!hRv;tyr-lFCro$_u92<xtW=nIXGbgh5`I!96631#_I_z z23T=j;I#zE^%Tf;HE@h5Zre4?-qi=PU?dU`fU(DoZSh=^ot+)RvCTi5JUl!Q=^Kt= zW<7R5|47FF;y7?J79R6cCiI)wZ@UEC9B_KpnV!PA9Wzt61KY)4zkcmc;=+2y@PqGF zc5k+#Z#~C0_qO*<=+^N7bi!MsD~|W!wRncVDH)?i#_3^x!m;d20SC-a<hl+$wQXD% zn5RsD*Rq?s5He<k9bf-Z_(}iM^ay)KEG~{eWW*SN4_(o9Cj6w&G>$Q|XNj#M*Jfa} zZNQ_awoS$yWBH&0sSN4{4&cHs<@6tgAJhJ2@hwIiB{QCw8AFM2D7t=>L4Oi{(&rh+ zL69-^Khm~wKZ|3AaXkb=3{B_pg^d0q@RRYtd8aosVxMp<=t)mz?AKAKhx@4qP$cLI ztnlM&(uW_f4e+yVTN7~kz-${kS$XJ>z>j@v@NsR=vd?il5WhyovR*sjf^IZ_4L^ww zj%DtxZ7(Wi_Om_7?R>}+j>2DspTYYb?TlDFMjRf*U*R}J9D_&3qP{3C_=<-}`0@FV zwCzNY>2SRJ9q@m6SKs9)jbq4g><|+NW<2d_@CB<bzJqSJAaoq`n)qH)4EV!u10Bx} z_#5}L-)h^j@E$&X5Bzn^7$}JUVU2%c;NZ!`0msJUnCROlgHcY>HgpSo8naJ@qO6ml zC^I1hWgHJi8F0RTH4araHlj_SbKtng-r9Bolm7322mCmmm*J-iF-$mqrwfP9_;zNW zG=u4<-?_d4Ys?ak*V)e!yLfobOjKQ6f;Iqe_13minfht@ufk8Z-|Wcc4F5{(Z{8J; z2r;QR9+TN8;dL55_p8{qxC;kH?A@2~Mu{P2C<EGPZ*9AnDFe=Y3;ycrYQ`EV*yh?> zDk%Xa29Ag4f|>DjEODhcz8c5Xe#YT*zlztH=!zkPco`fkf@9}cW2UO!HTT%IaqM7c z|LOTH_@6v^f>?dtdb`Gb5ccuJu}};@SHJ<sL^5N<S>hpC`Xq*rcV{dpj{U+hKc8`6 z#(-A5e$gd2SmpLk&<8sY`nTZ!mcGOK8<U4Vp$Ex<oj5Rk*1O}-y<f#Rkn5e0v8;^v zJ&0q)F?+1=ll?4S^WiB|<YchIj<5fS{37wdzLKAy9hYUqqRc&}U4HjW93URChkg~W zSwhC$Fk=mvahQzu3^;U$-y8ZQ+y{fc0xOfDDZdkbj0e^wu#Y#^huS|hga7zDMtWCU zf!@A&ir&`XRE!#MsxC(LkWO#ZW5EGp2qA`!j3ImrF+(k&C*brR640nUH#ZlzMXBzv z|0?~-dSE?c|4w}599hlMuXe`CGxVfy_enVB1-C8I2X^PqozF0jK<fV^@c&5v(_6np zKF9FijbFov<GH-m0A(I>WW=w0?vp;_!0eOAepL$Lm=z2^Nt5l{x7Yj({6E_N^wuw> zr>A4^!S~#Q5u5q8`Z44F{<$z_zuL8C1#{gJ9GA=5uQoTl`X%^Dynp440e*OvDH|G| zg8~mnL2~Hl_>s;vCrDk7>{pL_&1U$Jv--{7zI{6n)4wO)`7`(*<Bi9wFN@L`{c3uc zA<90q@+;ZEs_QY<l7fB}k9+Vz@;=V%?|`4wFRJgQpzMg{pZirttoPUbYVsyM^z7DY z2JEb~|GVJF<zgIgpNfyx#@DE>EDvIFE~E0CBvg9qB&x_ek7^!eKp*=Ic&3B#F8&68 z%bI?c{y)?Iz;>!%l*L*ud5z@*rYY`IdP?}Wp5P|G|5^BdrvLfXcmNW{Z=HV@{%_^= zcl`Dr{9m@Gzq$_o7w8`w8++r;n>X42#B}V~vFz{3-%Xn~WtWzgB6zneJ$?EV;b(t$ z3JwnbuKqy6fBN)kM5ccW{J{>Y*+;#UZopo<+5g0Jbi<5H3}bKlTX&zqzvI3jcqA%4 zVUF%?5@ek5HBN<FC!pu4o~Ur!#9sB!zXRTHl}W<>6Y%>$e*gH?8~^<G{67l(uTcPo zL}hHyBf;5+$~?mj<DNqC?)_Yb2?eXnGS1+w!#Gnr&+rrD{&%0r{K+#}Zf|F<PB{L? zGahqdD@$)@?58CHNd;1upH`2vTkyg!9st8YNNXTvL1J3q5W;hrHzB!08t{un^!hpE zJ^dq?d6Tg%6zt|YFcpPuvDjzFp%fg#z@7vCE_jg>v0gLzg&$z_e>(tdmDs+GeLk?? z3bqO3Jy@23zlu!>LY@E@9JhX<m|j19(av1&9NXEkuK>1*Vjm#v$Ao<X9>Tmb_L%`c zEdaIWHN1Mw{0Dxh1YZzri^9Ga*k=LTX0h)G_NOuiSg`*N_EYFwOC9q=IwYU&S$ED~ zcE#QIb{`ZJgv!gYivaU@4*27_e{8eI_807ngX`ls)caBJ55fC>#DHC+(=J1PhGF<( zt{Rv3y>TO+Gs8B$TgQCSF|c`I8^ztCI}BS2w)JA0`wE~1wvXa9_^}@i-ireJGvPfb z82%2xn||;PR0cqY29b35k@E4}OmW6h#=6+p=7#4a?-t$dvgKe~2=-sV^?~i1*tg20 zv}fK-1)DA$9zRn)p6j|1Var&T8Lvx?*Q74UyZS}>7zS)p!u~ASR*cu;?}<0vnQfv= z=l&7=KY^Fzg-u$Fd2&3riS4K9kxmHPr*XNg3D*a<G4{rrMo=ekblG{oS3a)$cJSlD z>+_!9$h03aVVD7H()*xWFJGdo4Xt0L;{cm8z(Mln;!>vX0`{%K4f1E`-_iboF;9wZ zPuP}>*SEpzq~kei?3;tvfW@{~y!I=$HQ_a1qt~gSyvO;-1z=$1O*4Q4j<-FP&$=E7 z>ou<bto`N;doT$D_9?)2U<?EHOTle|gaO-4vAqu4t&`q<V(=zjUljAE57ZAFUA8(_ z`uApcz_2{N7|vJ|5wCZHZR*%J1Fw&a*N4XY1u$%fV1vfCPi(IuVZe36%9|&d{J*Iu z{Cn#MFb{lasztXCS}|b2>u+J3IEDe+ZSb1?WV^(6aBRE8>k#9$7RmB44C_G}HGE|3 zQP;JuAS?d8m5-k@Y<X=TP+dt5s=1$vp5MEG%5I%PCD|v@v#b-)KO~^E{q_vo9kyd* zyB)UwR>C|mwlU^_>FntXFgSMeBW5k1wa&kFjpvq|VErxZ8-Q)nc+GOMU1EC!_OrtF zPrL>zUZ0w@IpDHLx|3(t@_VcQo}RyZRmx}+)v)%@gNr*E_9wDkV&4#Kcfv5>@=3aW zuYB^oA33+RG%##1c;5fvh3!4I%S8XVAU8g*vGqI4$9CPy+b7VC9mWh>9A5tk`!|s7 z67M5YTVBYR-zV|;Uisgub21OsGnPvqK`y?lEe9J&E_(Sm1J#!0!+j+K@9wsP@0H(E zJ(JHcY^-H>zs5X9rtZIy_ung@eDBXX|5tv`?H}95FJ8RJNY9=<L#3sE&fIKo^vC66 z+cr*rb@|_#FZ-3>?r#xA1tB6`G44gXrBTstsjvFqUn%29zQu9YIQ3RODF^;L|FskV zO-vcI&{3U<AI@y)Fl7LV@&gIKhu{CHgq08S!1EM1kOs$;k@FPhJaF@i2jtHQDe3J; z^!`4~NaR60z$-9u!?Qd{xY%DhASR`FH>gqbU>t$R+BjZF3C7tjFz%~sXT+cJ{z?IN zL07}$H#~;KV|qNVa1hFihw*GAbIDfc?)l?>?RyE<rn#M%n3!=3^2cK%JXXbH5<F%% zf^zhroE@N}!hy%gIQfv};Jm^1)C|5}P2E#oUf#Q^$_n)C_8C-gDH7dyUC;25#N$A$ z?{5d#F}=b8_C1ge!<ak{aH(ow1THYv)yMh2c=4jOC%KDthzF_r8Dl;?*123>)-~S4 zV_xjji^u*ZrObUxaO@49hgl2H;K;`~d@FyfM_mbD#2DM+vCOqcd0qKqogMq5<2eRA z&w<CYc#lOq$AQQ7P~Yv}%fAiQY{g?H>@SG*)5|+8QPP{%FZQen0eawZD;_s9>K<^x zbzcB=^&|OXUt>Hb!h2;f_Rrd&hElegqU2ChloY%OoeW%vF2`>|dul&^QTGpFOwc`l zy#6<9!t~GDXU5Pm@t6nu&*E_(9`9fs8;|+$I0O61rd?0^qV8dT=GN}{llmNauB)p< z<=OEJT^f(8@OT1`Z?V5U9!ubHB_2;<KhX43;azpJ9cTu}jqdsP%tNi{RZ%*6niheI zF7810&IF^p#2|F%<R+A`UWHKx9xvTY3`0pUdwCI9^Fc+`N64SCXE-bWu+pacHTKWJ z`&e8G0)O4ja~WepJXeAF7LN;Wo!Y|ir^(33Xv2A8*zv)dKS`I~&e-?sVagWt;?WJ} z_!D@FF$RY@q5SiE8RJCIXIgv9zbE>zK5K2NLw92wQQB60#{L^5-(Cz`!q_tdzYFnF zExqO6ohJC6HGiz5<8j0L##-<>eT?d>iqN|^*st;P+N9sgzbCr<h_4eX4ByJ1^}RoO z-BbQO!Tl@Gy3_wx^6KeZ*8G1&&-)|qFu9*X`6J){$TwvE|K>Al;HRJlE=KYJP00t4 z`F6tZd_O_oM!^XyMA$qe0*TbaRM_F>ClAn9s4(BH4|Cm~V0UnaG~#En0NLk-<tvtZ zpjYKWY~VS_gM&2>%#*#Op&+ZHu$%^6paJ#;zY2Q570}JT(8ch#-P?5D+3gHjcChLV zL$+X@0_!bUpTKq<&?R0e7NTJoj-I~16s*gf`-0dGtS{h%WjWTdmI6Llzk)bg+n&CE z*YuV#hsB5w3e-X8FGQi!sYg-L#W-~A@e_t!0qbc%TQAn{$@W@SRt7$_%NVj5&qd<7 zP&^Nc=RhMtCU1T9kufI^v}MGG_5}Z{r?+9Bl>n3zw-)wOaYmQImonxMu{=zC-HhC7 zJ{<&{7<<5w-;?FDo(s>0pe*oZ$NB+|SH!x(+c&S!zJ2>{V%YIPe&4+g@O@?OS(Fp& z!jL(54(rMu8%AB>Z<t?y{+_j5*1o@~p$@&NeunB_Rl&E-y?)<Q`Mo{sUjEO{O|X9d zBYjp+?~wTS^xKa-BftNZGXk48j?VSL2{QUBfeqcKm&DXEsT5{oq*Ayk8uGZeQBlGF zxhWHeP$)DC0YgE2cNF%WVWWtMbl!1ODC`tL7%Jl5vVjjdDE*<s!gn^%J1{pV!adg{ zu=8?t<|#s%IFkZzF!L0l934lY@O0)0ckq3m&OAjZK``p<+nJ{b#RmF53}+IXB>Z1M zF{GHme|3rhTxn7CD7tX31^;KmH9oGe*MGv$^aGfi*`)iEXJy8(7<T;Ymq$OKAr<m- zqqtCPDUK9t$jz2wPqBiW9Vsg)PVo9G8h(f9`jezAV~mv-fRhB3G7H{upg2=3;C*+1 z#scoF7=`G=y&J^_es=_#7{Yl4+^>Z<T;L56D9MSk8h%?2Pu!qX{2o4}fp*j`IMm=> zSBfPAKIbpqW6d9bC-%j63*b8!`0{hU67U9{A_@O7Jt<Iv0F;CAbYr~h2yoc5V8EKc z2t^febcWw;0hTY}9Z&Uzd~_fWYeo*3BF=z2rl>XG?*?Uk{Y->%3}_(Epeh}%zAWv> zs3iv9eLH6Y-k1rH=>bGmfT<WjkL&AOU(zXZ@Fzu?#sb|epo;;}>igf(;X5)1T<dcI zLZ;h;3UD(OAYsx4a~q~N$#3|M$vK#IB;TxsZ>=cnAd&T}58pch&#VSa+*oRh@&yHP z{faaA;mh~Cb47QaP=oKN(8@56l8}9F2^5MbqZJv!ubAIm0sb#}0a`0=X8#@kixhyq z+?)y$gXl{PB1RKd#8#r27)zI>E751tE$KG&)$~Mq72QufM0~gS0r4d9tKv7sZ;R)P zKNNo|UMc=c{H=JaI1=ZS;FB0EF+yUT1YJU2LRmsxLQi6mgsp_T#Ab=@5^p6&Na{<j zk=!U5DH$z!RPvPMS;<S1>5>m5>m=Vvwn_3z4UyU)6(W@^l_A9;JxF?l^kiujX%A_C z=_u(q>4(x!rD-yKWd_KI$~4IE$O_16$Xd(B$)1qql@pX3AxFrm$!W=%%B_;yDwi+! zK(1D<MUEyPA^%E#rh=xzJOvX4O9fj6CxrloEea6|F$#|rDimHTv?zR1;8qk+6jmIg zI8#wm(LiybqJ^ThqLZSVVvyn%#cPUribaag6e|@Q6k8NIl=zhfD-Bl~tu#Stnv#T) zoRYGVx{|iiJSAhLB}$e`wn|P)tCiL(`6_Kv+M={WX`j*|r6Wq`l%OkPj1jVlLZXbQ zA}Dlrx*A=Ru1`NoPp5}Ug-M-|O8Ua1=C5VKg)&ec4YUV88Ffyc$$^@I@A;@)v?xCr zX?P?~qf+Vo1Rp1ld7viMijAE{<)9FzoPDNnQrW3~GBhfClrEt|3}t!3Pw=o&DN*dv zG#?5<@AfUb$U}ENsW-Pyxy?DFQ8HkqeY(mX1y{NU&qj5D1(uZYeXmFP4KE=4IPMUB zY-gj`XjB@lztP@;dxeXIc4-Q@XAel<v=8Um2`QBq;8{!WOYm^A&1dHnpv^a=k0gZg zO&@{5b8RhMoLrq&xQWbia&dNYv2e3>a-?e#v+?h20?MC%*II7n=w|EYF0#PN#dd|Q zCF4yI11Bf=)XK$;`N&E{b+wy~lM8-NoDe67kwf|5za(9nE-N8Tmo^#7Cn?3em6Vhu zO#VK={AgoXi3F9#=11d)N~ZOp`O&D9<nYN{{+!kw2M?5GrJs+jp2_abA6IPF{=lS2 zJ*s_e-v*ziI0uut?uL(|0t1ZIMY5ue+Owk5g0mc@nxY5aoUU6rXX9=yK6G{8qd_f~ zCvd%)88M}~?{?0r4qE}Mqv0-%djnqkEA^`?S~XB}bPiu#i-y+uh!3~2hNcAQp$jMW z7r9z%ZLAEuBBPQ&F0ioV+;xX#b`OrNyFATF>%(*VL4!I5W!<+LB2$v%czNlhEgj1u z22Xv+QGIc<xJ1mdtfGeo*4#J6-YuANu<xcjwee@;j=$!(D`b2`zAyU(;c)AN)0Rz} zKJx05bdel(q1zJeo3HMzaEWq}y6RpY>F-qKFw`lmNr@7;T6SxGnb!W);`^<{?FYs| zHgjF>r#X19dem`+@6`6?n&%fgxsN}0H)7Z5fP3});!5j{Lz~pObUe$J3igv)6XI|% zN7^lcqqWR+iTHw@)_cbF$&^ysxu@ouT8K}_wbplTLeGg7&i2v9GdP7qRt^rFptas_ z$L&QgR%^UamVK9H=pL1Fw!(B?{S`CWYXa5lcz2nIWvDEgc!ys!z4j8%+Ohj&<5Gm5 zWL*+TDUx~QEtAMysj#Zp(RH}jK9{7bK#4_e=Y~+$>pNry3Own!Dd(poO4)Dz<kHS` zj(JlhPw4Lx*p!;g;d5p#K{LHD-hatiOV|2SV|VG9PrNGgVDS+ev`}h{5n({|gQhTo zpGrmS?9kW(34VMpfbTg7HaHO@@PmHrL)ZspZz!<aIC=POp}p)}6Y})?>)9NQCi-*o zboK><sW=A;E8jum1iqtE678N<3)M{9IZH@4=cWFx<ww}UX(1KTJ_>`Q4XzInO0hFp z;x>zT7lF*(cutQV88*ZrLv)+ziXh8(dUw1U2kNNw51}4<axD8)<F4U(2RL49&2Wpd zS^Rv#R4ZY>4Tet^Jf1z&eY^V2{?gnAlZNI@k89jeXe$~#a$Axs-yPvO31^Pi#fMu` zmybCreqn?7#AIvNY2jy|(y4vlYxIeGTQsL`f%(m;+%fA_k}kVVFxd3)YS1&8;LVQK zK_i-PEs6S+k|6I>G;ELJQ0XzMBTvkI;9spMdqt0UX>{y<3i}Q5H5RE!f*Df;lhb`3 zoZpqSbl%)CA8QvLfAMJN*&||g+e>N$Jx3cqn{W9(&Ef8-g1EI4owF(y%P;0GSge~( z*_~YOFP#|J$I8^L<yEbRom*6c_M7^hF(>pJH`Nu%6aKf_y^OCuuWVJl{e1bU<e1up zwHx=}slWKDX@THHQ`h~88Ec37FDjN9Cg@^xM71Dg?CO|V`=77%-0gl|bxT_9Q=h0q z_tvgnXeK34Hg1@8U$5M8ZCrh-EJi;n6n@T?DZTIA?)=QbpLFjQoeDWnJfwp?bNiLT zpz32W$5Y=gmsK#k!<#R4)lG;kF5|dPw1u?aj1f&!F7H`Vti4WQTC+mE`PdiDwSC7* z?@HXeBF*sr`U|#mChuNhdvj;zJ2S@<d)Ec|aGFM+sf#B3I6o17?A6TvTtI@t^~%Tt zmGeL0Cxk)#z+E@4AxwU*OP@kaVs`0cSh{qz&d%IwxyUR-5p}&;BC}LQpxeg1wlpD0 z$PhB(vJz6zYvWrw(RoXFepxmae;_Wn1vvFwtgJzP3<Rc!2V4R?Gp#JvfOLRoV~NrD zSs#I6`tBei97PO4>a4YJu@af>wAyhwQ}A@Y#P+S12tR5xD=`>dH+36y-PB;39}L>^ z(ayCsPs@U?=-kowYm+PPGyanG)hY+O!K+{7AG#NCT#hU58n3j2xVWz7z@eP7i=q-e zJ)iC#Hz26>z|zTQYGUHnP4i+aQMEhcW3VhdZOwz&yF>e*$`xx8S2HwkjwuXTRPDCp zLDt;xu}?gkC>p9GttEqX=ej$4R_bqGD3U$fAXCNcLw?9B1=kAM<I(4%2QGK^xRG#< zcaHQ;$Mw>0_V3$84?lh4=HRIVhss%8S-EQa%gKjAYIytyjn<62B05WNc2MKZ+FiqQ zo~7>`BOV(Qu|j7M4|n)DU)2e3P2}%I@GBRq?`NN7lJdmPDedW&4Ncc4ZEi}~Rhj;g zO5?o4Yi7>7eR$05ma(G@cV4_fWW<S_GMn&vH)Z&WH=`m4ipyI>Cd@U?OiiA!%G51+ zjQ8%LR(kQJ>bW+1$}CIY4m-IiXlDPRJ4U7oP4HAsTsA$^bmh!X?sK%&-o7{6yR;<S z<*B)-&ZOm|lLzmMvl}<eQq?y;sA-93-(%haMf=QeQjZ?@uTNukoqjYS5T=6(UZ{0u zcS(b}hA%o(E+0Y>|2mFcije5ik1VJZPHyNiIXJl3*f@uG_MH}f(OXjc#BC2+?i>Ct zO5JZqN4XPA&zs}w!7sBt=b7c!dhS5m^NDX%6b=!iaOPv#1&JX(gRBnC%iU<>Jv~@G z==igEdg@3%%2L7_zc7m3oLEYjMwvt{3|wI2=H@Ivefrw9YsDN$)kw_J$zi(lN?Rvq z*Xfon_S3r>&^U2IOAY=pH6p9!a5>8m{y{^+m#XlO5Ep|_2;U<lN>nPl?_R=p7qOgt zLeK&iez#a?L#{txup2S0s}ySB=+07{9Ic!zU7fojh#wIvFhNAv&4?w$JWk$D((Cwp zQK^I~p-kpQqYjby9>i*p-*f{jXD3%%HzyZ&F&j4rf}4}m+Lss9V%FwMN<hVrJW3y? zgtKv#mR9HtsYpzieV~tapB<-^_2u_3J63FQn%hCS(En{Y?c6aBm&PF@K03K*O72Z{ zF7S6q+k7)lXzCK@Elr1qk8OFc<^H;V;_x|*$fZ((F0=E=w52omB^b=x(P*}K{oI-> z*T-C&SFO3NF2~=7&mham?qiaAsKGMzzzZuvLsx2@%H@yRb>7=ARxWqNoc_lQc-Dz; zTcl8ScvYV{{gIdcp_!(moKHM0ik!70+xDLKV!`c(uQ(@Me>1FRqW|Ndh@}r|s)fqw z`)@B;&$CnW!F3VqcwRP7Q-zbo6VGiH4Lda7VS4;h9zlZ#H)~q;C35UiS0bLkVOK|J znNDDzopRZHQuyn1?abMYLnKdGJv?({*7LBsVc{n>Y&$aH9vU|3T$`3z!CeF2f&z!t zWoy}sg`_v8elq;D$baxOtrA}QrKoS#_DwVTC8sAJ*m$d>G<HLq_`v9ZX8j0PAEUmt zQo%L(vTd^GhTkryYo!{l8xy@;I{omX)g!$xYU+g@wTYBHcwof*X<MRih4&Ra=XS@3 zUw)&cROTdJyK3FgxYflTjUUDpNgNbh<<D;9$~FhB?N~H^=M&rP_5_Vn&I0Eu+WVAj zyt^yrn0fI$p+T?X?j29EXnQj!J4J=cao?+W7@x-5vs(J&J~^ws5KQBF_~2gRC0XGQ zF1xOD%-37BeegiSkIMu`H8Z;;Ak4$Idzgv~Sd=bd4EQ*@aSdVlr4;(!phl7q2kwSJ z&6KVNETY9K0iBjxi5S{iJK8#0i|B(OgaHhlAqwdr`+$=q=u#4-C?s$HR5AR$F-pO( zeV)qVVX^5iM2bz?NADdrD{5%FSjXDOgB|A_aaO5&LOD})QK&{Ic);FkNAETA&P;XI zIKsuHdwNYwEVa$|Wv!!wTUP4U8EeW5dG5&`<i0s|kofLOG0m4*HX2Ur0_#c*4-@LB z!c8=8<P6$~ks7`&rzKY!9Sc5Xcy#8%Wh<}b`&(;7Pcb!HyyIc>`N<v*?{e0^*zkD7 znY(9p2#Klt+MWsB6Sc&4h4Hc-nX9KCx4bLD7c=v+$=S6_28q9UJK{C>F%LsNrTnK{ zTQjB}(UMWF_kSPFZ~64~!M&;`7ff?%B36sHnYd}{?^PBXbVog{b)UTA^i>a~a)-nl zooS3SZ7ywcowHG9rmWtYD9()oiA^nRxmzlE9%%V4A8^u1M%iQcpha})vFuOAUKmp? zvhA$%>GGtsGfJ)kXKdCTo|t9$uIT6-c>@_K>xqXW&2x0!a^?&<KDc&b+!H6+Vao)q z2%D3m@?st(?Me_ZKWr<s|G>f%dn0$G3^to6ZWSwXa+w`1$4A@4D%S0kUh|gOQ<Ft2 zW*<pt3YhxL1sQMO$*yfQfGZybI7Dtyx-id3WZ5F)$NorQ=k|=FZg$sIC&az*OnGgp zBT9Xx8zaVhlnA-A{FC+b#LI_G8{40a-6^*694+C(*we?>#}ZNwJI+y7NvyBak~^T} zm@p;stdGiv2ZFWPCrLru506^E6s<5$`Fh;(d7#pxG&Ev%{&NX!LW`3f<N)P&boxSF z!=FJkcHWVFVD5M|SQ=(gREdGOK*mUlo8W|z6doI~%IwFglal!PE$!=Vi<<9FIvA^I zM^qEe_@hzmwuCid6=fM^5oq>3QS@Dz4GkYeb!XFuD`@=iA2)xd@IFNfJ}kTs6TSxt z2l5FBZ;S7i|9#>8O$dHkihnuz!x&$xYnd0W)f-yTPb0V4?8FFz&1RE!9LXD@Y&k<E z?uy=<%fi)G{l_kw8#O6l?GcZG=LVWg_+Sw#HY=ecytZSZdiZs|(BS(D1!`GpF9W9e z*i@f><jSvgUHj<#`PrlP7EX0;T)oh9@nuJ~nVkLag|ihJx)GK6cdgIeJ^f++$r0Ma ztq<qVpDowO=R5w*4K<fW4IPIPGeUgrT=uG{>q%Pc@^+lv-~8&@;TEN7()U&6l{X%r z&OP<x<DIF8d{$m>Ko%1oFXCRDTortE(4mEyuU}hsyl^~Db<uCSzUkQTgCAtyUN{l* zF)x&3`L;^|r>>T2`O*4{uS*UbBsE{d_X)=#`^Ae>%s7<t*`AgLCOVes7(1SuRejl5 zi>_wC7j?JK6;V%nH_uS7^x&yR{Y=XW?q-e@3p>zuHPFT9nr`Sew|L=Du{hePtDgiz z`*}D`n#mPEp8c-XNV{T}N$YjItEP;rnsG?Xl0EJ8vHM#Ub>6S(_v%pIi@0-B=A91V zL}n%qo?ceZXdQZe3UWH)dByI%xK*`_h!s3aFMh^z_9Fk5S+m(I)ahEBR~Nsh-Sy!v zUAd)TO^1a4l!tp;?RPJ8d(2xFx%XJ@ivYj3%QU$hF7c=YB&ga|KOZvU_CVjb2(5S9 zt?wN?FD7H1Yq&F0&YpU9Orlj>UejiQD>59Xt5tV8-}$)u>YIWZkgf+ox(2dHSFTMl zk}>O#Y{lbC7-4pou7B&4AxK<;4%)MnH~|t@0*^)EmX2@#8nOR9(R-#LJy9rVV#PBf z4;?LgTkiQhXAO|YoYrfv$4z{1J#_7)xvzIMzCWI_Y?t3==@WHq_rq*&H?#HOb6#_s zJ*8HKTQ$;WZKa}F&59eb{^uq4nT?LUiH0?-yVSpakt?@5TWvo|vcCQOt3jzReO}&_ zI339Kas2a#6Np(+m#WXn8sFCsctH4F_Byd#`O_$+d;C0W#B*+FJ@{}U?9qa%wT{v; zkGYzbFG}*t5||uA8EMi~Hu8yUwo=|yE8Tqp7s5{tak(axFj3z9gUtAG-a6{<TPo)d zlN~NAZIOFh<MQFThRZI}H&u@u$@MTM!q9KdK=Hsc$9-N3SKLZ|75G-6{OzO)FNe+B zyrV;w7;5Kb3|q%;lRxC-<wMd*ms<ResdGGPKE3IcT!-XLr}tbNGY2)?{^%vUy=dQn z2&($s2YS}tn~m4YiNDnJcHyp?U*adEGAciD^NsQVw99t%f~V4HD<yT^v@V`O0fyYF ziSj2i1H}dG$6s(sN}fwEvk1ycHe4*18*#$>;N)E)DQOWxHRA6kH_V#4Uc14}{Ls<d zob~PF9fsQvs66TDqUu;s8r7HfOh!fCd9lIlLQlt!^M{U0(tX5B7&&sBtlu|l$AQL> zr1OW=V}<9-4mczea`%Ztsr3l+;~UltYl-HXaWpr$OhmJ$wbjVfubjG6zhf_Lf_6%q zvHCC>QuIoJ=%xRZ=<QLc{pF(ft4T~&x!dD3rf&dK@OlyJ3HPYAQL6)8zbp8<50*Pk z2q0WpjR<gy%?NN}F(klUmni|R@gGwd-ylUV7RD)rZ!+QQOFjZ=y!yL9eJzcD8LZzS zp}ogVKKQ9H;nlMheTt38>ReiCA6B_IaIu_M7XR*L!*i!^y=JU8%lAX|rw6i|YxdRV z4|sk-Ec)zq>8qZ?HI#=%Q%CeUd7ozQHpxCU^QDUN(vD*rz#60<KDbG}+-2+AHS8-r zhBR)}XpPhG2^cVzGCbQLtYvCUdCcy0ybU{QIs|r}ls;(KFfX-Z-XOJ&3ur0nciO#l z2hT0#Go$X~sIMN>GW*qor0~Z+pTvvfwfN?3DA_YSrFFeVj9R~Hu4NO=_Rih3n%%Bi z(rM~kHK#**mb8I`#<lQ8KW>*dDnIvb?9%wN$1lYBZXFyKoFYzn_)cwSh>2`Gaqg}x z_pl<Zk0Fm<dF*e}%#f3nOCZLm71<kne6T%`zwW|?^rV<JZE2x)BbU-cLORCue5168 z5s7m)DkfjMmo`1&fX5mALmHg1XL;v55R)XPWH=-ZT^c5IVD8z$Q4{(59RH*!ajkSn z%reiCtGOkc^X(<B=!q1haQaHmYa(un>?yGp9>VKkaC4;kg!%Ig4YFzZ>tpU0fdyyS zgeM}I0(W%<Cznhoo)VnaCspX>ZhZ}B?9*L(F}rz;{D`W$P~!dOS>E*%huaD5m33Dz z8d-X6hQ#{vDLl!eUr`@C(B3m+%+p{KzMC6@%VS0@e`Ygnk-WKakmwxI3$1)grveVh zZk>Koct(6pPPyG%%~RHNzhTvc->?d>Clagv%wZ+1x7lSD17?)(83GjdP7@*z8=bdn zdJYVlU_Jb7-t0^72XlO%?*|jpKYz$hAHy!v&J)<QO>n``yH7NZy%rG`h}}$O=ZrOM zGF`tmUt__>6JTuo{5daOmXMAje8j%+`w*e9dUSyA6?lP2fIkWyyoy$USIeZs*p$km z_rjzwyC2m@fwEmOLnv|Rk{GAJ4c7B*lXr^oP!j5FMA+Xwn-e+Zm61&!tqk=v@4(!{ zABfbrbtlXn)W(dOt$im_OE@LrlJv06VS-cS{XENT?d3POEpxdOGI7TQ*MmxGdM$-V zw;FBOYL&BbOy0Ybamhw`b0>EAZau!UX?(x9aaXTutya~Tded9@hSZc#3mg)fABJ4> zzJF|><*@8xS)M+{R3lS;>fY*wc2f>q`51PjM&p!4fS}gX(WU3jYu1z&W%!OgQ+i{W z^4pI0C1;AWZFiQbR_k6kvr^Sn|Kq9Bho)ZKl(`>$?fva1hU6t$7}}h+xVN)$saM>? zO-;kz=6))W(Di6EjA_(fT-8w3_-s`nyGFsf8!I;1jPY$B6Yyw`<72T^x&qp5QpYW| zPjI_ujJH!bH#+U`{TK2!w_G&6V}b9>)A-+AX&T`dUtRrFMmwNpz0HstZ{1wBQFqFg z_g555^UhMXwz|D==}}jMpn3Xr>g{)4S9q(<A7B4CM0RiHvrnhBJ3<U~5BmuYAp8XR zx+<8BjY{_$+ClgY{m{iF*p@!@6+Eh@QQ5w>rTbBrarPxSu|Js8{iySxZs)>$zZNu> z&a49#^<ks-U`(GnmU{MxU$DikxAP2xuhmbPTD;JANd?EG**hCl9U}ej&^T=iIoByB z3JQRTVc0ytRt<k*;<7R(1iKH7`Yy`1Jl3~_@GbswzDa->01^?b9({~0Ty0>|2wOS& zGjsv4d~g|9Eq8EoT>f2K`#54O&Ze(`@aJhMRR^%KTUv<dIa@I;@~-p=#5m?_BOMKG zY_05<ix?S#$;MDuUPhK6rV&!=#56TINf|nxN@q-SP5qpo{_17+ww59WhN>b)whl1M z<!0gFjHkJ}L~N8F|7aK^_`w*#j%AF%@jQ<otq{A#T+HCB8Mwc7j6l%obUATCLR^B5 z#|To)TS<INSbSMk-<ukQkp`1ylX|6@D@iiu#2^8B-?tqI4tmxYSay_U9OCe@JjXdE zMtEdV%^rz+0vuPYW^1eszqZ8L$@@&gtUbJQ4jTyDMHRPg-Wa@fmay0Wj?6}tbwz#I zL_aOLFBf7SCHOYdsbqoZg``@~oS=aTndX&+YSd2_7uRWqv(H)YMo+#O6+bsvn73v? zV!`R7o(JsY0(MAc$yLq1rk8rWly~jEbq)(wnsU$iuspVE;$f-2L!2a=4+t$YQWQH_ zQDwH!Wwcc`E$PsS7?}?P%0EoLsD5ae<;2)0X<Qk~N1h0U@78w$e}x^<>^3x$NRO6^ z<C6#FEtpnjG^fV3E&4;DC!6IMHYHIRt@66bL6R$~Z|n$Co5p_nK=Z;Sg_#F3eIrMn zoq1YprNYz0Y1WmZ9@V?}*hjk`E0dkYIU!ho`3CocG|9P7&pC=+5y_ulb*yECflagL zJd07c6wQZ8oS41m;LVT{4MYC9#_fKkqb*Mjm2A2cGLADzbK2Xx+isdE2$XHD<-4rA z_in<Tkl-ot0dcSHt*H!qGN@{=gT<WZdpTcb2o|>#CajZjpiEv-a&c1T!StDHt;ebz zPJLfh)ONFE<B5JTLrY}qD>W`pELoToX6>rDo6FC|y<BIpi>g<V&t%~j0mhdNBb7{E zKUJQm=p3pY73+UT#8<v<^rA;i6N@if?o8rZ<nX+3G-ZhR-4V}j&PvlWNaL8d_T<tl z<OpFnaLUl18X>H-ohUCgUDHw}Z~dc0t(P+%D;19>{+tnl0I)rn-*|~WqzcW(jRk+F z<>#vzyMOPnVJC?o9yV+ud;|Uw!v+?Og|vg21+B^2;Bd}l@ah_!bvA9f<&V_%jT?OA z!f8pl#Fq+hMAkRo43Vl2yen8=vCDFNYoxoQ&(IT*Ccc6iGaqe?I~yaeZMb_(Yf_xc zd7G<R?oTBg%G7I{&iF@j4sR|GI8b=Zdbdu!-`y*wkM4iS8$G(|-ufr?Mq~MdHZ&>i zA*x+1Q~Kw(6CYl?NFA8zk#oq<VfBgBaZ?leH7wcBc{g&*mgOG~=LTL@%Ide7$8w9* zC85fa>T4S>4rp>)?3q)2_sQCgbrF|0N}L-DP1Wwi`I}d7R2i+AaM{cGTxi1ih=RZ| zhu7H|uQVSLcY8!xg^S*{#(R%MOs0!`dNe$6`M4EPh2E<t&+98>b6zvGxnOG_p`)@- zB8Y9{?}vogsHUd{Crxydx-495{2{Zc;Kro026I|tB52MT!rEdx`hR*uHydE4u?hKU z4-7wJ`zAQ#`a=JR)(tmiZ|=}Fby+jo;%dEOjE+pzK0f<M!yW#khc-spy1yGfRO9VS zwUx`pCu}vhO=N3ZUfpnR*RA4px1TOlZg~}2qQrlHQIqjRfw(XeCq+HlsPd75R>{YR z7`MI?Vr-h`RvKiQuJzN;9M3f(FAPz5otr0^C!hq&3zdGkMK9a7&2_D|5#gCMFJ0Np zW}vtx7o~an=wcg9>P`Klz5!b|&zy44BQkN(tqtP>AK448kF%jHSqxHm4@hBe7Ab5j zdVg10^vhe!ty7Fy^<3=S_ZJ8|><}VFC&VSh2}$WrD;V60ci#U0){VX^>QCDr>9d2| z>q4?<id0y0?&Di~9=R>JG9-Op#dhmGr|Vm<-?pA#JNsDcCh6c<hlO%|CcQDA9zDNF zXWF5#l%p=%%7X<5#ms)D#T7=AF1$^XsUC80(8nn)Vl&3KwI{AGkXgLWAZYWBA=gSQ z4({rhu&(6X>wwj3UVfCxU_a?TzU;kd?ZXR8PF$pH^NSm+@<G{e|JA2a!RK7&Ik@?0 z9$I)dpzx7z!@l=wZ<cKHI^bT(C;M>!3{ROI+cbF;WCnkX`0$dCx1G-`ly>yvRy_gv z9Ag9ineN*vf}70(7LRjRlzq@BTT`SkFvaN7+)SQvQ%rr<OJ^vrOg=u*WU2bOP4~j4 zTJTL&i(juOvU*5}<iouwP87YiMI-#yR<D?UeD)GzljsrZtsQSydyQ%2jSoJ%L7?v@ z;iqcB`q|tmCl##rrIv-A*dUZJYhjF0e#L`H)*mP)`zfg=t@|9+CakI&kdXhV{iuoz zTY_D>kioc>PiDQ@wlItLd6T|lzh?H^^|R1nx8uv%Rv%V)Kku#QIC>nL;EX*B^b}^e z(YJXB_isRJvJqvrbYs=a#s>#4&z1>uzqHDGS4icS71{Hi`YIVsP^{RKsy9$=&7-3G zQX@C+dC{~e?RAsZt6lC^n<f>+^j#IRK)QI?-m9W16}O_pwW*V1wmFEVzIk2LzwW^a zN9|!D0fn<yTRySu6!p{`7?NbMIHhd$zqNFlR6iPzrge4Y(!Kt51GmS2Vc_af(%WO1 zJc`|lup}&^%%YYAF8=P6R=0UJrn(QaW}xuHf2{J8>MPum#x3T2nmdbJbRbp|w&Xp` zr7ihx!C%d#{dm!C-8_SaFjNujR{5ni(%oa|uW?bKb?amqMl_ez>1z~U?vv9}nWePl z;@b8r=DSR69;QC5wKUr#uF!m|qVlGs=+^6MhLKN16fYa{tD2Y25EzVF^g6f)PhE1( z%0XAw^_2JSshgYJha?#cx<1$>k9~W<qQ#>lDn#l(T&vxEOD1o|?t<|gXFh~08Jrzh zI{b)e5*M3&Vb~3RHy-u!VKu&)iwdsFQOrz62R-x1S#a&i-6>aiJ^N%G+hcx;qvpP+ z{GH)aY3C(YJr4|iq}*>Y*YUY4OotihmIpnS+$OV1KHqO>)*eJLEw6l=5mHL!*j?B^ z*?y_I&+w=5)_X2-FO1%^C~D!jt$NScYJ;Zx>)c-NA+vCjd~s>Xp^`qI($nrFA9`HU zIAnRFR+`ylnSPR9vz*+88t&Yjkd>wL`1GkIZbCI;d2f&0FLTj}*`RbR!n)jz*sQ9| zE5D&Nqi=!c*ej(sJhm1kZfI6C%(J*E;23DJWyz}dwKQS*ezEz!=bt++(fxS4V969o zsqr0={X5j(d3#?QQ%guqUwBO+^>N@p!)<&!?kq^7To@oW?cse*4U_48g*f-Q-b^y} z7hLplip+fxiwkq}17n-brPmxe<)L1y$F_Wb(tCl!Gor@RJOp%o_Z>)9m2g`4qV~Dl z<Pj-iOKy+kyEF3fY`<ESTtQ{dy{DDLCZC*{6ULoeU%TbB#%q2nC7&!LH&R?wqVCRJ z@pE)Pu2~?SmGKnay1zi|;+Z-Mr3dNHI#cJz9tjf>pC?FY{B#;91;e_gS77#zkL7p9 z^j+7?9tWMD^z~%UdzgGReaEZQ$Wtgb$I|6xPP<Ujlt&}%+(#A0X5SO2IwU!7vB@pM z_aaO7wCQx;V}x%U;TuEvMzM=DD;`>Yj>A#MD#$)Mx4dJ%{!1f6Cl$5Pllb;+)LB<- zKzI^XvCz}~=>ztjiRs6-loj}abU!wjSYp#U?8l}KXH}5>lW=wWQF#vk4@?6^kL?4< za&dA@>BmMJ#x|JJF`X_KIddLWReH|dw>Ht+Ox<&CM1kkUUs7ePeQ;k63b1vZ_q5Bz z7(sq=u8xoat`#@wdLY~RfN&$^KTiy@Q|VKQ$wZ&d46vIC7yP5qj5c&$47|hq)yG>A z|0>P$EsZ{r7~eI+ji(uDQGEz*{5>1jVUfe+H8n7*8@z0OR4Rpi@AOR*Ryy1~lGn2D z)_k6)rN)aEj6b+5eZ=q-yO*;!iux`RjtaXRo2lDS6Yqazgmh3txO4dX>DLmL&Y59& zqvgW*F|Mh~+oDrEjoRnz@;Z1gs%F0uF<voV{PER|k5q(x%k;K+ZJj#5<cZ>p*jApc z5p5?zXH^yJ4c2=|-+eH1<cGzl9ix{fERZ|ox@o@FbtToty118u_32yYY?s!G;8or} zPatG`m2#elyR>M|#T7<^hnGF{S+sf67WYcCh&u=EM8kKb24BuT?h((?adf~|sU7n# z2=DTGt}Uw)pb=4-U-$mV{a0mC1_?#0q{5CW`YW8#UGVX>&TZNImjYjuJZto*VWkOU zQl17X-doZ6Vs<LC!p2s$Jt%Gx_291IYv4`d<Xg0*ugP8C(P`@Q#E0MG&<@tF%ihpZ zA3k+Sj<{lwZ^yH?8!7DuDa%{}Z!eOKldlq4-(NvId3?-;*wI|e%;$`|FBbgRHZEyT zNd7#BW%i@|(crkc_Q?T3(`se+T^}{}r1|V8#RL4#d`j@ydQf*#p8EoekWsfTy%}OT z$ZY`I+5t-7-MPQPiO=54WJXZ!6@}P?$^QHotNBj6uoxG#dcmHFL0N$%hXjb+!u_#P zAt$vuI{IEtoN(dQV5y4(YQ551a@1=y0}r$)yBwrOwY-1W?yey}Ie5D$l~>zgM{y>H z@ur%6iV1P=%H&px%{VZIKOw6%vp%LSPgKhNR@u^%0t1bP_oeOOnK2<fvMDk&Zb!4W z)PYj3i;-iO79MDO??DqDJN7y+n`?krUt4FzT!%u9`v$W^!aS;%tS+sQe`s2D#a4Ao z;Vng%VPj;~8^jOWsjQVr(pG#ZZ7VG7b0PEuU3sfyrR7GmaCGaY@s3I*q5dh09$$-{ z7dTpbYIbNxEiF`_oa(cq!zbqhcc}T4*Ll&^ZL9Z6KFHqL;uiCuLQ>Rw&V%q|UG4n? zLsUc!s}9?~QISdvkNeQRuHY#<UqxN@mitzAy2ATI%Fm^q>2Q&jj2xce<ya>3fje&D WBhEqLju)O+ZP|B@-I-h%`2PR`%`TPz diff --git a/Python314_4_x86_Template/vcruntime140.dll b/Python314_4_x86_Template/vcruntime140.dll deleted file mode 100644 index 6d3973935cd9a3943b0eaad9e2747114930c4f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90192 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 H_Coz1s-B*F From ec102748ff6efce63b82d0eb083e45eda5f43a40 Mon Sep 17 00:00:00 2001 From: Adrian Vladu <avladu@cloudbasesolutions.com> Date: Wed, 5 Aug 2026 14:31:14 +0300 Subject: [PATCH 2/2] Throw an execption when trying to build x86 installers Signed-off-by: Adrian Vladu <avladu@cloudbasesolutions.com> --- BuildAutomation/BuildCloudbaseInitSetup.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildAutomation/BuildCloudbaseInitSetup.ps1 b/BuildAutomation/BuildCloudbaseInitSetup.ps1 index a69d9a34c..5c973d5a3 100644 --- a/BuildAutomation/BuildCloudbaseInitSetup.ps1 +++ b/BuildAutomation/BuildCloudbaseInitSetup.ps1 @@ -28,7 +28,7 @@ $platformVCVarsRequired = "x86_amd64" # On Visual Studio 2019, the mixed x86_amd64 VC variables # make compilation for x86 use the x64 functions if ($platform -eq "x86") { - $platformVCVarsRequired = "x86" + throw "Platform x86 is no longer supported. See https://github.com/cloudbase/cloudbase-init/issues/213" } # Fix required to allow for >= 255 characters paths. Required for Python folder bundling.